From 604793eab97d360aef729f064674569ee6dbf3e1 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Wed, 17 Jun 2015 22:04:32 -0700 Subject: [PATCH] Delete old versions of cloog. Change-Id: Ic3dcd5486884b96340ed3c7d029e3204dbfec8d9 --- cloog-0.16.3/CLOOG_HEAD | 1 - cloog-0.16.3/ChangeLog | 11 - cloog-0.16.3/Makefile.am | 177 - cloog-0.16.3/Makefile.in | 1372 -- cloog-0.16.3/README | 203 - cloog-0.16.3/aclocal.m4 | 991 - cloog-0.16.3/autoconf/Doxyfile.in | 1101 - cloog-0.16.3/autoconf/config.guess | 1502 -- cloog-0.16.3/autoconf/config.sub | 1731 -- cloog-0.16.3/autoconf/depcomp | 589 - cloog-0.16.3/autoconf/install-sh | 524 - cloog-0.16.3/autoconf/ltmain.sh | 8750 ------- cloog-0.16.3/autoconf/missing | 367 - cloog-0.16.3/configure | 15022 ------------ cloog-0.16.3/configure.ac | 222 - cloog-0.16.3/doc/Makefile.am | 7 - cloog-0.16.3/doc/Makefile.in | 383 - cloog-0.16.3/doc/TODO | 58 - cloog-0.16.3/doc/cloog.pdf | Bin 321550 -> 0 bytes cloog-0.16.3/doc/cloog.texi | 2542 -- cloog-0.16.3/doc/images/basic.eps | 402 - cloog-0.16.3/doc/images/basic.fig | 100 - cloog-0.16.3/doc/images/basic.jpg | Bin 21180 -> 0 bytes cloog-0.16.3/doc/images/basic.pdf | Bin 40073 -> 0 bytes cloog-0.16.3/doc/images/basic.txt | 13 - cloog-0.16.3/doc/images/tree.eps | 258 - cloog-0.16.3/doc/images/tree.fig | 54 - cloog-0.16.3/doc/images/tree.jpg | Bin 13713 -> 0 bytes cloog-0.16.3/doc/images/tree.pdf | Bin 4558 -> 0 bytes cloog-0.16.3/doc/images/tree.txt | 25 - cloog-0.16.3/examples/README | 58 - cloog-0.16.3/examples/example/Makefile | 21 - cloog-0.16.3/examples/example/example.c | 29 - cloog-0.16.3/genversion.sh.in | 15 - cloog-0.16.3/include/cloog/block.h | 117 - cloog-0.16.3/include/cloog/clast.h | 154 - cloog-0.16.3/include/cloog/cloog.h | 62 - cloog-0.16.3/include/cloog/constraints.h | 121 - cloog-0.16.3/include/cloog/domain.h | 172 - cloog-0.16.3/include/cloog/input.h | 24 - cloog-0.16.3/include/cloog/int.h | 174 - cloog-0.16.3/include/cloog/isl/backend.h | 11 - cloog-0.16.3/include/cloog/isl/cloog.h | 22 - .../include/cloog/isl/constraintset.h | 33 - cloog-0.16.3/include/cloog/isl/domain.h | 36 - cloog-0.16.3/include/cloog/loop.h | 120 - cloog-0.16.3/include/cloog/matrix.h | 59 - .../include/cloog/matrix/constraintset.h | 28 - cloog-0.16.3/include/cloog/names.h | 103 - cloog-0.16.3/include/cloog/options.h | 159 - cloog-0.16.3/include/cloog/pprint.h | 68 - cloog-0.16.3/include/cloog/program.h | 116 - cloog-0.16.3/include/cloog/state.h | 46 - cloog-0.16.3/include/cloog/statement.h | 85 - cloog-0.16.3/include/cloog/stride.h | 33 - cloog-0.16.3/include/cloog/union_domain.h | 48 - cloog-0.16.3/include/cloog/version.h | 50 - cloog-0.16.3/include/cloog/version.h.in | 50 - cloog-0.16.3/isl/AUTHORS | 19 - cloog-0.16.3/isl/ChangeLog | 51 - cloog-0.16.3/isl/GIT_HEAD_ID | 1 - cloog-0.16.3/isl/Makefile.am | 263 - cloog-0.16.3/isl/Makefile.in | 2198 -- cloog-0.16.3/isl/aclocal.m4 | 995 - cloog-0.16.3/isl/basis_reduction_tab.c | 243 - cloog-0.16.3/isl/basis_reduction_templ.c | 356 - cloog-0.16.3/isl/bound.c | 278 - cloog-0.16.3/isl/bound_test.sh.in | 35 - cloog-0.16.3/isl/cat.c | 58 - cloog-0.16.3/isl/closure.c | 33 - cloog-0.16.3/isl/config.guess | 1502 -- cloog-0.16.3/isl/config.sub | 1731 -- cloog-0.16.3/isl/configure | 15960 ------------ cloog-0.16.3/isl/configure.ac | 112 - cloog-0.16.3/isl/depcomp | 589 - cloog-0.16.3/isl/doc/Makefile.am | 17 - cloog-0.16.3/isl/doc/Makefile.in | 399 - cloog-0.16.3/isl/doc/chicago.bst | 1726 -- cloog-0.16.3/isl/doc/chicago.sty | 320 - cloog-0.16.3/isl/doc/implementation.tex | 2036 -- cloog-0.16.3/isl/doc/isl.bib | 313 - cloog-0.16.3/isl/doc/manual.pdf | Bin 420168 -> 0 bytes cloog-0.16.3/isl/doc/manual.tex | 75 - cloog-0.16.3/isl/doc/mypod2latex | 14 - cloog-0.16.3/isl/doc/user.pod | 3376 --- cloog-0.16.3/isl/include/isl/aff.h | 160 - cloog-0.16.3/isl/include/isl/aff_type.h | 10 - cloog-0.16.3/isl/include/isl/arg.h | 285 - cloog-0.16.3/isl/include/isl/band.h | 42 - cloog-0.16.3/isl/include/isl/blk.h | 40 - cloog-0.16.3/isl/include/isl/config.h.in | 3 - cloog-0.16.3/isl/include/isl/constraint.h | 128 - cloog-0.16.3/isl/include/isl/ctx.h | 155 - cloog-0.16.3/isl/include/isl/dim.h | 108 - cloog-0.16.3/isl/include/isl/div.h | 47 - cloog-0.16.3/isl/include/isl/flow.h | 54 - cloog-0.16.3/isl/include/isl/hash.h | 79 - cloog-0.16.3/isl/include/isl/ilp.h | 32 - cloog-0.16.3/isl/include/isl/int.h | 133 - cloog-0.16.3/isl/include/isl/list.h | 51 - cloog-0.16.3/isl/include/isl/local_space.h | 55 - cloog-0.16.3/isl/include/isl/lp.h | 50 - cloog-0.16.3/isl/include/isl/map.h | 472 - cloog-0.16.3/isl/include/isl/map_type.h | 26 - cloog-0.16.3/isl/include/isl/mat.h | 113 - cloog-0.16.3/isl/include/isl/obj.h | 64 - cloog-0.16.3/isl/include/isl/options.h | 76 - cloog-0.16.3/isl/include/isl/point.h | 40 - cloog-0.16.3/isl/include/isl/polynomial.h | 555 - cloog-0.16.3/isl/include/isl/printer.h | 58 - cloog-0.16.3/isl/include/isl/schedule.h | 35 - cloog-0.16.3/isl/include/isl/seq.h | 58 - cloog-0.16.3/isl/include/isl/set.h | 401 - cloog-0.16.3/isl/include/isl/set_type.h | 6 - cloog-0.16.3/isl/include/isl/stream.h | 105 - cloog-0.16.3/isl/include/isl/union_map.h | 150 - cloog-0.16.3/isl/include/isl/union_set.h | 103 - cloog-0.16.3/isl/include/isl/vec.h | 74 - cloog-0.16.3/isl/include/isl/version.h | 14 - cloog-0.16.3/isl/include/isl/vertices.h | 46 - cloog-0.16.3/isl/install-sh | 524 - cloog-0.16.3/isl/isl.py | 100 - cloog-0.16.3/isl/isl_aff.c | 1347 - cloog-0.16.3/isl/isl_aff_private.h | 45 - cloog-0.16.3/isl/isl_affine_hull.c | 1018 - cloog-0.16.3/isl/isl_arg.c | 1110 - cloog-0.16.3/isl/isl_band.c | 202 - cloog-0.16.3/isl/isl_band_private.h | 36 - cloog-0.16.3/isl/isl_basis_reduction.h | 27 - cloog-0.16.3/isl/isl_bernstein.c | 548 - cloog-0.16.3/isl/isl_bernstein.h | 4 - cloog-0.16.3/isl/isl_blk.c | 134 - cloog-0.16.3/isl/isl_bound.c | 331 - cloog-0.16.3/isl/isl_bound.h | 20 - cloog-0.16.3/isl/isl_coalesce.c | 1294 - cloog-0.16.3/isl/isl_config.h.in | 100 - cloog-0.16.3/isl/isl_config_post.h | 7 - cloog-0.16.3/isl/isl_constraint.c | 1181 - cloog-0.16.3/isl/isl_constraint_private.h | 17 - cloog-0.16.3/isl/isl_convex_hull.c | 2426 -- cloog-0.16.3/isl/isl_ctx.c | 186 - cloog-0.16.3/isl/isl_ctx_private.h | 28 - cloog-0.16.3/isl/isl_dim.c | 1345 - cloog-0.16.3/isl/isl_dim_map.c | 233 - cloog-0.16.3/isl/isl_dim_map.h | 36 - cloog-0.16.3/isl/isl_dim_private.h | 38 - cloog-0.16.3/isl/isl_div.c | 191 - cloog-0.16.3/isl/isl_div_private.h | 10 - cloog-0.16.3/isl/isl_equalities.c | 697 - cloog-0.16.3/isl/isl_equalities.h | 31 - cloog-0.16.3/isl/isl_factorization.c | 331 - cloog-0.16.3/isl/isl_factorization.h | 29 - cloog-0.16.3/isl/isl_farkas.c | 385 - cloog-0.16.3/isl/isl_flow.c | 1304 - cloog-0.16.3/isl/isl_fold.c | 1583 -- cloog-0.16.3/isl/isl_gmp.c | 24 - cloog-0.16.3/isl/isl_hash.c | 210 - cloog-0.16.3/isl/isl_hmap_map_basic_set.c | 102 - cloog-0.16.3/isl/isl_hmap_map_basic_set.h | 26 - cloog-0.16.3/isl/isl_ilp.c | 479 - cloog-0.16.3/isl/isl_input.c | 2554 -- cloog-0.16.3/isl/isl_list.c | 33 - cloog-0.16.3/isl/isl_list_private.h | 26 - cloog-0.16.3/isl/isl_list_templ.c | 170 - cloog-0.16.3/isl/isl_list_templ.h | 23 - cloog-0.16.3/isl/isl_local_space.c | 612 - cloog-0.16.3/isl/isl_local_space_private.h | 43 - cloog-0.16.3/isl/isl_lp.c | 203 - cloog-0.16.3/isl/isl_lp_no_piplib.c | 18 - cloog-0.16.3/isl/isl_lp_piplib.c | 106 - cloog-0.16.3/isl/isl_lp_piplib.h | 28 - cloog-0.16.3/isl/isl_map.c | 8951 ------- cloog-0.16.3/isl/isl_map_no_piplib.c | 20 - cloog-0.16.3/isl/isl_map_piplib.c | 476 - cloog-0.16.3/isl/isl_map_piplib.h | 27 - cloog-0.16.3/isl/isl_map_private.h | 311 - cloog-0.16.3/isl/isl_map_simplify.c | 2497 -- cloog-0.16.3/isl/isl_map_subtract.c | 790 - cloog-0.16.3/isl/isl_mat.c | 1625 -- cloog-0.16.3/isl/isl_mat_private.h | 29 - cloog-0.16.3/isl/isl_morph.c | 777 - cloog-0.16.3/isl/isl_morph.h | 78 - cloog-0.16.3/isl/isl_name.c | 104 - cloog-0.16.3/isl/isl_name.h | 36 - cloog-0.16.3/isl/isl_obj.c | 425 - cloog-0.16.3/isl/isl_options.c | 134 - cloog-0.16.3/isl/isl_output.c | 2465 -- cloog-0.16.3/isl/isl_piplib.c | 26 - cloog-0.16.3/isl/isl_piplib.h | 28 - cloog-0.16.3/isl/isl_point.c | 488 - cloog-0.16.3/isl/isl_point_private.h | 12 - cloog-0.16.3/isl/isl_polynomial.c | 4624 ---- cloog-0.16.3/isl/isl_polynomial_private.h | 215 - cloog-0.16.3/isl/isl_printer.c | 366 - cloog-0.16.3/isl/isl_printer_private.h | 17 - cloog-0.16.3/isl/isl_pw_templ.c | 1074 - cloog-0.16.3/isl/isl_qsort.c | 249 - cloog-0.16.3/isl/isl_qsort.h | 7 - cloog-0.16.3/isl/isl_range.c | 483 - cloog-0.16.3/isl/isl_range.h | 6 - cloog-0.16.3/isl/isl_reordering.c | 197 - cloog-0.16.3/isl/isl_reordering.h | 31 - cloog-0.16.3/isl/isl_sample.c | 1357 - cloog-0.16.3/isl/isl_sample.h | 35 - cloog-0.16.3/isl/isl_sample_no_piplib.c | 16 - cloog-0.16.3/isl/isl_sample_piplib.c | 73 - cloog-0.16.3/isl/isl_sample_piplib.h | 25 - cloog-0.16.3/isl/isl_scan.c | 304 - cloog-0.16.3/isl/isl_scan.h | 24 - cloog-0.16.3/isl/isl_schedule.c | 2742 --- cloog-0.16.3/isl/isl_schedule_private.h | 44 - cloog-0.16.3/isl/isl_seq.c | 291 - cloog-0.16.3/isl/isl_stream.c | 680 - cloog-0.16.3/isl/isl_tab.c | 3342 --- cloog-0.16.3/isl/isl_tab.h | 289 - cloog-0.16.3/isl/isl_tab_pip.c | 4991 ---- cloog-0.16.3/isl/isl_test.c | 2386 -- cloog-0.16.3/isl/isl_transitive_closure.c | 3103 --- cloog-0.16.3/isl/isl_union_map.c | 2042 -- cloog-0.16.3/isl/isl_union_map_private.h | 9 - cloog-0.16.3/isl/isl_union_templ.c | 614 - cloog-0.16.3/isl/isl_vec.c | 335 - cloog-0.16.3/isl/isl_version.c | 6 - cloog-0.16.3/isl/isl_vertices.c | 1571 -- cloog-0.16.3/isl/isl_vertices_private.h | 64 - cloog-0.16.3/isl/ltmain.sh | 8750 ------- cloog-0.16.3/isl/m4/ax_c___attribute__.m4 | 66 - cloog-0.16.3/isl/m4/ax_cc_maxopt.m4 | 188 - .../isl/m4/ax_check_compiler_flags.m4 | 74 - cloog-0.16.3/isl/m4/ax_compiler_vendor.m4 | 63 - .../isl/m4/ax_create_pkgconfig_info.m4 | 349 - cloog-0.16.3/isl/m4/ax_create_stdint_h.m4 | 739 - cloog-0.16.3/isl/m4/ax_detect_git_head.m4 | 27 - cloog-0.16.3/isl/m4/ax_gcc_archflag.m4 | 213 - .../isl/m4/ax_gcc_warn_unused_result.m4 | 56 - cloog-0.16.3/isl/m4/ax_gcc_x86_cpuid.m4 | 77 - cloog-0.16.3/isl/m4/ax_set_warning_flags.m4 | 17 - cloog-0.16.3/isl/m4/ax_submodule.m4 | 71 - cloog-0.16.3/isl/m4/libtool.m4 | 7437 ------ cloog-0.16.3/isl/m4/ltoptions.m4 | 369 - cloog-0.16.3/isl/m4/ltsugar.m4 | 123 - cloog-0.16.3/isl/m4/ltversion.m4 | 23 - cloog-0.16.3/isl/m4/lt~obsolete.m4 | 98 - cloog-0.16.3/isl/missing | 367 - cloog-0.16.3/isl/mp_get_memory_functions.c | 14 - cloog-0.16.3/isl/pip.c | 337 - cloog-0.16.3/isl/pip_test.sh.in | 26 - .../isl/polyhedron_detect_equalities.c | 24 - cloog-0.16.3/isl/polyhedron_minimize.c | 104 - cloog-0.16.3/isl/polyhedron_sample.c | 36 - cloog-0.16.3/isl/polytope_scan.c | 103 - cloog-0.16.3/isl/test_inputs/affine.polylib | 9 - cloog-0.16.3/isl/test_inputs/affine2.polylib | 9 - cloog-0.16.3/isl/test_inputs/affine3.polylib | 7 - .../isl/test_inputs/application.omega | 3 - .../isl/test_inputs/application2.omega | 3 - cloog-0.16.3/isl/test_inputs/basicLinear.pwqp | 1 - .../isl/test_inputs/basicLinear2.pwqp | 1 - cloog-0.16.3/isl/test_inputs/basicTest.pwqp | 1 - .../test_inputs/basicTestParameterPosNeg.pwqp | 1 - cloog-0.16.3/isl/test_inputs/boulet.pip | 13 - cloog-0.16.3/isl/test_inputs/brisebarre.pip | 34 - cloog-0.16.3/isl/test_inputs/cg1.pip | 15 - cloog-0.16.3/isl/test_inputs/convex0.polylib | 11 - cloog-0.16.3/isl/test_inputs/convex1.polylib | 17 - cloog-0.16.3/isl/test_inputs/convex10.polylib | 17 - cloog-0.16.3/isl/test_inputs/convex11.polylib | 14 - cloog-0.16.3/isl/test_inputs/convex12.polylib | 12 - cloog-0.16.3/isl/test_inputs/convex13.polylib | 17 - cloog-0.16.3/isl/test_inputs/convex14.polylib | 14 - cloog-0.16.3/isl/test_inputs/convex15.polylib | 66 - cloog-0.16.3/isl/test_inputs/convex2.polylib | 24 - cloog-0.16.3/isl/test_inputs/convex3.polylib | 10 - cloog-0.16.3/isl/test_inputs/convex4.polylib | 9 - cloog-0.16.3/isl/test_inputs/convex5.polylib | 12 - cloog-0.16.3/isl/test_inputs/convex6.polylib | 17 - cloog-0.16.3/isl/test_inputs/convex7.polylib | 9 - cloog-0.16.3/isl/test_inputs/convex8.polylib | 24 - cloog-0.16.3/isl/test_inputs/convex9.polylib | 14 - cloog-0.16.3/isl/test_inputs/devos.pwqp | 1 - cloog-0.16.3/isl/test_inputs/equality1.pwqp | 1 - cloog-0.16.3/isl/test_inputs/equality2.pwqp | 1 - cloog-0.16.3/isl/test_inputs/equality3.pwqp | 1 - cloog-0.16.3/isl/test_inputs/equality4.pwqp | 1 - cloog-0.16.3/isl/test_inputs/equality5.pwqp | 1 - cloog-0.16.3/isl/test_inputs/esced.pip | 27 - cloog-0.16.3/isl/test_inputs/ex.pip | 9 - cloog-0.16.3/isl/test_inputs/ex2.pip | 9 - cloog-0.16.3/isl/test_inputs/faddeev.pwqp | 1 - cloog-0.16.3/isl/test_inputs/fimmel.pip | 12 - cloog-0.16.3/isl/test_inputs/gist1.polylib | 14 - .../isl/test_inputs/linearExample.pwqp | 1 - cloog-0.16.3/isl/test_inputs/max.pip | 9 - cloog-0.16.3/isl/test_inputs/neg.pwqp | 1 - cloog-0.16.3/isl/test_inputs/negative.pip | 9 - cloog-0.16.3/isl/test_inputs/philippe.pwqp | 1 - .../isl/test_inputs/philippe3vars.pwqp | 1 - .../isl/test_inputs/philippe3vars3pars.pwqp | 1 - cloog-0.16.3/isl/test_inputs/philippeNeg.pwqp | 1 - .../test_inputs/philippePolynomialCoeff.pwqp | 1 - .../philippePolynomialCoeff1P.pwqp | 1 - cloog-0.16.3/isl/test_inputs/product.pwqp | 1 - cloog-0.16.3/isl/test_inputs/seghir-vd.pip | 17 - cloog-0.16.3/isl/test_inputs/set.omega | 1 - cloog-0.16.3/isl/test_inputs/small.pip | 9 - cloog-0.16.3/isl/test_inputs/sor1d.pip | 28 - cloog-0.16.3/isl/test_inputs/split.pwqp | 1 - cloog-0.16.3/isl/test_inputs/square.pip | 9 - cloog-0.16.3/isl/test_inputs/sven.pip | 7 - .../isl/test_inputs/test3Deg3Var.pwqp | 1 - cloog-0.16.3/isl/test_inputs/tobi.pip | 15 - cloog-0.16.3/isl/test_inputs/toplas.pwqp | 1 - cloog-0.16.3/isl/test_inputs/unexpanded.pwqp | 1 - cloog-0.16.3/m4/ax_cc_maxopt.m4 | 178 - cloog-0.16.3/m4/ax_cflags_warn_all.m4 | 149 - cloog-0.16.3/m4/ax_check_compiler_flags.m4 | 74 - cloog-0.16.3/m4/ax_compiler_vendor.m4 | 61 - cloog-0.16.3/m4/ax_create_pkgconfig_info.m4 | 349 - cloog-0.16.3/m4/ax_gcc_archflag.m4 | 213 - cloog-0.16.3/m4/ax_gcc_x86_cpuid.m4 | 77 - cloog-0.16.3/m4/ax_submodule.m4 | 63 - cloog-0.16.3/m4/libtool.m4 | 7437 ------ cloog-0.16.3/m4/ltoptions.m4 | 369 - cloog-0.16.3/m4/ltsugar.m4 | 123 - cloog-0.16.3/m4/ltversion.m4 | 23 - cloog-0.16.3/m4/lt~obsolete.m4 | 98 - cloog-0.16.3/source/block.c | 404 - cloog-0.16.3/source/clast.c | 1895 -- cloog-0.16.3/source/cloog.c | 98 - cloog-0.16.3/source/input.c | 177 - cloog-0.16.3/source/int.c | 177 - cloog-0.16.3/source/isl/backend.c | 37 - cloog-0.16.3/source/isl/constraints.c | 967 - cloog-0.16.3/source/isl/domain.c | 1836 -- cloog-0.16.3/source/loop.c | 2665 -- cloog-0.16.3/source/matrix.c | 213 - cloog-0.16.3/source/matrix/constraintset.c | 1056 - cloog-0.16.3/source/mp_get_memory_functions.c | 14 - cloog-0.16.3/source/names.c | 528 - cloog-0.16.3/source/options.c | 464 - cloog-0.16.3/source/pprint.c | 423 - cloog-0.16.3/source/program.c | 1077 - cloog-0.16.3/source/state.c | 52 - cloog-0.16.3/source/statement.c | 280 - cloog-0.16.3/source/stride.c | 70 - cloog-0.16.3/source/union_domain.c | 298 - cloog-0.16.3/source/version.c | 24 - cloog-0.16.3/source/version.c.in | 24 - cloog-0.16.3/test/0D-1.c | 2 - cloog-0.16.3/test/0D-1.cloog | 13 - cloog-0.16.3/test/0D-1.good.c | 15 - cloog-0.16.3/test/0D-2.c | 4 - cloog-0.16.3/test/0D-2.cloog | 14 - cloog-0.16.3/test/0D-2.good.c | 17 - cloog-0.16.3/test/0D-3.c | 2 - cloog-0.16.3/test/0D-3.cloog | 15 - cloog-0.16.3/test/0D-3.good.c | 15 - cloog-0.16.3/test/1point-1.c | 2 - cloog-0.16.3/test/1point-1.cloog | 23 - cloog-0.16.3/test/1point-1.good.c | 18 - cloog-0.16.3/test/1point-2.c | 2 - cloog-0.16.3/test/1point-2.cloog | 23 - cloog-0.16.3/test/1point-2.good.c | 19 - cloog-0.16.3/test/4-param.c | 17 - cloog-0.16.3/test/4-param.cloog | 33 - cloog-0.16.3/test/4-param.good.c | 33 - cloog-0.16.3/test/Makefile.am | 424 - cloog-0.16.3/test/Makefile.in | 929 - cloog-0.16.3/test/backtrack.c | 2 - cloog-0.16.3/test/backtrack.cloog | 24 - cloog-0.16.3/test/backtrack.good.c | 19 - cloog-0.16.3/test/basic-bounds-1.c | 4 - cloog-0.16.3/test/basic-bounds-1.cloog | 21 - cloog-0.16.3/test/basic-bounds-1.good.c | 19 - cloog-0.16.3/test/basic-bounds-2.c | 2 - cloog-0.16.3/test/basic-bounds-2.cloog | 21 - cloog-0.16.3/test/basic-bounds-2.good.c | 17 - cloog-0.16.3/test/basic-bounds-3.c | 4 - cloog-0.16.3/test/basic-bounds-3.cloog | 23 - cloog-0.16.3/test/basic-bounds-3.good.c | 19 - cloog-0.16.3/test/basic-bounds-4.c | 4 - cloog-0.16.3/test/basic-bounds-4.cloog | 23 - cloog-0.16.3/test/basic-bounds-4.good.c | 19 - cloog-0.16.3/test/basic-bounds-5.c | 3 - cloog-0.16.3/test/basic-bounds-5.cloog | 22 - cloog-0.16.3/test/basic-bounds-5.good.c | 18 - cloog-0.16.3/test/basic-bounds-6.c | 2 - cloog-0.16.3/test/basic-bounds-6.cloog | 20 - cloog-0.16.3/test/basic-bounds-6.good.c | 17 - cloog-0.16.3/test/block.c | 5 - cloog-0.16.3/test/block.cloog | 42 - cloog-0.16.3/test/block.good.c | 24 - cloog-0.16.3/test/block2.c | 6 - cloog-0.16.3/test/block2.cloog | 77 - cloog-0.16.3/test/block2.good.c | 25 - cloog-0.16.3/test/block3.c | 5 - cloog-0.16.3/test/block3.cloog | 36 - cloog-0.16.3/test/block3.good.c | 24 - cloog-0.16.3/test/byu98-1-2-3.c | 24 - cloog-0.16.3/test/byu98-1-2-3.cloog | 65 - cloog-0.16.3/test/byu98-1-2-3.good.c | 41 - cloog-0.16.3/test/cholesky.c | 36 - cloog-0.16.3/test/cholesky.cloog | 129 - cloog-0.16.3/test/cholesky.good.c | 56 - cloog-0.16.3/test/cholesky2.c | 67 - cloog-0.16.3/test/cholesky2.cloog | 108 - cloog-0.16.3/test/cholesky2.good.c | 114 - cloog-0.16.3/test/christian.c | 17 - cloog-0.16.3/test/christian.cloog | 57 - cloog-0.16.3/test/christian.good.c | 35 - cloog-0.16.3/test/classen.c | 101 - cloog-0.16.3/test/classen.cloog | 233 - cloog-0.16.3/test/classen.good.c | 396 - cloog-0.16.3/test/classen2.c | 10 - cloog-0.16.3/test/classen2.cloog | 57 - cloog-0.16.3/test/classen2.good.c | 27 - cloog-0.16.3/test/constant.c | 17 - cloog-0.16.3/test/constant.cloog | 128 - cloog-0.16.3/test/constant.good.c | 39 - cloog-0.16.3/test/constbound.c | 13 - cloog-0.16.3/test/constbound.cloog | 53 - cloog-0.16.3/test/constbound.good.c | 31 - cloog-0.16.3/test/darte.c | 65 - cloog-0.16.3/test/darte.cloog | 52 - cloog-0.16.3/test/darte.good.c | 449 - cloog-0.16.3/test/dartef.cloog | 52 - cloog-0.16.3/test/dartef.f | 65 - cloog-0.16.3/test/dealII.c | 14 - cloog-0.16.3/test/dealII.cloog | 54 - cloog-0.16.3/test/dealII.good.c | 30 - cloog-0.16.3/test/donotsimp.c | 9 - cloog-0.16.3/test/donotsimp.cloog | 54 - cloog-0.16.3/test/donotsimp.good.c | 27 - cloog-0.16.3/test/dot.c | 9 - cloog-0.16.3/test/dot.cloog | 33 - cloog-0.16.3/test/dot.good.c | 25 - cloog-0.16.3/test/dot2.c | 15 - cloog-0.16.3/test/dot2.cloog | 29 - cloog-0.16.3/test/dot2.good.c | 31 - cloog-0.16.3/test/double.c | 11 - cloog-0.16.3/test/double.cloog | 69 - cloog-0.16.3/test/double.good.c | 27 - cloog-0.16.3/test/durbin_e_s.c | 25 - cloog-0.16.3/test/durbin_e_s.cloog | 71 - cloog-0.16.3/test/durbin_e_s.good.c | 78 - cloog-0.16.3/test/emploi.c | 16 - cloog-0.16.3/test/emploi.cloog | 49 - cloog-0.16.3/test/emploi.good.c | 35 - cloog-0.16.3/test/equality.c | 11 - cloog-0.16.3/test/equality.cloog | 33 - cloog-0.16.3/test/equality.good.c | 27 - cloog-0.16.3/test/equality2.c | 15 - cloog-0.16.3/test/equality2.cloog | 57 - cloog-0.16.3/test/equality2.good.c | 31 - cloog-0.16.3/test/esced.c | 16 - cloog-0.16.3/test/esced.cloog | 30 - cloog-0.16.3/test/esced.good.c | 30 - cloog-0.16.3/test/ex1.c | 18 - cloog-0.16.3/test/ex1.cloog | 34 - cloog-0.16.3/test/ex1.good.c | 34 - cloog-0.16.3/test/forwardsub-1-1-2.c | 11 - cloog-0.16.3/test/forwardsub-1-1-2.cloog | 56 - cloog-0.16.3/test/forwardsub-1-1-2.good.c | 29 - cloog-0.16.3/test/forwardsub-2-1-2-3.c | 12 - cloog-0.16.3/test/forwardsub-2-1-2-3.cloog | 58 - cloog-0.16.3/test/forwardsub-2-1-2-3.good.c | 30 - cloog-0.16.3/test/forwardsub-3-1-2.c | 23 - cloog-0.16.3/test/forwardsub-3-1-2.cloog | 57 - cloog-0.16.3/test/forwardsub-3-1-2.good.c | 42 - cloog-0.16.3/test/gauss.c | 18 - cloog-0.16.3/test/gauss.cloog | 72 - cloog-0.16.3/test/gauss.good.c | 36 - cloog-0.16.3/test/generate_test.c | 153 - cloog-0.16.3/test/gesced.c | 20 - cloog-0.16.3/test/gesced.cloog | 56 - cloog-0.16.3/test/gesced.good.c | 43 - cloog-0.16.3/test/gesced2.c | 26 - cloog-0.16.3/test/gesced2.cloog | 82 - cloog-0.16.3/test/gesced2.good.c | 69 - cloog-0.16.3/test/gesced3.c | 11 - cloog-0.16.3/test/gesced3.cloog | 39 - cloog-0.16.3/test/gesced3.good.c | 33 - cloog-0.16.3/test/guide.c | 9 - cloog-0.16.3/test/guide.cloog | 35 - cloog-0.16.3/test/guide.good.c | 28 - cloog-0.16.3/test/iftest.c | 6 - cloog-0.16.3/test/iftest.cloog | 28 - cloog-0.16.3/test/iftest.good.c | 24 - cloog-0.16.3/test/iftest2.c | 8 - cloog-0.16.3/test/iftest2.cloog | 31 - cloog-0.16.3/test/iftest2.good.c | 28 - cloog-0.16.3/test/iftestf.cloog | 29 - cloog-0.16.3/test/iftestf.f | 6 - cloog-0.16.3/test/infinite.c | 13 - cloog-0.16.3/test/infinite.cloog | 32 - cloog-0.16.3/test/infinite2.c | 10 - cloog-0.16.3/test/infinite2.cloog | 32 - cloog-0.16.3/test/infinite3.c | 18 - cloog-0.16.3/test/infinite3.cloog | 32 - cloog-0.16.3/test/infinite4.c | 4 - cloog-0.16.3/test/infinite4.cloog | 16 - cloog-0.16.3/test/isl/jacobi-shared.c | 11 - cloog-0.16.3/test/isl/jacobi-shared.cloog | 129 - cloog-0.16.3/test/isl/jacobi-shared.good.c | 28 - cloog-0.16.3/test/isl/mod.c | 6 - cloog-0.16.3/test/isl/mod.cloog | 23 - cloog-0.16.3/test/isl/mod2.c | 6 - cloog-0.16.3/test/isl/mod2.cloog | 20 - cloog-0.16.3/test/isl/mod3.c | 8 - cloog-0.16.3/test/isl/mod3.cloog | 34 - cloog-0.16.3/test/isl/mod4.c | 10 - cloog-0.16.3/test/isl/mod4.cloog | 23 - cloog-0.16.3/test/isl/mxm-shared.c | 8 - cloog-0.16.3/test/isl/mxm-shared.cloog | 162 - cloog-0.16.3/test/largeur.c | 8 - cloog-0.16.3/test/largeur.cloog | 26 - cloog-0.16.3/test/largeur.good.c | 23 - cloog-0.16.3/test/levenshtein-1-2-3.c | 37 - cloog-0.16.3/test/levenshtein-1-2-3.cloog | 110 - cloog-0.16.3/test/levenshtein-1-2-3.good.c | 62 - cloog-0.16.3/test/levenshtein-1-2-3f.cloog | 110 - cloog-0.16.3/test/levenshtein-1-2-3f.f | 37 - cloog-0.16.3/test/lex.c | 5 - cloog-0.16.3/test/lex.cloog | 35 - cloog-0.16.3/test/lex.good.c | 23 - cloog-0.16.3/test/lineality-1-2.c | 11 - cloog-0.16.3/test/lineality-1-2.cloog | 36 - cloog-0.16.3/test/lineality-1-2.good.c | 37 - cloog-0.16.3/test/lineality-2-1-2.c | 16 - cloog-0.16.3/test/lineality-2-1-2.cloog | 36 - cloog-0.16.3/test/lineality-2-1-2.good.c | 43 - cloog-0.16.3/test/logo.c | 21 - cloog-0.16.3/test/logo.cloog | 30 - cloog-0.16.3/test/logo.good.c | 43 - cloog-0.16.3/test/logopar.c | 21 - cloog-0.16.3/test/logopar.cloog | 33 - cloog-0.16.3/test/logopar.good.c | 50 - cloog-0.16.3/test/lu.c | 21 - cloog-0.16.3/test/lu.cloog | 47 - cloog-0.16.3/test/lu.good.c | 44 - cloog-0.16.3/test/lu2.c | 21 - cloog-0.16.3/test/lu2.cloog | 37 - cloog-0.16.3/test/lu2.good.c | 42 - cloog-0.16.3/test/lub.c | 13 - cloog-0.16.3/test/lub.cloog | 58 - cloog-0.16.3/test/lub.good.c | 29 - cloog-0.16.3/test/lux.c | 21 - cloog-0.16.3/test/lux.cloog | 36 - cloog-0.16.3/test/lux.good.c | 39 - cloog-0.16.3/test/merge.c | 8 - cloog-0.16.3/test/merge.cloog | 42 - cloog-0.16.3/test/merge.good.c | 29 - cloog-0.16.3/test/min-1-1.c | 8 - cloog-0.16.3/test/min-1-1.cloog | 27 - cloog-0.16.3/test/min-1-1.good.c | 23 - cloog-0.16.3/test/min-2-1.c | 10 - cloog-0.16.3/test/min-2-1.cloog | 31 - cloog-0.16.3/test/min-2-1.good.c | 25 - cloog-0.16.3/test/min-3-1.c | 6 - cloog-0.16.3/test/min-3-1.cloog | 27 - cloog-0.16.3/test/min-3-1.good.c | 21 - cloog-0.16.3/test/min-4-1.c | 6 - cloog-0.16.3/test/min-4-1.cloog | 25 - cloog-0.16.3/test/min-4-1.good.c | 19 - cloog-0.16.3/test/mod4.c | 6 - cloog-0.16.3/test/mod4.cloog | 72 - cloog-0.16.3/test/mode.c | 24 - cloog-0.16.3/test/mode.cloog | 33 - cloog-0.16.3/test/mode.good.c | 50 - cloog-0.16.3/test/multi-mm-1.c | 10 - cloog-0.16.3/test/multi-mm-1.cloog | 37 - cloog-0.16.3/test/multi-mm-1.good.c | 32 - cloog-0.16.3/test/multi-stride.c | 1 - cloog-0.16.3/test/multi-stride.cloog | 28 - cloog-0.16.3/test/multi-stride2.c | 4 - cloog-0.16.3/test/multi-stride2.cloog | 28 - cloog-0.16.3/test/no_lindep.c | 2 - cloog-0.16.3/test/no_lindep.cloog | 34 - cloog-0.16.3/test/no_lindep.good.c | 21 - cloog-0.16.3/test/non_optimal/nul_complex1.c | 10 - .../test/non_optimal/nul_complex1.cloog | 37 - .../test/non_optimal/nul_complex1.good.c | 27 - cloog-0.16.3/test/non_optimal/usvd_e_t.c | 375 - cloog-0.16.3/test/non_optimal/usvd_e_t.cloog | 240 - cloog-0.16.3/test/non_optimal/usvd_e_t.good.c | 429 - cloog-0.16.3/test/non_optimal/youcef.c | 8 - cloog-0.16.3/test/non_optimal/youcef.cloog | 46 - cloog-0.16.3/test/non_optimal/youcef.good.c | 34 - cloog-0.16.3/test/nul_basic1.c | 6 - cloog-0.16.3/test/nul_basic1.cloog | 28 - cloog-0.16.3/test/nul_basic2.c | 7 - cloog-0.16.3/test/nul_basic2.cloog | 54 - cloog-0.16.3/test/nul_lcpc.c | 15 - cloog-0.16.3/test/nul_lcpc.cloog | 39 - cloog-0.16.3/test/orc.c | 68 - cloog-0.16.3/test/orc.cloog | 133 - cloog-0.16.3/test/orc.good.c | 110 - cloog-0.16.3/test/otl.c | 28 - cloog-0.16.3/test/otl.cloog | 117 - cloog-0.16.3/test/otl.good.c | 45 - cloog-0.16.3/test/param-split.c | 10 - cloog-0.16.3/test/param-split.cloog | 24 - cloog-0.16.3/test/param-split.good.c | 27 - cloog-0.16.3/test/pouchet.c | 22 - cloog-0.16.3/test/pouchet.cloog | 76 - cloog-0.16.3/test/pouchet.good.c | 40 - cloog-0.16.3/test/rectangle.c | 6 - cloog-0.16.3/test/rectangle.cloog | 29 - cloog-0.16.3/test/rectangle.good.c | 24 - cloog-0.16.3/test/reservoir/QR.c | 117 - cloog-0.16.3/test/reservoir/QR.cloog | 228 - cloog-0.16.3/test/reservoir/QR.good.c | 208 - cloog-0.16.3/test/reservoir/bastoul3.c | 6 - cloog-0.16.3/test/reservoir/bastoul3.cloog | 33 - cloog-0.16.3/test/reservoir/cholesky2.c | 33 - cloog-0.16.3/test/reservoir/cholesky2.cloog | 79 - cloog-0.16.3/test/reservoir/cholesky2.good.c | 72 - cloog-0.16.3/test/reservoir/fusion1.c | 10 - cloog-0.16.3/test/reservoir/fusion1.cloog | 65 - cloog-0.16.3/test/reservoir/fusion1.good.c | 29 - cloog-0.16.3/test/reservoir/fusion2.c | 17 - cloog-0.16.3/test/reservoir/fusion2.cloog | 56 - cloog-0.16.3/test/reservoir/fusion2.good.c | 41 - cloog-0.16.3/test/reservoir/jacobi2.c | 6 - cloog-0.16.3/test/reservoir/jacobi2.cloog | 37 - cloog-0.16.3/test/reservoir/jacobi2.good.c | 23 - cloog-0.16.3/test/reservoir/jacobi3.c | 29 - cloog-0.16.3/test/reservoir/jacobi3.cloog | 64 - cloog-0.16.3/test/reservoir/jacobi3.good.c | 53 - cloog-0.16.3/test/reservoir/lim-lam1.c | 25 - cloog-0.16.3/test/reservoir/lim-lam1.cloog | 54 - cloog-0.16.3/test/reservoir/lim-lam1.good.c | 56 - cloog-0.16.3/test/reservoir/lim-lam2.c | 18 - cloog-0.16.3/test/reservoir/lim-lam2.cloog | 76 - cloog-0.16.3/test/reservoir/lim-lam2.good.c | 37 - cloog-0.16.3/test/reservoir/lim-lam3.c | 36 - cloog-0.16.3/test/reservoir/lim-lam3.cloog | 101 - cloog-0.16.3/test/reservoir/lim-lam3.good.c | 66 - cloog-0.16.3/test/reservoir/lim-lam4.c | 17 - cloog-0.16.3/test/reservoir/lim-lam4.cloog | 62 - cloog-0.16.3/test/reservoir/lim-lam4.good.c | 39 - cloog-0.16.3/test/reservoir/lim-lam5.c | 18 - cloog-0.16.3/test/reservoir/lim-lam5.cloog | 76 - cloog-0.16.3/test/reservoir/lim-lam5.good.c | 35 - cloog-0.16.3/test/reservoir/lim-lam6.c | 13 - cloog-0.16.3/test/reservoir/lim-lam6.cloog | 56 - cloog-0.16.3/test/reservoir/lim-lam6.good.c | 33 - cloog-0.16.3/test/reservoir/liu-zhuge1.c | 47 - cloog-0.16.3/test/reservoir/liu-zhuge1.cloog | 76 - cloog-0.16.3/test/reservoir/liu-zhuge1.good.c | 168 - cloog-0.16.3/test/reservoir/loechner3.c | 10 - cloog-0.16.3/test/reservoir/loechner3.cloog | 39 - cloog-0.16.3/test/reservoir/loechner3.good.c | 26 - cloog-0.16.3/test/reservoir/loechner4.c | 12 - cloog-0.16.3/test/reservoir/loechner4.cloog | 44 - cloog-0.16.3/test/reservoir/loechner4.good.c | 28 - cloog-0.16.3/test/reservoir/loechner5.c | 12 - cloog-0.16.3/test/reservoir/loechner5.cloog | 44 - cloog-0.16.3/test/reservoir/loechner5.good.c | 27 - cloog-0.16.3/test/reservoir/mg-interp.c | 219 - cloog-0.16.3/test/reservoir/mg-interp.cloog | 376 - cloog-0.16.3/test/reservoir/mg-interp.good.c | 318 - cloog-0.16.3/test/reservoir/mg-interp2.c | 39 - cloog-0.16.3/test/reservoir/mg-interp2.cloog | 112 - cloog-0.16.3/test/reservoir/mg-interp2.good.c | 57 - cloog-0.16.3/test/reservoir/mg-psinv.c | 39 - cloog-0.16.3/test/reservoir/mg-psinv.cloog | 88 - cloog-0.16.3/test/reservoir/mg-psinv.good.c | 71 - cloog-0.16.3/test/reservoir/mg-resid.c | 39 - cloog-0.16.3/test/reservoir/mg-resid.cloog | 88 - cloog-0.16.3/test/reservoir/mg-resid.good.c | 71 - cloog-0.16.3/test/reservoir/mg-rprj3.c | 47 - cloog-0.16.3/test/reservoir/mg-rprj3.cloog | 136 - cloog-0.16.3/test/reservoir/mg-rprj3.good.c | 163 - cloog-0.16.3/test/reservoir/pingali1.c | 21 - cloog-0.16.3/test/reservoir/pingali1.cloog | 61 - cloog-0.16.3/test/reservoir/pingali1.good.c | 44 - cloog-0.16.3/test/reservoir/pingali2.c | 13 - cloog-0.16.3/test/reservoir/pingali2.cloog | 56 - cloog-0.16.3/test/reservoir/pingali2.good.c | 29 - cloog-0.16.3/test/reservoir/pingali3.c | 15 - cloog-0.16.3/test/reservoir/pingali3.cloog | 62 - cloog-0.16.3/test/reservoir/pingali3.good.c | 31 - cloog-0.16.3/test/reservoir/pingali4.c | 11 - cloog-0.16.3/test/reservoir/pingali4.cloog | 57 - cloog-0.16.3/test/reservoir/pingali4.good.c | 29 - cloog-0.16.3/test/reservoir/pingali5.c | 21 - cloog-0.16.3/test/reservoir/pingali5.cloog | 81 - cloog-0.16.3/test/reservoir/pingali5.good.c | 44 - cloog-0.16.3/test/reservoir/pingali6.c | 29 - cloog-0.16.3/test/reservoir/pingali6.cloog | 66 - cloog-0.16.3/test/reservoir/pingali6.good.c | 53 - cloog-0.16.3/test/reservoir/stride.c | 6 - cloog-0.16.3/test/reservoir/stride.cloog | 45 - cloog-0.16.3/test/reservoir/stride2.c | 6 - cloog-0.16.3/test/reservoir/stride2.cloog | 45 - cloog-0.16.3/test/reservoir/tang-xue1.c | 14 - cloog-0.16.3/test/reservoir/tang-xue1.cloog | 80 - cloog-0.16.3/test/reservoir/tang-xue1.good.c | 34 - cloog-0.16.3/test/reservoir/two.c | 2 - cloog-0.16.3/test/reservoir/two.cloog | 26 - cloog-0.16.3/test/reservoir/two.good.c | 23 - cloog-0.16.3/test/singleton.c | 3 - cloog-0.16.3/test/singleton.cloog | 27 - cloog-0.16.3/test/singleton.good.c | 17 - cloog-0.16.3/test/sor1d.c | 19 - cloog-0.16.3/test/sor1d.cloog | 256 - cloog-0.16.3/test/sor1d.good.c | 39 - cloog-0.16.3/test/square+triangle-1-1-2-3.c | 14 - .../test/square+triangle-1-1-2-3.cloog | 36 - .../test/square+triangle-1-1-2-3.good.c | 37 - cloog-0.16.3/test/stride.c | 9 - cloog-0.16.3/test/stride.cloog | 32 - cloog-0.16.3/test/stride.good.c | 27 - cloog-0.16.3/test/stride2.c | 7 - cloog-0.16.3/test/stride2.cloog | 32 - cloog-0.16.3/test/stride2.good.c | 25 - cloog-0.16.3/test/stride3.c | 6 - cloog-0.16.3/test/stride3.cloog | 41 - cloog-0.16.3/test/stride4.c | 6 - cloog-0.16.3/test/stride4.cloog | 33 - cloog-0.16.3/test/swim.c | 672 - cloog-0.16.3/test/swim.cloog | 2453 -- cloog-0.16.3/test/swim.good.c | 819 - cloog-0.16.3/test/test.c | 21 - cloog-0.16.3/test/test.cloog | 33 - cloog-0.16.3/test/test.good.c | 43 - cloog-0.16.3/test/thomasset.c | 49 - cloog-0.16.3/test/thomasset.cloog | 51 - cloog-0.16.3/test/thomasset.good.c | 99 - cloog-0.16.3/test/tiling.c | 6 - cloog-0.16.3/test/tiling.cloog | 30 - cloog-0.16.3/test/tiling.good.c | 21 - cloog-0.16.3/test/uday_scalars.c | 9 - cloog-0.16.3/test/uday_scalars.cloog | 58 - cloog-0.16.3/test/uday_scalars.good.c | 25 - cloog-0.16.3/test/union.c | 16 - cloog-0.16.3/test/union.cloog | 33 - cloog-0.16.3/test/union.good.c | 35 - cloog-0.16.3/test/vasilache.c | 27 - cloog-0.16.3/test/vasilache.cloog | 248 - cloog-0.16.3/test/vasilache.good.c | 62 - cloog-0.16.3/test/vivien.c | 195 - cloog-0.16.3/test/vivien.cloog | 156 - cloog-0.16.3/test/vivien.good.c | 831 - cloog-0.16.3/test/vivien2.c | 168 - cloog-0.16.3/test/vivien2.cloog | 156 - cloog-0.16.3/test/vivien2.good.c | 656 - cloog-0.16.3/test/walters.c | 21 - cloog-0.16.3/test/walters.cloog | 189 - cloog-0.16.3/test/walters.good.c | 46 - cloog-0.16.3/test/walters2.c | 14 - cloog-0.16.3/test/walters2.cloog | 90 - cloog-0.16.3/test/walters2.good.c | 32 - cloog-0.16.3/test/walters3.c | 8 - cloog-0.16.3/test/walters3.cloog | 49 - cloog-0.16.3/test/walters3.good.c | 24 - cloog-0.16.3/test/wavefront.c | 8 - cloog-0.16.3/test/wavefront.cloog | 27 - cloog-0.16.3/test/wavefront.good.c | 26 - cloog-0.16.3/test/yosr.c | 21 - cloog-0.16.3/test/yosr.cloog | 65 - cloog-0.16.3/test/yosr.good.c | 41 - cloog-0.16.3/test/yosr2.c | 23 - cloog-0.16.3/test/yosr2.cloog | 71 - cloog-0.16.3/test/yosr2.good.c | 43 - cloog-0.16.3/test/yosrf.cloog | 65 - cloog-0.16.3/test/yosrf.f | 21 - cloog-0.17.0/CLOOG_HEAD | 1 - cloog-0.17.0/ChangeLog | 22 - cloog-0.17.0/Makefile.am | 179 - cloog-0.17.0/Makefile.in | 1375 -- cloog-0.17.0/README | 203 - cloog-0.17.0/aclocal.m4 | 991 - cloog-0.17.0/autoconf/Doxyfile.in | 1101 - cloog-0.17.0/autoconf/config.guess | 1502 -- cloog-0.17.0/autoconf/config.sub | 1714 -- cloog-0.17.0/autoconf/depcomp | 630 - cloog-0.17.0/autoconf/install-sh | 520 - cloog-0.17.0/autoconf/ltmain.sh | 8413 ------- cloog-0.17.0/autoconf/missing | 376 - cloog-0.17.0/configure | 15080 ------------ cloog-0.17.0/configure.ac | 263 - cloog-0.17.0/doc/Makefile.am | 7 - cloog-0.17.0/doc/Makefile.in | 387 - cloog-0.17.0/doc/TODO | 58 - cloog-0.17.0/doc/cloog.pdf | Bin 273287 -> 0 bytes cloog-0.17.0/doc/cloog.texi | 2571 -- cloog-0.17.0/doc/images/basic.eps | 402 - cloog-0.17.0/doc/images/basic.fig | 100 - cloog-0.17.0/doc/images/basic.jpg | Bin 21180 -> 0 bytes cloog-0.17.0/doc/images/basic.pdf | Bin 40073 -> 0 bytes cloog-0.17.0/doc/images/basic.txt | 13 - cloog-0.17.0/doc/images/tree.eps | 258 - cloog-0.17.0/doc/images/tree.fig | 54 - cloog-0.17.0/doc/images/tree.jpg | Bin 13713 -> 0 bytes cloog-0.17.0/doc/images/tree.pdf | Bin 4558 -> 0 bytes cloog-0.17.0/doc/images/tree.txt | 25 - cloog-0.17.0/examples/README | 58 - cloog-0.17.0/examples/example/Makefile | 21 - cloog-0.17.0/examples/example/example.c | 29 - cloog-0.17.0/genversion.sh.in | 15 - cloog-0.17.0/include/cloog/block.h | 117 - cloog-0.17.0/include/cloog/clast.h | 154 - cloog-0.17.0/include/cloog/cloog.h | 62 - cloog-0.17.0/include/cloog/constraints.h | 121 - cloog-0.17.0/include/cloog/domain.h | 177 - cloog-0.17.0/include/cloog/input.h | 27 - cloog-0.17.0/include/cloog/int.h | 174 - cloog-0.17.0/include/cloog/isl/backend.h | 11 - cloog-0.17.0/include/cloog/isl/cloog.h | 22 - .../include/cloog/isl/constraintset.h | 33 - cloog-0.17.0/include/cloog/isl/domain.h | 36 - cloog-0.17.0/include/cloog/loop.h | 120 - cloog-0.17.0/include/cloog/matrix.h | 59 - .../include/cloog/matrix/constraintset.h | 28 - cloog-0.17.0/include/cloog/names.h | 103 - cloog-0.17.0/include/cloog/options.h | 165 - cloog-0.17.0/include/cloog/pprint.h | 67 - cloog-0.17.0/include/cloog/program.h | 116 - cloog-0.17.0/include/cloog/state.h | 46 - cloog-0.17.0/include/cloog/statement.h | 85 - cloog-0.17.0/include/cloog/stride.h | 33 - cloog-0.17.0/include/cloog/union_domain.h | 52 - cloog-0.17.0/include/cloog/version.h | 50 - cloog-0.17.0/include/cloog/version.h.in | 50 - cloog-0.17.0/isl/AUTHORS | 19 - cloog-0.17.0/isl/ChangeLog | 64 - cloog-0.17.0/isl/GIT_HEAD_ID | 1 - cloog-0.17.0/isl/Makefile.am | 274 - cloog-0.17.0/isl/Makefile.in | 2227 -- cloog-0.17.0/isl/aclocal.m4 | 995 - cloog-0.17.0/isl/basis_reduction_tab.c | 243 - cloog-0.17.0/isl/basis_reduction_templ.c | 357 - cloog-0.17.0/isl/bound.c | 278 - cloog-0.17.0/isl/bound_test.sh.in | 35 - cloog-0.17.0/isl/cat.c | 58 - cloog-0.17.0/isl/closure.c | 34 - cloog-0.17.0/isl/config.guess | 1502 -- cloog-0.17.0/isl/config.sub | 1714 -- cloog-0.17.0/isl/configure | 20410 ---------------- cloog-0.17.0/isl/configure.ac | 180 - cloog-0.17.0/isl/depcomp | 630 - cloog-0.17.0/isl/doc/Makefile.am | 17 - cloog-0.17.0/isl/doc/Makefile.in | 410 - cloog-0.17.0/isl/doc/chicago.bst | 1726 -- cloog-0.17.0/isl/doc/chicago.sty | 320 - cloog-0.17.0/isl/doc/implementation.tex | 2036 -- cloog-0.17.0/isl/doc/isl.bib | 313 - cloog-0.17.0/isl/doc/manual.pdf | Bin 314986 -> 0 bytes cloog-0.17.0/isl/doc/manual.tex | 75 - cloog-0.17.0/isl/doc/mypod2latex | 14 - cloog-0.17.0/isl/doc/user.pod | 4267 ---- cloog-0.17.0/isl/include/isl/aff.h | 350 - cloog-0.17.0/isl/include/isl/aff_type.h | 16 - cloog-0.17.0/isl/include/isl/arg.h | 313 - cloog-0.17.0/isl/include/isl/band.h | 42 - cloog-0.17.0/isl/include/isl/blk.h | 40 - cloog-0.17.0/isl/include/isl/config.h.in | 3 - cloog-0.17.0/isl/include/isl/constraint.h | 126 - cloog-0.17.0/isl/include/isl/ctx.h | 212 - cloog-0.17.0/isl/include/isl/dim.h | 122 - cloog-0.17.0/isl/include/isl/flow.h | 54 - cloog-0.17.0/isl/include/isl/hash.h | 79 - cloog-0.17.0/isl/include/isl/id.h | 32 - cloog-0.17.0/isl/include/isl/ilp.h | 34 - cloog-0.17.0/isl/include/isl/int.h | 134 - cloog-0.17.0/isl/include/isl/list.h | 57 - cloog-0.17.0/isl/include/isl/local_space.h | 72 - cloog-0.17.0/isl/include/isl/lp.h | 50 - cloog-0.17.0/isl/include/isl/map.h | 594 - cloog-0.17.0/isl/include/isl/map_type.h | 32 - cloog-0.17.0/isl/include/isl/mat.h | 113 - cloog-0.17.0/isl/include/isl/multi.h | 22 - cloog-0.17.0/isl/include/isl/obj.h | 64 - cloog-0.17.0/isl/include/isl/options.h | 42 - cloog-0.17.0/isl/include/isl/point.h | 43 - cloog-0.17.0/isl/include/isl/polynomial.h | 593 - .../isl/include/isl/polynomial_type.h | 33 - cloog-0.17.0/isl/include/isl/printer.h | 58 - cloog-0.17.0/isl/include/isl/schedule.h | 44 - cloog-0.17.0/isl/include/isl/seq.h | 58 - cloog-0.17.0/isl/include/isl/set.h | 477 - cloog-0.17.0/isl/include/isl/set_type.h | 6 - cloog-0.17.0/isl/include/isl/space.h | 135 - cloog-0.17.0/isl/include/isl/stream.h | 110 - cloog-0.17.0/isl/include/isl/union_map.h | 191 - cloog-0.17.0/isl/include/isl/union_set.h | 130 - cloog-0.17.0/isl/include/isl/vec.h | 75 - cloog-0.17.0/isl/include/isl/version.h | 14 - cloog-0.17.0/isl/include/isl/vertices.h | 46 - cloog-0.17.0/isl/install-sh | 520 - cloog-0.17.0/isl/interface/Makefile.am | 30 - cloog-0.17.0/isl/interface/Makefile.in | 575 - .../isl/interface/extract_interface.cc | 251 - .../isl/interface/extract_interface.h | 3 - cloog-0.17.0/isl/interface/isl.py | 1091 - cloog-0.17.0/isl/interface/python.cc | 515 - cloog-0.17.0/isl/interface/python.h | 7 - cloog-0.17.0/isl/isl.py | 100 - cloog-0.17.0/isl/isl_aff.c | 2516 -- cloog-0.17.0/isl/isl_aff_private.h | 104 - cloog-0.17.0/isl/isl_affine_hull.c | 1018 - cloog-0.17.0/isl/isl_arg.c | 1205 - cloog-0.17.0/isl/isl_band.c | 188 - cloog-0.17.0/isl/isl_band_private.h | 36 - cloog-0.17.0/isl/isl_basis_reduction.h | 27 - cloog-0.17.0/isl/isl_bernstein.c | 554 - cloog-0.17.0/isl/isl_bernstein.h | 4 - cloog-0.17.0/isl/isl_blk.c | 134 - cloog-0.17.0/isl/isl_bound.c | 331 - cloog-0.17.0/isl/isl_bound.h | 20 - cloog-0.17.0/isl/isl_coalesce.c | 1294 - cloog-0.17.0/isl/isl_config.h.in | 118 - cloog-0.17.0/isl/isl_config_post.h | 7 - cloog-0.17.0/isl/isl_constraint.c | 1170 - cloog-0.17.0/isl/isl_constraint_private.h | 18 - cloog-0.17.0/isl/isl_convex_hull.c | 2432 -- cloog-0.17.0/isl/isl_ctx.c | 217 - cloog-0.17.0/isl/isl_ctx_private.h | 28 - cloog-0.17.0/isl/isl_dim.c | 258 - cloog-0.17.0/isl/isl_dim_map.c | 233 - cloog-0.17.0/isl/isl_dim_map.h | 36 - cloog-0.17.0/isl/isl_equalities.c | 697 - cloog-0.17.0/isl/isl_equalities.h | 31 - cloog-0.17.0/isl/isl_factorization.c | 331 - cloog-0.17.0/isl/isl_factorization.h | 29 - cloog-0.17.0/isl/isl_farkas.c | 385 - cloog-0.17.0/isl/isl_flow.c | 1320 - cloog-0.17.0/isl/isl_fold.c | 1629 -- cloog-0.17.0/isl/isl_gmp.c | 24 - cloog-0.17.0/isl/isl_hash.c | 210 - cloog-0.17.0/isl/isl_hmap_map_basic_set.c | 102 - cloog-0.17.0/isl/isl_hmap_map_basic_set.h | 26 - cloog-0.17.0/isl/isl_id.c | 186 - cloog-0.17.0/isl/isl_id_private.h | 28 - cloog-0.17.0/isl/isl_ilp.c | 485 - cloog-0.17.0/isl/isl_input.c | 2685 -- cloog-0.17.0/isl/isl_list.c | 38 - cloog-0.17.0/isl/isl_list_private.h | 31 - cloog-0.17.0/isl/isl_list_templ.c | 216 - cloog-0.17.0/isl/isl_list_templ.h | 24 - cloog-0.17.0/isl/isl_local_space.c | 897 - cloog-0.17.0/isl/isl_local_space_private.h | 56 - cloog-0.17.0/isl/isl_lp.c | 204 - cloog-0.17.0/isl/isl_lp_no_piplib.c | 18 - cloog-0.17.0/isl/isl_lp_piplib.c | 106 - cloog-0.17.0/isl/isl_lp_piplib.h | 28 - cloog-0.17.0/isl/isl_map.c | 10008 -------- cloog-0.17.0/isl/isl_map_no_piplib.c | 20 - cloog-0.17.0/isl/isl_map_piplib.c | 476 - cloog-0.17.0/isl/isl_map_piplib.h | 27 - cloog-0.17.0/isl/isl_map_private.h | 341 - cloog-0.17.0/isl/isl_map_simplify.c | 2569 -- cloog-0.17.0/isl/isl_map_subtract.c | 858 - cloog-0.17.0/isl/isl_mat.c | 1632 -- cloog-0.17.0/isl/isl_mat_private.h | 30 - cloog-0.17.0/isl/isl_morph.c | 817 - cloog-0.17.0/isl/isl_morph.h | 80 - cloog-0.17.0/isl/isl_multi_templ.c | 361 - cloog-0.17.0/isl/isl_multi_templ.h | 22 - cloog-0.17.0/isl/isl_obj.c | 426 - cloog-0.17.0/isl/isl_options.c | 176 - cloog-0.17.0/isl/isl_options_private.h | 55 - cloog-0.17.0/isl/isl_output.c | 2389 -- cloog-0.17.0/isl/isl_piplib.c | 26 - cloog-0.17.0/isl/isl_piplib.h | 28 - cloog-0.17.0/isl/isl_point.c | 500 - cloog-0.17.0/isl/isl_point_private.h | 12 - cloog-0.17.0/isl/isl_polynomial.c | 4781 ---- cloog-0.17.0/isl/isl_polynomial_private.h | 233 - cloog-0.17.0/isl/isl_printer.c | 367 - cloog-0.17.0/isl/isl_printer_private.h | 17 - cloog-0.17.0/isl/isl_pw_templ.c | 1570 -- cloog-0.17.0/isl/isl_qsort.c | 249 - cloog-0.17.0/isl/isl_qsort.h | 7 - cloog-0.17.0/isl/isl_range.c | 491 - cloog-0.17.0/isl/isl_range.h | 6 - cloog-0.17.0/isl/isl_reordering.c | 199 - cloog-0.17.0/isl/isl_reordering.h | 31 - cloog-0.17.0/isl/isl_sample.c | 1358 - cloog-0.17.0/isl/isl_sample.h | 35 - cloog-0.17.0/isl/isl_sample_no_piplib.c | 16 - cloog-0.17.0/isl/isl_sample_piplib.c | 73 - cloog-0.17.0/isl/isl_sample_piplib.h | 25 - cloog-0.17.0/isl/isl_scan.c | 304 - cloog-0.17.0/isl/isl_scan.h | 24 - cloog-0.17.0/isl/isl_schedule.c | 2842 --- cloog-0.17.0/isl/isl_schedule_private.h | 44 - cloog-0.17.0/isl/isl_seq.c | 291 - cloog-0.17.0/isl/isl_space.c | 1682 -- cloog-0.17.0/isl/isl_space_private.h | 51 - cloog-0.17.0/isl/isl_stream.c | 735 - cloog-0.17.0/isl/isl_stream_private.h | 4 - cloog-0.17.0/isl/isl_tab.c | 3342 --- cloog-0.17.0/isl/isl_tab.h | 292 - cloog-0.17.0/isl/isl_tab_pip.c | 5516 ----- cloog-0.17.0/isl/isl_test.c | 2579 -- cloog-0.17.0/isl/isl_transitive_closure.c | 3104 --- cloog-0.17.0/isl/isl_union_map.c | 2289 -- cloog-0.17.0/isl/isl_union_map_private.h | 9 - cloog-0.17.0/isl/isl_union_templ.c | 801 - cloog-0.17.0/isl/isl_vec.c | 344 - cloog-0.17.0/isl/isl_version.c | 6 - cloog-0.17.0/isl/isl_vertices.c | 1569 -- cloog-0.17.0/isl/isl_vertices_private.h | 64 - cloog-0.17.0/isl/ltmain.sh | 8413 ------- cloog-0.17.0/isl/m4/ax_c___attribute__.m4 | 66 - cloog-0.17.0/isl/m4/ax_cc_maxopt.m4 | 188 - .../isl/m4/ax_check_compiler_flags.m4 | 74 - cloog-0.17.0/isl/m4/ax_compiler_vendor.m4 | 63 - .../isl/m4/ax_create_pkgconfig_info.m4 | 349 - cloog-0.17.0/isl/m4/ax_create_stdint_h.m4 | 739 - cloog-0.17.0/isl/m4/ax_detect_git_head.m4 | 27 - cloog-0.17.0/isl/m4/ax_gcc_archflag.m4 | 213 - .../isl/m4/ax_gcc_warn_unused_result.m4 | 56 - cloog-0.17.0/isl/m4/ax_gcc_x86_cpuid.m4 | 77 - cloog-0.17.0/isl/m4/ax_set_warning_flags.m4 | 17 - cloog-0.17.0/isl/m4/ax_submodule.m4 | 71 - cloog-0.17.0/isl/m4/libtool.m4 | 7377 ------ cloog-0.17.0/isl/m4/ltoptions.m4 | 368 - cloog-0.17.0/isl/m4/ltsugar.m4 | 123 - cloog-0.17.0/isl/m4/ltversion.m4 | 23 - cloog-0.17.0/isl/m4/lt~obsolete.m4 | 92 - cloog-0.17.0/isl/missing | 376 - cloog-0.17.0/isl/mp_get_memory_functions.c | 14 - cloog-0.17.0/isl/pip.c | 381 - cloog-0.17.0/isl/pip_test.sh.in | 28 - .../isl/polyhedron_detect_equalities.c | 24 - cloog-0.17.0/isl/polyhedron_minimize.c | 104 - cloog-0.17.0/isl/polyhedron_sample.c | 36 - cloog-0.17.0/isl/polytope_scan.c | 103 - cloog-0.17.0/isl/print.c | 77 - cloog-0.17.0/isl/print_templ.c | 33 - cloog-0.17.0/isl/test_inputs/affine.polylib | 9 - cloog-0.17.0/isl/test_inputs/affine2.polylib | 9 - cloog-0.17.0/isl/test_inputs/affine3.polylib | 7 - .../isl/test_inputs/application.omega | 3 - .../isl/test_inputs/application2.omega | 3 - cloog-0.17.0/isl/test_inputs/basicLinear.pwqp | 1 - .../isl/test_inputs/basicLinear2.pwqp | 1 - cloog-0.17.0/isl/test_inputs/basicTest.pwqp | 1 - .../test_inputs/basicTestParameterPosNeg.pwqp | 1 - cloog-0.17.0/isl/test_inputs/boulet.pip | 13 - cloog-0.17.0/isl/test_inputs/brisebarre.pip | 34 - cloog-0.17.0/isl/test_inputs/cg1.pip | 15 - cloog-0.17.0/isl/test_inputs/convex0.polylib | 11 - cloog-0.17.0/isl/test_inputs/convex1.polylib | 17 - cloog-0.17.0/isl/test_inputs/convex10.polylib | 17 - cloog-0.17.0/isl/test_inputs/convex11.polylib | 14 - cloog-0.17.0/isl/test_inputs/convex12.polylib | 12 - cloog-0.17.0/isl/test_inputs/convex13.polylib | 17 - cloog-0.17.0/isl/test_inputs/convex14.polylib | 14 - cloog-0.17.0/isl/test_inputs/convex15.polylib | 66 - cloog-0.17.0/isl/test_inputs/convex2.polylib | 24 - cloog-0.17.0/isl/test_inputs/convex3.polylib | 10 - cloog-0.17.0/isl/test_inputs/convex4.polylib | 9 - cloog-0.17.0/isl/test_inputs/convex5.polylib | 12 - cloog-0.17.0/isl/test_inputs/convex6.polylib | 17 - cloog-0.17.0/isl/test_inputs/convex7.polylib | 9 - cloog-0.17.0/isl/test_inputs/convex8.polylib | 24 - cloog-0.17.0/isl/test_inputs/convex9.polylib | 14 - cloog-0.17.0/isl/test_inputs/devos.pwqp | 1 - cloog-0.17.0/isl/test_inputs/equality1.pwqp | 1 - cloog-0.17.0/isl/test_inputs/equality2.pwqp | 1 - cloog-0.17.0/isl/test_inputs/equality3.pwqp | 1 - cloog-0.17.0/isl/test_inputs/equality4.pwqp | 1 - cloog-0.17.0/isl/test_inputs/equality5.pwqp | 1 - cloog-0.17.0/isl/test_inputs/esced.pip | 27 - cloog-0.17.0/isl/test_inputs/ex.pip | 9 - cloog-0.17.0/isl/test_inputs/ex2.pip | 9 - cloog-0.17.0/isl/test_inputs/faddeev.pwqp | 1 - cloog-0.17.0/isl/test_inputs/fimmel.pip | 12 - cloog-0.17.0/isl/test_inputs/gist1.polylib | 14 - .../isl/test_inputs/linearExample.pwqp | 1 - cloog-0.17.0/isl/test_inputs/max.pip | 9 - cloog-0.17.0/isl/test_inputs/neg.pwqp | 1 - cloog-0.17.0/isl/test_inputs/negative.pip | 9 - cloog-0.17.0/isl/test_inputs/philippe.pwqp | 1 - .../isl/test_inputs/philippe3vars.pwqp | 1 - .../isl/test_inputs/philippe3vars3pars.pwqp | 1 - cloog-0.17.0/isl/test_inputs/philippeNeg.pwqp | 1 - .../test_inputs/philippePolynomialCoeff.pwqp | 1 - .../philippePolynomialCoeff1P.pwqp | 1 - cloog-0.17.0/isl/test_inputs/product.pwqp | 1 - cloog-0.17.0/isl/test_inputs/seghir-vd.pip | 17 - cloog-0.17.0/isl/test_inputs/set.omega | 1 - cloog-0.17.0/isl/test_inputs/small.pip | 9 - cloog-0.17.0/isl/test_inputs/sor1d.pip | 28 - cloog-0.17.0/isl/test_inputs/split.pwqp | 1 - cloog-0.17.0/isl/test_inputs/square.pip | 9 - cloog-0.17.0/isl/test_inputs/sven.pip | 7 - .../isl/test_inputs/test3Deg3Var.pwqp | 1 - cloog-0.17.0/isl/test_inputs/tobi.pip | 15 - cloog-0.17.0/isl/test_inputs/toplas.pwqp | 1 - cloog-0.17.0/isl/test_inputs/unexpanded.pwqp | 1 - cloog-0.17.0/m4/ax_cc_maxopt.m4 | 178 - cloog-0.17.0/m4/ax_cflags_warn_all.m4 | 149 - cloog-0.17.0/m4/ax_check_compiler_flags.m4 | 74 - cloog-0.17.0/m4/ax_compiler_vendor.m4 | 61 - cloog-0.17.0/m4/ax_create_pkgconfig_info.m4 | 349 - cloog-0.17.0/m4/ax_gcc_archflag.m4 | 213 - cloog-0.17.0/m4/ax_gcc_x86_cpuid.m4 | 77 - cloog-0.17.0/m4/ax_submodule.m4 | 63 - cloog-0.17.0/m4/libtool.m4 | 7377 ------ cloog-0.17.0/m4/ltoptions.m4 | 368 - cloog-0.17.0/m4/ltsugar.m4 | 123 - cloog-0.17.0/m4/ltversion.m4 | 23 - cloog-0.17.0/m4/lt~obsolete.m4 | 92 - cloog-0.17.0/osl/AUTHORS | 12 - cloog-0.17.0/osl/ChangeLog | 107 - cloog-0.17.0/osl/Makefile.am | 92 - cloog-0.17.0/osl/Makefile.in | 793 - cloog-0.17.0/osl/NEWS | 2 - cloog-0.17.0/osl/README | 18 - cloog-0.17.0/osl/THANKS | 12 - cloog-0.17.0/osl/aclocal.m4 | 973 - cloog-0.17.0/osl/autoconf/config.guess | 1502 -- cloog-0.17.0/osl/autoconf/config.sub | 1714 -- cloog-0.17.0/osl/autoconf/depcomp | 630 - cloog-0.17.0/osl/autoconf/install-sh | 520 - cloog-0.17.0/osl/autoconf/libtool.m4 | 7377 ------ cloog-0.17.0/osl/autoconf/ltmain.sh | 8413 ------- cloog-0.17.0/osl/autoconf/ltoptions.m4 | 368 - cloog-0.17.0/osl/autoconf/ltsugar.m4 | 123 - cloog-0.17.0/osl/autoconf/ltversion.m4 | 23 - cloog-0.17.0/osl/autoconf/lt~obsolete.m4 | 92 - cloog-0.17.0/osl/autoconf/missing | 376 - cloog-0.17.0/osl/autoconf/texinfo.tex | 9291 ------- cloog-0.17.0/osl/configure | 13290 ---------- cloog-0.17.0/osl/configure.in | 227 - cloog-0.17.0/osl/doc/Doxyfile.in | 1294 - cloog-0.17.0/osl/doc/Makefile.am | 119 - cloog-0.17.0/osl/doc/Makefile.in | 947 - cloog-0.17.0/osl/doc/S4.cloog | 44 - cloog-0.17.0/osl/doc/ascii-art.txt | 25 - cloog-0.17.0/osl/doc/htmldoc.tar.gz | Bin 1271149 -> 0 bytes cloog-0.17.0/osl/doc/images/basic.eps | 402 - cloog-0.17.0/osl/doc/images/basic.fig | 100 - cloog-0.17.0/osl/doc/images/basic.jpg | Bin 21180 -> 0 bytes cloog-0.17.0/osl/doc/images/basic.pdf | Bin 40073 -> 0 bytes cloog-0.17.0/osl/doc/images/basic.txt | 13 - cloog-0.17.0/osl/doc/images/basic1.eps | 332 - cloog-0.17.0/osl/doc/images/basic1.fig | 86 - cloog-0.17.0/osl/doc/images/basic1.jpg | Bin 18353 -> 0 bytes cloog-0.17.0/osl/doc/images/basic1.pdf | Bin 7051 -> 0 bytes cloog-0.17.0/osl/doc/images/basic1.txt | 12 - cloog-0.17.0/osl/doc/images/basic2.eps | 256 - cloog-0.17.0/osl/doc/images/basic2.fig | 62 - cloog-0.17.0/osl/doc/images/basic2.jpg | Bin 12369 -> 0 bytes cloog-0.17.0/osl/doc/images/basic2.pdf | Bin 6240 -> 0 bytes cloog-0.17.0/osl/doc/images/basic2.txt | 10 - cloog-0.17.0/osl/doc/images/tree.eps | 258 - cloog-0.17.0/osl/doc/images/tree.fig | 54 - cloog-0.17.0/osl/doc/images/tree.jpg | Bin 13713 -> 0 bytes cloog-0.17.0/osl/doc/images/tree.pdf | Bin 4558 -> 0 bytes cloog-0.17.0/osl/doc/images/tree.txt | 25 - cloog-0.17.0/osl/doc/openscop.info | 2873 --- cloog-0.17.0/osl/doc/openscop.pdf | Bin 344167 -> 0 bytes cloog-0.17.0/osl/doc/openscop.texi | 3257 --- cloog-0.17.0/osl/include/Makefile.am | 102 - cloog-0.17.0/osl/include/Makefile.in | 731 - cloog-0.17.0/osl/include/osl/body.h | 125 - .../osl/include/osl/extensions/arrays.h | 129 - .../osl/include/osl/extensions/comment.h | 123 - .../osl/include/osl/extensions/irregular.h | 149 - .../osl/include/osl/extensions/lines.h | 127 - .../osl/include/osl/extensions/scatnames.h | 127 - .../osl/include/osl/extensions/textual.h | 123 - cloog-0.17.0/osl/include/osl/generic.h | 127 - cloog-0.17.0/osl/include/osl/int.h | 124 - cloog-0.17.0/osl/include/osl/interface.h | 137 - cloog-0.17.0/osl/include/osl/macros.h | 176 - cloog-0.17.0/osl/include/osl/names.h | 124 - cloog-0.17.0/osl/include/osl/osl.h | 109 - cloog-0.17.0/osl/include/osl/relation.h | 184 - cloog-0.17.0/osl/include/osl/relation_list.h | 136 - cloog-0.17.0/osl/include/osl/scop.h | 152 - cloog-0.17.0/osl/include/osl/scop.h.in | 152 - cloog-0.17.0/osl/include/osl/statement.h | 138 - cloog-0.17.0/osl/include/osl/strings.h | 124 - cloog-0.17.0/osl/include/osl/util.h | 97 - cloog-0.17.0/osl/include/osl/vector.h | 122 - cloog-0.17.0/osl/source/Makefile.am | 105 - cloog-0.17.0/osl/source/Makefile.in | 834 - cloog-0.17.0/osl/source/body.c | 389 - cloog-0.17.0/osl/source/extensions/arrays.c | 456 - cloog-0.17.0/osl/source/extensions/comment.c | 306 - .../osl/source/extensions/irregular.c | 764 - cloog-0.17.0/osl/source/extensions/lines.c | 315 - .../osl/source/extensions/scatnames.c | 282 - cloog-0.17.0/osl/source/extensions/textual.c | 335 - cloog-0.17.0/osl/source/generic.c | 518 - cloog-0.17.0/osl/source/int.c | 919 - cloog-0.17.0/osl/source/interface.c | 376 - cloog-0.17.0/osl/source/names.c | 242 - cloog-0.17.0/osl/source/relation.c | 2179 -- cloog-0.17.0/osl/source/relation_list.c | 628 - cloog-0.17.0/osl/source/scop.c | 757 - cloog-0.17.0/osl/source/statement.c | 721 - cloog-0.17.0/osl/source/strings.c | 465 - cloog-0.17.0/osl/source/util.c | 573 - cloog-0.17.0/osl/source/vector.c | 367 - cloog-0.17.0/osl/tests/Makefile.am | 100 - cloog-0.17.0/osl/tests/Makefile.in | 826 - cloog-0.17.0/osl/tests/osl_test.c | 247 - cloog-0.17.0/osl/tests/polynom.scop | 134 - .../osl/tests/test_empty_statement.scop | 35 - cloog-0.17.0/osl/tests/test_just_access.scop | 38 - cloog-0.17.0/osl/tests/test_just_body.scop | 41 - cloog-0.17.0/osl/tests/test_just_domain.scop | 37 - .../osl/tests/test_just_scattering.scop | 36 - cloog-0.17.0/osl/tests/test_matmult.scop | 136 - cloog-0.17.0/osl/tests/test_no_statement.scop | 18 - cloog-0.17.0/osl/tests/test_scop_list.scop | 70 - cloog-0.17.0/source/block.c | 404 - cloog-0.17.0/source/clast.c | 1894 -- cloog-0.17.0/source/cloog.c | 98 - cloog-0.17.0/source/input.c | 218 - cloog-0.17.0/source/int.c | 177 - cloog-0.17.0/source/isl/backend.c | 37 - cloog-0.17.0/source/isl/constraints.c | 966 - cloog-0.17.0/source/isl/domain.c | 1913 -- cloog-0.17.0/source/loop.c | 2665 -- cloog-0.17.0/source/matrix.c | 213 - cloog-0.17.0/source/matrix/constraintset.c | 1056 - cloog-0.17.0/source/mp_get_memory_functions.c | 14 - cloog-0.17.0/source/names.c | 526 - cloog-0.17.0/source/options.c | 521 - cloog-0.17.0/source/pprint.c | 493 - cloog-0.17.0/source/program.c | 1077 - cloog-0.17.0/source/state.c | 52 - cloog-0.17.0/source/statement.c | 280 - cloog-0.17.0/source/stride.c | 70 - cloog-0.17.0/source/union_domain.c | 366 - cloog-0.17.0/source/version.c | 24 - cloog-0.17.0/source/version.c.in | 24 - cloog-0.17.0/test/0D-1.c | 2 - cloog-0.17.0/test/0D-1.cloog | 13 - cloog-0.17.0/test/0D-1.good.c | 15 - cloog-0.17.0/test/0D-2.c | 4 - cloog-0.17.0/test/0D-2.cloog | 14 - cloog-0.17.0/test/0D-2.good.c | 17 - cloog-0.17.0/test/0D-3.c | 2 - cloog-0.17.0/test/0D-3.cloog | 15 - cloog-0.17.0/test/0D-3.good.c | 15 - cloog-0.17.0/test/1point-1.c | 2 - cloog-0.17.0/test/1point-1.cloog | 23 - cloog-0.17.0/test/1point-1.good.c | 18 - cloog-0.17.0/test/1point-2.c | 2 - cloog-0.17.0/test/1point-2.cloog | 23 - cloog-0.17.0/test/1point-2.good.c | 19 - cloog-0.17.0/test/4-param.c | 17 - cloog-0.17.0/test/4-param.cloog | 33 - cloog-0.17.0/test/4-param.good.c | 33 - cloog-0.17.0/test/Makefile.am | 345 - cloog-0.17.0/test/Makefile.in | 945 - cloog-0.17.0/test/backtrack.c | 2 - cloog-0.17.0/test/backtrack.cloog | 24 - cloog-0.17.0/test/backtrack.good.c | 19 - cloog-0.17.0/test/basic-bounds-1.c | 4 - cloog-0.17.0/test/basic-bounds-1.cloog | 21 - cloog-0.17.0/test/basic-bounds-1.good.c | 19 - cloog-0.17.0/test/basic-bounds-2.c | 2 - cloog-0.17.0/test/basic-bounds-2.cloog | 21 - cloog-0.17.0/test/basic-bounds-2.good.c | 17 - cloog-0.17.0/test/basic-bounds-3.c | 4 - cloog-0.17.0/test/basic-bounds-3.cloog | 23 - cloog-0.17.0/test/basic-bounds-3.good.c | 19 - cloog-0.17.0/test/basic-bounds-4.c | 4 - cloog-0.17.0/test/basic-bounds-4.cloog | 23 - cloog-0.17.0/test/basic-bounds-4.good.c | 19 - cloog-0.17.0/test/basic-bounds-5.c | 3 - cloog-0.17.0/test/basic-bounds-5.cloog | 22 - cloog-0.17.0/test/basic-bounds-5.good.c | 18 - cloog-0.17.0/test/basic-bounds-6.c | 2 - cloog-0.17.0/test/basic-bounds-6.cloog | 20 - cloog-0.17.0/test/basic-bounds-6.good.c | 17 - cloog-0.17.0/test/block.c | 5 - cloog-0.17.0/test/block.cloog | 42 - cloog-0.17.0/test/block.good.c | 24 - cloog-0.17.0/test/block2.c | 6 - cloog-0.17.0/test/block2.cloog | 77 - cloog-0.17.0/test/block2.good.c | 25 - cloog-0.17.0/test/block3.c | 5 - cloog-0.17.0/test/block3.cloog | 36 - cloog-0.17.0/test/block3.good.c | 24 - cloog-0.17.0/test/byu98-1-2-3.c | 24 - cloog-0.17.0/test/byu98-1-2-3.cloog | 65 - cloog-0.17.0/test/byu98-1-2-3.good.c | 41 - cloog-0.17.0/test/check_c.sh | 38 - cloog-0.17.0/test/check_fortran.sh | 38 - cloog-0.17.0/test/check_openscop.sh | 38 - cloog-0.17.0/test/check_run.sh | 55 - cloog-0.17.0/test/check_special.sh | 47 - cloog-0.17.0/test/check_strided.sh | 38 - cloog-0.17.0/test/checker.sh | 126 - cloog-0.17.0/test/cholesky.c | 36 - cloog-0.17.0/test/cholesky.cloog | 129 - cloog-0.17.0/test/cholesky.good.c | 56 - cloog-0.17.0/test/cholesky2.c | 67 - cloog-0.17.0/test/cholesky2.cloog | 108 - cloog-0.17.0/test/cholesky2.good.c | 114 - cloog-0.17.0/test/christian.c | 17 - cloog-0.17.0/test/christian.cloog | 57 - cloog-0.17.0/test/christian.good.c | 35 - cloog-0.17.0/test/classen.c | 101 - cloog-0.17.0/test/classen.cloog | 233 - cloog-0.17.0/test/classen.good.c | 396 - cloog-0.17.0/test/classen2.c | 10 - cloog-0.17.0/test/classen2.cloog | 57 - cloog-0.17.0/test/classen2.good.c | 27 - cloog-0.17.0/test/constant.c | 17 - cloog-0.17.0/test/constant.cloog | 128 - cloog-0.17.0/test/constant.good.c | 39 - cloog-0.17.0/test/constbound.c | 13 - cloog-0.17.0/test/constbound.cloog | 53 - cloog-0.17.0/test/constbound.good.c | 31 - cloog-0.17.0/test/darte.c | 65 - cloog-0.17.0/test/darte.cloog | 52 - cloog-0.17.0/test/darte.good.c | 449 - cloog-0.17.0/test/dartef.cloog | 52 - cloog-0.17.0/test/dartef.f | 65 - cloog-0.17.0/test/dealII.c | 14 - cloog-0.17.0/test/dealII.cloog | 54 - cloog-0.17.0/test/dealII.good.c | 30 - cloog-0.17.0/test/donotsimp.c | 9 - cloog-0.17.0/test/donotsimp.cloog | 54 - cloog-0.17.0/test/donotsimp.good.c | 27 - cloog-0.17.0/test/dot.c | 9 - cloog-0.17.0/test/dot.cloog | 33 - cloog-0.17.0/test/dot.good.c | 25 - cloog-0.17.0/test/dot2.c | 15 - cloog-0.17.0/test/dot2.cloog | 29 - cloog-0.17.0/test/dot2.good.c | 31 - cloog-0.17.0/test/double.c | 11 - cloog-0.17.0/test/double.cloog | 69 - cloog-0.17.0/test/double.good.c | 27 - cloog-0.17.0/test/durbin_e_s.c | 25 - cloog-0.17.0/test/durbin_e_s.cloog | 71 - cloog-0.17.0/test/durbin_e_s.good.c | 78 - cloog-0.17.0/test/emploi.c | 16 - cloog-0.17.0/test/emploi.cloog | 49 - cloog-0.17.0/test/emploi.good.c | 35 - cloog-0.17.0/test/equality.c | 11 - cloog-0.17.0/test/equality.cloog | 33 - cloog-0.17.0/test/equality.good.c | 27 - cloog-0.17.0/test/equality2.c | 15 - cloog-0.17.0/test/equality2.cloog | 57 - cloog-0.17.0/test/equality2.good.c | 31 - cloog-0.17.0/test/esced.c | 16 - cloog-0.17.0/test/esced.cloog | 30 - cloog-0.17.0/test/esced.good.c | 30 - cloog-0.17.0/test/ex1.c | 18 - cloog-0.17.0/test/ex1.cloog | 34 - cloog-0.17.0/test/ex1.good.c | 34 - cloog-0.17.0/test/forwardsub-1-1-2.c | 11 - cloog-0.17.0/test/forwardsub-1-1-2.cloog | 56 - cloog-0.17.0/test/forwardsub-1-1-2.good.c | 29 - cloog-0.17.0/test/forwardsub-2-1-2-3.c | 12 - cloog-0.17.0/test/forwardsub-2-1-2-3.cloog | 58 - cloog-0.17.0/test/forwardsub-2-1-2-3.good.c | 30 - cloog-0.17.0/test/forwardsub-3-1-2.c | 23 - cloog-0.17.0/test/forwardsub-3-1-2.cloog | 57 - cloog-0.17.0/test/forwardsub-3-1-2.good.c | 42 - cloog-0.17.0/test/gauss.c | 18 - cloog-0.17.0/test/gauss.cloog | 72 - cloog-0.17.0/test/gauss.good.c | 36 - cloog-0.17.0/test/generate_test.c | 153 - cloog-0.17.0/test/gesced.c | 20 - cloog-0.17.0/test/gesced.cloog | 56 - cloog-0.17.0/test/gesced.good.c | 43 - cloog-0.17.0/test/gesced2.c | 26 - cloog-0.17.0/test/gesced2.cloog | 82 - cloog-0.17.0/test/gesced2.good.c | 69 - cloog-0.17.0/test/gesced3.c | 11 - cloog-0.17.0/test/gesced3.cloog | 39 - cloog-0.17.0/test/gesced3.good.c | 33 - cloog-0.17.0/test/guide.c | 9 - cloog-0.17.0/test/guide.cloog | 35 - cloog-0.17.0/test/guide.good.c | 28 - cloog-0.17.0/test/iftest.c | 6 - cloog-0.17.0/test/iftest.cloog | 28 - cloog-0.17.0/test/iftest.good.c | 24 - cloog-0.17.0/test/iftest2.c | 8 - cloog-0.17.0/test/iftest2.cloog | 31 - cloog-0.17.0/test/iftest2.good.c | 28 - cloog-0.17.0/test/iftestf.cloog | 29 - cloog-0.17.0/test/iftestf.f | 6 - cloog-0.17.0/test/infinite.c | 13 - cloog-0.17.0/test/infinite.cloog | 32 - cloog-0.17.0/test/infinite2.c | 10 - cloog-0.17.0/test/infinite2.cloog | 32 - cloog-0.17.0/test/infinite3.c | 18 - cloog-0.17.0/test/infinite3.cloog | 32 - cloog-0.17.0/test/infinite4.c | 4 - cloog-0.17.0/test/infinite4.cloog | 16 - cloog-0.17.0/test/isl/jacobi-shared.c | 11 - cloog-0.17.0/test/isl/jacobi-shared.cloog | 129 - cloog-0.17.0/test/isl/jacobi-shared.good.c | 28 - cloog-0.17.0/test/isl/mod.c | 6 - cloog-0.17.0/test/isl/mod.cloog | 23 - cloog-0.17.0/test/isl/mod2.c | 6 - cloog-0.17.0/test/isl/mod2.cloog | 20 - cloog-0.17.0/test/isl/mod3.c | 8 - cloog-0.17.0/test/isl/mod3.cloog | 34 - cloog-0.17.0/test/isl/mod4.c | 10 - cloog-0.17.0/test/isl/mod4.cloog | 23 - cloog-0.17.0/test/isl/mxm-shared.c | 8 - cloog-0.17.0/test/isl/mxm-shared.cloog | 162 - cloog-0.17.0/test/isl/unroll.c | 12 - cloog-0.17.0/test/isl/unroll.cloog | 14 - cloog-0.17.0/test/isl/unroll.good.c | 27 - cloog-0.17.0/test/isl/unroll2.c | 7 - cloog-0.17.0/test/isl/unroll2.cloog | 14 - cloog-0.17.0/test/isl/unroll2.good.c | 21 - cloog-0.17.0/test/largeur.c | 8 - cloog-0.17.0/test/largeur.cloog | 26 - cloog-0.17.0/test/largeur.good.c | 23 - cloog-0.17.0/test/levenshtein-1-2-3.c | 37 - cloog-0.17.0/test/levenshtein-1-2-3.cloog | 110 - cloog-0.17.0/test/levenshtein-1-2-3.good.c | 62 - cloog-0.17.0/test/levenshtein-1-2-3f.cloog | 110 - cloog-0.17.0/test/levenshtein-1-2-3f.f | 37 - cloog-0.17.0/test/lex.c | 5 - cloog-0.17.0/test/lex.cloog | 35 - cloog-0.17.0/test/lex.good.c | 23 - cloog-0.17.0/test/lineality-1-2.c | 11 - cloog-0.17.0/test/lineality-1-2.cloog | 36 - cloog-0.17.0/test/lineality-1-2.good.c | 37 - cloog-0.17.0/test/lineality-2-1-2.c | 16 - cloog-0.17.0/test/lineality-2-1-2.cloog | 36 - cloog-0.17.0/test/lineality-2-1-2.good.c | 43 - cloog-0.17.0/test/logo.c | 21 - cloog-0.17.0/test/logo.cloog | 30 - cloog-0.17.0/test/logo.good.c | 43 - cloog-0.17.0/test/logopar.c | 21 - cloog-0.17.0/test/logopar.cloog | 33 - cloog-0.17.0/test/logopar.good.c | 50 - cloog-0.17.0/test/lu.c | 21 - cloog-0.17.0/test/lu.cloog | 47 - cloog-0.17.0/test/lu.good.c | 44 - cloog-0.17.0/test/lu2.c | 21 - cloog-0.17.0/test/lu2.cloog | 37 - cloog-0.17.0/test/lu2.good.c | 42 - cloog-0.17.0/test/lub.c | 13 - cloog-0.17.0/test/lub.cloog | 58 - cloog-0.17.0/test/lub.good.c | 29 - cloog-0.17.0/test/lux.c | 21 - cloog-0.17.0/test/lux.cloog | 36 - cloog-0.17.0/test/lux.good.c | 39 - cloog-0.17.0/test/merge.c | 8 - cloog-0.17.0/test/merge.cloog | 42 - cloog-0.17.0/test/merge.good.c | 29 - cloog-0.17.0/test/min-1-1.c | 8 - cloog-0.17.0/test/min-1-1.cloog | 27 - cloog-0.17.0/test/min-1-1.good.c | 23 - cloog-0.17.0/test/min-2-1.c | 10 - cloog-0.17.0/test/min-2-1.cloog | 31 - cloog-0.17.0/test/min-2-1.good.c | 25 - cloog-0.17.0/test/min-3-1.c | 6 - cloog-0.17.0/test/min-3-1.cloog | 27 - cloog-0.17.0/test/min-3-1.good.c | 21 - cloog-0.17.0/test/min-4-1.c | 6 - cloog-0.17.0/test/min-4-1.cloog | 25 - cloog-0.17.0/test/min-4-1.good.c | 19 - cloog-0.17.0/test/mod4.c | 6 - cloog-0.17.0/test/mod4.cloog | 72 - cloog-0.17.0/test/mode.c | 24 - cloog-0.17.0/test/mode.cloog | 33 - cloog-0.17.0/test/mode.good.c | 50 - cloog-0.17.0/test/multi-mm-1.c | 10 - cloog-0.17.0/test/multi-mm-1.cloog | 37 - cloog-0.17.0/test/multi-mm-1.good.c | 32 - cloog-0.17.0/test/multi-stride.c | 1 - cloog-0.17.0/test/multi-stride.cloog | 28 - cloog-0.17.0/test/multi-stride2.c | 4 - cloog-0.17.0/test/multi-stride2.cloog | 28 - cloog-0.17.0/test/no_lindep.c | 2 - cloog-0.17.0/test/no_lindep.cloog | 34 - cloog-0.17.0/test/no_lindep.good.c | 21 - cloog-0.17.0/test/non_optimal/nul_complex1.c | 10 - .../test/non_optimal/nul_complex1.cloog | 37 - .../test/non_optimal/nul_complex1.good.c | 27 - cloog-0.17.0/test/non_optimal/usvd_e_t.c | 375 - cloog-0.17.0/test/non_optimal/usvd_e_t.cloog | 240 - cloog-0.17.0/test/non_optimal/usvd_e_t.good.c | 429 - cloog-0.17.0/test/non_optimal/youcef.c | 8 - cloog-0.17.0/test/non_optimal/youcef.cloog | 46 - cloog-0.17.0/test/non_optimal/youcef.good.c | 34 - cloog-0.17.0/test/nul_basic1.c | 6 - cloog-0.17.0/test/nul_basic1.cloog | 28 - cloog-0.17.0/test/nul_basic2.c | 7 - cloog-0.17.0/test/nul_basic2.cloog | 54 - cloog-0.17.0/test/nul_lcpc.c | 15 - cloog-0.17.0/test/nul_lcpc.cloog | 39 - cloog-0.17.0/test/openscop/empty.c | 1 - cloog-0.17.0/test/openscop/empty.scop | 35 - cloog-0.17.0/test/openscop/matmult.c | 9 - cloog-0.17.0/test/openscop/matmult.scop | 140 - cloog-0.17.0/test/openscop/union.c | 11 - cloog-0.17.0/test/openscop/union.scop | 106 - cloog-0.17.0/test/orc.c | 68 - cloog-0.17.0/test/orc.cloog | 133 - cloog-0.17.0/test/orc.good.c | 110 - cloog-0.17.0/test/otl.c | 28 - cloog-0.17.0/test/otl.cloog | 117 - cloog-0.17.0/test/otl.good.c | 45 - cloog-0.17.0/test/param-split.c | 10 - cloog-0.17.0/test/param-split.cloog | 24 - cloog-0.17.0/test/param-split.good.c | 27 - cloog-0.17.0/test/pouchet.c | 22 - cloog-0.17.0/test/pouchet.cloog | 76 - cloog-0.17.0/test/pouchet.good.c | 40 - cloog-0.17.0/test/rectangle.c | 6 - cloog-0.17.0/test/rectangle.cloog | 29 - cloog-0.17.0/test/rectangle.good.c | 24 - cloog-0.17.0/test/reservoir/QR.c | 117 - cloog-0.17.0/test/reservoir/QR.cloog | 228 - cloog-0.17.0/test/reservoir/QR.good.c | 208 - cloog-0.17.0/test/reservoir/bastoul3.c | 6 - cloog-0.17.0/test/reservoir/bastoul3.cloog | 33 - cloog-0.17.0/test/reservoir/cholesky2.c | 33 - cloog-0.17.0/test/reservoir/cholesky2.cloog | 79 - cloog-0.17.0/test/reservoir/cholesky2.good.c | 72 - cloog-0.17.0/test/reservoir/fusion1.c | 10 - cloog-0.17.0/test/reservoir/fusion1.cloog | 65 - cloog-0.17.0/test/reservoir/fusion1.good.c | 29 - cloog-0.17.0/test/reservoir/fusion2.c | 17 - cloog-0.17.0/test/reservoir/fusion2.cloog | 56 - cloog-0.17.0/test/reservoir/fusion2.good.c | 41 - cloog-0.17.0/test/reservoir/jacobi2.c | 6 - cloog-0.17.0/test/reservoir/jacobi2.cloog | 37 - cloog-0.17.0/test/reservoir/jacobi2.good.c | 23 - cloog-0.17.0/test/reservoir/jacobi3.c | 29 - cloog-0.17.0/test/reservoir/jacobi3.cloog | 64 - cloog-0.17.0/test/reservoir/jacobi3.good.c | 53 - cloog-0.17.0/test/reservoir/lim-lam1.c | 25 - cloog-0.17.0/test/reservoir/lim-lam1.cloog | 54 - cloog-0.17.0/test/reservoir/lim-lam1.good.c | 56 - cloog-0.17.0/test/reservoir/lim-lam2.c | 18 - cloog-0.17.0/test/reservoir/lim-lam2.cloog | 76 - cloog-0.17.0/test/reservoir/lim-lam2.good.c | 37 - cloog-0.17.0/test/reservoir/lim-lam3.c | 36 - cloog-0.17.0/test/reservoir/lim-lam3.cloog | 101 - cloog-0.17.0/test/reservoir/lim-lam3.good.c | 66 - cloog-0.17.0/test/reservoir/lim-lam4.c | 17 - cloog-0.17.0/test/reservoir/lim-lam4.cloog | 62 - cloog-0.17.0/test/reservoir/lim-lam4.good.c | 39 - cloog-0.17.0/test/reservoir/lim-lam5.c | 18 - cloog-0.17.0/test/reservoir/lim-lam5.cloog | 76 - cloog-0.17.0/test/reservoir/lim-lam5.good.c | 35 - cloog-0.17.0/test/reservoir/lim-lam6.c | 13 - cloog-0.17.0/test/reservoir/lim-lam6.cloog | 56 - cloog-0.17.0/test/reservoir/lim-lam6.good.c | 33 - cloog-0.17.0/test/reservoir/liu-zhuge1.c | 47 - cloog-0.17.0/test/reservoir/liu-zhuge1.cloog | 76 - cloog-0.17.0/test/reservoir/liu-zhuge1.good.c | 168 - cloog-0.17.0/test/reservoir/loechner3.c | 10 - cloog-0.17.0/test/reservoir/loechner3.cloog | 39 - cloog-0.17.0/test/reservoir/loechner3.good.c | 26 - cloog-0.17.0/test/reservoir/loechner4.c | 12 - cloog-0.17.0/test/reservoir/loechner4.cloog | 44 - cloog-0.17.0/test/reservoir/loechner4.good.c | 28 - cloog-0.17.0/test/reservoir/loechner5.c | 12 - cloog-0.17.0/test/reservoir/loechner5.cloog | 44 - cloog-0.17.0/test/reservoir/loechner5.good.c | 27 - cloog-0.17.0/test/reservoir/mg-interp.c | 219 - cloog-0.17.0/test/reservoir/mg-interp.cloog | 376 - cloog-0.17.0/test/reservoir/mg-interp.good.c | 318 - cloog-0.17.0/test/reservoir/mg-interp2.c | 39 - cloog-0.17.0/test/reservoir/mg-interp2.cloog | 112 - cloog-0.17.0/test/reservoir/mg-interp2.good.c | 57 - cloog-0.17.0/test/reservoir/mg-psinv.c | 39 - cloog-0.17.0/test/reservoir/mg-psinv.cloog | 88 - cloog-0.17.0/test/reservoir/mg-psinv.good.c | 71 - cloog-0.17.0/test/reservoir/mg-resid.c | 39 - cloog-0.17.0/test/reservoir/mg-resid.cloog | 88 - cloog-0.17.0/test/reservoir/mg-resid.good.c | 71 - cloog-0.17.0/test/reservoir/mg-rprj3.c | 47 - cloog-0.17.0/test/reservoir/mg-rprj3.cloog | 136 - cloog-0.17.0/test/reservoir/mg-rprj3.good.c | 163 - cloog-0.17.0/test/reservoir/pingali1.c | 21 - cloog-0.17.0/test/reservoir/pingali1.cloog | 61 - cloog-0.17.0/test/reservoir/pingali1.good.c | 44 - cloog-0.17.0/test/reservoir/pingali2.c | 13 - cloog-0.17.0/test/reservoir/pingali2.cloog | 56 - cloog-0.17.0/test/reservoir/pingali2.good.c | 29 - cloog-0.17.0/test/reservoir/pingali3.c | 15 - cloog-0.17.0/test/reservoir/pingali3.cloog | 62 - cloog-0.17.0/test/reservoir/pingali3.good.c | 31 - cloog-0.17.0/test/reservoir/pingali4.c | 11 - cloog-0.17.0/test/reservoir/pingali4.cloog | 57 - cloog-0.17.0/test/reservoir/pingali4.good.c | 29 - cloog-0.17.0/test/reservoir/pingali5.c | 21 - cloog-0.17.0/test/reservoir/pingali5.cloog | 81 - cloog-0.17.0/test/reservoir/pingali5.good.c | 44 - cloog-0.17.0/test/reservoir/pingali6.c | 29 - cloog-0.17.0/test/reservoir/pingali6.cloog | 66 - cloog-0.17.0/test/reservoir/pingali6.good.c | 53 - cloog-0.17.0/test/reservoir/stride.c | 6 - cloog-0.17.0/test/reservoir/stride.cloog | 45 - cloog-0.17.0/test/reservoir/stride2.c | 6 - cloog-0.17.0/test/reservoir/stride2.cloog | 45 - cloog-0.17.0/test/reservoir/tang-xue1.c | 14 - cloog-0.17.0/test/reservoir/tang-xue1.cloog | 80 - cloog-0.17.0/test/reservoir/tang-xue1.good.c | 34 - cloog-0.17.0/test/reservoir/two.c | 2 - cloog-0.17.0/test/reservoir/two.cloog | 26 - cloog-0.17.0/test/reservoir/two.good.c | 23 - cloog-0.17.0/test/singleton.c | 3 - cloog-0.17.0/test/singleton.cloog | 27 - cloog-0.17.0/test/singleton.good.c | 17 - cloog-0.17.0/test/sor1d.c | 19 - cloog-0.17.0/test/sor1d.cloog | 256 - cloog-0.17.0/test/sor1d.good.c | 39 - cloog-0.17.0/test/square+triangle-1-1-2-3.c | 14 - .../test/square+triangle-1-1-2-3.cloog | 36 - .../test/square+triangle-1-1-2-3.good.c | 37 - cloog-0.17.0/test/stride.c | 9 - cloog-0.17.0/test/stride.cloog | 32 - cloog-0.17.0/test/stride.good.c | 27 - cloog-0.17.0/test/stride2.c | 7 - cloog-0.17.0/test/stride2.cloog | 32 - cloog-0.17.0/test/stride2.good.c | 25 - cloog-0.17.0/test/stride3.c | 6 - cloog-0.17.0/test/stride3.cloog | 41 - cloog-0.17.0/test/stride4.c | 6 - cloog-0.17.0/test/stride4.cloog | 33 - cloog-0.17.0/test/swim.c | 672 - cloog-0.17.0/test/swim.cloog | 2453 -- cloog-0.17.0/test/swim.good.c | 819 - cloog-0.17.0/test/test.c | 21 - cloog-0.17.0/test/test.cloog | 33 - cloog-0.17.0/test/test.good.c | 43 - cloog-0.17.0/test/thomasset.c | 49 - cloog-0.17.0/test/thomasset.cloog | 51 - cloog-0.17.0/test/thomasset.good.c | 99 - cloog-0.17.0/test/tiling.c | 6 - cloog-0.17.0/test/tiling.cloog | 30 - cloog-0.17.0/test/tiling.good.c | 21 - cloog-0.17.0/test/uday_scalars.c | 9 - cloog-0.17.0/test/uday_scalars.cloog | 58 - cloog-0.17.0/test/uday_scalars.good.c | 25 - cloog-0.17.0/test/union.c | 16 - cloog-0.17.0/test/union.cloog | 33 - cloog-0.17.0/test/union.good.c | 35 - cloog-0.17.0/test/vasilache.c | 27 - cloog-0.17.0/test/vasilache.cloog | 248 - cloog-0.17.0/test/vasilache.good.c | 62 - cloog-0.17.0/test/vivien.c | 195 - cloog-0.17.0/test/vivien.cloog | 156 - cloog-0.17.0/test/vivien.good.c | 831 - cloog-0.17.0/test/vivien2.c | 168 - cloog-0.17.0/test/vivien2.cloog | 156 - cloog-0.17.0/test/vivien2.good.c | 656 - cloog-0.17.0/test/walters.c | 21 - cloog-0.17.0/test/walters.cloog | 189 - cloog-0.17.0/test/walters.good.c | 46 - cloog-0.17.0/test/walters2.c | 14 - cloog-0.17.0/test/walters2.cloog | 90 - cloog-0.17.0/test/walters2.good.c | 32 - cloog-0.17.0/test/walters3.c | 8 - cloog-0.17.0/test/walters3.cloog | 49 - cloog-0.17.0/test/walters3.good.c | 24 - cloog-0.17.0/test/wavefront.c | 8 - cloog-0.17.0/test/wavefront.cloog | 27 - cloog-0.17.0/test/wavefront.good.c | 26 - cloog-0.17.0/test/yosr.c | 21 - cloog-0.17.0/test/yosr.cloog | 65 - cloog-0.17.0/test/yosr.good.c | 41 - cloog-0.17.0/test/yosr2.c | 23 - cloog-0.17.0/test/yosr2.cloog | 71 - cloog-0.17.0/test/yosr2.good.c | 43 - cloog-0.17.0/test/yosrf.cloog | 65 - cloog-0.17.0/test/yosrf.f | 21 - 1676 files changed, 519095 deletions(-) delete mode 100644 cloog-0.16.3/CLOOG_HEAD delete mode 100644 cloog-0.16.3/ChangeLog delete mode 100644 cloog-0.16.3/Makefile.am delete mode 100644 cloog-0.16.3/Makefile.in delete mode 100644 cloog-0.16.3/README delete mode 100644 cloog-0.16.3/aclocal.m4 delete mode 100644 cloog-0.16.3/autoconf/Doxyfile.in delete mode 100755 cloog-0.16.3/autoconf/config.guess delete mode 100755 cloog-0.16.3/autoconf/config.sub delete mode 100755 cloog-0.16.3/autoconf/depcomp delete mode 100755 cloog-0.16.3/autoconf/install-sh delete mode 100755 cloog-0.16.3/autoconf/ltmain.sh delete mode 100755 cloog-0.16.3/autoconf/missing delete mode 100755 cloog-0.16.3/configure delete mode 100644 cloog-0.16.3/configure.ac delete mode 100644 cloog-0.16.3/doc/Makefile.am delete mode 100644 cloog-0.16.3/doc/Makefile.in delete mode 100644 cloog-0.16.3/doc/TODO delete mode 100644 cloog-0.16.3/doc/cloog.pdf delete mode 100644 cloog-0.16.3/doc/cloog.texi delete mode 100644 cloog-0.16.3/doc/images/basic.eps delete mode 100644 cloog-0.16.3/doc/images/basic.fig delete mode 100644 cloog-0.16.3/doc/images/basic.jpg delete mode 100644 cloog-0.16.3/doc/images/basic.pdf delete mode 100644 cloog-0.16.3/doc/images/basic.txt delete mode 100644 cloog-0.16.3/doc/images/tree.eps delete mode 100644 cloog-0.16.3/doc/images/tree.fig delete mode 100644 cloog-0.16.3/doc/images/tree.jpg delete mode 100644 cloog-0.16.3/doc/images/tree.pdf delete mode 100644 cloog-0.16.3/doc/images/tree.txt delete mode 100644 cloog-0.16.3/examples/README delete mode 100644 cloog-0.16.3/examples/example/Makefile delete mode 100644 cloog-0.16.3/examples/example/example.c delete mode 100755 cloog-0.16.3/genversion.sh.in delete mode 100644 cloog-0.16.3/include/cloog/block.h delete mode 100644 cloog-0.16.3/include/cloog/clast.h delete mode 100644 cloog-0.16.3/include/cloog/cloog.h delete mode 100644 cloog-0.16.3/include/cloog/constraints.h delete mode 100644 cloog-0.16.3/include/cloog/domain.h delete mode 100644 cloog-0.16.3/include/cloog/input.h delete mode 100644 cloog-0.16.3/include/cloog/int.h delete mode 100644 cloog-0.16.3/include/cloog/isl/backend.h delete mode 100644 cloog-0.16.3/include/cloog/isl/cloog.h delete mode 100644 cloog-0.16.3/include/cloog/isl/constraintset.h delete mode 100644 cloog-0.16.3/include/cloog/isl/domain.h delete mode 100644 cloog-0.16.3/include/cloog/loop.h delete mode 100644 cloog-0.16.3/include/cloog/matrix.h delete mode 100644 cloog-0.16.3/include/cloog/matrix/constraintset.h delete mode 100644 cloog-0.16.3/include/cloog/names.h delete mode 100644 cloog-0.16.3/include/cloog/options.h delete mode 100644 cloog-0.16.3/include/cloog/pprint.h delete mode 100644 cloog-0.16.3/include/cloog/program.h delete mode 100644 cloog-0.16.3/include/cloog/state.h delete mode 100644 cloog-0.16.3/include/cloog/statement.h delete mode 100644 cloog-0.16.3/include/cloog/stride.h delete mode 100644 cloog-0.16.3/include/cloog/union_domain.h delete mode 100644 cloog-0.16.3/include/cloog/version.h delete mode 100644 cloog-0.16.3/include/cloog/version.h.in delete mode 100644 cloog-0.16.3/isl/AUTHORS delete mode 100644 cloog-0.16.3/isl/ChangeLog delete mode 100644 cloog-0.16.3/isl/GIT_HEAD_ID delete mode 100644 cloog-0.16.3/isl/Makefile.am delete mode 100644 cloog-0.16.3/isl/Makefile.in delete mode 100644 cloog-0.16.3/isl/aclocal.m4 delete mode 100644 cloog-0.16.3/isl/basis_reduction_tab.c delete mode 100644 cloog-0.16.3/isl/basis_reduction_templ.c delete mode 100644 cloog-0.16.3/isl/bound.c delete mode 100755 cloog-0.16.3/isl/bound_test.sh.in delete mode 100644 cloog-0.16.3/isl/cat.c delete mode 100644 cloog-0.16.3/isl/closure.c delete mode 100755 cloog-0.16.3/isl/config.guess delete mode 100755 cloog-0.16.3/isl/config.sub delete mode 100755 cloog-0.16.3/isl/configure delete mode 100644 cloog-0.16.3/isl/configure.ac delete mode 100755 cloog-0.16.3/isl/depcomp delete mode 100644 cloog-0.16.3/isl/doc/Makefile.am delete mode 100644 cloog-0.16.3/isl/doc/Makefile.in delete mode 100644 cloog-0.16.3/isl/doc/chicago.bst delete mode 100644 cloog-0.16.3/isl/doc/chicago.sty delete mode 100644 cloog-0.16.3/isl/doc/implementation.tex delete mode 100644 cloog-0.16.3/isl/doc/isl.bib delete mode 100644 cloog-0.16.3/isl/doc/manual.pdf delete mode 100644 cloog-0.16.3/isl/doc/manual.tex delete mode 100755 cloog-0.16.3/isl/doc/mypod2latex delete mode 100644 cloog-0.16.3/isl/doc/user.pod delete mode 100644 cloog-0.16.3/isl/include/isl/aff.h delete mode 100644 cloog-0.16.3/isl/include/isl/aff_type.h delete mode 100644 cloog-0.16.3/isl/include/isl/arg.h delete mode 100644 cloog-0.16.3/isl/include/isl/band.h delete mode 100644 cloog-0.16.3/isl/include/isl/blk.h delete mode 100644 cloog-0.16.3/isl/include/isl/config.h.in delete mode 100644 cloog-0.16.3/isl/include/isl/constraint.h delete mode 100644 cloog-0.16.3/isl/include/isl/ctx.h delete mode 100644 cloog-0.16.3/isl/include/isl/dim.h delete mode 100644 cloog-0.16.3/isl/include/isl/div.h delete mode 100644 cloog-0.16.3/isl/include/isl/flow.h delete mode 100644 cloog-0.16.3/isl/include/isl/hash.h delete mode 100644 cloog-0.16.3/isl/include/isl/ilp.h delete mode 100644 cloog-0.16.3/isl/include/isl/int.h delete mode 100644 cloog-0.16.3/isl/include/isl/list.h delete mode 100644 cloog-0.16.3/isl/include/isl/local_space.h delete mode 100644 cloog-0.16.3/isl/include/isl/lp.h delete mode 100644 cloog-0.16.3/isl/include/isl/map.h delete mode 100644 cloog-0.16.3/isl/include/isl/map_type.h delete mode 100644 cloog-0.16.3/isl/include/isl/mat.h delete mode 100644 cloog-0.16.3/isl/include/isl/obj.h delete mode 100644 cloog-0.16.3/isl/include/isl/options.h delete mode 100644 cloog-0.16.3/isl/include/isl/point.h delete mode 100644 cloog-0.16.3/isl/include/isl/polynomial.h delete mode 100644 cloog-0.16.3/isl/include/isl/printer.h delete mode 100644 cloog-0.16.3/isl/include/isl/schedule.h delete mode 100644 cloog-0.16.3/isl/include/isl/seq.h delete mode 100644 cloog-0.16.3/isl/include/isl/set.h delete mode 100644 cloog-0.16.3/isl/include/isl/set_type.h delete mode 100644 cloog-0.16.3/isl/include/isl/stream.h delete mode 100644 cloog-0.16.3/isl/include/isl/union_map.h delete mode 100644 cloog-0.16.3/isl/include/isl/union_set.h delete mode 100644 cloog-0.16.3/isl/include/isl/vec.h delete mode 100644 cloog-0.16.3/isl/include/isl/version.h delete mode 100644 cloog-0.16.3/isl/include/isl/vertices.h delete mode 100755 cloog-0.16.3/isl/install-sh delete mode 100644 cloog-0.16.3/isl/isl.py delete mode 100644 cloog-0.16.3/isl/isl_aff.c delete mode 100644 cloog-0.16.3/isl/isl_aff_private.h delete mode 100644 cloog-0.16.3/isl/isl_affine_hull.c delete mode 100644 cloog-0.16.3/isl/isl_arg.c delete mode 100644 cloog-0.16.3/isl/isl_band.c delete mode 100644 cloog-0.16.3/isl/isl_band_private.h delete mode 100644 cloog-0.16.3/isl/isl_basis_reduction.h delete mode 100644 cloog-0.16.3/isl/isl_bernstein.c delete mode 100644 cloog-0.16.3/isl/isl_bernstein.h delete mode 100644 cloog-0.16.3/isl/isl_blk.c delete mode 100644 cloog-0.16.3/isl/isl_bound.c delete mode 100644 cloog-0.16.3/isl/isl_bound.h delete mode 100644 cloog-0.16.3/isl/isl_coalesce.c delete mode 100644 cloog-0.16.3/isl/isl_config.h.in delete mode 100644 cloog-0.16.3/isl/isl_config_post.h delete mode 100644 cloog-0.16.3/isl/isl_constraint.c delete mode 100644 cloog-0.16.3/isl/isl_constraint_private.h delete mode 100644 cloog-0.16.3/isl/isl_convex_hull.c delete mode 100644 cloog-0.16.3/isl/isl_ctx.c delete mode 100644 cloog-0.16.3/isl/isl_ctx_private.h delete mode 100644 cloog-0.16.3/isl/isl_dim.c delete mode 100644 cloog-0.16.3/isl/isl_dim_map.c delete mode 100644 cloog-0.16.3/isl/isl_dim_map.h delete mode 100644 cloog-0.16.3/isl/isl_dim_private.h delete mode 100644 cloog-0.16.3/isl/isl_div.c delete mode 100644 cloog-0.16.3/isl/isl_div_private.h delete mode 100644 cloog-0.16.3/isl/isl_equalities.c delete mode 100644 cloog-0.16.3/isl/isl_equalities.h delete mode 100644 cloog-0.16.3/isl/isl_factorization.c delete mode 100644 cloog-0.16.3/isl/isl_factorization.h delete mode 100644 cloog-0.16.3/isl/isl_farkas.c delete mode 100644 cloog-0.16.3/isl/isl_flow.c delete mode 100644 cloog-0.16.3/isl/isl_fold.c delete mode 100644 cloog-0.16.3/isl/isl_gmp.c delete mode 100644 cloog-0.16.3/isl/isl_hash.c delete mode 100644 cloog-0.16.3/isl/isl_hmap_map_basic_set.c delete mode 100644 cloog-0.16.3/isl/isl_hmap_map_basic_set.h delete mode 100644 cloog-0.16.3/isl/isl_ilp.c delete mode 100644 cloog-0.16.3/isl/isl_input.c delete mode 100644 cloog-0.16.3/isl/isl_list.c delete mode 100644 cloog-0.16.3/isl/isl_list_private.h delete mode 100644 cloog-0.16.3/isl/isl_list_templ.c delete mode 100644 cloog-0.16.3/isl/isl_list_templ.h delete mode 100644 cloog-0.16.3/isl/isl_local_space.c delete mode 100644 cloog-0.16.3/isl/isl_local_space_private.h delete mode 100644 cloog-0.16.3/isl/isl_lp.c delete mode 100644 cloog-0.16.3/isl/isl_lp_no_piplib.c delete mode 100644 cloog-0.16.3/isl/isl_lp_piplib.c delete mode 100644 cloog-0.16.3/isl/isl_lp_piplib.h delete mode 100644 cloog-0.16.3/isl/isl_map.c delete mode 100644 cloog-0.16.3/isl/isl_map_no_piplib.c delete mode 100644 cloog-0.16.3/isl/isl_map_piplib.c delete mode 100644 cloog-0.16.3/isl/isl_map_piplib.h delete mode 100644 cloog-0.16.3/isl/isl_map_private.h delete mode 100644 cloog-0.16.3/isl/isl_map_simplify.c delete mode 100644 cloog-0.16.3/isl/isl_map_subtract.c delete mode 100644 cloog-0.16.3/isl/isl_mat.c delete mode 100644 cloog-0.16.3/isl/isl_mat_private.h delete mode 100644 cloog-0.16.3/isl/isl_morph.c delete mode 100644 cloog-0.16.3/isl/isl_morph.h delete mode 100644 cloog-0.16.3/isl/isl_name.c delete mode 100644 cloog-0.16.3/isl/isl_name.h delete mode 100644 cloog-0.16.3/isl/isl_obj.c delete mode 100644 cloog-0.16.3/isl/isl_options.c delete mode 100644 cloog-0.16.3/isl/isl_output.c delete mode 100644 cloog-0.16.3/isl/isl_piplib.c delete mode 100644 cloog-0.16.3/isl/isl_piplib.h delete mode 100644 cloog-0.16.3/isl/isl_point.c delete mode 100644 cloog-0.16.3/isl/isl_point_private.h delete mode 100644 cloog-0.16.3/isl/isl_polynomial.c delete mode 100644 cloog-0.16.3/isl/isl_polynomial_private.h delete mode 100644 cloog-0.16.3/isl/isl_printer.c delete mode 100644 cloog-0.16.3/isl/isl_printer_private.h delete mode 100644 cloog-0.16.3/isl/isl_pw_templ.c delete mode 100644 cloog-0.16.3/isl/isl_qsort.c delete mode 100644 cloog-0.16.3/isl/isl_qsort.h delete mode 100644 cloog-0.16.3/isl/isl_range.c delete mode 100644 cloog-0.16.3/isl/isl_range.h delete mode 100644 cloog-0.16.3/isl/isl_reordering.c delete mode 100644 cloog-0.16.3/isl/isl_reordering.h delete mode 100644 cloog-0.16.3/isl/isl_sample.c delete mode 100644 cloog-0.16.3/isl/isl_sample.h delete mode 100644 cloog-0.16.3/isl/isl_sample_no_piplib.c delete mode 100644 cloog-0.16.3/isl/isl_sample_piplib.c delete mode 100644 cloog-0.16.3/isl/isl_sample_piplib.h delete mode 100644 cloog-0.16.3/isl/isl_scan.c delete mode 100644 cloog-0.16.3/isl/isl_scan.h delete mode 100644 cloog-0.16.3/isl/isl_schedule.c delete mode 100644 cloog-0.16.3/isl/isl_schedule_private.h delete mode 100644 cloog-0.16.3/isl/isl_seq.c delete mode 100644 cloog-0.16.3/isl/isl_stream.c delete mode 100644 cloog-0.16.3/isl/isl_tab.c delete mode 100644 cloog-0.16.3/isl/isl_tab.h delete mode 100644 cloog-0.16.3/isl/isl_tab_pip.c delete mode 100644 cloog-0.16.3/isl/isl_test.c delete mode 100644 cloog-0.16.3/isl/isl_transitive_closure.c delete mode 100644 cloog-0.16.3/isl/isl_union_map.c delete mode 100644 cloog-0.16.3/isl/isl_union_map_private.h delete mode 100644 cloog-0.16.3/isl/isl_union_templ.c delete mode 100644 cloog-0.16.3/isl/isl_vec.c delete mode 100644 cloog-0.16.3/isl/isl_version.c delete mode 100644 cloog-0.16.3/isl/isl_vertices.c delete mode 100644 cloog-0.16.3/isl/isl_vertices_private.h delete mode 100755 cloog-0.16.3/isl/ltmain.sh delete mode 100644 cloog-0.16.3/isl/m4/ax_c___attribute__.m4 delete mode 100644 cloog-0.16.3/isl/m4/ax_cc_maxopt.m4 delete mode 100644 cloog-0.16.3/isl/m4/ax_check_compiler_flags.m4 delete mode 100644 cloog-0.16.3/isl/m4/ax_compiler_vendor.m4 delete mode 100644 cloog-0.16.3/isl/m4/ax_create_pkgconfig_info.m4 delete mode 100644 cloog-0.16.3/isl/m4/ax_create_stdint_h.m4 delete mode 100644 cloog-0.16.3/isl/m4/ax_detect_git_head.m4 delete mode 100644 cloog-0.16.3/isl/m4/ax_gcc_archflag.m4 delete mode 100644 cloog-0.16.3/isl/m4/ax_gcc_warn_unused_result.m4 delete mode 100644 cloog-0.16.3/isl/m4/ax_gcc_x86_cpuid.m4 delete mode 100644 cloog-0.16.3/isl/m4/ax_set_warning_flags.m4 delete mode 100644 cloog-0.16.3/isl/m4/ax_submodule.m4 delete mode 100644 cloog-0.16.3/isl/m4/libtool.m4 delete mode 100644 cloog-0.16.3/isl/m4/ltoptions.m4 delete mode 100644 cloog-0.16.3/isl/m4/ltsugar.m4 delete mode 100644 cloog-0.16.3/isl/m4/ltversion.m4 delete mode 100644 cloog-0.16.3/isl/m4/lt~obsolete.m4 delete mode 100755 cloog-0.16.3/isl/missing delete mode 100644 cloog-0.16.3/isl/mp_get_memory_functions.c delete mode 100644 cloog-0.16.3/isl/pip.c delete mode 100755 cloog-0.16.3/isl/pip_test.sh.in delete mode 100644 cloog-0.16.3/isl/polyhedron_detect_equalities.c delete mode 100644 cloog-0.16.3/isl/polyhedron_minimize.c delete mode 100644 cloog-0.16.3/isl/polyhedron_sample.c delete mode 100644 cloog-0.16.3/isl/polytope_scan.c delete mode 100644 cloog-0.16.3/isl/test_inputs/affine.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/affine2.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/affine3.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/application.omega delete mode 100644 cloog-0.16.3/isl/test_inputs/application2.omega delete mode 100644 cloog-0.16.3/isl/test_inputs/basicLinear.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/basicLinear2.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/basicTest.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/basicTestParameterPosNeg.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/boulet.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/brisebarre.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/cg1.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/convex0.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex1.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex10.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex11.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex12.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex13.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex14.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex15.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex2.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex3.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex4.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex5.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex6.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex7.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex8.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/convex9.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/devos.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/equality1.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/equality2.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/equality3.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/equality4.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/equality5.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/esced.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/ex.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/ex2.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/faddeev.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/fimmel.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/gist1.polylib delete mode 100644 cloog-0.16.3/isl/test_inputs/linearExample.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/max.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/neg.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/negative.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/philippe.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/philippe3vars.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/philippe3vars3pars.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/philippeNeg.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/philippePolynomialCoeff.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/philippePolynomialCoeff1P.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/product.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/seghir-vd.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/set.omega delete mode 100644 cloog-0.16.3/isl/test_inputs/small.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/sor1d.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/split.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/square.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/sven.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/test3Deg3Var.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/tobi.pip delete mode 100644 cloog-0.16.3/isl/test_inputs/toplas.pwqp delete mode 100644 cloog-0.16.3/isl/test_inputs/unexpanded.pwqp delete mode 100644 cloog-0.16.3/m4/ax_cc_maxopt.m4 delete mode 100644 cloog-0.16.3/m4/ax_cflags_warn_all.m4 delete mode 100644 cloog-0.16.3/m4/ax_check_compiler_flags.m4 delete mode 100644 cloog-0.16.3/m4/ax_compiler_vendor.m4 delete mode 100644 cloog-0.16.3/m4/ax_create_pkgconfig_info.m4 delete mode 100644 cloog-0.16.3/m4/ax_gcc_archflag.m4 delete mode 100644 cloog-0.16.3/m4/ax_gcc_x86_cpuid.m4 delete mode 100644 cloog-0.16.3/m4/ax_submodule.m4 delete mode 100644 cloog-0.16.3/m4/libtool.m4 delete mode 100644 cloog-0.16.3/m4/ltoptions.m4 delete mode 100644 cloog-0.16.3/m4/ltsugar.m4 delete mode 100644 cloog-0.16.3/m4/ltversion.m4 delete mode 100644 cloog-0.16.3/m4/lt~obsolete.m4 delete mode 100644 cloog-0.16.3/source/block.c delete mode 100644 cloog-0.16.3/source/clast.c delete mode 100644 cloog-0.16.3/source/cloog.c delete mode 100644 cloog-0.16.3/source/input.c delete mode 100644 cloog-0.16.3/source/int.c delete mode 100644 cloog-0.16.3/source/isl/backend.c delete mode 100644 cloog-0.16.3/source/isl/constraints.c delete mode 100644 cloog-0.16.3/source/isl/domain.c delete mode 100644 cloog-0.16.3/source/loop.c delete mode 100644 cloog-0.16.3/source/matrix.c delete mode 100644 cloog-0.16.3/source/matrix/constraintset.c delete mode 100644 cloog-0.16.3/source/mp_get_memory_functions.c delete mode 100644 cloog-0.16.3/source/names.c delete mode 100644 cloog-0.16.3/source/options.c delete mode 100644 cloog-0.16.3/source/pprint.c delete mode 100644 cloog-0.16.3/source/program.c delete mode 100644 cloog-0.16.3/source/state.c delete mode 100644 cloog-0.16.3/source/statement.c delete mode 100644 cloog-0.16.3/source/stride.c delete mode 100644 cloog-0.16.3/source/union_domain.c delete mode 100644 cloog-0.16.3/source/version.c delete mode 100644 cloog-0.16.3/source/version.c.in delete mode 100644 cloog-0.16.3/test/0D-1.c delete mode 100644 cloog-0.16.3/test/0D-1.cloog delete mode 100644 cloog-0.16.3/test/0D-1.good.c delete mode 100644 cloog-0.16.3/test/0D-2.c delete mode 100644 cloog-0.16.3/test/0D-2.cloog delete mode 100644 cloog-0.16.3/test/0D-2.good.c delete mode 100644 cloog-0.16.3/test/0D-3.c delete mode 100644 cloog-0.16.3/test/0D-3.cloog delete mode 100644 cloog-0.16.3/test/0D-3.good.c delete mode 100644 cloog-0.16.3/test/1point-1.c delete mode 100644 cloog-0.16.3/test/1point-1.cloog delete mode 100644 cloog-0.16.3/test/1point-1.good.c delete mode 100644 cloog-0.16.3/test/1point-2.c delete mode 100644 cloog-0.16.3/test/1point-2.cloog delete mode 100644 cloog-0.16.3/test/1point-2.good.c delete mode 100644 cloog-0.16.3/test/4-param.c delete mode 100644 cloog-0.16.3/test/4-param.cloog delete mode 100644 cloog-0.16.3/test/4-param.good.c delete mode 100644 cloog-0.16.3/test/Makefile.am delete mode 100644 cloog-0.16.3/test/Makefile.in delete mode 100644 cloog-0.16.3/test/backtrack.c delete mode 100644 cloog-0.16.3/test/backtrack.cloog delete mode 100644 cloog-0.16.3/test/backtrack.good.c delete mode 100644 cloog-0.16.3/test/basic-bounds-1.c delete mode 100644 cloog-0.16.3/test/basic-bounds-1.cloog delete mode 100644 cloog-0.16.3/test/basic-bounds-1.good.c delete mode 100644 cloog-0.16.3/test/basic-bounds-2.c delete mode 100644 cloog-0.16.3/test/basic-bounds-2.cloog delete mode 100644 cloog-0.16.3/test/basic-bounds-2.good.c delete mode 100644 cloog-0.16.3/test/basic-bounds-3.c delete mode 100644 cloog-0.16.3/test/basic-bounds-3.cloog delete mode 100644 cloog-0.16.3/test/basic-bounds-3.good.c delete mode 100644 cloog-0.16.3/test/basic-bounds-4.c delete mode 100644 cloog-0.16.3/test/basic-bounds-4.cloog delete mode 100644 cloog-0.16.3/test/basic-bounds-4.good.c delete mode 100644 cloog-0.16.3/test/basic-bounds-5.c delete mode 100644 cloog-0.16.3/test/basic-bounds-5.cloog delete mode 100644 cloog-0.16.3/test/basic-bounds-5.good.c delete mode 100644 cloog-0.16.3/test/basic-bounds-6.c delete mode 100644 cloog-0.16.3/test/basic-bounds-6.cloog delete mode 100644 cloog-0.16.3/test/basic-bounds-6.good.c delete mode 100644 cloog-0.16.3/test/block.c delete mode 100644 cloog-0.16.3/test/block.cloog delete mode 100644 cloog-0.16.3/test/block.good.c delete mode 100644 cloog-0.16.3/test/block2.c delete mode 100644 cloog-0.16.3/test/block2.cloog delete mode 100644 cloog-0.16.3/test/block2.good.c delete mode 100644 cloog-0.16.3/test/block3.c delete mode 100644 cloog-0.16.3/test/block3.cloog delete mode 100644 cloog-0.16.3/test/block3.good.c delete mode 100644 cloog-0.16.3/test/byu98-1-2-3.c delete mode 100644 cloog-0.16.3/test/byu98-1-2-3.cloog delete mode 100644 cloog-0.16.3/test/byu98-1-2-3.good.c delete mode 100644 cloog-0.16.3/test/cholesky.c delete mode 100644 cloog-0.16.3/test/cholesky.cloog delete mode 100644 cloog-0.16.3/test/cholesky.good.c delete mode 100644 cloog-0.16.3/test/cholesky2.c delete mode 100644 cloog-0.16.3/test/cholesky2.cloog delete mode 100644 cloog-0.16.3/test/cholesky2.good.c delete mode 100644 cloog-0.16.3/test/christian.c delete mode 100644 cloog-0.16.3/test/christian.cloog delete mode 100644 cloog-0.16.3/test/christian.good.c delete mode 100644 cloog-0.16.3/test/classen.c delete mode 100644 cloog-0.16.3/test/classen.cloog delete mode 100644 cloog-0.16.3/test/classen.good.c delete mode 100644 cloog-0.16.3/test/classen2.c delete mode 100644 cloog-0.16.3/test/classen2.cloog delete mode 100644 cloog-0.16.3/test/classen2.good.c delete mode 100644 cloog-0.16.3/test/constant.c delete mode 100644 cloog-0.16.3/test/constant.cloog delete mode 100644 cloog-0.16.3/test/constant.good.c delete mode 100644 cloog-0.16.3/test/constbound.c delete mode 100644 cloog-0.16.3/test/constbound.cloog delete mode 100644 cloog-0.16.3/test/constbound.good.c delete mode 100644 cloog-0.16.3/test/darte.c delete mode 100644 cloog-0.16.3/test/darte.cloog delete mode 100644 cloog-0.16.3/test/darte.good.c delete mode 100644 cloog-0.16.3/test/dartef.cloog delete mode 100644 cloog-0.16.3/test/dartef.f delete mode 100644 cloog-0.16.3/test/dealII.c delete mode 100644 cloog-0.16.3/test/dealII.cloog delete mode 100644 cloog-0.16.3/test/dealII.good.c delete mode 100644 cloog-0.16.3/test/donotsimp.c delete mode 100644 cloog-0.16.3/test/donotsimp.cloog delete mode 100644 cloog-0.16.3/test/donotsimp.good.c delete mode 100644 cloog-0.16.3/test/dot.c delete mode 100644 cloog-0.16.3/test/dot.cloog delete mode 100644 cloog-0.16.3/test/dot.good.c delete mode 100644 cloog-0.16.3/test/dot2.c delete mode 100644 cloog-0.16.3/test/dot2.cloog delete mode 100644 cloog-0.16.3/test/dot2.good.c delete mode 100644 cloog-0.16.3/test/double.c delete mode 100644 cloog-0.16.3/test/double.cloog delete mode 100644 cloog-0.16.3/test/double.good.c delete mode 100644 cloog-0.16.3/test/durbin_e_s.c delete mode 100644 cloog-0.16.3/test/durbin_e_s.cloog delete mode 100644 cloog-0.16.3/test/durbin_e_s.good.c delete mode 100644 cloog-0.16.3/test/emploi.c delete mode 100644 cloog-0.16.3/test/emploi.cloog delete mode 100644 cloog-0.16.3/test/emploi.good.c delete mode 100644 cloog-0.16.3/test/equality.c delete mode 100644 cloog-0.16.3/test/equality.cloog delete mode 100644 cloog-0.16.3/test/equality.good.c delete mode 100644 cloog-0.16.3/test/equality2.c delete mode 100644 cloog-0.16.3/test/equality2.cloog delete mode 100644 cloog-0.16.3/test/equality2.good.c delete mode 100644 cloog-0.16.3/test/esced.c delete mode 100644 cloog-0.16.3/test/esced.cloog delete mode 100644 cloog-0.16.3/test/esced.good.c delete mode 100644 cloog-0.16.3/test/ex1.c delete mode 100644 cloog-0.16.3/test/ex1.cloog delete mode 100644 cloog-0.16.3/test/ex1.good.c delete mode 100644 cloog-0.16.3/test/forwardsub-1-1-2.c delete mode 100644 cloog-0.16.3/test/forwardsub-1-1-2.cloog delete mode 100644 cloog-0.16.3/test/forwardsub-1-1-2.good.c delete mode 100644 cloog-0.16.3/test/forwardsub-2-1-2-3.c delete mode 100644 cloog-0.16.3/test/forwardsub-2-1-2-3.cloog delete mode 100644 cloog-0.16.3/test/forwardsub-2-1-2-3.good.c delete mode 100644 cloog-0.16.3/test/forwardsub-3-1-2.c delete mode 100644 cloog-0.16.3/test/forwardsub-3-1-2.cloog delete mode 100644 cloog-0.16.3/test/forwardsub-3-1-2.good.c delete mode 100644 cloog-0.16.3/test/gauss.c delete mode 100644 cloog-0.16.3/test/gauss.cloog delete mode 100644 cloog-0.16.3/test/gauss.good.c delete mode 100644 cloog-0.16.3/test/generate_test.c delete mode 100644 cloog-0.16.3/test/gesced.c delete mode 100644 cloog-0.16.3/test/gesced.cloog delete mode 100644 cloog-0.16.3/test/gesced.good.c delete mode 100644 cloog-0.16.3/test/gesced2.c delete mode 100644 cloog-0.16.3/test/gesced2.cloog delete mode 100644 cloog-0.16.3/test/gesced2.good.c delete mode 100644 cloog-0.16.3/test/gesced3.c delete mode 100644 cloog-0.16.3/test/gesced3.cloog delete mode 100644 cloog-0.16.3/test/gesced3.good.c delete mode 100644 cloog-0.16.3/test/guide.c delete mode 100644 cloog-0.16.3/test/guide.cloog delete mode 100644 cloog-0.16.3/test/guide.good.c delete mode 100644 cloog-0.16.3/test/iftest.c delete mode 100644 cloog-0.16.3/test/iftest.cloog delete mode 100644 cloog-0.16.3/test/iftest.good.c delete mode 100644 cloog-0.16.3/test/iftest2.c delete mode 100644 cloog-0.16.3/test/iftest2.cloog delete mode 100644 cloog-0.16.3/test/iftest2.good.c delete mode 100644 cloog-0.16.3/test/iftestf.cloog delete mode 100644 cloog-0.16.3/test/iftestf.f delete mode 100644 cloog-0.16.3/test/infinite.c delete mode 100644 cloog-0.16.3/test/infinite.cloog delete mode 100644 cloog-0.16.3/test/infinite2.c delete mode 100644 cloog-0.16.3/test/infinite2.cloog delete mode 100644 cloog-0.16.3/test/infinite3.c delete mode 100644 cloog-0.16.3/test/infinite3.cloog delete mode 100644 cloog-0.16.3/test/infinite4.c delete mode 100644 cloog-0.16.3/test/infinite4.cloog delete mode 100644 cloog-0.16.3/test/isl/jacobi-shared.c delete mode 100644 cloog-0.16.3/test/isl/jacobi-shared.cloog delete mode 100644 cloog-0.16.3/test/isl/jacobi-shared.good.c delete mode 100644 cloog-0.16.3/test/isl/mod.c delete mode 100644 cloog-0.16.3/test/isl/mod.cloog delete mode 100644 cloog-0.16.3/test/isl/mod2.c delete mode 100644 cloog-0.16.3/test/isl/mod2.cloog delete mode 100644 cloog-0.16.3/test/isl/mod3.c delete mode 100644 cloog-0.16.3/test/isl/mod3.cloog delete mode 100644 cloog-0.16.3/test/isl/mod4.c delete mode 100644 cloog-0.16.3/test/isl/mod4.cloog delete mode 100644 cloog-0.16.3/test/isl/mxm-shared.c delete mode 100644 cloog-0.16.3/test/isl/mxm-shared.cloog delete mode 100644 cloog-0.16.3/test/largeur.c delete mode 100644 cloog-0.16.3/test/largeur.cloog delete mode 100644 cloog-0.16.3/test/largeur.good.c delete mode 100644 cloog-0.16.3/test/levenshtein-1-2-3.c delete mode 100644 cloog-0.16.3/test/levenshtein-1-2-3.cloog delete mode 100644 cloog-0.16.3/test/levenshtein-1-2-3.good.c delete mode 100644 cloog-0.16.3/test/levenshtein-1-2-3f.cloog delete mode 100644 cloog-0.16.3/test/levenshtein-1-2-3f.f delete mode 100644 cloog-0.16.3/test/lex.c delete mode 100644 cloog-0.16.3/test/lex.cloog delete mode 100644 cloog-0.16.3/test/lex.good.c delete mode 100644 cloog-0.16.3/test/lineality-1-2.c delete mode 100644 cloog-0.16.3/test/lineality-1-2.cloog delete mode 100644 cloog-0.16.3/test/lineality-1-2.good.c delete mode 100644 cloog-0.16.3/test/lineality-2-1-2.c delete mode 100644 cloog-0.16.3/test/lineality-2-1-2.cloog delete mode 100644 cloog-0.16.3/test/lineality-2-1-2.good.c delete mode 100644 cloog-0.16.3/test/logo.c delete mode 100644 cloog-0.16.3/test/logo.cloog delete mode 100644 cloog-0.16.3/test/logo.good.c delete mode 100644 cloog-0.16.3/test/logopar.c delete mode 100644 cloog-0.16.3/test/logopar.cloog delete mode 100644 cloog-0.16.3/test/logopar.good.c delete mode 100644 cloog-0.16.3/test/lu.c delete mode 100644 cloog-0.16.3/test/lu.cloog delete mode 100644 cloog-0.16.3/test/lu.good.c delete mode 100644 cloog-0.16.3/test/lu2.c delete mode 100644 cloog-0.16.3/test/lu2.cloog delete mode 100644 cloog-0.16.3/test/lu2.good.c delete mode 100644 cloog-0.16.3/test/lub.c delete mode 100644 cloog-0.16.3/test/lub.cloog delete mode 100644 cloog-0.16.3/test/lub.good.c delete mode 100644 cloog-0.16.3/test/lux.c delete mode 100644 cloog-0.16.3/test/lux.cloog delete mode 100644 cloog-0.16.3/test/lux.good.c delete mode 100644 cloog-0.16.3/test/merge.c delete mode 100644 cloog-0.16.3/test/merge.cloog delete mode 100644 cloog-0.16.3/test/merge.good.c delete mode 100644 cloog-0.16.3/test/min-1-1.c delete mode 100644 cloog-0.16.3/test/min-1-1.cloog delete mode 100644 cloog-0.16.3/test/min-1-1.good.c delete mode 100644 cloog-0.16.3/test/min-2-1.c delete mode 100644 cloog-0.16.3/test/min-2-1.cloog delete mode 100644 cloog-0.16.3/test/min-2-1.good.c delete mode 100644 cloog-0.16.3/test/min-3-1.c delete mode 100644 cloog-0.16.3/test/min-3-1.cloog delete mode 100644 cloog-0.16.3/test/min-3-1.good.c delete mode 100644 cloog-0.16.3/test/min-4-1.c delete mode 100644 cloog-0.16.3/test/min-4-1.cloog delete mode 100644 cloog-0.16.3/test/min-4-1.good.c delete mode 100644 cloog-0.16.3/test/mod4.c delete mode 100644 cloog-0.16.3/test/mod4.cloog delete mode 100644 cloog-0.16.3/test/mode.c delete mode 100644 cloog-0.16.3/test/mode.cloog delete mode 100644 cloog-0.16.3/test/mode.good.c delete mode 100644 cloog-0.16.3/test/multi-mm-1.c delete mode 100644 cloog-0.16.3/test/multi-mm-1.cloog delete mode 100644 cloog-0.16.3/test/multi-mm-1.good.c delete mode 100644 cloog-0.16.3/test/multi-stride.c delete mode 100644 cloog-0.16.3/test/multi-stride.cloog delete mode 100644 cloog-0.16.3/test/multi-stride2.c delete mode 100644 cloog-0.16.3/test/multi-stride2.cloog delete mode 100644 cloog-0.16.3/test/no_lindep.c delete mode 100644 cloog-0.16.3/test/no_lindep.cloog delete mode 100644 cloog-0.16.3/test/no_lindep.good.c delete mode 100644 cloog-0.16.3/test/non_optimal/nul_complex1.c delete mode 100644 cloog-0.16.3/test/non_optimal/nul_complex1.cloog delete mode 100644 cloog-0.16.3/test/non_optimal/nul_complex1.good.c delete mode 100644 cloog-0.16.3/test/non_optimal/usvd_e_t.c delete mode 100644 cloog-0.16.3/test/non_optimal/usvd_e_t.cloog delete mode 100644 cloog-0.16.3/test/non_optimal/usvd_e_t.good.c delete mode 100644 cloog-0.16.3/test/non_optimal/youcef.c delete mode 100644 cloog-0.16.3/test/non_optimal/youcef.cloog delete mode 100644 cloog-0.16.3/test/non_optimal/youcef.good.c delete mode 100644 cloog-0.16.3/test/nul_basic1.c delete mode 100644 cloog-0.16.3/test/nul_basic1.cloog delete mode 100644 cloog-0.16.3/test/nul_basic2.c delete mode 100644 cloog-0.16.3/test/nul_basic2.cloog delete mode 100644 cloog-0.16.3/test/nul_lcpc.c delete mode 100644 cloog-0.16.3/test/nul_lcpc.cloog delete mode 100644 cloog-0.16.3/test/orc.c delete mode 100644 cloog-0.16.3/test/orc.cloog delete mode 100644 cloog-0.16.3/test/orc.good.c delete mode 100644 cloog-0.16.3/test/otl.c delete mode 100644 cloog-0.16.3/test/otl.cloog delete mode 100644 cloog-0.16.3/test/otl.good.c delete mode 100644 cloog-0.16.3/test/param-split.c delete mode 100644 cloog-0.16.3/test/param-split.cloog delete mode 100644 cloog-0.16.3/test/param-split.good.c delete mode 100644 cloog-0.16.3/test/pouchet.c delete mode 100644 cloog-0.16.3/test/pouchet.cloog delete mode 100644 cloog-0.16.3/test/pouchet.good.c delete mode 100644 cloog-0.16.3/test/rectangle.c delete mode 100644 cloog-0.16.3/test/rectangle.cloog delete mode 100644 cloog-0.16.3/test/rectangle.good.c delete mode 100644 cloog-0.16.3/test/reservoir/QR.c delete mode 100755 cloog-0.16.3/test/reservoir/QR.cloog delete mode 100644 cloog-0.16.3/test/reservoir/QR.good.c delete mode 100644 cloog-0.16.3/test/reservoir/bastoul3.c delete mode 100644 cloog-0.16.3/test/reservoir/bastoul3.cloog delete mode 100644 cloog-0.16.3/test/reservoir/cholesky2.c delete mode 100755 cloog-0.16.3/test/reservoir/cholesky2.cloog delete mode 100644 cloog-0.16.3/test/reservoir/cholesky2.good.c delete mode 100644 cloog-0.16.3/test/reservoir/fusion1.c delete mode 100755 cloog-0.16.3/test/reservoir/fusion1.cloog delete mode 100644 cloog-0.16.3/test/reservoir/fusion1.good.c delete mode 100644 cloog-0.16.3/test/reservoir/fusion2.c delete mode 100755 cloog-0.16.3/test/reservoir/fusion2.cloog delete mode 100644 cloog-0.16.3/test/reservoir/fusion2.good.c delete mode 100644 cloog-0.16.3/test/reservoir/jacobi2.c delete mode 100755 cloog-0.16.3/test/reservoir/jacobi2.cloog delete mode 100644 cloog-0.16.3/test/reservoir/jacobi2.good.c delete mode 100644 cloog-0.16.3/test/reservoir/jacobi3.c delete mode 100755 cloog-0.16.3/test/reservoir/jacobi3.cloog delete mode 100644 cloog-0.16.3/test/reservoir/jacobi3.good.c delete mode 100644 cloog-0.16.3/test/reservoir/lim-lam1.c delete mode 100644 cloog-0.16.3/test/reservoir/lim-lam1.cloog delete mode 100644 cloog-0.16.3/test/reservoir/lim-lam1.good.c delete mode 100644 cloog-0.16.3/test/reservoir/lim-lam2.c delete mode 100755 cloog-0.16.3/test/reservoir/lim-lam2.cloog delete mode 100644 cloog-0.16.3/test/reservoir/lim-lam2.good.c delete mode 100644 cloog-0.16.3/test/reservoir/lim-lam3.c delete mode 100755 cloog-0.16.3/test/reservoir/lim-lam3.cloog delete mode 100644 cloog-0.16.3/test/reservoir/lim-lam3.good.c delete mode 100644 cloog-0.16.3/test/reservoir/lim-lam4.c delete mode 100755 cloog-0.16.3/test/reservoir/lim-lam4.cloog delete mode 100644 cloog-0.16.3/test/reservoir/lim-lam4.good.c delete mode 100644 cloog-0.16.3/test/reservoir/lim-lam5.c delete mode 100755 cloog-0.16.3/test/reservoir/lim-lam5.cloog delete mode 100644 cloog-0.16.3/test/reservoir/lim-lam5.good.c delete mode 100644 cloog-0.16.3/test/reservoir/lim-lam6.c delete mode 100755 cloog-0.16.3/test/reservoir/lim-lam6.cloog delete mode 100644 cloog-0.16.3/test/reservoir/lim-lam6.good.c delete mode 100644 cloog-0.16.3/test/reservoir/liu-zhuge1.c delete mode 100755 cloog-0.16.3/test/reservoir/liu-zhuge1.cloog delete mode 100644 cloog-0.16.3/test/reservoir/liu-zhuge1.good.c delete mode 100644 cloog-0.16.3/test/reservoir/loechner3.c delete mode 100755 cloog-0.16.3/test/reservoir/loechner3.cloog delete mode 100644 cloog-0.16.3/test/reservoir/loechner3.good.c delete mode 100644 cloog-0.16.3/test/reservoir/loechner4.c delete mode 100755 cloog-0.16.3/test/reservoir/loechner4.cloog delete mode 100644 cloog-0.16.3/test/reservoir/loechner4.good.c delete mode 100644 cloog-0.16.3/test/reservoir/loechner5.c delete mode 100755 cloog-0.16.3/test/reservoir/loechner5.cloog delete mode 100644 cloog-0.16.3/test/reservoir/loechner5.good.c delete mode 100644 cloog-0.16.3/test/reservoir/mg-interp.c delete mode 100755 cloog-0.16.3/test/reservoir/mg-interp.cloog delete mode 100644 cloog-0.16.3/test/reservoir/mg-interp.good.c delete mode 100644 cloog-0.16.3/test/reservoir/mg-interp2.c delete mode 100755 cloog-0.16.3/test/reservoir/mg-interp2.cloog delete mode 100644 cloog-0.16.3/test/reservoir/mg-interp2.good.c delete mode 100644 cloog-0.16.3/test/reservoir/mg-psinv.c delete mode 100755 cloog-0.16.3/test/reservoir/mg-psinv.cloog delete mode 100644 cloog-0.16.3/test/reservoir/mg-psinv.good.c delete mode 100644 cloog-0.16.3/test/reservoir/mg-resid.c delete mode 100755 cloog-0.16.3/test/reservoir/mg-resid.cloog delete mode 100644 cloog-0.16.3/test/reservoir/mg-resid.good.c delete mode 100644 cloog-0.16.3/test/reservoir/mg-rprj3.c delete mode 100755 cloog-0.16.3/test/reservoir/mg-rprj3.cloog delete mode 100644 cloog-0.16.3/test/reservoir/mg-rprj3.good.c delete mode 100644 cloog-0.16.3/test/reservoir/pingali1.c delete mode 100755 cloog-0.16.3/test/reservoir/pingali1.cloog delete mode 100644 cloog-0.16.3/test/reservoir/pingali1.good.c delete mode 100644 cloog-0.16.3/test/reservoir/pingali2.c delete mode 100755 cloog-0.16.3/test/reservoir/pingali2.cloog delete mode 100644 cloog-0.16.3/test/reservoir/pingali2.good.c delete mode 100644 cloog-0.16.3/test/reservoir/pingali3.c delete mode 100755 cloog-0.16.3/test/reservoir/pingali3.cloog delete mode 100644 cloog-0.16.3/test/reservoir/pingali3.good.c delete mode 100644 cloog-0.16.3/test/reservoir/pingali4.c delete mode 100755 cloog-0.16.3/test/reservoir/pingali4.cloog delete mode 100644 cloog-0.16.3/test/reservoir/pingali4.good.c delete mode 100644 cloog-0.16.3/test/reservoir/pingali5.c delete mode 100755 cloog-0.16.3/test/reservoir/pingali5.cloog delete mode 100644 cloog-0.16.3/test/reservoir/pingali5.good.c delete mode 100644 cloog-0.16.3/test/reservoir/pingali6.c delete mode 100755 cloog-0.16.3/test/reservoir/pingali6.cloog delete mode 100644 cloog-0.16.3/test/reservoir/pingali6.good.c delete mode 100644 cloog-0.16.3/test/reservoir/stride.c delete mode 100644 cloog-0.16.3/test/reservoir/stride.cloog delete mode 100644 cloog-0.16.3/test/reservoir/stride2.c delete mode 100644 cloog-0.16.3/test/reservoir/stride2.cloog delete mode 100644 cloog-0.16.3/test/reservoir/tang-xue1.c delete mode 100644 cloog-0.16.3/test/reservoir/tang-xue1.cloog delete mode 100644 cloog-0.16.3/test/reservoir/tang-xue1.good.c delete mode 100644 cloog-0.16.3/test/reservoir/two.c delete mode 100644 cloog-0.16.3/test/reservoir/two.cloog delete mode 100644 cloog-0.16.3/test/reservoir/two.good.c delete mode 100644 cloog-0.16.3/test/singleton.c delete mode 100644 cloog-0.16.3/test/singleton.cloog delete mode 100644 cloog-0.16.3/test/singleton.good.c delete mode 100644 cloog-0.16.3/test/sor1d.c delete mode 100644 cloog-0.16.3/test/sor1d.cloog delete mode 100644 cloog-0.16.3/test/sor1d.good.c delete mode 100644 cloog-0.16.3/test/square+triangle-1-1-2-3.c delete mode 100644 cloog-0.16.3/test/square+triangle-1-1-2-3.cloog delete mode 100644 cloog-0.16.3/test/square+triangle-1-1-2-3.good.c delete mode 100644 cloog-0.16.3/test/stride.c delete mode 100644 cloog-0.16.3/test/stride.cloog delete mode 100644 cloog-0.16.3/test/stride.good.c delete mode 100644 cloog-0.16.3/test/stride2.c delete mode 100644 cloog-0.16.3/test/stride2.cloog delete mode 100644 cloog-0.16.3/test/stride2.good.c delete mode 100644 cloog-0.16.3/test/stride3.c delete mode 100644 cloog-0.16.3/test/stride3.cloog delete mode 100644 cloog-0.16.3/test/stride4.c delete mode 100644 cloog-0.16.3/test/stride4.cloog delete mode 100644 cloog-0.16.3/test/swim.c delete mode 100644 cloog-0.16.3/test/swim.cloog delete mode 100644 cloog-0.16.3/test/swim.good.c delete mode 100644 cloog-0.16.3/test/test.c delete mode 100644 cloog-0.16.3/test/test.cloog delete mode 100644 cloog-0.16.3/test/test.good.c delete mode 100644 cloog-0.16.3/test/thomasset.c delete mode 100644 cloog-0.16.3/test/thomasset.cloog delete mode 100644 cloog-0.16.3/test/thomasset.good.c delete mode 100644 cloog-0.16.3/test/tiling.c delete mode 100644 cloog-0.16.3/test/tiling.cloog delete mode 100644 cloog-0.16.3/test/tiling.good.c delete mode 100644 cloog-0.16.3/test/uday_scalars.c delete mode 100644 cloog-0.16.3/test/uday_scalars.cloog delete mode 100644 cloog-0.16.3/test/uday_scalars.good.c delete mode 100644 cloog-0.16.3/test/union.c delete mode 100644 cloog-0.16.3/test/union.cloog delete mode 100644 cloog-0.16.3/test/union.good.c delete mode 100644 cloog-0.16.3/test/vasilache.c delete mode 100644 cloog-0.16.3/test/vasilache.cloog delete mode 100644 cloog-0.16.3/test/vasilache.good.c delete mode 100644 cloog-0.16.3/test/vivien.c delete mode 100644 cloog-0.16.3/test/vivien.cloog delete mode 100644 cloog-0.16.3/test/vivien.good.c delete mode 100644 cloog-0.16.3/test/vivien2.c delete mode 100644 cloog-0.16.3/test/vivien2.cloog delete mode 100644 cloog-0.16.3/test/vivien2.good.c delete mode 100644 cloog-0.16.3/test/walters.c delete mode 100644 cloog-0.16.3/test/walters.cloog delete mode 100644 cloog-0.16.3/test/walters.good.c delete mode 100644 cloog-0.16.3/test/walters2.c delete mode 100644 cloog-0.16.3/test/walters2.cloog delete mode 100644 cloog-0.16.3/test/walters2.good.c delete mode 100644 cloog-0.16.3/test/walters3.c delete mode 100644 cloog-0.16.3/test/walters3.cloog delete mode 100644 cloog-0.16.3/test/walters3.good.c delete mode 100644 cloog-0.16.3/test/wavefront.c delete mode 100644 cloog-0.16.3/test/wavefront.cloog delete mode 100644 cloog-0.16.3/test/wavefront.good.c delete mode 100644 cloog-0.16.3/test/yosr.c delete mode 100644 cloog-0.16.3/test/yosr.cloog delete mode 100644 cloog-0.16.3/test/yosr.good.c delete mode 100644 cloog-0.16.3/test/yosr2.c delete mode 100644 cloog-0.16.3/test/yosr2.cloog delete mode 100644 cloog-0.16.3/test/yosr2.good.c delete mode 100644 cloog-0.16.3/test/yosrf.cloog delete mode 100644 cloog-0.16.3/test/yosrf.f delete mode 100644 cloog-0.17.0/CLOOG_HEAD delete mode 100644 cloog-0.17.0/ChangeLog delete mode 100644 cloog-0.17.0/Makefile.am delete mode 100644 cloog-0.17.0/Makefile.in delete mode 100644 cloog-0.17.0/README delete mode 100644 cloog-0.17.0/aclocal.m4 delete mode 100644 cloog-0.17.0/autoconf/Doxyfile.in delete mode 100755 cloog-0.17.0/autoconf/config.guess delete mode 100755 cloog-0.17.0/autoconf/config.sub delete mode 100755 cloog-0.17.0/autoconf/depcomp delete mode 100755 cloog-0.17.0/autoconf/install-sh delete mode 100755 cloog-0.17.0/autoconf/ltmain.sh delete mode 100755 cloog-0.17.0/autoconf/missing delete mode 100755 cloog-0.17.0/configure delete mode 100644 cloog-0.17.0/configure.ac delete mode 100644 cloog-0.17.0/doc/Makefile.am delete mode 100644 cloog-0.17.0/doc/Makefile.in delete mode 100644 cloog-0.17.0/doc/TODO delete mode 100644 cloog-0.17.0/doc/cloog.pdf delete mode 100644 cloog-0.17.0/doc/cloog.texi delete mode 100644 cloog-0.17.0/doc/images/basic.eps delete mode 100644 cloog-0.17.0/doc/images/basic.fig delete mode 100644 cloog-0.17.0/doc/images/basic.jpg delete mode 100644 cloog-0.17.0/doc/images/basic.pdf delete mode 100644 cloog-0.17.0/doc/images/basic.txt delete mode 100644 cloog-0.17.0/doc/images/tree.eps delete mode 100644 cloog-0.17.0/doc/images/tree.fig delete mode 100644 cloog-0.17.0/doc/images/tree.jpg delete mode 100644 cloog-0.17.0/doc/images/tree.pdf delete mode 100644 cloog-0.17.0/doc/images/tree.txt delete mode 100644 cloog-0.17.0/examples/README delete mode 100644 cloog-0.17.0/examples/example/Makefile delete mode 100644 cloog-0.17.0/examples/example/example.c delete mode 100755 cloog-0.17.0/genversion.sh.in delete mode 100644 cloog-0.17.0/include/cloog/block.h delete mode 100644 cloog-0.17.0/include/cloog/clast.h delete mode 100644 cloog-0.17.0/include/cloog/cloog.h delete mode 100644 cloog-0.17.0/include/cloog/constraints.h delete mode 100644 cloog-0.17.0/include/cloog/domain.h delete mode 100644 cloog-0.17.0/include/cloog/input.h delete mode 100644 cloog-0.17.0/include/cloog/int.h delete mode 100644 cloog-0.17.0/include/cloog/isl/backend.h delete mode 100644 cloog-0.17.0/include/cloog/isl/cloog.h delete mode 100644 cloog-0.17.0/include/cloog/isl/constraintset.h delete mode 100644 cloog-0.17.0/include/cloog/isl/domain.h delete mode 100644 cloog-0.17.0/include/cloog/loop.h delete mode 100644 cloog-0.17.0/include/cloog/matrix.h delete mode 100644 cloog-0.17.0/include/cloog/matrix/constraintset.h delete mode 100644 cloog-0.17.0/include/cloog/names.h delete mode 100644 cloog-0.17.0/include/cloog/options.h delete mode 100644 cloog-0.17.0/include/cloog/pprint.h delete mode 100644 cloog-0.17.0/include/cloog/program.h delete mode 100644 cloog-0.17.0/include/cloog/state.h delete mode 100644 cloog-0.17.0/include/cloog/statement.h delete mode 100644 cloog-0.17.0/include/cloog/stride.h delete mode 100644 cloog-0.17.0/include/cloog/union_domain.h delete mode 100644 cloog-0.17.0/include/cloog/version.h delete mode 100644 cloog-0.17.0/include/cloog/version.h.in delete mode 100644 cloog-0.17.0/isl/AUTHORS delete mode 100644 cloog-0.17.0/isl/ChangeLog delete mode 100644 cloog-0.17.0/isl/GIT_HEAD_ID delete mode 100644 cloog-0.17.0/isl/Makefile.am delete mode 100644 cloog-0.17.0/isl/Makefile.in delete mode 100644 cloog-0.17.0/isl/aclocal.m4 delete mode 100644 cloog-0.17.0/isl/basis_reduction_tab.c delete mode 100644 cloog-0.17.0/isl/basis_reduction_templ.c delete mode 100644 cloog-0.17.0/isl/bound.c delete mode 100755 cloog-0.17.0/isl/bound_test.sh.in delete mode 100644 cloog-0.17.0/isl/cat.c delete mode 100644 cloog-0.17.0/isl/closure.c delete mode 100755 cloog-0.17.0/isl/config.guess delete mode 100755 cloog-0.17.0/isl/config.sub delete mode 100755 cloog-0.17.0/isl/configure delete mode 100644 cloog-0.17.0/isl/configure.ac delete mode 100755 cloog-0.17.0/isl/depcomp delete mode 100644 cloog-0.17.0/isl/doc/Makefile.am delete mode 100644 cloog-0.17.0/isl/doc/Makefile.in delete mode 100644 cloog-0.17.0/isl/doc/chicago.bst delete mode 100644 cloog-0.17.0/isl/doc/chicago.sty delete mode 100644 cloog-0.17.0/isl/doc/implementation.tex delete mode 100644 cloog-0.17.0/isl/doc/isl.bib delete mode 100644 cloog-0.17.0/isl/doc/manual.pdf delete mode 100644 cloog-0.17.0/isl/doc/manual.tex delete mode 100755 cloog-0.17.0/isl/doc/mypod2latex delete mode 100644 cloog-0.17.0/isl/doc/user.pod delete mode 100644 cloog-0.17.0/isl/include/isl/aff.h delete mode 100644 cloog-0.17.0/isl/include/isl/aff_type.h delete mode 100644 cloog-0.17.0/isl/include/isl/arg.h delete mode 100644 cloog-0.17.0/isl/include/isl/band.h delete mode 100644 cloog-0.17.0/isl/include/isl/blk.h delete mode 100644 cloog-0.17.0/isl/include/isl/config.h.in delete mode 100644 cloog-0.17.0/isl/include/isl/constraint.h delete mode 100644 cloog-0.17.0/isl/include/isl/ctx.h delete mode 100644 cloog-0.17.0/isl/include/isl/dim.h delete mode 100644 cloog-0.17.0/isl/include/isl/flow.h delete mode 100644 cloog-0.17.0/isl/include/isl/hash.h delete mode 100644 cloog-0.17.0/isl/include/isl/id.h delete mode 100644 cloog-0.17.0/isl/include/isl/ilp.h delete mode 100644 cloog-0.17.0/isl/include/isl/int.h delete mode 100644 cloog-0.17.0/isl/include/isl/list.h delete mode 100644 cloog-0.17.0/isl/include/isl/local_space.h delete mode 100644 cloog-0.17.0/isl/include/isl/lp.h delete mode 100644 cloog-0.17.0/isl/include/isl/map.h delete mode 100644 cloog-0.17.0/isl/include/isl/map_type.h delete mode 100644 cloog-0.17.0/isl/include/isl/mat.h delete mode 100644 cloog-0.17.0/isl/include/isl/multi.h delete mode 100644 cloog-0.17.0/isl/include/isl/obj.h delete mode 100644 cloog-0.17.0/isl/include/isl/options.h delete mode 100644 cloog-0.17.0/isl/include/isl/point.h delete mode 100644 cloog-0.17.0/isl/include/isl/polynomial.h delete mode 100644 cloog-0.17.0/isl/include/isl/polynomial_type.h delete mode 100644 cloog-0.17.0/isl/include/isl/printer.h delete mode 100644 cloog-0.17.0/isl/include/isl/schedule.h delete mode 100644 cloog-0.17.0/isl/include/isl/seq.h delete mode 100644 cloog-0.17.0/isl/include/isl/set.h delete mode 100644 cloog-0.17.0/isl/include/isl/set_type.h delete mode 100644 cloog-0.17.0/isl/include/isl/space.h delete mode 100644 cloog-0.17.0/isl/include/isl/stream.h delete mode 100644 cloog-0.17.0/isl/include/isl/union_map.h delete mode 100644 cloog-0.17.0/isl/include/isl/union_set.h delete mode 100644 cloog-0.17.0/isl/include/isl/vec.h delete mode 100644 cloog-0.17.0/isl/include/isl/version.h delete mode 100644 cloog-0.17.0/isl/include/isl/vertices.h delete mode 100755 cloog-0.17.0/isl/install-sh delete mode 100644 cloog-0.17.0/isl/interface/Makefile.am delete mode 100644 cloog-0.17.0/isl/interface/Makefile.in delete mode 100644 cloog-0.17.0/isl/interface/extract_interface.cc delete mode 100644 cloog-0.17.0/isl/interface/extract_interface.h delete mode 100644 cloog-0.17.0/isl/interface/isl.py delete mode 100644 cloog-0.17.0/isl/interface/python.cc delete mode 100644 cloog-0.17.0/isl/interface/python.h delete mode 100644 cloog-0.17.0/isl/isl.py delete mode 100644 cloog-0.17.0/isl/isl_aff.c delete mode 100644 cloog-0.17.0/isl/isl_aff_private.h delete mode 100644 cloog-0.17.0/isl/isl_affine_hull.c delete mode 100644 cloog-0.17.0/isl/isl_arg.c delete mode 100644 cloog-0.17.0/isl/isl_band.c delete mode 100644 cloog-0.17.0/isl/isl_band_private.h delete mode 100644 cloog-0.17.0/isl/isl_basis_reduction.h delete mode 100644 cloog-0.17.0/isl/isl_bernstein.c delete mode 100644 cloog-0.17.0/isl/isl_bernstein.h delete mode 100644 cloog-0.17.0/isl/isl_blk.c delete mode 100644 cloog-0.17.0/isl/isl_bound.c delete mode 100644 cloog-0.17.0/isl/isl_bound.h delete mode 100644 cloog-0.17.0/isl/isl_coalesce.c delete mode 100644 cloog-0.17.0/isl/isl_config.h.in delete mode 100644 cloog-0.17.0/isl/isl_config_post.h delete mode 100644 cloog-0.17.0/isl/isl_constraint.c delete mode 100644 cloog-0.17.0/isl/isl_constraint_private.h delete mode 100644 cloog-0.17.0/isl/isl_convex_hull.c delete mode 100644 cloog-0.17.0/isl/isl_ctx.c delete mode 100644 cloog-0.17.0/isl/isl_ctx_private.h delete mode 100644 cloog-0.17.0/isl/isl_dim.c delete mode 100644 cloog-0.17.0/isl/isl_dim_map.c delete mode 100644 cloog-0.17.0/isl/isl_dim_map.h delete mode 100644 cloog-0.17.0/isl/isl_equalities.c delete mode 100644 cloog-0.17.0/isl/isl_equalities.h delete mode 100644 cloog-0.17.0/isl/isl_factorization.c delete mode 100644 cloog-0.17.0/isl/isl_factorization.h delete mode 100644 cloog-0.17.0/isl/isl_farkas.c delete mode 100644 cloog-0.17.0/isl/isl_flow.c delete mode 100644 cloog-0.17.0/isl/isl_fold.c delete mode 100644 cloog-0.17.0/isl/isl_gmp.c delete mode 100644 cloog-0.17.0/isl/isl_hash.c delete mode 100644 cloog-0.17.0/isl/isl_hmap_map_basic_set.c delete mode 100644 cloog-0.17.0/isl/isl_hmap_map_basic_set.h delete mode 100644 cloog-0.17.0/isl/isl_id.c delete mode 100644 cloog-0.17.0/isl/isl_id_private.h delete mode 100644 cloog-0.17.0/isl/isl_ilp.c delete mode 100644 cloog-0.17.0/isl/isl_input.c delete mode 100644 cloog-0.17.0/isl/isl_list.c delete mode 100644 cloog-0.17.0/isl/isl_list_private.h delete mode 100644 cloog-0.17.0/isl/isl_list_templ.c delete mode 100644 cloog-0.17.0/isl/isl_list_templ.h delete mode 100644 cloog-0.17.0/isl/isl_local_space.c delete mode 100644 cloog-0.17.0/isl/isl_local_space_private.h delete mode 100644 cloog-0.17.0/isl/isl_lp.c delete mode 100644 cloog-0.17.0/isl/isl_lp_no_piplib.c delete mode 100644 cloog-0.17.0/isl/isl_lp_piplib.c delete mode 100644 cloog-0.17.0/isl/isl_lp_piplib.h delete mode 100644 cloog-0.17.0/isl/isl_map.c delete mode 100644 cloog-0.17.0/isl/isl_map_no_piplib.c delete mode 100644 cloog-0.17.0/isl/isl_map_piplib.c delete mode 100644 cloog-0.17.0/isl/isl_map_piplib.h delete mode 100644 cloog-0.17.0/isl/isl_map_private.h delete mode 100644 cloog-0.17.0/isl/isl_map_simplify.c delete mode 100644 cloog-0.17.0/isl/isl_map_subtract.c delete mode 100644 cloog-0.17.0/isl/isl_mat.c delete mode 100644 cloog-0.17.0/isl/isl_mat_private.h delete mode 100644 cloog-0.17.0/isl/isl_morph.c delete mode 100644 cloog-0.17.0/isl/isl_morph.h delete mode 100644 cloog-0.17.0/isl/isl_multi_templ.c delete mode 100644 cloog-0.17.0/isl/isl_multi_templ.h delete mode 100644 cloog-0.17.0/isl/isl_obj.c delete mode 100644 cloog-0.17.0/isl/isl_options.c delete mode 100644 cloog-0.17.0/isl/isl_options_private.h delete mode 100644 cloog-0.17.0/isl/isl_output.c delete mode 100644 cloog-0.17.0/isl/isl_piplib.c delete mode 100644 cloog-0.17.0/isl/isl_piplib.h delete mode 100644 cloog-0.17.0/isl/isl_point.c delete mode 100644 cloog-0.17.0/isl/isl_point_private.h delete mode 100644 cloog-0.17.0/isl/isl_polynomial.c delete mode 100644 cloog-0.17.0/isl/isl_polynomial_private.h delete mode 100644 cloog-0.17.0/isl/isl_printer.c delete mode 100644 cloog-0.17.0/isl/isl_printer_private.h delete mode 100644 cloog-0.17.0/isl/isl_pw_templ.c delete mode 100644 cloog-0.17.0/isl/isl_qsort.c delete mode 100644 cloog-0.17.0/isl/isl_qsort.h delete mode 100644 cloog-0.17.0/isl/isl_range.c delete mode 100644 cloog-0.17.0/isl/isl_range.h delete mode 100644 cloog-0.17.0/isl/isl_reordering.c delete mode 100644 cloog-0.17.0/isl/isl_reordering.h delete mode 100644 cloog-0.17.0/isl/isl_sample.c delete mode 100644 cloog-0.17.0/isl/isl_sample.h delete mode 100644 cloog-0.17.0/isl/isl_sample_no_piplib.c delete mode 100644 cloog-0.17.0/isl/isl_sample_piplib.c delete mode 100644 cloog-0.17.0/isl/isl_sample_piplib.h delete mode 100644 cloog-0.17.0/isl/isl_scan.c delete mode 100644 cloog-0.17.0/isl/isl_scan.h delete mode 100644 cloog-0.17.0/isl/isl_schedule.c delete mode 100644 cloog-0.17.0/isl/isl_schedule_private.h delete mode 100644 cloog-0.17.0/isl/isl_seq.c delete mode 100644 cloog-0.17.0/isl/isl_space.c delete mode 100644 cloog-0.17.0/isl/isl_space_private.h delete mode 100644 cloog-0.17.0/isl/isl_stream.c delete mode 100644 cloog-0.17.0/isl/isl_stream_private.h delete mode 100644 cloog-0.17.0/isl/isl_tab.c delete mode 100644 cloog-0.17.0/isl/isl_tab.h delete mode 100644 cloog-0.17.0/isl/isl_tab_pip.c delete mode 100644 cloog-0.17.0/isl/isl_test.c delete mode 100644 cloog-0.17.0/isl/isl_transitive_closure.c delete mode 100644 cloog-0.17.0/isl/isl_union_map.c delete mode 100644 cloog-0.17.0/isl/isl_union_map_private.h delete mode 100644 cloog-0.17.0/isl/isl_union_templ.c delete mode 100644 cloog-0.17.0/isl/isl_vec.c delete mode 100644 cloog-0.17.0/isl/isl_version.c delete mode 100644 cloog-0.17.0/isl/isl_vertices.c delete mode 100644 cloog-0.17.0/isl/isl_vertices_private.h delete mode 100755 cloog-0.17.0/isl/ltmain.sh delete mode 100644 cloog-0.17.0/isl/m4/ax_c___attribute__.m4 delete mode 100644 cloog-0.17.0/isl/m4/ax_cc_maxopt.m4 delete mode 100644 cloog-0.17.0/isl/m4/ax_check_compiler_flags.m4 delete mode 100644 cloog-0.17.0/isl/m4/ax_compiler_vendor.m4 delete mode 100644 cloog-0.17.0/isl/m4/ax_create_pkgconfig_info.m4 delete mode 100644 cloog-0.17.0/isl/m4/ax_create_stdint_h.m4 delete mode 100644 cloog-0.17.0/isl/m4/ax_detect_git_head.m4 delete mode 100644 cloog-0.17.0/isl/m4/ax_gcc_archflag.m4 delete mode 100644 cloog-0.17.0/isl/m4/ax_gcc_warn_unused_result.m4 delete mode 100644 cloog-0.17.0/isl/m4/ax_gcc_x86_cpuid.m4 delete mode 100644 cloog-0.17.0/isl/m4/ax_set_warning_flags.m4 delete mode 100644 cloog-0.17.0/isl/m4/ax_submodule.m4 delete mode 100644 cloog-0.17.0/isl/m4/libtool.m4 delete mode 100644 cloog-0.17.0/isl/m4/ltoptions.m4 delete mode 100644 cloog-0.17.0/isl/m4/ltsugar.m4 delete mode 100644 cloog-0.17.0/isl/m4/ltversion.m4 delete mode 100644 cloog-0.17.0/isl/m4/lt~obsolete.m4 delete mode 100755 cloog-0.17.0/isl/missing delete mode 100644 cloog-0.17.0/isl/mp_get_memory_functions.c delete mode 100644 cloog-0.17.0/isl/pip.c delete mode 100755 cloog-0.17.0/isl/pip_test.sh.in delete mode 100644 cloog-0.17.0/isl/polyhedron_detect_equalities.c delete mode 100644 cloog-0.17.0/isl/polyhedron_minimize.c delete mode 100644 cloog-0.17.0/isl/polyhedron_sample.c delete mode 100644 cloog-0.17.0/isl/polytope_scan.c delete mode 100644 cloog-0.17.0/isl/print.c delete mode 100644 cloog-0.17.0/isl/print_templ.c delete mode 100644 cloog-0.17.0/isl/test_inputs/affine.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/affine2.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/affine3.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/application.omega delete mode 100644 cloog-0.17.0/isl/test_inputs/application2.omega delete mode 100644 cloog-0.17.0/isl/test_inputs/basicLinear.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/basicLinear2.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/basicTest.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/basicTestParameterPosNeg.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/boulet.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/brisebarre.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/cg1.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/convex0.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex1.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex10.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex11.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex12.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex13.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex14.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex15.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex2.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex3.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex4.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex5.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex6.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex7.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex8.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/convex9.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/devos.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/equality1.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/equality2.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/equality3.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/equality4.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/equality5.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/esced.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/ex.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/ex2.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/faddeev.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/fimmel.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/gist1.polylib delete mode 100644 cloog-0.17.0/isl/test_inputs/linearExample.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/max.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/neg.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/negative.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/philippe.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/philippe3vars.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/philippe3vars3pars.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/philippeNeg.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/philippePolynomialCoeff.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/philippePolynomialCoeff1P.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/product.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/seghir-vd.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/set.omega delete mode 100644 cloog-0.17.0/isl/test_inputs/small.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/sor1d.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/split.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/square.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/sven.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/test3Deg3Var.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/tobi.pip delete mode 100644 cloog-0.17.0/isl/test_inputs/toplas.pwqp delete mode 100644 cloog-0.17.0/isl/test_inputs/unexpanded.pwqp delete mode 100644 cloog-0.17.0/m4/ax_cc_maxopt.m4 delete mode 100644 cloog-0.17.0/m4/ax_cflags_warn_all.m4 delete mode 100644 cloog-0.17.0/m4/ax_check_compiler_flags.m4 delete mode 100644 cloog-0.17.0/m4/ax_compiler_vendor.m4 delete mode 100644 cloog-0.17.0/m4/ax_create_pkgconfig_info.m4 delete mode 100644 cloog-0.17.0/m4/ax_gcc_archflag.m4 delete mode 100644 cloog-0.17.0/m4/ax_gcc_x86_cpuid.m4 delete mode 100644 cloog-0.17.0/m4/ax_submodule.m4 delete mode 100644 cloog-0.17.0/m4/libtool.m4 delete mode 100644 cloog-0.17.0/m4/ltoptions.m4 delete mode 100644 cloog-0.17.0/m4/ltsugar.m4 delete mode 100644 cloog-0.17.0/m4/ltversion.m4 delete mode 100644 cloog-0.17.0/m4/lt~obsolete.m4 delete mode 100644 cloog-0.17.0/osl/AUTHORS delete mode 100644 cloog-0.17.0/osl/ChangeLog delete mode 100644 cloog-0.17.0/osl/Makefile.am delete mode 100644 cloog-0.17.0/osl/Makefile.in delete mode 100644 cloog-0.17.0/osl/NEWS delete mode 100644 cloog-0.17.0/osl/README delete mode 100644 cloog-0.17.0/osl/THANKS delete mode 100644 cloog-0.17.0/osl/aclocal.m4 delete mode 100755 cloog-0.17.0/osl/autoconf/config.guess delete mode 100755 cloog-0.17.0/osl/autoconf/config.sub delete mode 100755 cloog-0.17.0/osl/autoconf/depcomp delete mode 100755 cloog-0.17.0/osl/autoconf/install-sh delete mode 100644 cloog-0.17.0/osl/autoconf/libtool.m4 delete mode 100755 cloog-0.17.0/osl/autoconf/ltmain.sh delete mode 100644 cloog-0.17.0/osl/autoconf/ltoptions.m4 delete mode 100644 cloog-0.17.0/osl/autoconf/ltsugar.m4 delete mode 100644 cloog-0.17.0/osl/autoconf/ltversion.m4 delete mode 100644 cloog-0.17.0/osl/autoconf/lt~obsolete.m4 delete mode 100755 cloog-0.17.0/osl/autoconf/missing delete mode 100644 cloog-0.17.0/osl/autoconf/texinfo.tex delete mode 100755 cloog-0.17.0/osl/configure delete mode 100644 cloog-0.17.0/osl/configure.in delete mode 100644 cloog-0.17.0/osl/doc/Doxyfile.in delete mode 100644 cloog-0.17.0/osl/doc/Makefile.am delete mode 100644 cloog-0.17.0/osl/doc/Makefile.in delete mode 100644 cloog-0.17.0/osl/doc/S4.cloog delete mode 100644 cloog-0.17.0/osl/doc/ascii-art.txt delete mode 100644 cloog-0.17.0/osl/doc/htmldoc.tar.gz delete mode 100644 cloog-0.17.0/osl/doc/images/basic.eps delete mode 100644 cloog-0.17.0/osl/doc/images/basic.fig delete mode 100644 cloog-0.17.0/osl/doc/images/basic.jpg delete mode 100644 cloog-0.17.0/osl/doc/images/basic.pdf delete mode 100644 cloog-0.17.0/osl/doc/images/basic.txt delete mode 100644 cloog-0.17.0/osl/doc/images/basic1.eps delete mode 100644 cloog-0.17.0/osl/doc/images/basic1.fig delete mode 100644 cloog-0.17.0/osl/doc/images/basic1.jpg delete mode 100644 cloog-0.17.0/osl/doc/images/basic1.pdf delete mode 100644 cloog-0.17.0/osl/doc/images/basic1.txt delete mode 100644 cloog-0.17.0/osl/doc/images/basic2.eps delete mode 100644 cloog-0.17.0/osl/doc/images/basic2.fig delete mode 100644 cloog-0.17.0/osl/doc/images/basic2.jpg delete mode 100644 cloog-0.17.0/osl/doc/images/basic2.pdf delete mode 100644 cloog-0.17.0/osl/doc/images/basic2.txt delete mode 100644 cloog-0.17.0/osl/doc/images/tree.eps delete mode 100644 cloog-0.17.0/osl/doc/images/tree.fig delete mode 100644 cloog-0.17.0/osl/doc/images/tree.jpg delete mode 100644 cloog-0.17.0/osl/doc/images/tree.pdf delete mode 100644 cloog-0.17.0/osl/doc/images/tree.txt delete mode 100644 cloog-0.17.0/osl/doc/openscop.info delete mode 100644 cloog-0.17.0/osl/doc/openscop.pdf delete mode 100644 cloog-0.17.0/osl/doc/openscop.texi delete mode 100644 cloog-0.17.0/osl/include/Makefile.am delete mode 100644 cloog-0.17.0/osl/include/Makefile.in delete mode 100644 cloog-0.17.0/osl/include/osl/body.h delete mode 100644 cloog-0.17.0/osl/include/osl/extensions/arrays.h delete mode 100644 cloog-0.17.0/osl/include/osl/extensions/comment.h delete mode 100644 cloog-0.17.0/osl/include/osl/extensions/irregular.h delete mode 100644 cloog-0.17.0/osl/include/osl/extensions/lines.h delete mode 100644 cloog-0.17.0/osl/include/osl/extensions/scatnames.h delete mode 100644 cloog-0.17.0/osl/include/osl/extensions/textual.h delete mode 100644 cloog-0.17.0/osl/include/osl/generic.h delete mode 100644 cloog-0.17.0/osl/include/osl/int.h delete mode 100644 cloog-0.17.0/osl/include/osl/interface.h delete mode 100644 cloog-0.17.0/osl/include/osl/macros.h delete mode 100644 cloog-0.17.0/osl/include/osl/names.h delete mode 100644 cloog-0.17.0/osl/include/osl/osl.h delete mode 100644 cloog-0.17.0/osl/include/osl/relation.h delete mode 100644 cloog-0.17.0/osl/include/osl/relation_list.h delete mode 100644 cloog-0.17.0/osl/include/osl/scop.h delete mode 100644 cloog-0.17.0/osl/include/osl/scop.h.in delete mode 100644 cloog-0.17.0/osl/include/osl/statement.h delete mode 100644 cloog-0.17.0/osl/include/osl/strings.h delete mode 100644 cloog-0.17.0/osl/include/osl/util.h delete mode 100644 cloog-0.17.0/osl/include/osl/vector.h delete mode 100644 cloog-0.17.0/osl/source/Makefile.am delete mode 100644 cloog-0.17.0/osl/source/Makefile.in delete mode 100644 cloog-0.17.0/osl/source/body.c delete mode 100644 cloog-0.17.0/osl/source/extensions/arrays.c delete mode 100644 cloog-0.17.0/osl/source/extensions/comment.c delete mode 100644 cloog-0.17.0/osl/source/extensions/irregular.c delete mode 100644 cloog-0.17.0/osl/source/extensions/lines.c delete mode 100644 cloog-0.17.0/osl/source/extensions/scatnames.c delete mode 100644 cloog-0.17.0/osl/source/extensions/textual.c delete mode 100644 cloog-0.17.0/osl/source/generic.c delete mode 100644 cloog-0.17.0/osl/source/int.c delete mode 100644 cloog-0.17.0/osl/source/interface.c delete mode 100644 cloog-0.17.0/osl/source/names.c delete mode 100644 cloog-0.17.0/osl/source/relation.c delete mode 100644 cloog-0.17.0/osl/source/relation_list.c delete mode 100644 cloog-0.17.0/osl/source/scop.c delete mode 100644 cloog-0.17.0/osl/source/statement.c delete mode 100644 cloog-0.17.0/osl/source/strings.c delete mode 100644 cloog-0.17.0/osl/source/util.c delete mode 100644 cloog-0.17.0/osl/source/vector.c delete mode 100644 cloog-0.17.0/osl/tests/Makefile.am delete mode 100644 cloog-0.17.0/osl/tests/Makefile.in delete mode 100644 cloog-0.17.0/osl/tests/osl_test.c delete mode 100644 cloog-0.17.0/osl/tests/polynom.scop delete mode 100644 cloog-0.17.0/osl/tests/test_empty_statement.scop delete mode 100644 cloog-0.17.0/osl/tests/test_just_access.scop delete mode 100644 cloog-0.17.0/osl/tests/test_just_body.scop delete mode 100644 cloog-0.17.0/osl/tests/test_just_domain.scop delete mode 100644 cloog-0.17.0/osl/tests/test_just_scattering.scop delete mode 100644 cloog-0.17.0/osl/tests/test_matmult.scop delete mode 100644 cloog-0.17.0/osl/tests/test_no_statement.scop delete mode 100644 cloog-0.17.0/osl/tests/test_scop_list.scop delete mode 100644 cloog-0.17.0/source/block.c delete mode 100644 cloog-0.17.0/source/clast.c delete mode 100644 cloog-0.17.0/source/cloog.c delete mode 100644 cloog-0.17.0/source/input.c delete mode 100644 cloog-0.17.0/source/int.c delete mode 100644 cloog-0.17.0/source/isl/backend.c delete mode 100644 cloog-0.17.0/source/isl/constraints.c delete mode 100644 cloog-0.17.0/source/isl/domain.c delete mode 100644 cloog-0.17.0/source/loop.c delete mode 100644 cloog-0.17.0/source/matrix.c delete mode 100644 cloog-0.17.0/source/matrix/constraintset.c delete mode 100644 cloog-0.17.0/source/mp_get_memory_functions.c delete mode 100644 cloog-0.17.0/source/names.c delete mode 100644 cloog-0.17.0/source/options.c delete mode 100644 cloog-0.17.0/source/pprint.c delete mode 100644 cloog-0.17.0/source/program.c delete mode 100644 cloog-0.17.0/source/state.c delete mode 100644 cloog-0.17.0/source/statement.c delete mode 100644 cloog-0.17.0/source/stride.c delete mode 100644 cloog-0.17.0/source/union_domain.c delete mode 100644 cloog-0.17.0/source/version.c delete mode 100644 cloog-0.17.0/source/version.c.in delete mode 100644 cloog-0.17.0/test/0D-1.c delete mode 100644 cloog-0.17.0/test/0D-1.cloog delete mode 100644 cloog-0.17.0/test/0D-1.good.c delete mode 100644 cloog-0.17.0/test/0D-2.c delete mode 100644 cloog-0.17.0/test/0D-2.cloog delete mode 100644 cloog-0.17.0/test/0D-2.good.c delete mode 100644 cloog-0.17.0/test/0D-3.c delete mode 100644 cloog-0.17.0/test/0D-3.cloog delete mode 100644 cloog-0.17.0/test/0D-3.good.c delete mode 100644 cloog-0.17.0/test/1point-1.c delete mode 100644 cloog-0.17.0/test/1point-1.cloog delete mode 100644 cloog-0.17.0/test/1point-1.good.c delete mode 100644 cloog-0.17.0/test/1point-2.c delete mode 100644 cloog-0.17.0/test/1point-2.cloog delete mode 100644 cloog-0.17.0/test/1point-2.good.c delete mode 100644 cloog-0.17.0/test/4-param.c delete mode 100644 cloog-0.17.0/test/4-param.cloog delete mode 100644 cloog-0.17.0/test/4-param.good.c delete mode 100644 cloog-0.17.0/test/Makefile.am delete mode 100644 cloog-0.17.0/test/Makefile.in delete mode 100644 cloog-0.17.0/test/backtrack.c delete mode 100644 cloog-0.17.0/test/backtrack.cloog delete mode 100644 cloog-0.17.0/test/backtrack.good.c delete mode 100644 cloog-0.17.0/test/basic-bounds-1.c delete mode 100644 cloog-0.17.0/test/basic-bounds-1.cloog delete mode 100644 cloog-0.17.0/test/basic-bounds-1.good.c delete mode 100644 cloog-0.17.0/test/basic-bounds-2.c delete mode 100644 cloog-0.17.0/test/basic-bounds-2.cloog delete mode 100644 cloog-0.17.0/test/basic-bounds-2.good.c delete mode 100644 cloog-0.17.0/test/basic-bounds-3.c delete mode 100644 cloog-0.17.0/test/basic-bounds-3.cloog delete mode 100644 cloog-0.17.0/test/basic-bounds-3.good.c delete mode 100644 cloog-0.17.0/test/basic-bounds-4.c delete mode 100644 cloog-0.17.0/test/basic-bounds-4.cloog delete mode 100644 cloog-0.17.0/test/basic-bounds-4.good.c delete mode 100644 cloog-0.17.0/test/basic-bounds-5.c delete mode 100644 cloog-0.17.0/test/basic-bounds-5.cloog delete mode 100644 cloog-0.17.0/test/basic-bounds-5.good.c delete mode 100644 cloog-0.17.0/test/basic-bounds-6.c delete mode 100644 cloog-0.17.0/test/basic-bounds-6.cloog delete mode 100644 cloog-0.17.0/test/basic-bounds-6.good.c delete mode 100644 cloog-0.17.0/test/block.c delete mode 100644 cloog-0.17.0/test/block.cloog delete mode 100644 cloog-0.17.0/test/block.good.c delete mode 100644 cloog-0.17.0/test/block2.c delete mode 100644 cloog-0.17.0/test/block2.cloog delete mode 100644 cloog-0.17.0/test/block2.good.c delete mode 100644 cloog-0.17.0/test/block3.c delete mode 100644 cloog-0.17.0/test/block3.cloog delete mode 100644 cloog-0.17.0/test/block3.good.c delete mode 100644 cloog-0.17.0/test/byu98-1-2-3.c delete mode 100644 cloog-0.17.0/test/byu98-1-2-3.cloog delete mode 100644 cloog-0.17.0/test/byu98-1-2-3.good.c delete mode 100755 cloog-0.17.0/test/check_c.sh delete mode 100755 cloog-0.17.0/test/check_fortran.sh delete mode 100755 cloog-0.17.0/test/check_openscop.sh delete mode 100755 cloog-0.17.0/test/check_run.sh delete mode 100755 cloog-0.17.0/test/check_special.sh delete mode 100755 cloog-0.17.0/test/check_strided.sh delete mode 100755 cloog-0.17.0/test/checker.sh delete mode 100644 cloog-0.17.0/test/cholesky.c delete mode 100644 cloog-0.17.0/test/cholesky.cloog delete mode 100644 cloog-0.17.0/test/cholesky.good.c delete mode 100644 cloog-0.17.0/test/cholesky2.c delete mode 100644 cloog-0.17.0/test/cholesky2.cloog delete mode 100644 cloog-0.17.0/test/cholesky2.good.c delete mode 100644 cloog-0.17.0/test/christian.c delete mode 100644 cloog-0.17.0/test/christian.cloog delete mode 100644 cloog-0.17.0/test/christian.good.c delete mode 100644 cloog-0.17.0/test/classen.c delete mode 100644 cloog-0.17.0/test/classen.cloog delete mode 100644 cloog-0.17.0/test/classen.good.c delete mode 100644 cloog-0.17.0/test/classen2.c delete mode 100644 cloog-0.17.0/test/classen2.cloog delete mode 100644 cloog-0.17.0/test/classen2.good.c delete mode 100644 cloog-0.17.0/test/constant.c delete mode 100644 cloog-0.17.0/test/constant.cloog delete mode 100644 cloog-0.17.0/test/constant.good.c delete mode 100644 cloog-0.17.0/test/constbound.c delete mode 100644 cloog-0.17.0/test/constbound.cloog delete mode 100644 cloog-0.17.0/test/constbound.good.c delete mode 100644 cloog-0.17.0/test/darte.c delete mode 100644 cloog-0.17.0/test/darte.cloog delete mode 100644 cloog-0.17.0/test/darte.good.c delete mode 100644 cloog-0.17.0/test/dartef.cloog delete mode 100644 cloog-0.17.0/test/dartef.f delete mode 100644 cloog-0.17.0/test/dealII.c delete mode 100644 cloog-0.17.0/test/dealII.cloog delete mode 100644 cloog-0.17.0/test/dealII.good.c delete mode 100644 cloog-0.17.0/test/donotsimp.c delete mode 100644 cloog-0.17.0/test/donotsimp.cloog delete mode 100644 cloog-0.17.0/test/donotsimp.good.c delete mode 100644 cloog-0.17.0/test/dot.c delete mode 100644 cloog-0.17.0/test/dot.cloog delete mode 100644 cloog-0.17.0/test/dot.good.c delete mode 100644 cloog-0.17.0/test/dot2.c delete mode 100644 cloog-0.17.0/test/dot2.cloog delete mode 100644 cloog-0.17.0/test/dot2.good.c delete mode 100644 cloog-0.17.0/test/double.c delete mode 100644 cloog-0.17.0/test/double.cloog delete mode 100644 cloog-0.17.0/test/double.good.c delete mode 100644 cloog-0.17.0/test/durbin_e_s.c delete mode 100644 cloog-0.17.0/test/durbin_e_s.cloog delete mode 100644 cloog-0.17.0/test/durbin_e_s.good.c delete mode 100644 cloog-0.17.0/test/emploi.c delete mode 100644 cloog-0.17.0/test/emploi.cloog delete mode 100644 cloog-0.17.0/test/emploi.good.c delete mode 100644 cloog-0.17.0/test/equality.c delete mode 100644 cloog-0.17.0/test/equality.cloog delete mode 100644 cloog-0.17.0/test/equality.good.c delete mode 100644 cloog-0.17.0/test/equality2.c delete mode 100644 cloog-0.17.0/test/equality2.cloog delete mode 100644 cloog-0.17.0/test/equality2.good.c delete mode 100644 cloog-0.17.0/test/esced.c delete mode 100644 cloog-0.17.0/test/esced.cloog delete mode 100644 cloog-0.17.0/test/esced.good.c delete mode 100644 cloog-0.17.0/test/ex1.c delete mode 100644 cloog-0.17.0/test/ex1.cloog delete mode 100644 cloog-0.17.0/test/ex1.good.c delete mode 100644 cloog-0.17.0/test/forwardsub-1-1-2.c delete mode 100644 cloog-0.17.0/test/forwardsub-1-1-2.cloog delete mode 100644 cloog-0.17.0/test/forwardsub-1-1-2.good.c delete mode 100644 cloog-0.17.0/test/forwardsub-2-1-2-3.c delete mode 100644 cloog-0.17.0/test/forwardsub-2-1-2-3.cloog delete mode 100644 cloog-0.17.0/test/forwardsub-2-1-2-3.good.c delete mode 100644 cloog-0.17.0/test/forwardsub-3-1-2.c delete mode 100644 cloog-0.17.0/test/forwardsub-3-1-2.cloog delete mode 100644 cloog-0.17.0/test/forwardsub-3-1-2.good.c delete mode 100644 cloog-0.17.0/test/gauss.c delete mode 100644 cloog-0.17.0/test/gauss.cloog delete mode 100644 cloog-0.17.0/test/gauss.good.c delete mode 100644 cloog-0.17.0/test/generate_test.c delete mode 100644 cloog-0.17.0/test/gesced.c delete mode 100644 cloog-0.17.0/test/gesced.cloog delete mode 100644 cloog-0.17.0/test/gesced.good.c delete mode 100644 cloog-0.17.0/test/gesced2.c delete mode 100644 cloog-0.17.0/test/gesced2.cloog delete mode 100644 cloog-0.17.0/test/gesced2.good.c delete mode 100644 cloog-0.17.0/test/gesced3.c delete mode 100644 cloog-0.17.0/test/gesced3.cloog delete mode 100644 cloog-0.17.0/test/gesced3.good.c delete mode 100644 cloog-0.17.0/test/guide.c delete mode 100644 cloog-0.17.0/test/guide.cloog delete mode 100644 cloog-0.17.0/test/guide.good.c delete mode 100644 cloog-0.17.0/test/iftest.c delete mode 100644 cloog-0.17.0/test/iftest.cloog delete mode 100644 cloog-0.17.0/test/iftest.good.c delete mode 100644 cloog-0.17.0/test/iftest2.c delete mode 100644 cloog-0.17.0/test/iftest2.cloog delete mode 100644 cloog-0.17.0/test/iftest2.good.c delete mode 100644 cloog-0.17.0/test/iftestf.cloog delete mode 100644 cloog-0.17.0/test/iftestf.f delete mode 100644 cloog-0.17.0/test/infinite.c delete mode 100644 cloog-0.17.0/test/infinite.cloog delete mode 100644 cloog-0.17.0/test/infinite2.c delete mode 100644 cloog-0.17.0/test/infinite2.cloog delete mode 100644 cloog-0.17.0/test/infinite3.c delete mode 100644 cloog-0.17.0/test/infinite3.cloog delete mode 100644 cloog-0.17.0/test/infinite4.c delete mode 100644 cloog-0.17.0/test/infinite4.cloog delete mode 100644 cloog-0.17.0/test/isl/jacobi-shared.c delete mode 100644 cloog-0.17.0/test/isl/jacobi-shared.cloog delete mode 100644 cloog-0.17.0/test/isl/jacobi-shared.good.c delete mode 100644 cloog-0.17.0/test/isl/mod.c delete mode 100644 cloog-0.17.0/test/isl/mod.cloog delete mode 100644 cloog-0.17.0/test/isl/mod2.c delete mode 100644 cloog-0.17.0/test/isl/mod2.cloog delete mode 100644 cloog-0.17.0/test/isl/mod3.c delete mode 100644 cloog-0.17.0/test/isl/mod3.cloog delete mode 100644 cloog-0.17.0/test/isl/mod4.c delete mode 100644 cloog-0.17.0/test/isl/mod4.cloog delete mode 100644 cloog-0.17.0/test/isl/mxm-shared.c delete mode 100644 cloog-0.17.0/test/isl/mxm-shared.cloog delete mode 100644 cloog-0.17.0/test/isl/unroll.c delete mode 100644 cloog-0.17.0/test/isl/unroll.cloog delete mode 100644 cloog-0.17.0/test/isl/unroll.good.c delete mode 100644 cloog-0.17.0/test/isl/unroll2.c delete mode 100644 cloog-0.17.0/test/isl/unroll2.cloog delete mode 100644 cloog-0.17.0/test/isl/unroll2.good.c delete mode 100644 cloog-0.17.0/test/largeur.c delete mode 100644 cloog-0.17.0/test/largeur.cloog delete mode 100644 cloog-0.17.0/test/largeur.good.c delete mode 100644 cloog-0.17.0/test/levenshtein-1-2-3.c delete mode 100644 cloog-0.17.0/test/levenshtein-1-2-3.cloog delete mode 100644 cloog-0.17.0/test/levenshtein-1-2-3.good.c delete mode 100644 cloog-0.17.0/test/levenshtein-1-2-3f.cloog delete mode 100644 cloog-0.17.0/test/levenshtein-1-2-3f.f delete mode 100644 cloog-0.17.0/test/lex.c delete mode 100644 cloog-0.17.0/test/lex.cloog delete mode 100644 cloog-0.17.0/test/lex.good.c delete mode 100644 cloog-0.17.0/test/lineality-1-2.c delete mode 100644 cloog-0.17.0/test/lineality-1-2.cloog delete mode 100644 cloog-0.17.0/test/lineality-1-2.good.c delete mode 100644 cloog-0.17.0/test/lineality-2-1-2.c delete mode 100644 cloog-0.17.0/test/lineality-2-1-2.cloog delete mode 100644 cloog-0.17.0/test/lineality-2-1-2.good.c delete mode 100644 cloog-0.17.0/test/logo.c delete mode 100644 cloog-0.17.0/test/logo.cloog delete mode 100644 cloog-0.17.0/test/logo.good.c delete mode 100644 cloog-0.17.0/test/logopar.c delete mode 100644 cloog-0.17.0/test/logopar.cloog delete mode 100644 cloog-0.17.0/test/logopar.good.c delete mode 100644 cloog-0.17.0/test/lu.c delete mode 100644 cloog-0.17.0/test/lu.cloog delete mode 100644 cloog-0.17.0/test/lu.good.c delete mode 100644 cloog-0.17.0/test/lu2.c delete mode 100644 cloog-0.17.0/test/lu2.cloog delete mode 100644 cloog-0.17.0/test/lu2.good.c delete mode 100644 cloog-0.17.0/test/lub.c delete mode 100644 cloog-0.17.0/test/lub.cloog delete mode 100644 cloog-0.17.0/test/lub.good.c delete mode 100644 cloog-0.17.0/test/lux.c delete mode 100644 cloog-0.17.0/test/lux.cloog delete mode 100644 cloog-0.17.0/test/lux.good.c delete mode 100644 cloog-0.17.0/test/merge.c delete mode 100644 cloog-0.17.0/test/merge.cloog delete mode 100644 cloog-0.17.0/test/merge.good.c delete mode 100644 cloog-0.17.0/test/min-1-1.c delete mode 100644 cloog-0.17.0/test/min-1-1.cloog delete mode 100644 cloog-0.17.0/test/min-1-1.good.c delete mode 100644 cloog-0.17.0/test/min-2-1.c delete mode 100644 cloog-0.17.0/test/min-2-1.cloog delete mode 100644 cloog-0.17.0/test/min-2-1.good.c delete mode 100644 cloog-0.17.0/test/min-3-1.c delete mode 100644 cloog-0.17.0/test/min-3-1.cloog delete mode 100644 cloog-0.17.0/test/min-3-1.good.c delete mode 100644 cloog-0.17.0/test/min-4-1.c delete mode 100644 cloog-0.17.0/test/min-4-1.cloog delete mode 100644 cloog-0.17.0/test/min-4-1.good.c delete mode 100644 cloog-0.17.0/test/mod4.c delete mode 100644 cloog-0.17.0/test/mod4.cloog delete mode 100644 cloog-0.17.0/test/mode.c delete mode 100644 cloog-0.17.0/test/mode.cloog delete mode 100644 cloog-0.17.0/test/mode.good.c delete mode 100644 cloog-0.17.0/test/multi-mm-1.c delete mode 100644 cloog-0.17.0/test/multi-mm-1.cloog delete mode 100644 cloog-0.17.0/test/multi-mm-1.good.c delete mode 100644 cloog-0.17.0/test/multi-stride.c delete mode 100644 cloog-0.17.0/test/multi-stride.cloog delete mode 100644 cloog-0.17.0/test/multi-stride2.c delete mode 100644 cloog-0.17.0/test/multi-stride2.cloog delete mode 100644 cloog-0.17.0/test/no_lindep.c delete mode 100644 cloog-0.17.0/test/no_lindep.cloog delete mode 100644 cloog-0.17.0/test/no_lindep.good.c delete mode 100644 cloog-0.17.0/test/non_optimal/nul_complex1.c delete mode 100644 cloog-0.17.0/test/non_optimal/nul_complex1.cloog delete mode 100644 cloog-0.17.0/test/non_optimal/nul_complex1.good.c delete mode 100644 cloog-0.17.0/test/non_optimal/usvd_e_t.c delete mode 100644 cloog-0.17.0/test/non_optimal/usvd_e_t.cloog delete mode 100644 cloog-0.17.0/test/non_optimal/usvd_e_t.good.c delete mode 100644 cloog-0.17.0/test/non_optimal/youcef.c delete mode 100644 cloog-0.17.0/test/non_optimal/youcef.cloog delete mode 100644 cloog-0.17.0/test/non_optimal/youcef.good.c delete mode 100644 cloog-0.17.0/test/nul_basic1.c delete mode 100644 cloog-0.17.0/test/nul_basic1.cloog delete mode 100644 cloog-0.17.0/test/nul_basic2.c delete mode 100644 cloog-0.17.0/test/nul_basic2.cloog delete mode 100644 cloog-0.17.0/test/nul_lcpc.c delete mode 100644 cloog-0.17.0/test/nul_lcpc.cloog delete mode 100644 cloog-0.17.0/test/openscop/empty.c delete mode 100644 cloog-0.17.0/test/openscop/empty.scop delete mode 100644 cloog-0.17.0/test/openscop/matmult.c delete mode 100644 cloog-0.17.0/test/openscop/matmult.scop delete mode 100644 cloog-0.17.0/test/openscop/union.c delete mode 100644 cloog-0.17.0/test/openscop/union.scop delete mode 100644 cloog-0.17.0/test/orc.c delete mode 100644 cloog-0.17.0/test/orc.cloog delete mode 100644 cloog-0.17.0/test/orc.good.c delete mode 100644 cloog-0.17.0/test/otl.c delete mode 100644 cloog-0.17.0/test/otl.cloog delete mode 100644 cloog-0.17.0/test/otl.good.c delete mode 100644 cloog-0.17.0/test/param-split.c delete mode 100644 cloog-0.17.0/test/param-split.cloog delete mode 100644 cloog-0.17.0/test/param-split.good.c delete mode 100644 cloog-0.17.0/test/pouchet.c delete mode 100644 cloog-0.17.0/test/pouchet.cloog delete mode 100644 cloog-0.17.0/test/pouchet.good.c delete mode 100644 cloog-0.17.0/test/rectangle.c delete mode 100644 cloog-0.17.0/test/rectangle.cloog delete mode 100644 cloog-0.17.0/test/rectangle.good.c delete mode 100644 cloog-0.17.0/test/reservoir/QR.c delete mode 100755 cloog-0.17.0/test/reservoir/QR.cloog delete mode 100644 cloog-0.17.0/test/reservoir/QR.good.c delete mode 100644 cloog-0.17.0/test/reservoir/bastoul3.c delete mode 100644 cloog-0.17.0/test/reservoir/bastoul3.cloog delete mode 100644 cloog-0.17.0/test/reservoir/cholesky2.c delete mode 100755 cloog-0.17.0/test/reservoir/cholesky2.cloog delete mode 100644 cloog-0.17.0/test/reservoir/cholesky2.good.c delete mode 100644 cloog-0.17.0/test/reservoir/fusion1.c delete mode 100755 cloog-0.17.0/test/reservoir/fusion1.cloog delete mode 100644 cloog-0.17.0/test/reservoir/fusion1.good.c delete mode 100644 cloog-0.17.0/test/reservoir/fusion2.c delete mode 100755 cloog-0.17.0/test/reservoir/fusion2.cloog delete mode 100644 cloog-0.17.0/test/reservoir/fusion2.good.c delete mode 100644 cloog-0.17.0/test/reservoir/jacobi2.c delete mode 100755 cloog-0.17.0/test/reservoir/jacobi2.cloog delete mode 100644 cloog-0.17.0/test/reservoir/jacobi2.good.c delete mode 100644 cloog-0.17.0/test/reservoir/jacobi3.c delete mode 100755 cloog-0.17.0/test/reservoir/jacobi3.cloog delete mode 100644 cloog-0.17.0/test/reservoir/jacobi3.good.c delete mode 100644 cloog-0.17.0/test/reservoir/lim-lam1.c delete mode 100644 cloog-0.17.0/test/reservoir/lim-lam1.cloog delete mode 100644 cloog-0.17.0/test/reservoir/lim-lam1.good.c delete mode 100644 cloog-0.17.0/test/reservoir/lim-lam2.c delete mode 100755 cloog-0.17.0/test/reservoir/lim-lam2.cloog delete mode 100644 cloog-0.17.0/test/reservoir/lim-lam2.good.c delete mode 100644 cloog-0.17.0/test/reservoir/lim-lam3.c delete mode 100755 cloog-0.17.0/test/reservoir/lim-lam3.cloog delete mode 100644 cloog-0.17.0/test/reservoir/lim-lam3.good.c delete mode 100644 cloog-0.17.0/test/reservoir/lim-lam4.c delete mode 100755 cloog-0.17.0/test/reservoir/lim-lam4.cloog delete mode 100644 cloog-0.17.0/test/reservoir/lim-lam4.good.c delete mode 100644 cloog-0.17.0/test/reservoir/lim-lam5.c delete mode 100755 cloog-0.17.0/test/reservoir/lim-lam5.cloog delete mode 100644 cloog-0.17.0/test/reservoir/lim-lam5.good.c delete mode 100644 cloog-0.17.0/test/reservoir/lim-lam6.c delete mode 100755 cloog-0.17.0/test/reservoir/lim-lam6.cloog delete mode 100644 cloog-0.17.0/test/reservoir/lim-lam6.good.c delete mode 100644 cloog-0.17.0/test/reservoir/liu-zhuge1.c delete mode 100755 cloog-0.17.0/test/reservoir/liu-zhuge1.cloog delete mode 100644 cloog-0.17.0/test/reservoir/liu-zhuge1.good.c delete mode 100644 cloog-0.17.0/test/reservoir/loechner3.c delete mode 100755 cloog-0.17.0/test/reservoir/loechner3.cloog delete mode 100644 cloog-0.17.0/test/reservoir/loechner3.good.c delete mode 100644 cloog-0.17.0/test/reservoir/loechner4.c delete mode 100755 cloog-0.17.0/test/reservoir/loechner4.cloog delete mode 100644 cloog-0.17.0/test/reservoir/loechner4.good.c delete mode 100644 cloog-0.17.0/test/reservoir/loechner5.c delete mode 100755 cloog-0.17.0/test/reservoir/loechner5.cloog delete mode 100644 cloog-0.17.0/test/reservoir/loechner5.good.c delete mode 100644 cloog-0.17.0/test/reservoir/mg-interp.c delete mode 100755 cloog-0.17.0/test/reservoir/mg-interp.cloog delete mode 100644 cloog-0.17.0/test/reservoir/mg-interp.good.c delete mode 100644 cloog-0.17.0/test/reservoir/mg-interp2.c delete mode 100755 cloog-0.17.0/test/reservoir/mg-interp2.cloog delete mode 100644 cloog-0.17.0/test/reservoir/mg-interp2.good.c delete mode 100644 cloog-0.17.0/test/reservoir/mg-psinv.c delete mode 100755 cloog-0.17.0/test/reservoir/mg-psinv.cloog delete mode 100644 cloog-0.17.0/test/reservoir/mg-psinv.good.c delete mode 100644 cloog-0.17.0/test/reservoir/mg-resid.c delete mode 100755 cloog-0.17.0/test/reservoir/mg-resid.cloog delete mode 100644 cloog-0.17.0/test/reservoir/mg-resid.good.c delete mode 100644 cloog-0.17.0/test/reservoir/mg-rprj3.c delete mode 100755 cloog-0.17.0/test/reservoir/mg-rprj3.cloog delete mode 100644 cloog-0.17.0/test/reservoir/mg-rprj3.good.c delete mode 100644 cloog-0.17.0/test/reservoir/pingali1.c delete mode 100755 cloog-0.17.0/test/reservoir/pingali1.cloog delete mode 100644 cloog-0.17.0/test/reservoir/pingali1.good.c delete mode 100644 cloog-0.17.0/test/reservoir/pingali2.c delete mode 100755 cloog-0.17.0/test/reservoir/pingali2.cloog delete mode 100644 cloog-0.17.0/test/reservoir/pingali2.good.c delete mode 100644 cloog-0.17.0/test/reservoir/pingali3.c delete mode 100755 cloog-0.17.0/test/reservoir/pingali3.cloog delete mode 100644 cloog-0.17.0/test/reservoir/pingali3.good.c delete mode 100644 cloog-0.17.0/test/reservoir/pingali4.c delete mode 100755 cloog-0.17.0/test/reservoir/pingali4.cloog delete mode 100644 cloog-0.17.0/test/reservoir/pingali4.good.c delete mode 100644 cloog-0.17.0/test/reservoir/pingali5.c delete mode 100755 cloog-0.17.0/test/reservoir/pingali5.cloog delete mode 100644 cloog-0.17.0/test/reservoir/pingali5.good.c delete mode 100644 cloog-0.17.0/test/reservoir/pingali6.c delete mode 100755 cloog-0.17.0/test/reservoir/pingali6.cloog delete mode 100644 cloog-0.17.0/test/reservoir/pingali6.good.c delete mode 100644 cloog-0.17.0/test/reservoir/stride.c delete mode 100644 cloog-0.17.0/test/reservoir/stride.cloog delete mode 100644 cloog-0.17.0/test/reservoir/stride2.c delete mode 100644 cloog-0.17.0/test/reservoir/stride2.cloog delete mode 100644 cloog-0.17.0/test/reservoir/tang-xue1.c delete mode 100644 cloog-0.17.0/test/reservoir/tang-xue1.cloog delete mode 100644 cloog-0.17.0/test/reservoir/tang-xue1.good.c delete mode 100644 cloog-0.17.0/test/reservoir/two.c delete mode 100644 cloog-0.17.0/test/reservoir/two.cloog delete mode 100644 cloog-0.17.0/test/reservoir/two.good.c delete mode 100644 cloog-0.17.0/test/singleton.c delete mode 100644 cloog-0.17.0/test/singleton.cloog delete mode 100644 cloog-0.17.0/test/singleton.good.c delete mode 100644 cloog-0.17.0/test/sor1d.c delete mode 100644 cloog-0.17.0/test/sor1d.cloog delete mode 100644 cloog-0.17.0/test/sor1d.good.c delete mode 100644 cloog-0.17.0/test/square+triangle-1-1-2-3.c delete mode 100644 cloog-0.17.0/test/square+triangle-1-1-2-3.cloog delete mode 100644 cloog-0.17.0/test/square+triangle-1-1-2-3.good.c delete mode 100644 cloog-0.17.0/test/stride.c delete mode 100644 cloog-0.17.0/test/stride.cloog delete mode 100644 cloog-0.17.0/test/stride.good.c delete mode 100644 cloog-0.17.0/test/stride2.c delete mode 100644 cloog-0.17.0/test/stride2.cloog delete mode 100644 cloog-0.17.0/test/stride2.good.c delete mode 100644 cloog-0.17.0/test/stride3.c delete mode 100644 cloog-0.17.0/test/stride3.cloog delete mode 100644 cloog-0.17.0/test/stride4.c delete mode 100644 cloog-0.17.0/test/stride4.cloog delete mode 100644 cloog-0.17.0/test/swim.c delete mode 100644 cloog-0.17.0/test/swim.cloog delete mode 100644 cloog-0.17.0/test/swim.good.c delete mode 100644 cloog-0.17.0/test/test.c delete mode 100644 cloog-0.17.0/test/test.cloog delete mode 100644 cloog-0.17.0/test/test.good.c delete mode 100644 cloog-0.17.0/test/thomasset.c delete mode 100644 cloog-0.17.0/test/thomasset.cloog delete mode 100644 cloog-0.17.0/test/thomasset.good.c delete mode 100644 cloog-0.17.0/test/tiling.c delete mode 100644 cloog-0.17.0/test/tiling.cloog delete mode 100644 cloog-0.17.0/test/tiling.good.c delete mode 100644 cloog-0.17.0/test/uday_scalars.c delete mode 100644 cloog-0.17.0/test/uday_scalars.cloog delete mode 100644 cloog-0.17.0/test/uday_scalars.good.c delete mode 100644 cloog-0.17.0/test/union.c delete mode 100644 cloog-0.17.0/test/union.cloog delete mode 100644 cloog-0.17.0/test/union.good.c delete mode 100644 cloog-0.17.0/test/vasilache.c delete mode 100644 cloog-0.17.0/test/vasilache.cloog delete mode 100644 cloog-0.17.0/test/vasilache.good.c delete mode 100644 cloog-0.17.0/test/vivien.c delete mode 100644 cloog-0.17.0/test/vivien.cloog delete mode 100644 cloog-0.17.0/test/vivien.good.c delete mode 100644 cloog-0.17.0/test/vivien2.c delete mode 100644 cloog-0.17.0/test/vivien2.cloog delete mode 100644 cloog-0.17.0/test/vivien2.good.c delete mode 100644 cloog-0.17.0/test/walters.c delete mode 100644 cloog-0.17.0/test/walters.cloog delete mode 100644 cloog-0.17.0/test/walters.good.c delete mode 100644 cloog-0.17.0/test/walters2.c delete mode 100644 cloog-0.17.0/test/walters2.cloog delete mode 100644 cloog-0.17.0/test/walters2.good.c delete mode 100644 cloog-0.17.0/test/walters3.c delete mode 100644 cloog-0.17.0/test/walters3.cloog delete mode 100644 cloog-0.17.0/test/walters3.good.c delete mode 100644 cloog-0.17.0/test/wavefront.c delete mode 100644 cloog-0.17.0/test/wavefront.cloog delete mode 100644 cloog-0.17.0/test/wavefront.good.c delete mode 100644 cloog-0.17.0/test/yosr.c delete mode 100644 cloog-0.17.0/test/yosr.cloog delete mode 100644 cloog-0.17.0/test/yosr.good.c delete mode 100644 cloog-0.17.0/test/yosr2.c delete mode 100644 cloog-0.17.0/test/yosr2.cloog delete mode 100644 cloog-0.17.0/test/yosr2.good.c delete mode 100644 cloog-0.17.0/test/yosrf.cloog delete mode 100644 cloog-0.17.0/test/yosrf.f diff --git a/cloog-0.16.3/CLOOG_HEAD b/cloog-0.16.3/CLOOG_HEAD deleted file mode 100644 index 16be992..0000000 --- a/cloog-0.16.3/CLOOG_HEAD +++ /dev/null @@ -1 +0,0 @@ -0.16.2-37-g225c2ed diff --git a/cloog-0.16.3/ChangeLog b/cloog-0.16.3/ChangeLog deleted file mode 100644 index 5db2aeb..0000000 --- a/cloog-0.16.3/ChangeLog +++ /dev/null @@ -1,11 +0,0 @@ -version: 0.16.3 -date: Wed Jul 13 18:18:19 CEST 2011 -changes: - - update isl backend to recent changes in isl - - add support for unrolling ---- -version: 0.16.2 -date: Sun Mar 20 15:51:13 CET 2011 -changes: - - update isl backend to recent changes in isl - - improved output in case of stride detection diff --git a/cloog-0.16.3/Makefile.am b/cloog-0.16.3/Makefile.am deleted file mode 100644 index 259c4ba..0000000 --- a/cloog-0.16.3/Makefile.am +++ /dev/null @@ -1,177 +0,0 @@ -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** makefile.in ** -# **-------------------------------------------------------------------** -# ** First version: october 25th 2001 ** -# **-------------------------------------------------------------------**/ -# -# makefile.in (or makefile if generated) of CLooG, the Chunky LOOp Generator. -# makefile.in is not a makefile, you must run the 'configure' shellscript to -# generate the makefile thanks to this file. - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2001 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * * -# *****************************************************************************/ -if BUNDLED_ISL - MAYBE_ISL = isl - ISL_LA = $(top_builddir)/isl/libisl.la -endif - -SUBDIRS = $(MAYBE_ISL) . doc test -DIST_SUBDIRS = $(MAYBE_ISL) . doc test - -ACLOCAL_AMFLAGS = -I m4 - -FORCE: -isl/libisl.la: FORCE - cd isl; $(MAKE) $(AM_MAKEFLAGS) libisl.la - -if NO_ISL -CLOOG = -LIBCLOOG = -else -CLOOG = cloog -LIBCLOOG = libcloog-isl.la -endif -bin_PROGRAMS = $(CLOOG) -lib_LTLIBRARIES = $(LIBCLOOG) - -if NEED_GET_MEMORY_FUNCTIONS -GET_MEMORY_FUNCTIONS=source/mp_get_memory_functions.c -endif - -SOURCES_CORE = \ - $(GET_MEMORY_FUNCTIONS) \ - source/block.c \ - source/clast.c \ - source/matrix.c \ - source/state.c \ - source/input.c \ - source/int.c \ - source/loop.c \ - source/names.c \ - source/options.c \ - source/pprint.c \ - source/program.c \ - source/statement.c \ - source/stride.c \ - source/union_domain.c \ - source/version.c - -DEFAULT_INCLUDES = -I. -INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -AM_CFLAGS = $(CFLAGS_WARN) -libcloog_isl_la_CPPFLAGS = @ISL_CPPFLAGS@ -libcloog_isl_la_LDFLAGS = -version-info @versioninfo@ \ - -rpath $(libdir) @ISL_LDFLAGS@ -libcloog_isl_la_LIBADD = @ISL_LIBS@ $(ISL_LA) -libcloog_isl_la_SOURCES = \ - $(SOURCES_CORE) \ - source/isl/domain.c \ - source/isl/constraints.c \ - source/isl/backend.c -LDADD = libcloog-isl.la -cloog_DEPENDENCIES = libcloog-isl.la -cloog_SOURCES = source/cloog.c - -pkginclude_HEADERS = \ - include/cloog/block.h \ - include/cloog/clast.h \ - include/cloog/cloog.h \ - include/cloog/input.h \ - include/cloog/int.h \ - include/cloog/matrix.h \ - include/cloog/state.h \ - include/cloog/domain.h \ - include/cloog/loop.h \ - include/cloog/constraints.h \ - include/cloog/names.h \ - include/cloog/options.h \ - include/cloog/pprint.h \ - include/cloog/program.h \ - include/cloog/statement.h \ - include/cloog/stride.h \ - include/cloog/union_domain.h \ - include/cloog/version.h - -pkgmatrixincludedir = $(pkgincludedir)/matrix -pkgmatrixinclude_HEADERS = \ - include/cloog/matrix/constraintset.h - -pkgislincludedir = $(pkgincludedir)/isl -pkgislinclude_HEADERS = \ - include/cloog/isl/backend.h \ - include/cloog/isl/cloog.h \ - include/cloog/isl/domain.h \ - include/cloog/isl/constraintset.h - -version.h: @GIT_INDEX@ - echo '#define CLOOG_HEAD "'`$(top_builddir)/genversion.sh`'"' > $@ - -EXTRA_DIST = \ - autoconf/Doxyfile.in \ - source/matrix/constraintset.c \ - doc/cloog.texi \ - doc/images \ - examples - -install-data-local: - @test -z "$(pkgconfig_libdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfig_libdir)" - $(INSTALL_DATA) $(pkgconfig_libfile) "$(DESTDIR)$(pkgconfig_libdir)/$(pkgconfig_libfile)" - -uninstall-local: - rm -f "$(DESTDIR)$(pkgconfig_libdir)/$(pkgconfig_libfile)" - -dist-hook: - rm -f $(distdir)/test/Makefile - $(top_builddir)/genversion.sh > $(distdir)/CLOOG_HEAD - (cd doc; make cloog.pdf) && cp doc/cloog.pdf $(distdir)/doc/ - -#/***************************************************************************** -# * Rules * -# *****************************************************************************/ - -check: - $(MAKE) test -C test - -valcheck: - $(MAKE) valgrind -C test - -total: - @echo " /*-----------------------------------------------*" - @echo " * CLooG *" - @echo " *-----------------------------------------------*/" - $(MAKE) uninstall - $(MAKE) clean - $(MAKE) - $(MAKE) install - -doc: - @echo " /*-----------------------------------------------*" - @echo " * Generating CLooG's documentation *" - @echo " *-----------------------------------------------*/" - doxygen ./autoconf/Doxyfile diff --git a/cloog-0.16.3/Makefile.in b/cloog-0.16.3/Makefile.in deleted file mode 100644 index 8f91ca0..0000000 --- a/cloog-0.16.3/Makefile.in +++ /dev/null @@ -1,1372 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** makefile.in ** -# **-------------------------------------------------------------------** -# ** First version: october 25th 2001 ** -# **-------------------------------------------------------------------**/ -# -# makefile.in (or makefile if generated) of CLooG, the Chunky LOOp Generator. -# makefile.in is not a makefile, you must run the 'configure' shellscript to -# generate the makefile thanks to this file. - - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -bin_PROGRAMS = $(am__EXEEXT_1) -subdir = . -DIST_COMMON = README $(am__configure_deps) $(pkginclude_HEADERS) \ - $(pkgislinclude_HEADERS) $(pkgmatrixinclude_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/genversion.sh.in $(top_srcdir)/autoconf/Doxyfile.in \ - $(top_srcdir)/configure \ - $(top_srcdir)/include/cloog/version.h.in \ - $(top_srcdir)/source/version.c.in ChangeLog \ - autoconf/config.guess autoconf/config.sub autoconf/depcomp \ - autoconf/install-sh autoconf/ltmain.sh autoconf/missing -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/ax_submodule.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_CLEAN_FILES = autoconf/Doxyfile source/version.c \ - include/cloog/version.h genversion.sh -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ - "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgislincludedir)" \ - "$(DESTDIR)$(pkgmatrixincludedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libcloog_isl_la_DEPENDENCIES = $(ISL_LA) -am__libcloog_isl_la_SOURCES_DIST = source/mp_get_memory_functions.c \ - source/block.c source/clast.c source/matrix.c source/state.c \ - source/input.c source/int.c source/loop.c source/names.c \ - source/options.c source/pprint.c source/program.c \ - source/statement.c source/stride.c source/union_domain.c \ - source/version.c source/isl/domain.c source/isl/constraints.c \ - source/isl/backend.c -@NEED_GET_MEMORY_FUNCTIONS_TRUE@am__objects_1 = libcloog_isl_la-mp_get_memory_functions.lo -am__objects_2 = $(am__objects_1) libcloog_isl_la-block.lo \ - libcloog_isl_la-clast.lo libcloog_isl_la-matrix.lo \ - libcloog_isl_la-state.lo libcloog_isl_la-input.lo \ - libcloog_isl_la-int.lo libcloog_isl_la-loop.lo \ - libcloog_isl_la-names.lo libcloog_isl_la-options.lo \ - libcloog_isl_la-pprint.lo libcloog_isl_la-program.lo \ - libcloog_isl_la-statement.lo libcloog_isl_la-stride.lo \ - libcloog_isl_la-union_domain.lo libcloog_isl_la-version.lo -am_libcloog_isl_la_OBJECTS = $(am__objects_2) \ - libcloog_isl_la-domain.lo libcloog_isl_la-constraints.lo \ - libcloog_isl_la-backend.lo -libcloog_isl_la_OBJECTS = $(am_libcloog_isl_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -libcloog_isl_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(AM_CFLAGS) $(CFLAGS) $(libcloog_isl_la_LDFLAGS) $(LDFLAGS) \ - -o $@ -@NO_ISL_FALSE@am_libcloog_isl_la_rpath = -rpath $(libdir) -@NO_ISL_FALSE@am__EXEEXT_1 = cloog$(EXEEXT) -PROGRAMS = $(bin_PROGRAMS) -am_cloog_OBJECTS = cloog.$(OBJEXT) -cloog_OBJECTS = $(am_cloog_OBJECTS) -cloog_LDADD = $(LDADD) -depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(libcloog_isl_la_SOURCES) $(cloog_SOURCES) -DIST_SOURCES = $(am__libcloog_isl_la_SOURCES_DIST) $(cloog_SOURCES) -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -HEADERS = $(pkginclude_HEADERS) $(pkgislinclude_HEADERS) \ - $(pkgmatrixinclude_HEADERS) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir dist dist-all distcheck -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BITS = @BITS@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CD = @CD@ -CFLAGS = @CFLAGS@ -CFLAGS_WARN = @CFLAGS_WARN@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIT_INDEX = @GIT_INDEX@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -ISL_CPPFLAGS = @ISL_CPPFLAGS@ -ISL_LDFLAGS = @ISL_LDFLAGS@ -ISL_LIBS = @ISL_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TEXI2DVI = @TEXI2DVI@ -VERSION = @VERSION@ -VERSION_MAJOR = @VERSION_MAJOR@ -VERSION_MINOR = @VERSION_MINOR@ -VERSION_REVISION = @VERSION_REVISION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfig_libdir = @pkgconfig_libdir@ -pkgconfig_libfile = @pkgconfig_libfile@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -subdirs = @subdirs@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -versioninfo = @versioninfo@ - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2001 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * * -# *****************************************************************************/ -@BUNDLED_ISL_TRUE@MAYBE_ISL = isl -@BUNDLED_ISL_TRUE@ISL_LA = $(top_builddir)/isl/libisl.la -SUBDIRS = $(MAYBE_ISL) . doc test -DIST_SUBDIRS = $(MAYBE_ISL) . doc test -ACLOCAL_AMFLAGS = -I m4 -@NO_ISL_FALSE@CLOOG = cloog -@NO_ISL_TRUE@CLOOG = -@NO_ISL_FALSE@LIBCLOOG = libcloog-isl.la -@NO_ISL_TRUE@LIBCLOOG = -lib_LTLIBRARIES = $(LIBCLOOG) -@NEED_GET_MEMORY_FUNCTIONS_TRUE@GET_MEMORY_FUNCTIONS = source/mp_get_memory_functions.c -SOURCES_CORE = \ - $(GET_MEMORY_FUNCTIONS) \ - source/block.c \ - source/clast.c \ - source/matrix.c \ - source/state.c \ - source/input.c \ - source/int.c \ - source/loop.c \ - source/names.c \ - source/options.c \ - source/pprint.c \ - source/program.c \ - source/statement.c \ - source/stride.c \ - source/union_domain.c \ - source/version.c - -DEFAULT_INCLUDES = -I. -INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -AM_CFLAGS = $(CFLAGS_WARN) -libcloog_isl_la_CPPFLAGS = @ISL_CPPFLAGS@ -libcloog_isl_la_LDFLAGS = -version-info @versioninfo@ \ - -rpath $(libdir) @ISL_LDFLAGS@ - -libcloog_isl_la_LIBADD = @ISL_LIBS@ $(ISL_LA) -libcloog_isl_la_SOURCES = \ - $(SOURCES_CORE) \ - source/isl/domain.c \ - source/isl/constraints.c \ - source/isl/backend.c - -LDADD = libcloog-isl.la -cloog_DEPENDENCIES = libcloog-isl.la -cloog_SOURCES = source/cloog.c -pkginclude_HEADERS = \ - include/cloog/block.h \ - include/cloog/clast.h \ - include/cloog/cloog.h \ - include/cloog/input.h \ - include/cloog/int.h \ - include/cloog/matrix.h \ - include/cloog/state.h \ - include/cloog/domain.h \ - include/cloog/loop.h \ - include/cloog/constraints.h \ - include/cloog/names.h \ - include/cloog/options.h \ - include/cloog/pprint.h \ - include/cloog/program.h \ - include/cloog/statement.h \ - include/cloog/stride.h \ - include/cloog/union_domain.h \ - include/cloog/version.h - -pkgmatrixincludedir = $(pkgincludedir)/matrix -pkgmatrixinclude_HEADERS = \ - include/cloog/matrix/constraintset.h - -pkgislincludedir = $(pkgincludedir)/isl -pkgislinclude_HEADERS = \ - include/cloog/isl/backend.h \ - include/cloog/isl/cloog.h \ - include/cloog/isl/domain.h \ - include/cloog/isl/constraintset.h - -EXTRA_DIST = \ - autoconf/Doxyfile.in \ - source/matrix/constraintset.c \ - doc/cloog.texi \ - doc/images \ - examples - -all: all-recursive - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -am--refresh: - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): -autoconf/Doxyfile: $(top_builddir)/config.status $(top_srcdir)/autoconf/Doxyfile.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -source/version.c: $(top_builddir)/config.status $(top_srcdir)/source/version.c.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -include/cloog/version.h: $(top_builddir)/config.status $(top_srcdir)/include/cloog/version.h.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -genversion.sh: $(top_builddir)/config.status $(srcdir)/genversion.sh.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libcloog-isl.la: $(libcloog_isl_la_OBJECTS) $(libcloog_isl_la_DEPENDENCIES) - $(AM_V_CCLD)$(libcloog_isl_la_LINK) $(am_libcloog_isl_la_rpath) $(libcloog_isl_la_OBJECTS) $(libcloog_isl_la_LIBADD) $(LIBS) -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p || test -f $$p1; \ - then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list -cloog$(EXEEXT): $(cloog_OBJECTS) $(cloog_DEPENDENCIES) - @rm -f cloog$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(cloog_OBJECTS) $(cloog_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cloog.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-backend.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-block.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-clast.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-constraints.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-domain.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-input.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-int.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-loop.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-matrix.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-mp_get_memory_functions.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-names.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-options.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-pprint.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-program.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-state.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-statement.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-stride.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-union_domain.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-version.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -libcloog_isl_la-mp_get_memory_functions.lo: source/mp_get_memory_functions.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-mp_get_memory_functions.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-mp_get_memory_functions.Tpo -c -o libcloog_isl_la-mp_get_memory_functions.lo `test -f 'source/mp_get_memory_functions.c' || echo '$(srcdir)/'`source/mp_get_memory_functions.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-mp_get_memory_functions.Tpo $(DEPDIR)/libcloog_isl_la-mp_get_memory_functions.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/mp_get_memory_functions.c' object='libcloog_isl_la-mp_get_memory_functions.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-mp_get_memory_functions.lo `test -f 'source/mp_get_memory_functions.c' || echo '$(srcdir)/'`source/mp_get_memory_functions.c - -libcloog_isl_la-block.lo: source/block.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-block.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-block.Tpo -c -o libcloog_isl_la-block.lo `test -f 'source/block.c' || echo '$(srcdir)/'`source/block.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-block.Tpo $(DEPDIR)/libcloog_isl_la-block.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/block.c' object='libcloog_isl_la-block.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-block.lo `test -f 'source/block.c' || echo '$(srcdir)/'`source/block.c - -libcloog_isl_la-clast.lo: source/clast.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-clast.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-clast.Tpo -c -o libcloog_isl_la-clast.lo `test -f 'source/clast.c' || echo '$(srcdir)/'`source/clast.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-clast.Tpo $(DEPDIR)/libcloog_isl_la-clast.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/clast.c' object='libcloog_isl_la-clast.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-clast.lo `test -f 'source/clast.c' || echo '$(srcdir)/'`source/clast.c - -libcloog_isl_la-matrix.lo: source/matrix.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-matrix.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-matrix.Tpo -c -o libcloog_isl_la-matrix.lo `test -f 'source/matrix.c' || echo '$(srcdir)/'`source/matrix.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-matrix.Tpo $(DEPDIR)/libcloog_isl_la-matrix.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/matrix.c' object='libcloog_isl_la-matrix.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-matrix.lo `test -f 'source/matrix.c' || echo '$(srcdir)/'`source/matrix.c - -libcloog_isl_la-state.lo: source/state.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-state.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-state.Tpo -c -o libcloog_isl_la-state.lo `test -f 'source/state.c' || echo '$(srcdir)/'`source/state.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-state.Tpo $(DEPDIR)/libcloog_isl_la-state.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/state.c' object='libcloog_isl_la-state.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-state.lo `test -f 'source/state.c' || echo '$(srcdir)/'`source/state.c - -libcloog_isl_la-input.lo: source/input.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-input.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-input.Tpo -c -o libcloog_isl_la-input.lo `test -f 'source/input.c' || echo '$(srcdir)/'`source/input.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-input.Tpo $(DEPDIR)/libcloog_isl_la-input.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/input.c' object='libcloog_isl_la-input.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-input.lo `test -f 'source/input.c' || echo '$(srcdir)/'`source/input.c - -libcloog_isl_la-int.lo: source/int.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-int.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-int.Tpo -c -o libcloog_isl_la-int.lo `test -f 'source/int.c' || echo '$(srcdir)/'`source/int.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-int.Tpo $(DEPDIR)/libcloog_isl_la-int.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/int.c' object='libcloog_isl_la-int.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-int.lo `test -f 'source/int.c' || echo '$(srcdir)/'`source/int.c - -libcloog_isl_la-loop.lo: source/loop.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-loop.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-loop.Tpo -c -o libcloog_isl_la-loop.lo `test -f 'source/loop.c' || echo '$(srcdir)/'`source/loop.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-loop.Tpo $(DEPDIR)/libcloog_isl_la-loop.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/loop.c' object='libcloog_isl_la-loop.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-loop.lo `test -f 'source/loop.c' || echo '$(srcdir)/'`source/loop.c - -libcloog_isl_la-names.lo: source/names.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-names.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-names.Tpo -c -o libcloog_isl_la-names.lo `test -f 'source/names.c' || echo '$(srcdir)/'`source/names.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-names.Tpo $(DEPDIR)/libcloog_isl_la-names.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/names.c' object='libcloog_isl_la-names.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-names.lo `test -f 'source/names.c' || echo '$(srcdir)/'`source/names.c - -libcloog_isl_la-options.lo: source/options.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-options.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-options.Tpo -c -o libcloog_isl_la-options.lo `test -f 'source/options.c' || echo '$(srcdir)/'`source/options.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-options.Tpo $(DEPDIR)/libcloog_isl_la-options.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/options.c' object='libcloog_isl_la-options.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-options.lo `test -f 'source/options.c' || echo '$(srcdir)/'`source/options.c - -libcloog_isl_la-pprint.lo: source/pprint.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-pprint.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-pprint.Tpo -c -o libcloog_isl_la-pprint.lo `test -f 'source/pprint.c' || echo '$(srcdir)/'`source/pprint.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-pprint.Tpo $(DEPDIR)/libcloog_isl_la-pprint.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/pprint.c' object='libcloog_isl_la-pprint.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-pprint.lo `test -f 'source/pprint.c' || echo '$(srcdir)/'`source/pprint.c - -libcloog_isl_la-program.lo: source/program.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-program.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-program.Tpo -c -o libcloog_isl_la-program.lo `test -f 'source/program.c' || echo '$(srcdir)/'`source/program.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-program.Tpo $(DEPDIR)/libcloog_isl_la-program.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/program.c' object='libcloog_isl_la-program.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-program.lo `test -f 'source/program.c' || echo '$(srcdir)/'`source/program.c - -libcloog_isl_la-statement.lo: source/statement.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-statement.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-statement.Tpo -c -o libcloog_isl_la-statement.lo `test -f 'source/statement.c' || echo '$(srcdir)/'`source/statement.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-statement.Tpo $(DEPDIR)/libcloog_isl_la-statement.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/statement.c' object='libcloog_isl_la-statement.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-statement.lo `test -f 'source/statement.c' || echo '$(srcdir)/'`source/statement.c - -libcloog_isl_la-stride.lo: source/stride.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-stride.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-stride.Tpo -c -o libcloog_isl_la-stride.lo `test -f 'source/stride.c' || echo '$(srcdir)/'`source/stride.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-stride.Tpo $(DEPDIR)/libcloog_isl_la-stride.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/stride.c' object='libcloog_isl_la-stride.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-stride.lo `test -f 'source/stride.c' || echo '$(srcdir)/'`source/stride.c - -libcloog_isl_la-union_domain.lo: source/union_domain.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-union_domain.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-union_domain.Tpo -c -o libcloog_isl_la-union_domain.lo `test -f 'source/union_domain.c' || echo '$(srcdir)/'`source/union_domain.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-union_domain.Tpo $(DEPDIR)/libcloog_isl_la-union_domain.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/union_domain.c' object='libcloog_isl_la-union_domain.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-union_domain.lo `test -f 'source/union_domain.c' || echo '$(srcdir)/'`source/union_domain.c - -libcloog_isl_la-version.lo: source/version.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-version.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-version.Tpo -c -o libcloog_isl_la-version.lo `test -f 'source/version.c' || echo '$(srcdir)/'`source/version.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-version.Tpo $(DEPDIR)/libcloog_isl_la-version.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/version.c' object='libcloog_isl_la-version.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-version.lo `test -f 'source/version.c' || echo '$(srcdir)/'`source/version.c - -libcloog_isl_la-domain.lo: source/isl/domain.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-domain.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-domain.Tpo -c -o libcloog_isl_la-domain.lo `test -f 'source/isl/domain.c' || echo '$(srcdir)/'`source/isl/domain.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-domain.Tpo $(DEPDIR)/libcloog_isl_la-domain.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/isl/domain.c' object='libcloog_isl_la-domain.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-domain.lo `test -f 'source/isl/domain.c' || echo '$(srcdir)/'`source/isl/domain.c - -libcloog_isl_la-constraints.lo: source/isl/constraints.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-constraints.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-constraints.Tpo -c -o libcloog_isl_la-constraints.lo `test -f 'source/isl/constraints.c' || echo '$(srcdir)/'`source/isl/constraints.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-constraints.Tpo $(DEPDIR)/libcloog_isl_la-constraints.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/isl/constraints.c' object='libcloog_isl_la-constraints.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-constraints.lo `test -f 'source/isl/constraints.c' || echo '$(srcdir)/'`source/isl/constraints.c - -libcloog_isl_la-backend.lo: source/isl/backend.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-backend.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-backend.Tpo -c -o libcloog_isl_la-backend.lo `test -f 'source/isl/backend.c' || echo '$(srcdir)/'`source/isl/backend.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-backend.Tpo $(DEPDIR)/libcloog_isl_la-backend.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/isl/backend.c' object='libcloog_isl_la-backend.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-backend.lo `test -f 'source/isl/backend.c' || echo '$(srcdir)/'`source/isl/backend.c - -cloog.o: source/cloog.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cloog.o -MD -MP -MF $(DEPDIR)/cloog.Tpo -c -o cloog.o `test -f 'source/cloog.c' || echo '$(srcdir)/'`source/cloog.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cloog.Tpo $(DEPDIR)/cloog.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/cloog.c' object='cloog.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cloog.o `test -f 'source/cloog.c' || echo '$(srcdir)/'`source/cloog.c - -cloog.obj: source/cloog.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cloog.obj -MD -MP -MF $(DEPDIR)/cloog.Tpo -c -o cloog.obj `if test -f 'source/cloog.c'; then $(CYGPATH_W) 'source/cloog.c'; else $(CYGPATH_W) '$(srcdir)/source/cloog.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cloog.Tpo $(DEPDIR)/cloog.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/cloog.c' object='cloog.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cloog.obj `if test -f 'source/cloog.c'; then $(CYGPATH_W) 'source/cloog.c'; else $(CYGPATH_W) '$(srcdir)/source/cloog.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt -install-pkgincludeHEADERS: $(pkginclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" - @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ - done - -uninstall-pkgincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files -install-pkgislincludeHEADERS: $(pkgislinclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(pkgislincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgislincludedir)" - @list='$(pkgislinclude_HEADERS)'; test -n "$(pkgislincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgislincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgislincludedir)" || exit $$?; \ - done - -uninstall-pkgislincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(pkgislinclude_HEADERS)'; test -n "$(pkgislincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgislincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgislincludedir)" && rm -f $$files -install-pkgmatrixincludeHEADERS: $(pkgmatrixinclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(pkgmatrixincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgmatrixincludedir)" - @list='$(pkgmatrixinclude_HEADERS)'; test -n "$(pkgmatrixincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgmatrixincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgmatrixincludedir)" || exit $$?; \ - done - -uninstall-pkgmatrixincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(pkgmatrixinclude_HEADERS)'; test -n "$(pkgmatrixincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgmatrixincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgmatrixincludedir)" && rm -f $$files - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: check-recursive -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) -install-binPROGRAMS: install-libLTLIBRARIES - -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgislincludedir)" "$(DESTDIR)$(pkgmatrixincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ - clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: install-data-local install-pkgincludeHEADERS \ - install-pkgislincludeHEADERS install-pkgmatrixincludeHEADERS - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: install-binPROGRAMS install-libLTLIBRARIES - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES \ - uninstall-local uninstall-pkgincludeHEADERS \ - uninstall-pkgislincludeHEADERS \ - uninstall-pkgmatrixincludeHEADERS - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ - install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-binPROGRAMS \ - clean-generic clean-libLTLIBRARIES clean-libtool ctags \ - ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ - distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-binPROGRAMS install-data \ - install-data-am install-data-local install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-libLTLIBRARIES \ - install-man install-pdf install-pdf-am \ - install-pkgincludeHEADERS install-pkgislincludeHEADERS \ - install-pkgmatrixincludeHEADERS install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-binPROGRAMS \ - uninstall-libLTLIBRARIES uninstall-local \ - uninstall-pkgincludeHEADERS uninstall-pkgislincludeHEADERS \ - uninstall-pkgmatrixincludeHEADERS - - -FORCE: -isl/libisl.la: FORCE - cd isl; $(MAKE) $(AM_MAKEFLAGS) libisl.la - -version.h: @GIT_INDEX@ - echo '#define CLOOG_HEAD "'`$(top_builddir)/genversion.sh`'"' > $@ - -install-data-local: - @test -z "$(pkgconfig_libdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfig_libdir)" - $(INSTALL_DATA) $(pkgconfig_libfile) "$(DESTDIR)$(pkgconfig_libdir)/$(pkgconfig_libfile)" - -uninstall-local: - rm -f "$(DESTDIR)$(pkgconfig_libdir)/$(pkgconfig_libfile)" - -dist-hook: - rm -f $(distdir)/test/Makefile - $(top_builddir)/genversion.sh > $(distdir)/CLOOG_HEAD - (cd doc; make cloog.pdf) && cp doc/cloog.pdf $(distdir)/doc/ - -#/***************************************************************************** -# * Rules * -# *****************************************************************************/ - -check: - $(MAKE) test -C test - -valcheck: - $(MAKE) valgrind -C test - -total: - @echo " /*-----------------------------------------------*" - @echo " * CLooG *" - @echo " *-----------------------------------------------*/" - $(MAKE) uninstall - $(MAKE) clean - $(MAKE) - $(MAKE) install - -doc: - @echo " /*-----------------------------------------------*" - @echo " * Generating CLooG's documentation *" - @echo " *-----------------------------------------------*/" - doxygen ./autoconf/Doxyfile - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.16.3/README b/cloog-0.16.3/README deleted file mode 100644 index 7003a2b..0000000 --- a/cloog-0.16.3/README +++ /dev/null @@ -1,203 +0,0 @@ -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** The Chunky Loop Generator ** -# **-------------------------------------------------------------------** -# ** First version of this file: january 22th 2002 ** -# **-------------------------------------------------------------------**/ -# - -For complete informations about this software, how to build and use it, -please see the postscript file in the ./doc subdirectory (a pdf version -is available in the web site). - -Overview : -I. Description -II. Building CLooG -III. Options -IV. Running CLooG -V. General Questions - -# **-------------------------------------------------------------------** -# ** I. Description ** -# **-------------------------------------------------------------------**/ - -CLooG is a software which generates loops for scanning Z-polyhedra. That is, -CLooG finds the code or pseudo-code where each integral point of one or more -parametrized polyhedron or parametrized polyhedra union is reached. CLooG is -designed to avoid control overhead and to produce a very efficient code. - -Its input is some data on the polyhedra to scan, basically the system of -affine inequalities that define them, and a context that defines some -properties known on the parameters if any. The output is the pseudo scanning -code. Many facilities are provided to generate a near-to-be-compileable code, -and every useful functions to generate the code may be called from the CLooG -library. - - INPUT | OUTPUT -(fortunately not exactly the input, | (the real one, with default options) - check test/readme.cloog for the | - real input for that problem !) | - | - j^ i>=2 | - | | j<=n+2-i | - | |\ | i<=n | - | | \ | | - m-+-****---+-j<=m | for (i=2;i<=n;i++) { - | ***** | | for (j=2;j<=min(m,-i+n+2);j++) { - | ****** | ==> S1 ; - | *******| | } - 2-+-********-j>=2 | } - | | |\ | - 0-+-+------+--->i | - | | | | - 0 2 n | - | - Context : n>=2 | - m>=2 | - System : 2<=i<=n | - 2<=j<=m | - j<=n+2-i | - -# **-------------------------------------------------------------------** -# ** II. Building CLooG ** -# **-------------------------------------------------------------------**/ - -If you obtained CLooG from the git repository, then you first -need to obtain the submodules and create a configure script. - - ./get_submodules.sh - ./autogen.sh - -The first step is only needed if you plan on using the isl backend. - -The configure shell script attempts to guess correct values for various -system-dependent variables used during compilation. It uses those values to -create a Makefile. The file configure.ac is used to create configure by a -program called autoconf. You only need configure.ac if you want to change -it or regenerate configure using a newer version of autoconf. - -The simplest way to compile this package is: -cd to the directory containing the package's source code and type - - ./configure - -to configure the package for your system (while running, configure prints -some messages telling which features it is checking for). To compile the -package, type - - make - - -to install the program and/or the library, type - - make install - -you can remove the program binaries and object files from the source code -directory by typing - - make clean - -To also remove the files that configure created (so you can compile the -package for a different kind of computer) type - - make distclean - -# **-------------------------------------------------------------------** -# ** III. Options ** -# **-------------------------------------------------------------------**/ - -By default, make will install the package's files in /usr/local/bin, -/usr/local/lib, etc. You can specify an installation prefix other than -/usr/local by giving onfigure the option --prefix=PATH. - -By default, configure will use the isl that comes bundled with CLooG. -Using the --with-isl option of configure the user can specify that "no" isl, -a previously installed ("system") isl or a "build" isl should be used. -In the latter case, the user should also specify the build location -using --with-isl-builddir=PATH. In case of an installed isl, -the installation location can be specified using the ---with-isl-prefix=PATH and --with-isl-exec-prefix=PATH options of configure. - -By default, configure will seek the PolyLib in standard locations. -If necessary, you can specify the PolyLib's path by giving configure the -option --with-polylib-prefix=PATH and/or --with-polylib-exec-prefix=PATH. - -By default, configure will seek the GMP library in standard locations. -If necessary, you can specify the GMP's path by giving configure the -option --with-gmp-prefix=PATH and/or --with-gmp-exec-prefix=PATH. - -By default, when using the PolyLib backend, -CLooG and its library are built using 64 bits integer -representation. You can choose to specify explicitly others integer -representations by using: ---with-bits=32 for 32 bits integers, ---with-bits=64 for 64 bits integers (default), ---with-bits=gmp for multiple precision integers. - -# **-------------------------------------------------------------------** -# ** IV. Running CLooG ** -# **-------------------------------------------------------------------**/ - -To run CLooG, simply type 'cloog', optionally followed by the name of an -input file. You can type 'cloog -h' or 'cloog --help' for some help. -For more informations, please check the ./doc subdirectory. - -# **-------------------------------------------------------------------** -# ** V. General Questions ** -# **-------------------------------------------------------------------**/ - -1. What does CLooG means ? - -CLooG is the Chunky LOOp Generator, Chunky is an automatic loop optimizer for -data locality. CLooG is a completely independent part of the Chunky project. -Pronounce 'CLooG' as 'klug', which means 'sly' in german :-). - -2. CLooG do not compile, what should I do ? - -CLooG should compile everywhere (assuming that PolyLib is still there), thus -there is a problem or the documentation is not clear, in both case it is -necessary to ask the author(s) ! - -3. I need a feature that CLooG do not implement, what should I do ? - -There are two ways. First, CLooG is a LGPL software and library. So you -are welcome to improve it yourself ;-) ! Many project have been successful, it -is -maybe- a sign that this is not too hard to put your hands inside the -source. Second, just ask the author(s) :-) ! Maybe a lot of people would be -interessed by such feature, maybe many people asked for it before, maybe it's -trivial to implement (and even)... Please just never hesitate to ask the -author(s) ! - -4. I implemented a cool feature, can I submit it ? - -Obviously you are welcome to send the author(s) any improvement. But obviously -we are quite careful with readability, correctness and stability, and the -author(s) will read, check and check again any contribution before including it. -Thus, it can take time... There are few basic rules to write contributions: -- (1) Do never change the indentation of any part of the code that is not yours. -- (2) Do never send codes that use more than 80 columns. -- (3) Do never send codes without a lot of comments in (bad or good) english. -- (4) Do never send codes with obscure and/or non-english variable names. -- (5) Use C89, just C, only C (note: "//" comments are not C89, - variable declaration elsewhere than at the beginning of a block, is not C89). -- (6) Read doc/SubmittingPatches -Please understand that in order to live for a long time, and to be used in many -projects the very first priority for CLooG is to be readable and documented. - -5. Is CLooG bug free ? - -No, who can ? ClooG is a complex program, and we do not pretend it to be bug -free. Nevertheless because it has been tested and tested, we are fairly sure -that CLooG results with default options have good chances to be satisfactory. -If you find a result that looks strange, inadequate or incorrect, please send: -- (1) The input file to the author(s). -- (2) The output. -- (3) The first line given by typing 'cloog -v'. -- (4) All your command line options to achieve the result. -We will try to explain the result or to fix the problem as soon as possible. - -6. How can I contact the author(s) ? - -Just send a mail to cloog-development@googlegroups.com diff --git a/cloog-0.16.3/aclocal.m4 b/cloog-0.16.3/aclocal.m4 deleted file mode 100644 index 29d7483..0000000 --- a/cloog-0.16.3/aclocal.m4 +++ /dev/null @@ -1,991 +0,0 @@ -# generated automatically by aclocal 1.11.1 -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, -[m4_warning([this file was generated for autoconf 2.65. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically `autoreconf'.])]) - -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.11' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 9 - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 10 - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -#serial 5 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 16 - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) - -dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST(install_sh)]) - -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 6 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_MKDIR_P -# --------------- -# Check for `mkdir -p'. -AC_DEFUN([AM_PROG_MKDIR_P], -[AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 5 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# Copyright (C) 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 1 - -# AM_SILENT_RULES([DEFAULT]) -# -------------------------- -# Enable less verbose build rules; with the default set to DEFAULT -# (`yes' being less verbose, `no' or empty being verbose). -AC_DEFUN([AM_SILENT_RULES], -[AC_ARG_ENABLE([silent-rules], -[ --enable-silent-rules less verbose build output (undo: `make V=1') - --disable-silent-rules verbose build output (undo: `make V=0')]) -case $enable_silent_rules in -yes) AM_DEFAULT_VERBOSITY=0;; -no) AM_DEFAULT_VERBOSITY=1;; -*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; -esac -AC_SUBST([AM_DEFAULT_VERBOSITY])dnl -AM_BACKSLASH='\' -AC_SUBST([AM_BACKSLASH])dnl -_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl -]) - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([m4/ax_cc_maxopt.m4]) -m4_include([m4/ax_cflags_warn_all.m4]) -m4_include([m4/ax_check_compiler_flags.m4]) -m4_include([m4/ax_compiler_vendor.m4]) -m4_include([m4/ax_create_pkgconfig_info.m4]) -m4_include([m4/ax_gcc_archflag.m4]) -m4_include([m4/ax_gcc_x86_cpuid.m4]) -m4_include([m4/ax_submodule.m4]) -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) diff --git a/cloog-0.16.3/autoconf/Doxyfile.in b/cloog-0.16.3/autoconf/Doxyfile.in deleted file mode 100644 index fa02ac7..0000000 --- a/cloog-0.16.3/autoconf/Doxyfile.in +++ /dev/null @@ -1,1101 +0,0 @@ -# Doxyfile 1.3.5 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = CLooG - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = @RELEASE@ - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = doc/source - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, -# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en -# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, -# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is used -# as the annotated text. Otherwise, the brief description is used as-is. If left -# blank, the following values are used ("$name" is automatically replaced with the -# name of the entity): "The $name class" "The $name widget" "The $name file" -# "is" "provides" "specifies" "contains" "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = YES - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. - -INLINE_INHERITED_MEMB = YES - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. It is allowed to use relative paths in the argument list. - -STRIP_FROM_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = YES - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = -#WARN_LOGFILE = doc/doxygen.log - - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = source \ - include/cloog - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp -# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories -# that are symbolic links (a Unix filesystem feature) are excluded from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. - -INPUT_FILTER = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = YES - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse the -# parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superseded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = /usr/bin/ - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -# DOTFILE_DIRS = src - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes that -# lay further from the root node will be omitted. Note that setting this option to -# 1 or 2 may greatly reduce the computation time needed for large code bases. Also -# note that a graph may be further truncated if the graph's image dimensions are -# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). -# If 0 is used for the depth value (the default), the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/cloog-0.16.3/autoconf/config.guess b/cloog-0.16.3/autoconf/config.guess deleted file mode 100755 index 115f944..0000000 --- a/cloog-0.16.3/autoconf/config.guess +++ /dev/null @@ -1,1502 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -# Free Software Foundation, Inc. - -timestamp='2010-04-03' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' HUP INT TERM - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/cloog-0.16.3/autoconf/config.sub b/cloog-0.16.3/autoconf/config.sub deleted file mode 100755 index 204218c..0000000 --- a/cloog-0.16.3/autoconf/config.sub +++ /dev/null @@ -1,1731 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -# Free Software Foundation, Inc. - -timestamp='2010-05-21' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nios | nios2 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12 | picochip) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile-* | tilegx-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze) - basic_machine=microblaze-xilinx - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - # This must be matched before tile*. - tilegx*) - basic_machine=tilegx-unknown - os=-linux-gnu - ;; - tile*) - basic_machine=tile-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -nacl*) - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - tic54x-*) - os=-coff - ;; - tic55x-*) - os=-coff - ;; - tic6x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/cloog-0.16.3/autoconf/depcomp b/cloog-0.16.3/autoconf/depcomp deleted file mode 100755 index e5f9736..0000000 --- a/cloog-0.16.3/autoconf/depcomp +++ /dev/null @@ -1,589 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2007-03-29.01 - -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software -# Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by `PROGRAMS ARGS'. - object Object file output by `PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputing dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory -## that the space means something, we add a space to the output as -## well. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the - # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> $depfile - echo >> $depfile - - # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> $depfile - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # 'foo.d', which lands next to the object file, wherever that - # happens to be. - # Much of this is similar to the tru64 case; see comments there. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" - # Add `dependent.h:' lines. - sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" "$tmpdepfile2" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mechanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. - "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no - for arg in "$@"; do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix="`echo $object | sed 's/^.*\././'`" - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. - "$@" || exit $? - IFS=" " - for arg - do - case "$arg" in - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/cloog-0.16.3/autoconf/install-sh b/cloog-0.16.3/autoconf/install-sh deleted file mode 100755 index 3f83ce9..0000000 --- a/cloog-0.16.3/autoconf/install-sh +++ /dev/null @@ -1,524 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2010-02-06.18; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -no_target_directory= - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - do_exit='(exit $ret); exit $ret' - trap "ret=129; $do_exit" 1 - trap "ret=130; $do_exit" 2 - trap "ret=141; $do_exit" 13 - trap "ret=143; $do_exit" 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writeable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - -*) prefix='./';; - *) prefix='';; - esac - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob set +f - IFS=$oIFS - - prefixes= - - for d - do - test -z "$d" && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/cloog-0.16.3/autoconf/ltmain.sh b/cloog-0.16.3/autoconf/ltmain.sh deleted file mode 100755 index be43f41..0000000 --- a/cloog-0.16.3/autoconf/ltmain.sh +++ /dev/null @@ -1,8750 +0,0 @@ -# Generated from ltmain.m4sh. - -# libtool (GNU libtool) 2.2.8 -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --no-quiet, --no-silent -# print informational messages (default) -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print more informational messages than default -# --no-verbose don't print the extra informational messages -# --version print version information -# -h, --help, --help-all print short, long, or detailed help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. When passed as first option, -# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.8 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . - -PROGRAM=libtool -PACKAGE=libtool -VERSION=2.2.8 -TIMESTAMP="" -package_revision=1.3169 - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# NLS nuisances: We save the old values to restore during execute mode. -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" - fi" -done -LC_ALL=C -LANGUAGE=C -export LANGUAGE LC_ALL - -$lt_unset CDPATH - - - - - - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - - - -: ${CP="cp -f"} -test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} -: ${EGREP="grep -E"} -: ${FGREP="grep -F"} -: ${GREP="grep"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SED="sed"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" - -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` -} - -# Generated shell functions inserted here. - -# These SED scripts presuppose an absolute path with a trailing slash. -pathcar='s,^/\([^/]*\).*$,\1,' -pathcdr='s,^/[^/]*,,' -removedotparts=':dotsl - s@/\./@/@g - t dotsl - s,/\.$,/,' -collapseslashes='s@/\{1,\}@/@g' -finalslash='s,/*$,/,' - -# func_normal_abspath PATH -# Remove doubled-up and trailing slashes, "." path components, -# and cancel out any ".." path components in PATH after making -# it an absolute path. -# value returned in "$func_normal_abspath_result" -func_normal_abspath () -{ - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` - while :; do - # Processed it all yet? - if test "$func_normal_abspath_tpath" = / ; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result" ; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in - "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} - -# func_relative_path SRCDIR DSTDIR -# generates a relative path from SRCDIR to DSTDIR, with a trailing -# slash if non-empty, suitable for immediately appending a filename -# without needing to append a separator. -# value returned in "$func_relative_path_result" -func_relative_path () -{ - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break - ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break - ;; - *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=${func_dirname_result} - if test "x$func_relative_path_tlibdir" = x ; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result - ;; - esac - done - - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test "x$func_stripname_result" != x ; then - func_relative_path_result=${func_relative_path_result}/${func_stripname_result} - fi - - # Normalisation. If bindir is libdir, return empty string, - # else relative path ending with a slash; either way, target - # file name can be directly appended. - if test ! -z "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result/" - func_relative_path_result=$func_stripname_result - fi -} - -# The name of this program: -func_dirname_and_basename "$progpath" -progname=$func_basename_result - -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=: - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname${mode+: }$mode: $*" -} - -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 - - # bash bug again: - : -} - -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` - done - my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "$my_tmpdir" -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () -{ - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac - - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac -} - - -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "$1" | $SED \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac - - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac - - func_quote_for_expand_result="$my_arg" -} - - -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $SED -n '/(C)/!b go - :more - /\./!{ - N - s/\n# // - b more - } - :go - /^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} - -# func_usage -# Echo short help message to standard output and exit. -func_usage () -{ - $SED -n '/^# Usage:/,/^# *.*--help/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - echo - $ECHO "run \`$progname --help | more' for full usage" - exit $? -} - -# func_help [NOEXIT] -# Echo long help message to standard output and exit, -# unless 'noexit' is passed as argument. -func_help () -{ - $SED -n '/^# Usage:/,/# Report bugs to/ { - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ - p - }' < "$progpath" - ret=$? - if test -z "$1"; then - exit $ret - fi -} - -# func_missing_arg argname -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - func_error "missing argument for $1." - exit_cmd=exit -} - -exit_cmd=: - - - - - - -magic="%%%MAGIC variable%%%" -magic_exe="%%%MAGIC EXE variable%%%" - -# Global variables. -# $mode is unset -nonopt= -execute_dlfiles= -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 - -opt_dry_run=false -opt_duplicate_deps=false -opt_silent=false -opt_debug=: - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - -# func_fatal_configuration arg... -# Echo program name prefixed message to standard error, followed by -# a configuration failure hint, and exit. -func_fatal_configuration () -{ - func_error ${1+"$@"} - func_error "See the $PACKAGE documentation for more information." - func_fatal_error "Fatal configuration error." -} - - -# func_config -# Display the configuration for all the tags in this script. -func_config () -{ - re_begincf='^# ### BEGIN LIBTOOL' - re_endcf='^# ### END LIBTOOL' - - # Default configuration. - $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" - - # Now print the configurations for the tags. - for tagname in $taglist; do - $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" - done - - exit $? -} - -# func_features -# Display the features supported by this script. -func_features () -{ - echo "host: $host" - if test "$build_libtool_libs" = yes; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test "$build_old_libs" = yes; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - - exit $? -} - -# func_enable_tag tagname -# Verify that TAGNAME is valid, and either flag an error and exit, or -# enable the TAGNAME tag. We also add TAGNAME to the global $taglist -# variable here. -func_enable_tag () -{ - # Global variable: - tagname="$1" - - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf="/$re_begincf/,/$re_endcf/p" - - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac - - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; - *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - -# Parse options once, thoroughly. This comes as soon as possible in -# the script to make things like `libtool --version' happen quickly. -{ - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - esac - - # Parse non-mode specific arguments: - while test "$#" -gt 0; do - opt="$1" - shift - - case $opt in - --config) func_config ;; - - --debug) preserve_args="$preserve_args $opt" - func_echo "enabling shell trace mode" - opt_debug='set -x' - $opt_debug - ;; - - -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break - execute_dlfiles="$execute_dlfiles $1" - shift - ;; - - --dry-run | -n) opt_dry_run=: ;; - --features) func_features ;; - --finish) mode="finish" ;; - - --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break - case $1 in - # Valid mode arguments: - clean) ;; - compile) ;; - execute) ;; - finish) ;; - install) ;; - link) ;; - relink) ;; - uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; - esac - - mode="$1" - shift - ;; - - --preserve-dup-deps) - opt_duplicate_deps=: ;; - - --quiet|--silent) preserve_args="$preserve_args $opt" - opt_silent=: - opt_verbose=false - ;; - - --no-quiet|--no-silent) - preserve_args="$preserve_args $opt" - opt_silent=false - ;; - - --verbose| -v) preserve_args="$preserve_args $opt" - opt_silent=false - opt_verbose=: - ;; - - --no-verbose) preserve_args="$preserve_args $opt" - opt_verbose=false - ;; - - --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break - preserve_args="$preserve_args $opt $1" - func_enable_tag "$1" # tagname is set here - shift - ;; - - # Separate optargs to long options: - -dlopen=*|--mode=*|--tag=*) - func_opt_split "$opt" - set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} - shift - ;; - - -\?|-h) func_usage ;; - --help) opt_help=: ;; - --help-all) opt_help=': help-all' ;; - --version) func_version ;; - - -*) func_fatal_help "unrecognized option \`$opt'" ;; - - *) nonopt="$opt" - break - ;; - esac - done - - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_duplicate_deps - ;; - esac - - # Having warned about all mis-specified options, bail out if - # anything was wrong. - $exit_cmd $EXIT_FAILURE -} - -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -## ----------- ## -## Main. ## -## ----------- ## - -$opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - test -z "$mode" && func_fatal_error "error: you must specify a MODE." - - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$mode' for more information." -} - - -# func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case "$lalib_p_line" in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test "$lalib_p" = yes -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - func_lalib_p "$1" -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_ltwrapper_scriptname_result="" - if func_ltwrapper_executable_p "$1"; then - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" - fi -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $opt_debug - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$save_ifs - eval cmd=\"$cmd\" - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. -func_source () -{ - $opt_debug - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $opt_debug - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case "$@ " in - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi - - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T <?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - removelist="$removelist $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - removelist="$removelist $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - command="$command -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test "$compiler_c_o" = yes; then - command="$command -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { - test "$mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to build PIC objects only - -prefer-non-pic try to build non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -bindir BINDIR specify path to binaries directory (for systems where - libraries must be found in the PATH setting at runtime) - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -Wc,FLAG - -Xcompiler FLAG pass linker-specific FLAG directly to the compiler - -Wl,FLAG - -Xlinker FLAG pass linker-specific FLAG directly to the linker - -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode \`$mode'" - ;; - esac - - echo - $ECHO "Try \`$progname --help' for more information about other modes." -} - -# Now that we've collected a possible --mode arg, show help if necessary -if $opt_help; then - if test "$opt_help" = :; then - func_mode_help - else - { - func_help noexit - for mode in compile link execute install finish uninstall clean; do - func_mode_help - done - } | sed -n '1p; 2,$s/^Usage:/ or: /p' - { - func_help noexit - for mode in compile link execute install finish uninstall clean; do - echo - func_mode_help - done - } | - sed '1d - /^When reporting/,/^Report/{ - H - d - } - $x - /information about other modes/d - /more detailed .*MODE/d - s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' - fi - exit $? -fi - - -# func_mode_execute arg... -func_mode_execute () -{ - $opt_debug - # The first argument is the command name. - cmd="$nonopt" - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir="$func_dirname_result" - - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir="$func_dirname_result" - ;; - - *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -* | *.la | *.lo ) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file="$progdir/$program" - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_quote_for_eval "$file" - args="$args $func_quote_for_eval_result" - done - - if test "X$opt_dry_run" = Xfalse; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - fi -} - -test "$mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libdirs="$nonopt" - admincmds= - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done - - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || admincmds="$admincmds - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the \`-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - echo - - echo "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" - echo "pages." - ;; - *) - echo "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - echo "----------------------------------------------------------------------" - exit $EXIT_SUCCESS -} - -test "$mode" = finish && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $opt_debug - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac; then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - install_prog="$install_prog$func_quote_for_eval_result" - install_shared_prog=$install_prog - case " $install_prog " in - *[\\\ /]cp\ *) install_cp=: ;; - *) install_cp=false ;; - esac - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - no_mode=: - for arg - do - arg2= - if test -n "$dest"; then - files="$files $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - if $install_cp; then :; else - prev=$arg - fi - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - if test "x$prev" = x-m && test -n "$install_override_mode"; then - arg2=$install_override_mode - no_mode=false - fi - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - install_prog="$install_prog $func_quote_for_eval_result" - if test -n "$arg2"; then - func_quote_for_eval "$arg2" - fi - install_shared_prog="$install_shared_prog $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" - - if test -n "$install_override_mode" && $no_mode; then - if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" - fi - fi - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "\`$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - staticlibs="$staticlibs $file" - ;; - - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - dir="$dir$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking \`$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname="$1" - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme="$stripme" - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme="" - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - $opt_dry_run || { - if test "$finalize" = yes; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_silent || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink \`$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file="$outputname" - else - func_warning "cannot relink \`$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name="$func_basename_result" - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test "$mode" = install && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) -#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" -#endif - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_verbose "extracting global C symbols from \`$progfile'" - $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $opt_dry_run || { - $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" - func_basename "$dlprefile" - name="$func_basename_result" - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - echo >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -" - case $host in - *cygwin* | *mingw* | *cegcc* ) - echo >> "$output_objdir/$my_dlsyms" "\ -/* DATA imports from DLLs on WIN32 con't be const, because - runtime relocations are performed -- see ld's documentation - on pseudo-relocs. */" - lt_dlsym_const= ;; - *osf5*) - echo >> "$output_objdir/$my_dlsyms" "\ -/* This system does not cope well with relocations in const data */" - lt_dlsym_const= ;; - *) - lt_dlsym_const=const ;; - esac - - echo >> "$output_objdir/$my_dlsyms" "\ -extern $lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; -$lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - echo >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) symtab_cflags="$symtab_cflags $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - - # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` - fi -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -# Despite the name, also deal with 64 bit binaries. -func_win32_libid () -{ - $opt_debug - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - win32_nmres=`eval $NM -f posix -A $1 | - $SED -n -e ' - 1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - if test "$lock_old_archive_extraction" = yes; then - lockfile=$f_ex_an_ar_oldlib.lock - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - fi - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ - 'stat=$?; rm -f "$lockfile"; exit $stat' - if test "$lock_old_archive_extraction" = yes; then - $opt_dry_run || rm -f "$lockfile" - fi - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $opt_debug - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib="$func_basename_result" - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` - done - - func_extract_archives_result="$my_oldobjs" -} - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=${1-no} - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - file=\"\$0\"" - - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` - $ECHO "\ - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - ECHO=\"$qECHO\" - fi - -# Very basic option parsing. These options are (a) specific to -# the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ which is used only on -# windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options which match -# this pattern). -# -# There are only two supported options: --lt-debug and -# --lt-dump-script. There is, deliberately, no --lt-help. -# -# The first argument to this parsing function should be the -# script's $0 value, followed by "$@". -lt_option_debug= -func_parse_lt_options () -{ - lt_script_arg0=\$0 - shift - for lt_opt - do - case \"\$lt_opt\" in - --lt-debug) lt_option_debug=1 ;; - --lt-dump-script) - lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` - test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. - lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` - cat \"\$lt_dump_D/\$lt_dump_F\" - exit 0 - ;; - --lt-*) - \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 - exit 1 - ;; - esac - done - - # Print the debug banner immediately: - if test -n \"\$lt_option_debug\"; then - echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 - fi -} - -# Used when --lt-debug. Prints its arguments to stdout -# (redirection is the responsibility of the caller) -func_lt_dump_args () -{ - lt_dump_args_N=1; - for lt_arg - do - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" - lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` - done -} - -# Core function for launching the target application -func_exec_program_core () -{ -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 -} - -# A function to encapsulate launching the target application -# Strips options in the --lt-* namespace from \$@ and -# launches target application with the remaining arguments. -func_exec_program () -{ - for lt_wr_arg - do - case \$lt_wr_arg in - --lt-*) ;; - *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; - esac - shift - done - func_exec_program_core \${1+\"\$@\"} -} - - # Parse options - func_parse_lt_options \"\$0\" \${1+\"\$@\"} - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` - done - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` - - export $shlibpath_var -" - fi - - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. - func_exec_program \${1+\"\$@\"} - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} - - -# func_to_host_path arg -# -# Convert paths to host format when used with build tools. -# Intended for use with "native" mingw (where libtool itself -# is running under the msys shell), or in the following cross- -# build environments: -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# where wine is equipped with the `winepath' executable. -# In the native mingw case, the (msys) shell automatically -# converts paths for any non-msys applications it launches, -# but that facility isn't available from inside the cwrapper. -# Similar accommodations are necessary for $host mingw and -# $build cygwin. Calling this function does no harm for other -# $host/$build combinations not listed above. -# -# ARG is the path (on $build) that should be converted to -# the proper representation for $host. The result is stored -# in $func_to_host_path_result. -func_to_host_path () -{ - func_to_host_path_result="$1" - if test -n "$1"; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - case $build in - *mingw* ) # actually, msys - # awkward: cmd appends spaces to result - func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_path_result=`cygpath -w "$1" | - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # Unfortunately, winepath does not exit with a non-zero - # error code, so we are forced to check the contents of - # stdout. On the other hand, if the command is not - # found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both - # error code of zero AND non-empty stdout, which explains - # the odd construction: - func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then - func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | - $SED -e "$lt_sed_naive_backslashify"` - else - # Allow warning below. - func_to_host_path_result= - fi - ;; - esac - if test -z "$func_to_host_path_result" ; then - func_error "Could not determine host path corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_path_result="$1" - fi - ;; - esac - fi -} -# end: func_to_host_path - -# func_to_host_pathlist arg -# -# Convert pathlists to host format when used with build tools. -# See func_to_host_path(), above. This function supports the -# following $build/$host combinations (but does no harm for -# combinations not listed here): -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# -# Path separators are also converted from $build format to -# $host format. If ARG begins or ends with a path separator -# character, it is preserved (but converted to $host format) -# on output. -# -# ARG is a pathlist (on $build) that should be converted to -# the proper representation on $host. The result is stored -# in $func_to_host_pathlist_result. -func_to_host_pathlist () -{ - func_to_host_pathlist_result="$1" - if test -n "$1"; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_pathlist_tmp1=$func_stripname_result - case $build in - *mingw* ) # Actually, msys. - # Awkward: cmd appends spaces to result. - func_to_host_pathlist_result=` - ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # unfortunately, winepath doesn't convert pathlists - func_to_host_pathlist_result="" - func_to_host_pathlist_oldIFS=$IFS - IFS=: - for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do - IFS=$func_to_host_pathlist_oldIFS - if test -n "$func_to_host_pathlist_f" ; then - func_to_host_path "$func_to_host_pathlist_f" - if test -n "$func_to_host_path_result" ; then - if test -z "$func_to_host_pathlist_result" ; then - func_to_host_pathlist_result="$func_to_host_path_result" - else - func_append func_to_host_pathlist_result ";$func_to_host_path_result" - fi - fi - fi - done - IFS=$func_to_host_pathlist_oldIFS - ;; - esac - if test -z "$func_to_host_pathlist_result"; then - func_error "Could not determine the host path(s) corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This may break if $1 contains DOS-style drive - # specifications. The fix is not to complicate the expression - # below, but for the user to provide a working wine installation - # with winepath so that path translation in the cross-to-mingw - # case works properly. - lt_replace_pathsep_nix_to_dos="s|:|;|g" - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_replace_pathsep_nix_to_dos"` - fi - # Now, add the leading and trailing path separators back - case "$1" in - :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" - ;; - esac - case "$1" in - *: ) func_append func_to_host_pathlist_result ";" - ;; - esac - ;; - esac - fi -} -# end: func_to_host_pathlist - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -#else -# include -# include -# ifdef __CYGWIN__ -# include -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -/* declarations of non-ANSI functions */ -#if defined(__MINGW32__) -# ifdef __STRICT_ANSI__ -int _putenv (const char *); -# endif -#elif defined(__CYGWIN__) -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -/* #elif defined (other platforms) ... */ -#endif - -/* portability defines, excluding path handling macros */ -#if defined(_MSC_VER) -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -# define S_IXUSR _S_IEXEC -# ifndef _INTPTR_T_DEFINED -# define _INTPTR_T_DEFINED -# define intptr_t int -# endif -#elif defined(__MINGW32__) -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -#elif defined(__CYGWIN__) -# define HAVE_SETENV -# define FOPEN_WB "wb" -/* #elif defined (other platforms) ... */ -#endif - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -/* path handling portability macros */ -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -#if defined(LT_DEBUGWRAPPER) -static int lt_debug = 1; -#else -static int lt_debug = 0; -#endif - -const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_debugprintf (const char *file, int line, const char *fmt, ...); -void lt_fatal (const char *file, int line, const char *message, ...); -static const char *nonnull (const char *s); -static const char *nonempty (const char *s); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); -char **prepare_spawn (char **argv); -void lt_dump_script (FILE *f); -EOF - - cat <= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char *concat_name; - - lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", - nonempty (wrapper)); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - lt_debugprintf (__FILE__, __LINE__, - "checking path component for symlinks: %s\n", - tmp_pathspec); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - lt_fatal (__FILE__, __LINE__, - "error accessing file \"%s\": %s", - tmp_pathspec, nonnull (strerror (errno))); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal (__FILE__, __LINE__, - "could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp (str, pat) == 0) - *str = '\0'; - } - return str; -} - -void -lt_debugprintf (const char *file, int line, const char *fmt, ...) -{ - va_list args; - if (lt_debug) - { - (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); - } -} - -static void -lt_error_core (int exit_status, const char *file, - int line, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *file, int line, const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); - va_end (ap); -} - -static const char * -nonnull (const char *s) -{ - return s ? s : "(null)"; -} - -static const char * -nonempty (const char *s) -{ - return (s && !*s) ? "(empty)" : nonnull (s); -} - -void -lt_setenv (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_setenv) setting '%s' to '%s'\n", - nonnull (name), nonnull (value)); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - int len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[len-1] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -EOF - case $host_os in - mingw*) - cat <<"EOF" - -/* Prepares an argument vector before calling spawn(). - Note that spawn() does not by itself call the command interpreter - (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : - ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&v); - v.dwPlatformId == VER_PLATFORM_WIN32_NT; - }) ? "cmd.exe" : "command.com"). - Instead it simply concatenates the arguments, separated by ' ', and calls - CreateProcess(). We must quote the arguments since Win32 CreateProcess() - interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a - special way: - - Space and tab are interpreted as delimiters. They are not treated as - delimiters if they are surrounded by double quotes: "...". - - Unescaped double quotes are removed from the input. Their only effect is - that within double quotes, space and tab are treated like normal - characters. - - Backslashes not followed by double quotes are not special. - - But 2*n+1 backslashes followed by a double quote become - n backslashes followed by a double quote (n >= 0): - \" -> " - \\\" -> \" - \\\\\" -> \\" - */ -#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -char ** -prepare_spawn (char **argv) -{ - size_t argc; - char **new_argv; - size_t i; - - /* Count number of arguments. */ - for (argc = 0; argv[argc] != NULL; argc++) - ; - - /* Allocate new argument vector. */ - new_argv = XMALLOC (char *, argc + 1); - - /* Put quoted arguments into the new argument vector. */ - for (i = 0; i < argc; i++) - { - const char *string = argv[i]; - - if (string[0] == '\0') - new_argv[i] = xstrdup ("\"\""); - else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) - { - int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); - size_t length; - unsigned int backslashes; - const char *s; - char *quoted_string; - char *p; - - length = 0; - backslashes = 0; - if (quote_around) - length++; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - length += backslashes + 1; - length++; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - length += backslashes + 1; - - quoted_string = XMALLOC (char, length + 1); - - p = quoted_string; - backslashes = 0; - if (quote_around) - *p++ = '"'; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - { - unsigned int j; - for (j = backslashes + 1; j > 0; j--) - *p++ = '\\'; - } - *p++ = c; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - { - unsigned int j; - for (j = backslashes; j > 0; j--) - *p++ = '\\'; - *p++ = '"'; - } - *p = '\0'; - - new_argv[i] = quoted_string; - } - else - new_argv[i] = (char *) string; - } - new_argv[argc] = NULL; - - return new_argv; -} -EOF - ;; - esac - - cat <<"EOF" -void lt_dump_script (FILE* f) -{ -EOF - func_emit_wrapper yes | - $SED -e 's/\([\\"]\)/\\\1/g' \ - -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' - - cat <<"EOF" -} -EOF -} -# end: func_emit_cwrapperexe_src - -# func_win32_import_lib_p ARG -# True if ARG is an import lib, as indicated by $file_magic_cmd -func_win32_import_lib_p () -{ - $opt_debug - case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in - *import*) : ;; - *) false ;; - esac -} - -# func_mode_link arg... -func_mode_link () -{ - $opt_debug - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - bindir= - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module="${wl}-single_module" - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - bindir) - bindir="$arg" - prev= - continue - ;; - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) deplibs="$deplibs $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# moreargs="$moreargs $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file \`$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - weak_libs="$weak_libs $arg" - prev= - continue - ;; - xcclinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -bindir) - prev=bindir - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname '-L' '' "$arg" - dir=$func_stripname_result - if test -z "$dir"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" - else - func_fatal_error "need path for \`-L' option" - fi - fi - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - deplibs="$deplibs System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; - esac - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $func_quote_for_eval_result" - compiler_flags="$compiler_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" - linker_flags="$linker_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - # Flags to be passed through unchanged, with rationale: - # -64, -mips[0-9] enable 64-bit mode for the SGI compiler - # -r[0-9][0-9]* specify processor for the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler - # +DA*, +DD* enable 64-bit mode for the HP compiler - # -q* compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* architecture-specific flags for GCC - # -F/path path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* profiling flags for GCC - # @file GCC response files - # -tp=* Portland pgcc target processor selection - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - compiler_flags="$compiler_flags $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_duplicate_deps ; then - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - libs="$libs $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; - esac - pre_post_deps="$pre_post_deps $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs="$tmp_deplibs" - fi - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - case $lib in - *.la) func_source "$lib" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - func_basename "$deplib" - deplib_base=$func_basename_result - case " $weak_libs " in - *" $deplib_base "*) ;; - *) deplibs="$deplibs $deplib" ;; - esac - done - done - libs="$dlprefiles" - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - compiler_flags="$compiler_flags $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - dir=$func_stripname_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - echo - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because the file extensions .$libext of this argument makes me believe" - echo "*** that it is just a static archive that I should not use here." - else - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - ;; - esac - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" - fi - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - dlprefiles="$dlprefiles $lib $dependency_libs" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" - fi - ;; - esac - func_basename "$lib" - laname="$func_basename_result" - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" - fi - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - newdlprefiles="$newdlprefiles $dir/$dlname" - else - newdlprefiles="$newdlprefiles $dir/$linklib" - fi - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in - *"$absdir:"*) ;; - *) temp_rpath="$temp_rpath$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc*) - # No point in relinking DLLs because paths are not encoded - notinst_deplibs="$notinst_deplibs $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" - break - fi - done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then - echo - if test "$linkmode" = prog; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname="$1" - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc*) - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - func_basename "$soroot" - soname="$func_basename_result" - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from \`$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - echo - echo "*** And there doesn't seem to be a static archive available" - echo "*** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - elif test -n "$old_library"; then - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo - $ECHO "*** Warning: This system can not link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - echo "*** But as you try to build a module library, libtool will still create " - echo "*** a static module, that should work as long as the dlopening application" - echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - *) temp_deplibs="$temp_deplibs $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - newlib_search_path="$newlib_search_path $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path="$deplib" ;; - *.la) - func_dirname "$deplib" "" "." - dir="$func_dirname_result" - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" - path= - fi - fi - ;; - *) - path="-L$absdir/$objdir" - ;; - esac - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" - - path="-L$absdir" - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - tmp_libs="$tmp_libs $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "\`-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - objs="$objs$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" - - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" - else - echo - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - libobjs="$libobjs $objs" - fi - fi - - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" - - install_libdir="$1" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - shift - IFS="$save_ifs" - - test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$1" - number_minor="$2" - number_revision="$3" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - darwin|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|qnx|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - esac - ;; - no) - current="$1" - revision="$2" - age="$3" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current" - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; - - qnx) - major=".$current" - versuffix=".$current" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - - *) - func_fatal_configuration "unknown library version type \`$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - fi - - func_generate_dlsyms "$libname" "$libname" "yes" - libobjs="$libobjs $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - removelist="$removelist $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - oldlibs="$oldlibs $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` - # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` - # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) dlfiles="$dlfiles $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) dlprefiles="$dlprefiles $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - deplibs="$deplibs System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - deplibs="$deplibs -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` - done - fi - case $tmp_deplibs in - *[!\ \ ]*) - echo - if test "X$deplibs_check_method" = "Xnone"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." - else - echo "*** Warning: inter-library dependencies are not known to be supported." - fi - echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - ;; - esac - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - echo "*** The inter-library dependencies that have been dropped here will be" - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" - echo "*** it was explicitly requested with -no-undefined," - echo "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - deplibs="$new_libs" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - if test -n "$hardcode_libdir_flag_spec_ld"; then - eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" - else - eval dep_rpath=\"$hardcode_libdir_flag_spec\" - fi - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname="$1" - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - linknames="$linknames $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" - delfiles="$delfiles $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols="$export_symbols" - export_symbols= - always_export_symbols=yes - fi - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - func_len " $cmd" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - tmp_deplibs="$tmp_deplibs $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - linker_flags="$linker_flags $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - func_basename "$output" - output_la=$func_basename_result - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript - func_verbose "creating GNU ld script: $output" - echo 'INPUT (' > $output - for obj in $save_libobjs - do - $ECHO "$obj" >> $output - done - echo ')' >> $output - delfiles="$delfiles $output" - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test "$compiler_needs_object" = yes; then - firstobj="$1 " - shift - fi - for obj - do - $ECHO "$obj" >> $output - done - delfiles="$delfiles $output" - output=$firstobj\"$file_list_spec$output\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test "X$objlist" = X || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - reload_objs=$objlist - eval concat_cmds=\"$reload_cmds\" - else - # All subsequent reloadable object files will link in - # the last one created. - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext - objlist=" $obj" - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\${concat_cmds}$reload_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" - fi - delfiles="$delfiles $output" - - else - output= - fi - - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - fi - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - if ${skipped_export-false}; then - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - fi - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "\`-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "\`-release' is ignored for programs" - - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - compile_command="$compile_command ${wl}-bind_at_load" - finalize_command="$finalize_command ${wl}-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) dllsearchpath="$dllsearchpath:$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=yes - case $host in - *cegcc* | *mingw32ce*) - # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=no - ;; - *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - esac - if test "$wrappers_required" = no; then - # Replace the output file specification. - compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' - fi - - exit $exit_status - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - oldobjs="$oldobjs $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $addlibs - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - echo "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase="$func_basename_result" - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - oldobjs="$oldobjs $gentop/$newobj" - ;; - *) oldobjs="$oldobjs $obj" ;; - esac - done - fi - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - newdependency_libs="$newdependency_libs $libdir/$name" - ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlfiles="$newdlfiles $libdir/$name" - ;; - *) newdlfiles="$newdlfiles $lib" ;; - esac - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlprefiles="$newdlprefiles $libdir/$name" - ;; - esac - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlfiles="$newdlfiles $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlprefiles="$newdlprefiles $abs" - done - dlprefiles="$newdlprefiles" - fi - $RM $output - # place dlname in correct position for cygwin - # In fact, it would be nice if we could use this code for all target - # systems that can't hard-code library paths into their executables - # and that have no shared library path variable independent of PATH, - # but it turns out we can't easily determine that from inspecting - # libtool variables, so we have to hard-code the OSs to which it - # applies here; at the moment, that means platforms that use the PE - # object format with DLL files. See the long comment at the top of - # tests/bindir.at for full details. - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) - # If a -bindir argument was supplied, place the dll there. - if test "x$bindir" != x ; - then - func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result$dlname - else - # Otherwise fall back on heuristic. - tdlname=../bin/$dlname - fi - ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -{ test "$mode" = link || test "$mode" = relink; } && - func_mode_link ${1+"$@"} - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $opt_debug - RM="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) RM="$RM $arg"; rmforce=yes ;; - -*) RM="$RM $arg" ;; - *) files="$files $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - origobjdir="$objdir" - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - objdir="$origobjdir" - else - objdir="$dir/$origobjdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$mode" = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates - if test "$mode" = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" - - case "$mode" in - clean) - case " $library_names " in - # " " in the beginning catches empty $dlname - *" $dlname "*) ;; - *) rmfiles="$rmfiles $objdir/$dlname" ;; - esac - test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then - rmfiles="$rmfiles $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then - rmfiles="$rmfiles $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$mode" = clean ; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - rmfiles="$rmfiles $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - rmfiles="$rmfiles $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - rmfiles="$rmfiles $objdir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - objdir="$origobjdir" - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -{ test "$mode" = uninstall || test "$mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: -# vi:sw=2 - diff --git a/cloog-0.16.3/autoconf/missing b/cloog-0.16.3/autoconf/missing deleted file mode 100755 index 1c8ff70..0000000 --- a/cloog-0.16.3/autoconf/missing +++ /dev/null @@ -1,367 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2006-05-10.23 - -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 -# Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -run=: -sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' -sed_minuso='s/.* -o \([^ ]*\).*/\1/p' - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -msg="missing on your system" - -case $1 in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - autom4te touch the output file, or create a stub one - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch] - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - -esac - -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). -case $1 in - lex|yacc) - # Not GNU programs, they don't have --version. - ;; - - tar) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; - - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running `$TOOL --version' or `$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case $1 in - aclocal*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case $f in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te) - echo 1>&2 "\ -WARNING: \`$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison|yacc) - echo 1>&2 "\ -WARNING: \`$1' $msg. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if test ! -f y.tab.h; then - echo >y.tab.h - fi - if test ! -f y.tab.c; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex|flex) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if test ! -f lex.yy.c; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit 1 - fi - ;; - - makeinfo) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -z "$file"; then - # ... or it is the one specified with @setfilename ... - infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n ' - /^@setfilename/{ - s/.* \([^ ]*\) *$/\1/ - p - q - }' $infile` - # ... or it is derived from the source name (dir/f.texi becomes f.info) - test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info - fi - # If the file does not exist, the user really needs makeinfo; - # let's fail without touching anything. - test -f $file || exit 1 - touch $file - ;; - - tar) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case $firstarg in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case $firstarg in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/cloog-0.16.3/configure b/cloog-0.16.3/configure deleted file mode 100755 index 8233279..0000000 --- a/cloog-0.16.3/configure +++ /dev/null @@ -1,15022 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for cloog 0.16.3. -# -# Report bugs to . -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 - - test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ - || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: cloog-development@googlegroups.com about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - -SHELL=${CONFIG_SHELL-/bin/sh} - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='cloog' -PACKAGE_TARNAME='cloog' -PACKAGE_VERSION='0.16.3' -PACKAGE_STRING='cloog 0.16.3' -PACKAGE_BUGREPORT='cloog-development@googlegroups.com' -PACKAGE_URL='' - -ac_unique_file="source/cloog.c" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -enable_option_checking=no -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -subdirs -pkgconfig_libfile -pkgconfig_libdir -VERSION_REVISION -VERSION_MINOR -VERSION_MAJOR -BITS -INSTALL -GIT_INDEX -NO_ISL_FALSE -NO_ISL_TRUE -BUNDLED_ISL_FALSE -BUNDLED_ISL_TRUE -ISL_LIBS -ISL_LDFLAGS -ISL_CPPFLAGS -NEED_GET_MEMORY_FUNCTIONS_FALSE -NEED_GET_MEMORY_FUNCTIONS_TRUE -CFLAGS_WARN -PRTDIAG -HAVE_TEXI2DVI_FALSE -HAVE_TEXI2DVI_TRUE -TEXI2DVI -CPP -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -RANLIB -AR -OBJDUMP -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -LIBTOOL -CD -LN_S -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -AM_BACKSLASH -AM_DEFAULT_VERBOSITY -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -versioninfo -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_silent_rules -enable_dependency_tracking -enable_shared -enable_static -with_pic -enable_fast_install -with_gnu_ld -enable_libtool_lock -enable_portable_binary -with_gcc_arch -with_isl -with_isl_prefix -with_isl_exec_prefix -with_isl_builddir -with_gmp -with_gmp_prefix -with_gmp_exec_prefix -with_gmp_builddir -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' -ac_subdirs_all='isl' - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information." - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures cloog 0.16.3 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/cloog] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of cloog 0.16.3:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-silent-rules less verbose build output (undo: `make V=1') - --disable-silent-rules verbose build output (undo: `make V=0') - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - --enable-portable-binary - disable compiler optimizations that would produce - unportable binaries - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-gcc-arch= use architecture for gcc -march/-mtune, - instead of guessing - --with-isl=no|system|build|bundled - Which isl to use - --with-isl-prefix=DIR Prefix of isl installation - --with-isl-exec-prefix=DIR - Exec prefix of isl installation - --with-isl-builddir=DIR Location of isl builddir - --with-gmp=system Which gmp to use - --with-gmp-prefix=DIR Prefix of gmp installation - --with-gmp-exec-prefix=DIR - Exec prefix of gmp installation - --with-gmp-builddir=DIR Location of gmp builddir - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -cloog configure 0.16.3 -generated by GNU Autoconf 2.65 - -Copyright (C) 2009 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_func - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_type - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( cat <<\_ASBOX -## ------------------------------------------------- ## -## Report this to cloog-development@googlegroups.com ## -## ------------------------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_check_decl LINENO SYMBOL VAR -# ------------------------------------ -# Tests whether SYMBOL is declared, setting cache variable VAR accordingly. -ac_fn_c_check_decl () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 -$as_echo_n "checking whether $2 is declared... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -#ifndef $2 - (void) $2; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_decl -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by cloog $as_me 0.16.3, which was -generated by GNU Autoconf 2.65. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_aux_dir= -for ac_dir in autoconf "$srcdir"/autoconf; do - for ac_t in install-sh install.sh shtool; do - if test -f "$ac_dir/$ac_t"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/$ac_t -c" - break 2 - fi - done -done -if test -z "$ac_aux_dir"; then - as_fn_error "cannot find install-sh, install.sh, or shtool in autoconf \"$srcdir\"/autoconf" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - - -VERSION_MAJOR=0 -VERSION_MINOR=16 -VERSION_REVISION=3 - -versioninfo=2:0:0 - -am__api_version='1.11' - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='cloog' - VERSION='0.16.3' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - -# Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : - enableval=$enable_silent_rules; -fi - -case $enable_silent_rules in -yes) AM_DEFAULT_VERBOSITY=0;; -no) AM_DEFAULT_VERBOSITY=1;; -*) AM_DEFAULT_VERBOSITY=0;; -esac -AM_BACKSLASH='\' - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "no acceptable C compiler found in \$PATH -See \`config.log' for more details." "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "C compiler cannot create executables -See \`config.log' for more details." "$LINENO" 5; }; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of object files: cannot compile -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -# Extract the first word of "cd", so it can be a program name with args. -set dummy cd; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CD"; then - ac_cv_prog_CD="$CD" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CD="" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CD=$ac_cv_prog_CD -if test -n "$CD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CD" >&5 -$as_echo "$CD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.2.8' -macro_revision='1.3169' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`print -r -- -n 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "" -} - -case "$ECHO" in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; -esac - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test "${lt_cv_path_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if test "${lt_cv_nm_interface+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - - - - - - - - - - - - - - - - - - - - - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if test "${lt_cv_apple_cc_single_mod+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if test "${lt_cv_ld_force_load+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 - echo "$RANLIB libconftest.a" >&5 - $RANLIB libconftest.a 2>&5 - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&5 - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if test "${lt_cv_objdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; - *) - lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - lt_prog_compiler_wl='-Xlinker ' - lt_prog_compiler_pic='-Xcompiler -fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ F* | *Sun*Fortran*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 -$as_echo "$lt_prog_compiler_pic" >&6; } - - - - - - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test "${lt_cv_prog_compiler_static_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; - *\ \(GNU\ Binutils\)\ [3-9]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - export_dynamic_flag_spec='${wl}--export-all-symbols' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - haiku*) - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - link_all_deplibs=yes - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld='-rpath $libdir' - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - fi - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - else - whole_archive_flag_spec='' - fi - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if test "${lt_cv_prog_compiler__b+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler__b=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -b" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler__b=yes - fi - else - lt_cv_prog_compiler__b=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } - -if test x"$lt_cv_prog_compiler__b" = xyes; then - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' -fi - - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo(void) {} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if test "${lt_cv_archive_cmds_need_lc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc=no - else - lt_cv_archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } - archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([A-Za-z]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if test "${lt_cv_shlibpath_overrides_runpath+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -void fnord () __attribute__((visibility("default"))); -#endif - -void fnord () { int i=42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -void fnord () __attribute__((visibility("default"))); -#endif - -void fnord () { int i=42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - -# Extract the first word of "texi2dvi", so it can be a program name with args. -set dummy texi2dvi; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_TEXI2DVI+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$TEXI2DVI"; then - ac_cv_prog_TEXI2DVI="$TEXI2DVI" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_TEXI2DVI="texi2dvi" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -TEXI2DVI=$ac_cv_prog_TEXI2DVI -if test -n "$TEXI2DVI"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEXI2DVI" >&5 -$as_echo "$TEXI2DVI" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test -n "$TEXI2DVI"; then - HAVE_TEXI2DVI_TRUE= - HAVE_TEXI2DVI_FALSE='#' -else - HAVE_TEXI2DVI_TRUE='#' - HAVE_TEXI2DVI_FALSE= -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 -$as_echo_n "checking for C compiler vendor... " >&6; } -if test "${ax_cv_c_compiler_vendor+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ax_cv_c_compiler_vendor=unknown - # note: don't check for gcc first since some other compilers define __GNUC__ - for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do - vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - -#if !($vencpp) - thisisanerror; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_compiler_vendor=`echo $ventest | cut -d: -f1`; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5 -$as_echo "$ax_cv_c_compiler_vendor" >&6; } - - - - - - -# Check whether --enable-portable-binary was given. -if test "${enable_portable_binary+set}" = set; then : - enableval=$enable_portable_binary; acx_maxopt_portable=$withval -else - acx_maxopt_portable=no -fi - - -# Try to determine "good" native compiler flags if none specified via CFLAGS -if test "$ac_test_CFLAGS" != "set"; then - CFLAGS="" - case $ax_cv_c_compiler_vendor in - dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" - if test "x$acx_maxopt_portable" = xno; then - CFLAGS="$CFLAGS -arch host" - fi;; - - sun) CFLAGS="-native -fast -xO5 -dalign" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS -xarch=generic" - fi;; - - hp) CFLAGS="+Oall +Optrs_ansi +DSnative" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS +DAportable" - fi;; - - ibm) if test "x$acx_maxopt_portable" = xno; then - xlc_opt="-qarch=auto -qtune=auto" - else - xlc_opt="-qtune=auto" - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $xlc_opt" >&5 -$as_echo_n "checking whether C compiler accepts $xlc_opt... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$xlc_opt" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="-O3 -qansialias -w $xlc_opt" -else - CFLAGS="-O3 -qansialias -w" - echo "******************************************************" - echo "* You seem to have the IBM C compiler. It is *" - echo "* recommended for best performance that you use: *" - echo "* *" - echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" - echo "* ^^^ ^^^ *" - echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" - echo "* CPU you have. (Set the CFLAGS environment var. *" - echo "* and re-run configure.) For more info, man cc. *" - echo "******************************************************" -fi - - ;; - - intel) CFLAGS="-O3 -ansi_alias" - if test "x$acx_maxopt_portable" = xno; then - icc_archflag=unknown - icc_flags="" - case $host_cpu in - i686*|x86_64*) - # icc accepts gcc assembly syntax, so these should work: - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 -$as_echo_n "checking for x86 cpuid 0 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_0+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 -$as_echo_n "checking for x86 cpuid 1 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_1+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_1=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *6a?:*[234]:*:*|*6[789b]?:*:*:*) icc_flags="-xK";; - *f3[347]:*:*:*|*f41347:*:*:*) icc_flags="-xP -xN -xW -xK";; - *f??:*:*:*) icc_flags="-xN -xW -xK";; - esac ;; - esac ;; - esac - if test "x$icc_flags" != x; then - for flag in $icc_flags; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 -$as_echo_n "checking whether C compiler accepts $flag... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$flag" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - icc_archflag=$flag; break -else - : -fi - - done - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icc architecture flag" >&5 -$as_echo_n "checking for icc architecture flag... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $icc_archflag" >&5 -$as_echo "$icc_archflag" >&6; } - if test "x$icc_archflag" != xunknown; then - CFLAGS="$CFLAGS $icc_archflag" - fi - fi - ;; - - gnu) - # default optimization flags for gcc on all systems - CFLAGS="-O3 -fomit-frame-pointer" - - # -malign-double for x86 systems - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -malign-double" >&5 -$as_echo_n "checking whether C compiler accepts -malign-double... " >&6; } -if test "${ax_cv_c_flags__malign_double+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ax_save_FLAGS=$CFLAGS - CFLAGS="-malign-double" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_flags__malign_double=yes -else - ax_cv_c_flags__malign_double=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -fi - -eval ax_check_compiler_flags=$ax_cv_c_flags__malign_double -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="$CFLAGS -malign-double" -else - : -fi - - - # -fstrict-aliasing for gcc-2.95+ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5 -$as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; } -if test "${ax_cv_c_flags__fstrict_aliasing+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ax_save_FLAGS=$CFLAGS - CFLAGS="-fstrict-aliasing" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_flags__fstrict_aliasing=yes -else - ax_cv_c_flags__fstrict_aliasing=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -fi - -eval ax_check_compiler_flags=$ax_cv_c_flags__fstrict_aliasing -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="$CFLAGS -fstrict-aliasing" -else - : -fi - - - # note that we enable "unsafe" fp optimization with other compilers, too - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -ffast-math" >&5 -$as_echo_n "checking whether C compiler accepts -ffast-math... " >&6; } -if test "${ax_cv_c_flags__ffast_math+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ax_save_FLAGS=$CFLAGS - CFLAGS="-ffast-math" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_flags__ffast_math=yes -else - ax_cv_c_flags__ffast_math=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -fi - -eval ax_check_compiler_flags=$ax_cv_c_flags__ffast_math -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="$CFLAGS -ffast-math" -else - : -fi - - - - - - -# Check whether --with-gcc-arch was given. -if test "${with_gcc_arch+set}" = set; then : - withval=$with_gcc_arch; ax_gcc_arch=$withval -else - ax_gcc_arch=yes -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 -$as_echo_n "checking for gcc architecture flag... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } -if test "${ax_cv_gcc_archflag+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -ax_cv_gcc_archflag="unknown" - -if test "$GCC" = yes; then - -if test "x$ax_gcc_arch" = xyes; then -ax_gcc_arch="" -if test "$cross_compiling" = no; then -case $host_cpu in - i[3456]86*|x86_64*) # use cpuid codes, in part from x86info-1.7 by D. Jones - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 -$as_echo_n "checking for x86 cpuid 0 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_0+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 -$as_echo_n "checking for x86 cpuid 1 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_1+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_1=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - case $ax_cv_gcc_x86_cpuid_0 in - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *5[48]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; - *5??:*:*:*) ax_gcc_arch=pentium ;; - *6[3456]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[01]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[234]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6[9d]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; - *6[78b]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6??:*:*:*) ax_gcc_arch=pentiumpro ;; - *f3[347]:*:*:*|*f41347:*:*:*) - case $host_cpu in - x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; - *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; - esac ;; - *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; - esac ;; - *:68747541:*:*) # AMD - case $ax_cv_gcc_x86_cpuid_1 in - *5[67]?:*:*:*) ax_gcc_arch=k6 ;; - *5[8d]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; - *5[9]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; - *60?:*:*:*) ax_gcc_arch=k7 ;; - *6[12]?:*:*:*) ax_gcc_arch="athlon k7" ;; - *6[34]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; - *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; - *6[68a]?:*:*:*) - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0x80000006 output" >&5 -$as_echo_n "checking for x86 cpuid 0x80000006 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_0x80000006+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0x80000006=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0x80000006, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0x80000006=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0x80000006=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0x80000006" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0x80000006" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - # L2 cache size - case $ax_cv_gcc_x86_cpuid_0x80000006 in - *:*:*[1-9a-f]??????:*) # (L2 = ecx >> 16) >= 256 - ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; - *) ax_gcc_arch="athlon-4 athlon k7" ;; - esac ;; - *f[4cef8b]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; - *f5?:*:*:*) ax_gcc_arch="opteron k8" ;; - *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; - *f??:*:*:*) ax_gcc_arch="k8" ;; - esac ;; - *:746e6543:*:*) # IDT - case $ax_cv_gcc_x86_cpuid_1 in - *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; - *58?:*:*:*) ax_gcc_arch=winchip2 ;; - *6[78]?:*:*:*) ax_gcc_arch=c3 ;; - *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; - esac ;; - esac - if test x"$ax_gcc_arch" = x; then # fallback - case $host_cpu in - i586*) ax_gcc_arch=pentium ;; - i686*) ax_gcc_arch=pentiumpro ;; - esac - fi - ;; - - sparc*) - # Extract the first word of "prtdiag", so it can be a program name with args. -set dummy prtdiag; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PRTDIAG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $PRTDIAG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PRTDIAG="$PRTDIAG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy="$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PRTDIAG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_PRTDIAG" && ac_cv_path_PRTDIAG="prtdiag" - ;; -esac -fi -PRTDIAG=$ac_cv_path_PRTDIAG -if test -n "$PRTDIAG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRTDIAG" >&5 -$as_echo "$PRTDIAG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` - cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters` - case $cputype in - *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; - *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; - *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; - *supersparc*|*tms390z5[05]*) ax_gcc_arch="supersparc v8" ;; - *hypersparc*|*rt62[056]*) ax_gcc_arch="hypersparc v8" ;; - *cypress*) ax_gcc_arch=cypress ;; - esac ;; - - alphaev5) ax_gcc_arch=ev5 ;; - alphaev56) ax_gcc_arch=ev56 ;; - alphapca56) ax_gcc_arch="pca56 ev56" ;; - alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; - alphaev6) ax_gcc_arch=ev6 ;; - alphaev67) ax_gcc_arch=ev67 ;; - alphaev68) ax_gcc_arch="ev68 ev67" ;; - alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; - alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; - alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; - - powerpc*) - cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` - cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'` - case $cputype in - *750*) ax_gcc_arch="750 G3" ;; - *740[0-9]*) ax_gcc_arch="$cputype 7400 G4" ;; - *74[4-5][0-9]*) ax_gcc_arch="$cputype 7450 G4" ;; - *74[0-9][0-9]*) ax_gcc_arch="$cputype G4" ;; - *970*) ax_gcc_arch="970 G5 power4";; - *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; - *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; - 603ev|8240) ax_gcc_arch="$cputype 603e 603";; - *) ax_gcc_arch=$cputype ;; - esac - ax_gcc_arch="$ax_gcc_arch powerpc" - ;; -esac -fi # not cross-compiling -fi # guess arch - -if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then -for arch in $ax_gcc_arch; do - if test "x$acx_maxopt_portable" = xyes; then # if we require portable code - flags="-mtune=$arch" - # -mcpu=$arch and m$arch generate nonportable code on every arch except - # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. - case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac - else - flags="-march=$arch -mcpu=$arch -m$arch" - fi - for flag in $flags; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 -$as_echo_n "checking whether C compiler accepts $flag... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$flag" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - ax_cv_gcc_archflag=$flag; break -else - : -fi - - done - test "x$ax_cv_gcc_archflag" = xunknown || break -done -fi - -fi # $GCC=yes - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 -$as_echo_n "checking for gcc architecture flag... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_archflag" >&5 -$as_echo "$ax_cv_gcc_archflag" >&6; } -if test "x$ax_cv_gcc_archflag" = xunknown; then - : -else - CFLAGS="$CFLAGS $ax_cv_gcc_archflag" -fi - - ;; - esac - - if test -z "$CFLAGS"; then - echo "" - echo "********************************************************" - echo "* WARNING: Don't know the best CFLAGS for this system *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" - echo "********************************************************" - echo "" - CFLAGS="-O3" - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 -$as_echo_n "checking whether C compiler accepts $CFLAGS... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$CFLAGS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - : -else - - echo "" - echo "********************************************************" - echo "* WARNING: The guessed CFLAGS don't seem to work with *" - echo "* your compiler. *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "********************************************************" - echo "" - CFLAGS="" - -fi - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking CFLAGS_WARN for maximum warnings" >&5 -$as_echo_n "checking CFLAGS_WARN for maximum warnings... " >&6; } -if test "${ac_cv_cflags_warn_all+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_cflags_warn_all="no, unknown" - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ac_save_CFLAGS="$CFLAGS" -for ac_arg in "-pedantic % -Wall" "-xstrconst % -v" "-std1 % -verbose -w0 -warnprotos" "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" "-ansi -ansiE % -fullwarn" "+ESlit % +w1" "-Xc % -pvctl,fullmsg" "-h conform % -h msglevel 2" # -do CFLAGS="$ac_save_CFLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_cflags_warn_all=`echo $ac_arg | sed -e 's,.*% *,,'` ; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done - CFLAGS="$ac_save_CFLAGS" - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags_warn_all" >&5 -$as_echo "$ac_cv_cflags_warn_all" >&6; } -case ".$ac_cv_cflags_warn_all" in - .ok|.ok,*) ;; - .|.no|.no,*) - ;; - *) - if echo " $CFLAGS_WARN " | grep " $ac_cv_cflags_warn_all " 2>&1 >/dev/null - then { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS_WARN does contain \$ac_cv_cflags_warn_all"; } >&5 - (: CFLAGS_WARN does contain $ac_cv_cflags_warn_all) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - else { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS_WARN=\"\$CFLAGS_WARN \$ac_cv_cflags_warn_all\""; } >&5 - (: CFLAGS_WARN="$CFLAGS_WARN $ac_cv_cflags_warn_all") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - CFLAGS_WARN="$CFLAGS_WARN $ac_cv_cflags_warn_all" - fi - ;; -esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if test "${ac_cv_c_const+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset cs; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_const=yes -else - ac_cv_c_const=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then - -$as_echo "#define const /**/" >>confdefs.h - -fi - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = x""yes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - - - -for ac_func in strtol -do : - ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol" -if test "x$ac_cv_func_strtol" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STRTOL 1 -_ACEOF - -fi -done - - - - -for ac_header in sys/resource.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/resource.h" "ac_cv_header_sys_resource_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_resource_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_RESOURCE_H 1 -_ACEOF - -$as_echo "#define CLOOG_RUSAGE /**/" >>confdefs.h - -fi - -done - - - - - -# Check whether --with-isl was given. -if test "${with_isl+set}" = set; then : - withval=$with_isl; -fi - -case "system" in -no|system|build|bundled) - -# Check whether --with-isl_prefix was given. -if test "${with_isl_prefix+set}" = set; then : - withval=$with_isl_prefix; -fi - - -# Check whether --with-isl_exec_prefix was given. -if test "${with_isl_exec_prefix+set}" = set; then : - withval=$with_isl_exec_prefix; -fi - -esac -case "build" in -no|system|build|bundled) - -# Check whether --with-isl_builddir was given. -if test "${with_isl_builddir+set}" = set; then : - withval=$with_isl_builddir; -fi - -esac -if test "x$with_isl_prefix" != "x" -a "x$with_isl_exec_prefix" = "x"; then - with_isl_exec_prefix=$with_isl_prefix -fi -if test "x$with_isl_prefix" != "x" -o "x$with_isl_exec_prefix" != "x"; then - if test "x$with_isl" != "x" -a "x$with_isl" != "xsystem"; then - as_fn_error "Setting $with_isl_prefix implies use of system isl" "$LINENO" 5 - fi - with_isl="system" -fi -if test "x$with_isl_builddir" != "x"; then - if test "x$with_isl" != "x" -a "x$with_isl" != "xbuild"; then - as_fn_error "Setting $with_isl_builddir implies use of build isl" "$LINENO" 5 - fi - with_isl="build" - isl_srcdir=`echo @abs_srcdir@ | $with_isl_builddir/config.status --file=-` - { $as_echo "$as_me:${as_lineno-$LINENO}: isl sources in $isl_srcdir" >&5 -$as_echo "$as_me: isl sources in $isl_srcdir" >&6;} -fi -case "$with_isl" in -no|system|build|bundled) - ;; -*) - if test -d $srcdir/.git -a \ - -d $srcdir/isl -a \ - ! -d $srcdir/isl/.git; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git repo detected, but submodule isl not initialized" >&5 -$as_echo "$as_me: WARNING: git repo detected, but submodule isl not initialized" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You may want to run" >&5 -$as_echo "$as_me: WARNING: You may want to run" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule init" >&5 -$as_echo "$as_me: WARNING: git submodule init" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule update" >&5 -$as_echo "$as_me: WARNING: git submodule update" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sh autogen.sh" >&5 -$as_echo "$as_me: WARNING: sh autogen.sh" >&2;} - fi - if test -f $srcdir/isl/configure -a "bundled" != "no"; then - with_isl="bundled" - else - with_isl="bundled" - fi - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which isl to use" >&5 -$as_echo_n "checking which isl to use... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_isl" >&5 -$as_echo "$with_isl" >&6; } - - -BITS="gmp" - - - - - -# Check whether --with-gmp was given. -if test "${with_gmp+set}" = set; then : - withval=$with_gmp; -fi - -case "system" in -system) - -# Check whether --with-gmp_prefix was given. -if test "${with_gmp_prefix+set}" = set; then : - withval=$with_gmp_prefix; -fi - - -# Check whether --with-gmp_exec_prefix was given. -if test "${with_gmp_exec_prefix+set}" = set; then : - withval=$with_gmp_exec_prefix; -fi - -esac -case "build" in -system) - -# Check whether --with-gmp_builddir was given. -if test "${with_gmp_builddir+set}" = set; then : - withval=$with_gmp_builddir; -fi - -esac -if test "x$with_gmp_prefix" != "x" -a "x$with_gmp_exec_prefix" = "x"; then - with_gmp_exec_prefix=$with_gmp_prefix -fi -if test "x$with_gmp_prefix" != "x" -o "x$with_gmp_exec_prefix" != "x"; then - if test "x$with_gmp" != "x" -a "x$with_gmp" != "xsystem"; then - as_fn_error "Setting $with_gmp_prefix implies use of system gmp" "$LINENO" 5 - fi - with_gmp="system" -fi -if test "x$with_gmp_builddir" != "x"; then - if test "x$with_gmp" != "x" -a "x$with_gmp" != "xbuild"; then - as_fn_error "Setting $with_gmp_builddir implies use of build gmp" "$LINENO" 5 - fi - with_gmp="build" - gmp_srcdir=`echo @abs_srcdir@ | $with_gmp_builddir/config.status --file=-` - { $as_echo "$as_me:${as_lineno-$LINENO}: gmp sources in $gmp_srcdir" >&5 -$as_echo "$as_me: gmp sources in $gmp_srcdir" >&6;} -fi -case "$with_gmp" in -system) - ;; -*) - if test -d $srcdir/.git -a \ - -d $srcdir/gmp -a \ - ! -d $srcdir/gmp/.git; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git repo detected, but submodule gmp not initialized" >&5 -$as_echo "$as_me: WARNING: git repo detected, but submodule gmp not initialized" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You may want to run" >&5 -$as_echo "$as_me: WARNING: You may want to run" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule init" >&5 -$as_echo "$as_me: WARNING: git submodule init" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule update" >&5 -$as_echo "$as_me: WARNING: git submodule update" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sh autogen.sh" >&5 -$as_echo "$as_me: WARNING: sh autogen.sh" >&2;} - fi - if test -f $srcdir/gmp/configure -a "system" != "no"; then - with_gmp="bundled" - else - with_gmp="system" - fi - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which gmp to use" >&5 -$as_echo_n "checking which gmp to use... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_gmp" >&5 -$as_echo "$with_gmp" >&6; } - - - -need_get_memory_functions=false -case "$with_gmp" in -system) - if test "x$with_gmp_prefix" != "x"; then - CPPFLAGS="-I$with_gmp_prefix/include $CPPFLAGS" - fi - - if test "$with_gmp_exec_prefix" != "yes" ; then - LDFLAGS="-L$with_gmp_exec_prefix/lib $LDFLAGS" - fi - - ac_fn_c_check_header_mongrel "$LINENO" "gmp.h" "ac_cv_header_gmp_h" "$ac_includes_default" -if test "x$ac_cv_header_gmp_h" = x""yes; then : - -else - as_fn_error "Can't find gmp headers." "$LINENO" 5 -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __gmpz_init in -lgmp" >&5 -$as_echo_n "checking for __gmpz_init in -lgmp... " >&6; } -if test "${ac_cv_lib_gmp___gmpz_init+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgmp $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char __gmpz_init (); -int -main () -{ -return __gmpz_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_gmp___gmpz_init=yes -else - ac_cv_lib_gmp___gmpz_init=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gmp___gmpz_init" >&5 -$as_echo "$ac_cv_lib_gmp___gmpz_init" >&6; } -if test "x$ac_cv_lib_gmp___gmpz_init" = x""yes; then : - LIBS="$LIBS -lgmp" -else - as_fn_error "Can't find gmp library." "$LINENO" 5 -fi - - ac_fn_c_check_decl "$LINENO" "mp_get_memory_functions" "ac_cv_have_decl_mp_get_memory_functions" "#include -" -if test "x$ac_cv_have_decl_mp_get_memory_functions" = x""yes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_MP_GET_MEMORY_FUNCTIONS $ac_have_decl -_ACEOF -if test $ac_have_decl = 1; then : - -else - - need_get_memory_functions=true - -fi - - ;; -esac - if test x$need_get_memory_functions = xtrue; then - NEED_GET_MEMORY_FUNCTIONS_TRUE= - NEED_GET_MEMORY_FUNCTIONS_FALSE='#' -else - NEED_GET_MEMORY_FUNCTIONS_TRUE='#' - NEED_GET_MEMORY_FUNCTIONS_FALSE= -fi - - - - - - -case "$with_isl" in -bundled) - ISL_CPPFLAGS="-I$srcdir/isl/include -Iisl/include" - ;; -build) - ISL_CPPFLAGS="-I$isl_srcdir/include -I$with_isl_builddir/include" - ISL_LIBS="$with_isl_builddir/libisl.la" - ;; -system) - if test "x$with_isl_prefix" != "x"; then - ISL_CPPFLAGS="-I$with_isl_prefix/include" - fi - if test "x$with_isl_exec_prefix" != "x"; then - ISL_LDFLAGS="-L$with_isl_exec_prefix/lib" - fi - ISL_LIBS="-lisl" -esac - if test $with_isl = bundled; then - BUNDLED_ISL_TRUE= - BUNDLED_ISL_FALSE='#' -else - BUNDLED_ISL_TRUE='#' - BUNDLED_ISL_FALSE= -fi - - if test $with_isl = no; then - NO_ISL_TRUE= - NO_ISL_FALSE='#' -else - NO_ISL_TRUE='#' - NO_ISL_FALSE= -fi - - - - -$as_echo "#define CLOOG_INT_GMP 1" >>confdefs.h - - - -if test -f $srcdir/.git/HEAD; then - GIT_INDEX="\$(top_srcdir)/.git/index" -fi - - - - - - - - - - - - - - - - - -PACKAGE_NAME="cloog-isl" -PACKAGE_CFLAGS="-DCLOOG_INT_GMP=1" - -# we need the expanded forms... -test "x$prefix" = xNONE && prefix=$ac_default_prefix -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig libname" >&5 -$as_echo_n "checking our pkgconfig libname... " >&6; } -test ".$ax_create_pkgconfig_libname" != "." || \ -ax_create_pkgconfig_libname="${PACKAGE_NAME}" -test ".$ax_create_pkgconfig_libname" != "." || \ -ax_create_pkgconfig_libname="$PACKAGE" -ax_create_pkgconfig_libname=`eval echo "$ax_create_pkgconfig_libname"` -ax_create_pkgconfig_libname=`eval echo "$ax_create_pkgconfig_libname"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_libname" >&5 -$as_echo "$ax_create_pkgconfig_libname" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig version" >&5 -$as_echo_n "checking our pkgconfig version... " >&6; } -test ".$ax_create_pkgconfig_version" != "." || \ -ax_create_pkgconfig_version="${PACKAGE_VERSION}" -test ".$ax_create_pkgconfig_version" != "." || \ -ax_create_pkgconfig_version="$VERSION" -ax_create_pkgconfig_version=`eval echo "$ax_create_pkgconfig_version"` -ax_create_pkgconfig_version=`eval echo "$ax_create_pkgconfig_version"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_version" >&5 -$as_echo "$ax_create_pkgconfig_version" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig_libdir" >&5 -$as_echo_n "checking our pkgconfig_libdir... " >&6; } -test ".$pkgconfig_libdir" = "." && \ -pkgconfig_libdir='${libdir}/pkgconfig' -ax_create_pkgconfig_libdir=`eval echo "$pkgconfig_libdir"` -ax_create_pkgconfig_libdir=`eval echo "$ax_create_pkgconfig_libdir"` -ax_create_pkgconfig_libdir=`eval echo "$ax_create_pkgconfig_libdir"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkgconfig_libdir" >&5 -$as_echo "$pkgconfig_libdir" >&6; } -test "$pkgconfig_libdir" != "$ax_create_pkgconfig_libdir" && ( -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: expanded our pkgconfig_libdir... $ax_create_pkgconfig_libdir" >&5 -$as_echo "expanded our pkgconfig_libdir... $ax_create_pkgconfig_libdir" >&6; }) - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig_libfile" >&5 -$as_echo_n "checking our pkgconfig_libfile... " >&6; } -test ".$pkgconfig_libfile" != "." || \ -pkgconfig_libfile="$ax_create_pkgconfig_libname.pc" -ax_create_pkgconfig_libfile=`eval echo "$pkgconfig_libfile"` -ax_create_pkgconfig_libfile=`eval echo "$ax_create_pkgconfig_libfile"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkgconfig_libfile" >&5 -$as_echo "$pkgconfig_libfile" >&6; } -test "$pkgconfig_libfile" != "$ax_create_pkgconfig_libfile" && ( -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: expanded our pkgconfig_libfile... $ax_create_pkgconfig_libfile" >&5 -$as_echo "expanded our pkgconfig_libfile... $ax_create_pkgconfig_libfile" >&6; }) - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our package / suffix" >&5 -$as_echo_n "checking our package / suffix... " >&6; } -ax_create_pkgconfig_suffix="$program_suffix" -test ".$ax_create_pkgconfig_suffix" != .NONE || ax_create_pkgconfig_suffix="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${PACKAGE_NAME} / ${ax_create_pkgconfig_suffix}" >&5 -$as_echo "${PACKAGE_NAME} / ${ax_create_pkgconfig_suffix}" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig description" >&5 -$as_echo_n "checking our pkgconfig description... " >&6; } -ax_create_pkgconfig_description="$PACKAGE_SUMMARY" -test ".$ax_create_pkgconfig_description" != "." || \ -ax_create_pkgconfig_description="$ax_create_pkgconfig_libname Library" -ax_create_pkgconfig_description=`eval echo "$ax_create_pkgconfig_description"` -ax_create_pkgconfig_description=`eval echo "$ax_create_pkgconfig_description"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_description" >&5 -$as_echo "$ax_create_pkgconfig_description" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig requires" >&5 -$as_echo_n "checking our pkgconfig requires... " >&6; } -ax_create_pkgconfig_requires="$PACKAGE_REQUIRES" -ax_create_pkgconfig_requires=`eval echo "$ax_create_pkgconfig_requires"` -ax_create_pkgconfig_requires=`eval echo "$ax_create_pkgconfig_requires"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_requires" >&5 -$as_echo "$ax_create_pkgconfig_requires" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig ext libs" >&5 -$as_echo_n "checking our pkgconfig ext libs... " >&6; } -ax_create_pkgconfig_pkglibs="$PACKAGE_LIBS" -test ".$ax_create_pkgconfig_pkglibs" != "." || ax_create_pkgconfig_pkglibs="-l$ax_create_pkgconfig_libname" -ax_create_pkgconfig_libs="$ax_create_pkgconfig_pkglibs $LIBS" -ax_create_pkgconfig_libs=`eval echo "$ax_create_pkgconfig_libs"` -ax_create_pkgconfig_libs=`eval echo "$ax_create_pkgconfig_libs"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_libs" >&5 -$as_echo "$ax_create_pkgconfig_libs" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig cppflags" >&5 -$as_echo_n "checking our pkgconfig cppflags... " >&6; } -ax_create_pkgconfig_cppflags="$CPPFLAGS $PACKAGE_CFLAGS" -ax_create_pkgconfig_cppflags=`eval echo "$ax_create_pkgconfig_cppflags"` -ax_create_pkgconfig_cppflags=`eval echo "$ax_create_pkgconfig_cppflags"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_cppflags" >&5 -$as_echo "$ax_create_pkgconfig_cppflags" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig ldflags" >&5 -$as_echo_n "checking our pkgconfig ldflags... " >&6; } -ax_create_pkgconfig_ldflags="$LDFLAGS $PACKAGE_LDFLAGS" -ax_create_pkgconfig_ldflags=`eval echo "$ax_create_pkgconfig_ldflags"` -ax_create_pkgconfig_ldflags=`eval echo "$ax_create_pkgconfig_ldflags"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_ldflags" >&5 -$as_echo "$ax_create_pkgconfig_ldflags" >&6; } - -test ".$ax_create_pkgconfig_generate" != "." || \ -ax_create_pkgconfig_generate="$ax_create_pkgconfig_libname.pc" -ax_create_pkgconfig_generate=`eval echo "$ax_create_pkgconfig_generate"` -ax_create_pkgconfig_generate=`eval echo "$ax_create_pkgconfig_generate"` -test "$pkgconfig_libfile" != "$ax_create_pkgconfig_generate" && ( -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: generate the pkgconfig later... $ax_create_pkgconfig_generate" >&5 -$as_echo "generate the pkgconfig later... $ax_create_pkgconfig_generate" >&6; }) - -if test ".$ax_create_pkgconfig_src_libdir" = "." ; then -ax_create_pkgconfig_src_libdir=`pwd` -ax_create_pkgconfig_src_libdir=`$as_dirname -- "$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" || -$as_expr X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(//\)[^/]' \| \ - X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(//\)$' \| \ - X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` -test ! -d $ax_create_pkgconfig_src_libdir/src || \ -ax_create_pkgconfig_src_libdir="$ax_create_pkgconfig_src_libdir/src" -case ".$objdir" in -*libs) ax_create_pkgconfig_src_libdir="$ax_create_pkgconfig_src_libdir/$objdir" ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: noninstalled pkgconfig -L $ax_create_pkgconfig_src_libdir" >&5 -$as_echo "noninstalled pkgconfig -L $ax_create_pkgconfig_src_libdir" >&6; } -fi - -if test ".$ax_create_pkgconfig_src_headers" = "." ; then -ax_create_pkgconfig_src_headers=`pwd` -v="$ac_top_srcdir" ; -test ".$v" != "." || v="$ax_spec_dir" -test ".$v" != "." || v="$srcdir" -case "$v" in /*) ax_create_pkgconfig_src_headers="" ;; esac -ax_create_pkgconfig_src_headers=`$as_dirname -- "$ax_create_pkgconfig_src_headers/$v/x" || -$as_expr X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(//\)[^/]' \| \ - X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(//\)$' \| \ - X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ax_create_pkgconfig_src_headers/$v/x" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` -test ! -d $ax_create_pkgconfig_src_headers/include || \ -ax_create_pkgconfig_src_headers="$ax_create_pkgconfig_src_headers/include" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: noninstalled pkgconfig -I $ax_create_pkgconfig_src_headers" >&5 -$as_echo "noninstalled pkgconfig -I $ax_create_pkgconfig_src_headers" >&6; } -fi - - -ac_config_commands="$ac_config_commands $ax_create_pkgconfig_generate" - - -ac_config_files="$ac_config_files Makefile test/Makefile" - -ac_config_files="$ac_config_files autoconf/Doxyfile" - -ac_config_files="$ac_config_files doc/Makefile" - -ac_config_files="$ac_config_files source/version.c" - -ac_config_files="$ac_config_files include/cloog/version.h" - -ac_config_files="$ac_config_files genversion.sh" - -ac_config_commands="$ac_config_commands version.h" - -ac_config_commands="$ac_config_commands doc/gitversion.texi" - -if test $with_isl = bundled; then - - -subdirs="$subdirs isl" - -fi - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -:mline -/\\$/{ - N - s,\\\n,, - b mline -} -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${HAVE_TEXI2DVI_TRUE}" && test -z "${HAVE_TEXI2DVI_FALSE}"; then - as_fn_error "conditional \"HAVE_TEXI2DVI\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${NEED_GET_MEMORY_FUNCTIONS_TRUE}" && test -z "${NEED_GET_MEMORY_FUNCTIONS_FALSE}"; then - as_fn_error "conditional \"NEED_GET_MEMORY_FUNCTIONS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUNDLED_ISL_TRUE}" && test -z "${BUNDLED_ISL_FALSE}"; then - as_fn_error "conditional \"BUNDLED_ISL\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${NO_ISL_TRUE}" && test -z "${NO_ISL_FALSE}"; then - as_fn_error "conditional \"NO_ISL\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by cloog $as_me 0.16.3, which was -generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Configuration commands: -$config_commands - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -cloog config.status 0.16.3 -configured by $0, generated by GNU Autoconf 2.65, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2009 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' -macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' -enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' -enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' -pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' -SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' -ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' -host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' -host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' -host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' -build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' -build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' -build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' -SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' -Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' -GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' -EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' -FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' -LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' -NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' -LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' -ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' -exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' -lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' -reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' -AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' -STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' -RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' -lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' -CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' -compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' -GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' -objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' -need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' -LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' -OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' -libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' -module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' -fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' -need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' -version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' -runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' -libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' -soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' -install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' -finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' -old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' -striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in SHELL \ -ECHO \ -SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -AR \ -AR_FLAGS \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_wl \ -lt_prog_compiler_pic \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ -hardcode_libdir_separator \ -fix_srcfile_path \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -install_override_mode \ -finish_eval \ -old_striplib \ -striplib; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - - -ax_create_pkgconfig_generate="$ax_create_pkgconfig_generate" -pkgconfig_prefix='$prefix' -pkgconfig_execprefix='$exec_prefix' -pkgconfig_bindir='$bindir' -pkgconfig_libdir='$libdir' -pkgconfig_includedir='$includedir' -pkgconfig_datarootdir='$datarootdir' -pkgconfig_datadir='$datadir' -pkgconfig_sysconfdir='$sysconfdir' -pkgconfig_suffix='$ax_create_pkgconfig_suffix' -pkgconfig_package='$PACKAGE_NAME' -pkgconfig_libname='$ax_create_pkgconfig_libname' -pkgconfig_description='$ax_create_pkgconfig_description' -pkgconfig_version='$ax_create_pkgconfig_version' -pkgconfig_requires='$ax_create_pkgconfig_requires' -pkgconfig_libs='$ax_create_pkgconfig_libs' -pkgconfig_ldflags='$ax_create_pkgconfig_ldflags' -pkgconfig_cppflags='$ax_create_pkgconfig_cppflags' -pkgconfig_src_libdir='$ax_create_pkgconfig_src_libdir' -pkgconfig_src_headers='$ax_create_pkgconfig_src_headers' - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "$ax_create_pkgconfig_generate") CONFIG_COMMANDS="$CONFIG_COMMANDS $ax_create_pkgconfig_generate" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; - "autoconf/Doxyfile") CONFIG_FILES="$CONFIG_FILES autoconf/Doxyfile" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "source/version.c") CONFIG_FILES="$CONFIG_FILES source/version.c" ;; - "include/cloog/version.h") CONFIG_FILES="$CONFIG_FILES include/cloog/version.h" ;; - "genversion.sh") CONFIG_FILES="$CONFIG_FILES genversion.sh" ;; - "version.h") CONFIG_COMMANDS="$CONFIG_COMMANDS version.h" ;; - "doc/gitversion.texi") CONFIG_COMMANDS="$CONFIG_COMMANDS doc/gitversion.texi" ;; - - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - ;; - - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="" - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that protects backslashes. -ECHO=$lt_ECHO - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=$lock_old_archive_extraction - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Permission mode override for installation of shared libraries. -install_override_mode=$lt_install_override_mode - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac - - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - ;; - "$ax_create_pkgconfig_generate":C) -pkgconfig_generate="$ax_create_pkgconfig_generate" -if test ! -f "$pkgconfig_generate.in" -then generate="true" -elif grep ' generated by configure ' $pkgconfig_generate.in >/dev/null -then generate="true" -else generate="false"; -fi -if $generate ; then -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $pkgconfig_generate.in" >&5 -$as_echo "$as_me: creating $pkgconfig_generate.in" >&6;} -cat > $pkgconfig_generate.in <&5 -$as_echo "$as_me: creating $pkgconfig_generate" >&6;} -cat >conftest.sed < $pkgconfig_generate -if test ! -s $pkgconfig_generate ; then - as_fn_error "$pkgconfig_generate is empty" "$LINENO" 5 -fi ; rm conftest.sed # DONE generate $pkgconfig_generate -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.pc/'` -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $pkgconfig_uninstalled" >&5 -$as_echo "$as_me: creating $pkgconfig_uninstalled" >&6;} -cat >conftest.sed < $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - as_fn_error "$pkgconfig_uninstalled is empty" "$LINENO" 5 -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled - pkgconfig_requires_add=`echo ${pkgconfig_requires}` -if test ".$pkgconfig_requires_add" != "." ; then - pkgconfig_requires_add="pkg-config $pkgconfig_requires_add" - else pkgconfig_requires_add=":" ; fi -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.sh/'` -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $pkgconfig_uninstalled" >&5 -$as_echo "$as_me: creating $pkgconfig_uninstalled" >&6;} -cat >conftest.sed <Name:>for option\\; do case \"\$option\" in --list-all|--name) echo > -s>Description: *>\\;\\; --help) pkg-config --help \\; echo Buildscript Of > -s>Version: *>\\;\\; --modversion|--version) echo > -s>Requires:>\\;\\; --requires) echo $pkgconfig_requires_add> -s>Libs: *>\\;\\; --libs) echo > -s>Cflags: *>\\;\\; --cflags) echo > -/--libs)/a\\ - $pkgconfig_requires_add -/--cflags)/a\\ - $pkgconfig_requires_add\\ -;; --variable=*) eval echo '\$'\`echo \$option | sed -e 's/.*=//'\`\\ -;; --uninstalled) exit 0 \\ -;; *) ;; esac done -AXEOF -sed -f conftest.sed $pkgconfig_generate.in > $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - as_fn_error "$pkgconfig_uninstalled is empty" "$LINENO" 5 -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled - ;; - "genversion.sh":F) chmod +x genversion.sh ;; - "version.h":C) echo '#define CLOOG_HEAD "'`./genversion.sh`'"' > version.h ;; - "doc/gitversion.texi":C) echo '@set VERSION '`./genversion.sh`'' > doc/gitversion.texi ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - - ac_configure_args="$ac_configure_args $cloog_configure_args" - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit $? -fi - -# -# CONFIG_SUBDIRS section. -# -if test "$no_recursion" != yes; then - - # Remove --cache-file, --srcdir, and --disable-option-checking arguments - # so they do not pile up. - ac_sub_configure_args= - ac_prev= - eval "set x $ac_configure_args" - shift - for ac_arg - do - if test -n "$ac_prev"; then - ac_prev= - continue - fi - case $ac_arg in - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ - | --c=*) - ;; - --config-cache | -C) - ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - ;; - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - ;; - --disable-option-checking) - ;; - *) - case $ac_arg in - *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append ac_sub_configure_args " '$ac_arg'" ;; - esac - done - - # Always prepend --prefix to ensure using the same prefix - # in subdir configurations. - ac_arg="--prefix=$prefix" - case $ac_arg in - *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" - - # Pass --silent - if test "$silent" = yes; then - ac_sub_configure_args="--silent $ac_sub_configure_args" - fi - - # Always prepend --disable-option-checking to silence warnings, since - # different subdirs can have different --enable and --with options. - ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" - - ac_popdir=`pwd` - for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue - - # Do not complain, so a configure script can configure whichever - # parts of a large source tree are present. - test -d "$srcdir/$ac_dir" || continue - - ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" - $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 - $as_echo "$ac_msg" >&6 - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - cd "$ac_dir" - - # Check for guested configure; otherwise get Cygnus style configure. - if test -f "$ac_srcdir/configure.gnu"; then - ac_sub_configure=$ac_srcdir/configure.gnu - elif test -f "$ac_srcdir/configure"; then - ac_sub_configure=$ac_srcdir/configure - elif test -f "$ac_srcdir/configure.in"; then - # This should be Cygnus configure. - ac_sub_configure=$ac_aux_dir/configure - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 -$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} - ac_sub_configure= - fi - - # The recursion is here. - if test -n "$ac_sub_configure"; then - # Make the cache file name correct relative to the subdirectory. - case $cache_file in - [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; - *) # Relative name. - ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 -$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} - # The eval makes quoting arguments work. - eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ - --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || - as_fn_error "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 - fi - - cd "$ac_popdir" - done -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - - -echo " /*-----------------------------------------------*" -echo " * CLooG configuration is OK *" -echo " *-----------------------------------------------*/" -echo "It appears that your system is OK to start CLooG compilation. You need" -echo "now to type \"make\". After compilation, you should check CLooG by typing" -echo "\"make check\". If no problem occur, you can type \"make uninstall\" if" -echo "you are upgrading an old version. Lastly type \"make install\" to install" -echo "CLooG on your system (log as root if necessary)." diff --git a/cloog-0.16.3/configure.ac b/cloog-0.16.3/configure.ac deleted file mode 100644 index 053685a..0000000 --- a/cloog-0.16.3/configure.ac +++ /dev/null @@ -1,222 +0,0 @@ - -dnl /**-------------------------------------------------------------------** -dnl ** CLooG ** -dnl **-------------------------------------------------------------------** -dnl ** configure.ac ** -dnl **-------------------------------------------------------------------** -dnl ** First version: august 7th 2002 ** -dnl **-------------------------------------------------------------------**/ -dnl -dnl Input file for autoconf to build a configuration shellscript. -dnl To build the configure script from the CLooG's top-level directory, use -dnl autoconf -l autoconf autoconf/configure.in > configure -dnl if it doesn't work (invalid option -l) try -I instead -dnl autoconf -I autoconf autoconf/configure.in > configure - -dnl /************************************************************************** -dnl * CLooG : the Chunky Loop Generator (experimental) * -dnl *************************************************************************** -dnl * * -dnl * Copyright (C) 2001 Cedric Bastoul * -dnl * * -dnl * This library is free software; you can redistribute it and/or * -dnl * modify it under the terms of the GNU Lesser General Public * -dnl * License as published by the Free Software Foundation; either * -dnl * version 2.1 of the License, or (at your option) any later version. * -dnl * * -dnl * This library is distributed in the hope that it will be useful, * -dnl * but WITHOUT ANY WARRANTY; without even the implied warranty of * -dnl * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -dnl * Lesser General Public License for more details. * -dnl * * -dnl * You should have received a copy of the GNU Lesser General Public * -dnl * License along with this library; if not, write to the Free Software * -dnl * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -dnl * Boston, MA 02110-1301 USA * -dnl * * -dnl * CLooG, the Chunky Loop Generator * -dnl * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -dnl * * -dnl ***************************************************************************/ - -m4_define([version_major], [0]) -m4_define([version_minor], [16]) -m4_define([version_revision], [3]) - -AC_PREREQ(2.53) -AC_INIT([cloog], [version_major.version_minor.version_revision], - [cloog-development@googlegroups.com]) -AC_CONFIG_SRCDIR(source/cloog.c) -AC_CONFIG_AUX_DIR(autoconf) -AC_CONFIG_MACRO_DIR([m4]) - -VERSION_MAJOR=version_major -VERSION_MINOR=version_minor -VERSION_REVISION=version_revision -AC_SUBST(versioninfo) -versioninfo=2:0:0 - -AM_INIT_AUTOMAKE([foreign]) -m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) - -dnl /************************************************************************** -dnl * Checking * -dnl **************************************************************************/ - -dnl Checks for programs. -AC_PROG_CC -AC_PROG_LN_S -AC_PROG_MAKE_SET -AC_CHECK_PROG(CD, cd) -dnl Configure needs an empty install.sh file with this, i HATE that... -AC_PROG_INSTALL -AC_PROG_LIBTOOL -AC_CHECK_PROG(TEXI2DVI, texi2dvi, texi2dvi, []) -AM_CONDITIONAL(HAVE_TEXI2DVI, test -n "$TEXI2DVI") - -AX_CC_MAXOPT -AC_SUBST(CFLAGS_WARN) -AX_CFLAGS_WARN_ALL(CFLAGS_WARN) - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_SIZE_T - - - -dnl Checks for header files. -AC_HEADER_STDC - - -dnl Checks for library functions. -AC_CHECK_FUNCS(strtol) - - -dnl /************************************************************************** -dnl * Option setting * -dnl **************************************************************************/ - -AC_CHECK_HEADERS([sys/resource.h], - [AC_DEFINE([CLOOG_RUSAGE], [], [Print time required to generate code])]) - -AX_SUBMODULE(isl,no|system|build|bundled,bundled) -BITS="gmp" - -dnl /************************************************************************** -dnl * Where is GMP? * -dnl **************************************************************************/ - -AX_SUBMODULE(gmp,system,system) - -need_get_memory_functions=false -case "$with_gmp" in -system) - if test "x$with_gmp_prefix" != "x"; then - CPPFLAGS="-I$with_gmp_prefix/include $CPPFLAGS" - fi - - if test "$with_gmp_exec_prefix" != "yes" ; then - LDFLAGS="-L$with_gmp_exec_prefix/lib $LDFLAGS" - fi - - AC_CHECK_HEADER(gmp.h, - [], - [AC_MSG_ERROR(Can't find gmp headers.)]) - AC_CHECK_LIB(gmp, - __gmpz_init, - [LIBS="$LIBS -lgmp"], - [AC_MSG_ERROR(Can't find gmp library.)]) - AC_CHECK_DECLS(mp_get_memory_functions,[],[ - need_get_memory_functions=true - ],[#include ]) - ;; -esac -AM_CONDITIONAL(NEED_GET_MEMORY_FUNCTIONS, - test x$need_get_memory_functions = xtrue) - -dnl /************************************************************************** -dnl * Where is isl? * -dnl **************************************************************************/ - -AC_SUBST(ISL_CPPFLAGS) -AC_SUBST(ISL_LDFLAGS) -AC_SUBST(ISL_LIBS) -case "$with_isl" in -bundled) - ISL_CPPFLAGS="-I$srcdir/isl/include -Iisl/include" - ;; -build) - ISL_CPPFLAGS="-I$isl_srcdir/include -I$with_isl_builddir/include" - ISL_LIBS="$with_isl_builddir/libisl.la" - ;; -system) - if test "x$with_isl_prefix" != "x"; then - ISL_CPPFLAGS="-I$with_isl_prefix/include" - fi - if test "x$with_isl_exec_prefix" != "x"; then - ISL_LDFLAGS="-L$with_isl_exec_prefix/lib" - fi - ISL_LIBS="-lisl" -esac -AM_CONDITIONAL(BUNDLED_ISL, test $with_isl = bundled) -AM_CONDITIONAL(NO_ISL, test $with_isl = no) - - -AC_DEFINE([CLOOG_INT_GMP], 1, [Use arbitrary precision integers]) - -AC_SUBST(GIT_INDEX) -if test -f $srcdir/.git/HEAD; then - GIT_INDEX="\$(top_srcdir)/.git/index" -fi - - -dnl /************************************************************************** -dnl * Substitutions * -dnl **************************************************************************/ - - -dnl Substitutions to do in Makefile.in. -AC_SUBST(CC) -AC_SUBST(LN_S) - -AC_SUBST(prefix) -AC_SUBST(exec_prefix) -AC_SUBST(INSTALL) - -AC_SUBST(BITS) - -AC_SUBST(VERSION_MAJOR) -AC_SUBST(VERSION_MINOR) -AC_SUBST(VERSION_REVISION) - -PACKAGE_NAME="cloog-isl" -PACKAGE_CFLAGS="-DCLOOG_INT_GMP=1" -AX_CREATE_PKGCONFIG_INFO - -AC_CONFIG_FILES(Makefile test/Makefile) -AC_CONFIG_FILES(autoconf/Doxyfile) -AC_CONFIG_FILES(doc/Makefile) -AC_CONFIG_FILES(source/version.c) -AC_CONFIG_FILES(include/cloog/version.h) -AC_CONFIG_FILES([genversion.sh], [chmod +x genversion.sh]) -AC_CONFIG_COMMANDS([version.h], - [echo '#define CLOOG_HEAD "'`./genversion.sh`'"' > version.h]) -AC_CONFIG_COMMANDS([doc/gitversion.texi], - [echo '@set VERSION '`./genversion.sh`'' > doc/gitversion.texi]) -if test $with_isl = bundled; then - AC_CONFIG_SUBDIRS(isl) -fi -AC_CONFIG_COMMANDS_POST([ - ac_configure_args="$ac_configure_args $cloog_configure_args" -]) -AC_OUTPUT - - -echo " /*-----------------------------------------------*" -echo " * CLooG configuration is OK *" -echo " *-----------------------------------------------*/" -echo "It appears that your system is OK to start CLooG compilation. You need" -echo "now to type \"make\". After compilation, you should check CLooG by typing" -echo "\"make check\". If no problem occur, you can type \"make uninstall\" if" -echo "you are upgrading an old version. Lastly type \"make install\" to install" -echo "CLooG on your system (log as root if necessary)." diff --git a/cloog-0.16.3/doc/Makefile.am b/cloog-0.16.3/doc/Makefile.am deleted file mode 100644 index 160dfd1..0000000 --- a/cloog-0.16.3/doc/Makefile.am +++ /dev/null @@ -1,7 +0,0 @@ -if HAVE_TEXI2DVI -cloog.pdf: cloog.texi gitversion.texi - $(TEXI2DVI) --pdf $< -endif - -gitversion.texi: @GIT_INDEX@ - echo '@set VERSION '`$(top_builddir)/genversion.sh`'' > $@ diff --git a/cloog-0.16.3/doc/Makefile.in b/cloog-0.16.3/doc/Makefile.in deleted file mode 100644 index 91b9aa5..0000000 --- a/cloog-0.16.3/doc/Makefile.in +++ /dev/null @@ -1,383 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = doc -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in TODO -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/ax_submodule.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BITS = @BITS@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CD = @CD@ -CFLAGS = @CFLAGS@ -CFLAGS_WARN = @CFLAGS_WARN@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIT_INDEX = @GIT_INDEX@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -ISL_CPPFLAGS = @ISL_CPPFLAGS@ -ISL_LDFLAGS = @ISL_LDFLAGS@ -ISL_LIBS = @ISL_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TEXI2DVI = @TEXI2DVI@ -VERSION = @VERSION@ -VERSION_MAJOR = @VERSION_MAJOR@ -VERSION_MINOR = @VERSION_MINOR@ -VERSION_REVISION = @VERSION_REVISION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfig_libdir = @pkgconfig_libdir@ -pkgconfig_libfile = @pkgconfig_libfile@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -subdirs = @subdirs@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -versioninfo = @versioninfo@ -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign doc/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - -@HAVE_TEXI2DVI_TRUE@cloog.pdf: cloog.texi gitversion.texi -@HAVE_TEXI2DVI_TRUE@ $(TEXI2DVI) --pdf $< - -gitversion.texi: @GIT_INDEX@ - echo '@set VERSION '`$(top_builddir)/genversion.sh`'' > $@ - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.16.3/doc/TODO b/cloog-0.16.3/doc/TODO deleted file mode 100644 index 152c82d..0000000 --- a/cloog-0.16.3/doc/TODO +++ /dev/null @@ -1,58 +0,0 @@ -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** The Chunky Loop Generator ** -# **-------------------------------------------------------------------** -# ** First version of this file: april 29th 2005 ** -# **-------------------------------------------------------------------**/ -# - -This file is mainly for the authors, in order to put ideas, requests, and -work-in-progress notes. - -# **-------------------------------------------------------------------** -# ** I. Requested features ** -# **-------------------------------------------------------------------**/ - -1. GMP !!! (LooPo Team). -DOOOOOOOOOOOOOOOOOOOOOOOOONE !!!!!!!!!!!!!!!!! - -2. Set the statement prefix (Michael Classen). - -3. Do not fuse the iterators/scattering dimension names lists (Hadda Cheroun). -DOOOOOOOOOOOOOOOOOOOOOOOOONE !!!!!!!!!!!!!!!!! - -4. Exploit URUK transformation properties (WRAP-IT Team). -DOOOOOOOOOOOOOOOOOOOOOOOOONE !!!!!!!!!!!!!!!!! - - -# **-------------------------------------------------------------------** -# ** II. Known bugs ** -# **-------------------------------------------------------------------**/ - -1. Lead to segfault : -cloog ./test/daegon_lu_osp.cloog -f 3 -l 6 -nobacktrack -override -(while every other -l values do not !) -DOOOOOOOOOOOOOOOOOOOOOOOOONE !!!!!!!!!!!!!!!!! - -2. -strides gives bad result for a dreamup or interpolation-duration file in -test/non_optimal (I don't remember which one) - -3. Various configure problems (check Sylvain Girbal mails in the mailbox !). -DOOOOOOOOOOOOOOOOOOOOOOOOONE !!!!!!!!!!!!!!!!! - -4. With GMP, try test/emploi.cloog (with valgrind): a memory leak... -DOOOOOOOOOOOOOOOOOOOOOOOOONE !!!!!!!!!!!!!!!!! - -5. With GMP, option -cpp do not write all the statement internal stuff -(e.g., S1(,,) ; instead of S1(i,j,k) ;). -DOOOOOOOOOOOOOOOOOOOOOOOOONE !!!!!!!!!!!!!!!!! - -# **-------------------------------------------------------------------** -# ** III. Various notes ** -# **-------------------------------------------------------------------**/ - -Kill the cat. - - diff --git a/cloog-0.16.3/doc/cloog.pdf b/cloog-0.16.3/doc/cloog.pdf deleted file mode 100644 index 2f027933b65ae4b350ceab6bc32094b2e5da94e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321550 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∾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 diff --git a/cloog-0.16.3/doc/cloog.texi b/cloog-0.16.3/doc/cloog.texi deleted file mode 100644 index 8fbc1dc..0000000 --- a/cloog-0.16.3/doc/cloog.texi +++ /dev/null @@ -1,2542 +0,0 @@ -\input texinfo -@c % -@c % /**-----------------------------------------------------------------** -@c % ** CLooG ** -@c % **-----------------------------------------------------------------** -@c % ** cloog.texi ** -@c % **-----------------------------------------------------------------** -@c % ** First version: july 6th 2002 ** -@c % **-----------------------------------------------------------------**/ -@c % -@c % release 1.0: September 17th 2002 -@c % release 1.1: December 5th 2002 -@c % release 1.2: April 22th 2003 -@c % release 2.0: November 21th 2005 (and now in texinfo instead of LaTeX) -@c % release 2.1: October 15th 2007 -@c % -@c %/************************************************************************** -@c % * CLooG : the Chunky Loop Generator (experimental) * -@c % **************************************************************************/ -@c %/* CAUTION: the English used is probably the worst you ever read, please -@c % * feel free to correct and improve it ! -@c % */ - -@c %\textit{"I found the ultimate transformation functions, optimization for -@c %static control programs is now a closed problem, I have \textnormal{just} -@c %to generate the target code !"} - - - -@c % /************************************************************************* -@c % * PART I: HEADER * -@c % *************************************************************************/ -@c %**start of header -@setfilename cloog.info -@settitle CLooG - a loop generator for scanning polyhedra - -@set EDITION 2.1 -@include gitversion.texi -@set UPDATED October 15th 2007 -@setchapternewpage odd - -@c %**end of header - -@c % /************************************************************************* -@c % * PART II: SUMMARY DESCRIPTION AND COPYRIGHT * -@c % *************************************************************************/ - -@copying -This manual is for CLooG version @value{VERSION}, a software -which generates loops for scanning Z-polyhedra. That is, CLooG produces a -code visiting each integral point of a union of parametrized -polyhedra. CLooG is designed to avoid control overhead and to produce a very -efficient code. - -It would be quite kind to refer the following paper in any publication that -results from the use of the CLooG software or its library: - -@example -@@InProceedings@{Bas04, -@ @ author =@ @ @ @ @{C. Bastoul@}, -@ @ title =@ @ @ @ @ @{Code Generation in the Polyhedral Model -@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Is Easier Than You Think@}, -@ @ booktitle = @{PACT'13 IEEE International Conference on -@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Parallel Architecture and Compilation Techniques@}, -@ @ year =@ @ @ @ @ @ 2004, -@ @ pages =@ @ @ @ @ @{7--16@}, -@ @ month =@ @ @ @ @ @{september@}, -@ @ address =@ @ @ @{Juan-les-Pins@} -@} -@end example - -Copyright @copyright{} 2002-2005 C@'edric Bastoul. - -@c quotation -Permission is granted to copy, distribute and/or modify this document under -the terms of the GNU Free Documentation License, Version 1.2 -published by the Free Software Foundation. To receive a copy of the -GNU Free Documentation License, write to the Free Software Foundation, Inc., -59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -@c end quotation -@end copying - -@c % /************************************************************************* -@c % * PART III: TITLEPAGE, CONTENTS, COPYRIGHT * -@c % *************************************************************************/ -@titlepage -@title CLooG -@subtitle A Loop Generator For Scanning Polyhedra -@subtitle Edition @value{EDITION}, for CLooG @value{VERSION} -@subtitle @value{UPDATED} -@author C@'edric Bastoul - -@c The following two commands start the copyright page. -@page -@noindent (September 2001) -@table @code -@item C@'edric Bastoul -SCHEDULES GENERATE !!! I just need to apply them now, where can I find -a good code generator ?! - -@item Paul Feautrier -Hmmm. I fear that if you want something powerful enough, you'll have to -write it yourself ! -@end table - -@vskip 0pt plus 1filll -@insertcopying -@end titlepage - -@c Output the table of contents at the beginning. -@contents - -@c % /************************************************************************* -@c % * PART IV: TOP NODE AND MASTER MENU * -@c % *************************************************************************/ -@ifnottex -@node Top -@top CLooG - -@insertcopying -@end ifnottex - -@menu -* Introduction:: -* CLooG Software:: -* CLooG Library:: -@c * Hacking:: -* Installing:: -* Documentation:: -* References:: -@end menu - - - -@c % /************************************************************************* -@c % * PART V: BODY OF THE DOCUMENT * -@c % *************************************************************************/ - -@c % ****************************** INTRODUCTION ****************************** -@node Introduction -@chapter Introduction -CLooG is a free software and library generating loops for scanning Z-polyhedra. -That is, it finds a code (e.g. in C, FORTRAN...) that reaches each integral -point of one or more parameterized polyhedra. CLooG has been originally -written to solve the code generation problem for optimizing compilers based on -the polytope model. Nevertheless it is used now in various area, e.g., to build -control automata for high-level synthesis or to find the best polynomial -approximation of a function. CLooG may help in any situation where scanning -polyhedra matters. It uses the best state-of-the-art code generation -algorithm known as the Quiller@'e et al. algorithm (@pxref{Qui00}) -with our own improvements and extensions (@pxref{Bas04}). -The user has full control on generated code quality. -On one hand, generated code size has to be tuned for sake of -readability or instruction cache use. On the other hand, we must ensure that -a bad control management does not hamper performance of the generated code, -for instance by producing redundant guards or complex loop bounds. -CLooG is specially designed to avoid control overhead and to produce a very -efficient code. - -CLooG stands for @emph{Chunky Loop Generator}: it is a part of the Chunky -project, a research tool for data locality improvement (@pxref{Bas03a}). -It is designed -also to be the back-end of automatic parallelizers like LooPo (@pxref{Gri04}). -Thus it is very -compilable code oriented and provides powerful program transformation -facilities. Mainly, it allows the user to specify very general schedules where, -e.g., unimodularity or invertibility of the transformation doesn't matter. - -The current version is still under -evaluation, and there is no guarantee that the upward compatibility -will be respected (but the previous API has been stable for two years, -we hope this one will be as successful -and we believe it-). -A lot of reports are necessary to freeze the library -API and the input file shape. Most API changes from 0.12.x to 0.14.x -have been requested by the users themselves. -Thus you are very welcome and encouraged -to post reports on bugs, wishes, critics, comments, suggestions or -successful experiences in the forum of @code{http://www.CLooG.org} -or to send them to cedric.bastoul@@inria.fr directly. - -@menu -* Basics:: -* Scattering:: -@end menu - -@node Basics -@section Basically, what's the point ? -If you want to use CLooG, this is because you want to scan or to find -something inside the integral points of a set of polyhedra. There are many -reasons for that. Maybe you need the generated code itself because it -actually implements a very smart program transformation you found. -Maybe you want to use the generated code -because you know that the solution of your problem belongs to the integral -points of those damned polyhedra and you don't know which one. Maybe you just -want to know if a polyhedron has integral points depending on some parameters, -which is the lexicographic minimum, maximum, the third on the basis of the -left etc. Probably you have your own reasons to use CLooG. - -Let us illustrate a basic use of CLooG. Suppose we have a set of affine -constraints that describes a part of a whatever-dimensional space, -called a @strong{domain}, and we -want to scan it. Let us consider for instance the following set of constraints -where @samp{i} -and @samp{j} are the unknown (the two dimensions of the space) and -@samp{m} and @samp{n} are the parameters (some symbolic constants): -@example -@group -2<=i<=n -2<=j<=m -j<=n+2-i -@end group -@end example -Let us also consider that we have a partial knowledge of the parameter values, -called the @strong{context}, expressed as affine constraints as well, -for instance: -@example -@group -m>=2 -n>=2 -@end group -@end example -Note that using parameters is optional, if you are not comfortable with -parameter manipulation, just replace them with any scalar value that fits -@code{m>=2} and @code{n>=2}. -A graphical representation of this part of the 2-dimensional space, where -the integral points are represented using heavy dots would be for instance: - -@image{images/basic,6cm} - -The affine constraints of both the domain and the context are what we will -provide to CLooG as input (in a particular shape that will be described later). -The output of CLooG is a pseudo-code to scan the integral points of the -input domain according to the context: -@example -@group -for (i=2;i<=n;i++) @{ - for (j=2;j<=min(m,-i+n+2);j++) @{ - S1(i,j) ; - @} -@} -@end group -@end example -If you felt such a basic example is yet interesting, there is a good chance -that CLooG is appropriate for you. CLooG can do much more: scanning several -polyhedra or unions of polyhedra at the same time, applying general affine -transformations to the polyhedra, generate compilable code etc. Welcome -to the CLooG's user's guide ! - -@node Scattering -@section Defining a Scanning Order: Scattering Functions -In CLooG, domains only define the set of integral points to scan and their -coordinates. In particular, CLooG is free to choose the scanning order for -generating the most efficient code. This means, for optimizing/parallelizing -compiler people, that CLooG doesn't make any speculation on dependences on and -between statements (by the way, it's not its job !). -For instance, if an user give to -CLooG only two domains @code{S1:1<=i<=n}, @code{S2:1<=i<=n} and the context -@code{n>=1}, the following pseudo-codes are considered to be equivalent: - -@example -@group -/* A convenient target pseudo-code. */ -for (i=1;i<=N;i++) @{ - S1(i) ; -@} -for (i=1;i<=N;i++) @{ - S2(i) ; -@} -@end group -@end example - -@example -@group -/* Another convenient target pseudo-code. */ -for (i=1;i<=N;i++) @{ - S1(i) ; - S2(i) ; -@} -@end group -@end example - -The default behaviour -of CLooG is to generate the second one, since it is optimized in control. -It is right if there are no data dependences -between @code{S1} and @code{S2}, but wrong otherwise. - -Thus it is often useful to force scanning to respect a given order. This can be -done in CLooG by using @strong{scattering functions}. Scattering is a -shortcut for scheduling, allocation, chunking functions and the like we can -find in the restructuring compilation literature. There are a lot of reasons -to scatter the integral points of the domains (i.e. the statement instances -of a program, for compilation people), parallelization or optimization are good -examples. For instance, if the user wants for any reason to set some -precedence constraints between the statements of our example above -in order to force the generation of the -first code, he can do it easily by setting (for example) the following -scheduling functions: - -@tex -$$\theta _{S1}(i) = (1)$$ -$$\theta _{S2}(j) = (2)$$ -@end tex - -@ifnottex -@example -@group -T_S1(i) = (1) -T_S2(j) = (2) -@end group -@end example -@end ifnottex - -This scattering means that each integral point of the domain @code{S1} -is scanned at logical date @code{1} while each integral point of the domain -@code{S2} is scanned at logical date @code{2}. As a result, the whole -domain @code{S1} is scanned before domain @code{S2} and the first code in our -example is generated. - -The user can set every kind of affine scanning order thanks to the -scattering functions. Each domain has its own scattering function and -each scattering function may be multi-dimensional. A multi-dimensional logical -date may be seen as classical date (year,month,day,hour,minute,etc.) where -the first dimensions are the most significant. Each scattering dimension -may depend linearly on the original dimensions (e.g., @code{i}), the -parameters (e.g., @code{n}) ans scalars (e.g., @code{2}). - -A very useful example of multi-dimensional scattering functions is, for -compilation people, the scheduling of the original program. -The basic data to use for code generation are statement iteration domains. -As we saw, these data are not sufficient to rebuild the original -program (what is the ordering between instances of different statements ?). -The missing data can be put in the scattering functions as the original -scheduling. The method to compute it is quite simple (@pxref{Fea92}). The idea is to -build an abstract syntax tree of the program and to read the scheduling for -each statement. For instance, let us consider the following implementation of -a Cholesky factorization: - -@example -@group -/* A Cholesky factorization kernel. */ -for (i=1;i<=N;i++) @{ - for (j=1;j<=i-1;j++) @{ - a[i][i] -= a[i][j] ; /* S1 */ - @} - a[i][i] = sqrt(a[i][i]) ; /* S2 */ - for (j=i+1;j<=N;j++) @{ - for (k=1;k<=i-1;k++) @{ - a[j][i] -= a[j][k]*a[i][k] ; /* S3 */ - @} - a[j][i] /= a[i][i] ; /* S4 */ - @} - @} -@} -@end group -@end example - -The corresponding abstract syntax tree is given in the following figure. -It directly gives the scattering functions (schedules) for all the -statements of the program. - -@image{images/tree,6cm} - -@tex -$$ -\hbox{$ \cases{ \theta _{S1}(i,j)^T &$= (0,i,0,j,0)^T$\cr - \theta _{S2}(i) &$= (0,i,1)^T$\cr - \theta _{S3}(i,j,k)^T &$= (0,i,2,j,0,k,0)^T$\cr - \theta _{S4}(i,j)^T &$= (0,i,2,j,1)^T$}$} -$$ -@end tex - -@ifnottex -@example -@group -T_S1(i,j)^T = (0,i,0,j,0)^T -T_S2(i) = (0,i,1)^T -T_S3(i,j,k)^T = (0,i,2,j,0,k,0)^T -T_S4(i,j)^T = (0,i,2,j,1)^T -@end group -@end example -@end ifnottex - -These schedules depend on the iterators and give for each instance of each -statement a unique execution date. Using such scattering functions allow -CLooG to re-generate the input code. - - - - - -@c % ***********************Using the CLooG Software ************************** -@node CLooG Software -@chapter Using the CLooG Software - - -@menu -* A First Example:: -* Writing The Input File:: -* Calling CLooG:: -* CLooG Options:: -* Full Example:: -@end menu - -@c %/************************************************************************* -@c % * A FIRST EXAMPLE * -@c % *************************************************************************/ -@node A First Example -@section A First Example -CLooG takes as input a file that must be written accordingly to a grammar -described in depth in a further section (@pxref{Writing The Input File}). -Moreover it supports many options to tune the target code presentation or -quality as discussed in a dedicated section (@pxref{Calling CLooG}). -However, a basic use -of CLooG is not very complex and we present in this section how to generate the -code corresponding to a basic example discussed earlier (@pxref{Basics}). - -The problem is to find the code that scans a 2-dimensional polyhedron -where @samp{i} and @samp{j} are the unknown (the two dimensions of the space) -and @samp{m} and @samp{n} are the parameters (the symbolic constants), -defined by the following set of constraints: -@example -@group -2<=i<=n -2<=j<=m -j<=n+2-i -@end group -@end example -@noindent We also consider a partial knowledge of the parameter values, -expressed thanks to the following affine constraints: -@example -@group -m>=2 -n>=2 -@end group -@end example - -An input file that corresponds to this problem, and asks for a generated -code in C, may be the following. Note that we do not describe here precisely -the structure and the components of this file (@pxref{Writing The Input File} - for such information, if you feel it necessary): - -@example -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context (constraints on two parameters) -2 4 # 2 lines and 4 columns -# eq/in m n 1 eq/in: 1 for inequality >=0, 0 for equality =0 - 1 1 0 -2 # 1*m + 0*n -2*1 >= 0, i.e. m>=2 - 1 0 1 -2 # 0*m + 1*n -2*1 >= 0, i.e. n>=2 - -1 # We want to set manually the parameter names -m n # parameter names - -# --------------------- STATEMENTS -------------------- -1 # Number of statements - -1 # First statement: one domain -# First domain -5 6 # 5 lines and 6 columns -# eq/in i j m n 1 - 1 1 0 0 0 -2 # i >= 2 - 1 -1 0 0 1 0 # i <= n - 1 0 1 0 0 -2 # j >= 2 - 1 0 -1 1 0 0 # j <= m - 1 -1 -1 0 1 2 # n+2-i>=j -0 0 0 # for future options - -1 # We want to set manually the iterator names -i j # iterator names - -# --------------------- SCATTERING -------------------- -0 # No scattering functions -@end example - -This file may be called @samp{basic.cloog} -(this example is provided in the CLooG distribution as -@code{test/manual_basic.cloog}) and we can ask CLooG to process it -and to generate the code by a simple calling to CLooG with this file as input: -@samp{cloog basic.cloog}. By default, CLooG will print the generated code in -the standard output: - -@example -@group -/* Generated by CLooG v@value{VERSION} in 0.00s. */ -for (i=2;i<=n;i++) @{ - for (j=2;j<=min(m,-i+n+2);j++) @{ - S1(i,j) ; - @} -@} -@end group -@end example - -@c %/************************************************************************* -@c % * Input file * -@c % *************************************************************************/ -@node Writing The Input File -@section Writing The Input File -The input text file contains a problem description, i.e. the context, -the domains and the scattering functions. -Because CLooG is very 'compilable code generation oriented', we can associate -some additional informations to each domain. We call this association a -@emph{statement}. The set of all informations is -called a @emph{program}. The input file respects the grammar below -(terminals are preceded by "_"): - -@example -File ::= Program -Program ::= Context Statements Scattering -Context ::= Language Domain_union Naming -Statements ::= Nb_statements Statement_list Naming -Scatterings ::= Nb_functions Scattering_list Naming -Naming ::= Option Name_list -Name_list ::= _String Name_list | (void) -Statement_list ::= Statement Statement_list | (void) -Domain_list ::= _Domain Domain_list | (void) -Scattering_list ::= Domain_union Scattering_list | (void) -Statement ::= Iteration_domain 0 0 0 -Iteration_domain ::= Domain_union -Domain_union ::= Nb_domains Domain_list -Option ::= 0 | 1 -Language ::= c | f -Nb_statements ::= _Integer -Nb_domains ::= _Integer -Nb_functions ::= _Integer -@end example - -Note: if there is only one domain in a @samp{Domain_union}, -i.e., if @samp{Nb_domains} is 1, then this 1 may be omitted. - -@itemize @bullet -@item @samp{Context} represents the informations that are - shared by all the statements. It consists on - the language used (which can be @samp{c} for C or @samp{f} for FORTRAN 90) - and the global constraints on parameters. - These constraints are essential - since they give to CLooG the number of parameters. If there is no - parameter or no constraints on parameters, just give a constraint - always satisfied like @math{1 \geq 0}. @samp{Naming} sets the parameter - names. - If the naming option @samp{Option} is 1, parameter names will be read - on the next line. There must be exactly as many names as parameters. - If the naming option @samp{Option} is 0, parameter names are - automatically generated. The name of the first parameter will - be @samp{M}, and the name of the @math{(n+1)^{th}} parameter directly - follows the name of the @math{n^{th}} parameter in ASCII code. - It is the user responsibility to ensure that parameter names, - iterators and scattering dimension names are different. -@item @samp{Statements} represents the informations on the statements. - @samp{Nb_statements} is the number of statements in the program, - i.e. the number of @samp{Statement} items in the @samp{Statement_list}. - @samp{Statement} represents the informations on a given statement. - To each statement is associated a domain - (the statement iteration domain: @samp{Iteration_domain}) and three - zeroes that represents future options. - @samp{Naming} sets the iterator names. If the naming option - @samp{Option} is 1, the iterator names - will be read on the next line. There must be exactly as many names as - nesting level in the deepest iteration domain. If the naming option - @samp{Option} is 0, iterator names are automatically generated. - The iterator name of the outermost loop will be @samp{i}, and the - iterator name of the loop at level @math{n+1} directly follows the - iterator name of the loop at level @math{n} in ASCII code. -@item @samp{Scatterings} represents the informations on scattering functions. - @samp{Nb_functions} is the number of functions (it must be - equal to the number of statements or 0 if there is no scattering - function). The functions themselves are represented through - @samp{Scattering_list}. - @samp{Naming} sets the scattering dimension names. If the naming option - @samp{Option} is 1, the scattering dimension names will be read on the - next line. - There must be exactly as many names as scattering dimensions. If the - naming option @samp{Option} is 0, scattering dimension names are automatically - generated. The name of the @math{n^{th}} scattering dimension - will be @samp{cn}. -@end itemize - -@menu -* Domain Representation:: -* Scattering Representation:: -@end menu - -@node Domain Representation -@subsection Domain Representation -As shown by the grammar, the input file describes the various informations -thanks to characters, integers and domains. Each domain is defined by a set of -constraints in the PolyLib format (@pxref{Wil93}). They have the -following syntax: -@enumerate -@item some optional comment lines beginning with @samp{#}, -@item the row and column numbers, possibly followed by comments, -@item the constraint rows, each row corresponds to a constraint the - domain have to satisfy. Each row must be on a single line and is possibly - followed by comments. The constraint is an equality @math{p(x) = 0} if the - first element is 0, an inequality @math{p(x) \geq 0} if the first element - is 1. The next elements are the unknown coefficients, followed by - the parameter coefficients. The last element is the constant factor. -@end enumerate -For instance, assuming that @samp{i}, @samp{j} and @samp{k} are iterators and -@samp{m} and @samp{n} are parameters, the domain defined by the following -constraints : - -@tex -$$ -\hbox{$ \cases{ -i + m &$\geq 0$\cr - -j + n &$\geq 0$\cr - i + j - k &$\geq 0$}$} -$$ -@end tex - -@ifnottex -@example -@group - -i + m >= 0 - -j + n >= 0 -i + j - k >= 0 -@end group -@end example -@end ifnottex - -@noindent can be written in the input file as follows : - -@example -@group -# This is the domain -3 7 # 3 lines and 7 columns -# eq/in i j k m n 1 - 1 -1 0 0 1 0 0 # -i + m >= 0 - 1 0 -1 0 0 1 0 # -j + n >= 0 - 1 1 1 -1 0 0 0 # i + j - k >= 0 -@end group -@end example - -Each iteration domain @samp{Iteration_domain} of a given statement -is a union of polyhedra -@samp{Domain_union}. A union is defined by its number of elements -@samp{Nb_domains} and the elements themselves @samp{Domain_list}. -For instance, let us consider the following pseudo-code: - -@example -@group -for (i=1;i<=n;i++) @{ - if ((i >= m) || (i <= 2*m)) - S1 ; - for (j=i+1;j<=m;j++) - S2 ; -@} -@end group -@end example - -@noindent The iteration domain of @samp{S1} can be divided into two -polyhedra and written in the input file as follows: - -@example -@group -2 # Number of polyhedra in the union -# First domain -3 5 # 3 lines and 5 columns -# eq/in i m n 1 - 1 1 0 0 -1 # i >= 1 - 1 -1 0 1 0 # i <= n - 1 1 -1 0 0 # i >= m -# Second domain -3 5 # 3 lines and 5 columns -# eq/in i m n 1 - 1 1 0 0 -1 # i >= 1 - 1 -1 0 1 0 # i <= n - 1 -1 2 0 0 # i <= 2*m -@end group -@end example - -@node Scattering Representation -@subsection Scattering Function Representation -Scattering functions are depicted in the input file thanks a representation -very close to the domain one. -An integer gives the number of functions @samp{Nb_functions} and each function -is represented by a domain. Each line of the domain corresponds to an equality -defining a dimension of the function. Note that at present -(CLooG @value{VERSION}) -@strong{all functions must have the same scattering dimension number}. If a -user wants to set scattering functions with different dimensionality, he has -to complete the smaller one with zeroes to reach the maximum dimensionality. -For instance, let us consider the following code and -scheduling functions: - -@example -@group -for (i=1;i<=n;i++) @{ - if ((i >= m) || (i <= 2*m)) - S1 ; - for (j=i+1;j<=m;j++) - S2 ; -@} -@end group -@end example - -@tex -$$ -\hbox{$ \cases{ \theta _{S1}(i) &$= (i,0)^T$\cr - \theta _{S2}(i,j)^T &$= (n,i+j)^T$}$} -$$ -@end tex - -@ifnottex -@example -@group -T_S1(i) = (i,0)^T -T_S2(i,j)^T = (n,i+j)^T -@end group -@end example -@end ifnottex - - -@noindent This scheduling can be written in the input file as follows: - -@example -@group -2 # Number of scattering functions -# First function -2 7 # 2 lines and 7 columns -# eq/in c1 c2 i m n 1 - 0 1 0 -1 0 0 0 # c1 = i - 0 0 1 0 0 0 0 # c2 = 0 -# Second function -2 8 # 2 lines and 8 columns -# eq/in c1 c2 i j m n 1 - 0 1 0 0 0 0 -1 0 # c1 = n - 0 0 1 -1 -1 0 0 0 # c2 = i+j -@end group -@end example -The complete input file for the user who wants to generate the code for this -example with the preceding scheduling would be -(this file is provided in the CLooG distribution -as @code{test/manual_scattering.cloog}: - -@example -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context (no constraints on two parameters) -1 4 # 1 lines and 4 columns -# eq/in m n 1 - 1 0 0 0 # 0 >= 0, always true - -1 # We want to set manually the parameter names -m n # parameter names - -# --------------------- STATEMENTS -------------------- -2 # Number of statements - -2 # First statement: two domains -# First domain -3 5 # 3 lines and 5 columns -# eq/in i m n 1 - 1 1 0 0 -1 # i >= 1 - 1 -1 0 1 0 # i <= n - 1 1 -1 0 0 # i >= m -# Second domain -3 5 # 3 lines and 5 columns -# eq/in i m n 1 - 1 1 0 0 -1 # i >= 1 - 1 -1 0 1 0 # i <= n - 1 -1 2 0 0 # i <= 2*m -0 0 0 # for future options - -1 # Second statement: one domain -4 6 # 4 lines and 6 columns -# eq/in i j m n 1 - 1 1 0 0 0 -1 # i >= 1 - 1 -1 0 0 1 0 # i <= n - 1 -1 1 0 0 -1 # j >= i+1 - 1 0 -1 1 0 0 # j <= m -0 0 0 # for future options - -1 # We want to set manually the iterator names -i j # iterator names - -# --------------------- SCATTERING -------------------- -2 # Scattering functions -# First function -2 7 # 2 lines and 7 columns -# eq/in p1 p2 i m n 1 - 0 1 0 -1 0 0 0 # p1 = i - 0 0 1 0 0 0 0 # p2 = 0 -# Second function -2 8 # 2 lines and 8 columns -# eq/in p1 p2 i j m n 1 - 0 1 0 0 0 0 -1 0 # p1 = n - 0 0 1 -1 -1 0 0 0 # p2 = i+j - -1 # We want to set manually the scattering dimension names -p1 p2 # scattering dimension names -@end example - - -@c %/************************************************************************* -@c % * Calling CLooG * -@c % *************************************************************************/ -@node Calling CLooG -@section Calling CLooG -CLooG is called by the following command: -@example - cloog [ options | file ] -@end example -The default behavior of CLooG is to read the input informations from a file and -to print the generated code or pseudo-code on the standard output. -CLooG's behavior and the output code shape is under the user control thanks -to many options which are detailed a further section (@pxref{CLooG Options}). -@code{file} is the input file. @code{stdin} is a special value: when used, -input is standard input. For instance, we can call CLooG to treat the -input file @code{basic.cloog} with default options by typing: -@code{cloog basic.cloog} or @code{more basic.cloog | cloog stdin}. - -@c %/************************************************************************* -@c % * CLooG Options * -@c % *************************************************************************/ -@node CLooG Options -@section CLooG Options - -@menu -* Last Depth to Optimize Control:: -* First Depth to Optimize Control:: -* Simplify Convex Hull:: -* Once Time Loop Elimination:: -* Equality Spreading:: -* First Level for Spreading:: -* Statement Block:: -* Loop Strides:: -* Unrolling:: -* Compilable Code:: -* Output:: -* Help:: -* Version :: -* Quiet :: -@end menu - -@node Last Depth to Optimize Control -@subsection Last Depth to Optimize Control @code{-l } - -@code{-l }: this option sets the last loop depth to be optimized in -control. The higher this depth, the less control overhead. -For instance, with some input file, a user can generate -different pseudo-codes with different @code{depth} values as shown below. -@example -@group -/* Generated using a given input file and @strong{option -l 1} */ -for (i=0;i<=M;i++) @{ - S1 ; - for (j=0;j<=N;j++) @{ - S2 ; - @} - for (j=0;j<=N;j++) @{ - S3 ; - @} - S4 ; -@} -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -l 2} */ -for (i=0;i<=M;i++) @{ - S1 ; - for (j=0;j<=N;j++) @{ - S2 ; - S3 ; - @} - S4 ; -@} -@end group -@end example - In this example we can see that this option can change the operation - execution order between statements. Let us remind that CLooG does not - make any speculation on dependences between statements - (@pxref{Scattering}). Thus if nothing (i.e. scattering functions) - forbids this, CLooG considers the above codes to be equivalent. - If there is no scattering functions, the minimum value for @code{depth} - is 1 (in the case of 0, the user doesn't really need a loop generator !), - and the number of scattering dimensions otherwise (CLooG will warn the - user if he doesn't respect such constraint). - The maximum value for depth is -1 (infinity). - Default value is infinity. - -@node First Depth to Optimize Control -@subsection First Depth to Optimize Control @code{-f } - - @code{-f }: this option sets the first loop depth to be optimized - in control. The lower this depth, the less control overhead (and the longer - the generated code). For instance, with some input file, a user - can generate different pseudo-codes with different @code{depth} values - as shown below. - The minimum value for @code{depth} is 1, and the - maximum value is -1 (infinity). - Default value is 1. -@example -@group -/* Generated using a given input file and @strong{option -f 3} */ -for (i=1;i<=N;i++) @{ - for (j=1;j<=M;j++) @{ - S1 ; - if (j >= 10) @{ - S2 ; - @} - @} -@} -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -f 2} */ -for (i=1;i<=N;i++) @{ - for (j=1;j<=9;j++) @{ - S1 ; - @} - for (j=10;j<=M;j++) @{ - S1 ; - S2 ; - @} -@} -@end group -@end example - -@node Simple Convex Hull -@subsection Simple Convex Hull @code{-sh } - - @code{-sh }: this option enables (@code{boolean=1}) - or forbids (@code{boolean=0}) the use of an overapproximation - of the convex hull that may be easier to compute - (especially in the isl backend) and that may result in - simpler bounds. - This option works only for generated code without - code duplication (it means, you have to tune @code{-f} and - @code{-l} options first to generate only a loop nest with internal - guards). For instance, with the input file @code{test/union.cloog}, a user - can generate different pseudo-codes as shown below. - Default value is 0. -@example -@group -/* Generated using test/union.cloog and @strong{option -f -1 -l 2 -override} */ -for (i=0;i<=11;i++) @{ - for (j=max(0,5*i-50);j<=min(15,5*i+10);j++) @{ - if ((i <= 10) && (j <= 10)) @{ - S1 ; - @} - if ((i >= 1) && (j >= 5)) @{ - S2 ; - @} - @} -@} -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -sh 1 -f -1 -l 2 -override} */ -for (i=0;i<=11;i++) @{ - for (j=0;j<=15;j++) @{ - if ((i <= 10) && (j <= 10)) @{ - S1 ; - @} - if ((i >= 1) && (j >= 5)) @{ - S2 ; - @} - @} -@} -@end group -@end example - -@node Once Time Loop Elimination -@subsection Once Time Loop Elimination @code{-otl } - - @code{-otl }: this option allows (@code{boolean=1}) or - forbids (@code{boolean=0}) the simplification of loops running - once. Default value is 1. -@example -@group -/* Generated using a given input file and @strong{option -otl 0} */ -for (j=i+1;j<=i+1;j++) @{ - S1 ; -@} -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -otl 1} */ -j = i+1 ; -S1 ; -@end group -@end example - - -@node Equality Spreading -@subsection Equality Spreading @code{-esp } - - @code{-esp }: this option allows (@code{boolean=1}) or - forbids (@code{boolean=0}) values spreading when there - are equalities. Default value is 1. -@example -@group -/* Generated using a given input file and @strong{option -esp 0} */ -i = M+2 ; -j = N ; -for (k=i;k<=j+M;k++) @{ - S1 ; -@} -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -esp 1} */ -for (k=M+2;k<=N+M;k++) @{ - S1(i = M+2, j = N) ; -@} -@end group -@end example - - -@node First Level for Spreading -@subsection First Level for Spreading @code{-fsp } - - @code{-fsp }: it can be useful to set a - first level to begin equality spreading. Particularly when using - scattering functions, the user may want to see the scattering dimension - values instead of spreading or hiding them. If user has set a - spreading, @code{level} is - the first level to start it. Default value is 1. -@example -@group -/* Generated using a given input file and @strong{option -fsp 1} */ -for (j=0;j<=N+M;j++) @{ - S1(i = N) ; -@} -for (j=0;j<=N+M;j++) @{ - S1(i = M) ; -@} -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -fsp 2} */ -c1 = N ; -for (j=0;j<=c1+M;j++) @{ - S1(i = c1) ; -@} -c1 = M ; -for (j=0;j<=N+c1;j++) @{ - S1(i = c1) ; -@} -@end group -@end example - - -@node Statement Block -@subsection Statement Block @code{-block } - - @code{-block }: this option allows (@code{boolean=1}) to - create a statement block for each new iterator, even if there is only - an equality. This can be useful in order to parse the generated - pseudo-code. When @code{boolean} is set to 0 or when the generation - language is FORTRAN, this feature is disabled. Default value is 0. -@example -@group -/* Generated using a given input file and @strong{option -block 0} */ -i = M+2 ; -j = N ; -S1 ; -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -block 1} */ -@{ i = M+2 ; - @{ j = N ; - S1 ; - @} -@} -@end group -@end example - - -@node Loop Strides -@subsection Loop Strides @code{-strides } - - @code{-strides }: this options allows (@code{boolean=1}) to - handle non-unit strides for loop increments. This can remove a lot of - guards and make the generated code more efficient. Default value is 0. -@example -@group -/* Generated using a given input file and @strong{option -strides 0} */ -for (i=1;i<=n;i++) @{ - if (i%2 == 0) @{ - S1(j = i/2) ; - @} - if (i%4 == 0) @{ - S2(j = i/4) ; - @} -@} -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -strides 1} */ -for (i=2;i<=n;i+=2) @{ - S1(j = i/2) ; - if (i%4 == 0) @{ - S2(j = i/4) ; - @} -@} -@end group -@end example - - -@node Unrolling -@subsection First Depth to Unroll @code{-first-unroll } - - @code{-first-unroll }: this option sets the first loop depth - to unroll. Note that a loop is only unrolled when it is supported - by the backend. In case of the isl backend, a loop is unrolled - if it has a lower bound that can only be incremented - a fixed (non-parametric) amount of times. - - -@node Compilable Code -@subsection Compilable Code @code{-compilable } - - @code{-compilable }: this options allows (@code{value} is not 0) - to generate a compilable code where all parameters have the integral value - @code{value}. This option creates a macro for each statement. Since - CLooG do not know anything about the statement sources, it fills the - macros with a basic increment that computes the total number of - scanned integral points. The user may change easily the macros according - to his own needs. This option is possible only if the generated code is - in C. Default value is 0. -@example -@group -/* Generated using a given input file and @strong{option -compilable 0} */ -for (i=0;i<=n;i++) @{ - for (j=0;j<=n;j++) @{ - S1 ; - S2 ; - @} - S3 ; -@} -@end group -@end example -@example -/* Generated using the same input file but @strong{option -compilable 10} */ -/* DON'T FORGET TO USE -lm OPTION TO COMPILE. */ - -/* Useful headers. */ -#include -#include -#include - -/* Parameter value. */ -#define PARVAL 10 - -/* Statement macros (please set). */ -#define S1(i,j) @{total++;@} -#define S2(i,j) @{total++;@} -#define S3(i) @{total++;@} - -int main() @{ - /* Original iterators. */ - int i, j ; - /* Parameters. */ - int n=PARVAL, total=0 ; - - for (i=0;i<=n;i++) @{ - for (j=0;j<=n;j++) @{ - S1(i,j) ; - S2(i,j) ; - @} - S3(i) ; - @} - - printf("Number of integral points: %d.\n",total) ; - return 0 ; -@} -@end example - -@node Callable Code -@subsection Callable Code @code{-callable } - - @code{-callable }: if @code{boolean=1}, then a @code{test} - function will be generated that has the parameters as arguments. - Similarly to the @code{-compilable} option, - a macro for each statement is generated. The generated definitions of - these macros are as used during the correctness testing, but they - can easily be changed by the user to suit her own needs. - This option is only available if the target language is C. - The default value is 0. - -@example -/* Generated from double.cloog with @strong{option -callable 0} */ -for (i=0;i<=M;i++) @{ - S1 ; - for (j=0;j<=N;j++) @{ - S2 ; - S3 ; - @} - S4 ; -@} -@end example -@example -/* Generated from double.cloog with @strong{option -callable 1} */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? ((n)-(d)+1)/(d) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? (n)/(d) : ((n)+(d)+1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) @{ hash(1); hash(i); @} -#define S2(i,j) @{ hash(2); hash(i); hash(j); @} -#define S3(i,j) @{ hash(3); hash(i); hash(j); @} -#define S4(i) @{ hash(4); hash(i); @} - -void test(int M, int N) -@{ - /* Original iterators. */ - int i, j; - for (i=0;i<=M;i++) @{ - S1(i) ; - for (j=0;j<=N;j++) @{ - S2(i,j) ; - S3(i,j) ; - @} - S4(i) ; - @} -@} -@end example - -@node Output -@subsection Output @code{-o } - - @code{-o }: this option sets the output file. @code{stdout} is a - special value: when used, output is standard output. - Default value is @code{stdout}. - -@node Help -@subsection Help @code{--help} or @code{-h} - - @code{--help} or @code{-h}: this option ask CLooG to print a short help. - -@node Version -@subsection Version @code{--version} or @code{-v} - - @code{--version} or @code{-v}: this option ask CLooG to print some version - informations. - -@node Quiet -@subsection Quiet @code{--quiet} or @code{-q} - - @code{--quiet} or @code{-q}: this option tells CLooG not to print - any informational messages. - - -@c %/************************************************************************* -@c % * A Full Example * -@c % *************************************************************************/ -@node Full Example -@section A Full Example - -Let us consider the allocation problem of a Gaussian elimination, i.e. we want -to distribute the various statement instances of the compute kernel onto -different processors. The original code is the following: -@example -@group -for (i=1;j<=N-1;i++) @{ - for (j=i+1;j<=N;j++) @{ - c[i][j] = a[j][i]/a[i][i] ; /* S1 */ - for (k=i+1;k<=N;k++) @{ - a[j][k] -= c[i][j]*a[i][k] ; /* S2 */ - @} - @} -@} -@end group -@end example - -@noindent The best affine allocation functions can be found by any good automatic -parallelizer like LooPo (@pxref{Gri04}): - -@tex -$$ -\hbox{$ \cases{ \theta _{S1}(i,j)^T &$= (i)$\cr - \theta _{S2}(i,j,k)^T &$= (k)$}$} -$$ -@end tex - -@ifnottex -@example -@group -T_S1(i,j)^T = (i) -T_S2(i,j,k)^T = (k) -@end group -@end example -@end ifnottex - -@noindent To ensure that on each processor, the set of statement instances is -executed according to the original ordering, we add as minor scattering -dimensions the original scheduling (@pxref{Scattering}): - -@tex -$$ -\hbox{$ \cases{ \theta _{S1}(i,j)^T &$= (i,0,i,0,j,0)^T$\cr - \theta _{S2}(i,j,k)^T &$= (k,0,i,0,j,1,k,0)^T$}$} -$$ -@end tex - -@ifnottex -@example -@group -T_S1(i,j)^T = (i,0,i,0,j,0)^T -T_S2(i,j,k)^T = (k,0,i,0,j,1,k,0)^T -@end group -@end example -@end ifnottex - -@noindent To ensure that the scattering functions have the same dimensionality, we -complete the first function with zeroes -(this is a CLooG @value{VERSION} and previous versions requirement, -it should be removed in a future version, don't worry it's absolutely legal !): - -@tex -$$ -\hbox{$ \cases{ \theta _{S1}(i,j)^T &$= (i,0,i,0,j,0,0,0)^T$\cr - \theta _{S2}(i,j,k)^T &$= (k,0,i,0,j,1,k,0)^T$}$} -$$ -@end tex - -@ifnottex -@example -@group -T_S1(i,j)^T = (i,0,i,0,j,0,0,0)^T -T_S2(i,j,k)^T = (k,0,i,0,j,1,k,0)^T -@end group -@end example -@end ifnottex - -@noindent The input file corresponding to this code generation problem -could be (this file is provided in the CLooG distribution -as @code{test/manual_gauss.cloog}: - -@example -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context (no constraints on one parameter) -1 3 # 1 line and 3 columns -# eq/in n 1 - 1 0 0 # 0 >= 0, always true - -1 # We want to set manually the parameter name -n # parameter name - -# --------------------- STATEMENTS -------------------- -2 # Number of statements - -1 # First statement: one domain -4 5 # 4 lines and 3 columns -# eq/in i j n 1 - 1 1 0 0 -1 # i >= 1 - 1 -1 0 1 -1 # i <= n-1 - 1 -1 1 0 -1 # j >= i+1 - 1 0 -1 1 0 # j <= n -0 0 0 # for future options - -1 -# Second statement: one domain -6 6 # 6 lines and 3 columns -# eq/in i j k n 1 - 1 1 0 0 0 -1 # i >= 1 - 1 -1 0 0 1 -1 # i <= n-1 - 1 -1 1 0 0 -1 # j >= i+1 - 1 0 -1 0 1 0 # j <= n - 1 -1 0 1 0 -1 # k >= i+1 - 1 0 0 -1 1 0 # k <= n -0 0 0 # for future options - -0 # We let CLooG set the iterator names - -# --------------------- SCATTERING -------------------- -2 # Scattering functions -# First function -8 13 # 3 lines and 3 columns -# eq/in p1 p2 p3 p4 p5 p6 p7 p8 i j n 1 - 0 1 0 0 0 0 0 0 0 -1 0 0 0 # p1 = i - 0 0 1 0 0 0 0 0 0 0 0 0 0 # p2 = 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 # p3 = i - 0 0 0 0 1 0 0 0 0 0 0 0 0 # p4 = 0 - 0 0 0 0 0 1 0 0 0 0 -1 0 0 # p5 = j - 0 0 0 0 0 0 1 0 0 0 0 0 0 # p6 = 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 # p7 = 0 - 0 0 0 0 0 0 0 0 1 0 0 0 0 # p8 = 0 -# Second function -8 14 # 3 lines and 3 columns -# eq/in p1 p2 p3 p4 p5 p6 p7 p8 i j k n 1 - 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 # p1 = k - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # p2 = 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 # p3 = i - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # p4 = 0 - 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 # p5 = j - 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 # p6 = 1 - 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 # p7 = k - 0 0 0 0 0 0 0 0 1 0 0 0 0 0 # p8 = 0 - -1 # We want to set manually the scattering dimension names -p1 p2 p3 p4 p5 p6 p7 p8 # scattering dimension names -@end example - -Calling CLooG, with for instance the command line -@code{cloog -fsp 2 gauss.cloog} for a better view -of the allocation (the processor number is given by @code{p1}), -will result on the following target code that actually implements -the transformation. A minor processing on the dimension @code{p1} -to implement, e.g., MPI calls, which is not shown here may -result in dramatic speedups ! - -@example -if (n >= 2) @{ - p1 = 1 ; - for (p5=2;p5<=n;p5++) @{ - S1(i = 1,j = p5) ; - @} -@} -for (p1=2;p1<=n-1;p1++) @{ - for (p3=1;p3<=p1-1;p3++) @{ - for (p5=p3+1;p5<=n;p5++) @{ - S2(i = p3,j = p5,k = p1) ; - @} - @} - for (p5=p1+1;p5<=n;p5++) @{ - S1(i = p1,j = p5) ; - @} -@} -if (n >= 2) @{ - p1 = n ; - for (p3=1;p3<=n-1;p3++) @{ - for (p5=p3+1;p5<=n;p5++) @{ - S2(i = p3,j = p5,k = n) ; - @} - @} -@} -@end example - - -@c %/************************************************************************* -@c % * A Full Example * -@c % *************************************************************************/ -@node CLooG Library -@chapter Using the CLooG Library -The CLooG Library was implemented to allow the user to call CLooG -directly from his programs, without file accesses or system calls. The -user only needs to link his programs with C libraries. The CLooG -library mainly provides one function (@code{cloog_clast_create_from_input}) -which takes as input the problem -description with some options, and returns the data structure corresponding -to the generated code (a @code{struct clast_stmt} structure) -which is more or less an abstract syntax tree. -The user can work with this data structure and/or use -our pretty printing function to write the final code in either C or FORTRAN. -Some other functions are provided for convenience reasons. -These functions as well as the data structures are described in this section. - -@menu -* CLooG Data Structures:: -* CLooG Output:: -* Retrieving version information:: -* Example of Library Utilization:: -@end menu - - -@node CLooG Data Structures -@section CLooG Data Structures Description -In this section, we describe the data structures used by the loop -generator to represent and to process a code generation problem. - -@menu -* CloogState:: -* CloogMatrix:: -* CloogDomain:: -* CloogScattering:: -* CloogUnionDomain:: -* CloogStatement:: -* CloogOptions:: -* CloogInput:: -@end menu - - -@node CloogState -@subsection CloogState -@example -@group -CloogState *cloog_state_malloc(void); -void cloog_state_free(CloogState *state); -@end group -@end example - -@noindent The @code{CloogState} structure is (implicitly) needed to perform -any CLooG operation. It should be created using @code{cloog_state_malloc} -before any other CLooG objects are created and destroyed using -@code{cloog_state_free} after all objects have been freed. -It is allowed to use more than one @code{CloogState} structure at -the same time, but an object created within the state of a one -@code{CloogState} structure is not allowed to interact with an object -created within the state of an other @code{CloogState} structure. - - -@node CloogMatrix -@subsection CloogMatrix - -@noindent The @code{CloogMatrix} structure is equivalent to the PolyLib -@code{Matrix} data structure (@pxref{Wil93}). This structure is devoted to -represent a set of constraints. - -@example -@group -struct cloogmatrix -@{ unsigned NbRows ; /* Number of rows. */ - unsigned NbColumns ; /* Number of columns. */ - cloog_int_t **p; /* Array of pointers to the matrix rows. */ - cloog_int_t *p_Init; /* Matrix rows contiguously in memory. */ -@}; -typedef struct cloogmatrix CloogMatrix; - -CloogMatrix *cloog_matrix_alloc(unsigned NbRows, unsigned NbColumns); -void cloog_matrix_print(FILE *foo, CloogMatrix *m); -void cloog_matrix_free(CloogMatrix *matrix); -@end group -@end example - -@noindent The whole matrix is stored in memory row after row at the -@code{p_Init} address. @code{p} is an array of pointers where -@code{p[i]} points to the first element of the @math{i^{th}} row. -@code{NbRows} and @code{NbColumns} are respectively the number of -rows and columns of the matrix. -Each row corresponds to a constraint. The first element of each row is an -equality/inequality tag. The -constraint is an equality @math{p(x) = 0} if the first element is 0, but it is -an inequality @math{p(x) \geq 0} if the first element is 1. -The next elements are the coefficients of the unknowns, -followed by the coefficients of the parameters, and finally the constant term. -For instance, the following three constraints: - -@tex -$$ -\hbox{$ \cases{ -i + m &$= 0$\cr - -j + n &$\geq 0$\cr - j + i - k &$\geq 0$}$} -$$ -@end tex - -@ifnottex -@example -@group - -i + m = 0 - -j + n >= 0 - i + j - k >= 0 -@end group -@end example -@end ifnottex - -@noindent would be represented by the following rows: - -@example -@group -# eq/in i j k m n cst - 0 0 -1 0 1 0 0 - 1 -1 0 0 0 1 0 - 1 1 1 -1 0 0 0 -@end group -@end example - -@noindent To be able to provide different precision version (CLooG -supports 32 bits, 64 bits and arbitrary precision through the GMP library), -the @code{cloog_int_t} type depends on the configuration options (it may be -@code{long int} for 32 bits version, @code{long long int} for 64 bits version, -and @code{mpz_t} for multiple precision version). - -@node CloogDomain -@subsection CloogDomain -@example -@group -CloogDomain *cloog_domain_union_read(CloogState *state, - FILE *input, int nb_parameters); -CloogDomain *cloog_domain_from_cloog_matrix(CloogState *state, - CloogMatrix *matrix, int nb_par); -void cloog_domain_free(CloogDomain *domain); -@end group -@end example - -@noindent @code{CloogDomain} is an opaque type representing a polyhedral -domain (a union of polyhedra). -A @code{CloogDomain} can be read -from a file using @code{cloog_domain_union_read} or -converted from a @code{CloogMatrix}. -The input format for @code{cloog_domain_union_read} -is that of @ref{Domain Representation}. -The function @code{cloog_domain_from_cloog_matrix} takes a @code{CloogState}, a -@code{CloogMatrix} and @code{int} as input and returns a pointer to a -@code{CloogDomain}. @code{matrix} describes the domain and @code{nb_par} is the -number of parameters in this domain. The input data structures are neither -modified nor freed. -The @code{CloogDomain} can be freed using @code{cloog_domain_free}. -There are also some backend dependent functions for creating -@code{CloogDomain}s. - -@menu -* CloogDomain/PolyLib:: -* CloogDomain/isl:: -@end menu - -@node CloogDomain/PolyLib -@subsubsection PolyLib - -@example -#include -CloogDomain *cloog_domain_from_polylib_polyhedron(CloogState *state, - Polyhedron *, int nb_par); -@end example -@noindent -The function @code{cloog_domain_from_polylib_polyhedron} takes a PolyLib -@code{Polyhedron} as input and returns a pointer to a @code{CloogDomain}. -The @code{nb_par} parameter indicates the number of parameters -in the domain. The input data structure if neither modified nor freed. - -@node CloogDomain/isl -@subsubsection isl - -@example -#include -CloogDomain *cloog_domain_from_isl_set(struct isl_set *set); -__isl_give isl_set *isl_set_from_cloog_domain(CloogDomain *domain); -@end example -@noindent -The function @code{cloog_domain_from_isl_set} takes a -@code{struct isl_set} as input and returns a pointer to a @code{CloogDomain}. -The function consumes a reference to the given @code{struct isl_set}. -Similarly, @code{isl_set_from_cloog_domain} consumes a reference -to a @code{CloogDomain} and returns an @code{isl_set}. - - -@node CloogScattering -@subsection CloogScattering -@example -@group -CloogScattering *cloog_domain_read_scattering(CloogDomain *domain, - FILE *foo); -CloogScattering *cloog_scattering_from_cloog_matrix(CloogState *state, - CloogMatrix *matrix, int nb_scat, int nb_par); -void cloog_scattering_free(CloogScattering *); -@end group -@end example - -@noindent -The @code{CloogScattering} type represents a scattering function. -A @code{CloogScattering} for a given @code{CloogDomain} can be read -from a file using @code{cloog_scattering_read} or converted -from a @code{CloogMatrix} using @code{cloog_scattering_from_cloog_matrix}. -The function @code{cloog_scattering_from_cloog_matrix} takes a -@code{CloogState}, a @code{CloogMatrix} and two @code{int}s as input and -returns a -pointer to a @code{CloogScattering}. -@code{matrix} describes the scattering, while @code{nb_scat} and -@code{nb_par} are the number of scattering dimensions and -the number of parameters, respectively. The input data structures are -neither modified nor freed. -A @code{CloogScattering} can be freed using @code{cloog_scattering_free}. -There are also some backend dependent functions for creating -@code{CloogScattering}s. - -@menu -* CloogScattering/PolyLib:: -* CloogScattering/isl:: -@end menu - -@node CloogScattering/PolyLib -@subsubsection PolyLib - -@example -#include -CloogScattering *cloog_scattering_from_polylib_polyhedron( - CloogState *state, Polyhedron *polyhedron, int nb_par); -@end example -@noindent -The function @code{cloog_scattering_from_polylib_polyhedron} takes a PolyLib -@code{Polyhedron} as input and returns a pointer to a @code{CloogScattering}. -The @code{nb_par} parameter indicates the number of parameters -in the domain. The input data structure if neither modified nor freed. - -@node CloogScattering/isl -@subsubsection isl - -@example -#include -CloogScattering *cloog_scattering_from_isl_map(struct isl_map *map); -@end example -@noindent -The function @code{cloog_scattering_from_isl_map} takes a -@code{struct isl_map} as input and returns a pointer to a @code{CloogScattering}. -The output dimensions of the @code{struct isl_map} correspond to the -scattering dimensions, while the input dimensions correspond to the -domain dimensions. -The function consumes a reference to the given @code{struct isl_map}. - - -@node CloogUnionDomain -@subsection CloogUnionDomain -@example -@group -enum cloog_dim_type @{ CLOOG_PARAM, CLOOG_ITER, CLOOG_SCAT @}; - -CloogUnionDomain *cloog_union_domain_alloc(int nb_par); -CloogUnionDomain *cloog_union_domain_add_domain(CloogUnionDomain *ud, - const char *name, CloogDomain *domain, - CloogScattering *scattering, void *usr); -CloogUnionDomain *cloog_union_domain_set_name(CloogUnionDomain *ud, - enum cloog_dim_type type, int index, const char *name); -void cloog_union_domain_free(CloogUnionDomain *ud); -@end group -@end example - -@noindent A @code{CloogUnionDomain} structure represents a union -of scattered named domains. A @code{CloogUnionDomain} is -initialized by a call to @code{cloog_union_domain_alloc}, -after which domains can be added using @code{cloog_union_domain_add_domain}. - -@code{cloog_union_domain_alloc} takes the number of parameters as input. -@code{cloog_union_domain_add_domain} takes a previously created -@code{CloogUnionDomain} as input along with an optional name, -a domain, an optional scattering function and a user pointer. -The name may be @code{NULL} and is duplicated if it is not. -If no name is specified, then the statements will be named according -to the order in which they were added. -@code{domain} and @code{scattering} are taken over -by the @code{CloogUnionDomain}. @code{scattering} may be @code{NULL}, -but it must be consistently @code{NULL} or not over all calls -to @code{cloog_union_domain_add_domain}. -@code{cloog_union_domain_set_name} can be used to set the names -of parameters, iterators and scattering dimensions. -The names of iterators and scattering dimensions can only be set -after all domains have been added. - -There is also a backend dependent function for creating -@code{CloogUnionDomain}s. - -@menu -* CloogUnionDomain/isl:: -@end menu - -@node CloogUnionDomain/isl -@subsubsection isl - -@example -#include -CloogUnionDomain *cloog_union_domain_from_isl_union_map( - __isl_take isl_union_map *umap); -CloogUnionDomain *cloog_union_domain_from_isl_union_set( - __isl_take isl_union_set *uset); -@end example -@noindent -The function @code{cloog_union_domain_from_isl_union_map} takes a -@code{isl_union_map} as input and returns a pointer -to a @code{CloogUnionDomain}. -The input is a mapping from different -spaces (different tuple names and possibly different dimensions) -to a common space. The iteration domains are set to the domains -in each space. The statement names are set to the names of the -spaces. The parameter names of the result are set to those of -the input, but the iterator and scattering dimension names are -left unspecified. -The function consumes a reference to the given @code{isl_union_map}. -The function @code{cloog_union_domain_from_isl_union_set} is similar, -but takes unscattered domains as input. - - -@node CloogStatement -@subsection CloogStatement -@example -@group -struct cloogstatement -@{ int number ; /* The statement unique number. */ - char *name; /* Name of the statement. */ - void * usr ; /* Pointer for user's convenience. */ - struct cloogstatement * next ;/* Next element of the linked list. */ -@} ; -typedef struct cloogstatement CloogStatement ; - -CloogStatement *cloog_statement_malloc(CloogState *state); -void cloog_statement_print(FILE *, CloogStatement *); -void cloog_statement_free(CloogStatement *); -@end group -@end example - -@noindent The @code{CloogStatement} structure represents a @code{NULL} -terminated linked -list of statements. In CLooG, a statement is only defined by its unique -number (@code{number}). The user can use the pointer @code{usr} for his -own convenience to link his own statement representation to the -corresponding @code{CloogStatement} structure. The whole management of the -@code{usr} pointer is under the responsibility of the user, in particular, -CLooG never tries to print, to allocate or to free a memory block pointed -by @code{usr}. - - - -@node CloogOptions -@subsection CloogOptions -@example -@group -struct cloogoptions -@{ int l ; /* -l option. */ - int f ; /* -f option. */ - int strides ; /* -strides option. */ - int sh ; /* -sh option. */ - int first_unroll; /* First level to unroll. */ - int esp ; /* -esp option. */ - int fsp ; /* -fsp option. */ - int otl ; /* -otl option. */ - int block ; /* -block option. */ - int compilable ; /* -compilable option. */ - int language; /* LANGUAGE_C or LANGUAGE_FORTRAN */ - int save_domains; /* Save unsimplified copy of domain. */ -@} ; -typedef struct cloogoptions CloogOptions ; - -CloogOptions *cloog_options_malloc(CloogState *state); -void cloog_options_print(FILE *foo, CloogOptions *options); -void cloog_options_free(CloogOptions *options); -@end group -@end example - -@noindent The @code{CloogOptions} structure contains all the possible options to -rule CLooG's behaviour (@pxref{Calling CLooG}). -As a reminder, the default values are: -@itemize @bullet -@item @math{l = -1} (optimize control until the innermost loops), -@item @math{f = 1} (optimize control from the outermost loops), -@item @math{strides = 0} (use only unit strides), -@item @math{sh = 0} (do not compute simple convex hulls), -@item @math{first_unroll = -1} (do not perform unrolling), -@item @math{esp = 1} (spread complex equalities), -@item @math{fsp = 1} (start to spread from the first iterators), -@item @math{otl = 1} (simplify loops running only once). -@item @math{block = 0} (do not make statement blocks when not necessary). -@item @math{compilable = 0} (do not generate a compilable code). -@end itemize - -The @code{save_domains} option is only useful for users of the CLooG -library. This option defaults to 0, but when it is set, the @code{domain} -field of each @code{clast_user_stmt} will be set to the set of values for the -scattering dimensions for which this instance of the user statement is executed. -The @code{domain} field of each @code{clast_for} contains the set of values for -the scattering dimensions for which an instance of a user statement is executed -inside the @code{clast_for}. It is only available if the @code{clast_for} -enumerates a scattering dimension. - -@node CloogInput -@subsection CloogInput -@example -@group -CloogInput *cloog_input_read(FILE *file, CloogOptions *options); -CloogInput *cloog_input_alloc(CloogDomain *context, - CloogUnionDomain *ud); -void cloog_input_free(CloogInput *input); - -void cloog_input_dump_cloog(FILE *, CloogInput *, CloogOptions *); -@end group -@end example - -@noindent A @code{CloogInput} structure represents the input to CLooG. -It is essentially a @code{CloogUnionDomain} along with a context -@code{CloogDomain}. A @code{CloogInput} can be created from -a @code{CloogDomain} and a @code{CloogUnionDomains} using -@code{cloog_input_alloc}, or it can be read from a CLooG input -file using @code{cloog_input_read}. The latter also modifies -the @code{language} field of the @code{CloogOptions} structure. -The constructed @code{CloogInput} can be used as input -to a @code{cloog_clast_create_from_input} call. - -A @code{CloogInput} data structure and a @code{CloogOptions} contain -the same information as a .cloog file. This function dumps the .cloog -description of the given data structures into a file. - -@node Dump CLooG Input File Function -@subsection Dump CLooG Input File Function -@example -@end example - -@node CLooG Output -@section CLooG Output - -@noindent -Given a description of the input, -an AST corresponding to the @code{CloogInput} can be constructed -using @code{cloog_clast_create_from_input} and destroyed using -@code{free_clast_stmt}. -@example -struct clast_stmt *cloog_clast_create_from_input(CloogInput *input, - CloogOptions *options); -void free_clast_stmt(struct clast_stmt *s); -@end example -@noindent -@code{clast_stmt} represents a linked list of ``statements''. -@example -struct clast_stmt @{ - const struct clast_stmt_op *op; - struct clast_stmt *next; -@}; -@end example -@noindent -The entries in the list are not of type @code{clast_stmt} itself, -but of some larger type. The following statement types are defined -by CLooG. - -@example -struct clast_root @{ - struct clast_stmt stmt; - CloogNames * names; -@}; -struct clast_root *new_clast_root(CloogNames *names); - -struct clast_assignment @{ - struct clast_stmt stmt; - const char * LHS; - struct clast_expr * RHS; -@}; -struct clast_assignment *new_clast_assignment(const char *lhs, - struct clast_expr *rhs); - -struct clast_block @{ - struct clast_stmt stmt; - struct clast_stmt * body; -@}; -struct clast_block *new_clast_block(void); - -struct clast_user_stmt @{ - struct clast_stmt stmt; - CloogDomain * domain; - CloogStatement * statement; - struct clast_stmt * substitutions; -@}; -struct clast_user_stmt *new_clast_user_stmt(CloogDomain *domain, - CloogStatement *stmt, struct clast_stmt *subs); - -struct clast_for @{ - struct clast_stmt stmt; - CloogDomain * domain; - const char * iterator; - struct clast_expr * LB; - struct clast_expr * UB; - cloog_int_t stride; - struct clast_stmt * body; -@}; -struct clast_for *new_clast_for(CloogDomain *domain, const char *it, - struct clast_expr *LB, struct clast_expr *UB, - cloog_int_t stride); - -struct clast_guard @{ - struct clast_stmt stmt; - struct clast_stmt * then; - int n; - struct clast_equation eq[1]; -@}; -struct clast_guard *new_clast_guard(int n); -@end example -@noindent -The @code{clast_stmt} returned by @code{cloog_clast_create} -is a @code{clast_root}. -It contains a placeholder for all the variable names that appear -in the AST and a (list of) nested statement(s). - -@noindent -A @code{clast_assignment} assigns the value given by -the @code{clast_expr} @code{RHS} to a variable named @code{LHS}. - -@noindent -A @code{clast_block} groups a list of statements into one statement. -These statements are only generated if the @code{block} option is set, -@pxref{Statement Block} and @ref{CloogOptions}. - -@noindent -A @code{clast_user_stmt} represents a call to a statement specified -by the user, @pxref{CloogStatement}. -@code{substitutions} is a list of @code{clast_assignment} statements -assigning an expression in terms of the scattering dimensions to -each of the original iterators in the original order. -The @code{LHS}s of these assignments are left blank (@code{NULL}). -The @code{domain} is set to @code{NULL} if the @code{save_domains} option -is not set. Otherwise, it is set to the set -of values for the scattering dimensions -for which this instance of the user statement is executed. -Note that unless the @code{noscalars} option has been set, the -constant scattering dimensions may have been removed from this set. - -@noindent -A @code{clast_for} represents a for loop, iterating @code{body} for each -value of @code{iterator} between @code{LB} and @code{UB} in steps -of size @code{stride}. -The @code{domain} is set to @code{NULL} if the @code{save_domains} option is not -set. Otherwise, it is set to the set of values for the scattering dimensions -for which a user statement is executed inside this @code{clast_for}. Note that -unless the @code{noscalars} option has been set, the constant scattering -dimensions may have been removed from this set. - -@noindent -A @code{clast_guard} represents the guarded execution of the @code{then} -(list of) statement(s) by a conjunction of @code{n} (in)equalities. -Each (in)equality is represented by a @code{clast_equation}. -@example -struct clast_equation @{ - struct clast_expr * LHS; - struct clast_expr * RHS; - int sign; -@}; -@end example -@noindent -The condition expressed by a @code{clast_equation} is -@code{LHS <= RHS}, @code{LHS == RHS} or @code{LHS >= RHS} -depending on whether @code{sign} is less than zero, equal -to zero, or greater than zero. - -The dynamic type of a @code{clast_stmt} can be determined -using the macro @code{CLAST_STMT_IS_A(stmt,type)}, -where @code{stmt} is a pointer to a @code{clast_stmt} -and @code{type} is one of @code{stmt_root}, @code{stmt_ass}, -@code{stmt_user}, @code{stmt_block}, @code{stmt_for} or -@code{stmt_guard}. -Users are allowed to define their own statement types by -assigning the @code{op} field of the statements a pointer -to a @code{clast_stmt_op} structure. -@example -struct clast_stmt_op @{ - void (*free)(struct clast_stmt *); -@}; -@end example -@noindent -The @code{free} field of this structure should point -to a function that frees the user defined statement. - -@noindent -A @code{clast_expr} can be an identifier, a term, -a binary expression or a reduction. -@example -enum clast_expr_type @{ - clast_expr_name, - clast_expr_term, - clast_expr_bin, - clast_expr_red -@}; -struct clast_expr @{ - enum clast_expr_type type; -@}; -void free_clast_expr(struct clast_expr *e); -@end example - -@noindent -Identifiers are of subtype @code{clast_name}. -@example -struct clast_name @{ - struct clast_expr expr; - const char * name; -@}; -struct clast_name *new_clast_name(const char *name); -void free_clast_name(struct clast_name *t); -@end example -@noindent -The character string pointed to by @code{name} is -assumed to be part of the @code{CloogNames} structure -in the root of the clast as is therefore not copied. - -@noindent -Terms are of type @code{clast_term}. -@example -struct clast_term @{ - struct clast_expr expr; - cloog_int_t val; - struct clast_expr *var; -@}; -struct clast_term *new_clast_term(cloog_int_t c, struct clast_expr *v); -void free_clast_term(struct clast_term *t); -@end example -@noindent -If @code{var} is set to @code{NULL}, then the term represents -the integer value @code{val}. Otherwise, it represents -the term @code{val * var}. -@code{new_clast_term} simply copies the @code{v} pointer -without copying the underlying @code{clast_expr}. -@code{free_clast_term}, on the other hand, recursively frees -@code{var}. - -@noindent -Binary expressions are of type @code{clast_bin_type} and -represent either the floor of a division (fdiv), -the ceil of a division (cdiv), an exact division or -the remainder of an fdiv. -@example -enum clast_bin_type @{ clast_bin_fdiv, clast_bin_cdiv, - clast_bin_div, clast_bin_mod @}; -struct clast_binary @{ - struct clast_expr expr; - enum clast_bin_type type; - struct clast_expr* LHS; - cloog_int_t RHS; -@}; -struct clast_binary *new_clast_binary(enum clast_bin_type t, - struct clast_expr *lhs, cloog_int_t rhs); -void free_clast_binary(struct clast_binary *b); -@end example - -@noindent -Reductions are of type @code{clast_reduction} and -can represent either the sum, the minimum or the maximum -of its elements. -@example -enum clast_red_type @{ clast_red_sum, clast_red_min, clast_red_max @}; -struct clast_reduction @{ - struct clast_expr expr; - enum clast_red_type type; - int n; - struct clast_expr* elts[1]; -@}; -struct clast_reduction *new_clast_reduction(enum clast_red_type t, - int n); -void free_clast_reduction(struct clast_reduction *r); -@end example - -@node Retrieving version information -@section Retrieving version information -CLooG provides static and dynamic version checks to assist on -including a compatible version of the library. -A static version check at compile time can be achieved by -querying the version constants defined in @code{version.h}: - -@itemize @bullet -@item @code{CLOOG_VERSION_MAJOR} -@item @code{CLOOG_VERSION_MINOR} -@item @code{CLOOG_VERSION_REVISION} -@end itemize - -This way it is possible to ensure the included headers are of the -correct version. It is still possible that the installed CLooG -library version differs from the installed headers. -In order to avoid this, a dynamic version check is provided with -the functions: - -@example -@group -int cloog_version_major(void); -int cloog_version_minor(void); -int cloog_version_revision(void); -@end group -@end example - -By using both the static and the dynamic version check, it is possible -to match CLooG's header version with the library's version. - -@node Example of Library Utilization -@section Example of Library Utilization -Here is a basic example showing how it is possible to use the CLooG library, -assuming that a standard installation has been done. -The following C program reads a CLooG input file on the standard input, -then prints the solution on the standard output. -Options are preselected to the default values of the CLooG software. -This example is provided in the @code{example} directory of the -CLooG distribution. -@example -/* example.c */ -# include -# include - -int main() -@{ - CloogState *state; - CloogInput *input; - CloogOptions * options ; - struct clast_stmt *root; - - /* Setting options and reading program informations. */ - state = cloog_state_malloc(); - options = cloog_options_malloc(state); - input = cloog_input_read(stdin, options); - - /* Generating and printing the code. */ - root = cloog_clast_create_from_input(input, options); - clast_pprint(stdout, root, 0, options); - - cloog_clast_free(root); - cloog_options_free(options) ; - cloog_state_free(state); - return 0; -@} -@end example - -@noindent The compilation command could be: -@example -gcc example.c -lcloog -o example -@end example -@noindent A calling command with the input file test.cloog could be: -@example -more test.cloog | ./example -@end example - - -@c % ******************************** HACKING ********************************* -@c @node Hacking -@c @chapter Hacking CLooG - -@c @menu -@c * Program organization:: -@c * Special Options:: -@c * CLooG Coding Standards:: -@c @end menu - -@c @node Program organization -@c @section Program organization - -@c @node Special Options -@c @section Special Options - -@c @node CLooG Coding Standards -@c @section CLooG Coding Standards - - -@c % ****************************** INSTALLING ******************************** -@node Installing -@chapter Installing CLooG - -@menu -* License:: -* Requirements:: -* Basic Installation:: -* Optional Features:: -* Uninstallation:: -@end menu - -@node License -@section License -First of all, it would be very kind to refer the following paper in any -publication that result from the use of the CLooG software or its library, -@pxref{Bas04} (a bibtex entry is provided behind the title page of this -manual, along with copyright notice, and in the CLooG home -@code{http://www.CLooG.org}. - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. -@code{http://www.gnu.org/licenses/lgpl-2.1.html} - -Note, though, that if you link CLooG against a GPL library such -as the PolyLib backend, then the combination becomes GPL too. -In particular, a CLooG library based on the PolyLib backend -is GPL version 2 only. -Since the isl backend is LGPL, linking against it does not affect -the license of CLooG. - - -@node Requirements -@section Requirements - -CLooG can be used with one of two possible backends, -one using isl and one using PolyLib. -The isl library is included in the CLooG distribution, -while the PolyLib library needs to be obtained separately. -On the other hand, isl requires GMP, while PolyLib can be -compiled with or without the use of GMP. -The user therefore needs to install at least one of -PolyLib or GMP. - -@menu -* PolyLib:: -* GMP Library:: -@end menu - - -@node PolyLib -@subsection PolyLib (optional) -To successfully install CLooG with the PolyLib backend, -the user first needs to install PolyLib -version 5.22.1 or above (default 64 bits version is satisfying -as well as 32 bits or GMP multiple precision version). -Polylib can be downloaded freely -at @code{http://icps.u-strasbg.fr/PolyLib/} or -@code{http://www.irisa.fr/polylib/}. Once downloaded and unpacked -(e.g. using the @samp{tar -zxvf polylib-5.22.3.tar.gz} command), -the user can compile -it by typing the following commands on the PolyLib's root directory: - -@itemize @bullet -@item @code{./configure} -@item @code{make} -@item And as root: @code{make install} -@end itemize - -Alternatively, the latest development version can be obtained from the -git repository: -@itemize @bullet -@item @code{git clone git://repo.or.cz/polylib.git} -@item @code{cd polylib} -@item @code{./autogen.sh} -@item @code{./configure} -@item @code{make} -@item And as root: @code{make install} -@end itemize - -The PolyLib default installation is @code{/usr/local}. This directory may -not be inside your library path. To fix the problem, the user should set -@example -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib -@end example -@noindent if your shell is, e.g., bash or -@example -setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH:/usr/local/lib -@end example -@noindent if your shell is, e.g., tcsh. Add the line to your .bashrc or .tcshrc (or -whatever convenient file) to make this change permanent. Another solution -is to ask PolyLib to install in the standard path by using the prefix -option of the configure script: -@samp{./configure --prefix=/usr}. - -CLooG makes intensive calls to polyhedral operations, and PolyLib -functions do the job. Polylib is a free library written in C for the -manipulation of polyhedra. The library is operating on objects like -vectors, matrices, lattices, polyhedra, Z-polyhedra, unions of -polyhedra and a lot of other intermediary structures. It provides -functions for all the important operations on these structures. - -@node GMP Library -@subsection GMP Library (optional) - -To be able to deal with insanely large coefficient, the user will need to -install the GNU Multiple Precision Library (GMP for short) version 4.1.4 -or above. It can be freely downloaded from @code{http://www.swox.com/gmp}. -Note that the isl backend currently requires GMP. -The user can compile GMP by typing the following commands on the GMP root -directory: - -@itemize @bullet -@item @code{./configure} -@item @code{make} -@item And as root: @code{make install} -@end itemize - -The GMP default installation is @code{/usr/local}, the same method to -fix a library path problem applies as with PolyLib (@pxref{PolyLib}). - -If you want to use the PolyLib backend, then -PolyLib has to be built using the GMP library by specifying the option -@samp{--with-libgmp=PATH_TO_GMP} to the PolyLib configure script -(where @code{PATH_TO_GMP} is @code{/usr/local} if you did not change the GMP -installation directory). Then you have to set the convenient CLooG configure -script options to build the GMP version (@pxref{Optional Features}). - - -@node Basic Installation -@section CLooG Basic Installation - -Once downloaded and unpacked -(e.g. using the @samp{tar -zxvf cloog-@value{VERSION}.tar.gz} command), -you can compile CLooG by typing the following commands on the CLooG's root -directory: - -@itemize @bullet -@item @code{./configure} -@item @code{make} -@item And as root: @code{make install} -@end itemize - -Alternatively, the latest development version can be obtained from the -git repository: -@itemize @bullet -@item @code{git clone git://repo.or.cz/cloog.git} -@item @code{cd cloog} -@item @code{./get_submodules.sh} -@item @code{./autogen.sh} -@item @code{./configure} -@item @code{make} -@item And as root: @code{make install} -@end itemize - -Depending on which backend you want to use and where they -are located, you may need to pass some -options to the configure script, @pxref{Optional Features}. - -The program binaries and object files can be removed from the -source code directory by typing @code{make clean}. To also remove the -files that the @code{configure} script created (so you can compile the -package for a different kind of computer) type @code{make distclean}. - -Both the CLooG software and library have been successfully compiled -on the following systems: -@itemize @bullet -@item PC's under Linux, with the @code{gcc} compiler, -@item PC's under Windows (Cygwin), with the @code{gcc} compiler, -@item Sparc and UltraSparc Stations, with the @code{gcc} compiler. -@end itemize - -@node Optional Features -@section Optional Features -The @code{configure} shell script attempts to guess correct values for -various system-dependent variables and user options used during compilation. -It uses those values to create the @code{Makefile}. Various user options -are provided by the CLooG's configure script. They are summarized in the -following list and may be printed by typing @code{./configure --help} in the -CLooG top-level directory. - -@itemize @bullet -@item By default, the installation directory is @code{/usr/local}: -@code{make install} will install the package's files in -@code{/usr/local/bin}, @code{/usr/local/lib} and @code{/usr/local/include}. -The user can specify an installation prefix other than @code{/usr/local} by -giving @code{configure} the option @code{--prefix=PATH}. - -@item By default, the isl backend will use the version of isl -that is @code{bundled} together with CLooG. -Using the @code{--with-isl} option of @code{configure} -the user can specify that @code{no} isl, -a previously installed (@code{system}) isl or a @code{build} isl -should be used. -In the latter case, the user should also specify the build location -using @code{--with-isl-builddir=PATH}. -In case of an installed isl, -the installation location can be specified using the -@code{--with-isl-prefix=PATH} and -@code{--with-isl-exec-prefix=PATH} options of @code{configure}. - -@item By default, the PolyLib backend will use an installed -(@code{system}) PolyLib, if any. -The installation location can be specified using the -@code{--with-polylib-prefix=PATH} and -@code{--with-polylib-exec-prefix=PATH} options of @code{configure}. -Using the @code{--with-polylib} option of @code{configure} -the user can specify that @code{no} PolyLib or a @code{build} PolyLib -should be used. -In the latter case, the user should also specify the build location -using @code{--with-polylib-builddir=PATH}. - -@item By default, the PolyLib backend of CLooG is built -in 64bits version if such version of the -PolyLib is found by @code{configure}. If the only existing version of the -PolyLib is the 32bits or if the user give to @code{configure} the option -@code{--with-bits=32}, the 32bits version of CLooG will be compiled. In the -same way, the option @code{--with-bits=gmp} have to be used to build -the multiple precision version. - -@item By default, @code{configure} will look for the GMP library -(necessary to build the multiple precision version) in standard -locations. If necessary, the user can specify the GMP path by giving -@code{configure} the option @code{--with-gmp-prefix=PATH} and/or -@code{--with-gmp-exec-prefix=PATH}. -@end itemize - -@node Uninstallation -@section Uninstallation -The user can easily remove the CLooG software and library from his system -by typing (as root if necessary) from the CLooG top-level directory -@code{make uninstall}. - -@c % **************************** DOCUMENTATION ****************************** -@node Documentation -@chapter Documentation -The CLooG distribution provides several documentation sources. First, the -source code itself is as documented as possible. The code comments use a -Doxygen-compatible presentation (something similar to what JavaDoc does for -JAVA). The user may install Doxygen -(see @code{http://www.stack.nl/~dimitri/doxygen}) to automatically -generate a technical documentation by typing @code{make doc} or -@code{doxygen ./autoconf/Doxyfile} at the CLooG top-level directory after -running the configure script (@pxref{Installing}). Doxygen will generate -documentation sources (in HTML, LaTeX and man) in the @code{doc/source} -directory of the CLooG distribution. - -The Texinfo sources of the present document are also provided in the @code{doc} -directory. You can build it in either DVI format (by typing -@code{texi2dvi cloog.texi}) or PDF format -(by typing @code{texi2pdf cloog.texi}) or HTML format -(by typing @code{makeinfo --html cloog.texi}, using @code{--no-split} -option to generate a single HTML file) or info format -(by typing @code{makeinfo cloog.texi}). - -@c % ****************************** REFERENCES ******************************** -@node References -@chapter References - -@itemize -@item -@anchor{Bas03a}[Bas03a] C. Bastoul, P. Feautrier. Improving data locality -by chunking. CC'12 International Conference on Compiler Construction, -LNCS 2622, pages 320-335, Warsaw, april 2003. - -@item -@anchor{Bas03b}[Bas03b] C. Bastoul. Efficient code generation for automatic -parallelization and optimization. ISPDC'03 IEEE International Symposium on -Parallel and Distributed Computing, pages 23-30, Ljubljana, october 2003. - -@item -@anchor{Bas04}[Bas04] C. Bastoul. Code Generation in the Polyhedral Model -Is Easier Than You Think. PACT'13 IEEE International Conference on Parallel -Architecture and Compilation Techniques, pages 7-16, Juan-les-Pins, -september 2004. - -@item -@anchor{Fea92}[Fea92] P. Feautrier Some efficient solutions to the affine -scheduling problem, part II: multidimensional time. -International Journal of Parallel Programming, 21(6):389--420, December 1992. - -@item -@anchor{Gri04}[Gri04] M. Griebl. Automatic parallelization of loop programs -for distributed memory architectures. Habilitation Thesis. Facult@"at f@"ur -Mathematik und Informatik, Universit@"at Passau, 2004. -@emph{http://www.infosun.fmi.uni-passau.de/cl/loopo/} - -@item -@anchor{Qui00}[Qui00] F. Quiller@'e, S. Rajopadhye, and D. Wilde. -Generation of efficient nested loops from polyhedra. -International Journal of Parallel Programming, 28(5):469-498, -october 2000. - -@item -@anchor{Wil93}[Wil93] Doran K. Wilde. -A library for doing polyhedral operations. -Technical Report 785, IRISA, Rennes, France, 1993. - -@end itemize - - - - -@c % /************************************************************************* -@c % * PART VI: END OF THE DOCUMENT * -@c % *************************************************************************/ -@c @unnumbered Index - -@c @printindex cp - -@bye diff --git a/cloog-0.16.3/doc/images/basic.eps b/cloog-0.16.3/doc/images/basic.eps deleted file mode 100644 index 0cc0497..0000000 --- a/cloog-0.16.3/doc/images/basic.eps +++ /dev/null @@ -1,402 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: basic.fig -%%Creator: fig2dev Version 3.2 Patchlevel 4 -%%CreationDate: Thu Nov 17 16:54:54 2005 -%%For: bastoul@ulysse.futurs.inria.fr (Cedric Bastoul) -%%BoundingBox: 0 0 445 301 -%%Magnification: 1.0000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save -newpath 0 301 moveto 0 0 lineto 445 0 lineto 445 301 lineto closepath clip newpath --153.0 333.0 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/reencdict 12 dict def /ReEncode { reencdict begin -/newcodesandnames exch def /newfontname exch def /basefontname exch def -/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def -basefontdict { exch dup /FID ne { dup /Encoding eq -{ exch dup length array copy newfont 3 1 roll put } -{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall -newfont /FontName newfontname put newcodesandnames aload pop -128 1 255 { newfont /Encoding get exch /.notdef put } for -newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat -newfontname newfont definefont pop end } def -/isovec [ -8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde -8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis -8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron -8#220 /dotlessi 8#230 /oe 8#231 /OE -8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling -8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis -8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot -8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus -8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph -8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine -8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf -8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute -8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring -8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute -8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute -8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve -8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply -8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex -8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave -8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring -8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute -8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute -8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve -8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide -8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex -8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def -/Times-Bold /Times-Bold-iso isovec ReEncode -/Times-Roman /Times-Roman-iso isovec ReEncode - /DrawEllipse { - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def - /savematrix mtrx currentmatrix def - x y tr xrad yrad sc 0 0 1 startangle endangle arc - closepath - savematrix setmatrix - } def - -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06000 0.06000 sc -% -% Fig objects follow -% -% -% here starts figure with depth 51 -% Polyline -n 4200 1500 m 4200 3900 l 8400 3900 l 6000 1500 l - cp gs col7 0.75 shd ef gr -% Ellipse -7.500 slw - [15 45] 45 sd -1 slc -n 5400 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6600 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 7200 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 7800 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 7200 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6600 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 5400 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 5400 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6600 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 5400 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 1500 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 1500 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 5400 1500 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 7800 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 8400 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 7200 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6600 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 1500 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Polyline -0 slc -gs clippath -9615 5160 m 9615 5040 l 9395 5040 l 9575 5100 l 9395 5160 l cp -eoclip -n 3000 5100 m - 9600 5100 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 9395 5160 m 9575 5100 l 9395 5040 l 9395 5160 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -3060 885 m 2940 885 l 2940 1105 l 3000 925 l 3060 1105 l cp -eoclip -n 3000 5100 m - 3000 900 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 3060 1105 m 3000 925 l 2940 1105 l 3060 1105 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -n 3000 4500 m - 2925 4500 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 3900 m - 2925 3900 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 3300 m - 2925 3300 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3600 5100 m - 3600 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 4200 5100 m - 4200 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 5400 5100 m - 5400 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 4800 5100 m - 4800 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 6000 5100 m - 6000 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 6600 5100 m - 6600 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 2700 m - 2925 2700 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 1500 m - 2925 1500 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 2100 m - 2925 2100 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline - [15 45] 45 sd -n 3000 1500 m - 9000 1500 l gs col0 s gr [] 0 sd -% Polyline - [15 45] 45 sd -n 8400 5100 m - 8400 900 l gs col0 s gr [] 0 sd -% Polyline -n 7200 5100 m - 7200 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 7800 5100 m - 7800 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 8400 5100 m - 8400 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline - [15 45] 45 sd -n 3000 3900 m - 9000 3900 l gs col0 s gr [] 0 sd -% Polyline - [15 45] 45 sd -n 5400 900 m - 9600 5100 l gs col0 s gr [] 0 sd -% Polyline - [15 45] 45 sd -n 4200 5100 m - 4200 900 l gs col0 s gr [] 0 sd -/Times-Bold-iso ff 390.00 scf sf -2625 4650 m -gs 1 -1 sc (1) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -2625 4050 m -gs 1 -1 sc (2) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -3525 5550 m -gs 1 -1 sc (1) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -2700 1050 m -gs 1 -1 sc (j) col0 sh gr -/Times-Roman-iso ff 390.00 scf sf -8025 825 m -gs 1 -1 sc (i<=n) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -4125 5550 m -gs 1 -1 sc (2) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -8325 5550 m -gs 1 -1 sc (n) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -2550 1575 m -gs 1 -1 sc (m) col0 sh gr -/Times-Roman-iso ff 390.00 scf sf -9075 3975 m -gs 1 -1 sc (j>=2) col0 sh gr -/Times-Roman-iso ff 390.00 scf sf -9075 1575 m -gs 1 -1 sc (j<=m) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -9450 5475 m -gs 1 -1 sc (i) col0 sh gr -/Times-Roman-iso ff 390.00 scf sf -3825 825 m -gs 1 -1 sc (i>=2) col0 sh gr -/Times-Roman-iso ff 390.00 scf sf -4875 825 m -gs 1 -1 sc (j<=n+2-i) col0 sh gr -% here ends figure; -$F2psEnd -rs -showpage diff --git a/cloog-0.16.3/doc/images/basic.fig b/cloog-0.16.3/doc/images/basic.fig deleted file mode 100644 index 7fe0a97..0000000 --- a/cloog-0.16.3/doc/images/basic.fig +++ /dev/null @@ -1,100 +0,0 @@ -#FIG 3.2 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 3900 75 75 5400 3900 5400 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 3900 75 75 4800 3900 4800 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 3300 75 75 4200 3300 4200 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 3300 75 75 4800 3300 4800 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 2700 75 75 4200 2700 4200 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 3900 75 75 4200 3900 4200 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 3900 75 75 6000 3900 6000 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 3900 75 75 6600 3900 6600 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7200 3900 75 75 7200 3900 7200 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7800 3900 75 75 7800 3900 7800 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7200 3300 75 75 7200 3300 7200 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 3300 75 75 6600 3300 6600 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 3300 75 75 6000 3300 6000 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 3300 75 75 5400 3300 5400 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 2700 75 75 4800 2700 4800 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 2700 75 75 5400 2700 5400 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 2700 75 75 6000 2700 6000 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 2700 75 75 6600 2700 6600 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 2100 75 75 6000 2100 6000 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 2100 75 75 5400 2100 5400 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 2100 75 75 4800 2100 4800 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 2100 75 75 4200 2100 4200 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 1500 75 75 4200 1500 4200 1575 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 1500 75 75 4800 1500 4800 1575 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 1500 75 75 5400 1500 5400 1575 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7800 3300 75 75 7800 3300 7800 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 8400 3900 75 75 8400 3900 8400 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7200 2700 75 75 7200 2700 7200 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 2100 75 75 6600 2100 6600 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 1500 75 75 6000 1500 6000 1575 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 120.00 180.00 - 3000 5100 9600 5100 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 120.00 180.00 - 3000 5100 3000 900 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 4500 2925 4500 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 3900 2925 3900 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 3300 2925 3300 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3600 5100 3600 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 4200 5100 4200 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 5400 5100 5400 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 4800 5100 4800 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 6000 5100 6000 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 6600 5100 6600 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 2700 2925 2700 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 1500 2925 1500 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 2100 2925 2100 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 3000 1500 9000 1500 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 8400 5100 8400 900 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 7200 5100 7200 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 7800 5100 7800 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 8400 5100 8400 5175 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 3000 3900 9000 3900 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 5400 900 9600 5100 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 4200 5100 4200 900 -2 3 0 0 0 7 51 -1 15 0.000 0 0 -1 0 0 5 - 4200 1500 4200 3900 8400 3900 6000 1500 4200 1500 -4 0 0 50 -1 2 26 0.0000 0 270 195 2625 4650 1\001 -4 0 0 50 -1 2 26 0.0000 0 270 195 2625 4050 2\001 -4 0 0 50 -1 2 26 0.0000 0 270 195 3525 5550 1\001 -4 0 0 50 -1 2 26 0.0000 0 345 135 2700 1050 j\001 -4 0 0 50 -1 0 26 0.0000 0 270 750 8025 825 i<=n\001 -4 0 0 50 -1 2 26 0.0000 0 270 195 4125 5550 2\001 -4 0 0 50 -1 2 26 0.0000 0 180 225 8325 5550 n\001 -4 0 0 50 -1 2 26 0.0000 0 180 330 2550 1575 m\001 -4 0 0 50 -1 0 26 0.0000 0 360 750 9075 3975 j>=2\001 -4 0 0 50 -1 0 26 0.0000 0 360 855 9075 1575 j<=m\001 -4 0 0 50 -1 2 26 0.0000 0 270 105 9450 5475 i\001 -4 0 0 50 -1 0 26 0.0000 0 270 750 3825 825 i>=2\001 -4 0 0 50 -1 0 26 0.0000 0 360 1410 4875 825 j<=n+2-i\001 diff --git a/cloog-0.16.3/doc/images/basic.jpg b/cloog-0.16.3/doc/images/basic.jpg deleted file mode 100644 index 995b1d816207e6585df9c61ea65745d38e0db845..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21180 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 p1w&AAuAuLkmzJ*pirpYk=2 - | | j<=n+2-i - | |\ | i<=n - | | \ | -m-+-****---+-j<=m - | ***** | - | ****** | - | *******| -2-+-********-j>=2 - | | |\ -0-+-+------+--->i - | | | - 0 2 n diff --git a/cloog-0.16.3/doc/images/tree.eps b/cloog-0.16.3/doc/images/tree.eps deleted file mode 100644 index d80f6e9..0000000 --- a/cloog-0.16.3/doc/images/tree.eps +++ /dev/null @@ -1,258 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: tree.eps -%%Creator: fig2dev Version 3.2 Patchlevel 3c -%%CreationDate: Fri Sep 6 10:09:40 2002 -%%For: bastoul@whisky (Cedric Bastoul) -%%BoundingBox: 0 0 388 312 -%%Magnification: 1.0000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save -newpath 0 312 moveto 0 0 lineto 388 0 lineto 388 312 lineto closepath clip newpath --165.0 369.0 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def - /DrawEllipse { - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def - /savematrix mtrx currentmatrix def - x y tr xrad yrad sc 0 0 1 startangle endangle arc - closepath - savematrix setmatrix - } def - -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -%%Page: 1 1 -10 setmiterlimit - 0.06000 0.06000 sc -% -% Fig objects follow -% -7.500 slw -% Ellipse -n 5400 1200 237 237 0 360 DrawEllipse gs col0 s gr - -% Ellipse -n 3000 3600 237 237 0 360 DrawEllipse gs col0 s gr - -% Ellipse -n 7800 3600 237 237 0 360 DrawEllipse gs col0 s gr - -% Ellipse -n 6600 4800 237 237 0 360 DrawEllipse gs col0 s gr - -% Ellipse -n 5400 2325 237 237 0 360 DrawEllipse gs col0 s gr - -% Polyline -gs clippath -5355 2115 m 5445 2115 l 5445 1888 l 5400 2068 l 5355 1888 l cp -eoclip -n 5400 1425 m - 5400 2100 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 5355 1888 m 5400 2068 l 5445 1888 l 5355 1888 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -5355 3390 m 5445 3390 l 5445 3163 l 5400 3343 l 5355 3163 l cp -eoclip -n 5400 2550 m - 5400 3375 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 5355 3163 m 5400 3343 l 5445 3163 l 5355 3163 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -2955 4590 m 3045 4590 l 3045 4363 l 3000 4543 l 2955 4363 l cp -eoclip -n 3000 3825 m - 3000 4575 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 2955 4363 m 3000 4543 l 3045 4363 l 2955 4363 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -6563 4544 m 6611 4621 l 6803 4500 l 6627 4558 l 6755 4424 l cp -eoclip -n 7800 3825 m - 6600 4575 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 6755 4424 m 6627 4558 l 6803 4500 l 6755 4424 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -8988 4621 m 9036 4544 l 8844 4424 l 8973 4558 l 8796 4500 l cp -eoclip -n 7800 3825 m - 9000 4575 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 8796 4500 m 8973 4558 l 8844 4424 l 8796 4500 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -6555 5790 m 6645 5790 l 6645 5563 l 6600 5743 l 6555 5563 l cp -eoclip -n 6600 5025 m - 6600 5775 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 6555 5563 m 6600 5743 l 6645 5563 l 6555 5563 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -7802 3411 m 7831 3326 l 7615 3253 l 7772 3354 l 7587 3338 l cp -eoclip -n 5400 2550 m - 7803 3364 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 7587 3338 m 7772 3354 l 7615 3253 l 7587 3338 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -2971 3337 m 3000 3422 l 3215 3348 l 3031 3364 l 3186 3262 l cp -eoclip -n 5400 2550 m - 3000 3375 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 3186 3262 m 3031 3364 l 3215 3348 l 3186 3262 l cp gs 0.00 setgray ef gr col0 s -/Times-Roman ff 330.00 scf sf -3075 4200 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -6675 5400 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -5475 3000 m -gs 1 -1 sc (1) col0 sh gr -/Times-Roman ff 330.00 scf sf -3825 3000 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -6900 3000 m -gs 1 -1 sc (2) col0 sh gr -/Times-Roman ff 330.00 scf sf -6975 4200 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -8475 4200 m -gs 1 -1 sc (1) col0 sh gr -/Times-Roman ff 330.00 scf sf -5475 1800 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -2850 4950 m -gs 1 -1 sc (S1) col0 sh gr -/Times-Roman ff 330.00 scf sf -5250 3750 m -gs 1 -1 sc (S2) col0 sh gr -/Times-Roman ff 330.00 scf sf -6450 6150 m -gs 1 -1 sc (S3) col0 sh gr -/Times-Roman ff 330.00 scf sf -8850 4950 m -gs 1 -1 sc (S4) col0 sh gr -/Times-Roman ff 330.00 scf sf -5355 2430 m -gs 1 -1 sc (i) col0 sh gr -/Times-Roman ff 330.00 scf sf -2963 3667 m -gs 1 -1 sc (j) col0 sh gr -/Times-Roman ff 330.00 scf sf -7763 3675 m -gs 1 -1 sc (j) col0 sh gr -/Times-Roman ff 330.00 scf sf -6533 4890 m -gs 1 -1 sc (k) col0 sh gr -$F2psEnd -rs diff --git a/cloog-0.16.3/doc/images/tree.fig b/cloog-0.16.3/doc/images/tree.fig deleted file mode 100644 index 9c202bb..0000000 --- a/cloog-0.16.3/doc/images/tree.fig +++ /dev/null @@ -1,54 +0,0 @@ -#FIG 3.2 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 5400 1200 237 237 5400 1200 5625 1275 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 3000 3600 237 237 3000 3600 3225 3675 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 7800 3600 237 237 7800 3600 8025 3675 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 6600 4800 237 237 6600 4800 6825 4875 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 5400 2325 237 237 5400 2325 5625 2400 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 5400 1425 5400 2100 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 5400 2550 5400 3375 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 3000 3825 3000 4575 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 7800 3825 6600 4575 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 7800 3825 9000 4575 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 6600 5025 6600 5775 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 5400 2550 7803 3364 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 5400 2550 3000 3375 -4 0 0 50 0 0 22 0.0000 0 225 150 3075 4200 0\001 -4 0 0 50 0 0 22 0.0000 0 225 150 6675 5400 0\001 -4 0 0 50 0 0 22 0.0000 0 225 150 5475 3000 1\001 -4 0 0 50 0 0 22 0.0000 0 225 150 3825 3000 0\001 -4 0 0 50 0 0 22 0.0000 0 225 150 6900 3000 2\001 -4 0 0 50 0 0 22 0.0000 0 225 150 6975 4200 0\001 -4 0 0 50 0 0 22 0.0000 0 225 150 8475 4200 1\001 -4 0 0 50 0 0 22 0.0000 0 225 150 5475 1800 0\001 -4 0 0 50 0 0 22 0.0000 0 225 345 2850 4950 S1\001 -4 0 0 50 0 0 22 0.0000 0 225 345 5250 3750 S2\001 -4 0 0 50 0 0 22 0.0000 0 225 345 6450 6150 S3\001 -4 0 0 50 0 0 22 0.0000 0 225 345 8850 4950 S4\001 -4 0 0 50 0 0 22 0.0000 0 225 90 5355 2430 i\001 -4 0 0 50 0 0 22 0.0000 0 300 90 2963 3667 j\001 -4 0 0 50 0 0 22 0.0000 0 300 90 7763 3675 j\001 -4 0 0 50 0 0 22 0.0000 0 225 150 6533 4890 k\001 diff --git a/cloog-0.16.3/doc/images/tree.jpg b/cloog-0.16.3/doc/images/tree.jpg deleted file mode 100644 index 7329268b65736eafa7d05bbd39135092db60da2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13713 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 diff --git a/cloog-0.16.3/doc/images/tree.pdf b/cloog-0.16.3/doc/images/tree.pdf deleted file mode 100644 index 7569edebb461590b8208c320a8e109fd4a44c25c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4558 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 Qniv@vaH*=g`nz!f04+F%L;wH) diff --git a/cloog-0.16.3/doc/images/tree.txt b/cloog-0.16.3/doc/images/tree.txt deleted file mode 100644 index 7bcfef2..0000000 --- a/cloog-0.16.3/doc/images/tree.txt +++ /dev/null @@ -1,25 +0,0 @@ - * - | - |0 - | - V - i - | - +-----+-----+ - | | | - |0 |1 |2 - | | | - V V V - j S2 j - | | - |0 +--+--+ - | | | - V |0 |1 - S1 | | - V V - k S4 - | - |0 - | - V - S3 diff --git a/cloog-0.16.3/examples/README b/cloog-0.16.3/examples/README deleted file mode 100644 index 1a9881e..0000000 --- a/cloog-0.16.3/examples/README +++ /dev/null @@ -1,58 +0,0 @@ -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** Library use examples ** -# **-------------------------------------------------------------------** -# ** First version of this file: july 15th 2003 ** -# **-------------------------------------------------------------------**/ -# - - -In this directory are presented various examples of how to use the CLooG -library. For each case, you will need to edit the makefile file according to -your system, in particular you will have to set where your CLooG library has -been installed, and where are the CLooG header files. Don't forget to update -your LD_LIBRARY_PATH environment variable to reach the CLooG library. If you -performed the default installation of CLooG, the library is in /usr/local/lib -thus you need to set LD_LIBRARY_PATH thanks to one of the following command: -'setenv LD_LIBRARY_PATH /usr/local/lib' for tcsh-like shells, or -'export LD_LIBRARY_PATH=/usr/local/lib' for bash-like shells. - -For any problem: . - - -# **-------------------------------------------------------------------** -# ** I. Example ** -# **-------------------------------------------------------------------**/ - - -This example program creates a simple CLooG-like loop generation program in a -few lines. The input problem has to be given on standard input. We can test it -for instance by typing 'more FILE.cloog | ./example' (or example.exe under -Cygwin). - - -# **-------------------------------------------------------------------** -# ** II. cloog2loopgen ** -# **-------------------------------------------------------------------**/ - -NO MORE EXISTS ! - -This example creates a program converting a CLooG input file to a LoopGen input -file. This can be useful to compare the two tools (I do not support LoopGen, -don't ask me if you find some bugs !). The usage of the created tool is: -'cloog2loopgen input_file output_file'. - - -# **-------------------------------------------------------------------** -# ** III. cloog2Omega ** -# **-------------------------------------------------------------------**/ - - -NO MORE EXISTS ! - -This example creates a program converting a CLooG input file to an Omega -CodeGen input file. This can be useful to compare the two tools (I do not -support CodeGen, don't ask me if you find some bugs !). The usage of the -created tool is: 'cloog2omega input_file output_file'. diff --git a/cloog-0.16.3/examples/example/Makefile b/cloog-0.16.3/examples/example/Makefile deleted file mode 100644 index 9b6150b..0000000 --- a/cloog-0.16.3/examples/example/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Please enter here the locations for CloogLib include and libraries if they -# aren't the default values (/usr/lib and /usr/include). -CLOOG_INC = $(HOME)/progs/linux/include -CLOOG_LIB = $(HOME)/progs/linux/lib - -CC = gcc -LDLIBS= -lcloog -CFLAGS= -I $(CLOOG_INC) -L $(CLOOG_LIB) - - -example: example.c - @echo " /*-----------------------------------------------*" - @echo " * Making example *" - @echo " *-----------------------------------------------*/" - $(CC) example.c -o example $(CFLAGS) $(LDLIBS) - -clean: - @echo " /*-----------------------------------------------*" - @echo " * Cleaning example *" - @echo " *-----------------------------------------------*/" - -rm -f example example.exe core diff --git a/cloog-0.16.3/examples/example/example.c b/cloog-0.16.3/examples/example/example.c deleted file mode 100644 index 403d213..0000000 --- a/cloog-0.16.3/examples/example/example.c +++ /dev/null @@ -1,29 +0,0 @@ -/* This is a very simple example of how to use the CLooGLib inside your - * programs. You should compile it by typing 'make' (after edition of the - * makefile), then test it for instance by typing - * 'more FILE.cloog | ./example' (or example.exe under Cygwin). - */ - -# include -# include - -int main() -{ - CloogState *state; - CloogInput *input; - CloogOptions * options ; - struct clast_stmt *root; - - state = cloog_state_malloc(); - options = cloog_options_malloc(state); - input = cloog_input_read(stdin, options); - - root = cloog_clast_create_from_input(input, options); - clast_pprint(stdout, root, 0, options); - - cloog_clast_free(root); - cloog_options_free(options) ; - cloog_state_free(state); - - return 0 ; -} diff --git a/cloog-0.16.3/genversion.sh.in b/cloog-0.16.3/genversion.sh.in deleted file mode 100755 index 77c04d7..0000000 --- a/cloog-0.16.3/genversion.sh.in +++ /dev/null @@ -1,15 +0,0 @@ -#! /bin/sh -srcdir=@abs_srcdir@ -PACKAGE=@PACKAGE@ -VERSION=@VERSION@ - -if test -f $srcdir/.git/HEAD; then - GIT_REPO="$srcdir/.git" - GIT_HEAD_ID=`GIT_DIR=$GIT_REPO git describe` -elif test -f $srcdir/CLOOG_HEAD; then - GIT_HEAD_ID=`cat $srcdir/CLOOG_HEAD` -else - GIT_HEAD_ID="$PACKAGE-$VERSION-UNKNOWN" -fi - -echo $GIT_HEAD_ID | sed -e 's/cloog-//' diff --git a/cloog-0.16.3/include/cloog/block.h b/cloog-0.16.3/include/cloog/block.h deleted file mode 100644 index 95f2a44..0000000 --- a/cloog-0.16.3/include/cloog/block.h +++ /dev/null @@ -1,117 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** block.h ** - **-------------------------------------------------------------------** - ** First version: June 11th 2005 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_BLOCK_H -#define CLOOG_BLOCK_H -#if defined(__cplusplus) -extern "C" - { -#endif - - -/** - * CloogBlock structure: - * this structure contains the informations of a statement block. It may happen - * that users are lazy enough to ask CLooG to generate the code for statements - * with exactly the same domain/scattering pair (possibly differing by only one - * constant) instead of giving only one pair. CLooG provides them a last chance - * to save time and memory by trying to find these blocks itself. The block - * contains the statement list and the common informations of the statements. - * This structure contains also the number of existing active references to it: - * because CLooG uses many copies of blocks there is no need to actually copy - * these blocks but just to return a pointer to them and to increment the number - * of active references. Each time a CloogBlock will be freed, we will decrement - * the active reference counter and actually free it if its value is zero. - */ -struct cloogblock -{ - CloogState *state; /**< State. */ - CloogStatement * statement ; /**< The list of statements in the block. */ - int nb_scaldims ; /**< Number of scalar dimensions. */ - cloog_int_t *scaldims; /**< Scalar dimension values. */ - int depth ; /**< Original block depth (outer loop number).*/ - int references ; /**< Number of references to this structure. */ - void * usr; /**< User field, for library user convenience. - * This pointer is not freed when the - * CloogBlock structure is freed. - */ -} ; -typedef struct cloogblock CloogBlock ; - - -/** - * CloogBlockList structure: - * this structure reprensents a node of a linked list of CloogBlock structures. - */ -struct cloogblocklist -{ CloogBlock * block ; /**< An element of the list. */ - struct cloogblocklist * next ;/**< Pointer to the next element of the list.*/ -} ; -typedef struct cloogblocklist CloogBlockList ; - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void cloog_block_print_structure(FILE *, CloogBlock *, int) ; -void cloog_block_print(FILE *, CloogBlock *) ; -void cloog_block_list_print(FILE *, CloogBlockList *) ; - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ -void cloog_block_free(CloogBlock *) ; -void cloog_block_list_free(CloogBlockList *) ; - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -CloogBlock * cloog_block_malloc(CloogState *state); -CloogBlock * cloog_block_alloc(CloogStatement *statement, int nb_scaldims, - cloog_int_t *scaldims, int depth); -CloogBlockList * cloog_block_list_malloc(void); -CloogBlockList * cloog_block_list_alloc(CloogBlock *) ; -CloogBlock * cloog_block_copy(CloogBlock * block) ; -void cloog_block_merge(CloogBlock *, CloogBlock *) ; - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ - diff --git a/cloog-0.16.3/include/cloog/clast.h b/cloog-0.16.3/include/cloog/clast.h deleted file mode 100644 index b455369..0000000 --- a/cloog-0.16.3/include/cloog/clast.h +++ /dev/null @@ -1,154 +0,0 @@ -#ifndef CLOOG_CLAST_H -#define CLOOG_CLAST_H -#if defined(__cplusplus) -extern "C" - { -#endif - -enum clast_expr_type { - clast_expr_name, - clast_expr_term, - clast_expr_bin, - clast_expr_red -}; -struct clast_expr { - enum clast_expr_type type; -}; - -struct clast_name { - struct clast_expr expr; - const char * name; -}; - -/* Represents the term - * val * var (if var != NULL) - * or - * val (if var == NULL) - */ -struct clast_term { - struct clast_expr expr; - cloog_int_t val; - struct clast_expr *var; -}; - -enum clast_red_type { clast_red_sum, clast_red_min, clast_red_max }; -struct clast_reduction { - struct clast_expr expr; - enum clast_red_type type; - int n; - struct clast_expr* elts[1]; -}; - -enum clast_bin_type { clast_bin_fdiv, clast_bin_cdiv, - clast_bin_div, clast_bin_mod }; -struct clast_binary { - struct clast_expr expr; - enum clast_bin_type type; - struct clast_expr* LHS; - cloog_int_t RHS; -}; - -struct clast_stmt; -struct clast_stmt_op { - void (*free)(struct clast_stmt *); -}; - -#define CLAST_STMT_IS_A(stmt, type) ((stmt)->op == &(type)) - -extern const struct clast_stmt_op stmt_root; -extern const struct clast_stmt_op stmt_ass; -extern const struct clast_stmt_op stmt_user; -extern const struct clast_stmt_op stmt_block; -extern const struct clast_stmt_op stmt_for; -extern const struct clast_stmt_op stmt_guard; - -struct clast_stmt { - const struct clast_stmt_op *op; - struct clast_stmt *next; -}; - -struct clast_root { - struct clast_stmt stmt; - CloogNames * names; /**< Names of iterators and parameters. */ -}; - -struct clast_assignment { - struct clast_stmt stmt; - const char * LHS; - struct clast_expr * RHS; -}; - -struct clast_block { - struct clast_stmt stmt; - struct clast_stmt * body; -}; - -struct clast_user_stmt { - struct clast_stmt stmt; - CloogDomain * domain; - CloogStatement * statement; - struct clast_stmt * substitutions; -}; - -struct clast_for { - struct clast_stmt stmt; - CloogDomain * domain; - const char * iterator; - struct clast_expr * LB; - struct clast_expr * UB; - cloog_int_t stride; - struct clast_stmt * body; -}; - -struct clast_equation { - struct clast_expr * LHS; - struct clast_expr * RHS; - int sign; -}; - -struct clast_guard { - struct clast_stmt stmt; - struct clast_stmt * then; - int n; - struct clast_equation eq[1]; -}; - - -struct clast_stmt *cloog_clast_create_from_input(CloogInput *input, - CloogOptions *options); -struct clast_stmt *cloog_clast_create(CloogProgram *program, - CloogOptions *options); -void cloog_clast_free(struct clast_stmt *s); - -struct clast_name *new_clast_name(const char *name); -struct clast_term *new_clast_term(cloog_int_t c, struct clast_expr *v); -struct clast_binary *new_clast_binary(enum clast_bin_type t, - struct clast_expr *lhs, cloog_int_t rhs); -struct clast_reduction *new_clast_reduction(enum clast_red_type t, int n); -struct clast_root *new_clast_root(CloogNames *names); -struct clast_assignment *new_clast_assignment(const char *lhs, - struct clast_expr *rhs); -struct clast_user_stmt *new_clast_user_stmt(CloogDomain *domain, - CloogStatement *stmt, struct clast_stmt *subs); -struct clast_block *new_clast_block(void); -struct clast_for *new_clast_for(CloogDomain *domain, const char *it, - struct clast_expr *LB, struct clast_expr *UB, - CloogStride *stride); -struct clast_guard *new_clast_guard(int n); - -void free_clast_name(struct clast_name *t); -void free_clast_term(struct clast_term *t); -void free_clast_binary(struct clast_binary *b); -void free_clast_reduction(struct clast_reduction *r); -void free_clast_expr(struct clast_expr *e); -void free_clast_stmt(struct clast_stmt *s); - -int clast_expr_equal(struct clast_expr *e1, struct clast_expr *e2); - -struct clast_expr *clast_bound_from_constraint(CloogConstraint *constraint, - int level, CloogNames *names); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.16.3/include/cloog/cloog.h b/cloog-0.16.3/include/cloog/cloog.h deleted file mode 100644 index a8c3f28..0000000 --- a/cloog-0.16.3/include/cloog/cloog.h +++ /dev/null @@ -1,62 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** cloog.h ** - **-------------------------------------------------------------------** - ** First version: july 25th 2002 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - -/****************************************************************************** - * THIS FILE HAS BEEN AUTOMATICALLY GENERATED FROM clooh.h.in BY configure * - ******************************************************************************/ - -#ifndef CLOOG_H -#define CLOOG_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#endif /* !CLOOG_H */ diff --git a/cloog-0.16.3/include/cloog/constraints.h b/cloog-0.16.3/include/cloog/constraints.h deleted file mode 100644 index 4818c4c..0000000 --- a/cloog-0.16.3/include/cloog/constraints.h +++ /dev/null @@ -1,121 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** constraints.h ** - **-------------------------------------------------------------------** - ** First version: april 17th 2005 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_CONSTRAINTS_H -#define CLOOG_CONSTRAINTS_H - -struct cloogconstraint; -typedef struct cloogconstraint CloogConstraint; -struct cloogconstraintset; -typedef struct cloogconstraintset CloogConstraintSet; -struct cloogequalities; -typedef struct cloogequalities CloogEqualities; - -#if defined(__cplusplus) -extern "C" - { -#endif - -/****************************************************************************** - * Equalities spreading functions * - ******************************************************************************/ -CloogEqualities *cloog_equal_alloc(int n, int nb_levels, - int nb_parameters); -void cloog_equal_free(CloogEqualities *equal); -int cloog_equal_count(CloogEqualities *equal); -int cloog_equal_type(CloogEqualities *equal, int level); -void cloog_equal_del(CloogEqualities *equal, int level); -int cloog_equal_total_dimension(CloogEqualities *equal); - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -void cloog_constraint_set_normalize(CloogConstraintSet *, int); -void cloog_constraint_set_free(CloogConstraintSet *); -int cloog_constraint_set_contains_level(CloogConstraintSet *constraints, - int level, int nb_parameters); -int cloog_constraint_set_total_dimension(CloogConstraintSet *constraints); -int cloog_constraint_set_n_iterators(CloogConstraintSet *constraints, - int nb_parameters); -CloogConstraintSet *cloog_constraint_set_copy(CloogConstraintSet *); -CloogConstraintSet *cloog_constraint_set_simplify(CloogConstraintSet *, CloogEqualities *, int, int); - -int cloog_constraint_needs_reduction(CloogConstraint *upper, int level); -CloogConstraintSet *cloog_constraint_set_for_reduction(CloogConstraint *upper, - CloogConstraint *lower); -CloogConstraintSet *cloog_constraint_set_reduce(CloogConstraintSet *constraints, - int level, CloogEqualities *equal, int nb_par, cloog_int_t *bound); -int cloog_constraint_set_foreach_constraint(CloogConstraintSet *constraints, - int (*fn)(CloogConstraint *constraint, void *user), void *user); -int cloog_constraint_is_valid(CloogConstraint *constraint); -CloogConstraint *cloog_constraint_copy(CloogConstraint *constraint); -void cloog_constraint_release(CloogConstraint *constraint); -CloogConstraint *cloog_constraint_invalid(void); -int cloog_constraint_total_dimension(CloogConstraint *constraint); - -CloogConstraint *cloog_equal_constraint(CloogEqualities *equal, int j); -void cloog_equal_add(CloogEqualities *equal, - CloogConstraintSet *constraints, - int level, CloogConstraint *line, int nb_par); - -CloogConstraint *cloog_constraint_set_defining_equality( - CloogConstraintSet *constraints, int level); -CloogConstraint *cloog_constraint_set_defining_inequalities( - CloogConstraintSet *constraints, - int level, CloogConstraint **lower, int nb_parameters); -int cloog_constraint_involves(CloogConstraint *constraint, int v); -int cloog_constraint_is_lower_bound(CloogConstraint *constraint, int v); -int cloog_constraint_is_upper_bound(CloogConstraint *constraint, int v); -int cloog_constraint_is_equality(CloogConstraint *constraint); -void cloog_constraint_constant_get(CloogConstraint *constraint, - cloog_int_t *val); -void cloog_constraint_coefficient_get(CloogConstraint *constraint, - int var, cloog_int_t *val); -void cloog_constraint_coefficient_set(CloogConstraint *constraint, - int var, cloog_int_t val); -void cloog_constraint_copy_coefficients(CloogConstraint *constraint, - cloog_int_t *dst); -CloogConstraintSet *cloog_constraint_set_drop_constraint( - CloogConstraintSet *constraints, CloogConstraint *constraint); - -struct clast_expr *cloog_constraint_variable_expr(CloogConstraint *constraint, - int level, CloogNames *names); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.16.3/include/cloog/domain.h b/cloog-0.16.3/include/cloog/domain.h deleted file mode 100644 index 65fda66..0000000 --- a/cloog-0.16.3/include/cloog/domain.h +++ /dev/null @@ -1,172 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** domain.h ** - **-------------------------------------------------------------------** - ** First version: october 28th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_DOMAIN_H -#define CLOOG_DOMAIN_H -#if defined(__cplusplus) -extern "C" - { -#endif - - -struct cloogdomain; -typedef struct cloogdomain CloogDomain ; -struct cloogscattering; -typedef struct cloogscattering CloogScattering; - - -/** - * CloogDomainList structure: - * this structure reprensents a node of a linked list of CloogDomain structures. - */ -struct cloogdomainlist { - CloogDomain *domain; /**< An element of the list. */ - struct cloogdomainlist *next;/**< Pointer to the next element of the list.*/ -} ; -typedef struct cloogdomainlist CloogDomainList; - - -/** - * CloogScatteringList structure: - * this structure reprensents a node of a linked list of CloogScattering structures. - */ -struct cloogscatteringlist { - CloogScattering *scatt; /**< An element of the list. */ - struct cloogscatteringlist *next;/**< Pointer to the next element of the list.*/ -} ; -typedef struct cloogscatteringlist CloogScatteringList; - - -/****************************************************************************** - * PolyLib interface * - ******************************************************************************/ -void cloog_domain_print_constraints(FILE *, CloogDomain *, - int print_number); -void cloog_scattering_print_constraints(FILE *, CloogScattering *); -void cloog_domain_free(CloogDomain *) ; -void cloog_scattering_free(CloogScattering *); -CloogDomain * cloog_domain_copy(CloogDomain *) ; -CloogDomain * cloog_domain_convex(CloogDomain * Pol) ; -CloogDomain * cloog_domain_simple_convex(CloogDomain * domain); -CloogDomain * cloog_domain_simplify(CloogDomain *, CloogDomain *) ; -CloogDomain * cloog_domain_union(CloogDomain *, CloogDomain *) ; -CloogDomain * cloog_domain_intersection(CloogDomain *, CloogDomain *) ; -CloogDomain * cloog_domain_difference(CloogDomain *, CloogDomain *) ; -void cloog_domain_sort(CloogDomain**,unsigned,unsigned,int *); -int cloog_domain_follows(CloogDomain *dom1, CloogDomain *dom2, unsigned level); -CloogDomain * cloog_domain_empty(CloogDomain *model); -int cloog_domain_is_bounded(CloogDomain *dim, unsigned level); -CloogDomain *cloog_domain_bound_splitter(CloogDomain *dom, int level); - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void cloog_domain_print_structure(FILE *file, CloogDomain *domain, int level, - const char *name); - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ -void cloog_domain_list_free(CloogDomainList *); -void cloog_scattering_list_free(CloogScatteringList *); - - -/*+**************************************************************************** - * Reading function * - ******************************************************************************/ -CloogDomain * cloog_domain_read_context(CloogState *state, FILE * foo); -CloogDomain * cloog_domain_union_read(CloogState *state, FILE *foo, int nb_par); -CloogScattering *cloog_domain_read_scattering(CloogDomain *domain, FILE *foo); - -CloogDomain * cloog_domain_from_cloog_matrix(CloogState *state, - CloogMatrix *matrix, int nb_par); -CloogScattering * cloog_scattering_from_cloog_matrix(CloogState *state, - CloogMatrix *matrix, int nb_scat, int nb_par); - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -CloogConstraintSet *cloog_domain_constraints(CloogDomain *); -int cloog_domain_isempty(CloogDomain *) ; -CloogDomain * cloog_domain_universe(CloogState *state, unsigned dim); -CloogDomain * cloog_domain_project(CloogDomain *, int); -CloogDomain * cloog_domain_extend(CloogDomain *, int); -int cloog_domain_never_integral(CloogDomain *) ; -void cloog_domain_stride(CloogDomain *, int, cloog_int_t *, cloog_int_t *); -int cloog_domain_can_stride(CloogDomain *domain, int level); -int cloog_domain_is_otl(CloogDomain *domain, int level); -CloogDomain * cloog_domain_stride_lower_bound(CloogDomain *domain, int level, - CloogStride *stride); -CloogDomain * cloog_domain_add_stride_constraint(CloogDomain *domain, - CloogStride *stride); -int cloog_domain_can_unroll(CloogDomain *domain, int level, - cloog_int_t *n, CloogConstraint **lb); -CloogDomain * cloog_domain_fixed_offset(CloogDomain *domain, int level, - CloogConstraint *lb, cloog_int_t offset); -int cloog_domain_lazy_disjoint(CloogDomain *, CloogDomain *) ; -int cloog_domain_lazy_equal(CloogDomain *, CloogDomain *) ; -int cloog_scattering_lazy_block(CloogScattering *, CloogScattering *, - CloogScatteringList *, int); -int cloog_scattering_lazy_isscalar(CloogScattering *, int, - cloog_int_t *); -int cloog_domain_lazy_isconstant(CloogDomain *domain, int dimension, - cloog_int_t *value); -int cloog_scattering_list_lazy_same(CloogScatteringList *); -CloogDomain * cloog_domain_cut_first(CloogDomain *domain, CloogDomain **rest); -CloogDomain * cloog_domain_simplify_union(CloogDomain *domain); -CloogScattering * cloog_scattering_erase_dimension(CloogScattering *, int); - -int cloog_domain_dimension(CloogDomain *) ; -int cloog_domain_parameter_dimension(CloogDomain *domain); -int cloog_scattering_dimension(CloogScattering *, CloogDomain *); -int cloog_domain_isconvex(CloogDomain *) ; -CloogDomain * cloog_domain_cube(CloogState *state, - int dim, cloog_int_t min, cloog_int_t max); -CloogDomain * cloog_domain_from_context(CloogDomain *context); -CloogDomain * cloog_domain_scatter(CloogDomain *domain, CloogScattering *scatt); -int cloog_scattering_fully_specified(CloogScattering *scattering, - CloogDomain *domain); - -CloogStride *cloog_domain_list_stride(CloogDomainList *list, int level); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.16.3/include/cloog/input.h b/cloog-0.16.3/include/cloog/input.h deleted file mode 100644 index 4ad59fa..0000000 --- a/cloog-0.16.3/include/cloog/input.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef CLOOG_INPUT_H -#define CLOOG_INPUT_H - -#if defined(__cplusplus) -extern "C" { -#endif - -struct clooginput { - CloogDomain *context; - CloogUnionDomain *ud; -}; -typedef struct clooginput CloogInput; - -CloogInput *cloog_input_read(FILE *file, CloogOptions *options); -CloogInput *cloog_input_alloc(CloogDomain *context, CloogUnionDomain *ud); -void cloog_input_free(CloogInput *input); - -void cloog_input_dump_cloog(FILE *file, CloogInput *input, CloogOptions *opt); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/include/cloog/int.h b/cloog-0.16.3/include/cloog/int.h deleted file mode 100644 index 623a1cb..0000000 --- a/cloog-0.16.3/include/cloog/int.h +++ /dev/null @@ -1,174 +0,0 @@ -#ifndef CLOOG_INT_H -#define CLOOG_INT_H - -#include -#include -#if defined(CLOOG_INT_GMP) -#include -#include -#ifndef mp_get_memory_functions -void mp_get_memory_functions( - void *(**alloc_func_ptr) (size_t), - void *(**realloc_func_ptr) (void *, size_t, size_t), - void (**free_func_ptr) (void *, size_t)); -#endif -#endif - -#if defined(__cplusplus) -extern "C" - { -#endif - -#if defined(CLOOG_INT_INT) -typedef int cloog_int_t; -#define CLOOG_INT_FORMAT "%d" -#elif defined(CLOOG_INT_LONG) -typedef long cloog_int_t; -#define CLOOG_INT_FORMAT "%ld" -#elif defined(CLOOG_INT_LONG_LONG) -typedef long long cloog_int_t; -#define CLOOG_INT_FORMAT "%lld" -#elif defined(CLOOG_INT_GMP) -typedef mpz_t cloog_int_t; -#else -#error "No integer type defined" -#endif - -#if defined(CLOOG_INT_GMP) - -#define cloog_int_init(i) mpz_init(i) -#define cloog_int_clear(i) mpz_clear(i); - -#define cloog_int_set(r,i) mpz_set(r,i) -#define cloog_int_set_si(r,i) mpz_set_si(r,i) -#define cloog_int_abs(r,i) mpz_abs(r,i) -#define cloog_int_neg(r,i) mpz_neg(r,i) -#define cloog_int_swap(i,j) mpz_swap(i,j) - -#define cloog_int_add(r,i,j) mpz_add(r,i,j) -#define cloog_int_add_ui(r,i,j) mpz_add_ui(r,i,j) -#define cloog_int_sub(r,i,j) mpz_sub(r,i,j) -#define cloog_int_sub_ui(r,i,j) mpz_sub_ui(r,i,j) -#define cloog_int_mul(r,i,j) mpz_mul(r,i,j) -#define cloog_int_addmul(r,i,j) mpz_addmul(r,i,j) -#define cloog_int_divexact(r,i,j) mpz_divexact(r,i,j) -#define cloog_int_tdiv_q(r,i,j) mpz_tdiv_q(r,i,j) -#define cloog_int_fdiv_q(r,i,j) mpz_fdiv_q(r,i,j) -#define cloog_int_fdiv_r(r,i,j) mpz_fdiv_r(r,i,j) -#define cloog_int_cdiv_q(r,i,j) mpz_cdiv_q(r,i,j) -#define cloog_int_gcd(r,i,j) mpz_gcd(r,i,j) - -#define cloog_int_sgn(i) mpz_sgn(i) -#define cloog_int_cmp(i,j) mpz_cmp(i,j) -#define cloog_int_abs_cmp(i,j) mpz_cmpabs(i,j) -#define cloog_int_cmp_si(i,si) mpz_cmp_si(i,si) -#define cloog_int_eq(i,j) (mpz_cmp(i,j) == 0) -#define cloog_int_ne(i,j) (mpz_cmp(i,j) != 0) -#define cloog_int_gt(i,j) (mpz_cmp(i,j) > 0) - -#define cloog_int_is_divisible_by(i,j) mpz_divisible_p(i,j) - -#define cloog_int_read(r,s) mpz_set_str(r,s,10) -typedef void (*cloog_int_print_gmp_free_t)(void *, size_t); -#define cloog_int_print(out,i) \ - do { \ - char *s; \ - cloog_int_print_gmp_free_t gmp_free; \ - s = mpz_get_str(0, 10, i); \ - fprintf(out, "%s", s); \ - mp_get_memory_functions(NULL, NULL, &gmp_free); \ - (*gmp_free)(s, strlen(s)+1); \ - } while (0) - -#else - -#define cloog_int_init(i) ((i) = 0) -#define cloog_int_clear(i) do { } while (0) - -#define cloog_int_set(r,i) ((r) = (i)) -#define cloog_int_set_si(r,i) ((r) = (i)) -#define cloog_int_abs(r,i) ((r) = (i) > 0 ? (i) : -(i)) -#define cloog_int_neg(r,i) ((r) = -(i)) -#define cloog_int_swap(i,j) do { \ - cloog_int_t _t = i; \ - i = j; \ - j = _t; \ - } while (0) - -#define cloog_int_add(r,i,j) ((r) = (i) + (j)) -#define cloog_int_add_ui(r,i,j) ((r) = (i) + (j)) -#define cloog_int_sub(r,i,j) ((r) = (i) - (j)) -#define cloog_int_sub_ui(r,i,j) ((r) = (i) - (j)) -#define cloog_int_mul(r,i,j) ((r) = (i) * (j)) -#define cloog_int_addmul(r,i,j) ((r) += (i) * (j)) -#define cloog_int_divexact(r,i,j) ((r) = (i) / (j)) -#define cloog_int_tdiv_q(r,i,j) ((r) = (i) / (j)) -#define cloog_int_fdiv_q(r,i,j) do { \ - assert((j) > 0); \ - (r) = (i) >= 0 ? (i) / (j) : \ - -((-(i)+(j)-1)/(j)); \ - } while (0) -#define cloog_int_fdiv_r(r,i,j) do { \ - assert((j) > 0); \ - (r) = (i) >= 0 ? (i) % (j) : \ - (j)-1 - ((-(i)+(j)-1)%(j)); \ - } while (0) -#define cloog_int_cdiv_q(r,i,j) do { \ - assert((j) > 0); \ - (r) = (i) >= 0 ? \ - ((i)+(j)-1) / (j) : \ - -(-(i)/(j)); \ - } while (0) -cloog_int_t cloog_gcd(cloog_int_t a, cloog_int_t b); -#define cloog_int_gcd(r,i,j) (r) = cloog_gcd(i,j) - -#define cloog_int_sgn(i) ((i) > 0 ? 1 : (i) < 0 ? -1 : 0) -#define cloog_int_cmp(i,j) (i - j) -#define cloog_int_abs_cmp(i,j) (((i) > 0 ? (i) : -(i)) - ((j) > 0 ? (j) : -(j))) -#define cloog_int_cmp_si(i,si) (i - si) -#define cloog_int_eq(i,j) ((i) == (j)) -#define cloog_int_ne(i,j) ((i) != (j)) -#define cloog_int_gt(i,j) ((i) > (j)) - -#define cloog_int_is_divisible_by(i,j) ((i) % (j) == 0) - -#define cloog_int_read(i,s) sscanf(s, CLOOG_INT_FORMAT, &i) -#define cloog_int_print(out,i) fprintf(out, CLOOG_INT_FORMAT, i) - -#endif - -#define cloog_int_is_pos(i) (cloog_int_sgn(i) > 0) -#define cloog_int_is_neg(i) (cloog_int_sgn(i) < 0) -#define cloog_int_is_zero(i) (cloog_int_sgn(i) == 0) -#define cloog_int_is_one(i) (cloog_int_cmp_si(i,1) == 0) -#define cloog_int_is_neg_one(i) (cloog_int_cmp_si(i,-1) == 0) -#define cloog_int_gt_si(i,si) (cloog_int_cmp_si(i,si) > 0) -#define cloog_int_ne_si(i,j) (cloog_int_cmp_si(i,j) != 0) -#define cloog_int_lt(i,j) (cloog_int_cmp(i,j) < 0) -#define cloog_int_le(i,j) (cloog_int_cmp(i,j) <= 0) -#define cloog_int_abs_ne(i,j) (cloog_int_abs_cmp(i,j) != 0) -#define cloog_int_abs_ge(i,j) (cloog_int_abs_cmp(i,j) >= 0) -#define cloog_int_abs_lt(i,j) (cloog_int_abs_cmp(i,j) < 0) - -struct cloog_vec { - unsigned size; - cloog_int_t *p; -}; - -struct cloog_vec *cloog_vec_alloc(unsigned size); -void cloog_vec_free(struct cloog_vec *vec); - -int cloog_seq_first_non_zero(cloog_int_t *p, unsigned len); -void cloog_seq_cpy(cloog_int_t *dst, cloog_int_t *src, unsigned len); -void cloog_seq_neg(cloog_int_t *dst, cloog_int_t *src, unsigned len); -void cloog_seq_combine(cloog_int_t *dst, cloog_int_t m1, cloog_int_t *src1, - cloog_int_t m2, cloog_int_t *src2, unsigned len); -void cloog_seq_gcd(cloog_int_t *p, unsigned len, cloog_int_t *gcd); -int cloog_seq_is_neg(cloog_int_t *p1, cloog_int_t *p2, unsigned len); -void cloog_seq_normalize(cloog_int_t *p, unsigned len); - -#if defined(__cplusplus) - } -#endif - -#endif diff --git a/cloog-0.16.3/include/cloog/isl/backend.h b/cloog-0.16.3/include/cloog/isl/backend.h deleted file mode 100644 index e4576d9..0000000 --- a/cloog-0.16.3/include/cloog/isl/backend.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef CLOOG_ISL_BACKEND_H -#define CLOOG_ISL_BACKEND_H - -#include - -struct cloogbackend { - struct isl_ctx *ctx; - unsigned ctx_allocated : 1; -}; - -#endif /* define _H */ diff --git a/cloog-0.16.3/include/cloog/isl/cloog.h b/cloog-0.16.3/include/cloog/isl/cloog.h deleted file mode 100644 index 9379054..0000000 --- a/cloog-0.16.3/include/cloog/isl/cloog.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef CLOOG_ISL_H -#define CLOOG_ISL_H - -#ifndef CLOOG_INT_GMP -#define CLOOG_INT_GMP -#endif - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -CloogState *cloog_isl_state_malloc(struct isl_ctx *ctx); - -#if defined(__cplusplus) -} -#endif - -#endif /* define _H */ diff --git a/cloog-0.16.3/include/cloog/isl/constraintset.h b/cloog-0.16.3/include/cloog/isl/constraintset.h deleted file mode 100644 index c3c2eed..0000000 --- a/cloog-0.16.3/include/cloog/isl/constraintset.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef CLOOG_ISL_CONSTRAINTSET_H -#define CLOOG_ISL_CONSTRAINTSET_H - -#include - -#if defined(__cplusplus) -extern "C" - { -#endif - -struct cloogconstraintset { - int dummy; /* Solaris cc doesn't like zero-sized structs */ -}; - -struct cloogequalities { - int n; - unsigned total_dim; - isl_constraint **constraints; - int *types; -}; - -struct cloogconstraint { - int dummy; /* Solaris cc doesn't like zero-sized structs */ -}; - -CloogConstraintSet *cloog_constraint_set_from_isl_basic_set(struct isl_basic_set *bset); -CloogConstraint *cloog_constraint_from_isl_constraint(struct isl_constraint *constraint); -isl_constraint *cloog_constraint_to_isl(CloogConstraint *constraint); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.16.3/include/cloog/isl/domain.h b/cloog-0.16.3/include/cloog/isl/domain.h deleted file mode 100644 index 289b711..0000000 --- a/cloog-0.16.3/include/cloog/isl/domain.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef CLOOG_ISL_DOMAIN_H -#define CLOOG_ISL_DOMAIN_H - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" - { -#endif - - -struct cloogdomain { - int dummy; /* Solaris cc doesn't like zero-sized structs */ -}; - -struct cloogscattering { - int dummy; /* Solaris cc doesn't like zero-sized structs */ -}; - -CloogDomain *cloog_domain_from_isl_set(struct isl_set *set); -CloogScattering *cloog_scattering_from_isl_map(struct isl_map *map); -CloogUnionDomain *cloog_union_domain_from_isl_union_map( - __isl_take isl_union_map *umap); -CloogUnionDomain *cloog_union_domain_from_isl_union_set( - __isl_take isl_union_set *uset); - -__isl_give isl_set *isl_set_from_cloog_domain(CloogDomain *domain); - - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.16.3/include/cloog/loop.h b/cloog-0.16.3/include/cloog/loop.h deleted file mode 100644 index b62a274..0000000 --- a/cloog-0.16.3/include/cloog/loop.h +++ /dev/null @@ -1,120 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** loop.h ** - **-------------------------------------------------------------------** - ** First version: october 26th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_LOOP_H -#define CLOOG_LOOP_H -#if defined(__cplusplus) -extern "C" - { -#endif - -/** - * CloogLoop structure: - * this structure contains all the informations of a loop generated or to be - * generated. - * - if the loop has not been processed yet (it is not a result of a call to - * cloog_loop_generate), the domain is the whole iteration domain of a given - * block, the stride is 1 (i.e. there is no stride), block is necessarily not - * NULL and inner is NULL. - * - if the loop comes as a result of a cloog_loop_generate call, the domain - * describes the constraints (guards and loop bounds) for only one dimension - * (the last one: outer dimensions being considered as parameters), the stride - * may differ from one (this means that on the considered dimension, a step of - * 'stride' must be considered between integral point, the first integral - * point to be considered being the lower bound of the loop), inner may differ - * from NULL, meaning that there are further dimensions and nesting levels in - * the loop. - */ -struct cloogloop -{ - CloogState *state; /**< State. */ - CloogDomain * domain ; /**< The iteration domain. */ - CloogDomain *unsimplified; /**< Unsimplified version of domain. */ - int otl; /**< Loop is executed at most once. */ - CloogStride *stride; /**< If not NULL, stride information on iterator - * (filled only after loop generation). - */ - CloogBlock * block ; /**< The included statement block, NULL if none.*/ - void * usr; /**< User field, for library user convenience. - * This pointer is not freed when the - * CloogLoop structure is freed. - */ - struct cloogloop * inner ; /**< Loops at the next level. */ - struct cloogloop * next ; /**< Next loop at the same level. */ -} ; -typedef struct cloogloop CloogLoop ; - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void cloog_loop_print_structure(FILE *, CloogLoop *, int) ; -void cloog_loop_print(FILE *, CloogLoop *) ; - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ -void cloog_loop_free(CloogLoop *) ; - - -/****************************************************************************** - * Reading functions * - ******************************************************************************/ -CloogLoop *cloog_loop_from_domain(CloogState *state, CloogDomain *domain, - int number); -CloogLoop * cloog_loop_read(CloogState *state, - FILE * foo, int number, int nb_parameters); - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -CloogLoop * cloog_loop_block(CloogLoop *loop, int *scaldims, int nb_scattdims); -CloogLoop * cloog_loop_malloc(CloogState *state); -CloogLoop *cloog_loop_generate(CloogLoop *loop, CloogDomain *context, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options); -CloogLoop *cloog_loop_simplify(CloogLoop *loop, CloogDomain *context, int level, - int nb_scattdims, CloogOptions *options); -void cloog_loop_scatter(CloogLoop *, CloogScattering *); - - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.16.3/include/cloog/matrix.h b/cloog-0.16.3/include/cloog/matrix.h deleted file mode 100644 index 2b73039..0000000 --- a/cloog-0.16.3/include/cloog/matrix.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef CLOOG_MATRIX_H -#define CLOOG_MATRIX_H -#if defined(__cplusplus) -extern "C" - { -#endif - -/* The CloogMatrix structure is equivalent to the PolyLib Matrix data structure - * (see Wil93). This structure is devoted to represent a set of constraints. - * - * The whole matrix is stored in memory row after row at the p_Init address. p - * is an array of pointers where p[i] points to the first element of the i^{th - * row. NbRows and NbColumns are respectively the number of rows and columns of - * the matrix. Each row corresponds to a constraint. The first element of each - * row is an equality/inequality tag. The constraint is an equality p(x) = 0 if - * the first element is 0, but it is an inequality p(x) \geq 0 if the first - * element is 1. The next elements are the unknown coefficients, followed by - * the parameter coefficients, then the constant term. For instance, the - * following three constraints: - * - * -i + m = 0 - * -j + n >= 0 - * i + j - k >= 0 - * - * would be represented by the following rows: - * - * # eq/in i j k m n cst - * 0 0 -1 0 1 0 0 - * 1 -1 0 0 0 1 0 - * 1 1 1 -1 0 0 0 - * - * To be able to provide different precision version (CLooG supports 32 bits, - * 64 bits and arbitrary precision through the GMP library), the cloog_int_t - * type depends on the configuration options (it may be long int for 32 bits - * version, long long int for 64 bits version, and mpz_t for multiple precision - * version). */ - -struct cloogmatrix -{ unsigned NbRows; /* Number of rows. */ - unsigned NbColumns; /* Number of columns. */ - cloog_int_t ** p; /* Array of pointers to the matrix rows. */ - cloog_int_t * p_Init; /* Matrix rows contiguously in memory. */ -}; - -typedef struct cloogmatrix CloogMatrix; - -CloogMatrix *cloog_matrix_alloc (unsigned, unsigned); -void cloog_matrix_free (CloogMatrix *); -void cloog_matrix_print_structure(FILE *file, CloogMatrix *M, - const char *prefix, const char *suffix); -CloogMatrix *cloog_matrix_read(FILE *input); -CloogMatrix *cloog_matrix_read_of_size(FILE *input, - unsigned n_row, unsigned n_col); -void cloog_matrix_print(FILE*, CloogMatrix*); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.16.3/include/cloog/matrix/constraintset.h b/cloog-0.16.3/include/cloog/matrix/constraintset.h deleted file mode 100644 index 5023162..0000000 --- a/cloog-0.16.3/include/cloog/matrix/constraintset.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef CLOOG_MATRIX_CONSTRAINTSET_H -#define CLOOG_MATRIX_CONSTRAINTSET_H - -#if defined(__cplusplus) -extern "C" - { -#endif - -struct cloogconstraintset { - CloogMatrix M; -}; - -struct cloogequalities { - CloogConstraintSet *constraints; - int *types; -}; - -struct cloogconstraint { - CloogConstraintSet *set; - cloog_int_t **line; -}; - -CloogConstraintSet *cloog_constraint_set_from_cloog_matrix(CloogMatrix *M); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.16.3/include/cloog/names.h b/cloog-0.16.3/include/cloog/names.h deleted file mode 100644 index 7f566f1..0000000 --- a/cloog-0.16.3/include/cloog/names.h +++ /dev/null @@ -1,103 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** names.h ** - **-------------------------------------------------------------------** - ** First version: august 1st 2002 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_NAMES_H -#define CLOOG_NAMES_H -#if defined(__cplusplus) -extern "C" - { -#endif - - -# define MAX_NAME 50 -# define FIRST_PARAMETER 'M' -# define FIRST_ITERATOR 'i' - - -/** - * CloogNames structure: - * this structure contains all the informations about parameter and iterator - * names (as strings). - */ -struct cloognames -{ int nb_scalars ; /**< Scalar dimension number. */ - int nb_scattering ; /**< Scattering iterator number. */ - int nb_iterators ; /**< Iterator number. */ - int nb_parameters ; /**< Parameter number. */ - char ** scalars ; /**< The scalar names (an array of strings). */ - char ** scattering ; /**< The scattering names (an array of strings). */ - char ** iterators ; /**< The iterator names (an array of strings). */ - char ** parameters ; /**< The parameter names (an array of strings). */ - int references; /**< Number of references to this structure. */ -} ; -typedef struct cloognames CloogNames ; - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void cloog_names_print_structure(FILE *, CloogNames *, int) ; -void cloog_names_print(FILE *, CloogNames *) ; - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ -void cloog_names_free(CloogNames *) ; - - -/****************************************************************************** - * Reading functions * - ******************************************************************************/ -char ** cloog_names_read_strings(FILE *file, int nb_items); - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -CloogNames * cloog_names_malloc(void); -CloogNames * cloog_names_copy(CloogNames *names); -CloogNames * cloog_names_alloc(void); -char ** cloog_names_generate_items(int, char *, char) ; -CloogNames * cloog_names_generate(int, int, int, int, char, char, char, char) ; -void cloog_names_scalarize(CloogNames *, int, int *) ; -const char * cloog_names_name_at_level(CloogNames *names, int level); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.16.3/include/cloog/options.h b/cloog-0.16.3/include/cloog/options.h deleted file mode 100644 index 97e482e..0000000 --- a/cloog-0.16.3/include/cloog/options.h +++ /dev/null @@ -1,159 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** options.h ** - **-------------------------------------------------------------------** - ** First version: april 19th 2003 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - -#include - -#ifndef CLOOG_OPTIONS_H -#define CLOOG_OPTIONS_H -#if defined(__cplusplus) -extern "C" - { -#endif - - -/* Uncomment the following line if you want some information about - * maximum total allocated memory for code generation. -#define CLOOG_MEMORY - */ -#define CLOOG_SCALARS - -struct cloogoptions; -typedef struct cloogoptions CloogOptions; - -struct cloogoptions -{ - CloogState *state; /* State. */ - /* OPTIONS FOR LOOP GENERATION */ - int l ; /* Last level to optimize. */ - int f ; /* First level to optimize. */ - int stop ; /* Level to stop code generation. */ - int strides ; /* 1 if user wants to handle non-unit strides (then loop - * increment can be something else than one), 0 otherwise. - */ - int sh; /* 1 for computing simple hulls */ - int first_unroll; - - /* OPTIONS FOR PRETTY PRINTING */ - int esp ; /* 1 if user wants to spread all equalities, i.e. when there - * is something like "i = 3*j + 1 ; A[i] = 0 ;" the generator - * will write "A[3*j + 1] = 0 ;", 0 otherwise. - */ - int fsp ; /* The iteration level where equalities spreading can begin - * (it might happen that the user wants not to spread values - * of scattering iterators). - */ - int otl ; /* 1 for eliminate loops running just one time and write them - * as an affectation of the iterator, 0 otherwise. - */ - int block ; /* 1 to make one new block {...} per new dimension, - * 0 otherwise. - */ - int compilable; /* 1 to generate a compilable code by using - * preprocessing, 0 otherwise. - */ - int callable; /* 1 to generate callable code by using - * preprocessing, 0 otherwise. - */ - int language; /* 1 to generate FORTRAN, 0 for C otherwise. */ - - int save_domains;/* Save unsimplified copy of domain. */ - - /* MISC OPTIONS */ - char * name ; /* Name of the input file. */ - float time ; /* Time spent for code generation in seconds. */ -#ifdef CLOOG_MEMORY - int memory ; /* Memory spent for code generation in kilobytes. */ -#endif - int quiet; /* Don't print any informational messages. */ - /* UNDOCUMENTED OPTIONS FOR THE AUTHOR ONLY */ - int leaks ; /* 1 if I want to print the allocation statistics, - * 0 otherwise. - */ - int backtrack; /* 1 to perform backtracking in - * Quillere's algorithm, 0 otherwise. - */ - int override ; /* 1 if I want to bypass CLooG decisions on option correctness - * (generated code may be incorrect), 0 otherwise. - */ - int structure ; /* 1 if I want to print the CloogProgram structure before the - * pretty printed code, 0 otherwise. - */ - int noblocks ; /* 1 if I don't want to make statement blocks, 0 otherwise. */ - int noscalars ; /* 1 if I don't want to use scalar dimensions, 0 otherwise. */ - int nosimplify; /* 1 if I don't want to simplify polyhedra, 0 otherwise. */ -} ; - - -/****************************************************************************** - * Error reporting functions * - ******************************************************************************/ - -enum cloog_msg_type { CLOOG_ERROR, CLOOG_WARNING, CLOOG_INFO }; - -void cloog_msg(CloogOptions *options, enum cloog_msg_type type, - const char *msg, ...); -void cloog_die(const char *msg, ...); - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void cloog_options_print(FILE *, CloogOptions *) ; - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ -void cloog_options_free(CloogOptions *) ; - - -/****************************************************************************** - * Reading function * - ******************************************************************************/ -void cloog_options_read(CloogState *state, int argc, char **argv, - FILE **input, FILE **output, CloogOptions **options); - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -CloogOptions *cloog_options_malloc(CloogState *state); - - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.16.3/include/cloog/pprint.h b/cloog-0.16.3/include/cloog/pprint.h deleted file mode 100644 index 62fb244..0000000 --- a/cloog-0.16.3/include/cloog/pprint.h +++ /dev/null @@ -1,68 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** pprint.h ** - **-------------------------------------------------------------------** - ** First version: october 26th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_PPRINT_H -#define CLOOG_PPRINT_H -#if defined(__cplusplus) -extern "C" - { -#endif - - -# define MAX_STRING_VAL 32 -# define INDENT_STEP 2 - -# define EQTYPE_NONE 0 -# define EQTYPE_CONSTANT 1 -# define EQTYPE_PUREITEM 2 -# define EQTYPE_EXAFFINE 3 - -# define LANGUAGE_C 0 -# define LANGUAGE_FORTRAN 1 - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void clast_pprint(FILE *foo, struct clast_stmt *root, int indent, - CloogOptions *options); - - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.16.3/include/cloog/program.h b/cloog-0.16.3/include/cloog/program.h deleted file mode 100644 index 530d21f..0000000 --- a/cloog-0.16.3/include/cloog/program.h +++ /dev/null @@ -1,116 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** program.h ** - **-------------------------------------------------------------------** - ** First version: october 25th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_PROGRAM_H -#define CLOOG_PROGRAM_H -#if defined(__cplusplus) -extern "C" - { -#endif - - -# define MAX_STRING 1024 -# define MEGA 1000000 /* One million. */ - - -/** - * CloogProgram structure: - * this structure contains all the informations of a program generated or to be - * generated. - */ -struct cloogprogram -{ /* Basic program description fields. */ - char language ; /**< The language of the program. */ - int nb_scattdims ; /**< Scattering dimension number. */ - CloogDomain * context ; /**< The context of the program. */ - CloogLoop * loop ; /**< The loops of the program. */ - CloogNames * names ; /**< Iterators and parameters names. */ - CloogBlockList * blocklist ; /**< The statement block list. */ - - /* Internal service fields, filled up by cloog_program_scatter function. */ - int * scaldims ; /**< Boolean array saying whether a given - * scattering dimension is scalar or not. - */ - /* Library user reserved field. */ - void * usr; /**< User field, for library user convenience. - * This pointer is not freed when the - * CloogProgram structure is freed. - */ -} ; -typedef struct cloogprogram CloogProgram ; - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void cloog_program_print_structure(FILE *, CloogProgram *, int) ; -void cloog_program_print(FILE *, CloogProgram *) ; -void cloog_program_pprint(FILE *, CloogProgram *, CloogOptions *) ; -void cloog_program_dump_cloog(FILE *, CloogProgram *, CloogScatteringList *); - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ -void cloog_program_free(CloogProgram *) ; - - -/****************************************************************************** - * Reading function * - ******************************************************************************/ -CloogProgram * cloog_program_read(FILE *, CloogOptions *) ; - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -CloogProgram * cloog_program_malloc(void); -CloogProgram * cloog_program_alloc(CloogDomain *context, CloogUnionDomain *ud, - CloogOptions *options); -CloogProgram * cloog_program_generate(CloogProgram *, CloogOptions *) ; -void cloog_program_block(CloogProgram *program, - CloogScatteringList *scattering, CloogOptions *options); -void cloog_program_extract_scalars(CloogProgram *program, - CloogScatteringList *scattering, CloogOptions *options); -void cloog_program_scatter(CloogProgram *program, - CloogScatteringList *scattering, CloogOptions *options); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ - diff --git a/cloog-0.16.3/include/cloog/state.h b/cloog-0.16.3/include/cloog/state.h deleted file mode 100644 index ebc3272..0000000 --- a/cloog-0.16.3/include/cloog/state.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef CLOOG_STATE_H -#define CLOOG_STATE_H - -struct cloogbackend; -typedef struct cloogbackend CloogBackend; - -#if defined(__cplusplus) -extern "C" { -#endif - -struct cloogstate { - CloogBackend *backend; - - cloog_int_t zero; - cloog_int_t one; - cloog_int_t negone; - - int block_allocated; - int block_freed; - int block_max; - - int domain_allocated; - int domain_freed; - int domain_max; - - int loop_allocated; - int loop_freed; - int loop_max; - - int statement_allocated; - int statement_freed; - int statement_max; -}; -typedef struct cloogstate CloogState; - -CloogState *cloog_core_state_malloc(void); -CloogState *cloog_state_malloc(void); - -void cloog_core_state_free(CloogState *state); -void cloog_state_free(CloogState *state); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/include/cloog/statement.h b/cloog-0.16.3/include/cloog/statement.h deleted file mode 100644 index abc505e..0000000 --- a/cloog-0.16.3/include/cloog/statement.h +++ /dev/null @@ -1,85 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** statement.h ** - **-------------------------------------------------------------------** - ** First version: november 4th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_STATEMENT_H -#define CLOOG_STATEMENT_H -#if defined(__cplusplus) -extern "C" - { -#endif - - -struct cloogstatement -{ - CloogState *state; /* State. */ - char *name; /* Name of the statement. */ - int number; /* The statement unique number. */ - void * usr ; /* A pointer for library users convenience. */ - struct cloogstatement * next ; /* Pointer to the next statement with the - * same original domain and the same - * scattering function. - */ -} ; -typedef struct cloogstatement CloogStatement ; - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void cloog_statement_print_structure(FILE *, CloogStatement *, int) ; -void cloog_statement_print(FILE *, CloogStatement *) ; - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ -void cloog_statement_free(CloogStatement *) ; - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -CloogStatement * cloog_statement_malloc(CloogState *state); -CloogStatement * cloog_statement_alloc(CloogState *state, int); -CloogStatement * cloog_statement_copy(CloogStatement *) ; -void cloog_statement_add(CloogStatement**, CloogStatement**, CloogStatement*) ; - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ - diff --git a/cloog-0.16.3/include/cloog/stride.h b/cloog-0.16.3/include/cloog/stride.h deleted file mode 100644 index f93dc4e..0000000 --- a/cloog-0.16.3/include/cloog/stride.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef CLOOG_STRIDE_H -#define CLOOG_STRIDE_H - -#if defined(__cplusplus) -extern "C" { -#endif - -/** - * Information about strides. - */ -struct cloogstride { - int references; - cloog_int_t stride; /**< The actual stride. */ - cloog_int_t offset; /**< Offset of strided loop. */ - cloog_int_t factor; - CloogConstraint *constraint; -}; -typedef struct cloogstride CloogStride; - -CloogStride *cloog_stride_alloc(cloog_int_t stride, cloog_int_t offset); -CloogStride *cloog_stride_alloc_from_constraint(cloog_int_t stride, - CloogConstraint *constraint, cloog_int_t factor); -CloogStride *cloog_stride_copy(CloogStride *stride); -void cloog_stride_free(CloogStride *stride); - -CloogConstraint *cloog_constraint_stride_lower_bound(CloogConstraint *c, - int level, CloogStride *stride); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/include/cloog/union_domain.h b/cloog-0.16.3/include/cloog/union_domain.h deleted file mode 100644 index 7fc9eef..0000000 --- a/cloog-0.16.3/include/cloog/union_domain.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef CLOOG_UNION_DOMAIN_H -#define CLOOG_UNION_DOMAIN_H - -#if defined(__cplusplus) -extern "C" { -#endif - -/** - * CloogNamedDomainList structure: - * this structure reprensents a node of a linked list of CloogDomain structures. - */ -struct cloognameddomainlist { - CloogDomain *domain; /**< An element of the list. */ - CloogScattering *scattering; /**< Scattering function for domain. */ - char *name; /**< Name of the domain. */ - void *usr; /**< A pointer for library user's convenience. */ - struct cloognameddomainlist *next;/**< Pointer to the next element of the list.*/ -}; -typedef struct cloognameddomainlist CloogNamedDomainList; - -/** - * A structure representing the input domains and scattering functions. - */ -struct clooguniondomain { - int n_name[3]; - char **name[3]; - CloogNamedDomainList *domain; - CloogNamedDomainList **next_domain; -}; -typedef struct clooguniondomain CloogUnionDomain; - -enum cloog_dim_type { CLOOG_PARAM, CLOOG_ITER, CLOOG_SCAT }; - -CloogUnionDomain *cloog_union_domain_read(FILE *file, int nb_par, - CloogOptions *options); -CloogUnionDomain *cloog_union_domain_alloc(int nb_par); -CloogUnionDomain *cloog_union_domain_add_domain(CloogUnionDomain *ud, - const char *name, CloogDomain *domain, CloogScattering *scattering, - void *usr); -CloogUnionDomain *cloog_union_domain_set_name(CloogUnionDomain *ud, - enum cloog_dim_type type, int index, const char *name); -void cloog_union_domain_free(CloogUnionDomain *ud); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/include/cloog/version.h b/cloog-0.16.3/include/cloog/version.h deleted file mode 100644 index c24b9d3..0000000 --- a/cloog-0.16.3/include/cloog/version.h +++ /dev/null @@ -1,50 +0,0 @@ -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_VERSION_H -#define CLOOG_VERSION_H -#if defined(__cplusplus) -extern "C" - { -#endif - -#define CLOOG_VERSION_MAJOR 0 -#define CLOOG_VERSION_MINOR 16 -#define CLOOG_VERSION_REVISION 3 - -const char *cloog_version(void); - -int cloog_version_major(void); - -int cloog_version_minor(void); - -int cloog_version_revision(void); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.16.3/include/cloog/version.h.in b/cloog-0.16.3/include/cloog/version.h.in deleted file mode 100644 index cee91a0..0000000 --- a/cloog-0.16.3/include/cloog/version.h.in +++ /dev/null @@ -1,50 +0,0 @@ -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_VERSION_H -#define CLOOG_VERSION_H -#if defined(__cplusplus) -extern "C" - { -#endif - -#define CLOOG_VERSION_MAJOR @VERSION_MAJOR@ -#define CLOOG_VERSION_MINOR @VERSION_MINOR@ -#define CLOOG_VERSION_REVISION @VERSION_REVISION@ - -const char *cloog_version(void); - -int cloog_version_major(void); - -int cloog_version_minor(void); - -int cloog_version_revision(void); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.16.3/isl/AUTHORS b/cloog-0.16.3/isl/AUTHORS deleted file mode 100644 index 965ed11..0000000 --- a/cloog-0.16.3/isl/AUTHORS +++ /dev/null @@ -1,19 +0,0 @@ -isl was written by - - Sven Verdoolaege -2006-2007 Leiden Institute of Advanced Computer Science - Universiteit Leiden - Niels Bohrweg 1 - 2333 CA Leiden - The Netherlands -2008-2009 K.U.Leuven - Departement Computerwetenschappen - Celestijnenlaan 200A - B-3001 Leuven - Belgium -2010 INRIA Saclay - Ile-de-France - Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod - 91893 Orsay - France - -The quicksort implementation was written by Douglas C. Schmidt. diff --git a/cloog-0.16.3/isl/ChangeLog b/cloog-0.16.3/isl/ChangeLog deleted file mode 100644 index 96e77a3..0000000 --- a/cloog-0.16.3/isl/ChangeLog +++ /dev/null @@ -1,51 +0,0 @@ -version: 0.07 -date: Tue Jul 12 19:34:51 CEST 2011 -changes: - - hide internal structures of isl_div and isl_constraint - - preliminary scheduling - - add support for local spaces and (piecewise) quasi-affine expressions ---- -version: 0.06 -date: Fri Mar 18 15:59:16 CET 2011 -changes: - - improved parsing - - consistency changes in API - - hide internal structure of isl_ctx ---- -version: 0.05.1 -date: Wed Jan 5 10:21:42 CET 2011 -changes: - - fix simple symmetry detection in parametric integer programming ---- -version: 0.05 -date: Thu Dec 23 17:03:14 CET 2010 -changes: - - rename header files from isl_header.h to isl/header.h - - add higher level interface for dependence analysis - - improved argument parsing - - optionally triangulate domains during Bernstein expansion - - support extended PolyLib format - - hide internal structure of some data types - - improved coalescing - - add simple symmetry detection in parametric integer programming ---- -version: 0.04 -date: Fri Sep 10 12:57:50 CEST 2010 -changes: - - rename isl_pw_qpolynomial_fold_add - - add isl_map_apply_pw_qpolynomial_fold - - support named and nested spaces - - support union sets and maps - - add public API for matrices ---- -version: 0.03 -date: Tue Jun 29 13:16:46 CEST 2010 -changes: - - new printing functions - - support for "may" accesses in dependence analysis - - improved coalescing - - improved transitive closure - - fix several hard to trigger bugs - - improved argument parsing - - support parametric vertex enumeration for barvinok - - optionally use Bernstein expansion to compute bounds diff --git a/cloog-0.16.3/isl/GIT_HEAD_ID b/cloog-0.16.3/isl/GIT_HEAD_ID deleted file mode 100644 index 6c13e12..0000000 --- a/cloog-0.16.3/isl/GIT_HEAD_ID +++ /dev/null @@ -1 +0,0 @@ -isl-0.07 diff --git a/cloog-0.16.3/isl/Makefile.am b/cloog-0.16.3/isl/Makefile.am deleted file mode 100644 index e3e96d0..0000000 --- a/cloog-0.16.3/isl/Makefile.am +++ /dev/null @@ -1,263 +0,0 @@ -SUBDIRS = . doc -DIST_SUBDIRS = doc - -ACLOCAL_AMFLAGS = -I m4 -AUTOMAKE_OPTIONS = nostdinc - -lib_LTLIBRARIES = libisl.la -noinst_PROGRAMS = isl_test isl_polyhedron_sample isl_pip \ - isl_polyhedron_minimize isl_polytope_scan \ - isl_polyhedron_detect_equalities isl_cat \ - isl_closure isl_bound -TESTS = isl_test pip_test.sh bound_test.sh - -if HAVE_PIPLIB -ISL_PIPLIB = \ - isl_lp_piplib.c \ - isl_map_piplib.c \ - isl_sample_piplib.c \ - isl_sample_piplib.h \ - isl_piplib.c -else -ISL_PIPLIB = \ - isl_lp_no_piplib.c \ - isl_map_no_piplib.c \ - isl_sample_no_piplib.c -endif - -if NEED_GET_MEMORY_FUNCTIONS -GET_MEMORY_FUNCTIONS=mp_get_memory_functions.c -endif - -INCLUDES = -I. -I$(srcdir) -I$(srcdir)/include -Iinclude/ -AM_CFLAGS = @WARNING_FLAGS@ - -libisl_la_SOURCES = \ - $(ISL_PIPLIB) \ - $(GET_MEMORY_FUNCTIONS) \ - isl_aff.c \ - isl_aff_private.h \ - isl_affine_hull.c \ - isl_arg.c \ - isl_band.c \ - isl_band_private.h \ - isl_basis_reduction.h \ - basis_reduction_tab.c \ - isl_bernstein.c \ - isl_bernstein.h \ - isl_blk.c \ - isl_bound.c \ - isl_bound.h \ - isl_coalesce.c \ - isl_constraint.c \ - isl_constraint_private.h \ - isl_convex_hull.c \ - isl_ctx.c \ - isl_ctx_private.h \ - isl_dim.c \ - isl_dim_private.h \ - isl_dim_map.h \ - isl_dim_map.c \ - isl_div.c \ - isl_div_private.h \ - isl_equalities.c \ - isl_equalities.h \ - isl_factorization.c \ - isl_factorization.h \ - isl_farkas.c \ - isl_flow.c \ - isl_fold.c \ - isl_gmp.c \ - isl_hash.c \ - isl_hmap_map_basic_set.c \ - isl_hmap_map_basic_set.h \ - isl_ilp.c \ - isl_input.c \ - isl_list.c \ - isl_list_private.h \ - isl_local_space_private.h \ - isl_local_space.c \ - isl_lp.c \ - isl_lp_piplib.h \ - isl_map.c \ - isl_map_simplify.c \ - isl_map_subtract.c \ - isl_map_private.h \ - isl_map_piplib.h \ - isl_mat.c \ - isl_mat_private.h \ - isl_morph.c \ - isl_morph.h \ - isl_name.c \ - isl_name.h \ - isl_obj.c \ - isl_options.c \ - isl_output.c \ - isl_qsort.c \ - isl_qsort.h \ - isl_piplib.h \ - isl_point_private.h \ - isl_point.c \ - isl_polynomial_private.h \ - isl_polynomial.c \ - isl_printer_private.h \ - isl_printer.c \ - isl_range.c \ - isl_range.h \ - isl_reordering.c \ - isl_reordering.h \ - isl_sample.h \ - isl_sample.c \ - isl_scan.c \ - isl_scan.h \ - isl_schedule.c \ - isl_schedule_private.h \ - isl_stream.c \ - isl_seq.c \ - isl_tab.c \ - isl_tab.h \ - isl_tab_pip.c \ - isl_transitive_closure.c \ - isl_union_map.c \ - isl_union_map_private.h \ - isl_vec.c \ - isl_version.c \ - isl_vertices_private.h \ - isl_vertices.c -EXTRA_libisl_la_SOURCES = \ - isl_lp_piplib.c \ - isl_lp_no_piplib.c \ - isl_map_piplib.c \ - isl_map_no_piplib.c \ - isl_sample_no_piplib.c \ - isl_sample_piplib.c \ - isl_sample_piplib.h \ - isl_piplib.c -libisl_la_LIBADD = @PIPLIB_LIBS@ -lgmp -libisl_la_LDFLAGS = -version-info @versioninfo@ \ - @PIPLIB_LDFLAGS@ @GMP_LDFLAGS@ -libisl_la_CPPFLAGS = $(INCLUDES) @PIPLIB_CPPFLAGS@ @GMP_CPPFLAGS@ - -isl_test_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_test_LDFLAGS = @GMP_LDFLAGS@ -isl_test_LDADD = libisl.la -lgmp - -isl_polyhedron_sample_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polyhedron_sample_LDADD = libisl.la -isl_polyhedron_sample_SOURCES = \ - polyhedron_sample.c - -isl_pip_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_pip_LDFLAGS = @GMP_LDFLAGS@ -isl_pip_LDADD = libisl.la -lgmp -isl_pip_SOURCES = \ - pip.c - -isl_bound_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_bound_LDFLAGS = @GMP_LDFLAGS@ -isl_bound_LDADD = libisl.la -lgmp -isl_bound_SOURCES = \ - bound.c - -isl_polyhedron_minimize_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polyhedron_minimize_LDFLAGS = @GMP_LDFLAGS@ -isl_polyhedron_minimize_LDADD = libisl.la -lgmp -isl_polyhedron_minimize_SOURCES = \ - polyhedron_minimize.c - -isl_polytope_scan_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polytope_scan_LDADD = libisl.la -isl_polytope_scan_SOURCES = \ - polytope_scan.c - -isl_polyhedron_detect_equalities_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polyhedron_detect_equalities_LDADD = libisl.la -isl_polyhedron_detect_equalities_SOURCES = \ - polyhedron_detect_equalities.c - -isl_cat_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_cat_LDADD = libisl.la -isl_cat_SOURCES = \ - cat.c - -isl_closure_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_closure_LDADD = libisl.la -isl_closure_SOURCES = \ - closure.c - -nodist_pkginclude_HEADERS = \ - include/isl/config.h \ - include/isl/stdint.h -pkginclude_HEADERS = \ - include/isl/aff.h \ - include/isl/aff_type.h \ - include/isl/arg.h \ - include/isl/band.h \ - include/isl/blk.h \ - include/isl/constraint.h \ - include/isl/ctx.h \ - include/isl/dim.h \ - include/isl/div.h \ - include/isl/flow.h \ - include/isl/ilp.h \ - include/isl/int.h \ - include/isl/hash.h \ - include/isl/list.h \ - include/isl/local_space.h \ - include/isl/lp.h \ - include/isl/mat.h \ - include/isl/map.h \ - include/isl/map_type.h \ - include/isl/obj.h \ - include/isl/options.h \ - include/isl/point.h \ - include/isl/polynomial.h \ - include/isl/printer.h \ - include/isl/schedule.h \ - include/isl/seq.h \ - include/isl/set.h \ - include/isl/set_type.h \ - include/isl/stream.h \ - include/isl/union_map.h \ - include/isl/union_set.h \ - include/isl/vec.h \ - include/isl/version.h \ - include/isl/vertices.h - -EXTRA_DIST = \ - isl_config_post.h \ - basis_reduction_templ.c \ - isl_list_templ.c \ - isl_list_templ.h \ - isl_pw_templ.c \ - isl_union_templ.c \ - isl.py \ - doc/chicago.bst \ - doc/chicago.sty \ - doc/implementation.tex \ - doc/isl.bib \ - doc/mypod2latex \ - doc/manual.tex \ - doc/user.pod \ - test_inputs - -dist-hook: - echo @GIT_HEAD_VERSION@ > $(distdir)/GIT_HEAD_ID - (cd doc; make manual.pdf) - cp doc/manual.pdf $(distdir)/doc/ - -pkgconfigdir=$(pkgconfig_libdir) -pkgconfig_DATA = $(pkgconfig_libfile) - -gitversion.h: @GIT_HEAD@ - $(AM_V_GEN)echo '#define GIT_HEAD_ID "'@GIT_HEAD_VERSION@'"' > $@ - -install-data-local: $(srcdir)/isl.py - @libisl=`sed -ne "/^library_names=/{s/.*='//;s/'$$//;s/ .*//;p}" \ - $(builddir)/libisl.la`; \ - case $$libisl in \ - '') echo Cannot find isl library name. GDB bindings not installed.;; \ - *) echo $(INSTALL_DATA) $(srcdir)/isl.py \ - $(DESTDIR)$(libdir)/$$libisl-gdb.py; \ - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"; \ - $(INSTALL_DATA) $(srcdir)/isl.py $(DESTDIR)$(libdir)/$$libisl-gdb.py; esac diff --git a/cloog-0.16.3/isl/Makefile.in b/cloog-0.16.3/isl/Makefile.in deleted file mode 100644 index 1ff453f..0000000 --- a/cloog-0.16.3/isl/Makefile.in +++ /dev/null @@ -1,2198 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -noinst_PROGRAMS = isl_test$(EXEEXT) isl_polyhedron_sample$(EXEEXT) \ - isl_pip$(EXEEXT) isl_polyhedron_minimize$(EXEEXT) \ - isl_polytope_scan$(EXEEXT) \ - isl_polyhedron_detect_equalities$(EXEEXT) isl_cat$(EXEEXT) \ - isl_closure$(EXEEXT) isl_bound$(EXEEXT) -TESTS = isl_test$(EXEEXT) pip_test.sh bound_test.sh -subdir = . -DIST_COMMON = $(am__configure_deps) $(pkginclude_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/bound_test.sh.in $(srcdir)/isl_config.h.in \ - $(srcdir)/pip_test.sh.in $(top_srcdir)/configure \ - $(top_srcdir)/include/isl/config.h.in AUTHORS ChangeLog \ - config.guess config.sub depcomp install-sh ltmain.sh missing -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_c___attribute__.m4 \ - $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ - $(top_srcdir)/m4/ax_create_stdint_h.m4 \ - $(top_srcdir)/m4/ax_detect_git_head.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_warn_unused_result.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/ax_set_warning_flags.m4 \ - $(top_srcdir)/m4/ax_submodule.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = isl_config.h $(top_builddir)/include/isl/config.h -CONFIG_CLEAN_FILES = bound_test.sh pip_test.sh -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ - "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libisl_la_DEPENDENCIES = -am__libisl_la_SOURCES_DIST = isl_lp_no_piplib.c isl_map_no_piplib.c \ - isl_sample_no_piplib.c isl_lp_piplib.c isl_map_piplib.c \ - isl_sample_piplib.c isl_sample_piplib.h isl_piplib.c \ - mp_get_memory_functions.c isl_aff.c isl_aff_private.h \ - isl_affine_hull.c isl_arg.c isl_band.c isl_band_private.h \ - isl_basis_reduction.h basis_reduction_tab.c isl_bernstein.c \ - isl_bernstein.h isl_blk.c isl_bound.c isl_bound.h \ - isl_coalesce.c isl_constraint.c isl_constraint_private.h \ - isl_convex_hull.c isl_ctx.c isl_ctx_private.h isl_dim.c \ - isl_dim_private.h isl_dim_map.h isl_dim_map.c isl_div.c \ - isl_div_private.h isl_equalities.c isl_equalities.h \ - isl_factorization.c isl_factorization.h isl_farkas.c \ - isl_flow.c isl_fold.c isl_gmp.c isl_hash.c \ - isl_hmap_map_basic_set.c isl_hmap_map_basic_set.h isl_ilp.c \ - isl_input.c isl_list.c isl_list_private.h \ - isl_local_space_private.h isl_local_space.c isl_lp.c \ - isl_lp_piplib.h isl_map.c isl_map_simplify.c \ - isl_map_subtract.c isl_map_private.h isl_map_piplib.h \ - isl_mat.c isl_mat_private.h isl_morph.c isl_morph.h isl_name.c \ - isl_name.h isl_obj.c isl_options.c isl_output.c isl_qsort.c \ - isl_qsort.h isl_piplib.h isl_point_private.h isl_point.c \ - isl_polynomial_private.h isl_polynomial.c \ - isl_printer_private.h isl_printer.c isl_range.c isl_range.h \ - isl_reordering.c isl_reordering.h isl_sample.h isl_sample.c \ - isl_scan.c isl_scan.h isl_schedule.c isl_schedule_private.h \ - isl_stream.c isl_seq.c isl_tab.c isl_tab.h isl_tab_pip.c \ - isl_transitive_closure.c isl_union_map.c \ - isl_union_map_private.h isl_vec.c isl_version.c \ - isl_vertices_private.h isl_vertices.c -@HAVE_PIPLIB_FALSE@am__objects_1 = libisl_la-isl_lp_no_piplib.lo \ -@HAVE_PIPLIB_FALSE@ libisl_la-isl_map_no_piplib.lo \ -@HAVE_PIPLIB_FALSE@ libisl_la-isl_sample_no_piplib.lo -@HAVE_PIPLIB_TRUE@am__objects_1 = libisl_la-isl_lp_piplib.lo \ -@HAVE_PIPLIB_TRUE@ libisl_la-isl_map_piplib.lo \ -@HAVE_PIPLIB_TRUE@ libisl_la-isl_sample_piplib.lo \ -@HAVE_PIPLIB_TRUE@ libisl_la-isl_piplib.lo -@NEED_GET_MEMORY_FUNCTIONS_TRUE@am__objects_2 = libisl_la-mp_get_memory_functions.lo -am_libisl_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ - libisl_la-isl_aff.lo libisl_la-isl_affine_hull.lo \ - libisl_la-isl_arg.lo libisl_la-isl_band.lo \ - libisl_la-basis_reduction_tab.lo libisl_la-isl_bernstein.lo \ - libisl_la-isl_blk.lo libisl_la-isl_bound.lo \ - libisl_la-isl_coalesce.lo libisl_la-isl_constraint.lo \ - libisl_la-isl_convex_hull.lo libisl_la-isl_ctx.lo \ - libisl_la-isl_dim.lo libisl_la-isl_dim_map.lo \ - libisl_la-isl_div.lo libisl_la-isl_equalities.lo \ - libisl_la-isl_factorization.lo libisl_la-isl_farkas.lo \ - libisl_la-isl_flow.lo libisl_la-isl_fold.lo \ - libisl_la-isl_gmp.lo libisl_la-isl_hash.lo \ - libisl_la-isl_hmap_map_basic_set.lo libisl_la-isl_ilp.lo \ - libisl_la-isl_input.lo libisl_la-isl_list.lo \ - libisl_la-isl_local_space.lo libisl_la-isl_lp.lo \ - libisl_la-isl_map.lo libisl_la-isl_map_simplify.lo \ - libisl_la-isl_map_subtract.lo libisl_la-isl_mat.lo \ - libisl_la-isl_morph.lo libisl_la-isl_name.lo \ - libisl_la-isl_obj.lo libisl_la-isl_options.lo \ - libisl_la-isl_output.lo libisl_la-isl_qsort.lo \ - libisl_la-isl_point.lo libisl_la-isl_polynomial.lo \ - libisl_la-isl_printer.lo libisl_la-isl_range.lo \ - libisl_la-isl_reordering.lo libisl_la-isl_sample.lo \ - libisl_la-isl_scan.lo libisl_la-isl_schedule.lo \ - libisl_la-isl_stream.lo libisl_la-isl_seq.lo \ - libisl_la-isl_tab.lo libisl_la-isl_tab_pip.lo \ - libisl_la-isl_transitive_closure.lo libisl_la-isl_union_map.lo \ - libisl_la-isl_vec.lo libisl_la-isl_version.lo \ - libisl_la-isl_vertices.lo -libisl_la_OBJECTS = $(am_libisl_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -libisl_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libisl_la_LDFLAGS) $(LDFLAGS) -o $@ -PROGRAMS = $(noinst_PROGRAMS) -am_isl_bound_OBJECTS = isl_bound-bound.$(OBJEXT) -isl_bound_OBJECTS = $(am_isl_bound_OBJECTS) -isl_bound_DEPENDENCIES = libisl.la -isl_bound_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(isl_bound_LDFLAGS) $(LDFLAGS) -o $@ -am_isl_cat_OBJECTS = isl_cat-cat.$(OBJEXT) -isl_cat_OBJECTS = $(am_isl_cat_OBJECTS) -isl_cat_DEPENDENCIES = libisl.la -am_isl_closure_OBJECTS = isl_closure-closure.$(OBJEXT) -isl_closure_OBJECTS = $(am_isl_closure_OBJECTS) -isl_closure_DEPENDENCIES = libisl.la -am_isl_pip_OBJECTS = isl_pip-pip.$(OBJEXT) -isl_pip_OBJECTS = $(am_isl_pip_OBJECTS) -isl_pip_DEPENDENCIES = libisl.la -isl_pip_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(isl_pip_LDFLAGS) $(LDFLAGS) -o $@ -am_isl_polyhedron_detect_equalities_OBJECTS = isl_polyhedron_detect_equalities-polyhedron_detect_equalities.$(OBJEXT) -isl_polyhedron_detect_equalities_OBJECTS = \ - $(am_isl_polyhedron_detect_equalities_OBJECTS) -isl_polyhedron_detect_equalities_DEPENDENCIES = libisl.la -am_isl_polyhedron_minimize_OBJECTS = \ - isl_polyhedron_minimize-polyhedron_minimize.$(OBJEXT) -isl_polyhedron_minimize_OBJECTS = \ - $(am_isl_polyhedron_minimize_OBJECTS) -isl_polyhedron_minimize_DEPENDENCIES = libisl.la -isl_polyhedron_minimize_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(AM_CFLAGS) $(CFLAGS) $(isl_polyhedron_minimize_LDFLAGS) \ - $(LDFLAGS) -o $@ -am_isl_polyhedron_sample_OBJECTS = \ - isl_polyhedron_sample-polyhedron_sample.$(OBJEXT) -isl_polyhedron_sample_OBJECTS = $(am_isl_polyhedron_sample_OBJECTS) -isl_polyhedron_sample_DEPENDENCIES = libisl.la -am_isl_polytope_scan_OBJECTS = \ - isl_polytope_scan-polytope_scan.$(OBJEXT) -isl_polytope_scan_OBJECTS = $(am_isl_polytope_scan_OBJECTS) -isl_polytope_scan_DEPENDENCIES = libisl.la -isl_test_SOURCES = isl_test.c -isl_test_OBJECTS = isl_test-isl_test.$(OBJEXT) -isl_test_DEPENDENCIES = libisl.la -isl_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(isl_test_LDFLAGS) $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(libisl_la_SOURCES) $(EXTRA_libisl_la_SOURCES) \ - $(isl_bound_SOURCES) $(isl_cat_SOURCES) $(isl_closure_SOURCES) \ - $(isl_pip_SOURCES) $(isl_polyhedron_detect_equalities_SOURCES) \ - $(isl_polyhedron_minimize_SOURCES) \ - $(isl_polyhedron_sample_SOURCES) $(isl_polytope_scan_SOURCES) \ - isl_test.c -DIST_SOURCES = $(am__libisl_la_SOURCES_DIST) \ - $(EXTRA_libisl_la_SOURCES) $(isl_bound_SOURCES) \ - $(isl_cat_SOURCES) $(isl_closure_SOURCES) $(isl_pip_SOURCES) \ - $(isl_polyhedron_detect_equalities_SOURCES) \ - $(isl_polyhedron_minimize_SOURCES) \ - $(isl_polyhedron_sample_SOURCES) $(isl_polytope_scan_SOURCES) \ - isl_test.c -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -DATA = $(pkgconfig_DATA) -HEADERS = $(nodist_pkginclude_HEADERS) $(pkginclude_HEADERS) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir dist dist-all distcheck -ETAGS = etags -CTAGS = ctags -am__tty_colors = \ -red=; grn=; lgn=; blu=; std= -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIT_HEAD = @GIT_HEAD@ -GIT_HEAD_ID = @GIT_HEAD_ID@ -GIT_HEAD_VERSION = @GIT_HEAD_VERSION@ -GMP_CPPFLAGS = @GMP_CPPFLAGS@ -GMP_LDFLAGS = @GMP_LDFLAGS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PDFLATEX = @PDFLATEX@ -PERL = @PERL@ -PIPLIB_CPPFLAGS = @PIPLIB_CPPFLAGS@ -PIPLIB_LDFLAGS = @PIPLIB_LDFLAGS@ -PIPLIB_LIBS = @PIPLIB_LIBS@ -POD2HTML = @POD2HTML@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -WARNING_FLAGS = @WARNING_FLAGS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfig_libdir = @pkgconfig_libdir@ -pkgconfig_libfile = @pkgconfig_libfile@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -versioninfo = @versioninfo@ -SUBDIRS = . doc -DIST_SUBDIRS = doc -ACLOCAL_AMFLAGS = -I m4 -AUTOMAKE_OPTIONS = nostdinc -lib_LTLIBRARIES = libisl.la -@HAVE_PIPLIB_FALSE@ISL_PIPLIB = \ -@HAVE_PIPLIB_FALSE@ isl_lp_no_piplib.c \ -@HAVE_PIPLIB_FALSE@ isl_map_no_piplib.c \ -@HAVE_PIPLIB_FALSE@ isl_sample_no_piplib.c - -@HAVE_PIPLIB_TRUE@ISL_PIPLIB = \ -@HAVE_PIPLIB_TRUE@ isl_lp_piplib.c \ -@HAVE_PIPLIB_TRUE@ isl_map_piplib.c \ -@HAVE_PIPLIB_TRUE@ isl_sample_piplib.c \ -@HAVE_PIPLIB_TRUE@ isl_sample_piplib.h \ -@HAVE_PIPLIB_TRUE@ isl_piplib.c - -@NEED_GET_MEMORY_FUNCTIONS_TRUE@GET_MEMORY_FUNCTIONS = mp_get_memory_functions.c -INCLUDES = -I. -I$(srcdir) -I$(srcdir)/include -Iinclude/ -AM_CFLAGS = @WARNING_FLAGS@ -libisl_la_SOURCES = \ - $(ISL_PIPLIB) \ - $(GET_MEMORY_FUNCTIONS) \ - isl_aff.c \ - isl_aff_private.h \ - isl_affine_hull.c \ - isl_arg.c \ - isl_band.c \ - isl_band_private.h \ - isl_basis_reduction.h \ - basis_reduction_tab.c \ - isl_bernstein.c \ - isl_bernstein.h \ - isl_blk.c \ - isl_bound.c \ - isl_bound.h \ - isl_coalesce.c \ - isl_constraint.c \ - isl_constraint_private.h \ - isl_convex_hull.c \ - isl_ctx.c \ - isl_ctx_private.h \ - isl_dim.c \ - isl_dim_private.h \ - isl_dim_map.h \ - isl_dim_map.c \ - isl_div.c \ - isl_div_private.h \ - isl_equalities.c \ - isl_equalities.h \ - isl_factorization.c \ - isl_factorization.h \ - isl_farkas.c \ - isl_flow.c \ - isl_fold.c \ - isl_gmp.c \ - isl_hash.c \ - isl_hmap_map_basic_set.c \ - isl_hmap_map_basic_set.h \ - isl_ilp.c \ - isl_input.c \ - isl_list.c \ - isl_list_private.h \ - isl_local_space_private.h \ - isl_local_space.c \ - isl_lp.c \ - isl_lp_piplib.h \ - isl_map.c \ - isl_map_simplify.c \ - isl_map_subtract.c \ - isl_map_private.h \ - isl_map_piplib.h \ - isl_mat.c \ - isl_mat_private.h \ - isl_morph.c \ - isl_morph.h \ - isl_name.c \ - isl_name.h \ - isl_obj.c \ - isl_options.c \ - isl_output.c \ - isl_qsort.c \ - isl_qsort.h \ - isl_piplib.h \ - isl_point_private.h \ - isl_point.c \ - isl_polynomial_private.h \ - isl_polynomial.c \ - isl_printer_private.h \ - isl_printer.c \ - isl_range.c \ - isl_range.h \ - isl_reordering.c \ - isl_reordering.h \ - isl_sample.h \ - isl_sample.c \ - isl_scan.c \ - isl_scan.h \ - isl_schedule.c \ - isl_schedule_private.h \ - isl_stream.c \ - isl_seq.c \ - isl_tab.c \ - isl_tab.h \ - isl_tab_pip.c \ - isl_transitive_closure.c \ - isl_union_map.c \ - isl_union_map_private.h \ - isl_vec.c \ - isl_version.c \ - isl_vertices_private.h \ - isl_vertices.c - -EXTRA_libisl_la_SOURCES = \ - isl_lp_piplib.c \ - isl_lp_no_piplib.c \ - isl_map_piplib.c \ - isl_map_no_piplib.c \ - isl_sample_no_piplib.c \ - isl_sample_piplib.c \ - isl_sample_piplib.h \ - isl_piplib.c - -libisl_la_LIBADD = @PIPLIB_LIBS@ -lgmp -libisl_la_LDFLAGS = -version-info @versioninfo@ \ - @PIPLIB_LDFLAGS@ @GMP_LDFLAGS@ - -libisl_la_CPPFLAGS = $(INCLUDES) @PIPLIB_CPPFLAGS@ @GMP_CPPFLAGS@ -isl_test_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_test_LDFLAGS = @GMP_LDFLAGS@ -isl_test_LDADD = libisl.la -lgmp -isl_polyhedron_sample_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polyhedron_sample_LDADD = libisl.la -isl_polyhedron_sample_SOURCES = \ - polyhedron_sample.c - -isl_pip_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_pip_LDFLAGS = @GMP_LDFLAGS@ -isl_pip_LDADD = libisl.la -lgmp -isl_pip_SOURCES = \ - pip.c - -isl_bound_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_bound_LDFLAGS = @GMP_LDFLAGS@ -isl_bound_LDADD = libisl.la -lgmp -isl_bound_SOURCES = \ - bound.c - -isl_polyhedron_minimize_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polyhedron_minimize_LDFLAGS = @GMP_LDFLAGS@ -isl_polyhedron_minimize_LDADD = libisl.la -lgmp -isl_polyhedron_minimize_SOURCES = \ - polyhedron_minimize.c - -isl_polytope_scan_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polytope_scan_LDADD = libisl.la -isl_polytope_scan_SOURCES = \ - polytope_scan.c - -isl_polyhedron_detect_equalities_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polyhedron_detect_equalities_LDADD = libisl.la -isl_polyhedron_detect_equalities_SOURCES = \ - polyhedron_detect_equalities.c - -isl_cat_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_cat_LDADD = libisl.la -isl_cat_SOURCES = \ - cat.c - -isl_closure_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_closure_LDADD = libisl.la -isl_closure_SOURCES = \ - closure.c - -nodist_pkginclude_HEADERS = \ - include/isl/config.h \ - include/isl/stdint.h - -pkginclude_HEADERS = \ - include/isl/aff.h \ - include/isl/aff_type.h \ - include/isl/arg.h \ - include/isl/band.h \ - include/isl/blk.h \ - include/isl/constraint.h \ - include/isl/ctx.h \ - include/isl/dim.h \ - include/isl/div.h \ - include/isl/flow.h \ - include/isl/ilp.h \ - include/isl/int.h \ - include/isl/hash.h \ - include/isl/list.h \ - include/isl/local_space.h \ - include/isl/lp.h \ - include/isl/mat.h \ - include/isl/map.h \ - include/isl/map_type.h \ - include/isl/obj.h \ - include/isl/options.h \ - include/isl/point.h \ - include/isl/polynomial.h \ - include/isl/printer.h \ - include/isl/schedule.h \ - include/isl/seq.h \ - include/isl/set.h \ - include/isl/set_type.h \ - include/isl/stream.h \ - include/isl/union_map.h \ - include/isl/union_set.h \ - include/isl/vec.h \ - include/isl/version.h \ - include/isl/vertices.h - -EXTRA_DIST = \ - isl_config_post.h \ - basis_reduction_templ.c \ - isl_list_templ.c \ - isl_list_templ.h \ - isl_pw_templ.c \ - isl_union_templ.c \ - isl.py \ - doc/chicago.bst \ - doc/chicago.sty \ - doc/implementation.tex \ - doc/isl.bib \ - doc/mypod2latex \ - doc/manual.tex \ - doc/user.pod \ - test_inputs - -pkgconfigdir = $(pkgconfig_libdir) -pkgconfig_DATA = $(pkgconfig_libfile) -all: isl_config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -am--refresh: - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -isl_config.h: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ - else :; fi - -stamp-h1: $(srcdir)/isl_config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status isl_config.h -$(srcdir)/isl_config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -include/isl/config.h: include/isl/stamp-h2 - @if test ! -f $@; then \ - rm -f include/isl/stamp-h2; \ - $(MAKE) $(AM_MAKEFLAGS) include/isl/stamp-h2; \ - else :; fi - -include/isl/stamp-h2: $(top_srcdir)/include/isl/config.h.in $(top_builddir)/config.status - @rm -f include/isl/stamp-h2 - cd $(top_builddir) && $(SHELL) ./config.status include/isl/config.h - -distclean-hdr: - -rm -f isl_config.h stamp-h1 include/isl/config.h include/isl/stamp-h2 -bound_test.sh: $(top_builddir)/config.status $(srcdir)/bound_test.sh.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -pip_test.sh: $(top_builddir)/config.status $(srcdir)/pip_test.sh.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libisl.la: $(libisl_la_OBJECTS) $(libisl_la_DEPENDENCIES) - $(AM_V_CCLD)$(libisl_la_LINK) -rpath $(libdir) $(libisl_la_OBJECTS) $(libisl_la_LIBADD) $(LIBS) - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list -isl_bound$(EXEEXT): $(isl_bound_OBJECTS) $(isl_bound_DEPENDENCIES) - @rm -f isl_bound$(EXEEXT) - $(AM_V_CCLD)$(isl_bound_LINK) $(isl_bound_OBJECTS) $(isl_bound_LDADD) $(LIBS) -isl_cat$(EXEEXT): $(isl_cat_OBJECTS) $(isl_cat_DEPENDENCIES) - @rm -f isl_cat$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(isl_cat_OBJECTS) $(isl_cat_LDADD) $(LIBS) -isl_closure$(EXEEXT): $(isl_closure_OBJECTS) $(isl_closure_DEPENDENCIES) - @rm -f isl_closure$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(isl_closure_OBJECTS) $(isl_closure_LDADD) $(LIBS) -isl_pip$(EXEEXT): $(isl_pip_OBJECTS) $(isl_pip_DEPENDENCIES) - @rm -f isl_pip$(EXEEXT) - $(AM_V_CCLD)$(isl_pip_LINK) $(isl_pip_OBJECTS) $(isl_pip_LDADD) $(LIBS) -isl_polyhedron_detect_equalities$(EXEEXT): $(isl_polyhedron_detect_equalities_OBJECTS) $(isl_polyhedron_detect_equalities_DEPENDENCIES) - @rm -f isl_polyhedron_detect_equalities$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(isl_polyhedron_detect_equalities_OBJECTS) $(isl_polyhedron_detect_equalities_LDADD) $(LIBS) -isl_polyhedron_minimize$(EXEEXT): $(isl_polyhedron_minimize_OBJECTS) $(isl_polyhedron_minimize_DEPENDENCIES) - @rm -f isl_polyhedron_minimize$(EXEEXT) - $(AM_V_CCLD)$(isl_polyhedron_minimize_LINK) $(isl_polyhedron_minimize_OBJECTS) $(isl_polyhedron_minimize_LDADD) $(LIBS) -isl_polyhedron_sample$(EXEEXT): $(isl_polyhedron_sample_OBJECTS) $(isl_polyhedron_sample_DEPENDENCIES) - @rm -f isl_polyhedron_sample$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(isl_polyhedron_sample_OBJECTS) $(isl_polyhedron_sample_LDADD) $(LIBS) -isl_polytope_scan$(EXEEXT): $(isl_polytope_scan_OBJECTS) $(isl_polytope_scan_DEPENDENCIES) - @rm -f isl_polytope_scan$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(isl_polytope_scan_OBJECTS) $(isl_polytope_scan_LDADD) $(LIBS) -isl_test$(EXEEXT): $(isl_test_OBJECTS) $(isl_test_DEPENDENCIES) - @rm -f isl_test$(EXEEXT) - $(AM_V_CCLD)$(isl_test_LINK) $(isl_test_OBJECTS) $(isl_test_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_bound-bound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_cat-cat.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_closure-closure.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_pip-pip.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_polyhedron_detect_equalities-polyhedron_detect_equalities.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_polyhedron_minimize-polyhedron_minimize.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_polyhedron_sample-polyhedron_sample.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_polytope_scan-polytope_scan.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_test-isl_test.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-basis_reduction_tab.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_aff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_affine_hull.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_arg.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_band.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_bernstein.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_blk.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_bound.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_coalesce.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_constraint.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_convex_hull.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_ctx.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_dim.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_dim_map.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_div.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_equalities.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_factorization.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_farkas.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_flow.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_fold.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_gmp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_hash.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_hmap_map_basic_set.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_ilp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_input.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_list.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_local_space.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_lp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_lp_no_piplib.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_lp_piplib.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_map.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_map_no_piplib.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_map_piplib.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_map_simplify.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_map_subtract.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_mat.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_morph.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_name.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_obj.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_options.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_output.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_piplib.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_point.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_polynomial.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_printer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_qsort.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_range.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_reordering.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_sample.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_sample_no_piplib.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_sample_piplib.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_scan.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_schedule.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_seq.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_stream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_tab.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_tab_pip.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_transitive_closure.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_union_map.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_vec.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_version.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_vertices.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-mp_get_memory_functions.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -libisl_la-isl_lp_no_piplib.lo: isl_lp_no_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_lp_no_piplib.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_lp_no_piplib.Tpo -c -o libisl_la-isl_lp_no_piplib.lo `test -f 'isl_lp_no_piplib.c' || echo '$(srcdir)/'`isl_lp_no_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_lp_no_piplib.Tpo $(DEPDIR)/libisl_la-isl_lp_no_piplib.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_lp_no_piplib.c' object='libisl_la-isl_lp_no_piplib.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_lp_no_piplib.lo `test -f 'isl_lp_no_piplib.c' || echo '$(srcdir)/'`isl_lp_no_piplib.c - -libisl_la-isl_map_no_piplib.lo: isl_map_no_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_map_no_piplib.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_map_no_piplib.Tpo -c -o libisl_la-isl_map_no_piplib.lo `test -f 'isl_map_no_piplib.c' || echo '$(srcdir)/'`isl_map_no_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_map_no_piplib.Tpo $(DEPDIR)/libisl_la-isl_map_no_piplib.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_map_no_piplib.c' object='libisl_la-isl_map_no_piplib.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_map_no_piplib.lo `test -f 'isl_map_no_piplib.c' || echo '$(srcdir)/'`isl_map_no_piplib.c - -libisl_la-isl_sample_no_piplib.lo: isl_sample_no_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_sample_no_piplib.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_sample_no_piplib.Tpo -c -o libisl_la-isl_sample_no_piplib.lo `test -f 'isl_sample_no_piplib.c' || echo '$(srcdir)/'`isl_sample_no_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_sample_no_piplib.Tpo $(DEPDIR)/libisl_la-isl_sample_no_piplib.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_sample_no_piplib.c' object='libisl_la-isl_sample_no_piplib.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_sample_no_piplib.lo `test -f 'isl_sample_no_piplib.c' || echo '$(srcdir)/'`isl_sample_no_piplib.c - -libisl_la-isl_lp_piplib.lo: isl_lp_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_lp_piplib.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_lp_piplib.Tpo -c -o libisl_la-isl_lp_piplib.lo `test -f 'isl_lp_piplib.c' || echo '$(srcdir)/'`isl_lp_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_lp_piplib.Tpo $(DEPDIR)/libisl_la-isl_lp_piplib.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_lp_piplib.c' object='libisl_la-isl_lp_piplib.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_lp_piplib.lo `test -f 'isl_lp_piplib.c' || echo '$(srcdir)/'`isl_lp_piplib.c - -libisl_la-isl_map_piplib.lo: isl_map_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_map_piplib.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_map_piplib.Tpo -c -o libisl_la-isl_map_piplib.lo `test -f 'isl_map_piplib.c' || echo '$(srcdir)/'`isl_map_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_map_piplib.Tpo $(DEPDIR)/libisl_la-isl_map_piplib.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_map_piplib.c' object='libisl_la-isl_map_piplib.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_map_piplib.lo `test -f 'isl_map_piplib.c' || echo '$(srcdir)/'`isl_map_piplib.c - -libisl_la-isl_sample_piplib.lo: isl_sample_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_sample_piplib.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_sample_piplib.Tpo -c -o libisl_la-isl_sample_piplib.lo `test -f 'isl_sample_piplib.c' || echo '$(srcdir)/'`isl_sample_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_sample_piplib.Tpo $(DEPDIR)/libisl_la-isl_sample_piplib.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_sample_piplib.c' object='libisl_la-isl_sample_piplib.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_sample_piplib.lo `test -f 'isl_sample_piplib.c' || echo '$(srcdir)/'`isl_sample_piplib.c - -libisl_la-isl_piplib.lo: isl_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_piplib.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_piplib.Tpo -c -o libisl_la-isl_piplib.lo `test -f 'isl_piplib.c' || echo '$(srcdir)/'`isl_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_piplib.Tpo $(DEPDIR)/libisl_la-isl_piplib.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_piplib.c' object='libisl_la-isl_piplib.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_piplib.lo `test -f 'isl_piplib.c' || echo '$(srcdir)/'`isl_piplib.c - -libisl_la-mp_get_memory_functions.lo: mp_get_memory_functions.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-mp_get_memory_functions.lo -MD -MP -MF $(DEPDIR)/libisl_la-mp_get_memory_functions.Tpo -c -o libisl_la-mp_get_memory_functions.lo `test -f 'mp_get_memory_functions.c' || echo '$(srcdir)/'`mp_get_memory_functions.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-mp_get_memory_functions.Tpo $(DEPDIR)/libisl_la-mp_get_memory_functions.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mp_get_memory_functions.c' object='libisl_la-mp_get_memory_functions.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-mp_get_memory_functions.lo `test -f 'mp_get_memory_functions.c' || echo '$(srcdir)/'`mp_get_memory_functions.c - -libisl_la-isl_aff.lo: isl_aff.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_aff.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_aff.Tpo -c -o libisl_la-isl_aff.lo `test -f 'isl_aff.c' || echo '$(srcdir)/'`isl_aff.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_aff.Tpo $(DEPDIR)/libisl_la-isl_aff.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_aff.c' object='libisl_la-isl_aff.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_aff.lo `test -f 'isl_aff.c' || echo '$(srcdir)/'`isl_aff.c - -libisl_la-isl_affine_hull.lo: isl_affine_hull.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_affine_hull.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_affine_hull.Tpo -c -o libisl_la-isl_affine_hull.lo `test -f 'isl_affine_hull.c' || echo '$(srcdir)/'`isl_affine_hull.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_affine_hull.Tpo $(DEPDIR)/libisl_la-isl_affine_hull.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_affine_hull.c' object='libisl_la-isl_affine_hull.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_affine_hull.lo `test -f 'isl_affine_hull.c' || echo '$(srcdir)/'`isl_affine_hull.c - -libisl_la-isl_arg.lo: isl_arg.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_arg.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_arg.Tpo -c -o libisl_la-isl_arg.lo `test -f 'isl_arg.c' || echo '$(srcdir)/'`isl_arg.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_arg.Tpo $(DEPDIR)/libisl_la-isl_arg.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_arg.c' object='libisl_la-isl_arg.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_arg.lo `test -f 'isl_arg.c' || echo '$(srcdir)/'`isl_arg.c - -libisl_la-isl_band.lo: isl_band.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_band.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_band.Tpo -c -o libisl_la-isl_band.lo `test -f 'isl_band.c' || echo '$(srcdir)/'`isl_band.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_band.Tpo $(DEPDIR)/libisl_la-isl_band.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_band.c' object='libisl_la-isl_band.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_band.lo `test -f 'isl_band.c' || echo '$(srcdir)/'`isl_band.c - -libisl_la-basis_reduction_tab.lo: basis_reduction_tab.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-basis_reduction_tab.lo -MD -MP -MF $(DEPDIR)/libisl_la-basis_reduction_tab.Tpo -c -o libisl_la-basis_reduction_tab.lo `test -f 'basis_reduction_tab.c' || echo '$(srcdir)/'`basis_reduction_tab.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-basis_reduction_tab.Tpo $(DEPDIR)/libisl_la-basis_reduction_tab.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='basis_reduction_tab.c' object='libisl_la-basis_reduction_tab.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-basis_reduction_tab.lo `test -f 'basis_reduction_tab.c' || echo '$(srcdir)/'`basis_reduction_tab.c - -libisl_la-isl_bernstein.lo: isl_bernstein.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_bernstein.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_bernstein.Tpo -c -o libisl_la-isl_bernstein.lo `test -f 'isl_bernstein.c' || echo '$(srcdir)/'`isl_bernstein.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_bernstein.Tpo $(DEPDIR)/libisl_la-isl_bernstein.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_bernstein.c' object='libisl_la-isl_bernstein.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_bernstein.lo `test -f 'isl_bernstein.c' || echo '$(srcdir)/'`isl_bernstein.c - -libisl_la-isl_blk.lo: isl_blk.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_blk.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_blk.Tpo -c -o libisl_la-isl_blk.lo `test -f 'isl_blk.c' || echo '$(srcdir)/'`isl_blk.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_blk.Tpo $(DEPDIR)/libisl_la-isl_blk.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_blk.c' object='libisl_la-isl_blk.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_blk.lo `test -f 'isl_blk.c' || echo '$(srcdir)/'`isl_blk.c - -libisl_la-isl_bound.lo: isl_bound.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_bound.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_bound.Tpo -c -o libisl_la-isl_bound.lo `test -f 'isl_bound.c' || echo '$(srcdir)/'`isl_bound.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_bound.Tpo $(DEPDIR)/libisl_la-isl_bound.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_bound.c' object='libisl_la-isl_bound.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_bound.lo `test -f 'isl_bound.c' || echo '$(srcdir)/'`isl_bound.c - -libisl_la-isl_coalesce.lo: isl_coalesce.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_coalesce.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_coalesce.Tpo -c -o libisl_la-isl_coalesce.lo `test -f 'isl_coalesce.c' || echo '$(srcdir)/'`isl_coalesce.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_coalesce.Tpo $(DEPDIR)/libisl_la-isl_coalesce.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_coalesce.c' object='libisl_la-isl_coalesce.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_coalesce.lo `test -f 'isl_coalesce.c' || echo '$(srcdir)/'`isl_coalesce.c - -libisl_la-isl_constraint.lo: isl_constraint.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_constraint.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_constraint.Tpo -c -o libisl_la-isl_constraint.lo `test -f 'isl_constraint.c' || echo '$(srcdir)/'`isl_constraint.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_constraint.Tpo $(DEPDIR)/libisl_la-isl_constraint.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_constraint.c' object='libisl_la-isl_constraint.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_constraint.lo `test -f 'isl_constraint.c' || echo '$(srcdir)/'`isl_constraint.c - -libisl_la-isl_convex_hull.lo: isl_convex_hull.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_convex_hull.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_convex_hull.Tpo -c -o libisl_la-isl_convex_hull.lo `test -f 'isl_convex_hull.c' || echo '$(srcdir)/'`isl_convex_hull.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_convex_hull.Tpo $(DEPDIR)/libisl_la-isl_convex_hull.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_convex_hull.c' object='libisl_la-isl_convex_hull.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_convex_hull.lo `test -f 'isl_convex_hull.c' || echo '$(srcdir)/'`isl_convex_hull.c - -libisl_la-isl_ctx.lo: isl_ctx.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_ctx.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_ctx.Tpo -c -o libisl_la-isl_ctx.lo `test -f 'isl_ctx.c' || echo '$(srcdir)/'`isl_ctx.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_ctx.Tpo $(DEPDIR)/libisl_la-isl_ctx.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_ctx.c' object='libisl_la-isl_ctx.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_ctx.lo `test -f 'isl_ctx.c' || echo '$(srcdir)/'`isl_ctx.c - -libisl_la-isl_dim.lo: isl_dim.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_dim.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_dim.Tpo -c -o libisl_la-isl_dim.lo `test -f 'isl_dim.c' || echo '$(srcdir)/'`isl_dim.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_dim.Tpo $(DEPDIR)/libisl_la-isl_dim.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_dim.c' object='libisl_la-isl_dim.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_dim.lo `test -f 'isl_dim.c' || echo '$(srcdir)/'`isl_dim.c - -libisl_la-isl_dim_map.lo: isl_dim_map.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_dim_map.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_dim_map.Tpo -c -o libisl_la-isl_dim_map.lo `test -f 'isl_dim_map.c' || echo '$(srcdir)/'`isl_dim_map.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_dim_map.Tpo $(DEPDIR)/libisl_la-isl_dim_map.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_dim_map.c' object='libisl_la-isl_dim_map.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_dim_map.lo `test -f 'isl_dim_map.c' || echo '$(srcdir)/'`isl_dim_map.c - -libisl_la-isl_div.lo: isl_div.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_div.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_div.Tpo -c -o libisl_la-isl_div.lo `test -f 'isl_div.c' || echo '$(srcdir)/'`isl_div.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_div.Tpo $(DEPDIR)/libisl_la-isl_div.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_div.c' object='libisl_la-isl_div.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_div.lo `test -f 'isl_div.c' || echo '$(srcdir)/'`isl_div.c - -libisl_la-isl_equalities.lo: isl_equalities.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_equalities.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_equalities.Tpo -c -o libisl_la-isl_equalities.lo `test -f 'isl_equalities.c' || echo '$(srcdir)/'`isl_equalities.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_equalities.Tpo $(DEPDIR)/libisl_la-isl_equalities.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_equalities.c' object='libisl_la-isl_equalities.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_equalities.lo `test -f 'isl_equalities.c' || echo '$(srcdir)/'`isl_equalities.c - -libisl_la-isl_factorization.lo: isl_factorization.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_factorization.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_factorization.Tpo -c -o libisl_la-isl_factorization.lo `test -f 'isl_factorization.c' || echo '$(srcdir)/'`isl_factorization.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_factorization.Tpo $(DEPDIR)/libisl_la-isl_factorization.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_factorization.c' object='libisl_la-isl_factorization.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_factorization.lo `test -f 'isl_factorization.c' || echo '$(srcdir)/'`isl_factorization.c - -libisl_la-isl_farkas.lo: isl_farkas.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_farkas.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_farkas.Tpo -c -o libisl_la-isl_farkas.lo `test -f 'isl_farkas.c' || echo '$(srcdir)/'`isl_farkas.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_farkas.Tpo $(DEPDIR)/libisl_la-isl_farkas.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_farkas.c' object='libisl_la-isl_farkas.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_farkas.lo `test -f 'isl_farkas.c' || echo '$(srcdir)/'`isl_farkas.c - -libisl_la-isl_flow.lo: isl_flow.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_flow.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_flow.Tpo -c -o libisl_la-isl_flow.lo `test -f 'isl_flow.c' || echo '$(srcdir)/'`isl_flow.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_flow.Tpo $(DEPDIR)/libisl_la-isl_flow.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_flow.c' object='libisl_la-isl_flow.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_flow.lo `test -f 'isl_flow.c' || echo '$(srcdir)/'`isl_flow.c - -libisl_la-isl_fold.lo: isl_fold.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_fold.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_fold.Tpo -c -o libisl_la-isl_fold.lo `test -f 'isl_fold.c' || echo '$(srcdir)/'`isl_fold.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_fold.Tpo $(DEPDIR)/libisl_la-isl_fold.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_fold.c' object='libisl_la-isl_fold.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_fold.lo `test -f 'isl_fold.c' || echo '$(srcdir)/'`isl_fold.c - -libisl_la-isl_gmp.lo: isl_gmp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_gmp.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_gmp.Tpo -c -o libisl_la-isl_gmp.lo `test -f 'isl_gmp.c' || echo '$(srcdir)/'`isl_gmp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_gmp.Tpo $(DEPDIR)/libisl_la-isl_gmp.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_gmp.c' object='libisl_la-isl_gmp.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_gmp.lo `test -f 'isl_gmp.c' || echo '$(srcdir)/'`isl_gmp.c - -libisl_la-isl_hash.lo: isl_hash.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_hash.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_hash.Tpo -c -o libisl_la-isl_hash.lo `test -f 'isl_hash.c' || echo '$(srcdir)/'`isl_hash.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_hash.Tpo $(DEPDIR)/libisl_la-isl_hash.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_hash.c' object='libisl_la-isl_hash.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_hash.lo `test -f 'isl_hash.c' || echo '$(srcdir)/'`isl_hash.c - -libisl_la-isl_hmap_map_basic_set.lo: isl_hmap_map_basic_set.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_hmap_map_basic_set.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_hmap_map_basic_set.Tpo -c -o libisl_la-isl_hmap_map_basic_set.lo `test -f 'isl_hmap_map_basic_set.c' || echo '$(srcdir)/'`isl_hmap_map_basic_set.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_hmap_map_basic_set.Tpo $(DEPDIR)/libisl_la-isl_hmap_map_basic_set.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_hmap_map_basic_set.c' object='libisl_la-isl_hmap_map_basic_set.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_hmap_map_basic_set.lo `test -f 'isl_hmap_map_basic_set.c' || echo '$(srcdir)/'`isl_hmap_map_basic_set.c - -libisl_la-isl_ilp.lo: isl_ilp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_ilp.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_ilp.Tpo -c -o libisl_la-isl_ilp.lo `test -f 'isl_ilp.c' || echo '$(srcdir)/'`isl_ilp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_ilp.Tpo $(DEPDIR)/libisl_la-isl_ilp.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_ilp.c' object='libisl_la-isl_ilp.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_ilp.lo `test -f 'isl_ilp.c' || echo '$(srcdir)/'`isl_ilp.c - -libisl_la-isl_input.lo: isl_input.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_input.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_input.Tpo -c -o libisl_la-isl_input.lo `test -f 'isl_input.c' || echo '$(srcdir)/'`isl_input.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_input.Tpo $(DEPDIR)/libisl_la-isl_input.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_input.c' object='libisl_la-isl_input.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_input.lo `test -f 'isl_input.c' || echo '$(srcdir)/'`isl_input.c - -libisl_la-isl_list.lo: isl_list.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_list.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_list.Tpo -c -o libisl_la-isl_list.lo `test -f 'isl_list.c' || echo '$(srcdir)/'`isl_list.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_list.Tpo $(DEPDIR)/libisl_la-isl_list.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_list.c' object='libisl_la-isl_list.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_list.lo `test -f 'isl_list.c' || echo '$(srcdir)/'`isl_list.c - -libisl_la-isl_local_space.lo: isl_local_space.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_local_space.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_local_space.Tpo -c -o libisl_la-isl_local_space.lo `test -f 'isl_local_space.c' || echo '$(srcdir)/'`isl_local_space.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_local_space.Tpo $(DEPDIR)/libisl_la-isl_local_space.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_local_space.c' object='libisl_la-isl_local_space.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_local_space.lo `test -f 'isl_local_space.c' || echo '$(srcdir)/'`isl_local_space.c - -libisl_la-isl_lp.lo: isl_lp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_lp.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_lp.Tpo -c -o libisl_la-isl_lp.lo `test -f 'isl_lp.c' || echo '$(srcdir)/'`isl_lp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_lp.Tpo $(DEPDIR)/libisl_la-isl_lp.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_lp.c' object='libisl_la-isl_lp.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_lp.lo `test -f 'isl_lp.c' || echo '$(srcdir)/'`isl_lp.c - -libisl_la-isl_map.lo: isl_map.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_map.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_map.Tpo -c -o libisl_la-isl_map.lo `test -f 'isl_map.c' || echo '$(srcdir)/'`isl_map.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_map.Tpo $(DEPDIR)/libisl_la-isl_map.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_map.c' object='libisl_la-isl_map.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_map.lo `test -f 'isl_map.c' || echo '$(srcdir)/'`isl_map.c - -libisl_la-isl_map_simplify.lo: isl_map_simplify.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_map_simplify.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_map_simplify.Tpo -c -o libisl_la-isl_map_simplify.lo `test -f 'isl_map_simplify.c' || echo '$(srcdir)/'`isl_map_simplify.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_map_simplify.Tpo $(DEPDIR)/libisl_la-isl_map_simplify.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_map_simplify.c' object='libisl_la-isl_map_simplify.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_map_simplify.lo `test -f 'isl_map_simplify.c' || echo '$(srcdir)/'`isl_map_simplify.c - -libisl_la-isl_map_subtract.lo: isl_map_subtract.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_map_subtract.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_map_subtract.Tpo -c -o libisl_la-isl_map_subtract.lo `test -f 'isl_map_subtract.c' || echo '$(srcdir)/'`isl_map_subtract.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_map_subtract.Tpo $(DEPDIR)/libisl_la-isl_map_subtract.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_map_subtract.c' object='libisl_la-isl_map_subtract.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_map_subtract.lo `test -f 'isl_map_subtract.c' || echo '$(srcdir)/'`isl_map_subtract.c - -libisl_la-isl_mat.lo: isl_mat.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_mat.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_mat.Tpo -c -o libisl_la-isl_mat.lo `test -f 'isl_mat.c' || echo '$(srcdir)/'`isl_mat.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_mat.Tpo $(DEPDIR)/libisl_la-isl_mat.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_mat.c' object='libisl_la-isl_mat.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_mat.lo `test -f 'isl_mat.c' || echo '$(srcdir)/'`isl_mat.c - -libisl_la-isl_morph.lo: isl_morph.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_morph.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_morph.Tpo -c -o libisl_la-isl_morph.lo `test -f 'isl_morph.c' || echo '$(srcdir)/'`isl_morph.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_morph.Tpo $(DEPDIR)/libisl_la-isl_morph.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_morph.c' object='libisl_la-isl_morph.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_morph.lo `test -f 'isl_morph.c' || echo '$(srcdir)/'`isl_morph.c - -libisl_la-isl_name.lo: isl_name.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_name.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_name.Tpo -c -o libisl_la-isl_name.lo `test -f 'isl_name.c' || echo '$(srcdir)/'`isl_name.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_name.Tpo $(DEPDIR)/libisl_la-isl_name.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_name.c' object='libisl_la-isl_name.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_name.lo `test -f 'isl_name.c' || echo '$(srcdir)/'`isl_name.c - -libisl_la-isl_obj.lo: isl_obj.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_obj.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_obj.Tpo -c -o libisl_la-isl_obj.lo `test -f 'isl_obj.c' || echo '$(srcdir)/'`isl_obj.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_obj.Tpo $(DEPDIR)/libisl_la-isl_obj.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_obj.c' object='libisl_la-isl_obj.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_obj.lo `test -f 'isl_obj.c' || echo '$(srcdir)/'`isl_obj.c - -libisl_la-isl_options.lo: isl_options.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_options.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_options.Tpo -c -o libisl_la-isl_options.lo `test -f 'isl_options.c' || echo '$(srcdir)/'`isl_options.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_options.Tpo $(DEPDIR)/libisl_la-isl_options.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_options.c' object='libisl_la-isl_options.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_options.lo `test -f 'isl_options.c' || echo '$(srcdir)/'`isl_options.c - -libisl_la-isl_output.lo: isl_output.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_output.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_output.Tpo -c -o libisl_la-isl_output.lo `test -f 'isl_output.c' || echo '$(srcdir)/'`isl_output.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_output.Tpo $(DEPDIR)/libisl_la-isl_output.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_output.c' object='libisl_la-isl_output.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_output.lo `test -f 'isl_output.c' || echo '$(srcdir)/'`isl_output.c - -libisl_la-isl_qsort.lo: isl_qsort.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_qsort.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_qsort.Tpo -c -o libisl_la-isl_qsort.lo `test -f 'isl_qsort.c' || echo '$(srcdir)/'`isl_qsort.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_qsort.Tpo $(DEPDIR)/libisl_la-isl_qsort.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_qsort.c' object='libisl_la-isl_qsort.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_qsort.lo `test -f 'isl_qsort.c' || echo '$(srcdir)/'`isl_qsort.c - -libisl_la-isl_point.lo: isl_point.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_point.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_point.Tpo -c -o libisl_la-isl_point.lo `test -f 'isl_point.c' || echo '$(srcdir)/'`isl_point.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_point.Tpo $(DEPDIR)/libisl_la-isl_point.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_point.c' object='libisl_la-isl_point.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_point.lo `test -f 'isl_point.c' || echo '$(srcdir)/'`isl_point.c - -libisl_la-isl_polynomial.lo: isl_polynomial.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_polynomial.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_polynomial.Tpo -c -o libisl_la-isl_polynomial.lo `test -f 'isl_polynomial.c' || echo '$(srcdir)/'`isl_polynomial.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_polynomial.Tpo $(DEPDIR)/libisl_la-isl_polynomial.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_polynomial.c' object='libisl_la-isl_polynomial.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_polynomial.lo `test -f 'isl_polynomial.c' || echo '$(srcdir)/'`isl_polynomial.c - -libisl_la-isl_printer.lo: isl_printer.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_printer.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_printer.Tpo -c -o libisl_la-isl_printer.lo `test -f 'isl_printer.c' || echo '$(srcdir)/'`isl_printer.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_printer.Tpo $(DEPDIR)/libisl_la-isl_printer.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_printer.c' object='libisl_la-isl_printer.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_printer.lo `test -f 'isl_printer.c' || echo '$(srcdir)/'`isl_printer.c - -libisl_la-isl_range.lo: isl_range.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_range.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_range.Tpo -c -o libisl_la-isl_range.lo `test -f 'isl_range.c' || echo '$(srcdir)/'`isl_range.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_range.Tpo $(DEPDIR)/libisl_la-isl_range.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_range.c' object='libisl_la-isl_range.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_range.lo `test -f 'isl_range.c' || echo '$(srcdir)/'`isl_range.c - -libisl_la-isl_reordering.lo: isl_reordering.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_reordering.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_reordering.Tpo -c -o libisl_la-isl_reordering.lo `test -f 'isl_reordering.c' || echo '$(srcdir)/'`isl_reordering.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_reordering.Tpo $(DEPDIR)/libisl_la-isl_reordering.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_reordering.c' object='libisl_la-isl_reordering.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_reordering.lo `test -f 'isl_reordering.c' || echo '$(srcdir)/'`isl_reordering.c - -libisl_la-isl_sample.lo: isl_sample.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_sample.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_sample.Tpo -c -o libisl_la-isl_sample.lo `test -f 'isl_sample.c' || echo '$(srcdir)/'`isl_sample.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_sample.Tpo $(DEPDIR)/libisl_la-isl_sample.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_sample.c' object='libisl_la-isl_sample.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_sample.lo `test -f 'isl_sample.c' || echo '$(srcdir)/'`isl_sample.c - -libisl_la-isl_scan.lo: isl_scan.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_scan.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_scan.Tpo -c -o libisl_la-isl_scan.lo `test -f 'isl_scan.c' || echo '$(srcdir)/'`isl_scan.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_scan.Tpo $(DEPDIR)/libisl_la-isl_scan.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_scan.c' object='libisl_la-isl_scan.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_scan.lo `test -f 'isl_scan.c' || echo '$(srcdir)/'`isl_scan.c - -libisl_la-isl_schedule.lo: isl_schedule.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_schedule.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_schedule.Tpo -c -o libisl_la-isl_schedule.lo `test -f 'isl_schedule.c' || echo '$(srcdir)/'`isl_schedule.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_schedule.Tpo $(DEPDIR)/libisl_la-isl_schedule.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_schedule.c' object='libisl_la-isl_schedule.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_schedule.lo `test -f 'isl_schedule.c' || echo '$(srcdir)/'`isl_schedule.c - -libisl_la-isl_stream.lo: isl_stream.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_stream.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_stream.Tpo -c -o libisl_la-isl_stream.lo `test -f 'isl_stream.c' || echo '$(srcdir)/'`isl_stream.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_stream.Tpo $(DEPDIR)/libisl_la-isl_stream.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_stream.c' object='libisl_la-isl_stream.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_stream.lo `test -f 'isl_stream.c' || echo '$(srcdir)/'`isl_stream.c - -libisl_la-isl_seq.lo: isl_seq.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_seq.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_seq.Tpo -c -o libisl_la-isl_seq.lo `test -f 'isl_seq.c' || echo '$(srcdir)/'`isl_seq.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_seq.Tpo $(DEPDIR)/libisl_la-isl_seq.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_seq.c' object='libisl_la-isl_seq.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_seq.lo `test -f 'isl_seq.c' || echo '$(srcdir)/'`isl_seq.c - -libisl_la-isl_tab.lo: isl_tab.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_tab.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_tab.Tpo -c -o libisl_la-isl_tab.lo `test -f 'isl_tab.c' || echo '$(srcdir)/'`isl_tab.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_tab.Tpo $(DEPDIR)/libisl_la-isl_tab.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_tab.c' object='libisl_la-isl_tab.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_tab.lo `test -f 'isl_tab.c' || echo '$(srcdir)/'`isl_tab.c - -libisl_la-isl_tab_pip.lo: isl_tab_pip.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_tab_pip.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_tab_pip.Tpo -c -o libisl_la-isl_tab_pip.lo `test -f 'isl_tab_pip.c' || echo '$(srcdir)/'`isl_tab_pip.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_tab_pip.Tpo $(DEPDIR)/libisl_la-isl_tab_pip.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_tab_pip.c' object='libisl_la-isl_tab_pip.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_tab_pip.lo `test -f 'isl_tab_pip.c' || echo '$(srcdir)/'`isl_tab_pip.c - -libisl_la-isl_transitive_closure.lo: isl_transitive_closure.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_transitive_closure.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_transitive_closure.Tpo -c -o libisl_la-isl_transitive_closure.lo `test -f 'isl_transitive_closure.c' || echo '$(srcdir)/'`isl_transitive_closure.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_transitive_closure.Tpo $(DEPDIR)/libisl_la-isl_transitive_closure.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_transitive_closure.c' object='libisl_la-isl_transitive_closure.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_transitive_closure.lo `test -f 'isl_transitive_closure.c' || echo '$(srcdir)/'`isl_transitive_closure.c - -libisl_la-isl_union_map.lo: isl_union_map.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_union_map.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_union_map.Tpo -c -o libisl_la-isl_union_map.lo `test -f 'isl_union_map.c' || echo '$(srcdir)/'`isl_union_map.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_union_map.Tpo $(DEPDIR)/libisl_la-isl_union_map.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_union_map.c' object='libisl_la-isl_union_map.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_union_map.lo `test -f 'isl_union_map.c' || echo '$(srcdir)/'`isl_union_map.c - -libisl_la-isl_vec.lo: isl_vec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_vec.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_vec.Tpo -c -o libisl_la-isl_vec.lo `test -f 'isl_vec.c' || echo '$(srcdir)/'`isl_vec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_vec.Tpo $(DEPDIR)/libisl_la-isl_vec.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_vec.c' object='libisl_la-isl_vec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_vec.lo `test -f 'isl_vec.c' || echo '$(srcdir)/'`isl_vec.c - -libisl_la-isl_version.lo: isl_version.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_version.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_version.Tpo -c -o libisl_la-isl_version.lo `test -f 'isl_version.c' || echo '$(srcdir)/'`isl_version.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_version.Tpo $(DEPDIR)/libisl_la-isl_version.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_version.c' object='libisl_la-isl_version.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_version.lo `test -f 'isl_version.c' || echo '$(srcdir)/'`isl_version.c - -libisl_la-isl_vertices.lo: isl_vertices.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_vertices.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_vertices.Tpo -c -o libisl_la-isl_vertices.lo `test -f 'isl_vertices.c' || echo '$(srcdir)/'`isl_vertices.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_vertices.Tpo $(DEPDIR)/libisl_la-isl_vertices.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_vertices.c' object='libisl_la-isl_vertices.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_vertices.lo `test -f 'isl_vertices.c' || echo '$(srcdir)/'`isl_vertices.c - -isl_bound-bound.o: bound.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_bound_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_bound-bound.o -MD -MP -MF $(DEPDIR)/isl_bound-bound.Tpo -c -o isl_bound-bound.o `test -f 'bound.c' || echo '$(srcdir)/'`bound.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_bound-bound.Tpo $(DEPDIR)/isl_bound-bound.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bound.c' object='isl_bound-bound.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_bound_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_bound-bound.o `test -f 'bound.c' || echo '$(srcdir)/'`bound.c - -isl_bound-bound.obj: bound.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_bound_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_bound-bound.obj -MD -MP -MF $(DEPDIR)/isl_bound-bound.Tpo -c -o isl_bound-bound.obj `if test -f 'bound.c'; then $(CYGPATH_W) 'bound.c'; else $(CYGPATH_W) '$(srcdir)/bound.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_bound-bound.Tpo $(DEPDIR)/isl_bound-bound.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bound.c' object='isl_bound-bound.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_bound_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_bound-bound.obj `if test -f 'bound.c'; then $(CYGPATH_W) 'bound.c'; else $(CYGPATH_W) '$(srcdir)/bound.c'; fi` - -isl_cat-cat.o: cat.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_cat_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_cat-cat.o -MD -MP -MF $(DEPDIR)/isl_cat-cat.Tpo -c -o isl_cat-cat.o `test -f 'cat.c' || echo '$(srcdir)/'`cat.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_cat-cat.Tpo $(DEPDIR)/isl_cat-cat.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cat.c' object='isl_cat-cat.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_cat_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_cat-cat.o `test -f 'cat.c' || echo '$(srcdir)/'`cat.c - -isl_cat-cat.obj: cat.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_cat_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_cat-cat.obj -MD -MP -MF $(DEPDIR)/isl_cat-cat.Tpo -c -o isl_cat-cat.obj `if test -f 'cat.c'; then $(CYGPATH_W) 'cat.c'; else $(CYGPATH_W) '$(srcdir)/cat.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_cat-cat.Tpo $(DEPDIR)/isl_cat-cat.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cat.c' object='isl_cat-cat.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_cat_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_cat-cat.obj `if test -f 'cat.c'; then $(CYGPATH_W) 'cat.c'; else $(CYGPATH_W) '$(srcdir)/cat.c'; fi` - -isl_closure-closure.o: closure.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_closure_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_closure-closure.o -MD -MP -MF $(DEPDIR)/isl_closure-closure.Tpo -c -o isl_closure-closure.o `test -f 'closure.c' || echo '$(srcdir)/'`closure.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_closure-closure.Tpo $(DEPDIR)/isl_closure-closure.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='closure.c' object='isl_closure-closure.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_closure_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_closure-closure.o `test -f 'closure.c' || echo '$(srcdir)/'`closure.c - -isl_closure-closure.obj: closure.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_closure_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_closure-closure.obj -MD -MP -MF $(DEPDIR)/isl_closure-closure.Tpo -c -o isl_closure-closure.obj `if test -f 'closure.c'; then $(CYGPATH_W) 'closure.c'; else $(CYGPATH_W) '$(srcdir)/closure.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_closure-closure.Tpo $(DEPDIR)/isl_closure-closure.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='closure.c' object='isl_closure-closure.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_closure_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_closure-closure.obj `if test -f 'closure.c'; then $(CYGPATH_W) 'closure.c'; else $(CYGPATH_W) '$(srcdir)/closure.c'; fi` - -isl_pip-pip.o: pip.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_pip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_pip-pip.o -MD -MP -MF $(DEPDIR)/isl_pip-pip.Tpo -c -o isl_pip-pip.o `test -f 'pip.c' || echo '$(srcdir)/'`pip.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_pip-pip.Tpo $(DEPDIR)/isl_pip-pip.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pip.c' object='isl_pip-pip.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_pip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_pip-pip.o `test -f 'pip.c' || echo '$(srcdir)/'`pip.c - -isl_pip-pip.obj: pip.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_pip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_pip-pip.obj -MD -MP -MF $(DEPDIR)/isl_pip-pip.Tpo -c -o isl_pip-pip.obj `if test -f 'pip.c'; then $(CYGPATH_W) 'pip.c'; else $(CYGPATH_W) '$(srcdir)/pip.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_pip-pip.Tpo $(DEPDIR)/isl_pip-pip.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pip.c' object='isl_pip-pip.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_pip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_pip-pip.obj `if test -f 'pip.c'; then $(CYGPATH_W) 'pip.c'; else $(CYGPATH_W) '$(srcdir)/pip.c'; fi` - -isl_polyhedron_detect_equalities-polyhedron_detect_equalities.o: polyhedron_detect_equalities.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_detect_equalities_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polyhedron_detect_equalities-polyhedron_detect_equalities.o -MD -MP -MF $(DEPDIR)/isl_polyhedron_detect_equalities-polyhedron_detect_equalities.Tpo -c -o isl_polyhedron_detect_equalities-polyhedron_detect_equalities.o `test -f 'polyhedron_detect_equalities.c' || echo '$(srcdir)/'`polyhedron_detect_equalities.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polyhedron_detect_equalities-polyhedron_detect_equalities.Tpo $(DEPDIR)/isl_polyhedron_detect_equalities-polyhedron_detect_equalities.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polyhedron_detect_equalities.c' object='isl_polyhedron_detect_equalities-polyhedron_detect_equalities.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_detect_equalities_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polyhedron_detect_equalities-polyhedron_detect_equalities.o `test -f 'polyhedron_detect_equalities.c' || echo '$(srcdir)/'`polyhedron_detect_equalities.c - -isl_polyhedron_detect_equalities-polyhedron_detect_equalities.obj: polyhedron_detect_equalities.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_detect_equalities_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polyhedron_detect_equalities-polyhedron_detect_equalities.obj -MD -MP -MF $(DEPDIR)/isl_polyhedron_detect_equalities-polyhedron_detect_equalities.Tpo -c -o isl_polyhedron_detect_equalities-polyhedron_detect_equalities.obj `if test -f 'polyhedron_detect_equalities.c'; then $(CYGPATH_W) 'polyhedron_detect_equalities.c'; else $(CYGPATH_W) '$(srcdir)/polyhedron_detect_equalities.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polyhedron_detect_equalities-polyhedron_detect_equalities.Tpo $(DEPDIR)/isl_polyhedron_detect_equalities-polyhedron_detect_equalities.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polyhedron_detect_equalities.c' object='isl_polyhedron_detect_equalities-polyhedron_detect_equalities.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_detect_equalities_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polyhedron_detect_equalities-polyhedron_detect_equalities.obj `if test -f 'polyhedron_detect_equalities.c'; then $(CYGPATH_W) 'polyhedron_detect_equalities.c'; else $(CYGPATH_W) '$(srcdir)/polyhedron_detect_equalities.c'; fi` - -isl_polyhedron_minimize-polyhedron_minimize.o: polyhedron_minimize.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_minimize_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polyhedron_minimize-polyhedron_minimize.o -MD -MP -MF $(DEPDIR)/isl_polyhedron_minimize-polyhedron_minimize.Tpo -c -o isl_polyhedron_minimize-polyhedron_minimize.o `test -f 'polyhedron_minimize.c' || echo '$(srcdir)/'`polyhedron_minimize.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polyhedron_minimize-polyhedron_minimize.Tpo $(DEPDIR)/isl_polyhedron_minimize-polyhedron_minimize.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polyhedron_minimize.c' object='isl_polyhedron_minimize-polyhedron_minimize.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_minimize_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polyhedron_minimize-polyhedron_minimize.o `test -f 'polyhedron_minimize.c' || echo '$(srcdir)/'`polyhedron_minimize.c - -isl_polyhedron_minimize-polyhedron_minimize.obj: polyhedron_minimize.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_minimize_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polyhedron_minimize-polyhedron_minimize.obj -MD -MP -MF $(DEPDIR)/isl_polyhedron_minimize-polyhedron_minimize.Tpo -c -o isl_polyhedron_minimize-polyhedron_minimize.obj `if test -f 'polyhedron_minimize.c'; then $(CYGPATH_W) 'polyhedron_minimize.c'; else $(CYGPATH_W) '$(srcdir)/polyhedron_minimize.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polyhedron_minimize-polyhedron_minimize.Tpo $(DEPDIR)/isl_polyhedron_minimize-polyhedron_minimize.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polyhedron_minimize.c' object='isl_polyhedron_minimize-polyhedron_minimize.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_minimize_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polyhedron_minimize-polyhedron_minimize.obj `if test -f 'polyhedron_minimize.c'; then $(CYGPATH_W) 'polyhedron_minimize.c'; else $(CYGPATH_W) '$(srcdir)/polyhedron_minimize.c'; fi` - -isl_polyhedron_sample-polyhedron_sample.o: polyhedron_sample.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_sample_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polyhedron_sample-polyhedron_sample.o -MD -MP -MF $(DEPDIR)/isl_polyhedron_sample-polyhedron_sample.Tpo -c -o isl_polyhedron_sample-polyhedron_sample.o `test -f 'polyhedron_sample.c' || echo '$(srcdir)/'`polyhedron_sample.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polyhedron_sample-polyhedron_sample.Tpo $(DEPDIR)/isl_polyhedron_sample-polyhedron_sample.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polyhedron_sample.c' object='isl_polyhedron_sample-polyhedron_sample.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_sample_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polyhedron_sample-polyhedron_sample.o `test -f 'polyhedron_sample.c' || echo '$(srcdir)/'`polyhedron_sample.c - -isl_polyhedron_sample-polyhedron_sample.obj: polyhedron_sample.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_sample_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polyhedron_sample-polyhedron_sample.obj -MD -MP -MF $(DEPDIR)/isl_polyhedron_sample-polyhedron_sample.Tpo -c -o isl_polyhedron_sample-polyhedron_sample.obj `if test -f 'polyhedron_sample.c'; then $(CYGPATH_W) 'polyhedron_sample.c'; else $(CYGPATH_W) '$(srcdir)/polyhedron_sample.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polyhedron_sample-polyhedron_sample.Tpo $(DEPDIR)/isl_polyhedron_sample-polyhedron_sample.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polyhedron_sample.c' object='isl_polyhedron_sample-polyhedron_sample.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_sample_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polyhedron_sample-polyhedron_sample.obj `if test -f 'polyhedron_sample.c'; then $(CYGPATH_W) 'polyhedron_sample.c'; else $(CYGPATH_W) '$(srcdir)/polyhedron_sample.c'; fi` - -isl_polytope_scan-polytope_scan.o: polytope_scan.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polytope_scan_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polytope_scan-polytope_scan.o -MD -MP -MF $(DEPDIR)/isl_polytope_scan-polytope_scan.Tpo -c -o isl_polytope_scan-polytope_scan.o `test -f 'polytope_scan.c' || echo '$(srcdir)/'`polytope_scan.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polytope_scan-polytope_scan.Tpo $(DEPDIR)/isl_polytope_scan-polytope_scan.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polytope_scan.c' object='isl_polytope_scan-polytope_scan.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polytope_scan_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polytope_scan-polytope_scan.o `test -f 'polytope_scan.c' || echo '$(srcdir)/'`polytope_scan.c - -isl_polytope_scan-polytope_scan.obj: polytope_scan.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polytope_scan_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polytope_scan-polytope_scan.obj -MD -MP -MF $(DEPDIR)/isl_polytope_scan-polytope_scan.Tpo -c -o isl_polytope_scan-polytope_scan.obj `if test -f 'polytope_scan.c'; then $(CYGPATH_W) 'polytope_scan.c'; else $(CYGPATH_W) '$(srcdir)/polytope_scan.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polytope_scan-polytope_scan.Tpo $(DEPDIR)/isl_polytope_scan-polytope_scan.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polytope_scan.c' object='isl_polytope_scan-polytope_scan.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polytope_scan_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polytope_scan-polytope_scan.obj `if test -f 'polytope_scan.c'; then $(CYGPATH_W) 'polytope_scan.c'; else $(CYGPATH_W) '$(srcdir)/polytope_scan.c'; fi` - -isl_test-isl_test.o: isl_test.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_test-isl_test.o -MD -MP -MF $(DEPDIR)/isl_test-isl_test.Tpo -c -o isl_test-isl_test.o `test -f 'isl_test.c' || echo '$(srcdir)/'`isl_test.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_test-isl_test.Tpo $(DEPDIR)/isl_test-isl_test.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_test.c' object='isl_test-isl_test.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_test-isl_test.o `test -f 'isl_test.c' || echo '$(srcdir)/'`isl_test.c - -isl_test-isl_test.obj: isl_test.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_test-isl_test.obj -MD -MP -MF $(DEPDIR)/isl_test-isl_test.Tpo -c -o isl_test-isl_test.obj `if test -f 'isl_test.c'; then $(CYGPATH_W) 'isl_test.c'; else $(CYGPATH_W) '$(srcdir)/isl_test.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_test-isl_test.Tpo $(DEPDIR)/isl_test-isl_test.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_test.c' object='isl_test-isl_test.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_test-isl_test.obj `if test -f 'isl_test.c'; then $(CYGPATH_W) 'isl_test.c'; else $(CYGPATH_W) '$(srcdir)/isl_test.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files -install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" - @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ - done - -uninstall-nodist_pkgincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files -install-pkgincludeHEADERS: $(pkginclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" - @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ - done - -uninstall-pkgincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) isl_config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) isl_config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) isl_config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) isl_config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; skip=0; \ - srcdir=$(srcdir); export srcdir; \ - list=' $(TESTS) '; \ - $(am__tty_colors); \ - if test -n "$$list"; then \ - for tst in $$list; do \ - if test -f ./$$tst; then dir=./; \ - elif test -f $$tst; then dir=; \ - else dir="$(srcdir)/"; fi; \ - if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xpass=`expr $$xpass + 1`; \ - failed=`expr $$failed + 1`; \ - col=$$red; res=XPASS; \ - ;; \ - *) \ - col=$$grn; res=PASS; \ - ;; \ - esac; \ - elif test $$? -ne 77; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xfail=`expr $$xfail + 1`; \ - col=$$lgn; res=XFAIL; \ - ;; \ - *) \ - failed=`expr $$failed + 1`; \ - col=$$red; res=FAIL; \ - ;; \ - esac; \ - else \ - skip=`expr $$skip + 1`; \ - col=$$blu; res=SKIP; \ - fi; \ - echo "$${col}$$res$${std}: $$tst"; \ - done; \ - if test "$$all" -eq 1; then \ - tests="test"; \ - All=""; \ - else \ - tests="tests"; \ - All="All "; \ - fi; \ - if test "$$failed" -eq 0; then \ - if test "$$xfail" -eq 0; then \ - banner="$$All$$all $$tests passed"; \ - else \ - if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ - banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ - fi; \ - else \ - if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all $$tests failed"; \ - else \ - if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ - banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ - fi; \ - fi; \ - dashes="$$banner"; \ - skipped=""; \ - if test "$$skip" -ne 0; then \ - if test "$$skip" -eq 1; then \ - skipped="($$skip test was not run)"; \ - else \ - skipped="($$skip tests were not run)"; \ - fi; \ - test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$skipped"; \ - fi; \ - report=""; \ - if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ - report="Please report to $(PACKAGE_BUGREPORT)"; \ - test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$report"; \ - fi; \ - dashes=`echo "$$dashes" | sed s/./=/g`; \ - if test "$$failed" -eq 0; then \ - echo "$$grn$$dashes"; \ - else \ - echo "$$red$$dashes"; \ - fi; \ - echo "$$banner"; \ - test -z "$$skipped" || echo "$$skipped"; \ - test -z "$$report" || echo "$$report"; \ - echo "$$dashes$$std"; \ - test "$$failed" -eq 0; \ - else :; fi - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: check-recursive -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) \ - isl_config.h -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: install-data-local install-nodist_pkgincludeHEADERS \ - install-pkgconfigDATA install-pkgincludeHEADERS - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-libLTLIBRARIES \ - uninstall-nodist_pkgincludeHEADERS uninstall-pkgconfigDATA \ - uninstall-pkgincludeHEADERS - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check-am \ - ctags-recursive install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-TESTS check-am clean \ - clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstPROGRAMS ctags ctags-recursive dist dist-all \ - dist-bzip2 dist-gzip dist-hook dist-lzma dist-shar dist-tarZ \ - dist-xz dist-zip distcheck distclean distclean-compile \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-tags distcleancheck distdir distuninstallcheck dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-data-local install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-man \ - install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \ - install-pkgconfigDATA install-pkgincludeHEADERS install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am \ - uninstall-libLTLIBRARIES uninstall-nodist_pkgincludeHEADERS \ - uninstall-pkgconfigDATA uninstall-pkgincludeHEADERS - - -dist-hook: - echo @GIT_HEAD_VERSION@ > $(distdir)/GIT_HEAD_ID - (cd doc; make manual.pdf) - cp doc/manual.pdf $(distdir)/doc/ - -gitversion.h: @GIT_HEAD@ - $(AM_V_GEN)echo '#define GIT_HEAD_ID "'@GIT_HEAD_VERSION@'"' > $@ - -install-data-local: $(srcdir)/isl.py - @libisl=`sed -ne "/^library_names=/{s/.*='//;s/'$$//;s/ .*//;p}" \ - $(builddir)/libisl.la`; \ - case $$libisl in \ - '') echo Cannot find isl library name. GDB bindings not installed.;; \ - *) echo $(INSTALL_DATA) $(srcdir)/isl.py \ - $(DESTDIR)$(libdir)/$$libisl-gdb.py; \ - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"; \ - $(INSTALL_DATA) $(srcdir)/isl.py $(DESTDIR)$(libdir)/$$libisl-gdb.py; esac - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.16.3/isl/aclocal.m4 b/cloog-0.16.3/isl/aclocal.m4 deleted file mode 100644 index acf1a0c..0000000 --- a/cloog-0.16.3/isl/aclocal.m4 +++ /dev/null @@ -1,995 +0,0 @@ -# generated automatically by aclocal 1.11.1 -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, -[m4_warning([this file was generated for autoconf 2.65. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically `autoreconf'.])]) - -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.11' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 9 - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 10 - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -#serial 5 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 16 - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) - -dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST(install_sh)]) - -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 6 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_MKDIR_P -# --------------- -# Check for `mkdir -p'. -AC_DEFUN([AM_PROG_MKDIR_P], -[AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 5 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# Copyright (C) 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 1 - -# AM_SILENT_RULES([DEFAULT]) -# -------------------------- -# Enable less verbose build rules; with the default set to DEFAULT -# (`yes' being less verbose, `no' or empty being verbose). -AC_DEFUN([AM_SILENT_RULES], -[AC_ARG_ENABLE([silent-rules], -[ --enable-silent-rules less verbose build output (undo: `make V=1') - --disable-silent-rules verbose build output (undo: `make V=0')]) -case $enable_silent_rules in -yes) AM_DEFAULT_VERBOSITY=0;; -no) AM_DEFAULT_VERBOSITY=1;; -*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; -esac -AC_SUBST([AM_DEFAULT_VERBOSITY])dnl -AM_BACKSLASH='\' -AC_SUBST([AM_BACKSLASH])dnl -_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl -]) - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([m4/ax_c___attribute__.m4]) -m4_include([m4/ax_cc_maxopt.m4]) -m4_include([m4/ax_check_compiler_flags.m4]) -m4_include([m4/ax_compiler_vendor.m4]) -m4_include([m4/ax_create_pkgconfig_info.m4]) -m4_include([m4/ax_create_stdint_h.m4]) -m4_include([m4/ax_detect_git_head.m4]) -m4_include([m4/ax_gcc_archflag.m4]) -m4_include([m4/ax_gcc_warn_unused_result.m4]) -m4_include([m4/ax_gcc_x86_cpuid.m4]) -m4_include([m4/ax_set_warning_flags.m4]) -m4_include([m4/ax_submodule.m4]) -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) diff --git a/cloog-0.16.3/isl/basis_reduction_tab.c b/cloog-0.16.3/isl/basis_reduction_tab.c deleted file mode 100644 index af54569..0000000 --- a/cloog-0.16.3/isl/basis_reduction_tab.c +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include "isl_tab.h" - -struct tab_lp { - struct isl_ctx *ctx; - struct isl_vec *row; - struct isl_tab *tab; - struct isl_tab_undo **stack; - isl_int *obj; - isl_int opt; - isl_int opt_denom; - isl_int tmp; - isl_int tmp2; - int neq; - unsigned dim; - /* number of constraints in initial product tableau */ - int con_offset; - /* objective function has fixed or no integer value */ - int is_fixed; -}; - -static struct tab_lp *init_lp(struct isl_tab *tab); -static void set_lp_obj(struct tab_lp *lp, isl_int *row, int dim); -static int solve_lp(struct tab_lp *lp); -static void get_obj_val(struct tab_lp* lp, mpq_t *F); -static void delete_lp(struct tab_lp *lp); -static int add_lp_row(struct tab_lp *lp, isl_int *row, int dim); -static void get_alpha(struct tab_lp* lp, int row, mpq_t *alpha); -static int del_lp_row(struct tab_lp *lp) WARN_UNUSED; -static int cut_lp_to_hyperplane(struct tab_lp *lp, isl_int *row); - -#define GBR_LP struct tab_lp -#define GBR_type mpq_t -#define GBR_init(v) mpq_init(v) -#define GBR_clear(v) mpq_clear(v) -#define GBR_set(a,b) mpq_set(a,b) -#define GBR_set_ui(a,b) mpq_set_ui(a,b,1) -#define GBR_mul(a,b,c) mpq_mul(a,b,c) -#define GBR_lt(a,b) (mpq_cmp(a,b) < 0) -#define GBR_is_zero(a) (mpq_sgn(a) == 0) -#define GBR_floor(a,b) mpz_fdiv_q(a,mpq_numref(b),mpq_denref(b)) -#define GBR_ceil(a,b) mpz_cdiv_q(a,mpq_numref(b),mpq_denref(b)) -#define GBR_lp_init(P) init_lp(P) -#define GBR_lp_set_obj(lp, obj, dim) set_lp_obj(lp, obj, dim) -#define GBR_lp_solve(lp) solve_lp(lp) -#define GBR_lp_get_obj_val(lp, F) get_obj_val(lp, F) -#define GBR_lp_delete(lp) delete_lp(lp) -#define GBR_lp_next_row(lp) lp->neq -#define GBR_lp_add_row(lp, row, dim) add_lp_row(lp, row, dim) -#define GBR_lp_get_alpha(lp, row, alpha) get_alpha(lp, row, alpha) -#define GBR_lp_del_row(lp) del_lp_row(lp) -#define GBR_lp_is_fixed(lp) (lp)->is_fixed -#define GBR_lp_cut(lp, obj) cut_lp_to_hyperplane(lp, obj) -#include "basis_reduction_templ.c" - -/* Set up a tableau for the Cartesian product of bset with itself. - * This could be optimized by first setting up a tableau for bset - * and then performing the Cartesian product on the tableau. - */ -static struct isl_tab *gbr_tab(struct isl_tab *tab, struct isl_vec *row) -{ - unsigned dim; - struct isl_tab *prod; - - if (!tab || !row) - return NULL; - - dim = tab->n_var; - prod = isl_tab_product(tab, tab); - if (isl_tab_extend_cons(prod, 3 * dim + 1) < 0) { - isl_tab_free(prod); - return NULL; - } - return prod; -} - -static struct tab_lp *init_lp(struct isl_tab *tab) -{ - struct tab_lp *lp = NULL; - - if (!tab) - return NULL; - - lp = isl_calloc_type(tab->mat->ctx, struct tab_lp); - if (!lp) - return NULL; - - isl_int_init(lp->opt); - isl_int_init(lp->opt_denom); - isl_int_init(lp->tmp); - isl_int_init(lp->tmp2); - - lp->dim = tab->n_var; - - lp->ctx = tab->mat->ctx; - isl_ctx_ref(lp->ctx); - - lp->stack = isl_alloc_array(lp->ctx, struct isl_tab_undo *, lp->dim); - - lp->row = isl_vec_alloc(lp->ctx, 1 + 2 * lp->dim); - if (!lp->row) - goto error; - lp->tab = gbr_tab(tab, lp->row); - if (!lp->tab) - goto error; - lp->con_offset = lp->tab->n_con; - lp->obj = NULL; - lp->neq = 0; - - return lp; -error: - delete_lp(lp); - return NULL; -} - -static void set_lp_obj(struct tab_lp *lp, isl_int *row, int dim) -{ - lp->obj = row; -} - -static int solve_lp(struct tab_lp *lp) -{ - enum isl_lp_result res; - unsigned flags = 0; - - lp->is_fixed = 0; - - isl_int_set_si(lp->row->el[0], 0); - isl_seq_cpy(lp->row->el + 1, lp->obj, lp->dim); - isl_seq_neg(lp->row->el + 1 + lp->dim, lp->obj, lp->dim); - if (lp->neq) - flags = ISL_TAB_SAVE_DUAL; - res = isl_tab_min(lp->tab, lp->row->el, lp->ctx->one, - &lp->opt, &lp->opt_denom, flags); - isl_int_mul_ui(lp->opt_denom, lp->opt_denom, 2); - if (isl_int_abs_lt(lp->opt, lp->opt_denom)) { - struct isl_vec *sample = isl_tab_get_sample_value(lp->tab); - if (!sample) - return -1; - isl_seq_inner_product(lp->obj, sample->el + 1, lp->dim, &lp->tmp); - isl_seq_inner_product(lp->obj, sample->el + 1 + lp->dim, lp->dim, &lp->tmp2); - isl_int_cdiv_q(lp->tmp, lp->tmp, sample->el[0]); - isl_int_fdiv_q(lp->tmp2, lp->tmp2, sample->el[0]); - if (isl_int_ge(lp->tmp, lp->tmp2)) - lp->is_fixed = 1; - isl_vec_free(sample); - } - isl_int_divexact_ui(lp->opt_denom, lp->opt_denom, 2); - if (res != isl_lp_ok) - return -1; - return 0; -} - -/* The current objective function has a fixed (or no) integer value. - * Cut the tableau to the hyperplane that fixes this value in - * both halves of the tableau. - * Return 1 if the resulting tableau is empty. - */ -static int cut_lp_to_hyperplane(struct tab_lp *lp, isl_int *row) -{ - enum isl_lp_result res; - - isl_int_set_si(lp->row->el[0], 0); - isl_seq_cpy(lp->row->el + 1, row, lp->dim); - isl_seq_clr(lp->row->el + 1 + lp->dim, lp->dim); - res = isl_tab_min(lp->tab, lp->row->el, lp->ctx->one, - &lp->tmp, NULL, 0); - if (res != isl_lp_ok) - return -1; - - isl_int_neg(lp->row->el[0], lp->tmp); - if (isl_tab_add_eq(lp->tab, lp->row->el) < 0) - return -1; - - isl_seq_cpy(lp->row->el + 1 + lp->dim, row, lp->dim); - isl_seq_clr(lp->row->el + 1, lp->dim); - if (isl_tab_add_eq(lp->tab, lp->row->el) < 0) - return -1; - - lp->con_offset += 2; - - return lp->tab->empty; -} - -static void get_obj_val(struct tab_lp* lp, mpq_t *F) -{ - isl_int_neg(mpq_numref(*F), lp->opt); - isl_int_set(mpq_denref(*F), lp->opt_denom); -} - -static void delete_lp(struct tab_lp *lp) -{ - if (!lp) - return; - - isl_int_clear(lp->opt); - isl_int_clear(lp->opt_denom); - isl_int_clear(lp->tmp); - isl_int_clear(lp->tmp2); - isl_vec_free(lp->row); - free(lp->stack); - isl_tab_free(lp->tab); - isl_ctx_deref(lp->ctx); - free(lp); -} - -static int add_lp_row(struct tab_lp *lp, isl_int *row, int dim) -{ - lp->stack[lp->neq] = isl_tab_snap(lp->tab); - - isl_int_set_si(lp->row->el[0], 0); - isl_seq_cpy(lp->row->el + 1, row, lp->dim); - isl_seq_neg(lp->row->el + 1 + lp->dim, row, lp->dim); - - if (isl_tab_add_valid_eq(lp->tab, lp->row->el) < 0) - return -1; - - return lp->neq++; -} - -static void get_alpha(struct tab_lp* lp, int row, mpq_t *alpha) -{ - row += lp->con_offset; - isl_int_neg(mpq_numref(*alpha), lp->tab->dual->el[1 + row]); - isl_int_set(mpq_denref(*alpha), lp->tab->dual->el[0]); -} - -static int del_lp_row(struct tab_lp *lp) -{ - lp->neq--; - return isl_tab_rollback(lp->tab, lp->stack[lp->neq]); -} diff --git a/cloog-0.16.3/isl/basis_reduction_templ.c b/cloog-0.16.3/isl/basis_reduction_templ.c deleted file mode 100644 index 2e4034f..0000000 --- a/cloog-0.16.3/isl/basis_reduction_templ.c +++ /dev/null @@ -1,356 +0,0 @@ -/* - * Copyright 2006-2007 Universiteit Leiden - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, Leiden Institute of Advanced Computer Science, - * Universiteit Leiden, Niels Bohrweg 1, 2333 CA Leiden, The Netherlands - * and K.U.Leuven, Departement Computerwetenschappen, Celestijnenlaan 200A, - * B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include "isl_basis_reduction.h" - -static void save_alpha(GBR_LP *lp, int first, int n, GBR_type *alpha) -{ - int i; - - for (i = 0; i < n; ++i) - GBR_lp_get_alpha(lp, first + i, &alpha[i]); -} - -/* Compute a reduced basis for the set represented by the tableau "tab". - * tab->basis, which must be initialized by the calling function to an affine - * unimodular basis, is updated to reflect the reduced basis. - * The first tab->n_zero rows of the basis (ignoring the constant row) - * are assumed to correspond to equalities and are left untouched. - * tab->n_zero is updated to reflect any additional equalities that - * have been detected in the first rows of the new basis. - * The final tab->n_unbounded rows of the basis are assumed to correspond - * to unbounded directions and are also left untouched. - * In particular this means that the remaining rows are assumed to - * correspond to bounded directions. - * - * This function implements the algorithm described in - * "An Implementation of the Generalized Basis Reduction Algorithm - * for Integer Programming" of Cook el al. to compute a reduced basis. - * We use \epsilon = 1/4. - * - * If ctx->opt->gbr_only_first is set, the user is only interested - * in the first direction. In this case we stop the basis reduction when - * the width in the first direction becomes smaller than 2. - */ -struct isl_tab *isl_tab_compute_reduced_basis(struct isl_tab *tab) -{ - unsigned dim; - struct isl_ctx *ctx; - struct isl_mat *B; - int unbounded; - int i; - GBR_LP *lp = NULL; - GBR_type F_old, alpha, F_new; - int row; - isl_int tmp; - struct isl_vec *b_tmp; - GBR_type *F = NULL; - GBR_type *alpha_buffer[2] = { NULL, NULL }; - GBR_type *alpha_saved; - GBR_type F_saved; - int use_saved = 0; - isl_int mu[2]; - GBR_type mu_F[2]; - GBR_type two; - GBR_type one; - int empty = 0; - int fixed = 0; - int fixed_saved = 0; - int mu_fixed[2]; - int n_bounded; - int gbr_only_first; - - if (!tab) - return NULL; - - if (tab->empty) - return tab; - - ctx = tab->mat->ctx; - gbr_only_first = ctx->opt->gbr_only_first; - dim = tab->n_var; - B = tab->basis; - if (!B) - return tab; - - n_bounded = dim - tab->n_unbounded; - if (n_bounded <= tab->n_zero + 1) - return tab; - - isl_int_init(tmp); - isl_int_init(mu[0]); - isl_int_init(mu[1]); - - GBR_init(alpha); - GBR_init(F_old); - GBR_init(F_new); - GBR_init(F_saved); - GBR_init(mu_F[0]); - GBR_init(mu_F[1]); - GBR_init(two); - GBR_init(one); - - b_tmp = isl_vec_alloc(ctx, dim); - if (!b_tmp) - goto error; - - F = isl_alloc_array(ctx, GBR_type, n_bounded); - alpha_buffer[0] = isl_alloc_array(ctx, GBR_type, n_bounded); - alpha_buffer[1] = isl_alloc_array(ctx, GBR_type, n_bounded); - alpha_saved = alpha_buffer[0]; - - if (!F || !alpha_buffer[0] || !alpha_buffer[1]) - goto error; - - for (i = 0; i < n_bounded; ++i) { - GBR_init(F[i]); - GBR_init(alpha_buffer[0][i]); - GBR_init(alpha_buffer[1][i]); - } - - GBR_set_ui(two, 2); - GBR_set_ui(one, 1); - - lp = GBR_lp_init(tab); - if (!lp) - goto error; - - i = tab->n_zero; - - GBR_lp_set_obj(lp, B->row[1+i]+1, dim); - ctx->stats->gbr_solved_lps++; - unbounded = GBR_lp_solve(lp); - isl_assert(ctx, !unbounded, goto error); - GBR_lp_get_obj_val(lp, &F[i]); - - if (GBR_lt(F[i], one)) { - if (!GBR_is_zero(F[i])) { - empty = GBR_lp_cut(lp, B->row[1+i]+1); - if (empty) - goto done; - GBR_set_ui(F[i], 0); - } - tab->n_zero++; - } - - do { - if (i+1 == tab->n_zero) { - GBR_lp_set_obj(lp, B->row[1+i+1]+1, dim); - ctx->stats->gbr_solved_lps++; - unbounded = GBR_lp_solve(lp); - isl_assert(ctx, !unbounded, goto error); - GBR_lp_get_obj_val(lp, &F_new); - fixed = GBR_lp_is_fixed(lp); - GBR_set_ui(alpha, 0); - } else - if (use_saved) { - row = GBR_lp_next_row(lp); - GBR_set(F_new, F_saved); - fixed = fixed_saved; - GBR_set(alpha, alpha_saved[i]); - } else { - row = GBR_lp_add_row(lp, B->row[1+i]+1, dim); - GBR_lp_set_obj(lp, B->row[1+i+1]+1, dim); - ctx->stats->gbr_solved_lps++; - unbounded = GBR_lp_solve(lp); - isl_assert(ctx, !unbounded, goto error); - GBR_lp_get_obj_val(lp, &F_new); - fixed = GBR_lp_is_fixed(lp); - - GBR_lp_get_alpha(lp, row, &alpha); - - if (i > 0) - save_alpha(lp, row-i, i, alpha_saved); - - if (GBR_lp_del_row(lp) < 0) - goto error; - } - GBR_set(F[i+1], F_new); - - GBR_floor(mu[0], alpha); - GBR_ceil(mu[1], alpha); - - if (isl_int_eq(mu[0], mu[1])) - isl_int_set(tmp, mu[0]); - else { - int j; - - for (j = 0; j <= 1; ++j) { - isl_int_set(tmp, mu[j]); - isl_seq_combine(b_tmp->el, - ctx->one, B->row[1+i+1]+1, - tmp, B->row[1+i]+1, dim); - GBR_lp_set_obj(lp, b_tmp->el, dim); - ctx->stats->gbr_solved_lps++; - unbounded = GBR_lp_solve(lp); - isl_assert(ctx, !unbounded, goto error); - GBR_lp_get_obj_val(lp, &mu_F[j]); - mu_fixed[j] = GBR_lp_is_fixed(lp); - if (i > 0) - save_alpha(lp, row-i, i, alpha_buffer[j]); - } - - if (GBR_lt(mu_F[0], mu_F[1])) - j = 0; - else - j = 1; - - isl_int_set(tmp, mu[j]); - GBR_set(F_new, mu_F[j]); - fixed = mu_fixed[j]; - alpha_saved = alpha_buffer[j]; - } - isl_seq_combine(B->row[1+i+1]+1, ctx->one, B->row[1+i+1]+1, - tmp, B->row[1+i]+1, dim); - - if (i+1 == tab->n_zero && fixed) { - if (!GBR_is_zero(F[i+1])) { - empty = GBR_lp_cut(lp, B->row[1+i+1]+1); - if (empty) - goto done; - GBR_set_ui(F[i+1], 0); - } - tab->n_zero++; - } - - GBR_set(F_old, F[i]); - - use_saved = 0; - /* mu_F[0] = 4 * F_new; mu_F[1] = 3 * F_old */ - GBR_set_ui(mu_F[0], 4); - GBR_mul(mu_F[0], mu_F[0], F_new); - GBR_set_ui(mu_F[1], 3); - GBR_mul(mu_F[1], mu_F[1], F_old); - if (GBR_lt(mu_F[0], mu_F[1])) { - B = isl_mat_swap_rows(B, 1 + i, 1 + i + 1); - if (i > tab->n_zero) { - use_saved = 1; - GBR_set(F_saved, F_new); - fixed_saved = fixed; - if (GBR_lp_del_row(lp) < 0) - goto error; - --i; - } else { - GBR_set(F[tab->n_zero], F_new); - if (gbr_only_first && GBR_lt(F[tab->n_zero], two)) - break; - - if (fixed) { - if (!GBR_is_zero(F[tab->n_zero])) { - empty = GBR_lp_cut(lp, B->row[1+tab->n_zero]+1); - if (empty) - goto done; - GBR_set_ui(F[tab->n_zero], 0); - } - tab->n_zero++; - } - } - } else { - GBR_lp_add_row(lp, B->row[1+i]+1, dim); - ++i; - } - } while (i < n_bounded - 1); - - if (0) { -done: - if (empty < 0) { -error: - isl_mat_free(B); - B = NULL; - } - } - - GBR_lp_delete(lp); - - if (alpha_buffer[1]) - for (i = 0; i < n_bounded; ++i) { - GBR_clear(F[i]); - GBR_clear(alpha_buffer[0][i]); - GBR_clear(alpha_buffer[1][i]); - } - free(F); - free(alpha_buffer[0]); - free(alpha_buffer[1]); - - isl_vec_free(b_tmp); - - GBR_clear(alpha); - GBR_clear(F_old); - GBR_clear(F_new); - GBR_clear(F_saved); - GBR_clear(mu_F[0]); - GBR_clear(mu_F[1]); - GBR_clear(two); - GBR_clear(one); - - isl_int_clear(tmp); - isl_int_clear(mu[0]); - isl_int_clear(mu[1]); - - tab->basis = B; - - return tab; -} - -/* Compute an affine form of a reduced basis of the given basic - * non-parametric set, which is assumed to be bounded and not - * include any integer divisions. - * The first column and the first row correspond to the constant term. - * - * If the input contains any equalities, we first create an initial - * basis with the equalities first. Otherwise, we start off with - * the identity matrix. - */ -struct isl_mat *isl_basic_set_reduced_basis(struct isl_basic_set *bset) -{ - struct isl_mat *basis; - struct isl_tab *tab; - - if (!bset) - return NULL; - - if (isl_basic_set_dim(bset, isl_dim_div) != 0) - isl_die(bset->ctx, isl_error_invalid, - "no integer division allowed", return NULL); - if (isl_basic_set_dim(bset, isl_dim_param) != 0) - isl_die(bset->ctx, isl_error_invalid, - "no parameters allowed", return NULL); - - tab = isl_tab_from_basic_set(bset); - if (!tab) - return NULL; - - if (bset->n_eq == 0) - tab->basis = isl_mat_identity(bset->ctx, 1 + tab->n_var); - else { - isl_mat *eq; - unsigned nvar = isl_basic_set_total_dim(bset); - eq = isl_mat_sub_alloc6(bset->ctx, bset->eq, 0, bset->n_eq, - 1, nvar); - eq = isl_mat_left_hermite(eq, 0, NULL, &tab->basis); - tab->basis = isl_mat_lin_to_aff(tab->basis); - tab->n_zero = bset->n_eq; - isl_mat_free(eq); - } - tab = isl_tab_compute_reduced_basis(tab); - if (!tab) - return NULL; - - basis = isl_mat_copy(tab->basis); - - isl_tab_free(tab); - - return basis; -} diff --git a/cloog-0.16.3/isl/bound.c b/cloog-0.16.3/isl/bound.c deleted file mode 100644 index f83e025..0000000 --- a/cloog-0.16.3/isl/bound.c +++ /dev/null @@ -1,278 +0,0 @@ -#include -#include -#include -#include - -struct bound_options { - struct isl_options *isl; - unsigned verify; - int print_all; - int continue_on_error; -}; - -struct isl_arg bound_options_arg[] = { -ISL_ARG_CHILD(struct bound_options, isl, "isl", isl_options_arg, "isl options") -ISL_ARG_BOOL(struct bound_options, verify, 'T', "verify", 0, NULL) -ISL_ARG_BOOL(struct bound_options, print_all, 'A', "print-all", 0, NULL) -ISL_ARG_BOOL(struct bound_options, continue_on_error, '\0', "continue-on-error", 0, NULL) -ISL_ARG_END -}; - -ISL_ARG_DEF(bound_options, struct bound_options, bound_options_arg) - -static __isl_give isl_set *set_bounds(__isl_take isl_set *set) -{ - unsigned nparam; - int i, r; - isl_point *pt, *pt2; - isl_set *box; - - nparam = isl_set_dim(set, isl_dim_param); - r = nparam >= 8 ? 5 : nparam >= 5 ? 15 : 50; - - pt = isl_set_sample_point(isl_set_copy(set)); - pt2 = isl_point_copy(pt); - - for (i = 0; i < nparam; ++i) { - pt = isl_point_add_ui(pt, isl_dim_param, i, r); - pt2 = isl_point_sub_ui(pt2, isl_dim_param, i, r); - } - - box = isl_set_box_from_points(pt, pt2); - - return isl_set_intersect(set, box); -} - -struct verify_point_bound { - struct bound_options *options; - int stride; - int n; - int exact; - int error; - - isl_pw_qpolynomial_fold *pwf; - isl_pw_qpolynomial_fold *bound; -}; - -static int verify_point(__isl_take isl_point *pnt, void *user) -{ - int i; - unsigned nvar; - unsigned nparam; - struct verify_point_bound *vpb = (struct verify_point_bound *) user; - isl_int t; - isl_pw_qpolynomial_fold *pwf; - isl_qpolynomial *bound = NULL; - isl_qpolynomial *opt = NULL; - isl_set *dom = NULL; - const char *minmax; - int bounded; - int sign; - int ok; - FILE *out = vpb->options->print_all ? stdout : stderr; - - vpb->n--; - - if (1) { - minmax = "ub"; - sign = 1; - } else { - minmax = "lb"; - sign = -1; - } - - isl_int_init(t); - - pwf = isl_pw_qpolynomial_fold_copy(vpb->pwf); - - nparam = isl_pw_qpolynomial_fold_dim(pwf, isl_dim_param); - for (i = 0; i < nparam; ++i) { - isl_point_get_coordinate(pnt, isl_dim_param, i, &t); - pwf = isl_pw_qpolynomial_fold_fix_dim(pwf, isl_dim_param, i, t); - } - - bound = isl_pw_qpolynomial_fold_eval( - isl_pw_qpolynomial_fold_copy(vpb->bound), - isl_point_copy(pnt)); - - dom = isl_pw_qpolynomial_fold_domain(isl_pw_qpolynomial_fold_copy(pwf)); - bounded = isl_set_is_bounded(dom); - - if (bounded < 0) - goto error; - - if (!bounded) - opt = isl_pw_qpolynomial_fold_eval( - isl_pw_qpolynomial_fold_copy(pwf), - isl_set_sample_point(isl_set_copy(dom))); - else if (sign > 0) - opt = isl_pw_qpolynomial_fold_max(isl_pw_qpolynomial_fold_copy(pwf)); - else - opt = isl_pw_qpolynomial_fold_min(isl_pw_qpolynomial_fold_copy(pwf)); - - nvar = isl_set_dim(dom, isl_dim_set); - opt = isl_qpolynomial_drop_dims(opt, isl_dim_set, 0, nvar); - if (vpb->exact && bounded) - ok = isl_qpolynomial_plain_is_equal(opt, bound); - else if (sign > 0) - ok = isl_qpolynomial_le_cst(opt, bound); - else - ok = isl_qpolynomial_le_cst(bound, opt); - if (ok < 0) - goto error; - - if (vpb->options->print_all || !ok) { - fprintf(out, "%s(", minmax); - for (i = 0; i < nparam; ++i) { - if (i) - fprintf(out, ", "); - isl_point_get_coordinate(pnt, isl_dim_param, i, &t); - isl_int_print(out, t, 0); - } - fprintf(out, ") = "); - isl_qpolynomial_print(bound, out, ISL_FORMAT_ISL); - fprintf(out, ", %s = ", bounded ? "opt" : "sample"); - isl_qpolynomial_print(opt, out, ISL_FORMAT_ISL); - if (ok) - fprintf(out, ". OK\n"); - else - fprintf(out, ". NOT OK\n"); - } else if ((vpb->n % vpb->stride) == 0) { - printf("o"); - fflush(stdout); - } - - if (0) { -error: - ok = 0; - } - - isl_pw_qpolynomial_fold_free(pwf); - isl_qpolynomial_free(bound); - isl_qpolynomial_free(opt); - isl_point_free(pnt); - isl_set_free(dom); - - isl_int_clear(t); - - if (!ok) - vpb->error = 1; - - if (vpb->options->continue_on_error) - ok = 1; - - return (vpb->n >= 1 && ok) ? 0 : -1; -} - -static int check_solution(__isl_take isl_pw_qpolynomial_fold *pwf, - __isl_take isl_pw_qpolynomial_fold *bound, int exact, - struct bound_options *options) -{ - struct verify_point_bound vpb; - isl_int count, max; - isl_set *dom; - isl_set *context; - int i, r, n; - - dom = isl_pw_qpolynomial_fold_domain(isl_pw_qpolynomial_fold_copy(pwf)); - context = isl_set_remove_dims(isl_set_copy(dom), isl_dim_set, - 0, isl_set_dim(dom, isl_dim_set)); - context = isl_set_remove_divs(context); - context = set_bounds(context); - - isl_int_init(count); - isl_int_init(max); - - isl_int_set_si(max, 200); - r = isl_set_count_upto(context, max, &count); - assert(r >= 0); - n = isl_int_get_si(count); - - isl_int_clear(max); - isl_int_clear(count); - - vpb.options = options; - vpb.pwf = pwf; - vpb.bound = bound; - vpb.n = n; - vpb.stride = n > 70 ? 1 + (n + 1)/70 : 1; - vpb.error = 0; - vpb.exact = exact; - - if (!options->print_all) { - for (i = 0; i < vpb.n; i += vpb.stride) - printf("."); - printf("\r"); - fflush(stdout); - } - - isl_set_foreach_point(context, verify_point, &vpb); - - isl_set_free(context); - isl_set_free(dom); - isl_pw_qpolynomial_fold_free(pwf); - isl_pw_qpolynomial_fold_free(bound); - - if (!options->print_all) - printf("\n"); - - if (vpb.error) { - fprintf(stderr, "Check failed !\n"); - return -1; - } - - return 0; -} - -int main(int argc, char **argv) -{ - isl_ctx *ctx; - isl_pw_qpolynomial_fold *copy; - isl_pw_qpolynomial_fold *pwf; - struct isl_stream *s; - struct isl_obj obj; - struct bound_options *options; - int exact; - int r = 0; - - options = bound_options_new_with_defaults(); - assert(options); - argc = bound_options_parse(options, argc, argv, ISL_ARG_ALL); - - ctx = isl_ctx_alloc_with_options(bound_options_arg, options); - - s = isl_stream_new_file(ctx, stdin); - obj = isl_stream_read_obj(s); - if (obj.type == isl_obj_pw_qpolynomial) - pwf = isl_pw_qpolynomial_fold_from_pw_qpolynomial(isl_fold_max, - obj.v); - else if (obj.type == isl_obj_pw_qpolynomial_fold) - pwf = obj.v; - else { - obj.type->free(obj.v); - isl_die(ctx, isl_error_invalid, "invalid input", goto error); - } - - if (options->verify) - copy = isl_pw_qpolynomial_fold_copy(pwf); - - pwf = isl_pw_qpolynomial_fold_bound(pwf, &exact); - pwf = isl_pw_qpolynomial_fold_coalesce(pwf); - - if (options->verify) { - r = check_solution(copy, pwf, exact, options); - } else { - if (!exact) - printf("# NOT exact\n"); - isl_pw_qpolynomial_fold_print(pwf, stdout, 0); - fprintf(stdout, "\n"); - isl_pw_qpolynomial_fold_free(pwf); - } - -error: - isl_stream_free(s); - - isl_ctx_free(ctx); - - return r; -} diff --git a/cloog-0.16.3/isl/bound_test.sh.in b/cloog-0.16.3/isl/bound_test.sh.in deleted file mode 100755 index e3fc037..0000000 --- a/cloog-0.16.3/isl/bound_test.sh.in +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh - -EXEEXT=@EXEEXT@ - -BOUND_TESTS="\ - basicLinear2.pwqp \ - basicLinear.pwqp \ - basicTestParameterPosNeg.pwqp \ - basicTest.pwqp \ - devos.pwqp \ - equality1.pwqp \ - equality2.pwqp \ - equality3.pwqp \ - equality4.pwqp \ - equality5.pwqp \ - faddeev.pwqp \ - linearExample.pwqp \ - neg.pwqp \ - philippe3vars3pars.pwqp \ - philippe3vars.pwqp \ - philippeNeg.pwqp \ - philippePolynomialCoeff1P.pwqp \ - philippePolynomialCoeff.pwqp \ - philippe.pwqp \ - product.pwqp \ - split.pwqp \ - test3Deg3Var.pwqp \ - toplas.pwqp \ - unexpanded.pwqp" - -for i in $BOUND_TESTS; do - echo $i; - ./isl_bound$EXEEXT -T --bound=bernstein < $srcdir/test_inputs/$i || exit - ./isl_bound$EXEEXT -T --bound=range < $srcdir/test_inputs/$i || exit -done diff --git a/cloog-0.16.3/isl/cat.c b/cloog-0.16.3/isl/cat.c deleted file mode 100644 index f278e9c..0000000 --- a/cloog-0.16.3/isl/cat.c +++ /dev/null @@ -1,58 +0,0 @@ -#include -#include -#include -#include - -struct isl_arg_choice cat_format[] = { - {"isl", ISL_FORMAT_ISL}, - {"omega", ISL_FORMAT_OMEGA}, - {"polylib", ISL_FORMAT_POLYLIB}, - {"ext-polylib", ISL_FORMAT_EXT_POLYLIB}, - {"latex", ISL_FORMAT_LATEX}, - {0} -}; - -struct cat_options { - struct isl_options *isl; - unsigned format; -}; - -struct isl_arg cat_options_arg[] = { -ISL_ARG_CHILD(struct cat_options, isl, "isl", isl_options_arg, "isl options") -ISL_ARG_CHOICE(struct cat_options, format, 0, "format", \ - cat_format, ISL_FORMAT_ISL, "output format") -ISL_ARG_END -}; - -ISL_ARG_DEF(cat_options, struct cat_options, cat_options_arg) - -int main(int argc, char **argv) -{ - struct isl_ctx *ctx; - struct isl_stream *s; - struct isl_obj obj; - struct cat_options *options; - isl_printer *p; - - options = cat_options_new_with_defaults(); - assert(options); - argc = cat_options_parse(options, argc, argv, ISL_ARG_ALL); - - ctx = isl_ctx_alloc_with_options(cat_options_arg, options); - - s = isl_stream_new_file(ctx, stdin); - obj = isl_stream_read_obj(s); - isl_stream_free(s); - - p = isl_printer_to_file(ctx, stdout); - p = isl_printer_set_output_format(p, options->format); - p = obj.type->print(p, obj.v); - p = isl_printer_end_line(p); - isl_printer_free(p); - - obj.type->free(obj.v); - - isl_ctx_free(ctx); - - return 0; -} diff --git a/cloog-0.16.3/isl/closure.c b/cloog-0.16.3/isl/closure.c deleted file mode 100644 index 43d69d4..0000000 --- a/cloog-0.16.3/isl/closure.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include - -int main(int argc, char **argv) -{ - struct isl_ctx *ctx; - struct isl_map *map; - struct isl_options *options; - int exact; - - options = isl_options_new_with_defaults(); - assert(options); - argc = isl_options_parse(options, argc, argv, ISL_ARG_ALL); - - ctx = isl_ctx_alloc_with_options(isl_options_arg, options); - - map = isl_map_read_from_file(ctx, stdin, -1); - map = isl_map_transitive_closure(map, &exact); - if (!exact) - printf("# NOT exact\n"); - isl_map_print(map, stdout, 0, ISL_FORMAT_ISL); - printf("\n"); - map = isl_map_compute_divs(map); - map = isl_map_coalesce(map); - printf("# coalesced\n"); - isl_map_print(map, stdout, 0, ISL_FORMAT_ISL); - printf("\n"); - isl_map_free(map); - - isl_ctx_free(ctx); - - return 0; -} diff --git a/cloog-0.16.3/isl/config.guess b/cloog-0.16.3/isl/config.guess deleted file mode 100755 index 115f944..0000000 --- a/cloog-0.16.3/isl/config.guess +++ /dev/null @@ -1,1502 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -# Free Software Foundation, Inc. - -timestamp='2010-04-03' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' HUP INT TERM - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/cloog-0.16.3/isl/config.sub b/cloog-0.16.3/isl/config.sub deleted file mode 100755 index 204218c..0000000 --- a/cloog-0.16.3/isl/config.sub +++ /dev/null @@ -1,1731 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -# Free Software Foundation, Inc. - -timestamp='2010-05-21' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nios | nios2 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12 | picochip) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile-* | tilegx-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze) - basic_machine=microblaze-xilinx - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - # This must be matched before tile*. - tilegx*) - basic_machine=tilegx-unknown - os=-linux-gnu - ;; - tile*) - basic_machine=tile-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -nacl*) - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - tic54x-*) - os=-coff - ;; - tic55x-*) - os=-coff - ;; - tic6x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/cloog-0.16.3/isl/configure b/cloog-0.16.3/isl/configure deleted file mode 100755 index 4b7f26e..0000000 --- a/cloog-0.16.3/isl/configure +++ /dev/null @@ -1,15960 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for isl 0.07. -# -# Report bugs to . -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 - - test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ - || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: isl-development@googlegroups.com about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - -SHELL=${CONFIG_SHELL-/bin/sh} - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='isl' -PACKAGE_TARNAME='isl' -PACKAGE_VERSION='0.07' -PACKAGE_STRING='isl 0.07' -PACKAGE_BUGREPORT='isl-development@googlegroups.com' -PACKAGE_URL='' - -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -GIT_HEAD_VERSION -GIT_HEAD -GIT_HEAD_ID -pkgconfig_libfile -pkgconfig_libdir -WARNING_FLAGS -HAVE_PIPLIB_FALSE -HAVE_PIPLIB_TRUE -PIPLIB_LIBS -PIPLIB_LDFLAGS -PIPLIB_CPPFLAGS -NEED_GET_MEMORY_FUNCTIONS_FALSE -NEED_GET_MEMORY_FUNCTIONS_TRUE -GMP_LDFLAGS -GMP_CPPFLAGS -GENERATE_DOC_FALSE -GENERATE_DOC_TRUE -POD2HTML -PDFLATEX -PERL -CPP -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -RANLIB -AR -OBJDUMP -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -LIBTOOL -PRTDIAG -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -versioninfo -AM_BACKSLASH -AM_DEFAULT_VERBOSITY -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_silent_rules -enable_dependency_tracking -enable_portable_binary -with_gcc_arch -enable_shared -enable_static -with_pic -enable_fast_install -with_gnu_ld -enable_libtool_lock -with_gmp_prefix -with_gmp_exec_prefix -with_piplib -with_piplib_prefix -with_piplib_exec_prefix -with_piplib_builddir -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information." - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures isl 0.07 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/isl] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of isl 0.07:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-silent-rules less verbose build output (undo: `make V=1') - --disable-silent-rules verbose build output (undo: `make V=0') - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --enable-portable-binary - disable compiler optimizations that would produce - unportable binaries - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-gcc-arch= use architecture for gcc -march/-mtune, - instead of guessing - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-gmp-prefix=DIR Prefix of gmp installation - --with-gmp-exec-prefix=DIR - Exec prefix of gmp installation - --with-piplib=no|system|build - Which piplib to use [default=no] - --with-piplib-prefix=DIR - Prefix of piplib installation - --with-piplib-exec-prefix=DIR - Exec prefix of piplib installation - --with-piplib-builddir=DIR - Location of piplib builddir - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -isl configure 0.07 -generated by GNU Autoconf 2.65 - -Copyright (C) 2009 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_func - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_type - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - echo >>conftest.val; read $3 &5 -$as_echo_n "checking whether $2 is declared... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -#ifndef $2 - (void) $2; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_decl - -# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES -# ---------------------------------------------------- -# Tries to find if the field MEMBER exists in type AGGR, after including -# INCLUDES, setting cache variable VAR accordingly. -ac_fn_c_check_member () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 -$as_echo_n "checking for $2.$3... " >&6; } -if { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (sizeof ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - eval "$4=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$4 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_member -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by isl $as_me 0.07, which was -generated by GNU Autoconf 2.65. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_aux_dir= -for ac_dir in . "$srcdir"/.; do - for ac_t in install-sh install.sh shtool; do - if test -f "$ac_dir/$ac_t"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/$ac_t -c" - break 2 - fi - done -done -if test -z "$ac_aux_dir"; then - as_fn_error "cannot find install-sh, install.sh, or shtool in . \"$srcdir\"/." "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - -am__api_version='1.11' - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='isl' - VERSION='0.07' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - -# Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : - enableval=$enable_silent_rules; -fi - -case $enable_silent_rules in -yes) AM_DEFAULT_VERBOSITY=0;; -no) AM_DEFAULT_VERBOSITY=1;; -*) AM_DEFAULT_VERBOSITY=0;; -esac -AM_BACKSLASH='\' - - -versioninfo=7:0:0 - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "no acceptable C compiler found in \$PATH -See \`config.log' for more details." "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "C compiler cannot create executables -See \`config.log' for more details." "$LINENO" 5; }; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of object files: cannot compile -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 -$as_echo_n "checking for C compiler vendor... " >&6; } -if test "${ax_cv_c_compiler_vendor+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ax_cv_c_compiler_vendor=unknown - # note: don't check for gcc first since some other compilers define __GNUC__ - for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ clang:__clang__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do - vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - -#if !($vencpp) - thisisanerror; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_compiler_vendor=`echo $ventest | cut -d: -f1`; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5 -$as_echo "$ax_cv_c_compiler_vendor" >&6; } - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - - - - - - -# Check whether --enable-portable-binary was given. -if test "${enable_portable_binary+set}" = set; then : - enableval=$enable_portable_binary; acx_maxopt_portable=$withval -else - acx_maxopt_portable=no -fi - - -# Try to determine "good" native compiler flags if none specified via CFLAGS -if test "$ac_test_CFLAGS" != "set"; then - CFLAGS="" - case $ax_cv_c_compiler_vendor in - dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" - if test "x$acx_maxopt_portable" = xno; then - CFLAGS="$CFLAGS -arch host" - fi;; - - sun) CFLAGS="-native -fast -xO5 -dalign" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS -xarch=generic" - fi;; - - hp) CFLAGS="+Oall +Optrs_ansi +DSnative" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS +DAportable" - fi;; - - ibm) if test "x$acx_maxopt_portable" = xno; then - xlc_opt="-qarch=auto -qtune=auto" - else - xlc_opt="-qtune=auto" - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $xlc_opt" >&5 -$as_echo_n "checking whether C compiler accepts $xlc_opt... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$xlc_opt" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="-O3 -qansialias -w $xlc_opt" -else - CFLAGS="-O3 -qansialias -w" - echo "******************************************************" - echo "* You seem to have the IBM C compiler. It is *" - echo "* recommended for best performance that you use: *" - echo "* *" - echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" - echo "* ^^^ ^^^ *" - echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" - echo "* CPU you have. (Set the CFLAGS environment var. *" - echo "* and re-run configure.) For more info, man cc. *" - echo "******************************************************" -fi - - ;; - - intel) CFLAGS="-O3 -ansi_alias" - if test "x$acx_maxopt_portable" = xno; then - icc_archflag=unknown - icc_flags="" - case $host_cpu in - i686*|x86_64*) - # icc accepts gcc assembly syntax, so these should work: - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 -$as_echo_n "checking for x86 cpuid 0 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_0+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 -$as_echo_n "checking for x86 cpuid 1 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_1+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_1=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *6a?:*[234]:*:*|*6[789b]?:*:*:*) icc_flags="-xK";; - *f3[347]:*:*:*|*f41347:*:*:*) icc_flags="-xP -xN -xW -xK";; - *f??:*:*:*) icc_flags="-xN -xW -xK";; - esac ;; - esac ;; - esac - if test "x$icc_flags" != x; then - for flag in $icc_flags; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 -$as_echo_n "checking whether C compiler accepts $flag... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$flag" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - icc_archflag=$flag; break -else - : -fi - - done - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icc architecture flag" >&5 -$as_echo_n "checking for icc architecture flag... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $icc_archflag" >&5 -$as_echo "$icc_archflag" >&6; } - if test "x$icc_archflag" != xunknown; then - CFLAGS="$CFLAGS $icc_archflag" - fi - fi - ;; - - gnu) - # default optimization flags for gcc on all systems - CFLAGS="-O3 -fomit-frame-pointer" - - # -malign-double for x86 systems - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -malign-double" >&5 -$as_echo_n "checking whether C compiler accepts -malign-double... " >&6; } -if test "${ax_cv_c_flags__malign_double+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ax_save_FLAGS=$CFLAGS - CFLAGS="-malign-double" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_flags__malign_double=yes -else - ax_cv_c_flags__malign_double=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -fi - -eval ax_check_compiler_flags=$ax_cv_c_flags__malign_double -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="$CFLAGS -malign-double" -else - : -fi - - - # -fstrict-aliasing for gcc-2.95+ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5 -$as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; } -if test "${ax_cv_c_flags__fstrict_aliasing+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ax_save_FLAGS=$CFLAGS - CFLAGS="-fstrict-aliasing" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_flags__fstrict_aliasing=yes -else - ax_cv_c_flags__fstrict_aliasing=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -fi - -eval ax_check_compiler_flags=$ax_cv_c_flags__fstrict_aliasing -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="$CFLAGS -fstrict-aliasing" -else - : -fi - - - # note that we enable "unsafe" fp optimization with other compilers, too - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -ffast-math" >&5 -$as_echo_n "checking whether C compiler accepts -ffast-math... " >&6; } -if test "${ax_cv_c_flags__ffast_math+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ax_save_FLAGS=$CFLAGS - CFLAGS="-ffast-math" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_flags__ffast_math=yes -else - ax_cv_c_flags__ffast_math=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -fi - -eval ax_check_compiler_flags=$ax_cv_c_flags__ffast_math -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="$CFLAGS -ffast-math" -else - : -fi - - - - - - -# Check whether --with-gcc-arch was given. -if test "${with_gcc_arch+set}" = set; then : - withval=$with_gcc_arch; ax_gcc_arch=$withval -else - ax_gcc_arch=yes -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 -$as_echo_n "checking for gcc architecture flag... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } -if test "${ax_cv_gcc_archflag+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -ax_cv_gcc_archflag="unknown" - -if test "$GCC" = yes; then - -if test "x$ax_gcc_arch" = xyes; then -ax_gcc_arch="" -if test "$cross_compiling" = no; then -case $host_cpu in - i[3456]86*|x86_64*) # use cpuid codes, in part from x86info-1.7 by D. Jones - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 -$as_echo_n "checking for x86 cpuid 0 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_0+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 -$as_echo_n "checking for x86 cpuid 1 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_1+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_1=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - case $ax_cv_gcc_x86_cpuid_0 in - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *5[48]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; - *5??:*:*:*) ax_gcc_arch=pentium ;; - *6[3456]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[01]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[234]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6[9d]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; - *6[78b]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6??:*:*:*) ax_gcc_arch=pentiumpro ;; - *f3[347]:*:*:*|*f41347:*:*:*) - case $host_cpu in - x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; - *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; - esac ;; - *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; - esac ;; - *:68747541:*:*) # AMD - case $ax_cv_gcc_x86_cpuid_1 in - *5[67]?:*:*:*) ax_gcc_arch=k6 ;; - *5[8d]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; - *5[9]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; - *60?:*:*:*) ax_gcc_arch=k7 ;; - *6[12]?:*:*:*) ax_gcc_arch="athlon k7" ;; - *6[34]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; - *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; - *6[68a]?:*:*:*) - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0x80000006 output" >&5 -$as_echo_n "checking for x86 cpuid 0x80000006 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_0x80000006+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0x80000006=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0x80000006, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0x80000006=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0x80000006=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0x80000006" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0x80000006" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - # L2 cache size - case $ax_cv_gcc_x86_cpuid_0x80000006 in - *:*:*[1-9a-f]??????:*) # (L2 = ecx >> 16) >= 256 - ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; - *) ax_gcc_arch="athlon-4 athlon k7" ;; - esac ;; - *f[4cef8b]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; - *f5?:*:*:*) ax_gcc_arch="opteron k8" ;; - *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; - *f??:*:*:*) ax_gcc_arch="k8" ;; - esac ;; - *:746e6543:*:*) # IDT - case $ax_cv_gcc_x86_cpuid_1 in - *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; - *58?:*:*:*) ax_gcc_arch=winchip2 ;; - *6[78]?:*:*:*) ax_gcc_arch=c3 ;; - *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; - esac ;; - esac - if test x"$ax_gcc_arch" = x; then # fallback - case $host_cpu in - i586*) ax_gcc_arch=pentium ;; - i686*) ax_gcc_arch=pentiumpro ;; - esac - fi - ;; - - sparc*) - # Extract the first word of "prtdiag", so it can be a program name with args. -set dummy prtdiag; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PRTDIAG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $PRTDIAG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PRTDIAG="$PRTDIAG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy="$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PRTDIAG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_PRTDIAG" && ac_cv_path_PRTDIAG="prtdiag" - ;; -esac -fi -PRTDIAG=$ac_cv_path_PRTDIAG -if test -n "$PRTDIAG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRTDIAG" >&5 -$as_echo "$PRTDIAG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` - cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters` - case $cputype in - *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; - *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; - *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; - *supersparc*|*tms390z5[05]*) ax_gcc_arch="supersparc v8" ;; - *hypersparc*|*rt62[056]*) ax_gcc_arch="hypersparc v8" ;; - *cypress*) ax_gcc_arch=cypress ;; - esac ;; - - alphaev5) ax_gcc_arch=ev5 ;; - alphaev56) ax_gcc_arch=ev56 ;; - alphapca56) ax_gcc_arch="pca56 ev56" ;; - alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; - alphaev6) ax_gcc_arch=ev6 ;; - alphaev67) ax_gcc_arch=ev67 ;; - alphaev68) ax_gcc_arch="ev68 ev67" ;; - alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; - alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; - alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; - - powerpc*) - cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` - cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'` - case $cputype in - *750*) ax_gcc_arch="750 G3" ;; - *740[0-9]*) ax_gcc_arch="$cputype 7400 G4" ;; - *74[4-5][0-9]*) ax_gcc_arch="$cputype 7450 G4" ;; - *74[0-9][0-9]*) ax_gcc_arch="$cputype G4" ;; - *970*) ax_gcc_arch="970 G5 power4";; - *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; - *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; - 603ev|8240) ax_gcc_arch="$cputype 603e 603";; - *) ax_gcc_arch=$cputype ;; - esac - ax_gcc_arch="$ax_gcc_arch powerpc" - ;; -esac -fi # not cross-compiling -fi # guess arch - -if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then -for arch in $ax_gcc_arch; do - if test "x$acx_maxopt_portable" = xyes; then # if we require portable code - flags="-mtune=$arch" - # -mcpu=$arch and m$arch generate nonportable code on every arch except - # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. - case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac - else - flags="-march=$arch -mcpu=$arch -m$arch" - fi - for flag in $flags; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 -$as_echo_n "checking whether C compiler accepts $flag... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$flag" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - ax_cv_gcc_archflag=$flag; break -else - : -fi - - done - test "x$ax_cv_gcc_archflag" = xunknown || break -done -fi - -fi # $GCC=yes - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 -$as_echo_n "checking for gcc architecture flag... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_archflag" >&5 -$as_echo "$ax_cv_gcc_archflag" >&6; } -if test "x$ax_cv_gcc_archflag" = xunknown; then - : -else - CFLAGS="$CFLAGS $ax_cv_gcc_archflag" -fi - - - # drop to -O1 for gcc 4.2 - $CC --version | - sed -e 's/.* \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1 \2/' | - (read major minor - if test $major -eq 4 -a $minor -eq 2; then - exit 0 - fi - exit 1 - ) && CFLAGS="-O1" - ;; - esac - - if test -z "$CFLAGS"; then - echo "" - echo "********************************************************" - echo "* WARNING: Don't know the best CFLAGS for this system *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" - echo "********************************************************" - echo "" - CFLAGS="-O3" - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 -$as_echo_n "checking whether C compiler accepts $CFLAGS... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$CFLAGS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - : -else - - echo "" - echo "********************************************************" - echo "* WARNING: The guessed CFLAGS don't seem to work with *" - echo "* your compiler. *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "********************************************************" - echo "" - CFLAGS="" - -fi - - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports function __attribute__((__warn_unused_result__))" >&5 -$as_echo_n "checking whether the compiler supports function __attribute__((__warn_unused_result__))... " >&6; } -if test "${ax_cv_gcc_warn_unused_result+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -__attribute__((__warn_unused_result__)) - int f(int i) { return i; } -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_gcc_warn_unused_result=yes -else - ax_cv_gcc_warn_unused_result=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_warn_unused_result" >&5 -$as_echo "$ax_cv_gcc_warn_unused_result" >&6; } - if test "$ax_cv_gcc_warn_unused_result" = yes; then - -$as_echo "#define GCC_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))" >>confdefs.h - - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__" >&5 -$as_echo_n "checking for __attribute__... " >&6; } -if test "${ax_cv___attribute__+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - static void foo(void) __attribute__ ((unused)); - static void - foo(void) { - exit(1); - } - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv___attribute__=yes -else - ax_cv___attribute__=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv___attribute__" >&5 -$as_echo "$ax_cv___attribute__" >&6; } - if test "$ax_cv___attribute__" = "yes"; then - -$as_echo "#define HAVE___ATTRIBUTE__ 1" >>confdefs.h - - fi - - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.2.8' -macro_revision='1.3169' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`print -r -- -n 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "" -} - -case "$ECHO" in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; -esac - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test "${lt_cv_path_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if test "${lt_cv_nm_interface+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - - - - - - - - - - - - - - - - - - - - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if test "${lt_cv_apple_cc_single_mod+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if test "${lt_cv_ld_force_load+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 - echo "$RANLIB libconftest.a" >&5 - $RANLIB libconftest.a 2>&5 - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&5 - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if test "${lt_cv_objdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; - *) - lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - lt_prog_compiler_wl='-Xlinker ' - lt_prog_compiler_pic='-Xcompiler -fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ F* | *Sun*Fortran*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 -$as_echo "$lt_prog_compiler_pic" >&6; } - - - - - - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test "${lt_cv_prog_compiler_static_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; - *\ \(GNU\ Binutils\)\ [3-9]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - export_dynamic_flag_spec='${wl}--export-all-symbols' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - haiku*) - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - link_all_deplibs=yes - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld='-rpath $libdir' - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - fi - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - else - whole_archive_flag_spec='' - fi - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if test "${lt_cv_prog_compiler__b+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler__b=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -b" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler__b=yes - fi - else - lt_cv_prog_compiler__b=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } - -if test x"$lt_cv_prog_compiler__b" = xyes; then - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' -fi - - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo(void) {} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if test "${lt_cv_archive_cmds_need_lc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc=no - else - lt_cv_archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } - archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([A-Za-z]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if test "${lt_cv_shlibpath_overrides_runpath+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -void fnord () __attribute__((visibility("default"))); -#endif - -void fnord () { int i=42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -void fnord () __attribute__((visibility("default"))); -#endif - -void fnord () { int i=42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - - -# Extract the first word of "perl", so it can be a program name with args. -set dummy perl; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_PERL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PERL"; then - ac_cv_prog_PERL="$PERL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PERL="perl" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PERL=$ac_cv_prog_PERL -if test -n "$PERL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 -$as_echo "$PERL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -# Extract the first word of "pdflatex", so it can be a program name with args. -set dummy pdflatex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_PDFLATEX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PDFLATEX"; then - ac_cv_prog_PDFLATEX="$PDFLATEX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PDFLATEX="pdflatex" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PDFLATEX=$ac_cv_prog_PDFLATEX -if test -n "$PDFLATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDFLATEX" >&5 -$as_echo "$PDFLATEX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -# Extract the first word of "pod2html", so it can be a program name with args. -set dummy pod2html; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_POD2HTML+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$POD2HTML"; then - ac_cv_prog_POD2HTML="$POD2HTML" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_POD2HTML="pod2html" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -POD2HTML=$ac_cv_prog_POD2HTML -if test -n "$POD2HTML"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POD2HTML" >&5 -$as_echo "$POD2HTML" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - if test -n "$PERL" -a -n "$PDFLATEX" -a -n "$POD2HTML"; then - GENERATE_DOC_TRUE= - GENERATE_DOC_FALSE='#' -else - GENERATE_DOC_TRUE='#' - GENERATE_DOC_FALSE= -fi - - -# ------ AX CREATE STDINT H ------------------------------------- -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint types" >&5 -$as_echo_n "checking for stdint types... " >&6; } -ac_stdint_h=`echo include/isl/stdint.h` -# try to shortcircuit - if the default include path of the compiler -# can find a "stdint.h" header then we assume that all compilers can. -if test "${ac_cv_header_stdint_t+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS="" -old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS="" -old_CFLAGS="$CFLAGS" ; CFLAGS="" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -int_least32_t v = 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_stdint_result="(assuming C99 compatible system)" - ac_cv_header_stdint_t="stdint.h"; -else - ac_cv_header_stdint_t="" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then -CFLAGS="-std=c99" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -int_least32_t v = 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: your GCC compiler has a defunct stdint.h for its default-mode" >&5 -$as_echo "$as_me: WARNING: your GCC compiler has a defunct stdint.h for its default-mode" >&2;} -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -CXXFLAGS="$old_CXXFLAGS" -CPPFLAGS="$old_CPPFLAGS" -CFLAGS="$old_CFLAGS" -fi - - -v="... $ac_cv_header_stdint_h" -if test "$ac_stdint_h" = "stdint.h" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (are you sure you want them in ./stdint.h?)" >&5 -$as_echo "(are you sure you want them in ./stdint.h?)" >&6; } -elif test "$ac_stdint_h" = "inttypes.h" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (are you sure you want them in ./inttypes.h?)" >&5 -$as_echo "(are you sure you want them in ./inttypes.h?)" >&6; } -elif test "_$ac_cv_header_stdint_t" = "_" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (putting them into $ac_stdint_h)$v" >&5 -$as_echo "(putting them into $ac_stdint_h)$v" >&6; } -else - ac_cv_header_stdint="$ac_cv_header_stdint_t" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint (shortcircuit)" >&5 -$as_echo "$ac_cv_header_stdint (shortcircuit)" >&6; } -fi - -if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit.. - - -inttype_headers=`echo | sed -e 's/,/ /g'` - -ac_cv_stdint_result="(no helpful system typedefs seen)" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uintptr_t" >&5 -$as_echo_n "checking for stdint uintptr_t... " >&6; } -if test "${ac_cv_header_stdint_x+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 -$as_echo "(..)" >&6; } - for i in stdint.h inttypes.h sys/inttypes.h $inttype_headers - do - unset ac_cv_type_uintptr_t - unset ac_cv_type_uint64_t - ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#include <$i> -" -if test "x$ac_cv_type_uintptr_t" = x""yes; then : - ac_cv_header_stdint_x=$i -else - continue -fi - - ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i> -" -if test "x$ac_cv_type_uint64_t" = x""yes; then : - and64="/uint64_t" -else - and64="" -fi - - ac_cv_stdint_result="(seen uintptr_t$and64 in $i)" - break - done - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uintptr_t" >&5 -$as_echo_n "checking for stdint uintptr_t... " >&6; } - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_x" >&5 -$as_echo "$ac_cv_header_stdint_x" >&6; } - - -if test "_$ac_cv_header_stdint_x" = "_" ; then - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uint32_t" >&5 -$as_echo_n "checking for stdint uint32_t... " >&6; } -if test "${ac_cv_header_stdint_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 -$as_echo "(..)" >&6; } - for i in inttypes.h sys/inttypes.h stdint.h $inttype_headers - do - unset ac_cv_type_uint32_t - unset ac_cv_type_uint64_t - ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "#include <$i> -" -if test "x$ac_cv_type_uint32_t" = x""yes; then : - ac_cv_header_stdint_o=$i -else - continue -fi - - ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i> -" -if test "x$ac_cv_type_uint64_t" = x""yes; then : - and64="/uint64_t" -else - and64="" -fi - - ac_cv_stdint_result="(seen uint32_t$and64 in $i)" - break - break; - done - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uint32_t" >&5 -$as_echo_n "checking for stdint uint32_t... " >&6; } - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_o" >&5 -$as_echo "$ac_cv_header_stdint_o" >&6; } - -fi - -if test "_$ac_cv_header_stdint_x" = "_" ; then -if test "_$ac_cv_header_stdint_o" = "_" ; then - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint u_int32_t" >&5 -$as_echo_n "checking for stdint u_int32_t... " >&6; } -if test "${ac_cv_header_stdint_u+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 -$as_echo "(..)" >&6; } - for i in sys/types.h inttypes.h sys/inttypes.h $inttype_headers ; do - unset ac_cv_type_u_int32_t - unset ac_cv_type_u_int64_t - ac_fn_c_check_type "$LINENO" "u_int32_t" "ac_cv_type_u_int32_t" "#include <$i> -" -if test "x$ac_cv_type_u_int32_t" = x""yes; then : - ac_cv_header_stdint_u=$i -else - continue -fi - - ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "#include<$i> -" -if test "x$ac_cv_type_u_int64_t" = x""yes; then : - and64="/u_int64_t" -else - and64="" -fi - - ac_cv_stdint_result="(seen u_int32_t$and64 in $i)" - break - break; - done - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint u_int32_t" >&5 -$as_echo_n "checking for stdint u_int32_t... " >&6; } - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_u" >&5 -$as_echo "$ac_cv_header_stdint_u" >&6; } - -fi fi - -if test "_$ac_cv_header_stdint_x" = "_" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint datatype model" >&5 -$as_echo_n "checking for stdint datatype model... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 -$as_echo "(..)" >&6; } - - # The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 -$as_echo_n "checking size of char... " >&6; } -if test "${ac_cv_sizeof_char+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_char" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "cannot compute sizeof (char) -See \`config.log' for more details." "$LINENO" 5; }; } - else - ac_cv_sizeof_char=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 -$as_echo "$ac_cv_sizeof_char" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_CHAR $ac_cv_sizeof_char -_ACEOF - - - # The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 -$as_echo_n "checking size of short... " >&6; } -if test "${ac_cv_sizeof_short+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_short" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "cannot compute sizeof (short) -See \`config.log' for more details." "$LINENO" 5; }; } - else - ac_cv_sizeof_short=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 -$as_echo "$ac_cv_sizeof_short" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_SHORT $ac_cv_sizeof_short -_ACEOF - - - # The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 -$as_echo_n "checking size of int... " >&6; } -if test "${ac_cv_sizeof_int+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_int" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "cannot compute sizeof (int) -See \`config.log' for more details." "$LINENO" 5; }; } - else - ac_cv_sizeof_int=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 -$as_echo "$ac_cv_sizeof_int" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT $ac_cv_sizeof_int -_ACEOF - - - # The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 -$as_echo_n "checking size of long... " >&6; } -if test "${ac_cv_sizeof_long+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "cannot compute sizeof (long) -See \`config.log' for more details." "$LINENO" 5; }; } - else - ac_cv_sizeof_long=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 -$as_echo "$ac_cv_sizeof_long" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG $ac_cv_sizeof_long -_ACEOF - - - # The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5 -$as_echo_n "checking size of void*... " >&6; } -if test "${ac_cv_sizeof_voidp+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_voidp" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "cannot compute sizeof (void*) -See \`config.log' for more details." "$LINENO" 5; }; } - else - ac_cv_sizeof_voidp=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5 -$as_echo "$ac_cv_sizeof_voidp" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_VOIDP $ac_cv_sizeof_voidp -_ACEOF - - - ac_cv_char_data_model="" - ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char" - ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short" - ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int" - ac_cv_long_data_model="" - ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int" - ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long" - ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking data model" >&5 -$as_echo_n "checking data model... " >&6; } - case "$ac_cv_char_data_model/$ac_cv_long_data_model" in - 122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;; - 122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;; - 122/*) ac_cv_data_model="i16" ; n="unusual int16 model" ;; - 124/444) ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;; - 124/488) ac_cv_data_model="LP64" ; n="standard 64bit unixish" ;; - 124/448) ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;; - 124/*) ac_cv_data_model="i32" ; n="unusual int32 model" ;; - 128/888) ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;; - 128/*) ac_cv_data_model="i64" ; n="unusual int64 model" ;; - 222/*2) ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;; - 333/*3) ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;; - 444/*4) ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;; - 666/*6) ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;; - 888/*8) ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;; - 222/*|333/*|444/*|666/*|888/*) : - ac_cv_data_model="iDSP" ; n="unusual dsptype" ;; - *) ac_cv_data_model="none" ; n="very unusual model" ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_data_model ($ac_cv_long_data_model, $n)" >&5 -$as_echo "$ac_cv_data_model ($ac_cv_long_data_model, $n)" >&6; } - -fi - -if test "_$ac_cv_header_stdint_x" != "_" ; then - ac_cv_header_stdint="$ac_cv_header_stdint_x" -elif test "_$ac_cv_header_stdint_o" != "_" ; then - ac_cv_header_stdint="$ac_cv_header_stdint_o" -elif test "_$ac_cv_header_stdint_u" != "_" ; then - ac_cv_header_stdint="$ac_cv_header_stdint_u" -else - ac_cv_header_stdint="stddef.h" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for extra inttypes in chosen header" >&5 -$as_echo_n "checking for extra inttypes in chosen header... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ($ac_cv_header_stdint)" >&5 -$as_echo "($ac_cv_header_stdint)" >&6; } -unset ac_cv_type_int_least32_t -unset ac_cv_type_int_fast32_t -ac_fn_c_check_type "$LINENO" "int_least32_t" "ac_cv_type_int_least32_t" "#include <$ac_cv_header_stdint> -" -if test "x$ac_cv_type_int_least32_t" = x""yes; then : - -fi - -ac_fn_c_check_type "$LINENO" "int_fast32_t" "ac_cv_type_int_fast32_t" "#include<$ac_cv_header_stdint> -" -if test "x$ac_cv_type_int_fast32_t" = x""yes; then : - -fi - -ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "#include <$ac_cv_header_stdint> -" -if test "x$ac_cv_type_intmax_t" = x""yes; then : - -fi - - -fi # shortcircut to system "stdint.h" -# ------------------ PREPARE VARIABLES ------------------------------ -if test "$GCC" = "yes" ; then -ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1` -else -ac_cv_stdint_message="using $CC" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&5 -$as_echo "make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&6; } - -# ----------------- DONE inttypes.h checks START header ------------- -ac_config_commands="$ac_config_commands $ac_stdint_h" - - - - - - -case "system" in -system) - -# Check whether --with-gmp_prefix was given. -if test "${with_gmp_prefix+set}" = set; then : - withval=$with_gmp_prefix; -fi - - -# Check whether --with-gmp_exec_prefix was given. -if test "${with_gmp_exec_prefix+set}" = set; then : - withval=$with_gmp_exec_prefix; -fi - -esac - -if test "x$with_gmp_prefix" != "x" -a "x$with_gmp_exec_prefix" = "x"; then - with_gmp_exec_prefix=$with_gmp_prefix -fi -if test "x$with_gmp_prefix" != "x" -o "x$with_gmp_exec_prefix" != "x"; then - if test "x$with_gmp" != "x" -a "x$with_gmp" != "xyes" -a "x$with_gmp" != "xsystem"; then - as_fn_error "Setting $with_gmp_prefix implies use of system gmp" "$LINENO" 5 - fi - with_gmp="system" -fi -if test "x$with_gmp_builddir" != "x"; then - if test "x$with_gmp" != "x" -a "x$with_gmp" != "xyes" -a "x$with_gmp" != "xbuild"; then - as_fn_error "Setting $with_gmp_builddir implies use of build gmp" "$LINENO" 5 - fi - with_gmp="build" - gmp_srcdir=`echo @abs_srcdir@ | $with_gmp_builddir/config.status --file=-` - { $as_echo "$as_me:${as_lineno-$LINENO}: gmp sources in $gmp_srcdir" >&5 -$as_echo "$as_me: gmp sources in $gmp_srcdir" >&6;} -fi -if test "x$with_gmp_exec_prefix" != "x"; then - export PKG_CONFIG_PATH="$with_gmp_exec_prefix/lib/pkgconfig${PKG_CONFIG_PATH+:$PKG_CONFIG_PATH}" -fi -case "$with_gmp" in -system) - ;; -*) - case "system" in - bundled) - if test -d $srcdir/.git -a \ - -d $srcdir/gmp -a \ - ! -d $srcdir/gmp/.git; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git repo detected, but submodule gmp not initialized" >&5 -$as_echo "$as_me: WARNING: git repo detected, but submodule gmp not initialized" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You may want to run" >&5 -$as_echo "$as_me: WARNING: You may want to run" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule init" >&5 -$as_echo "$as_me: WARNING: git submodule init" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule update" >&5 -$as_echo "$as_me: WARNING: git submodule update" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sh autogen.sh" >&5 -$as_echo "$as_me: WARNING: sh autogen.sh" >&2;} - fi - if test -f $srcdir/gmp/configure; then - with_gmp="bundled" - else - with_gmp="no" - fi - ;; - *) - with_gmp="system" - ;; - esac - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which gmp to use" >&5 -$as_echo_n "checking which gmp to use... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_gmp" >&5 -$as_echo "$with_gmp" >&6; } - - - - - -if test "x$with_gmp_prefix" != "x"; then - isl_configure_args="$isl_configure_args --with-gmp=$with_gmp_prefix" - GMP_CPPFLAGS="-I$with_gmp_prefix/include" - GMP_LDFLAGS="-L$with_gmp_prefix/lib" -fi -SAVE_CPPFLAGS="$CPPFLAGS" -CPPFLAGS="$GMP_CPPFLAGS $CPPFLAGS" -need_get_memory_functions=false -ac_fn_c_check_decl "$LINENO" "mp_get_memory_functions" "ac_cv_have_decl_mp_get_memory_functions" "#include -" -if test "x$ac_cv_have_decl_mp_get_memory_functions" = x""yes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_MP_GET_MEMORY_FUNCTIONS $ac_have_decl -_ACEOF -if test $ac_have_decl = 1; then : - -else - - need_get_memory_functions=true - -fi - -CPPFLAGS="$SAVE_CPPFLAGS" - if test x$need_get_memory_functions = xtrue; then - NEED_GET_MEMORY_FUNCTIONS_TRUE= - NEED_GET_MEMORY_FUNCTIONS_FALSE='#' -else - NEED_GET_MEMORY_FUNCTIONS_TRUE='#' - NEED_GET_MEMORY_FUNCTIONS_FALSE= -fi - -ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "#include -" -if test "x$ac_cv_have_decl_ffs" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FFS $ac_have_decl -_ACEOF - -ac_fn_c_check_decl "$LINENO" "__builtin_ffs" "ac_cv_have_decl___builtin_ffs" "$ac_includes_default" -if test "x$ac_cv_have_decl___builtin_ffs" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL___BUILTIN_FFS $ac_have_decl -_ACEOF - - - - - -# Check whether --with-piplib was given. -if test "${with_piplib+set}" = set; then : - withval=$with_piplib; -fi - -case "system" in -no|system|build) - -# Check whether --with-piplib_prefix was given. -if test "${with_piplib_prefix+set}" = set; then : - withval=$with_piplib_prefix; -fi - - -# Check whether --with-piplib_exec_prefix was given. -if test "${with_piplib_exec_prefix+set}" = set; then : - withval=$with_piplib_exec_prefix; -fi - -esac - -# Check whether --with-piplib_builddir was given. -if test "${with_piplib_builddir+set}" = set; then : - withval=$with_piplib_builddir; -fi - -if test "x$with_piplib_prefix" != "x" -a "x$with_piplib_exec_prefix" = "x"; then - with_piplib_exec_prefix=$with_piplib_prefix -fi -if test "x$with_piplib_prefix" != "x" -o "x$with_piplib_exec_prefix" != "x"; then - if test "x$with_piplib" != "x" -a "x$with_piplib" != "xyes" -a "x$with_piplib" != "xsystem"; then - as_fn_error "Setting $with_piplib_prefix implies use of system piplib" "$LINENO" 5 - fi - with_piplib="system" -fi -if test "x$with_piplib_builddir" != "x"; then - if test "x$with_piplib" != "x" -a "x$with_piplib" != "xyes" -a "x$with_piplib" != "xbuild"; then - as_fn_error "Setting $with_piplib_builddir implies use of build piplib" "$LINENO" 5 - fi - with_piplib="build" - piplib_srcdir=`echo @abs_srcdir@ | $with_piplib_builddir/config.status --file=-` - { $as_echo "$as_me:${as_lineno-$LINENO}: piplib sources in $piplib_srcdir" >&5 -$as_echo "$as_me: piplib sources in $piplib_srcdir" >&6;} -fi -if test "x$with_piplib_exec_prefix" != "x"; then - export PKG_CONFIG_PATH="$with_piplib_exec_prefix/lib/pkgconfig${PKG_CONFIG_PATH+:$PKG_CONFIG_PATH}" -fi -case "$with_piplib" in -no|system|build) - ;; -*) - case "no" in - bundled) - if test -d $srcdir/.git -a \ - -d $srcdir/piplib -a \ - ! -d $srcdir/piplib/.git; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git repo detected, but submodule piplib not initialized" >&5 -$as_echo "$as_me: WARNING: git repo detected, but submodule piplib not initialized" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You may want to run" >&5 -$as_echo "$as_me: WARNING: You may want to run" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule init" >&5 -$as_echo "$as_me: WARNING: git submodule init" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule update" >&5 -$as_echo "$as_me: WARNING: git submodule update" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sh autogen.sh" >&5 -$as_echo "$as_me: WARNING: sh autogen.sh" >&2;} - fi - if test -f $srcdir/piplib/configure; then - with_piplib="bundled" - else - with_piplib="no" - fi - ;; - *) - with_piplib="no" - ;; - esac - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which piplib to use" >&5 -$as_echo_n "checking which piplib to use... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_piplib" >&5 -$as_echo "$with_piplib" >&6; } - - - -have_piplib=false - - - -case "$with_piplib" in - build) - PIPLIB_CPPFLAGS="-I$piplib_srcdir/include" - PIPLIB_LIBS="$with_piplib_builddir/libpiplibMP.la" - ;; - system) - PIPLIB_LIBS="-lpiplibMP" - if test "x$with_piplib_prefix" != "x"; then - PIPLIB_CPPFLAGS="-I$with_piplib_prefix/include" - PIPLIB_LDFLAGS="-L$with_piplib_prefix/lib" - fi - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$PIPLIB_CPPFLAGS $CPPFLAGS" - LDFLAGS="$PIPLIB_LDFLAGS $LDFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pip_solve in -lpiplibMP" >&5 -$as_echo_n "checking for pip_solve in -lpiplibMP... " >&6; } -if test "${ac_cv_lib_piplibMP_pip_solve+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpiplibMP $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pip_solve (); -int -main () -{ -return pip_solve (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_piplibMP_pip_solve=yes -else - ac_cv_lib_piplibMP_pip_solve=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_piplibMP_pip_solve" >&5 -$as_echo "$ac_cv_lib_piplibMP_pip_solve" >&6; } -if test "x$ac_cv_lib_piplibMP_pip_solve" = x""yes; then : - - ac_fn_c_check_member "$LINENO" "PipOptions" "Urs_parms" "ac_cv_member_PipOptions_Urs_parms" "#include -" -if test "x$ac_cv_member_PipOptions_Urs_parms" = x""yes; then : - -else - - as_fn_error "Piplib too old; please install version 1.3.6 or newer" "$LINENO" 5 - -fi - - -else - - as_fn_error "Piplib not found" "$LINENO" 5 - -fi - - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" - ;; - no) - ;; - *) - as_fn_error "unsupported" "$LINENO" 5 - ;; -esac -if test "$with_piplib" != "no"; then - -$as_echo "#define ISL_PIPLIB /**/" >>confdefs.h - - have_piplib=true -fi - if test x$have_piplib = xtrue; then - HAVE_PIPLIB_TRUE= - HAVE_PIPLIB_FALSE='#' -else - HAVE_PIPLIB_TRUE='#' - HAVE_PIPLIB_FALSE= -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 -$as_echo_n "checking for C compiler vendor... " >&6; } -if test "${ax_cv_c_compiler_vendor+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ax_cv_c_compiler_vendor=unknown - # note: don't check for gcc first since some other compilers define __GNUC__ - for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ clang:__clang__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do - vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - -#if !($vencpp) - thisisanerror; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_compiler_vendor=`echo $ventest | cut -d: -f1`; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5 -$as_echo "$ax_cv_c_compiler_vendor" >&6; } - - - WARNING_FLAGS="" - - if test "${ax_cv_c_compiler_vendor}" = "clang"; then - WARNING_FLAGS="-Wall" - fi - - - - -PACKAGE_CFLAGS="$GMP_CPPFLAGS" -PACKAGE_LDFLAGS="$GMP_LDFLAGS" -PACKAGE_LIBS="-lisl -lgmp" - -# we need the expanded forms... -test "x$prefix" = xNONE && prefix=$ac_default_prefix -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig libname" >&5 -$as_echo_n "checking our pkgconfig libname... " >&6; } -test ".$ax_create_pkgconfig_libname" != "." || \ -ax_create_pkgconfig_libname="${PACKAGE_NAME}" -test ".$ax_create_pkgconfig_libname" != "." || \ -ax_create_pkgconfig_libname="$PACKAGE" -ax_create_pkgconfig_libname=`eval echo "$ax_create_pkgconfig_libname"` -ax_create_pkgconfig_libname=`eval echo "$ax_create_pkgconfig_libname"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_libname" >&5 -$as_echo "$ax_create_pkgconfig_libname" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig version" >&5 -$as_echo_n "checking our pkgconfig version... " >&6; } -test ".$ax_create_pkgconfig_version" != "." || \ -ax_create_pkgconfig_version="${PACKAGE_VERSION}" -test ".$ax_create_pkgconfig_version" != "." || \ -ax_create_pkgconfig_version="$VERSION" -ax_create_pkgconfig_version=`eval echo "$ax_create_pkgconfig_version"` -ax_create_pkgconfig_version=`eval echo "$ax_create_pkgconfig_version"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_version" >&5 -$as_echo "$ax_create_pkgconfig_version" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig_libdir" >&5 -$as_echo_n "checking our pkgconfig_libdir... " >&6; } -test ".$pkgconfig_libdir" = "." && \ -pkgconfig_libdir='${libdir}/pkgconfig' -ax_create_pkgconfig_libdir=`eval echo "$pkgconfig_libdir"` -ax_create_pkgconfig_libdir=`eval echo "$ax_create_pkgconfig_libdir"` -ax_create_pkgconfig_libdir=`eval echo "$ax_create_pkgconfig_libdir"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkgconfig_libdir" >&5 -$as_echo "$pkgconfig_libdir" >&6; } -test "$pkgconfig_libdir" != "$ax_create_pkgconfig_libdir" && ( -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: expanded our pkgconfig_libdir... $ax_create_pkgconfig_libdir" >&5 -$as_echo "expanded our pkgconfig_libdir... $ax_create_pkgconfig_libdir" >&6; }) - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig_libfile" >&5 -$as_echo_n "checking our pkgconfig_libfile... " >&6; } -test ".$pkgconfig_libfile" != "." || \ -pkgconfig_libfile="$ax_create_pkgconfig_libname.pc" -ax_create_pkgconfig_libfile=`eval echo "$pkgconfig_libfile"` -ax_create_pkgconfig_libfile=`eval echo "$ax_create_pkgconfig_libfile"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkgconfig_libfile" >&5 -$as_echo "$pkgconfig_libfile" >&6; } -test "$pkgconfig_libfile" != "$ax_create_pkgconfig_libfile" && ( -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: expanded our pkgconfig_libfile... $ax_create_pkgconfig_libfile" >&5 -$as_echo "expanded our pkgconfig_libfile... $ax_create_pkgconfig_libfile" >&6; }) - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our package / suffix" >&5 -$as_echo_n "checking our package / suffix... " >&6; } -ax_create_pkgconfig_suffix="$program_suffix" -test ".$ax_create_pkgconfig_suffix" != .NONE || ax_create_pkgconfig_suffix="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${PACKAGE_NAME} / ${ax_create_pkgconfig_suffix}" >&5 -$as_echo "${PACKAGE_NAME} / ${ax_create_pkgconfig_suffix}" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig description" >&5 -$as_echo_n "checking our pkgconfig description... " >&6; } -ax_create_pkgconfig_description="$PACKAGE_SUMMARY" -test ".$ax_create_pkgconfig_description" != "." || \ -ax_create_pkgconfig_description="$ax_create_pkgconfig_libname Library" -ax_create_pkgconfig_description=`eval echo "$ax_create_pkgconfig_description"` -ax_create_pkgconfig_description=`eval echo "$ax_create_pkgconfig_description"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_description" >&5 -$as_echo "$ax_create_pkgconfig_description" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig requires" >&5 -$as_echo_n "checking our pkgconfig requires... " >&6; } -ax_create_pkgconfig_requires="$PACKAGE_REQUIRES" -ax_create_pkgconfig_requires=`eval echo "$ax_create_pkgconfig_requires"` -ax_create_pkgconfig_requires=`eval echo "$ax_create_pkgconfig_requires"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_requires" >&5 -$as_echo "$ax_create_pkgconfig_requires" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig ext libs" >&5 -$as_echo_n "checking our pkgconfig ext libs... " >&6; } -ax_create_pkgconfig_pkglibs="$PACKAGE_LIBS" -test ".$ax_create_pkgconfig_pkglibs" != "." || ax_create_pkgconfig_pkglibs="-l$ax_create_pkgconfig_libname" -ax_create_pkgconfig_libs="$ax_create_pkgconfig_pkglibs $LIBS" -ax_create_pkgconfig_libs=`eval echo "$ax_create_pkgconfig_libs"` -ax_create_pkgconfig_libs=`eval echo "$ax_create_pkgconfig_libs"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_libs" >&5 -$as_echo "$ax_create_pkgconfig_libs" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig cppflags" >&5 -$as_echo_n "checking our pkgconfig cppflags... " >&6; } -ax_create_pkgconfig_cppflags="$CPPFLAGS $PACKAGE_CFLAGS" -ax_create_pkgconfig_cppflags=`eval echo "$ax_create_pkgconfig_cppflags"` -ax_create_pkgconfig_cppflags=`eval echo "$ax_create_pkgconfig_cppflags"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_cppflags" >&5 -$as_echo "$ax_create_pkgconfig_cppflags" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig ldflags" >&5 -$as_echo_n "checking our pkgconfig ldflags... " >&6; } -ax_create_pkgconfig_ldflags="$LDFLAGS $PACKAGE_LDFLAGS" -ax_create_pkgconfig_ldflags=`eval echo "$ax_create_pkgconfig_ldflags"` -ax_create_pkgconfig_ldflags=`eval echo "$ax_create_pkgconfig_ldflags"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_ldflags" >&5 -$as_echo "$ax_create_pkgconfig_ldflags" >&6; } - -test ".$ax_create_pkgconfig_generate" != "." || \ -ax_create_pkgconfig_generate="$ax_create_pkgconfig_libname.pc" -ax_create_pkgconfig_generate=`eval echo "$ax_create_pkgconfig_generate"` -ax_create_pkgconfig_generate=`eval echo "$ax_create_pkgconfig_generate"` -test "$pkgconfig_libfile" != "$ax_create_pkgconfig_generate" && ( -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: generate the pkgconfig later... $ax_create_pkgconfig_generate" >&5 -$as_echo "generate the pkgconfig later... $ax_create_pkgconfig_generate" >&6; }) - -if test ".$ax_create_pkgconfig_src_libdir" = "." ; then -ax_create_pkgconfig_src_libdir=`pwd` -ax_create_pkgconfig_src_libdir=`$as_dirname -- "$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" || -$as_expr X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(//\)[^/]' \| \ - X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(//\)$' \| \ - X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` -test ! -d $ax_create_pkgconfig_src_libdir/src || \ -ax_create_pkgconfig_src_libdir="$ax_create_pkgconfig_src_libdir/src" -case ".$objdir" in -*libs) ax_create_pkgconfig_src_libdir="$ax_create_pkgconfig_src_libdir/$objdir" ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: noninstalled pkgconfig -L $ax_create_pkgconfig_src_libdir" >&5 -$as_echo "noninstalled pkgconfig -L $ax_create_pkgconfig_src_libdir" >&6; } -fi - -if test ".$ax_create_pkgconfig_src_headers" = "." ; then -ax_create_pkgconfig_src_headers=`pwd` -v="$ac_top_srcdir" ; -test ".$v" != "." || v="$ax_spec_dir" -test ".$v" != "." || v="$srcdir" -case "$v" in /*) ax_create_pkgconfig_src_headers="" ;; esac -ax_create_pkgconfig_src_headers=`$as_dirname -- "$ax_create_pkgconfig_src_headers/$v/x" || -$as_expr X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(//\)[^/]' \| \ - X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(//\)$' \| \ - X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ax_create_pkgconfig_src_headers/$v/x" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` -test ! -d $ax_create_pkgconfig_src_headers/include || \ -ax_create_pkgconfig_src_headers="$ax_create_pkgconfig_src_headers/include" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: noninstalled pkgconfig -I $ax_create_pkgconfig_src_headers" >&5 -$as_echo "noninstalled pkgconfig -I $ax_create_pkgconfig_src_headers" >&6; } -fi - - -ac_config_commands="$ac_config_commands $ax_create_pkgconfig_generate" - - - - - - - if test -f $srcdir/.git/HEAD; then - GIT_HEAD="$srcdir/.git/index" - GIT_REPO="$srcdir/.git" - GIT_HEAD_ID=`GIT_DIR=$GIT_REPO git describe` - elif test -f $srcdir/GIT_HEAD_ID; then - GIT_HEAD_ID=`cat $srcdir/GIT_HEAD_ID` - else - mysrcdir=`(cd $srcdir; pwd)` - head=`basename $mysrcdir | sed -e 's/.*-//'` - head2=`echo $head | sed -e 's/^0-9a-f//'` - head3=`echo $head2 | sed -e 's/........................................//'` - if test "x$head3" = "x" -a "x$head" = "x$head2"; then - GIT_HEAD_ID="$head" - else - GIT_HEAD_ID="UNKNOWN" - fi - fi - if test -z "$GIT_REPO" ; then - GIT_HEAD_VERSION="$GIT_HEAD_ID" - else - GIT_HEAD_VERSION="\`GIT_DIR=$GIT_REPO git describe\`" - fi - -echo '#define GIT_HEAD_ID "'$GIT_HEAD_ID'"' > gitversion.h - - -ac_config_headers="$ac_config_headers isl_config.h" - -ac_config_headers="$ac_config_headers include/isl/config.h" - -ac_config_files="$ac_config_files Makefile" - -ac_config_files="$ac_config_files doc/Makefile" - -ac_config_files="$ac_config_files bound_test.sh" - -ac_config_files="$ac_config_files pip_test.sh" - - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${GENERATE_DOC_TRUE}" && test -z "${GENERATE_DOC_FALSE}"; then - as_fn_error "conditional \"GENERATE_DOC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${NEED_GET_MEMORY_FUNCTIONS_TRUE}" && test -z "${NEED_GET_MEMORY_FUNCTIONS_FALSE}"; then - as_fn_error "conditional \"NEED_GET_MEMORY_FUNCTIONS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${HAVE_PIPLIB_TRUE}" && test -z "${HAVE_PIPLIB_FALSE}"; then - as_fn_error "conditional \"HAVE_PIPLIB\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by isl $as_me 0.07, which was -generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -isl config.status 0.07 -configured by $0, generated by GNU Autoconf 2.65, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2009 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' -macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' -enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' -enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' -pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' -SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' -ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' -host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' -host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' -host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' -build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' -build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' -build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' -SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' -Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' -GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' -EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' -FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' -LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' -NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' -LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' -ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' -exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' -lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' -reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' -AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' -STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' -RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' -lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' -CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' -compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' -GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' -objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' -need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' -LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' -OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' -libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' -module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' -fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' -need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' -version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' -runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' -libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' -soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' -install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' -finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' -old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' -striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in SHELL \ -ECHO \ -SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -AR \ -AR_FLAGS \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_wl \ -lt_prog_compiler_pic \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ -hardcode_libdir_separator \ -fix_srcfile_path \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -install_override_mode \ -finish_eval \ -old_striplib \ -striplib; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - -# variables for create stdint.h replacement -PACKAGE="$PACKAGE" -VERSION="$VERSION" -ac_stdint_h="$ac_stdint_h" -_ac_stdint_h=`$as_echo "_$PACKAGE-$ac_stdint_h" | $as_tr_cpp` -ac_cv_stdint_message="$ac_cv_stdint_message" -ac_cv_header_stdint_t="$ac_cv_header_stdint_t" -ac_cv_header_stdint_x="$ac_cv_header_stdint_x" -ac_cv_header_stdint_o="$ac_cv_header_stdint_o" -ac_cv_header_stdint_u="$ac_cv_header_stdint_u" -ac_cv_type_uint64_t="$ac_cv_type_uint64_t" -ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t" -ac_cv_char_data_model="$ac_cv_char_data_model" -ac_cv_long_data_model="$ac_cv_long_data_model" -ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t" -ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t" -ac_cv_type_intmax_t="$ac_cv_type_intmax_t" - - -ax_create_pkgconfig_generate="$ax_create_pkgconfig_generate" -pkgconfig_prefix='$prefix' -pkgconfig_execprefix='$exec_prefix' -pkgconfig_bindir='$bindir' -pkgconfig_libdir='$libdir' -pkgconfig_includedir='$includedir' -pkgconfig_datarootdir='$datarootdir' -pkgconfig_datadir='$datadir' -pkgconfig_sysconfdir='$sysconfdir' -pkgconfig_suffix='$ax_create_pkgconfig_suffix' -pkgconfig_package='$PACKAGE_NAME' -pkgconfig_libname='$ax_create_pkgconfig_libname' -pkgconfig_description='$ax_create_pkgconfig_description' -pkgconfig_version='$ax_create_pkgconfig_version' -pkgconfig_requires='$ax_create_pkgconfig_requires' -pkgconfig_libs='$ax_create_pkgconfig_libs' -pkgconfig_ldflags='$ax_create_pkgconfig_ldflags' -pkgconfig_cppflags='$ax_create_pkgconfig_cppflags' -pkgconfig_src_libdir='$ax_create_pkgconfig_src_libdir' -pkgconfig_src_headers='$ax_create_pkgconfig_src_headers' - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "$ac_stdint_h") CONFIG_COMMANDS="$CONFIG_COMMANDS $ac_stdint_h" ;; - "$ax_create_pkgconfig_generate") CONFIG_COMMANDS="$CONFIG_COMMANDS $ax_create_pkgconfig_generate" ;; - "isl_config.h") CONFIG_HEADERS="$CONFIG_HEADERS isl_config.h" ;; - "include/isl/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/isl/config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "bound_test.sh") CONFIG_FILES="$CONFIG_FILES bound_test.sh" ;; - "pip_test.sh") CONFIG_FILES="$CONFIG_FILES pip_test.sh" ;; - - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_t=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_t"; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="" - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that protects backslashes. -ECHO=$lt_ECHO - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=$lock_old_archive_extraction - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Permission mode override for installation of shared libraries. -install_override_mode=$lt_install_override_mode - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac - - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - ;; - "$ac_stdint_h":C) -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_stdint_h : $_ac_stdint_h" >&5 -$as_echo "$as_me: creating $ac_stdint_h : $_ac_stdint_h" >&6;} -ac_stdint=$tmp/_stdint.h - -echo "#ifndef" $_ac_stdint_h >$ac_stdint -echo "#define" $_ac_stdint_h "1" >>$ac_stdint -echo "#ifndef" _GENERATED_STDINT_H >>$ac_stdint -echo "#define" _GENERATED_STDINT_H '"'$PACKAGE $VERSION'"' >>$ac_stdint -echo "/* generated $ac_cv_stdint_message */" >>$ac_stdint -if test "_$ac_cv_header_stdint_t" != "_" ; then -echo "#define _STDINT_HAVE_STDINT_H" "1" >>$ac_stdint -echo "#include " >>$ac_stdint -echo "#endif" >>$ac_stdint -echo "#endif" >>$ac_stdint -else - -cat >>$ac_stdint < -#else -#include - -/* .................... configured part ............................ */ - -STDINT_EOF - -echo "/* whether we have a C99 compatible stdint header file */" >>$ac_stdint -if test "_$ac_cv_header_stdint_x" != "_" ; then - ac_header="$ac_cv_header_stdint_x" - echo "#define _STDINT_HEADER_INTPTR" '"'"$ac_header"'"' >>$ac_stdint -else - echo "/* #undef _STDINT_HEADER_INTPTR */" >>$ac_stdint -fi - -echo "/* whether we have a C96 compatible inttypes header file */" >>$ac_stdint -if test "_$ac_cv_header_stdint_o" != "_" ; then - ac_header="$ac_cv_header_stdint_o" - echo "#define _STDINT_HEADER_UINT32" '"'"$ac_header"'"' >>$ac_stdint -else - echo "/* #undef _STDINT_HEADER_UINT32 */" >>$ac_stdint -fi - -echo "/* whether we have a BSD compatible inet types header */" >>$ac_stdint -if test "_$ac_cv_header_stdint_u" != "_" ; then - ac_header="$ac_cv_header_stdint_u" - echo "#define _STDINT_HEADER_U_INT32" '"'"$ac_header"'"' >>$ac_stdint -else - echo "/* #undef _STDINT_HEADER_U_INT32 */" >>$ac_stdint -fi - -echo "" >>$ac_stdint - -if test "_$ac_header" != "_" ; then if test "$ac_header" != "stddef.h" ; then - echo "#include <$ac_header>" >>$ac_stdint - echo "" >>$ac_stdint -fi fi - -echo "/* which 64bit typedef has been found */" >>$ac_stdint -if test "$ac_cv_type_uint64_t" = "yes" ; then -echo "#define _STDINT_HAVE_UINT64_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_UINT64_T */" >>$ac_stdint -fi -if test "$ac_cv_type_u_int64_t" = "yes" ; then -echo "#define _STDINT_HAVE_U_INT64_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_U_INT64_T */" >>$ac_stdint -fi -echo "" >>$ac_stdint - -echo "/* which type model has been detected */" >>$ac_stdint -if test "_$ac_cv_char_data_model" != "_" ; then -echo "#define _STDINT_CHAR_MODEL" "$ac_cv_char_data_model" >>$ac_stdint -echo "#define _STDINT_LONG_MODEL" "$ac_cv_long_data_model" >>$ac_stdint -else -echo "/* #undef _STDINT_CHAR_MODEL // skipped */" >>$ac_stdint -echo "/* #undef _STDINT_LONG_MODEL // skipped */" >>$ac_stdint -fi -echo "" >>$ac_stdint - -echo "/* whether int_least types were detected */" >>$ac_stdint -if test "$ac_cv_type_int_least32_t" = "yes"; then -echo "#define _STDINT_HAVE_INT_LEAST32_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_INT_LEAST32_T */" >>$ac_stdint -fi -echo "/* whether int_fast types were detected */" >>$ac_stdint -if test "$ac_cv_type_int_fast32_t" = "yes"; then -echo "#define _STDINT_HAVE_INT_FAST32_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_INT_FAST32_T */" >>$ac_stdint -fi -echo "/* whether intmax_t type was detected */" >>$ac_stdint -if test "$ac_cv_type_intmax_t" = "yes"; then -echo "#define _STDINT_HAVE_INTMAX_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_INTMAX_T */" >>$ac_stdint -fi -echo "" >>$ac_stdint - - cat >>$ac_stdint <= 199901L -#define _HAVE_UINT64_T -#define _HAVE_LONGLONG_UINT64_T -typedef long long int64_t; -typedef unsigned long long uint64_t; - -#elif !defined __STRICT_ANSI__ -#if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__ -#define _HAVE_UINT64_T -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; - -#elif defined __GNUC__ || defined __MWERKS__ || defined __ELF__ -/* note: all ELF-systems seem to have loff-support which needs 64-bit */ -#if !defined _NO_LONGLONG -#define _HAVE_UINT64_T -#define _HAVE_LONGLONG_UINT64_T -typedef long long int64_t; -typedef unsigned long long uint64_t; -#endif - -#elif defined __alpha || (defined __mips && defined _ABIN32) -#if !defined _NO_LONGLONG -typedef long int64_t; -typedef unsigned long uint64_t; -#endif - /* compiler/cpu type to define int64_t */ -#endif -#endif -#endif - -#if defined _STDINT_HAVE_U_INT_TYPES -/* int8_t int16_t int32_t defined by inet code, redeclare the u_intXX types */ -typedef u_int8_t uint8_t; -typedef u_int16_t uint16_t; -typedef u_int32_t uint32_t; - -/* glibc compatibility */ -#ifndef __int8_t_defined -#define __int8_t_defined -#endif -#endif - -#ifdef _STDINT_NEED_INT_MODEL_T -/* we must guess all the basic types. Apart from byte-adressable system, */ -/* there a few 32-bit-only dsp-systems that we guard with BYTE_MODEL 8-} */ -/* (btw, those nibble-addressable systems are way off, or so we assume) */ - - -#if defined _STDINT_BYTE_MODEL -#if _STDINT_LONG_MODEL+0 == 242 -/* 2:4:2 = IP16 = a normal 16-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned long uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef long int32_t; -#endif -#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL == 444 -/* 2:4:4 = LP32 = a 32-bit system derived from a 16-bit */ -/* 4:4:4 = ILP32 = a normal 32-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef int int32_t; -#endif -#elif _STDINT_LONG_MODEL+0 == 484 || _STDINT_LONG_MODEL+0 == 488 -/* 4:8:4 = IP32 = a 32-bit system prepared for 64-bit */ -/* 4:8:8 = LP64 = a normal 64-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef int int32_t; -#endif -/* this system has a "long" of 64bit */ -#ifndef _HAVE_UINT64_T -#define _HAVE_UINT64_T -typedef unsigned long uint64_t; -typedef long int64_t; -#endif -#elif _STDINT_LONG_MODEL+0 == 448 -/* LLP64 a 64-bit system derived from a 32-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef int int32_t; -#endif -/* assuming the system has a "long long" */ -#ifndef _HAVE_UINT64_T -#define _HAVE_UINT64_T -#define _HAVE_LONGLONG_UINT64_T -typedef unsigned long long uint64_t; -typedef long long int64_t; -#endif -#else -#define _STDINT_NO_INT32_T -#endif -#else -#define _STDINT_NO_INT8_T -#define _STDINT_NO_INT32_T -#endif -#endif - -/* - * quote from SunOS-5.8 sys/inttypes.h: - * Use at your own risk. As of February 1996, the committee is squarely - * behind the fixed sized types; the "least" and "fast" types are still being - * discussed. The probability that the "fast" types may be removed before - * the standard is finalized is high enough that they are not currently - * implemented. - */ - -#if defined _STDINT_NEED_INT_LEAST_T -typedef int8_t int_least8_t; -typedef int16_t int_least16_t; -typedef int32_t int_least32_t; -#ifdef _HAVE_UINT64_T -typedef int64_t int_least64_t; -#endif - -typedef uint8_t uint_least8_t; -typedef uint16_t uint_least16_t; -typedef uint32_t uint_least32_t; -#ifdef _HAVE_UINT64_T -typedef uint64_t uint_least64_t; -#endif - /* least types */ -#endif - -#if defined _STDINT_NEED_INT_FAST_T -typedef int8_t int_fast8_t; -typedef int int_fast16_t; -typedef int32_t int_fast32_t; -#ifdef _HAVE_UINT64_T -typedef int64_t int_fast64_t; -#endif - -typedef uint8_t uint_fast8_t; -typedef unsigned uint_fast16_t; -typedef uint32_t uint_fast32_t; -#ifdef _HAVE_UINT64_T -typedef uint64_t uint_fast64_t; -#endif - /* fast types */ -#endif - -#ifdef _STDINT_NEED_INTMAX_T -#ifdef _HAVE_UINT64_T -typedef int64_t intmax_t; -typedef uint64_t uintmax_t; -#else -typedef long intmax_t; -typedef unsigned long uintmax_t; -#endif -#endif - -#ifdef _STDINT_NEED_INTPTR_T -#ifndef __intptr_t_defined -#define __intptr_t_defined -/* we encourage using "long" to store pointer values, never use "int" ! */ -#if _STDINT_LONG_MODEL+0 == 242 || _STDINT_LONG_MODEL+0 == 484 -typedef unsigned int uintptr_t; -typedef int intptr_t; -#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL+0 == 444 -typedef unsigned long uintptr_t; -typedef long intptr_t; -#elif _STDINT_LONG_MODEL+0 == 448 && defined _HAVE_UINT64_T -typedef uint64_t uintptr_t; -typedef int64_t intptr_t; -#else /* matches typical system types ILP32 and LP64 - but not IP16 or LLP64 */ -typedef unsigned long uintptr_t; -typedef long intptr_t; -#endif -#endif -#endif - -/* The ISO C99 standard specifies that in C++ implementations these - should only be defined if explicitly requested. */ -#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS -#ifndef UINT32_C - -/* Signed. */ -# define INT8_C(c) c -# define INT16_C(c) c -# define INT32_C(c) c -# ifdef _HAVE_LONGLONG_UINT64_T -# define INT64_C(c) c ## L -# else -# define INT64_C(c) c ## LL -# endif - -/* Unsigned. */ -# define UINT8_C(c) c ## U -# define UINT16_C(c) c ## U -# define UINT32_C(c) c ## U -# ifdef _HAVE_LONGLONG_UINT64_T -# define UINT64_C(c) c ## UL -# else -# define UINT64_C(c) c ## ULL -# endif - -/* Maximal type. */ -# ifdef _HAVE_LONGLONG_UINT64_T -# define INTMAX_C(c) c ## L -# define UINTMAX_C(c) c ## UL -# else -# define INTMAX_C(c) c ## LL -# define UINTMAX_C(c) c ## ULL -# endif - - /* literalnumbers */ -#endif -#endif - -/* These limits are merily those of a two complement byte-oriented system */ - -/* Minimum of signed integral types. */ -# define INT8_MIN (-128) -# define INT16_MIN (-32767-1) -# define INT32_MIN (-2147483647-1) -#ifndef INT64_MIN -# define INT64_MIN (-__INT64_C(9223372036854775807)-1) -#endif -/* Maximum of signed integral types. */ -# define INT8_MAX (127) -# define INT16_MAX (32767) -# define INT32_MAX (2147483647) -#ifndef INT64_MAX -# define INT64_MAX (__INT64_C(9223372036854775807)) -#endif - -/* Maximum of unsigned integral types. */ -#ifndef UINT8_MAX -# define UINT8_MAX (255) -#endif -#ifndef UINT16_MAX -# define UINT16_MAX (65535) -#endif -# define UINT32_MAX (4294967295U) -#ifndef UINT64_MAX -# define UINT64_MAX (__UINT64_C(18446744073709551615)) -#endif - -/* Minimum of signed integral types having a minimum size. */ -# define INT_LEAST8_MIN INT8_MIN -# define INT_LEAST16_MIN INT16_MIN -# define INT_LEAST32_MIN INT32_MIN -# define INT_LEAST64_MIN INT64_MIN -/* Maximum of signed integral types having a minimum size. */ -# define INT_LEAST8_MAX INT8_MAX -# define INT_LEAST16_MAX INT16_MAX -# define INT_LEAST32_MAX INT32_MAX -# define INT_LEAST64_MAX INT64_MAX - -/* Maximum of unsigned integral types having a minimum size. */ -# define UINT_LEAST8_MAX UINT8_MAX -# define UINT_LEAST16_MAX UINT16_MAX -# define UINT_LEAST32_MAX UINT32_MAX -# define UINT_LEAST64_MAX UINT64_MAX - - /* shortcircuit*/ -#endif - /* once */ -#endif -#endif -STDINT_EOF -fi - if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_stdint_h is unchanged" >&5 -$as_echo "$as_me: $ac_stdint_h is unchanged" >&6;} - else - ac_dir=`$as_dirname -- "$ac_stdint_h" || -$as_expr X"$ac_stdint_h" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_stdint_h" : 'X\(//\)[^/]' \| \ - X"$ac_stdint_h" : 'X\(//\)$' \| \ - X"$ac_stdint_h" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_stdint_h" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - rm -f $ac_stdint_h - mv $ac_stdint $ac_stdint_h - fi - ;; - "$ax_create_pkgconfig_generate":C) -pkgconfig_generate="$ax_create_pkgconfig_generate" -if test ! -f "$pkgconfig_generate.in" -then generate="true" -elif grep ' generated by configure ' $pkgconfig_generate.in >/dev/null -then generate="true" -else generate="false"; -fi -if $generate ; then -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $pkgconfig_generate.in" >&5 -$as_echo "$as_me: creating $pkgconfig_generate.in" >&6;} -cat > $pkgconfig_generate.in <&5 -$as_echo "$as_me: creating $pkgconfig_generate" >&6;} -cat >conftest.sed < $pkgconfig_generate -if test ! -s $pkgconfig_generate ; then - as_fn_error "$pkgconfig_generate is empty" "$LINENO" 5 -fi ; rm conftest.sed # DONE generate $pkgconfig_generate -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.pc/'` -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $pkgconfig_uninstalled" >&5 -$as_echo "$as_me: creating $pkgconfig_uninstalled" >&6;} -cat >conftest.sed < $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - as_fn_error "$pkgconfig_uninstalled is empty" "$LINENO" 5 -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled - pkgconfig_requires_add=`echo ${pkgconfig_requires}` -if test ".$pkgconfig_requires_add" != "." ; then - pkgconfig_requires_add="pkg-config $pkgconfig_requires_add" - else pkgconfig_requires_add=":" ; fi -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.sh/'` -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $pkgconfig_uninstalled" >&5 -$as_echo "$as_me: creating $pkgconfig_uninstalled" >&6;} -cat >conftest.sed <Name:>for option\\; do case \"\$option\" in --list-all|--name) echo > -s>Description: *>\\;\\; --help) pkg-config --help \\; echo Buildscript Of > -s>Version: *>\\;\\; --modversion|--version) echo > -s>Requires:>\\;\\; --requires) echo $pkgconfig_requires_add> -s>Libs: *>\\;\\; --libs) echo > -s>Cflags: *>\\;\\; --cflags) echo > -/--libs)/a\\ - $pkgconfig_requires_add -/--cflags)/a\\ - $pkgconfig_requires_add\\ -;; --variable=*) eval echo '\$'\`echo \$option | sed -e 's/.*=//'\`\\ -;; --uninstalled) exit 0 \\ -;; *) ;; esac done -AXEOF -sed -f conftest.sed $pkgconfig_generate.in > $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - as_fn_error "$pkgconfig_uninstalled is empty" "$LINENO" 5 -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled - ;; - "bound_test.sh":F) chmod +x bound_test.sh ;; - "pip_test.sh":F) chmod +x pip_test.sh ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - - ac_configure_args="$ac_configure_args $isl_configure_args" - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit $? -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/cloog-0.16.3/isl/configure.ac b/cloog-0.16.3/isl/configure.ac deleted file mode 100644 index 8df2cbe..0000000 --- a/cloog-0.16.3/isl/configure.ac +++ /dev/null @@ -1,112 +0,0 @@ -AC_INIT([isl], [0.07], [isl-development@googlegroups.com]) -AC_CONFIG_AUX_DIR([.]) -AC_CONFIG_MACRO_DIR([m4]) -AM_INIT_AUTOMAKE([foreign]) -m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) -AC_SUBST(versioninfo) -versioninfo=7:0:0 - -AC_PROG_CC - -AX_CC_MAXOPT -AX_GCC_WARN_UNUSED_RESULT -AX_C___ATTRIBUTE__ - -AC_PROG_LIBTOOL - -AC_CHECK_PROG(PERL, perl, perl, []) -AC_CHECK_PROG(PDFLATEX, pdflatex, pdflatex, []) -AC_CHECK_PROG(POD2HTML, pod2html, pod2html, []) - -AM_CONDITIONAL(GENERATE_DOC, test -n "$PERL" -a -n "$PDFLATEX" -a -n "$POD2HTML") - -AX_CREATE_STDINT_H(include/isl/stdint.h) - -AX_SUBMODULE(gmp,system,system) - -AC_SUBST(GMP_CPPFLAGS) -AC_SUBST(GMP_LDFLAGS) -if test "x$with_gmp_prefix" != "x"; then - isl_configure_args="$isl_configure_args --with-gmp=$with_gmp_prefix" - GMP_CPPFLAGS="-I$with_gmp_prefix/include" - GMP_LDFLAGS="-L$with_gmp_prefix/lib" -fi -SAVE_CPPFLAGS="$CPPFLAGS" -CPPFLAGS="$GMP_CPPFLAGS $CPPFLAGS" -need_get_memory_functions=false -AC_CHECK_DECLS(mp_get_memory_functions,[],[ - need_get_memory_functions=true -],[#include ]) -CPPFLAGS="$SAVE_CPPFLAGS" -AM_CONDITIONAL(NEED_GET_MEMORY_FUNCTIONS, test x$need_get_memory_functions = xtrue) -AC_CHECK_DECLS(ffs,[],[],[#include ]) -AC_CHECK_DECLS(__builtin_ffs,[],[],[]) - -AX_SUBMODULE(piplib,no|system|build,no) - -have_piplib=false -AC_SUBST(PIPLIB_CPPFLAGS) -AC_SUBST(PIPLIB_LDFLAGS) -AC_SUBST(PIPLIB_LIBS) -case "$with_piplib" in - build) - PIPLIB_CPPFLAGS="-I$piplib_srcdir/include" - PIPLIB_LIBS="$with_piplib_builddir/libpiplibMP.la" - ;; - system) - PIPLIB_LIBS="-lpiplibMP" - if test "x$with_piplib_prefix" != "x"; then - PIPLIB_CPPFLAGS="-I$with_piplib_prefix/include" - PIPLIB_LDFLAGS="-L$with_piplib_prefix/lib" - fi - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$PIPLIB_CPPFLAGS $CPPFLAGS" - LDFLAGS="$PIPLIB_LDFLAGS $LDFLAGS" - AC_CHECK_LIB(piplibMP, pip_solve,[ - AC_CHECK_MEMBER(PipOptions.Urs_parms, [], [ - AC_MSG_ERROR([Piplib too old; please install version 1.3.6 or newer]) - ],[#include ]) - ],[ - AC_MSG_ERROR([Piplib not found]) - ]) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" - ;; - no) - ;; - *) - AC_MSG_ERROR(unsupported) - ;; -esac -if test "$with_piplib" != "no"; then - AC_DEFINE(ISL_PIPLIB,,piplib is available) - have_piplib=true -fi -AM_CONDITIONAL(HAVE_PIPLIB, test x$have_piplib = xtrue) - -AX_SET_WARNING_FLAGS - -AC_SUBST(WARNING_FLAGS) - -PACKAGE_CFLAGS="$GMP_CPPFLAGS" -PACKAGE_LDFLAGS="$GMP_LDFLAGS" -PACKAGE_LIBS="-lisl -lgmp" -AX_CREATE_PKGCONFIG_INFO - -AX_DETECT_GIT_HEAD -echo '#define GIT_HEAD_ID "'$GIT_HEAD_ID'"' > gitversion.h - -AH_BOTTOM([#include ]) -AC_CONFIG_HEADERS(isl_config.h) -AC_CONFIG_HEADERS(include/isl/config.h) -AC_CONFIG_FILES(Makefile) -AC_CONFIG_FILES(doc/Makefile) -AC_CONFIG_FILES([bound_test.sh], [chmod +x bound_test.sh]) -AC_CONFIG_FILES([pip_test.sh], [chmod +x pip_test.sh]) -AC_CONFIG_COMMANDS_POST([ - dnl pass on arguments to subdir configures, but don't - dnl add them to config.status - ac_configure_args="$ac_configure_args $isl_configure_args" -]) -AC_OUTPUT diff --git a/cloog-0.16.3/isl/depcomp b/cloog-0.16.3/isl/depcomp deleted file mode 100755 index e5f9736..0000000 --- a/cloog-0.16.3/isl/depcomp +++ /dev/null @@ -1,589 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2007-03-29.01 - -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software -# Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by `PROGRAMS ARGS'. - object Object file output by `PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputing dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory -## that the space means something, we add a space to the output as -## well. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the - # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> $depfile - echo >> $depfile - - # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> $depfile - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # 'foo.d', which lands next to the object file, wherever that - # happens to be. - # Much of this is similar to the tru64 case; see comments there. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" - # Add `dependent.h:' lines. - sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" "$tmpdepfile2" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mechanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. - "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no - for arg in "$@"; do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix="`echo $object | sed 's/^.*\././'`" - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. - "$@" || exit $? - IFS=" " - for arg - do - case "$arg" in - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/cloog-0.16.3/isl/doc/Makefile.am b/cloog-0.16.3/isl/doc/Makefile.am deleted file mode 100644 index aa79a6c..0000000 --- a/cloog-0.16.3/isl/doc/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ -if GENERATE_DOC -export TEXINPUTS := $(srcdir):$(TEXINPUTS) -export BIBINPUTS := $(srcdir):$(BIBINPUTS) -export BSTINPUTS := $(srcdir):$(BSTINPUTS) - -user.tex: user.pod - $(PERL) $(srcdir)/mypod2latex $< $@ -manual.pdf: manual.tex user.tex $(srcdir)/implementation.tex - (cd ..; echo "@GIT_HEAD_VERSION@") > version.tex - $(PDFLATEX) $< - bibtex manual - $(PDFLATEX) $< - $(PDFLATEX) $< -user.html: user.pod - (cd ..; echo "@GIT_HEAD_VERSION@") > version - $(POD2HTML) --infile=$< --outfile=$@ --title="Integer Set Library: Manual [version `cat version`]" -endif diff --git a/cloog-0.16.3/isl/doc/Makefile.in b/cloog-0.16.3/isl/doc/Makefile.in deleted file mode 100644 index 72da0fc..0000000 --- a/cloog-0.16.3/isl/doc/Makefile.in +++ /dev/null @@ -1,399 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = doc -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_c___attribute__.m4 \ - $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ - $(top_srcdir)/m4/ax_create_stdint_h.m4 \ - $(top_srcdir)/m4/ax_detect_git_head.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_warn_unused_result.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/ax_set_warning_flags.m4 \ - $(top_srcdir)/m4/ax_submodule.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/isl_config.h \ - $(top_builddir)/include/isl/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIT_HEAD = @GIT_HEAD@ -GIT_HEAD_ID = @GIT_HEAD_ID@ -GIT_HEAD_VERSION = @GIT_HEAD_VERSION@ -GMP_CPPFLAGS = @GMP_CPPFLAGS@ -GMP_LDFLAGS = @GMP_LDFLAGS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PDFLATEX = @PDFLATEX@ -PERL = @PERL@ -PIPLIB_CPPFLAGS = @PIPLIB_CPPFLAGS@ -PIPLIB_LDFLAGS = @PIPLIB_LDFLAGS@ -PIPLIB_LIBS = @PIPLIB_LIBS@ -POD2HTML = @POD2HTML@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -WARNING_FLAGS = @WARNING_FLAGS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfig_libdir = @pkgconfig_libdir@ -pkgconfig_libfile = @pkgconfig_libfile@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -versioninfo = @versioninfo@ -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign doc/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - -@GENERATE_DOC_TRUE@export TEXINPUTS := $(srcdir):$(TEXINPUTS) -@GENERATE_DOC_TRUE@export BIBINPUTS := $(srcdir):$(BIBINPUTS) -@GENERATE_DOC_TRUE@export BSTINPUTS := $(srcdir):$(BSTINPUTS) - -@GENERATE_DOC_TRUE@user.tex: user.pod -@GENERATE_DOC_TRUE@ $(PERL) $(srcdir)/mypod2latex $< $@ -@GENERATE_DOC_TRUE@manual.pdf: manual.tex user.tex $(srcdir)/implementation.tex -@GENERATE_DOC_TRUE@ (cd ..; echo "@GIT_HEAD_VERSION@") > version.tex -@GENERATE_DOC_TRUE@ $(PDFLATEX) $< -@GENERATE_DOC_TRUE@ bibtex manual -@GENERATE_DOC_TRUE@ $(PDFLATEX) $< -@GENERATE_DOC_TRUE@ $(PDFLATEX) $< -@GENERATE_DOC_TRUE@user.html: user.pod -@GENERATE_DOC_TRUE@ (cd ..; echo "@GIT_HEAD_VERSION@") > version -@GENERATE_DOC_TRUE@ $(POD2HTML) --infile=$< --outfile=$@ --title="Integer Set Library: Manual [version `cat version`]" - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.16.3/isl/doc/chicago.bst b/cloog-0.16.3/isl/doc/chicago.bst deleted file mode 100644 index ba05833..0000000 --- a/cloog-0.16.3/isl/doc/chicago.bst +++ /dev/null @@ -1,1726 +0,0 @@ -%%% ==================================================================== -%%% @BibTeX-style-file{ -%%% author = "Glenn Paulley", -%%% version = "4", -%%% date = "28 August 1992", -%%% time = "10:23:39 199", -%%% filename = "chicago.bst", -%%% address = "Data Structuring Group -%%% Department of Computer Science -%%% University of Waterloo -%%% Waterloo, Ontario, Canada -%%% N2L 3G1", -%%% telephone = "(519) 885-1211", -%%% FAX = "(519) 885-1208", -%%% checksum = "26323 1654 5143 37417", -%%% email = "gnpaulle@bluebox.uwaterloo.ca", -%%% codetable = "ISO/ASCII", -%%% keywords = "", -%%% supported = "yes", -%%% abstract = "A BibTeX bibliography style that follows the -%%% `B' reference style of the 13th Edition of -%%% the Chicago Manual of Style. A detailed -%%% feature list is given below.", -%%% docstring = "The checksum field above contains a CRC-16 -%%% checksum as the first value, followed by the -%%% equivalent of the standard UNIX wc (word -%%% count) utility output of lines, words, and -%%% characters. This is produced by Robert -%%% Solovay's checksum utility.", -%%% } -%%% ==================================================================== -% -% "Chicago" BibTeX style, chicago.bst -% =================================== -% -% BibTeX `chicago' style file for BibTeX version 0.99c, LaTeX version 2.09 -% Place it in a file called chicago.bst in the BibTeX search path. -% You need to include chicago.sty as a \documentstyle option. -% (Placing it in the same directory as the LaTeX document should also work.) -% This "chicago" style is based on newapa.bst (American Psych. Assoc.) -% found at ymir.claremont.edu. -% -% Citation format: (author-last-name year) -% (author-last-name and author-last-name year) -% (author-last-name, author-last-name, and author-last-name year) -% (author-last-name et al. year) -% (author-last-name) -% author-last-name (year) -% (author-last-name and author-last-name) -% (author-last-name et al.) -% (year) or (year,year) -% year or year,year -% -% Reference list ordering: alphabetical by author or whatever passes -% for author in the absence of one. -% -% This BibTeX style has support for abbreviated author lists and for -% year-only citations. This is done by having the citations -% actually look like -% -% \citeauthoryear{full-author-info}{abbrev-author-info}{year} -% -% The LaTeX style has to have the following (or similar) -% -% \let\@internalcite\cite -% \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite} -% \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite} -% \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite} -% \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite} -% \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite} -% -% These TeX macro definitions are found in chicago.sty. Additional -% commands to manipulate different components of a citation can be defined -% so that, for example, you can list author's names without parentheses -% if using a citation as a noun or object in a sentence. -% -% This file was originally copied from newapa.bst at ymir.claremont.edu. -% -% Features of chicago.bst: -% ======================= -% -% - full names used in citations, but abbreviated citations are available -% (see above) -% - if an entry has a "month", then the month and year are also printed -% as part of that bibitem. -% - all conjunctions use "and" instead of "\&" -% - major modification from Chicago Manual of Style (13th ed.) is that -% only the first author in a reference appears last name first- -% additional authors appear as J. Q. Public. -% - pages are listed as "pp. xx-xx" in all entry types except -% article entries. -% - book, inbook, and manual use "location: publisher" (or organization) -% for address and publisher. All other types list publishers separately. -% - "pp." are used to identify page numbers for all entry types except -% articles. -% - organization is used as a citation label if neither author nor editor -% is present (for manuals). -% - "et al." is used for long author and editor lists, or when "others" -% is used. -% -% Modifications and bug fixes from newapa.bst: -% =========================================== -% -% - added month, year to bib entries if month is present -% - fixed bug with In proceedings, added necessary comma after title -% - all conjunctions changed to "and" from "\&" -% - fixed bug with author labels in my.full.label: "et al." now is -% generated when "others" is an author name -% - major modification from Chicago Manual of Style (13th ed.) is that -% only the first author in a reference appears last name first- -% additional authors appear as J. Q. Public. -% - pages are listed as "pp. xx-xx" in all entry types except -% article entries. Unnecessary (IMHO) "()" around page numbers -% were removed, and page numbers now don't end with a period. -% - created chicago.sty for use with this bibstyle (required). -% - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume, -% number, and /or pages. Renamed to format.jour.vol. -% - fixed bug in formatting booktitles: additional period an error if -% book has a volume. -% - fixed bug: editors usually given redundant period before next clause -% (format.editors.dot) removed. -% - added label support for organizations, if both author and editor -% are missing (from alpha.bst). If organization is too long, then -% the key field is used for abbreviated citations. -% - In proceedings or books of several volumes, no comma was written -% between the "Volume x" and the page numbers (this was intentional -% in newapa.bst). Fixed. -% - Some journals may not have volumes/numbers, only month/year (eg. -% IEEE Computer). Fixed bug in article style that assumed volume/number -% was always present. -% -% Original documentation for newapa.sty: -% ===================================== -% -% This version was made by modifying the master file made by -% Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU), and the 'named' BibTeX -% style of Peter F. Patel-Schneider. -% -% Copyright (C) 1985, all rights reserved. -% Copying of this file is authorized only if either -% (1) you make absolutely no changes to your copy, including name, or -% (2) if you do make changes, you name it something other than 'newapa.bst'. -% There are undoubtably bugs in this style. If you make bug fixes, -% improvements, etc. please let me know. My e-mail address is: -% spencer@cgrg.ohio.state.edu or 71160.3141@compuserve.com -% -% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst', -% with lots of tweaking to make it look like APA style, along with tips -% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'. - -ENTRY - { address - author - booktitle - chapter - edition - editor - fjournal - howpublished - institution - journal - key - month - note - number - organization - pages - publisher - school - series - title - type - volume - year - } - {} - { label.year extra.label sort.year sort.label } - -INTEGERS { output.state before.all mid.sentence after.sentence after.block } - -FUNCTION {init.state.consts} -{ #0 'before.all := - #1 'mid.sentence := - #2 'after.sentence := - #3 'after.block := -} - -STRINGS { s t u } - -FUNCTION {output.nonnull} -{ 's := - output.state mid.sentence = - { ", " * write$ } - { output.state after.block = - { add.period$ write$ - newline$ - "\newblock " write$ - } - { output.state before.all = - 'write$ - { add.period$ " " * write$ } - if$ - } - if$ - mid.sentence 'output.state := - } - if$ - s -} - -% Use a colon to separate output. Used only for address/publisher -% combination in book/inbook types, address/institution for manuals, -% and organization:publisher for proceedings (inproceedings). -% -FUNCTION {output.nonnull.colon} -{ 's := - output.state mid.sentence = - { ": " * write$ } - { output.state after.block = - { add.period$ write$ - newline$ - "\newblock " write$ - } - { output.state before.all = - 'write$ - { add.period$ " " * write$ } - if$ - } - if$ - mid.sentence 'output.state := - } - if$ - s -} - -FUNCTION {output} -{ duplicate$ empty$ - 'pop$ - 'output.nonnull - if$ -} - -FUNCTION {output.colon} -{ duplicate$ empty$ - 'pop$ - 'output.nonnull.colon - if$ -} - -FUNCTION {output.check} -{ 't := - duplicate$ empty$ - { pop$ "empty " t * " in " * cite$ * warning$ } - 'output.nonnull - if$ -} - -FUNCTION {output.check.colon} -{ 't := - duplicate$ empty$ - { pop$ "empty " t * " in " * cite$ * warning$ } - 'output.nonnull.colon - if$ -} - -FUNCTION {output.year.check} -{ year empty$ - { "empty year in " cite$ * warning$ } - { write$ - " (" year * extra.label * - month empty$ - { ")" * } - { ", " * month * ")" * } - if$ - mid.sentence 'output.state := - } - if$ -} - - -FUNCTION {fin.entry} -{ add.period$ - write$ - newline$ -} - -FUNCTION {new.block} -{ output.state before.all = - 'skip$ - { after.block 'output.state := } - if$ -} - -FUNCTION {new.sentence} -{ output.state after.block = - 'skip$ - { output.state before.all = - 'skip$ - { after.sentence 'output.state := } - if$ - } - if$ -} - -FUNCTION {not} -{ { #0 } - { #1 } - if$ -} - -FUNCTION {and} -{ 'skip$ - { pop$ #0 } - if$ -} - -FUNCTION {or} -{ { pop$ #1 } - 'skip$ - if$ -} - -FUNCTION {new.block.checka} -{ empty$ - 'skip$ - 'new.block - if$ -} - -FUNCTION {new.block.checkb} -{ empty$ - swap$ empty$ - and - 'skip$ - 'new.block - if$ -} - -FUNCTION {new.sentence.checka} -{ empty$ - 'skip$ - 'new.sentence - if$ -} - -FUNCTION {new.sentence.checkb} -{ empty$ - swap$ empty$ - and - 'skip$ - 'new.sentence - if$ -} - -FUNCTION {field.or.null} -{ duplicate$ empty$ - { pop$ "" } - 'skip$ - if$ -} - -% -% Emphasize the top string on the stack. -% -FUNCTION {emphasize} -{ duplicate$ empty$ - { pop$ "" } - { "{\em " swap$ * "}" * } - if$ -} - -% -% Emphasize the top string on the stack, but add a trailing space. -% -FUNCTION {emphasize.space} -{ duplicate$ empty$ - { pop$ "" } - { "{\em " swap$ * "\/}" * } - if$ -} - -INTEGERS { nameptr namesleft numnames } -% -% Format bibliographical entries with the first author last name first, -% and subsequent authors with initials followed by last name. -% All names are formatted in this routine. -% -FUNCTION {format.names} -{ 's := - #1 'nameptr := % nameptr = 1; - s num.names$ 'numnames := % numnames = num.name$(s); - numnames 'namesleft := - { namesleft #0 > } - - { nameptr #1 = - {s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := } - {s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := } - if$ - nameptr #1 > - { namesleft #1 > - { ", " * t * } - { numnames #2 > - { "," * } - 'skip$ - if$ - t "others" = - { " et~al." * } - { " and " * t * } % from Chicago Manual of Style - if$ - } - if$ - } - 't - if$ - s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := - "\protect \index {" * t * "|hyperemph}" * - nameptr #1 + 'nameptr := % nameptr += 1; - namesleft #1 - 'namesleft := % namesleft =- 1; - } - while$ -} - -FUNCTION {my.full.label} -{ 's := - #1 'nameptr := % nameptr = 1; - s num.names$ 'numnames := % numnames = num.name$(s); - numnames 'namesleft := - { namesleft #0 > } - - { s nameptr "{vv~}{ll}" format.name$ 't := % get the next name - nameptr #1 > - { namesleft #1 > - { ", " * t * } - { numnames #2 > - { "," * } - 'skip$ - if$ - t "others" = - { " et~al." * } - { " and " * t * } % from Chicago Manual of Style - if$ - } - if$ - } - 't - if$ - s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := - "\protect \index {" * t * "|bold}" * - nameptr #1 + 'nameptr := % nameptr += 1; - namesleft #1 - 'namesleft := % namesleft =- 1; - } - while$ - -} - -FUNCTION {format.names.fml} -% -% Format names in "familiar" format, with first initial followed by -% last name. Like format.names, ALL names are formatted. -% -{ 's := - #1 'nameptr := % nameptr = 1; - s num.names$ 'numnames := % numnames = num.name$(s); - numnames 'namesleft := - { namesleft #0 > } - - { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := - - nameptr #1 > - { namesleft #1 > - { ", " * t * } - { numnames #2 > - { "," * } - 'skip$ - if$ - t "others" = - { " et~al." * } - { " and " * t * } -% { " \& " * t * } - if$ - } - if$ - } - 't - if$ - nameptr #1 + 'nameptr := % nameptr += 1; - namesleft #1 - 'namesleft := % namesleft =- 1; - } - while$ -} - -FUNCTION {format.authors} -{ author empty$ - { "" } - { author format.names } - if$ -} - -FUNCTION {format.key} -{ empty$ - { key field.or.null } - { "" } - if$ -} - -% -% Format editor names for use in the "in" types: inbook, incollection, -% inproceedings: first initial, then last names. When editors are the -% LABEL for an entry, then format.editor is used which lists editors -% by last name first. -% -FUNCTION {format.editors.fml} -{ editor empty$ - { "" } - { editor format.names.fml - editor num.names$ #1 > - { " (Eds.)" * } - { " (Ed.)" * } - if$ - } - if$ -} - -% -% Format editor names for use in labels, last names first. -% -FUNCTION {format.editors} -{ editor empty$ - { "" } - { editor format.names - editor num.names$ #1 > - { " (Eds.)" * } - { " (Ed.)" * } - if$ - } - if$ -} - -FUNCTION {format.title} -{ title empty$ - { "" } - { title "t" change.case$ } - if$ -} - -% Note that the APA style requres case changes -% in article titles. The following does not -% change cases. If you perfer it, uncomment the -% following and comment out the above. - -%FUNCTION {format.title} -%{ title empty$ -% { "" } -% { title } -% if$ -%} - -FUNCTION {n.dashify} -{ 't := - "" - { t empty$ not } - { t #1 #1 substring$ "-" = - { t #1 #2 substring$ "--" = not - { "--" * - t #2 global.max$ substring$ 't := - } - { { t #1 #1 substring$ "-" = } - { "-" * - t #2 global.max$ substring$ 't := - } - while$ - } - if$ - } - { t #1 #1 substring$ * - t #2 global.max$ substring$ 't := - } - if$ - } - while$ -} - -FUNCTION {format.btitle} -{ edition empty$ - { title emphasize } - { title empty$ - { title emphasize } - { volume empty$ % gnp - check for volume, then don't need period - { "{\em " title * "\/} (" * edition * " ed.)" * "." * } - { "{\em " title * "\/} (" * edition * " ed.)" * } - if$ - } - if$ - } - if$ -} - -FUNCTION {format.emphasize.booktitle} -{ edition empty$ - { booktitle emphasize } - { booktitle empty$ - { booktitle emphasize } - { volume empty$ % gnp - extra period an error if book has a volume - { "{\em " booktitle * "\/} (" * edition * " ed.)" * "." *} - { "{\em " booktitle * "\/} (" * edition * " ed.)" * } - if$ - } - if$ - } - if$ - } - - -FUNCTION {tie.or.space.connect} -{ duplicate$ text.length$ #3 < - { "~" } - { " " } - if$ - swap$ * * -} - -FUNCTION {either.or.check} -{ empty$ - 'pop$ - { "can't use both " swap$ * " fields in " * cite$ * warning$ } - if$ -} - -FUNCTION {format.bvolume} -{ volume empty$ - { "" } - { "Volume" volume tie.or.space.connect % gnp - changed to mixed case - series empty$ - 'skip$ - { " of " * series emphasize * } - if$ - "volume and number" number either.or.check - } - if$ -} - -FUNCTION {format.number.series} -{ volume empty$ - { number empty$ - { series field.or.null } - { output.state mid.sentence = - { "Number" } % gnp - changed to mixed case always - { "Number" } - if$ - number tie.or.space.connect - series empty$ - { "there's a number but no series in " cite$ * warning$ } - { " in " * series * } - if$ - } - if$ - } - { "" } - if$ -} - -INTEGERS { multiresult } - -FUNCTION {multi.page.check} -{ 't := - #0 'multiresult := - { multiresult not - t empty$ not - and - } - { t #1 #1 substring$ - duplicate$ "-" = - swap$ duplicate$ "," = - swap$ "+" = - or or - { #1 'multiresult := } - { t #2 global.max$ substring$ 't := } - if$ - } - while$ - multiresult -} - -FUNCTION {format.pages} -{ pages empty$ - { "" } - { pages multi.page.check - { "pp.\ " pages n.dashify tie.or.space.connect } % gnp - removed () - { "pp.\ " pages tie.or.space.connect } - if$ - } - if$ -} - -% By Young (and Spencer) -% GNP - fixed bugs with missing volume, number, and/or pages -% -% Format journal, volume, number, pages for article types. -% -FUNCTION {format.jour.vol} -{ fjournal empty$ - { journal empty$ - { "no journal in " cite$ * warning$ - "" } - { journal emphasize.space } - if$ - } - { fjournal emphasize.space } - if$ - number empty$ - { volume empty$ - { "no number and no volume in " cite$ * warning$ - "" * } - { "~{\em " * Volume * "}" * } - if$ - } - { volume empty$ - {"no volume for " cite$ * warning$ - "~(" * number * ")" * } - { "~" * - volume emphasize.space - "(" * number * ")" * * } - if$ - } - if$ - pages empty$ - {"page numbers missing in " cite$ * warning$ - "" * } % gnp - place a null string on the stack for output - { duplicate$ empty$ - { pop$ format.pages } - { ", " * pages n.dashify * } % gnp - removed pp. for articles - if$ - } - if$ -} - -FUNCTION {format.chapter.pages} -{ chapter empty$ - 'format.pages - { type empty$ - { "Chapter" } % gnp - changed to mixed case - { type "t" change.case$ } - if$ - chapter tie.or.space.connect - pages empty$ - {"page numbers missing in " cite$ * warning$} % gnp - added check - { ", " * format.pages * } - if$ - } - if$ -} - -FUNCTION {format.in.ed.booktitle} -{ booktitle empty$ - { "" } - { editor empty$ - { "In " format.emphasize.booktitle * } - { "In " format.editors.fml * ", " * format.emphasize.booktitle * } - if$ - } - if$ -} - -FUNCTION {format.thesis.type} -{ type empty$ - 'skip$ - { pop$ - type "t" change.case$ - } - if$ -} - -FUNCTION {format.tr.number} -{ type empty$ - { "Technical Report" } - 'type - if$ - number empty$ - { "t" change.case$ } - { number tie.or.space.connect } - if$ -} - -FUNCTION {format.article.crossref} -{ "See" - "\citeN{" * crossref * "}" * -} - -FUNCTION {format.crossref.editor} -{ editor #1 "{vv~}{ll}" format.name$ - editor num.names$ duplicate$ - #2 > - { pop$ " et~al." * } - { #2 < - 'skip$ - { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = - { " et~al." * } - { " and " * editor #2 "{vv~}{ll}" format.name$ * } - if$ - } - if$ - } - if$ -} - -FUNCTION {format.book.crossref} -{ volume empty$ - { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ - "In " - } - { "Volume" volume tie.or.space.connect % gnp - changed to mixed case - " of " * - } - if$ - editor empty$ - editor field.or.null author field.or.null = - or - { key empty$ - { series empty$ - { "need editor, key, or series for " cite$ * " to crossref " * - crossref * warning$ - "" * - } - { "{\em " * series * "\/}" * } - if$ - } - { key * } - if$ - } - { format.crossref.editor * } - if$ - " \citeN{" * crossref * "}" * -} - -FUNCTION {format.incoll.inproc.crossref} -{ "See" - " \citeN{" * crossref * "}" * -} - -% format.lab.names: -% -% determines "short" names for the abbreviated author information. -% "Long" labels are created in calc.label, using the routine my.full.label -% to format author and editor fields. -% -% There are 4 cases for labels. (n=3 in the example) -% a) one author Foo -% b) one to n Foo, Bar and Baz -% c) use of "and others" Foo, Bar et al. -% d) more than n Foo et al. -% -FUNCTION {format.lab.names} -{ 's := - s num.names$ 'numnames := - numnames #2 > % change number to number of others allowed before - % forcing "et al". - { s #1 "{vv~}{ll}" format.name$ - "\protect \index {" * - s #1 "{vv~}{ll}{, jj}{, f.}" format.name$ * - "}" * - "\protect\chicagoetal/" * } - { - numnames #1 - 'namesleft := - #2 'nameptr := - s #1 "{vv~}{ll}" format.name$ - "\protect \index {" * - s #1 "{vv~}{ll}{, jj}{, f.}" format.name$ * - "}" * - { namesleft #0 > } - { nameptr numnames = - { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = - { "\protect\chicagoetal/" * } - { "\protect\chicagoand/" * s nameptr "{vv~}{ll}" format.name$ * - "\protect \index {" * - s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ * - "}" * - } - if$ - } - { ", " * s nameptr "{vv~}{ll}" format.name$ * } - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ - } - if$ -} - -FUNCTION {author.key.label} -{ author empty$ - { key empty$ - { "no key, author in " cite$ * warning$ - cite$ #1 #3 substring$ } - 'key - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {editor.key.label} -{ editor empty$ - { key empty$ - { "no key, editor in " cite$ * warning$ - cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.lab.names } - if$ -} - -FUNCTION {author.key.organization.label} -% -% added - gnp. Provide label formatting by organization if author is null. -% -{ author empty$ - { organization empty$ - { key empty$ - { "no key, author or organization in " cite$ * warning$ - cite$ #1 #3 substring$ } - 'key - if$ - } - { organization } - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {editor.key.organization.label} -% -% added - gnp. Provide label formatting by organization if editor is null. -% -{ editor empty$ - { organization empty$ - { key empty$ - { "no key, editor or organization in " cite$ * warning$ - cite$ #1 #3 substring$ } - 'key - if$ - } - { organization } - if$ - } - { editor format.lab.names } - if$ -} - -FUNCTION {author.editor.key.label} -{ author empty$ - { editor empty$ - { key empty$ - { "no key, author, or editor in " cite$ * warning$ - cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.lab.names } - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {calc.label.orig} -% -% Changed - GNP. See also author.organization.sort, editor.organization.sort -% Form label for BibTeX entry. The classification of which fields are used -% for which type of entry (book, inbook, etc.) are taken from alpha.bst. -% The change here from newapa is to also include organization as a -% citation label if author or editor is missing. -% -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.key.label - { type$ "proceedings" = - 'editor.key.organization.label - { type$ "manual" = - 'author.key.organization.label - 'author.key.label - if$ - } - if$ - } - if$ - - author empty$ % generate the full label citation information. - { editor empty$ - { organization empty$ - { "no author, editor, or organization in " cite$ * warning$ - "??" } - { organization } - if$ - } - { editor my.full.label } - if$ - } - { author.key.label } - if$ - -% leave label on the stack, to be popped when required. - - "}{" * swap$ * -% year field.or.null purify$ #-1 #4 substring$ * -% -% save the year for sort processing afterwards (adding a, b, c, etc.) -% - year field.or.null purify$ #-1 #4 substring$ - 'label.year := -} - -FUNCTION {calc.label} -% -% Changed - GNP. See also author.organization.sort, editor.organization.sort -% Form label for BibTeX entry. The classification of which fields are used -% for which type of entry (book, inbook, etc.) are taken from alpha.bst. -% The change here from newapa is to also include organization as a -% citation label if author or editor is missing. -% -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.key.label - { type$ "proceedings" = - 'editor.key.organization.label - { type$ "manual" = - 'author.key.organization.label - 'author.key.label - if$ - } - if$ - } - if$ - - author empty$ % generate the full label citation information. - { editor empty$ - { organization empty$ - { "no author, editor, or organization in " cite$ * warning$ - "??" } - { organization } - if$ - } - { editor my.full.label } - if$ - } - { author my.full.label } - if$ - -% leave label on the stack, to be popped when required. - - "}{" * swap$ * "}{" * title * "}{" * -% year field.or.null purify$ #-1 #4 substring$ * -% -% save the year for sort processing afterwards (adding a, b, c, etc.) -% - year field.or.null purify$ #-1 #4 substring$ - 'label.year := -} - -FUNCTION {output.bibitem} -{ newline$ - - "\bibitem[\protect\citeauthortitleyear{" write$ - calc.label write$ - sort.year write$ - "}]{" write$ - - cite$ write$ - "}" write$ - newline$ - "" - before.all 'output.state := -} - -FUNCTION {article} -{ output.bibitem - format.authors - "author" output.check - author format.key output % added - output.year.check % added - new.block - format.title - "title" output.check - new.block - crossref missing$ - { format.jour.vol output - } - { format.article.crossref output.nonnull - format.pages output - } - if$ - new.block - note output - fin.entry -} - -FUNCTION {book} -{ output.bibitem - author empty$ - { format.editors - "author and editor" output.check } - { format.authors - output.nonnull - crossref missing$ - { "author and editor" editor either.or.check } - 'skip$ - if$ - } - if$ - output.year.check % added - new.block - format.btitle - "title" output.check - crossref missing$ - { format.bvolume output - new.block - format.number.series output - new.sentence - address output - publisher "publisher" output.check.colon - } - { new.block - format.book.crossref output.nonnull - } - if$ - new.block - note output - fin.entry -} - -FUNCTION {booklet} -{ output.bibitem - format.authors output - author format.key output % added - output.year.check % added - new.block - format.title - "title" output.check - new.block - howpublished output - address output - new.block - note output - fin.entry -} - -FUNCTION {inbook} -{ output.bibitem - author empty$ - { format.editors - "author and editor" output.check - } - { format.authors output.nonnull - crossref missing$ - { "author and editor" editor either.or.check } - 'skip$ - if$ - } - if$ - output.year.check % added - new.block - format.btitle - "title" output.check - crossref missing$ - { format.bvolume output - format.chapter.pages - "chapter and pages" output.check - new.block - format.number.series output - new.sentence - address output - publisher - "publisher" output.check.colon - } - { format.chapter.pages "chapter and pages" output.check - new.block - format.book.crossref output.nonnull - } - if$ - new.block - note output - fin.entry -} - -FUNCTION {incollection} -{ output.bibitem - format.authors - "author" output.check - author format.key output % added - output.year.check % added - new.block - format.title - "title" output.check - new.block - crossref missing$ - { format.in.ed.booktitle - "booktitle" output.check - format.bvolume output - format.number.series output - format.chapter.pages output % gnp - was special.output.nonnull -% left out comma before page numbers - new.sentence - address output - publisher "publisher" output.check.colon - } - { format.incoll.inproc.crossref - output.nonnull - format.chapter.pages output - } - if$ - new.block - note output - fin.entry -} - -FUNCTION {inproceedings} -{ output.bibitem - format.authors - "author" output.check - author format.key output % added - output.year.check % added - new.block - format.title - "title" output.check - new.block - crossref missing$ - { format.in.ed.booktitle - "booktitle" output.check - format.bvolume output - format.number.series output - address output - format.pages output - new.sentence - organization output - publisher output.colon - } - { format.incoll.inproc.crossref output.nonnull - format.pages output - } - if$ - new.block - note output - fin.entry -} - -FUNCTION {conference} { inproceedings } - -FUNCTION {manual} -{ output.bibitem - author empty$ - { editor empty$ - { organization "organization" output.check - organization format.key output } % if all else fails, use key - { format.editors "author and editor" output.check } - if$ - } - { format.authors output.nonnull } - if$ - output.year.check % added - new.block - format.btitle - "title" output.check - organization address new.block.checkb -% Reversed the order of "address" and "organization", added the ":". - address output - organization "organization" output.check.colon -% address output -% ":" output -% organization output - new.block - note output - fin.entry -} - -FUNCTION {mastersthesis} -{ output.bibitem - format.authors - "author" output.check - author format.key output % added - output.year.check % added - new.block - format.title - "title" output.check - new.block - "Master's thesis" format.thesis.type output.nonnull - school "school" output.check - address output - new.block - note output - fin.entry -} - -FUNCTION {misc} -{ output.bibitem - format.authors output - author format.key output % added - output.year.check % added - title howpublished new.block.checkb - format.title output - new.block - howpublished output - new.block - note output - fin.entry -} - -FUNCTION {phdthesis} -{ output.bibitem - format.authors - "author" output.check - author format.key output % added - output.year.check % added - new.block - format.btitle - "title" output.check - new.block - "Ph.\ D. thesis" format.thesis.type output.nonnull - school "school" output.check - address output - new.block - note output - fin.entry -} - -FUNCTION {proceedings} -{ output.bibitem - editor empty$ - { organization output - organization format.key output } % gnp - changed from author format.key - { format.editors output.nonnull } - if$ -% author format.key output % gnp - removed (should be either -% editor or organization - output.year.check % added (newapa) - new.block - format.btitle - "title" output.check - format.bvolume output - format.number.series output - address output - new.sentence - organization output - publisher output.colon - new.block - note output - fin.entry -} - -FUNCTION {techreport} -{ output.bibitem - format.authors - "author" output.check - author format.key output % added - output.year.check % added - new.block - format.title - "title" output.check - new.block - format.tr.number output.nonnull - institution - "institution" output.check - address output - new.block - note output - fin.entry -} - -FUNCTION {unpublished} -{ output.bibitem - format.authors - "author" output.check - author format.key output % added - output.year.check % added - new.block - format.title - "title" output.check - new.block - note "note" output.check - fin.entry -} - -FUNCTION {default.type} { misc } - -MACRO {jan} {"January"} - -MACRO {feb} {"February"} - -MACRO {mar} {"March"} - -MACRO {apr} {"April"} - -MACRO {may} {"May"} - -MACRO {jun} {"June"} - -MACRO {jul} {"July"} - -MACRO {aug} {"August"} - -MACRO {sep} {"September"} - -MACRO {oct} {"October"} - -MACRO {nov} {"November"} - -MACRO {dec} {"December"} - -MACRO {acmcs} {"ACM Computing Surveys"} - -MACRO {acta} {"Acta Informatica"} - -MACRO {ai} {"Artificial Intelligence"} - -MACRO {cacm} {"Communications of the ACM"} - -MACRO {ibmjrd} {"IBM Journal of Research and Development"} - -MACRO {ibmsj} {"IBM Systems Journal"} - -MACRO {ieeese} {"IEEE Transactions on Software Engineering"} - -MACRO {ieeetc} {"IEEE Transactions on Computers"} - -MACRO {ieeetcad} - {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} - -MACRO {ipl} {"Information Processing Letters"} - -MACRO {jacm} {"Journal of the ACM"} - -MACRO {jcss} {"Journal of Computer and System Sciences"} - -MACRO {scp} {"Science of Computer Programming"} - -MACRO {sicomp} {"SIAM Journal on Computing"} - -MACRO {tocs} {"ACM Transactions on Computer Systems"} - -MACRO {tods} {"ACM Transactions on Database Systems"} - -MACRO {tog} {"ACM Transactions on Graphics"} - -MACRO {toms} {"ACM Transactions on Mathematical Software"} - -MACRO {toois} {"ACM Transactions on Office Information Systems"} - -MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} - -MACRO {tcs} {"Theoretical Computer Science"} - -READ - -FUNCTION {sortify} -{ purify$ - "l" change.case$ -} - -INTEGERS { len } - -FUNCTION {chop.word} -{ 's := - 'len := - s #1 len substring$ = - { s len #1 + global.max$ substring$ } - 's - if$ -} - - - -FUNCTION {sort.format.names} -{ 's := - #1 'nameptr := - "" - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { nameptr #2 = - { year field.or.null purify$ #-1 #4 substring$ * } - 'skip$ - if$ - nameptr #1 > - { " " * } - 'skip$ - if$ - s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := - nameptr numnames = t "others" = and - { " et~al" * } - { t sortify * } - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ -} - -FUNCTION {sort.format.title} -{ 't := - "A " #2 - "An " #3 - "The " #4 t chop.word - chop.word - chop.word - sortify - #1 global.max$ substring$ -} - -FUNCTION {author.sort} -{ author empty$ - { key empty$ - { "to sort, need author or key in " cite$ * warning$ - "" } - { key sortify } - if$ - } - { author sort.format.names } - if$ -} - -FUNCTION {editor.sort} -{ editor empty$ - { key empty$ - { "to sort, need editor or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { editor sort.format.names } - if$ -} - -FUNCTION {author.editor.sort} -{ author empty$ - { "missing author in " cite$ * warning$ - editor empty$ - { key empty$ - { "to sort, need author, editor, or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { editor sort.format.names } - if$ - } - { author sort.format.names } - if$ -} - -FUNCTION {author.organization.sort} -% -% added - GNP. Stack author or organization for sorting (from alpha.bst). -% Unlike alpha.bst, we need entire names, not abbreviations -% -{ author empty$ - { organization empty$ - { key empty$ - { "to sort, need author, organization, or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { organization sortify } - if$ - } - { author sort.format.names } - if$ -} - -FUNCTION {editor.organization.sort} -% -% added - GNP. Stack editor or organization for sorting (from alpha.bst). -% Unlike alpha.bst, we need entire names, not abbreviations -% -{ editor empty$ - { organization empty$ - { key empty$ - { "to sort, need editor, organization, or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { organization sortify } - if$ - } - { editor sort.format.names } - if$ -} - -FUNCTION {presort} -% -% Presort creates the bibentry's label via a call to calc.label, and then -% sorts the entries based on entry type. Chicago.bst adds support for -% including organizations as the sort key; the following is stolen from -% alpha.bst. -% -{ %calc.label sortify % recalculate bibitem label - %year field.or.null purify$ #-1 #4 substring$ * % add year - %duplicate$ warning$ - %" " - %* - type$ "book" = - type$ "inbook" = - or - 'author.editor.sort - { type$ "proceedings" = - 'editor.organization.sort - { type$ "manual" = - 'author.organization.sort - 'author.sort - if$ - } - if$ - } - if$ - #1 entry.max$ substring$ % added for newapa - 'sort.label := % added for newapa - sort.label % added for newapa - %* - " " - * - title field.or.null - sort.format.title - * - #1 entry.max$ substring$ - 'sort.key$ := -} - -ITERATE {presort} - -SORT % by label, year, author/editor, title - -STRINGS { last.label next.extra } - -INTEGERS { last.extra.num } - -FUNCTION {initialize.extra.label.stuff} -{ #0 int.to.chr$ 'last.label := - "" 'next.extra := - #0 'last.extra.num := -} - -FUNCTION {forward.pass} -% -% Pass through all entries, comparing current entry to last one. -% Need to concatenate year to the stack (done by calc.label) to determine -% if two entries are the same (see presort) -% -{ last.label - calc.label.orig year field.or.null purify$ #-1 #4 substring$ * % add year - #1 entry.max$ substring$ = % are they equal? - { last.extra.num #1 + 'last.extra.num := - last.extra.num int.to.chr$ 'extra.label := - } - { "a" chr.to.int$ 'last.extra.num := - "" 'extra.label := - calc.label.orig year field.or.null purify$ #-1 #4 substring$ * % add year - #1 entry.max$ substring$ 'last.label := % assign to last.label - } - if$ -} - -FUNCTION {reverse.pass} -{ next.extra "b" = - { "a" 'extra.label := } - 'skip$ - if$ - label.year extra.label * 'sort.year := - extra.label 'next.extra := -} - -EXECUTE {initialize.extra.label.stuff} - -ITERATE {forward.pass} - -REVERSE {reverse.pass} - -FUNCTION {bib.sort.order} -{ sort.label - " " - * - year field.or.null sortify - * - " " - * - title field.or.null - sort.format.title - * - #1 entry.max$ substring$ - 'sort.key$ := -} - -ITERATE {bib.sort.order} - -SORT % by sort.label, year, title --- giving final bib. order. - -FUNCTION {begin.bib} - -{ preamble$ empty$ - 'skip$ - { preamble$ write$ newline$ } - if$ - "\begin{thebibliography}{}" write$ newline$ -} - - -EXECUTE {begin.bib} - -EXECUTE {init.state.consts} - -ITERATE {call.type$} - -FUNCTION {end.bib} -{ newline$ - "\end{thebibliography}" write$ newline$ -} - -EXECUTE {end.bib} - diff --git a/cloog-0.16.3/isl/doc/chicago.sty b/cloog-0.16.3/isl/doc/chicago.sty deleted file mode 100644 index 33588db..0000000 --- a/cloog-0.16.3/isl/doc/chicago.sty +++ /dev/null @@ -1,320 +0,0 @@ -% -*- LaTeX -*- -%%% ==================================================================== -%%% @LaTeX-style-file{ -%%% author = "Glenn Paulley", -%%% version = "4", -%%% date = "31 August 1992", -%%% time = "09:42:44 199", -%%% filename = "chicago.sty", -%%% address = "Data Structuring Group -%%% Department of Computer Science -%%% University of Waterloo -%%% Waterloo, Ontario, Canada -%%% N2L 3G1", -%%% telephone = "(519) 885-1211", -%%% FAX = "(519) 885-1208", -%%% checksum = "44674 264 1050 10394", -%%% email = "gnpaulle@bluebox.uwaterloo.ca", -%%% codetable = "ISO/ASCII", -%%% keywords = "", -%%% supported = "yes", -%%% abstract = "Contains the LaTeX style command definitions -%%% for the Chicago BibTeX styles chicago.bst and -%%% chicagoa.bst. For details, see below.", -%%% docstring = "The checksum field above contains a CRC-16 -%%% checksum as the first value, followed by the -%%% equivalent of the standard UNIX wc (word -%%% count) utility output of lines, words, and -%%% characters. This is produced by Robert -%%% Solovay's checksum utility.", -%%% } -%%% ==================================================================== -% -% chicago.sty: Style file for use with bibtex style chicago.bst, for -% bibliographies formatted according to the 13th Edition of the Chicago -% Manual of Style. -% -% 'newapa.bst' was made from 'plain.bst', 'named.bst', and 'apalike.bst', -% with lots of tweaking to make it look like APA style, along with tips -% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'. -% newapa.sty formed the basis of this style, chicago.sty. Author-date -% references in newapa.bst formed the basis for chicago.bst. Chicagoa.bst -% supports annotations. -% -% Version 4 (August, 1992): -% - fixed chicago.bst and chicagoa.bst to handle long author lists in -% sorting -% - fixed chicago.bst and chicagoa.bst so that missing page numbers in -% ``article'' entries are handled correctly -% - modified chicago.sty to format entries with 2nd and subsequent lines -% indented. -% -% Citation format: (author-last-name year) -% (author-last-name and author-last-name year) -% (author-last-name et al. year) -% (author-last-name) -% author-last-name -% author-last-name (year) -% (author-last-name and author-last-name) -% (author-last-name et al.) -% (year) or (year,year) -% year or year,year -% -% Reference list ordering: alphabetical by author or whatever passes -% for author in the absence of one. -% -% This BibTeX style has support for abbreviated author lists and for -% year-only citations. This is done by having the citations -% actually look like -% -% \citeauthoryear{full-author-info}{abbrev-author-info}{year} -% -% The LaTeX style has to have the following (or similar) -% -% \let\@internalcite\cite -% \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite} -% \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite} -% \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite} -% \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite} -% \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite} -% -% ------------------------------------------------------------------------- -% This file implements citations for the ``chicago'' bibliography style. -% Place it in a file called chicago.sty in the TeX search path. -%(Placing it in the same directory as the LaTeX document should also work.) -% -% This file is a modification of the ``newapa'' LaTeX style, -% originally adapted by Steven Spencer from the ``apalike'' LaTeX style. -% It was originally modified by Stephen N. Spencer, with further -% modifications by Young U. Ryu. -% -% The ``chicago'' BibTeX bibliography style creates citations with labels: -% \citeauthoryear{author-info}{abbrev. author-info}{year} -% -% These labels are processed by the following LaTeX commands: -% -% \cite{key} -% which produces citations with full author list and year. -% eg. (Brown 1978; Jarke, Turner, Stohl, et al. 1985) -% \citeNP{key} -% which produces citations with full author list and year, but without -% enclosing parentheses: -% eg. Brown 1978; Jarke, Turner and Stohl 1985 -% \citeA{key} -% which produces citations with only the full author list. -% eg. (Brown; Jarke, Turner and Stohl) -% \citeANP{key} -% which produces citations with only the full author list, without -% parentheses eg. Brown; Jarke, Turner and Stohl -% \citeN{key} -% which produces citations with the full author list and year, but -% can be used as nouns in a sentence; no parentheses appear around -% the author names, but only around the year. -% eg. Shneiderman (1978) states that...... -% \citeN should only be used for a single citation. -% \shortcite{key} -% which produces citations with abbreviated author list and year. -% \shortciteNP{key} -% which produces citations with abbreviated author list and year. -% \shortciteA{key} -% which produces only the abbreviated author list. -% \shortciteANP{key} -% which produces only the abbreviated author list. -% \shortciteN{key} -% which produces the abbreviated author list and year, with only the -% year in parentheses. Use with only one citation. -% \citeyear{key} -% which produces the year information only, within parentheses. -% \citeyearNP{key} -% which produces the year information only. -% -% Abbreviated author lists use the ``et al.'' construct. -% -% `NP' means `no parentheses'. -% -% This LaTeX style file must be used with the ``chicago'' or ``chicagoa'' -% (annotated chicago style) BibTeX styles. -% -\typeout{Using Chicago Manual of Style bibliography: 31 August 1992} -% -% ------------------------------------------------------------------------- -% -% Citation macros. -% -\def\chicagoand/{ and } -\def\chicagoetal/{ et~al.} -% -\let\@internalcite\cite -% -\def\cite{\def\@citeseppen{-1000}% - \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}% - \def\citeauthortitleyear##1##2##3##4{##1\ ##4}\@internalcite} -\def\citeNP{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2\fi}% - \def\citeauthortitleyear##1##2##3##4{##1\ ##4}\@internalcite} -\def\citetitleN{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2)\else{)}\fi}% - \def\citeauthortitleyear##1##2##3##4{##3\ (##1; ##4}\@citedata} -\def\citeN{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2)\else{)}\fi}% - \def\citeauthortitleyear##1##2##3##4{##1\ (##4}\@citedata} -\def\citeA{\def\@citeseppen{-1000}% - \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}% - \def\citeauthortitleyear##1##2##3##4{##1}\@internalcite} -\def\citeANP{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2\fi}% - \def\citeauthortitleyear##1##2##3##4{##1}\@internalcite} -% -\def\shortcite{\def\@citeseppen{-1000}% - \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}% - \def\citeauthortitleyear##1##2##3##4{##2\ ##4}\@internalcite} -\def\shortciteNP{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2\fi}% - \def\citeauthortitleyear##1##2##3##4{##2\ ##4}\@internalcite} -\def\shortciteN{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2)\else{)}\fi}% - \def\citeauthortitleyear##1##2##3##4{##2\ (##4}\@citedata} -\def\shortciteA{\def\@citeseppen{-1000}% - \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}% - \def\citeauthortitleyear##1##2##3##4{##2}\@internalcite} -\def\shortciteANP{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2\fi}% - \def\citeauthortitleyear##1##2##3##4{##2}\@internalcite} -% -\def\citeyear{\def\@citeseppen{-1000}% - \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}% - \def\citeauthortitleyear##1##2##3##4{##4}\@citedata} -\def\citeyearNP{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2\fi}% - \def\citeauthortitleyear##1##2##3##4{##4}\@citedata} - -% -% \@citedata and \@citedatax: -% -% Place commas in-between citations in the same \citeyear, \citeyearNP, -% \citeN, or \shortciteN command. -% Use something like \citeN{ref1,ref2,ref3} and \citeN{ref4} for a list. -% -\def\@citedata{% - \@ifnextchar [{\@tempswatrue\@citedatax}% - {\@tempswafalse\@citedatax[]}% -} - -\def\@citedatax[#1]#2{% -\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi% - \def\@citea{}\@cite{\@for\@citeb:=#2\do% - {\@citea\def\@citea{), }\@ifundefined% by Young - {b@\@citeb}{{\bf ?}% - \@warning{Citation `\@citeb' on page \thepage \space undefined}}% -{\csname b@\@citeb\endcsname}}}{#1}}% - -\@ifpackageloaded{hyperref}{% - \let\BRorg@citedatax\@citedatax - \def\@citedatax[#1]#2{% - \BRorg@citedatax[#1]{#2}% - \Hy@backout{#2}% - }% -}{} -\@ifpackageloaded{hyperref}{% -\def\hyperemph#1{{\em\hyperpage{#1}}}% -\def\bold#1{{\bf\hyperpage{#1}}}% -}{% -\def\hyperemph#1{{\em #1}}% -\def\bold#1{{\bf #1}}% -} - -\def\BR@@lbibitem[#1]#2#3\par{% - \BRorg@bibitem[#1]{#2}#3\hfill\penalty100\hbox{} - \newblock - \backref\hfill[{\csname br@#2\endcsname}% - ]\parskip=-10pt\penalty-10000\hbox{}\nobreak\par -}% -\def\BR@@bibitem#1#2\par{% - \BRorg@bibitem{#1}#2 - \newblock - \backref\penalty-100\hbox{}\nobreak\hfill[\hbox{\csname br@#2\endcsname}% - ]\par -} -\def\thepageorcolor{\thepage} -\def\Hy@backout#1{% - \@bsphack - \ifx\@empty\@currentlabel - \protected@write\@auxout{}{% - \string\@writefile{brf}{% - \string\backcite{#1}{{\thepageorcolor}{(document)}{Doc-Start}}% - }% - }% - \else - \protected@write\@auxout{}{% - \string\@writefile{brf}{% - \string\backcite{#1}{{\thepageorcolor}{\@currentlabel}{\@currentHref}}% - }% - }% - \fi - \@esphack -} - -% don't box citations, separate with ; and a space -% also, make the penalty between citations negative: a good place to break. -% -\def\@citex[#1]#2{% -\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi% - \def\@citea{}\@cite{\@for\@citeb:=#2\do% - {\@citea\def\@citea{; }\@ifundefined% by Young - {b@\@citeb}{{\bf ?}% - \@warning{Citation `\@citeb' on page \thepage \space undefined}}% -{\csname b@\@citeb\endcsname}}}{#1}}% - -% (from apalike.sty) -% No labels in the bibliography. -% -\def\@biblabel#1{} - -% (from apalike.sty) -% Set length of hanging indentation for bibliography entries. -% -\newlength{\bibhang} -\setlength{\bibhang}{2em} - -% Indent second and subsequent lines of bibliographic entries. Stolen -% from openbib.sty: \newblock is set to {}. - -\newdimen\bibindent -\bibindent=1.5em -\@ifundefined{refname}% - {\@ifundefined{chapter}% - {\newcommand{\refname}{References}}% - {\newcommand{\refname}{Bibliography}}% - }% - {}% -\@ifundefined{chapter}% - {\def\thebibliography#1{\section*{\refname\@mkboth - {\uppercase{\refname}}{\uppercase{\refname}}} - \addcontentsline{toc}{section}{References} - \list - {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]} - \leftmargin\labelwidth - \advance\leftmargin\labelsep - \advance\leftmargin\bibindent - \itemindent -\bibindent - \listparindent \itemindent - \parsep \z@ - \usecounter{enumi}} - \def\newblock{} - \sloppy - \sfcode`\.=1000\relax}} - {\def\thebibliography#1{\chapter*{\refname\@mkboth - {\refname}{\refname}} - \addcontentsline{toc}{chapter}{References} - \list - {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]} - \leftmargin\labelwidth - \advance\leftmargin\labelsep - \advance\leftmargin\bibindent - \itemindent -\bibindent - \listparindent \itemindent - \parsep \z@ - \usecounter{enumi}} - \def\newblock{} - \sloppy - \sfcode`\.=1000\relax}} diff --git a/cloog-0.16.3/isl/doc/implementation.tex b/cloog-0.16.3/isl/doc/implementation.tex deleted file mode 100644 index d5ece80..0000000 --- a/cloog-0.16.3/isl/doc/implementation.tex +++ /dev/null @@ -1,2036 +0,0 @@ -\section{Sets and Relations} - -\begin{definition}[Polyhedral Set] -A {\em polyhedral set}\index{polyhedral set} $S$ is a finite union of basic sets -$S = \bigcup_i S_i$, each of which can be represented using affine -constraints -$$ -S_i : \Z^n \to 2^{\Z^d} : \vec s \mapsto -S_i(\vec s) = -\{\, \vec x \in \Z^d \mid \exists \vec z \in \Z^e : -A \vec x + B \vec s + D \vec z + \vec c \geq \vec 0 \,\} -, -$$ -with $A \in \Z^{m \times d}$, -$B \in \Z^{m \times n}$, -$D \in \Z^{m \times e}$ -and $\vec c \in \Z^m$. -\end{definition} - -\begin{definition}[Parameter Domain of a Set] -Let $S \in \Z^n \to 2^{\Z^d}$ be a set. -The {\em parameter domain} of $S$ is the set -$$\pdom S \coloneqq \{\, \vec s \in \Z^n \mid S(\vec s) \ne \emptyset \,\}.$$ -\end{definition} - -\begin{definition}[Polyhedral Relation] -A {\em polyhedral relation}\index{polyhedral relation} -$R$ is a finite union of basic relations -$R = \bigcup_i R_i$ of type -$\Z^n \to 2^{\Z^{d_1+d_2}}$, -each of which can be represented using affine -constraints -$$ -R_i = \vec s \mapsto -R_i(\vec s) = -\{\, \vec x_1 \to \vec x_2 \in \Z^{d_1} \times \Z^{d_2} -\mid \exists \vec z \in \Z^e : -A_1 \vec x_1 + A_2 \vec x_2 + B \vec s + D \vec z + \vec c \geq \vec 0 \,\} -, -$$ -with $A_i \in \Z^{m \times d_i}$, -$B \in \Z^{m \times n}$, -$D \in \Z^{m \times e}$ -and $\vec c \in \Z^m$. -\end{definition} - -\begin{definition}[Parameter Domain of a Relation] -Let $R \in \Z^n \to 2^{\Z^{d+d}}$ be a relation. -The {\em parameter domain} of $R$ is the set -$$\pdom R \coloneqq \{\, \vec s \in \Z^n \mid R(\vec s) \ne \emptyset \,\}.$$ -\end{definition} - -\begin{definition}[Domain of a Relation] -Let $R \in \Z^n \to 2^{\Z^{d+d}}$ be a relation. -The {\em domain} of $R$ is the polyhedral set -$$\domain R \coloneqq \vec s \mapsto -\{\, \vec x_1 \in \Z^{d_1} \mid \exists \vec x_2 \in \Z^{d_2} : -(\vec x_1, \vec x_2) \in R(\vec s) \,\} -. -$$ -\end{definition} - -\begin{definition}[Range of a Relation] -Let $R \in \Z^n \to 2^{\Z^{d+d}}$ be a relation. -The {\em range} of $R$ is the polyhedral set -$$ -\range R \coloneqq \vec s \mapsto -\{\, \vec x_2 \in \Z^{d_2} \mid \exists \vec x_1 \in \Z^{d_1} : -(\vec x_1, \vec x_2) \in R(\vec s) \,\} -. -$$ -\end{definition} - -\begin{definition}[Composition of Relations] -Let $R \in \Z^n \to 2^{\Z^{d_1+d_2}}$ and -$S \in \Z^n \to 2^{\Z^{d_2+d_3}}$ be two relations, -then the composition of -$R$ and $S$ is defined as -$$ -S \circ R \coloneqq -\vec s \mapsto -\{\, \vec x_1 \to \vec x_3 \in \Z^{d_1} \times \Z^{d_3} -\mid \exists \vec x_2 \in \Z^{d_2} : -\vec x_1 \to \vec x_2 \in R(\vec s) \wedge -\vec x_2 \to \vec x_3 \in S(\vec s) -\,\} -. -$$ -\end{definition} - -\begin{definition}[Difference Set of a Relation] -Let $R \in \Z^n \to 2^{\Z^{d+d}}$ be a relation. -The difference set ($\Delta \, R$) of $R$ is the set -of differences between image elements and the corresponding -domain elements, -$$ -\diff R \coloneqq -\vec s \mapsto -\{\, \vec \delta \in \Z^{d} \mid \exists \vec x \to \vec y \in R : -\vec \delta = \vec y - \vec x -\,\} -$$ -\end{definition} - -\section{Simple Hull}\label{s:simple hull} - -It is sometimes useful to have a single -basic set or basic relation that contains a given set or relation. -For rational sets, the obvious choice would be to compute the -(rational) convex hull. For integer sets, the obvious choice -would be the integer hull. -However, {\tt isl} currently does not support an integer hull operation -and even if it did, it would be fairly expensive to compute. -The convex hull operation is supported, but it is also fairly -expensive to compute given only an implicit representation. - -Usually, it is not required to compute the exact integer hull, -and an overapproximation of this hull is sufficient. -The ``simple hull'' of a set is such an overapproximation -and it is defined as the (inclusion-wise) smallest basic set -that is described by constraints that are translates of -the constraints in the input set. -This means that the simple hull is relatively cheap to compute -and that the number of constraints in the simple hull is no -larger than the number of constraints in the input. -\begin{definition}[Simple Hull of a Set] -The {\em simple hull} of a set -$S = \bigcup_{1 \le i \le v} S_i$, with -$$ -S : \Z^n \to 2^{\Z^d} : \vec s \mapsto -S(\vec s) = -\left\{\, \vec x \in \Z^d \mid \exists \vec z \in \Z^e : -\bigvee_{1 \le i \le v} -A_i \vec x + B_i \vec s + D_i \vec z + \vec c_i \geq \vec 0 \,\right\} -$$ -is the set -$$ -H : \Z^n \to 2^{\Z^d} : \vec s \mapsto -S(\vec s) = -\left\{\, \vec x \in \Z^d \mid \exists \vec z \in \Z^e : -\bigwedge_{1 \le i \le v} -A_i \vec x + B_i \vec s + D_i \vec z + \vec c_i + \vec K_i \geq \vec 0 -\,\right\} -, -$$ -with $\vec K_i$ the (component-wise) smallest non-negative integer vectors -such that $S \subseteq H$. -\end{definition} -The $\vec K_i$ can be obtained by solving a number of -LP problems, one for each element of each $\vec K_i$. -If any LP problem is unbounded, then the corresponding constraint -is dropped. - -\section{Parametric Integer Programming} - -\subsection{Introduction}\label{s:intro} - -Parametric integer programming \shortcite{Feautrier88parametric} -is used to solve many problems within the context of the polyhedral model. -Here, we are mainly interested in dependence analysis \shortcite{Fea91} -and in computing a unique representation for existentially quantified -variables. The latter operation has been used for counting elements -in sets involving such variables -\shortcite{BouletRe98,Verdoolaege2005experiences} and lies at the core -of the internal representation of {\tt isl}. - -Parametric integer programming was first implemented in \texttt{PipLib}. -An alternative method for parametric integer programming -was later implemented in {\tt barvinok} \cite{barvinok-0.22}. -This method is not based on Feautrier's algorithm, but on rational -generating functions \cite{Woods2003short} and was inspired by the -``digging'' technique of \shortciteN{DeLoera2004Three} for solving -non-parametric integer programming problems. - -In the following sections, we briefly recall the dual simplex -method combined with Gomory cuts and describe some extensions -and optimizations. The main algorithm is applied to a matrix -data structure known as a tableau. In case of parametric problems, -there are two tableaus, one for the main problem and one for -the constraints on the parameters, known as the context tableau. -The handling of the context tableau is described in \autoref{s:context}. - -\subsection{The Dual Simplex Method} - -Tableaus can be represented in several slightly different ways. -In {\tt isl}, the dual simplex method uses the same representation -as that used by its incremental LP solver based on the \emph{primal} -simplex method. The implementation of this LP solver is based -on that of {\tt Simplify} \shortcite{Detlefs2005simplify}, which, in turn, -was derived from the work of \shortciteN{Nelson1980phd}. -In the original \shortcite{Nelson1980phd}, the tableau was implemented -as a sparse matrix, but neither {\tt Simplify} nor the current -implementation of {\tt isl} does so. - -Given some affine constraints on the variables, -$A \vec x + \vec b \ge \vec 0$, the tableau represents the relationship -between the variables $\vec x$ and non-negative variables -$\vec y = A \vec x + \vec b$ corresponding to the constraints. -The initial tableau contains $\begin{pmatrix} -\vec b & A -\end{pmatrix}$ and expresses the constraints $\vec y$ in the rows in terms -of the variables $\vec x$ in the columns. The main operation defined -on a tableau exchanges a column and a row variable and is called a pivot. -During this process, some coefficients may become rational. -As in the \texttt{PipLib} implementation, -{\tt isl} maintains a shared denominator per row. -The sample value of a tableau is one where each column variable is assigned -zero and each row variable is assigned the constant term of the row. -This sample value represents a valid solution if each constraint variable -is assigned a non-negative value, i.e., if the constant terms of -rows corresponding to constraints are all non-negative. - -The dual simplex method starts from an initial sample value that -may be invalid, but that is known to be (lexicographically) no -greater than any solution, and gradually increments this sample value -through pivoting until a valid solution is obtained. -In particular, each pivot exchanges a row variable -$r = -n + \sum_i a_i \, c_i$ with negative -sample value $-n$ with a column variable $c_j$ -such that $a_j > 0$. Since $c_j = (n + r - \sum_{i\ne j} a_i \, c_i)/a_j$, -the new row variable will have a positive sample value $n$. -If no such column can be found, then the problem is infeasible. -By always choosing the column that leads to the (lexicographically) -smallest increment in the variables $\vec x$, -the first solution found is guaranteed to be the (lexicographically) -minimal solution \cite{Feautrier88parametric}. -In order to be able to determine the smallest increment, the tableau -is (implicitly) extended with extra rows defining the original -variables in terms of the column variables. -If we assume that all variables are non-negative, then we know -that the zero vector is no greater than the minimal solution and -then the initial extended tableau looks as follows. -$$ -\begin{tikzpicture} -\matrix (m) [matrix of math nodes] -{ -& {} & 1 & \vec c \\ -\vec x && |(top)| \vec 0 & I \\ -\vec r && \vec b & |(bottom)|A \\ -}; -\begin{pgfonlayer}{background} -\node (core) [inner sep=0pt,fill=black!20,right delimiter=),left delimiter=(,fit=(top)(bottom)] {}; -\end{pgfonlayer} -\end{tikzpicture} -$$ -Each column in this extended tableau is lexicographically positive -and will remain so because of the column choice explained above. -It is then clear that the value of $\vec x$ will increase in each step. -Note that there is no need to store the extra rows explicitly. -If a given $x_i$ is a column variable, then the corresponding row -is the unit vector $e_i$. If, on the other hand, it is a row variable, -then the row already appears somewhere else in the tableau. - -In case of parametric problems, the sign of the constant term -may depend on the parameters. Each time the constant term of a constraint row -changes, we therefore need to check whether the new term can attain -negative and/or positive values over the current set of possible -parameter values, i.e., the context. -If all these terms can only attain non-negative values, the current -state of the tableau represents a solution. If one of the terms -can only attain non-positive values and is not identically zero, -the corresponding row can be pivoted. -Otherwise, we pick one of the terms that can attain both positive -and negative values and split the context into a part where -it only attains non-negative values and a part where it only attains -negative values. - -\subsection{Gomory Cuts} - -The solution found by the dual simplex method may have -non-integral coordinates. If so, some rational solutions -(including the current sample value), can be cut off by -applying a (parametric) Gomory cut. -Let $r = b(\vec p) + \sp {\vec a} {\vec c}$ be the row -corresponding to the first non-integral coordinate of $\vec x$, -with $b(\vec p)$ the constant term, an affine expression in the -parameters $\vec p$, i.e., $b(\vec p) = \sp {\vec f} {\vec p} + g$. -Note that only row variables can attain -non-integral values as the sample value of the column variables is zero. -Consider the expression -$b(\vec p) - \ceil{b(\vec p)} + \sp {\fract{\vec a}} {\vec c}$, -with $\ceil\cdot$ the ceiling function and $\fract\cdot$ the -fractional part. This expression is negative at the sample value -since $\vec c = \vec 0$ and $r = b(\vec p)$ is fractional, i.e., -$\ceil{b(\vec p)} > b(\vec p)$. On the other hand, for each integral -value of $r$ and $\vec c \ge 0$, the expression is non-negative -because $b(\vec p) - \ceil{b(\vec p)} > -1$. -Imposing this expression to be non-negative therefore does not -invalidate any integral solutions, while it does cut away the current -fractional sample value. To be able to formulate this constraint, -a new variable $q = \floor{-b(\vec p)} = - \ceil{b(\vec p)}$ is added -to the context. This integral variable is uniquely defined by the constraints -$0 \le -d \, b(\vec p) - d \, q \le d - 1$, with $d$ the common -denominator of $\vec f$ and $g$. In practice, the variable -$q' = \floor{\sp {\fract{-f}} {\vec p} + \fract{-g}}$ is used instead -and the coefficients of the new constraint are adjusted accordingly. -The sign of the constant term of this new constraint need not be determined -as it is non-positive by construction. -When several of these extra context variables are added, it is important -to avoid adding duplicates. -Recent versions of {\tt PipLib} also check for such duplicates. - -\subsection{Negative Unknowns and Maximization} - -There are two places in the above algorithm where the unknowns $\vec x$ -are assumed to be non-negative: the initial tableau starts from -sample value $\vec x = \vec 0$ and $\vec c$ is assumed to be non-negative -during the construction of Gomory cuts. -To deal with negative unknowns, \shortciteN[Appendix A.2]{Fea91} -proposed to use a ``big parameter'', say $M$, that is taken to be -an arbitrarily large positive number. Instead of looking for the -lexicographically minimal value of $\vec x$, we search instead -for the lexicographically minimal value of $\vec x' = \vec M + \vec x$. -The sample value $\vec x' = \vec 0$ of the initial tableau then -corresponds to $\vec x = -\vec M$, which is clearly not greater than -any potential solution. The sign of the constant term of a row -is determined lexicographically, with the coefficient of $M$ considered -first. That is, if the coefficient of $M$ is not zero, then its sign -is the sign of the entire term. Otherwise, the sign is determined -by the remaining affine expression in the parameters. -If the original problem has a bounded optimum, then the final sample -value will be of the form $\vec M + \vec v$ and the optimal value -of the original problem is then $\vec v$. -Maximization problems can be handled in a similar way by computing -the minimum of $\vec M - \vec x$. - -When the optimum is unbounded, the optimal value computed for -the original problem will involve the big parameter. -In the original implementation of {\tt PipLib}, the big parameter could -even appear in some of the extra variables $\vec q$ created during -the application of a Gomory cut. The final result could then contain -implicit conditions on the big parameter through conditions on such -$\vec q$ variables. This problem was resolved in later versions -of {\tt PipLib} by taking $M$ to be divisible by any positive number. -The big parameter can then never appear in any $\vec q$ because -$\fract {\alpha M } = 0$. It should be noted, though, that an unbounded -problem usually (but not always) -indicates an incorrect formulation of the problem. - -The original version of {\tt PipLib} required the user to ``manually'' -add a big parameter, perform the reformulation and interpret the result -\shortcite{Feautrier02}. Recent versions allow the user to simply -specify that the unknowns may be negative or that the maximum should -be computed and then these transformations are performed internally. -Although there are some application, e.g., -that of \shortciteN{Feautrier92multi}, -where it is useful to have explicit control over the big parameter, -negative unknowns and maximization are by far the most common applications -of the big parameter and we believe that the user should not be bothered -with such implementation issues. -The current version of {\tt isl} therefore does not -provide any interface for specifying big parameters. Instead, the user -can specify whether a maximum needs to be computed and no assumptions -are made on the sign of the unknowns. Instead, the sign of the unknowns -is checked internally and a big parameter is automatically introduced when -needed. For compatibility with {\tt PipLib}, the {\tt isl\_pip} tool -does explicitly add non-negativity constraints on the unknowns unless -the \verb+Urs_unknowns+ option is specified. -Currently, there is also no way in {\tt isl} of expressing a big -parameter in the output. Even though -{\tt isl} makes the same divisibility assumption on the big parameter -as recent versions of {\tt PipLib}, it will therefore eventually -produce an error if the problem turns out to be unbounded. - -\subsection{Preprocessing} - -In this section, we describe some transformations that are -or can be applied in advance to reduce the running time -of the actual dual simplex method with Gomory cuts. - -\subsubsection{Feasibility Check and Detection of Equalities} - -Experience with the original {\tt PipLib} has shown that Gomory cuts -do not perform very well on problems that are (non-obviously) empty, -i.e., problems with rational solutions, but no integer solutions. -In {\tt isl}, we therefore first perform a feasibility check on -the original problem considered as a non-parametric problem -over the combined space of unknowns and parameters. -In fact, we do not simply check the feasibility, but we also -check for implicit equalities among the integer points by computing -the integer affine hull. The algorithm used is the same as that -described in \autoref{s:GBR} below. -Computing the affine hull is fairly expensive, but it can -bring huge benefits if any equalities can be found or if the problem -turns out to be empty. - -\subsubsection{Constraint Simplification} - -If the coefficients of the unknown and parameters in a constraint -have a common factor, then this factor should be removed, possibly -rounding down the constant term. For example, the constraint -$2 x - 5 \ge 0$ should be simplified to $x - 3 \ge 0$. -{\tt isl} performs such simplifications on all sets and relations. -Recent versions of {\tt PipLib} also perform this simplification -on the input. - -\subsubsection{Exploiting Equalities}\label{s:equalities} - -If there are any (explicit) equalities in the input description, -{\tt PipLib} converts each into a pair of inequalities. -It is also possible to write $r$ equalities as $r+1$ inequalities -\shortcite{Feautrier02}, but it is even better to \emph{exploit} the -equalities to reduce the dimensionality of the problem. -Given an equality involving at least one unknown, we pivot -the row corresponding to the equality with the column corresponding -to the last unknown with non-zero coefficient. The new column variable -can then be removed completely because it is identically zero, -thereby reducing the dimensionality of the problem by one. -The last unknown is chosen to ensure that the columns of the initial -tableau remain lexicographically positive. In particular, if -the equality is of the form $b + \sum_{i \le j} a_i \, x_i = 0$ with -$a_j \ne 0$, then the (implicit) top rows of the initial tableau -are changed as follows -$$ -\begin{tikzpicture} -\matrix [matrix of math nodes] -{ - & {} & |(top)| 0 & I_1 & |(j)| & \\ -j && 0 & & 1 & \\ - && 0 & & & |(bottom)|I_2 \\ -}; -\node[overlay,above=2mm of j,anchor=south]{j}; -\begin{pgfonlayer}{background} -\node (m) [inner sep=0pt,fill=black!20,right delimiter=),left delimiter=(,fit=(top)(bottom)] {}; -\end{pgfonlayer} -\begin{scope}[xshift=4cm] -\matrix [matrix of math nodes] -{ - & {} & |(top)| 0 & I_1 & \\ -j && |(left)| -b/a_j & -a_i/a_j & \\ - && 0 & & |(bottom)|I_2 \\ -}; -\begin{pgfonlayer}{background} -\node (m2) [inner sep=0pt,fill=black!20,right delimiter=),left delimiter=(,fit=(top)(bottom)(left)] {}; -\end{pgfonlayer} -\end{scope} - \draw [shorten >=7mm,-to,thick,decorate, - decoration={snake,amplitude=.4mm,segment length=2mm, - pre=moveto,pre length=5mm,post length=8mm}] - (m) -- (m2); -\end{tikzpicture} -$$ -Currently, {\tt isl} also eliminates equalities involving only parameters -in a similar way, provided at least one of the coefficients is equal to one. -The application of parameter compression (see below) -would obviate the need for removing parametric equalities. - -\subsubsection{Offline Symmetry Detection}\label{s:offline} - -Some problems, notably those of \shortciteN{Bygde2010licentiate}, -have a collection of constraints, say -$b_i(\vec p) + \sp {\vec a} {\vec x} \ge 0$, -that only differ in their (parametric) constant terms. -These constant terms will be non-negative on different parts -of the context and this context may have to be split for each -of the constraints. In the worst case, the basic algorithm may -have to consider all possible orderings of the constant terms. -Instead, {\tt isl} introduces a new parameter, say $u$, and -replaces the collection of constraints by the single -constraint $u + \sp {\vec a} {\vec x} \ge 0$ along with -context constraints $u \le b_i(\vec p)$. -Any solution to the new system is also a solution -to the original system since -$\sp {\vec a} {\vec x} \ge -u \ge -b_i(\vec p)$. -Conversely, $m = \min_i b_i(\vec p)$ satisfies the constraints -on $u$ and therefore extends a solution to the new system. -It can also be plugged into a new solution. -See \autoref{s:post} for how this substitution is currently performed -in {\tt isl}. -The method described in this section can only detect symmetries -that are explicitly available in the input. -See \autoref{s:online} for the detection -and exploitation of symmetries that appear during the course of -the dual simplex method. - -\subsubsection{Parameter Compression}\label{s:compression} - -It may in some cases be apparent from the equalities in the problem -description that there can only be a solution for a sublattice -of the parameters. In such cases ``parameter compression'' -\shortcite{Meister2004PhD,Meister2008} can be used to replace -the parameters by alternative ``dense'' parameters. -For example, if there is a constraint $2x = n$, then the system -will only have solutions for even values of $n$ and $n$ can be replaced -by $2n'$. Similarly, the parameters $n$ and $m$ in a system with -the constraint $2n = 3m$ can be replaced by a single parameter $n'$ -with $n=3n'$ and $m=2n'$. -It is also possible to perform a similar compression on the unknowns, -but it would be more complicated as the compression would have to -preserve the lexicographical order. Moreover, due to our handling -of equalities described above there should be -no need for such variable compression. -Although parameter compression has been implemented in {\tt isl}, -it is currently not yet used during parametric integer programming. - -\subsection{Postprocessing}\label{s:post} - -The output of {\tt PipLib} is a quast (quasi-affine selection tree). -Each internal node in this tree corresponds to a split of the context -based on a parametric constant term in the main tableau with indeterminate -sign. Each of these nodes may introduce extra variables in the context -corresponding to integer divisions. Each leaf of the tree prescribes -the solution in that part of the context that satisfies all the conditions -on the path leading to the leaf. -Such a quast is a very economical way of representing the solution, but -it would not be suitable as the (only) internal representation of -sets and relations in {\tt isl}. Instead, {\tt isl} represents -the constraints of a set or relation in disjunctive normal form. -The result of a parametric integer programming problem is then also -converted to this internal representation. Unfortunately, the conversion -to disjunctive normal form can lead to an explosion of the size -of the representation. -In some cases, this overhead would have to be paid anyway in subsequent -operations, but in other cases, especially for outside users that just -want to solve parametric integer programming problems, we would like -to avoid this overhead in future. That is, we are planning on introducing -quasts or a related representation as one of several possible internal -representations and on allowing the output of {\tt isl\_pip} to optionally -be printed as a quast. - -Currently, {\tt isl} also does not have an internal representation -for expressions such as $\min_i b_i(\vec p)$ from the offline -symmetry detection of \autoref{s:offline}. -Assume that one of these expressions has $n$ bounds $b_i(\vec p)$. -If the expression -does not appear in the affine expression describing the solution, -but only in the constraints, and if moreover, the expression -only appears with a positive coefficient, i.e., -$\min_i b_i(\vec p) \ge f_j(\vec p)$, then each of these constraints -can simply be reduplicated $n$ times, once for each of the bounds. -Otherwise, a conversion to disjunctive normal form -leads to $n$ cases, each described as $u = b_i(\vec p)$ with constraints -$b_i(\vec p) \le b_j(\vec p)$ for $j > i$ -and -$b_i(\vec p) < b_j(\vec p)$ for $j < i$. -Note that even though this conversion leads to a size increase -by a factor of $n$, not detecting the symmetry could lead to -an increase by a factor of $n!$ if all possible orderings end up being -considered. - -\subsection{Context Tableau}\label{s:context} - -The main operation that a context tableau needs to provide is a test -on the sign of an affine expression over the elements of the context. -This sign can be determined by solving two integer linear feasibility -problems, one with a constraint added to the context that enforces -the expression to be non-negative and one where the expression is -negative. As already mentioned by \shortciteN{Feautrier88parametric}, -any integer linear feasibility solver could be used, but the {\tt PipLib} -implementation uses a recursive call to the dual simplex with Gomory -cuts algorithm to determine the feasibility of a context. -In {\tt isl}, two ways of handling the context have been implemented, -one that performs the recursive call and one, used by default, that -uses generalized basis reduction. -We start with some optimizations that are shared between the two -implementations and then discuss additional details of each of them. - -\subsubsection{Maintaining Witnesses}\label{s:witness} - -A common feature of both integer linear feasibility solvers is that -they will not only say whether a set is empty or not, but if the set -is non-empty, they will also provide a \emph{witness} for this result, -i.e., a point that belongs to the set. By maintaining a list of such -witnesses, we can avoid many feasibility tests during the determination -of the signs of affine expressions. In particular, if the expression -evaluates to a positive number on some of these points and to a negative -number on some others, then no feasibility test needs to be performed. -If all the evaluations are non-negative, we only need to check for the -possibility of a negative value and similarly in case of all -non-positive evaluations. Finally, in the rare case that all points -evaluate to zero or at the start, when no points have been collected yet, -one or two feasibility tests need to be performed depending on the result -of the first test. - -When a new constraint is added to the context, the points that -violate the constraint are temporarily removed. They are reconsidered -when we backtrack over the addition of the constraint, as they will -satisfy the negation of the constraint. It is only when we backtrack -over the addition of the points that they are finally removed completely. -When an extra integer division is added to the context, -the new coordinates of the -witnesses can easily be computed by evaluating the integer division. -The idea of keeping track of witnesses was first used in {\tt barvinok}. - -\subsubsection{Choice of Constant Term on which to Split} - -Recall that if there are no rows with a non-positive constant term, -but there are rows with an indeterminate sign, then the context -needs to be split along the constant term of one of these rows. -If there is more than one such row, then we need to choose which row -to split on first. {\tt PipLib} uses a heuristic based on the (absolute) -sizes of the coefficients. In particular, it takes the largest coefficient -of each row and then selects the row where this largest coefficient is smaller -than those of the other rows. - -In {\tt isl}, we take that row for which non-negativity of its constant -term implies non-negativity of as many of the constant terms of the other -rows as possible. The intuition behind this heuristic is that on the -positive side, we will have fewer negative and indeterminate signs, -while on the negative side, we need to perform a pivot, which may -affect any number of rows meaning that the effect on the signs -is difficult to predict. This heuristic is of course much more -expensive to evaluate than the heuristic used by {\tt PipLib}. -More extensive tests are needed to evaluate whether the heuristic is worthwhile. - -\subsubsection{Dual Simplex + Gomory Cuts} - -When a new constraint is added to the context, the first steps -of the dual simplex method applied to this new context will be the same -or at least very similar to those taken on the original context, i.e., -before the constraint was added. In {\tt isl}, we therefore apply -the dual simplex method incrementally on the context and backtrack -to a previous state when a constraint is removed again. -An initial implementation that was never made public would also -keep the Gomory cuts, but the current implementation backtracks -to before the point where Gomory cuts are added before adding -an extra constraint to the context. -Keeping the Gomory cuts has the advantage that the sample value -is always an integer point and that this point may also satisfy -the new constraint. However, due to the technique of maintaining -witnesses explained above, -we would not perform a feasibility test in such cases and then -the previously added cuts may be redundant, possibly resulting -in an accumulation of a large number of cuts. - -If the parameters may be negative, then the same big parameter trick -used in the main tableau is applied to the context. This big parameter -is of course unrelated to the big parameter from the main tableau. -Note that it is not a requirement for this parameter to be ``big'', -but it does allow for some code reuse in {\tt isl}. -In {\tt PipLib}, the extra parameter is not ``big'', but this may be because -the big parameter of the main tableau also appears -in the context tableau. - -Finally, it was reported by \shortciteN{Galea2009personal}, who -worked on a parametric integer programming implementation -in {\tt PPL} \shortcite{PPL}, -that it is beneficial to add cuts for \emph{all} rational coordinates -in the context tableau. Based on this report, -the initial {\tt isl} implementation was adapted accordingly. - -\subsubsection{Generalized Basis Reduction}\label{s:GBR} - -The default algorithm used in {\tt isl} for feasibility checking -is generalized basis reduction \shortcite{Cook1991implementation}. -This algorithm is also used in the {\tt barvinok} implementation. -The algorithm is fairly robust, but it has some overhead. -We therefore try to avoid calling the algorithm in easy cases. -In particular, we incrementally keep track of points for which -the entire unit hypercube positioned at that point lies in the context. -This set is described by translates of the constraints of the context -and if (rationally) non-empty, any rational point -in the set can be rounded up to yield an integer point in the context. - -A restriction of the algorithm is that it only works on bounded sets. -The affine hull of the recession cone therefore needs to be projected -out first. As soon as the algorithm is invoked, we then also -incrementally keep track of this recession cone. The reduced basis -found by one call of the algorithm is also reused as initial basis -for the next call. - -Some problems lead to the -introduction of many integer divisions. Within a given context, -some of these integer divisions may be equal to each other, even -if the expressions are not identical, or they may be equal to some -affine combination of other variables. -To detect such cases, we compute the affine hull of the context -each time a new integer division is added. The algorithm used -for computing this affine hull is that of \shortciteN{Karr1976affine}, -while the points used in this algorithm are obtained by performing -integer feasibility checks on that part of the context outside -the current approximation of the affine hull. -The list of witnesses is used to construct an initial approximation -of the hull, while any extra points found during the construction -of the hull is added to this list. -Any equality found in this way that expresses an integer division -as an \emph{integer} affine combination of other variables is -propagated to the main tableau, where it is used to eliminate that -integer division. - -\subsection{Experiments} - -\autoref{t:comparison} compares the execution times of {\tt isl} -(with both types of context tableau) -on some more difficult instances to those of other tools, -run on an Intel Xeon W3520 @ 2.66GHz. -Easier problems such as the -test cases distributed with {\tt Pip\-Lib} can be solved so quickly -that we would only be measuring overhead such as input/output and conversions -and not the running time of the actual algorithm. -We compare the following versions: -{\tt piplib-1.4.0-5-g0132fd9}, -{\tt barvinok-0.32.1-73-gc5d7751}, -{\tt isl-0.05.1-82-g3a37260} -and {\tt PPL} version 0.11.2. - -The first test case is the following dependence analysis problem -originating from the Phideo project \shortcite{Verhaegh1995PhD} -that was communicated to us by Bart Kienhuis: -\begin{lstlisting}[flexiblecolumns=true,breaklines=true]{} -lexmax { [j1,j2] -> [i1,i2,i3,i4,i5,i6,i7,i8,i9,i10] : 1 <= i1,j1 <= 8 and 1 <= i2,i3,i4,i5,i6,i7,i8,i9,i10 <= 2 and 1 <= j2 <= 128 and i1-1 = j1-1 and i2-1+2*i3-2+4*i4-4+8*i5-8+16*i6-16+32*i7-32+64*i8-64+128*i9-128+256*i10-256=3*j2-3+66 }; -\end{lstlisting} -This problem was the main inspiration -for some of the optimizations in \autoref{s:GBR}. -The second group of test cases are projections used during counting. -The first nine of these come from \shortciteN{Seghir2006minimizing}. -The remaining two come from \shortciteN{Verdoolaege2005experiences} and -were used to drive the first, Gomory cuts based, implementation -in {\tt isl}. -The third and final group of test cases are borrowed from -\shortciteN{Bygde2010licentiate} and inspired the offline symmetry detection -of \autoref{s:offline}. Without symmetry detection, the running times -are 11s and 5.9s. -All running times of {\tt barvinok} and {\tt isl} include a conversion -to disjunctive normal form. Without this conversion, the final two -cases can be solved in 0.07s and 0.21s. -The {\tt PipLib} implementation has some fixed limits and will -sometimes report the problem to be too complex (TC), while on some other -problems it will run out of memory (OOM). -The {\tt barvinok} implementation does not support problems -with a non-trivial lineality space (line) nor maximization problems (max). -The Gomory cuts based {\tt isl} implementation was terminated after 1000 -minutes on the first problem. The gbr version introduces some -overhead on some of the easier problems, but is overall the clear winner. - -\begin{table} -\begin{center} -\begin{tabular}{lrrrrr} - & {\tt PipLib} & {\tt barvinok} & {\tt isl} cut & {\tt isl} gbr & {\tt PPL} \\ -\hline -\hline -% bart.pip -Phideo & TC & 793m & $>$999m & 2.7s & 372m \\ -\hline -e1 & 0.33s & 3.5s & 0.08s & 0.11s & 0.18s \\ -e3 & 0.14s & 0.13s & 0.10s & 0.10s & 0.17s \\ -e4 & 0.24s & 9.1s & 0.09s & 0.11s & 0.70s \\ -e5 & 0.12s & 6.0s & 0.06s & 0.14s & 0.17s \\ -e6 & 0.10s & 6.8s & 0.17s & 0.08s & 0.21s \\ -e7 & 0.03s & 0.27s & 0.04s & 0.04s & 0.03s \\ -e8 & 0.03s & 0.18s & 0.03s & 0.04s & 0.01s \\ -e9 & OOM & 70m & 2.6s & 0.94s & 22s \\ -vd & 0.04s & 0.10s & 0.03s & 0.03s & 0.03s \\ -bouleti & 0.25s & line & 0.06s & 0.06s & 0.15s \\ -difficult & OOM & 1.3s & 1.7s & 0.33s & 1.4s \\ -\hline -cnt/sum & TC & max & 2.2s & 2.2s & OOM \\ -jcomplex & TC & max & 3.7s & 3.9s & OOM \\ -\end{tabular} -\caption{Comparison of Execution Times} -\label{t:comparison} -\end{center} -\end{table} - -\subsection{Online Symmetry Detection}\label{s:online} - -Manual experiments on small instances of the problems of -\shortciteN{Bygde2010licentiate} and an analysis of the results -by the approximate MPA method developed by \shortciteN{Bygde2010licentiate} -have revealed that these problems contain many more symmetries -than can be detected using the offline method of \autoref{s:offline}. -In this section, we present an online detection mechanism that has -not been implemented yet, but that has shown promising results -in manual applications. - -Let us first consider what happens when we do not perform offline -symmetry detection. At some point, one of the -$b_i(\vec p) + \sp {\vec a} {\vec x} \ge 0$ constraints, -say the $j$th constraint, appears as a column -variable, say $c_1$, while the other constraints are represented -as rows of the form $b_i(\vec p) - b_j(\vec p) + c$. -The context is then split according to the relative order of -$b_j(\vec p)$ and one of the remaining $b_i(\vec p)$. -The offline method avoids this split by replacing all $b_i(\vec p)$ -by a single newly introduced parameter that represents the minimum -of these $b_i(\vec p)$. -In the online method the split is similarly avoided by the introduction -of a new parameter. In particular, a new parameter is introduced -that represents -$\left| b_j(\vec p) - b_i(\vec p) \right|_+ = -\max(b_j(\vec p) - b_i(\vec p), 0)$. - -In general, let $r = b(\vec p) + \sp {\vec a} {\vec c}$ be a row -of the tableau such that the sign of $b(\vec p)$ is indeterminate -and such that exactly one of the elements of $\vec a$ is a $1$, -while all remaining elements are non-positive. -That is, $r = b(\vec p) + c_j - f$ with $f = -\sum_{i\ne j} a_i c_i \ge 0$. -We introduce a new parameter $t$ with -context constraints $t \ge -b(\vec p)$ and $t \ge 0$ and replace -the column variable $c_j$ by $c' + t$. The row $r$ is now equal -to $b(\vec p) + t + c' - f$. The constant term of this row is always -non-negative because any negative value of $b(\vec p)$ is compensated -by $t \ge -b(\vec p)$ while and non-negative value remains non-negative -because $t \ge 0$. - -We need to show that this transformation does not eliminate any valid -solutions and that it does not introduce any spurious solutions. -Given a valid solution for the original problem, we need to find -a non-negative value of $c'$ satisfying the constraints. -If $b(\vec p) \ge 0$, we can take $t = 0$ so that -$c' = c_j - t = c_j \ge 0$. -If $b(\vec p) < 0$, we can take $t = -b(\vec p)$. -Since $r = b(\vec p) + c_j - f \ge 0$ and $f \ge 0$, we have -$c' = c_j + b(\vec p) \ge 0$. -Note that these choices amount to plugging in -$t = \left|-b(\vec p)\right|_+ = \max(-b(\vec p), 0)$. -Conversely, given a solution to the new problem, we need to find -a non-negative value of $c_j$, but this is easy since $c_j = c' + t$ -and both of these are non-negative. - -Plugging in $t = \max(-b(\vec p), 0)$ can be performed as in -\autoref{s:post}, but, as in the case of offline symmetry detection, -it may be better to provide a direct representation for such -expressions in the internal representation of sets and relations -or at least in a quast-like output format. - -\section{Coalescing}\label{s:coalescing} - -See \shortciteN{Verdoolaege2009isl}, for now. -More details will be added later. - -\section{Transitive Closure} - -\subsection{Introduction} - -\begin{definition}[Power of a Relation] -Let $R \in \Z^n \to 2^{\Z^{d+d}}$ be a relation and -$k \in \Z_{\ge 1}$ -a positive number, then power $k$ of relation $R$ is defined as -\begin{equation} -\label{eq:transitive:power} -R^k \coloneqq -\begin{cases} -R & \text{if $k = 1$} -\\ -R \circ R^{k-1} & \text{if $k \ge 2$} -. -\end{cases} -\end{equation} -\end{definition} - -\begin{definition}[Transitive Closure of a Relation] -Let $R \in \Z^n \to 2^{\Z^{d+d}}$ be a relation, -then the transitive closure $R^+$ of $R$ is the union -of all positive powers of $R$, -$$ -R^+ \coloneqq \bigcup_{k \ge 1} R^k -. -$$ -\end{definition} -Alternatively, the transitive closure may be defined -inductively as -\begin{equation} -\label{eq:transitive:inductive} -R^+ \coloneqq R \cup \left(R \circ R^+\right) -. -\end{equation} - -Since the transitive closure of a polyhedral relation -may no longer be a polyhedral relation \shortcite{Kelly1996closure}, -we can, in the general case, only compute an approximation -of the transitive closure. -Whereas \shortciteN{Kelly1996closure} compute underapproximations, -we, like \shortciteN{Beletska2009}, compute overapproximations. -That is, given a relation $R$, we will compute a relation $T$ -such that $R^+ \subseteq T$. Of course, we want this approximation -to be as close as possible to the actual transitive closure -$R^+$ and we want to detect the cases where the approximation is -exact, i.e., where $T = R^+$. - -For computing an approximation of the transitive closure of $R$, -we follow the same general strategy as \shortciteN{Beletska2009} -and first compute an approximation of $R^k$ for $k \ge 1$ and then project -out the parameter $k$ from the resulting relation. - -\begin{example} -As a trivial example, consider the relation -$R = \{\, x \to x + 1 \,\}$. The $k$th power of this map -for arbitrary $k$ is -$$ -R^k = k \mapsto \{\, x \to x + k \mid k \ge 1 \,\} -. -$$ -The transitive closure is then -$$ -\begin{aligned} -R^+ & = \{\, x \to y \mid \exists k \in \Z_{\ge 1} : y = x + k \,\} -\\ -& = \{\, x \to y \mid y \ge x + 1 \,\} -. -\end{aligned} -$$ -\end{example} - -\subsection{Computing an Approximation of $R^k$} -\label{s:power} - -There are some special cases where the computation of $R^k$ is very easy. -One such case is that where $R$ does not compose with itself, -i.e., $R \circ R = \emptyset$ or $\domain R \cap \range R = \emptyset$. -In this case, $R^k$ is only non-empty for $k=1$ where it is equal -to $R$ itself. - -In general, it is impossible to construct a closed form -of $R^k$ as a polyhedral relation. -We will therefore need to make some approximations. -As a first approximations, we will consider each of the basic -relations in $R$ as simply adding one or more offsets to a domain element -to arrive at an image element and ignore the fact that some of these -offsets may only be applied to some of the domain elements. -That is, we will only consider the difference set $\Delta\,R$ of the relation. -In particular, we will first construct a collection $P$ of paths -that move through -a total of $k$ offsets and then intersect domain and range of this -collection with those of $R$. -That is, -\begin{equation} -\label{eq:transitive:approx} -K = P \cap \left(\domain R \to \range R\right) -, -\end{equation} -with -\begin{equation} -\label{eq:transitive:path} -P = \vec s \mapsto \{\, \vec x \to \vec y \mid -\exists k_i \in \Z_{\ge 0}, \vec\delta_i \in k_i \, \Delta_i(\vec s) : -\vec y = \vec x + \sum_i \vec\delta_i -\wedge -\sum_i k_i = k > 0 -\,\} -\end{equation} -and with $\Delta_i$ the basic sets that compose -the difference set $\Delta\,R$. -Note that the number of basic sets $\Delta_i$ need not be -the same as the number of basic relations in $R$. -Also note that since addition is commutative, it does not -matter in which order we add the offsets and so we are allowed -to group them as we did in \eqref{eq:transitive:path}. - -If all the $\Delta_i$s are singleton sets -$\Delta_i = \{\, \vec \delta_i \,\}$ with $\vec \delta_i \in \Z^d$, -then \eqref{eq:transitive:path} simplifies to -\begin{equation} -\label{eq:transitive:singleton} -P = \{\, \vec x \to \vec y \mid -\exists k_i \in \Z_{\ge 0} : -\vec y = \vec x + \sum_i k_i \, \vec \delta_i -\wedge -\sum_i k_i = k > 0 -\,\} -\end{equation} -and then the approximation computed in \eqref{eq:transitive:approx} -is essentially the same as that of \shortciteN{Beletska2009}. -If some of the $\Delta_i$s are not singleton sets or if -some of $\vec \delta_i$s are parametric, then we need -to resort to further approximations. - -To ease both the exposition and the implementation, we will for -the remainder of this section work with extended offsets -$\Delta_i' = \Delta_i \times \{\, 1 \,\}$. -That is, each offset is extended with an extra coordinate that is -set equal to one. The paths constructed by summing such extended -offsets have the length encoded as the difference of their -final coordinates. The path $P'$ can then be decomposed into -paths $P_i'$, one for each $\Delta_i$, -\begin{equation} -\label{eq:transitive:decompose} -P' = \left( -(P_m' \cup \identity) \circ \cdots \circ -(P_2' \cup \identity) \circ -(P_1' \cup \identity) -\right) \cap -\{\, -\vec x' \to \vec y' \mid y_{d+1} - x_{d+1} = k > 0 -\,\} -, -\end{equation} -with -$$ -P_i' = \vec s \mapsto \{\, \vec x' \to \vec y' \mid -\exists k \in \Z_{\ge 1}, \vec \delta \in k \, \Delta_i'(\vec s) : -\vec y' = \vec x' + \vec \delta -\,\} -. -$$ -Note that each $P_i'$ contains paths of length at least one. -We therefore need to take the union with the identity relation -when composing the $P_i'$s to allow for paths that do not contain -any offsets from one or more $\Delta_i'$. -The path that consists of only identity relations is removed -by imposing the constraint $y_{d+1} - x_{d+1} > 0$. -Taking the union with the identity relation means that -that the relations we compose in \eqref{eq:transitive:decompose} -each consist of two basic relations. If there are $m$ -disjuncts in the input relation, then a direct application -of the composition operation may therefore result in a relation -with $2^m$ disjuncts, which is prohibitively expensive. -It is therefore crucial to apply coalescing (\autoref{s:coalescing}) -after each composition. - -Let us now consider how to compute an overapproximation of $P_i'$. -Those that correspond to singleton $\Delta_i$s are grouped together -and handled as in \eqref{eq:transitive:singleton}. -Note that this is just an optimization. The procedure described -below would produce results that are at least as accurate. -For simplicity, we first assume that no constraint in $\Delta_i'$ -involves any existentially quantified variables. -We will return to existentially quantified variables at the end -of this section. -Without existentially quantified variables, we can classify -the constraints of $\Delta_i'$ as follows -\begin{enumerate} -\item non-parametric constraints -\begin{equation} -\label{eq:transitive:non-parametric} -A_1 \vec x + \vec c_1 \geq \vec 0 -\end{equation} -\item purely parametric constraints -\begin{equation} -\label{eq:transitive:parametric} -B_2 \vec s + \vec c_2 \geq \vec 0 -\end{equation} -\item negative mixed constraints -\begin{equation} -\label{eq:transitive:mixed} -A_3 \vec x + B_3 \vec s + \vec c_3 \geq \vec 0 -\end{equation} -such that for each row $j$ and for all $\vec s$, -$$ -\Delta_i'(\vec s) \cap -\{\, \vec \delta' \mid B_{3,j} \vec s + c_{3,j} > 0 \,\} -= \emptyset -$$ -\item positive mixed constraints -$$ -A_4 \vec x + B_4 \vec s + \vec c_4 \geq \vec 0 -$$ -such that for each row $j$, there is at least one $\vec s$ such that -$$ -\Delta_i'(\vec s) \cap -\{\, \vec \delta' \mid B_{4,j} \vec s + c_{4,j} > 0 \,\} -\ne \emptyset -$$ -\end{enumerate} -We will use the following approximation $Q_i$ for $P_i'$: -\begin{equation} -\label{eq:transitive:Q} -\begin{aligned} -Q_i = \vec s \mapsto -\{\, -\vec x' \to \vec y' -\mid {} & \exists k \in \Z_{\ge 1}, \vec f \in \Z^d : -\vec y' = \vec x' + (\vec f, k) -\wedge {} -\\ -& -A_1 \vec f + k \vec c_1 \geq \vec 0 -\wedge -B_2 \vec s + \vec c_2 \geq \vec 0 -\wedge -A_3 \vec f + B_3 \vec s + \vec c_3 \geq \vec 0 -\,\} -. -\end{aligned} -\end{equation} -To prove that $Q_i$ is indeed an overapproximation of $P_i'$, -we need to show that for every $\vec s \in \Z^n$, for every -$k \in \Z_{\ge 1}$ and for every $\vec f \in k \, \Delta_i(\vec s)$ -we have that -$(\vec f, k)$ satisfies the constraints in \eqref{eq:transitive:Q}. -If $\Delta_i(\vec s)$ is non-empty, then $\vec s$ must satisfy -the constraints in \eqref{eq:transitive:parametric}. -Each element $(\vec f, k) \in k \, \Delta_i'(\vec s)$ is a sum -of $k$ elements $(\vec f_j, 1)$ in $\Delta_i'(\vec s)$. -Each of these elements satisfies the constraints in -\eqref{eq:transitive:non-parametric}, i.e., -$$ -\left[ -\begin{matrix} -A_1 & \vec c_1 -\end{matrix} -\right] -\left[ -\begin{matrix} -\vec f_j \\ 1 -\end{matrix} -\right] -\ge \vec 0 -. -$$ -The sum of these elements therefore satisfies the same set of inequalities, -i.e., $A_1 \vec f + k \vec c_1 \geq \vec 0$. -Finally, the constraints in \eqref{eq:transitive:mixed} are such -that for any $\vec s$ in the parameter domain of $\Delta$, -we have $-\vec r(\vec s) \coloneqq B_3 \vec s + \vec c_3 \le \vec 0$, -i.e., $A_3 \vec f_j \ge \vec r(\vec s) \ge \vec 0$ -and therefore also $A_3 \vec f \ge \vec r(\vec s)$. -Note that if there are no mixed constraints and if the -rational relaxation of $\Delta_i(\vec s)$, i.e., -$\{\, \vec x \in \Q^d \mid A_1 \vec x + \vec c_1 \ge \vec 0\,\}$, -has integer vertices, then the approximation is exact, i.e., -$Q_i = P_i'$. In this case, the vertices of $\Delta'_i(\vec s)$ -generate the rational cone -$\{\, \vec x' \in \Q^{d+1} \mid \left[ -\begin{matrix} -A_1 & \vec c_1 -\end{matrix} -\right] \vec x' \,\}$ and therefore $\Delta'_i(\vec s)$ is -a Hilbert basis of this cone \shortcite[Theorem~16.4]{Schrijver1986}. - -Note however that, as pointed out by \shortciteN{DeSmet2010personal}, -if there \emph{are} any mixed constraints, then the above procedure may -not compute the most accurate affine approximation of -$k \, \Delta_i(\vec s)$ with $k \ge 1$. -In particular, we only consider the negative mixed constraints that -happen to appear in the description of $\Delta_i(\vec s)$, while we -should instead consider \emph{all} valid such constraints. -It is also sufficient to consider those constraints because any -constraint that is valid for $k \, \Delta_i(\vec s)$ is also -valid for $1 \, \Delta_i(\vec s) = \Delta_i(\vec s)$. -Take therefore any constraint -$\spv a x + \spv b s + c \ge 0$ valid for $\Delta_i(\vec s)$. -This constraint is also valid for $k \, \Delta_i(\vec s)$ iff -$k \, \spv a x + \spv b s + c \ge 0$. -If $\spv b s + c$ can attain any positive value, then $\spv a x$ -may be negative for some elements of $\Delta_i(\vec s)$. -We then have $k \, \spv a x < \spv a x$ for $k > 1$ and so the constraint -is not valid for $k \, \Delta_i(\vec s)$. -We therefore need to impose $\spv b s + c \le 0$ for all values -of $\vec s$ such that $\Delta_i(\vec s)$ is non-empty, i.e., -$\vec b$ and $c$ need to be such that $- \spv b s - c \ge 0$ is a valid -constraint of $\Delta_i(\vec s)$. That is, $(\vec b, c)$ are the opposites -of the coefficients of a valid constraint of $\Delta_i(\vec s)$. -The approximation of $k \, \Delta_i(\vec s)$ can therefore be obtained -using three applications of Farkas' lemma. The first obtains the coefficients -of constraints valid for $\Delta_i(\vec s)$. The second obtains -the coefficients of constraints valid for the projection of $\Delta_i(\vec s)$ -onto the parameters. The opposite of the second set is then computed -and intersected with the first set. The result is the set of coefficients -of constraints valid for $k \, \Delta_i(\vec s)$. A final application -of Farkas' lemma is needed to obtain the approximation of -$k \, \Delta_i(\vec s)$ itself. - -\begin{example} -Consider the relation -$$ -n \to \{\, (x, y) \to (1 + x, 1 - n + y) \mid n \ge 2 \,\} -. -$$ -The difference set of this relation is -$$ -\Delta = n \to \{\, (1, 1 - n) \mid n \ge 2 \,\} -. -$$ -Using our approach, we would only consider the mixed constraint -$y - 1 + n \ge 0$, leading to the following approximation of the -transitive closure: -$$ -n \to \{\, (x, y) \to (o_0, o_1) \mid n \ge 2 \wedge o_1 \le 1 - n + y \wedge o_0 \ge 1 + x \,\} -. -$$ -If, instead, we apply Farkas's lemma to $\Delta$, i.e., -\begin{verbatim} -D := [n] -> { [1, 1 - n] : n >= 2 }; -CD := coefficients D; -CD; -\end{verbatim} -we obtain -\begin{verbatim} -{ rat: coefficients[[c_cst, c_n] -> [i2, i3]] : i3 <= c_n and - i3 <= c_cst + 2c_n + i2 } -\end{verbatim} -The pure-parametric constraints valid for $\Delta$, -\begin{verbatim} -P := { [a,b] -> [] }(D); -CP := coefficients P; -CP; -\end{verbatim} -are -\begin{verbatim} -{ rat: coefficients[[c_cst, c_n] -> []] : c_n >= 0 and 2c_n >= -c_cst } -\end{verbatim} -Negating these coefficients and intersecting with \verb+CD+, -\begin{verbatim} -NCP := { rat: coefficients[[a,b] -> []] - -> coefficients[[-a,-b] -> []] }(CP); -CK := wrap((unwrap CD) * (dom (unwrap NCP))); -CK; -\end{verbatim} -we obtain -\begin{verbatim} -{ rat: [[c_cst, c_n] -> [i2, i3]] : i3 <= c_n and - i3 <= c_cst + 2c_n + i2 and c_n <= 0 and 2c_n <= -c_cst } -\end{verbatim} -The approximation for $k\,\Delta$, -\begin{verbatim} -K := solutions CK; -K; -\end{verbatim} -is then -\begin{verbatim} -[n] -> { rat: [i0, i1] : i1 <= -i0 and i0 >= 1 and i1 <= 2 - n - i0 } -\end{verbatim} -Finally, the computed approximation for $R^+$, -\begin{verbatim} -T := unwrap({ [dx,dy] -> [[x,y] -> [x+dx,y+dy]] }(K)); -R := [n] -> { [x,y] -> [x+1,y+1-n] : n >= 2 }; -T := T * ((dom R) -> (ran R)); -T; -\end{verbatim} -is -\begin{verbatim} -[n] -> { [x, y] -> [o0, o1] : o1 <= x + y - o0 and - o0 >= 1 + x and o1 <= 2 - n + x + y - o0 and n >= 2 } -\end{verbatim} -\end{example} - -Existentially quantified variables can be handled by -classifying them into variables that are uniquely -determined by the parameters, variables that are independent -of the parameters and others. The first set can be treated -as parameters and the second as variables. Constraints involving -the other existentially quantified variables are removed. - -\begin{example} -Consider the relation -$$ -R = -n \to \{\, x \to y \mid \exists \, \alpha_0, \alpha_1: 7\alpha_0 = -2 + n \wedge 5\alpha_1 = -1 - x + y \wedge y \ge 6 + x \,\} -. -$$ -The difference set of this relation is -$$ -\Delta = \Delta \, R = -n \to \{\, x \mid \exists \, \alpha_0, \alpha_1: 7\alpha_0 = -2 + n \wedge 5\alpha_1 = -1 + x \wedge x \ge 6 \,\} -. -$$ -The existentially quantified variables can be defined in terms -of the parameters and variables as -$$ -\alpha_0 = \floor{\frac{-2 + n}7} -\qquad -\text{and} -\qquad -\alpha_1 = \floor{\frac{-1 + x}5} -. -$$ -$\alpha_0$ can therefore be treated as a parameter, -while $\alpha_1$ can be treated as a variable. -This in turn means that $7\alpha_0 = -2 + n$ can be treated as -a purely parametric constraint, while the other two constraints are -non-parametric. -The corresponding $Q$~\eqref{eq:transitive:Q} is therefore -$$ -\begin{aligned} -n \to \{\, (x,z) \to (y,w) \mid -\exists\, \alpha_0, \alpha_1, k, f : {} & -k \ge 1 \wedge -y = x + f \wedge -w = z + k \wedge {} \\ -& -7\alpha_0 = -2 + n \wedge -5\alpha_1 = -k + x \wedge -x \ge 6 k -\,\} -. -\end{aligned} -$$ -Projecting out the final coordinates encoding the length of the paths, -results in the exact transitive closure -$$ -R^+ = -n \to \{\, x \to y \mid \exists \, \alpha_0, \alpha_1: 7\alpha_1 = -2 + n \wedge 6\alpha_0 \ge -x + y \wedge 5\alpha_0 \le -1 - x + y \,\} -. -$$ -\end{example} - -The fact that we ignore some impure constraints clearly leads -to a loss of accuracy. In some cases, some of this loss can be recovered -by not considering the parameters in a special way. -That is, instead of considering the set -$$ -\Delta = \diff R = -\vec s \mapsto -\{\, \vec \delta \in \Z^{d} \mid \exists \vec x \to \vec y \in R : -\vec \delta = \vec y - \vec x -\,\} -$$ -we consider the set -$$ -\Delta' = \diff R' = -\{\, \vec \delta \in \Z^{n+d} \mid \exists -(\vec s, \vec x) \to (\vec s, \vec y) \in R' : -\vec \delta = (\vec s - \vec s, \vec y - \vec x) -\,\} -. -$$ -The first $n$ coordinates of every element in $\Delta'$ are zero. -Projecting out these zero coordinates from $\Delta'$ is equivalent -to projecting out the parameters in $\Delta$. -The result is obviously a superset of $\Delta$, but all its constraints -are of type \eqref{eq:transitive:non-parametric} and they can therefore -all be used in the construction of $Q_i$. - -\begin{example} -Consider the relation -$$ -% [n] -> { [x, y] -> [1 + x, 1 - n + y] | n >= 2 } -R = n \to \{\, (x, y) \to (1 + x, 1 - n + y) \mid n \ge 2 \,\} -. -$$ -We have -$$ -\diff R = n \to \{\, (1, 1 - n) \mid n \ge 2 \,\} -$$ -and so, by treating the parameters in a special way, we obtain -the following approximation for $R^+$: -$$ -n \to \{\, (x, y) \to (x', y') \mid n \ge 2 \wedge y' \le 1 - n + y \wedge x' \ge 1 + x \,\} -. -$$ -If we consider instead -$$ -R' = \{\, (n, x, y) \to (n, 1 + x, 1 - n + y) \mid n \ge 2 \,\} -$$ -then -$$ -\diff R' = \{\, (0, 1, y) \mid y \le -1 \,\} -$$ -and we obtain the approximation -$$ -n \to \{\, (x, y) \to (x', y') \mid n \ge 2 \wedge x' \ge 1 + x \wedge y' \le x + y - x' \,\} -. -$$ -If we consider both $\diff R$ and $\diff R'$, then we obtain -$$ -n \to \{\, (x, y) \to (x', y') \mid n \ge 2 \wedge y' \le 1 - n + y \wedge x' \ge 1 + x \wedge y' \le x + y - x' \,\} -. -$$ -Note, however, that this is not the most accurate affine approximation that -can be obtained. That would be -$$ -n \to \{\, (x, y) \to (x', y') \mid y' \le 2 - n + x + y - x' \wedge n \ge 2 \wedge x' \ge 1 + x \,\} -. -$$ -\end{example} - -\subsection{Checking Exactness} - -The approximation $T$ for the transitive closure $R^+$ can be obtained -by projecting out the parameter $k$ from the approximation $K$ -\eqref{eq:transitive:approx} of the power $R^k$. -Since $K$ is an overapproximation of $R^k$, $T$ will also be an -overapproximation of $R^+$. -To check whether the results are exact, we need to consider two -cases depending on whether $R$ is {\em cyclic}, where $R$ is defined -to be cyclic if $R^+$ maps any element to itself, i.e., -$R^+ \cap \identity \ne \emptyset$. -If $R$ is acyclic, then the inductive definition of -\eqref{eq:transitive:inductive} is equivalent to its completion, -i.e., -$$ -R^+ = R \cup \left(R \circ R^+\right) -$$ -is a defining property. -Since $T$ is known to be an overapproximation, we only need to check -whether -$$ -T \subseteq R \cup \left(R \circ T\right) -. -$$ -This is essentially Theorem~5 of \shortciteN{Kelly1996closure}. -The only difference is that they only consider lexicographically -forward relations, a special case of acyclic relations. - -If, on the other hand, $R$ is cyclic, then we have to resort -to checking whether the approximation $K$ of the power is exact. -Note that $T$ may be exact even if $K$ is not exact, so the check -is sound, but incomplete. -To check exactness of the power, we simply need to check -\eqref{eq:transitive:power}. Since again $K$ is known -to be an overapproximation, we only need to check whether -$$ -\begin{aligned} -K'|_{y_{d+1} - x_{d+1} = 1} & \subseteq R' -\\ -K'|_{y_{d+1} - x_{d+1} \ge 2} & \subseteq R' \circ K'|_{y_{d+1} - x_{d+1} \ge 1} -, -\end{aligned} -$$ -where $R' = \{\, \vec x' \to \vec y' \mid \vec x \to \vec y \in R -\wedge y_{d+1} - x_{d+1} = 1\,\}$, i.e., $R$ extended with path -lengths equal to 1. - -All that remains is to explain how to check the cyclicity of $R$. -Note that the exactness on the power is always sound, even -in the acyclic case, so we only need to be careful that we find -all cyclic cases. Now, if $R$ is cyclic, i.e., -$R^+ \cap \identity \ne \emptyset$, then, since $T$ is -an overapproximation of $R^+$, also -$T \cap \identity \ne \emptyset$. This in turn means -that $\Delta \, K'$ contains a point whose first $d$ coordinates -are zero and whose final coordinate is positive. -In the implementation we currently perform this test on $P'$ instead of $K'$. -Note that if $R^+$ is acyclic and $T$ is not, then the approximation -is clearly not exact and the approximation of the power $K$ -will not be exact either. - -\subsection{Decomposing $R$ into strongly connected components} - -If the input relation $R$ is a union of several basic relations -that can be partially ordered -then the accuracy of the approximation may be improved by computing -an approximation of each strongly connected components separately. -For example, if $R = R_1 \cup R_2$ and $R_1 \circ R_2 = \emptyset$, -then we know that any path that passes through $R_2$ cannot later -pass through $R_1$, i.e., -\begin{equation} -\label{eq:transitive:components} -R^+ = R_1^+ \cup R_2^+ \cup \left(R_2^+ \circ R_1^+\right) -. -\end{equation} -We can therefore compute (approximations of) transitive closures -of $R_1$ and $R_2$ separately. -Note, however, that the condition $R_1 \circ R_2 = \emptyset$ -is actually too strong. -If $R_1 \circ R_2$ is a subset of $R_2 \circ R_1$ -then we can reorder the segments -in any path that moves through both $R_1$ and $R_2$ to -first move through $R_1$ and then through $R_2$. - -This idea can be generalized to relations that are unions -of more than two basic relations by constructing the -strongly connected components in the graph with as vertices -the basic relations and an edge between two basic relations -$R_i$ and $R_j$ if $R_i$ needs to follow $R_j$ in some paths. -That is, there is an edge from $R_i$ to $R_j$ iff -\begin{equation} -\label{eq:transitive:edge} -R_i \circ R_j -\not\subseteq -R_j \circ R_i -. -\end{equation} -The components can be obtained from the graph by applying -Tarjan's algorithm \shortcite{Tarjan1972}. - -In practice, we compute the (extended) powers $K_i'$ of each component -separately and then compose them as in \eqref{eq:transitive:decompose}. -Note, however, that in this case the order in which we apply them is -important and should correspond to a topological ordering of the -strongly connected components. Simply applying Tarjan's -algorithm will produce topologically sorted strongly connected components. -The graph on which Tarjan's algorithm is applied is constructed on-the-fly. -That is, whenever the algorithm checks if there is an edge between -two vertices, we evaluate \eqref{eq:transitive:edge}. -The exactness check is performed on each component separately. -If the approximation turns out to be inexact for any of the components, -then the entire result is marked inexact and the exactness check -is skipped on the components that still need to be handled. - -It should be noted that \eqref{eq:transitive:components} -is only valid for exact transitive closures. -If overapproximations are computed in the right hand side, then the result will -still be an overapproximation of the left hand side, but this result -may not be transitively closed. If we only separate components based -on the condition $R_i \circ R_j = \emptyset$, then there is no problem, -as this condition will still hold on the computed approximations -of the transitive closures. If, however, we have exploited -\eqref{eq:transitive:edge} during the decomposition and if the -result turns out not to be exact, then we check whether -the result is transitively closed. If not, we recompute -the transitive closure, skipping the decomposition. -Note that testing for transitive closedness on the result may -be fairly expensive, so we may want to make this check -configurable. - -\begin{figure} -\begin{center} -\begin{tikzpicture}[x=0.5cm,y=0.5cm,>=stealth,shorten >=1pt] -\foreach \x in {1,...,10}{ - \foreach \y in {1,...,10}{ - \draw[->] (\x,\y) -- (\x,\y+1); - } -} -\foreach \x in {1,...,20}{ - \foreach \y in {5,...,15}{ - \draw[->] (\x,\y) -- (\x+1,\y); - } -} -\end{tikzpicture} -\end{center} -\caption{The relation from \autoref{ex:closure4}} -\label{f:closure4} -\end{figure} -\begin{example} -\label{ex:closure4} -Consider the relation in example {\tt closure4} that comes with -the Omega calculator~\shortcite{Omega_calc}, $R = R_1 \cup R_2$, -with -$$ -\begin{aligned} -R_1 & = \{\, (x,y) \to (x,y+1) \mid 1 \le x,y \le 10 \,\} -\\ -R_2 & = \{\, (x,y) \to (x+1,y) \mid 1 \le x \le 20 \wedge 5 \le y \le 15 \,\} -. -\end{aligned} -$$ -This relation is shown graphically in \autoref{f:closure4}. -We have -$$ -\begin{aligned} -R_1 \circ R_2 &= -\{\, (x,y) \to (x+1,y+1) \mid 1 \le x \le 9 \wedge 5 \le y \le 10 \,\} -\\ -R_2 \circ R_1 &= -\{\, (x,y) \to (x+1,y+1) \mid 1 \le x \le 10 \wedge 4 \le y \le 10 \,\} -. -\end{aligned} -$$ -Clearly, $R_1 \circ R_2 \subseteq R_2 \circ R_1$ and so -$$ -\left( -R_1 \cup R_2 -\right)^+ -= -\left(R_2^+ \circ R_1^+\right) -\cup R_1^+ -\cup R_2^+ -. -$$ -\end{example} - -\begin{figure} -\newcounter{n} -\newcounter{t1} -\newcounter{t2} -\newcounter{t3} -\newcounter{t4} -\begin{center} -\begin{tikzpicture}[>=stealth,shorten >=1pt] -\setcounter{n}{7} -\foreach \i in {1,...,\value{n}}{ - \foreach \j in {1,...,\value{n}}{ - \setcounter{t1}{2 * \j - 4 - \i + 1} - \setcounter{t2}{\value{n} - 3 - \i + 1} - \setcounter{t3}{2 * \i - 1 - \j + 1} - \setcounter{t4}{\value{n} - \j + 1} - \ifnum\value{t1}>0\ifnum\value{t2}>0 - \ifnum\value{t3}>0\ifnum\value{t4}>0 - \draw[thick,->] (\i,\j) to[out=20] (\i+3,\j); - \fi\fi\fi\fi - \setcounter{t1}{2 * \j - 1 - \i + 1} - \setcounter{t2}{\value{n} - \i + 1} - \setcounter{t3}{2 * \i - 4 - \j + 1} - \setcounter{t4}{\value{n} - 3 - \j + 1} - \ifnum\value{t1}>0\ifnum\value{t2}>0 - \ifnum\value{t3}>0\ifnum\value{t4}>0 - \draw[thick,->] (\i,\j) to[in=-20,out=20] (\i,\j+3); - \fi\fi\fi\fi - \setcounter{t1}{2 * \j - 1 - \i + 1} - \setcounter{t2}{\value{n} - 1 - \i + 1} - \setcounter{t3}{2 * \i - 1 - \j + 1} - \setcounter{t4}{\value{n} - 1 - \j + 1} - \ifnum\value{t1}>0\ifnum\value{t2}>0 - \ifnum\value{t3}>0\ifnum\value{t4}>0 - \draw[thick,->] (\i,\j) to (\i+1,\j+1); - \fi\fi\fi\fi - } -} -\end{tikzpicture} -\end{center} -\caption{The relation from \autoref{ex:decomposition}} -\label{f:decomposition} -\end{figure} -\begin{example} -\label{ex:decomposition} -Consider the relation on the right of \shortciteN[Figure~2]{Beletska2009}, -reproduced in \autoref{f:decomposition}. -The relation can be described as $R = R_1 \cup R_2 \cup R_3$, -with -$$ -\begin{aligned} -R_1 &= n \mapsto \{\, (i,j) \to (i+3,j) \mid -i \le 2 j - 4 \wedge -i \le n - 3 \wedge -j \le 2 i - 1 \wedge -j \le n \,\} -\\ -R_2 &= n \mapsto \{\, (i,j) \to (i,j+3) \mid -i \le 2 j - 1 \wedge -i \le n \wedge -j \le 2 i - 4 \wedge -j \le n - 3 \,\} -\\ -R_3 &= n \mapsto \{\, (i,j) \to (i+1,j+1) \mid -i \le 2 j - 1 \wedge -i \le n - 1 \wedge -j \le 2 i - 1 \wedge -j \le n - 1\,\} -. -\end{aligned} -$$ -The figure shows this relation for $n = 7$. -Both -$R_3 \circ R_1 \subseteq R_1 \circ R_3$ -and -$R_3 \circ R_2 \subseteq R_2 \circ R_3$, -which the reader can verify using the {\tt iscc} calculator: -\begin{verbatim} -R1 := [n] -> { [i,j] -> [i+3,j] : i <= 2 j - 4 and i <= n - 3 and - j <= 2 i - 1 and j <= n }; -R2 := [n] -> { [i,j] -> [i,j+3] : i <= 2 j - 1 and i <= n and - j <= 2 i - 4 and j <= n - 3 }; -R3 := [n] -> { [i,j] -> [i+1,j+1] : i <= 2 j - 1 and i <= n - 1 and - j <= 2 i - 1 and j <= n - 1 }; -(R1 . R3) - (R3 . R1); -(R2 . R3) - (R3 . R2); -\end{verbatim} -$R_3$ can therefore be moved forward in any path. -For the other two basic relations, we have both -$R_2 \circ R_1 \not\subseteq R_1 \circ R_2$ -and -$R_1 \circ R_2 \not\subseteq R_2 \circ R_1$ -and so $R_1$ and $R_2$ form a strongly connected component. -By computing the power of $R_3$ and $R_1 \cup R_2$ separately -and composing the results, the power of $R$ can be computed exactly -using \eqref{eq:transitive:singleton}. -As explained by \shortciteN{Beletska2009}, applying the same formula -to $R$ directly, without a decomposition, would result in -an overapproximation of the power. -\end{example} - -\subsection{Partitioning the domains and ranges of $R$} - -The algorithm of \autoref{s:power} assumes that the input relation $R$ -can be treated as a union of translations. -This is a reasonable assumption if $R$ maps elements of a given -abstract domain to the same domain. -However, if $R$ is a union of relations that map between different -domains, then this assumption no longer holds. -In particular, when an entire dependence graph is encoded -in a single relation, as is done by, e.g., -\shortciteN[Section~6.1]{Barthou2000MSE}, then it does not make -sense to look at differences between iterations of different domains. -Now, arguably, a modified Floyd-Warshall algorithm should -be applied to the dependence graph, as advocated by -\shortciteN{Kelly1996closure}, with the transitive closure operation -only being applied to relations from a given domain to itself. -However, it is also possible to detect disjoint domains and ranges -and to apply Floyd-Warshall internally. - -\linesnumbered -\begin{algorithm} -\caption{The modified Floyd-Warshall algorithm of -\protect\shortciteN{Kelly1996closure}} -\label{a:Floyd} -\SetKwInput{Input}{Input} -\SetKwInput{Output}{Output} -\Input{Relations $R_{pq}$, $0 \le p, q < n$} -\Output{Updated relations $R_{pq}$ such that each relation -$R_{pq}$ contains all indirect paths from $p$ to $q$ in the input graph} -% -\BlankLine -\SetVline -\dontprintsemicolon -% -\For{$r \in [0, n-1]$}{ - $R_{rr} \coloneqq R_{rr}^+$ \nllabel{l:Floyd:closure}\; - \For{$p \in [0, n-1]$}{ - \For{$q \in [0, n-1]$}{ - \If{$p \ne r$ or $q \ne r$}{ - $R_{pq} \coloneqq R_{pq} \cup \left(R_{rq} \circ R_{pr}\right) - \cup \left(R_{rq} \circ R_{rr} \circ R_{pr}\right)$ - \nllabel{l:Floyd:update} - } - } - } -} -\end{algorithm} - -Let the input relation $R$ be a union of $m$ basic relations $R_i$. -Let $D_{2i}$ be the domains of $R_i$ and $D_{2i+1}$ the ranges of $R_i$. -The first step is to group overlapping $D_j$ until a partition is -obtained. If the resulting partition consists of a single part, -then we continue with the algorithm of \autoref{s:power}. -Otherwise, we apply Floyd-Warshall on the graph with as vertices -the parts of the partition and as edges the $R_i$ attached to -the appropriate pairs of vertices. -In particular, let there be $n$ parts $P_k$ in the partition. -We construct $n^2$ relations -$$ -R_{pq} \coloneqq \bigcup_{i \text{ s.t. } \domain R_i \subseteq P_p \wedge - \range R_i \subseteq P_q} R_i -, -$$ -apply \autoref{a:Floyd} and return the union of all resulting -$R_{pq}$ as the transitive closure of $R$. -Each iteration of the $r$-loop in \autoref{a:Floyd} updates -all relations $R_{pq}$ to include paths that go from $p$ to $r$, -possibly stay there for a while, and then go from $r$ to $q$. -Note that paths that ``stay in $r$'' include all paths that -pass through earlier vertices since $R_{rr}$ itself has been updated -accordingly in previous iterations of the outer loop. -In principle, it would be sufficient to use the $R_{pr}$ -and $R_{rq}$ computed in the previous iteration of the -$r$-loop in Line~\ref{l:Floyd:update}. -However, from an implementation perspective, it is easier -to allow either or both of these to have been updated -in the same iteration of the $r$-loop. -This may result in duplicate paths, but these can usually -be removed by coalescing (\autoref{s:coalescing}) the result of the union -in Line~\ref{l:Floyd:update}, which should be done in any case. -The transitive closure in Line~\ref{l:Floyd:closure} -is performed using a recursive call. This recursive call -includes the partitioning step, but the resulting partition will -usually be a singleton. -The result of the recursive call will either be exact or an -overapproximation. The final result of Floyd-Warshall is therefore -also exact or an overapproximation. - -\begin{figure} -\begin{center} -\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,shorten >=3pt] -\foreach \x/\y in {0/0,1/1,3/2} { - \fill (\x,\y) circle (2pt); -} -\foreach \x/\y in {0/1,2/2,3/3} { - \draw (\x,\y) circle (2pt); -} -\draw[->] (0,0) -- (0,1); -\draw[->] (0,1) -- (1,1); -\draw[->] (2,2) -- (3,2); -\draw[->] (3,2) -- (3,3); -\draw[->,dashed] (2,2) -- (3,3); -\draw[->,dotted] (0,0) -- (1,1); -\end{tikzpicture} -\end{center} -\caption{The relation (solid arrows) on the right of Figure~1 of -\protect\shortciteN{Beletska2009} and its transitive closure} -\label{f:COCOA:1} -\end{figure} -\begin{example} -Consider the relation on the right of Figure~1 of -\shortciteN{Beletska2009}, -reproduced in \autoref{f:COCOA:1}. -This relation can be described as -$$ -\begin{aligned} -\{\, (x, y) \to (x_2, y_2) \mid {} & (3y = 2x \wedge x_2 = x \wedge 3y_2 = 3 + 2x \wedge x \ge 0 \wedge x \le 3) \vee {} \\ -& (x_2 = 1 + x \wedge y_2 = y \wedge x \ge 0 \wedge 3y \ge 2 + 2x \wedge x \le 2 \wedge 3y \le 3 + 2x) \,\} -. -\end{aligned} -$$ -Note that the domain of the upward relation overlaps with the range -of the rightward relation and vice versa, but that the domain -of neither relation overlaps with its own range or the domain of -the other relation. -The domains and ranges can therefore be partitioned into two parts, -$P_0$ and $P_1$, shown as the white and black dots in \autoref{f:COCOA:1}, -respectively. -Initially, we have -$$ -\begin{aligned} -R_{00} & = \emptyset -\\ -R_{01} & = -\{\, (x, y) \to (x+1, y) \mid -(x \ge 0 \wedge 3y \ge 2 + 2x \wedge x \le 2 \wedge 3y \le 3 + 2x) \,\} -\\ -R_{10} & = -\{\, (x, y) \to (x_2, y_2) \mid (3y = 2x \wedge x_2 = x \wedge 3y_2 = 3 + 2x \wedge x \ge 0 \wedge x \le 3) \,\} -\\ -R_{11} & = \emptyset -. -\end{aligned} -$$ -In the first iteration, $R_{00}$ remains the same ($\emptyset^+ = \emptyset$). -$R_{01}$ and $R_{10}$ are therefore also unaffected, but -$R_{11}$ is updated to include $R_{01} \circ R_{10}$, i.e., -the dashed arrow in the figure. -This new $R_{11}$ is obviously transitively closed, so it is not -changed in the second iteration and it does not have an effect -on $R_{01}$ and $R_{10}$. However, $R_{00}$ is updated to -include $R_{10} \circ R_{01}$, i.e., the dotted arrow in the figure. -The transitive closure of the original relation is then equal to -$R_{00} \cup R_{01} \cup R_{10} \cup R_{11}$. -\end{example} - -\subsection{Incremental Computation} -\label{s:incremental} - -In some cases it is possible and useful to compute the transitive closure -of union of basic relations incrementally. In particular, -if $R$ is a union of $m$ basic maps, -$$ -R = \bigcup_j R_j -, -$$ -then we can pick some $R_i$ and compute the transitive closure of $R$ as -\begin{equation} -\label{eq:transitive:incremental} -R^+ = R_i^+ \cup -\left( -\bigcup_{j \ne i} -R_i^* \circ R_j \circ R_i^* -\right)^+ -. -\end{equation} -For this approach to be successful, it is crucial that each -of the disjuncts in the argument of the second transitive -closure in \eqref{eq:transitive:incremental} be representable -as a single basic relation, i.e., without a union. -If this condition holds, then by using \eqref{eq:transitive:incremental}, -the number of disjuncts in the argument of the transitive closure -can be reduced by one. -Now, $R_i^* = R_i^+ \cup \identity$, but in some cases it is possible -to relax the constraints of $R_i^+$ to include part of the identity relation, -say on domain $D$. We will use the notation -${\cal C}(R_i,D) = R_i^+ \cup \identity_D$ to represent -this relaxed version of $R^+$. -\shortciteN{Kelly1996closure} use the notation $R_i^?$. -${\cal C}(R_i,D)$ can be computed by allowing $k$ to attain -the value $0$ in \eqref{eq:transitive:Q} and by using -$$ -P \cap \left(D \to D\right) -$$ -instead of \eqref{eq:transitive:approx}. -Typically, $D$ will be a strict superset of both $\domain R_i$ -and $\range R_i$. We therefore need to check that domain -and range of the transitive closure are part of ${\cal C}(R_i,D)$, -i.e., the part that results from the paths of positive length ($k \ge 1$), -are equal to the domain and range of $R_i$. -If not, then the incremental approach cannot be applied for -the given choice of $R_i$ and $D$. - -In order to be able to replace $R^*$ by ${\cal C}(R_i,D)$ -in \eqref{eq:transitive:incremental}, $D$ should be chosen -to include both $\domain R$ and $\range R$, i.e., such -that $\identity_D \circ R_j \circ \identity_D = R_j$ for all $j\ne i$. -\shortciteN{Kelly1996closure} say that they use -$D = \domain R_i \cup \range R_i$, but presumably they mean that -they use $D = \domain R \cup \range R$. -Now, this expression of $D$ contains a union, so it not directly usable. -\shortciteN{Kelly1996closure} do not explain how they avoid this union. -Apparently, in their implementation, -they are using the convex hull of $\domain R \cup \range R$ -or at least an approximation of this convex hull. -We use the simple hull (\autoref{s:simple hull}) of $\domain R \cup \range R$. - -It is also possible to use a domain $D$ that does {\em not\/} -include $\domain R \cup \range R$, but then we have to -compose with ${\cal C}(R_i,D)$ more selectively. -In particular, if we have -\begin{equation} -\label{eq:transitive:right} -\text{for each $j \ne i$ either } -\domain R_j \subseteq D \text{ or } \domain R_j \cap \range R_i = \emptyset -\end{equation} -and, similarly, -\begin{equation} -\label{eq:transitive:left} -\text{for each $j \ne i$ either } -\range R_j \subseteq D \text{ or } \range R_j \cap \domain R_i = \emptyset -\end{equation} -then we can refine \eqref{eq:transitive:incremental} to -$$ -R_i^+ \cup -\left( -\left( -\bigcup_{\shortstack{$\scriptstyle\domain R_j \subseteq D $\\ - $\scriptstyle\range R_j \subseteq D$}} -{\cal C} \circ R_j \circ {\cal C} -\right) -\cup -\left( -\bigcup_{\shortstack{$\scriptstyle\domain R_j \cap \range R_i = \emptyset$\\ - $\scriptstyle\range R_j \subseteq D$}} -\!\!\!\!\! -{\cal C} \circ R_j -\right) -\cup -\left( -\bigcup_{\shortstack{$\scriptstyle\domain R_j \subseteq D $\\ - $\scriptstyle\range R_j \cap \domain R_i = \emptyset$}} -\!\!\!\!\! -R_j \circ {\cal C} -\right) -\cup -\left( -\bigcup_{\shortstack{$\scriptstyle\domain R_j \cap \range R_i = \emptyset$\\ - $\scriptstyle\range R_j \cap \domain R_i = \emptyset$}} -\!\!\!\!\! -R_j -\right) -\right)^+ -. -$$ -If only property~\eqref{eq:transitive:right} holds, -we can use -$$ -R_i^+ \cup -\left( -\left( -R_i^+ \cup \identity -\right) -\circ -\left( -\left( -\bigcup_{\shortstack{$\scriptstyle\domain R_j \subseteq D $}} -R_j \circ {\cal C} -\right) -\cup -\left( -\bigcup_{\shortstack{$\scriptstyle\domain R_j \cap \range R_i = \emptyset$}} -\!\!\!\!\! -R_j -\right) -\right)^+ -\right) -, -$$ -while if only property~\eqref{eq:transitive:left} holds, -we can use -$$ -R_i^+ \cup -\left( -\left( -\left( -\bigcup_{\shortstack{$\scriptstyle\range R_j \subseteq D $}} -{\cal C} \circ R_j -\right) -\cup -\left( -\bigcup_{\shortstack{$\scriptstyle\range R_j \cap \domain R_i = \emptyset$}} -\!\!\!\!\! -R_j -\right) -\right)^+ -\circ -\left( -R_i^+ \cup \identity -\right) -\right) -. -$$ - -It should be noted that if we want the result of the incremental -approach to be transitively closed, then we can only apply it -if all of the transitive closure operations involved are exact. -If, say, the second transitive closure in \eqref{eq:transitive:incremental} -contains extra elements, then the result does not necessarily contain -the composition of these extra elements with powers of $R_i$. - -\subsection{An {\tt Omega}-like implementation} - -While the main algorithm of \shortciteN{Kelly1996closure} is -designed to compute and underapproximation of the transitive closure, -the authors mention that they could also compute overapproximations. -In this section, we describe our implementation of an algorithm -that is based on their ideas. -Note that the {\tt Omega} library computes underapproximations -\shortcite[Section 6.4]{Omega_lib}. - -The main tool is Equation~(2) of \shortciteN{Kelly1996closure}. -The input relation $R$ is first overapproximated by a ``d-form'' relation -$$ -\{\, \vec i \to \vec j \mid \exists \vec \alpha : -\vec L \le \vec j - \vec i \le \vec U -\wedge -(\forall p : j_p - i_p = M_p \alpha_p) -\,\} -, -$$ -where $p$ ranges over the dimensions and $\vec L$, $\vec U$ and -$\vec M$ are constant integer vectors. The elements of $\vec U$ -may be $\infty$, meaning that there is no upper bound corresponding -to that element, and similarly for $\vec L$. -Such an overapproximation can be obtained by computing strides, -lower and upper bounds on the difference set $\Delta \, R$. -The transitive closure of such a ``d-form'' relation is -\begin{equation} -\label{eq:omega} -\{\, \vec i \to \vec j \mid \exists \vec \alpha, k : -k \ge 1 \wedge -k \, \vec L \le \vec j - \vec i \le k \, \vec U -\wedge -(\forall p : j_p - i_p = M_p \alpha_p) -\,\} -. -\end{equation} -The domain and range of this transitive closure are then -intersected with those of the input relation. -This is a special case of the algorithm in \autoref{s:power}. - -In their algorithm for computing lower bounds, the authors -use the above algorithm as a substep on the disjuncts in the relation. -At the end, they say -\begin{quote} -If an upper bound is required, it can be calculated in a manner -similar to that of a single conjunct [sic] relation. -\end{quote} -Presumably, the authors mean that a ``d-form'' approximation -of the whole input relation should be used. -However, the accuracy can be improved by also trying to -apply the incremental technique from the same paper, -which is explained in more detail in \autoref{s:incremental}. -In this case, ${\cal C}(R_i,D)$ can be obtained by -allowing the value zero for $k$ in \eqref{eq:omega}, -i.e., by computing -$$ -\{\, \vec i \to \vec j \mid \exists \vec \alpha, k : -k \ge 0 \wedge -k \, \vec L \le \vec j - \vec i \le k \, \vec U -\wedge -(\forall p : j_p - i_p = M_p \alpha_p) -\,\} -. -$$ -In our implementation we take as $D$ the simple hull -(\autoref{s:simple hull}) of $\domain R \cup \range R$. -To determine whether it is safe to use ${\cal C}(R_i,D)$, -we check the following conditions, as proposed by -\shortciteN{Kelly1996closure}: -${\cal C}(R_i,D) - R_i^+$ is not a union and for each $j \ne i$ -the condition -$$ -\left({\cal C}(R_i,D) - R_i^+\right) -\circ -R_j -\circ -\left({\cal C}(R_i,D) - R_i^+\right) -= -R_j -$$ -holds. diff --git a/cloog-0.16.3/isl/doc/isl.bib b/cloog-0.16.3/isl/doc/isl.bib deleted file mode 100644 index cfe8081..0000000 --- a/cloog-0.16.3/isl/doc/isl.bib +++ /dev/null @@ -1,313 +0,0 @@ -@inproceedings{Kelly1996closure, - author = {Wayne Kelly and - William Pugh and - Evan Rosser and - Tatiana Shpeisman}, - title = {Transitive Closure of Infinite Graphs and Its Applications}, - pages = {126-140}, - editor = {Chua-Huang Huang and - P. Sadayappan and - Utpal Banerjee and - David Gelernter and - Alexandru Nicolau and - David A. Padua}, - booktitle = {Languages and Compilers for Parallel Computing, 8th International - Workshop, LCPC'95, Columbus, Ohio, USA, August 10-12, 1995, - Proceedings}, - publisher = {Springer}, - series = {Lecture Notes in Computer Science}, - volume = {1033}, - year = {1996}, - isbn = {3-540-60765-X}, -} - -@inproceedings{Beletska2009, - author = {Beletska, Anna and Barthou, Denis and Bielecki, Wlodzimierz and Cohen, Albert}, - title = {Computing the Transitive Closure of a Union of Affine Integer Tuple Relations}, - booktitle = {COCOA '09: Proceedings of the 3rd International Conference on Combinatorial Optimization and Applications}, - year = {2009}, - isbn = {978-3-642-02025-4}, - pages = {98--109}, - location = {Huangshan, China}, - doi = {10.1007/978-3-642-02026-1_9}, - publisher = {Springer-Verlag}, - address = {Berlin, Heidelberg}, -} - -@book{Schrijver1986, - author = "Schrijver, Alexander", - title = "Theory of Linear and Integer Programming", - publisher = "John Wiley \& Sons", - year = 1986 -} - -@article{Tarjan1972, - author = {Tarjan, Robert}, - journal = {SIAM Journal on Computing}, - number = {2}, - pages = {146--160}, - publisher = {SIAM}, - title = {Depth-First Search and Linear Graph Algorithms}, - volume = {1}, - year = {1972} -} - -@TechReport{ Omega_calc, - author = "Wayne Kelly and Vadim Maslov and William Pugh and Evan Rosser and Tatiana Shpeisman and Dave Wonnacott", - title = "The {Omega} Calculator and Library", - month = nov, - institution = "University of Maryland", - year = 1996 -} - -@TechReport{ Omega_lib, - author = "Wayne Kelly and Vadim Maslov and William Pugh and Evan Rosser and Tatiana Shpeisman and Dave Wonnacott", - title = "The {Omega} Library", - month = nov, - institution = "University of Maryland", - year = 1996 -} - -@unpublished{Verdoolaege2009isl, - author = "Verdoolaege, Sven", - title = "An integer set library for program analysis", - note = "Advances in the Theory of Integer Linear Optimization and its Extensions,AMS 2009 Spring Western Section Meeting, San Francisco, California, 25-26 April 2009", - month = Apr, - year = "2009", - url = "https://lirias.kuleuven.be/handle/123456789/228373", -} - -@article{Barthou2000MSE, - author = {Barthou, Denis and Cohen, Albert and Collard, Jean-Fran\c{c}ois}, - title = {Maximal Static Expansion}, - journal = {Int. J. Parallel Program.}, - volume = {28}, - number = {3}, - year = {2000}, - issn = {0885-7458}, - pages = {213--243}, - doi = {10.1023/A:1007500431910}, - publisher = {Kluwer Academic Publishers}, - address = {Norwell, MA, USA}, -} - -@article{ Feautrier88parametric, - author = "P. Feautrier", - title = "Parametric Integer Programming", - journal = "RAIRO Recherche Op\'erationnelle", - volume = "22", - number = "3", - pages = "243--268", - year = "1988", -} - -@Article{ Fea91, - author = {Feautrier, P.}, - title = {Dataflow analysis of array and scalar references}, - journal = {International Journal of Parallel Programming}, - year = {1991}, - OPTkey = {}, - volume = {20}, - number = {1}, - OPTmonth = {}, - pages = {23--53}, - OPTnote = {}, - OPTannote = {}, -} - -@INPROCEEDINGS{BouletRe98, - AUTHOR = {Pierre Boulet and Xavier Redon}, - TITLE = {Communication Pre-evaluation in {HPF}}, - BOOKTITLE = {EUROPAR'98}, - PAGES = {263--272}, - YEAR = 1998, - VOLUME = 1470, - series = {Lecture Notes in Computer Science}, - PUBLISHER = {Springer-Verlag, Berlin}, - ABSTRACT = { Parallel computers are difficult to program efficiently. We believe - that a good way to help programmers write efficient programs is to - provide them with tools that show them how their programs behave on - a parallel computer. Data distribution is the major performance - factor of data-parallel programs and so automatic data layout for - HPF programs has been studied by many researchers recently. The - communication volume induced by a data distribution is a good - estimator of the efficiency of this data distribution. - - We present here a symbolic method to compute the communication - volume generated by a given data distribution during the program - writing phase (before compilation). We stay machine-independent to - assure portability. Our goal is to help the programmer understand - the data movements its program generates and thus find a good data - distribution. Our method is based on parametric polyhedral - computations. It can be applied to a large class of regular codes.}, -} - -@INPROCEEDINGS {Verdoolaege2005experiences, - AUTHOR = "Verdoolaege, Sven and Beyls, Kristof and Bruynooghe, Maurice and Catthoor, Francky", - TITLE = {{E}xperiences with enumeration of integer projections of parametric polytopes}, - BOOKTITLE = {{P}roceedings of 14th {I}nternational {C}onference on {C}ompiler {C}onstruction, {E}dinburgh, {S}cotland}, - YEAR = {2005}, - EDITOR = {Bodik, R.}, - VOLUME = 3443, - pages = "91-105", - series = "Lecture Notes in Computer Science", - publisher = "Springer-Verlag", - address = "Berlin", - doi = "10.1007/b107108", -} - -@article{Detlefs2005simplify, - author = {David Detlefs and Greg Nelson and James B. Saxe}, - title = {Simplify: a theorem prover for program checking}, - journal = {J. ACM}, - volume = {52}, - number = {3}, - year = {2005}, - issn = {0004-5411}, - pages = {365--473}, - doi = {10.1145/1066100.1066102}, - publisher = {ACM}, - address = {New York, NY, USA}, - } - -@phdthesis{Nelson1980phd, - author = {Charles Gregory Nelson}, - title = {Techniques for program verification}, - year = {1980}, - order_no = {AAI8011683}, - school = {Stanford University}, - address = {Stanford, CA, USA}, - } - -@article{Woods2003short, - year = 2003, - Journal = "J. Amer. Math. Soc.", - volume = 16, - pages = "957--979", - month = apr, - title = {{Short rational generating functions for lattice point - problems}}, - author = {Alexander Barvinok and Kevin Woods}, -} - -@misc{barvinok-0.22, - author = {Sven Verdoolaege}, - title = {{\texttt{barvinok}}, version 0.22}, - howpublished = {Available from \url{http://freshmeat.net/projects/barvinok/}}, - year = 2006 -} - -@inproceedings{DeLoera2004Three, - title = "Three Kinds of Integer Programming Algorithms based on Barvinok's Rational Functions", - author = "De Loera, J. A. and D. Haws and R. Hemmecke and P. Huggins and R. Yoshida", - booktitle = "Integer Programming and Combinatorial Optimization: 10th International IPCO Conference", - year = "2004", - month = jan, - series = "Lecture Notes in Computer Science", - Volume = 3064, - Pages = "244-255", -} - -@TechReport{Feautrier02, - author = {P. Feautrier and J. Collard and C. Bastoul}, - title = {Solving systems of affine (in)equalities}, - institution = {PRiSM, Versailles University}, - year = 2002 -} - -@article{ Feautrier92multi, - author = "Paul Feautrier", - title = "Some Efficient Solutions to the Affine Scheduling Problem. {P}art {II}. Multidimensional Time", - journal = "International Journal of Parallel Programming", - volume = "21", - number = "6", - pages = "389--420", - year = "1992", - month = dec, - url = "citeseer.nj.nec.com/article/feautrier92some.html", -} - -@misc{Bygde2010licentiate, - author = {Stefan Bygde}, - title = {Static {WCET} Analysis based on Abstract Interpretation and Counting of Elements}, - month = {March}, - year = {2010}, - howpublished = {Licentiate thesis}, - publisher = {M{\"{a}}lardalen University Press}, - url = {http://www.mrtc.mdh.se/index.php?choice=publications&id=2144}, -} - -@phdthesis{Meister2004PhD, - title = {Stating and Manipulating Periodicity in the Polytope Model. Applications to Program Analysis and Optimization}, - author= {Beno\^it Meister}, - school = {Universit\'e Louis Pasteur}, - month = Dec, - year = {2004}, -} - -@inproceedings{Meister2008, - author = {Beno\^it Meister and Sven Verdoolaege}, - title = {Polynomial Approximations in the Polytope Model: Bringing the Power - of Quasi-Polynomials to the Masses}, - year = {2008}, - booktitle = {Digest of the 6th Workshop on Optimization for DSP and Embedded Systems, ODES-6}, - editor = "Jagadeesh Sankaran and Vander Aa, Tom", - month = apr, -} - -@misc{Galea2009personal, - author = "Fran\c{c}ois Galea", - title = "personal communication", - year = 2009, - month = nov, -} - -@misc{PPL, - author = "R. Bagnara and P. M. Hill and E. Zaffanella", - title = "The {Parma Polyhedra Library}", - howpublished = {\url{http://www.cs.unipr.it/ppl/}}, -} - -@TECHREPORT{Cook1991implementation, -AUTHOR={William Cook and Thomas Rutherford and Herbert E. Scarf and David F. Shallcross}, -TITLE={An Implementation of the Generalized Basis Reduction Algorithm for Integer Programming}, -YEAR=1991, -MONTH=Aug, -INSTITUTION={Cowles Foundation, Yale University}, -TYPE={Cowles Foundation Discussion Papers}, -NOTE={available at \url{http://ideas.repec.org/p/cwl/cwldpp/990.html}}, -NUMBER={990}, -} - - @article{Karr1976affine, -author={ Michael Karr}, -title={ Affine Relationships Among Variables of a Program }, -journal={Acta Informatica}, -Volume={6}, -pages={133-151}, -year={1976}, -publisher={Springer-Verlag}, -ignore={ }, -} - -@PhdThesis{Verhaegh1995PhD, - title = "Multidimensional Periodic Scheduling", - author = "Wim F. J. Verhaegh", - school = "Technische Universiteit Eindhoven", - year = 1995, -} - -@INPROCEEDINGS{Seghir2006minimizing, - AUTHOR = "Rachid Seghir and Vincent Loechner", - TITLE = {Memory Optimization by Counting Points in Integer Transformations of Parametric Polytopes}, - BOOKTITLE = {{P}roceedings of the {I}nternational {C}onference on {C}ompilers, {A}rchitectures, and {S}ynthesis for {E}mbedded Systems, CASES 2006, {S}eoul, {K}orea}, - month = oct, - YEAR = {2006} -} - -@misc{DeSmet2010personal, - author = "De Smet, Sven", - title = "personal communication", - year = 2010, - month = apr, -} diff --git a/cloog-0.16.3/isl/doc/manual.pdf b/cloog-0.16.3/isl/doc/manual.pdf deleted file mode 100644 index 89a2a0a3fef5a6568f4a76b9b345eae77c54098e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420168 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 z≀J`}oCd-K95W&jK5lUyTh?%i@@(&DwHdUYmo0pHo0c_K%j%_czoW=3I7LW+}XK zi&-q+r8Qn%k_RsvMV8*K_g`(j^c;)G!j7&Lffn^|Z%j%!^4INA(V2^tBHSuXCwNZY z;k~j@xb)%o;@;g2id@o?53*ByWaDaH>b7qPSbp%2^K|xk-XH(W&HVaZ>E7wqPw(v} z=V#T$sZWvmze+ABW$yc3)A#+U-dg{W((c7=8=iD^2Q$yadXcso$@MQ zbMqyw)K@=0-SRT#^m`f4tD0n0xo5@M&D_?KUtPS`mgKU=%{%jay7K3n*|~3%w(hum zu@-?3Y-d_-GS+dG?-w=KWg^)m6DG3jO_Z?8wH|{T5=+pGqB+ah)%`JBBk6|Q@yX73BmEv8+UH!a;<&$vxm+UNKS@4{xiq{i+D_8GU@@A#NZ@qP1t z8e6ZDzpc^ZwHHfgy}IwEuq1NNUAuEF4bIt*E>HNIS0AtXy70iy8%)RD0}mXURsWac z#1wytPo4|D?J0<0)kvs$^mU2bBlQO!4=&g|YweVGjhS?4*1M$I9WnN|&J+~yu$g5Y z)9~UkE64ZD?{jB=HxaO(wVQw8vAwd5cRQxfe6X==r`=C^ziV4-;$;eV9egcseJj6b z!u@WG*R}E~KaOTLwf9)>kFHWm$tn=pvFGIOJEwNvIW?=<@o2x>wI?^8RLd#woG|4x zFHe8jx^VB=n>9Y?;^w5^4DJXxe(-Qzn?V=HWM5vc&QA}|D(Y%y7+$h^ZF_3b%k94< z?loS^ocmg5j@_9jb*@tS+dWsdgb9fjZScABneWX_Gwx|oSF@z2r|zl@IVfI7uGKYiA0-Jy9{4JaBvHR(5tH!dz>1mfZ+A4Ef=B(%R z;rmu7_Etiw%-^yCG3fI=rpgagw+m{%{&}l&q+VFYC-Ak;>h^p zOecRlcq#KLC)C0C+LmV*rX5UWxaK^4TkVVc93`*SY(oyGxG@}8+mUdKY5D>82a~og zz3{6mWxBU5|0nfGj`8EcbQD7zhl^{A+qOU-CKoI9FCtabEJ43Fkcs<@gVo~SMD3aEth*= zcQH2wYF89wEt*m?OGZm0$x-{`ix9^}VGsOMeU_LS1`B`v{oUc(q@e2}93odur9XOH z=X?`zG(e=w)BnZMGs<-aOGKjLbd;R63k4SSGdcc_T0h0O@w6mQY`)2%nFn6-Y~7an zH+Q|PMdV|HAYP zu@&5jizMu#GqQZF zKi_wGnQU9Zvbg({{~C@YA6J3rVJwErlse|e2_BizrSNY(M;?z&tl*LJ>p7mc=CW{p zJ9SWeIh)t<^1Sp7J9FK>=YLn!7;_L8m<@11i20e=yJ~7`0VVXoAy8V zDLlk%U0N6*)wIx-97gLBR5hWrE-ef|GbY5hF750TQu9*sld`xh43Q@fToj@q4j{5o zVQ8p;ayc!UW=NyL$iP6)*vJxNMJ>e9)M->8Rqy(4mdK3?)Mfxm69Z)#E=m&vb$Z8G z!5FeXMS-}c1M;=G`p~9>k)^32v5RQ0Mn~u0J|SB7ef(!)3j|%UtTU}+V zFW#+gt9*Uvs9VzCFJFu#5TBrR!{W>O6b+aaYvc_V8J^ z4YvIKwkal7C~(Sm(STT?7?wku_U-)h^p*U9^HT&;Tq26MFliM8Zkxt2BUNzoET+9} z-&umZetoYy)>0Y77v$h(nCr=EbR$TK?@>{Ug^$N#PSv0$Kcz+G^E|pbPAD|}Y$<4Y zc)RZvf1}pCF6G=4DXRpOb9Ni`lxuhIKRJWxoh z_v`iQb}JaPsi!zuI{QrSOc6A$0Yx-Ys9#vp{b@JbgNK4Uk3>qf#-g?h)cX3AbRn#@)>H7io)f>Bze?(tp1 z9h@_@e)bkue#q(7khn9&sAc;riLiAZwlmb5o;~0ZoX8zJC0n{9Y&uWUgWSjUe?OG| zi2Z%AC^vbQtVZsW#vP%*ZpZylTJmFZZ9-T3?w^ZJ75JKb&^;c##-n%fd6Dx*rW>l> zhTlJ0e443g2lvD8uk!A(=?e605X=0tRdKFR9jdahe>Up@>#-8X8=fb!IrQeVtvMmY zd$8fMz{hW_+fVnZZ?L?1xBT0-S?3Qe@x8n5?}t5c(Z3h3*=#Q$S)n9q61v3uz?HO= z=ZpoKU0{r`>zzOj@)u|JhgdiX{af z6_xW>X|$X^VaT#89By+%pr^+bYdmT!Fj zCaSb>cBHmvNcQwukxI_HlAjx9e~Eds=0k28TVIDlbklv~*A4zFB9c@NPcE_B^H}pR z&xzQHj%g9<@0QybPw7v4rue#GQg`r-pI5a{JZaKt{j<=&jn$&vK*6L_LTnFf_Ow?Q zmYAh+O=gv5-ptqWra0`yA(^cTf~UWjX_q9IHGcOkW4qXT@O- z5pb@4Q$SeYW%K?2c&r2Wo_?g#>3Lr|`0}K=N1q(pc{NA;L;mJ#CuhnfG=Ggbu%xn6 zxM~hJxBcaggkO9~$HZ9YZ??%;Q)Q!aswIaha7tB4p7Dc=OZ?`&ZC<><(pF`*Va0D7 z*Q*@Ce$yt**km#L#)&|kBmT#nY!^s&zAgUdJ@IOfcJQ}1eqN<#%6S%jdBHPbvZke~ z(8-(=y)E;<^RFn~&N6?~#JOcXPn2FwajZP8INQqNkaPW`<5yJ^mOZc-R>a0KQGpN)L<_VJ#hRQf7sVGJ8zy9h+A@W(JK43?+b*HLs+cb()1+T49E8pBMIqm5wbLqqC&r0?9r`vtqb~?+fyn-=L zZjKz&?Srk1^mBS-U;L1nR_T`u4b;pBdf`qt(o{PB&J8U%gk4C^0c*gRqA|RE_?6D zw8?z=vs)PhH~-8{Yg-cgb4H{)fA8Gwv3rmA$R)Y)7&=#fe3*Ksr?+jfjY{OHeXHl0 z=DjNo_+jkhDfcEwu5;~^qgpEK1s;7r)4(@_@q$Ke*7+6F)q4sjrpqT9>%>H7TwPcE z+l=esyW6E^_aEgwKDKR2*;^Is&DQIhm*)O@c$&&#s(nsCLNUky6-~ zg*hq?ER#+otL3R2+1;@!hV@zf`Y_%Hk?T@EK3M&ym^w}U>{jijXJ?mv4VC$>Dy@I(tkAT`wSQxaXWv$3JpcUHl+s(b+EzZg zRit&;!A8#|C%G|qr&Ajp1x=&Y^&c7_$P*;(< zed+e-PZGP`ilVmYIxQ`eop5j2+PrP4k^C&bj^;VM_1&v|%_vriZS|Y7A9g7l+U(Z| zzgIm|eEV~QN64P(544`&?K~WJrKRcCz6;HZ-^-u={Zz@oL2$|1donMVH9PFMUHT(i zj=TM^;8NjcZEeNVn#C)2&zUA!^Cj%|!gU+v$|D+jEwmKc`nY=T$DThd>UZb7$)N*Vu`W@ZS^`MT~;(9<`pJjbS`1t%p>t(Y5kVP5{`^miP*GAyTLzg;lA zxH`(%vh9oCx(L3A#WJ#@@ku>@_j#VbwxUrX*}wl5|EG5y1`l{+xAdO<;r4sqs=jlM zzxbA2Q*6$dYg?apJoebte@m9kExPX6I=lVT%ODPR?Ve9>r6h9KU4Qy*?cFci&n8{8 zd1Du?H@$B0_d>g~UvuA|)?0YnIp>|yc5AH-+(!i!{@LxHd$xjU_F>NGHj&_i!AJi; zZ``q&<&L;a$L(}A#=rAst}vZ_yK?CXfw?9H$2Z;mFScRt|Fv>Wuj^mmKIgIX?!|-7 ziHnaY@oy1-Ja=y+YrXe`hVg?a2-jvKvv@XUB&x0y#* z+|EzVH~ya5{&>4|s@a@dpO1#5clR;hwJ}`v(e4||;at1h!NsRm-mA*^ZzDfzNyXm@ zb@L9j?rSq)E4<_Ve{Ond)&r&rWK;U$6I%`|R8gzF4|uSS|@h@0x*|{-|9uL(sr0;jWp5A*kbrd?|&60ca6j zkOJt+0MMcP$QKqvL%|(&0r~S*Y)Z z(#N$x+`g&rhPrAIX}F!Z?k~!9(9rI$v9Xx}vEARd(cZ;Rwh8Y09p00__!HN$--*}d zCQX@pYlqgGkD`2`m;0>05R`y{l3!=qQk7BGvovSL4Ce zyG7&v{^XXKSHI`yqu1|w<3W2!SI@rNWzaU|ingZ6BA+#R+g8uN=DK(9u4PQ?=X?Fn z$=khXRqgKG{Bw^!POd(BbXR4xtw`+EE8+il{5DU#gxTcdS1$-)W8fH)F9I{GQVeOi)`S|JjTu;UYudjt74m@{L6-l$yRU z&oho;V3peJXrw)fBinGD#%7VO8A{?hZhm6SmpxKMF8@uM@pJ~u%SUIrG>u%=uUi~A zU9Z|o{OQb{lTzoNEA4EkJNapG+tT@0XU;bimCWN&s<@FoOV#Pjfur`uF%m8->!!C3G3GhmG(AXHH&XfNxt9lBwWnPc{j9TJX!6U-xlg~Z z*4eMLdyblWTCu;QH4l-32=P7+GD{=CyrIloZgcaPJ})XU`??fzfZ_;S!^ z(+tCt>5dum?n^djt^MRupwGN%#(_DZ*Pkzlo*NwfPjXlMB6al(zW1ef>EC3k8_W|$oAC_^%ZhvS$ z>vlH(J`w37D_9d#Tm;%%pA~hlTPJzq$uZ%LH}1-OSG>ex^liVS`VOV<@rW<0v2A(mv3 z|6(P(v(7{|c^(DEzzv~s`#coNN_`zluhs9;H{T!jb?)|G_xI|W#m36<%@j>;5a?aP zW%#7G)zNKh^D>pE7NPvJ8)Vj8@(r8j#xJ!cJIa6iYxNhmm=3*Jw`&o@4Y5?`|7rJS z`f_K^oRqNPOiIH{`S!ObTX!4XT-0JXL2^g<^@|$po6A1kKG4End^-0|5#(j2aPkoHfD6UZ(?5lq{Nr0?_!2{-Pr=}zQZf{c5kcv;KKa% zvvlf#4?XXG@mn4^%;7D|EO+8&WAp5lH-B~>`)X2le%_|nflQh;n_O!)xmum`cp`Ro zf|AZjkB0EWD`WoeU1e^0H$kD|uwMMq@Bh!-`W?Pu>bd-qtQ&EGd-&qSnD6)96mfr( zwp57Sx4`Js2_}W|5|w8u3*+>g8h1H1vfbFKK9+^renqHc{zVB{!pC#C_t{} z|F#;P*K4;Q`0&c6T0-!n<=KOh8Odf7?;Od~JgLNbu91JS^Ms9+_uj1bJtxf4lE}O; z-0`v{) z^-TWW#=vS8s3Pzoz=loF@xQM8zomDk^QYdeWUFpl{Vw2Ld04PYZ1@V7oy?vZEUt6* za<3K^?+lu@;g@lujdqdkFTH%HyvWBhRBt3r%=?pKRIr_AW=q25=9TQcn;nw zndO1kOjS|Fhmus6@+hra0G^$$B8}{|v4$oMQ+p=HQa0zbpjb?5${LpQ) z<03=eG^ZKs{=AhqabSMZ`|U9-vZ8sXe?K~K`0>6iQ<$SS|31$mv)OZk?RwTbJ6k)W zEkABE{3w?r@ztvOpYr#w$ItxBI&y5$1^>hbk6a$p1C!Ef422R4xDNjBVVgHM&&<&2 z32Q^4*8G-yZV8^G7}w>dlS7_sh&^CC5bQW1UukM^O6(8!^|t5A4qGeSPrg}pK0L^x zm%U`hXD5X{4BLJh@qFIcbMO40?6C=^ydrwLU+TG&d*z%(N(iKgqre#hdPA_Kq@NTZ` z&v@`VV^zehXbz?~_tbPI<}5nBV#?C|PrJC>;tyylpSpQTU_s^eP*(A<^@{75i$g`L zx4-Fx0~&}-Dw&dwHj!(tIani5Q=7r)3A5YHdB2W%D!^szfGF^4@yVSFAc}XG~Uz`-96; z2R%+LPhQ9Q$W6sE|8Oji>qUY$)Z`RsS_oA7t1?ee#RB?C+1@9nyocqN6SN9zZOc&3w1R# zotyddOorgcbVQ_M#kY);*WkF_WkBvmguDy>Zg9)L;rc%Gbiq|VS5ioN1gK4P}vf< zPpj?ZmJ9ZlMR!zf9i4xEap_&`5T;eUXd3?^mlrlNEOpQFSdt}$KkPQhS*CC(sV)9| z$cvksE-SnH|I>^1?|${#>`8i(S*JJWrN@b<#jS2sL?3gvjg8EoyO{6bx8SRHZ;Qp* zi|up0_IuO5*YEfhS2J#WX0kHyU)h__e0vxBKby=|U$E3h&G}J_q4YL;hdIR`?uJ(E zdeG8&;K}2Af3KXV+wtAd$7&V-Dw(^N%#VdQUA6t4cvDN^>4NGc&#ZfKeW@&pq4Lwz zxh0o<^Z8zWe+kQ7wagxiBeSlsE!kS%Hp{dxnEBgQuE!2%1WbRGTqu6=IyruJqZf1e z_xZu6GUYsehXnp8m(IGqZuzG4)9M%60{q%#uN}T>V{`J1Snf{isMH6m&i53) zvO+y|+au3&d0JP~DuZuUSf}L$dj@@+QY&;XtbT66&0W^p9MABl2DbMHR!vm!y+x4SMB|?7Z>vyOvD-~HJG+%1lR_*TG8P?^u zEM2`Op5Ed$Z?Bh3@1~Ps7Oaei=2~P;H+}DKVaH-@Xd)IQ9b*k6V6tyy2)u| zB>R^|f8r$3Lo-+RUKGt-UgEGO@6J<2yE`EXf9G17?OpnO*RTJ#-<)1lTGy!lNIH;p z;qxoMx{5{aE^=HIa`KAqtJ9%}=XNf=UERc_rN8VTuS=25Ue{+vmwnCu95`@)dB=_I z>!+Uf<&Jh_Uvyai=|QogBQbfm9Bkxzrih(f@IG(f5B>+fzjCpROBi7;{zD&^0QbpI z$0dx&9+xn*1l>TQU||HBIu25>FanJyfN019MU-(0uv%!3m%?!hV*^V)O9Kl96AJ@9 z3ky>PVJ5Z5^hKL*GF-9H;gOBo<62Cq&+I#Y2@F9mV@)C|* zediVP_bKXud}CihT4~8 z&s={it^9|B>FjNptIh`G{#9RdC*#U|Y-!*$|wrpq7#15P2oTP11I*Dg@w9ZS@dHMX#gEi}JeEL

s!x+g@(%&SRZ}0?ak}6bEe&!9Bnjl_N4S(PkHB@%3E=|`LTfBh1}JAKbS@0 zVxL>ind{=Gu)fpmhUK{hyq_7ko~9MQJH;#1y!l1Xi8-Z~b9a5){>y`>DD?Ow>-$CX ze{s|n2;I6iEi2#tg8sa#l@6MP&8N}~KW`FPH~Lf6?%Y4`H0wl_*~Oi8SH;qgvz4vd z@UZBH z=ATORzk283)vvWzf8SbX`~KTTVGW0m+@C)l&l9pv=8TxXEH&tWL#S+EQ^>@lfnseM zdrd5-bFe<2bnH#mlyf<1TEN{t8q|F4ixO?xo zuAip$`=i>|gGC&^>t=rRQe8G<_EO2Li)OKZ*UAbkY*-rm_GEWUMA2NX^gnB4_qL@- zu(LXN-u}gOY^s{?lvDQ(<-gXco_9aY|4_>x$+~DJx#~;#%Y$1!`hJNx!=fZp$6hvd z_QNw5q;}p&ib)bx_Ai%_Qts;5*#0%=quCmh{G+F?FS0q#+i+U-@0aJd_erggxq3#2 z^=OEG@hh!em5N;#R>t43IhSoG=ge>?By)$%;cX_$H>Pd6d)O&_rv80B z?tIn@mOc9?ysnx5SZU@nQxUJ@3I(tJZc)x^^5FB?cIMf%hudV6W_UT8=x#E9*giLL z6?d87oZhYLt=_Vqo+rYHhF^k$_-3M zEdE#gvuW7Dshl^p(WBx>?uxf*{a&ksIg+-AcB-EClU`*Icf2e1YQnpP|Mc0;-e{0H z-lp*L!K%4alAK@4*oN%vVKYxo>FYgyZTq2ywpVSxw~DNucD?i^ulp7jhsn#h-Nl#K z95}IS596Pv(@fRX_X=JyWVz*wr7)~`JcF@dz9SpMzPVa{i?3!~pSs-EwBN z>gxPeM_xH4B?W)wE~@#(_A0GTJYm(*pfd|k zCm-A2#}TpZ%VP1u2^vq5Pd7SWdzrH{UQcKFp{I*piuELaz5OP4TSRc^?R(97oD*^c zd8!^4Uzg*PS>^6DNk+}Yf1{KANv;64splgOhAqwS&v|+w{Y!_1gI(Ty|Ppo@OjtjDfGRmZ$ zykfU+{;qW4m5o@4$CO5`gcu@#Nty4)tse_pvnxz3e&7VyvP zK>qo;Dz$7s>)bqNoY`1B&uaS|ud^0>-X+sRAGTXRQ4UqsIdFg0?uj!bttPyV;gFxY zJo1-ENZ;C)Wrt3(v0uCMDs_WNXyKfLf0dgG_piU(+i_OYr!ii=A!LbeLTAz~nf%OK zc^cB^9vPXO4F9{&R({8x%-!o=HO~L@c8{Xp8+-q^3-4Z)E-z#i?ejR6Zpq%tFCctS z#o9Udr_9!y4vH6Vie`QFUoidGt$>XWv=>EqBrS-z@N%D>%!-m%x87C;yL!(4=IovM zVUO(PCFv}$Ee}>X8VERSV~ujF;cUNg;eADzm6z?TR*hRS+m~!DVPCnm=*|k+5_#>X zEz@e9Z^tk{U$5A4$*yxsqli%3flQgU3z7{90ZlW{>`L1tVi0&BV*7=CxAweGKQc@3 zcq3OU7szGeoA;#SFQ!2BKB>X}S&Hq%O$39QXAroyBd+D;@>RRDcQ3ZiSp0(L;dFh4UM}B0qfZY-m5u=zo}8I%+1uO|EyreeB45$%wd}p5tiT{^f@@da+!B0PRoPONezusTH{`~#E zz_PCo9?h4wQF+IHsX{~P*z+{E&)aQe9$kLB@RnPRrtp`;4nog+7x{^{pDnt&Wl79R zDdl8S|3$l{xDEs|UMx!B_0HM5l+DUmqvg+G&t%KO7te|xY22=SrgHkMy{b!7fvHrY z{fT4I@|QM0wY_|9P3b<*==!#6Yj#y_mtT?Ruimq4&poT<>RkGsmnS$>C0N`{G*6T0 z-hQXBvEoKwi*$5W@6s*I|2D-Nu68apFNm5mH|iN@h-HLS%DKu9%_n4MP4v*Y+|4F& ztbEQCt-`#EWcKKSjl~X30 zGyStV+p=oe*Yazblf=8T#V2gP?Of^tx+`_c^0>TD9~5GkANR!cvuU_1ykH2OH;M7| zPnnHLm(140X)Tj3dOm$kh0cit5m}o|9gz+tqa!ceH)w9V_xVL_=P99c?q;t_GP2F; zlH{^>`rS5ebkLc6#A*B5dU>}qhs^wRbiY4rXcoAa-*Mn?$3;&uR!h${#aXYUqJQmu z+PK*DXsxH|E=x!2miYI7H)h2zEMUogtn~2KlV2`(xQ^VByv@R}!BUZd;g-Xi%`R<; zR(giVQoeAt$hRMnVJLfG{4{b-bBcis&%BMdCnm(^2yNc*?=I(wu&c#&qIPqVKM8$r z5SUWC-M%U4$KDBfwvwS5lLOCME;;s6&~{4cbDfNL8*i>`TDq)t&b`L}xhv1tn)-@$ zH{O|Y*5LcM+$-hUaCRrr$HyGe#WuFM1o!Vx8}N z>*$T2yrI)LY}L5_vslILUg0OEQyB5$n$!Xzd&d$})Bj;BdiN;U&No?@dPQks(w_We zO;6=-R#!Xco>*}C_)o_qgPFaqr&`Xx`1O0Elki6En^CW9PQF$8&M@)vGoB^ZCr_R* z`?KTP3dMgf(~d3=mJ`xCvB*GGivL{Vv3Zv~=c)ilkMt1Et+eR!8tWqx9_ z>-K4<4L^U6R$0z|e5UUEhtG{>oyhs}NPbbulFcRYe+-(h@7mv;$}5_{_p|5hjOAvF z<9E$GdQ!sn)0fjPHb2U_)3IkmbbyQDUZ<|-r@-)Xu@2g?ADF>+THvON)ffCt{!NLU8M+Xh;Sb$7YurPuS{1`(AevF~=(DSBI27bV1Ks&)C5B#8x zUw|$uFfzAL0FAAf7#qU3q?(wR=ow=lTLBMWgd`SaCFU7gnqv&EfIUVX$HDfaniv`C zS(uwB7@C6jqna2S>0!UFfPmACKw(X;(?IcoG^S!^tY>aytN^-8!P3k`0d!)Vp&97H z2Maw@BO-30z}UwNP5{(#oUy5io+apV0%Hq3LkkN9V{;QdV{>B#V-pKKGeaUAXNVE2 z;ABZ1*BP0BuAwkhFtRiNUsYgaW~OImWTaqh06Optd&Hs+M`4UdfinwrTxV=-0KP!g z$k;&7)Y1?)(48D;9*CoIf z#&~sGTI!jY87Y_<80lfTkk-NkR7~Qs8no)p$jDs5!~zsd3g~CxS(t!E2XSeJouFrE zVXS9thGhs6T=qkCQ#b^PGG>Uf>deGK!N?di_Yedcsl<6a9@5Yv+7@l3rDgi0@6blM zyBazIX=-Re{0QXSyZLwArX9WiH~h<8y z#JgGg*^HEZi6xgUehQv+kD6VR{CrvB4EKroT*=YPwl_XjwL-B$Txx67jUpGMM)SgF4j4uYOJB8EMBys=U#M=W-3 z^q1@QNLt*nxBT?%#T}YEZu)a}dpw%#wnT213#TaKlq*rQYgD~n*fvax%AUL)NoWPf zf+g2(J<$$ya%E86dQC09Q%H+RW93$}pI%cw`0*}q5tROFpz5`Q3&e8O2|N_apxSj~ z)qK4GFzd$>!IkVf*fd|L#xO5H(7|)<)|26jTDlm#vex?U6H?t1%&ZZ3#Ld>HQ)nF% zh$ZMfr9jl7Q)%0)<=haKU8c*cM6W4WG>5PR1ZC%bnyRtzJIp+UkP^(R@2@a;iEIqy z4_?%=8q7K(q#DB-u&870ua`^^mcP`*Zx4i2v1o<|9U`3G!$K1-bjaGYLC7`d%Hb&* z54Aunk&P~#;fzx>l2+I4asabHQDM7;$Z$t^^&T@xQIW}wH7XG1!NVPkSBVLy>dBI| z`yS;btWw&}d_8G#$D_7{RZ8V7VCKApRZ8ZpVCJ@jRZ8C>%yS^MY+%u6AhqmZ=D&n{ z=O;?Hh;9wtuAC?M%&4e;!=i0on(u_385Pamu*mH7q0`c>JA3YEu36zfds0+DL)$8j zjI51;E{syEloqT!>L$pVv7)PCnV7Vz$byAhOtYeLL;|rXs<3x=SiEBGE?Gt?J>>;~ zSHd(|Gj{YexCPEGeW(gy&9As|Msc>x{fZS%%re>=16?eSd<D0!)b}f?|8-=7@ryQ2$56#$QZue3uifUQdE7QgQtC&<>a)8F48Ke~b>YVGs9gKLnGKGvUKJc=9#P(J+YKkH zi{Ad|k!9aC(`Mz3KKDzaZ3dGy!*4T2?monkR<=}Y!h|i_JPB#xtC%=Fv!@uSnwKZr zczJ{>C}#EwJ&Rj3d)G$|#n8r#R=31-Zq=5=aPPP5QIpf9%eG#rn`2tJEiv3XTq4DH8N(Zqw_M3< zZf@nZcHMnQAiFI0u-`=~Rh`7+>vC^sMlEhpeRBgOmpx@ei|p=giOVy3g{EytzHatL zWbMTzI;w9@h&Ie!v{jzlPkiI84Xc-ab3S--Gw<%GEPJ6jHn%sdUaHN*tRBoz)>YOT z_~6a0wz-R969p{L3<^9XR0fta^@=#u7khg{@D?{t?;9JlrOUdmW!#z}RQ81HfZxSi z{b9@3JA-X$z6!M^Y%bK65U4GMufQh7CeE-T$(E$qa9fry*S`jG`nSU`p|;GL2eoA> z)Ru`~ptdO3l4Q%Pxo}&4ERWs-_6zers4e&ALv8s6wPoW!s4Xk(NwTGA0nC>3o(I1F z+LpOIx|`{;WMT#*pM6SFTCDB*D>+-vw3P} zry`oxZ^)hOFD#v^b20qJwwud4dyS@j(9XI2)_zK z=hz=klSwQI32S4Mf3Xy?Dnw*opJCe=!^m~*R_HQ6g=m)Mu8OHMg>Q&ISfCV_`iSKl ztHX+pwN6|@oAe!=TysQ&7EGvR6wyjrJ)x=f4flos!RS^IgOqrNwyqmlZfcIspIkFm zbX=eDq|r@>$z;ve>@y!7)-mvAzm*EMnV{`(IBNH)KYS_O7Xk#=8|`KO&14dCWc8VM z2lg@Wif#<`aCH90ngO;>YLmW$GswCN6KWZyz}B_B;l2!|mL~xiE39sh38E z2PpW~20A%9gMHR3*OUhN#DuYwdU4@E$@=1z0NCZ z=9gQzaFMB(hT1N*@PuWrqq3(2oGJBPcOd0DC@kl^o0T*1=Q>bwFnnzKn<+R>J8AWV zq)XY~Skv}~9SKuBy65^EZl9X99c!JsR<6G(KI3;3C=qUs->h%&cPl7@)efY^C$QzX z=7kgKx}~iPZ|K2&w$_OY zJ&`V+FsbbcC~eO-OOd!^@$F+rTVYA@th5erB3Yog6O<#|I9Yj5f)cB#mqw4|;C#rA#fCO!v$N+j{y3T(I}r8=db#b$@nd6qR>+&G^GGxD!Hk<6&Q zHt^75c4oPph3d@Ll2%XnbhF_}w~fpOvFO$*{p>37PkuIRy`iP!zRAl#K~mMR%GwO)3T@YCQvbfB?wo;@&vwgX2zwN2`K_Ho%weDp8LDR(SF^zc=US$NjG; z|N6yd$vYj3|8HJaez|+I`*rQhcdx!ZdVKbG`R@9?yQ=?}eSg>ge^15l!@7TCiymLz zzwZaXS6Rj1SGQZOr#!GRFFv=+lD{}^cjEL1N57tJ-+S}2#XQc#hx6@X_W#d}ud4li zW%=fA`E~hv`g!^F_g;V7|L0rg{BzSxZ|QYjJN5S3tMmTP3s%I%|9PC%xhHa#o?foS zQ{(FW-Ct^cp56AfsJpi?Y7>7Y|Ga7at+UR(4{_GGR&YZ8{uWJ_`j>w;T<)AEF;~9r zjtl>--a~qC#FgJ3+Y>9gX#G^5&7WiIKUBHK>Abirv#j}ne(b9$2QK=~WBOmL-;tzP z+r@tH{Z!R2=hW*3{;WCn!dWNj#oODyFBklryJ^Cn*GCN*v?uq4yWQep-g-j3>+BOD z-2P7sj=5C~dnG8SC~=lD}#HN?xN&&nCZ%oV;?Unrqkm_nr?MLl>&-yKFzbar@Wn zUK2hGO#bZ6Kf!$IzW*(Ki(XAnn_YME|26%!xAaY|S^q~LPq}9Jvbxyrhy?qV>{s=@ zvB4tInF$tl!N1p8%0FNF)-ZI&xAw~V9ea1}IDI@@b8hWUYnIEqrtdp_e7$kWjMlRB zmy`K6x3TZud}r6fuYzkYN19*vvrQB2KAFyZx>iSLSH<_D`Wt`aZnm7e9Jaq^M>0?E zKb>E1?pwY;tgi6%q1(?m!!r{P{n;VLc}nZp9Zx-7qmsjg>*w!wio3O`?q|)Z(#rW- zyAS`&xPR`s=<}WNXLq+WB(5@>d(hWVR>yj;=kKR076{mdH@%&;Wy2q*%-U{idn8eE>i>z~RUUiRhcEwk`Jz$E^GPw{nYVu&{#`Dg7Z-Q;sr|h6 z&HcAm^ZYz}v9o@iOk8Bq=U=}b|0`c#w*G$1-MHF6AL7M#*T=rCuP%IDmOsr-v*hla zOyS)t_nAykO}x2&|D8BCi~H=h=l{&UT(|vxX8n%ne_#Hdme*e&r!-x<$$DQ$Q0(;` zdv5Ii`8)2@r&ouc-aUJtpG{nzMai{Z=+_kc!dKt-+wr#7HR@eI;k_GrC9@{%zF}uu@+VI3!Dhc%HXF1qe_YkFICx&iybVXH&&@ovs`sOtt)aGGM_$OQ zr51M2Qq=Ag8(7F3m3WuyYv-|ZyJPi-pmTdIYL2W5`yE_UQLhzbvq9}&#_ftbtA6BF z&iU%B+f|qMap8I2IoI#s`MmRM|BpL=R%!pgY>m-VdvU32|EtAFF) zm3Fvi z7bM?v{Vca@_q_f8FFjfQdiLq3?+(7c`}JP`C#Jtg-*tC>`t-+s-MhTFx9<)Ad^~)1 z_w_&Rw^erT*0gH9l54%d`TPHepMp;A&QY2->*uFO-##6`^LEev>az2^Qw}}4(|?io z^QD`;>*T-9y<7bMi%o0Ew>PivzW)CH->&N7fA4o+|9|s({=S;xFSFn0@9PMu*;c*t z=H5TI>oOC+e@gq`zI%Gz_f2;tr|hp(KQi&?Y4^v+FZvpu>VMXoRi!-balg;~70dqr z{(YBi!7Us9`4>at_x)6|+qcr@N=VgXo{Gm`0v@06fAVly*Zj?)Kkr1`TeUIkA0`vSF7g zO1JrT`}d~hcaG-ss#kh{myfskX@BCEU@4Y)I#ba63v|>KI_HHxPX`{fM4hKI1q~CE zwL#n%G)5exU;!P3wJ-tA6N2XLAoF)9^KoFcsBUx2%gZm}(hn|8Dyb|;RnYgz%**D| zcginHNiB*7Im$3r-$UP1-#HrOFT}i(v9YP1seuuAKF-+KP{G*JRL|JRLIE@%XM}w| zF0~>tw;(4Ke78BqhHS9&spB*w3qw6~LlXrP17kf4Q^*=|(8*gSh9-LE2H4$}mYH5! z1acb2lnppM$#od&tcbCRxt^JUrGl}6xgO{id(ix#g@qw_ow%71_QmVTnI)-uc+i8-!JXh%a7sZ#%x);rayFy%F)%<(EyPI`?$(Hk%uIxIe z!Y*(`@7wnK3(idb-J*U!_M?6e)4!*k9xZ1h(sCAUO^chAvUl$_p446w%{#KaCH4 z6+5Y7JnuBmw!(z{LT4m&d31`kRSk}p{@E{ee{I|J@{|0IALRR3%^B{j=J9*0UNED1 z^Nui2nRxwQ=`G@dcO{RRURT+bdhP++e8ZU)aZ680zD`BgVH z4!^A1=29)l;H1$}t^M`R)s`z~y!h8GJLte=>$0N9GL`j=QAf(!wQO0;KjSq&{wmqv z@>{fl?^WN+mpZ|`Tc$fMVBO5M%zc>=S4B!$)~YiG55I)m3|OIRU~@V^`E7WErH1vX z$L9>MIQ*W*;l@8ZmG#0rL!02qT-G|Aj~P}APq~z>)!as@|skJKFh(wt?swp zoQRrKou(Teob9POqxojY<4Mj{r>EE+j}pGMy~WDq${L5}ky3|`X)WswOm9Cc^!MpSKdHvc zhtnFrISHgC8g~^|-OvGR&T%vJW~#QyV!iE@3yHnUsK?l5WLZJYGi=uXpl z&e^WN{%c14SkL!g?tj77SM@uieCu{q)fay~%l=k~KUY$wu6Vk~j?Gn#`|}&mT$p<= zXVU!3{7?TT#>cE*@^EF!C;sc&sufkA1*U&AsVaD!jRDJL}$iX4e@$C2w5le&frG_S(XQYclKO>@ObD zdoOq6tCq3dUxp=WtlR!Nnq(fDxaHf8Bac6Ai@7Z2>9{NBzM`1J@&nQrtD1hsN%o&O zm-5p2pW(T@M&q+$qDv*Wd<}N>yv5r4cZJ4{{_C3xFYCvobaQ=uaOsc8ZjM{5iT0Zs z+h*^6S-3yif;+(ZPwhjU-6hwSE;#9G=61I4^y{;quQk>ruc;Pg`{>2<&SdJz^fQm| zAF%nf>B14uXPL8~pIvgI^IZBruiN&|12)UBoy_o#DfSZPy0q=o7aRXAcmG8>ORajZ z?Gb2n`Q@&auaoX3`Yk^GcHPSEUCAeWmcE~V?5lJ5weMdfK21O4vnyN9u>N6GvHN2q zt+Pum#rvEM=wEP2=Jl({bzP}5t6b-3t7PxUteiqAU zrGB~KuTFA^>23Uk;bue>?nR)SEL z#G1*9-4$Vlx|P2)l7(8iKvs;fRv;Sd*6wGcKL_S{-(1qfS@Z<==&Icg?EpOkS=WxvD|;3@x? z`?=l``E?U7CNw@OxzqNNx#{6~-gzvw?+WCOa2)>;a?74svS?b!yVNsU(mL{2c%DB~ z@yJ(=;9QZo^82D~(=B(%>|rQ%{lc{9%x}wIw-;6GaPcJPD;#zST(0V+{mhNOIn7;{ zBm0AN&Hm*#ngf;GxvrO|2nD3rtmNiv*}Ss-LGj%S5su0Nr_9gD&&m>x@qhj0_m2E_ z%Ou{NMHftEKK!^aJF5DbQDw|A1Lpyk`_z@@c6^-%(di z$D^$38+R12=xz3tYATl$-uUc+c97M&>9Vn{=Dr?28-mOyzBl{N`#I0iKR0lDp;QvX zu~nIM%CBrD=~#7dDY(D=mFT@k%kFJ@$NK8-M44+&-;CX_pWLMVt$A^`#8(5ou4Dyk zsmiwZY<*95OFVH}R=-@Ke_F8D@*CDWzx-pk`7U#p&z0M0!T%2JfpIvU) z|6OGf4{x>aS@mJ=>?_k6tef>*epSZh$tNA$Hswy?k-SAZkCHOPa^f`;6QAAuAY&tK zd)Do~3*YSi8~04IwS*df3isB#?r;^YDol{xB`qy0p#Gxa(C?hP+szM%MNd?H->bWG zQ4rJA+A~wO>{~Z$+P<3yoHuui9dqXtXWGTDaX@xYH0#OT{Pk*JxfY7JlUYYlcO_nbq4CN}9yyN_HvPu~yp3#FZSix|DP3 z+x2B@elK5m+R<#`>Bf^6p8AOIu5iiFoz7tMyyD6$N0Y0Su6#04TU|1C?2x;A_Mh09 z^RZi0e3Jev?W|u}U---0cY1QtnxgF!EB&0;6jiuw4sq#C`cWKzUrgs(Kt>VUyDx9K zEc@qeI&jr+{ga7jHY9)C?e$)TJKcMkXzcbg1ve+yaqo)B;9xntKfZ7Izs!e|+T#FuSR&z+sPy*qw(*LsrE-Z%%c;U+wo^;PnOJ7mMv)S^D18&*GBtJCow{JZ{IX zMz$UG(xQ%6CCnK#Oy_+5-CAsN*godj=Ip;bfo!SA{RJnMZIw=ruz!E$+-?1x^KDQ6 z6^WR#ulexHh&kVK-IKP)Zd@EG*~(qXI`94Wvx@t&3?3id67IN9a^2%%V@c-3%)U1! z&JPxR|7y&#-|n$kFavwWZLLWv>XPMuZ4JM1`x%`${P~dNhlJkUZx4yut#Dj&|NccI zNw-JmnJSoT|Iqw5`KFjg!{!p5Wq$&s4t=?q#86W`ZHdr~ zFMAF4bZ=7f+^v%Jh3mzM=Hl*(%tM@6Dr+pA3jVCSZe$Y_c(_f&NYm_laGm%3;sw>l zuckg+6o1Nb=83fU@4NKk?OVj0k7P)w^2Zl_JDV5p^!SRi=J&vmuGbI67qj#n)~V|a z?Q(qW^5^cK=S%bR*Zt$(IQN$(mf;CA5f|nbk3}1lFf_BWHLo1XIUzqEGmNX-VFD&%T zEpVJDhcteHeyOvC3CJJRahr*Wk)DZ}p#tdCJ7WWL1rt*<$Yr;nJ?~~X+*VkcSdy8a z2OeB8)dU?ik`(4V(2y9oC?|G24OG11(hMI@Gd0q)G%?3mhirs=WTif))sXem#>Pf^ zrY0sBx-HB=MLjONVWV+|76y7oCZHDhtO)k5oR<@jfoAu$z73zK}f$l+D z|GwYdt>2`w#M;{YrE~flWe&YE@!zeiVoEoi-8Q|?Kk?>gh4VvCqgjFHK0Cei(VUm< zwfXGBXK$+~7{+;3%HkNbj3t$dA`eWM>*{wu zo3iHKn=I=`7xHG8w`{1&z90YgcJz;bnY;g8U#qry)$8)Bb@}^4gOlFwt^N0O+R4zp z_v<&U|N3BI@$CwCm4&G*%`O=5v{}}DS5r0iEIQPsKk=sN%}j}dMyej`Dic#b9{yM& zCnS^{mg$&ec=~3v^8Wd+YfVkwZrpy@TaZ`WNPp|M!}WXuTKe4U1f8CCrDf0Jeqrjc z{5XrWs~*=h*MRuQN+Ism5jOVI#P3Y5ai8JwA@o^-Dc_SP`##UePnccVkRK#`dL>U% zrB8y!flFTeAKF#8r?8my3m-fuvTfO%r%Z3kd^6*`(%;qF^Jh*ioF%NZZq=Ll%X3XD zjNh+&vHn7(<)dBe>?>XCZ#;@*xjNt6+Pm&X=sE9Kr@mKC3rbqN!0M}!%*GjueXC_w zu`PLEbIr1<_>NiZUc)A~HA~NRYAl;&5qkI>@9y`voKHoC_#NzB&NkhkfZbpVr_2ShO7ui2aOuqnrJQnRua_m|x)@hZ{GF@Z}eW_5&W zEjVu6(fHuTMpa*tCt<5P)8hE8{Adb*)C!ko@n}r^K@wH zIg1GC;DlWN2)!0-MfGXcPnT;XI!yH3kZ|}&)~O;p{=IT?646!54l6L>*qmgm zCSWvk^`ttsV@r1&oaR3FpjV|2mrT>vq{az89D7)%@I2`i{LNX}Y?`gB=T^!l=3w%O zsb2ewc#5U475@zJn!3!au+b=dLYR9%zU+iKKO7qSj<@hgT6r2AE$*xg zWBGC9mfGV|m9w&%YLfS@okF#qpItd={`7>h&Pu0O%HEGJDEUlLyV2C@;rr~TcI&cv zswRJLbL*~M8FFn!;!lnGXy2DxmMxpuP{@(A!N-B;+|GiX9Z|=a-8i27R+CGxt5B7D zU{`!+x4&}*<4VD{f|dJtSl8S*wDtz;ejnk{WvRnLMK!6hCCIm}hly zhJEuDQS*;+0X8K99*+!}SG+f7u1a3vq0oHSe&&9GY~w%mC-M}sbtKoFyByA?v9xc# z@{IiaO|!rL`CZkQAltu1nJJ~gqhX!07Iy<{pX9{5DP7-h@?K8Zv4HJ=OPr5T1t;62 zH_XyZ%#)In8Re`RXXLs;gGC)}*JYgQ)8hKN)#ncZjJVtU?N zFNNpWM<2)IE1de5XRz<`o9P{Uz^vAV^(w>8LuYwh52|k-ihAa zE zLJ}wI-DTE$=N&)BWM?*W!BW99*+oYLs+3s!<}x~G=sZZC?74t<$@DWmzG|8iu20l# zb$jFX(l38!ax$ZQRnmQ_gL^LbNI3N$7x;axLow^j184s?(aI4nRp)$M3dBd7J0?xd)4$c%NtdCwn%2{;74fdb|53MHWXGSo(ePG`+5~{K{MRI8*-T zeCPjIMsA#wJaO_5CG~zU?GJ9gwwv<5pS@PMX4kr-#XI=-uJoT}$Nh?%vtwc94c>RR z_tqXWS$Xu0eQosn*9-qI-ITvoI)i)B9Wj^0-66lKH0E&~SKo2*X$J()FaTi52a z4O{ocz1hBtc zi`|PNau?5f$Z;ltGokY`@8-+T!p@yJHv+b$nt%b3$&)~KM@^Ozx+zuhhT`}4mSWaNV`a`SJ`{P}u)^?|(g4?bR5U3V<0 zNVK7DKi7H(Cs@F+SP$>HNoIg0ruR?>9CV%Q%@>xypL`I;S-T zNr&^El%Hf$ao!<2LrhIghU3n>s)n!oa{c>y4$EhX?p|3t=j_(LdrcC(iSM`W@KQW~ z;K?6WlQ#DX!7CT4`pkcS-nPwV=WL-cqp7=t4~j(iE?hpTw&9`A25)gK3k$V{*Y!g_ zOtLRs*wklw-aASlxsg+%Npnl>{X3HHnZEs6Sfo2&QQ`cuEY{vrc6M)O)xK?uKEC;b z`|YZvRS_{-TvfgPtUF6Teu-HhCpYs>#i2P3BCGdrb$+|kbb85x)X)skaFGd2pI1K8 zQArbdFY!3c?#HzydY?Ud3eSIIcF?dfN)P#w#3L(xZr6sFI}}t)zAapzeV*U?cTo7< zeJibh3oUQmww#?y^L%Pd)BZoRoQ~hg{;^~iQ)J%W{o8HcXsM?MxawuReDWr2{_a~h z_&>+(->QE#?Q&T($N6JUGkYZzwqNC3Bb=Oid0zGRqwPB1^PFrS>m5rvUg^M@D6Ble zkSj|#?S)mT!s2Hsy0fP?ocmUPzvmQx zJJ{i3ndez5ly3g^VTswR`j|)OtM{87zqKtS@8*xqcgwFmu9Ewf=ymHt#slqU#-8sC)5;m%{ywWyV|_KY zewBG)(1T;rw^=%tZ9l*3Rqy9yY2M=r_ulLB^DQ~pk$3xB)Tu+$ZXeY7cWUi7x3=2c z-ETfEKhT*k$tlUj6nXq;{=veJN7udaE530toc;Q&Ct|``D>+mZeop!F*`#gu$4P7N zy_t3Il10J|Hzl*X+&Z^*=pS(RxvDwo*teQn=Ce=fNSx6XRx>)#6Ug%HonmsF+l@OC zsZNjY%-60?pA{&qv|;mVe%-FKr}DC`-`nk6n7eiTZ{B4KpUL(M#w~u;tIHr35phSb zZRyLxSvOUtWZrG4I-Y39er(?{+qGAdybqqSxFNdc%?yU5@cqVy=eN9 zj6~Y!llyX3?PELXt^4L957V+wQOvJDM;#BaVco7|v3wHGx7*JW*Te>W;r8(4`?gQt z>vos#Ef&`#zx|fwf8V&Ue%*Y3_GQMGI?UGV4_K`#%Pre-w~|@*G|T3NkU{uO<(uT*?<@;uKSQ$lwdFV(h*-+8s~$l0x8 zyC?sONOalGq1g2FY0jGx(dm|w;#ch*xi07QF4+0u`IH$2ACpAqmT{F&d1);3g2R2L z-tWeB;oF(6b+>Pp&D|ep{^#DlWA3vK$!2oZFFC31J}drgnql-A%_nSSuh(te{d(!? zpXZ(aaW`9><-{@^YGHtMc_H@UPzz8W4s|%x95kLr)@m&?kbOZ4pgqx`>pU#Xz$PhJ zn8U=umMK`6gL=Inb)ex|5Di+q0ir>DY1DhaEx=~NI++kZ5I-!6I{IU5W~pasV60$f z3L3XCQZO+Atpu`AFf%jKGcm-z0th_%L+F%9bL8;{3f*XFs0SK8Ha54=voryXp_%F# znp!9rTY%h-eQX8nMtrNN!0|wC7=q#qF#>4_8m=`|FtV`JGch$%FfuULGqwaR`ZClr z#Buj`VorK~a#~JiUaB6(`ZI9KppMHxgN~pJH;v5A^-L_y6+q`|8W};HYGi_a{TW`T zfjmwfrx}`==ouK8DHs`A=$RUrDHxiA$48BfK)dTrv5x6E=A`HQWagzB>R}vF0nRnOd4Dm>8SsnHZTXfXA6lvAYa0m~4VRQfm&%&(v`lD5xw=K_j$A zdZ2?nj7&iT@Ct^O#(Jif*ay1t1sSM-p^n20O^x+TO^m>CXl4O9^ug576g-q{W`cbP z8R0UF(RXuDkw>n}(26$;OFbhq69q#^Jd zMK#QQE(*~W;5voKaajxG^njt+#6r*9&`80|&`8h3#29mI)B-uuFm!{ml&PtLnSp_x zi3OJPAuP}blu;ZG)op5Fp=WB0&2Hop9m8&OOFd&ta|Kg#Gd)vtY<43@Du!-L6FqYi z1yeHTpn%i!;7J!_XFH3dWWudIn}@m_cp{ zs;F`5Hiis^8ybTq$*|}KHyoh46(~Cu7-caivFl8cj|fIN`WIef{KfA6iGi^89D{j$0*={RBe(jA+h6zsFu zuNdm{PVMNE_VryK{=7RIet*xVq@>PJAK!a-{4}1sXd4Fx2_Jj<81{zZg$>`{sWBzkg@7k0!}=29*?@)p!_H!Iy74(?D>h!ZgWQs;I|zt=~kgtk015 z_2P7?%O0nWW@Z~6|1zcG`ep0$9k)+Z+CAO*^x35oThl|o@H~FDyeGQ0%wy5oFNOT6_HKr>g(i_|l-(EbZ3a>9O~@V!NL?zZ5FXFyFp-`t7gIFE!qM5PQ@~5x(GFLMP=f2wgJ8uSW7~APR%cexkT+maO z7ndPX*vM=8H{!hZebzY-RB|g>_e;*bcP7H{ZrQ)3@wRmj(vGgH`+CD|+J~L15?BrT z7T=j~8f*CNhp2Mt-PU!_5~r?l{F?2-()eNd!A=cc9mnGbg!b+Edj7*Czu5;QeJ=_* zXeMeptW4>-_WwgtQM}9M?R5_A8xD!o9l5>ic;*e>1KNwbOLxA^nsbBE(2?;~X>Wch z|H4KS-4%_R#(y<8TL+%vTzc%izY^!mPEYMay|Y|g@@#!pzFE;DoLXU|arPOP?FJ5) z6DuBE{w8Po{D=PS4GQTCFI4PUzx%=$9f!whk>@TRx%Yd1_pC%ir7 zDY{9D!-nCGQQN(Bt1H9n*G!wA7UahqR=1aF<#g}+_$oY(Nx(mdX+eMF z8OM&IEcqponJ%}#PM>&;agY96<(7{&k}s$GHayumwX?bN^Jdj0^ZV=SojG5gOlqn6 z)-uIjP0{!8u8Ru#zh)fp<9};*XP)rQqxl+}y7i;(h&~r7KYCfD{HW#8*pJnP-vbzI z{MWH_MLe3>y<7bFN%wVa>0zI>IhOAiFYgyAU%2)3flblu`YeWbY_eW2@ZVfoQ?1o} z_F4qXwY*m5h*_)+U!@XF9y6|Ve*Ans{l5?Mo9ia6|8IxBOkZR&aaQ>xN3AL8i?6KP5qoxb*2658oN%^eqx_PHc7c@= znrGYiSBLINs4w$he*5d9H-9$T%-$6>;fT_Snw_yB`#v|Ujh=4vE<69pmQ$;~$jn&9 zQyt+edFW4PK#|XSsYSI#Y$8u0CUeEki23>T=OuwJ`lr6#)1TMG`J-Ea|Ka3NC-2w< ziC2ym5gM$K-X>Qw_Zr;k)i_e}G(-MR{~9*S#4FDhr>t^}REZ3?cP{?CF>l-3Pm}-O zY|ToHZr7UfdanNLYtf>u8!r7gC&jyZ!eNiq%eb#t9I1^jjA3~dI^zH*i&U;@e%RmB z79LdxJ=g-nme@U-8(wH`YA4>Sow3TmvTSG7jO?94>Ncy_#EV8G?76VfkRVjvlqdz}5b0YMlrt9iwX7U0{iahJK zSyfE=zw7H8en!Un1P6zwUlmZcjs^$@+t>)Ai-?#U2ea}A2D>Emam@DV8@$rJ2 zSIWPximCcp%=~EkalXhqs_P0Yx!E{vum0a=(DFX#kMV9}@i`o)Hg%q{*fCpW$NsbO zWuH$o{a)DnWX;a9dv!PUKKV?ZdD;5&y=ksCf(EZd&&0g*>Q#`Lv@M&hqkR@bMTbgO znQu2!zr?eIXf~mfSy#VS)!nR#$ltA~(f@%#j!!ZodkQD_iE8QTC0u)sUf=bC$5(uP z>vpZ0b+fmv&7anI;kaE!&h1xayT9a$Tkn{APL{v%(rgnmvwNIrJcp!yx!5l+Zu@Z9 zl8JBkr{xv5SN^)o=_5A_F8tsm;McGIc7T_Chlf=bEE!`BKQ3(dHcJ={w$2y9&WkEncGdn zefC2ZIm6qYzw$e7Homa?JiYn`HP!8Re2^j(0q;Dqe25x5q^>R&>Iw#z&1?CoFpVD5+k+JSHmk`seTap4KQ% z?k?P<&Hrr2{qKK&IcyAmpD2CY>%FmJQ@h)-beYok#_YY_OkbwHs=594{qw#zoH-$h ztGbJx6y*dww$SES`pMwM6&LXdD_la<^$lW8!q@O~h&q)!)$1N4 z+l3yOz z&n#>)Zc&=}T7&U;anbX)nM*xnLzSKc{t2v_a)jwo&zA~`Laov>t&15{gcy7IqC`?| zKYy|=;;qI!Zzdzn^Vx^hMP%ZRiEFyK{W3}p(KmMcdZncP^xbARWSJZtVJF-{1D)U|2l|$+NN0>KX z-~KQ3g7B7t-qHp;hno93;_uidZ~JS;?_xgxP{4_K@4LizF8=;L>^8r7MJl&_=AjyNJrPka)(D0%9O3DX@OtCi%e`gh*y%#YNEH&$~!4c_pwpO^1@ z!^u27-4v;$UOUpd2G52t(GnEsZh>%)wx+h^Wb*lFmz z>Eo@br+=*DkUqq|Am7<|75kib3xy}IYWKVGa#0gcAY;3*PbT32rirxMT`;M4Q zTx{efqQv8}{?gAi^Qz9v>FrJH@i<<8{FmKno2|@@Rb8o<>(BP=zp?70(Tk#&(F{p{ za}>og*7&+fMD?DYkXFv}*~oZv(SyfVOc@N;1a~++7dRSOkx}BKd`|4jy9otvt{>|W zczn-r>n|q1x99i!?bxbl_UY9bn+cUKL~`op%eF0Tmpu1p>%F%f2iL7-TB3JZm~nq( z;k9b3V^!r7RGl8&-?H!6LB1V3pMI=g*Vi2)Z>KM=$GWF)#fJ%f-7oD6F0a_&@o2^> ztMlGFRrWQuc`I(8_q&H7bI#%iy9*LD-TNjv1#lkNZ?ODyv0!$+Rf@3NjKhgt&Wk#B z^F20MxuTcnxQPFwt-sD#HCVjc`s&Nmx!ilNX eW{++C{UGAE(y6{Yz4jt!4Z9sZ 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ÐAH1vofS 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 M5tpi}tG^o;0E?OWxc~qF diff --git a/cloog-0.16.3/isl/doc/manual.tex b/cloog-0.16.3/isl/doc/manual.tex deleted file mode 100644 index 91b3db0..0000000 --- a/cloog-0.16.3/isl/doc/manual.tex +++ /dev/null @@ -1,75 +0,0 @@ -\documentclass{report} -\usepackage[plainpages=false,pdfpagelabels,breaklinks,pagebackref]{hyperref} -\usepackage{amsmath} -\usepackage{amssymb} -\usepackage{txfonts} -\usepackage{chicago} -\usepackage{aliascnt} -\usepackage{tikz} -\usepackage{calc} -\usepackage[ruled]{algorithm2e} -\usetikzlibrary{matrix,fit,backgrounds,decorations.pathmorphing,positioning} -\usepackage{listings} - -\lstset{basicstyle=\tt,flexiblecolumns=false} - -\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle\bf#1$}} -{\mbox{\boldmath$\textstyle\bf#1$}} -{\mbox{\boldmath$\scriptstyle\bf#1$}} -{\mbox{\boldmath$\scriptscriptstyle\bf#1$}}} - -\providecommand{\fract}[1]{\left\{#1\right\}} -\providecommand{\floor}[1]{\left\lfloor#1\right\rfloor} -\providecommand{\ceil}[1]{\left\lceil#1\right\rceil} -\def\sp#1#2{\langle #1, #2 \rangle} -\def\spv#1#2{\langle\vec #1,\vec #2\rangle} - -\newtheorem{theorem}{Theorem} -\newaliascnt{example}{theorem} -\newtheorem{example}[example]{Example} -\newaliascnt{def}{theorem} -\newtheorem{definition}[def]{Definition} -\aliascntresetthe{example} -\aliascntresetthe{def} -\numberwithin{theorem}{section} -\numberwithin{def}{section} -\numberwithin{example}{section} - -\newcommand{\algocflineautorefname}{Algorithm} -\newcommand{\exampleautorefname}{Example} -\newcommand{\lstnumberautorefname}{Line} -\renewcommand{\sectionautorefname}{Section} -\renewcommand{\subsectionautorefname}{Section} - -\def\Z{\mathbb{Z}} -\def\Q{\mathbb{Q}} - -\def\pdom{\mathop{\rm pdom}\nolimits} -\def\domain{\mathop{\rm dom}\nolimits} -\def\range{\mathop{\rm ran}\nolimits} -\def\identity{\mathop{\rm Id}\nolimits} -\def\diff{\mathop{\Delta}\nolimits} - -\providecommand{\floor}[1]{\left\lfloor#1\right\rfloor} - -\begin{document} - -\title{Integer Set Library: Manual\\ -\small Version: \input{version} } -\author{Sven Verdoolaege} - -\maketitle -\tableofcontents - -\chapter{User Manual} - -\input{user} - -\chapter{Implementation Details} - -\input{implementation} - -\bibliography{isl} -\bibliographystyle{chicago} - -\end{document} diff --git a/cloog-0.16.3/isl/doc/mypod2latex b/cloog-0.16.3/isl/doc/mypod2latex deleted file mode 100755 index b11c059..0000000 --- a/cloog-0.16.3/isl/doc/mypod2latex +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Pod::LaTeX; - -my ($in, $out) = @ARGV; - -my $parser = new Pod::LaTeX( - AddPreamble => 0, - AddPostamble => 0, - LevelNoNum => 5, - ); - -$parser->parse_from_file($in, $out); diff --git a/cloog-0.16.3/isl/doc/user.pod b/cloog-0.16.3/isl/doc/user.pod deleted file mode 100644 index 76799c1..0000000 --- a/cloog-0.16.3/isl/doc/user.pod +++ /dev/null @@ -1,3376 +0,0 @@ -=head1 Introduction - -C is a thread-safe C library for manipulating -sets and relations of integer points bounded by affine constraints. -The descriptions of the sets and relations may involve -both parameters and existentially quantified variables. -All computations are performed in exact integer arithmetic -using C. -The C library offers functionality that is similar -to that offered by the C and C libraries, -but the underlying algorithms are in most cases completely different. - -The library is by no means complete and some fairly basic -functionality is still missing. -Still, even in its current form, the library has been successfully -used as a backend polyhedral library for the polyhedral -scanner C and as part of an equivalence checker of -static affine programs. -For bug reports, feature requests and questions, -visit the the discussion group at -L. - -=head2 Backward Incompatible Changes - -=head3 Changes since isl-0.02 - -=over - -=item * The old printing functions have been deprecated -and replaced by C functions, see L. - -=item * Most functions related to dependence analysis have acquired -an extra C argument. To obtain the old behavior, this argument -should be given the value 1. See L. - -=back - -=head3 Changes since isl-0.03 - -=over - -=item * The function C has been -renamed to C. -Similarly, C has been -renamed to C. - -=back - -=head3 Changes since isl-0.04 - -=over - -=item * All header files have been renamed from C -to C. - -=back - -=head3 Changes since isl-0.05 - -=over - -=item * The functions C and -C no longer print a newline. - -=item * The functions C -and C now return -the accesses for which no source could be found instead of -the iterations where those accesses occur. - -=item * The functions C and -C now take the dimension specification -of a B as input. An old call -C can be rewritten to -C. - -=item * The function C no longer takes -a parameter position as input. Instead, the exponent -is now expressed as the domain of the resulting relation. - -=back - -=head3 Changes since isl-0.06 - -=over - -=item * The format of C's -C output has changed. -Use C to obtain the old output. - -=item * The C<*_fast_*> functions have been renamed to C<*_plain_*>. -Some of the old names have been kept for backward compatibility, -but they will be removed in the future. - -=back - -=head1 Installation - -The source of C can be obtained either as a tarball -or from the git repository. Both are available from -L. -The installation process depends on how you obtained -the source. - -=head2 Installation from the git repository - -=over - -=item 1 Clone or update the repository - -The first time the source is obtained, you need to clone -the repository. - - git clone git://repo.or.cz/isl.git - -To obtain updates, you need to pull in the latest changes - - git pull - -=item 2 Generate C - - ./autogen.sh - -=back - -After performing the above steps, continue -with the L. - -=head2 Common installation instructions - -=over - -=item 1 Obtain C - -Building C requires C, including its headers files. -Your distribution may not provide these header files by default -and you may need to install a package called C or something -similar. Alternatively, C can be built from -source, available from L. - -=item 2 Configure - -C uses the standard C C script. -To run it, just type - - ./configure - -optionally followed by some configure options. -A complete list of options can be obtained by running - - ./configure --help - -Below we discuss some of the more common options. - -C can optionally use C, but no -C functionality is currently used by default. -The C<--with-piplib> option can -be used to specify which C -library to use, either an installed version (C), -an externally built version (C) -or no version (C). The option C is mostly useful -in C scripts of larger projects that bundle both C -and C. - -=over - -=item C<--prefix> - -Installation prefix for C - -=item C<--with-gmp-prefix> - -Installation prefix for C (architecture-independent files). - -=item C<--with-gmp-exec-prefix> - -Installation prefix for C (architecture-dependent files). - -=item C<--with-piplib> - -Which copy of C to use, either C (default), C or C. - -=item C<--with-piplib-prefix> - -Installation prefix for C C (architecture-independent files). - -=item C<--with-piplib-exec-prefix> - -Installation prefix for C C (architecture-dependent files). - -=item C<--with-piplib-builddir> - -Location where C C was built. - -=back - -=item 3 Compile - - make - -=item 4 Install (optional) - - make install - -=back - -=head1 Library - -=head2 Initialization - -All manipulations of integer sets and relations occur within -the context of an C. -A given C can only be used within a single thread. -All arguments of a function are required to have been allocated -within the same context. -There are currently no functions available for moving an object -from one C to another C. This means that -there is currently no way of safely moving an object from one -thread to another, unless the whole C is moved. - -An C can be allocated using C and -freed using C. -All objects allocated within an C should be freed -before the C itself is freed. - - isl_ctx *isl_ctx_alloc(); - void isl_ctx_free(isl_ctx *ctx); - -=head2 Integers - -All operations on integers, mainly the coefficients -of the constraints describing the sets and relations, -are performed in exact integer arithmetic using C. -However, to allow future versions of C to optionally -support fixed integer arithmetic, all calls to C -are wrapped inside C specific macros. -The basic type is C and the operations below -are available on this type. -The meanings of these operations are essentially the same -as their C C counterparts. -As always with C types, Cs need to be -initialized with C before they can be used -and they need to be released with C -after the last use. -The user should not assume that an C is represented -as a C, but should instead explicitly convert between -Cs and Cs using C and -C whenever a C is required. - -=over - -=item isl_int_init(i) - -=item isl_int_clear(i) - -=item isl_int_set(r,i) - -=item isl_int_set_si(r,i) - -=item isl_int_set_gmp(r,g) - -=item isl_int_get_gmp(i,g) - -=item isl_int_abs(r,i) - -=item isl_int_neg(r,i) - -=item isl_int_swap(i,j) - -=item isl_int_swap_or_set(i,j) - -=item isl_int_add_ui(r,i,j) - -=item isl_int_sub_ui(r,i,j) - -=item isl_int_add(r,i,j) - -=item isl_int_sub(r,i,j) - -=item isl_int_mul(r,i,j) - -=item isl_int_mul_ui(r,i,j) - -=item isl_int_addmul(r,i,j) - -=item isl_int_submul(r,i,j) - -=item isl_int_gcd(r,i,j) - -=item isl_int_lcm(r,i,j) - -=item isl_int_divexact(r,i,j) - -=item isl_int_cdiv_q(r,i,j) - -=item isl_int_fdiv_q(r,i,j) - -=item isl_int_fdiv_r(r,i,j) - -=item isl_int_fdiv_q_ui(r,i,j) - -=item isl_int_read(r,s) - -=item isl_int_print(out,i,width) - -=item isl_int_sgn(i) - -=item isl_int_cmp(i,j) - -=item isl_int_cmp_si(i,si) - -=item isl_int_eq(i,j) - -=item isl_int_ne(i,j) - -=item isl_int_lt(i,j) - -=item isl_int_le(i,j) - -=item isl_int_gt(i,j) - -=item isl_int_ge(i,j) - -=item isl_int_abs_eq(i,j) - -=item isl_int_abs_ne(i,j) - -=item isl_int_abs_lt(i,j) - -=item isl_int_abs_gt(i,j) - -=item isl_int_abs_ge(i,j) - -=item isl_int_is_zero(i) - -=item isl_int_is_one(i) - -=item isl_int_is_negone(i) - -=item isl_int_is_pos(i) - -=item isl_int_is_neg(i) - -=item isl_int_is_nonpos(i) - -=item isl_int_is_nonneg(i) - -=item isl_int_is_divisible_by(i,j) - -=back - -=head2 Sets and Relations - -C uses six types of objects for representing sets and relations, -C, C, C, C, -C and C. -C and C represent sets and relations that -can be described as a conjunction of affine constraints, while -C and C represent unions of -Cs and Cs, respectively. -However, all Cs or Cs in the union need -to have the same dimension. Cs and Cs -represent unions of Cs or Cs of I dimensions, -where dimensions with different space names -(see L) are considered different as well. -The difference between sets and relations (maps) is that sets have -one set of variables, while relations have two sets of variables, -input variables and output variables. - -=head2 Memory Management - -Since a high-level operation on sets and/or relations usually involves -several substeps and since the user is usually not interested in -the intermediate results, most functions that return a new object -will also release all the objects passed as arguments. -If the user still wants to use one or more of these arguments -after the function call, she should pass along a copy of the -object rather than the object itself. -The user is then responsible for making sure that the original -object gets used somewhere else or is explicitly freed. - -The arguments and return values of all documents functions are -annotated to make clear which arguments are released and which -arguments are preserved. In particular, the following annotations -are used - -=over - -=item C<__isl_give> - -C<__isl_give> means that a new object is returned. -The user should make sure that the returned pointer is -used exactly once as a value for an C<__isl_take> argument. -In between, it can be used as a value for as many -C<__isl_keep> arguments as the user likes. -There is one exception, and that is the case where the -pointer returned is C. Is this case, the user -is free to use it as an C<__isl_take> argument or not. - -=item C<__isl_take> - -C<__isl_take> means that the object the argument points to -is taken over by the function and may no longer be used -by the user as an argument to any other function. -The pointer value must be one returned by a function -returning an C<__isl_give> pointer. -If the user passes in a C value, then this will -be treated as an error in the sense that the function will -not perform its usual operation. However, it will still -make sure that all the the other C<__isl_take> arguments -are released. - -=item C<__isl_keep> - -C<__isl_keep> means that the function will only use the object -temporarily. After the function has finished, the user -can still use it as an argument to other functions. -A C value will be treated in the same way as -a C value for an C<__isl_take> argument. - -=back - -=head2 Dimension Specifications - -Whenever a new set or relation is created from scratch, -its dimension needs to be specified using an C. - - #include - __isl_give isl_dim *isl_dim_alloc(isl_ctx *ctx, - unsigned nparam, unsigned n_in, unsigned n_out); - __isl_give isl_dim *isl_dim_set_alloc(isl_ctx *ctx, - unsigned nparam, unsigned dim); - __isl_give isl_dim *isl_dim_copy(__isl_keep isl_dim *dim); - void isl_dim_free(__isl_take isl_dim *dim); - unsigned isl_dim_size(__isl_keep isl_dim *dim, - enum isl_dim_type type); - -The dimension specification used for creating a set -needs to be created using C, while -that for creating a relation -needs to be created using C. -C can be used -to find out the number of dimensions of each type in -a dimension specification, where type may be -C, C (only for relations), -C (only for relations), C -(only for sets) or C. - -It is often useful to create objects that live in the -same space as some other object. This can be accomplished -by creating the new objects -(see L or -L) based on the dimension -specification of the original object. - - #include - __isl_give isl_dim *isl_basic_set_get_dim( - __isl_keep isl_basic_set *bset); - __isl_give isl_dim *isl_set_get_dim(__isl_keep isl_set *set); - - #include - __isl_give isl_dim *isl_union_set_get_dim( - __isl_keep isl_union_set *uset); - - #include - __isl_give isl_dim *isl_basic_map_get_dim( - __isl_keep isl_basic_map *bmap); - __isl_give isl_dim *isl_map_get_dim(__isl_keep isl_map *map); - - #include - __isl_give isl_dim *isl_union_map_get_dim( - __isl_keep isl_union_map *umap); - - #include - __isl_give isl_dim *isl_constraint_get_dim( - __isl_keep isl_constraint *constraint); - - #include - __isl_give isl_dim *isl_qpolynomial_get_dim( - __isl_keep isl_qpolynomial *qp); - __isl_give isl_dim *isl_qpolynomial_fold_get_dim( - __isl_keep isl_qpolynomial_fold *fold); - __isl_give isl_dim *isl_pw_qpolynomial_get_dim( - __isl_keep isl_pw_qpolynomial *pwqp); - __isl_give isl_dim *isl_union_pw_qpolynomial_get_dim( - __isl_keep isl_union_pw_qpolynomial *upwqp); - __isl_give isl_dim *isl_union_pw_qpolynomial_fold_get_dim( - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - - #include - __isl_give isl_dim *isl_aff_get_dim( - __isl_keep isl_aff *aff); - __isl_give isl_dim *isl_pw_aff_get_dim( - __isl_keep isl_pw_aff *pwaff); - - #include - __isl_give isl_dim *isl_point_get_dim( - __isl_keep isl_point *pnt); - -The names of the individual dimensions may be set or read off -using the following functions. - - #include - __isl_give isl_dim *isl_dim_set_name(__isl_take isl_dim *dim, - enum isl_dim_type type, unsigned pos, - __isl_keep const char *name); - __isl_keep const char *isl_dim_get_name(__isl_keep isl_dim *dim, - enum isl_dim_type type, unsigned pos); - -Note that C returns a pointer to some internal -data structure, so the result can only be used while the -corresponding C is alive. -Also note that every function that operates on two sets or relations -requires that both arguments have the same parameters. This also -means that if one of the arguments has named parameters, then the -other needs to have named parameters too and the names need to match. -Pairs of C and/or C arguments may -have different parameters (as long as they are named), in which case -the result will have as parameters the union of the parameters of -the arguments. - -The names of entire spaces may be set or read off -using the following functions. - - #include - __isl_give isl_dim *isl_dim_set_tuple_name( - __isl_take isl_dim *dim, - enum isl_dim_type type, const char *s); - const char *isl_dim_get_tuple_name(__isl_keep isl_dim *dim, - enum isl_dim_type type); - -The C argument needs to be one of C, C -or C. As with C, -the C function returns a pointer to some internal -data structure. -Binary operations require the corresponding spaces of their arguments -to have the same name. - -Spaces can be nested. In particular, the domain of a set or -the domain or range of a relation can be a nested relation. -The following functions can be used to construct and deconstruct -such nested dimension specifications. - - #include - int isl_dim_is_wrapping(__isl_keep isl_dim *dim); - __isl_give isl_dim *isl_dim_wrap(__isl_take isl_dim *dim); - __isl_give isl_dim *isl_dim_unwrap(__isl_take isl_dim *dim); - -The input to C and C should -be the dimension specification of a set, while that of -C should be the dimension specification of a relation. -Conversely, the output of C is the dimension specification -of a relation, while that of C is the dimension specification -of a set. - -Dimension specifications can be created from other dimension -specifications using the following functions. - - __isl_give isl_dim *isl_dim_domain(__isl_take isl_dim *dim); - __isl_give isl_dim *isl_dim_from_domain(__isl_take isl_dim *dim); - __isl_give isl_dim *isl_dim_range(__isl_take isl_dim *dim); - __isl_give isl_dim *isl_dim_from_range(__isl_take isl_dim *dim); - __isl_give isl_dim *isl_dim_reverse(__isl_take isl_dim *dim); - __isl_give isl_dim *isl_dim_join(__isl_take isl_dim *left, - __isl_take isl_dim *right); - __isl_give isl_dim *isl_dim_align_params( - __isl_take isl_dim *dim1, __isl_take isl_dim *dim2) - __isl_give isl_dim *isl_dim_insert(__isl_take isl_dim *dim, - enum isl_dim_type type, unsigned pos, unsigned n); - __isl_give isl_dim *isl_dim_add(__isl_take isl_dim *dim, - enum isl_dim_type type, unsigned n); - __isl_give isl_dim *isl_dim_drop(__isl_take isl_dim *dim, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_dim *isl_dim_map_from_set( - __isl_take isl_dim *dim); - __isl_give isl_dim *isl_dim_zip(__isl_take isl_dim *dim); - -Note that if dimensions are added or removed from a space, then -the name and the internal structure are lost. - -=head2 Local Spaces - -A local space is essentially a dimension specification with -zero or more existentially quantified variables. -The local space of a basic set or relation can be obtained -using the following functions. - - #include - __isl_give isl_local_space *isl_basic_set_get_local_space( - __isl_keep isl_basic_set *bset); - - #include - __isl_give isl_local_space *isl_basic_map_get_local_space( - __isl_keep isl_basic_map *bmap); - -A new local space can be created from a dimension specification using - - #include - __isl_give isl_local_space *isl_local_space_from_dim( - __isl_take isl_dim *dim); - -They can be inspected, copied and freed using the following functions. - - #include - isl_ctx *isl_local_space_get_ctx( - __isl_keep isl_local_space *ls); - int isl_local_space_dim(__isl_keep isl_local_space *ls, - enum isl_dim_type type); - const char *isl_local_space_get_dim_name( - __isl_keep isl_local_space *ls, - enum isl_dim_type type, unsigned pos); - __isl_give isl_local_space *isl_local_space_set_dim_name( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned pos, const char *s); - __isl_give isl_dim *isl_local_space_get_dim( - __isl_keep isl_local_space *ls); - __isl_give isl_div *isl_local_space_get_div( - __isl_keep isl_local_space *ls, int pos); - __isl_give isl_local_space *isl_local_space_copy( - __isl_keep isl_local_space *ls); - void *isl_local_space_free(__isl_take isl_local_space *ls); - -Two local spaces can be compared using - - int isl_local_space_is_equal(__isl_keep isl_local_space *ls1, - __isl_keep isl_local_space *ls2); - -Local spaces can be created from other local spaces -using the following functions. - - __isl_give isl_local_space *isl_local_space_from_domain( - __isl_take isl_local_space *ls); - __isl_give isl_local_space *isl_local_space_add_dims( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned n); - __isl_give isl_local_space *isl_local_space_insert_dims( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_local_space *isl_local_space_drop_dims( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned first, unsigned n); - -=head2 Input and Output - -C supports its own input/output format, which is similar -to the C format, but also supports the C format -in some cases. - -=head3 C format - -The C format is similar to that of C, but has a different -syntax for describing the parameters and allows for the definition -of an existentially quantified variable as the integer division -of an affine expression. -For example, the set of integers C between C<0> and C -such that C can be described as - - [n] -> { [i] : exists (a = [i/10] : 0 <= i and i <= n and - i - 10 a <= 6) } - -A set or relation can have several disjuncts, separated -by the keyword C. Each disjunct is either a conjunction -of constraints or a projection (C) of a conjunction -of constraints. The constraints are separated by the keyword -C. - -=head3 C format - -If the represented set is a union, then the first line -contains a single number representing the number of disjuncts. -Otherwise, a line containing the number C<1> is optional. - -Each disjunct is represented by a matrix of constraints. -The first line contains two numbers representing -the number of rows and columns, -where the number of rows is equal to the number of constraints -and the number of columns is equal to two plus the number of variables. -The following lines contain the actual rows of the constraint matrix. -In each row, the first column indicates whether the constraint -is an equality (C<0>) or inequality (C<1>). The final column -corresponds to the constant term. - -If the set is parametric, then the coefficients of the parameters -appear in the last columns before the constant column. -The coefficients of any existentially quantified variables appear -between those of the set variables and those of the parameters. - -=head3 Extended C format - -The extended C format is nearly identical to the -C format. The only difference is that the line -containing the number of rows and columns of a constraint matrix -also contains four additional numbers: -the number of output dimensions, the number of input dimensions, -the number of local dimensions (i.e., the number of existentially -quantified variables) and the number of parameters. -For sets, the number of ``output'' dimensions is equal -to the number of set dimensions, while the number of ``input'' -dimensions is zero. - -=head3 Input - - #include - __isl_give isl_basic_set *isl_basic_set_read_from_file( - isl_ctx *ctx, FILE *input, int nparam); - __isl_give isl_basic_set *isl_basic_set_read_from_str( - isl_ctx *ctx, const char *str, int nparam); - __isl_give isl_set *isl_set_read_from_file(isl_ctx *ctx, - FILE *input, int nparam); - __isl_give isl_set *isl_set_read_from_str(isl_ctx *ctx, - const char *str, int nparam); - - #include - __isl_give isl_basic_map *isl_basic_map_read_from_file( - isl_ctx *ctx, FILE *input, int nparam); - __isl_give isl_basic_map *isl_basic_map_read_from_str( - isl_ctx *ctx, const char *str, int nparam); - __isl_give isl_map *isl_map_read_from_file( - struct isl_ctx *ctx, FILE *input, int nparam); - __isl_give isl_map *isl_map_read_from_str(isl_ctx *ctx, - const char *str, int nparam); - - #include - __isl_give isl_union_set *isl_union_set_read_from_file( - isl_ctx *ctx, FILE *input); - __isl_give isl_union_set *isl_union_set_read_from_str( - struct isl_ctx *ctx, const char *str); - - #include - __isl_give isl_union_map *isl_union_map_read_from_file( - isl_ctx *ctx, FILE *input); - __isl_give isl_union_map *isl_union_map_read_from_str( - struct isl_ctx *ctx, const char *str); - -The input format is autodetected and may be either the C format -or the C format. -C specifies how many of the final columns in -the C format correspond to parameters. -If input is given in the C format, then the number -of parameters needs to be equal to C. -If C is negative, then any number of parameters -is accepted in the C format and zero parameters -are assumed in the C format. - -=head3 Output - -Before anything can be printed, an C needs to -be created. - - __isl_give isl_printer *isl_printer_to_file(isl_ctx *ctx, - FILE *file); - __isl_give isl_printer *isl_printer_to_str(isl_ctx *ctx); - void isl_printer_free(__isl_take isl_printer *printer); - __isl_give char *isl_printer_get_str( - __isl_keep isl_printer *printer); - -The behavior of the printer can be modified in various ways - - __isl_give isl_printer *isl_printer_set_output_format( - __isl_take isl_printer *p, int output_format); - __isl_give isl_printer *isl_printer_set_indent( - __isl_take isl_printer *p, int indent); - __isl_give isl_printer *isl_printer_indent( - __isl_take isl_printer *p, int indent); - __isl_give isl_printer *isl_printer_set_prefix( - __isl_take isl_printer *p, const char *prefix); - __isl_give isl_printer *isl_printer_set_suffix( - __isl_take isl_printer *p, const char *suffix); - -The C may be either C, C, -C, C or C -and defaults to C. -Each line in the output is indented by C (set by -C) spaces -(default: 0), prefixed by C and suffixed by C. -In the C format output, -the coefficients of the existentially quantified variables -appear between those of the set variables and those -of the parameters. -The function C increases the indentation -by the specified amount (which may be negative). - -To actually print something, use - - #include - __isl_give isl_printer *isl_printer_print_basic_set( - __isl_take isl_printer *printer, - __isl_keep isl_basic_set *bset); - __isl_give isl_printer *isl_printer_print_set( - __isl_take isl_printer *printer, - __isl_keep isl_set *set); - - #include - __isl_give isl_printer *isl_printer_print_basic_map( - __isl_take isl_printer *printer, - __isl_keep isl_basic_map *bmap); - __isl_give isl_printer *isl_printer_print_map( - __isl_take isl_printer *printer, - __isl_keep isl_map *map); - - #include - __isl_give isl_printer *isl_printer_print_union_set( - __isl_take isl_printer *p, - __isl_keep isl_union_set *uset); - - #include - __isl_give isl_printer *isl_printer_print_union_map( - __isl_take isl_printer *p, - __isl_keep isl_union_map *umap); - -When called on a file printer, the following function flushes -the file. When called on a string printer, the buffer is cleared. - - __isl_give isl_printer *isl_printer_flush( - __isl_take isl_printer *p); - -=head2 Creating New Sets and Relations - -C has functions for creating some standard sets and relations. - -=over - -=item * Empty sets and relations - - __isl_give isl_basic_set *isl_basic_set_empty( - __isl_take isl_dim *dim); - __isl_give isl_basic_map *isl_basic_map_empty( - __isl_take isl_dim *dim); - __isl_give isl_set *isl_set_empty( - __isl_take isl_dim *dim); - __isl_give isl_map *isl_map_empty( - __isl_take isl_dim *dim); - __isl_give isl_union_set *isl_union_set_empty( - __isl_take isl_dim *dim); - __isl_give isl_union_map *isl_union_map_empty( - __isl_take isl_dim *dim); - -For Cs and Cs, the dimensions specification -is only used to specify the parameters. - -=item * Universe sets and relations - - __isl_give isl_basic_set *isl_basic_set_universe( - __isl_take isl_dim *dim); - __isl_give isl_basic_map *isl_basic_map_universe( - __isl_take isl_dim *dim); - __isl_give isl_set *isl_set_universe( - __isl_take isl_dim *dim); - __isl_give isl_map *isl_map_universe( - __isl_take isl_dim *dim); - __isl_give isl_union_set *isl_union_set_universe( - __isl_take isl_union_set *uset); - __isl_give isl_union_map *isl_union_map_universe( - __isl_take isl_union_map *umap); - -The sets and relations constructed by the functions above -contain all integer values, while those constructed by the -functions below only contain non-negative values. - - __isl_give isl_basic_set *isl_basic_set_nat_universe( - __isl_take isl_dim *dim); - __isl_give isl_basic_map *isl_basic_map_nat_universe( - __isl_take isl_dim *dim); - __isl_give isl_set *isl_set_nat_universe( - __isl_take isl_dim *dim); - __isl_give isl_map *isl_map_nat_universe( - __isl_take isl_dim *dim); - -=item * Identity relations - - __isl_give isl_basic_map *isl_basic_map_identity( - __isl_take isl_dim *dim); - __isl_give isl_map *isl_map_identity( - __isl_take isl_dim *dim); - -The number of input and output dimensions in C needs -to be the same. - -=item * Lexicographic order - - __isl_give isl_map *isl_map_lex_lt( - __isl_take isl_dim *set_dim); - __isl_give isl_map *isl_map_lex_le( - __isl_take isl_dim *set_dim); - __isl_give isl_map *isl_map_lex_gt( - __isl_take isl_dim *set_dim); - __isl_give isl_map *isl_map_lex_ge( - __isl_take isl_dim *set_dim); - __isl_give isl_map *isl_map_lex_lt_first( - __isl_take isl_dim *dim, unsigned n); - __isl_give isl_map *isl_map_lex_le_first( - __isl_take isl_dim *dim, unsigned n); - __isl_give isl_map *isl_map_lex_gt_first( - __isl_take isl_dim *dim, unsigned n); - __isl_give isl_map *isl_map_lex_ge_first( - __isl_take isl_dim *dim, unsigned n); - -The first four functions take a dimension specification for a B -and return relations that express that the elements in the domain -are lexicographically less -(C), less or equal (C), -greater (C) or greater or equal (C) -than the elements in the range. -The last four functions take a dimension specification for a map -and return relations that express that the first C dimensions -in the domain are lexicographically less -(C), less or equal (C), -greater (C) or greater or equal (C) -than the first C dimensions in the range. - -=back - -A basic set or relation can be converted to a set or relation -using the following functions. - - __isl_give isl_set *isl_set_from_basic_set( - __isl_take isl_basic_set *bset); - __isl_give isl_map *isl_map_from_basic_map( - __isl_take isl_basic_map *bmap); - -Sets and relations can be converted to union sets and relations -using the following functions. - - __isl_give isl_union_map *isl_union_map_from_map( - __isl_take isl_map *map); - __isl_give isl_union_set *isl_union_set_from_set( - __isl_take isl_set *set); - -The inverse conversions below can only be used if the input -union set or relation is known to contain elements in exactly one -space. - - __isl_give isl_set *isl_set_from_union_set( - __isl_take isl_union_set *uset); - __isl_give isl_map *isl_map_from_union_map( - __isl_take isl_union_map *umap); - -Sets and relations can be copied and freed again using the following -functions. - - __isl_give isl_basic_set *isl_basic_set_copy( - __isl_keep isl_basic_set *bset); - __isl_give isl_set *isl_set_copy(__isl_keep isl_set *set); - __isl_give isl_union_set *isl_union_set_copy( - __isl_keep isl_union_set *uset); - __isl_give isl_basic_map *isl_basic_map_copy( - __isl_keep isl_basic_map *bmap); - __isl_give isl_map *isl_map_copy(__isl_keep isl_map *map); - __isl_give isl_union_map *isl_union_map_copy( - __isl_keep isl_union_map *umap); - void isl_basic_set_free(__isl_take isl_basic_set *bset); - void isl_set_free(__isl_take isl_set *set); - void *isl_union_set_free(__isl_take isl_union_set *uset); - void isl_basic_map_free(__isl_take isl_basic_map *bmap); - void isl_map_free(__isl_take isl_map *map); - void *isl_union_map_free(__isl_take isl_union_map *umap); - -Other sets and relations can be constructed by starting -from a universe set or relation, adding equality and/or -inequality constraints and then projecting out the -existentially quantified variables, if any. -Constraints can be constructed, manipulated and -added to (or removed from) (basic) sets and relations -using the following functions. - - #include - __isl_give isl_constraint *isl_equality_alloc( - __isl_take isl_dim *dim); - __isl_give isl_constraint *isl_inequality_alloc( - __isl_take isl_dim *dim); - void isl_constraint_set_constant( - __isl_keep isl_constraint *constraint, isl_int v); - void isl_constraint_set_coefficient( - __isl_keep isl_constraint *constraint, - enum isl_dim_type type, int pos, isl_int v); - __isl_give isl_basic_map *isl_basic_map_add_constraint( - __isl_take isl_basic_map *bmap, - __isl_take isl_constraint *constraint); - __isl_give isl_basic_set *isl_basic_set_add_constraint( - __isl_take isl_basic_set *bset, - __isl_take isl_constraint *constraint); - __isl_give isl_map *isl_map_add_constraint( - __isl_take isl_map *map, - __isl_take isl_constraint *constraint); - __isl_give isl_set *isl_set_add_constraint( - __isl_take isl_set *set, - __isl_take isl_constraint *constraint); - __isl_give isl_basic_set *isl_basic_set_drop_constraint( - __isl_take isl_basic_set *bset, - __isl_take isl_constraint *constraint); - -For example, to create a set containing the even integers -between 10 and 42, you would use the following code. - - isl_int v; - struct isl_dim *dim; - struct isl_constraint *c; - struct isl_basic_set *bset; - - isl_int_init(v); - dim = isl_dim_set_alloc(ctx, 0, 2); - bset = isl_basic_set_universe(isl_dim_copy(dim)); - - c = isl_equality_alloc(isl_dim_copy(dim)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 2); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_inequality_alloc(isl_dim_copy(dim)); - isl_int_set_si(v, -10); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_inequality_alloc(dim); - isl_int_set_si(v, 42); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 1, 1); - - isl_int_clear(v); - -Or, alternatively, - - struct isl_basic_set *bset; - bset = isl_basic_set_read_from_str(ctx, - "{[i] : exists (a : i = 2a and i >= 10 and i <= 42)}", -1); - -A basic set or relation can also be constructed from two matrices -describing the equalities and the inequalities. - - __isl_give isl_basic_set *isl_basic_set_from_constraint_matrices( - __isl_take isl_dim *dim, - __isl_take isl_mat *eq, __isl_take isl_mat *ineq, - enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4); - __isl_give isl_basic_map *isl_basic_map_from_constraint_matrices( - __isl_take isl_dim *dim, - __isl_take isl_mat *eq, __isl_take isl_mat *ineq, - enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5); - -The C arguments indicate the order in which -different kinds of variables appear in the input matrices -and should be a permutation of C, C, -C and C for sets and -of C, C, -C, C and C for relations. - -A (basic) relation can also be constructed from a (piecewise) affine expression -or a list of affine expressions (See L<"Piecewise Quasi Affine Expressions">). - - __isl_give isl_basic_map *isl_basic_map_from_aff( - __isl_take isl_aff *aff); - __isl_give isl_map *isl_map_from_pw_aff( - __isl_take isl_pw_aff *pwaff); - __isl_give isl_basic_map *isl_basic_map_from_aff_list( - __isl_take isl_dim *domain_dim, - __isl_take isl_aff_list *list); - -The C argument describes the domain of the resulting -basic relation. It is required because the C may consist -of zero affine expressions. - -=head2 Inspecting Sets and Relations - -Usually, the user should not have to care about the actual constraints -of the sets and maps, but should instead apply the abstract operations -explained in the following sections. -Occasionally, however, it may be required to inspect the individual -coefficients of the constraints. This section explains how to do so. -In these cases, it may also be useful to have C compute -an explicit representation of the existentially quantified variables. - - __isl_give isl_set *isl_set_compute_divs( - __isl_take isl_set *set); - __isl_give isl_map *isl_map_compute_divs( - __isl_take isl_map *map); - __isl_give isl_union_set *isl_union_set_compute_divs( - __isl_take isl_union_set *uset); - __isl_give isl_union_map *isl_union_map_compute_divs( - __isl_take isl_union_map *umap); - -This explicit representation defines the existentially quantified -variables as integer divisions of the other variables, possibly -including earlier existentially quantified variables. -An explicitly represented existentially quantified variable therefore -has a unique value when the values of the other variables are known. -If, furthermore, the same existentials, i.e., existentials -with the same explicit representations, should appear in the -same order in each of the disjuncts of a set or map, then the user should call -either of the following functions. - - __isl_give isl_set *isl_set_align_divs( - __isl_take isl_set *set); - __isl_give isl_map *isl_map_align_divs( - __isl_take isl_map *map); - -Alternatively, the existentially quantified variables can be removed -using the following functions, which compute an overapproximation. - - __isl_give isl_basic_set *isl_basic_set_remove_divs( - __isl_take isl_basic_set *bset); - __isl_give isl_basic_map *isl_basic_map_remove_divs( - __isl_take isl_basic_map *bmap); - __isl_give isl_set *isl_set_remove_divs( - __isl_take isl_set *set); - __isl_give isl_map *isl_map_remove_divs( - __isl_take isl_map *map); - -To iterate over all the sets or maps in a union set or map, use - - int isl_union_set_foreach_set(__isl_keep isl_union_set *uset, - int (*fn)(__isl_take isl_set *set, void *user), - void *user); - int isl_union_map_foreach_map(__isl_keep isl_union_map *umap, - int (*fn)(__isl_take isl_map *map, void *user), - void *user); - -The number of sets or maps in a union set or map can be obtained -from - - int isl_union_set_n_set(__isl_keep isl_union_set *uset); - int isl_union_map_n_map(__isl_keep isl_union_map *umap); - -To extract the set or map from a union with a given dimension -specification, use - - __isl_give isl_set *isl_union_set_extract_set( - __isl_keep isl_union_set *uset, - __isl_take isl_dim *dim); - __isl_give isl_map *isl_union_map_extract_map( - __isl_keep isl_union_map *umap, - __isl_take isl_dim *dim); - -To iterate over all the basic sets or maps in a set or map, use - - int isl_set_foreach_basic_set(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_basic_set *bset, void *user), - void *user); - int isl_map_foreach_basic_map(__isl_keep isl_map *map, - int (*fn)(__isl_take isl_basic_map *bmap, void *user), - void *user); - -The callback function C should return 0 if successful and --1 if an error occurs. In the latter case, or if any other error -occurs, the above functions will return -1. - -It should be noted that C does not guarantee that -the basic sets or maps passed to C are disjoint. -If this is required, then the user should call one of -the following functions first. - - __isl_give isl_set *isl_set_make_disjoint( - __isl_take isl_set *set); - __isl_give isl_map *isl_map_make_disjoint( - __isl_take isl_map *map); - -The number of basic sets in a set can be obtained -from - - int isl_set_n_basic_set(__isl_keep isl_set *set); - -To iterate over the constraints of a basic set or map, use - - #include - - int isl_basic_map_foreach_constraint( - __isl_keep isl_basic_map *bmap, - int (*fn)(__isl_take isl_constraint *c, void *user), - void *user); - void isl_constraint_free(struct isl_constraint *c); - -Again, the callback function C should return 0 if successful and --1 if an error occurs. In the latter case, or if any other error -occurs, the above functions will return -1. -The constraint C represents either an equality or an inequality. -Use the following function to find out whether a constraint -represents an equality. If not, it represents an inequality. - - int isl_constraint_is_equality( - __isl_keep isl_constraint *constraint); - -The coefficients of the constraints can be inspected using -the following functions. - - void isl_constraint_get_constant( - __isl_keep isl_constraint *constraint, isl_int *v); - void isl_constraint_get_coefficient( - __isl_keep isl_constraint *constraint, - enum isl_dim_type type, int pos, isl_int *v); - int isl_constraint_involves_dims( - __isl_keep isl_constraint *constraint, - enum isl_dim_type type, unsigned first, unsigned n); - -The explicit representations of the existentially quantified -variables can be inspected using the following functions. -Note that the user is only allowed to use these functions -if the inspected set or map is the result of a call -to C or C. - - __isl_give isl_div *isl_constraint_div( - __isl_keep isl_constraint *constraint, int pos); - isl_ctx *isl_div_get_ctx(__isl_keep isl_div *div); - void isl_div_get_constant(__isl_keep isl_div *div, - isl_int *v); - void isl_div_get_denominator(__isl_keep isl_div *div, - isl_int *v); - void isl_div_get_coefficient(__isl_keep isl_div *div, - enum isl_dim_type type, int pos, isl_int *v); - -To obtain the constraints of a basic set or map in matrix -form, use the following functions. - - __isl_give isl_mat *isl_basic_set_equalities_matrix( - __isl_keep isl_basic_set *bset, - enum isl_dim_type c1, enum isl_dim_type c2, - enum isl_dim_type c3, enum isl_dim_type c4); - __isl_give isl_mat *isl_basic_set_inequalities_matrix( - __isl_keep isl_basic_set *bset, - enum isl_dim_type c1, enum isl_dim_type c2, - enum isl_dim_type c3, enum isl_dim_type c4); - __isl_give isl_mat *isl_basic_map_equalities_matrix( - __isl_keep isl_basic_map *bmap, - enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5); - __isl_give isl_mat *isl_basic_map_inequalities_matrix( - __isl_keep isl_basic_map *bmap, - enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5); - -The C arguments dictate the order in which -different kinds of variables appear in the resulting matrix -and should be a permutation of C, C, -C, C and C. - -The names of the domain and range spaces of a set or relation can be -read off or set using the following functions. - - const char *isl_basic_set_get_tuple_name( - __isl_keep isl_basic_set *bset); - __isl_give isl_basic_set *isl_basic_set_set_tuple_name( - __isl_take isl_basic_set *set, const char *s); - const char *isl_set_get_tuple_name( - __isl_keep isl_set *set); - const char *isl_basic_map_get_tuple_name( - __isl_keep isl_basic_map *bmap, - enum isl_dim_type type); - const char *isl_map_get_tuple_name( - __isl_keep isl_map *map, - enum isl_dim_type type); - -As with C, the value returned points to -an internal data structure. -The names of individual dimensions can be read off using -the following functions. - - const char *isl_constraint_get_dim_name( - __isl_keep isl_constraint *constraint, - enum isl_dim_type type, unsigned pos); - const char *isl_basic_set_get_dim_name( - __isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned pos); - const char *isl_set_get_dim_name( - __isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos); - const char *isl_basic_map_get_dim_name( - __isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos); - const char *isl_map_get_dim_name( - __isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos); - -These functions are mostly useful to obtain the names -of the parameters. - -=head2 Properties - -=head3 Unary Properties - -=over - -=item * Emptiness - -The following functions test whether the given set or relation -contains any integer points. The ``plain'' variants do not perform -any computations, but simply check if the given set or relation -is already known to be empty. - - int isl_basic_set_plain_is_empty(__isl_keep isl_basic_set *bset); - int isl_basic_set_is_empty(__isl_keep isl_basic_set *bset); - int isl_set_plain_is_empty(__isl_keep isl_set *set); - int isl_set_is_empty(__isl_keep isl_set *set); - int isl_union_set_is_empty(__isl_keep isl_union_set *uset); - int isl_basic_map_plain_is_empty(__isl_keep isl_basic_map *bmap); - int isl_basic_map_is_empty(__isl_keep isl_basic_map *bmap); - int isl_map_plain_is_empty(__isl_keep isl_map *map); - int isl_map_is_empty(__isl_keep isl_map *map); - int isl_union_map_is_empty(__isl_keep isl_union_map *umap); - -=item * Universality - - int isl_basic_set_is_universe(__isl_keep isl_basic_set *bset); - int isl_basic_map_is_universe(__isl_keep isl_basic_map *bmap); - int isl_set_plain_is_universe(__isl_keep isl_set *set); - -=item * Single-valuedness - - int isl_map_is_single_valued(__isl_keep isl_map *map); - int isl_union_map_is_single_valued(__isl_keep isl_union_map *umap); - -=item * Injectivity - - int isl_map_plain_is_injective(__isl_keep isl_map *map); - int isl_map_is_injective(__isl_keep isl_map *map); - int isl_union_map_plain_is_injective( - __isl_keep isl_union_map *umap); - int isl_union_map_is_injective( - __isl_keep isl_union_map *umap); - -=item * Bijectivity - - int isl_map_is_bijective(__isl_keep isl_map *map); - int isl_union_map_is_bijective(__isl_keep isl_union_map *umap); - -=item * Wrapping - -The following functions check whether the domain of the given -(basic) set is a wrapped relation. - - int isl_basic_set_is_wrapping( - __isl_keep isl_basic_set *bset); - int isl_set_is_wrapping(__isl_keep isl_set *set); - -=item * Internal Product - - int isl_basic_map_can_zip( - __isl_keep isl_basic_map *bmap); - int isl_map_can_zip(__isl_keep isl_map *map); - -Check whether the product of domain and range of the given relation -can be computed, -i.e., whether both domain and range are nested relations. - -=back - -=head3 Binary Properties - -=over - -=item * Equality - - int isl_set_plain_is_equal(__isl_keep isl_set *set1, - __isl_keep isl_set *set2); - int isl_set_is_equal(__isl_keep isl_set *set1, - __isl_keep isl_set *set2); - int isl_union_set_is_equal( - __isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2); - int isl_basic_map_is_equal( - __isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2); - int isl_map_is_equal(__isl_keep isl_map *map1, - __isl_keep isl_map *map2); - int isl_map_plain_is_equal(__isl_keep isl_map *map1, - __isl_keep isl_map *map2); - int isl_union_map_is_equal( - __isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2); - -=item * Disjointness - - int isl_set_plain_is_disjoint(__isl_keep isl_set *set1, - __isl_keep isl_set *set2); - -=item * Subset - - int isl_set_is_subset(__isl_keep isl_set *set1, - __isl_keep isl_set *set2); - int isl_set_is_strict_subset( - __isl_keep isl_set *set1, - __isl_keep isl_set *set2); - int isl_union_set_is_subset( - __isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2); - int isl_union_set_is_strict_subset( - __isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2); - int isl_basic_map_is_subset( - __isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2); - int isl_basic_map_is_strict_subset( - __isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2); - int isl_map_is_subset( - __isl_keep isl_map *map1, - __isl_keep isl_map *map2); - int isl_map_is_strict_subset( - __isl_keep isl_map *map1, - __isl_keep isl_map *map2); - int isl_union_map_is_subset( - __isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2); - int isl_union_map_is_strict_subset( - __isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2); - -=back - -=head2 Unary Operations - -=over - -=item * Complement - - __isl_give isl_set *isl_set_complement( - __isl_take isl_set *set); - -=item * Inverse map - - __isl_give isl_basic_map *isl_basic_map_reverse( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_reverse( - __isl_take isl_map *map); - __isl_give isl_union_map *isl_union_map_reverse( - __isl_take isl_union_map *umap); - -=item * Projection - - __isl_give isl_basic_set *isl_basic_set_project_out( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_basic_map *isl_basic_map_project_out( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_set *isl_set_project_out(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_map *isl_map_project_out(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_basic_set *isl_basic_map_domain( - __isl_take isl_basic_map *bmap); - __isl_give isl_basic_set *isl_basic_map_range( - __isl_take isl_basic_map *bmap); - __isl_give isl_set *isl_map_domain( - __isl_take isl_map *bmap); - __isl_give isl_set *isl_map_range( - __isl_take isl_map *map); - __isl_give isl_union_set *isl_union_map_domain( - __isl_take isl_union_map *umap); - __isl_give isl_union_set *isl_union_map_range( - __isl_take isl_union_map *umap); - - __isl_give isl_basic_map *isl_basic_map_domain_map( - __isl_take isl_basic_map *bmap); - __isl_give isl_basic_map *isl_basic_map_range_map( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_domain_map(__isl_take isl_map *map); - __isl_give isl_map *isl_map_range_map(__isl_take isl_map *map); - __isl_give isl_union_map *isl_union_map_domain_map( - __isl_take isl_union_map *umap); - __isl_give isl_union_map *isl_union_map_range_map( - __isl_take isl_union_map *umap); - -The functions above construct a (basic, regular or union) relation -that maps (a wrapped version of) the input relation to its domain or range. - -=item * Elimination - - __isl_give isl_set *isl_set_eliminate( - __isl_take isl_set *set, enum isl_dim_type type, - unsigned first, unsigned n); - -Eliminate the coefficients for the given dimensions from the constraints, -without removing the dimensions. - -=item * Slicing - - __isl_give isl_basic_set *isl_basic_set_fix( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, - isl_int value); - __isl_give isl_basic_set *isl_basic_set_fix_si( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, int value); - __isl_give isl_set *isl_set_fix(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, - isl_int value); - __isl_give isl_set *isl_set_fix_si(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, int value); - __isl_give isl_basic_map *isl_basic_map_fix_si( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, int value); - __isl_give isl_map *isl_map_fix_si(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, int value); - -Intersect the set or relation with the hyperplane where the given -dimension has the fixed given value. - -=item * Identity - - __isl_give isl_map *isl_set_identity( - __isl_take isl_set *set); - __isl_give isl_union_map *isl_union_set_identity( - __isl_take isl_union_set *uset); - -Construct an identity relation on the given (union) set. - -=item * Deltas - - __isl_give isl_basic_set *isl_basic_map_deltas( - __isl_take isl_basic_map *bmap); - __isl_give isl_set *isl_map_deltas(__isl_take isl_map *map); - __isl_give isl_union_set *isl_union_map_deltas( - __isl_take isl_union_map *umap); - -These functions return a (basic) set containing the differences -between image elements and corresponding domain elements in the input. - - __isl_give isl_basic_map *isl_basic_map_deltas_map( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_deltas_map( - __isl_take isl_map *map); - __isl_give isl_union_map *isl_union_map_deltas_map( - __isl_take isl_union_map *umap); - -The functions above construct a (basic, regular or union) relation -that maps (a wrapped version of) the input relation to its delta set. - -=item * Coalescing - -Simplify the representation of a set or relation by trying -to combine pairs of basic sets or relations into a single -basic set or relation. - - __isl_give isl_set *isl_set_coalesce(__isl_take isl_set *set); - __isl_give isl_map *isl_map_coalesce(__isl_take isl_map *map); - __isl_give isl_union_set *isl_union_set_coalesce( - __isl_take isl_union_set *uset); - __isl_give isl_union_map *isl_union_map_coalesce( - __isl_take isl_union_map *umap); - -=item * Detecting equalities - - __isl_give isl_basic_set *isl_basic_set_detect_equalities( - __isl_take isl_basic_set *bset); - __isl_give isl_basic_map *isl_basic_map_detect_equalities( - __isl_take isl_basic_map *bmap); - __isl_give isl_set *isl_set_detect_equalities( - __isl_take isl_set *set); - __isl_give isl_map *isl_map_detect_equalities( - __isl_take isl_map *map); - __isl_give isl_union_set *isl_union_set_detect_equalities( - __isl_take isl_union_set *uset); - __isl_give isl_union_map *isl_union_map_detect_equalities( - __isl_take isl_union_map *umap); - -Simplify the representation of a set or relation by detecting implicit -equalities. - -=item * Removing redundant constraints - - __isl_give isl_basic_set *isl_basic_set_remove_redundancies( - __isl_take isl_basic_set *bset); - __isl_give isl_set *isl_set_remove_redundancies( - __isl_take isl_set *set); - __isl_give isl_basic_map *isl_basic_map_remove_redundancies( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_remove_redundancies( - __isl_take isl_map *map); - -=item * Convex hull - - __isl_give isl_basic_set *isl_set_convex_hull( - __isl_take isl_set *set); - __isl_give isl_basic_map *isl_map_convex_hull( - __isl_take isl_map *map); - -If the input set or relation has any existentially quantified -variables, then the result of these operations is currently undefined. - -=item * Simple hull - - __isl_give isl_basic_set *isl_set_simple_hull( - __isl_take isl_set *set); - __isl_give isl_basic_map *isl_map_simple_hull( - __isl_take isl_map *map); - __isl_give isl_union_map *isl_union_map_simple_hull( - __isl_take isl_union_map *umap); - -These functions compute a single basic set or relation -that contains the whole input set or relation. -In particular, the output is described by translates -of the constraints describing the basic sets or relations in the input. - -=begin latex - -(See \autoref{s:simple hull}.) - -=end latex - -=item * Affine hull - - __isl_give isl_basic_set *isl_basic_set_affine_hull( - __isl_take isl_basic_set *bset); - __isl_give isl_basic_set *isl_set_affine_hull( - __isl_take isl_set *set); - __isl_give isl_union_set *isl_union_set_affine_hull( - __isl_take isl_union_set *uset); - __isl_give isl_basic_map *isl_basic_map_affine_hull( - __isl_take isl_basic_map *bmap); - __isl_give isl_basic_map *isl_map_affine_hull( - __isl_take isl_map *map); - __isl_give isl_union_map *isl_union_map_affine_hull( - __isl_take isl_union_map *umap); - -In case of union sets and relations, the affine hull is computed -per space. - -=item * Polyhedral hull - - __isl_give isl_basic_set *isl_set_polyhedral_hull( - __isl_take isl_set *set); - __isl_give isl_basic_map *isl_map_polyhedral_hull( - __isl_take isl_map *map); - __isl_give isl_union_set *isl_union_set_polyhedral_hull( - __isl_take isl_union_set *uset); - __isl_give isl_union_map *isl_union_map_polyhedral_hull( - __isl_take isl_union_map *umap); - -These functions compute a single basic set or relation -not involving any existentially quantified variables -that contains the whole input set or relation. -In case of union sets and relations, the polyhedral hull is computed -per space. - -=item * Optimization - - #include - enum isl_lp_result isl_basic_set_max( - __isl_keep isl_basic_set *bset, - __isl_keep isl_aff *obj, isl_int *opt) - enum isl_lp_result isl_set_max(__isl_keep isl_set *set, - __isl_keep isl_aff *obj, isl_int *opt); - -Compute the maximum of the integer affine expression C -over the points in C, returning the result in C. -The return value may be one of C, -C, C or C. - -=item * Parametric optimization - - __isl_give isl_pw_aff *isl_set_dim_max( - __isl_take isl_set *set, int pos); - -Compute the maximum of the given set dimension as a function of the -parameters, but independently of the other set dimensions. -For lexicographic optimization, see L<"Lexicographic Optimization">. - -=item * Dual - -The following functions compute either the set of (rational) coefficient -values of valid constraints for the given set or the set of (rational) -values satisfying the constraints with coefficients from the given set. -Internally, these two sets of functions perform essentially the -same operations, except that the set of coefficients is assumed to -be a cone, while the set of values may be any polyhedron. -The current implementation is based on the Farkas lemma and -Fourier-Motzkin elimination, but this may change or be made optional -in future. In particular, future implementations may use different -dualization algorithms or skip the elimination step. - - __isl_give isl_basic_set *isl_basic_set_coefficients( - __isl_take isl_basic_set *bset); - __isl_give isl_basic_set *isl_set_coefficients( - __isl_take isl_set *set); - __isl_give isl_union_set *isl_union_set_coefficients( - __isl_take isl_union_set *bset); - __isl_give isl_basic_set *isl_basic_set_solutions( - __isl_take isl_basic_set *bset); - __isl_give isl_basic_set *isl_set_solutions( - __isl_take isl_set *set); - __isl_give isl_union_set *isl_union_set_solutions( - __isl_take isl_union_set *bset); - -=item * Power - - __isl_give isl_map *isl_map_power(__isl_take isl_map *map, - int *exact); - __isl_give isl_union_map *isl_union_map_power( - __isl_take isl_union_map *umap, int *exact); - -Compute a parametric representation for all positive powers I of C. -The result maps I to a nested relation corresponding to the -Ith power of C. -The result may be an overapproximation. If the result is known to be exact, -then C<*exact> is set to C<1>. - -=item * Transitive closure - - __isl_give isl_map *isl_map_transitive_closure( - __isl_take isl_map *map, int *exact); - __isl_give isl_union_map *isl_union_map_transitive_closure( - __isl_take isl_union_map *umap, int *exact); - -Compute the transitive closure of C. -The result may be an overapproximation. If the result is known to be exact, -then C<*exact> is set to C<1>. - -=item * Reaching path lengths - - __isl_give isl_map *isl_map_reaching_path_lengths( - __isl_take isl_map *map, int *exact); - -Compute a relation that maps each element in the range of C -to the lengths of all paths composed of edges in C that -end up in the given element. -The result may be an overapproximation. If the result is known to be exact, -then C<*exact> is set to C<1>. -To compute the I path length, the resulting relation -should be postprocessed by C. -In particular, if the input relation is a dependence relation -(mapping sources to sinks), then the maximal path length corresponds -to the free schedule. -Note, however, that C expects the maximum to be -finite, so if the path lengths are unbounded (possibly due to -the overapproximation), then you will get an error message. - -=item * Wrapping - - __isl_give isl_basic_set *isl_basic_map_wrap( - __isl_take isl_basic_map *bmap); - __isl_give isl_set *isl_map_wrap( - __isl_take isl_map *map); - __isl_give isl_union_set *isl_union_map_wrap( - __isl_take isl_union_map *umap); - __isl_give isl_basic_map *isl_basic_set_unwrap( - __isl_take isl_basic_set *bset); - __isl_give isl_map *isl_set_unwrap( - __isl_take isl_set *set); - __isl_give isl_union_map *isl_union_set_unwrap( - __isl_take isl_union_set *uset); - -=item * Flattening - -Remove any internal structure of domain (and range) of the given -set or relation. If there is any such internal structure in the input, -then the name of the space is also removed. - - __isl_give isl_basic_set *isl_basic_set_flatten( - __isl_take isl_basic_set *bset); - __isl_give isl_set *isl_set_flatten( - __isl_take isl_set *set); - __isl_give isl_basic_map *isl_basic_map_flatten_range( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_flatten_range( - __isl_take isl_map *map); - __isl_give isl_basic_map *isl_basic_map_flatten( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_flatten( - __isl_take isl_map *map); - - __isl_give isl_map *isl_set_flatten_map( - __isl_take isl_set *set); - -The function above constructs a relation -that maps the input set to a flattened version of the set. - -=item * Lifting - -Lift the input set to a space with extra dimensions corresponding -to the existentially quantified variables in the input. -In particular, the result lives in a wrapped map where the domain -is the original space and the range corresponds to the original -existentially quantified variables. - - __isl_give isl_basic_set *isl_basic_set_lift( - __isl_take isl_basic_set *bset); - __isl_give isl_set *isl_set_lift( - __isl_take isl_set *set); - __isl_give isl_union_set *isl_union_set_lift( - __isl_take isl_union_set *uset); - -=item * Internal Product - - __isl_give isl_basic_map *isl_basic_map_zip( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_zip( - __isl_take isl_map *map); - __isl_give isl_union_map *isl_union_map_zip( - __isl_take isl_union_map *umap); - -Given a relation with nested relations for domain and range, -interchange the range of the domain with the domain of the range. - -=item * Aligning parameters - - __isl_give isl_set *isl_set_align_params( - __isl_take isl_set *set, - __isl_take isl_dim *model); - __isl_give isl_map *isl_map_align_params( - __isl_take isl_map *map, - __isl_take isl_dim *model); - -Change the order of the parameters of the given set or relation -such that the first parameters match those of C. -This may involve the introduction of extra parameters. -All parameters need to be named. - -=item * Dimension manipulation - - __isl_give isl_set *isl_set_add_dims( - __isl_take isl_set *set, - enum isl_dim_type type, unsigned n); - __isl_give isl_map *isl_map_add_dims( - __isl_take isl_map *map, - enum isl_dim_type type, unsigned n); - -It is usually not advisable to directly change the (input or output) -space of a set or a relation as this removes the name and the internal -structure of the space. However, the above functions can be useful -to add new parameters, assuming -C and C -are not sufficient. - -=back - -=head2 Binary Operations - -The two arguments of a binary operation not only need to live -in the same C, they currently also need to have -the same (number of) parameters. - -=head3 Basic Operations - -=over - -=item * Intersection - - __isl_give isl_basic_set *isl_basic_set_intersect( - __isl_take isl_basic_set *bset1, - __isl_take isl_basic_set *bset2); - __isl_give isl_set *isl_set_intersect_params( - __isl_take isl_set *set, - __isl_take isl_set *params); - __isl_give isl_set *isl_set_intersect( - __isl_take isl_set *set1, - __isl_take isl_set *set2); - __isl_give isl_union_set *isl_union_set_intersect( - __isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2); - __isl_give isl_basic_map *isl_basic_map_intersect_domain( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *bset); - __isl_give isl_basic_map *isl_basic_map_intersect_range( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *bset); - __isl_give isl_basic_map *isl_basic_map_intersect( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_map *isl_map_intersect_params( - __isl_take isl_map *map, - __isl_take isl_set *params); - __isl_give isl_map *isl_map_intersect_domain( - __isl_take isl_map *map, - __isl_take isl_set *set); - __isl_give isl_map *isl_map_intersect_range( - __isl_take isl_map *map, - __isl_take isl_set *set); - __isl_give isl_map *isl_map_intersect( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_map *isl_union_map_intersect_domain( - __isl_take isl_union_map *umap, - __isl_take isl_union_set *uset); - __isl_give isl_union_map *isl_union_map_intersect_range( - __isl_take isl_union_map *umap, - __isl_take isl_union_set *uset); - __isl_give isl_union_map *isl_union_map_intersect( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - -=item * Union - - __isl_give isl_set *isl_basic_set_union( - __isl_take isl_basic_set *bset1, - __isl_take isl_basic_set *bset2); - __isl_give isl_map *isl_basic_map_union( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_set *isl_set_union( - __isl_take isl_set *set1, - __isl_take isl_set *set2); - __isl_give isl_map *isl_map_union( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_set *isl_union_set_union( - __isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2); - __isl_give isl_union_map *isl_union_map_union( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - -=item * Set difference - - __isl_give isl_set *isl_set_subtract( - __isl_take isl_set *set1, - __isl_take isl_set *set2); - __isl_give isl_map *isl_map_subtract( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_set *isl_union_set_subtract( - __isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2); - __isl_give isl_union_map *isl_union_map_subtract( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - -=item * Application - - __isl_give isl_basic_set *isl_basic_set_apply( - __isl_take isl_basic_set *bset, - __isl_take isl_basic_map *bmap); - __isl_give isl_set *isl_set_apply( - __isl_take isl_set *set, - __isl_take isl_map *map); - __isl_give isl_union_set *isl_union_set_apply( - __isl_take isl_union_set *uset, - __isl_take isl_union_map *umap); - __isl_give isl_basic_map *isl_basic_map_apply_domain( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_basic_map *isl_basic_map_apply_range( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_map *isl_map_apply_domain( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_map *isl_union_map_apply_domain( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - __isl_give isl_map *isl_map_apply_range( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_map *isl_union_map_apply_range( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - -=item * Cartesian Product - - __isl_give isl_set *isl_set_product( - __isl_take isl_set *set1, - __isl_take isl_set *set2); - __isl_give isl_union_set *isl_union_set_product( - __isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2); - __isl_give isl_basic_map *isl_basic_map_range_product( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_map *isl_map_range_product( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_map *isl_union_map_range_product( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - __isl_give isl_map *isl_map_product( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_map *isl_union_map_product( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - -The above functions compute the cross product of the given -sets or relations. The domains and ranges of the results -are wrapped maps between domains and ranges of the inputs. -To obtain a ``flat'' product, use the following functions -instead. - - __isl_give isl_basic_set *isl_basic_set_flat_product( - __isl_take isl_basic_set *bset1, - __isl_take isl_basic_set *bset2); - __isl_give isl_set *isl_set_flat_product( - __isl_take isl_set *set1, - __isl_take isl_set *set2); - __isl_give isl_basic_map *isl_basic_map_flat_range_product( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_map *isl_map_flat_range_product( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_map *isl_union_map_flat_range_product( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - __isl_give isl_basic_map *isl_basic_map_flat_product( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_map *isl_map_flat_product( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - -=item * Simplification - - __isl_give isl_basic_set *isl_basic_set_gist( - __isl_take isl_basic_set *bset, - __isl_take isl_basic_set *context); - __isl_give isl_set *isl_set_gist(__isl_take isl_set *set, - __isl_take isl_set *context); - __isl_give isl_union_set *isl_union_set_gist( - __isl_take isl_union_set *uset, - __isl_take isl_union_set *context); - __isl_give isl_basic_map *isl_basic_map_gist( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_map *context); - __isl_give isl_map *isl_map_gist(__isl_take isl_map *map, - __isl_take isl_map *context); - __isl_give isl_union_map *isl_union_map_gist( - __isl_take isl_union_map *umap, - __isl_take isl_union_map *context); - -The gist operation returns a set or relation that has the -same intersection with the context as the input set or relation. -Any implicit equality in the intersection is made explicit in the result, -while all inequalities that are redundant with respect to the intersection -are removed. -In case of union sets and relations, the gist operation is performed -per space. - -=back - -=head3 Lexicographic Optimization - -Given a (basic) set C (or C) and a zero-dimensional domain C, -the following functions -compute a set that contains the lexicographic minimum or maximum -of the elements in C (or C) for those values of the parameters -that satisfy C. -If C is not C, then C<*empty> is assigned a set -that contains the parameter values in C for which C (or C) -has no elements. -In other words, the union of the parameter values -for which the result is non-empty and of C<*empty> -is equal to C. - - __isl_give isl_set *isl_basic_set_partial_lexmin( - __isl_take isl_basic_set *bset, - __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); - __isl_give isl_set *isl_basic_set_partial_lexmax( - __isl_take isl_basic_set *bset, - __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); - __isl_give isl_set *isl_set_partial_lexmin( - __isl_take isl_set *set, __isl_take isl_set *dom, - __isl_give isl_set **empty); - __isl_give isl_set *isl_set_partial_lexmax( - __isl_take isl_set *set, __isl_take isl_set *dom, - __isl_give isl_set **empty); - -Given a (basic) set C (or C), the following functions simply -return a set containing the lexicographic minimum or maximum -of the elements in C (or C). -In case of union sets, the optimum is computed per space. - - __isl_give isl_set *isl_basic_set_lexmin( - __isl_take isl_basic_set *bset); - __isl_give isl_set *isl_basic_set_lexmax( - __isl_take isl_basic_set *bset); - __isl_give isl_set *isl_set_lexmin( - __isl_take isl_set *set); - __isl_give isl_set *isl_set_lexmax( - __isl_take isl_set *set); - __isl_give isl_union_set *isl_union_set_lexmin( - __isl_take isl_union_set *uset); - __isl_give isl_union_set *isl_union_set_lexmax( - __isl_take isl_union_set *uset); - -Given a (basic) relation C (or C) and a domain C, -the following functions -compute a relation that maps each element of C -to the single lexicographic minimum or maximum -of the elements that are associated to that same -element in C (or C). -If C is not C, then C<*empty> is assigned a set -that contains the elements in C that do not map -to any elements in C (or C). -In other words, the union of the domain of the result and of C<*empty> -is equal to C. - - __isl_give isl_map *isl_basic_map_partial_lexmax( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); - __isl_give isl_map *isl_basic_map_partial_lexmin( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); - __isl_give isl_map *isl_map_partial_lexmax( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty); - __isl_give isl_map *isl_map_partial_lexmin( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty); - -Given a (basic) map C (or C), the following functions simply -return a map mapping each element in the domain of -C (or C) to the lexicographic minimum or maximum -of all elements associated to that element. -In case of union relations, the optimum is computed per space. - - __isl_give isl_map *isl_basic_map_lexmin( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_basic_map_lexmax( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_lexmin( - __isl_take isl_map *map); - __isl_give isl_map *isl_map_lexmax( - __isl_take isl_map *map); - __isl_give isl_union_map *isl_union_map_lexmin( - __isl_take isl_union_map *umap); - __isl_give isl_union_map *isl_union_map_lexmax( - __isl_take isl_union_map *umap); - -=head2 Lists - -Lists are defined over several element types, including -C, C and C. -Here we take lists of Cs as an example. -Lists can be created, copied and freed using the following functions. - - #include - __isl_give isl_set_list *isl_set_list_alloc( - isl_ctx *ctx, int n); - __isl_give isl_set_list *isl_set_list_copy( - __isl_keep isl_set_list *list); - __isl_give isl_set_list *isl_set_list_add( - __isl_take isl_set_list *list, - __isl_take isl_set *el); - void isl_set_list_free(__isl_take isl_set_list *list); - -C creates an empty list with a capacity for -C elements. - -Lists can be inspected using the following functions. - - #include - isl_ctx *isl_set_list_get_ctx(__isl_keep isl_set_list *list); - int isl_set_list_n_set(__isl_keep isl_set_list *list); - __isl_give struct isl_set *isl_set_list_get_set( - __isl_keep isl_set_list *list, int index); - int isl_set_list_foreach(__isl_keep isl_set_list *list, - int (*fn)(__isl_take struct isl_set *el, void *user), - void *user); - -Lists can be printed using - - #include - __isl_give isl_printer *isl_printer_print_set_list( - __isl_take isl_printer *p, - __isl_keep isl_set_list *list); - -=head2 Matrices - -Matrices can be created, copied and freed using the following functions. - - #include - __isl_give isl_mat *isl_mat_alloc(struct isl_ctx *ctx, - unsigned n_row, unsigned n_col); - __isl_give isl_mat *isl_mat_copy(__isl_keep isl_mat *mat); - void isl_mat_free(__isl_take isl_mat *mat); - -Note that the elements of a newly created matrix may have arbitrary values. -The elements can be changed and inspected using the following functions. - - isl_ctx *isl_mat_get_ctx(__isl_keep isl_mat *mat); - int isl_mat_rows(__isl_keep isl_mat *mat); - int isl_mat_cols(__isl_keep isl_mat *mat); - int isl_mat_get_element(__isl_keep isl_mat *mat, - int row, int col, isl_int *v); - __isl_give isl_mat *isl_mat_set_element(__isl_take isl_mat *mat, - int row, int col, isl_int v); - __isl_give isl_mat *isl_mat_set_element_si(__isl_take isl_mat *mat, - int row, int col, int v); - -C will return a negative value if anything went wrong. -In that case, the value of C<*v> is undefined. - -The following function can be used to compute the (right) inverse -of a matrix, i.e., a matrix such that the product of the original -and the inverse (in that order) is a multiple of the identity matrix. -The input matrix is assumed to be of full row-rank. - - __isl_give isl_mat *isl_mat_right_inverse(__isl_take isl_mat *mat); - -The following function can be used to compute the (right) kernel -(or null space) of a matrix, i.e., a matrix such that the product of -the original and the kernel (in that order) is the zero matrix. - - __isl_give isl_mat *isl_mat_right_kernel(__isl_take isl_mat *mat); - -=head2 Piecewise Quasi Affine Expressions - -The zero quasi affine expression can be created using - - __isl_give isl_aff *isl_aff_zero( - __isl_take isl_local_space *ls); - -A quasi affine expression can also be initialized from an C: - - #include - __isl_give isl_aff *isl_aff_from_div(__isl_take isl_div *div); - -An empty piecewise quasi affine expression (one with no cells) -or a piecewise quasi affine expression with a single cell can -be created using the following functions. - - #include - __isl_give isl_pw_aff *isl_pw_aff_empty( - __isl_take isl_dim *dim); - __isl_give isl_pw_aff *isl_pw_aff_alloc( - __isl_take isl_set *set, __isl_take isl_aff *aff); - -Quasi affine expressions can be copied and freed using - - #include - __isl_give isl_aff *isl_aff_copy(__isl_keep isl_aff *aff); - void *isl_aff_free(__isl_take isl_aff *aff); - - __isl_give isl_pw_aff *isl_pw_aff_copy( - __isl_keep isl_pw_aff *pwaff); - void *isl_pw_aff_free(__isl_take isl_pw_aff *pwaff); - -A (rational) bound on a dimension can be extracted from an C -using the following function. The constraint is required to have -a non-zero coefficient for the specified dimension. - - #include - __isl_give isl_aff *isl_constraint_get_bound( - __isl_keep isl_constraint *constraint, - enum isl_dim_type type, int pos); - -The entire affine expression of the constraint can also be extracted -using the following function. - - #include - __isl_give isl_aff *isl_constraint_get_aff( - __isl_keep isl_constraint *constraint); - -Conversely, an equality constraint equating -the affine expression to zero or an inequality constraint enforcing -the affine expression to be non-negative, can be constructed using - - __isl_give isl_constraint *isl_equality_from_aff( - __isl_take isl_aff *aff); - __isl_give isl_constraint *isl_inequality_from_aff( - __isl_take isl_aff *aff); - -The expression can be inspected using - - #include - isl_ctx *isl_aff_get_ctx(__isl_keep isl_aff *aff); - int isl_aff_dim(__isl_keep isl_aff *aff, - enum isl_dim_type type); - __isl_give isl_local_space *isl_aff_get_local_space( - __isl_keep isl_aff *aff); - const char *isl_aff_get_dim_name(__isl_keep isl_aff *aff, - enum isl_dim_type type, unsigned pos); - int isl_aff_get_constant(__isl_keep isl_aff *aff, - isl_int *v); - int isl_aff_get_coefficient(__isl_keep isl_aff *aff, - enum isl_dim_type type, int pos, isl_int *v); - int isl_aff_get_denominator(__isl_keep isl_aff *aff, - isl_int *v); - __isl_give isl_div *isl_aff_get_div( - __isl_keep isl_aff *aff, int pos); - - int isl_aff_involves_dims(__isl_keep isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n); - int isl_pw_aff_involves_dims(__isl_keep isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned first, unsigned n); - - isl_ctx *isl_pw_aff_get_ctx(__isl_keep isl_pw_aff *pwaff); - unsigned isl_pw_aff_dim(__isl_keep isl_pw_aff *pwaff, - enum isl_dim_type type); - int isl_pw_aff_is_empty(__isl_keep isl_pw_aff *pwaff); - -It can be modified using - - #include - __isl_give isl_aff *isl_aff_set_dim_name( - __isl_take isl_aff *aff, enum isl_dim_type type, - unsigned pos, const char *s); - __isl_give isl_aff *isl_aff_set_constant( - __isl_take isl_aff *aff, isl_int v); - __isl_give isl_aff *isl_aff_set_constant_si( - __isl_take isl_aff *aff, int v); - __isl_give isl_aff *isl_aff_set_coefficient( - __isl_take isl_aff *aff, - enum isl_dim_type type, int pos, isl_int v); - __isl_give isl_aff *isl_aff_set_coefficient_si( - __isl_take isl_aff *aff, - enum isl_dim_type type, int pos, int v); - __isl_give isl_aff *isl_aff_set_denominator( - __isl_take isl_aff *aff, isl_int v); - - __isl_give isl_aff *isl_aff_add_constant( - __isl_take isl_aff *aff, isl_int v); - __isl_give isl_aff *isl_aff_add_constant_si( - __isl_take isl_aff *aff, int v); - __isl_give isl_aff *isl_aff_add_coefficient( - __isl_take isl_aff *aff, - enum isl_dim_type type, int pos, isl_int v); - __isl_give isl_aff *isl_aff_add_coefficient_si( - __isl_take isl_aff *aff, - enum isl_dim_type type, int pos, int v); - - __isl_give isl_aff *isl_aff_insert_dims( - __isl_take isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_pw_aff *isl_pw_aff_insert_dims( - __isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_aff *isl_aff_add_dims( - __isl_take isl_aff *aff, - enum isl_dim_type type, unsigned n); - __isl_give isl_pw_aff *isl_pw_aff_add_dims( - __isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned n); - __isl_give isl_aff *isl_aff_drop_dims( - __isl_take isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_pw_aff *isl_pw_aff_drop_dims( - __isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned first, unsigned n); - -Note that the C and C functions -set the I of the constant or coefficient, while -C and C add an integer value to -the possibly rational constant or coefficient. - -To check whether an affine expressions is obviously zero -or obviously equal to some other affine expression, use - - #include - int isl_aff_plain_is_zero(__isl_keep isl_aff *aff); - int isl_aff_plain_is_equal(__isl_keep isl_aff *aff1, - __isl_keep isl_aff *aff2); - -Operations include - - #include - __isl_give isl_aff *isl_aff_add(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2); - __isl_give isl_pw_aff *isl_pw_aff_add( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_aff *isl_aff_sub(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2); - __isl_give isl_pw_aff *isl_pw_aff_sub( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_aff *isl_aff_neg(__isl_take isl_aff *aff); - __isl_give isl_pw_aff *isl_pw_aff_neg( - __isl_take isl_pw_aff *pwaff); - __isl_give isl_aff *isl_aff_ceil(__isl_take isl_aff *aff); - __isl_give isl_pw_aff *isl_pw_aff_ceil( - __isl_take isl_pw_aff *pwaff); - __isl_give isl_aff *isl_aff_floor(__isl_take isl_aff *aff); - __isl_give isl_pw_aff *isl_pw_aff_floor( - __isl_take isl_pw_aff *pwaff); - __isl_give isl_aff *isl_aff_scale(__isl_take isl_aff *aff, - isl_int f); - __isl_give isl_pw_aff *isl_pw_aff_scale( - __isl_take isl_pw_aff *pwaff, isl_int f); - __isl_give isl_aff *isl_aff_scale_down(__isl_take isl_aff *aff, - isl_int f); - __isl_give isl_aff *isl_aff_scale_down_ui( - __isl_take isl_aff *aff, unsigned f); - __isl_give isl_pw_aff *isl_pw_aff_scale_down( - __isl_take isl_pw_aff *pwaff, isl_int f); - - __isl_give isl_pw_aff *isl_pw_aff_coalesce( - __isl_take isl_pw_aff *pwqp); - - __isl_give isl_pw_aff *isl_pw_aff_align_params( - __isl_take isl_pw_aff *pwaff, - __isl_take isl_dim *model); - - __isl_give isl_aff *isl_aff_gist(__isl_take isl_aff *aff, - __isl_take isl_set *context); - __isl_give isl_pw_aff *isl_pw_aff_gist( - __isl_take isl_pw_aff *pwaff, - __isl_take isl_set *context); - - __isl_give isl_set *isl_pw_aff_domain( - __isl_take isl_pw_aff *pwaff); - - __isl_give isl_basic_set *isl_aff_ge_basic_set( - __isl_take isl_aff *aff1, __isl_take isl_aff *aff2); - __isl_give isl_set *isl_pw_aff_eq_set( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_set *isl_pw_aff_le_set( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_set *isl_pw_aff_lt_set( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_set *isl_pw_aff_ge_set( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_set *isl_pw_aff_gt_set( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - -The function C returns a basic set -containing those elements in the shared space -of C and C where C is greater than or equal to C. -The function C returns a set -containing those elements in the shared domain -of C and C where C is greater than or equal to C. - - #include - __isl_give isl_set *isl_pw_aff_nonneg_set( - __isl_take isl_pw_aff *pwaff); - -The function C returns a set -containing those elements in the domain -of C where C is non-negative. - - #include - __isl_give isl_pw_aff *isl_pw_aff_cond( - __isl_take isl_set *cond, - __isl_take isl_pw_aff *pwaff_true, - __isl_take isl_pw_aff *pwaff_false); - -The function C performs a conditional operator -and returns an expression that is equal to C -for elements in C and equal to C for elements -not in C. - - #include - __isl_give isl_pw_aff *isl_pw_aff_max( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - -The function C computes a piecewise quasi-affine -expression with a domain that is the union of those of C and -C and such that on each cell, the quasi-affine expression is -the maximum of those of C and C. If only one of -C or C is defined on a given cell, then the -associated expression is the defined one. - -An expression can be printed using - - #include - __isl_give isl_printer *isl_printer_print_aff( - __isl_take isl_printer *p, __isl_keep isl_aff *aff); - - __isl_give isl_printer *isl_printer_print_pw_aff( - __isl_take isl_printer *p, - __isl_keep isl_pw_aff *pwaff); - -=head2 Points - -Points are elements of a set. They can be used to construct -simple sets (boxes) or they can be used to represent the -individual elements of a set. -The zero point (the origin) can be created using - - __isl_give isl_point *isl_point_zero(__isl_take isl_dim *dim); - -The coordinates of a point can be inspected, set and changed -using - - void isl_point_get_coordinate(__isl_keep isl_point *pnt, - enum isl_dim_type type, int pos, isl_int *v); - __isl_give isl_point *isl_point_set_coordinate( - __isl_take isl_point *pnt, - enum isl_dim_type type, int pos, isl_int v); - - __isl_give isl_point *isl_point_add_ui( - __isl_take isl_point *pnt, - enum isl_dim_type type, int pos, unsigned val); - __isl_give isl_point *isl_point_sub_ui( - __isl_take isl_point *pnt, - enum isl_dim_type type, int pos, unsigned val); - -Other properties can be obtained using - - isl_ctx *isl_point_get_ctx(__isl_keep isl_point *pnt); - -Points can be copied or freed using - - __isl_give isl_point *isl_point_copy( - __isl_keep isl_point *pnt); - void isl_point_free(__isl_take isl_point *pnt); - -A singleton set can be created from a point using - - __isl_give isl_basic_set *isl_basic_set_from_point( - __isl_take isl_point *pnt); - __isl_give isl_set *isl_set_from_point( - __isl_take isl_point *pnt); - -and a box can be created from two opposite extremal points using - - __isl_give isl_basic_set *isl_basic_set_box_from_points( - __isl_take isl_point *pnt1, - __isl_take isl_point *pnt2); - __isl_give isl_set *isl_set_box_from_points( - __isl_take isl_point *pnt1, - __isl_take isl_point *pnt2); - -All elements of a B (union) set can be enumerated using -the following functions. - - int isl_set_foreach_point(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_point *pnt, void *user), - void *user); - int isl_union_set_foreach_point(__isl_keep isl_union_set *uset, - int (*fn)(__isl_take isl_point *pnt, void *user), - void *user); - -The function C is called for each integer point in -C with as second argument the last argument of -the C call. The function C -should return C<0> on success and C<-1> on failure. -In the latter case, C will stop -enumerating and return C<-1> as well. -If the enumeration is performed successfully and to completion, -then C returns C<0>. - -To obtain a single point of a (basic) set, use - - __isl_give isl_point *isl_basic_set_sample_point( - __isl_take isl_basic_set *bset); - __isl_give isl_point *isl_set_sample_point( - __isl_take isl_set *set); - -If C does not contain any (integer) points, then the -resulting point will be ``void'', a property that can be -tested using - - int isl_point_is_void(__isl_keep isl_point *pnt); - -=head2 Piecewise Quasipolynomials - -A piecewise quasipolynomial is a particular kind of function that maps -a parametric point to a rational value. -More specifically, a quasipolynomial is a polynomial expression in greatest -integer parts of affine expressions of parameters and variables. -A piecewise quasipolynomial is a subdivision of a given parametric -domain into disjoint cells with a quasipolynomial associated to -each cell. The value of the piecewise quasipolynomial at a given -point is the value of the quasipolynomial associated to the cell -that contains the point. Outside of the union of cells, -the value is assumed to be zero. -For example, the piecewise quasipolynomial - - [n] -> { [x] -> ((1 + n) - x) : x <= n and x >= 0 } - -maps C to C<1 + n - x> for values of C between C<0> and C. -A given piecewise quasipolynomial has a fixed domain dimension. -Union piecewise quasipolynomials are used to contain piecewise quasipolynomials -defined over different domains. -Piecewise quasipolynomials are mainly used by the C -library for representing the number of elements in a parametric set or map. -For example, the piecewise quasipolynomial above represents -the number of points in the map - - [n] -> { [x] -> [y] : x,y >= 0 and 0 <= x + y <= n } - -=head3 Printing (Piecewise) Quasipolynomials - -Quasipolynomials and piecewise quasipolynomials can be printed -using the following functions. - - __isl_give isl_printer *isl_printer_print_qpolynomial( - __isl_take isl_printer *p, - __isl_keep isl_qpolynomial *qp); - - __isl_give isl_printer *isl_printer_print_pw_qpolynomial( - __isl_take isl_printer *p, - __isl_keep isl_pw_qpolynomial *pwqp); - - __isl_give isl_printer *isl_printer_print_union_pw_qpolynomial( - __isl_take isl_printer *p, - __isl_keep isl_union_pw_qpolynomial *upwqp); - -The output format of the printer -needs to be set to either C or C. -For C, only C -is supported. -In case of printing in C, the user may want -to set the names of all dimensions - - __isl_give isl_qpolynomial *isl_qpolynomial_set_dim_name( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type type, unsigned pos, - const char *s); - __isl_give isl_pw_qpolynomial * - isl_pw_qpolynomial_set_dim_name( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned pos, - const char *s); - -=head3 Creating New (Piecewise) Quasipolynomials - -Some simple quasipolynomials can be created using the following functions. -More complicated quasipolynomials can be created by applying -operations such as addition and multiplication -on the resulting quasipolynomials - - __isl_give isl_qpolynomial *isl_qpolynomial_zero( - __isl_take isl_dim *dim); - __isl_give isl_qpolynomial *isl_qpolynomial_one( - __isl_take isl_dim *dim); - __isl_give isl_qpolynomial *isl_qpolynomial_infty( - __isl_take isl_dim *dim); - __isl_give isl_qpolynomial *isl_qpolynomial_neginfty( - __isl_take isl_dim *dim); - __isl_give isl_qpolynomial *isl_qpolynomial_nan( - __isl_take isl_dim *dim); - __isl_give isl_qpolynomial *isl_qpolynomial_rat_cst( - __isl_take isl_dim *dim, - const isl_int n, const isl_int d); - __isl_give isl_qpolynomial *isl_qpolynomial_div( - __isl_take isl_div *div); - __isl_give isl_qpolynomial *isl_qpolynomial_var( - __isl_take isl_dim *dim, - enum isl_dim_type type, unsigned pos); - __isl_give isl_qpolynomial *isl_qpolynomial_from_aff( - __isl_take isl_aff *aff); - -The zero piecewise quasipolynomial or a piecewise quasipolynomial -with a single cell can be created using the following functions. -Multiple of these single cell piecewise quasipolynomials can -be combined to create more complicated piecewise quasipolynomials. - - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_zero( - __isl_take isl_dim *dim); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_alloc( - __isl_take isl_set *set, - __isl_take isl_qpolynomial *qp); - - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_zero( - __isl_take isl_dim *dim); - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_from_pw_qpolynomial( - __isl_take isl_pw_qpolynomial *pwqp); - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_add_pw_qpolynomial( - __isl_take isl_union_pw_qpolynomial *upwqp, - __isl_take isl_pw_qpolynomial *pwqp); - -Quasipolynomials can be copied and freed again using the following -functions. - - __isl_give isl_qpolynomial *isl_qpolynomial_copy( - __isl_keep isl_qpolynomial *qp); - void isl_qpolynomial_free(__isl_take isl_qpolynomial *qp); - - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_copy( - __isl_keep isl_pw_qpolynomial *pwqp); - void *isl_pw_qpolynomial_free( - __isl_take isl_pw_qpolynomial *pwqp); - - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_copy( - __isl_keep isl_union_pw_qpolynomial *upwqp); - void isl_union_pw_qpolynomial_free( - __isl_take isl_union_pw_qpolynomial *upwqp); - -=head3 Inspecting (Piecewise) Quasipolynomials - -To iterate over all piecewise quasipolynomials in a union -piecewise quasipolynomial, use the following function - - int isl_union_pw_qpolynomial_foreach_pw_qpolynomial( - __isl_keep isl_union_pw_qpolynomial *upwqp, - int (*fn)(__isl_take isl_pw_qpolynomial *pwqp, void *user), - void *user); - -To extract the piecewise quasipolynomial from a union with a given dimension -specification, use - - __isl_give isl_pw_qpolynomial * - isl_union_pw_qpolynomial_extract_pw_qpolynomial( - __isl_keep isl_union_pw_qpolynomial *upwqp, - __isl_take isl_dim *dim); - -To iterate over the cells in a piecewise quasipolynomial, -use either of the following two functions - - int isl_pw_qpolynomial_foreach_piece( - __isl_keep isl_pw_qpolynomial *pwqp, - int (*fn)(__isl_take isl_set *set, - __isl_take isl_qpolynomial *qp, - void *user), void *user); - int isl_pw_qpolynomial_foreach_lifted_piece( - __isl_keep isl_pw_qpolynomial *pwqp, - int (*fn)(__isl_take isl_set *set, - __isl_take isl_qpolynomial *qp, - void *user), void *user); - -As usual, the function C should return C<0> on success -and C<-1> on failure. The difference between -C and -C is that -C will first -compute unique representations for all existentially quantified -variables and then turn these existentially quantified variables -into extra set variables, adapting the associated quasipolynomial -accordingly. This means that the C passed to C -will not have any existentially quantified variables, but that -the dimensions of the sets may be different for different -invocations of C. - -To iterate over all terms in a quasipolynomial, -use - - int isl_qpolynomial_foreach_term( - __isl_keep isl_qpolynomial *qp, - int (*fn)(__isl_take isl_term *term, - void *user), void *user); - -The terms themselves can be inspected and freed using -these functions - - unsigned isl_term_dim(__isl_keep isl_term *term, - enum isl_dim_type type); - void isl_term_get_num(__isl_keep isl_term *term, - isl_int *n); - void isl_term_get_den(__isl_keep isl_term *term, - isl_int *d); - int isl_term_get_exp(__isl_keep isl_term *term, - enum isl_dim_type type, unsigned pos); - __isl_give isl_div *isl_term_get_div( - __isl_keep isl_term *term, unsigned pos); - void isl_term_free(__isl_take isl_term *term); - -Each term is a product of parameters, set variables and -integer divisions. The function C -returns the exponent of a given dimensions in the given term. -The Cs in the arguments of C -and C need to have been initialized -using C before calling these functions. - -=head3 Properties of (Piecewise) Quasipolynomials - -To check whether a quasipolynomial is actually a constant, -use the following function. - - int isl_qpolynomial_is_cst(__isl_keep isl_qpolynomial *qp, - isl_int *n, isl_int *d); - -If C is a constant and if C and C are not C -then the numerator and denominator of the constant -are returned in C<*n> and C<*d>, respectively. - -=head3 Operations on (Piecewise) Quasipolynomials - - __isl_give isl_qpolynomial *isl_qpolynomial_scale( - __isl_take isl_qpolynomial *qp, isl_int v); - __isl_give isl_qpolynomial *isl_qpolynomial_neg( - __isl_take isl_qpolynomial *qp); - __isl_give isl_qpolynomial *isl_qpolynomial_add( - __isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2); - __isl_give isl_qpolynomial *isl_qpolynomial_sub( - __isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2); - __isl_give isl_qpolynomial *isl_qpolynomial_mul( - __isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2); - __isl_give isl_qpolynomial *isl_qpolynomial_pow( - __isl_take isl_qpolynomial *qp, unsigned exponent); - - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_sub( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add_disjoint( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_neg( - __isl_take isl_pw_qpolynomial *pwqp); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_mul( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); - - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_add( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2); - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_sub( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2); - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_mul( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2); - - __isl_give isl_qpolynomial *isl_pw_qpolynomial_eval( - __isl_take isl_pw_qpolynomial *pwqp, - __isl_take isl_point *pnt); - - __isl_give isl_qpolynomial *isl_union_pw_qpolynomial_eval( - __isl_take isl_union_pw_qpolynomial *upwqp, - __isl_take isl_point *pnt); - - __isl_give isl_set *isl_pw_qpolynomial_domain( - __isl_take isl_pw_qpolynomial *pwqp); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_intersect_domain( - __isl_take isl_pw_qpolynomial *pwpq, - __isl_take isl_set *set); - - __isl_give isl_union_set *isl_union_pw_qpolynomial_domain( - __isl_take isl_union_pw_qpolynomial *upwqp); - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_intersect_domain( - __isl_take isl_union_pw_qpolynomial *upwpq, - __isl_take isl_union_set *uset); - - __isl_give isl_qpolynomial *isl_qpolynomial_align_params( - __isl_take isl_qpolynomial *qp, - __isl_take isl_dim *model); - - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_coalesce( - __isl_take isl_union_pw_qpolynomial *upwqp); - - __isl_give isl_qpolynomial *isl_qpolynomial_gist( - __isl_take isl_qpolynomial *qp, - __isl_take isl_set *context); - - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_gist( - __isl_take isl_pw_qpolynomial *pwqp, - __isl_take isl_set *context); - - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_gist( - __isl_take isl_union_pw_qpolynomial *upwqp, - __isl_take isl_union_set *context); - -The gist operation applies the gist operation to each of -the cells in the domain of the input piecewise quasipolynomial. -The context is also exploited -to simplify the quasipolynomials associated to each cell. - - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_to_polynomial( - __isl_take isl_pw_qpolynomial *pwqp, int sign); - __isl_give isl_union_pw_qpolynomial * - isl_union_pw_qpolynomial_to_polynomial( - __isl_take isl_union_pw_qpolynomial *upwqp, int sign); - -Approximate each quasipolynomial by a polynomial. If C is positive, -the polynomial will be an overapproximation. If C is negative, -it will be an underapproximation. If C is zero, the approximation -will lie somewhere in between. - -=head2 Bounds on Piecewise Quasipolynomials and Piecewise Quasipolynomial Reductions - -A piecewise quasipolynomial reduction is a piecewise -reduction (or fold) of quasipolynomials. -In particular, the reduction can be maximum or a minimum. -The objects are mainly used to represent the result of -an upper or lower bound on a quasipolynomial over its domain, -i.e., as the result of the following function. - - __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_bound( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_fold type, int *tight); - - __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_bound( - __isl_take isl_union_pw_qpolynomial *upwqp, - enum isl_fold type, int *tight); - -The C argument may be either C or C. -If C is not C, then C<*tight> is set to C<1> -is the returned bound is known be tight, i.e., for each value -of the parameters there is at least -one element in the domain that reaches the bound. -If the domain of C is not wrapping, then the bound is computed -over all elements in that domain and the result has a purely parametric -domain. If the domain of C is wrapping, then the bound is -computed over the range of the wrapped relation. The domain of the -wrapped relation becomes the domain of the result. - -A (piecewise) quasipolynomial reduction can be copied or freed using the -following functions. - - __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_copy( - __isl_keep isl_qpolynomial_fold *fold); - __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_copy( - __isl_keep isl_pw_qpolynomial_fold *pwf); - __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_copy( - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - void isl_qpolynomial_fold_free( - __isl_take isl_qpolynomial_fold *fold); - void *isl_pw_qpolynomial_fold_free( - __isl_take isl_pw_qpolynomial_fold *pwf); - void isl_union_pw_qpolynomial_fold_free( - __isl_take isl_union_pw_qpolynomial_fold *upwf); - -=head3 Printing Piecewise Quasipolynomial Reductions - -Piecewise quasipolynomial reductions can be printed -using the following function. - - __isl_give isl_printer *isl_printer_print_pw_qpolynomial_fold( - __isl_take isl_printer *p, - __isl_keep isl_pw_qpolynomial_fold *pwf); - __isl_give isl_printer *isl_printer_print_union_pw_qpolynomial_fold( - __isl_take isl_printer *p, - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - -For C, -output format of the printer -needs to be set to either C or C. -For C, -output format of the printer -needs to be set to C. -In case of printing in C, the user may want -to set the names of all dimensions - - __isl_give isl_pw_qpolynomial_fold * - isl_pw_qpolynomial_fold_set_dim_name( - __isl_take isl_pw_qpolynomial_fold *pwf, - enum isl_dim_type type, unsigned pos, - const char *s); - -=head3 Inspecting (Piecewise) Quasipolynomial Reductions - -To iterate over all piecewise quasipolynomial reductions in a union -piecewise quasipolynomial reduction, use the following function - - int isl_union_pw_qpolynomial_fold_foreach_pw_qpolynomial_fold( - __isl_keep isl_union_pw_qpolynomial_fold *upwf, - int (*fn)(__isl_take isl_pw_qpolynomial_fold *pwf, - void *user), void *user); - -To iterate over the cells in a piecewise quasipolynomial reduction, -use either of the following two functions - - int isl_pw_qpolynomial_fold_foreach_piece( - __isl_keep isl_pw_qpolynomial_fold *pwf, - int (*fn)(__isl_take isl_set *set, - __isl_take isl_qpolynomial_fold *fold, - void *user), void *user); - int isl_pw_qpolynomial_fold_foreach_lifted_piece( - __isl_keep isl_pw_qpolynomial_fold *pwf, - int (*fn)(__isl_take isl_set *set, - __isl_take isl_qpolynomial_fold *fold, - void *user), void *user); - -See L for an explanation -of the difference between these two functions. - -To iterate over all quasipolynomials in a reduction, use - - int isl_qpolynomial_fold_foreach_qpolynomial( - __isl_keep isl_qpolynomial_fold *fold, - int (*fn)(__isl_take isl_qpolynomial *qp, - void *user), void *user); - -=head3 Operations on Piecewise Quasipolynomial Reductions - - __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_scale( - __isl_take isl_qpolynomial_fold *fold, isl_int v); - - __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_add( - __isl_take isl_pw_qpolynomial_fold *pwf1, - __isl_take isl_pw_qpolynomial_fold *pwf2); - - __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_fold( - __isl_take isl_pw_qpolynomial_fold *pwf1, - __isl_take isl_pw_qpolynomial_fold *pwf2); - - __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_fold( - __isl_take isl_union_pw_qpolynomial_fold *upwf1, - __isl_take isl_union_pw_qpolynomial_fold *upwf2); - - __isl_give isl_qpolynomial *isl_pw_qpolynomial_fold_eval( - __isl_take isl_pw_qpolynomial_fold *pwf, - __isl_take isl_point *pnt); - - __isl_give isl_qpolynomial *isl_union_pw_qpolynomial_fold_eval( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_point *pnt); - - __isl_give isl_union_set *isl_union_pw_qpolynomial_fold_domain( - __isl_take isl_union_pw_qpolynomial_fold *upwf); - __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_intersect_domain( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_union_set *uset); - - __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_coalesce( - __isl_take isl_pw_qpolynomial_fold *pwf); - - __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_coalesce( - __isl_take isl_union_pw_qpolynomial_fold *upwf); - - __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_gist( - __isl_take isl_pw_qpolynomial_fold *pwf, - __isl_take isl_set *context); - - __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_gist( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_union_set *context); - -The gist operation applies the gist operation to each of -the cells in the domain of the input piecewise quasipolynomial reduction. -In future, the operation will also exploit the context -to simplify the quasipolynomial reductions associated to each cell. - - __isl_give isl_pw_qpolynomial_fold * - isl_set_apply_pw_qpolynomial_fold( - __isl_take isl_set *set, - __isl_take isl_pw_qpolynomial_fold *pwf, - int *tight); - __isl_give isl_pw_qpolynomial_fold * - isl_map_apply_pw_qpolynomial_fold( - __isl_take isl_map *map, - __isl_take isl_pw_qpolynomial_fold *pwf, - int *tight); - __isl_give isl_union_pw_qpolynomial_fold * - isl_union_set_apply_union_pw_qpolynomial_fold( - __isl_take isl_union_set *uset, - __isl_take isl_union_pw_qpolynomial_fold *upwf, - int *tight); - __isl_give isl_union_pw_qpolynomial_fold * - isl_union_map_apply_union_pw_qpolynomial_fold( - __isl_take isl_union_map *umap, - __isl_take isl_union_pw_qpolynomial_fold *upwf, - int *tight); - -The functions taking a map -compose the given map with the given piecewise quasipolynomial reduction. -That is, compute a bound (of the same type as C or C itself) -over all elements in the intersection of the range of the map -and the domain of the piecewise quasipolynomial reduction -as a function of an element in the domain of the map. -The functions taking a set compute a bound over all elements in the -intersection of the set and the domain of the -piecewise quasipolynomial reduction. - -=head2 Dependence Analysis - -C contains specialized functionality for performing -array dataflow analysis. That is, given a I access relation -and a collection of possible I access relations, -C can compute relations that describe -for each iteration of the sink access, which iteration -of which of the source access relations was the last -to access the same data element before the given iteration -of the sink access. -To compute standard flow dependences, the sink should be -a read, while the sources should be writes. -If any of the source accesses are marked as being I -accesses, then there will be a dependence to the last -I access B to any I access that follows -this last I access. -In particular, if I sources are I accesses, -then memory based dependence analysis is performed. -If, on the other hand, all sources are I accesses, -then value based dependence analysis is performed. - - #include - - typedef int (*isl_access_level_before)(void *first, void *second); - - __isl_give isl_access_info *isl_access_info_alloc( - __isl_take isl_map *sink, - void *sink_user, isl_access_level_before fn, - int max_source); - __isl_give isl_access_info *isl_access_info_add_source( - __isl_take isl_access_info *acc, - __isl_take isl_map *source, int must, - void *source_user); - void isl_access_info_free(__isl_take isl_access_info *acc); - - __isl_give isl_flow *isl_access_info_compute_flow( - __isl_take isl_access_info *acc); - - int isl_flow_foreach(__isl_keep isl_flow *deps, - int (*fn)(__isl_take isl_map *dep, int must, - void *dep_user, void *user), - void *user); - __isl_give isl_map *isl_flow_get_no_source( - __isl_keep isl_flow *deps, int must); - void isl_flow_free(__isl_take isl_flow *deps); - -The function C performs the actual -dependence analysis. The other functions are used to construct -the input for this function or to read off the output. - -The input is collected in an C, which can -be created through a call to C. -The arguments to this functions are the sink access relation -C, a token C used to identify the sink -access to the user, a callback function for specifying the -relative order of source and sink accesses, and the number -of source access relations that will be added. -The callback function has type C. -The function is called with two user supplied tokens identifying -either a source or the sink and it should return the shared nesting -level and the relative order of the two accesses. -In particular, let I be the number of loops shared by -the two accesses. If C precedes C textually, -then the function should return I<2 * n + 1>; otherwise, -it should return I<2 * n>. -The sources can be added to the C by performing -(at most) C calls to C. -C indicates whether the source is a I access -or a I access. Note that a multi-valued access relation -should only be marked I if every iteration in the domain -of the relation accesses I elements in its image. -The C token is again used to identify -the source access. The range of the source access relation -C should have the same dimension as the range -of the sink access relation. -The C function should usually not be -called explicitly, because it is called implicitly by -C. - -The result of the dependence analysis is collected in an -C. There may be elements of -the sink access for which no preceding source access could be -found or for which all preceding sources are I accesses. -The relations containing these elements can be obtained through -calls to C, the first with C set -and the second with C unset. -In the case of standard flow dependence analysis, -with the sink a read and the sources I writes, -the first relation corresponds to the reads from uninitialized -array elements and the second relation is empty. -The actual flow dependences can be extracted using -C. This function will call the user-specified -callback function C for each B dependence between -a source and the sink. The callback function is called -with four arguments, the actual flow dependence relation -mapping source iterations to sink iterations, a boolean that -indicates whether it is a I or I dependence, a token -identifying the source and an additional C with value -equal to the third argument of the C call. -A dependence is marked I if it originates from a I -source and if it is not followed by any I sources. - -After finishing with an C, the user should call -C to free all associated memory. - -A higher-level interface to dependence analysis is provided -by the following function. - - #include - - int isl_union_map_compute_flow(__isl_take isl_union_map *sink, - __isl_take isl_union_map *must_source, - __isl_take isl_union_map *may_source, - __isl_take isl_union_map *schedule, - __isl_give isl_union_map **must_dep, - __isl_give isl_union_map **may_dep, - __isl_give isl_union_map **must_no_source, - __isl_give isl_union_map **may_no_source); - -The arrays are identified by the tuple names of the ranges -of the accesses. The iteration domains by the tuple names -of the domains of the accesses and of the schedule. -The relative order of the iteration domains is given by the -schedule. The relations returned through C -and C are subsets of C. -Any of C, C, C -or C may be C, but a C value for -any of the other arguments is treated as an error. - -=head2 Scheduling - -B - -The following function can be used to compute a schedule -for a union of domains. The generated schedule respects -all C dependences. That is, all dependence distances -over these dependences in the scheduled space are lexicographically -positive. The generated schedule schedule also tries to minimize -the dependence distances over C dependences. -Moreover, it tries to obtain sequences (bands) of schedule dimensions -for groups of domains where the dependence distances have only -non-negative values. -The algorithm used to construct the schedule is similar to that -of C. - - #include - __isl_give isl_schedule *isl_union_set_compute_schedule( - __isl_take isl_union_set *domain, - __isl_take isl_union_map *validity, - __isl_take isl_union_map *proximity); - void *isl_schedule_free(__isl_take isl_schedule *sched); - -A mapping from the domains to the scheduled space can be obtained -from an C using the following function. - - __isl_give isl_union_map *isl_schedule_get_map( - __isl_keep isl_schedule *sched); - -A representation of the schedule can be printed using - - __isl_give isl_printer *isl_printer_print_schedule( - __isl_take isl_printer *p, - __isl_keep isl_schedule *schedule); - -A representation of the schedule as a forest of bands can be obtained -using the following function. - - __isl_give isl_band_list *isl_schedule_get_band_forest( - __isl_keep isl_schedule *schedule); - -The list can be manipulated as explained in L<"Lists">. -The bands inside the list can be copied and freed using the following -functions. - - #include - __isl_give isl_band *isl_band_copy( - __isl_keep isl_band *band); - void *isl_band_free(__isl_take isl_band *band); - -Each band contains zero or more scheduling dimensions. -These are referred to as the members of the band. -The section of the schedule that corresponds to the band is -referred to as the partial schedule of the band. -For those nodes that participate in a band, the outer scheduling -dimensions form the prefix schedule, while the inner scheduling -dimensions form the suffix schedule. -That is, if we take a cut of the band forest, then the union of -the concatenations of the prefix, partial and suffix schedules of -each band in the cut is equal to the entire schedule (modulo -some possible padding at the end with zero scheduling dimensions). -The properties of a band can be inspected using the following functions. - - #include - isl_ctx *isl_band_get_ctx(__isl_keep isl_band *band); - - int isl_band_has_children(__isl_keep isl_band *band); - __isl_give isl_band_list *isl_band_get_children( - __isl_keep isl_band *band); - - __isl_give isl_union_map *isl_band_get_prefix_schedule( - __isl_keep isl_band *band); - __isl_give isl_union_map *isl_band_get_partial_schedule( - __isl_keep isl_band *band); - __isl_give isl_union_map *isl_band_get_suffix_schedule( - __isl_keep isl_band *band); - - int isl_band_n_member(__isl_keep isl_band *band); - int isl_band_member_is_zero_distance( - __isl_keep isl_band *band, int pos); - -Note that a scheduling dimension is considered to be ``zero -distance'' if it does not carry any proximity dependences -within its band. -That is, if the dependence distances of the proximity -dependences are all zero in that direction (for fixed -iterations of outer bands). - -A representation of the band can be printed using - - #include - __isl_give isl_printer *isl_printer_print_band( - __isl_take isl_printer *p, - __isl_keep isl_band *band); - -=head2 Parametric Vertex Enumeration - -The parametric vertex enumeration described in this section -is mainly intended to be used internally and by the C -library. - - #include - __isl_give isl_vertices *isl_basic_set_compute_vertices( - __isl_keep isl_basic_set *bset); - -The function C performs the -actual computation of the parametric vertices and the chamber -decomposition and store the result in an C object. -This information can be queried by either iterating over all -the vertices or iterating over all the chambers or cells -and then iterating over all vertices that are active on the chamber. - - int isl_vertices_foreach_vertex( - __isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_vertex *vertex, void *user), - void *user); - - int isl_vertices_foreach_cell( - __isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_cell *cell, void *user), - void *user); - int isl_cell_foreach_vertex(__isl_keep isl_cell *cell, - int (*fn)(__isl_take isl_vertex *vertex, void *user), - void *user); - -Other operations that can be performed on an C object are -the following. - - isl_ctx *isl_vertices_get_ctx( - __isl_keep isl_vertices *vertices); - int isl_vertices_get_n_vertices( - __isl_keep isl_vertices *vertices); - void isl_vertices_free(__isl_take isl_vertices *vertices); - -Vertices can be inspected and destroyed using the following functions. - - isl_ctx *isl_vertex_get_ctx(__isl_keep isl_vertex *vertex); - int isl_vertex_get_id(__isl_keep isl_vertex *vertex); - __isl_give isl_basic_set *isl_vertex_get_domain( - __isl_keep isl_vertex *vertex); - __isl_give isl_basic_set *isl_vertex_get_expr( - __isl_keep isl_vertex *vertex); - void isl_vertex_free(__isl_take isl_vertex *vertex); - -C returns a singleton parametric set describing -the vertex, while C returns the activity domain -of the vertex. -Note that C and C return -B basic sets, so they should mainly be used for inspection -and should not be mixed with integer sets. - -Chambers can be inspected and destroyed using the following functions. - - isl_ctx *isl_cell_get_ctx(__isl_keep isl_cell *cell); - __isl_give isl_basic_set *isl_cell_get_domain( - __isl_keep isl_cell *cell); - void isl_cell_free(__isl_take isl_cell *cell); - -=head1 Applications - -Although C is mainly meant to be used as a library, -it also contains some basic applications that use some -of the functionality of C. -The input may be specified in either the L -or the L. - -=head2 C - -C takes a polyhedron as input and prints -an integer element of the polyhedron, if there is any. -The first column in the output is the denominator and is always -equal to 1. If the polyhedron contains no integer points, -then a vector of length zero is printed. - -=head2 C - -C takes the same input as the C program -from the C distribution, i.e., a set of constraints -on the parameters, a line containing only -1 and finally a set -of constraints on a parametric polyhedron. -The coefficients of the parameters appear in the last columns -(but before the final constant column). -The output is the lexicographic minimum of the parametric polyhedron. -As C currently does not have its own output format, the output -is just a dump of the internal state. - -=head2 C - -C computes the minimum of some linear -or affine objective function over the integer points in a polyhedron. -If an affine objective function -is given, then the constant should appear in the last column. - -=head2 C - -Given a polytope, C prints -all integer points in the polytope. diff --git a/cloog-0.16.3/isl/include/isl/aff.h b/cloog-0.16.3/isl/include/isl/aff.h deleted file mode 100644 index ffeca4b..0000000 --- a/cloog-0.16.3/isl/include/isl/aff.h +++ /dev/null @@ -1,160 +0,0 @@ -#ifndef ISL_AFF_H -#define ISL_AFF_H - -#include -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -__isl_give isl_aff *isl_aff_zero(__isl_take isl_local_space *ls); - -__isl_give isl_aff *isl_aff_copy(__isl_keep isl_aff *aff); -void *isl_aff_free(__isl_take isl_aff *aff); - -isl_ctx *isl_aff_get_ctx(__isl_keep isl_aff *aff); - -int isl_aff_dim(__isl_keep isl_aff *aff, enum isl_dim_type type); -int isl_aff_involves_dims(__isl_keep isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_dim *isl_aff_get_dim(__isl_keep isl_aff *aff); -__isl_give isl_local_space *isl_aff_get_local_space(__isl_keep isl_aff *aff); - -const char *isl_aff_get_dim_name(__isl_keep isl_aff *aff, - enum isl_dim_type type, unsigned pos); -int isl_aff_get_constant(__isl_keep isl_aff *aff, isl_int *v); -int isl_aff_get_coefficient(__isl_keep isl_aff *aff, - enum isl_dim_type type, int pos, isl_int *v); -int isl_aff_get_denominator(__isl_keep isl_aff *aff, isl_int *v); -__isl_give isl_aff *isl_aff_set_constant(__isl_take isl_aff *aff, isl_int v); -__isl_give isl_aff *isl_aff_set_constant_si(__isl_take isl_aff *aff, int v); -__isl_give isl_aff *isl_aff_set_coefficient(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, isl_int v); -__isl_give isl_aff *isl_aff_set_coefficient_si(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, int v); -__isl_give isl_aff *isl_aff_set_denominator(__isl_take isl_aff *aff, isl_int v); -__isl_give isl_aff *isl_aff_add_constant(__isl_take isl_aff *aff, isl_int v); -__isl_give isl_aff *isl_aff_add_constant_si(__isl_take isl_aff *aff, int v); -__isl_give isl_aff *isl_aff_add_coefficient(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, isl_int v); -__isl_give isl_aff *isl_aff_add_coefficient_si(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, int v); - -__isl_give isl_aff *isl_aff_set_dim_name(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned pos, const char *s); - -int isl_aff_plain_is_equal(__isl_keep isl_aff *aff1, __isl_keep isl_aff *aff2); -int isl_aff_plain_is_zero(__isl_keep isl_aff *aff); - -__isl_give isl_div *isl_aff_get_div(__isl_keep isl_aff *aff, int pos); - -__isl_give isl_aff *isl_aff_neg(__isl_take isl_aff *aff); -__isl_give isl_aff *isl_aff_ceil(__isl_take isl_aff *aff); -__isl_give isl_aff *isl_aff_floor(__isl_take isl_aff *aff); - -__isl_give isl_aff *isl_aff_add(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2); -__isl_give isl_aff *isl_aff_sub(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2); - -__isl_give isl_aff *isl_aff_scale(__isl_take isl_aff *aff, isl_int f); -__isl_give isl_aff *isl_aff_scale_down(__isl_take isl_aff *aff, isl_int f); -__isl_give isl_aff *isl_aff_scale_down_ui(__isl_take isl_aff *aff, unsigned f); - -__isl_give isl_aff *isl_aff_insert_dims(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_aff *isl_aff_add_dims(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned n); -__isl_give isl_aff *isl_aff_drop_dims(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_aff *isl_aff_gist(__isl_take isl_aff *aff, - __isl_take isl_set *context); - -__isl_give isl_basic_set *isl_aff_ge_basic_set(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2); - -__isl_give isl_printer *isl_printer_print_aff(__isl_take isl_printer *p, - __isl_keep isl_aff *aff); -void isl_aff_dump(__isl_keep isl_aff *aff); - -isl_ctx *isl_pw_aff_get_ctx(__isl_keep isl_pw_aff *pwaff); -__isl_give isl_dim *isl_pw_aff_get_dim(__isl_keep isl_pw_aff *pwaff); - -__isl_give isl_pw_aff *isl_pw_aff_empty(__isl_take isl_dim *dim); -__isl_give isl_pw_aff *isl_pw_aff_alloc(__isl_take isl_set *set, - __isl_take isl_aff *aff); - -int isl_pw_aff_is_empty(__isl_keep isl_pw_aff *pwaff); - -__isl_give isl_pw_aff *isl_pw_aff_max(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - -__isl_give isl_pw_aff *isl_pw_aff_copy(__isl_keep isl_pw_aff *pwaff); -void *isl_pw_aff_free(__isl_take isl_pw_aff *pwaff); - -unsigned isl_pw_aff_dim(__isl_keep isl_pw_aff *pwaff, enum isl_dim_type type); -int isl_pw_aff_involves_dims(__isl_keep isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_pw_aff *isl_pw_aff_align_params(__isl_take isl_pw_aff *pwaff, - __isl_take isl_dim *model); - -__isl_give isl_set *isl_pw_aff_domain(__isl_take isl_pw_aff *pwaff); - -__isl_give isl_pw_aff *isl_pw_aff_add(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_pw_aff *isl_pw_aff_sub(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_pw_aff *isl_pw_aff_neg(__isl_take isl_pw_aff *pwaff); -__isl_give isl_pw_aff *isl_pw_aff_ceil(__isl_take isl_pw_aff *pwaff); -__isl_give isl_pw_aff *isl_pw_aff_floor(__isl_take isl_pw_aff *pwaff); - -__isl_give isl_pw_aff *isl_pw_aff_cond(__isl_take isl_set *cond, - __isl_take isl_pw_aff *pwaff_true, __isl_take isl_pw_aff *pwaff_false); - -__isl_give isl_pw_aff *isl_pw_aff_scale(__isl_take isl_pw_aff *pwaff, - isl_int f); -__isl_give isl_pw_aff *isl_pw_aff_scale_down(__isl_take isl_pw_aff *pwaff, - isl_int f); - -__isl_give isl_pw_aff *isl_pw_aff_insert_dims(__isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_pw_aff *isl_pw_aff_add_dims(__isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned n); -__isl_give isl_pw_aff *isl_pw_aff_drop_dims(__isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_pw_aff *isl_pw_aff_coalesce(__isl_take isl_pw_aff *pwqp); -__isl_give isl_pw_aff *isl_pw_aff_gist(__isl_take isl_pw_aff *pwaff, - __isl_take isl_set *context); - -__isl_give isl_map *isl_map_from_pw_aff(__isl_take isl_pw_aff *pwaff); - -__isl_give isl_set *isl_pw_aff_nonneg_set(__isl_take isl_pw_aff *pwaff); - -__isl_give isl_set *isl_pw_aff_eq_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_set *isl_pw_aff_le_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_set *isl_pw_aff_lt_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_set *isl_pw_aff_ge_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_set *isl_pw_aff_gt_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - -__isl_give isl_printer *isl_printer_print_pw_aff(__isl_take isl_printer *p, - __isl_keep isl_pw_aff *pwaff); -void isl_pw_aff_dump(__isl_keep isl_pw_aff *pwaff); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/aff_type.h b/cloog-0.16.3/isl/include/isl/aff_type.h deleted file mode 100644 index 549ec80..0000000 --- a/cloog-0.16.3/isl/include/isl/aff_type.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef ISL_AFF_TYPE_H -#define ISL_AFF_TYPE_H - -struct isl_aff; -typedef struct isl_aff isl_aff; - -struct isl_pw_aff; -typedef struct isl_pw_aff isl_pw_aff; - -#endif diff --git a/cloog-0.16.3/isl/include/isl/arg.h b/cloog-0.16.3/isl/include/isl/arg.h deleted file mode 100644 index d37e495..0000000 --- a/cloog-0.16.3/isl/include/isl/arg.h +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_ARG_H -#define ISL_ARG_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_arg_choice { - const char *name; - unsigned value; -}; - -struct isl_arg_flags { - const char *name; - unsigned mask; - unsigned value; -}; - -enum isl_arg_type { - isl_arg_end, - isl_arg_alias, - isl_arg_arg, - isl_arg_bool, - isl_arg_child, - isl_arg_choice, - isl_arg_flags, - isl_arg_footer, - isl_arg_int, - isl_arg_user, - isl_arg_long, - isl_arg_ulong, - isl_arg_str, - isl_arg_version -}; - -struct isl_arg { - enum isl_arg_type type; - char short_name; - const char *long_name; - const char *argument_name; - size_t offset; - const char *help_msg; -#define ISL_ARG_SINGLE_DASH (1 << 0) -#define ISL_ARG_BOOL_ARG (1 << 1) -#define ISL_ARG_HIDDEN (1 << 2) - unsigned flags; - union { - struct { - struct isl_arg_choice *choice; - unsigned default_value; - unsigned default_selected; - int (*set)(void *opt, unsigned val); - } choice; - struct { - struct isl_arg_flags *flags; - unsigned default_value; - } flags; - struct { - unsigned default_value; - int (*set)(void *opt, unsigned val); - } b; - struct { - int default_value; - } i; - struct { - long default_value; - long default_selected; - int (*set)(void *opt, long val); - } l; - struct { - unsigned long default_value; - } ul; - struct { - const char *default_value; - } str; - struct { - struct isl_arg *child; - size_t size; - } child; - struct { - void (*print_version)(void); - } version; - struct { - int (*init)(void*); - void (*clear)(void*); - } user; - } u; -}; - -#define ISL_ARG_ALIAS(l) { \ - .type = isl_arg_alias, \ - .long_name = l, \ -}, -#define ISL_ARG_ARG(st,f,a,d) { \ - .type = isl_arg_arg, \ - .argument_name = a, \ - .offset = offsetof(st, f), \ - .u = { .str = { .default_value = d } } \ -}, -#define ISL_ARG_FOOTER(h) { \ - .type = isl_arg_footer, \ - .help_msg = h, \ -}, -#define ISL_ARG_CHOICE(st,f,s,l,c,d,h) { \ - .type = isl_arg_choice, \ - .short_name = s, \ - .long_name = l, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .choice = { .choice = c, .default_value = d, \ - .default_selected = d, .set = NULL } } \ -}, -#define ISL_ARG_OPT_CHOICE(st,f,s,l,c,d,ds,h) { \ - .type = isl_arg_choice, \ - .short_name = s, \ - .long_name = l, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .choice = { .choice = c, .default_value = d, \ - .default_selected = ds, .set = NULL } } \ -}, -#define ISL_ARG_USER_OPT_CHOICE(st,f,s,l,c,setter,d,ds,h) { \ - .type = isl_arg_choice, \ - .short_name = s, \ - .long_name = l, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .choice = { .choice = c, .default_value = d, \ - .default_selected = ds, .set = setter } } \ -}, -#define _ISL_ARG_BOOL_F(o,s,l,setter,d,h,fl) { \ - .type = isl_arg_bool, \ - .short_name = s, \ - .long_name = l, \ - .offset = o, \ - .help_msg = h, \ - .flags = fl, \ - .u = { .b = { .default_value = d, .set = setter } } \ -}, -#define ISL_ARG_BOOL_F(st,f,s,l,d,h,fl) \ - _ISL_ARG_BOOL_F(offsetof(st, f),s,l,NULL,d,h,fl) -#define ISL_ARG_BOOL(st,f,s,l,d,h) \ - ISL_ARG_BOOL_F(st,f,s,l,d,h,0) -#define ISL_ARG_PHANTOM_BOOL_F(s,l,setter,h,fl) \ - _ISL_ARG_BOOL_F(-1,s,l,setter,0,h,fl) -#define ISL_ARG_PHANTOM_BOOL(s,l,setter,h) \ - ISL_ARG_PHANTOM_BOOL_F(s,l,setter,h,0) -#define ISL_ARG_INT_F(st,f,s,l,a,d,h,fl) { \ - .type = isl_arg_int, \ - .short_name = s, \ - .long_name = l, \ - .argument_name = a, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .flags = fl, \ - .u = { .ul = { .default_value = d } } \ -}, -#define ISL_ARG_INT(st,f,s,l,a,d,h) \ - ISL_ARG_INT_F(st,f,s,l,a,d,h,0) -#define ISL_ARG_LONG(st,f,s,lo,d,h) { \ - .type = isl_arg_long, \ - .short_name = s, \ - .long_name = lo, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .l = { .default_value = d, .default_selected = d, \ - .set = NULL } } \ -}, -#define ISL_ARG_USER_LONG(st,f,s,lo,setter,d,h) { \ - .type = isl_arg_long, \ - .short_name = s, \ - .long_name = lo, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .l = { .default_value = d, .default_selected = d, \ - .set = setter } } \ -}, -#define ISL_ARG_OPT_LONG(st,f,s,lo,d,ds,h) { \ - .type = isl_arg_long, \ - .short_name = s, \ - .long_name = lo, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .l = { .default_value = d, .default_selected = ds, \ - .set = NULL } } \ -}, -#define ISL_ARG_ULONG(st,f,s,l,d,h) { \ - .type = isl_arg_ulong, \ - .short_name = s, \ - .long_name = l, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .ul = { .default_value = d } } \ -}, -#define ISL_ARG_STR(st,f,s,l,a,d,h) { \ - .type = isl_arg_str, \ - .short_name = s, \ - .long_name = l, \ - .argument_name = a, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .str = { .default_value = d } } \ -}, -#define _ISL_ARG_CHILD(o,sz,l,c,h,fl) { \ - .type = isl_arg_child, \ - .long_name = l, \ - .offset = o, \ - .help_msg = h, \ - .flags = fl, \ - .u = { .child = { .child = c, .size = sz } } \ -}, -#define ISL_ARG_CHILD(st,f,l,c,h) \ - _ISL_ARG_CHILD(offsetof(st, f),sizeof(*((st *)NULL)->f),l,c,h,0) -#define ISL_ARG_GROUP_F(c,h,fl) \ - _ISL_ARG_CHILD(-1,0,NULL,c,h,fl) -#define ISL_ARG_GROUP(c,h) \ - ISL_ARG_GROUP_F(c,h,0) -#define ISL_ARG_FLAGS(st,f,s,l,c,d,h) { \ - .type = isl_arg_flags, \ - .short_name = s, \ - .long_name = l, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .flags = { .flags = c, .default_value = d } } \ -}, -#define ISL_ARG_USER(st,f,i,c) { \ - .type = isl_arg_user, \ - .offset = offsetof(st, f), \ - .u = { .user = { .init = i, .clear = c} } \ -}, -#define ISL_ARG_VERSION(print) { \ - .type = isl_arg_version, \ - .u = { .version = { .print_version = print } } \ -}, -#define ISL_ARG_END { isl_arg_end } - -#define ISL_ARG_ALL (1 << 0) - -void isl_arg_set_defaults(struct isl_arg *arg, void *opt); -void isl_arg_free(struct isl_arg *arg, void *opt); -int isl_arg_parse(struct isl_arg *arg, int argc, char **argv, void *opt, - unsigned flags); - -#define ISL_ARG_DECL(prefix,st,arg) \ -extern struct isl_arg arg[]; \ -st *prefix ## _new_with_defaults(); \ -void prefix ## _free(st *opt); \ -int prefix ## _parse(st *opt, int argc, char **argv, unsigned flags); - -#define ISL_ARG_DEF(prefix,st,arg) \ -st *prefix ## _new_with_defaults() \ -{ \ - st *opt = (st *)calloc(1, sizeof(st)); \ - if (opt) \ - isl_arg_set_defaults(arg, opt); \ - return opt; \ -} \ - \ -void prefix ## _free(st *opt) \ -{ \ - isl_arg_free(arg, opt); \ -} \ - \ -int prefix ## _parse(st *opt, int argc, char **argv, unsigned flags) \ -{ \ - return isl_arg_parse(arg, argc, argv, opt, flags); \ -} - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/band.h b/cloog-0.16.3/isl/include/isl/band.h deleted file mode 100644 index 880cb12..0000000 --- a/cloog-0.16.3/isl/include/isl/band.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef ISL_BAND_H -#define ISL_BAND_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_band; -typedef struct isl_band isl_band; - -__isl_give isl_band *isl_band_copy(__isl_keep isl_band *band); -void *isl_band_free(__isl_take isl_band *band); - -isl_ctx *isl_band_get_ctx(__isl_keep isl_band *band); - -int isl_band_has_children(__isl_keep isl_band *band); -__isl_give isl_band_list *isl_band_get_children( - __isl_keep isl_band *band); - -__isl_give isl_union_map *isl_band_get_prefix_schedule( - __isl_keep isl_band *band); -__isl_give isl_union_map *isl_band_get_partial_schedule( - __isl_keep isl_band *band); -__isl_give isl_union_map *isl_band_get_suffix_schedule( - __isl_keep isl_band *band); - -int isl_band_n_member(__isl_keep isl_band *band); -int isl_band_member_is_zero_distance(__isl_keep isl_band *band, int pos); - -__isl_give isl_printer *isl_printer_print_band(__isl_take isl_printer *p, - __isl_keep isl_band *band); -void isl_band_dump(__isl_keep isl_band *band); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/blk.h b/cloog-0.16.3/isl/include/isl/blk.h deleted file mode 100644 index 8094e2a..0000000 --- a/cloog-0.16.3/isl/include/isl/blk.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_BLK_H -#define ISL_BLK_H - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_blk { - size_t size; - isl_int *data; -}; - -#define ISL_BLK_CACHE_SIZE 20 - -struct isl_ctx; - -struct isl_blk isl_blk_alloc(struct isl_ctx *ctx, size_t n); -struct isl_blk isl_blk_empty(); -int isl_blk_is_error(struct isl_blk block); -struct isl_blk isl_blk_extend(struct isl_ctx *ctx, struct isl_blk block, - size_t new_n); -void isl_blk_free(struct isl_ctx *ctx, struct isl_blk block); -void isl_blk_clear_cache(struct isl_ctx *ctx); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/config.h.in b/cloog-0.16.3/isl/include/isl/config.h.in deleted file mode 100644 index 231575e..0000000 --- a/cloog-0.16.3/isl/include/isl/config.h.in +++ /dev/null @@ -1,3 +0,0 @@ -#undef GCC_WARN_UNUSED_RESULT - -#undef ISL_PIPLIB diff --git a/cloog-0.16.3/isl/include/isl/constraint.h b/cloog-0.16.3/isl/include/isl/constraint.h deleted file mode 100644 index 6f2e8c7..0000000 --- a/cloog-0.16.3/isl/include/isl/constraint.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_CONSTRAINT_H -#define ISL_CONSTRAINT_H - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_constraint; -typedef struct isl_constraint isl_constraint; - -isl_ctx *isl_constraint_get_ctx(__isl_keep isl_constraint *c); - -__isl_give isl_constraint *isl_equality_alloc(__isl_take isl_dim *dim); -__isl_give isl_constraint *isl_inequality_alloc(__isl_take isl_dim *dim); - -struct isl_constraint *isl_constraint_cow(struct isl_constraint *c); -struct isl_constraint *isl_constraint_copy(struct isl_constraint *c); -void isl_constraint_free(struct isl_constraint *c); - -__isl_give isl_constraint *isl_basic_map_first_constraint( - __isl_take isl_basic_map *bmap); -__isl_give isl_constraint *isl_basic_set_first_constraint( - __isl_take isl_basic_set *bset); -struct isl_constraint *isl_constraint_next(struct isl_constraint *c); -int isl_basic_map_foreach_constraint(__isl_keep isl_basic_map *bmap, - int (*fn)(__isl_take isl_constraint *c, void *user), void *user); -int isl_basic_set_foreach_constraint(__isl_keep isl_basic_set *bset, - int (*fn)(__isl_take isl_constraint *c, void *user), void *user); -int isl_constraint_is_equal(struct isl_constraint *constraint1, - struct isl_constraint *constraint2); - -int isl_basic_set_foreach_bound_pair(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, - int (*fn)(__isl_take isl_constraint *lower, - __isl_take isl_constraint *upper, - __isl_take isl_basic_set *bset, void *user), void *user); - -__isl_give isl_basic_map *isl_basic_map_add_constraint( - __isl_take isl_basic_map *bmap, __isl_take isl_constraint *constraint); -__isl_give isl_basic_set *isl_basic_set_add_constraint( - __isl_take isl_basic_set *bset, __isl_take isl_constraint *constraint); -__isl_give isl_map *isl_map_add_constraint(__isl_take isl_map *map, - __isl_take isl_constraint *constraint); -__isl_give isl_set *isl_set_add_constraint(__isl_take isl_set *set, - __isl_take isl_constraint *constraint); - -int isl_basic_map_has_defining_equality( - __isl_keep isl_basic_map *bmap, enum isl_dim_type type, int pos, - __isl_give isl_constraint **c); -int isl_basic_set_has_defining_equality( - struct isl_basic_set *bset, enum isl_dim_type type, int pos, - struct isl_constraint **constraint); -int isl_basic_set_has_defining_inequalities( - struct isl_basic_set *bset, enum isl_dim_type type, int pos, - struct isl_constraint **lower, - struct isl_constraint **upper); - -__isl_give isl_dim *isl_constraint_get_dim( - __isl_keep isl_constraint *constraint); -int isl_constraint_dim(struct isl_constraint *constraint, - enum isl_dim_type type); - -int isl_constraint_involves_dims(__isl_keep isl_constraint *constraint, - enum isl_dim_type type, unsigned first, unsigned n); - -const char *isl_constraint_get_dim_name(__isl_keep isl_constraint *constraint, - enum isl_dim_type type, unsigned pos); -void isl_constraint_get_constant(__isl_keep isl_constraint *constraint, - isl_int *v); -void isl_constraint_get_coefficient(__isl_keep isl_constraint *constraint, - enum isl_dim_type type, int pos, isl_int *v); -void isl_constraint_set_constant(__isl_keep isl_constraint *constraint, isl_int v); -void isl_constraint_set_constant_si(__isl_keep isl_constraint *constraint, - int v); -void isl_constraint_set_coefficient(__isl_keep isl_constraint *constraint, - enum isl_dim_type type, int pos, isl_int v); -void isl_constraint_set_coefficient_si(__isl_keep isl_constraint *constraint, - enum isl_dim_type type, int pos, int v); - -__isl_give isl_div *isl_constraint_div(__isl_keep isl_constraint *constraint, - int pos); -struct isl_constraint *isl_constraint_add_div(struct isl_constraint *constraint, - struct isl_div *div, int *pos); - -void isl_constraint_clear(struct isl_constraint *constraint); -struct isl_constraint *isl_constraint_negate(struct isl_constraint *constraint); - -int isl_constraint_is_equality(__isl_keep isl_constraint *constraint); -int isl_constraint_is_div_constraint(__isl_keep isl_constraint *constraint); - -__isl_give isl_basic_map *isl_basic_map_from_constraint( - __isl_take isl_constraint *constraint); -struct isl_basic_set *isl_basic_set_from_constraint( - struct isl_constraint *constraint); - -__isl_give isl_aff *isl_constraint_get_bound( - __isl_keep isl_constraint *constraint, enum isl_dim_type type, int pos); -__isl_give isl_aff *isl_constraint_get_aff( - __isl_keep isl_constraint *constraint); -__isl_give isl_constraint *isl_equality_from_aff(__isl_take isl_aff *aff); -__isl_give isl_constraint *isl_inequality_from_aff(__isl_take isl_aff *aff); - -__isl_give isl_basic_set *isl_basic_set_drop_constraint( - __isl_take isl_basic_set *bset, __isl_take isl_constraint *constraint); - -__isl_give isl_printer *isl_printer_print_constraint(__isl_take isl_printer *p, - __isl_keep isl_constraint *c); -void isl_constraint_dump(__isl_keep isl_constraint *c); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/ctx.h b/cloog-0.16.3/isl/include/isl/ctx.h deleted file mode 100644 index b653ed6..0000000 --- a/cloog-0.16.3/isl/include/isl/ctx.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_CTX_H -#define ISL_CTX_H - -#include -#include - -#include -#include -#include -#include -#include - -#define __isl_give -#define __isl_take -#define __isl_keep - -#ifdef GCC_WARN_UNUSED_RESULT -#define WARN_UNUSED GCC_WARN_UNUSED_RESULT -#else -#define WARN_UNUSED -#endif - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Nearly all isa functions require a struct isl_ctx allocated using - * isl_ctx_alloc. This ctx contains (or will contain) options that - * control the behavior of the library and some caches. - * - * An object allocated within a given ctx should never be used inside - * another ctx. Functions for moving objects from one ctx to another - * will be added as the need arises. - * - * A given context should only be used inside a single thread. - * A global context for synchronization between different threads - * as well as functions for moving a context to a different thread - * will be added as the need arises. - * - * If anything goes wrong (out of memory, failed assertion), then - * the library will currently simply abort. This will be made - * configurable in the future. - * Users of the library should expect functions that return - * a pointer to a structure, to return NULL, indicating failure. - * Any function accepting a pointer to a structure will treat - * a NULL argument as a failure, resulting in the function freeing - * the remaining structures (if any) and returning NULL itself - * (in case of pointer return type). - * The only exception is the isl_ctx argument, which should never be NULL. - */ -struct isl_stats { - long gbr_solved_lps; -}; -enum isl_error { - isl_error_none = 0, - isl_error_abort, - isl_error_unknown, - isl_error_internal, - isl_error_invalid, - isl_error_unsupported -}; -struct isl_ctx; -typedef struct isl_ctx isl_ctx; - -/* Some helper macros */ - -#define ISL_FL_INIT(l, f) (l) = (f) /* Specific flags location. */ -#define ISL_FL_SET(l, f) ((l) |= (f)) -#define ISL_FL_CLR(l, f) ((l) &= ~(f)) -#define ISL_FL_ISSET(l, f) (!!((l) & (f))) - -#define ISL_F_INIT(p, f) ISL_FL_INIT((p)->flags, f) /* Structure element flags. */ -#define ISL_F_SET(p, f) ISL_FL_SET((p)->flags, f) -#define ISL_F_CLR(p, f) ISL_FL_CLR((p)->flags, f) -#define ISL_F_ISSET(p, f) ISL_FL_ISSET((p)->flags, f) - -/* isl_check_ctx() checks at compile time if 'ctx' is of type 'isl_ctx *' and - * returns the value of 'expr'. It is used to ensure, that always an isl_ctx is - * passed to the following macros, even if they currently do not use it. - */ -#define isl_check_ctx(ctx, expr) (ctx != (isl_ctx *) 0) ? expr : expr - -#define isl_alloc(ctx,type,size) isl_check_ctx(ctx, (type *)malloc(size)) -#define isl_calloc(ctx,type,size) isl_check_ctx(ctx, \ - (type *)calloc(1, size)) -#define isl_realloc(ctx,ptr,type,size) isl_check_ctx(ctx, \ - (type *)realloc(ptr,size)) -#define isl_alloc_type(ctx,type) isl_alloc(ctx,type,sizeof(type)) -#define isl_calloc_type(ctx,type) isl_calloc(ctx,type,sizeof(type)) -#define isl_realloc_type(ctx,ptr,type) isl_realloc(ctx,ptr,type,sizeof(type)) -#define isl_alloc_array(ctx,type,n) isl_alloc(ctx,type,(n)*sizeof(type)) -#define isl_calloc_array(ctx,type,n) isl_check_ctx(ctx,\ - (type *)calloc(n, sizeof(type))) -#define isl_realloc_array(ctx,ptr,type,n) \ - isl_realloc(ctx,ptr,type,(n)*sizeof(type)) - -#define isl_die(ctx,errno,msg,code) \ - do { \ - isl_ctx_set_error(ctx, errno); \ - fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, msg); \ - code; \ - } while (0) -#define isl_assert4(ctx,test,code,errno) \ - do { \ - if (test) \ - break; \ - isl_die(ctx, errno, "Assertion \"" #test "\" failed", code); \ - } while (0) -#define isl_assert(ctx,test,code) \ - isl_assert4(ctx,test,code,isl_error_unknown) - -#define isl_min(a,b) ((a < b) ? (a) : (b)) - -/* struct isl_ctx functions */ - -struct isl_options *isl_ctx_options(isl_ctx *ctx); - -isl_ctx *isl_ctx_alloc_with_options(struct isl_arg *arg, __isl_take void *opt); -isl_ctx *isl_ctx_alloc(); -void *isl_ctx_peek_options(isl_ctx *ctx, struct isl_arg *arg); -void isl_ctx_ref(struct isl_ctx *ctx); -void isl_ctx_deref(struct isl_ctx *ctx); -void isl_ctx_free(isl_ctx *ctx); - -void isl_ctx_abort(isl_ctx *ctx); -void isl_ctx_resume(isl_ctx *ctx); -int isl_ctx_aborted(isl_ctx *ctx); - -#define ISL_ARG_CTX_DECL(prefix,st,arg) \ -st *isl_ctx_peek_ ## prefix(isl_ctx *ctx); - -#define ISL_ARG_CTX_DEF(prefix,st,arg) \ -st *isl_ctx_peek_ ## prefix(isl_ctx *ctx) \ -{ \ - return (st *)isl_ctx_peek_options(ctx, arg); \ -} - -enum isl_error isl_ctx_last_error(isl_ctx *ctx); -void isl_ctx_reset_error(isl_ctx *ctx); -void isl_ctx_set_error(isl_ctx *ctx, enum isl_error error); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/dim.h b/cloog-0.16.3/isl/include/isl/dim.h deleted file mode 100644 index 5cb2664..0000000 --- a/cloog-0.16.3/isl/include/isl/dim.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_DIM_H -#define ISL_DIM_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_dim; -typedef struct isl_dim isl_dim; - -enum isl_dim_type { - isl_dim_cst, - isl_dim_param, - isl_dim_in, - isl_dim_out, - isl_dim_set = isl_dim_out, - isl_dim_div, - isl_dim_all -}; - -isl_ctx *isl_dim_get_ctx(__isl_keep isl_dim *dim); -__isl_give isl_dim *isl_dim_alloc(isl_ctx *ctx, - unsigned nparam, unsigned n_in, unsigned n_out); -__isl_give isl_dim *isl_dim_set_alloc(isl_ctx *ctx, - unsigned nparam, unsigned dim); -__isl_give isl_dim *isl_dim_copy(__isl_keep isl_dim *dim); -struct isl_dim *isl_dim_cow(struct isl_dim *dim); -void isl_dim_free(__isl_take isl_dim *dim); - -__isl_give isl_dim *isl_dim_set_tuple_name(__isl_take isl_dim *dim, - enum isl_dim_type type, const char *s); -const char *isl_dim_get_tuple_name(__isl_keep isl_dim *dim, - enum isl_dim_type type); - -__isl_give isl_dim *isl_dim_set_name(__isl_take isl_dim *dim, - enum isl_dim_type type, unsigned pos, - __isl_keep const char *name); -__isl_keep const char *isl_dim_get_name(__isl_keep isl_dim *dim, - enum isl_dim_type type, unsigned pos); - -struct isl_dim *isl_dim_extend(struct isl_dim *dim, - unsigned nparam, unsigned n_in, unsigned n_out); -__isl_give isl_dim *isl_dim_add(__isl_take isl_dim *dim, enum isl_dim_type type, - unsigned n); -__isl_give isl_dim *isl_dim_move(__isl_take isl_dim *dim, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); -__isl_give isl_dim *isl_dim_insert(__isl_take isl_dim *dim, - enum isl_dim_type type, unsigned pos, unsigned n); -__isl_give isl_dim *isl_dim_join(__isl_take isl_dim *left, - __isl_take isl_dim *right); -struct isl_dim *isl_dim_product(struct isl_dim *left, struct isl_dim *right); -__isl_give isl_dim *isl_dim_range_product(__isl_take isl_dim *left, - __isl_take isl_dim *right); -__isl_give isl_dim *isl_dim_map_from_set(__isl_take isl_dim *dim); -__isl_give isl_dim *isl_dim_reverse(__isl_take isl_dim *dim); -__isl_give isl_dim *isl_dim_drop(__isl_take isl_dim *dim, - enum isl_dim_type type, unsigned first, unsigned num); -struct isl_dim *isl_dim_drop_inputs(struct isl_dim *dim, - unsigned first, unsigned n); -struct isl_dim *isl_dim_drop_outputs(struct isl_dim *dim, - unsigned first, unsigned n); -__isl_give isl_dim *isl_dim_domain(__isl_take isl_dim *dim); -__isl_give isl_dim *isl_dim_from_domain(__isl_take isl_dim *dim); -__isl_give isl_dim *isl_dim_range(__isl_take isl_dim *dim); -__isl_give isl_dim *isl_dim_from_range(__isl_take isl_dim *dim); -struct isl_dim *isl_dim_underlying(struct isl_dim *dim, unsigned n_div); - -__isl_give isl_dim *isl_dim_align_params(__isl_take isl_dim *dim1, - __isl_take isl_dim *dim2); - -int isl_dim_is_wrapping(__isl_keep isl_dim *dim); -__isl_give isl_dim *isl_dim_wrap(__isl_take isl_dim *dim); -__isl_give isl_dim *isl_dim_unwrap(__isl_take isl_dim *dim); - -int isl_dim_can_zip(__isl_keep isl_dim *dim); -__isl_give isl_dim *isl_dim_zip(__isl_take isl_dim *dim); - -int isl_dim_equal(struct isl_dim *dim1, struct isl_dim *dim2); -int isl_dim_match(struct isl_dim *dim1, enum isl_dim_type dim1_type, - struct isl_dim *dim2, enum isl_dim_type dim2_type); -int isl_dim_tuple_match(__isl_keep isl_dim *dim1, enum isl_dim_type dim1_type, - __isl_keep isl_dim *dim2, enum isl_dim_type dim2_type); -int isl_dim_compatible(struct isl_dim *dim1, struct isl_dim *dim2); -unsigned isl_dim_size(__isl_keep isl_dim *dim, enum isl_dim_type type); -unsigned isl_dim_total(struct isl_dim *dim); - -__isl_give isl_printer *isl_printer_print_dim(__isl_take isl_printer *p, - __isl_keep isl_dim *dim); -void isl_dim_dump(__isl_keep isl_dim *dim); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/div.h b/cloog-0.16.3/isl/include/isl/div.h deleted file mode 100644 index 398c7be..0000000 --- a/cloog-0.16.3/isl/include/isl/div.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_DIV_H -#define ISL_DIV_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_div; -typedef struct isl_div isl_div; - -isl_ctx *isl_div_get_ctx(__isl_keep isl_div *div); - -struct isl_div *isl_div_alloc(struct isl_dim *dim); -__isl_give isl_div *isl_div_copy(__isl_keep isl_div *div); -void isl_div_free(struct isl_div *c); - -void isl_div_get_constant(__isl_keep isl_div *div, isl_int *v); -void isl_div_get_denominator(__isl_keep isl_div *div, isl_int *v); -void isl_div_get_coefficient(__isl_keep isl_div *div, - enum isl_dim_type type, int pos, isl_int *v); -void isl_div_set_constant(struct isl_div *div, isl_int v); -void isl_div_set_denominator(struct isl_div *div, isl_int v); -void isl_div_set_coefficient(struct isl_div *div, - enum isl_dim_type type, int pos, isl_int v); - -unsigned isl_div_dim(__isl_keep isl_div *div, enum isl_dim_type type); -__isl_give isl_div *isl_div_div(__isl_take isl_div *div, int pos); - -__isl_give isl_aff *isl_aff_from_div(__isl_take isl_div *div); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/flow.h b/cloog-0.16.3/isl/include/isl/flow.h deleted file mode 100644 index 8fc2698..0000000 --- a/cloog-0.16.3/isl/include/isl/flow.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef ISL_FLOW_H -#define ISL_FLOW_H - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Let n (>= 0) be the number of iterators shared by first and second. - * If first precedes second textually return 2 * n + 1, - * otherwise return 2 * n. - */ -typedef int (*isl_access_level_before)(void *first, void *second); - -struct isl_access_info; -typedef struct isl_access_info isl_access_info; -struct isl_flow; -typedef struct isl_flow isl_flow; - -__isl_give isl_access_info *isl_access_info_alloc(__isl_take isl_map *sink, - void *sink_user, isl_access_level_before fn, int max_source); -__isl_give isl_access_info *isl_access_info_add_source( - __isl_take isl_access_info *acc, __isl_take isl_map *source, - int must, void *source_user); -void isl_access_info_free(__isl_take isl_access_info *acc); - -isl_ctx *isl_access_info_get_ctx(__isl_keep isl_access_info *acc); - -__isl_give isl_flow *isl_access_info_compute_flow(__isl_take isl_access_info *acc); -int isl_flow_foreach(__isl_keep isl_flow *deps, - int (*fn)(__isl_take isl_map *dep, int must, void *dep_user, void *user), - void *user); -__isl_give isl_map *isl_flow_get_no_source(__isl_keep isl_flow *deps, int must); -void isl_flow_free(__isl_take isl_flow *deps); - -isl_ctx *isl_flow_get_ctx(__isl_keep isl_flow *deps); - -int isl_union_map_compute_flow(__isl_take isl_union_map *sink, - __isl_take isl_union_map *must_source, - __isl_take isl_union_map *may_source, - __isl_take isl_union_map *schedule, - __isl_give isl_union_map **must_dep, __isl_give isl_union_map **may_dep, - __isl_give isl_union_map **must_no_source, - __isl_give isl_union_map **may_no_source); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/hash.h b/cloog-0.16.3/isl/include/isl/hash.h deleted file mode 100644 index 654b6b6..0000000 --- a/cloog-0.16.3/isl/include/isl/hash.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_HASH_H -#define ISL_HASH_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -#define isl_hash_init() (2166136261u) -#define isl_hash_byte(h,b) do { \ - h *= 16777619; \ - h ^= b; \ - } while(0) -#define isl_hash_hash(h,h2) \ - do { \ - isl_hash_byte(h, (h2) & 0xFF); \ - isl_hash_byte(h, ((h2) >> 8) & 0xFF); \ - isl_hash_byte(h, ((h2) >> 16) & 0xFF); \ - isl_hash_byte(h, ((h2) >> 24) & 0xFF); \ - } while(0) -#define isl_hash_bits(h,bits) \ - ((bits) == 32) ? (h) : \ - ((bits) >= 16) ? \ - ((h) >> (bits)) ^ ((h) & (((uint32_t)1 << (bits)) - 1)) : \ - (((h) >> (bits)) ^ (h)) & (((uint32_t)1 << (bits)) - 1) - -uint32_t isl_hash_string(uint32_t hash, const char *s); -uint32_t isl_hash_mem(uint32_t hash, const void *p, size_t len); - -#define isl_hash_builtin(h,l) isl_hash_mem(h, &l, sizeof(l)) - -struct isl_hash_table_entry -{ - uint32_t hash; - void *data; -}; - -struct isl_hash_table { - int bits; - int n; - struct isl_hash_table_entry *entries; -}; - -struct isl_ctx; - -struct isl_hash_table *isl_hash_table_alloc(struct isl_ctx *ctx, int min_size); -void isl_hash_table_free(struct isl_ctx *ctx, struct isl_hash_table *table); - -int isl_hash_table_init(struct isl_ctx *ctx, struct isl_hash_table *table, - int min_size); -void isl_hash_table_clear(struct isl_hash_table *table); -struct isl_hash_table_entry *isl_hash_table_find(struct isl_ctx *ctx, - struct isl_hash_table *table, - uint32_t key_hash, - int (*eq)(const void *entry, const void *val), - const void *val, int reserve); -int isl_hash_table_foreach(struct isl_ctx *ctx, - struct isl_hash_table *table, - int (*fn)(void **entry, void *user), void *user); -void isl_hash_table_remove(struct isl_ctx *ctx, - struct isl_hash_table *table, - struct isl_hash_table_entry *entry); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/ilp.h b/cloog-0.16.3/isl/include/isl/ilp.h deleted file mode 100644 index 460aaed..0000000 --- a/cloog-0.16.3/isl/include/isl/ilp.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_ILP_H -#define ISL_ILP_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -enum isl_lp_result isl_basic_set_solve_ilp(struct isl_basic_set *bset, int max, - isl_int *f, isl_int *opt, - struct isl_vec **sol_p); -enum isl_lp_result isl_basic_set_max(__isl_keep isl_basic_set *bset, - __isl_keep isl_aff *obj, isl_int *opt); -enum isl_lp_result isl_set_max(__isl_keep isl_set *set, - __isl_keep isl_aff *obj, isl_int *opt); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/int.h b/cloog-0.16.3/isl/include/isl/int.h deleted file mode 100644 index 7c292d0..0000000 --- a/cloog-0.16.3/isl/include/isl/int.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_INT_H -#define ISL_INT_H - -#include -#include -#include -#if defined(__cplusplus) -#include -#endif - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifndef mp_get_memory_functions -void mp_get_memory_functions( - void *(**alloc_func_ptr) (size_t), - void *(**realloc_func_ptr) (void *, size_t, size_t), - void (**free_func_ptr) (void *, size_t)); -#endif - -/* isl_int is the basic integer type. It currently always corresponds - * to a gmp mpz_t, but in the future, different types such as long long - * or cln::cl_I will be supported. - */ -typedef mpz_t isl_int; - -#define isl_int_init(i) mpz_init(i) -#define isl_int_clear(i) mpz_clear(i) - -#define isl_int_set(r,i) mpz_set(r,i) -#define isl_int_set_gmp(r,i) mpz_set(r,i) -#define isl_int_set_si(r,i) mpz_set_si(r,i) -#define isl_int_set_ui(r,i) mpz_set_ui(r,i) -#define isl_int_get_gmp(i,g) mpz_set(g,i) -#define isl_int_get_si(r) mpz_get_si(r) -#define isl_int_get_ui(r) mpz_get_ui(r) -#define isl_int_get_d(r) mpz_get_d(r) -#define isl_int_get_str(r) mpz_get_str(0, 10, r) -#define isl_int_abs(r,i) mpz_abs(r,i) -#define isl_int_neg(r,i) mpz_neg(r,i) -#define isl_int_swap(i,j) mpz_swap(i,j) -#define isl_int_swap_or_set(i,j) mpz_swap(i,j) -#define isl_int_add_ui(r,i,j) mpz_add_ui(r,i,j) -#define isl_int_sub_ui(r,i,j) mpz_sub_ui(r,i,j) - -#define isl_int_add(r,i,j) mpz_add(r,i,j) -#define isl_int_sub(r,i,j) mpz_sub(r,i,j) -#define isl_int_mul(r,i,j) mpz_mul(r,i,j) -#define isl_int_mul_ui(r,i,j) mpz_mul_ui(r,i,j) -#define isl_int_pow_ui(r,i,j) mpz_pow_ui(r,i,j) -#define isl_int_addmul(r,i,j) mpz_addmul(r,i,j) -#define isl_int_submul(r,i,j) mpz_submul(r,i,j) - -#define isl_int_gcd(r,i,j) mpz_gcd(r,i,j) -#define isl_int_lcm(r,i,j) mpz_lcm(r,i,j) -#define isl_int_divexact(r,i,j) mpz_divexact(r,i,j) -#define isl_int_divexact_ui(r,i,j) mpz_divexact_ui(r,i,j) -#define isl_int_tdiv_q(r,i,j) mpz_tdiv_q(r,i,j) -#define isl_int_cdiv_q(r,i,j) mpz_cdiv_q(r,i,j) -#define isl_int_fdiv_q(r,i,j) mpz_fdiv_q(r,i,j) -#define isl_int_fdiv_r(r,i,j) mpz_fdiv_r(r,i,j) -#define isl_int_fdiv_q_ui(r,i,j) mpz_fdiv_q_ui(r,i,j) - -#define isl_int_read(r,s) mpz_set_str(r,s,10) -typedef void (*isl_int_print_gmp_free_t)(void *, size_t); -#define isl_int_print(out,i,width) \ - do { \ - char *s; \ - isl_int_print_gmp_free_t gmp_free; \ - s = mpz_get_str(0, 10, i); \ - fprintf(out, "%*s", width, s); \ - mp_get_memory_functions(NULL, NULL, &gmp_free); \ - (*gmp_free)(s, strlen(s)+1); \ - } while (0) - -#define isl_int_sgn(i) mpz_sgn(i) -#define isl_int_cmp(i,j) mpz_cmp(i,j) -#define isl_int_cmp_si(i,si) mpz_cmp_si(i,si) -#define isl_int_eq(i,j) (mpz_cmp(i,j) == 0) -#define isl_int_ne(i,j) (mpz_cmp(i,j) != 0) -#define isl_int_lt(i,j) (mpz_cmp(i,j) < 0) -#define isl_int_le(i,j) (mpz_cmp(i,j) <= 0) -#define isl_int_gt(i,j) (mpz_cmp(i,j) > 0) -#define isl_int_ge(i,j) (mpz_cmp(i,j) >= 0) -#define isl_int_abs_eq(i,j) (mpz_cmpabs(i,j) == 0) -#define isl_int_abs_ne(i,j) (mpz_cmpabs(i,j) != 0) -#define isl_int_abs_lt(i,j) (mpz_cmpabs(i,j) < 0) -#define isl_int_abs_gt(i,j) (mpz_cmpabs(i,j) > 0) -#define isl_int_abs_ge(i,j) (mpz_cmpabs(i,j) >= 0) - - -#define isl_int_is_zero(i) (isl_int_sgn(i) == 0) -#define isl_int_is_one(i) (isl_int_cmp_si(i,1) == 0) -#define isl_int_is_negone(i) (isl_int_cmp_si(i,-1) == 0) -#define isl_int_is_pos(i) (isl_int_sgn(i) > 0) -#define isl_int_is_neg(i) (isl_int_sgn(i) < 0) -#define isl_int_is_nonpos(i) (isl_int_sgn(i) <= 0) -#define isl_int_is_nonneg(i) (isl_int_sgn(i) >= 0) -#define isl_int_is_divisible_by(i,j) mpz_divisible_p(i,j) - -uint32_t isl_gmp_hash(mpz_t v, uint32_t hash); -#define isl_int_hash(v,h) isl_gmp_hash(v,h) - -#if defined(__cplusplus) -} -#endif - -#if defined(__cplusplus) -extern "C" { typedef void (*isl_gmp_free_t)(void *, size_t); } - -static inline std::ostream &operator<<(std::ostream &os, isl_int i) -{ - char *s; - isl_gmp_free_t gmp_free; - s = mpz_get_str(0, 10, i); - os << s; - mp_get_memory_functions(NULL, NULL, &gmp_free); - (*gmp_free)(s, strlen(s)+1); - return os; -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/list.h b/cloog-0.16.3/isl/include/isl/list.h deleted file mode 100644 index 51387c3..0000000 --- a/cloog-0.16.3/isl/include/isl/list.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_LIST_H -#define ISL_LIST_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -#define ISL_DECLARE_LIST(EL) \ -struct isl_##EL; \ -struct isl_##EL##_list; \ -typedef struct isl_##EL##_list isl_##EL##_list; \ -isl_ctx *isl_##EL##_list_get_ctx(__isl_keep isl_##EL##_list *list); \ -__isl_give isl_##EL##_list *isl_##EL##_list_alloc(isl_ctx *ctx, int n); \ -__isl_give isl_##EL##_list *isl_##EL##_list_copy( \ - __isl_keep isl_##EL##_list *list); \ -void isl_##EL##_list_free(__isl_take isl_##EL##_list *list); \ -__isl_give isl_##EL##_list *isl_##EL##_list_add( \ - __isl_take isl_##EL##_list *list, \ - __isl_take struct isl_##EL *el); \ -int isl_##EL##_list_n_##EL(__isl_keep isl_##EL##_list *list); \ -__isl_give struct isl_##EL *isl_##EL##_list_get_##EL( \ - __isl_keep isl_##EL##_list *list, int index); \ -int isl_##EL##_list_foreach(__isl_keep isl_##EL##_list *list, \ - int (*fn)(__isl_take struct isl_##EL *el, void *user), \ - void *user); \ -__isl_give isl_printer *isl_printer_print_##EL##_list( \ - __isl_take isl_printer *p, __isl_keep isl_##EL##_list *list); \ -void isl_##EL##_list_dump(__isl_keep isl_##EL##_list *list); - -ISL_DECLARE_LIST(basic_set) -ISL_DECLARE_LIST(set) -ISL_DECLARE_LIST(aff) -ISL_DECLARE_LIST(band) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/local_space.h b/cloog-0.16.3/isl/include/isl/local_space.h deleted file mode 100644 index 3faa041..0000000 --- a/cloog-0.16.3/isl/include/isl/local_space.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef ISL_LOCAL_SPACE_H -#define ISL_LOCAL_SPACE_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_local_space; -typedef struct isl_local_space isl_local_space; - -isl_ctx *isl_local_space_get_ctx(__isl_keep isl_local_space *ls); - -__isl_give isl_local_space *isl_local_space_from_dim(__isl_take isl_dim *dim); - -__isl_give isl_local_space *isl_local_space_copy( - __isl_keep isl_local_space *ls); -void *isl_local_space_free(__isl_take isl_local_space *ls); - -int isl_local_space_dim(__isl_keep isl_local_space *ls, - enum isl_dim_type type); -const char *isl_local_space_get_dim_name(__isl_keep isl_local_space *ls, - enum isl_dim_type type, unsigned pos); -__isl_give isl_local_space *isl_local_space_set_dim_name( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned pos, const char *s); -__isl_give isl_dim *isl_local_space_get_dim(__isl_keep isl_local_space *ls); -__isl_give isl_div *isl_local_space_get_div(__isl_keep isl_local_space *ls, - int pos); - -__isl_give isl_local_space *isl_local_space_from_domain( - __isl_take isl_local_space *ls); -__isl_give isl_local_space *isl_local_space_add_dims( - __isl_take isl_local_space *ls, enum isl_dim_type type, unsigned n); -__isl_give isl_local_space *isl_local_space_drop_dims( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_local_space *isl_local_space_insert_dims( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned first, unsigned n); - -int isl_local_space_is_equal(__isl_keep isl_local_space *ls1, - __isl_keep isl_local_space *ls2); - -__isl_give isl_printer *isl_printer_print_local_space(__isl_take isl_printer *p, - __isl_keep isl_local_space *ls); -void isl_local_space_dump(__isl_keep isl_local_space *ls); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/lp.h b/cloog-0.16.3/isl/include/isl/lp.h deleted file mode 100644 index 9f7a912..0000000 --- a/cloog-0.16.3/isl/include/isl/lp.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_LP_H -#define ISL_LP_H - -#include -#include -#include -#include - -enum isl_lp_result { - isl_lp_error = -1, - isl_lp_ok = 0, - isl_lp_unbounded, - isl_lp_empty -}; - -#if defined(__cplusplus) -extern "C" { -#endif - -enum isl_lp_result isl_basic_map_solve_lp(struct isl_basic_map *bmap, int max, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol); -enum isl_lp_result isl_basic_set_solve_lp(struct isl_basic_set *bset, int max, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol); -enum isl_lp_result isl_map_solve_lp(__isl_keep isl_map *map, int max, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol); -enum isl_lp_result isl_set_solve_lp(__isl_keep isl_set *set, int max, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/map.h b/cloog-0.16.3/isl/include/isl/map.h deleted file mode 100644 index 4678227..0000000 --- a/cloog-0.16.3/isl/include/isl/map.h +++ /dev/null @@ -1,472 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_MAP_H -#define ISL_MAP_H - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -/* General notes: - * - * All structures are reference counted to allow reuse without duplication. - * A *_copy operation will increase the reference count, while a *_free - * operation will decrease the reference count and only actually release - * the structures when the reference count drops to zero. - * - * Functions that return an isa structure will in general _destroy_ - * all argument isa structures (the obvious execption begin the _copy - * functions). A pointer passed to such a function may therefore - * never be used after the function call. If you want to keep a - * reference to the old structure(s), use the appropriate _copy function. - */ - -unsigned isl_basic_map_n_in(const struct isl_basic_map *bmap); -unsigned isl_basic_map_n_out(const struct isl_basic_map *bmap); -unsigned isl_basic_map_n_param(const struct isl_basic_map *bmap); -unsigned isl_basic_map_n_div(const struct isl_basic_map *bmap); -unsigned isl_basic_map_total_dim(const struct isl_basic_map *bmap); -unsigned isl_basic_map_dim(const struct isl_basic_map *bmap, - enum isl_dim_type type); - -unsigned isl_map_n_in(const struct isl_map *map); -unsigned isl_map_n_out(const struct isl_map *map); -unsigned isl_map_n_param(const struct isl_map *map); -unsigned isl_map_dim(const struct isl_map *map, enum isl_dim_type type); - -isl_ctx *isl_basic_map_get_ctx(__isl_keep isl_basic_map *bmap); -isl_ctx *isl_map_get_ctx(__isl_keep isl_map *map); -__isl_give isl_dim *isl_basic_map_get_dim(__isl_keep isl_basic_map *bmap); -__isl_give isl_dim *isl_map_get_dim(__isl_keep isl_map *map); - -struct isl_div *isl_basic_map_div(struct isl_basic_map *bmap, int pos); - -__isl_give isl_local_space *isl_basic_map_get_local_space( - __isl_keep isl_basic_map *bmap); - -__isl_give isl_basic_map *isl_basic_map_set_tuple_name( - __isl_take isl_basic_map *bmap, enum isl_dim_type type, const char *s); -const char *isl_basic_map_get_tuple_name(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type); -const char *isl_map_get_tuple_name(__isl_keep isl_map *map, - enum isl_dim_type type); -__isl_give isl_map *isl_map_set_tuple_name(__isl_take isl_map *map, - enum isl_dim_type type, const char *s); -const char *isl_basic_map_get_dim_name(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos); -const char *isl_map_get_dim_name(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos); -__isl_give isl_basic_map *isl_basic_map_set_dim_name( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, const char *s); -__isl_give isl_map *isl_map_set_dim_name(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, const char *s); - -int isl_basic_map_is_rational(__isl_keep isl_basic_map *bmap); - -struct isl_basic_map *isl_basic_map_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned in, unsigned out, unsigned extra, - unsigned n_eq, unsigned n_ineq); -__isl_give isl_basic_map *isl_basic_map_identity(__isl_take isl_dim *dim); -struct isl_basic_map *isl_basic_map_identity_like(struct isl_basic_map *model); -struct isl_basic_map *isl_basic_map_finalize(struct isl_basic_map *bmap); -void isl_basic_map_free(__isl_take isl_basic_map *bmap); -__isl_give isl_basic_map *isl_basic_map_copy(__isl_keep isl_basic_map *bmap); -struct isl_basic_map *isl_basic_map_extend(struct isl_basic_map *base, - unsigned nparam, unsigned n_in, unsigned n_out, unsigned extra, - unsigned n_eq, unsigned n_ineq); -struct isl_basic_map *isl_basic_map_extend_constraints( - struct isl_basic_map *base, unsigned n_eq, unsigned n_ineq); -struct isl_basic_map *isl_basic_map_equal( - struct isl_dim *dim, unsigned n_equal); -struct isl_basic_map *isl_basic_map_less_at(struct isl_dim *dim, unsigned pos); -struct isl_basic_map *isl_basic_map_more_at(struct isl_dim *dim, unsigned pos); -__isl_give isl_basic_map *isl_basic_map_empty(__isl_take isl_dim *dim); -struct isl_basic_map *isl_basic_map_empty_like(struct isl_basic_map *model); -struct isl_basic_map *isl_basic_map_empty_like_map(struct isl_map *model); -__isl_give isl_basic_map *isl_basic_map_universe(__isl_take isl_dim *dim); -__isl_give isl_basic_map *isl_basic_map_nat_universe(__isl_take isl_dim *dim); -__isl_give isl_basic_map *isl_basic_map_universe_like( - __isl_keep isl_basic_map *bmap); -__isl_give isl_basic_map *isl_basic_map_remove_redundancies( - __isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_remove_redundancies(__isl_take isl_map *map); -__isl_give isl_basic_map *isl_map_simple_hull(__isl_take isl_map *map); - -__isl_give isl_basic_map *isl_basic_map_intersect_domain( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *bset); -__isl_give isl_basic_map *isl_basic_map_intersect_range( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *bset); -__isl_give isl_basic_map *isl_basic_map_intersect( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); -__isl_give isl_map *isl_basic_map_union( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); -__isl_give isl_basic_map *isl_basic_map_apply_domain( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); -__isl_give isl_basic_map *isl_basic_map_apply_range( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); -__isl_give isl_basic_map *isl_basic_map_affine_hull( - __isl_take isl_basic_map *bmap); -__isl_give isl_basic_map *isl_basic_map_reverse(__isl_take isl_basic_map *bmap); -__isl_give isl_basic_set *isl_basic_map_domain(__isl_take isl_basic_map *bmap); -__isl_give isl_basic_set *isl_basic_map_range(__isl_take isl_basic_map *bmap); -__isl_give isl_basic_map *isl_basic_map_domain_map( - __isl_take isl_basic_map *bmap); -__isl_give isl_basic_map *isl_basic_map_range_map( - __isl_take isl_basic_map *bmap); -__isl_give isl_basic_map *isl_basic_map_remove_dims( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n); -struct isl_basic_map *isl_basic_map_from_basic_set(struct isl_basic_set *bset, - struct isl_dim *dim); -struct isl_basic_set *isl_basic_set_from_basic_map(struct isl_basic_map *bmap); -__isl_give isl_basic_map *isl_basic_map_sample(__isl_take isl_basic_map *bmap); -struct isl_basic_map *isl_basic_map_simplify(struct isl_basic_map *bmap); -struct isl_basic_map *isl_basic_map_detect_equalities( - struct isl_basic_map *bmap); -__isl_give isl_basic_map *isl_basic_map_read_from_file(isl_ctx *ctx, - FILE *input, int nparam); -__isl_give isl_basic_map *isl_basic_map_read_from_str(isl_ctx *ctx, - const char *str, int nparam); -__isl_give isl_map *isl_map_read_from_file(struct isl_ctx *ctx, - FILE *input, int nparam); -__isl_give isl_map *isl_map_read_from_str(isl_ctx *ctx, - const char *str, int nparam); -void isl_basic_map_dump(__isl_keep isl_basic_map *bmap); -void isl_basic_map_print(__isl_keep isl_basic_map *bmap, FILE *out, int indent, - const char *prefix, const char *suffix, unsigned output_format); -void isl_map_dump(__isl_keep isl_map *map); -void isl_map_print(__isl_keep isl_map *map, FILE *out, int indent, - unsigned output_format); -__isl_give isl_printer *isl_printer_print_basic_map( - __isl_take isl_printer *printer, __isl_keep isl_basic_map *bmap); -__isl_give isl_printer *isl_printer_print_map(__isl_take isl_printer *printer, - __isl_keep isl_map *map); -__isl_give isl_basic_map *isl_basic_map_fix_si(__isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, int value); -__isl_give isl_basic_map *isl_basic_map_lower_bound_si( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, int value); - -struct isl_basic_map *isl_basic_map_sum( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2); -struct isl_basic_map *isl_basic_map_neg(struct isl_basic_map *bmap); -struct isl_basic_map *isl_basic_map_floordiv(struct isl_basic_map *bmap, - isl_int d); - -struct isl_map *isl_map_sum(struct isl_map *map1, struct isl_map *map2); -struct isl_map *isl_map_neg(struct isl_map *map); -struct isl_map *isl_map_floordiv(struct isl_map *map, isl_int d); - -int isl_basic_map_is_equal( - __isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2); - -__isl_give isl_map *isl_basic_map_partial_lexmax( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); -__isl_give isl_map *isl_basic_map_partial_lexmin( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); -__isl_give isl_map *isl_map_partial_lexmax( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty); -__isl_give isl_map *isl_map_partial_lexmin( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty); -__isl_give isl_map *isl_basic_map_lexmin(__isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_basic_map_lexmax(__isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_lexmin(__isl_take isl_map *map); -__isl_give isl_map *isl_map_lexmax(__isl_take isl_map *map); -int isl_basic_map_foreach_lexmin(__isl_keep isl_basic_map *bmap, - int (*fn)(__isl_take isl_basic_set *dom, __isl_take isl_aff_list *list, - void *user), - void *user); -int isl_basic_map_foreach_lexmax(__isl_keep isl_basic_map *bmap, - int (*fn)(__isl_take isl_basic_set *dom, __isl_take isl_aff_list *list, - void *user), - void *user); - -void isl_basic_map_print_internal(__isl_keep isl_basic_map *bmap, - FILE *out, int indent); - -struct isl_basic_map *isl_map_copy_basic_map(struct isl_map *map); -__isl_give isl_map *isl_map_drop_basic_map(__isl_take isl_map *map, - __isl_keep isl_basic_map *bmap); - -int isl_basic_map_plain_is_fixed(struct isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, isl_int *val); - -int isl_basic_map_image_is_bounded(__isl_keep isl_basic_map *bmap); -int isl_basic_map_is_universe(__isl_keep isl_basic_map *bmap); -int isl_basic_map_plain_is_empty(__isl_keep isl_basic_map *bmap); -int isl_basic_map_fast_is_empty(__isl_keep isl_basic_map *bmap); -int isl_basic_map_is_empty(__isl_keep isl_basic_map *bmap); -int isl_basic_map_is_subset(__isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2); -int isl_basic_map_is_strict_subset(__isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2); - -struct isl_map *isl_map_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned in, unsigned out, int n, - unsigned flags); -__isl_give isl_map *isl_map_universe(__isl_take isl_dim *dim); -__isl_give isl_map *isl_map_nat_universe(__isl_take isl_dim *dim); -__isl_give isl_map *isl_map_empty(__isl_take isl_dim *dim); -struct isl_map *isl_map_empty_like(struct isl_map *model); -struct isl_map *isl_map_empty_like_basic_map(struct isl_basic_map *model); -struct isl_map *isl_map_dup(struct isl_map *map); -__isl_give isl_map *isl_map_add_basic_map(__isl_take isl_map *map, - __isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_identity(__isl_take isl_dim *dim); -struct isl_map *isl_map_identity_like(struct isl_map *model); -struct isl_map *isl_map_identity_like_basic_map(struct isl_basic_map *model); -__isl_give isl_map *isl_map_lex_lt_first(__isl_take isl_dim *dim, unsigned n); -__isl_give isl_map *isl_map_lex_le_first(__isl_take isl_dim *dim, unsigned n); -__isl_give isl_map *isl_map_lex_lt(__isl_take isl_dim *set_dim); -__isl_give isl_map *isl_map_lex_le(__isl_take isl_dim *set_dim); -__isl_give isl_map *isl_map_lex_gt_first(__isl_take isl_dim *dim, unsigned n); -__isl_give isl_map *isl_map_lex_ge_first(__isl_take isl_dim *dim, unsigned n); -__isl_give isl_map *isl_map_lex_gt(__isl_take isl_dim *set_dim); -__isl_give isl_map *isl_map_lex_ge(__isl_take isl_dim *set_dim); -struct isl_map *isl_map_finalize(struct isl_map *map); -void isl_map_free(__isl_take isl_map *map); -__isl_give isl_map *isl_map_copy(__isl_keep isl_map *map); -struct isl_map *isl_map_extend(struct isl_map *base, - unsigned nparam, unsigned n_in, unsigned n_out); -__isl_give isl_map *isl_map_reverse(__isl_take isl_map *map); -__isl_give isl_map *isl_map_union( - __isl_take isl_map *map1, - __isl_take isl_map *map2); -struct isl_map *isl_map_union_disjoint( - struct isl_map *map1, struct isl_map *map2); -__isl_give isl_map *isl_map_intersect_domain( - __isl_take isl_map *map, - __isl_take isl_set *set); -__isl_give isl_map *isl_map_intersect_range( - __isl_take isl_map *map, - __isl_take isl_set *set); -__isl_give isl_map *isl_map_apply_domain( - __isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_map *isl_map_apply_range( - __isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_map *isl_map_product(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_basic_map *isl_basic_map_range_product( - __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2); -__isl_give isl_map *isl_map_range_product(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_basic_map *isl_basic_map_flat_product( - __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2); -__isl_give isl_map *isl_map_flat_product(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_basic_map *isl_basic_map_flat_range_product( - __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2); -__isl_give isl_map *isl_map_flat_range_product(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_map *isl_map_intersect(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_map *isl_map_intersect_params(__isl_take isl_map *map, - __isl_take isl_set *params); -__isl_give isl_map *isl_map_subtract( - __isl_take isl_map *map1, - __isl_take isl_map *map2); -struct isl_map *isl_map_fix_input_si(struct isl_map *map, - unsigned input, int value); -__isl_give isl_map *isl_map_fix_si(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, int value); -__isl_give isl_map *isl_map_lower_bound_si(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, int value); -__isl_give isl_basic_set *isl_basic_map_deltas(__isl_take isl_basic_map *bmap); -__isl_give isl_set *isl_map_deltas(__isl_take isl_map *map); -__isl_give isl_basic_map *isl_basic_map_deltas_map( - __isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_deltas_map(__isl_take isl_map *map); -struct isl_map *isl_map_detect_equalities(struct isl_map *map); -__isl_give isl_basic_map *isl_map_affine_hull(__isl_take isl_map *map); -__isl_give isl_basic_map *isl_map_convex_hull(__isl_take isl_map *map); -__isl_give isl_basic_map *isl_map_polyhedral_hull(__isl_take isl_map *map); -__isl_give isl_basic_map *isl_basic_map_add(__isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned n); -__isl_give isl_map *isl_map_add_dims(__isl_take isl_map *map, - enum isl_dim_type type, unsigned n); -__isl_give isl_map *isl_map_insert(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, unsigned n); -__isl_give isl_basic_map *isl_basic_map_move_dims( - __isl_take isl_basic_map *bmap, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); -__isl_give isl_map *isl_map_move_dims(__isl_take isl_map *map, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); -__isl_give isl_basic_map *isl_basic_map_project_out( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_map *isl_map_project_out(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_basic_map *isl_basic_map_remove_divs( - __isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_remove_divs(__isl_take isl_map *map); -__isl_give isl_map *isl_map_remove_dims(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n); -struct isl_map *isl_map_remove_inputs(struct isl_map *map, - unsigned first, unsigned n); - -__isl_give isl_map *isl_set_identity(__isl_take isl_set *set); - -int isl_basic_set_is_wrapping(__isl_keep isl_basic_set *bset); -int isl_set_is_wrapping(__isl_keep isl_set *set); -__isl_give isl_basic_set *isl_basic_map_wrap(__isl_take isl_basic_map *bmap); -__isl_give isl_set *isl_map_wrap(__isl_take isl_map *map); -__isl_give isl_basic_map *isl_basic_set_unwrap(__isl_take isl_basic_set *bset); -__isl_give isl_map *isl_set_unwrap(__isl_take isl_set *set); -__isl_give isl_basic_map *isl_basic_map_flatten(__isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_flatten(__isl_take isl_map *map); -__isl_give isl_basic_map *isl_basic_map_flatten_range( - __isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_flatten_range(__isl_take isl_map *map); -__isl_give isl_basic_set *isl_basic_set_flatten(__isl_take isl_basic_set *bset); -__isl_give isl_set *isl_set_flatten(__isl_take isl_set *set); -__isl_give isl_map *isl_set_flatten_map(__isl_take isl_set *set); -__isl_give isl_set *isl_map_domain(__isl_take isl_map *bmap); -__isl_give isl_set *isl_map_range(__isl_take isl_map *map); -__isl_give isl_map *isl_map_domain_map(__isl_take isl_map *map); -__isl_give isl_map *isl_map_range_map(__isl_take isl_map *map); -__isl_give isl_map *isl_map_from_basic_map(__isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_from_domain(__isl_take isl_set *set); -__isl_give isl_basic_map *isl_basic_map_from_domain( - __isl_take isl_basic_set *bset); -__isl_give isl_basic_map *isl_basic_map_from_range( - __isl_take isl_basic_set *bset); -struct isl_map *isl_map_from_range(struct isl_set *set); -__isl_give isl_basic_map *isl_basic_map_from_domain_and_range( - __isl_take isl_basic_set *domain, __isl_take isl_basic_set *range); -__isl_give isl_map *isl_map_from_domain_and_range(__isl_take isl_set *domain, - __isl_take isl_set *range); -struct isl_map *isl_map_from_set(struct isl_set *set, struct isl_dim *dim); -struct isl_set *isl_set_from_map(struct isl_map *map); -__isl_give isl_basic_map *isl_map_sample(__isl_take isl_map *map); - -int isl_map_plain_is_empty(__isl_keep isl_map *map); -int isl_map_fast_is_empty(__isl_keep isl_map *map); -int isl_map_plain_is_universe(__isl_keep isl_map *map); -int isl_map_is_empty(__isl_keep isl_map *map); -int isl_map_is_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2); -int isl_map_is_strict_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2); -int isl_map_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2); -int isl_map_is_single_valued(__isl_keep isl_map *map); -int isl_map_plain_is_injective(__isl_keep isl_map *map); -int isl_map_is_injective(__isl_keep isl_map *map); -int isl_map_is_bijective(__isl_keep isl_map *map); -int isl_map_is_translation(__isl_keep isl_map *map); -int isl_map_has_equal_dim(__isl_keep isl_map *map1, __isl_keep isl_map *map2); - -int isl_basic_map_can_zip(__isl_keep isl_basic_map *bmap); -int isl_map_can_zip(__isl_keep isl_map *map); -__isl_give isl_basic_map *isl_basic_map_zip(__isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_zip(__isl_take isl_map *map); - -__isl_give isl_map *isl_map_make_disjoint(__isl_take isl_map *map); -__isl_give isl_map *isl_basic_map_compute_divs(__isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_compute_divs(__isl_take isl_map *map); -__isl_give isl_map *isl_map_align_divs(__isl_take isl_map *map); - -void isl_map_print_internal(__isl_keep isl_map *map, FILE *out, int indent); - -int isl_map_plain_input_is_fixed(__isl_keep isl_map *map, - unsigned in, isl_int *val); -int isl_map_plain_is_fixed(struct isl_map *map, - enum isl_dim_type type, unsigned pos, isl_int *val); -int isl_map_fast_is_fixed(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos, isl_int *val); - -__isl_give isl_basic_map *isl_basic_map_gist(__isl_take isl_basic_map *bmap, - __isl_take isl_basic_map *context); -__isl_give isl_map *isl_map_gist(__isl_take isl_map *map, - __isl_take isl_map *context); -__isl_give isl_map *isl_map_gist_basic_map(__isl_take isl_map *map, - __isl_take isl_basic_map *context); - -__isl_give isl_map *isl_map_coalesce(__isl_take isl_map *map); - -int isl_map_plain_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2); -int isl_map_fast_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2); - -uint32_t isl_map_get_hash(__isl_keep isl_map *map); - -int isl_map_foreach_basic_map(__isl_keep isl_map *map, - int (*fn)(__isl_take isl_basic_map *bmap, void *user), void *user); - -__isl_give isl_map *isl_set_lifting(__isl_take isl_set *set); - -__isl_give isl_map *isl_map_power(__isl_take isl_map *map, int *exact); -__isl_give isl_map *isl_map_reaching_path_lengths(__isl_take isl_map *map, - int *exact); -__isl_give isl_map *isl_map_transitive_closure(__isl_take isl_map *map, - int *exact); - -__isl_give isl_map *isl_map_lex_le_map(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_map *isl_map_lex_lt_map(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_map *isl_map_lex_ge_map(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_map *isl_map_lex_gt_map(__isl_take isl_map *map1, - __isl_take isl_map *map2); - -__isl_give isl_map *isl_map_align_params(__isl_take isl_map *map, - __isl_take isl_dim *model); - -__isl_give isl_mat *isl_basic_map_equalities_matrix( - __isl_keep isl_basic_map *bmap, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5); -__isl_give isl_mat *isl_basic_map_inequalities_matrix( - __isl_keep isl_basic_map *bmap, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5); -__isl_give isl_basic_map *isl_basic_map_from_constraint_matrices( - __isl_take isl_dim *dim, - __isl_take isl_mat *eq, __isl_take isl_mat *ineq, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5); - -__isl_give isl_basic_map *isl_basic_map_from_aff(__isl_take isl_aff *aff); -__isl_give isl_basic_map *isl_basic_map_from_aff_list( - __isl_take isl_dim *domain_dim, __isl_take isl_aff_list *list); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/map_type.h b/cloog-0.16.3/isl/include/isl/map_type.h deleted file mode 100644 index 1ba26e0..0000000 --- a/cloog-0.16.3/isl/include/isl/map_type.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef ISL_MAP_TYPE_H -#define ISL_MAP_TYPE_H - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_basic_map; -typedef struct isl_basic_map isl_basic_map; -struct isl_map; -typedef struct isl_map isl_map; - -#ifndef isl_basic_set -struct isl_basic_set; -typedef struct isl_basic_set isl_basic_set; -#endif -#ifndef isl_set -struct isl_set; -typedef struct isl_set isl_set; -#endif - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/mat.h b/cloog-0.16.3/isl/include/isl/mat.h deleted file mode 100644 index eda1048..0000000 --- a/cloog-0.16.3/isl/include/isl/mat.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_MAT_H -#define ISL_MAT_H - -#include - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_mat; -typedef struct isl_mat isl_mat; - -isl_ctx *isl_mat_get_ctx(__isl_keep isl_mat *mat); - -__isl_give isl_mat *isl_mat_alloc(struct isl_ctx *ctx, - unsigned n_row, unsigned n_col); -struct isl_mat *isl_mat_dup(struct isl_mat *mat); -struct isl_mat *isl_mat_extend(struct isl_mat *mat, - unsigned n_row, unsigned n_col); -struct isl_mat *isl_mat_identity(struct isl_ctx *ctx, unsigned n_row); -__isl_give isl_mat *isl_mat_copy(__isl_keep isl_mat *mat); -struct isl_mat *isl_mat_cow(struct isl_mat *mat); -void isl_mat_free(__isl_take isl_mat *mat); - -int isl_mat_rows(__isl_keep isl_mat *mat); -int isl_mat_cols(__isl_keep isl_mat *mat); -int isl_mat_get_element(__isl_keep isl_mat *mat, int row, int col, isl_int *v); -__isl_give isl_mat *isl_mat_set_element(__isl_take isl_mat *mat, - int row, int col, isl_int v); -__isl_give isl_mat *isl_mat_set_element_si(__isl_take isl_mat *mat, - int row, int col, int v); - -struct isl_mat *isl_mat_swap_cols(struct isl_mat *mat, unsigned i, unsigned j); -struct isl_mat *isl_mat_swap_rows(struct isl_mat *mat, unsigned i, unsigned j); - -struct isl_vec *isl_mat_vec_product(struct isl_mat *mat, struct isl_vec *vec); -struct isl_vec *isl_vec_mat_product(struct isl_vec *vec, struct isl_mat *mat); -__isl_give isl_vec *isl_mat_vec_inverse_product(__isl_take isl_mat *mat, - __isl_take isl_vec *vec); -struct isl_mat *isl_mat_aff_direct_sum(struct isl_mat *left, - struct isl_mat *right); -__isl_give isl_mat *isl_mat_diagonal(__isl_take isl_mat *mat1, - __isl_take isl_mat *mat2); -struct isl_mat *isl_mat_left_hermite(struct isl_mat *M, - int neg, struct isl_mat **U, struct isl_mat **Q); -struct isl_mat *isl_mat_lin_to_aff(struct isl_mat *mat); -struct isl_mat *isl_mat_inverse_product(struct isl_mat *left, - struct isl_mat *right); -struct isl_mat *isl_mat_product(struct isl_mat *left, struct isl_mat *right); -struct isl_mat *isl_mat_transpose(struct isl_mat *mat); -__isl_give isl_mat *isl_mat_right_inverse(__isl_take isl_mat *mat); -__isl_give isl_mat *isl_mat_right_kernel(__isl_take isl_mat *mat); - -__isl_give isl_mat *isl_mat_normalize(__isl_take isl_mat *mat); -__isl_give isl_mat *isl_mat_normalize_row(__isl_take isl_mat *mat, int row); - -struct isl_mat *isl_mat_drop_cols(struct isl_mat *mat, - unsigned col, unsigned n); -struct isl_mat *isl_mat_drop_rows(struct isl_mat *mat, - unsigned row, unsigned n); -__isl_give isl_mat *isl_mat_insert_cols(__isl_take isl_mat *mat, - unsigned col, unsigned n); -__isl_give isl_mat *isl_mat_insert_rows(__isl_take isl_mat *mat, - unsigned row, unsigned n); -__isl_give isl_mat *isl_mat_move_cols(__isl_take isl_mat *mat, - unsigned dst_col, unsigned src_col, unsigned n); -__isl_give isl_mat *isl_mat_add_rows(__isl_take isl_mat *mat, unsigned n); -__isl_give isl_mat *isl_mat_insert_zero_cols(__isl_take isl_mat *mat, - unsigned first, unsigned n); -__isl_give isl_mat *isl_mat_add_zero_cols(__isl_take isl_mat *mat, unsigned n); -__isl_give isl_mat *isl_mat_insert_zero_rows(__isl_take isl_mat *mat, - unsigned row, unsigned n); -__isl_give isl_mat *isl_mat_add_zero_rows(__isl_take isl_mat *mat, unsigned n); - -void isl_mat_col_add(__isl_keep isl_mat *mat, int dst_col, int src_col); -void isl_mat_col_mul(struct isl_mat *mat, int dst_col, isl_int f, int src_col); -void isl_mat_col_submul(struct isl_mat *mat, - int dst_col, isl_int f, int src_col); - -struct isl_mat *isl_mat_unimodular_complete(struct isl_mat *M, int row); - -__isl_give isl_mat *isl_mat_from_row_vec(__isl_take isl_vec *vec); -__isl_give isl_mat *isl_mat_concat(__isl_take isl_mat *top, - __isl_take isl_mat *bot); -__isl_give isl_mat *isl_mat_vec_concat(__isl_take isl_mat *top, - __isl_take isl_vec *bot); - -int isl_mat_is_equal(__isl_keep isl_mat *mat1, __isl_keep isl_mat *mat2); - -int isl_mat_initial_non_zero_cols(__isl_keep isl_mat *mat); - -void isl_mat_print_internal(__isl_keep isl_mat *mat, FILE *out, int indent); -void isl_mat_dump(__isl_keep isl_mat *mat); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/obj.h b/cloog-0.16.3/isl/include/isl/obj.h deleted file mode 100644 index b2a6afc..0000000 --- a/cloog-0.16.3/isl/include/isl/obj.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef ISL_OBJ_H -#define ISL_OBJ_H - -#include -#include -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_obj_vtable { - void *(*copy)(void *v1); - void *(*add)(void *v1, void *v2); - __isl_give isl_printer *(*print)(__isl_take isl_printer *p, void *v); - void (*free)(void *v); -}; -typedef struct isl_obj_vtable *isl_obj_type; -extern struct isl_obj_vtable isl_obj_none_vtable; -#define isl_obj_none (&isl_obj_none_vtable) -extern struct isl_obj_vtable isl_obj_int_vtable; -#define isl_obj_int (&isl_obj_int_vtable) -extern struct isl_obj_vtable isl_obj_set_vtable; -#define isl_obj_set (&isl_obj_set_vtable) -extern struct isl_obj_vtable isl_obj_union_set_vtable; -#define isl_obj_union_set (&isl_obj_union_set_vtable) -extern struct isl_obj_vtable isl_obj_map_vtable; -#define isl_obj_map (&isl_obj_map_vtable) -extern struct isl_obj_vtable isl_obj_union_map_vtable; -#define isl_obj_union_map (&isl_obj_union_map_vtable) -extern struct isl_obj_vtable isl_obj_pw_qpolynomial_vtable; -#define isl_obj_pw_qpolynomial (&isl_obj_pw_qpolynomial_vtable) -extern struct isl_obj_vtable isl_obj_union_pw_qpolynomial_vtable; -#define isl_obj_union_pw_qpolynomial (&isl_obj_union_pw_qpolynomial_vtable) -extern struct isl_obj_vtable isl_obj_pw_qpolynomial_fold_vtable; -#define isl_obj_pw_qpolynomial_fold (&isl_obj_pw_qpolynomial_fold_vtable) -extern struct isl_obj_vtable isl_obj_union_pw_qpolynomial_fold_vtable; -#define isl_obj_union_pw_qpolynomial_fold (&isl_obj_union_pw_qpolynomial_fold_vtable) -struct isl_obj { - isl_obj_type type; - void *v; -}; - -struct isl_int_obj; -typedef struct isl_int_obj isl_int_obj; - -__isl_give isl_int_obj *isl_int_obj_alloc(isl_ctx *ctx, isl_int v); -void isl_int_obj_free(__isl_take isl_int_obj *i); -__isl_give isl_int_obj *isl_int_obj_add(__isl_take isl_int_obj *i1, - __isl_take isl_int_obj *i2); -__isl_give isl_int_obj *isl_int_obj_sub(__isl_take isl_int_obj *i1, - __isl_take isl_int_obj *i2); -__isl_give isl_int_obj *isl_int_obj_mul(__isl_take isl_int_obj *i1, - __isl_take isl_int_obj *i2); -void isl_int_obj_get_int(__isl_keep isl_int_obj *i, isl_int *v); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/options.h b/cloog-0.16.3/isl/include/isl/options.h deleted file mode 100644 index d280ab3..0000000 --- a/cloog-0.16.3/isl/include/isl/options.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_OPTIONS_H -#define ISL_OPTIONS_H - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_options { - #define ISL_LP_TAB 0 - #define ISL_LP_PIP 1 - unsigned lp_solver; - - #define ISL_ILP_GBR 0 - #define ISL_ILP_PIP 1 - unsigned ilp_solver; - - #define ISL_PIP_TAB 0 - #define ISL_PIP_PIP 1 - unsigned pip; - - #define ISL_CONTEXT_GBR 0 - #define ISL_CONTEXT_LEXMIN 1 - unsigned context; - - #define ISL_GBR_NEVER 0 - #define ISL_GBR_ONCE 1 - #define ISL_GBR_ALWAYS 2 - unsigned gbr; - unsigned gbr_only_first; - - #define ISL_CLOSURE_ISL 0 - #define ISL_CLOSURE_BOX 1 - unsigned closure; - - #define ISL_BOUND_BERNSTEIN 0 - #define ISL_BOUND_RANGE 1 - int bound; - - #define ISL_BERNSTEIN_FACTORS 1 - #define ISL_BERNSTEIN_INTERVALS 2 - int bernstein_recurse; - - int bernstein_triangulate; - - int pip_symmetry; - - #define ISL_CONVEX_HULL_WRAP 0 - #define ISL_CONVEX_HULL_FM 1 - int convex; - - int schedule_parametric; - int schedule_outer_zero_distance; - int schedule_maximize_band_depth; - int schedule_split_parallel; -}; - -ISL_ARG_DECL(isl_options, struct isl_options, isl_options_arg) - -extern struct isl_arg isl_options_arg[]; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/point.h b/cloog-0.16.3/isl/include/isl/point.h deleted file mode 100644 index a5a7f93..0000000 --- a/cloog-0.16.3/isl/include/isl/point.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef ISL_POINT_H -#define ISL_POINT_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_point; -typedef struct isl_point isl_point; - -isl_ctx *isl_point_get_ctx(__isl_keep isl_point *pnt); -__isl_give isl_dim *isl_point_get_dim(__isl_keep isl_point *pnt); - -__isl_give isl_point *isl_point_zero(__isl_take isl_dim *dim); -__isl_give isl_point *isl_point_copy(__isl_keep isl_point *pnt); -void isl_point_free(__isl_take isl_point *pnt); - -void isl_point_get_coordinate(__isl_keep isl_point *pnt, - enum isl_dim_type type, int pos, isl_int *v); -__isl_give isl_point *isl_point_set_coordinate(__isl_take isl_point *pnt, - enum isl_dim_type type, int pos, isl_int v); - -__isl_give isl_point *isl_point_add_ui(__isl_take isl_point *pnt, - enum isl_dim_type type, int pos, unsigned val); -__isl_give isl_point *isl_point_sub_ui(__isl_take isl_point *pnt, - enum isl_dim_type type, int pos, unsigned val); - -__isl_give isl_point *isl_point_void(__isl_take isl_dim *dim); -int isl_point_is_void(__isl_keep isl_point *pnt); - -void isl_point_print(__isl_keep isl_point *pnt, FILE *out); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/polynomial.h b/cloog-0.16.3/isl/include/isl/polynomial.h deleted file mode 100644 index 389d6ce..0000000 --- a/cloog-0.16.3/isl/include/isl/polynomial.h +++ /dev/null @@ -1,555 +0,0 @@ -#ifndef ISL_POLYNOMIAL_H -#define ISL_POLYNOMIAL_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_qpolynomial; -typedef struct isl_qpolynomial isl_qpolynomial; - -isl_ctx *isl_qpolynomial_get_ctx(__isl_keep isl_qpolynomial *qp); -__isl_give isl_dim *isl_qpolynomial_get_dim(__isl_keep isl_qpolynomial *qp); -__isl_give isl_qpolynomial *isl_qpolynomial_reset_dim( - __isl_take isl_qpolynomial *qp, __isl_take isl_dim *dim); -unsigned isl_qpolynomial_dim(__isl_keep isl_qpolynomial *qp, - enum isl_dim_type type); -int isl_qpolynomial_involves_dims(__isl_keep isl_qpolynomial *qp, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_qpolynomial *isl_qpolynomial_set_dim_name( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type type, unsigned pos, const char *s); - -__isl_give isl_qpolynomial *isl_qpolynomial_zero(__isl_take isl_dim *dim); -__isl_give isl_qpolynomial *isl_qpolynomial_one(__isl_take isl_dim *dim); -__isl_give isl_qpolynomial *isl_qpolynomial_infty(__isl_take isl_dim *dim); -__isl_give isl_qpolynomial *isl_qpolynomial_neginfty(__isl_take isl_dim *dim); -__isl_give isl_qpolynomial *isl_qpolynomial_nan(__isl_take isl_dim *dim); -__isl_give isl_qpolynomial *isl_qpolynomial_rat_cst(__isl_take isl_dim *dim, - const isl_int n, const isl_int d); -__isl_give isl_qpolynomial *isl_qpolynomial_div(__isl_take isl_div *div); -__isl_give isl_qpolynomial *isl_qpolynomial_var(__isl_take isl_dim *dim, - enum isl_dim_type type, unsigned pos); -__isl_give isl_qpolynomial *isl_qpolynomial_copy(__isl_keep isl_qpolynomial *qp); -void isl_qpolynomial_free(__isl_take isl_qpolynomial *qp); - -int isl_qpolynomial_plain_is_equal(__isl_keep isl_qpolynomial *qp1, - __isl_keep isl_qpolynomial *qp2); -int isl_qpolynomial_is_zero(__isl_keep isl_qpolynomial *qp); -int isl_qpolynomial_is_nan(__isl_keep isl_qpolynomial *qp); -int isl_qpolynomial_is_infty(__isl_keep isl_qpolynomial *qp); -int isl_qpolynomial_is_neginfty(__isl_keep isl_qpolynomial *qp); -int isl_qpolynomial_sgn(__isl_keep isl_qpolynomial *qp); -int isl_qpolynomial_is_cst(__isl_keep isl_qpolynomial *qp, - isl_int *n, isl_int *d); -void isl_qpolynomial_get_den(__isl_keep isl_qpolynomial *qp, isl_int *d); - -__isl_give isl_qpolynomial *isl_qpolynomial_neg(__isl_take isl_qpolynomial *qp); -__isl_give isl_qpolynomial *isl_qpolynomial_add(__isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2); -__isl_give isl_qpolynomial *isl_qpolynomial_sub(__isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2); -__isl_give isl_qpolynomial *isl_qpolynomial_mul(__isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2); -__isl_give isl_qpolynomial *isl_qpolynomial_pow(__isl_take isl_qpolynomial *qp, - unsigned power); -__isl_give isl_qpolynomial *isl_qpolynomial_add_isl_int( - __isl_take isl_qpolynomial *qp, isl_int v); -__isl_give isl_qpolynomial *isl_qpolynomial_mul_isl_int( - __isl_take isl_qpolynomial *qp, isl_int v); -__isl_give isl_qpolynomial *isl_qpolynomial_scale( - __isl_take isl_qpolynomial *qp, isl_int v); - -__isl_give isl_qpolynomial *isl_qpolynomial_insert_dims( - __isl_take isl_qpolynomial *qp, enum isl_dim_type type, - unsigned first, unsigned n); -__isl_give isl_qpolynomial *isl_qpolynomial_add_dims( - __isl_take isl_qpolynomial *qp, enum isl_dim_type type, unsigned n); -__isl_give isl_qpolynomial *isl_qpolynomial_move_dims( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); -__isl_give isl_qpolynomial *isl_qpolynomial_drop_dims( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_qpolynomial *isl_qpolynomial_substitute( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type type, unsigned first, unsigned n, - __isl_keep isl_qpolynomial **subs); - -int isl_qpolynomial_as_polynomial_on_domain(__isl_keep isl_qpolynomial *qp, - __isl_keep isl_basic_set *bset, - int (*fn)(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, void *user), void *user); - -__isl_give isl_qpolynomial *isl_qpolynomial_homogenize( - __isl_take isl_qpolynomial *poly); - -__isl_give isl_qpolynomial *isl_qpolynomial_align_params( - __isl_take isl_qpolynomial *qp, __isl_take isl_dim *model); - -struct isl_term; -typedef struct isl_term isl_term; - -isl_ctx *isl_term_get_ctx(__isl_keep isl_term *term); - -void isl_term_free(__isl_take isl_term *term); - -unsigned isl_term_dim(__isl_keep isl_term *term, enum isl_dim_type type); -void isl_term_get_num(__isl_keep isl_term *term, isl_int *n); -void isl_term_get_den(__isl_keep isl_term *term, isl_int *d); -int isl_term_get_exp(__isl_keep isl_term *term, - enum isl_dim_type type, unsigned pos); -__isl_give isl_div *isl_term_get_div(__isl_keep isl_term *term, unsigned pos); - -int isl_qpolynomial_foreach_term(__isl_keep isl_qpolynomial *qp, - int (*fn)(__isl_take isl_term *term, void *user), void *user); - -__isl_give isl_qpolynomial *isl_qpolynomial_eval( - __isl_take isl_qpolynomial *qp, __isl_take isl_point *pnt); - -__isl_give isl_qpolynomial *isl_qpolynomial_gist( - __isl_take isl_qpolynomial *qp, __isl_take isl_set *context); - -__isl_give isl_qpolynomial *isl_qpolynomial_from_constraint( - __isl_take isl_constraint *c, enum isl_dim_type type, unsigned pos); -__isl_give isl_qpolynomial *isl_qpolynomial_from_term(__isl_take isl_term *term); -__isl_give isl_qpolynomial *isl_qpolynomial_from_aff(__isl_take isl_aff *aff); -__isl_give isl_basic_map *isl_basic_map_from_qpolynomial( - __isl_take isl_qpolynomial *qp); - -__isl_give isl_printer *isl_printer_print_qpolynomial( - __isl_take isl_printer *p, __isl_keep isl_qpolynomial *qp); -void isl_qpolynomial_print(__isl_keep isl_qpolynomial *qp, FILE *out, - unsigned output_format); -void isl_qpolynomial_dump(__isl_keep isl_qpolynomial *qp); - -struct isl_pw_qpolynomial; -typedef struct isl_pw_qpolynomial isl_pw_qpolynomial; - -isl_ctx *isl_pw_qpolynomial_get_ctx(__isl_keep isl_pw_qpolynomial *pwqp); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_zero(__isl_take isl_dim *dim); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_alloc(__isl_take isl_set *set, - __isl_take isl_qpolynomial *qp); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_copy( - __isl_keep isl_pw_qpolynomial *pwqp); -void *isl_pw_qpolynomial_free(__isl_take isl_pw_qpolynomial *pwqp); - -int isl_pw_qpolynomial_is_zero(__isl_keep isl_pw_qpolynomial *pwqp); - -__isl_give isl_dim *isl_pw_qpolynomial_get_dim( - __isl_keep isl_pw_qpolynomial *pwqp); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_reset_dim( - __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_dim *dim); -unsigned isl_pw_qpolynomial_dim(__isl_keep isl_pw_qpolynomial *pwqp, - enum isl_dim_type type); -int isl_pw_qpolynomial_involves_dims(__isl_keep isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned first, unsigned n); -int isl_pw_qpolynomial_has_equal_dim(__isl_keep isl_pw_qpolynomial *pwqp1, - __isl_keep isl_pw_qpolynomial *pwqp2); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_set_dim_name( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned pos, const char *s); - -__isl_give isl_set *isl_pw_qpolynomial_domain(__isl_take isl_pw_qpolynomial *pwqp); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_intersect_domain( - __isl_take isl_pw_qpolynomial *pwpq, __isl_take isl_set *set); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_drop_dims( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_split_dims( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_sub( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add_disjoint( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_neg( - __isl_take isl_pw_qpolynomial *pwqp); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_mul( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_mul_isl_int( - __isl_take isl_pw_qpolynomial *pwqp, isl_int v); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_insert_dims( - __isl_take isl_pw_qpolynomial *pwqp, enum isl_dim_type type, - unsigned first, unsigned n); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add_dims( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned n); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_move_dims( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_fix_dim( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned n, isl_int v); - -__isl_give isl_qpolynomial *isl_pw_qpolynomial_eval( - __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_point *pnt); - -__isl_give isl_qpolynomial *isl_pw_qpolynomial_max( - __isl_take isl_pw_qpolynomial *pwqp); -__isl_give isl_qpolynomial *isl_pw_qpolynomial_min( - __isl_take isl_pw_qpolynomial *pwqp); - -int isl_pw_qpolynomial_foreach_piece(__isl_keep isl_pw_qpolynomial *pwqp, - int (*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial *qp, - void *user), void *user); -int isl_pw_qpolynomial_foreach_lifted_piece(__isl_keep isl_pw_qpolynomial *pwqp, - int (*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial *qp, - void *user), void *user); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_read_from_str(isl_ctx *ctx, - const char *str); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_read_from_file(isl_ctx *ctx, - FILE *input); -__isl_give isl_printer *isl_printer_print_pw_qpolynomial( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial *pwqp); -void isl_pw_qpolynomial_print(__isl_keep isl_pw_qpolynomial *pwqp, FILE *out, - unsigned output_format); -void isl_pw_qpolynomial_dump(__isl_keep isl_pw_qpolynomial *pwqp); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_coalesce( - __isl_take isl_pw_qpolynomial *pwqp); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_gist( - __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_set *context); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_split_periods( - __isl_take isl_pw_qpolynomial *pwqp, int max_periods); - -__isl_give isl_pw_qpolynomial *isl_basic_set_multiplicative_call( - __isl_take isl_basic_set *bset, - __isl_give isl_pw_qpolynomial *(*fn)(__isl_take isl_basic_set *bset)); - -enum isl_fold { - isl_fold_min, - isl_fold_max, - isl_fold_list -}; - -struct isl_qpolynomial_fold; -typedef struct isl_qpolynomial_fold isl_qpolynomial_fold; - -isl_ctx *isl_qpolynomial_fold_get_ctx(__isl_keep isl_qpolynomial_fold *fold); -enum isl_fold isl_qpolynomial_fold_get_type(__isl_keep isl_qpolynomial_fold *fold); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_empty(enum isl_fold type, - __isl_take isl_dim *dim); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_alloc( - enum isl_fold type, __isl_take isl_qpolynomial *qp); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_copy( - __isl_keep isl_qpolynomial_fold *fold); -void isl_qpolynomial_fold_free(__isl_take isl_qpolynomial_fold *fold); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_reset_dim( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_dim *dim); - -int isl_qpolynomial_fold_is_empty(__isl_keep isl_qpolynomial_fold *fold); -int isl_qpolynomial_fold_plain_is_equal(__isl_keep isl_qpolynomial_fold *fold1, - __isl_keep isl_qpolynomial_fold *fold2); - -__isl_give isl_dim *isl_qpolynomial_fold_get_dim( - __isl_keep isl_qpolynomial_fold *fold); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_fold( - __isl_take isl_qpolynomial_fold *fold1, - __isl_take isl_qpolynomial_fold *fold2); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_mul_isl_int( - __isl_take isl_qpolynomial_fold *fold, isl_int v); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_scale( - __isl_take isl_qpolynomial_fold *fold, isl_int v); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_move_dims( - __isl_take isl_qpolynomial_fold *fold, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_substitute( - __isl_take isl_qpolynomial_fold *fold, - enum isl_dim_type type, unsigned first, unsigned n, - __isl_keep isl_qpolynomial **subs); - -__isl_give isl_qpolynomial *isl_qpolynomial_fold_eval( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_point *pnt); - -int isl_qpolynomial_fold_foreach_qpolynomial( - __isl_keep isl_qpolynomial_fold *fold, - int (*fn)(__isl_take isl_qpolynomial *qp, void *user), void *user); - -__isl_give isl_printer *isl_printer_print_qpolynomial_fold( - __isl_take isl_printer *p, __isl_keep isl_qpolynomial_fold *fold); -void isl_qpolynomial_fold_print(__isl_keep isl_qpolynomial_fold *fold, FILE *out, - unsigned output_format); -void isl_qpolynomial_fold_dump(__isl_keep isl_qpolynomial_fold *fold); - -struct isl_pw_qpolynomial_fold; -typedef struct isl_pw_qpolynomial_fold isl_pw_qpolynomial_fold; - -isl_ctx *isl_pw_qpolynomial_fold_get_ctx(__isl_keep isl_pw_qpolynomial_fold *pwf); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_from_pw_qpolynomial( - enum isl_fold type, __isl_take isl_pw_qpolynomial *pwqp); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_alloc( - enum isl_fold type, - __isl_take isl_set *set, __isl_take isl_qpolynomial_fold *fold); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_copy( - __isl_keep isl_pw_qpolynomial_fold *pwf); -void *isl_pw_qpolynomial_fold_free(__isl_take isl_pw_qpolynomial_fold *pwf); - -int isl_pw_qpolynomial_fold_is_zero(__isl_keep isl_pw_qpolynomial_fold *pwf); - -__isl_give isl_dim *isl_pw_qpolynomial_fold_get_dim( - __isl_keep isl_pw_qpolynomial_fold *pwf); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_reset_dim( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_dim *dim); -unsigned isl_pw_qpolynomial_fold_dim(__isl_keep isl_pw_qpolynomial_fold *pwf, - enum isl_dim_type type); -int isl_pw_qpolynomial_fold_has_equal_dim( - __isl_keep isl_pw_qpolynomial_fold *pwf1, - __isl_keep isl_pw_qpolynomial_fold *pwf2); - -size_t isl_pw_qpolynomial_fold_size(__isl_keep isl_pw_qpolynomial_fold *pwf); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_zero( - __isl_take isl_dim *dim, enum isl_fold type); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_set_dim_name( - __isl_take isl_pw_qpolynomial_fold *pwf, - enum isl_dim_type type, unsigned pos, const char *s); - -__isl_give isl_set *isl_pw_qpolynomial_fold_domain( - __isl_take isl_pw_qpolynomial_fold *pwf); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_intersect_domain( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_set *set); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_add( - __isl_take isl_pw_qpolynomial_fold *pwf1, - __isl_take isl_pw_qpolynomial_fold *pwf2); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_fold( - __isl_take isl_pw_qpolynomial_fold *pwf1, - __isl_take isl_pw_qpolynomial_fold *pwf2); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_add_disjoint( - __isl_take isl_pw_qpolynomial_fold *pwf1, - __isl_take isl_pw_qpolynomial_fold *pwf2); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_mul_isl_int( - __isl_take isl_pw_qpolynomial_fold *pwf, isl_int v); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_drop_dims( - __isl_take isl_pw_qpolynomial_fold *pwf, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_move_dims( - __isl_take isl_pw_qpolynomial_fold *pwf, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_fix_dim( - __isl_take isl_pw_qpolynomial_fold *pwf, - enum isl_dim_type type, unsigned n, isl_int v); - -__isl_give isl_qpolynomial *isl_pw_qpolynomial_fold_eval( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_point *pnt); - -int isl_pw_qpolynomial_fold_foreach_piece( - __isl_keep isl_pw_qpolynomial_fold *pwf, - int (*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial_fold *fold, - void *user), void *user); -int isl_pw_qpolynomial_fold_foreach_lifted_piece( - __isl_keep isl_pw_qpolynomial_fold *pwf, - int (*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial_fold *fold, - void *user), void *user); - -__isl_give isl_printer *isl_printer_print_pw_qpolynomial_fold( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial_fold *pwf); -void isl_pw_qpolynomial_fold_print(__isl_keep isl_pw_qpolynomial_fold *pwf, - FILE *out, unsigned output_format); -void isl_pw_qpolynomial_fold_dump(__isl_keep isl_pw_qpolynomial_fold *pwf); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_coalesce( - __isl_take isl_pw_qpolynomial_fold *pwf); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_gist( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_set *context); - -__isl_give isl_qpolynomial *isl_pw_qpolynomial_fold_max( - __isl_take isl_pw_qpolynomial_fold *pwf); -__isl_give isl_qpolynomial *isl_pw_qpolynomial_fold_min( - __isl_take isl_pw_qpolynomial_fold *pwf); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_bound( - __isl_take isl_pw_qpolynomial *pwqp, enum isl_fold type, int *tight); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_bound( - __isl_take isl_pw_qpolynomial_fold *pwf, int *tight); -__isl_give isl_pw_qpolynomial_fold *isl_set_apply_pw_qpolynomial_fold( - __isl_take isl_set *set, __isl_take isl_pw_qpolynomial_fold *pwf, - int *tight); -__isl_give isl_pw_qpolynomial_fold *isl_map_apply_pw_qpolynomial_fold( - __isl_take isl_map *map, __isl_take isl_pw_qpolynomial_fold *pwf, - int *tight); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_to_polynomial( - __isl_take isl_pw_qpolynomial *pwqp, int sign); - -struct isl_union_pw_qpolynomial; -typedef struct isl_union_pw_qpolynomial isl_union_pw_qpolynomial; - -isl_ctx *isl_union_pw_qpolynomial_get_ctx( - __isl_keep isl_union_pw_qpolynomial *upwqp); - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_from_pw_qpolynomial(__isl_take isl_pw_qpolynomial *pwqp); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_zero( - __isl_take isl_dim *dim); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_add_pw_qpolynomial( - __isl_take isl_union_pw_qpolynomial *upwqp, - __isl_take isl_pw_qpolynomial *pwqp); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_copy( - __isl_keep isl_union_pw_qpolynomial *upwqp); -void isl_union_pw_qpolynomial_free(__isl_take isl_union_pw_qpolynomial *upwqp); - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_add( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_sub( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_mul( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_mul_isl_int( - __isl_take isl_union_pw_qpolynomial *upwqp, isl_int v); - -__isl_give isl_union_set *isl_union_pw_qpolynomial_domain( - __isl_take isl_union_pw_qpolynomial *upwqp); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_intersect_domain( - __isl_take isl_union_pw_qpolynomial *upwpq, - __isl_take isl_union_set *uset); - -__isl_give isl_dim *isl_union_pw_qpolynomial_get_dim( - __isl_keep isl_union_pw_qpolynomial *upwqp); - -__isl_give isl_qpolynomial *isl_union_pw_qpolynomial_eval( - __isl_take isl_union_pw_qpolynomial *upwqp, __isl_take isl_point *pnt); - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_coalesce( - __isl_take isl_union_pw_qpolynomial *upwqp); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_gist( - __isl_take isl_union_pw_qpolynomial *upwqp, - __isl_take isl_union_set *context); - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_align_params( - __isl_take isl_union_pw_qpolynomial *upwqp, - __isl_take isl_dim *model); - -int isl_union_pw_qpolynomial_foreach_pw_qpolynomial( - __isl_keep isl_union_pw_qpolynomial *upwqp, - int (*fn)(__isl_take isl_pw_qpolynomial *pwqp, void *user), void *user); -__isl_give isl_pw_qpolynomial *isl_union_pw_qpolynomial_extract_pw_qpolynomial( - __isl_keep isl_union_pw_qpolynomial *upwqp, __isl_take isl_dim *dim); - -__isl_give isl_printer *isl_printer_print_union_pw_qpolynomial( - __isl_take isl_printer *p, __isl_keep isl_union_pw_qpolynomial *upwqp); - -struct isl_union_pw_qpolynomial_fold; -typedef struct isl_union_pw_qpolynomial_fold isl_union_pw_qpolynomial_fold; - -isl_ctx *isl_union_pw_qpolynomial_fold_get_ctx( - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_from_pw_qpolynomial_fold(__isl_take isl_pw_qpolynomial_fold *pwf); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_zero( - __isl_take isl_dim *dim, enum isl_fold type); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold( - __isl_take isl_union_pw_qpolynomial_fold *upwqp, - __isl_take isl_pw_qpolynomial_fold *pwqp); -void isl_union_pw_qpolynomial_fold_free( - __isl_take isl_union_pw_qpolynomial_fold *upwf); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_copy( - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_fold( - __isl_take isl_union_pw_qpolynomial_fold *upwf1, - __isl_take isl_union_pw_qpolynomial_fold *upwf2); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_add_union_pw_qpolynomial( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_union_pw_qpolynomial *upwqp); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_mul_isl_int( - __isl_take isl_union_pw_qpolynomial_fold *upwf, isl_int v); - -__isl_give isl_union_set *isl_union_pw_qpolynomial_fold_domain( - __isl_take isl_union_pw_qpolynomial_fold *upwf); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_intersect_domain( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_union_set *uset); - -enum isl_fold isl_union_pw_qpolynomial_fold_get_type( - __isl_keep isl_union_pw_qpolynomial_fold *upwf); -__isl_give isl_dim *isl_union_pw_qpolynomial_fold_get_dim( - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - -__isl_give isl_qpolynomial *isl_union_pw_qpolynomial_fold_eval( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_point *pnt); - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_coalesce( - __isl_take isl_union_pw_qpolynomial_fold *upwf); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_gist( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_union_set *context); - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_align_params( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_dim *model); - -int isl_union_pw_qpolynomial_fold_foreach_pw_qpolynomial_fold( - __isl_keep isl_union_pw_qpolynomial_fold *upwf, - int (*fn)(__isl_take isl_pw_qpolynomial_fold *pwf, - void *user), void *user); -__isl_give isl_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_extract_pw_qpolynomial_fold( - __isl_keep isl_union_pw_qpolynomial_fold *upwf, __isl_take isl_dim *dim); - -__isl_give isl_printer *isl_printer_print_union_pw_qpolynomial_fold( - __isl_take isl_printer *p, - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_bound( - __isl_take isl_union_pw_qpolynomial *upwqp, - enum isl_fold type, int *tight); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_set_apply_union_pw_qpolynomial_fold( - __isl_take isl_union_set *uset, - __isl_take isl_union_pw_qpolynomial_fold *upwf, int *tight); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_map_apply_union_pw_qpolynomial_fold( - __isl_take isl_union_map *umap, - __isl_take isl_union_pw_qpolynomial_fold *upwf, int *tight); - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_to_polynomial( - __isl_take isl_union_pw_qpolynomial *upwqp, int sign); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/printer.h b/cloog-0.16.3/isl/include/isl/printer.h deleted file mode 100644 index da2f043..0000000 --- a/cloog-0.16.3/isl/include/isl/printer.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef ISL_PRINTER_H -#define ISL_PRINTER_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_printer; -typedef struct isl_printer isl_printer; - -__isl_give isl_printer *isl_printer_to_file(isl_ctx *ctx, FILE *file); -__isl_give isl_printer *isl_printer_to_str(isl_ctx *ctx); -void isl_printer_free(__isl_take isl_printer *printer); - -isl_ctx *isl_printer_get_ctx(__isl_keep isl_printer *printer); - -__isl_give char *isl_printer_get_str(__isl_keep isl_printer *printer); - -__isl_give isl_printer *isl_printer_set_indent(__isl_take isl_printer *p, - int indent); -__isl_give isl_printer *isl_printer_indent(__isl_take isl_printer *p, - int indent); - -#define ISL_FORMAT_ISL 0 -#define ISL_FORMAT_POLYLIB 1 -#define ISL_FORMAT_POLYLIB_CONSTRAINTS 2 -#define ISL_FORMAT_OMEGA 3 -#define ISL_FORMAT_C 4 -#define ISL_FORMAT_LATEX 5 -#define ISL_FORMAT_EXT_POLYLIB 6 -__isl_give isl_printer *isl_printer_set_output_format(__isl_take isl_printer *p, - int output_format); - -__isl_give isl_printer *isl_printer_set_prefix(__isl_take isl_printer *p, - const char *prefix); -__isl_give isl_printer *isl_printer_set_suffix(__isl_take isl_printer *p, - const char *suffix); -__isl_give isl_printer *isl_printer_set_isl_int_width(__isl_take isl_printer *p, - int width); - -__isl_give isl_printer *isl_printer_start_line(__isl_take isl_printer *p); -__isl_give isl_printer *isl_printer_end_line(__isl_take isl_printer *p); -__isl_give isl_printer *isl_printer_print_int(__isl_take isl_printer *p, int i); -__isl_give isl_printer *isl_printer_print_isl_int(__isl_take isl_printer *p, - isl_int i); -__isl_give isl_printer *isl_printer_print_str(__isl_take isl_printer *p, - const char *s); - -__isl_give isl_printer *isl_printer_flush(__isl_take isl_printer *p); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/schedule.h b/cloog-0.16.3/isl/include/isl/schedule.h deleted file mode 100644 index 20cb40b..0000000 --- a/cloog-0.16.3/isl/include/isl/schedule.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef ISL_SCHEDULE_H -#define ISL_SCHEDULE_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_schedule; -typedef struct isl_schedule isl_schedule; - -__isl_give isl_schedule *isl_union_set_compute_schedule( - __isl_take isl_union_set *domain, - __isl_take isl_union_map *validity, - __isl_take isl_union_map *proximity); -void *isl_schedule_free(__isl_take isl_schedule *sched); -__isl_give isl_union_map *isl_schedule_get_map(__isl_keep isl_schedule *sched); - -isl_ctx *isl_schedule_get_ctx(__isl_keep isl_schedule *sched); - -__isl_give isl_band_list *isl_schedule_get_band_forest( - __isl_keep isl_schedule *schedule); - -__isl_give isl_printer *isl_printer_print_schedule(__isl_take isl_printer *p, - __isl_keep isl_schedule *schedule); -void isl_schedule_dump(__isl_keep isl_schedule *schedule); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/seq.h b/cloog-0.16.3/isl/include/isl/seq.h deleted file mode 100644 index eda8818..0000000 --- a/cloog-0.16.3/isl/include/isl/seq.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_SEQ_H -#define ISL_SEQ_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Some common operations on sequences of isl_int's */ - -void isl_seq_clr(isl_int *p, unsigned len); -void isl_seq_set(isl_int *p, isl_int v, unsigned len); -void isl_seq_neg(isl_int *dat, isl_int *src, unsigned len); -void isl_seq_cpy(isl_int *dst, isl_int *src, unsigned len); -void isl_seq_addmul(isl_int *dst, isl_int f, isl_int *src, unsigned len); -void isl_seq_submul(isl_int *dst, isl_int f, isl_int *src, unsigned len); -void isl_seq_swp_or_cpy(isl_int *dst, isl_int *src, unsigned len); -void isl_seq_scale(isl_int *dst, isl_int *src, isl_int f, unsigned len); -void isl_seq_scale_down(isl_int *dst, isl_int *src, isl_int f, unsigned len); -void isl_seq_cdiv_q(isl_int *dst, isl_int *src, isl_int m, unsigned len); -void isl_seq_fdiv_q(isl_int *dst, isl_int *src, isl_int m, unsigned len); -void isl_seq_fdiv_r(isl_int *dst, isl_int *src, isl_int m, unsigned len); -void isl_seq_combine(isl_int *dst, isl_int m1, isl_int *src1, - isl_int m2, isl_int *src2, unsigned len); -void isl_seq_elim(isl_int *dst, isl_int *src, unsigned pos, unsigned len, - isl_int *m); -void isl_seq_gcd(isl_int *p, unsigned len, isl_int *gcd); -void isl_seq_lcm(isl_int *p, unsigned len, isl_int *lcm); -void isl_seq_normalize(struct isl_ctx *ctx, isl_int *p, unsigned len); -void isl_seq_inner_product(isl_int *p1, isl_int *p2, unsigned len, - isl_int *prod); -int isl_seq_first_non_zero(isl_int *p, unsigned len); -int isl_seq_last_non_zero(isl_int *p, unsigned len); -int isl_seq_abs_min_non_zero(isl_int *p, unsigned len); -int isl_seq_eq(isl_int *p1, isl_int *p2, unsigned len); -int isl_seq_cmp(isl_int *p1, isl_int *p2, unsigned len); -int isl_seq_is_neg(isl_int *p1, isl_int *p2, unsigned len); - -uint32_t isl_seq_get_hash(isl_int *p, unsigned len); -uint32_t isl_seq_get_hash_bits(isl_int *p, unsigned len, unsigned bits); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/set.h b/cloog-0.16.3/isl/include/isl/set.h deleted file mode 100644 index 026adc3..0000000 --- a/cloog-0.16.3/isl/include/isl/set.h +++ /dev/null @@ -1,401 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_SET_H -#define ISL_SET_H - -#include -#include -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -unsigned isl_basic_set_n_dim(const struct isl_basic_set *bset); -unsigned isl_basic_set_n_param(const struct isl_basic_set *bset); -unsigned isl_basic_set_total_dim(const struct isl_basic_set *bset); -unsigned isl_basic_set_dim(const struct isl_basic_set *bset, - enum isl_dim_type type); - -unsigned isl_set_n_dim(const struct isl_set *set); -unsigned isl_set_n_param(const struct isl_set *set); -unsigned isl_set_dim(const struct isl_set *set, enum isl_dim_type type); - -isl_ctx *isl_basic_set_get_ctx(__isl_keep isl_basic_set *bset); -isl_ctx *isl_set_get_ctx(__isl_keep isl_set *set); -__isl_give isl_dim *isl_basic_set_get_dim(__isl_keep isl_basic_set *bset); -__isl_give isl_dim *isl_set_get_dim(__isl_keep isl_set *set); -__isl_give isl_set *isl_set_reset_dim(__isl_take isl_set *set, - __isl_take isl_dim *dim); - -struct isl_div *isl_basic_set_div(struct isl_basic_set *bset, int pos); - -__isl_give isl_local_space *isl_basic_set_get_local_space( - __isl_keep isl_basic_set *bset); - -const char *isl_basic_set_get_tuple_name(__isl_keep isl_basic_set *bset); -const char *isl_set_get_tuple_name(__isl_keep isl_set *set); -__isl_give isl_basic_set *isl_basic_set_set_tuple_name( - __isl_take isl_basic_set *set, const char *s); -__isl_give isl_set *isl_set_set_tuple_name(__isl_take isl_set *set, - const char *s); -const char *isl_basic_set_get_dim_name(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned pos); -__isl_give isl_basic_set *isl_basic_set_set_dim_name( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, const char *s); -const char *isl_set_get_dim_name(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos); -__isl_give isl_set *isl_set_set_dim_name(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, const char *s); - -int isl_basic_set_is_rational(__isl_keep isl_basic_set *bset); - -struct isl_basic_set *isl_basic_set_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned dim, unsigned extra, - unsigned n_eq, unsigned n_ineq); -struct isl_basic_set *isl_basic_set_extend(struct isl_basic_set *base, - unsigned nparam, unsigned dim, unsigned extra, - unsigned n_eq, unsigned n_ineq); -struct isl_basic_set *isl_basic_set_extend_constraints( - struct isl_basic_set *base, unsigned n_eq, unsigned n_ineq); -struct isl_basic_set *isl_basic_set_finalize(struct isl_basic_set *bset); -void isl_basic_set_free(__isl_take isl_basic_set *bset); -__isl_give isl_basic_set *isl_basic_set_copy(__isl_keep isl_basic_set *bset); -struct isl_basic_set *isl_basic_set_dup(struct isl_basic_set *bset); -__isl_give isl_basic_set *isl_basic_set_empty(__isl_take isl_dim *dim); -struct isl_basic_set *isl_basic_set_empty_like(struct isl_basic_set *bset); -__isl_give isl_basic_set *isl_basic_set_universe(__isl_take isl_dim *dim); -__isl_give isl_basic_set *isl_basic_set_nat_universe(__isl_take isl_dim *dim); -struct isl_basic_set *isl_basic_set_universe_like(struct isl_basic_set *bset); -__isl_give isl_basic_set *isl_basic_set_universe_like_set( - __isl_keep isl_set *model); -struct isl_basic_set *isl_basic_set_interval(struct isl_ctx *ctx, - isl_int min, isl_int max); -struct isl_basic_set *isl_basic_set_positive_orthant(struct isl_dim *dims); -void isl_basic_set_print_internal(__isl_keep isl_basic_set *bset, - FILE *out, int indent); -__isl_give isl_basic_set *isl_basic_set_intersect( - __isl_take isl_basic_set *bset1, - __isl_take isl_basic_set *bset2); -__isl_give isl_basic_set *isl_basic_set_apply( - __isl_take isl_basic_set *bset, - __isl_take isl_basic_map *bmap); -__isl_give isl_basic_set *isl_basic_set_affine_hull( - __isl_take isl_basic_set *bset); -__isl_give isl_basic_set *isl_basic_set_remove_dims( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n); -struct isl_basic_set *isl_basic_set_simplify(struct isl_basic_set *bset); -__isl_give isl_basic_set *isl_basic_set_detect_equalities( - __isl_take isl_basic_set *bset); -__isl_give isl_basic_set *isl_basic_set_remove_redundancies( - __isl_take isl_basic_set *bset); -__isl_give isl_set *isl_set_remove_redundancies(__isl_take isl_set *set); -__isl_give isl_basic_set *isl_basic_set_list_product( - __isl_take struct isl_basic_set_list *list); - -__isl_give isl_basic_set *isl_basic_set_read_from_file(isl_ctx *ctx, - FILE *input, int nparam); -__isl_give isl_basic_set *isl_basic_set_read_from_str(isl_ctx *ctx, - const char *str, int nparam); -__isl_give isl_set *isl_set_read_from_file(isl_ctx *ctx, - FILE *input, int nparam); -__isl_give isl_set *isl_set_read_from_str(isl_ctx *ctx, - const char *str, int nparam); -void isl_basic_set_dump(__isl_keep isl_basic_set *bset); -void isl_set_dump(__isl_keep isl_set *set); -__isl_give isl_printer *isl_printer_print_basic_set( - __isl_take isl_printer *printer, __isl_keep isl_basic_set *bset); -__isl_give isl_printer *isl_printer_print_set(__isl_take isl_printer *printer, - __isl_keep isl_set *map); -void isl_basic_set_print(__isl_keep isl_basic_set *bset, FILE *out, int indent, - const char *prefix, const char *suffix, unsigned output_format); -void isl_set_print(__isl_keep struct isl_set *set, FILE *out, int indent, - unsigned output_format); -__isl_give isl_basic_set *isl_basic_set_fix(__isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, isl_int value); -__isl_give isl_basic_set *isl_basic_set_fix_si(__isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, int value); -__isl_give isl_set *isl_set_fix_si(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, int value); -__isl_give isl_set *isl_set_lower_bound_si(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, int value); - -struct isl_basic_set *isl_basic_set_from_underlying_set( - struct isl_basic_set *bset, struct isl_basic_set *like); -struct isl_set *isl_set_from_underlying_set( - struct isl_set *set, struct isl_basic_set *like); -struct isl_set *isl_set_to_underlying_set(struct isl_set *set); - -int isl_basic_set_is_equal( - struct isl_basic_set *bset1, struct isl_basic_set *bset2); - -__isl_give isl_set *isl_basic_set_partial_lexmin( - __isl_take isl_basic_set *bset, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); -__isl_give isl_set *isl_basic_set_partial_lexmax( - __isl_take isl_basic_set *bset, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); -__isl_give isl_set *isl_set_partial_lexmin( - __isl_take isl_set *set, __isl_take isl_set *dom, - __isl_give isl_set **empty); -__isl_give isl_set *isl_set_partial_lexmax( - __isl_take isl_set *set, __isl_take isl_set *dom, - __isl_give isl_set **empty); -__isl_give isl_set *isl_basic_set_lexmin(__isl_take isl_basic_set *bset); -__isl_give isl_set *isl_basic_set_lexmax(__isl_take isl_basic_set *bset); -__isl_give isl_set *isl_set_lexmin(__isl_take isl_set *set); -__isl_give isl_set *isl_set_lexmax(__isl_take isl_set *set); -int isl_basic_set_foreach_lexmax(__isl_keep isl_basic_set *bset, - int (*fn)(__isl_take isl_basic_set *dom, __isl_take isl_aff_list *list, - void *user), - void *user); - -__isl_give isl_set *isl_basic_set_union( - __isl_take isl_basic_set *bset1, - __isl_take isl_basic_set *bset2); - -int isl_basic_set_compare_at(struct isl_basic_set *bset1, - struct isl_basic_set *bset2, int pos); -int isl_set_follows_at(__isl_keep isl_set *set1, - __isl_keep isl_set *set2, int pos); - -int isl_basic_set_dims_get_sign(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, unsigned n, int *signs); - -int isl_basic_set_is_universe(__isl_keep isl_basic_set *bset); -int isl_basic_set_plain_is_empty(__isl_keep isl_basic_set *bset); -int isl_basic_set_fast_is_empty(__isl_keep isl_basic_set *bset); -int isl_basic_set_is_empty(__isl_keep isl_basic_set *bset); -int isl_basic_set_is_bounded(__isl_keep isl_basic_set *bset); - -struct isl_set *isl_set_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned dim, int n, unsigned flags); -struct isl_set *isl_set_extend(struct isl_set *base, - unsigned nparam, unsigned dim); -__isl_give isl_set *isl_set_empty(__isl_take isl_dim *dim); -struct isl_set *isl_set_empty_like(struct isl_set *set); -__isl_give isl_set *isl_set_universe(__isl_take isl_dim *dim); -__isl_give isl_set *isl_set_nat_universe(__isl_take isl_dim *dim); -__isl_give isl_set *isl_set_universe_like(__isl_keep isl_set *model); -__isl_give isl_set *isl_set_add_basic_set(__isl_take isl_set *set, - __isl_take isl_basic_set *bset); -struct isl_set *isl_set_finalize(struct isl_set *set); -__isl_give isl_set *isl_set_copy(__isl_keep isl_set *set); -void isl_set_free(__isl_take isl_set *set); -struct isl_set *isl_set_dup(struct isl_set *set); -__isl_give isl_set *isl_set_from_basic_set(__isl_take isl_basic_set *bset); -__isl_give isl_basic_set *isl_set_sample(__isl_take isl_set *set); -__isl_give isl_point *isl_basic_set_sample_point(__isl_take isl_basic_set *bset); -__isl_give isl_point *isl_set_sample_point(__isl_take isl_set *set); -__isl_give isl_set *isl_set_detect_equalities(__isl_take isl_set *set); -__isl_give isl_basic_set *isl_set_affine_hull(__isl_take isl_set *set); -__isl_give isl_basic_set *isl_set_convex_hull(__isl_take isl_set *set); -__isl_give isl_basic_set *isl_set_polyhedral_hull(__isl_take isl_set *set); -__isl_give isl_basic_set *isl_set_simple_hull(__isl_take isl_set *set); -struct isl_basic_set *isl_set_bounded_simple_hull(struct isl_set *set); -__isl_give isl_set *isl_set_recession_cone(__isl_take isl_set *set); - -struct isl_set *isl_set_union_disjoint( - struct isl_set *set1, struct isl_set *set2); -__isl_give isl_set *isl_set_union( - __isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_set *isl_set_product(__isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_basic_set *isl_basic_set_flat_product( - __isl_take isl_basic_set *bset1, __isl_take isl_basic_set *bset2); -__isl_give isl_set *isl_set_flat_product(__isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_set *isl_set_intersect( - __isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_set *isl_set_intersect_params(__isl_take isl_set *set, - __isl_take isl_set *params); -__isl_give isl_set *isl_set_subtract( - __isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_set *isl_set_complement(__isl_take isl_set *set); -__isl_give isl_set *isl_set_apply( - __isl_take isl_set *set, - __isl_take isl_map *map); -__isl_give isl_set *isl_set_fix(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, isl_int value); -struct isl_set *isl_set_fix_dim_si(struct isl_set *set, - unsigned dim, int value); -struct isl_set *isl_set_lower_bound_dim(struct isl_set *set, - unsigned dim, isl_int value); -__isl_give isl_set *isl_set_insert(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, unsigned n); -__isl_give isl_basic_set *isl_basic_set_add(__isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned n); -__isl_give isl_set *isl_set_add_dims(__isl_take isl_set *set, - enum isl_dim_type type, unsigned n); -__isl_give isl_basic_set *isl_basic_set_move_dims(__isl_take isl_basic_set *bset, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); -__isl_give isl_set *isl_set_move_dims(__isl_take isl_set *set, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); -__isl_give isl_basic_set *isl_basic_set_project_out( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_set *isl_set_project_out(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_basic_set *isl_basic_set_remove_divs( - __isl_take isl_basic_set *bset); -__isl_give isl_set *isl_set_eliminate(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); -struct isl_set *isl_set_eliminate_dims(struct isl_set *set, - unsigned first, unsigned n); -__isl_give isl_set *isl_set_remove_dims(__isl_take isl_set *bset, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_set *isl_set_remove_divs_involving_dims(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_set *isl_set_remove_unknown_divs(__isl_take isl_set *set); -__isl_give isl_set *isl_set_remove_divs(__isl_take isl_set *set); -__isl_give isl_set *isl_set_split_dims(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); - -int isl_basic_set_involves_dims(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n); -int isl_set_involves_dims(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); - -void isl_set_print_internal(__isl_keep isl_set *set, FILE *out, int indent); -int isl_set_plain_is_empty(__isl_keep isl_set *set); -int isl_set_fast_is_empty(__isl_keep isl_set *set); -int isl_set_plain_is_universe(__isl_keep isl_set *set); -int isl_set_fast_is_universe(__isl_keep isl_set *set); -int isl_set_is_empty(__isl_keep isl_set *set); -int isl_set_is_bounded(__isl_keep isl_set *set); -int isl_set_is_subset(__isl_keep isl_set *set1, __isl_keep isl_set *set2); -int isl_set_is_strict_subset(__isl_keep isl_set *set1, __isl_keep isl_set *set2); -int isl_set_is_equal(__isl_keep isl_set *set1, __isl_keep isl_set *set2); -int isl_set_is_singleton(__isl_keep isl_set *set); -int isl_set_is_box(__isl_keep isl_set *set); -int isl_set_has_equal_dim(__isl_keep isl_set *set1, __isl_keep isl_set *set2); - -__isl_give isl_set *isl_set_sum(__isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_basic_set *isl_basic_set_neg(__isl_take isl_basic_set *bset); -__isl_give isl_set *isl_set_neg(__isl_take isl_set *set); - -__isl_give isl_set *isl_set_make_disjoint(__isl_take isl_set *set); -struct isl_set *isl_basic_set_compute_divs(struct isl_basic_set *bset); -__isl_give isl_set *isl_set_compute_divs(__isl_take isl_set *set); -__isl_give isl_set *isl_set_align_divs(__isl_take isl_set *set); - -struct isl_basic_set *isl_set_copy_basic_set(struct isl_set *set); -struct isl_set *isl_set_drop_basic_set(struct isl_set *set, - struct isl_basic_set *bset); - -int isl_basic_set_plain_dim_is_fixed(__isl_keep isl_basic_set *bset, - unsigned dim, isl_int *val); - -int isl_set_plain_dim_is_fixed(__isl_keep isl_set *set, - unsigned dim, isl_int *val); -int isl_set_fast_dim_is_fixed(__isl_keep isl_set *set, - unsigned dim, isl_int *val); -int isl_set_plain_dim_has_fixed_lower_bound(__isl_keep isl_set *set, - unsigned dim, isl_int *val); -int isl_set_dim_is_bounded(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos); - -__isl_give isl_basic_set *isl_basic_set_gist(__isl_take isl_basic_set *bset, - __isl_take isl_basic_set *context); -__isl_give isl_set *isl_set_gist_basic_set(__isl_take isl_set *set, - __isl_take isl_basic_set *context); -__isl_give isl_set *isl_set_gist(__isl_take isl_set *set, - __isl_take isl_set *context); -int isl_basic_set_dim_residue_class(struct isl_basic_set *bset, - int pos, isl_int *modulo, isl_int *residue); -int isl_set_dim_residue_class(struct isl_set *set, - int pos, isl_int *modulo, isl_int *residue); - -__isl_give isl_set *isl_set_coalesce(__isl_take isl_set *set); - -int isl_set_plain_is_equal(__isl_keep isl_set *set1, __isl_keep isl_set *set2); -int isl_set_fast_is_equal(__isl_keep isl_set *set1, __isl_keep isl_set *set2); -int isl_set_plain_is_disjoint(__isl_keep isl_set *set1, - __isl_keep isl_set *set2); -int isl_set_fast_is_disjoint(__isl_keep isl_set *set1, - __isl_keep isl_set *set2); - -uint32_t isl_set_get_hash(struct isl_set *set); - -int isl_set_dim_is_unique(struct isl_set *set, unsigned dim); - -int isl_set_n_basic_set(__isl_keep isl_set *set); -int isl_set_foreach_basic_set(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_basic_set *bset, void *user), void *user); - -int isl_set_foreach_point(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_point *pnt, void *user), void *user); -int isl_set_count(__isl_keep isl_set *set, isl_int *count); -int isl_basic_set_count_upto(__isl_keep isl_basic_set *bset, - isl_int max, isl_int *count); -int isl_set_count_upto(__isl_keep isl_set *set, isl_int max, isl_int *count); - -__isl_give isl_basic_set *isl_basic_set_from_point(__isl_take isl_point *pnt); -__isl_give isl_set *isl_set_from_point(__isl_take isl_point *pnt); -__isl_give isl_basic_set *isl_basic_set_box_from_points( - __isl_take isl_point *pnt1, __isl_take isl_point *pnt2); -__isl_give isl_set *isl_set_box_from_points(__isl_take isl_point *pnt1, - __isl_take isl_point *pnt2); - -__isl_give isl_basic_set *isl_basic_set_lift(__isl_take isl_basic_set *bset); -__isl_give isl_set *isl_set_lift(__isl_take isl_set *set); - -__isl_give isl_map *isl_set_lex_le_set(__isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_map *isl_set_lex_lt_set(__isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_map *isl_set_lex_ge_set(__isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_map *isl_set_lex_gt_set(__isl_take isl_set *set1, - __isl_take isl_set *set2); - -int isl_set_size(__isl_keep isl_set *set); - -__isl_give isl_set *isl_set_align_params(__isl_take isl_set *set, - __isl_take isl_dim *model); - -__isl_give isl_mat *isl_basic_set_equalities_matrix( - __isl_keep isl_basic_set *bset, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, enum isl_dim_type c4); -__isl_give isl_mat *isl_basic_set_inequalities_matrix( - __isl_keep isl_basic_set *bset, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, enum isl_dim_type c4); -__isl_give isl_basic_set *isl_basic_set_from_constraint_matrices( - __isl_take isl_dim *dim, - __isl_take isl_mat *eq, __isl_take isl_mat *ineq, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, enum isl_dim_type c4); - -__isl_give isl_mat *isl_basic_set_reduced_basis(__isl_keep isl_basic_set *bset); - -__isl_give isl_basic_set *isl_basic_set_coefficients( - __isl_take isl_basic_set *bset); -__isl_give isl_basic_set *isl_set_coefficients(__isl_take isl_set *set); -__isl_give isl_basic_set *isl_basic_set_solutions( - __isl_take isl_basic_set *bset); -__isl_give isl_basic_set *isl_set_solutions(__isl_take isl_set *set); - -__isl_give isl_pw_aff *isl_set_dim_max(__isl_take isl_set *set, int pos); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/set_type.h b/cloog-0.16.3/isl/include/isl/set_type.h deleted file mode 100644 index ce349e1..0000000 --- a/cloog-0.16.3/isl/include/isl/set_type.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef ISL_SET_TYPE_H -#define ISL_SET_TYPE_H - -#include - -#endif diff --git a/cloog-0.16.3/isl/include/isl/stream.h b/cloog-0.16.3/isl/include/isl/stream.h deleted file mode 100644 index 779c6cf..0000000 --- a/cloog-0.16.3/isl/include/isl/stream.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_STREAM_H -#define ISL_STREAM_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -enum isl_token_type { ISL_TOKEN_ERROR = -1, - ISL_TOKEN_UNKNOWN = 256, ISL_TOKEN_VALUE, - ISL_TOKEN_IDENT, ISL_TOKEN_GE, - ISL_TOKEN_LE, ISL_TOKEN_GT, ISL_TOKEN_LT, - ISL_TOKEN_LEX_GE, ISL_TOKEN_LEX_LE, - ISL_TOKEN_LEX_GT, ISL_TOKEN_LEX_LT, - ISL_TOKEN_TO, ISL_TOKEN_AND, - ISL_TOKEN_OR, ISL_TOKEN_EXISTS, ISL_TOKEN_NOT, - ISL_TOKEN_DEF, ISL_TOKEN_INFTY, ISL_TOKEN_NAN, - ISL_TOKEN_MIN, ISL_TOKEN_MAX, ISL_TOKEN_RAT, - ISL_TOKEN_TRUE, ISL_TOKEN_FALSE, - ISL_TOKEN_CEILD, ISL_TOKEN_FLOORD, - ISL_TOKEN_STRING, - ISL_TOKEN_LAST }; - -struct isl_token { - enum isl_token_type type; - - unsigned int on_new_line : 1; - unsigned is_keyword : 1; - int line; - int col; - - union { - isl_int v; - char *s; - } u; -}; - -void isl_token_free(struct isl_token *tok); - -struct isl_stream { - struct isl_ctx *ctx; - FILE *file; - const char *str; - int line; - int col; - int eof; - - char *buffer; - size_t size; - size_t len; - int c; - int un[5]; - int n_un; - - struct isl_token *tokens[5]; - int n_token; - - struct isl_hash_table *keywords; - enum isl_token_type next_type; -}; - -struct isl_stream* isl_stream_new_file(struct isl_ctx *ctx, FILE *file); -struct isl_stream* isl_stream_new_str(struct isl_ctx *ctx, const char *str); -void isl_stream_free(struct isl_stream *s); - -void isl_stream_error(struct isl_stream *s, struct isl_token *tok, char *msg); - -struct isl_token *isl_stream_next_token(struct isl_stream *s); -struct isl_token *isl_stream_next_token_on_same_line(struct isl_stream *s); -int isl_stream_next_token_is(struct isl_stream *s, int type); -void isl_stream_push_token(struct isl_stream *s, struct isl_token *tok); -void isl_stream_flush_tokens(struct isl_stream *s); -int isl_stream_eat_if_available(struct isl_stream *s, int type); -char *isl_stream_read_ident_if_available(struct isl_stream *s); -int isl_stream_eat(struct isl_stream *s, int type); -int isl_stream_is_empty(struct isl_stream *s); -int isl_stream_skip_line(struct isl_stream *s); - -enum isl_token_type isl_stream_register_keyword(struct isl_stream *s, - const char *name); - -struct isl_obj isl_stream_read_obj(struct isl_stream *s); -__isl_give isl_map *isl_stream_read_map(struct isl_stream *s, int nparam); -__isl_give isl_set *isl_stream_read_set(struct isl_stream *s, int nparam); -__isl_give isl_pw_qpolynomial *isl_stream_read_pw_qpolynomial( - struct isl_stream *s); -__isl_give isl_union_map *isl_stream_read_union_map(struct isl_stream *s); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/union_map.h b/cloog-0.16.3/isl/include/isl/union_map.h deleted file mode 100644 index 5f61d0a..0000000 --- a/cloog-0.16.3/isl/include/isl/union_map.h +++ /dev/null @@ -1,150 +0,0 @@ -#ifndef ISL_UNION_MAP_H -#define ISL_UNION_MAP_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_union_map; -typedef struct isl_union_map isl_union_map; -#ifndef isl_union_set -struct isl_union_set; -typedef struct isl_union_set isl_union_set; -#endif - -__isl_give isl_union_map *isl_union_map_from_map(__isl_take isl_map *map); -__isl_give isl_union_map *isl_union_map_empty(__isl_take isl_dim *dim); -__isl_give isl_union_map *isl_union_map_copy(__isl_keep isl_union_map *umap); -void *isl_union_map_free(__isl_take isl_union_map *umap); - -isl_ctx *isl_union_map_get_ctx(__isl_keep isl_union_map *umap); -__isl_give isl_dim *isl_union_map_get_dim(__isl_keep isl_union_map *umap); - -__isl_give isl_union_map *isl_union_map_universe( - __isl_take isl_union_map *umap); -__isl_give isl_union_set *isl_union_map_domain(__isl_take isl_union_map *umap); -__isl_give isl_union_set *isl_union_map_range(__isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_domain_map( - __isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_range_map( - __isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_from_domain( - __isl_take isl_union_set *uset); -__isl_give isl_union_map *isl_union_map_from_range( - __isl_take isl_union_set *uset); - -__isl_give isl_union_map *isl_union_map_affine_hull( - __isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_polyhedral_hull( - __isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_simple_hull( - __isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_coalesce( - __isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_compute_divs( - __isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_lexmin(__isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_lexmax(__isl_take isl_union_map *umap); - -__isl_give isl_union_map *isl_union_map_add_map(__isl_take isl_union_map *umap, - __isl_take isl_map *map); -__isl_give isl_union_map *isl_union_map_union(__isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_subtract( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_intersect( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_product(__isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_range_product( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_flat_range_product( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_gist(__isl_take isl_union_map *umap, - __isl_take isl_union_map *context); - -__isl_give isl_union_map *isl_union_map_intersect_domain( - __isl_take isl_union_map *umap, __isl_take isl_union_set *uset); -__isl_give isl_union_map *isl_union_map_intersect_range( - __isl_take isl_union_map *umap, __isl_take isl_union_set *uset); - -__isl_give isl_union_map *isl_union_map_apply_domain( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_apply_range( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_reverse(__isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_from_domain_and_range( - __isl_take isl_union_set *domain, __isl_take isl_union_set *range); - -__isl_give isl_union_map *isl_union_map_detect_equalities( - __isl_keep isl_union_map *umap); -__isl_give isl_union_set *isl_union_map_deltas(__isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_deltas_map( - __isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_set_identity(__isl_take isl_union_set *uset); - -int isl_union_map_is_empty(__isl_keep isl_union_map *umap); -int isl_union_map_is_single_valued(__isl_keep isl_union_map *umap); -int isl_union_map_plain_is_injective(__isl_keep isl_union_map *umap); -int isl_union_map_is_injective(__isl_keep isl_union_map *umap); -int isl_union_map_is_bijective(__isl_keep isl_union_map *umap); - -int isl_union_map_is_subset(__isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2); -int isl_union_map_is_equal(__isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2); -int isl_union_map_is_strict_subset(__isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2); - -int isl_union_map_n_map(__isl_keep isl_union_map *umap); -int isl_union_map_foreach_map(__isl_keep isl_union_map *umap, - int (*fn)(__isl_take isl_map *map, void *user), void *user); -__isl_give int isl_union_map_contains(__isl_keep isl_union_map *umap, - __isl_keep isl_dim *dim); -__isl_give isl_map *isl_union_map_extract_map(__isl_keep isl_union_map *umap, - __isl_take isl_dim *dim); -__isl_give isl_map *isl_map_from_union_map(__isl_take isl_union_map *umap); - -__isl_give isl_basic_map *isl_union_map_sample(__isl_take isl_union_map *umap); - -__isl_give isl_union_map *isl_union_map_power(__isl_take isl_union_map *umap, - int *exact); -__isl_give isl_union_map *isl_union_map_transitive_closure( - __isl_take isl_union_map *umap, int *exact); - -__isl_give isl_union_map *isl_union_map_lex_lt_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_lex_le_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_lex_gt_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_lex_ge_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); - -__isl_give isl_union_map *isl_union_map_read_from_file(isl_ctx *ctx, - FILE *input); -__isl_give isl_union_map *isl_union_map_read_from_str(struct isl_ctx *ctx, - const char *str); -__isl_give isl_printer *isl_printer_print_union_map(__isl_take isl_printer *p, - __isl_keep isl_union_map *umap); -void isl_union_map_dump(__isl_keep isl_union_map *umap); - -__isl_give isl_union_set *isl_union_map_wrap(__isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_set_unwrap(__isl_take isl_union_set *uset); - -__isl_give isl_union_map *isl_union_map_zip(__isl_take isl_union_map *umap); - -__isl_give isl_union_map *isl_union_map_align_params( - __isl_take isl_union_map *umap, __isl_take isl_dim *model); -__isl_give isl_union_set *isl_union_set_align_params( - __isl_take isl_union_set *uset, __isl_take isl_dim *model); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/union_set.h b/cloog-0.16.3/isl/include/isl/union_set.h deleted file mode 100644 index 3401f4e..0000000 --- a/cloog-0.16.3/isl/include/isl/union_set.h +++ /dev/null @@ -1,103 +0,0 @@ -#ifndef ISL_UNION_SET_H -#define ISL_UNION_SET_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -__isl_give isl_union_set *isl_union_set_from_set(__isl_take isl_set *set); -__isl_give isl_union_set *isl_union_set_empty(__isl_take isl_dim *dim); -__isl_give isl_union_set *isl_union_set_copy(__isl_keep isl_union_set *uset); -void *isl_union_set_free(__isl_take isl_union_set *uset); - -isl_ctx *isl_union_set_get_ctx(__isl_keep isl_union_set *uset); -__isl_give isl_dim *isl_union_set_get_dim(__isl_keep isl_union_set *uset); - -__isl_give isl_union_set *isl_union_set_universe( - __isl_take isl_union_set *uset); - -__isl_give isl_union_set *isl_union_set_detect_equalities( - __isl_take isl_union_set *uset); -__isl_give isl_union_set *isl_union_set_affine_hull( - __isl_take isl_union_set *uset); -__isl_give isl_union_set *isl_union_set_polyhedral_hull( - __isl_take isl_union_set *uset); -__isl_give isl_union_set *isl_union_set_simple_hull( - __isl_take isl_union_set *uset); -__isl_give isl_union_set *isl_union_set_coalesce( - __isl_take isl_union_set *uset); -__isl_give isl_union_set *isl_union_set_compute_divs( - __isl_take isl_union_set *uset); -__isl_give isl_union_set *isl_union_set_lexmin(__isl_take isl_union_set *uset); -__isl_give isl_union_set *isl_union_set_lexmax(__isl_take isl_union_set *uset); - -__isl_give isl_union_set *isl_union_set_add_set(__isl_take isl_union_set *uset, - __isl_take isl_set *set); -__isl_give isl_union_set *isl_union_set_union(__isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2); -__isl_give isl_union_set *isl_union_set_subtract( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); -__isl_give isl_union_set *isl_union_set_intersect( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); -__isl_give isl_union_set *isl_union_set_product(__isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2); -__isl_give isl_union_set *isl_union_set_gist(__isl_take isl_union_set *uset, - __isl_take isl_union_set *context); - -__isl_give isl_union_set *isl_union_set_apply( - __isl_take isl_union_set *uset, __isl_take isl_union_map *umap); - -int isl_union_set_is_empty(__isl_keep isl_union_set *uset); - -int isl_union_set_is_subset(__isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2); -int isl_union_set_is_equal(__isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2); -int isl_union_set_is_strict_subset(__isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2); - -int isl_union_set_n_set(__isl_keep isl_union_set *uset); -int isl_union_set_foreach_set(__isl_keep isl_union_set *uset, - int (*fn)(__isl_take isl_set *set, void *user), void *user); -__isl_give int isl_union_set_contains(__isl_keep isl_union_set *uset, - __isl_keep isl_dim *dim); -__isl_give isl_set *isl_union_set_extract_set(__isl_keep isl_union_set *uset, - __isl_take isl_dim *dim); -__isl_give isl_set *isl_set_from_union_set(__isl_take isl_union_set *uset); -int isl_union_set_foreach_point(__isl_keep isl_union_set *uset, - int (*fn)(__isl_take isl_point *pnt, void *user), void *user); - -__isl_give isl_basic_set *isl_union_set_sample(__isl_take isl_union_set *uset); - -__isl_give isl_union_set *isl_union_set_lift(__isl_take isl_union_set *uset); - -__isl_give isl_union_map *isl_union_set_lex_lt_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); -__isl_give isl_union_map *isl_union_set_lex_le_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); -__isl_give isl_union_map *isl_union_set_lex_gt_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); -__isl_give isl_union_map *isl_union_set_lex_ge_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); - -__isl_give isl_union_set *isl_union_set_coefficients( - __isl_take isl_union_set *bset); -__isl_give isl_union_set *isl_union_set_solutions( - __isl_take isl_union_set *bset); - -__isl_give isl_union_set *isl_union_set_read_from_file(isl_ctx *ctx, - FILE *input); -__isl_give isl_union_set *isl_union_set_read_from_str(struct isl_ctx *ctx, - const char *str); -__isl_give isl_printer *isl_printer_print_union_set(__isl_take isl_printer *p, - __isl_keep isl_union_set *uset); -void isl_union_set_dump(__isl_keep isl_union_set *uset); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/vec.h b/cloog-0.16.3/isl/include/isl/vec.h deleted file mode 100644 index e592838..0000000 --- a/cloog-0.16.3/isl/include/isl/vec.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_VEC_H -#define ISL_VEC_H - -#include - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_vec { - int ref; - - struct isl_ctx *ctx; - - unsigned size; - isl_int *el; - - struct isl_blk block; -}; -typedef struct isl_vec isl_vec; - -struct isl_vec *isl_vec_alloc(struct isl_ctx *ctx, unsigned size); -struct isl_vec *isl_vec_copy(struct isl_vec *vec); -struct isl_vec *isl_vec_cow(struct isl_vec *vec); -void isl_vec_free(struct isl_vec *vec); - -isl_ctx *isl_vec_get_ctx(__isl_keep isl_vec *vec); - -int isl_vec_is_equal(__isl_keep isl_vec *vec1, __isl_keep isl_vec *vec2); - -void isl_vec_dump(__isl_keep isl_vec *vec); -__isl_give isl_printer *isl_printer_print_vec(__isl_take isl_printer *printer, - __isl_keep isl_vec *vec); - -void isl_vec_lcm(struct isl_vec *vec, isl_int *lcm); -struct isl_vec *isl_vec_ceil(struct isl_vec *vec); -struct isl_vec *isl_vec_normalize(struct isl_vec *vec); -__isl_give isl_vec *isl_vec_clr(__isl_take isl_vec *vec); -__isl_give isl_vec *isl_vec_scale(__isl_take isl_vec *vec, isl_int m); -__isl_give isl_vec *isl_vec_add(__isl_take isl_vec *vec1, - __isl_take isl_vec *vec2); -__isl_give isl_vec *isl_vec_extend(__isl_take isl_vec *vec, unsigned size); -__isl_give isl_vec *isl_vec_zero_extend(__isl_take isl_vec *vec, unsigned size); - -__isl_give isl_vec *isl_vec_sort(__isl_take isl_vec *vec); - -__isl_give isl_vec *isl_vec_read_from_file(isl_ctx *ctx, FILE *input); - -__isl_give isl_vec *isl_vec_drop_els(__isl_take isl_vec *vec, - unsigned pos, unsigned n); -__isl_give isl_vec *isl_vec_insert_els(__isl_take isl_vec *vec, - unsigned pos, unsigned n); -__isl_give isl_vec *isl_vec_insert_zero_els(__isl_take isl_vec *vec, - unsigned pos, unsigned n); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/version.h b/cloog-0.16.3/isl/include/isl/version.h deleted file mode 100644 index 7f8f23d..0000000 --- a/cloog-0.16.3/isl/include/isl/version.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef ISL_VERSION_H -#define ISL_VERSION_H - -#if defined(__cplusplus) -extern "C" { -#endif - -const char *isl_version(void); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/include/isl/vertices.h b/cloog-0.16.3/isl/include/isl/vertices.h deleted file mode 100644 index 3e8460d..0000000 --- a/cloog-0.16.3/isl/include/isl/vertices.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef ISL_VERTICES_H -#define ISL_VERTICES_H - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_external_vertex; -typedef struct isl_external_vertex isl_vertex; - -struct isl_cell; -typedef struct isl_cell isl_cell; - -struct isl_vertices; -typedef struct isl_vertices isl_vertices; - -isl_ctx *isl_vertex_get_ctx(__isl_keep isl_vertex *vertex); -int isl_vertex_get_id(__isl_keep isl_vertex *vertex); -__isl_give isl_basic_set *isl_vertex_get_domain(__isl_keep isl_vertex *vertex); -__isl_give isl_basic_set *isl_vertex_get_expr(__isl_keep isl_vertex *vertex); -void isl_vertex_free(__isl_take isl_vertex *vertex); - -__isl_give isl_vertices *isl_basic_set_compute_vertices( - __isl_keep isl_basic_set *bset); -isl_ctx *isl_vertices_get_ctx(__isl_keep isl_vertices *vertices); -int isl_vertices_get_n_vertices(__isl_keep isl_vertices *vertices); -int isl_vertices_foreach_vertex(__isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_vertex *vertex, void *user), void *user); -void isl_vertices_free(__isl_take isl_vertices *vertices); - -isl_ctx *isl_cell_get_ctx(__isl_keep isl_cell *cell); -__isl_give isl_basic_set *isl_cell_get_domain(__isl_keep isl_cell *cell); -int isl_cell_foreach_vertex(__isl_keep isl_cell *cell, - int (*fn)(__isl_take isl_vertex *vertex, void *user), void *user); -void isl_cell_free(__isl_take isl_cell *cell); - -int isl_vertices_foreach_cell(__isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_cell *cell, void *user), void *user); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/install-sh b/cloog-0.16.3/isl/install-sh deleted file mode 100755 index 3f83ce9..0000000 --- a/cloog-0.16.3/isl/install-sh +++ /dev/null @@ -1,524 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2010-02-06.18; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -no_target_directory= - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - do_exit='(exit $ret); exit $ret' - trap "ret=129; $do_exit" 1 - trap "ret=130; $do_exit" 2 - trap "ret=141; $do_exit" 13 - trap "ret=143; $do_exit" 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writeable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - -*) prefix='./';; - *) prefix='';; - esac - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob set +f - IFS=$oIFS - - prefixes= - - for d - do - test -z "$d" && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/cloog-0.16.3/isl/isl.py b/cloog-0.16.3/isl/isl.py deleted file mode 100644 index 6382f63..0000000 --- a/cloog-0.16.3/isl/isl.py +++ /dev/null @@ -1,100 +0,0 @@ -import gdb -import re - -# GDB Pretty Printers for most isl objects -class IslObjectPrinter: - """Print an isl object""" - def __init__ (self, val, type): - self.val = val - self.type = type - - def to_string (self): - # Cast val to a void pointer to stop gdb using this pretty - # printer for the pointer which would lead to an infinite loop. - void_ptr = gdb.lookup_type('void').pointer() - value = str(self.val.cast(void_ptr)) - printer = gdb.parse_and_eval("isl_printer_to_str(isl_" - + str(self.type) - + "_get_ctx(" + value + "))") - printer = gdb.parse_and_eval("isl_printer_print_" - + str(self.type) + "(" - + str(printer) + ", " - + value + ")") - string = gdb.parse_and_eval("(char*)isl_printer_get_str(" - + str(printer) + ")") - gdb.parse_and_eval("isl_printer_free(" + str(printer) + ")") - return string - - def display_hint (self): - return 'string' - -class IslIntPrinter: - """Print an isl_int """ - def __init__ (self, val): - self.val = val - - def to_string (self): - # Cast val to a void pointer to stop gdb using this pretty - # printer for the pointer which would lead to an infinite loop. - void_ptr = gdb.lookup_type('void').pointer() - value = str(self.val.cast(void_ptr)) - - context = gdb.parse_and_eval("isl_ctx_alloc()") - printer = gdb.parse_and_eval("isl_printer_to_str(" - + str(context) + ")") - printer = gdb.parse_and_eval("isl_printer_print_isl_int(" - + str(printer) + ", " - + value + ")") - string = gdb.parse_and_eval("(char*)isl_printer_get_str(" - + str(printer) + ")") - gdb.parse_and_eval("isl_printer_free(" + str(printer) + ")") - gdb.parse_and_eval("isl_ctx_free(" + str(context) + ")") - return string - - def display_hint (self): - return 'string' - -class IslPrintCommand (gdb.Command): - """Print an isl value.""" - def __init__ (self): - super (IslPrintCommand, self).__init__ ("islprint", - gdb.COMMAND_OBSCURE) - def invoke (self, arg, from_tty): - arg = gdb.parse_and_eval(arg); - printer = str_lookup_function(arg) - - if printer == None: - print "No isl printer for this type" - return - - print printer.to_string() - -IslPrintCommand() - -def str_lookup_function (val): - if val.type.code != gdb.TYPE_CODE_PTR: - if str(val.type) == "isl_int": - return IslIntPrinter(val) - else: - return None - - lookup_tag = val.type.target() - regex = re.compile ("^isl_(.*)$") - - if lookup_tag == None: - return None - - m = regex.match (str(lookup_tag)) - - if m: - # Those types of printers defined in isl. - if m.group(1) in ["basic_set", "set", "union_set", "basic_map", - "map", "union_map", "qpolynomial", - "pw_qpolynomial", "pw_qpolynomial_fold", - "union_pw_qpolynomial", - "union_pw_qpolynomial_fold"]: - return IslObjectPrinter(val, m.group(1)) - return None - -# Do not register the pretty printer. -# gdb.current_objfile().pretty_printers.append(str_lookup_function) diff --git a/cloog-0.16.3/isl/isl_aff.c b/cloog-0.16.3/isl/isl_aff.c deleted file mode 100644 index f4f1976..0000000 --- a/cloog-0.16.3/isl/isl_aff.c +++ /dev/null @@ -1,1347 +0,0 @@ -/* - * Copyright 2011 INRIA Saclay - * Copyright 2011 Universiteit Leiden - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - * and Leiden Institute of Advanced Computer Science, - * Universiteit Leiden, Niels Bohrweg 1, 2333 CA Leiden, The Netherlands - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -__isl_give isl_aff *isl_aff_alloc_vec(__isl_take isl_local_space *ls, - __isl_take isl_vec *v) -{ - isl_aff *aff; - - if (!ls || !v) - goto error; - - aff = isl_calloc_type(v->ctx, struct isl_aff); - if (!aff) - goto error; - - aff->ref = 1; - aff->ls = ls; - aff->v = v; - - return aff; -error: - isl_local_space_free(ls); - isl_vec_free(v); - return NULL; -} - -__isl_give isl_aff *isl_aff_alloc(__isl_take isl_local_space *ls) -{ - isl_ctx *ctx; - isl_vec *v; - unsigned total; - - if (!ls) - return NULL; - - ctx = isl_local_space_get_ctx(ls); - if (!isl_local_space_divs_known(ls)) - isl_die(ctx, isl_error_invalid, "local space has unknown divs", - goto error); - - total = isl_local_space_dim(ls, isl_dim_all); - v = isl_vec_alloc(ctx, 1 + 1 + total); - return isl_aff_alloc_vec(ls, v); -error: - isl_local_space_free(ls); - return NULL; -} - -__isl_give isl_aff *isl_aff_zero(__isl_take isl_local_space *ls) -{ - isl_aff *aff; - - aff = isl_aff_alloc(ls); - if (!aff) - return NULL; - - isl_int_set_si(aff->v->el[0], 1); - isl_seq_clr(aff->v->el + 1, aff->v->size - 1); - - return aff; -} - -__isl_give isl_aff *isl_aff_copy(__isl_keep isl_aff *aff) -{ - if (!aff) - return NULL; - - aff->ref++; - return aff; -} - -__isl_give isl_aff *isl_aff_dup(__isl_keep isl_aff *aff) -{ - if (!aff) - return NULL; - - return isl_aff_alloc_vec(isl_local_space_copy(aff->ls), - isl_vec_copy(aff->v)); -} - -__isl_give isl_aff *isl_aff_cow(__isl_take isl_aff *aff) -{ - if (!aff) - return NULL; - - if (aff->ref == 1) - return aff; - aff->ref--; - return isl_aff_dup(aff); -} - -void *isl_aff_free(__isl_take isl_aff *aff) -{ - if (!aff) - return NULL; - - if (--aff->ref > 0) - return NULL; - - isl_local_space_free(aff->ls); - isl_vec_free(aff->v); - - free(aff); - - return NULL; -} - -isl_ctx *isl_aff_get_ctx(__isl_keep isl_aff *aff) -{ - return aff ? isl_local_space_get_ctx(aff->ls) : NULL; -} - -int isl_aff_dim(__isl_keep isl_aff *aff, enum isl_dim_type type) -{ - return aff ? isl_local_space_dim(aff->ls, type) : 0; -} - -__isl_give isl_dim *isl_aff_get_dim(__isl_keep isl_aff *aff) -{ - return aff ? isl_local_space_get_dim(aff->ls) : NULL; -} - -__isl_give isl_local_space *isl_aff_get_local_space(__isl_keep isl_aff *aff) -{ - return aff ? isl_local_space_copy(aff->ls) : NULL; -} - -const char *isl_aff_get_dim_name(__isl_keep isl_aff *aff, - enum isl_dim_type type, unsigned pos) -{ - return aff ? isl_local_space_get_dim_name(aff->ls, type, pos) : 0; -} - -__isl_give isl_aff *isl_aff_reset_dim(__isl_take isl_aff *aff, - __isl_take isl_dim *dim) -{ - aff = isl_aff_cow(aff); - if (!aff || !dim) - goto error; - - aff->ls = isl_local_space_reset_dim(aff->ls, dim); - if (!aff->ls) - return isl_aff_free(aff); - - return aff; -error: - isl_aff_free(aff); - isl_dim_free(dim); - return NULL; -} - -/* Reorder the coefficients of the affine expression based - * on the given reodering. - * The reordering r is assumed to have been extended with the local - * variables. - */ -static __isl_give isl_vec *vec_reorder(__isl_take isl_vec *vec, - __isl_take isl_reordering *r, int n_div) -{ - isl_vec *res; - int i; - - if (!vec || !r) - goto error; - - res = isl_vec_alloc(vec->ctx, 2 + isl_dim_total(r->dim) + n_div); - isl_seq_cpy(res->el, vec->el, 2); - isl_seq_clr(res->el + 2, res->size - 2); - for (i = 0; i < r->len; ++i) - isl_int_set(res->el[2 + r->pos[i]], vec->el[2 + i]); - - isl_reordering_free(r); - isl_vec_free(vec); - return res; -error: - isl_vec_free(vec); - isl_reordering_free(r); - return NULL; -} - -/* Reorder the dimensions of "aff" according to the given reordering. - */ -__isl_give isl_aff *isl_aff_realign(__isl_take isl_aff *aff, - __isl_take isl_reordering *r) -{ - aff = isl_aff_cow(aff); - if (!aff) - goto error; - - r = isl_reordering_extend(r, aff->ls->div->n_row); - aff->v = vec_reorder(aff->v, isl_reordering_copy(r), - aff->ls->div->n_row); - aff->ls = isl_local_space_realign(aff->ls, r); - - if (!aff->v || !aff->ls) - return isl_aff_free(aff); - - return aff; -error: - isl_aff_free(aff); - isl_reordering_free(r); - return NULL; -} - -int isl_aff_plain_is_zero(__isl_keep isl_aff *aff) -{ - if (!aff) - return -1; - - return isl_seq_first_non_zero(aff->v->el + 1, aff->v->size - 1) < 0; -} - -int isl_aff_plain_is_equal(__isl_keep isl_aff *aff1, __isl_keep isl_aff *aff2) -{ - int equal; - - if (!aff1 || !aff2) - return -1; - - equal = isl_local_space_is_equal(aff1->ls, aff2->ls); - if (equal < 0 || !equal) - return equal; - - return isl_vec_is_equal(aff1->v, aff2->v); -} - -int isl_aff_get_denominator(__isl_keep isl_aff *aff, isl_int *v) -{ - if (!aff) - return -1; - isl_int_set(*v, aff->v->el[0]); - return 0; -} - -int isl_aff_get_constant(__isl_keep isl_aff *aff, isl_int *v) -{ - if (!aff) - return -1; - isl_int_set(*v, aff->v->el[1]); - return 0; -} - -int isl_aff_get_coefficient(__isl_keep isl_aff *aff, - enum isl_dim_type type, int pos, isl_int *v) -{ - if (!aff) - return -1; - - if (pos >= isl_local_space_dim(aff->ls, type)) - isl_die(aff->v->ctx, isl_error_invalid, - "position out of bounds", return -1); - - pos += isl_local_space_offset(aff->ls, type); - isl_int_set(*v, aff->v->el[1 + pos]); - - return 0; -} - -__isl_give isl_aff *isl_aff_set_denominator(__isl_take isl_aff *aff, isl_int v) -{ - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - isl_int_set(aff->v->el[0], v); - - return aff; -} - -__isl_give isl_aff *isl_aff_set_constant(__isl_take isl_aff *aff, isl_int v) -{ - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - isl_int_set(aff->v->el[1], v); - - return aff; -} - -__isl_give isl_aff *isl_aff_add_constant(__isl_take isl_aff *aff, isl_int v) -{ - if (isl_int_is_zero(v)) - return aff; - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - isl_int_addmul(aff->v->el[1], aff->v->el[0], v); - - return aff; -} - -__isl_give isl_aff *isl_aff_add_constant_si(__isl_take isl_aff *aff, int v) -{ - isl_int t; - - isl_int_init(t); - isl_int_set_si(t, v); - aff = isl_aff_add_constant(aff, t); - isl_int_clear(t); - - return aff; -} - -__isl_give isl_aff *isl_aff_set_constant_si(__isl_take isl_aff *aff, int v) -{ - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - isl_int_set_si(aff->v->el[1], v); - - return aff; -} - -__isl_give isl_aff *isl_aff_set_coefficient(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, isl_int v) -{ - if (!aff) - return NULL; - - if (pos >= isl_local_space_dim(aff->ls, type)) - isl_die(aff->v->ctx, isl_error_invalid, - "position out of bounds", return isl_aff_free(aff)); - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - pos += isl_local_space_offset(aff->ls, type); - isl_int_set(aff->v->el[1 + pos], v); - - return aff; -} - -__isl_give isl_aff *isl_aff_set_coefficient_si(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, int v) -{ - if (!aff) - return NULL; - - if (pos >= isl_local_space_dim(aff->ls, type)) - isl_die(aff->v->ctx, isl_error_invalid, - "position out of bounds", return isl_aff_free(aff)); - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - pos += isl_local_space_offset(aff->ls, type); - isl_int_set_si(aff->v->el[1 + pos], v); - - return aff; -} - -__isl_give isl_aff *isl_aff_add_coefficient(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, isl_int v) -{ - if (!aff) - return NULL; - - if (pos >= isl_local_space_dim(aff->ls, type)) - isl_die(aff->v->ctx, isl_error_invalid, - "position out of bounds", return isl_aff_free(aff)); - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - pos += isl_local_space_offset(aff->ls, type); - isl_int_addmul(aff->v->el[1 + pos], aff->v->el[0], v); - - return aff; -} - -__isl_give isl_aff *isl_aff_add_coefficient_si(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, int v) -{ - isl_int t; - - isl_int_init(t); - isl_int_set_si(t, v); - aff = isl_aff_add_coefficient(aff, type, pos, t); - isl_int_clear(t); - - return aff; -} - -__isl_give isl_div *isl_aff_get_div(__isl_keep isl_aff *aff, int pos) -{ - if (!aff) - return NULL; - - return isl_local_space_get_div(aff->ls, pos); -} - -__isl_give isl_aff *isl_aff_neg(__isl_take isl_aff *aff) -{ - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - isl_seq_neg(aff->v->el + 1, aff->v->el + 1, aff->v->size - 1); - - return aff; -} - -/* Given f, return floor(f). - * If f is an integer expression, then just return f. - * Otherwise, create a new div d = [f] and return the expression d. - */ -__isl_give isl_aff *isl_aff_floor(__isl_take isl_aff *aff) -{ - int size; - isl_ctx *ctx; - - if (!aff) - return NULL; - - if (isl_int_is_one(aff->v->el[0])) - return aff; - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->ls = isl_local_space_add_div(aff->ls, isl_vec_copy(aff->v)); - if (!aff->ls) - return isl_aff_free(aff); - - ctx = isl_aff_get_ctx(aff); - size = aff->v->size; - isl_vec_free(aff->v); - aff->v = isl_vec_alloc(ctx, size + 1); - aff->v = isl_vec_clr(aff->v); - if (!aff->v) - return isl_aff_free(aff); - isl_int_set_si(aff->v->el[0], 1); - isl_int_set_si(aff->v->el[size], 1); - - return aff; -} - -/* Given f, return ceil(f). - * If f is an integer expression, then just return f. - * Otherwise, create a new div d = [-f] and return the expression -d. - */ -__isl_give isl_aff *isl_aff_ceil(__isl_take isl_aff *aff) -{ - if (!aff) - return NULL; - - if (isl_int_is_one(aff->v->el[0])) - return aff; - - aff = isl_aff_neg(aff); - aff = isl_aff_floor(aff); - aff = isl_aff_neg(aff); - - return aff; -} - -/* Apply the expansion computed by isl_merge_divs. - * The expansion itself is given by "exp" while the resulting - * list of divs is given by "div". - */ -__isl_give isl_aff *isl_aff_expand_divs( __isl_take isl_aff *aff, - __isl_take isl_mat *div, int *exp) -{ - int i, j; - int old_n_div; - int new_n_div; - int offset; - - aff = isl_aff_cow(aff); - if (!aff || !div) - goto error; - - old_n_div = isl_local_space_dim(aff->ls, isl_dim_div); - new_n_div = isl_mat_rows(div); - if (new_n_div < old_n_div) - isl_die(isl_mat_get_ctx(div), isl_error_invalid, - "not an expansion", goto error); - - aff->v = isl_vec_extend(aff->v, aff->v->size + new_n_div - old_n_div); - if (!aff->v) - goto error; - - offset = 1 + isl_local_space_offset(aff->ls, isl_dim_div); - j = old_n_div - 1; - for (i = new_n_div - 1; i >= 0; --i) { - if (j >= 0 && exp[j] == i) { - if (i != j) - isl_int_swap(aff->v->el[offset + i], - aff->v->el[offset + j]); - j--; - } else - isl_int_set_si(aff->v->el[offset + i], 0); - } - - aff->ls = isl_local_space_replace_divs(aff->ls, isl_mat_copy(div)); - if (!aff->ls) - goto error; - isl_mat_free(div); - return aff; -error: - isl_aff_free(aff); - isl_mat_free(div); - return NULL; -} - -/* Add two affine expressions that live in the same local space. - */ -static __isl_give isl_aff *add_expanded(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2) -{ - isl_int gcd, f; - - aff1 = isl_aff_cow(aff1); - if (!aff1 || !aff2) - goto error; - - aff1->v = isl_vec_cow(aff1->v); - if (!aff1->v) - goto error; - - isl_int_init(gcd); - isl_int_init(f); - isl_int_gcd(gcd, aff1->v->el[0], aff2->v->el[0]); - isl_int_divexact(f, aff2->v->el[0], gcd); - isl_seq_scale(aff1->v->el + 1, aff1->v->el + 1, f, aff1->v->size - 1); - isl_int_divexact(f, aff1->v->el[0], gcd); - isl_seq_addmul(aff1->v->el + 1, f, aff2->v->el + 1, aff1->v->size - 1); - isl_int_divexact(f, aff2->v->el[0], gcd); - isl_int_mul(aff1->v->el[0], aff1->v->el[0], f); - isl_int_clear(f); - isl_int_clear(gcd); - - isl_aff_free(aff2); - return aff1; -error: - isl_aff_free(aff1); - isl_aff_free(aff2); - return NULL; -} - -__isl_give isl_aff *isl_aff_add(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2) -{ - isl_ctx *ctx; - int *exp1 = NULL; - int *exp2 = NULL; - isl_mat *div; - - if (!aff1 || !aff2) - goto error; - - ctx = isl_aff_get_ctx(aff1); - if (!isl_dim_equal(aff1->ls->dim, aff2->ls->dim)) - isl_die(ctx, isl_error_invalid, - "spaces don't match", goto error); - - if (aff1->ls->div->n_row == 0 && aff2->ls->div->n_row == 0) - return add_expanded(aff1, aff2); - - exp1 = isl_alloc_array(ctx, int, aff1->ls->div->n_row); - exp2 = isl_alloc_array(ctx, int, aff2->ls->div->n_row); - if (!exp1 || !exp2) - goto error; - - div = isl_merge_divs(aff1->ls->div, aff2->ls->div, exp1, exp2); - aff1 = isl_aff_expand_divs(aff1, isl_mat_copy(div), exp1); - aff2 = isl_aff_expand_divs(aff2, div, exp2); - free(exp1); - free(exp2); - - return add_expanded(aff1, aff2); -error: - free(exp1); - free(exp2); - isl_aff_free(aff1); - isl_aff_free(aff2); - return NULL; -} - -__isl_give isl_aff *isl_aff_sub(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2) -{ - return isl_aff_add(aff1, isl_aff_neg(aff2)); -} - -__isl_give isl_aff *isl_aff_scale(__isl_take isl_aff *aff, isl_int f) -{ - isl_int gcd; - - if (isl_int_is_one(f)) - return aff; - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - isl_int_init(gcd); - isl_int_gcd(gcd, aff->v->el[0], f); - isl_int_divexact(aff->v->el[0], aff->v->el[0], gcd); - isl_int_divexact(gcd, f, gcd); - isl_seq_scale(aff->v->el + 1, aff->v->el + 1, gcd, aff->v->size - 1); - isl_int_clear(gcd); - - return aff; -} - -__isl_give isl_aff *isl_aff_scale_down(__isl_take isl_aff *aff, isl_int f) -{ - isl_int gcd; - - if (isl_int_is_one(f)) - return aff; - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - isl_int_init(gcd); - isl_seq_gcd(aff->v->el + 1, aff->v->size - 1, &gcd); - isl_int_gcd(gcd, gcd, f); - isl_seq_scale_down(aff->v->el + 1, aff->v->el + 1, gcd, aff->v->size - 1); - isl_int_divexact(gcd, f, gcd); - isl_int_mul(aff->v->el[0], aff->v->el[0], gcd); - isl_int_clear(gcd); - - return aff; -} - -__isl_give isl_aff *isl_aff_scale_down_ui(__isl_take isl_aff *aff, unsigned f) -{ - isl_int v; - - if (f == 1) - return aff; - - isl_int_init(v); - isl_int_set_ui(v, f); - aff = isl_aff_scale_down(aff, v); - isl_int_clear(v); - - return aff; -} - -__isl_give isl_aff *isl_aff_set_dim_name(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned pos, const char *s) -{ - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - aff->ls = isl_local_space_set_dim_name(aff->ls, type, pos, s); - if (!aff->ls) - return isl_aff_free(aff); - - return aff; -} - -/* Exploit the equalities in "eq" to simplify the affine expression - * and the expressions of the integer divisions in the local space. - * The integer divisions in this local space are assumed to appear - * as regular dimensions in "eq". - */ -static __isl_give isl_aff *isl_aff_substitute_equalities( - __isl_take isl_aff *aff, __isl_take isl_basic_set *eq) -{ - int i, j; - unsigned total; - unsigned n_div; - - if (!eq) - goto error; - if (eq->n_eq == 0) { - isl_basic_set_free(eq); - return aff; - } - - aff = isl_aff_cow(aff); - if (!aff) - goto error; - - aff->ls = isl_local_space_substitute_equalities(aff->ls, - isl_basic_set_copy(eq)); - if (!aff->ls) - goto error; - - total = 1 + isl_dim_total(eq->dim); - n_div = eq->n_div; - for (i = 0; i < eq->n_eq; ++i) { - j = isl_seq_last_non_zero(eq->eq[i], total + n_div); - if (j < 0 || j == 0 || j >= total) - continue; - - isl_seq_elim(aff->v->el + 1, eq->eq[i], j, total, - &aff->v->el[0]); - } - - isl_basic_set_free(eq); - return aff; -error: - isl_basic_set_free(eq); - isl_aff_free(aff); - return NULL; -} - -/* Look for equalities among the variables shared by context and aff - * and the integer divisions of aff, if any. - * The equalities are then used to eliminate coefficients and/or integer - * divisions from aff. - */ -__isl_give isl_aff *isl_aff_gist(__isl_take isl_aff *aff, - __isl_take isl_set *context) -{ - isl_basic_set *hull; - int n_div; - - if (!aff) - goto error; - n_div = isl_local_space_dim(aff->ls, isl_dim_div); - if (n_div > 0) { - isl_basic_set *bset; - context = isl_set_add_dims(context, isl_dim_set, n_div); - bset = isl_basic_set_from_local_space( - isl_aff_get_local_space(aff)); - bset = isl_basic_set_lift(bset); - bset = isl_basic_set_flatten(bset); - context = isl_set_intersect(context, - isl_set_from_basic_set(bset)); - } - - hull = isl_set_affine_hull(context); - return isl_aff_substitute_equalities(aff, hull); -error: - isl_aff_free(aff); - isl_set_free(context); - return NULL; -} - -/* Return a basic set containing those elements in the space - * of aff where it is non-negative. - */ -__isl_give isl_basic_set *isl_aff_nonneg_basic_set(__isl_take isl_aff *aff) -{ - isl_constraint *ineq; - - ineq = isl_inequality_from_aff(aff); - - return isl_basic_set_from_constraint(ineq); -} - -/* Return a basic set containing those elements in the space - * of aff where it is zero. - */ -__isl_give isl_basic_set *isl_aff_zero_basic_set(__isl_take isl_aff *aff) -{ - isl_constraint *ineq; - - ineq = isl_equality_from_aff(aff); - - return isl_basic_set_from_constraint(ineq); -} - -/* Return a basic set containing those elements in the shared space - * of aff1 and aff2 where aff1 is greater than or equal to aff2. - */ -__isl_give isl_basic_set *isl_aff_ge_basic_set(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2) -{ - aff1 = isl_aff_sub(aff1, aff2); - - return isl_aff_nonneg_basic_set(aff1); -} - -__isl_give isl_aff *isl_aff_add_on_domain(__isl_keep isl_set *dom, - __isl_take isl_aff *aff1, __isl_take isl_aff *aff2) -{ - aff1 = isl_aff_add(aff1, aff2); - aff1 = isl_aff_gist(aff1, isl_set_copy(dom)); - return aff1; -} - -int isl_aff_is_empty(__isl_keep isl_aff *aff) -{ - if (!aff) - return -1; - - return 0; -} - -/* Set active[i] to 1 if the dimension at position i is involved - * in the affine expression. - */ -static int set_active(__isl_keep isl_aff *aff, int *active) -{ - int i, j; - unsigned total; - unsigned offset; - - if (!aff || !active) - return -1; - - total = aff->v->size - 2; - for (i = 0; i < total; ++i) - active[i] = !isl_int_is_zero(aff->v->el[2 + i]); - - offset = isl_local_space_offset(aff->ls, isl_dim_div) - 1; - for (i = aff->ls->div->n_row - 1; i >= 0; --i) { - if (!active[offset + i]) - continue; - for (j = 0; j < total; ++j) - active[j] |= - !isl_int_is_zero(aff->ls->div->row[i][2 + j]); - } - - return 0; -} - -/* Check whether the given affine expression has non-zero coefficient - * for any dimension in the given range or if any of these dimensions - * appear with non-zero coefficients in any of the integer divisions - * involved in the affine expression. - */ -int isl_aff_involves_dims(__isl_keep isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - isl_ctx *ctx; - int *active = NULL; - int involves = 0; - - if (!aff) - return -1; - if (n == 0) - return 0; - - ctx = isl_aff_get_ctx(aff); - if (first + n > isl_aff_dim(aff, type)) - isl_die(ctx, isl_error_invalid, - "range out of bounds", return -1); - - active = isl_calloc_array(ctx, int, - isl_local_space_dim(aff->ls, isl_dim_all)); - if (set_active(aff, active) < 0) - goto error; - - first += isl_local_space_offset(aff->ls, type) - 1; - for (i = 0; i < n; ++i) - if (active[first + i]) { - involves = 1; - break; - } - - free(active); - - return involves; -error: - free(active); - return -1; -} - -__isl_give isl_aff *isl_aff_drop_dims(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n) -{ - isl_ctx *ctx; - - if (!aff) - return NULL; - if (n == 0 && !isl_local_space_is_named_or_nested(aff->ls, type)) - return aff; - - ctx = isl_aff_get_ctx(aff); - if (first + n > isl_aff_dim(aff, type)) - isl_die(ctx, isl_error_invalid, "range out of bounds", - return isl_aff_free(aff)); - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->ls = isl_local_space_drop_dims(aff->ls, type, first, n); - if (!aff->ls) - return isl_aff_free(aff); - - first += 1 + isl_local_space_offset(aff->ls, type); - aff->v = isl_vec_drop_els(aff->v, first, n); - if (!aff->v) - return isl_aff_free(aff); - - return aff; -} - -__isl_give isl_aff *isl_aff_insert_dims(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n) -{ - isl_ctx *ctx; - - if (!aff) - return NULL; - if (n == 0 && !isl_local_space_is_named_or_nested(aff->ls, type)) - return aff; - - ctx = isl_aff_get_ctx(aff); - if (first > isl_aff_dim(aff, type)) - isl_die(ctx, isl_error_invalid, "position out of bounds", - return isl_aff_free(aff)); - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->ls = isl_local_space_insert_dims(aff->ls, type, first, n); - if (!aff->ls) - return isl_aff_free(aff); - - first += 1 + isl_local_space_offset(aff->ls, type); - aff->v = isl_vec_insert_zero_els(aff->v, first, n); - if (!aff->v) - return isl_aff_free(aff); - - return aff; -} - -__isl_give isl_aff *isl_aff_add_dims(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned n) -{ - unsigned pos; - - pos = isl_aff_dim(aff, type); - - return isl_aff_insert_dims(aff, type, pos, n); -} - -__isl_give isl_pw_aff *isl_pw_aff_add_dims(__isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned n) -{ - unsigned pos; - - pos = isl_pw_aff_dim(pwaff, type); - - return isl_pw_aff_insert_dims(pwaff, type, pos, n); -} - -#undef PW -#define PW isl_pw_aff -#undef EL -#define EL isl_aff -#undef EL_IS_ZERO -#define EL_IS_ZERO is_empty -#undef ZERO -#define ZERO empty -#undef IS_ZERO -#define IS_ZERO is_empty -#undef FIELD -#define FIELD aff - -#define NO_EVAL -#define NO_OPT -#define NO_MOVE_DIMS -#define NO_LIFT -#define NO_MORPH - -#include - -/* Compute a piecewise quasi-affine expression with a domain that - * is the union of those of pwaff1 and pwaff2 and such that on each - * cell, the quasi-affine expression is the maximum of those of pwaff1 - * and pwaff2. If only one of pwaff1 or pwaff2 is defined on a given - * cell, then the associated expression is the defined one. - */ -__isl_give isl_pw_aff *isl_pw_aff_max(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - int i, j, n; - isl_pw_aff *res; - isl_ctx *ctx; - isl_set *set; - - if (!pwaff1 || !pwaff2) - goto error; - - ctx = isl_dim_get_ctx(pwaff1->dim); - if (!isl_dim_equal(pwaff1->dim, pwaff2->dim)) - isl_die(ctx, isl_error_invalid, - "arguments should live in same space", goto error); - - if (isl_pw_aff_is_empty(pwaff1)) { - isl_pw_aff_free(pwaff1); - return pwaff2; - } - - if (isl_pw_aff_is_empty(pwaff2)) { - isl_pw_aff_free(pwaff2); - return pwaff1; - } - - n = 2 * (pwaff1->n + 1) * (pwaff2->n + 1); - res = isl_pw_aff_alloc_(isl_dim_copy(pwaff1->dim), n); - - for (i = 0; i < pwaff1->n; ++i) { - set = isl_set_copy(pwaff1->p[i].set); - for (j = 0; j < pwaff2->n; ++j) { - struct isl_set *common; - isl_set *ge; - - common = isl_set_intersect( - isl_set_copy(pwaff1->p[i].set), - isl_set_copy(pwaff2->p[j].set)); - ge = isl_set_from_basic_set(isl_aff_ge_basic_set( - isl_aff_copy(pwaff2->p[j].aff), - isl_aff_copy(pwaff1->p[i].aff))); - ge = isl_set_intersect(common, ge); - if (isl_set_plain_is_empty(ge)) { - isl_set_free(ge); - continue; - } - set = isl_set_subtract(set, isl_set_copy(ge)); - - res = isl_pw_aff_add_piece(res, ge, - isl_aff_copy(pwaff2->p[j].aff)); - } - res = isl_pw_aff_add_piece(res, set, - isl_aff_copy(pwaff1->p[i].aff)); - } - - for (j = 0; j < pwaff2->n; ++j) { - set = isl_set_copy(pwaff2->p[j].set); - for (i = 0; i < pwaff1->n; ++i) - set = isl_set_subtract(set, - isl_set_copy(pwaff1->p[i].set)); - res = isl_pw_aff_add_piece(res, set, - isl_aff_copy(pwaff2->p[j].aff)); - } - - isl_pw_aff_free(pwaff1); - isl_pw_aff_free(pwaff2); - - return res; -error: - isl_pw_aff_free(pwaff1); - isl_pw_aff_free(pwaff2); - return NULL; -} - -/* Construct a map with as domain the domain of pwaff and - * one-dimensional range corresponding to the affine expressions. - */ -__isl_give isl_map *isl_map_from_pw_aff(__isl_take isl_pw_aff *pwaff) -{ - int i; - isl_dim *dim; - isl_map *map; - - if (!pwaff) - return NULL; - - dim = isl_pw_aff_get_dim(pwaff); - dim = isl_dim_from_domain(dim); - dim = isl_dim_add(dim, isl_dim_out, 1); - map = isl_map_empty(dim); - - for (i = 0; i < pwaff->n; ++i) { - isl_basic_map *bmap; - isl_map *map_i; - - bmap = isl_basic_map_from_aff(isl_aff_copy(pwaff->p[i].aff)); - map_i = isl_map_from_basic_map(bmap); - map_i = isl_map_intersect_domain(map_i, - isl_set_copy(pwaff->p[i].set)); - map = isl_map_union_disjoint(map, map_i); - } - - isl_pw_aff_free(pwaff); - - return map; -} - -/* Return a set containing those elements in the domain - * of pwaff where it is non-negative. - */ -__isl_give isl_set *isl_pw_aff_nonneg_set(__isl_take isl_pw_aff *pwaff) -{ - int i; - isl_set *set; - - if (!pwaff) - return NULL; - - set = isl_set_empty(isl_pw_aff_get_dim(pwaff)); - - for (i = 0; i < pwaff->n; ++i) { - isl_basic_set *bset; - isl_set *set_i; - - bset = isl_aff_nonneg_basic_set(isl_aff_copy(pwaff->p[i].aff)); - set_i = isl_set_from_basic_set(bset); - set_i = isl_set_intersect(set_i, isl_set_copy(pwaff->p[i].set)); - set = isl_set_union_disjoint(set, set_i); - } - - isl_pw_aff_free(pwaff); - - return set; -} - -/* Return a set containing those elements in the domain - * of pwaff where it is zero. - */ -__isl_give isl_set *isl_pw_aff_zero_set(__isl_take isl_pw_aff *pwaff) -{ - int i; - isl_set *set; - - if (!pwaff) - return NULL; - - set = isl_set_empty(isl_pw_aff_get_dim(pwaff)); - - for (i = 0; i < pwaff->n; ++i) { - isl_basic_set *bset; - isl_set *set_i; - - bset = isl_aff_zero_basic_set(isl_aff_copy(pwaff->p[i].aff)); - set_i = isl_set_from_basic_set(bset); - set_i = isl_set_intersect(set_i, isl_set_copy(pwaff->p[i].set)); - set = isl_set_union_disjoint(set, set_i); - } - - isl_pw_aff_free(pwaff); - - return set; -} - -/* Return a set containing those elements in the shared domain - * of pwaff1 and pwaff2 where pwaff1 is greater than (or equal) to pwaff2. - * - * We compute the difference on the shared domain and then construct - * the set of values where this difference is non-negative. - * If strict is set, we first subtract 1 from the difference. - * If equal is set, we only return the elements where pwaff1 and pwaff2 - * are equal. - */ -static __isl_give isl_set *pw_aff_gte_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2, int strict, int equal) -{ - isl_set *set1, *set2; - - set1 = isl_pw_aff_domain(isl_pw_aff_copy(pwaff1)); - set2 = isl_pw_aff_domain(isl_pw_aff_copy(pwaff2)); - set1 = isl_set_intersect(set1, set2); - pwaff1 = isl_pw_aff_intersect_domain(pwaff1, isl_set_copy(set1)); - pwaff2 = isl_pw_aff_intersect_domain(pwaff2, isl_set_copy(set1)); - pwaff1 = isl_pw_aff_add(pwaff1, isl_pw_aff_neg(pwaff2)); - - if (strict) { - isl_dim *dim = isl_set_get_dim(set1); - isl_aff *aff; - aff = isl_aff_zero(isl_local_space_from_dim(dim)); - aff = isl_aff_add_constant_si(aff, -1); - pwaff1 = isl_pw_aff_add(pwaff1, isl_pw_aff_alloc(set1, aff)); - } else - isl_set_free(set1); - - if (equal) - return isl_pw_aff_zero_set(pwaff1); - return isl_pw_aff_nonneg_set(pwaff1); -} - -/* Return a set containing those elements in the shared domain - * of pwaff1 and pwaff2 where pwaff1 is equal to pwaff2. - */ -__isl_give isl_set *isl_pw_aff_eq_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return pw_aff_gte_set(pwaff1, pwaff2, 0, 1); -} - -/* Return a set containing those elements in the shared domain - * of pwaff1 and pwaff2 where pwaff1 is greater than or equal to pwaff2. - */ -__isl_give isl_set *isl_pw_aff_ge_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return pw_aff_gte_set(pwaff1, pwaff2, 0, 0); -} - -/* Return a set containing those elements in the shared domain - * of pwaff1 and pwaff2 where pwaff1 is strictly greater than pwaff2. - */ -__isl_give isl_set *isl_pw_aff_gt_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return pw_aff_gte_set(pwaff1, pwaff2, 1, 0); -} - -__isl_give isl_set *isl_pw_aff_le_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return isl_pw_aff_ge_set(pwaff2, pwaff1); -} - -__isl_give isl_set *isl_pw_aff_lt_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return isl_pw_aff_gt_set(pwaff2, pwaff1); -} - -__isl_give isl_pw_aff *isl_pw_aff_scale_down(__isl_take isl_pw_aff *pwaff, - isl_int v) -{ - int i; - - if (isl_int_is_one(v)) - return pwaff; - if (!isl_int_is_pos(v)) - isl_die(isl_pw_aff_get_ctx(pwaff), isl_error_invalid, - "factor needs to be positive", - return isl_pw_aff_free(pwaff)); - pwaff = isl_pw_aff_cow(pwaff); - if (!pwaff) - return NULL; - if (pwaff->n == 0) - return pwaff; - - for (i = 0; i < pwaff->n; ++i) { - pwaff->p[i].aff = isl_aff_scale_down(pwaff->p[i].aff, v); - if (!pwaff->p[i].aff) - return isl_pw_aff_free(pwaff); - } - - return pwaff; -} - -__isl_give isl_pw_aff *isl_pw_aff_floor(__isl_take isl_pw_aff *pwaff) -{ - int i; - - pwaff = isl_pw_aff_cow(pwaff); - if (!pwaff) - return NULL; - if (pwaff->n == 0) - return pwaff; - - for (i = 0; i < pwaff->n; ++i) { - pwaff->p[i].aff = isl_aff_floor(pwaff->p[i].aff); - if (!pwaff->p[i].aff) - return isl_pw_aff_free(pwaff); - } - - return pwaff; -} - -__isl_give isl_pw_aff *isl_pw_aff_ceil(__isl_take isl_pw_aff *pwaff) -{ - int i; - - pwaff = isl_pw_aff_cow(pwaff); - if (!pwaff) - return NULL; - if (pwaff->n == 0) - return pwaff; - - for (i = 0; i < pwaff->n; ++i) { - pwaff->p[i].aff = isl_aff_ceil(pwaff->p[i].aff); - if (!pwaff->p[i].aff) - return isl_pw_aff_free(pwaff); - } - - return pwaff; -} - -/* Return an affine expression that is equal to pwaff_true for elements - * in "cond" and to pwaff_false for elements not in "cond". - * That is, return cond ? pwaff_true : pwaff_false; - */ -__isl_give isl_pw_aff *isl_pw_aff_cond(__isl_take isl_set *cond, - __isl_take isl_pw_aff *pwaff_true, __isl_take isl_pw_aff *pwaff_false) -{ - isl_set *comp; - - comp = isl_set_complement(isl_set_copy(cond)); - pwaff_true = isl_pw_aff_intersect_domain(pwaff_true, cond); - pwaff_false = isl_pw_aff_intersect_domain(pwaff_false, comp); - - return isl_pw_aff_add_disjoint(pwaff_true, pwaff_false); -} diff --git a/cloog-0.16.3/isl/isl_aff_private.h b/cloog-0.16.3/isl/isl_aff_private.h deleted file mode 100644 index cd51804..0000000 --- a/cloog-0.16.3/isl/isl_aff_private.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef ISL_AFF_PRIVATE_H -#define ISL_AFF_PRIVATE_H - -#include -#include -#include -#include - -struct isl_aff { - int ref; - - isl_local_space *ls; - isl_vec *v; -}; - -struct isl_pw_aff_piece { - struct isl_set *set; - struct isl_aff *aff; -}; - -struct isl_pw_aff { - int ref; - - isl_dim *dim; - - int n; - - size_t size; - struct isl_pw_aff_piece p[1]; -}; - -__isl_give isl_aff *isl_aff_alloc(__isl_take isl_local_space *ls); - -__isl_give isl_aff *isl_aff_reset_dim(__isl_take isl_aff *aff, - __isl_take isl_dim *dim); -__isl_give isl_aff *isl_aff_realign(__isl_take isl_aff *aff, - __isl_take isl_reordering *r); - -__isl_give isl_aff *isl_aff_expand_divs( __isl_take isl_aff *aff, - __isl_take isl_mat *div, int *exp); - -__isl_give isl_pw_aff *isl_pw_aff_add_disjoint( - __isl_take isl_pw_aff *pwaff1, __isl_take isl_pw_aff *pwaff2); - -#endif diff --git a/cloog-0.16.3/isl/isl_affine_hull.c b/cloog-0.16.3/isl/isl_affine_hull.c deleted file mode 100644 index ffb775b..0000000 --- a/cloog-0.16.3/isl/isl_affine_hull.c +++ /dev/null @@ -1,1018 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include -#include -#include "isl_equalities.h" -#include "isl_sample.h" -#include "isl_tab.h" -#include - -struct isl_basic_map *isl_basic_map_implicit_equalities( - struct isl_basic_map *bmap) -{ - struct isl_tab *tab; - - if (!bmap) - return bmap; - - bmap = isl_basic_map_gauss(bmap, NULL); - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) - return bmap; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_NO_IMPLICIT)) - return bmap; - if (bmap->n_ineq <= 1) - return bmap; - - tab = isl_tab_from_basic_map(bmap); - if (isl_tab_detect_implicit_equalities(tab) < 0) - goto error; - bmap = isl_basic_map_update_from_tab(bmap, tab); - isl_tab_free(tab); - bmap = isl_basic_map_gauss(bmap, NULL); - ISL_F_SET(bmap, ISL_BASIC_MAP_NO_IMPLICIT); - return bmap; -error: - isl_tab_free(tab); - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_implicit_equalities( - struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_implicit_equalities((struct isl_basic_map*)bset); -} - -struct isl_map *isl_map_implicit_equalities(struct isl_map *map) -{ - int i; - - if (!map) - return map; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_implicit_equalities(map->p[i]); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Make eq[row][col] of both bmaps equal so we can add the row - * add the column to the common matrix. - * Note that because of the echelon form, the columns of row row - * after column col are zero. - */ -static void set_common_multiple( - struct isl_basic_set *bset1, struct isl_basic_set *bset2, - unsigned row, unsigned col) -{ - isl_int m, c; - - if (isl_int_eq(bset1->eq[row][col], bset2->eq[row][col])) - return; - - isl_int_init(c); - isl_int_init(m); - isl_int_lcm(m, bset1->eq[row][col], bset2->eq[row][col]); - isl_int_divexact(c, m, bset1->eq[row][col]); - isl_seq_scale(bset1->eq[row], bset1->eq[row], c, col+1); - isl_int_divexact(c, m, bset2->eq[row][col]); - isl_seq_scale(bset2->eq[row], bset2->eq[row], c, col+1); - isl_int_clear(c); - isl_int_clear(m); -} - -/* Delete a given equality, moving all the following equalities one up. - */ -static void delete_row(struct isl_basic_set *bset, unsigned row) -{ - isl_int *t; - int r; - - t = bset->eq[row]; - bset->n_eq--; - for (r = row; r < bset->n_eq; ++r) - bset->eq[r] = bset->eq[r+1]; - bset->eq[bset->n_eq] = t; -} - -/* Make first row entries in column col of bset1 identical to - * those of bset2, using the fact that entry bset1->eq[row][col]=a - * is non-zero. Initially, these elements of bset1 are all zero. - * For each row i < row, we set - * A[i] = a * A[i] + B[i][col] * A[row] - * B[i] = a * B[i] - * so that - * A[i][col] = B[i][col] = a * old(B[i][col]) - */ -static void construct_column( - struct isl_basic_set *bset1, struct isl_basic_set *bset2, - unsigned row, unsigned col) -{ - int r; - isl_int a; - isl_int b; - unsigned total; - - isl_int_init(a); - isl_int_init(b); - total = 1 + isl_basic_set_n_dim(bset1); - for (r = 0; r < row; ++r) { - if (isl_int_is_zero(bset2->eq[r][col])) - continue; - isl_int_gcd(b, bset2->eq[r][col], bset1->eq[row][col]); - isl_int_divexact(a, bset1->eq[row][col], b); - isl_int_divexact(b, bset2->eq[r][col], b); - isl_seq_combine(bset1->eq[r], a, bset1->eq[r], - b, bset1->eq[row], total); - isl_seq_scale(bset2->eq[r], bset2->eq[r], a, total); - } - isl_int_clear(a); - isl_int_clear(b); - delete_row(bset1, row); -} - -/* Make first row entries in column col of bset1 identical to - * those of bset2, using only these entries of the two matrices. - * Let t be the last row with different entries. - * For each row i < t, we set - * A[i] = (A[t][col]-B[t][col]) * A[i] + (B[i][col]-A[i][col) * A[t] - * B[i] = (A[t][col]-B[t][col]) * B[i] + (B[i][col]-A[i][col) * B[t] - * so that - * A[i][col] = B[i][col] = old(A[t][col]*B[i][col]-A[i][col]*B[t][col]) - */ -static int transform_column( - struct isl_basic_set *bset1, struct isl_basic_set *bset2, - unsigned row, unsigned col) -{ - int i, t; - isl_int a, b, g; - unsigned total; - - for (t = row-1; t >= 0; --t) - if (isl_int_ne(bset1->eq[t][col], bset2->eq[t][col])) - break; - if (t < 0) - return 0; - - total = 1 + isl_basic_set_n_dim(bset1); - isl_int_init(a); - isl_int_init(b); - isl_int_init(g); - isl_int_sub(b, bset1->eq[t][col], bset2->eq[t][col]); - for (i = 0; i < t; ++i) { - isl_int_sub(a, bset2->eq[i][col], bset1->eq[i][col]); - isl_int_gcd(g, a, b); - isl_int_divexact(a, a, g); - isl_int_divexact(g, b, g); - isl_seq_combine(bset1->eq[i], g, bset1->eq[i], a, bset1->eq[t], - total); - isl_seq_combine(bset2->eq[i], g, bset2->eq[i], a, bset2->eq[t], - total); - } - isl_int_clear(a); - isl_int_clear(b); - isl_int_clear(g); - delete_row(bset1, t); - delete_row(bset2, t); - return 1; -} - -/* The implementation is based on Section 5.2 of Michael Karr, - * "Affine Relationships Among Variables of a Program", - * except that the echelon form we use starts from the last column - * and that we are dealing with integer coefficients. - */ -static struct isl_basic_set *affine_hull( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - unsigned total; - int col; - int row; - - if (!bset1 || !bset2) - goto error; - - total = 1 + isl_basic_set_n_dim(bset1); - - row = 0; - for (col = total-1; col >= 0; --col) { - int is_zero1 = row >= bset1->n_eq || - isl_int_is_zero(bset1->eq[row][col]); - int is_zero2 = row >= bset2->n_eq || - isl_int_is_zero(bset2->eq[row][col]); - if (!is_zero1 && !is_zero2) { - set_common_multiple(bset1, bset2, row, col); - ++row; - } else if (!is_zero1 && is_zero2) { - construct_column(bset1, bset2, row, col); - } else if (is_zero1 && !is_zero2) { - construct_column(bset2, bset1, row, col); - } else { - if (transform_column(bset1, bset2, row, col)) - --row; - } - } - isl_assert(bset1->ctx, row == bset1->n_eq, goto error); - isl_basic_set_free(bset2); - bset1 = isl_basic_set_normalize_constraints(bset1); - return bset1; -error: - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return NULL; -} - -/* Find an integer point in the set represented by "tab" - * that lies outside of the equality "eq" e(x) = 0. - * If "up" is true, look for a point satisfying e(x) - 1 >= 0. - * Otherwise, look for a point satisfying -e(x) - 1 >= 0 (i.e., e(x) <= -1). - * The point, if found, is returned. - * If no point can be found, a zero-length vector is returned. - * - * Before solving an ILP problem, we first check if simply - * adding the normal of the constraint to one of the known - * integer points in the basic set represented by "tab" - * yields another point inside the basic set. - * - * The caller of this function ensures that the tableau is bounded or - * that tab->basis and tab->n_unbounded have been set appropriately. - */ -static struct isl_vec *outside_point(struct isl_tab *tab, isl_int *eq, int up) -{ - struct isl_ctx *ctx; - struct isl_vec *sample = NULL; - struct isl_tab_undo *snap; - unsigned dim; - - if (!tab) - return NULL; - ctx = tab->mat->ctx; - - dim = tab->n_var; - sample = isl_vec_alloc(ctx, 1 + dim); - if (!sample) - return NULL; - isl_int_set_si(sample->el[0], 1); - isl_seq_combine(sample->el + 1, - ctx->one, tab->bmap->sample->el + 1, - up ? ctx->one : ctx->negone, eq + 1, dim); - if (isl_basic_map_contains(tab->bmap, sample)) - return sample; - isl_vec_free(sample); - sample = NULL; - - snap = isl_tab_snap(tab); - - if (!up) - isl_seq_neg(eq, eq, 1 + dim); - isl_int_sub_ui(eq[0], eq[0], 1); - - if (isl_tab_extend_cons(tab, 1) < 0) - goto error; - if (isl_tab_add_ineq(tab, eq) < 0) - goto error; - - sample = isl_tab_sample(tab); - - isl_int_add_ui(eq[0], eq[0], 1); - if (!up) - isl_seq_neg(eq, eq, 1 + dim); - - if (sample && isl_tab_rollback(tab, snap) < 0) - goto error; - - return sample; -error: - isl_vec_free(sample); - return NULL; -} - -struct isl_basic_set *isl_basic_set_recession_cone(struct isl_basic_set *bset) -{ - int i; - - bset = isl_basic_set_cow(bset); - if (!bset) - return NULL; - isl_assert(bset->ctx, bset->n_div == 0, goto error); - - for (i = 0; i < bset->n_eq; ++i) - isl_int_set_si(bset->eq[i][0], 0); - - for (i = 0; i < bset->n_ineq; ++i) - isl_int_set_si(bset->ineq[i][0], 0); - - ISL_F_CLR(bset, ISL_BASIC_SET_NO_IMPLICIT); - return isl_basic_set_implicit_equalities(bset); -error: - isl_basic_set_free(bset); - return NULL; -} - -__isl_give isl_set *isl_set_recession_cone(__isl_take isl_set *set) -{ - int i; - - if (!set) - return NULL; - if (set->n == 0) - return set; - - set = isl_set_remove_divs(set); - set = isl_set_cow(set); - if (!set) - return NULL; - - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_recession_cone(set->p[i]); - if (!set->p[i]) - goto error; - } - - return set; -error: - isl_set_free(set); - return NULL; -} - -/* Extend an initial (under-)approximation of the affine hull of basic - * set represented by the tableau "tab" - * by looking for points that do not satisfy one of the equalities - * in the current approximation and adding them to that approximation - * until no such points can be found any more. - * - * The caller of this function ensures that "tab" is bounded or - * that tab->basis and tab->n_unbounded have been set appropriately. - */ -static struct isl_basic_set *extend_affine_hull(struct isl_tab *tab, - struct isl_basic_set *hull) -{ - int i, j; - unsigned dim; - - if (!tab || !hull) - goto error; - - dim = tab->n_var; - - if (isl_tab_extend_cons(tab, 2 * dim + 1) < 0) - goto error; - - for (i = 0; i < dim; ++i) { - struct isl_vec *sample; - struct isl_basic_set *point; - for (j = 0; j < hull->n_eq; ++j) { - sample = outside_point(tab, hull->eq[j], 1); - if (!sample) - goto error; - if (sample->size > 0) - break; - isl_vec_free(sample); - sample = outside_point(tab, hull->eq[j], 0); - if (!sample) - goto error; - if (sample->size > 0) - break; - isl_vec_free(sample); - - if (isl_tab_add_eq(tab, hull->eq[j]) < 0) - goto error; - } - if (j == hull->n_eq) - break; - if (tab->samples) - tab = isl_tab_add_sample(tab, isl_vec_copy(sample)); - if (!tab) - goto error; - point = isl_basic_set_from_vec(sample); - hull = affine_hull(hull, point); - if (!hull) - return NULL; - } - - return hull; -error: - isl_basic_set_free(hull); - return NULL; -} - -/* Drop all constraints in bset that involve any of the dimensions - * first to first+n-1. - */ -__isl_give isl_basic_set *isl_basic_set_drop_constraints_involving( - __isl_take isl_basic_set *bset, unsigned first, unsigned n) -{ - int i; - - if (n == 0) - return bset; - - bset = isl_basic_set_cow(bset); - - if (!bset) - return NULL; - - for (i = bset->n_eq - 1; i >= 0; --i) { - if (isl_seq_first_non_zero(bset->eq[i] + 1 + first, n) == -1) - continue; - isl_basic_set_drop_equality(bset, i); - } - - for (i = bset->n_ineq - 1; i >= 0; --i) { - if (isl_seq_first_non_zero(bset->ineq[i] + 1 + first, n) == -1) - continue; - isl_basic_set_drop_inequality(bset, i); - } - - return bset; -} - -/* Look for all equalities satisfied by the integer points in bset, - * which is assumed to be bounded. - * - * The equalities are obtained by successively looking for - * a point that is affinely independent of the points found so far. - * In particular, for each equality satisfied by the points so far, - * we check if there is any point on a hyperplane parallel to the - * corresponding hyperplane shifted by at least one (in either direction). - */ -static struct isl_basic_set *uset_affine_hull_bounded(struct isl_basic_set *bset) -{ - struct isl_vec *sample = NULL; - struct isl_basic_set *hull; - struct isl_tab *tab = NULL; - unsigned dim; - - if (isl_basic_set_plain_is_empty(bset)) - return bset; - - dim = isl_basic_set_n_dim(bset); - - if (bset->sample && bset->sample->size == 1 + dim) { - int contains = isl_basic_set_contains(bset, bset->sample); - if (contains < 0) - goto error; - if (contains) { - if (dim == 0) - return bset; - sample = isl_vec_copy(bset->sample); - } else { - isl_vec_free(bset->sample); - bset->sample = NULL; - } - } - - tab = isl_tab_from_basic_set(bset); - if (!tab) - goto error; - if (tab->empty) { - isl_tab_free(tab); - isl_vec_free(sample); - return isl_basic_set_set_to_empty(bset); - } - if (isl_tab_track_bset(tab, isl_basic_set_copy(bset)) < 0) - goto error; - - if (!sample) { - struct isl_tab_undo *snap; - snap = isl_tab_snap(tab); - sample = isl_tab_sample(tab); - if (isl_tab_rollback(tab, snap) < 0) - goto error; - isl_vec_free(tab->bmap->sample); - tab->bmap->sample = isl_vec_copy(sample); - } - - if (!sample) - goto error; - if (sample->size == 0) { - isl_tab_free(tab); - isl_vec_free(sample); - return isl_basic_set_set_to_empty(bset); - } - - hull = isl_basic_set_from_vec(sample); - - isl_basic_set_free(bset); - hull = extend_affine_hull(tab, hull); - isl_tab_free(tab); - - return hull; -error: - isl_vec_free(sample); - isl_tab_free(tab); - isl_basic_set_free(bset); - return NULL; -} - -/* Given an unbounded tableau and an integer point satisfying the tableau, - * construct an initial affine hull containing the recession cone - * shifted to the given point. - * - * The unbounded directions are taken from the last rows of the basis, - * which is assumed to have been initialized appropriately. - */ -static __isl_give isl_basic_set *initial_hull(struct isl_tab *tab, - __isl_take isl_vec *vec) -{ - int i; - int k; - struct isl_basic_set *bset = NULL; - struct isl_ctx *ctx; - unsigned dim; - - if (!vec || !tab) - return NULL; - ctx = vec->ctx; - isl_assert(ctx, vec->size != 0, goto error); - - bset = isl_basic_set_alloc(ctx, 0, vec->size - 1, 0, vec->size - 1, 0); - if (!bset) - goto error; - dim = isl_basic_set_n_dim(bset) - tab->n_unbounded; - for (i = 0; i < dim; ++i) { - k = isl_basic_set_alloc_equality(bset); - if (k < 0) - goto error; - isl_seq_cpy(bset->eq[k] + 1, tab->basis->row[1 + i] + 1, - vec->size - 1); - isl_seq_inner_product(bset->eq[k] + 1, vec->el +1, - vec->size - 1, &bset->eq[k][0]); - isl_int_neg(bset->eq[k][0], bset->eq[k][0]); - } - bset->sample = vec; - bset = isl_basic_set_gauss(bset, NULL); - - return bset; -error: - isl_basic_set_free(bset); - isl_vec_free(vec); - return NULL; -} - -/* Given a tableau of a set and a tableau of the corresponding - * recession cone, detect and add all equalities to the tableau. - * If the tableau is bounded, then we can simply keep the - * tableau in its state after the return from extend_affine_hull. - * However, if the tableau is unbounded, then - * isl_tab_set_initial_basis_with_cone will add some additional - * constraints to the tableau that have to be removed again. - * In this case, we therefore rollback to the state before - * any constraints were added and then add the equalities back in. - */ -struct isl_tab *isl_tab_detect_equalities(struct isl_tab *tab, - struct isl_tab *tab_cone) -{ - int j; - struct isl_vec *sample; - struct isl_basic_set *hull; - struct isl_tab_undo *snap; - - if (!tab || !tab_cone) - goto error; - - snap = isl_tab_snap(tab); - - isl_mat_free(tab->basis); - tab->basis = NULL; - - isl_assert(tab->mat->ctx, tab->bmap, goto error); - isl_assert(tab->mat->ctx, tab->samples, goto error); - isl_assert(tab->mat->ctx, tab->samples->n_col == 1 + tab->n_var, goto error); - isl_assert(tab->mat->ctx, tab->n_sample > tab->n_outside, goto error); - - if (isl_tab_set_initial_basis_with_cone(tab, tab_cone) < 0) - goto error; - - sample = isl_vec_alloc(tab->mat->ctx, 1 + tab->n_var); - if (!sample) - goto error; - - isl_seq_cpy(sample->el, tab->samples->row[tab->n_outside], sample->size); - - isl_vec_free(tab->bmap->sample); - tab->bmap->sample = isl_vec_copy(sample); - - if (tab->n_unbounded == 0) - hull = isl_basic_set_from_vec(isl_vec_copy(sample)); - else - hull = initial_hull(tab, isl_vec_copy(sample)); - - for (j = tab->n_outside + 1; j < tab->n_sample; ++j) { - isl_seq_cpy(sample->el, tab->samples->row[j], sample->size); - hull = affine_hull(hull, - isl_basic_set_from_vec(isl_vec_copy(sample))); - } - - isl_vec_free(sample); - - hull = extend_affine_hull(tab, hull); - if (!hull) - goto error; - - if (tab->n_unbounded == 0) { - isl_basic_set_free(hull); - return tab; - } - - if (isl_tab_rollback(tab, snap) < 0) - goto error; - - if (hull->n_eq > tab->n_zero) { - for (j = 0; j < hull->n_eq; ++j) { - isl_seq_normalize(tab->mat->ctx, hull->eq[j], 1 + tab->n_var); - if (isl_tab_add_eq(tab, hull->eq[j]) < 0) - goto error; - } - } - - isl_basic_set_free(hull); - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Compute the affine hull of "bset", where "cone" is the recession cone - * of "bset". - * - * We first compute a unimodular transformation that puts the unbounded - * directions in the last dimensions. In particular, we take a transformation - * that maps all equalities to equalities (in HNF) on the first dimensions. - * Let x be the original dimensions and y the transformed, with y_1 bounded - * and y_2 unbounded. - * - * [ y_1 ] [ y_1 ] [ Q_1 ] - * x = U [ y_2 ] [ y_2 ] = [ Q_2 ] x - * - * Let's call the input basic set S. We compute S' = preimage(S, U) - * and drop the final dimensions including any constraints involving them. - * This results in set S''. - * Then we compute the affine hull A'' of S''. - * Let F y_1 >= g be the constraint system of A''. In the transformed - * space the y_2 are unbounded, so we can add them back without any constraints, - * resulting in - * - * [ y_1 ] - * [ F 0 ] [ y_2 ] >= g - * or - * [ Q_1 ] - * [ F 0 ] [ Q_2 ] x >= g - * or - * F Q_1 x >= g - * - * The affine hull in the original space is then obtained as - * A = preimage(A'', Q_1). - */ -static struct isl_basic_set *affine_hull_with_cone(struct isl_basic_set *bset, - struct isl_basic_set *cone) -{ - unsigned total; - unsigned cone_dim; - struct isl_basic_set *hull; - struct isl_mat *M, *U, *Q; - - if (!bset || !cone) - goto error; - - total = isl_basic_set_total_dim(cone); - cone_dim = total - cone->n_eq; - - M = isl_mat_sub_alloc6(bset->ctx, cone->eq, 0, cone->n_eq, 1, total); - M = isl_mat_left_hermite(M, 0, &U, &Q); - if (!M) - goto error; - isl_mat_free(M); - - U = isl_mat_lin_to_aff(U); - bset = isl_basic_set_preimage(bset, isl_mat_copy(U)); - - bset = isl_basic_set_drop_constraints_involving(bset, total - cone_dim, - cone_dim); - bset = isl_basic_set_drop_dims(bset, total - cone_dim, cone_dim); - - Q = isl_mat_lin_to_aff(Q); - Q = isl_mat_drop_rows(Q, 1 + total - cone_dim, cone_dim); - - if (bset && bset->sample && bset->sample->size == 1 + total) - bset->sample = isl_mat_vec_product(isl_mat_copy(Q), bset->sample); - - hull = uset_affine_hull_bounded(bset); - - if (!hull) - isl_mat_free(U); - else { - struct isl_vec *sample = isl_vec_copy(hull->sample); - U = isl_mat_drop_cols(U, 1 + total - cone_dim, cone_dim); - if (sample && sample->size > 0) - sample = isl_mat_vec_product(U, sample); - else - isl_mat_free(U); - hull = isl_basic_set_preimage(hull, Q); - if (hull) { - isl_vec_free(hull->sample); - hull->sample = sample; - } else - isl_vec_free(sample); - } - - isl_basic_set_free(cone); - - return hull; -error: - isl_basic_set_free(bset); - isl_basic_set_free(cone); - return NULL; -} - -/* Look for all equalities satisfied by the integer points in bset, - * which is assumed not to have any explicit equalities. - * - * The equalities are obtained by successively looking for - * a point that is affinely independent of the points found so far. - * In particular, for each equality satisfied by the points so far, - * we check if there is any point on a hyperplane parallel to the - * corresponding hyperplane shifted by at least one (in either direction). - * - * Before looking for any outside points, we first compute the recession - * cone. The directions of this recession cone will always be part - * of the affine hull, so there is no need for looking for any points - * in these directions. - * In particular, if the recession cone is full-dimensional, then - * the affine hull is simply the whole universe. - */ -static struct isl_basic_set *uset_affine_hull(struct isl_basic_set *bset) -{ - struct isl_basic_set *cone; - - if (isl_basic_set_plain_is_empty(bset)) - return bset; - - cone = isl_basic_set_recession_cone(isl_basic_set_copy(bset)); - if (!cone) - goto error; - if (cone->n_eq == 0) { - struct isl_basic_set *hull; - isl_basic_set_free(cone); - hull = isl_basic_set_universe_like(bset); - isl_basic_set_free(bset); - return hull; - } - - if (cone->n_eq < isl_basic_set_total_dim(cone)) - return affine_hull_with_cone(bset, cone); - - isl_basic_set_free(cone); - return uset_affine_hull_bounded(bset); -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Look for all equalities satisfied by the integer points in bmap - * that are independent of the equalities already explicitly available - * in bmap. - * - * We first remove all equalities already explicitly available, - * then look for additional equalities in the reduced space - * and then transform the result to the original space. - * The original equalities are _not_ added to this set. This is - * the responsibility of the calling function. - * The resulting basic set has all meaning about the dimensions removed. - * In particular, dimensions that correspond to existential variables - * in bmap and that are found to be fixed are not removed. - */ -static struct isl_basic_set *equalities_in_underlying_set( - struct isl_basic_map *bmap) -{ - struct isl_mat *T1 = NULL; - struct isl_mat *T2 = NULL; - struct isl_basic_set *bset = NULL; - struct isl_basic_set *hull = NULL; - - bset = isl_basic_map_underlying_set(bmap); - if (!bset) - return NULL; - if (bset->n_eq) - bset = isl_basic_set_remove_equalities(bset, &T1, &T2); - if (!bset) - goto error; - - hull = uset_affine_hull(bset); - if (!T2) - return hull; - - if (!hull) { - isl_mat_free(T1); - isl_mat_free(T2); - } else { - struct isl_vec *sample = isl_vec_copy(hull->sample); - if (sample && sample->size > 0) - sample = isl_mat_vec_product(T1, sample); - else - isl_mat_free(T1); - hull = isl_basic_set_preimage(hull, T2); - if (hull) { - isl_vec_free(hull->sample); - hull->sample = sample; - } else - isl_vec_free(sample); - } - - return hull; -error: - isl_mat_free(T2); - isl_basic_set_free(bset); - isl_basic_set_free(hull); - return NULL; -} - -/* Detect and make explicit all equalities satisfied by the (integer) - * points in bmap. - */ -struct isl_basic_map *isl_basic_map_detect_equalities( - struct isl_basic_map *bmap) -{ - int i, j; - struct isl_basic_set *hull = NULL; - - if (!bmap) - return NULL; - if (bmap->n_ineq == 0) - return bmap; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) - return bmap; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_ALL_EQUALITIES)) - return bmap; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL)) - return isl_basic_map_implicit_equalities(bmap); - - hull = equalities_in_underlying_set(isl_basic_map_copy(bmap)); - if (!hull) - goto error; - if (ISL_F_ISSET(hull, ISL_BASIC_SET_EMPTY)) { - isl_basic_set_free(hull); - return isl_basic_map_set_to_empty(bmap); - } - bmap = isl_basic_map_extend_dim(bmap, isl_dim_copy(bmap->dim), 0, - hull->n_eq, 0); - for (i = 0; i < hull->n_eq; ++i) { - j = isl_basic_map_alloc_equality(bmap); - if (j < 0) - goto error; - isl_seq_cpy(bmap->eq[j], hull->eq[i], - 1 + isl_basic_set_total_dim(hull)); - } - isl_vec_free(bmap->sample); - bmap->sample = isl_vec_copy(hull->sample); - isl_basic_set_free(hull); - ISL_F_SET(bmap, ISL_BASIC_MAP_NO_IMPLICIT | ISL_BASIC_MAP_ALL_EQUALITIES); - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_set_free(hull); - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_detect_equalities( - __isl_take isl_basic_set *bset) -{ - return (isl_basic_set *) - isl_basic_map_detect_equalities((isl_basic_map *)bset); -} - -__isl_give isl_map *isl_map_inline_foreach_basic_map(__isl_take isl_map *map, - __isl_give isl_basic_map *(*fn)(__isl_take isl_basic_map *bmap)) -{ - struct isl_basic_map *bmap; - int i; - - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - bmap = isl_basic_map_copy(map->p[i]); - bmap = fn(bmap); - if (!bmap) - goto error; - isl_basic_map_free(map->p[i]); - map->p[i] = bmap; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_map *isl_map_detect_equalities(__isl_take isl_map *map) -{ - return isl_map_inline_foreach_basic_map(map, - &isl_basic_map_detect_equalities); -} - -__isl_give isl_set *isl_set_detect_equalities(__isl_take isl_set *set) -{ - return (isl_set *)isl_map_detect_equalities((isl_map *)set); -} - -/* After computing the rational affine hull (by detecting the implicit - * equalities), we compute the additional equalities satisfied by - * the integer points (if any) and add the original equalities back in. - */ -struct isl_basic_map *isl_basic_map_affine_hull(struct isl_basic_map *bmap) -{ - bmap = isl_basic_map_detect_equalities(bmap); - bmap = isl_basic_map_cow(bmap); - if (bmap) - isl_basic_map_free_inequality(bmap, bmap->n_ineq); - bmap = isl_basic_map_finalize(bmap); - return bmap; -} - -struct isl_basic_set *isl_basic_set_affine_hull(struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_affine_hull((struct isl_basic_map *)bset); -} - -struct isl_basic_map *isl_map_affine_hull(struct isl_map *map) -{ - int i; - struct isl_basic_map *model = NULL; - struct isl_basic_map *hull = NULL; - struct isl_set *set; - - map = isl_map_detect_equalities(map); - map = isl_map_align_divs(map); - - if (!map) - return NULL; - - if (map->n == 0) { - hull = isl_basic_map_empty_like_map(map); - isl_map_free(map); - return hull; - } - - model = isl_basic_map_copy(map->p[0]); - set = isl_map_underlying_set(map); - set = isl_set_cow(set); - if (!set) - goto error; - - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_cow(set->p[i]); - set->p[i] = isl_basic_set_affine_hull(set->p[i]); - set->p[i] = isl_basic_set_gauss(set->p[i], NULL); - if (!set->p[i]) - goto error; - } - set = isl_set_remove_empty_parts(set); - if (set->n == 0) { - hull = isl_basic_map_empty_like(model); - isl_basic_map_free(model); - } else { - struct isl_basic_set *bset; - while (set->n > 1) { - set->p[0] = affine_hull(set->p[0], set->p[--set->n]); - if (!set->p[0]) - goto error; - } - bset = isl_basic_set_copy(set->p[0]); - hull = isl_basic_map_overlying_set(bset, model); - } - isl_set_free(set); - hull = isl_basic_map_simplify(hull); - return isl_basic_map_finalize(hull); -error: - isl_basic_map_free(model); - isl_set_free(set); - return NULL; -} - -struct isl_basic_set *isl_set_affine_hull(struct isl_set *set) -{ - return (struct isl_basic_set *) - isl_map_affine_hull((struct isl_map *)set); -} diff --git a/cloog-0.16.3/isl/isl_arg.c b/cloog-0.16.3/isl/isl_arg.c deleted file mode 100644 index f470478..0000000 --- a/cloog-0.16.3/isl/isl_arg.c +++ /dev/null @@ -1,1110 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include - -#include -#include - -static struct isl_arg help_arg[] = { -ISL_ARG_PHANTOM_BOOL('h', "help", NULL, "print this help, then exit") -ISL_ARG_END -}; - -static void set_default_choice(struct isl_arg *arg, void *opt) -{ - *(unsigned *)(((char *)opt) + arg->offset) = arg->u.choice.default_value; -} - -static void set_default_flags(struct isl_arg *arg, void *opt) -{ - *(unsigned *)(((char *)opt) + arg->offset) = arg->u.flags.default_value; -} - -static void set_default_bool(struct isl_arg *arg, void *opt) -{ - if (arg->offset == (size_t) -1) - return; - *(unsigned *)(((char *)opt) + arg->offset) = arg->u.b.default_value; -} - -static void set_default_child(struct isl_arg *arg, void *opt) -{ - void *child; - - if (arg->offset == (size_t) -1) - child = opt; - else { - child = calloc(1, arg->u.child.size); - *(void **)(((char *)opt) + arg->offset) = child; - } - - if (child) - isl_arg_set_defaults(arg->u.child.child, child); -} - -static void set_default_user(struct isl_arg *arg, void *opt) -{ - arg->u.user.init(((char *)opt) + arg->offset); -} - -static void set_default_int(struct isl_arg *arg, void *opt) -{ - *(int *)(((char *)opt) + arg->offset) = arg->u.i.default_value; -} - -static void set_default_long(struct isl_arg *arg, void *opt) -{ - *(long *)(((char *)opt) + arg->offset) = arg->u.l.default_value; -} - -static void set_default_ulong(struct isl_arg *arg, void *opt) -{ - *(unsigned long *)(((char *)opt) + arg->offset) = arg->u.ul.default_value; -} - -static void set_default_str(struct isl_arg *arg, void *opt) -{ - const char *str = NULL; - if (arg->u.str.default_value) - str = strdup(arg->u.str.default_value); - *(const char **)(((char *)opt) + arg->offset) = str; -} - -void isl_arg_set_defaults(struct isl_arg *arg, void *opt) -{ - int i; - - for (i = 0; arg[i].type != isl_arg_end; ++i) { - switch (arg[i].type) { - case isl_arg_choice: - set_default_choice(&arg[i], opt); - break; - case isl_arg_flags: - set_default_flags(&arg[i], opt); - break; - case isl_arg_bool: - set_default_bool(&arg[i], opt); - break; - case isl_arg_child: - set_default_child(&arg[i], opt); - break; - case isl_arg_user: - set_default_user(&arg[i], opt); - break; - case isl_arg_int: - set_default_int(&arg[i], opt); - break; - case isl_arg_long: - set_default_long(&arg[i], opt); - break; - case isl_arg_ulong: - set_default_ulong(&arg[i], opt); - break; - case isl_arg_arg: - case isl_arg_str: - set_default_str(&arg[i], opt); - break; - case isl_arg_alias: - case isl_arg_footer: - case isl_arg_version: - case isl_arg_end: - break; - } - } -} - -static void free_args(struct isl_arg *arg, void *opt) -{ - int i; - - for (i = 0; arg[i].type != isl_arg_end; ++i) { - switch (arg[i].type) { - case isl_arg_child: - if (arg[i].offset == (size_t) -1) - free_args(arg[i].u.child.child, opt); - else - isl_arg_free(arg[i].u.child.child, - *(void **)(((char *)opt) + arg[i].offset)); - break; - case isl_arg_arg: - case isl_arg_str: - free(*(char **)(((char *)opt) + arg[i].offset)); - break; - case isl_arg_user: - if (arg[i].u.user.clear) - arg[i].u.user.clear(((char *)opt) + arg[i].offset); - break; - case isl_arg_alias: - case isl_arg_bool: - case isl_arg_choice: - case isl_arg_flags: - case isl_arg_int: - case isl_arg_long: - case isl_arg_ulong: - case isl_arg_version: - case isl_arg_footer: - case isl_arg_end: - break; - } - } -} - -void isl_arg_free(struct isl_arg *arg, void *opt) -{ - if (!opt) - return; - - free_args(arg, opt); - - free(opt); -} - -static int print_arg_help(struct isl_arg *decl, const char *prefix, int no) -{ - int len = 0; - - if (!decl->long_name) { - printf(" -%c", decl->short_name); - return 4; - } - - if (decl->short_name) { - printf(" -%c, --", decl->short_name); - len += 8; - } else if (decl->flags & ISL_ARG_SINGLE_DASH) { - printf(" -"); - len += 3; - } else { - printf(" --"); - len += 8; - } - - if (prefix) { - printf("%s-", prefix); - len += strlen(prefix) + 1; - } - if (no) { - printf("no-"); - len += 3; - } - printf("%s", decl->long_name); - len += strlen(decl->long_name); - - while ((++decl)->type == isl_arg_alias) { - printf(", --"); - len += 4; - if (no) { - printf("no-"); - len += 3; - } - printf("%s", decl->long_name); - len += strlen(decl->long_name); - } - - return len; -} - -const void *isl_memrchr(const void *s, int c, size_t n) -{ - const char *p = s; - while (n-- > 0) - if (p[n] == c) - return p + n; - return NULL; -} - -static int wrap_msg(const char *s, int indent, int pos) -{ - int len; - int wrap_len = 75 - indent; - - if (pos + 1 >= indent) - printf("\n%*s", indent, ""); - else - printf("%*s", indent - pos, ""); - - len = strlen(s); - while (len > wrap_len) { - const char *space = isl_memrchr(s, ' ', wrap_len); - int l; - - if (!space) - space = strchr(s + wrap_len, ' '); - if (!space) - break; - l = space - s; - printf("%.*s", l, s); - s = space + 1; - len -= l + 1; - printf("\n%*s", indent, ""); - } - - printf("%s", s); - return len; -} - -static int print_help_msg(struct isl_arg *decl, int pos) -{ - if (!decl->help_msg) - return pos; - - return wrap_msg(decl->help_msg, 30, pos); -} - -static void print_default(struct isl_arg *decl, const char *def, int pos) -{ - const char *default_prefix = "[default: "; - const char *default_suffix = "]"; - int len; - - len = strlen(default_prefix) + strlen(def) + strlen(default_suffix); - - if (!decl->help_msg) { - if (pos >= 29) - printf("\n%30s", ""); - else - printf("%*s", 30 - pos, ""); - pos = 0; - } else { - if (pos + len >= 48) - printf("\n%30s", ""); - else - printf(" "); - } - printf("%s%s%s", default_prefix, def, default_suffix); -} - -static void print_default_choice(struct isl_arg *decl, int pos) -{ - int i; - const char *s = "none"; - - for (i = 0; decl->u.choice.choice[i].name; ++i) - if (decl->u.choice.choice[i].value == decl->u.choice.default_value) { - s = decl->u.choice.choice[i].name; - break; - } - - print_default(decl, s, pos); -} - -static void print_choice_help(struct isl_arg *decl, const char *prefix) -{ - int i; - int pos; - - pos = print_arg_help(decl, prefix, 0); - printf("="); - pos++; - - for (i = 0; decl->u.choice.choice[i].name; ++i) { - if (i) { - printf("|"); - pos++; - } - printf("%s", decl->u.choice.choice[i].name); - pos += strlen(decl->u.choice.choice[i].name); - } - - pos = print_help_msg(decl, pos); - print_default_choice(decl, pos); - - printf("\n"); -} - -static void print_default_flags(struct isl_arg *decl, int pos) -{ - int i, first; - const char *default_prefix = "[default: "; - const char *default_suffix = "]"; - int len = strlen(default_prefix) + strlen(default_suffix); - - for (i = 0; decl->u.flags.flags[i].name; ++i) - if ((decl->u.flags.default_value & decl->u.flags.flags[i].mask) == - decl->u.flags.flags[i].value) - len += strlen(decl->u.flags.flags[i].name); - - if (!decl->help_msg) { - if (pos >= 29) - printf("\n%30s", ""); - else - printf("%*s", 30 - pos, ""); - pos = 0; - } else { - if (pos + len >= 48) - printf("\n%30s", ""); - else - printf(" "); - } - printf("%s", default_prefix); - - for (first = 1, i = 0; decl->u.flags.flags[i].name; ++i) - if ((decl->u.flags.default_value & decl->u.flags.flags[i].mask) == - decl->u.flags.flags[i].value) { - if (!first) - printf(","); - printf("%s", decl->u.flags.flags[i].name); - first = 0; - } - - printf("%s", default_suffix); -} - -static void print_flags_help(struct isl_arg *decl, const char *prefix) -{ - int i, j; - int pos; - - pos = print_arg_help(decl, prefix, 0); - printf("="); - pos++; - - for (i = 0; decl->u.flags.flags[i].name; ++i) { - if (i) { - printf(","); - pos++; - } - for (j = i; - decl->u.flags.flags[j].mask == decl->u.flags.flags[i].mask; - ++j) { - if (j != i) { - printf("|"); - pos++; - } - printf("%s", decl->u.flags.flags[j].name); - pos += strlen(decl->u.flags.flags[j].name); - } - i = j - 1; - } - - pos = print_help_msg(decl, pos); - print_default_flags(decl, pos); - - printf("\n"); -} - -static void print_bool_help(struct isl_arg *decl, const char *prefix) -{ - int pos; - int no = decl->u.b.default_value == 1; - pos = print_arg_help(decl, prefix, no); - pos = print_help_msg(decl, pos); - if (decl->offset != (size_t) -1) - print_default(decl, no ? "yes" : "no", pos); - printf("\n"); -} - -static int print_argument_name(struct isl_arg *decl, const char *name, int pos) -{ - printf("%c<%s>", decl->long_name ? '=' : ' ', name); - return pos + 3 + strlen(name); -} - -static void print_int_help(struct isl_arg *decl, const char *prefix) -{ - int pos; - char val[20]; - pos = print_arg_help(decl, prefix, 0); - pos = print_argument_name(decl, decl->argument_name, pos); - pos = print_help_msg(decl, pos); - snprintf(val, sizeof(val), "%d", decl->u.i.default_value); - print_default(decl, val, pos); - printf("\n"); -} - -static void print_long_help(struct isl_arg *decl, const char *prefix) -{ - int pos; - pos = print_arg_help(decl, prefix, 0); - if (decl->u.l.default_value != decl->u.l.default_selected) { - printf("["); - pos++; - } - printf("=long"); - pos += 5; - if (decl->u.l.default_value != decl->u.l.default_selected) { - printf("]"); - pos++; - } - print_help_msg(decl, pos); - printf("\n"); -} - -static void print_ulong_help(struct isl_arg *decl, const char *prefix) -{ - int pos; - pos = print_arg_help(decl, prefix, 0); - printf("=ulong"); - pos += 6; - print_help_msg(decl, pos); - printf("\n"); -} - -static void print_str_help(struct isl_arg *decl, const char *prefix) -{ - int pos; - const char *a = decl->argument_name ? decl->argument_name : "string"; - pos = print_arg_help(decl, prefix, 0); - pos = print_argument_name(decl, a, pos); - pos = print_help_msg(decl, pos); - if (decl->u.str.default_value) - print_default(decl, decl->u.str.default_value, pos); - printf("\n"); -} - -static void print_help(struct isl_arg *arg, const char *prefix) -{ - int i; - int any = 0; - - for (i = 0; arg[i].type != isl_arg_end; ++i) { - if (arg[i].flags & ISL_ARG_HIDDEN) - continue; - switch (arg[i].type) { - case isl_arg_flags: - print_flags_help(&arg[i], prefix); - any = 1; - break; - case isl_arg_choice: - print_choice_help(&arg[i], prefix); - any = 1; - break; - case isl_arg_bool: - print_bool_help(&arg[i], prefix); - any = 1; - break; - case isl_arg_int: - print_int_help(&arg[i], prefix); - any = 1; - break; - case isl_arg_long: - print_long_help(&arg[i], prefix); - any = 1; - break; - case isl_arg_ulong: - print_ulong_help(&arg[i], prefix); - any = 1; - break; - case isl_arg_str: - print_str_help(&arg[i], prefix); - any = 1; - break; - case isl_arg_alias: - case isl_arg_version: - case isl_arg_arg: - case isl_arg_footer: - case isl_arg_child: - case isl_arg_user: - case isl_arg_end: - break; - } - } - - for (i = 0; arg[i].type != isl_arg_end; ++i) { - if (arg[i].type != isl_arg_child) - continue; - if (arg[i].flags & ISL_ARG_HIDDEN) - continue; - - if (any) - printf("\n"); - if (arg[i].help_msg) - printf(" %s\n", arg[i].help_msg); - print_help(arg[i].u.child.child, arg[i].long_name); - any = 1; - } -} - -static const char *prog_name(const char *prog) -{ - const char *slash; - - slash = strrchr(prog, '/'); - if (slash) - prog = slash + 1; - if (strncmp(prog, "lt-", 3) == 0) - prog += 3; - - return prog; -} - -static int any_version(struct isl_arg *decl) -{ - int i; - - for (i = 0; decl[i].type != isl_arg_end; ++i) { - switch (decl[i].type) { - case isl_arg_version: - return 1; - case isl_arg_child: - if (any_version(decl[i].u.child.child)) - return 1; - break; - default: - break; - } - } - - return 0; -} - -static void print_help_and_exit(struct isl_arg *arg, const char *prog) -{ - int i; - - printf("Usage: %s [OPTION...]", prog_name(prog)); - - for (i = 0; arg[i].type != isl_arg_end; ++i) - if (arg[i].type == isl_arg_arg) - printf(" %s", arg[i].argument_name); - - printf("\n\n"); - - print_help(arg, NULL); - printf("\n"); - if (any_version(arg)) - printf(" -V, --version\n"); - print_bool_help(help_arg, NULL); - - for (i = 0; arg[i].type != isl_arg_end; ++i) { - if (arg[i].type != isl_arg_footer) - continue; - wrap_msg(arg[i].help_msg, 0, 0); - printf("\n"); - } - - exit(0); -} - -static int match_long_name(struct isl_arg *decl, - const char *start, const char *end) -{ - do { - if (end - start == strlen(decl->long_name) && - !strncmp(start, decl->long_name, end - start)) - return 1; - } while ((++decl)->type == isl_arg_alias); - - return 0; -} - -static const char *skip_dash_dash(struct isl_arg *decl, const char *arg) -{ - if (!strncmp(arg, "--", 2)) - return arg + 2; - if ((decl->flags & ISL_ARG_SINGLE_DASH) && arg[0] == '-') - return arg + 1; - return NULL; -} - -static const char *skip_name(struct isl_arg *decl, const char *arg, - const char *prefix, int need_argument, int *has_argument) -{ - const char *equal; - const char *name; - const char *end; - - if (arg[0] == '-' && arg[1] && arg[1] == decl->short_name) { - if (need_argument && !arg[2]) - return NULL; - if (has_argument) - *has_argument = arg[2] != '\0'; - return arg + 2; - } - if (!decl->long_name) - return NULL; - - name = skip_dash_dash(decl, arg); - if (!name) - return NULL; - - equal = strchr(name, '='); - if (need_argument && !equal) - return NULL; - - if (has_argument) - *has_argument = !!equal; - end = equal ? equal : name + strlen(name); - - if (prefix) { - size_t prefix_len = strlen(prefix); - if (strncmp(name, prefix, prefix_len) == 0 && - name[prefix_len] == '-') - name += prefix_len + 1; - } - - if (!match_long_name(decl, name, end)) - return NULL; - - return equal ? equal + 1 : end; -} - -static int parse_choice_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int i; - int has_argument; - const char *choice; - - choice = skip_name(decl, arg[0], prefix, 0, &has_argument); - if (!choice) - return 0; - - if (!has_argument && (!arg[1] || arg[1][0] == '-')) { - unsigned u = decl->u.choice.default_selected; - if (decl->u.choice.set) - decl->u.choice.set(opt, u); - else - *(unsigned *)(((char *)opt) + decl->offset) = u; - - return 1; - } - - if (!has_argument) - choice = arg[1]; - - for (i = 0; decl->u.choice.choice[i].name; ++i) { - unsigned u; - - if (strcmp(choice, decl->u.choice.choice[i].name)) - continue; - - u = decl->u.choice.choice[i].value; - if (decl->u.choice.set) - decl->u.choice.set(opt, u); - else - *(unsigned *)(((char *)opt) + decl->offset) = u; - - return has_argument ? 1 : 2; - } - - return 0; -} - -static int set_flag(struct isl_arg *decl, unsigned *val, const char *flag, - size_t len) -{ - int i; - - for (i = 0; decl->u.flags.flags[i].name; ++i) { - if (strncmp(flag, decl->u.flags.flags[i].name, len)) - continue; - - *val &= ~decl->u.flags.flags[i].mask; - *val |= decl->u.flags.flags[i].value; - - return 1; - } - - return 0; -} - -static int parse_flags_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int has_argument; - const char *flags; - const char *comma; - unsigned val; - - flags = skip_name(decl, arg[0], prefix, 0, &has_argument); - if (!flags) - return 0; - - if (!has_argument && !arg[1]) - return 0; - - if (!has_argument) - flags = arg[1]; - - val = *(unsigned *)(((char *)opt) + decl->offset); - - while ((comma = strchr(flags, ',')) != NULL) { - if (!set_flag(decl, &val, flags, comma - flags)) - return 0; - flags = comma + 1; - } - if (!set_flag(decl, &val, flags, strlen(flags))) - return 0; - - *(unsigned *)(((char *)opt) + decl->offset) = val; - - return has_argument ? 1 : 2; -} - -static int parse_bool_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - const char *name; - unsigned *p = (unsigned *)(((char *)opt) + decl->offset); - - if (skip_name(decl, arg[0], prefix, 0, NULL)) { - if ((decl->flags & ISL_ARG_BOOL_ARG) && arg[1]) { - char *endptr; - int val = strtol(arg[1], &endptr, 0); - if (*endptr == '\0' && (val == 0 || val == 1)) { - if (decl->u.b.set) - decl->u.b.set(opt, val); - else if (decl->offset != (size_t) -1) - *p = val; - return 2; - } - } - if (decl->u.b.set) - decl->u.b.set(opt, 1); - else if (decl->offset != (size_t) -1) - *p = 1; - - return 1; - } - - if (!decl->long_name) - return 0; - - name = skip_dash_dash(decl, arg[0]); - if (!name) - return 0; - - if (prefix) { - size_t prefix_len = strlen(prefix); - if (strncmp(name, prefix, prefix_len) == 0 && - name[prefix_len] == '-') { - name += prefix_len + 1; - prefix = NULL; - } - } - - if (strncmp(name, "no-", 3)) - return 0; - name += 3; - - if (prefix) { - size_t prefix_len = strlen(prefix); - if (strncmp(name, prefix, prefix_len) == 0 && - name[prefix_len] == '-') - name += prefix_len + 1; - } - - if (match_long_name(decl, name, name + strlen(name))) { - if (decl->u.b.set) - decl->u.b.set(opt, 0); - else if (decl->offset != (size_t) -1) - *p = 0; - - return 1; - } - - return 0; -} - -static int parse_str_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int has_argument; - const char *s; - char **p = (char **)(((char *)opt) + decl->offset); - - s = skip_name(decl, arg[0], prefix, 0, &has_argument); - if (!s) - return 0; - - if (has_argument) { - free(*p); - *p = strdup(s); - return 1; - } - - if (arg[1]) { - free(*p); - *p = strdup(arg[1]); - return 2; - } - - return 0; -} - -static int parse_int_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int has_argument; - const char *val; - char *endptr; - int *p = (int *)(((char *)opt) + decl->offset); - - val = skip_name(decl, arg[0], prefix, 0, &has_argument); - if (!val) - return 0; - - if (has_argument) { - *p = atoi(val); - return 1; - } - - if (arg[1]) { - int i = strtol(arg[1], &endptr, 0); - if (*endptr == '\0') { - *p = i; - return 2; - } - } - - return 0; -} - -static int parse_long_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int has_argument; - const char *val; - char *endptr; - long *p = (long *)(((char *)opt) + decl->offset); - - val = skip_name(decl, arg[0], prefix, 0, &has_argument); - if (!val) - return 0; - - if (has_argument) { - long l = strtol(val, NULL, 0); - if (decl->u.l.set) - decl->u.l.set(opt, l); - else - *p = l; - return 1; - } - - if (arg[1]) { - long l = strtol(arg[1], &endptr, 0); - if (*endptr == '\0') { - if (decl->u.l.set) - decl->u.l.set(opt, l); - else - *p = l; - return 2; - } - } - - if (decl->u.l.default_value != decl->u.l.default_selected) { - if (decl->u.l.set) - decl->u.l.set(opt, decl->u.l.default_selected); - else - *p = decl->u.l.default_selected; - return 1; - } - - return 0; -} - -static int parse_ulong_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int has_argument; - const char *val; - char *endptr; - unsigned long *p = (unsigned long *)(((char *)opt) + decl->offset); - - val = skip_name(decl, arg[0], prefix, 0, &has_argument); - if (!val) - return 0; - - if (has_argument) { - *p = strtoul(val, NULL, 0); - return 1; - } - - if (arg[1]) { - unsigned long ul = strtoul(arg[1], &endptr, 0); - if (*endptr == '\0') { - *p = ul; - return 2; - } - } - - return 0; -} - -static int parse_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt); - -static int parse_child_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - void *child; - - if (decl->offset == (size_t) -1) - child = opt; - else { - child = *(void **)(((char *)opt) + decl->offset); - prefix = decl->long_name; - } - return parse_option(decl->u.child.child, arg, prefix, child); -} - -static int parse_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int i; - - for (i = 0; decl[i].type != isl_arg_end; ++i) { - int parsed = 0; - switch (decl[i].type) { - case isl_arg_choice: - parsed = parse_choice_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_flags: - parsed = parse_flags_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_int: - parsed = parse_int_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_long: - parsed = parse_long_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_ulong: - parsed = parse_ulong_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_bool: - parsed = parse_bool_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_str: - parsed = parse_str_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_child: - parsed = parse_child_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_alias: - case isl_arg_arg: - case isl_arg_footer: - case isl_arg_user: - case isl_arg_version: - case isl_arg_end: - break; - } - if (parsed) - return parsed; - } - - return 0; -} - -static void print_version(struct isl_arg *decl) -{ - int i; - - for (i = 0; decl[i].type != isl_arg_end; ++i) { - switch (decl[i].type) { - case isl_arg_version: - decl[i].u.version.print_version(); - break; - case isl_arg_child: - print_version(decl[i].u.child.child); - break; - default: - break; - } - } -} - -static void print_version_and_exit(struct isl_arg *decl) -{ - print_version(decl); - - exit(0); -} - -static int drop_argument(int argc, char **argv, int drop, int n) -{ - for (; drop < argc; ++drop) - argv[drop] = argv[drop + n]; - - return argc - n; -} - -static int n_arg(struct isl_arg *arg) -{ - int i; - int n_arg = 0; - - for (i = 0; arg[i].type != isl_arg_end; ++i) - if (arg[i].type == isl_arg_arg) - n_arg++; - - return n_arg; -} - -static int next_arg(struct isl_arg *arg, int a) -{ - for (++a; arg[a].type != isl_arg_end; ++a) - if (arg[a].type == isl_arg_arg) - return a; - - return -1; -} - -int isl_arg_parse(struct isl_arg *arg, int argc, char **argv, void *opt, - unsigned flags) -{ - int a = -1; - int skip = 0; - int i; - int n; - - n = n_arg(arg); - - for (i = 1; i < argc; ++i) { - if (strcmp(argv[i], "--help") == 0) - print_help_and_exit(arg, argv[0]); - } - - for (i = 1; i < argc; ++i) { - if ((strcmp(argv[i], "--version") == 0 || - strcmp(argv[i], "-V") == 0) && any_version(arg)) - print_version_and_exit(arg); - } - - while (argc > 1 + skip) { - int parsed; - if (argv[1 + skip][0] != '-') { - a = next_arg(arg, a); - if (a >= 0) { - char **p; - p = (char **)(((char *)opt)+arg[a].offset); - free(*p); - *p = strdup(argv[1 + skip]); - argc = drop_argument(argc, argv, 1 + skip, 1); - --n; - } else if (ISL_FL_ISSET(flags, ISL_ARG_ALL)) { - fprintf(stderr, "%s: extra argument: %s\n", - prog_name(argv[0]), argv[1 + skip]); - exit(-1); - } else - ++skip; - continue; - } - parsed = parse_option(arg, &argv[1 + skip], NULL, opt); - if (parsed) - argc = drop_argument(argc, argv, 1 + skip, parsed); - else if (ISL_FL_ISSET(flags, ISL_ARG_ALL)) { - fprintf(stderr, "%s: unrecognized option: %s\n", - prog_name(argv[0]), argv[1 + skip]); - exit(-1); - } else - ++skip; - } - - if (n > 0) { - fprintf(stderr, "%s: expecting %d more argument(s)\n", - prog_name(argv[0]), n); - exit(-1); - } - - return argc; -} diff --git a/cloog-0.16.3/isl/isl_band.c b/cloog-0.16.3/isl/isl_band.c deleted file mode 100644 index e4fbf93..0000000 --- a/cloog-0.16.3/isl/isl_band.c +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright 2011 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include - -isl_ctx *isl_band_get_ctx(__isl_keep isl_band *band) -{ - return band ? isl_union_map_get_ctx(band->map) : NULL; -} - -/* We not only increment the reference count of the band, - * but also that of the schedule that contains this band. - * This ensures that the schedule won't disappear while there - * is still a reference to the band outside of the schedule. - * There is no need to increment the reference count of the parent - * band as the parent band is part of the same schedule. - */ -__isl_give isl_band *isl_band_copy(__isl_keep isl_band *band) -{ - if (!band) - return NULL; - - band->ref++; - band->schedule->ref++; - return band; -} - -/* If this is not the last reference to the band (the one from within the - * schedule), then we also need to decrement the reference count of the - * containing schedule as it was incremented in isl_band_copy. - */ -void *isl_band_free(__isl_take isl_band *band) -{ - if (!band) - return NULL; - - if (--band->ref > 0) - return isl_schedule_free(band->schedule); - - isl_union_map_free(band->map); - isl_band_list_free(band->children); - free(band->zero); - free(band); - - return NULL; -} - -int isl_band_has_children(__isl_keep isl_band *band) -{ - if (!band) - return -1; - - return band->children != NULL; -} - -__isl_give isl_band_list *isl_band_get_children( - __isl_keep isl_band *band) -{ - if (!band) - return NULL; - if (!band->children) - isl_die(isl_band_get_ctx(band), isl_error_invalid, - "band has no children", return NULL); - return isl_band_list_dup(band->children); -} - -int isl_band_n_member(__isl_keep isl_band *band) -{ - return band ? band->n : 0; -} - -/* Is the given scheduling dimension zero distance within the band and - * with respect to the proximity dependences. - */ -int isl_band_member_is_zero_distance(__isl_keep isl_band *band, int pos) -{ - if (!band) - return -1; - - if (pos < 0 || pos >= band->n) - isl_die(isl_band_get_ctx(band), isl_error_invalid, - "invalid member position", return -1); - - return band->zero[pos]; -} - -/* Return the schedule that leads up to this band. - */ -__isl_give isl_union_map *isl_band_get_prefix_schedule( - __isl_keep isl_band *band) -{ - isl_union_map *prefix; - isl_band *a; - - if (!band) - return NULL; - - prefix = isl_union_map_copy(band->map); - prefix = isl_union_map_from_domain(isl_union_map_domain(prefix)); - - for (a = band->parent; a; a = a->parent) { - isl_union_map *partial = isl_union_map_copy(a->map); - prefix = isl_union_map_flat_range_product(partial, prefix); - } - - return prefix; -} - -/* Return the schedule of the band in isolation. - */ -__isl_give isl_union_map *isl_band_get_partial_schedule( - __isl_keep isl_band *band) -{ - return band ? isl_union_map_copy(band->map) : NULL; -} - -/* Return the schedule for the forest underneath the given band. - */ -__isl_give isl_union_map *isl_band_get_suffix_schedule( - __isl_keep isl_band *band) -{ - isl_union_map *suffix; - - if (!band) - return NULL; - - if (!isl_band_has_children(band)) { - suffix = isl_union_map_copy(band->map); - suffix = isl_union_map_from_domain(isl_union_map_domain(suffix)); - } else { - int i, n; - isl_band_list *children; - - suffix = isl_union_map_empty(isl_union_map_get_dim(band->map)); - children = isl_band_get_children(band); - n = isl_band_list_n_band(children); - for (i = 0; i < n; ++i) { - isl_band *child; - isl_union_map *partial_i; - isl_union_map *suffix_i; - - child = isl_band_list_get_band(children, i); - partial_i = isl_band_get_partial_schedule(child); - suffix_i = isl_band_get_suffix_schedule(child); - suffix_i = isl_union_map_flat_range_product(partial_i, - suffix_i); - suffix = isl_union_map_union(suffix, suffix_i); - - isl_band_free(child); - } - isl_band_list_free(children); - } - - return suffix; -} - -__isl_give isl_printer *isl_printer_print_band(__isl_take isl_printer *p, - __isl_keep isl_band *band) -{ - isl_union_map *prefix, *partial, *suffix; - - prefix = isl_band_get_prefix_schedule(band); - partial = isl_band_get_partial_schedule(band); - suffix = isl_band_get_suffix_schedule(band); - - p = isl_printer_print_str(p, "("); - p = isl_printer_print_union_map(p, prefix); - p = isl_printer_print_str(p, ","); - p = isl_printer_print_union_map(p, partial); - p = isl_printer_print_str(p, ","); - p = isl_printer_print_union_map(p, suffix); - p = isl_printer_print_str(p, ")"); - - isl_union_map_free(prefix); - isl_union_map_free(partial); - isl_union_map_free(suffix); - - return p; -} - -void isl_band_dump(__isl_keep isl_band *band) -{ - isl_printer *printer; - - if (!band) - return; - - printer = isl_printer_to_file(isl_band_get_ctx(band), stderr); - printer = isl_printer_print_band(printer, band); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} diff --git a/cloog-0.16.3/isl/isl_band_private.h b/cloog-0.16.3/isl/isl_band_private.h deleted file mode 100644 index 579ef66..0000000 --- a/cloog-0.16.3/isl/isl_band_private.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef ISL_BAND_PRIVATE_H -#define ISL_BAND_PRIVATE_H - -#include -#include -#include -#include - -/* Information about a band within a schedule. - * - * n is the number of scheduling dimensions within the band. - * zero is an array of length n, indicating whether a scheduling dimension - * results in zero dependence distances for the proximity dependences. - * map is the partial map corresponding to this band. - * schedule is the schedule that contains this band. - * parent is the parent of this band (or NULL if the band is a root). - * children are the children of this band (or NULL if the band is a leaf). - * - * To avoid circular dependences in the reference counting, - * the schedule and parent pointers are not reference counted. - * isl_band_copy increments the reference count of schedule to ensure - * that outside references to the band keep the schedule alive. - */ -struct isl_band { - int ref; - - int n; - int *zero; - - isl_union_map *map; - isl_schedule *schedule; - isl_band *parent; - isl_band_list *children; -}; - -#endif diff --git a/cloog-0.16.3/isl/isl_basis_reduction.h b/cloog-0.16.3/isl/isl_basis_reduction.h deleted file mode 100644 index fd63560..0000000 --- a/cloog-0.16.3/isl/isl_basis_reduction.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_BASIS_REDUCTION_H -#define ISL_BASIS_REDUCTION_H - -#include -#include -#include "isl_tab.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_tab *isl_tab_compute_reduced_basis(struct isl_tab *tab); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/isl_bernstein.c b/cloog-0.16.3/isl/isl_bernstein.c deleted file mode 100644 index 1458e27..0000000 --- a/cloog-0.16.3/isl/isl_bernstein.c +++ /dev/null @@ -1,548 +0,0 @@ -/* - * Copyright 2006-2007 Universiteit Leiden - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, Leiden Institute of Advanced Computer Science, - * Universiteit Leiden, Niels Bohrweg 1, 2333 CA Leiden, The Netherlands - * and K.U.Leuven, Departement Computerwetenschappen, Celestijnenlaan 200A, - * B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct bernstein_data { - enum isl_fold type; - isl_qpolynomial *poly; - int check_tight; - - isl_cell *cell; - - isl_qpolynomial_fold *fold; - isl_qpolynomial_fold *fold_tight; - isl_pw_qpolynomial_fold *pwf; - isl_pw_qpolynomial_fold *pwf_tight; -}; - -static int vertex_is_integral(__isl_keep isl_basic_set *vertex) -{ - unsigned nvar; - unsigned nparam; - int i; - - nvar = isl_basic_set_dim(vertex, isl_dim_set); - nparam = isl_basic_set_dim(vertex, isl_dim_param); - for (i = 0; i < nvar; ++i) { - int r = nvar - 1 - i; - if (!isl_int_is_one(vertex->eq[r][1 + nparam + i]) && - !isl_int_is_negone(vertex->eq[r][1 + nparam + i])) - return 0; - } - - return 1; -} - -static __isl_give isl_qpolynomial *vertex_coordinate( - __isl_keep isl_basic_set *vertex, int i, __isl_take isl_dim *dim) -{ - unsigned nvar; - unsigned nparam; - int r; - isl_int denom; - isl_qpolynomial *v; - - nvar = isl_basic_set_dim(vertex, isl_dim_set); - nparam = isl_basic_set_dim(vertex, isl_dim_param); - r = nvar - 1 - i; - - isl_int_init(denom); - isl_int_set(denom, vertex->eq[r][1 + nparam + i]); - isl_assert(vertex->ctx, !isl_int_is_zero(denom), goto error); - - if (isl_int_is_pos(denom)) - isl_seq_neg(vertex->eq[r], vertex->eq[r], - 1 + isl_basic_set_total_dim(vertex)); - else - isl_int_neg(denom, denom); - - v = isl_qpolynomial_from_affine(dim, vertex->eq[r], denom); - isl_int_clear(denom); - - return v; -error: - isl_dim_free(dim); - isl_int_clear(denom); - return NULL; -} - -/* Check whether the bound associated to the selection "k" is tight, - * which is the case if we select exactly one vertex and if that vertex - * is integral for all values of the parameters. - */ -static int is_tight(int *k, int n, int d, isl_cell *cell) -{ - int i; - - for (i = 0; i < n; ++i) { - int v; - if (k[i] != d) { - if (k[i]) - return 0; - continue; - } - v = cell->ids[n - 1 - i]; - return vertex_is_integral(cell->vertices->v[v].vertex); - } - - return 0; -} - -static void add_fold(__isl_take isl_qpolynomial *b, __isl_keep isl_set *dom, - int *k, int n, int d, struct bernstein_data *data) -{ - isl_qpolynomial_fold *fold; - - fold = isl_qpolynomial_fold_alloc(data->type, b); - - if (data->check_tight && is_tight(k, n, d, data->cell)) - data->fold_tight = isl_qpolynomial_fold_fold_on_domain(dom, - data->fold_tight, fold); - else - data->fold = isl_qpolynomial_fold_fold_on_domain(dom, - data->fold, fold); -} - -/* Extract the coefficients of the Bernstein base polynomials and store - * them in data->fold and data->fold_tight. - * - * In particular, the coefficient of each monomial - * of multi-degree (k[0], k[1], ..., k[n-1]) is divided by the corresponding - * multinomial coefficient d!/k[0]! k[1]! ... k[n-1]! - * - * c[i] contains the coefficient of the selected powers of the first i+1 vars. - * multinom[i] contains the partial multinomial coefficient. - */ -static void extract_coefficients(isl_qpolynomial *poly, - __isl_keep isl_set *dom, struct bernstein_data *data) -{ - int i; - int d; - int n; - isl_ctx *ctx; - isl_qpolynomial **c = NULL; - int *k = NULL; - int *left = NULL; - isl_vec *multinom = NULL; - - if (!poly) - return; - - ctx = isl_qpolynomial_get_ctx(poly); - n = isl_qpolynomial_dim(poly, isl_dim_set); - d = isl_qpolynomial_degree(poly); - isl_assert(ctx, n >= 2, return); - - c = isl_calloc_array(ctx, isl_qpolynomial *, n); - k = isl_alloc_array(ctx, int, n); - left = isl_alloc_array(ctx, int, n); - multinom = isl_vec_alloc(ctx, n); - if (!c || !k || !left || !multinom) - goto error; - - isl_int_set_si(multinom->el[0], 1); - for (k[0] = d; k[0] >= 0; --k[0]) { - int i = 1; - isl_qpolynomial_free(c[0]); - c[0] = isl_qpolynomial_coeff(poly, isl_dim_set, n - 1, k[0]); - left[0] = d - k[0]; - k[1] = -1; - isl_int_set(multinom->el[1], multinom->el[0]); - while (i > 0) { - if (i == n - 1) { - int j; - isl_dim *dim; - isl_qpolynomial *b; - isl_qpolynomial *f; - for (j = 2; j <= left[i - 1]; ++j) - isl_int_divexact_ui(multinom->el[i], - multinom->el[i], j); - b = isl_qpolynomial_coeff(c[i - 1], isl_dim_set, - n - 1 - i, left[i - 1]); - b = isl_qpolynomial_drop_dims(b, isl_dim_set, - 0, n); - dim = isl_qpolynomial_get_dim(b); - f = isl_qpolynomial_rat_cst(dim, ctx->one, - multinom->el[i]); - b = isl_qpolynomial_mul(b, f); - k[n - 1] = left[n - 2]; - add_fold(b, dom, k, n, d, data); - --i; - continue; - } - if (k[i] >= left[i - 1]) { - --i; - continue; - } - ++k[i]; - if (k[i]) - isl_int_divexact_ui(multinom->el[i], - multinom->el[i], k[i]); - isl_qpolynomial_free(c[i]); - c[i] = isl_qpolynomial_coeff(c[i - 1], isl_dim_set, - n - 1 - i, k[i]); - left[i] = left[i - 1] - k[i]; - k[i + 1] = -1; - isl_int_set(multinom->el[i + 1], multinom->el[i]); - ++i; - } - isl_int_mul_ui(multinom->el[0], multinom->el[0], k[0]); - } - - for (i = 0; i < n; ++i) - isl_qpolynomial_free(c[i]); - - isl_vec_free(multinom); - free(left); - free(k); - free(c); - return; -error: - isl_vec_free(multinom); - free(left); - free(k); - if (c) - for (i = 0; i < n; ++i) - isl_qpolynomial_free(c[i]); - free(c); - return; -} - -/* Perform bernstein expansion on the parametric vertices that are active - * on "cell". - * - * data->poly has been homogenized in the calling function. - * - * We plug in the barycentric coordinates for the set variables - * - * \vec x = \sum_i \alpha_i v_i(\vec p) - * - * and the constant "1 = \sum_i \alpha_i" for the homogeneous dimension. - * Next, we extract the coefficients of the Bernstein base polynomials. - */ -static int bernstein_coefficients_cell(__isl_take isl_cell *cell, void *user) -{ - int i, j; - struct bernstein_data *data = (struct bernstein_data *)user; - isl_dim *dim_param; - isl_dim *dim_dst; - isl_qpolynomial *poly = data->poly; - unsigned nvar; - int n_vertices; - isl_qpolynomial **subs; - isl_pw_qpolynomial_fold *pwf; - isl_set *dom; - isl_ctx *ctx; - - nvar = isl_qpolynomial_dim(poly, isl_dim_set) - 1; - n_vertices = cell->n_vertices; - - ctx = isl_qpolynomial_get_ctx(poly); - if (n_vertices > nvar + 1 && ctx->opt->bernstein_triangulate) - return isl_cell_foreach_simplex(cell, - &bernstein_coefficients_cell, user); - - subs = isl_alloc_array(ctx, isl_qpolynomial *, 1 + nvar); - if (!subs) - goto error; - - dim_param = isl_basic_set_get_dim(cell->dom); - dim_dst = isl_qpolynomial_get_dim(poly); - dim_dst = isl_dim_add(dim_dst, isl_dim_set, n_vertices); - - for (i = 0; i < 1 + nvar; ++i) - subs[i] = isl_qpolynomial_zero(isl_dim_copy(dim_dst)); - - for (i = 0; i < n_vertices; ++i) { - isl_qpolynomial *c; - c = isl_qpolynomial_var(isl_dim_copy(dim_dst), isl_dim_set, - 1 + nvar + i); - for (j = 0; j < nvar; ++j) { - int k = cell->ids[i]; - isl_qpolynomial *v; - v = vertex_coordinate(cell->vertices->v[k].vertex, j, - isl_dim_copy(dim_param)); - v = isl_qpolynomial_add_dims(v, isl_dim_set, - 1 + nvar + n_vertices); - v = isl_qpolynomial_mul(v, isl_qpolynomial_copy(c)); - subs[1 + j] = isl_qpolynomial_add(subs[1 + j], v); - } - subs[0] = isl_qpolynomial_add(subs[0], c); - } - isl_dim_free(dim_dst); - - poly = isl_qpolynomial_copy(poly); - - poly = isl_qpolynomial_add_dims(poly, isl_dim_set, n_vertices); - poly = isl_qpolynomial_substitute(poly, isl_dim_set, 0, 1 + nvar, subs); - poly = isl_qpolynomial_drop_dims(poly, isl_dim_set, 0, 1 + nvar); - - data->cell = cell; - dom = isl_set_from_basic_set(isl_basic_set_copy(cell->dom)); - data->fold = isl_qpolynomial_fold_empty(data->type, isl_dim_copy(dim_param)); - data->fold_tight = isl_qpolynomial_fold_empty(data->type, dim_param); - extract_coefficients(poly, dom, data); - - pwf = isl_pw_qpolynomial_fold_alloc(data->type, isl_set_copy(dom), - data->fold); - data->pwf = isl_pw_qpolynomial_fold_fold(data->pwf, pwf); - pwf = isl_pw_qpolynomial_fold_alloc(data->type, dom, data->fold_tight); - data->pwf_tight = isl_pw_qpolynomial_fold_fold(data->pwf_tight, pwf); - - isl_qpolynomial_free(poly); - isl_cell_free(cell); - for (i = 0; i < 1 + nvar; ++i) - isl_qpolynomial_free(subs[i]); - free(subs); - return 0; -error: - isl_cell_free(cell); - return -1; -} - -/* Base case of applying bernstein expansion. - * - * We compute the chamber decomposition of the parametric polytope "bset" - * and then perform bernstein expansion on the parametric vertices - * that are active on each chamber. - */ -static __isl_give isl_pw_qpolynomial_fold *bernstein_coefficients_base( - __isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct bernstein_data *data, int *tight) -{ - unsigned nvar; - isl_dim *dim; - isl_pw_qpolynomial_fold *pwf; - isl_vertices *vertices; - int covers; - - nvar = isl_basic_set_dim(bset, isl_dim_set); - if (nvar == 0) { - isl_set *dom; - isl_qpolynomial_fold *fold; - fold = isl_qpolynomial_fold_alloc(data->type, poly); - dom = isl_set_from_basic_set(bset); - if (tight) - *tight = 1; - return isl_pw_qpolynomial_fold_alloc(data->type, dom, fold); - } - - if (isl_qpolynomial_is_zero(poly)) { - isl_set *dom; - isl_qpolynomial_fold *fold; - fold = isl_qpolynomial_fold_alloc(data->type, poly); - dom = isl_set_from_basic_set(bset); - pwf = isl_pw_qpolynomial_fold_alloc(data->type, dom, fold); - if (tight) - *tight = 1; - return isl_pw_qpolynomial_fold_drop_dims(pwf, - isl_dim_set, 0, nvar); - } - - dim = isl_basic_set_get_dim(bset); - dim = isl_dim_drop(dim, isl_dim_set, 0, nvar); - data->pwf = isl_pw_qpolynomial_fold_zero(isl_dim_copy(dim), data->type); - data->pwf_tight = isl_pw_qpolynomial_fold_zero(dim, data->type); - data->poly = isl_qpolynomial_homogenize(isl_qpolynomial_copy(poly)); - vertices = isl_basic_set_compute_vertices(bset); - isl_vertices_foreach_disjoint_cell(vertices, - &bernstein_coefficients_cell, data); - isl_vertices_free(vertices); - isl_qpolynomial_free(data->poly); - - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - - covers = isl_pw_qpolynomial_fold_covers(data->pwf_tight, data->pwf); - if (covers < 0) - goto error; - - if (tight) - *tight = covers; - - if (covers) { - isl_pw_qpolynomial_fold_free(data->pwf); - return data->pwf_tight; - } - - data->pwf = isl_pw_qpolynomial_fold_fold(data->pwf, data->pwf_tight); - - return data->pwf; -error: - isl_pw_qpolynomial_fold_free(data->pwf_tight); - isl_pw_qpolynomial_fold_free(data->pwf); - return NULL; -} - -/* Apply bernstein expansion recursively by working in on len[i] - * set variables at a time, with i ranging from n_group - 1 to 0. - */ -static __isl_give isl_pw_qpolynomial_fold *bernstein_coefficients_recursive( - __isl_take isl_pw_qpolynomial *pwqp, - int n_group, int *len, struct bernstein_data *data, int *tight) -{ - int i; - unsigned nparam; - unsigned nvar; - isl_pw_qpolynomial_fold *pwf; - - if (!pwqp) - return NULL; - - nparam = isl_pw_qpolynomial_dim(pwqp, isl_dim_param); - nvar = isl_pw_qpolynomial_dim(pwqp, isl_dim_set); - - pwqp = isl_pw_qpolynomial_move_dims(pwqp, isl_dim_param, nparam, - isl_dim_set, 0, nvar - len[n_group - 1]); - pwf = isl_pw_qpolynomial_bound(pwqp, data->type, tight); - - for (i = n_group - 2; i >= 0; --i) { - nparam = isl_pw_qpolynomial_fold_dim(pwf, isl_dim_param); - pwf = isl_pw_qpolynomial_fold_move_dims(pwf, isl_dim_set, 0, - isl_dim_param, nparam - len[i], len[i]); - if (tight && !*tight) - tight = NULL; - pwf = isl_pw_qpolynomial_fold_bound(pwf, tight); - } - - return pwf; -} - -static __isl_give isl_pw_qpolynomial_fold *bernstein_coefficients_factors( - __isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct bernstein_data *data, int *tight) -{ - isl_factorizer *f; - isl_set *set; - isl_pw_qpolynomial *pwqp; - isl_pw_qpolynomial_fold *pwf; - - f = isl_basic_set_factorizer(bset); - if (!f) - goto error; - if (f->n_group == 0) { - isl_factorizer_free(f); - return bernstein_coefficients_base(bset, poly, data, tight); - } - - set = isl_set_from_basic_set(bset); - pwqp = isl_pw_qpolynomial_alloc(set, poly); - pwqp = isl_pw_qpolynomial_morph(pwqp, isl_morph_copy(f->morph)); - - pwf = bernstein_coefficients_recursive(pwqp, f->n_group, f->len, data, - tight); - - isl_factorizer_free(f); - - return pwf; -error: - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - return NULL; -} - -static __isl_give isl_pw_qpolynomial_fold *bernstein_coefficients_full_recursive( - __isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct bernstein_data *data, int *tight) -{ - int i; - int *len; - unsigned nvar; - isl_pw_qpolynomial_fold *pwf; - isl_set *set; - isl_pw_qpolynomial *pwqp; - - if (!bset || !poly) - goto error; - - nvar = isl_basic_set_dim(bset, isl_dim_set); - - len = isl_alloc_array(bset->ctx, int, nvar); - if (!len) - goto error; - - for (i = 0; i < nvar; ++i) - len[i] = 1; - - set = isl_set_from_basic_set(bset); - pwqp = isl_pw_qpolynomial_alloc(set, poly); - - pwf = bernstein_coefficients_recursive(pwqp, nvar, len, data, tight); - - free(len); - - return pwf; -error: - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - return NULL; -} - -/* Compute a bound on the polynomial defined over the parametric polytope - * using bernstein expansion and store the result - * in bound->pwf and bound->pwf_tight. - * - * If bernstein_recurse is set to ISL_BERNSTEIN_FACTORS, we check if - * the polytope can be factorized and apply bernstein expansion recursively - * on the factors. - * If bernstein_recurse is set to ISL_BERNSTEIN_INTERVALS, we apply - * bernstein expansion recursively on each dimension. - * Otherwise, we apply bernstein expansion on the entire polytope. - */ -int isl_qpolynomial_bound_on_domain_bernstein(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct isl_bound *bound) -{ - struct bernstein_data data; - isl_pw_qpolynomial_fold *pwf; - unsigned nvar; - int tight = 0; - int *tp = bound->check_tight ? &tight : NULL; - - if (!bset || !poly) - goto error; - - data.type = bound->type; - data.check_tight = bound->check_tight; - - nvar = isl_basic_set_dim(bset, isl_dim_set); - - if (bset->ctx->opt->bernstein_recurse & ISL_BERNSTEIN_FACTORS) - pwf = bernstein_coefficients_factors(bset, poly, &data, tp); - else if (nvar > 1 && - (bset->ctx->opt->bernstein_recurse & ISL_BERNSTEIN_INTERVALS)) - pwf = bernstein_coefficients_full_recursive(bset, poly, &data, tp); - else - pwf = bernstein_coefficients_base(bset, poly, &data, tp); - - if (tight) - bound->pwf_tight = isl_pw_qpolynomial_fold_fold(bound->pwf_tight, pwf); - else - bound->pwf = isl_pw_qpolynomial_fold_fold(bound->pwf, pwf); - - return 0; -error: - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - return -1; -} diff --git a/cloog-0.16.3/isl/isl_bernstein.h b/cloog-0.16.3/isl/isl_bernstein.h deleted file mode 100644 index 7694b04..0000000 --- a/cloog-0.16.3/isl/isl_bernstein.h +++ /dev/null @@ -1,4 +0,0 @@ -#include - -int isl_qpolynomial_bound_on_domain_bernstein(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct isl_bound *bound); diff --git a/cloog-0.16.3/isl/isl_blk.c b/cloog-0.16.3/isl/isl_blk.c deleted file mode 100644 index 0c1dae7..0000000 --- a/cloog-0.16.3/isl/isl_blk.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include - -/* The maximal number of cache misses before first element is evicted */ -#define ISL_BLK_MAX_MISS 100 - -struct isl_blk isl_blk_empty() -{ - struct isl_blk block; - block.size = 0; - block.data = NULL; - return block; -} - -static int isl_blk_is_empty(struct isl_blk block) -{ - return block.size == 0 && block.data == NULL; -} - -static struct isl_blk isl_blk_error() -{ - struct isl_blk block; - block.size = -1; - block.data = NULL; - return block; -} - -int isl_blk_is_error(struct isl_blk block) -{ - return block.size == -1 && block.data == NULL; -} - -static struct isl_blk extend(struct isl_ctx *ctx, struct isl_blk block, - size_t new_n) -{ - int i; - isl_int *p; - - if (block.size >= new_n) - return block; - - p = block.data; - block.data = isl_realloc_array(ctx, block.data, isl_int, new_n); - if (!block.data) { - free(p); - return isl_blk_error(); - } - - for (i = block.size; i < new_n; ++i) - isl_int_init(block.data[i]); - block.size = new_n; - - return block; -} - -static void isl_blk_free_force(struct isl_ctx *ctx, struct isl_blk block) -{ - int i; - - for (i = 0; i < block.size; ++i) - isl_int_clear(block.data[i]); - free(block.data); -} - -struct isl_blk isl_blk_alloc(struct isl_ctx *ctx, size_t n) -{ - int i; - struct isl_blk block; - - block = isl_blk_empty(); - if (n && ctx->n_cached) { - int best = 0; - for (i = 1; ctx->cache[best].size != n && i < ctx->n_cached; ++i) { - if (ctx->cache[best].size < n) { - if (ctx->cache[i].size > ctx->cache[best].size) - best = i; - } else if (ctx->cache[i].size >= n && - ctx->cache[i].size < ctx->cache[best].size) - best = i; - } - if (ctx->cache[best].size < 2 * n + 100) { - block = ctx->cache[best]; - if (--ctx->n_cached != best) - ctx->cache[best] = ctx->cache[ctx->n_cached]; - if (best == 0) - ctx->n_miss = 0; - } else if (ctx->n_miss++ >= ISL_BLK_MAX_MISS) { - isl_blk_free_force(ctx, ctx->cache[0]); - if (--ctx->n_cached != 0) - ctx->cache[0] = ctx->cache[ctx->n_cached]; - ctx->n_miss = 0; - } - } - - return extend(ctx, block, n); -} - -struct isl_blk isl_blk_extend(struct isl_ctx *ctx, struct isl_blk block, - size_t new_n) -{ - if (isl_blk_is_empty(block)) - return isl_blk_alloc(ctx, new_n); - - return extend(ctx, block, new_n); -} - -void isl_blk_free(struct isl_ctx *ctx, struct isl_blk block) -{ - if (isl_blk_is_empty(block) || isl_blk_is_error(block)) - return; - - if (ctx->n_cached < ISL_BLK_CACHE_SIZE) - ctx->cache[ctx->n_cached++] = block; - else - isl_blk_free_force(ctx, block); -} - -void isl_blk_clear_cache(struct isl_ctx *ctx) -{ - int i; - - for (i = 0; i < ctx->n_cached; ++i) - isl_blk_free_force(ctx, ctx->cache[i]); - ctx->n_cached = 0; -} diff --git a/cloog-0.16.3/isl/isl_bound.c b/cloog-0.16.3/isl/isl_bound.c deleted file mode 100644 index 3828f8d..0000000 --- a/cloog-0.16.3/isl/isl_bound.c +++ /dev/null @@ -1,331 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include - -/* Compute a bound on the polynomial defined over the parametric polytope - * using either range propagation or bernstein expansion and - * store the result in bound->pwf and bound->pwf_tight. - * Since bernstein expansion requires bounded domains, we apply - * range propagation on unbounded domains. Otherwise, we respect the choice - * of the user. - */ -static int compressed_guarded_poly_bound(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, void *user) -{ - struct isl_bound *bound = (struct isl_bound *)user; - int bounded; - - if (!bset || !poly) - goto error; - - if (bset->ctx->opt->bound == ISL_BOUND_RANGE) - return isl_qpolynomial_bound_on_domain_range(bset, poly, bound); - - bounded = isl_basic_set_is_bounded(bset); - if (bounded < 0) - goto error; - if (bounded) - return isl_qpolynomial_bound_on_domain_bernstein(bset, poly, bound); - else - return isl_qpolynomial_bound_on_domain_range(bset, poly, bound); -error: - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - return -1; -} - -static int unwrapped_guarded_poly_bound(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, void *user) -{ - struct isl_bound *bound = (struct isl_bound *)user; - isl_pw_qpolynomial_fold *top_pwf; - isl_pw_qpolynomial_fold *top_pwf_tight; - isl_dim *dim; - isl_morph *morph; - unsigned orig_nvar, final_nvar; - int r; - - bset = isl_basic_set_detect_equalities(bset); - - if (!bset) - goto error; - - if (bset->n_eq == 0) - return compressed_guarded_poly_bound(bset, poly, user); - - orig_nvar = isl_basic_set_dim(bset, isl_dim_set); - - morph = isl_basic_set_full_compression(bset); - - bset = isl_morph_basic_set(isl_morph_copy(morph), bset); - poly = isl_qpolynomial_morph(poly, isl_morph_copy(morph)); - - final_nvar = isl_basic_set_dim(bset, isl_dim_set); - - dim = isl_morph_get_ran_dim(morph); - dim = isl_dim_drop(dim, isl_dim_set, 0, isl_dim_size(dim, isl_dim_set)); - - top_pwf = bound->pwf; - top_pwf_tight = bound->pwf_tight; - - bound->pwf = isl_pw_qpolynomial_fold_zero(isl_dim_copy(dim), - bound->type); - bound->pwf_tight = isl_pw_qpolynomial_fold_zero(dim, bound->type); - - r = compressed_guarded_poly_bound(bset, poly, user); - - morph = isl_morph_remove_dom_dims(morph, isl_dim_set, 0, orig_nvar); - morph = isl_morph_remove_ran_dims(morph, isl_dim_set, 0, final_nvar); - morph = isl_morph_inverse(morph); - - bound->pwf = isl_pw_qpolynomial_fold_morph(bound->pwf, - isl_morph_copy(morph)); - bound->pwf_tight = isl_pw_qpolynomial_fold_morph(bound->pwf_tight, morph); - - bound->pwf = isl_pw_qpolynomial_fold_fold(top_pwf, bound->pwf); - bound->pwf_tight = isl_pw_qpolynomial_fold_fold(top_pwf_tight, - bound->pwf_tight); - - return r; -error: - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - return -1; -} - -static int guarded_poly_bound(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, void *user) -{ - struct isl_bound *bound = (struct isl_bound *)user; - isl_dim *dim; - isl_pw_qpolynomial_fold *top_pwf; - isl_pw_qpolynomial_fold *top_pwf_tight; - int nparam; - int n_in; - int r; - - if (!bound->wrapping) - return unwrapped_guarded_poly_bound(bset, poly, user); - - nparam = isl_dim_size(bound->dim, isl_dim_param); - n_in = isl_dim_size(bound->dim, isl_dim_set); - - bset = isl_basic_set_move_dims(bset, isl_dim_param, nparam, - isl_dim_set, 0, n_in); - poly = isl_qpolynomial_move_dims(poly, isl_dim_param, nparam, - isl_dim_set, 0, n_in); - - dim = isl_basic_set_get_dim(bset); - dim = isl_dim_drop(dim, isl_dim_set, 0, isl_dim_size(dim, isl_dim_set)); - - top_pwf = bound->pwf; - top_pwf_tight = bound->pwf_tight; - - bound->pwf = isl_pw_qpolynomial_fold_zero(isl_dim_copy(dim), - bound->type); - bound->pwf_tight = isl_pw_qpolynomial_fold_zero(dim, bound->type); - - r = unwrapped_guarded_poly_bound(bset, poly, user); - - bound->pwf = isl_pw_qpolynomial_fold_reset_dim(bound->pwf, - isl_dim_copy(bound->dim)); - bound->pwf_tight = isl_pw_qpolynomial_fold_reset_dim(bound->pwf_tight, - isl_dim_copy(bound->dim)); - - bound->pwf = isl_pw_qpolynomial_fold_fold(top_pwf, bound->pwf); - bound->pwf_tight = isl_pw_qpolynomial_fold_fold(top_pwf_tight, - bound->pwf_tight); - - return r; -} - -static int guarded_qp(__isl_take isl_qpolynomial *qp, void *user) -{ - struct isl_bound *bound = (struct isl_bound *)user; - int r; - - r = isl_qpolynomial_as_polynomial_on_domain(qp, bound->bset, - &guarded_poly_bound, user); - isl_qpolynomial_free(qp); - return r; -} - -static int basic_guarded_fold(__isl_take isl_basic_set *bset, void *user) -{ - struct isl_bound *bound = (struct isl_bound *)user; - int r; - - bound->bset = bset; - r = isl_qpolynomial_fold_foreach_qpolynomial(bound->fold, - &guarded_qp, user); - isl_basic_set_free(bset); - return r; -} - -static int guarded_fold(__isl_take isl_set *set, - __isl_take isl_qpolynomial_fold *fold, void *user) -{ - struct isl_bound *bound = (struct isl_bound *)user; - - if (!set || !fold) - goto error; - - set = isl_set_make_disjoint(set); - - bound->fold = fold; - bound->type = isl_qpolynomial_fold_get_type(fold); - - if (isl_set_foreach_basic_set(set, &basic_guarded_fold, bound) < 0) - goto error; - - isl_set_free(set); - isl_qpolynomial_fold_free(fold); - - return 0; -error: - isl_set_free(set); - isl_qpolynomial_fold_free(fold); - return -1; -} - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_bound( - __isl_take isl_pw_qpolynomial_fold *pwf, int *tight) -{ - unsigned nvar; - struct isl_bound bound; - int covers; - - if (!pwf) - return NULL; - - bound.dim = isl_pw_qpolynomial_fold_get_dim(pwf); - nvar = isl_dim_size(bound.dim, isl_dim_set); - - bound.wrapping = isl_dim_is_wrapping(bound.dim); - if (bound.wrapping) { - bound.dim = isl_dim_unwrap(bound.dim); - nvar = isl_dim_size(bound.dim, isl_dim_out); - bound.dim = isl_dim_domain(bound.dim); - } else - bound.dim = isl_dim_drop(bound.dim, isl_dim_set, 0, nvar); - - if (nvar == 0) { - if (tight) - *tight = 1; - return isl_pw_qpolynomial_fold_reset_dim(pwf, bound.dim); - } - - if (isl_pw_qpolynomial_fold_is_zero(pwf)) { - enum isl_fold type = pwf->type; - isl_pw_qpolynomial_fold_free(pwf); - if (tight) - *tight = 1; - return isl_pw_qpolynomial_fold_zero(bound.dim, type); - } - - bound.pwf = isl_pw_qpolynomial_fold_zero(isl_dim_copy(bound.dim), - pwf->type); - bound.pwf_tight = isl_pw_qpolynomial_fold_zero(isl_dim_copy(bound.dim), - pwf->type); - bound.check_tight = !!tight; - - if (isl_pw_qpolynomial_fold_foreach_lifted_piece(pwf, - guarded_fold, &bound) < 0) - goto error; - - covers = isl_pw_qpolynomial_fold_covers(bound.pwf_tight, bound.pwf); - if (covers < 0) - goto error; - - if (tight) - *tight = covers; - - isl_dim_free(bound.dim); - isl_pw_qpolynomial_fold_free(pwf); - - if (covers) { - isl_pw_qpolynomial_fold_free(bound.pwf); - return bound.pwf_tight; - } - - bound.pwf = isl_pw_qpolynomial_fold_fold(bound.pwf, bound.pwf_tight); - - return bound.pwf; -error: - isl_pw_qpolynomial_fold_free(bound.pwf_tight); - isl_pw_qpolynomial_fold_free(bound.pwf); - isl_pw_qpolynomial_fold_free(pwf); - isl_dim_free(bound.dim); - return NULL; -} - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_bound( - __isl_take isl_pw_qpolynomial *pwqp, enum isl_fold type, int *tight) -{ - isl_pw_qpolynomial_fold *pwf; - - pwf = isl_pw_qpolynomial_fold_from_pw_qpolynomial(type, pwqp); - return isl_pw_qpolynomial_fold_bound(pwf, tight); -} - -struct isl_union_bound_data { - enum isl_fold type; - int tight; - isl_union_pw_qpolynomial_fold *res; -}; - -static int bound_pw(__isl_take isl_pw_qpolynomial *pwqp, void *user) -{ - struct isl_union_bound_data *data = user; - isl_pw_qpolynomial_fold *pwf; - - pwf = isl_pw_qpolynomial_bound(pwqp, data->type, - data->tight ? &data->tight : NULL); - data->res = isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold( - data->res, pwf); - - return 0; -} - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_bound( - __isl_take isl_union_pw_qpolynomial *upwqp, - enum isl_fold type, int *tight) -{ - isl_dim *dim; - struct isl_union_bound_data data = { type, 1, NULL }; - - if (!upwqp) - return NULL; - - if (!tight) - data.tight = 0; - - dim = isl_union_pw_qpolynomial_get_dim(upwqp); - data.res = isl_union_pw_qpolynomial_fold_zero(dim, type); - if (isl_union_pw_qpolynomial_foreach_pw_qpolynomial(upwqp, - &bound_pw, &data) < 0) - goto error; - - isl_union_pw_qpolynomial_free(upwqp); - if (tight) - *tight = data.tight; - - return data.res; -error: - isl_union_pw_qpolynomial_free(upwqp); - isl_union_pw_qpolynomial_fold_free(data.res); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_bound.h b/cloog-0.16.3/isl/isl_bound.h deleted file mode 100644 index b3a40db..0000000 --- a/cloog-0.16.3/isl/isl_bound.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef ISL_BOUND_H -#define ISL_BOUND_H - -#include - -struct isl_bound { - /* input */ - int check_tight; - int wrapping; - enum isl_fold type; - isl_dim *dim; - isl_basic_set *bset; - isl_qpolynomial_fold *fold; - - /* output */ - isl_pw_qpolynomial_fold *pwf; - isl_pw_qpolynomial_fold *pwf_tight; -}; - -#endif diff --git a/cloog-0.16.3/isl/isl_coalesce.c b/cloog-0.16.3/isl/isl_coalesce.c deleted file mode 100644 index 8cb942e..0000000 --- a/cloog-0.16.3/isl/isl_coalesce.c +++ /dev/null @@ -1,1294 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include "isl_map_private.h" -#include -#include "isl_tab.h" -#include - -#define STATUS_ERROR -1 -#define STATUS_REDUNDANT 1 -#define STATUS_VALID 2 -#define STATUS_SEPARATE 3 -#define STATUS_CUT 4 -#define STATUS_ADJ_EQ 5 -#define STATUS_ADJ_INEQ 6 - -static int status_in(isl_int *ineq, struct isl_tab *tab) -{ - enum isl_ineq_type type = isl_tab_ineq_type(tab, ineq); - switch (type) { - default: - case isl_ineq_error: return STATUS_ERROR; - case isl_ineq_redundant: return STATUS_VALID; - case isl_ineq_separate: return STATUS_SEPARATE; - case isl_ineq_cut: return STATUS_CUT; - case isl_ineq_adj_eq: return STATUS_ADJ_EQ; - case isl_ineq_adj_ineq: return STATUS_ADJ_INEQ; - } -} - -/* Compute the position of the equalities of basic map "i" - * with respect to basic map "j". - * The resulting array has twice as many entries as the number - * of equalities corresponding to the two inequalties to which - * each equality corresponds. - */ -static int *eq_status_in(struct isl_map *map, int i, int j, - struct isl_tab **tabs) -{ - int k, l; - int *eq = isl_calloc_array(map->ctx, int, 2 * map->p[i]->n_eq); - unsigned dim; - - dim = isl_basic_map_total_dim(map->p[i]); - for (k = 0; k < map->p[i]->n_eq; ++k) { - for (l = 0; l < 2; ++l) { - isl_seq_neg(map->p[i]->eq[k], map->p[i]->eq[k], 1+dim); - eq[2 * k + l] = status_in(map->p[i]->eq[k], tabs[j]); - if (eq[2 * k + l] == STATUS_ERROR) - goto error; - } - if (eq[2 * k] == STATUS_SEPARATE || - eq[2 * k + 1] == STATUS_SEPARATE) - break; - } - - return eq; -error: - free(eq); - return NULL; -} - -/* Compute the position of the inequalities of basic map "i" - * with respect to basic map "j". - */ -static int *ineq_status_in(struct isl_map *map, int i, int j, - struct isl_tab **tabs) -{ - int k; - unsigned n_eq = map->p[i]->n_eq; - int *ineq = isl_calloc_array(map->ctx, int, map->p[i]->n_ineq); - - for (k = 0; k < map->p[i]->n_ineq; ++k) { - if (isl_tab_is_redundant(tabs[i], n_eq + k)) { - ineq[k] = STATUS_REDUNDANT; - continue; - } - ineq[k] = status_in(map->p[i]->ineq[k], tabs[j]); - if (ineq[k] == STATUS_ERROR) - goto error; - if (ineq[k] == STATUS_SEPARATE) - break; - } - - return ineq; -error: - free(ineq); - return NULL; -} - -static int any(int *con, unsigned len, int status) -{ - int i; - - for (i = 0; i < len ; ++i) - if (con[i] == status) - return 1; - return 0; -} - -static int count(int *con, unsigned len, int status) -{ - int i; - int c = 0; - - for (i = 0; i < len ; ++i) - if (con[i] == status) - c++; - return c; -} - -static int all(int *con, unsigned len, int status) -{ - int i; - - for (i = 0; i < len ; ++i) { - if (con[i] == STATUS_REDUNDANT) - continue; - if (con[i] != status) - return 0; - } - return 1; -} - -static void drop(struct isl_map *map, int i, struct isl_tab **tabs) -{ - isl_basic_map_free(map->p[i]); - isl_tab_free(tabs[i]); - - if (i != map->n - 1) { - map->p[i] = map->p[map->n - 1]; - tabs[i] = tabs[map->n - 1]; - } - tabs[map->n - 1] = NULL; - map->n--; -} - -/* Replace the pair of basic maps i and j by the basic map bounded - * by the valid constraints in both basic maps and the constraint - * in extra (if not NULL). - */ -static int fuse(struct isl_map *map, int i, int j, - struct isl_tab **tabs, int *eq_i, int *ineq_i, int *eq_j, int *ineq_j, - __isl_keep isl_mat *extra) -{ - int k, l; - struct isl_basic_map *fused = NULL; - struct isl_tab *fused_tab = NULL; - unsigned total = isl_basic_map_total_dim(map->p[i]); - unsigned extra_rows = extra ? extra->n_row : 0; - - fused = isl_basic_map_alloc_dim(isl_dim_copy(map->p[i]->dim), - map->p[i]->n_div, - map->p[i]->n_eq + map->p[j]->n_eq, - map->p[i]->n_ineq + map->p[j]->n_ineq + extra_rows); - if (!fused) - goto error; - - for (k = 0; k < map->p[i]->n_eq; ++k) { - if (eq_i && (eq_i[2 * k] != STATUS_VALID || - eq_i[2 * k + 1] != STATUS_VALID)) - continue; - l = isl_basic_map_alloc_equality(fused); - if (l < 0) - goto error; - isl_seq_cpy(fused->eq[l], map->p[i]->eq[k], 1 + total); - } - - for (k = 0; k < map->p[j]->n_eq; ++k) { - if (eq_j && (eq_j[2 * k] != STATUS_VALID || - eq_j[2 * k + 1] != STATUS_VALID)) - continue; - l = isl_basic_map_alloc_equality(fused); - if (l < 0) - goto error; - isl_seq_cpy(fused->eq[l], map->p[j]->eq[k], 1 + total); - } - - for (k = 0; k < map->p[i]->n_ineq; ++k) { - if (ineq_i[k] != STATUS_VALID) - continue; - l = isl_basic_map_alloc_inequality(fused); - if (l < 0) - goto error; - isl_seq_cpy(fused->ineq[l], map->p[i]->ineq[k], 1 + total); - } - - for (k = 0; k < map->p[j]->n_ineq; ++k) { - if (ineq_j[k] != STATUS_VALID) - continue; - l = isl_basic_map_alloc_inequality(fused); - if (l < 0) - goto error; - isl_seq_cpy(fused->ineq[l], map->p[j]->ineq[k], 1 + total); - } - - for (k = 0; k < map->p[i]->n_div; ++k) { - int l = isl_basic_map_alloc_div(fused); - if (l < 0) - goto error; - isl_seq_cpy(fused->div[l], map->p[i]->div[k], 1 + 1 + total); - } - - for (k = 0; k < extra_rows; ++k) { - l = isl_basic_map_alloc_inequality(fused); - if (l < 0) - goto error; - isl_seq_cpy(fused->ineq[l], extra->row[k], 1 + total); - } - - fused = isl_basic_map_gauss(fused, NULL); - ISL_F_SET(fused, ISL_BASIC_MAP_FINAL); - if (ISL_F_ISSET(map->p[i], ISL_BASIC_MAP_RATIONAL) && - ISL_F_ISSET(map->p[j], ISL_BASIC_MAP_RATIONAL)) - ISL_F_SET(fused, ISL_BASIC_MAP_RATIONAL); - - fused_tab = isl_tab_from_basic_map(fused); - if (isl_tab_detect_redundant(fused_tab) < 0) - goto error; - - isl_basic_map_free(map->p[i]); - map->p[i] = fused; - isl_tab_free(tabs[i]); - tabs[i] = fused_tab; - drop(map, j, tabs); - - return 1; -error: - isl_tab_free(fused_tab); - isl_basic_map_free(fused); - return -1; -} - -/* Given a pair of basic maps i and j such that all constraints are either - * "valid" or "cut", check if the facets corresponding to the "cut" - * constraints of i lie entirely within basic map j. - * If so, replace the pair by the basic map consisting of the valid - * constraints in both basic maps. - * - * To see that we are not introducing any extra points, call the - * two basic maps A and B and the resulting map U and let x - * be an element of U \setminus ( A \cup B ). - * Then there is a pair of cut constraints c_1 and c_2 in A and B such that x - * violates them. Let X be the intersection of U with the opposites - * of these constraints. Then x \in X. - * The facet corresponding to c_1 contains the corresponding facet of A. - * This facet is entirely contained in B, so c_2 is valid on the facet. - * However, since it is also (part of) a facet of X, -c_2 is also valid - * on the facet. This means c_2 is saturated on the facet, so c_1 and - * c_2 must be opposites of each other, but then x could not violate - * both of them. - */ -static int check_facets(struct isl_map *map, int i, int j, - struct isl_tab **tabs, int *ineq_i, int *ineq_j) -{ - int k, l; - struct isl_tab_undo *snap; - unsigned n_eq = map->p[i]->n_eq; - - snap = isl_tab_snap(tabs[i]); - - for (k = 0; k < map->p[i]->n_ineq; ++k) { - if (ineq_i[k] != STATUS_CUT) - continue; - if (isl_tab_select_facet(tabs[i], n_eq + k) < 0) - return -1; - for (l = 0; l < map->p[j]->n_ineq; ++l) { - int stat; - if (ineq_j[l] != STATUS_CUT) - continue; - stat = status_in(map->p[j]->ineq[l], tabs[i]); - if (stat != STATUS_VALID) - break; - } - if (isl_tab_rollback(tabs[i], snap) < 0) - return -1; - if (l < map->p[j]->n_ineq) - break; - } - - if (k < map->p[i]->n_ineq) - /* BAD CUT PAIR */ - return 0; - return fuse(map, i, j, tabs, NULL, ineq_i, NULL, ineq_j, NULL); -} - -/* Both basic maps have at least one inequality with and adjacent - * (but opposite) inequality in the other basic map. - * Check that there are no cut constraints and that there is only - * a single pair of adjacent inequalities. - * If so, we can replace the pair by a single basic map described - * by all but the pair of adjacent inequalities. - * Any additional points introduced lie strictly between the two - * adjacent hyperplanes and can therefore be integral. - * - * ____ _____ - * / ||\ / \ - * / || \ / \ - * \ || \ => \ \ - * \ || / \ / - * \___||_/ \_____/ - * - * The test for a single pair of adjancent inequalities is important - * for avoiding the combination of two basic maps like the following - * - * /| - * / | - * /__| - * _____ - * | | - * | | - * |___| - */ -static int check_adj_ineq(struct isl_map *map, int i, int j, - struct isl_tab **tabs, int *ineq_i, int *ineq_j) -{ - int changed = 0; - - if (any(ineq_i, map->p[i]->n_ineq, STATUS_CUT) || - any(ineq_j, map->p[j]->n_ineq, STATUS_CUT)) - /* ADJ INEQ CUT */ - ; - else if (count(ineq_i, map->p[i]->n_ineq, STATUS_ADJ_INEQ) == 1 && - count(ineq_j, map->p[j]->n_ineq, STATUS_ADJ_INEQ) == 1) - changed = fuse(map, i, j, tabs, NULL, ineq_i, NULL, ineq_j, NULL); - /* else ADJ INEQ TOO MANY */ - - return changed; -} - -/* Check if basic map "i" contains the basic map represented - * by the tableau "tab". - */ -static int contains(struct isl_map *map, int i, int *ineq_i, - struct isl_tab *tab) -{ - int k, l; - unsigned dim; - - dim = isl_basic_map_total_dim(map->p[i]); - for (k = 0; k < map->p[i]->n_eq; ++k) { - for (l = 0; l < 2; ++l) { - int stat; - isl_seq_neg(map->p[i]->eq[k], map->p[i]->eq[k], 1+dim); - stat = status_in(map->p[i]->eq[k], tab); - if (stat != STATUS_VALID) - return 0; - } - } - - for (k = 0; k < map->p[i]->n_ineq; ++k) { - int stat; - if (ineq_i[k] == STATUS_REDUNDANT) - continue; - stat = status_in(map->p[i]->ineq[k], tab); - if (stat != STATUS_VALID) - return 0; - } - return 1; -} - -/* Basic map "i" has an inequality "k" that is adjacent to some equality - * of basic map "j". All the other inequalities are valid for "j". - * Check if basic map "j" forms an extension of basic map "i". - * - * In particular, we relax constraint "k", compute the corresponding - * facet and check whether it is included in the other basic map. - * If so, we know that relaxing the constraint extends the basic - * map with exactly the other basic map (we already know that this - * other basic map is included in the extension, because there - * were no "cut" inequalities in "i") and we can replace the - * two basic maps by thie extension. - * ____ _____ - * / || / | - * / || / | - * \ || => \ | - * \ || \ | - * \___|| \____| - */ -static int is_extension(struct isl_map *map, int i, int j, int k, - struct isl_tab **tabs, int *eq_i, int *ineq_i, int *eq_j, int *ineq_j) -{ - int changed = 0; - int super; - struct isl_tab_undo *snap, *snap2; - unsigned n_eq = map->p[i]->n_eq; - - snap = isl_tab_snap(tabs[i]); - tabs[i] = isl_tab_relax(tabs[i], n_eq + k); - snap2 = isl_tab_snap(tabs[i]); - if (isl_tab_select_facet(tabs[i], n_eq + k) < 0) - return -1; - super = contains(map, j, ineq_j, tabs[i]); - if (super) { - if (isl_tab_rollback(tabs[i], snap2) < 0) - return -1; - map->p[i] = isl_basic_map_cow(map->p[i]); - if (!map->p[i]) - return -1; - isl_int_add_ui(map->p[i]->ineq[k][0], map->p[i]->ineq[k][0], 1); - ISL_F_SET(map->p[i], ISL_BASIC_MAP_FINAL); - drop(map, j, tabs); - changed = 1; - } else - if (isl_tab_rollback(tabs[i], snap) < 0) - return -1; - - return changed; -} - -/* For each non-redundant constraint in "bmap" (as determined by "tab"), - * wrap the constraint around "bound" such that it includes the whole - * set "set" and append the resulting constraint to "wraps". - * "wraps" is assumed to have been pre-allocated to the appropriate size. - * wraps->n_row is the number of actual wrapped constraints that have - * been added. - * If any of the wrapping problems results in a constraint that is - * identical to "bound", then this means that "set" is unbounded in such - * way that no wrapping is possible. If this happens then wraps->n_row - * is reset to zero. - */ -static int add_wraps(__isl_keep isl_mat *wraps, __isl_keep isl_basic_map *bmap, - struct isl_tab *tab, isl_int *bound, __isl_keep isl_set *set) -{ - int l; - int w; - unsigned total = isl_basic_map_total_dim(bmap); - - w = wraps->n_row; - - for (l = 0; l < bmap->n_ineq; ++l) { - if (isl_seq_is_neg(bound, bmap->ineq[l], 1 + total)) - continue; - if (isl_seq_eq(bound, bmap->ineq[l], 1 + total)) - continue; - if (isl_tab_is_redundant(tab, bmap->n_eq + l)) - continue; - - isl_seq_cpy(wraps->row[w], bound, 1 + total); - if (!isl_set_wrap_facet(set, wraps->row[w], bmap->ineq[l])) - return -1; - if (isl_seq_eq(wraps->row[w], bound, 1 + total)) - goto unbounded; - ++w; - } - for (l = 0; l < bmap->n_eq; ++l) { - if (isl_seq_is_neg(bound, bmap->eq[l], 1 + total)) - continue; - if (isl_seq_eq(bound, bmap->eq[l], 1 + total)) - continue; - - isl_seq_cpy(wraps->row[w], bound, 1 + total); - isl_seq_neg(wraps->row[w + 1], bmap->eq[l], 1 + total); - if (!isl_set_wrap_facet(set, wraps->row[w], wraps->row[w + 1])) - return -1; - if (isl_seq_eq(wraps->row[w], bound, 1 + total)) - goto unbounded; - ++w; - - isl_seq_cpy(wraps->row[w], bound, 1 + total); - if (!isl_set_wrap_facet(set, wraps->row[w], bmap->eq[l])) - return -1; - if (isl_seq_eq(wraps->row[w], bound, 1 + total)) - goto unbounded; - ++w; - } - - wraps->n_row = w; - return 0; -unbounded: - wraps->n_row = 0; - return 0; -} - -/* Check if the constraints in "wraps" from "first" until the last - * are all valid for the basic set represented by "tab". - * If not, wraps->n_row is set to zero. - */ -static int check_wraps(__isl_keep isl_mat *wraps, int first, - struct isl_tab *tab) -{ - int i; - - for (i = first; i < wraps->n_row; ++i) { - enum isl_ineq_type type; - type = isl_tab_ineq_type(tab, wraps->row[i]); - if (type == isl_ineq_error) - return -1; - if (type == isl_ineq_redundant) - continue; - wraps->n_row = 0; - return 0; - } - - return 0; -} - -/* Return a set that corresponds to the non-redudant constraints - * (as recorded in tab) of bmap. - * - * It's important to remove the redundant constraints as some - * of the other constraints may have been modified after the - * constraints were marked redundant. - * In particular, a constraint may have been relaxed. - * Redundant constraints are ignored when a constraint is relaxed - * and should therefore continue to be ignored ever after. - * Otherwise, the relaxation might be thwarted by some of - * these constraints. - */ -static __isl_give isl_set *set_from_updated_bmap(__isl_keep isl_basic_map *bmap, - struct isl_tab *tab) -{ - bmap = isl_basic_map_copy(bmap); - bmap = isl_basic_map_cow(bmap); - bmap = isl_basic_map_update_from_tab(bmap, tab); - return isl_set_from_basic_set(isl_basic_map_underlying_set(bmap)); -} - -/* Given a basic set i with a constraint k that is adjacent to either the - * whole of basic set j or a facet of basic set j, check if we can wrap - * both the facet corresponding to k and the facet of j (or the whole of j) - * around their ridges to include the other set. - * If so, replace the pair of basic sets by their union. - * - * All constraints of i (except k) are assumed to be valid for j. - * - * However, the constraints of j may not be valid for i and so - * we have to check that the wrapping constraints for j are valid for i. - * - * In the case where j has a facet adjacent to i, tab[j] is assumed - * to have been restricted to this facet, so that the non-redundant - * constraints in tab[j] are the ridges of the facet. - * Note that for the purpose of wrapping, it does not matter whether - * we wrap the ridges of i around the whole of j or just around - * the facet since all the other constraints are assumed to be valid for j. - * In practice, we wrap to include the whole of j. - * ____ _____ - * / | / \ - * / || / | - * \ || => \ | - * \ || \ | - * \___|| \____| - * - */ -static int can_wrap_in_facet(struct isl_map *map, int i, int j, int k, - struct isl_tab **tabs, int *eq_i, int *ineq_i, int *eq_j, int *ineq_j) -{ - int changed = 0; - struct isl_mat *wraps = NULL; - struct isl_set *set_i = NULL; - struct isl_set *set_j = NULL; - struct isl_vec *bound = NULL; - unsigned total = isl_basic_map_total_dim(map->p[i]); - struct isl_tab_undo *snap; - int n; - - set_i = set_from_updated_bmap(map->p[i], tabs[i]); - set_j = set_from_updated_bmap(map->p[j], tabs[j]); - wraps = isl_mat_alloc(map->ctx, 2 * (map->p[i]->n_eq + map->p[j]->n_eq) + - map->p[i]->n_ineq + map->p[j]->n_ineq, - 1 + total); - bound = isl_vec_alloc(map->ctx, 1 + total); - if (!set_i || !set_j || !wraps || !bound) - goto error; - - isl_seq_cpy(bound->el, map->p[i]->ineq[k], 1 + total); - isl_int_add_ui(bound->el[0], bound->el[0], 1); - - isl_seq_cpy(wraps->row[0], bound->el, 1 + total); - wraps->n_row = 1; - - if (add_wraps(wraps, map->p[j], tabs[j], bound->el, set_i) < 0) - goto error; - if (!wraps->n_row) - goto unbounded; - - snap = isl_tab_snap(tabs[i]); - - if (isl_tab_select_facet(tabs[i], map->p[i]->n_eq + k) < 0) - goto error; - if (isl_tab_detect_redundant(tabs[i]) < 0) - goto error; - - isl_seq_neg(bound->el, map->p[i]->ineq[k], 1 + total); - - n = wraps->n_row; - if (add_wraps(wraps, map->p[i], tabs[i], bound->el, set_j) < 0) - goto error; - - if (isl_tab_rollback(tabs[i], snap) < 0) - goto error; - if (check_wraps(wraps, n, tabs[i]) < 0) - goto error; - if (!wraps->n_row) - goto unbounded; - - changed = fuse(map, i, j, tabs, eq_i, ineq_i, eq_j, ineq_j, wraps); - -unbounded: - isl_mat_free(wraps); - - isl_set_free(set_i); - isl_set_free(set_j); - - isl_vec_free(bound); - - return changed; -error: - isl_vec_free(bound); - isl_mat_free(wraps); - isl_set_free(set_i); - isl_set_free(set_j); - return -1; -} - -/* Set the is_redundant property of the "n" constraints in "cuts", - * except "k" to "v". - * This is a fairly tricky operation as it bypasses isl_tab.c. - * The reason we want to temporarily mark some constraints redundant - * is that we want to ignore them in add_wraps. - * - * Initially all cut constraints are non-redundant, but the - * selection of a facet right before the call to this function - * may have made some of them redundant. - * Likewise, the same constraints are marked non-redundant - * in the second call to this function, before they are officially - * made non-redundant again in the subsequent rollback. - */ -static void set_is_redundant(struct isl_tab *tab, unsigned n_eq, - int *cuts, int n, int k, int v) -{ - int l; - - for (l = 0; l < n; ++l) { - if (l == k) - continue; - tab->con[n_eq + cuts[l]].is_redundant = v; - } -} - -/* Given a pair of basic maps i and j such that j sticks out - * of i at n cut constraints, each time by at most one, - * try to compute wrapping constraints and replace the two - * basic maps by a single basic map. - * The other constraints of i are assumed to be valid for j. - * - * The facets of i corresponding to the cut constraints are - * wrapped around their ridges, except those ridges determined - * by any of the other cut constraints. - * The intersections of cut constraints need to be ignored - * as the result of wrapping one cut constraint around another - * would result in a constraint cutting the union. - * In each case, the facets are wrapped to include the union - * of the two basic maps. - * - * The pieces of j that lie at an offset of exactly one from - * one of the cut constraints of i are wrapped around their edges. - * Here, there is no need to ignore intersections because we - * are wrapping around the union of the two basic maps. - * - * If any wrapping fails, i.e., if we cannot wrap to touch - * the union, then we give up. - * Otherwise, the pair of basic maps is replaced by their union. - */ -static int wrap_in_facets(struct isl_map *map, int i, int j, - int *cuts, int n, struct isl_tab **tabs, - int *eq_i, int *ineq_i, int *eq_j, int *ineq_j) -{ - int changed = 0; - isl_mat *wraps = NULL; - isl_set *set = NULL; - isl_vec *bound = NULL; - unsigned total = isl_basic_map_total_dim(map->p[i]); - int max_wrap; - int k; - struct isl_tab_undo *snap_i, *snap_j; - - if (isl_tab_extend_cons(tabs[j], 1) < 0) - goto error; - - max_wrap = 2 * (map->p[i]->n_eq + map->p[j]->n_eq) + - map->p[i]->n_ineq + map->p[j]->n_ineq; - max_wrap *= n; - - set = isl_set_union(set_from_updated_bmap(map->p[i], tabs[i]), - set_from_updated_bmap(map->p[j], tabs[j])); - wraps = isl_mat_alloc(map->ctx, max_wrap, 1 + total); - bound = isl_vec_alloc(map->ctx, 1 + total); - if (!set || !wraps || !bound) - goto error; - - snap_i = isl_tab_snap(tabs[i]); - snap_j = isl_tab_snap(tabs[j]); - - wraps->n_row = 0; - - for (k = 0; k < n; ++k) { - if (isl_tab_select_facet(tabs[i], map->p[i]->n_eq + cuts[k]) < 0) - goto error; - if (isl_tab_detect_redundant(tabs[i]) < 0) - goto error; - set_is_redundant(tabs[i], map->p[i]->n_eq, cuts, n, k, 1); - - isl_seq_neg(bound->el, map->p[i]->ineq[cuts[k]], 1 + total); - if (add_wraps(wraps, map->p[i], tabs[i], bound->el, set) < 0) - goto error; - - set_is_redundant(tabs[i], map->p[i]->n_eq, cuts, n, k, 0); - if (isl_tab_rollback(tabs[i], snap_i) < 0) - goto error; - - if (!wraps->n_row) - break; - - isl_seq_cpy(bound->el, map->p[i]->ineq[cuts[k]], 1 + total); - isl_int_add_ui(bound->el[0], bound->el[0], 1); - if (isl_tab_add_eq(tabs[j], bound->el) < 0) - goto error; - if (isl_tab_detect_redundant(tabs[j]) < 0) - goto error; - - if (!tabs[j]->empty && - add_wraps(wraps, map->p[j], tabs[j], bound->el, set) < 0) - goto error; - - if (isl_tab_rollback(tabs[j], snap_j) < 0) - goto error; - - if (!wraps->n_row) - break; - } - - if (k == n) - changed = fuse(map, i, j, tabs, - eq_i, ineq_i, eq_j, ineq_j, wraps); - - isl_vec_free(bound); - isl_mat_free(wraps); - isl_set_free(set); - - return changed; -error: - isl_vec_free(bound); - isl_mat_free(wraps); - isl_set_free(set); - return -1; -} - -/* Given two basic sets i and j such that i has no cut equalities, - * check if relaxing all the cut inequalities of i by one turns - * them into valid constraint for j and check if we can wrap in - * the bits that are sticking out. - * If so, replace the pair by their union. - * - * We first check if all relaxed cut inequalities of i are valid for j - * and then try to wrap in the intersections of the relaxed cut inequalities - * with j. - * - * During this wrapping, we consider the points of j that lie at a distance - * of exactly 1 from i. In particular, we ignore the points that lie in - * between this lower-dimensional space and the basic map i. - * We can therefore only apply this to integer maps. - * ____ _____ - * / ___|_ / \ - * / | | / | - * \ | | => \ | - * \|____| \ | - * \___| \____/ - * - * _____ ______ - * | ____|_ | \ - * | | | | | - * | | | => | | - * |_| | | | - * |_____| \______| - * - * _______ - * | | - * | |\ | - * | | \ | - * | | \ | - * | | \| - * | | \ - * | |_____\ - * | | - * |_______| - * - * Wrapping can fail if the result of wrapping one of the facets - * around its edges does not produce any new facet constraint. - * In particular, this happens when we try to wrap in unbounded sets. - * - * _______________________________________________________________________ - * | - * | ___ - * | | | - * |_| |_________________________________________________________________ - * |___| - * - * The following is not an acceptable result of coalescing the above two - * sets as it includes extra integer points. - * _______________________________________________________________________ - * | - * | - * | - * | - * \______________________________________________________________________ - */ -static int can_wrap_in_set(struct isl_map *map, int i, int j, - struct isl_tab **tabs, int *eq_i, int *ineq_i, int *eq_j, int *ineq_j) -{ - int changed = 0; - int k, m; - int n; - int *cuts = NULL; - - if (ISL_F_ISSET(map->p[i], ISL_BASIC_MAP_RATIONAL) || - ISL_F_ISSET(map->p[j], ISL_BASIC_MAP_RATIONAL)) - return 0; - - n = count(ineq_i, map->p[i]->n_ineq, STATUS_CUT); - if (n == 0) - return 0; - - cuts = isl_alloc_array(map->ctx, int, n); - if (!cuts) - return -1; - - for (k = 0, m = 0; m < n; ++k) { - enum isl_ineq_type type; - - if (ineq_i[k] != STATUS_CUT) - continue; - - isl_int_add_ui(map->p[i]->ineq[k][0], map->p[i]->ineq[k][0], 1); - type = isl_tab_ineq_type(tabs[j], map->p[i]->ineq[k]); - isl_int_sub_ui(map->p[i]->ineq[k][0], map->p[i]->ineq[k][0], 1); - if (type == isl_ineq_error) - goto error; - if (type != isl_ineq_redundant) - break; - cuts[m] = k; - ++m; - } - - if (m == n) - changed = wrap_in_facets(map, i, j, cuts, n, tabs, - eq_i, ineq_i, eq_j, ineq_j); - - free(cuts); - - return changed; -error: - free(cuts); - return -1; -} - -/* Check if either i or j has a single cut constraint that can - * be used to wrap in (a facet of) the other basic set. - * if so, replace the pair by their union. - */ -static int check_wrap(struct isl_map *map, int i, int j, - struct isl_tab **tabs, int *eq_i, int *ineq_i, int *eq_j, int *ineq_j) -{ - int changed = 0; - - if (!any(eq_i, 2 * map->p[i]->n_eq, STATUS_CUT)) - changed = can_wrap_in_set(map, i, j, tabs, - eq_i, ineq_i, eq_j, ineq_j); - if (changed) - return changed; - - if (!any(eq_j, 2 * map->p[j]->n_eq, STATUS_CUT)) - changed = can_wrap_in_set(map, j, i, tabs, - eq_j, ineq_j, eq_i, ineq_i); - return changed; -} - -/* At least one of the basic maps has an equality that is adjacent - * to inequality. Make sure that only one of the basic maps has - * such an equality and that the other basic map has exactly one - * inequality adjacent to an equality. - * We call the basic map that has the inequality "i" and the basic - * map that has the equality "j". - * If "i" has any "cut" (in)equality, then relaxing the inequality - * by one would not result in a basic map that contains the other - * basic map. - */ -static int check_adj_eq(struct isl_map *map, int i, int j, - struct isl_tab **tabs, int *eq_i, int *ineq_i, int *eq_j, int *ineq_j) -{ - int changed = 0; - int k; - - if (any(eq_i, 2 * map->p[i]->n_eq, STATUS_ADJ_INEQ) && - any(eq_j, 2 * map->p[j]->n_eq, STATUS_ADJ_INEQ)) - /* ADJ EQ TOO MANY */ - return 0; - - if (any(eq_i, 2 * map->p[i]->n_eq, STATUS_ADJ_INEQ)) - return check_adj_eq(map, j, i, tabs, - eq_j, ineq_j, eq_i, ineq_i); - - /* j has an equality adjacent to an inequality in i */ - - if (any(eq_i, 2 * map->p[i]->n_eq, STATUS_CUT)) - return 0; - if (any(ineq_i, map->p[i]->n_ineq, STATUS_CUT)) - /* ADJ EQ CUT */ - return 0; - if (count(ineq_i, map->p[i]->n_ineq, STATUS_ADJ_EQ) != 1 || - any(ineq_j, map->p[j]->n_ineq, STATUS_ADJ_EQ) || - any(ineq_i, map->p[i]->n_ineq, STATUS_ADJ_INEQ) || - any(ineq_j, map->p[j]->n_ineq, STATUS_ADJ_INEQ)) - /* ADJ EQ TOO MANY */ - return 0; - - for (k = 0; k < map->p[i]->n_ineq ; ++k) - if (ineq_i[k] == STATUS_ADJ_EQ) - break; - - changed = is_extension(map, i, j, k, tabs, eq_i, ineq_i, eq_j, ineq_j); - if (changed) - return changed; - - if (count(eq_j, 2 * map->p[j]->n_eq, STATUS_ADJ_INEQ) != 1) - return 0; - - changed = can_wrap_in_facet(map, i, j, k, tabs, eq_i, ineq_i, eq_j, ineq_j); - - return changed; -} - -/* The two basic maps lie on adjacent hyperplanes. In particular, - * basic map "i" has an equality that lies parallel to basic map "j". - * Check if we can wrap the facets around the parallel hyperplanes - * to include the other set. - * - * We perform basically the same operations as can_wrap_in_facet, - * except that we don't need to select a facet of one of the sets. - * _ - * \\ \\ - * \\ => \\ - * \ \| - * - * We only allow one equality of "i" to be adjacent to an equality of "j" - * to avoid coalescing - * - * [m, n] -> { [x, y] -> [x, 1 + y] : x >= 1 and y >= 1 and - * x <= 10 and y <= 10; - * [x, y] -> [1 + x, y] : x >= 1 and x <= 20 and - * y >= 5 and y <= 15 } - * - * to - * - * [m, n] -> { [x, y] -> [x2, y2] : x >= 1 and 10y2 <= 20 - x + 10y and - * 4y2 >= 5 + 3y and 5y2 <= 15 + 4y and - * y2 <= 1 + x + y - x2 and y2 >= y and - * y2 >= 1 + x + y - x2 } - */ -static int check_eq_adj_eq(struct isl_map *map, int i, int j, - struct isl_tab **tabs, int *eq_i, int *ineq_i, int *eq_j, int *ineq_j) -{ - int k; - int changed = 0; - struct isl_mat *wraps = NULL; - struct isl_set *set_i = NULL; - struct isl_set *set_j = NULL; - struct isl_vec *bound = NULL; - unsigned total = isl_basic_map_total_dim(map->p[i]); - - if (count(eq_i, 2 * map->p[i]->n_eq, STATUS_ADJ_EQ) != 1) - return 0; - - for (k = 0; k < 2 * map->p[i]->n_eq ; ++k) - if (eq_i[k] == STATUS_ADJ_EQ) - break; - - set_i = set_from_updated_bmap(map->p[i], tabs[i]); - set_j = set_from_updated_bmap(map->p[j], tabs[j]); - wraps = isl_mat_alloc(map->ctx, 2 * (map->p[i]->n_eq + map->p[j]->n_eq) + - map->p[i]->n_ineq + map->p[j]->n_ineq, - 1 + total); - bound = isl_vec_alloc(map->ctx, 1 + total); - if (!set_i || !set_j || !wraps || !bound) - goto error; - - if (k % 2 == 0) - isl_seq_neg(bound->el, map->p[i]->eq[k / 2], 1 + total); - else - isl_seq_cpy(bound->el, map->p[i]->eq[k / 2], 1 + total); - isl_int_add_ui(bound->el[0], bound->el[0], 1); - - isl_seq_cpy(wraps->row[0], bound->el, 1 + total); - wraps->n_row = 1; - - if (add_wraps(wraps, map->p[j], tabs[j], bound->el, set_i) < 0) - goto error; - if (!wraps->n_row) - goto unbounded; - - isl_int_sub_ui(bound->el[0], bound->el[0], 1); - isl_seq_neg(bound->el, bound->el, 1 + total); - - isl_seq_cpy(wraps->row[wraps->n_row], bound->el, 1 + total); - wraps->n_row++; - - if (add_wraps(wraps, map->p[i], tabs[i], bound->el, set_j) < 0) - goto error; - if (!wraps->n_row) - goto unbounded; - - changed = fuse(map, i, j, tabs, eq_i, ineq_i, eq_j, ineq_j, wraps); - - if (0) { -error: changed = -1; - } -unbounded: - - isl_mat_free(wraps); - isl_set_free(set_i); - isl_set_free(set_j); - isl_vec_free(bound); - - return changed; -} - -/* Check if the union of the given pair of basic maps - * can be represented by a single basic map. - * If so, replace the pair by the single basic map and return 1. - * Otherwise, return 0; - * - * We first check the effect of each constraint of one basic map - * on the other basic map. - * The constraint may be - * redundant the constraint is redundant in its own - * basic map and should be ignore and removed - * in the end - * valid all (integer) points of the other basic map - * satisfy the constraint - * separate no (integer) point of the other basic map - * satisfies the constraint - * cut some but not all points of the other basic map - * satisfy the constraint - * adj_eq the given constraint is adjacent (on the outside) - * to an equality of the other basic map - * adj_ineq the given constraint is adjacent (on the outside) - * to an inequality of the other basic map - * - * We consider seven cases in which we can replace the pair by a single - * basic map. We ignore all "redundant" constraints. - * - * 1. all constraints of one basic map are valid - * => the other basic map is a subset and can be removed - * - * 2. all constraints of both basic maps are either "valid" or "cut" - * and the facets corresponding to the "cut" constraints - * of one of the basic maps lies entirely inside the other basic map - * => the pair can be replaced by a basic map consisting - * of the valid constraints in both basic maps - * - * 3. there is a single pair of adjacent inequalities - * (all other constraints are "valid") - * => the pair can be replaced by a basic map consisting - * of the valid constraints in both basic maps - * - * 4. there is a single adjacent pair of an inequality and an equality, - * the other constraints of the basic map containing the inequality are - * "valid". Moreover, if the inequality the basic map is relaxed - * and then turned into an equality, then resulting facet lies - * entirely inside the other basic map - * => the pair can be replaced by the basic map containing - * the inequality, with the inequality relaxed. - * - * 5. there is a single adjacent pair of an inequality and an equality, - * the other constraints of the basic map containing the inequality are - * "valid". Moreover, the facets corresponding to both - * the inequality and the equality can be wrapped around their - * ridges to include the other basic map - * => the pair can be replaced by a basic map consisting - * of the valid constraints in both basic maps together - * with all wrapping constraints - * - * 6. one of the basic maps extends beyond the other by at most one. - * Moreover, the facets corresponding to the cut constraints and - * the pieces of the other basic map at offset one from these cut - * constraints can be wrapped around their ridges to include - * the union of the two basic maps - * => the pair can be replaced by a basic map consisting - * of the valid constraints in both basic maps together - * with all wrapping constraints - * - * 7. the two basic maps live in adjacent hyperplanes. In principle - * such sets can always be combined through wrapping, but we impose - * that there is only one such pair, to avoid overeager coalescing. - * - * Throughout the computation, we maintain a collection of tableaus - * corresponding to the basic maps. When the basic maps are dropped - * or combined, the tableaus are modified accordingly. - */ -static int coalesce_pair(struct isl_map *map, int i, int j, - struct isl_tab **tabs) -{ - int changed = 0; - int *eq_i = NULL; - int *eq_j = NULL; - int *ineq_i = NULL; - int *ineq_j = NULL; - - eq_i = eq_status_in(map, i, j, tabs); - if (!eq_i) - goto error; - if (any(eq_i, 2 * map->p[i]->n_eq, STATUS_ERROR)) - goto error; - if (any(eq_i, 2 * map->p[i]->n_eq, STATUS_SEPARATE)) - goto done; - - eq_j = eq_status_in(map, j, i, tabs); - if (!eq_j) - goto error; - if (any(eq_j, 2 * map->p[j]->n_eq, STATUS_ERROR)) - goto error; - if (any(eq_j, 2 * map->p[j]->n_eq, STATUS_SEPARATE)) - goto done; - - ineq_i = ineq_status_in(map, i, j, tabs); - if (!ineq_i) - goto error; - if (any(ineq_i, map->p[i]->n_ineq, STATUS_ERROR)) - goto error; - if (any(ineq_i, map->p[i]->n_ineq, STATUS_SEPARATE)) - goto done; - - ineq_j = ineq_status_in(map, j, i, tabs); - if (!ineq_j) - goto error; - if (any(ineq_j, map->p[j]->n_ineq, STATUS_ERROR)) - goto error; - if (any(ineq_j, map->p[j]->n_ineq, STATUS_SEPARATE)) - goto done; - - if (all(eq_i, 2 * map->p[i]->n_eq, STATUS_VALID) && - all(ineq_i, map->p[i]->n_ineq, STATUS_VALID)) { - drop(map, j, tabs); - changed = 1; - } else if (all(eq_j, 2 * map->p[j]->n_eq, STATUS_VALID) && - all(ineq_j, map->p[j]->n_ineq, STATUS_VALID)) { - drop(map, i, tabs); - changed = 1; - } else if (any(eq_i, 2 * map->p[i]->n_eq, STATUS_ADJ_EQ)) { - changed = check_eq_adj_eq(map, i, j, tabs, - eq_i, ineq_i, eq_j, ineq_j); - } else if (any(eq_j, 2 * map->p[j]->n_eq, STATUS_ADJ_EQ)) { - changed = check_eq_adj_eq(map, j, i, tabs, - eq_j, ineq_j, eq_i, ineq_i); - } else if (any(eq_i, 2 * map->p[i]->n_eq, STATUS_ADJ_INEQ) || - any(eq_j, 2 * map->p[j]->n_eq, STATUS_ADJ_INEQ)) { - changed = check_adj_eq(map, i, j, tabs, - eq_i, ineq_i, eq_j, ineq_j); - } else if (any(ineq_i, map->p[i]->n_ineq, STATUS_ADJ_EQ) || - any(ineq_j, map->p[j]->n_ineq, STATUS_ADJ_EQ)) { - /* Can't happen */ - /* BAD ADJ INEQ */ - } else if (any(ineq_i, map->p[i]->n_ineq, STATUS_ADJ_INEQ) || - any(ineq_j, map->p[j]->n_ineq, STATUS_ADJ_INEQ)) { - if (!any(eq_i, 2 * map->p[i]->n_eq, STATUS_CUT) && - !any(eq_j, 2 * map->p[j]->n_eq, STATUS_CUT)) - changed = check_adj_ineq(map, i, j, tabs, - ineq_i, ineq_j); - } else { - if (!any(eq_i, 2 * map->p[i]->n_eq, STATUS_CUT) && - !any(eq_j, 2 * map->p[j]->n_eq, STATUS_CUT)) - changed = check_facets(map, i, j, tabs, ineq_i, ineq_j); - if (!changed) - changed = check_wrap(map, i, j, tabs, - eq_i, ineq_i, eq_j, ineq_j); - } - -done: - free(eq_i); - free(eq_j); - free(ineq_i); - free(ineq_j); - return changed; -error: - free(eq_i); - free(eq_j); - free(ineq_i); - free(ineq_j); - return -1; -} - -static struct isl_map *coalesce(struct isl_map *map, struct isl_tab **tabs) -{ - int i, j; - - for (i = map->n - 2; i >= 0; --i) -restart: - for (j = i + 1; j < map->n; ++j) { - int changed; - changed = coalesce_pair(map, i, j, tabs); - if (changed < 0) - goto error; - if (changed) - goto restart; - } - return map; -error: - isl_map_free(map); - return NULL; -} - -/* For each pair of basic maps in the map, check if the union of the two - * can be represented by a single basic map. - * If so, replace the pair by the single basic map and start over. - */ -struct isl_map *isl_map_coalesce(struct isl_map *map) -{ - int i; - unsigned n; - struct isl_tab **tabs = NULL; - - if (!map) - return NULL; - - if (map->n <= 1) - return map; - - map = isl_map_align_divs(map); - - tabs = isl_calloc_array(map->ctx, struct isl_tab *, map->n); - if (!tabs) - goto error; - - n = map->n; - for (i = 0; i < map->n; ++i) { - tabs[i] = isl_tab_from_basic_map(map->p[i]); - if (!tabs[i]) - goto error; - if (!ISL_F_ISSET(map->p[i], ISL_BASIC_MAP_NO_IMPLICIT)) - if (isl_tab_detect_implicit_equalities(tabs[i]) < 0) - goto error; - if (!ISL_F_ISSET(map->p[i], ISL_BASIC_MAP_NO_REDUNDANT)) - if (isl_tab_detect_redundant(tabs[i]) < 0) - goto error; - } - for (i = map->n - 1; i >= 0; --i) - if (tabs[i]->empty) - drop(map, i, tabs); - - map = coalesce(map, tabs); - - if (map) - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_update_from_tab(map->p[i], - tabs[i]); - map->p[i] = isl_basic_map_finalize(map->p[i]); - if (!map->p[i]) - goto error; - ISL_F_SET(map->p[i], ISL_BASIC_MAP_NO_IMPLICIT); - ISL_F_SET(map->p[i], ISL_BASIC_MAP_NO_REDUNDANT); - } - - for (i = 0; i < n; ++i) - isl_tab_free(tabs[i]); - - free(tabs); - - return map; -error: - if (tabs) - for (i = 0; i < n; ++i) - isl_tab_free(tabs[i]); - free(tabs); - isl_map_free(map); - return NULL; -} - -/* For each pair of basic sets in the set, check if the union of the two - * can be represented by a single basic set. - * If so, replace the pair by the single basic set and start over. - */ -struct isl_set *isl_set_coalesce(struct isl_set *set) -{ - return (struct isl_set *)isl_map_coalesce((struct isl_map *)set); -} diff --git a/cloog-0.16.3/isl/isl_config.h.in b/cloog-0.16.3/isl/isl_config.h.in deleted file mode 100644 index b63f626..0000000 --- a/cloog-0.16.3/isl/isl_config.h.in +++ /dev/null @@ -1,100 +0,0 @@ -/* isl_config.h.in. Generated from configure.ac by autoheader. */ - -/* most gcc compilers know a function __attribute__((__warn_unused_result__)) - */ -#undef GCC_WARN_UNUSED_RESULT - -/* Define to 1 if you have the declaration of `ffs', and to 0 if you don't. */ -#undef HAVE_DECL_FFS - -/* Define to 1 if you have the declaration of `mp_get_memory_functions', and - to 0 if you don't. */ -#undef HAVE_DECL_MP_GET_MEMORY_FUNCTIONS - -/* Define to 1 if you have the declaration of `__builtin_ffs', and to 0 if you - don't. */ -#undef HAVE_DECL___BUILTIN_FFS - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* define if your compiler has __attribute__ */ -#undef HAVE___ATTRIBUTE__ - -/* piplib is available */ -#undef ISL_PIPLIB - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#undef LT_OBJDIR - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* The size of `char', as computed by sizeof. */ -#undef SIZEOF_CHAR - -/* The size of `int', as computed by sizeof. */ -#undef SIZEOF_INT - -/* The size of `long', as computed by sizeof. */ -#undef SIZEOF_LONG - -/* The size of `short', as computed by sizeof. */ -#undef SIZEOF_SHORT - -/* The size of `void*', as computed by sizeof. */ -#undef SIZEOF_VOIDP - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Version number of package */ -#undef VERSION - -#include diff --git a/cloog-0.16.3/isl/isl_config_post.h b/cloog-0.16.3/isl/isl_config_post.h deleted file mode 100644 index a9c23f4..0000000 --- a/cloog-0.16.3/isl/isl_config_post.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef HAVE___ATTRIBUTE__ -#define __attribute__(x) -#endif - -#if (HAVE_DECL_FFS==0) && (HAVE_DECL___BUILTIN_FFS==1) -# define ffs __builtin_ffs -#endif diff --git a/cloog-0.16.3/isl/isl_constraint.c b/cloog-0.16.3/isl/isl_constraint.c deleted file mode 100644 index 7c4b778..0000000 --- a/cloog-0.16.3/isl/isl_constraint.c +++ /dev/null @@ -1,1181 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include - -isl_ctx *isl_constraint_get_ctx(__isl_keep isl_constraint *c) -{ - return c ? c->ctx : NULL; -} - -static unsigned n(struct isl_constraint *c, enum isl_dim_type type) -{ - return isl_basic_map_dim(c->bmap, type); -} - -static unsigned offset(struct isl_constraint *c, enum isl_dim_type type) -{ - struct isl_dim *dim = c->bmap->dim; - switch (type) { - case isl_dim_param: return 1; - case isl_dim_in: return 1 + dim->nparam; - case isl_dim_out: return 1 + dim->nparam + dim->n_in; - case isl_dim_div: return 1 + dim->nparam + dim->n_in + dim->n_out; - default: return 0; - } -} - -static unsigned basic_map_offset(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type) -{ - return type == isl_dim_div ? 1 + isl_dim_total(bmap->dim) - : 1 + isl_dim_offset(bmap->dim, type); -} - -static unsigned basic_set_offset(struct isl_basic_set *bset, - enum isl_dim_type type) -{ - struct isl_dim *dim = bset->dim; - switch (type) { - case isl_dim_param: return 1; - case isl_dim_in: return 1 + dim->nparam; - case isl_dim_out: return 1 + dim->nparam + dim->n_in; - case isl_dim_div: return 1 + dim->nparam + dim->n_in + dim->n_out; - default: return 0; - } -} - -struct isl_constraint *isl_basic_map_constraint(struct isl_basic_map *bmap, - isl_int **line) -{ - struct isl_constraint *constraint; - - if (!bmap || !line) - goto error; - - constraint = isl_alloc_type(bmap->ctx, struct isl_constraint); - if (!constraint) - goto error; - - constraint->ctx = bmap->ctx; - isl_ctx_ref(constraint->ctx); - constraint->ref = 1; - constraint->bmap = bmap; - constraint->line = line; - - return constraint; -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_constraint *isl_basic_set_constraint(struct isl_basic_set *bset, - isl_int **line) -{ - return isl_basic_map_constraint((struct isl_basic_map *)bset, line); -} - -struct isl_constraint *isl_equality_alloc(struct isl_dim *dim) -{ - struct isl_basic_map *bmap; - - if (!dim) - return NULL; - - bmap = isl_basic_map_alloc_dim(dim, 0, 1, 0); - if (!bmap) - return NULL; - - isl_basic_map_alloc_equality(bmap); - isl_seq_clr(bmap->eq[0], 1 + isl_basic_map_total_dim(bmap)); - return isl_basic_map_constraint(bmap, &bmap->eq[0]); -} - -struct isl_constraint *isl_inequality_alloc(struct isl_dim *dim) -{ - struct isl_basic_map *bmap; - - if (!dim) - return NULL; - - bmap = isl_basic_map_alloc_dim(dim, 0, 0, 1); - if (!bmap) - return NULL; - - isl_basic_map_alloc_inequality(bmap); - isl_seq_clr(bmap->ineq[0], 1 + isl_basic_map_total_dim(bmap)); - return isl_basic_map_constraint(bmap, &bmap->ineq[0]); -} - -struct isl_constraint *isl_constraint_dup(struct isl_constraint *c) -{ - struct isl_basic_map *bmap; - int i; - int eq; - - if (!c) - return NULL; - - eq = c->line < c->bmap->eq + c->bmap->n_eq; - i = eq ? c->line - c->bmap->eq : c->line - c->bmap->ineq; - bmap = isl_basic_map_copy(c->bmap); - if (!bmap) - return NULL; - return isl_basic_map_constraint(bmap, eq ? bmap->eq + i : bmap->ineq + i); -} - -struct isl_constraint *isl_constraint_cow(struct isl_constraint *c) -{ - if (!c) - return NULL; - - if (c->ref == 1) - return c; - c->ref--; - return isl_constraint_dup(c); -} - -struct isl_constraint *isl_constraint_copy(struct isl_constraint *constraint) -{ - if (!constraint) - return NULL; - - constraint->ref++; - return constraint; -} - -void isl_constraint_free(struct isl_constraint *c) -{ - if (!c) - return; - - if (--c->ref > 0) - return; - - isl_basic_map_free(c->bmap); - isl_ctx_deref(c->ctx); - free(c); -} - -__isl_give isl_constraint *isl_basic_map_first_constraint( - __isl_take isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - - if (bmap->n_eq > 0) - return isl_basic_map_constraint(bmap, &bmap->eq[0]); - - if (bmap->n_ineq > 0) - return isl_basic_map_constraint(bmap, &bmap->ineq[0]); - - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_constraint *isl_basic_set_first_constraint( - __isl_take isl_basic_set *bset) -{ - return isl_basic_map_first_constraint((struct isl_basic_map *)bset); -} - -struct isl_constraint *isl_constraint_next(struct isl_constraint *c) -{ - c = isl_constraint_cow(c); - if (c->line >= c->bmap->eq) { - c->line++; - if (c->line < c->bmap->eq + c->bmap->n_eq) - return c; - c->line = c->bmap->ineq; - } else - c->line++; - if (c->line < c->bmap->ineq + c->bmap->n_ineq) - return c; - isl_constraint_free(c); - return NULL; -} - -int isl_basic_map_foreach_constraint(__isl_keep isl_basic_map *bmap, - int (*fn)(__isl_take isl_constraint *c, void *user), void *user) -{ - int i; - struct isl_constraint *c; - - if (!bmap) - return -1; - - isl_assert(bmap->ctx, ISL_F_ISSET(bmap, ISL_BASIC_MAP_FINAL), - return -1); - - for (i = 0; i < bmap->n_eq; ++i) { - c = isl_basic_map_constraint(isl_basic_map_copy(bmap), - &bmap->eq[i]); - if (!c) - return -1; - if (fn(c, user) < 0) - return -1; - } - - for (i = 0; i < bmap->n_ineq; ++i) { - c = isl_basic_map_constraint(isl_basic_map_copy(bmap), - &bmap->ineq[i]); - if (!c) - return -1; - if (fn(c, user) < 0) - return -1; - } - - return 0; -} - -int isl_basic_set_foreach_constraint(__isl_keep isl_basic_set *bset, - int (*fn)(__isl_take isl_constraint *c, void *user), void *user) -{ - return isl_basic_map_foreach_constraint((isl_basic_map *)bset, fn, user); -} - -int isl_constraint_is_equal(struct isl_constraint *constraint1, - struct isl_constraint *constraint2) -{ - if (!constraint1 || !constraint2) - return 0; - return constraint1->bmap == constraint2->bmap && - constraint1->line == constraint2->line; -} - -struct isl_basic_map *isl_basic_map_add_constraint( - struct isl_basic_map *bmap, struct isl_constraint *constraint) -{ - if (!bmap || !constraint) - goto error; - - isl_assert(constraint->ctx, - isl_dim_equal(bmap->dim, constraint->bmap->dim), goto error); - - bmap = isl_basic_map_intersect(bmap, - isl_basic_map_from_constraint(constraint)); - return bmap; -error: - isl_basic_map_free(bmap); - isl_constraint_free(constraint); - return NULL; -} - -struct isl_basic_set *isl_basic_set_add_constraint( - struct isl_basic_set *bset, struct isl_constraint *constraint) -{ - return (struct isl_basic_set *) - isl_basic_map_add_constraint((struct isl_basic_map *)bset, - constraint); -} - -__isl_give isl_map *isl_map_add_constraint(__isl_take isl_map *map, - __isl_take isl_constraint *constraint) -{ - isl_basic_map *bmap; - - bmap = isl_basic_map_from_constraint(constraint); - map = isl_map_intersect(map, isl_map_from_basic_map(bmap)); - - return map; -} - -__isl_give isl_set *isl_set_add_constraint(__isl_take isl_set *set, - __isl_take isl_constraint *constraint) -{ - return isl_map_add_constraint(set, constraint); -} - -struct isl_constraint *isl_constraint_add_div(struct isl_constraint *constraint, - struct isl_div *div, int *pos) -{ - if (!constraint || !div) - goto error; - - isl_assert(constraint->ctx, - isl_dim_equal(div->bmap->dim, constraint->bmap->dim), goto error); - isl_assert(constraint->ctx, - constraint->bmap->n_eq + constraint->bmap->n_ineq == 1, goto error); - - constraint->bmap = isl_basic_map_cow(constraint->bmap); - constraint->bmap = isl_basic_map_extend_dim(constraint->bmap, - isl_dim_copy(constraint->bmap->dim), 1, 0, 0); - if (!constraint->bmap) - goto error; - constraint->line = &constraint->bmap->ineq[0]; - *pos = isl_basic_map_alloc_div(constraint->bmap); - if (*pos < 0) - goto error; - isl_seq_cpy(constraint->bmap->div[*pos], div->line[0], - 1 + 1 + isl_basic_map_total_dim(constraint->bmap)); - isl_div_free(div); - return constraint; -error: - isl_constraint_free(constraint); - isl_div_free(div); - return NULL; -} - -__isl_give isl_dim *isl_constraint_get_dim( - __isl_keep isl_constraint *constraint) -{ - return constraint ? isl_basic_map_get_dim(constraint->bmap) : NULL; -} - -int isl_constraint_dim(struct isl_constraint *constraint, - enum isl_dim_type type) -{ - if (!constraint) - return -1; - return n(constraint, type); -} - -int isl_constraint_involves_dims(__isl_keep isl_constraint *constraint, - enum isl_dim_type type, unsigned first, unsigned n) -{ - if (!constraint) - return -1; - - if (first + n > isl_basic_set_dim(constraint->bmap, type)) - isl_die(constraint->ctx, isl_error_invalid, - "index out of bounds", return -1); - - first += isl_basic_map_offset(constraint->bmap, type); - - if (isl_seq_first_non_zero(constraint->line[0] + first, n) >= 0) - return 1; - - return 0; -} - -const char *isl_constraint_get_dim_name(__isl_keep isl_constraint *constraint, - enum isl_dim_type type, unsigned pos) -{ - return constraint ? - isl_basic_map_get_dim_name(constraint->bmap, type, pos) : NULL; -} - -void isl_constraint_get_constant(struct isl_constraint *constraint, isl_int *v) -{ - if (!constraint) - return; - isl_int_set(*v, constraint->line[0][0]); -} - -void isl_constraint_get_coefficient(struct isl_constraint *constraint, - enum isl_dim_type type, int pos, isl_int *v) -{ - if (!constraint) - return; - - isl_assert(constraint->ctx, pos < n(constraint, type), return); - isl_int_set(*v, constraint->line[0][offset(constraint, type) + pos]); -} - -struct isl_div *isl_constraint_div(struct isl_constraint *constraint, int pos) -{ - if (!constraint) - return NULL; - - isl_assert(constraint->ctx, pos < n(constraint, isl_dim_div), - return NULL); - isl_assert(constraint->ctx, - !isl_int_is_zero(constraint->bmap->div[pos][0]), return NULL); - return isl_basic_map_div(isl_basic_map_copy(constraint->bmap), pos); -} - -void isl_constraint_set_constant(struct isl_constraint *constraint, isl_int v) -{ - if (!constraint) - return; - isl_int_set(constraint->line[0][0], v); -} - -void isl_constraint_set_constant_si(__isl_keep isl_constraint *constraint, - int v) -{ - if (!constraint) - return; - isl_int_set_si(constraint->line[0][0], v); -} - -void isl_constraint_set_coefficient(struct isl_constraint *constraint, - enum isl_dim_type type, int pos, isl_int v) -{ - if (!constraint) - return; - - isl_assert(constraint->ctx, pos < n(constraint, type), return); - isl_int_set(constraint->line[0][offset(constraint, type) + pos], v); -} - -void isl_constraint_set_coefficient_si(__isl_keep isl_constraint *constraint, - enum isl_dim_type type, int pos, int v) -{ - if (!constraint) - return; - - isl_assert(constraint->ctx, pos < n(constraint, type), return); - isl_int_set_si(constraint->line[0][offset(constraint, type) + pos], v); -} - -void isl_constraint_clear(struct isl_constraint *constraint) -{ - unsigned total; - - if (!constraint) - return; - total = isl_basic_map_total_dim(constraint->bmap); - isl_seq_clr(constraint->line[0], 1 + total); -} - -/* Check whether the two basic maps have identical divs in the same order. - */ -static int equal_divs(__isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2) -{ - int i; - unsigned total; - - if (!isl_basic_map_divs_known(bmap1)) - return 0; - if (!isl_basic_map_divs_known(bmap2)) - return 0; - if (bmap1->n_div != bmap2->n_div) - return 0; - - total = isl_basic_map_total_dim(bmap1); - for (i = 0; i < bmap1->n_div; ++i) - if (!isl_seq_eq(bmap1->div[i], bmap2->div[i], 2 + total)) - return 0; - - return 1; -} - -/* Drop any constraint from "bset" that is identical to "constraint". - * In particular, this means that the local spaces of "bset" and - * "constraint" need to be the same. - * - * Since the given constraint may actually be a pointer into the bset, - * we have to be careful not to reorder the constraints as the user - * may be holding on to other constraints from the same bset. - * This should be cleaned up when the internal representation of - * isl_constraint is changed to use isl_aff. - */ -__isl_give isl_basic_set *isl_basic_set_drop_constraint( - __isl_take isl_basic_set *bset, __isl_take isl_constraint *constraint) -{ - int i; - unsigned n; - isl_int **row; - unsigned total; - - if (!bset || !constraint) - goto error; - - if (!isl_dim_equal(bset->dim, constraint->bmap->dim)) - isl_die(bset->ctx, isl_error_invalid, - "spaces don't match", goto error); - - if (bset != constraint->bmap && !equal_divs(bset, constraint->bmap)) { - isl_constraint_free(constraint); - return bset; - } - - if (isl_constraint_is_equality(constraint)) { - n = bset->n_eq; - row = bset->eq; - } else { - n = bset->n_ineq; - row = bset->ineq; - } - - total = isl_basic_map_total_dim(constraint->bmap); - for (i = 0; i < n; ++i) - if (isl_seq_eq(row[i], constraint->line[0], 1 + total)) - isl_seq_clr(row[i], 1 + total); - - isl_constraint_free(constraint); - return bset; -error: - isl_constraint_free(constraint); - isl_basic_set_free(bset); - return NULL; -} - -struct isl_constraint *isl_constraint_negate(struct isl_constraint *constraint) -{ - unsigned total; - - if (!constraint) - return NULL; - - isl_assert(constraint->ctx, !isl_constraint_is_equality(constraint), - goto error); - isl_assert(constraint->ctx, constraint->bmap->ref == 1, goto error); - total = isl_basic_map_total_dim(constraint->bmap); - isl_seq_neg(constraint->line[0], constraint->line[0], 1 + total); - isl_int_sub_ui(constraint->line[0][0], constraint->line[0][0], 1); - ISL_F_CLR(constraint->bmap, ISL_BASIC_MAP_NORMALIZED); - return constraint; -error: - isl_constraint_free(constraint); - return NULL; -} - -int isl_constraint_is_equality(struct isl_constraint *constraint) -{ - if (!constraint) - return -1; - return constraint->line >= constraint->bmap->eq; -} - -int isl_constraint_is_div_constraint(__isl_keep isl_constraint *constraint) -{ - int i; - - if (!constraint) - return -1; - if (isl_constraint_is_equality(constraint)) - return 0; - for (i = 0; i < constraint->bmap->n_div; ++i) { - if (isl_int_is_zero(constraint->bmap->div[i][0])) - continue; - if (isl_basic_map_is_div_constraint(constraint->bmap, - constraint->line[0], i)) - return 1; - } - - return 0; -} - -/* We manually set ISL_BASIC_SET_FINAL instead of calling - * isl_basic_map_finalize because we want to keep the position - * of the divs and we therefore do not want to throw away redundant divs. - * This is arguably a bit fragile. - */ -__isl_give isl_basic_map *isl_basic_map_from_constraint( - __isl_take isl_constraint *constraint) -{ - int k; - struct isl_basic_map *bmap; - isl_int *c; - unsigned total; - - if (!constraint) - return NULL; - - if (constraint->bmap->n_eq == 1 && constraint->bmap->n_ineq == 0) { - bmap = isl_basic_map_copy(constraint->bmap); - isl_constraint_free(constraint); - return bmap; - } - - bmap = isl_basic_map_universe_like(constraint->bmap); - bmap = isl_basic_map_align_divs(bmap, constraint->bmap); - bmap = isl_basic_map_cow(bmap); - bmap = isl_basic_map_extend_constraints(bmap, 1, 1); - if (isl_constraint_is_equality(constraint)) { - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - c = bmap->eq[k]; - } - else { - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - c = bmap->ineq[k]; - } - total = isl_basic_map_total_dim(bmap); - isl_seq_cpy(c, constraint->line[0], 1 + total); - isl_constraint_free(constraint); - if (bmap) - ISL_F_SET(bmap, ISL_BASIC_SET_FINAL); - return bmap; -error: - isl_constraint_free(constraint); - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_from_constraint( - struct isl_constraint *constraint) -{ - if (!constraint) - return NULL; - - isl_assert(constraint->ctx,n(constraint, isl_dim_in) == 0, goto error); - return (isl_basic_set *)isl_basic_map_from_constraint(constraint); -error: - isl_constraint_free(constraint); - return NULL; -} - -int isl_basic_map_has_defining_equality( - __isl_keep isl_basic_map *bmap, enum isl_dim_type type, int pos, - __isl_give isl_constraint **c) -{ - int i; - unsigned offset; - unsigned total; - - if (!bmap) - return -1; - offset = basic_map_offset(bmap, type); - total = isl_basic_map_total_dim(bmap); - isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), return -1); - for (i = 0; i < bmap->n_eq; ++i) - if (!isl_int_is_zero(bmap->eq[i][offset + pos]) && - isl_seq_first_non_zero(bmap->eq[i]+offset+pos+1, - 1+total-offset-pos-1) == -1) { - *c = isl_basic_map_constraint(isl_basic_map_copy(bmap), - &bmap->eq[i]); - return 1; - } - return 0; -} - -int isl_basic_set_has_defining_equality( - __isl_keep isl_basic_set *bset, enum isl_dim_type type, int pos, - __isl_give isl_constraint **c) -{ - return isl_basic_map_has_defining_equality((isl_basic_map *)bset, - type, pos, c); -} - -int isl_basic_set_has_defining_inequalities( - struct isl_basic_set *bset, enum isl_dim_type type, int pos, - struct isl_constraint **lower, - struct isl_constraint **upper) -{ - int i, j; - unsigned offset; - unsigned total; - isl_int m; - isl_int **lower_line, **upper_line; - - if (!bset) - return -1; - offset = basic_set_offset(bset, type); - total = isl_basic_set_total_dim(bset); - isl_assert(bset->ctx, pos < isl_basic_set_dim(bset, type), return -1); - isl_int_init(m); - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_int_is_zero(bset->ineq[i][offset + pos])) - continue; - if (isl_int_is_one(bset->ineq[i][offset + pos])) - continue; - if (isl_int_is_negone(bset->ineq[i][offset + pos])) - continue; - if (isl_seq_first_non_zero(bset->ineq[i]+offset+pos+1, - 1+total-offset-pos-1) != -1) - continue; - for (j = i + 1; j < bset->n_ineq; ++j) { - if (!isl_seq_is_neg(bset->ineq[i]+1, bset->ineq[j]+1, - total)) - continue; - isl_int_add(m, bset->ineq[i][0], bset->ineq[j][0]); - if (isl_int_abs_ge(m, bset->ineq[i][offset+pos])) - continue; - - if (isl_int_is_pos(bset->ineq[i][offset+pos])) { - lower_line = &bset->ineq[i]; - upper_line = &bset->ineq[j]; - } else { - lower_line = &bset->ineq[j]; - upper_line = &bset->ineq[i]; - } - *lower = isl_basic_set_constraint( - isl_basic_set_copy(bset), lower_line); - *upper = isl_basic_set_constraint( - isl_basic_set_copy(bset), upper_line); - isl_int_clear(m); - return 1; - } - } - *lower = NULL; - *upper = NULL; - isl_int_clear(m); - return 0; -} - -/* Given two constraints "a" and "b" on the variable at position "abs_pos" - * (in "a" and "b"), add a constraint to "bset" that ensures that the - * bound implied by "a" is (strictly) larger than the bound implied by "b". - * - * If both constraints imply lower bounds, then this means that "a" is - * active in the result. - * If both constraints imply upper bounds, then this means that "b" is - * active in the result. - */ -static __isl_give isl_basic_set *add_larger_bound_constraint( - __isl_take isl_basic_set *bset, isl_int *a, isl_int *b, - unsigned abs_pos, int strict) -{ - int k; - isl_int t; - unsigned total; - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - - total = isl_basic_set_dim(bset, isl_dim_all); - - isl_int_init(t); - isl_int_neg(t, b[1 + abs_pos]); - - isl_seq_combine(bset->ineq[k], t, a, a[1 + abs_pos], b, 1 + abs_pos); - isl_seq_combine(bset->ineq[k] + 1 + abs_pos, - t, a + 1 + abs_pos + 1, a[1 + abs_pos], b + 1 + abs_pos + 1, - total - abs_pos); - - if (strict) - isl_int_sub_ui(bset->ineq[k][0], bset->ineq[k][0], 1); - - isl_int_clear(t); - - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Add constraints to "context" that ensure that "u" is the smallest - * (and therefore active) upper bound on "abs_pos" in "bset" and return - * the resulting basic set. - */ -static __isl_give isl_basic_set *set_smallest_upper_bound( - __isl_keep isl_basic_set *context, - __isl_keep isl_basic_set *bset, unsigned abs_pos, int n_upper, int u) -{ - int j; - - context = isl_basic_set_copy(context); - context = isl_basic_set_cow(context); - - context = isl_basic_set_extend_constraints(context, 0, n_upper - 1); - - for (j = 0; j < bset->n_ineq; ++j) { - if (j == u) - continue; - if (!isl_int_is_neg(bset->ineq[j][1 + abs_pos])) - continue; - context = add_larger_bound_constraint(context, - bset->ineq[j], bset->ineq[u], abs_pos, j > u); - } - - context = isl_basic_set_simplify(context); - context = isl_basic_set_finalize(context); - - return context; -} - -/* Add constraints to "context" that ensure that "u" is the largest - * (and therefore active) upper bound on "abs_pos" in "bset" and return - * the resulting basic set. - */ -static __isl_give isl_basic_set *set_largest_lower_bound( - __isl_keep isl_basic_set *context, - __isl_keep isl_basic_set *bset, unsigned abs_pos, int n_lower, int l) -{ - int j; - - context = isl_basic_set_copy(context); - context = isl_basic_set_cow(context); - - context = isl_basic_set_extend_constraints(context, 0, n_lower - 1); - - for (j = 0; j < bset->n_ineq; ++j) { - if (j == l) - continue; - if (!isl_int_is_pos(bset->ineq[j][1 + abs_pos])) - continue; - context = add_larger_bound_constraint(context, - bset->ineq[l], bset->ineq[j], abs_pos, j > l); - } - - context = isl_basic_set_simplify(context); - context = isl_basic_set_finalize(context); - - return context; -} - -static int foreach_upper_bound(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned abs_pos, - __isl_take isl_basic_set *context, int n_upper, - int (*fn)(__isl_take isl_constraint *lower, - __isl_take isl_constraint *upper, - __isl_take isl_basic_set *bset, void *user), void *user) -{ - isl_basic_set *context_i; - isl_constraint *upper = NULL; - int i; - - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_int_is_zero(bset->ineq[i][1 + abs_pos])) - continue; - - context_i = set_smallest_upper_bound(context, bset, - abs_pos, n_upper, i); - if (isl_basic_set_is_empty(context_i)) { - isl_basic_set_free(context_i); - continue; - } - upper = isl_basic_set_constraint(isl_basic_set_copy(bset), - &bset->ineq[i]); - if (!upper || !context_i) - goto error; - if (fn(NULL, upper, context_i, user) < 0) - break; - } - - isl_basic_set_free(context); - - if (i < bset->n_ineq) - return -1; - - return 0; -error: - isl_constraint_free(upper); - isl_basic_set_free(context_i); - isl_basic_set_free(context); - return -1; -} - -static int foreach_lower_bound(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned abs_pos, - __isl_take isl_basic_set *context, int n_lower, - int (*fn)(__isl_take isl_constraint *lower, - __isl_take isl_constraint *upper, - __isl_take isl_basic_set *bset, void *user), void *user) -{ - isl_basic_set *context_i; - isl_constraint *lower = NULL; - int i; - - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_int_is_zero(bset->ineq[i][1 + abs_pos])) - continue; - - context_i = set_largest_lower_bound(context, bset, - abs_pos, n_lower, i); - if (isl_basic_set_is_empty(context_i)) { - isl_basic_set_free(context_i); - continue; - } - lower = isl_basic_set_constraint(isl_basic_set_copy(bset), - &bset->ineq[i]); - if (!lower || !context_i) - goto error; - if (fn(lower, NULL, context_i, user) < 0) - break; - } - - isl_basic_set_free(context); - - if (i < bset->n_ineq) - return -1; - - return 0; -error: - isl_constraint_free(lower); - isl_basic_set_free(context_i); - isl_basic_set_free(context); - return -1; -} - -static int foreach_bound_pair(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned abs_pos, - __isl_take isl_basic_set *context, int n_lower, int n_upper, - int (*fn)(__isl_take isl_constraint *lower, - __isl_take isl_constraint *upper, - __isl_take isl_basic_set *bset, void *user), void *user) -{ - isl_basic_set *context_i, *context_j; - isl_constraint *lower = NULL; - isl_constraint *upper = NULL; - int i, j; - - for (i = 0; i < bset->n_ineq; ++i) { - if (!isl_int_is_pos(bset->ineq[i][1 + abs_pos])) - continue; - - context_i = set_largest_lower_bound(context, bset, - abs_pos, n_lower, i); - if (isl_basic_set_is_empty(context_i)) { - isl_basic_set_free(context_i); - continue; - } - - for (j = 0; j < bset->n_ineq; ++j) { - if (!isl_int_is_neg(bset->ineq[j][1 + abs_pos])) - continue; - - context_j = set_smallest_upper_bound(context_i, bset, - abs_pos, n_upper, j); - context_j = isl_basic_set_extend_constraints(context_j, - 0, 1); - context_j = add_larger_bound_constraint(context_j, - bset->ineq[i], bset->ineq[j], abs_pos, 0); - context_j = isl_basic_set_simplify(context_j); - context_j = isl_basic_set_finalize(context_j); - if (isl_basic_set_is_empty(context_j)) { - isl_basic_set_free(context_j); - continue; - } - lower = isl_basic_set_constraint(isl_basic_set_copy(bset), - &bset->ineq[i]); - upper = isl_basic_set_constraint(isl_basic_set_copy(bset), - &bset->ineq[j]); - if (!lower || !upper || !context_j) - goto error; - if (fn(lower, upper, context_j, user) < 0) - break; - } - - isl_basic_set_free(context_i); - - if (j < bset->n_ineq) - break; - } - - isl_basic_set_free(context); - - if (i < bset->n_ineq) - return -1; - - return 0; -error: - isl_constraint_free(lower); - isl_constraint_free(upper); - isl_basic_set_free(context_i); - isl_basic_set_free(context_j); - isl_basic_set_free(context); - return -1; -} - -/* For each pair of lower and upper bounds on the variable "pos" - * of type "type", call "fn" with these lower and upper bounds and the - * set of constraints on the remaining variables where these bounds - * are active, i.e., (stricly) larger/smaller than the other lower/upper bounds. - * - * If the designated variable is equal to an affine combination of the - * other variables then fn is called with both lower and upper - * set to the corresponding equality. - * - * If there is no lower (or upper) bound, then NULL is passed - * as the corresponding bound. - * - * We first check if the variable is involved in any equality. - * If not, we count the number of lower and upper bounds and - * act accordingly. - */ -int isl_basic_set_foreach_bound_pair(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, - int (*fn)(__isl_take isl_constraint *lower, - __isl_take isl_constraint *upper, - __isl_take isl_basic_set *bset, void *user), void *user) -{ - int i; - isl_constraint *lower = NULL; - isl_constraint *upper = NULL; - isl_basic_set *context = NULL; - unsigned abs_pos; - int n_lower, n_upper; - - if (!bset) - return -1; - isl_assert(bset->ctx, pos < isl_basic_set_dim(bset, type), return -1); - isl_assert(bset->ctx, type == isl_dim_param || type == isl_dim_set, - return -1); - - abs_pos = pos; - if (type == isl_dim_set) - abs_pos += isl_basic_set_dim(bset, isl_dim_param); - - for (i = 0; i < bset->n_eq; ++i) { - if (isl_int_is_zero(bset->eq[i][1 + abs_pos])) - continue; - - lower = isl_basic_set_constraint(isl_basic_set_copy(bset), - &bset->eq[i]); - upper = isl_constraint_copy(lower); - context = isl_basic_set_remove_dims(isl_basic_set_copy(bset), - type, pos, 1); - if (!lower || !upper || !context) - goto error; - return fn(lower, upper, context, user); - } - - n_lower = 0; - n_upper = 0; - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_int_is_pos(bset->ineq[i][1 + abs_pos])) - n_lower++; - else if (isl_int_is_neg(bset->ineq[i][1 + abs_pos])) - n_upper++; - } - - context = isl_basic_set_copy(bset); - context = isl_basic_set_cow(context); - if (!context) - goto error; - for (i = context->n_ineq - 1; i >= 0; --i) - if (!isl_int_is_zero(context->ineq[i][1 + abs_pos])) - isl_basic_set_drop_inequality(context, i); - - context = isl_basic_set_drop(context, type, pos, 1); - if (!n_lower && !n_upper) - return fn(NULL, NULL, context, user); - if (!n_lower) - return foreach_upper_bound(bset, type, abs_pos, context, n_upper, - fn, user); - if (!n_upper) - return foreach_lower_bound(bset, type, abs_pos, context, n_lower, - fn, user); - return foreach_bound_pair(bset, type, abs_pos, context, n_lower, n_upper, - fn, user); -error: - isl_constraint_free(lower); - isl_constraint_free(upper); - isl_basic_set_free(context); - return -1; -} - -__isl_give isl_aff *isl_constraint_get_bound( - __isl_keep isl_constraint *constraint, enum isl_dim_type type, int pos) -{ - isl_aff *aff; - isl_local_space *ls; - - if (!constraint) - return NULL; - if (pos >= isl_basic_set_dim(constraint->bmap, type)) - isl_die(constraint->ctx, isl_error_invalid, - "index out of bounds", return NULL); - if (!isl_basic_map_may_be_set(constraint->bmap)) - isl_die(constraint->ctx, isl_error_invalid, - "not a set constraint", return NULL); - - pos += offset(constraint, type); - if (isl_int_is_zero(constraint->line[0][pos])) - isl_die(constraint->ctx, isl_error_invalid, - "constraint does not define a bound on given dimension", - return NULL); - - ls = isl_basic_set_get_local_space(constraint->bmap); - aff = isl_aff_alloc(ls); - if (!aff) - return NULL; - - if (isl_int_is_neg(constraint->line[0][pos])) - isl_seq_cpy(aff->v->el + 1, constraint->line[0], - aff->v->size - 1); - else - isl_seq_neg(aff->v->el + 1, constraint->line[0], - aff->v->size - 1); - isl_int_set_si(aff->v->el[1 + pos], 0); - isl_int_abs(aff->v->el[0], constraint->line[0][pos]); - - return aff; -} - -/* For an inequality constraint - * - * f >= 0 - * - * or an equality constraint - * - * f = 0 - * - * return the affine expression f. - */ -__isl_give isl_aff *isl_constraint_get_aff( - __isl_keep isl_constraint *constraint) -{ - isl_aff *aff; - isl_local_space *ls; - - if (!constraint) - return NULL; - - ls = isl_basic_set_get_local_space(constraint->bmap); - aff = isl_aff_alloc(ls); - if (!aff) - return NULL; - - isl_seq_cpy(aff->v->el + 1, constraint->line[0], aff->v->size - 1); - isl_int_set_si(aff->v->el[0], 1); - - return aff; -} - -/* Construct an equality constraint equating the given affine expression - * to zero. - */ -__isl_give isl_constraint *isl_equality_from_aff(__isl_take isl_aff *aff) -{ - int k; - isl_basic_set *bset; - - if (!aff) - return NULL; - - bset = isl_basic_set_from_local_space(isl_aff_get_local_space(aff)); - bset = isl_basic_set_extend_constraints(bset, 1, 0); - k = isl_basic_set_alloc_equality(bset); - if (k < 0) - goto error; - - isl_seq_cpy(bset->eq[k], aff->v->el + 1, aff->v->size - 1); - isl_aff_free(aff); - - return isl_basic_set_constraint(bset, &bset->eq[k]); -error: - isl_aff_free(aff); - isl_basic_set_free(bset); - return NULL; -} - -/* Construct an inequality constraint enforcing the given affine expression - * to be non-negative. - */ -__isl_give isl_constraint *isl_inequality_from_aff(__isl_take isl_aff *aff) -{ - int k; - isl_basic_set *bset; - - if (!aff) - return NULL; - - bset = isl_basic_set_from_local_space(isl_aff_get_local_space(aff)); - bset = isl_basic_set_extend_constraints(bset, 0, 1); - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - - isl_seq_cpy(bset->ineq[k], aff->v->el + 1, aff->v->size - 1); - isl_aff_free(aff); - - return isl_basic_set_constraint(bset, &bset->ineq[k]); -error: - isl_aff_free(aff); - isl_basic_set_free(bset); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_constraint_private.h b/cloog-0.16.3/isl/isl_constraint_private.h deleted file mode 100644 index 8fab9d4..0000000 --- a/cloog-0.16.3/isl/isl_constraint_private.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef ISL_CONSTRAINT_PRIVATE_H -#define ISL_CONSTRAINT_PRIVATE_H - -#include - -struct isl_constraint { - int ref; - struct isl_ctx *ctx; - - struct isl_basic_map *bmap; - isl_int **line; -}; - -struct isl_constraint *isl_basic_set_constraint(struct isl_basic_set *bset, - isl_int **line); - -#endif diff --git a/cloog-0.16.3/isl/isl_convex_hull.c b/cloog-0.16.3/isl/isl_convex_hull.c deleted file mode 100644 index 266d9a7..0000000 --- a/cloog-0.16.3/isl/isl_convex_hull.c +++ /dev/null @@ -1,2426 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include -#include -#include -#include "isl_equalities.h" -#include "isl_tab.h" - -static struct isl_basic_set *uset_convex_hull_wrap_bounded(struct isl_set *set); - -/* Return 1 if constraint c is redundant with respect to the constraints - * in bmap. If c is a lower [upper] bound in some variable and bmap - * does not have a lower [upper] bound in that variable, then c cannot - * be redundant and we do not need solve any lp. - */ -int isl_basic_map_constraint_is_redundant(struct isl_basic_map **bmap, - isl_int *c, isl_int *opt_n, isl_int *opt_d) -{ - enum isl_lp_result res; - unsigned total; - int i, j; - - if (!bmap) - return -1; - - total = isl_basic_map_total_dim(*bmap); - for (i = 0; i < total; ++i) { - int sign; - if (isl_int_is_zero(c[1+i])) - continue; - sign = isl_int_sgn(c[1+i]); - for (j = 0; j < (*bmap)->n_ineq; ++j) - if (sign == isl_int_sgn((*bmap)->ineq[j][1+i])) - break; - if (j == (*bmap)->n_ineq) - break; - } - if (i < total) - return 0; - - res = isl_basic_map_solve_lp(*bmap, 0, c, (*bmap)->ctx->one, - opt_n, opt_d, NULL); - if (res == isl_lp_unbounded) - return 0; - if (res == isl_lp_error) - return -1; - if (res == isl_lp_empty) { - *bmap = isl_basic_map_set_to_empty(*bmap); - return 0; - } - return !isl_int_is_neg(*opt_n); -} - -int isl_basic_set_constraint_is_redundant(struct isl_basic_set **bset, - isl_int *c, isl_int *opt_n, isl_int *opt_d) -{ - return isl_basic_map_constraint_is_redundant( - (struct isl_basic_map **)bset, c, opt_n, opt_d); -} - -/* Remove redundant - * constraints. If the minimal value along the normal of a constraint - * is the same if the constraint is removed, then the constraint is redundant. - * - * Alternatively, we could have intersected the basic map with the - * corresponding equality and the checked if the dimension was that - * of a facet. - */ -__isl_give isl_basic_map *isl_basic_map_remove_redundancies( - __isl_take isl_basic_map *bmap) -{ - struct isl_tab *tab; - - if (!bmap) - return NULL; - - bmap = isl_basic_map_gauss(bmap, NULL); - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) - return bmap; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_NO_REDUNDANT)) - return bmap; - if (bmap->n_ineq <= 1) - return bmap; - - tab = isl_tab_from_basic_map(bmap); - if (isl_tab_detect_implicit_equalities(tab) < 0) - goto error; - if (isl_tab_detect_redundant(tab) < 0) - goto error; - bmap = isl_basic_map_update_from_tab(bmap, tab); - isl_tab_free(tab); - ISL_F_SET(bmap, ISL_BASIC_MAP_NO_IMPLICIT); - ISL_F_SET(bmap, ISL_BASIC_MAP_NO_REDUNDANT); - return bmap; -error: - isl_tab_free(tab); - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_remove_redundancies( - __isl_take isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_remove_redundancies((struct isl_basic_map *)bset); -} - -/* Remove redundant constraints in each of the basic maps. - */ -__isl_give isl_map *isl_map_remove_redundancies(__isl_take isl_map *map) -{ - return isl_map_inline_foreach_basic_map(map, - &isl_basic_map_remove_redundancies); -} - -__isl_give isl_set *isl_set_remove_redundancies(__isl_take isl_set *set) -{ - return isl_map_remove_redundancies(set); -} - -/* Check if the set set is bound in the direction of the affine - * constraint c and if so, set the constant term such that the - * resulting constraint is a bounding constraint for the set. - */ -static int uset_is_bound(struct isl_set *set, isl_int *c, unsigned len) -{ - int first; - int j; - isl_int opt; - isl_int opt_denom; - - isl_int_init(opt); - isl_int_init(opt_denom); - first = 1; - for (j = 0; j < set->n; ++j) { - enum isl_lp_result res; - - if (ISL_F_ISSET(set->p[j], ISL_BASIC_SET_EMPTY)) - continue; - - res = isl_basic_set_solve_lp(set->p[j], - 0, c, set->ctx->one, &opt, &opt_denom, NULL); - if (res == isl_lp_unbounded) - break; - if (res == isl_lp_error) - goto error; - if (res == isl_lp_empty) { - set->p[j] = isl_basic_set_set_to_empty(set->p[j]); - if (!set->p[j]) - goto error; - continue; - } - if (first || isl_int_is_neg(opt)) { - if (!isl_int_is_one(opt_denom)) - isl_seq_scale(c, c, opt_denom, len); - isl_int_sub(c[0], c[0], opt); - } - first = 0; - } - isl_int_clear(opt); - isl_int_clear(opt_denom); - return j >= set->n; -error: - isl_int_clear(opt); - isl_int_clear(opt_denom); - return -1; -} - -__isl_give isl_basic_map *isl_basic_map_set_rational( - __isl_take isl_basic_set *bmap) -{ - if (!bmap) - return NULL; - - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL)) - return bmap; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - ISL_F_SET(bmap, ISL_BASIC_MAP_RATIONAL); - - return isl_basic_map_finalize(bmap); -} - -__isl_give isl_basic_set *isl_basic_set_set_rational( - __isl_take isl_basic_set *bset) -{ - return isl_basic_map_set_rational(bset); -} - -static struct isl_set *isl_set_set_rational(struct isl_set *set) -{ - int i; - - set = isl_set_cow(set); - if (!set) - return NULL; - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_set_rational(set->p[i]); - if (!set->p[i]) - goto error; - } - return set; -error: - isl_set_free(set); - return NULL; -} - -static struct isl_basic_set *isl_basic_set_add_equality( - struct isl_basic_set *bset, isl_int *c) -{ - int i; - unsigned dim; - - if (!bset) - return NULL; - - if (ISL_F_ISSET(bset, ISL_BASIC_SET_EMPTY)) - return bset; - - isl_assert(bset->ctx, isl_basic_set_n_param(bset) == 0, goto error); - isl_assert(bset->ctx, bset->n_div == 0, goto error); - dim = isl_basic_set_n_dim(bset); - bset = isl_basic_set_cow(bset); - bset = isl_basic_set_extend(bset, 0, dim, 0, 1, 0); - i = isl_basic_set_alloc_equality(bset); - if (i < 0) - goto error; - isl_seq_cpy(bset->eq[i], c, 1 + dim); - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -static struct isl_set *isl_set_add_basic_set_equality(struct isl_set *set, isl_int *c) -{ - int i; - - set = isl_set_cow(set); - if (!set) - return NULL; - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_add_equality(set->p[i], c); - if (!set->p[i]) - goto error; - } - return set; -error: - isl_set_free(set); - return NULL; -} - -/* Given a union of basic sets, construct the constraints for wrapping - * a facet around one of its ridges. - * In particular, if each of n the d-dimensional basic sets i in "set" - * contains the origin, satisfies the constraints x_1 >= 0 and x_2 >= 0 - * and is defined by the constraints - * [ 1 ] - * A_i [ x ] >= 0 - * - * then the resulting set is of dimension n*(1+d) and has as constraints - * - * [ a_i ] - * A_i [ x_i ] >= 0 - * - * a_i >= 0 - * - * \sum_i x_{i,1} = 1 - */ -static struct isl_basic_set *wrap_constraints(struct isl_set *set) -{ - struct isl_basic_set *lp; - unsigned n_eq; - unsigned n_ineq; - int i, j, k; - unsigned dim, lp_dim; - - if (!set) - return NULL; - - dim = 1 + isl_set_n_dim(set); - n_eq = 1; - n_ineq = set->n; - for (i = 0; i < set->n; ++i) { - n_eq += set->p[i]->n_eq; - n_ineq += set->p[i]->n_ineq; - } - lp = isl_basic_set_alloc(set->ctx, 0, dim * set->n, 0, n_eq, n_ineq); - lp = isl_basic_set_set_rational(lp); - if (!lp) - return NULL; - lp_dim = isl_basic_set_n_dim(lp); - k = isl_basic_set_alloc_equality(lp); - isl_int_set_si(lp->eq[k][0], -1); - for (i = 0; i < set->n; ++i) { - isl_int_set_si(lp->eq[k][1+dim*i], 0); - isl_int_set_si(lp->eq[k][1+dim*i+1], 1); - isl_seq_clr(lp->eq[k]+1+dim*i+2, dim-2); - } - for (i = 0; i < set->n; ++i) { - k = isl_basic_set_alloc_inequality(lp); - isl_seq_clr(lp->ineq[k], 1+lp_dim); - isl_int_set_si(lp->ineq[k][1+dim*i], 1); - - for (j = 0; j < set->p[i]->n_eq; ++j) { - k = isl_basic_set_alloc_equality(lp); - isl_seq_clr(lp->eq[k], 1+dim*i); - isl_seq_cpy(lp->eq[k]+1+dim*i, set->p[i]->eq[j], dim); - isl_seq_clr(lp->eq[k]+1+dim*(i+1), dim*(set->n-i-1)); - } - - for (j = 0; j < set->p[i]->n_ineq; ++j) { - k = isl_basic_set_alloc_inequality(lp); - isl_seq_clr(lp->ineq[k], 1+dim*i); - isl_seq_cpy(lp->ineq[k]+1+dim*i, set->p[i]->ineq[j], dim); - isl_seq_clr(lp->ineq[k]+1+dim*(i+1), dim*(set->n-i-1)); - } - } - return lp; -} - -/* Given a facet "facet" of the convex hull of "set" and a facet "ridge" - * of that facet, compute the other facet of the convex hull that contains - * the ridge. - * - * We first transform the set such that the facet constraint becomes - * - * x_1 >= 0 - * - * I.e., the facet lies in - * - * x_1 = 0 - * - * and on that facet, the constraint that defines the ridge is - * - * x_2 >= 0 - * - * (This transformation is not strictly needed, all that is needed is - * that the ridge contains the origin.) - * - * Since the ridge contains the origin, the cone of the convex hull - * will be of the form - * - * x_1 >= 0 - * x_2 >= a x_1 - * - * with this second constraint defining the new facet. - * The constant a is obtained by settting x_1 in the cone of the - * convex hull to 1 and minimizing x_2. - * Now, each element in the cone of the convex hull is the sum - * of elements in the cones of the basic sets. - * If a_i is the dilation factor of basic set i, then the problem - * we need to solve is - * - * min \sum_i x_{i,2} - * st - * \sum_i x_{i,1} = 1 - * a_i >= 0 - * [ a_i ] - * A [ x_i ] >= 0 - * - * with - * [ 1 ] - * A_i [ x_i ] >= 0 - * - * the constraints of each (transformed) basic set. - * If a = n/d, then the constraint defining the new facet (in the transformed - * space) is - * - * -n x_1 + d x_2 >= 0 - * - * In the original space, we need to take the same combination of the - * corresponding constraints "facet" and "ridge". - * - * If a = -infty = "-1/0", then we just return the original facet constraint. - * This means that the facet is unbounded, but has a bounded intersection - * with the union of sets. - */ -isl_int *isl_set_wrap_facet(__isl_keep isl_set *set, - isl_int *facet, isl_int *ridge) -{ - int i; - isl_ctx *ctx; - struct isl_mat *T = NULL; - struct isl_basic_set *lp = NULL; - struct isl_vec *obj; - enum isl_lp_result res; - isl_int num, den; - unsigned dim; - - if (!set) - return NULL; - ctx = set->ctx; - set = isl_set_copy(set); - set = isl_set_set_rational(set); - - dim = 1 + isl_set_n_dim(set); - T = isl_mat_alloc(ctx, 3, dim); - if (!T) - goto error; - isl_int_set_si(T->row[0][0], 1); - isl_seq_clr(T->row[0]+1, dim - 1); - isl_seq_cpy(T->row[1], facet, dim); - isl_seq_cpy(T->row[2], ridge, dim); - T = isl_mat_right_inverse(T); - set = isl_set_preimage(set, T); - T = NULL; - if (!set) - goto error; - lp = wrap_constraints(set); - obj = isl_vec_alloc(ctx, 1 + dim*set->n); - if (!obj) - goto error; - isl_int_set_si(obj->block.data[0], 0); - for (i = 0; i < set->n; ++i) { - isl_seq_clr(obj->block.data + 1 + dim*i, 2); - isl_int_set_si(obj->block.data[1 + dim*i+2], 1); - isl_seq_clr(obj->block.data + 1 + dim*i+3, dim-3); - } - isl_int_init(num); - isl_int_init(den); - res = isl_basic_set_solve_lp(lp, 0, - obj->block.data, ctx->one, &num, &den, NULL); - if (res == isl_lp_ok) { - isl_int_neg(num, num); - isl_seq_combine(facet, num, facet, den, ridge, dim); - isl_seq_normalize(ctx, facet, dim); - } - isl_int_clear(num); - isl_int_clear(den); - isl_vec_free(obj); - isl_basic_set_free(lp); - isl_set_free(set); - if (res == isl_lp_error) - return NULL; - isl_assert(ctx, res == isl_lp_ok || res == isl_lp_unbounded, - return NULL); - return facet; -error: - isl_basic_set_free(lp); - isl_mat_free(T); - isl_set_free(set); - return NULL; -} - -/* Compute the constraint of a facet of "set". - * - * We first compute the intersection with a bounding constraint - * that is orthogonal to one of the coordinate axes. - * If the affine hull of this intersection has only one equality, - * we have found a facet. - * Otherwise, we wrap the current bounding constraint around - * one of the equalities of the face (one that is not equal to - * the current bounding constraint). - * This process continues until we have found a facet. - * The dimension of the intersection increases by at least - * one on each iteration, so termination is guaranteed. - */ -static __isl_give isl_mat *initial_facet_constraint(__isl_keep isl_set *set) -{ - struct isl_set *slice = NULL; - struct isl_basic_set *face = NULL; - int i; - unsigned dim = isl_set_n_dim(set); - int is_bound; - isl_mat *bounds; - - isl_assert(set->ctx, set->n > 0, goto error); - bounds = isl_mat_alloc(set->ctx, 1, 1 + dim); - if (!bounds) - return NULL; - - isl_seq_clr(bounds->row[0], dim); - isl_int_set_si(bounds->row[0][1 + dim - 1], 1); - is_bound = uset_is_bound(set, bounds->row[0], 1 + dim); - if (is_bound < 0) - goto error; - isl_assert(set->ctx, is_bound, goto error); - isl_seq_normalize(set->ctx, bounds->row[0], 1 + dim); - bounds->n_row = 1; - - for (;;) { - slice = isl_set_copy(set); - slice = isl_set_add_basic_set_equality(slice, bounds->row[0]); - face = isl_set_affine_hull(slice); - if (!face) - goto error; - if (face->n_eq == 1) { - isl_basic_set_free(face); - break; - } - for (i = 0; i < face->n_eq; ++i) - if (!isl_seq_eq(bounds->row[0], face->eq[i], 1 + dim) && - !isl_seq_is_neg(bounds->row[0], - face->eq[i], 1 + dim)) - break; - isl_assert(set->ctx, i < face->n_eq, goto error); - if (!isl_set_wrap_facet(set, bounds->row[0], face->eq[i])) - goto error; - isl_seq_normalize(set->ctx, bounds->row[0], bounds->n_col); - isl_basic_set_free(face); - } - - return bounds; -error: - isl_basic_set_free(face); - isl_mat_free(bounds); - return NULL; -} - -/* Given the bounding constraint "c" of a facet of the convex hull of "set", - * compute a hyperplane description of the facet, i.e., compute the facets - * of the facet. - * - * We compute an affine transformation that transforms the constraint - * - * [ 1 ] - * c [ x ] = 0 - * - * to the constraint - * - * z_1 = 0 - * - * by computing the right inverse U of a matrix that starts with the rows - * - * [ 1 0 ] - * [ c ] - * - * Then - * [ 1 ] [ 1 ] - * [ x ] = U [ z ] - * and - * [ 1 ] [ 1 ] - * [ z ] = Q [ x ] - * - * with Q = U^{-1} - * Since z_1 is zero, we can drop this variable as well as the corresponding - * column of U to obtain - * - * [ 1 ] [ 1 ] - * [ x ] = U' [ z' ] - * and - * [ 1 ] [ 1 ] - * [ z' ] = Q' [ x ] - * - * with Q' equal to Q, but without the corresponding row. - * After computing the facets of the facet in the z' space, - * we convert them back to the x space through Q. - */ -static struct isl_basic_set *compute_facet(struct isl_set *set, isl_int *c) -{ - struct isl_mat *m, *U, *Q; - struct isl_basic_set *facet = NULL; - struct isl_ctx *ctx; - unsigned dim; - - ctx = set->ctx; - set = isl_set_copy(set); - dim = isl_set_n_dim(set); - m = isl_mat_alloc(set->ctx, 2, 1 + dim); - if (!m) - goto error; - isl_int_set_si(m->row[0][0], 1); - isl_seq_clr(m->row[0]+1, dim); - isl_seq_cpy(m->row[1], c, 1+dim); - U = isl_mat_right_inverse(m); - Q = isl_mat_right_inverse(isl_mat_copy(U)); - U = isl_mat_drop_cols(U, 1, 1); - Q = isl_mat_drop_rows(Q, 1, 1); - set = isl_set_preimage(set, U); - facet = uset_convex_hull_wrap_bounded(set); - facet = isl_basic_set_preimage(facet, Q); - if (facet) - isl_assert(ctx, facet->n_eq == 0, goto error); - return facet; -error: - isl_basic_set_free(facet); - isl_set_free(set); - return NULL; -} - -/* Given an initial facet constraint, compute the remaining facets. - * We do this by running through all facets found so far and computing - * the adjacent facets through wrapping, adding those facets that we - * hadn't already found before. - * - * For each facet we have found so far, we first compute its facets - * in the resulting convex hull. That is, we compute the ridges - * of the resulting convex hull contained in the facet. - * We also compute the corresponding facet in the current approximation - * of the convex hull. There is no need to wrap around the ridges - * in this facet since that would result in a facet that is already - * present in the current approximation. - * - * This function can still be significantly optimized by checking which of - * the facets of the basic sets are also facets of the convex hull and - * using all the facets so far to help in constructing the facets of the - * facets - * and/or - * using the technique in section "3.1 Ridge Generation" of - * "Extended Convex Hull" by Fukuda et al. - */ -static struct isl_basic_set *extend(struct isl_basic_set *hull, - struct isl_set *set) -{ - int i, j, f; - int k; - struct isl_basic_set *facet = NULL; - struct isl_basic_set *hull_facet = NULL; - unsigned dim; - - if (!hull) - return NULL; - - isl_assert(set->ctx, set->n > 0, goto error); - - dim = isl_set_n_dim(set); - - for (i = 0; i < hull->n_ineq; ++i) { - facet = compute_facet(set, hull->ineq[i]); - facet = isl_basic_set_add_equality(facet, hull->ineq[i]); - facet = isl_basic_set_gauss(facet, NULL); - facet = isl_basic_set_normalize_constraints(facet); - hull_facet = isl_basic_set_copy(hull); - hull_facet = isl_basic_set_add_equality(hull_facet, hull->ineq[i]); - hull_facet = isl_basic_set_gauss(hull_facet, NULL); - hull_facet = isl_basic_set_normalize_constraints(hull_facet); - if (!facet || !hull_facet) - goto error; - hull = isl_basic_set_cow(hull); - hull = isl_basic_set_extend_dim(hull, - isl_dim_copy(hull->dim), 0, 0, facet->n_ineq); - if (!hull) - goto error; - for (j = 0; j < facet->n_ineq; ++j) { - for (f = 0; f < hull_facet->n_ineq; ++f) - if (isl_seq_eq(facet->ineq[j], - hull_facet->ineq[f], 1 + dim)) - break; - if (f < hull_facet->n_ineq) - continue; - k = isl_basic_set_alloc_inequality(hull); - if (k < 0) - goto error; - isl_seq_cpy(hull->ineq[k], hull->ineq[i], 1+dim); - if (!isl_set_wrap_facet(set, hull->ineq[k], facet->ineq[j])) - goto error; - } - isl_basic_set_free(hull_facet); - isl_basic_set_free(facet); - } - hull = isl_basic_set_simplify(hull); - hull = isl_basic_set_finalize(hull); - return hull; -error: - isl_basic_set_free(hull_facet); - isl_basic_set_free(facet); - isl_basic_set_free(hull); - return NULL; -} - -/* Special case for computing the convex hull of a one dimensional set. - * We simply collect the lower and upper bounds of each basic set - * and the biggest of those. - */ -static struct isl_basic_set *convex_hull_1d(struct isl_set *set) -{ - struct isl_mat *c = NULL; - isl_int *lower = NULL; - isl_int *upper = NULL; - int i, j, k; - isl_int a, b; - struct isl_basic_set *hull; - - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_simplify(set->p[i]); - if (!set->p[i]) - goto error; - } - set = isl_set_remove_empty_parts(set); - if (!set) - goto error; - isl_assert(set->ctx, set->n > 0, goto error); - c = isl_mat_alloc(set->ctx, 2, 2); - if (!c) - goto error; - - if (set->p[0]->n_eq > 0) { - isl_assert(set->ctx, set->p[0]->n_eq == 1, goto error); - lower = c->row[0]; - upper = c->row[1]; - if (isl_int_is_pos(set->p[0]->eq[0][1])) { - isl_seq_cpy(lower, set->p[0]->eq[0], 2); - isl_seq_neg(upper, set->p[0]->eq[0], 2); - } else { - isl_seq_neg(lower, set->p[0]->eq[0], 2); - isl_seq_cpy(upper, set->p[0]->eq[0], 2); - } - } else { - for (j = 0; j < set->p[0]->n_ineq; ++j) { - if (isl_int_is_pos(set->p[0]->ineq[j][1])) { - lower = c->row[0]; - isl_seq_cpy(lower, set->p[0]->ineq[j], 2); - } else { - upper = c->row[1]; - isl_seq_cpy(upper, set->p[0]->ineq[j], 2); - } - } - } - - isl_int_init(a); - isl_int_init(b); - for (i = 0; i < set->n; ++i) { - struct isl_basic_set *bset = set->p[i]; - int has_lower = 0; - int has_upper = 0; - - for (j = 0; j < bset->n_eq; ++j) { - has_lower = 1; - has_upper = 1; - if (lower) { - isl_int_mul(a, lower[0], bset->eq[j][1]); - isl_int_mul(b, lower[1], bset->eq[j][0]); - if (isl_int_lt(a, b) && isl_int_is_pos(bset->eq[j][1])) - isl_seq_cpy(lower, bset->eq[j], 2); - if (isl_int_gt(a, b) && isl_int_is_neg(bset->eq[j][1])) - isl_seq_neg(lower, bset->eq[j], 2); - } - if (upper) { - isl_int_mul(a, upper[0], bset->eq[j][1]); - isl_int_mul(b, upper[1], bset->eq[j][0]); - if (isl_int_lt(a, b) && isl_int_is_pos(bset->eq[j][1])) - isl_seq_neg(upper, bset->eq[j], 2); - if (isl_int_gt(a, b) && isl_int_is_neg(bset->eq[j][1])) - isl_seq_cpy(upper, bset->eq[j], 2); - } - } - for (j = 0; j < bset->n_ineq; ++j) { - if (isl_int_is_pos(bset->ineq[j][1])) - has_lower = 1; - if (isl_int_is_neg(bset->ineq[j][1])) - has_upper = 1; - if (lower && isl_int_is_pos(bset->ineq[j][1])) { - isl_int_mul(a, lower[0], bset->ineq[j][1]); - isl_int_mul(b, lower[1], bset->ineq[j][0]); - if (isl_int_lt(a, b)) - isl_seq_cpy(lower, bset->ineq[j], 2); - } - if (upper && isl_int_is_neg(bset->ineq[j][1])) { - isl_int_mul(a, upper[0], bset->ineq[j][1]); - isl_int_mul(b, upper[1], bset->ineq[j][0]); - if (isl_int_gt(a, b)) - isl_seq_cpy(upper, bset->ineq[j], 2); - } - } - if (!has_lower) - lower = NULL; - if (!has_upper) - upper = NULL; - } - isl_int_clear(a); - isl_int_clear(b); - - hull = isl_basic_set_alloc(set->ctx, 0, 1, 0, 0, 2); - hull = isl_basic_set_set_rational(hull); - if (!hull) - goto error; - if (lower) { - k = isl_basic_set_alloc_inequality(hull); - isl_seq_cpy(hull->ineq[k], lower, 2); - } - if (upper) { - k = isl_basic_set_alloc_inequality(hull); - isl_seq_cpy(hull->ineq[k], upper, 2); - } - hull = isl_basic_set_finalize(hull); - isl_set_free(set); - isl_mat_free(c); - return hull; -error: - isl_set_free(set); - isl_mat_free(c); - return NULL; -} - -static struct isl_basic_set *convex_hull_0d(struct isl_set *set) -{ - struct isl_basic_set *convex_hull; - - if (!set) - return NULL; - - if (isl_set_is_empty(set)) - convex_hull = isl_basic_set_empty(isl_dim_copy(set->dim)); - else - convex_hull = isl_basic_set_universe(isl_dim_copy(set->dim)); - isl_set_free(set); - return convex_hull; -} - -/* Compute the convex hull of a pair of basic sets without any parameters or - * integer divisions using Fourier-Motzkin elimination. - * The convex hull is the set of all points that can be written as - * the sum of points from both basic sets (in homogeneous coordinates). - * We set up the constraints in a space with dimensions for each of - * the three sets and then project out the dimensions corresponding - * to the two original basic sets, retaining only those corresponding - * to the convex hull. - */ -static struct isl_basic_set *convex_hull_pair_elim(struct isl_basic_set *bset1, - struct isl_basic_set *bset2) -{ - int i, j, k; - struct isl_basic_set *bset[2]; - struct isl_basic_set *hull = NULL; - unsigned dim; - - if (!bset1 || !bset2) - goto error; - - dim = isl_basic_set_n_dim(bset1); - hull = isl_basic_set_alloc(bset1->ctx, 0, 2 + 3 * dim, 0, - 1 + dim + bset1->n_eq + bset2->n_eq, - 2 + bset1->n_ineq + bset2->n_ineq); - bset[0] = bset1; - bset[1] = bset2; - for (i = 0; i < 2; ++i) { - for (j = 0; j < bset[i]->n_eq; ++j) { - k = isl_basic_set_alloc_equality(hull); - if (k < 0) - goto error; - isl_seq_clr(hull->eq[k], (i+1) * (1+dim)); - isl_seq_clr(hull->eq[k]+(i+2)*(1+dim), (1-i)*(1+dim)); - isl_seq_cpy(hull->eq[k]+(i+1)*(1+dim), bset[i]->eq[j], - 1+dim); - } - for (j = 0; j < bset[i]->n_ineq; ++j) { - k = isl_basic_set_alloc_inequality(hull); - if (k < 0) - goto error; - isl_seq_clr(hull->ineq[k], (i+1) * (1+dim)); - isl_seq_clr(hull->ineq[k]+(i+2)*(1+dim), (1-i)*(1+dim)); - isl_seq_cpy(hull->ineq[k]+(i+1)*(1+dim), - bset[i]->ineq[j], 1+dim); - } - k = isl_basic_set_alloc_inequality(hull); - if (k < 0) - goto error; - isl_seq_clr(hull->ineq[k], 1+2+3*dim); - isl_int_set_si(hull->ineq[k][(i+1)*(1+dim)], 1); - } - for (j = 0; j < 1+dim; ++j) { - k = isl_basic_set_alloc_equality(hull); - if (k < 0) - goto error; - isl_seq_clr(hull->eq[k], 1+2+3*dim); - isl_int_set_si(hull->eq[k][j], -1); - isl_int_set_si(hull->eq[k][1+dim+j], 1); - isl_int_set_si(hull->eq[k][2*(1+dim)+j], 1); - } - hull = isl_basic_set_set_rational(hull); - hull = isl_basic_set_remove_dims(hull, isl_dim_set, dim, 2*(1+dim)); - hull = isl_basic_set_remove_redundancies(hull); - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return hull; -error: - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - isl_basic_set_free(hull); - return NULL; -} - -/* Is the set bounded for each value of the parameters? - */ -int isl_basic_set_is_bounded(__isl_keep isl_basic_set *bset) -{ - struct isl_tab *tab; - int bounded; - - if (!bset) - return -1; - if (isl_basic_set_plain_is_empty(bset)) - return 1; - - tab = isl_tab_from_recession_cone(bset, 1); - bounded = isl_tab_cone_is_bounded(tab); - isl_tab_free(tab); - return bounded; -} - -/* Is the image bounded for each value of the parameters and - * the domain variables? - */ -int isl_basic_map_image_is_bounded(__isl_keep isl_basic_map *bmap) -{ - unsigned nparam = isl_basic_map_dim(bmap, isl_dim_param); - unsigned n_in = isl_basic_map_dim(bmap, isl_dim_in); - int bounded; - - bmap = isl_basic_map_copy(bmap); - bmap = isl_basic_map_cow(bmap); - bmap = isl_basic_map_move_dims(bmap, isl_dim_param, nparam, - isl_dim_in, 0, n_in); - bounded = isl_basic_set_is_bounded((isl_basic_set *)bmap); - isl_basic_map_free(bmap); - - return bounded; -} - -/* Is the set bounded for each value of the parameters? - */ -int isl_set_is_bounded(__isl_keep isl_set *set) -{ - int i; - - if (!set) - return -1; - - for (i = 0; i < set->n; ++i) { - int bounded = isl_basic_set_is_bounded(set->p[i]); - if (!bounded || bounded < 0) - return bounded; - } - return 1; -} - -/* Compute the lineality space of the convex hull of bset1 and bset2. - * - * We first compute the intersection of the recession cone of bset1 - * with the negative of the recession cone of bset2 and then compute - * the linear hull of the resulting cone. - */ -static struct isl_basic_set *induced_lineality_space( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - int i, k; - struct isl_basic_set *lin = NULL; - unsigned dim; - - if (!bset1 || !bset2) - goto error; - - dim = isl_basic_set_total_dim(bset1); - lin = isl_basic_set_alloc_dim(isl_basic_set_get_dim(bset1), 0, - bset1->n_eq + bset2->n_eq, - bset1->n_ineq + bset2->n_ineq); - lin = isl_basic_set_set_rational(lin); - if (!lin) - goto error; - for (i = 0; i < bset1->n_eq; ++i) { - k = isl_basic_set_alloc_equality(lin); - if (k < 0) - goto error; - isl_int_set_si(lin->eq[k][0], 0); - isl_seq_cpy(lin->eq[k] + 1, bset1->eq[i] + 1, dim); - } - for (i = 0; i < bset1->n_ineq; ++i) { - k = isl_basic_set_alloc_inequality(lin); - if (k < 0) - goto error; - isl_int_set_si(lin->ineq[k][0], 0); - isl_seq_cpy(lin->ineq[k] + 1, bset1->ineq[i] + 1, dim); - } - for (i = 0; i < bset2->n_eq; ++i) { - k = isl_basic_set_alloc_equality(lin); - if (k < 0) - goto error; - isl_int_set_si(lin->eq[k][0], 0); - isl_seq_neg(lin->eq[k] + 1, bset2->eq[i] + 1, dim); - } - for (i = 0; i < bset2->n_ineq; ++i) { - k = isl_basic_set_alloc_inequality(lin); - if (k < 0) - goto error; - isl_int_set_si(lin->ineq[k][0], 0); - isl_seq_neg(lin->ineq[k] + 1, bset2->ineq[i] + 1, dim); - } - - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return isl_basic_set_affine_hull(lin); -error: - isl_basic_set_free(lin); - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return NULL; -} - -static struct isl_basic_set *uset_convex_hull(struct isl_set *set); - -/* Given a set and a linear space "lin" of dimension n > 0, - * project the linear space from the set, compute the convex hull - * and then map the set back to the original space. - * - * Let - * - * M x = 0 - * - * describe the linear space. We first compute the Hermite normal - * form H = M U of M = H Q, to obtain - * - * H Q x = 0 - * - * The last n rows of H will be zero, so the last n variables of x' = Q x - * are the one we want to project out. We do this by transforming each - * basic set A x >= b to A U x' >= b and then removing the last n dimensions. - * After computing the convex hull in x'_1, i.e., A' x'_1 >= b', - * we transform the hull back to the original space as A' Q_1 x >= b', - * with Q_1 all but the last n rows of Q. - */ -static struct isl_basic_set *modulo_lineality(struct isl_set *set, - struct isl_basic_set *lin) -{ - unsigned total = isl_basic_set_total_dim(lin); - unsigned lin_dim; - struct isl_basic_set *hull; - struct isl_mat *M, *U, *Q; - - if (!set || !lin) - goto error; - lin_dim = total - lin->n_eq; - M = isl_mat_sub_alloc6(set->ctx, lin->eq, 0, lin->n_eq, 1, total); - M = isl_mat_left_hermite(M, 0, &U, &Q); - if (!M) - goto error; - isl_mat_free(M); - isl_basic_set_free(lin); - - Q = isl_mat_drop_rows(Q, Q->n_row - lin_dim, lin_dim); - - U = isl_mat_lin_to_aff(U); - Q = isl_mat_lin_to_aff(Q); - - set = isl_set_preimage(set, U); - set = isl_set_remove_dims(set, isl_dim_set, total - lin_dim, lin_dim); - hull = uset_convex_hull(set); - hull = isl_basic_set_preimage(hull, Q); - - return hull; -error: - isl_basic_set_free(lin); - isl_set_free(set); - return NULL; -} - -/* Given two polyhedra with as constraints h_{ij} x >= 0 in homegeneous space, - * set up an LP for solving - * - * \sum_j \alpha_{1j} h_{1j} = \sum_j \alpha_{2j} h_{2j} - * - * \alpha{i0} corresponds to the (implicit) positivity constraint 1 >= 0 - * The next \alpha{ij} correspond to the equalities and come in pairs. - * The final \alpha{ij} correspond to the inequalities. - */ -static struct isl_basic_set *valid_direction_lp( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - struct isl_dim *dim; - struct isl_basic_set *lp; - unsigned d; - int n; - int i, j, k; - - if (!bset1 || !bset2) - goto error; - d = 1 + isl_basic_set_total_dim(bset1); - n = 2 + - 2 * bset1->n_eq + bset1->n_ineq + 2 * bset2->n_eq + bset2->n_ineq; - dim = isl_dim_set_alloc(bset1->ctx, 0, n); - lp = isl_basic_set_alloc_dim(dim, 0, d, n); - if (!lp) - goto error; - for (i = 0; i < n; ++i) { - k = isl_basic_set_alloc_inequality(lp); - if (k < 0) - goto error; - isl_seq_clr(lp->ineq[k] + 1, n); - isl_int_set_si(lp->ineq[k][0], -1); - isl_int_set_si(lp->ineq[k][1 + i], 1); - } - for (i = 0; i < d; ++i) { - k = isl_basic_set_alloc_equality(lp); - if (k < 0) - goto error; - n = 0; - isl_int_set_si(lp->eq[k][n], 0); n++; - /* positivity constraint 1 >= 0 */ - isl_int_set_si(lp->eq[k][n], i == 0); n++; - for (j = 0; j < bset1->n_eq; ++j) { - isl_int_set(lp->eq[k][n], bset1->eq[j][i]); n++; - isl_int_neg(lp->eq[k][n], bset1->eq[j][i]); n++; - } - for (j = 0; j < bset1->n_ineq; ++j) { - isl_int_set(lp->eq[k][n], bset1->ineq[j][i]); n++; - } - /* positivity constraint 1 >= 0 */ - isl_int_set_si(lp->eq[k][n], -(i == 0)); n++; - for (j = 0; j < bset2->n_eq; ++j) { - isl_int_neg(lp->eq[k][n], bset2->eq[j][i]); n++; - isl_int_set(lp->eq[k][n], bset2->eq[j][i]); n++; - } - for (j = 0; j < bset2->n_ineq; ++j) { - isl_int_neg(lp->eq[k][n], bset2->ineq[j][i]); n++; - } - } - lp = isl_basic_set_gauss(lp, NULL); - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return lp; -error: - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return NULL; -} - -/* Compute a vector s in the homogeneous space such that > 0 - * for all rays in the homogeneous space of the two cones that correspond - * to the input polyhedra bset1 and bset2. - * - * We compute s as a vector that satisfies - * - * s = \sum_j \alpha_{ij} h_{ij} for i = 1,2 (*) - * - * with h_{ij} the normals of the facets of polyhedron i - * (including the "positivity constraint" 1 >= 0) and \alpha_{ij} - * strictly positive numbers. For simplicity we impose \alpha_{ij} >= 1. - * We first set up an LP with as variables the \alpha{ij}. - * In this formulation, for each polyhedron i, - * the first constraint is the positivity constraint, followed by pairs - * of variables for the equalities, followed by variables for the inequalities. - * We then simply pick a feasible solution and compute s using (*). - * - * Note that we simply pick any valid direction and make no attempt - * to pick a "good" or even the "best" valid direction. - */ -static struct isl_vec *valid_direction( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - struct isl_basic_set *lp; - struct isl_tab *tab; - struct isl_vec *sample = NULL; - struct isl_vec *dir; - unsigned d; - int i; - int n; - - if (!bset1 || !bset2) - goto error; - lp = valid_direction_lp(isl_basic_set_copy(bset1), - isl_basic_set_copy(bset2)); - tab = isl_tab_from_basic_set(lp); - sample = isl_tab_get_sample_value(tab); - isl_tab_free(tab); - isl_basic_set_free(lp); - if (!sample) - goto error; - d = isl_basic_set_total_dim(bset1); - dir = isl_vec_alloc(bset1->ctx, 1 + d); - if (!dir) - goto error; - isl_seq_clr(dir->block.data + 1, dir->size - 1); - n = 1; - /* positivity constraint 1 >= 0 */ - isl_int_set(dir->block.data[0], sample->block.data[n]); n++; - for (i = 0; i < bset1->n_eq; ++i) { - isl_int_sub(sample->block.data[n], - sample->block.data[n], sample->block.data[n+1]); - isl_seq_combine(dir->block.data, - bset1->ctx->one, dir->block.data, - sample->block.data[n], bset1->eq[i], 1 + d); - - n += 2; - } - for (i = 0; i < bset1->n_ineq; ++i) - isl_seq_combine(dir->block.data, - bset1->ctx->one, dir->block.data, - sample->block.data[n++], bset1->ineq[i], 1 + d); - isl_vec_free(sample); - isl_seq_normalize(bset1->ctx, dir->el, dir->size); - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return dir; -error: - isl_vec_free(sample); - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return NULL; -} - -/* Given a polyhedron b_i + A_i x >= 0 and a map T = S^{-1}, - * compute b_i' + A_i' x' >= 0, with - * - * [ b_i A_i ] [ y' ] [ y' ] - * [ 1 0 ] S^{-1} [ x' ] >= 0 or [ b_i' A_i' ] [ x' ] >= 0 - * - * In particular, add the "positivity constraint" and then perform - * the mapping. - */ -static struct isl_basic_set *homogeneous_map(struct isl_basic_set *bset, - struct isl_mat *T) -{ - int k; - - if (!bset) - goto error; - bset = isl_basic_set_extend_constraints(bset, 0, 1); - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_clr(bset->ineq[k] + 1, isl_basic_set_total_dim(bset)); - isl_int_set_si(bset->ineq[k][0], 1); - bset = isl_basic_set_preimage(bset, T); - return bset; -error: - isl_mat_free(T); - isl_basic_set_free(bset); - return NULL; -} - -/* Compute the convex hull of a pair of basic sets without any parameters or - * integer divisions, where the convex hull is known to be pointed, - * but the basic sets may be unbounded. - * - * We turn this problem into the computation of a convex hull of a pair - * _bounded_ polyhedra by "changing the direction of the homogeneous - * dimension". This idea is due to Matthias Koeppe. - * - * Consider the cones in homogeneous space that correspond to the - * input polyhedra. The rays of these cones are also rays of the - * polyhedra if the coordinate that corresponds to the homogeneous - * dimension is zero. That is, if the inner product of the rays - * with the homogeneous direction is zero. - * The cones in the homogeneous space can also be considered to - * correspond to other pairs of polyhedra by chosing a different - * homogeneous direction. To ensure that both of these polyhedra - * are bounded, we need to make sure that all rays of the cones - * correspond to vertices and not to rays. - * Let s be a direction such that > 0 for all rays r of both cones. - * Then using s as a homogeneous direction, we obtain a pair of polytopes. - * The vector s is computed in valid_direction. - * - * Note that we need to consider _all_ rays of the cones and not just - * the rays that correspond to rays in the polyhedra. If we were to - * only consider those rays and turn them into vertices, then we - * may inadvertently turn some vertices into rays. - * - * The standard homogeneous direction is the unit vector in the 0th coordinate. - * We therefore transform the two polyhedra such that the selected - * direction is mapped onto this standard direction and then proceed - * with the normal computation. - * Let S be a non-singular square matrix with s as its first row, - * then we want to map the polyhedra to the space - * - * [ y' ] [ y ] [ y ] [ y' ] - * [ x' ] = S [ x ] i.e., [ x ] = S^{-1} [ x' ] - * - * We take S to be the unimodular completion of s to limit the growth - * of the coefficients in the following computations. - * - * Let b_i + A_i x >= 0 be the constraints of polyhedron i. - * We first move to the homogeneous dimension - * - * b_i y + A_i x >= 0 [ b_i A_i ] [ y ] [ 0 ] - * y >= 0 or [ 1 0 ] [ x ] >= [ 0 ] - * - * Then we change directoin - * - * [ b_i A_i ] [ y' ] [ y' ] - * [ 1 0 ] S^{-1} [ x' ] >= 0 or [ b_i' A_i' ] [ x' ] >= 0 - * - * Then we compute the convex hull of the polytopes b_i' + A_i' x' >= 0 - * resulting in b' + A' x' >= 0, which we then convert back - * - * [ y ] [ y ] - * [ b' A' ] S [ x ] >= 0 or [ b A ] [ x ] >= 0 - * - * The polyhedron b + A x >= 0 is then the convex hull of the input polyhedra. - */ -static struct isl_basic_set *convex_hull_pair_pointed( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - struct isl_ctx *ctx = NULL; - struct isl_vec *dir = NULL; - struct isl_mat *T = NULL; - struct isl_mat *T2 = NULL; - struct isl_basic_set *hull; - struct isl_set *set; - - if (!bset1 || !bset2) - goto error; - ctx = bset1->ctx; - dir = valid_direction(isl_basic_set_copy(bset1), - isl_basic_set_copy(bset2)); - if (!dir) - goto error; - T = isl_mat_alloc(bset1->ctx, dir->size, dir->size); - if (!T) - goto error; - isl_seq_cpy(T->row[0], dir->block.data, dir->size); - T = isl_mat_unimodular_complete(T, 1); - T2 = isl_mat_right_inverse(isl_mat_copy(T)); - - bset1 = homogeneous_map(bset1, isl_mat_copy(T2)); - bset2 = homogeneous_map(bset2, T2); - set = isl_set_alloc_dim(isl_basic_set_get_dim(bset1), 2, 0); - set = isl_set_add_basic_set(set, bset1); - set = isl_set_add_basic_set(set, bset2); - hull = uset_convex_hull(set); - hull = isl_basic_set_preimage(hull, T); - - isl_vec_free(dir); - - return hull; -error: - isl_vec_free(dir); - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return NULL; -} - -static struct isl_basic_set *uset_convex_hull_wrap(struct isl_set *set); -static struct isl_basic_set *modulo_affine_hull( - struct isl_set *set, struct isl_basic_set *affine_hull); - -/* Compute the convex hull of a pair of basic sets without any parameters or - * integer divisions. - * - * This function is called from uset_convex_hull_unbounded, which - * means that the complete convex hull is unbounded. Some pairs - * of basic sets may still be bounded, though. - * They may even lie inside a lower dimensional space, in which - * case they need to be handled inside their affine hull since - * the main algorithm assumes that the result is full-dimensional. - * - * If the convex hull of the two basic sets would have a non-trivial - * lineality space, we first project out this lineality space. - */ -static struct isl_basic_set *convex_hull_pair(struct isl_basic_set *bset1, - struct isl_basic_set *bset2) -{ - isl_basic_set *lin, *aff; - int bounded1, bounded2; - - if (bset1->ctx->opt->convex == ISL_CONVEX_HULL_FM) - return convex_hull_pair_elim(bset1, bset2); - - aff = isl_set_affine_hull(isl_basic_set_union(isl_basic_set_copy(bset1), - isl_basic_set_copy(bset2))); - if (!aff) - goto error; - if (aff->n_eq != 0) - return modulo_affine_hull(isl_basic_set_union(bset1, bset2), aff); - isl_basic_set_free(aff); - - bounded1 = isl_basic_set_is_bounded(bset1); - bounded2 = isl_basic_set_is_bounded(bset2); - - if (bounded1 < 0 || bounded2 < 0) - goto error; - - if (bounded1 && bounded2) - uset_convex_hull_wrap(isl_basic_set_union(bset1, bset2)); - - if (bounded1 || bounded2) - return convex_hull_pair_pointed(bset1, bset2); - - lin = induced_lineality_space(isl_basic_set_copy(bset1), - isl_basic_set_copy(bset2)); - if (!lin) - goto error; - if (isl_basic_set_is_universe(lin)) { - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return lin; - } - if (lin->n_eq < isl_basic_set_total_dim(lin)) { - struct isl_set *set; - set = isl_set_alloc_dim(isl_basic_set_get_dim(bset1), 2, 0); - set = isl_set_add_basic_set(set, bset1); - set = isl_set_add_basic_set(set, bset2); - return modulo_lineality(set, lin); - } - isl_basic_set_free(lin); - - return convex_hull_pair_pointed(bset1, bset2); -error: - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return NULL; -} - -/* Compute the lineality space of a basic set. - * We currently do not allow the basic set to have any divs. - * We basically just drop the constants and turn every inequality - * into an equality. - */ -struct isl_basic_set *isl_basic_set_lineality_space(struct isl_basic_set *bset) -{ - int i, k; - struct isl_basic_set *lin = NULL; - unsigned dim; - - if (!bset) - goto error; - isl_assert(bset->ctx, bset->n_div == 0, goto error); - dim = isl_basic_set_total_dim(bset); - - lin = isl_basic_set_alloc_dim(isl_basic_set_get_dim(bset), 0, dim, 0); - if (!lin) - goto error; - for (i = 0; i < bset->n_eq; ++i) { - k = isl_basic_set_alloc_equality(lin); - if (k < 0) - goto error; - isl_int_set_si(lin->eq[k][0], 0); - isl_seq_cpy(lin->eq[k] + 1, bset->eq[i] + 1, dim); - } - lin = isl_basic_set_gauss(lin, NULL); - if (!lin) - goto error; - for (i = 0; i < bset->n_ineq && lin->n_eq < dim; ++i) { - k = isl_basic_set_alloc_equality(lin); - if (k < 0) - goto error; - isl_int_set_si(lin->eq[k][0], 0); - isl_seq_cpy(lin->eq[k] + 1, bset->ineq[i] + 1, dim); - lin = isl_basic_set_gauss(lin, NULL); - if (!lin) - goto error; - } - isl_basic_set_free(bset); - return lin; -error: - isl_basic_set_free(lin); - isl_basic_set_free(bset); - return NULL; -} - -/* Compute the (linear) hull of the lineality spaces of the basic sets in the - * "underlying" set "set". - */ -static struct isl_basic_set *uset_combined_lineality_space(struct isl_set *set) -{ - int i; - struct isl_set *lin = NULL; - - if (!set) - return NULL; - if (set->n == 0) { - struct isl_dim *dim = isl_set_get_dim(set); - isl_set_free(set); - return isl_basic_set_empty(dim); - } - - lin = isl_set_alloc_dim(isl_set_get_dim(set), set->n, 0); - for (i = 0; i < set->n; ++i) - lin = isl_set_add_basic_set(lin, - isl_basic_set_lineality_space(isl_basic_set_copy(set->p[i]))); - isl_set_free(set); - return isl_set_affine_hull(lin); -} - -/* Compute the convex hull of a set without any parameters or - * integer divisions. - * In each step, we combined two basic sets until only one - * basic set is left. - * The input basic sets are assumed not to have a non-trivial - * lineality space. If any of the intermediate results has - * a non-trivial lineality space, it is projected out. - */ -static struct isl_basic_set *uset_convex_hull_unbounded(struct isl_set *set) -{ - struct isl_basic_set *convex_hull = NULL; - - convex_hull = isl_set_copy_basic_set(set); - set = isl_set_drop_basic_set(set, convex_hull); - if (!set) - goto error; - while (set->n > 0) { - struct isl_basic_set *t; - t = isl_set_copy_basic_set(set); - if (!t) - goto error; - set = isl_set_drop_basic_set(set, t); - if (!set) - goto error; - convex_hull = convex_hull_pair(convex_hull, t); - if (set->n == 0) - break; - t = isl_basic_set_lineality_space(isl_basic_set_copy(convex_hull)); - if (!t) - goto error; - if (isl_basic_set_is_universe(t)) { - isl_basic_set_free(convex_hull); - convex_hull = t; - break; - } - if (t->n_eq < isl_basic_set_total_dim(t)) { - set = isl_set_add_basic_set(set, convex_hull); - return modulo_lineality(set, t); - } - isl_basic_set_free(t); - } - isl_set_free(set); - return convex_hull; -error: - isl_set_free(set); - isl_basic_set_free(convex_hull); - return NULL; -} - -/* Compute an initial hull for wrapping containing a single initial - * facet. - * This function assumes that the given set is bounded. - */ -static struct isl_basic_set *initial_hull(struct isl_basic_set *hull, - struct isl_set *set) -{ - struct isl_mat *bounds = NULL; - unsigned dim; - int k; - - if (!hull) - goto error; - bounds = initial_facet_constraint(set); - if (!bounds) - goto error; - k = isl_basic_set_alloc_inequality(hull); - if (k < 0) - goto error; - dim = isl_set_n_dim(set); - isl_assert(set->ctx, 1 + dim == bounds->n_col, goto error); - isl_seq_cpy(hull->ineq[k], bounds->row[0], bounds->n_col); - isl_mat_free(bounds); - - return hull; -error: - isl_basic_set_free(hull); - isl_mat_free(bounds); - return NULL; -} - -struct max_constraint { - struct isl_mat *c; - int count; - int ineq; -}; - -static int max_constraint_equal(const void *entry, const void *val) -{ - struct max_constraint *a = (struct max_constraint *)entry; - isl_int *b = (isl_int *)val; - - return isl_seq_eq(a->c->row[0] + 1, b, a->c->n_col - 1); -} - -static void update_constraint(struct isl_ctx *ctx, struct isl_hash_table *table, - isl_int *con, unsigned len, int n, int ineq) -{ - struct isl_hash_table_entry *entry; - struct max_constraint *c; - uint32_t c_hash; - - c_hash = isl_seq_get_hash(con + 1, len); - entry = isl_hash_table_find(ctx, table, c_hash, max_constraint_equal, - con + 1, 0); - if (!entry) - return; - c = entry->data; - if (c->count < n) { - isl_hash_table_remove(ctx, table, entry); - return; - } - c->count++; - if (isl_int_gt(c->c->row[0][0], con[0])) - return; - if (isl_int_eq(c->c->row[0][0], con[0])) { - if (ineq) - c->ineq = ineq; - return; - } - c->c = isl_mat_cow(c->c); - isl_int_set(c->c->row[0][0], con[0]); - c->ineq = ineq; -} - -/* Check whether the constraint hash table "table" constains the constraint - * "con". - */ -static int has_constraint(struct isl_ctx *ctx, struct isl_hash_table *table, - isl_int *con, unsigned len, int n) -{ - struct isl_hash_table_entry *entry; - struct max_constraint *c; - uint32_t c_hash; - - c_hash = isl_seq_get_hash(con + 1, len); - entry = isl_hash_table_find(ctx, table, c_hash, max_constraint_equal, - con + 1, 0); - if (!entry) - return 0; - c = entry->data; - if (c->count < n) - return 0; - return isl_int_eq(c->c->row[0][0], con[0]); -} - -/* Check for inequality constraints of a basic set without equalities - * such that the same or more stringent copies of the constraint appear - * in all of the basic sets. Such constraints are necessarily facet - * constraints of the convex hull. - * - * If the resulting basic set is by chance identical to one of - * the basic sets in "set", then we know that this basic set contains - * all other basic sets and is therefore the convex hull of set. - * In this case we set *is_hull to 1. - */ -static struct isl_basic_set *common_constraints(struct isl_basic_set *hull, - struct isl_set *set, int *is_hull) -{ - int i, j, s, n; - int min_constraints; - int best; - struct max_constraint *constraints = NULL; - struct isl_hash_table *table = NULL; - unsigned total; - - *is_hull = 0; - - for (i = 0; i < set->n; ++i) - if (set->p[i]->n_eq == 0) - break; - if (i >= set->n) - return hull; - min_constraints = set->p[i]->n_ineq; - best = i; - for (i = best + 1; i < set->n; ++i) { - if (set->p[i]->n_eq != 0) - continue; - if (set->p[i]->n_ineq >= min_constraints) - continue; - min_constraints = set->p[i]->n_ineq; - best = i; - } - constraints = isl_calloc_array(hull->ctx, struct max_constraint, - min_constraints); - if (!constraints) - return hull; - table = isl_alloc_type(hull->ctx, struct isl_hash_table); - if (isl_hash_table_init(hull->ctx, table, min_constraints)) - goto error; - - total = isl_dim_total(set->dim); - for (i = 0; i < set->p[best]->n_ineq; ++i) { - constraints[i].c = isl_mat_sub_alloc6(hull->ctx, - set->p[best]->ineq + i, 0, 1, 0, 1 + total); - if (!constraints[i].c) - goto error; - constraints[i].ineq = 1; - } - for (i = 0; i < min_constraints; ++i) { - struct isl_hash_table_entry *entry; - uint32_t c_hash; - c_hash = isl_seq_get_hash(constraints[i].c->row[0] + 1, total); - entry = isl_hash_table_find(hull->ctx, table, c_hash, - max_constraint_equal, constraints[i].c->row[0] + 1, 1); - if (!entry) - goto error; - isl_assert(hull->ctx, !entry->data, goto error); - entry->data = &constraints[i]; - } - - n = 0; - for (s = 0; s < set->n; ++s) { - if (s == best) - continue; - - for (i = 0; i < set->p[s]->n_eq; ++i) { - isl_int *eq = set->p[s]->eq[i]; - for (j = 0; j < 2; ++j) { - isl_seq_neg(eq, eq, 1 + total); - update_constraint(hull->ctx, table, - eq, total, n, 0); - } - } - for (i = 0; i < set->p[s]->n_ineq; ++i) { - isl_int *ineq = set->p[s]->ineq[i]; - update_constraint(hull->ctx, table, ineq, total, n, - set->p[s]->n_eq == 0); - } - ++n; - } - - for (i = 0; i < min_constraints; ++i) { - if (constraints[i].count < n) - continue; - if (!constraints[i].ineq) - continue; - j = isl_basic_set_alloc_inequality(hull); - if (j < 0) - goto error; - isl_seq_cpy(hull->ineq[j], constraints[i].c->row[0], 1 + total); - } - - for (s = 0; s < set->n; ++s) { - if (set->p[s]->n_eq) - continue; - if (set->p[s]->n_ineq != hull->n_ineq) - continue; - for (i = 0; i < set->p[s]->n_ineq; ++i) { - isl_int *ineq = set->p[s]->ineq[i]; - if (!has_constraint(hull->ctx, table, ineq, total, n)) - break; - } - if (i == set->p[s]->n_ineq) - *is_hull = 1; - } - - isl_hash_table_clear(table); - for (i = 0; i < min_constraints; ++i) - isl_mat_free(constraints[i].c); - free(constraints); - free(table); - return hull; -error: - isl_hash_table_clear(table); - free(table); - if (constraints) - for (i = 0; i < min_constraints; ++i) - isl_mat_free(constraints[i].c); - free(constraints); - return hull; -} - -/* Create a template for the convex hull of "set" and fill it up - * obvious facet constraints, if any. If the result happens to - * be the convex hull of "set" then *is_hull is set to 1. - */ -static struct isl_basic_set *proto_hull(struct isl_set *set, int *is_hull) -{ - struct isl_basic_set *hull; - unsigned n_ineq; - int i; - - n_ineq = 1; - for (i = 0; i < set->n; ++i) { - n_ineq += set->p[i]->n_eq; - n_ineq += set->p[i]->n_ineq; - } - hull = isl_basic_set_alloc_dim(isl_dim_copy(set->dim), 0, 0, n_ineq); - hull = isl_basic_set_set_rational(hull); - if (!hull) - return NULL; - return common_constraints(hull, set, is_hull); -} - -static struct isl_basic_set *uset_convex_hull_wrap(struct isl_set *set) -{ - struct isl_basic_set *hull; - int is_hull; - - hull = proto_hull(set, &is_hull); - if (hull && !is_hull) { - if (hull->n_ineq == 0) - hull = initial_hull(hull, set); - hull = extend(hull, set); - } - isl_set_free(set); - - return hull; -} - -/* Compute the convex hull of a set without any parameters or - * integer divisions. Depending on whether the set is bounded, - * we pass control to the wrapping based convex hull or - * the Fourier-Motzkin elimination based convex hull. - * We also handle a few special cases before checking the boundedness. - */ -static struct isl_basic_set *uset_convex_hull(struct isl_set *set) -{ - struct isl_basic_set *convex_hull = NULL; - struct isl_basic_set *lin; - - if (isl_set_n_dim(set) == 0) - return convex_hull_0d(set); - - set = isl_set_coalesce(set); - set = isl_set_set_rational(set); - - if (!set) - goto error; - if (!set) - return NULL; - if (set->n == 1) { - convex_hull = isl_basic_set_copy(set->p[0]); - isl_set_free(set); - return convex_hull; - } - if (isl_set_n_dim(set) == 1) - return convex_hull_1d(set); - - if (isl_set_is_bounded(set) && - set->ctx->opt->convex == ISL_CONVEX_HULL_WRAP) - return uset_convex_hull_wrap(set); - - lin = uset_combined_lineality_space(isl_set_copy(set)); - if (!lin) - goto error; - if (isl_basic_set_is_universe(lin)) { - isl_set_free(set); - return lin; - } - if (lin->n_eq < isl_basic_set_total_dim(lin)) - return modulo_lineality(set, lin); - isl_basic_set_free(lin); - - return uset_convex_hull_unbounded(set); -error: - isl_set_free(set); - isl_basic_set_free(convex_hull); - return NULL; -} - -/* This is the core procedure, where "set" is a "pure" set, i.e., - * without parameters or divs and where the convex hull of set is - * known to be full-dimensional. - */ -static struct isl_basic_set *uset_convex_hull_wrap_bounded(struct isl_set *set) -{ - struct isl_basic_set *convex_hull = NULL; - - if (!set) - goto error; - - if (isl_set_n_dim(set) == 0) { - convex_hull = isl_basic_set_universe(isl_dim_copy(set->dim)); - isl_set_free(set); - convex_hull = isl_basic_set_set_rational(convex_hull); - return convex_hull; - } - - set = isl_set_set_rational(set); - set = isl_set_coalesce(set); - if (!set) - goto error; - if (set->n == 1) { - convex_hull = isl_basic_set_copy(set->p[0]); - isl_set_free(set); - return convex_hull; - } - if (isl_set_n_dim(set) == 1) - return convex_hull_1d(set); - - return uset_convex_hull_wrap(set); -error: - isl_set_free(set); - return NULL; -} - -/* Compute the convex hull of set "set" with affine hull "affine_hull", - * We first remove the equalities (transforming the set), compute the - * convex hull of the transformed set and then add the equalities back - * (after performing the inverse transformation. - */ -static struct isl_basic_set *modulo_affine_hull( - struct isl_set *set, struct isl_basic_set *affine_hull) -{ - struct isl_mat *T; - struct isl_mat *T2; - struct isl_basic_set *dummy; - struct isl_basic_set *convex_hull; - - dummy = isl_basic_set_remove_equalities( - isl_basic_set_copy(affine_hull), &T, &T2); - if (!dummy) - goto error; - isl_basic_set_free(dummy); - set = isl_set_preimage(set, T); - convex_hull = uset_convex_hull(set); - convex_hull = isl_basic_set_preimage(convex_hull, T2); - convex_hull = isl_basic_set_intersect(convex_hull, affine_hull); - return convex_hull; -error: - isl_basic_set_free(affine_hull); - isl_set_free(set); - return NULL; -} - -/* Compute the convex hull of a map. - * - * The implementation was inspired by "Extended Convex Hull" by Fukuda et al., - * specifically, the wrapping of facets to obtain new facets. - */ -struct isl_basic_map *isl_map_convex_hull(struct isl_map *map) -{ - struct isl_basic_set *bset; - struct isl_basic_map *model = NULL; - struct isl_basic_set *affine_hull = NULL; - struct isl_basic_map *convex_hull = NULL; - struct isl_set *set = NULL; - struct isl_ctx *ctx; - - if (!map) - goto error; - - ctx = map->ctx; - if (map->n == 0) { - convex_hull = isl_basic_map_empty_like_map(map); - isl_map_free(map); - return convex_hull; - } - - map = isl_map_detect_equalities(map); - map = isl_map_align_divs(map); - if (!map) - goto error; - model = isl_basic_map_copy(map->p[0]); - set = isl_map_underlying_set(map); - if (!set) - goto error; - - affine_hull = isl_set_affine_hull(isl_set_copy(set)); - if (!affine_hull) - goto error; - if (affine_hull->n_eq != 0) - bset = modulo_affine_hull(set, affine_hull); - else { - isl_basic_set_free(affine_hull); - bset = uset_convex_hull(set); - } - - convex_hull = isl_basic_map_overlying_set(bset, model); - if (!convex_hull) - return NULL; - - ISL_F_SET(convex_hull, ISL_BASIC_MAP_NO_IMPLICIT); - ISL_F_SET(convex_hull, ISL_BASIC_MAP_ALL_EQUALITIES); - ISL_F_CLR(convex_hull, ISL_BASIC_MAP_RATIONAL); - return convex_hull; -error: - isl_set_free(set); - isl_basic_map_free(model); - return NULL; -} - -struct isl_basic_set *isl_set_convex_hull(struct isl_set *set) -{ - return (struct isl_basic_set *) - isl_map_convex_hull((struct isl_map *)set); -} - -__isl_give isl_basic_map *isl_map_polyhedral_hull(__isl_take isl_map *map) -{ - isl_basic_map *hull; - - hull = isl_map_convex_hull(map); - return isl_basic_map_remove_divs(hull); -} - -__isl_give isl_basic_set *isl_set_polyhedral_hull(__isl_take isl_set *set) -{ - return (isl_basic_set *)isl_map_polyhedral_hull((isl_map *)set); -} - -struct sh_data_entry { - struct isl_hash_table *table; - struct isl_tab *tab; -}; - -/* Holds the data needed during the simple hull computation. - * In particular, - * n the number of basic sets in the original set - * hull_table a hash table of already computed constraints - * in the simple hull - * p for each basic set, - * table a hash table of the constraints - * tab the tableau corresponding to the basic set - */ -struct sh_data { - struct isl_ctx *ctx; - unsigned n; - struct isl_hash_table *hull_table; - struct sh_data_entry p[1]; -}; - -static void sh_data_free(struct sh_data *data) -{ - int i; - - if (!data) - return; - isl_hash_table_free(data->ctx, data->hull_table); - for (i = 0; i < data->n; ++i) { - isl_hash_table_free(data->ctx, data->p[i].table); - isl_tab_free(data->p[i].tab); - } - free(data); -} - -struct ineq_cmp_data { - unsigned len; - isl_int *p; -}; - -static int has_ineq(const void *entry, const void *val) -{ - isl_int *row = (isl_int *)entry; - struct ineq_cmp_data *v = (struct ineq_cmp_data *)val; - - return isl_seq_eq(row + 1, v->p + 1, v->len) || - isl_seq_is_neg(row + 1, v->p + 1, v->len); -} - -static int hash_ineq(struct isl_ctx *ctx, struct isl_hash_table *table, - isl_int *ineq, unsigned len) -{ - uint32_t c_hash; - struct ineq_cmp_data v; - struct isl_hash_table_entry *entry; - - v.len = len; - v.p = ineq; - c_hash = isl_seq_get_hash(ineq + 1, len); - entry = isl_hash_table_find(ctx, table, c_hash, has_ineq, &v, 1); - if (!entry) - return - 1; - entry->data = ineq; - return 0; -} - -/* Fill hash table "table" with the constraints of "bset". - * Equalities are added as two inequalities. - * The value in the hash table is a pointer to the (in)equality of "bset". - */ -static int hash_basic_set(struct isl_hash_table *table, - struct isl_basic_set *bset) -{ - int i, j; - unsigned dim = isl_basic_set_total_dim(bset); - - for (i = 0; i < bset->n_eq; ++i) { - for (j = 0; j < 2; ++j) { - isl_seq_neg(bset->eq[i], bset->eq[i], 1 + dim); - if (hash_ineq(bset->ctx, table, bset->eq[i], dim) < 0) - return -1; - } - } - for (i = 0; i < bset->n_ineq; ++i) { - if (hash_ineq(bset->ctx, table, bset->ineq[i], dim) < 0) - return -1; - } - return 0; -} - -static struct sh_data *sh_data_alloc(struct isl_set *set, unsigned n_ineq) -{ - struct sh_data *data; - int i; - - data = isl_calloc(set->ctx, struct sh_data, - sizeof(struct sh_data) + - (set->n - 1) * sizeof(struct sh_data_entry)); - if (!data) - return NULL; - data->ctx = set->ctx; - data->n = set->n; - data->hull_table = isl_hash_table_alloc(set->ctx, n_ineq); - if (!data->hull_table) - goto error; - for (i = 0; i < set->n; ++i) { - data->p[i].table = isl_hash_table_alloc(set->ctx, - 2 * set->p[i]->n_eq + set->p[i]->n_ineq); - if (!data->p[i].table) - goto error; - if (hash_basic_set(data->p[i].table, set->p[i]) < 0) - goto error; - } - return data; -error: - sh_data_free(data); - return NULL; -} - -/* Check if inequality "ineq" is a bound for basic set "j" or if - * it can be relaxed (by increasing the constant term) to become - * a bound for that basic set. In the latter case, the constant - * term is updated. - * Return 1 if "ineq" is a bound - * 0 if "ineq" may attain arbitrarily small values on basic set "j" - * -1 if some error occurred - */ -static int is_bound(struct sh_data *data, struct isl_set *set, int j, - isl_int *ineq) -{ - enum isl_lp_result res; - isl_int opt; - - if (!data->p[j].tab) { - data->p[j].tab = isl_tab_from_basic_set(set->p[j]); - if (!data->p[j].tab) - return -1; - } - - isl_int_init(opt); - - res = isl_tab_min(data->p[j].tab, ineq, data->ctx->one, - &opt, NULL, 0); - if (res == isl_lp_ok && isl_int_is_neg(opt)) - isl_int_sub(ineq[0], ineq[0], opt); - - isl_int_clear(opt); - - return (res == isl_lp_ok || res == isl_lp_empty) ? 1 : - res == isl_lp_unbounded ? 0 : -1; -} - -/* Check if inequality "ineq" from basic set "i" can be relaxed to - * become a bound on the whole set. If so, add the (relaxed) inequality - * to "hull". - * - * We first check if "hull" already contains a translate of the inequality. - * If so, we are done. - * Then, we check if any of the previous basic sets contains a translate - * of the inequality. If so, then we have already considered this - * inequality and we are done. - * Otherwise, for each basic set other than "i", we check if the inequality - * is a bound on the basic set. - * For previous basic sets, we know that they do not contain a translate - * of the inequality, so we directly call is_bound. - * For following basic sets, we first check if a translate of the - * inequality appears in its description and if so directly update - * the inequality accordingly. - */ -static struct isl_basic_set *add_bound(struct isl_basic_set *hull, - struct sh_data *data, struct isl_set *set, int i, isl_int *ineq) -{ - uint32_t c_hash; - struct ineq_cmp_data v; - struct isl_hash_table_entry *entry; - int j, k; - - if (!hull) - return NULL; - - v.len = isl_basic_set_total_dim(hull); - v.p = ineq; - c_hash = isl_seq_get_hash(ineq + 1, v.len); - - entry = isl_hash_table_find(hull->ctx, data->hull_table, c_hash, - has_ineq, &v, 0); - if (entry) - return hull; - - for (j = 0; j < i; ++j) { - entry = isl_hash_table_find(hull->ctx, data->p[j].table, - c_hash, has_ineq, &v, 0); - if (entry) - break; - } - if (j < i) - return hull; - - k = isl_basic_set_alloc_inequality(hull); - isl_seq_cpy(hull->ineq[k], ineq, 1 + v.len); - if (k < 0) - goto error; - - for (j = 0; j < i; ++j) { - int bound; - bound = is_bound(data, set, j, hull->ineq[k]); - if (bound < 0) - goto error; - if (!bound) - break; - } - if (j < i) { - isl_basic_set_free_inequality(hull, 1); - return hull; - } - - for (j = i + 1; j < set->n; ++j) { - int bound, neg; - isl_int *ineq_j; - entry = isl_hash_table_find(hull->ctx, data->p[j].table, - c_hash, has_ineq, &v, 0); - if (entry) { - ineq_j = entry->data; - neg = isl_seq_is_neg(ineq_j + 1, - hull->ineq[k] + 1, v.len); - if (neg) - isl_int_neg(ineq_j[0], ineq_j[0]); - if (isl_int_gt(ineq_j[0], hull->ineq[k][0])) - isl_int_set(hull->ineq[k][0], ineq_j[0]); - if (neg) - isl_int_neg(ineq_j[0], ineq_j[0]); - continue; - } - bound = is_bound(data, set, j, hull->ineq[k]); - if (bound < 0) - goto error; - if (!bound) - break; - } - if (j < set->n) { - isl_basic_set_free_inequality(hull, 1); - return hull; - } - - entry = isl_hash_table_find(hull->ctx, data->hull_table, c_hash, - has_ineq, &v, 1); - if (!entry) - goto error; - entry->data = hull->ineq[k]; - - return hull; -error: - isl_basic_set_free(hull); - return NULL; -} - -/* Check if any inequality from basic set "i" can be relaxed to - * become a bound on the whole set. If so, add the (relaxed) inequality - * to "hull". - */ -static struct isl_basic_set *add_bounds(struct isl_basic_set *bset, - struct sh_data *data, struct isl_set *set, int i) -{ - int j, k; - unsigned dim = isl_basic_set_total_dim(bset); - - for (j = 0; j < set->p[i]->n_eq; ++j) { - for (k = 0; k < 2; ++k) { - isl_seq_neg(set->p[i]->eq[j], set->p[i]->eq[j], 1+dim); - bset = add_bound(bset, data, set, i, set->p[i]->eq[j]); - } - } - for (j = 0; j < set->p[i]->n_ineq; ++j) - bset = add_bound(bset, data, set, i, set->p[i]->ineq[j]); - return bset; -} - -/* Compute a superset of the convex hull of set that is described - * by only translates of the constraints in the constituents of set. - */ -static struct isl_basic_set *uset_simple_hull(struct isl_set *set) -{ - struct sh_data *data = NULL; - struct isl_basic_set *hull = NULL; - unsigned n_ineq; - int i; - - if (!set) - return NULL; - - n_ineq = 0; - for (i = 0; i < set->n; ++i) { - if (!set->p[i]) - goto error; - n_ineq += 2 * set->p[i]->n_eq + set->p[i]->n_ineq; - } - - hull = isl_basic_set_alloc_dim(isl_dim_copy(set->dim), 0, 0, n_ineq); - if (!hull) - goto error; - - data = sh_data_alloc(set, n_ineq); - if (!data) - goto error; - - for (i = 0; i < set->n; ++i) - hull = add_bounds(hull, data, set, i); - - sh_data_free(data); - isl_set_free(set); - - return hull; -error: - sh_data_free(data); - isl_basic_set_free(hull); - isl_set_free(set); - return NULL; -} - -/* Compute a superset of the convex hull of map that is described - * by only translates of the constraints in the constituents of map. - */ -struct isl_basic_map *isl_map_simple_hull(struct isl_map *map) -{ - struct isl_set *set = NULL; - struct isl_basic_map *model = NULL; - struct isl_basic_map *hull; - struct isl_basic_map *affine_hull; - struct isl_basic_set *bset = NULL; - - if (!map) - return NULL; - if (map->n == 0) { - hull = isl_basic_map_empty_like_map(map); - isl_map_free(map); - return hull; - } - if (map->n == 1) { - hull = isl_basic_map_copy(map->p[0]); - isl_map_free(map); - return hull; - } - - map = isl_map_detect_equalities(map); - affine_hull = isl_map_affine_hull(isl_map_copy(map)); - map = isl_map_align_divs(map); - model = isl_basic_map_copy(map->p[0]); - - set = isl_map_underlying_set(map); - - bset = uset_simple_hull(set); - - hull = isl_basic_map_overlying_set(bset, model); - - hull = isl_basic_map_intersect(hull, affine_hull); - hull = isl_basic_map_remove_redundancies(hull); - ISL_F_SET(hull, ISL_BASIC_MAP_NO_IMPLICIT); - ISL_F_SET(hull, ISL_BASIC_MAP_ALL_EQUALITIES); - - return hull; -} - -struct isl_basic_set *isl_set_simple_hull(struct isl_set *set) -{ - return (struct isl_basic_set *) - isl_map_simple_hull((struct isl_map *)set); -} - -/* Given a set "set", return parametric bounds on the dimension "dim". - */ -static struct isl_basic_set *set_bounds(struct isl_set *set, int dim) -{ - unsigned set_dim = isl_set_dim(set, isl_dim_set); - set = isl_set_copy(set); - set = isl_set_eliminate_dims(set, dim + 1, set_dim - (dim + 1)); - set = isl_set_eliminate_dims(set, 0, dim); - return isl_set_convex_hull(set); -} - -/* Computes a "simple hull" and then check if each dimension in the - * resulting hull is bounded by a symbolic constant. If not, the - * hull is intersected with the corresponding bounds on the whole set. - */ -struct isl_basic_set *isl_set_bounded_simple_hull(struct isl_set *set) -{ - int i, j; - struct isl_basic_set *hull; - unsigned nparam, left; - int removed_divs = 0; - - hull = isl_set_simple_hull(isl_set_copy(set)); - if (!hull) - goto error; - - nparam = isl_basic_set_dim(hull, isl_dim_param); - for (i = 0; i < isl_basic_set_dim(hull, isl_dim_set); ++i) { - int lower = 0, upper = 0; - struct isl_basic_set *bounds; - - left = isl_basic_set_total_dim(hull) - nparam - i - 1; - for (j = 0; j < hull->n_eq; ++j) { - if (isl_int_is_zero(hull->eq[j][1 + nparam + i])) - continue; - if (isl_seq_first_non_zero(hull->eq[j]+1+nparam+i+1, - left) == -1) - break; - } - if (j < hull->n_eq) - continue; - - for (j = 0; j < hull->n_ineq; ++j) { - if (isl_int_is_zero(hull->ineq[j][1 + nparam + i])) - continue; - if (isl_seq_first_non_zero(hull->ineq[j]+1+nparam+i+1, - left) != -1 || - isl_seq_first_non_zero(hull->ineq[j]+1+nparam, - i) != -1) - continue; - if (isl_int_is_pos(hull->ineq[j][1 + nparam + i])) - lower = 1; - else - upper = 1; - if (lower && upper) - break; - } - - if (lower && upper) - continue; - - if (!removed_divs) { - set = isl_set_remove_divs(set); - if (!set) - goto error; - removed_divs = 1; - } - bounds = set_bounds(set, i); - hull = isl_basic_set_intersect(hull, bounds); - if (!hull) - goto error; - } - - isl_set_free(set); - return hull; -error: - isl_set_free(set); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_ctx.c b/cloog-0.16.3/isl/isl_ctx.c deleted file mode 100644 index 5b37bf5..0000000 --- a/cloog-0.16.3/isl/isl_ctx.c +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include - -static struct isl_options *find_nested_options(struct isl_arg *arg, - void *opt, struct isl_arg *wanted) -{ - int i; - struct isl_options *options; - - if (arg == wanted) - return opt; - - for (i = 0; arg[i].type != isl_arg_end; ++i) { - if (arg[i].type != isl_arg_child) - continue; - options = find_nested_options(arg[i].u.child.child, - *(void **)(((char *)opt) + arg->offset), wanted); - if (options) - return options; - } - - return NULL; -} - -static struct isl_options *find_nested_isl_options(struct isl_arg *arg, - void *opt) -{ - return find_nested_options(arg, opt, isl_options_arg); -} - -void *isl_ctx_peek_options(isl_ctx *ctx, struct isl_arg *arg) -{ - if (!ctx) - return NULL; - return find_nested_options(ctx->user_arg, ctx->user_opt, arg); -} - -isl_ctx *isl_ctx_alloc_with_options(struct isl_arg *arg, void *user_opt) -{ - struct isl_ctx *ctx = NULL; - struct isl_options *opt = NULL; - int opt_allocated = 0; - - if (!user_opt) - return NULL; - - opt = find_nested_isl_options(arg, user_opt); - if (!opt) { - opt = isl_options_new_with_defaults(); - if (!opt) - goto error; - opt_allocated = 1; - } - - ctx = isl_calloc_type(NULL, struct isl_ctx); - if (!ctx) - goto error; - - if (isl_hash_table_init(ctx, &ctx->name_hash, 0)) - goto error; - - ctx->stats = isl_calloc_type(ctx, struct isl_stats); - if (!ctx->stats) - goto error; - - ctx->user_arg = arg; - ctx->user_opt = user_opt; - ctx->opt_allocated = opt_allocated; - ctx->opt = opt; - ctx->ref = 0; - - isl_int_init(ctx->zero); - isl_int_set_si(ctx->zero, 0); - - isl_int_init(ctx->one); - isl_int_set_si(ctx->one, 1); - - isl_int_init(ctx->two); - isl_int_set_si(ctx->two, 2); - - isl_int_init(ctx->negone); - isl_int_set_si(ctx->negone, -1); - - isl_int_init(ctx->normalize_gcd); - - ctx->n_cached = 0; - ctx->n_miss = 0; - - ctx->error = isl_error_none; - - return ctx; -error: - isl_arg_free(arg, user_opt); - if (opt_allocated) - isl_options_free(opt); - free(ctx); - return NULL; -} - -struct isl_ctx *isl_ctx_alloc() -{ - struct isl_options *opt; - - opt = isl_options_new_with_defaults(); - - return isl_ctx_alloc_with_options(isl_options_arg, opt); -} - -void isl_ctx_ref(struct isl_ctx *ctx) -{ - ctx->ref++; -} - -void isl_ctx_deref(struct isl_ctx *ctx) -{ - isl_assert(ctx, ctx->ref > 0, return); - ctx->ref--; -} - -void isl_ctx_free(struct isl_ctx *ctx) -{ - if (!ctx) - return; - isl_assert(ctx, ctx->ref == 0, return); - isl_hash_table_clear(&ctx->name_hash); - isl_blk_clear_cache(ctx); - isl_int_clear(ctx->zero); - isl_int_clear(ctx->one); - isl_int_clear(ctx->two); - isl_int_clear(ctx->negone); - isl_int_clear(ctx->normalize_gcd); - isl_arg_free(ctx->user_arg, ctx->user_opt); - if (ctx->opt_allocated) - free(ctx->opt); - free(ctx->stats); - free(ctx); -} - -struct isl_options *isl_ctx_options(isl_ctx *ctx) -{ - if (!ctx) - return NULL; - return ctx->opt; -} - -enum isl_error isl_ctx_last_error(isl_ctx *ctx) -{ - return ctx->error; -} - -void isl_ctx_reset_error(isl_ctx *ctx) -{ - ctx->error = isl_error_none; -} - -void isl_ctx_set_error(isl_ctx *ctx, enum isl_error error) -{ - if (ctx) - ctx->error = error; -} - -void isl_ctx_abort(isl_ctx *ctx) -{ - if (ctx) - ctx->abort = 1; -} - -void isl_ctx_resume(isl_ctx *ctx) -{ - if (ctx) - ctx->abort = 0; -} - -int isl_ctx_aborted(isl_ctx *ctx) -{ - return ctx ? ctx->abort : -1; -} diff --git a/cloog-0.16.3/isl/isl_ctx_private.h b/cloog-0.16.3/isl/isl_ctx_private.h deleted file mode 100644 index a943b24..0000000 --- a/cloog-0.16.3/isl/isl_ctx_private.h +++ /dev/null @@ -1,28 +0,0 @@ -#include - -struct isl_ctx { - int ref; - - struct isl_stats *stats; - - int opt_allocated; - struct isl_options *opt; - void *user_opt; - struct isl_arg *user_arg; - - isl_int zero; - isl_int one; - isl_int two; - isl_int negone; - - isl_int normalize_gcd; - - int n_cached; - int n_miss; - struct isl_blk cache[ISL_BLK_CACHE_SIZE]; - struct isl_hash_table name_hash; - - enum isl_error error; - - int abort; -}; diff --git a/cloog-0.16.3/isl/isl_dim.c b/cloog-0.16.3/isl/isl_dim.c deleted file mode 100644 index 6aa67f0..0000000 --- a/cloog-0.16.3/isl/isl_dim.c +++ /dev/null @@ -1,1345 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include "isl_name.h" -#include - -isl_ctx *isl_dim_get_ctx(__isl_keep isl_dim *dim) -{ - return dim ? dim->ctx : NULL; -} - -struct isl_dim *isl_dim_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned n_in, unsigned n_out) -{ - struct isl_dim *dim; - - dim = isl_alloc_type(ctx, struct isl_dim); - if (!dim) - return NULL; - - dim->ctx = ctx; - isl_ctx_ref(ctx); - dim->ref = 1; - dim->nparam = nparam; - dim->n_in = n_in; - dim->n_out = n_out; - - dim->tuple_name[0] = NULL; - dim->tuple_name[1] = NULL; - - dim->nested[0] = NULL; - dim->nested[1] = NULL; - - dim->n_name = 0; - dim->names = NULL; - - return dim; -} - -struct isl_dim *isl_dim_set_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned dim) -{ - return isl_dim_alloc(ctx, nparam, 0, dim); -} - -static unsigned global_pos(struct isl_dim *dim, - enum isl_dim_type type, unsigned pos) -{ - struct isl_ctx *ctx = dim->ctx; - - switch (type) { - case isl_dim_param: - isl_assert(ctx, pos < dim->nparam, return isl_dim_total(dim)); - return pos; - case isl_dim_in: - isl_assert(ctx, pos < dim->n_in, return isl_dim_total(dim)); - return pos + dim->nparam; - case isl_dim_out: - isl_assert(ctx, pos < dim->n_out, return isl_dim_total(dim)); - return pos + dim->nparam + dim->n_in; - default: - isl_assert(ctx, 0, return isl_dim_total(dim)); - } - return isl_dim_total(dim); -} - -/* Extend length of names array to the total number of dimensions. - */ -static __isl_give isl_dim *extend_names(__isl_take isl_dim *dim) -{ - struct isl_name **names; - int i; - - if (isl_dim_total(dim) <= dim->n_name) - return dim; - - if (!dim->names) { - dim->names = isl_calloc_array(dim->ctx, - struct isl_name *, isl_dim_total(dim)); - if (!dim->names) - goto error; - } else { - names = isl_realloc_array(dim->ctx, dim->names, - struct isl_name *, isl_dim_total(dim)); - if (!names) - goto error; - dim->names = names; - for (i = dim->n_name; i < isl_dim_total(dim); ++i) - dim->names[i] = NULL; - } - - dim->n_name = isl_dim_total(dim); - - return dim; -error: - isl_dim_free(dim); - return NULL; -} - -static struct isl_dim *set_name(struct isl_dim *dim, - enum isl_dim_type type, unsigned pos, - struct isl_name *name) -{ - struct isl_ctx *ctx = dim->ctx; - dim = isl_dim_cow(dim); - - if (!dim) - goto error; - - pos = global_pos(dim, type, pos); - if (pos == isl_dim_total(dim)) - goto error; - - if (pos >= dim->n_name) { - if (!name) - return dim; - dim = extend_names(dim); - if (!dim) - goto error; - } - - dim->names[pos] = name; - - return dim; -error: - isl_name_free(ctx, name); - isl_dim_free(dim); - return NULL; -} - -static struct isl_name *get_name(struct isl_dim *dim, - enum isl_dim_type type, unsigned pos) -{ - if (!dim) - return NULL; - - pos = global_pos(dim, type, pos); - if (pos == isl_dim_total(dim)) - return NULL; - if (pos >= dim->n_name) - return NULL; - return dim->names[pos]; -} - -static unsigned offset(struct isl_dim *dim, enum isl_dim_type type) -{ - switch (type) { - case isl_dim_param: return 0; - case isl_dim_in: return dim->nparam; - case isl_dim_out: return dim->nparam + dim->n_in; - default: return 0; - } -} - -static unsigned n(struct isl_dim *dim, enum isl_dim_type type) -{ - switch (type) { - case isl_dim_param: return dim->nparam; - case isl_dim_in: return dim->n_in; - case isl_dim_out: return dim->n_out; - case isl_dim_all: return dim->nparam + dim->n_in + dim->n_out; - default: return 0; - } -} - -unsigned isl_dim_size(struct isl_dim *dim, enum isl_dim_type type) -{ - if (!dim) - return 0; - return n(dim, type); -} - -unsigned isl_dim_offset(__isl_keep isl_dim *dim, enum isl_dim_type type) -{ - if (!dim) - return 0; - return offset(dim, type); -} - -static struct isl_dim *copy_names(struct isl_dim *dst, - enum isl_dim_type dst_type, unsigned offset, struct isl_dim *src, - enum isl_dim_type src_type) -{ - int i; - struct isl_name *name; - - if (!dst) - return NULL; - - for (i = 0; i < n(src, src_type); ++i) { - name = get_name(src, src_type, i); - if (!name) - continue; - dst = set_name(dst, dst_type, offset + i, - isl_name_copy(dst->ctx, name)); - if (!dst) - return NULL; - } - return dst; -} - -struct isl_dim *isl_dim_dup(struct isl_dim *dim) -{ - struct isl_dim *dup; - if (!dim) - return NULL; - dup = isl_dim_alloc(dim->ctx, dim->nparam, dim->n_in, dim->n_out); - if (dim->tuple_name[0] && - !(dup->tuple_name[0] = isl_name_copy(dim->ctx, dim->tuple_name[0]))) - goto error; - if (dim->tuple_name[1] && - !(dup->tuple_name[1] = isl_name_copy(dim->ctx, dim->tuple_name[1]))) - goto error; - if (dim->nested[0] && !(dup->nested[0] = isl_dim_copy(dim->nested[0]))) - goto error; - if (dim->nested[1] && !(dup->nested[1] = isl_dim_copy(dim->nested[1]))) - goto error; - if (!dim->names) - return dup; - dup = copy_names(dup, isl_dim_param, 0, dim, isl_dim_param); - dup = copy_names(dup, isl_dim_in, 0, dim, isl_dim_in); - dup = copy_names(dup, isl_dim_out, 0, dim, isl_dim_out); - return dup; -error: - isl_dim_free(dup); - return NULL; -} - -struct isl_dim *isl_dim_cow(struct isl_dim *dim) -{ - if (!dim) - return NULL; - - if (dim->ref == 1) - return dim; - dim->ref--; - return isl_dim_dup(dim); -} - -struct isl_dim *isl_dim_copy(struct isl_dim *dim) -{ - if (!dim) - return NULL; - - dim->ref++; - return dim; -} - -void isl_dim_free(struct isl_dim *dim) -{ - int i; - - if (!dim) - return; - - if (--dim->ref > 0) - return; - - isl_name_free(dim->ctx, dim->tuple_name[0]); - isl_name_free(dim->ctx, dim->tuple_name[1]); - - isl_dim_free(dim->nested[0]); - isl_dim_free(dim->nested[1]); - - for (i = 0; i < dim->n_name; ++i) - isl_name_free(dim->ctx, dim->names[i]); - free(dim->names); - isl_ctx_deref(dim->ctx); - - free(dim); -} - -static int name_ok(isl_ctx *ctx, const char *s) -{ - char *p; - long dummy; - - dummy = strtol(s, &p, 0); - if (p != s) - isl_die(ctx, isl_error_invalid, "name looks like a number", - return 0); - - return 1; -} - -__isl_give isl_dim *isl_dim_set_tuple_name(__isl_take isl_dim *dim, - enum isl_dim_type type, const char *s) -{ - struct isl_name *name; - - dim = isl_dim_cow(dim); - if (!dim) - return NULL; - if (type != isl_dim_in && type != isl_dim_out) - isl_die(dim->ctx, isl_error_invalid, - "only input, output and set tuples can have names", - goto error); - if (!s) { - name = NULL; - } else { - if (!name_ok(dim->ctx, s)) - goto error; - name = isl_name_get(dim->ctx, s); - if (!name) - goto error; - } - - isl_name_free(dim->ctx, dim->tuple_name[type - isl_dim_in]); - dim->tuple_name[type - isl_dim_in] = name; - - return dim; -error: - isl_dim_free(dim); - return NULL; -} - -const char *isl_dim_get_tuple_name(__isl_keep isl_dim *dim, - enum isl_dim_type type) -{ - struct isl_name *name; - if (!dim) - return NULL; - if (type != isl_dim_in && type != isl_dim_out) - return NULL; - name = dim->tuple_name[type - isl_dim_in]; - return name ? name->name : NULL; -} - -struct isl_dim *isl_dim_set_name(struct isl_dim *dim, - enum isl_dim_type type, unsigned pos, - const char *s) -{ - struct isl_name *name; - - if (!dim) - return NULL; - if (!name_ok(dim->ctx, s)) - goto error; - isl_name_free(dim->ctx, get_name(dim, type, pos)); - name = isl_name_get(dim->ctx, s); - if (!name) - goto error; - return set_name(dim, type, pos, name); -error: - isl_dim_free(dim); - return NULL; -} - -const char *isl_dim_get_name(struct isl_dim *dim, - enum isl_dim_type type, unsigned pos) -{ - struct isl_name *name = get_name(dim, type, pos); - return name ? name->name : NULL; -} - -static struct isl_name *tuple_name(__isl_keep isl_dim *dim, - enum isl_dim_type type) -{ - if (!dim) - return NULL; - if (type == isl_dim_in) - return dim->tuple_name[0]; - if (type == isl_dim_out) - return dim->tuple_name[1]; - return NULL; -} - -static __isl_keep isl_dim *nested(__isl_keep isl_dim *dim, - enum isl_dim_type type) -{ - if (!dim) - return NULL; - if (type == isl_dim_in) - return dim->nested[0]; - if (type == isl_dim_out) - return dim->nested[1]; - return NULL; -} - -int isl_dim_tuple_match(__isl_keep isl_dim *dim1, enum isl_dim_type dim1_type, - __isl_keep isl_dim *dim2, enum isl_dim_type dim2_type) -{ - struct isl_name *name1, *name2; - isl_dim *nested1, *nested2; - - if (n(dim1, dim1_type) != n(dim2, dim2_type)) - return 0; - name1 = tuple_name(dim1, dim1_type); - name2 = tuple_name(dim2, dim2_type); - if (!name1 ^ !name2) - return 0; - if (name1 && name1->name != name2->name) - return 0; - nested1 = nested(dim1, dim1_type); - nested2 = nested(dim2, dim2_type); - if (!nested1 ^ !nested2) - return 0; - if (nested1 && !isl_dim_equal(nested1, nested2)) - return 0; - return 1; -} - -static int match(struct isl_dim *dim1, enum isl_dim_type dim1_type, - struct isl_dim *dim2, enum isl_dim_type dim2_type) -{ - int i; - - if (!isl_dim_tuple_match(dim1, dim1_type, dim2, dim2_type)) - return 0; - - if (!dim1->names && !dim2->names) - return 1; - - for (i = 0; i < n(dim1, dim1_type); ++i) { - if (get_name(dim1, dim1_type, i) != - get_name(dim2, dim2_type, i)) - return 0; - } - return 1; -} - -int isl_dim_match(struct isl_dim *dim1, enum isl_dim_type dim1_type, - struct isl_dim *dim2, enum isl_dim_type dim2_type) -{ - return match(dim1, dim1_type, dim2, dim2_type); -} - -static void get_names(struct isl_dim *dim, enum isl_dim_type type, - unsigned first, unsigned n, struct isl_name **names) -{ - int i; - - for (i = 0; i < n ; ++i) - names[i] = get_name(dim, type, first+i); -} - -struct isl_dim *isl_dim_extend(struct isl_dim *dim, - unsigned nparam, unsigned n_in, unsigned n_out) -{ - struct isl_name **names = NULL; - - if (!dim) - return NULL; - if (dim->nparam == nparam && dim->n_in == n_in && dim->n_out == n_out) - return dim; - - isl_assert(dim->ctx, dim->nparam <= nparam, goto error); - isl_assert(dim->ctx, dim->n_in <= n_in, goto error); - isl_assert(dim->ctx, dim->n_out <= n_out, goto error); - - dim = isl_dim_cow(dim); - - if (dim->names) { - names = isl_calloc_array(dim->ctx, struct isl_name *, - nparam + n_in + n_out); - if (!names) - goto error; - get_names(dim, isl_dim_param, 0, dim->nparam, names); - get_names(dim, isl_dim_in, 0, dim->n_in, names + nparam); - get_names(dim, isl_dim_out, 0, dim->n_out, - names + nparam + n_in); - free(dim->names); - dim->names = names; - dim->n_name = nparam + n_in + n_out; - } - dim->nparam = nparam; - dim->n_in = n_in; - dim->n_out = n_out; - - return dim; -error: - free(names); - isl_dim_free(dim); - return NULL; -} - -struct isl_dim *isl_dim_add(struct isl_dim *dim, enum isl_dim_type type, - unsigned n) -{ - if (!dim) - return NULL; - dim = isl_dim_reset(dim, type); - switch (type) { - case isl_dim_param: - dim = isl_dim_extend(dim, - dim->nparam + n, dim->n_in, dim->n_out); - if (dim && dim->nested[0] && - !(dim->nested[0] = isl_dim_add(dim->nested[0], - isl_dim_param, n))) - goto error; - if (dim && dim->nested[1] && - !(dim->nested[1] = isl_dim_add(dim->nested[1], - isl_dim_param, n))) - goto error; - return dim; - case isl_dim_in: - return isl_dim_extend(dim, - dim->nparam, dim->n_in + n, dim->n_out); - case isl_dim_out: - return isl_dim_extend(dim, - dim->nparam, dim->n_in, dim->n_out + n); - default: - isl_die(dim->ctx, isl_error_invalid, - "cannot add dimensions of specified type", goto error); - } -error: - isl_dim_free(dim); - return NULL; -} - -static int valid_dim_type(enum isl_dim_type type) -{ - switch (type) { - case isl_dim_param: - case isl_dim_in: - case isl_dim_out: - return 1; - default: - return 0; - } -} - -__isl_give isl_dim *isl_dim_insert(__isl_take isl_dim *dim, - enum isl_dim_type type, unsigned pos, unsigned n) -{ - struct isl_name **names = NULL; - - if (!dim) - return NULL; - if (n == 0) - return isl_dim_reset(dim, type); - - if (!valid_dim_type(type)) - isl_die(dim->ctx, isl_error_invalid, - "cannot insert dimensions of specified type", - goto error); - - isl_assert(dim->ctx, pos <= isl_dim_size(dim, type), goto error); - - dim = isl_dim_cow(dim); - if (!dim) - return NULL; - - if (dim->names) { - enum isl_dim_type t; - int off; - int s[3]; - int *size = s - isl_dim_param; - names = isl_calloc_array(dim->ctx, struct isl_name *, - dim->nparam + dim->n_in + dim->n_out + n); - if (!names) - goto error; - off = 0; - size[isl_dim_param] = dim->nparam; - size[isl_dim_in] = dim->n_in; - size[isl_dim_out] = dim->n_out; - for (t = isl_dim_param; t <= isl_dim_out; ++t) { - if (t != type) { - get_names(dim, t, 0, size[t], names + off); - off += size[t]; - } else { - get_names(dim, t, 0, pos, names + off); - off += pos + n; - get_names(dim, t, pos, size[t]-pos, names+off); - off += size[t] - pos; - } - } - free(dim->names); - dim->names = names; - dim->n_name = dim->nparam + dim->n_in + dim->n_out + n; - } - switch (type) { - case isl_dim_param: dim->nparam += n; break; - case isl_dim_in: dim->n_in += n; break; - case isl_dim_out: dim->n_out += n; break; - default: ; - } - dim = isl_dim_reset(dim, type); - - return dim; -error: - isl_dim_free(dim); - return NULL; -} - -__isl_give isl_dim *isl_dim_move(__isl_take isl_dim *dim, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - int i; - - if (!dim) - return NULL; - if (n == 0) - return dim; - - isl_assert(dim->ctx, src_pos + n <= isl_dim_size(dim, src_type), - goto error); - - if (dst_type == src_type && dst_pos == src_pos) - return dim; - - isl_assert(dim->ctx, dst_type != src_type, goto error); - - dim = isl_dim_reset(dim, src_type); - dim = isl_dim_reset(dim, dst_type); - - dim = isl_dim_cow(dim); - if (!dim) - return NULL; - - if (dim->names) { - struct isl_name **names; - enum isl_dim_type t; - int off; - int s[3]; - int *size = s - isl_dim_param; - names = isl_calloc_array(dim->ctx, struct isl_name *, - dim->nparam + dim->n_in + dim->n_out); - if (!names) - goto error; - off = 0; - size[isl_dim_param] = dim->nparam; - size[isl_dim_in] = dim->n_in; - size[isl_dim_out] = dim->n_out; - for (t = isl_dim_param; t <= isl_dim_out; ++t) { - if (t == dst_type) { - get_names(dim, t, 0, dst_pos, names + off); - off += dst_pos; - get_names(dim, src_type, src_pos, n, names+off); - off += n; - get_names(dim, t, dst_pos, size[t] - dst_pos, - names + off); - off += size[t] - dst_pos; - } else if (t == src_type) { - get_names(dim, t, 0, src_pos, names + off); - off += src_pos; - get_names(dim, t, src_pos + n, - size[t] - src_pos - n, names + off); - off += size[t] - src_pos - n; - } else { - get_names(dim, t, 0, size[t], names + off); - off += size[t]; - } - } - free(dim->names); - dim->names = names; - dim->n_name = dim->nparam + dim->n_in + dim->n_out; - } - - switch (dst_type) { - case isl_dim_param: dim->nparam += n; break; - case isl_dim_in: dim->n_in += n; break; - case isl_dim_out: dim->n_out += n; break; - default: ; - } - - switch (src_type) { - case isl_dim_param: dim->nparam -= n; break; - case isl_dim_in: dim->n_in -= n; break; - case isl_dim_out: dim->n_out -= n; break; - default: ; - } - - if (dst_type != isl_dim_param && src_type != isl_dim_param) - return dim; - - for (i = 0; i < 2; ++i) { - if (!dim->nested[i]) - continue; - dim->nested[i] = isl_dim_replace(dim->nested[i], - isl_dim_param, dim); - if (!dim->nested[i]) - goto error; - } - - return dim; -error: - isl_dim_free(dim); - return NULL; -} - -struct isl_dim *isl_dim_join(struct isl_dim *left, struct isl_dim *right) -{ - struct isl_dim *dim; - - if (!left || !right) - goto error; - - isl_assert(left->ctx, match(left, isl_dim_param, right, isl_dim_param), - goto error); - isl_assert(left->ctx, - isl_dim_tuple_match(left, isl_dim_out, right, isl_dim_in), - goto error); - - dim = isl_dim_alloc(left->ctx, left->nparam, left->n_in, right->n_out); - if (!dim) - goto error; - - dim = copy_names(dim, isl_dim_param, 0, left, isl_dim_param); - dim = copy_names(dim, isl_dim_in, 0, left, isl_dim_in); - dim = copy_names(dim, isl_dim_out, 0, right, isl_dim_out); - - if (dim && left->tuple_name[0] && - !(dim->tuple_name[0] = isl_name_copy(dim->ctx, left->tuple_name[0]))) - goto error; - if (dim && right->tuple_name[1] && - !(dim->tuple_name[1] = isl_name_copy(dim->ctx, right->tuple_name[1]))) - goto error; - if (dim && left->nested[0] && - !(dim->nested[0] = isl_dim_copy(left->nested[0]))) - goto error; - if (dim && right->nested[1] && - !(dim->nested[1] = isl_dim_copy(right->nested[1]))) - goto error; - - isl_dim_free(left); - isl_dim_free(right); - - return dim; -error: - isl_dim_free(left); - isl_dim_free(right); - return NULL; -} - -struct isl_dim *isl_dim_product(struct isl_dim *left, struct isl_dim *right) -{ - isl_dim *dom1, *dom2, *nest1, *nest2; - - if (!left || !right) - goto error; - - isl_assert(left->ctx, match(left, isl_dim_param, right, isl_dim_param), - goto error); - - dom1 = isl_dim_domain(isl_dim_copy(left)); - dom2 = isl_dim_domain(isl_dim_copy(right)); - nest1 = isl_dim_wrap(isl_dim_join(isl_dim_reverse(dom1), dom2)); - - dom1 = isl_dim_range(left); - dom2 = isl_dim_range(right); - nest2 = isl_dim_wrap(isl_dim_join(isl_dim_reverse(dom1), dom2)); - - return isl_dim_join(isl_dim_reverse(nest1), nest2); -error: - isl_dim_free(left); - isl_dim_free(right); - return NULL; -} - -__isl_give isl_dim *isl_dim_range_product(__isl_take isl_dim *left, - __isl_take isl_dim *right) -{ - isl_dim *dom, *ran1, *ran2, *nest; - - if (!left || !right) - goto error; - - isl_assert(left->ctx, match(left, isl_dim_param, right, isl_dim_param), - goto error); - if (!isl_dim_match(left, isl_dim_in, right, isl_dim_in)) - isl_die(left->ctx, isl_error_invalid, - "domains need to match", goto error); - - dom = isl_dim_domain(isl_dim_copy(left)); - - ran1 = isl_dim_range(left); - ran2 = isl_dim_range(right); - nest = isl_dim_wrap(isl_dim_join(isl_dim_reverse(ran1), ran2)); - - return isl_dim_join(isl_dim_reverse(dom), nest); -error: - isl_dim_free(left); - isl_dim_free(right); - return NULL; -} - -__isl_give isl_dim *isl_dim_map_from_set(__isl_take isl_dim *dim) -{ - struct isl_name **names = NULL; - - if (!dim) - return NULL; - isl_assert(dim->ctx, dim->n_in == 0, goto error); - if (dim->n_out == 0 && !isl_dim_is_named_or_nested(dim, isl_dim_out)) - return dim; - dim = isl_dim_cow(dim); - if (!dim) - return NULL; - if (dim->names) { - names = isl_calloc_array(dim->ctx, struct isl_name *, - dim->nparam + dim->n_out + dim->n_out); - if (!names) - goto error; - get_names(dim, isl_dim_param, 0, dim->nparam, names); - get_names(dim, isl_dim_out, 0, dim->n_out, names + dim->nparam); - } - dim->n_in = dim->n_out; - if (names) { - free(dim->names); - dim->names = names; - dim->n_name = dim->nparam + dim->n_out + dim->n_out; - dim = copy_names(dim, isl_dim_out, 0, dim, isl_dim_in); - } - isl_name_free(dim->ctx, dim->tuple_name[0]); - dim->tuple_name[0] = isl_name_copy(dim->ctx, dim->tuple_name[1]); - isl_dim_free(dim->nested[0]); - dim->nested[0] = isl_dim_copy(dim->nested[1]); - return dim; -error: - isl_dim_free(dim); - return NULL; -} - -static struct isl_dim *set_names(struct isl_dim *dim, enum isl_dim_type type, - unsigned first, unsigned n, struct isl_name **names) -{ - int i; - - for (i = 0; i < n ; ++i) - dim = set_name(dim, type, first+i, names[i]); - - return dim; -} - -struct isl_dim *isl_dim_reverse(struct isl_dim *dim) -{ - unsigned t; - isl_dim *nested; - struct isl_name **names = NULL; - struct isl_name *name; - - if (!dim) - return NULL; - if (match(dim, isl_dim_in, dim, isl_dim_out)) - return dim; - - dim = isl_dim_cow(dim); - if (!dim) - return NULL; - - name = dim->tuple_name[0]; - dim->tuple_name[0] = dim->tuple_name[1]; - dim->tuple_name[1] = name; - - nested = dim->nested[0]; - dim->nested[0] = dim->nested[1]; - dim->nested[1] = nested; - - if (dim->names) { - names = isl_alloc_array(dim->ctx, struct isl_name *, - dim->n_in + dim->n_out); - if (!names) - goto error; - get_names(dim, isl_dim_in, 0, dim->n_in, names); - get_names(dim, isl_dim_out, 0, dim->n_out, names + dim->n_in); - } - - t = dim->n_in; - dim->n_in = dim->n_out; - dim->n_out = t; - - if (dim->names) { - dim = set_names(dim, isl_dim_out, 0, dim->n_out, names); - dim = set_names(dim, isl_dim_in, 0, dim->n_in, names + dim->n_out); - free(names); - } - - return dim; -error: - free(names); - isl_dim_free(dim); - return NULL; -} - -struct isl_dim *isl_dim_drop(struct isl_dim *dim, enum isl_dim_type type, - unsigned first, unsigned num) -{ - int i; - - if (!dim) - return NULL; - - if (num == 0) - return isl_dim_reset(dim, type); - - if (!valid_dim_type(type)) - isl_die(dim->ctx, isl_error_invalid, - "cannot drop dimensions of specified type", goto error); - - isl_assert(dim->ctx, first + num <= n(dim, type), goto error); - dim = isl_dim_cow(dim); - if (!dim) - goto error; - if (dim->names) { - dim = extend_names(dim); - if (!dim) - goto error; - for (i = 0; i < num; ++i) - isl_name_free(dim->ctx, get_name(dim, type, first+i)); - for (i = first+num; i < n(dim, type); ++i) - set_name(dim, type, i - num, get_name(dim, type, i)); - switch (type) { - case isl_dim_param: - get_names(dim, isl_dim_in, 0, dim->n_in, - dim->names + offset(dim, isl_dim_in) - num); - case isl_dim_in: - get_names(dim, isl_dim_out, 0, dim->n_out, - dim->names + offset(dim, isl_dim_out) - num); - default: - ; - } - dim->n_name -= num; - } - switch (type) { - case isl_dim_param: dim->nparam -= num; break; - case isl_dim_in: dim->n_in -= num; break; - case isl_dim_out: dim->n_out -= num; break; - default: ; - } - dim = isl_dim_reset(dim, type); - if (type == isl_dim_param) { - if (dim && dim->nested[0] && - !(dim->nested[0] = isl_dim_drop(dim->nested[0], - isl_dim_param, first, num))) - goto error; - if (dim && dim->nested[1] && - !(dim->nested[1] = isl_dim_drop(dim->nested[1], - isl_dim_param, first, num))) - goto error; - } - return dim; -error: - isl_dim_free(dim); - return NULL; -} - -struct isl_dim *isl_dim_drop_inputs(struct isl_dim *dim, - unsigned first, unsigned n) -{ - if (!dim) - return NULL; - return isl_dim_drop(dim, isl_dim_in, first, n); -} - -struct isl_dim *isl_dim_drop_outputs(struct isl_dim *dim, - unsigned first, unsigned n) -{ - if (!dim) - return NULL; - return isl_dim_drop(dim, isl_dim_out, first, n); -} - -struct isl_dim *isl_dim_domain(struct isl_dim *dim) -{ - if (!dim) - return NULL; - dim = isl_dim_drop_outputs(dim, 0, dim->n_out); - return isl_dim_reverse(dim); -} - -__isl_give isl_dim *isl_dim_from_domain(__isl_take isl_dim *dim) -{ - return isl_dim_reverse(dim); -} - -struct isl_dim *isl_dim_range(struct isl_dim *dim) -{ - if (!dim) - return NULL; - return isl_dim_drop_inputs(dim, 0, dim->n_in); -} - -__isl_give isl_dim *isl_dim_from_range(__isl_take isl_dim *dim) -{ - return dim; -} - -__isl_give isl_dim *isl_dim_as_set_dim(__isl_take isl_dim *dim) -{ - dim = isl_dim_cow(dim); - if (!dim) - return NULL; - - dim->n_out += dim->n_in; - dim->n_in = 0; - dim = isl_dim_reset(dim, isl_dim_in); - dim = isl_dim_reset(dim, isl_dim_out); - - return dim; -} - -struct isl_dim *isl_dim_underlying(struct isl_dim *dim, unsigned n_div) -{ - int i; - - if (!dim) - return NULL; - if (n_div == 0 && - dim->nparam == 0 && dim->n_in == 0 && dim->n_name == 0) - return isl_dim_reset(isl_dim_reset(dim, isl_dim_in), isl_dim_out); - dim = isl_dim_cow(dim); - if (!dim) - return NULL; - dim->n_out += dim->nparam + dim->n_in + n_div; - dim->nparam = 0; - dim->n_in = 0; - - for (i = 0; i < dim->n_name; ++i) - isl_name_free(dim->ctx, get_name(dim, isl_dim_out, i)); - dim->n_name = 0; - dim = isl_dim_reset(dim, isl_dim_in); - dim = isl_dim_reset(dim, isl_dim_out); - - return dim; -} - -unsigned isl_dim_total(struct isl_dim *dim) -{ - return dim ? dim->nparam + dim->n_in + dim->n_out : 0; -} - -int isl_dim_equal(struct isl_dim *dim1, struct isl_dim *dim2) -{ - return match(dim1, isl_dim_param, dim2, isl_dim_param) && - isl_dim_tuple_match(dim1, isl_dim_in, dim2, isl_dim_in) && - isl_dim_tuple_match(dim1, isl_dim_out, dim2, isl_dim_out); -} - -int isl_dim_compatible(struct isl_dim *dim1, struct isl_dim *dim2) -{ - return dim1->nparam == dim2->nparam && - dim1->n_in + dim1->n_out == dim2->n_in + dim2->n_out; -} - -static uint32_t isl_hash_dim(uint32_t hash, __isl_keep isl_dim *dim) -{ - int i; - struct isl_name *name; - - if (!dim) - return hash; - - hash = isl_hash_builtin(hash, dim->nparam); - hash = isl_hash_builtin(hash, dim->n_in); - hash = isl_hash_builtin(hash, dim->n_out); - - for (i = 0; i < dim->nparam; ++i) { - name = get_name(dim, isl_dim_param, i); - hash = isl_hash_name(hash, name); - } - - name = tuple_name(dim, isl_dim_in); - hash = isl_hash_name(hash, name); - name = tuple_name(dim, isl_dim_out); - hash = isl_hash_name(hash, name); - - hash = isl_hash_dim(hash, dim->nested[0]); - hash = isl_hash_dim(hash, dim->nested[1]); - - return hash; -} - -uint32_t isl_dim_get_hash(__isl_keep isl_dim *dim) -{ - uint32_t hash; - - if (!dim) - return 0; - - hash = isl_hash_init(); - hash = isl_hash_dim(hash, dim); - - return hash; -} - -int isl_dim_is_wrapping(__isl_keep isl_dim *dim) -{ - if (!dim) - return -1; - - if (dim->n_in != 0 || dim->tuple_name[0] || dim->nested[0]) - return 0; - - return dim->nested[1] != NULL; -} - -__isl_give isl_dim *isl_dim_wrap(__isl_take isl_dim *dim) -{ - isl_dim *wrap; - - if (!dim) - return NULL; - - wrap = isl_dim_alloc(dim->ctx, dim->nparam, 0, dim->n_in + dim->n_out); - - wrap = copy_names(wrap, isl_dim_param, 0, dim, isl_dim_param); - wrap = copy_names(wrap, isl_dim_set, 0, dim, isl_dim_in); - wrap = copy_names(wrap, isl_dim_set, dim->n_in, dim, isl_dim_out); - - if (!wrap) - goto error; - - wrap->nested[1] = dim; - - return wrap; -error: - isl_dim_free(dim); - return NULL; -} - -__isl_give isl_dim *isl_dim_unwrap(__isl_take isl_dim *dim) -{ - isl_dim *unwrap; - - if (!dim) - return NULL; - - if (!isl_dim_is_wrapping(dim)) - isl_die(dim->ctx, isl_error_invalid, "not a wrapping dim", - goto error); - - unwrap = isl_dim_copy(dim->nested[1]); - isl_dim_free(dim); - - return unwrap; -error: - isl_dim_free(dim); - return NULL; -} - -int isl_dim_is_named_or_nested(__isl_keep isl_dim *dim, enum isl_dim_type type) -{ - if (type != isl_dim_in && type != isl_dim_out) - return 0; - if (!dim) - return -1; - if (dim->tuple_name[type - isl_dim_in]) - return 1; - if (dim->nested[type - isl_dim_in]) - return 1; - return 0; -} - -int isl_dim_may_be_set(__isl_keep isl_dim *dim) -{ - if (!dim) - return -1; - if (isl_dim_size(dim, isl_dim_in) != 0) - return 0; - if (isl_dim_is_named_or_nested(dim, isl_dim_in)) - return 0; - return 1; -} - -__isl_give isl_dim *isl_dim_reset(__isl_take isl_dim *dim, - enum isl_dim_type type) -{ - if (!isl_dim_is_named_or_nested(dim, type)) - return dim; - - dim = isl_dim_cow(dim); - if (!dim) - return NULL; - - isl_name_free(dim->ctx, dim->tuple_name[type - isl_dim_in]); - dim->tuple_name[type - isl_dim_in] = NULL; - isl_dim_free(dim->nested[type - isl_dim_in]); - dim->nested[type - isl_dim_in] = NULL; - - return dim; -} - -__isl_give isl_dim *isl_dim_flatten(__isl_take isl_dim *dim) -{ - if (!dim) - return NULL; - if (!dim->nested[0] && !dim->nested[1]) - return dim; - - if (dim->nested[0]) - dim = isl_dim_reset(dim, isl_dim_in); - if (dim && dim->nested[1]) - dim = isl_dim_reset(dim, isl_dim_out); - - return dim; -} - -__isl_give isl_dim *isl_dim_flatten_range(__isl_take isl_dim *dim) -{ - if (!dim) - return NULL; - if (!dim->nested[1]) - return dim; - - return isl_dim_reset(dim, isl_dim_out); -} - -/* Replace the dimensions of the given type of dst by those of src. - */ -__isl_give isl_dim *isl_dim_replace(__isl_take isl_dim *dst, - enum isl_dim_type type, __isl_keep isl_dim *src) -{ - dst = isl_dim_cow(dst); - - if (!dst || !src) - goto error; - - dst = isl_dim_drop(dst, type, 0, isl_dim_size(dst, type)); - dst = isl_dim_add(dst, type, isl_dim_size(src, type)); - dst = copy_names(dst, type, 0, src, type); - - if (dst && type == isl_dim_param) { - int i; - for (i = 0; i <= 1; ++i) { - if (!dst->nested[i]) - continue; - dst->nested[i] = isl_dim_replace(dst->nested[i], - type, src); - if (!dst->nested[i]) - goto error; - } - } - - return dst; -error: - isl_dim_free(dst); - return NULL; -} - -/* Given a dimension specification "dim" of a set, create a dimension - * specification for the lift of the set. In particular, the result - * is of the form [dim -> local[..]], with n_local variables in the - * range of the wrapped map. - */ -__isl_give isl_dim *isl_dim_lift(__isl_take isl_dim *dim, unsigned n_local) -{ - isl_dim *local_dim; - - if (!dim) - return NULL; - - local_dim = isl_dim_dup(dim); - local_dim = isl_dim_drop(local_dim, isl_dim_set, 0, dim->n_out); - local_dim = isl_dim_add(local_dim, isl_dim_set, n_local); - local_dim = isl_dim_set_tuple_name(local_dim, isl_dim_set, "local"); - dim = isl_dim_join(isl_dim_from_domain(dim), - isl_dim_from_range(local_dim)); - dim = isl_dim_wrap(dim); - dim = isl_dim_set_tuple_name(dim, isl_dim_set, "lifted"); - - return dim; -} - -int isl_dim_can_zip(__isl_keep isl_dim *dim) -{ - if (!dim) - return -1; - - return dim->nested[0] && dim->nested[1]; -} - -__isl_give isl_dim *isl_dim_zip(__isl_take isl_dim *dim) -{ - isl_dim *dom, *ran; - isl_dim *dom_dom, *dom_ran, *ran_dom, *ran_ran; - - if (!isl_dim_can_zip(dim)) - isl_die(dim->ctx, isl_error_invalid, "dim cannot be zipped", - goto error); - - if (!dim) - return 0; - dom = isl_dim_unwrap(isl_dim_domain(isl_dim_copy(dim))); - ran = isl_dim_unwrap(isl_dim_range(dim)); - dom_dom = isl_dim_domain(isl_dim_copy(dom)); - dom_ran = isl_dim_range(dom); - ran_dom = isl_dim_domain(isl_dim_copy(ran)); - ran_ran = isl_dim_range(ran); - dom = isl_dim_join(isl_dim_from_domain(dom_dom), - isl_dim_from_range(ran_dom)); - ran = isl_dim_join(isl_dim_from_domain(dom_ran), - isl_dim_from_range(ran_ran)); - return isl_dim_join(isl_dim_from_domain(isl_dim_wrap(dom)), - isl_dim_from_range(isl_dim_wrap(ran))); -error: - isl_dim_free(dim); - return NULL; -} - -int isl_dim_has_named_params(__isl_keep isl_dim *dim) -{ - int i; - unsigned off; - - if (!dim) - return -1; - if (dim->nparam == 0) - return 1; - off = isl_dim_offset(dim, isl_dim_param); - if (off + dim->nparam > dim->n_name) - return 0; - for (i = 0; i < dim->nparam; ++i) - if (!dim->names[off + i]) - return 0; - return 1; -} - -/* Align the initial parameters of dim1 to match the order in dim2. - */ -__isl_give isl_dim *isl_dim_align_params(__isl_take isl_dim *dim1, - __isl_take isl_dim *dim2) -{ - isl_reordering *exp; - - if (!isl_dim_has_named_params(dim1) || !isl_dim_has_named_params(dim2)) - isl_die(isl_dim_get_ctx(dim1), isl_error_invalid, - "parameter alignment requires named parameters", - goto error); - - exp = isl_parameter_alignment_reordering(dim1, dim2); - isl_dim_free(dim1); - isl_dim_free(dim2); - if (!exp) - return NULL; - dim1 = isl_dim_copy(exp->dim); - isl_reordering_free(exp); - return dim1; -error: - isl_dim_free(dim1); - isl_dim_free(dim2); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_dim_map.c b/cloog-0.16.3/isl/isl_dim_map.c deleted file mode 100644 index ab3d303..0000000 --- a/cloog-0.16.3/isl/isl_dim_map.c +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010-2011 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include - -struct isl_dim_map_entry { - int pos; - int sgn; -}; - -/* Maps dst positions to src positions */ -struct isl_dim_map { - unsigned len; - struct isl_dim_map_entry m[1]; -}; - -__isl_give isl_dim_map *isl_dim_map_alloc(isl_ctx *ctx, unsigned len) -{ - int i; - struct isl_dim_map *dim_map; - dim_map = isl_alloc(ctx, struct isl_dim_map, - sizeof(struct isl_dim_map) + len * sizeof(struct isl_dim_map_entry)); - if (!dim_map) - return NULL; - dim_map->len = 1 + len; - dim_map->m[0].pos = 0; - dim_map->m[0].sgn = 1; - for (i = 0; i < len; ++i) - dim_map->m[1 + i].sgn = 0; - return dim_map; -} - -void isl_dim_map_range(__isl_keep isl_dim_map *dim_map, - unsigned dst_pos, unsigned dst_stride, - unsigned src_pos, unsigned src_stride, - unsigned n, int sign) -{ - int i; - - if (!dim_map) - return; - - for (i = 0; i < n; ++i) { - unsigned d = 1 + dst_pos + dst_stride * i; - unsigned s = 1 + src_pos + src_stride * i; - dim_map->m[d].pos = s; - dim_map->m[d].sgn = sign; - } -} - -void isl_dim_map_dim_range(__isl_keep isl_dim_map *dim_map, - struct isl_dim *dim, enum isl_dim_type type, - unsigned first, unsigned n, unsigned dst_pos) -{ - int i; - unsigned src_pos; - - if (!dim_map || !dim) - return; - - src_pos = 1 + isl_dim_offset(dim, type); - for (i = 0; i < n; ++i) { - dim_map->m[1 + dst_pos + i].pos = src_pos + first + i; - dim_map->m[1 + dst_pos + i].sgn = 1; - } -} - -void isl_dim_map_dim(__isl_keep isl_dim_map *dim_map, __isl_keep isl_dim *dim, - enum isl_dim_type type, unsigned dst_pos) -{ - isl_dim_map_dim_range(dim_map, dim, type, - 0, isl_dim_size(dim, type), dst_pos); -} - -void isl_dim_map_div(__isl_keep isl_dim_map *dim_map, - __isl_keep isl_basic_map *bmap, unsigned dst_pos) -{ - int i; - unsigned src_pos; - - if (!dim_map || !bmap) - return; - - src_pos = 1 + isl_dim_total(bmap->dim); - for (i = 0; i < bmap->n_div; ++i) { - dim_map->m[1 + dst_pos + i].pos = src_pos + i; - dim_map->m[1 + dst_pos + i].sgn = 1; - } -} - -void isl_dim_map_dump(struct isl_dim_map *dim_map) -{ - int i; - - for (i = 0; i < dim_map->len; ++i) - fprintf(stderr, "%d -> %d * %d; ", i, - dim_map->m[i].sgn, dim_map->m[i].pos); - fprintf(stderr, "\n"); -} - -static void copy_constraint_dim_map(isl_int *dst, isl_int *src, - struct isl_dim_map *dim_map) -{ - int i; - - for (i = 0; i < dim_map->len; ++i) { - if (dim_map->m[i].sgn == 0) - isl_int_set_si(dst[i], 0); - else if (dim_map->m[i].sgn > 0) - isl_int_set(dst[i], src[dim_map->m[i].pos]); - else - isl_int_neg(dst[i], src[dim_map->m[i].pos]); - } -} - -static void copy_div_dim_map(isl_int *dst, isl_int *src, - struct isl_dim_map *dim_map) -{ - isl_int_set(dst[0], src[0]); - copy_constraint_dim_map(dst+1, src+1, dim_map); -} - -__isl_give isl_basic_map *isl_basic_map_add_constraints_dim_map( - __isl_take isl_basic_map *dst, __isl_take isl_basic_map *src, - __isl_take isl_dim_map *dim_map) -{ - int i; - - if (!src || !dst || !dim_map) - goto error; - - for (i = 0; i < src->n_eq; ++i) { - int i1 = isl_basic_map_alloc_equality(dst); - if (i1 < 0) - goto error; - copy_constraint_dim_map(dst->eq[i1], src->eq[i], dim_map); - } - - for (i = 0; i < src->n_ineq; ++i) { - int i1 = isl_basic_map_alloc_inequality(dst); - if (i1 < 0) - goto error; - copy_constraint_dim_map(dst->ineq[i1], src->ineq[i], dim_map); - } - - for (i = 0; i < src->n_div; ++i) { - int i1 = isl_basic_map_alloc_div(dst); - if (i1 < 0) - goto error; - copy_div_dim_map(dst->div[i1], src->div[i], dim_map); - } - - free(dim_map); - isl_basic_map_free(src); - - return dst; -error: - free(dim_map); - isl_basic_map_free(src); - isl_basic_map_free(dst); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_add_constraints_dim_map( - __isl_take isl_basic_set *dst, __isl_take isl_basic_set *src, - __isl_take isl_dim_map *dim_map) -{ - return isl_basic_map_add_constraints_dim_map(dst, src, dim_map); -} - -/* Extend the given dim_map with mappings for the divs in bmap. - */ -__isl_give isl_dim_map *isl_dim_map_extend(__isl_keep isl_dim_map *dim_map, - __isl_keep isl_basic_map *bmap) -{ - int i; - struct isl_dim_map *res; - int offset; - - offset = isl_basic_map_offset(bmap, isl_dim_div); - - res = isl_dim_map_alloc(bmap->ctx, dim_map->len - 1 + bmap->n_div); - if (!res) - return NULL; - - for (i = 0; i < dim_map->len; ++i) - res->m[i] = dim_map->m[i]; - for (i = 0; i < bmap->n_div; ++i) { - res->m[dim_map->len + i].pos = offset + i; - res->m[dim_map->len + i].sgn = 1; - } - - return res; -} - -/* Extract a dim_map from a reordering. - * We essentially need to reverse the mapping, and add an offset - * of 1 for the constant term. - */ -__isl_give isl_dim_map *isl_dim_map_from_reordering( - __isl_keep isl_reordering *exp) -{ - int i; - isl_ctx *ctx; - struct isl_dim_map *dim_map; - - if (!exp) - return NULL; - - ctx = isl_dim_get_ctx(exp->dim); - dim_map = isl_dim_map_alloc(ctx, isl_dim_total(exp->dim)); - if (!dim_map) - return NULL; - - for (i = 0; i < exp->len; ++i) { - dim_map->m[1 + exp->pos[i]].pos = 1 + i; - dim_map->m[1 + exp->pos[i]].sgn = 1; - } - - return dim_map; -} diff --git a/cloog-0.16.3/isl/isl_dim_map.h b/cloog-0.16.3/isl/isl_dim_map.h deleted file mode 100644 index 0dcdc73..0000000 --- a/cloog-0.16.3/isl/isl_dim_map.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef ISL_DIM_MAP_H -#define ISL_DIM_MAP_H - -#include -#include -#include - -struct isl_dim_map; -typedef struct isl_dim_map isl_dim_map; - -__isl_give isl_dim_map *isl_dim_map_alloc(isl_ctx *ctx, unsigned len); -void isl_dim_map_range(__isl_keep isl_dim_map *dim_map, - unsigned dst_pos, unsigned dst_stride, - unsigned src_pos, unsigned src_stride, - unsigned n, int sign); -void isl_dim_map_dim_range(__isl_keep isl_dim_map *dim_map, - struct isl_dim *dim, enum isl_dim_type type, - unsigned first, unsigned n, unsigned dst_pos); -void isl_dim_map_dim(__isl_keep isl_dim_map *dim_map, __isl_keep isl_dim *dim, - enum isl_dim_type type, unsigned dst_pos); -void isl_dim_map_div(__isl_keep isl_dim_map *dim_map, - __isl_keep isl_basic_map *bmap, unsigned dst_pos); -__isl_give isl_basic_set *isl_basic_set_add_constraints_dim_map( - __isl_take isl_basic_set *dst, __isl_take isl_basic_set *src, - __isl_take isl_dim_map *dim_map); -__isl_give isl_basic_map *isl_basic_map_add_constraints_dim_map( - __isl_take isl_basic_map *dst, __isl_take isl_basic_map *src, - __isl_take isl_dim_map *dim_map); - -__isl_give isl_dim_map *isl_dim_map_extend(__isl_keep isl_dim_map *dim_map, - __isl_keep isl_basic_map *bmap); - -__isl_give isl_dim_map *isl_dim_map_from_reordering( - __isl_keep isl_reordering *exp); - -#endif diff --git a/cloog-0.16.3/isl/isl_dim_private.h b/cloog-0.16.3/isl/isl_dim_private.h deleted file mode 100644 index c9e5ca8..0000000 --- a/cloog-0.16.3/isl/isl_dim_private.h +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include - -struct isl_name; -struct isl_dim { - int ref; - - struct isl_ctx *ctx; - - unsigned nparam; - unsigned n_in; /* zero for sets */ - unsigned n_out; /* dim for sets */ - - struct isl_name *tuple_name[2]; - struct isl_dim *nested[2]; - - unsigned n_name; - struct isl_name **names; -}; - -uint32_t isl_dim_get_hash(__isl_keep isl_dim *dim); - -__isl_give isl_dim *isl_dim_as_set_dim(__isl_take isl_dim *dim); - -unsigned isl_dim_offset(__isl_keep isl_dim *dim, enum isl_dim_type type); - -int isl_dim_may_be_set(__isl_keep isl_dim *dim); -int isl_dim_is_named_or_nested(__isl_keep isl_dim *dim, enum isl_dim_type type); -int isl_dim_has_named_params(__isl_keep isl_dim *dim); -__isl_give isl_dim *isl_dim_reset(__isl_take isl_dim *dim, - enum isl_dim_type type); -__isl_give isl_dim *isl_dim_flatten(__isl_take isl_dim *dim); -__isl_give isl_dim *isl_dim_flatten_range(__isl_take isl_dim *dim); - -__isl_give isl_dim *isl_dim_replace(__isl_take isl_dim *dst, - enum isl_dim_type type, __isl_keep isl_dim *src); - -__isl_give isl_dim *isl_dim_lift(__isl_take isl_dim *dim, unsigned n_local); diff --git a/cloog-0.16.3/isl/isl_div.c b/cloog-0.16.3/isl/isl_div.c deleted file mode 100644 index a04646f..0000000 --- a/cloog-0.16.3/isl/isl_div.c +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include -#include - -isl_ctx *isl_div_get_ctx(__isl_keep isl_div *div) -{ - return div ? div->ctx : NULL; -} - -static unsigned n(struct isl_div *d, enum isl_dim_type type) -{ - struct isl_dim *dim = d->bmap->dim; - switch (type) { - case isl_dim_param: return dim->nparam; - case isl_dim_in: return dim->n_in; - case isl_dim_out: return dim->n_out; - case isl_dim_div: return d->bmap->n_div; - default: return 0; - } -} - -unsigned isl_div_dim(__isl_keep isl_div *div, enum isl_dim_type type) -{ - return n(div, type); -} - -static unsigned offset(struct isl_div *d, enum isl_dim_type type) -{ - struct isl_dim *dim = d->bmap->dim; - switch (type) { - case isl_dim_param: return 1 + 1; - case isl_dim_in: return 1 + 1 + dim->nparam; - case isl_dim_out: return 1 + 1 + dim->nparam + dim->n_in; - case isl_dim_div: return 1 + 1 + dim->nparam + dim->n_in + dim->n_out; - default: return 0; - } -} - -struct isl_div *isl_basic_map_div(struct isl_basic_map *bmap, int pos) -{ - struct isl_div *div; - - if (!bmap) - goto error; - - isl_assert(bmap->ctx, pos < bmap->n_div, goto error); - - div = isl_alloc_type(bmap->ctx, struct isl_div); - if (!div) - goto error; - - div->ctx = bmap->ctx; - isl_ctx_ref(div->ctx); - div->ref = 1; - div->bmap = bmap; - div->line = &bmap->div[pos]; - - return div; -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_div *isl_basic_set_div(struct isl_basic_set *bset, int pos) -{ - return isl_basic_map_div((struct isl_basic_map *)bset, pos); -} - -__isl_give isl_div *isl_div_div(__isl_take isl_div *div, int pos) -{ - isl_basic_map *bmap; - if (!div) - return NULL; - bmap = isl_basic_map_copy(div->bmap); - isl_div_free(div); - return isl_basic_map_div(bmap, pos); -} - -struct isl_div *isl_div_alloc(struct isl_dim *dim) -{ - struct isl_basic_map *bmap; - - if (!dim) - return NULL; - - bmap = isl_basic_map_alloc_dim(dim, 1, 0, 0); - if (!bmap) - return NULL; - - isl_basic_map_alloc_div(bmap); - isl_seq_clr(bmap->div[0], 1 + 1 + isl_basic_map_total_dim(bmap)); - return isl_basic_map_div(bmap, 0); -} - -__isl_give isl_div *isl_div_copy(__isl_keep isl_div *div) -{ - if (!div) - return NULL; - - div->ref++; - return div; -} - -void isl_div_free(struct isl_div *c) -{ - if (!c) - return; - - if (--c->ref > 0) - return; - - isl_basic_map_free(c->bmap); - isl_ctx_deref(c->ctx); - free(c); -} - -void isl_div_get_constant(struct isl_div *div, isl_int *v) -{ - if (!div) - return; - isl_int_set(*v, div->line[0][1]); -} - -void isl_div_get_denominator(struct isl_div *div, isl_int *v) -{ - if (!div) - return; - isl_int_set(*v, div->line[0][0]); -} - -void isl_div_get_coefficient(struct isl_div *div, - enum isl_dim_type type, int pos, isl_int *v) -{ - if (!div) - return; - - isl_assert(div->ctx, pos < n(div, type), return); - isl_int_set(*v, div->line[0][offset(div, type) + pos]); -} - -void isl_div_set_constant(struct isl_div *div, isl_int v) -{ - if (!div) - return; - isl_int_set(div->line[0][1], v); -} - -void isl_div_set_denominator(struct isl_div *div, isl_int v) -{ - if (!div) - return; - isl_int_set(div->line[0][0], v); -} - -void isl_div_set_coefficient(struct isl_div *div, - enum isl_dim_type type, int pos, isl_int v) -{ - if (!div) - return; - - isl_assert(div->ctx, pos < n(div, type), return); - isl_int_set(div->line[0][offset(div, type) + pos], v); -} - -__isl_give isl_aff *isl_aff_from_div(__isl_take isl_div *div) -{ - isl_aff *aff; - int pos; - - if (!div) - return NULL; - - pos = div->line - div->bmap->div; - aff = isl_aff_zero(isl_basic_map_get_local_space(div->bmap)); - aff = isl_aff_set_coefficient_si(aff, isl_dim_div, pos, 1); - - isl_div_free(div); - return aff; -} diff --git a/cloog-0.16.3/isl/isl_div_private.h b/cloog-0.16.3/isl/isl_div_private.h deleted file mode 100644 index f0a88f9..0000000 --- a/cloog-0.16.3/isl/isl_div_private.h +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include - -struct isl_div { - int ref; - struct isl_ctx *ctx; - - struct isl_basic_map *bmap; - isl_int **line; -}; diff --git a/cloog-0.16.3/isl/isl_equalities.c b/cloog-0.16.3/isl/isl_equalities.c deleted file mode 100644 index 68d2c89..0000000 --- a/cloog-0.16.3/isl/isl_equalities.c +++ /dev/null @@ -1,697 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include "isl_map_private.h" -#include "isl_equalities.h" - -/* Given a set of modulo constraints - * - * c + A y = 0 mod d - * - * this function computes a particular solution y_0 - * - * The input is given as a matrix B = [ c A ] and a vector d. - * - * The output is matrix containing the solution y_0 or - * a zero-column matrix if the constraints admit no integer solution. - * - * The given set of constrains is equivalent to - * - * c + A y = -D x - * - * with D = diag d and x a fresh set of variables. - * Reducing both c and A modulo d does not change the - * value of y in the solution and may lead to smaller coefficients. - * Let M = [ D A ] and [ H 0 ] = M U, the Hermite normal form of M. - * Then - * [ x ] - * M [ y ] = - c - * and so - * [ x ] - * [ H 0 ] U^{-1} [ y ] = - c - * Let - * [ A ] [ x ] - * [ B ] = U^{-1} [ y ] - * then - * H A + 0 B = -c - * - * so B may be chosen arbitrarily, e.g., B = 0, and then - * - * [ x ] = [ -c ] - * U^{-1} [ y ] = [ 0 ] - * or - * [ x ] [ -c ] - * [ y ] = U [ 0 ] - * specifically, - * - * y = U_{2,1} (-c) - * - * If any of the coordinates of this y are non-integer - * then the constraints admit no integer solution and - * a zero-column matrix is returned. - */ -static struct isl_mat *particular_solution(struct isl_mat *B, struct isl_vec *d) -{ - int i, j; - struct isl_mat *M = NULL; - struct isl_mat *C = NULL; - struct isl_mat *U = NULL; - struct isl_mat *H = NULL; - struct isl_mat *cst = NULL; - struct isl_mat *T = NULL; - - M = isl_mat_alloc(B->ctx, B->n_row, B->n_row + B->n_col - 1); - C = isl_mat_alloc(B->ctx, 1 + B->n_row, 1); - if (!M || !C) - goto error; - isl_int_set_si(C->row[0][0], 1); - for (i = 0; i < B->n_row; ++i) { - isl_seq_clr(M->row[i], B->n_row); - isl_int_set(M->row[i][i], d->block.data[i]); - isl_int_neg(C->row[1 + i][0], B->row[i][0]); - isl_int_fdiv_r(C->row[1+i][0], C->row[1+i][0], M->row[i][i]); - for (j = 0; j < B->n_col - 1; ++j) - isl_int_fdiv_r(M->row[i][B->n_row + j], - B->row[i][1 + j], M->row[i][i]); - } - M = isl_mat_left_hermite(M, 0, &U, NULL); - if (!M || !U) - goto error; - H = isl_mat_sub_alloc(M, 0, B->n_row, 0, B->n_row); - H = isl_mat_lin_to_aff(H); - C = isl_mat_inverse_product(H, C); - if (!C) - goto error; - for (i = 0; i < B->n_row; ++i) { - if (!isl_int_is_divisible_by(C->row[1+i][0], C->row[0][0])) - break; - isl_int_divexact(C->row[1+i][0], C->row[1+i][0], C->row[0][0]); - } - if (i < B->n_row) - cst = isl_mat_alloc(B->ctx, B->n_row, 0); - else - cst = isl_mat_sub_alloc(C, 1, B->n_row, 0, 1); - T = isl_mat_sub_alloc(U, B->n_row, B->n_col - 1, 0, B->n_row); - cst = isl_mat_product(T, cst); - isl_mat_free(M); - isl_mat_free(C); - isl_mat_free(U); - return cst; -error: - isl_mat_free(M); - isl_mat_free(C); - isl_mat_free(U); - return NULL; -} - -/* Compute and return the matrix - * - * U_1^{-1} diag(d_1, 1, ..., 1) - * - * with U_1 the unimodular completion of the first (and only) row of B. - * The columns of this matrix generate the lattice that satisfies - * the single (linear) modulo constraint. - */ -static struct isl_mat *parameter_compression_1( - struct isl_mat *B, struct isl_vec *d) -{ - struct isl_mat *U; - - U = isl_mat_alloc(B->ctx, B->n_col - 1, B->n_col - 1); - if (!U) - return NULL; - isl_seq_cpy(U->row[0], B->row[0] + 1, B->n_col - 1); - U = isl_mat_unimodular_complete(U, 1); - U = isl_mat_right_inverse(U); - if (!U) - return NULL; - isl_mat_col_mul(U, 0, d->block.data[0], 0); - U = isl_mat_lin_to_aff(U); - return U; -} - -/* Compute a common lattice of solutions to the linear modulo - * constraints specified by B and d. - * See also the documentation of isl_mat_parameter_compression. - * We put the matrix - * - * A = [ L_1^{-T} L_2^{-T} ... L_k^{-T} ] - * - * on a common denominator. This denominator D is the lcm of modulos d. - * Since L_i = U_i^{-1} diag(d_i, 1, ... 1), we have - * L_i^{-T} = U_i^T diag(d_i, 1, ... 1)^{-T} = U_i^T diag(1/d_i, 1, ..., 1). - * Putting this on the common denominator, we have - * D * L_i^{-T} = U_i^T diag(D/d_i, D, ..., D). - */ -static struct isl_mat *parameter_compression_multi( - struct isl_mat *B, struct isl_vec *d) -{ - int i, j, k; - isl_int D; - struct isl_mat *A = NULL, *U = NULL; - struct isl_mat *T; - unsigned size; - - isl_int_init(D); - - isl_vec_lcm(d, &D); - - size = B->n_col - 1; - A = isl_mat_alloc(B->ctx, size, B->n_row * size); - U = isl_mat_alloc(B->ctx, size, size); - if (!U || !A) - goto error; - for (i = 0; i < B->n_row; ++i) { - isl_seq_cpy(U->row[0], B->row[i] + 1, size); - U = isl_mat_unimodular_complete(U, 1); - if (!U) - goto error; - isl_int_divexact(D, D, d->block.data[i]); - for (k = 0; k < U->n_col; ++k) - isl_int_mul(A->row[k][i*size+0], D, U->row[0][k]); - isl_int_mul(D, D, d->block.data[i]); - for (j = 1; j < U->n_row; ++j) - for (k = 0; k < U->n_col; ++k) - isl_int_mul(A->row[k][i*size+j], - D, U->row[j][k]); - } - A = isl_mat_left_hermite(A, 0, NULL, NULL); - T = isl_mat_sub_alloc(A, 0, A->n_row, 0, A->n_row); - T = isl_mat_lin_to_aff(T); - if (!T) - goto error; - isl_int_set(T->row[0][0], D); - T = isl_mat_right_inverse(T); - if (!T) - goto error; - isl_assert(T->ctx, isl_int_is_one(T->row[0][0]), goto error); - T = isl_mat_transpose(T); - isl_mat_free(A); - isl_mat_free(U); - - isl_int_clear(D); - return T; -error: - isl_mat_free(A); - isl_mat_free(U); - isl_int_clear(D); - return NULL; -} - -/* Given a set of modulo constraints - * - * c + A y = 0 mod d - * - * this function returns an affine transformation T, - * - * y = T y' - * - * that bijectively maps the integer vectors y' to integer - * vectors y that satisfy the modulo constraints. - * - * This function is inspired by Section 2.5.3 - * of B. Meister, "Stating and Manipulating Periodicity in the Polytope - * Model. Applications to Program Analysis and Optimization". - * However, the implementation only follows the algorithm of that - * section for computing a particular solution and not for computing - * a general homogeneous solution. The latter is incomplete and - * may remove some valid solutions. - * Instead, we use an adaptation of the algorithm in Section 7 of - * B. Meister, S. Verdoolaege, "Polynomial Approximations in the Polytope - * Model: Bringing the Power of Quasi-Polynomials to the Masses". - * - * The input is given as a matrix B = [ c A ] and a vector d. - * Each element of the vector d corresponds to a row in B. - * The output is a lower triangular matrix. - * If no integer vector y satisfies the given constraints then - * a matrix with zero columns is returned. - * - * We first compute a particular solution y_0 to the given set of - * modulo constraints in particular_solution. If no such solution - * exists, then we return a zero-columned transformation matrix. - * Otherwise, we compute the generic solution to - * - * A y = 0 mod d - * - * That is we want to compute G such that - * - * y = G y'' - * - * with y'' integer, describes the set of solutions. - * - * We first remove the common factors of each row. - * In particular if gcd(A_i,d_i) != 1, then we divide the whole - * row i (including d_i) by this common factor. If afterwards gcd(A_i) != 1, - * then we divide this row of A by the common factor, unless gcd(A_i) = 0. - * In the later case, we simply drop the row (in both A and d). - * - * If there are no rows left in A, then G is the identity matrix. Otherwise, - * for each row i, we now determine the lattice of integer vectors - * that satisfies this row. Let U_i be the unimodular extension of the - * row A_i. This unimodular extension exists because gcd(A_i) = 1. - * The first component of - * - * y' = U_i y - * - * needs to be a multiple of d_i. Let y' = diag(d_i, 1, ..., 1) y''. - * Then, - * - * y = U_i^{-1} diag(d_i, 1, ..., 1) y'' - * - * for arbitrary integer vectors y''. That is, y belongs to the lattice - * generated by the columns of L_i = U_i^{-1} diag(d_i, 1, ..., 1). - * If there is only one row, then G = L_1. - * - * If there is more than one row left, we need to compute the intersection - * of the lattices. That is, we need to compute an L such that - * - * L = L_i L_i' for all i - * - * with L_i' some integer matrices. Let A be constructed as follows - * - * A = [ L_1^{-T} L_2^{-T} ... L_k^{-T} ] - * - * and computed the Hermite Normal Form of A = [ H 0 ] U - * Then, - * - * L_i^{-T} = H U_{1,i} - * - * or - * - * H^{-T} = L_i U_{1,i}^T - * - * In other words G = L = H^{-T}. - * To ensure that G is lower triangular, we compute and use its Hermite - * normal form. - * - * The affine transformation matrix returned is then - * - * [ 1 0 ] - * [ y_0 G ] - * - * as any y = y_0 + G y' with y' integer is a solution to the original - * modulo constraints. - */ -struct isl_mat *isl_mat_parameter_compression( - struct isl_mat *B, struct isl_vec *d) -{ - int i; - struct isl_mat *cst = NULL; - struct isl_mat *T = NULL; - isl_int D; - - if (!B || !d) - goto error; - isl_assert(B->ctx, B->n_row == d->size, goto error); - cst = particular_solution(B, d); - if (!cst) - goto error; - if (cst->n_col == 0) { - T = isl_mat_alloc(B->ctx, B->n_col, 0); - isl_mat_free(cst); - isl_mat_free(B); - isl_vec_free(d); - return T; - } - isl_int_init(D); - /* Replace a*g*row = 0 mod g*m by row = 0 mod m */ - for (i = 0; i < B->n_row; ++i) { - isl_seq_gcd(B->row[i] + 1, B->n_col - 1, &D); - if (isl_int_is_one(D)) - continue; - if (isl_int_is_zero(D)) { - B = isl_mat_drop_rows(B, i, 1); - d = isl_vec_cow(d); - if (!B || !d) - goto error2; - isl_seq_cpy(d->block.data+i, d->block.data+i+1, - d->size - (i+1)); - d->size--; - i--; - continue; - } - B = isl_mat_cow(B); - if (!B) - goto error2; - isl_seq_scale_down(B->row[i] + 1, B->row[i] + 1, D, B->n_col-1); - isl_int_gcd(D, D, d->block.data[i]); - d = isl_vec_cow(d); - if (!d) - goto error2; - isl_int_divexact(d->block.data[i], d->block.data[i], D); - } - isl_int_clear(D); - if (B->n_row == 0) - T = isl_mat_identity(B->ctx, B->n_col); - else if (B->n_row == 1) - T = parameter_compression_1(B, d); - else - T = parameter_compression_multi(B, d); - T = isl_mat_left_hermite(T, 0, NULL, NULL); - if (!T) - goto error; - isl_mat_sub_copy(T->ctx, T->row + 1, cst->row, cst->n_row, 0, 0, 1); - isl_mat_free(cst); - isl_mat_free(B); - isl_vec_free(d); - return T; -error2: - isl_int_clear(D); -error: - isl_mat_free(cst); - isl_mat_free(B); - isl_vec_free(d); - return NULL; -} - -/* Given a set of equalities - * - * M x - c = 0 - * - * this function computes a unimodular transformation from a lower-dimensional - * space to the original space that bijectively maps the integer points x' - * in the lower-dimensional space to the integer points x in the original - * space that satisfy the equalities. - * - * The input is given as a matrix B = [ -c M ] and the output is a - * matrix that maps [1 x'] to [1 x]. - * If T2 is not NULL, then *T2 is set to a matrix mapping [1 x] to [1 x']. - * - * First compute the (left) Hermite normal form of M, - * - * M [U1 U2] = M U = H = [H1 0] - * or - * M = H Q = [H1 0] [Q1] - * [Q2] - * - * with U, Q unimodular, Q = U^{-1} (and H lower triangular). - * Define the transformed variables as - * - * x = [U1 U2] [ x1' ] = [U1 U2] [Q1] x - * [ x2' ] [Q2] - * - * The equalities then become - * - * H1 x1' - c = 0 or x1' = H1^{-1} c = c' - * - * If any of the c' is non-integer, then the original set has no - * integer solutions (since the x' are a unimodular transformation - * of the x) and a zero-column matrix is returned. - * Otherwise, the transformation is given by - * - * x = U1 H1^{-1} c + U2 x2' - * - * The inverse transformation is simply - * - * x2' = Q2 x - */ -struct isl_mat *isl_mat_variable_compression(struct isl_mat *B, - struct isl_mat **T2) -{ - int i; - struct isl_mat *H = NULL, *C = NULL, *H1, *U = NULL, *U1, *U2, *TC; - unsigned dim; - - if (T2) - *T2 = NULL; - if (!B) - goto error; - - dim = B->n_col - 1; - H = isl_mat_sub_alloc(B, 0, B->n_row, 1, dim); - H = isl_mat_left_hermite(H, 0, &U, T2); - if (!H || !U || (T2 && !*T2)) - goto error; - if (T2) { - *T2 = isl_mat_drop_rows(*T2, 0, B->n_row); - *T2 = isl_mat_lin_to_aff(*T2); - if (!*T2) - goto error; - } - C = isl_mat_alloc(B->ctx, 1+B->n_row, 1); - if (!C) - goto error; - isl_int_set_si(C->row[0][0], 1); - isl_mat_sub_neg(C->ctx, C->row+1, B->row, B->n_row, 0, 0, 1); - H1 = isl_mat_sub_alloc(H, 0, H->n_row, 0, H->n_row); - H1 = isl_mat_lin_to_aff(H1); - TC = isl_mat_inverse_product(H1, C); - if (!TC) - goto error; - isl_mat_free(H); - if (!isl_int_is_one(TC->row[0][0])) { - for (i = 0; i < B->n_row; ++i) { - if (!isl_int_is_divisible_by(TC->row[1+i][0], TC->row[0][0])) { - struct isl_ctx *ctx = B->ctx; - isl_mat_free(B); - isl_mat_free(TC); - isl_mat_free(U); - if (T2) { - isl_mat_free(*T2); - *T2 = NULL; - } - return isl_mat_alloc(ctx, 1 + dim, 0); - } - isl_seq_scale_down(TC->row[1+i], TC->row[1+i], TC->row[0][0], 1); - } - isl_int_set_si(TC->row[0][0], 1); - } - U1 = isl_mat_sub_alloc(U, 0, U->n_row, 0, B->n_row); - U1 = isl_mat_lin_to_aff(U1); - U2 = isl_mat_sub_alloc(U, 0, U->n_row, B->n_row, U->n_row - B->n_row); - U2 = isl_mat_lin_to_aff(U2); - isl_mat_free(U); - TC = isl_mat_product(U1, TC); - TC = isl_mat_aff_direct_sum(TC, U2); - - isl_mat_free(B); - - return TC; -error: - isl_mat_free(B); - isl_mat_free(H); - isl_mat_free(U); - if (T2) { - isl_mat_free(*T2); - *T2 = NULL; - } - return NULL; -} - -/* Use the n equalities of bset to unimodularly transform the - * variables x such that n transformed variables x1' have a constant value - * and rewrite the constraints of bset in terms of the remaining - * transformed variables x2'. The matrix pointed to by T maps - * the new variables x2' back to the original variables x, while T2 - * maps the original variables to the new variables. - */ -static struct isl_basic_set *compress_variables( - struct isl_basic_set *bset, struct isl_mat **T, struct isl_mat **T2) -{ - struct isl_mat *B, *TC; - unsigned dim; - - if (T) - *T = NULL; - if (T2) - *T2 = NULL; - if (!bset) - goto error; - isl_assert(bset->ctx, isl_basic_set_n_param(bset) == 0, goto error); - isl_assert(bset->ctx, bset->n_div == 0, goto error); - dim = isl_basic_set_n_dim(bset); - isl_assert(bset->ctx, bset->n_eq <= dim, goto error); - if (bset->n_eq == 0) - return bset; - - B = isl_mat_sub_alloc6(bset->ctx, bset->eq, 0, bset->n_eq, 0, 1 + dim); - TC = isl_mat_variable_compression(B, T2); - if (!TC) - goto error; - if (TC->n_col == 0) { - isl_mat_free(TC); - if (T2) { - isl_mat_free(*T2); - *T2 = NULL; - } - return isl_basic_set_set_to_empty(bset); - } - - bset = isl_basic_set_preimage(bset, T ? isl_mat_copy(TC) : TC); - if (T) - *T = TC; - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -struct isl_basic_set *isl_basic_set_remove_equalities( - struct isl_basic_set *bset, struct isl_mat **T, struct isl_mat **T2) -{ - if (T) - *T = NULL; - if (T2) - *T2 = NULL; - if (!bset) - return NULL; - isl_assert(bset->ctx, isl_basic_set_n_param(bset) == 0, goto error); - bset = isl_basic_set_gauss(bset, NULL); - if (ISL_F_ISSET(bset, ISL_BASIC_SET_EMPTY)) - return bset; - bset = compress_variables(bset, T, T2); - return bset; -error: - isl_basic_set_free(bset); - *T = NULL; - return NULL; -} - -/* Check if dimension dim belongs to a residue class - * i_dim \equiv r mod m - * with m != 1 and if so return m in *modulo and r in *residue. - * As a special case, when i_dim has a fixed value v, then - * *modulo is set to 0 and *residue to v. - * - * If i_dim does not belong to such a residue class, then *modulo - * is set to 1 and *residue is set to 0. - */ -int isl_basic_set_dim_residue_class(struct isl_basic_set *bset, - int pos, isl_int *modulo, isl_int *residue) -{ - struct isl_ctx *ctx; - struct isl_mat *H = NULL, *U = NULL, *C, *H1, *U1; - unsigned total; - unsigned nparam; - - if (!bset || !modulo || !residue) - return -1; - - if (isl_basic_set_plain_dim_is_fixed(bset, pos, residue)) { - isl_int_set_si(*modulo, 0); - return 0; - } - - ctx = bset->ctx; - total = isl_basic_set_total_dim(bset); - nparam = isl_basic_set_n_param(bset); - H = isl_mat_sub_alloc6(bset->ctx, bset->eq, 0, bset->n_eq, 1, total); - H = isl_mat_left_hermite(H, 0, &U, NULL); - if (!H) - return -1; - - isl_seq_gcd(U->row[nparam + pos]+bset->n_eq, - total-bset->n_eq, modulo); - if (isl_int_is_zero(*modulo)) - isl_int_set_si(*modulo, 1); - if (isl_int_is_one(*modulo)) { - isl_int_set_si(*residue, 0); - isl_mat_free(H); - isl_mat_free(U); - return 0; - } - - C = isl_mat_alloc(bset->ctx, 1+bset->n_eq, 1); - if (!C) - goto error; - isl_int_set_si(C->row[0][0], 1); - isl_mat_sub_neg(C->ctx, C->row+1, bset->eq, bset->n_eq, 0, 0, 1); - H1 = isl_mat_sub_alloc(H, 0, H->n_row, 0, H->n_row); - H1 = isl_mat_lin_to_aff(H1); - C = isl_mat_inverse_product(H1, C); - isl_mat_free(H); - U1 = isl_mat_sub_alloc(U, nparam+pos, 1, 0, bset->n_eq); - U1 = isl_mat_lin_to_aff(U1); - isl_mat_free(U); - C = isl_mat_product(U1, C); - if (!C) - goto error; - if (!isl_int_is_divisible_by(C->row[1][0], C->row[0][0])) { - bset = isl_basic_set_copy(bset); - bset = isl_basic_set_set_to_empty(bset); - isl_basic_set_free(bset); - isl_int_set_si(*modulo, 1); - isl_int_set_si(*residue, 0); - return 0; - } - isl_int_divexact(*residue, C->row[1][0], C->row[0][0]); - isl_int_fdiv_r(*residue, *residue, *modulo); - isl_mat_free(C); - return 0; -error: - isl_mat_free(H); - isl_mat_free(U); - return -1; -} - -/* Check if dimension dim belongs to a residue class - * i_dim \equiv r mod m - * with m != 1 and if so return m in *modulo and r in *residue. - * As a special case, when i_dim has a fixed value v, then - * *modulo is set to 0 and *residue to v. - * - * If i_dim does not belong to such a residue class, then *modulo - * is set to 1 and *residue is set to 0. - */ -int isl_set_dim_residue_class(struct isl_set *set, - int pos, isl_int *modulo, isl_int *residue) -{ - isl_int m; - isl_int r; - int i; - - if (!set || !modulo || !residue) - return -1; - - if (set->n == 0) { - isl_int_set_si(*modulo, 0); - isl_int_set_si(*residue, 0); - return 0; - } - - if (isl_basic_set_dim_residue_class(set->p[0], pos, modulo, residue)<0) - return -1; - - if (set->n == 1) - return 0; - - if (isl_int_is_one(*modulo)) - return 0; - - isl_int_init(m); - isl_int_init(r); - - for (i = 1; i < set->n; ++i) { - if (isl_basic_set_dim_residue_class(set->p[0], pos, &m, &r) < 0) - goto error; - isl_int_gcd(*modulo, *modulo, m); - if (!isl_int_is_zero(*modulo)) - isl_int_fdiv_r(*residue, *residue, *modulo); - if (isl_int_is_one(*modulo)) - break; - if (!isl_int_is_zero(*modulo)) - isl_int_fdiv_r(r, r, *modulo); - if (isl_int_ne(*residue, r)) { - isl_int_set_si(*modulo, 1); - isl_int_set_si(*residue, 0); - break; - } - } - - isl_int_clear(m); - isl_int_clear(r); - - return 0; -error: - isl_int_clear(m); - isl_int_clear(r); - return -1; -} diff --git a/cloog-0.16.3/isl/isl_equalities.h b/cloog-0.16.3/isl/isl_equalities.h deleted file mode 100644 index ceb5544..0000000 --- a/cloog-0.16.3/isl/isl_equalities.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_EQUALITIES_H -#define ISL_EQUALITIES_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_mat *isl_mat_variable_compression( - struct isl_mat *B, struct isl_mat **T2); -struct isl_mat *isl_mat_parameter_compression( - struct isl_mat *B, struct isl_vec *d); -struct isl_basic_set *isl_basic_set_remove_equalities( - struct isl_basic_set *bset, struct isl_mat **T, struct isl_mat **T2); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/isl_factorization.c b/cloog-0.16.3/isl/isl_factorization.c deleted file mode 100644 index 6acfd73..0000000 --- a/cloog-0.16.3/isl/isl_factorization.c +++ /dev/null @@ -1,331 +0,0 @@ -/* - * Copyright 2005-2007 Universiteit Leiden - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, Leiden Institute of Advanced Computer Science, - * Universiteit Leiden, Niels Bohrweg 1, 2333 CA Leiden, The Netherlands - * and K.U.Leuven, Departement Computerwetenschappen, Celestijnenlaan 200A, - * B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include - -static __isl_give isl_factorizer *isl_factorizer_alloc( - __isl_take isl_morph *morph, int n_group) -{ - isl_factorizer *f = NULL; - int *len = NULL; - - if (!morph) - return NULL; - - if (n_group > 0) { - len = isl_alloc_array(morph->dom->ctx, int, n_group); - if (!len) - goto error; - } - - f = isl_alloc_type(morph->dom->ctx, struct isl_factorizer); - if (!f) - goto error; - - f->morph = morph; - f->n_group = n_group; - f->len = len; - - return f; -error: - free(len); - isl_morph_free(morph); - return NULL; -} - -void isl_factorizer_free(__isl_take isl_factorizer *f) -{ - if (!f) - return; - - isl_morph_free(f->morph); - free(f->len); - free(f); -} - -void isl_factorizer_dump(__isl_take isl_factorizer *f, FILE *out) -{ - int i; - - if (!f) - return; - - isl_morph_dump(f->morph, out); - fprintf(out, "["); - for (i = 0; i < f->n_group; ++i) { - if (i) - fprintf(out, ", "); - fprintf(out, "%d", f->len[i]); - } - fprintf(out, "]\n"); -} - -__isl_give isl_factorizer *isl_factorizer_identity(__isl_keep isl_basic_set *bset) -{ - return isl_factorizer_alloc(isl_morph_identity(bset), 0); -} - -__isl_give isl_factorizer *isl_factorizer_groups(__isl_keep isl_basic_set *bset, - __isl_take isl_mat *Q, __isl_take isl_mat *U, int n, int *len) -{ - int i; - unsigned nvar; - unsigned ovar; - isl_dim *dim; - isl_basic_set *dom; - isl_basic_set *ran; - isl_morph *morph; - isl_factorizer *f; - isl_mat *id; - - if (!bset || !Q || !U) - goto error; - - ovar = 1 + isl_dim_offset(bset->dim, isl_dim_set); - id = isl_mat_identity(bset->ctx, ovar); - Q = isl_mat_diagonal(isl_mat_copy(id), Q); - U = isl_mat_diagonal(id, U); - - nvar = isl_basic_set_dim(bset, isl_dim_set); - dim = isl_basic_set_get_dim(bset); - dom = isl_basic_set_universe(isl_dim_copy(dim)); - dim = isl_dim_drop(dim, isl_dim_set, 0, nvar); - dim = isl_dim_add(dim, isl_dim_set, nvar); - ran = isl_basic_set_universe(dim); - morph = isl_morph_alloc(dom, ran, Q, U); - f = isl_factorizer_alloc(morph, n); - if (!f) - return NULL; - for (i = 0; i < n; ++i) - f->len[i] = len[i]; - return f; -error: - isl_mat_free(Q); - isl_mat_free(U); - return NULL; -} - -struct isl_factor_groups { - int *pos; /* for each column: row position of pivot */ - int *group; /* group to which a column belongs */ - int *cnt; /* number of columns in the group */ - int *rowgroup; /* group to which a constraint belongs */ -}; - -/* Initialize isl_factor_groups structure: find pivot row positions, - * each column initially belongs to its own group and the groups - * of the constraints are still unknown. - */ -static int init_groups(struct isl_factor_groups *g, __isl_keep isl_mat *H) -{ - int i, j; - - if (!H) - return -1; - - g->pos = isl_alloc_array(H->ctx, int, H->n_col); - g->group = isl_alloc_array(H->ctx, int, H->n_col); - g->cnt = isl_alloc_array(H->ctx, int, H->n_col); - g->rowgroup = isl_alloc_array(H->ctx, int, H->n_row); - - if (!g->pos || !g->group || !g->cnt || !g->rowgroup) - return -1; - - for (i = 0; i < H->n_row; ++i) - g->rowgroup[i] = -1; - for (i = 0, j = 0; i < H->n_col; ++i) { - for ( ; j < H->n_row; ++j) - if (!isl_int_is_zero(H->row[j][i])) - break; - g->pos[i] = j; - } - for (i = 0; i < H->n_col; ++i) { - g->group[i] = i; - g->cnt[i] = 1; - } - - return 0; -} - -/* Update group[k] to the group column k belongs to. - * When merging two groups, only the group of the current - * group leader is changed. Here we change the group of - * the other members to also point to the group that the - * old group leader now points to. - */ -static void update_group(struct isl_factor_groups *g, int k) -{ - int p = g->group[k]; - while (g->cnt[p] == 0) - p = g->group[p]; - g->group[k] = p; -} - -/* Merge group i with all groups of the subsequent columns - * with non-zero coefficients in row j of H. - * (The previous columns are all zero; otherwise we would have handled - * the row before.) - */ -static int update_group_i_with_row_j(struct isl_factor_groups *g, int i, int j, - __isl_keep isl_mat *H) -{ - int k; - - g->rowgroup[j] = g->group[i]; - for (k = i + 1; k < H->n_col && j >= g->pos[k]; ++k) { - update_group(g, k); - update_group(g, i); - if (g->group[k] != g->group[i] && - !isl_int_is_zero(H->row[j][k])) { - isl_assert(H->ctx, g->cnt[g->group[k]] != 0, return -1); - isl_assert(H->ctx, g->cnt[g->group[i]] != 0, return -1); - if (g->group[i] < g->group[k]) { - g->cnt[g->group[i]] += g->cnt[g->group[k]]; - g->cnt[g->group[k]] = 0; - g->group[g->group[k]] = g->group[i]; - } else { - g->cnt[g->group[k]] += g->cnt[g->group[i]]; - g->cnt[g->group[i]] = 0; - g->group[g->group[i]] = g->group[k]; - } - } - } - - return 0; -} - -/* Update the group information based on the constraint matrix. - */ -static int update_groups(struct isl_factor_groups *g, __isl_keep isl_mat *H) -{ - int i, j; - - for (i = 0; i < H->n_col && g->cnt[0] < H->n_col; ++i) { - if (g->pos[i] == H->n_row) - continue; /* A line direction */ - if (g->rowgroup[g->pos[i]] == -1) - g->rowgroup[g->pos[i]] = i; - for (j = g->pos[i] + 1; j < H->n_row; ++j) { - if (isl_int_is_zero(H->row[j][i])) - continue; - if (g->rowgroup[j] != -1) - continue; - if (update_group_i_with_row_j(g, i, j, H) < 0) - return -1; - } - } - for (i = 1; i < H->n_col; ++i) - update_group(g, i); - - return 0; -} - -static void clear_groups(struct isl_factor_groups *g) -{ - if (!g) - return; - free(g->pos); - free(g->group); - free(g->cnt); - free(g->rowgroup); -} - -/* Determine if the set variables of the basic set can be factorized and - * return the results in an isl_factorizer. - * - * The algorithm works by first computing the Hermite normal form - * and then grouping columns linked by one or more constraints together, - * where a constraints "links" two or more columns if the constraint - * has nonzero coefficients in the columns. - */ -__isl_give isl_factorizer *isl_basic_set_factorizer( - __isl_keep isl_basic_set *bset) -{ - int i, j, n, done; - isl_mat *H, *U, *Q; - unsigned nvar; - struct isl_factor_groups g = { 0 }; - isl_factorizer *f; - - if (!bset) - return NULL; - - isl_assert(bset->ctx, isl_basic_set_dim(bset, isl_dim_div) == 0, - return NULL); - - nvar = isl_basic_set_dim(bset, isl_dim_set); - if (nvar <= 1) - return isl_factorizer_identity(bset); - - H = isl_mat_alloc(bset->ctx, bset->n_eq + bset->n_ineq, nvar); - if (!H) - return NULL; - isl_mat_sub_copy(bset->ctx, H->row, bset->eq, bset->n_eq, - 0, 1 + isl_dim_offset(bset->dim, isl_dim_set), nvar); - isl_mat_sub_copy(bset->ctx, H->row + bset->n_eq, bset->ineq, bset->n_ineq, - 0, 1 + isl_dim_offset(bset->dim, isl_dim_set), nvar); - H = isl_mat_left_hermite(H, 0, &U, &Q); - - if (init_groups(&g, H) < 0) - goto error; - if (update_groups(&g, H) < 0) - goto error; - - if (g.cnt[0] == nvar) { - isl_mat_free(H); - isl_mat_free(U); - isl_mat_free(Q); - clear_groups(&g); - - return isl_factorizer_identity(bset); - } - - done = 0; - n = 0; - while (done != nvar) { - int group = g.group[done]; - for (i = 1; i < g.cnt[group]; ++i) { - if (g.group[done + i] == group) - continue; - for (j = done + g.cnt[group]; j < nvar; ++j) - if (g.group[j] == group) - break; - if (j == nvar) - isl_die(bset->ctx, isl_error_internal, - "internal error", goto error); - g.group[j] = g.group[done + i]; - Q = isl_mat_swap_rows(Q, done + i, j); - U = isl_mat_swap_cols(U, done + i, j); - } - done += g.cnt[group]; - g.pos[n++] = g.cnt[group]; - } - - f = isl_factorizer_groups(bset, Q, U, n, g.pos); - - isl_mat_free(H); - clear_groups(&g); - - return f; -error: - isl_mat_free(H); - isl_mat_free(U); - isl_mat_free(Q); - clear_groups(&g); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_factorization.h b/cloog-0.16.3/isl/isl_factorization.h deleted file mode 100644 index f0d3518..0000000 --- a/cloog-0.16.3/isl/isl_factorization.h +++ /dev/null @@ -1,29 +0,0 @@ -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Data for factorizing a particular basic set. - * After applying "morph" to the basic set, there are "n_group" - * groups of consecutive set variables, each of length "len[i]", - * with 0 <= i < n_group. - * If no factorization is possible, then "n_group" is set to 0. - */ -struct isl_factorizer { - isl_morph *morph; - int n_group; - int *len; -}; -typedef struct isl_factorizer isl_factorizer; - -__isl_give isl_factorizer *isl_basic_set_factorizer( - __isl_keep isl_basic_set *bset); - -void isl_factorizer_free(__isl_take isl_factorizer *f); -void isl_factorizer_dump(__isl_take isl_factorizer *f, FILE *out); - -#if defined(__cplusplus) -} -#endif diff --git a/cloog-0.16.3/isl/isl_farkas.c b/cloog-0.16.3/isl/isl_farkas.c deleted file mode 100644 index 2dc617e..0000000 --- a/cloog-0.16.3/isl/isl_farkas.c +++ /dev/null @@ -1,385 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include - -/* - * Let C be a cone and define - * - * C' := { y | forall x in C : y x >= 0 } - * - * C' contains the coefficients of all linear constraints - * that are valid for C. - * Furthermore, C'' = C. - * - * If C is defined as { x | A x >= 0 } - * then any element in C' must be a non-negative combination - * of the rows of A, i.e., y = t A with t >= 0. That is, - * - * C' = { y | exists t >= 0 : y = t A } - * - * If any of the rows in A actually represents an equality, then - * also negative combinations of this row are allowed and so the - * non-negativity constraint on the corresponding element of t - * can be dropped. - * - * A polyhedron P = { x | b + A x >= 0 } can be represented - * in homogeneous coordinates by the cone - * C = { [z,x] | b z + A x >= and z >= 0 } - * The valid linear constraints on C correspond to the valid affine - * constraints on P. - * This is essentially Farkas' lemma. - * - * Let A' = [b A], then, since - * [ 1 0 ] - * [ w y ] = [t_0 t] [ b A ] - * - * we have - * - * C' = { w, y | exists t_0, t >= 0 : y = t A' and w = t_0 + t b } - * or - * - * C' = { w, y | exists t >= 0 : y = t A' and w - t b >= 0 } - * - * In practice, we introduce an extra variable (w), shifting all - * other variables to the right, and an extra inequality - * (w - t b >= 0) corresponding to the positivity constraint on - * the homogeneous coordinate. - * - * When going back from coefficients to solutions, we immediately - * plug in 1 for z, which corresponds to shifting all variables - * to the left, with the leftmost ending up in the constant position. - */ - -/* Add the given prefix to all named isl_dim_set dimensions in "dim". - */ -static __isl_give isl_dim *isl_dim_prefix(__isl_take isl_dim *dim, - const char *prefix) -{ - int i; - isl_ctx *ctx; - unsigned nvar; - size_t prefix_len = strlen(prefix); - - if (!dim) - return NULL; - - ctx = isl_dim_get_ctx(dim); - nvar = isl_dim_size(dim, isl_dim_set); - - for (i = 0; i < nvar; ++i) { - const char *name; - char *prefix_name; - - name = isl_dim_get_name(dim, isl_dim_set, i); - if (!name) - continue; - - prefix_name = isl_alloc_array(ctx, char, - prefix_len + strlen(name) + 1); - if (!prefix_name) - goto error; - memcpy(prefix_name, prefix, prefix_len); - strcpy(prefix_name + prefix_len, name); - - dim = isl_dim_set_name(dim, isl_dim_set, i, prefix_name); - free(prefix_name); - } - - return dim; -error: - isl_dim_free(dim); - return NULL; -} - -/* Given a dimension specification of the solutions space, construct - * a dimension specification for the space of coefficients. - * - * In particular transform - * - * [params] -> { S } - * - * to - * - * { coefficients[[cst, params] -> S] } - * - * and prefix each dimension name with "c_". - */ -static __isl_give isl_dim *isl_dim_coefficients(__isl_take isl_dim *dim) -{ - isl_dim *dim_param; - unsigned nvar; - unsigned nparam; - - nvar = isl_dim_size(dim, isl_dim_set); - nparam = isl_dim_size(dim, isl_dim_param); - dim_param = isl_dim_copy(dim); - dim_param = isl_dim_drop(dim_param, isl_dim_set, 0, nvar); - dim_param = isl_dim_move(dim_param, isl_dim_set, 0, - isl_dim_param, 0, nparam); - dim_param = isl_dim_prefix(dim_param, "c_"); - dim_param = isl_dim_insert(dim_param, isl_dim_set, 0, 1); - dim_param = isl_dim_set_name(dim_param, isl_dim_set, 0, "c_cst"); - dim = isl_dim_drop(dim, isl_dim_param, 0, nparam); - dim = isl_dim_prefix(dim, "c_"); - dim = isl_dim_join(isl_dim_from_domain(dim_param), - isl_dim_from_range(dim)); - dim = isl_dim_wrap(dim); - dim = isl_dim_set_tuple_name(dim, isl_dim_set, "coefficients"); - - return dim; -} - -/* Drop the given prefix from all named dimensions of type "type" in "dim". - */ -static __isl_give isl_dim *isl_dim_unprefix(__isl_take isl_dim *dim, - enum isl_dim_type type, const char *prefix) -{ - int i; - unsigned n; - size_t prefix_len = strlen(prefix); - - n = isl_dim_size(dim, type); - - for (i = 0; i < n; ++i) { - const char *name; - - name = isl_dim_get_name(dim, type, i); - if (!name) - continue; - if (strncmp(name, prefix, prefix_len)) - continue; - - dim = isl_dim_set_name(dim, type, i, name + prefix_len); - } - - return dim; -} - -/* Given a dimension specification of the space of coefficients, construct - * a dimension specification for the space of solutions. - * - * In particular transform - * - * { coefficients[[cst, params] -> S] } - * - * to - * - * [params] -> { S } - * - * and drop the "c_" prefix from the dimension names. - */ -static __isl_give isl_dim *isl_dim_solutions(__isl_take isl_dim *dim) -{ - unsigned nparam; - - dim = isl_dim_unwrap(dim); - dim = isl_dim_drop(dim, isl_dim_in, 0, 1); - dim = isl_dim_unprefix(dim, isl_dim_in, "c_"); - dim = isl_dim_unprefix(dim, isl_dim_out, "c_"); - nparam = isl_dim_size(dim, isl_dim_in); - dim = isl_dim_move(dim, isl_dim_param, 0, isl_dim_in, 0, nparam); - dim = isl_dim_range(dim); - - return dim; -} - -/* Compute the dual of "bset" by applying Farkas' lemma. - * As explained above, we add an extra dimension to represent - * the coefficient of the constant term when going from solutions - * to coefficients (shift == 1) and we drop the extra dimension when going - * in the opposite direction (shift == -1). "dim" is the space in which - * the dual should be created. - */ -static __isl_give isl_basic_set *farkas(__isl_take isl_dim *dim, - __isl_take isl_basic_set *bset, int shift) -{ - int i, j, k; - isl_basic_set *dual = NULL; - unsigned total; - - total = isl_basic_set_total_dim(bset); - - dual = isl_basic_set_alloc_dim(dim, bset->n_eq + bset->n_ineq, - total, bset->n_ineq + (shift > 0)); - dual = isl_basic_set_set_rational(dual); - - for (i = 0; i < bset->n_eq + bset->n_ineq; ++i) { - k = isl_basic_set_alloc_div(dual); - if (k < 0) - goto error; - isl_int_set_si(dual->div[k][0], 0); - } - - for (i = 0; i < total; ++i) { - k = isl_basic_set_alloc_equality(dual); - if (k < 0) - goto error; - isl_seq_clr(dual->eq[k], 1 + shift + total); - isl_int_set_si(dual->eq[k][1 + shift + i], -1); - for (j = 0; j < bset->n_eq; ++j) - isl_int_set(dual->eq[k][1 + shift + total + j], - bset->eq[j][1 + i]); - for (j = 0; j < bset->n_ineq; ++j) - isl_int_set(dual->eq[k][1 + shift + total + bset->n_eq + j], - bset->ineq[j][1 + i]); - } - - for (i = 0; i < bset->n_ineq; ++i) { - k = isl_basic_set_alloc_inequality(dual); - if (k < 0) - goto error; - isl_seq_clr(dual->ineq[k], - 1 + shift + total + bset->n_eq + bset->n_ineq); - isl_int_set_si(dual->ineq[k][1 + shift + total + bset->n_eq + i], 1); - } - - if (shift > 0) { - k = isl_basic_set_alloc_inequality(dual); - if (k < 0) - goto error; - isl_seq_clr(dual->ineq[k], 2 + total); - isl_int_set_si(dual->ineq[k][1], 1); - for (j = 0; j < bset->n_eq; ++j) - isl_int_neg(dual->ineq[k][2 + total + j], - bset->eq[j][0]); - for (j = 0; j < bset->n_ineq; ++j) - isl_int_neg(dual->ineq[k][2 + total + bset->n_eq + j], - bset->ineq[j][0]); - } - - dual = isl_basic_set_remove_divs(dual); - isl_basic_set_simplify(dual); - isl_basic_set_finalize(dual); - - isl_basic_set_free(bset); - return dual; -error: - isl_basic_set_free(bset); - isl_basic_set_free(dual); - return NULL; -} - -/* Construct a basic set containing the tuples of coefficients of all - * valid affine constraints on the given basic set. - */ -__isl_give isl_basic_set *isl_basic_set_coefficients( - __isl_take isl_basic_set *bset) -{ - isl_dim *dim; - - if (!bset) - return NULL; - if (bset->n_div) - isl_die(bset->ctx, isl_error_invalid, - "input set not allowed to have local variables", - goto error); - - dim = isl_basic_set_get_dim(bset); - dim = isl_dim_coefficients(dim); - - return farkas(dim, bset, 1); -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Construct a basic set containing the elements that satisfy all - * affine constraints whose coefficient tuples are - * contained in the given basic set. - */ -__isl_give isl_basic_set *isl_basic_set_solutions( - __isl_take isl_basic_set *bset) -{ - isl_dim *dim; - - if (!bset) - return NULL; - if (bset->n_div) - isl_die(bset->ctx, isl_error_invalid, - "input set not allowed to have local variables", - goto error); - - dim = isl_basic_set_get_dim(bset); - dim = isl_dim_solutions(dim); - - return farkas(dim, bset, -1); -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Construct a basic set containing the tuples of coefficients of all - * valid affine constraints on the given set. - */ -__isl_give isl_basic_set *isl_set_coefficients(__isl_take isl_set *set) -{ - int i; - isl_basic_set *coeff; - - if (!set) - return NULL; - if (set->n == 0) { - isl_dim *dim = isl_set_get_dim(set); - dim = isl_dim_coefficients(dim); - coeff = isl_basic_set_universe(dim); - coeff = isl_basic_set_set_rational(coeff); - isl_set_free(set); - return coeff; - } - - coeff = isl_basic_set_coefficients(isl_basic_set_copy(set->p[0])); - - for (i = 1; i < set->n; ++i) { - isl_basic_set *bset, *coeff_i; - bset = isl_basic_set_copy(set->p[i]); - coeff_i = isl_basic_set_coefficients(bset); - coeff = isl_basic_set_intersect(coeff, coeff_i); - } - - isl_set_free(set); - return coeff; -} - -/* Construct a basic set containing the elements that satisfy all - * affine constraints whose coefficient tuples are - * contained in the given set. - */ -__isl_give isl_basic_set *isl_set_solutions(__isl_take isl_set *set) -{ - int i; - isl_basic_set *sol; - - if (!set) - return NULL; - if (set->n == 0) { - isl_dim *dim = isl_set_get_dim(set); - dim = isl_dim_solutions(dim); - sol = isl_basic_set_universe(dim); - sol = isl_basic_set_set_rational(sol); - isl_set_free(set); - return sol; - } - - sol = isl_basic_set_solutions(isl_basic_set_copy(set->p[0])); - - for (i = 1; i < set->n; ++i) { - isl_basic_set *bset, *sol_i; - bset = isl_basic_set_copy(set->p[i]); - sol_i = isl_basic_set_solutions(bset); - sol = isl_basic_set_intersect(sol, sol_i); - } - - isl_set_free(set); - return sol; -} diff --git a/cloog-0.16.3/isl/isl_flow.c b/cloog-0.16.3/isl/isl_flow.c deleted file mode 100644 index 128aee5..0000000 --- a/cloog-0.16.3/isl/isl_flow.c +++ /dev/null @@ -1,1304 +0,0 @@ -/* - * Copyright 2005-2007 Universiteit Leiden - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, Leiden Institute of Advanced Computer Science, - * Universiteit Leiden, Niels Bohrweg 1, 2333 CA Leiden, The Netherlands - * and K.U.Leuven, Departement Computerwetenschappen, Celestijnenlaan 200A, - * B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include - -/* A private structure to keep track of a mapping together with - * a user-specified identifier and a boolean indicating whether - * the map represents a must or may access/dependence. - */ -struct isl_labeled_map { - struct isl_map *map; - void *data; - int must; -}; - -/* A structure containing the input for dependence analysis: - * - a sink - * - n_must + n_may (<= max_source) sources - * - a function for determining the relative order of sources and sink - * The must sources are placed before the may sources. - */ -struct isl_access_info { - struct isl_labeled_map sink; - isl_access_level_before level_before; - int max_source; - int n_must; - int n_may; - struct isl_labeled_map source[1]; -}; - -/* A structure containing the output of dependence analysis: - * - n_source dependences - * - a wrapped subset of the sink for which definitely no source could be found - * - a wrapped subset of the sink for which possibly no source could be found - */ -struct isl_flow { - isl_set *must_no_source; - isl_set *may_no_source; - int n_source; - struct isl_labeled_map *dep; -}; - -/* Construct an isl_access_info structure and fill it up with - * the given data. The number of sources is set to 0. - */ -__isl_give isl_access_info *isl_access_info_alloc(__isl_take isl_map *sink, - void *sink_user, isl_access_level_before fn, int max_source) -{ - isl_ctx *ctx; - struct isl_access_info *acc; - - if (!sink) - return NULL; - - ctx = isl_map_get_ctx(sink); - isl_assert(ctx, max_source >= 0, goto error); - - acc = isl_alloc(ctx, struct isl_access_info, - sizeof(struct isl_access_info) + - (max_source - 1) * sizeof(struct isl_labeled_map)); - if (!acc) - goto error; - - acc->sink.map = sink; - acc->sink.data = sink_user; - acc->level_before = fn; - acc->max_source = max_source; - acc->n_must = 0; - acc->n_may = 0; - - return acc; -error: - isl_map_free(sink); - return NULL; -} - -/* Free the given isl_access_info structure. - */ -void isl_access_info_free(__isl_take isl_access_info *acc) -{ - int i; - - if (!acc) - return; - isl_map_free(acc->sink.map); - for (i = 0; i < acc->n_must + acc->n_may; ++i) - isl_map_free(acc->source[i].map); - free(acc); -} - -isl_ctx *isl_access_info_get_ctx(__isl_keep isl_access_info *acc) -{ - return acc ? isl_map_get_ctx(acc->sink.map) : NULL; -} - -/* Add another source to an isl_access_info structure, making - * sure the "must" sources are placed before the "may" sources. - * This function may be called at most max_source times on a - * given isl_access_info structure, with max_source as specified - * in the call to isl_access_info_alloc that constructed the structure. - */ -__isl_give isl_access_info *isl_access_info_add_source( - __isl_take isl_access_info *acc, __isl_take isl_map *source, - int must, void *source_user) -{ - isl_ctx *ctx; - - if (!acc) - return NULL; - ctx = isl_map_get_ctx(acc->sink.map); - isl_assert(ctx, acc->n_must + acc->n_may < acc->max_source, goto error); - - if (must) { - if (acc->n_may) - acc->source[acc->n_must + acc->n_may] = - acc->source[acc->n_must]; - acc->source[acc->n_must].map = source; - acc->source[acc->n_must].data = source_user; - acc->source[acc->n_must].must = 1; - acc->n_must++; - } else { - acc->source[acc->n_must + acc->n_may].map = source; - acc->source[acc->n_must + acc->n_may].data = source_user; - acc->source[acc->n_must + acc->n_may].must = 0; - acc->n_may++; - } - - return acc; -error: - isl_map_free(source); - isl_access_info_free(acc); - return NULL; -} - -/* A temporary structure used while sorting the accesses in an isl_access_info. - */ -struct isl_access_sort_info { - struct isl_map *source_map; - void *source_data; - struct isl_access_info *acc; -}; - -/* Return -n, 0 or n (with n a positive value), depending on whether - * the source access identified by p1 should be sorted before, together - * or after that identified by p2. - * - * If p1 and p2 share a different number of levels with the sink, - * then the one with the lowest number of shared levels should be - * sorted first. - * If they both share no levels, then the order is irrelevant. - * Otherwise, if p1 appears before p2, then it should be sorted first. - * For more generic initial schedules, it is possible that neither - * p1 nor p2 appears before the other, or at least not in any obvious way. - * We therefore also check if p2 appears before p1, in which case p2 - * should be sorted first. - * If not, we try to order the two statements based on the description - * of the iteration domains. This results in an arbitrary, but fairly - * stable ordering. - */ -static int access_sort_cmp(const void *p1, const void *p2) -{ - const struct isl_access_sort_info *i1, *i2; - int level1, level2; - uint32_t h1, h2; - i1 = (const struct isl_access_sort_info *) p1; - i2 = (const struct isl_access_sort_info *) p2; - - level1 = i1->acc->level_before(i1->source_data, i1->acc->sink.data); - level2 = i2->acc->level_before(i2->source_data, i2->acc->sink.data); - - if (level1 != level2 || !level1) - return level1 - level2; - - level1 = i1->acc->level_before(i1->source_data, i2->source_data); - if (level1 % 2) - return -1; - - level2 = i1->acc->level_before(i2->source_data, i1->source_data); - if (level2 % 2) - return 1; - - h1 = isl_map_get_hash(i1->source_map); - h2 = isl_map_get_hash(i2->source_map); - return h1 > h2 ? 1 : h1 < h2 ? -1 : 0; -} - -/* Sort the must source accesses in order of increasing number of shared - * levels with the sink access. - * Source accesses with the same number of shared levels are sorted - * in their textual order. - */ -static __isl_give isl_access_info *isl_access_info_sort_sources( - __isl_take isl_access_info *acc) -{ - int i; - isl_ctx *ctx; - struct isl_access_sort_info *array; - - if (!acc) - return NULL; - if (acc->n_must <= 1) - return acc; - - ctx = isl_map_get_ctx(acc->sink.map); - array = isl_alloc_array(ctx, struct isl_access_sort_info, acc->n_must); - if (!array) - goto error; - - for (i = 0; i < acc->n_must; ++i) { - array[i].source_map = acc->source[i].map; - array[i].source_data = acc->source[i].data; - array[i].acc = acc; - } - - qsort(array, acc->n_must, sizeof(struct isl_access_sort_info), - access_sort_cmp); - - for (i = 0; i < acc->n_must; ++i) { - acc->source[i].map = array[i].source_map; - acc->source[i].data = array[i].source_data; - } - - free(array); - - return acc; -error: - isl_access_info_free(acc); - return NULL; -} - -/* Initialize an empty isl_flow structure corresponding to a given - * isl_access_info structure. - * For each must access, two dependences are created (initialized - * to the empty relation), one for the resulting must dependences - * and one for the resulting may dependences. May accesses can - * only lead to may dependences, so only one dependence is created - * for each of them. - * This function is private as isl_flow structures are only supposed - * to be created by isl_access_info_compute_flow. - */ -static __isl_give isl_flow *isl_flow_alloc(__isl_keep isl_access_info *acc) -{ - int i; - struct isl_ctx *ctx; - struct isl_flow *dep; - - if (!acc) - return NULL; - - ctx = isl_map_get_ctx(acc->sink.map); - dep = isl_calloc_type(ctx, struct isl_flow); - if (!dep) - return NULL; - - dep->dep = isl_calloc_array(ctx, struct isl_labeled_map, - 2 * acc->n_must + acc->n_may); - if (!dep->dep) - goto error; - - dep->n_source = 2 * acc->n_must + acc->n_may; - for (i = 0; i < acc->n_must; ++i) { - struct isl_dim *dim; - dim = isl_dim_join(isl_map_get_dim(acc->source[i].map), - isl_dim_reverse(isl_map_get_dim(acc->sink.map))); - dep->dep[2 * i].map = isl_map_empty(dim); - dep->dep[2 * i + 1].map = isl_map_copy(dep->dep[2 * i].map); - dep->dep[2 * i].data = acc->source[i].data; - dep->dep[2 * i + 1].data = acc->source[i].data; - dep->dep[2 * i].must = 1; - dep->dep[2 * i + 1].must = 0; - if (!dep->dep[2 * i].map || !dep->dep[2 * i + 1].map) - goto error; - } - for (i = acc->n_must; i < acc->n_must + acc->n_may; ++i) { - struct isl_dim *dim; - dim = isl_dim_join(isl_map_get_dim(acc->source[i].map), - isl_dim_reverse(isl_map_get_dim(acc->sink.map))); - dep->dep[acc->n_must + i].map = isl_map_empty(dim); - dep->dep[acc->n_must + i].data = acc->source[i].data; - dep->dep[acc->n_must + i].must = 0; - if (!dep->dep[acc->n_must + i].map) - goto error; - } - - return dep; -error: - isl_flow_free(dep); - return NULL; -} - -/* Iterate over all sources and for each resulting flow dependence - * that is not empty, call the user specfied function. - * The second argument in this function call identifies the source, - * while the third argument correspond to the final argument of - * the isl_flow_foreach call. - */ -int isl_flow_foreach(__isl_keep isl_flow *deps, - int (*fn)(__isl_take isl_map *dep, int must, void *dep_user, void *user), - void *user) -{ - int i; - - if (!deps) - return -1; - - for (i = 0; i < deps->n_source; ++i) { - if (isl_map_plain_is_empty(deps->dep[i].map)) - continue; - if (fn(isl_map_copy(deps->dep[i].map), deps->dep[i].must, - deps->dep[i].data, user) < 0) - return -1; - } - - return 0; -} - -/* Return a copy of the subset of the sink for which no source could be found. - */ -__isl_give isl_map *isl_flow_get_no_source(__isl_keep isl_flow *deps, int must) -{ - if (!deps) - return NULL; - - if (must) - return isl_set_unwrap(isl_set_copy(deps->must_no_source)); - else - return isl_set_unwrap(isl_set_copy(deps->may_no_source)); -} - -void isl_flow_free(__isl_take isl_flow *deps) -{ - int i; - - if (!deps) - return; - isl_set_free(deps->must_no_source); - isl_set_free(deps->may_no_source); - if (deps->dep) { - for (i = 0; i < deps->n_source; ++i) - isl_map_free(deps->dep[i].map); - free(deps->dep); - } - free(deps); -} - -isl_ctx *isl_flow_get_ctx(__isl_keep isl_flow *deps) -{ - return deps ? isl_set_get_ctx(deps->must_no_source) : NULL; -} - -/* Return a map that enforces that the domain iteration occurs after - * the range iteration at the given level. - * If level is odd, then the domain iteration should occur after - * the target iteration in their shared level/2 outermost loops. - * In this case we simply need to enforce that these outermost - * loop iterations are the same. - * If level is even, then the loop iterator of the domain should - * be greater than the loop iterator of the range at the last - * of the level/2 shared loops, i.e., loop level/2 - 1. - */ -static __isl_give isl_map *after_at_level(struct isl_dim *dim, int level) -{ - struct isl_basic_map *bmap; - - if (level % 2) - bmap = isl_basic_map_equal(dim, level/2); - else - bmap = isl_basic_map_more_at(dim, level/2 - 1); - - return isl_map_from_basic_map(bmap); -} - -/* Compute the last iteration of must source j that precedes the sink - * at the given level for sink iterations in set_C. - * The subset of set_C for which no such iteration can be found is returned - * in *empty. - */ -static struct isl_map *last_source(struct isl_access_info *acc, - struct isl_set *set_C, - int j, int level, struct isl_set **empty) -{ - struct isl_map *read_map; - struct isl_map *write_map; - struct isl_map *dep_map; - struct isl_map *after; - struct isl_map *result; - - read_map = isl_map_copy(acc->sink.map); - write_map = isl_map_copy(acc->source[j].map); - write_map = isl_map_reverse(write_map); - dep_map = isl_map_apply_range(read_map, write_map); - after = after_at_level(isl_map_get_dim(dep_map), level); - dep_map = isl_map_intersect(dep_map, after); - result = isl_map_partial_lexmax(dep_map, set_C, empty); - result = isl_map_reverse(result); - - return result; -} - -/* For a given mapping between iterations of must source j and iterations - * of the sink, compute the last iteration of must source k preceding - * the sink at level before_level for any of the sink iterations, - * but following the corresponding iteration of must source j at level - * after_level. - */ -static struct isl_map *last_later_source(struct isl_access_info *acc, - struct isl_map *old_map, - int j, int before_level, - int k, int after_level, - struct isl_set **empty) -{ - struct isl_dim *dim; - struct isl_set *set_C; - struct isl_map *read_map; - struct isl_map *write_map; - struct isl_map *dep_map; - struct isl_map *after_write; - struct isl_map *before_read; - struct isl_map *result; - - set_C = isl_map_range(isl_map_copy(old_map)); - read_map = isl_map_copy(acc->sink.map); - write_map = isl_map_copy(acc->source[k].map); - - write_map = isl_map_reverse(write_map); - dep_map = isl_map_apply_range(read_map, write_map); - dim = isl_dim_join(isl_map_get_dim(acc->source[k].map), - isl_dim_reverse(isl_map_get_dim(acc->source[j].map))); - after_write = after_at_level(dim, after_level); - after_write = isl_map_apply_range(after_write, old_map); - after_write = isl_map_reverse(after_write); - dep_map = isl_map_intersect(dep_map, after_write); - before_read = after_at_level(isl_map_get_dim(dep_map), before_level); - dep_map = isl_map_intersect(dep_map, before_read); - result = isl_map_partial_lexmax(dep_map, set_C, empty); - result = isl_map_reverse(result); - - return result; -} - -/* Given a shared_level between two accesses, return 1 if the - * the first can precede the second at the requested target_level. - * If the target level is odd, i.e., refers to a statement level - * dimension, then first needs to precede second at the requested - * level, i.e., shared_level must be equal to target_level. - * If the target level is odd, then the two loops should share - * at least the requested number of outer loops. - */ -static int can_precede_at_level(int shared_level, int target_level) -{ - if (shared_level < target_level) - return 0; - if ((target_level % 2) && shared_level > target_level) - return 0; - return 1; -} - -/* Given a possible flow dependence temp_rel[j] between source j and the sink - * at level sink_level, remove those elements for which - * there is an iteration of another source k < j that is closer to the sink. - * The flow dependences temp_rel[k] are updated with the improved sources. - * Any improved source needs to precede the sink at the same level - * and needs to follow source j at the same or a deeper level. - * The lower this level, the later the execution date of source k. - * We therefore consider lower levels first. - * - * If temp_rel[j] is empty, then there can be no improvement and - * we return immediately. - */ -static int intermediate_sources(__isl_keep isl_access_info *acc, - struct isl_map **temp_rel, int j, int sink_level) -{ - int k, level; - int depth = 2 * isl_map_dim(acc->source[j].map, isl_dim_in) + 1; - - if (isl_map_plain_is_empty(temp_rel[j])) - return 0; - - for (k = j - 1; k >= 0; --k) { - int plevel, plevel2; - plevel = acc->level_before(acc->source[k].data, acc->sink.data); - if (!can_precede_at_level(plevel, sink_level)) - continue; - - plevel2 = acc->level_before(acc->source[j].data, - acc->source[k].data); - - for (level = sink_level; level <= depth; ++level) { - struct isl_map *T; - struct isl_set *trest; - struct isl_map *copy; - - if (!can_precede_at_level(plevel2, level)) - continue; - - copy = isl_map_copy(temp_rel[j]); - T = last_later_source(acc, copy, j, sink_level, k, - level, &trest); - if (isl_map_plain_is_empty(T)) { - isl_set_free(trest); - isl_map_free(T); - continue; - } - temp_rel[j] = isl_map_intersect_range(temp_rel[j], trest); - temp_rel[k] = isl_map_union_disjoint(temp_rel[k], T); - } - } - - return 0; -} - -/* Compute all iterations of may source j that precedes the sink at the given - * level for sink iterations in set_C. - */ -static __isl_give isl_map *all_sources(__isl_keep isl_access_info *acc, - __isl_take isl_set *set_C, int j, int level) -{ - isl_map *read_map; - isl_map *write_map; - isl_map *dep_map; - isl_map *after; - - read_map = isl_map_copy(acc->sink.map); - read_map = isl_map_intersect_domain(read_map, set_C); - write_map = isl_map_copy(acc->source[acc->n_must + j].map); - write_map = isl_map_reverse(write_map); - dep_map = isl_map_apply_range(read_map, write_map); - after = after_at_level(isl_map_get_dim(dep_map), level); - dep_map = isl_map_intersect(dep_map, after); - - return isl_map_reverse(dep_map); -} - -/* For a given mapping between iterations of must source k and iterations - * of the sink, compute the all iteration of may source j preceding - * the sink at level before_level for any of the sink iterations, - * but following the corresponding iteration of must source k at level - * after_level. - */ -static __isl_give isl_map *all_later_sources(__isl_keep isl_access_info *acc, - __isl_keep isl_map *old_map, - int j, int before_level, int k, int after_level) -{ - isl_dim *dim; - isl_set *set_C; - isl_map *read_map; - isl_map *write_map; - isl_map *dep_map; - isl_map *after_write; - isl_map *before_read; - - set_C = isl_map_range(isl_map_copy(old_map)); - read_map = isl_map_copy(acc->sink.map); - read_map = isl_map_intersect_domain(read_map, set_C); - write_map = isl_map_copy(acc->source[acc->n_must + j].map); - - write_map = isl_map_reverse(write_map); - dep_map = isl_map_apply_range(read_map, write_map); - dim = isl_dim_join(isl_map_get_dim(acc->source[acc->n_must + j].map), - isl_dim_reverse(isl_map_get_dim(acc->source[k].map))); - after_write = after_at_level(dim, after_level); - after_write = isl_map_apply_range(after_write, old_map); - after_write = isl_map_reverse(after_write); - dep_map = isl_map_intersect(dep_map, after_write); - before_read = after_at_level(isl_map_get_dim(dep_map), before_level); - dep_map = isl_map_intersect(dep_map, before_read); - return isl_map_reverse(dep_map); -} - -/* Given the must and may dependence relations for the must accesses - * for level sink_level, check if there are any accesses of may access j - * that occur in between and return their union. - * If some of these accesses are intermediate with respect to - * (previously thought to be) must dependences, then these - * must dependences are turned into may dependences. - */ -static __isl_give isl_map *all_intermediate_sources( - __isl_keep isl_access_info *acc, __isl_take isl_map *map, - struct isl_map **must_rel, struct isl_map **may_rel, - int j, int sink_level) -{ - int k, level; - int depth = 2 * isl_map_dim(acc->source[acc->n_must + j].map, - isl_dim_in) + 1; - - for (k = 0; k < acc->n_must; ++k) { - int plevel; - - if (isl_map_plain_is_empty(may_rel[k]) && - isl_map_plain_is_empty(must_rel[k])) - continue; - - plevel = acc->level_before(acc->source[k].data, - acc->source[acc->n_must + j].data); - - for (level = sink_level; level <= depth; ++level) { - isl_map *T; - isl_map *copy; - isl_set *ran; - - if (!can_precede_at_level(plevel, level)) - continue; - - copy = isl_map_copy(may_rel[k]); - T = all_later_sources(acc, copy, j, sink_level, k, level); - map = isl_map_union(map, T); - - copy = isl_map_copy(must_rel[k]); - T = all_later_sources(acc, copy, j, sink_level, k, level); - ran = isl_map_range(isl_map_copy(T)); - map = isl_map_union(map, T); - may_rel[k] = isl_map_union_disjoint(may_rel[k], - isl_map_intersect_range(isl_map_copy(must_rel[k]), - isl_set_copy(ran))); - T = isl_map_from_domain_and_range( - isl_set_universe( - isl_dim_domain(isl_map_get_dim(must_rel[k]))), - ran); - must_rel[k] = isl_map_subtract(must_rel[k], T); - } - } - - return map; -} - -/* Compute dependences for the case where all accesses are "may" - * accesses, which boils down to computing memory based dependences. - * The generic algorithm would also work in this case, but it would - * be overkill to use it. - */ -static __isl_give isl_flow *compute_mem_based_dependences( - __isl_take isl_access_info *acc) -{ - int i; - isl_set *mustdo; - isl_set *maydo; - isl_flow *res; - - res = isl_flow_alloc(acc); - if (!res) - goto error; - - mustdo = isl_map_domain(isl_map_copy(acc->sink.map)); - maydo = isl_set_copy(mustdo); - - for (i = 0; i < acc->n_may; ++i) { - int plevel; - int is_before; - isl_dim *dim; - isl_map *before; - isl_map *dep; - - plevel = acc->level_before(acc->source[i].data, acc->sink.data); - is_before = plevel & 1; - plevel >>= 1; - - dim = isl_map_get_dim(res->dep[i].map); - if (is_before) - before = isl_map_lex_le_first(dim, plevel); - else - before = isl_map_lex_lt_first(dim, plevel); - dep = isl_map_apply_range(isl_map_copy(acc->source[i].map), - isl_map_reverse(isl_map_copy(acc->sink.map))); - dep = isl_map_intersect(dep, before); - mustdo = isl_set_subtract(mustdo, - isl_map_range(isl_map_copy(dep))); - res->dep[i].map = isl_map_union(res->dep[i].map, dep); - } - - res->may_no_source = isl_set_subtract(maydo, isl_set_copy(mustdo)); - res->must_no_source = mustdo; - - isl_access_info_free(acc); - - return res; -error: - isl_access_info_free(acc); - return NULL; -} - -/* Compute dependences for the case where there is at least one - * "must" access. - * - * The core algorithm considers all levels in which a source may precede - * the sink, where a level may either be a statement level or a loop level. - * The outermost statement level is 1, the first loop level is 2, etc... - * The algorithm basically does the following: - * for all levels l of the read access from innermost to outermost - * for all sources w that may precede the sink access at that level - * compute the last iteration of the source that precedes the sink access - * at that level - * add result to possible last accesses at level l of source w - * for all sources w2 that we haven't considered yet at this level that may - * also precede the sink access - * for all levels l2 of w from l to innermost - * for all possible last accesses dep of w at l - * compute last iteration of w2 between the source and sink - * of dep - * add result to possible last accesses at level l of write w2 - * and replace possible last accesses dep by the remainder - * - * - * The above algorithm is applied to the must access. During the course - * of the algorithm, we keep track of sink iterations that still - * need to be considered. These iterations are split into those that - * haven't been matched to any source access (mustdo) and those that have only - * been matched to may accesses (maydo). - * At the end of each level, we also consider the may accesses. - * In particular, we consider may accesses that precede the remaining - * sink iterations, moving elements from mustdo to maydo when appropriate, - * and may accesses that occur between a must source and a sink of any - * dependences found at the current level, turning must dependences into - * may dependences when appropriate. - * - */ -static __isl_give isl_flow *compute_val_based_dependences( - __isl_take isl_access_info *acc) -{ - isl_ctx *ctx; - isl_flow *res; - isl_set *mustdo = NULL; - isl_set *maydo = NULL; - int level, j; - int depth; - isl_map **must_rel = NULL; - isl_map **may_rel = NULL; - - acc = isl_access_info_sort_sources(acc); - if (!acc) - return NULL; - - res = isl_flow_alloc(acc); - if (!res) - goto error; - ctx = isl_map_get_ctx(acc->sink.map); - - depth = 2 * isl_map_dim(acc->sink.map, isl_dim_in) + 1; - mustdo = isl_map_domain(isl_map_copy(acc->sink.map)); - maydo = isl_set_empty_like(mustdo); - if (!mustdo || !maydo) - goto error; - if (isl_set_plain_is_empty(mustdo)) - goto done; - - must_rel = isl_alloc_array(ctx, struct isl_map *, acc->n_must); - may_rel = isl_alloc_array(ctx, struct isl_map *, acc->n_must); - if (!must_rel || !may_rel) - goto error; - - for (level = depth; level >= 1; --level) { - for (j = acc->n_must-1; j >=0; --j) { - must_rel[j] = isl_map_empty_like(res->dep[j].map); - may_rel[j] = isl_map_copy(must_rel[j]); - } - - for (j = acc->n_must - 1; j >= 0; --j) { - struct isl_map *T; - struct isl_set *rest; - int plevel; - - plevel = acc->level_before(acc->source[j].data, - acc->sink.data); - if (!can_precede_at_level(plevel, level)) - continue; - - T = last_source(acc, mustdo, j, level, &rest); - must_rel[j] = isl_map_union_disjoint(must_rel[j], T); - mustdo = rest; - - intermediate_sources(acc, must_rel, j, level); - - T = last_source(acc, maydo, j, level, &rest); - may_rel[j] = isl_map_union_disjoint(may_rel[j], T); - maydo = rest; - - intermediate_sources(acc, may_rel, j, level); - - if (isl_set_plain_is_empty(mustdo) && - isl_set_plain_is_empty(maydo)) - break; - } - for (j = j - 1; j >= 0; --j) { - int plevel; - - plevel = acc->level_before(acc->source[j].data, - acc->sink.data); - if (!can_precede_at_level(plevel, level)) - continue; - - intermediate_sources(acc, must_rel, j, level); - intermediate_sources(acc, may_rel, j, level); - } - - for (j = 0; j < acc->n_may; ++j) { - int plevel; - isl_map *T; - isl_set *ran; - - plevel = acc->level_before(acc->source[acc->n_must + j].data, - acc->sink.data); - if (!can_precede_at_level(plevel, level)) - continue; - - T = all_sources(acc, isl_set_copy(maydo), j, level); - res->dep[2 * acc->n_must + j].map = - isl_map_union(res->dep[2 * acc->n_must + j].map, T); - T = all_sources(acc, isl_set_copy(mustdo), j, level); - ran = isl_map_range(isl_map_copy(T)); - res->dep[2 * acc->n_must + j].map = - isl_map_union(res->dep[2 * acc->n_must + j].map, T); - mustdo = isl_set_subtract(mustdo, isl_set_copy(ran)); - maydo = isl_set_union_disjoint(maydo, ran); - - T = res->dep[2 * acc->n_must + j].map; - T = all_intermediate_sources(acc, T, must_rel, may_rel, - j, level); - res->dep[2 * acc->n_must + j].map = T; - } - - for (j = acc->n_must - 1; j >= 0; --j) { - res->dep[2 * j].map = - isl_map_union_disjoint(res->dep[2 * j].map, - must_rel[j]); - res->dep[2 * j + 1].map = - isl_map_union_disjoint(res->dep[2 * j + 1].map, - may_rel[j]); - } - - if (isl_set_plain_is_empty(mustdo) && - isl_set_plain_is_empty(maydo)) - break; - } - - free(must_rel); - free(may_rel); -done: - res->must_no_source = mustdo; - res->may_no_source = maydo; - isl_access_info_free(acc); - return res; -error: - isl_access_info_free(acc); - isl_flow_free(res); - isl_set_free(mustdo); - isl_set_free(maydo); - free(must_rel); - free(may_rel); - return NULL; -} - -/* Given a "sink" access, a list of n "source" accesses, - * compute for each iteration of the sink access - * and for each element accessed by that iteration, - * the source access in the list that last accessed the - * element accessed by the sink access before this sink access. - * Each access is given as a map from the loop iterators - * to the array indices. - * The result is a list of n relations between source and sink - * iterations and a subset of the domain of the sink access, - * corresponding to those iterations that access an element - * not previously accessed. - * - * To deal with multi-valued sink access relations, the sink iteration - * domain is first extended with dimensions that correspond to the data - * space. After the computation is finished, these extra dimensions are - * projected out again. - */ -__isl_give isl_flow *isl_access_info_compute_flow(__isl_take isl_access_info *acc) -{ - int j; - struct isl_flow *res; - isl_map *domain_map = NULL; - - if (!acc) - return NULL; - - domain_map = isl_map_domain_map(isl_map_copy(acc->sink.map)); - acc->sink.map = isl_map_range_map(acc->sink.map); - if (!acc->sink.map) - goto error; - - if (acc->n_must == 0) - res = compute_mem_based_dependences(acc); - else - res = compute_val_based_dependences(acc); - if (!res) - return NULL; - - for (j = 0; j < res->n_source; ++j) { - res->dep[j].map = isl_map_apply_range(res->dep[j].map, - isl_map_copy(domain_map)); - if (!res->dep[j].map) - goto error2; - } - if (!res->must_no_source || !res->may_no_source) - goto error2; - - isl_map_free(domain_map); - return res; -error: - isl_map_free(domain_map); - isl_access_info_free(acc); - return NULL; -error2: - isl_map_free(domain_map); - isl_flow_free(res); - return NULL; -} - - -/* Keep track of some information about a schedule for a given - * access. In particular, keep track of which dimensions - * have a constant value and of the actual constant values. - */ -struct isl_sched_info { - int *is_cst; - isl_vec *cst; -}; - -static void sched_info_free(__isl_take struct isl_sched_info *info) -{ - if (!info) - return; - isl_vec_free(info->cst); - free(info->is_cst); - free(info); -} - -/* Extract information on the constant dimensions of the schedule - * for a given access. The "map" is of the form - * - * [S -> D] -> A - * - * with S the schedule domain, D the iteration domain and A the data domain. - */ -static __isl_give struct isl_sched_info *sched_info_alloc( - __isl_keep isl_map *map) -{ - isl_ctx *ctx; - isl_dim *dim; - struct isl_sched_info *info; - int i, n; - - if (!map) - return NULL; - - dim = isl_dim_unwrap(isl_dim_domain(isl_map_get_dim(map))); - if (!dim) - return NULL; - n = isl_dim_size(dim, isl_dim_in); - isl_dim_free(dim); - - ctx = isl_map_get_ctx(map); - info = isl_alloc_type(ctx, struct isl_sched_info); - if (!info) - return NULL; - info->is_cst = isl_alloc_array(ctx, int, n); - info->cst = isl_vec_alloc(ctx, n); - if (!info->is_cst || !info->cst) - goto error; - - for (i = 0; i < n; ++i) - info->is_cst[i] = isl_map_plain_is_fixed(map, isl_dim_in, i, - &info->cst->el[i]); - - return info; -error: - sched_info_free(info); - return NULL; -} - -struct isl_compute_flow_data { - isl_union_map *must_source; - isl_union_map *may_source; - isl_union_map *must_dep; - isl_union_map *may_dep; - isl_union_map *must_no_source; - isl_union_map *may_no_source; - - int count; - int must; - isl_dim *dim; - struct isl_sched_info *sink_info; - struct isl_sched_info **source_info; - isl_access_info *accesses; -}; - -static int count_matching_array(__isl_take isl_map *map, void *user) -{ - int eq; - isl_dim *dim; - struct isl_compute_flow_data *data; - - data = (struct isl_compute_flow_data *)user; - - dim = isl_dim_range(isl_map_get_dim(map)); - - eq = isl_dim_equal(dim, data->dim); - - isl_dim_free(dim); - isl_map_free(map); - - if (eq < 0) - return -1; - if (eq) - data->count++; - - return 0; -} - -static int collect_matching_array(__isl_take isl_map *map, void *user) -{ - int eq; - isl_dim *dim; - struct isl_sched_info *info; - struct isl_compute_flow_data *data; - - data = (struct isl_compute_flow_data *)user; - - dim = isl_dim_range(isl_map_get_dim(map)); - - eq = isl_dim_equal(dim, data->dim); - - isl_dim_free(dim); - - if (eq < 0) - goto error; - if (!eq) { - isl_map_free(map); - return 0; - } - - info = sched_info_alloc(map); - data->source_info[data->count] = info; - - data->accesses = isl_access_info_add_source(data->accesses, - map, data->must, info); - - data->count++; - - return 0; -error: - isl_map_free(map); - return -1; -} - -/* Determine the shared nesting level and the "textual order" of - * the given accesses. - * - * We first determine the minimal schedule dimension for both accesses. - * - * If among those dimensions, we can find one where both have a fixed - * value and if moreover those values are different, then the previous - * dimension is the last shared nesting level and the textual order - * is determined based on the order of the fixed values. - * If no such fixed values can be found, then we set the shared - * nesting level to the minimal schedule dimension, with no textual ordering. - */ -static int before(void *first, void *second) -{ - struct isl_sched_info *info1 = first; - struct isl_sched_info *info2 = second; - int n1, n2; - int i; - - n1 = info1->cst->size; - n2 = info2->cst->size; - - if (n2 < n1) - n1 = n2; - - for (i = 0; i < n1; ++i) { - if (!info1->is_cst[i]) - continue; - if (!info2->is_cst[i]) - continue; - if (isl_int_eq(info1->cst->el[i], info2->cst->el[i])) - continue; - return 2 * i + isl_int_lt(info1->cst->el[i], info2->cst->el[i]); - } - - return 2 * n1; -} - -/* Given a sink access, look for all the source accesses that access - * the same array and perform dataflow analysis on them using - * isl_access_info_compute_flow. - */ -static int compute_flow(__isl_take isl_map *map, void *user) -{ - int i; - isl_ctx *ctx; - struct isl_compute_flow_data *data; - isl_flow *flow; - - data = (struct isl_compute_flow_data *)user; - - ctx = isl_map_get_ctx(map); - - data->accesses = NULL; - data->sink_info = NULL; - data->source_info = NULL; - data->count = 0; - data->dim = isl_dim_range(isl_map_get_dim(map)); - - if (isl_union_map_foreach_map(data->must_source, - &count_matching_array, data) < 0) - goto error; - if (isl_union_map_foreach_map(data->may_source, - &count_matching_array, data) < 0) - goto error; - - data->sink_info = sched_info_alloc(map); - data->source_info = isl_calloc_array(ctx, struct isl_sched_info *, - data->count); - - data->accesses = isl_access_info_alloc(isl_map_copy(map), - data->sink_info, &before, data->count); - if (!data->sink_info || !data->source_info || !data->accesses) - goto error; - data->count = 0; - data->must = 1; - if (isl_union_map_foreach_map(data->must_source, - &collect_matching_array, data) < 0) - goto error; - data->must = 0; - if (isl_union_map_foreach_map(data->may_source, - &collect_matching_array, data) < 0) - goto error; - - flow = isl_access_info_compute_flow(data->accesses); - data->accesses = NULL; - - if (!flow) - goto error; - - data->must_no_source = isl_union_map_union(data->must_no_source, - isl_union_map_from_map(isl_flow_get_no_source(flow, 1))); - data->may_no_source = isl_union_map_union(data->may_no_source, - isl_union_map_from_map(isl_flow_get_no_source(flow, 0))); - - for (i = 0; i < flow->n_source; ++i) { - isl_union_map *dep; - dep = isl_union_map_from_map(isl_map_copy(flow->dep[i].map)); - if (flow->dep[i].must) - data->must_dep = isl_union_map_union(data->must_dep, dep); - else - data->may_dep = isl_union_map_union(data->may_dep, dep); - } - - isl_flow_free(flow); - - sched_info_free(data->sink_info); - if (data->source_info) { - for (i = 0; i < data->count; ++i) - sched_info_free(data->source_info[i]); - free(data->source_info); - } - isl_dim_free(data->dim); - isl_map_free(map); - - return 0; -error: - isl_access_info_free(data->accesses); - sched_info_free(data->sink_info); - if (data->source_info) { - for (i = 0; i < data->count; ++i) - sched_info_free(data->source_info[i]); - free(data->source_info); - } - isl_dim_free(data->dim); - isl_map_free(map); - - return -1; -} - -/* Given a collection of "sink" and "source" accesses, - * compute for each iteration of a sink access - * and for each element accessed by that iteration, - * the source access in the list that last accessed the - * element accessed by the sink access before this sink access. - * Each access is given as a map from the loop iterators - * to the array indices. - * The result is a relations between source and sink - * iterations and a subset of the domain of the sink accesses, - * corresponding to those iterations that access an element - * not previously accessed. - * - * We first prepend the schedule dimensions to the domain - * of the accesses so that we can easily compare their relative order. - * Then we consider each sink access individually in compute_flow. - */ -int isl_union_map_compute_flow(__isl_take isl_union_map *sink, - __isl_take isl_union_map *must_source, - __isl_take isl_union_map *may_source, - __isl_take isl_union_map *schedule, - __isl_give isl_union_map **must_dep, __isl_give isl_union_map **may_dep, - __isl_give isl_union_map **must_no_source, - __isl_give isl_union_map **may_no_source) -{ - isl_dim *dim; - isl_union_map *range_map = NULL; - struct isl_compute_flow_data data; - - sink = isl_union_map_align_params(sink, - isl_union_map_get_dim(must_source)); - sink = isl_union_map_align_params(sink, - isl_union_map_get_dim(may_source)); - sink = isl_union_map_align_params(sink, - isl_union_map_get_dim(schedule)); - dim = isl_union_map_get_dim(sink); - must_source = isl_union_map_align_params(must_source, isl_dim_copy(dim)); - may_source = isl_union_map_align_params(may_source, isl_dim_copy(dim)); - schedule = isl_union_map_align_params(schedule, isl_dim_copy(dim)); - - schedule = isl_union_map_reverse(schedule); - range_map = isl_union_map_range_map(schedule); - schedule = isl_union_map_reverse(isl_union_map_copy(range_map)); - sink = isl_union_map_apply_domain(sink, isl_union_map_copy(schedule)); - must_source = isl_union_map_apply_domain(must_source, - isl_union_map_copy(schedule)); - may_source = isl_union_map_apply_domain(may_source, schedule); - - data.must_source = must_source; - data.may_source = may_source; - data.must_dep = must_dep ? - isl_union_map_empty(isl_dim_copy(dim)) : NULL; - data.may_dep = may_dep ? isl_union_map_empty(isl_dim_copy(dim)) : NULL; - data.must_no_source = must_no_source ? - isl_union_map_empty(isl_dim_copy(dim)) : NULL; - data.may_no_source = may_no_source ? - isl_union_map_empty(isl_dim_copy(dim)) : NULL; - - isl_dim_free(dim); - - if (isl_union_map_foreach_map(sink, &compute_flow, &data) < 0) - goto error; - - isl_union_map_free(sink); - isl_union_map_free(must_source); - isl_union_map_free(may_source); - - if (must_dep) { - data.must_dep = isl_union_map_apply_domain(data.must_dep, - isl_union_map_copy(range_map)); - data.must_dep = isl_union_map_apply_range(data.must_dep, - isl_union_map_copy(range_map)); - *must_dep = data.must_dep; - } - if (may_dep) { - data.may_dep = isl_union_map_apply_domain(data.may_dep, - isl_union_map_copy(range_map)); - data.may_dep = isl_union_map_apply_range(data.may_dep, - isl_union_map_copy(range_map)); - *may_dep = data.may_dep; - } - if (must_no_source) { - data.must_no_source = isl_union_map_apply_domain( - data.must_no_source, isl_union_map_copy(range_map)); - *must_no_source = data.must_no_source; - } - if (may_no_source) { - data.may_no_source = isl_union_map_apply_domain( - data.may_no_source, isl_union_map_copy(range_map)); - *may_no_source = data.may_no_source; - } - - isl_union_map_free(range_map); - - return 0; -error: - isl_union_map_free(range_map); - isl_union_map_free(sink); - isl_union_map_free(must_source); - isl_union_map_free(may_source); - isl_union_map_free(data.must_dep); - isl_union_map_free(data.may_dep); - isl_union_map_free(data.must_no_source); - isl_union_map_free(data.may_no_source); - - if (must_dep) - *must_dep = NULL; - if (may_dep) - *may_dep = NULL; - if (must_no_source) - *must_no_source = NULL; - if (may_no_source) - *may_no_source = NULL; - return -1; -} diff --git a/cloog-0.16.3/isl/isl_fold.c b/cloog-0.16.3/isl/isl_fold.c deleted file mode 100644 index dbf0578..0000000 --- a/cloog-0.16.3/isl/isl_fold.c +++ /dev/null @@ -1,1583 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -enum isl_fold isl_fold_type_negate(enum isl_fold type) -{ - switch (type) { - case isl_fold_min: - return isl_fold_max; - case isl_fold_max: - return isl_fold_min; - case isl_fold_list: - return isl_fold_list; - } - - isl_die(NULL, isl_error_internal, "unhandled isl_fold type", abort()); -} - -static __isl_give isl_qpolynomial_fold *qpolynomial_fold_alloc( - enum isl_fold type, __isl_take isl_dim *dim, int n) -{ - isl_qpolynomial_fold *fold; - - if (!dim) - goto error; - - isl_assert(dim->ctx, n >= 0, goto error); - fold = isl_calloc(dim->ctx, struct isl_qpolynomial_fold, - sizeof(struct isl_qpolynomial_fold) + - (n - 1) * sizeof(struct isl_qpolynomial *)); - if (!fold) - goto error; - - fold->ref = 1; - fold->size = n; - fold->n = 0; - fold->type = type; - fold->dim = dim; - - return fold; -error: - isl_dim_free(dim); - return NULL; -} - -isl_ctx *isl_qpolynomial_fold_get_ctx(__isl_keep isl_qpolynomial_fold *fold) -{ - return fold ? fold->dim->ctx : NULL; -} - -__isl_give isl_dim *isl_qpolynomial_fold_get_dim( - __isl_keep isl_qpolynomial_fold *fold) -{ - return fold ? isl_dim_copy(fold->dim) : NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_reset_dim( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_dim *dim) -{ - int i; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold || !dim) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_reset_dim(fold->qp[i], - isl_dim_copy(dim)); - if (!fold->qp[i]) - goto error; - } - - isl_dim_free(fold->dim); - fold->dim = dim; - - return fold; -error: - isl_qpolynomial_fold_free(fold); - isl_dim_free(dim); - return NULL; -} - -int isl_qpolynomial_fold_involves_dims(__isl_keep isl_qpolynomial_fold *fold, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!fold) - return -1; - if (fold->n == 0 || n == 0) - return 0; - - for (i = 0; i < fold->n; ++i) { - int involves = isl_qpolynomial_involves_dims(fold->qp[i], - type, first, n); - if (involves < 0 || involves) - return involves; - } - return 0; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_set_dim_name( - __isl_take isl_qpolynomial_fold *fold, - enum isl_dim_type type, unsigned pos, const char *s) -{ - int i; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - fold->dim = isl_dim_set_name(fold->dim, type, pos, s); - if (!fold->dim) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_set_dim_name(fold->qp[i], - type, pos, s); - if (!fold->qp[i]) - goto error; - } - - return fold; -error: - isl_qpolynomial_fold_free(fold); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_drop_dims( - __isl_take isl_qpolynomial_fold *fold, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!fold) - return NULL; - if (n == 0) - return fold; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - fold->dim = isl_dim_drop(fold->dim, type, first, n); - if (!fold->dim) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_drop_dims(fold->qp[i], - type, first, n); - if (!fold->qp[i]) - goto error; - } - - return fold; -error: - isl_qpolynomial_fold_free(fold); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_insert_dims( - __isl_take isl_qpolynomial_fold *fold, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!fold) - return NULL; - if (n == 0 && !isl_dim_is_named_or_nested(fold->dim, type)) - return fold; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - fold->dim = isl_dim_insert(fold->dim, type, first, n); - if (!fold->dim) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_insert_dims(fold->qp[i], - type, first, n); - if (!fold->qp[i]) - goto error; - } - - return fold; -error: - isl_qpolynomial_fold_free(fold); - return NULL; -} - -static int isl_qpolynomial_cst_sign(__isl_keep isl_qpolynomial *qp) -{ - struct isl_upoly_cst *cst; - - cst = isl_upoly_as_cst(qp->upoly); - if (!cst) - return 0; - - return isl_int_sgn(cst->n) < 0 ? -1 : 1; -} - -static int isl_qpolynomial_aff_sign(__isl_keep isl_set *set, - __isl_keep isl_qpolynomial *qp) -{ - enum isl_lp_result res; - isl_vec *aff; - isl_int opt; - int sgn = 0; - - aff = isl_qpolynomial_extract_affine(qp); - if (!aff) - return 0; - - isl_int_init(opt); - - res = isl_set_solve_lp(set, 0, aff->el + 1, aff->el[0], - &opt, NULL, NULL); - if (res == isl_lp_error) - goto done; - if (res == isl_lp_empty || - (res == isl_lp_ok && !isl_int_is_neg(opt))) { - sgn = 1; - goto done; - } - - res = isl_set_solve_lp(set, 1, aff->el + 1, aff->el[0], - &opt, NULL, NULL); - if (res == isl_lp_ok && !isl_int_is_pos(opt)) - sgn = -1; - -done: - isl_int_clear(opt); - isl_vec_free(aff); - return sgn; -} - -/* Determine, if possible, the sign of the quasipolynomial "qp" on - * the domain "set". - * - * If qp is a constant, then the problem is trivial. - * If qp is linear, then we check if the minimum of the corresponding - * affine constraint is non-negative or if the maximum is non-positive. - * - * Otherwise, we check if the outermost variable "v" has a lower bound "l" - * in "set". If so, we write qp(v,v') as - * - * q(v,v') * (v - l) + r(v') - * - * if q(v,v') and r(v') have the same known sign, then the original - * quasipolynomial has the same sign as well. - * - * Return - * -1 if qp <= 0 - * 1 if qp >= 0 - * 0 if unknown - */ -static int isl_qpolynomial_sign(__isl_keep isl_set *set, - __isl_keep isl_qpolynomial *qp) -{ - int d; - int i; - int is; - struct isl_upoly_rec *rec; - isl_vec *v; - isl_int l; - enum isl_lp_result res; - int sgn = 0; - - is = isl_qpolynomial_is_cst(qp, NULL, NULL); - if (is < 0) - return 0; - if (is) - return isl_qpolynomial_cst_sign(qp); - - is = isl_qpolynomial_is_affine(qp); - if (is < 0) - return 0; - if (is) - return isl_qpolynomial_aff_sign(set, qp); - - if (qp->div->n_row > 0) - return 0; - - rec = isl_upoly_as_rec(qp->upoly); - if (!rec) - return 0; - - d = isl_dim_total(qp->dim); - v = isl_vec_alloc(set->ctx, 2 + d); - if (!v) - return 0; - - isl_seq_clr(v->el + 1, 1 + d); - isl_int_set_si(v->el[0], 1); - isl_int_set_si(v->el[2 + qp->upoly->var], 1); - - isl_int_init(l); - - res = isl_set_solve_lp(set, 0, v->el + 1, v->el[0], &l, NULL, NULL); - if (res == isl_lp_ok) { - isl_qpolynomial *min; - isl_qpolynomial *base; - isl_qpolynomial *r, *q; - isl_qpolynomial *t; - - min = isl_qpolynomial_cst(isl_dim_copy(qp->dim), l); - base = isl_qpolynomial_var_pow(isl_dim_copy(qp->dim), - qp->upoly->var, 1); - - r = isl_qpolynomial_alloc(isl_dim_copy(qp->dim), 0, - isl_upoly_copy(rec->p[rec->n - 1])); - q = isl_qpolynomial_copy(r); - - for (i = rec->n - 2; i >= 0; --i) { - r = isl_qpolynomial_mul(r, isl_qpolynomial_copy(min)); - t = isl_qpolynomial_alloc(isl_dim_copy(qp->dim), 0, - isl_upoly_copy(rec->p[i])); - r = isl_qpolynomial_add(r, t); - if (i == 0) - break; - q = isl_qpolynomial_mul(q, isl_qpolynomial_copy(base)); - q = isl_qpolynomial_add(q, isl_qpolynomial_copy(r)); - } - - if (isl_qpolynomial_is_zero(q)) - sgn = isl_qpolynomial_sign(set, r); - else if (isl_qpolynomial_is_zero(r)) - sgn = isl_qpolynomial_sign(set, q); - else { - int sgn_q, sgn_r; - sgn_r = isl_qpolynomial_sign(set, r); - sgn_q = isl_qpolynomial_sign(set, q); - if (sgn_r == sgn_q) - sgn = sgn_r; - } - - isl_qpolynomial_free(min); - isl_qpolynomial_free(base); - isl_qpolynomial_free(q); - isl_qpolynomial_free(r); - } - - isl_int_clear(l); - - isl_vec_free(v); - - return sgn; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_fold_on_domain( - __isl_keep isl_set *set, - __isl_take isl_qpolynomial_fold *fold1, - __isl_take isl_qpolynomial_fold *fold2) -{ - int i, j; - int n1; - struct isl_qpolynomial_fold *res = NULL; - int better; - - if (!fold1 || !fold2) - goto error; - - isl_assert(fold1->dim->ctx, fold1->type == fold2->type, goto error); - isl_assert(fold1->dim->ctx, isl_dim_equal(fold1->dim, fold2->dim), - goto error); - - better = fold1->type == isl_fold_max ? -1 : 1; - - if (isl_qpolynomial_fold_is_empty(fold1)) { - isl_qpolynomial_fold_free(fold1); - return fold2; - } - - if (isl_qpolynomial_fold_is_empty(fold2)) { - isl_qpolynomial_fold_free(fold2); - return fold1; - } - - res = qpolynomial_fold_alloc(fold1->type, isl_dim_copy(fold1->dim), - fold1->n + fold2->n); - if (!res) - goto error; - - for (i = 0; i < fold1->n; ++i) { - res->qp[res->n] = isl_qpolynomial_copy(fold1->qp[i]); - if (!res->qp[res->n]) - goto error; - res->n++; - } - n1 = res->n; - - for (i = 0; i < fold2->n; ++i) { - for (j = n1 - 1; j >= 0; --j) { - isl_qpolynomial *d; - int sgn; - d = isl_qpolynomial_sub( - isl_qpolynomial_copy(res->qp[j]), - isl_qpolynomial_copy(fold2->qp[i])); - sgn = isl_qpolynomial_sign(set, d); - isl_qpolynomial_free(d); - if (sgn == 0) - continue; - if (sgn != better) - break; - isl_qpolynomial_free(res->qp[j]); - if (j != n1 - 1) - res->qp[j] = res->qp[n1 - 1]; - n1--; - if (n1 != res->n - 1) - res->qp[n1] = res->qp[res->n - 1]; - res->n--; - } - if (j >= 0) - continue; - res->qp[res->n] = isl_qpolynomial_copy(fold2->qp[i]); - if (!res->qp[res->n]) - goto error; - res->n++; - } - - isl_qpolynomial_fold_free(fold1); - isl_qpolynomial_fold_free(fold2); - - return res; -error: - isl_qpolynomial_fold_free(res); - isl_qpolynomial_fold_free(fold1); - isl_qpolynomial_fold_free(fold2); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_add_qpolynomial( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_qpolynomial *qp) -{ - int i; - - if (!fold || !qp) - goto error; - - if (isl_qpolynomial_is_zero(qp)) { - isl_qpolynomial_free(qp); - return fold; - } - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_add(fold->qp[i], - isl_qpolynomial_copy(qp)); - if (!fold->qp[i]) - goto error; - } - - isl_qpolynomial_free(qp); - return fold; -error: - isl_qpolynomial_fold_free(fold); - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_add_on_domain( - __isl_keep isl_set *dom, - __isl_take isl_qpolynomial_fold *fold1, - __isl_take isl_qpolynomial_fold *fold2) -{ - int i; - isl_qpolynomial_fold *res = NULL; - - if (!fold1 || !fold2) - goto error; - - if (isl_qpolynomial_fold_is_empty(fold1)) { - isl_qpolynomial_fold_free(fold1); - return fold2; - } - - if (isl_qpolynomial_fold_is_empty(fold2)) { - isl_qpolynomial_fold_free(fold2); - return fold1; - } - - if (fold1->n == 1 && fold2->n != 1) - return isl_qpolynomial_fold_add_on_domain(dom, fold2, fold1); - - if (fold2->n == 1) { - res = isl_qpolynomial_fold_add_qpolynomial(fold1, - isl_qpolynomial_copy(fold2->qp[0])); - isl_qpolynomial_fold_free(fold2); - return res; - } - - res = isl_qpolynomial_fold_add_qpolynomial( - isl_qpolynomial_fold_copy(fold1), - isl_qpolynomial_copy(fold2->qp[0])); - - for (i = 1; i < fold2->n; ++i) { - isl_qpolynomial_fold *res_i; - res_i = isl_qpolynomial_fold_add_qpolynomial( - isl_qpolynomial_fold_copy(fold1), - isl_qpolynomial_copy(fold2->qp[i])); - res = isl_qpolynomial_fold_fold_on_domain(dom, res, res_i); - } - - isl_qpolynomial_fold_free(fold1); - isl_qpolynomial_fold_free(fold2); - return res; -error: - isl_qpolynomial_fold_free(res); - isl_qpolynomial_fold_free(fold1); - isl_qpolynomial_fold_free(fold2); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_substitute_equalities( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_basic_set *eq) -{ - int i; - - if (!fold || !eq) - goto error; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_substitute_equalities(fold->qp[i], - isl_basic_set_copy(eq)); - if (!fold->qp[i]) - goto error; - } - - isl_basic_set_free(eq); - return fold; -error: - isl_basic_set_free(eq); - isl_qpolynomial_fold_free(fold); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_gist( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *context) -{ - int i; - - if (!fold || !context) - goto error; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_gist(fold->qp[i], - isl_set_copy(context)); - if (!fold->qp[i]) - goto error; - } - - isl_set_free(context); - return fold; -error: - isl_set_free(context); - isl_qpolynomial_fold_free(fold); - return NULL; -} - -#define HAS_TYPE - -#undef PW -#define PW isl_pw_qpolynomial_fold -#undef EL -#define EL isl_qpolynomial_fold -#undef EL_IS_ZERO -#define EL_IS_ZERO is_empty -#undef ZERO -#define ZERO zero -#undef IS_ZERO -#define IS_ZERO is_zero -#undef FIELD -#define FIELD fold - -#define NO_NEG - -#include - -#undef UNION -#define UNION isl_union_pw_qpolynomial_fold -#undef PART -#define PART isl_pw_qpolynomial_fold -#undef PARTS -#define PARTS pw_qpolynomial_fold - -#include - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_empty(enum isl_fold type, - __isl_take isl_dim *dim) -{ - return qpolynomial_fold_alloc(type, dim, 0); -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_alloc( - enum isl_fold type, __isl_take isl_qpolynomial *qp) -{ - isl_qpolynomial_fold *fold; - - if (!qp) - return NULL; - - fold = qpolynomial_fold_alloc(type, isl_dim_copy(qp->dim), 1); - if (!fold) - goto error; - - fold->qp[0] = qp; - fold->n++; - - return fold; -error: - isl_qpolynomial_fold_free(fold); - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_copy( - __isl_keep isl_qpolynomial_fold *fold) -{ - if (!fold) - return NULL; - - fold->ref++; - return fold; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_dup( - __isl_keep isl_qpolynomial_fold *fold) -{ - int i; - isl_qpolynomial_fold *dup; - - if (!fold) - return NULL; - dup = qpolynomial_fold_alloc(fold->type, - isl_dim_copy(fold->dim), fold->n); - if (!dup) - return NULL; - - dup->n = fold->n; - for (i = 0; i < fold->n; ++i) { - dup->qp[i] = isl_qpolynomial_copy(fold->qp[i]); - if (!dup->qp[i]) - goto error; - } - - return dup; -error: - isl_qpolynomial_fold_free(dup); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_cow( - __isl_take isl_qpolynomial_fold *fold) -{ - if (!fold) - return NULL; - - if (fold->ref == 1) - return fold; - fold->ref--; - return isl_qpolynomial_fold_dup(fold); -} - -void isl_qpolynomial_fold_free(__isl_take isl_qpolynomial_fold *fold) -{ - int i; - - if (!fold) - return; - if (--fold->ref > 0) - return; - - for (i = 0; i < fold->n; ++i) - isl_qpolynomial_free(fold->qp[i]); - isl_dim_free(fold->dim); - free(fold); -} - -int isl_qpolynomial_fold_is_empty(__isl_keep isl_qpolynomial_fold *fold) -{ - if (!fold) - return -1; - - return fold->n == 0; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_fold( - __isl_take isl_qpolynomial_fold *fold1, - __isl_take isl_qpolynomial_fold *fold2) -{ - int i; - struct isl_qpolynomial_fold *res = NULL; - - if (!fold1 || !fold2) - goto error; - - isl_assert(fold1->dim->ctx, fold1->type == fold2->type, goto error); - isl_assert(fold1->dim->ctx, isl_dim_equal(fold1->dim, fold2->dim), - goto error); - - if (isl_qpolynomial_fold_is_empty(fold1)) { - isl_qpolynomial_fold_free(fold1); - return fold2; - } - - if (isl_qpolynomial_fold_is_empty(fold2)) { - isl_qpolynomial_fold_free(fold2); - return fold1; - } - - res = qpolynomial_fold_alloc(fold1->type, isl_dim_copy(fold1->dim), - fold1->n + fold2->n); - if (!res) - goto error; - - for (i = 0; i < fold1->n; ++i) { - res->qp[res->n] = isl_qpolynomial_copy(fold1->qp[i]); - if (!res->qp[res->n]) - goto error; - res->n++; - } - - for (i = 0; i < fold2->n; ++i) { - res->qp[res->n] = isl_qpolynomial_copy(fold2->qp[i]); - if (!res->qp[res->n]) - goto error; - res->n++; - } - - isl_qpolynomial_fold_free(fold1); - isl_qpolynomial_fold_free(fold2); - - return res; -error: - isl_qpolynomial_fold_free(res); - isl_qpolynomial_fold_free(fold1); - isl_qpolynomial_fold_free(fold2); - return NULL; -} - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_fold( - __isl_take isl_pw_qpolynomial_fold *pw1, - __isl_take isl_pw_qpolynomial_fold *pw2) -{ - int i, j, n; - struct isl_pw_qpolynomial_fold *res; - isl_set *set; - - if (!pw1 || !pw2) - goto error; - - isl_assert(pw1->dim->ctx, isl_dim_equal(pw1->dim, pw2->dim), goto error); - - if (isl_pw_qpolynomial_fold_is_zero(pw1)) { - isl_pw_qpolynomial_fold_free(pw1); - return pw2; - } - - if (isl_pw_qpolynomial_fold_is_zero(pw2)) { - isl_pw_qpolynomial_fold_free(pw2); - return pw1; - } - - if (pw1->type != pw2->type) - isl_die(pw1->dim->ctx, isl_error_invalid, - "fold types don't match", goto error); - - n = (pw1->n + 1) * (pw2->n + 1); - res = isl_pw_qpolynomial_fold_alloc_(isl_dim_copy(pw1->dim), - pw1->type, n); - - for (i = 0; i < pw1->n; ++i) { - set = isl_set_copy(pw1->p[i].set); - for (j = 0; j < pw2->n; ++j) { - struct isl_set *common; - isl_qpolynomial_fold *sum; - set = isl_set_subtract(set, - isl_set_copy(pw2->p[j].set)); - common = isl_set_intersect(isl_set_copy(pw1->p[i].set), - isl_set_copy(pw2->p[j].set)); - if (isl_set_plain_is_empty(common)) { - isl_set_free(common); - continue; - } - - sum = isl_qpolynomial_fold_fold_on_domain(common, - isl_qpolynomial_fold_copy(pw1->p[i].fold), - isl_qpolynomial_fold_copy(pw2->p[j].fold)); - - res = isl_pw_qpolynomial_fold_add_piece(res, common, sum); - } - res = isl_pw_qpolynomial_fold_add_piece(res, set, - isl_qpolynomial_fold_copy(pw1->p[i].fold)); - } - - for (j = 0; j < pw2->n; ++j) { - set = isl_set_copy(pw2->p[j].set); - for (i = 0; i < pw1->n; ++i) - set = isl_set_subtract(set, isl_set_copy(pw1->p[i].set)); - res = isl_pw_qpolynomial_fold_add_piece(res, set, - isl_qpolynomial_fold_copy(pw2->p[j].fold)); - } - - isl_pw_qpolynomial_fold_free(pw1); - isl_pw_qpolynomial_fold_free(pw2); - - return res; -error: - isl_pw_qpolynomial_fold_free(pw1); - isl_pw_qpolynomial_fold_free(pw2); - return NULL; -} - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold( - __isl_take isl_union_pw_qpolynomial_fold *u, - __isl_take isl_pw_qpolynomial_fold *part) -{ - uint32_t hash; - struct isl_hash_table_entry *entry; - - u = isl_union_pw_qpolynomial_fold_cow(u); - - if (!part || !u) - goto error; - - isl_assert(u->dim->ctx, isl_dim_match(part->dim, isl_dim_param, u->dim, - isl_dim_param), goto error); - - hash = isl_dim_get_hash(part->dim); - entry = isl_hash_table_find(u->dim->ctx, &u->table, hash, - &has_dim, part->dim, 1); - if (!entry) - goto error; - - if (!entry->data) - entry->data = part; - else { - entry->data = isl_pw_qpolynomial_fold_fold(entry->data, - isl_pw_qpolynomial_fold_copy(part)); - if (!entry->data) - goto error; - isl_pw_qpolynomial_fold_free(part); - } - - return u; -error: - isl_pw_qpolynomial_fold_free(part); - isl_union_pw_qpolynomial_fold_free(u); - return NULL; -} - -static int fold_part(__isl_take isl_pw_qpolynomial_fold *part, void *user) -{ - isl_union_pw_qpolynomial_fold **u; - u = (isl_union_pw_qpolynomial_fold **)user; - - *u = isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold(*u, part); - - return 0; -} - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_fold( - __isl_take isl_union_pw_qpolynomial_fold *u1, - __isl_take isl_union_pw_qpolynomial_fold *u2) -{ - u1 = isl_union_pw_qpolynomial_fold_cow(u1); - - if (!u1 || !u2) - goto error; - - if (isl_union_pw_qpolynomial_fold_foreach_pw_qpolynomial_fold(u2, - &fold_part, &u1) < 0) - goto error; - - isl_union_pw_qpolynomial_fold_free(u2); - - return u1; -error: - isl_union_pw_qpolynomial_fold_free(u1); - isl_union_pw_qpolynomial_fold_free(u2); - return NULL; -} - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_from_pw_qpolynomial( - enum isl_fold type, __isl_take isl_pw_qpolynomial *pwqp) -{ - int i; - isl_pw_qpolynomial_fold *pwf; - - if (!pwqp) - return NULL; - - pwf = isl_pw_qpolynomial_fold_alloc_(isl_dim_copy(pwqp->dim), type, - pwqp->n); - - for (i = 0; i < pwqp->n; ++i) - pwf = isl_pw_qpolynomial_fold_add_piece(pwf, - isl_set_copy(pwqp->p[i].set), - isl_qpolynomial_fold_alloc(type, - isl_qpolynomial_copy(pwqp->p[i].qp))); - - isl_pw_qpolynomial_free(pwqp); - - return pwf; -} - -int isl_qpolynomial_fold_plain_is_equal(__isl_keep isl_qpolynomial_fold *fold1, - __isl_keep isl_qpolynomial_fold *fold2) -{ - int i; - - if (!fold1 || !fold2) - return -1; - - if (fold1->n != fold2->n) - return 0; - - /* We probably want to sort the qps first... */ - for (i = 0; i < fold1->n; ++i) { - int eq = isl_qpolynomial_plain_is_equal(fold1->qp[i], fold2->qp[i]); - if (eq < 0 || !eq) - return eq; - } - - return 1; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_fold_eval( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_point *pnt) -{ - isl_qpolynomial *qp; - - if (!fold || !pnt) - goto error; - isl_assert(pnt->dim->ctx, isl_dim_equal(pnt->dim, fold->dim), goto error); - isl_assert(pnt->dim->ctx, - fold->type == isl_fold_max || fold->type == isl_fold_min, - goto error); - - if (fold->n == 0) - qp = isl_qpolynomial_zero(isl_dim_copy(fold->dim)); - else { - int i; - qp = isl_qpolynomial_eval(isl_qpolynomial_copy(fold->qp[0]), - isl_point_copy(pnt)); - for (i = 1; i < fold->n; ++i) { - isl_qpolynomial *qp_i; - qp_i = isl_qpolynomial_eval( - isl_qpolynomial_copy(fold->qp[i]), - isl_point_copy(pnt)); - if (fold->type == isl_fold_max) - qp = isl_qpolynomial_max_cst(qp, qp_i); - else - qp = isl_qpolynomial_min_cst(qp, qp_i); - } - } - isl_qpolynomial_fold_free(fold); - isl_point_free(pnt); - - return qp; -error: - isl_qpolynomial_fold_free(fold); - isl_point_free(pnt); - return NULL; -} - -size_t isl_pw_qpolynomial_fold_size(__isl_keep isl_pw_qpolynomial_fold *pwf) -{ - int i; - size_t n = 0; - - for (i = 0; i < pwf->n; ++i) - n += pwf->p[i].fold->n; - - return n; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_fold_opt_on_domain( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *set, int max) -{ - int i; - isl_qpolynomial *opt; - - if (!set || !fold) - goto error; - - if (fold->n == 0) { - isl_dim *dim = isl_dim_copy(fold->dim); - isl_set_free(set); - isl_qpolynomial_fold_free(fold); - return isl_qpolynomial_zero(dim); - } - - opt = isl_qpolynomial_opt_on_domain(isl_qpolynomial_copy(fold->qp[0]), - isl_set_copy(set), max); - for (i = 1; i < fold->n; ++i) { - isl_qpolynomial *opt_i; - opt_i = isl_qpolynomial_opt_on_domain( - isl_qpolynomial_copy(fold->qp[i]), - isl_set_copy(set), max); - if (max) - opt = isl_qpolynomial_max_cst(opt, opt_i); - else - opt = isl_qpolynomial_min_cst(opt, opt_i); - } - - isl_set_free(set); - isl_qpolynomial_fold_free(fold); - - return opt; -error: - isl_set_free(set); - isl_qpolynomial_fold_free(fold); - return NULL; -} - -/* Check whether for each quasi-polynomial in "fold2" there is - * a quasi-polynomial in "fold1" that dominates it on "set". - */ -static int qpolynomial_fold_covers_on_domain(__isl_keep isl_set *set, - __isl_keep isl_qpolynomial_fold *fold1, - __isl_keep isl_qpolynomial_fold *fold2) -{ - int i, j; - int covers; - - if (!set || !fold1 || !fold2) - return -1; - - covers = fold1->type == isl_fold_max ? 1 : -1; - - for (i = 0; i < fold2->n; ++i) { - for (j = 0; j < fold1->n; ++j) { - isl_qpolynomial *d; - int sgn; - - d = isl_qpolynomial_sub( - isl_qpolynomial_copy(fold1->qp[j]), - isl_qpolynomial_copy(fold2->qp[i])); - sgn = isl_qpolynomial_sign(set, d); - isl_qpolynomial_free(d); - if (sgn == covers) - break; - } - if (j >= fold1->n) - return 0; - } - - return 1; -} - -/* Check whether "pwf1" dominated "pwf2", i.e., the domain of "pwf1" contains - * that of "pwf2" and on each cell, the corresponding fold from pwf1 dominates - * that of pwf2. - */ -int isl_pw_qpolynomial_fold_covers(__isl_keep isl_pw_qpolynomial_fold *pwf1, - __isl_keep isl_pw_qpolynomial_fold *pwf2) -{ - int i, j; - isl_set *dom1, *dom2; - int is_subset; - - if (!pwf1 || !pwf2) - return -1; - - if (pwf2->n == 0) - return 1; - if (pwf1->n == 0) - return 0; - - dom1 = isl_pw_qpolynomial_fold_domain(isl_pw_qpolynomial_fold_copy(pwf1)); - dom2 = isl_pw_qpolynomial_fold_domain(isl_pw_qpolynomial_fold_copy(pwf2)); - is_subset = isl_set_is_subset(dom2, dom1); - isl_set_free(dom1); - isl_set_free(dom2); - - if (is_subset < 0 || !is_subset) - return is_subset; - - for (i = 0; i < pwf2->n; ++i) { - for (j = 0; j < pwf1->n; ++j) { - int is_empty; - isl_set *common; - int covers; - - common = isl_set_intersect(isl_set_copy(pwf1->p[j].set), - isl_set_copy(pwf2->p[i].set)); - is_empty = isl_set_is_empty(common); - if (is_empty < 0 || is_empty) { - isl_set_free(common); - if (is_empty < 0) - return -1; - continue; - } - covers = qpolynomial_fold_covers_on_domain(common, - pwf1->p[j].fold, pwf2->p[i].fold); - isl_set_free(common); - if (covers < 0 || !covers) - return covers; - } - } - - return 1; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_morph( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_morph *morph) -{ - int i; - isl_ctx *ctx; - - if (!fold || !morph) - goto error; - - ctx = fold->dim->ctx; - isl_assert(ctx, isl_dim_equal(fold->dim, morph->dom->dim), goto error); - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - goto error; - - isl_dim_free(fold->dim); - fold->dim = isl_dim_copy(morph->ran->dim); - if (!fold->dim) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_morph(fold->qp[i], - isl_morph_copy(morph)); - if (!fold->qp[i]) - goto error; - } - - isl_morph_free(morph); - - return fold; -error: - isl_qpolynomial_fold_free(fold); - isl_morph_free(morph); - return NULL; -} - -enum isl_fold isl_qpolynomial_fold_get_type(__isl_keep isl_qpolynomial_fold *fold) -{ - if (!fold) - return isl_fold_list; - return fold->type; -} - -enum isl_fold isl_union_pw_qpolynomial_fold_get_type( - __isl_keep isl_union_pw_qpolynomial_fold *upwf) -{ - if (!upwf) - return isl_fold_list; - return upwf->type; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_lift( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_dim *dim) -{ - int i; - - if (!fold || !dim) - goto error; - - if (isl_dim_equal(fold->dim, dim)) { - isl_dim_free(dim); - return fold; - } - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - goto error; - - isl_dim_free(fold->dim); - fold->dim = isl_dim_copy(dim); - if (!fold->dim) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_lift(fold->qp[i], - isl_dim_copy(dim)); - if (!fold->qp[i]) - goto error; - } - - isl_dim_free(dim); - - return fold; -error: - isl_qpolynomial_fold_free(fold); - isl_dim_free(dim); - return NULL; -} - -int isl_qpolynomial_fold_foreach_qpolynomial( - __isl_keep isl_qpolynomial_fold *fold, - int (*fn)(__isl_take isl_qpolynomial *qp, void *user), void *user) -{ - int i; - - if (!fold) - return -1; - - for (i = 0; i < fold->n; ++i) - if (fn(isl_qpolynomial_copy(fold->qp[i]), user) < 0) - return -1; - - return 0; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_move_dims( - __isl_take isl_qpolynomial_fold *fold, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - int i; - - if (n == 0) - return fold; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - - fold->dim = isl_dim_move(fold->dim, dst_type, dst_pos, - src_type, src_pos, n); - if (!fold->dim) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_move_dims(fold->qp[i], - dst_type, dst_pos, src_type, src_pos, n); - if (!fold->qp[i]) - goto error; - } - - return fold; -error: - isl_qpolynomial_fold_free(fold); - return NULL; -} - -/* For each 0 <= i < "n", replace variable "first" + i of type "type" - * in fold->qp[k] by subs[i]. - */ -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_substitute( - __isl_take isl_qpolynomial_fold *fold, - enum isl_dim_type type, unsigned first, unsigned n, - __isl_keep isl_qpolynomial **subs) -{ - int i; - - if (n == 0) - return fold; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_substitute(fold->qp[i], - type, first, n, subs); - if (!fold->qp[i]) - goto error; - } - - return fold; -error: - isl_qpolynomial_fold_free(fold); - return NULL; -} - -static int add_pwqp(__isl_take isl_pw_qpolynomial *pwqp, void *user) -{ - isl_ctx *ctx; - isl_pw_qpolynomial_fold *pwf; - isl_union_pw_qpolynomial_fold **upwf; - uint32_t hash; - struct isl_hash_table_entry *entry; - - upwf = (isl_union_pw_qpolynomial_fold **)user; - - ctx = pwqp->dim->ctx; - hash = isl_dim_get_hash(pwqp->dim); - entry = isl_hash_table_find(ctx, &(*upwf)->table, - hash, &has_dim, pwqp->dim, 1); - if (!entry) - goto error; - - pwf = isl_pw_qpolynomial_fold_from_pw_qpolynomial((*upwf)->type, pwqp); - if (!entry->data) - entry->data = pwf; - else { - entry->data = isl_pw_qpolynomial_fold_add(entry->data, pwf); - if (!entry->data) - return -1; - if (isl_pw_qpolynomial_fold_is_zero(entry->data)) { - isl_pw_qpolynomial_fold_free(entry->data); - isl_hash_table_remove(ctx, &(*upwf)->table, entry); - } - } - - return 0; -error: - isl_pw_qpolynomial_free(pwqp); - return -1; -} - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_add_union_pw_qpolynomial( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_union_pw_qpolynomial *upwqp) -{ - upwf = isl_union_pw_qpolynomial_fold_align_params(upwf, - isl_union_pw_qpolynomial_get_dim(upwqp)); - upwqp = isl_union_pw_qpolynomial_align_params(upwqp, - isl_union_pw_qpolynomial_fold_get_dim(upwf)); - - upwf = isl_union_pw_qpolynomial_fold_cow(upwf); - if (!upwf || !upwqp) - goto error; - - if (isl_union_pw_qpolynomial_foreach_pw_qpolynomial(upwqp, &add_pwqp, - &upwf) < 0) - goto error; - - isl_union_pw_qpolynomial_free(upwqp); - - return upwf; -error: - isl_union_pw_qpolynomial_fold_free(upwf); - isl_union_pw_qpolynomial_free(upwqp); - return NULL; -} - -static int compatible_range(__isl_keep isl_dim *dim1, __isl_keep isl_dim *dim2) -{ - int m; - m = isl_dim_match(dim1, isl_dim_param, dim2, isl_dim_param); - if (m < 0 || !m) - return m; - return isl_dim_tuple_match(dim1, isl_dim_out, dim2, isl_dim_set); -} - -/* Compute the intersection of the range of the map and the domain - * of the piecewise quasipolynomial reduction and then compute a bound - * on the associated quasipolynomial reduction over all elements - * in this intersection. - * - * We first introduce some unconstrained dimensions in the - * piecewise quasipolynomial, intersect the resulting domain - * with the wrapped map and the compute the sum. - */ -__isl_give isl_pw_qpolynomial_fold *isl_map_apply_pw_qpolynomial_fold( - __isl_take isl_map *map, __isl_take isl_pw_qpolynomial_fold *pwf, - int *tight) -{ - isl_ctx *ctx; - isl_set *dom; - isl_dim *map_dim; - isl_dim *pwf_dim; - unsigned n_in; - int ok; - - ctx = isl_map_get_ctx(map); - if (!ctx) - goto error; - - map_dim = isl_map_get_dim(map); - pwf_dim = isl_pw_qpolynomial_fold_get_dim(pwf); - ok = compatible_range(map_dim, pwf_dim); - isl_dim_free(map_dim); - isl_dim_free(pwf_dim); - if (!ok) - isl_die(ctx, isl_error_invalid, "incompatible dimensions", - goto error); - - n_in = isl_map_dim(map, isl_dim_in); - pwf = isl_pw_qpolynomial_fold_insert_dims(pwf, isl_dim_set, 0, n_in); - - dom = isl_map_wrap(map); - pwf = isl_pw_qpolynomial_fold_reset_dim(pwf, isl_set_get_dim(dom)); - - pwf = isl_pw_qpolynomial_fold_intersect_domain(pwf, dom); - pwf = isl_pw_qpolynomial_fold_bound(pwf, tight); - - return pwf; -error: - isl_map_free(map); - isl_pw_qpolynomial_fold_free(pwf); - return NULL; -} - -__isl_give isl_pw_qpolynomial_fold *isl_set_apply_pw_qpolynomial_fold( - __isl_take isl_set *set, __isl_take isl_pw_qpolynomial_fold *pwf, - int *tight) -{ - isl_map *map; - - map = isl_map_from_range(set); - return isl_map_apply_pw_qpolynomial_fold(map, pwf, tight); -} - -struct isl_apply_fold_data { - isl_union_pw_qpolynomial_fold *upwf; - isl_union_pw_qpolynomial_fold *res; - isl_map *map; - int tight; -}; - -static int pw_qpolynomial_fold_apply(__isl_take isl_pw_qpolynomial_fold *pwf, - void *user) -{ - isl_dim *map_dim; - isl_dim *pwf_dim; - struct isl_apply_fold_data *data = user; - int ok; - - map_dim = isl_map_get_dim(data->map); - pwf_dim = isl_pw_qpolynomial_fold_get_dim(pwf); - ok = compatible_range(map_dim, pwf_dim); - isl_dim_free(map_dim); - isl_dim_free(pwf_dim); - - if (ok) { - pwf = isl_map_apply_pw_qpolynomial_fold(isl_map_copy(data->map), - pwf, data->tight ? &data->tight : NULL); - data->res = isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold( - data->res, pwf); - } else - isl_pw_qpolynomial_fold_free(pwf); - - return 0; -} - -static int map_apply(__isl_take isl_map *map, void *user) -{ - struct isl_apply_fold_data *data = user; - int r; - - data->map = map; - r = isl_union_pw_qpolynomial_fold_foreach_pw_qpolynomial_fold( - data->upwf, &pw_qpolynomial_fold_apply, data); - - isl_map_free(map); - return r; -} - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_map_apply_union_pw_qpolynomial_fold( - __isl_take isl_union_map *umap, - __isl_take isl_union_pw_qpolynomial_fold *upwf, int *tight) -{ - isl_dim *dim; - enum isl_fold type; - struct isl_apply_fold_data data; - - upwf = isl_union_pw_qpolynomial_fold_align_params(upwf, - isl_union_map_get_dim(umap)); - umap = isl_union_map_align_params(umap, - isl_union_pw_qpolynomial_fold_get_dim(upwf)); - - data.upwf = upwf; - data.tight = tight ? 1 : 0; - dim = isl_union_pw_qpolynomial_fold_get_dim(upwf); - type = isl_union_pw_qpolynomial_fold_get_type(upwf); - data.res = isl_union_pw_qpolynomial_fold_zero(dim, type); - if (isl_union_map_foreach_map(umap, &map_apply, &data) < 0) - goto error; - - isl_union_map_free(umap); - isl_union_pw_qpolynomial_fold_free(upwf); - - if (tight) - *tight = data.tight; - - return data.res; -error: - isl_union_map_free(umap); - isl_union_pw_qpolynomial_fold_free(upwf); - isl_union_pw_qpolynomial_fold_free(data.res); - return NULL; -} - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_set_apply_union_pw_qpolynomial_fold( - __isl_take isl_union_set *uset, - __isl_take isl_union_pw_qpolynomial_fold *upwf, int *tight) -{ - return isl_union_map_apply_union_pw_qpolynomial_fold(uset, upwf, tight); -} - -/* Reorder the dimension of "fold" according to the given reordering. - */ -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_realign( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_reordering *r) -{ - int i; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold || !r) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_realign(fold->qp[i], - isl_reordering_copy(r)); - if (!fold->qp[i]) - goto error; - } - - fold = isl_qpolynomial_fold_reset_dim(fold, isl_dim_copy(r->dim)); - - isl_reordering_free(r); - - return fold; -error: - isl_qpolynomial_fold_free(fold); - isl_reordering_free(r); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_mul_isl_int( - __isl_take isl_qpolynomial_fold *fold, isl_int v) -{ - int i; - - if (isl_int_is_one(v)) - return fold; - if (fold && isl_int_is_zero(v)) { - isl_qpolynomial_fold *zero; - isl_dim *dim = isl_dim_copy(fold->dim); - zero = isl_qpolynomial_fold_empty(fold->type, dim); - isl_qpolynomial_fold_free(fold); - return zero; - } - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - - if (isl_int_is_neg(v)) - fold->type = isl_fold_type_negate(fold->type); - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_mul_isl_int(fold->qp[i], v); - if (!fold->qp[i]) - goto error; - } - - return fold; -error: - isl_qpolynomial_fold_free(fold); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_scale( - __isl_take isl_qpolynomial_fold *fold, isl_int v) -{ - return isl_qpolynomial_fold_mul_isl_int(fold, v); -} diff --git a/cloog-0.16.3/isl/isl_gmp.c b/cloog-0.16.3/isl/isl_gmp.c deleted file mode 100644 index 0c8db59..0000000 --- a/cloog-0.16.3/isl/isl_gmp.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include - -uint32_t isl_gmp_hash(mpz_t v, uint32_t hash) -{ - int sa = v[0]._mp_size; - int abs_sa = sa < 0 ? -sa : sa; - unsigned char *data = (unsigned char *)v[0]._mp_d; - unsigned char *end = data + abs_sa * sizeof(v[0]._mp_d[0]); - - if (sa < 0) - isl_hash_byte(hash, 0xFF); - for (; data < end; ++data) - isl_hash_byte(hash, *data); - return hash; -} diff --git a/cloog-0.16.3/isl/isl_hash.c b/cloog-0.16.3/isl/isl_hash.c deleted file mode 100644 index 52e3135..0000000 --- a/cloog-0.16.3/isl/isl_hash.c +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include "isl_config.h" - -uint32_t isl_hash_string(uint32_t hash, const char *s) -{ - for (; *s; s++) - isl_hash_byte(hash, *s); - return hash; -} - -uint32_t isl_hash_mem(uint32_t hash, const void *p, size_t len) -{ - int i; - const char *s = p; - for (i = 0; i < len; ++i) - isl_hash_byte(hash, s[i]); - return hash; -} - -static unsigned int round_up(unsigned int v) -{ - int old_v = v; - - while (v) { - old_v = v; - v ^= v & -v; - } - return old_v << 1; -} - -int isl_hash_table_init(struct isl_ctx *ctx, struct isl_hash_table *table, - int min_size) -{ - size_t size; - - if (!table) - return -1; - - if (min_size < 2) - min_size = 2; - table->bits = ffs(round_up(4 * (min_size + 1) / 3 - 1)) - 1; - table->n = 0; - - size = 1 << table->bits; - table->entries = isl_calloc_array(ctx, struct isl_hash_table_entry, - size); - if (!table->entries) - return -1; - - return 0; -} - -static int grow_table(struct isl_ctx *ctx, struct isl_hash_table *table, - int (*eq)(const void *entry, const void *val)) -{ - size_t old_size, size; - struct isl_hash_table_entry *entries; - uint32_t h; - - entries = table->entries; - old_size = 1 << table->bits; - size = 2 * old_size; - table->entries = isl_calloc_array(ctx, struct isl_hash_table_entry, - size); - if (!table->entries) { - table->entries = entries; - return -1; - } - - table->bits++; - - for (h = 0; h < old_size; ++h) { - struct isl_hash_table_entry *entry; - - if (!entries[h].data) - continue; - - entry = isl_hash_table_find(ctx, table, entries[h].hash, - eq, entries[h].data, 1); - if (!entry) { - table->bits--; - free(table->entries); - table->entries = entries; - return -1; - } - - *entry = entries[h]; - } - - free(entries); - - return 0; -} - -struct isl_hash_table *isl_hash_table_alloc(struct isl_ctx *ctx, int min_size) -{ - struct isl_hash_table *table = NULL; - - table = isl_alloc_type(ctx, struct isl_hash_table); - if (isl_hash_table_init(ctx, table, min_size)) - goto error; - return table; -error: - isl_hash_table_free(ctx, table); - return NULL; -} - -void isl_hash_table_clear(struct isl_hash_table *table) -{ - if (!table) - return; - free(table->entries); -} - -void isl_hash_table_free(struct isl_ctx *ctx, struct isl_hash_table *table) -{ - if (!table) - return; - isl_hash_table_clear(table); - free(table); -} - -struct isl_hash_table_entry *isl_hash_table_find(struct isl_ctx *ctx, - struct isl_hash_table *table, - uint32_t key_hash, - int (*eq)(const void *entry, const void *val), - const void *val, int reserve) -{ - size_t size; - uint32_t h, key_bits; - - key_bits = isl_hash_bits(key_hash, table->bits); - size = 1 << table->bits; - for (h = key_bits; table->entries[h].data; h = (h+1) % size) - if (table->entries[h].hash == key_hash && - eq(table->entries[h].data, val)) - return &table->entries[h]; - - if (!reserve) - return NULL; - - if (4 * table->n >= 3 * size) { - if (grow_table(ctx, table, eq) < 0) - return NULL; - return isl_hash_table_find(ctx, table, key_hash, eq, val, 1); - } - - table->n++; - table->entries[h].hash = key_hash; - - return &table->entries[h]; -} - -int isl_hash_table_foreach(struct isl_ctx *ctx, - struct isl_hash_table *table, - int (*fn)(void **entry, void *user), void *user) -{ - size_t size; - uint32_t h; - - size = 1 << table->bits; - for (h = 0; h < size; ++ h) - if (table->entries[h].data && - fn(&table->entries[h].data, user) < 0) - return -1; - - return 0; -} - -void isl_hash_table_remove(struct isl_ctx *ctx, - struct isl_hash_table *table, - struct isl_hash_table_entry *entry) -{ - int h, h2; - size_t size; - - if (!table || !entry) - return; - - size = 1 << table->bits; - h = entry - table->entries; - isl_assert(ctx, h >= 0 && h < size, return); - - for (h2 = h+1; table->entries[h2 % size].data; h2++) { - uint32_t bits = isl_hash_bits(table->entries[h2 % size].hash, - table->bits); - uint32_t offset = (size + bits - (h+1)) % size; - if (offset <= h2 - (h+1)) - continue; - *entry = table->entries[h2 % size]; - h = h2; - entry = &table->entries[h % size]; - } - - entry->hash = 0; - entry->data = NULL; - table->n--; -} diff --git a/cloog-0.16.3/isl/isl_hmap_map_basic_set.c b/cloog-0.16.3/isl/isl_hmap_map_basic_set.c deleted file mode 100644 index b303516..0000000 --- a/cloog-0.16.3/isl/isl_hmap_map_basic_set.c +++ /dev/null @@ -1,102 +0,0 @@ -#include - -struct isl_map_basic_set_pair { - isl_map *key; - isl_basic_set *val; -}; - -__isl_give isl_hmap_map_basic_set *isl_hmap_map_basic_set_alloc(isl_ctx *ctx, - int min_size) -{ - return (isl_hmap_map_basic_set *) isl_hash_table_alloc(ctx, min_size); -} - -static int free_pair(void **entry, void *user) -{ - struct isl_map_basic_set_pair *pair = *entry; - isl_map_free(pair->key); - isl_basic_set_free(pair->val); - free(pair); - *entry = NULL; - return 0; -} - -void isl_hmap_map_basic_set_free(isl_ctx *ctx, - __isl_take isl_hmap_map_basic_set *hmap) -{ - if (!hmap) - return; - isl_hash_table_foreach(ctx, &hmap->table, &free_pair, NULL); - isl_hash_table_free(ctx, &hmap->table); -} - -static int has_key(const void *entry, const void *key) -{ - const struct isl_map_basic_set_pair *pair = entry; - isl_map *map = (isl_map *)key; - - return isl_map_plain_is_equal(pair->key, map); -} - -int isl_hmap_map_basic_set_has(isl_ctx *ctx, - __isl_keep isl_hmap_map_basic_set *hmap, __isl_keep isl_map *key) -{ - uint32_t hash; - - hash = isl_map_get_hash(key); - return !!isl_hash_table_find(ctx, &hmap->table, hash, &has_key, key, 0); -} - -__isl_give isl_basic_set *isl_hmap_map_basic_set_get(isl_ctx *ctx, - __isl_keep isl_hmap_map_basic_set *hmap, __isl_take isl_map *key) -{ - struct isl_hash_table_entry *entry; - struct isl_map_basic_set_pair *pair; - uint32_t hash; - - hash = isl_map_get_hash(key); - entry = isl_hash_table_find(ctx, &hmap->table, hash, &has_key, key, 0); - isl_map_free(key); - - if (!entry) - return NULL; - - pair = entry->data; - - return isl_basic_set_copy(pair->val); -} - -int isl_hmap_map_basic_set_set(isl_ctx *ctx, - __isl_keep isl_hmap_map_basic_set *hmap, __isl_take isl_map *key, - __isl_take isl_basic_set *val) -{ - struct isl_hash_table_entry *entry; - struct isl_map_basic_set_pair *pair; - uint32_t hash; - - hash = isl_map_get_hash(key); - entry = isl_hash_table_find(ctx, &hmap->table, hash, &has_key, key, 1); - - if (!entry) - return -1; - - if (entry->data) { - pair = entry->data; - isl_basic_set_free(pair->val); - pair->val = val; - isl_map_free(key); - return 0; - } - - pair = isl_alloc_type(ctx, struct isl_map_basic_set_pair); - if (!pair) { - isl_map_free(key); - isl_basic_set_free(val); - return -1; - } - - entry->data = pair; - pair->key = key; - pair->val = val; - return 0; -} diff --git a/cloog-0.16.3/isl/isl_hmap_map_basic_set.h b/cloog-0.16.3/isl/isl_hmap_map_basic_set.h deleted file mode 100644 index 905791d..0000000 --- a/cloog-0.16.3/isl/isl_hmap_map_basic_set.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef ISL_HMAP_MAP_BASIC_SET_H -#define ISL_HMAP_MAP_BASIC_SET_H - -#include -#include -#include - -struct isl_hmap_map_basic_set { - struct isl_hash_table table; -}; -typedef struct isl_hmap_map_basic_set isl_hmap_map_basic_set; - -__isl_give isl_hmap_map_basic_set *isl_hmap_map_basic_set_alloc( isl_ctx *ctx, - int min_size); -void isl_hmap_map_basic_set_free(isl_ctx *ctx, - __isl_take isl_hmap_map_basic_set *hmap); - -int isl_hmap_map_basic_set_has(isl_ctx *ctx, - __isl_keep isl_hmap_map_basic_set *hmap, __isl_keep isl_map *key); -__isl_give isl_basic_set *isl_hmap_map_basic_set_get(isl_ctx *ctx, - __isl_keep isl_hmap_map_basic_set *hmap, __isl_take isl_map *key); -int isl_hmap_map_basic_set_set(isl_ctx *ctx, - __isl_keep isl_hmap_map_basic_set *hmap, __isl_take isl_map *key, - __isl_take isl_basic_set *val); - -#endif diff --git a/cloog-0.16.3/isl/isl_ilp.c b/cloog-0.16.3/isl/isl_ilp.c deleted file mode 100644 index 1994a68..0000000 --- a/cloog-0.16.3/isl/isl_ilp.c +++ /dev/null @@ -1,479 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include "isl_sample.h" -#include -#include "isl_equalities.h" -#include -#include -#include - -/* Given a basic set "bset", construct a basic set U such that for - * each element x in U, the whole unit box positioned at x is inside - * the given basic set. - * Note that U may not contain all points that satisfy this property. - * - * We simply add the sum of all negative coefficients to the constant - * term. This ensures that if x satisfies the resulting constraints, - * then x plus any sum of unit vectors satisfies the original constraints. - */ -static struct isl_basic_set *unit_box_base_points(struct isl_basic_set *bset) -{ - int i, j, k; - struct isl_basic_set *unit_box = NULL; - unsigned total; - - if (!bset) - goto error; - - if (bset->n_eq != 0) { - unit_box = isl_basic_set_empty_like(bset); - isl_basic_set_free(bset); - return unit_box; - } - - total = isl_basic_set_total_dim(bset); - unit_box = isl_basic_set_alloc_dim(isl_basic_set_get_dim(bset), - 0, 0, bset->n_ineq); - - for (i = 0; i < bset->n_ineq; ++i) { - k = isl_basic_set_alloc_inequality(unit_box); - if (k < 0) - goto error; - isl_seq_cpy(unit_box->ineq[k], bset->ineq[i], 1 + total); - for (j = 0; j < total; ++j) { - if (isl_int_is_nonneg(unit_box->ineq[k][1 + j])) - continue; - isl_int_add(unit_box->ineq[k][0], - unit_box->ineq[k][0], unit_box->ineq[k][1 + j]); - } - } - - isl_basic_set_free(bset); - return unit_box; -error: - isl_basic_set_free(bset); - isl_basic_set_free(unit_box); - return NULL; -} - -/* Find an integer point in "bset", preferably one that is - * close to minimizing "f". - * - * We first check if we can easily put unit boxes inside bset. - * If so, we take the best base point of any of the unit boxes we can find - * and round it up to the nearest integer. - * If not, we simply pick any integer point in "bset". - */ -static struct isl_vec *initial_solution(struct isl_basic_set *bset, isl_int *f) -{ - enum isl_lp_result res; - struct isl_basic_set *unit_box; - struct isl_vec *sol; - - unit_box = unit_box_base_points(isl_basic_set_copy(bset)); - - res = isl_basic_set_solve_lp(unit_box, 0, f, bset->ctx->one, - NULL, NULL, &sol); - if (res == isl_lp_ok) { - isl_basic_set_free(unit_box); - return isl_vec_ceil(sol); - } - - isl_basic_set_free(unit_box); - - return isl_basic_set_sample_vec(isl_basic_set_copy(bset)); -} - -/* Restrict "bset" to those points with values for f in the interval [l, u]. - */ -static struct isl_basic_set *add_bounds(struct isl_basic_set *bset, - isl_int *f, isl_int l, isl_int u) -{ - int k; - unsigned total; - - total = isl_basic_set_total_dim(bset); - bset = isl_basic_set_extend_constraints(bset, 0, 2); - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_cpy(bset->ineq[k], f, 1 + total); - isl_int_sub(bset->ineq[k][0], bset->ineq[k][0], l); - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_neg(bset->ineq[k], f, 1 + total); - isl_int_add(bset->ineq[k][0], bset->ineq[k][0], u); - - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Find an integer point in "bset" that minimizes f (in any) such that - * the value of f lies inside the interval [l, u]. - * Return this integer point if it can be found. - * Otherwise, return sol. - * - * We perform a number of steps until l > u. - * In each step, we look for an integer point with value in either - * the whole interval [l, u] or half of the interval [l, l+floor(u-l-1/2)]. - * The choice depends on whether we have found an integer point in the - * previous step. If so, we look for the next point in half of the remaining - * interval. - * If we find a point, the current solution is updated and u is set - * to its value minus 1. - * If no point can be found, we update l to the upper bound of the interval - * we checked (u or l+floor(u-l-1/2)) plus 1. - */ -static struct isl_vec *solve_ilp_search(struct isl_basic_set *bset, - isl_int *f, isl_int *opt, struct isl_vec *sol, isl_int l, isl_int u) -{ - isl_int tmp; - int divide = 1; - - isl_int_init(tmp); - - while (isl_int_le(l, u)) { - struct isl_basic_set *slice; - struct isl_vec *sample; - - if (!divide) - isl_int_set(tmp, u); - else { - isl_int_sub(tmp, u, l); - isl_int_fdiv_q_ui(tmp, tmp, 2); - isl_int_add(tmp, tmp, l); - } - slice = add_bounds(isl_basic_set_copy(bset), f, l, tmp); - sample = isl_basic_set_sample_vec(slice); - if (!sample) { - isl_vec_free(sol); - sol = NULL; - break; - } - if (sample->size > 0) { - isl_vec_free(sol); - sol = sample; - isl_seq_inner_product(f, sol->el, sol->size, opt); - isl_int_sub_ui(u, *opt, 1); - divide = 1; - } else { - isl_vec_free(sample); - if (!divide) - break; - isl_int_add_ui(l, tmp, 1); - divide = 0; - } - } - - isl_int_clear(tmp); - - return sol; -} - -/* Find an integer point in "bset" that minimizes f (if any). - * If sol_p is not NULL then the integer point is returned in *sol_p. - * The optimal value of f is returned in *opt. - * - * The algorithm maintains a currently best solution and an interval [l, u] - * of values of f for which integer solutions could potentially still be found. - * The initial value of the best solution so far is any solution. - * The initial value of l is minimal value of f over the rationals - * (rounded up to the nearest integer). - * The initial value of u is the value of f at the initial solution minus 1. - * - * We then call solve_ilp_search to perform a binary search on the interval. - */ -static enum isl_lp_result solve_ilp(struct isl_basic_set *bset, - isl_int *f, isl_int *opt, - struct isl_vec **sol_p) -{ - enum isl_lp_result res; - isl_int l, u; - struct isl_vec *sol; - - res = isl_basic_set_solve_lp(bset, 0, f, bset->ctx->one, - opt, NULL, &sol); - if (res == isl_lp_ok && isl_int_is_one(sol->el[0])) { - if (sol_p) - *sol_p = sol; - else - isl_vec_free(sol); - return isl_lp_ok; - } - isl_vec_free(sol); - if (res == isl_lp_error || res == isl_lp_empty) - return res; - - sol = initial_solution(bset, f); - if (!sol) - return isl_lp_error; - if (sol->size == 0) { - isl_vec_free(sol); - return isl_lp_empty; - } - if (res == isl_lp_unbounded) { - isl_vec_free(sol); - return isl_lp_unbounded; - } - - isl_int_init(l); - isl_int_init(u); - - isl_int_set(l, *opt); - - isl_seq_inner_product(f, sol->el, sol->size, opt); - isl_int_sub_ui(u, *opt, 1); - - sol = solve_ilp_search(bset, f, opt, sol, l, u); - if (!sol) - res = isl_lp_error; - - isl_int_clear(l); - isl_int_clear(u); - - if (sol_p) - *sol_p = sol; - else - isl_vec_free(sol); - - return res; -} - -static enum isl_lp_result solve_ilp_with_eq(struct isl_basic_set *bset, int max, - isl_int *f, isl_int *opt, - struct isl_vec **sol_p) -{ - unsigned dim; - enum isl_lp_result res; - struct isl_mat *T = NULL; - struct isl_vec *v; - - bset = isl_basic_set_copy(bset); - dim = isl_basic_set_total_dim(bset); - v = isl_vec_alloc(bset->ctx, 1 + dim); - if (!v) - goto error; - isl_seq_cpy(v->el, f, 1 + dim); - bset = isl_basic_set_remove_equalities(bset, &T, NULL); - v = isl_vec_mat_product(v, isl_mat_copy(T)); - if (!v) - goto error; - res = isl_basic_set_solve_ilp(bset, max, v->el, opt, sol_p); - isl_vec_free(v); - if (res == isl_lp_ok && sol_p) { - *sol_p = isl_mat_vec_product(T, *sol_p); - if (!*sol_p) - res = isl_lp_error; - } else - isl_mat_free(T); - isl_basic_set_free(bset); - return res; -error: - isl_mat_free(T); - isl_basic_set_free(bset); - return isl_lp_error; -} - -/* Find an integer point in "bset" that minimizes (or maximizes if max is set) - * f (if any). - * If sol_p is not NULL then the integer point is returned in *sol_p. - * The optimal value of f is returned in *opt. - * - * If there is any equality among the points in "bset", then we first - * project it out. Otherwise, we continue with solve_ilp above. - */ -enum isl_lp_result isl_basic_set_solve_ilp(struct isl_basic_set *bset, int max, - isl_int *f, isl_int *opt, - struct isl_vec **sol_p) -{ - unsigned dim; - enum isl_lp_result res; - - if (!bset) - return isl_lp_error; - if (sol_p) - *sol_p = NULL; - - isl_assert(bset->ctx, isl_basic_set_n_param(bset) == 0, goto error); - - if (isl_basic_set_plain_is_empty(bset)) - return isl_lp_empty; - - if (bset->n_eq) - return solve_ilp_with_eq(bset, max, f, opt, sol_p); - - dim = isl_basic_set_total_dim(bset); - - if (max) - isl_seq_neg(f, f, 1 + dim); - - res = solve_ilp(bset, f, opt, sol_p); - - if (max) { - isl_seq_neg(f, f, 1 + dim); - isl_int_neg(*opt, *opt); - } - - return res; -error: - isl_basic_set_free(bset); - return isl_lp_error; -} - -static enum isl_lp_result basic_set_opt(__isl_keep isl_basic_set *bset, int max, - __isl_keep isl_aff *obj, isl_int *opt) -{ - enum isl_lp_result res; - - if (!obj) - return isl_lp_error; - bset = isl_basic_set_copy(bset); - bset = isl_basic_set_underlying_set(bset); - res = isl_basic_set_solve_ilp(bset, max, obj->v->el + 1, opt, NULL); - isl_basic_set_free(bset); - return res; -} - -static __isl_give isl_mat *extract_divs(__isl_keep isl_basic_set *bset) -{ - int i; - isl_ctx *ctx = isl_basic_set_get_ctx(bset); - isl_mat *div; - - div = isl_mat_alloc(ctx, bset->n_div, - 1 + 1 + isl_basic_set_total_dim(bset)); - if (!div) - return NULL; - - for (i = 0; i < bset->n_div; ++i) - isl_seq_cpy(div->row[i], bset->div[i], div->n_col); - - return div; -} - -enum isl_lp_result isl_basic_set_opt(__isl_keep isl_basic_set *bset, int max, - __isl_keep isl_aff *obj, isl_int *opt) -{ - int *exp1 = NULL; - int *exp2 = NULL; - isl_ctx *ctx; - isl_mat *bset_div = NULL; - isl_mat *div = NULL; - enum isl_lp_result res; - - if (!bset || !obj) - return isl_lp_error; - - ctx = isl_aff_get_ctx(obj); - if (!isl_dim_equal(bset->dim, obj->ls->dim)) - isl_die(ctx, isl_error_invalid, - "spaces don't match", return isl_lp_error); - if (!isl_int_is_one(obj->v->el[0])) - isl_die(ctx, isl_error_unsupported, - "expecting integer affine expression", - return isl_lp_error); - - if (bset->n_div == 0 && obj->ls->div->n_row == 0) - return basic_set_opt(bset, max, obj, opt); - - bset = isl_basic_set_copy(bset); - obj = isl_aff_copy(obj); - - bset_div = extract_divs(bset); - exp1 = isl_alloc_array(ctx, int, bset_div->n_row); - exp2 = isl_alloc_array(ctx, int, obj->ls->div->n_row); - if (!bset_div || !exp1 || !exp2) - goto error; - - div = isl_merge_divs(bset_div, obj->ls->div, exp1, exp2); - - bset = isl_basic_set_expand_divs(bset, isl_mat_copy(div), exp1); - obj = isl_aff_expand_divs(obj, isl_mat_copy(div), exp2); - - res = basic_set_opt(bset, max, obj, opt); - - isl_mat_free(bset_div); - isl_mat_free(div); - free(exp1); - free(exp2); - isl_basic_set_free(bset); - isl_aff_free(obj); - - return res; -error: - isl_mat_free(div); - isl_mat_free(bset_div); - free(exp1); - free(exp2); - isl_basic_set_free(bset); - isl_aff_free(obj); - return isl_lp_error; -} - -/* Compute the minimum (maximum if max is set) of the integer affine - * expression obj over the points in set and put the result in *opt. - */ -enum isl_lp_result isl_set_opt(__isl_keep isl_set *set, int max, - __isl_keep isl_aff *obj, isl_int *opt) -{ - int i; - enum isl_lp_result res; - int empty = 1; - isl_int opt_i; - - if (!set || !obj) - return isl_lp_error; - if (set->n == 0) - return isl_lp_empty; - - res = isl_basic_set_opt(set->p[0], max, obj, opt); - if (res == isl_lp_error || res == isl_lp_unbounded) - return res; - if (set->n == 1) - return res; - if (res == isl_lp_ok) - empty = 0; - - isl_int_init(opt_i); - for (i = 1; i < set->n; ++i) { - res = isl_basic_set_opt(set->p[i], max, obj, &opt_i); - if (res == isl_lp_error || res == isl_lp_unbounded) { - isl_int_clear(opt_i); - return res; - } - if (res == isl_lp_ok) - empty = 0; - if (isl_int_gt(opt_i, *opt)) - isl_int_set(*opt, opt_i); - } - isl_int_clear(opt_i); - - return empty ? isl_lp_empty : isl_lp_ok; -} - -enum isl_lp_result isl_basic_set_max(__isl_keep isl_basic_set *bset, - __isl_keep isl_aff *obj, isl_int *opt) -{ - return isl_basic_set_opt(bset, 1, obj, opt); -} - -enum isl_lp_result isl_set_max(__isl_keep isl_set *set, - __isl_keep isl_aff *obj, isl_int *opt) -{ - return isl_set_opt(set, 1, obj, opt); -} diff --git a/cloog-0.16.3/isl/isl_input.c b/cloog-0.16.3/isl/isl_input.c deleted file mode 100644 index a1cf268..0000000 --- a/cloog-0.16.3/isl/isl_input.c +++ /dev/null @@ -1,2554 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "isl_polynomial_private.h" -#include -#include - -struct variable { - char *name; - int pos; - isl_vec *def; - /* non-zero if variable represents a min (-1) or a max (1) */ - int sign; - isl_mat *list; - struct variable *next; -}; - -struct vars { - struct isl_ctx *ctx; - int n; - struct variable *v; -}; - -static struct vars *vars_new(struct isl_ctx *ctx) -{ - struct vars *v; - v = isl_alloc_type(ctx, struct vars); - if (!v) - return NULL; - v->ctx = ctx; - v->n = 0; - v->v = NULL; - return v; -} - -static void variable_free(struct variable *var) -{ - while (var) { - struct variable *next = var->next; - isl_mat_free(var->list); - isl_vec_free(var->def); - free(var->name); - free(var); - var = next; - } -} - -static void vars_free(struct vars *v) -{ - if (!v) - return; - variable_free(v->v); - free(v); -} - -static void vars_drop(struct vars *v, int n) -{ - struct variable *var; - - if (!v || !v->v) - return; - - v->n -= n; - - var = v->v; - while (--n >= 0) { - struct variable *next = var->next; - isl_mat_free(var->list); - isl_vec_free(var->def); - free(var->name); - free(var); - var = next; - } - v->v = var; -} - -static struct variable *variable_new(struct vars *v, const char *name, int len, - int pos) -{ - struct variable *var; - var = isl_calloc_type(v->ctx, struct variable); - if (!var) - goto error; - var->name = strdup(name); - var->name[len] = '\0'; - var->pos = pos; - var->def = NULL; - var->next = v->v; - return var; -error: - variable_free(v->v); - return NULL; -} - -static int vars_pos(struct vars *v, const char *s, int len) -{ - int pos; - struct variable *q; - - if (len == -1) - len = strlen(s); - for (q = v->v; q; q = q->next) { - if (strncmp(q->name, s, len) == 0 && q->name[len] == '\0') - break; - } - if (q) - pos = q->pos; - else { - pos = v->n; - v->v = variable_new(v, s, len, v->n); - if (!v->v) - return -1; - v->n++; - } - return pos; -} - -static int vars_add_anon(struct vars *v) -{ - v->v = variable_new(v, "", 0, v->n); - - if (!v->v) - return -1; - v->n++; - - return 0; -} - -static __isl_give isl_basic_map *set_name(__isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, char *name) -{ - char *prime; - - if (!bmap) - return NULL; - if (!name) - return bmap; - - prime = strchr(name, '\''); - if (prime) - *prime = '\0'; - bmap = isl_basic_map_set_dim_name(bmap, type, pos, name); - if (prime) - *prime = '\''; - - return bmap; -} - -/* Obtain next token, with some preprocessing. - * In particular, evaluate expressions of the form x^y, - * with x and y values. - */ -static struct isl_token *next_token(struct isl_stream *s) -{ - struct isl_token *tok, *tok2; - - tok = isl_stream_next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) - return tok; - if (!isl_stream_eat_if_available(s, '^')) - return tok; - tok2 = isl_stream_next_token(s); - if (!tok2 || tok2->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok2, "expecting constant value"); - goto error; - } - - isl_int_pow_ui(tok->u.v, tok->u.v, isl_int_get_ui(tok2->u.v)); - - isl_token_free(tok2); - return tok; -error: - isl_token_free(tok); - isl_token_free(tok2); - return NULL; -} - -static int accept_cst_factor(struct isl_stream *s, isl_int *f) -{ - struct isl_token *tok; - - tok = next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expecting constant value"); - goto error; - } - - isl_int_mul(*f, *f, tok->u.v); - - isl_token_free(tok); - - if (isl_stream_eat_if_available(s, '*')) - return accept_cst_factor(s, f); - - return 0; -error: - isl_token_free(tok); - return -1; -} - -/* Given an affine expression aff, return an affine expression - * for aff % d, with d the next token on the stream, which is - * assumed to be a constant. - * - * We introduce an integer division q = [aff/d] and the result - * is set to aff - d q. - */ -static __isl_give isl_vec *affine_mod(struct isl_stream *s, - struct vars *v, __isl_take isl_vec *aff) -{ - struct isl_token *tok; - struct variable *var; - isl_vec *mod; - - tok = next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expecting constant value"); - goto error; - } - - if (vars_add_anon(v) < 0) - goto error; - - var = v->v; - - var->def = isl_vec_alloc(s->ctx, 2 + v->n); - if (!var->def) - goto error; - isl_seq_cpy(var->def->el + 1, aff->el, aff->size); - isl_int_set_si(var->def->el[1 + aff->size], 0); - isl_int_set(var->def->el[0], tok->u.v); - - mod = isl_vec_alloc(v->ctx, 1 + v->n); - if (!mod) - goto error; - - isl_seq_cpy(mod->el, aff->el, aff->size); - isl_int_neg(mod->el[aff->size], tok->u.v); - - isl_vec_free(aff); - isl_token_free(tok); - return mod; -error: - isl_vec_free(aff); - isl_token_free(tok); - return NULL; -} - -static struct isl_vec *accept_affine(struct isl_stream *s, struct vars *v); -static int read_div_definition(struct isl_stream *s, struct vars *v); -static int read_minmax_definition(struct isl_stream *s, struct vars *v); - -static __isl_give isl_vec *accept_affine_factor(struct isl_stream *s, - struct vars *v) -{ - struct isl_token *tok = NULL; - isl_vec *aff = NULL; - - tok = next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - goto error; - } - if (tok->type == ISL_TOKEN_IDENT) { - int n = v->n; - int pos = vars_pos(v, tok->u.s, -1); - if (pos < 0) - goto error; - if (pos >= n) { - isl_stream_error(s, tok, "unknown identifier"); - goto error; - } - - aff = isl_vec_alloc(v->ctx, 1 + v->n); - if (!aff) - goto error; - isl_seq_clr(aff->el, aff->size); - isl_int_set_si(aff->el[1 + pos], 1); - isl_token_free(tok); - } else if (tok->type == ISL_TOKEN_VALUE) { - if (isl_stream_eat_if_available(s, '*')) { - aff = accept_affine_factor(s, v); - aff = isl_vec_scale(aff, tok->u.v); - } else { - aff = isl_vec_alloc(v->ctx, 1 + v->n); - if (!aff) - goto error; - isl_seq_clr(aff->el, aff->size); - isl_int_set(aff->el[0], tok->u.v); - } - isl_token_free(tok); - } else if (tok->type == '(') { - isl_token_free(tok); - tok = NULL; - aff = accept_affine(s, v); - if (!aff) - goto error; - if (isl_stream_eat(s, ')')) - goto error; - } else if (tok->type == '[' || - tok->type == ISL_TOKEN_FLOORD || - tok->type == ISL_TOKEN_CEILD) { - int ceil = tok->type == ISL_TOKEN_CEILD; - struct variable *var; - if (vars_add_anon(v) < 0) - goto error; - var = v->v; - aff = isl_vec_alloc(v->ctx, 1 + v->n); - if (!aff) - goto error; - isl_seq_clr(aff->el, aff->size); - isl_int_set_si(aff->el[1 + v->n - 1], ceil ? -1 : 1); - isl_stream_push_token(s, tok); - tok = NULL; - if (read_div_definition(s, v) < 0) - goto error; - if (ceil) - isl_seq_neg(var->def->el + 1, var->def->el + 1, - var->def->size - 1); - aff = isl_vec_zero_extend(aff, 1 + v->n); - } else if (tok->type == ISL_TOKEN_MIN || tok->type == ISL_TOKEN_MAX) { - if (vars_add_anon(v) < 0) - goto error; - aff = isl_vec_alloc(v->ctx, 1 + v->n); - if (!aff) - goto error; - isl_seq_clr(aff->el, aff->size); - isl_int_set_si(aff->el[1 + v->n - 1], 1); - isl_stream_push_token(s, tok); - tok = NULL; - if (read_minmax_definition(s, v) < 0) - goto error; - aff = isl_vec_zero_extend(aff, 1 + v->n); - } else { - isl_stream_error(s, tok, "expecting factor"); - goto error; - } - if (isl_stream_eat_if_available(s, '%')) - return affine_mod(s, v, aff); - if (isl_stream_eat_if_available(s, '*')) { - isl_int f; - isl_int_init(f); - isl_int_set_si(f, 1); - if (accept_cst_factor(s, &f) < 0) { - isl_int_clear(f); - goto error2; - } - aff = isl_vec_scale(aff, f); - isl_int_clear(f); - } - - return aff; -error: - isl_token_free(tok); -error2: - isl_vec_free(aff); - return NULL; -} - -static struct isl_vec *accept_affine(struct isl_stream *s, struct vars *v) -{ - struct isl_token *tok = NULL; - struct isl_vec *aff; - int sign = 1; - - aff = isl_vec_alloc(v->ctx, 1 + v->n); - if (!aff) - return NULL; - isl_seq_clr(aff->el, aff->size); - - for (;;) { - tok = next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - goto error; - } - if (tok->type == '-') { - sign = -sign; - isl_token_free(tok); - continue; - } - if (tok->type == '(' || tok->type == '[' || - tok->type == ISL_TOKEN_MIN || tok->type == ISL_TOKEN_MAX || - tok->type == ISL_TOKEN_FLOORD || - tok->type == ISL_TOKEN_CEILD || - tok->type == ISL_TOKEN_IDENT) { - isl_vec *aff2; - isl_stream_push_token(s, tok); - tok = NULL; - aff2 = accept_affine_factor(s, v); - if (sign < 0) - aff2 = isl_vec_scale(aff2, s->ctx->negone); - aff = isl_vec_zero_extend(aff, 1 + v->n); - aff = isl_vec_add(aff, aff2); - if (!aff) - goto error; - sign = 1; - } else if (tok->type == ISL_TOKEN_VALUE) { - if (sign < 0) - isl_int_neg(tok->u.v, tok->u.v); - if (isl_stream_eat_if_available(s, '*') || - isl_stream_next_token_is(s, ISL_TOKEN_IDENT)) { - isl_vec *aff2; - aff2 = accept_affine_factor(s, v); - aff2 = isl_vec_scale(aff2, tok->u.v); - aff = isl_vec_zero_extend(aff, 1 + v->n); - aff = isl_vec_add(aff, aff2); - if (!aff) - goto error; - } else { - isl_int_add(aff->el[0], aff->el[0], tok->u.v); - } - sign = 1; - } else { - isl_stream_error(s, tok, "unexpected isl_token"); - isl_stream_push_token(s, tok); - isl_vec_free(aff); - return NULL; - } - isl_token_free(tok); - - tok = next_token(s); - if (tok && tok->type == '-') { - sign = -sign; - isl_token_free(tok); - } else if (tok && tok->type == '+') { - /* nothing */ - isl_token_free(tok); - } else if (tok && tok->type == ISL_TOKEN_VALUE && - isl_int_is_neg(tok->u.v)) { - isl_stream_push_token(s, tok); - } else { - if (tok) - isl_stream_push_token(s, tok); - break; - } - } - - return aff; -error: - isl_token_free(tok); - isl_vec_free(aff); - return NULL; -} - -/* Add any variables in the variable list "v" that are not already in "bmap" - * as existentially quantified variables in "bmap". - */ -static __isl_give isl_basic_map *add_divs(__isl_take isl_basic_map *bmap, - struct vars *v) -{ - int i; - int extra; - struct variable *var; - - extra = v->n - isl_basic_map_total_dim(bmap); - - if (extra == 0) - return bmap; - - bmap = isl_basic_map_extend_dim(bmap, isl_basic_map_get_dim(bmap), - extra, 0, 2 * extra); - - for (i = 0; i < extra; ++i) - if (isl_basic_map_alloc_div(bmap) < 0) - goto error; - - for (i = 0, var = v->v; i < extra; ++i, var = var->next) { - int k = bmap->n_div - 1 - i; - - isl_seq_cpy(bmap->div[k], var->def->el, var->def->size); - isl_seq_clr(bmap->div[k] + var->def->size, - 2 + v->n - var->def->size); - - if (isl_basic_map_add_div_constraints(bmap, k) < 0) - goto error; - } - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static __isl_give isl_basic_map *read_var_def(struct isl_stream *s, - __isl_take isl_basic_map *bmap, enum isl_dim_type type, struct vars *v) -{ - isl_dim *dim; - isl_basic_map *def = NULL; - struct isl_vec *vec; - int k; - int n; - - if (vars_add_anon(v) < 0) - goto error; - n = v->n; - - vec = accept_affine(s, v); - if (!vec) - goto error; - - dim = isl_basic_map_get_dim(bmap); - def = isl_basic_map_universe(dim); - def = add_divs(def, v); - def = isl_basic_map_extend_constraints(def, 1, 0); - k = isl_basic_map_alloc_equality(def); - if (k >= 0) { - isl_seq_cpy(def->eq[k], vec->el, vec->size); - isl_int_set_si(def->eq[k][1 + n - 1], -1); - } - isl_vec_free(vec); - if (k < 0) - goto error; - - vars_drop(v, v->n - n); - - def = isl_basic_map_simplify(def); - def = isl_basic_map_finalize(def); - bmap = isl_basic_map_intersect(bmap, def); - return bmap; -error: - isl_basic_map_free(bmap); - isl_basic_map_free(def); - return NULL; -} - -static __isl_give isl_basic_map *read_var_list(struct isl_stream *s, - __isl_take isl_basic_map *bmap, enum isl_dim_type type, struct vars *v) -{ - int i = 0; - struct isl_token *tok; - - while ((tok = next_token(s)) != NULL) { - int new_name = 0; - - if (tok->type == ISL_TOKEN_IDENT) { - int n = v->n; - int p = vars_pos(v, tok->u.s, -1); - if (p < 0) - goto error; - new_name = p >= n; - } - - if (new_name) { - bmap = isl_basic_map_add(bmap, type, 1); - bmap = set_name(bmap, type, i, v->v->name); - isl_token_free(tok); - } else if (tok->type == ISL_TOKEN_IDENT || - tok->type == ISL_TOKEN_VALUE || - tok->type == '-' || - tok->type == '(') { - if (type == isl_dim_param) { - isl_stream_error(s, tok, - "expecting unique identifier"); - goto error; - } - isl_stream_push_token(s, tok); - tok = NULL; - bmap = isl_basic_map_add(bmap, type, 1); - bmap = read_var_def(s, bmap, type, v); - } else - break; - - tok = isl_stream_next_token(s); - if (tok && tok->type == ']' && - isl_stream_next_token_is(s, '[')) { - isl_token_free(tok); - tok = isl_stream_next_token(s); - } else if (!tok || tok->type != ',') - break; - - isl_token_free(tok); - i++; - } - if (tok) - isl_stream_push_token(s, tok); - - return bmap; -error: - isl_token_free(tok); - isl_basic_map_free(bmap); - return NULL; -} - -static __isl_give isl_mat *accept_affine_list(struct isl_stream *s, - struct vars *v) -{ - struct isl_vec *vec; - struct isl_mat *mat; - struct isl_token *tok = NULL; - - vec = accept_affine(s, v); - mat = isl_mat_from_row_vec(vec); - if (!mat) - return NULL; - - for (;;) { - tok = isl_stream_next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - goto error; - } - if (tok->type != ',') { - isl_stream_push_token(s, tok); - break; - } - isl_token_free(tok); - - vec = accept_affine(s, v); - mat = isl_mat_add_zero_cols(mat, 1 + v->n - isl_mat_cols(mat)); - mat = isl_mat_vec_concat(mat, vec); - if (!mat) - return NULL; - } - - return mat; -error: - isl_mat_free(mat); - return NULL; -} - -static int read_minmax_definition(struct isl_stream *s, struct vars *v) -{ - struct isl_token *tok; - struct variable *var; - - var = v->v; - - tok = isl_stream_next_token(s); - if (!tok) - return -1; - var->sign = tok->type == ISL_TOKEN_MIN ? -1 : 1; - isl_token_free(tok); - - if (isl_stream_eat(s, '(')) - return -1; - - var->list = accept_affine_list(s, v); - if (!var->list) - return -1; - - if (isl_stream_eat(s, ')')) - return -1; - - return 0; -} - -static int read_div_definition(struct isl_stream *s, struct vars *v) -{ - struct isl_token *tok; - int seen_paren = 0; - struct isl_vec *aff; - struct variable *var; - int fc = 0; - - if (isl_stream_eat_if_available(s, ISL_TOKEN_FLOORD) || - isl_stream_eat_if_available(s, ISL_TOKEN_CEILD)) { - fc = 1; - if (isl_stream_eat(s, '(')) - return -1; - } else { - if (isl_stream_eat(s, '[')) - return -1; - if (isl_stream_eat_if_available(s, '(')) - seen_paren = 1; - } - - var = v->v; - - aff = accept_affine(s, v); - if (!aff) - return -1; - - var->def = isl_vec_alloc(s->ctx, 2 + v->n); - if (!var->def) { - isl_vec_free(aff); - return -1; - } - - isl_seq_cpy(var->def->el + 1, aff->el, aff->size); - - isl_vec_free(aff); - - if (fc) { - if (isl_stream_eat(s, ',')) - return -1; - } else { - if (seen_paren && isl_stream_eat(s, ')')) - return -1; - if (isl_stream_eat(s, '/')) - return -1; - } - - tok = next_token(s); - if (!tok) - return -1; - if (tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expected denominator"); - isl_stream_push_token(s, tok); - return -1; - } - isl_int_set(var->def->el[0], tok->u.v); - isl_token_free(tok); - - if (fc) { - if (isl_stream_eat(s, ')')) - return -1; - } else { - if (isl_stream_eat(s, ']')) - return -1; - } - - return 0; -} - -static struct isl_basic_map *add_div_definition(struct isl_stream *s, - struct vars *v, struct isl_basic_map *bmap, int pos) -{ - struct variable *var = v->v; - unsigned o_out = isl_basic_map_offset(bmap, isl_dim_out) - 1; - - if (read_div_definition(s, v) < 0) - goto error; - - if (isl_basic_map_add_div_constraints_var(bmap, o_out + pos, - var->def->el) < 0) - goto error; - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static struct isl_basic_map *read_defined_var_list(struct isl_stream *s, - struct vars *v, struct isl_basic_map *bmap) -{ - struct isl_token *tok; - - while ((tok = isl_stream_next_token(s)) != NULL) { - int p; - int n = v->n; - unsigned n_out = isl_basic_map_dim(bmap, isl_dim_out); - - if (tok->type != ISL_TOKEN_IDENT) - break; - - p = vars_pos(v, tok->u.s, -1); - if (p < 0) - goto error; - if (p < n) { - isl_stream_error(s, tok, "expecting unique identifier"); - goto error; - } - - bmap = isl_basic_map_cow(bmap); - bmap = isl_basic_map_add(bmap, isl_dim_out, 1); - bmap = isl_basic_map_extend_dim(bmap, isl_dim_copy(bmap->dim), - 0, 0, 2); - - isl_token_free(tok); - tok = isl_stream_next_token(s); - if (tok && tok->type == '=') { - isl_token_free(tok); - bmap = add_div_definition(s, v, bmap, n_out); - tok = isl_stream_next_token(s); - } - - if (!tok || tok->type != ',') - break; - - isl_token_free(tok); - } - if (tok) - isl_stream_push_token(s, tok); - - return bmap; -error: - isl_token_free(tok); - isl_basic_map_free(bmap); - return NULL; -} - -static int next_is_tuple(struct isl_stream *s) -{ - struct isl_token *tok; - int is_tuple; - - tok = isl_stream_next_token(s); - if (!tok) - return 0; - if (tok->type == '[') { - isl_stream_push_token(s, tok); - return 1; - } - if (tok->type != ISL_TOKEN_IDENT && !tok->is_keyword) { - isl_stream_push_token(s, tok); - return 0; - } - - is_tuple = isl_stream_next_token_is(s, '['); - - isl_stream_push_token(s, tok); - - return is_tuple; -} - -static __isl_give isl_basic_map *read_tuple(struct isl_stream *s, - __isl_take isl_basic_map *bmap, enum isl_dim_type type, struct vars *v); - -static __isl_give isl_basic_map *read_nested_tuple(struct isl_stream *s, - __isl_take isl_basic_map *bmap, struct vars *v) -{ - bmap = read_tuple(s, bmap, isl_dim_in, v); - if (isl_stream_eat(s, ISL_TOKEN_TO)) - goto error; - bmap = read_tuple(s, bmap, isl_dim_out, v); - bmap = isl_basic_map_from_range(isl_basic_map_wrap(bmap)); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static __isl_give isl_basic_map *read_tuple(struct isl_stream *s, - __isl_take isl_basic_map *bmap, enum isl_dim_type type, struct vars *v) -{ - struct isl_token *tok; - char *name = NULL; - - tok = isl_stream_next_token(s); - if (tok && (tok->type == ISL_TOKEN_IDENT || tok->is_keyword)) { - name = strdup(tok->u.s); - if (!name) - goto error; - isl_token_free(tok); - tok = isl_stream_next_token(s); - } - if (!tok || tok->type != '[') { - isl_stream_error(s, tok, "expecting '['"); - goto error; - } - isl_token_free(tok); - if (type != isl_dim_param && next_is_tuple(s)) { - isl_dim *dim = isl_basic_map_get_dim(bmap); - int nparam = isl_dim_size(dim, isl_dim_param); - int n_in = isl_dim_size(dim, isl_dim_in); - isl_basic_map *nested; - if (type == isl_dim_out) - dim = isl_dim_move(dim, isl_dim_param, nparam, - isl_dim_in, 0, n_in); - nested = isl_basic_map_alloc_dim(dim, 0, 0, 0); - nested = read_nested_tuple(s, nested, v); - if (type == isl_dim_in) { - nested = isl_basic_map_reverse(nested); - bmap = isl_basic_map_intersect(nested, bmap); - } else { - isl_basic_set *bset; - dim = isl_dim_range(isl_basic_map_get_dim(nested)); - dim = isl_dim_drop(dim, isl_dim_param, nparam, n_in); - dim = isl_dim_join(isl_basic_map_get_dim(bmap), dim); - bset = isl_basic_map_domain(bmap); - nested = isl_basic_map_reset_dim(nested, dim); - bmap = isl_basic_map_intersect_domain(nested, bset); - } - } else - bmap = read_var_list(s, bmap, type, v); - tok = isl_stream_next_token(s); - if (!tok || tok->type != ']') { - isl_stream_error(s, tok, "expecting ']'"); - goto error; - } - isl_token_free(tok); - - if (name) { - bmap = isl_basic_map_set_tuple_name(bmap, type, name); - free(name); - } - - return bmap; -error: - if (tok) - isl_token_free(tok); - isl_basic_map_free(bmap); - return NULL; -} - -static __isl_give isl_basic_map *construct_constraint( - __isl_take isl_basic_map *bmap, enum isl_token_type type, - isl_int *left, isl_int *right) -{ - int k; - unsigned len; - struct isl_ctx *ctx; - - if (!bmap) - return NULL; - len = 1 + isl_basic_map_total_dim(bmap); - ctx = bmap->ctx; - - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - if (type == ISL_TOKEN_LE) - isl_seq_combine(bmap->ineq[k], ctx->negone, left, - ctx->one, right, - len); - else if (type == ISL_TOKEN_GE) - isl_seq_combine(bmap->ineq[k], ctx->one, left, - ctx->negone, right, - len); - else if (type == ISL_TOKEN_LT) { - isl_seq_combine(bmap->ineq[k], ctx->negone, left, - ctx->one, right, - len); - isl_int_sub_ui(bmap->ineq[k][0], bmap->ineq[k][0], 1); - } else if (type == ISL_TOKEN_GT) { - isl_seq_combine(bmap->ineq[k], ctx->one, left, - ctx->negone, right, - len); - isl_int_sub_ui(bmap->ineq[k][0], bmap->ineq[k][0], 1); - } else { - isl_seq_combine(bmap->ineq[k], ctx->one, left, - ctx->negone, right, - len); - isl_basic_map_inequality_to_equality(bmap, k); - } - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static int is_comparator(struct isl_token *tok) -{ - if (!tok) - return 0; - - switch (tok->type) { - case ISL_TOKEN_LT: - case ISL_TOKEN_GT: - case ISL_TOKEN_LE: - case ISL_TOKEN_GE: - case '=': - return 1; - default: - return 0; - } -} - -/* Add any variables in the variable list "v" that are not already in "bmap" - * as output variables in "bmap". - */ -static __isl_give isl_basic_map *add_lifted_divs(__isl_take isl_basic_map *bmap, - struct vars *v) -{ - int i; - int extra; - struct variable *var; - - extra = v->n - isl_basic_map_total_dim(bmap); - - if (extra == 0) - return bmap; - - bmap = isl_basic_map_add(bmap, isl_dim_out, extra); - bmap = isl_basic_map_extend_dim(bmap, isl_basic_map_get_dim(bmap), - 0, 0, 2 * extra); - - for (i = 0, var = v->v; i < extra; ++i, var = var->next) { - if (!var->def) - continue; - var->def = isl_vec_zero_extend(var->def, 2 + v->n); - if (!var->def) - goto error; - if (isl_basic_map_add_div_constraints_var(bmap, var->pos, - var->def->el) < 0) - goto error; - } - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static struct isl_basic_map *add_constraint(struct isl_stream *s, - struct vars *v, struct isl_basic_map *bmap) -{ - int i, j; - struct isl_token *tok = NULL; - struct isl_mat *aff1 = NULL, *aff2 = NULL; - - bmap = isl_basic_map_cow(bmap); - - aff1 = accept_affine_list(s, v); - if (!aff1) - goto error; - tok = isl_stream_next_token(s); - if (!is_comparator(tok)) { - isl_stream_error(s, tok, "missing operator"); - if (tok) - isl_stream_push_token(s, tok); - tok = NULL; - goto error; - } - for (;;) { - aff2 = accept_affine_list(s, v); - if (!aff2) - goto error; - - aff1 = isl_mat_add_zero_cols(aff1, aff2->n_col - aff1->n_col); - if (!aff1) - goto error; - bmap = add_lifted_divs(bmap, v); - bmap = isl_basic_map_extend_constraints(bmap, 0, - aff1->n_row * aff2->n_row); - for (i = 0; i < aff1->n_row; ++i) - for (j = 0; j < aff2->n_row; ++j) - bmap = construct_constraint(bmap, tok->type, - aff1->row[i], aff2->row[j]); - isl_token_free(tok); - isl_mat_free(aff1); - aff1 = aff2; - - tok = isl_stream_next_token(s); - if (!is_comparator(tok)) { - if (tok) - isl_stream_push_token(s, tok); - break; - } - } - isl_mat_free(aff1); - - return bmap; -error: - if (tok) - isl_token_free(tok); - isl_mat_free(aff1); - isl_mat_free(aff2); - isl_basic_map_free(bmap); - return NULL; -} - -/* Return first variable, starting at n, representing a min or max, - * or NULL if there is no such variable. - */ -static struct variable *first_minmax(struct vars *v, int n) -{ - struct variable *first = NULL; - struct variable *var; - - for (var = v->v; var && var->pos >= n; var = var->next) - if (var->list) - first = var; - - return first; -} - -/* Check whether the variable at the given position only occurs in - * inequalities and only with the given sign. - */ -static int all_coefficients_of_sign(__isl_keep isl_map *map, int pos, int sign) -{ - int i, j; - - if (!map) - return -1; - - for (i = 0; i < map->n; ++i) { - isl_basic_map *bmap = map->p[i]; - - for (j = 0; j < bmap->n_eq; ++j) - if (!isl_int_is_zero(bmap->eq[j][1 + pos])) - return 0; - for (j = 0; j < bmap->n_ineq; ++j) { - int s = isl_int_sgn(bmap->ineq[j][1 + pos]); - if (s == 0) - continue; - if (s != sign) - return 0; - } - } - - return 1; -} - -/* Given a variable m which represents a min or a max of n expressions - * b_i, add the constraints - * - * m <= b_i - * - * in case of a min (var->sign < 0) and m >= b_i in case of a max. - */ -static __isl_give isl_map *bound_minmax(__isl_take isl_map *map, - struct variable *var) -{ - int i, k; - isl_basic_map *bound; - int total; - - total = isl_map_dim(map, isl_dim_all); - bound = isl_basic_map_alloc_dim(isl_map_get_dim(map), - 0, 0, var->list->n_row); - - for (i = 0; i < var->list->n_row; ++i) { - k = isl_basic_map_alloc_inequality(bound); - if (k < 0) - goto error; - if (var->sign < 0) - isl_seq_cpy(bound->ineq[k], var->list->row[i], - var->list->n_col); - else - isl_seq_neg(bound->ineq[k], var->list->row[i], - var->list->n_col); - isl_int_set_si(bound->ineq[k][1 + var->pos], var->sign); - isl_seq_clr(bound->ineq[k] + var->list->n_col, - 1 + total - var->list->n_col); - } - - map = isl_map_intersect(map, isl_map_from_basic_map(bound)); - - return map; -error: - isl_basic_map_free(bound); - isl_map_free(map); - return NULL; -} - -/* Given a variable m which represents a min (or max) of n expressions - * b_i, add constraints that assigns the minimal upper bound to m, i.e., - * divide the space into cells where one - * of the upper bounds is smaller than all the others and assign - * this upper bound to m. - * - * In particular, if there are n bounds b_i, then the input map - * is split into n pieces, each with the extra constraints - * - * m = b_i - * b_i <= b_j for j > i - * b_i < b_j for j < i - * - * in case of a min (var->sign < 0) and similarly in case of a max. - * - * Note: this function is very similar to set_minimum in isl_tab_pip.c - * Perhaps we should try to merge the two. - */ -static __isl_give isl_map *set_minmax(__isl_take isl_map *map, - struct variable *var) -{ - int i, j, k; - isl_basic_map *bmap = NULL; - isl_ctx *ctx; - isl_map *split = NULL; - int total; - - ctx = isl_map_get_ctx(map); - total = isl_map_dim(map, isl_dim_all); - split = isl_map_alloc_dim(isl_map_get_dim(map), - var->list->n_row, ISL_SET_DISJOINT); - - for (i = 0; i < var->list->n_row; ++i) { - bmap = isl_basic_map_alloc_dim(isl_map_get_dim(map), 0, - 1, var->list->n_row - 1); - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->eq[k], var->list->row[i], var->list->n_col); - isl_int_set_si(bmap->eq[k][1 + var->pos], -1); - for (j = 0; j < var->list->n_row; ++j) { - if (j == i) - continue; - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - if (var->sign < 0) - isl_seq_combine(bmap->ineq[k], - ctx->one, var->list->row[j], - ctx->negone, var->list->row[i], - var->list->n_col); - else - isl_seq_combine(bmap->ineq[k], - ctx->negone, var->list->row[j], - ctx->one, var->list->row[i], - var->list->n_col); - isl_seq_clr(bmap->ineq[k] + var->list->n_col, - 1 + total - var->list->n_col); - if (j < i) - isl_int_sub_ui(bmap->ineq[k][0], - bmap->ineq[k][0], 1); - } - bmap = isl_basic_map_finalize(bmap); - split = isl_map_add_basic_map(split, bmap); - } - - map = isl_map_intersect(map, split); - - return map; -error: - isl_basic_map_free(bmap); - isl_map_free(split); - isl_map_free(map); - return NULL; -} - -/* Plug in the definitions of all min and max expressions. - * If a min expression only appears in inequalities and only - * with a positive coefficient, then we can simply bound - * the variable representing the min by its defining terms - * and similarly for a max expression. - * Otherwise, we have to assign the different terms to the - * variable under the condition that the assigned term is smaller - * than the other terms. - */ -static __isl_give isl_map *add_minmax(__isl_take isl_map *map, - struct vars *v, int n) -{ - struct variable *var; - - while (n < v->n) { - var = first_minmax(v, n); - if (!var) - break; - if (all_coefficients_of_sign(map, var->pos, -var->sign)) - map = bound_minmax(map, var); - else - map = set_minmax(map, var); - n = var->pos + 1; - } - - return map; -} - -static isl_map *read_constraint(struct isl_stream *s, - struct vars *v, __isl_take isl_basic_map *bmap) -{ - int n = v->n; - isl_map *map; - unsigned total; - - if (!bmap) - return NULL; - - bmap = isl_basic_set_unwrap(isl_basic_set_lift(isl_basic_map_wrap(bmap))); - total = isl_basic_map_total_dim(bmap); - while (v->n < total) - if (vars_add_anon(v) < 0) - goto error; - - bmap = add_constraint(s, v, bmap); - bmap = isl_basic_map_simplify(bmap); - bmap = isl_basic_map_finalize(bmap); - - map = isl_map_from_basic_map(bmap); - - map = add_minmax(map, v, n); - - map = isl_set_unwrap(isl_map_domain(map)); - - vars_drop(v, v->n - n); - - return map; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static struct isl_map *read_disjuncts(struct isl_stream *s, - struct vars *v, __isl_take isl_basic_map *bmap); - -static __isl_give isl_map *read_exists(struct isl_stream *s, - struct vars *v, __isl_take isl_basic_map *bmap) -{ - int n = v->n; - int seen_paren = isl_stream_eat_if_available(s, '('); - isl_map *map = NULL; - - bmap = isl_basic_map_from_domain(isl_basic_map_wrap(bmap)); - bmap = read_defined_var_list(s, v, bmap); - - if (isl_stream_eat(s, ':')) - goto error; - - map = read_disjuncts(s, v, bmap); - map = isl_set_unwrap(isl_map_domain(map)); - bmap = NULL; - - vars_drop(v, v->n - n); - if (seen_paren && isl_stream_eat(s, ')')) - goto error; - - return map; -error: - isl_basic_map_free(bmap); - isl_map_free(map); - return NULL; -} - -static __isl_give isl_map *read_conjunct(struct isl_stream *s, - struct vars *v, __isl_take isl_basic_map *bmap) -{ - isl_map *map; - - if (isl_stream_eat_if_available(s, '(')) { - map = read_disjuncts(s, v, bmap); - if (isl_stream_eat(s, ')')) - goto error; - return map; - } - - if (isl_stream_eat_if_available(s, ISL_TOKEN_EXISTS)) - return read_exists(s, v, bmap); - - if (isl_stream_eat_if_available(s, ISL_TOKEN_TRUE)) - return isl_map_from_basic_map(bmap); - - if (isl_stream_eat_if_available(s, ISL_TOKEN_FALSE)) { - isl_dim *dim = isl_basic_map_get_dim(bmap); - isl_basic_map_free(bmap); - return isl_map_empty(dim); - } - - return read_constraint(s, v, bmap); -error: - isl_map_free(map); - return NULL; -} - -static __isl_give isl_map *read_conjuncts(struct isl_stream *s, - struct vars *v, __isl_take isl_basic_map *bmap) -{ - isl_map *map; - int negate; - - negate = isl_stream_eat_if_available(s, ISL_TOKEN_NOT); - map = read_conjunct(s, v, isl_basic_map_copy(bmap)); - if (negate) { - isl_map *t; - t = isl_map_from_basic_map(isl_basic_map_copy(bmap)); - map = isl_map_subtract(t, map); - } - - while (isl_stream_eat_if_available(s, ISL_TOKEN_AND)) { - isl_map *map_i; - - negate = isl_stream_eat_if_available(s, ISL_TOKEN_NOT); - map_i = read_conjunct(s, v, isl_basic_map_copy(bmap)); - if (negate) - map = isl_map_subtract(map, map_i); - else - map = isl_map_intersect(map, map_i); - } - - isl_basic_map_free(bmap); - return map; -} - -static struct isl_map *read_disjuncts(struct isl_stream *s, - struct vars *v, __isl_take isl_basic_map *bmap) -{ - struct isl_map *map; - - if (isl_stream_next_token_is(s, '}')) { - isl_dim *dim = isl_basic_map_get_dim(bmap); - isl_basic_map_free(bmap); - return isl_map_universe(dim); - } - - map = read_conjuncts(s, v, isl_basic_map_copy(bmap)); - while (isl_stream_eat_if_available(s, ISL_TOKEN_OR)) { - isl_map *map_i; - - map_i = read_conjuncts(s, v, isl_basic_map_copy(bmap)); - map = isl_map_union(map, map_i); - } - - isl_basic_map_free(bmap); - return map; -} - -static int polylib_pos_to_isl_pos(__isl_keep isl_basic_map *bmap, int pos) -{ - if (pos < isl_basic_map_dim(bmap, isl_dim_out)) - return 1 + isl_basic_map_dim(bmap, isl_dim_param) + - isl_basic_map_dim(bmap, isl_dim_in) + pos; - pos -= isl_basic_map_dim(bmap, isl_dim_out); - - if (pos < isl_basic_map_dim(bmap, isl_dim_in)) - return 1 + isl_basic_map_dim(bmap, isl_dim_param) + pos; - pos -= isl_basic_map_dim(bmap, isl_dim_in); - - if (pos < isl_basic_map_dim(bmap, isl_dim_div)) - return 1 + isl_basic_map_dim(bmap, isl_dim_param) + - isl_basic_map_dim(bmap, isl_dim_in) + - isl_basic_map_dim(bmap, isl_dim_out) + pos; - pos -= isl_basic_map_dim(bmap, isl_dim_div); - - if (pos < isl_basic_map_dim(bmap, isl_dim_param)) - return 1 + pos; - - return 0; -} - -static __isl_give isl_basic_map *basic_map_read_polylib_constraint( - struct isl_stream *s, __isl_take isl_basic_map *bmap) -{ - int j; - struct isl_token *tok; - int type; - int k; - isl_int *c; - unsigned nparam; - unsigned dim; - - if (!bmap) - return NULL; - - nparam = isl_basic_map_dim(bmap, isl_dim_param); - dim = isl_basic_map_dim(bmap, isl_dim_out); - - tok = isl_stream_next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expecting coefficient"); - if (tok) - isl_stream_push_token(s, tok); - goto error; - } - if (!tok->on_new_line) { - isl_stream_error(s, tok, "coefficient should appear on new line"); - isl_stream_push_token(s, tok); - goto error; - } - - type = isl_int_get_si(tok->u.v); - isl_token_free(tok); - - isl_assert(s->ctx, type == 0 || type == 1, goto error); - if (type == 0) { - k = isl_basic_map_alloc_equality(bmap); - c = bmap->eq[k]; - } else { - k = isl_basic_map_alloc_inequality(bmap); - c = bmap->ineq[k]; - } - if (k < 0) - goto error; - - for (j = 0; j < 1 + isl_basic_map_total_dim(bmap); ++j) { - int pos; - tok = isl_stream_next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expecting coefficient"); - if (tok) - isl_stream_push_token(s, tok); - goto error; - } - if (tok->on_new_line) { - isl_stream_error(s, tok, - "coefficient should not appear on new line"); - isl_stream_push_token(s, tok); - goto error; - } - pos = polylib_pos_to_isl_pos(bmap, j); - isl_int_set(c[pos], tok->u.v); - isl_token_free(tok); - } - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static __isl_give isl_basic_map *basic_map_read_polylib(struct isl_stream *s, - int nparam) -{ - int i; - struct isl_token *tok; - struct isl_token *tok2; - int n_row, n_col; - int on_new_line; - unsigned in = 0, out, local = 0; - struct isl_basic_map *bmap = NULL; - - if (nparam < 0) - nparam = 0; - - tok = isl_stream_next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - return NULL; - } - tok2 = isl_stream_next_token(s); - if (!tok2) { - isl_token_free(tok); - isl_stream_error(s, NULL, "unexpected EOF"); - return NULL; - } - if (tok->type != ISL_TOKEN_VALUE || tok2->type != ISL_TOKEN_VALUE) { - isl_stream_push_token(s, tok2); - isl_stream_push_token(s, tok); - isl_stream_error(s, NULL, - "expecting constraint matrix dimensions"); - return NULL; - } - n_row = isl_int_get_si(tok->u.v); - n_col = isl_int_get_si(tok2->u.v); - on_new_line = tok2->on_new_line; - isl_token_free(tok2); - isl_token_free(tok); - isl_assert(s->ctx, !on_new_line, return NULL); - isl_assert(s->ctx, n_row >= 0, return NULL); - isl_assert(s->ctx, n_col >= 2 + nparam, return NULL); - tok = isl_stream_next_token_on_same_line(s); - if (tok) { - if (tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, - "expecting number of output dimensions"); - isl_stream_push_token(s, tok); - goto error; - } - out = isl_int_get_si(tok->u.v); - isl_token_free(tok); - - tok = isl_stream_next_token_on_same_line(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, - "expecting number of input dimensions"); - if (tok) - isl_stream_push_token(s, tok); - goto error; - } - in = isl_int_get_si(tok->u.v); - isl_token_free(tok); - - tok = isl_stream_next_token_on_same_line(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, - "expecting number of existentials"); - if (tok) - isl_stream_push_token(s, tok); - goto error; - } - local = isl_int_get_si(tok->u.v); - isl_token_free(tok); - - tok = isl_stream_next_token_on_same_line(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, - "expecting number of parameters"); - if (tok) - isl_stream_push_token(s, tok); - goto error; - } - nparam = isl_int_get_si(tok->u.v); - isl_token_free(tok); - if (n_col != 1 + out + in + local + nparam + 1) { - isl_stream_error(s, NULL, - "dimensions don't match"); - goto error; - } - } else - out = n_col - 2 - nparam; - bmap = isl_basic_map_alloc(s->ctx, nparam, in, out, local, n_row, n_row); - if (!bmap) - return NULL; - - for (i = 0; i < local; ++i) { - int k = isl_basic_map_alloc_div(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->div[k], 1 + 1 + nparam + in + out + local); - } - - for (i = 0; i < n_row; ++i) - bmap = basic_map_read_polylib_constraint(s, bmap); - - tok = isl_stream_next_token_on_same_line(s); - if (tok) { - isl_stream_error(s, tok, "unexpected extra token on line"); - isl_stream_push_token(s, tok); - goto error; - } - - bmap = isl_basic_map_simplify(bmap); - bmap = isl_basic_map_finalize(bmap); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static struct isl_map *map_read_polylib(struct isl_stream *s, int nparam) -{ - struct isl_token *tok; - struct isl_token *tok2; - int i, n; - struct isl_map *map; - - tok = isl_stream_next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - return NULL; - } - tok2 = isl_stream_next_token_on_same_line(s); - if (tok2 && tok2->type == ISL_TOKEN_VALUE) { - isl_stream_push_token(s, tok2); - isl_stream_push_token(s, tok); - return isl_map_from_basic_map(basic_map_read_polylib(s, nparam)); - } - if (tok2) { - isl_stream_error(s, tok2, "unexpected token"); - isl_stream_push_token(s, tok2); - isl_stream_push_token(s, tok); - return NULL; - } - n = isl_int_get_si(tok->u.v); - isl_token_free(tok); - - isl_assert(s->ctx, n >= 1, return NULL); - - map = isl_map_from_basic_map(basic_map_read_polylib(s, nparam)); - - for (i = 1; map && i < n; ++i) - map = isl_map_union(map, - isl_map_from_basic_map(basic_map_read_polylib(s, nparam))); - - return map; -} - -static int optional_power(struct isl_stream *s) -{ - int pow; - struct isl_token *tok; - - tok = isl_stream_next_token(s); - if (!tok) - return 1; - if (tok->type != '^') { - isl_stream_push_token(s, tok); - return 1; - } - isl_token_free(tok); - tok = isl_stream_next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expecting exponent"); - if (tok) - isl_stream_push_token(s, tok); - return 1; - } - pow = isl_int_get_si(tok->u.v); - isl_token_free(tok); - return pow; -} - -static __isl_give isl_div *read_div(struct isl_stream *s, - __isl_take isl_dim *dim, struct vars *v) -{ - int n; - isl_basic_map *bmap; - - n = v->n; - bmap = isl_basic_map_universe(dim); - - if (vars_add_anon(v) < 0) - goto error; - if (read_div_definition(s, v) < 0) - goto error; - bmap = add_divs(bmap, v); - bmap = isl_basic_map_order_divs(bmap); - if (!bmap) - goto error; - vars_drop(v, v->n - n); - - return isl_basic_map_div(bmap, bmap->n_div - 1); -error: - isl_basic_map_free(bmap); - return NULL; -} - -static __isl_give isl_qpolynomial *read_term(struct isl_stream *s, - __isl_keep isl_basic_map *bmap, struct vars *v); - -static __isl_give isl_qpolynomial *read_factor(struct isl_stream *s, - __isl_keep isl_basic_map *bmap, struct vars *v) -{ - struct isl_qpolynomial *qp; - struct isl_token *tok; - - tok = next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - return NULL; - } - if (tok->type == '(') { - int pow; - - isl_token_free(tok); - qp = read_term(s, bmap, v); - if (!qp) - return NULL; - if (isl_stream_eat(s, ')')) - goto error; - pow = optional_power(s); - qp = isl_qpolynomial_pow(qp, pow); - } else if (tok->type == ISL_TOKEN_VALUE) { - struct isl_token *tok2; - tok2 = isl_stream_next_token(s); - if (tok2 && tok2->type == '/') { - isl_token_free(tok2); - tok2 = next_token(s); - if (!tok2 || tok2->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok2, "expected denominator"); - isl_token_free(tok); - isl_token_free(tok2); - return NULL; - } - qp = isl_qpolynomial_rat_cst(isl_basic_map_get_dim(bmap), - tok->u.v, tok2->u.v); - isl_token_free(tok2); - } else { - isl_stream_push_token(s, tok2); - qp = isl_qpolynomial_cst(isl_basic_map_get_dim(bmap), - tok->u.v); - } - isl_token_free(tok); - } else if (tok->type == ISL_TOKEN_INFTY) { - isl_token_free(tok); - qp = isl_qpolynomial_infty(isl_basic_map_get_dim(bmap)); - } else if (tok->type == ISL_TOKEN_NAN) { - isl_token_free(tok); - qp = isl_qpolynomial_nan(isl_basic_map_get_dim(bmap)); - } else if (tok->type == ISL_TOKEN_IDENT) { - int n = v->n; - int pos = vars_pos(v, tok->u.s, -1); - int pow; - if (pos < 0) { - isl_token_free(tok); - return NULL; - } - if (pos >= n) { - vars_drop(v, v->n - n); - isl_stream_error(s, tok, "unknown identifier"); - isl_token_free(tok); - return NULL; - } - isl_token_free(tok); - pow = optional_power(s); - qp = isl_qpolynomial_var_pow(isl_basic_map_get_dim(bmap), pos, pow); - } else if (tok->type == '[') { - isl_div *div; - int pow; - - isl_stream_push_token(s, tok); - div = read_div(s, isl_basic_map_get_dim(bmap), v); - pow = optional_power(s); - qp = isl_qpolynomial_div_pow(div, pow); - } else if (tok->type == '-') { - struct isl_qpolynomial *qp2; - - isl_token_free(tok); - qp = isl_qpolynomial_cst(isl_basic_map_get_dim(bmap), - s->ctx->negone); - qp2 = read_factor(s, bmap, v); - qp = isl_qpolynomial_mul(qp, qp2); - } else { - isl_stream_error(s, tok, "unexpected isl_token"); - isl_stream_push_token(s, tok); - return NULL; - } - - if (isl_stream_eat_if_available(s, '*') || - isl_stream_next_token_is(s, ISL_TOKEN_IDENT)) { - struct isl_qpolynomial *qp2; - - qp2 = read_factor(s, bmap, v); - qp = isl_qpolynomial_mul(qp, qp2); - } - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -static __isl_give isl_qpolynomial *read_term(struct isl_stream *s, - __isl_keep isl_basic_map *bmap, struct vars *v) -{ - struct isl_token *tok; - struct isl_qpolynomial *qp; - - qp = read_factor(s, bmap, v); - - for (;;) { - tok = next_token(s); - if (!tok) - return qp; - - if (tok->type == '+') { - struct isl_qpolynomial *qp2; - - isl_token_free(tok); - qp2 = read_factor(s, bmap, v); - qp = isl_qpolynomial_add(qp, qp2); - } else if (tok->type == '-') { - struct isl_qpolynomial *qp2; - - isl_token_free(tok); - qp2 = read_factor(s, bmap, v); - qp = isl_qpolynomial_sub(qp, qp2); - } else if (tok->type == ISL_TOKEN_VALUE && - isl_int_is_neg(tok->u.v)) { - struct isl_qpolynomial *qp2; - - isl_stream_push_token(s, tok); - qp2 = read_factor(s, bmap, v); - qp = isl_qpolynomial_add(qp, qp2); - } else { - isl_stream_push_token(s, tok); - break; - } - } - - return qp; -} - -static __isl_give isl_map *read_optional_disjuncts(struct isl_stream *s, - __isl_take isl_basic_map *bmap, struct vars *v) -{ - struct isl_token *tok; - struct isl_map *map; - - tok = isl_stream_next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - goto error; - } - map = isl_map_from_basic_map(isl_basic_map_copy(bmap)); - if (tok->type == ':' || - (tok->type == ISL_TOKEN_OR && !strcmp(tok->u.s, "|"))) { - isl_token_free(tok); - map = isl_map_intersect(map, - read_disjuncts(s, v, isl_basic_map_copy(bmap))); - } else - isl_stream_push_token(s, tok); - - isl_basic_map_free(bmap); - - return map; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static struct isl_obj obj_read_poly(struct isl_stream *s, - __isl_take isl_basic_map *bmap, struct vars *v, int n) -{ - struct isl_obj obj = { isl_obj_pw_qpolynomial, NULL }; - struct isl_pw_qpolynomial *pwqp; - struct isl_qpolynomial *qp; - struct isl_map *map; - struct isl_set *set; - - qp = read_term(s, bmap, v); - map = read_optional_disjuncts(s, bmap, v); - set = isl_map_range(map); - - pwqp = isl_pw_qpolynomial_alloc(set, qp); - - vars_drop(v, v->n - n); - - obj.v = pwqp; - return obj; -} - -static struct isl_obj obj_read_poly_or_fold(struct isl_stream *s, - __isl_take isl_basic_map *bmap, struct vars *v, int n) -{ - struct isl_obj obj = { isl_obj_pw_qpolynomial_fold, NULL }; - isl_qpolynomial *qp; - isl_qpolynomial_fold *fold = NULL; - isl_pw_qpolynomial_fold *pwf; - isl_map *map; - isl_set *set; - - if (!isl_stream_eat_if_available(s, ISL_TOKEN_MAX)) - return obj_read_poly(s, bmap, v, n); - - if (isl_stream_eat(s, '(')) - goto error; - - qp = read_term(s, bmap, v); - fold = isl_qpolynomial_fold_alloc(isl_fold_max, qp); - - while (isl_stream_eat_if_available(s, ',')) { - isl_qpolynomial_fold *fold_i; - qp = read_term(s, bmap, v); - fold_i = isl_qpolynomial_fold_alloc(isl_fold_max, qp); - fold = isl_qpolynomial_fold_fold(fold, fold_i); - } - - if (isl_stream_eat(s, ')')) - goto error; - - map = read_optional_disjuncts(s, bmap, v); - set = isl_map_range(map); - pwf = isl_pw_qpolynomial_fold_alloc(isl_fold_max, set, fold); - - vars_drop(v, v->n - n); - - obj.v = pwf; - return obj; -error: - isl_basic_map_free(bmap); - isl_qpolynomial_fold_free(fold); - obj.type = isl_obj_none; - return obj; -} - -static int is_rational(struct isl_stream *s) -{ - struct isl_token *tok; - - tok = isl_stream_next_token(s); - if (!tok) - return 0; - if (tok->type == ISL_TOKEN_RAT && isl_stream_next_token_is(s, ':')) { - isl_token_free(tok); - isl_stream_eat(s, ':'); - return 1; - } - - isl_stream_push_token(s, tok); - - return 0; -} - -static struct isl_obj obj_read_body(struct isl_stream *s, - __isl_take isl_basic_map *bmap, struct vars *v) -{ - struct isl_map *map = NULL; - struct isl_token *tok; - struct isl_obj obj = { isl_obj_set, NULL }; - int n = v->n; - - if (is_rational(s)) - bmap = isl_basic_map_set_rational(bmap); - - if (!next_is_tuple(s)) - return obj_read_poly_or_fold(s, bmap, v, n); - - bmap = read_tuple(s, bmap, isl_dim_in, v); - if (!bmap) - goto error; - tok = isl_stream_next_token(s); - if (tok && tok->type == ISL_TOKEN_TO) { - obj.type = isl_obj_map; - isl_token_free(tok); - if (!next_is_tuple(s)) { - bmap = isl_basic_map_reverse(bmap); - return obj_read_poly_or_fold(s, bmap, v, n); - } - bmap = read_tuple(s, bmap, isl_dim_out, v); - if (!bmap) - goto error; - } else { - bmap = isl_basic_map_reverse(bmap); - if (tok) - isl_stream_push_token(s, tok); - } - - map = read_optional_disjuncts(s, bmap, v); - - vars_drop(v, v->n - n); - - obj.v = map; - return obj; -error: - isl_basic_map_free(bmap); - obj.type = isl_obj_none; - return obj; -} - -static struct isl_obj to_union(isl_ctx *ctx, struct isl_obj obj) -{ - if (obj.type == isl_obj_map) { - obj.v = isl_union_map_from_map(obj.v); - obj.type = isl_obj_union_map; - } else if (obj.type == isl_obj_set) { - obj.v = isl_union_set_from_set(obj.v); - obj.type = isl_obj_union_set; - } else if (obj.type == isl_obj_pw_qpolynomial) { - obj.v = isl_union_pw_qpolynomial_from_pw_qpolynomial(obj.v); - obj.type = isl_obj_union_pw_qpolynomial; - } else if (obj.type == isl_obj_pw_qpolynomial_fold) { - obj.v = isl_union_pw_qpolynomial_fold_from_pw_qpolynomial_fold(obj.v); - obj.type = isl_obj_union_pw_qpolynomial_fold; - } else - isl_assert(ctx, 0, goto error); - return obj; -error: - obj.type->free(obj.v); - obj.type = isl_obj_none; - return obj; -} - -static struct isl_obj obj_add(struct isl_ctx *ctx, - struct isl_obj obj1, struct isl_obj obj2) -{ - if (obj1.type == isl_obj_set && obj2.type == isl_obj_union_set) - obj1 = to_union(ctx, obj1); - if (obj1.type == isl_obj_union_set && obj2.type == isl_obj_set) - obj2 = to_union(ctx, obj2); - if (obj1.type == isl_obj_map && obj2.type == isl_obj_union_map) - obj1 = to_union(ctx, obj1); - if (obj1.type == isl_obj_union_map && obj2.type == isl_obj_map) - obj2 = to_union(ctx, obj2); - if (obj1.type == isl_obj_pw_qpolynomial && - obj2.type == isl_obj_union_pw_qpolynomial) - obj1 = to_union(ctx, obj1); - if (obj1.type == isl_obj_union_pw_qpolynomial && - obj2.type == isl_obj_pw_qpolynomial) - obj2 = to_union(ctx, obj2); - if (obj1.type == isl_obj_pw_qpolynomial_fold && - obj2.type == isl_obj_union_pw_qpolynomial_fold) - obj1 = to_union(ctx, obj1); - if (obj1.type == isl_obj_union_pw_qpolynomial_fold && - obj2.type == isl_obj_pw_qpolynomial_fold) - obj2 = to_union(ctx, obj2); - isl_assert(ctx, obj1.type == obj2.type, goto error); - if (obj1.type == isl_obj_map && !isl_map_has_equal_dim(obj1.v, obj2.v)) { - obj1 = to_union(ctx, obj1); - obj2 = to_union(ctx, obj2); - } - if (obj1.type == isl_obj_set && !isl_set_has_equal_dim(obj1.v, obj2.v)) { - obj1 = to_union(ctx, obj1); - obj2 = to_union(ctx, obj2); - } - if (obj1.type == isl_obj_pw_qpolynomial && - !isl_pw_qpolynomial_has_equal_dim(obj1.v, obj2.v)) { - obj1 = to_union(ctx, obj1); - obj2 = to_union(ctx, obj2); - } - if (obj1.type == isl_obj_pw_qpolynomial_fold && - !isl_pw_qpolynomial_fold_has_equal_dim(obj1.v, obj2.v)) { - obj1 = to_union(ctx, obj1); - obj2 = to_union(ctx, obj2); - } - obj1.v = obj1.type->add(obj1.v, obj2.v); - return obj1; -error: - obj1.type->free(obj1.v); - obj2.type->free(obj2.v); - obj1.type = isl_obj_none; - obj1.v = NULL; - return obj1; -} - -static struct isl_obj obj_read(struct isl_stream *s, int nparam) -{ - isl_basic_map *bmap = NULL; - struct isl_token *tok; - struct vars *v = NULL; - struct isl_obj obj = { isl_obj_set, NULL }; - - tok = next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - goto error; - } - if (tok->type == ISL_TOKEN_VALUE) { - struct isl_token *tok2; - struct isl_map *map; - - tok2 = isl_stream_next_token(s); - if (!tok2 || tok2->type != ISL_TOKEN_VALUE || - isl_int_is_neg(tok2->u.v)) { - if (tok2) - isl_stream_push_token(s, tok2); - obj.type = isl_obj_int; - obj.v = isl_int_obj_alloc(s->ctx, tok->u.v); - isl_token_free(tok); - return obj; - } - isl_stream_push_token(s, tok2); - isl_stream_push_token(s, tok); - map = map_read_polylib(s, nparam); - if (!map) - goto error; - if (isl_map_dim(map, isl_dim_in) > 0) - obj.type = isl_obj_map; - obj.v = map; - return obj; - } - v = vars_new(s->ctx); - if (!v) { - isl_stream_push_token(s, tok); - goto error; - } - bmap = isl_basic_map_alloc(s->ctx, 0, 0, 0, 0, 0, 0); - if (tok->type == '[') { - isl_stream_push_token(s, tok); - bmap = read_tuple(s, bmap, isl_dim_param, v); - if (!bmap) - goto error; - if (nparam >= 0) - isl_assert(s->ctx, nparam == v->n, goto error); - tok = isl_stream_next_token(s); - if (!tok || tok->type != ISL_TOKEN_TO) { - isl_stream_error(s, tok, "expecting '->'"); - if (tok) - isl_stream_push_token(s, tok); - goto error; - } - isl_token_free(tok); - tok = isl_stream_next_token(s); - } else if (nparam > 0) - bmap = isl_basic_map_add(bmap, isl_dim_param, nparam); - if (!tok || tok->type != '{') { - isl_stream_error(s, tok, "expecting '{'"); - if (tok) - isl_stream_push_token(s, tok); - goto error; - } - isl_token_free(tok); - - tok = isl_stream_next_token(s); - if (!tok) - ; - else if (tok->type == ISL_TOKEN_IDENT && !strcmp(tok->u.s, "Sym")) { - isl_token_free(tok); - if (isl_stream_eat(s, '=')) - goto error; - bmap = read_tuple(s, bmap, isl_dim_param, v); - if (!bmap) - goto error; - if (nparam >= 0) - isl_assert(s->ctx, nparam == v->n, goto error); - } else if (tok->type == '}') { - obj.type = isl_obj_union_set; - obj.v = isl_union_set_empty(isl_basic_map_get_dim(bmap)); - isl_token_free(tok); - goto done; - } else - isl_stream_push_token(s, tok); - - for (;;) { - struct isl_obj o; - tok = NULL; - o = obj_read_body(s, isl_basic_map_copy(bmap), v); - if (o.type == isl_obj_none || !o.v) - goto error; - if (!obj.v) - obj = o; - else { - obj = obj_add(s->ctx, obj, o); - if (obj.type == isl_obj_none || !obj.v) - goto error; - } - tok = isl_stream_next_token(s); - if (!tok || tok->type != ';') - break; - isl_token_free(tok); - if (isl_stream_next_token_is(s, '}')) { - tok = isl_stream_next_token(s); - break; - } - } - - if (tok && tok->type == '}') { - isl_token_free(tok); - } else { - isl_stream_error(s, tok, "unexpected isl_token"); - if (tok) - isl_token_free(tok); - goto error; - } -done: - vars_free(v); - isl_basic_map_free(bmap); - - return obj; -error: - isl_basic_map_free(bmap); - obj.type->free(obj.v); - if (v) - vars_free(v); - obj.v = NULL; - return obj; -} - -struct isl_obj isl_stream_read_obj(struct isl_stream *s) -{ - return obj_read(s, -1); -} - -__isl_give isl_map *isl_stream_read_map(struct isl_stream *s, int nparam) -{ - struct isl_obj obj; - - obj = obj_read(s, nparam); - if (obj.v) - isl_assert(s->ctx, obj.type == isl_obj_map || - obj.type == isl_obj_set, goto error); - - return obj.v; -error: - obj.type->free(obj.v); - return NULL; -} - -__isl_give isl_set *isl_stream_read_set(struct isl_stream *s, int nparam) -{ - struct isl_obj obj; - - obj = obj_read(s, nparam); - if (obj.v) - isl_assert(s->ctx, obj.type == isl_obj_set, goto error); - - return obj.v; -error: - obj.type->free(obj.v); - return NULL; -} - -__isl_give isl_union_map *isl_stream_read_union_map(struct isl_stream *s) -{ - struct isl_obj obj; - - obj = obj_read(s, -1); - if (obj.type == isl_obj_map) { - obj.type = isl_obj_union_map; - obj.v = isl_union_map_from_map(obj.v); - } - if (obj.type == isl_obj_set) { - obj.type = isl_obj_union_set; - obj.v = isl_union_set_from_set(obj.v); - } - if (obj.v) - isl_assert(s->ctx, obj.type == isl_obj_union_map || - obj.type == isl_obj_union_set, goto error); - - return obj.v; -error: - obj.type->free(obj.v); - return NULL; -} - -__isl_give isl_union_set *isl_stream_read_union_set(struct isl_stream *s) -{ - struct isl_obj obj; - - obj = obj_read(s, -1); - if (obj.type == isl_obj_set) { - obj.type = isl_obj_union_set; - obj.v = isl_union_set_from_set(obj.v); - } - if (obj.v) - isl_assert(s->ctx, obj.type == isl_obj_union_set, goto error); - - return obj.v; -error: - obj.type->free(obj.v); - return NULL; -} - -static struct isl_basic_map *basic_map_read(struct isl_stream *s, int nparam) -{ - struct isl_obj obj; - struct isl_map *map; - struct isl_basic_map *bmap; - - obj = obj_read(s, nparam); - map = obj.v; - if (!map) - return NULL; - - isl_assert(map->ctx, map->n <= 1, goto error); - - if (map->n == 0) - bmap = isl_basic_map_empty_like_map(map); - else - bmap = isl_basic_map_copy(map->p[0]); - - isl_map_free(map); - - return bmap; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_read_from_file(isl_ctx *ctx, - FILE *input, int nparam) -{ - struct isl_basic_map *bmap; - struct isl_stream *s = isl_stream_new_file(ctx, input); - if (!s) - return NULL; - bmap = basic_map_read(s, nparam); - isl_stream_free(s); - return bmap; -} - -__isl_give isl_basic_set *isl_basic_set_read_from_file(isl_ctx *ctx, - FILE *input, int nparam) -{ - struct isl_basic_map *bmap; - bmap = isl_basic_map_read_from_file(ctx, input, nparam); - if (!bmap) - return NULL; - isl_assert(ctx, isl_basic_map_n_in(bmap) == 0, goto error); - return (struct isl_basic_set *)bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_map *isl_basic_map_read_from_str(struct isl_ctx *ctx, - const char *str, int nparam) -{ - struct isl_basic_map *bmap; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - bmap = basic_map_read(s, nparam); - isl_stream_free(s); - return bmap; -} - -struct isl_basic_set *isl_basic_set_read_from_str(struct isl_ctx *ctx, - const char *str, int nparam) -{ - struct isl_basic_map *bmap; - bmap = isl_basic_map_read_from_str(ctx, str, nparam); - if (!bmap) - return NULL; - isl_assert(ctx, isl_basic_map_n_in(bmap) == 0, goto error); - return (struct isl_basic_set *)bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_map *isl_map_read_from_file(struct isl_ctx *ctx, - FILE *input, int nparam) -{ - struct isl_map *map; - struct isl_stream *s = isl_stream_new_file(ctx, input); - if (!s) - return NULL; - map = isl_stream_read_map(s, nparam); - isl_stream_free(s); - return map; -} - -__isl_give isl_map *isl_map_read_from_str(struct isl_ctx *ctx, - const char *str, int nparam) -{ - struct isl_map *map; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - map = isl_stream_read_map(s, nparam); - isl_stream_free(s); - return map; -} - -__isl_give isl_set *isl_set_read_from_file(struct isl_ctx *ctx, - FILE *input, int nparam) -{ - struct isl_map *map; - map = isl_map_read_from_file(ctx, input, nparam); - if (!map) - return NULL; - isl_assert(ctx, isl_map_n_in(map) == 0, goto error); - return (struct isl_set *)map; -error: - isl_map_free(map); - return NULL; -} - -struct isl_set *isl_set_read_from_str(struct isl_ctx *ctx, - const char *str, int nparam) -{ - struct isl_map *map; - map = isl_map_read_from_str(ctx, str, nparam); - if (!map) - return NULL; - isl_assert(ctx, isl_map_n_in(map) == 0, goto error); - return (struct isl_set *)map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_union_map *isl_union_map_read_from_file(isl_ctx *ctx, - FILE *input) -{ - isl_union_map *umap; - struct isl_stream *s = isl_stream_new_file(ctx, input); - if (!s) - return NULL; - umap = isl_stream_read_union_map(s); - isl_stream_free(s); - return umap; -} - -__isl_give isl_union_map *isl_union_map_read_from_str(struct isl_ctx *ctx, - const char *str) -{ - isl_union_map *umap; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - umap = isl_stream_read_union_map(s); - isl_stream_free(s); - return umap; -} - -__isl_give isl_union_set *isl_union_set_read_from_file(isl_ctx *ctx, - FILE *input) -{ - isl_union_set *uset; - struct isl_stream *s = isl_stream_new_file(ctx, input); - if (!s) - return NULL; - uset = isl_stream_read_union_set(s); - isl_stream_free(s); - return uset; -} - -__isl_give isl_union_set *isl_union_set_read_from_str(struct isl_ctx *ctx, - const char *str) -{ - isl_union_set *uset; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - uset = isl_stream_read_union_set(s); - isl_stream_free(s); - return uset; -} - -static __isl_give isl_vec *isl_vec_read_polylib(struct isl_stream *s) -{ - struct isl_vec *vec = NULL; - struct isl_token *tok; - unsigned size; - int j; - - tok = isl_stream_next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expecting vector length"); - goto error; - } - - size = isl_int_get_si(tok->u.v); - isl_token_free(tok); - - vec = isl_vec_alloc(s->ctx, size); - - for (j = 0; j < size; ++j) { - tok = isl_stream_next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expecting constant value"); - goto error; - } - isl_int_set(vec->el[j], tok->u.v); - isl_token_free(tok); - } - - return vec; -error: - isl_token_free(tok); - isl_vec_free(vec); - return NULL; -} - -static __isl_give isl_vec *vec_read(struct isl_stream *s) -{ - return isl_vec_read_polylib(s); -} - -__isl_give isl_vec *isl_vec_read_from_file(isl_ctx *ctx, FILE *input) -{ - isl_vec *v; - struct isl_stream *s = isl_stream_new_file(ctx, input); - if (!s) - return NULL; - v = vec_read(s); - isl_stream_free(s); - return v; -} - -__isl_give isl_pw_qpolynomial *isl_stream_read_pw_qpolynomial( - struct isl_stream *s) -{ - struct isl_obj obj; - - obj = obj_read(s, -1); - if (obj.v) - isl_assert(s->ctx, obj.type == isl_obj_pw_qpolynomial, - goto error); - - return obj.v; -error: - obj.type->free(obj.v); - return NULL; -} - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_read_from_str(isl_ctx *ctx, - const char *str) -{ - isl_pw_qpolynomial *pwqp; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - pwqp = isl_stream_read_pw_qpolynomial(s); - isl_stream_free(s); - return pwqp; -} - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_read_from_file(isl_ctx *ctx, - FILE *input) -{ - isl_pw_qpolynomial *pwqp; - struct isl_stream *s = isl_stream_new_file(ctx, input); - if (!s) - return NULL; - pwqp = isl_stream_read_pw_qpolynomial(s); - isl_stream_free(s); - return pwqp; -} diff --git a/cloog-0.16.3/isl/isl_list.c b/cloog-0.16.3/isl/isl_list.c deleted file mode 100644 index ec1dd29..0000000 --- a/cloog-0.16.3/isl/isl_list.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include - -#undef BASE -#define BASE basic_set - -#include - -#undef BASE -#define BASE set - -#include - -#undef BASE -#define BASE aff - -#include - -#undef BASE -#define BASE band - -#include diff --git a/cloog-0.16.3/isl/isl_list_private.h b/cloog-0.16.3/isl/isl_list_private.h deleted file mode 100644 index 15c0547..0000000 --- a/cloog-0.16.3/isl/isl_list_private.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef ISL_LIST_PRIVATE_H -#define ISL_LIST_PRIVATE_H - -#include - -#undef EL -#define EL isl_basic_set - -#include - -#undef EL -#define EL isl_set - -#include - -#undef EL -#define EL isl_aff - -#include - -#undef EL -#define EL isl_band - -#include - -#endif diff --git a/cloog-0.16.3/isl/isl_list_templ.c b/cloog-0.16.3/isl/isl_list_templ.c deleted file mode 100644 index 0bf8294..0000000 --- a/cloog-0.16.3/isl/isl_list_templ.c +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2011 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#define xCAT(A,B) A ## B -#define CAT(A,B) xCAT(A,B) -#undef EL -#define EL CAT(isl_,BASE) -#define xFN(TYPE,NAME) TYPE ## _ ## NAME -#define FN(TYPE,NAME) xFN(TYPE,NAME) -#define xLIST(EL) EL ## _list -#define LIST(EL) xLIST(EL) - -isl_ctx *FN(LIST(EL),get_ctx)(__isl_keep LIST(EL) *list) -{ - return list ? list->ctx : NULL; -} - -__isl_give LIST(EL) *FN(LIST(EL),alloc)(isl_ctx *ctx, int n) -{ - LIST(EL) *list; - - if (n < 0) - isl_die(ctx, isl_error_invalid, - "cannot create list of negative length", - return NULL); - list = isl_alloc(ctx, LIST(EL), - sizeof(LIST(EL)) + (n - 1) * sizeof(struct EL *)); - if (!list) - return NULL; - - list->ctx = ctx; - isl_ctx_ref(ctx); - list->ref = 1; - list->size = n; - list->n = 0; - return list; -} - -__isl_give LIST(EL) *FN(LIST(EL),copy)(__isl_keep LIST(EL) *list) -{ - if (!list) - return NULL; - - list->ref++; - return list; -} - -__isl_give LIST(EL) *FN(LIST(EL),dup)(__isl_keep LIST(EL) *list) -{ - int i; - LIST(EL) *dup; - - if (!list) - return NULL; - - dup = FN(LIST(EL),alloc)(FN(LIST(EL),get_ctx)(list), list->n); - if (!dup) - return NULL; - for (i = 0; i < list->n; ++i) - dup = FN(LIST(EL),add)(dup, FN(EL,copy)(list->p[i])); - return dup; -} - -__isl_give LIST(EL) *FN(LIST(EL),add)(__isl_take LIST(EL) *list, - __isl_take struct EL *el) -{ - if (!list || !el) - goto error; - isl_assert(list->ctx, list->n < list->size, goto error); - list->p[list->n] = el; - list->n++; - return list; -error: - FN(EL,free)(el); - FN(LIST(EL),free)(list); - return NULL; -} - -void FN(LIST(EL),free)(__isl_take LIST(EL) *list) -{ - int i; - - if (!list) - return; - - if (--list->ref > 0) - return; - - isl_ctx_deref(list->ctx); - for (i = 0; i < list->n; ++i) - FN(EL,free)(list->p[i]); - free(list); -} - -int FN(FN(LIST(EL),n),BASE)(__isl_keep LIST(EL) *list) -{ - return list ? list->n : 0; -} - -__isl_give EL *FN(FN(LIST(EL),get),BASE)(__isl_keep LIST(EL) *list, int index) -{ - if (!list) - return NULL; - if (index < 0 || index >= list->n) - isl_die(list->ctx, isl_error_invalid, - "index out of bounds", return NULL); - return FN(EL,copy)(list->p[index]); -} - -int FN(LIST(EL),foreach)(__isl_keep LIST(EL) *list, - int (*fn)(__isl_take EL *el, void *user), void *user) -{ - int i; - - if (!list) - return -1; - - for (i = 0; i < list->n; ++i) { - EL *el = FN(EL,copy(list->p[i])); - if (!el) - return -1; - if (fn(el, user) < 0) - return -1; - } - - return 0; -} - -__isl_give isl_printer *CAT(isl_printer_print_,LIST(BASE))( - __isl_take isl_printer *p, __isl_keep LIST(EL) *list) -{ - int i; - - if (!p || !list) - goto error; - p = isl_printer_print_str(p, "("); - for (i = 0; i < list->n; ++i) { - if (i) - p = isl_printer_print_str(p, ","); - p = CAT(isl_printer_print_,BASE)(p, list->p[i]); - } - p = isl_printer_print_str(p, ")"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -void FN(LIST(EL),dump)(__isl_keep LIST(EL) *list) -{ - isl_printer *printer; - - if (!list) - return; - - printer = isl_printer_to_file(FN(LIST(EL),get_ctx)(list), stderr); - printer = CAT(isl_printer_print_,LIST(BASE))(printer, list); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} diff --git a/cloog-0.16.3/isl/isl_list_templ.h b/cloog-0.16.3/isl/isl_list_templ.h deleted file mode 100644 index a959980..0000000 --- a/cloog-0.16.3/isl/isl_list_templ.h +++ /dev/null @@ -1,23 +0,0 @@ -#define xFN(TYPE,NAME) TYPE ## _ ## NAME -#define FN(TYPE,NAME) xFN(TYPE,NAME) -#define xLIST(EL) EL ## _list -#define LIST(EL) xLIST(EL) - -struct LIST(EL) { - int ref; - isl_ctx *ctx; - - int n; - - size_t size; - struct EL *p[1]; -}; - -#define ISL_DECLARE_LIST_PRIVATE(EL) \ -__isl_give isl_##EL##_list *isl_##EL##_list_dup( \ - __isl_keep isl_##EL##_list *list); - -ISL_DECLARE_LIST_PRIVATE(basic_set) -ISL_DECLARE_LIST_PRIVATE(set) -ISL_DECLARE_LIST_PRIVATE(aff) -ISL_DECLARE_LIST_PRIVATE(band) diff --git a/cloog-0.16.3/isl/isl_local_space.c b/cloog-0.16.3/isl/isl_local_space.c deleted file mode 100644 index 17ac9ea..0000000 --- a/cloog-0.16.3/isl/isl_local_space.c +++ /dev/null @@ -1,612 +0,0 @@ -/* - * Copyright 2011 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include - -isl_ctx *isl_local_space_get_ctx(__isl_keep isl_local_space *ls) -{ - return ls ? ls->dim->ctx : NULL; -} - -__isl_give isl_local_space *isl_local_space_alloc_div(__isl_take isl_dim *dim, - __isl_take isl_mat *div) -{ - isl_ctx *ctx; - isl_local_space *ls = NULL; - - if (!dim) - goto error; - - ctx = isl_dim_get_ctx(dim); - ls = isl_calloc_type(ctx, struct isl_local_space); - if (!ls) - goto error; - - ls->ref = 1; - ls->dim = dim; - ls->div = div; - - return ls; -error: - isl_dim_free(dim); - isl_local_space_free(ls); - return NULL; -} - -__isl_give isl_local_space *isl_local_space_alloc(__isl_take isl_dim *dim, - unsigned n_div) -{ - isl_ctx *ctx; - isl_mat *div; - unsigned total; - - if (!dim) - return NULL; - - total = isl_dim_total(dim); - - ctx = isl_dim_get_ctx(dim); - div = isl_mat_alloc(ctx, n_div, 1 + 1 + total + n_div); - return isl_local_space_alloc_div(dim, div); -} - -__isl_give isl_local_space *isl_local_space_from_dim(__isl_take isl_dim *dim) -{ - return isl_local_space_alloc(dim, 0); -} - -__isl_give isl_local_space *isl_local_space_copy(__isl_keep isl_local_space *ls) -{ - if (!ls) - return NULL; - - ls->ref++; - return ls; -} - -__isl_give isl_local_space *isl_local_space_dup(__isl_keep isl_local_space *ls) -{ - if (!ls) - return NULL; - - return isl_local_space_alloc_div(isl_dim_copy(ls->dim), - isl_mat_copy(ls->div)); - -} - -__isl_give isl_local_space *isl_local_space_cow(__isl_take isl_local_space *ls) -{ - if (!ls) - return NULL; - - if (ls->ref == 1) - return ls; - ls->ref--; - return isl_local_space_dup(ls); -} - -void *isl_local_space_free(__isl_take isl_local_space *ls) -{ - if (!ls) - return NULL; - - if (--ls->ref > 0) - return NULL; - - isl_dim_free(ls->dim); - isl_mat_free(ls->div); - - free(ls); - - return NULL; -} - -/* Return true if the two local spaces are identical, with identical - * expressions for the integer divisions. - */ -int isl_local_space_is_equal(__isl_keep isl_local_space *ls1, - __isl_keep isl_local_space *ls2) -{ - int equal; - - if (!ls1 || !ls2) - return -1; - - equal = isl_dim_equal(ls1->dim, ls2->dim); - if (equal < 0 || !equal) - return equal; - - if (!isl_local_space_divs_known(ls1)) - return 0; - if (!isl_local_space_divs_known(ls2)) - return 0; - - return isl_mat_is_equal(ls1->div, ls2->div); -} - -int isl_local_space_dim(__isl_keep isl_local_space *ls, - enum isl_dim_type type) -{ - if (!ls) - return 0; - if (type == isl_dim_div) - return ls->div->n_row; - if (type == isl_dim_all) - return isl_dim_size(ls->dim, isl_dim_all) + ls->div->n_row; - return isl_dim_size(ls->dim, type); -} - -unsigned isl_local_space_offset(__isl_keep isl_local_space *ls, - enum isl_dim_type type) -{ - isl_dim *dim; - - if (!ls) - return 0; - - dim = ls->dim; - switch (type) { - case isl_dim_cst: return 0; - case isl_dim_param: return 1; - case isl_dim_in: return 1 + dim->nparam; - case isl_dim_out: return 1 + dim->nparam + dim->n_in; - case isl_dim_div: return 1 + dim->nparam + dim->n_in + dim->n_out; - default: return 0; - } -} - -const char *isl_local_space_get_dim_name(__isl_keep isl_local_space *ls, - enum isl_dim_type type, unsigned pos) -{ - return ls ? isl_dim_get_name(ls->dim, type, pos) : NULL; -} - -__isl_give isl_div *isl_local_space_get_div(__isl_keep isl_local_space *ls, - int pos) -{ - isl_basic_map *bmap; - - if (!ls) - return NULL; - - if (pos < 0 || pos >= ls->div->n_row) - isl_die(isl_local_space_get_ctx(ls), isl_error_invalid, - "index out of bounds", return NULL); - - if (isl_int_is_zero(ls->div->row[pos][0])) - isl_die(isl_local_space_get_ctx(ls), isl_error_invalid, - "expression of div unknown", return NULL); - - bmap = isl_basic_map_from_local_space(isl_local_space_copy(ls)); - return isl_basic_map_div(bmap, pos); -} - -__isl_give isl_dim *isl_local_space_get_dim(__isl_keep isl_local_space *ls) -{ - if (!ls) - return NULL; - - return isl_dim_copy(ls->dim); -} - -__isl_give isl_local_space *isl_local_space_set_dim_name( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned pos, const char *s) -{ - ls = isl_local_space_cow(ls); - if (!ls) - return NULL; - ls->dim = isl_dim_set_name(ls->dim, type, pos, s); - if (!ls->dim) - return isl_local_space_free(ls); - - return ls; -} - -__isl_give isl_local_space *isl_local_space_reset_dim( - __isl_take isl_local_space *ls, __isl_take isl_dim *dim) -{ - ls = isl_local_space_cow(ls); - if (!ls || !dim) - goto error; - - isl_dim_free(ls->dim); - ls->dim = dim; - - return ls; -error: - isl_local_space_free(ls); - isl_dim_free(dim); - return NULL; -} - -/* Reorder the columns of the given div definitions according to the - * given reordering. - * The order of the divs themselves is assumed not to change. - */ -static __isl_give isl_mat *reorder_divs(__isl_take isl_mat *div, - __isl_take isl_reordering *r) -{ - int i, j; - isl_mat *mat; - int extra; - - if (!div || !r) - goto error; - - extra = isl_dim_total(r->dim) + div->n_row - r->len; - mat = isl_mat_alloc(div->ctx, div->n_row, div->n_col + extra); - if (!mat) - goto error; - - for (i = 0; i < div->n_row; ++i) { - isl_seq_cpy(mat->row[i], div->row[i], 2); - isl_seq_clr(mat->row[i] + 2, mat->n_col - 2); - for (j = 0; j < r->len; ++j) - isl_int_set(mat->row[i][2 + r->pos[j]], - div->row[i][2 + j]); - } - - isl_reordering_free(r); - isl_mat_free(div); - return mat; -error: - isl_reordering_free(r); - isl_mat_free(div); - return NULL; -} - -/* Reorder the dimensions of "ls" according to the given reordering. - * The reordering r is assumed to have been extended with the local - * variables, leaving them in the same order. - */ -__isl_give isl_local_space *isl_local_space_realign( - __isl_take isl_local_space *ls, __isl_take isl_reordering *r) -{ - ls = isl_local_space_cow(ls); - if (!ls || !r) - goto error; - - ls->div = reorder_divs(ls->div, isl_reordering_copy(r)); - if (!ls->div) - goto error; - - ls = isl_local_space_reset_dim(ls, isl_dim_copy(r->dim)); - - isl_reordering_free(r); - return ls; -error: - isl_local_space_free(ls); - isl_reordering_free(r); - return NULL; -} - -__isl_give isl_local_space *isl_local_space_add_div( - __isl_take isl_local_space *ls, __isl_take isl_vec *div) -{ - ls = isl_local_space_cow(ls); - if (!ls || !div) - goto error; - - if (ls->div->n_col != div->size) - isl_die(isl_local_space_get_ctx(ls), isl_error_invalid, - "incompatible dimensions", goto error); - - ls->div = isl_mat_add_zero_cols(ls->div, 1); - ls->div = isl_mat_add_rows(ls->div, 1); - if (!ls->div) - goto error; - - isl_seq_cpy(ls->div->row[ls->div->n_row - 1], div->el, div->size); - isl_int_set_si(ls->div->row[ls->div->n_row - 1][div->size], 0); - - isl_vec_free(div); - return ls; -error: - isl_local_space_free(ls); - isl_vec_free(div); - return NULL; -} - -__isl_give isl_local_space *isl_local_space_replace_divs( - __isl_take isl_local_space *ls, __isl_take isl_mat *div) -{ - ls = isl_local_space_cow(ls); - - if (!ls || !div) - goto error; - - isl_mat_free(ls->div); - ls->div = div; - return ls; -error: - isl_mat_free(div); - isl_local_space_free(ls); - return NULL; -} - -/* Copy row "s" of "src" to row "d" of "dst", applying the expansion - * defined by "exp". - */ -static void expand_row(__isl_keep isl_mat *dst, int d, - __isl_keep isl_mat *src, int s, int *exp) -{ - int i; - unsigned c = src->n_col - src->n_row; - - isl_seq_cpy(dst->row[d], src->row[s], c); - isl_seq_clr(dst->row[d] + c, dst->n_col - c); - - for (i = 0; i < s; ++i) - isl_int_set(dst->row[d][c + exp[i]], src->row[s][c + i]); -} - -/* Compare (known) divs. - * Return non-zero if at least one of the two divs is unknown. - */ -static int cmp_row(__isl_keep isl_mat *div, int i, int j) -{ - int li, lj; - - if (isl_int_is_zero(div->row[j][0])) - return -1; - if (isl_int_is_zero(div->row[i][0])) - return 1; - - li = isl_seq_last_non_zero(div->row[i], div->n_col); - lj = isl_seq_last_non_zero(div->row[j], div->n_col); - - if (li != lj) - return li - lj; - - return isl_seq_cmp(div->row[i], div->row[j], div->n_col); -} - -/* Combine the two lists of divs into a single list. - * For each row i in div1, exp1[i] is set to the position of the corresponding - * row in the result. Similarly for div2 and exp2. - * This function guarantees - * exp1[i] >= i - * exp1[i+1] > exp1[i] - * For optimal merging, the two input list should have been sorted. - */ -__isl_give isl_mat *isl_merge_divs(__isl_keep isl_mat *div1, - __isl_keep isl_mat *div2, int *exp1, int *exp2) -{ - int i, j, k; - isl_mat *div = NULL; - unsigned d = div1->n_col - div1->n_row; - - div = isl_mat_alloc(div1->ctx, 1 + div1->n_row + div2->n_row, - d + div1->n_row + div2->n_row); - if (!div) - return NULL; - - for (i = 0, j = 0, k = 0; i < div1->n_row && j < div2->n_row; ++k) { - int cmp; - - expand_row(div, k, div1, i, exp1); - expand_row(div, k + 1, div2, j, exp2); - - cmp = cmp_row(div, k, k + 1); - if (cmp == 0) { - exp1[i++] = k; - exp2[j++] = k; - } else if (cmp < 0) { - exp1[i++] = k; - } else { - exp2[j++] = k; - isl_seq_cpy(div->row[k], div->row[k + 1], div->n_col); - } - } - for (; i < div1->n_row; ++i, ++k) { - expand_row(div, k, div1, i, exp1); - exp1[i] = k; - } - for (; j < div2->n_row; ++j, ++k) { - expand_row(div, k, div2, j, exp2); - exp2[j] = k; - } - - div->n_row = k; - div->n_col = d + k; - - return div; -} - -int isl_local_space_divs_known(__isl_keep isl_local_space *ls) -{ - int i; - - if (!ls) - return -1; - - for (i = 0; i < ls->div->n_row; ++i) - if (isl_int_is_zero(ls->div->row[i][0])) - return 0; - - return 1; -} - -/* Construct a local space for a map that has the given local - * space as domain and that has a zero-dimensional range. - */ -__isl_give isl_local_space *isl_local_space_from_domain( - __isl_take isl_local_space *ls) -{ - ls = isl_local_space_cow(ls); - if (!ls) - return NULL; - ls->dim = isl_dim_from_domain(ls->dim); - if (!ls->dim) - return isl_local_space_free(ls); - return ls; -} - -__isl_give isl_local_space *isl_local_space_add_dims( - __isl_take isl_local_space *ls, enum isl_dim_type type, unsigned n) -{ - int pos; - - if (!ls) - return NULL; - pos = isl_local_space_dim(ls, type); - return isl_local_space_insert_dims(ls, type, pos, n); -} - -/* Remove common factor of non-constant terms and denominator. - */ -static void normalize_div(__isl_keep isl_local_space *ls, int div) -{ - isl_ctx *ctx = ls->div->ctx; - unsigned total = ls->div->n_col - 2; - - isl_seq_gcd(ls->div->row[div] + 2, total, &ctx->normalize_gcd); - isl_int_gcd(ctx->normalize_gcd, - ctx->normalize_gcd, ls->div->row[div][0]); - if (isl_int_is_one(ctx->normalize_gcd)) - return; - - isl_seq_scale_down(ls->div->row[div] + 2, ls->div->row[div] + 2, - ctx->normalize_gcd, total); - isl_int_divexact(ls->div->row[div][0], ls->div->row[div][0], - ctx->normalize_gcd); - isl_int_fdiv_q(ls->div->row[div][1], ls->div->row[div][1], - ctx->normalize_gcd); -} - -/* Exploit the equalities in "eq" to simplify the expressions of - * the integer divisions in "ls". - * The integer divisions in "ls" are assumed to appear as regular - * dimensions in "eq". - */ -__isl_give isl_local_space *isl_local_space_substitute_equalities( - __isl_take isl_local_space *ls, __isl_take isl_basic_set *eq) -{ - int i, j, k; - unsigned total; - unsigned n_div; - - ls = isl_local_space_cow(ls); - if (!ls || !eq) - goto error; - - total = isl_dim_total(eq->dim); - if (isl_local_space_dim(ls, isl_dim_all) != total) - isl_die(isl_local_space_get_ctx(ls), isl_error_invalid, - "dimensions don't match", goto error); - total++; - n_div = eq->n_div; - for (i = 0; i < eq->n_eq; ++i) { - j = isl_seq_last_non_zero(eq->eq[i], total + n_div); - if (j < 0 || j == 0 || j >= total) - continue; - - for (k = 0; k < ls->div->n_row; ++k) { - if (isl_int_is_zero(ls->div->row[k][1 + j])) - continue; - isl_seq_elim(ls->div->row[k] + 1, eq->eq[i], j, total, - &ls->div->row[k][0]); - normalize_div(ls, k); - } - } - - isl_basic_set_free(eq); - return ls; -error: - isl_basic_set_free(eq); - isl_local_space_free(ls); - return NULL; -} - -int isl_local_space_is_named_or_nested(__isl_keep isl_local_space *ls, - enum isl_dim_type type) -{ - if (!ls) - return -1; - return isl_dim_is_named_or_nested(ls->dim, type); -} - -__isl_give isl_local_space *isl_local_space_drop_dims( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned first, unsigned n) -{ - isl_ctx *ctx; - - if (!ls) - return NULL; - if (n == 0 && !isl_local_space_is_named_or_nested(ls, type)) - return ls; - - ctx = isl_local_space_get_ctx(ls); - if (first + n > isl_local_space_dim(ls, type)) - isl_die(ctx, isl_error_invalid, "range out of bounds", - return isl_local_space_free(ls)); - - ls = isl_local_space_cow(ls); - if (!ls) - return NULL; - - if (type == isl_dim_div) { - ls->div = isl_mat_drop_rows(ls->div, first, n); - } else { - ls->dim = isl_dim_drop(ls->dim, type, first, n); - if (!ls->dim) - return isl_local_space_free(ls); - } - - first += 1 + isl_local_space_offset(ls, type); - ls->div = isl_mat_drop_cols(ls->div, first, n); - if (!ls->div) - return isl_local_space_free(ls); - - return ls; -} - -__isl_give isl_local_space *isl_local_space_insert_dims( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned first, unsigned n) -{ - isl_ctx *ctx; - - if (!ls) - return NULL; - if (n == 0 && !isl_local_space_is_named_or_nested(ls, type)) - return ls; - - ctx = isl_local_space_get_ctx(ls); - if (first > isl_local_space_dim(ls, type)) - isl_die(ctx, isl_error_invalid, "position out of bounds", - return isl_local_space_free(ls)); - - ls = isl_local_space_cow(ls); - if (!ls) - return NULL; - - if (type == isl_dim_div) { - ls->div = isl_mat_insert_zero_rows(ls->div, first, n); - } else { - ls->dim = isl_dim_insert(ls->dim, type, first, n); - if (!ls->dim) - return isl_local_space_free(ls); - } - - first += 1 + isl_local_space_offset(ls, type); - ls->div = isl_mat_insert_zero_cols(ls->div, first, n); - if (!ls->div) - return isl_local_space_free(ls); - - return ls; -} diff --git a/cloog-0.16.3/isl/isl_local_space_private.h b/cloog-0.16.3/isl/isl_local_space_private.h deleted file mode 100644 index 6f3e93d..0000000 --- a/cloog-0.16.3/isl/isl_local_space_private.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef ISL_LOCAL_SPACE_PRIVATE_H -#define ISL_LOCAL_SPACE_PRIVATE_H - -#include -#include -#include -#include - -struct isl_local_space { - int ref; - - isl_dim *dim; - isl_mat *div; -}; - -__isl_give isl_local_space *isl_local_space_alloc(__isl_take isl_dim *dim, - unsigned n_div); - -__isl_give isl_local_space *isl_local_space_add_div( - __isl_take isl_local_space *ls, __isl_take isl_vec *div); - -__isl_give isl_mat *isl_merge_divs(__isl_keep isl_mat *div1, - __isl_keep isl_mat *div2, int *exp1, int *exp2); - -unsigned isl_local_space_offset(__isl_keep isl_local_space *ls, - enum isl_dim_type type); - -__isl_give isl_local_space *isl_local_space_replace_divs( - __isl_take isl_local_space *ls, __isl_take isl_mat *div); -int isl_local_space_divs_known(__isl_keep isl_local_space *ls); - -__isl_give isl_local_space *isl_local_space_substitute_equalities( - __isl_take isl_local_space *ls, __isl_take isl_basic_set *eq); - -int isl_local_space_is_named_or_nested(__isl_keep isl_local_space *ls, - enum isl_dim_type type); - -__isl_give isl_local_space *isl_local_space_reset_dim( - __isl_take isl_local_space *ls, __isl_take isl_dim *dim); -__isl_give isl_local_space *isl_local_space_realign( - __isl_take isl_local_space *ls, __isl_take isl_reordering *r); - -#endif diff --git a/cloog-0.16.3/isl/isl_lp.c b/cloog-0.16.3/isl/isl_lp.c deleted file mode 100644 index 1673b5b..0000000 --- a/cloog-0.16.3/isl/isl_lp.c +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include "isl_lp_piplib.h" -#include -#include "isl_tab.h" - -enum isl_lp_result isl_tab_solve_lp(struct isl_basic_map *bmap, int maximize, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol) -{ - struct isl_tab *tab; - enum isl_lp_result res; - unsigned dim = isl_basic_map_total_dim(bmap); - - if (maximize) - isl_seq_neg(f, f, 1 + dim); - - bmap = isl_basic_map_gauss(bmap, NULL); - tab = isl_tab_from_basic_map(bmap); - res = isl_tab_min(tab, f, denom, opt, opt_denom, 0); - if (res == isl_lp_ok && sol) { - *sol = isl_tab_get_sample_value(tab); - if (!*sol) - res = isl_lp_error; - } - isl_tab_free(tab); - - if (maximize) - isl_seq_neg(f, f, 1 + dim); - if (maximize && opt) - isl_int_neg(*opt, *opt); - - return res; -} - -/* Given a basic map "bmap" and an affine combination of the variables "f" - * with denominator "denom", set *opt / *opt_denom to the minimal - * (or maximal if "maximize" is true) value attained by f/d over "bmap", - * assuming the basic map is not empty and the expression cannot attain - * arbitrarily small (or large) values. - * If opt_denom is NULL, then *opt is rounded up (or down) - * to the nearest integer. - * The return value reflects the nature of the result (empty, unbounded, - * minmimal or maximal value returned in *opt). - */ -enum isl_lp_result isl_basic_map_solve_lp(struct isl_basic_map *bmap, int max, - isl_int *f, isl_int d, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol) -{ - if (sol) - *sol = NULL; - - if (!bmap) - return isl_lp_error; - - switch (bmap->ctx->opt->lp_solver) { - case ISL_LP_PIP: - return isl_pip_solve_lp(bmap, max, f, d, opt, opt_denom, sol); - case ISL_LP_TAB: - return isl_tab_solve_lp(bmap, max, f, d, opt, opt_denom, sol); - default: - return isl_lp_error; - } -} - -enum isl_lp_result isl_basic_set_solve_lp(struct isl_basic_set *bset, int max, - isl_int *f, isl_int d, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol) -{ - return isl_basic_map_solve_lp((struct isl_basic_map *)bset, max, - f, d, opt, opt_denom, sol); -} - -enum isl_lp_result isl_map_solve_lp(__isl_keep isl_map *map, int max, - isl_int *f, isl_int d, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol) -{ - int i; - isl_int o; - isl_int t; - isl_int opt_i; - isl_int opt_denom_i; - enum isl_lp_result res; - int max_div; - isl_vec *v = NULL; - - if (!map) - return isl_lp_error; - if (map->n == 0) - return isl_lp_empty; - - max_div = 0; - for (i = 0; i < map->n; ++i) - if (map->p[i]->n_div > max_div) - max_div = map->p[i]->n_div; - if (max_div > 0) { - unsigned total = isl_dim_total(map->dim); - v = isl_vec_alloc(map->ctx, 1 + total + max_div); - if (!v) - return isl_lp_error; - isl_seq_cpy(v->el, f, 1 + total); - isl_seq_clr(v->el + 1 + total, max_div); - f = v->el; - } - - if (!opt && map->n > 1 && sol) { - isl_int_init(o); - opt = &o; - } - if (map->n > 0) - isl_int_init(opt_i); - if (map->n > 0 && opt_denom) { - isl_int_init(opt_denom_i); - isl_int_init(t); - } - - res = isl_basic_map_solve_lp(map->p[0], max, f, d, - opt, opt_denom, sol); - if (res == isl_lp_error || res == isl_lp_unbounded) - goto done; - - if (sol) - *sol = NULL; - - for (i = 1; i < map->n; ++i) { - isl_vec *sol_i = NULL; - enum isl_lp_result res_i; - int better; - - res_i = isl_basic_map_solve_lp(map->p[i], max, f, d, - &opt_i, - opt_denom ? &opt_denom_i : NULL, - sol ? &sol_i : NULL); - if (res_i == isl_lp_error || res_i == isl_lp_unbounded) { - res = res_i; - goto done; - } - if (res_i == isl_lp_empty) - continue; - if (res == isl_lp_empty) { - better = 1; - } else if (!opt_denom) { - if (max) - better = isl_int_gt(opt_i, *opt); - else - better = isl_int_lt(opt_i, *opt); - } else { - isl_int_mul(t, opt_i, *opt_denom); - isl_int_submul(t, *opt, opt_denom_i); - if (max) - better = isl_int_is_pos(t); - else - better = isl_int_is_neg(t); - } - if (better) { - res = res_i; - if (opt) - isl_int_set(*opt, opt_i); - if (opt_denom) - isl_int_set(*opt_denom, opt_denom_i); - if (sol) { - isl_vec_free(*sol); - *sol = sol_i; - } - } else - isl_vec_free(sol_i); - } - -done: - isl_vec_free(v); - if (map->n > 0 && opt_denom) { - isl_int_clear(opt_denom_i); - isl_int_clear(t); - } - if (map->n > 0) - isl_int_clear(opt_i); - if (opt == &o) - isl_int_clear(o); - return res; -} - -enum isl_lp_result isl_set_solve_lp(__isl_keep isl_set *set, int max, - isl_int *f, isl_int d, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol) -{ - return isl_map_solve_lp((struct isl_map *)set, max, - f, d, opt, opt_denom, sol); -} diff --git a/cloog-0.16.3/isl/isl_lp_no_piplib.c b/cloog-0.16.3/isl/isl_lp_no_piplib.c deleted file mode 100644 index 54c0135..0000000 --- a/cloog-0.16.3/isl/isl_lp_no_piplib.c +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include "isl_lp_piplib.h" - -enum isl_lp_result isl_pip_solve_lp(struct isl_basic_map *bmap, int maximize, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol) -{ - return isl_lp_error; -} diff --git a/cloog-0.16.3/isl/isl_lp_piplib.c b/cloog-0.16.3/isl/isl_lp_piplib.c deleted file mode 100644 index d4b92af..0000000 --- a/cloog-0.16.3/isl/isl_lp_piplib.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include "isl_piplib.h" -#include "isl_map_piplib.h" - -static void copy_solution(struct isl_vec *vec, int maximize, isl_int *opt, - isl_int *opt_denom, PipQuast *sol) -{ - int i; - PipList *list; - isl_int tmp; - - if (opt) { - if (opt_denom) { - isl_seq_cpy_from_pip(opt, - &sol->list->vector->the_vector[0], 1); - isl_seq_cpy_from_pip(opt_denom, - &sol->list->vector->the_deno[0], 1); - } else if (maximize) - mpz_fdiv_q(*opt, sol->list->vector->the_vector[0], - sol->list->vector->the_deno[0]); - else - mpz_cdiv_q(*opt, sol->list->vector->the_vector[0], - sol->list->vector->the_deno[0]); - } - - if (!vec) - return; - - isl_int_init(tmp); - isl_int_set_si(vec->el[0], 1); - for (i = 0, list = sol->list->next; list; ++i, list = list->next) { - isl_seq_cpy_from_pip(&vec->el[1 + i], - &list->vector->the_deno[0], 1); - isl_int_lcm(vec->el[0], vec->el[0], vec->el[1 + i]); - } - for (i = 0, list = sol->list->next; list; ++i, list = list->next) { - isl_seq_cpy_from_pip(&tmp, &list->vector->the_deno[0], 1); - isl_int_divexact(tmp, vec->el[0], tmp); - isl_seq_cpy_from_pip(&vec->el[1 + i], - &list->vector->the_vector[0], 1); - isl_int_mul(vec->el[1 + i], vec->el[1 + i], tmp); - } - isl_int_clear(tmp); -} - -enum isl_lp_result isl_pip_solve_lp(struct isl_basic_map *bmap, int maximize, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **vec) -{ - enum isl_lp_result res = isl_lp_ok; - PipMatrix *domain = NULL; - PipOptions *options; - PipQuast *sol; - unsigned total; - - total = isl_basic_map_total_dim(bmap); - domain = isl_basic_map_to_pip(bmap, 0, 1, 0); - if (!domain) - goto error; - entier_set_si(domain->p[0][1], -1); - isl_int_set(domain->p[0][domain->NbColumns - 1], f[0]); - isl_seq_cpy_to_pip(domain->p[0]+2, f+1, total); - - options = pip_options_init(); - if (!options) - goto error; - options->Urs_unknowns = -1; - options->Maximize = maximize; - options->Nq = 0; - sol = pip_solve(domain, NULL, -1, options); - pip_options_free(options); - if (!sol) - goto error; - - if (vec) { - isl_ctx *ctx = isl_basic_map_get_ctx(bmap); - *vec = isl_vec_alloc(ctx, 1 + total); - } - if (vec && !*vec) - res = isl_lp_error; - else if (!sol->list) - res = isl_lp_empty; - else if (entier_zero_p(sol->list->vector->the_deno[0])) - res = isl_lp_unbounded; - else - copy_solution(*vec, maximize, opt, opt_denom, sol); - pip_matrix_free(domain); - pip_quast_free(sol); - return res; -error: - if (domain) - pip_matrix_free(domain); - return isl_lp_error; -} diff --git a/cloog-0.16.3/isl/isl_lp_piplib.h b/cloog-0.16.3/isl/isl_lp_piplib.h deleted file mode 100644 index e69a3b4..0000000 --- a/cloog-0.16.3/isl/isl_lp_piplib.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_LP_PIPLIB_H -#define ISL_LP_PIPLIB_H - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -enum isl_lp_result isl_pip_solve_lp(struct isl_basic_map *bmap, int maximize, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/isl_map.c b/cloog-0.16.3/isl/isl_map.c deleted file mode 100644 index 3d30064..0000000 --- a/cloog-0.16.3/isl/isl_map.c +++ /dev/null @@ -1,8951 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include -#include "isl_dim_private.h" -#include "isl_equalities.h" -#include -#include -#include -#include -#include -#include "isl_map_piplib.h" -#include -#include "isl_sample.h" -#include "isl_tab.h" -#include -#include -#include -#include -#include - -static unsigned n(struct isl_dim *dim, enum isl_dim_type type) -{ - switch (type) { - case isl_dim_param: return dim->nparam; - case isl_dim_in: return dim->n_in; - case isl_dim_out: return dim->n_out; - case isl_dim_all: return dim->nparam + dim->n_in + dim->n_out; - default: return 0; - } -} - -static unsigned pos(struct isl_dim *dim, enum isl_dim_type type) -{ - switch (type) { - case isl_dim_param: return 1; - case isl_dim_in: return 1 + dim->nparam; - case isl_dim_out: return 1 + dim->nparam + dim->n_in; - default: return 0; - } -} - -unsigned isl_basic_map_dim(const struct isl_basic_map *bmap, - enum isl_dim_type type) -{ - if (!bmap) - return 0; - switch (type) { - case isl_dim_cst: return 1; - case isl_dim_param: - case isl_dim_in: - case isl_dim_out: return isl_dim_size(bmap->dim, type); - case isl_dim_div: return bmap->n_div; - case isl_dim_all: return isl_basic_map_total_dim(bmap); - default: return 0; - } -} - -unsigned isl_map_dim(const struct isl_map *map, enum isl_dim_type type) -{ - return map ? n(map->dim, type) : 0; -} - -unsigned isl_set_dim(const struct isl_set *set, enum isl_dim_type type) -{ - return set ? n(set->dim, type) : 0; -} - -unsigned isl_basic_map_offset(struct isl_basic_map *bmap, - enum isl_dim_type type) -{ - struct isl_dim *dim = bmap->dim; - switch (type) { - case isl_dim_cst: return 0; - case isl_dim_param: return 1; - case isl_dim_in: return 1 + dim->nparam; - case isl_dim_out: return 1 + dim->nparam + dim->n_in; - case isl_dim_div: return 1 + dim->nparam + dim->n_in + dim->n_out; - default: return 0; - } -} - -unsigned isl_basic_set_offset(struct isl_basic_set *bset, - enum isl_dim_type type) -{ - return isl_basic_map_offset(bset, type); -} - -static unsigned map_offset(struct isl_map *map, enum isl_dim_type type) -{ - return pos(map->dim, type); -} - -unsigned isl_basic_set_dim(const struct isl_basic_set *bset, - enum isl_dim_type type) -{ - return isl_basic_map_dim((const struct isl_basic_map*)bset, type); -} - -unsigned isl_basic_set_n_dim(const struct isl_basic_set *bset) -{ - return isl_basic_set_dim(bset, isl_dim_set); -} - -unsigned isl_basic_set_n_param(const struct isl_basic_set *bset) -{ - return isl_basic_set_dim(bset, isl_dim_param); -} - -unsigned isl_basic_set_total_dim(const struct isl_basic_set *bset) -{ - return isl_dim_total(bset->dim) + bset->n_div; -} - -unsigned isl_set_n_dim(const struct isl_set *set) -{ - return isl_set_dim(set, isl_dim_set); -} - -unsigned isl_set_n_param(const struct isl_set *set) -{ - return isl_set_dim(set, isl_dim_param); -} - -unsigned isl_basic_map_n_in(const struct isl_basic_map *bmap) -{ - return bmap ? bmap->dim->n_in : 0; -} - -unsigned isl_basic_map_n_out(const struct isl_basic_map *bmap) -{ - return bmap ? bmap->dim->n_out : 0; -} - -unsigned isl_basic_map_n_param(const struct isl_basic_map *bmap) -{ - return bmap ? bmap->dim->nparam : 0; -} - -unsigned isl_basic_map_n_div(const struct isl_basic_map *bmap) -{ - return bmap ? bmap->n_div : 0; -} - -unsigned isl_basic_map_total_dim(const struct isl_basic_map *bmap) -{ - return bmap ? isl_dim_total(bmap->dim) + bmap->n_div : 0; -} - -unsigned isl_map_n_in(const struct isl_map *map) -{ - return map->dim->n_in; -} - -unsigned isl_map_n_out(const struct isl_map *map) -{ - return map->dim->n_out; -} - -unsigned isl_map_n_param(const struct isl_map *map) -{ - return map->dim->nparam; -} - -int isl_map_compatible_domain(struct isl_map *map, struct isl_set *set) -{ - int m; - if (!map || !set) - return -1; - m = isl_dim_match(map->dim, isl_dim_param, set->dim, isl_dim_param); - if (m < 0 || !m) - return m; - return isl_dim_tuple_match(map->dim, isl_dim_in, set->dim, isl_dim_set); -} - -int isl_basic_map_compatible_domain(struct isl_basic_map *bmap, - struct isl_basic_set *bset) -{ - int m; - if (!bmap || !bset) - return -1; - m = isl_dim_match(bmap->dim, isl_dim_param, bset->dim, isl_dim_param); - if (m < 0 || !m) - return m; - return isl_dim_tuple_match(bmap->dim, isl_dim_in, bset->dim, isl_dim_set); -} - -int isl_map_compatible_range(__isl_keep isl_map *map, __isl_keep isl_set *set) -{ - int m; - if (!map || !set) - return -1; - m = isl_dim_match(map->dim, isl_dim_param, set->dim, isl_dim_param); - if (m < 0 || !m) - return m; - return isl_dim_tuple_match(map->dim, isl_dim_out, set->dim, isl_dim_set); -} - -int isl_basic_map_compatible_range(struct isl_basic_map *bmap, - struct isl_basic_set *bset) -{ - int m; - if (!bmap || !bset) - return -1; - m = isl_dim_match(bmap->dim, isl_dim_param, bset->dim, isl_dim_param); - if (m < 0 || !m) - return m; - return isl_dim_tuple_match(bmap->dim, isl_dim_out, bset->dim, isl_dim_set); -} - -isl_ctx *isl_basic_map_get_ctx(__isl_keep isl_basic_map *bmap) -{ - return bmap ? bmap->ctx : NULL; -} - -isl_ctx *isl_basic_set_get_ctx(__isl_keep isl_basic_set *bset) -{ - return bset ? bset->ctx : NULL; -} - -isl_ctx *isl_map_get_ctx(__isl_keep isl_map *map) -{ - return map ? map->ctx : NULL; -} - -isl_ctx *isl_set_get_ctx(__isl_keep isl_set *set) -{ - return set ? set->ctx : NULL; -} - -struct isl_dim *isl_basic_map_get_dim(struct isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - return isl_dim_copy(bmap->dim); -} - -struct isl_dim *isl_basic_set_get_dim(struct isl_basic_set *bset) -{ - if (!bset) - return NULL; - return isl_dim_copy(bset->dim); -} - -__isl_give isl_local_space *isl_basic_map_get_local_space( - __isl_keep isl_basic_map *bmap) -{ - int i; - isl_local_space *ls; - unsigned total; - - if (!bmap) - return NULL; - - total = isl_basic_map_total_dim(bmap); - ls = isl_local_space_alloc(isl_dim_copy(bmap->dim), bmap->n_div); - if (!ls) - return NULL; - - for (i = 0; i < bmap->n_div; ++i) - isl_seq_cpy(ls->div->row[i], bmap->div[i], 2 + total); - - return ls; -} - -__isl_give isl_local_space *isl_basic_set_get_local_space( - __isl_keep isl_basic_set *bset) -{ - return isl_basic_map_get_local_space(bset); -} - -__isl_give isl_basic_map *isl_basic_map_from_local_space( - __isl_take isl_local_space *ls) -{ - int i; - int n_div; - isl_basic_map *bmap; - - if (!ls) - return NULL; - - n_div = isl_local_space_dim(ls, isl_dim_div); - bmap = isl_basic_map_alloc_dim(isl_local_space_get_dim(ls), - n_div, 0, 2 * n_div); - - for (i = 0; i < n_div; ++i) - if (isl_basic_map_alloc_div(bmap) < 0) - goto error; - - for (i = 0; i < n_div; ++i) { - isl_seq_cpy(bmap->div[i], ls->div->row[i], ls->div->n_col); - if (isl_basic_map_add_div_constraints(bmap, i) < 0) - goto error; - } - - isl_local_space_free(ls); - return bmap; -error: - isl_local_space_free(ls); - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_from_local_space( - __isl_take isl_local_space *ls) -{ - return isl_basic_map_from_local_space(ls); -} - -struct isl_dim *isl_map_get_dim(struct isl_map *map) -{ - if (!map) - return NULL; - return isl_dim_copy(map->dim); -} - -struct isl_dim *isl_set_get_dim(struct isl_set *set) -{ - if (!set) - return NULL; - return isl_dim_copy(set->dim); -} - -__isl_give isl_basic_map *isl_basic_map_set_tuple_name( - __isl_take isl_basic_map *bmap, enum isl_dim_type type, const char *s) -{ - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - bmap->dim = isl_dim_set_tuple_name(bmap->dim, type, s); - if (!bmap->dim) - goto error; - bmap = isl_basic_map_finalize(bmap); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_set_tuple_name( - __isl_take isl_basic_set *bset, const char *s) -{ - return isl_basic_map_set_tuple_name(bset, isl_dim_set, s); -} - -const char *isl_basic_map_get_tuple_name(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type) -{ - return bmap ? isl_dim_get_tuple_name(bmap->dim, type) : NULL; -} - -__isl_give isl_map *isl_map_set_tuple_name(__isl_take isl_map *map, - enum isl_dim_type type, const char *s) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - map->dim = isl_dim_set_tuple_name(map->dim, type, s); - if (!map->dim) - goto error; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_set_tuple_name(map->p[i], type, s); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -const char *isl_map_get_tuple_name(__isl_keep isl_map *map, - enum isl_dim_type type) -{ - return map ? isl_dim_get_tuple_name(map->dim, type) : NULL; -} - -__isl_give isl_set *isl_set_set_tuple_name(__isl_take isl_set *set, - const char *s) -{ - return (isl_set *)isl_map_set_tuple_name((isl_map *)set, isl_dim_set, s); -} - -const char *isl_basic_set_get_tuple_name(__isl_keep isl_basic_set *bset) -{ - return bset ? isl_dim_get_tuple_name(bset->dim, isl_dim_set) : NULL; -} - -const char *isl_set_get_tuple_name(__isl_keep isl_set *set) -{ - return set ? isl_dim_get_tuple_name(set->dim, isl_dim_set) : NULL; -} - -const char *isl_basic_map_get_dim_name(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos) -{ - return bmap ? isl_dim_get_name(bmap->dim, type, pos) : NULL; -} - -const char *isl_basic_set_get_dim_name(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned pos) -{ - return bset ? isl_dim_get_name(bset->dim, type, pos) : NULL; -} - -const char *isl_map_get_dim_name(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos) -{ - return map ? isl_dim_get_name(map->dim, type, pos) : NULL; -} - -const char *isl_set_get_dim_name(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos) -{ - return set ? isl_dim_get_name(set->dim, type, pos) : NULL; -} - -__isl_give isl_basic_map *isl_basic_map_set_dim_name( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, const char *s) -{ - if (!bmap) - return NULL; - bmap->dim = isl_dim_set_name(bmap->dim, type, pos, s); - if (!bmap->dim) - goto error; - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_map *isl_map_set_dim_name(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, const char *s) -{ - int i; - - if (!map) - return NULL; - - map->dim = isl_dim_set_name(map->dim, type, pos, s); - if (!map->dim) - goto error; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_set_dim_name(map->p[i], type, pos, s); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_set_dim_name( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, const char *s) -{ - return (isl_basic_set *)isl_basic_map_set_dim_name( - (isl_basic_map *)bset, type, pos, s); -} - -__isl_give isl_set *isl_set_set_dim_name(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, const char *s) -{ - return (isl_set *)isl_map_set_dim_name((isl_map *)set, type, pos, s); -} - -int isl_basic_map_is_rational(__isl_keep isl_basic_map *bmap) -{ - if (!bmap) - return -1; - return ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL); -} - -int isl_basic_set_is_rational(__isl_keep isl_basic_set *bset) -{ - return isl_basic_map_is_rational(bset); -} - -static struct isl_basic_map *basic_map_init(struct isl_ctx *ctx, - struct isl_basic_map *bmap, unsigned extra, - unsigned n_eq, unsigned n_ineq) -{ - int i; - size_t row_size = 1 + isl_dim_total(bmap->dim) + extra; - - bmap->ctx = ctx; - isl_ctx_ref(ctx); - - bmap->block = isl_blk_alloc(ctx, (n_ineq + n_eq) * row_size); - if (isl_blk_is_error(bmap->block)) - goto error; - - bmap->ineq = isl_alloc_array(ctx, isl_int *, n_ineq + n_eq); - if (!bmap->ineq) - goto error; - - if (extra == 0) { - bmap->block2 = isl_blk_empty(); - bmap->div = NULL; - } else { - bmap->block2 = isl_blk_alloc(ctx, extra * (1 + row_size)); - if (isl_blk_is_error(bmap->block2)) - goto error; - - bmap->div = isl_alloc_array(ctx, isl_int *, extra); - if (!bmap->div) - goto error; - } - - for (i = 0; i < n_ineq + n_eq; ++i) - bmap->ineq[i] = bmap->block.data + i * row_size; - - for (i = 0; i < extra; ++i) - bmap->div[i] = bmap->block2.data + i * (1 + row_size); - - bmap->ref = 1; - bmap->flags = 0; - bmap->c_size = n_eq + n_ineq; - bmap->eq = bmap->ineq + n_ineq; - bmap->extra = extra; - bmap->n_eq = 0; - bmap->n_ineq = 0; - bmap->n_div = 0; - bmap->sample = NULL; - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned dim, unsigned extra, - unsigned n_eq, unsigned n_ineq) -{ - struct isl_basic_map *bmap; - bmap = isl_basic_map_alloc(ctx, nparam, 0, dim, extra, n_eq, n_ineq); - return (struct isl_basic_set *)bmap; -} - -struct isl_basic_set *isl_basic_set_alloc_dim(struct isl_dim *dim, - unsigned extra, unsigned n_eq, unsigned n_ineq) -{ - struct isl_basic_map *bmap; - if (!dim) - return NULL; - isl_assert(dim->ctx, dim->n_in == 0, goto error); - bmap = isl_basic_map_alloc_dim(dim, extra, n_eq, n_ineq); - return (struct isl_basic_set *)bmap; -error: - isl_dim_free(dim); - return NULL; -} - -struct isl_basic_map *isl_basic_map_alloc_dim(struct isl_dim *dim, - unsigned extra, unsigned n_eq, unsigned n_ineq) -{ - struct isl_basic_map *bmap; - - if (!dim) - return NULL; - bmap = isl_calloc_type(dim->ctx, struct isl_basic_map); - if (!bmap) - goto error; - bmap->dim = dim; - - return basic_map_init(dim->ctx, bmap, extra, n_eq, n_ineq); -error: - isl_dim_free(dim); - return NULL; -} - -struct isl_basic_map *isl_basic_map_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned in, unsigned out, unsigned extra, - unsigned n_eq, unsigned n_ineq) -{ - struct isl_basic_map *bmap; - struct isl_dim *dim; - - dim = isl_dim_alloc(ctx, nparam, in, out); - if (!dim) - return NULL; - - bmap = isl_basic_map_alloc_dim(dim, extra, n_eq, n_ineq); - return bmap; -} - -static void dup_constraints( - struct isl_basic_map *dst, struct isl_basic_map *src) -{ - int i; - unsigned total = isl_basic_map_total_dim(src); - - for (i = 0; i < src->n_eq; ++i) { - int j = isl_basic_map_alloc_equality(dst); - isl_seq_cpy(dst->eq[j], src->eq[i], 1+total); - } - - for (i = 0; i < src->n_ineq; ++i) { - int j = isl_basic_map_alloc_inequality(dst); - isl_seq_cpy(dst->ineq[j], src->ineq[i], 1+total); - } - - for (i = 0; i < src->n_div; ++i) { - int j = isl_basic_map_alloc_div(dst); - isl_seq_cpy(dst->div[j], src->div[i], 1+1+total); - } - ISL_F_SET(dst, ISL_BASIC_SET_FINAL); -} - -struct isl_basic_map *isl_basic_map_dup(struct isl_basic_map *bmap) -{ - struct isl_basic_map *dup; - - if (!bmap) - return NULL; - dup = isl_basic_map_alloc_dim(isl_dim_copy(bmap->dim), - bmap->n_div, bmap->n_eq, bmap->n_ineq); - if (!dup) - return NULL; - dup_constraints(dup, bmap); - dup->flags = bmap->flags; - dup->sample = isl_vec_copy(bmap->sample); - return dup; -} - -struct isl_basic_set *isl_basic_set_dup(struct isl_basic_set *bset) -{ - struct isl_basic_map *dup; - - dup = isl_basic_map_dup((struct isl_basic_map *)bset); - return (struct isl_basic_set *)dup; -} - -struct isl_basic_set *isl_basic_set_copy(struct isl_basic_set *bset) -{ - if (!bset) - return NULL; - - if (ISL_F_ISSET(bset, ISL_BASIC_SET_FINAL)) { - bset->ref++; - return bset; - } - return isl_basic_set_dup(bset); -} - -struct isl_set *isl_set_copy(struct isl_set *set) -{ - if (!set) - return NULL; - - set->ref++; - return set; -} - -struct isl_basic_map *isl_basic_map_copy(struct isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - - if (ISL_F_ISSET(bmap, ISL_BASIC_SET_FINAL)) { - bmap->ref++; - return bmap; - } - bmap = isl_basic_map_dup(bmap); - if (bmap) - ISL_F_SET(bmap, ISL_BASIC_SET_FINAL); - return bmap; -} - -struct isl_map *isl_map_copy(struct isl_map *map) -{ - if (!map) - return NULL; - - map->ref++; - return map; -} - -void isl_basic_map_free(struct isl_basic_map *bmap) -{ - if (!bmap) - return; - - if (--bmap->ref > 0) - return; - - isl_ctx_deref(bmap->ctx); - free(bmap->div); - isl_blk_free(bmap->ctx, bmap->block2); - free(bmap->ineq); - isl_blk_free(bmap->ctx, bmap->block); - isl_vec_free(bmap->sample); - isl_dim_free(bmap->dim); - free(bmap); -} - -void isl_basic_set_free(struct isl_basic_set *bset) -{ - isl_basic_map_free((struct isl_basic_map *)bset); -} - -static int room_for_con(struct isl_basic_map *bmap, unsigned n) -{ - return bmap->n_eq + bmap->n_ineq + n <= bmap->c_size; -} - -int isl_basic_map_alloc_equality(struct isl_basic_map *bmap) -{ - struct isl_ctx *ctx; - if (!bmap) - return -1; - ctx = bmap->ctx; - isl_assert(ctx, room_for_con(bmap, 1), return -1); - isl_assert(ctx, (bmap->eq - bmap->ineq) + bmap->n_eq <= bmap->c_size, - return -1); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NO_REDUNDANT); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NO_IMPLICIT); - ISL_F_CLR(bmap, ISL_BASIC_MAP_ALL_EQUALITIES); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED_DIVS); - if ((bmap->eq - bmap->ineq) + bmap->n_eq == bmap->c_size) { - isl_int *t; - int j = isl_basic_map_alloc_inequality(bmap); - if (j < 0) - return -1; - t = bmap->ineq[j]; - bmap->ineq[j] = bmap->ineq[bmap->n_ineq - 1]; - bmap->ineq[bmap->n_ineq - 1] = bmap->eq[-1]; - bmap->eq[-1] = t; - bmap->n_eq++; - bmap->n_ineq--; - bmap->eq--; - return 0; - } - isl_seq_clr(bmap->eq[bmap->n_eq] + 1 + isl_basic_map_total_dim(bmap), - bmap->extra - bmap->n_div); - return bmap->n_eq++; -} - -int isl_basic_set_alloc_equality(struct isl_basic_set *bset) -{ - return isl_basic_map_alloc_equality((struct isl_basic_map *)bset); -} - -int isl_basic_map_free_equality(struct isl_basic_map *bmap, unsigned n) -{ - if (!bmap) - return -1; - isl_assert(bmap->ctx, n <= bmap->n_eq, return -1); - bmap->n_eq -= n; - return 0; -} - -int isl_basic_set_free_equality(struct isl_basic_set *bset, unsigned n) -{ - return isl_basic_map_free_equality((struct isl_basic_map *)bset, n); -} - -int isl_basic_map_drop_equality(struct isl_basic_map *bmap, unsigned pos) -{ - isl_int *t; - if (!bmap) - return -1; - isl_assert(bmap->ctx, pos < bmap->n_eq, return -1); - - if (pos != bmap->n_eq - 1) { - t = bmap->eq[pos]; - bmap->eq[pos] = bmap->eq[bmap->n_eq - 1]; - bmap->eq[bmap->n_eq - 1] = t; - } - bmap->n_eq--; - return 0; -} - -int isl_basic_set_drop_equality(struct isl_basic_set *bset, unsigned pos) -{ - return isl_basic_map_drop_equality((struct isl_basic_map *)bset, pos); -} - -void isl_basic_map_inequality_to_equality( - struct isl_basic_map *bmap, unsigned pos) -{ - isl_int *t; - - t = bmap->ineq[pos]; - bmap->ineq[pos] = bmap->ineq[bmap->n_ineq - 1]; - bmap->ineq[bmap->n_ineq - 1] = bmap->eq[-1]; - bmap->eq[-1] = t; - bmap->n_eq++; - bmap->n_ineq--; - bmap->eq--; - ISL_F_CLR(bmap, ISL_BASIC_MAP_NO_REDUNDANT); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED_DIVS); - ISL_F_CLR(bmap, ISL_BASIC_MAP_ALL_EQUALITIES); -} - -static int room_for_ineq(struct isl_basic_map *bmap, unsigned n) -{ - return bmap->n_ineq + n <= bmap->eq - bmap->ineq; -} - -int isl_basic_map_alloc_inequality(struct isl_basic_map *bmap) -{ - struct isl_ctx *ctx; - if (!bmap) - return -1; - ctx = bmap->ctx; - isl_assert(ctx, room_for_ineq(bmap, 1), return -1); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NO_IMPLICIT); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NO_REDUNDANT); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - ISL_F_CLR(bmap, ISL_BASIC_MAP_ALL_EQUALITIES); - isl_seq_clr(bmap->ineq[bmap->n_ineq] + - 1 + isl_basic_map_total_dim(bmap), - bmap->extra - bmap->n_div); - return bmap->n_ineq++; -} - -int isl_basic_set_alloc_inequality(struct isl_basic_set *bset) -{ - return isl_basic_map_alloc_inequality((struct isl_basic_map *)bset); -} - -int isl_basic_map_free_inequality(struct isl_basic_map *bmap, unsigned n) -{ - if (!bmap) - return -1; - isl_assert(bmap->ctx, n <= bmap->n_ineq, return -1); - bmap->n_ineq -= n; - return 0; -} - -int isl_basic_set_free_inequality(struct isl_basic_set *bset, unsigned n) -{ - return isl_basic_map_free_inequality((struct isl_basic_map *)bset, n); -} - -int isl_basic_map_drop_inequality(struct isl_basic_map *bmap, unsigned pos) -{ - isl_int *t; - if (!bmap) - return -1; - isl_assert(bmap->ctx, pos < bmap->n_ineq, return -1); - - if (pos != bmap->n_ineq - 1) { - t = bmap->ineq[pos]; - bmap->ineq[pos] = bmap->ineq[bmap->n_ineq - 1]; - bmap->ineq[bmap->n_ineq - 1] = t; - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - } - bmap->n_ineq--; - return 0; -} - -int isl_basic_set_drop_inequality(struct isl_basic_set *bset, unsigned pos) -{ - return isl_basic_map_drop_inequality((struct isl_basic_map *)bset, pos); -} - -__isl_give isl_basic_map *isl_basic_map_add_eq(__isl_take isl_basic_map *bmap, - isl_int *eq) -{ - int k; - - bmap = isl_basic_map_extend_constraints(bmap, 1, 0); - if (!bmap) - return NULL; - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->eq[k], eq, 1 + isl_basic_map_total_dim(bmap)); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_add_eq(__isl_take isl_basic_set *bset, - isl_int *eq) -{ - return (isl_basic_set *) - isl_basic_map_add_eq((isl_basic_map *)bset, eq); -} - -__isl_give isl_basic_map *isl_basic_map_add_ineq(__isl_take isl_basic_map *bmap, - isl_int *ineq) -{ - int k; - - bmap = isl_basic_map_extend_constraints(bmap, 0, 1); - if (!bmap) - return NULL; - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->ineq[k], ineq, 1 + isl_basic_map_total_dim(bmap)); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_add_ineq(__isl_take isl_basic_set *bset, - isl_int *ineq) -{ - return (isl_basic_set *) - isl_basic_map_add_ineq((isl_basic_map *)bset, ineq); -} - -int isl_basic_map_alloc_div(struct isl_basic_map *bmap) -{ - if (!bmap) - return -1; - isl_assert(bmap->ctx, bmap->n_div < bmap->extra, return -1); - isl_seq_clr(bmap->div[bmap->n_div] + - 1 + 1 + isl_basic_map_total_dim(bmap), - bmap->extra - bmap->n_div); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED_DIVS); - return bmap->n_div++; -} - -int isl_basic_set_alloc_div(struct isl_basic_set *bset) -{ - return isl_basic_map_alloc_div((struct isl_basic_map *)bset); -} - -int isl_basic_map_free_div(struct isl_basic_map *bmap, unsigned n) -{ - if (!bmap) - return -1; - isl_assert(bmap->ctx, n <= bmap->n_div, return -1); - bmap->n_div -= n; - return 0; -} - -int isl_basic_set_free_div(struct isl_basic_set *bset, unsigned n) -{ - return isl_basic_map_free_div((struct isl_basic_map *)bset, n); -} - -/* Copy constraint from src to dst, putting the vars of src at offset - * dim_off in dst and the divs of src at offset div_off in dst. - * If both sets are actually map, then dim_off applies to the input - * variables. - */ -static void copy_constraint(struct isl_basic_map *dst_map, isl_int *dst, - struct isl_basic_map *src_map, isl_int *src, - unsigned in_off, unsigned out_off, unsigned div_off) -{ - unsigned src_nparam = isl_basic_map_n_param(src_map); - unsigned dst_nparam = isl_basic_map_n_param(dst_map); - unsigned src_in = isl_basic_map_n_in(src_map); - unsigned dst_in = isl_basic_map_n_in(dst_map); - unsigned src_out = isl_basic_map_n_out(src_map); - unsigned dst_out = isl_basic_map_n_out(dst_map); - isl_int_set(dst[0], src[0]); - isl_seq_cpy(dst+1, src+1, isl_min(dst_nparam, src_nparam)); - if (dst_nparam > src_nparam) - isl_seq_clr(dst+1+src_nparam, - dst_nparam - src_nparam); - isl_seq_clr(dst+1+dst_nparam, in_off); - isl_seq_cpy(dst+1+dst_nparam+in_off, - src+1+src_nparam, - isl_min(dst_in-in_off, src_in)); - if (dst_in-in_off > src_in) - isl_seq_clr(dst+1+dst_nparam+in_off+src_in, - dst_in - in_off - src_in); - isl_seq_clr(dst+1+dst_nparam+dst_in, out_off); - isl_seq_cpy(dst+1+dst_nparam+dst_in+out_off, - src+1+src_nparam+src_in, - isl_min(dst_out-out_off, src_out)); - if (dst_out-out_off > src_out) - isl_seq_clr(dst+1+dst_nparam+dst_in+out_off+src_out, - dst_out - out_off - src_out); - isl_seq_clr(dst+1+dst_nparam+dst_in+dst_out, div_off); - isl_seq_cpy(dst+1+dst_nparam+dst_in+dst_out+div_off, - src+1+src_nparam+src_in+src_out, - isl_min(dst_map->extra-div_off, src_map->n_div)); - if (dst_map->n_div-div_off > src_map->n_div) - isl_seq_clr(dst+1+dst_nparam+dst_in+dst_out+ - div_off+src_map->n_div, - dst_map->n_div - div_off - src_map->n_div); -} - -static void copy_div(struct isl_basic_map *dst_map, isl_int *dst, - struct isl_basic_map *src_map, isl_int *src, - unsigned in_off, unsigned out_off, unsigned div_off) -{ - isl_int_set(dst[0], src[0]); - copy_constraint(dst_map, dst+1, src_map, src+1, in_off, out_off, div_off); -} - -static struct isl_basic_map *add_constraints(struct isl_basic_map *bmap1, - struct isl_basic_map *bmap2, unsigned i_pos, unsigned o_pos) -{ - int i; - unsigned div_off; - - if (!bmap1 || !bmap2) - goto error; - - div_off = bmap1->n_div; - - for (i = 0; i < bmap2->n_eq; ++i) { - int i1 = isl_basic_map_alloc_equality(bmap1); - if (i1 < 0) - goto error; - copy_constraint(bmap1, bmap1->eq[i1], bmap2, bmap2->eq[i], - i_pos, o_pos, div_off); - } - - for (i = 0; i < bmap2->n_ineq; ++i) { - int i1 = isl_basic_map_alloc_inequality(bmap1); - if (i1 < 0) - goto error; - copy_constraint(bmap1, bmap1->ineq[i1], bmap2, bmap2->ineq[i], - i_pos, o_pos, div_off); - } - - for (i = 0; i < bmap2->n_div; ++i) { - int i1 = isl_basic_map_alloc_div(bmap1); - if (i1 < 0) - goto error; - copy_div(bmap1, bmap1->div[i1], bmap2, bmap2->div[i], - i_pos, o_pos, div_off); - } - - isl_basic_map_free(bmap2); - - return bmap1; - -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -struct isl_basic_set *isl_basic_set_add_constraints(struct isl_basic_set *bset1, - struct isl_basic_set *bset2, unsigned pos) -{ - return (struct isl_basic_set *) - add_constraints((struct isl_basic_map *)bset1, - (struct isl_basic_map *)bset2, 0, pos); -} - -struct isl_basic_map *isl_basic_map_extend_dim(struct isl_basic_map *base, - struct isl_dim *dim, unsigned extra, - unsigned n_eq, unsigned n_ineq) -{ - struct isl_basic_map *ext; - unsigned flags; - int dims_ok; - - if (!dim) - goto error; - - if (!base) - goto error; - - dims_ok = isl_dim_equal(base->dim, dim) && - base->extra >= base->n_div + extra; - - if (dims_ok && room_for_con(base, n_eq + n_ineq) && - room_for_ineq(base, n_ineq)) { - isl_dim_free(dim); - return base; - } - - isl_assert(base->ctx, base->dim->nparam <= dim->nparam, goto error); - isl_assert(base->ctx, base->dim->n_in <= dim->n_in, goto error); - isl_assert(base->ctx, base->dim->n_out <= dim->n_out, goto error); - extra += base->extra; - n_eq += base->n_eq; - n_ineq += base->n_ineq; - - ext = isl_basic_map_alloc_dim(dim, extra, n_eq, n_ineq); - dim = NULL; - if (!ext) - goto error; - - if (dims_ok) - ext->sample = isl_vec_copy(base->sample); - flags = base->flags; - ext = add_constraints(ext, base, 0, 0); - if (ext) { - ext->flags = flags; - ISL_F_CLR(ext, ISL_BASIC_SET_FINAL); - } - - return ext; - -error: - isl_dim_free(dim); - isl_basic_map_free(base); - return NULL; -} - -struct isl_basic_set *isl_basic_set_extend_dim(struct isl_basic_set *base, - struct isl_dim *dim, unsigned extra, - unsigned n_eq, unsigned n_ineq) -{ - return (struct isl_basic_set *) - isl_basic_map_extend_dim((struct isl_basic_map *)base, dim, - extra, n_eq, n_ineq); -} - -struct isl_basic_map *isl_basic_map_extend_constraints( - struct isl_basic_map *base, unsigned n_eq, unsigned n_ineq) -{ - if (!base) - return NULL; - return isl_basic_map_extend_dim(base, isl_dim_copy(base->dim), - 0, n_eq, n_ineq); -} - -struct isl_basic_map *isl_basic_map_extend(struct isl_basic_map *base, - unsigned nparam, unsigned n_in, unsigned n_out, unsigned extra, - unsigned n_eq, unsigned n_ineq) -{ - struct isl_basic_map *bmap; - struct isl_dim *dim; - - if (!base) - return NULL; - dim = isl_dim_alloc(base->ctx, nparam, n_in, n_out); - if (!dim) - goto error; - - bmap = isl_basic_map_extend_dim(base, dim, extra, n_eq, n_ineq); - return bmap; -error: - isl_basic_map_free(base); - return NULL; -} - -struct isl_basic_set *isl_basic_set_extend(struct isl_basic_set *base, - unsigned nparam, unsigned dim, unsigned extra, - unsigned n_eq, unsigned n_ineq) -{ - return (struct isl_basic_set *) - isl_basic_map_extend((struct isl_basic_map *)base, - nparam, 0, dim, extra, n_eq, n_ineq); -} - -struct isl_basic_set *isl_basic_set_extend_constraints( - struct isl_basic_set *base, unsigned n_eq, unsigned n_ineq) -{ - return (struct isl_basic_set *) - isl_basic_map_extend_constraints((struct isl_basic_map *)base, - n_eq, n_ineq); -} - -struct isl_basic_set *isl_basic_set_cow(struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_cow((struct isl_basic_map *)bset); -} - -struct isl_basic_map *isl_basic_map_cow(struct isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - - if (bmap->ref > 1) { - bmap->ref--; - bmap = isl_basic_map_dup(bmap); - } - if (bmap) - ISL_F_CLR(bmap, ISL_BASIC_SET_FINAL); - return bmap; -} - -struct isl_set *isl_set_cow(struct isl_set *set) -{ - if (!set) - return NULL; - - if (set->ref == 1) - return set; - set->ref--; - return isl_set_dup(set); -} - -struct isl_map *isl_map_cow(struct isl_map *map) -{ - if (!map) - return NULL; - - if (map->ref == 1) - return map; - map->ref--; - return isl_map_dup(map); -} - -static void swap_vars(struct isl_blk blk, isl_int *a, - unsigned a_len, unsigned b_len) -{ - isl_seq_cpy(blk.data, a+a_len, b_len); - isl_seq_cpy(blk.data+b_len, a, a_len); - isl_seq_cpy(a, blk.data, b_len+a_len); -} - -static __isl_give isl_basic_map *isl_basic_map_swap_vars( - __isl_take isl_basic_map *bmap, unsigned pos, unsigned n1, unsigned n2) -{ - int i; - struct isl_blk blk; - - if (!bmap) - goto error; - - isl_assert(bmap->ctx, - pos + n1 + n2 <= 1 + isl_basic_map_total_dim(bmap), goto error); - - if (n1 == 0 || n2 == 0) - return bmap; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - blk = isl_blk_alloc(bmap->ctx, n1 + n2); - if (isl_blk_is_error(blk)) - goto error; - - for (i = 0; i < bmap->n_eq; ++i) - swap_vars(blk, - bmap->eq[i] + pos, n1, n2); - - for (i = 0; i < bmap->n_ineq; ++i) - swap_vars(blk, - bmap->ineq[i] + pos, n1, n2); - - for (i = 0; i < bmap->n_div; ++i) - swap_vars(blk, - bmap->div[i]+1 + pos, n1, n2); - - isl_blk_free(bmap->ctx, blk); - - ISL_F_CLR(bmap, ISL_BASIC_SET_NORMALIZED); - bmap = isl_basic_map_gauss(bmap, NULL); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -static __isl_give isl_basic_set *isl_basic_set_swap_vars( - __isl_take isl_basic_set *bset, unsigned n) -{ - unsigned dim; - unsigned nparam; - - nparam = isl_basic_set_n_param(bset); - dim = isl_basic_set_n_dim(bset); - isl_assert(bset->ctx, n <= dim, goto error); - - return isl_basic_map_swap_vars(bset, 1 + nparam, n, dim - n); -error: - isl_basic_set_free(bset); - return NULL; -} - -struct isl_basic_map *isl_basic_map_set_to_empty(struct isl_basic_map *bmap) -{ - int i = 0; - unsigned total; - if (!bmap) - goto error; - total = isl_basic_map_total_dim(bmap); - isl_basic_map_free_div(bmap, bmap->n_div); - isl_basic_map_free_inequality(bmap, bmap->n_ineq); - if (bmap->n_eq > 0) - isl_basic_map_free_equality(bmap, bmap->n_eq-1); - else { - i = isl_basic_map_alloc_equality(bmap); - if (i < 0) - goto error; - } - isl_int_set_si(bmap->eq[i][0], 1); - isl_seq_clr(bmap->eq[i]+1, total); - ISL_F_SET(bmap, ISL_BASIC_MAP_EMPTY); - isl_vec_free(bmap->sample); - bmap->sample = NULL; - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_set_to_empty(struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_set_to_empty((struct isl_basic_map *)bset); -} - -void isl_basic_map_swap_div(struct isl_basic_map *bmap, int a, int b) -{ - int i; - unsigned off = isl_dim_total(bmap->dim); - isl_int *t = bmap->div[a]; - bmap->div[a] = bmap->div[b]; - bmap->div[b] = t; - - for (i = 0; i < bmap->n_eq; ++i) - isl_int_swap(bmap->eq[i][1+off+a], bmap->eq[i][1+off+b]); - - for (i = 0; i < bmap->n_ineq; ++i) - isl_int_swap(bmap->ineq[i][1+off+a], bmap->ineq[i][1+off+b]); - - for (i = 0; i < bmap->n_div; ++i) - isl_int_swap(bmap->div[i][1+1+off+a], bmap->div[i][1+1+off+b]); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); -} - -/* Eliminate the specified n dimensions starting at first from the - * constraints using Fourier-Motzkin. The dimensions themselves - * are not removed. - */ -__isl_give isl_map *isl_map_eliminate(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!map) - return NULL; - if (n == 0) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - isl_assert(map->ctx, first + n <= isl_map_dim(map, type), goto error); - first += pos(map->dim, type) - 1; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_eliminate_vars(map->p[i], first, n); - if (!map->p[i]) - goto error; - } - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Eliminate the specified n dimensions starting at first from the - * constraints using Fourier-Motzkin. The dimensions themselves - * are not removed. - */ -__isl_give isl_set *isl_set_eliminate(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_set *)isl_map_eliminate((isl_map *)set, type, first, n); -} - -/* Eliminate the specified n dimensions starting at first from the - * constraints using Fourier-Motzkin. The dimensions themselves - * are not removed. - */ -__isl_give isl_set *isl_set_eliminate_dims(__isl_take isl_set *set, - unsigned first, unsigned n) -{ - return isl_set_eliminate(set, isl_dim_set, first, n); -} - -__isl_give isl_basic_map *isl_basic_map_remove_divs( - __isl_take isl_basic_map *bmap) -{ - bmap = isl_basic_map_eliminate_vars(bmap, isl_dim_total(bmap->dim), - bmap->n_div); - if (!bmap) - return NULL; - bmap->n_div = 0; - return isl_basic_map_finalize(bmap); -} - -__isl_give isl_basic_set *isl_basic_set_remove_divs( - __isl_take isl_basic_set *bset) -{ - return (struct isl_basic_set *)isl_basic_map_remove_divs( - (struct isl_basic_map *)bset); -} - -__isl_give isl_map *isl_map_remove_divs(__isl_take isl_map *map) -{ - int i; - - if (!map) - return NULL; - if (map->n == 0) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_remove_divs(map->p[i]); - if (!map->p[i]) - goto error; - } - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_remove_divs(__isl_take isl_set *set) -{ - return isl_map_remove_divs(set); -} - -struct isl_basic_map *isl_basic_map_remove_dims(struct isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n) -{ - if (!bmap) - return NULL; - isl_assert(bmap->ctx, first + n <= isl_basic_map_dim(bmap, type), - goto error); - if (n == 0) - return bmap; - bmap = isl_basic_map_eliminate_vars(bmap, - isl_basic_map_offset(bmap, type) - 1 + first, n); - if (!bmap) - return bmap; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY) && type == isl_dim_div) - return bmap; - bmap = isl_basic_map_drop(bmap, type, first, n); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Return true if the definition of the given div (recursively) involves - * any of the given variables. - */ -static int div_involves_vars(__isl_keep isl_basic_map *bmap, int div, - unsigned first, unsigned n) -{ - int i; - unsigned div_offset = isl_basic_map_offset(bmap, isl_dim_div); - - if (isl_int_is_zero(bmap->div[div][0])) - return 0; - if (isl_seq_first_non_zero(bmap->div[div] + 1 + first, n) >= 0) - return 1; - - for (i = bmap->n_div - 1; i >= 0; --i) { - if (isl_int_is_zero(bmap->div[div][1 + div_offset + i])) - continue; - if (div_involves_vars(bmap, i, first, n)) - return 1; - } - - return 0; -} - -/* Remove all divs (recursively) involving any of the given dimensions - * in their definitions. - */ -__isl_give isl_basic_map *isl_basic_map_remove_divs_involving_dims( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!bmap) - return NULL; - isl_assert(bmap->ctx, first + n <= isl_basic_map_dim(bmap, type), - goto error); - first += isl_basic_map_offset(bmap, type); - - for (i = bmap->n_div - 1; i >= 0; --i) { - if (!div_involves_vars(bmap, i, first, n)) - continue; - bmap = isl_basic_map_remove_dims(bmap, isl_dim_div, i, 1); - if (!bmap) - return NULL; - i = bmap->n_div; - } - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_map *isl_map_remove_divs_involving_dims(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!map) - return NULL; - if (map->n == 0) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_remove_divs_involving_dims(map->p[i], - type, first, n); - if (!map->p[i]) - goto error; - } - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_remove_divs_involving_dims(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_set *)isl_map_remove_divs_involving_dims((isl_map *)set, - type, first, n); -} - -int isl_basic_set_involves_dims(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!bset) - return -1; - - if (first + n > isl_basic_set_dim(bset, type)) - isl_die(bset->ctx, isl_error_invalid, - "index out of bounds", return -1); - - first += isl_basic_set_offset(bset, type); - for (i = 0; i < bset->n_eq; ++i) - if (isl_seq_first_non_zero(bset->eq[i] + first, n) >= 0) - return 1; - for (i = 0; i < bset->n_ineq; ++i) - if (isl_seq_first_non_zero(bset->ineq[i] + first, n) >= 0) - return 1; - - return 0; -} - -int isl_set_involves_dims(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!set) - return -1; - - if (first + n > isl_set_dim(set, type)) - isl_die(set->ctx, isl_error_invalid, - "index out of bounds", return -1); - - for (i = 0; i < set->n; ++i) { - int involves = isl_basic_set_involves_dims(set->p[i], - type, first, n); - if (involves < 0 || !involves) - return involves; - } - - return 1; -} - -/* Return true if the definition of the given div is unknown or depends - * on unknown divs. - */ -static int div_is_unknown(__isl_keep isl_basic_map *bmap, int div) -{ - int i; - unsigned div_offset = isl_basic_map_offset(bmap, isl_dim_div); - - if (isl_int_is_zero(bmap->div[div][0])) - return 1; - - for (i = bmap->n_div - 1; i >= 0; --i) { - if (isl_int_is_zero(bmap->div[div][1 + div_offset + i])) - continue; - if (div_is_unknown(bmap, i)) - return 1; - } - - return 0; -} - -/* Remove all divs that are unknown or defined in terms of unknown divs. - */ -__isl_give isl_basic_map *isl_basic_map_remove_unknown_divs( - __isl_take isl_basic_map *bmap) -{ - int i; - - if (!bmap) - return NULL; - - for (i = bmap->n_div - 1; i >= 0; --i) { - if (!div_is_unknown(bmap, i)) - continue; - bmap = isl_basic_map_remove_dims(bmap, isl_dim_div, i, 1); - } - - return bmap; -} - -__isl_give isl_map *isl_map_remove_unknown_divs(__isl_take isl_map *map) -{ - int i; - - if (!map) - return NULL; - if (map->n == 0) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_remove_unknown_divs(map->p[i]); - if (!map->p[i]) - goto error; - } - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_remove_unknown_divs(__isl_take isl_set *set) -{ - return (isl_set *)isl_map_remove_unknown_divs((isl_map *)set); -} - -__isl_give isl_basic_set *isl_basic_set_remove_dims( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_basic_set *) - isl_basic_map_remove_dims((isl_basic_map *)bset, type, first, n); -} - -struct isl_map *isl_map_remove_dims(struct isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (n == 0) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - isl_assert(map->ctx, first + n <= isl_map_dim(map, type), goto error); - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_eliminate_vars(map->p[i], - isl_basic_map_offset(map->p[i], type) - 1 + first, n); - if (!map->p[i]) - goto error; - } - map = isl_map_drop(map, type, first, n); - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_remove_dims(__isl_take isl_set *bset, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_set *)isl_map_remove_dims((isl_map *)bset, type, first, n); -} - -/* Project out n inputs starting at first using Fourier-Motzkin */ -struct isl_map *isl_map_remove_inputs(struct isl_map *map, - unsigned first, unsigned n) -{ - return isl_map_remove_dims(map, isl_dim_in, first, n); -} - -static void dump_term(struct isl_basic_map *bmap, - isl_int c, int pos, FILE *out) -{ - const char *name; - unsigned in = isl_basic_map_n_in(bmap); - unsigned dim = in + isl_basic_map_n_out(bmap); - unsigned nparam = isl_basic_map_n_param(bmap); - if (!pos) - isl_int_print(out, c, 0); - else { - if (!isl_int_is_one(c)) - isl_int_print(out, c, 0); - if (pos < 1 + nparam) { - name = isl_dim_get_name(bmap->dim, - isl_dim_param, pos - 1); - if (name) - fprintf(out, "%s", name); - else - fprintf(out, "p%d", pos - 1); - } else if (pos < 1 + nparam + in) - fprintf(out, "i%d", pos - 1 - nparam); - else if (pos < 1 + nparam + dim) - fprintf(out, "o%d", pos - 1 - nparam - in); - else - fprintf(out, "e%d", pos - 1 - nparam - dim); - } -} - -static void dump_constraint_sign(struct isl_basic_map *bmap, isl_int *c, - int sign, FILE *out) -{ - int i; - int first; - unsigned len = 1 + isl_basic_map_total_dim(bmap); - isl_int v; - - isl_int_init(v); - for (i = 0, first = 1; i < len; ++i) { - if (isl_int_sgn(c[i]) * sign <= 0) - continue; - if (!first) - fprintf(out, " + "); - first = 0; - isl_int_abs(v, c[i]); - dump_term(bmap, v, i, out); - } - isl_int_clear(v); - if (first) - fprintf(out, "0"); -} - -static void dump_constraint(struct isl_basic_map *bmap, isl_int *c, - const char *op, FILE *out, int indent) -{ - int i; - - fprintf(out, "%*s", indent, ""); - - dump_constraint_sign(bmap, c, 1, out); - fprintf(out, " %s ", op); - dump_constraint_sign(bmap, c, -1, out); - - fprintf(out, "\n"); - - for (i = bmap->n_div; i < bmap->extra; ++i) { - if (isl_int_is_zero(c[1+isl_dim_total(bmap->dim)+i])) - continue; - fprintf(out, "%*s", indent, ""); - fprintf(out, "ERROR: unused div coefficient not zero\n"); - abort(); - } -} - -static void dump_constraints(struct isl_basic_map *bmap, - isl_int **c, unsigned n, - const char *op, FILE *out, int indent) -{ - int i; - - for (i = 0; i < n; ++i) - dump_constraint(bmap, c[i], op, out, indent); -} - -static void dump_affine(struct isl_basic_map *bmap, isl_int *exp, FILE *out) -{ - int j; - int first = 1; - unsigned total = isl_basic_map_total_dim(bmap); - - for (j = 0; j < 1 + total; ++j) { - if (isl_int_is_zero(exp[j])) - continue; - if (!first && isl_int_is_pos(exp[j])) - fprintf(out, "+"); - dump_term(bmap, exp[j], j, out); - first = 0; - } -} - -static void dump(struct isl_basic_map *bmap, FILE *out, int indent) -{ - int i; - - dump_constraints(bmap, bmap->eq, bmap->n_eq, "=", out, indent); - dump_constraints(bmap, bmap->ineq, bmap->n_ineq, ">=", out, indent); - - for (i = 0; i < bmap->n_div; ++i) { - fprintf(out, "%*s", indent, ""); - fprintf(out, "e%d = [(", i); - dump_affine(bmap, bmap->div[i]+1, out); - fprintf(out, ")/"); - isl_int_print(out, bmap->div[i][0], 0); - fprintf(out, "]\n"); - } -} - -void isl_basic_set_print_internal(struct isl_basic_set *bset, - FILE *out, int indent) -{ - if (!bset) { - fprintf(out, "null basic set\n"); - return; - } - - fprintf(out, "%*s", indent, ""); - fprintf(out, "ref: %d, nparam: %d, dim: %d, extra: %d, flags: %x\n", - bset->ref, bset->dim->nparam, bset->dim->n_out, - bset->extra, bset->flags); - dump((struct isl_basic_map *)bset, out, indent); -} - -void isl_basic_map_print_internal(struct isl_basic_map *bmap, - FILE *out, int indent) -{ - if (!bmap) { - fprintf(out, "null basic map\n"); - return; - } - - fprintf(out, "%*s", indent, ""); - fprintf(out, "ref: %d, nparam: %d, in: %d, out: %d, extra: %d, " - "flags: %x, n_name: %d\n", - bmap->ref, - bmap->dim->nparam, bmap->dim->n_in, bmap->dim->n_out, - bmap->extra, bmap->flags, bmap->dim->n_name); - dump(bmap, out, indent); -} - -int isl_inequality_negate(struct isl_basic_map *bmap, unsigned pos) -{ - unsigned total; - if (!bmap) - return -1; - total = isl_basic_map_total_dim(bmap); - isl_assert(bmap->ctx, pos < bmap->n_ineq, return -1); - isl_seq_neg(bmap->ineq[pos], bmap->ineq[pos], 1 + total); - isl_int_sub_ui(bmap->ineq[pos][0], bmap->ineq[pos][0], 1); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - return 0; -} - -struct isl_set *isl_set_alloc_dim(struct isl_dim *dim, int n, unsigned flags) -{ - struct isl_set *set; - - if (!dim) - return NULL; - isl_assert(dim->ctx, dim->n_in == 0, goto error); - isl_assert(dim->ctx, n >= 0, goto error); - set = isl_alloc(dim->ctx, struct isl_set, - sizeof(struct isl_set) + - (n - 1) * sizeof(struct isl_basic_set *)); - if (!set) - goto error; - - set->ctx = dim->ctx; - isl_ctx_ref(set->ctx); - set->ref = 1; - set->size = n; - set->n = 0; - set->dim = dim; - set->flags = flags; - return set; -error: - isl_dim_free(dim); - return NULL; -} - -struct isl_set *isl_set_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned dim, int n, unsigned flags) -{ - struct isl_set *set; - struct isl_dim *dims; - - dims = isl_dim_alloc(ctx, nparam, 0, dim); - if (!dims) - return NULL; - - set = isl_set_alloc_dim(dims, n, flags); - return set; -} - -/* Make sure "map" has room for at least "n" more basic maps. - */ -struct isl_map *isl_map_grow(struct isl_map *map, int n) -{ - int i; - struct isl_map *grown = NULL; - - if (!map) - return NULL; - isl_assert(map->ctx, n >= 0, goto error); - if (map->n + n <= map->size) - return map; - grown = isl_map_alloc_dim(isl_map_get_dim(map), map->n + n, map->flags); - if (!grown) - goto error; - for (i = 0; i < map->n; ++i) { - grown->p[i] = isl_basic_map_copy(map->p[i]); - if (!grown->p[i]) - goto error; - grown->n++; - } - isl_map_free(map); - return grown; -error: - isl_map_free(grown); - isl_map_free(map); - return NULL; -} - -/* Make sure "set" has room for at least "n" more basic sets. - */ -struct isl_set *isl_set_grow(struct isl_set *set, int n) -{ - return (struct isl_set *)isl_map_grow((struct isl_map *)set, n); -} - -struct isl_set *isl_set_dup(struct isl_set *set) -{ - int i; - struct isl_set *dup; - - if (!set) - return NULL; - - dup = isl_set_alloc_dim(isl_dim_copy(set->dim), set->n, set->flags); - if (!dup) - return NULL; - for (i = 0; i < set->n; ++i) - dup = isl_set_add_basic_set(dup, isl_basic_set_copy(set->p[i])); - return dup; -} - -struct isl_set *isl_set_from_basic_set(struct isl_basic_set *bset) -{ - return isl_map_from_basic_map(bset); -} - -struct isl_map *isl_map_from_basic_map(struct isl_basic_map *bmap) -{ - struct isl_map *map; - - if (!bmap) - return NULL; - - map = isl_map_alloc_dim(isl_dim_copy(bmap->dim), 1, ISL_MAP_DISJOINT); - return isl_map_add_basic_map(map, bmap); -} - -__isl_give isl_set *isl_set_add_basic_set(__isl_take isl_set *set, - __isl_take isl_basic_set *bset) -{ - return (struct isl_set *)isl_map_add_basic_map((struct isl_map *)set, - (struct isl_basic_map *)bset); -} - -void isl_set_free(struct isl_set *set) -{ - int i; - - if (!set) - return; - - if (--set->ref > 0) - return; - - isl_ctx_deref(set->ctx); - for (i = 0; i < set->n; ++i) - isl_basic_set_free(set->p[i]); - isl_dim_free(set->dim); - free(set); -} - -void isl_set_print_internal(struct isl_set *set, FILE *out, int indent) -{ - int i; - - if (!set) { - fprintf(out, "null set\n"); - return; - } - - fprintf(out, "%*s", indent, ""); - fprintf(out, "ref: %d, n: %d, nparam: %d, dim: %d, flags: %x\n", - set->ref, set->n, set->dim->nparam, set->dim->n_out, - set->flags); - for (i = 0; i < set->n; ++i) { - fprintf(out, "%*s", indent, ""); - fprintf(out, "basic set %d:\n", i); - isl_basic_set_print_internal(set->p[i], out, indent+4); - } -} - -void isl_map_print_internal(struct isl_map *map, FILE *out, int indent) -{ - int i; - - if (!map) { - fprintf(out, "null map\n"); - return; - } - - fprintf(out, "%*s", indent, ""); - fprintf(out, "ref: %d, n: %d, nparam: %d, in: %d, out: %d, " - "flags: %x, n_name: %d\n", - map->ref, map->n, map->dim->nparam, map->dim->n_in, - map->dim->n_out, map->flags, map->dim->n_name); - for (i = 0; i < map->n; ++i) { - fprintf(out, "%*s", indent, ""); - fprintf(out, "basic map %d:\n", i); - isl_basic_map_print_internal(map->p[i], out, indent+4); - } -} - -struct isl_basic_map *isl_basic_map_intersect_domain( - struct isl_basic_map *bmap, struct isl_basic_set *bset) -{ - struct isl_basic_map *bmap_domain; - - if (!bmap || !bset) - goto error; - - isl_assert(bset->ctx, isl_dim_match(bmap->dim, isl_dim_param, - bset->dim, isl_dim_param), goto error); - - if (isl_dim_size(bset->dim, isl_dim_set) != 0) - isl_assert(bset->ctx, - isl_basic_map_compatible_domain(bmap, bset), goto error); - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - goto error; - bmap = isl_basic_map_extend_dim(bmap, isl_dim_copy(bmap->dim), - bset->n_div, bset->n_eq, bset->n_ineq); - bmap_domain = isl_basic_map_from_domain(bset); - bmap = add_constraints(bmap, bmap_domain, 0, 0); - - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - isl_basic_set_free(bset); - return NULL; -} - -struct isl_basic_map *isl_basic_map_intersect_range( - struct isl_basic_map *bmap, struct isl_basic_set *bset) -{ - struct isl_basic_map *bmap_range; - - if (!bmap || !bset) - goto error; - - isl_assert(bset->ctx, isl_dim_match(bmap->dim, isl_dim_param, - bset->dim, isl_dim_param), goto error); - - if (isl_dim_size(bset->dim, isl_dim_set) != 0) - isl_assert(bset->ctx, - isl_basic_map_compatible_range(bmap, bset), goto error); - - if (isl_basic_set_is_universe(bset)) { - isl_basic_set_free(bset); - return bmap; - } - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - goto error; - bmap = isl_basic_map_extend_dim(bmap, isl_dim_copy(bmap->dim), - bset->n_div, bset->n_eq, bset->n_ineq); - bmap_range = isl_basic_map_from_basic_set(bset, isl_dim_copy(bset->dim)); - bmap = add_constraints(bmap, bmap_range, 0, 0); - - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - isl_basic_set_free(bset); - return NULL; -} - -int isl_basic_map_contains(struct isl_basic_map *bmap, struct isl_vec *vec) -{ - int i; - unsigned total; - isl_int s; - - total = 1 + isl_basic_map_total_dim(bmap); - if (total != vec->size) - return -1; - - isl_int_init(s); - - for (i = 0; i < bmap->n_eq; ++i) { - isl_seq_inner_product(vec->el, bmap->eq[i], total, &s); - if (!isl_int_is_zero(s)) { - isl_int_clear(s); - return 0; - } - } - - for (i = 0; i < bmap->n_ineq; ++i) { - isl_seq_inner_product(vec->el, bmap->ineq[i], total, &s); - if (isl_int_is_neg(s)) { - isl_int_clear(s); - return 0; - } - } - - isl_int_clear(s); - - return 1; -} - -int isl_basic_set_contains(struct isl_basic_set *bset, struct isl_vec *vec) -{ - return isl_basic_map_contains((struct isl_basic_map *)bset, vec); -} - -struct isl_basic_map *isl_basic_map_intersect( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - struct isl_vec *sample = NULL; - - if (!bmap1 || !bmap2) - goto error; - - isl_assert(bmap1->ctx, isl_dim_match(bmap1->dim, isl_dim_param, - bmap2->dim, isl_dim_param), goto error); - if (isl_dim_total(bmap1->dim) == - isl_dim_size(bmap1->dim, isl_dim_param) && - isl_dim_total(bmap2->dim) != - isl_dim_size(bmap2->dim, isl_dim_param)) - return isl_basic_map_intersect(bmap2, bmap1); - - if (isl_dim_total(bmap2->dim) != - isl_dim_size(bmap2->dim, isl_dim_param)) - isl_assert(bmap1->ctx, - isl_dim_equal(bmap1->dim, bmap2->dim), goto error); - - if (bmap1->sample && - isl_basic_map_contains(bmap1, bmap1->sample) > 0 && - isl_basic_map_contains(bmap2, bmap1->sample) > 0) - sample = isl_vec_copy(bmap1->sample); - else if (bmap2->sample && - isl_basic_map_contains(bmap1, bmap2->sample) > 0 && - isl_basic_map_contains(bmap2, bmap2->sample) > 0) - sample = isl_vec_copy(bmap2->sample); - - bmap1 = isl_basic_map_cow(bmap1); - if (!bmap1) - goto error; - bmap1 = isl_basic_map_extend_dim(bmap1, isl_dim_copy(bmap1->dim), - bmap2->n_div, bmap2->n_eq, bmap2->n_ineq); - bmap1 = add_constraints(bmap1, bmap2, 0, 0); - - if (!bmap1) - isl_vec_free(sample); - else if (sample) { - isl_vec_free(bmap1->sample); - bmap1->sample = sample; - } - - bmap1 = isl_basic_map_simplify(bmap1); - return isl_basic_map_finalize(bmap1); -error: - if (sample) - isl_vec_free(sample); - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -struct isl_basic_set *isl_basic_set_intersect( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - return (struct isl_basic_set *) - isl_basic_map_intersect( - (struct isl_basic_map *)bset1, - (struct isl_basic_map *)bset2); -} - -/* Special case of isl_map_intersect, where both map1 and map2 - * are convex, without any divs and such that either map1 or map2 - * contains a single constraint. This constraint is then simply - * added to the other map. - */ -static __isl_give isl_map *map_intersect_add_constraint( - __isl_take isl_map *map1, __isl_take isl_map *map2) -{ - isl_assert(map1->ctx, map1->n == 1, goto error); - isl_assert(map2->ctx, map1->n == 1, goto error); - isl_assert(map1->ctx, map1->p[0]->n_div == 0, goto error); - isl_assert(map2->ctx, map1->p[0]->n_div == 0, goto error); - - if (map2->p[0]->n_eq + map2->p[0]->n_ineq != 1) - return isl_map_intersect(map2, map1); - - isl_assert(map2->ctx, - map2->p[0]->n_eq + map2->p[0]->n_ineq == 1, goto error); - - map1 = isl_map_cow(map1); - if (!map1) - goto error; - if (isl_map_plain_is_empty(map1)) { - isl_map_free(map2); - return map1; - } - map1->p[0] = isl_basic_map_cow(map1->p[0]); - if (map2->p[0]->n_eq == 1) - map1->p[0] = isl_basic_map_add_eq(map1->p[0], map2->p[0]->eq[0]); - else - map1->p[0] = isl_basic_map_add_ineq(map1->p[0], - map2->p[0]->ineq[0]); - - map1->p[0] = isl_basic_map_simplify(map1->p[0]); - map1->p[0] = isl_basic_map_finalize(map1->p[0]); - if (!map1->p[0]) - goto error; - - if (isl_basic_map_plain_is_empty(map1->p[0])) { - isl_basic_map_free(map1->p[0]); - map1->n = 0; - } - - isl_map_free(map2); - - return map1; -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -struct isl_map *isl_map_intersect(struct isl_map *map1, struct isl_map *map2) -{ - unsigned flags = 0; - struct isl_map *result; - int i, j; - - if (!map1 || !map2) - goto error; - - if (isl_map_plain_is_empty(map1)) { - isl_map_free(map2); - return map1; - } - if (isl_map_plain_is_empty(map2)) { - isl_map_free(map1); - return map2; - } - - if (map1->n == 1 && map2->n == 1 && - map1->p[0]->n_div == 0 && map2->p[0]->n_div == 0 && - isl_dim_equal(map1->dim, map2->dim) && - (map1->p[0]->n_eq + map1->p[0]->n_ineq == 1 || - map2->p[0]->n_eq + map2->p[0]->n_ineq == 1)) - return map_intersect_add_constraint(map1, map2); - isl_assert(map1->ctx, isl_dim_match(map1->dim, isl_dim_param, - map2->dim, isl_dim_param), goto error); - if (isl_dim_total(map1->dim) == - isl_dim_size(map1->dim, isl_dim_param) && - isl_dim_total(map2->dim) != isl_dim_size(map2->dim, isl_dim_param)) - return isl_map_intersect(map2, map1); - - if (isl_dim_total(map2->dim) != isl_dim_size(map2->dim, isl_dim_param)) - isl_assert(map1->ctx, - isl_dim_equal(map1->dim, map2->dim), goto error); - - if (ISL_F_ISSET(map1, ISL_MAP_DISJOINT) && - ISL_F_ISSET(map2, ISL_MAP_DISJOINT)) - ISL_FL_SET(flags, ISL_MAP_DISJOINT); - - result = isl_map_alloc_dim(isl_dim_copy(map1->dim), - map1->n * map2->n, flags); - if (!result) - goto error; - for (i = 0; i < map1->n; ++i) - for (j = 0; j < map2->n; ++j) { - struct isl_basic_map *part; - part = isl_basic_map_intersect( - isl_basic_map_copy(map1->p[i]), - isl_basic_map_copy(map2->p[j])); - if (isl_basic_map_is_empty(part)) - isl_basic_map_free(part); - else - result = isl_map_add_basic_map(result, part); - if (!result) - goto error; - } - isl_map_free(map1); - isl_map_free(map2); - return result; -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -struct isl_set *isl_set_intersect(struct isl_set *set1, struct isl_set *set2) -{ - return (struct isl_set *) - isl_map_intersect((struct isl_map *)set1, - (struct isl_map *)set2); -} - -/* The current implementation of isl_map_intersect accepts intersections - * with parameter domains, so we can just call that for now. - */ -__isl_give isl_map *isl_map_intersect_params(__isl_take isl_map *map, - __isl_take isl_set *params) -{ - return isl_map_intersect(map, params); -} - -__isl_give isl_set *isl_set_intersect_params(__isl_take isl_set *set, - __isl_take isl_set *params) -{ - return isl_map_intersect_params(set, params); -} - -struct isl_basic_map *isl_basic_map_reverse(struct isl_basic_map *bmap) -{ - struct isl_dim *dim; - struct isl_basic_set *bset; - unsigned in; - - if (!bmap) - return NULL; - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - dim = isl_dim_reverse(isl_dim_copy(bmap->dim)); - in = isl_basic_map_n_in(bmap); - bset = isl_basic_set_from_basic_map(bmap); - bset = isl_basic_set_swap_vars(bset, in); - return isl_basic_map_from_basic_set(bset, dim); -} - -__isl_give isl_basic_map *isl_basic_map_insert(__isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, unsigned n) -{ - struct isl_dim *res_dim; - struct isl_basic_map *res; - struct isl_dim_map *dim_map; - unsigned total, off; - enum isl_dim_type t; - - if (n == 0) - return bmap; - - if (!bmap) - return NULL; - - res_dim = isl_dim_insert(isl_basic_map_get_dim(bmap), type, pos, n); - - total = isl_basic_map_total_dim(bmap) + n; - dim_map = isl_dim_map_alloc(bmap->ctx, total); - off = 0; - for (t = isl_dim_param; t <= isl_dim_out; ++t) { - if (t != type) { - isl_dim_map_dim(dim_map, bmap->dim, t, off); - } else { - unsigned size = isl_basic_map_dim(bmap, t); - isl_dim_map_dim_range(dim_map, bmap->dim, t, - 0, pos, off); - isl_dim_map_dim_range(dim_map, bmap->dim, t, - pos, size - pos, off + pos + n); - } - off += isl_dim_size(res_dim, t); - } - isl_dim_map_div(dim_map, bmap, off); - - res = isl_basic_map_alloc_dim(res_dim, - bmap->n_div, bmap->n_eq, bmap->n_ineq); - if (isl_basic_map_is_rational(bmap)) - res = isl_basic_map_set_rational(res); - res = isl_basic_map_add_constraints_dim_map(res, bmap, dim_map); - return isl_basic_map_finalize(res); -} - -__isl_give isl_basic_map *isl_basic_map_add(__isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned n) -{ - if (!bmap) - return NULL; - return isl_basic_map_insert(bmap, type, - isl_basic_map_dim(bmap, type), n); -} - -__isl_give isl_basic_set *isl_basic_set_add(__isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned n) -{ - if (!bset) - return NULL; - isl_assert(bset->ctx, type != isl_dim_in, goto error); - return (isl_basic_set *)isl_basic_map_add((isl_basic_map *)bset, type, n); -error: - isl_basic_set_free(bset); - return NULL; -} - -__isl_give isl_map *isl_map_insert(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, unsigned n) -{ - int i; - - if (n == 0) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - map->dim = isl_dim_insert(map->dim, type, pos, n); - if (!map->dim) - goto error; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_insert(map->p[i], type, pos, n); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_insert(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, unsigned n) -{ - return (isl_set *)isl_map_insert((isl_map *)set, type, pos, n); -} - -__isl_give isl_map *isl_map_add_dims(__isl_take isl_map *map, - enum isl_dim_type type, unsigned n) -{ - if (!map) - return NULL; - return isl_map_insert(map, type, isl_map_dim(map, type), n); -} - -__isl_give isl_set *isl_set_add_dims(__isl_take isl_set *set, - enum isl_dim_type type, unsigned n) -{ - if (!set) - return NULL; - isl_assert(set->ctx, type != isl_dim_in, goto error); - return (isl_set *)isl_map_add_dims((isl_map *)set, type, n); -error: - isl_set_free(set); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_move_dims( - __isl_take isl_basic_map *bmap, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - struct isl_dim_map *dim_map; - struct isl_basic_map *res; - enum isl_dim_type t; - unsigned total, off; - - if (!bmap) - return NULL; - if (n == 0) - return bmap; - - isl_assert(bmap->ctx, src_pos + n <= isl_basic_map_dim(bmap, src_type), - goto error); - - if (dst_type == src_type && dst_pos == src_pos) - return bmap; - - isl_assert(bmap->ctx, dst_type != src_type, goto error); - - if (pos(bmap->dim, dst_type) + dst_pos == - pos(bmap->dim, src_type) + src_pos + - ((src_type < dst_type) ? n : 0)) { - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - bmap->dim = isl_dim_move(bmap->dim, dst_type, dst_pos, - src_type, src_pos, n); - if (!bmap->dim) - goto error; - - bmap = isl_basic_map_finalize(bmap); - - return bmap; - } - - total = isl_basic_map_total_dim(bmap); - dim_map = isl_dim_map_alloc(bmap->ctx, total); - - off = 0; - for (t = isl_dim_param; t <= isl_dim_out; ++t) { - unsigned size = isl_dim_size(bmap->dim, t); - if (t == dst_type) { - isl_dim_map_dim_range(dim_map, bmap->dim, t, - 0, dst_pos, off); - off += dst_pos; - isl_dim_map_dim_range(dim_map, bmap->dim, src_type, - src_pos, n, off); - off += n; - isl_dim_map_dim_range(dim_map, bmap->dim, t, - dst_pos, size - dst_pos, off); - off += size - dst_pos; - } else if (t == src_type) { - isl_dim_map_dim_range(dim_map, bmap->dim, t, - 0, src_pos, off); - off += src_pos; - isl_dim_map_dim_range(dim_map, bmap->dim, t, - src_pos + n, size - src_pos - n, off); - off += size - src_pos - n; - } else { - isl_dim_map_dim(dim_map, bmap->dim, t, off); - off += size; - } - } - isl_dim_map_div(dim_map, bmap, off); - - res = isl_basic_map_alloc_dim(isl_basic_map_get_dim(bmap), - bmap->n_div, bmap->n_eq, bmap->n_ineq); - bmap = isl_basic_map_add_constraints_dim_map(res, bmap, dim_map); - - bmap->dim = isl_dim_move(bmap->dim, dst_type, dst_pos, - src_type, src_pos, n); - if (!bmap->dim) - goto error; - - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - bmap = isl_basic_map_gauss(bmap, NULL); - bmap = isl_basic_map_finalize(bmap); - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_move_dims(__isl_take isl_basic_set *bset, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - return (isl_basic_set *)isl_basic_map_move_dims( - (isl_basic_map *)bset, dst_type, dst_pos, src_type, src_pos, n); -} - -__isl_give isl_set *isl_set_move_dims(__isl_take isl_set *set, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - if (!set) - return NULL; - isl_assert(set->ctx, dst_type != isl_dim_in, goto error); - return (isl_set *)isl_map_move_dims((isl_map *)set, dst_type, dst_pos, - src_type, src_pos, n); -error: - isl_set_free(set); - return NULL; -} - -__isl_give isl_map *isl_map_move_dims(__isl_take isl_map *map, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - int i; - - if (!map) - return NULL; - if (n == 0) - return map; - - isl_assert(map->ctx, src_pos + n <= isl_map_dim(map, src_type), - goto error); - - if (dst_type == src_type && dst_pos == src_pos) - return map; - - isl_assert(map->ctx, dst_type != src_type, goto error); - - map = isl_map_cow(map); - if (!map) - return NULL; - - map->dim = isl_dim_move(map->dim, dst_type, dst_pos, src_type, src_pos, n); - if (!map->dim) - goto error; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_move_dims(map->p[i], - dst_type, dst_pos, - src_type, src_pos, n); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Move the specified dimensions to the last columns right before - * the divs. Don't change the dimension specification of bmap. - * That's the responsibility of the caller. - */ -static __isl_give isl_basic_map *move_last(__isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n) -{ - struct isl_dim_map *dim_map; - struct isl_basic_map *res; - enum isl_dim_type t; - unsigned total, off; - - if (!bmap) - return NULL; - if (pos(bmap->dim, type) + first + n == 1 + isl_dim_total(bmap->dim)) - return bmap; - - total = isl_basic_map_total_dim(bmap); - dim_map = isl_dim_map_alloc(bmap->ctx, total); - - off = 0; - for (t = isl_dim_param; t <= isl_dim_out; ++t) { - unsigned size = isl_dim_size(bmap->dim, t); - if (t == type) { - isl_dim_map_dim_range(dim_map, bmap->dim, t, - 0, first, off); - off += first; - isl_dim_map_dim_range(dim_map, bmap->dim, t, - first, n, total - bmap->n_div - n); - isl_dim_map_dim_range(dim_map, bmap->dim, t, - first + n, size - (first + n), off); - off += size - (first + n); - } else { - isl_dim_map_dim(dim_map, bmap->dim, t, off); - off += size; - } - } - isl_dim_map_div(dim_map, bmap, off + n); - - res = isl_basic_map_alloc_dim(isl_basic_map_get_dim(bmap), - bmap->n_div, bmap->n_eq, bmap->n_ineq); - res = isl_basic_map_add_constraints_dim_map(res, bmap, dim_map); - return res; -} - -/* Turn the n dimensions of type type, starting at first - * into existentially quantified variables. - */ -__isl_give isl_basic_map *isl_basic_map_project_out( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - size_t row_size; - isl_int **new_div; - isl_int *old; - - if (n == 0) - return bmap; - - if (!bmap) - return NULL; - - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL)) - return isl_basic_map_remove_dims(bmap, type, first, n); - - isl_assert(bmap->ctx, first + n <= isl_basic_map_dim(bmap, type), - goto error); - - bmap = move_last(bmap, type, first, n); - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - row_size = 1 + isl_dim_total(bmap->dim) + bmap->extra; - old = bmap->block2.data; - bmap->block2 = isl_blk_extend(bmap->ctx, bmap->block2, - (bmap->extra + n) * (1 + row_size)); - if (!bmap->block2.data) - goto error; - new_div = isl_alloc_array(bmap->ctx, isl_int *, bmap->extra + n); - if (!new_div) - goto error; - for (i = 0; i < n; ++i) { - new_div[i] = bmap->block2.data + - (bmap->extra + i) * (1 + row_size); - isl_seq_clr(new_div[i], 1 + row_size); - } - for (i = 0; i < bmap->extra; ++i) - new_div[n + i] = bmap->block2.data + (bmap->div[i] - old); - free(bmap->div); - bmap->div = new_div; - bmap->n_div += n; - bmap->extra += n; - - bmap->dim = isl_dim_drop(bmap->dim, type, first, n); - if (!bmap->dim) - goto error; - bmap = isl_basic_map_simplify(bmap); - bmap = isl_basic_map_drop_redundant_divs(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Turn the n dimensions of type type, starting at first - * into existentially quantified variables. - */ -struct isl_basic_set *isl_basic_set_project_out(struct isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_basic_set *)isl_basic_map_project_out( - (isl_basic_map *)bset, type, first, n); -} - -/* Turn the n dimensions of type type, starting at first - * into existentially quantified variables. - */ -__isl_give isl_map *isl_map_project_out(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!map) - return NULL; - - if (n == 0) - return map; - - isl_assert(map->ctx, first + n <= isl_map_dim(map, type), goto error); - - map = isl_map_cow(map); - if (!map) - return NULL; - - map->dim = isl_dim_drop(map->dim, type, first, n); - if (!map->dim) - goto error; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_project_out(map->p[i], type, first, n); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Turn the n dimensions of type type, starting at first - * into existentially quantified variables. - */ -__isl_give isl_set *isl_set_project_out(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_set *)isl_map_project_out((isl_map *)set, type, first, n); -} - -static struct isl_basic_map *add_divs(struct isl_basic_map *bmap, unsigned n) -{ - int i, j; - - for (i = 0; i < n; ++i) { - j = isl_basic_map_alloc_div(bmap); - if (j < 0) - goto error; - isl_seq_clr(bmap->div[j], 1+1+isl_basic_map_total_dim(bmap)); - } - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_map *isl_basic_map_apply_range( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - struct isl_dim *dim_result = NULL; - struct isl_basic_map *bmap; - unsigned n_in, n_out, n, nparam, total, pos; - struct isl_dim_map *dim_map1, *dim_map2; - - if (!bmap1 || !bmap2) - goto error; - - dim_result = isl_dim_join(isl_dim_copy(bmap1->dim), - isl_dim_copy(bmap2->dim)); - - n_in = isl_basic_map_n_in(bmap1); - n_out = isl_basic_map_n_out(bmap2); - n = isl_basic_map_n_out(bmap1); - nparam = isl_basic_map_n_param(bmap1); - - total = nparam + n_in + n_out + bmap1->n_div + bmap2->n_div + n; - dim_map1 = isl_dim_map_alloc(bmap1->ctx, total); - dim_map2 = isl_dim_map_alloc(bmap1->ctx, total); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_in, pos += nparam); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_out, pos += n_in); - isl_dim_map_div(dim_map1, bmap1, pos += n_out); - isl_dim_map_div(dim_map2, bmap2, pos += bmap1->n_div); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_out, pos += bmap2->n_div); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_in, pos); - - bmap = isl_basic_map_alloc_dim(dim_result, - bmap1->n_div + bmap2->n_div + n, - bmap1->n_eq + bmap2->n_eq, - bmap1->n_ineq + bmap2->n_ineq); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap1, dim_map1); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap2, dim_map2); - bmap = add_divs(bmap, n); - bmap = isl_basic_map_simplify(bmap); - bmap = isl_basic_map_drop_redundant_divs(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -struct isl_basic_set *isl_basic_set_apply( - struct isl_basic_set *bset, struct isl_basic_map *bmap) -{ - if (!bset || !bmap) - goto error; - - isl_assert(bset->ctx, isl_basic_map_compatible_domain(bmap, bset), - goto error); - - return (struct isl_basic_set *) - isl_basic_map_apply_range((struct isl_basic_map *)bset, bmap); -error: - isl_basic_set_free(bset); - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_map *isl_basic_map_apply_domain( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - if (!bmap1 || !bmap2) - goto error; - - isl_assert(bmap1->ctx, - isl_basic_map_n_in(bmap1) == isl_basic_map_n_in(bmap2), goto error); - isl_assert(bmap1->ctx, - isl_basic_map_n_param(bmap1) == isl_basic_map_n_param(bmap2), - goto error); - - bmap1 = isl_basic_map_reverse(bmap1); - bmap1 = isl_basic_map_apply_range(bmap1, bmap2); - return isl_basic_map_reverse(bmap1); -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -/* Given two basic maps A -> f(A) and B -> g(B), construct a basic map - * A \cap B -> f(A) + f(B) - */ -struct isl_basic_map *isl_basic_map_sum( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - unsigned n_in, n_out, nparam, total, pos; - struct isl_basic_map *bmap = NULL; - struct isl_dim_map *dim_map1, *dim_map2; - int i; - - if (!bmap1 || !bmap2) - goto error; - - isl_assert(bmap1->ctx, isl_dim_equal(bmap1->dim, bmap2->dim), - goto error); - - nparam = isl_basic_map_n_param(bmap1); - n_in = isl_basic_map_n_in(bmap1); - n_out = isl_basic_map_n_out(bmap1); - - total = nparam + n_in + n_out + bmap1->n_div + bmap2->n_div + 2 * n_out; - dim_map1 = isl_dim_map_alloc(bmap1->ctx, total); - dim_map2 = isl_dim_map_alloc(bmap2->ctx, total); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_param, pos); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_in, pos += nparam); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_in, pos); - isl_dim_map_div(dim_map1, bmap1, pos += n_in + n_out); - isl_dim_map_div(dim_map2, bmap2, pos += bmap1->n_div); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_out, pos += bmap2->n_div); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_out, pos += n_out); - - bmap = isl_basic_map_alloc_dim(isl_dim_copy(bmap1->dim), - bmap1->n_div + bmap2->n_div + 2 * n_out, - bmap1->n_eq + bmap2->n_eq + n_out, - bmap1->n_ineq + bmap2->n_ineq); - for (i = 0; i < n_out; ++i) { - int j = isl_basic_map_alloc_equality(bmap); - if (j < 0) - goto error; - isl_seq_clr(bmap->eq[j], 1+total); - isl_int_set_si(bmap->eq[j][1+nparam+n_in+i], -1); - isl_int_set_si(bmap->eq[j][1+pos+i], 1); - isl_int_set_si(bmap->eq[j][1+pos-n_out+i], 1); - } - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap1, dim_map1); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap2, dim_map2); - bmap = add_divs(bmap, 2 * n_out); - - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -/* Given two maps A -> f(A) and B -> g(B), construct a map - * A \cap B -> f(A) + f(B) - */ -struct isl_map *isl_map_sum(struct isl_map *map1, struct isl_map *map2) -{ - struct isl_map *result; - int i, j; - - if (!map1 || !map2) - goto error; - - isl_assert(map1->ctx, isl_dim_equal(map1->dim, map2->dim), goto error); - - result = isl_map_alloc_dim(isl_dim_copy(map1->dim), - map1->n * map2->n, 0); - if (!result) - goto error; - for (i = 0; i < map1->n; ++i) - for (j = 0; j < map2->n; ++j) { - struct isl_basic_map *part; - part = isl_basic_map_sum( - isl_basic_map_copy(map1->p[i]), - isl_basic_map_copy(map2->p[j])); - if (isl_basic_map_is_empty(part)) - isl_basic_map_free(part); - else - result = isl_map_add_basic_map(result, part); - if (!result) - goto error; - } - isl_map_free(map1); - isl_map_free(map2); - return result; -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -__isl_give isl_set *isl_set_sum(__isl_take isl_set *set1, - __isl_take isl_set *set2) -{ - return (isl_set *)isl_map_sum((isl_map *)set1, (isl_map *)set2); -} - -/* Given a basic map A -> f(A), construct A -> -f(A). - */ -struct isl_basic_map *isl_basic_map_neg(struct isl_basic_map *bmap) -{ - int i, j; - unsigned off, n; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - n = isl_basic_map_dim(bmap, isl_dim_out); - off = isl_basic_map_offset(bmap, isl_dim_out); - for (i = 0; i < bmap->n_eq; ++i) - for (j = 0; j < n; ++j) - isl_int_neg(bmap->eq[i][off+j], bmap->eq[i][off+j]); - for (i = 0; i < bmap->n_ineq; ++i) - for (j = 0; j < n; ++j) - isl_int_neg(bmap->ineq[i][off+j], bmap->ineq[i][off+j]); - for (i = 0; i < bmap->n_div; ++i) - for (j = 0; j < n; ++j) - isl_int_neg(bmap->div[i][1+off+j], bmap->div[i][1+off+j]); - return isl_basic_map_finalize(bmap); -} - -__isl_give isl_basic_set *isl_basic_set_neg(__isl_take isl_basic_set *bset) -{ - return isl_basic_map_neg(bset); -} - -/* Given a map A -> f(A), construct A -> -f(A). - */ -struct isl_map *isl_map_neg(struct isl_map *map) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_neg(map->p[i]); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_neg(__isl_take isl_set *set) -{ - return (isl_set *)isl_map_neg((isl_map *)set); -} - -/* Given a basic map A -> f(A) and an integer d, construct a basic map - * A -> floor(f(A)/d). - */ -struct isl_basic_map *isl_basic_map_floordiv(struct isl_basic_map *bmap, - isl_int d) -{ - unsigned n_in, n_out, nparam, total, pos; - struct isl_basic_map *result = NULL; - struct isl_dim_map *dim_map; - int i; - - if (!bmap) - return NULL; - - nparam = isl_basic_map_n_param(bmap); - n_in = isl_basic_map_n_in(bmap); - n_out = isl_basic_map_n_out(bmap); - - total = nparam + n_in + n_out + bmap->n_div + n_out; - dim_map = isl_dim_map_alloc(bmap->ctx, total); - isl_dim_map_dim(dim_map, bmap->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map, bmap->dim, isl_dim_in, pos += nparam); - isl_dim_map_div(dim_map, bmap, pos += n_in + n_out); - isl_dim_map_dim(dim_map, bmap->dim, isl_dim_out, pos += bmap->n_div); - - result = isl_basic_map_alloc_dim(isl_dim_copy(bmap->dim), - bmap->n_div + n_out, - bmap->n_eq, bmap->n_ineq + 2 * n_out); - result = isl_basic_map_add_constraints_dim_map(result, bmap, dim_map); - result = add_divs(result, n_out); - for (i = 0; i < n_out; ++i) { - int j; - j = isl_basic_map_alloc_inequality(result); - if (j < 0) - goto error; - isl_seq_clr(result->ineq[j], 1+total); - isl_int_neg(result->ineq[j][1+nparam+n_in+i], d); - isl_int_set_si(result->ineq[j][1+pos+i], 1); - j = isl_basic_map_alloc_inequality(result); - if (j < 0) - goto error; - isl_seq_clr(result->ineq[j], 1+total); - isl_int_set(result->ineq[j][1+nparam+n_in+i], d); - isl_int_set_si(result->ineq[j][1+pos+i], -1); - isl_int_sub_ui(result->ineq[j][0], d, 1); - } - - result = isl_basic_map_simplify(result); - return isl_basic_map_finalize(result); -error: - isl_basic_map_free(result); - return NULL; -} - -/* Given a map A -> f(A) and an integer d, construct a map - * A -> floor(f(A)/d). - */ -struct isl_map *isl_map_floordiv(struct isl_map *map, isl_int d) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - ISL_F_CLR(map, ISL_MAP_DISJOINT); - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_floordiv(map->p[i], d); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -static struct isl_basic_map *var_equal(struct isl_basic_map *bmap, unsigned pos) -{ - int i; - unsigned nparam; - unsigned n_in; - - i = isl_basic_map_alloc_equality(bmap); - if (i < 0) - goto error; - nparam = isl_basic_map_n_param(bmap); - n_in = isl_basic_map_n_in(bmap); - isl_seq_clr(bmap->eq[i], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->eq[i][1+nparam+pos], -1); - isl_int_set_si(bmap->eq[i][1+nparam+n_in+pos], 1); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Add a constraints to "bmap" expressing i_pos < o_pos - */ -static struct isl_basic_map *var_less(struct isl_basic_map *bmap, unsigned pos) -{ - int i; - unsigned nparam; - unsigned n_in; - - i = isl_basic_map_alloc_inequality(bmap); - if (i < 0) - goto error; - nparam = isl_basic_map_n_param(bmap); - n_in = isl_basic_map_n_in(bmap); - isl_seq_clr(bmap->ineq[i], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->ineq[i][0], -1); - isl_int_set_si(bmap->ineq[i][1+nparam+pos], -1); - isl_int_set_si(bmap->ineq[i][1+nparam+n_in+pos], 1); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Add a constraint to "bmap" expressing i_pos <= o_pos - */ -static __isl_give isl_basic_map *var_less_or_equal( - __isl_take isl_basic_map *bmap, unsigned pos) -{ - int i; - unsigned nparam; - unsigned n_in; - - i = isl_basic_map_alloc_inequality(bmap); - if (i < 0) - goto error; - nparam = isl_basic_map_n_param(bmap); - n_in = isl_basic_map_n_in(bmap); - isl_seq_clr(bmap->ineq[i], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->ineq[i][1+nparam+pos], -1); - isl_int_set_si(bmap->ineq[i][1+nparam+n_in+pos], 1); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Add a constraints to "bmap" expressing i_pos > o_pos - */ -static struct isl_basic_map *var_more(struct isl_basic_map *bmap, unsigned pos) -{ - int i; - unsigned nparam; - unsigned n_in; - - i = isl_basic_map_alloc_inequality(bmap); - if (i < 0) - goto error; - nparam = isl_basic_map_n_param(bmap); - n_in = isl_basic_map_n_in(bmap); - isl_seq_clr(bmap->ineq[i], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->ineq[i][0], -1); - isl_int_set_si(bmap->ineq[i][1+nparam+pos], 1); - isl_int_set_si(bmap->ineq[i][1+nparam+n_in+pos], -1); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Add a constraint to "bmap" expressing i_pos >= o_pos - */ -static __isl_give isl_basic_map *var_more_or_equal( - __isl_take isl_basic_map *bmap, unsigned pos) -{ - int i; - unsigned nparam; - unsigned n_in; - - i = isl_basic_map_alloc_inequality(bmap); - if (i < 0) - goto error; - nparam = isl_basic_map_n_param(bmap); - n_in = isl_basic_map_n_in(bmap); - isl_seq_clr(bmap->ineq[i], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->ineq[i][1+nparam+pos], 1); - isl_int_set_si(bmap->ineq[i][1+nparam+n_in+pos], -1); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_map *isl_basic_map_equal(struct isl_dim *dim, unsigned n_equal) -{ - int i; - struct isl_basic_map *bmap; - bmap = isl_basic_map_alloc_dim(dim, 0, n_equal, 0); - if (!bmap) - return NULL; - for (i = 0; i < n_equal && bmap; ++i) - bmap = var_equal(bmap, i); - return isl_basic_map_finalize(bmap); -} - -/* Return a relation on of dimension "dim" expressing i_[0..pos] << o_[0..pos] - */ -struct isl_basic_map *isl_basic_map_less_at(struct isl_dim *dim, unsigned pos) -{ - int i; - struct isl_basic_map *bmap; - bmap = isl_basic_map_alloc_dim(dim, 0, pos, 1); - if (!bmap) - return NULL; - for (i = 0; i < pos && bmap; ++i) - bmap = var_equal(bmap, i); - if (bmap) - bmap = var_less(bmap, pos); - return isl_basic_map_finalize(bmap); -} - -/* Return a relation on of dimension "dim" expressing i_[0..pos] <<= o_[0..pos] - */ -__isl_give isl_basic_map *isl_basic_map_less_or_equal_at( - __isl_take isl_dim *dim, unsigned pos) -{ - int i; - isl_basic_map *bmap; - - bmap = isl_basic_map_alloc_dim(dim, 0, pos, 1); - for (i = 0; i < pos; ++i) - bmap = var_equal(bmap, i); - bmap = var_less_or_equal(bmap, pos); - return isl_basic_map_finalize(bmap); -} - -/* Return a relation on pairs of sets of dimension "dim" expressing i_pos > o_pos - */ -struct isl_basic_map *isl_basic_map_more_at(struct isl_dim *dim, unsigned pos) -{ - int i; - struct isl_basic_map *bmap; - bmap = isl_basic_map_alloc_dim(dim, 0, pos, 1); - if (!bmap) - return NULL; - for (i = 0; i < pos && bmap; ++i) - bmap = var_equal(bmap, i); - if (bmap) - bmap = var_more(bmap, pos); - return isl_basic_map_finalize(bmap); -} - -/* Return a relation on of dimension "dim" expressing i_[0..pos] >>= o_[0..pos] - */ -__isl_give isl_basic_map *isl_basic_map_more_or_equal_at( - __isl_take isl_dim *dim, unsigned pos) -{ - int i; - isl_basic_map *bmap; - - bmap = isl_basic_map_alloc_dim(dim, 0, pos, 1); - for (i = 0; i < pos; ++i) - bmap = var_equal(bmap, i); - bmap = var_more_or_equal(bmap, pos); - return isl_basic_map_finalize(bmap); -} - -static __isl_give isl_map *map_lex_lte_first(__isl_take isl_dim *dims, - unsigned n, int equal) -{ - struct isl_map *map; - int i; - - if (n == 0 && equal) - return isl_map_universe(dims); - - map = isl_map_alloc_dim(isl_dim_copy(dims), n, ISL_MAP_DISJOINT); - - for (i = 0; i + 1 < n; ++i) - map = isl_map_add_basic_map(map, - isl_basic_map_less_at(isl_dim_copy(dims), i)); - if (n > 0) { - if (equal) - map = isl_map_add_basic_map(map, - isl_basic_map_less_or_equal_at(dims, n - 1)); - else - map = isl_map_add_basic_map(map, - isl_basic_map_less_at(dims, n - 1)); - } else - isl_dim_free(dims); - - return map; -} - -static __isl_give isl_map *map_lex_lte(__isl_take isl_dim *dims, int equal) -{ - if (!dims) - return NULL; - return map_lex_lte_first(dims, dims->n_out, equal); -} - -__isl_give isl_map *isl_map_lex_lt_first(__isl_take isl_dim *dim, unsigned n) -{ - return map_lex_lte_first(dim, n, 0); -} - -__isl_give isl_map *isl_map_lex_le_first(__isl_take isl_dim *dim, unsigned n) -{ - return map_lex_lte_first(dim, n, 1); -} - -__isl_give isl_map *isl_map_lex_lt(__isl_take isl_dim *set_dim) -{ - return map_lex_lte(isl_dim_map_from_set(set_dim), 0); -} - -__isl_give isl_map *isl_map_lex_le(__isl_take isl_dim *set_dim) -{ - return map_lex_lte(isl_dim_map_from_set(set_dim), 1); -} - -static __isl_give isl_map *map_lex_gte_first(__isl_take isl_dim *dims, - unsigned n, int equal) -{ - struct isl_map *map; - int i; - - if (n == 0 && equal) - return isl_map_universe(dims); - - map = isl_map_alloc_dim(isl_dim_copy(dims), n, ISL_MAP_DISJOINT); - - for (i = 0; i + 1 < n; ++i) - map = isl_map_add_basic_map(map, - isl_basic_map_more_at(isl_dim_copy(dims), i)); - if (n > 0) { - if (equal) - map = isl_map_add_basic_map(map, - isl_basic_map_more_or_equal_at(dims, n - 1)); - else - map = isl_map_add_basic_map(map, - isl_basic_map_more_at(dims, n - 1)); - } else - isl_dim_free(dims); - - return map; -} - -static __isl_give isl_map *map_lex_gte(__isl_take isl_dim *dims, int equal) -{ - if (!dims) - return NULL; - return map_lex_gte_first(dims, dims->n_out, equal); -} - -__isl_give isl_map *isl_map_lex_gt_first(__isl_take isl_dim *dim, unsigned n) -{ - return map_lex_gte_first(dim, n, 0); -} - -__isl_give isl_map *isl_map_lex_ge_first(__isl_take isl_dim *dim, unsigned n) -{ - return map_lex_gte_first(dim, n, 1); -} - -__isl_give isl_map *isl_map_lex_gt(__isl_take isl_dim *set_dim) -{ - return map_lex_gte(isl_dim_map_from_set(set_dim), 0); -} - -__isl_give isl_map *isl_map_lex_ge(__isl_take isl_dim *set_dim) -{ - return map_lex_gte(isl_dim_map_from_set(set_dim), 1); -} - -__isl_give isl_map *isl_set_lex_le_set(__isl_take isl_set *set1, - __isl_take isl_set *set2) -{ - isl_map *map; - map = isl_map_lex_le(isl_set_get_dim(set1)); - map = isl_map_intersect_domain(map, set1); - map = isl_map_intersect_range(map, set2); - return map; -} - -__isl_give isl_map *isl_set_lex_lt_set(__isl_take isl_set *set1, - __isl_take isl_set *set2) -{ - isl_map *map; - map = isl_map_lex_lt(isl_set_get_dim(set1)); - map = isl_map_intersect_domain(map, set1); - map = isl_map_intersect_range(map, set2); - return map; -} - -__isl_give isl_map *isl_set_lex_ge_set(__isl_take isl_set *set1, - __isl_take isl_set *set2) -{ - isl_map *map; - map = isl_map_lex_ge(isl_set_get_dim(set1)); - map = isl_map_intersect_domain(map, set1); - map = isl_map_intersect_range(map, set2); - return map; -} - -__isl_give isl_map *isl_set_lex_gt_set(__isl_take isl_set *set1, - __isl_take isl_set *set2) -{ - isl_map *map; - map = isl_map_lex_gt(isl_set_get_dim(set1)); - map = isl_map_intersect_domain(map, set1); - map = isl_map_intersect_range(map, set2); - return map; -} - -__isl_give isl_map *isl_map_lex_le_map(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - isl_map *map; - map = isl_map_lex_le(isl_dim_range(isl_map_get_dim(map1))); - map = isl_map_apply_domain(map, isl_map_reverse(map1)); - map = isl_map_apply_range(map, isl_map_reverse(map2)); - return map; -} - -__isl_give isl_map *isl_map_lex_lt_map(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - isl_map *map; - map = isl_map_lex_lt(isl_dim_range(isl_map_get_dim(map1))); - map = isl_map_apply_domain(map, isl_map_reverse(map1)); - map = isl_map_apply_range(map, isl_map_reverse(map2)); - return map; -} - -__isl_give isl_map *isl_map_lex_ge_map(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - isl_map *map; - map = isl_map_lex_ge(isl_dim_range(isl_map_get_dim(map1))); - map = isl_map_apply_domain(map, isl_map_reverse(map1)); - map = isl_map_apply_range(map, isl_map_reverse(map2)); - return map; -} - -__isl_give isl_map *isl_map_lex_gt_map(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - isl_map *map; - map = isl_map_lex_gt(isl_dim_range(isl_map_get_dim(map1))); - map = isl_map_apply_domain(map, isl_map_reverse(map1)); - map = isl_map_apply_range(map, isl_map_reverse(map2)); - return map; -} - -struct isl_basic_map *isl_basic_map_from_basic_set( - struct isl_basic_set *bset, struct isl_dim *dim) -{ - struct isl_basic_map *bmap; - - bset = isl_basic_set_cow(bset); - if (!bset || !dim) - goto error; - - isl_assert(bset->ctx, isl_dim_compatible(bset->dim, dim), goto error); - isl_dim_free(bset->dim); - bmap = (struct isl_basic_map *) bset; - bmap->dim = dim; - return isl_basic_map_finalize(bmap); -error: - isl_basic_set_free(bset); - isl_dim_free(dim); - return NULL; -} - -struct isl_basic_set *isl_basic_set_from_basic_map(struct isl_basic_map *bmap) -{ - if (!bmap) - goto error; - if (bmap->dim->n_in == 0) - return (struct isl_basic_set *)bmap; - bmap = isl_basic_map_cow(bmap); - if (!bmap) - goto error; - bmap->dim = isl_dim_as_set_dim(bmap->dim); - if (!bmap->dim) - goto error; - bmap = isl_basic_map_finalize(bmap); - return (struct isl_basic_set *)bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* For a div d = floor(f/m), add the constraints - * - * f - m d >= 0 - * -(f-(n-1)) + m d >= 0 - * - * Note that the second constraint is the negation of - * - * f - m d >= n - */ -int isl_basic_map_add_div_constraints_var(__isl_keep isl_basic_map *bmap, - unsigned pos, isl_int *div) -{ - int i, j; - unsigned total = isl_basic_map_total_dim(bmap); - - i = isl_basic_map_alloc_inequality(bmap); - if (i < 0) - return -1; - isl_seq_cpy(bmap->ineq[i], div + 1, 1 + total); - isl_int_neg(bmap->ineq[i][1 + pos], div[0]); - - j = isl_basic_map_alloc_inequality(bmap); - if (j < 0) - return -1; - isl_seq_neg(bmap->ineq[j], bmap->ineq[i], 1 + total); - isl_int_add(bmap->ineq[j][0], bmap->ineq[j][0], bmap->ineq[j][1 + pos]); - isl_int_sub_ui(bmap->ineq[j][0], bmap->ineq[j][0], 1); - return j; -} - -int isl_basic_set_add_div_constraints_var(__isl_keep isl_basic_set *bset, - unsigned pos, isl_int *div) -{ - return isl_basic_map_add_div_constraints_var((isl_basic_map *)bset, - pos, div); -} - -int isl_basic_map_add_div_constraints(struct isl_basic_map *bmap, unsigned div) -{ - unsigned total = isl_basic_map_total_dim(bmap); - unsigned div_pos = total - bmap->n_div + div; - - return isl_basic_map_add_div_constraints_var(bmap, div_pos, - bmap->div[div]); -} - -struct isl_basic_set *isl_basic_map_underlying_set( - struct isl_basic_map *bmap) -{ - if (!bmap) - goto error; - if (bmap->dim->nparam == 0 && bmap->dim->n_in == 0 && - bmap->n_div == 0 && - !isl_dim_is_named_or_nested(bmap->dim, isl_dim_in) && - !isl_dim_is_named_or_nested(bmap->dim, isl_dim_out)) - return (struct isl_basic_set *)bmap; - bmap = isl_basic_map_cow(bmap); - if (!bmap) - goto error; - bmap->dim = isl_dim_underlying(bmap->dim, bmap->n_div); - if (!bmap->dim) - goto error; - bmap->extra -= bmap->n_div; - bmap->n_div = 0; - bmap = isl_basic_map_finalize(bmap); - return (struct isl_basic_set *)bmap; -error: - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_underlying_set( - __isl_take isl_basic_set *bset) -{ - return isl_basic_map_underlying_set((isl_basic_map *)bset); -} - -struct isl_basic_map *isl_basic_map_overlying_set( - struct isl_basic_set *bset, struct isl_basic_map *like) -{ - struct isl_basic_map *bmap; - struct isl_ctx *ctx; - unsigned total; - int i; - - if (!bset || !like) - goto error; - ctx = bset->ctx; - isl_assert(ctx, bset->n_div == 0, goto error); - isl_assert(ctx, isl_basic_set_n_param(bset) == 0, goto error); - isl_assert(ctx, bset->dim->n_out == isl_basic_map_total_dim(like), - goto error); - if (isl_dim_equal(bset->dim, like->dim) && like->n_div == 0) { - isl_basic_map_free(like); - return (struct isl_basic_map *)bset; - } - bset = isl_basic_set_cow(bset); - if (!bset) - goto error; - total = bset->dim->n_out + bset->extra; - bmap = (struct isl_basic_map *)bset; - isl_dim_free(bmap->dim); - bmap->dim = isl_dim_copy(like->dim); - if (!bmap->dim) - goto error; - bmap->n_div = like->n_div; - bmap->extra += like->n_div; - if (bmap->extra) { - unsigned ltotal; - isl_int **div; - ltotal = total - bmap->extra + like->extra; - if (ltotal > total) - ltotal = total; - bmap->block2 = isl_blk_extend(ctx, bmap->block2, - bmap->extra * (1 + 1 + total)); - if (isl_blk_is_error(bmap->block2)) - goto error; - div = isl_realloc_array(ctx, bmap->div, isl_int *, bmap->extra); - if (!div) - goto error; - bmap->div = div; - for (i = 0; i < bmap->extra; ++i) - bmap->div[i] = bmap->block2.data + i * (1 + 1 + total); - for (i = 0; i < like->n_div; ++i) { - isl_seq_cpy(bmap->div[i], like->div[i], 1 + 1 + ltotal); - isl_seq_clr(bmap->div[i]+1+1+ltotal, total - ltotal); - } - bmap = isl_basic_map_extend_constraints(bmap, - 0, 2 * like->n_div); - for (i = 0; i < like->n_div; ++i) { - if (isl_int_is_zero(bmap->div[i][0])) - continue; - if (isl_basic_map_add_div_constraints(bmap, i) < 0) - goto error; - } - } - isl_basic_map_free(like); - bmap = isl_basic_map_simplify(bmap); - bmap = isl_basic_map_finalize(bmap); - return bmap; -error: - isl_basic_map_free(like); - isl_basic_set_free(bset); - return NULL; -} - -struct isl_basic_set *isl_basic_set_from_underlying_set( - struct isl_basic_set *bset, struct isl_basic_set *like) -{ - return (struct isl_basic_set *) - isl_basic_map_overlying_set(bset, (struct isl_basic_map *)like); -} - -struct isl_set *isl_set_from_underlying_set( - struct isl_set *set, struct isl_basic_set *like) -{ - int i; - - if (!set || !like) - goto error; - isl_assert(set->ctx, set->dim->n_out == isl_basic_set_total_dim(like), - goto error); - if (isl_dim_equal(set->dim, like->dim) && like->n_div == 0) { - isl_basic_set_free(like); - return set; - } - set = isl_set_cow(set); - if (!set) - goto error; - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_from_underlying_set(set->p[i], - isl_basic_set_copy(like)); - if (!set->p[i]) - goto error; - } - isl_dim_free(set->dim); - set->dim = isl_dim_copy(like->dim); - if (!set->dim) - goto error; - isl_basic_set_free(like); - return set; -error: - isl_basic_set_free(like); - isl_set_free(set); - return NULL; -} - -struct isl_set *isl_map_underlying_set(struct isl_map *map) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - map->dim = isl_dim_cow(map->dim); - if (!map->dim) - goto error; - - for (i = 1; i < map->n; ++i) - isl_assert(map->ctx, map->p[0]->n_div == map->p[i]->n_div, - goto error); - for (i = 0; i < map->n; ++i) { - map->p[i] = (struct isl_basic_map *) - isl_basic_map_underlying_set(map->p[i]); - if (!map->p[i]) - goto error; - } - if (map->n == 0) - map->dim = isl_dim_underlying(map->dim, 0); - else { - isl_dim_free(map->dim); - map->dim = isl_dim_copy(map->p[0]->dim); - } - if (!map->dim) - goto error; - return (struct isl_set *)map; -error: - isl_map_free(map); - return NULL; -} - -struct isl_set *isl_set_to_underlying_set(struct isl_set *set) -{ - return (struct isl_set *)isl_map_underlying_set((struct isl_map *)set); -} - -__isl_give isl_basic_map *isl_basic_map_reset_dim( - __isl_take isl_basic_map *bmap, __isl_take isl_dim *dim) -{ - bmap = isl_basic_map_cow(bmap); - if (!bmap || !dim) - goto error; - - isl_dim_free(bmap->dim); - bmap->dim = dim; - - bmap = isl_basic_map_finalize(bmap); - - return bmap; -error: - isl_basic_map_free(bmap); - isl_dim_free(dim); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_reset_dim( - __isl_take isl_basic_set *bset, __isl_take isl_dim *dim) -{ - return (isl_basic_set *)isl_basic_map_reset_dim((isl_basic_map *)bset, - dim); -} - -__isl_give isl_map *isl_map_reset_dim(__isl_take isl_map *map, - __isl_take isl_dim *dim) -{ - int i; - - map = isl_map_cow(map); - if (!map || !dim) - goto error; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_reset_dim(map->p[i], - isl_dim_copy(dim)); - if (!map->p[i]) - goto error; - } - isl_dim_free(map->dim); - map->dim = dim; - - return map; -error: - isl_map_free(map); - isl_dim_free(dim); - return NULL; -} - -__isl_give isl_set *isl_set_reset_dim(__isl_take isl_set *set, - __isl_take isl_dim *dim) -{ - return (struct isl_set *) isl_map_reset_dim((struct isl_map *)set, dim); -} - -struct isl_basic_set *isl_basic_map_domain(struct isl_basic_map *bmap) -{ - isl_dim *dim; - struct isl_basic_set *domain; - unsigned n_in; - unsigned n_out; - - if (!bmap) - return NULL; - dim = isl_dim_domain(isl_basic_map_get_dim(bmap)); - - n_in = isl_basic_map_n_in(bmap); - n_out = isl_basic_map_n_out(bmap); - domain = isl_basic_set_from_basic_map(bmap); - domain = isl_basic_set_project_out(domain, isl_dim_set, n_in, n_out); - - domain = isl_basic_set_reset_dim(domain, dim); - - return domain; -} - -int isl_basic_map_may_be_set(__isl_keep isl_basic_map *bmap) -{ - if (!bmap) - return -1; - return isl_dim_may_be_set(bmap->dim); -} - -struct isl_basic_set *isl_basic_map_range(struct isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - if (isl_basic_map_may_be_set(bmap)) - return bmap; - return isl_basic_map_domain(isl_basic_map_reverse(bmap)); -} - -__isl_give isl_basic_map *isl_basic_map_domain_map( - __isl_take isl_basic_map *bmap) -{ - int i, k; - isl_dim *dim; - isl_basic_map *domain; - int nparam, n_in, n_out; - unsigned total; - - nparam = isl_basic_map_dim(bmap, isl_dim_param); - n_in = isl_basic_map_dim(bmap, isl_dim_in); - n_out = isl_basic_map_dim(bmap, isl_dim_out); - - dim = isl_dim_from_range(isl_dim_domain(isl_basic_map_get_dim(bmap))); - domain = isl_basic_map_universe(dim); - - bmap = isl_basic_map_from_domain(isl_basic_map_wrap(bmap)); - bmap = isl_basic_map_apply_range(bmap, domain); - bmap = isl_basic_map_extend_constraints(bmap, n_in, 0); - - total = isl_basic_map_total_dim(bmap); - - for (i = 0; i < n_in; ++i) { - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->eq[k], 1 + total); - isl_int_set_si(bmap->eq[k][1 + nparam + i], -1); - isl_int_set_si(bmap->eq[k][1 + nparam + n_in + n_out + i], 1); - } - - bmap = isl_basic_map_gauss(bmap, NULL); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_range_map( - __isl_take isl_basic_map *bmap) -{ - int i, k; - isl_dim *dim; - isl_basic_map *range; - int nparam, n_in, n_out; - unsigned total; - - nparam = isl_basic_map_dim(bmap, isl_dim_param); - n_in = isl_basic_map_dim(bmap, isl_dim_in); - n_out = isl_basic_map_dim(bmap, isl_dim_out); - - dim = isl_dim_from_range(isl_dim_range(isl_basic_map_get_dim(bmap))); - range = isl_basic_map_universe(dim); - - bmap = isl_basic_map_from_domain(isl_basic_map_wrap(bmap)); - bmap = isl_basic_map_apply_range(bmap, range); - bmap = isl_basic_map_extend_constraints(bmap, n_out, 0); - - total = isl_basic_map_total_dim(bmap); - - for (i = 0; i < n_out; ++i) { - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->eq[k], 1 + total); - isl_int_set_si(bmap->eq[k][1 + nparam + n_in + i], -1); - isl_int_set_si(bmap->eq[k][1 + nparam + n_in + n_out + i], 1); - } - - bmap = isl_basic_map_gauss(bmap, NULL); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -int isl_map_may_be_set(__isl_keep isl_map *map) -{ - if (!map) - return -1; - return isl_dim_may_be_set(map->dim); -} - -struct isl_set *isl_map_range(struct isl_map *map) -{ - int i; - struct isl_set *set; - - if (!map) - goto error; - if (isl_map_may_be_set(map)) - return (isl_set *)map; - - map = isl_map_cow(map); - if (!map) - goto error; - - set = (struct isl_set *) map; - set->dim = isl_dim_drop_inputs(set->dim, 0, set->dim->n_in); - if (!set->dim) - goto error; - for (i = 0; i < map->n; ++i) { - set->p[i] = isl_basic_map_range(map->p[i]); - if (!set->p[i]) - goto error; - } - ISL_F_CLR(set, ISL_MAP_DISJOINT); - ISL_F_CLR(set, ISL_SET_NORMALIZED); - return set; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_map *isl_map_domain_map(__isl_take isl_map *map) -{ - int i; - isl_dim *domain_dim; - - map = isl_map_cow(map); - if (!map) - return NULL; - - domain_dim = isl_dim_from_range(isl_dim_domain(isl_map_get_dim(map))); - map->dim = isl_dim_from_domain(isl_dim_wrap(map->dim)); - map->dim = isl_dim_join(map->dim, domain_dim); - if (!map->dim) - goto error; - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_domain_map(map->p[i]); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_DISJOINT); - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_map *isl_map_range_map(__isl_take isl_map *map) -{ - int i; - isl_dim *range_dim; - - map = isl_map_cow(map); - if (!map) - return NULL; - - range_dim = isl_dim_range(isl_map_get_dim(map)); - map->dim = isl_dim_from_domain(isl_dim_wrap(map->dim)); - map->dim = isl_dim_join(map->dim, range_dim); - if (!map->dim) - goto error; - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_range_map(map->p[i]); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_DISJOINT); - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -struct isl_map *isl_map_from_set(struct isl_set *set, struct isl_dim *dim) -{ - int i; - struct isl_map *map = NULL; - - set = isl_set_cow(set); - if (!set || !dim) - goto error; - isl_assert(set->ctx, isl_dim_compatible(set->dim, dim), goto error); - map = (struct isl_map *)set; - for (i = 0; i < set->n; ++i) { - map->p[i] = isl_basic_map_from_basic_set( - set->p[i], isl_dim_copy(dim)); - if (!map->p[i]) - goto error; - } - isl_dim_free(map->dim); - map->dim = dim; - return map; -error: - isl_dim_free(dim); - isl_set_free(set); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_from_domain( - __isl_take isl_basic_set *bset) -{ - return isl_basic_map_reverse(isl_basic_map_from_range(bset)); -} - -__isl_give isl_basic_map *isl_basic_map_from_range( - __isl_take isl_basic_set *bset) -{ - return (isl_basic_map *)bset; -} - -struct isl_map *isl_map_from_range(struct isl_set *set) -{ - return (struct isl_map *)set; -} - -__isl_give isl_map *isl_map_from_domain(__isl_take isl_set *set) -{ - return isl_map_reverse(isl_map_from_range(set)); -} - -__isl_give isl_basic_map *isl_basic_map_from_domain_and_range( - __isl_take isl_basic_set *domain, __isl_take isl_basic_set *range) -{ - return isl_basic_map_apply_range(isl_basic_map_from_domain(domain), - isl_basic_map_from_range(range)); -} - -__isl_give isl_map *isl_map_from_domain_and_range(__isl_take isl_set *domain, - __isl_take isl_set *range) -{ - return isl_map_apply_range(isl_map_from_domain(domain), - isl_map_from_range(range)); -} - -struct isl_set *isl_set_from_map(struct isl_map *map) -{ - int i; - struct isl_set *set = NULL; - - if (!map) - return NULL; - map = isl_map_cow(map); - if (!map) - return NULL; - map->dim = isl_dim_as_set_dim(map->dim); - if (!map->dim) - goto error; - set = (struct isl_set *)map; - for (i = 0; i < map->n; ++i) { - set->p[i] = isl_basic_set_from_basic_map(map->p[i]); - if (!set->p[i]) - goto error; - } - return set; -error: - isl_map_free(map); - return NULL; -} - -struct isl_map *isl_map_alloc_dim(struct isl_dim *dim, int n, unsigned flags) -{ - struct isl_map *map; - - if (!dim) - return NULL; - isl_assert(dim->ctx, n >= 0, return NULL); - map = isl_alloc(dim->ctx, struct isl_map, - sizeof(struct isl_map) + - (n - 1) * sizeof(struct isl_basic_map *)); - if (!map) - goto error; - - map->ctx = dim->ctx; - isl_ctx_ref(map->ctx); - map->ref = 1; - map->size = n; - map->n = 0; - map->dim = dim; - map->flags = flags; - return map; -error: - isl_dim_free(dim); - return NULL; -} - -struct isl_map *isl_map_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned in, unsigned out, int n, - unsigned flags) -{ - struct isl_map *map; - struct isl_dim *dims; - - dims = isl_dim_alloc(ctx, nparam, in, out); - if (!dims) - return NULL; - - map = isl_map_alloc_dim(dims, n, flags); - return map; -} - -struct isl_basic_map *isl_basic_map_empty(struct isl_dim *dim) -{ - struct isl_basic_map *bmap; - bmap = isl_basic_map_alloc_dim(dim, 0, 1, 0); - bmap = isl_basic_map_set_to_empty(bmap); - return bmap; -} - -struct isl_basic_set *isl_basic_set_empty(struct isl_dim *dim) -{ - struct isl_basic_set *bset; - bset = isl_basic_set_alloc_dim(dim, 0, 1, 0); - bset = isl_basic_set_set_to_empty(bset); - return bset; -} - -struct isl_basic_map *isl_basic_map_empty_like(struct isl_basic_map *model) -{ - struct isl_basic_map *bmap; - if (!model) - return NULL; - bmap = isl_basic_map_alloc_dim(isl_dim_copy(model->dim), 0, 1, 0); - bmap = isl_basic_map_set_to_empty(bmap); - return bmap; -} - -struct isl_basic_map *isl_basic_map_empty_like_map(struct isl_map *model) -{ - struct isl_basic_map *bmap; - if (!model) - return NULL; - bmap = isl_basic_map_alloc_dim(isl_dim_copy(model->dim), 0, 1, 0); - bmap = isl_basic_map_set_to_empty(bmap); - return bmap; -} - -struct isl_basic_set *isl_basic_set_empty_like(struct isl_basic_set *model) -{ - struct isl_basic_set *bset; - if (!model) - return NULL; - bset = isl_basic_set_alloc_dim(isl_dim_copy(model->dim), 0, 1, 0); - bset = isl_basic_set_set_to_empty(bset); - return bset; -} - -struct isl_basic_map *isl_basic_map_universe(struct isl_dim *dim) -{ - struct isl_basic_map *bmap; - bmap = isl_basic_map_alloc_dim(dim, 0, 0, 0); - bmap = isl_basic_map_finalize(bmap); - return bmap; -} - -struct isl_basic_set *isl_basic_set_universe(struct isl_dim *dim) -{ - struct isl_basic_set *bset; - bset = isl_basic_set_alloc_dim(dim, 0, 0, 0); - bset = isl_basic_set_finalize(bset); - return bset; -} - -__isl_give isl_basic_map *isl_basic_map_nat_universe(__isl_take isl_dim *dim) -{ - int i; - unsigned total = isl_dim_total(dim); - isl_basic_map *bmap; - - bmap= isl_basic_map_alloc_dim(dim, 0, 0, total); - for (i = 0; i < total; ++i) { - int k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->ineq[k], 1 + total); - isl_int_set_si(bmap->ineq[k][1 + i], 1); - } - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_nat_universe(__isl_take isl_dim *dim) -{ - return isl_basic_map_nat_universe(dim); -} - -__isl_give isl_map *isl_map_nat_universe(__isl_take isl_dim *dim) -{ - return isl_map_from_basic_map(isl_basic_map_nat_universe(dim)); -} - -__isl_give isl_set *isl_set_nat_universe(__isl_take isl_dim *dim) -{ - return isl_map_nat_universe(dim); -} - -__isl_give isl_basic_map *isl_basic_map_universe_like( - __isl_keep isl_basic_map *model) -{ - if (!model) - return NULL; - return isl_basic_map_alloc_dim(isl_dim_copy(model->dim), 0, 0, 0); -} - -struct isl_basic_set *isl_basic_set_universe_like(struct isl_basic_set *model) -{ - if (!model) - return NULL; - return isl_basic_set_alloc_dim(isl_dim_copy(model->dim), 0, 0, 0); -} - -__isl_give isl_basic_set *isl_basic_set_universe_like_set( - __isl_keep isl_set *model) -{ - if (!model) - return NULL; - return isl_basic_set_alloc_dim(isl_dim_copy(model->dim), 0, 0, 0); -} - -struct isl_map *isl_map_empty(struct isl_dim *dim) -{ - return isl_map_alloc_dim(dim, 0, ISL_MAP_DISJOINT); -} - -struct isl_map *isl_map_empty_like(struct isl_map *model) -{ - if (!model) - return NULL; - return isl_map_alloc_dim(isl_dim_copy(model->dim), 0, ISL_MAP_DISJOINT); -} - -struct isl_map *isl_map_empty_like_basic_map(struct isl_basic_map *model) -{ - if (!model) - return NULL; - return isl_map_alloc_dim(isl_dim_copy(model->dim), 0, ISL_MAP_DISJOINT); -} - -struct isl_set *isl_set_empty(struct isl_dim *dim) -{ - return isl_set_alloc_dim(dim, 0, ISL_MAP_DISJOINT); -} - -struct isl_set *isl_set_empty_like(struct isl_set *model) -{ - if (!model) - return NULL; - return isl_set_empty(isl_dim_copy(model->dim)); -} - -struct isl_map *isl_map_universe(struct isl_dim *dim) -{ - struct isl_map *map; - if (!dim) - return NULL; - map = isl_map_alloc_dim(isl_dim_copy(dim), 1, ISL_MAP_DISJOINT); - map = isl_map_add_basic_map(map, isl_basic_map_universe(dim)); - return map; -} - -struct isl_set *isl_set_universe(struct isl_dim *dim) -{ - struct isl_set *set; - if (!dim) - return NULL; - set = isl_set_alloc_dim(isl_dim_copy(dim), 1, ISL_MAP_DISJOINT); - set = isl_set_add_basic_set(set, isl_basic_set_universe(dim)); - return set; -} - -__isl_give isl_set *isl_set_universe_like(__isl_keep isl_set *model) -{ - if (!model) - return NULL; - return isl_set_universe(isl_dim_copy(model->dim)); -} - -struct isl_map *isl_map_dup(struct isl_map *map) -{ - int i; - struct isl_map *dup; - - if (!map) - return NULL; - dup = isl_map_alloc_dim(isl_dim_copy(map->dim), map->n, map->flags); - for (i = 0; i < map->n; ++i) - dup = isl_map_add_basic_map(dup, isl_basic_map_copy(map->p[i])); - return dup; -} - -__isl_give isl_map *isl_map_add_basic_map(__isl_take isl_map *map, - __isl_take isl_basic_map *bmap) -{ - if (!bmap || !map) - goto error; - if (isl_basic_map_plain_is_empty(bmap)) { - isl_basic_map_free(bmap); - return map; - } - isl_assert(map->ctx, isl_dim_equal(map->dim, bmap->dim), goto error); - isl_assert(map->ctx, map->n < map->size, goto error); - map->p[map->n] = bmap; - map->n++; - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - if (map) - isl_map_free(map); - if (bmap) - isl_basic_map_free(bmap); - return NULL; -} - -void isl_map_free(struct isl_map *map) -{ - int i; - - if (!map) - return; - - if (--map->ref > 0) - return; - - isl_ctx_deref(map->ctx); - for (i = 0; i < map->n; ++i) - isl_basic_map_free(map->p[i]); - isl_dim_free(map->dim); - free(map); -} - -struct isl_map *isl_map_extend(struct isl_map *base, - unsigned nparam, unsigned n_in, unsigned n_out) -{ - int i; - - base = isl_map_cow(base); - if (!base) - return NULL; - - base->dim = isl_dim_extend(base->dim, nparam, n_in, n_out); - if (!base->dim) - goto error; - for (i = 0; i < base->n; ++i) { - base->p[i] = isl_basic_map_extend_dim(base->p[i], - isl_dim_copy(base->dim), 0, 0, 0); - if (!base->p[i]) - goto error; - } - return base; -error: - isl_map_free(base); - return NULL; -} - -struct isl_set *isl_set_extend(struct isl_set *base, - unsigned nparam, unsigned dim) -{ - return (struct isl_set *)isl_map_extend((struct isl_map *)base, - nparam, 0, dim); -} - -static struct isl_basic_map *isl_basic_map_fix_pos_si( - struct isl_basic_map *bmap, unsigned pos, int value) -{ - int j; - - bmap = isl_basic_map_cow(bmap); - bmap = isl_basic_map_extend_constraints(bmap, 1, 0); - j = isl_basic_map_alloc_equality(bmap); - if (j < 0) - goto error; - isl_seq_clr(bmap->eq[j] + 1, isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->eq[j][pos], -1); - isl_int_set_si(bmap->eq[j][0], value); - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -static __isl_give isl_basic_map *isl_basic_map_fix_pos( - __isl_take isl_basic_map *bmap, unsigned pos, isl_int value) -{ - int j; - - bmap = isl_basic_map_cow(bmap); - bmap = isl_basic_map_extend_constraints(bmap, 1, 0); - j = isl_basic_map_alloc_equality(bmap); - if (j < 0) - goto error; - isl_seq_clr(bmap->eq[j] + 1, isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->eq[j][pos], -1); - isl_int_set(bmap->eq[j][0], value); - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_map *isl_basic_map_fix_si(struct isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, int value) -{ - if (!bmap) - return NULL; - isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), goto error); - return isl_basic_map_fix_pos_si(bmap, - isl_basic_map_offset(bmap, type) + pos, value); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_fix(__isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, isl_int value) -{ - if (!bmap) - return NULL; - isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), goto error); - return isl_basic_map_fix_pos(bmap, - isl_basic_map_offset(bmap, type) + pos, value); -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_fix_si(struct isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, int value) -{ - return (struct isl_basic_set *) - isl_basic_map_fix_si((struct isl_basic_map *)bset, - type, pos, value); -} - -__isl_give isl_basic_set *isl_basic_set_fix(__isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, isl_int value) -{ - return (struct isl_basic_set *) - isl_basic_map_fix((struct isl_basic_map *)bset, - type, pos, value); -} - -struct isl_basic_map *isl_basic_map_fix_input_si(struct isl_basic_map *bmap, - unsigned input, int value) -{ - return isl_basic_map_fix_si(bmap, isl_dim_in, input, value); -} - -struct isl_basic_set *isl_basic_set_fix_dim_si(struct isl_basic_set *bset, - unsigned dim, int value) -{ - return (struct isl_basic_set *) - isl_basic_map_fix_si((struct isl_basic_map *)bset, - isl_dim_set, dim, value); -} - -struct isl_map *isl_map_fix_si(struct isl_map *map, - enum isl_dim_type type, unsigned pos, int value) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - isl_assert(map->ctx, pos < isl_map_dim(map, type), goto error); - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_fix_si(map->p[i], type, pos, value); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_fix_si(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, int value) -{ - return (struct isl_set *) - isl_map_fix_si((struct isl_map *)set, type, pos, value); -} - -__isl_give isl_map *isl_map_fix(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, isl_int value) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - isl_assert(map->ctx, pos < isl_map_dim(map, type), goto error); - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_fix(map->p[i], type, pos, value); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_fix(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, isl_int value) -{ - return (struct isl_set *)isl_map_fix((isl_map *)set, type, pos, value); -} - -struct isl_map *isl_map_fix_input_si(struct isl_map *map, - unsigned input, int value) -{ - return isl_map_fix_si(map, isl_dim_in, input, value); -} - -struct isl_set *isl_set_fix_dim_si(struct isl_set *set, unsigned dim, int value) -{ - return (struct isl_set *) - isl_map_fix_si((struct isl_map *)set, isl_dim_set, dim, value); -} - -__isl_give isl_basic_map *isl_basic_map_lower_bound_si( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, int value) -{ - int j; - - if (!bmap) - return NULL; - isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), goto error); - pos += isl_basic_map_offset(bmap, type); - bmap = isl_basic_map_cow(bmap); - bmap = isl_basic_map_extend_constraints(bmap, 0, 1); - j = isl_basic_map_alloc_inequality(bmap); - if (j < 0) - goto error; - isl_seq_clr(bmap->ineq[j], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->ineq[j][pos], 1); - isl_int_set_si(bmap->ineq[j][0], -value); - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_lower_bound_dim(struct isl_basic_set *bset, - unsigned dim, isl_int value) -{ - int j; - - bset = isl_basic_set_cow(bset); - bset = isl_basic_set_extend_constraints(bset, 0, 1); - j = isl_basic_set_alloc_inequality(bset); - if (j < 0) - goto error; - isl_seq_clr(bset->ineq[j], 1 + isl_basic_set_total_dim(bset)); - isl_int_set_si(bset->ineq[j][1 + isl_basic_set_n_param(bset) + dim], 1); - isl_int_neg(bset->ineq[j][0], value); - bset = isl_basic_set_simplify(bset); - return isl_basic_set_finalize(bset); -error: - isl_basic_set_free(bset); - return NULL; -} - -__isl_give isl_map *isl_map_lower_bound_si(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, int value) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - isl_assert(map->ctx, pos < isl_map_dim(map, type), goto error); - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_lower_bound_si(map->p[i], - type, pos, value); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_lower_bound_si(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, int value) -{ - return (struct isl_set *) - isl_map_lower_bound_si((struct isl_map *)set, type, pos, value); -} - -struct isl_set *isl_set_lower_bound_dim(struct isl_set *set, unsigned dim, - isl_int value) -{ - int i; - - set = isl_set_cow(set); - if (!set) - return NULL; - - isl_assert(set->ctx, dim < isl_set_n_dim(set), goto error); - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_lower_bound_dim(set->p[i], dim, value); - if (!set->p[i]) - goto error; - } - return set; -error: - isl_set_free(set); - return NULL; -} - -struct isl_map *isl_map_reverse(struct isl_map *map) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - map->dim = isl_dim_reverse(map->dim); - if (!map->dim) - goto error; - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_reverse(map->p[i]); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -static struct isl_map *isl_basic_map_partial_lexopt( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty, int max) -{ - if (!bmap) - goto error; - if (bmap->ctx->opt->pip == ISL_PIP_PIP) - return isl_pip_basic_map_lexopt(bmap, dom, empty, max); - else - return isl_tab_basic_map_partial_lexopt(bmap, dom, empty, max); -error: - isl_basic_map_free(bmap); - isl_basic_set_free(dom); - if (empty) - *empty = NULL; - return NULL; -} - -struct isl_map *isl_basic_map_partial_lexmax( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty) -{ - return isl_basic_map_partial_lexopt(bmap, dom, empty, 1); -} - -struct isl_map *isl_basic_map_partial_lexmin( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty) -{ - return isl_basic_map_partial_lexopt(bmap, dom, empty, 0); -} - -struct isl_set *isl_basic_set_partial_lexmin( - struct isl_basic_set *bset, struct isl_basic_set *dom, - struct isl_set **empty) -{ - return (struct isl_set *) - isl_basic_map_partial_lexmin((struct isl_basic_map *)bset, - dom, empty); -} - -struct isl_set *isl_basic_set_partial_lexmax( - struct isl_basic_set *bset, struct isl_basic_set *dom, - struct isl_set **empty) -{ - return (struct isl_set *) - isl_basic_map_partial_lexmax((struct isl_basic_map *)bset, - dom, empty); -} - -/* Given a basic map "bmap", compute the lexicographically minimal - * (or maximal) image element for each domain element in dom. - * Set *empty to those elements in dom that do not have an image element. - * - * We first make sure the basic sets in dom are disjoint and then - * simply collect the results over each of the basic sets separately. - * We could probably improve the efficiency a bit by moving the union - * domain down into the parametric integer programming. - */ -static __isl_give isl_map *basic_map_partial_lexopt( - __isl_take isl_basic_map *bmap, __isl_take isl_set *dom, - __isl_give isl_set **empty, int max) -{ - int i; - struct isl_map *res; - - dom = isl_set_make_disjoint(dom); - if (!dom) - goto error; - - if (isl_set_plain_is_empty(dom)) { - res = isl_map_empty_like_basic_map(bmap); - *empty = isl_set_empty_like(dom); - isl_set_free(dom); - isl_basic_map_free(bmap); - return res; - } - - res = isl_basic_map_partial_lexopt(isl_basic_map_copy(bmap), - isl_basic_set_copy(dom->p[0]), empty, max); - - for (i = 1; i < dom->n; ++i) { - struct isl_map *res_i; - struct isl_set *empty_i; - - res_i = isl_basic_map_partial_lexopt(isl_basic_map_copy(bmap), - isl_basic_set_copy(dom->p[i]), &empty_i, max); - - res = isl_map_union_disjoint(res, res_i); - *empty = isl_set_union_disjoint(*empty, empty_i); - } - - isl_set_free(dom); - isl_basic_map_free(bmap); - return res; -error: - *empty = NULL; - isl_set_free(dom); - isl_basic_map_free(bmap); - return NULL; -} - -/* Given a map "map", compute the lexicographically minimal - * (or maximal) image element for each domain element in dom. - * Set *empty to those elements in dom that do not have an image element. - * - * We first compute the lexicographically minimal or maximal element - * in the first basic map. This results in a partial solution "res" - * and a subset "todo" of dom that still need to be handled. - * We then consider each of the remaining maps in "map" and successively - * improve both "res" and "todo". - * - * Let res^k and todo^k be the results after k steps and let i = k + 1. - * Assume we are computing the lexicographical maximum. - * We first compute the lexicographically maximal element in basic map i. - * This results in a partial solution res_i and a subset todo_i. - * Then we combine these results with those obtain for the first k basic maps - * to obtain a result that is valid for the first k+1 basic maps. - * In particular, the set where there is no solution is the set where - * there is no solution for the first k basic maps and also no solution - * for the ith basic map, i.e., - * - * todo^i = todo^k * todo_i - * - * On dom(res^k) * dom(res_i), we need to pick the larger of the two - * solutions, arbitrarily breaking ties in favor of res^k. - * That is, when res^k(a) >= res_i(a), we pick res^k and - * when res^k(a) < res_i(a), we pick res_i. (Here, ">=" and "<" denote - * the lexicographic order.) - * In practice, we compute - * - * res^k * (res_i . "<=") - * - * and - * - * res_i * (res^k . "<") - * - * Finally, we consider the symmetric difference of dom(res^k) and dom(res_i), - * where only one of res^k and res_i provides a solution and we simply pick - * that one, i.e., - * - * res^k * todo_i - * and - * res_i * todo^k - * - * Note that we only compute these intersections when dom(res^k) intersects - * dom(res_i). Otherwise, the only effect of these intersections is to - * potentially break up res^k and res_i into smaller pieces. - * We want to avoid such splintering as much as possible. - * In fact, an earlier implementation of this function would look for - * better results in the domain of res^k and for extra results in todo^k, - * but this would always result in a splintering according to todo^k, - * even when the domain of basic map i is disjoint from the domains of - * the previous basic maps. - */ -static __isl_give isl_map *isl_map_partial_lexopt( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty, int max) -{ - int i; - struct isl_map *res; - struct isl_set *todo; - - if (!map || !dom) - goto error; - - if (isl_map_plain_is_empty(map)) { - if (empty) - *empty = dom; - else - isl_set_free(dom); - return map; - } - - res = basic_map_partial_lexopt(isl_basic_map_copy(map->p[0]), - isl_set_copy(dom), &todo, max); - - for (i = 1; i < map->n; ++i) { - isl_map *lt, *le; - isl_map *res_i; - isl_set *todo_i; - isl_dim *dim = isl_dim_range(isl_map_get_dim(res)); - - res_i = basic_map_partial_lexopt(isl_basic_map_copy(map->p[i]), - isl_set_copy(dom), &todo_i, max); - - if (max) { - lt = isl_map_lex_lt(isl_dim_copy(dim)); - le = isl_map_lex_le(dim); - } else { - lt = isl_map_lex_gt(isl_dim_copy(dim)); - le = isl_map_lex_ge(dim); - } - lt = isl_map_apply_range(isl_map_copy(res), lt); - lt = isl_map_intersect(lt, isl_map_copy(res_i)); - le = isl_map_apply_range(isl_map_copy(res_i), le); - le = isl_map_intersect(le, isl_map_copy(res)); - - if (!isl_map_is_empty(lt) || !isl_map_is_empty(le)) { - res = isl_map_intersect_domain(res, - isl_set_copy(todo_i)); - res_i = isl_map_intersect_domain(res_i, - isl_set_copy(todo)); - } - - res = isl_map_union_disjoint(res, res_i); - res = isl_map_union_disjoint(res, lt); - res = isl_map_union_disjoint(res, le); - - todo = isl_set_intersect(todo, todo_i); - } - - isl_set_free(dom); - isl_map_free(map); - - if (empty) - *empty = todo; - else - isl_set_free(todo); - - return res; -error: - if (empty) - *empty = NULL; - isl_set_free(dom); - isl_map_free(map); - return NULL; -} - -__isl_give isl_map *isl_map_partial_lexmax( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty) -{ - return isl_map_partial_lexopt(map, dom, empty, 1); -} - -__isl_give isl_map *isl_map_partial_lexmin( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty) -{ - return isl_map_partial_lexopt(map, dom, empty, 0); -} - -__isl_give isl_set *isl_set_partial_lexmin( - __isl_take isl_set *set, __isl_take isl_set *dom, - __isl_give isl_set **empty) -{ - return (struct isl_set *) - isl_map_partial_lexmin((struct isl_map *)set, - dom, empty); -} - -__isl_give isl_set *isl_set_partial_lexmax( - __isl_take isl_set *set, __isl_take isl_set *dom, - __isl_give isl_set **empty) -{ - return (struct isl_set *) - isl_map_partial_lexmax((struct isl_map *)set, - dom, empty); -} - -__isl_give isl_map *isl_basic_map_lexopt(__isl_take isl_basic_map *bmap, int max) -{ - struct isl_basic_set *dom = NULL; - struct isl_dim *dom_dim; - - if (!bmap) - goto error; - dom_dim = isl_dim_domain(isl_dim_copy(bmap->dim)); - dom = isl_basic_set_universe(dom_dim); - return isl_basic_map_partial_lexopt(bmap, dom, NULL, max); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_map *isl_basic_map_lexmin(__isl_take isl_basic_map *bmap) -{ - return isl_basic_map_lexopt(bmap, 0); -} - -__isl_give isl_map *isl_basic_map_lexmax(__isl_take isl_basic_map *bmap) -{ - return isl_basic_map_lexopt(bmap, 1); -} - -__isl_give isl_set *isl_basic_set_lexmin(__isl_take isl_basic_set *bset) -{ - return (isl_set *)isl_basic_map_lexmin((isl_basic_map *)bset); -} - -__isl_give isl_set *isl_basic_set_lexmax(__isl_take isl_basic_set *bset) -{ - return (isl_set *)isl_basic_map_lexmax((isl_basic_map *)bset); -} - -__isl_give isl_map *isl_map_lexopt(__isl_take isl_map *map, int max) -{ - struct isl_set *dom = NULL; - struct isl_dim *dom_dim; - - if (!map) - goto error; - dom_dim = isl_dim_domain(isl_dim_copy(map->dim)); - dom = isl_set_universe(dom_dim); - return isl_map_partial_lexopt(map, dom, NULL, max); -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_map *isl_map_lexmin(__isl_take isl_map *map) -{ - return isl_map_lexopt(map, 0); -} - -__isl_give isl_map *isl_map_lexmax(__isl_take isl_map *map) -{ - return isl_map_lexopt(map, 1); -} - -__isl_give isl_set *isl_set_lexmin(__isl_take isl_set *set) -{ - return (isl_set *)isl_map_lexmin((isl_map *)set); -} - -__isl_give isl_set *isl_set_lexmax(__isl_take isl_set *set) -{ - return (isl_set *)isl_map_lexmax((isl_map *)set); -} - -/* Construct a map that equates the two given dimensions in the given space. - */ -static __isl_give isl_map *equate(__isl_take isl_dim *dim, - enum isl_dim_type src_type, int src_pos, - enum isl_dim_type dst_type, int dst_pos) -{ - isl_basic_map *bmap; - int k; - - bmap = isl_basic_map_alloc_dim(dim, 0, 1, 0); - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->eq[k], 1 + isl_basic_map_total_dim(bmap)); - src_pos += isl_basic_map_offset(bmap, src_type); - dst_pos += isl_basic_map_offset(bmap, dst_type); - isl_int_set_si(bmap->eq[k][src_pos], 1); - isl_int_set_si(bmap->eq[k][dst_pos], -1); - - return isl_map_from_basic_map(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Extract the first and only affine expression from list - * and then add it to *pwaff with the given dom. - * This domain is known to be disjoint from other domains - * because of the way isl_basic_set_foreach_lexmax works. - */ -static int update_dim_max(__isl_take isl_basic_set *dom, - __isl_take isl_aff_list *list, void *user) -{ - isl_ctx *ctx = isl_basic_set_get_ctx(dom); - isl_aff *aff; - isl_pw_aff **pwaff = user; - isl_pw_aff *pwaff_i; - - if (isl_aff_list_n_aff(list) != 1) - isl_die(ctx, isl_error_internal, - "expecting single element list", goto error); - - aff = isl_aff_list_get_aff(list, 0); - pwaff_i = isl_pw_aff_alloc(isl_set_from_basic_set(dom), aff); - - *pwaff = isl_pw_aff_add_disjoint(*pwaff, pwaff_i); - - isl_aff_list_free(list); - - return 0; -error: - isl_basic_set_free(dom); - isl_aff_list_free(list); - return -1; -} - -/* Given a one-dimensional basic set, compute the maximum of that - * dimension as an isl_pw_aff. - * - * The isl_pw_aff is constructed by having isl_basic_set_foreach_lexmax - * call update_dim_max on each leaf of the result. - */ -static __isl_give isl_pw_aff *basic_set_dim_max(__isl_keep isl_basic_set *bset) -{ - isl_dim *dim = isl_basic_set_get_dim(bset); - isl_pw_aff *pwaff; - int r; - - dim = isl_dim_domain(isl_dim_from_range(dim)); - pwaff = isl_pw_aff_empty(dim); - - r = isl_basic_set_foreach_lexmax(bset, &update_dim_max, &pwaff); - if (r < 0) - return isl_pw_aff_free(pwaff); - - return pwaff; -} - -/* Compute the maximum of the given set dimension as a function of the - * parameters, but independently of the other set dimensions. - * - * We first project the set onto the given dimension and then compute - * the "lexicographic" maximum in each basic set, combining the results - * using isl_pw_aff_max. - */ -__isl_give isl_pw_aff *isl_set_dim_max(__isl_take isl_set *set, int pos) -{ - int i; - isl_map *map; - isl_pw_aff *pwaff; - - map = isl_map_from_domain(set); - map = isl_map_add_dims(map, isl_dim_out, 1); - map = isl_map_intersect(map, - equate(isl_map_get_dim(map), isl_dim_in, pos, - isl_dim_out, 0)); - set = isl_map_range(map); - if (!set) - return NULL; - - if (set->n == 0) { - isl_dim *dim = isl_set_get_dim(set); - dim = isl_dim_domain(isl_dim_from_range(dim)); - isl_set_free(set); - return isl_pw_aff_empty(dim); - } - - pwaff = basic_set_dim_max(set->p[0]); - for (i = 1; i < set->n; ++i) { - isl_pw_aff *pwaff_i; - - pwaff_i = basic_set_dim_max(set->p[i]); - pwaff = isl_pw_aff_max(pwaff, pwaff_i); - } - - isl_set_free(set); - - return pwaff; -} - -/* Apply a preimage specified by "mat" on the parameters of "bset". - * bset is assumed to have only parameters and divs. - */ -static struct isl_basic_set *basic_set_parameter_preimage( - struct isl_basic_set *bset, struct isl_mat *mat) -{ - unsigned nparam; - - if (!bset || !mat) - goto error; - - bset->dim = isl_dim_cow(bset->dim); - if (!bset->dim) - goto error; - - nparam = isl_basic_set_dim(bset, isl_dim_param); - - isl_assert(bset->ctx, mat->n_row == 1 + nparam, goto error); - - bset->dim->nparam = 0; - bset->dim->n_out = nparam; - bset = isl_basic_set_preimage(bset, mat); - if (bset) { - bset->dim->nparam = bset->dim->n_out; - bset->dim->n_out = 0; - } - return bset; -error: - isl_mat_free(mat); - isl_basic_set_free(bset); - return NULL; -} - -/* Apply a preimage specified by "mat" on the parameters of "set". - * set is assumed to have only parameters and divs. - */ -static struct isl_set *set_parameter_preimage( - struct isl_set *set, struct isl_mat *mat) -{ - struct isl_dim *dim = NULL; - unsigned nparam; - - if (!set || !mat) - goto error; - - dim = isl_dim_copy(set->dim); - dim = isl_dim_cow(dim); - if (!dim) - goto error; - - nparam = isl_set_dim(set, isl_dim_param); - - isl_assert(set->ctx, mat->n_row == 1 + nparam, goto error); - - dim->nparam = 0; - dim->n_out = nparam; - isl_set_reset_dim(set, dim); - set = isl_set_preimage(set, mat); - if (!set) - goto error2; - dim = isl_dim_copy(set->dim); - dim = isl_dim_cow(dim); - if (!dim) - goto error2; - dim->nparam = dim->n_out; - dim->n_out = 0; - isl_set_reset_dim(set, dim); - return set; -error: - isl_dim_free(dim); - isl_mat_free(mat); -error2: - isl_set_free(set); - return NULL; -} - -/* Intersect the basic set "bset" with the affine space specified by the - * equalities in "eq". - */ -static struct isl_basic_set *basic_set_append_equalities( - struct isl_basic_set *bset, struct isl_mat *eq) -{ - int i, k; - unsigned len; - - if (!bset || !eq) - goto error; - - bset = isl_basic_set_extend_dim(bset, isl_dim_copy(bset->dim), 0, - eq->n_row, 0); - if (!bset) - goto error; - - len = 1 + isl_dim_total(bset->dim) + bset->extra; - for (i = 0; i < eq->n_row; ++i) { - k = isl_basic_set_alloc_equality(bset); - if (k < 0) - goto error; - isl_seq_cpy(bset->eq[k], eq->row[i], eq->n_col); - isl_seq_clr(bset->eq[k] + eq->n_col, len - eq->n_col); - } - isl_mat_free(eq); - - bset = isl_basic_set_gauss(bset, NULL); - bset = isl_basic_set_finalize(bset); - - return bset; -error: - isl_mat_free(eq); - isl_basic_set_free(bset); - return NULL; -} - -/* Intersect the set "set" with the affine space specified by the - * equalities in "eq". - */ -static struct isl_set *set_append_equalities(struct isl_set *set, - struct isl_mat *eq) -{ - int i; - - if (!set || !eq) - goto error; - - for (i = 0; i < set->n; ++i) { - set->p[i] = basic_set_append_equalities(set->p[i], - isl_mat_copy(eq)); - if (!set->p[i]) - goto error; - } - isl_mat_free(eq); - return set; -error: - isl_mat_free(eq); - isl_set_free(set); - return NULL; -} - -/* Project the given basic set onto its parameter domain, possibly introducing - * new, explicit, existential variables in the constraints. - * The input has parameters and (possibly implicit) existential variables. - * The output has the same parameters, but only - * explicit existentially quantified variables. - * - * The actual projection is performed by pip, but pip doesn't seem - * to like equalities very much, so we first remove the equalities - * among the parameters by performing a variable compression on - * the parameters. Afterward, an inverse transformation is performed - * and the equalities among the parameters are inserted back in. - */ -static struct isl_set *parameter_compute_divs(struct isl_basic_set *bset) -{ - int i, j; - struct isl_mat *eq; - struct isl_mat *T, *T2; - struct isl_set *set; - unsigned nparam, n_div; - - bset = isl_basic_set_cow(bset); - if (!bset) - return NULL; - - if (bset->n_eq == 0) - return isl_basic_set_lexmin(bset); - - isl_basic_set_gauss(bset, NULL); - - nparam = isl_basic_set_dim(bset, isl_dim_param); - n_div = isl_basic_set_dim(bset, isl_dim_div); - - for (i = 0, j = n_div - 1; i < bset->n_eq && j >= 0; --j) { - if (!isl_int_is_zero(bset->eq[i][1 + nparam + j])) - ++i; - } - if (i == bset->n_eq) - return isl_basic_set_lexmin(bset); - - eq = isl_mat_sub_alloc6(bset->ctx, bset->eq, i, bset->n_eq - i, - 0, 1 + nparam); - eq = isl_mat_cow(eq); - T = isl_mat_variable_compression(isl_mat_copy(eq), &T2); - if (T && T->n_col == 0) { - isl_mat_free(T); - isl_mat_free(T2); - isl_mat_free(eq); - bset = isl_basic_set_set_to_empty(bset); - return isl_set_from_basic_set(bset); - } - bset = basic_set_parameter_preimage(bset, T); - - set = isl_basic_set_lexmin(bset); - set = set_parameter_preimage(set, T2); - set = set_append_equalities(set, eq); - return set; -} - -/* Compute an explicit representation for all the existentially - * quantified variables. - * The input and output dimensions are first turned into parameters. - * compute_divs then returns a map with the same parameters and - * no input or output dimensions and the dimension specification - * is reset to that of the input. - */ -static struct isl_map *compute_divs(struct isl_basic_map *bmap) -{ - struct isl_basic_set *bset; - struct isl_set *set; - struct isl_map *map; - struct isl_dim *dim, *orig_dim = NULL; - unsigned nparam; - unsigned n_in; - unsigned n_out; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - nparam = isl_basic_map_dim(bmap, isl_dim_param); - n_in = isl_basic_map_dim(bmap, isl_dim_in); - n_out = isl_basic_map_dim(bmap, isl_dim_out); - dim = isl_dim_set_alloc(bmap->ctx, nparam + n_in + n_out, 0); - if (!dim) - goto error; - - orig_dim = bmap->dim; - bmap->dim = dim; - bset = (struct isl_basic_set *)bmap; - - set = parameter_compute_divs(bset); - map = (struct isl_map *)set; - map = isl_map_reset_dim(map, orig_dim); - - return map; -error: - isl_basic_map_free(bmap); - return NULL; -} - -int isl_basic_map_divs_known(__isl_keep isl_basic_map *bmap) -{ - int i; - unsigned off; - - if (!bmap) - return -1; - - off = isl_dim_total(bmap->dim); - for (i = 0; i < bmap->n_div; ++i) { - if (isl_int_is_zero(bmap->div[i][0])) - return 0; - isl_assert(bmap->ctx, isl_int_is_zero(bmap->div[i][1+1+off+i]), - return -1); - } - return 1; -} - -static int map_divs_known(__isl_keep isl_map *map) -{ - int i; - - if (!map) - return -1; - - for (i = 0; i < map->n; ++i) { - int known = isl_basic_map_divs_known(map->p[i]); - if (known <= 0) - return known; - } - - return 1; -} - -/* If bmap contains any unknown divs, then compute explicit - * expressions for them. However, this computation may be - * quite expensive, so first try to remove divs that aren't - * strictly needed. - */ -struct isl_map *isl_basic_map_compute_divs(struct isl_basic_map *bmap) -{ - int known; - struct isl_map *map; - - known = isl_basic_map_divs_known(bmap); - if (known < 0) - goto error; - if (known) - return isl_map_from_basic_map(bmap); - - bmap = isl_basic_map_drop_redundant_divs(bmap); - - known = isl_basic_map_divs_known(bmap); - if (known < 0) - goto error; - if (known) - return isl_map_from_basic_map(bmap); - - map = compute_divs(bmap); - return map; -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_map *isl_map_compute_divs(struct isl_map *map) -{ - int i; - int known; - struct isl_map *res; - - if (!map) - return NULL; - if (map->n == 0) - return map; - - known = map_divs_known(map); - if (known < 0) { - isl_map_free(map); - return NULL; - } - if (known) - return map; - - res = isl_basic_map_compute_divs(isl_basic_map_copy(map->p[0])); - for (i = 1 ; i < map->n; ++i) { - struct isl_map *r2; - r2 = isl_basic_map_compute_divs(isl_basic_map_copy(map->p[i])); - if (ISL_F_ISSET(map, ISL_MAP_DISJOINT)) - res = isl_map_union_disjoint(res, r2); - else - res = isl_map_union(res, r2); - } - isl_map_free(map); - - return res; -} - -struct isl_set *isl_basic_set_compute_divs(struct isl_basic_set *bset) -{ - return (struct isl_set *) - isl_basic_map_compute_divs((struct isl_basic_map *)bset); -} - -struct isl_set *isl_set_compute_divs(struct isl_set *set) -{ - return (struct isl_set *) - isl_map_compute_divs((struct isl_map *)set); -} - -struct isl_set *isl_map_domain(struct isl_map *map) -{ - int i; - struct isl_set *set; - - if (!map) - goto error; - - map = isl_map_cow(map); - if (!map) - return NULL; - - set = (struct isl_set *)map; - set->dim = isl_dim_domain(set->dim); - if (!set->dim) - goto error; - for (i = 0; i < map->n; ++i) { - set->p[i] = isl_basic_map_domain(map->p[i]); - if (!set->p[i]) - goto error; - } - ISL_F_CLR(set, ISL_MAP_DISJOINT); - ISL_F_CLR(set, ISL_SET_NORMALIZED); - return set; -error: - isl_map_free(map); - return NULL; -} - -struct isl_map *isl_map_union_disjoint( - struct isl_map *map1, struct isl_map *map2) -{ - int i; - unsigned flags = 0; - struct isl_map *map = NULL; - - if (!map1 || !map2) - goto error; - - if (map1->n == 0) { - isl_map_free(map1); - return map2; - } - if (map2->n == 0) { - isl_map_free(map2); - return map1; - } - - isl_assert(map1->ctx, isl_dim_equal(map1->dim, map2->dim), goto error); - - if (ISL_F_ISSET(map1, ISL_MAP_DISJOINT) && - ISL_F_ISSET(map2, ISL_MAP_DISJOINT)) - ISL_FL_SET(flags, ISL_MAP_DISJOINT); - - map = isl_map_alloc_dim(isl_dim_copy(map1->dim), - map1->n + map2->n, flags); - if (!map) - goto error; - for (i = 0; i < map1->n; ++i) { - map = isl_map_add_basic_map(map, - isl_basic_map_copy(map1->p[i])); - if (!map) - goto error; - } - for (i = 0; i < map2->n; ++i) { - map = isl_map_add_basic_map(map, - isl_basic_map_copy(map2->p[i])); - if (!map) - goto error; - } - isl_map_free(map1); - isl_map_free(map2); - return map; -error: - isl_map_free(map); - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -struct isl_map *isl_map_union(struct isl_map *map1, struct isl_map *map2) -{ - map1 = isl_map_union_disjoint(map1, map2); - if (!map1) - return NULL; - if (map1->n > 1) - ISL_F_CLR(map1, ISL_MAP_DISJOINT); - return map1; -} - -struct isl_set *isl_set_union_disjoint( - struct isl_set *set1, struct isl_set *set2) -{ - return (struct isl_set *) - isl_map_union_disjoint( - (struct isl_map *)set1, (struct isl_map *)set2); -} - -struct isl_set *isl_set_union(struct isl_set *set1, struct isl_set *set2) -{ - return (struct isl_set *) - isl_map_union((struct isl_map *)set1, (struct isl_map *)set2); -} - -struct isl_map *isl_map_intersect_range( - struct isl_map *map, struct isl_set *set) -{ - unsigned flags = 0; - struct isl_map *result; - int i, j; - - if (!map || !set) - goto error; - - if (!isl_dim_match(map->dim, isl_dim_param, set->dim, isl_dim_param)) - isl_die(set->ctx, isl_error_invalid, - "parameters don't match", goto error); - - if (isl_dim_size(set->dim, isl_dim_set) != 0 && - !isl_map_compatible_range(map, set)) - isl_die(set->ctx, isl_error_invalid, - "incompatible spaces", goto error); - - if (isl_set_plain_is_universe(set)) { - isl_set_free(set); - return map; - } - - if (ISL_F_ISSET(map, ISL_MAP_DISJOINT) && - ISL_F_ISSET(set, ISL_MAP_DISJOINT)) - ISL_FL_SET(flags, ISL_MAP_DISJOINT); - - result = isl_map_alloc_dim(isl_dim_copy(map->dim), - map->n * set->n, flags); - if (!result) - goto error; - for (i = 0; i < map->n; ++i) - for (j = 0; j < set->n; ++j) { - result = isl_map_add_basic_map(result, - isl_basic_map_intersect_range( - isl_basic_map_copy(map->p[i]), - isl_basic_set_copy(set->p[j]))); - if (!result) - goto error; - } - isl_map_free(map); - isl_set_free(set); - return result; -error: - isl_map_free(map); - isl_set_free(set); - return NULL; -} - -struct isl_map *isl_map_intersect_domain( - struct isl_map *map, struct isl_set *set) -{ - return isl_map_reverse( - isl_map_intersect_range(isl_map_reverse(map), set)); -} - -struct isl_map *isl_map_apply_domain( - struct isl_map *map1, struct isl_map *map2) -{ - if (!map1 || !map2) - goto error; - map1 = isl_map_reverse(map1); - map1 = isl_map_apply_range(map1, map2); - return isl_map_reverse(map1); -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -struct isl_map *isl_map_apply_range( - struct isl_map *map1, struct isl_map *map2) -{ - struct isl_dim *dim_result; - struct isl_map *result; - int i, j; - - if (!map1 || !map2) - goto error; - - dim_result = isl_dim_join(isl_dim_copy(map1->dim), - isl_dim_copy(map2->dim)); - - result = isl_map_alloc_dim(dim_result, map1->n * map2->n, 0); - if (!result) - goto error; - for (i = 0; i < map1->n; ++i) - for (j = 0; j < map2->n; ++j) { - result = isl_map_add_basic_map(result, - isl_basic_map_apply_range( - isl_basic_map_copy(map1->p[i]), - isl_basic_map_copy(map2->p[j]))); - if (!result) - goto error; - } - isl_map_free(map1); - isl_map_free(map2); - if (result && result->n <= 1) - ISL_F_SET(result, ISL_MAP_DISJOINT); - return result; -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -/* - * returns range - domain - */ -struct isl_basic_set *isl_basic_map_deltas(struct isl_basic_map *bmap) -{ - isl_dim *dims, *target_dim; - struct isl_basic_set *bset; - unsigned dim; - unsigned nparam; - int i; - - if (!bmap) - goto error; - isl_assert(bmap->ctx, isl_dim_tuple_match(bmap->dim, isl_dim_in, - bmap->dim, isl_dim_out), - goto error); - target_dim = isl_dim_domain(isl_basic_map_get_dim(bmap)); - dim = isl_basic_map_n_in(bmap); - nparam = isl_basic_map_n_param(bmap); - bset = isl_basic_set_from_basic_map(bmap); - bset = isl_basic_set_cow(bset); - dims = isl_basic_set_get_dim(bset); - dims = isl_dim_add(dims, isl_dim_set, dim); - bset = isl_basic_set_extend_dim(bset, dims, 0, dim, 0); - bset = isl_basic_set_swap_vars(bset, 2*dim); - for (i = 0; i < dim; ++i) { - int j = isl_basic_map_alloc_equality( - (struct isl_basic_map *)bset); - if (j < 0) - goto error; - isl_seq_clr(bset->eq[j], 1 + isl_basic_set_total_dim(bset)); - isl_int_set_si(bset->eq[j][1+nparam+i], 1); - isl_int_set_si(bset->eq[j][1+nparam+dim+i], 1); - isl_int_set_si(bset->eq[j][1+nparam+2*dim+i], -1); - } - bset = isl_basic_set_project_out(bset, isl_dim_set, dim, 2*dim); - bset = isl_basic_set_reset_dim(bset, target_dim); - return bset; -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* - * returns range - domain - */ -struct isl_set *isl_map_deltas(struct isl_map *map) -{ - int i; - isl_dim *dim; - struct isl_set *result; - - if (!map) - return NULL; - - isl_assert(map->ctx, isl_dim_tuple_match(map->dim, isl_dim_in, - map->dim, isl_dim_out), - goto error); - dim = isl_map_get_dim(map); - dim = isl_dim_domain(dim); - result = isl_set_alloc_dim(dim, map->n, 0); - if (!result) - goto error; - for (i = 0; i < map->n; ++i) - result = isl_set_add_basic_set(result, - isl_basic_map_deltas(isl_basic_map_copy(map->p[i]))); - isl_map_free(map); - return result; -error: - isl_map_free(map); - return NULL; -} - -/* - * returns [domain -> range] -> range - domain - */ -__isl_give isl_basic_map *isl_basic_map_deltas_map( - __isl_take isl_basic_map *bmap) -{ - int i, k; - isl_dim *dim; - isl_basic_map *domain; - int nparam, n; - unsigned total; - - if (!isl_dim_tuple_match(bmap->dim, isl_dim_in, bmap->dim, isl_dim_out)) - isl_die(bmap->ctx, isl_error_invalid, - "domain and range don't match", goto error); - - nparam = isl_basic_map_dim(bmap, isl_dim_param); - n = isl_basic_map_dim(bmap, isl_dim_in); - - dim = isl_dim_from_range(isl_dim_domain(isl_basic_map_get_dim(bmap))); - domain = isl_basic_map_universe(dim); - - bmap = isl_basic_map_from_domain(isl_basic_map_wrap(bmap)); - bmap = isl_basic_map_apply_range(bmap, domain); - bmap = isl_basic_map_extend_constraints(bmap, n, 0); - - total = isl_basic_map_total_dim(bmap); - - for (i = 0; i < n; ++i) { - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->eq[k], 1 + total); - isl_int_set_si(bmap->eq[k][1 + nparam + i], 1); - isl_int_set_si(bmap->eq[k][1 + nparam + n + i], -1); - isl_int_set_si(bmap->eq[k][1 + nparam + n + n + i], 1); - } - - bmap = isl_basic_map_gauss(bmap, NULL); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* - * returns [domain -> range] -> range - domain - */ -__isl_give isl_map *isl_map_deltas_map(__isl_take isl_map *map) -{ - int i; - isl_dim *domain_dim; - - if (!map) - return NULL; - - if (!isl_dim_tuple_match(map->dim, isl_dim_in, map->dim, isl_dim_out)) - isl_die(map->ctx, isl_error_invalid, - "domain and range don't match", goto error); - - map = isl_map_cow(map); - if (!map) - return NULL; - - domain_dim = isl_dim_from_range(isl_dim_domain(isl_map_get_dim(map))); - map->dim = isl_dim_from_domain(isl_dim_wrap(map->dim)); - map->dim = isl_dim_join(map->dim, domain_dim); - if (!map->dim) - goto error; - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_deltas_map(map->p[i]); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -static struct isl_basic_map *basic_map_identity(struct isl_dim *dims) -{ - struct isl_basic_map *bmap; - unsigned nparam; - unsigned dim; - int i; - - if (!dims) - return NULL; - - nparam = dims->nparam; - dim = dims->n_out; - bmap = isl_basic_map_alloc_dim(dims, 0, dim, 0); - if (!bmap) - goto error; - - for (i = 0; i < dim; ++i) { - int j = isl_basic_map_alloc_equality(bmap); - if (j < 0) - goto error; - isl_seq_clr(bmap->eq[j], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->eq[j][1+nparam+i], 1); - isl_int_set_si(bmap->eq[j][1+nparam+dim+i], -1); - } - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_identity(__isl_take isl_dim *dim) -{ - if (!dim) - return NULL; - if (dim->n_in != dim->n_out) - isl_die(dim->ctx, isl_error_invalid, - "number of input and output dimensions needs to be " - "the same", goto error); - return basic_map_identity(dim); -error: - isl_dim_free(dim); - return NULL; -} - -struct isl_basic_map *isl_basic_map_identity_like(struct isl_basic_map *model) -{ - if (!model || !model->dim) - return NULL; - return isl_basic_map_identity(isl_dim_copy(model->dim)); -} - -__isl_give isl_map *isl_map_identity(__isl_take isl_dim *dim) -{ - return isl_map_from_basic_map(isl_basic_map_identity(dim)); -} - -struct isl_map *isl_map_identity_like(struct isl_map *model) -{ - if (!model || !model->dim) - return NULL; - return isl_map_identity(isl_dim_copy(model->dim)); -} - -struct isl_map *isl_map_identity_like_basic_map(struct isl_basic_map *model) -{ - if (!model || !model->dim) - return NULL; - return isl_map_identity(isl_dim_copy(model->dim)); -} - -__isl_give isl_map *isl_set_identity(__isl_take isl_set *set) -{ - isl_dim *dim = isl_set_get_dim(set); - isl_map *id; - id = isl_map_identity(isl_dim_map_from_set(dim)); - return isl_map_intersect_range(id, set); -} - -/* Construct a basic set with all set dimensions having only non-negative - * values. - */ -struct isl_basic_set *isl_basic_set_positive_orthant(struct isl_dim *dims) -{ - int i; - unsigned nparam; - unsigned dim; - struct isl_basic_set *bset; - - if (!dims) - return NULL; - nparam = dims->nparam; - dim = dims->n_out; - bset = isl_basic_set_alloc_dim(dims, 0, 0, dim); - if (!bset) - return NULL; - for (i = 0; i < dim; ++i) { - int k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_clr(bset->ineq[k], 1 + isl_basic_set_total_dim(bset)); - isl_int_set_si(bset->ineq[k][1 + nparam + i], 1); - } - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Construct the half-space x_pos >= 0. - */ -static __isl_give isl_basic_set *nonneg_halfspace(__isl_take isl_dim *dim, - int pos) -{ - int k; - isl_basic_set *nonneg; - - nonneg = isl_basic_set_alloc_dim(dim, 0, 0, 1); - k = isl_basic_set_alloc_inequality(nonneg); - if (k < 0) - goto error; - isl_seq_clr(nonneg->ineq[k], 1 + isl_basic_set_total_dim(nonneg)); - isl_int_set_si(nonneg->ineq[k][pos], 1); - - return isl_basic_set_finalize(nonneg); -error: - isl_basic_set_free(nonneg); - return NULL; -} - -/* Construct the half-space x_pos <= -1. - */ -static __isl_give isl_basic_set *neg_halfspace(__isl_take isl_dim *dim, int pos) -{ - int k; - isl_basic_set *neg; - - neg = isl_basic_set_alloc_dim(dim, 0, 0, 1); - k = isl_basic_set_alloc_inequality(neg); - if (k < 0) - goto error; - isl_seq_clr(neg->ineq[k], 1 + isl_basic_set_total_dim(neg)); - isl_int_set_si(neg->ineq[k][0], -1); - isl_int_set_si(neg->ineq[k][pos], -1); - - return isl_basic_set_finalize(neg); -error: - isl_basic_set_free(neg); - return NULL; -} - -__isl_give isl_set *isl_set_split_dims(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - isl_basic_set *nonneg; - isl_basic_set *neg; - - if (!set) - return NULL; - if (n == 0) - return set; - - isl_assert(set->ctx, first + n <= isl_set_dim(set, type), goto error); - - for (i = 0; i < n; ++i) { - nonneg = nonneg_halfspace(isl_set_get_dim(set), - pos(set->dim, type) + first + i); - neg = neg_halfspace(isl_set_get_dim(set), - pos(set->dim, type) + first + i); - - set = isl_set_intersect(set, isl_basic_set_union(nonneg, neg)); - } - - return set; -error: - isl_set_free(set); - return NULL; -} - -static int foreach_orthant(__isl_take isl_set *set, int *signs, int first, - int len, int (*fn)(__isl_take isl_set *orthant, int *signs, void *user), - void *user) -{ - isl_set *half; - - if (!set) - return -1; - if (isl_set_plain_is_empty(set)) { - isl_set_free(set); - return 0; - } - if (first == len) - return fn(set, signs, user); - - signs[first] = 1; - half = isl_set_from_basic_set(nonneg_halfspace(isl_set_get_dim(set), - 1 + first)); - half = isl_set_intersect(half, isl_set_copy(set)); - if (foreach_orthant(half, signs, first + 1, len, fn, user) < 0) - goto error; - - signs[first] = -1; - half = isl_set_from_basic_set(neg_halfspace(isl_set_get_dim(set), - 1 + first)); - half = isl_set_intersect(half, set); - return foreach_orthant(half, signs, first + 1, len, fn, user); -error: - isl_set_free(set); - return -1; -} - -/* Call "fn" on the intersections of "set" with each of the orthants - * (except for obviously empty intersections). The orthant is identified - * by the signs array, with each entry having value 1 or -1 according - * to the sign of the corresponding variable. - */ -int isl_set_foreach_orthant(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_set *orthant, int *signs, void *user), - void *user) -{ - unsigned nparam; - unsigned nvar; - int *signs; - int r; - - if (!set) - return -1; - if (isl_set_plain_is_empty(set)) - return 0; - - nparam = isl_set_dim(set, isl_dim_param); - nvar = isl_set_dim(set, isl_dim_set); - - signs = isl_alloc_array(set->ctx, int, nparam + nvar); - - r = foreach_orthant(isl_set_copy(set), signs, 0, nparam + nvar, - fn, user); - - free(signs); - - return r; -} - -int isl_set_is_equal(struct isl_set *set1, struct isl_set *set2) -{ - return isl_map_is_equal((struct isl_map *)set1, (struct isl_map *)set2); -} - -int isl_basic_map_is_subset( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - int is_subset; - struct isl_map *map1; - struct isl_map *map2; - - if (!bmap1 || !bmap2) - return -1; - - map1 = isl_map_from_basic_map(isl_basic_map_copy(bmap1)); - map2 = isl_map_from_basic_map(isl_basic_map_copy(bmap2)); - - is_subset = isl_map_is_subset(map1, map2); - - isl_map_free(map1); - isl_map_free(map2); - - return is_subset; -} - -int isl_basic_map_is_equal( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - int is_subset; - - if (!bmap1 || !bmap2) - return -1; - is_subset = isl_basic_map_is_subset(bmap1, bmap2); - if (is_subset != 1) - return is_subset; - is_subset = isl_basic_map_is_subset(bmap2, bmap1); - return is_subset; -} - -int isl_basic_set_is_equal( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - return isl_basic_map_is_equal( - (struct isl_basic_map *)bset1, (struct isl_basic_map *)bset2); -} - -int isl_map_is_empty(struct isl_map *map) -{ - int i; - int is_empty; - - if (!map) - return -1; - for (i = 0; i < map->n; ++i) { - is_empty = isl_basic_map_is_empty(map->p[i]); - if (is_empty < 0) - return -1; - if (!is_empty) - return 0; - } - return 1; -} - -int isl_map_plain_is_empty(__isl_keep isl_map *map) -{ - return map ? map->n == 0 : -1; -} - -int isl_map_fast_is_empty(__isl_keep isl_map *map) -{ - return isl_map_plain_is_empty(map); -} - -int isl_set_plain_is_empty(struct isl_set *set) -{ - return set ? set->n == 0 : -1; -} - -int isl_set_fast_is_empty(__isl_keep isl_set *set) -{ - return isl_set_plain_is_empty(set); -} - -int isl_set_is_empty(struct isl_set *set) -{ - return isl_map_is_empty((struct isl_map *)set); -} - -int isl_map_has_equal_dim(__isl_keep isl_map *map1, __isl_keep isl_map *map2) -{ - if (!map1 || !map2) - return -1; - - return isl_dim_equal(map1->dim, map2->dim); -} - -int isl_set_has_equal_dim(__isl_keep isl_set *set1, __isl_keep isl_set *set2) -{ - if (!set1 || !set2) - return -1; - - return isl_dim_equal(set1->dim, set2->dim); -} - -int isl_map_is_equal(struct isl_map *map1, struct isl_map *map2) -{ - int is_subset; - - if (!map1 || !map2) - return -1; - is_subset = isl_map_is_subset(map1, map2); - if (is_subset != 1) - return is_subset; - is_subset = isl_map_is_subset(map2, map1); - return is_subset; -} - -int isl_basic_map_is_strict_subset( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - int is_subset; - - if (!bmap1 || !bmap2) - return -1; - is_subset = isl_basic_map_is_subset(bmap1, bmap2); - if (is_subset != 1) - return is_subset; - is_subset = isl_basic_map_is_subset(bmap2, bmap1); - if (is_subset == -1) - return is_subset; - return !is_subset; -} - -int isl_map_is_strict_subset(struct isl_map *map1, struct isl_map *map2) -{ - int is_subset; - - if (!map1 || !map2) - return -1; - is_subset = isl_map_is_subset(map1, map2); - if (is_subset != 1) - return is_subset; - is_subset = isl_map_is_subset(map2, map1); - if (is_subset == -1) - return is_subset; - return !is_subset; -} - -int isl_set_is_strict_subset(__isl_keep isl_set *set1, __isl_keep isl_set *set2) -{ - return isl_map_is_strict_subset((isl_map *)set1, (isl_map *)set2); -} - -int isl_basic_map_is_universe(struct isl_basic_map *bmap) -{ - if (!bmap) - return -1; - return bmap->n_eq == 0 && bmap->n_ineq == 0; -} - -int isl_basic_set_is_universe(struct isl_basic_set *bset) -{ - if (!bset) - return -1; - return bset->n_eq == 0 && bset->n_ineq == 0; -} - -int isl_map_plain_is_universe(__isl_keep isl_map *map) -{ - int i; - - if (!map) - return -1; - - for (i = 0; i < map->n; ++i) { - int r = isl_basic_map_is_universe(map->p[i]); - if (r < 0 || r) - return r; - } - - return 0; -} - -int isl_set_plain_is_universe(__isl_keep isl_set *set) -{ - return isl_map_plain_is_universe((isl_map *) set); -} - -int isl_set_fast_is_universe(__isl_keep isl_set *set) -{ - return isl_set_plain_is_universe(set); -} - -int isl_basic_map_is_empty(struct isl_basic_map *bmap) -{ - struct isl_basic_set *bset = NULL; - struct isl_vec *sample = NULL; - int empty; - unsigned total; - - if (!bmap) - return -1; - - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) - return 1; - - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL)) { - struct isl_basic_map *copy = isl_basic_map_copy(bmap); - copy = isl_basic_map_remove_redundancies(copy); - empty = ISL_F_ISSET(copy, ISL_BASIC_MAP_EMPTY); - isl_basic_map_free(copy); - return empty; - } - - total = 1 + isl_basic_map_total_dim(bmap); - if (bmap->sample && bmap->sample->size == total) { - int contains = isl_basic_map_contains(bmap, bmap->sample); - if (contains < 0) - return -1; - if (contains) - return 0; - } - isl_vec_free(bmap->sample); - bmap->sample = NULL; - bset = isl_basic_map_underlying_set(isl_basic_map_copy(bmap)); - if (!bset) - return -1; - sample = isl_basic_set_sample_vec(bset); - if (!sample) - return -1; - empty = sample->size == 0; - isl_vec_free(bmap->sample); - bmap->sample = sample; - if (empty) - ISL_F_SET(bmap, ISL_BASIC_MAP_EMPTY); - - return empty; -} - -int isl_basic_map_plain_is_empty(__isl_keep isl_basic_map *bmap) -{ - if (!bmap) - return -1; - return ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY); -} - -int isl_basic_map_fast_is_empty(__isl_keep isl_basic_map *bmap) -{ - return isl_basic_map_plain_is_empty(bmap); -} - -int isl_basic_set_plain_is_empty(__isl_keep isl_basic_set *bset) -{ - if (!bset) - return -1; - return ISL_F_ISSET(bset, ISL_BASIC_SET_EMPTY); -} - -int isl_basic_set_fast_is_empty(__isl_keep isl_basic_set *bset) -{ - return isl_basic_set_plain_is_empty(bset); -} - -int isl_basic_set_is_empty(struct isl_basic_set *bset) -{ - return isl_basic_map_is_empty((struct isl_basic_map *)bset); -} - -struct isl_map *isl_basic_map_union( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - struct isl_map *map; - if (!bmap1 || !bmap2) - return NULL; - - isl_assert(bmap1->ctx, isl_dim_equal(bmap1->dim, bmap2->dim), goto error); - - map = isl_map_alloc_dim(isl_dim_copy(bmap1->dim), 2, 0); - if (!map) - goto error; - map = isl_map_add_basic_map(map, bmap1); - map = isl_map_add_basic_map(map, bmap2); - return map; -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -struct isl_set *isl_basic_set_union( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - return (struct isl_set *)isl_basic_map_union( - (struct isl_basic_map *)bset1, - (struct isl_basic_map *)bset2); -} - -/* Order divs such that any div only depends on previous divs */ -struct isl_basic_map *isl_basic_map_order_divs(struct isl_basic_map *bmap) -{ - int i; - unsigned off; - - if (!bmap) - return NULL; - - off = isl_dim_total(bmap->dim); - - for (i = 0; i < bmap->n_div; ++i) { - int pos; - if (isl_int_is_zero(bmap->div[i][0])) - continue; - pos = isl_seq_first_non_zero(bmap->div[i]+1+1+off+i, - bmap->n_div-i); - if (pos == -1) - continue; - isl_basic_map_swap_div(bmap, i, i + pos); - --i; - } - return bmap; -} - -struct isl_basic_set *isl_basic_set_order_divs(struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_order_divs((struct isl_basic_map *)bset); -} - -__isl_give isl_map *isl_map_order_divs(__isl_take isl_map *map) -{ - int i; - - if (!map) - return 0; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_order_divs(map->p[i]); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Apply the expansion computed by isl_merge_divs. - * The expansion itself is given by "exp" while the resulting - * list of divs is given by "div". - */ -__isl_give isl_basic_set *isl_basic_set_expand_divs( - __isl_take isl_basic_set *bset, __isl_take isl_mat *div, int *exp) -{ - int i, j; - int n_div; - - bset = isl_basic_set_cow(bset); - if (!bset || !div) - goto error; - - if (div->n_row < bset->n_div) - isl_die(isl_mat_get_ctx(div), isl_error_invalid, - "not an expansion", goto error); - - bset = isl_basic_map_extend_dim(bset, isl_dim_copy(bset->dim), - div->n_row - bset->n_div, 0, - 2 * (div->n_row - bset->n_div)); - - n_div = bset->n_div; - for (i = n_div; i < div->n_row; ++i) - if (isl_basic_set_alloc_div(bset) < 0) - goto error; - - j = n_div - 1; - for (i = div->n_row - 1; i >= 0; --i) { - if (j >= 0 && exp[j] == i) { - if (i != j) - isl_basic_map_swap_div(bset, i, j); - j--; - } else { - isl_seq_cpy(bset->div[i], div->row[i], div->n_col); - if (isl_basic_map_add_div_constraints(bset, i) < 0) - goto error; - } - } - - isl_mat_free(div); - return bset; -error: - isl_basic_set_free(bset); - isl_mat_free(div); - return NULL; -} - -/* Look for a div in dst that corresponds to the div "div" in src. - * The divs before "div" in src and dst are assumed to be the same. - * - * Returns -1 if no corresponding div was found and the position - * of the corresponding div in dst otherwise. - */ -static int find_div(struct isl_basic_map *dst, - struct isl_basic_map *src, unsigned div) -{ - int i; - - unsigned total = isl_dim_total(src->dim); - - isl_assert(dst->ctx, div <= dst->n_div, return -1); - for (i = div; i < dst->n_div; ++i) - if (isl_seq_eq(dst->div[i], src->div[div], 1+1+total+div) && - isl_seq_first_non_zero(dst->div[i]+1+1+total+div, - dst->n_div - div) == -1) - return i; - return -1; -} - -struct isl_basic_map *isl_basic_map_align_divs( - struct isl_basic_map *dst, struct isl_basic_map *src) -{ - int i; - unsigned total = isl_dim_total(src->dim); - - if (!dst || !src) - goto error; - - if (src->n_div == 0) - return dst; - - for (i = 0; i < src->n_div; ++i) - isl_assert(src->ctx, !isl_int_is_zero(src->div[i][0]), goto error); - - src = isl_basic_map_order_divs(src); - dst = isl_basic_map_cow(dst); - dst = isl_basic_map_extend_dim(dst, isl_dim_copy(dst->dim), - src->n_div, 0, 2 * src->n_div); - if (!dst) - return NULL; - for (i = 0; i < src->n_div; ++i) { - int j = find_div(dst, src, i); - if (j < 0) { - j = isl_basic_map_alloc_div(dst); - if (j < 0) - goto error; - isl_seq_cpy(dst->div[j], src->div[i], 1+1+total+i); - isl_seq_clr(dst->div[j]+1+1+total+i, dst->n_div - i); - if (isl_basic_map_add_div_constraints(dst, j) < 0) - goto error; - } - if (j != i) - isl_basic_map_swap_div(dst, i, j); - } - return dst; -error: - isl_basic_map_free(dst); - return NULL; -} - -struct isl_basic_set *isl_basic_set_align_divs( - struct isl_basic_set *dst, struct isl_basic_set *src) -{ - return (struct isl_basic_set *)isl_basic_map_align_divs( - (struct isl_basic_map *)dst, (struct isl_basic_map *)src); -} - -struct isl_map *isl_map_align_divs(struct isl_map *map) -{ - int i; - - if (!map) - return NULL; - if (map->n == 0) - return map; - map = isl_map_compute_divs(map); - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 1; i < map->n; ++i) - map->p[0] = isl_basic_map_align_divs(map->p[0], map->p[i]); - for (i = 1; i < map->n; ++i) - map->p[i] = isl_basic_map_align_divs(map->p[i], map->p[0]); - - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -} - -struct isl_set *isl_set_align_divs(struct isl_set *set) -{ - return (struct isl_set *)isl_map_align_divs((struct isl_map *)set); -} - -struct isl_set *isl_set_apply(struct isl_set *set, struct isl_map *map) -{ - if (!set || !map) - goto error; - isl_assert(set->ctx, isl_map_compatible_domain(map, set), goto error); - map = isl_map_intersect_domain(map, set); - set = isl_map_range(map); - return set; -error: - isl_set_free(set); - isl_map_free(map); - return NULL; -} - -/* There is no need to cow as removing empty parts doesn't change - * the meaning of the set. - */ -struct isl_map *isl_map_remove_empty_parts(struct isl_map *map) -{ - int i; - - if (!map) - return NULL; - - for (i = map->n-1; i >= 0; --i) { - if (!ISL_F_ISSET(map->p[i], ISL_BASIC_MAP_EMPTY)) - continue; - isl_basic_map_free(map->p[i]); - if (i != map->n-1) { - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - map->p[i] = map->p[map->n-1]; - } - map->n--; - } - - return map; -} - -struct isl_set *isl_set_remove_empty_parts(struct isl_set *set) -{ - return (struct isl_set *) - isl_map_remove_empty_parts((struct isl_map *)set); -} - -struct isl_basic_map *isl_map_copy_basic_map(struct isl_map *map) -{ - struct isl_basic_map *bmap; - if (!map || map->n == 0) - return NULL; - bmap = map->p[map->n-1]; - isl_assert(map->ctx, ISL_F_ISSET(bmap, ISL_BASIC_SET_FINAL), return NULL); - return isl_basic_map_copy(bmap); -} - -struct isl_basic_set *isl_set_copy_basic_set(struct isl_set *set) -{ - return (struct isl_basic_set *) - isl_map_copy_basic_map((struct isl_map *)set); -} - -__isl_give isl_map *isl_map_drop_basic_map(__isl_take isl_map *map, - __isl_keep isl_basic_map *bmap) -{ - int i; - - if (!map || !bmap) - goto error; - for (i = map->n-1; i >= 0; --i) { - if (map->p[i] != bmap) - continue; - map = isl_map_cow(map); - if (!map) - goto error; - isl_basic_map_free(map->p[i]); - if (i != map->n-1) { - ISL_F_CLR(map, ISL_SET_NORMALIZED); - map->p[i] = map->p[map->n-1]; - } - map->n--; - return map; - } - return map; -error: - isl_map_free(map); - return NULL; -} - -struct isl_set *isl_set_drop_basic_set(struct isl_set *set, - struct isl_basic_set *bset) -{ - return (struct isl_set *)isl_map_drop_basic_map((struct isl_map *)set, - (struct isl_basic_map *)bset); -} - -/* Given two basic sets bset1 and bset2, compute the maximal difference - * between the values of dimension pos in bset1 and those in bset2 - * for any common value of the parameters and dimensions preceding pos. - */ -static enum isl_lp_result basic_set_maximal_difference_at( - __isl_keep isl_basic_set *bset1, __isl_keep isl_basic_set *bset2, - int pos, isl_int *opt) -{ - struct isl_dim *dims; - struct isl_basic_map *bmap1 = NULL; - struct isl_basic_map *bmap2 = NULL; - struct isl_ctx *ctx; - struct isl_vec *obj; - unsigned total; - unsigned nparam; - unsigned dim1, dim2; - enum isl_lp_result res; - - if (!bset1 || !bset2) - return isl_lp_error; - - nparam = isl_basic_set_n_param(bset1); - dim1 = isl_basic_set_n_dim(bset1); - dim2 = isl_basic_set_n_dim(bset2); - dims = isl_dim_alloc(bset1->ctx, nparam, pos, dim1 - pos); - bmap1 = isl_basic_map_from_basic_set(isl_basic_set_copy(bset1), dims); - dims = isl_dim_alloc(bset2->ctx, nparam, pos, dim2 - pos); - bmap2 = isl_basic_map_from_basic_set(isl_basic_set_copy(bset2), dims); - if (!bmap1 || !bmap2) - goto error; - bmap1 = isl_basic_map_cow(bmap1); - bmap1 = isl_basic_map_extend(bmap1, nparam, - pos, (dim1 - pos) + (dim2 - pos), - bmap2->n_div, bmap2->n_eq, bmap2->n_ineq); - bmap1 = add_constraints(bmap1, bmap2, 0, dim1 - pos); - if (!bmap1) - goto error; - total = isl_basic_map_total_dim(bmap1); - ctx = bmap1->ctx; - obj = isl_vec_alloc(ctx, 1 + total); - isl_seq_clr(obj->block.data, 1 + total); - isl_int_set_si(obj->block.data[1+nparam+pos], 1); - isl_int_set_si(obj->block.data[1+nparam+pos+(dim1-pos)], -1); - if (!obj) - goto error; - res = isl_basic_map_solve_lp(bmap1, 1, obj->block.data, ctx->one, - opt, NULL, NULL); - isl_basic_map_free(bmap1); - isl_vec_free(obj); - return res; -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return isl_lp_error; -} - -/* Given two _disjoint_ basic sets bset1 and bset2, check whether - * for any common value of the parameters and dimensions preceding pos - * in both basic sets, the values of dimension pos in bset1 are - * smaller or larger than those in bset2. - * - * Returns - * 1 if bset1 follows bset2 - * -1 if bset1 precedes bset2 - * 0 if bset1 and bset2 are incomparable - * -2 if some error occurred. - */ -int isl_basic_set_compare_at(struct isl_basic_set *bset1, - struct isl_basic_set *bset2, int pos) -{ - isl_int opt; - enum isl_lp_result res; - int cmp; - - isl_int_init(opt); - - res = basic_set_maximal_difference_at(bset1, bset2, pos, &opt); - - if (res == isl_lp_empty) - cmp = 0; - else if ((res == isl_lp_ok && isl_int_is_pos(opt)) || - res == isl_lp_unbounded) - cmp = 1; - else if (res == isl_lp_ok && isl_int_is_neg(opt)) - cmp = -1; - else - cmp = -2; - - isl_int_clear(opt); - return cmp; -} - -/* Given two basic sets bset1 and bset2, check whether - * for any common value of the parameters and dimensions preceding pos - * there is a value of dimension pos in bset1 that is larger - * than a value of the same dimension in bset2. - * - * Return - * 1 if there exists such a pair - * 0 if there is no such pair, but there is a pair of equal values - * -1 otherwise - * -2 if some error occurred. - */ -int isl_basic_set_follows_at(__isl_keep isl_basic_set *bset1, - __isl_keep isl_basic_set *bset2, int pos) -{ - isl_int opt; - enum isl_lp_result res; - int cmp; - - isl_int_init(opt); - - res = basic_set_maximal_difference_at(bset1, bset2, pos, &opt); - - if (res == isl_lp_empty) - cmp = -1; - else if ((res == isl_lp_ok && isl_int_is_pos(opt)) || - res == isl_lp_unbounded) - cmp = 1; - else if (res == isl_lp_ok && isl_int_is_neg(opt)) - cmp = -1; - else if (res == isl_lp_ok) - cmp = 0; - else - cmp = -2; - - isl_int_clear(opt); - return cmp; -} - -/* Given two sets set1 and set2, check whether - * for any common value of the parameters and dimensions preceding pos - * there is a value of dimension pos in set1 that is larger - * than a value of the same dimension in set2. - * - * Return - * 1 if there exists such a pair - * 0 if there is no such pair, but there is a pair of equal values - * -1 otherwise - * -2 if some error occurred. - */ -int isl_set_follows_at(__isl_keep isl_set *set1, - __isl_keep isl_set *set2, int pos) -{ - int i, j; - int follows = -1; - - if (!set1 || !set2) - return -2; - - for (i = 0; i < set1->n; ++i) - for (j = 0; j < set2->n; ++j) { - int f; - f = isl_basic_set_follows_at(set1->p[i], set2->p[j], pos); - if (f == 1 || f == -2) - return f; - if (f > follows) - follows = f; - } - - return follows; -} - -static int isl_basic_map_plain_has_fixed_var(__isl_keep isl_basic_map *bmap, - unsigned pos, isl_int *val) -{ - int i; - int d; - unsigned total; - - if (!bmap) - return -1; - total = isl_basic_map_total_dim(bmap); - for (i = 0, d = total-1; i < bmap->n_eq && d+1 > pos; ++i) { - for (; d+1 > pos; --d) - if (!isl_int_is_zero(bmap->eq[i][1+d])) - break; - if (d != pos) - continue; - if (isl_seq_first_non_zero(bmap->eq[i]+1, d) != -1) - return 0; - if (isl_seq_first_non_zero(bmap->eq[i]+1+d+1, total-d-1) != -1) - return 0; - if (!isl_int_is_one(bmap->eq[i][1+d])) - return 0; - if (val) - isl_int_neg(*val, bmap->eq[i][0]); - return 1; - } - return 0; -} - -static int isl_map_plain_has_fixed_var(__isl_keep isl_map *map, - unsigned pos, isl_int *val) -{ - int i; - isl_int v; - isl_int tmp; - int fixed; - - if (!map) - return -1; - if (map->n == 0) - return 0; - if (map->n == 1) - return isl_basic_map_plain_has_fixed_var(map->p[0], pos, val); - isl_int_init(v); - isl_int_init(tmp); - fixed = isl_basic_map_plain_has_fixed_var(map->p[0], pos, &v); - for (i = 1; fixed == 1 && i < map->n; ++i) { - fixed = isl_basic_map_plain_has_fixed_var(map->p[i], pos, &tmp); - if (fixed == 1 && isl_int_ne(tmp, v)) - fixed = 0; - } - if (val) - isl_int_set(*val, v); - isl_int_clear(tmp); - isl_int_clear(v); - return fixed; -} - -static int isl_basic_set_plain_has_fixed_var(__isl_keep isl_basic_set *bset, - unsigned pos, isl_int *val) -{ - return isl_basic_map_plain_has_fixed_var((struct isl_basic_map *)bset, - pos, val); -} - -static int isl_set_plain_has_fixed_var(__isl_keep isl_set *set, unsigned pos, - isl_int *val) -{ - return isl_map_plain_has_fixed_var((struct isl_map *)set, pos, val); -} - -int isl_basic_map_plain_is_fixed(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, isl_int *val) -{ - if (pos >= isl_basic_map_dim(bmap, type)) - return -1; - return isl_basic_map_plain_has_fixed_var(bmap, - isl_basic_map_offset(bmap, type) - 1 + pos, val); -} - -int isl_map_plain_is_fixed(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos, isl_int *val) -{ - if (pos >= isl_map_dim(map, type)) - return -1; - return isl_map_plain_has_fixed_var(map, - map_offset(map, type) - 1 + pos, val); -} - -int isl_map_fast_is_fixed(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos, isl_int *val) -{ - return isl_map_plain_is_fixed(map, type, pos, val); -} - -/* Check if dimension dim has fixed value and if so and if val is not NULL, - * then return this fixed value in *val. - */ -int isl_basic_set_plain_dim_is_fixed(__isl_keep isl_basic_set *bset, - unsigned dim, isl_int *val) -{ - return isl_basic_set_plain_has_fixed_var(bset, - isl_basic_set_n_param(bset) + dim, val); -} - -/* Check if dimension dim has fixed value and if so and if val is not NULL, - * then return this fixed value in *val. - */ -int isl_set_plain_dim_is_fixed(__isl_keep isl_set *set, - unsigned dim, isl_int *val) -{ - return isl_set_plain_has_fixed_var(set, isl_set_n_param(set) + dim, val); -} - -int isl_set_fast_dim_is_fixed(__isl_keep isl_set *set, - unsigned dim, isl_int *val) -{ - return isl_set_plain_dim_is_fixed(set, dim, val); -} - -/* Check if input variable in has fixed value and if so and if val is not NULL, - * then return this fixed value in *val. - */ -int isl_map_plain_input_is_fixed(__isl_keep isl_map *map, - unsigned in, isl_int *val) -{ - return isl_map_plain_has_fixed_var(map, isl_map_n_param(map) + in, val); -} - -/* Check if dimension dim has an (obvious) fixed lower bound and if so - * and if val is not NULL, then return this lower bound in *val. - */ -int isl_basic_set_plain_dim_has_fixed_lower_bound( - __isl_keep isl_basic_set *bset, unsigned dim, isl_int *val) -{ - int i, i_eq = -1, i_ineq = -1; - isl_int *c; - unsigned total; - unsigned nparam; - - if (!bset) - return -1; - total = isl_basic_set_total_dim(bset); - nparam = isl_basic_set_n_param(bset); - for (i = 0; i < bset->n_eq; ++i) { - if (isl_int_is_zero(bset->eq[i][1+nparam+dim])) - continue; - if (i_eq != -1) - return 0; - i_eq = i; - } - for (i = 0; i < bset->n_ineq; ++i) { - if (!isl_int_is_pos(bset->ineq[i][1+nparam+dim])) - continue; - if (i_eq != -1 || i_ineq != -1) - return 0; - i_ineq = i; - } - if (i_eq == -1 && i_ineq == -1) - return 0; - c = i_eq != -1 ? bset->eq[i_eq] : bset->ineq[i_ineq]; - /* The coefficient should always be one due to normalization. */ - if (!isl_int_is_one(c[1+nparam+dim])) - return 0; - if (isl_seq_first_non_zero(c+1, nparam+dim) != -1) - return 0; - if (isl_seq_first_non_zero(c+1+nparam+dim+1, - total - nparam - dim - 1) != -1) - return 0; - if (val) - isl_int_neg(*val, c[0]); - return 1; -} - -int isl_set_plain_dim_has_fixed_lower_bound(__isl_keep isl_set *set, - unsigned dim, isl_int *val) -{ - int i; - isl_int v; - isl_int tmp; - int fixed; - - if (!set) - return -1; - if (set->n == 0) - return 0; - if (set->n == 1) - return isl_basic_set_plain_dim_has_fixed_lower_bound(set->p[0], - dim, val); - isl_int_init(v); - isl_int_init(tmp); - fixed = isl_basic_set_plain_dim_has_fixed_lower_bound(set->p[0], - dim, &v); - for (i = 1; fixed == 1 && i < set->n; ++i) { - fixed = isl_basic_set_plain_dim_has_fixed_lower_bound(set->p[i], - dim, &tmp); - if (fixed == 1 && isl_int_ne(tmp, v)) - fixed = 0; - } - if (val) - isl_int_set(*val, v); - isl_int_clear(tmp); - isl_int_clear(v); - return fixed; -} - -struct constraint { - unsigned size; - isl_int *c; -}; - -/* uset_gist depends on constraints without existentially quantified - * variables sorting first. - */ -static int qsort_constraint_cmp(const void *p1, const void *p2) -{ - const struct constraint *c1 = (const struct constraint *)p1; - const struct constraint *c2 = (const struct constraint *)p2; - int l1, l2; - unsigned size = isl_min(c1->size, c2->size); - - l1 = isl_seq_last_non_zero(c1->c, size); - l2 = isl_seq_last_non_zero(c2->c, size); - - if (l1 != l2) - return l1 - l2; - - return isl_seq_cmp(c1->c, c2->c, size); -} - -static struct isl_basic_map *isl_basic_map_sort_constraints( - struct isl_basic_map *bmap) -{ - int i; - struct constraint *c; - unsigned total; - - if (!bmap) - return NULL; - total = isl_basic_map_total_dim(bmap); - c = isl_alloc_array(bmap->ctx, struct constraint, bmap->n_ineq); - if (!c) - goto error; - for (i = 0; i < bmap->n_ineq; ++i) { - c[i].size = total; - c[i].c = bmap->ineq[i]; - } - qsort(c, bmap->n_ineq, sizeof(struct constraint), qsort_constraint_cmp); - for (i = 0; i < bmap->n_ineq; ++i) - bmap->ineq[i] = c[i].c; - free(c); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_sort_constraints( - __isl_take isl_basic_set *bset) -{ - return (struct isl_basic_set *)isl_basic_map_sort_constraints( - (struct isl_basic_map *)bset); -} - -struct isl_basic_map *isl_basic_map_normalize(struct isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_NORMALIZED)) - return bmap; - bmap = isl_basic_map_remove_redundancies(bmap); - bmap = isl_basic_map_sort_constraints(bmap); - ISL_F_SET(bmap, ISL_BASIC_MAP_NORMALIZED); - return bmap; -} - -struct isl_basic_set *isl_basic_set_normalize(struct isl_basic_set *bset) -{ - return (struct isl_basic_set *)isl_basic_map_normalize( - (struct isl_basic_map *)bset); -} - -int isl_basic_map_plain_cmp(const __isl_keep isl_basic_map *bmap1, - const __isl_keep isl_basic_map *bmap2) -{ - int i, cmp; - unsigned total; - - if (bmap1 == bmap2) - return 0; - if (ISL_F_ISSET(bmap1, ISL_BASIC_MAP_RATIONAL) != - ISL_F_ISSET(bmap2, ISL_BASIC_MAP_RATIONAL)) - return ISL_F_ISSET(bmap1, ISL_BASIC_MAP_RATIONAL) ? -1 : 1; - if (isl_basic_map_n_param(bmap1) != isl_basic_map_n_param(bmap2)) - return isl_basic_map_n_param(bmap1) - isl_basic_map_n_param(bmap2); - if (isl_basic_map_n_in(bmap1) != isl_basic_map_n_in(bmap2)) - return isl_basic_map_n_out(bmap1) - isl_basic_map_n_out(bmap2); - if (isl_basic_map_n_out(bmap1) != isl_basic_map_n_out(bmap2)) - return isl_basic_map_n_out(bmap1) - isl_basic_map_n_out(bmap2); - if (ISL_F_ISSET(bmap1, ISL_BASIC_MAP_EMPTY) && - ISL_F_ISSET(bmap2, ISL_BASIC_MAP_EMPTY)) - return 0; - if (ISL_F_ISSET(bmap1, ISL_BASIC_MAP_EMPTY)) - return 1; - if (ISL_F_ISSET(bmap2, ISL_BASIC_MAP_EMPTY)) - return -1; - if (bmap1->n_eq != bmap2->n_eq) - return bmap1->n_eq - bmap2->n_eq; - if (bmap1->n_ineq != bmap2->n_ineq) - return bmap1->n_ineq - bmap2->n_ineq; - if (bmap1->n_div != bmap2->n_div) - return bmap1->n_div - bmap2->n_div; - total = isl_basic_map_total_dim(bmap1); - for (i = 0; i < bmap1->n_eq; ++i) { - cmp = isl_seq_cmp(bmap1->eq[i], bmap2->eq[i], 1+total); - if (cmp) - return cmp; - } - for (i = 0; i < bmap1->n_ineq; ++i) { - cmp = isl_seq_cmp(bmap1->ineq[i], bmap2->ineq[i], 1+total); - if (cmp) - return cmp; - } - for (i = 0; i < bmap1->n_div; ++i) { - cmp = isl_seq_cmp(bmap1->div[i], bmap2->div[i], 1+1+total); - if (cmp) - return cmp; - } - return 0; -} - -int isl_basic_map_plain_is_equal(__isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2) -{ - return isl_basic_map_plain_cmp(bmap1, bmap2) == 0; -} - -int isl_basic_set_plain_is_equal(__isl_keep isl_basic_set *bset1, - __isl_keep isl_basic_set *bset2) -{ - return isl_basic_map_plain_is_equal((isl_basic_map *)bset1, - (isl_basic_map *)bset2); -} - -static int qsort_bmap_cmp(const void *p1, const void *p2) -{ - const struct isl_basic_map *bmap1 = *(const struct isl_basic_map **)p1; - const struct isl_basic_map *bmap2 = *(const struct isl_basic_map **)p2; - - return isl_basic_map_plain_cmp(bmap1, bmap2); -} - -/* We normalize in place, but if anything goes wrong we need - * to return NULL, so we need to make sure we don't change the - * meaning of any possible other copies of map. - */ -struct isl_map *isl_map_normalize(struct isl_map *map) -{ - int i, j; - struct isl_basic_map *bmap; - - if (!map) - return NULL; - if (ISL_F_ISSET(map, ISL_MAP_NORMALIZED)) - return map; - for (i = 0; i < map->n; ++i) { - bmap = isl_basic_map_normalize(isl_basic_map_copy(map->p[i])); - if (!bmap) - goto error; - isl_basic_map_free(map->p[i]); - map->p[i] = bmap; - } - qsort(map->p, map->n, sizeof(struct isl_basic_map *), qsort_bmap_cmp); - ISL_F_SET(map, ISL_MAP_NORMALIZED); - map = isl_map_remove_empty_parts(map); - if (!map) - return NULL; - for (i = map->n - 1; i >= 1; --i) { - if (!isl_basic_map_plain_is_equal(map->p[i-1], map->p[i])) - continue; - isl_basic_map_free(map->p[i-1]); - for (j = i; j < map->n; ++j) - map->p[j-1] = map->p[j]; - map->n--; - } - return map; -error: - isl_map_free(map); - return NULL; - -} - -struct isl_set *isl_set_normalize(struct isl_set *set) -{ - return (struct isl_set *)isl_map_normalize((struct isl_map *)set); -} - -int isl_map_plain_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2) -{ - int i; - int equal; - - if (!map1 || !map2) - return -1; - - if (map1 == map2) - return 1; - if (!isl_dim_equal(map1->dim, map2->dim)) - return 0; - - map1 = isl_map_copy(map1); - map2 = isl_map_copy(map2); - map1 = isl_map_normalize(map1); - map2 = isl_map_normalize(map2); - if (!map1 || !map2) - goto error; - equal = map1->n == map2->n; - for (i = 0; equal && i < map1->n; ++i) { - equal = isl_basic_map_plain_is_equal(map1->p[i], map2->p[i]); - if (equal < 0) - goto error; - } - isl_map_free(map1); - isl_map_free(map2); - return equal; -error: - isl_map_free(map1); - isl_map_free(map2); - return -1; -} - -int isl_map_fast_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2) -{ - return isl_map_plain_is_equal(map1, map2); -} - -int isl_set_plain_is_equal(__isl_keep isl_set *set1, __isl_keep isl_set *set2) -{ - return isl_map_plain_is_equal((struct isl_map *)set1, - (struct isl_map *)set2); -} - -int isl_set_fast_is_equal(__isl_keep isl_set *set1, __isl_keep isl_set *set2) -{ - return isl_set_plain_is_equal(set1, set2); -} - -/* Return an interval that ranges from min to max (inclusive) - */ -struct isl_basic_set *isl_basic_set_interval(struct isl_ctx *ctx, - isl_int min, isl_int max) -{ - int k; - struct isl_basic_set *bset = NULL; - - bset = isl_basic_set_alloc(ctx, 0, 1, 0, 0, 2); - if (!bset) - goto error; - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_int_set_si(bset->ineq[k][1], 1); - isl_int_neg(bset->ineq[k][0], min); - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_int_set_si(bset->ineq[k][1], -1); - isl_int_set(bset->ineq[k][0], max); - - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Return the Cartesian product of the basic sets in list (in the given order). - */ -__isl_give isl_basic_set *isl_basic_set_list_product( - __isl_take struct isl_basic_set_list *list) -{ - int i; - unsigned dim; - unsigned nparam; - unsigned extra; - unsigned n_eq; - unsigned n_ineq; - struct isl_basic_set *product = NULL; - - if (!list) - goto error; - isl_assert(list->ctx, list->n > 0, goto error); - isl_assert(list->ctx, list->p[0], goto error); - nparam = isl_basic_set_n_param(list->p[0]); - dim = isl_basic_set_n_dim(list->p[0]); - extra = list->p[0]->n_div; - n_eq = list->p[0]->n_eq; - n_ineq = list->p[0]->n_ineq; - for (i = 1; i < list->n; ++i) { - isl_assert(list->ctx, list->p[i], goto error); - isl_assert(list->ctx, - nparam == isl_basic_set_n_param(list->p[i]), goto error); - dim += isl_basic_set_n_dim(list->p[i]); - extra += list->p[i]->n_div; - n_eq += list->p[i]->n_eq; - n_ineq += list->p[i]->n_ineq; - } - product = isl_basic_set_alloc(list->ctx, nparam, dim, extra, - n_eq, n_ineq); - if (!product) - goto error; - dim = 0; - for (i = 0; i < list->n; ++i) { - isl_basic_set_add_constraints(product, - isl_basic_set_copy(list->p[i]), dim); - dim += isl_basic_set_n_dim(list->p[i]); - } - isl_basic_set_list_free(list); - return product; -error: - isl_basic_set_free(product); - isl_basic_set_list_free(list); - return NULL; -} - -struct isl_basic_map *isl_basic_map_product( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - struct isl_dim *dim_result = NULL; - struct isl_basic_map *bmap; - unsigned in1, in2, out1, out2, nparam, total, pos; - struct isl_dim_map *dim_map1, *dim_map2; - - if (!bmap1 || !bmap2) - goto error; - - isl_assert(bmap1->ctx, isl_dim_match(bmap1->dim, isl_dim_param, - bmap2->dim, isl_dim_param), goto error); - dim_result = isl_dim_product(isl_dim_copy(bmap1->dim), - isl_dim_copy(bmap2->dim)); - - in1 = isl_basic_map_n_in(bmap1); - in2 = isl_basic_map_n_in(bmap2); - out1 = isl_basic_map_n_out(bmap1); - out2 = isl_basic_map_n_out(bmap2); - nparam = isl_basic_map_n_param(bmap1); - - total = nparam + in1 + in2 + out1 + out2 + bmap1->n_div + bmap2->n_div; - dim_map1 = isl_dim_map_alloc(bmap1->ctx, total); - dim_map2 = isl_dim_map_alloc(bmap1->ctx, total); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_in, pos += nparam); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_in, pos += in1); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_out, pos += in2); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_out, pos += out1); - isl_dim_map_div(dim_map1, bmap1, pos += out2); - isl_dim_map_div(dim_map2, bmap2, pos += bmap1->n_div); - - bmap = isl_basic_map_alloc_dim(dim_result, - bmap1->n_div + bmap2->n_div, - bmap1->n_eq + bmap2->n_eq, - bmap1->n_ineq + bmap2->n_ineq); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap1, dim_map1); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap2, dim_map2); - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_flat_product( - __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2) -{ - isl_basic_map *prod; - - prod = isl_basic_map_product(bmap1, bmap2); - prod = isl_basic_map_flatten(prod); - return prod; -} - -__isl_give isl_basic_set *isl_basic_set_flat_product( - __isl_take isl_basic_set *bset1, __isl_take isl_basic_set *bset2) -{ - return isl_basic_map_flat_product(bset1, bset2); -} - -__isl_give isl_basic_map *isl_basic_map_range_product( - __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2) -{ - isl_dim *dim_result = NULL; - isl_basic_map *bmap; - unsigned in, out1, out2, nparam, total, pos; - struct isl_dim_map *dim_map1, *dim_map2; - - if (!bmap1 || !bmap2) - goto error; - - dim_result = isl_dim_range_product(isl_dim_copy(bmap1->dim), - isl_dim_copy(bmap2->dim)); - - in = isl_basic_map_dim(bmap1, isl_dim_in); - out1 = isl_basic_map_n_out(bmap1); - out2 = isl_basic_map_n_out(bmap2); - nparam = isl_basic_map_n_param(bmap1); - - total = nparam + in + out1 + out2 + bmap1->n_div + bmap2->n_div; - dim_map1 = isl_dim_map_alloc(bmap1->ctx, total); - dim_map2 = isl_dim_map_alloc(bmap1->ctx, total); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_in, pos += nparam); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_in, pos); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_out, pos += in); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_out, pos += out1); - isl_dim_map_div(dim_map1, bmap1, pos += out2); - isl_dim_map_div(dim_map2, bmap2, pos += bmap1->n_div); - - bmap = isl_basic_map_alloc_dim(dim_result, - bmap1->n_div + bmap2->n_div, - bmap1->n_eq + bmap2->n_eq, - bmap1->n_ineq + bmap2->n_ineq); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap1, dim_map1); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap2, dim_map2); - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_flat_range_product( - __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2) -{ - isl_basic_map *prod; - - prod = isl_basic_map_range_product(bmap1, bmap2); - prod = isl_basic_map_flatten_range(prod); - return prod; -} - -static __isl_give isl_map *map_product(__isl_take isl_map *map1, - __isl_take isl_map *map2, - __isl_give isl_dim *(*dim_product)(__isl_take isl_dim *left, - __isl_take isl_dim *right), - __isl_give isl_basic_map *(*basic_map_product)( - __isl_take isl_basic_map *left, __isl_take isl_basic_map *right)) -{ - unsigned flags = 0; - struct isl_map *result; - int i, j; - - if (!map1 || !map2) - goto error; - - isl_assert(map1->ctx, isl_dim_match(map1->dim, isl_dim_param, - map2->dim, isl_dim_param), goto error); - - if (ISL_F_ISSET(map1, ISL_MAP_DISJOINT) && - ISL_F_ISSET(map2, ISL_MAP_DISJOINT)) - ISL_FL_SET(flags, ISL_MAP_DISJOINT); - - result = isl_map_alloc_dim(dim_product(isl_dim_copy(map1->dim), - isl_dim_copy(map2->dim)), - map1->n * map2->n, flags); - if (!result) - goto error; - for (i = 0; i < map1->n; ++i) - for (j = 0; j < map2->n; ++j) { - struct isl_basic_map *part; - part = basic_map_product(isl_basic_map_copy(map1->p[i]), - isl_basic_map_copy(map2->p[j])); - if (isl_basic_map_is_empty(part)) - isl_basic_map_free(part); - else - result = isl_map_add_basic_map(result, part); - if (!result) - goto error; - } - isl_map_free(map1); - isl_map_free(map2); - return result; -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -/* Given two maps A -> B and C -> D, construct a map [A -> C] -> [B -> D] - */ -struct isl_map *isl_map_product(struct isl_map *map1, struct isl_map *map2) -{ - return map_product(map1, map2, &isl_dim_product, &isl_basic_map_product); -} - -/* Given two maps A -> B and C -> D, construct a map (A, C) -> (B, D) - */ -__isl_give isl_map *isl_map_flat_product(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - isl_map *prod; - - prod = isl_map_product(map1, map2); - prod = isl_map_flatten(prod); - return prod; -} - -/* Given two set A and B, construct its Cartesian product A x B. - */ -struct isl_set *isl_set_product(struct isl_set *set1, struct isl_set *set2) -{ - return (struct isl_set *)isl_map_product((struct isl_map *)set1, - (struct isl_map *)set2); -} - -__isl_give isl_set *isl_set_flat_product(__isl_take isl_set *set1, - __isl_take isl_set *set2) -{ - return (isl_set *)isl_map_flat_product((isl_map *)set1, (isl_map *)set2); -} - -/* Given two maps A -> B and C -> D, construct a map (A * C) -> [B -> D] - */ -__isl_give isl_map *isl_map_range_product(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - return map_product(map1, map2, &isl_dim_range_product, - &isl_basic_map_range_product); -} - -/* Given two maps A -> B and C -> D, construct a map (A * C) -> (B, D) - */ -__isl_give isl_map *isl_map_flat_range_product(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - isl_map *prod; - - prod = isl_map_range_product(map1, map2); - prod = isl_map_flatten_range(prod); - return prod; -} - -uint32_t isl_basic_map_get_hash(__isl_keep isl_basic_map *bmap) -{ - int i; - uint32_t hash = isl_hash_init(); - unsigned total; - - if (!bmap) - return 0; - bmap = isl_basic_map_copy(bmap); - bmap = isl_basic_map_normalize(bmap); - if (!bmap) - return 0; - total = isl_basic_map_total_dim(bmap); - isl_hash_byte(hash, bmap->n_eq & 0xFF); - for (i = 0; i < bmap->n_eq; ++i) { - uint32_t c_hash; - c_hash = isl_seq_get_hash(bmap->eq[i], 1 + total); - isl_hash_hash(hash, c_hash); - } - isl_hash_byte(hash, bmap->n_ineq & 0xFF); - for (i = 0; i < bmap->n_ineq; ++i) { - uint32_t c_hash; - c_hash = isl_seq_get_hash(bmap->ineq[i], 1 + total); - isl_hash_hash(hash, c_hash); - } - isl_hash_byte(hash, bmap->n_div & 0xFF); - for (i = 0; i < bmap->n_div; ++i) { - uint32_t c_hash; - if (isl_int_is_zero(bmap->div[i][0])) - continue; - isl_hash_byte(hash, i & 0xFF); - c_hash = isl_seq_get_hash(bmap->div[i], 1 + 1 + total); - isl_hash_hash(hash, c_hash); - } - isl_basic_map_free(bmap); - return hash; -} - -uint32_t isl_basic_set_get_hash(__isl_keep isl_basic_set *bset) -{ - return isl_basic_map_get_hash((isl_basic_map *)bset); -} - -uint32_t isl_map_get_hash(__isl_keep isl_map *map) -{ - int i; - uint32_t hash; - - if (!map) - return 0; - map = isl_map_copy(map); - map = isl_map_normalize(map); - if (!map) - return 0; - - hash = isl_hash_init(); - for (i = 0; i < map->n; ++i) { - uint32_t bmap_hash; - bmap_hash = isl_basic_map_get_hash(map->p[i]); - isl_hash_hash(hash, bmap_hash); - } - - isl_map_free(map); - - return hash; -} - -uint32_t isl_set_get_hash(__isl_keep isl_set *set) -{ - return isl_map_get_hash((isl_map *)set); -} - -/* Check if the value for dimension dim is completely determined - * by the values of the other parameters and variables. - * That is, check if dimension dim is involved in an equality. - */ -int isl_basic_set_dim_is_unique(struct isl_basic_set *bset, unsigned dim) -{ - int i; - unsigned nparam; - - if (!bset) - return -1; - nparam = isl_basic_set_n_param(bset); - for (i = 0; i < bset->n_eq; ++i) - if (!isl_int_is_zero(bset->eq[i][1 + nparam + dim])) - return 1; - return 0; -} - -/* Check if the value for dimension dim is completely determined - * by the values of the other parameters and variables. - * That is, check if dimension dim is involved in an equality - * for each of the subsets. - */ -int isl_set_dim_is_unique(struct isl_set *set, unsigned dim) -{ - int i; - - if (!set) - return -1; - for (i = 0; i < set->n; ++i) { - int unique; - unique = isl_basic_set_dim_is_unique(set->p[i], dim); - if (unique != 1) - return unique; - } - return 1; -} - -int isl_set_n_basic_set(__isl_keep isl_set *set) -{ - return set ? set->n : 0; -} - -int isl_map_foreach_basic_map(__isl_keep isl_map *map, - int (*fn)(__isl_take isl_basic_map *bmap, void *user), void *user) -{ - int i; - - if (!map) - return -1; - - for (i = 0; i < map->n; ++i) - if (fn(isl_basic_map_copy(map->p[i]), user) < 0) - return -1; - - return 0; -} - -int isl_set_foreach_basic_set(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_basic_set *bset, void *user), void *user) -{ - int i; - - if (!set) - return -1; - - for (i = 0; i < set->n; ++i) - if (fn(isl_basic_set_copy(set->p[i]), user) < 0) - return -1; - - return 0; -} - -__isl_give isl_basic_set *isl_basic_set_lift(__isl_take isl_basic_set *bset) -{ - struct isl_dim *dim; - - if (!bset) - return NULL; - - bset = isl_basic_set_cow(bset); - if (!bset) - return NULL; - - dim = isl_basic_set_get_dim(bset); - dim = isl_dim_lift(dim, bset->n_div); - if (!dim) - goto error; - isl_dim_free(bset->dim); - bset->dim = dim; - bset->extra -= bset->n_div; - bset->n_div = 0; - - bset = isl_basic_set_finalize(bset); - - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -__isl_give isl_set *isl_set_lift(__isl_take isl_set *set) -{ - int i; - struct isl_dim *dim; - unsigned n_div; - - set = isl_set_align_divs(set); - - if (!set) - return NULL; - - set = isl_set_cow(set); - if (!set) - return NULL; - - n_div = set->p[0]->n_div; - dim = isl_set_get_dim(set); - dim = isl_dim_lift(dim, n_div); - if (!dim) - goto error; - isl_dim_free(set->dim); - set->dim = dim; - - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_lift(set->p[i]); - if (!set->p[i]) - goto error; - } - - return set; -error: - isl_set_free(set); - return NULL; -} - -__isl_give isl_map *isl_set_lifting(__isl_take isl_set *set) -{ - struct isl_dim *dim; - struct isl_basic_map *bmap; - unsigned n_set; - unsigned n_div; - unsigned n_param; - unsigned total; - int i, k, l; - - set = isl_set_align_divs(set); - - if (!set) - return NULL; - - dim = isl_set_get_dim(set); - if (set->n == 0 || set->p[0]->n_div == 0) { - isl_set_free(set); - return isl_map_identity(isl_dim_map_from_set(dim)); - } - - n_div = set->p[0]->n_div; - dim = isl_dim_map_from_set(dim); - n_param = isl_dim_size(dim, isl_dim_param); - n_set = isl_dim_size(dim, isl_dim_in); - dim = isl_dim_extend(dim, n_param, n_set, n_set + n_div); - bmap = isl_basic_map_alloc_dim(dim, 0, n_set, 2 * n_div); - for (i = 0; i < n_set; ++i) - bmap = var_equal(bmap, i); - - total = n_param + n_set + n_set + n_div; - for (i = 0; i < n_div; ++i) { - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->ineq[k], set->p[0]->div[i]+1, 1+n_param); - isl_seq_clr(bmap->ineq[k]+1+n_param, n_set); - isl_seq_cpy(bmap->ineq[k]+1+n_param+n_set, - set->p[0]->div[i]+1+1+n_param, n_set + n_div); - isl_int_neg(bmap->ineq[k][1+n_param+n_set+n_set+i], - set->p[0]->div[i][0]); - - l = isl_basic_map_alloc_inequality(bmap); - if (l < 0) - goto error; - isl_seq_neg(bmap->ineq[l], bmap->ineq[k], 1 + total); - isl_int_add(bmap->ineq[l][0], bmap->ineq[l][0], - set->p[0]->div[i][0]); - isl_int_sub_ui(bmap->ineq[l][0], bmap->ineq[l][0], 1); - } - - isl_set_free(set); - bmap = isl_basic_map_simplify(bmap); - bmap = isl_basic_map_finalize(bmap); - return isl_map_from_basic_map(bmap); -error: - isl_set_free(set); - isl_basic_map_free(bmap); - return NULL; -} - -int isl_basic_set_size(__isl_keep isl_basic_set *bset) -{ - unsigned dim; - int size = 0; - - if (!bset) - return -1; - - dim = isl_basic_set_total_dim(bset); - size += bset->n_eq * (1 + dim); - size += bset->n_ineq * (1 + dim); - size += bset->n_div * (2 + dim); - - return size; -} - -int isl_set_size(__isl_keep isl_set *set) -{ - int i; - int size = 0; - - if (!set) - return -1; - - for (i = 0; i < set->n; ++i) - size += isl_basic_set_size(set->p[i]); - - return size; -} - -int isl_basic_map_dim_is_bounded(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos) -{ - int i; - int lower, upper; - - if (!bmap) - return -1; - - isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), return -1); - - pos += isl_basic_map_offset(bmap, type); - - for (i = 0; i < bmap->n_eq; ++i) - if (!isl_int_is_zero(bmap->eq[i][pos])) - return 1; - - lower = upper = 0; - for (i = 0; i < bmap->n_ineq; ++i) { - int sgn = isl_int_sgn(bmap->ineq[i][pos]); - if (sgn > 0) - lower = 1; - if (sgn < 0) - upper = 1; - } - - return lower && upper; -} - -int isl_map_dim_is_bounded(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos) -{ - int i; - - if (!map) - return -1; - - for (i = 0; i < map->n; ++i) { - int bounded; - bounded = isl_basic_map_dim_is_bounded(map->p[i], type, pos); - if (bounded < 0 || !bounded) - return bounded; - } - - return 1; -} - -/* Return 1 if the specified dim is involved in both an upper bound - * and a lower bound. - */ -int isl_set_dim_is_bounded(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos) -{ - return isl_map_dim_is_bounded((isl_map *)set, type, pos); -} - -/* For each of the "n" variables starting at "first", determine - * the sign of the variable and put the results in the first "n" - * elements of the array "signs". - * Sign - * 1 means that the variable is non-negative - * -1 means that the variable is non-positive - * 0 means the variable attains both positive and negative values. - */ -int isl_basic_set_vars_get_sign(__isl_keep isl_basic_set *bset, - unsigned first, unsigned n, int *signs) -{ - isl_vec *bound = NULL; - struct isl_tab *tab = NULL; - struct isl_tab_undo *snap; - int i; - - if (!bset || !signs) - return -1; - - bound = isl_vec_alloc(bset->ctx, 1 + isl_basic_set_total_dim(bset)); - tab = isl_tab_from_basic_set(bset); - if (!bound || !tab) - goto error; - - isl_seq_clr(bound->el, bound->size); - isl_int_set_si(bound->el[0], -1); - - snap = isl_tab_snap(tab); - for (i = 0; i < n; ++i) { - int empty; - - isl_int_set_si(bound->el[1 + first + i], -1); - if (isl_tab_add_ineq(tab, bound->el) < 0) - goto error; - empty = tab->empty; - isl_int_set_si(bound->el[1 + first + i], 0); - if (isl_tab_rollback(tab, snap) < 0) - goto error; - - if (empty) { - signs[i] = 1; - continue; - } - - isl_int_set_si(bound->el[1 + first + i], 1); - if (isl_tab_add_ineq(tab, bound->el) < 0) - goto error; - empty = tab->empty; - isl_int_set_si(bound->el[1 + first + i], 0); - if (isl_tab_rollback(tab, snap) < 0) - goto error; - - signs[i] = empty ? -1 : 0; - } - - isl_tab_free(tab); - isl_vec_free(bound); - return 0; -error: - isl_tab_free(tab); - isl_vec_free(bound); - return -1; -} - -int isl_basic_set_dims_get_sign(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n, int *signs) -{ - if (!bset || !signs) - return -1; - isl_assert(bset->ctx, first + n <= isl_basic_set_dim(bset, type), - return -1); - - first += pos(bset->dim, type) - 1; - return isl_basic_set_vars_get_sign(bset, first, n, signs); -} - -/* Check if the given basic map is obviously single-valued. - * In particular, for each output dimension, check that there is - * an equality that defines the output dimension in terms of - * earlier dimensions. - */ -int isl_basic_map_plain_is_single_valued(__isl_keep isl_basic_map *bmap) -{ - int i, j; - unsigned total; - unsigned n_out; - unsigned o_out; - - if (!bmap) - return -1; - - total = 1 + isl_basic_map_total_dim(bmap); - n_out = isl_basic_map_dim(bmap, isl_dim_out); - o_out = isl_basic_map_offset(bmap, isl_dim_out); - - for (i = 0; i < n_out; ++i) { - for (j = 0; j < bmap->n_eq; ++j) { - if (isl_int_is_zero(bmap->eq[j][o_out + i])) - continue; - if (isl_seq_first_non_zero(bmap->eq[j] + o_out + i + 1, - total - (o_out + i + 1)) == -1) - break; - } - if (j >= bmap->n_eq) - return 0; - } - - return 1; -} - -/* Check if the given map is obviously single-valued. - */ -int isl_map_plain_is_single_valued(__isl_keep isl_map *map) -{ - if (!map) - return -1; - if (map->n == 0) - return 1; - if (map->n >= 2) - return 0; - - return isl_basic_map_plain_is_single_valued(map->p[0]); -} - -/* Check if the given map is single-valued. - * We simply compute - * - * M \circ M^-1 - * - * and check if the result is a subset of the identity mapping. - */ -int isl_map_is_single_valued(__isl_keep isl_map *map) -{ - isl_dim *dim; - isl_map *test; - isl_map *id; - int sv; - - sv = isl_map_plain_is_single_valued(map); - if (sv < 0 || sv) - return sv; - - test = isl_map_reverse(isl_map_copy(map)); - test = isl_map_apply_range(test, isl_map_copy(map)); - - dim = isl_dim_map_from_set(isl_dim_range(isl_map_get_dim(map))); - id = isl_map_identity(dim); - - sv = isl_map_is_subset(test, id); - - isl_map_free(test); - isl_map_free(id); - - return sv; -} - -int isl_map_is_injective(__isl_keep isl_map *map) -{ - int in; - - map = isl_map_copy(map); - map = isl_map_reverse(map); - in = isl_map_is_single_valued(map); - isl_map_free(map); - - return in; -} - -/* Check if the given map is obviously injective. - */ -int isl_map_plain_is_injective(__isl_keep isl_map *map) -{ - int in; - - map = isl_map_copy(map); - map = isl_map_reverse(map); - in = isl_map_plain_is_single_valued(map); - isl_map_free(map); - - return in; -} - -int isl_map_is_bijective(__isl_keep isl_map *map) -{ - int sv; - - sv = isl_map_is_single_valued(map); - if (sv < 0 || !sv) - return sv; - - return isl_map_is_injective(map); -} - -int isl_set_is_singleton(__isl_keep isl_set *set) -{ - return isl_map_is_single_valued((isl_map *)set); -} - -int isl_map_is_translation(__isl_keep isl_map *map) -{ - int ok; - isl_set *delta; - - delta = isl_map_deltas(isl_map_copy(map)); - ok = isl_set_is_singleton(delta); - isl_set_free(delta); - - return ok; -} - -static int unique(isl_int *p, unsigned pos, unsigned len) -{ - if (isl_seq_first_non_zero(p, pos) != -1) - return 0; - if (isl_seq_first_non_zero(p + pos + 1, len - pos - 1) != -1) - return 0; - return 1; -} - -int isl_basic_set_is_box(__isl_keep isl_basic_set *bset) -{ - int i, j; - unsigned nvar; - unsigned ovar; - - if (!bset) - return -1; - - if (isl_basic_set_dim(bset, isl_dim_div) != 0) - return 0; - - nvar = isl_basic_set_dim(bset, isl_dim_set); - ovar = isl_dim_offset(bset->dim, isl_dim_set); - for (j = 0; j < nvar; ++j) { - int lower = 0, upper = 0; - for (i = 0; i < bset->n_eq; ++i) { - if (isl_int_is_zero(bset->eq[i][1 + ovar + j])) - continue; - if (!unique(bset->eq[i] + 1 + ovar, j, nvar)) - return 0; - break; - } - if (i < bset->n_eq) - continue; - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_int_is_zero(bset->ineq[i][1 + ovar + j])) - continue; - if (!unique(bset->ineq[i] + 1 + ovar, j, nvar)) - return 0; - if (isl_int_is_pos(bset->ineq[i][1 + ovar + j])) - lower = 1; - else - upper = 1; - } - if (!lower || !upper) - return 0; - } - - return 1; -} - -int isl_set_is_box(__isl_keep isl_set *set) -{ - if (!set) - return -1; - if (set->n != 1) - return 0; - - return isl_basic_set_is_box(set->p[0]); -} - -int isl_basic_set_is_wrapping(__isl_keep isl_basic_set *bset) -{ - if (!bset) - return -1; - - return isl_dim_is_wrapping(bset->dim); -} - -int isl_set_is_wrapping(__isl_keep isl_set *set) -{ - if (!set) - return -1; - - return isl_dim_is_wrapping(set->dim); -} - -__isl_give isl_basic_set *isl_basic_map_wrap(__isl_take isl_basic_map *bmap) -{ - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - bmap->dim = isl_dim_wrap(bmap->dim); - if (!bmap->dim) - goto error; - - bmap = isl_basic_map_finalize(bmap); - - return (isl_basic_set *)bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_set *isl_map_wrap(__isl_take isl_map *map) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = (isl_basic_map *)isl_basic_map_wrap(map->p[i]); - if (!map->p[i]) - goto error; - } - map->dim = isl_dim_wrap(map->dim); - if (!map->dim) - goto error; - - return (isl_set *)map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_set_unwrap(__isl_take isl_basic_set *bset) -{ - bset = isl_basic_set_cow(bset); - if (!bset) - return NULL; - - bset->dim = isl_dim_unwrap(bset->dim); - if (!bset->dim) - goto error; - - bset = isl_basic_set_finalize(bset); - - return (isl_basic_map *)bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -__isl_give isl_map *isl_set_unwrap(__isl_take isl_set *set) -{ - int i; - - if (!set) - return NULL; - - if (!isl_set_is_wrapping(set)) - isl_die(set->ctx, isl_error_invalid, "not a wrapping set", - goto error); - - set = isl_set_cow(set); - if (!set) - return NULL; - - for (i = 0; i < set->n; ++i) { - set->p[i] = (isl_basic_set *)isl_basic_set_unwrap(set->p[i]); - if (!set->p[i]) - goto error; - } - - set->dim = isl_dim_unwrap(set->dim); - if (!set->dim) - goto error; - - return (isl_map *)set; -error: - isl_set_free(set); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_reset(__isl_take isl_basic_map *bmap, - enum isl_dim_type type) -{ - if (!bmap) - return NULL; - - if (!isl_dim_is_named_or_nested(bmap->dim, type)) - return bmap; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - bmap->dim = isl_dim_reset(bmap->dim, type); - if (!bmap->dim) - goto error; - - bmap = isl_basic_map_finalize(bmap); - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_map *isl_map_reset(__isl_take isl_map *map, - enum isl_dim_type type) -{ - int i; - - if (!map) - return NULL; - - if (!isl_dim_is_named_or_nested(map->dim, type)) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_reset(map->p[i], type); - if (!map->p[i]) - goto error; - } - map->dim = isl_dim_reset(map->dim, type); - if (!map->dim) - goto error; - - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_flatten(__isl_take isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - - if (!bmap->dim->nested[0] && !bmap->dim->nested[1]) - return bmap; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - bmap->dim = isl_dim_flatten(bmap->dim); - if (!bmap->dim) - goto error; - - bmap = isl_basic_map_finalize(bmap); - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_flatten(__isl_take isl_basic_set *bset) -{ - return (isl_basic_set *)isl_basic_map_flatten((isl_basic_map *)bset); -} - -__isl_give isl_basic_map *isl_basic_map_flatten_range( - __isl_take isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - - if (!bmap->dim->nested[1]) - return bmap; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - bmap->dim = isl_dim_flatten_range(bmap->dim); - if (!bmap->dim) - goto error; - - bmap = isl_basic_map_finalize(bmap); - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_map *isl_map_flatten(__isl_take isl_map *map) -{ - int i; - - if (!map) - return NULL; - - if (!map->dim->nested[0] && !map->dim->nested[1]) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_flatten(map->p[i]); - if (!map->p[i]) - goto error; - } - map->dim = isl_dim_flatten(map->dim); - if (!map->dim) - goto error; - - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_flatten(__isl_take isl_set *set) -{ - return (isl_set *)isl_map_flatten((isl_map *)set); -} - -__isl_give isl_map *isl_set_flatten_map(__isl_take isl_set *set) -{ - isl_dim *dim, *flat_dim; - isl_map *map; - - dim = isl_set_get_dim(set); - flat_dim = isl_dim_flatten(isl_dim_copy(dim)); - map = isl_map_identity(isl_dim_join(isl_dim_reverse(dim), flat_dim)); - map = isl_map_intersect_domain(map, set); - - return map; -} - -__isl_give isl_map *isl_map_flatten_range(__isl_take isl_map *map) -{ - int i; - - if (!map) - return NULL; - - if (!map->dim->nested[1]) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_flatten_range(map->p[i]); - if (!map->p[i]) - goto error; - } - map->dim = isl_dim_flatten_range(map->dim); - if (!map->dim) - goto error; - - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Reorder the dimensions of "bmap" according to the given dim_map - * and set the dimension specification to "dim". - */ -__isl_give isl_basic_map *isl_basic_map_realign(__isl_take isl_basic_map *bmap, - __isl_take isl_dim *dim, __isl_take struct isl_dim_map *dim_map) -{ - isl_basic_map *res; - - bmap = isl_basic_map_cow(bmap); - if (!bmap || !dim || !dim_map) - goto error; - - res = isl_basic_map_alloc_dim(dim, - bmap->n_div, bmap->n_eq, bmap->n_ineq); - res = isl_basic_map_add_constraints_dim_map(res, bmap, dim_map); - res = isl_basic_map_finalize(res); - return res; -error: - free(dim_map); - isl_basic_map_free(bmap); - isl_dim_free(dim); - return NULL; -} - -/* Reorder the dimensions of "map" according to given reordering. - */ -__isl_give isl_map *isl_map_realign(__isl_take isl_map *map, - __isl_take isl_reordering *r) -{ - int i; - struct isl_dim_map *dim_map; - - map = isl_map_cow(map); - dim_map = isl_dim_map_from_reordering(r); - if (!map || !r || !dim_map) - goto error; - - for (i = 0; i < map->n; ++i) { - struct isl_dim_map *dim_map_i; - - dim_map_i = isl_dim_map_extend(dim_map, map->p[i]); - - map->p[i] = isl_basic_map_realign(map->p[i], - isl_dim_copy(r->dim), dim_map_i); - - if (!map->p[i]) - goto error; - } - - map = isl_map_reset_dim(map, isl_dim_copy(r->dim)); - - isl_reordering_free(r); - free(dim_map); - return map; -error: - free(dim_map); - isl_map_free(map); - isl_reordering_free(r); - return NULL; -} - -__isl_give isl_set *isl_set_realign(__isl_take isl_set *set, - __isl_take isl_reordering *r) -{ - return (isl_set *)isl_map_realign((isl_map *)set, r); -} - -__isl_give isl_map *isl_map_align_params(__isl_take isl_map *map, - __isl_take isl_dim *model) -{ - isl_ctx *ctx; - - if (!map || !model) - goto error; - - ctx = isl_dim_get_ctx(model); - if (!isl_dim_has_named_params(model)) - isl_die(ctx, isl_error_invalid, - "model has unnamed parameters", goto error); - if (!isl_dim_has_named_params(map->dim)) - isl_die(ctx, isl_error_invalid, - "relation has unnamed parameters", goto error); - if (!isl_dim_match(map->dim, isl_dim_param, model, isl_dim_param)) { - isl_reordering *exp; - - model = isl_dim_drop(model, isl_dim_in, - 0, isl_dim_size(model, isl_dim_in)); - model = isl_dim_drop(model, isl_dim_out, - 0, isl_dim_size(model, isl_dim_out)); - exp = isl_parameter_alignment_reordering(map->dim, model); - exp = isl_reordering_extend_dim(exp, isl_map_get_dim(map)); - map = isl_map_realign(map, exp); - } - - isl_dim_free(model); - return map; -error: - isl_dim_free(model); - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_align_params(__isl_take isl_set *set, - __isl_take isl_dim *model) -{ - return isl_map_align_params(set, model); -} - -__isl_give isl_mat *isl_basic_map_equalities_matrix( - __isl_keep isl_basic_map *bmap, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5) -{ - enum isl_dim_type c[5] = { c1, c2, c3, c4, c5 }; - struct isl_mat *mat; - int i, j, k; - int pos; - - if (!bmap) - return NULL; - mat = isl_mat_alloc(bmap->ctx, bmap->n_eq, - isl_basic_map_total_dim(bmap) + 1); - if (!mat) - return NULL; - for (i = 0; i < bmap->n_eq; ++i) - for (j = 0, pos = 0; j < 5; ++j) { - int off = isl_basic_map_offset(bmap, c[j]); - for (k = 0; k < isl_basic_map_dim(bmap, c[j]); ++k) { - isl_int_set(mat->row[i][pos], - bmap->eq[i][off + k]); - ++pos; - } - } - - return mat; -} - -__isl_give isl_mat *isl_basic_map_inequalities_matrix( - __isl_keep isl_basic_map *bmap, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5) -{ - enum isl_dim_type c[5] = { c1, c2, c3, c4, c5 }; - struct isl_mat *mat; - int i, j, k; - int pos; - - if (!bmap) - return NULL; - mat = isl_mat_alloc(bmap->ctx, bmap->n_ineq, - isl_basic_map_total_dim(bmap) + 1); - if (!mat) - return NULL; - for (i = 0; i < bmap->n_ineq; ++i) - for (j = 0, pos = 0; j < 5; ++j) { - int off = isl_basic_map_offset(bmap, c[j]); - for (k = 0; k < isl_basic_map_dim(bmap, c[j]); ++k) { - isl_int_set(mat->row[i][pos], - bmap->ineq[i][off + k]); - ++pos; - } - } - - return mat; -} - -__isl_give isl_basic_map *isl_basic_map_from_constraint_matrices( - __isl_take isl_dim *dim, - __isl_take isl_mat *eq, __isl_take isl_mat *ineq, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5) -{ - enum isl_dim_type c[5] = { c1, c2, c3, c4, c5 }; - isl_basic_map *bmap; - unsigned total; - unsigned extra; - int i, j, k, l; - int pos; - - if (!dim || !eq || !ineq) - goto error; - - if (eq->n_col != ineq->n_col) - isl_die(dim->ctx, isl_error_invalid, - "equalities and inequalities matrices should have " - "same number of columns", goto error); - - total = 1 + isl_dim_total(dim); - - if (eq->n_col < total) - isl_die(dim->ctx, isl_error_invalid, - "number of columns too small", goto error); - - extra = eq->n_col - total; - - bmap = isl_basic_map_alloc_dim(isl_dim_copy(dim), extra, - eq->n_row, ineq->n_row); - if (!bmap) - goto error; - for (i = 0; i < extra; ++i) { - k = isl_basic_map_alloc_div(bmap); - if (k < 0) - goto error; - isl_int_set_si(bmap->div[k][0], 0); - } - for (i = 0; i < eq->n_row; ++i) { - l = isl_basic_map_alloc_equality(bmap); - if (l < 0) - goto error; - for (j = 0, pos = 0; j < 5; ++j) { - int off = isl_basic_map_offset(bmap, c[j]); - for (k = 0; k < isl_basic_map_dim(bmap, c[j]); ++k) { - isl_int_set(bmap->eq[l][off + k], - eq->row[i][pos]); - ++pos; - } - } - } - for (i = 0; i < ineq->n_row; ++i) { - l = isl_basic_map_alloc_inequality(bmap); - if (l < 0) - goto error; - for (j = 0, pos = 0; j < 5; ++j) { - int off = isl_basic_map_offset(bmap, c[j]); - for (k = 0; k < isl_basic_map_dim(bmap, c[j]); ++k) { - isl_int_set(bmap->ineq[l][off + k], - ineq->row[i][pos]); - ++pos; - } - } - } - - isl_dim_free(dim); - isl_mat_free(eq); - isl_mat_free(ineq); - - return bmap; -error: - isl_dim_free(dim); - isl_mat_free(eq); - isl_mat_free(ineq); - return NULL; -} - -__isl_give isl_mat *isl_basic_set_equalities_matrix( - __isl_keep isl_basic_set *bset, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, enum isl_dim_type c4) -{ - return isl_basic_map_equalities_matrix((isl_basic_map *)bset, - c1, c2, c3, c4, isl_dim_in); -} - -__isl_give isl_mat *isl_basic_set_inequalities_matrix( - __isl_keep isl_basic_set *bset, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, enum isl_dim_type c4) -{ - return isl_basic_map_inequalities_matrix((isl_basic_map *)bset, - c1, c2, c3, c4, isl_dim_in); -} - -__isl_give isl_basic_set *isl_basic_set_from_constraint_matrices( - __isl_take isl_dim *dim, - __isl_take isl_mat *eq, __isl_take isl_mat *ineq, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, enum isl_dim_type c4) -{ - return (isl_basic_set*) - isl_basic_map_from_constraint_matrices(dim, eq, ineq, - c1, c2, c3, c4, isl_dim_in); -} - -int isl_basic_map_can_zip(__isl_keep isl_basic_map *bmap) -{ - if (!bmap) - return -1; - - return isl_dim_can_zip(bmap->dim); -} - -int isl_map_can_zip(__isl_keep isl_map *map) -{ - if (!map) - return -1; - - return isl_dim_can_zip(map->dim); -} - -/* Given a basic map (A -> B) -> (C -> D), return the corresponding basic map - * (A -> C) -> (B -> D). - */ -__isl_give isl_basic_map *isl_basic_map_zip(__isl_take isl_basic_map *bmap) -{ - unsigned pos; - unsigned n1; - unsigned n2; - - if (!bmap) - return NULL; - - if (!isl_basic_map_can_zip(bmap)) - isl_die(bmap->ctx, isl_error_invalid, - "basic map cannot be zipped", goto error); - pos = isl_basic_map_offset(bmap, isl_dim_in) + - isl_dim_size(bmap->dim->nested[0], isl_dim_in); - n1 = isl_dim_size(bmap->dim->nested[0], isl_dim_out); - n2 = isl_dim_size(bmap->dim->nested[1], isl_dim_in); - bmap = isl_basic_map_swap_vars(bmap, pos, n1, n2); - if (!bmap) - return NULL; - bmap->dim = isl_dim_zip(bmap->dim); - if (!bmap->dim) - goto error; - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Given a map (A -> B) -> (C -> D), return the corresponding map - * (A -> C) -> (B -> D). - */ -__isl_give isl_map *isl_map_zip(__isl_take isl_map *map) -{ - int i; - - if (!map) - return NULL; - - if (!isl_map_can_zip(map)) - isl_die(map->ctx, isl_error_invalid, "map cannot be zipped", - goto error); - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_zip(map->p[i]); - if (!map->p[i]) - goto error; - } - - map->dim = isl_dim_zip(map->dim); - if (!map->dim) - goto error; - - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Construct a basic map mapping the domain of the affine expression - * to a one-dimensional range prescribed by the affine expression. - */ -__isl_give isl_basic_map *isl_basic_map_from_aff(__isl_take isl_aff *aff) -{ - int k; - int pos; - isl_local_space *ls; - isl_basic_map *bmap; - - if (!aff) - return NULL; - - ls = isl_aff_get_local_space(aff); - ls = isl_local_space_from_domain(ls); - ls = isl_local_space_add_dims(ls, isl_dim_out, 1); - bmap = isl_basic_map_from_local_space(ls); - bmap = isl_basic_map_extend_constraints(bmap, 1, 0); - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - - pos = isl_basic_map_offset(bmap, isl_dim_out); - isl_seq_cpy(bmap->eq[k], aff->v->el + 1, pos); - isl_int_neg(bmap->eq[k][pos], aff->v->el[0]); - isl_seq_cpy(bmap->eq[k] + pos + 1, aff->v->el + 1 + pos, - aff->v->size - (pos + 1)); - - isl_aff_free(aff); - bmap = isl_basic_map_finalize(bmap); - return bmap; -error: - isl_aff_free(aff); - isl_basic_map_free(bmap); - return NULL; -} - -/* Construct a basic map mapping a domain in the given space to - * to an n-dimensional range, with n the number of elements in the list, - * where each coordinate in the range is prescribed by the - * corresponding affine expression. - * The domains of all affine expressions in the list are assumed to match - * domain_dim. - */ -__isl_give isl_basic_map *isl_basic_map_from_aff_list( - __isl_take isl_dim *domain_dim, __isl_take isl_aff_list *list) -{ - int i; - isl_dim *dim; - isl_basic_map *bmap; - - if (!list) - return NULL; - - dim = isl_dim_from_domain(domain_dim); - bmap = isl_basic_map_universe(dim); - - for (i = 0; i < list->n; ++i) { - isl_aff *aff; - isl_basic_map *bmap_i; - - aff = isl_aff_copy(list->p[i]); - bmap_i = isl_basic_map_from_aff(aff); - - bmap = isl_basic_map_flat_range_product(bmap, bmap_i); - } - - isl_aff_list_free(list); - return bmap; -} diff --git a/cloog-0.16.3/isl/isl_map_no_piplib.c b/cloog-0.16.3/isl/isl_map_no_piplib.c deleted file mode 100644 index 8a28b07..0000000 --- a/cloog-0.16.3/isl/isl_map_no_piplib.c +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include "isl_map_piplib.h" -#include - -struct isl_map *isl_pip_basic_map_lexopt( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty, int max) -{ - isl_basic_map_free(bmap); - isl_basic_set_free(dom); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_map_piplib.c b/cloog-0.16.3/isl/isl_map_piplib.c deleted file mode 100644 index b1434eb..0000000 --- a/cloog-0.16.3/isl/isl_map_piplib.c +++ /dev/null @@ -1,476 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include -#include -#include "isl_piplib.h" -#include "isl_map_piplib.h" - -static void copy_values_from(isl_int *dst, Entier *src, unsigned n) -{ - int i; - - for (i = 0; i < n; ++i) - entier_assign(dst[i], src[i]); -} - -static void add_value(isl_int *dst, Entier *src) -{ - mpz_add(*dst, *dst, *src); -} - -static void copy_constraint_from(isl_int *dst, PipVector *src, - unsigned nparam, unsigned n_in, unsigned n_out, - unsigned extra, int *pos) -{ - int i; - - copy_values_from(dst, src->the_vector+src->nb_elements-1, 1); - copy_values_from(dst+1, src->the_vector, nparam+n_in); - isl_seq_clr(dst+1+nparam+n_in, n_out); - isl_seq_clr(dst+1+nparam+n_in+n_out, extra); - for (i = 0; i + n_in + nparam < src->nb_elements-1; ++i) { - int p = pos[i]; - add_value(&dst[1+nparam+n_in+n_out+p], - &src->the_vector[n_in+nparam+i]); - } -} - -static int add_inequality(struct isl_ctx *ctx, - struct isl_basic_map *bmap, int *pos, PipVector *vec) -{ - unsigned nparam = isl_basic_map_n_param(bmap); - unsigned n_in = isl_basic_map_n_in(bmap); - unsigned n_out = isl_basic_map_n_out(bmap); - unsigned n_div = isl_basic_map_n_div(bmap); - int i = isl_basic_map_alloc_inequality(bmap); - if (i < 0) - return -1; - copy_constraint_from(bmap->ineq[i], vec, - nparam, n_in, n_out, n_div, pos); - - return i; -} - -/* For a div d = floor(f/m), add the constraints - * - * f - m d >= 0 - * -(f-(n-1)) + m d >= 0 - * - * Note that the second constraint is the negation of - * - * f - m d >= n - */ -static int add_div_constraints(struct isl_ctx *ctx, - struct isl_basic_map *bmap, int *pos, PipNewparm *p, unsigned div) -{ - int i, j; - unsigned total = isl_basic_map_total_dim(bmap); - unsigned div_pos = 1 + total - bmap->n_div + div; - - i = add_inequality(ctx, bmap, pos, p->vector); - if (i < 0) - return -1; - copy_values_from(&bmap->ineq[i][div_pos], &p->deno, 1); - isl_int_neg(bmap->ineq[i][div_pos], bmap->ineq[i][div_pos]); - - j = isl_basic_map_alloc_inequality(bmap); - if (j < 0) - return -1; - isl_seq_neg(bmap->ineq[j], bmap->ineq[i], 1 + total); - isl_int_add(bmap->ineq[j][0], bmap->ineq[j][0], bmap->ineq[j][div_pos]); - isl_int_sub_ui(bmap->ineq[j][0], bmap->ineq[j][0], 1); - return j; -} - -static int add_equality(struct isl_ctx *ctx, - struct isl_basic_map *bmap, int *pos, - unsigned var, PipVector *vec) -{ - int i; - unsigned nparam = isl_basic_map_n_param(bmap); - unsigned n_in = isl_basic_map_n_in(bmap); - unsigned n_out = isl_basic_map_n_out(bmap); - - isl_assert(ctx, var < n_out, return -1); - - i = isl_basic_map_alloc_equality(bmap); - if (i < 0) - return -1; - copy_constraint_from(bmap->eq[i], vec, - nparam, n_in, n_out, bmap->extra, pos); - isl_int_set_si(bmap->eq[i][1+nparam+n_in+var], -1); - - return i; -} - -static int find_div(struct isl_ctx *ctx, - struct isl_basic_map *bmap, int *pos, PipNewparm *p) -{ - int i, j; - unsigned nparam = isl_basic_map_n_param(bmap); - unsigned n_in = isl_basic_map_n_in(bmap); - unsigned n_out = isl_basic_map_n_out(bmap); - - i = isl_basic_map_alloc_div(bmap); - if (i < 0) - return -1; - - copy_constraint_from(bmap->div[i]+1, p->vector, - nparam, n_in, n_out, bmap->extra, pos); - - copy_values_from(bmap->div[i], &p->deno, 1); - for (j = 0; j < i; ++j) - if (isl_seq_eq(bmap->div[i], bmap->div[j], - 1+1+isl_basic_map_total_dim(bmap)+j)) { - isl_basic_map_free_div(bmap, 1); - return j; - } - - if (add_div_constraints(ctx, bmap, pos, p, i) < 0) - return -1; - - return i; -} - -/* Count some properties of a quast - * - maximal number of new parameters - * - maximal depth - * - total number of solutions - * - total number of empty branches - */ -static void quast_count(PipQuast *q, int *maxnew, int depth, int *maxdepth, - int *sol, int *nosol) -{ - PipNewparm *p; - - for (p = q->newparm; p; p = p->next) - if (p->rank > *maxnew) - *maxnew = p->rank; - if (q->condition) { - if (++depth > *maxdepth) - *maxdepth = depth; - quast_count(q->next_else, maxnew, depth, maxdepth, sol, nosol); - quast_count(q->next_then, maxnew, depth, maxdepth, sol, nosol); - } else { - if (q->list) - ++(*sol); - else - ++(*nosol); - } -} - -/* - * pos: array of length bmap->set.extra, mapping each of the existential - * variables PIP proposes to an existential variable in bmap - * bmap: collects the currently active constraints - * rest: collects the empty leaves of the quast (if not NULL) - */ -struct scan_data { - struct isl_ctx *ctx; - struct isl_basic_map *bmap; - struct isl_set **rest; - int *pos; -}; - -/* - * New existentially quantified variables are places after the existing ones. - */ -static struct isl_map *scan_quast_r(struct scan_data *data, PipQuast *q, - struct isl_map *map) -{ - PipNewparm *p; - struct isl_basic_map *bmap = data->bmap; - unsigned old_n_div = bmap->n_div; - unsigned nparam = isl_basic_map_n_param(bmap); - unsigned n_in = isl_basic_map_n_in(bmap); - unsigned n_out = isl_basic_map_n_out(bmap); - - if (!map) - goto error; - - for (p = q->newparm; p; p = p->next) { - int pos; - unsigned pip_param = nparam + n_in; - - pos = find_div(data->ctx, bmap, data->pos, p); - if (pos < 0) - goto error; - data->pos[p->rank - pip_param] = pos; - } - - if (q->condition) { - int pos = add_inequality(data->ctx, bmap, data->pos, - q->condition); - if (pos < 0) - goto error; - map = scan_quast_r(data, q->next_then, map); - - if (isl_inequality_negate(bmap, pos)) - goto error; - map = scan_quast_r(data, q->next_else, map); - - if (isl_basic_map_free_inequality(bmap, 1)) - goto error; - } else if (q->list) { - PipList *l; - int j; - /* if bmap->n_out is zero, we are only interested in the domains - * where a solution exists and not in the actual solution - */ - for (j = 0, l = q->list; j < n_out && l; ++j, l = l->next) - if (add_equality(data->ctx, bmap, data->pos, j, - l->vector) < 0) - goto error; - map = isl_map_add_basic_map(map, isl_basic_map_copy(bmap)); - if (isl_basic_map_free_equality(bmap, n_out)) - goto error; - } else if (data->rest) { - struct isl_basic_set *bset; - bset = isl_basic_set_from_basic_map(isl_basic_map_copy(bmap)); - bset = isl_basic_set_drop_dims(bset, n_in, n_out); - if (!bset) - goto error; - *data->rest = isl_set_add_basic_set(*data->rest, bset); - } - - if (isl_basic_map_free_inequality(bmap, 2*(bmap->n_div - old_n_div))) - goto error; - if (isl_basic_map_free_div(bmap, bmap->n_div - old_n_div)) - goto error; - return map; -error: - isl_map_free(map); - return NULL; -} - -/* - * Returns a map of dimension "keep_dim" with "context" as domain and - * as range the first "isl_dim_size(keep_dim, isl_dim_out)" variables - * in the quast lists. - */ -static struct isl_map *isl_map_from_quast(struct isl_ctx *ctx, PipQuast *q, - struct isl_dim *keep_dim, - struct isl_basic_set *context, - struct isl_set **rest) -{ - int pip_param; - int nexist; - int max_depth; - int n_sol, n_nosol; - struct scan_data data; - struct isl_map *map = NULL; - struct isl_dim *dims; - unsigned nparam; - unsigned dim; - unsigned keep; - - data.ctx = ctx; - data.rest = rest; - data.bmap = NULL; - data.pos = NULL; - - if (!context || !keep_dim) - goto error; - - dim = isl_basic_set_n_dim(context); - nparam = isl_basic_set_n_param(context); - keep = isl_dim_size(keep_dim, isl_dim_out); - pip_param = nparam + dim; - - max_depth = 0; - n_sol = 0; - n_nosol = 0; - nexist = pip_param-1; - quast_count(q, &nexist, 0, &max_depth, &n_sol, &n_nosol); - nexist -= pip_param-1; - - if (rest) { - *rest = isl_set_alloc_dim(isl_dim_copy(context->dim), n_nosol, - ISL_MAP_DISJOINT); - if (!*rest) - goto error; - } - map = isl_map_alloc_dim(isl_dim_copy(keep_dim), n_sol, - ISL_MAP_DISJOINT); - if (!map) - goto error; - - dims = isl_dim_reverse(isl_dim_copy(context->dim)); - data.bmap = isl_basic_map_from_basic_set(context, dims); - data.bmap = isl_basic_map_extend_dim(data.bmap, - keep_dim, nexist, keep, max_depth+2*nexist); - if (!data.bmap) - goto error2; - - if (data.bmap->extra) { - int i; - data.pos = isl_alloc_array(ctx, int, data.bmap->extra); - if (!data.pos) - goto error; - for (i = 0; i < data.bmap->n_div; ++i) - data.pos[i] = i; - } - - map = scan_quast_r(&data, q, map); - map = isl_map_finalize(map); - if (!map) - goto error2; - if (rest) { - *rest = isl_set_finalize(*rest); - if (!*rest) - goto error2; - } - isl_basic_map_free(data.bmap); - if (data.pos) - free(data.pos); - return map; -error: - isl_basic_set_free(context); - isl_dim_free(keep_dim); -error2: - if (data.pos) - free(data.pos); - isl_basic_map_free(data.bmap); - isl_map_free(map); - if (rest) { - isl_set_free(*rest); - *rest = NULL; - } - return NULL; -} - -static void copy_values_to(Entier *dst, isl_int *src, unsigned n) -{ - int i; - - for (i = 0; i < n; ++i) - entier_assign(dst[i], src[i]); -} - -static void copy_constraint_to(Entier *dst, isl_int *src, - unsigned pip_param, unsigned pip_var, - unsigned extra_front, unsigned extra_back) -{ - copy_values_to(dst+1+extra_front+pip_var+pip_param+extra_back, src, 1); - copy_values_to(dst+1+extra_front+pip_var, src+1, pip_param); - copy_values_to(dst+1+extra_front, src+1+pip_param, pip_var); -} - -PipMatrix *isl_basic_map_to_pip(struct isl_basic_map *bmap, unsigned pip_param, - unsigned extra_front, unsigned extra_back) -{ - int i; - unsigned nrow; - unsigned ncol; - PipMatrix *M; - unsigned off; - unsigned pip_var = isl_basic_map_total_dim(bmap) - pip_param; - - nrow = extra_front + bmap->n_eq + bmap->n_ineq; - ncol = 1 + extra_front + pip_var + pip_param + extra_back + 1; - M = pip_matrix_alloc(nrow, ncol); - if (!M) - return NULL; - - off = extra_front; - for (i = 0; i < bmap->n_eq; ++i) { - entier_set_si(M->p[off+i][0], 0); - copy_constraint_to(M->p[off+i], bmap->eq[i], - pip_param, pip_var, extra_front, extra_back); - } - off += bmap->n_eq; - for (i = 0; i < bmap->n_ineq; ++i) { - entier_set_si(M->p[off+i][0], 1); - copy_constraint_to(M->p[off+i], bmap->ineq[i], - pip_param, pip_var, extra_front, extra_back); - } - return M; -} - -PipMatrix *isl_basic_set_to_pip(struct isl_basic_set *bset, unsigned pip_param, - unsigned extra_front, unsigned extra_back) -{ - return isl_basic_map_to_pip((struct isl_basic_map *)bset, - pip_param, extra_front, extra_back); -} - -struct isl_map *isl_pip_basic_map_lexopt( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty, int max) -{ - PipOptions *options; - PipQuast *sol; - struct isl_map *map; - struct isl_ctx *ctx; - PipMatrix *domain = NULL, *context = NULL; - unsigned nparam, n_in, n_out; - - bmap = isl_basic_map_detect_equalities(bmap); - if (!bmap || !dom) - goto error; - - ctx = bmap->ctx; - isl_assert(ctx, isl_basic_map_compatible_domain(bmap, dom), goto error); - nparam = isl_basic_map_n_param(bmap); - n_in = isl_basic_map_n_in(bmap); - n_out = isl_basic_map_n_out(bmap); - - domain = isl_basic_map_to_pip(bmap, nparam + n_in, 0, dom->n_div); - if (!domain) - goto error; - context = isl_basic_map_to_pip((struct isl_basic_map *)dom, 0, 0, 0); - if (!context) - goto error; - - options = pip_options_init(); - options->Simplify = 1; - options->Maximize = max; - options->Urs_unknowns = -1; - options->Urs_parms = -1; - sol = pip_solve(domain, context, -1, options); - - if (sol) { - struct isl_basic_set *copy; - copy = isl_basic_set_copy(dom); - map = isl_map_from_quast(ctx, sol, - isl_dim_copy(bmap->dim), copy, empty); - } else { - map = isl_map_empty_like_basic_map(bmap); - if (empty) - *empty = NULL; - } - if (!map) - goto error; - if (map->n == 0 && empty) { - isl_set_free(*empty); - *empty = isl_set_from_basic_set(dom); - } else - isl_basic_set_free(dom); - isl_basic_map_free(bmap); - - pip_quast_free(sol); - pip_options_free(options); - pip_matrix_free(domain); - pip_matrix_free(context); - - return map; -error: - if (domain) - pip_matrix_free(domain); - if (context) - pip_matrix_free(context); - isl_basic_map_free(bmap); - isl_basic_set_free(dom); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_map_piplib.h b/cloog-0.16.3/isl/isl_map_piplib.h deleted file mode 100644 index e796e4a..0000000 --- a/cloog-0.16.3/isl/isl_map_piplib.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_MAP_PIPLIB_H -#define ISL_MAP_PIPLIB_H - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_map *isl_pip_basic_map_lexopt( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty, int max); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/isl_map_private.h b/cloog-0.16.3/isl/isl_map_private.h deleted file mode 100644 index a3b106b..0000000 --- a/cloog-0.16.3/isl/isl_map_private.h +++ /dev/null @@ -1,311 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_MAP_PRIVATE_H -#define ISL_MAP_PRIVATE_H - -#define isl_basic_set isl_basic_map -#define isl_set isl_map -#define isl_basic_set_list isl_basic_map_list -#include -#include -#include -#include - -/* A "basic map" is a relation between two sets of variables, - * called the "in" and "out" variables. - * A "basic set" is a basic map with a zero-dimensional - * domain. - * - * It is implemented as a set with two extra fields: - * n_in is the number of in variables - * n_out is the number of out variables - * n_in + n_out should be equal to set.dim - */ -struct isl_basic_map { - int ref; -#define ISL_BASIC_MAP_FINAL (1 << 0) -#define ISL_BASIC_MAP_EMPTY (1 << 1) -#define ISL_BASIC_MAP_NO_IMPLICIT (1 << 2) -#define ISL_BASIC_MAP_NO_REDUNDANT (1 << 3) -#define ISL_BASIC_MAP_RATIONAL (1 << 4) -#define ISL_BASIC_MAP_NORMALIZED (1 << 5) -#define ISL_BASIC_MAP_NORMALIZED_DIVS (1 << 6) -#define ISL_BASIC_MAP_ALL_EQUALITIES (1 << 7) -#define ISL_BASIC_SET_FINAL (1 << 0) -#define ISL_BASIC_SET_EMPTY (1 << 1) -#define ISL_BASIC_SET_NO_IMPLICIT (1 << 2) -#define ISL_BASIC_SET_NO_REDUNDANT (1 << 3) -#define ISL_BASIC_SET_RATIONAL (1 << 4) -#define ISL_BASIC_SET_NORMALIZED (1 << 5) -#define ISL_BASIC_SET_NORMALIZED_DIVS (1 << 6) -#define ISL_BASIC_SET_ALL_EQUALITIES (1 << 7) - unsigned flags; - - struct isl_ctx *ctx; - - struct isl_dim *dim; - unsigned extra; - - unsigned n_eq; - unsigned n_ineq; - - size_t c_size; - isl_int **eq; - isl_int **ineq; - - unsigned n_div; - - isl_int **div; - - struct isl_vec *sample; - - struct isl_blk block; - struct isl_blk block2; -}; - -/* A "map" is a (possibly disjoint) union of basic maps. - * A "set" is a (possibly disjoint) union of basic sets. - * - * Currently, the isl_set structure is identical to the isl_map structure - * and the library depends on this correspondence internally. - * However, users should not depend on this correspondence. - */ -struct isl_map { - int ref; -#define ISL_MAP_DISJOINT (1 << 0) -#define ISL_MAP_NORMALIZED (1 << 1) -#define ISL_SET_DISJOINT (1 << 0) -#define ISL_SET_NORMALIZED (1 << 1) - unsigned flags; - - struct isl_ctx *ctx; - - struct isl_dim *dim; - - int n; - - size_t size; - struct isl_basic_map *p[1]; -}; - -__isl_give isl_map *isl_map_realign(__isl_take isl_map *map, - __isl_take isl_reordering *r); -__isl_give isl_set *isl_set_realign(__isl_take isl_set *set, - __isl_take isl_reordering *r); - -__isl_give isl_map *isl_map_reset(__isl_take isl_map *map, - enum isl_dim_type type); - -__isl_give isl_basic_set *isl_basic_set_reset_dim( - __isl_take isl_basic_set *bset, __isl_take isl_dim *dim); -__isl_give isl_basic_map *isl_basic_map_reset_dim( - __isl_take isl_basic_map *bmap, __isl_take isl_dim *dim); -__isl_give isl_map *isl_map_reset_dim(__isl_take isl_map *map, - __isl_take isl_dim *dim); - -unsigned isl_basic_map_offset(struct isl_basic_map *bmap, - enum isl_dim_type type); -unsigned isl_basic_set_offset(struct isl_basic_set *bset, - enum isl_dim_type type); - -int isl_basic_map_may_be_set(__isl_keep isl_basic_map *bmap); -int isl_map_may_be_set(__isl_keep isl_map *map); -int isl_map_compatible_domain(struct isl_map *map, struct isl_set *set); -int isl_basic_map_compatible_domain(struct isl_basic_map *bmap, - struct isl_basic_set *bset); -int isl_basic_map_compatible_range(struct isl_basic_map *bmap, - struct isl_basic_set *bset); - -struct isl_basic_map *isl_basic_map_extend_dim(struct isl_basic_map *base, - struct isl_dim *dim, unsigned extra, - unsigned n_eq, unsigned n_ineq); -struct isl_basic_set *isl_basic_set_extend_dim(struct isl_basic_set *base, - struct isl_dim *dim, unsigned extra, - unsigned n_eq, unsigned n_ineq); -struct isl_basic_set *isl_basic_set_add_constraints(struct isl_basic_set *bset1, - struct isl_basic_set *bset2, unsigned pos); - -struct isl_map *isl_map_grow(struct isl_map *map, int n); -struct isl_set *isl_set_grow(struct isl_set *set, int n); - -int isl_basic_set_contains(struct isl_basic_set *bset, struct isl_vec *vec); -int isl_basic_map_contains(struct isl_basic_map *bmap, struct isl_vec *vec); - -struct isl_basic_set *isl_basic_set_alloc_dim(struct isl_dim *dim, - unsigned extra, unsigned n_eq, unsigned n_ineq); -struct isl_set *isl_set_alloc_dim(struct isl_dim *dim, int n, unsigned flags); -struct isl_basic_map *isl_basic_map_alloc_dim(struct isl_dim *dim, - unsigned extra, unsigned n_eq, unsigned n_ineq); -struct isl_map *isl_map_alloc_dim(struct isl_dim *dim, int n, unsigned flags); - -unsigned isl_basic_map_total_dim(const struct isl_basic_map *bmap); - -int isl_basic_map_alloc_equality(struct isl_basic_map *bmap); -int isl_basic_set_alloc_equality(struct isl_basic_set *bset); -int isl_basic_set_free_inequality(struct isl_basic_set *bset, unsigned n); -int isl_basic_map_free_equality(struct isl_basic_map *bmap, unsigned n); -int isl_basic_set_free_equality(struct isl_basic_set *bset, unsigned n); -int isl_basic_set_alloc_inequality(struct isl_basic_set *bset); -int isl_basic_map_alloc_inequality(struct isl_basic_map *bmap); -int isl_basic_map_free_inequality(struct isl_basic_map *bmap, unsigned n); -int isl_basic_map_alloc_div(struct isl_basic_map *bmap); -int isl_basic_set_alloc_div(struct isl_basic_set *bset); -int isl_basic_map_free_div(struct isl_basic_map *bmap, unsigned n); -int isl_basic_set_free_div(struct isl_basic_set *bset, unsigned n); -void isl_basic_map_inequality_to_equality( - struct isl_basic_map *bmap, unsigned pos); -int isl_basic_map_drop_equality(struct isl_basic_map *bmap, unsigned pos); -int isl_basic_set_drop_equality(struct isl_basic_set *bset, unsigned pos); -int isl_basic_set_drop_inequality(struct isl_basic_set *bset, unsigned pos); -int isl_basic_map_drop_inequality(struct isl_basic_map *bmap, unsigned pos); -__isl_give isl_basic_set *isl_basic_set_add_eq(__isl_take isl_basic_set *bset, - isl_int *eq); -__isl_give isl_basic_map *isl_basic_map_add_eq(__isl_take isl_basic_map *bmap, - isl_int *eq); -__isl_give isl_basic_set *isl_basic_set_add_ineq(__isl_take isl_basic_set *bset, - isl_int *ineq); -__isl_give isl_basic_map *isl_basic_map_add_ineq(__isl_take isl_basic_map *bmap, - isl_int *ineq); - -int isl_inequality_negate(struct isl_basic_map *bmap, unsigned pos); - -struct isl_basic_set *isl_basic_set_cow(struct isl_basic_set *bset); -struct isl_basic_map *isl_basic_map_cow(struct isl_basic_map *bmap); -struct isl_set *isl_set_cow(struct isl_set *set); -struct isl_map *isl_map_cow(struct isl_map *map); - -struct isl_basic_map *isl_basic_map_set_to_empty(struct isl_basic_map *bmap); -struct isl_basic_set *isl_basic_set_set_to_empty(struct isl_basic_set *bset); -struct isl_basic_set *isl_basic_set_order_divs(struct isl_basic_set *bset); -void isl_basic_map_swap_div(struct isl_basic_map *bmap, int a, int b); -struct isl_basic_map *isl_basic_map_order_divs(struct isl_basic_map *bmap); -__isl_give isl_map *isl_map_order_divs(__isl_take isl_map *map); -struct isl_basic_map *isl_basic_map_align_divs( - struct isl_basic_map *dst, struct isl_basic_map *src); -struct isl_basic_set *isl_basic_set_align_divs( - struct isl_basic_set *dst, struct isl_basic_set *src); -struct isl_basic_map *isl_basic_map_gauss( - struct isl_basic_map *bmap, int *progress); -struct isl_basic_set *isl_basic_set_gauss( - struct isl_basic_set *bset, int *progress); -__isl_give isl_basic_set *isl_basic_set_sort_constraints( - __isl_take isl_basic_set *bset); -int isl_basic_map_plain_cmp(const __isl_keep isl_basic_map *bmap1, - const __isl_keep isl_basic_map *bmap2); -int isl_basic_set_plain_is_equal(__isl_keep isl_basic_set *bset1, - __isl_keep isl_basic_set *bset2); -int isl_basic_map_plain_is_equal(__isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2); -struct isl_basic_map *isl_basic_map_normalize_constraints( - struct isl_basic_map *bmap); -struct isl_basic_set *isl_basic_set_normalize_constraints( - struct isl_basic_set *bset); -struct isl_basic_map *isl_basic_map_implicit_equalities( - struct isl_basic_map *bmap); -struct isl_basic_set *isl_basic_map_underlying_set(struct isl_basic_map *bmap); -__isl_give isl_basic_set *isl_basic_set_underlying_set( - __isl_take isl_basic_set *bset); -struct isl_set *isl_map_underlying_set(struct isl_map *map); -struct isl_basic_map *isl_basic_map_overlying_set(struct isl_basic_set *bset, - struct isl_basic_map *like); -__isl_give isl_basic_set *isl_basic_set_drop_constraints_involving( - __isl_take isl_basic_set *bset, unsigned first, unsigned n); -__isl_give isl_basic_set *isl_basic_set_drop(__isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n); -struct isl_basic_map *isl_basic_map_drop(struct isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n); -struct isl_set *isl_set_drop(struct isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); -struct isl_basic_set *isl_basic_set_drop_dims( - struct isl_basic_set *bset, unsigned first, unsigned n); -struct isl_set *isl_set_drop_dims( - struct isl_set *set, unsigned first, unsigned n); -struct isl_map *isl_map_drop_inputs( - struct isl_map *map, unsigned first, unsigned n); -struct isl_map *isl_map_drop(struct isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n); - -struct isl_map *isl_map_remove_empty_parts(struct isl_map *map); -struct isl_set *isl_set_remove_empty_parts(struct isl_set *set); - -struct isl_set *isl_set_normalize(struct isl_set *set); - -struct isl_set *isl_set_drop_vars( - struct isl_set *set, unsigned first, unsigned n); - -struct isl_basic_map *isl_basic_map_eliminate_vars( - struct isl_basic_map *bmap, unsigned pos, unsigned n); -struct isl_basic_set *isl_basic_set_eliminate_vars( - struct isl_basic_set *bset, unsigned pos, unsigned n); - -__isl_give isl_map *isl_map_eliminate(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_set *isl_set_eliminate(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); - -int isl_basic_set_constraint_is_redundant(struct isl_basic_set **bset, - isl_int *c, isl_int *opt_n, isl_int *opt_d); - -int isl_basic_map_add_div_constraints(struct isl_basic_map *bmap, unsigned div); -struct isl_basic_map *isl_basic_map_drop_redundant_divs( - struct isl_basic_map *bmap); -struct isl_basic_set *isl_basic_set_drop_redundant_divs( - struct isl_basic_set *bset); - -struct isl_basic_set *isl_basic_set_recession_cone(struct isl_basic_set *bset); -struct isl_basic_set *isl_basic_set_lineality_space(struct isl_basic_set *bset); - -struct isl_basic_set *isl_basic_set_set_rational(struct isl_basic_set *bset); -__isl_give isl_basic_map *isl_basic_map_set_rational( - __isl_take isl_basic_map *bmap); - -struct isl_mat; - -struct isl_basic_set *isl_basic_set_preimage(struct isl_basic_set *bset, - struct isl_mat *mat); -struct isl_set *isl_set_preimage(struct isl_set *set, struct isl_mat *mat); - -__isl_give isl_basic_set *isl_basic_set_transform_dims( - __isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned first, - __isl_take isl_mat *trans); - -isl_int *isl_set_wrap_facet(__isl_keep isl_set *set, - isl_int *facet, isl_int *ridge); - -int isl_basic_map_contains_point(__isl_keep isl_basic_map *bmap, - __isl_keep isl_point *point); -int isl_set_contains_point(__isl_keep isl_set *set, __isl_keep isl_point *point); - -int isl_basic_set_vars_get_sign(__isl_keep isl_basic_set *bset, - unsigned first, unsigned n, int *signs); -int isl_set_foreach_orthant(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_set *orthant, int *signs, void *user), - void *user); - -int isl_basic_map_add_div_constraints_var(__isl_keep isl_basic_map *bmap, - unsigned pos, isl_int *div); -int isl_basic_set_add_div_constraints_var(__isl_keep isl_basic_set *bset, - unsigned pos, isl_int *div); -int isl_basic_map_is_div_constraint(__isl_keep isl_basic_map *bmap, - isl_int *constraint, unsigned div); - -__isl_give isl_basic_set *isl_basic_set_from_local_space( - __isl_take isl_local_space *ls); -__isl_give isl_basic_map *isl_basic_map_from_local_space( - __isl_take isl_local_space *ls); -__isl_give isl_basic_set *isl_basic_set_expand_divs( - __isl_take isl_basic_set *bset, __isl_take isl_mat *div, int *exp); - -int isl_basic_map_divs_known(__isl_keep isl_basic_map *bmap); - -__isl_give isl_map *isl_map_inline_foreach_basic_map(__isl_take isl_map *map, - __isl_give isl_basic_map *(*fn)(__isl_take isl_basic_map *bmap)); - -#endif diff --git a/cloog-0.16.3/isl/isl_map_simplify.c b/cloog-0.16.3/isl/isl_map_simplify.c deleted file mode 100644 index 7a24c5b..0000000 --- a/cloog-0.16.3/isl/isl_map_simplify.c +++ /dev/null @@ -1,2497 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include "isl_equalities.h" -#include -#include -#include "isl_tab.h" -#include -#include - -static void swap_equality(struct isl_basic_map *bmap, int a, int b) -{ - isl_int *t = bmap->eq[a]; - bmap->eq[a] = bmap->eq[b]; - bmap->eq[b] = t; -} - -static void swap_inequality(struct isl_basic_map *bmap, int a, int b) -{ - if (a != b) { - isl_int *t = bmap->ineq[a]; - bmap->ineq[a] = bmap->ineq[b]; - bmap->ineq[b] = t; - } -} - -static void constraint_drop_vars(isl_int *c, unsigned n, unsigned rem) -{ - isl_seq_cpy(c, c + n, rem); - isl_seq_clr(c + rem, n); -} - -/* Drop n dimensions starting at first. - * - * In principle, this frees up some extra variables as the number - * of columns remains constant, but we would have to extend - * the div array too as the number of rows in this array is assumed - * to be equal to extra. - */ -struct isl_basic_set *isl_basic_set_drop_dims( - struct isl_basic_set *bset, unsigned first, unsigned n) -{ - int i; - - if (!bset) - goto error; - - isl_assert(bset->ctx, first + n <= bset->dim->n_out, goto error); - - if (n == 0 && !isl_dim_get_tuple_name(bset->dim, isl_dim_set)) - return bset; - - bset = isl_basic_set_cow(bset); - if (!bset) - return NULL; - - for (i = 0; i < bset->n_eq; ++i) - constraint_drop_vars(bset->eq[i]+1+bset->dim->nparam+first, n, - (bset->dim->n_out-first-n)+bset->extra); - - for (i = 0; i < bset->n_ineq; ++i) - constraint_drop_vars(bset->ineq[i]+1+bset->dim->nparam+first, n, - (bset->dim->n_out-first-n)+bset->extra); - - for (i = 0; i < bset->n_div; ++i) - constraint_drop_vars(bset->div[i]+1+1+bset->dim->nparam+first, n, - (bset->dim->n_out-first-n)+bset->extra); - - bset->dim = isl_dim_drop_outputs(bset->dim, first, n); - if (!bset->dim) - goto error; - - ISL_F_CLR(bset, ISL_BASIC_SET_NORMALIZED); - bset = isl_basic_set_simplify(bset); - return isl_basic_set_finalize(bset); -error: - isl_basic_set_free(bset); - return NULL; -} - -struct isl_set *isl_set_drop_dims( - struct isl_set *set, unsigned first, unsigned n) -{ - int i; - - if (!set) - goto error; - - isl_assert(set->ctx, first + n <= set->dim->n_out, goto error); - - if (n == 0 && !isl_dim_get_tuple_name(set->dim, isl_dim_set)) - return set; - set = isl_set_cow(set); - if (!set) - goto error; - set->dim = isl_dim_drop_outputs(set->dim, first, n); - if (!set->dim) - goto error; - - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_drop_dims(set->p[i], first, n); - if (!set->p[i]) - goto error; - } - - ISL_F_CLR(set, ISL_SET_NORMALIZED); - return set; -error: - isl_set_free(set); - return NULL; -} - -/* Move "n" divs starting at "first" to the end of the list of divs. - */ -static struct isl_basic_map *move_divs_last(struct isl_basic_map *bmap, - unsigned first, unsigned n) -{ - isl_int **div; - int i; - - if (first + n == bmap->n_div) - return bmap; - - div = isl_alloc_array(bmap->ctx, isl_int *, n); - if (!div) - goto error; - for (i = 0; i < n; ++i) - div[i] = bmap->div[first + i]; - for (i = 0; i < bmap->n_div - first - n; ++i) - bmap->div[first + i] = bmap->div[first + n + i]; - for (i = 0; i < n; ++i) - bmap->div[bmap->n_div - n + i] = div[i]; - free(div); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Drop "n" dimensions of type "type" starting at "first". - * - * In principle, this frees up some extra variables as the number - * of columns remains constant, but we would have to extend - * the div array too as the number of rows in this array is assumed - * to be equal to extra. - */ -struct isl_basic_map *isl_basic_map_drop(struct isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - unsigned dim; - unsigned offset; - unsigned left; - - if (!bmap) - goto error; - - dim = isl_basic_map_dim(bmap, type); - isl_assert(bmap->ctx, first + n <= dim, goto error); - - if (n == 0 && !isl_dim_get_tuple_name(bmap->dim, type)) - return bmap; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - offset = isl_basic_map_offset(bmap, type) + first; - left = isl_basic_map_total_dim(bmap) - (offset - 1) - n; - for (i = 0; i < bmap->n_eq; ++i) - constraint_drop_vars(bmap->eq[i]+offset, n, left); - - for (i = 0; i < bmap->n_ineq; ++i) - constraint_drop_vars(bmap->ineq[i]+offset, n, left); - - for (i = 0; i < bmap->n_div; ++i) - constraint_drop_vars(bmap->div[i]+1+offset, n, left); - - if (type == isl_dim_div) { - bmap = move_divs_last(bmap, first, n); - if (!bmap) - goto error; - isl_basic_map_free_div(bmap, n); - } else - bmap->dim = isl_dim_drop(bmap->dim, type, first, n); - if (!bmap->dim) - goto error; - - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_drop(__isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_basic_set *)isl_basic_map_drop((isl_basic_map *)bset, - type, first, n); -} - -struct isl_basic_map *isl_basic_map_drop_inputs( - struct isl_basic_map *bmap, unsigned first, unsigned n) -{ - return isl_basic_map_drop(bmap, isl_dim_in, first, n); -} - -struct isl_map *isl_map_drop(struct isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!map) - goto error; - - isl_assert(map->ctx, first + n <= isl_map_dim(map, type), goto error); - - if (n == 0 && !isl_dim_get_tuple_name(map->dim, type)) - return map; - map = isl_map_cow(map); - if (!map) - goto error; - map->dim = isl_dim_drop(map->dim, type, first, n); - if (!map->dim) - goto error; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_drop(map->p[i], type, first, n); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - - return map; -error: - isl_map_free(map); - return NULL; -} - -struct isl_set *isl_set_drop(struct isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_set *)isl_map_drop((isl_map *)set, type, first, n); -} - -struct isl_map *isl_map_drop_inputs( - struct isl_map *map, unsigned first, unsigned n) -{ - return isl_map_drop(map, isl_dim_in, first, n); -} - -/* - * We don't cow, as the div is assumed to be redundant. - */ -static struct isl_basic_map *isl_basic_map_drop_div( - struct isl_basic_map *bmap, unsigned div) -{ - int i; - unsigned pos; - - if (!bmap) - goto error; - - pos = 1 + isl_dim_total(bmap->dim) + div; - - isl_assert(bmap->ctx, div < bmap->n_div, goto error); - - for (i = 0; i < bmap->n_eq; ++i) - constraint_drop_vars(bmap->eq[i]+pos, 1, bmap->extra-div-1); - - for (i = 0; i < bmap->n_ineq; ++i) { - if (!isl_int_is_zero(bmap->ineq[i][pos])) { - isl_basic_map_drop_inequality(bmap, i); - --i; - continue; - } - constraint_drop_vars(bmap->ineq[i]+pos, 1, bmap->extra-div-1); - } - - for (i = 0; i < bmap->n_div; ++i) - constraint_drop_vars(bmap->div[i]+1+pos, 1, bmap->extra-div-1); - - if (div != bmap->n_div - 1) { - int j; - isl_int *t = bmap->div[div]; - - for (j = div; j < bmap->n_div - 1; ++j) - bmap->div[j] = bmap->div[j+1]; - - bmap->div[bmap->n_div - 1] = t; - } - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - isl_basic_map_free_div(bmap, 1); - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_map *isl_basic_map_normalize_constraints( - struct isl_basic_map *bmap) -{ - int i; - isl_int gcd; - unsigned total = isl_basic_map_total_dim(bmap); - - if (!bmap) - return NULL; - - isl_int_init(gcd); - for (i = bmap->n_eq - 1; i >= 0; --i) { - isl_seq_gcd(bmap->eq[i]+1, total, &gcd); - if (isl_int_is_zero(gcd)) { - if (!isl_int_is_zero(bmap->eq[i][0])) { - bmap = isl_basic_map_set_to_empty(bmap); - break; - } - isl_basic_map_drop_equality(bmap, i); - continue; - } - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL)) - isl_int_gcd(gcd, gcd, bmap->eq[i][0]); - if (isl_int_is_one(gcd)) - continue; - if (!isl_int_is_divisible_by(bmap->eq[i][0], gcd)) { - bmap = isl_basic_map_set_to_empty(bmap); - break; - } - isl_seq_scale_down(bmap->eq[i], bmap->eq[i], gcd, 1+total); - } - - for (i = bmap->n_ineq - 1; i >= 0; --i) { - isl_seq_gcd(bmap->ineq[i]+1, total, &gcd); - if (isl_int_is_zero(gcd)) { - if (isl_int_is_neg(bmap->ineq[i][0])) { - bmap = isl_basic_map_set_to_empty(bmap); - break; - } - isl_basic_map_drop_inequality(bmap, i); - continue; - } - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL)) - isl_int_gcd(gcd, gcd, bmap->ineq[i][0]); - if (isl_int_is_one(gcd)) - continue; - isl_int_fdiv_q(bmap->ineq[i][0], bmap->ineq[i][0], gcd); - isl_seq_scale_down(bmap->ineq[i]+1, bmap->ineq[i]+1, gcd, total); - } - isl_int_clear(gcd); - - return bmap; -} - -struct isl_basic_set *isl_basic_set_normalize_constraints( - struct isl_basic_set *bset) -{ - return (struct isl_basic_set *)isl_basic_map_normalize_constraints( - (struct isl_basic_map *)bset); -} - -/* Assumes divs have been ordered if keep_divs is set. - */ -static void eliminate_var_using_equality(struct isl_basic_map *bmap, - unsigned pos, isl_int *eq, int keep_divs, int *progress) -{ - unsigned total; - int k; - int last_div; - - total = isl_basic_map_total_dim(bmap); - last_div = isl_seq_last_non_zero(eq + 1 + isl_dim_total(bmap->dim), - bmap->n_div); - for (k = 0; k < bmap->n_eq; ++k) { - if (bmap->eq[k] == eq) - continue; - if (isl_int_is_zero(bmap->eq[k][1+pos])) - continue; - if (progress) - *progress = 1; - isl_seq_elim(bmap->eq[k], eq, 1+pos, 1+total, NULL); - isl_seq_normalize(bmap->ctx, bmap->eq[k], 1 + total); - } - - for (k = 0; k < bmap->n_ineq; ++k) { - if (isl_int_is_zero(bmap->ineq[k][1+pos])) - continue; - if (progress) - *progress = 1; - isl_seq_elim(bmap->ineq[k], eq, 1+pos, 1+total, NULL); - isl_seq_normalize(bmap->ctx, bmap->ineq[k], 1 + total); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - } - - for (k = 0; k < bmap->n_div; ++k) { - if (isl_int_is_zero(bmap->div[k][0])) - continue; - if (isl_int_is_zero(bmap->div[k][1+1+pos])) - continue; - if (progress) - *progress = 1; - /* We need to be careful about circular definitions, - * so for now we just remove the definition of div k - * if the equality contains any divs. - * If keep_divs is set, then the divs have been ordered - * and we can keep the definition as long as the result - * is still ordered. - */ - if (last_div == -1 || (keep_divs && last_div < k)) - isl_seq_elim(bmap->div[k]+1, eq, - 1+pos, 1+total, &bmap->div[k][0]); - else - isl_seq_clr(bmap->div[k], 1 + total); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - } -} - -/* Assumes divs have been ordered if keep_divs is set. - */ -static void eliminate_div(struct isl_basic_map *bmap, isl_int *eq, - unsigned div, int keep_divs) -{ - unsigned pos = isl_dim_total(bmap->dim) + div; - - eliminate_var_using_equality(bmap, pos, eq, keep_divs, NULL); - - isl_basic_map_drop_div(bmap, div); -} - -/* Check if elimination of div "div" using equality "eq" would not - * result in a div depending on a later div. - */ -static int ok_to_eliminate_div(struct isl_basic_map *bmap, isl_int *eq, - unsigned div) -{ - int k; - int last_div; - unsigned pos = isl_dim_total(bmap->dim) + div; - - last_div = isl_seq_last_non_zero(eq + 1 + isl_dim_total(bmap->dim), - bmap->n_div); - if (last_div < 0 || last_div <= div) - return 1; - - for (k = 0; k <= last_div; ++k) { - if (isl_int_is_zero(bmap->div[k][0])) - return 1; - if (!isl_int_is_zero(bmap->div[k][1 + 1 + pos])) - return 0; - } - - return 1; -} - -/* Elimininate divs based on equalities - */ -static struct isl_basic_map *eliminate_divs_eq( - struct isl_basic_map *bmap, int *progress) -{ - int d; - int i; - int modified = 0; - unsigned off; - - bmap = isl_basic_map_order_divs(bmap); - - if (!bmap) - return NULL; - - off = 1 + isl_dim_total(bmap->dim); - - for (d = bmap->n_div - 1; d >= 0 ; --d) { - for (i = 0; i < bmap->n_eq; ++i) { - if (!isl_int_is_one(bmap->eq[i][off + d]) && - !isl_int_is_negone(bmap->eq[i][off + d])) - continue; - if (!ok_to_eliminate_div(bmap, bmap->eq[i], d)) - continue; - modified = 1; - *progress = 1; - eliminate_div(bmap, bmap->eq[i], d, 1); - isl_basic_map_drop_equality(bmap, i); - break; - } - } - if (modified) - return eliminate_divs_eq(bmap, progress); - return bmap; -} - -/* Elimininate divs based on inequalities - */ -static struct isl_basic_map *eliminate_divs_ineq( - struct isl_basic_map *bmap, int *progress) -{ - int d; - int i; - unsigned off; - struct isl_ctx *ctx; - - if (!bmap) - return NULL; - - ctx = bmap->ctx; - off = 1 + isl_dim_total(bmap->dim); - - for (d = bmap->n_div - 1; d >= 0 ; --d) { - for (i = 0; i < bmap->n_eq; ++i) - if (!isl_int_is_zero(bmap->eq[i][off + d])) - break; - if (i < bmap->n_eq) - continue; - for (i = 0; i < bmap->n_ineq; ++i) - if (isl_int_abs_gt(bmap->ineq[i][off + d], ctx->one)) - break; - if (i < bmap->n_ineq) - continue; - *progress = 1; - bmap = isl_basic_map_eliminate_vars(bmap, (off-1)+d, 1); - if (!bmap || ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) - break; - bmap = isl_basic_map_drop_div(bmap, d); - if (!bmap) - break; - } - return bmap; -} - -struct isl_basic_map *isl_basic_map_gauss( - struct isl_basic_map *bmap, int *progress) -{ - int k; - int done; - int last_var; - unsigned total_var; - unsigned total; - - bmap = isl_basic_map_order_divs(bmap); - - if (!bmap) - return NULL; - - total = isl_basic_map_total_dim(bmap); - total_var = total - bmap->n_div; - - last_var = total - 1; - for (done = 0; done < bmap->n_eq; ++done) { - for (; last_var >= 0; --last_var) { - for (k = done; k < bmap->n_eq; ++k) - if (!isl_int_is_zero(bmap->eq[k][1+last_var])) - break; - if (k < bmap->n_eq) - break; - } - if (last_var < 0) - break; - if (k != done) - swap_equality(bmap, k, done); - if (isl_int_is_neg(bmap->eq[done][1+last_var])) - isl_seq_neg(bmap->eq[done], bmap->eq[done], 1+total); - - eliminate_var_using_equality(bmap, last_var, bmap->eq[done], 1, - progress); - - if (last_var >= total_var && - isl_int_is_zero(bmap->div[last_var - total_var][0])) { - unsigned div = last_var - total_var; - isl_seq_neg(bmap->div[div]+1, bmap->eq[done], 1+total); - isl_int_set_si(bmap->div[div][1+1+last_var], 0); - isl_int_set(bmap->div[div][0], - bmap->eq[done][1+last_var]); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - } - } - if (done == bmap->n_eq) - return bmap; - for (k = done; k < bmap->n_eq; ++k) { - if (isl_int_is_zero(bmap->eq[k][0])) - continue; - return isl_basic_map_set_to_empty(bmap); - } - isl_basic_map_free_equality(bmap, bmap->n_eq-done); - return bmap; -} - -struct isl_basic_set *isl_basic_set_gauss( - struct isl_basic_set *bset, int *progress) -{ - return (struct isl_basic_set*)isl_basic_map_gauss( - (struct isl_basic_map *)bset, progress); -} - - -static unsigned int round_up(unsigned int v) -{ - int old_v = v; - - while (v) { - old_v = v; - v ^= v & -v; - } - return old_v << 1; -} - -static int hash_index(isl_int ***index, unsigned int size, int bits, - struct isl_basic_map *bmap, int k) -{ - int h; - unsigned total = isl_basic_map_total_dim(bmap); - uint32_t hash = isl_seq_get_hash_bits(bmap->ineq[k]+1, total, bits); - for (h = hash; index[h]; h = (h+1) % size) - if (&bmap->ineq[k] != index[h] && - isl_seq_eq(bmap->ineq[k]+1, index[h][0]+1, total)) - break; - return h; -} - -static int set_hash_index(isl_int ***index, unsigned int size, int bits, - struct isl_basic_set *bset, int k) -{ - return hash_index(index, size, bits, (struct isl_basic_map *)bset, k); -} - -/* If we can eliminate more than one div, then we need to make - * sure we do it from last div to first div, in order not to - * change the position of the other divs that still need to - * be removed. - */ -static struct isl_basic_map *remove_duplicate_divs( - struct isl_basic_map *bmap, int *progress) -{ - unsigned int size; - int *index; - int *elim_for; - int k, l, h; - int bits; - struct isl_blk eq; - unsigned total_var; - unsigned total; - struct isl_ctx *ctx; - - if (!bmap || bmap->n_div <= 1) - return bmap; - - total_var = isl_dim_total(bmap->dim); - total = total_var + bmap->n_div; - - ctx = bmap->ctx; - for (k = bmap->n_div - 1; k >= 0; --k) - if (!isl_int_is_zero(bmap->div[k][0])) - break; - if (k <= 0) - return bmap; - - elim_for = isl_calloc_array(ctx, int, bmap->n_div); - size = round_up(4 * bmap->n_div / 3 - 1); - bits = ffs(size) - 1; - index = isl_calloc_array(ctx, int, size); - if (!index) - return bmap; - eq = isl_blk_alloc(ctx, 1+total); - if (isl_blk_is_error(eq)) - goto out; - - isl_seq_clr(eq.data, 1+total); - index[isl_seq_get_hash_bits(bmap->div[k], 2+total, bits)] = k + 1; - for (--k; k >= 0; --k) { - uint32_t hash; - - if (isl_int_is_zero(bmap->div[k][0])) - continue; - - hash = isl_seq_get_hash_bits(bmap->div[k], 2+total, bits); - for (h = hash; index[h]; h = (h+1) % size) - if (isl_seq_eq(bmap->div[k], - bmap->div[index[h]-1], 2+total)) - break; - if (index[h]) { - *progress = 1; - l = index[h] - 1; - elim_for[l] = k + 1; - } - index[h] = k+1; - } - for (l = bmap->n_div - 1; l >= 0; --l) { - if (!elim_for[l]) - continue; - k = elim_for[l] - 1; - isl_int_set_si(eq.data[1+total_var+k], -1); - isl_int_set_si(eq.data[1+total_var+l], 1); - eliminate_div(bmap, eq.data, l, 0); - isl_int_set_si(eq.data[1+total_var+k], 0); - isl_int_set_si(eq.data[1+total_var+l], 0); - } - - isl_blk_free(ctx, eq); -out: - free(index); - free(elim_for); - return bmap; -} - -static int n_pure_div_eq(struct isl_basic_map *bmap) -{ - int i, j; - unsigned total; - - total = isl_dim_total(bmap->dim); - for (i = 0, j = bmap->n_div-1; i < bmap->n_eq; ++i) { - while (j >= 0 && isl_int_is_zero(bmap->eq[i][1 + total + j])) - --j; - if (j < 0) - break; - if (isl_seq_first_non_zero(bmap->eq[i] + 1 + total, j) != -1) - return 0; - } - return i; -} - -/* Normalize divs that appear in equalities. - * - * In particular, we assume that bmap contains some equalities - * of the form - * - * a x = m * e_i - * - * and we want to replace the set of e_i by a minimal set and - * such that the new e_i have a canonical representation in terms - * of the vector x. - * If any of the equalities involves more than one divs, then - * we currently simply bail out. - * - * Let us first additionally assume that all equalities involve - * a div. The equalities then express modulo constraints on the - * remaining variables and we can use "parameter compression" - * to find a minimal set of constraints. The result is a transformation - * - * x = T(x') = x_0 + G x' - * - * with G a lower-triangular matrix with all elements below the diagonal - * non-negative and smaller than the diagonal element on the same row. - * We first normalize x_0 by making the same property hold in the affine - * T matrix. - * The rows i of G with a 1 on the diagonal do not impose any modulo - * constraint and simply express x_i = x'_i. - * For each of the remaining rows i, we introduce a div and a corresponding - * equality. In particular - * - * g_ii e_j = x_i - g_i(x') - * - * where each x'_k is replaced either by x_k (if g_kk = 1) or the - * corresponding div (if g_kk != 1). - * - * If there are any equalities not involving any div, then we - * first apply a variable compression on the variables x: - * - * x = C x'' x'' = C_2 x - * - * and perform the above parameter compression on A C instead of on A. - * The resulting compression is then of the form - * - * x'' = T(x') = x_0 + G x' - * - * and in constructing the new divs and the corresponding equalities, - * we have to replace each x'', i.e., the x'_k with (g_kk = 1), - * by the corresponding row from C_2. - */ -static struct isl_basic_map *normalize_divs( - struct isl_basic_map *bmap, int *progress) -{ - int i, j, k; - int total; - int div_eq; - struct isl_mat *B; - struct isl_vec *d; - struct isl_mat *T = NULL; - struct isl_mat *C = NULL; - struct isl_mat *C2 = NULL; - isl_int v; - int *pos; - int dropped, needed; - - if (!bmap) - return NULL; - - if (bmap->n_div == 0) - return bmap; - - if (bmap->n_eq == 0) - return bmap; - - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_NORMALIZED_DIVS)) - return bmap; - - total = isl_dim_total(bmap->dim); - div_eq = n_pure_div_eq(bmap); - if (div_eq == 0) - return bmap; - - if (div_eq < bmap->n_eq) { - B = isl_mat_sub_alloc6(bmap->ctx, bmap->eq, div_eq, - bmap->n_eq - div_eq, 0, 1 + total); - C = isl_mat_variable_compression(B, &C2); - if (!C || !C2) - goto error; - if (C->n_col == 0) { - bmap = isl_basic_map_set_to_empty(bmap); - isl_mat_free(C); - isl_mat_free(C2); - goto done; - } - } - - d = isl_vec_alloc(bmap->ctx, div_eq); - if (!d) - goto error; - for (i = 0, j = bmap->n_div-1; i < div_eq; ++i) { - while (j >= 0 && isl_int_is_zero(bmap->eq[i][1 + total + j])) - --j; - isl_int_set(d->block.data[i], bmap->eq[i][1 + total + j]); - } - B = isl_mat_sub_alloc6(bmap->ctx, bmap->eq, 0, div_eq, 0, 1 + total); - - if (C) { - B = isl_mat_product(B, C); - C = NULL; - } - - T = isl_mat_parameter_compression(B, d); - if (!T) - goto error; - if (T->n_col == 0) { - bmap = isl_basic_map_set_to_empty(bmap); - isl_mat_free(C2); - isl_mat_free(T); - goto done; - } - isl_int_init(v); - for (i = 0; i < T->n_row - 1; ++i) { - isl_int_fdiv_q(v, T->row[1 + i][0], T->row[1 + i][1 + i]); - if (isl_int_is_zero(v)) - continue; - isl_mat_col_submul(T, 0, v, 1 + i); - } - isl_int_clear(v); - pos = isl_alloc_array(bmap->ctx, int, T->n_row); - if (!pos) - goto error; - /* We have to be careful because dropping equalities may reorder them */ - dropped = 0; - for (j = bmap->n_div - 1; j >= 0; --j) { - for (i = 0; i < bmap->n_eq; ++i) - if (!isl_int_is_zero(bmap->eq[i][1 + total + j])) - break; - if (i < bmap->n_eq) { - bmap = isl_basic_map_drop_div(bmap, j); - isl_basic_map_drop_equality(bmap, i); - ++dropped; - } - } - pos[0] = 0; - needed = 0; - for (i = 1; i < T->n_row; ++i) { - if (isl_int_is_one(T->row[i][i])) - pos[i] = i; - else - needed++; - } - if (needed > dropped) { - bmap = isl_basic_map_extend_dim(bmap, isl_dim_copy(bmap->dim), - needed, needed, 0); - if (!bmap) - goto error; - } - for (i = 1; i < T->n_row; ++i) { - if (isl_int_is_one(T->row[i][i])) - continue; - k = isl_basic_map_alloc_div(bmap); - pos[i] = 1 + total + k; - isl_seq_clr(bmap->div[k] + 1, 1 + total + bmap->n_div); - isl_int_set(bmap->div[k][0], T->row[i][i]); - if (C2) - isl_seq_cpy(bmap->div[k] + 1, C2->row[i], 1 + total); - else - isl_int_set_si(bmap->div[k][1 + i], 1); - for (j = 0; j < i; ++j) { - if (isl_int_is_zero(T->row[i][j])) - continue; - if (pos[j] < T->n_row && C2) - isl_seq_submul(bmap->div[k] + 1, T->row[i][j], - C2->row[pos[j]], 1 + total); - else - isl_int_neg(bmap->div[k][1 + pos[j]], - T->row[i][j]); - } - j = isl_basic_map_alloc_equality(bmap); - isl_seq_neg(bmap->eq[j], bmap->div[k]+1, 1+total+bmap->n_div); - isl_int_set(bmap->eq[j][pos[i]], bmap->div[k][0]); - } - free(pos); - isl_mat_free(C2); - isl_mat_free(T); - - if (progress) - *progress = 1; -done: - ISL_F_SET(bmap, ISL_BASIC_MAP_NORMALIZED_DIVS); - - return bmap; -error: - isl_mat_free(C); - isl_mat_free(C2); - isl_mat_free(T); - return bmap; -} - -static struct isl_basic_map *set_div_from_lower_bound( - struct isl_basic_map *bmap, int div, int ineq) -{ - unsigned total = 1 + isl_dim_total(bmap->dim); - - isl_seq_neg(bmap->div[div] + 1, bmap->ineq[ineq], total + bmap->n_div); - isl_int_set(bmap->div[div][0], bmap->ineq[ineq][total + div]); - isl_int_add(bmap->div[div][1], bmap->div[div][1], bmap->div[div][0]); - isl_int_sub_ui(bmap->div[div][1], bmap->div[div][1], 1); - isl_int_set_si(bmap->div[div][1 + total + div], 0); - - return bmap; -} - -/* Check whether it is ok to define a div based on an inequality. - * To avoid the introduction of circular definitions of divs, we - * do not allow such a definition if the resulting expression would refer to - * any other undefined divs or if any known div is defined in - * terms of the unknown div. - */ -static int ok_to_set_div_from_bound(struct isl_basic_map *bmap, - int div, int ineq) -{ - int j; - unsigned total = 1 + isl_dim_total(bmap->dim); - - /* Not defined in terms of unknown divs */ - for (j = 0; j < bmap->n_div; ++j) { - if (div == j) - continue; - if (isl_int_is_zero(bmap->ineq[ineq][total + j])) - continue; - if (isl_int_is_zero(bmap->div[j][0])) - return 0; - } - - /* No other div defined in terms of this one => avoid loops */ - for (j = 0; j < bmap->n_div; ++j) { - if (div == j) - continue; - if (isl_int_is_zero(bmap->div[j][0])) - continue; - if (!isl_int_is_zero(bmap->div[j][1 + total + div])) - return 0; - } - - return 1; -} - -/* Given two constraints "k" and "l" that are opposite to each other, - * except for the constant term, check if we can use them - * to obtain an expression for one of the hitherto unknown divs. - * "sum" is the sum of the constant terms of the constraints. - * If this sum is strictly smaller than the coefficient of one - * of the divs, then this pair can be used define the div. - * To avoid the introduction of circular definitions of divs, we - * do not use the pair if the resulting expression would refer to - * any other undefined divs or if any known div is defined in - * terms of the unknown div. - */ -static struct isl_basic_map *check_for_div_constraints( - struct isl_basic_map *bmap, int k, int l, isl_int sum, int *progress) -{ - int i; - unsigned total = 1 + isl_dim_total(bmap->dim); - - for (i = 0; i < bmap->n_div; ++i) { - if (!isl_int_is_zero(bmap->div[i][0])) - continue; - if (isl_int_is_zero(bmap->ineq[k][total + i])) - continue; - if (isl_int_abs_ge(sum, bmap->ineq[k][total + i])) - continue; - if (!ok_to_set_div_from_bound(bmap, i, k)) - break; - if (isl_int_is_pos(bmap->ineq[k][total + i])) - bmap = set_div_from_lower_bound(bmap, i, k); - else - bmap = set_div_from_lower_bound(bmap, i, l); - if (progress) - *progress = 1; - break; - } - return bmap; -} - -static struct isl_basic_map *remove_duplicate_constraints( - struct isl_basic_map *bmap, int *progress, int detect_divs) -{ - unsigned int size; - isl_int ***index; - int k, l, h; - int bits; - unsigned total = isl_basic_map_total_dim(bmap); - isl_int sum; - isl_ctx *ctx; - - if (!bmap || bmap->n_ineq <= 1) - return bmap; - - size = round_up(4 * (bmap->n_ineq+1) / 3 - 1); - bits = ffs(size) - 1; - ctx = isl_basic_map_get_ctx(bmap); - index = isl_calloc_array(ctx, isl_int **, size); - if (!index) - return bmap; - - index[isl_seq_get_hash_bits(bmap->ineq[0]+1, total, bits)] = &bmap->ineq[0]; - for (k = 1; k < bmap->n_ineq; ++k) { - h = hash_index(index, size, bits, bmap, k); - if (!index[h]) { - index[h] = &bmap->ineq[k]; - continue; - } - if (progress) - *progress = 1; - l = index[h] - &bmap->ineq[0]; - if (isl_int_lt(bmap->ineq[k][0], bmap->ineq[l][0])) - swap_inequality(bmap, k, l); - isl_basic_map_drop_inequality(bmap, k); - --k; - } - isl_int_init(sum); - for (k = 0; k < bmap->n_ineq-1; ++k) { - isl_seq_neg(bmap->ineq[k]+1, bmap->ineq[k]+1, total); - h = hash_index(index, size, bits, bmap, k); - isl_seq_neg(bmap->ineq[k]+1, bmap->ineq[k]+1, total); - if (!index[h]) - continue; - l = index[h] - &bmap->ineq[0]; - isl_int_add(sum, bmap->ineq[k][0], bmap->ineq[l][0]); - if (isl_int_is_pos(sum)) { - if (detect_divs) - bmap = check_for_div_constraints(bmap, k, l, - sum, progress); - continue; - } - if (isl_int_is_zero(sum)) { - /* We need to break out of the loop after these - * changes since the contents of the hash - * will no longer be valid. - * Plus, we probably we want to regauss first. - */ - if (progress) - *progress = 1; - isl_basic_map_drop_inequality(bmap, l); - isl_basic_map_inequality_to_equality(bmap, k); - } else - bmap = isl_basic_map_set_to_empty(bmap); - break; - } - isl_int_clear(sum); - - free(index); - return bmap; -} - - -struct isl_basic_map *isl_basic_map_simplify(struct isl_basic_map *bmap) -{ - int progress = 1; - if (!bmap) - return NULL; - while (progress) { - progress = 0; - bmap = isl_basic_map_normalize_constraints(bmap); - bmap = remove_duplicate_divs(bmap, &progress); - bmap = eliminate_divs_eq(bmap, &progress); - bmap = eliminate_divs_ineq(bmap, &progress); - bmap = isl_basic_map_gauss(bmap, &progress); - /* requires equalities in normal form */ - bmap = normalize_divs(bmap, &progress); - bmap = remove_duplicate_constraints(bmap, &progress, 1); - } - return bmap; -} - -struct isl_basic_set *isl_basic_set_simplify(struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_simplify((struct isl_basic_map *)bset); -} - - -int isl_basic_map_is_div_constraint(__isl_keep isl_basic_map *bmap, - isl_int *constraint, unsigned div) -{ - unsigned pos; - - if (!bmap) - return -1; - - pos = 1 + isl_dim_total(bmap->dim) + div; - - if (isl_int_eq(constraint[pos], bmap->div[div][0])) { - int neg; - isl_int_sub(bmap->div[div][1], - bmap->div[div][1], bmap->div[div][0]); - isl_int_add_ui(bmap->div[div][1], bmap->div[div][1], 1); - neg = isl_seq_is_neg(constraint, bmap->div[div]+1, pos); - isl_int_sub_ui(bmap->div[div][1], bmap->div[div][1], 1); - isl_int_add(bmap->div[div][1], - bmap->div[div][1], bmap->div[div][0]); - if (!neg) - return 0; - if (isl_seq_first_non_zero(constraint+pos+1, - bmap->n_div-div-1) != -1) - return 0; - } else if (isl_int_abs_eq(constraint[pos], bmap->div[div][0])) { - if (!isl_seq_eq(constraint, bmap->div[div]+1, pos)) - return 0; - if (isl_seq_first_non_zero(constraint+pos+1, - bmap->n_div-div-1) != -1) - return 0; - } else - return 0; - - return 1; -} - - -/* If the only constraints a div d=floor(f/m) - * appears in are its two defining constraints - * - * f - m d >=0 - * -(f - (m - 1)) + m d >= 0 - * - * then it can safely be removed. - */ -static int div_is_redundant(struct isl_basic_map *bmap, int div) -{ - int i; - unsigned pos = 1 + isl_dim_total(bmap->dim) + div; - - for (i = 0; i < bmap->n_eq; ++i) - if (!isl_int_is_zero(bmap->eq[i][pos])) - return 0; - - for (i = 0; i < bmap->n_ineq; ++i) { - if (isl_int_is_zero(bmap->ineq[i][pos])) - continue; - if (!isl_basic_map_is_div_constraint(bmap, bmap->ineq[i], div)) - return 0; - } - - for (i = 0; i < bmap->n_div; ++i) - if (!isl_int_is_zero(bmap->div[i][1+pos])) - return 0; - - return 1; -} - -/* - * Remove divs that don't occur in any of the constraints or other divs. - * These can arise when dropping some of the variables in a quast - * returned by piplib. - */ -static struct isl_basic_map *remove_redundant_divs(struct isl_basic_map *bmap) -{ - int i; - - if (!bmap) - return NULL; - - for (i = bmap->n_div-1; i >= 0; --i) { - if (!div_is_redundant(bmap, i)) - continue; - bmap = isl_basic_map_drop_div(bmap, i); - } - return bmap; -} - -struct isl_basic_map *isl_basic_map_finalize(struct isl_basic_map *bmap) -{ - bmap = remove_redundant_divs(bmap); - if (!bmap) - return NULL; - ISL_F_SET(bmap, ISL_BASIC_SET_FINAL); - return bmap; -} - -struct isl_basic_set *isl_basic_set_finalize(struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_finalize((struct isl_basic_map *)bset); -} - -struct isl_set *isl_set_finalize(struct isl_set *set) -{ - int i; - - if (!set) - return NULL; - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_finalize(set->p[i]); - if (!set->p[i]) - goto error; - } - return set; -error: - isl_set_free(set); - return NULL; -} - -struct isl_map *isl_map_finalize(struct isl_map *map) -{ - int i; - - if (!map) - return NULL; - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_finalize(map->p[i]); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - - -/* Remove definition of any div that is defined in terms of the given variable. - * The div itself is not removed. Functions such as - * eliminate_divs_ineq depend on the other divs remaining in place. - */ -static struct isl_basic_map *remove_dependent_vars(struct isl_basic_map *bmap, - int pos) -{ - int i; - - for (i = 0; i < bmap->n_div; ++i) { - if (isl_int_is_zero(bmap->div[i][0])) - continue; - if (isl_int_is_zero(bmap->div[i][1+1+pos])) - continue; - isl_int_set_si(bmap->div[i][0], 0); - } - return bmap; -} - -/* Eliminate the specified variables from the constraints using - * Fourier-Motzkin. The variables themselves are not removed. - */ -struct isl_basic_map *isl_basic_map_eliminate_vars( - struct isl_basic_map *bmap, unsigned pos, unsigned n) -{ - int d; - int i, j, k; - unsigned total; - - if (n == 0) - return bmap; - if (!bmap) - return NULL; - total = isl_basic_map_total_dim(bmap); - - bmap = isl_basic_map_cow(bmap); - for (d = pos + n - 1; d >= 0 && d >= pos; --d) - bmap = remove_dependent_vars(bmap, d); - - for (d = pos + n - 1; - d >= 0 && d >= total - bmap->n_div && d >= pos; --d) - isl_seq_clr(bmap->div[d-(total-bmap->n_div)], 2+total); - for (d = pos + n - 1; d >= 0 && d >= pos; --d) { - int n_lower, n_upper; - if (!bmap) - return NULL; - for (i = 0; i < bmap->n_eq; ++i) { - if (isl_int_is_zero(bmap->eq[i][1+d])) - continue; - eliminate_var_using_equality(bmap, d, bmap->eq[i], 0, NULL); - isl_basic_map_drop_equality(bmap, i); - break; - } - if (i < bmap->n_eq) - continue; - n_lower = 0; - n_upper = 0; - for (i = 0; i < bmap->n_ineq; ++i) { - if (isl_int_is_pos(bmap->ineq[i][1+d])) - n_lower++; - else if (isl_int_is_neg(bmap->ineq[i][1+d])) - n_upper++; - } - bmap = isl_basic_map_extend_constraints(bmap, - 0, n_lower * n_upper); - if (!bmap) - goto error; - for (i = bmap->n_ineq - 1; i >= 0; --i) { - int last; - if (isl_int_is_zero(bmap->ineq[i][1+d])) - continue; - last = -1; - for (j = 0; j < i; ++j) { - if (isl_int_is_zero(bmap->ineq[j][1+d])) - continue; - last = j; - if (isl_int_sgn(bmap->ineq[i][1+d]) == - isl_int_sgn(bmap->ineq[j][1+d])) - continue; - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->ineq[k], bmap->ineq[i], - 1+total); - isl_seq_elim(bmap->ineq[k], bmap->ineq[j], - 1+d, 1+total, NULL); - } - isl_basic_map_drop_inequality(bmap, i); - i = last + 1; - } - if (n_lower > 0 && n_upper > 0) { - bmap = isl_basic_map_normalize_constraints(bmap); - bmap = remove_duplicate_constraints(bmap, NULL, 0); - bmap = isl_basic_map_gauss(bmap, NULL); - bmap = isl_basic_map_remove_redundancies(bmap); - if (!bmap) - goto error; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) - break; - } - } - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_eliminate_vars( - struct isl_basic_set *bset, unsigned pos, unsigned n) -{ - return (struct isl_basic_set *)isl_basic_map_eliminate_vars( - (struct isl_basic_map *)bset, pos, n); -} - -/* Don't assume equalities are in order, because align_divs - * may have changed the order of the divs. - */ -static void compute_elimination_index(struct isl_basic_map *bmap, int *elim) -{ - int d, i; - unsigned total; - - total = isl_dim_total(bmap->dim); - for (d = 0; d < total; ++d) - elim[d] = -1; - for (i = 0; i < bmap->n_eq; ++i) { - for (d = total - 1; d >= 0; --d) { - if (isl_int_is_zero(bmap->eq[i][1+d])) - continue; - elim[d] = i; - break; - } - } -} - -static void set_compute_elimination_index(struct isl_basic_set *bset, int *elim) -{ - compute_elimination_index((struct isl_basic_map *)bset, elim); -} - -static int reduced_using_equalities(isl_int *dst, isl_int *src, - struct isl_basic_map *bmap, int *elim) -{ - int d; - int copied = 0; - unsigned total; - - total = isl_dim_total(bmap->dim); - for (d = total - 1; d >= 0; --d) { - if (isl_int_is_zero(src[1+d])) - continue; - if (elim[d] == -1) - continue; - if (!copied) { - isl_seq_cpy(dst, src, 1 + total); - copied = 1; - } - isl_seq_elim(dst, bmap->eq[elim[d]], 1 + d, 1 + total, NULL); - } - return copied; -} - -static int set_reduced_using_equalities(isl_int *dst, isl_int *src, - struct isl_basic_set *bset, int *elim) -{ - return reduced_using_equalities(dst, src, - (struct isl_basic_map *)bset, elim); -} - -static struct isl_basic_set *isl_basic_set_reduce_using_equalities( - struct isl_basic_set *bset, struct isl_basic_set *context) -{ - int i; - int *elim; - - if (!bset || !context) - goto error; - - if (context->n_eq == 0) { - isl_basic_set_free(context); - return bset; - } - - bset = isl_basic_set_cow(bset); - if (!bset) - goto error; - - elim = isl_alloc_array(bset->ctx, int, isl_basic_set_n_dim(bset)); - if (!elim) - goto error; - set_compute_elimination_index(context, elim); - for (i = 0; i < bset->n_eq; ++i) - set_reduced_using_equalities(bset->eq[i], bset->eq[i], - context, elim); - for (i = 0; i < bset->n_ineq; ++i) - set_reduced_using_equalities(bset->ineq[i], bset->ineq[i], - context, elim); - isl_basic_set_free(context); - free(elim); - bset = isl_basic_set_simplify(bset); - bset = isl_basic_set_finalize(bset); - return bset; -error: - isl_basic_set_free(bset); - isl_basic_set_free(context); - return NULL; -} - -static struct isl_basic_set *remove_shifted_constraints( - struct isl_basic_set *bset, struct isl_basic_set *context) -{ - unsigned int size; - isl_int ***index; - int bits; - int k, h, l; - isl_ctx *ctx; - - if (!bset) - return NULL; - - size = round_up(4 * (context->n_ineq+1) / 3 - 1); - bits = ffs(size) - 1; - ctx = isl_basic_set_get_ctx(bset); - index = isl_calloc_array(ctx, isl_int **, size); - if (!index) - return bset; - - for (k = 0; k < context->n_ineq; ++k) { - h = set_hash_index(index, size, bits, context, k); - index[h] = &context->ineq[k]; - } - for (k = 0; k < bset->n_ineq; ++k) { - h = set_hash_index(index, size, bits, bset, k); - if (!index[h]) - continue; - l = index[h] - &context->ineq[0]; - if (isl_int_lt(bset->ineq[k][0], context->ineq[l][0])) - continue; - bset = isl_basic_set_cow(bset); - if (!bset) - goto error; - isl_basic_set_drop_inequality(bset, k); - --k; - } - free(index); - return bset; -error: - free(index); - return bset; -} - -/* Remove all information from bset that is redundant in the context - * of context. Both bset and context are assumed to be full-dimensional. - * - * We first * remove the inequalities from "bset" - * that are obviously redundant with respect to some inequality in "context". - * - * If there are any inequalities left, we construct a tableau for - * the context and then add the inequalities of "bset". - * Before adding these inequalities, we freeze all constraints such that - * they won't be considered redundant in terms of the constraints of "bset". - * Then we detect all redundant constraints (among the - * constraints that weren't frozen), first by checking for redundancy in the - * the tableau and then by checking if replacing a constraint by its negation - * would lead to an empty set. This last step is fairly expensive - * and could be optimized by more reuse of the tableau. - * Finally, we update bset according to the results. - */ -static __isl_give isl_basic_set *uset_gist_full(__isl_take isl_basic_set *bset, - __isl_take isl_basic_set *context) -{ - int i, k; - isl_basic_set *combined = NULL; - struct isl_tab *tab = NULL; - unsigned context_ineq; - unsigned total; - - if (!bset || !context) - goto error; - - if (isl_basic_set_is_universe(bset)) { - isl_basic_set_free(context); - return bset; - } - - if (isl_basic_set_is_universe(context)) { - isl_basic_set_free(context); - return bset; - } - - bset = remove_shifted_constraints(bset, context); - if (!bset) - goto error; - if (bset->n_ineq == 0) - goto done; - - context_ineq = context->n_ineq; - combined = isl_basic_set_cow(isl_basic_set_copy(context)); - combined = isl_basic_set_extend_constraints(combined, 0, bset->n_ineq); - tab = isl_tab_from_basic_set(combined); - for (i = 0; i < context_ineq; ++i) - if (isl_tab_freeze_constraint(tab, i) < 0) - goto error; - tab = isl_tab_extend(tab, bset->n_ineq); - for (i = 0; i < bset->n_ineq; ++i) - if (isl_tab_add_ineq(tab, bset->ineq[i]) < 0) - goto error; - bset = isl_basic_set_add_constraints(combined, bset, 0); - combined = NULL; - if (!bset) - goto error; - if (isl_tab_detect_redundant(tab) < 0) - goto error; - total = isl_basic_set_total_dim(bset); - for (i = context_ineq; i < bset->n_ineq; ++i) { - int is_empty; - if (tab->con[i].is_redundant) - continue; - tab->con[i].is_redundant = 1; - combined = isl_basic_set_dup(bset); - combined = isl_basic_set_update_from_tab(combined, tab); - combined = isl_basic_set_extend_constraints(combined, 0, 1); - k = isl_basic_set_alloc_inequality(combined); - if (k < 0) - goto error; - isl_seq_neg(combined->ineq[k], bset->ineq[i], 1 + total); - isl_int_sub_ui(combined->ineq[k][0], combined->ineq[k][0], 1); - is_empty = isl_basic_set_is_empty(combined); - if (is_empty < 0) - goto error; - isl_basic_set_free(combined); - combined = NULL; - if (!is_empty) - tab->con[i].is_redundant = 0; - } - for (i = 0; i < context_ineq; ++i) - tab->con[i].is_redundant = 1; - bset = isl_basic_set_update_from_tab(bset, tab); - if (bset) { - ISL_F_SET(bset, ISL_BASIC_SET_NO_IMPLICIT); - ISL_F_SET(bset, ISL_BASIC_SET_NO_REDUNDANT); - } - - isl_tab_free(tab); -done: - bset = isl_basic_set_simplify(bset); - bset = isl_basic_set_finalize(bset); - isl_basic_set_free(context); - return bset; -error: - isl_tab_free(tab); - isl_basic_set_free(combined); - isl_basic_set_free(context); - isl_basic_set_free(bset); - return NULL; -} - -/* Remove all information from bset that is redundant in the context - * of context. In particular, equalities that are linear combinations - * of those in context are removed. Then the inequalities that are - * redundant in the context of the equalities and inequalities of - * context are removed. - * - * We first compute the integer affine hull of the intersection, - * compute the gist inside this affine hull and then add back - * those equalities that are not implied by the context. - * - * If two constraints are mutually redundant, then uset_gist_full - * will remove the second of those constraints. We therefore first - * sort the constraints so that constraints not involving existentially - * quantified variables are given precedence over those that do. - * We have to perform this sorting before the variable compression, - * because that may effect the order of the variables. - */ -static __isl_give isl_basic_set *uset_gist(__isl_take isl_basic_set *bset, - __isl_take isl_basic_set *context) -{ - isl_mat *eq; - isl_mat *T, *T2; - isl_basic_set *aff; - isl_basic_set *aff_context; - unsigned total; - - if (!bset || !context) - goto error; - - bset = isl_basic_set_intersect(bset, isl_basic_set_copy(context)); - if (isl_basic_set_plain_is_empty(bset)) { - isl_basic_set_free(context); - return bset; - } - bset = isl_basic_set_sort_constraints(bset); - aff = isl_basic_set_affine_hull(isl_basic_set_copy(bset)); - if (!aff) - goto error; - if (isl_basic_set_plain_is_empty(aff)) { - isl_basic_set_free(aff); - isl_basic_set_free(context); - return bset; - } - if (aff->n_eq == 0) { - isl_basic_set_free(aff); - return uset_gist_full(bset, context); - } - total = isl_basic_set_total_dim(bset); - eq = isl_mat_sub_alloc6(bset->ctx, aff->eq, 0, aff->n_eq, 0, 1 + total); - eq = isl_mat_cow(eq); - T = isl_mat_variable_compression(eq, &T2); - if (T && T->n_col == 0) { - isl_mat_free(T); - isl_mat_free(T2); - isl_basic_set_free(context); - isl_basic_set_free(aff); - return isl_basic_set_set_to_empty(bset); - } - - aff_context = isl_basic_set_affine_hull(isl_basic_set_copy(context)); - - bset = isl_basic_set_preimage(bset, isl_mat_copy(T)); - context = isl_basic_set_preimage(context, T); - - bset = uset_gist_full(bset, context); - bset = isl_basic_set_preimage(bset, T2); - bset = isl_basic_set_intersect(bset, aff); - bset = isl_basic_set_reduce_using_equalities(bset, aff_context); - - if (bset) { - ISL_F_SET(bset, ISL_BASIC_SET_NO_IMPLICIT); - ISL_F_SET(bset, ISL_BASIC_SET_NO_REDUNDANT); - } - - return bset; -error: - isl_basic_set_free(bset); - isl_basic_set_free(context); - return NULL; -} - -/* Normalize the divs in "bmap" in the context of the equalities in "context". - * We simply add the equalities in context to bmap and then do a regular - * div normalizations. Better results can be obtained by normalizing - * only the divs in bmap than do not also appear in context. - * We need to be careful to reduce the divs using the equalities - * so that later calls to isl_basic_map_overlying_set wouldn't introduce - * spurious constraints. - */ -static struct isl_basic_map *normalize_divs_in_context( - struct isl_basic_map *bmap, struct isl_basic_map *context) -{ - int i; - unsigned total_context; - int div_eq; - - div_eq = n_pure_div_eq(bmap); - if (div_eq == 0) - return bmap; - - if (context->n_div > 0) - bmap = isl_basic_map_align_divs(bmap, context); - - total_context = isl_basic_map_total_dim(context); - bmap = isl_basic_map_extend_constraints(bmap, context->n_eq, 0); - for (i = 0; i < context->n_eq; ++i) { - int k; - k = isl_basic_map_alloc_equality(bmap); - isl_seq_cpy(bmap->eq[k], context->eq[i], 1 + total_context); - isl_seq_clr(bmap->eq[k] + 1 + total_context, - isl_basic_map_total_dim(bmap) - total_context); - } - bmap = isl_basic_map_gauss(bmap, NULL); - bmap = normalize_divs(bmap, NULL); - bmap = isl_basic_map_gauss(bmap, NULL); - return bmap; -} - -struct isl_basic_map *isl_basic_map_gist(struct isl_basic_map *bmap, - struct isl_basic_map *context) -{ - struct isl_basic_set *bset; - - if (!bmap || !context) - goto error; - - if (isl_basic_map_is_universe(bmap)) { - isl_basic_map_free(context); - return bmap; - } - if (isl_basic_map_plain_is_empty(context)) { - struct isl_dim *dim = isl_dim_copy(bmap->dim); - isl_basic_map_free(context); - isl_basic_map_free(bmap); - return isl_basic_map_universe(dim); - } - if (isl_basic_map_plain_is_empty(bmap)) { - isl_basic_map_free(context); - return bmap; - } - - bmap = isl_basic_map_remove_redundancies(bmap); - context = isl_basic_map_remove_redundancies(context); - - if (context->n_eq) - bmap = normalize_divs_in_context(bmap, context); - - context = isl_basic_map_align_divs(context, bmap); - bmap = isl_basic_map_align_divs(bmap, context); - - bset = uset_gist(isl_basic_map_underlying_set(isl_basic_map_copy(bmap)), - isl_basic_map_underlying_set(context)); - - return isl_basic_map_overlying_set(bset, bmap); -error: - isl_basic_map_free(bmap); - isl_basic_map_free(context); - return NULL; -} - -/* - * Assumes context has no implicit divs. - */ -__isl_give isl_map *isl_map_gist_basic_map(__isl_take isl_map *map, - __isl_take isl_basic_map *context) -{ - int i; - - if (!map || !context) - goto error;; - - if (isl_basic_map_plain_is_empty(context)) { - struct isl_dim *dim = isl_dim_copy(map->dim); - isl_basic_map_free(context); - isl_map_free(map); - return isl_map_universe(dim); - } - - context = isl_basic_map_remove_redundancies(context); - map = isl_map_cow(map); - if (!map || !context) - goto error;; - isl_assert(map->ctx, isl_dim_equal(map->dim, context->dim), goto error); - map = isl_map_compute_divs(map); - for (i = 0; i < map->n; ++i) - context = isl_basic_map_align_divs(context, map->p[i]); - for (i = map->n - 1; i >= 0; --i) { - map->p[i] = isl_basic_map_gist(map->p[i], - isl_basic_map_copy(context)); - if (!map->p[i]) - goto error; - if (isl_basic_map_plain_is_empty(map->p[i])) { - isl_basic_map_free(map->p[i]); - if (i != map->n - 1) - map->p[i] = map->p[map->n - 1]; - map->n--; - } - } - isl_basic_map_free(context); - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - isl_basic_map_free(context); - return NULL; -} - -__isl_give isl_map *isl_map_gist(__isl_take isl_map *map, - __isl_take isl_map *context) -{ - context = isl_map_compute_divs(context); - return isl_map_gist_basic_map(map, isl_map_simple_hull(context)); -} - -struct isl_basic_set *isl_basic_set_gist(struct isl_basic_set *bset, - struct isl_basic_set *context) -{ - return (struct isl_basic_set *)isl_basic_map_gist( - (struct isl_basic_map *)bset, (struct isl_basic_map *)context); -} - -__isl_give isl_set *isl_set_gist_basic_set(__isl_take isl_set *set, - __isl_take isl_basic_set *context) -{ - return (struct isl_set *)isl_map_gist_basic_map((struct isl_map *)set, - (struct isl_basic_map *)context); -} - -__isl_give isl_set *isl_set_gist(__isl_take isl_set *set, - __isl_take isl_set *context) -{ - return (struct isl_set *)isl_map_gist((struct isl_map *)set, - (struct isl_map *)context); -} - -/* Quick check to see if two basic maps are disjoint. - * In particular, we reduce the equalities and inequalities of - * one basic map in the context of the equalities of the other - * basic map and check if we get a contradiction. - */ -int isl_basic_map_plain_is_disjoint(__isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2) -{ - struct isl_vec *v = NULL; - int *elim = NULL; - unsigned total; - int i; - - if (!bmap1 || !bmap2) - return -1; - isl_assert(bmap1->ctx, isl_dim_equal(bmap1->dim, bmap2->dim), - return -1); - if (bmap1->n_div || bmap2->n_div) - return 0; - if (!bmap1->n_eq && !bmap2->n_eq) - return 0; - - total = isl_dim_total(bmap1->dim); - if (total == 0) - return 0; - v = isl_vec_alloc(bmap1->ctx, 1 + total); - if (!v) - goto error; - elim = isl_alloc_array(bmap1->ctx, int, total); - if (!elim) - goto error; - compute_elimination_index(bmap1, elim); - for (i = 0; i < bmap2->n_eq; ++i) { - int reduced; - reduced = reduced_using_equalities(v->block.data, bmap2->eq[i], - bmap1, elim); - if (reduced && !isl_int_is_zero(v->block.data[0]) && - isl_seq_first_non_zero(v->block.data + 1, total) == -1) - goto disjoint; - } - for (i = 0; i < bmap2->n_ineq; ++i) { - int reduced; - reduced = reduced_using_equalities(v->block.data, - bmap2->ineq[i], bmap1, elim); - if (reduced && isl_int_is_neg(v->block.data[0]) && - isl_seq_first_non_zero(v->block.data + 1, total) == -1) - goto disjoint; - } - compute_elimination_index(bmap2, elim); - for (i = 0; i < bmap1->n_ineq; ++i) { - int reduced; - reduced = reduced_using_equalities(v->block.data, - bmap1->ineq[i], bmap2, elim); - if (reduced && isl_int_is_neg(v->block.data[0]) && - isl_seq_first_non_zero(v->block.data + 1, total) == -1) - goto disjoint; - } - isl_vec_free(v); - free(elim); - return 0; -disjoint: - isl_vec_free(v); - free(elim); - return 1; -error: - isl_vec_free(v); - free(elim); - return -1; -} - -int isl_basic_set_plain_is_disjoint(__isl_keep isl_basic_set *bset1, - __isl_keep isl_basic_set *bset2) -{ - return isl_basic_map_plain_is_disjoint((struct isl_basic_map *)bset1, - (struct isl_basic_map *)bset2); -} - -int isl_map_plain_is_disjoint(__isl_keep isl_map *map1, - __isl_keep isl_map *map2) -{ - int i, j; - - if (!map1 || !map2) - return -1; - - if (isl_map_plain_is_equal(map1, map2)) - return 0; - - for (i = 0; i < map1->n; ++i) { - for (j = 0; j < map2->n; ++j) { - int d = isl_basic_map_plain_is_disjoint(map1->p[i], - map2->p[j]); - if (d != 1) - return d; - } - } - return 1; -} - -int isl_set_plain_is_disjoint(__isl_keep isl_set *set1, - __isl_keep isl_set *set2) -{ - return isl_map_plain_is_disjoint((struct isl_map *)set1, - (struct isl_map *)set2); -} - -int isl_set_fast_is_disjoint(__isl_keep isl_set *set1, __isl_keep isl_set *set2) -{ - return isl_set_plain_is_disjoint(set1, set2); -} - -/* Check if we can combine a given div with lower bound l and upper - * bound u with some other div and if so return that other div. - * Otherwise return -1. - * - * We first check that - * - the bounds are opposites of each other (except for the constant - * term) - * - the bounds do not reference any other div - * - no div is defined in terms of this div - * - * Let m be the size of the range allowed on the div by the bounds. - * That is, the bounds are of the form - * - * e <= a <= e + m - 1 - * - * with e some expression in the other variables. - * We look for another div b such that no third div is defined in terms - * of this second div b and such that in any constraint that contains - * a (except for the given lower and upper bound), also contains b - * with a coefficient that is m times that of b. - * That is, all constraints (execpt for the lower and upper bound) - * are of the form - * - * e + f (a + m b) >= 0 - * - * If so, we return b so that "a + m b" can be replaced by - * a single div "c = a + m b". - */ -static int div_find_coalesce(struct isl_basic_map *bmap, int *pairs, - unsigned div, unsigned l, unsigned u) -{ - int i, j; - unsigned dim; - int coalesce = -1; - - if (bmap->n_div <= 1) - return -1; - dim = isl_dim_total(bmap->dim); - if (isl_seq_first_non_zero(bmap->ineq[l] + 1 + dim, div) != -1) - return -1; - if (isl_seq_first_non_zero(bmap->ineq[l] + 1 + dim + div + 1, - bmap->n_div - div - 1) != -1) - return -1; - if (!isl_seq_is_neg(bmap->ineq[l] + 1, bmap->ineq[u] + 1, - dim + bmap->n_div)) - return -1; - - for (i = 0; i < bmap->n_div; ++i) { - if (isl_int_is_zero(bmap->div[i][0])) - continue; - if (!isl_int_is_zero(bmap->div[i][1 + 1 + dim + div])) - return -1; - } - - isl_int_add(bmap->ineq[l][0], bmap->ineq[l][0], bmap->ineq[u][0]); - if (isl_int_is_neg(bmap->ineq[l][0])) { - isl_int_sub(bmap->ineq[l][0], - bmap->ineq[l][0], bmap->ineq[u][0]); - bmap = isl_basic_map_copy(bmap); - bmap = isl_basic_map_set_to_empty(bmap); - isl_basic_map_free(bmap); - return -1; - } - isl_int_add_ui(bmap->ineq[l][0], bmap->ineq[l][0], 1); - for (i = 0; i < bmap->n_div; ++i) { - if (i == div) - continue; - if (!pairs[i]) - continue; - for (j = 0; j < bmap->n_div; ++j) { - if (isl_int_is_zero(bmap->div[j][0])) - continue; - if (!isl_int_is_zero(bmap->div[j][1 + 1 + dim + i])) - break; - } - if (j < bmap->n_div) - continue; - for (j = 0; j < bmap->n_ineq; ++j) { - int valid; - if (j == l || j == u) - continue; - if (isl_int_is_zero(bmap->ineq[j][1 + dim + div])) - continue; - if (isl_int_is_zero(bmap->ineq[j][1 + dim + i])) - break; - isl_int_mul(bmap->ineq[j][1 + dim + div], - bmap->ineq[j][1 + dim + div], - bmap->ineq[l][0]); - valid = isl_int_eq(bmap->ineq[j][1 + dim + div], - bmap->ineq[j][1 + dim + i]); - isl_int_divexact(bmap->ineq[j][1 + dim + div], - bmap->ineq[j][1 + dim + div], - bmap->ineq[l][0]); - if (!valid) - break; - } - if (j < bmap->n_ineq) - continue; - coalesce = i; - break; - } - isl_int_sub_ui(bmap->ineq[l][0], bmap->ineq[l][0], 1); - isl_int_sub(bmap->ineq[l][0], bmap->ineq[l][0], bmap->ineq[u][0]); - return coalesce; -} - -/* Given a lower and an upper bound on div i, construct an inequality - * that when nonnegative ensures that this pair of bounds always allows - * for an integer value of the given div. - * The lower bound is inequality l, while the upper bound is inequality u. - * The constructed inequality is stored in ineq. - * g, fl, fu are temporary scalars. - * - * Let the upper bound be - * - * -n_u a + e_u >= 0 - * - * and the lower bound - * - * n_l a + e_l >= 0 - * - * Let n_u = f_u g and n_l = f_l g, with g = gcd(n_u, n_l). - * We have - * - * - f_u e_l <= f_u f_l g a <= f_l e_u - * - * Since all variables are integer valued, this is equivalent to - * - * - f_u e_l - (f_u - 1) <= f_u f_l g a <= f_l e_u + (f_l - 1) - * - * If this interval is at least f_u f_l g, then it contains at least - * one integer value for a. - * That is, the test constraint is - * - * f_l e_u + f_u e_l + f_l - 1 + f_u - 1 + 1 >= f_u f_l g - */ -static void construct_test_ineq(struct isl_basic_map *bmap, int i, - int l, int u, isl_int *ineq, isl_int g, isl_int fl, isl_int fu) -{ - unsigned dim; - dim = isl_dim_total(bmap->dim); - - isl_int_gcd(g, bmap->ineq[l][1 + dim + i], bmap->ineq[u][1 + dim + i]); - isl_int_divexact(fl, bmap->ineq[l][1 + dim + i], g); - isl_int_divexact(fu, bmap->ineq[u][1 + dim + i], g); - isl_int_neg(fu, fu); - isl_seq_combine(ineq, fl, bmap->ineq[u], fu, bmap->ineq[l], - 1 + dim + bmap->n_div); - isl_int_add(ineq[0], ineq[0], fl); - isl_int_add(ineq[0], ineq[0], fu); - isl_int_sub_ui(ineq[0], ineq[0], 1); - isl_int_mul(g, g, fl); - isl_int_mul(g, g, fu); - isl_int_sub(ineq[0], ineq[0], g); -} - -/* Remove more kinds of divs that are not strictly needed. - * In particular, if all pairs of lower and upper bounds on a div - * are such that they allow at least one integer value of the div, - * the we can eliminate the div using Fourier-Motzkin without - * introducing any spurious solutions. - */ -static struct isl_basic_map *drop_more_redundant_divs( - struct isl_basic_map *bmap, int *pairs, int n) -{ - struct isl_tab *tab = NULL; - struct isl_vec *vec = NULL; - unsigned dim; - int remove = -1; - isl_int g, fl, fu; - - isl_int_init(g); - isl_int_init(fl); - isl_int_init(fu); - - if (!bmap) - goto error; - - dim = isl_dim_total(bmap->dim); - vec = isl_vec_alloc(bmap->ctx, 1 + dim + bmap->n_div); - if (!vec) - goto error; - - tab = isl_tab_from_basic_map(bmap); - - while (n > 0) { - int i, l, u; - int best = -1; - enum isl_lp_result res; - - for (i = 0; i < bmap->n_div; ++i) { - if (!pairs[i]) - continue; - if (best >= 0 && pairs[best] <= pairs[i]) - continue; - best = i; - } - - i = best; - for (l = 0; l < bmap->n_ineq; ++l) { - if (!isl_int_is_pos(bmap->ineq[l][1 + dim + i])) - continue; - for (u = 0; u < bmap->n_ineq; ++u) { - if (!isl_int_is_neg(bmap->ineq[u][1 + dim + i])) - continue; - construct_test_ineq(bmap, i, l, u, - vec->el, g, fl, fu); - res = isl_tab_min(tab, vec->el, - bmap->ctx->one, &g, NULL, 0); - if (res == isl_lp_error) - goto error; - if (res == isl_lp_empty) { - bmap = isl_basic_map_set_to_empty(bmap); - break; - } - if (res != isl_lp_ok || isl_int_is_neg(g)) - break; - } - if (u < bmap->n_ineq) - break; - } - if (l == bmap->n_ineq) { - remove = i; - break; - } - pairs[i] = 0; - --n; - } - - isl_tab_free(tab); - isl_vec_free(vec); - - isl_int_clear(g); - isl_int_clear(fl); - isl_int_clear(fu); - - free(pairs); - - if (remove < 0) - return bmap; - - bmap = isl_basic_map_remove_dims(bmap, isl_dim_div, remove, 1); - return isl_basic_map_drop_redundant_divs(bmap); -error: - free(pairs); - isl_basic_map_free(bmap); - isl_tab_free(tab); - isl_vec_free(vec); - isl_int_clear(g); - isl_int_clear(fl); - isl_int_clear(fu); - return NULL; -} - -/* Given a pair of divs div1 and div2 such that, expect for the lower bound l - * and the upper bound u, div1 always occurs together with div2 in the form - * (div1 + m div2), where m is the constant range on the variable div1 - * allowed by l and u, replace the pair div1 and div2 by a single - * div that is equal to div1 + m div2. - * - * The new div will appear in the location that contains div2. - * We need to modify all constraints that contain - * div2 = (div - div1) / m - * (If a constraint does not contain div2, it will also not contain div1.) - * If the constraint also contains div1, then we know they appear - * as f (div1 + m div2) and we can simply replace (div1 + m div2) by div, - * i.e., the coefficient of div is f. - * - * Otherwise, we first need to introduce div1 into the constraint. - * Let the l be - * - * div1 + f >=0 - * - * and u - * - * -div1 + f' >= 0 - * - * A lower bound on div2 - * - * n div2 + t >= 0 - * - * can be replaced by - * - * (n * (m div 2 + div1) + m t + n f)/g >= 0 - * - * with g = gcd(m,n). - * An upper bound - * - * -n div2 + t >= 0 - * - * can be replaced by - * - * (-n * (m div2 + div1) + m t + n f')/g >= 0 - * - * These constraint are those that we would obtain from eliminating - * div1 using Fourier-Motzkin. - * - * After all constraints have been modified, we drop the lower and upper - * bound and then drop div1. - */ -static struct isl_basic_map *coalesce_divs(struct isl_basic_map *bmap, - unsigned div1, unsigned div2, unsigned l, unsigned u) -{ - isl_int a; - isl_int b; - isl_int m; - unsigned dim, total; - int i; - - dim = isl_dim_total(bmap->dim); - total = 1 + dim + bmap->n_div; - - isl_int_init(a); - isl_int_init(b); - isl_int_init(m); - isl_int_add(m, bmap->ineq[l][0], bmap->ineq[u][0]); - isl_int_add_ui(m, m, 1); - - for (i = 0; i < bmap->n_ineq; ++i) { - if (i == l || i == u) - continue; - if (isl_int_is_zero(bmap->ineq[i][1 + dim + div2])) - continue; - if (isl_int_is_zero(bmap->ineq[i][1 + dim + div1])) { - isl_int_gcd(b, m, bmap->ineq[i][1 + dim + div2]); - isl_int_divexact(a, m, b); - isl_int_divexact(b, bmap->ineq[i][1 + dim + div2], b); - if (isl_int_is_pos(b)) { - isl_seq_combine(bmap->ineq[i], a, bmap->ineq[i], - b, bmap->ineq[l], total); - } else { - isl_int_neg(b, b); - isl_seq_combine(bmap->ineq[i], a, bmap->ineq[i], - b, bmap->ineq[u], total); - } - } - isl_int_set(bmap->ineq[i][1 + dim + div2], - bmap->ineq[i][1 + dim + div1]); - isl_int_set_si(bmap->ineq[i][1 + dim + div1], 0); - } - - isl_int_clear(a); - isl_int_clear(b); - isl_int_clear(m); - if (l > u) { - isl_basic_map_drop_inequality(bmap, l); - isl_basic_map_drop_inequality(bmap, u); - } else { - isl_basic_map_drop_inequality(bmap, u); - isl_basic_map_drop_inequality(bmap, l); - } - bmap = isl_basic_map_drop_div(bmap, div1); - return bmap; -} - -/* First check if we can coalesce any pair of divs and - * then continue with dropping more redundant divs. - * - * We loop over all pairs of lower and upper bounds on a div - * with coefficient 1 and -1, respectively, check if there - * is any other div "c" with which we can coalesce the div - * and if so, perform the coalescing. - */ -static struct isl_basic_map *coalesce_or_drop_more_redundant_divs( - struct isl_basic_map *bmap, int *pairs, int n) -{ - int i, l, u; - unsigned dim; - - dim = isl_dim_total(bmap->dim); - - for (i = 0; i < bmap->n_div; ++i) { - if (!pairs[i]) - continue; - for (l = 0; l < bmap->n_ineq; ++l) { - if (!isl_int_is_one(bmap->ineq[l][1 + dim + i])) - continue; - for (u = 0; u < bmap->n_ineq; ++u) { - int c; - - if (!isl_int_is_negone(bmap->ineq[u][1+dim+i])) - continue; - c = div_find_coalesce(bmap, pairs, i, l, u); - if (c < 0) - continue; - free(pairs); - bmap = coalesce_divs(bmap, i, c, l, u); - return isl_basic_map_drop_redundant_divs(bmap); - } - } - } - - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) - return bmap; - - return drop_more_redundant_divs(bmap, pairs, n); -} - -/* Remove divs that are not strictly needed. - * In particular, if a div only occurs positively (or negatively) - * in constraints, then it can simply be dropped. - * Also, if a div occurs only occurs in two constraints and if moreover - * those two constraints are opposite to each other, except for the constant - * term and if the sum of the constant terms is such that for any value - * of the other values, there is always at least one integer value of the - * div, i.e., if one plus this sum is greater than or equal to - * the (absolute value) of the coefficent of the div in the constraints, - * then we can also simply drop the div. - * - * If any divs are left after these simple checks then we move on - * to more complicated cases in drop_more_redundant_divs. - */ -struct isl_basic_map *isl_basic_map_drop_redundant_divs( - struct isl_basic_map *bmap) -{ - int i, j; - unsigned off; - int *pairs = NULL; - int n = 0; - - if (!bmap) - goto error; - - off = isl_dim_total(bmap->dim); - pairs = isl_calloc_array(bmap->ctx, int, bmap->n_div); - if (!pairs) - goto error; - - for (i = 0; i < bmap->n_div; ++i) { - int pos, neg; - int last_pos, last_neg; - int redundant; - int defined; - - defined = !isl_int_is_zero(bmap->div[i][0]); - for (j = 0; j < bmap->n_eq; ++j) - if (!isl_int_is_zero(bmap->eq[j][1 + off + i])) - break; - if (j < bmap->n_eq) - continue; - ++n; - pos = neg = 0; - for (j = 0; j < bmap->n_ineq; ++j) { - if (isl_int_is_pos(bmap->ineq[j][1 + off + i])) { - last_pos = j; - ++pos; - } - if (isl_int_is_neg(bmap->ineq[j][1 + off + i])) { - last_neg = j; - ++neg; - } - } - pairs[i] = pos * neg; - if (pairs[i] == 0) { - for (j = bmap->n_ineq - 1; j >= 0; --j) - if (!isl_int_is_zero(bmap->ineq[j][1+off+i])) - isl_basic_map_drop_inequality(bmap, j); - bmap = isl_basic_map_drop_div(bmap, i); - free(pairs); - return isl_basic_map_drop_redundant_divs(bmap); - } - if (pairs[i] != 1) - continue; - if (!isl_seq_is_neg(bmap->ineq[last_pos] + 1, - bmap->ineq[last_neg] + 1, - off + bmap->n_div)) - continue; - - isl_int_add(bmap->ineq[last_pos][0], - bmap->ineq[last_pos][0], bmap->ineq[last_neg][0]); - isl_int_add_ui(bmap->ineq[last_pos][0], - bmap->ineq[last_pos][0], 1); - redundant = isl_int_ge(bmap->ineq[last_pos][0], - bmap->ineq[last_pos][1+off+i]); - isl_int_sub_ui(bmap->ineq[last_pos][0], - bmap->ineq[last_pos][0], 1); - isl_int_sub(bmap->ineq[last_pos][0], - bmap->ineq[last_pos][0], bmap->ineq[last_neg][0]); - if (!redundant) { - if (defined || - !ok_to_set_div_from_bound(bmap, i, last_pos)) { - pairs[i] = 0; - --n; - continue; - } - bmap = set_div_from_lower_bound(bmap, i, last_pos); - bmap = isl_basic_map_simplify(bmap); - free(pairs); - return isl_basic_map_drop_redundant_divs(bmap); - } - if (last_pos > last_neg) { - isl_basic_map_drop_inequality(bmap, last_pos); - isl_basic_map_drop_inequality(bmap, last_neg); - } else { - isl_basic_map_drop_inequality(bmap, last_neg); - isl_basic_map_drop_inequality(bmap, last_pos); - } - bmap = isl_basic_map_drop_div(bmap, i); - free(pairs); - return isl_basic_map_drop_redundant_divs(bmap); - } - - if (n > 0) - return coalesce_or_drop_more_redundant_divs(bmap, pairs, n); - - free(pairs); - return bmap; -error: - free(pairs); - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_drop_redundant_divs( - struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_drop_redundant_divs((struct isl_basic_map *)bset); -} - -struct isl_map *isl_map_drop_redundant_divs(struct isl_map *map) -{ - int i; - - if (!map) - return NULL; - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_drop_redundant_divs(map->p[i]); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -struct isl_set *isl_set_drop_redundant_divs(struct isl_set *set) -{ - return (struct isl_set *) - isl_map_drop_redundant_divs((struct isl_map *)set); -} diff --git a/cloog-0.16.3/isl/isl_map_subtract.c b/cloog-0.16.3/isl/isl_map_subtract.c deleted file mode 100644 index 0510657..0000000 --- a/cloog-0.16.3/isl/isl_map_subtract.c +++ /dev/null @@ -1,790 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include "isl_tab.h" -#include - -static void expand_constraint(isl_vec *v, unsigned dim, - isl_int *c, int *div_map, unsigned n_div) -{ - int i; - - isl_seq_cpy(v->el, c, 1 + dim); - isl_seq_clr(v->el + 1 + dim, v->size - (1 + dim)); - - for (i = 0; i < n_div; ++i) - isl_int_set(v->el[1 + dim + div_map[i]], c[1 + dim + i]); -} - -/* Add all constraints of bmap to tab. The equalities of bmap - * are added as a pair of inequalities. - */ -static int tab_add_constraints(struct isl_tab *tab, - __isl_keep isl_basic_map *bmap, int *div_map) -{ - int i; - unsigned dim; - unsigned tab_total; - unsigned bmap_total; - isl_vec *v; - - if (!tab || !bmap) - return -1; - - tab_total = isl_basic_map_total_dim(tab->bmap); - bmap_total = isl_basic_map_total_dim(bmap); - dim = isl_dim_total(tab->bmap->dim); - - if (isl_tab_extend_cons(tab, 2 * bmap->n_eq + bmap->n_ineq) < 0) - return -1; - - v = isl_vec_alloc(bmap->ctx, 1 + tab_total); - if (!v) - return -1; - - for (i = 0; i < bmap->n_eq; ++i) { - expand_constraint(v, dim, bmap->eq[i], div_map, bmap->n_div); - if (isl_tab_add_ineq(tab, v->el) < 0) - goto error; - isl_seq_neg(bmap->eq[i], bmap->eq[i], 1 + bmap_total); - expand_constraint(v, dim, bmap->eq[i], div_map, bmap->n_div); - if (isl_tab_add_ineq(tab, v->el) < 0) - goto error; - isl_seq_neg(bmap->eq[i], bmap->eq[i], 1 + bmap_total); - if (tab->empty) - break; - } - - for (i = 0; i < bmap->n_ineq; ++i) { - expand_constraint(v, dim, bmap->ineq[i], div_map, bmap->n_div); - if (isl_tab_add_ineq(tab, v->el) < 0) - goto error; - if (tab->empty) - break; - } - - isl_vec_free(v); - return 0; -error: - isl_vec_free(v); - return -1; -} - -/* Add a specific constraint of bmap (or its opposite) to tab. - * The position of the constraint is specified by "c", where - * the equalities of bmap are counted twice, once for the inequality - * that is equal to the equality, and once for its negation. - */ -static int tab_add_constraint(struct isl_tab *tab, - __isl_keep isl_basic_map *bmap, int *div_map, int c, int oppose) -{ - unsigned dim; - unsigned tab_total; - unsigned bmap_total; - isl_vec *v; - int r; - - if (!tab || !bmap) - return -1; - - tab_total = isl_basic_map_total_dim(tab->bmap); - bmap_total = isl_basic_map_total_dim(bmap); - dim = isl_dim_total(tab->bmap->dim); - - v = isl_vec_alloc(bmap->ctx, 1 + tab_total); - if (!v) - return -1; - - if (c < 2 * bmap->n_eq) { - if ((c % 2) != oppose) - isl_seq_neg(bmap->eq[c/2], bmap->eq[c/2], - 1 + bmap_total); - if (oppose) - isl_int_sub_ui(bmap->eq[c/2][0], bmap->eq[c/2][0], 1); - expand_constraint(v, dim, bmap->eq[c/2], div_map, bmap->n_div); - r = isl_tab_add_ineq(tab, v->el); - if (oppose) - isl_int_add_ui(bmap->eq[c/2][0], bmap->eq[c/2][0], 1); - if ((c % 2) != oppose) - isl_seq_neg(bmap->eq[c/2], bmap->eq[c/2], - 1 + bmap_total); - } else { - c -= 2 * bmap->n_eq; - if (oppose) { - isl_seq_neg(bmap->ineq[c], bmap->ineq[c], - 1 + bmap_total); - isl_int_sub_ui(bmap->ineq[c][0], bmap->ineq[c][0], 1); - } - expand_constraint(v, dim, bmap->ineq[c], div_map, bmap->n_div); - r = isl_tab_add_ineq(tab, v->el); - if (oppose) { - isl_int_add_ui(bmap->ineq[c][0], bmap->ineq[c][0], 1); - isl_seq_neg(bmap->ineq[c], bmap->ineq[c], - 1 + bmap_total); - } - } - - isl_vec_free(v); - return r; -} - -static int tab_add_divs(struct isl_tab *tab, __isl_keep isl_basic_map *bmap, - int **div_map) -{ - int i, j; - struct isl_vec *vec; - unsigned total; - unsigned dim; - - if (!bmap) - return -1; - if (!bmap->n_div) - return 0; - - if (!*div_map) - *div_map = isl_alloc_array(bmap->ctx, int, bmap->n_div); - if (!*div_map) - return -1; - - total = isl_basic_map_total_dim(tab->bmap); - dim = total - tab->bmap->n_div; - vec = isl_vec_alloc(bmap->ctx, 2 + total + bmap->n_div); - if (!vec) - return -1; - - for (i = 0; i < bmap->n_div; ++i) { - isl_seq_cpy(vec->el, bmap->div[i], 2 + dim); - isl_seq_clr(vec->el + 2 + dim, tab->bmap->n_div); - for (j = 0; j < i; ++j) - isl_int_set(vec->el[2 + dim + (*div_map)[j]], - bmap->div[i][2 + dim + j]); - for (j = 0; j < tab->bmap->n_div; ++j) - if (isl_seq_eq(tab->bmap->div[j], - vec->el, 2 + dim + tab->bmap->n_div)) - break; - (*div_map)[i] = j; - if (j == tab->bmap->n_div) { - vec->size = 2 + dim + tab->bmap->n_div; - if (isl_tab_add_div(tab, vec, NULL, NULL) < 0) - goto error; - } - } - - isl_vec_free(vec); - - return 0; -error: - isl_vec_free(vec); - - return -1; -} - -/* Freeze all constraints of tableau tab. - */ -static int tab_freeze_constraints(struct isl_tab *tab) -{ - int i; - - for (i = 0; i < tab->n_con; ++i) - if (isl_tab_freeze_constraint(tab, i) < 0) - return -1; - - return 0; -} - -/* Check for redundant constraints starting at offset. - * Put the indices of the redundant constraints in index - * and return the number of redundant constraints. - */ -static int n_non_redundant(isl_ctx *ctx, struct isl_tab *tab, - int offset, int **index) -{ - int i, n; - int n_test = tab->n_con - offset; - - if (isl_tab_detect_redundant(tab) < 0) - return -1; - - if (!*index) - *index = isl_alloc_array(ctx, int, n_test); - if (!*index) - return -1; - - for (n = 0, i = 0; i < n_test; ++i) { - int r; - r = isl_tab_is_redundant(tab, offset + i); - if (r < 0) - return -1; - if (r) - continue; - (*index)[n++] = i; - } - - return n; -} - -/* basic_map_collect_diff calls add on each of the pieces of - * the set difference between bmap and map until the add method - * return a negative value. - */ -struct isl_diff_collector { - int (*add)(struct isl_diff_collector *dc, - __isl_take isl_basic_map *bmap); -}; - -/* Compute the set difference between bmap and map and call - * dc->add on each of the piece until this function returns - * a negative value. - * Return 0 on success and -1 on error. dc->add returning - * a negative value is treated as an error, but the calling - * function can interpret the results based on the state of dc. - * - * Assumes that map has known divs. - * - * The difference is computed by a backtracking algorithm. - * Each level corresponds to a basic map in "map". - * When a node in entered for the first time, we check - * if the corresonding basic map intersects the current piece - * of "bmap". If not, we move to the next level. - * Otherwise, we split the current piece into as many - * pieces as there are non-redundant constraints of the current - * basic map in the intersection. Each of these pieces is - * handled by a child of the current node. - * In particular, if there are n non-redundant constraints, - * then for each 0 <= i < n, a piece is cut off by adding - * constraints 0 <= j < i and adding the opposite of constraint i. - * If there are no non-redundant constraints, meaning that the current - * piece is a subset of the current basic map, then we simply backtrack. - * - * In the leaves, we check if the remaining piece has any integer points - * and if so, pass it along to dc->add. As a special case, if nothing - * has been removed when we end up in a leaf, we simply pass along - * the original basic map. - */ -static int basic_map_collect_diff(__isl_take isl_basic_map *bmap, - __isl_take isl_map *map, struct isl_diff_collector *dc) -{ - int i; - int modified; - int level; - int init; - int empty; - isl_ctx *ctx; - struct isl_tab *tab = NULL; - struct isl_tab_undo **snap = NULL; - int *k = NULL; - int *n = NULL; - int **index = NULL; - int **div_map = NULL; - - empty = isl_basic_map_is_empty(bmap); - if (empty) { - isl_basic_map_free(bmap); - isl_map_free(map); - return empty < 0 ? -1 : 0; - } - - bmap = isl_basic_map_cow(bmap); - map = isl_map_cow(map); - - if (!bmap || !map) - goto error; - - ctx = map->ctx; - snap = isl_alloc_array(map->ctx, struct isl_tab_undo *, map->n); - k = isl_alloc_array(map->ctx, int, map->n); - n = isl_alloc_array(map->ctx, int, map->n); - index = isl_calloc_array(map->ctx, int *, map->n); - div_map = isl_calloc_array(map->ctx, int *, map->n); - if (!snap || !k || !n || !index || !div_map) - goto error; - - bmap = isl_basic_map_order_divs(bmap); - map = isl_map_order_divs(map); - - tab = isl_tab_from_basic_map(bmap); - if (isl_tab_track_bmap(tab, isl_basic_map_copy(bmap)) < 0) - goto error; - - modified = 0; - level = 0; - init = 1; - - while (level >= 0) { - if (level >= map->n) { - int empty; - struct isl_basic_map *bm; - if (!modified) { - if (dc->add(dc, isl_basic_map_copy(bmap)) < 0) - goto error; - break; - } - bm = isl_basic_map_copy(tab->bmap); - bm = isl_basic_map_cow(bm); - bm = isl_basic_map_update_from_tab(bm, tab); - bm = isl_basic_map_simplify(bm); - bm = isl_basic_map_finalize(bm); - empty = isl_basic_map_is_empty(bm); - if (empty) - isl_basic_map_free(bm); - else if (dc->add(dc, bm) < 0) - goto error; - if (empty < 0) - goto error; - level--; - init = 0; - continue; - } - if (init) { - int offset; - struct isl_tab_undo *snap2; - snap2 = isl_tab_snap(tab); - if (tab_add_divs(tab, map->p[level], - &div_map[level]) < 0) - goto error; - offset = tab->n_con; - snap[level] = isl_tab_snap(tab); - if (tab_freeze_constraints(tab) < 0) - goto error; - if (tab_add_constraints(tab, map->p[level], - div_map[level]) < 0) - goto error; - k[level] = 0; - n[level] = 0; - if (tab->empty) { - if (isl_tab_rollback(tab, snap2) < 0) - goto error; - level++; - continue; - } - modified = 1; - n[level] = n_non_redundant(ctx, tab, offset, - &index[level]); - if (n[level] < 0) - goto error; - if (n[level] == 0) { - level--; - init = 0; - continue; - } - if (isl_tab_rollback(tab, snap[level]) < 0) - goto error; - if (tab_add_constraint(tab, map->p[level], - div_map[level], index[level][0], 1) < 0) - goto error; - level++; - continue; - } else { - if (k[level] + 1 >= n[level]) { - level--; - continue; - } - if (isl_tab_rollback(tab, snap[level]) < 0) - goto error; - if (tab_add_constraint(tab, map->p[level], - div_map[level], - index[level][k[level]], 0) < 0) - goto error; - snap[level] = isl_tab_snap(tab); - k[level]++; - if (tab_add_constraint(tab, map->p[level], - div_map[level], - index[level][k[level]], 1) < 0) - goto error; - level++; - init = 1; - continue; - } - } - - isl_tab_free(tab); - free(snap); - free(n); - free(k); - for (i = 0; index && i < map->n; ++i) - free(index[i]); - free(index); - for (i = 0; div_map && i < map->n; ++i) - free(div_map[i]); - free(div_map); - - isl_basic_map_free(bmap); - isl_map_free(map); - - return 0; -error: - isl_tab_free(tab); - free(snap); - free(n); - free(k); - for (i = 0; index && i < map->n; ++i) - free(index[i]); - free(index); - for (i = 0; div_map && i < map->n; ++i) - free(div_map[i]); - free(div_map); - isl_basic_map_free(bmap); - isl_map_free(map); - return -1; -} - -/* A diff collector that actually collects all parts of the - * set difference in the field diff. - */ -struct isl_subtract_diff_collector { - struct isl_diff_collector dc; - struct isl_map *diff; -}; - -/* isl_subtract_diff_collector callback. - */ -static int basic_map_subtract_add(struct isl_diff_collector *dc, - __isl_take isl_basic_map *bmap) -{ - struct isl_subtract_diff_collector *sdc; - sdc = (struct isl_subtract_diff_collector *)dc; - - sdc->diff = isl_map_union_disjoint(sdc->diff, - isl_map_from_basic_map(bmap)); - - return sdc->diff ? 0 : -1; -} - -/* Return the set difference between bmap and map. - */ -static __isl_give isl_map *basic_map_subtract(__isl_take isl_basic_map *bmap, - __isl_take isl_map *map) -{ - struct isl_subtract_diff_collector sdc; - sdc.dc.add = &basic_map_subtract_add; - sdc.diff = isl_map_empty_like_basic_map(bmap); - if (basic_map_collect_diff(bmap, map, &sdc.dc) < 0) { - isl_map_free(sdc.diff); - sdc.diff = NULL; - } - return sdc.diff; -} - -/* Return the set difference between map1 and map2. - * (U_i A_i) \ (U_j B_j) is computed as U_i (A_i \ (U_j B_j)) - */ -struct isl_map *isl_map_subtract(struct isl_map *map1, struct isl_map *map2) -{ - int i; - struct isl_map *diff; - - if (!map1 || !map2) - goto error; - - isl_assert(map1->ctx, isl_dim_equal(map1->dim, map2->dim), goto error); - - if (isl_map_is_empty(map2)) { - isl_map_free(map2); - return map1; - } - - map1 = isl_map_compute_divs(map1); - map2 = isl_map_compute_divs(map2); - if (!map1 || !map2) - goto error; - - map1 = isl_map_remove_empty_parts(map1); - map2 = isl_map_remove_empty_parts(map2); - - diff = isl_map_empty_like(map1); - for (i = 0; i < map1->n; ++i) { - struct isl_map *d; - d = basic_map_subtract(isl_basic_map_copy(map1->p[i]), - isl_map_copy(map2)); - if (ISL_F_ISSET(map1, ISL_MAP_DISJOINT)) - diff = isl_map_union_disjoint(diff, d); - else - diff = isl_map_union(diff, d); - } - - isl_map_free(map1); - isl_map_free(map2); - - return diff; -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -struct isl_set *isl_set_subtract(struct isl_set *set1, struct isl_set *set2) -{ - return (struct isl_set *) - isl_map_subtract( - (struct isl_map *)set1, (struct isl_map *)set2); -} - -/* A diff collector that aborts as soon as its add function is called, - * setting empty to 0. - */ -struct isl_is_empty_diff_collector { - struct isl_diff_collector dc; - int empty; -}; - -/* isl_is_empty_diff_collector callback. - */ -static int basic_map_is_empty_add(struct isl_diff_collector *dc, - __isl_take isl_basic_map *bmap) -{ - struct isl_is_empty_diff_collector *edc; - edc = (struct isl_is_empty_diff_collector *)dc; - - edc->empty = 0; - - isl_basic_map_free(bmap); - return -1; -} - -/* Check if bmap \ map is empty by computing this set difference - * and breaking off as soon as the difference is known to be non-empty. - */ -static int basic_map_diff_is_empty(__isl_keep isl_basic_map *bmap, - __isl_keep isl_map *map) -{ - int r; - struct isl_is_empty_diff_collector edc; - - r = isl_basic_map_plain_is_empty(bmap); - if (r) - return r; - - edc.dc.add = &basic_map_is_empty_add; - edc.empty = 1; - r = basic_map_collect_diff(isl_basic_map_copy(bmap), - isl_map_copy(map), &edc.dc); - if (!edc.empty) - return 0; - - return r < 0 ? -1 : 1; -} - -/* Check if map1 \ map2 is empty by checking if the set difference is empty - * for each of the basic maps in map1. - */ -static int map_diff_is_empty(__isl_keep isl_map *map1, __isl_keep isl_map *map2) -{ - int i; - int is_empty = 1; - - if (!map1 || !map2) - return -1; - - for (i = 0; i < map1->n; ++i) { - is_empty = basic_map_diff_is_empty(map1->p[i], map2); - if (is_empty < 0 || !is_empty) - break; - } - - return is_empty; -} - -/* Return 1 if "bmap" contains a single element. - */ -int isl_basic_map_plain_is_singleton(__isl_keep isl_basic_map *bmap) -{ - if (!bmap) - return -1; - if (bmap->n_div) - return 0; - if (bmap->n_ineq) - return 0; - return bmap->n_eq == isl_basic_map_total_dim(bmap); -} - -/* Return 1 if "map" contains a single element. - */ -int isl_map_plain_is_singleton(__isl_keep isl_map *map) -{ - if (!map) - return -1; - if (map->n != 1) - return 0; - - return isl_basic_map_plain_is_singleton(map->p[0]); -} - -/* Given a singleton basic map, extract the single element - * as an isl_point. - */ -static __isl_give isl_point *singleton_extract_point( - __isl_keep isl_basic_map *bmap) -{ - int j; - unsigned dim; - struct isl_vec *point; - isl_int m; - - if (!bmap) - return NULL; - - dim = isl_basic_map_total_dim(bmap); - isl_assert(bmap->ctx, bmap->n_eq == dim, return NULL); - point = isl_vec_alloc(bmap->ctx, 1 + dim); - if (!point) - return NULL; - - isl_int_init(m); - - isl_int_set_si(point->el[0], 1); - for (j = 0; j < bmap->n_eq; ++j) { - int i = dim - 1 - j; - isl_assert(bmap->ctx, - isl_seq_first_non_zero(bmap->eq[j] + 1, i) == -1, - goto error); - isl_assert(bmap->ctx, - isl_int_is_one(bmap->eq[j][1 + i]) || - isl_int_is_negone(bmap->eq[j][1 + i]), - goto error); - isl_assert(bmap->ctx, - isl_seq_first_non_zero(bmap->eq[j]+1+i+1, dim-i-1) == -1, - goto error); - - isl_int_gcd(m, point->el[0], bmap->eq[j][1 + i]); - isl_int_divexact(m, bmap->eq[j][1 + i], m); - isl_int_abs(m, m); - isl_seq_scale(point->el, point->el, m, 1 + i); - isl_int_divexact(m, point->el[0], bmap->eq[j][1 + i]); - isl_int_neg(m, m); - isl_int_mul(point->el[1 + i], m, bmap->eq[j][0]); - } - - isl_int_clear(m); - return isl_point_alloc(isl_basic_map_get_dim(bmap), point); -error: - isl_int_clear(m); - isl_vec_free(point); - return NULL; -} - -/* Return 1 is the singleton map "map1" is a subset of "map2", - * i.e., if the single element of "map1" is also an element of "map2". - * Assumes "map2" has known divs. - */ -static int map_is_singleton_subset(__isl_keep isl_map *map1, - __isl_keep isl_map *map2) -{ - int i; - int is_subset = 0; - struct isl_point *point; - - if (!map1 || !map2) - return -1; - if (map1->n != 1) - return -1; - - point = singleton_extract_point(map1->p[0]); - if (!point) - return -1; - - for (i = 0; i < map2->n; ++i) { - is_subset = isl_basic_map_contains_point(map2->p[i], point); - if (is_subset) - break; - } - - isl_point_free(point); - return is_subset; -} - -int isl_map_is_subset(struct isl_map *map1, struct isl_map *map2) -{ - int is_subset = 0; - - if (!map1 || !map2) - return -1; - - if (isl_map_is_empty(map1)) - return 1; - - if (isl_map_is_empty(map2)) - return 0; - - if (isl_map_plain_is_universe(map2)) - return 1; - - map2 = isl_map_compute_divs(isl_map_copy(map2)); - if (isl_map_plain_is_singleton(map1)) { - is_subset = map_is_singleton_subset(map1, map2); - isl_map_free(map2); - return is_subset; - } - is_subset = map_diff_is_empty(map1, map2); - isl_map_free(map2); - - return is_subset; -} - -int isl_set_is_subset(struct isl_set *set1, struct isl_set *set2) -{ - return isl_map_is_subset( - (struct isl_map *)set1, (struct isl_map *)set2); -} - -__isl_give isl_map *isl_map_make_disjoint(__isl_take isl_map *map) -{ - int i; - struct isl_subtract_diff_collector sdc; - sdc.dc.add = &basic_map_subtract_add; - - if (!map) - return NULL; - if (ISL_F_ISSET(map, ISL_MAP_DISJOINT)) - return map; - if (map->n <= 1) - return map; - - map = isl_map_compute_divs(map); - map = isl_map_remove_empty_parts(map); - - if (!map || map->n <= 1) - return map; - - sdc.diff = isl_map_from_basic_map(isl_basic_map_copy(map->p[0])); - - for (i = 1; i < map->n; ++i) { - struct isl_basic_map *bmap = isl_basic_map_copy(map->p[i]); - struct isl_map *copy = isl_map_copy(sdc.diff); - if (basic_map_collect_diff(bmap, copy, &sdc.dc) < 0) { - isl_map_free(sdc.diff); - sdc.diff = NULL; - break; - } - } - - isl_map_free(map); - - return sdc.diff; -} - -__isl_give isl_set *isl_set_make_disjoint(__isl_take isl_set *set) -{ - return (struct isl_set *)isl_map_make_disjoint((struct isl_map *)set); -} - -__isl_give isl_set *isl_set_complement(__isl_take isl_set *set) -{ - isl_set *universe; - - if (!set) - return NULL; - - universe = isl_set_universe(isl_set_get_dim(set)); - - return isl_set_subtract(universe, set); -} diff --git a/cloog-0.16.3/isl/isl_mat.c b/cloog-0.16.3/isl/isl_mat.c deleted file mode 100644 index e64beae..0000000 --- a/cloog-0.16.3/isl/isl_mat.c +++ /dev/null @@ -1,1625 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include "isl_map_private.h" -#include - -isl_ctx *isl_mat_get_ctx(__isl_keep isl_mat *mat) -{ - return mat ? mat->ctx : NULL; -} - -struct isl_mat *isl_mat_alloc(struct isl_ctx *ctx, - unsigned n_row, unsigned n_col) -{ - int i; - struct isl_mat *mat; - - mat = isl_alloc_type(ctx, struct isl_mat); - if (!mat) - return NULL; - - mat->row = NULL; - mat->block = isl_blk_alloc(ctx, n_row * n_col); - if (isl_blk_is_error(mat->block)) - goto error; - mat->row = isl_alloc_array(ctx, isl_int *, n_row); - if (!mat->row) - goto error; - - for (i = 0; i < n_row; ++i) - mat->row[i] = mat->block.data + i * n_col; - - mat->ctx = ctx; - isl_ctx_ref(ctx); - mat->ref = 1; - mat->n_row = n_row; - mat->n_col = n_col; - mat->max_col = n_col; - mat->flags = 0; - - return mat; -error: - isl_blk_free(ctx, mat->block); - free(mat); - return NULL; -} - -struct isl_mat *isl_mat_extend(struct isl_mat *mat, - unsigned n_row, unsigned n_col) -{ - int i; - isl_int *old; - isl_int **row; - - if (!mat) - return NULL; - - if (mat->max_col >= n_col && mat->n_row >= n_row) { - if (mat->n_col < n_col) - mat->n_col = n_col; - return mat; - } - - if (mat->max_col < n_col) { - struct isl_mat *new_mat; - - if (n_row < mat->n_row) - n_row = mat->n_row; - new_mat = isl_mat_alloc(mat->ctx, n_row, n_col); - if (!new_mat) - goto error; - for (i = 0; i < mat->n_row; ++i) - isl_seq_cpy(new_mat->row[i], mat->row[i], mat->n_col); - isl_mat_free(mat); - return new_mat; - } - - mat = isl_mat_cow(mat); - if (!mat) - goto error; - - old = mat->block.data; - mat->block = isl_blk_extend(mat->ctx, mat->block, n_row * mat->max_col); - if (isl_blk_is_error(mat->block)) - goto error; - row = isl_realloc_array(mat->ctx, mat->row, isl_int *, n_row); - if (!row) - goto error; - mat->row = row; - - for (i = 0; i < mat->n_row; ++i) - mat->row[i] = mat->block.data + (mat->row[i] - old); - for (i = mat->n_row; i < n_row; ++i) - mat->row[i] = mat->block.data + i * mat->max_col; - mat->n_row = n_row; - if (mat->n_col < n_col) - mat->n_col = n_col; - - return mat; -error: - isl_mat_free(mat); - return NULL; -} - -__isl_give isl_mat *isl_mat_sub_alloc6(isl_ctx *ctx, isl_int **row, - unsigned first_row, unsigned n_row, unsigned first_col, unsigned n_col) -{ - int i; - struct isl_mat *mat; - - mat = isl_alloc_type(ctx, struct isl_mat); - if (!mat) - return NULL; - mat->row = isl_alloc_array(ctx, isl_int *, n_row); - if (!mat->row) - goto error; - for (i = 0; i < n_row; ++i) - mat->row[i] = row[first_row+i] + first_col; - mat->ctx = ctx; - isl_ctx_ref(ctx); - mat->ref = 1; - mat->n_row = n_row; - mat->n_col = n_col; - mat->block = isl_blk_empty(); - mat->flags = ISL_MAT_BORROWED; - return mat; -error: - free(mat); - return NULL; -} - -__isl_give isl_mat *isl_mat_sub_alloc(__isl_keep isl_mat *mat, - unsigned first_row, unsigned n_row, unsigned first_col, unsigned n_col) -{ - if (!mat) - return NULL; - return isl_mat_sub_alloc6(mat->ctx, mat->row, first_row, n_row, - first_col, n_col); -} - -void isl_mat_sub_copy(struct isl_ctx *ctx, isl_int **dst, isl_int **src, - unsigned n_row, unsigned dst_col, unsigned src_col, unsigned n_col) -{ - int i; - - for (i = 0; i < n_row; ++i) - isl_seq_cpy(dst[i]+dst_col, src[i]+src_col, n_col); -} - -void isl_mat_sub_neg(struct isl_ctx *ctx, isl_int **dst, isl_int **src, - unsigned n_row, unsigned dst_col, unsigned src_col, unsigned n_col) -{ - int i; - - for (i = 0; i < n_row; ++i) - isl_seq_neg(dst[i]+dst_col, src[i]+src_col, n_col); -} - -struct isl_mat *isl_mat_copy(struct isl_mat *mat) -{ - if (!mat) - return NULL; - - mat->ref++; - return mat; -} - -struct isl_mat *isl_mat_dup(struct isl_mat *mat) -{ - int i; - struct isl_mat *mat2; - - if (!mat) - return NULL; - mat2 = isl_mat_alloc(mat->ctx, mat->n_row, mat->n_col); - if (!mat2) - return NULL; - for (i = 0; i < mat->n_row; ++i) - isl_seq_cpy(mat2->row[i], mat->row[i], mat->n_col); - return mat2; -} - -struct isl_mat *isl_mat_cow(struct isl_mat *mat) -{ - struct isl_mat *mat2; - if (!mat) - return NULL; - - if (mat->ref == 1 && !ISL_F_ISSET(mat, ISL_MAT_BORROWED)) - return mat; - - mat2 = isl_mat_dup(mat); - isl_mat_free(mat); - return mat2; -} - -void isl_mat_free(struct isl_mat *mat) -{ - if (!mat) - return; - - if (--mat->ref > 0) - return; - - if (!ISL_F_ISSET(mat, ISL_MAT_BORROWED)) - isl_blk_free(mat->ctx, mat->block); - isl_ctx_deref(mat->ctx); - free(mat->row); - free(mat); -} - -int isl_mat_rows(__isl_keep isl_mat *mat) -{ - return mat ? mat->n_row : -1; -} - -int isl_mat_cols(__isl_keep isl_mat *mat) -{ - return mat ? mat->n_col : -1; -} - -int isl_mat_get_element(__isl_keep isl_mat *mat, int row, int col, isl_int *v) -{ - if (!mat) - return -1; - if (row < 0 || row >= mat->n_row) - isl_die(mat->ctx, isl_error_invalid, "row out of range", - return -1); - if (col < 0 || col >= mat->n_col) - isl_die(mat->ctx, isl_error_invalid, "column out of range", - return -1); - isl_int_set(*v, mat->row[row][col]); - return 0; -} - -__isl_give isl_mat *isl_mat_set_element(__isl_take isl_mat *mat, - int row, int col, isl_int v) -{ - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - if (row < 0 || row >= mat->n_row) - isl_die(mat->ctx, isl_error_invalid, "row out of range", - goto error); - if (col < 0 || col >= mat->n_col) - isl_die(mat->ctx, isl_error_invalid, "column out of range", - goto error); - isl_int_set(mat->row[row][col], v); - return mat; -error: - isl_mat_free(mat); - return NULL; -} - -__isl_give isl_mat *isl_mat_set_element_si(__isl_take isl_mat *mat, - int row, int col, int v) -{ - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - if (row < 0 || row >= mat->n_row) - isl_die(mat->ctx, isl_error_invalid, "row out of range", - goto error); - if (col < 0 || col >= mat->n_col) - isl_die(mat->ctx, isl_error_invalid, "column out of range", - goto error); - isl_int_set_si(mat->row[row][col], v); - return mat; -error: - isl_mat_free(mat); - return NULL; -} - -struct isl_mat *isl_mat_identity(struct isl_ctx *ctx, unsigned n_row) -{ - int i; - struct isl_mat *mat; - - mat = isl_mat_alloc(ctx, n_row, n_row); - if (!mat) - return NULL; - for (i = 0; i < n_row; ++i) { - isl_seq_clr(mat->row[i], i); - isl_int_set_si(mat->row[i][i], 1); - isl_seq_clr(mat->row[i]+i+1, n_row-(i+1)); - } - - return mat; -} - -struct isl_vec *isl_mat_vec_product(struct isl_mat *mat, struct isl_vec *vec) -{ - int i; - struct isl_vec *prod; - - if (!mat || !vec) - goto error; - - isl_assert(mat->ctx, mat->n_col == vec->size, goto error); - - prod = isl_vec_alloc(mat->ctx, mat->n_row); - if (!prod) - goto error; - - for (i = 0; i < prod->size; ++i) - isl_seq_inner_product(mat->row[i], vec->el, vec->size, - &prod->block.data[i]); - isl_mat_free(mat); - isl_vec_free(vec); - return prod; -error: - isl_mat_free(mat); - isl_vec_free(vec); - return NULL; -} - -__isl_give isl_vec *isl_mat_vec_inverse_product(__isl_take isl_mat *mat, - __isl_take isl_vec *vec) -{ - struct isl_mat *vec_mat; - int i; - - if (!mat || !vec) - goto error; - vec_mat = isl_mat_alloc(vec->ctx, vec->size, 1); - if (!vec_mat) - goto error; - for (i = 0; i < vec->size; ++i) - isl_int_set(vec_mat->row[i][0], vec->el[i]); - vec_mat = isl_mat_inverse_product(mat, vec_mat); - isl_vec_free(vec); - if (!vec_mat) - return NULL; - vec = isl_vec_alloc(vec_mat->ctx, vec_mat->n_row); - if (vec) - for (i = 0; i < vec->size; ++i) - isl_int_set(vec->el[i], vec_mat->row[i][0]); - isl_mat_free(vec_mat); - return vec; -error: - isl_mat_free(mat); - isl_vec_free(vec); - return NULL; -} - -struct isl_vec *isl_vec_mat_product(struct isl_vec *vec, struct isl_mat *mat) -{ - int i, j; - struct isl_vec *prod; - - if (!mat || !vec) - goto error; - - isl_assert(mat->ctx, mat->n_row == vec->size, goto error); - - prod = isl_vec_alloc(mat->ctx, mat->n_col); - if (!prod) - goto error; - - for (i = 0; i < prod->size; ++i) { - isl_int_set_si(prod->el[i], 0); - for (j = 0; j < vec->size; ++j) - isl_int_addmul(prod->el[i], vec->el[j], mat->row[j][i]); - } - isl_mat_free(mat); - isl_vec_free(vec); - return prod; -error: - isl_mat_free(mat); - isl_vec_free(vec); - return NULL; -} - -struct isl_mat *isl_mat_aff_direct_sum(struct isl_mat *left, - struct isl_mat *right) -{ - int i; - struct isl_mat *sum; - - if (!left || !right) - goto error; - - isl_assert(left->ctx, left->n_row == right->n_row, goto error); - isl_assert(left->ctx, left->n_row >= 1, goto error); - isl_assert(left->ctx, left->n_col >= 1, goto error); - isl_assert(left->ctx, right->n_col >= 1, goto error); - isl_assert(left->ctx, - isl_seq_first_non_zero(left->row[0]+1, left->n_col-1) == -1, - goto error); - isl_assert(left->ctx, - isl_seq_first_non_zero(right->row[0]+1, right->n_col-1) == -1, - goto error); - - sum = isl_mat_alloc(left->ctx, left->n_row, left->n_col + right->n_col - 1); - if (!sum) - goto error; - isl_int_lcm(sum->row[0][0], left->row[0][0], right->row[0][0]); - isl_int_divexact(left->row[0][0], sum->row[0][0], left->row[0][0]); - isl_int_divexact(right->row[0][0], sum->row[0][0], right->row[0][0]); - - isl_seq_clr(sum->row[0]+1, sum->n_col-1); - for (i = 1; i < sum->n_row; ++i) { - isl_int_mul(sum->row[i][0], left->row[0][0], left->row[i][0]); - isl_int_addmul(sum->row[i][0], - right->row[0][0], right->row[i][0]); - isl_seq_scale(sum->row[i]+1, left->row[i]+1, left->row[0][0], - left->n_col-1); - isl_seq_scale(sum->row[i]+left->n_col, - right->row[i]+1, right->row[0][0], - right->n_col-1); - } - - isl_int_divexact(left->row[0][0], sum->row[0][0], left->row[0][0]); - isl_int_divexact(right->row[0][0], sum->row[0][0], right->row[0][0]); - isl_mat_free(left); - isl_mat_free(right); - return sum; -error: - isl_mat_free(left); - isl_mat_free(right); - return NULL; -} - -static void exchange(struct isl_mat *M, struct isl_mat **U, - struct isl_mat **Q, unsigned row, unsigned i, unsigned j) -{ - int r; - for (r = row; r < M->n_row; ++r) - isl_int_swap(M->row[r][i], M->row[r][j]); - if (U) { - for (r = 0; r < (*U)->n_row; ++r) - isl_int_swap((*U)->row[r][i], (*U)->row[r][j]); - } - if (Q) - isl_mat_swap_rows(*Q, i, j); -} - -static void subtract(struct isl_mat *M, struct isl_mat **U, - struct isl_mat **Q, unsigned row, unsigned i, unsigned j, isl_int m) -{ - int r; - for (r = row; r < M->n_row; ++r) - isl_int_submul(M->row[r][j], m, M->row[r][i]); - if (U) { - for (r = 0; r < (*U)->n_row; ++r) - isl_int_submul((*U)->row[r][j], m, (*U)->row[r][i]); - } - if (Q) { - for (r = 0; r < (*Q)->n_col; ++r) - isl_int_addmul((*Q)->row[i][r], m, (*Q)->row[j][r]); - } -} - -static void oppose(struct isl_mat *M, struct isl_mat **U, - struct isl_mat **Q, unsigned row, unsigned col) -{ - int r; - for (r = row; r < M->n_row; ++r) - isl_int_neg(M->row[r][col], M->row[r][col]); - if (U) { - for (r = 0; r < (*U)->n_row; ++r) - isl_int_neg((*U)->row[r][col], (*U)->row[r][col]); - } - if (Q) - isl_seq_neg((*Q)->row[col], (*Q)->row[col], (*Q)->n_col); -} - -/* Given matrix M, compute - * - * M U = H - * M = H Q - * - * with U and Q unimodular matrices and H a matrix in column echelon form - * such that on each echelon row the entries in the non-echelon column - * are non-negative (if neg == 0) or non-positive (if neg == 1) - * and stricly smaller (in absolute value) than the entries in the echelon - * column. - * If U or Q are NULL, then these matrices are not computed. - */ -struct isl_mat *isl_mat_left_hermite(struct isl_mat *M, int neg, - struct isl_mat **U, struct isl_mat **Q) -{ - isl_int c; - int row, col; - - if (U) - *U = NULL; - if (Q) - *Q = NULL; - if (!M) - goto error; - M = isl_mat_cow(M); - if (!M) - goto error; - if (U) { - *U = isl_mat_identity(M->ctx, M->n_col); - if (!*U) - goto error; - } - if (Q) { - *Q = isl_mat_identity(M->ctx, M->n_col); - if (!*Q) - goto error; - } - - col = 0; - isl_int_init(c); - for (row = 0; row < M->n_row; ++row) { - int first, i, off; - first = isl_seq_abs_min_non_zero(M->row[row]+col, M->n_col-col); - if (first == -1) - continue; - first += col; - if (first != col) - exchange(M, U, Q, row, first, col); - if (isl_int_is_neg(M->row[row][col])) - oppose(M, U, Q, row, col); - first = col+1; - while ((off = isl_seq_first_non_zero(M->row[row]+first, - M->n_col-first)) != -1) { - first += off; - isl_int_fdiv_q(c, M->row[row][first], M->row[row][col]); - subtract(M, U, Q, row, col, first, c); - if (!isl_int_is_zero(M->row[row][first])) - exchange(M, U, Q, row, first, col); - else - ++first; - } - for (i = 0; i < col; ++i) { - if (isl_int_is_zero(M->row[row][i])) - continue; - if (neg) - isl_int_cdiv_q(c, M->row[row][i], M->row[row][col]); - else - isl_int_fdiv_q(c, M->row[row][i], M->row[row][col]); - if (isl_int_is_zero(c)) - continue; - subtract(M, U, Q, row, col, i, c); - } - ++col; - } - isl_int_clear(c); - - return M; -error: - if (Q) { - isl_mat_free(*Q); - *Q = NULL; - } - if (U) { - isl_mat_free(*U); - *U = NULL; - } - isl_mat_free(M); - return NULL; -} - -struct isl_mat *isl_mat_right_kernel(struct isl_mat *mat) -{ - int i, rank; - struct isl_mat *U = NULL; - struct isl_mat *K; - - mat = isl_mat_left_hermite(mat, 0, &U, NULL); - if (!mat || !U) - goto error; - - for (i = 0, rank = 0; rank < mat->n_col; ++rank) { - while (i < mat->n_row && isl_int_is_zero(mat->row[i][rank])) - ++i; - if (i >= mat->n_row) - break; - } - K = isl_mat_alloc(U->ctx, U->n_row, U->n_col - rank); - if (!K) - goto error; - isl_mat_sub_copy(K->ctx, K->row, U->row, U->n_row, 0, rank, U->n_col-rank); - isl_mat_free(mat); - isl_mat_free(U); - return K; -error: - isl_mat_free(mat); - isl_mat_free(U); - return NULL; -} - -struct isl_mat *isl_mat_lin_to_aff(struct isl_mat *mat) -{ - int i; - struct isl_mat *mat2; - - if (!mat) - return NULL; - mat2 = isl_mat_alloc(mat->ctx, 1+mat->n_row, 1+mat->n_col); - if (!mat2) - goto error; - isl_int_set_si(mat2->row[0][0], 1); - isl_seq_clr(mat2->row[0]+1, mat->n_col); - for (i = 0; i < mat->n_row; ++i) { - isl_int_set_si(mat2->row[1+i][0], 0); - isl_seq_cpy(mat2->row[1+i]+1, mat->row[i], mat->n_col); - } - isl_mat_free(mat); - return mat2; -error: - isl_mat_free(mat); - return NULL; -} - -/* Given two matrices M1 and M2, return the block matrix - * - * [ M1 0 ] - * [ 0 M2 ] - */ -__isl_give isl_mat *isl_mat_diagonal(__isl_take isl_mat *mat1, - __isl_take isl_mat *mat2) -{ - int i; - isl_mat *mat; - - if (!mat1 || !mat2) - goto error; - - mat = isl_mat_alloc(mat1->ctx, mat1->n_row + mat2->n_row, - mat1->n_col + mat2->n_col); - if (!mat) - goto error; - for (i = 0; i < mat1->n_row; ++i) { - isl_seq_cpy(mat->row[i], mat1->row[i], mat1->n_col); - isl_seq_clr(mat->row[i] + mat1->n_col, mat2->n_col); - } - for (i = 0; i < mat2->n_row; ++i) { - isl_seq_clr(mat->row[mat1->n_row + i], mat1->n_col); - isl_seq_cpy(mat->row[mat1->n_row + i] + mat1->n_col, - mat2->row[i], mat2->n_col); - } - isl_mat_free(mat1); - isl_mat_free(mat2); - return mat; -error: - isl_mat_free(mat1); - isl_mat_free(mat2); - return NULL; -} - -static int row_first_non_zero(isl_int **row, unsigned n_row, unsigned col) -{ - int i; - - for (i = 0; i < n_row; ++i) - if (!isl_int_is_zero(row[i][col])) - return i; - return -1; -} - -static int row_abs_min_non_zero(isl_int **row, unsigned n_row, unsigned col) -{ - int i, min = row_first_non_zero(row, n_row, col); - if (min < 0) - return -1; - for (i = min + 1; i < n_row; ++i) { - if (isl_int_is_zero(row[i][col])) - continue; - if (isl_int_abs_lt(row[i][col], row[min][col])) - min = i; - } - return min; -} - -static void inv_exchange(struct isl_mat *left, struct isl_mat *right, - unsigned i, unsigned j) -{ - left = isl_mat_swap_rows(left, i, j); - right = isl_mat_swap_rows(right, i, j); -} - -static void inv_oppose( - struct isl_mat *left, struct isl_mat *right, unsigned row) -{ - isl_seq_neg(left->row[row]+row, left->row[row]+row, left->n_col-row); - isl_seq_neg(right->row[row], right->row[row], right->n_col); -} - -static void inv_subtract(struct isl_mat *left, struct isl_mat *right, - unsigned row, unsigned i, isl_int m) -{ - isl_int_neg(m, m); - isl_seq_combine(left->row[i]+row, - left->ctx->one, left->row[i]+row, - m, left->row[row]+row, - left->n_col-row); - isl_seq_combine(right->row[i], right->ctx->one, right->row[i], - m, right->row[row], right->n_col); -} - -/* Compute inv(left)*right - */ -struct isl_mat *isl_mat_inverse_product(struct isl_mat *left, - struct isl_mat *right) -{ - int row; - isl_int a, b; - - if (!left || !right) - goto error; - - isl_assert(left->ctx, left->n_row == left->n_col, goto error); - isl_assert(left->ctx, left->n_row == right->n_row, goto error); - - if (left->n_row == 0) { - isl_mat_free(left); - return right; - } - - left = isl_mat_cow(left); - right = isl_mat_cow(right); - if (!left || !right) - goto error; - - isl_int_init(a); - isl_int_init(b); - for (row = 0; row < left->n_row; ++row) { - int pivot, first, i, off; - pivot = row_abs_min_non_zero(left->row+row, left->n_row-row, row); - if (pivot < 0) { - isl_int_clear(a); - isl_int_clear(b); - isl_assert(left->ctx, pivot >= 0, goto error); - } - pivot += row; - if (pivot != row) - inv_exchange(left, right, pivot, row); - if (isl_int_is_neg(left->row[row][row])) - inv_oppose(left, right, row); - first = row+1; - while ((off = row_first_non_zero(left->row+first, - left->n_row-first, row)) != -1) { - first += off; - isl_int_fdiv_q(a, left->row[first][row], - left->row[row][row]); - inv_subtract(left, right, row, first, a); - if (!isl_int_is_zero(left->row[first][row])) - inv_exchange(left, right, row, first); - else - ++first; - } - for (i = 0; i < row; ++i) { - if (isl_int_is_zero(left->row[i][row])) - continue; - isl_int_gcd(a, left->row[row][row], left->row[i][row]); - isl_int_divexact(b, left->row[i][row], a); - isl_int_divexact(a, left->row[row][row], a); - isl_int_neg(b, b); - isl_seq_combine(left->row[i] + i, - a, left->row[i] + i, - b, left->row[row] + i, - left->n_col - i); - isl_seq_combine(right->row[i], a, right->row[i], - b, right->row[row], right->n_col); - } - } - isl_int_clear(b); - - isl_int_set(a, left->row[0][0]); - for (row = 1; row < left->n_row; ++row) - isl_int_lcm(a, a, left->row[row][row]); - if (isl_int_is_zero(a)){ - isl_int_clear(a); - isl_assert(left->ctx, 0, goto error); - } - for (row = 0; row < left->n_row; ++row) { - isl_int_divexact(left->row[row][row], a, left->row[row][row]); - if (isl_int_is_one(left->row[row][row])) - continue; - isl_seq_scale(right->row[row], right->row[row], - left->row[row][row], right->n_col); - } - isl_int_clear(a); - - isl_mat_free(left); - return right; -error: - isl_mat_free(left); - isl_mat_free(right); - return NULL; -} - -void isl_mat_col_scale(struct isl_mat *mat, unsigned col, isl_int m) -{ - int i; - - for (i = 0; i < mat->n_row; ++i) - isl_int_mul(mat->row[i][col], mat->row[i][col], m); -} - -void isl_mat_col_combine(struct isl_mat *mat, unsigned dst, - isl_int m1, unsigned src1, isl_int m2, unsigned src2) -{ - int i; - isl_int tmp; - - isl_int_init(tmp); - for (i = 0; i < mat->n_row; ++i) { - isl_int_mul(tmp, m1, mat->row[i][src1]); - isl_int_addmul(tmp, m2, mat->row[i][src2]); - isl_int_set(mat->row[i][dst], tmp); - } - isl_int_clear(tmp); -} - -struct isl_mat *isl_mat_right_inverse(struct isl_mat *mat) -{ - struct isl_mat *inv; - int row; - isl_int a, b; - - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - - inv = isl_mat_identity(mat->ctx, mat->n_col); - inv = isl_mat_cow(inv); - if (!inv) - goto error; - - isl_int_init(a); - isl_int_init(b); - for (row = 0; row < mat->n_row; ++row) { - int pivot, first, i, off; - pivot = isl_seq_abs_min_non_zero(mat->row[row]+row, mat->n_col-row); - if (pivot < 0) { - isl_int_clear(a); - isl_int_clear(b); - isl_assert(mat->ctx, pivot >= 0, goto error); - } - pivot += row; - if (pivot != row) - exchange(mat, &inv, NULL, row, pivot, row); - if (isl_int_is_neg(mat->row[row][row])) - oppose(mat, &inv, NULL, row, row); - first = row+1; - while ((off = isl_seq_first_non_zero(mat->row[row]+first, - mat->n_col-first)) != -1) { - first += off; - isl_int_fdiv_q(a, mat->row[row][first], - mat->row[row][row]); - subtract(mat, &inv, NULL, row, row, first, a); - if (!isl_int_is_zero(mat->row[row][first])) - exchange(mat, &inv, NULL, row, row, first); - else - ++first; - } - for (i = 0; i < row; ++i) { - if (isl_int_is_zero(mat->row[row][i])) - continue; - isl_int_gcd(a, mat->row[row][row], mat->row[row][i]); - isl_int_divexact(b, mat->row[row][i], a); - isl_int_divexact(a, mat->row[row][row], a); - isl_int_neg(a, a); - isl_mat_col_combine(mat, i, a, i, b, row); - isl_mat_col_combine(inv, i, a, i, b, row); - } - } - isl_int_clear(b); - - isl_int_set(a, mat->row[0][0]); - for (row = 1; row < mat->n_row; ++row) - isl_int_lcm(a, a, mat->row[row][row]); - if (isl_int_is_zero(a)){ - isl_int_clear(a); - goto error; - } - for (row = 0; row < mat->n_row; ++row) { - isl_int_divexact(mat->row[row][row], a, mat->row[row][row]); - if (isl_int_is_one(mat->row[row][row])) - continue; - isl_mat_col_scale(inv, row, mat->row[row][row]); - } - isl_int_clear(a); - - isl_mat_free(mat); - - return inv; -error: - isl_mat_free(mat); - isl_mat_free(inv); - return NULL; -} - -struct isl_mat *isl_mat_transpose(struct isl_mat *mat) -{ - struct isl_mat *transpose = NULL; - int i, j; - - if (mat->n_col == mat->n_row) { - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - for (i = 0; i < mat->n_row; ++i) - for (j = i + 1; j < mat->n_col; ++j) - isl_int_swap(mat->row[i][j], mat->row[j][i]); - return mat; - } - transpose = isl_mat_alloc(mat->ctx, mat->n_col, mat->n_row); - if (!transpose) - goto error; - for (i = 0; i < mat->n_row; ++i) - for (j = 0; j < mat->n_col; ++j) - isl_int_set(transpose->row[j][i], mat->row[i][j]); - isl_mat_free(mat); - return transpose; -error: - isl_mat_free(mat); - return NULL; -} - -struct isl_mat *isl_mat_swap_cols(struct isl_mat *mat, unsigned i, unsigned j) -{ - int r; - - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - isl_assert(mat->ctx, i < mat->n_col, goto error); - isl_assert(mat->ctx, j < mat->n_col, goto error); - - for (r = 0; r < mat->n_row; ++r) - isl_int_swap(mat->row[r][i], mat->row[r][j]); - return mat; -error: - isl_mat_free(mat); - return NULL; -} - -struct isl_mat *isl_mat_swap_rows(struct isl_mat *mat, unsigned i, unsigned j) -{ - isl_int *t; - - if (!mat) - return NULL; - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - t = mat->row[i]; - mat->row[i] = mat->row[j]; - mat->row[j] = t; - return mat; -} - -struct isl_mat *isl_mat_product(struct isl_mat *left, struct isl_mat *right) -{ - int i, j, k; - struct isl_mat *prod; - - if (!left || !right) - goto error; - isl_assert(left->ctx, left->n_col == right->n_row, goto error); - prod = isl_mat_alloc(left->ctx, left->n_row, right->n_col); - if (!prod) - goto error; - if (left->n_col == 0) { - for (i = 0; i < prod->n_row; ++i) - isl_seq_clr(prod->row[i], prod->n_col); - isl_mat_free(left); - isl_mat_free(right); - return prod; - } - for (i = 0; i < prod->n_row; ++i) { - for (j = 0; j < prod->n_col; ++j) { - isl_int_mul(prod->row[i][j], - left->row[i][0], right->row[0][j]); - for (k = 1; k < left->n_col; ++k) - isl_int_addmul(prod->row[i][j], - left->row[i][k], right->row[k][j]); - } - } - isl_mat_free(left); - isl_mat_free(right); - return prod; -error: - isl_mat_free(left); - isl_mat_free(right); - return NULL; -} - -/* Replace the variables x in the rows q by x' given by x = M x', - * with M the matrix mat. - * - * If the number of new variables is greater than the original - * number of variables, then the rows q have already been - * preextended. If the new number is smaller, then the coefficients - * of the divs, which are not changed, need to be shifted down. - * The row q may be the equalities, the inequalities or the - * div expressions. In the latter case, has_div is true and - * we need to take into account the extra denominator column. - */ -static int preimage(struct isl_ctx *ctx, isl_int **q, unsigned n, - unsigned n_div, int has_div, struct isl_mat *mat) -{ - int i; - struct isl_mat *t; - int e; - - if (mat->n_col >= mat->n_row) - e = 0; - else - e = mat->n_row - mat->n_col; - if (has_div) - for (i = 0; i < n; ++i) - isl_int_mul(q[i][0], q[i][0], mat->row[0][0]); - t = isl_mat_sub_alloc6(mat->ctx, q, 0, n, has_div, mat->n_row); - t = isl_mat_product(t, mat); - if (!t) - return -1; - for (i = 0; i < n; ++i) { - isl_seq_swp_or_cpy(q[i] + has_div, t->row[i], t->n_col); - isl_seq_cpy(q[i] + has_div + t->n_col, - q[i] + has_div + t->n_col + e, n_div); - isl_seq_clr(q[i] + has_div + t->n_col + n_div, e); - } - isl_mat_free(t); - return 0; -} - -/* Replace the variables x in bset by x' given by x = M x', with - * M the matrix mat. - * - * If there are fewer variables x' then there are x, then we perform - * the transformation in place, which that, in principle, - * this frees up some extra variables as the number - * of columns remains constant, but we would have to extend - * the div array too as the number of rows in this array is assumed - * to be equal to extra. - */ -struct isl_basic_set *isl_basic_set_preimage(struct isl_basic_set *bset, - struct isl_mat *mat) -{ - struct isl_ctx *ctx; - - if (!bset || !mat) - goto error; - - ctx = bset->ctx; - bset = isl_basic_set_cow(bset); - if (!bset) - goto error; - - isl_assert(ctx, bset->dim->nparam == 0, goto error); - isl_assert(ctx, 1+bset->dim->n_out == mat->n_row, goto error); - isl_assert(ctx, mat->n_col > 0, goto error); - - if (mat->n_col > mat->n_row) { - bset = isl_basic_set_extend(bset, 0, mat->n_col-1, 0, 0, 0); - if (!bset) - goto error; - } else if (mat->n_col < mat->n_row) { - bset->dim = isl_dim_cow(bset->dim); - if (!bset->dim) - goto error; - bset->dim->n_out -= mat->n_row - mat->n_col; - } - - if (preimage(ctx, bset->eq, bset->n_eq, bset->n_div, 0, - isl_mat_copy(mat)) < 0) - goto error; - - if (preimage(ctx, bset->ineq, bset->n_ineq, bset->n_div, 0, - isl_mat_copy(mat)) < 0) - goto error; - - if (preimage(ctx, bset->div, bset->n_div, bset->n_div, 1, mat) < 0) - goto error2; - - ISL_F_CLR(bset, ISL_BASIC_SET_NO_IMPLICIT); - ISL_F_CLR(bset, ISL_BASIC_SET_NO_REDUNDANT); - ISL_F_CLR(bset, ISL_BASIC_SET_NORMALIZED); - ISL_F_CLR(bset, ISL_BASIC_SET_NORMALIZED_DIVS); - ISL_F_CLR(bset, ISL_BASIC_SET_ALL_EQUALITIES); - - bset = isl_basic_set_simplify(bset); - bset = isl_basic_set_finalize(bset); - - return bset; -error: - isl_mat_free(mat); -error2: - isl_basic_set_free(bset); - return NULL; -} - -struct isl_set *isl_set_preimage(struct isl_set *set, struct isl_mat *mat) -{ - struct isl_ctx *ctx; - int i; - - set = isl_set_cow(set); - if (!set) - return NULL; - - ctx = set->ctx; - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_preimage(set->p[i], - isl_mat_copy(mat)); - if (!set->p[i]) - goto error; - } - if (mat->n_col != mat->n_row) { - set->dim = isl_dim_cow(set->dim); - if (!set->dim) - goto error; - set->dim->n_out += mat->n_col; - set->dim->n_out -= mat->n_row; - } - isl_mat_free(mat); - ISL_F_CLR(set, ISL_SET_NORMALIZED); - return set; -error: - isl_set_free(set); - isl_mat_free(mat); - return NULL; -} - -/* Replace the variables x starting at pos in the rows q - * by x' with x = M x' with M the matrix mat. - * That is, replace the corresponding coefficients c by c M. - */ -static int transform(isl_ctx *ctx, isl_int **q, unsigned n, - unsigned pos, __isl_take isl_mat *mat) -{ - int i; - isl_mat *t; - - t = isl_mat_sub_alloc6(ctx, q, 0, n, pos, mat->n_row); - t = isl_mat_product(t, mat); - if (!t) - return -1; - for (i = 0; i < n; ++i) - isl_seq_swp_or_cpy(q[i] + pos, t->row[i], t->n_col); - isl_mat_free(t); - return 0; -} - -/* Replace the variables x of type "type" starting at "first" in "bset" - * by x' with x = M x' with M the matrix trans. - * That is, replace the corresponding coefficients c by c M. - * - * The transformation matrix should be a square matrix. - */ -__isl_give isl_basic_set *isl_basic_set_transform_dims( - __isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned first, - __isl_take isl_mat *trans) -{ - isl_ctx *ctx; - unsigned pos; - - bset = isl_basic_set_cow(bset); - if (!bset || !trans) - goto error; - - ctx = isl_basic_set_get_ctx(bset); - if (trans->n_row != trans->n_col) - isl_die(trans->ctx, isl_error_invalid, - "expecting square transformation matrix", goto error); - if (first + trans->n_row > isl_basic_set_dim(bset, type)) - isl_die(trans->ctx, isl_error_invalid, - "oversized transformation matrix", goto error); - - pos = isl_basic_set_offset(bset, type) + first; - - if (transform(ctx, bset->eq, bset->n_eq, pos, isl_mat_copy(trans)) < 0) - goto error; - if (transform(ctx, bset->ineq, bset->n_ineq, pos, - isl_mat_copy(trans)) < 0) - goto error; - if (transform(ctx, bset->div, bset->n_div, 1 + pos, - isl_mat_copy(trans)) < 0) - goto error; - - ISL_F_CLR(bset, ISL_BASIC_SET_NORMALIZED); - ISL_F_CLR(bset, ISL_BASIC_SET_NORMALIZED_DIVS); - - isl_mat_free(trans); - return bset; -error: - isl_mat_free(trans); - isl_basic_set_free(bset); - return NULL; -} - -void isl_mat_print_internal(__isl_keep isl_mat *mat, FILE *out, int indent) -{ - int i, j; - - if (!mat) { - fprintf(out, "%*snull mat\n", indent, ""); - return; - } - - if (mat->n_row == 0) - fprintf(out, "%*s[]\n", indent, ""); - - for (i = 0; i < mat->n_row; ++i) { - if (!i) - fprintf(out, "%*s[[", indent, ""); - else - fprintf(out, "%*s[", indent+1, ""); - for (j = 0; j < mat->n_col; ++j) { - if (j) - fprintf(out, ","); - isl_int_print(out, mat->row[i][j], 0); - } - if (i == mat->n_row-1) - fprintf(out, "]]\n"); - else - fprintf(out, "]\n"); - } -} - -void isl_mat_dump(__isl_keep isl_mat *mat) -{ - isl_mat_print_internal(mat, stderr, 0); -} - -struct isl_mat *isl_mat_drop_cols(struct isl_mat *mat, unsigned col, unsigned n) -{ - int r; - - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - - if (col != mat->n_col-n) { - for (r = 0; r < mat->n_row; ++r) - isl_seq_cpy(mat->row[r]+col, mat->row[r]+col+n, - mat->n_col - col - n); - } - mat->n_col -= n; - return mat; -} - -struct isl_mat *isl_mat_drop_rows(struct isl_mat *mat, unsigned row, unsigned n) -{ - int r; - - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - - for (r = row; r+n < mat->n_row; ++r) - mat->row[r] = mat->row[r+n]; - - mat->n_row -= n; - return mat; -} - -__isl_give isl_mat *isl_mat_insert_cols(__isl_take isl_mat *mat, - unsigned col, unsigned n) -{ - isl_mat *ext; - - if (!mat) - return NULL; - if (n == 0) - return mat; - - ext = isl_mat_alloc(mat->ctx, mat->n_row, mat->n_col + n); - if (!ext) - goto error; - - isl_mat_sub_copy(mat->ctx, ext->row, mat->row, mat->n_row, 0, 0, col); - isl_mat_sub_copy(mat->ctx, ext->row, mat->row, mat->n_row, - col + n, col, mat->n_col - col); - - isl_mat_free(mat); - return ext; -error: - isl_mat_free(mat); - return NULL; -} - -__isl_give isl_mat *isl_mat_insert_zero_cols(__isl_take isl_mat *mat, - unsigned first, unsigned n) -{ - int i; - - if (!mat) - return NULL; - mat = isl_mat_insert_cols(mat, first, n); - if (!mat) - return NULL; - - for (i = 0; i < mat->n_row; ++i) - isl_seq_clr(mat->row[i] + first, n); - - return mat; -} - -__isl_give isl_mat *isl_mat_add_zero_cols(__isl_take isl_mat *mat, unsigned n) -{ - if (!mat) - return NULL; - - return isl_mat_insert_zero_cols(mat, mat->n_col, n); -} - -__isl_give isl_mat *isl_mat_insert_rows(__isl_take isl_mat *mat, - unsigned row, unsigned n) -{ - isl_mat *ext; - - if (!mat) - return NULL; - if (n == 0) - return mat; - - ext = isl_mat_alloc(mat->ctx, mat->n_row + n, mat->n_col); - if (!ext) - goto error; - - isl_mat_sub_copy(mat->ctx, ext->row, mat->row, row, 0, 0, mat->n_col); - isl_mat_sub_copy(mat->ctx, ext->row + row + n, mat->row + row, - mat->n_row - row, 0, 0, mat->n_col); - - isl_mat_free(mat); - return ext; -error: - isl_mat_free(mat); - return NULL; -} - -__isl_give isl_mat *isl_mat_add_rows(__isl_take isl_mat *mat, unsigned n) -{ - if (!mat) - return NULL; - - return isl_mat_insert_rows(mat, mat->n_row, n); -} - -__isl_give isl_mat *isl_mat_insert_zero_rows(__isl_take isl_mat *mat, - unsigned row, unsigned n) -{ - int i; - - mat = isl_mat_insert_rows(mat, row, n); - if (!mat) - return NULL; - - for (i = 0; i < n; ++i) - isl_seq_clr(mat->row[row + i], mat->n_col); - - return mat; -} - -__isl_give isl_mat *isl_mat_add_zero_rows(__isl_take isl_mat *mat, unsigned n) -{ - if (!mat) - return NULL; - - return isl_mat_insert_zero_rows(mat, mat->n_row, n); -} - -void isl_mat_col_submul(struct isl_mat *mat, - int dst_col, isl_int f, int src_col) -{ - int i; - - for (i = 0; i < mat->n_row; ++i) - isl_int_submul(mat->row[i][dst_col], f, mat->row[i][src_col]); -} - -void isl_mat_col_add(__isl_keep isl_mat *mat, int dst_col, int src_col) -{ - int i; - - if (!mat) - return; - - for (i = 0; i < mat->n_row; ++i) - isl_int_add(mat->row[i][dst_col], - mat->row[i][dst_col], mat->row[i][src_col]); -} - -void isl_mat_col_mul(struct isl_mat *mat, int dst_col, isl_int f, int src_col) -{ - int i; - - for (i = 0; i < mat->n_row; ++i) - isl_int_mul(mat->row[i][dst_col], f, mat->row[i][src_col]); -} - -struct isl_mat *isl_mat_unimodular_complete(struct isl_mat *M, int row) -{ - int r; - struct isl_mat *H = NULL, *Q = NULL; - - if (!M) - return NULL; - - isl_assert(M->ctx, M->n_row == M->n_col, goto error); - M->n_row = row; - H = isl_mat_left_hermite(isl_mat_copy(M), 0, NULL, &Q); - M->n_row = M->n_col; - if (!H) - goto error; - for (r = 0; r < row; ++r) - isl_assert(M->ctx, isl_int_is_one(H->row[r][r]), goto error); - for (r = row; r < M->n_row; ++r) - isl_seq_cpy(M->row[r], Q->row[r], M->n_col); - isl_mat_free(H); - isl_mat_free(Q); - return M; -error: - isl_mat_free(H); - isl_mat_free(Q); - isl_mat_free(M); - return NULL; -} - -__isl_give isl_mat *isl_mat_concat(__isl_take isl_mat *top, - __isl_take isl_mat *bot) -{ - struct isl_mat *mat; - - if (!top || !bot) - goto error; - - isl_assert(top->ctx, top->n_col == bot->n_col, goto error); - if (top->n_row == 0) { - isl_mat_free(top); - return bot; - } - if (bot->n_row == 0) { - isl_mat_free(bot); - return top; - } - - mat = isl_mat_alloc(top->ctx, top->n_row + bot->n_row, top->n_col); - if (!mat) - goto error; - isl_mat_sub_copy(mat->ctx, mat->row, top->row, top->n_row, - 0, 0, mat->n_col); - isl_mat_sub_copy(mat->ctx, mat->row + top->n_row, bot->row, bot->n_row, - 0, 0, mat->n_col); - isl_mat_free(top); - isl_mat_free(bot); - return mat; -error: - isl_mat_free(top); - isl_mat_free(bot); - return NULL; -} - -int isl_mat_is_equal(__isl_keep isl_mat *mat1, __isl_keep isl_mat *mat2) -{ - int i; - - if (!mat1 || !mat2) - return -1; - - if (mat1->n_row != mat2->n_row) - return 0; - - if (mat1->n_col != mat2->n_col) - return 0; - - for (i = 0; i < mat1->n_row; ++i) - if (!isl_seq_eq(mat1->row[i], mat2->row[i], mat1->n_col)) - return 0; - - return 1; -} - -__isl_give isl_mat *isl_mat_from_row_vec(__isl_take isl_vec *vec) -{ - struct isl_mat *mat; - - if (!vec) - return NULL; - mat = isl_mat_alloc(vec->ctx, 1, vec->size); - if (!mat) - goto error; - - isl_seq_cpy(mat->row[0], vec->el, vec->size); - - isl_vec_free(vec); - return mat; -error: - isl_vec_free(vec); - return NULL; -} - -__isl_give isl_mat *isl_mat_vec_concat(__isl_take isl_mat *top, - __isl_take isl_vec *bot) -{ - return isl_mat_concat(top, isl_mat_from_row_vec(bot)); -} - -__isl_give isl_mat *isl_mat_move_cols(__isl_take isl_mat *mat, - unsigned dst_col, unsigned src_col, unsigned n) -{ - isl_mat *res; - - if (!mat) - return NULL; - if (n == 0 || dst_col == src_col) - return mat; - - res = isl_mat_alloc(mat->ctx, mat->n_row, mat->n_col); - if (!res) - goto error; - - if (dst_col < src_col) { - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - 0, 0, dst_col); - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - dst_col, src_col, n); - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - dst_col + n, dst_col, src_col - dst_col); - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - src_col + n, src_col + n, - res->n_col - src_col - n); - } else { - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - 0, 0, src_col); - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - src_col, src_col + n, dst_col - src_col); - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - dst_col, src_col, n); - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - dst_col + n, dst_col + n, - res->n_col - dst_col - n); - } - isl_mat_free(mat); - - return res; -error: - isl_mat_free(mat); - return NULL; -} - -void isl_mat_gcd(__isl_keep isl_mat *mat, isl_int *gcd) -{ - int i; - isl_int g; - - isl_int_set_si(*gcd, 0); - if (!mat) - return; - - isl_int_init(g); - for (i = 0; i < mat->n_row; ++i) { - isl_seq_gcd(mat->row[i], mat->n_col, &g); - isl_int_gcd(*gcd, *gcd, g); - } - isl_int_clear(g); -} - -__isl_give isl_mat *isl_mat_scale_down(__isl_take isl_mat *mat, isl_int m) -{ - int i; - - if (isl_int_is_one(m)) - return mat; - - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - - for (i = 0; i < mat->n_row; ++i) - isl_seq_scale_down(mat->row[i], mat->row[i], m, mat->n_col); - - return mat; -} - -__isl_give isl_mat *isl_mat_normalize(__isl_take isl_mat *mat) -{ - isl_int gcd; - - if (!mat) - return NULL; - - isl_int_init(gcd); - isl_mat_gcd(mat, &gcd); - mat = isl_mat_scale_down(mat, gcd); - isl_int_clear(gcd); - - return mat; -} - -__isl_give isl_mat *isl_mat_normalize_row(__isl_take isl_mat *mat, int row) -{ - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - - isl_seq_normalize(mat->ctx, mat->row[row], mat->n_col); - - return mat; -} - -/* Number of initial non-zero columns. - */ -int isl_mat_initial_non_zero_cols(__isl_keep isl_mat *mat) -{ - int i; - - if (!mat) - return -1; - - for (i = 0; i < mat->n_col; ++i) - if (row_first_non_zero(mat->row, mat->n_row, i) < 0) - break; - - return i; -} diff --git a/cloog-0.16.3/isl/isl_mat_private.h b/cloog-0.16.3/isl/isl_mat_private.h deleted file mode 100644 index 5ba4990..0000000 --- a/cloog-0.16.3/isl/isl_mat_private.h +++ /dev/null @@ -1,29 +0,0 @@ -#include - -struct isl_mat { - int ref; - - struct isl_ctx *ctx; - -#define ISL_MAT_BORROWED (1 << 0) - unsigned flags; - - unsigned n_row; - unsigned n_col; - - isl_int **row; - - /* actual size of the rows in memory; n_col <= max_col */ - unsigned max_col; - - struct isl_blk block; -}; - -__isl_give isl_mat *isl_mat_sub_alloc(__isl_keep isl_mat *mat, - unsigned first_row, unsigned n_row, unsigned first_col, unsigned n_col); -__isl_give isl_mat *isl_mat_sub_alloc6(isl_ctx *ctx, isl_int **row, - unsigned first_row, unsigned n_row, unsigned first_col, unsigned n_col); -void isl_mat_sub_copy(struct isl_ctx *ctx, isl_int **dst, isl_int **src, - unsigned n_row, unsigned dst_col, unsigned src_col, unsigned n_col); -void isl_mat_sub_neg(struct isl_ctx *ctx, isl_int **dst, isl_int **src, - unsigned n_row, unsigned dst_col, unsigned src_col, unsigned n_col); diff --git a/cloog-0.16.3/isl/isl_morph.c b/cloog-0.16.3/isl/isl_morph.c deleted file mode 100644 index 5887403..0000000 --- a/cloog-0.16.3/isl/isl_morph.c +++ /dev/null @@ -1,777 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include - -__isl_give isl_morph *isl_morph_alloc( - __isl_take isl_basic_set *dom, __isl_take isl_basic_set *ran, - __isl_take isl_mat *map, __isl_take isl_mat *inv) -{ - isl_morph *morph; - - if (!dom || !ran || !map || !inv) - goto error; - - morph = isl_alloc_type(dom->ctx, struct isl_morph); - if (!morph) - goto error; - - morph->ref = 1; - morph->dom = dom; - morph->ran = ran; - morph->map = map; - morph->inv = inv; - - return morph; -error: - isl_basic_set_free(dom); - isl_basic_set_free(ran); - isl_mat_free(map); - isl_mat_free(inv); - return NULL; -} - -__isl_give isl_morph *isl_morph_copy(__isl_keep isl_morph *morph) -{ - if (!morph) - return NULL; - - morph->ref++; - return morph; -} - -__isl_give isl_morph *isl_morph_dup(__isl_keep isl_morph *morph) -{ - if (!morph) - return NULL; - - return isl_morph_alloc(isl_basic_set_copy(morph->dom), - isl_basic_set_copy(morph->ran), - isl_mat_copy(morph->map), isl_mat_copy(morph->inv)); -} - -__isl_give isl_morph *isl_morph_cow(__isl_take isl_morph *morph) -{ - if (!morph) - return NULL; - - if (morph->ref == 1) - return morph; - morph->ref--; - return isl_morph_dup(morph); -} - -void isl_morph_free(__isl_take isl_morph *morph) -{ - if (!morph) - return; - - if (--morph->ref > 0) - return; - - isl_basic_set_free(morph->dom); - isl_basic_set_free(morph->ran); - isl_mat_free(morph->map); - isl_mat_free(morph->inv); - free(morph); -} - -__isl_give isl_dim *isl_morph_get_ran_dim(__isl_keep isl_morph *morph) -{ - if (!morph) - return NULL; - - return isl_dim_copy(morph->ran->dim); -} - -unsigned isl_morph_dom_dim(__isl_keep isl_morph *morph, enum isl_dim_type type) -{ - if (!morph) - return 0; - - return isl_basic_set_dim(morph->dom, type); -} - -unsigned isl_morph_ran_dim(__isl_keep isl_morph *morph, enum isl_dim_type type) -{ - if (!morph) - return 0; - - return isl_basic_set_dim(morph->ran, type); -} - -__isl_give isl_morph *isl_morph_remove_dom_dims(__isl_take isl_morph *morph, - enum isl_dim_type type, unsigned first, unsigned n) -{ - unsigned dom_offset; - - if (n == 0) - return morph; - - morph = isl_morph_cow(morph); - if (!morph) - return NULL; - - dom_offset = 1 + isl_dim_offset(morph->dom->dim, type); - - morph->dom = isl_basic_set_remove_dims(morph->dom, type, first, n); - - morph->map = isl_mat_drop_cols(morph->map, dom_offset + first, n); - - morph->inv = isl_mat_drop_rows(morph->inv, dom_offset + first, n); - - if (morph->dom && morph->ran && morph->map && morph->inv) - return morph; - - isl_morph_free(morph); - return NULL; -} - -__isl_give isl_morph *isl_morph_remove_ran_dims(__isl_take isl_morph *morph, - enum isl_dim_type type, unsigned first, unsigned n) -{ - unsigned ran_offset; - - if (n == 0) - return morph; - - morph = isl_morph_cow(morph); - if (!morph) - return NULL; - - ran_offset = 1 + isl_dim_offset(morph->ran->dim, type); - - morph->ran = isl_basic_set_remove_dims(morph->ran, type, first, n); - - morph->map = isl_mat_drop_rows(morph->map, ran_offset + first, n); - - morph->inv = isl_mat_drop_cols(morph->inv, ran_offset + first, n); - - if (morph->dom && morph->ran && morph->map && morph->inv) - return morph; - - isl_morph_free(morph); - return NULL; -} - -void isl_morph_dump(__isl_take isl_morph *morph, FILE *out) -{ - if (!morph) - return; - - isl_basic_set_print(morph->dom, out, 0, "", "", ISL_FORMAT_ISL); - isl_basic_set_print(morph->ran, out, 0, "", "", ISL_FORMAT_ISL); - isl_mat_print_internal(morph->map, out, 4); - isl_mat_print_internal(morph->inv, out, 4); -} - -__isl_give isl_morph *isl_morph_identity(__isl_keep isl_basic_set *bset) -{ - isl_mat *id; - isl_basic_set *universe; - unsigned total; - - if (!bset) - return NULL; - - total = isl_basic_set_total_dim(bset); - id = isl_mat_identity(bset->ctx, 1 + total); - universe = isl_basic_set_universe(isl_dim_copy(bset->dim)); - - return isl_morph_alloc(universe, isl_basic_set_copy(universe), - id, isl_mat_copy(id)); -} - -/* Create a(n identity) morphism between empty sets of the same dimension - * a "bset". - */ -__isl_give isl_morph *isl_morph_empty(__isl_keep isl_basic_set *bset) -{ - isl_mat *id; - isl_basic_set *empty; - unsigned total; - - if (!bset) - return NULL; - - total = isl_basic_set_total_dim(bset); - id = isl_mat_identity(bset->ctx, 1 + total); - empty = isl_basic_set_empty(isl_dim_copy(bset->dim)); - - return isl_morph_alloc(empty, isl_basic_set_copy(empty), - id, isl_mat_copy(id)); -} - -/* Given a matrix that maps a (possibly) parametric domain to - * a parametric domain, add in rows that map the "nparam" parameters onto - * themselves. - */ -static __isl_give isl_mat *insert_parameter_rows(__isl_take isl_mat *mat, - unsigned nparam) -{ - int i; - - if (nparam == 0) - return mat; - if (!mat) - return NULL; - - mat = isl_mat_insert_rows(mat, 1, nparam); - if (!mat) - return NULL; - - for (i = 0; i < nparam; ++i) { - isl_seq_clr(mat->row[1 + i], mat->n_col); - isl_int_set(mat->row[1 + i][1 + i], mat->row[0][0]); - } - - return mat; -} - -/* Construct a basic set described by the "n" equalities of "bset" starting - * at "first". - */ -static __isl_give isl_basic_set *copy_equalities(__isl_keep isl_basic_set *bset, - unsigned first, unsigned n) -{ - int i, k; - isl_basic_set *eq; - unsigned total; - - isl_assert(bset->ctx, bset->n_div == 0, return NULL); - - total = isl_basic_set_total_dim(bset); - eq = isl_basic_set_alloc_dim(isl_dim_copy(bset->dim), 0, n, 0); - if (!eq) - return NULL; - for (i = 0; i < n; ++i) { - k = isl_basic_set_alloc_equality(eq); - if (k < 0) - goto error; - isl_seq_cpy(eq->eq[k], bset->eq[first + k], 1 + total); - } - - return eq; -error: - isl_basic_set_free(eq); - return NULL; -} - -/* Given a basic set, exploit the equalties in the a basic set to construct - * a morphishm that maps the basic set to a lower-dimensional space. - * Specifically, the morphism reduces the number of dimensions of type "type". - * - * This function is a slight generalization of isl_mat_variable_compression - * in that it allows the input to be parametric and that it allows for the - * compression of either parameters or set variables. - * - * We first select the equalities of interest, that is those that involve - * variables of type "type" and no later variables. - * Denote those equalities as - * - * -C(p) + M x = 0 - * - * where C(p) depends on the parameters if type == isl_dim_set and - * is a constant if type == isl_dim_param. - * - * First compute the (left) Hermite normal form of M, - * - * M [U1 U2] = M U = H = [H1 0] - * or - * M = H Q = [H1 0] [Q1] - * [Q2] - * - * with U, Q unimodular, Q = U^{-1} (and H lower triangular). - * Define the transformed variables as - * - * x = [U1 U2] [ x1' ] = [U1 U2] [Q1] x - * [ x2' ] [Q2] - * - * The equalities then become - * - * -C(p) + H1 x1' = 0 or x1' = H1^{-1} C(p) = C'(p) - * - * If the denominator of the constant term does not divide the - * the common denominator of the parametric terms, then every - * integer point is mapped to a non-integer point and then the original set has no - * integer solutions (since the x' are a unimodular transformation - * of the x). In this case, an empty morphism is returned. - * Otherwise, the transformation is given by - * - * x = U1 H1^{-1} C(p) + U2 x2' - * - * The inverse transformation is simply - * - * x2' = Q2 x - * - * Both matrices are extended to map the full original space to the full - * compressed space. - */ -__isl_give isl_morph *isl_basic_set_variable_compression( - __isl_keep isl_basic_set *bset, enum isl_dim_type type) -{ - unsigned otype; - unsigned ntype; - unsigned orest; - unsigned nrest; - int f_eq, n_eq; - isl_dim *dim; - isl_mat *H, *U, *Q, *C = NULL, *H1, *U1, *U2; - isl_basic_set *dom, *ran; - - if (!bset) - return NULL; - - if (isl_basic_set_plain_is_empty(bset)) - return isl_morph_empty(bset); - - isl_assert(bset->ctx, bset->n_div == 0, return NULL); - - otype = 1 + isl_dim_offset(bset->dim, type); - ntype = isl_basic_set_dim(bset, type); - orest = otype + ntype; - nrest = isl_basic_set_total_dim(bset) - (orest - 1); - - for (f_eq = 0; f_eq < bset->n_eq; ++f_eq) - if (isl_seq_first_non_zero(bset->eq[f_eq] + orest, nrest) == -1) - break; - for (n_eq = 0; f_eq + n_eq < bset->n_eq; ++n_eq) - if (isl_seq_first_non_zero(bset->eq[f_eq + n_eq] + otype, ntype) == -1) - break; - if (n_eq == 0) - return isl_morph_identity(bset); - - H = isl_mat_sub_alloc6(bset->ctx, bset->eq, f_eq, n_eq, otype, ntype); - H = isl_mat_left_hermite(H, 0, &U, &Q); - if (!H || !U || !Q) - goto error; - Q = isl_mat_drop_rows(Q, 0, n_eq); - Q = isl_mat_diagonal(isl_mat_identity(bset->ctx, otype), Q); - Q = isl_mat_diagonal(Q, isl_mat_identity(bset->ctx, nrest)); - C = isl_mat_alloc(bset->ctx, 1 + n_eq, otype); - if (!C) - goto error; - isl_int_set_si(C->row[0][0], 1); - isl_seq_clr(C->row[0] + 1, otype - 1); - isl_mat_sub_neg(C->ctx, C->row + 1, bset->eq + f_eq, n_eq, 0, 0, otype); - H1 = isl_mat_sub_alloc(H, 0, H->n_row, 0, H->n_row); - H1 = isl_mat_lin_to_aff(H1); - C = isl_mat_inverse_product(H1, C); - if (!C) - goto error; - isl_mat_free(H); - - if (!isl_int_is_one(C->row[0][0])) { - int i; - isl_int g; - - isl_int_init(g); - for (i = 0; i < n_eq; ++i) { - isl_seq_gcd(C->row[1 + i] + 1, otype - 1, &g); - isl_int_gcd(g, g, C->row[0][0]); - if (!isl_int_is_divisible_by(C->row[1 + i][0], g)) - break; - } - isl_int_clear(g); - - if (i < n_eq) { - isl_mat_free(C); - isl_mat_free(U); - isl_mat_free(Q); - return isl_morph_empty(bset); - } - - C = isl_mat_normalize(C); - } - - U1 = isl_mat_sub_alloc(U, 0, U->n_row, 0, n_eq); - U1 = isl_mat_lin_to_aff(U1); - U2 = isl_mat_sub_alloc(U, 0, U->n_row, n_eq, U->n_row - n_eq); - U2 = isl_mat_lin_to_aff(U2); - isl_mat_free(U); - - C = isl_mat_product(U1, C); - C = isl_mat_aff_direct_sum(C, U2); - C = insert_parameter_rows(C, otype - 1); - C = isl_mat_diagonal(C, isl_mat_identity(bset->ctx, nrest)); - - dim = isl_dim_copy(bset->dim); - dim = isl_dim_drop(dim, type, 0, ntype); - dim = isl_dim_add(dim, type, ntype - n_eq); - ran = isl_basic_set_universe(dim); - dom = copy_equalities(bset, f_eq, n_eq); - - return isl_morph_alloc(dom, ran, Q, C); -error: - isl_mat_free(C); - isl_mat_free(H); - isl_mat_free(U); - isl_mat_free(Q); - return NULL; -} - -/* Construct a parameter compression for "bset". - * We basically just call isl_mat_parameter_compression with the right input - * and then extend the resulting matrix to include the variables. - * - * Let the equalities be given as - * - * B(p) + A x = 0 - * - * and let [H 0] be the Hermite Normal Form of A, then - * - * H^-1 B(p) - * - * needs to be integer, so we impose that each row is divisible by - * the denominator. - */ -__isl_give isl_morph *isl_basic_set_parameter_compression( - __isl_keep isl_basic_set *bset) -{ - unsigned nparam; - unsigned nvar; - int n_eq; - isl_mat *H, *B; - isl_vec *d; - isl_mat *map, *inv; - isl_basic_set *dom, *ran; - - if (!bset) - return NULL; - - if (isl_basic_set_plain_is_empty(bset)) - return isl_morph_empty(bset); - if (bset->n_eq == 0) - return isl_morph_identity(bset); - - isl_assert(bset->ctx, bset->n_div == 0, return NULL); - - n_eq = bset->n_eq; - nparam = isl_basic_set_dim(bset, isl_dim_param); - nvar = isl_basic_set_dim(bset, isl_dim_set); - - isl_assert(bset->ctx, n_eq <= nvar, return NULL); - - d = isl_vec_alloc(bset->ctx, n_eq); - B = isl_mat_sub_alloc6(bset->ctx, bset->eq, 0, n_eq, 0, 1 + nparam); - H = isl_mat_sub_alloc6(bset->ctx, bset->eq, 0, n_eq, 1 + nparam, nvar); - H = isl_mat_left_hermite(H, 0, NULL, NULL); - H = isl_mat_drop_cols(H, n_eq, nvar - n_eq); - H = isl_mat_lin_to_aff(H); - H = isl_mat_right_inverse(H); - if (!H || !d) - goto error; - isl_seq_set(d->el, H->row[0][0], d->size); - H = isl_mat_drop_rows(H, 0, 1); - H = isl_mat_drop_cols(H, 0, 1); - B = isl_mat_product(H, B); - inv = isl_mat_parameter_compression(B, d); - inv = isl_mat_diagonal(inv, isl_mat_identity(bset->ctx, nvar)); - map = isl_mat_right_inverse(isl_mat_copy(inv)); - - dom = isl_basic_set_universe(isl_dim_copy(bset->dim)); - ran = isl_basic_set_universe(isl_dim_copy(bset->dim)); - - return isl_morph_alloc(dom, ran, map, inv); -error: - isl_mat_free(H); - isl_mat_free(B); - isl_vec_free(d); - return NULL; -} - -/* Add stride constraints to "bset" based on the inverse mapping - * that was plugged in. In particular, if morph maps x' to x, - * the the constraints of the original input - * - * A x' + b >= 0 - * - * have been rewritten to - * - * A inv x + b >= 0 - * - * However, this substitution may loose information on the integrality of x', - * so we need to impose that - * - * inv x - * - * is integral. If inv = B/d, this means that we need to impose that - * - * B x = 0 mod d - * - * or - * - * exists alpha in Z^m: B x = d alpha - * - */ -static __isl_give isl_basic_set *add_strides(__isl_take isl_basic_set *bset, - __isl_keep isl_morph *morph) -{ - int i, div, k; - isl_int gcd; - - if (isl_int_is_one(morph->inv->row[0][0])) - return bset; - - isl_int_init(gcd); - - for (i = 0; 1 + i < morph->inv->n_row; ++i) { - isl_seq_gcd(morph->inv->row[1 + i], morph->inv->n_col, &gcd); - if (isl_int_is_divisible_by(gcd, morph->inv->row[0][0])) - continue; - div = isl_basic_set_alloc_div(bset); - if (div < 0) - goto error; - k = isl_basic_set_alloc_equality(bset); - if (k < 0) - goto error; - isl_seq_cpy(bset->eq[k], morph->inv->row[1 + i], - morph->inv->n_col); - isl_seq_clr(bset->eq[k] + morph->inv->n_col, bset->n_div); - isl_int_set(bset->eq[k][morph->inv->n_col + div], - morph->inv->row[0][0]); - } - - isl_int_clear(gcd); - - return bset; -error: - isl_int_clear(gcd); - isl_basic_set_free(bset); - return NULL; -} - -/* Apply the morphism to the basic set. - * We basically just compute the preimage of "bset" under the inverse mapping - * in morph, add in stride constraints and intersect with the range - * of the morphism. - */ -__isl_give isl_basic_set *isl_morph_basic_set(__isl_take isl_morph *morph, - __isl_take isl_basic_set *bset) -{ - isl_basic_set *res = NULL; - isl_mat *mat = NULL; - int i, k; - int max_stride; - - if (!morph || !bset) - goto error; - - isl_assert(bset->ctx, isl_dim_equal(bset->dim, morph->dom->dim), - goto error); - - max_stride = morph->inv->n_row - 1; - if (isl_int_is_one(morph->inv->row[0][0])) - max_stride = 0; - res = isl_basic_set_alloc_dim(isl_dim_copy(morph->ran->dim), - bset->n_div + max_stride, bset->n_eq + max_stride, bset->n_ineq); - - for (i = 0; i < bset->n_div; ++i) - if (isl_basic_set_alloc_div(res) < 0) - goto error; - - mat = isl_mat_sub_alloc6(bset->ctx, bset->eq, 0, bset->n_eq, - 0, morph->inv->n_row); - mat = isl_mat_product(mat, isl_mat_copy(morph->inv)); - if (!mat) - goto error; - for (i = 0; i < bset->n_eq; ++i) { - k = isl_basic_set_alloc_equality(res); - if (k < 0) - goto error; - isl_seq_cpy(res->eq[k], mat->row[i], mat->n_col); - isl_seq_scale(res->eq[k] + mat->n_col, bset->eq[i] + mat->n_col, - morph->inv->row[0][0], bset->n_div); - } - isl_mat_free(mat); - - mat = isl_mat_sub_alloc6(bset->ctx, bset->ineq, 0, bset->n_ineq, - 0, morph->inv->n_row); - mat = isl_mat_product(mat, isl_mat_copy(morph->inv)); - if (!mat) - goto error; - for (i = 0; i < bset->n_ineq; ++i) { - k = isl_basic_set_alloc_inequality(res); - if (k < 0) - goto error; - isl_seq_cpy(res->ineq[k], mat->row[i], mat->n_col); - isl_seq_scale(res->ineq[k] + mat->n_col, - bset->ineq[i] + mat->n_col, - morph->inv->row[0][0], bset->n_div); - } - isl_mat_free(mat); - - mat = isl_mat_sub_alloc6(bset->ctx, bset->div, 0, bset->n_div, - 1, morph->inv->n_row); - mat = isl_mat_product(mat, isl_mat_copy(morph->inv)); - if (!mat) - goto error; - for (i = 0; i < bset->n_div; ++i) { - isl_int_mul(res->div[i][0], - morph->inv->row[0][0], bset->div[i][0]); - isl_seq_cpy(res->div[i] + 1, mat->row[i], mat->n_col); - isl_seq_scale(res->div[i] + 1 + mat->n_col, - bset->div[i] + 1 + mat->n_col, - morph->inv->row[0][0], bset->n_div); - } - isl_mat_free(mat); - - res = add_strides(res, morph); - - if (isl_basic_set_is_rational(bset)) - res = isl_basic_set_set_rational(res); - - res = isl_basic_set_simplify(res); - res = isl_basic_set_finalize(res); - - res = isl_basic_set_intersect(res, isl_basic_set_copy(morph->ran)); - - isl_morph_free(morph); - isl_basic_set_free(bset); - return res; -error: - isl_mat_free(mat); - isl_morph_free(morph); - isl_basic_set_free(bset); - isl_basic_set_free(res); - return NULL; -} - -/* Apply the morphism to the set. - */ -__isl_give isl_set *isl_morph_set(__isl_take isl_morph *morph, - __isl_take isl_set *set) -{ - int i; - - if (!morph || !set) - goto error; - - isl_assert(set->ctx, isl_dim_equal(set->dim, morph->dom->dim), goto error); - - set = isl_set_cow(set); - if (!set) - goto error; - - isl_dim_free(set->dim); - set->dim = isl_dim_copy(morph->ran->dim); - if (!set->dim) - goto error; - - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_morph_basic_set(isl_morph_copy(morph), set->p[i]); - if (!set->p[i]) - goto error; - } - - isl_morph_free(morph); - - ISL_F_CLR(set, ISL_SET_NORMALIZED); - - return set; -error: - isl_set_free(set); - isl_morph_free(morph); - return NULL; -} - -/* Construct a morphism that first does morph2 and then morph1. - */ -__isl_give isl_morph *isl_morph_compose(__isl_take isl_morph *morph1, - __isl_take isl_morph *morph2) -{ - isl_mat *map, *inv; - isl_basic_set *dom, *ran; - - if (!morph1 || !morph2) - goto error; - - map = isl_mat_product(isl_mat_copy(morph1->map), isl_mat_copy(morph2->map)); - inv = isl_mat_product(isl_mat_copy(morph2->inv), isl_mat_copy(morph1->inv)); - dom = isl_morph_basic_set(isl_morph_inverse(isl_morph_copy(morph2)), - isl_basic_set_copy(morph1->dom)); - dom = isl_basic_set_intersect(dom, isl_basic_set_copy(morph2->dom)); - ran = isl_morph_basic_set(isl_morph_copy(morph1), - isl_basic_set_copy(morph2->ran)); - ran = isl_basic_set_intersect(ran, isl_basic_set_copy(morph1->ran)); - - isl_morph_free(morph1); - isl_morph_free(morph2); - - return isl_morph_alloc(dom, ran, map, inv); -error: - isl_morph_free(morph1); - isl_morph_free(morph2); - return NULL; -} - -__isl_give isl_morph *isl_morph_inverse(__isl_take isl_morph *morph) -{ - isl_basic_set *bset; - isl_mat *mat; - - morph = isl_morph_cow(morph); - if (!morph) - return NULL; - - bset = morph->dom; - morph->dom = morph->ran; - morph->ran = bset; - - mat = morph->map; - morph->map = morph->inv; - morph->inv = mat; - - return morph; -} - -__isl_give isl_morph *isl_basic_set_full_compression( - __isl_keep isl_basic_set *bset) -{ - isl_morph *morph, *morph2; - - bset = isl_basic_set_copy(bset); - - morph = isl_basic_set_variable_compression(bset, isl_dim_param); - bset = isl_morph_basic_set(isl_morph_copy(morph), bset); - - morph2 = isl_basic_set_parameter_compression(bset); - bset = isl_morph_basic_set(isl_morph_copy(morph2), bset); - - morph = isl_morph_compose(morph2, morph); - - morph2 = isl_basic_set_variable_compression(bset, isl_dim_set); - isl_basic_set_free(bset); - - morph = isl_morph_compose(morph2, morph); - - return morph; -} - -__isl_give isl_vec *isl_morph_vec(__isl_take isl_morph *morph, - __isl_take isl_vec *vec) -{ - if (!morph) - goto error; - - vec = isl_mat_vec_product(isl_mat_copy(morph->map), vec); - - isl_morph_free(morph); - return vec; -error: - isl_morph_free(morph); - isl_vec_free(vec); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_morph.h b/cloog-0.16.3/isl/isl_morph.h deleted file mode 100644 index f125cdc..0000000 --- a/cloog-0.16.3/isl/isl_morph.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#ifndef ISL_MORHP_H -#define ISL_MORHP_H - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -/* An isl_morph is a "morphism" on (basic) sets. - * "map" is an affine mapping from "dom" to "ran" - * and "inv" is the inverse mapping. - */ -struct isl_morph { - int ref; - - isl_basic_set *dom; - isl_basic_set *ran; - - isl_mat *map; - isl_mat *inv; -}; -typedef struct isl_morph isl_morph; - -__isl_give isl_morph *isl_morph_alloc( - __isl_take isl_basic_set *dom, __isl_take isl_basic_set *ran, - __isl_take isl_mat *map, __isl_take isl_mat *inv); -__isl_give isl_morph *isl_morph_copy(__isl_keep isl_morph *morph); -__isl_give isl_morph *isl_morph_identity(__isl_keep isl_basic_set *bset); -void isl_morph_free(__isl_take isl_morph *morph); - -__isl_give isl_dim *isl_morph_get_ran_dim(__isl_keep isl_morph *morph); -unsigned isl_morph_dom_dim(__isl_keep isl_morph *morph, enum isl_dim_type type); -unsigned isl_morph_ran_dim(__isl_keep isl_morph *morph, enum isl_dim_type type); - -__isl_give isl_morph *isl_morph_remove_dom_dims(__isl_take isl_morph *morph, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_morph *isl_morph_remove_ran_dims(__isl_take isl_morph *morph, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_morph *isl_morph_compose(__isl_take isl_morph *morph1, - __isl_take isl_morph *morph2); -__isl_give isl_morph *isl_morph_inverse(__isl_take isl_morph *morph); - -void isl_morph_dump(__isl_take isl_morph *morph, FILE *out); - -__isl_give isl_morph *isl_basic_set_variable_compression( - __isl_keep isl_basic_set *bset, enum isl_dim_type type); -__isl_give isl_morph *isl_basic_set_parameter_compression( - __isl_keep isl_basic_set *bset); -__isl_give isl_morph *isl_basic_set_full_compression( - __isl_keep isl_basic_set *bset); - -__isl_give isl_basic_set *isl_morph_basic_set(__isl_take isl_morph *morph, - __isl_take isl_basic_set *bset); -__isl_give isl_set *isl_morph_set(__isl_take isl_morph *morph, - __isl_take isl_set *set); -__isl_give isl_vec *isl_morph_vec(__isl_take isl_morph *morph, - __isl_take isl_vec *vec); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/isl_name.c b/cloog-0.16.3/isl/isl_name.c deleted file mode 100644 index a9a6382..0000000 --- a/cloog-0.16.3/isl/isl_name.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include "isl_name.h" - -struct isl_name *isl_name_alloc(struct isl_ctx *ctx, const char *s) -{ - const char *copy = strdup(s); - struct isl_name *name; - - if (!copy) - return NULL; - name = isl_alloc_type(ctx, struct isl_name); - if (!name) - goto error; - - name->ref = 1; - name->name = copy; - - name->hash = isl_hash_init(); - name->hash = isl_hash_string(name->hash, s); - - return name; -error: - free((char *)copy); - return NULL; -} - -static int isl_name_has_name(const void *entry, const void *val) -{ - struct isl_name *name = (struct isl_name *)entry; - const char *s = (const char *)val; - - return !strcmp(name->name, s); -} - -struct isl_name *isl_name_get(struct isl_ctx *ctx, const char *name) -{ - struct isl_hash_table_entry *entry; - uint32_t name_hash; - - name_hash = isl_hash_string(isl_hash_init(), name); - entry = isl_hash_table_find(ctx, &ctx->name_hash, name_hash, - isl_name_has_name, name, 1); - if (!entry) - return NULL; - if (entry->data) - return isl_name_copy(ctx, entry->data); - entry->data = isl_name_alloc(ctx, name); - if (!entry->data) - ctx->name_hash.n--; - return entry->data; -} - -struct isl_name *isl_name_copy(struct isl_ctx *ctx, struct isl_name *name) -{ - if (!name) - return NULL; - - name->ref++; - return name; -} - -static int isl_name_eq(const void *entry, const void *name) -{ - return entry == name; -} - -uint32_t isl_hash_name(uint32_t hash, struct isl_name *name) -{ - if (name) - isl_hash_hash(hash, name->hash); - - return hash; -} - -void isl_name_free(struct isl_ctx *ctx, struct isl_name *name) -{ - uint32_t name_hash; - struct isl_hash_table_entry *entry; - - if (!name) - return; - - if (--name->ref > 0) - return; - - name_hash = isl_hash_string(isl_hash_init(), name->name); - entry = isl_hash_table_find(ctx, &ctx->name_hash, name_hash, - isl_name_eq, name, 0); - isl_assert(ctx, entry, return); - isl_hash_table_remove(ctx, &ctx->name_hash, entry); - - free((char *)name->name); - free(name); -} diff --git a/cloog-0.16.3/isl/isl_name.h b/cloog-0.16.3/isl/isl_name.h deleted file mode 100644 index 3db7683..0000000 --- a/cloog-0.16.3/isl/isl_name.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_NAME_H -#define ISL_NAME_H - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_name { - int ref; - - const char *name; - uint32_t hash; -}; - -struct isl_name *isl_name_alloc(struct isl_ctx *ctx, const char *name); -struct isl_name *isl_name_get(struct isl_ctx *ctx, const char *name); -struct isl_name *isl_name_copy(struct isl_ctx *ctx, struct isl_name *name); -uint32_t isl_hash_name(uint32_t hash, struct isl_name *name); -void isl_name_free(struct isl_ctx *ctx, struct isl_name *name); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/isl_obj.c b/cloog-0.16.3/isl/isl_obj.c deleted file mode 100644 index 928982d..0000000 --- a/cloog-0.16.3/isl/isl_obj.c +++ /dev/null @@ -1,425 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include - -struct isl_int_obj { - int ref; - isl_ctx *ctx; - isl_int v; -}; - -__isl_give isl_int_obj *isl_int_obj_alloc(isl_ctx *ctx, isl_int v) -{ - isl_int_obj *i; - - i = isl_alloc_type(ctx, isl_int_obj); - if (!i) - return NULL; - - i->ctx = ctx; - isl_ctx_ref(ctx); - i->ref = 1; - isl_int_init(i->v); - isl_int_set(i->v, v); - - return i; -} - -__isl_give isl_int_obj *isl_int_obj_copy(__isl_keep isl_int_obj *i) -{ - if (!i) - return NULL; - - i->ref++; - return i; -} - -__isl_give isl_int_obj *isl_int_obj_dup(__isl_keep isl_int_obj *i) -{ - if (!i) - return NULL; - - return isl_int_obj_alloc(i->ctx, i->v); -} - -__isl_give isl_int_obj *isl_int_obj_cow(__isl_take isl_int_obj *i) -{ - if (!i) - return NULL; - - if (i->ref == 1) - return i; - i->ref--; - return isl_int_obj_dup(i); -} - -void isl_int_obj_free(__isl_take isl_int_obj *i) -{ - if (!i) - return; - - if (--i->ref > 0) - return; - - isl_ctx_deref(i->ctx); - isl_int_clear(i->v); - free(i); -} - -__isl_give isl_int_obj *isl_int_obj_add(__isl_take isl_int_obj *i1, - __isl_take isl_int_obj *i2) -{ - i1 = isl_int_obj_cow(i1); - if (!i1 || !i2) - goto error; - - isl_int_add(i1->v, i1->v, i2->v); - - isl_int_obj_free(i2); - return i1; -error: - isl_int_obj_free(i1); - isl_int_obj_free(i2); - return NULL; -} - -__isl_give isl_int_obj *isl_int_obj_sub(__isl_take isl_int_obj *i1, - __isl_take isl_int_obj *i2) -{ - i1 = isl_int_obj_cow(i1); - if (!i1 || !i2) - goto error; - - isl_int_sub(i1->v, i1->v, i2->v); - - isl_int_obj_free(i2); - return i1; -error: - isl_int_obj_free(i1); - isl_int_obj_free(i2); - return NULL; -} - -__isl_give isl_int_obj *isl_int_obj_mul(__isl_take isl_int_obj *i1, - __isl_take isl_int_obj *i2) -{ - i1 = isl_int_obj_cow(i1); - if (!i1 || !i2) - goto error; - - isl_int_mul(i1->v, i1->v, i2->v); - - isl_int_obj_free(i2); - return i1; -error: - isl_int_obj_free(i1); - isl_int_obj_free(i2); - return NULL; -} - -void isl_int_obj_get_int(__isl_keep isl_int_obj *i, isl_int *v) -{ - if (!i) - return; - isl_int_set(*v, i->v); -} - -static void *isl_obj_int_copy(void *v) -{ - return isl_int_obj_copy((isl_int_obj *)v); -} - -static void isl_obj_int_free(void *v) -{ - isl_int_obj_free((isl_int_obj *)v); -} - -static __isl_give isl_printer *isl_obj_int_print(__isl_take isl_printer *p, - void *v) -{ - isl_int_obj *i = v; - return isl_printer_print_isl_int(p, i->v); -} - -static void *isl_obj_int_add(void *v1, void *v2) -{ - return isl_int_obj_add((isl_int_obj *)v1, (isl_int_obj *)v2); -} - -struct isl_obj_vtable isl_obj_int_vtable = { - isl_obj_int_copy, - isl_obj_int_add, - isl_obj_int_print, - isl_obj_int_free -}; - -static void *isl_obj_map_copy(void *v) -{ - return isl_map_copy((struct isl_map *)v); -} - -static void isl_obj_map_free(void *v) -{ - isl_map_free((struct isl_map *)v); -} - -static __isl_give isl_printer *isl_obj_map_print(__isl_take isl_printer *p, - void *v) -{ - return isl_printer_print_map(p, (struct isl_map *)v); -} - -static void *isl_obj_map_add(void *v1, void *v2) -{ - return isl_map_union((struct isl_map *)v1, (struct isl_map *)v2); -} - -struct isl_obj_vtable isl_obj_map_vtable = { - isl_obj_map_copy, - isl_obj_map_add, - isl_obj_map_print, - isl_obj_map_free -}; - -static void *isl_obj_union_map_copy(void *v) -{ - return isl_union_map_copy((isl_union_map *)v); -} - -static void isl_obj_union_map_free(void *v) -{ - isl_union_map_free((isl_union_map *)v); -} - -static __isl_give isl_printer *isl_obj_union_map_print(__isl_take isl_printer *p, - void *v) -{ - return isl_printer_print_union_map(p, (isl_union_map *)v); -} - -static void *isl_obj_union_map_add(void *v1, void *v2) -{ - return isl_union_map_union((isl_union_map *)v1, (isl_union_map *)v2); -} - -struct isl_obj_vtable isl_obj_union_map_vtable = { - isl_obj_union_map_copy, - isl_obj_union_map_add, - isl_obj_union_map_print, - isl_obj_union_map_free -}; - -static void *isl_obj_set_copy(void *v) -{ - return isl_set_copy((struct isl_set *)v); -} - -static void isl_obj_set_free(void *v) -{ - isl_set_free((struct isl_set *)v); -} - -static __isl_give isl_printer *isl_obj_set_print(__isl_take isl_printer *p, - void *v) -{ - return isl_printer_print_set(p, (struct isl_set *)v); -} - -static void *isl_obj_set_add(void *v1, void *v2) -{ - return isl_set_union((struct isl_set *)v1, (struct isl_set *)v2); -} - -struct isl_obj_vtable isl_obj_set_vtable = { - isl_obj_set_copy, - isl_obj_set_add, - isl_obj_set_print, - isl_obj_set_free -}; - -static void *isl_obj_union_set_copy(void *v) -{ - return isl_union_set_copy((isl_union_set *)v); -} - -static void isl_obj_union_set_free(void *v) -{ - isl_union_set_free((isl_union_set *)v); -} - -static __isl_give isl_printer *isl_obj_union_set_print(__isl_take isl_printer *p, - void *v) -{ - return isl_printer_print_union_set(p, (isl_union_set *)v); -} - -static void *isl_obj_union_set_add(void *v1, void *v2) -{ - return isl_union_set_union((isl_union_set *)v1, (isl_union_set *)v2); -} - -struct isl_obj_vtable isl_obj_union_set_vtable = { - isl_obj_union_set_copy, - isl_obj_union_set_add, - isl_obj_union_set_print, - isl_obj_union_set_free -}; - -static void *isl_obj_none_copy(void *v) -{ - return v; -} - -static void isl_obj_none_free(void *v) -{ -} - -static __isl_give isl_printer *isl_obj_none_print(__isl_take isl_printer *p, - void *v) -{ - return p; -} - -static void *isl_obj_none_add(void *v1, void *v2) -{ - return NULL; -} - -struct isl_obj_vtable isl_obj_none_vtable = { - isl_obj_none_copy, - isl_obj_none_add, - isl_obj_none_print, - isl_obj_none_free -}; - -static void *isl_obj_pw_qp_copy(void *v) -{ - return isl_pw_qpolynomial_copy((struct isl_pw_qpolynomial *)v); -} - -static void isl_obj_pw_qp_free(void *v) -{ - isl_pw_qpolynomial_free((struct isl_pw_qpolynomial *)v); -} - -static __isl_give isl_printer *isl_obj_pw_qp_print(__isl_take isl_printer *p, - void *v) -{ - return isl_printer_print_pw_qpolynomial(p, - (struct isl_pw_qpolynomial *)v); -} - -static void *isl_obj_pw_qp_add(void *v1, void *v2) -{ - return isl_pw_qpolynomial_add((struct isl_pw_qpolynomial *)v1, - (struct isl_pw_qpolynomial *)v2); -} - -struct isl_obj_vtable isl_obj_pw_qpolynomial_vtable = { - isl_obj_pw_qp_copy, - isl_obj_pw_qp_add, - isl_obj_pw_qp_print, - isl_obj_pw_qp_free -}; - -static void *isl_obj_union_pw_qp_copy(void *v) -{ - return isl_union_pw_qpolynomial_copy((struct isl_union_pw_qpolynomial *)v); -} - -static void isl_obj_union_pw_qp_free(void *v) -{ - isl_union_pw_qpolynomial_free((struct isl_union_pw_qpolynomial *)v); -} - -static __isl_give isl_printer *isl_obj_union_pw_qp_print( - __isl_take isl_printer *p, void *v) -{ - return isl_printer_print_union_pw_qpolynomial(p, - (struct isl_union_pw_qpolynomial *)v); -} - -static void *isl_obj_union_pw_qp_add(void *v1, void *v2) -{ - return isl_union_pw_qpolynomial_add( - (struct isl_union_pw_qpolynomial *)v1, - (struct isl_union_pw_qpolynomial *)v2); -} - -struct isl_obj_vtable isl_obj_union_pw_qpolynomial_vtable = { - isl_obj_union_pw_qp_copy, - isl_obj_union_pw_qp_add, - isl_obj_union_pw_qp_print, - isl_obj_union_pw_qp_free -}; - -static void *isl_obj_pw_qpf_copy(void *v) -{ - return isl_pw_qpolynomial_fold_copy((struct isl_pw_qpolynomial_fold *)v); -} - -static void isl_obj_pw_qpf_free(void *v) -{ - isl_pw_qpolynomial_fold_free((struct isl_pw_qpolynomial_fold *)v); -} - -static __isl_give isl_printer *isl_obj_pw_qpf_print(__isl_take isl_printer *p, - void *v) -{ - return isl_printer_print_pw_qpolynomial_fold(p, - (struct isl_pw_qpolynomial_fold *)v); -} - -static void *isl_obj_pw_qpf_add(void *v1, void *v2) -{ - return isl_pw_qpolynomial_fold_fold((struct isl_pw_qpolynomial_fold *)v1, - (struct isl_pw_qpolynomial_fold *)v2); -} - -struct isl_obj_vtable isl_obj_pw_qpolynomial_fold_vtable = { - isl_obj_pw_qpf_copy, - isl_obj_pw_qpf_add, - isl_obj_pw_qpf_print, - isl_obj_pw_qpf_free -}; - -static void *isl_obj_union_pw_qpf_copy(void *v) -{ - return isl_union_pw_qpolynomial_fold_copy((struct isl_union_pw_qpolynomial_fold *)v); -} - -static void isl_obj_union_pw_qpf_free(void *v) -{ - isl_union_pw_qpolynomial_fold_free((struct isl_union_pw_qpolynomial_fold *)v); -} - -static __isl_give isl_printer *isl_obj_union_pw_qpf_print( - __isl_take isl_printer *p, void *v) -{ - return isl_printer_print_union_pw_qpolynomial_fold(p, - (struct isl_union_pw_qpolynomial_fold *)v); -} - -static void *isl_obj_union_pw_qpf_add(void *v1, void *v2) -{ - return isl_union_pw_qpolynomial_fold_fold( - (struct isl_union_pw_qpolynomial_fold *)v1, - (struct isl_union_pw_qpolynomial_fold *)v2); -} - -struct isl_obj_vtable isl_obj_union_pw_qpolynomial_fold_vtable = { - isl_obj_union_pw_qpf_copy, - isl_obj_union_pw_qpf_add, - isl_obj_union_pw_qpf_print, - isl_obj_union_pw_qpf_free -}; diff --git a/cloog-0.16.3/isl/isl_options.c b/cloog-0.16.3/isl/isl_options.c deleted file mode 100644 index 1948c2b..0000000 --- a/cloog-0.16.3/isl/isl_options.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include - -#include -#include -#include - -struct isl_arg_choice isl_lp_solver_choice[] = { - {"tab", ISL_LP_TAB}, -#ifdef ISL_PIPLIB - {"pip", ISL_LP_PIP}, -#endif - {0} -}; - -struct isl_arg_choice isl_ilp_solver_choice[] = { - {"gbr", ISL_ILP_GBR}, -#ifdef ISL_PIPLIB - {"pip", ISL_ILP_PIP}, -#endif - {0} -}; - -struct isl_arg_choice isl_pip_solver_choice[] = { - {"tab", ISL_PIP_TAB}, -#ifdef ISL_PIPLIB - {"pip", ISL_PIP_PIP}, -#endif - {0} -}; - -struct isl_arg_choice isl_pip_context_choice[] = { - {"gbr", ISL_CONTEXT_GBR}, - {"lexmin", ISL_CONTEXT_LEXMIN}, - {0} -}; - -struct isl_arg_choice isl_gbr_choice[] = { - {"never", ISL_GBR_NEVER}, - {"once", ISL_GBR_ONCE}, - {"always", ISL_GBR_ALWAYS}, - {0} -}; - -struct isl_arg_choice isl_closure_choice[] = { - {"isl", ISL_CLOSURE_ISL}, - {"box", ISL_CLOSURE_BOX}, - {0} -}; - -static struct isl_arg_choice bound[] = { - {"bernstein", ISL_BOUND_BERNSTEIN}, - {"range", ISL_BOUND_RANGE}, - {0} -}; - -static struct isl_arg_flags bernstein_recurse[] = { - {"none", ISL_BERNSTEIN_FACTORS | ISL_BERNSTEIN_INTERVALS, 0}, - {"factors", ISL_BERNSTEIN_FACTORS | ISL_BERNSTEIN_INTERVALS, - ISL_BERNSTEIN_FACTORS}, - {"intervals", ISL_BERNSTEIN_FACTORS | ISL_BERNSTEIN_INTERVALS, - ISL_BERNSTEIN_INTERVALS}, - {"full", ISL_BERNSTEIN_FACTORS | ISL_BERNSTEIN_INTERVALS, - ISL_BERNSTEIN_FACTORS | ISL_BERNSTEIN_INTERVALS}, - {0} -}; - -static struct isl_arg_choice convex[] = { - {"wrap", ISL_CONVEX_HULL_WRAP}, - {"fm", ISL_CONVEX_HULL_FM}, - {0} -}; - -static void print_version(void) -{ - printf("%s", isl_version()); -} - -struct isl_arg isl_options_arg[] = { -ISL_ARG_CHOICE(struct isl_options, lp_solver, 0, "lp-solver", \ - isl_lp_solver_choice, ISL_LP_TAB, "lp solver to use") -ISL_ARG_CHOICE(struct isl_options, ilp_solver, 0, "ilp-solver", \ - isl_ilp_solver_choice, ISL_ILP_GBR, "ilp solver to use") -ISL_ARG_CHOICE(struct isl_options, pip, 0, "pip", \ - isl_pip_solver_choice, ISL_PIP_TAB, "pip solver to use") -ISL_ARG_CHOICE(struct isl_options, context, 0, "context", \ - isl_pip_context_choice, ISL_CONTEXT_GBR, - "how to handle the pip context tableau") -ISL_ARG_CHOICE(struct isl_options, gbr, 0, "gbr", \ - isl_gbr_choice, ISL_GBR_ONCE, - "how often to use generalized basis reduction") -ISL_ARG_CHOICE(struct isl_options, closure, 0, "closure", \ - isl_closure_choice, ISL_CLOSURE_ISL, - "closure operation to use") -ISL_ARG_BOOL(struct isl_options, gbr_only_first, 0, "gbr-only-first", 0, - "only perform basis reduction in first direction") -ISL_ARG_CHOICE(struct isl_options, bound, 0, "bound", bound, - ISL_BOUND_BERNSTEIN, "algorithm to use for computing bounds") -ISL_ARG_FLAGS(struct isl_options, bernstein_recurse, 0, - "bernstein-recurse", bernstein_recurse, ISL_BERNSTEIN_FACTORS, NULL) -ISL_ARG_BOOL(struct isl_options, bernstein_triangulate, 0, - "bernstein-triangulate", 1, - "triangulate domains during Bernstein expansion") -ISL_ARG_BOOL(struct isl_options, pip_symmetry, 0, "pip-symmetry", 1, - "detect simple symmetries in PIP input") -ISL_ARG_CHOICE(struct isl_options, convex, 0, "convex-hull", \ - convex, ISL_CONVEX_HULL_WRAP, "convex hull algorithm to use") -ISL_ARG_BOOL(struct isl_options, schedule_parametric, 0, - "schedule-parametric", 1, "construct possibly parametric schedules") -ISL_ARG_BOOL(struct isl_options, schedule_outer_zero_distance, 0, - "schedule-outer-zero-distance", 0, - "try to construct schedules with outer zero distances over " - "proximity dependences") -ISL_ARG_BOOL(struct isl_options, schedule_maximize_band_depth, 0, - "schedule-maximize-band-depth", 0, - "maximize the number of scheduling dimensions in a band") -ISL_ARG_BOOL(struct isl_options, schedule_split_parallel, 0, - "schedule-split-parallel", 1, - "split non-tilable bands with parallel schedules") -ISL_ARG_VERSION(print_version) -ISL_ARG_END -}; - -ISL_ARG_DEF(isl_options, struct isl_options, isl_options_arg) diff --git a/cloog-0.16.3/isl/isl_output.c b/cloog-0.16.3/isl/isl_output.c deleted file mode 100644 index ec2d664..0000000 --- a/cloog-0.16.3/isl/isl_output.c +++ /dev/null @@ -1,2465 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static const char *s_to[2] = { " -> ", " \\to " }; -static const char *s_and[2] = { " and ", " \\wedge " }; -static const char *s_or[2] = { " or ", " \\vee " }; -static const char *s_le[2] = { "<=", "\\le" }; -static const char *s_ge[2] = { ">=", "\\ge" }; -static const char *s_open_set[2] = { "{ ", "\\{\\, " }; -static const char *s_close_set[2] = { " }", " \\,\\}" }; -static const char *s_open_list[2] = { "[", "(" }; -static const char *s_close_list[2] = { "]", ")" }; -static const char *s_such_that[2] = { " : ", " \\mid " }; -static const char *s_open_exists[2] = { "exists (", "\\exists \\, " }; -static const char *s_close_exists[2] = { ")", "" }; -static const char *s_div_prefix[2] = { "e", "\\alpha_" }; -static const char *s_param_prefix[2] = { "p", "p_" }; -static const char *s_input_prefix[2] = { "i", "i_" }; -static const char *s_output_prefix[2] = { "o", "o_" }; - -static __isl_give isl_printer *print_constraint_polylib( - struct isl_basic_map *bmap, int ineq, int n, __isl_take isl_printer *p) -{ - int i; - unsigned n_in = isl_basic_map_dim(bmap, isl_dim_in); - unsigned n_out = isl_basic_map_dim(bmap, isl_dim_out); - unsigned nparam = isl_basic_map_dim(bmap, isl_dim_param); - isl_int *c = ineq ? bmap->ineq[n] : bmap->eq[n]; - - p = isl_printer_start_line(p); - p = isl_printer_print_int(p, ineq); - for (i = 0; i < n_out; ++i) { - p = isl_printer_print_str(p, " "); - p = isl_printer_print_isl_int(p, c[1+nparam+n_in+i]); - } - for (i = 0; i < n_in; ++i) { - p = isl_printer_print_str(p, " "); - p = isl_printer_print_isl_int(p, c[1+nparam+i]); - } - for (i = 0; i < bmap->n_div; ++i) { - p = isl_printer_print_str(p, " "); - p = isl_printer_print_isl_int(p, c[1+nparam+n_in+n_out+i]); - } - for (i = 0; i < nparam; ++i) { - p = isl_printer_print_str(p, " "); - p = isl_printer_print_isl_int(p, c[1+i]); - } - p = isl_printer_print_str(p, " "); - p = isl_printer_print_isl_int(p, c[0]); - p = isl_printer_end_line(p); - return p; -} - -static __isl_give isl_printer *print_constraints_polylib( - struct isl_basic_map *bmap, __isl_take isl_printer *p) -{ - int i; - - p = isl_printer_set_isl_int_width(p, 5); - - for (i = 0; i < bmap->n_eq; ++i) - p = print_constraint_polylib(bmap, 0, i, p); - for (i = 0; i < bmap->n_ineq; ++i) - p = print_constraint_polylib(bmap, 1, i, p); - - return p; -} - -static __isl_give isl_printer *bset_print_constraints_polylib( - struct isl_basic_set *bset, __isl_take isl_printer *p) -{ - return print_constraints_polylib((struct isl_basic_map *)bset, p); -} - -static __isl_give isl_printer *isl_basic_map_print_polylib( - __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p, int ext) -{ - unsigned total = isl_basic_map_total_dim(bmap); - p = isl_printer_start_line(p); - p = isl_printer_print_int(p, bmap->n_eq + bmap->n_ineq); - p = isl_printer_print_str(p, " "); - p = isl_printer_print_int(p, 1 + total + 1); - if (ext) { - p = isl_printer_print_str(p, " "); - p = isl_printer_print_int(p, - isl_basic_map_dim(bmap, isl_dim_out)); - p = isl_printer_print_str(p, " "); - p = isl_printer_print_int(p, - isl_basic_map_dim(bmap, isl_dim_in)); - p = isl_printer_print_str(p, " "); - p = isl_printer_print_int(p, - isl_basic_map_dim(bmap, isl_dim_div)); - p = isl_printer_print_str(p, " "); - p = isl_printer_print_int(p, - isl_basic_map_dim(bmap, isl_dim_param)); - } - p = isl_printer_end_line(p); - return print_constraints_polylib(bmap, p); -} - -static __isl_give isl_printer *isl_basic_set_print_polylib( - __isl_keep isl_basic_set *bset, __isl_take isl_printer *p, int ext) -{ - return isl_basic_map_print_polylib((struct isl_basic_map *)bset, p, ext); -} - -static __isl_give isl_printer *isl_map_print_polylib(__isl_keep isl_map *map, - __isl_take isl_printer *p, int ext) -{ - int i; - - p = isl_printer_start_line(p); - p = isl_printer_print_int(p, map->n); - p = isl_printer_end_line(p); - for (i = 0; i < map->n; ++i) { - p = isl_printer_start_line(p); - p = isl_printer_end_line(p); - p = isl_basic_map_print_polylib(map->p[i], p, ext); - } - return p; -} - -static __isl_give isl_printer *isl_set_print_polylib(__isl_keep isl_set *set, - __isl_take isl_printer *p, int ext) -{ - return isl_map_print_polylib((struct isl_map *)set, p, ext); -} - -static int count_same_name(__isl_keep isl_dim *dim, - enum isl_dim_type type, unsigned pos, const char *name) -{ - enum isl_dim_type t; - unsigned p, s; - int count = 0; - - for (t = isl_dim_param; t <= type && t <= isl_dim_out; ++t) { - s = t == type ? pos : isl_dim_size(dim, t); - for (p = 0; p < s; ++p) { - const char *n = isl_dim_get_name(dim, t, p); - if (n && !strcmp(n, name)) - count++; - } - } - return count; -} - -static __isl_give isl_printer *print_name(__isl_keep isl_dim *dim, - __isl_take isl_printer *p, enum isl_dim_type type, unsigned pos, - int set, int latex) -{ - const char *name; - char buffer[20]; - int primes; - - name = type == isl_dim_div ? NULL : isl_dim_get_name(dim, type, pos); - - if (!name) { - const char *prefix; - if (type == isl_dim_param) - prefix = s_param_prefix[latex]; - else if (type == isl_dim_div) - prefix = s_div_prefix[latex]; - else if (set || type == isl_dim_in) - prefix = s_input_prefix[latex]; - else - prefix = s_output_prefix[latex]; - snprintf(buffer, sizeof(buffer), "%s%d", prefix, pos); - name = buffer; - } - primes = count_same_name(dim, name == buffer ? isl_dim_div : type, - pos, name); - p = isl_printer_print_str(p, name); - while (primes-- > 0) - p = isl_printer_print_str(p, "'"); - return p; -} - -static enum isl_dim_type pos2type(__isl_keep isl_dim *dim, unsigned *pos) -{ - enum isl_dim_type type; - unsigned n_in = isl_dim_size(dim, isl_dim_in); - unsigned n_out = isl_dim_size(dim, isl_dim_out); - unsigned nparam = isl_dim_size(dim, isl_dim_param); - - if (*pos < 1 + nparam) { - type = isl_dim_param; - *pos -= 1; - } else if (*pos < 1 + nparam + n_in) { - type = isl_dim_in; - *pos -= 1 + nparam; - } else if (*pos < 1 + nparam + n_in + n_out) { - type = isl_dim_out; - *pos -= 1 + nparam + n_in; - } else { - type = isl_dim_div; - *pos -= 1 + nparam + n_in + n_out; - } - - return type; -} - -static __isl_give isl_printer *print_div(__isl_keep isl_dim *dim, - __isl_keep isl_mat *div, int pos, __isl_take isl_printer *p); - -static __isl_give isl_printer *print_term(__isl_keep isl_dim *dim, - __isl_keep isl_mat *div, - isl_int c, unsigned pos, __isl_take isl_printer *p, int set, int latex) -{ - enum isl_dim_type type; - int print_div_def; - - if (pos == 0) - return isl_printer_print_isl_int(p, c); - - type = pos2type(dim, &pos); - print_div_def = type == isl_dim_div && div && - !isl_int_is_zero(div->row[pos][0]); - - if (isl_int_is_one(c)) - ; - else if (isl_int_is_negone(c)) - p = isl_printer_print_str(p, "-"); - else { - p = isl_printer_print_isl_int(p, c); - if (p->output_format == ISL_FORMAT_C || print_div_def) - p = isl_printer_print_str(p, "*"); - } - if (print_div_def) - p = print_div(dim, div, pos, p); - else - p = print_name(dim, p, type, pos, set, latex); - return p; -} - -static __isl_give isl_printer *print_affine_of_len(__isl_keep isl_dim *dim, - __isl_keep isl_mat *div, - __isl_take isl_printer *p, isl_int *c, int len, int set) -{ - int i; - int first; - - for (i = 0, first = 1; i < len; ++i) { - int flip = 0; - if (isl_int_is_zero(c[i])) - continue; - if (!first) { - if (isl_int_is_neg(c[i])) { - flip = 1; - isl_int_neg(c[i], c[i]); - p = isl_printer_print_str(p, " - "); - } else - p = isl_printer_print_str(p, " + "); - } - first = 0; - p = print_term(dim, div, c[i], i, p, set, 0); - if (flip) - isl_int_neg(c[i], c[i]); - } - if (first) - p = isl_printer_print_str(p, "0"); - return p; -} - -static __isl_give isl_printer *print_affine(__isl_keep isl_basic_map *bmap, - __isl_keep isl_dim *dim, __isl_take isl_printer *p, isl_int *c, int set) -{ - unsigned len = 1 + isl_basic_map_total_dim(bmap); - return print_affine_of_len(dim, NULL, p, c, len, set); -} - -static int defining_equality(__isl_keep isl_basic_map *eq, - __isl_keep isl_dim *dim, enum isl_dim_type type, int pos) -{ - int i; - unsigned total; - - if (!eq) - return -1; - - pos += isl_dim_offset(dim, type); - total = isl_basic_map_total_dim(eq); - - for (i = 0; i < eq->n_eq; ++i) { - if (isl_seq_last_non_zero(eq->eq[i] + 1, total) != pos) - continue; - if (isl_int_is_one(eq->eq[i][1 + pos])) - isl_seq_neg(eq->eq[i], eq->eq[i], 1 + total); - return i; - } - - return -1; -} - -/* offset is the offset of local_dim inside global_type of global_dim. - */ -static __isl_give isl_printer *print_nested_var_list(__isl_take isl_printer *p, - __isl_keep isl_dim *global_dim, enum isl_dim_type global_type, - __isl_keep isl_dim *local_dim, enum isl_dim_type local_type, - int set, int latex, __isl_keep isl_basic_map *eq, int offset) -{ - int i, j; - - if (global_dim != local_dim && local_type == isl_dim_out) - offset += local_dim->n_in; - - for (i = 0; i < isl_dim_size(local_dim, local_type); ++i) { - if (i) - p = isl_printer_print_str(p, ", "); - j = defining_equality(eq, global_dim, global_type, offset + i); - if (j >= 0) { - int pos = 1 + isl_dim_offset(global_dim, global_type) - + offset + i; - p = print_affine_of_len(eq->dim, NULL, - p, eq->eq[j], pos, set); - } else { - p = print_name(global_dim, p, global_type, offset + i, - set, latex); - } - } - return p; -} - -static __isl_give isl_printer *print_var_list(__isl_keep isl_dim *dim, - __isl_take isl_printer *p, enum isl_dim_type type, - int set, int latex, __isl_keep isl_basic_map *eq) -{ - return print_nested_var_list(p, dim, type, dim, type, set, latex, eq, 0); -} - -static __isl_give isl_printer *print_nested_map_dim(__isl_take isl_printer *p, - __isl_keep isl_dim *global_dim, enum isl_dim_type global_type, - __isl_keep isl_dim *local_dim, - int set, int latex, __isl_keep isl_basic_map *eq, int offset); - -static __isl_give isl_printer *print_nested_tuple(__isl_take isl_printer *p, - __isl_keep isl_dim *global_dim, enum isl_dim_type global_type, - __isl_keep isl_dim *local_dim, enum isl_dim_type local_type, - int set, int latex, __isl_keep isl_basic_map *eq, int offset) -{ - const char *name = NULL; - unsigned n = isl_dim_size(local_dim, local_type); - if ((local_type == isl_dim_in || local_type == isl_dim_out)) { - name = isl_dim_get_tuple_name(local_dim, local_type); - if (name) { - if (latex) - p = isl_printer_print_str(p, "\\mathrm{"); - p = isl_printer_print_str(p, name); - if (latex) - p = isl_printer_print_str(p, "}"); - } - } - if (!latex || n != 1 || name) - p = isl_printer_print_str(p, s_open_list[latex]); - if ((local_type == isl_dim_in || local_type == isl_dim_out) && - local_dim->nested[local_type - isl_dim_in]) { - if (global_dim != local_dim && local_type == isl_dim_out) - offset += local_dim->n_in; - p = print_nested_map_dim(p, global_dim, global_type, - local_dim->nested[local_type - isl_dim_in], - set, latex, eq, offset); - } else - p = print_nested_var_list(p, global_dim, global_type, - local_dim, local_type, set, latex, eq, offset); - if (!latex || n != 1 || name) - p = isl_printer_print_str(p, s_close_list[latex]); - return p; -} - -static __isl_give isl_printer *print_tuple(__isl_keep isl_dim *dim, - __isl_take isl_printer *p, enum isl_dim_type type, - int set, int latex, __isl_keep isl_basic_map *eq) -{ - return print_nested_tuple(p, dim, type, dim, type, set, latex, eq, 0); -} - -static __isl_give isl_printer *print_nested_map_dim(__isl_take isl_printer *p, - __isl_keep isl_dim *global_dim, enum isl_dim_type global_type, - __isl_keep isl_dim *local_dim, - int set, int latex, __isl_keep isl_basic_map *eq, int offset) -{ - p = print_nested_tuple(p, global_dim, global_type, - local_dim, isl_dim_in, set, latex, eq, offset); - p = isl_printer_print_str(p, s_to[latex]); - p = print_nested_tuple(p, global_dim, global_type, - local_dim, isl_dim_out, set, latex, eq, offset); - - return p; -} - -static __isl_give isl_printer *print_dim(__isl_keep isl_dim *dim, - __isl_take isl_printer *p, int set, int latex, int rational, - __isl_keep isl_basic_map *eq) -{ - if (rational && !latex) - p = isl_printer_print_str(p, "rat: "); - if (set) - p = print_tuple(dim, p, isl_dim_set, 1, latex, eq); - else { - p = print_tuple(dim, p, isl_dim_in, 0, latex, eq); - p = isl_printer_print_str(p, s_to[latex]); - p = print_tuple(dim, p, isl_dim_out, 0, latex, eq); - } - - return p; -} - -static __isl_give isl_printer *print_omega_parameters(__isl_keep isl_dim *dim, - __isl_take isl_printer *p) -{ - if (isl_dim_size(dim, isl_dim_param) == 0) - return p; - - p = isl_printer_start_line(p); - p = isl_printer_print_str(p, "symbolic "); - p = print_var_list(dim, p, isl_dim_param, 0, 0, NULL); - p = isl_printer_print_str(p, ";"); - p = isl_printer_end_line(p); - return p; -} - -static __isl_give isl_printer *print_constraint(struct isl_basic_map *bmap, - __isl_keep isl_dim *dim, __isl_take isl_printer *p, - isl_int *c, int last, const char *op, int first_constraint, int set, - int latex) -{ - if (!first_constraint) - p = isl_printer_print_str(p, s_and[latex]); - - isl_int_abs(c[last], c[last]); - - p = print_term(dim, NULL, c[last], last, p, set, latex); - - p = isl_printer_print_str(p, " "); - p = isl_printer_print_str(p, op); - p = isl_printer_print_str(p, " "); - - isl_int_set_si(c[last], 0); - p = print_affine(bmap, dim, p, c, set); - - return p; -} - -static __isl_give isl_printer *print_constraints(__isl_keep isl_basic_map *bmap, - __isl_keep isl_dim *dim, __isl_take isl_printer *p, int set, int latex) -{ - int i; - struct isl_vec *c; - unsigned total = isl_basic_map_total_dim(bmap); - - c = isl_vec_alloc(bmap->ctx, 1 + total); - if (!c) - goto error; - - for (i = bmap->n_eq - 1; i >= 0; --i) { - int l = isl_seq_last_non_zero(bmap->eq[i], 1 + total); - if (l < 0) { - if (i != bmap->n_eq - 1) - p = isl_printer_print_str(p, s_and[latex]); - p = isl_printer_print_str(p, "0 = 0"); - continue; - } - if (isl_int_is_neg(bmap->eq[i][l])) - isl_seq_cpy(c->el, bmap->eq[i], 1 + total); - else - isl_seq_neg(c->el, bmap->eq[i], 1 + total); - p = print_constraint(bmap, dim, p, c->el, l, - "=", i == bmap->n_eq - 1, set, latex); - } - for (i = 0; i < bmap->n_ineq; ++i) { - int l = isl_seq_last_non_zero(bmap->ineq[i], 1 + total); - int s; - const char *op; - if (l < 0) - continue; - s = isl_int_sgn(bmap->ineq[i][l]); - if (s < 0) - isl_seq_cpy(c->el, bmap->ineq[i], 1 + total); - else - isl_seq_neg(c->el, bmap->ineq[i], 1 + total); - op = s < 0 ? s_le[latex] : s_ge[latex]; - p = print_constraint(bmap, dim, p, c->el, l, - op, !bmap->n_eq && !i, set, latex); - } - - isl_vec_free(c); - - return p; -error: - isl_vec_free(c); - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_omega_constraints( - __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p, int set) -{ - if (bmap->n_eq + bmap->n_ineq == 0) - return p; - - p = isl_printer_print_str(p, ": "); - if (bmap->n_div > 0) { - int i; - p = isl_printer_print_str(p, "exists ("); - for (i = 0; i < bmap->n_div; ++i) { - if (i) - p = isl_printer_print_str(p, ", "); - p = print_name(bmap->dim, p, isl_dim_div, i, 0, 0); - } - p = isl_printer_print_str(p, ": "); - } - p = print_constraints(bmap, bmap->dim, p, set, 0); - if (bmap->n_div > 0) - p = isl_printer_print_str(p, ")"); - return p; -} - -static __isl_give isl_printer *basic_map_print_omega( - __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p) -{ - p = isl_printer_print_str(p, "{ ["); - p = print_var_list(bmap->dim, p, isl_dim_in, 0, 0, NULL); - p = isl_printer_print_str(p, "] -> ["); - p = print_var_list(bmap->dim, p, isl_dim_out, 0, 0, NULL); - p = isl_printer_print_str(p, "] "); - p = print_omega_constraints(bmap, p, 0); - p = isl_printer_print_str(p, " }"); - return p; -} - -static __isl_give isl_printer *isl_basic_map_print_omega( - __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p) -{ - p = print_omega_parameters(bmap->dim, p); - - p = isl_printer_start_line(p); - p = basic_map_print_omega(bmap, p); - p = isl_printer_end_line(p); - return p; -} - -static __isl_give isl_printer *basic_set_print_omega( - __isl_keep isl_basic_set *bset, __isl_take isl_printer *p) -{ - p = isl_printer_print_str(p, "{ ["); - p = print_var_list(bset->dim, p, isl_dim_set, 1, 0, NULL); - p = isl_printer_print_str(p, "] "); - p = print_omega_constraints((isl_basic_map *)bset, p, 1); - p = isl_printer_print_str(p, " }"); - return p; -} - -static __isl_give isl_printer *isl_basic_set_print_omega( - __isl_keep isl_basic_set *bset, __isl_take isl_printer *p) -{ - p = print_omega_parameters(bset->dim, p); - - p = isl_printer_start_line(p); - p = basic_set_print_omega(bset, p); - p = isl_printer_end_line(p); - return p; -} - -static __isl_give isl_printer *isl_map_print_omega(__isl_keep isl_map *map, - __isl_take isl_printer *p) -{ - int i; - - p = print_omega_parameters(map->dim, p); - - p = isl_printer_start_line(p); - for (i = 0; i < map->n; ++i) { - if (i) - p = isl_printer_print_str(p, " union "); - p = basic_map_print_omega(map->p[i], p); - } - p = isl_printer_end_line(p); - return p; -} - -static __isl_give isl_printer *isl_set_print_omega(__isl_keep isl_set *set, - __isl_take isl_printer *p) -{ - int i; - - p = print_omega_parameters(set->dim, p); - - p = isl_printer_start_line(p); - for (i = 0; i < set->n; ++i) { - if (i) - p = isl_printer_print_str(p, " union "); - p = basic_set_print_omega(set->p[i], p); - } - p = isl_printer_end_line(p); - return p; -} - -static __isl_give isl_printer *print_disjunct(__isl_keep isl_basic_map *bmap, - __isl_keep isl_dim *dim, __isl_take isl_printer *p, int set, int latex) -{ - if (bmap->n_div > 0) { - int i; - p = isl_printer_print_str(p, s_open_exists[latex]); - for (i = 0; i < bmap->n_div; ++i) { - if (i) - p = isl_printer_print_str(p, ", "); - p = print_name(dim, p, isl_dim_div, i, 0, latex); - if (latex || isl_int_is_zero(bmap->div[i][0])) - continue; - p = isl_printer_print_str(p, " = [("); - p = print_affine(bmap, dim, p, bmap->div[i] + 1, set); - p = isl_printer_print_str(p, ")/"); - p = isl_printer_print_isl_int(p, bmap->div[i][0]); - p = isl_printer_print_str(p, "]"); - } - p = isl_printer_print_str(p, ": "); - } - - p = print_constraints(bmap, dim, p, set, latex); - - if (bmap->n_div > 0) - p = isl_printer_print_str(p, s_close_exists[latex]); - return p; -} - -static __isl_give isl_printer *isl_basic_map_print_isl( - __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p, - int set, int latex) -{ - int rational = ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL); - if (isl_basic_map_dim(bmap, isl_dim_param) > 0) { - p = print_tuple(bmap->dim, p, isl_dim_param, 0, latex, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - p = print_dim(bmap->dim, p, set, latex, rational, NULL); - p = isl_printer_print_str(p, " : "); - p = print_disjunct(bmap, bmap->dim, p, set, latex); - p = isl_printer_print_str(p, " }"); - return p; -} - -static __isl_give isl_printer *print_disjuncts(__isl_keep isl_map *map, - __isl_take isl_printer *p, int set, int latex) -{ - int i; - - if (isl_map_plain_is_universe(map)) - return p; - - p = isl_printer_print_str(p, s_such_that[latex]); - if (map->n == 0) - p = isl_printer_print_str(p, "1 = 0"); - for (i = 0; i < map->n; ++i) { - if (i) - p = isl_printer_print_str(p, s_or[latex]); - if (map->n > 1 && map->p[i]->n_eq + map->p[i]->n_ineq > 1) - p = isl_printer_print_str(p, "("); - p = print_disjunct(map->p[i], map->dim, p, set, latex); - if (map->n > 1 && map->p[i]->n_eq + map->p[i]->n_ineq > 1) - p = isl_printer_print_str(p, ")"); - } - return p; -} - -struct isl_aff_split { - isl_basic_map *aff; - isl_map *map; -}; - -static void free_split(__isl_take struct isl_aff_split *split, int n) -{ - int i; - - if (!split) - return; - - for (i = 0; i < n; ++i) { - isl_basic_map_free(split[i].aff); - isl_map_free(split[i].map); - } - - free(split); -} - -static __isl_give isl_basic_map *get_aff(__isl_take isl_basic_map *bmap) -{ - int i, j; - unsigned nparam, n_in, n_out, total; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - if (isl_basic_map_free_inequality(bmap, bmap->n_ineq) < 0) - goto error; - - nparam = isl_basic_map_dim(bmap, isl_dim_param); - n_in = isl_basic_map_dim(bmap, isl_dim_in); - n_out = isl_basic_map_dim(bmap, isl_dim_out); - total = isl_basic_map_dim(bmap, isl_dim_all); - for (i = bmap->n_eq - 1; i >= 0; --i) { - j = isl_seq_last_non_zero(bmap->eq[i] + 1, total); - if (j >= nparam && j < nparam + n_in + n_out && - (isl_int_is_one(bmap->eq[i][1 + j]) || - isl_int_is_negone(bmap->eq[i][1 + j]))) - continue; - if (isl_basic_map_drop_equality(bmap, i) < 0) - goto error; - } - - bmap = isl_basic_map_finalize(bmap); - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static int aff_split_cmp(const void *p1, const void *p2) -{ - const struct isl_aff_split *s1, *s2; - s1 = (const struct isl_aff_split *) p1; - s2 = (const struct isl_aff_split *) p2; - - return isl_basic_map_plain_cmp(s1->aff, s2->aff); -} - -static __isl_give isl_basic_map *drop_aff(__isl_take isl_basic_map *bmap, - __isl_keep isl_basic_map *aff) -{ - int i, j; - unsigned total; - - if (!bmap || !aff) - goto error; - - total = isl_dim_total(bmap->dim); - - for (i = bmap->n_eq - 1; i >= 0; --i) { - if (isl_seq_first_non_zero(bmap->eq[i] + 1 + total, - bmap->n_div) != -1) - continue; - for (j = 0; j < aff->n_eq; ++j) { - if (!isl_seq_eq(bmap->eq[i], aff->eq[j], 1 + total) && - !isl_seq_is_neg(bmap->eq[i], aff->eq[j], 1 + total)) - continue; - if (isl_basic_map_drop_equality(bmap, i) < 0) - goto error; - break; - } - } - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static __isl_give struct isl_aff_split *split_aff(__isl_keep isl_map *map) -{ - int i, n; - struct isl_aff_split *split; - isl_ctx *ctx; - - ctx = isl_map_get_ctx(map); - split = isl_calloc_array(ctx, struct isl_aff_split, map->n); - if (!split) - return NULL; - - for (i = 0; i < map->n; ++i) { - isl_basic_map *bmap; - split[i].aff = get_aff(isl_basic_map_copy(map->p[i])); - bmap = isl_basic_map_copy(map->p[i]); - bmap = isl_basic_map_cow(bmap); - bmap = drop_aff(bmap, split[i].aff); - split[i].map = isl_map_from_basic_map(bmap); - if (!split[i].aff || !split[i].map) - goto error; - } - - qsort(split, map->n, sizeof(struct isl_aff_split), &aff_split_cmp); - - n = map->n; - for (i = n - 1; i >= 1; --i) { - if (!isl_basic_map_plain_is_equal(split[i - 1].aff, - split[i].aff)) - continue; - isl_basic_map_free(split[i].aff); - split[i - 1].map = isl_map_union(split[i - 1].map, - split[i].map); - if (i != n - 1) - split[i] = split[n - 1]; - split[n - 1].aff = NULL; - split[n - 1].map = NULL; - --n; - } - - return split; -error: - free_split(split, map->n); - return NULL; -} - -static __isl_give isl_printer *print_split_map(__isl_take isl_printer *p, - struct isl_aff_split *split, int n, int set) -{ - int i; - int rational; - - for (i = 0; i < n; ++i) { - isl_dim *dim; - - if (!split[i].map) - break; - dim = split[i].map->dim; - rational = split[i].map->n > 0 && - ISL_F_ISSET(split[i].map->p[0], ISL_BASIC_MAP_RATIONAL); - if (i) - p = isl_printer_print_str(p, "; "); - p = print_dim(dim, p, set, 0, rational, split[i].aff); - p = print_disjuncts(split[i].map, p, set, 0); - } - - return p; -} - -static __isl_give isl_printer *isl_map_print_isl_body(__isl_keep isl_map *map, - __isl_take isl_printer *p, int set) -{ - struct isl_aff_split *split = NULL; - int rational; - - if (map->n > 0) - split = split_aff(map); - if (split) { - p = print_split_map(p, split, map->n, set); - } else { - rational = map->n > 0 && - ISL_F_ISSET(map->p[0], ISL_BASIC_MAP_RATIONAL); - p = print_dim(map->dim, p, set, 0, rational, NULL); - p = print_disjuncts(map, p, set, 0); - } - free_split(split, map->n); - return p; -} - -static __isl_give isl_printer *isl_map_print_isl(__isl_keep isl_map *map, - __isl_take isl_printer *p, int set) -{ - if (isl_map_dim(map, isl_dim_param) > 0) { - p = print_tuple(map->dim, p, isl_dim_param, set, 0, NULL); - p = isl_printer_print_str(p, s_to[0]); - } - p = isl_printer_print_str(p, s_open_set[0]); - p = isl_map_print_isl_body(map, p, set); - p = isl_printer_print_str(p, s_close_set[0]); - return p; -} - -static __isl_give isl_printer *print_latex_map(__isl_keep isl_map *map, - __isl_take isl_printer *p, __isl_keep isl_basic_map *aff, int set) -{ - if (isl_map_dim(map, isl_dim_param) > 0) { - p = print_tuple(map->dim, p, isl_dim_param, set, 1, NULL); - p = isl_printer_print_str(p, s_to[1]); - } - p = isl_printer_print_str(p, s_open_set[1]); - p = print_dim(map->dim, p, set, 1, 0, aff); - p = print_disjuncts(map, p, set, 1); - p = isl_printer_print_str(p, s_close_set[1]); - - return p; -} - -static __isl_give isl_printer *isl_map_print_latex(__isl_keep isl_map *map, - __isl_take isl_printer *p, int set) -{ - int i; - struct isl_aff_split *split = NULL; - - if (map->n > 0) - split = split_aff(map); - - if (!split) - return print_latex_map(map, p, NULL, set); - - for (i = 0; i < map->n; ++i) { - if (!split[i].map) - break; - if (i) - p = isl_printer_print_str(p, " \\cup "); - p = print_latex_map(split[i].map, p, split[i].aff, set); - } - - free_split(split, map->n); - return p; -} - -__isl_give isl_printer *isl_printer_print_basic_map(__isl_take isl_printer *p, - __isl_keep isl_basic_map *bmap) -{ - if (!p || !bmap) - goto error; - if (p->output_format == ISL_FORMAT_ISL) - return isl_basic_map_print_isl(bmap, p, 0, 0); - else if (p->output_format == ISL_FORMAT_OMEGA) - return isl_basic_map_print_omega(bmap, p); - isl_assert(bmap->ctx, 0, goto error); -error: - isl_printer_free(p); - return NULL; -} - -void isl_basic_map_print(__isl_keep isl_basic_map *bmap, FILE *out, int indent, - const char *prefix, const char *suffix, unsigned output_format) -{ - isl_printer *printer; - - if (!bmap) - return; - - printer = isl_printer_to_file(bmap->ctx, out); - printer = isl_printer_set_indent(printer, indent); - printer = isl_printer_set_prefix(printer, prefix); - printer = isl_printer_set_suffix(printer, suffix); - printer = isl_printer_set_output_format(printer, output_format); - isl_printer_print_basic_map(printer, bmap); - - isl_printer_free(printer); -} - -__isl_give isl_printer *isl_printer_print_basic_set(__isl_take isl_printer *p, - __isl_keep isl_basic_set *bset) -{ - if (!p || !bset) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return isl_basic_map_print_isl(bset, p, 1, 0); - else if (p->output_format == ISL_FORMAT_POLYLIB) - return isl_basic_set_print_polylib(bset, p, 0); - else if (p->output_format == ISL_FORMAT_EXT_POLYLIB) - return isl_basic_set_print_polylib(bset, p, 1); - else if (p->output_format == ISL_FORMAT_POLYLIB_CONSTRAINTS) - return bset_print_constraints_polylib(bset, p); - else if (p->output_format == ISL_FORMAT_OMEGA) - return isl_basic_set_print_omega(bset, p); - isl_assert(p->ctx, 0, goto error); -error: - isl_printer_free(p); - return NULL; -} - -void isl_basic_set_print(struct isl_basic_set *bset, FILE *out, int indent, - const char *prefix, const char *suffix, unsigned output_format) -{ - isl_printer *printer; - - if (!bset) - return; - - printer = isl_printer_to_file(bset->ctx, out); - printer = isl_printer_set_indent(printer, indent); - printer = isl_printer_set_prefix(printer, prefix); - printer = isl_printer_set_suffix(printer, suffix); - printer = isl_printer_set_output_format(printer, output_format); - isl_printer_print_basic_set(printer, bset); - - isl_printer_free(printer); -} - -__isl_give isl_printer *isl_printer_print_set(__isl_take isl_printer *p, - __isl_keep isl_set *set) -{ - if (!p || !set) - goto error; - if (p->output_format == ISL_FORMAT_ISL) - return isl_map_print_isl((isl_map *)set, p, 1); - else if (p->output_format == ISL_FORMAT_POLYLIB) - return isl_set_print_polylib(set, p, 0); - else if (p->output_format == ISL_FORMAT_EXT_POLYLIB) - return isl_set_print_polylib(set, p, 1); - else if (p->output_format == ISL_FORMAT_OMEGA) - return isl_set_print_omega(set, p); - else if (p->output_format == ISL_FORMAT_LATEX) - return isl_map_print_latex((isl_map *)set, p, 1); - isl_assert(set->ctx, 0, goto error); -error: - isl_printer_free(p); - return NULL; -} - -void isl_set_print(struct isl_set *set, FILE *out, int indent, - unsigned output_format) -{ - isl_printer *printer; - - if (!set) - return; - - printer = isl_printer_to_file(set->ctx, out); - printer = isl_printer_set_indent(printer, indent); - printer = isl_printer_set_output_format(printer, output_format); - printer = isl_printer_print_set(printer, set); - - isl_printer_free(printer); -} - -__isl_give isl_printer *isl_printer_print_map(__isl_take isl_printer *p, - __isl_keep isl_map *map) -{ - if (!p || !map) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return isl_map_print_isl(map, p, 0); - else if (p->output_format == ISL_FORMAT_POLYLIB) - return isl_map_print_polylib(map, p, 0); - else if (p->output_format == ISL_FORMAT_EXT_POLYLIB) - return isl_map_print_polylib(map, p, 1); - else if (p->output_format == ISL_FORMAT_OMEGA) - return isl_map_print_omega(map, p); - else if (p->output_format == ISL_FORMAT_LATEX) - return isl_map_print_latex(map, p, 0); - isl_assert(map->ctx, 0, goto error); -error: - isl_printer_free(p); - return NULL; -} - -struct isl_union_print_data { - isl_printer *p; - int set; - int first; -}; - -static int print_map_body(__isl_take isl_map *map, void *user) -{ - struct isl_union_print_data *data; - data = (struct isl_union_print_data *)user; - - if (!data->first) - data->p = isl_printer_print_str(data->p, "; "); - data->first = 0; - - data->p = isl_map_print_isl_body(map, data->p, data->set); - isl_map_free(map); - - return 0; -} - -static __isl_give isl_printer *isl_union_map_print_isl( - __isl_keep isl_union_map *umap, __isl_take isl_printer *p, int set) -{ - struct isl_union_print_data data = { p, set, 1 }; - isl_dim *dim; - dim = isl_union_map_get_dim(umap); - if (isl_dim_size(dim, isl_dim_param) > 0) { - p = print_tuple(dim, p, isl_dim_param, set, 0, NULL); - p = isl_printer_print_str(p, s_to[0]); - } - isl_dim_free(dim); - p = isl_printer_print_str(p, s_open_set[0]); - isl_union_map_foreach_map(umap, &print_map_body, &data); - p = data.p; - p = isl_printer_print_str(p, s_close_set[0]); - return p; -} - -static int print_latex_map_body(__isl_take isl_map *map, void *user) -{ - struct isl_union_print_data *data; - data = (struct isl_union_print_data *)user; - - if (!data->first) - data->p = isl_printer_print_str(data->p, " \\cup "); - data->first = 0; - - data->p = isl_map_print_latex(map, data->p, data->set); - isl_map_free(map); - - return 0; -} - -static __isl_give isl_printer *isl_union_map_print_latex( - __isl_keep isl_union_map *umap, __isl_take isl_printer *p, int set) -{ - struct isl_union_print_data data = { p, set, 1 }; - isl_union_map_foreach_map(umap, &print_latex_map_body, &data); - p = data.p; - return p; -} - -__isl_give isl_printer *isl_printer_print_union_map(__isl_take isl_printer *p, - __isl_keep isl_union_map *umap) -{ - if (!p || !umap) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return isl_union_map_print_isl(umap, p, 0); - if (p->output_format == ISL_FORMAT_LATEX) - return isl_union_map_print_latex(umap, p, 0); - - isl_die(p->ctx, isl_error_invalid, - "invalid output format for isl_union_map", goto error); -error: - isl_printer_free(p); - return NULL; -} - -__isl_give isl_printer *isl_printer_print_union_set(__isl_take isl_printer *p, - __isl_keep isl_union_set *uset) -{ - if (!p || !uset) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return isl_union_map_print_isl((isl_union_map *)uset, p, 1); - if (p->output_format == ISL_FORMAT_LATEX) - return isl_union_map_print_latex((isl_union_map *)uset, p, 1); - - isl_die(p->ctx, isl_error_invalid, - "invalid output format for isl_union_set", goto error); -error: - isl_printer_free(p); - return NULL; -} - -void isl_map_print(__isl_keep isl_map *map, FILE *out, int indent, - unsigned output_format) -{ - isl_printer *printer; - - if (!map) - return; - - printer = isl_printer_to_file(map->ctx, out); - printer = isl_printer_set_indent(printer, indent); - printer = isl_printer_set_output_format(printer, output_format); - printer = isl_printer_print_map(printer, map); - - isl_printer_free(printer); -} - -void isl_basic_map_dump(__isl_keep isl_basic_map *bmap) -{ - isl_printer *printer; - - if (!bmap) - return; - - printer = isl_printer_to_file(isl_basic_map_get_ctx(bmap), stderr); - printer = isl_printer_print_basic_map(printer, bmap); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -void isl_basic_set_dump(__isl_keep isl_basic_set *bset) -{ - isl_printer *printer; - - if (!bset) - return; - - printer = isl_printer_to_file(isl_basic_set_get_ctx(bset), stderr); - printer = isl_printer_print_basic_set(printer, bset); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -void isl_map_dump(__isl_keep isl_map *map) -{ - isl_printer *printer; - - if (!map) - return; - - printer = isl_printer_to_file(isl_map_get_ctx(map), stderr); - printer = isl_printer_print_map(printer, map); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -void isl_set_dump(__isl_keep isl_set *set) -{ - isl_printer *printer; - - if (!set) - return; - - printer = isl_printer_to_file(isl_set_get_ctx(set), stderr); - printer = isl_printer_print_set(printer, set); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -void isl_union_map_dump(__isl_keep isl_union_map *umap) -{ - isl_printer *printer; - - if (!umap) - return; - - printer = isl_printer_to_file(isl_union_map_get_ctx(umap), stderr); - printer = isl_printer_print_union_map(printer, umap); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -void isl_union_set_dump(__isl_keep isl_union_set *uset) -{ - isl_printer *printer; - - if (!uset) - return; - - printer = isl_printer_to_file(isl_union_set_get_ctx(uset), stderr); - printer = isl_printer_print_union_set(printer, uset); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -void isl_union_pw_qpolynomial_dump(__isl_keep isl_union_pw_qpolynomial *upwqp) -{ - isl_printer *printer; - - if (!upwqp) - return; - - printer = isl_printer_to_file(isl_union_pw_qpolynomial_get_ctx(upwqp), - stderr); - printer = isl_printer_print_union_pw_qpolynomial(printer, upwqp); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -void isl_qpolynomial_dump(__isl_keep isl_qpolynomial *qp) -{ - isl_printer *printer; - - if (!qp) - return; - - printer = isl_printer_to_file(isl_qpolynomial_get_ctx(qp), stderr); - printer = isl_printer_print_qpolynomial(printer, qp); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -void isl_qpolynomial_fold_dump(__isl_keep isl_qpolynomial_fold *fold) -{ - isl_printer *printer; - - if (!fold) - return; - - printer = isl_printer_to_file(isl_qpolynomial_fold_get_ctx(fold), - stderr); - printer = isl_printer_print_qpolynomial_fold(printer, fold); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -void isl_pw_qpolynomial_dump(__isl_keep isl_pw_qpolynomial *pwqp) -{ - isl_printer *printer; - - if (!pwqp) - return; - - printer = isl_printer_to_file(isl_pw_qpolynomial_get_ctx(pwqp), stderr); - printer = isl_printer_print_pw_qpolynomial(printer, pwqp); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -void isl_pw_qpolynomial_fold_dump(__isl_keep isl_pw_qpolynomial_fold *pwf) -{ - isl_printer *printer; - - if (!pwf) - return; - - printer = isl_printer_to_file( - isl_pw_qpolynomial_fold_get_ctx(pwf), stderr); - printer = isl_printer_print_pw_qpolynomial_fold(printer, pwf); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -void isl_union_pw_qpolynomial_fold_dump( - __isl_keep isl_union_pw_qpolynomial_fold *upwf) -{ - isl_printer *printer; - - if (!upwf) - return; - - printer = isl_printer_to_file( - isl_union_pw_qpolynomial_fold_get_ctx(upwf), stderr); - printer = isl_printer_print_union_pw_qpolynomial_fold(printer, upwf); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -static int upoly_rec_n_non_zero(__isl_keep struct isl_upoly_rec *rec) -{ - int i; - int n; - - for (i = 0, n = 0; i < rec->n; ++i) - if (!isl_upoly_is_zero(rec->p[i])) - ++n; - - return n; -} - -static __isl_give isl_printer *print_div(__isl_keep isl_dim *dim, - __isl_keep isl_mat *div, int pos, __isl_take isl_printer *p) -{ - int c = p->output_format == ISL_FORMAT_C; - p = isl_printer_print_str(p, c ? "floord(" : "[("); - p = print_affine_of_len(dim, div, p, - div->row[pos] + 1, div->n_col - 1, 1); - p = isl_printer_print_str(p, c ? ", " : ")/"); - p = isl_printer_print_isl_int(p, div->row[pos][0]); - p = isl_printer_print_str(p, c ? ")" : "]"); - return p; -} - -static __isl_give isl_printer *upoly_print_cst(__isl_keep struct isl_upoly *up, - __isl_take isl_printer *p, int first) -{ - struct isl_upoly_cst *cst; - int neg; - - cst = isl_upoly_as_cst(up); - if (!cst) - goto error; - neg = !first && isl_int_is_neg(cst->n); - if (!first) - p = isl_printer_print_str(p, neg ? " - " : " + "); - if (neg) - isl_int_neg(cst->n, cst->n); - if (isl_int_is_zero(cst->d)) { - int sgn = isl_int_sgn(cst->n); - p = isl_printer_print_str(p, sgn < 0 ? "-infty" : - sgn == 0 ? "NaN" : "infty"); - } else - p = isl_printer_print_isl_int(p, cst->n); - if (neg) - isl_int_neg(cst->n, cst->n); - if (!isl_int_is_zero(cst->d) && !isl_int_is_one(cst->d)) { - p = isl_printer_print_str(p, "/"); - p = isl_printer_print_isl_int(p, cst->d); - } - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_base(__isl_take isl_printer *p, - __isl_keep isl_dim *dim, __isl_keep isl_mat *div, int var) -{ - unsigned total; - - total = isl_dim_total(dim); - if (var < total) - p = print_term(dim, NULL, dim->ctx->one, 1 + var, p, 1, 0); - else - p = print_div(dim, div, var - total, p); - return p; -} - -static __isl_give isl_printer *print_pow(__isl_take isl_printer *p, - __isl_keep isl_dim *dim, __isl_keep isl_mat *div, int var, int exp) -{ - p = print_base(p, dim, div, var); - if (exp == 1) - return p; - if (p->output_format == ISL_FORMAT_C) { - int i; - for (i = 1; i < exp; ++i) { - p = isl_printer_print_str(p, "*"); - p = print_base(p, dim, div, var); - } - } else { - p = isl_printer_print_str(p, "^"); - p = isl_printer_print_int(p, exp); - } - return p; -} - -static __isl_give isl_printer *upoly_print(__isl_keep struct isl_upoly *up, - __isl_keep isl_dim *dim, __isl_keep isl_mat *div, - __isl_take isl_printer *p, int outer) -{ - int i, n, first, print_parens; - struct isl_upoly_rec *rec; - - if (!p || !up || !dim || !div) - goto error; - - if (isl_upoly_is_cst(up)) - return upoly_print_cst(up, p, 1); - - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - n = upoly_rec_n_non_zero(rec); - print_parens = n > 1 || (outer && rec->up.var >= isl_dim_total(dim)); - if (print_parens) - p = isl_printer_print_str(p, "("); - for (i = 0, first = 1; i < rec->n; ++i) { - if (isl_upoly_is_zero(rec->p[i])) - continue; - if (isl_upoly_is_negone(rec->p[i])) { - if (!i) - p = isl_printer_print_str(p, "-1"); - else if (first) - p = isl_printer_print_str(p, "-"); - else - p = isl_printer_print_str(p, " - "); - } else if (isl_upoly_is_cst(rec->p[i]) && - !isl_upoly_is_one(rec->p[i])) - p = upoly_print_cst(rec->p[i], p, first); - else { - if (!first) - p = isl_printer_print_str(p, " + "); - if (i == 0 || !isl_upoly_is_one(rec->p[i])) - p = upoly_print(rec->p[i], dim, div, p, 0); - } - first = 0; - if (i == 0) - continue; - if (!isl_upoly_is_one(rec->p[i]) && - !isl_upoly_is_negone(rec->p[i])) - p = isl_printer_print_str(p, " * "); - p = print_pow(p, dim, div, rec->up.var, i); - } - if (print_parens) - p = isl_printer_print_str(p, ")"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_qpolynomial(__isl_take isl_printer *p, - __isl_keep isl_qpolynomial *qp) -{ - if (!p || !qp) - goto error; - p = upoly_print(qp->upoly, qp->dim, qp->div, p, 1); - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_qpolynomial_isl(__isl_take isl_printer *p, - __isl_keep isl_qpolynomial *qp) -{ - if (!p || !qp) - goto error; - - if (isl_dim_size(qp->dim, isl_dim_param) > 0) { - p = print_tuple(qp->dim, p, isl_dim_param, 0, 0, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - if (isl_dim_size(qp->dim, isl_dim_set) > 0 || - isl_dim_is_named_or_nested(qp->dim, isl_dim_set)) { - p = print_dim(qp->dim, p, 1, 0, 0, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = print_qpolynomial(p, qp); - p = isl_printer_print_str(p, " }"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_qpolynomial_c(__isl_take isl_printer *p, - __isl_keep isl_dim *dim, __isl_keep isl_qpolynomial *qp) -{ - isl_int den; - - isl_int_init(den); - isl_qpolynomial_get_den(qp, &den); - if (!isl_int_is_one(den)) { - isl_qpolynomial *f; - p = isl_printer_print_str(p, "("); - qp = isl_qpolynomial_copy(qp); - f = isl_qpolynomial_rat_cst(isl_dim_copy(qp->dim), - den, qp->dim->ctx->one); - qp = isl_qpolynomial_mul(qp, f); - } - if (qp) - p = upoly_print(qp->upoly, dim, qp->div, p, 0); - if (!isl_int_is_one(den)) { - p = isl_printer_print_str(p, ")/"); - p = isl_printer_print_isl_int(p, den); - isl_qpolynomial_free(qp); - } - isl_int_clear(den); - return p; -} - -__isl_give isl_printer *isl_printer_print_qpolynomial( - __isl_take isl_printer *p, __isl_keep isl_qpolynomial *qp) -{ - if (!p || !qp) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_qpolynomial_isl(p, qp); - else if (p->output_format == ISL_FORMAT_C) - return print_qpolynomial_c(p, qp->dim, qp); - else - isl_die(qp->dim->ctx, isl_error_unsupported, - "output format not supported for isl_qpolynomials", - goto error); -error: - isl_printer_free(p); - return NULL; -} - -void isl_qpolynomial_print(__isl_keep isl_qpolynomial *qp, FILE *out, - unsigned output_format) -{ - isl_printer *p; - - if (!qp) - return; - - isl_assert(qp->dim->ctx, output_format == ISL_FORMAT_ISL, return); - p = isl_printer_to_file(qp->dim->ctx, out); - p = isl_printer_print_qpolynomial(p, qp); - isl_printer_free(p); -} - -static __isl_give isl_printer *qpolynomial_fold_print( - __isl_keep isl_qpolynomial_fold *fold, __isl_take isl_printer *p) -{ - int i; - - if (fold->type == isl_fold_min) - p = isl_printer_print_str(p, "min"); - else if (fold->type == isl_fold_max) - p = isl_printer_print_str(p, "max"); - p = isl_printer_print_str(p, "("); - for (i = 0; i < fold->n; ++i) { - if (i) - p = isl_printer_print_str(p, ", "); - p = print_qpolynomial(p, fold->qp[i]); - } - p = isl_printer_print_str(p, ")"); - return p; -} - -void isl_qpolynomial_fold_print(__isl_keep isl_qpolynomial_fold *fold, - FILE *out, unsigned output_format) -{ - isl_printer *p; - - if (!fold) - return; - - isl_assert(fold->dim->ctx, output_format == ISL_FORMAT_ISL, return); - - p = isl_printer_to_file(fold->dim->ctx, out); - p = isl_printer_print_qpolynomial_fold(p, fold); - - isl_printer_free(p); -} - -static __isl_give isl_printer *isl_pwqp_print_isl_body( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial *pwqp) -{ - int i = 0; - - for (i = 0; i < pwqp->n; ++i) { - if (i) - p = isl_printer_print_str(p, "; "); - if (isl_dim_size(pwqp->dim, isl_dim_set) > 0 || - isl_dim_is_named_or_nested(pwqp->dim, isl_dim_set)) { - p = print_dim(pwqp->p[i].set->dim, p, 1, 0, 0, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = print_qpolynomial(p, pwqp->p[i].qp); - p = print_disjuncts((isl_map *)pwqp->p[i].set, p, 1, 0); - } - - return p; -} - -static __isl_give isl_printer *print_pw_qpolynomial_isl( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial *pwqp) -{ - if (!p || !pwqp) - goto error; - - if (isl_dim_size(pwqp->dim, isl_dim_param) > 0) { - p = print_tuple(pwqp->dim, p, isl_dim_param, 0, 0, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - if (pwqp->n == 0) { - if (isl_dim_size(pwqp->dim, isl_dim_set) > 0 || - isl_dim_is_named_or_nested(pwqp->dim, isl_dim_set)) { - p = print_dim(pwqp->dim, p, 1, 0, 0, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "0"); - } - p = isl_pwqp_print_isl_body(p, pwqp); - p = isl_printer_print_str(p, " }"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -void isl_pw_qpolynomial_print(__isl_keep isl_pw_qpolynomial *pwqp, FILE *out, - unsigned output_format) -{ - isl_printer *p; - - if (!pwqp) - return; - - p = isl_printer_to_file(pwqp->dim->ctx, out); - p = isl_printer_set_output_format(p, output_format); - p = isl_printer_print_pw_qpolynomial(p, pwqp); - - isl_printer_free(p); -} - -static __isl_give isl_printer *isl_pwf_print_isl_body( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial_fold *pwf) -{ - int i = 0; - - for (i = 0; i < pwf->n; ++i) { - if (i) - p = isl_printer_print_str(p, "; "); - if (isl_dim_size(pwf->dim, isl_dim_set) > 0 || - isl_dim_is_named_or_nested(pwf->dim, isl_dim_set)) { - p = print_dim(pwf->p[i].set->dim, p, 1, 0, 0, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = qpolynomial_fold_print(pwf->p[i].fold, p); - p = print_disjuncts((isl_map *)pwf->p[i].set, p, 1, 0); - } - - return p; -} - -static __isl_give isl_printer *print_pw_qpolynomial_fold_isl( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial_fold *pwf) -{ - if (isl_dim_size(pwf->dim, isl_dim_param) > 0) { - p = print_tuple(pwf->dim, p, isl_dim_param, 0, 0, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - if (pwf->n == 0) { - if (isl_dim_size(pwf->dim, isl_dim_set) > 0 || - isl_dim_is_named_or_nested(pwf->dim, isl_dim_set)) { - p = print_dim(pwf->dim, p, 1, 0, 0, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "0"); - } - p = isl_pwf_print_isl_body(p, pwf); - p = isl_printer_print_str(p, " }"); - return p; -} - -static __isl_give isl_printer *print_affine_c(__isl_take isl_printer *p, - __isl_keep isl_dim *dim, __isl_keep isl_basic_set *bset, isl_int *c); - -static __isl_give isl_printer *print_name_c(__isl_take isl_printer *p, - __isl_keep isl_dim *dim, - __isl_keep isl_basic_set *bset, enum isl_dim_type type, unsigned pos) -{ - if (type == isl_dim_div) { - p = isl_printer_print_str(p, "floord("); - p = print_affine_c(p, dim, bset, bset->div[pos] + 1); - p = isl_printer_print_str(p, ", "); - p = isl_printer_print_isl_int(p, bset->div[pos][0]); - p = isl_printer_print_str(p, ")"); - } else { - const char *name; - - name = isl_dim_get_name(dim, type, pos); - if (!name) - name = "UNNAMED"; - p = isl_printer_print_str(p, name); - } - return p; -} - -static __isl_give isl_printer *print_term_c(__isl_take isl_printer *p, - __isl_keep isl_dim *dim, - __isl_keep isl_basic_set *bset, isl_int c, unsigned pos) -{ - enum isl_dim_type type; - - if (pos == 0) - return isl_printer_print_isl_int(p, c); - - if (isl_int_is_one(c)) - ; - else if (isl_int_is_negone(c)) - p = isl_printer_print_str(p, "-"); - else { - p = isl_printer_print_isl_int(p, c); - p = isl_printer_print_str(p, "*"); - } - type = pos2type(dim, &pos); - p = print_name_c(p, dim, bset, type, pos); - return p; -} - -static __isl_give isl_printer *print_partial_affine_c(__isl_take isl_printer *p, - __isl_keep isl_dim *dim, - __isl_keep isl_basic_set *bset, isl_int *c, unsigned len) -{ - int i; - int first; - - for (i = 0, first = 1; i < len; ++i) { - int flip = 0; - if (isl_int_is_zero(c[i])) - continue; - if (!first) { - if (isl_int_is_neg(c[i])) { - flip = 1; - isl_int_neg(c[i], c[i]); - p = isl_printer_print_str(p, " - "); - } else - p = isl_printer_print_str(p, " + "); - } - first = 0; - p = print_term_c(p, dim, bset, c[i], i); - if (flip) - isl_int_neg(c[i], c[i]); - } - if (first) - p = isl_printer_print_str(p, "0"); - return p; -} - -static __isl_give isl_printer *print_affine_c(__isl_take isl_printer *p, - __isl_keep isl_dim *dim, __isl_keep isl_basic_set *bset, isl_int *c) -{ - unsigned len = 1 + isl_basic_set_total_dim(bset); - return print_partial_affine_c(p, dim, bset, c, len); -} - -static __isl_give isl_printer *print_constraint_c(__isl_take isl_printer *p, - __isl_keep isl_dim *dim, - __isl_keep isl_basic_set *bset, isl_int *c, const char *op, int first) -{ - if (!first) - p = isl_printer_print_str(p, " && "); - - p = print_affine_c(p, dim, bset, c); - p = isl_printer_print_str(p, " "); - p = isl_printer_print_str(p, op); - p = isl_printer_print_str(p, " 0"); - return p; -} - -static __isl_give isl_printer *print_basic_set_c(__isl_take isl_printer *p, - __isl_keep isl_dim *dim, __isl_keep isl_basic_set *bset) -{ - int i, j; - unsigned n_div = isl_basic_set_dim(bset, isl_dim_div); - unsigned total = isl_basic_set_total_dim(bset) - n_div; - - for (i = 0; i < bset->n_eq; ++i) { - j = isl_seq_last_non_zero(bset->eq[i] + 1 + total, n_div); - if (j < 0) - p = print_constraint_c(p, dim, bset, - bset->eq[i], "==", !i); - else { - if (i) - p = isl_printer_print_str(p, " && "); - p = isl_printer_print_str(p, "("); - p = print_partial_affine_c(p, dim, bset, bset->eq[i], - 1 + total + j); - p = isl_printer_print_str(p, ") % "); - p = isl_printer_print_isl_int(p, - bset->eq[i][1 + total + j]); - p = isl_printer_print_str(p, " == 0"); - } - } - for (i = 0; i < bset->n_ineq; ++i) - p = print_constraint_c(p, dim, bset, bset->ineq[i], ">=", - !bset->n_eq && !i); - return p; -} - -static __isl_give isl_printer *print_set_c(__isl_take isl_printer *p, - __isl_keep isl_dim *dim, __isl_keep isl_set *set) -{ - int i; - - if (set->n == 0) - p = isl_printer_print_str(p, "0"); - - for (i = 0; i < set->n; ++i) { - if (i) - p = isl_printer_print_str(p, " || "); - if (set->n > 1) - p = isl_printer_print_str(p, "("); - p = print_basic_set_c(p, dim, set->p[i]); - if (set->n > 1) - p = isl_printer_print_str(p, ")"); - } - return p; -} - -static __isl_give isl_printer *print_pw_qpolynomial_c( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial *pwqp) -{ - int i; - - if (pwqp->n == 1 && isl_set_plain_is_universe(pwqp->p[0].set)) - return print_qpolynomial_c(p, pwqp->dim, pwqp->p[0].qp); - - for (i = 0; i < pwqp->n; ++i) { - p = isl_printer_print_str(p, "("); - p = print_set_c(p, pwqp->dim, pwqp->p[i].set); - p = isl_printer_print_str(p, ") ? ("); - p = print_qpolynomial_c(p, pwqp->dim, pwqp->p[i].qp); - p = isl_printer_print_str(p, ") : "); - } - - p = isl_printer_print_str(p, "0"); - return p; -} - -__isl_give isl_printer *isl_printer_print_pw_qpolynomial( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial *pwqp) -{ - if (!p || !pwqp) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_pw_qpolynomial_isl(p, pwqp); - else if (p->output_format == ISL_FORMAT_C) - return print_pw_qpolynomial_c(p, pwqp); - isl_assert(p->ctx, 0, goto error); -error: - isl_printer_free(p); - return NULL; -} - -static int print_pwqp_body(__isl_take isl_pw_qpolynomial *pwqp, void *user) -{ - struct isl_union_print_data *data; - data = (struct isl_union_print_data *)user; - - if (!data->first) - data->p = isl_printer_print_str(data->p, "; "); - data->first = 0; - - data->p = isl_pwqp_print_isl_body(data->p, pwqp); - isl_pw_qpolynomial_free(pwqp); - - return 0; -} - -static __isl_give isl_printer *print_union_pw_qpolynomial_isl( - __isl_take isl_printer *p, __isl_keep isl_union_pw_qpolynomial *upwqp) -{ - struct isl_union_print_data data = { p, 1, 1 }; - isl_dim *dim; - dim = isl_union_pw_qpolynomial_get_dim(upwqp); - if (isl_dim_size(dim, isl_dim_param) > 0) { - p = print_tuple(dim, p, isl_dim_param, 1, 0, NULL); - p = isl_printer_print_str(p, " -> "); - } - isl_dim_free(dim); - p = isl_printer_print_str(p, "{ "); - isl_union_pw_qpolynomial_foreach_pw_qpolynomial(upwqp, &print_pwqp_body, - &data); - p = data.p; - p = isl_printer_print_str(p, " }"); - return p; -} - -__isl_give isl_printer *isl_printer_print_union_pw_qpolynomial( - __isl_take isl_printer *p, __isl_keep isl_union_pw_qpolynomial *upwqp) -{ - if (!p || !upwqp) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_union_pw_qpolynomial_isl(p, upwqp); - isl_die(p->ctx, isl_error_invalid, - "invalid output format for isl_union_pw_qpolynomial", - goto error); -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_qpolynomial_fold_c( - __isl_take isl_printer *p, __isl_keep isl_dim *dim, - __isl_keep isl_qpolynomial_fold *fold) -{ - int i; - - for (i = 0; i < fold->n - 1; ++i) - if (fold->type == isl_fold_min) - p = isl_printer_print_str(p, "min("); - else if (fold->type == isl_fold_max) - p = isl_printer_print_str(p, "max("); - - for (i = 0; i < fold->n; ++i) { - if (i) - p = isl_printer_print_str(p, ", "); - p = print_qpolynomial_c(p, dim, fold->qp[i]); - if (i) - p = isl_printer_print_str(p, ")"); - } - return p; -} - -__isl_give isl_printer *isl_printer_print_qpolynomial_fold( - __isl_take isl_printer *p, __isl_keep isl_qpolynomial_fold *fold) -{ - if (!p || !fold) - goto error; - if (p->output_format == ISL_FORMAT_ISL) - return qpolynomial_fold_print(fold, p); - else if (p->output_format == ISL_FORMAT_C) - return print_qpolynomial_fold_c(p, fold->dim, fold); - isl_die(p->ctx, isl_error_unsupported, "unsupported output format", - goto error); -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_pw_qpolynomial_fold_c( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial_fold *pwf) -{ - int i; - - if (pwf->n == 1 && isl_set_plain_is_universe(pwf->p[0].set)) - return print_qpolynomial_fold_c(p, pwf->dim, pwf->p[0].fold); - - for (i = 0; i < pwf->n; ++i) { - p = isl_printer_print_str(p, "("); - p = print_set_c(p, pwf->dim, pwf->p[i].set); - p = isl_printer_print_str(p, ") ? ("); - p = print_qpolynomial_fold_c(p, pwf->dim, pwf->p[i].fold); - p = isl_printer_print_str(p, ") : "); - } - - p = isl_printer_print_str(p, "0"); - return p; -} - -__isl_give isl_printer *isl_printer_print_pw_qpolynomial_fold( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial_fold *pwf) -{ - if (!p || !pwf) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_pw_qpolynomial_fold_isl(p, pwf); - else if (p->output_format == ISL_FORMAT_C) - return print_pw_qpolynomial_fold_c(p, pwf); - isl_assert(p->ctx, 0, goto error); -error: - isl_printer_free(p); - return NULL; -} - -void isl_pw_qpolynomial_fold_print(__isl_keep isl_pw_qpolynomial_fold *pwf, - FILE *out, unsigned output_format) -{ - isl_printer *p; - - if (!pwf) - return; - - p = isl_printer_to_file(pwf->dim->ctx, out); - p = isl_printer_set_output_format(p, output_format); - p = isl_printer_print_pw_qpolynomial_fold(p, pwf); - - isl_printer_free(p); -} - -static int print_pwf_body(__isl_take isl_pw_qpolynomial_fold *pwf, void *user) -{ - struct isl_union_print_data *data; - data = (struct isl_union_print_data *)user; - - if (!data->first) - data->p = isl_printer_print_str(data->p, "; "); - data->first = 0; - - data->p = isl_pwf_print_isl_body(data->p, pwf); - isl_pw_qpolynomial_fold_free(pwf); - - return 0; -} - -static __isl_give isl_printer *print_union_pw_qpolynomial_fold_isl( - __isl_take isl_printer *p, - __isl_keep isl_union_pw_qpolynomial_fold *upwf) -{ - struct isl_union_print_data data = { p, 1, 1 }; - isl_dim *dim; - dim = isl_union_pw_qpolynomial_fold_get_dim(upwf); - if (isl_dim_size(dim, isl_dim_param) > 0) { - p = print_tuple(dim, p, isl_dim_param, 1, 0, NULL); - p = isl_printer_print_str(p, " -> "); - } - isl_dim_free(dim); - p = isl_printer_print_str(p, "{ "); - isl_union_pw_qpolynomial_fold_foreach_pw_qpolynomial_fold(upwf, - &print_pwf_body, &data); - p = data.p; - p = isl_printer_print_str(p, " }"); - return p; -} - -__isl_give isl_printer *isl_printer_print_union_pw_qpolynomial_fold( - __isl_take isl_printer *p, - __isl_keep isl_union_pw_qpolynomial_fold *upwf) -{ - if (!p || !upwf) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_union_pw_qpolynomial_fold_isl(p, upwf); - isl_die(p->ctx, isl_error_invalid, - "invalid output format for isl_union_pw_qpolynomial_fold", - goto error); -error: - isl_printer_free(p); - return NULL; -} - -__isl_give isl_printer *isl_printer_print_constraint(__isl_take isl_printer *p, - __isl_keep isl_constraint *c) -{ - isl_basic_map *bmap; - - if (!p || !c) - goto error; - - bmap = isl_basic_map_from_constraint(isl_constraint_copy(c)); - p = isl_printer_print_basic_map(p, bmap); - isl_basic_map_free(bmap); - return p; -error: - isl_printer_free(p); - return NULL; -} - -void isl_constraint_dump(__isl_keep isl_constraint *c) -{ - isl_printer *printer; - - if (!c) - return; - - printer = isl_printer_to_file(isl_constraint_get_ctx(c), stderr); - printer = isl_printer_print_constraint(printer, c); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -__isl_give isl_printer *isl_printer_print_dim(__isl_take isl_printer *p, - __isl_keep isl_dim *dim) -{ - if (!dim) - goto error; - - if (isl_dim_size(dim, isl_dim_param) > 0) { - p = print_tuple(dim, p, isl_dim_param, 0, 0, NULL); - p = isl_printer_print_str(p, " -> "); - } - - p = isl_printer_print_str(p, "{ "); - p = print_tuple(dim, p, isl_dim_in, 0, 0, NULL); - p = isl_printer_print_str(p, " -> "); - p = print_tuple(dim, p, isl_dim_out, 0, 0, NULL); - p = isl_printer_print_str(p, " }"); - - return p; -error: - isl_printer_free(p); - return NULL; -} - -void isl_dim_dump(__isl_keep isl_dim *dim) -{ - isl_printer *printer; - - if (!dim) - return; - - printer = isl_printer_to_file(isl_dim_get_ctx(dim), stderr); - printer = isl_printer_print_dim(printer, dim); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -__isl_give isl_printer *isl_printer_print_local_space(__isl_take isl_printer *p, - __isl_keep isl_local_space *ls) -{ - unsigned total; - unsigned n_div; - - if (!ls) - goto error; - - total = isl_local_space_dim(ls, isl_dim_all); - if (isl_local_space_dim(ls, isl_dim_param) > 0) { - p = print_tuple(ls->dim, p, isl_dim_param, 0, 0, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - p = print_tuple(ls->dim, p, isl_dim_in, 0, 0, NULL); - p = isl_printer_print_str(p, " -> "); - p = print_tuple(ls->dim, p, isl_dim_out, 0, 0, NULL); - n_div = isl_local_space_dim(ls, isl_dim_div); - if (n_div > 0) { - int i; - p = isl_printer_print_str(p, " : "); - p = isl_printer_print_str(p, s_open_exists[0]); - for (i = 0; i < n_div; ++i) { - if (i) - p = isl_printer_print_str(p, ", "); - p = print_name(ls->dim, p, isl_dim_div, i, 0, 0); - if (isl_int_is_zero(ls->div->row[i][0])) - continue; - p = isl_printer_print_str(p, " = [("); - p = print_affine_of_len(ls->dim, ls->div, p, - ls->div->row[i] + 1, 1 + total, 0); - p = isl_printer_print_str(p, ")/"); - p = isl_printer_print_isl_int(p, ls->div->row[i][0]); - p = isl_printer_print_str(p, "]"); - } - } - p = isl_printer_print_str(p, " }"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -void isl_local_space_dump(__isl_keep isl_local_space *ls) -{ - isl_printer *printer; - - if (!ls) - return; - - printer = isl_printer_to_file(isl_local_space_get_ctx(ls), stderr); - printer = isl_printer_print_local_space(printer, ls); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -static __isl_give isl_printer *print_aff(__isl_take isl_printer *p, - __isl_keep isl_aff *aff) -{ - unsigned total; - - total = isl_local_space_dim(aff->ls, isl_dim_all); - p = print_tuple(aff->ls->dim, p, isl_dim_set, 1, 0, NULL); - p = isl_printer_print_str(p, " -> ["); - p = isl_printer_print_str(p, "("); - p = print_affine_of_len(aff->ls->dim, aff->ls->div, p, - aff->v->el + 1, 1 + total, 1); - if (isl_int_is_one(aff->v->el[0])) - p = isl_printer_print_str(p, ")"); - else { - p = isl_printer_print_str(p, ")/"); - p = isl_printer_print_isl_int(p, aff->v->el[0]); - } - p = isl_printer_print_str(p, "]"); - - return p; -} - -static __isl_give isl_printer *print_aff_isl(__isl_take isl_printer *p, - __isl_keep isl_aff *aff) -{ - if (!aff) - goto error; - - if (isl_local_space_dim(aff->ls, isl_dim_param) > 0) { - p = print_tuple(aff->ls->dim, p, isl_dim_param, 0, 0, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - p = print_aff(p, aff); - p = isl_printer_print_str(p, " }"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -void isl_aff_dump(__isl_keep isl_aff *aff) -{ - isl_printer *printer; - - if (!aff) - return; - - printer = isl_printer_to_file(isl_aff_get_ctx(aff), stderr); - printer = isl_printer_print_aff(printer, aff); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -static __isl_give isl_printer *print_pw_aff_isl(__isl_take isl_printer *p, - __isl_keep isl_pw_aff *pwaff) -{ - int i; - - if (!pwaff) - goto error; - - if (isl_dim_size(pwaff->dim, isl_dim_param) > 0) { - p = print_tuple(pwaff->dim, p, isl_dim_param, 0, 0, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - for (i = 0; i < pwaff->n; ++i) { - if (i) - p = isl_printer_print_str(p, "; "); - p = print_aff(p, pwaff->p[i].aff); - p = print_disjuncts((isl_map *)pwaff->p[i].set, p, 1, 0); - } - p = isl_printer_print_str(p, " }"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_ls_affine_c(__isl_take isl_printer *p, - __isl_keep isl_local_space *ls, isl_int *c); - -static __isl_give isl_printer *print_ls_name_c(__isl_take isl_printer *p, - __isl_keep isl_local_space *ls, enum isl_dim_type type, unsigned pos) -{ - if (type == isl_dim_div) { - p = isl_printer_print_str(p, "floord("); - p = print_ls_affine_c(p, ls, ls->div->row[pos] + 1); - p = isl_printer_print_str(p, ", "); - p = isl_printer_print_isl_int(p, ls->div->row[pos][0]); - p = isl_printer_print_str(p, ")"); - } else { - const char *name; - - name = isl_dim_get_name(ls->dim, type, pos); - if (!name) - name = "UNNAMED"; - p = isl_printer_print_str(p, name); - } - return p; -} - -static __isl_give isl_printer *print_ls_term_c(__isl_take isl_printer *p, - __isl_keep isl_local_space *ls, isl_int c, unsigned pos) -{ - enum isl_dim_type type; - - if (pos == 0) - return isl_printer_print_isl_int(p, c); - - if (isl_int_is_one(c)) - ; - else if (isl_int_is_negone(c)) - p = isl_printer_print_str(p, "-"); - else { - p = isl_printer_print_isl_int(p, c); - p = isl_printer_print_str(p, "*"); - } - type = pos2type(ls->dim, &pos); - p = print_ls_name_c(p, ls, type, pos); - return p; -} - -static __isl_give isl_printer *print_ls_partial_affine_c( - __isl_take isl_printer *p, __isl_keep isl_local_space *ls, - isl_int *c, unsigned len) -{ - int i; - int first; - - for (i = 0, first = 1; i < len; ++i) { - int flip = 0; - if (isl_int_is_zero(c[i])) - continue; - if (!first) { - if (isl_int_is_neg(c[i])) { - flip = 1; - isl_int_neg(c[i], c[i]); - p = isl_printer_print_str(p, " - "); - } else - p = isl_printer_print_str(p, " + "); - } - first = 0; - p = print_ls_term_c(p, ls, c[i], i); - if (flip) - isl_int_neg(c[i], c[i]); - } - if (first) - p = isl_printer_print_str(p, "0"); - return p; -} - -static __isl_give isl_printer *print_ls_affine_c(__isl_take isl_printer *p, - __isl_keep isl_local_space *ls, isl_int *c) -{ - unsigned len = 1 + isl_local_space_dim(ls, isl_dim_all); - return print_ls_partial_affine_c(p, ls, c, len); -} - -static __isl_give isl_printer *print_aff_c(__isl_take isl_printer *p, - __isl_keep isl_aff *aff) -{ - unsigned total; - - total = isl_local_space_dim(aff->ls, isl_dim_all); - p = isl_printer_print_str(p, "("); - p = print_ls_partial_affine_c(p, aff->ls, aff->v->el + 1, 1 + total); - if (isl_int_is_one(aff->v->el[0])) - p = isl_printer_print_str(p, ")"); - else { - p = isl_printer_print_str(p, ")/"); - p = isl_printer_print_isl_int(p, aff->v->el[0]); - } - return p; -} - -static __isl_give isl_printer *print_pw_aff_c(__isl_take isl_printer *p, - __isl_keep isl_pw_aff *pwaff) -{ - int i; - - if (pwaff->n < 1) - isl_die(p->ctx, isl_error_unsupported, - "cannot print empty isl_pw_aff in C format", goto error); - - for (i = 0; i < pwaff->n - 1; ++i) { - p = isl_printer_print_str(p, "("); - p = print_set_c(p, pwaff->dim, pwaff->p[i].set); - p = isl_printer_print_str(p, ") ? ("); - p = print_aff_c(p, pwaff->p[i].aff); - p = isl_printer_print_str(p, ") : "); - } - - return print_aff_c(p, pwaff->p[pwaff->n - 1].aff); -error: - isl_printer_free(p); - return NULL; -} - -__isl_give isl_printer *isl_printer_print_aff(__isl_take isl_printer *p, - __isl_keep isl_aff *aff) -{ - if (!p || !aff) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_aff_isl(p, aff); - else if (p->output_format == ISL_FORMAT_C) - return print_aff_c(p, aff); - isl_die(p->ctx, isl_error_unsupported, "unsupported output format", - goto error); -error: - isl_printer_free(p); - return NULL; -} - -__isl_give isl_printer *isl_printer_print_pw_aff(__isl_take isl_printer *p, - __isl_keep isl_pw_aff *pwaff) -{ - if (!p || !pwaff) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_pw_aff_isl(p, pwaff); - else if (p->output_format == ISL_FORMAT_C) - return print_pw_aff_c(p, pwaff); - isl_die(p->ctx, isl_error_unsupported, "unsupported output format", - goto error); -error: - isl_printer_free(p); - return NULL; -} - -void isl_pw_aff_dump(__isl_keep isl_pw_aff *pwaff) -{ - isl_printer *printer; - - if (!pwaff) - return; - - printer = isl_printer_to_file(isl_pw_aff_get_ctx(pwaff), stderr); - printer = isl_printer_print_pw_aff(printer, pwaff); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} diff --git a/cloog-0.16.3/isl/isl_piplib.c b/cloog-0.16.3/isl/isl_piplib.c deleted file mode 100644 index e33b981..0000000 --- a/cloog-0.16.3/isl/isl_piplib.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include "isl_piplib.h" - -void isl_seq_cpy_to_pip(Entier *dst, isl_int *src, unsigned len) -{ - int i; - - for (i = 0; i < len; ++i) - entier_assign(dst[i], src[i]); -} - -void isl_seq_cpy_from_pip(isl_int *dst, Entier *src, unsigned len) -{ - int i; - - for (i = 0; i < len; ++i) - entier_assign(dst[i], src[i]); -} diff --git a/cloog-0.16.3/isl/isl_piplib.h b/cloog-0.16.3/isl/isl_piplib.h deleted file mode 100644 index 8408770..0000000 --- a/cloog-0.16.3/isl/isl_piplib.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_PIPLIB_H -#define ISL_PIPLIB_H - -#include -#include -#include -#ifndef ISL_PIPLIB -#error "no piplib" -#endif - -#include - -void isl_seq_cpy_to_pip(Entier *dst, isl_int *src, unsigned len); -void isl_seq_cpy_from_pip(isl_int *dst, Entier *src, unsigned len); - -PipMatrix *isl_basic_map_to_pip(struct isl_basic_map *bmap, unsigned pip_param, - unsigned extra_front, unsigned extra_back); - -#endif diff --git a/cloog-0.16.3/isl/isl_point.c b/cloog-0.16.3/isl/isl_point.c deleted file mode 100644 index e840162..0000000 --- a/cloog-0.16.3/isl/isl_point.c +++ /dev/null @@ -1,488 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -isl_ctx *isl_point_get_ctx(__isl_keep isl_point *pnt) -{ - return pnt ? isl_dim_get_ctx(pnt->dim) : NULL; -} - -__isl_give isl_dim *isl_point_get_dim(__isl_keep isl_point *pnt) -{ - return pnt ? isl_dim_copy(pnt->dim) : NULL; -} - -__isl_give isl_point *isl_point_alloc(__isl_take isl_dim *dim, - __isl_take isl_vec *vec) -{ - struct isl_point *pnt; - - if (!dim || !vec) - goto error; - - if (vec->size > 1 + isl_dim_total(dim)) { - vec = isl_vec_cow(vec); - if (!vec) - goto error; - vec->size = 1 + isl_dim_total(dim); - } - - pnt = isl_alloc_type(dim->ctx, struct isl_point); - if (!pnt) - goto error; - - pnt->ref = 1; - pnt->dim = dim; - pnt->vec = vec; - - return pnt; -error: - isl_dim_free(dim); - isl_vec_free(vec); - return NULL; -} - -__isl_give isl_point *isl_point_zero(__isl_take isl_dim *dim) -{ - isl_vec *vec; - - if (!dim) - return NULL; - vec = isl_vec_alloc(dim->ctx, 1 + isl_dim_total(dim)); - if (!vec) - goto error; - isl_int_set_si(vec->el[0], 1); - isl_seq_clr(vec->el + 1, vec->size - 1); - return isl_point_alloc(dim, vec); -error: - isl_dim_free(dim); - return NULL; -} - -__isl_give isl_point *isl_point_dup(__isl_keep isl_point *pnt) -{ - struct isl_point *pnt2; - - if (!pnt) - return NULL; - pnt2 = isl_point_alloc(isl_dim_copy(pnt->dim), isl_vec_copy(pnt->vec)); - return pnt2; -} - -__isl_give isl_point *isl_point_cow(__isl_take isl_point *pnt) -{ - struct isl_point *pnt2; - if (!pnt) - return NULL; - - if (pnt->ref == 1) - return pnt; - - pnt2 = isl_point_dup(pnt); - isl_point_free(pnt); - return pnt2; -} - -__isl_give isl_point *isl_point_copy(__isl_keep isl_point *pnt) -{ - if (!pnt) - return NULL; - - pnt->ref++; - return pnt; -} - -void isl_point_free(__isl_take isl_point *pnt) -{ - if (!pnt) - return; - - if (--pnt->ref > 0) - return; - - isl_dim_free(pnt->dim); - isl_vec_free(pnt->vec); - free(pnt); -} - -__isl_give isl_point *isl_point_void(__isl_take isl_dim *dim) -{ - if (!dim) - return NULL; - - return isl_point_alloc(dim, isl_vec_alloc(dim->ctx, 0)); -} - -int isl_point_is_void(__isl_keep isl_point *pnt) -{ - if (!pnt) - return -1; - - return pnt->vec->size == 0; -} - -void isl_point_get_coordinate(__isl_keep isl_point *pnt, - enum isl_dim_type type, int pos, isl_int *v) -{ - if (!pnt || isl_point_is_void(pnt)) - return; - if (type == isl_dim_set) - pos += isl_dim_size(pnt->dim, isl_dim_param); - isl_int_set(*v, pnt->vec->el[1 + pos]); -} - -__isl_give isl_point *isl_point_set_coordinate(__isl_take isl_point *pnt, - enum isl_dim_type type, int pos, isl_int v) -{ - if (!pnt || isl_point_is_void(pnt)) - return pnt; - - pnt = isl_point_cow(pnt); - if (!pnt) - return NULL; - pnt->vec = isl_vec_cow(pnt->vec); - if (!pnt->vec) - goto error; - - if (type == isl_dim_set) - pos += isl_dim_size(pnt->dim, isl_dim_param); - - isl_int_set(pnt->vec->el[1 + pos], v); - - return pnt; -error: - isl_point_free(pnt); - return NULL; -} - -__isl_give isl_point *isl_point_add_ui(__isl_take isl_point *pnt, - enum isl_dim_type type, int pos, unsigned val) -{ - if (!pnt || isl_point_is_void(pnt)) - return pnt; - - pnt = isl_point_cow(pnt); - if (!pnt) - return NULL; - pnt->vec = isl_vec_cow(pnt->vec); - if (!pnt->vec) - goto error; - - if (type == isl_dim_set) - pos += isl_dim_size(pnt->dim, isl_dim_param); - - isl_int_add_ui(pnt->vec->el[1 + pos], pnt->vec->el[1 + pos], val); - - return pnt; -error: - isl_point_free(pnt); - return NULL; -} - -__isl_give isl_point *isl_point_sub_ui(__isl_take isl_point *pnt, - enum isl_dim_type type, int pos, unsigned val) -{ - if (!pnt || isl_point_is_void(pnt)) - return pnt; - - pnt = isl_point_cow(pnt); - if (!pnt) - return NULL; - pnt->vec = isl_vec_cow(pnt->vec); - if (!pnt->vec) - goto error; - - if (type == isl_dim_set) - pos += isl_dim_size(pnt->dim, isl_dim_param); - - isl_int_sub_ui(pnt->vec->el[1 + pos], pnt->vec->el[1 + pos], val); - - return pnt; -error: - isl_point_free(pnt); - return NULL; -} - -struct isl_foreach_point { - struct isl_scan_callback callback; - int (*fn)(__isl_take isl_point *pnt, void *user); - void *user; - isl_dim *dim; -}; - -static int foreach_point(struct isl_scan_callback *cb, __isl_take isl_vec *sample) -{ - struct isl_foreach_point *fp = (struct isl_foreach_point *)cb; - isl_point *pnt; - - pnt = isl_point_alloc(isl_dim_copy(fp->dim), sample); - - return fp->fn(pnt, fp->user); -} - -int isl_set_foreach_point(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_point *pnt, void *user), void *user) -{ - struct isl_foreach_point fp = { { &foreach_point }, fn, user }; - int i; - - if (!set) - return -1; - - fp.dim = isl_set_get_dim(set); - if (!fp.dim) - return -1; - - set = isl_set_copy(set); - set = isl_set_cow(set); - set = isl_set_make_disjoint(set); - set = isl_set_compute_divs(set); - if (!set) - goto error; - - for (i = 0; i < set->n; ++i) - if (isl_basic_set_scan(isl_basic_set_copy(set->p[i]), - &fp.callback) < 0) - goto error; - - isl_set_free(set); - isl_dim_free(fp.dim); - - return 0; -error: - isl_set_free(set); - isl_dim_free(fp.dim); - return -1; -} - -/* Return 1 if "bmap" contains the point "point". - * "bmap" is assumed to have known divs. - * The point is first extended with the divs and then passed - * to basic_map_contains. - */ -int isl_basic_map_contains_point(__isl_keep isl_basic_map *bmap, - __isl_keep isl_point *point) -{ - int i; - struct isl_vec *vec; - unsigned dim; - int contains; - - if (!bmap || !point) - return -1; - isl_assert(bmap->ctx, isl_dim_equal(bmap->dim, point->dim), return -1); - if (bmap->n_div == 0) - return isl_basic_map_contains(bmap, point->vec); - - dim = isl_basic_map_total_dim(bmap) - bmap->n_div; - vec = isl_vec_alloc(bmap->ctx, 1 + dim + bmap->n_div); - if (!vec) - return -1; - - isl_seq_cpy(vec->el, point->vec->el, point->vec->size); - for (i = 0; i < bmap->n_div; ++i) { - isl_seq_inner_product(bmap->div[i] + 1, vec->el, - 1 + dim + i, &vec->el[1+dim+i]); - isl_int_fdiv_q(vec->el[1+dim+i], vec->el[1+dim+i], - bmap->div[i][0]); - } - - contains = isl_basic_map_contains(bmap, vec); - - isl_vec_free(vec); - return contains; -} - -int isl_map_contains_point(__isl_keep isl_map *map, __isl_keep isl_point *point) -{ - int i; - int found = 0; - - if (!map || !point) - return -1; - - map = isl_map_copy(map); - map = isl_map_compute_divs(map); - if (!map) - return -1; - - for (i = 0; i < map->n; ++i) { - found = isl_basic_map_contains_point(map->p[i], point); - if (found < 0) - goto error; - if (found) - break; - } - isl_map_free(map); - - return found; -error: - isl_map_free(map); - return -1; -} - -int isl_set_contains_point(__isl_keep isl_set *set, __isl_keep isl_point *point) -{ - return isl_map_contains_point((isl_map *)set, point); -} - -__isl_give isl_basic_set *isl_basic_set_from_point(__isl_take isl_point *pnt) -{ - isl_basic_set *bset; - isl_basic_set *model; - - model = isl_basic_set_empty(isl_dim_copy(pnt->dim)); - bset = isl_basic_set_from_vec(isl_vec_copy(pnt->vec)); - bset = isl_basic_set_from_underlying_set(bset, model); - isl_point_free(pnt); - - return bset; -} - -__isl_give isl_set *isl_set_from_point(__isl_take isl_point *pnt) -{ - isl_basic_set *bset; - bset = isl_basic_set_from_point(pnt); - return isl_set_from_basic_set(bset); -} - -__isl_give isl_basic_set *isl_basic_set_box_from_points( - __isl_take isl_point *pnt1, __isl_take isl_point *pnt2) -{ - isl_basic_set *bset; - unsigned total; - int i; - int k; - isl_int t; - - isl_int_init(t); - - if (!pnt1 || !pnt2) - goto error; - - isl_assert(pnt1->dim->ctx, - isl_dim_equal(pnt1->dim, pnt2->dim), goto error); - - if (isl_point_is_void(pnt1) && isl_point_is_void(pnt2)) { - isl_dim *dim = isl_dim_copy(pnt1->dim); - isl_point_free(pnt1); - isl_point_free(pnt2); - isl_int_clear(t); - return isl_basic_set_empty(dim); - } - if (isl_point_is_void(pnt1)) { - isl_point_free(pnt1); - isl_int_clear(t); - return isl_basic_set_from_point(pnt2); - } - if (isl_point_is_void(pnt2)) { - isl_point_free(pnt2); - isl_int_clear(t); - return isl_basic_set_from_point(pnt1); - } - - total = isl_dim_total(pnt1->dim); - bset = isl_basic_set_alloc_dim(isl_dim_copy(pnt1->dim), 0, 0, 2 * total); - - for (i = 0; i < total; ++i) { - isl_int_mul(t, pnt1->vec->el[1 + i], pnt2->vec->el[0]); - isl_int_submul(t, pnt2->vec->el[1 + i], pnt1->vec->el[0]); - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_clr(bset->ineq[k] + 1, total); - if (isl_int_is_pos(t)) { - isl_int_set_si(bset->ineq[k][1 + i], -1); - isl_int_set(bset->ineq[k][0], pnt1->vec->el[1 + i]); - } else { - isl_int_set_si(bset->ineq[k][1 + i], 1); - isl_int_neg(bset->ineq[k][0], pnt1->vec->el[1 + i]); - } - isl_int_fdiv_q(bset->ineq[k][0], bset->ineq[k][0], pnt1->vec->el[0]); - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_clr(bset->ineq[k] + 1, total); - if (isl_int_is_pos(t)) { - isl_int_set_si(bset->ineq[k][1 + i], 1); - isl_int_neg(bset->ineq[k][0], pnt2->vec->el[1 + i]); - } else { - isl_int_set_si(bset->ineq[k][1 + i], -1); - isl_int_set(bset->ineq[k][0], pnt2->vec->el[1 + i]); - } - isl_int_fdiv_q(bset->ineq[k][0], bset->ineq[k][0], pnt2->vec->el[0]); - } - - bset = isl_basic_set_finalize(bset); - - isl_point_free(pnt1); - isl_point_free(pnt2); - - isl_int_clear(t); - - return bset; -error: - isl_point_free(pnt1); - isl_point_free(pnt2); - isl_int_clear(t); - return NULL; -} - -__isl_give isl_set *isl_set_box_from_points(__isl_take isl_point *pnt1, - __isl_take isl_point *pnt2) -{ - isl_basic_set *bset; - bset = isl_basic_set_box_from_points(pnt1, pnt2); - return isl_set_from_basic_set(bset); -} - -void isl_point_print(__isl_keep isl_point *pnt, FILE *out) -{ - int i; - unsigned nparam; - unsigned dim; - - if (!pnt) - return; - if (isl_point_is_void(pnt)) { - fprintf(out, "void\n"); - return; - } - - nparam = isl_dim_size(pnt->dim, isl_dim_param); - dim = isl_dim_size(pnt->dim, isl_dim_set); - if (nparam > 0) { - fprintf(out, "["); - for (i = 0; i < nparam; ++i) { - const char *name; - if (i) - fprintf(out, ", "); - name = isl_dim_get_name(pnt->dim, isl_dim_param, i); - if (name) - fprintf(out, "%s = ", name); - isl_int_print(out, pnt->vec->el[1 + i], 0); - if (!isl_int_is_one(pnt->vec->el[0])) { - fprintf(out, "/"); - isl_int_print(out, pnt->vec->el[0], 0); - } - } - fprintf(out, "] -> "); - } - fprintf(out, "["); - for (i = 0; i < dim; ++i) { - if (i) - fprintf(out, ", "); - isl_int_print(out, pnt->vec->el[1 + nparam + i], 0); - if (!isl_int_is_one(pnt->vec->el[0])) { - fprintf(out, "/"); - isl_int_print(out, pnt->vec->el[0], 0); - } - } - fprintf(out, "]\n"); -} diff --git a/cloog-0.16.3/isl/isl_point_private.h b/cloog-0.16.3/isl/isl_point_private.h deleted file mode 100644 index 327f55f..0000000 --- a/cloog-0.16.3/isl/isl_point_private.h +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include -#include - -struct isl_point { - int ref; - struct isl_dim *dim; - struct isl_vec *vec; -}; - -__isl_give isl_point *isl_point_alloc(__isl_take isl_dim *dim, - __isl_take isl_vec *vec); diff --git a/cloog-0.16.3/isl/isl_polynomial.c b/cloog-0.16.3/isl/isl_polynomial.c deleted file mode 100644 index 524aa6f..0000000 --- a/cloog-0.16.3/isl/isl_polynomial.c +++ /dev/null @@ -1,4624 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static unsigned pos(__isl_keep isl_dim *dim, enum isl_dim_type type) -{ - switch (type) { - case isl_dim_param: return 0; - case isl_dim_in: return dim->nparam; - case isl_dim_out: return dim->nparam + dim->n_in; - default: return 0; - } -} - -int isl_upoly_is_cst(__isl_keep struct isl_upoly *up) -{ - if (!up) - return -1; - - return up->var < 0; -} - -__isl_keep struct isl_upoly_cst *isl_upoly_as_cst(__isl_keep struct isl_upoly *up) -{ - if (!up) - return NULL; - - isl_assert(up->ctx, up->var < 0, return NULL); - - return (struct isl_upoly_cst *)up; -} - -__isl_keep struct isl_upoly_rec *isl_upoly_as_rec(__isl_keep struct isl_upoly *up) -{ - if (!up) - return NULL; - - isl_assert(up->ctx, up->var >= 0, return NULL); - - return (struct isl_upoly_rec *)up; -} - -int isl_upoly_is_equal(__isl_keep struct isl_upoly *up1, - __isl_keep struct isl_upoly *up2) -{ - int i; - struct isl_upoly_rec *rec1, *rec2; - - if (!up1 || !up2) - return -1; - if (up1 == up2) - return 1; - if (up1->var != up2->var) - return 0; - if (isl_upoly_is_cst(up1)) { - struct isl_upoly_cst *cst1, *cst2; - cst1 = isl_upoly_as_cst(up1); - cst2 = isl_upoly_as_cst(up2); - if (!cst1 || !cst2) - return -1; - return isl_int_eq(cst1->n, cst2->n) && - isl_int_eq(cst1->d, cst2->d); - } - - rec1 = isl_upoly_as_rec(up1); - rec2 = isl_upoly_as_rec(up2); - if (!rec1 || !rec2) - return -1; - - if (rec1->n != rec2->n) - return 0; - - for (i = 0; i < rec1->n; ++i) { - int eq = isl_upoly_is_equal(rec1->p[i], rec2->p[i]); - if (eq < 0 || !eq) - return eq; - } - - return 1; -} - -int isl_upoly_is_zero(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - - if (!up) - return -1; - if (!isl_upoly_is_cst(up)) - return 0; - - cst = isl_upoly_as_cst(up); - if (!cst) - return -1; - - return isl_int_is_zero(cst->n) && isl_int_is_pos(cst->d); -} - -int isl_upoly_sgn(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - - if (!up) - return 0; - if (!isl_upoly_is_cst(up)) - return 0; - - cst = isl_upoly_as_cst(up); - if (!cst) - return 0; - - return isl_int_sgn(cst->n); -} - -int isl_upoly_is_nan(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - - if (!up) - return -1; - if (!isl_upoly_is_cst(up)) - return 0; - - cst = isl_upoly_as_cst(up); - if (!cst) - return -1; - - return isl_int_is_zero(cst->n) && isl_int_is_zero(cst->d); -} - -int isl_upoly_is_infty(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - - if (!up) - return -1; - if (!isl_upoly_is_cst(up)) - return 0; - - cst = isl_upoly_as_cst(up); - if (!cst) - return -1; - - return isl_int_is_pos(cst->n) && isl_int_is_zero(cst->d); -} - -int isl_upoly_is_neginfty(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - - if (!up) - return -1; - if (!isl_upoly_is_cst(up)) - return 0; - - cst = isl_upoly_as_cst(up); - if (!cst) - return -1; - - return isl_int_is_neg(cst->n) && isl_int_is_zero(cst->d); -} - -int isl_upoly_is_one(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - - if (!up) - return -1; - if (!isl_upoly_is_cst(up)) - return 0; - - cst = isl_upoly_as_cst(up); - if (!cst) - return -1; - - return isl_int_eq(cst->n, cst->d) && isl_int_is_pos(cst->d); -} - -int isl_upoly_is_negone(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - - if (!up) - return -1; - if (!isl_upoly_is_cst(up)) - return 0; - - cst = isl_upoly_as_cst(up); - if (!cst) - return -1; - - return isl_int_is_negone(cst->n) && isl_int_is_one(cst->d); -} - -__isl_give struct isl_upoly_cst *isl_upoly_cst_alloc(struct isl_ctx *ctx) -{ - struct isl_upoly_cst *cst; - - cst = isl_alloc_type(ctx, struct isl_upoly_cst); - if (!cst) - return NULL; - - cst->up.ref = 1; - cst->up.ctx = ctx; - isl_ctx_ref(ctx); - cst->up.var = -1; - - isl_int_init(cst->n); - isl_int_init(cst->d); - - return cst; -} - -__isl_give struct isl_upoly *isl_upoly_zero(struct isl_ctx *ctx) -{ - struct isl_upoly_cst *cst; - - cst = isl_upoly_cst_alloc(ctx); - if (!cst) - return NULL; - - isl_int_set_si(cst->n, 0); - isl_int_set_si(cst->d, 1); - - return &cst->up; -} - -__isl_give struct isl_upoly *isl_upoly_one(struct isl_ctx *ctx) -{ - struct isl_upoly_cst *cst; - - cst = isl_upoly_cst_alloc(ctx); - if (!cst) - return NULL; - - isl_int_set_si(cst->n, 1); - isl_int_set_si(cst->d, 1); - - return &cst->up; -} - -__isl_give struct isl_upoly *isl_upoly_infty(struct isl_ctx *ctx) -{ - struct isl_upoly_cst *cst; - - cst = isl_upoly_cst_alloc(ctx); - if (!cst) - return NULL; - - isl_int_set_si(cst->n, 1); - isl_int_set_si(cst->d, 0); - - return &cst->up; -} - -__isl_give struct isl_upoly *isl_upoly_neginfty(struct isl_ctx *ctx) -{ - struct isl_upoly_cst *cst; - - cst = isl_upoly_cst_alloc(ctx); - if (!cst) - return NULL; - - isl_int_set_si(cst->n, -1); - isl_int_set_si(cst->d, 0); - - return &cst->up; -} - -__isl_give struct isl_upoly *isl_upoly_nan(struct isl_ctx *ctx) -{ - struct isl_upoly_cst *cst; - - cst = isl_upoly_cst_alloc(ctx); - if (!cst) - return NULL; - - isl_int_set_si(cst->n, 0); - isl_int_set_si(cst->d, 0); - - return &cst->up; -} - -__isl_give struct isl_upoly *isl_upoly_rat_cst(struct isl_ctx *ctx, - isl_int n, isl_int d) -{ - struct isl_upoly_cst *cst; - - cst = isl_upoly_cst_alloc(ctx); - if (!cst) - return NULL; - - isl_int_set(cst->n, n); - isl_int_set(cst->d, d); - - return &cst->up; -} - -__isl_give struct isl_upoly_rec *isl_upoly_alloc_rec(struct isl_ctx *ctx, - int var, int size) -{ - struct isl_upoly_rec *rec; - - isl_assert(ctx, var >= 0, return NULL); - isl_assert(ctx, size >= 0, return NULL); - rec = isl_calloc(ctx, struct isl_upoly_rec, - sizeof(struct isl_upoly_rec) + - size * sizeof(struct isl_upoly *)); - if (!rec) - return NULL; - - rec->up.ref = 1; - rec->up.ctx = ctx; - isl_ctx_ref(ctx); - rec->up.var = var; - - rec->n = 0; - rec->size = size; - - return rec; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_reset_dim( - __isl_take isl_qpolynomial *qp, __isl_take isl_dim *dim) -{ - qp = isl_qpolynomial_cow(qp); - if (!qp || !dim) - goto error; - - isl_dim_free(qp->dim); - qp->dim = dim; - - return qp; -error: - isl_qpolynomial_free(qp); - isl_dim_free(dim); - return NULL; -} - -isl_ctx *isl_qpolynomial_get_ctx(__isl_keep isl_qpolynomial *qp) -{ - return qp ? qp->dim->ctx : NULL; -} - -__isl_give isl_dim *isl_qpolynomial_get_dim(__isl_keep isl_qpolynomial *qp) -{ - return qp ? isl_dim_copy(qp->dim) : NULL; -} - -unsigned isl_qpolynomial_dim(__isl_keep isl_qpolynomial *qp, - enum isl_dim_type type) -{ - return qp ? isl_dim_size(qp->dim, type) : 0; -} - -int isl_qpolynomial_is_zero(__isl_keep isl_qpolynomial *qp) -{ - return qp ? isl_upoly_is_zero(qp->upoly) : -1; -} - -int isl_qpolynomial_is_one(__isl_keep isl_qpolynomial *qp) -{ - return qp ? isl_upoly_is_one(qp->upoly) : -1; -} - -int isl_qpolynomial_is_nan(__isl_keep isl_qpolynomial *qp) -{ - return qp ? isl_upoly_is_nan(qp->upoly) : -1; -} - -int isl_qpolynomial_is_infty(__isl_keep isl_qpolynomial *qp) -{ - return qp ? isl_upoly_is_infty(qp->upoly) : -1; -} - -int isl_qpolynomial_is_neginfty(__isl_keep isl_qpolynomial *qp) -{ - return qp ? isl_upoly_is_neginfty(qp->upoly) : -1; -} - -int isl_qpolynomial_sgn(__isl_keep isl_qpolynomial *qp) -{ - return qp ? isl_upoly_sgn(qp->upoly) : 0; -} - -static void upoly_free_cst(__isl_take struct isl_upoly_cst *cst) -{ - isl_int_clear(cst->n); - isl_int_clear(cst->d); -} - -static void upoly_free_rec(__isl_take struct isl_upoly_rec *rec) -{ - int i; - - for (i = 0; i < rec->n; ++i) - isl_upoly_free(rec->p[i]); -} - -__isl_give struct isl_upoly *isl_upoly_copy(__isl_keep struct isl_upoly *up) -{ - if (!up) - return NULL; - - up->ref++; - return up; -} - -__isl_give struct isl_upoly *isl_upoly_dup_cst(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - struct isl_upoly_cst *dup; - - cst = isl_upoly_as_cst(up); - if (!cst) - return NULL; - - dup = isl_upoly_as_cst(isl_upoly_zero(up->ctx)); - if (!dup) - return NULL; - isl_int_set(dup->n, cst->n); - isl_int_set(dup->d, cst->d); - - return &dup->up; -} - -__isl_give struct isl_upoly *isl_upoly_dup_rec(__isl_keep struct isl_upoly *up) -{ - int i; - struct isl_upoly_rec *rec; - struct isl_upoly_rec *dup; - - rec = isl_upoly_as_rec(up); - if (!rec) - return NULL; - - dup = isl_upoly_alloc_rec(up->ctx, up->var, rec->n); - if (!dup) - return NULL; - - for (i = 0; i < rec->n; ++i) { - dup->p[i] = isl_upoly_copy(rec->p[i]); - if (!dup->p[i]) - goto error; - dup->n++; - } - - return &dup->up; -error: - isl_upoly_free(&dup->up); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_dup(__isl_keep struct isl_upoly *up) -{ - if (!up) - return NULL; - - if (isl_upoly_is_cst(up)) - return isl_upoly_dup_cst(up); - else - return isl_upoly_dup_rec(up); -} - -__isl_give struct isl_upoly *isl_upoly_cow(__isl_take struct isl_upoly *up) -{ - if (!up) - return NULL; - - if (up->ref == 1) - return up; - up->ref--; - return isl_upoly_dup(up); -} - -void isl_upoly_free(__isl_take struct isl_upoly *up) -{ - if (!up) - return; - - if (--up->ref > 0) - return; - - if (up->var < 0) - upoly_free_cst((struct isl_upoly_cst *)up); - else - upoly_free_rec((struct isl_upoly_rec *)up); - - isl_ctx_deref(up->ctx); - free(up); -} - -static void isl_upoly_cst_reduce(__isl_keep struct isl_upoly_cst *cst) -{ - isl_int gcd; - - isl_int_init(gcd); - isl_int_gcd(gcd, cst->n, cst->d); - if (!isl_int_is_zero(gcd) && !isl_int_is_one(gcd)) { - isl_int_divexact(cst->n, cst->n, gcd); - isl_int_divexact(cst->d, cst->d, gcd); - } - isl_int_clear(gcd); -} - -__isl_give struct isl_upoly *isl_upoly_sum_cst(__isl_take struct isl_upoly *up1, - __isl_take struct isl_upoly *up2) -{ - struct isl_upoly_cst *cst1; - struct isl_upoly_cst *cst2; - - up1 = isl_upoly_cow(up1); - if (!up1 || !up2) - goto error; - - cst1 = isl_upoly_as_cst(up1); - cst2 = isl_upoly_as_cst(up2); - - if (isl_int_eq(cst1->d, cst2->d)) - isl_int_add(cst1->n, cst1->n, cst2->n); - else { - isl_int_mul(cst1->n, cst1->n, cst2->d); - isl_int_addmul(cst1->n, cst2->n, cst1->d); - isl_int_mul(cst1->d, cst1->d, cst2->d); - } - - isl_upoly_cst_reduce(cst1); - - isl_upoly_free(up2); - return up1; -error: - isl_upoly_free(up1); - isl_upoly_free(up2); - return NULL; -} - -static __isl_give struct isl_upoly *replace_by_zero( - __isl_take struct isl_upoly *up) -{ - struct isl_ctx *ctx; - - if (!up) - return NULL; - ctx = up->ctx; - isl_upoly_free(up); - return isl_upoly_zero(ctx); -} - -static __isl_give struct isl_upoly *replace_by_constant_term( - __isl_take struct isl_upoly *up) -{ - struct isl_upoly_rec *rec; - struct isl_upoly *cst; - - if (!up) - return NULL; - - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - cst = isl_upoly_copy(rec->p[0]); - isl_upoly_free(up); - return cst; -error: - isl_upoly_free(up); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_sum(__isl_take struct isl_upoly *up1, - __isl_take struct isl_upoly *up2) -{ - int i; - struct isl_upoly_rec *rec1, *rec2; - - if (!up1 || !up2) - goto error; - - if (isl_upoly_is_nan(up1)) { - isl_upoly_free(up2); - return up1; - } - - if (isl_upoly_is_nan(up2)) { - isl_upoly_free(up1); - return up2; - } - - if (isl_upoly_is_zero(up1)) { - isl_upoly_free(up1); - return up2; - } - - if (isl_upoly_is_zero(up2)) { - isl_upoly_free(up2); - return up1; - } - - if (up1->var < up2->var) - return isl_upoly_sum(up2, up1); - - if (up2->var < up1->var) { - struct isl_upoly_rec *rec; - if (isl_upoly_is_infty(up2) || isl_upoly_is_neginfty(up2)) { - isl_upoly_free(up1); - return up2; - } - up1 = isl_upoly_cow(up1); - rec = isl_upoly_as_rec(up1); - if (!rec) - goto error; - rec->p[0] = isl_upoly_sum(rec->p[0], up2); - if (rec->n == 1) - up1 = replace_by_constant_term(up1); - return up1; - } - - if (isl_upoly_is_cst(up1)) - return isl_upoly_sum_cst(up1, up2); - - rec1 = isl_upoly_as_rec(up1); - rec2 = isl_upoly_as_rec(up2); - if (!rec1 || !rec2) - goto error; - - if (rec1->n < rec2->n) - return isl_upoly_sum(up2, up1); - - up1 = isl_upoly_cow(up1); - rec1 = isl_upoly_as_rec(up1); - if (!rec1) - goto error; - - for (i = rec2->n - 1; i >= 0; --i) { - rec1->p[i] = isl_upoly_sum(rec1->p[i], - isl_upoly_copy(rec2->p[i])); - if (!rec1->p[i]) - goto error; - if (i == rec1->n - 1 && isl_upoly_is_zero(rec1->p[i])) { - isl_upoly_free(rec1->p[i]); - rec1->n--; - } - } - - if (rec1->n == 0) - up1 = replace_by_zero(up1); - else if (rec1->n == 1) - up1 = replace_by_constant_term(up1); - - isl_upoly_free(up2); - - return up1; -error: - isl_upoly_free(up1); - isl_upoly_free(up2); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_cst_add_isl_int( - __isl_take struct isl_upoly *up, isl_int v) -{ - struct isl_upoly_cst *cst; - - up = isl_upoly_cow(up); - if (!up) - return NULL; - - cst = isl_upoly_as_cst(up); - - isl_int_addmul(cst->n, cst->d, v); - - return up; -} - -__isl_give struct isl_upoly *isl_upoly_add_isl_int( - __isl_take struct isl_upoly *up, isl_int v) -{ - struct isl_upoly_rec *rec; - - if (!up) - return NULL; - - if (isl_upoly_is_cst(up)) - return isl_upoly_cst_add_isl_int(up, v); - - up = isl_upoly_cow(up); - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - rec->p[0] = isl_upoly_add_isl_int(rec->p[0], v); - if (!rec->p[0]) - goto error; - - return up; -error: - isl_upoly_free(up); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_cst_mul_isl_int( - __isl_take struct isl_upoly *up, isl_int v) -{ - struct isl_upoly_cst *cst; - - if (isl_upoly_is_zero(up)) - return up; - - up = isl_upoly_cow(up); - if (!up) - return NULL; - - cst = isl_upoly_as_cst(up); - - isl_int_mul(cst->n, cst->n, v); - - return up; -} - -__isl_give struct isl_upoly *isl_upoly_mul_isl_int( - __isl_take struct isl_upoly *up, isl_int v) -{ - int i; - struct isl_upoly_rec *rec; - - if (!up) - return NULL; - - if (isl_upoly_is_cst(up)) - return isl_upoly_cst_mul_isl_int(up, v); - - up = isl_upoly_cow(up); - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - for (i = 0; i < rec->n; ++i) { - rec->p[i] = isl_upoly_mul_isl_int(rec->p[i], v); - if (!rec->p[i]) - goto error; - } - - return up; -error: - isl_upoly_free(up); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_mul_cst(__isl_take struct isl_upoly *up1, - __isl_take struct isl_upoly *up2) -{ - struct isl_upoly_cst *cst1; - struct isl_upoly_cst *cst2; - - up1 = isl_upoly_cow(up1); - if (!up1 || !up2) - goto error; - - cst1 = isl_upoly_as_cst(up1); - cst2 = isl_upoly_as_cst(up2); - - isl_int_mul(cst1->n, cst1->n, cst2->n); - isl_int_mul(cst1->d, cst1->d, cst2->d); - - isl_upoly_cst_reduce(cst1); - - isl_upoly_free(up2); - return up1; -error: - isl_upoly_free(up1); - isl_upoly_free(up2); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_mul_rec(__isl_take struct isl_upoly *up1, - __isl_take struct isl_upoly *up2) -{ - struct isl_upoly_rec *rec1; - struct isl_upoly_rec *rec2; - struct isl_upoly_rec *res = NULL; - int i, j; - int size; - - rec1 = isl_upoly_as_rec(up1); - rec2 = isl_upoly_as_rec(up2); - if (!rec1 || !rec2) - goto error; - size = rec1->n + rec2->n - 1; - res = isl_upoly_alloc_rec(up1->ctx, up1->var, size); - if (!res) - goto error; - - for (i = 0; i < rec1->n; ++i) { - res->p[i] = isl_upoly_mul(isl_upoly_copy(rec2->p[0]), - isl_upoly_copy(rec1->p[i])); - if (!res->p[i]) - goto error; - res->n++; - } - for (; i < size; ++i) { - res->p[i] = isl_upoly_zero(up1->ctx); - if (!res->p[i]) - goto error; - res->n++; - } - for (i = 0; i < rec1->n; ++i) { - for (j = 1; j < rec2->n; ++j) { - struct isl_upoly *up; - up = isl_upoly_mul(isl_upoly_copy(rec2->p[j]), - isl_upoly_copy(rec1->p[i])); - res->p[i + j] = isl_upoly_sum(res->p[i + j], up); - if (!res->p[i + j]) - goto error; - } - } - - isl_upoly_free(up1); - isl_upoly_free(up2); - - return &res->up; -error: - isl_upoly_free(up1); - isl_upoly_free(up2); - isl_upoly_free(&res->up); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_mul(__isl_take struct isl_upoly *up1, - __isl_take struct isl_upoly *up2) -{ - if (!up1 || !up2) - goto error; - - if (isl_upoly_is_nan(up1)) { - isl_upoly_free(up2); - return up1; - } - - if (isl_upoly_is_nan(up2)) { - isl_upoly_free(up1); - return up2; - } - - if (isl_upoly_is_zero(up1)) { - isl_upoly_free(up2); - return up1; - } - - if (isl_upoly_is_zero(up2)) { - isl_upoly_free(up1); - return up2; - } - - if (isl_upoly_is_one(up1)) { - isl_upoly_free(up1); - return up2; - } - - if (isl_upoly_is_one(up2)) { - isl_upoly_free(up2); - return up1; - } - - if (up1->var < up2->var) - return isl_upoly_mul(up2, up1); - - if (up2->var < up1->var) { - int i; - struct isl_upoly_rec *rec; - if (isl_upoly_is_infty(up2) || isl_upoly_is_neginfty(up2)) { - isl_ctx *ctx = up1->ctx; - isl_upoly_free(up1); - isl_upoly_free(up2); - return isl_upoly_nan(ctx); - } - up1 = isl_upoly_cow(up1); - rec = isl_upoly_as_rec(up1); - if (!rec) - goto error; - - for (i = 0; i < rec->n; ++i) { - rec->p[i] = isl_upoly_mul(rec->p[i], - isl_upoly_copy(up2)); - if (!rec->p[i]) - goto error; - } - isl_upoly_free(up2); - return up1; - } - - if (isl_upoly_is_cst(up1)) - return isl_upoly_mul_cst(up1, up2); - - return isl_upoly_mul_rec(up1, up2); -error: - isl_upoly_free(up1); - isl_upoly_free(up2); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_pow(__isl_take struct isl_upoly *up, - unsigned power) -{ - struct isl_upoly *res; - - if (!up) - return NULL; - if (power == 1) - return up; - - if (power % 2) - res = isl_upoly_copy(up); - else - res = isl_upoly_one(up->ctx); - - while (power >>= 1) { - up = isl_upoly_mul(up, isl_upoly_copy(up)); - if (power % 2) - res = isl_upoly_mul(res, isl_upoly_copy(up)); - } - - isl_upoly_free(up); - return res; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_alloc(__isl_take isl_dim *dim, - unsigned n_div, __isl_take struct isl_upoly *up) -{ - struct isl_qpolynomial *qp = NULL; - unsigned total; - - if (!dim || !up) - goto error; - - total = isl_dim_total(dim); - - qp = isl_calloc_type(dim->ctx, struct isl_qpolynomial); - if (!qp) - goto error; - - qp->ref = 1; - qp->div = isl_mat_alloc(dim->ctx, n_div, 1 + 1 + total + n_div); - if (!qp->div) - goto error; - - qp->dim = dim; - qp->upoly = up; - - return qp; -error: - isl_dim_free(dim); - isl_upoly_free(up); - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_copy(__isl_keep isl_qpolynomial *qp) -{ - if (!qp) - return NULL; - - qp->ref++; - return qp; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_dup(__isl_keep isl_qpolynomial *qp) -{ - struct isl_qpolynomial *dup; - - if (!qp) - return NULL; - - dup = isl_qpolynomial_alloc(isl_dim_copy(qp->dim), qp->div->n_row, - isl_upoly_copy(qp->upoly)); - if (!dup) - return NULL; - isl_mat_free(dup->div); - dup->div = isl_mat_copy(qp->div); - if (!dup->div) - goto error; - - return dup; -error: - isl_qpolynomial_free(dup); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_cow(__isl_take isl_qpolynomial *qp) -{ - if (!qp) - return NULL; - - if (qp->ref == 1) - return qp; - qp->ref--; - return isl_qpolynomial_dup(qp); -} - -void isl_qpolynomial_free(__isl_take isl_qpolynomial *qp) -{ - if (!qp) - return; - - if (--qp->ref > 0) - return; - - isl_dim_free(qp->dim); - isl_mat_free(qp->div); - isl_upoly_free(qp->upoly); - - free(qp); -} - -__isl_give struct isl_upoly *isl_upoly_var_pow(isl_ctx *ctx, int pos, int power) -{ - int i; - struct isl_upoly_rec *rec; - struct isl_upoly_cst *cst; - - rec = isl_upoly_alloc_rec(ctx, pos, 1 + power); - if (!rec) - return NULL; - for (i = 0; i < 1 + power; ++i) { - rec->p[i] = isl_upoly_zero(ctx); - if (!rec->p[i]) - goto error; - rec->n++; - } - cst = isl_upoly_as_cst(rec->p[power]); - isl_int_set_si(cst->n, 1); - - return &rec->up; -error: - isl_upoly_free(&rec->up); - return NULL; -} - -/* r array maps original positions to new positions. - */ -static __isl_give struct isl_upoly *reorder(__isl_take struct isl_upoly *up, - int *r) -{ - int i; - struct isl_upoly_rec *rec; - struct isl_upoly *base; - struct isl_upoly *res; - - if (isl_upoly_is_cst(up)) - return up; - - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - isl_assert(up->ctx, rec->n >= 1, goto error); - - base = isl_upoly_var_pow(up->ctx, r[up->var], 1); - res = reorder(isl_upoly_copy(rec->p[rec->n - 1]), r); - - for (i = rec->n - 2; i >= 0; --i) { - res = isl_upoly_mul(res, isl_upoly_copy(base)); - res = isl_upoly_sum(res, reorder(isl_upoly_copy(rec->p[i]), r)); - } - - isl_upoly_free(base); - isl_upoly_free(up); - - return res; -error: - isl_upoly_free(up); - return NULL; -} - -static int compatible_divs(__isl_keep isl_mat *div1, __isl_keep isl_mat *div2) -{ - int n_row, n_col; - int equal; - - isl_assert(div1->ctx, div1->n_row >= div2->n_row && - div1->n_col >= div2->n_col, return -1); - - if (div1->n_row == div2->n_row) - return isl_mat_is_equal(div1, div2); - - n_row = div1->n_row; - n_col = div1->n_col; - div1->n_row = div2->n_row; - div1->n_col = div2->n_col; - - equal = isl_mat_is_equal(div1, div2); - - div1->n_row = n_row; - div1->n_col = n_col; - - return equal; -} - -static int cmp_row(__isl_keep isl_mat *div, int i, int j) -{ - int li, lj; - - li = isl_seq_last_non_zero(div->row[i], div->n_col); - lj = isl_seq_last_non_zero(div->row[j], div->n_col); - - if (li != lj) - return li - lj; - - return isl_seq_cmp(div->row[i], div->row[j], div->n_col); -} - -struct isl_div_sort_info { - isl_mat *div; - int row; -}; - -static int div_sort_cmp(const void *p1, const void *p2) -{ - const struct isl_div_sort_info *i1, *i2; - i1 = (const struct isl_div_sort_info *) p1; - i2 = (const struct isl_div_sort_info *) p2; - - return cmp_row(i1->div, i1->row, i2->row); -} - -/* Sort divs and remove duplicates. - */ -static __isl_give isl_qpolynomial *sort_divs(__isl_take isl_qpolynomial *qp) -{ - int i; - int skip; - int len; - struct isl_div_sort_info *array = NULL; - int *pos = NULL, *at = NULL; - int *reordering = NULL; - unsigned div_pos; - - if (!qp) - return NULL; - if (qp->div->n_row <= 1) - return qp; - - div_pos = isl_dim_total(qp->dim); - - array = isl_alloc_array(qp->div->ctx, struct isl_div_sort_info, - qp->div->n_row); - pos = isl_alloc_array(qp->div->ctx, int, qp->div->n_row); - at = isl_alloc_array(qp->div->ctx, int, qp->div->n_row); - len = qp->div->n_col - 2; - reordering = isl_alloc_array(qp->div->ctx, int, len); - if (!array || !pos || !at || !reordering) - goto error; - - for (i = 0; i < qp->div->n_row; ++i) { - array[i].div = qp->div; - array[i].row = i; - pos[i] = i; - at[i] = i; - } - - qsort(array, qp->div->n_row, sizeof(struct isl_div_sort_info), - div_sort_cmp); - - for (i = 0; i < div_pos; ++i) - reordering[i] = i; - - for (i = 0; i < qp->div->n_row; ++i) { - if (pos[array[i].row] == i) - continue; - qp->div = isl_mat_swap_rows(qp->div, i, pos[array[i].row]); - pos[at[i]] = pos[array[i].row]; - at[pos[array[i].row]] = at[i]; - at[i] = array[i].row; - pos[array[i].row] = i; - } - - skip = 0; - for (i = 0; i < len - div_pos; ++i) { - if (i > 0 && - isl_seq_eq(qp->div->row[i - skip - 1], - qp->div->row[i - skip], qp->div->n_col)) { - qp->div = isl_mat_drop_rows(qp->div, i - skip, 1); - isl_mat_col_add(qp->div, 2 + div_pos + i - skip - 1, - 2 + div_pos + i - skip); - qp->div = isl_mat_drop_cols(qp->div, - 2 + div_pos + i - skip, 1); - skip++; - } - reordering[div_pos + array[i].row] = div_pos + i - skip; - } - - qp->upoly = reorder(qp->upoly, reordering); - - if (!qp->upoly || !qp->div) - goto error; - - free(at); - free(pos); - free(array); - free(reordering); - - return qp; -error: - free(at); - free(pos); - free(array); - free(reordering); - isl_qpolynomial_free(qp); - return NULL; -} - -static __isl_give struct isl_upoly *expand(__isl_take struct isl_upoly *up, - int *exp, int first) -{ - int i; - struct isl_upoly_rec *rec; - - if (isl_upoly_is_cst(up)) - return up; - - if (up->var < first) - return up; - - if (exp[up->var - first] == up->var - first) - return up; - - up = isl_upoly_cow(up); - if (!up) - goto error; - - up->var = exp[up->var - first] + first; - - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - for (i = 0; i < rec->n; ++i) { - rec->p[i] = expand(rec->p[i], exp, first); - if (!rec->p[i]) - goto error; - } - - return up; -error: - isl_upoly_free(up); - return NULL; -} - -static __isl_give isl_qpolynomial *with_merged_divs( - __isl_give isl_qpolynomial *(*fn)(__isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2), - __isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2) -{ - int *exp1 = NULL; - int *exp2 = NULL; - isl_mat *div = NULL; - - qp1 = isl_qpolynomial_cow(qp1); - qp2 = isl_qpolynomial_cow(qp2); - - if (!qp1 || !qp2) - goto error; - - isl_assert(qp1->div->ctx, qp1->div->n_row >= qp2->div->n_row && - qp1->div->n_col >= qp2->div->n_col, goto error); - - exp1 = isl_alloc_array(qp1->div->ctx, int, qp1->div->n_row); - exp2 = isl_alloc_array(qp2->div->ctx, int, qp2->div->n_row); - if (!exp1 || !exp2) - goto error; - - div = isl_merge_divs(qp1->div, qp2->div, exp1, exp2); - if (!div) - goto error; - - isl_mat_free(qp1->div); - qp1->div = isl_mat_copy(div); - isl_mat_free(qp2->div); - qp2->div = isl_mat_copy(div); - - qp1->upoly = expand(qp1->upoly, exp1, div->n_col - div->n_row - 2); - qp2->upoly = expand(qp2->upoly, exp2, div->n_col - div->n_row - 2); - - if (!qp1->upoly || !qp2->upoly) - goto error; - - isl_mat_free(div); - free(exp1); - free(exp2); - - return fn(qp1, qp2); -error: - isl_mat_free(div); - free(exp1); - free(exp2); - isl_qpolynomial_free(qp1); - isl_qpolynomial_free(qp2); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_add(__isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2) -{ - qp1 = isl_qpolynomial_cow(qp1); - - if (!qp1 || !qp2) - goto error; - - if (qp1->div->n_row < qp2->div->n_row) - return isl_qpolynomial_add(qp2, qp1); - - isl_assert(qp1->dim->ctx, isl_dim_equal(qp1->dim, qp2->dim), goto error); - if (!compatible_divs(qp1->div, qp2->div)) - return with_merged_divs(isl_qpolynomial_add, qp1, qp2); - - qp1->upoly = isl_upoly_sum(qp1->upoly, isl_upoly_copy(qp2->upoly)); - if (!qp1->upoly) - goto error; - - isl_qpolynomial_free(qp2); - - return qp1; -error: - isl_qpolynomial_free(qp1); - isl_qpolynomial_free(qp2); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_add_on_domain( - __isl_keep isl_set *dom, - __isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2) -{ - qp1 = isl_qpolynomial_add(qp1, qp2); - qp1 = isl_qpolynomial_gist(qp1, isl_set_copy(dom)); - return qp1; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_sub(__isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2) -{ - return isl_qpolynomial_add(qp1, isl_qpolynomial_neg(qp2)); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_add_isl_int( - __isl_take isl_qpolynomial *qp, isl_int v) -{ - if (isl_int_is_zero(v)) - return qp; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - - qp->upoly = isl_upoly_add_isl_int(qp->upoly, v); - if (!qp->upoly) - goto error; - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; - -} - -__isl_give isl_qpolynomial *isl_qpolynomial_neg(__isl_take isl_qpolynomial *qp) -{ - if (!qp) - return NULL; - - return isl_qpolynomial_mul_isl_int(qp, qp->dim->ctx->negone); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_mul_isl_int( - __isl_take isl_qpolynomial *qp, isl_int v) -{ - if (isl_int_is_one(v)) - return qp; - - if (qp && isl_int_is_zero(v)) { - isl_qpolynomial *zero; - zero = isl_qpolynomial_zero(isl_dim_copy(qp->dim)); - isl_qpolynomial_free(qp); - return zero; - } - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - - qp->upoly = isl_upoly_mul_isl_int(qp->upoly, v); - if (!qp->upoly) - goto error; - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_scale( - __isl_take isl_qpolynomial *qp, isl_int v) -{ - return isl_qpolynomial_mul_isl_int(qp, v); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_mul(__isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2) -{ - qp1 = isl_qpolynomial_cow(qp1); - - if (!qp1 || !qp2) - goto error; - - if (qp1->div->n_row < qp2->div->n_row) - return isl_qpolynomial_mul(qp2, qp1); - - isl_assert(qp1->dim->ctx, isl_dim_equal(qp1->dim, qp2->dim), goto error); - if (!compatible_divs(qp1->div, qp2->div)) - return with_merged_divs(isl_qpolynomial_mul, qp1, qp2); - - qp1->upoly = isl_upoly_mul(qp1->upoly, isl_upoly_copy(qp2->upoly)); - if (!qp1->upoly) - goto error; - - isl_qpolynomial_free(qp2); - - return qp1; -error: - isl_qpolynomial_free(qp1); - isl_qpolynomial_free(qp2); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_pow(__isl_take isl_qpolynomial *qp, - unsigned power) -{ - qp = isl_qpolynomial_cow(qp); - - if (!qp) - return NULL; - - qp->upoly = isl_upoly_pow(qp->upoly, power); - if (!qp->upoly) - goto error; - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_zero(__isl_take isl_dim *dim) -{ - if (!dim) - return NULL; - return isl_qpolynomial_alloc(dim, 0, isl_upoly_zero(dim->ctx)); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_one(__isl_take isl_dim *dim) -{ - if (!dim) - return NULL; - return isl_qpolynomial_alloc(dim, 0, isl_upoly_one(dim->ctx)); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_infty(__isl_take isl_dim *dim) -{ - if (!dim) - return NULL; - return isl_qpolynomial_alloc(dim, 0, isl_upoly_infty(dim->ctx)); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_neginfty(__isl_take isl_dim *dim) -{ - if (!dim) - return NULL; - return isl_qpolynomial_alloc(dim, 0, isl_upoly_neginfty(dim->ctx)); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_nan(__isl_take isl_dim *dim) -{ - if (!dim) - return NULL; - return isl_qpolynomial_alloc(dim, 0, isl_upoly_nan(dim->ctx)); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_cst(__isl_take isl_dim *dim, - isl_int v) -{ - struct isl_qpolynomial *qp; - struct isl_upoly_cst *cst; - - if (!dim) - return NULL; - - qp = isl_qpolynomial_alloc(dim, 0, isl_upoly_zero(dim->ctx)); - if (!qp) - return NULL; - - cst = isl_upoly_as_cst(qp->upoly); - isl_int_set(cst->n, v); - - return qp; -} - -int isl_qpolynomial_is_cst(__isl_keep isl_qpolynomial *qp, - isl_int *n, isl_int *d) -{ - struct isl_upoly_cst *cst; - - if (!qp) - return -1; - - if (!isl_upoly_is_cst(qp->upoly)) - return 0; - - cst = isl_upoly_as_cst(qp->upoly); - if (!cst) - return -1; - - if (n) - isl_int_set(*n, cst->n); - if (d) - isl_int_set(*d, cst->d); - - return 1; -} - -int isl_upoly_is_affine(__isl_keep struct isl_upoly *up) -{ - int is_cst; - struct isl_upoly_rec *rec; - - if (!up) - return -1; - - if (up->var < 0) - return 1; - - rec = isl_upoly_as_rec(up); - if (!rec) - return -1; - - if (rec->n > 2) - return 0; - - isl_assert(up->ctx, rec->n > 1, return -1); - - is_cst = isl_upoly_is_cst(rec->p[1]); - if (is_cst < 0) - return -1; - if (!is_cst) - return 0; - - return isl_upoly_is_affine(rec->p[0]); -} - -int isl_qpolynomial_is_affine(__isl_keep isl_qpolynomial *qp) -{ - if (!qp) - return -1; - - if (qp->div->n_row > 0) - return 0; - - return isl_upoly_is_affine(qp->upoly); -} - -static void update_coeff(__isl_keep isl_vec *aff, - __isl_keep struct isl_upoly_cst *cst, int pos) -{ - isl_int gcd; - isl_int f; - - if (isl_int_is_zero(cst->n)) - return; - - isl_int_init(gcd); - isl_int_init(f); - isl_int_gcd(gcd, cst->d, aff->el[0]); - isl_int_divexact(f, cst->d, gcd); - isl_int_divexact(gcd, aff->el[0], gcd); - isl_seq_scale(aff->el, aff->el, f, aff->size); - isl_int_mul(aff->el[1 + pos], gcd, cst->n); - isl_int_clear(gcd); - isl_int_clear(f); -} - -int isl_upoly_update_affine(__isl_keep struct isl_upoly *up, - __isl_keep isl_vec *aff) -{ - struct isl_upoly_cst *cst; - struct isl_upoly_rec *rec; - - if (!up || !aff) - return -1; - - if (up->var < 0) { - struct isl_upoly_cst *cst; - - cst = isl_upoly_as_cst(up); - if (!cst) - return -1; - update_coeff(aff, cst, 0); - return 0; - } - - rec = isl_upoly_as_rec(up); - if (!rec) - return -1; - isl_assert(up->ctx, rec->n == 2, return -1); - - cst = isl_upoly_as_cst(rec->p[1]); - if (!cst) - return -1; - update_coeff(aff, cst, 1 + up->var); - - return isl_upoly_update_affine(rec->p[0], aff); -} - -__isl_give isl_vec *isl_qpolynomial_extract_affine( - __isl_keep isl_qpolynomial *qp) -{ - isl_vec *aff; - unsigned d; - - if (!qp) - return NULL; - - d = isl_dim_total(qp->dim); - aff = isl_vec_alloc(qp->div->ctx, 2 + d + qp->div->n_row); - if (!aff) - return NULL; - - isl_seq_clr(aff->el + 1, 1 + d + qp->div->n_row); - isl_int_set_si(aff->el[0], 1); - - if (isl_upoly_update_affine(qp->upoly, aff) < 0) - goto error; - - return aff; -error: - isl_vec_free(aff); - return NULL; -} - -int isl_qpolynomial_plain_is_equal(__isl_keep isl_qpolynomial *qp1, - __isl_keep isl_qpolynomial *qp2) -{ - int equal; - - if (!qp1 || !qp2) - return -1; - - equal = isl_dim_equal(qp1->dim, qp2->dim); - if (equal < 0 || !equal) - return equal; - - equal = isl_mat_is_equal(qp1->div, qp2->div); - if (equal < 0 || !equal) - return equal; - - return isl_upoly_is_equal(qp1->upoly, qp2->upoly); -} - -static void upoly_update_den(__isl_keep struct isl_upoly *up, isl_int *d) -{ - int i; - struct isl_upoly_rec *rec; - - if (isl_upoly_is_cst(up)) { - struct isl_upoly_cst *cst; - cst = isl_upoly_as_cst(up); - if (!cst) - return; - isl_int_lcm(*d, *d, cst->d); - return; - } - - rec = isl_upoly_as_rec(up); - if (!rec) - return; - - for (i = 0; i < rec->n; ++i) - upoly_update_den(rec->p[i], d); -} - -void isl_qpolynomial_get_den(__isl_keep isl_qpolynomial *qp, isl_int *d) -{ - isl_int_set_si(*d, 1); - if (!qp) - return; - upoly_update_den(qp->upoly, d); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_var_pow(__isl_take isl_dim *dim, - int pos, int power) -{ - struct isl_ctx *ctx; - - if (!dim) - return NULL; - - ctx = dim->ctx; - - return isl_qpolynomial_alloc(dim, 0, isl_upoly_var_pow(ctx, pos, power)); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_var(__isl_take isl_dim *dim, - enum isl_dim_type type, unsigned pos) -{ - if (!dim) - return NULL; - - isl_assert(dim->ctx, isl_dim_size(dim, isl_dim_in) == 0, goto error); - isl_assert(dim->ctx, pos < isl_dim_size(dim, type), goto error); - - if (type == isl_dim_set) - pos += isl_dim_size(dim, isl_dim_param); - - return isl_qpolynomial_var_pow(dim, pos, 1); -error: - isl_dim_free(dim); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_subs(__isl_take struct isl_upoly *up, - unsigned first, unsigned n, __isl_keep struct isl_upoly **subs) -{ - int i; - struct isl_upoly_rec *rec; - struct isl_upoly *base, *res; - - if (!up) - return NULL; - - if (isl_upoly_is_cst(up)) - return up; - - if (up->var < first) - return up; - - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - isl_assert(up->ctx, rec->n >= 1, goto error); - - if (up->var >= first + n) - base = isl_upoly_var_pow(up->ctx, up->var, 1); - else - base = isl_upoly_copy(subs[up->var - first]); - - res = isl_upoly_subs(isl_upoly_copy(rec->p[rec->n - 1]), first, n, subs); - for (i = rec->n - 2; i >= 0; --i) { - struct isl_upoly *t; - t = isl_upoly_subs(isl_upoly_copy(rec->p[i]), first, n, subs); - res = isl_upoly_mul(res, isl_upoly_copy(base)); - res = isl_upoly_sum(res, t); - } - - isl_upoly_free(base); - isl_upoly_free(up); - - return res; -error: - isl_upoly_free(up); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_from_affine(isl_ctx *ctx, isl_int *f, - isl_int denom, unsigned len) -{ - int i; - struct isl_upoly *up; - - isl_assert(ctx, len >= 1, return NULL); - - up = isl_upoly_rat_cst(ctx, f[0], denom); - for (i = 0; i < len - 1; ++i) { - struct isl_upoly *t; - struct isl_upoly *c; - - if (isl_int_is_zero(f[1 + i])) - continue; - - c = isl_upoly_rat_cst(ctx, f[1 + i], denom); - t = isl_upoly_var_pow(ctx, i, 1); - t = isl_upoly_mul(c, t); - up = isl_upoly_sum(up, t); - } - - return up; -} - -/* Remove common factor of non-constant terms and denominator. - */ -static void normalize_div(__isl_keep isl_qpolynomial *qp, int div) -{ - isl_ctx *ctx = qp->div->ctx; - unsigned total = qp->div->n_col - 2; - - isl_seq_gcd(qp->div->row[div] + 2, total, &ctx->normalize_gcd); - isl_int_gcd(ctx->normalize_gcd, - ctx->normalize_gcd, qp->div->row[div][0]); - if (isl_int_is_one(ctx->normalize_gcd)) - return; - - isl_seq_scale_down(qp->div->row[div] + 2, qp->div->row[div] + 2, - ctx->normalize_gcd, total); - isl_int_divexact(qp->div->row[div][0], qp->div->row[div][0], - ctx->normalize_gcd); - isl_int_fdiv_q(qp->div->row[div][1], qp->div->row[div][1], - ctx->normalize_gcd); -} - -/* Replace the integer division identified by "div" by the polynomial "s". - * The integer division is assumed not to appear in the definition - * of any other integer divisions. - */ -static __isl_give isl_qpolynomial *substitute_div( - __isl_take isl_qpolynomial *qp, - int div, __isl_take struct isl_upoly *s) -{ - int i; - int total; - int *reordering; - - if (!qp || !s) - goto error; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - goto error; - - total = isl_dim_total(qp->dim); - qp->upoly = isl_upoly_subs(qp->upoly, total + div, 1, &s); - if (!qp->upoly) - goto error; - - reordering = isl_alloc_array(qp->dim->ctx, int, total + qp->div->n_row); - if (!reordering) - goto error; - for (i = 0; i < total + div; ++i) - reordering[i] = i; - for (i = total + div + 1; i < total + qp->div->n_row; ++i) - reordering[i] = i - 1; - qp->div = isl_mat_drop_rows(qp->div, div, 1); - qp->div = isl_mat_drop_cols(qp->div, 2 + total + div, 1); - qp->upoly = reorder(qp->upoly, reordering); - free(reordering); - - if (!qp->upoly || !qp->div) - goto error; - - isl_upoly_free(s); - return qp; -error: - isl_qpolynomial_free(qp); - isl_upoly_free(s); - return NULL; -} - -/* Replace all integer divisions [e/d] that turn out to not actually be integer - * divisions because d is equal to 1 by their definition, i.e., e. - */ -static __isl_give isl_qpolynomial *substitute_non_divs( - __isl_take isl_qpolynomial *qp) -{ - int i, j; - int total; - struct isl_upoly *s; - - if (!qp) - return NULL; - - total = isl_dim_total(qp->dim); - for (i = 0; qp && i < qp->div->n_row; ++i) { - if (!isl_int_is_one(qp->div->row[i][0])) - continue; - for (j = i + 1; j < qp->div->n_row; ++j) { - if (isl_int_is_zero(qp->div->row[j][2 + total + i])) - continue; - isl_seq_combine(qp->div->row[j] + 1, - qp->div->ctx->one, qp->div->row[j] + 1, - qp->div->row[j][2 + total + i], - qp->div->row[i] + 1, 1 + total + i); - isl_int_set_si(qp->div->row[j][2 + total + i], 0); - normalize_div(qp, j); - } - s = isl_upoly_from_affine(qp->dim->ctx, qp->div->row[i] + 1, - qp->div->row[i][0], qp->div->n_col - 1); - qp = substitute_div(qp, i, s); - --i; - } - - return qp; -} - -/* Reduce the coefficients of div "div" to lie in the interval [0, d-1], - * with d the denominator. When replacing the coefficient e of x by - * d * frac(e/d) = e - d * floor(e/d), we are subtracting d * floor(e/d) * x - * inside the division, so we need to add floor(e/d) * x outside. - * That is, we replace q by q' + floor(e/d) * x and we therefore need - * to adjust the coefficient of x in each later div that depends on the - * current div "div" and also in the affine expression "aff" - * (if it too depends on "div"). - */ -static void reduce_div(__isl_keep isl_qpolynomial *qp, int div, - __isl_keep isl_vec *aff) -{ - int i, j; - isl_int v; - unsigned total = qp->div->n_col - qp->div->n_row - 2; - - isl_int_init(v); - for (i = 0; i < 1 + total + div; ++i) { - if (isl_int_is_nonneg(qp->div->row[div][1 + i]) && - isl_int_lt(qp->div->row[div][1 + i], qp->div->row[div][0])) - continue; - isl_int_fdiv_q(v, qp->div->row[div][1 + i], qp->div->row[div][0]); - isl_int_fdiv_r(qp->div->row[div][1 + i], - qp->div->row[div][1 + i], qp->div->row[div][0]); - if (!isl_int_is_zero(aff->el[1 + total + div])) - isl_int_addmul(aff->el[i], v, aff->el[1 + total + div]); - for (j = div + 1; j < qp->div->n_row; ++j) { - if (isl_int_is_zero(qp->div->row[j][2 + total + div])) - continue; - isl_int_addmul(qp->div->row[j][1 + i], - v, qp->div->row[j][2 + total + div]); - } - } - isl_int_clear(v); -} - -/* Check if the last non-zero coefficient is bigger that half of the - * denominator. If so, we will invert the div to further reduce the number - * of distinct divs that may appear. - * If the last non-zero coefficient is exactly half the denominator, - * then we continue looking for earlier coefficients that are bigger - * than half the denominator. - */ -static int needs_invert(__isl_keep isl_mat *div, int row) -{ - int i; - int cmp; - - for (i = div->n_col - 1; i >= 1; --i) { - if (isl_int_is_zero(div->row[row][i])) - continue; - isl_int_mul_ui(div->row[row][i], div->row[row][i], 2); - cmp = isl_int_cmp(div->row[row][i], div->row[row][0]); - isl_int_divexact_ui(div->row[row][i], div->row[row][i], 2); - if (cmp) - return cmp > 0; - if (i == 1) - return 1; - } - - return 0; -} - -/* Replace div "div" q = [e/d] by -[(-e+(d-1))/d]. - * We only invert the coefficients of e (and the coefficient of q in - * later divs and in "aff"). After calling this function, the - * coefficients of e should be reduced again. - */ -static void invert_div(__isl_keep isl_qpolynomial *qp, int div, - __isl_keep isl_vec *aff) -{ - unsigned total = qp->div->n_col - qp->div->n_row - 2; - - isl_seq_neg(qp->div->row[div] + 1, - qp->div->row[div] + 1, qp->div->n_col - 1); - isl_int_sub_ui(qp->div->row[div][1], qp->div->row[div][1], 1); - isl_int_add(qp->div->row[div][1], - qp->div->row[div][1], qp->div->row[div][0]); - if (!isl_int_is_zero(aff->el[1 + total + div])) - isl_int_neg(aff->el[1 + total + div], aff->el[1 + total + div]); - isl_mat_col_mul(qp->div, 2 + total + div, - qp->div->ctx->negone, 2 + total + div); -} - -/* Assuming "qp" is a monomial, reduce all its divs to have coefficients - * in the interval [0, d-1], with d the denominator and such that the - * last non-zero coefficient that is not equal to d/2 is smaller than d/2. - * - * After the reduction, some divs may have become redundant or identical, - * so we call substitute_non_divs and sort_divs. If these functions - * eliminate divs or merge two or more divs into one, the coefficients - * of the enclosing divs may have to be reduced again, so we call - * ourselves recursively if the number of divs decreases. - */ -static __isl_give isl_qpolynomial *reduce_divs(__isl_take isl_qpolynomial *qp) -{ - int i; - isl_vec *aff = NULL; - struct isl_upoly *s; - unsigned n_div; - - if (!qp) - return NULL; - - aff = isl_vec_alloc(qp->div->ctx, qp->div->n_col - 1); - aff = isl_vec_clr(aff); - if (!aff) - goto error; - - isl_int_set_si(aff->el[1 + qp->upoly->var], 1); - - for (i = 0; i < qp->div->n_row; ++i) { - normalize_div(qp, i); - reduce_div(qp, i, aff); - if (needs_invert(qp->div, i)) { - invert_div(qp, i, aff); - reduce_div(qp, i, aff); - } - } - - s = isl_upoly_from_affine(qp->div->ctx, aff->el, - qp->div->ctx->one, aff->size); - qp->upoly = isl_upoly_subs(qp->upoly, qp->upoly->var, 1, &s); - isl_upoly_free(s); - if (!qp->upoly) - goto error; - - isl_vec_free(aff); - - n_div = qp->div->n_row; - qp = substitute_non_divs(qp); - qp = sort_divs(qp); - if (qp && qp->div->n_row < n_div) - return reduce_divs(qp); - - return qp; -error: - isl_qpolynomial_free(qp); - isl_vec_free(aff); - return NULL; -} - -/* Assumes each div only depends on earlier divs. - */ -__isl_give isl_qpolynomial *isl_qpolynomial_div_pow(__isl_take isl_div *div, - int power) -{ - struct isl_qpolynomial *qp = NULL; - struct isl_upoly_rec *rec; - struct isl_upoly_cst *cst; - int i, d; - int pos; - - if (!div) - return NULL; - - d = div->line - div->bmap->div; - - pos = isl_dim_total(div->bmap->dim) + d; - rec = isl_upoly_alloc_rec(div->ctx, pos, 1 + power); - qp = isl_qpolynomial_alloc(isl_basic_map_get_dim(div->bmap), - div->bmap->n_div, &rec->up); - if (!qp) - goto error; - - for (i = 0; i < div->bmap->n_div; ++i) - isl_seq_cpy(qp->div->row[i], div->bmap->div[i], qp->div->n_col); - - for (i = 0; i < 1 + power; ++i) { - rec->p[i] = isl_upoly_zero(div->ctx); - if (!rec->p[i]) - goto error; - rec->n++; - } - cst = isl_upoly_as_cst(rec->p[power]); - isl_int_set_si(cst->n, 1); - - isl_div_free(div); - - qp = reduce_divs(qp); - - return qp; -error: - isl_qpolynomial_free(qp); - isl_div_free(div); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_div(__isl_take isl_div *div) -{ - return isl_qpolynomial_div_pow(div, 1); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_rat_cst(__isl_take isl_dim *dim, - const isl_int n, const isl_int d) -{ - struct isl_qpolynomial *qp; - struct isl_upoly_cst *cst; - - qp = isl_qpolynomial_alloc(dim, 0, isl_upoly_zero(dim->ctx)); - if (!qp) - return NULL; - - cst = isl_upoly_as_cst(qp->upoly); - isl_int_set(cst->n, n); - isl_int_set(cst->d, d); - - return qp; -} - -static int up_set_active(__isl_keep struct isl_upoly *up, int *active, int d) -{ - struct isl_upoly_rec *rec; - int i; - - if (!up) - return -1; - - if (isl_upoly_is_cst(up)) - return 0; - - if (up->var < d) - active[up->var] = 1; - - rec = isl_upoly_as_rec(up); - for (i = 0; i < rec->n; ++i) - if (up_set_active(rec->p[i], active, d) < 0) - return -1; - - return 0; -} - -static int set_active(__isl_keep isl_qpolynomial *qp, int *active) -{ - int i, j; - int d = isl_dim_total(qp->dim); - - if (!qp || !active) - return -1; - - for (i = 0; i < d; ++i) - for (j = 0; j < qp->div->n_row; ++j) { - if (isl_int_is_zero(qp->div->row[j][2 + i])) - continue; - active[i] = 1; - break; - } - - return up_set_active(qp->upoly, active, d); -} - -int isl_qpolynomial_involves_dims(__isl_keep isl_qpolynomial *qp, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - int *active = NULL; - int involves = 0; - - if (!qp) - return -1; - if (n == 0) - return 0; - - isl_assert(qp->dim->ctx, first + n <= isl_dim_size(qp->dim, type), - return -1); - isl_assert(qp->dim->ctx, type == isl_dim_param || - type == isl_dim_set, return -1); - - active = isl_calloc_array(qp->dim->ctx, int, isl_dim_total(qp->dim)); - if (set_active(qp, active) < 0) - goto error; - - if (type == isl_dim_set) - first += isl_dim_size(qp->dim, isl_dim_param); - for (i = 0; i < n; ++i) - if (active[first + i]) { - involves = 1; - break; - } - - free(active); - - return involves; -error: - free(active); - return -1; -} - -/* Remove divs that do not appear in the quasi-polynomial, nor in any - * of the divs that do appear in the quasi-polynomial. - */ -static __isl_give isl_qpolynomial *remove_redundant_divs( - __isl_take isl_qpolynomial *qp) -{ - int i, j; - int d; - int len; - int skip; - int *active = NULL; - int *reordering = NULL; - int redundant = 0; - int n_div; - isl_ctx *ctx; - - if (!qp) - return NULL; - if (qp->div->n_row == 0) - return qp; - - d = isl_dim_total(qp->dim); - len = qp->div->n_col - 2; - ctx = isl_qpolynomial_get_ctx(qp); - active = isl_calloc_array(ctx, int, len); - if (!active) - goto error; - - if (up_set_active(qp->upoly, active, len) < 0) - goto error; - - for (i = qp->div->n_row - 1; i >= 0; --i) { - if (!active[d + i]) { - redundant = 1; - continue; - } - for (j = 0; j < i; ++j) { - if (isl_int_is_zero(qp->div->row[i][2 + d + j])) - continue; - active[d + j] = 1; - break; - } - } - - if (!redundant) { - free(active); - return qp; - } - - reordering = isl_alloc_array(qp->div->ctx, int, len); - if (!reordering) - goto error; - - for (i = 0; i < d; ++i) - reordering[i] = i; - - skip = 0; - n_div = qp->div->n_row; - for (i = 0; i < n_div; ++i) { - if (!active[d + i]) { - qp->div = isl_mat_drop_rows(qp->div, i - skip, 1); - qp->div = isl_mat_drop_cols(qp->div, - 2 + d + i - skip, 1); - skip++; - } - reordering[d + i] = d + i - skip; - } - - qp->upoly = reorder(qp->upoly, reordering); - - if (!qp->upoly || !qp->div) - goto error; - - free(active); - free(reordering); - - return qp; -error: - free(active); - free(reordering); - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_drop(__isl_take struct isl_upoly *up, - unsigned first, unsigned n) -{ - int i; - struct isl_upoly_rec *rec; - - if (!up) - return NULL; - if (n == 0 || up->var < 0 || up->var < first) - return up; - if (up->var < first + n) { - up = replace_by_constant_term(up); - return isl_upoly_drop(up, first, n); - } - up = isl_upoly_cow(up); - if (!up) - return NULL; - up->var -= n; - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - for (i = 0; i < rec->n; ++i) { - rec->p[i] = isl_upoly_drop(rec->p[i], first, n); - if (!rec->p[i]) - goto error; - } - - return up; -error: - isl_upoly_free(up); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_set_dim_name( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type type, unsigned pos, const char *s) -{ - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - qp->dim = isl_dim_set_name(qp->dim, type, pos, s); - if (!qp->dim) - goto error; - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_drop_dims( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type type, unsigned first, unsigned n) -{ - if (!qp) - return NULL; - if (n == 0 && !isl_dim_is_named_or_nested(qp->dim, type)) - return qp; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - - isl_assert(qp->dim->ctx, first + n <= isl_dim_size(qp->dim, type), - goto error); - isl_assert(qp->dim->ctx, type == isl_dim_param || - type == isl_dim_set, goto error); - - qp->dim = isl_dim_drop(qp->dim, type, first, n); - if (!qp->dim) - goto error; - - if (type == isl_dim_set) - first += isl_dim_size(qp->dim, isl_dim_param); - - qp->div = isl_mat_drop_cols(qp->div, 2 + first, n); - if (!qp->div) - goto error; - - qp->upoly = isl_upoly_drop(qp->upoly, first, n); - if (!qp->upoly) - goto error; - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_substitute_equalities( - __isl_take isl_qpolynomial *qp, __isl_take isl_basic_set *eq) -{ - int i, j, k; - isl_int denom; - unsigned total; - unsigned n_div; - struct isl_upoly *up; - - if (!eq) - goto error; - if (eq->n_eq == 0) { - isl_basic_set_free(eq); - return qp; - } - - qp = isl_qpolynomial_cow(qp); - if (!qp) - goto error; - qp->div = isl_mat_cow(qp->div); - if (!qp->div) - goto error; - - total = 1 + isl_dim_total(eq->dim); - n_div = eq->n_div; - isl_int_init(denom); - for (i = 0; i < eq->n_eq; ++i) { - j = isl_seq_last_non_zero(eq->eq[i], total + n_div); - if (j < 0 || j == 0 || j >= total) - continue; - - for (k = 0; k < qp->div->n_row; ++k) { - if (isl_int_is_zero(qp->div->row[k][1 + j])) - continue; - isl_seq_elim(qp->div->row[k] + 1, eq->eq[i], j, total, - &qp->div->row[k][0]); - normalize_div(qp, k); - } - - if (isl_int_is_pos(eq->eq[i][j])) - isl_seq_neg(eq->eq[i], eq->eq[i], total); - isl_int_abs(denom, eq->eq[i][j]); - isl_int_set_si(eq->eq[i][j], 0); - - up = isl_upoly_from_affine(qp->dim->ctx, - eq->eq[i], denom, total); - qp->upoly = isl_upoly_subs(qp->upoly, j - 1, 1, &up); - isl_upoly_free(up); - } - isl_int_clear(denom); - - if (!qp->upoly) - goto error; - - isl_basic_set_free(eq); - - qp = substitute_non_divs(qp); - qp = sort_divs(qp); - - return qp; -error: - isl_basic_set_free(eq); - isl_qpolynomial_free(qp); - return NULL; -} - -static __isl_give isl_basic_set *add_div_constraints( - __isl_take isl_basic_set *bset, __isl_take isl_mat *div) -{ - int i; - unsigned total; - - if (!bset || !div) - goto error; - - bset = isl_basic_set_extend_constraints(bset, 0, 2 * div->n_row); - if (!bset) - goto error; - total = isl_basic_set_total_dim(bset); - for (i = 0; i < div->n_row; ++i) - if (isl_basic_set_add_div_constraints_var(bset, - total - div->n_row + i, div->row[i]) < 0) - goto error; - - isl_mat_free(div); - return bset; -error: - isl_mat_free(div); - isl_basic_set_free(bset); - return NULL; -} - -/* Look for equalities among the variables shared by context and qp - * and the integer divisions of qp, if any. - * The equalities are then used to eliminate variables and/or integer - * divisions from qp. - */ -__isl_give isl_qpolynomial *isl_qpolynomial_gist( - __isl_take isl_qpolynomial *qp, __isl_take isl_set *context) -{ - isl_basic_set *aff; - - if (!qp) - goto error; - if (qp->div->n_row > 0) { - isl_basic_set *bset; - context = isl_set_add_dims(context, isl_dim_set, - qp->div->n_row); - bset = isl_basic_set_universe(isl_set_get_dim(context)); - bset = add_div_constraints(bset, isl_mat_copy(qp->div)); - context = isl_set_intersect(context, - isl_set_from_basic_set(bset)); - } - - aff = isl_set_affine_hull(context); - return isl_qpolynomial_substitute_equalities(qp, aff); -error: - isl_qpolynomial_free(qp); - isl_set_free(context); - return NULL; -} - -#undef PW -#define PW isl_pw_qpolynomial -#undef EL -#define EL isl_qpolynomial -#undef EL_IS_ZERO -#define EL_IS_ZERO is_zero -#undef ZERO -#define ZERO zero -#undef IS_ZERO -#define IS_ZERO is_zero -#undef FIELD -#define FIELD qp - -#include - -#undef UNION -#define UNION isl_union_pw_qpolynomial -#undef PART -#define PART isl_pw_qpolynomial -#undef PARTS -#define PARTS pw_qpolynomial - -#include - -int isl_pw_qpolynomial_is_one(__isl_keep isl_pw_qpolynomial *pwqp) -{ - if (!pwqp) - return -1; - - if (pwqp->n != -1) - return 0; - - if (!isl_set_plain_is_universe(pwqp->p[0].set)) - return 0; - - return isl_qpolynomial_is_one(pwqp->p[0].qp); -} - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_mul( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2) -{ - int i, j, n; - struct isl_pw_qpolynomial *res; - - if (!pwqp1 || !pwqp2) - goto error; - - isl_assert(pwqp1->dim->ctx, isl_dim_equal(pwqp1->dim, pwqp2->dim), - goto error); - - if (isl_pw_qpolynomial_is_zero(pwqp1)) { - isl_pw_qpolynomial_free(pwqp2); - return pwqp1; - } - - if (isl_pw_qpolynomial_is_zero(pwqp2)) { - isl_pw_qpolynomial_free(pwqp1); - return pwqp2; - } - - if (isl_pw_qpolynomial_is_one(pwqp1)) { - isl_pw_qpolynomial_free(pwqp1); - return pwqp2; - } - - if (isl_pw_qpolynomial_is_one(pwqp2)) { - isl_pw_qpolynomial_free(pwqp2); - return pwqp1; - } - - n = pwqp1->n * pwqp2->n; - res = isl_pw_qpolynomial_alloc_(isl_dim_copy(pwqp1->dim), n); - - for (i = 0; i < pwqp1->n; ++i) { - for (j = 0; j < pwqp2->n; ++j) { - struct isl_set *common; - struct isl_qpolynomial *prod; - common = isl_set_intersect(isl_set_copy(pwqp1->p[i].set), - isl_set_copy(pwqp2->p[j].set)); - if (isl_set_plain_is_empty(common)) { - isl_set_free(common); - continue; - } - - prod = isl_qpolynomial_mul( - isl_qpolynomial_copy(pwqp1->p[i].qp), - isl_qpolynomial_copy(pwqp2->p[j].qp)); - - res = isl_pw_qpolynomial_add_piece(res, common, prod); - } - } - - isl_pw_qpolynomial_free(pwqp1); - isl_pw_qpolynomial_free(pwqp2); - - return res; -error: - isl_pw_qpolynomial_free(pwqp1); - isl_pw_qpolynomial_free(pwqp2); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_eval( - __isl_take struct isl_upoly *up, __isl_take isl_vec *vec) -{ - int i; - struct isl_upoly_rec *rec; - struct isl_upoly *res; - struct isl_upoly *base; - - if (isl_upoly_is_cst(up)) { - isl_vec_free(vec); - return up; - } - - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - isl_assert(up->ctx, rec->n >= 1, goto error); - - base = isl_upoly_rat_cst(up->ctx, vec->el[1 + up->var], vec->el[0]); - - res = isl_upoly_eval(isl_upoly_copy(rec->p[rec->n - 1]), - isl_vec_copy(vec)); - - for (i = rec->n - 2; i >= 0; --i) { - res = isl_upoly_mul(res, isl_upoly_copy(base)); - res = isl_upoly_sum(res, - isl_upoly_eval(isl_upoly_copy(rec->p[i]), - isl_vec_copy(vec))); - } - - isl_upoly_free(base); - isl_upoly_free(up); - isl_vec_free(vec); - return res; -error: - isl_upoly_free(up); - isl_vec_free(vec); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_eval( - __isl_take isl_qpolynomial *qp, __isl_take isl_point *pnt) -{ - isl_vec *ext; - struct isl_upoly *up; - isl_dim *dim; - - if (!qp || !pnt) - goto error; - isl_assert(pnt->dim->ctx, isl_dim_equal(pnt->dim, qp->dim), goto error); - - if (qp->div->n_row == 0) - ext = isl_vec_copy(pnt->vec); - else { - int i; - unsigned dim = isl_dim_total(qp->dim); - ext = isl_vec_alloc(qp->dim->ctx, 1 + dim + qp->div->n_row); - if (!ext) - goto error; - - isl_seq_cpy(ext->el, pnt->vec->el, pnt->vec->size); - for (i = 0; i < qp->div->n_row; ++i) { - isl_seq_inner_product(qp->div->row[i] + 1, ext->el, - 1 + dim + i, &ext->el[1+dim+i]); - isl_int_fdiv_q(ext->el[1+dim+i], ext->el[1+dim+i], - qp->div->row[i][0]); - } - } - - up = isl_upoly_eval(isl_upoly_copy(qp->upoly), ext); - if (!up) - goto error; - - dim = isl_dim_copy(qp->dim); - isl_qpolynomial_free(qp); - isl_point_free(pnt); - - return isl_qpolynomial_alloc(dim, 0, up); -error: - isl_qpolynomial_free(qp); - isl_point_free(pnt); - return NULL; -} - -int isl_upoly_cmp(__isl_keep struct isl_upoly_cst *cst1, - __isl_keep struct isl_upoly_cst *cst2) -{ - int cmp; - isl_int t; - isl_int_init(t); - isl_int_mul(t, cst1->n, cst2->d); - isl_int_submul(t, cst2->n, cst1->d); - cmp = isl_int_sgn(t); - isl_int_clear(t); - return cmp; -} - -int isl_qpolynomial_le_cst(__isl_keep isl_qpolynomial *qp1, - __isl_keep isl_qpolynomial *qp2) -{ - struct isl_upoly_cst *cst1, *cst2; - - if (!qp1 || !qp2) - return -1; - isl_assert(qp1->dim->ctx, isl_upoly_is_cst(qp1->upoly), return -1); - isl_assert(qp2->dim->ctx, isl_upoly_is_cst(qp2->upoly), return -1); - if (isl_qpolynomial_is_nan(qp1)) - return -1; - if (isl_qpolynomial_is_nan(qp2)) - return -1; - cst1 = isl_upoly_as_cst(qp1->upoly); - cst2 = isl_upoly_as_cst(qp2->upoly); - - return isl_upoly_cmp(cst1, cst2) <= 0; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_min_cst( - __isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2) -{ - struct isl_upoly_cst *cst1, *cst2; - int cmp; - - if (!qp1 || !qp2) - goto error; - isl_assert(qp1->dim->ctx, isl_upoly_is_cst(qp1->upoly), goto error); - isl_assert(qp2->dim->ctx, isl_upoly_is_cst(qp2->upoly), goto error); - cst1 = isl_upoly_as_cst(qp1->upoly); - cst2 = isl_upoly_as_cst(qp2->upoly); - cmp = isl_upoly_cmp(cst1, cst2); - - if (cmp <= 0) { - isl_qpolynomial_free(qp2); - } else { - isl_qpolynomial_free(qp1); - qp1 = qp2; - } - return qp1; -error: - isl_qpolynomial_free(qp1); - isl_qpolynomial_free(qp2); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_max_cst( - __isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2) -{ - struct isl_upoly_cst *cst1, *cst2; - int cmp; - - if (!qp1 || !qp2) - goto error; - isl_assert(qp1->dim->ctx, isl_upoly_is_cst(qp1->upoly), goto error); - isl_assert(qp2->dim->ctx, isl_upoly_is_cst(qp2->upoly), goto error); - cst1 = isl_upoly_as_cst(qp1->upoly); - cst2 = isl_upoly_as_cst(qp2->upoly); - cmp = isl_upoly_cmp(cst1, cst2); - - if (cmp >= 0) { - isl_qpolynomial_free(qp2); - } else { - isl_qpolynomial_free(qp1); - qp1 = qp2; - } - return qp1; -error: - isl_qpolynomial_free(qp1); - isl_qpolynomial_free(qp2); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_insert_dims( - __isl_take isl_qpolynomial *qp, enum isl_dim_type type, - unsigned first, unsigned n) -{ - unsigned total; - unsigned g_pos; - int *exp; - - if (n == 0 && !isl_dim_is_named_or_nested(qp->dim, type)) - return qp; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - - isl_assert(qp->div->ctx, first <= isl_dim_size(qp->dim, type), - goto error); - - g_pos = pos(qp->dim, type) + first; - - qp->div = isl_mat_insert_zero_cols(qp->div, 2 + g_pos, n); - if (!qp->div) - goto error; - - total = qp->div->n_col - 2; - if (total > g_pos) { - int i; - exp = isl_alloc_array(qp->div->ctx, int, total - g_pos); - if (!exp) - goto error; - for (i = 0; i < total - g_pos; ++i) - exp[i] = i + n; - qp->upoly = expand(qp->upoly, exp, g_pos); - free(exp); - if (!qp->upoly) - goto error; - } - - qp->dim = isl_dim_insert(qp->dim, type, first, n); - if (!qp->dim) - goto error; - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_add_dims( - __isl_take isl_qpolynomial *qp, enum isl_dim_type type, unsigned n) -{ - unsigned pos; - - pos = isl_qpolynomial_dim(qp, type); - - return isl_qpolynomial_insert_dims(qp, type, pos, n); -} - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add_dims( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned n) -{ - unsigned pos; - - pos = isl_pw_qpolynomial_dim(pwqp, type); - - return isl_pw_qpolynomial_insert_dims(pwqp, type, pos, n); -} - -static int *reordering_move(isl_ctx *ctx, - unsigned len, unsigned dst, unsigned src, unsigned n) -{ - int i; - int *reordering; - - reordering = isl_alloc_array(ctx, int, len); - if (!reordering) - return NULL; - - if (dst <= src) { - for (i = 0; i < dst; ++i) - reordering[i] = i; - for (i = 0; i < n; ++i) - reordering[src + i] = dst + i; - for (i = 0; i < src - dst; ++i) - reordering[dst + i] = dst + n + i; - for (i = 0; i < len - src - n; ++i) - reordering[src + n + i] = src + n + i; - } else { - for (i = 0; i < src; ++i) - reordering[i] = i; - for (i = 0; i < n; ++i) - reordering[src + i] = dst + i; - for (i = 0; i < dst - src; ++i) - reordering[src + n + i] = src + i; - for (i = 0; i < len - dst - n; ++i) - reordering[dst + n + i] = dst + n + i; - } - - return reordering; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_move_dims( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - unsigned g_dst_pos; - unsigned g_src_pos; - int *reordering; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - - isl_assert(qp->dim->ctx, src_pos + n <= isl_dim_size(qp->dim, src_type), - goto error); - - g_dst_pos = pos(qp->dim, dst_type) + dst_pos; - g_src_pos = pos(qp->dim, src_type) + src_pos; - if (dst_type > src_type) - g_dst_pos -= n; - - qp->div = isl_mat_move_cols(qp->div, 2 + g_dst_pos, 2 + g_src_pos, n); - if (!qp->div) - goto error; - qp = sort_divs(qp); - if (!qp) - goto error; - - reordering = reordering_move(qp->dim->ctx, - qp->div->n_col - 2, g_dst_pos, g_src_pos, n); - if (!reordering) - goto error; - - qp->upoly = reorder(qp->upoly, reordering); - free(reordering); - if (!qp->upoly) - goto error; - - qp->dim = isl_dim_move(qp->dim, dst_type, dst_pos, src_type, src_pos, n); - if (!qp->dim) - goto error; - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_from_affine(__isl_take isl_dim *dim, - isl_int *f, isl_int denom) -{ - struct isl_upoly *up; - - if (!dim) - return NULL; - - up = isl_upoly_from_affine(dim->ctx, f, denom, 1 + isl_dim_total(dim)); - - return isl_qpolynomial_alloc(dim, 0, up); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_from_aff(__isl_take isl_aff *aff) -{ - isl_ctx *ctx; - struct isl_upoly *up; - isl_qpolynomial *qp; - - if (!aff) - return NULL; - - ctx = isl_aff_get_ctx(aff); - up = isl_upoly_from_affine(ctx, aff->v->el + 1, aff->v->el[0], - aff->v->size - 1); - - qp = isl_qpolynomial_alloc(isl_aff_get_dim(aff), - aff->ls->div->n_row, up); - if (!qp) - goto error; - - isl_mat_free(qp->div); - qp->div = isl_mat_copy(aff->ls->div); - qp->div = isl_mat_cow(qp->div); - if (!qp->div) - goto error; - - isl_aff_free(aff); - qp = reduce_divs(qp); - qp = remove_redundant_divs(qp); - return qp; -error: - isl_aff_free(aff); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_from_constraint( - __isl_take isl_constraint *c, enum isl_dim_type type, unsigned pos) -{ - isl_aff *aff; - - aff = isl_constraint_get_bound(c, type, pos); - isl_constraint_free(c); - return isl_qpolynomial_from_aff(aff); -} - -/* For each 0 <= i < "n", replace variable "first" + i of type "type" - * in "qp" by subs[i]. - */ -__isl_give isl_qpolynomial *isl_qpolynomial_substitute( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type type, unsigned first, unsigned n, - __isl_keep isl_qpolynomial **subs) -{ - int i; - struct isl_upoly **ups; - - if (n == 0) - return qp; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - for (i = 0; i < n; ++i) - if (!subs[i]) - goto error; - - isl_assert(qp->dim->ctx, first + n <= isl_dim_size(qp->dim, type), - goto error); - - for (i = 0; i < n; ++i) - isl_assert(qp->dim->ctx, isl_dim_equal(qp->dim, subs[i]->dim), - goto error); - - isl_assert(qp->dim->ctx, qp->div->n_row == 0, goto error); - for (i = 0; i < n; ++i) - isl_assert(qp->dim->ctx, subs[i]->div->n_row == 0, goto error); - - first += pos(qp->dim, type); - - ups = isl_alloc_array(qp->dim->ctx, struct isl_upoly *, n); - if (!ups) - goto error; - for (i = 0; i < n; ++i) - ups[i] = subs[i]->upoly; - - qp->upoly = isl_upoly_subs(qp->upoly, first, n, ups); - - free(ups); - - if (!qp->upoly) - goto error; - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -/* Extend "bset" with extra set dimensions for each integer division - * in "qp" and then call "fn" with the extended bset and the polynomial - * that results from replacing each of the integer divisions by the - * corresponding extra set dimension. - */ -int isl_qpolynomial_as_polynomial_on_domain(__isl_keep isl_qpolynomial *qp, - __isl_keep isl_basic_set *bset, - int (*fn)(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, void *user), void *user) -{ - isl_dim *dim; - isl_mat *div; - isl_qpolynomial *poly; - - if (!qp || !bset) - goto error; - if (qp->div->n_row == 0) - return fn(isl_basic_set_copy(bset), isl_qpolynomial_copy(qp), - user); - - div = isl_mat_copy(qp->div); - dim = isl_dim_copy(qp->dim); - dim = isl_dim_add(dim, isl_dim_set, qp->div->n_row); - poly = isl_qpolynomial_alloc(dim, 0, isl_upoly_copy(qp->upoly)); - bset = isl_basic_set_copy(bset); - bset = isl_basic_set_add(bset, isl_dim_set, qp->div->n_row); - bset = add_div_constraints(bset, div); - - return fn(bset, poly, user); -error: - return -1; -} - -/* Return total degree in variables first (inclusive) up to last (exclusive). - */ -int isl_upoly_degree(__isl_keep struct isl_upoly *up, int first, int last) -{ - int deg = -1; - int i; - struct isl_upoly_rec *rec; - - if (!up) - return -2; - if (isl_upoly_is_zero(up)) - return -1; - if (isl_upoly_is_cst(up) || up->var < first) - return 0; - - rec = isl_upoly_as_rec(up); - if (!rec) - return -2; - - for (i = 0; i < rec->n; ++i) { - int d; - - if (isl_upoly_is_zero(rec->p[i])) - continue; - d = isl_upoly_degree(rec->p[i], first, last); - if (up->var < last) - d += i; - if (d > deg) - deg = d; - } - - return deg; -} - -/* Return total degree in set variables. - */ -int isl_qpolynomial_degree(__isl_keep isl_qpolynomial *poly) -{ - unsigned ovar; - unsigned nvar; - - if (!poly) - return -2; - - ovar = isl_dim_offset(poly->dim, isl_dim_set); - nvar = isl_dim_size(poly->dim, isl_dim_set); - return isl_upoly_degree(poly->upoly, ovar, ovar + nvar); -} - -__isl_give struct isl_upoly *isl_upoly_coeff(__isl_keep struct isl_upoly *up, - unsigned pos, int deg) -{ - int i; - struct isl_upoly_rec *rec; - - if (!up) - return NULL; - - if (isl_upoly_is_cst(up) || up->var < pos) { - if (deg == 0) - return isl_upoly_copy(up); - else - return isl_upoly_zero(up->ctx); - } - - rec = isl_upoly_as_rec(up); - if (!rec) - return NULL; - - if (up->var == pos) { - if (deg < rec->n) - return isl_upoly_copy(rec->p[deg]); - else - return isl_upoly_zero(up->ctx); - } - - up = isl_upoly_copy(up); - up = isl_upoly_cow(up); - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - for (i = 0; i < rec->n; ++i) { - struct isl_upoly *t; - t = isl_upoly_coeff(rec->p[i], pos, deg); - if (!t) - goto error; - isl_upoly_free(rec->p[i]); - rec->p[i] = t; - } - - return up; -error: - isl_upoly_free(up); - return NULL; -} - -/* Return coefficient of power "deg" of variable "t_pos" of type "type". - */ -__isl_give isl_qpolynomial *isl_qpolynomial_coeff( - __isl_keep isl_qpolynomial *qp, - enum isl_dim_type type, unsigned t_pos, int deg) -{ - unsigned g_pos; - struct isl_upoly *up; - isl_qpolynomial *c; - - if (!qp) - return NULL; - - isl_assert(qp->div->ctx, t_pos < isl_dim_size(qp->dim, type), - return NULL); - - g_pos = pos(qp->dim, type) + t_pos; - up = isl_upoly_coeff(qp->upoly, g_pos, deg); - - c = isl_qpolynomial_alloc(isl_dim_copy(qp->dim), qp->div->n_row, up); - if (!c) - return NULL; - isl_mat_free(c->div); - c->div = isl_mat_copy(qp->div); - if (!c->div) - goto error; - return c; -error: - isl_qpolynomial_free(c); - return NULL; -} - -/* Homogenize the polynomial in the variables first (inclusive) up to - * last (exclusive) by inserting powers of variable first. - * Variable first is assumed not to appear in the input. - */ -__isl_give struct isl_upoly *isl_upoly_homogenize( - __isl_take struct isl_upoly *up, int deg, int target, - int first, int last) -{ - int i; - struct isl_upoly_rec *rec; - - if (!up) - return NULL; - if (isl_upoly_is_zero(up)) - return up; - if (deg == target) - return up; - if (isl_upoly_is_cst(up) || up->var < first) { - struct isl_upoly *hom; - - hom = isl_upoly_var_pow(up->ctx, first, target - deg); - if (!hom) - goto error; - rec = isl_upoly_as_rec(hom); - rec->p[target - deg] = isl_upoly_mul(rec->p[target - deg], up); - - return hom; - } - - up = isl_upoly_cow(up); - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - for (i = 0; i < rec->n; ++i) { - if (isl_upoly_is_zero(rec->p[i])) - continue; - rec->p[i] = isl_upoly_homogenize(rec->p[i], - up->var < last ? deg + i : i, target, - first, last); - if (!rec->p[i]) - goto error; - } - - return up; -error: - isl_upoly_free(up); - return NULL; -} - -/* Homogenize the polynomial in the set variables by introducing - * powers of an extra set variable at position 0. - */ -__isl_give isl_qpolynomial *isl_qpolynomial_homogenize( - __isl_take isl_qpolynomial *poly) -{ - unsigned ovar; - unsigned nvar; - int deg = isl_qpolynomial_degree(poly); - - if (deg < -1) - goto error; - - poly = isl_qpolynomial_insert_dims(poly, isl_dim_set, 0, 1); - poly = isl_qpolynomial_cow(poly); - if (!poly) - goto error; - - ovar = isl_dim_offset(poly->dim, isl_dim_set); - nvar = isl_dim_size(poly->dim, isl_dim_set); - poly->upoly = isl_upoly_homogenize(poly->upoly, 0, deg, - ovar, ovar + nvar); - if (!poly->upoly) - goto error; - - return poly; -error: - isl_qpolynomial_free(poly); - return NULL; -} - -__isl_give isl_term *isl_term_alloc(__isl_take isl_dim *dim, - __isl_take isl_mat *div) -{ - isl_term *term; - int n; - - if (!dim || !div) - goto error; - - n = isl_dim_total(dim) + div->n_row; - - term = isl_calloc(dim->ctx, struct isl_term, - sizeof(struct isl_term) + (n - 1) * sizeof(int)); - if (!term) - goto error; - - term->ref = 1; - term->dim = dim; - term->div = div; - isl_int_init(term->n); - isl_int_init(term->d); - - return term; -error: - isl_dim_free(dim); - isl_mat_free(div); - return NULL; -} - -__isl_give isl_term *isl_term_copy(__isl_keep isl_term *term) -{ - if (!term) - return NULL; - - term->ref++; - return term; -} - -__isl_give isl_term *isl_term_dup(__isl_keep isl_term *term) -{ - int i; - isl_term *dup; - unsigned total; - - if (term) - return NULL; - - total = isl_dim_total(term->dim) + term->div->n_row; - - dup = isl_term_alloc(isl_dim_copy(term->dim), isl_mat_copy(term->div)); - if (!dup) - return NULL; - - isl_int_set(dup->n, term->n); - isl_int_set(dup->d, term->d); - - for (i = 0; i < total; ++i) - dup->pow[i] = term->pow[i]; - - return dup; -} - -__isl_give isl_term *isl_term_cow(__isl_take isl_term *term) -{ - if (!term) - return NULL; - - if (term->ref == 1) - return term; - term->ref--; - return isl_term_dup(term); -} - -void isl_term_free(__isl_take isl_term *term) -{ - if (!term) - return; - - if (--term->ref > 0) - return; - - isl_dim_free(term->dim); - isl_mat_free(term->div); - isl_int_clear(term->n); - isl_int_clear(term->d); - free(term); -} - -unsigned isl_term_dim(__isl_keep isl_term *term, enum isl_dim_type type) -{ - if (!term) - return 0; - - switch (type) { - case isl_dim_param: - case isl_dim_in: - case isl_dim_out: return isl_dim_size(term->dim, type); - case isl_dim_div: return term->div->n_row; - case isl_dim_all: return isl_dim_total(term->dim) + term->div->n_row; - default: return 0; - } -} - -isl_ctx *isl_term_get_ctx(__isl_keep isl_term *term) -{ - return term ? term->dim->ctx : NULL; -} - -void isl_term_get_num(__isl_keep isl_term *term, isl_int *n) -{ - if (!term) - return; - isl_int_set(*n, term->n); -} - -void isl_term_get_den(__isl_keep isl_term *term, isl_int *d) -{ - if (!term) - return; - isl_int_set(*d, term->d); -} - -int isl_term_get_exp(__isl_keep isl_term *term, - enum isl_dim_type type, unsigned pos) -{ - if (!term) - return -1; - - isl_assert(term->dim->ctx, pos < isl_term_dim(term, type), return -1); - - if (type >= isl_dim_set) - pos += isl_dim_size(term->dim, isl_dim_param); - if (type >= isl_dim_div) - pos += isl_dim_size(term->dim, isl_dim_set); - - return term->pow[pos]; -} - -__isl_give isl_div *isl_term_get_div(__isl_keep isl_term *term, unsigned pos) -{ - isl_basic_map *bmap; - unsigned total; - int k; - - if (!term) - return NULL; - - isl_assert(term->dim->ctx, pos < isl_term_dim(term, isl_dim_div), - return NULL); - - total = term->div->n_col - term->div->n_row - 2; - /* No nested divs for now */ - isl_assert(term->dim->ctx, - isl_seq_first_non_zero(term->div->row[pos] + 2 + total, - term->div->n_row) == -1, - return NULL); - - bmap = isl_basic_map_alloc_dim(isl_dim_copy(term->dim), 1, 0, 0); - if ((k = isl_basic_map_alloc_div(bmap)) < 0) - goto error; - - isl_seq_cpy(bmap->div[k], term->div->row[pos], 2 + total); - - return isl_basic_map_div(bmap, k); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_term *isl_upoly_foreach_term(__isl_keep struct isl_upoly *up, - int (*fn)(__isl_take isl_term *term, void *user), - __isl_take isl_term *term, void *user) -{ - int i; - struct isl_upoly_rec *rec; - - if (!up || !term) - goto error; - - if (isl_upoly_is_zero(up)) - return term; - - isl_assert(up->ctx, !isl_upoly_is_nan(up), goto error); - isl_assert(up->ctx, !isl_upoly_is_infty(up), goto error); - isl_assert(up->ctx, !isl_upoly_is_neginfty(up), goto error); - - if (isl_upoly_is_cst(up)) { - struct isl_upoly_cst *cst; - cst = isl_upoly_as_cst(up); - if (!cst) - goto error; - term = isl_term_cow(term); - if (!term) - goto error; - isl_int_set(term->n, cst->n); - isl_int_set(term->d, cst->d); - if (fn(isl_term_copy(term), user) < 0) - goto error; - return term; - } - - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - for (i = 0; i < rec->n; ++i) { - term = isl_term_cow(term); - if (!term) - goto error; - term->pow[up->var] = i; - term = isl_upoly_foreach_term(rec->p[i], fn, term, user); - if (!term) - goto error; - } - term->pow[up->var] = 0; - - return term; -error: - isl_term_free(term); - return NULL; -} - -int isl_qpolynomial_foreach_term(__isl_keep isl_qpolynomial *qp, - int (*fn)(__isl_take isl_term *term, void *user), void *user) -{ - isl_term *term; - - if (!qp) - return -1; - - term = isl_term_alloc(isl_dim_copy(qp->dim), isl_mat_copy(qp->div)); - if (!term) - return -1; - - term = isl_upoly_foreach_term(qp->upoly, fn, term, user); - - isl_term_free(term); - - return term ? 0 : -1; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_from_term(__isl_take isl_term *term) -{ - struct isl_upoly *up; - isl_qpolynomial *qp; - int i, n; - - if (!term) - return NULL; - - n = isl_dim_total(term->dim) + term->div->n_row; - - up = isl_upoly_rat_cst(term->dim->ctx, term->n, term->d); - for (i = 0; i < n; ++i) { - if (!term->pow[i]) - continue; - up = isl_upoly_mul(up, - isl_upoly_var_pow(term->dim->ctx, i, term->pow[i])); - } - - qp = isl_qpolynomial_alloc(isl_dim_copy(term->dim), term->div->n_row, up); - if (!qp) - goto error; - isl_mat_free(qp->div); - qp->div = isl_mat_copy(term->div); - if (!qp->div) - goto error; - - isl_term_free(term); - return qp; -error: - isl_qpolynomial_free(qp); - isl_term_free(term); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_lift(__isl_take isl_qpolynomial *qp, - __isl_take isl_dim *dim) -{ - int i; - int extra; - unsigned total; - - if (!qp || !dim) - goto error; - - if (isl_dim_equal(qp->dim, dim)) { - isl_dim_free(dim); - return qp; - } - - qp = isl_qpolynomial_cow(qp); - if (!qp) - goto error; - - extra = isl_dim_size(dim, isl_dim_set) - - isl_dim_size(qp->dim, isl_dim_set); - total = isl_dim_total(qp->dim); - if (qp->div->n_row) { - int *exp; - - exp = isl_alloc_array(qp->div->ctx, int, qp->div->n_row); - if (!exp) - goto error; - for (i = 0; i < qp->div->n_row; ++i) - exp[i] = extra + i; - qp->upoly = expand(qp->upoly, exp, total); - free(exp); - if (!qp->upoly) - goto error; - } - qp->div = isl_mat_insert_cols(qp->div, 2 + total, extra); - if (!qp->div) - goto error; - for (i = 0; i < qp->div->n_row; ++i) - isl_seq_clr(qp->div->row[i] + 2 + total, extra); - - isl_dim_free(qp->dim); - qp->dim = dim; - - return qp; -error: - isl_dim_free(dim); - isl_qpolynomial_free(qp); - return NULL; -} - -/* For each parameter or variable that does not appear in qp, - * first eliminate the variable from all constraints and then set it to zero. - */ -static __isl_give isl_set *fix_inactive(__isl_take isl_set *set, - __isl_keep isl_qpolynomial *qp) -{ - int *active = NULL; - int i; - int d; - unsigned nparam; - unsigned nvar; - - if (!set || !qp) - goto error; - - d = isl_dim_total(set->dim); - active = isl_calloc_array(set->ctx, int, d); - if (set_active(qp, active) < 0) - goto error; - - for (i = 0; i < d; ++i) - if (!active[i]) - break; - - if (i == d) { - free(active); - return set; - } - - nparam = isl_dim_size(set->dim, isl_dim_param); - nvar = isl_dim_size(set->dim, isl_dim_set); - for (i = 0; i < nparam; ++i) { - if (active[i]) - continue; - set = isl_set_eliminate(set, isl_dim_param, i, 1); - set = isl_set_fix_si(set, isl_dim_param, i, 0); - } - for (i = 0; i < nvar; ++i) { - if (active[nparam + i]) - continue; - set = isl_set_eliminate(set, isl_dim_set, i, 1); - set = isl_set_fix_si(set, isl_dim_set, i, 0); - } - - free(active); - - return set; -error: - free(active); - isl_set_free(set); - return NULL; -} - -struct isl_opt_data { - isl_qpolynomial *qp; - int first; - isl_qpolynomial *opt; - int max; -}; - -static int opt_fn(__isl_take isl_point *pnt, void *user) -{ - struct isl_opt_data *data = (struct isl_opt_data *)user; - isl_qpolynomial *val; - - val = isl_qpolynomial_eval(isl_qpolynomial_copy(data->qp), pnt); - if (data->first) { - data->first = 0; - data->opt = val; - } else if (data->max) { - data->opt = isl_qpolynomial_max_cst(data->opt, val); - } else { - data->opt = isl_qpolynomial_min_cst(data->opt, val); - } - - return 0; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_opt_on_domain( - __isl_take isl_qpolynomial *qp, __isl_take isl_set *set, int max) -{ - struct isl_opt_data data = { NULL, 1, NULL, max }; - - if (!set || !qp) - goto error; - - if (isl_upoly_is_cst(qp->upoly)) { - isl_set_free(set); - return qp; - } - - set = fix_inactive(set, qp); - - data.qp = qp; - if (isl_set_foreach_point(set, opt_fn, &data) < 0) - goto error; - - if (data.first) - data.opt = isl_qpolynomial_zero(isl_qpolynomial_get_dim(qp)); - - isl_set_free(set); - isl_qpolynomial_free(qp); - return data.opt; -error: - isl_set_free(set); - isl_qpolynomial_free(qp); - isl_qpolynomial_free(data.opt); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_morph(__isl_take isl_qpolynomial *qp, - __isl_take isl_morph *morph) -{ - int i; - int n_sub; - isl_ctx *ctx; - struct isl_upoly **subs; - isl_mat *mat; - - qp = isl_qpolynomial_cow(qp); - if (!qp || !morph) - goto error; - - ctx = qp->dim->ctx; - isl_assert(ctx, isl_dim_equal(qp->dim, morph->dom->dim), goto error); - - n_sub = morph->inv->n_row - 1; - if (morph->inv->n_row != morph->inv->n_col) - n_sub += qp->div->n_row; - subs = isl_calloc_array(ctx, struct isl_upoly *, n_sub); - if (!subs) - goto error; - - for (i = 0; 1 + i < morph->inv->n_row; ++i) - subs[i] = isl_upoly_from_affine(ctx, morph->inv->row[1 + i], - morph->inv->row[0][0], morph->inv->n_col); - if (morph->inv->n_row != morph->inv->n_col) - for (i = 0; i < qp->div->n_row; ++i) - subs[morph->inv->n_row - 1 + i] = - isl_upoly_var_pow(ctx, morph->inv->n_col - 1 + i, 1); - - qp->upoly = isl_upoly_subs(qp->upoly, 0, n_sub, subs); - - for (i = 0; i < n_sub; ++i) - isl_upoly_free(subs[i]); - free(subs); - - mat = isl_mat_diagonal(isl_mat_identity(ctx, 1), isl_mat_copy(morph->inv)); - mat = isl_mat_diagonal(mat, isl_mat_identity(ctx, qp->div->n_row)); - qp->div = isl_mat_product(qp->div, mat); - isl_dim_free(qp->dim); - qp->dim = isl_dim_copy(morph->ran->dim); - - if (!qp->upoly || !qp->div || !qp->dim) - goto error; - - isl_morph_free(morph); - - return qp; -error: - isl_qpolynomial_free(qp); - isl_morph_free(morph); - return NULL; -} - -static int neg_entry(void **entry, void *user) -{ - isl_pw_qpolynomial **pwqp = (isl_pw_qpolynomial **)entry; - - *pwqp = isl_pw_qpolynomial_neg(*pwqp); - - return *pwqp ? 0 : -1; -} - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_neg( - __isl_take isl_union_pw_qpolynomial *upwqp) -{ - upwqp = isl_union_pw_qpolynomial_cow(upwqp); - if (!upwqp) - return NULL; - - if (isl_hash_table_foreach(upwqp->dim->ctx, &upwqp->table, - &neg_entry, NULL) < 0) - goto error; - - return upwqp; -error: - isl_union_pw_qpolynomial_free(upwqp); - return NULL; -} - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_sub( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2) -{ - return isl_union_pw_qpolynomial_add(upwqp1, - isl_union_pw_qpolynomial_neg(upwqp2)); -} - -static int mul_entry(void **entry, void *user) -{ - struct isl_union_pw_qpolynomial_match_bin_data *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - isl_pw_qpolynomial *pwpq = *entry; - int empty; - - hash = isl_dim_get_hash(pwpq->dim); - entry2 = isl_hash_table_find(data->u2->dim->ctx, &data->u2->table, - hash, &has_dim, pwpq->dim, 0); - if (!entry2) - return 0; - - pwpq = isl_pw_qpolynomial_copy(pwpq); - pwpq = isl_pw_qpolynomial_mul(pwpq, - isl_pw_qpolynomial_copy(entry2->data)); - - empty = isl_pw_qpolynomial_is_zero(pwpq); - if (empty < 0) { - isl_pw_qpolynomial_free(pwpq); - return -1; - } - if (empty) { - isl_pw_qpolynomial_free(pwpq); - return 0; - } - - data->res = isl_union_pw_qpolynomial_add_pw_qpolynomial(data->res, pwpq); - - return 0; -} - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_mul( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2) -{ - return match_bin_op(upwqp1, upwqp2, &mul_entry); -} - -/* Reorder the columns of the given div definitions according to the - * given reordering. - */ -static __isl_give isl_mat *reorder_divs(__isl_take isl_mat *div, - __isl_take isl_reordering *r) -{ - int i, j; - isl_mat *mat; - int extra; - - if (!div || !r) - goto error; - - extra = isl_dim_total(r->dim) + div->n_row - r->len; - mat = isl_mat_alloc(div->ctx, div->n_row, div->n_col + extra); - if (!mat) - goto error; - - for (i = 0; i < div->n_row; ++i) { - isl_seq_cpy(mat->row[i], div->row[i], 2); - isl_seq_clr(mat->row[i] + 2, mat->n_col - 2); - for (j = 0; j < r->len; ++j) - isl_int_set(mat->row[i][2 + r->pos[j]], - div->row[i][2 + j]); - } - - isl_reordering_free(r); - isl_mat_free(div); - return mat; -error: - isl_reordering_free(r); - isl_mat_free(div); - return NULL; -} - -/* Reorder the dimension of "qp" according to the given reordering. - */ -__isl_give isl_qpolynomial *isl_qpolynomial_realign( - __isl_take isl_qpolynomial *qp, __isl_take isl_reordering *r) -{ - qp = isl_qpolynomial_cow(qp); - if (!qp) - goto error; - - r = isl_reordering_extend(r, qp->div->n_row); - if (!r) - goto error; - - qp->div = reorder_divs(qp->div, isl_reordering_copy(r)); - if (!qp->div) - goto error; - - qp->upoly = reorder(qp->upoly, r->pos); - if (!qp->upoly) - goto error; - - qp = isl_qpolynomial_reset_dim(qp, isl_dim_copy(r->dim)); - - isl_reordering_free(r); - return qp; -error: - isl_qpolynomial_free(qp); - isl_reordering_free(r); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_align_params( - __isl_take isl_qpolynomial *qp, __isl_take isl_dim *model) -{ - if (!qp || !model) - goto error; - - if (!isl_dim_match(qp->dim, isl_dim_param, model, isl_dim_param)) { - isl_reordering *exp; - - model = isl_dim_drop(model, isl_dim_in, - 0, isl_dim_size(model, isl_dim_in)); - model = isl_dim_drop(model, isl_dim_out, - 0, isl_dim_size(model, isl_dim_out)); - exp = isl_parameter_alignment_reordering(qp->dim, model); - exp = isl_reordering_extend_dim(exp, - isl_qpolynomial_get_dim(qp)); - qp = isl_qpolynomial_realign(qp, exp); - } - - isl_dim_free(model); - return qp; -error: - isl_dim_free(model); - isl_qpolynomial_free(qp); - return NULL; -} - -struct isl_split_periods_data { - int max_periods; - isl_pw_qpolynomial *res; -}; - -/* Create a slice where the integer division "div" has the fixed value "v". - * In particular, if "div" refers to floor(f/m), then create a slice - * - * m v <= f <= m v + (m - 1) - * - * or - * - * f - m v >= 0 - * -f + m v + (m - 1) >= 0 - */ -static __isl_give isl_set *set_div_slice(__isl_take isl_dim *dim, - __isl_keep isl_qpolynomial *qp, int div, isl_int v) -{ - int total; - isl_basic_set *bset = NULL; - int k; - - if (!dim || !qp) - goto error; - - total = isl_dim_total(dim); - bset = isl_basic_set_alloc_dim(isl_dim_copy(dim), 0, 0, 2); - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_cpy(bset->ineq[k], qp->div->row[div] + 1, 1 + total); - isl_int_submul(bset->ineq[k][0], v, qp->div->row[div][0]); - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_neg(bset->ineq[k], qp->div->row[div] + 1, 1 + total); - isl_int_addmul(bset->ineq[k][0], v, qp->div->row[div][0]); - isl_int_add(bset->ineq[k][0], bset->ineq[k][0], qp->div->row[div][0]); - isl_int_sub_ui(bset->ineq[k][0], bset->ineq[k][0], 1); - - isl_dim_free(dim); - return isl_set_from_basic_set(bset); -error: - isl_basic_set_free(bset); - isl_dim_free(dim); - return NULL; -} - -static int split_periods(__isl_take isl_set *set, - __isl_take isl_qpolynomial *qp, void *user); - -/* Create a slice of the domain "set" such that integer division "div" - * has the fixed value "v" and add the results to data->res, - * replacing the integer division by "v" in "qp". - */ -static int set_div(__isl_take isl_set *set, - __isl_take isl_qpolynomial *qp, int div, isl_int v, - struct isl_split_periods_data *data) -{ - int i; - int total; - isl_set *slice; - struct isl_upoly *cst; - - slice = set_div_slice(isl_set_get_dim(set), qp, div, v); - set = isl_set_intersect(set, slice); - - if (!qp) - goto error; - - total = isl_dim_total(qp->dim); - - for (i = div + 1; i < qp->div->n_row; ++i) { - if (isl_int_is_zero(qp->div->row[i][2 + total + div])) - continue; - isl_int_addmul(qp->div->row[i][1], - qp->div->row[i][2 + total + div], v); - isl_int_set_si(qp->div->row[i][2 + total + div], 0); - } - - cst = isl_upoly_rat_cst(qp->dim->ctx, v, qp->dim->ctx->one); - qp = substitute_div(qp, div, cst); - - return split_periods(set, qp, data); -error: - isl_set_free(set); - isl_qpolynomial_free(qp); - return -1; -} - -/* Split the domain "set" such that integer division "div" - * has a fixed value (ranging from "min" to "max") on each slice - * and add the results to data->res. - */ -static int split_div(__isl_take isl_set *set, - __isl_take isl_qpolynomial *qp, int div, isl_int min, isl_int max, - struct isl_split_periods_data *data) -{ - for (; isl_int_le(min, max); isl_int_add_ui(min, min, 1)) { - isl_set *set_i = isl_set_copy(set); - isl_qpolynomial *qp_i = isl_qpolynomial_copy(qp); - - if (set_div(set_i, qp_i, div, min, data) < 0) - goto error; - } - isl_set_free(set); - isl_qpolynomial_free(qp); - return 0; -error: - isl_set_free(set); - isl_qpolynomial_free(qp); - return -1; -} - -/* If "qp" refers to any integer division - * that can only attain "max_periods" distinct values on "set" - * then split the domain along those distinct values. - * Add the results (or the original if no splitting occurs) - * to data->res. - */ -static int split_periods(__isl_take isl_set *set, - __isl_take isl_qpolynomial *qp, void *user) -{ - int i; - isl_pw_qpolynomial *pwqp; - struct isl_split_periods_data *data; - isl_int min, max; - int total; - int r = 0; - - data = (struct isl_split_periods_data *)user; - - if (!set || !qp) - goto error; - - if (qp->div->n_row == 0) { - pwqp = isl_pw_qpolynomial_alloc(set, qp); - data->res = isl_pw_qpolynomial_add_disjoint(data->res, pwqp); - return 0; - } - - isl_int_init(min); - isl_int_init(max); - total = isl_dim_total(qp->dim); - for (i = 0; i < qp->div->n_row; ++i) { - enum isl_lp_result lp_res; - - if (isl_seq_first_non_zero(qp->div->row[i] + 2 + total, - qp->div->n_row) != -1) - continue; - - lp_res = isl_set_solve_lp(set, 0, qp->div->row[i] + 1, - set->ctx->one, &min, NULL, NULL); - if (lp_res == isl_lp_error) - goto error2; - if (lp_res == isl_lp_unbounded || lp_res == isl_lp_empty) - continue; - isl_int_fdiv_q(min, min, qp->div->row[i][0]); - - lp_res = isl_set_solve_lp(set, 1, qp->div->row[i] + 1, - set->ctx->one, &max, NULL, NULL); - if (lp_res == isl_lp_error) - goto error2; - if (lp_res == isl_lp_unbounded || lp_res == isl_lp_empty) - continue; - isl_int_fdiv_q(max, max, qp->div->row[i][0]); - - isl_int_sub(max, max, min); - if (isl_int_cmp_si(max, data->max_periods) < 0) { - isl_int_add(max, max, min); - break; - } - } - - if (i < qp->div->n_row) { - r = split_div(set, qp, i, min, max, data); - } else { - pwqp = isl_pw_qpolynomial_alloc(set, qp); - data->res = isl_pw_qpolynomial_add_disjoint(data->res, pwqp); - } - - isl_int_clear(max); - isl_int_clear(min); - - return r; -error2: - isl_int_clear(max); - isl_int_clear(min); -error: - isl_set_free(set); - isl_qpolynomial_free(qp); - return -1; -} - -/* If any quasi-polynomial in pwqp refers to any integer division - * that can only attain "max_periods" distinct values on its domain - * then split the domain along those distinct values. - */ -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_split_periods( - __isl_take isl_pw_qpolynomial *pwqp, int max_periods) -{ - struct isl_split_periods_data data; - - data.max_periods = max_periods; - data.res = isl_pw_qpolynomial_zero(isl_pw_qpolynomial_get_dim(pwqp)); - - if (isl_pw_qpolynomial_foreach_piece(pwqp, &split_periods, &data) < 0) - goto error; - - isl_pw_qpolynomial_free(pwqp); - - return data.res; -error: - isl_pw_qpolynomial_free(data.res); - isl_pw_qpolynomial_free(pwqp); - return NULL; -} - -/* Construct a piecewise quasipolynomial that is constant on the given - * domain. In particular, it is - * 0 if cst == 0 - * 1 if cst == 1 - * infinity if cst == -1 - */ -static __isl_give isl_pw_qpolynomial *constant_on_domain( - __isl_take isl_basic_set *bset, int cst) -{ - isl_dim *dim; - isl_qpolynomial *qp; - - if (!bset) - return NULL; - - bset = isl_basic_map_domain(isl_basic_map_from_range(bset)); - dim = isl_basic_set_get_dim(bset); - if (cst < 0) - qp = isl_qpolynomial_infty(dim); - else if (cst == 0) - qp = isl_qpolynomial_zero(dim); - else - qp = isl_qpolynomial_one(dim); - return isl_pw_qpolynomial_alloc(isl_set_from_basic_set(bset), qp); -} - -/* Factor bset, call fn on each of the factors and return the product. - * - * If no factors can be found, simply call fn on the input. - * Otherwise, construct the factors based on the factorizer, - * call fn on each factor and compute the product. - */ -static __isl_give isl_pw_qpolynomial *compressed_multiplicative_call( - __isl_take isl_basic_set *bset, - __isl_give isl_pw_qpolynomial *(*fn)(__isl_take isl_basic_set *bset)) -{ - int i, n; - isl_dim *dim; - isl_set *set; - isl_factorizer *f; - isl_qpolynomial *qp; - isl_pw_qpolynomial *pwqp; - unsigned nparam; - unsigned nvar; - - f = isl_basic_set_factorizer(bset); - if (!f) - goto error; - if (f->n_group == 0) { - isl_factorizer_free(f); - return fn(bset); - } - - nparam = isl_basic_set_dim(bset, isl_dim_param); - nvar = isl_basic_set_dim(bset, isl_dim_set); - - dim = isl_basic_set_get_dim(bset); - dim = isl_dim_domain(dim); - set = isl_set_universe(isl_dim_copy(dim)); - qp = isl_qpolynomial_one(dim); - pwqp = isl_pw_qpolynomial_alloc(set, qp); - - bset = isl_morph_basic_set(isl_morph_copy(f->morph), bset); - - for (i = 0, n = 0; i < f->n_group; ++i) { - isl_basic_set *bset_i; - isl_pw_qpolynomial *pwqp_i; - - bset_i = isl_basic_set_copy(bset); - bset_i = isl_basic_set_drop_constraints_involving(bset_i, - nparam + n + f->len[i], nvar - n - f->len[i]); - bset_i = isl_basic_set_drop_constraints_involving(bset_i, - nparam, n); - bset_i = isl_basic_set_drop(bset_i, isl_dim_set, - n + f->len[i], nvar - n - f->len[i]); - bset_i = isl_basic_set_drop(bset_i, isl_dim_set, 0, n); - - pwqp_i = fn(bset_i); - pwqp = isl_pw_qpolynomial_mul(pwqp, pwqp_i); - - n += f->len[i]; - } - - isl_basic_set_free(bset); - isl_factorizer_free(f); - - return pwqp; -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Factor bset, call fn on each of the factors and return the product. - * The function is assumed to evaluate to zero on empty domains, - * to one on zero-dimensional domains and to infinity on unbounded domains - * and will not be called explicitly on zero-dimensional or unbounded domains. - * - * We first check for some special cases and remove all equalities. - * Then we hand over control to compressed_multiplicative_call. - */ -__isl_give isl_pw_qpolynomial *isl_basic_set_multiplicative_call( - __isl_take isl_basic_set *bset, - __isl_give isl_pw_qpolynomial *(*fn)(__isl_take isl_basic_set *bset)) -{ - int bounded; - isl_morph *morph; - isl_pw_qpolynomial *pwqp; - unsigned orig_nvar, final_nvar; - - if (!bset) - return NULL; - - if (isl_basic_set_plain_is_empty(bset)) - return constant_on_domain(bset, 0); - - orig_nvar = isl_basic_set_dim(bset, isl_dim_set); - - if (orig_nvar == 0) - return constant_on_domain(bset, 1); - - bounded = isl_basic_set_is_bounded(bset); - if (bounded < 0) - goto error; - if (!bounded) - return constant_on_domain(bset, -1); - - if (bset->n_eq == 0) - return compressed_multiplicative_call(bset, fn); - - morph = isl_basic_set_full_compression(bset); - bset = isl_morph_basic_set(isl_morph_copy(morph), bset); - - final_nvar = isl_basic_set_dim(bset, isl_dim_set); - - pwqp = compressed_multiplicative_call(bset, fn); - - morph = isl_morph_remove_dom_dims(morph, isl_dim_set, 0, orig_nvar); - morph = isl_morph_remove_ran_dims(morph, isl_dim_set, 0, final_nvar); - morph = isl_morph_inverse(morph); - - pwqp = isl_pw_qpolynomial_morph(pwqp, morph); - - return pwqp; -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Drop all floors in "qp", turning each integer division [a/m] into - * a rational division a/m. If "down" is set, then the integer division - * is replaces by (a-(m-1))/m instead. - */ -static __isl_give isl_qpolynomial *qp_drop_floors( - __isl_take isl_qpolynomial *qp, int down) -{ - int i; - struct isl_upoly *s; - - if (!qp) - return NULL; - if (qp->div->n_row == 0) - return qp; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - - for (i = qp->div->n_row - 1; i >= 0; --i) { - if (down) { - isl_int_sub(qp->div->row[i][1], - qp->div->row[i][1], qp->div->row[i][0]); - isl_int_add_ui(qp->div->row[i][1], - qp->div->row[i][1], 1); - } - s = isl_upoly_from_affine(qp->dim->ctx, qp->div->row[i] + 1, - qp->div->row[i][0], qp->div->n_col - 1); - qp = substitute_div(qp, i, s); - if (!qp) - return NULL; - } - - return qp; -} - -/* Drop all floors in "pwqp", turning each integer division [a/m] into - * a rational division a/m. - */ -static __isl_give isl_pw_qpolynomial *pwqp_drop_floors( - __isl_take isl_pw_qpolynomial *pwqp) -{ - int i; - - if (!pwqp) - return NULL; - - if (isl_pw_qpolynomial_is_zero(pwqp)) - return pwqp; - - pwqp = isl_pw_qpolynomial_cow(pwqp); - if (!pwqp) - return NULL; - - for (i = 0; i < pwqp->n; ++i) { - pwqp->p[i].qp = qp_drop_floors(pwqp->p[i].qp, 0); - if (!pwqp->p[i].qp) - goto error; - } - - return pwqp; -error: - isl_pw_qpolynomial_free(pwqp); - return NULL; -} - -/* Adjust all the integer divisions in "qp" such that they are at least - * one over the given orthant (identified by "signs"). This ensures - * that they will still be non-negative even after subtracting (m-1)/m. - * - * In particular, f is replaced by f' + v, changing f = [a/m] - * to f' = [(a - m v)/m]. - * If the constant term k in a is smaller than m, - * the constant term of v is set to floor(k/m) - 1. - * For any other term, if the coefficient c and the variable x have - * the same sign, then no changes are needed. - * Otherwise, if the variable is positive (and c is negative), - * then the coefficient of x in v is set to floor(c/m). - * If the variable is negative (and c is positive), - * then the coefficient of x in v is set to ceil(c/m). - */ -static __isl_give isl_qpolynomial *make_divs_pos(__isl_take isl_qpolynomial *qp, - int *signs) -{ - int i, j; - int total; - isl_vec *v = NULL; - struct isl_upoly *s; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - qp->div = isl_mat_cow(qp->div); - if (!qp->div) - goto error; - - total = isl_dim_total(qp->dim); - v = isl_vec_alloc(qp->div->ctx, qp->div->n_col - 1); - - for (i = 0; i < qp->div->n_row; ++i) { - isl_int *row = qp->div->row[i]; - v = isl_vec_clr(v); - if (!v) - goto error; - if (isl_int_lt(row[1], row[0])) { - isl_int_fdiv_q(v->el[0], row[1], row[0]); - isl_int_sub_ui(v->el[0], v->el[0], 1); - isl_int_submul(row[1], row[0], v->el[0]); - } - for (j = 0; j < total; ++j) { - if (isl_int_sgn(row[2 + j]) * signs[j] >= 0) - continue; - if (signs[j] < 0) - isl_int_cdiv_q(v->el[1 + j], row[2 + j], row[0]); - else - isl_int_fdiv_q(v->el[1 + j], row[2 + j], row[0]); - isl_int_submul(row[2 + j], row[0], v->el[1 + j]); - } - for (j = 0; j < i; ++j) { - if (isl_int_sgn(row[2 + total + j]) >= 0) - continue; - isl_int_fdiv_q(v->el[1 + total + j], - row[2 + total + j], row[0]); - isl_int_submul(row[2 + total + j], - row[0], v->el[1 + total + j]); - } - for (j = i + 1; j < qp->div->n_row; ++j) { - if (isl_int_is_zero(qp->div->row[j][2 + total + i])) - continue; - isl_seq_combine(qp->div->row[j] + 1, - qp->div->ctx->one, qp->div->row[j] + 1, - qp->div->row[j][2 + total + i], v->el, v->size); - } - isl_int_set_si(v->el[1 + total + i], 1); - s = isl_upoly_from_affine(qp->dim->ctx, v->el, - qp->div->ctx->one, v->size); - qp->upoly = isl_upoly_subs(qp->upoly, total + i, 1, &s); - isl_upoly_free(s); - if (!qp->upoly) - goto error; - } - - isl_vec_free(v); - return qp; -error: - isl_vec_free(v); - isl_qpolynomial_free(qp); - return NULL; -} - -struct isl_to_poly_data { - int sign; - isl_pw_qpolynomial *res; - isl_qpolynomial *qp; -}; - -/* Appoximate data->qp by a polynomial on the orthant identified by "signs". - * We first make all integer divisions positive and then split the - * quasipolynomials into terms with sign data->sign (the direction - * of the requested approximation) and terms with the opposite sign. - * In the first set of terms, each integer division [a/m] is - * overapproximated by a/m, while in the second it is underapproximated - * by (a-(m-1))/m. - */ -static int to_polynomial_on_orthant(__isl_take isl_set *orthant, int *signs, - void *user) -{ - struct isl_to_poly_data *data = user; - isl_pw_qpolynomial *t; - isl_qpolynomial *qp, *up, *down; - - qp = isl_qpolynomial_copy(data->qp); - qp = make_divs_pos(qp, signs); - - up = isl_qpolynomial_terms_of_sign(qp, signs, data->sign); - up = qp_drop_floors(up, 0); - down = isl_qpolynomial_terms_of_sign(qp, signs, -data->sign); - down = qp_drop_floors(down, 1); - - isl_qpolynomial_free(qp); - qp = isl_qpolynomial_add(up, down); - - t = isl_pw_qpolynomial_alloc(orthant, qp); - data->res = isl_pw_qpolynomial_add_disjoint(data->res, t); - - return 0; -} - -/* Approximate each quasipolynomial by a polynomial. If "sign" is positive, - * the polynomial will be an overapproximation. If "sign" is negative, - * it will be an underapproximation. If "sign" is zero, the approximation - * will lie somewhere in between. - * - * In particular, is sign == 0, we simply drop the floors, turning - * the integer divisions into rational divisions. - * Otherwise, we split the domains into orthants, make all integer divisions - * positive and then approximate each [a/m] by either a/m or (a-(m-1))/m, - * depending on the requested sign and the sign of the term in which - * the integer division appears. - */ -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_to_polynomial( - __isl_take isl_pw_qpolynomial *pwqp, int sign) -{ - int i; - struct isl_to_poly_data data; - - if (sign == 0) - return pwqp_drop_floors(pwqp); - - if (!pwqp) - return NULL; - - data.sign = sign; - data.res = isl_pw_qpolynomial_zero(isl_pw_qpolynomial_get_dim(pwqp)); - - for (i = 0; i < pwqp->n; ++i) { - if (pwqp->p[i].qp->div->n_row == 0) { - isl_pw_qpolynomial *t; - t = isl_pw_qpolynomial_alloc( - isl_set_copy(pwqp->p[i].set), - isl_qpolynomial_copy(pwqp->p[i].qp)); - data.res = isl_pw_qpolynomial_add_disjoint(data.res, t); - continue; - } - data.qp = pwqp->p[i].qp; - if (isl_set_foreach_orthant(pwqp->p[i].set, - &to_polynomial_on_orthant, &data) < 0) - goto error; - } - - isl_pw_qpolynomial_free(pwqp); - - return data.res; -error: - isl_pw_qpolynomial_free(pwqp); - isl_pw_qpolynomial_free(data.res); - return NULL; -} - -static int poly_entry(void **entry, void *user) -{ - int *sign = user; - isl_pw_qpolynomial **pwqp = (isl_pw_qpolynomial **)entry; - - *pwqp = isl_pw_qpolynomial_to_polynomial(*pwqp, *sign); - - return *pwqp ? 0 : -1; -} - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_to_polynomial( - __isl_take isl_union_pw_qpolynomial *upwqp, int sign) -{ - upwqp = isl_union_pw_qpolynomial_cow(upwqp); - if (!upwqp) - return NULL; - - if (isl_hash_table_foreach(upwqp->dim->ctx, &upwqp->table, - &poly_entry, &sign) < 0) - goto error; - - return upwqp; -error: - isl_union_pw_qpolynomial_free(upwqp); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_from_qpolynomial( - __isl_take isl_qpolynomial *qp) -{ - int i, k; - isl_dim *dim; - isl_vec *aff = NULL; - isl_basic_map *bmap = NULL; - unsigned pos; - unsigned n_div; - - if (!qp) - return NULL; - if (!isl_upoly_is_affine(qp->upoly)) - isl_die(qp->dim->ctx, isl_error_invalid, - "input quasi-polynomial not affine", goto error); - aff = isl_qpolynomial_extract_affine(qp); - if (!aff) - goto error; - dim = isl_qpolynomial_get_dim(qp); - dim = isl_dim_from_domain(dim); - pos = 1 + isl_dim_offset(dim, isl_dim_out); - dim = isl_dim_add(dim, isl_dim_out, 1); - n_div = qp->div->n_row; - bmap = isl_basic_map_alloc_dim(dim, n_div, 1, 2 * n_div); - - for (i = 0; i < n_div; ++i) { - k = isl_basic_map_alloc_div(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->div[k], qp->div->row[i], qp->div->n_col); - isl_int_set_si(bmap->div[k][qp->div->n_col], 0); - if (isl_basic_map_add_div_constraints(bmap, k) < 0) - goto error; - } - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_int_neg(bmap->eq[k][pos], aff->el[0]); - isl_seq_cpy(bmap->eq[k], aff->el + 1, pos); - isl_seq_cpy(bmap->eq[k] + pos + 1, aff->el + 1 + pos, n_div); - - isl_vec_free(aff); - isl_qpolynomial_free(qp); - bmap = isl_basic_map_finalize(bmap); - return bmap; -error: - isl_vec_free(aff); - isl_qpolynomial_free(qp); - isl_basic_map_free(bmap); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_polynomial_private.h b/cloog-0.16.3/isl/isl_polynomial_private.h deleted file mode 100644 index 8f6a7b7..0000000 --- a/cloog-0.16.3/isl/isl_polynomial_private.h +++ /dev/null @@ -1,215 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -struct isl_upoly { - int ref; - struct isl_ctx *ctx; - - int var; -}; - -struct isl_upoly_cst { - struct isl_upoly up; - isl_int n; - isl_int d; -}; - -struct isl_upoly_rec { - struct isl_upoly up; - int n; - - size_t size; - struct isl_upoly *p[]; -}; - -struct isl_qpolynomial { - int ref; - - struct isl_dim *dim; - struct isl_mat *div; - struct isl_upoly *upoly; -}; - -struct isl_term { - int ref; - - isl_int n; - isl_int d; - - struct isl_dim *dim; - struct isl_mat *div; - - int pow[1]; -}; - -struct isl_pw_qpolynomial_piece { - struct isl_set *set; - struct isl_qpolynomial *qp; -}; - -struct isl_pw_qpolynomial { - int ref; - - struct isl_dim *dim; - - int n; - - size_t size; - struct isl_pw_qpolynomial_piece p[1]; -}; - -struct isl_qpolynomial_fold { - int ref; - - enum isl_fold type; - struct isl_dim *dim; - - int n; - - size_t size; - struct isl_qpolynomial *qp[1]; -}; - -struct isl_pw_qpolynomial_fold_piece { - struct isl_set *set; - struct isl_qpolynomial_fold *fold; -}; - -struct isl_pw_qpolynomial_fold { - int ref; - - enum isl_fold type; - struct isl_dim *dim; - - int n; - - size_t size; - struct isl_pw_qpolynomial_fold_piece p[1]; -}; - -__isl_give struct isl_upoly *isl_upoly_zero(struct isl_ctx *ctx); -__isl_give struct isl_upoly *isl_upoly_copy(__isl_keep struct isl_upoly *up); -__isl_give struct isl_upoly *isl_upoly_cow(__isl_take struct isl_upoly *up); -__isl_give struct isl_upoly *isl_upoly_dup(__isl_keep struct isl_upoly *up); -void isl_upoly_free(__isl_take struct isl_upoly *up); -__isl_give struct isl_upoly *isl_upoly_mul(__isl_take struct isl_upoly *up1, - __isl_take struct isl_upoly *up2); - -int isl_upoly_is_cst(__isl_keep struct isl_upoly *up); -int isl_upoly_is_zero(__isl_keep struct isl_upoly *up); -int isl_upoly_is_one(__isl_keep struct isl_upoly *up); -int isl_upoly_is_negone(__isl_keep struct isl_upoly *up); -__isl_keep struct isl_upoly_cst *isl_upoly_as_cst(__isl_keep struct isl_upoly *up); -__isl_keep struct isl_upoly_rec *isl_upoly_as_rec(__isl_keep struct isl_upoly *up); - -__isl_give struct isl_upoly *isl_upoly_sum(__isl_take struct isl_upoly *up1, - __isl_take struct isl_upoly *up2); -__isl_give struct isl_upoly *isl_upoly_mul_isl_int( - __isl_take struct isl_upoly *up, isl_int v); - -__isl_give isl_qpolynomial *isl_qpolynomial_alloc(__isl_take isl_dim *dim, - unsigned n_div, __isl_take struct isl_upoly *up); -__isl_give isl_qpolynomial *isl_qpolynomial_cow(__isl_take isl_qpolynomial *qp); -__isl_give isl_qpolynomial *isl_qpolynomial_dup(__isl_keep isl_qpolynomial *qp); - -__isl_give isl_qpolynomial *isl_qpolynomial_cst(__isl_take isl_dim *dim, - isl_int v); -__isl_give isl_qpolynomial *isl_qpolynomial_var_pow(__isl_take isl_dim *dim, - int pos, int power); -__isl_give isl_qpolynomial *isl_qpolynomial_div_pow(__isl_take isl_div *div, - int power); -int isl_qpolynomial_is_one(__isl_keep isl_qpolynomial *qp); -int isl_qpolynomial_is_affine(__isl_keep isl_qpolynomial *qp); - -__isl_give isl_qpolynomial *isl_qpolynomial_add_on_domain( - __isl_keep isl_set *dom, - __isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2); - -int isl_qpolynomial_le_cst(__isl_keep isl_qpolynomial *qp1, - __isl_keep isl_qpolynomial *qp2); -__isl_give isl_qpolynomial *isl_qpolynomial_max_cst( - __isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2); -__isl_give isl_qpolynomial *isl_qpolynomial_min_cst( - __isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2); - -int isl_qpolynomial_degree(__isl_keep isl_qpolynomial *poly); -__isl_give isl_qpolynomial *isl_qpolynomial_coeff( - __isl_keep isl_qpolynomial *poly, - enum isl_dim_type type, unsigned pos, int deg); - -__isl_give isl_vec *isl_qpolynomial_extract_affine( - __isl_keep isl_qpolynomial *qp); -__isl_give isl_qpolynomial *isl_qpolynomial_from_affine(__isl_take isl_dim *dim, - isl_int *f, isl_int denom); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_cow( - __isl_take isl_pw_qpolynomial *pwqp); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add_piece( - __isl_take isl_pw_qpolynomial *pwqp, - __isl_take isl_set *set, __isl_take isl_qpolynomial *qp); -int isl_pw_qpolynomial_is_one(__isl_keep isl_pw_qpolynomial *pwqp); - -__isl_give isl_qpolynomial *isl_qpolynomial_opt_on_domain( - __isl_take isl_qpolynomial *qp, __isl_take isl_set *set, int max); - -enum isl_fold isl_fold_type_negate(enum isl_fold type); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_cow( - __isl_take isl_qpolynomial_fold *fold); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_dup( - __isl_keep isl_qpolynomial_fold *fold); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_cow( - __isl_take isl_pw_qpolynomial_fold *pwf); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_add_on_domain( - __isl_keep isl_set *set, - __isl_take isl_qpolynomial_fold *fold1, - __isl_take isl_qpolynomial_fold *fold2); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_fold_on_domain( - __isl_keep isl_set *set, - __isl_take isl_qpolynomial_fold *fold1, - __isl_take isl_qpolynomial_fold *fold2); - -__isl_give isl_qpolynomial *isl_qpolynomial_fold_opt_on_domain( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *set, int max); - -int isl_pw_qpolynomial_fold_covers(__isl_keep isl_pw_qpolynomial_fold *pwf1, - __isl_keep isl_pw_qpolynomial_fold *pwf2); - -__isl_give isl_qpolynomial *isl_qpolynomial_morph(__isl_take isl_qpolynomial *qp, - __isl_take isl_morph *morph); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_morph( - __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_morph *morph); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_morph( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_morph *morph); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_morph( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_morph *morph); - -__isl_give isl_qpolynomial *isl_qpolynomial_lift(__isl_take isl_qpolynomial *qp, - __isl_take isl_dim *dim); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_lift( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_dim *dim); - -__isl_give isl_qpolynomial *isl_qpolynomial_substitute_equalities( - __isl_take isl_qpolynomial *qp, __isl_take isl_basic_set *eq); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_substitute_equalities( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_basic_set *eq); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_gist( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *context); - -__isl_give isl_qpolynomial *isl_qpolynomial_realign( - __isl_take isl_qpolynomial *qp, __isl_take isl_reordering *r); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_realign( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_reordering *r); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_realign( - __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_reordering *r); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_realign( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_reordering *r); diff --git a/cloog-0.16.3/isl/isl_printer.c b/cloog-0.16.3/isl/isl_printer.c deleted file mode 100644 index fe8fab9..0000000 --- a/cloog-0.16.3/isl/isl_printer.c +++ /dev/null @@ -1,366 +0,0 @@ -#include -#include - -static __isl_give isl_printer *file_start_line(__isl_take isl_printer *p) -{ - fprintf(p->file, "%*s%s", p->indent, "", p->prefix ? p->prefix : ""); - return p; -} - -static __isl_give isl_printer *file_end_line(__isl_take isl_printer *p) -{ - fprintf(p->file, "%s\n", p->suffix ? p->suffix : ""); - return p; -} - -static __isl_give isl_printer *file_flush(__isl_take isl_printer *p) -{ - fflush(p->file); - return p; -} - -static __isl_give isl_printer *file_print_str(__isl_take isl_printer *p, - const char *s) -{ - fprintf(p->file, "%s", s); - return p; -} - -static __isl_give isl_printer *file_print_int(__isl_take isl_printer *p, int i) -{ - fprintf(p->file, "%d", i); - return p; -} - -static __isl_give isl_printer *file_print_isl_int(__isl_take isl_printer *p, isl_int i) -{ - isl_int_print(p->file, i, p->width); - return p; -} - -static int grow_buf(__isl_keep isl_printer *p, int extra) -{ - int new_size; - char *new_buf; - - if (p->buf_size == 0) - return -1; - - new_size = ((p->buf_n + extra + 1) * 3) / 2; - new_buf = isl_realloc_array(p->ctx, p->buf, char, new_size); - if (!new_buf) { - p->buf_size = 0; - return -1; - } - p->buf = new_buf; - p->buf_size = new_size; - - return 0; -} - -static __isl_give isl_printer *str_print(__isl_take isl_printer *p, - const char *s, int len) -{ - if (p->buf_n + len + 1 >= p->buf_size && grow_buf(p, len)) - goto error; - memcpy(p->buf + p->buf_n, s, len); - p->buf_n += len; - - p->buf[p->buf_n] = '\0'; - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *str_print_indent(__isl_take isl_printer *p, - int indent) -{ - int i; - - if (p->buf_n + indent + 1 >= p->buf_size && grow_buf(p, indent)) - goto error; - for (i = 0; i < indent; ++i) - p->buf[p->buf_n++] = ' '; - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *str_start_line(__isl_take isl_printer *p) -{ - p = str_print_indent(p, p->indent); - if (p->prefix) - p = str_print(p, p->prefix, strlen(p->prefix)); - return p; -} - -static __isl_give isl_printer *str_end_line(__isl_take isl_printer *p) -{ - if (p->suffix) - p = str_print(p, p->suffix, strlen(p->suffix)); - p = str_print(p, "\n", strlen("\n")); - return p; -} - -static __isl_give isl_printer *str_flush(__isl_take isl_printer *p) -{ - p->buf_n = 0; - return p; -} - -static __isl_give isl_printer *str_print_str(__isl_take isl_printer *p, - const char *s) -{ - return str_print(p, s, strlen(s)); -} - -static __isl_give isl_printer *str_print_int(__isl_take isl_printer *p, int i) -{ - int left = p->buf_size - p->buf_n; - int need = snprintf(p->buf + p->buf_n, left, "%d", i); - if (need >= left) { - if (grow_buf(p, need)) - goto error; - left = p->buf_size - p->buf_n; - need = snprintf(p->buf + p->buf_n, left, "%d", i); - } - p->buf_n += need; - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *str_print_isl_int(__isl_take isl_printer *p, - isl_int i) -{ - char *s; - int len; - isl_int_print_gmp_free_t gmp_free; - - s = isl_int_get_str(i); - len = strlen(s); - if (len < p->width) - p = str_print_indent(p, p->width - len); - p = str_print(p, s, len); - mp_get_memory_functions(NULL, NULL, &gmp_free); - (*gmp_free)(s, len + 1); - return p; -} - -struct isl_printer_ops { - __isl_give isl_printer *(*start_line)(__isl_take isl_printer *p); - __isl_give isl_printer *(*end_line)(__isl_take isl_printer *p); - __isl_give isl_printer *(*print_int)(__isl_take isl_printer *p, int i); - __isl_give isl_printer *(*print_isl_int)(__isl_take isl_printer *p, - isl_int i); - __isl_give isl_printer *(*print_str)(__isl_take isl_printer *p, - const char *s); - __isl_give isl_printer *(*flush)(__isl_take isl_printer *p); -}; - -static struct isl_printer_ops file_ops = { - file_start_line, - file_end_line, - file_print_int, - file_print_isl_int, - file_print_str, - file_flush -}; - -static struct isl_printer_ops str_ops = { - str_start_line, - str_end_line, - str_print_int, - str_print_isl_int, - str_print_str, - str_flush -}; - -__isl_give isl_printer *isl_printer_to_file(isl_ctx *ctx, FILE *file) -{ - struct isl_printer *p = isl_alloc_type(ctx, struct isl_printer); - if (!p) - return NULL; - p->ctx = ctx; - isl_ctx_ref(p->ctx); - p->ops = &file_ops; - p->file = file; - p->buf = NULL; - p->buf_n = 0; - p->buf_size = 0; - p->indent = 0; - p->output_format = ISL_FORMAT_ISL; - p->prefix = NULL; - p->suffix = NULL; - p->width = 0; - - return p; -} - -__isl_give isl_printer *isl_printer_to_str(isl_ctx *ctx) -{ - struct isl_printer *p = isl_alloc_type(ctx, struct isl_printer); - if (!p) - return NULL; - p->ctx = ctx; - isl_ctx_ref(p->ctx); - p->ops = &str_ops; - p->file = NULL; - p->buf = isl_alloc_array(ctx, char, 256); - if (!p->buf) - goto error; - p->buf_n = 0; - p->buf_size = 256; - p->indent = 0; - p->output_format = ISL_FORMAT_ISL; - p->prefix = NULL; - p->suffix = NULL; - p->width = 0; - - return p; -error: - isl_printer_free(p); - return NULL; -} - -void isl_printer_free(__isl_take isl_printer *p) -{ - if (!p) - return; - free(p->buf); - isl_ctx_deref(p->ctx); - free(p); -} - -isl_ctx *isl_printer_get_ctx(__isl_keep isl_printer *printer) -{ - return printer ? printer->ctx : NULL; -} - -__isl_give isl_printer *isl_printer_set_isl_int_width(__isl_take isl_printer *p, - int width) -{ - if (!p) - return NULL; - - p->width = width; - - return p; -} - -__isl_give isl_printer *isl_printer_set_indent(__isl_take isl_printer *p, - int indent) -{ - if (!p) - return NULL; - - p->indent = indent; - - return p; -} - -__isl_give isl_printer *isl_printer_indent(__isl_take isl_printer *p, - int indent) -{ - if (!p) - return NULL; - - p->indent += indent; - if (p->indent < 0) - p->indent = 0; - - return p; -} - -__isl_give isl_printer *isl_printer_set_prefix(__isl_take isl_printer *p, - const char *prefix) -{ - if (!p) - return NULL; - - p->prefix = prefix; - - return p; -} - -__isl_give isl_printer *isl_printer_set_suffix(__isl_take isl_printer *p, - const char *suffix) -{ - if (!p) - return NULL; - - p->suffix = suffix; - - return p; -} - -__isl_give isl_printer *isl_printer_set_output_format(__isl_take isl_printer *p, - int output_format) -{ - if (!p) - return NULL; - - p->output_format = output_format; - - return p; -} - -__isl_give isl_printer *isl_printer_print_str(__isl_take isl_printer *p, - const char *s) -{ - if (!p) - return NULL; - - return p->ops->print_str(p, s); -} - -__isl_give isl_printer *isl_printer_print_int(__isl_take isl_printer *p, int i) -{ - if (!p) - return NULL; - - return p->ops->print_int(p, i); -} - -__isl_give isl_printer *isl_printer_print_isl_int(__isl_take isl_printer *p, - isl_int i) -{ - if (!p) - return NULL; - - return p->ops->print_isl_int(p, i); -} - -__isl_give isl_printer *isl_printer_start_line(__isl_take isl_printer *p) -{ - if (!p) - return NULL; - - return p->ops->start_line(p); -} - -__isl_give isl_printer *isl_printer_end_line(__isl_take isl_printer *p) -{ - if (!p) - return NULL; - - return p->ops->end_line(p); -} - -char *isl_printer_get_str(__isl_keep isl_printer *printer) -{ - if (!printer || !printer->buf) - return NULL; - return strdup(printer->buf); -} - -__isl_give isl_printer *isl_printer_flush(__isl_take isl_printer *p) -{ - if (!p) - return NULL; - - return p->ops->flush(p); -} diff --git a/cloog-0.16.3/isl/isl_printer_private.h b/cloog-0.16.3/isl/isl_printer_private.h deleted file mode 100644 index 9d76808..0000000 --- a/cloog-0.16.3/isl/isl_printer_private.h +++ /dev/null @@ -1,17 +0,0 @@ -#include - -struct isl_printer_ops; - -struct isl_printer { - struct isl_ctx *ctx; - struct isl_printer_ops *ops; - FILE *file; - int buf_n; - int buf_size; - char *buf; - int indent; - int output_format; - const char *prefix; - const char *suffix; - int width; -}; diff --git a/cloog-0.16.3/isl/isl_pw_templ.c b/cloog-0.16.3/isl/isl_pw_templ.c deleted file mode 100644 index a446c43..0000000 --- a/cloog-0.16.3/isl/isl_pw_templ.c +++ /dev/null @@ -1,1074 +0,0 @@ -#define xFN(TYPE,NAME) TYPE ## _ ## NAME -#define FN(TYPE,NAME) xFN(TYPE,NAME) -#define xS(TYPE,NAME) struct TYPE ## _ ## NAME -#define S(TYPE,NAME) xS(TYPE,NAME) - -#ifdef HAS_TYPE -static __isl_give PW *FN(PW,alloc_)(__isl_take isl_dim *dim, - enum isl_fold type, int n) -#else -static __isl_give PW *FN(PW,alloc_)(__isl_take isl_dim *dim, int n) -#endif -{ - isl_ctx *ctx; - struct PW *pw; - - if (!dim) - return NULL; - ctx = isl_dim_get_ctx(dim); - isl_assert(ctx, n >= 0, goto error); - pw = isl_alloc(ctx, struct PW, - sizeof(struct PW) + (n - 1) * sizeof(S(PW,piece))); - if (!pw) - goto error; - - pw->ref = 1; -#ifdef HAS_TYPE - pw->type = type; -#endif - pw->size = n; - pw->n = 0; - pw->dim = dim; - return pw; -error: - isl_dim_free(dim); - return NULL; -} - -#ifdef HAS_TYPE -__isl_give PW *FN(PW,ZERO)(__isl_take isl_dim *dim, enum isl_fold type) -{ - return FN(PW,alloc_)(dim, type, 0); -} -#else -__isl_give PW *FN(PW,ZERO)(__isl_take isl_dim *dim) -{ - return FN(PW,alloc_)(dim, 0); -} -#endif - -__isl_give PW *FN(PW,add_piece)(__isl_take PW *pw, - __isl_take isl_set *set, __isl_take EL *el) -{ - isl_ctx *ctx; - isl_dim *el_dim = NULL; - - if (!pw || !set || !el) - goto error; - - if (isl_set_plain_is_empty(set) || FN(EL,EL_IS_ZERO)(el)) { - isl_set_free(set); - FN(EL,free)(el); - return pw; - } - - ctx = isl_set_get_ctx(set); -#ifdef HAS_TYPE - if (pw->type != el->type) - isl_die(ctx, isl_error_invalid, "fold types don't match", - goto error); -#endif - el_dim = FN(EL,get_dim(el)); - isl_assert(ctx, isl_dim_equal(pw->dim, el_dim), goto error); - isl_assert(ctx, pw->n < pw->size, goto error); - - pw->p[pw->n].set = set; - pw->p[pw->n].FIELD = el; - pw->n++; - - isl_dim_free(el_dim); - return pw; -error: - isl_dim_free(el_dim); - FN(PW,free)(pw); - isl_set_free(set); - FN(EL,free)(el); - return NULL; -} - -#ifdef HAS_TYPE -__isl_give PW *FN(PW,alloc)(enum isl_fold type, - __isl_take isl_set *set, __isl_take EL *el) -#else -__isl_give PW *FN(PW,alloc)(__isl_take isl_set *set, __isl_take EL *el) -#endif -{ - PW *pw; - - if (!set || !el) - goto error; - -#ifdef HAS_TYPE - pw = FN(PW,alloc_)(isl_set_get_dim(set), type, 1); -#else - pw = FN(PW,alloc_)(isl_set_get_dim(set), 1); -#endif - - return FN(PW,add_piece)(pw, set, el); -error: - isl_set_free(set); - FN(EL,free)(el); - return NULL; -} - -__isl_give PW *FN(PW,dup)(__isl_keep PW *pw) -{ - int i; - PW *dup; - - if (!pw) - return NULL; - -#ifdef HAS_TYPE - dup = FN(PW,alloc_)(isl_dim_copy(pw->dim), pw->type, pw->n); -#else - dup = FN(PW,alloc_)(isl_dim_copy(pw->dim), pw->n); -#endif - if (!dup) - return NULL; - - for (i = 0; i < pw->n; ++i) - dup = FN(PW,add_piece)(dup, isl_set_copy(pw->p[i].set), - FN(EL,copy)(pw->p[i].FIELD)); - - return dup; -} - -__isl_give PW *FN(PW,cow)(__isl_take PW *pw) -{ - if (!pw) - return NULL; - - if (pw->ref == 1) - return pw; - pw->ref--; - return FN(PW,dup)(pw); -} - -__isl_give PW *FN(PW,copy)(__isl_keep PW *pw) -{ - if (!pw) - return NULL; - - pw->ref++; - return pw; -} - -void *FN(PW,free)(__isl_take PW *pw) -{ - int i; - - if (!pw) - return NULL; - if (--pw->ref > 0) - return NULL; - - for (i = 0; i < pw->n; ++i) { - isl_set_free(pw->p[i].set); - FN(EL,free)(pw->p[i].FIELD); - } - isl_dim_free(pw->dim); - free(pw); - - return NULL; -} - -int FN(PW,IS_ZERO)(__isl_keep PW *pw) -{ - if (!pw) - return -1; - - return pw->n == 0; -} - -__isl_give PW *FN(PW,add)(__isl_take PW *pw1, __isl_take PW *pw2) -{ - int i, j, n; - struct PW *res; - isl_ctx *ctx; - isl_set *set; - - if (!pw1 || !pw2) - goto error; - - ctx = isl_dim_get_ctx(pw1->dim); -#ifdef HAS_TYPE - if (pw1->type != pw2->type) - isl_die(ctx, isl_error_invalid, - "fold types don't match", goto error); -#endif - isl_assert(ctx, isl_dim_equal(pw1->dim, pw2->dim), goto error); - - if (FN(PW,IS_ZERO)(pw1)) { - FN(PW,free)(pw1); - return pw2; - } - - if (FN(PW,IS_ZERO)(pw2)) { - FN(PW,free)(pw2); - return pw1; - } - - n = (pw1->n + 1) * (pw2->n + 1); -#ifdef HAS_TYPE - res = FN(PW,alloc_)(isl_dim_copy(pw1->dim), pw1->type, n); -#else - res = FN(PW,alloc_)(isl_dim_copy(pw1->dim), n); -#endif - - for (i = 0; i < pw1->n; ++i) { - set = isl_set_copy(pw1->p[i].set); - for (j = 0; j < pw2->n; ++j) { - struct isl_set *common; - EL *sum; - set = isl_set_subtract(set, - isl_set_copy(pw2->p[j].set)); - common = isl_set_intersect(isl_set_copy(pw1->p[i].set), - isl_set_copy(pw2->p[j].set)); - if (isl_set_plain_is_empty(common)) { - isl_set_free(common); - continue; - } - - sum = FN(EL,add_on_domain)(common, - FN(EL,copy)(pw1->p[i].FIELD), - FN(EL,copy)(pw2->p[j].FIELD)); - - res = FN(PW,add_piece)(res, common, sum); - } - res = FN(PW,add_piece)(res, set, FN(EL,copy)(pw1->p[i].FIELD)); - } - - for (j = 0; j < pw2->n; ++j) { - set = isl_set_copy(pw2->p[j].set); - for (i = 0; i < pw1->n; ++i) - set = isl_set_subtract(set, - isl_set_copy(pw1->p[i].set)); - res = FN(PW,add_piece)(res, set, FN(EL,copy)(pw2->p[j].FIELD)); - } - - FN(PW,free)(pw1); - FN(PW,free)(pw2); - - return res; -error: - FN(PW,free)(pw1); - FN(PW,free)(pw2); - return NULL; -} - -__isl_give PW *FN(PW,add_disjoint)(__isl_take PW *pw1, __isl_take PW *pw2) -{ - int i; - isl_ctx *ctx; - PW *res; - - if (!pw1 || !pw2) - goto error; - - ctx = isl_dim_get_ctx(pw1->dim); -#ifdef HAS_TYPE - if (pw1->type != pw2->type) - isl_die(ctx, isl_error_invalid, - "fold types don't match", goto error); -#endif - isl_assert(ctx, isl_dim_equal(pw1->dim, pw2->dim), goto error); - - if (FN(PW,IS_ZERO)(pw1)) { - FN(PW,free)(pw1); - return pw2; - } - - if (FN(PW,IS_ZERO)(pw2)) { - FN(PW,free)(pw2); - return pw1; - } - -#ifdef HAS_TYPE - res = FN(PW,alloc_)(isl_dim_copy(pw1->dim), pw1->type, pw1->n + pw2->n); -#else - res = FN(PW,alloc_)(isl_dim_copy(pw1->dim), pw1->n + pw2->n); -#endif - - for (i = 0; i < pw1->n; ++i) - res = FN(PW,add_piece)(res, - isl_set_copy(pw1->p[i].set), - FN(EL,copy)(pw1->p[i].FIELD)); - - for (i = 0; i < pw2->n; ++i) - res = FN(PW,add_piece)(res, - isl_set_copy(pw2->p[i].set), - FN(EL,copy)(pw2->p[i].FIELD)); - - FN(PW,free)(pw1); - FN(PW,free)(pw2); - - return res; -error: - FN(PW,free)(pw1); - FN(PW,free)(pw2); - return NULL; -} - -#ifndef NO_NEG -__isl_give PW *FN(PW,neg)(__isl_take PW *pw) -{ - int i; - - if (!pw) - return NULL; - - if (FN(PW,IS_ZERO)(pw)) - return pw; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].FIELD = FN(EL,neg)(pw->p[i].FIELD); - if (!pw->p[i].FIELD) - return FN(PW,free)(pw); - } - - return pw; -} - -__isl_give PW *FN(PW,sub)(__isl_take PW *pw1, __isl_take PW *pw2) -{ - return FN(PW,add)(pw1, FN(PW,neg)(pw2)); -} -#endif - -#ifndef NO_EVAL -__isl_give isl_qpolynomial *FN(PW,eval)(__isl_take PW *pw, - __isl_take isl_point *pnt) -{ - int i; - int found = 0; - isl_ctx *ctx; - isl_dim *pnt_dim = NULL; - isl_qpolynomial *qp; - - if (!pw || !pnt) - goto error; - ctx = isl_point_get_ctx(pnt); - pnt_dim = isl_point_get_dim(pnt); - isl_assert(ctx, isl_dim_equal(pnt_dim, pw->dim), goto error); - - for (i = 0; i < pw->n; ++i) { - found = isl_set_contains_point(pw->p[i].set, pnt); - if (found < 0) - goto error; - if (found) - break; - } - if (found) - qp = FN(EL,eval)(FN(EL,copy)(pw->p[i].FIELD), - isl_point_copy(pnt)); - else - qp = isl_qpolynomial_zero(isl_dim_copy(pw->dim)); - FN(PW,free)(pw); - isl_dim_free(pnt_dim); - isl_point_free(pnt); - return qp; -error: - FN(PW,free)(pw); - isl_dim_free(pnt_dim); - isl_point_free(pnt); - return NULL; -} -#endif - -__isl_give isl_set *FN(PW,domain)(__isl_take PW *pw) -{ - int i; - isl_set *dom; - - if (!pw) - return NULL; - - dom = isl_set_empty(isl_dim_copy(pw->dim)); - for (i = 0; i < pw->n; ++i) - dom = isl_set_union_disjoint(dom, isl_set_copy(pw->p[i].set)); - - FN(PW,free)(pw); - - return dom; -} - -__isl_give PW *FN(PW,intersect_domain)(__isl_take PW *pw, __isl_take isl_set *set) -{ - int i; - - if (!pw || !set) - goto error; - - if (pw->n == 0) { - isl_set_free(set); - return pw; - } - - pw = FN(PW,cow)(pw); - if (!pw) - goto error; - - for (i = pw->n - 1; i >= 0; --i) { - isl_basic_set *aff; - pw->p[i].set = isl_set_intersect(pw->p[i].set, isl_set_copy(set)); - if (!pw->p[i].set) - goto error; - aff = isl_set_affine_hull(isl_set_copy(pw->p[i].set)); - pw->p[i].FIELD = FN(EL,substitute_equalities)(pw->p[i].FIELD, - aff); - if (isl_set_plain_is_empty(pw->p[i].set)) { - isl_set_free(pw->p[i].set); - FN(EL,free)(pw->p[i].FIELD); - if (i != pw->n - 1) - pw->p[i] = pw->p[pw->n - 1]; - pw->n--; - } - } - - isl_set_free(set); - return pw; -error: - isl_set_free(set); - FN(PW,free)(pw); - return NULL; -} - -__isl_give PW *FN(PW,gist)(__isl_take PW *pw, __isl_take isl_set *context) -{ - int i; - isl_basic_set *hull = NULL; - - if (!pw || !context) - goto error; - - if (pw->n == 0) { - isl_set_free(context); - return pw; - } - - context = isl_set_compute_divs(context); - hull = isl_set_simple_hull(isl_set_copy(context)); - - pw = FN(PW,cow)(pw); - if (!pw) - goto error; - - for (i = pw->n - 1; i >= 0; --i) { - pw->p[i].set = isl_set_intersect(pw->p[i].set, - isl_set_copy(context)); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,gist)(pw->p[i].FIELD, - isl_set_copy(pw->p[i].set)); - pw->p[i].set = isl_set_gist_basic_set(pw->p[i].set, - isl_basic_set_copy(hull)); - if (!pw->p[i].set) - goto error; - if (isl_set_plain_is_empty(pw->p[i].set)) { - isl_set_free(pw->p[i].set); - FN(EL,free)(pw->p[i].FIELD); - if (i != pw->n - 1) - pw->p[i] = pw->p[pw->n - 1]; - pw->n--; - } - } - - isl_basic_set_free(hull); - isl_set_free(context); - - return pw; -error: - FN(PW,free)(pw); - isl_basic_set_free(hull); - isl_set_free(context); - return NULL; -} - -__isl_give PW *FN(PW,coalesce)(__isl_take PW *pw) -{ - int i, j; - - if (!pw) - return NULL; - if (pw->n == 0) - return pw; - - for (i = pw->n - 1; i >= 0; --i) { - for (j = i - 1; j >= 0; --j) { - if (!FN(EL,plain_is_equal)(pw->p[i].FIELD, - pw->p[j].FIELD)) - continue; - pw->p[j].set = isl_set_union(pw->p[j].set, - pw->p[i].set); - FN(EL,free)(pw->p[i].FIELD); - if (i != pw->n - 1) - pw->p[i] = pw->p[pw->n - 1]; - pw->n--; - break; - } - if (j >= 0) - continue; - pw->p[i].set = isl_set_coalesce(pw->p[i].set); - if (!pw->p[i].set) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} - -isl_ctx *FN(PW,get_ctx)(__isl_keep PW *pw) -{ - return pw ? isl_dim_get_ctx(pw->dim) : NULL; -} - -#ifndef NO_INVOLVES_DIMS -int FN(PW,involves_dims)(__isl_keep PW *pw, enum isl_dim_type type, - unsigned first, unsigned n) -{ - int i; - - if (!pw) - return -1; - if (pw->n == 0 || n == 0) - return 0; - for (i = 0; i < pw->n; ++i) { - int involves = FN(EL,involves_dims)(pw->p[i].FIELD, - type, first, n); - if (involves < 0 || involves) - return involves; - involves = isl_set_involves_dims(pw->p[i].set, type, first, n); - if (involves < 0 || involves) - return involves; - } - return 0; -} -#endif - -__isl_give PW *FN(PW,set_dim_name)(__isl_take PW *pw, - enum isl_dim_type type, unsigned pos, const char *s) -{ - int i; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - - pw->dim = isl_dim_set_name(pw->dim, type, pos, s); - if (!pw->dim) - goto error; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_set_dim_name(pw->p[i].set, type, pos, s); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,set_dim_name)(pw->p[i].FIELD, type, pos, s); - if (!pw->p[i].FIELD) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} - -#ifndef NO_DROP_DIMS -__isl_give PW *FN(PW,drop_dims)(__isl_take PW *pw, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!pw) - return NULL; - if (n == 0 && !isl_dim_get_tuple_name(pw->dim, type)) - return pw; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - pw->dim = isl_dim_drop(pw->dim, type, first, n); - if (!pw->dim) - goto error; - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_drop(pw->p[i].set, type, first, n); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,drop_dims)(pw->p[i].FIELD, type, first, n); - if (!pw->p[i].FIELD) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} -#endif - -#ifndef NO_INSERT_DIMS -__isl_give PW *FN(PW,insert_dims)(__isl_take PW *pw, enum isl_dim_type type, - unsigned first, unsigned n) -{ - int i; - - if (!pw) - return NULL; - if (n == 0 && !isl_dim_is_named_or_nested(pw->dim, type)) - return pw; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - - pw->dim = isl_dim_insert(pw->dim, type, first, n); - if (!pw->dim) - goto error; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_insert(pw->p[i].set, type, first, n); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,insert_dims)(pw->p[i].FIELD, - type, first, n); - if (!pw->p[i].FIELD) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} -#endif - -__isl_give PW *FN(PW,fix_dim)(__isl_take PW *pw, - enum isl_dim_type type, unsigned pos, isl_int v) -{ - int i; - - if (!pw) - return NULL; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_fix(pw->p[i].set, type, pos, v); - if (!pw->p[i].set) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} - -unsigned FN(PW,dim)(__isl_keep PW *pw, enum isl_dim_type type) -{ - return pw ? isl_dim_size(pw->dim, type) : 0; -} - -__isl_give PW *FN(PW,split_dims)(__isl_take PW *pw, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!pw) - return NULL; - if (n == 0) - return pw; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - if (!pw->dim) - goto error; - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_split_dims(pw->p[i].set, type, first, n); - if (!pw->p[i].set) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} - -#ifndef NO_OPT -/* Compute the maximal value attained by the piecewise quasipolynomial - * on its domain or zero if the domain is empty. - * In the worst case, the domain is scanned completely, - * so the domain is assumed to be bounded. - */ -__isl_give isl_qpolynomial *FN(PW,opt)(__isl_take PW *pw, int max) -{ - int i; - isl_qpolynomial *opt; - - if (!pw) - return NULL; - - if (pw->n == 0) { - isl_dim *dim = isl_dim_copy(pw->dim); - FN(PW,free)(pw); - return isl_qpolynomial_zero(dim); - } - - opt = FN(EL,opt_on_domain)(FN(EL,copy)(pw->p[0].FIELD), - isl_set_copy(pw->p[0].set), max); - for (i = 1; i < pw->n; ++i) { - isl_qpolynomial *opt_i; - opt_i = FN(EL,opt_on_domain)(FN(EL,copy)(pw->p[i].FIELD), - isl_set_copy(pw->p[i].set), max); - if (max) - opt = isl_qpolynomial_max_cst(opt, opt_i); - else - opt = isl_qpolynomial_min_cst(opt, opt_i); - } - - FN(PW,free)(pw); - return opt; -} - -__isl_give isl_qpolynomial *FN(PW,max)(__isl_take PW *pw) -{ - return FN(PW,opt)(pw, 1); -} - -__isl_give isl_qpolynomial *FN(PW,min)(__isl_take PW *pw) -{ - return FN(PW,opt)(pw, 0); -} -#endif - -__isl_give isl_dim *FN(PW,get_dim)(__isl_keep PW *pw) -{ - return pw ? isl_dim_copy(pw->dim) : NULL; -} - -#ifndef NO_RESET_DIM -__isl_give PW *FN(PW,reset_dim)(__isl_take PW *pw, __isl_take isl_dim *dim) -{ - int i; - - pw = FN(PW,cow)(pw); - if (!pw || !dim) - goto error; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_reset_dim(pw->p[i].set, - isl_dim_copy(dim)); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,reset_dim)(pw->p[i].FIELD, - isl_dim_copy(dim)); - if (!pw->p[i].FIELD) - goto error; - } - isl_dim_free(pw->dim); - pw->dim = dim; - - return pw; -error: - isl_dim_free(dim); - FN(PW,free)(pw); - return NULL; -} -#endif - -int FN(PW,has_equal_dim)(__isl_keep PW *pw1, __isl_keep PW *pw2) -{ - if (!pw1 || !pw2) - return -1; - - return isl_dim_equal(pw1->dim, pw2->dim); -} - -#ifndef NO_MORPH -__isl_give PW *FN(PW,morph)(__isl_take PW *pw, __isl_take isl_morph *morph) -{ - int i; - isl_ctx *ctx; - - if (!pw || !morph) - goto error; - - ctx = isl_dim_get_ctx(pw->dim); - isl_assert(ctx, isl_dim_equal(pw->dim, morph->dom->dim), - goto error); - - pw = FN(PW,cow)(pw); - if (!pw) - goto error; - isl_dim_free(pw->dim); - pw->dim = isl_dim_copy(morph->ran->dim); - if (!pw->dim) - goto error; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_morph_set(isl_morph_copy(morph), pw->p[i].set); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,morph)(pw->p[i].FIELD, - isl_morph_copy(morph)); - if (!pw->p[i].FIELD) - goto error; - } - - isl_morph_free(morph); - - return pw; -error: - FN(PW,free)(pw); - isl_morph_free(morph); - return NULL; -} -#endif - -int FN(PW,foreach_piece)(__isl_keep PW *pw, - int (*fn)(__isl_take isl_set *set, __isl_take EL *el, void *user), - void *user) -{ - int i; - - if (!pw) - return -1; - - for (i = 0; i < pw->n; ++i) - if (fn(isl_set_copy(pw->p[i].set), - FN(EL,copy)(pw->p[i].FIELD), user) < 0) - return -1; - - return 0; -} - -#ifndef NO_LIFT -static int any_divs(__isl_keep isl_set *set) -{ - int i; - - if (!set) - return -1; - - for (i = 0; i < set->n; ++i) - if (set->p[i]->n_div > 0) - return 1; - - return 0; -} - -static int foreach_lifted_subset(__isl_take isl_set *set, __isl_take EL *el, - int (*fn)(__isl_take isl_set *set, __isl_take EL *el, - void *user), void *user) -{ - int i; - - if (!set || !el) - goto error; - - for (i = 0; i < set->n; ++i) { - isl_set *lift; - EL *copy; - - lift = isl_set_from_basic_set(isl_basic_set_copy(set->p[i])); - lift = isl_set_lift(lift); - - copy = FN(EL,copy)(el); - copy = FN(EL,lift)(copy, isl_set_get_dim(lift)); - - if (fn(lift, copy, user) < 0) - goto error; - } - - isl_set_free(set); - FN(EL,free)(el); - - return 0; -error: - isl_set_free(set); - FN(EL,free)(el); - return -1; -} - -int FN(PW,foreach_lifted_piece)(__isl_keep PW *pw, - int (*fn)(__isl_take isl_set *set, __isl_take EL *el, - void *user), void *user) -{ - int i; - - if (!pw) - return -1; - - for (i = 0; i < pw->n; ++i) { - isl_set *set; - EL *el; - - set = isl_set_copy(pw->p[i].set); - el = FN(EL,copy)(pw->p[i].FIELD); - if (!any_divs(set)) { - if (fn(set, el, user) < 0) - return -1; - continue; - } - if (foreach_lifted_subset(set, el, fn, user) < 0) - return -1; - } - - return 0; -} -#endif - -#ifndef NO_MOVE_DIMS -__isl_give PW *FN(PW,move_dims)(__isl_take PW *pw, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - int i; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - - pw->dim = isl_dim_move(pw->dim, dst_type, dst_pos, src_type, src_pos, n); - if (!pw->dim) - goto error; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_move_dims(pw->p[i].set, - dst_type, dst_pos, - src_type, src_pos, n); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,move_dims)(pw->p[i].FIELD, - dst_type, dst_pos, src_type, src_pos, n); - if (!pw->p[i].FIELD) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} -#endif - -#ifndef NO_REALIGN -__isl_give PW *FN(PW,realign)(__isl_take PW *pw, __isl_take isl_reordering *exp) -{ - int i; - - pw = FN(PW,cow)(pw); - if (!pw || !exp) - return NULL; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_realign(pw->p[i].set, - isl_reordering_copy(exp)); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,realign)(pw->p[i].FIELD, - isl_reordering_copy(exp)); - if (!pw->p[i].FIELD) - goto error; - } - - pw = FN(PW,reset_dim)(pw, isl_dim_copy(exp->dim)); - - isl_reordering_free(exp); - return pw; -error: - isl_reordering_free(exp); - FN(PW,free)(pw); - return NULL; -} - -/* Align the parameters of "pw" to those of "model". - */ -__isl_give PW *FN(PW,align_params)(__isl_take PW *pw, __isl_take isl_dim *model) -{ - isl_ctx *ctx; - - if (!pw || !model) - goto error; - - ctx = isl_dim_get_ctx(model); - if (!isl_dim_has_named_params(model)) - isl_die(ctx, isl_error_invalid, - "model has unnamed parameters", goto error); - if (!isl_dim_has_named_params(pw->dim)) - isl_die(ctx, isl_error_invalid, - "input has unnamed parameters", goto error); - if (!isl_dim_match(pw->dim, isl_dim_param, model, isl_dim_param)) { - isl_reordering *exp; - - model = isl_dim_drop(model, isl_dim_in, - 0, isl_dim_size(model, isl_dim_in)); - model = isl_dim_drop(model, isl_dim_out, - 0, isl_dim_size(model, isl_dim_out)); - exp = isl_parameter_alignment_reordering(pw->dim, model); - exp = isl_reordering_extend_dim(exp, FN(PW,get_dim)(pw)); - pw = FN(PW,realign)(pw, exp); - } - - isl_dim_free(model); - return pw; -error: - isl_dim_free(model); - FN(PW,free)(pw); - return NULL; -} -#endif - -__isl_give PW *FN(PW,mul_isl_int)(__isl_take PW *pw, isl_int v) -{ - int i; - - if (isl_int_is_one(v)) - return pw; - if (pw && isl_int_is_zero(v)) { - PW *zero; - isl_dim *dim = FN(PW,get_dim)(pw); -#ifdef HAS_TYPE - zero = FN(PW,ZERO)(dim, pw->type); -#else - zero = FN(PW,ZERO)(dim); -#endif - FN(PW,free)(pw); - return zero; - } - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - if (pw->n == 0) - return pw; - -#ifdef HAS_TYPE - if (isl_int_is_neg(v)) - pw->type = isl_fold_type_negate(pw->type); -#endif - for (i = 0; i < pw->n; ++i) { - pw->p[i].FIELD = FN(EL,scale)(pw->p[i].FIELD, v); - if (!pw->p[i].FIELD) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} - -__isl_give PW *FN(PW,scale)(__isl_take PW *pw, isl_int v) -{ - return FN(PW,mul_isl_int)(pw, v); -} diff --git a/cloog-0.16.3/isl/isl_qsort.c b/cloog-0.16.3/isl/isl_qsort.c deleted file mode 100644 index 3183048..0000000 --- a/cloog-0.16.3/isl/isl_qsort.c +++ /dev/null @@ -1,249 +0,0 @@ -/* Copyright (C) 1991,1992,1996,1997,1999,2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Written by Douglas C. Schmidt (schmidt@ics.uci.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* If you consider tuning this algorithm, you should consult first: - Engineering a sort function; Jon Bentley and M. Douglas McIlroy; - Software - Practice and Experience; Vol. 23 (11), 1249-1265, 1993. */ - -#include -#include -#include -#include - -/* Byte-wise swap two items of size SIZE. */ -#define SWAP(a, b, size) \ - do \ - { \ - register size_t __size = (size); \ - register char *__a = (a), *__b = (b); \ - do \ - { \ - char __tmp = *__a; \ - *__a++ = *__b; \ - *__b++ = __tmp; \ - } while (--__size > 0); \ - } while (0) - -/* Discontinue quicksort algorithm when partition gets below this size. - This particular magic number was chosen to work best on a Sun 4/260. */ -#define MAX_THRESH 4 - -/* Stack node declarations used to store unfulfilled partition obligations. */ -typedef struct - { - char *lo; - char *hi; - } stack_node; - -/* The next 4 #defines implement a very fast in-line stack abstraction. */ -/* The stack needs log (total_elements) entries (we could even subtract - log(MAX_THRESH)). Since total_elements has type size_t, we get as - upper bound for log (total_elements): - bits per byte (CHAR_BIT) * sizeof(size_t). */ -#define STACK_SIZE (CHAR_BIT * sizeof(size_t)) -#define PUSH(low, high) ((void) ((top->lo = (low)), (top->hi = (high)), ++top)) -#define POP(low, high) ((void) (--top, (low = top->lo), (high = top->hi))) -#define STACK_NOT_EMPTY (stack < top) - - -/* Order size using quicksort. This implementation incorporates - four optimizations discussed in Sedgewick: - - 1. Non-recursive, using an explicit stack of pointer that store the - next array partition to sort. To save time, this maximum amount - of space required to store an array of SIZE_MAX is allocated on the - stack. Assuming a 32-bit (64 bit) integer for size_t, this needs - only 32 * sizeof(stack_node) == 256 bytes (for 64 bit: 1024 bytes). - Pretty cheap, actually. - - 2. Chose the pivot element using a median-of-three decision tree. - This reduces the probability of selecting a bad pivot value and - eliminates certain extraneous comparisons. - - 3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving - insertion sort to order the MAX_THRESH items within each partition. - This is a big win, since insertion sort is faster for small, mostly - sorted array segments. - - 4. The larger of the two sub-partitions is always pushed onto the - stack first, with the algorithm then concentrating on the - smaller partition. This *guarantees* no more than log (total_elems) - stack size is needed (actually O(1) in this case)! */ - -void isl_quicksort (void *const pbase, size_t total_elems, size_t size, - int (*cmp)(const void *, const void *, void *arg), void *arg) -{ - register char *base_ptr = (char *) pbase; - - const size_t max_thresh = MAX_THRESH * size; - - if (total_elems == 0) - /* Avoid lossage with unsigned arithmetic below. */ - return; - - if (total_elems > MAX_THRESH) - { - char *lo = base_ptr; - char *hi = &lo[size * (total_elems - 1)]; - stack_node stack[STACK_SIZE]; - stack_node *top = stack; - - PUSH (NULL, NULL); - - while (STACK_NOT_EMPTY) - { - char *left_ptr; - char *right_ptr; - - /* Select median value from among LO, MID, and HI. Rearrange - LO and HI so the three values are sorted. This lowers the - probability of picking a pathological pivot value and - skips a comparison for both the LEFT_PTR and RIGHT_PTR in - the while loops. */ - - char *mid = lo + size * ((hi - lo) / size >> 1); - - if ((*cmp) ((void *) mid, (void *) lo, arg) < 0) - SWAP (mid, lo, size); - if ((*cmp) ((void *) hi, (void *) mid, arg) < 0) - SWAP (mid, hi, size); - else - goto jump_over; - if ((*cmp) ((void *) mid, (void *) lo, arg) < 0) - SWAP (mid, lo, size); - jump_over:; - - left_ptr = lo + size; - right_ptr = hi - size; - - /* Here's the famous ``collapse the walls'' section of quicksort. - Gotta like those tight inner loops! They are the main reason - that this algorithm runs much faster than others. */ - do - { - while ((*cmp) ((void *) left_ptr, (void *) mid, arg) < 0) - left_ptr += size; - - while ((*cmp) ((void *) mid, (void *) right_ptr, arg) < 0) - right_ptr -= size; - - if (left_ptr < right_ptr) - { - SWAP (left_ptr, right_ptr, size); - if (mid == left_ptr) - mid = right_ptr; - else if (mid == right_ptr) - mid = left_ptr; - left_ptr += size; - right_ptr -= size; - } - else if (left_ptr == right_ptr) - { - left_ptr += size; - right_ptr -= size; - break; - } - } - while (left_ptr <= right_ptr); - - /* Set up pointers for next iteration. First determine whether - left and right partitions are below the threshold size. If so, - ignore one or both. Otherwise, push the larger partition's - bounds on the stack and continue sorting the smaller one. */ - - if ((size_t) (right_ptr - lo) <= max_thresh) - { - if ((size_t) (hi - left_ptr) <= max_thresh) - /* Ignore both small partitions. */ - POP (lo, hi); - else - /* Ignore small left partition. */ - lo = left_ptr; - } - else if ((size_t) (hi - left_ptr) <= max_thresh) - /* Ignore small right partition. */ - hi = right_ptr; - else if ((right_ptr - lo) > (hi - left_ptr)) - { - /* Push larger left partition indices. */ - PUSH (lo, right_ptr); - lo = left_ptr; - } - else - { - /* Push larger right partition indices. */ - PUSH (left_ptr, hi); - hi = right_ptr; - } - } - } - - /* Once the BASE_PTR array is partially sorted by quicksort the rest - is completely sorted using insertion sort, since this is efficient - for partitions below MAX_THRESH size. BASE_PTR points to the beginning - of the array to sort, and END_PTR points at the very last element in - the array (*not* one beyond it!). */ - -#define min(x, y) ((x) < (y) ? (x) : (y)) - - { - char *const end_ptr = &base_ptr[size * (total_elems - 1)]; - char *tmp_ptr = base_ptr; - char *thresh = min(end_ptr, base_ptr + max_thresh); - register char *run_ptr; - - /* Find smallest element in first threshold and place it at the - array's beginning. This is the smallest array element, - and the operation speeds up insertion sort's inner loop. */ - - for (run_ptr = tmp_ptr + size; run_ptr <= thresh; run_ptr += size) - if ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, arg) < 0) - tmp_ptr = run_ptr; - - if (tmp_ptr != base_ptr) - SWAP (tmp_ptr, base_ptr, size); - - /* Insertion sort, running from left-hand-side up to right-hand-side. */ - - run_ptr = base_ptr + size; - while ((run_ptr += size) <= end_ptr) - { - tmp_ptr = run_ptr - size; - while ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, arg) < 0) - tmp_ptr -= size; - - tmp_ptr += size; - if (tmp_ptr != run_ptr) - { - char *trav; - - trav = run_ptr + size; - while (--trav >= run_ptr) - { - char c = *trav; - char *hi, *lo; - - for (hi = lo = trav; (lo -= size) >= tmp_ptr; hi = lo) - *hi = *lo; - *hi = c; - } - } - } - } -} diff --git a/cloog-0.16.3/isl/isl_qsort.h b/cloog-0.16.3/isl/isl_qsort.h deleted file mode 100644 index 5ca1634..0000000 --- a/cloog-0.16.3/isl/isl_qsort.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef ISL_QSORT_H -#define ISL_QSORT_H - -void isl_quicksort (void *const pbase, size_t total_elems, size_t size, - int (*cmp)(const void *, const void *, void *arg), void *arg); - -#endif diff --git a/cloog-0.16.3/isl/isl_range.c b/cloog-0.16.3/isl/isl_range.c deleted file mode 100644 index d31f277..0000000 --- a/cloog-0.16.3/isl/isl_range.c +++ /dev/null @@ -1,483 +0,0 @@ -#include -#include -#include -#include -#include -#include - -struct range_data { - struct isl_bound *bound; - int *signs; - int sign; - int test_monotonicity; - int monotonicity; - int tight; - isl_qpolynomial *poly; - isl_pw_qpolynomial_fold *pwf; - isl_pw_qpolynomial_fold *pwf_tight; -}; - -static int propagate_on_domain(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct range_data *data); - -/* Check whether the polynomial "poly" has sign "sign" over "bset", - * i.e., if sign == 1, check that the lower bound on the polynomial - * is non-negative and if sign == -1, check that the upper bound on - * the polynomial is non-positive. - */ -static int has_sign(__isl_keep isl_basic_set *bset, - __isl_keep isl_qpolynomial *poly, int sign, int *signs) -{ - struct range_data data_m; - unsigned nvar; - unsigned nparam; - isl_dim *dim; - isl_qpolynomial *opt; - int r; - enum isl_fold type; - - nparam = isl_basic_set_dim(bset, isl_dim_param); - nvar = isl_basic_set_dim(bset, isl_dim_set); - - bset = isl_basic_set_copy(bset); - poly = isl_qpolynomial_copy(poly); - - bset = isl_basic_set_move_dims(bset, isl_dim_set, 0, - isl_dim_param, 0, nparam); - poly = isl_qpolynomial_move_dims(poly, isl_dim_set, 0, - isl_dim_param, 0, nparam); - - dim = isl_qpolynomial_get_dim(poly); - dim = isl_dim_drop(dim, isl_dim_set, 0, isl_dim_size(dim, isl_dim_set)); - - data_m.test_monotonicity = 0; - data_m.signs = signs; - data_m.sign = -sign; - type = data_m.sign < 0 ? isl_fold_min : isl_fold_max; - data_m.pwf = isl_pw_qpolynomial_fold_zero(dim, type); - data_m.tight = 0; - data_m.pwf_tight = NULL; - - if (propagate_on_domain(bset, poly, &data_m) < 0) - goto error; - - if (sign > 0) - opt = isl_pw_qpolynomial_fold_min(data_m.pwf); - else - opt = isl_pw_qpolynomial_fold_max(data_m.pwf); - - if (!opt) - r = -1; - else if (isl_qpolynomial_is_nan(opt) || - isl_qpolynomial_is_infty(opt) || - isl_qpolynomial_is_neginfty(opt)) - r = 0; - else - r = sign * isl_qpolynomial_sgn(opt) >= 0; - - isl_qpolynomial_free(opt); - - return r; -error: - isl_pw_qpolynomial_fold_free(data_m.pwf); - return -1; -} - -/* Return 1 if poly is monotonically increasing in the last set variable, - * -1 if poly is monotonically decreasing in the last set variable, - * 0 if no conclusion, - * -2 on error. - * - * We simply check the sign of p(x+1)-p(x) - */ -static int monotonicity(__isl_keep isl_basic_set *bset, - __isl_keep isl_qpolynomial *poly, struct range_data *data) -{ - isl_ctx *ctx; - isl_dim *dim; - isl_qpolynomial *sub = NULL; - isl_qpolynomial *diff = NULL; - int result = 0; - int s; - unsigned nvar; - - ctx = isl_qpolynomial_get_ctx(poly); - dim = isl_qpolynomial_get_dim(poly); - - nvar = isl_basic_set_dim(bset, isl_dim_set); - - sub = isl_qpolynomial_var(isl_dim_copy(dim), isl_dim_set, nvar - 1); - sub = isl_qpolynomial_add(sub, - isl_qpolynomial_rat_cst(dim, ctx->one, ctx->one)); - - diff = isl_qpolynomial_substitute(isl_qpolynomial_copy(poly), - isl_dim_set, nvar - 1, 1, &sub); - diff = isl_qpolynomial_sub(diff, isl_qpolynomial_copy(poly)); - - s = has_sign(bset, diff, 1, data->signs); - if (s < 0) - goto error; - if (s) - result = 1; - else { - s = has_sign(bset, diff, -1, data->signs); - if (s < 0) - goto error; - if (s) - result = -1; - } - - isl_qpolynomial_free(diff); - isl_qpolynomial_free(sub); - - return result; -error: - isl_qpolynomial_free(diff); - isl_qpolynomial_free(sub); - return -2; -} - -static __isl_give isl_qpolynomial *bound2poly(__isl_take isl_constraint *bound, - __isl_take isl_dim *dim, unsigned pos, int sign) -{ - if (!bound) { - if (sign > 0) - return isl_qpolynomial_infty(dim); - else - return isl_qpolynomial_neginfty(dim); - } - isl_dim_free(dim); - return isl_qpolynomial_from_constraint(bound, isl_dim_set, pos); -} - -static int bound_is_integer(__isl_take isl_constraint *bound, unsigned pos) -{ - isl_int c; - int is_int; - - if (!bound) - return 1; - - isl_int_init(c); - isl_constraint_get_coefficient(bound, isl_dim_set, pos, &c); - is_int = isl_int_is_one(c) || isl_int_is_negone(c); - isl_int_clear(c); - - return is_int; -} - -struct isl_fixed_sign_data { - int *signs; - int sign; - isl_qpolynomial *poly; -}; - -/* Add term "term" to data->poly if it has sign data->sign. - * The sign is determined based on the signs of the parameters - * and variables in data->signs. The integer divisions, if - * any, are assumed to be non-negative. - */ -static int collect_fixed_sign_terms(__isl_take isl_term *term, void *user) -{ - struct isl_fixed_sign_data *data = (struct isl_fixed_sign_data *)user; - isl_int n; - int i; - int sign; - unsigned nparam; - unsigned nvar; - - if (!term) - return -1; - - nparam = isl_term_dim(term, isl_dim_param); - nvar = isl_term_dim(term, isl_dim_set); - - isl_int_init(n); - - isl_term_get_num(term, &n); - - sign = isl_int_sgn(n); - for (i = 0; i < nparam; ++i) { - if (data->signs[i] > 0) - continue; - if (isl_term_get_exp(term, isl_dim_param, i) % 2) - sign = -sign; - } - for (i = 0; i < nvar; ++i) { - if (data->signs[nparam + i] > 0) - continue; - if (isl_term_get_exp(term, isl_dim_set, i) % 2) - sign = -sign; - } - - if (sign == data->sign) { - isl_qpolynomial *t = isl_qpolynomial_from_term(term); - - data->poly = isl_qpolynomial_add(data->poly, t); - } else - isl_term_free(term); - - isl_int_clear(n); - - return 0; -} - -/* Construct and return a polynomial that consists of the terms - * in "poly" that have sign "sign". The integer divisions, if - * any, are assumed to be non-negative. - */ -__isl_give isl_qpolynomial *isl_qpolynomial_terms_of_sign( - __isl_keep isl_qpolynomial *poly, int *signs, int sign) -{ - struct isl_fixed_sign_data data = { signs, sign }; - data.poly = isl_qpolynomial_zero(isl_qpolynomial_get_dim(poly)); - - if (isl_qpolynomial_foreach_term(poly, collect_fixed_sign_terms, &data) < 0) - goto error; - - return data.poly; -error: - isl_qpolynomial_free(data.poly); - return NULL; -} - -/* Helper function to add a guarded polynomial to either pwf_tight or pwf, - * depending on whether the result has been determined to be tight. - */ -static int add_guarded_poly(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct range_data *data) -{ - enum isl_fold type = data->sign < 0 ? isl_fold_min : isl_fold_max; - isl_set *set; - isl_qpolynomial_fold *fold; - isl_pw_qpolynomial_fold *pwf; - - fold = isl_qpolynomial_fold_alloc(type, poly); - set = isl_set_from_basic_set(bset); - pwf = isl_pw_qpolynomial_fold_alloc(type, set, fold); - if (data->tight) - data->pwf_tight = isl_pw_qpolynomial_fold_fold( - data->pwf_tight, pwf); - else - data->pwf = isl_pw_qpolynomial_fold_fold(data->pwf, pwf); - - return 0; -} - -/* Given a lower and upper bound on the final variable and constraints - * on the remaining variables where these bounds are active, - * eliminate the variable from data->poly based on these bounds. - * If the polynomial has been determined to be monotonic - * in the variable, then simply plug in the appropriate bound. - * If the current polynomial is tight and if this bound is integer, - * then the result is still tight. In all other cases, the results - * may not be tight. - * Otherwise, plug in the largest bound (in absolute value) in - * the positive terms (if an upper bound is wanted) or the negative terms - * (if a lower bounded is wanted) and the other bound in the other terms. - * - * If all variables have been eliminated, then record the result. - * Ohterwise, recurse on the next variable. - */ -static int propagate_on_bound_pair(__isl_take isl_constraint *lower, - __isl_take isl_constraint *upper, __isl_take isl_basic_set *bset, - void *user) -{ - struct range_data *data = (struct range_data *)user; - int save_tight = data->tight; - isl_qpolynomial *poly; - int r; - unsigned nvar; - - nvar = isl_basic_set_dim(bset, isl_dim_set); - - if (data->monotonicity) { - isl_qpolynomial *sub; - isl_dim *dim = isl_qpolynomial_get_dim(data->poly); - if (data->monotonicity * data->sign > 0) { - if (data->tight) - data->tight = bound_is_integer(upper, nvar); - sub = bound2poly(upper, dim, nvar, 1); - isl_constraint_free(lower); - } else { - if (data->tight) - data->tight = bound_is_integer(lower, nvar); - sub = bound2poly(lower, dim, nvar, -1); - isl_constraint_free(upper); - } - poly = isl_qpolynomial_copy(data->poly); - poly = isl_qpolynomial_substitute(poly, isl_dim_set, nvar, 1, &sub); - poly = isl_qpolynomial_drop_dims(poly, isl_dim_set, nvar, 1); - - isl_qpolynomial_free(sub); - } else { - isl_qpolynomial *l, *u; - isl_qpolynomial *pos, *neg; - isl_dim *dim = isl_qpolynomial_get_dim(data->poly); - unsigned nparam = isl_basic_set_dim(bset, isl_dim_param); - int sign = data->sign * data->signs[nparam + nvar]; - - data->tight = 0; - - u = bound2poly(upper, isl_dim_copy(dim), nvar, 1); - l = bound2poly(lower, dim, nvar, -1); - - pos = isl_qpolynomial_terms_of_sign(data->poly, data->signs, sign); - neg = isl_qpolynomial_terms_of_sign(data->poly, data->signs, -sign); - - pos = isl_qpolynomial_substitute(pos, isl_dim_set, nvar, 1, &u); - neg = isl_qpolynomial_substitute(neg, isl_dim_set, nvar, 1, &l); - - poly = isl_qpolynomial_add(pos, neg); - poly = isl_qpolynomial_drop_dims(poly, isl_dim_set, nvar, 1); - - isl_qpolynomial_free(u); - isl_qpolynomial_free(l); - } - - if (isl_basic_set_dim(bset, isl_dim_set) == 0) - r = add_guarded_poly(bset, poly, data); - else - r = propagate_on_domain(bset, poly, data); - - data->tight = save_tight; - - return r; -} - -/* Recursively perform range propagation on the polynomial "poly" - * defined over the basic set "bset" and collect the results in "data". - */ -static int propagate_on_domain(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct range_data *data) -{ - isl_ctx *ctx; - isl_qpolynomial *save_poly = data->poly; - int save_monotonicity = data->monotonicity; - unsigned d; - - if (!bset || !poly) - goto error; - - ctx = isl_basic_set_get_ctx(bset); - d = isl_basic_set_dim(bset, isl_dim_set); - isl_assert(ctx, d >= 1, goto error); - - if (isl_qpolynomial_is_cst(poly, NULL, NULL)) { - bset = isl_basic_set_project_out(bset, isl_dim_set, 0, d); - poly = isl_qpolynomial_drop_dims(poly, isl_dim_set, 0, d); - return add_guarded_poly(bset, poly, data); - } - - if (data->test_monotonicity) - data->monotonicity = monotonicity(bset, poly, data); - else - data->monotonicity = 0; - if (data->monotonicity < -1) - goto error; - - data->poly = poly; - if (isl_basic_set_foreach_bound_pair(bset, isl_dim_set, d - 1, - &propagate_on_bound_pair, data) < 0) - goto error; - - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - data->monotonicity = save_monotonicity; - data->poly = save_poly; - - return 0; -error: - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - data->monotonicity = save_monotonicity; - data->poly = save_poly; - return -1; -} - -static int basic_guarded_poly_bound(__isl_take isl_basic_set *bset, void *user) -{ - struct range_data *data = (struct range_data *)user; - isl_ctx *ctx; - unsigned nparam = isl_basic_set_dim(bset, isl_dim_param); - unsigned dim = isl_basic_set_dim(bset, isl_dim_set); - int r; - - data->signs = NULL; - - ctx = isl_basic_set_get_ctx(bset); - data->signs = isl_alloc_array(ctx, int, - isl_basic_set_dim(bset, isl_dim_all)); - - if (isl_basic_set_dims_get_sign(bset, isl_dim_set, 0, dim, - data->signs + nparam) < 0) - goto error; - if (isl_basic_set_dims_get_sign(bset, isl_dim_param, 0, nparam, - data->signs) < 0) - goto error; - - r = propagate_on_domain(bset, isl_qpolynomial_copy(data->poly), data); - - free(data->signs); - - return r; -error: - free(data->signs); - isl_basic_set_free(bset); - return -1; -} - -static int qpolynomial_bound_on_domain_range(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct range_data *data) -{ - unsigned nparam = isl_basic_set_dim(bset, isl_dim_param); - unsigned nvar = isl_basic_set_dim(bset, isl_dim_set); - isl_set *set; - - if (!bset) - goto error; - - if (nvar == 0) - return add_guarded_poly(bset, poly, data); - - set = isl_set_from_basic_set(bset); - set = isl_set_split_dims(set, isl_dim_param, 0, nparam); - set = isl_set_split_dims(set, isl_dim_set, 0, nvar); - - data->poly = poly; - - data->test_monotonicity = 1; - if (isl_set_foreach_basic_set(set, &basic_guarded_poly_bound, data) < 0) - goto error; - - isl_set_free(set); - isl_qpolynomial_free(poly); - - return 0; -error: - isl_set_free(set); - isl_qpolynomial_free(poly); - return -1; -} - -int isl_qpolynomial_bound_on_domain_range(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct isl_bound *bound) -{ - struct range_data data; - int r; - - data.pwf = bound->pwf; - data.pwf_tight = bound->pwf_tight; - data.tight = bound->check_tight; - if (bound->type == isl_fold_min) - data.sign = -1; - else - data.sign = 1; - - r = qpolynomial_bound_on_domain_range(bset, poly, &data); - - bound->pwf = data.pwf; - bound->pwf_tight = data.pwf_tight; - - return r; -} diff --git a/cloog-0.16.3/isl/isl_range.h b/cloog-0.16.3/isl/isl_range.h deleted file mode 100644 index c097079..0000000 --- a/cloog-0.16.3/isl/isl_range.h +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int isl_qpolynomial_bound_on_domain_range(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct isl_bound *bound); -__isl_give isl_qpolynomial *isl_qpolynomial_terms_of_sign( - __isl_keep isl_qpolynomial *poly, int *signs, int sign); diff --git a/cloog-0.16.3/isl/isl_reordering.c b/cloog-0.16.3/isl/isl_reordering.c deleted file mode 100644 index 392152f..0000000 --- a/cloog-0.16.3/isl/isl_reordering.c +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include - -__isl_give isl_reordering *isl_reordering_alloc(isl_ctx *ctx, int len) -{ - isl_reordering *exp; - - exp = isl_alloc(ctx, struct isl_reordering, - sizeof(struct isl_reordering) + (len - 1) * sizeof(int)); - if (!exp) - return NULL; - - exp->ref = 1; - exp->len = len; - exp->dim = NULL; - - return exp; -} - -__isl_give isl_reordering *isl_reordering_copy(__isl_keep isl_reordering *exp) -{ - if (!exp) - return NULL; - - exp->ref++; - return exp; -} - -__isl_give isl_reordering *isl_reordering_dup(__isl_keep isl_reordering *r) -{ - int i; - isl_reordering *dup; - - if (!r) - return NULL; - - dup = isl_reordering_alloc(r->dim->ctx, r->len); - if (!dup) - return NULL; - - dup->dim = isl_dim_copy(r->dim); - if (!dup->dim) - return isl_reordering_free(dup); - for (i = 0; i < dup->len; ++i) - dup->pos[i] = r->pos[i]; - - return dup; -} - -__isl_give isl_reordering *isl_reordering_cow(__isl_take isl_reordering *r) -{ - if (!r) - return NULL; - - if (r->ref == 1) - return r; - r->ref--; - return isl_reordering_dup(r); -} - -void *isl_reordering_free(__isl_take isl_reordering *exp) -{ - if (!exp) - return NULL; - - if (--exp->ref > 0) - return NULL; - - isl_dim_free(exp->dim); - free(exp); - return NULL; -} - -/* Construct a reordering that maps the parameters of "alignee" - * to the corresponding parameters in a new dimension specification - * that has the parameters of "aligner" first, followed by - * any remaining parameters of "alignee" that do not occur in "aligner". - */ -__isl_give isl_reordering *isl_parameter_alignment_reordering( - __isl_keep isl_dim *alignee, __isl_keep isl_dim *aligner) -{ - int i, j; - isl_reordering *exp; - - if (!alignee || !aligner) - return NULL; - - exp = isl_reordering_alloc(alignee->ctx, alignee->nparam); - if (!exp) - return NULL; - - exp->dim = isl_dim_copy(aligner); - - for (i = 0; i < alignee->nparam; ++i) { - const char *name_i; - name_i = isl_dim_get_name(alignee, isl_dim_param, i); - if (!name_i) - isl_die(alignee->ctx, isl_error_invalid, - "cannot align unnamed parameters", goto error); - for (j = 0; j < aligner->nparam; ++j) { - const char *name_j; - name_j = isl_dim_get_name(aligner, isl_dim_param, j); - if (name_i == name_j) - break; - } - if (j < aligner->nparam) - exp->pos[i] = j; - else { - int pos; - pos = isl_dim_size(exp->dim, isl_dim_param); - exp->dim = isl_dim_add(exp->dim, isl_dim_param, 1); - exp->dim = isl_dim_set_name(exp->dim, - isl_dim_param, pos, name_i); - exp->pos[i] = pos; - } - } - - return exp; -error: - isl_reordering_free(exp); - return NULL; -} - -__isl_give isl_reordering *isl_reordering_extend(__isl_take isl_reordering *exp, - unsigned extra) -{ - int i; - isl_reordering *res; - int offset; - - if (!exp) - return NULL; - if (extra == 0) - return exp; - - offset = isl_dim_total(exp->dim) - exp->len; - res = isl_reordering_alloc(exp->dim->ctx, exp->len + extra); - if (!res) - goto error; - res->dim = isl_dim_copy(exp->dim); - for (i = 0; i < exp->len; ++i) - res->pos[i] = exp->pos[i]; - for (i = exp->len; i < res->len; ++i) - res->pos[i] = offset + i; - - isl_reordering_free(exp); - - return res; -error: - isl_reordering_free(exp); - return NULL; -} - -__isl_give isl_reordering *isl_reordering_extend_dim( - __isl_take isl_reordering *exp, __isl_take isl_dim *dim) -{ - isl_reordering *res; - - if (!exp || !dim) - goto error; - - res = isl_reordering_extend(isl_reordering_copy(exp), - isl_dim_total(dim) - exp->len); - res = isl_reordering_cow(res); - if (!res) - goto error; - isl_dim_free(res->dim); - res->dim = isl_dim_replace(dim, isl_dim_param, exp->dim); - - isl_reordering_free(exp); - - return res; -error: - isl_reordering_free(exp); - isl_dim_free(dim); - return NULL; -} - -void isl_reordering_dump(__isl_keep isl_reordering *exp) -{ - int i; - - for (i = 0; i < exp->len; ++i) - fprintf(stderr, "%d -> %d; ", i, exp->pos[i]); - fprintf(stderr, "\n"); -} diff --git a/cloog-0.16.3/isl/isl_reordering.h b/cloog-0.16.3/isl/isl_reordering.h deleted file mode 100644 index 7560d3a..0000000 --- a/cloog-0.16.3/isl/isl_reordering.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef ISL_REORDERING_H -#define ISL_REORDERING_H - -#include - -/* pos maps original dimensions to new dimensions. - * The final dimension is given by dim. - * The number of dimensions (i.e., the range of values) in the result - * may be larger than the number of dimensions in the input. - * In particular, the possible values of the entries in pos ranges from 0 to - * the total dimension of dim - 1, unless isl_reordering_extend - * has been called. - */ -struct isl_reordering { - int ref; - isl_dim *dim; - unsigned len; - int pos[1]; -}; -typedef struct isl_reordering isl_reordering; - -__isl_give isl_reordering *isl_parameter_alignment_reordering( - __isl_keep isl_dim *alignee, __isl_keep isl_dim *aligner); -__isl_give isl_reordering *isl_reordering_copy(__isl_keep isl_reordering *exp); -void *isl_reordering_free(__isl_take isl_reordering *exp); -__isl_give isl_reordering *isl_reordering_extend_dim( - __isl_take isl_reordering *exp, __isl_take isl_dim *dim); -__isl_give isl_reordering *isl_reordering_extend(__isl_take isl_reordering *exp, - unsigned extra); - -#endif diff --git a/cloog-0.16.3/isl/isl_sample.c b/cloog-0.16.3/isl/isl_sample.c deleted file mode 100644 index 9c9fb6d..0000000 --- a/cloog-0.16.3/isl/isl_sample.c +++ /dev/null @@ -1,1357 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include "isl_sample.h" -#include "isl_sample_piplib.h" -#include -#include -#include -#include "isl_equalities.h" -#include "isl_tab.h" -#include "isl_basis_reduction.h" -#include -#include - -static struct isl_vec *empty_sample(struct isl_basic_set *bset) -{ - struct isl_vec *vec; - - vec = isl_vec_alloc(bset->ctx, 0); - isl_basic_set_free(bset); - return vec; -} - -/* Construct a zero sample of the same dimension as bset. - * As a special case, if bset is zero-dimensional, this - * function creates a zero-dimensional sample point. - */ -static struct isl_vec *zero_sample(struct isl_basic_set *bset) -{ - unsigned dim; - struct isl_vec *sample; - - dim = isl_basic_set_total_dim(bset); - sample = isl_vec_alloc(bset->ctx, 1 + dim); - if (sample) { - isl_int_set_si(sample->el[0], 1); - isl_seq_clr(sample->el + 1, dim); - } - isl_basic_set_free(bset); - return sample; -} - -static struct isl_vec *interval_sample(struct isl_basic_set *bset) -{ - int i; - isl_int t; - struct isl_vec *sample; - - bset = isl_basic_set_simplify(bset); - if (!bset) - return NULL; - if (isl_basic_set_plain_is_empty(bset)) - return empty_sample(bset); - if (bset->n_eq == 0 && bset->n_ineq == 0) - return zero_sample(bset); - - sample = isl_vec_alloc(bset->ctx, 2); - if (!sample) - goto error; - if (!bset) - return NULL; - isl_int_set_si(sample->block.data[0], 1); - - if (bset->n_eq > 0) { - isl_assert(bset->ctx, bset->n_eq == 1, goto error); - isl_assert(bset->ctx, bset->n_ineq == 0, goto error); - if (isl_int_is_one(bset->eq[0][1])) - isl_int_neg(sample->el[1], bset->eq[0][0]); - else { - isl_assert(bset->ctx, isl_int_is_negone(bset->eq[0][1]), - goto error); - isl_int_set(sample->el[1], bset->eq[0][0]); - } - isl_basic_set_free(bset); - return sample; - } - - isl_int_init(t); - if (isl_int_is_one(bset->ineq[0][1])) - isl_int_neg(sample->block.data[1], bset->ineq[0][0]); - else - isl_int_set(sample->block.data[1], bset->ineq[0][0]); - for (i = 1; i < bset->n_ineq; ++i) { - isl_seq_inner_product(sample->block.data, - bset->ineq[i], 2, &t); - if (isl_int_is_neg(t)) - break; - } - isl_int_clear(t); - if (i < bset->n_ineq) { - isl_vec_free(sample); - return empty_sample(bset); - } - - isl_basic_set_free(bset); - return sample; -error: - isl_basic_set_free(bset); - isl_vec_free(sample); - return NULL; -} - -static struct isl_mat *independent_bounds(struct isl_basic_set *bset) -{ - int i, j, n; - struct isl_mat *dirs = NULL; - struct isl_mat *bounds = NULL; - unsigned dim; - - if (!bset) - return NULL; - - dim = isl_basic_set_n_dim(bset); - bounds = isl_mat_alloc(bset->ctx, 1+dim, 1+dim); - if (!bounds) - return NULL; - - isl_int_set_si(bounds->row[0][0], 1); - isl_seq_clr(bounds->row[0]+1, dim); - bounds->n_row = 1; - - if (bset->n_ineq == 0) - return bounds; - - dirs = isl_mat_alloc(bset->ctx, dim, dim); - if (!dirs) { - isl_mat_free(bounds); - return NULL; - } - isl_seq_cpy(dirs->row[0], bset->ineq[0]+1, dirs->n_col); - isl_seq_cpy(bounds->row[1], bset->ineq[0], bounds->n_col); - for (j = 1, n = 1; n < dim && j < bset->n_ineq; ++j) { - int pos; - - isl_seq_cpy(dirs->row[n], bset->ineq[j]+1, dirs->n_col); - - pos = isl_seq_first_non_zero(dirs->row[n], dirs->n_col); - if (pos < 0) - continue; - for (i = 0; i < n; ++i) { - int pos_i; - pos_i = isl_seq_first_non_zero(dirs->row[i], dirs->n_col); - if (pos_i < pos) - continue; - if (pos_i > pos) - break; - isl_seq_elim(dirs->row[n], dirs->row[i], pos, - dirs->n_col, NULL); - pos = isl_seq_first_non_zero(dirs->row[n], dirs->n_col); - if (pos < 0) - break; - } - if (pos < 0) - continue; - if (i < n) { - int k; - isl_int *t = dirs->row[n]; - for (k = n; k > i; --k) - dirs->row[k] = dirs->row[k-1]; - dirs->row[i] = t; - } - ++n; - isl_seq_cpy(bounds->row[n], bset->ineq[j], bounds->n_col); - } - isl_mat_free(dirs); - bounds->n_row = 1+n; - return bounds; -} - -static void swap_inequality(struct isl_basic_set *bset, int a, int b) -{ - isl_int *t = bset->ineq[a]; - bset->ineq[a] = bset->ineq[b]; - bset->ineq[b] = t; -} - -/* Skew into positive orthant and project out lineality space. - * - * We perform a unimodular transformation that turns a selected - * maximal set of linearly independent bounds into constraints - * on the first dimensions that impose that these first dimensions - * are non-negative. In particular, the constraint matrix is lower - * triangular with positive entries on the diagonal and negative - * entries below. - * If "bset" has a lineality space then these constraints (and therefore - * all constraints in bset) only involve the first dimensions. - * The remaining dimensions then do not appear in any constraints and - * we can select any value for them, say zero. We therefore project - * out this final dimensions and plug in the value zero later. This - * is accomplished by simply dropping the final columns of - * the unimodular transformation. - */ -static struct isl_basic_set *isl_basic_set_skew_to_positive_orthant( - struct isl_basic_set *bset, struct isl_mat **T) -{ - struct isl_mat *U = NULL; - struct isl_mat *bounds = NULL; - int i, j; - unsigned old_dim, new_dim; - - *T = NULL; - if (!bset) - return NULL; - - isl_assert(bset->ctx, isl_basic_set_n_param(bset) == 0, goto error); - isl_assert(bset->ctx, bset->n_div == 0, goto error); - isl_assert(bset->ctx, bset->n_eq == 0, goto error); - - old_dim = isl_basic_set_n_dim(bset); - /* Try to move (multiples of) unit rows up. */ - for (i = 0, j = 0; i < bset->n_ineq; ++i) { - int pos = isl_seq_first_non_zero(bset->ineq[i]+1, old_dim); - if (pos < 0) - continue; - if (isl_seq_first_non_zero(bset->ineq[i]+1+pos+1, - old_dim-pos-1) >= 0) - continue; - if (i != j) - swap_inequality(bset, i, j); - ++j; - } - bounds = independent_bounds(bset); - if (!bounds) - goto error; - new_dim = bounds->n_row - 1; - bounds = isl_mat_left_hermite(bounds, 1, &U, NULL); - if (!bounds) - goto error; - U = isl_mat_drop_cols(U, 1 + new_dim, old_dim - new_dim); - bset = isl_basic_set_preimage(bset, isl_mat_copy(U)); - if (!bset) - goto error; - *T = U; - isl_mat_free(bounds); - return bset; -error: - isl_mat_free(bounds); - isl_mat_free(U); - isl_basic_set_free(bset); - return NULL; -} - -/* Find a sample integer point, if any, in bset, which is known - * to have equalities. If bset contains no integer points, then - * return a zero-length vector. - * We simply remove the known equalities, compute a sample - * in the resulting bset, using the specified recurse function, - * and then transform the sample back to the original space. - */ -static struct isl_vec *sample_eq(struct isl_basic_set *bset, - struct isl_vec *(*recurse)(struct isl_basic_set *)) -{ - struct isl_mat *T; - struct isl_vec *sample; - - if (!bset) - return NULL; - - bset = isl_basic_set_remove_equalities(bset, &T, NULL); - sample = recurse(bset); - if (!sample || sample->size == 0) - isl_mat_free(T); - else - sample = isl_mat_vec_product(T, sample); - return sample; -} - -/* Return a matrix containing the equalities of the tableau - * in constraint form. The tableau is assumed to have - * an associated bset that has been kept up-to-date. - */ -static struct isl_mat *tab_equalities(struct isl_tab *tab) -{ - int i, j; - int n_eq; - struct isl_mat *eq; - struct isl_basic_set *bset; - - if (!tab) - return NULL; - - bset = isl_tab_peek_bset(tab); - isl_assert(tab->mat->ctx, bset, return NULL); - - n_eq = tab->n_var - tab->n_col + tab->n_dead; - if (tab->empty || n_eq == 0) - return isl_mat_alloc(tab->mat->ctx, 0, tab->n_var); - if (n_eq == tab->n_var) - return isl_mat_identity(tab->mat->ctx, tab->n_var); - - eq = isl_mat_alloc(tab->mat->ctx, n_eq, tab->n_var); - if (!eq) - return NULL; - for (i = 0, j = 0; i < tab->n_con; ++i) { - if (tab->con[i].is_row) - continue; - if (tab->con[i].index >= 0 && tab->con[i].index >= tab->n_dead) - continue; - if (i < bset->n_eq) - isl_seq_cpy(eq->row[j], bset->eq[i] + 1, tab->n_var); - else - isl_seq_cpy(eq->row[j], - bset->ineq[i - bset->n_eq] + 1, tab->n_var); - ++j; - } - isl_assert(bset->ctx, j == n_eq, goto error); - return eq; -error: - isl_mat_free(eq); - return NULL; -} - -/* Compute and return an initial basis for the bounded tableau "tab". - * - * If the tableau is either full-dimensional or zero-dimensional, - * the we simply return an identity matrix. - * Otherwise, we construct a basis whose first directions correspond - * to equalities. - */ -static struct isl_mat *initial_basis(struct isl_tab *tab) -{ - int n_eq; - struct isl_mat *eq; - struct isl_mat *Q; - - tab->n_unbounded = 0; - tab->n_zero = n_eq = tab->n_var - tab->n_col + tab->n_dead; - if (tab->empty || n_eq == 0 || n_eq == tab->n_var) - return isl_mat_identity(tab->mat->ctx, 1 + tab->n_var); - - eq = tab_equalities(tab); - eq = isl_mat_left_hermite(eq, 0, NULL, &Q); - if (!eq) - return NULL; - isl_mat_free(eq); - - Q = isl_mat_lin_to_aff(Q); - return Q; -} - -/* Given a tableau representing a set, find and return - * an integer point in the set, if there is any. - * - * We perform a depth first search - * for an integer point, by scanning all possible values in the range - * attained by a basis vector, where an initial basis may have been set - * by the calling function. Otherwise an initial basis that exploits - * the equalities in the tableau is created. - * tab->n_zero is currently ignored and is clobbered by this function. - * - * The tableau is allowed to have unbounded direction, but then - * the calling function needs to set an initial basis, with the - * unbounded directions last and with tab->n_unbounded set - * to the number of unbounded directions. - * Furthermore, the calling functions needs to add shifted copies - * of all constraints involving unbounded directions to ensure - * that any feasible rational value in these directions can be rounded - * up to yield a feasible integer value. - * In particular, let B define the given basis x' = B x - * and let T be the inverse of B, i.e., X = T x'. - * Let a x + c >= 0 be a constraint of the set represented by the tableau, - * or a T x' + c >= 0 in terms of the given basis. Assume that - * the bounded directions have an integer value, then we can safely - * round up the values for the unbounded directions if we make sure - * that x' not only satisfies the original constraint, but also - * the constraint "a T x' + c + s >= 0" with s the sum of all - * negative values in the last n_unbounded entries of "a T". - * The calling function therefore needs to add the constraint - * a x + c + s >= 0. The current function then scans the first - * directions for an integer value and once those have been found, - * it can compute "T ceil(B x)" to yield an integer point in the set. - * Note that during the search, the first rows of B may be changed - * by a basis reduction, but the last n_unbounded rows of B remain - * unaltered and are also not mixed into the first rows. - * - * The search is implemented iteratively. "level" identifies the current - * basis vector. "init" is true if we want the first value at the current - * level and false if we want the next value. - * - * The initial basis is the identity matrix. If the range in some direction - * contains more than one integer value, we perform basis reduction based - * on the value of ctx->opt->gbr - * - ISL_GBR_NEVER: never perform basis reduction - * - ISL_GBR_ONCE: only perform basis reduction the first - * time such a range is encountered - * - ISL_GBR_ALWAYS: always perform basis reduction when - * such a range is encountered - * - * When ctx->opt->gbr is set to ISL_GBR_ALWAYS, then we allow the basis - * reduction computation to return early. That is, as soon as it - * finds a reasonable first direction. - */ -struct isl_vec *isl_tab_sample(struct isl_tab *tab) -{ - unsigned dim; - unsigned gbr; - struct isl_ctx *ctx; - struct isl_vec *sample; - struct isl_vec *min; - struct isl_vec *max; - enum isl_lp_result res; - int level; - int init; - int reduced; - struct isl_tab_undo **snap; - - if (!tab) - return NULL; - if (tab->empty) - return isl_vec_alloc(tab->mat->ctx, 0); - - if (!tab->basis) - tab->basis = initial_basis(tab); - if (!tab->basis) - return NULL; - isl_assert(tab->mat->ctx, tab->basis->n_row == tab->n_var + 1, - return NULL); - isl_assert(tab->mat->ctx, tab->basis->n_col == tab->n_var + 1, - return NULL); - - ctx = tab->mat->ctx; - dim = tab->n_var; - gbr = ctx->opt->gbr; - - if (tab->n_unbounded == tab->n_var) { - sample = isl_tab_get_sample_value(tab); - sample = isl_mat_vec_product(isl_mat_copy(tab->basis), sample); - sample = isl_vec_ceil(sample); - sample = isl_mat_vec_inverse_product(isl_mat_copy(tab->basis), - sample); - return sample; - } - - if (isl_tab_extend_cons(tab, dim + 1) < 0) - return NULL; - - min = isl_vec_alloc(ctx, dim); - max = isl_vec_alloc(ctx, dim); - snap = isl_alloc_array(ctx, struct isl_tab_undo *, dim); - - if (!min || !max || !snap) - goto error; - - level = 0; - init = 1; - reduced = 0; - - while (level >= 0) { - int empty = 0; - if (init) { - res = isl_tab_min(tab, tab->basis->row[1 + level], - ctx->one, &min->el[level], NULL, 0); - if (res == isl_lp_empty) - empty = 1; - isl_assert(ctx, res != isl_lp_unbounded, goto error); - if (res == isl_lp_error) - goto error; - if (!empty && isl_tab_sample_is_integer(tab)) - break; - isl_seq_neg(tab->basis->row[1 + level] + 1, - tab->basis->row[1 + level] + 1, dim); - res = isl_tab_min(tab, tab->basis->row[1 + level], - ctx->one, &max->el[level], NULL, 0); - isl_seq_neg(tab->basis->row[1 + level] + 1, - tab->basis->row[1 + level] + 1, dim); - isl_int_neg(max->el[level], max->el[level]); - if (res == isl_lp_empty) - empty = 1; - isl_assert(ctx, res != isl_lp_unbounded, goto error); - if (res == isl_lp_error) - goto error; - if (!empty && isl_tab_sample_is_integer(tab)) - break; - if (!empty && !reduced && - ctx->opt->gbr != ISL_GBR_NEVER && - isl_int_lt(min->el[level], max->el[level])) { - unsigned gbr_only_first; - if (ctx->opt->gbr == ISL_GBR_ONCE) - ctx->opt->gbr = ISL_GBR_NEVER; - tab->n_zero = level; - gbr_only_first = ctx->opt->gbr_only_first; - ctx->opt->gbr_only_first = - ctx->opt->gbr == ISL_GBR_ALWAYS; - tab = isl_tab_compute_reduced_basis(tab); - ctx->opt->gbr_only_first = gbr_only_first; - if (!tab || !tab->basis) - goto error; - reduced = 1; - continue; - } - reduced = 0; - snap[level] = isl_tab_snap(tab); - } else - isl_int_add_ui(min->el[level], min->el[level], 1); - - if (empty || isl_int_gt(min->el[level], max->el[level])) { - level--; - init = 0; - if (level >= 0) - if (isl_tab_rollback(tab, snap[level]) < 0) - goto error; - continue; - } - isl_int_neg(tab->basis->row[1 + level][0], min->el[level]); - if (isl_tab_add_valid_eq(tab, tab->basis->row[1 + level]) < 0) - goto error; - isl_int_set_si(tab->basis->row[1 + level][0], 0); - if (level + tab->n_unbounded < dim - 1) { - ++level; - init = 1; - continue; - } - break; - } - - if (level >= 0) { - sample = isl_tab_get_sample_value(tab); - if (!sample) - goto error; - if (tab->n_unbounded && !isl_int_is_one(sample->el[0])) { - sample = isl_mat_vec_product(isl_mat_copy(tab->basis), - sample); - sample = isl_vec_ceil(sample); - sample = isl_mat_vec_inverse_product( - isl_mat_copy(tab->basis), sample); - } - } else - sample = isl_vec_alloc(ctx, 0); - - ctx->opt->gbr = gbr; - isl_vec_free(min); - isl_vec_free(max); - free(snap); - return sample; -error: - ctx->opt->gbr = gbr; - isl_vec_free(min); - isl_vec_free(max); - free(snap); - return NULL; -} - -static struct isl_vec *sample_bounded(struct isl_basic_set *bset); - -/* Compute a sample point of the given basic set, based on the given, - * non-trivial factorization. - */ -static __isl_give isl_vec *factored_sample(__isl_take isl_basic_set *bset, - __isl_take isl_factorizer *f) -{ - int i, n; - isl_vec *sample = NULL; - isl_ctx *ctx; - unsigned nparam; - unsigned nvar; - - ctx = isl_basic_set_get_ctx(bset); - if (!ctx) - goto error; - - nparam = isl_basic_set_dim(bset, isl_dim_param); - nvar = isl_basic_set_dim(bset, isl_dim_set); - - sample = isl_vec_alloc(ctx, 1 + isl_basic_set_total_dim(bset)); - if (!sample) - goto error; - isl_int_set_si(sample->el[0], 1); - - bset = isl_morph_basic_set(isl_morph_copy(f->morph), bset); - - for (i = 0, n = 0; i < f->n_group; ++i) { - isl_basic_set *bset_i; - isl_vec *sample_i; - - bset_i = isl_basic_set_copy(bset); - bset_i = isl_basic_set_drop_constraints_involving(bset_i, - nparam + n + f->len[i], nvar - n - f->len[i]); - bset_i = isl_basic_set_drop_constraints_involving(bset_i, - nparam, n); - bset_i = isl_basic_set_drop(bset_i, isl_dim_set, - n + f->len[i], nvar - n - f->len[i]); - bset_i = isl_basic_set_drop(bset_i, isl_dim_set, 0, n); - - sample_i = sample_bounded(bset_i); - if (!sample_i) - goto error; - if (sample_i->size == 0) { - isl_basic_set_free(bset); - isl_factorizer_free(f); - isl_vec_free(sample); - return sample_i; - } - isl_seq_cpy(sample->el + 1 + nparam + n, - sample_i->el + 1, f->len[i]); - isl_vec_free(sample_i); - - n += f->len[i]; - } - - f->morph = isl_morph_inverse(f->morph); - sample = isl_morph_vec(isl_morph_copy(f->morph), sample); - - isl_basic_set_free(bset); - isl_factorizer_free(f); - return sample; -error: - isl_basic_set_free(bset); - isl_factorizer_free(f); - isl_vec_free(sample); - return NULL; -} - -/* Given a basic set that is known to be bounded, find and return - * an integer point in the basic set, if there is any. - * - * After handling some trivial cases, we construct a tableau - * and then use isl_tab_sample to find a sample, passing it - * the identity matrix as initial basis. - */ -static struct isl_vec *sample_bounded(struct isl_basic_set *bset) -{ - unsigned dim; - struct isl_ctx *ctx; - struct isl_vec *sample; - struct isl_tab *tab = NULL; - isl_factorizer *f; - - if (!bset) - return NULL; - - if (isl_basic_set_plain_is_empty(bset)) - return empty_sample(bset); - - dim = isl_basic_set_total_dim(bset); - if (dim == 0) - return zero_sample(bset); - if (dim == 1) - return interval_sample(bset); - if (bset->n_eq > 0) - return sample_eq(bset, sample_bounded); - - f = isl_basic_set_factorizer(bset); - if (!f) - goto error; - if (f->n_group != 0) - return factored_sample(bset, f); - isl_factorizer_free(f); - - ctx = bset->ctx; - - tab = isl_tab_from_basic_set(bset); - if (tab && tab->empty) { - isl_tab_free(tab); - ISL_F_SET(bset, ISL_BASIC_SET_EMPTY); - sample = isl_vec_alloc(bset->ctx, 0); - isl_basic_set_free(bset); - return sample; - } - - if (isl_tab_track_bset(tab, isl_basic_set_copy(bset)) < 0) - goto error; - if (!ISL_F_ISSET(bset, ISL_BASIC_SET_NO_IMPLICIT)) - if (isl_tab_detect_implicit_equalities(tab) < 0) - goto error; - - sample = isl_tab_sample(tab); - if (!sample) - goto error; - - if (sample->size > 0) { - isl_vec_free(bset->sample); - bset->sample = isl_vec_copy(sample); - } - - isl_basic_set_free(bset); - isl_tab_free(tab); - return sample; -error: - isl_basic_set_free(bset); - isl_tab_free(tab); - return NULL; -} - -/* Given a basic set "bset" and a value "sample" for the first coordinates - * of bset, plug in these values and drop the corresponding coordinates. - * - * We do this by computing the preimage of the transformation - * - * [ 1 0 ] - * x = [ s 0 ] x' - * [ 0 I ] - * - * where [1 s] is the sample value and I is the identity matrix of the - * appropriate dimension. - */ -static struct isl_basic_set *plug_in(struct isl_basic_set *bset, - struct isl_vec *sample) -{ - int i; - unsigned total; - struct isl_mat *T; - - if (!bset || !sample) - goto error; - - total = isl_basic_set_total_dim(bset); - T = isl_mat_alloc(bset->ctx, 1 + total, 1 + total - (sample->size - 1)); - if (!T) - goto error; - - for (i = 0; i < sample->size; ++i) { - isl_int_set(T->row[i][0], sample->el[i]); - isl_seq_clr(T->row[i] + 1, T->n_col - 1); - } - for (i = 0; i < T->n_col - 1; ++i) { - isl_seq_clr(T->row[sample->size + i], T->n_col); - isl_int_set_si(T->row[sample->size + i][1 + i], 1); - } - isl_vec_free(sample); - - bset = isl_basic_set_preimage(bset, T); - return bset; -error: - isl_basic_set_free(bset); - isl_vec_free(sample); - return NULL; -} - -/* Given a basic set "bset", return any (possibly non-integer) point - * in the basic set. - */ -static struct isl_vec *rational_sample(struct isl_basic_set *bset) -{ - struct isl_tab *tab; - struct isl_vec *sample; - - if (!bset) - return NULL; - - tab = isl_tab_from_basic_set(bset); - sample = isl_tab_get_sample_value(tab); - isl_tab_free(tab); - - isl_basic_set_free(bset); - - return sample; -} - -/* Given a linear cone "cone" and a rational point "vec", - * construct a polyhedron with shifted copies of the constraints in "cone", - * i.e., a polyhedron with "cone" as its recession cone, such that each - * point x in this polyhedron is such that the unit box positioned at x - * lies entirely inside the affine cone 'vec + cone'. - * Any rational point in this polyhedron may therefore be rounded up - * to yield an integer point that lies inside said affine cone. - * - * Denote the constraints of cone by " >= 0" and the rational - * point "vec" by v/d. - * Let b_i = . Then the affine cone 'vec + cone' is given - * by - b/d >= 0. - * The polyhedron - ceil{b/d} >= 0 is a subset of this affine cone. - * We prefer this polyhedron over the actual affine cone because it doesn't - * require a scaling of the constraints. - * If each of the vertices of the unit cube positioned at x lies inside - * this polyhedron, then the whole unit cube at x lies inside the affine cone. - * We therefore impose that x' = x + \sum e_i, for any selection of unit - * vectors lies inside the polyhedron, i.e., - * - * - ceil{b/d} = + sum a_i - ceil{b/d} >= 0 - * - * The most stringent of these constraints is the one that selects - * all negative a_i, so the polyhedron we are looking for has constraints - * - * + sum_{a_i < 0} a_i - ceil{b/d} >= 0 - * - * Note that if cone were known to have only non-negative rays - * (which can be accomplished by a unimodular transformation), - * then we would only have to check the points x' = x + e_i - * and we only have to add the smallest negative a_i (if any) - * instead of the sum of all negative a_i. - */ -static struct isl_basic_set *shift_cone(struct isl_basic_set *cone, - struct isl_vec *vec) -{ - int i, j, k; - unsigned total; - - struct isl_basic_set *shift = NULL; - - if (!cone || !vec) - goto error; - - isl_assert(cone->ctx, cone->n_eq == 0, goto error); - - total = isl_basic_set_total_dim(cone); - - shift = isl_basic_set_alloc_dim(isl_basic_set_get_dim(cone), - 0, 0, cone->n_ineq); - - for (i = 0; i < cone->n_ineq; ++i) { - k = isl_basic_set_alloc_inequality(shift); - if (k < 0) - goto error; - isl_seq_cpy(shift->ineq[k] + 1, cone->ineq[i] + 1, total); - isl_seq_inner_product(shift->ineq[k] + 1, vec->el + 1, total, - &shift->ineq[k][0]); - isl_int_cdiv_q(shift->ineq[k][0], - shift->ineq[k][0], vec->el[0]); - isl_int_neg(shift->ineq[k][0], shift->ineq[k][0]); - for (j = 0; j < total; ++j) { - if (isl_int_is_nonneg(shift->ineq[k][1 + j])) - continue; - isl_int_add(shift->ineq[k][0], - shift->ineq[k][0], shift->ineq[k][1 + j]); - } - } - - isl_basic_set_free(cone); - isl_vec_free(vec); - - return isl_basic_set_finalize(shift); -error: - isl_basic_set_free(shift); - isl_basic_set_free(cone); - isl_vec_free(vec); - return NULL; -} - -/* Given a rational point vec in a (transformed) basic set, - * such that cone is the recession cone of the original basic set, - * "round up" the rational point to an integer point. - * - * We first check if the rational point just happens to be integer. - * If not, we transform the cone in the same way as the basic set, - * pick a point x in this cone shifted to the rational point such that - * the whole unit cube at x is also inside this affine cone. - * Then we simply round up the coordinates of x and return the - * resulting integer point. - */ -static struct isl_vec *round_up_in_cone(struct isl_vec *vec, - struct isl_basic_set *cone, struct isl_mat *U) -{ - unsigned total; - - if (!vec || !cone || !U) - goto error; - - isl_assert(vec->ctx, vec->size != 0, goto error); - if (isl_int_is_one(vec->el[0])) { - isl_mat_free(U); - isl_basic_set_free(cone); - return vec; - } - - total = isl_basic_set_total_dim(cone); - cone = isl_basic_set_preimage(cone, U); - cone = isl_basic_set_remove_dims(cone, isl_dim_set, - 0, total - (vec->size - 1)); - - cone = shift_cone(cone, vec); - - vec = rational_sample(cone); - vec = isl_vec_ceil(vec); - return vec; -error: - isl_mat_free(U); - isl_vec_free(vec); - isl_basic_set_free(cone); - return NULL; -} - -/* Concatenate two integer vectors, i.e., two vectors with denominator - * (stored in element 0) equal to 1. - */ -static struct isl_vec *vec_concat(struct isl_vec *vec1, struct isl_vec *vec2) -{ - struct isl_vec *vec; - - if (!vec1 || !vec2) - goto error; - isl_assert(vec1->ctx, vec1->size > 0, goto error); - isl_assert(vec2->ctx, vec2->size > 0, goto error); - isl_assert(vec1->ctx, isl_int_is_one(vec1->el[0]), goto error); - isl_assert(vec2->ctx, isl_int_is_one(vec2->el[0]), goto error); - - vec = isl_vec_alloc(vec1->ctx, vec1->size + vec2->size - 1); - if (!vec) - goto error; - - isl_seq_cpy(vec->el, vec1->el, vec1->size); - isl_seq_cpy(vec->el + vec1->size, vec2->el + 1, vec2->size - 1); - - isl_vec_free(vec1); - isl_vec_free(vec2); - - return vec; -error: - isl_vec_free(vec1); - isl_vec_free(vec2); - return NULL; -} - -/* Give a basic set "bset" with recession cone "cone", compute and - * return an integer point in bset, if any. - * - * If the recession cone is full-dimensional, then we know that - * bset contains an infinite number of integer points and it is - * fairly easy to pick one of them. - * If the recession cone is not full-dimensional, then we first - * transform bset such that the bounded directions appear as - * the first dimensions of the transformed basic set. - * We do this by using a unimodular transformation that transforms - * the equalities in the recession cone to equalities on the first - * dimensions. - * - * The transformed set is then projected onto its bounded dimensions. - * Note that to compute this projection, we can simply drop all constraints - * involving any of the unbounded dimensions since these constraints - * cannot be combined to produce a constraint on the bounded dimensions. - * To see this, assume that there is such a combination of constraints - * that produces a constraint on the bounded dimensions. This means - * that some combination of the unbounded dimensions has both an upper - * bound and a lower bound in terms of the bounded dimensions, but then - * this combination would be a bounded direction too and would have been - * transformed into a bounded dimensions. - * - * We then compute a sample value in the bounded dimensions. - * If no such value can be found, then the original set did not contain - * any integer points and we are done. - * Otherwise, we plug in the value we found in the bounded dimensions, - * project out these bounded dimensions and end up with a set with - * a full-dimensional recession cone. - * A sample point in this set is computed by "rounding up" any - * rational point in the set. - * - * The sample points in the bounded and unbounded dimensions are - * then combined into a single sample point and transformed back - * to the original space. - */ -__isl_give isl_vec *isl_basic_set_sample_with_cone( - __isl_take isl_basic_set *bset, __isl_take isl_basic_set *cone) -{ - unsigned total; - unsigned cone_dim; - struct isl_mat *M, *U; - struct isl_vec *sample; - struct isl_vec *cone_sample; - struct isl_ctx *ctx; - struct isl_basic_set *bounded; - - if (!bset || !cone) - goto error; - - ctx = bset->ctx; - total = isl_basic_set_total_dim(cone); - cone_dim = total - cone->n_eq; - - M = isl_mat_sub_alloc6(bset->ctx, cone->eq, 0, cone->n_eq, 1, total); - M = isl_mat_left_hermite(M, 0, &U, NULL); - if (!M) - goto error; - isl_mat_free(M); - - U = isl_mat_lin_to_aff(U); - bset = isl_basic_set_preimage(bset, isl_mat_copy(U)); - - bounded = isl_basic_set_copy(bset); - bounded = isl_basic_set_drop_constraints_involving(bounded, - total - cone_dim, cone_dim); - bounded = isl_basic_set_drop_dims(bounded, total - cone_dim, cone_dim); - sample = sample_bounded(bounded); - if (!sample || sample->size == 0) { - isl_basic_set_free(bset); - isl_basic_set_free(cone); - isl_mat_free(U); - return sample; - } - bset = plug_in(bset, isl_vec_copy(sample)); - cone_sample = rational_sample(bset); - cone_sample = round_up_in_cone(cone_sample, cone, isl_mat_copy(U)); - sample = vec_concat(sample, cone_sample); - sample = isl_mat_vec_product(U, sample); - return sample; -error: - isl_basic_set_free(cone); - isl_basic_set_free(bset); - return NULL; -} - -static void vec_sum_of_neg(struct isl_vec *v, isl_int *s) -{ - int i; - - isl_int_set_si(*s, 0); - - for (i = 0; i < v->size; ++i) - if (isl_int_is_neg(v->el[i])) - isl_int_add(*s, *s, v->el[i]); -} - -/* Given a tableau "tab", a tableau "tab_cone" that corresponds - * to the recession cone and the inverse of a new basis U = inv(B), - * with the unbounded directions in B last, - * add constraints to "tab" that ensure any rational value - * in the unbounded directions can be rounded up to an integer value. - * - * The new basis is given by x' = B x, i.e., x = U x'. - * For any rational value of the last tab->n_unbounded coordinates - * in the update tableau, the value that is obtained by rounding - * up this value should be contained in the original tableau. - * For any constraint "a x + c >= 0", we therefore need to add - * a constraint "a x + c + s >= 0", with s the sum of all negative - * entries in the last elements of "a U". - * - * Since we are not interested in the first entries of any of the "a U", - * we first drop the columns of U that correpond to bounded directions. - */ -static int tab_shift_cone(struct isl_tab *tab, - struct isl_tab *tab_cone, struct isl_mat *U) -{ - int i; - isl_int v; - struct isl_basic_set *bset = NULL; - - if (tab && tab->n_unbounded == 0) { - isl_mat_free(U); - return 0; - } - isl_int_init(v); - if (!tab || !tab_cone || !U) - goto error; - bset = isl_tab_peek_bset(tab_cone); - U = isl_mat_drop_cols(U, 0, tab->n_var - tab->n_unbounded); - for (i = 0; i < bset->n_ineq; ++i) { - int ok; - struct isl_vec *row = NULL; - if (isl_tab_is_equality(tab_cone, tab_cone->n_eq + i)) - continue; - row = isl_vec_alloc(bset->ctx, tab_cone->n_var); - if (!row) - goto error; - isl_seq_cpy(row->el, bset->ineq[i] + 1, tab_cone->n_var); - row = isl_vec_mat_product(row, isl_mat_copy(U)); - if (!row) - goto error; - vec_sum_of_neg(row, &v); - isl_vec_free(row); - if (isl_int_is_zero(v)) - continue; - tab = isl_tab_extend(tab, 1); - isl_int_add(bset->ineq[i][0], bset->ineq[i][0], v); - ok = isl_tab_add_ineq(tab, bset->ineq[i]) >= 0; - isl_int_sub(bset->ineq[i][0], bset->ineq[i][0], v); - if (!ok) - goto error; - } - - isl_mat_free(U); - isl_int_clear(v); - return 0; -error: - isl_mat_free(U); - isl_int_clear(v); - return -1; -} - -/* Compute and return an initial basis for the possibly - * unbounded tableau "tab". "tab_cone" is a tableau - * for the corresponding recession cone. - * Additionally, add constraints to "tab" that ensure - * that any rational value for the unbounded directions - * can be rounded up to an integer value. - * - * If the tableau is bounded, i.e., if the recession cone - * is zero-dimensional, then we just use inital_basis. - * Otherwise, we construct a basis whose first directions - * correspond to equalities, followed by bounded directions, - * i.e., equalities in the recession cone. - * The remaining directions are then unbounded. - */ -int isl_tab_set_initial_basis_with_cone(struct isl_tab *tab, - struct isl_tab *tab_cone) -{ - struct isl_mat *eq; - struct isl_mat *cone_eq; - struct isl_mat *U, *Q; - - if (!tab || !tab_cone) - return -1; - - if (tab_cone->n_col == tab_cone->n_dead) { - tab->basis = initial_basis(tab); - return tab->basis ? 0 : -1; - } - - eq = tab_equalities(tab); - if (!eq) - return -1; - tab->n_zero = eq->n_row; - cone_eq = tab_equalities(tab_cone); - eq = isl_mat_concat(eq, cone_eq); - if (!eq) - return -1; - tab->n_unbounded = tab->n_var - (eq->n_row - tab->n_zero); - eq = isl_mat_left_hermite(eq, 0, &U, &Q); - if (!eq) - return -1; - isl_mat_free(eq); - tab->basis = isl_mat_lin_to_aff(Q); - if (tab_shift_cone(tab, tab_cone, U) < 0) - return -1; - if (!tab->basis) - return -1; - return 0; -} - -/* Compute and return a sample point in bset using generalized basis - * reduction. We first check if the input set has a non-trivial - * recession cone. If so, we perform some extra preprocessing in - * sample_with_cone. Otherwise, we directly perform generalized basis - * reduction. - */ -static struct isl_vec *gbr_sample(struct isl_basic_set *bset) -{ - unsigned dim; - struct isl_basic_set *cone; - - dim = isl_basic_set_total_dim(bset); - - cone = isl_basic_set_recession_cone(isl_basic_set_copy(bset)); - if (!cone) - goto error; - - if (cone->n_eq < dim) - return isl_basic_set_sample_with_cone(bset, cone); - - isl_basic_set_free(cone); - return sample_bounded(bset); -error: - isl_basic_set_free(bset); - return NULL; -} - -static struct isl_vec *pip_sample(struct isl_basic_set *bset) -{ - struct isl_mat *T; - struct isl_ctx *ctx; - struct isl_vec *sample; - - bset = isl_basic_set_skew_to_positive_orthant(bset, &T); - if (!bset) - return NULL; - - ctx = bset->ctx; - sample = isl_pip_basic_set_sample(bset); - - if (sample && sample->size != 0) - sample = isl_mat_vec_product(T, sample); - else - isl_mat_free(T); - - return sample; -} - -static struct isl_vec *basic_set_sample(struct isl_basic_set *bset, int bounded) -{ - struct isl_ctx *ctx; - unsigned dim; - if (!bset) - return NULL; - - ctx = bset->ctx; - if (isl_basic_set_plain_is_empty(bset)) - return empty_sample(bset); - - dim = isl_basic_set_n_dim(bset); - isl_assert(ctx, isl_basic_set_n_param(bset) == 0, goto error); - isl_assert(ctx, bset->n_div == 0, goto error); - - if (bset->sample && bset->sample->size == 1 + dim) { - int contains = isl_basic_set_contains(bset, bset->sample); - if (contains < 0) - goto error; - if (contains) { - struct isl_vec *sample = isl_vec_copy(bset->sample); - isl_basic_set_free(bset); - return sample; - } - } - isl_vec_free(bset->sample); - bset->sample = NULL; - - if (bset->n_eq > 0) - return sample_eq(bset, bounded ? isl_basic_set_sample_bounded - : isl_basic_set_sample_vec); - if (dim == 0) - return zero_sample(bset); - if (dim == 1) - return interval_sample(bset); - - switch (bset->ctx->opt->ilp_solver) { - case ISL_ILP_PIP: - return pip_sample(bset); - case ISL_ILP_GBR: - return bounded ? sample_bounded(bset) : gbr_sample(bset); - } - isl_assert(bset->ctx, 0, ); -error: - isl_basic_set_free(bset); - return NULL; -} - -__isl_give isl_vec *isl_basic_set_sample_vec(__isl_take isl_basic_set *bset) -{ - return basic_set_sample(bset, 0); -} - -/* Compute an integer sample in "bset", where the caller guarantees - * that "bset" is bounded. - */ -struct isl_vec *isl_basic_set_sample_bounded(struct isl_basic_set *bset) -{ - return basic_set_sample(bset, 1); -} - -__isl_give isl_basic_set *isl_basic_set_from_vec(__isl_take isl_vec *vec) -{ - int i; - int k; - struct isl_basic_set *bset = NULL; - struct isl_ctx *ctx; - unsigned dim; - - if (!vec) - return NULL; - ctx = vec->ctx; - isl_assert(ctx, vec->size != 0, goto error); - - bset = isl_basic_set_alloc(ctx, 0, vec->size - 1, 0, vec->size - 1, 0); - if (!bset) - goto error; - dim = isl_basic_set_n_dim(bset); - for (i = dim - 1; i >= 0; --i) { - k = isl_basic_set_alloc_equality(bset); - if (k < 0) - goto error; - isl_seq_clr(bset->eq[k], 1 + dim); - isl_int_neg(bset->eq[k][0], vec->el[1 + i]); - isl_int_set(bset->eq[k][1 + i], vec->el[0]); - } - bset->sample = vec; - - return bset; -error: - isl_basic_set_free(bset); - isl_vec_free(vec); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_sample(__isl_take isl_basic_map *bmap) -{ - struct isl_basic_set *bset; - struct isl_vec *sample_vec; - - bset = isl_basic_map_underlying_set(isl_basic_map_copy(bmap)); - sample_vec = isl_basic_set_sample_vec(bset); - if (!sample_vec) - goto error; - if (sample_vec->size == 0) { - struct isl_basic_map *sample; - sample = isl_basic_map_empty_like(bmap); - isl_vec_free(sample_vec); - isl_basic_map_free(bmap); - return sample; - } - bset = isl_basic_set_from_vec(sample_vec); - return isl_basic_map_overlying_set(bset, bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_map *isl_map_sample(__isl_take isl_map *map) -{ - int i; - isl_basic_map *sample = NULL; - - if (!map) - goto error; - - for (i = 0; i < map->n; ++i) { - sample = isl_basic_map_sample(isl_basic_map_copy(map->p[i])); - if (!sample) - goto error; - if (!ISL_F_ISSET(sample, ISL_BASIC_MAP_EMPTY)) - break; - isl_basic_map_free(sample); - } - if (i == map->n) - sample = isl_basic_map_empty_like_map(map); - isl_map_free(map); - return sample; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_basic_set *isl_set_sample(__isl_take isl_set *set) -{ - return (isl_basic_set *) isl_map_sample((isl_map *)set); -} - -__isl_give isl_point *isl_basic_set_sample_point(__isl_take isl_basic_set *bset) -{ - isl_vec *vec; - isl_dim *dim; - - dim = isl_basic_set_get_dim(bset); - bset = isl_basic_set_underlying_set(bset); - vec = isl_basic_set_sample_vec(bset); - - return isl_point_alloc(dim, vec); -} - -__isl_give isl_point *isl_set_sample_point(__isl_take isl_set *set) -{ - int i; - isl_point *pnt; - - if (!set) - return NULL; - - for (i = 0; i < set->n; ++i) { - pnt = isl_basic_set_sample_point(isl_basic_set_copy(set->p[i])); - if (!pnt) - goto error; - if (!isl_point_is_void(pnt)) - break; - isl_point_free(pnt); - } - if (i == set->n) - pnt = isl_point_void(isl_set_get_dim(set)); - - isl_set_free(set); - return pnt; -error: - isl_set_free(set); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_sample.h b/cloog-0.16.3/isl/isl_sample.h deleted file mode 100644 index b657e6e..0000000 --- a/cloog-0.16.3/isl/isl_sample.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_SAMPLE_H -#define ISL_SAMPLE - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -__isl_give isl_vec *isl_basic_set_sample_vec(__isl_take isl_basic_set *bset); -struct isl_vec *isl_basic_set_sample_bounded(struct isl_basic_set *bset); -__isl_give isl_vec *isl_basic_set_sample_with_cone( - __isl_take isl_basic_set *bset, __isl_take isl_basic_set *cone); - -__isl_give isl_basic_set *isl_basic_set_from_vec(__isl_take isl_vec *vec); - -int isl_tab_set_initial_basis_with_cone(struct isl_tab *tab, - struct isl_tab *tab_cone); -struct isl_vec *isl_tab_sample(struct isl_tab *tab); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/isl_sample_no_piplib.c b/cloog-0.16.3/isl/isl_sample_no_piplib.c deleted file mode 100644 index e2c7ea4..0000000 --- a/cloog-0.16.3/isl/isl_sample_no_piplib.c +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include "isl_sample_piplib.h" - -struct isl_vec *isl_pip_basic_set_sample(struct isl_basic_set *bset) -{ - isl_basic_set_free(bset); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_sample_piplib.c b/cloog-0.16.3/isl/isl_sample_piplib.c deleted file mode 100644 index 3755008..0000000 --- a/cloog-0.16.3/isl/isl_sample_piplib.c +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include "isl_piplib.h" -#include "isl_sample_piplib.h" - -struct isl_vec *isl_pip_basic_set_sample(struct isl_basic_set *bset) -{ - PipOptions *options = NULL; - PipMatrix *domain = NULL; - PipQuast *sol = NULL; - struct isl_vec *vec = NULL; - unsigned dim; - struct isl_ctx *ctx; - - if (!bset) - goto error; - ctx = isl_basic_set_get_ctx(bset); - isl_assert(ctx, isl_basic_set_n_param(bset) == 0, goto error); - isl_assert(ctx, isl_basic_set_dim(bset, isl_dim_div) == 0, goto error); - dim = isl_basic_set_n_dim(bset); - domain = isl_basic_map_to_pip((struct isl_basic_map *)bset, 0, 0, 0); - if (!domain) - goto error; - - options = pip_options_init(); - if (!options) - goto error; - sol = pip_solve(domain, NULL, -1, options); - if (!sol) - goto error; - if (!sol->list) - vec = isl_vec_alloc(ctx, 0); - else { - PipList *l; - int i; - vec = isl_vec_alloc(ctx, 1 + dim); - if (!vec) - goto error; - isl_int_set_si(vec->block.data[0], 1); - for (i = 0, l = sol->list; l && i < dim; ++i, l = l->next) { - isl_seq_cpy_from_pip(&vec->block.data[1+i], - &l->vector->the_vector[0], 1); - isl_assert(ctx, !entier_zero_p(l->vector->the_deno[0]), - goto error); - } - isl_assert(ctx, i == dim, goto error); - } - - pip_quast_free(sol); - pip_options_free(options); - pip_matrix_free(domain); - - isl_basic_set_free(bset); - return vec; -error: - isl_vec_free(vec); - isl_basic_set_free(bset); - if (sol) - pip_quast_free(sol); - if (domain) - pip_matrix_free(domain); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_sample_piplib.h b/cloog-0.16.3/isl/isl_sample_piplib.h deleted file mode 100644 index 52f2156..0000000 --- a/cloog-0.16.3/isl/isl_sample_piplib.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_SAMPLE_PIP_H -#define ISL_SAMPLE_PIP - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_vec *isl_pip_basic_set_sample(struct isl_basic_set *bset); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.16.3/isl/isl_scan.c b/cloog-0.16.3/isl/isl_scan.c deleted file mode 100644 index 64654be..0000000 --- a/cloog-0.16.3/isl/isl_scan.c +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include "isl_basis_reduction.h" -#include "isl_scan.h" -#include -#include "isl_tab.h" - -struct isl_counter { - struct isl_scan_callback callback; - isl_int count; - isl_int max; -}; - -static int increment_counter(struct isl_scan_callback *cb, - __isl_take isl_vec *sample) -{ - struct isl_counter *cnt = (struct isl_counter *)cb; - - isl_int_add_ui(cnt->count, cnt->count, 1); - - isl_vec_free(sample); - - if (isl_int_is_zero(cnt->max) || isl_int_lt(cnt->count, cnt->max)) - return 0; - return -1; -} - -static int increment_range(struct isl_scan_callback *cb, isl_int min, isl_int max) -{ - struct isl_counter *cnt = (struct isl_counter *)cb; - - isl_int_add(cnt->count, cnt->count, max); - isl_int_sub(cnt->count, cnt->count, min); - isl_int_add_ui(cnt->count, cnt->count, 1); - - if (isl_int_is_zero(cnt->max) || isl_int_lt(cnt->count, cnt->max)) - return 0; - isl_int_set(cnt->count, cnt->max); - return -1; -} - -/* Call callback->add with the current sample value of the tableau "tab". - */ -static int add_solution(struct isl_tab *tab, struct isl_scan_callback *callback) -{ - struct isl_vec *sample; - - if (!tab) - return -1; - sample = isl_tab_get_sample_value(tab); - if (!sample) - return -1; - - return callback->add(callback, sample); -} - -static int scan_0D(struct isl_basic_set *bset, - struct isl_scan_callback *callback) -{ - struct isl_vec *sample; - - sample = isl_vec_alloc(bset->ctx, 1); - isl_basic_set_free(bset); - - if (!sample) - return -1; - - isl_int_set_si(sample->el[0], 1); - - return callback->add(callback, sample); -} - -/* Look for all integer points in "bset", which is assumed to be bounded, - * and call callback->add on each of them. - * - * We first compute a reduced basis for the set and then scan - * the set in the directions of this basis. - * We basically perform a depth first search, where in each level i - * we compute the range in the i-th basis vector direction, given - * fixed values in the directions of the previous basis vector. - * We then add an equality to the tableau fixing the value in the - * direction of the current basis vector to each value in the range - * in turn and then continue to the next level. - * - * The search is implemented iteratively. "level" identifies the current - * basis vector. "init" is true if we want the first value at the current - * level and false if we want the next value. - * Solutions are added in the leaves of the search tree, i.e., after - * we have fixed a value in each direction of the basis. - */ -int isl_basic_set_scan(struct isl_basic_set *bset, - struct isl_scan_callback *callback) -{ - unsigned dim; - struct isl_mat *B = NULL; - struct isl_tab *tab = NULL; - struct isl_vec *min; - struct isl_vec *max; - struct isl_tab_undo **snap; - int level; - int init; - enum isl_lp_result res; - - if (!bset) - return -1; - - dim = isl_basic_set_total_dim(bset); - if (dim == 0) - return scan_0D(bset, callback); - - min = isl_vec_alloc(bset->ctx, dim); - max = isl_vec_alloc(bset->ctx, dim); - snap = isl_alloc_array(bset->ctx, struct isl_tab_undo *, dim); - - if (!min || !max || !snap) - goto error; - - tab = isl_tab_from_basic_set(bset); - if (!tab) - goto error; - if (isl_tab_extend_cons(tab, dim + 1) < 0) - goto error; - - tab->basis = isl_mat_identity(bset->ctx, 1 + dim); - if (1) - tab = isl_tab_compute_reduced_basis(tab); - if (!tab) - goto error; - B = isl_mat_copy(tab->basis); - if (!B) - goto error; - - level = 0; - init = 1; - - while (level >= 0) { - int empty = 0; - if (init) { - res = isl_tab_min(tab, B->row[1 + level], - bset->ctx->one, &min->el[level], NULL, 0); - if (res == isl_lp_empty) - empty = 1; - if (res == isl_lp_error || res == isl_lp_unbounded) - goto error; - isl_seq_neg(B->row[1 + level] + 1, - B->row[1 + level] + 1, dim); - res = isl_tab_min(tab, B->row[1 + level], - bset->ctx->one, &max->el[level], NULL, 0); - isl_seq_neg(B->row[1 + level] + 1, - B->row[1 + level] + 1, dim); - isl_int_neg(max->el[level], max->el[level]); - if (res == isl_lp_empty) - empty = 1; - if (res == isl_lp_error || res == isl_lp_unbounded) - goto error; - snap[level] = isl_tab_snap(tab); - } else - isl_int_add_ui(min->el[level], min->el[level], 1); - - if (empty || isl_int_gt(min->el[level], max->el[level])) { - level--; - init = 0; - if (level >= 0) - if (isl_tab_rollback(tab, snap[level]) < 0) - goto error; - continue; - } - if (level == dim - 1 && callback->add == increment_counter) { - if (increment_range(callback, - min->el[level], max->el[level])) - goto error; - level--; - init = 0; - if (level >= 0) - if (isl_tab_rollback(tab, snap[level]) < 0) - goto error; - continue; - } - isl_int_neg(B->row[1 + level][0], min->el[level]); - if (isl_tab_add_valid_eq(tab, B->row[1 + level]) < 0) - goto error; - isl_int_set_si(B->row[1 + level][0], 0); - if (level < dim - 1) { - ++level; - init = 1; - continue; - } - if (add_solution(tab, callback) < 0) - goto error; - init = 0; - if (isl_tab_rollback(tab, snap[level]) < 0) - goto error; - } - - isl_tab_free(tab); - free(snap); - isl_vec_free(min); - isl_vec_free(max); - isl_basic_set_free(bset); - isl_mat_free(B); - return 0; -error: - isl_tab_free(tab); - free(snap); - isl_vec_free(min); - isl_vec_free(max); - isl_basic_set_free(bset); - isl_mat_free(B); - return -1; -} - -int isl_set_scan(__isl_take isl_set *set, struct isl_scan_callback *callback) -{ - int i; - - if (!set || !callback) - goto error; - - set = isl_set_cow(set); - set = isl_set_make_disjoint(set); - set = isl_set_compute_divs(set); - if (!set) - goto error; - - for (i = 0; i < set->n; ++i) - if (isl_basic_set_scan(isl_basic_set_copy(set->p[i]), - callback) < 0) - goto error; - - isl_set_free(set); - return 0; -error: - isl_set_free(set); - return -1; -} - -int isl_basic_set_count_upto(__isl_keep isl_basic_set *bset, - isl_int max, isl_int *count) -{ - struct isl_counter cnt = { { &increment_counter } }; - - if (!bset) - return -1; - - isl_int_init(cnt.count); - isl_int_init(cnt.max); - - isl_int_set_si(cnt.count, 0); - isl_int_set(cnt.max, max); - if (isl_basic_set_scan(isl_basic_set_copy(bset), &cnt.callback) < 0 && - isl_int_lt(cnt.count, cnt.max)) - goto error; - - isl_int_set(*count, cnt.count); - isl_int_clear(cnt.max); - isl_int_clear(cnt.count); - - return 0; -error: - isl_int_clear(cnt.count); - return -1; -} - -int isl_set_count_upto(__isl_keep isl_set *set, isl_int max, isl_int *count) -{ - struct isl_counter cnt = { { &increment_counter } }; - - if (!set) - return -1; - - isl_int_init(cnt.count); - isl_int_init(cnt.max); - - isl_int_set_si(cnt.count, 0); - isl_int_set(cnt.max, max); - if (isl_set_scan(isl_set_copy(set), &cnt.callback) < 0 && - isl_int_lt(cnt.count, cnt.max)) - goto error; - - isl_int_set(*count, cnt.count); - isl_int_clear(cnt.max); - isl_int_clear(cnt.count); - - return 0; -error: - isl_int_clear(cnt.count); - return -1; -} - -int isl_set_count(__isl_keep isl_set *set, isl_int *count) -{ - if (!set) - return -1; - return isl_set_count_upto(set, set->ctx->zero, count); -} diff --git a/cloog-0.16.3/isl/isl_scan.h b/cloog-0.16.3/isl/isl_scan.h deleted file mode 100644 index 8e5ad74..0000000 --- a/cloog-0.16.3/isl/isl_scan.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_SCAN_H -#define ISL_SCAN_H - -#include -#include - -struct isl_scan_callback { - int (*add)(struct isl_scan_callback *cb, __isl_take isl_vec *sample); -}; - -int isl_basic_set_scan(struct isl_basic_set *bset, - struct isl_scan_callback *callback); -int isl_set_scan(__isl_take isl_set *set, struct isl_scan_callback *callback); - -#endif diff --git a/cloog-0.16.3/isl/isl_schedule.c b/cloog-0.16.3/isl/isl_schedule.c deleted file mode 100644 index 320db6c..0000000 --- a/cloog-0.16.3/isl/isl_schedule.c +++ /dev/null @@ -1,2742 +0,0 @@ -/* - * Copyright 2011 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* - * The scheduling algorithm implemented in this file was inspired by - * Bondhugula et al., "Automatic Transformations for Communication-Minimized - * Parallelization and Locality Optimization in the Polyhedral Model". - */ - - -/* Internal information about a node that is used during the construction - * of a schedule. - * dim represents the space in which the domain lives - * sched is a matrix representation of the schedule being constructed - * for this node - * sched_map is an isl_map representation of the same (partial) schedule - * sched_map may be NULL - * rank is the number of linearly independent rows in the linear part - * of sched - * the columns of cmap represent a change of basis for the schedule - * coefficients; the first rank columns span the linear part of - * the schedule rows - * start is the first variable in the LP problem in the sequences that - * represents the schedule coefficients of this node - * nvar is the dimension of the domain - * nparam is the number of parameters or 0 if we are not constructing - * a parametric schedule - * - * scc is the index of SCC (or WCC) this node belongs to - * - * band contains the band index for each of the rows of the schedule. - * band_id is used to differentiate between separate bands at the same - * level within the same parent band, i.e., bands that are separated - * by the parent band or bands that are independent of each other. - * zero contains a boolean for each of the rows of the schedule, - * indicating whether the corresponding scheduling dimension results - * in zero dependence distances within its band and with respect - * to the proximity edges. - * - * index, min_index and on_stack are used during the SCC detection - * index represents the order in which nodes are visited. - * min_index is the index of the root of a (sub)component. - * on_stack indicates whether the node is currently on the stack. - */ -struct isl_sched_node { - isl_dim *dim; - isl_mat *sched; - isl_map *sched_map; - int rank; - isl_mat *cmap; - int start; - int nvar; - int nparam; - - int scc; - - int *band; - int *band_id; - int *zero; - - /* scc detection */ - int index; - int min_index; - int on_stack; -}; - -static int node_has_dim(const void *entry, const void *val) -{ - struct isl_sched_node *node = (struct isl_sched_node *)entry; - isl_dim *dim = (isl_dim *)val; - - return isl_dim_equal(node->dim, dim); -} - -/* An edge in the dependence graph. An edge may be used to - * ensure validity of the generated schedule, to minimize the dependence - * distance or both - * - * map is the dependence relation - * src is the source node - * dst is the sink node - * validity is set if the edge is used to ensure correctness - * proximity is set if the edge is used to minimize dependence distances - * - * For validity edges, start and end mark the sequence of inequality - * constraints in the LP problem that encode the validity constraint - * corresponding to this edge. - */ -struct isl_sched_edge { - isl_map *map; - - struct isl_sched_node *src; - struct isl_sched_node *dst; - - int validity; - int proximity; - - int start; - int end; -}; - -/* Internal information about the dependence graph used during - * the construction of the schedule. - * - * intra_hmap is a cache, mapping dependence relations to their dual, - * for dependences from a node to itself - * inter_hmap is a cache, mapping dependence relations to their dual, - * for dependences between distinct nodes - * - * n is the number of nodes - * node is the list of nodes - * maxvar is the maximal number of variables over all nodes - * n_row is the current (maximal) number of linearly independent - * rows in the node schedules - * n_total_row is the current number of rows in the node schedules - * n_band is the current number of completed bands - * band_start is the starting row in the node schedules of the current band - * root is set if this graph is the original dependence graph, - * without any splitting - * - * sorted contains a list of node indices sorted according to the - * SCC to which a node belongs - * - * n_edge is the number of edges - * edge is the list of edges - * edge_table contains pointers into the edge array, hashed on the source - * and sink spaces; the table only contains edges that represent - * validity constraints (and that may or may not also represent proximity - * constraints) - * - * node_table contains pointers into the node array, hashed on the space - * - * region contains a list of variable sequences that should be non-trivial - * - * lp contains the (I)LP problem used to obtain new schedule rows - * - * src_scc and dst_scc are the source and sink SCCs of an edge with - * conflicting constraints - * - * scc, sp, index and stack are used during the detection of SCCs - * scc is the number of the next SCC - * stack contains the nodes on the path from the root to the current node - * sp is the stack pointer - * index is the index of the last node visited - */ -struct isl_sched_graph { - isl_hmap_map_basic_set *intra_hmap; - isl_hmap_map_basic_set *inter_hmap; - - struct isl_sched_node *node; - int n; - int maxvar; - int n_row; - - int *sorted; - - int n_band; - int n_total_row; - int band_start; - - int root; - - struct isl_sched_edge *edge; - int n_edge; - struct isl_hash_table *edge_table; - - struct isl_hash_table *node_table; - struct isl_region *region; - - isl_basic_set *lp; - - int src_scc; - int dst_scc; - - /* scc detection */ - int scc; - int sp; - int index; - int *stack; -}; - -/* Initialize node_table based on the list of nodes. - */ -static int graph_init_table(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i; - - graph->node_table = isl_hash_table_alloc(ctx, graph->n); - if (!graph->node_table) - return -1; - - for (i = 0; i < graph->n; ++i) { - struct isl_hash_table_entry *entry; - uint32_t hash; - - hash = isl_dim_get_hash(graph->node[i].dim); - entry = isl_hash_table_find(ctx, graph->node_table, hash, - &node_has_dim, - graph->node[i].dim, 1); - if (!entry) - return -1; - entry->data = &graph->node[i]; - } - - return 0; -} - -/* Return a pointer to the node that lives within the given space, - * or NULL if there is no such node. - */ -static struct isl_sched_node *graph_find_node(isl_ctx *ctx, - struct isl_sched_graph *graph, __isl_keep isl_dim *dim) -{ - struct isl_hash_table_entry *entry; - uint32_t hash; - - hash = isl_dim_get_hash(dim); - entry = isl_hash_table_find(ctx, graph->node_table, hash, - &node_has_dim, dim, 0); - - return entry ? entry->data : NULL; -} - -static int edge_has_src_and_dst(const void *entry, const void *val) -{ - const struct isl_sched_edge *edge = entry; - const struct isl_sched_edge *temp = val; - - return edge->src == temp->src && edge->dst == temp->dst; -} - -/* Initialize edge_table based on the list of edges. - * Only edges with validity set are added to the table. - */ -static int graph_init_edge_table(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i; - - graph->edge_table = isl_hash_table_alloc(ctx, graph->n_edge); - if (!graph->edge_table) - return -1; - - for (i = 0; i < graph->n_edge; ++i) { - struct isl_hash_table_entry *entry; - uint32_t hash; - - if (!graph->edge[i].validity) - continue; - - hash = isl_hash_init(); - hash = isl_hash_builtin(hash, graph->edge[i].src); - hash = isl_hash_builtin(hash, graph->edge[i].dst); - entry = isl_hash_table_find(ctx, graph->edge_table, hash, - &edge_has_src_and_dst, - &graph->edge[i], 1); - if (!entry) - return -1; - entry->data = &graph->edge[i]; - } - - return 0; -} - -/* Check whether the dependence graph has a (validity) edge - * between the given two nodes. - */ -static int graph_has_edge(struct isl_sched_graph *graph, - struct isl_sched_node *src, struct isl_sched_node *dst) -{ - isl_ctx *ctx = isl_dim_get_ctx(src->dim); - struct isl_hash_table_entry *entry; - uint32_t hash; - struct isl_sched_edge temp = { .src = src, .dst = dst }; - struct isl_sched_edge *edge; - int empty; - - hash = isl_hash_init(); - hash = isl_hash_builtin(hash, temp.src); - hash = isl_hash_builtin(hash, temp.dst); - entry = isl_hash_table_find(ctx, graph->edge_table, hash, - &edge_has_src_and_dst, &temp, 0); - if (!entry) - return 0; - - edge = entry->data; - empty = isl_map_plain_is_empty(edge->map); - if (empty < 0) - return -1; - - return !empty; -} - -static int graph_alloc(isl_ctx *ctx, struct isl_sched_graph *graph, - int n_node, int n_edge) -{ - int i; - - graph->n = n_node; - graph->n_edge = n_edge; - graph->node = isl_calloc_array(ctx, struct isl_sched_node, graph->n); - graph->sorted = isl_calloc_array(ctx, int, graph->n); - graph->region = isl_alloc_array(ctx, struct isl_region, graph->n); - graph->stack = isl_alloc_array(ctx, int, graph->n); - graph->edge = isl_calloc_array(ctx, - struct isl_sched_edge, graph->n_edge); - - graph->intra_hmap = isl_hmap_map_basic_set_alloc(ctx, 2 * n_edge); - graph->inter_hmap = isl_hmap_map_basic_set_alloc(ctx, 2 * n_edge); - - if (!graph->node || !graph->region || !graph->stack || !graph->edge || - !graph->sorted) - return -1; - - for(i = 0; i < graph->n; ++i) - graph->sorted[i] = i; - - return 0; -} - -static void graph_free(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i; - - isl_hmap_map_basic_set_free(ctx, graph->intra_hmap); - isl_hmap_map_basic_set_free(ctx, graph->inter_hmap); - - for (i = 0; i < graph->n; ++i) { - isl_dim_free(graph->node[i].dim); - isl_mat_free(graph->node[i].sched); - isl_map_free(graph->node[i].sched_map); - isl_mat_free(graph->node[i].cmap); - if (graph->root) { - free(graph->node[i].band); - free(graph->node[i].band_id); - free(graph->node[i].zero); - } - } - free(graph->node); - free(graph->sorted); - for (i = 0; i < graph->n_edge; ++i) - isl_map_free(graph->edge[i].map); - free(graph->edge); - free(graph->region); - free(graph->stack); - isl_hash_table_free(ctx, graph->edge_table); - isl_hash_table_free(ctx, graph->node_table); - isl_basic_set_free(graph->lp); -} - -/* Add a new node to the graph representing the given set. - */ -static int extract_node(__isl_take isl_set *set, void *user) -{ - int nvar, nparam; - isl_ctx *ctx; - isl_dim *dim; - isl_mat *sched; - struct isl_sched_graph *graph = user; - int *band, *band_id, *zero; - - ctx = isl_set_get_ctx(set); - dim = isl_set_get_dim(set); - isl_set_free(set); - nvar = isl_dim_size(dim, isl_dim_set); - nparam = isl_dim_size(dim, isl_dim_param); - if (!ctx->opt->schedule_parametric) - nparam = 0; - sched = isl_mat_alloc(ctx, 0, 1 + nparam + nvar); - graph->node[graph->n].dim = dim; - graph->node[graph->n].nvar = nvar; - graph->node[graph->n].nparam = nparam; - graph->node[graph->n].sched = sched; - graph->node[graph->n].sched_map = NULL; - band = isl_alloc_array(ctx, int, graph->n_edge + nvar); - graph->node[graph->n].band = band; - band_id = isl_calloc_array(ctx, int, graph->n_edge + nvar); - graph->node[graph->n].band_id = band_id; - zero = isl_calloc_array(ctx, int, graph->n_edge + nvar); - graph->node[graph->n].zero = zero; - graph->n++; - - if (!sched || !band || !band_id || !zero) - return -1; - - return 0; -} - -/* Add a new edge to the graph based on the given map. - * Edges are first extracted from the validity dependences, - * from which the edge_table is constructed. - * Afterwards, the proximity dependences are added. If a proximity - * dependence relation happens to be identical to one of the - * validity dependence relations added before, then we don't create - * a new edge, but instead mark the original edge as also representing - * a proximity dependence. - */ -static int extract_edge(__isl_take isl_map *map, void *user) -{ - isl_ctx *ctx = isl_map_get_ctx(map); - struct isl_sched_graph *graph = user; - struct isl_sched_node *src, *dst; - isl_dim *dim; - - dim = isl_dim_domain(isl_map_get_dim(map)); - src = graph_find_node(ctx, graph, dim); - isl_dim_free(dim); - dim = isl_dim_range(isl_map_get_dim(map)); - dst = graph_find_node(ctx, graph, dim); - isl_dim_free(dim); - - if (!src || !dst) { - isl_map_free(map); - return 0; - } - - graph->edge[graph->n_edge].src = src; - graph->edge[graph->n_edge].dst = dst; - graph->edge[graph->n_edge].map = map; - graph->edge[graph->n_edge].validity = !graph->edge_table; - graph->edge[graph->n_edge].proximity = !!graph->edge_table; - graph->n_edge++; - - if (graph->edge_table) { - uint32_t hash; - struct isl_hash_table_entry *entry; - struct isl_sched_edge *edge; - int is_equal; - - hash = isl_hash_init(); - hash = isl_hash_builtin(hash, src); - hash = isl_hash_builtin(hash, dst); - entry = isl_hash_table_find(ctx, graph->edge_table, hash, - &edge_has_src_and_dst, - &graph->edge[graph->n_edge - 1], 0); - if (!entry) - return 0; - edge = entry->data; - is_equal = isl_map_plain_is_equal(map, edge->map); - if (is_equal < 0) - return -1; - if (!is_equal) - return 0; - - graph->n_edge--; - edge->proximity = 1; - isl_map_free(map); - } - - return 0; -} - -/* Check whether there is a validity dependence from src to dst, - * forcing dst to follow src. - */ -static int node_follows(struct isl_sched_graph *graph, - struct isl_sched_node *dst, struct isl_sched_node *src) -{ - return graph_has_edge(graph, src, dst); -} - -/* Perform Tarjan's algorithm for computing the strongly connected components - * in the dependence graph (only validity edges). - * If directed is not set, we consider the graph to be undirected and - * we effectively compute the (weakly) connected components. - */ -static int detect_sccs_tarjan(struct isl_sched_graph *g, int i, int directed) -{ - int j; - - g->node[i].index = g->index; - g->node[i].min_index = g->index; - g->node[i].on_stack = 1; - g->index++; - g->stack[g->sp++] = i; - - for (j = g->n - 1; j >= 0; --j) { - int f; - - if (j == i) - continue; - if (g->node[j].index >= 0 && - (!g->node[j].on_stack || - g->node[j].index > g->node[i].min_index)) - continue; - - f = node_follows(g, &g->node[i], &g->node[j]); - if (f < 0) - return -1; - if (!f && !directed) { - f = node_follows(g, &g->node[j], &g->node[i]); - if (f < 0) - return -1; - } - if (!f) - continue; - if (g->node[j].index < 0) { - detect_sccs_tarjan(g, j, directed); - if (g->node[j].min_index < g->node[i].min_index) - g->node[i].min_index = g->node[j].min_index; - } else if (g->node[j].index < g->node[i].min_index) - g->node[i].min_index = g->node[j].index; - } - - if (g->node[i].index != g->node[i].min_index) - return 0; - - do { - j = g->stack[--g->sp]; - g->node[j].on_stack = 0; - g->node[j].scc = g->scc; - } while (j != i); - g->scc++; - - return 0; -} - -static int detect_ccs(struct isl_sched_graph *graph, int directed) -{ - int i; - - graph->index = 0; - graph->sp = 0; - graph->scc = 0; - for (i = graph->n - 1; i >= 0; --i) - graph->node[i].index = -1; - - for (i = graph->n - 1; i >= 0; --i) { - if (graph->node[i].index >= 0) - continue; - if (detect_sccs_tarjan(graph, i, directed) < 0) - return -1; - } - - return 0; -} - -/* Apply Tarjan's algorithm to detect the strongly connected components - * in the dependence graph. - */ -static int detect_sccs(struct isl_sched_graph *graph) -{ - return detect_ccs(graph, 1); -} - -/* Apply Tarjan's algorithm to detect the (weakly) connected components - * in the dependence graph. - */ -static int detect_wccs(struct isl_sched_graph *graph) -{ - return detect_ccs(graph, 0); -} - -static int cmp_scc(const void *a, const void *b, void *data) -{ - struct isl_sched_graph *graph = data; - const int *i1 = a; - const int *i2 = b; - - return graph->node[*i1].scc - graph->node[*i2].scc; -} - -/* Sort the elements of graph->sorted according to the corresponding SCCs. - */ -static void sort_sccs(struct isl_sched_graph *graph) -{ - isl_quicksort(graph->sorted, graph->n, sizeof(int), &cmp_scc, graph); -} - -/* Given a dependence relation R from a node to itself, - * construct the set of coefficients of valid constraints for elements - * in that dependence relation. - * In particular, the result contains tuples of coefficients - * c_0, c_n, c_x such that - * - * c_0 + c_n n + c_x y - c_x x >= 0 for each (x,y) in R - * - * or, equivalently, - * - * c_0 + c_n n + c_x d >= 0 for each d in delta R = { y - x | (x,y) in R } - * - * We choose here to compute the dual of delta R. - * Alternatively, we could have computed the dual of R, resulting - * in a set of tuples c_0, c_n, c_x, c_y, and then - * plugged in (c_0, c_n, c_x, -c_x). - */ -static __isl_give isl_basic_set *intra_coefficients( - struct isl_sched_graph *graph, __isl_take isl_map *map) -{ - isl_ctx *ctx = isl_map_get_ctx(map); - isl_set *delta; - isl_basic_set *coef; - - if (isl_hmap_map_basic_set_has(ctx, graph->intra_hmap, map)) - return isl_hmap_map_basic_set_get(ctx, graph->intra_hmap, map); - - delta = isl_set_remove_divs(isl_map_deltas(isl_map_copy(map))); - coef = isl_set_coefficients(delta); - isl_hmap_map_basic_set_set(ctx, graph->intra_hmap, map, - isl_basic_set_copy(coef)); - - return coef; -} - -/* Given a dependence relation R, * construct the set of coefficients - * of valid constraints for elements in that dependence relation. - * In particular, the result contains tuples of coefficients - * c_0, c_n, c_x, c_y such that - * - * c_0 + c_n n + c_x x + c_y y >= 0 for each (x,y) in R - * - */ -static __isl_give isl_basic_set *inter_coefficients( - struct isl_sched_graph *graph, __isl_take isl_map *map) -{ - isl_ctx *ctx = isl_map_get_ctx(map); - isl_set *set; - isl_basic_set *coef; - - if (isl_hmap_map_basic_set_has(ctx, graph->inter_hmap, map)) - return isl_hmap_map_basic_set_get(ctx, graph->inter_hmap, map); - - set = isl_map_wrap(isl_map_remove_divs(isl_map_copy(map))); - coef = isl_set_coefficients(set); - isl_hmap_map_basic_set_set(ctx, graph->inter_hmap, map, - isl_basic_set_copy(coef)); - - return coef; -} - -/* Add constraints to graph->lp that force validity for the given - * dependence from a node i to itself. - * That is, add constraints that enforce - * - * (c_i_0 + c_i_n n + c_i_x y) - (c_i_0 + c_i_n n + c_i_x x) - * = c_i_x (y - x) >= 0 - * - * for each (x,y) in R. - * We obtain general constraints on coefficients (c_0, c_n, c_x) - * of valid constraints for (y - x) and then plug in (0, 0, c_i_x^+ - c_i_x^-), - * where c_i_x = c_i_x^+ - c_i_x^-, with c_i_x^+ and c_i_x^- non-negative. - * In graph->lp, the c_i_x^- appear before their c_i_x^+ counterpart. - * - * Actually, we do not construct constraints for the c_i_x themselves, - * but for the coefficients of c_i_x written as a linear combination - * of the columns in node->cmap. - */ -static int add_intra_validity_constraints(struct isl_sched_graph *graph, - struct isl_sched_edge *edge) -{ - unsigned total; - isl_map *map = isl_map_copy(edge->map); - isl_ctx *ctx = isl_map_get_ctx(map); - isl_dim *dim; - isl_dim_map *dim_map; - isl_basic_set *coef; - struct isl_sched_node *node = edge->src; - - coef = intra_coefficients(graph, map); - - dim = isl_dim_domain(isl_dim_unwrap(isl_basic_set_get_dim(coef))); - - coef = isl_basic_set_transform_dims(coef, isl_dim_set, - isl_dim_size(dim, isl_dim_set), isl_mat_copy(node->cmap)); - - total = isl_basic_set_total_dim(graph->lp); - dim_map = isl_dim_map_alloc(ctx, total); - isl_dim_map_range(dim_map, node->start + 2 * node->nparam + 1, 2, - isl_dim_size(dim, isl_dim_set), 1, - node->nvar, -1); - isl_dim_map_range(dim_map, node->start + 2 * node->nparam + 2, 2, - isl_dim_size(dim, isl_dim_set), 1, - node->nvar, 1); - graph->lp = isl_basic_set_extend_constraints(graph->lp, - coef->n_eq, coef->n_ineq); - graph->lp = isl_basic_set_add_constraints_dim_map(graph->lp, - coef, dim_map); - isl_dim_free(dim); - - return 0; -} - -/* Add constraints to graph->lp that force validity for the given - * dependence from node i to node j. - * That is, add constraints that enforce - * - * (c_j_0 + c_j_n n + c_j_x y) - (c_i_0 + c_i_n n + c_i_x x) >= 0 - * - * for each (x,y) in R. - * We obtain general constraints on coefficients (c_0, c_n, c_x, c_y) - * of valid constraints for R and then plug in - * (c_j_0 - c_i_0, c_j_n^+ - c_j_n^- - (c_i_n^+ - c_i_n^-), - * c_j_x^+ - c_j_x^- - (c_i_x^+ - c_i_x^-)), - * where c_* = c_*^+ - c_*^-, with c_*^+ and c_*^- non-negative. - * In graph->lp, the c_*^- appear before their c_*^+ counterpart. - * - * Actually, we do not construct constraints for the c_*_x themselves, - * but for the coefficients of c_*_x written as a linear combination - * of the columns in node->cmap. - */ -static int add_inter_validity_constraints(struct isl_sched_graph *graph, - struct isl_sched_edge *edge) -{ - unsigned total; - isl_map *map = isl_map_copy(edge->map); - isl_ctx *ctx = isl_map_get_ctx(map); - isl_dim *dim; - isl_dim_map *dim_map; - isl_basic_set *coef; - struct isl_sched_node *src = edge->src; - struct isl_sched_node *dst = edge->dst; - - coef = inter_coefficients(graph, map); - - dim = isl_dim_domain(isl_dim_unwrap(isl_basic_set_get_dim(coef))); - - coef = isl_basic_set_transform_dims(coef, isl_dim_set, - isl_dim_size(dim, isl_dim_set), isl_mat_copy(src->cmap)); - coef = isl_basic_set_transform_dims(coef, isl_dim_set, - isl_dim_size(dim, isl_dim_set) + src->nvar, - isl_mat_copy(dst->cmap)); - - total = isl_basic_set_total_dim(graph->lp); - dim_map = isl_dim_map_alloc(ctx, total); - - isl_dim_map_range(dim_map, dst->start, 0, 0, 0, 1, 1); - isl_dim_map_range(dim_map, dst->start + 1, 2, 1, 1, dst->nparam, -1); - isl_dim_map_range(dim_map, dst->start + 2, 2, 1, 1, dst->nparam, 1); - isl_dim_map_range(dim_map, dst->start + 2 * dst->nparam + 1, 2, - isl_dim_size(dim, isl_dim_set) + src->nvar, 1, - dst->nvar, -1); - isl_dim_map_range(dim_map, dst->start + 2 * dst->nparam + 2, 2, - isl_dim_size(dim, isl_dim_set) + src->nvar, 1, - dst->nvar, 1); - - isl_dim_map_range(dim_map, src->start, 0, 0, 0, 1, -1); - isl_dim_map_range(dim_map, src->start + 1, 2, 1, 1, src->nparam, 1); - isl_dim_map_range(dim_map, src->start + 2, 2, 1, 1, src->nparam, -1); - isl_dim_map_range(dim_map, src->start + 2 * src->nparam + 1, 2, - isl_dim_size(dim, isl_dim_set), 1, - src->nvar, 1); - isl_dim_map_range(dim_map, src->start + 2 * src->nparam + 2, 2, - isl_dim_size(dim, isl_dim_set), 1, - src->nvar, -1); - - edge->start = graph->lp->n_ineq; - graph->lp = isl_basic_set_extend_constraints(graph->lp, - coef->n_eq, coef->n_ineq); - graph->lp = isl_basic_set_add_constraints_dim_map(graph->lp, - coef, dim_map); - isl_dim_free(dim); - edge->end = graph->lp->n_ineq; - - return 0; -} - -/* Add constraints to graph->lp that bound the dependence distance for the given - * dependence from a node i to itself. - * If s = 1, we add the constraint - * - * c_i_x (y - x) <= m_0 + m_n n - * - * or - * - * -c_i_x (y - x) + m_0 + m_n n >= 0 - * - * for each (x,y) in R. - * If s = -1, we add the constraint - * - * -c_i_x (y - x) <= m_0 + m_n n - * - * or - * - * c_i_x (y - x) + m_0 + m_n n >= 0 - * - * for each (x,y) in R. - * We obtain general constraints on coefficients (c_0, c_n, c_x) - * of valid constraints for (y - x) and then plug in (m_0, m_n, -s * c_i_x), - * with each coefficient (except m_0) represented as a pair of non-negative - * coefficients. - * - * Actually, we do not construct constraints for the c_i_x themselves, - * but for the coefficients of c_i_x written as a linear combination - * of the columns in node->cmap. - */ -static int add_intra_proximity_constraints(struct isl_sched_graph *graph, - struct isl_sched_edge *edge, int s) -{ - unsigned total; - unsigned nparam; - isl_map *map = isl_map_copy(edge->map); - isl_ctx *ctx = isl_map_get_ctx(map); - isl_dim *dim; - isl_dim_map *dim_map; - isl_basic_set *coef; - struct isl_sched_node *node = edge->src; - - coef = intra_coefficients(graph, map); - - dim = isl_dim_domain(isl_dim_unwrap(isl_basic_set_get_dim(coef))); - - coef = isl_basic_set_transform_dims(coef, isl_dim_set, - isl_dim_size(dim, isl_dim_set), isl_mat_copy(node->cmap)); - - nparam = isl_dim_size(node->dim, isl_dim_param); - total = isl_basic_set_total_dim(graph->lp); - dim_map = isl_dim_map_alloc(ctx, total); - isl_dim_map_range(dim_map, 1, 0, 0, 0, 1, 1); - isl_dim_map_range(dim_map, 4, 2, 1, 1, nparam, -1); - isl_dim_map_range(dim_map, 5, 2, 1, 1, nparam, 1); - isl_dim_map_range(dim_map, node->start + 2 * node->nparam + 1, 2, - isl_dim_size(dim, isl_dim_set), 1, - node->nvar, s); - isl_dim_map_range(dim_map, node->start + 2 * node->nparam + 2, 2, - isl_dim_size(dim, isl_dim_set), 1, - node->nvar, -s); - graph->lp = isl_basic_set_extend_constraints(graph->lp, - coef->n_eq, coef->n_ineq); - graph->lp = isl_basic_set_add_constraints_dim_map(graph->lp, - coef, dim_map); - isl_dim_free(dim); - - return 0; -} - -/* Add constraints to graph->lp that bound the dependence distance for the given - * dependence from node i to node j. - * If s = 1, we add the constraint - * - * (c_j_0 + c_j_n n + c_j_x y) - (c_i_0 + c_i_n n + c_i_x x) - * <= m_0 + m_n n - * - * or - * - * -(c_j_0 + c_j_n n + c_j_x y) + (c_i_0 + c_i_n n + c_i_x x) + - * m_0 + m_n n >= 0 - * - * for each (x,y) in R. - * If s = -1, we add the constraint - * - * -((c_j_0 + c_j_n n + c_j_x y) - (c_i_0 + c_i_n n + c_i_x x)) - * <= m_0 + m_n n - * - * or - * - * (c_j_0 + c_j_n n + c_j_x y) - (c_i_0 + c_i_n n + c_i_x x) + - * m_0 + m_n n >= 0 - * - * for each (x,y) in R. - * We obtain general constraints on coefficients (c_0, c_n, c_x, c_y) - * of valid constraints for R and then plug in - * (m_0 - s*c_j_0 + s*c_i_0, m_n - s*c_j_n + s*c_i_n, - * -s*c_j_x+s*c_i_x) - * with each coefficient (except m_0, c_j_0 and c_i_0) - * represented as a pair of non-negative coefficients. - * - * Actually, we do not construct constraints for the c_*_x themselves, - * but for the coefficients of c_*_x written as a linear combination - * of the columns in node->cmap. - */ -static int add_inter_proximity_constraints(struct isl_sched_graph *graph, - struct isl_sched_edge *edge, int s) -{ - unsigned total; - unsigned nparam; - isl_map *map = isl_map_copy(edge->map); - isl_ctx *ctx = isl_map_get_ctx(map); - isl_dim *dim; - isl_dim_map *dim_map; - isl_basic_set *coef; - struct isl_sched_node *src = edge->src; - struct isl_sched_node *dst = edge->dst; - - coef = inter_coefficients(graph, map); - - dim = isl_dim_domain(isl_dim_unwrap(isl_basic_set_get_dim(coef))); - - coef = isl_basic_set_transform_dims(coef, isl_dim_set, - isl_dim_size(dim, isl_dim_set), isl_mat_copy(src->cmap)); - coef = isl_basic_set_transform_dims(coef, isl_dim_set, - isl_dim_size(dim, isl_dim_set) + src->nvar, - isl_mat_copy(dst->cmap)); - - nparam = isl_dim_size(src->dim, isl_dim_param); - total = isl_basic_set_total_dim(graph->lp); - dim_map = isl_dim_map_alloc(ctx, total); - - isl_dim_map_range(dim_map, 1, 0, 0, 0, 1, 1); - isl_dim_map_range(dim_map, 4, 2, 1, 1, nparam, -1); - isl_dim_map_range(dim_map, 5, 2, 1, 1, nparam, 1); - - isl_dim_map_range(dim_map, dst->start, 0, 0, 0, 1, -s); - isl_dim_map_range(dim_map, dst->start + 1, 2, 1, 1, dst->nparam, s); - isl_dim_map_range(dim_map, dst->start + 2, 2, 1, 1, dst->nparam, -s); - isl_dim_map_range(dim_map, dst->start + 2 * dst->nparam + 1, 2, - isl_dim_size(dim, isl_dim_set) + src->nvar, 1, - dst->nvar, s); - isl_dim_map_range(dim_map, dst->start + 2 * dst->nparam + 2, 2, - isl_dim_size(dim, isl_dim_set) + src->nvar, 1, - dst->nvar, -s); - - isl_dim_map_range(dim_map, src->start, 0, 0, 0, 1, s); - isl_dim_map_range(dim_map, src->start + 1, 2, 1, 1, src->nparam, -s); - isl_dim_map_range(dim_map, src->start + 2, 2, 1, 1, src->nparam, s); - isl_dim_map_range(dim_map, src->start + 2 * src->nparam + 1, 2, - isl_dim_size(dim, isl_dim_set), 1, - src->nvar, -s); - isl_dim_map_range(dim_map, src->start + 2 * src->nparam + 2, 2, - isl_dim_size(dim, isl_dim_set), 1, - src->nvar, s); - - graph->lp = isl_basic_set_extend_constraints(graph->lp, - coef->n_eq, coef->n_ineq); - graph->lp = isl_basic_set_add_constraints_dim_map(graph->lp, - coef, dim_map); - isl_dim_free(dim); - - return 0; -} - -static int add_all_validity_constraints(struct isl_sched_graph *graph) -{ - int i; - - for (i = 0; i < graph->n_edge; ++i) { - struct isl_sched_edge *edge= &graph->edge[i]; - if (!edge->validity) - continue; - if (edge->src != edge->dst) - continue; - if (add_intra_validity_constraints(graph, edge) < 0) - return -1; - } - - for (i = 0; i < graph->n_edge; ++i) { - struct isl_sched_edge *edge = &graph->edge[i]; - if (!edge->validity) - continue; - if (edge->src == edge->dst) - continue; - if (add_inter_validity_constraints(graph, edge) < 0) - return -1; - } - - return 0; -} - -/* Add constraints to graph->lp that bound the dependence distance - * for all dependence relations. - * If a given proximity dependence is identical to a validity - * dependence, then the dependence distance is already bounded - * from below (by zero), so we only need to bound the distance - * from above. - * Otherwise, we need to bound the distance both from above and from below. - */ -static int add_all_proximity_constraints(struct isl_sched_graph *graph) -{ - int i; - - for (i = 0; i < graph->n_edge; ++i) { - struct isl_sched_edge *edge= &graph->edge[i]; - if (!edge->proximity) - continue; - if (edge->src == edge->dst && - add_intra_proximity_constraints(graph, edge, 1) < 0) - return -1; - if (edge->src != edge->dst && - add_inter_proximity_constraints(graph, edge, 1) < 0) - return -1; - if (edge->validity) - continue; - if (edge->src == edge->dst && - add_intra_proximity_constraints(graph, edge, -1) < 0) - return -1; - if (edge->src != edge->dst && - add_inter_proximity_constraints(graph, edge, -1) < 0) - return -1; - } - - return 0; -} - -/* Compute a basis for the rows in the linear part of the schedule - * and extend this basis to a full basis. The remaining rows - * can then be used to force linear independence from the rows - * in the schedule. - * - * In particular, given the schedule rows S, we compute - * - * S = H Q - * - * with H the Hermite normal form of S. That is, all but the - * first rank columns of Q are zero and so each row in S is - * a linear combination of the first rank rows of Q. - * The matrix Q is then transposed because we will write the - * coefficients of the next schedule row as a column vector s - * and express this s as a linear combination s = Q c of the - * computed basis. - */ -static int node_update_cmap(struct isl_sched_node *node) -{ - isl_mat *H, *Q; - int n_row = isl_mat_rows(node->sched); - - H = isl_mat_sub_alloc(node->sched, 0, n_row, - 1 + node->nparam, node->nvar); - - H = isl_mat_left_hermite(H, 0, NULL, &Q); - isl_mat_free(node->cmap); - node->cmap = isl_mat_transpose(Q); - node->rank = isl_mat_initial_non_zero_cols(H); - isl_mat_free(H); - - if (!node->cmap || node->rank < 0) - return -1; - return 0; -} - -/* Count the number of equality and inequality constraints - * that will be added. If once is set, then we count - * each edge exactly once. Otherwise, we count as follows - * validity -> 1 (>= 0) - * validity+proximity -> 2 (>= 0 and upper bound) - * proximity -> 2 (lower and upper bound) - */ -static int count_constraints(struct isl_sched_graph *graph, - int *n_eq, int *n_ineq, int once) -{ - int i; - isl_basic_set *coef; - - *n_eq = *n_ineq = 0; - for (i = 0; i < graph->n_edge; ++i) { - struct isl_sched_edge *edge= &graph->edge[i]; - isl_map *map = isl_map_copy(edge->map); - int f = once ? 1 : edge->proximity ? 2 : 1; - - if (edge->src == edge->dst) - coef = intra_coefficients(graph, map); - else - coef = inter_coefficients(graph, map); - if (!coef) - return -1; - *n_eq += f * coef->n_eq; - *n_ineq += f * coef->n_ineq; - isl_basic_set_free(coef); - } - - return 0; -} - -/* Construct an ILP problem for finding schedule coefficients - * that result in non-negative, but small dependence distances - * over all dependences. - * In particular, the dependence distances over proximity edges - * are bounded by m_0 + m_n n and we compute schedule coefficients - * with small values (preferably zero) of m_n and m_0. - * - * All variables of the ILP are non-negative. The actual coefficients - * may be negative, so each coefficient is represented as the difference - * of two non-negative variables. The negative part always appears - * immediately before the positive part. - * Other than that, the variables have the following order - * - * - sum of positive and negative parts of m_n coefficients - * - m_0 - * - sum of positive and negative parts of all c_n coefficients - * (unconstrained when computing non-parametric schedules) - * - sum of positive and negative parts of all c_x coefficients - * - positive and negative parts of m_n coefficients - * - for each node - * - c_i_0 - * - positive and negative parts of c_i_n (if parametric) - * - positive and negative parts of c_i_x - * - * The c_i_x are not represented directly, but through the columns of - * node->cmap. That is, the computed values are for variable t_i_x - * such that c_i_x = Q t_i_x with Q equal to node->cmap. - * - * The constraints are those from the edges plus two or three equalities - * to express the sums. - * - * If force_zero is set, then we add equalities to ensure that - * the sum of the m_n coefficients and m_0 are both zero. - */ -static int setup_lp(isl_ctx *ctx, struct isl_sched_graph *graph, - int force_zero) -{ - int i, j; - int k; - unsigned nparam; - unsigned total; - isl_dim *dim; - int parametric; - int param_pos; - int n_eq, n_ineq; - - parametric = ctx->opt->schedule_parametric; - nparam = isl_dim_size(graph->node[0].dim, isl_dim_param); - param_pos = 4; - total = param_pos + 2 * nparam; - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[graph->sorted[i]]; - if (node_update_cmap(node) < 0) - return -1; - node->start = total; - total += 1 + 2 * (node->nparam + node->nvar); - } - - if (count_constraints(graph, &n_eq, &n_ineq, 0) < 0) - return -1; - - dim = isl_dim_set_alloc(ctx, 0, total); - isl_basic_set_free(graph->lp); - n_eq += 2 + parametric + force_zero; - graph->lp = isl_basic_set_alloc_dim(dim, 0, n_eq, n_ineq); - - k = isl_basic_set_alloc_equality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->eq[k], 1 + total); - if (!force_zero) - isl_int_set_si(graph->lp->eq[k][1], -1); - for (i = 0; i < 2 * nparam; ++i) - isl_int_set_si(graph->lp->eq[k][1 + param_pos + i], 1); - - if (force_zero) { - k = isl_basic_set_alloc_equality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->eq[k], 1 + total); - isl_int_set_si(graph->lp->eq[k][2], -1); - } - - if (parametric) { - k = isl_basic_set_alloc_equality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->eq[k], 1 + total); - isl_int_set_si(graph->lp->eq[k][3], -1); - for (i = 0; i < graph->n; ++i) { - int pos = 1 + graph->node[i].start + 1; - - for (j = 0; j < 2 * graph->node[i].nparam; ++j) - isl_int_set_si(graph->lp->eq[k][pos + j], 1); - } - } - - k = isl_basic_set_alloc_equality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->eq[k], 1 + total); - isl_int_set_si(graph->lp->eq[k][4], -1); - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int pos = 1 + node->start + 1 + 2 * node->nparam; - - for (j = 0; j < 2 * node->nvar; ++j) - isl_int_set_si(graph->lp->eq[k][pos + j], 1); - } - - if (add_all_validity_constraints(graph) < 0) - return -1; - if (add_all_proximity_constraints(graph) < 0) - return -1; - - return 0; -} - -/* Analyze the conflicting constraint found by - * isl_tab_basic_set_non_trivial_lexmin. If it corresponds to the validity - * constraint of one of the edges between distinct nodes, living, moreover - * in distinct SCCs, then record the source and sink SCC as this may - * be a good place to cut between SCCs. - */ -static int check_conflict(int con, void *user) -{ - int i; - struct isl_sched_graph *graph = user; - - if (graph->src_scc >= 0) - return 0; - - con -= graph->lp->n_eq; - - if (con >= graph->lp->n_ineq) - return 0; - - for (i = 0; i < graph->n_edge; ++i) { - if (!graph->edge[i].validity) - continue; - if (graph->edge[i].src == graph->edge[i].dst) - continue; - if (graph->edge[i].src->scc == graph->edge[i].dst->scc) - continue; - if (graph->edge[i].start > con) - continue; - if (graph->edge[i].end <= con) - continue; - graph->src_scc = graph->edge[i].src->scc; - graph->dst_scc = graph->edge[i].dst->scc; - } - - return 0; -} - -/* Check whether the next schedule row of the given node needs to be - * non-trivial. Lower-dimensional domains may have some trivial rows, - * but as soon as the number of remaining required non-trivial rows - * is as large as the number or remaining rows to be computed, - * all remaining rows need to be non-trivial. - */ -static int needs_row(struct isl_sched_graph *graph, struct isl_sched_node *node) -{ - return node->nvar - node->rank >= graph->maxvar - graph->n_row; -} - -/* Solve the ILP problem constructed in setup_lp. - * For each node such that all the remaining rows of its schedule - * need to be non-trivial, we construct a non-triviality region. - * This region imposes that the next row is independent of previous rows. - * In particular the coefficients c_i_x are represented by t_i_x - * variables with c_i_x = Q t_i_x and Q a unimodular matrix such that - * its first columns span the rows of the previously computed part - * of the schedule. The non-triviality region enforces that at least - * one of the remaining components of t_i_x is non-zero, i.e., - * that the new schedule row depends on at least one of the remaining - * columns of Q. - */ -static __isl_give isl_vec *solve_lp(struct isl_sched_graph *graph) -{ - int i; - isl_vec *sol; - isl_basic_set *lp; - - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int skip = node->rank; - graph->region[i].pos = node->start + 1 + 2*(node->nparam+skip); - if (needs_row(graph, node)) - graph->region[i].len = 2 * (node->nvar - skip); - else - graph->region[i].len = 0; - } - lp = isl_basic_set_copy(graph->lp); - sol = isl_tab_basic_set_non_trivial_lexmin(lp, 2, graph->n, - graph->region, &check_conflict, graph); - return sol; -} - -/* Update the schedules of all nodes based on the given solution - * of the LP problem. - * The new row is added to the current band. - * All possibly negative coefficients are encoded as a difference - * of two non-negative variables, so we need to perform the subtraction - * here. Moreover, if use_cmap is set, then the solution does - * not refer to the actual coefficients c_i_x, but instead to variables - * t_i_x such that c_i_x = Q t_i_x and Q is equal to node->cmap. - * In this case, we then also need to perform this multiplication - * to obtain the values of c_i_x. - * - * If check_zero is set, then the first two coordinates of sol are - * assumed to correspond to the dependence distance. If these two - * coordinates are zero, then the corresponding scheduling dimension - * is marked as being zero distance. - */ -static int update_schedule(struct isl_sched_graph *graph, - __isl_take isl_vec *sol, int use_cmap, int check_zero) -{ - int i, j; - int zero = 0; - isl_vec *csol = NULL; - - if (!sol) - goto error; - if (sol->size == 0) - isl_die(sol->ctx, isl_error_internal, - "no solution found", goto error); - - if (check_zero) - zero = isl_int_is_zero(sol->el[1]) && - isl_int_is_zero(sol->el[2]); - - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int pos = node->start; - int row = isl_mat_rows(node->sched); - - isl_vec_free(csol); - csol = isl_vec_alloc(sol->ctx, node->nvar); - if (!csol) - goto error; - - isl_map_free(node->sched_map); - node->sched_map = NULL; - node->sched = isl_mat_add_rows(node->sched, 1); - if (!node->sched) - goto error; - node->sched = isl_mat_set_element(node->sched, row, 0, - sol->el[1 + pos]); - for (j = 0; j < node->nparam + node->nvar; ++j) - isl_int_sub(sol->el[1 + pos + 1 + 2 * j + 1], - sol->el[1 + pos + 1 + 2 * j + 1], - sol->el[1 + pos + 1 + 2 * j]); - for (j = 0; j < node->nparam; ++j) - node->sched = isl_mat_set_element(node->sched, - row, 1 + j, sol->el[1+pos+1+2*j+1]); - for (j = 0; j < node->nvar; ++j) - isl_int_set(csol->el[j], - sol->el[1+pos+1+2*(node->nparam+j)+1]); - if (use_cmap) - csol = isl_mat_vec_product(isl_mat_copy(node->cmap), - csol); - if (!csol) - goto error; - for (j = 0; j < node->nvar; ++j) - node->sched = isl_mat_set_element(node->sched, - row, 1 + node->nparam + j, csol->el[j]); - node->band[graph->n_total_row] = graph->n_band; - node->zero[graph->n_total_row] = zero; - } - isl_vec_free(sol); - isl_vec_free(csol); - - graph->n_row++; - graph->n_total_row++; - - return 0; -error: - isl_vec_free(sol); - isl_vec_free(csol); - return -1; -} - -/* Convert node->sched into a map and return this map. - * We simply add equality constraints that express each output variable - * as the affine combination of parameters and input variables specified - * by the schedule matrix. - * - * The result is cached in node->sched_map, which needs to be released - * whenever node->sched is updated. - */ -static __isl_give isl_map *node_extract_schedule(struct isl_sched_node *node) -{ - int i, j; - isl_dim *dim; - isl_basic_map *bmap; - isl_constraint *c; - int nrow, ncol; - isl_int v; - - if (node->sched_map) - return isl_map_copy(node->sched_map); - - nrow = isl_mat_rows(node->sched); - ncol = isl_mat_cols(node->sched) - 1; - dim = isl_dim_from_domain(isl_dim_copy(node->dim)); - dim = isl_dim_add(dim, isl_dim_out, nrow); - bmap = isl_basic_map_universe(isl_dim_copy(dim)); - - isl_int_init(v); - - for (i = 0; i < nrow; ++i) { - c = isl_equality_alloc(isl_dim_copy(dim)); - isl_constraint_set_coefficient_si(c, isl_dim_out, i, -1); - isl_mat_get_element(node->sched, i, 0, &v); - isl_constraint_set_constant(c, v); - for (j = 0; j < node->nparam; ++j) { - isl_mat_get_element(node->sched, i, 1 + j, &v); - isl_constraint_set_coefficient(c, isl_dim_param, j, v); - } - for (j = 0; j < node->nvar; ++j) { - isl_mat_get_element(node->sched, - i, 1 + node->nparam + j, &v); - isl_constraint_set_coefficient(c, isl_dim_in, j, v); - } - bmap = isl_basic_map_add_constraint(bmap, c); - } - - isl_int_clear(v); - - isl_dim_free(dim); - - node->sched_map = isl_map_from_basic_map(bmap); - return isl_map_copy(node->sched_map); -} - -/* Update the given dependence relation based on the current schedule. - * That is, intersect the dependence relation with a map expressing - * that source and sink are executed within the same iteration of - * the current schedule. - * This is not the most efficient way, but this shouldn't be a critical - * operation. - */ -static __isl_give isl_map *specialize(__isl_take isl_map *map, - struct isl_sched_node *src, struct isl_sched_node *dst) -{ - isl_map *src_sched, *dst_sched, *id; - - src_sched = node_extract_schedule(src); - dst_sched = node_extract_schedule(dst); - id = isl_map_apply_range(src_sched, isl_map_reverse(dst_sched)); - return isl_map_intersect(map, id); -} - -/* Update the dependence relations of all edges based on the current schedule. - * If a dependence is carried completely by the current schedule, then - * it is removed and edge_table is updated accordingly. - */ -static int update_edges(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i; - int reset_table = 0; - - for (i = graph->n_edge - 1; i >= 0; --i) { - struct isl_sched_edge *edge = &graph->edge[i]; - edge->map = specialize(edge->map, edge->src, edge->dst); - if (!edge->map) - return -1; - - if (isl_map_plain_is_empty(edge->map)) { - reset_table = 1; - isl_map_free(edge->map); - if (i != graph->n_edge - 1) - graph->edge[i] = graph->edge[graph->n_edge - 1]; - graph->n_edge--; - } - } - - if (reset_table) { - isl_hash_table_free(ctx, graph->edge_table); - graph->edge_table = NULL; - return graph_init_edge_table(ctx, graph); - } - - return 0; -} - -static void next_band(struct isl_sched_graph *graph) -{ - graph->band_start = graph->n_total_row; - graph->n_band++; -} - -/* Topologically sort statements mapped to same schedule iteration - * and add a row to the schedule corresponding to this order. - */ -static int sort_statements(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i, j; - - if (graph->n <= 1) - return 0; - - if (update_edges(ctx, graph) < 0) - return -1; - - if (graph->n_edge == 0) - return 0; - - if (detect_sccs(graph) < 0) - return -1; - - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int row = isl_mat_rows(node->sched); - int cols = isl_mat_cols(node->sched); - - isl_map_free(node->sched_map); - node->sched_map = NULL; - node->sched = isl_mat_add_rows(node->sched, 1); - if (!node->sched) - return -1; - node->sched = isl_mat_set_element_si(node->sched, row, 0, - node->scc); - for (j = 1; j < cols; ++j) - node->sched = isl_mat_set_element_si(node->sched, - row, j, 0); - node->band[graph->n_total_row] = graph->n_band; - } - - graph->n_total_row++; - next_band(graph); - - return 0; -} - -/* Construct an isl_schedule based on the computed schedule stored - * in graph and with parameters specified by dim. - */ -static __isl_give isl_schedule *extract_schedule(struct isl_sched_graph *graph, - __isl_take isl_dim *dim) -{ - int i; - isl_ctx *ctx; - isl_schedule *sched = NULL; - - if (!dim) - return NULL; - - ctx = isl_dim_get_ctx(dim); - sched = isl_calloc(ctx, struct isl_schedule, - sizeof(struct isl_schedule) + - (graph->n - 1) * sizeof(struct isl_schedule_node)); - if (!sched) - goto error; - - sched->ref = 1; - sched->n = graph->n; - sched->n_band = graph->n_band; - sched->n_total_row = graph->n_total_row; - - for (i = 0; i < sched->n; ++i) { - int r, b; - int *band_end, *band_id, *zero; - - band_end = isl_alloc_array(ctx, int, graph->n_band); - band_id = isl_alloc_array(ctx, int, graph->n_band); - zero = isl_alloc_array(ctx, int, graph->n_total_row); - sched->node[i].sched = node_extract_schedule(&graph->node[i]); - sched->node[i].band_end = band_end; - sched->node[i].band_id = band_id; - sched->node[i].zero = zero; - if (!band_end || !band_id || !zero) - goto error; - - for (r = 0; r < graph->n_total_row; ++r) - zero[r] = graph->node[i].zero[r]; - for (r = b = 0; r < graph->n_total_row; ++r) { - if (graph->node[i].band[r] == b) - continue; - band_end[b++] = r; - if (graph->node[i].band[r] == -1) - break; - } - if (r == graph->n_total_row) - band_end[b++] = r; - sched->node[i].n_band = b; - for (--b; b >= 0; --b) - band_id[b] = graph->node[i].band_id[b]; - } - - sched->dim = dim; - - return sched; -error: - isl_dim_free(dim); - isl_schedule_free(sched); - return NULL; -} - -/* Copy nodes that satisfy node_pred from the src dependence graph - * to the dst dependence graph. - */ -static int copy_nodes(struct isl_sched_graph *dst, struct isl_sched_graph *src, - int (*node_pred)(struct isl_sched_node *node, int data), int data) -{ - int i; - - dst->n = 0; - for (i = 0; i < src->n; ++i) { - if (!node_pred(&src->node[i], data)) - continue; - dst->node[dst->n].dim = isl_dim_copy(src->node[i].dim); - dst->node[dst->n].nvar = src->node[i].nvar; - dst->node[dst->n].nparam = src->node[i].nparam; - dst->node[dst->n].sched = isl_mat_copy(src->node[i].sched); - dst->node[dst->n].sched_map = - isl_map_copy(src->node[i].sched_map); - dst->node[dst->n].band = src->node[i].band; - dst->node[dst->n].band_id = src->node[i].band_id; - dst->node[dst->n].zero = src->node[i].zero; - dst->n++; - } - - return 0; -} - -/* Copy non-empty edges that satisfy edge_pred from the src dependence graph - * to the dst dependence graph. - */ -static int copy_edges(isl_ctx *ctx, struct isl_sched_graph *dst, - struct isl_sched_graph *src, - int (*edge_pred)(struct isl_sched_edge *edge, int data), int data) -{ - int i; - - dst->n_edge = 0; - for (i = 0; i < src->n_edge; ++i) { - struct isl_sched_edge *edge = &src->edge[i]; - isl_map *map; - - if (!edge_pred(edge, data)) - continue; - - if (isl_map_plain_is_empty(edge->map)) - continue; - - map = isl_map_copy(edge->map); - - dst->edge[dst->n_edge].src = - graph_find_node(ctx, dst, edge->src->dim); - dst->edge[dst->n_edge].dst = - graph_find_node(ctx, dst, edge->dst->dim); - dst->edge[dst->n_edge].map = map; - dst->edge[dst->n_edge].validity = edge->validity; - dst->edge[dst->n_edge].proximity = edge->proximity; - dst->n_edge++; - } - - return 0; -} - -/* Given a "src" dependence graph that contains the nodes from "dst" - * that satisfy node_pred, copy the schedule computed in "src" - * for those nodes back to "dst". - */ -static int copy_schedule(struct isl_sched_graph *dst, - struct isl_sched_graph *src, - int (*node_pred)(struct isl_sched_node *node, int data), int data) -{ - int i; - - src->n = 0; - for (i = 0; i < dst->n; ++i) { - if (!node_pred(&dst->node[i], data)) - continue; - isl_mat_free(dst->node[i].sched); - isl_map_free(dst->node[i].sched_map); - dst->node[i].sched = isl_mat_copy(src->node[src->n].sched); - dst->node[i].sched_map = - isl_map_copy(src->node[src->n].sched_map); - src->n++; - } - - dst->n_total_row = src->n_total_row; - dst->n_band = src->n_band; - - return 0; -} - -/* Compute the maximal number of variables over all nodes. - * This is the maximal number of linearly independent schedule - * rows that we need to compute. - * Just in case we end up in a part of the dependence graph - * with only lower-dimensional domains, we make sure we will - * compute the required amount of extra linearly independent rows. - */ -static int compute_maxvar(struct isl_sched_graph *graph) -{ - int i; - - graph->maxvar = 0; - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int nvar; - - if (node_update_cmap(node) < 0) - return -1; - nvar = node->nvar + graph->n_row - node->rank; - if (nvar > graph->maxvar) - graph->maxvar = nvar; - } - - return 0; -} - -static int compute_schedule(isl_ctx *ctx, struct isl_sched_graph *graph); -static int compute_schedule_wcc(isl_ctx *ctx, struct isl_sched_graph *graph); - -/* Compute a schedule for a subgraph of "graph". In particular, for - * the graph composed of nodes that satisfy node_pred and edges that - * that satisfy edge_pred. The caller should precompute the number - * of nodes and edges that satisfy these predicates and pass them along - * as "n" and "n_edge". - * If the subgraph is known to consist of a single component, then wcc should - * be set and then we call compute_schedule_wcc on the constructed subgraph. - * Otherwise, we call compute_schedule, which will check whether the subgraph - * is connected. - */ -static int compute_sub_schedule(isl_ctx *ctx, - struct isl_sched_graph *graph, int n, int n_edge, - int (*node_pred)(struct isl_sched_node *node, int data), - int (*edge_pred)(struct isl_sched_edge *edge, int data), - int data, int wcc) -{ - struct isl_sched_graph split = { 0 }; - - if (graph_alloc(ctx, &split, n, n_edge) < 0) - goto error; - if (copy_nodes(&split, graph, node_pred, data) < 0) - goto error; - if (graph_init_table(ctx, &split) < 0) - goto error; - if (copy_edges(ctx, &split, graph, edge_pred, data) < 0) - goto error; - if (graph_init_edge_table(ctx, &split) < 0) - goto error; - split.n_row = graph->n_row; - split.n_total_row = graph->n_total_row; - split.n_band = graph->n_band; - split.band_start = graph->band_start; - - if (wcc && compute_schedule_wcc(ctx, &split) < 0) - goto error; - if (!wcc && compute_schedule(ctx, &split) < 0) - goto error; - - copy_schedule(graph, &split, node_pred, data); - - graph_free(ctx, &split); - return 0; -error: - graph_free(ctx, &split); - return -1; -} - -static int node_scc_exactly(struct isl_sched_node *node, int scc) -{ - return node->scc == scc; -} - -static int node_scc_at_most(struct isl_sched_node *node, int scc) -{ - return node->scc <= scc; -} - -static int node_scc_at_least(struct isl_sched_node *node, int scc) -{ - return node->scc >= scc; -} - -static int edge_src_scc_exactly(struct isl_sched_edge *edge, int scc) -{ - return edge->src->scc == scc; -} - -static int edge_dst_scc_at_most(struct isl_sched_edge *edge, int scc) -{ - return edge->dst->scc <= scc; -} - -static int edge_src_scc_at_least(struct isl_sched_edge *edge, int scc) -{ - return edge->src->scc >= scc; -} - -/* Pad the schedules of all nodes with zero rows such that in the end - * they all have graph->n_total_row rows. - * The extra rows don't belong to any band, so they get assigned band number -1. - */ -static int pad_schedule(struct isl_sched_graph *graph) -{ - int i, j; - - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int row = isl_mat_rows(node->sched); - if (graph->n_total_row > row) { - isl_map_free(node->sched_map); - node->sched_map = NULL; - } - node->sched = isl_mat_add_zero_rows(node->sched, - graph->n_total_row - row); - if (!node->sched) - return -1; - for (j = row; j < graph->n_total_row; ++j) - node->band[j] = -1; - } - - return 0; -} - -/* Split the current graph into two parts and compute a schedule for each - * part individually. In particular, one part consists of all SCCs up - * to and including graph->src_scc, while the other part contains the other - * SCCS. - * - * The split is enforced in the schedule by constant rows with two different - * values (0 and 1). These constant rows replace the previously computed rows - * in the current band. - * It would be possible to reuse them as the first rows in the next - * band, but recomputing them may result in better rows as we are looking - * at a smaller part of the dependence graph. - * - * The band_id of the second group is set to n, where n is the number - * of nodes in the first group. This ensures that the band_ids over - * the two groups remain disjoint, even if either or both of the two - * groups contain independent components. - */ -static int compute_split_schedule(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i, j, n, e1, e2; - int n_total_row, orig_total_row; - int n_band, orig_band; - int drop; - - drop = graph->n_total_row - graph->band_start; - graph->n_total_row -= drop; - graph->n_row -= drop; - - n = 0; - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int row = isl_mat_rows(node->sched) - drop; - int cols = isl_mat_cols(node->sched); - int before = node->scc <= graph->src_scc; - - if (before) - n++; - - isl_map_free(node->sched_map); - node->sched_map = NULL; - node->sched = isl_mat_drop_rows(node->sched, - graph->band_start, drop); - node->sched = isl_mat_add_rows(node->sched, 1); - if (!node->sched) - return -1; - node->sched = isl_mat_set_element_si(node->sched, row, 0, - !before); - for (j = 1; j < cols; ++j) - node->sched = isl_mat_set_element_si(node->sched, - row, j, 0); - node->band[graph->n_total_row] = graph->n_band; - } - - e1 = e2 = 0; - for (i = 0; i < graph->n_edge; ++i) { - if (graph->edge[i].dst->scc <= graph->src_scc) - e1++; - if (graph->edge[i].src->scc > graph->src_scc) - e2++; - } - - graph->n_total_row++; - next_band(graph); - - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - if (node->scc > graph->src_scc) - node->band_id[graph->n_band] = n; - } - - orig_total_row = graph->n_total_row; - orig_band = graph->n_band; - if (compute_sub_schedule(ctx, graph, n, e1, - &node_scc_at_most, &edge_dst_scc_at_most, - graph->src_scc, 0) < 0) - return -1; - n_total_row = graph->n_total_row; - graph->n_total_row = orig_total_row; - n_band = graph->n_band; - graph->n_band = orig_band; - if (compute_sub_schedule(ctx, graph, graph->n - n, e2, - &node_scc_at_least, &edge_src_scc_at_least, - graph->src_scc + 1, 0) < 0) - return -1; - if (n_total_row > graph->n_total_row) - graph->n_total_row = n_total_row; - if (n_band > graph->n_band) - graph->n_band = n_band; - - return pad_schedule(graph); -} - -/* Compute the next band of the schedule after updating the dependence - * relations based on the the current schedule. - */ -static int compute_next_band(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - if (update_edges(ctx, graph) < 0) - return -1; - next_band(graph); - - return compute_schedule(ctx, graph); -} - -/* Add constraints to graph->lp that force the dependence of edge i - * to be respected and attempt to carry it, where edge i is one from - * a node j to itself. - * That is, add constraints that enforce - * - * (c_j_0 + c_j_n n + c_j_x y) - (c_j_0 + c_j_n n + c_j_x x) - * = c_j_x (y - x) >= e_i - * - * for each (x,y) in R. - * We obtain general constraints on coefficients (c_0, c_n, c_x) - * of valid constraints for (y - x) and then plug in (-e_i, 0, c_j_x), - * with each coefficient in c_j_x represented as a pair of non-negative - * coefficients. - */ -static int add_intra_constraints(struct isl_sched_graph *graph, int i) -{ - unsigned total; - struct isl_sched_edge *edge= &graph->edge[i]; - isl_map *map = isl_map_copy(edge->map); - isl_ctx *ctx = isl_map_get_ctx(map); - isl_dim *dim; - isl_dim_map *dim_map; - isl_basic_set *coef; - struct isl_sched_node *node = edge->src; - - coef = intra_coefficients(graph, map); - - dim = isl_dim_domain(isl_dim_unwrap(isl_basic_set_get_dim(coef))); - - total = isl_basic_set_total_dim(graph->lp); - dim_map = isl_dim_map_alloc(ctx, total); - isl_dim_map_range(dim_map, 3 + i, 0, 0, 0, 1, -1); - isl_dim_map_range(dim_map, node->start + 2 * node->nparam + 1, 2, - isl_dim_size(dim, isl_dim_set), 1, - node->nvar, -1); - isl_dim_map_range(dim_map, node->start + 2 * node->nparam + 2, 2, - isl_dim_size(dim, isl_dim_set), 1, - node->nvar, 1); - graph->lp = isl_basic_set_extend_constraints(graph->lp, - coef->n_eq, coef->n_ineq); - graph->lp = isl_basic_set_add_constraints_dim_map(graph->lp, - coef, dim_map); - isl_dim_free(dim); - - return 0; -} - -/* Add constraints to graph->lp that force the dependence of edge i - * to be respected and attempt to carry it, where edge i is one from - * node j to node k. - * That is, add constraints that enforce - * - * (c_k_0 + c_k_n n + c_k_x y) - (c_j_0 + c_j_n n + c_j_x x) >= e_i - * - * for each (x,y) in R. - * We obtain general constraints on coefficients (c_0, c_n, c_x) - * of valid constraints for R and then plug in - * (-e_i + c_k_0 - c_j_0, c_k_n - c_j_n, c_k_x - c_j_x) - * with each coefficient (except e_i, c_k_0 and c_j_0) - * represented as a pair of non-negative coefficients. - */ -static int add_inter_constraints(struct isl_sched_graph *graph, int i) -{ - unsigned total; - struct isl_sched_edge *edge= &graph->edge[i]; - isl_map *map = isl_map_copy(edge->map); - isl_ctx *ctx = isl_map_get_ctx(map); - isl_dim *dim; - isl_dim_map *dim_map; - isl_basic_set *coef; - struct isl_sched_node *src = edge->src; - struct isl_sched_node *dst = edge->dst; - - coef = inter_coefficients(graph, map); - - dim = isl_dim_domain(isl_dim_unwrap(isl_basic_set_get_dim(coef))); - - total = isl_basic_set_total_dim(graph->lp); - dim_map = isl_dim_map_alloc(ctx, total); - - isl_dim_map_range(dim_map, 3 + i, 0, 0, 0, 1, -1); - - isl_dim_map_range(dim_map, dst->start, 0, 0, 0, 1, 1); - isl_dim_map_range(dim_map, dst->start + 1, 2, 1, 1, dst->nparam, -1); - isl_dim_map_range(dim_map, dst->start + 2, 2, 1, 1, dst->nparam, 1); - isl_dim_map_range(dim_map, dst->start + 2 * dst->nparam + 1, 2, - isl_dim_size(dim, isl_dim_set) + src->nvar, 1, - dst->nvar, -1); - isl_dim_map_range(dim_map, dst->start + 2 * dst->nparam + 2, 2, - isl_dim_size(dim, isl_dim_set) + src->nvar, 1, - dst->nvar, 1); - - isl_dim_map_range(dim_map, src->start, 0, 0, 0, 1, -1); - isl_dim_map_range(dim_map, src->start + 1, 2, 1, 1, src->nparam, 1); - isl_dim_map_range(dim_map, src->start + 2, 2, 1, 1, src->nparam, -1); - isl_dim_map_range(dim_map, src->start + 2 * src->nparam + 1, 2, - isl_dim_size(dim, isl_dim_set), 1, - src->nvar, 1); - isl_dim_map_range(dim_map, src->start + 2 * src->nparam + 2, 2, - isl_dim_size(dim, isl_dim_set), 1, - src->nvar, -1); - - graph->lp = isl_basic_set_extend_constraints(graph->lp, - coef->n_eq, coef->n_ineq); - graph->lp = isl_basic_set_add_constraints_dim_map(graph->lp, - coef, dim_map); - isl_dim_free(dim); - - return 0; -} - -/* Add constraints to graph->lp that force all dependence - * to be respected and attempt to carry it. - */ -static int add_all_constraints(struct isl_sched_graph *graph) -{ - int i; - - for (i = 0; i < graph->n_edge; ++i) { - struct isl_sched_edge *edge= &graph->edge[i]; - if (edge->src == edge->dst && - add_intra_constraints(graph, i) < 0) - return -1; - if (edge->src != edge->dst && - add_inter_constraints(graph, i) < 0) - return -1; - } - - return 0; -} - -/* Construct an LP problem for finding schedule coefficients - * such that the schedule carries as many dependences as possible. - * In particular, for each dependence i, we bound the dependence distance - * from below by e_i, with 0 <= e_i <= 1 and then maximize the sum - * of all e_i's. Dependence with e_i = 0 in the solution are simply - * respected, while those with e_i > 0 (in practice e_i = 1) are carried. - * - * All variables of the LP are non-negative. The actual coefficients - * may be negative, so each coefficient is represented as the difference - * of two non-negative variables. The negative part always appears - * immediately before the positive part. - * Other than that, the variables have the following order - * - * - sum of (1 - e_i) over all edges - * - sum of positive and negative parts of all c_n coefficients - * (unconstrained when computing non-parametric schedules) - * - sum of positive and negative parts of all c_x coefficients - * - for each edge - * - e_i - * - for each node - * - c_i_0 - * - positive and negative parts of c_i_n (if parametric) - * - positive and negative parts of c_i_x - * - * The constraints are those from the edges plus three equalities - * to express the sums and n_edge inequalities to express e_i <= 1. - */ -static int setup_carry_lp(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i, j; - int k; - isl_dim *dim; - unsigned total; - int n_eq, n_ineq; - - total = 3 + graph->n_edge; - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[graph->sorted[i]]; - node->start = total; - total += 1 + 2 * (node->nparam + node->nvar); - } - - if (count_constraints(graph, &n_eq, &n_ineq, 1) < 0) - return -1; - - dim = isl_dim_set_alloc(ctx, 0, total); - isl_basic_set_free(graph->lp); - n_eq += 3; - n_ineq += graph->n_edge; - graph->lp = isl_basic_set_alloc_dim(dim, 0, n_eq, n_ineq); - graph->lp = isl_basic_set_set_rational(graph->lp); - - k = isl_basic_set_alloc_equality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->eq[k], 1 + total); - isl_int_set_si(graph->lp->eq[k][0], -graph->n_edge); - isl_int_set_si(graph->lp->eq[k][1], 1); - for (i = 0; i < graph->n_edge; ++i) - isl_int_set_si(graph->lp->eq[k][4 + i], 1); - - k = isl_basic_set_alloc_equality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->eq[k], 1 + total); - isl_int_set_si(graph->lp->eq[k][2], -1); - for (i = 0; i < graph->n; ++i) { - int pos = 1 + graph->node[i].start + 1; - - for (j = 0; j < 2 * graph->node[i].nparam; ++j) - isl_int_set_si(graph->lp->eq[k][pos + j], 1); - } - - k = isl_basic_set_alloc_equality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->eq[k], 1 + total); - isl_int_set_si(graph->lp->eq[k][3], -1); - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int pos = 1 + node->start + 1 + 2 * node->nparam; - - for (j = 0; j < 2 * node->nvar; ++j) - isl_int_set_si(graph->lp->eq[k][pos + j], 1); - } - - for (i = 0; i < graph->n_edge; ++i) { - k = isl_basic_set_alloc_inequality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->ineq[k], 1 + total); - isl_int_set_si(graph->lp->ineq[k][4 + i], -1); - isl_int_set_si(graph->lp->ineq[k][0], 1); - } - - if (add_all_constraints(graph) < 0) - return -1; - - return 0; -} - -/* If the schedule_split_parallel option is set and if the linear - * parts of the scheduling rows for all nodes in the graphs are the same, - * then split off the constant term from the linear part. - * The constant term is then placed in a separate band and - * the linear part is simplified. - */ -static int split_parallel(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i; - int equal = 1; - int row, cols; - struct isl_sched_node *node0; - - if (!ctx->opt->schedule_split_parallel) - return 0; - if (graph->n <= 1) - return 0; - - node0 = &graph->node[0]; - row = isl_mat_rows(node0->sched) - 1; - cols = isl_mat_cols(node0->sched); - for (i = 1; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - - if (!isl_seq_eq(node0->sched->row[row] + 1, - node->sched->row[row] + 1, cols - 1)) - return 0; - if (equal && - isl_int_ne(node0->sched->row[row][0], - node->sched->row[row][0])) - equal = 0; - } - if (equal) - return 0; - - next_band(graph); - - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - - isl_map_free(node->sched_map); - node->sched_map = NULL; - node->sched = isl_mat_add_zero_rows(node->sched, 1); - if (!node->sched) - return -1; - isl_int_set(node->sched->row[row + 1][0], - node->sched->row[row][0]); - isl_int_set_si(node->sched->row[row][0], 0); - node->sched = isl_mat_normalize_row(node->sched, row); - if (!node->sched) - return -1; - node->band[graph->n_total_row] = graph->n_band; - } - - graph->n_total_row++; - - return 0; -} - -/* Construct a schedule row for each node such that as many dependences - * as possible are carried and then continue with the next band. - */ -static int carry_dependences(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - isl_vec *sol; - isl_basic_set *lp; - - if (setup_carry_lp(ctx, graph) < 0) - return -1; - - lp = isl_basic_set_copy(graph->lp); - sol = isl_tab_basic_set_non_neg_lexmin(lp); - if (!sol) - return -1; - - if (sol->size == 0) { - isl_vec_free(sol); - isl_die(ctx, isl_error_internal, - "error in schedule construction", return -1); - } - - if (isl_int_cmp_si(sol->el[1], graph->n_edge) >= 0) { - isl_vec_free(sol); - isl_die(ctx, isl_error_unknown, - "unable to carry dependences", return -1); - } - - if (update_schedule(graph, sol, 0, 0) < 0) - return -1; - - if (split_parallel(ctx, graph) < 0) - return -1; - - return compute_next_band(ctx, graph); -} - -/* Compute a schedule for a connected dependence graph. - * We try to find a sequence of as many schedule rows as possible that result - * in non-negative dependence distances (independent of the previous rows - * in the sequence, i.e., such that the sequence is tilable). - * If we can't find any more rows we either - * - split between SCCs and start over (assuming we found an interesting - * pair of SCCs between which to split) - * - continue with the next band (assuming the current band has at least - * one row) - * - try to carry as many dependences as possible and continue with the next - * band - * - * If we manage to complete the schedule, we finish off by topologically - * sorting the statements based on the remaining dependences. - * - * If ctx->opt->schedule_outer_zero_distance is set, then we force the - * outermost dimension in the current band to be zero distance. If this - * turns out to be impossible, we fall back on the general scheme above - * and try to carry as many dependences as possible. - */ -static int compute_schedule_wcc(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int force_zero = 0; - - if (detect_sccs(graph) < 0) - return -1; - sort_sccs(graph); - - if (compute_maxvar(graph) < 0) - return -1; - - if (ctx->opt->schedule_outer_zero_distance) - force_zero = 1; - - while (graph->n_row < graph->maxvar) { - isl_vec *sol; - - graph->src_scc = -1; - graph->dst_scc = -1; - - if (setup_lp(ctx, graph, force_zero) < 0) - return -1; - sol = solve_lp(graph); - if (!sol) - return -1; - if (sol->size == 0) { - isl_vec_free(sol); - if (!ctx->opt->schedule_maximize_band_depth && - graph->n_total_row > graph->band_start) - return compute_next_band(ctx, graph); - if (graph->src_scc >= 0) - return compute_split_schedule(ctx, graph); - if (graph->n_total_row > graph->band_start) - return compute_next_band(ctx, graph); - return carry_dependences(ctx, graph); - } - if (update_schedule(graph, sol, 1, 1) < 0) - return -1; - force_zero = 0; - } - - if (graph->n_total_row > graph->band_start) - next_band(graph); - return sort_statements(ctx, graph); -} - -/* Compute a schedule for each component (identified by node->scc) - * of the dependence graph separately and then combine the results. - * - * The band_id is adjusted such that each component has a separate id. - * Note that the band_id may have already been set to a value different - * from zero by compute_split_schedule. - */ -static int compute_component_schedule(isl_ctx *ctx, - struct isl_sched_graph *graph) -{ - int wcc, i; - int n, n_edge; - int n_total_row, orig_total_row; - int n_band, orig_band; - - n_total_row = 0; - orig_total_row = graph->n_total_row; - n_band = 0; - orig_band = graph->n_band; - for (i = 0; i < graph->n; ++i) - graph->node[i].band_id[graph->n_band] += graph->node[i].scc; - for (wcc = 0; wcc < graph->scc; ++wcc) { - n = 0; - for (i = 0; i < graph->n; ++i) - if (graph->node[i].scc == wcc) - n++; - n_edge = 0; - for (i = 0; i < graph->n_edge; ++i) - if (graph->edge[i].src->scc == wcc) - n_edge++; - - if (compute_sub_schedule(ctx, graph, n, n_edge, - &node_scc_exactly, - &edge_src_scc_exactly, wcc, 1) < 0) - return -1; - if (graph->n_total_row > n_total_row) - n_total_row = graph->n_total_row; - graph->n_total_row = orig_total_row; - if (graph->n_band > n_band) - n_band = graph->n_band; - graph->n_band = orig_band; - } - - graph->n_total_row = n_total_row; - graph->n_band = n_band; - - return pad_schedule(graph); -} - -/* Compute a schedule for the given dependence graph. - * We first check if the graph is connected (through validity dependences) - * and if so compute a schedule for each component separately. - */ -static int compute_schedule(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - if (detect_wccs(graph) < 0) - return -1; - - if (graph->scc > 1) - return compute_component_schedule(ctx, graph); - - return compute_schedule_wcc(ctx, graph); -} - -/* Compute a schedule for the given union of domains that respects - * all the validity dependences and tries to minimize the dependence - * distances over the proximity dependences. - */ -__isl_give isl_schedule *isl_union_set_compute_schedule( - __isl_take isl_union_set *domain, - __isl_take isl_union_map *validity, - __isl_take isl_union_map *proximity) -{ - isl_ctx *ctx = isl_union_set_get_ctx(domain); - isl_dim *dim; - struct isl_sched_graph graph = { 0 }; - isl_schedule *sched; - - domain = isl_union_set_align_params(domain, - isl_union_map_get_dim(validity)); - domain = isl_union_set_align_params(domain, - isl_union_map_get_dim(proximity)); - dim = isl_union_set_get_dim(domain); - validity = isl_union_map_align_params(validity, isl_dim_copy(dim)); - proximity = isl_union_map_align_params(proximity, dim); - - if (!domain) - goto error; - - graph.n = isl_union_set_n_set(domain); - if (graph.n == 0) - goto empty; - if (graph_alloc(ctx, &graph, graph.n, - isl_union_map_n_map(validity) + isl_union_map_n_map(proximity)) < 0) - goto error; - graph.root = 1; - graph.n = 0; - if (isl_union_set_foreach_set(domain, &extract_node, &graph) < 0) - goto error; - if (graph_init_table(ctx, &graph) < 0) - goto error; - graph.n_edge = 0; - if (isl_union_map_foreach_map(validity, &extract_edge, &graph) < 0) - goto error; - if (graph_init_edge_table(ctx, &graph) < 0) - goto error; - if (isl_union_map_foreach_map(proximity, &extract_edge, &graph) < 0) - goto error; - - if (compute_schedule(ctx, &graph) < 0) - goto error; - -empty: - sched = extract_schedule(&graph, isl_union_set_get_dim(domain)); - - graph_free(ctx, &graph); - isl_union_set_free(domain); - isl_union_map_free(validity); - isl_union_map_free(proximity); - - return sched; -error: - graph_free(ctx, &graph); - isl_union_set_free(domain); - isl_union_map_free(validity); - isl_union_map_free(proximity); - return NULL; -} - -void *isl_schedule_free(__isl_take isl_schedule *sched) -{ - int i; - if (!sched) - return NULL; - - if (--sched->ref > 0) - return NULL; - - for (i = 0; i < sched->n; ++i) { - isl_map_free(sched->node[i].sched); - free(sched->node[i].band_end); - free(sched->node[i].band_id); - free(sched->node[i].zero); - } - isl_dim_free(sched->dim); - isl_band_list_free(sched->band_forest); - free(sched); - return NULL; -} - -isl_ctx *isl_schedule_get_ctx(__isl_keep isl_schedule *schedule) -{ - return schedule ? isl_dim_get_ctx(schedule->dim) : NULL; -} - -__isl_give isl_union_map *isl_schedule_get_map(__isl_keep isl_schedule *sched) -{ - int i; - isl_union_map *umap; - - if (!sched) - return NULL; - - umap = isl_union_map_empty(isl_dim_copy(sched->dim)); - for (i = 0; i < sched->n; ++i) - umap = isl_union_map_add_map(umap, - isl_map_copy(sched->node[i].sched)); - - return umap; -} - -static __isl_give isl_band_list *construct_band_list( - __isl_keep isl_schedule *schedule, __isl_keep isl_band *parent, - int band_nr, int *parent_active, int n_active); - -/* Construct an isl_band structure for the band in the given schedule - * with sequence number band_nr for the n_active nodes marked by active. - * If the nodes don't have a band with the given sequence number, - * then a band without members is created. - * - * Because of the way the schedule is constructed, we know that - * the position of the band inside the schedule of a node is the same - * for all active nodes. - */ -static __isl_give isl_band *construct_band(__isl_keep isl_schedule *schedule, - __isl_keep isl_band *parent, - int band_nr, int *active, int n_active) -{ - int i, j; - isl_ctx *ctx = isl_schedule_get_ctx(schedule); - isl_band *band; - unsigned start, end; - - band = isl_calloc_type(ctx, isl_band); - if (!band) - return NULL; - - band->ref = 1; - band->schedule = schedule; - band->parent = parent; - - for (i = 0; i < schedule->n; ++i) - if (active[i] && schedule->node[i].n_band > band_nr + 1) - break; - - if (i < schedule->n) { - band->children = construct_band_list(schedule, band, - band_nr + 1, active, n_active); - if (!band->children) - goto error; - } - - for (i = 0; i < schedule->n; ++i) - if (active[i]) - break; - - if (i >= schedule->n) - isl_die(ctx, isl_error_internal, - "band without active statements", goto error); - - start = band_nr ? schedule->node[i].band_end[band_nr - 1] : 0; - end = band_nr < schedule->node[i].n_band ? - schedule->node[i].band_end[band_nr] : start; - band->n = end - start; - - band->zero = isl_alloc_array(ctx, int, band->n); - if (!band->zero) - goto error; - - for (j = 0; j < band->n; ++j) - band->zero[j] = schedule->node[i].zero[start + j]; - - band->map = isl_union_map_empty(isl_dim_copy(schedule->dim)); - for (i = 0; i < schedule->n; ++i) { - isl_map *map; - unsigned n_out; - - if (!active[i]) - continue; - - map = isl_map_copy(schedule->node[i].sched); - n_out = isl_map_dim(map, isl_dim_out); - map = isl_map_project_out(map, isl_dim_out, end, n_out - end); - map = isl_map_project_out(map, isl_dim_out, 0, start); - band->map = isl_union_map_union(band->map, - isl_union_map_from_map(map)); - } - if (!band->map) - goto error; - - return band; -error: - isl_band_free(band); - return NULL; -} - -/* Construct a list of bands that start at the same position (with - * sequence number band_nr) in the schedules of the nodes that - * were active in the parent band. - * - * A separate isl_band structure is created for each band_id - * and for each node that does not have a band with sequence - * number band_nr. In the latter case, a band without members - * is created. - * This ensures that if a band has any children, then each node - * that was active in the band is active in exactly one of the children. - */ -static __isl_give isl_band_list *construct_band_list( - __isl_keep isl_schedule *schedule, __isl_keep isl_band *parent, - int band_nr, int *parent_active, int n_active) -{ - int i, j; - isl_ctx *ctx = isl_schedule_get_ctx(schedule); - int *active; - int n_band; - isl_band_list *list; - - n_band = 0; - for (i = 0; i < n_active; ++i) { - for (j = 0; j < schedule->n; ++j) { - if (!parent_active[j]) - continue; - if (schedule->node[j].n_band <= band_nr) - continue; - if (schedule->node[j].band_id[band_nr] == i) { - n_band++; - break; - } - } - } - for (j = 0; j < schedule->n; ++j) - if (schedule->node[j].n_band <= band_nr) - n_band++; - - if (n_band == 1) { - isl_band *band; - list = isl_band_list_alloc(ctx, n_band); - band = construct_band(schedule, parent, band_nr, - parent_active, n_active); - return isl_band_list_add(list, band); - } - - active = isl_alloc_array(ctx, int, schedule->n); - if (!active) - return NULL; - - list = isl_band_list_alloc(ctx, n_band); - - for (i = 0; i < n_active; ++i) { - int n = 0; - isl_band *band; - - for (j = 0; j < schedule->n; ++j) { - active[j] = parent_active[j] && - schedule->node[j].n_band > band_nr && - schedule->node[j].band_id[band_nr] == i; - if (active[j]) - n++; - } - if (n == 0) - continue; - - band = construct_band(schedule, parent, band_nr, active, n); - - list = isl_band_list_add(list, band); - } - for (i = 0; i < schedule->n; ++i) { - isl_band *band; - if (!parent_active[i]) - continue; - if (schedule->node[i].n_band > band_nr) - continue; - for (j = 0; j < schedule->n; ++j) - active[j] = j == i; - band = construct_band(schedule, parent, band_nr, active, 1); - list = isl_band_list_add(list, band); - } - - free(active); - - return list; -} - -/* Construct a band forest representation of the schedule and - * return the list of roots. - */ -static __isl_give isl_band_list *construct_forest( - __isl_keep isl_schedule *schedule) -{ - int i; - isl_ctx *ctx = isl_schedule_get_ctx(schedule); - isl_band_list *forest; - int *active; - - active = isl_alloc_array(ctx, int, schedule->n); - if (!active) - return NULL; - - for (i = 0; i < schedule->n; ++i) - active[i] = 1; - - forest = construct_band_list(schedule, NULL, 0, active, schedule->n); - - free(active); - - return forest; -} - -/* Return the roots of a band forest representation of the schedule. - */ -__isl_give isl_band_list *isl_schedule_get_band_forest( - __isl_keep isl_schedule *schedule) -{ - if (!schedule) - return NULL; - if (!schedule->band_forest) - schedule->band_forest = construct_forest(schedule); - return isl_band_list_dup(schedule->band_forest); -} - -static __isl_give isl_printer *print_band_list(__isl_take isl_printer *p, - __isl_keep isl_band_list *list); - -static __isl_give isl_printer *print_band(__isl_take isl_printer *p, - __isl_keep isl_band *band) -{ - isl_band_list *children; - - p = isl_printer_start_line(p); - p = isl_printer_print_union_map(p, band->map); - p = isl_printer_end_line(p); - - if (!isl_band_has_children(band)) - return p; - - children = isl_band_get_children(band); - - p = isl_printer_indent(p, 4); - p = print_band_list(p, children); - p = isl_printer_indent(p, -4); - - isl_band_list_free(children); - - return p; -} - -static __isl_give isl_printer *print_band_list(__isl_take isl_printer *p, - __isl_keep isl_band_list *list) -{ - int i, n; - - n = isl_band_list_n_band(list); - for (i = 0; i < n; ++i) { - isl_band *band; - band = isl_band_list_get_band(list, i); - p = print_band(p, band); - isl_band_free(band); - } - - return p; -} - -__isl_give isl_printer *isl_printer_print_schedule(__isl_take isl_printer *p, - __isl_keep isl_schedule *schedule) -{ - isl_band_list *forest; - - forest = isl_schedule_get_band_forest(schedule); - - p = print_band_list(p, forest); - - isl_band_list_free(forest); - - return p; -} - -void isl_schedule_dump(__isl_keep isl_schedule *schedule) -{ - isl_printer *printer; - - if (!schedule) - return; - - printer = isl_printer_to_file(isl_schedule_get_ctx(schedule), stderr); - printer = isl_printer_print_schedule(printer, schedule); - - isl_printer_free(printer); -} diff --git a/cloog-0.16.3/isl/isl_schedule_private.h b/cloog-0.16.3/isl/isl_schedule_private.h deleted file mode 100644 index f5cf7d9..0000000 --- a/cloog-0.16.3/isl/isl_schedule_private.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef ISL_SCHEDLUE_PRIVATE_H -#define ISL_SCHEDLUE_PRIVATE_H - -#include - -/* The schedule for an individual domain, plus information about the bands - * and scheduling dimensions. - * In particular, we keep track of the number of bands and for each - * band, the starting position of the next band. The first band starts at - * position 0. - * For each scheduling dimension, we keep track of whether it result - * in zero dependence distances (within its band) with respect - * to the proximity edges. - */ -struct isl_schedule_node { - isl_map *sched; - int n_band; - int *band_end; - int *band_id; - int *zero; -}; - -/* Information about the computed schedule. - * n is the number of nodes/domains/statements. - * n_band is the maximal number of bands. - * n_total_row is the number of coordinates of the schedule. - * dim contains a description of the parameters. - * band_forest points to a band forest representation of the schedule - * and may be NULL if the forest hasn't been created yet. - */ -struct isl_schedule { - int ref; - - int n; - int n_band; - int n_total_row; - isl_dim *dim; - - isl_band_list *band_forest; - - struct isl_schedule_node node[1]; -}; - -#endif diff --git a/cloog-0.16.3/isl/isl_seq.c b/cloog-0.16.3/isl/isl_seq.c deleted file mode 100644 index dd80c19..0000000 --- a/cloog-0.16.3/isl/isl_seq.c +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include - -void isl_seq_clr(isl_int *p, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_set_si(p[i], 0); -} - -void isl_seq_set(isl_int *p, isl_int v, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_set(p[i], v); -} - -void isl_seq_neg(isl_int *dst, isl_int *src, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_neg(dst[i], src[i]); -} - -void isl_seq_cpy(isl_int *dst, isl_int *src, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_set(dst[i], src[i]); -} - -void isl_seq_submul(isl_int *dst, isl_int f, isl_int *src, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_submul(dst[i], f, src[i]); -} - -void isl_seq_addmul(isl_int *dst, isl_int f, isl_int *src, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_addmul(dst[i], f, src[i]); -} - -void isl_seq_swp_or_cpy(isl_int *dst, isl_int *src, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_swap_or_set(dst[i], src[i]); -} - -void isl_seq_scale(isl_int *dst, isl_int *src, isl_int m, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_mul(dst[i], src[i], m); -} - -void isl_seq_scale_down(isl_int *dst, isl_int *src, isl_int m, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_divexact(dst[i], src[i], m); -} - -void isl_seq_cdiv_q(isl_int *dst, isl_int *src, isl_int m, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_cdiv_q(dst[i], src[i], m); -} - -void isl_seq_fdiv_q(isl_int *dst, isl_int *src, isl_int m, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_fdiv_q(dst[i], src[i], m); -} - -void isl_seq_fdiv_r(isl_int *dst, isl_int *src, isl_int m, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_fdiv_r(dst[i], src[i], m); -} - -void isl_seq_combine(isl_int *dst, isl_int m1, isl_int *src1, - isl_int m2, isl_int *src2, unsigned len) -{ - int i; - isl_int tmp; - - isl_int_init(tmp); - for (i = 0; i < len; ++i) { - isl_int_mul(tmp, m1, src1[i]); - isl_int_addmul(tmp, m2, src2[i]); - isl_int_set(dst[i], tmp); - } - isl_int_clear(tmp); -} - -/* - * Let d = dst[pos] and s = src[pos] - * dst is replaced by |s| dst - sgn(s)d src - */ -void isl_seq_elim(isl_int *dst, isl_int *src, unsigned pos, unsigned len, - isl_int *m) -{ - isl_int a; - isl_int b; - - if (isl_int_is_zero(dst[pos])) - return; - - isl_int_init(a); - isl_int_init(b); - - isl_int_gcd(a, src[pos], dst[pos]); - isl_int_divexact(b, dst[pos], a); - if (isl_int_is_pos(src[pos])) - isl_int_neg(b, b); - isl_int_divexact(a, src[pos], a); - isl_int_abs(a, a); - isl_seq_combine(dst, a, dst, b, src, len); - - if (m) - isl_int_mul(*m, *m, a); - - isl_int_clear(a); - isl_int_clear(b); -} - -int isl_seq_eq(isl_int *p1, isl_int *p2, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - if (isl_int_ne(p1[i], p2[i])) - return 0; - return 1; -} - -int isl_seq_cmp(isl_int *p1, isl_int *p2, unsigned len) -{ - int i; - int cmp; - for (i = 0; i < len; ++i) - if ((cmp = isl_int_cmp(p1[i], p2[i])) != 0) - return cmp; - return 0; -} - -int isl_seq_is_neg(isl_int *p1, isl_int *p2, unsigned len) -{ - int i; - - for (i = 0; i < len; ++i) { - if (isl_int_abs_ne(p1[i], p2[i])) - return 0; - if (isl_int_is_zero(p1[i])) - continue; - if (isl_int_eq(p1[i], p2[i])) - return 0; - } - return 1; -} - -int isl_seq_first_non_zero(isl_int *p, unsigned len) -{ - int i; - - for (i = 0; i < len; ++i) - if (!isl_int_is_zero(p[i])) - return i; - return -1; -} - -int isl_seq_last_non_zero(isl_int *p, unsigned len) -{ - int i; - - for (i = len - 1; i >= 0; --i) - if (!isl_int_is_zero(p[i])) - return i; - return -1; -} - -int isl_seq_abs_min_non_zero(isl_int *p, unsigned len) -{ - int i, min = isl_seq_first_non_zero(p, len); - if (min < 0) - return -1; - for (i = min + 1; i < len; ++i) { - if (isl_int_is_zero(p[i])) - continue; - if (isl_int_abs_lt(p[i], p[min])) - min = i; - } - return min; -} - -void isl_seq_gcd(isl_int *p, unsigned len, isl_int *gcd) -{ - int i, min = isl_seq_abs_min_non_zero(p, len); - - if (min < 0) { - isl_int_set_si(*gcd, 0); - return; - } - isl_int_abs(*gcd, p[min]); - for (i = 0; isl_int_cmp_si(*gcd, 1) > 0 && i < len; ++i) { - if (i == min) - continue; - if (isl_int_is_zero(p[i])) - continue; - isl_int_gcd(*gcd, *gcd, p[i]); - } -} - -void isl_seq_normalize(struct isl_ctx *ctx, isl_int *p, unsigned len) -{ - if (len == 0) - return; - isl_seq_gcd(p, len, &ctx->normalize_gcd); - if (!isl_int_is_zero(ctx->normalize_gcd) && - !isl_int_is_one(ctx->normalize_gcd)) - isl_seq_scale_down(p, p, ctx->normalize_gcd, len); -} - -void isl_seq_lcm(isl_int *p, unsigned len, isl_int *lcm) -{ - int i; - - if (len == 0) { - isl_int_set_si(*lcm, 1); - return; - } - isl_int_set(*lcm, p[0]); - for (i = 1; i < len; ++i) - isl_int_lcm(*lcm, *lcm, p[i]); -} - -void isl_seq_inner_product(isl_int *p1, isl_int *p2, unsigned len, - isl_int *prod) -{ - int i; - if (len == 0) { - isl_int_set_si(*prod, 0); - return; - } - isl_int_mul(*prod, p1[0], p2[0]); - for (i = 1; i < len; ++i) - isl_int_addmul(*prod, p1[i], p2[i]); -} - -uint32_t isl_seq_hash(isl_int *p, unsigned len, uint32_t hash) -{ - int i; - for (i = 0; i < len; ++i) { - if (isl_int_is_zero(p[i])) - continue; - hash *= 16777619; - hash ^= (i & 0xFF); - hash = isl_int_hash(p[i], hash); - } - return hash; -} - -uint32_t isl_seq_get_hash(isl_int *p, unsigned len) -{ - uint32_t hash = isl_hash_init(); - - return isl_seq_hash(p, len, hash); -} - -uint32_t isl_seq_get_hash_bits(isl_int *p, unsigned len, unsigned bits) -{ - uint32_t hash; - - hash = isl_seq_get_hash(p, len); - return isl_hash_bits(hash, bits); -} diff --git a/cloog-0.16.3/isl/isl_stream.c b/cloog-0.16.3/isl/isl_stream.c deleted file mode 100644 index c544149..0000000 --- a/cloog-0.16.3/isl/isl_stream.c +++ /dev/null @@ -1,680 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include - -struct isl_keyword { - char *name; - enum isl_token_type type; -}; - -static int same_name(const void *entry, const void *val) -{ - const struct isl_keyword *keyword = (const struct isl_keyword *)entry; - - return !strcmp(keyword->name, val); -} - -enum isl_token_type isl_stream_register_keyword(struct isl_stream *s, - const char *name) -{ - struct isl_hash_table_entry *entry; - struct isl_keyword *keyword; - uint32_t name_hash; - - if (!s->keywords) { - s->keywords = isl_hash_table_alloc(s->ctx, 10); - if (!s->keywords) - return ISL_TOKEN_ERROR; - s->next_type = ISL_TOKEN_LAST; - } - - name_hash = isl_hash_string(isl_hash_init(), name); - - entry = isl_hash_table_find(s->ctx, s->keywords, name_hash, - same_name, name, 1); - if (!entry) - return ISL_TOKEN_ERROR; - if (entry->data) { - keyword = entry->data; - return keyword->type; - } - - keyword = isl_calloc_type(s->ctx, struct isl_keyword); - if (!keyword) - return ISL_TOKEN_ERROR; - keyword->type = s->next_type++; - keyword->name = strdup(name); - if (!keyword->name) { - free(keyword); - return ISL_TOKEN_ERROR; - } - entry->data = keyword; - - return keyword->type; -} - -static struct isl_token *isl_token_new(struct isl_ctx *ctx, - int line, int col, unsigned on_new_line) -{ - struct isl_token *tok = isl_alloc_type(ctx, struct isl_token); - if (!tok) - return NULL; - tok->line = line; - tok->col = col; - tok->on_new_line = on_new_line; - tok->is_keyword = 0; - tok->u.s = NULL; - return tok; -} - -void isl_token_free(struct isl_token *tok) -{ - if (!tok) - return; - if (tok->type == ISL_TOKEN_VALUE) - isl_int_clear(tok->u.v); - else - free(tok->u.s); - free(tok); -} - -void isl_stream_error(struct isl_stream *s, struct isl_token *tok, char *msg) -{ - int line = tok ? tok->line : s->line; - int col = tok ? tok->col : s->col; - fprintf(stderr, "syntax error (%d, %d): %s\n", line, col, msg); - if (tok) { - if (tok->type < 256) - fprintf(stderr, "got '%c'\n", tok->type); - else if (tok->type == ISL_TOKEN_IDENT) - fprintf(stderr, "got ident '%s'\n", tok->u.s); - else if (tok->is_keyword) - fprintf(stderr, "got keyword '%s'\n", tok->u.s); - else if (tok->type == ISL_TOKEN_VALUE) { - fprintf(stderr, "got value '"); - isl_int_print(stderr, tok->u.v, 0); - fprintf(stderr, "'\n"); - } else if (tok->u.s) - fprintf(stderr, "got token '%s'\n", tok->u.s); - else - fprintf(stderr, "got token type %d\n", tok->type); - } -} - -static struct isl_stream* isl_stream_new(struct isl_ctx *ctx) -{ - int i; - struct isl_stream *s = isl_alloc_type(ctx, struct isl_stream); - if (!s) - return NULL; - s->ctx = ctx; - isl_ctx_ref(s->ctx); - s->file = NULL; - s->str = NULL; - s->len = 0; - s->line = 1; - s->col = 0; - s->eof = 0; - s->c = -1; - s->n_un = 0; - for (i = 0; i < 5; ++i) - s->tokens[i] = NULL; - s->n_token = 0; - s->keywords = NULL; - s->size = 256; - s->buffer = isl_alloc_array(ctx, char, s->size); - if (!s->buffer) - goto error; - return s; -error: - isl_stream_free(s); - return NULL; -} - -struct isl_stream* isl_stream_new_file(struct isl_ctx *ctx, FILE *file) -{ - struct isl_stream *s = isl_stream_new(ctx); - if (!s) - return NULL; - s->file = file; - return s; -} - -struct isl_stream* isl_stream_new_str(struct isl_ctx *ctx, const char *str) -{ - struct isl_stream *s = isl_stream_new(ctx); - if (!s) - return NULL; - s->str = str; - return s; -} - -static int stream_getc(struct isl_stream *s) -{ - int c; - if (s->eof) - return -1; - if (s->n_un) - return s->c = s->un[--s->n_un]; - if (s->file) - c = fgetc(s->file); - else { - c = *s->str++; - if (c == '\0') - c = -1; - } - if (c == -1) - s->eof = 1; - if (!s->eof) { - if (s->c == '\n') { - s->line++; - s->col = 0; - } else - s->col++; - } - s->c = c; - return c; -} - -static void isl_stream_ungetc(struct isl_stream *s, int c) -{ - isl_assert(s->ctx, s->n_un < 5, return); - s->un[s->n_un++] = c; - s->c = -1; -} - -static int isl_stream_getc(struct isl_stream *s) -{ - int c; - - do { - c = stream_getc(s); - if (c != '\\') - return c; - c = stream_getc(s); - } while (c == '\n'); - - isl_stream_ungetc(s, c); - - return '\\'; -} - -static int isl_stream_push_char(struct isl_stream *s, int c) -{ - if (s->len >= s->size) { - char *buffer; - s->size = (3*s->size)/2; - buffer = isl_realloc_array(s->ctx, s->buffer, char, s->size); - if (!buffer) - return -1; - s->buffer = buffer; - } - s->buffer[s->len++] = c; - return 0; -} - -void isl_stream_push_token(struct isl_stream *s, struct isl_token *tok) -{ - isl_assert(s->ctx, s->n_token < 5, return); - s->tokens[s->n_token++] = tok; -} - -static enum isl_token_type check_keywords(struct isl_stream *s) -{ - struct isl_hash_table_entry *entry; - struct isl_keyword *keyword; - uint32_t name_hash; - - if (!strcasecmp(s->buffer, "exists")) - return ISL_TOKEN_EXISTS; - if (!strcasecmp(s->buffer, "and")) - return ISL_TOKEN_AND; - if (!strcasecmp(s->buffer, "or")) - return ISL_TOKEN_OR; - if (!strcasecmp(s->buffer, "not")) - return ISL_TOKEN_NOT; - if (!strcasecmp(s->buffer, "infty")) - return ISL_TOKEN_INFTY; - if (!strcasecmp(s->buffer, "infinity")) - return ISL_TOKEN_INFTY; - if (!strcasecmp(s->buffer, "NaN")) - return ISL_TOKEN_NAN; - if (!strcasecmp(s->buffer, "min")) - return ISL_TOKEN_MIN; - if (!strcasecmp(s->buffer, "max")) - return ISL_TOKEN_MAX; - if (!strcasecmp(s->buffer, "rat")) - return ISL_TOKEN_RAT; - if (!strcasecmp(s->buffer, "true")) - return ISL_TOKEN_TRUE; - if (!strcasecmp(s->buffer, "false")) - return ISL_TOKEN_FALSE; - if (!strcasecmp(s->buffer, "ceild")) - return ISL_TOKEN_CEILD; - if (!strcasecmp(s->buffer, "floord")) - return ISL_TOKEN_FLOORD; - - if (!s->keywords) - return ISL_TOKEN_IDENT; - - name_hash = isl_hash_string(isl_hash_init(), s->buffer); - entry = isl_hash_table_find(s->ctx, s->keywords, name_hash, same_name, - s->buffer, 0); - if (entry) { - keyword = entry->data; - return keyword->type; - } - - return ISL_TOKEN_IDENT; -} - -int isl_stream_skip_line(struct isl_stream *s) -{ - int c; - - while ((c = isl_stream_getc(s)) != -1 && c != '\n') - /* nothing */ - ; - - return c == -1 ? -1 : 0; -} - -static struct isl_token *next_token(struct isl_stream *s, int same_line) -{ - int c; - struct isl_token *tok = NULL; - int line, col; - int old_line = s->line; - - if (s->n_token) { - if (same_line && s->tokens[s->n_token - 1]->on_new_line) - return NULL; - return s->tokens[--s->n_token]; - } - - if (same_line && s->c == '\n') - return NULL; - - s->len = 0; - - /* skip spaces and comment lines */ - while ((c = isl_stream_getc(s)) != -1) { - if (c == '#') { - if (isl_stream_skip_line(s) < 0) - break; - c = '\n'; - if (same_line) - break; - } else if (!isspace(c) || (same_line && c == '\n')) - break; - } - - line = s->line; - col = s->col; - - if (c == -1 || (same_line && c == '\n')) - return NULL; - if (c == '(' || - c == ')' || - c == '+' || - c == '*' || - c == '%' || - c == '^' || - c == '=' || - c == '@' || - c == '$' || - c == ',' || - c == '.' || - c == ';' || - c == '[' || - c == ']' || - c == '{' || - c == '}') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = (enum isl_token_type)c; - return tok; - } - if (c == '-') { - int c; - if ((c = isl_stream_getc(s)) == '>') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->u.s = strdup("->"); - tok->type = ISL_TOKEN_TO; - return tok; - } - if (c != -1) - isl_stream_ungetc(s, c); - if (!isdigit(c)) { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = (enum isl_token_type) '-'; - return tok; - } - } - if (c == '-' || isdigit(c)) { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = ISL_TOKEN_VALUE; - isl_int_init(tok->u.v); - if (isl_stream_push_char(s, c)) - goto error; - while ((c = isl_stream_getc(s)) != -1 && isdigit(c)) - if (isl_stream_push_char(s, c)) - goto error; - if (c != -1) - isl_stream_ungetc(s, c); - isl_stream_push_char(s, '\0'); - isl_int_read(tok->u.v, s->buffer); - return tok; - } - if (isalpha(c) || c == '_') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - isl_stream_push_char(s, c); - while ((c = isl_stream_getc(s)) != -1 && - (isalnum(c) || c == '_')) - isl_stream_push_char(s, c); - if (c != -1) - isl_stream_ungetc(s, c); - while ((c = isl_stream_getc(s)) != -1 && c == '\'') - isl_stream_push_char(s, c); - if (c != -1) - isl_stream_ungetc(s, c); - isl_stream_push_char(s, '\0'); - tok->type = check_keywords(s); - if (tok->type != ISL_TOKEN_IDENT) - tok->is_keyword = 1; - tok->u.s = strdup(s->buffer); - if (!tok->u.s) - goto error; - return tok; - } - if (c == '"') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = ISL_TOKEN_STRING; - tok->u.s = NULL; - while ((c = isl_stream_getc(s)) != -1 && c != '"' && c != '\n') - isl_stream_push_char(s, c); - if (c != '"') { - isl_stream_error(s, NULL, "unterminated string"); - goto error; - } - isl_stream_push_char(s, '\0'); - tok->u.s = strdup(s->buffer); - return tok; - } - if (c == ':') { - int c; - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - if ((c = isl_stream_getc(s)) == '=') { - tok->u.s = strdup(":="); - tok->type = ISL_TOKEN_DEF; - return tok; - } - if (c != -1) - isl_stream_ungetc(s, c); - tok->type = (enum isl_token_type) ':'; - return tok; - } - if (c == '>') { - int c; - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - if ((c = isl_stream_getc(s)) == '=') { - tok->u.s = strdup(">="); - tok->type = ISL_TOKEN_GE; - return tok; - } else if (c == '>') { - if ((c = isl_stream_getc(s)) == '=') { - tok->u.s = strdup(">>="); - tok->type = ISL_TOKEN_LEX_GE; - return tok; - } - tok->u.s = strdup(">>"); - tok->type = ISL_TOKEN_LEX_GT; - } else { - tok->u.s = strdup(">"); - tok->type = ISL_TOKEN_GT; - } - if (c != -1) - isl_stream_ungetc(s, c); - return tok; - } - if (c == '<') { - int c; - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - if ((c = isl_stream_getc(s)) == '=') { - tok->u.s = strdup("<="); - tok->type = ISL_TOKEN_LE; - return tok; - } else if (c == '<') { - if ((c = isl_stream_getc(s)) == '=') { - tok->u.s = strdup("<<="); - tok->type = ISL_TOKEN_LEX_LE; - return tok; - } - tok->u.s = strdup("<<"); - tok->type = ISL_TOKEN_LEX_LT; - } else { - tok->u.s = strdup("<"); - tok->type = ISL_TOKEN_LT; - } - if (c != -1) - isl_stream_ungetc(s, c); - return tok; - } - if (c == '&') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = ISL_TOKEN_AND; - if ((c = isl_stream_getc(s)) != '&' && c != -1) { - tok->u.s = strdup("&"); - isl_stream_ungetc(s, c); - } else - tok->u.s = strdup("&&"); - return tok; - } - if (c == '|') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = ISL_TOKEN_OR; - if ((c = isl_stream_getc(s)) != '|' && c != -1) { - tok->u.s = strdup("|"); - isl_stream_ungetc(s, c); - } else - tok->u.s = strdup("||"); - return tok; - } - if (c == '/') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - if ((c = isl_stream_getc(s)) != '\\' && c != -1) { - tok->type = (enum isl_token_type) '/'; - isl_stream_ungetc(s, c); - } else { - tok->u.s = strdup("/\\"); - tok->type = ISL_TOKEN_AND; - } - return tok; - } - if (c == '\\') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - if ((c = isl_stream_getc(s)) != '/' && c != -1) { - tok->type = (enum isl_token_type) '\\'; - isl_stream_ungetc(s, c); - } else { - tok->u.s = strdup("\\/"); - tok->type = ISL_TOKEN_OR; - } - return tok; - } - if (c == '!') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = ISL_TOKEN_NOT; - tok->u.s = strdup("!"); - return tok; - } - - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = ISL_TOKEN_UNKNOWN; - return tok; -error: - isl_token_free(tok); - return NULL; -} - -struct isl_token *isl_stream_next_token(struct isl_stream *s) -{ - return next_token(s, 0); -} - -struct isl_token *isl_stream_next_token_on_same_line(struct isl_stream *s) -{ - return next_token(s, 1); -} - -int isl_stream_eat_if_available(struct isl_stream *s, int type) -{ - struct isl_token *tok; - - tok = isl_stream_next_token(s); - if (!tok) - return 0; - if (tok->type == type) { - isl_token_free(tok); - return 1; - } - isl_stream_push_token(s, tok); - return 0; -} - -int isl_stream_next_token_is(struct isl_stream *s, int type) -{ - struct isl_token *tok; - int r; - - tok = isl_stream_next_token(s); - if (!tok) - return 0; - r = tok->type == type; - isl_stream_push_token(s, tok); - return r; -} - -char *isl_stream_read_ident_if_available(struct isl_stream *s) -{ - struct isl_token *tok; - - tok = isl_stream_next_token(s); - if (!tok) - return NULL; - if (tok->type == ISL_TOKEN_IDENT) { - char *ident = strdup(tok->u.s); - isl_token_free(tok); - return ident; - } - isl_stream_push_token(s, tok); - return NULL; -} - -int isl_stream_eat(struct isl_stream *s, int type) -{ - struct isl_token *tok; - - tok = isl_stream_next_token(s); - if (!tok) - return -1; - if (tok->type == type) { - isl_token_free(tok); - return 0; - } - isl_stream_error(s, tok, "expecting other token"); - isl_stream_push_token(s, tok); - return -1; -} - -int isl_stream_is_empty(struct isl_stream *s) -{ - struct isl_token *tok; - - tok = isl_stream_next_token(s); - - if (!tok) - return 1; - - isl_stream_push_token(s, tok); - return 0; -} - -static int free_keyword(void **p, void *user) -{ - struct isl_keyword *keyword = *p; - - free(keyword->name); - free(keyword); - - return 0; -} - -void isl_stream_flush_tokens(struct isl_stream *s) -{ - int i; - - if (!s) - return; - for (i = 0; i < s->n_token; ++i) - isl_token_free(s->tokens[i]); - s->n_token = 0; -} - -void isl_stream_free(struct isl_stream *s) -{ - if (!s) - return; - free(s->buffer); - if (s->n_token != 0) { - struct isl_token *tok = isl_stream_next_token(s); - isl_stream_error(s, tok, "unexpected token"); - isl_token_free(tok); - } - if (s->keywords) { - isl_hash_table_foreach(s->ctx, s->keywords, &free_keyword, NULL); - isl_hash_table_free(s->ctx, s->keywords); - } - isl_ctx_deref(s->ctx); - free(s); -} diff --git a/cloog-0.16.3/isl/isl_tab.c b/cloog-0.16.3/isl/isl_tab.c deleted file mode 100644 index 5151ab6..0000000 --- a/cloog-0.16.3/isl/isl_tab.c +++ /dev/null @@ -1,3342 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include "isl_map_private.h" -#include "isl_tab.h" -#include -#include - -/* - * The implementation of tableaus in this file was inspired by Section 8 - * of David Detlefs, Greg Nelson and James B. Saxe, "Simplify: a theorem - * prover for program checking". - */ - -struct isl_tab *isl_tab_alloc(struct isl_ctx *ctx, - unsigned n_row, unsigned n_var, unsigned M) -{ - int i; - struct isl_tab *tab; - unsigned off = 2 + M; - - tab = isl_calloc_type(ctx, struct isl_tab); - if (!tab) - return NULL; - tab->mat = isl_mat_alloc(ctx, n_row, off + n_var); - if (!tab->mat) - goto error; - tab->var = isl_alloc_array(ctx, struct isl_tab_var, n_var); - if (!tab->var) - goto error; - tab->con = isl_alloc_array(ctx, struct isl_tab_var, n_row); - if (!tab->con) - goto error; - tab->col_var = isl_alloc_array(ctx, int, n_var); - if (!tab->col_var) - goto error; - tab->row_var = isl_alloc_array(ctx, int, n_row); - if (!tab->row_var) - goto error; - for (i = 0; i < n_var; ++i) { - tab->var[i].index = i; - tab->var[i].is_row = 0; - tab->var[i].is_nonneg = 0; - tab->var[i].is_zero = 0; - tab->var[i].is_redundant = 0; - tab->var[i].frozen = 0; - tab->var[i].negated = 0; - tab->col_var[i] = i; - } - tab->n_row = 0; - tab->n_con = 0; - tab->n_eq = 0; - tab->max_con = n_row; - tab->n_col = n_var; - tab->n_var = n_var; - tab->max_var = n_var; - tab->n_param = 0; - tab->n_div = 0; - tab->n_dead = 0; - tab->n_redundant = 0; - tab->strict_redundant = 0; - tab->need_undo = 0; - tab->rational = 0; - tab->empty = 0; - tab->in_undo = 0; - tab->M = M; - tab->cone = 0; - tab->bottom.type = isl_tab_undo_bottom; - tab->bottom.next = NULL; - tab->top = &tab->bottom; - - tab->n_zero = 0; - tab->n_unbounded = 0; - tab->basis = NULL; - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -int isl_tab_extend_cons(struct isl_tab *tab, unsigned n_new) -{ - unsigned off; - - if (!tab) - return -1; - - off = 2 + tab->M; - - if (tab->max_con < tab->n_con + n_new) { - struct isl_tab_var *con; - - con = isl_realloc_array(tab->mat->ctx, tab->con, - struct isl_tab_var, tab->max_con + n_new); - if (!con) - return -1; - tab->con = con; - tab->max_con += n_new; - } - if (tab->mat->n_row < tab->n_row + n_new) { - int *row_var; - - tab->mat = isl_mat_extend(tab->mat, - tab->n_row + n_new, off + tab->n_col); - if (!tab->mat) - return -1; - row_var = isl_realloc_array(tab->mat->ctx, tab->row_var, - int, tab->mat->n_row); - if (!row_var) - return -1; - tab->row_var = row_var; - if (tab->row_sign) { - enum isl_tab_row_sign *s; - s = isl_realloc_array(tab->mat->ctx, tab->row_sign, - enum isl_tab_row_sign, tab->mat->n_row); - if (!s) - return -1; - tab->row_sign = s; - } - } - return 0; -} - -/* Make room for at least n_new extra variables. - * Return -1 if anything went wrong. - */ -int isl_tab_extend_vars(struct isl_tab *tab, unsigned n_new) -{ - struct isl_tab_var *var; - unsigned off = 2 + tab->M; - - if (tab->max_var < tab->n_var + n_new) { - var = isl_realloc_array(tab->mat->ctx, tab->var, - struct isl_tab_var, tab->n_var + n_new); - if (!var) - return -1; - tab->var = var; - tab->max_var += n_new; - } - - if (tab->mat->n_col < off + tab->n_col + n_new) { - int *p; - - tab->mat = isl_mat_extend(tab->mat, - tab->mat->n_row, off + tab->n_col + n_new); - if (!tab->mat) - return -1; - p = isl_realloc_array(tab->mat->ctx, tab->col_var, - int, tab->n_col + n_new); - if (!p) - return -1; - tab->col_var = p; - } - - return 0; -} - -struct isl_tab *isl_tab_extend(struct isl_tab *tab, unsigned n_new) -{ - if (isl_tab_extend_cons(tab, n_new) >= 0) - return tab; - - isl_tab_free(tab); - return NULL; -} - -static void free_undo_record(struct isl_tab_undo *undo) -{ - switch (undo->type) { - case isl_tab_undo_saved_basis: - free(undo->u.col_var); - break; - default:; - } - free(undo); -} - -static void free_undo(struct isl_tab *tab) -{ - struct isl_tab_undo *undo, *next; - - for (undo = tab->top; undo && undo != &tab->bottom; undo = next) { - next = undo->next; - free_undo_record(undo); - } - tab->top = undo; -} - -void isl_tab_free(struct isl_tab *tab) -{ - if (!tab) - return; - free_undo(tab); - isl_mat_free(tab->mat); - isl_vec_free(tab->dual); - isl_basic_map_free(tab->bmap); - free(tab->var); - free(tab->con); - free(tab->row_var); - free(tab->col_var); - free(tab->row_sign); - isl_mat_free(tab->samples); - free(tab->sample_index); - isl_mat_free(tab->basis); - free(tab); -} - -struct isl_tab *isl_tab_dup(struct isl_tab *tab) -{ - int i; - struct isl_tab *dup; - unsigned off; - - if (!tab) - return NULL; - - off = 2 + tab->M; - dup = isl_calloc_type(tab->mat->ctx, struct isl_tab); - if (!dup) - return NULL; - dup->mat = isl_mat_dup(tab->mat); - if (!dup->mat) - goto error; - dup->var = isl_alloc_array(tab->mat->ctx, struct isl_tab_var, tab->max_var); - if (!dup->var) - goto error; - for (i = 0; i < tab->n_var; ++i) - dup->var[i] = tab->var[i]; - dup->con = isl_alloc_array(tab->mat->ctx, struct isl_tab_var, tab->max_con); - if (!dup->con) - goto error; - for (i = 0; i < tab->n_con; ++i) - dup->con[i] = tab->con[i]; - dup->col_var = isl_alloc_array(tab->mat->ctx, int, tab->mat->n_col - off); - if (!dup->col_var) - goto error; - for (i = 0; i < tab->n_col; ++i) - dup->col_var[i] = tab->col_var[i]; - dup->row_var = isl_alloc_array(tab->mat->ctx, int, tab->mat->n_row); - if (!dup->row_var) - goto error; - for (i = 0; i < tab->n_row; ++i) - dup->row_var[i] = tab->row_var[i]; - if (tab->row_sign) { - dup->row_sign = isl_alloc_array(tab->mat->ctx, enum isl_tab_row_sign, - tab->mat->n_row); - if (!dup->row_sign) - goto error; - for (i = 0; i < tab->n_row; ++i) - dup->row_sign[i] = tab->row_sign[i]; - } - if (tab->samples) { - dup->samples = isl_mat_dup(tab->samples); - if (!dup->samples) - goto error; - dup->sample_index = isl_alloc_array(tab->mat->ctx, int, - tab->samples->n_row); - if (!dup->sample_index) - goto error; - dup->n_sample = tab->n_sample; - dup->n_outside = tab->n_outside; - } - dup->n_row = tab->n_row; - dup->n_con = tab->n_con; - dup->n_eq = tab->n_eq; - dup->max_con = tab->max_con; - dup->n_col = tab->n_col; - dup->n_var = tab->n_var; - dup->max_var = tab->max_var; - dup->n_param = tab->n_param; - dup->n_div = tab->n_div; - dup->n_dead = tab->n_dead; - dup->n_redundant = tab->n_redundant; - dup->rational = tab->rational; - dup->empty = tab->empty; - dup->strict_redundant = 0; - dup->need_undo = 0; - dup->in_undo = 0; - dup->M = tab->M; - tab->cone = tab->cone; - dup->bottom.type = isl_tab_undo_bottom; - dup->bottom.next = NULL; - dup->top = &dup->bottom; - - dup->n_zero = tab->n_zero; - dup->n_unbounded = tab->n_unbounded; - dup->basis = isl_mat_dup(tab->basis); - - return dup; -error: - isl_tab_free(dup); - return NULL; -} - -/* Construct the coefficient matrix of the product tableau - * of two tableaus. - * mat{1,2} is the coefficient matrix of tableau {1,2} - * row{1,2} is the number of rows in tableau {1,2} - * col{1,2} is the number of columns in tableau {1,2} - * off is the offset to the coefficient column (skipping the - * denominator, the constant term and the big parameter if any) - * r{1,2} is the number of redundant rows in tableau {1,2} - * d{1,2} is the number of dead columns in tableau {1,2} - * - * The order of the rows and columns in the result is as explained - * in isl_tab_product. - */ -static struct isl_mat *tab_mat_product(struct isl_mat *mat1, - struct isl_mat *mat2, unsigned row1, unsigned row2, - unsigned col1, unsigned col2, - unsigned off, unsigned r1, unsigned r2, unsigned d1, unsigned d2) -{ - int i; - struct isl_mat *prod; - unsigned n; - - prod = isl_mat_alloc(mat1->ctx, mat1->n_row + mat2->n_row, - off + col1 + col2); - if (!prod) - return NULL; - - n = 0; - for (i = 0; i < r1; ++i) { - isl_seq_cpy(prod->row[n + i], mat1->row[i], off + d1); - isl_seq_clr(prod->row[n + i] + off + d1, d2); - isl_seq_cpy(prod->row[n + i] + off + d1 + d2, - mat1->row[i] + off + d1, col1 - d1); - isl_seq_clr(prod->row[n + i] + off + col1 + d1, col2 - d2); - } - - n += r1; - for (i = 0; i < r2; ++i) { - isl_seq_cpy(prod->row[n + i], mat2->row[i], off); - isl_seq_clr(prod->row[n + i] + off, d1); - isl_seq_cpy(prod->row[n + i] + off + d1, - mat2->row[i] + off, d2); - isl_seq_clr(prod->row[n + i] + off + d1 + d2, col1 - d1); - isl_seq_cpy(prod->row[n + i] + off + col1 + d1, - mat2->row[i] + off + d2, col2 - d2); - } - - n += r2; - for (i = 0; i < row1 - r1; ++i) { - isl_seq_cpy(prod->row[n + i], mat1->row[r1 + i], off + d1); - isl_seq_clr(prod->row[n + i] + off + d1, d2); - isl_seq_cpy(prod->row[n + i] + off + d1 + d2, - mat1->row[r1 + i] + off + d1, col1 - d1); - isl_seq_clr(prod->row[n + i] + off + col1 + d1, col2 - d2); - } - - n += row1 - r1; - for (i = 0; i < row2 - r2; ++i) { - isl_seq_cpy(prod->row[n + i], mat2->row[r2 + i], off); - isl_seq_clr(prod->row[n + i] + off, d1); - isl_seq_cpy(prod->row[n + i] + off + d1, - mat2->row[r2 + i] + off, d2); - isl_seq_clr(prod->row[n + i] + off + d1 + d2, col1 - d1); - isl_seq_cpy(prod->row[n + i] + off + col1 + d1, - mat2->row[r2 + i] + off + d2, col2 - d2); - } - - return prod; -} - -/* Update the row or column index of a variable that corresponds - * to a variable in the first input tableau. - */ -static void update_index1(struct isl_tab_var *var, - unsigned r1, unsigned r2, unsigned d1, unsigned d2) -{ - if (var->index == -1) - return; - if (var->is_row && var->index >= r1) - var->index += r2; - if (!var->is_row && var->index >= d1) - var->index += d2; -} - -/* Update the row or column index of a variable that corresponds - * to a variable in the second input tableau. - */ -static void update_index2(struct isl_tab_var *var, - unsigned row1, unsigned col1, - unsigned r1, unsigned r2, unsigned d1, unsigned d2) -{ - if (var->index == -1) - return; - if (var->is_row) { - if (var->index < r2) - var->index += r1; - else - var->index += row1; - } else { - if (var->index < d2) - var->index += d1; - else - var->index += col1; - } -} - -/* Create a tableau that represents the Cartesian product of the sets - * represented by tableaus tab1 and tab2. - * The order of the rows in the product is - * - redundant rows of tab1 - * - redundant rows of tab2 - * - non-redundant rows of tab1 - * - non-redundant rows of tab2 - * The order of the columns is - * - denominator - * - constant term - * - coefficient of big parameter, if any - * - dead columns of tab1 - * - dead columns of tab2 - * - live columns of tab1 - * - live columns of tab2 - * The order of the variables and the constraints is a concatenation - * of order in the two input tableaus. - */ -struct isl_tab *isl_tab_product(struct isl_tab *tab1, struct isl_tab *tab2) -{ - int i; - struct isl_tab *prod; - unsigned off; - unsigned r1, r2, d1, d2; - - if (!tab1 || !tab2) - return NULL; - - isl_assert(tab1->mat->ctx, tab1->M == tab2->M, return NULL); - isl_assert(tab1->mat->ctx, tab1->rational == tab2->rational, return NULL); - isl_assert(tab1->mat->ctx, tab1->cone == tab2->cone, return NULL); - isl_assert(tab1->mat->ctx, !tab1->row_sign, return NULL); - isl_assert(tab1->mat->ctx, !tab2->row_sign, return NULL); - isl_assert(tab1->mat->ctx, tab1->n_param == 0, return NULL); - isl_assert(tab1->mat->ctx, tab2->n_param == 0, return NULL); - isl_assert(tab1->mat->ctx, tab1->n_div == 0, return NULL); - isl_assert(tab1->mat->ctx, tab2->n_div == 0, return NULL); - - off = 2 + tab1->M; - r1 = tab1->n_redundant; - r2 = tab2->n_redundant; - d1 = tab1->n_dead; - d2 = tab2->n_dead; - prod = isl_calloc_type(tab1->mat->ctx, struct isl_tab); - if (!prod) - return NULL; - prod->mat = tab_mat_product(tab1->mat, tab2->mat, - tab1->n_row, tab2->n_row, - tab1->n_col, tab2->n_col, off, r1, r2, d1, d2); - if (!prod->mat) - goto error; - prod->var = isl_alloc_array(tab1->mat->ctx, struct isl_tab_var, - tab1->max_var + tab2->max_var); - if (!prod->var) - goto error; - for (i = 0; i < tab1->n_var; ++i) { - prod->var[i] = tab1->var[i]; - update_index1(&prod->var[i], r1, r2, d1, d2); - } - for (i = 0; i < tab2->n_var; ++i) { - prod->var[tab1->n_var + i] = tab2->var[i]; - update_index2(&prod->var[tab1->n_var + i], - tab1->n_row, tab1->n_col, - r1, r2, d1, d2); - } - prod->con = isl_alloc_array(tab1->mat->ctx, struct isl_tab_var, - tab1->max_con + tab2->max_con); - if (!prod->con) - goto error; - for (i = 0; i < tab1->n_con; ++i) { - prod->con[i] = tab1->con[i]; - update_index1(&prod->con[i], r1, r2, d1, d2); - } - for (i = 0; i < tab2->n_con; ++i) { - prod->con[tab1->n_con + i] = tab2->con[i]; - update_index2(&prod->con[tab1->n_con + i], - tab1->n_row, tab1->n_col, - r1, r2, d1, d2); - } - prod->col_var = isl_alloc_array(tab1->mat->ctx, int, - tab1->n_col + tab2->n_col); - if (!prod->col_var) - goto error; - for (i = 0; i < tab1->n_col; ++i) { - int pos = i < d1 ? i : i + d2; - prod->col_var[pos] = tab1->col_var[i]; - } - for (i = 0; i < tab2->n_col; ++i) { - int pos = i < d2 ? d1 + i : tab1->n_col + i; - int t = tab2->col_var[i]; - if (t >= 0) - t += tab1->n_var; - else - t -= tab1->n_con; - prod->col_var[pos] = t; - } - prod->row_var = isl_alloc_array(tab1->mat->ctx, int, - tab1->mat->n_row + tab2->mat->n_row); - if (!prod->row_var) - goto error; - for (i = 0; i < tab1->n_row; ++i) { - int pos = i < r1 ? i : i + r2; - prod->row_var[pos] = tab1->row_var[i]; - } - for (i = 0; i < tab2->n_row; ++i) { - int pos = i < r2 ? r1 + i : tab1->n_row + i; - int t = tab2->row_var[i]; - if (t >= 0) - t += tab1->n_var; - else - t -= tab1->n_con; - prod->row_var[pos] = t; - } - prod->samples = NULL; - prod->sample_index = NULL; - prod->n_row = tab1->n_row + tab2->n_row; - prod->n_con = tab1->n_con + tab2->n_con; - prod->n_eq = 0; - prod->max_con = tab1->max_con + tab2->max_con; - prod->n_col = tab1->n_col + tab2->n_col; - prod->n_var = tab1->n_var + tab2->n_var; - prod->max_var = tab1->max_var + tab2->max_var; - prod->n_param = 0; - prod->n_div = 0; - prod->n_dead = tab1->n_dead + tab2->n_dead; - prod->n_redundant = tab1->n_redundant + tab2->n_redundant; - prod->rational = tab1->rational; - prod->empty = tab1->empty || tab2->empty; - prod->strict_redundant = tab1->strict_redundant || tab2->strict_redundant; - prod->need_undo = 0; - prod->in_undo = 0; - prod->M = tab1->M; - prod->cone = tab1->cone; - prod->bottom.type = isl_tab_undo_bottom; - prod->bottom.next = NULL; - prod->top = &prod->bottom; - - prod->n_zero = 0; - prod->n_unbounded = 0; - prod->basis = NULL; - - return prod; -error: - isl_tab_free(prod); - return NULL; -} - -static struct isl_tab_var *var_from_index(struct isl_tab *tab, int i) -{ - if (i >= 0) - return &tab->var[i]; - else - return &tab->con[~i]; -} - -struct isl_tab_var *isl_tab_var_from_row(struct isl_tab *tab, int i) -{ - return var_from_index(tab, tab->row_var[i]); -} - -static struct isl_tab_var *var_from_col(struct isl_tab *tab, int i) -{ - return var_from_index(tab, tab->col_var[i]); -} - -/* Check if there are any upper bounds on column variable "var", - * i.e., non-negative rows where var appears with a negative coefficient. - * Return 1 if there are no such bounds. - */ -static int max_is_manifestly_unbounded(struct isl_tab *tab, - struct isl_tab_var *var) -{ - int i; - unsigned off = 2 + tab->M; - - if (var->is_row) - return 0; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - if (!isl_int_is_neg(tab->mat->row[i][off + var->index])) - continue; - if (isl_tab_var_from_row(tab, i)->is_nonneg) - return 0; - } - return 1; -} - -/* Check if there are any lower bounds on column variable "var", - * i.e., non-negative rows where var appears with a positive coefficient. - * Return 1 if there are no such bounds. - */ -static int min_is_manifestly_unbounded(struct isl_tab *tab, - struct isl_tab_var *var) -{ - int i; - unsigned off = 2 + tab->M; - - if (var->is_row) - return 0; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - if (!isl_int_is_pos(tab->mat->row[i][off + var->index])) - continue; - if (isl_tab_var_from_row(tab, i)->is_nonneg) - return 0; - } - return 1; -} - -static int row_cmp(struct isl_tab *tab, int r1, int r2, int c, isl_int t) -{ - unsigned off = 2 + tab->M; - - if (tab->M) { - int s; - isl_int_mul(t, tab->mat->row[r1][2], tab->mat->row[r2][off+c]); - isl_int_submul(t, tab->mat->row[r2][2], tab->mat->row[r1][off+c]); - s = isl_int_sgn(t); - if (s) - return s; - } - isl_int_mul(t, tab->mat->row[r1][1], tab->mat->row[r2][off + c]); - isl_int_submul(t, tab->mat->row[r2][1], tab->mat->row[r1][off + c]); - return isl_int_sgn(t); -} - -/* Given the index of a column "c", return the index of a row - * that can be used to pivot the column in, with either an increase - * (sgn > 0) or a decrease (sgn < 0) of the corresponding variable. - * If "var" is not NULL, then the row returned will be different from - * the one associated with "var". - * - * Each row in the tableau is of the form - * - * x_r = a_r0 + \sum_i a_ri x_i - * - * Only rows with x_r >= 0 and with the sign of a_ri opposite to "sgn" - * impose any limit on the increase or decrease in the value of x_c - * and this bound is equal to a_r0 / |a_rc|. We are therefore looking - * for the row with the smallest (most stringent) such bound. - * Note that the common denominator of each row drops out of the fraction. - * To check if row j has a smaller bound than row r, i.e., - * a_j0 / |a_jc| < a_r0 / |a_rc| or a_j0 |a_rc| < a_r0 |a_jc|, - * we check if -sign(a_jc) (a_j0 a_rc - a_r0 a_jc) < 0, - * where -sign(a_jc) is equal to "sgn". - */ -static int pivot_row(struct isl_tab *tab, - struct isl_tab_var *var, int sgn, int c) -{ - int j, r, tsgn; - isl_int t; - unsigned off = 2 + tab->M; - - isl_int_init(t); - r = -1; - for (j = tab->n_redundant; j < tab->n_row; ++j) { - if (var && j == var->index) - continue; - if (!isl_tab_var_from_row(tab, j)->is_nonneg) - continue; - if (sgn * isl_int_sgn(tab->mat->row[j][off + c]) >= 0) - continue; - if (r < 0) { - r = j; - continue; - } - tsgn = sgn * row_cmp(tab, r, j, c, t); - if (tsgn < 0 || (tsgn == 0 && - tab->row_var[j] < tab->row_var[r])) - r = j; - } - isl_int_clear(t); - return r; -} - -/* Find a pivot (row and col) that will increase (sgn > 0) or decrease - * (sgn < 0) the value of row variable var. - * If not NULL, then skip_var is a row variable that should be ignored - * while looking for a pivot row. It is usually equal to var. - * - * As the given row in the tableau is of the form - * - * x_r = a_r0 + \sum_i a_ri x_i - * - * we need to find a column such that the sign of a_ri is equal to "sgn" - * (such that an increase in x_i will have the desired effect) or a - * column with a variable that may attain negative values. - * If a_ri is positive, then we need to move x_i in the same direction - * to obtain the desired effect. Otherwise, x_i has to move in the - * opposite direction. - */ -static void find_pivot(struct isl_tab *tab, - struct isl_tab_var *var, struct isl_tab_var *skip_var, - int sgn, int *row, int *col) -{ - int j, r, c; - isl_int *tr; - - *row = *col = -1; - - isl_assert(tab->mat->ctx, var->is_row, return); - tr = tab->mat->row[var->index] + 2 + tab->M; - - c = -1; - for (j = tab->n_dead; j < tab->n_col; ++j) { - if (isl_int_is_zero(tr[j])) - continue; - if (isl_int_sgn(tr[j]) != sgn && - var_from_col(tab, j)->is_nonneg) - continue; - if (c < 0 || tab->col_var[j] < tab->col_var[c]) - c = j; - } - if (c < 0) - return; - - sgn *= isl_int_sgn(tr[c]); - r = pivot_row(tab, skip_var, sgn, c); - *row = r < 0 ? var->index : r; - *col = c; -} - -/* Return 1 if row "row" represents an obviously redundant inequality. - * This means - * - it represents an inequality or a variable - * - that is the sum of a non-negative sample value and a positive - * combination of zero or more non-negative constraints. - */ -int isl_tab_row_is_redundant(struct isl_tab *tab, int row) -{ - int i; - unsigned off = 2 + tab->M; - - if (tab->row_var[row] < 0 && !isl_tab_var_from_row(tab, row)->is_nonneg) - return 0; - - if (isl_int_is_neg(tab->mat->row[row][1])) - return 0; - if (tab->strict_redundant && isl_int_is_zero(tab->mat->row[row][1])) - return 0; - if (tab->M && isl_int_is_neg(tab->mat->row[row][2])) - return 0; - - for (i = tab->n_dead; i < tab->n_col; ++i) { - if (isl_int_is_zero(tab->mat->row[row][off + i])) - continue; - if (tab->col_var[i] >= 0) - return 0; - if (isl_int_is_neg(tab->mat->row[row][off + i])) - return 0; - if (!var_from_col(tab, i)->is_nonneg) - return 0; - } - return 1; -} - -static void swap_rows(struct isl_tab *tab, int row1, int row2) -{ - int t; - enum isl_tab_row_sign s; - - t = tab->row_var[row1]; - tab->row_var[row1] = tab->row_var[row2]; - tab->row_var[row2] = t; - isl_tab_var_from_row(tab, row1)->index = row1; - isl_tab_var_from_row(tab, row2)->index = row2; - tab->mat = isl_mat_swap_rows(tab->mat, row1, row2); - - if (!tab->row_sign) - return; - s = tab->row_sign[row1]; - tab->row_sign[row1] = tab->row_sign[row2]; - tab->row_sign[row2] = s; -} - -static int push_union(struct isl_tab *tab, - enum isl_tab_undo_type type, union isl_tab_undo_val u) WARN_UNUSED; -static int push_union(struct isl_tab *tab, - enum isl_tab_undo_type type, union isl_tab_undo_val u) -{ - struct isl_tab_undo *undo; - - if (!tab->need_undo) - return 0; - - undo = isl_alloc_type(tab->mat->ctx, struct isl_tab_undo); - if (!undo) - return -1; - undo->type = type; - undo->u = u; - undo->next = tab->top; - tab->top = undo; - - return 0; -} - -int isl_tab_push_var(struct isl_tab *tab, - enum isl_tab_undo_type type, struct isl_tab_var *var) -{ - union isl_tab_undo_val u; - if (var->is_row) - u.var_index = tab->row_var[var->index]; - else - u.var_index = tab->col_var[var->index]; - return push_union(tab, type, u); -} - -int isl_tab_push(struct isl_tab *tab, enum isl_tab_undo_type type) -{ - union isl_tab_undo_val u = { 0 }; - return push_union(tab, type, u); -} - -/* Push a record on the undo stack describing the current basic - * variables, so that the this state can be restored during rollback. - */ -int isl_tab_push_basis(struct isl_tab *tab) -{ - int i; - union isl_tab_undo_val u; - - u.col_var = isl_alloc_array(tab->mat->ctx, int, tab->n_col); - if (!u.col_var) - return -1; - for (i = 0; i < tab->n_col; ++i) - u.col_var[i] = tab->col_var[i]; - return push_union(tab, isl_tab_undo_saved_basis, u); -} - -int isl_tab_push_callback(struct isl_tab *tab, struct isl_tab_callback *callback) -{ - union isl_tab_undo_val u; - u.callback = callback; - return push_union(tab, isl_tab_undo_callback, u); -} - -struct isl_tab *isl_tab_init_samples(struct isl_tab *tab) -{ - if (!tab) - return NULL; - - tab->n_sample = 0; - tab->n_outside = 0; - tab->samples = isl_mat_alloc(tab->mat->ctx, 1, 1 + tab->n_var); - if (!tab->samples) - goto error; - tab->sample_index = isl_alloc_array(tab->mat->ctx, int, 1); - if (!tab->sample_index) - goto error; - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -struct isl_tab *isl_tab_add_sample(struct isl_tab *tab, - __isl_take isl_vec *sample) -{ - if (!tab || !sample) - goto error; - - if (tab->n_sample + 1 > tab->samples->n_row) { - int *t = isl_realloc_array(tab->mat->ctx, - tab->sample_index, int, tab->n_sample + 1); - if (!t) - goto error; - tab->sample_index = t; - } - - tab->samples = isl_mat_extend(tab->samples, - tab->n_sample + 1, tab->samples->n_col); - if (!tab->samples) - goto error; - - isl_seq_cpy(tab->samples->row[tab->n_sample], sample->el, sample->size); - isl_vec_free(sample); - tab->sample_index[tab->n_sample] = tab->n_sample; - tab->n_sample++; - - return tab; -error: - isl_vec_free(sample); - isl_tab_free(tab); - return NULL; -} - -struct isl_tab *isl_tab_drop_sample(struct isl_tab *tab, int s) -{ - if (s != tab->n_outside) { - int t = tab->sample_index[tab->n_outside]; - tab->sample_index[tab->n_outside] = tab->sample_index[s]; - tab->sample_index[s] = t; - isl_mat_swap_rows(tab->samples, tab->n_outside, s); - } - tab->n_outside++; - if (isl_tab_push(tab, isl_tab_undo_drop_sample) < 0) { - isl_tab_free(tab); - return NULL; - } - - return tab; -} - -/* Record the current number of samples so that we can remove newer - * samples during a rollback. - */ -int isl_tab_save_samples(struct isl_tab *tab) -{ - union isl_tab_undo_val u; - - if (!tab) - return -1; - - u.n = tab->n_sample; - return push_union(tab, isl_tab_undo_saved_samples, u); -} - -/* Mark row with index "row" as being redundant. - * If we may need to undo the operation or if the row represents - * a variable of the original problem, the row is kept, - * but no longer considered when looking for a pivot row. - * Otherwise, the row is simply removed. - * - * The row may be interchanged with some other row. If it - * is interchanged with a later row, return 1. Otherwise return 0. - * If the rows are checked in order in the calling function, - * then a return value of 1 means that the row with the given - * row number may now contain a different row that hasn't been checked yet. - */ -int isl_tab_mark_redundant(struct isl_tab *tab, int row) -{ - struct isl_tab_var *var = isl_tab_var_from_row(tab, row); - var->is_redundant = 1; - isl_assert(tab->mat->ctx, row >= tab->n_redundant, return -1); - if (tab->need_undo || tab->row_var[row] >= 0) { - if (tab->row_var[row] >= 0 && !var->is_nonneg) { - var->is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, var) < 0) - return -1; - } - if (row != tab->n_redundant) - swap_rows(tab, row, tab->n_redundant); - tab->n_redundant++; - return isl_tab_push_var(tab, isl_tab_undo_redundant, var); - } else { - if (row != tab->n_row - 1) - swap_rows(tab, row, tab->n_row - 1); - isl_tab_var_from_row(tab, tab->n_row - 1)->index = -1; - tab->n_row--; - return 1; - } -} - -int isl_tab_mark_empty(struct isl_tab *tab) -{ - if (!tab) - return -1; - if (!tab->empty && tab->need_undo) - if (isl_tab_push(tab, isl_tab_undo_empty) < 0) - return -1; - tab->empty = 1; - return 0; -} - -int isl_tab_freeze_constraint(struct isl_tab *tab, int con) -{ - struct isl_tab_var *var; - - if (!tab) - return -1; - - var = &tab->con[con]; - if (var->frozen) - return 0; - if (var->index < 0) - return 0; - var->frozen = 1; - - if (tab->need_undo) - return isl_tab_push_var(tab, isl_tab_undo_freeze, var); - - return 0; -} - -/* Update the rows signs after a pivot of "row" and "col", with "row_sgn" - * the original sign of the pivot element. - * We only keep track of row signs during PILP solving and in this case - * we only pivot a row with negative sign (meaning the value is always - * non-positive) using a positive pivot element. - * - * For each row j, the new value of the parametric constant is equal to - * - * a_j0 - a_jc a_r0/a_rc - * - * where a_j0 is the original parametric constant, a_rc is the pivot element, - * a_r0 is the parametric constant of the pivot row and a_jc is the - * pivot column entry of the row j. - * Since a_r0 is non-positive and a_rc is positive, the sign of row j - * remains the same if a_jc has the same sign as the row j or if - * a_jc is zero. In all other cases, we reset the sign to "unknown". - */ -static void update_row_sign(struct isl_tab *tab, int row, int col, int row_sgn) -{ - int i; - struct isl_mat *mat = tab->mat; - unsigned off = 2 + tab->M; - - if (!tab->row_sign) - return; - - if (tab->row_sign[row] == 0) - return; - isl_assert(mat->ctx, row_sgn > 0, return); - isl_assert(mat->ctx, tab->row_sign[row] == isl_tab_row_neg, return); - tab->row_sign[row] = isl_tab_row_pos; - for (i = 0; i < tab->n_row; ++i) { - int s; - if (i == row) - continue; - s = isl_int_sgn(mat->row[i][off + col]); - if (!s) - continue; - if (!tab->row_sign[i]) - continue; - if (s < 0 && tab->row_sign[i] == isl_tab_row_neg) - continue; - if (s > 0 && tab->row_sign[i] == isl_tab_row_pos) - continue; - tab->row_sign[i] = isl_tab_row_unknown; - } -} - -/* Given a row number "row" and a column number "col", pivot the tableau - * such that the associated variables are interchanged. - * The given row in the tableau expresses - * - * x_r = a_r0 + \sum_i a_ri x_i - * - * or - * - * x_c = 1/a_rc x_r - a_r0/a_rc + sum_{i \ne r} -a_ri/a_rc - * - * Substituting this equality into the other rows - * - * x_j = a_j0 + \sum_i a_ji x_i - * - * with a_jc \ne 0, we obtain - * - * x_j = a_jc/a_rc x_r + a_j0 - a_jc a_r0/a_rc + sum a_ji - a_jc a_ri/a_rc - * - * The tableau - * - * n_rc/d_r n_ri/d_r - * n_jc/d_j n_ji/d_j - * - * where i is any other column and j is any other row, - * is therefore transformed into - * - * s(n_rc)d_r/|n_rc| -s(n_rc)n_ri/|n_rc| - * s(n_rc)d_r n_jc/(|n_rc| d_j) (n_ji |n_rc| - s(n_rc)n_jc n_ri)/(|n_rc| d_j) - * - * The transformation is performed along the following steps - * - * d_r/n_rc n_ri/n_rc - * n_jc/d_j n_ji/d_j - * - * s(n_rc)d_r/|n_rc| -s(n_rc)n_ri/|n_rc| - * n_jc/d_j n_ji/d_j - * - * s(n_rc)d_r/|n_rc| -s(n_rc)n_ri/|n_rc| - * n_jc/(|n_rc| d_j) n_ji/(|n_rc| d_j) - * - * s(n_rc)d_r/|n_rc| -s(n_rc)n_ri/|n_rc| - * n_jc/(|n_rc| d_j) (n_ji |n_rc|)/(|n_rc| d_j) - * - * s(n_rc)d_r/|n_rc| -s(n_rc)n_ri/|n_rc| - * n_jc/(|n_rc| d_j) (n_ji |n_rc| - s(n_rc)n_jc n_ri)/(|n_rc| d_j) - * - * s(n_rc)d_r/|n_rc| -s(n_rc)n_ri/|n_rc| - * s(n_rc)d_r n_jc/(|n_rc| d_j) (n_ji |n_rc| - s(n_rc)n_jc n_ri)/(|n_rc| d_j) - * - */ -int isl_tab_pivot(struct isl_tab *tab, int row, int col) -{ - int i, j; - int sgn; - int t; - struct isl_mat *mat = tab->mat; - struct isl_tab_var *var; - unsigned off = 2 + tab->M; - - if (tab->mat->ctx->abort) { - isl_ctx_set_error(tab->mat->ctx, isl_error_abort); - return -1; - } - - isl_int_swap(mat->row[row][0], mat->row[row][off + col]); - sgn = isl_int_sgn(mat->row[row][0]); - if (sgn < 0) { - isl_int_neg(mat->row[row][0], mat->row[row][0]); - isl_int_neg(mat->row[row][off + col], mat->row[row][off + col]); - } else - for (j = 0; j < off - 1 + tab->n_col; ++j) { - if (j == off - 1 + col) - continue; - isl_int_neg(mat->row[row][1 + j], mat->row[row][1 + j]); - } - if (!isl_int_is_one(mat->row[row][0])) - isl_seq_normalize(mat->ctx, mat->row[row], off + tab->n_col); - for (i = 0; i < tab->n_row; ++i) { - if (i == row) - continue; - if (isl_int_is_zero(mat->row[i][off + col])) - continue; - isl_int_mul(mat->row[i][0], mat->row[i][0], mat->row[row][0]); - for (j = 0; j < off - 1 + tab->n_col; ++j) { - if (j == off - 1 + col) - continue; - isl_int_mul(mat->row[i][1 + j], - mat->row[i][1 + j], mat->row[row][0]); - isl_int_addmul(mat->row[i][1 + j], - mat->row[i][off + col], mat->row[row][1 + j]); - } - isl_int_mul(mat->row[i][off + col], - mat->row[i][off + col], mat->row[row][off + col]); - if (!isl_int_is_one(mat->row[i][0])) - isl_seq_normalize(mat->ctx, mat->row[i], off + tab->n_col); - } - t = tab->row_var[row]; - tab->row_var[row] = tab->col_var[col]; - tab->col_var[col] = t; - var = isl_tab_var_from_row(tab, row); - var->is_row = 1; - var->index = row; - var = var_from_col(tab, col); - var->is_row = 0; - var->index = col; - update_row_sign(tab, row, col, sgn); - if (tab->in_undo) - return 0; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - if (isl_int_is_zero(mat->row[i][off + col])) - continue; - if (!isl_tab_var_from_row(tab, i)->frozen && - isl_tab_row_is_redundant(tab, i)) { - int redo = isl_tab_mark_redundant(tab, i); - if (redo < 0) - return -1; - if (redo) - --i; - } - } - return 0; -} - -/* If "var" represents a column variable, then pivot is up (sgn > 0) - * or down (sgn < 0) to a row. The variable is assumed not to be - * unbounded in the specified direction. - * If sgn = 0, then the variable is unbounded in both directions, - * and we pivot with any row we can find. - */ -static int to_row(struct isl_tab *tab, struct isl_tab_var *var, int sign) WARN_UNUSED; -static int to_row(struct isl_tab *tab, struct isl_tab_var *var, int sign) -{ - int r; - unsigned off = 2 + tab->M; - - if (var->is_row) - return 0; - - if (sign == 0) { - for (r = tab->n_redundant; r < tab->n_row; ++r) - if (!isl_int_is_zero(tab->mat->row[r][off+var->index])) - break; - isl_assert(tab->mat->ctx, r < tab->n_row, return -1); - } else { - r = pivot_row(tab, NULL, sign, var->index); - isl_assert(tab->mat->ctx, r >= 0, return -1); - } - - return isl_tab_pivot(tab, r, var->index); -} - -/* Check whether all variables that are marked as non-negative - * also have a non-negative sample value. This function is not - * called from the current code but is useful during debugging. - */ -static void check_table(struct isl_tab *tab) __attribute__ ((unused)); -static void check_table(struct isl_tab *tab) -{ - int i; - - if (tab->empty) - return; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - struct isl_tab_var *var; - var = isl_tab_var_from_row(tab, i); - if (!var->is_nonneg) - continue; - if (tab->M) { - isl_assert(tab->mat->ctx, - !isl_int_is_neg(tab->mat->row[i][2]), abort()); - if (isl_int_is_pos(tab->mat->row[i][2])) - continue; - } - isl_assert(tab->mat->ctx, !isl_int_is_neg(tab->mat->row[i][1]), - abort()); - } -} - -/* Return the sign of the maximal value of "var". - * If the sign is not negative, then on return from this function, - * the sample value will also be non-negative. - * - * If "var" is manifestly unbounded wrt positive values, we are done. - * Otherwise, we pivot the variable up to a row if needed - * Then we continue pivoting down until either - * - no more down pivots can be performed - * - the sample value is positive - * - the variable is pivoted into a manifestly unbounded column - */ -static int sign_of_max(struct isl_tab *tab, struct isl_tab_var *var) -{ - int row, col; - - if (max_is_manifestly_unbounded(tab, var)) - return 1; - if (to_row(tab, var, 1) < 0) - return -2; - while (!isl_int_is_pos(tab->mat->row[var->index][1])) { - find_pivot(tab, var, var, 1, &row, &col); - if (row == -1) - return isl_int_sgn(tab->mat->row[var->index][1]); - if (isl_tab_pivot(tab, row, col) < 0) - return -2; - if (!var->is_row) /* manifestly unbounded */ - return 1; - } - return 1; -} - -int isl_tab_sign_of_max(struct isl_tab *tab, int con) -{ - struct isl_tab_var *var; - - if (!tab) - return -2; - - var = &tab->con[con]; - isl_assert(tab->mat->ctx, !var->is_redundant, return -2); - isl_assert(tab->mat->ctx, !var->is_zero, return -2); - - return sign_of_max(tab, var); -} - -static int row_is_neg(struct isl_tab *tab, int row) -{ - if (!tab->M) - return isl_int_is_neg(tab->mat->row[row][1]); - if (isl_int_is_pos(tab->mat->row[row][2])) - return 0; - if (isl_int_is_neg(tab->mat->row[row][2])) - return 1; - return isl_int_is_neg(tab->mat->row[row][1]); -} - -static int row_sgn(struct isl_tab *tab, int row) -{ - if (!tab->M) - return isl_int_sgn(tab->mat->row[row][1]); - if (!isl_int_is_zero(tab->mat->row[row][2])) - return isl_int_sgn(tab->mat->row[row][2]); - else - return isl_int_sgn(tab->mat->row[row][1]); -} - -/* Perform pivots until the row variable "var" has a non-negative - * sample value or until no more upward pivots can be performed. - * Return the sign of the sample value after the pivots have been - * performed. - */ -static int restore_row(struct isl_tab *tab, struct isl_tab_var *var) -{ - int row, col; - - while (row_is_neg(tab, var->index)) { - find_pivot(tab, var, var, 1, &row, &col); - if (row == -1) - break; - if (isl_tab_pivot(tab, row, col) < 0) - return -2; - if (!var->is_row) /* manifestly unbounded */ - return 1; - } - return row_sgn(tab, var->index); -} - -/* Perform pivots until we are sure that the row variable "var" - * can attain non-negative values. After return from this - * function, "var" is still a row variable, but its sample - * value may not be non-negative, even if the function returns 1. - */ -static int at_least_zero(struct isl_tab *tab, struct isl_tab_var *var) -{ - int row, col; - - while (isl_int_is_neg(tab->mat->row[var->index][1])) { - find_pivot(tab, var, var, 1, &row, &col); - if (row == -1) - break; - if (row == var->index) /* manifestly unbounded */ - return 1; - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - } - return !isl_int_is_neg(tab->mat->row[var->index][1]); -} - -/* Return a negative value if "var" can attain negative values. - * Return a non-negative value otherwise. - * - * If "var" is manifestly unbounded wrt negative values, we are done. - * Otherwise, if var is in a column, we can pivot it down to a row. - * Then we continue pivoting down until either - * - the pivot would result in a manifestly unbounded column - * => we don't perform the pivot, but simply return -1 - * - no more down pivots can be performed - * - the sample value is negative - * If the sample value becomes negative and the variable is supposed - * to be nonnegative, then we undo the last pivot. - * However, if the last pivot has made the pivoting variable - * obviously redundant, then it may have moved to another row. - * In that case we look for upward pivots until we reach a non-negative - * value again. - */ -static int sign_of_min(struct isl_tab *tab, struct isl_tab_var *var) -{ - int row, col; - struct isl_tab_var *pivot_var = NULL; - - if (min_is_manifestly_unbounded(tab, var)) - return -1; - if (!var->is_row) { - col = var->index; - row = pivot_row(tab, NULL, -1, col); - pivot_var = var_from_col(tab, col); - if (isl_tab_pivot(tab, row, col) < 0) - return -2; - if (var->is_redundant) - return 0; - if (isl_int_is_neg(tab->mat->row[var->index][1])) { - if (var->is_nonneg) { - if (!pivot_var->is_redundant && - pivot_var->index == row) { - if (isl_tab_pivot(tab, row, col) < 0) - return -2; - } else - if (restore_row(tab, var) < -1) - return -2; - } - return -1; - } - } - if (var->is_redundant) - return 0; - while (!isl_int_is_neg(tab->mat->row[var->index][1])) { - find_pivot(tab, var, var, -1, &row, &col); - if (row == var->index) - return -1; - if (row == -1) - return isl_int_sgn(tab->mat->row[var->index][1]); - pivot_var = var_from_col(tab, col); - if (isl_tab_pivot(tab, row, col) < 0) - return -2; - if (var->is_redundant) - return 0; - } - if (pivot_var && var->is_nonneg) { - /* pivot back to non-negative value */ - if (!pivot_var->is_redundant && pivot_var->index == row) { - if (isl_tab_pivot(tab, row, col) < 0) - return -2; - } else - if (restore_row(tab, var) < -1) - return -2; - } - return -1; -} - -static int row_at_most_neg_one(struct isl_tab *tab, int row) -{ - if (tab->M) { - if (isl_int_is_pos(tab->mat->row[row][2])) - return 0; - if (isl_int_is_neg(tab->mat->row[row][2])) - return 1; - } - return isl_int_is_neg(tab->mat->row[row][1]) && - isl_int_abs_ge(tab->mat->row[row][1], - tab->mat->row[row][0]); -} - -/* Return 1 if "var" can attain values <= -1. - * Return 0 otherwise. - * - * The sample value of "var" is assumed to be non-negative when the - * the function is called. If 1 is returned then the constraint - * is not redundant and the sample value is made non-negative again before - * the function returns. - */ -int isl_tab_min_at_most_neg_one(struct isl_tab *tab, struct isl_tab_var *var) -{ - int row, col; - struct isl_tab_var *pivot_var; - - if (min_is_manifestly_unbounded(tab, var)) - return 1; - if (!var->is_row) { - col = var->index; - row = pivot_row(tab, NULL, -1, col); - pivot_var = var_from_col(tab, col); - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - if (var->is_redundant) - return 0; - if (row_at_most_neg_one(tab, var->index)) { - if (var->is_nonneg) { - if (!pivot_var->is_redundant && - pivot_var->index == row) { - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - } else - if (restore_row(tab, var) < -1) - return -1; - } - return 1; - } - } - if (var->is_redundant) - return 0; - do { - find_pivot(tab, var, var, -1, &row, &col); - if (row == var->index) { - if (restore_row(tab, var) < -1) - return -1; - return 1; - } - if (row == -1) - return 0; - pivot_var = var_from_col(tab, col); - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - if (var->is_redundant) - return 0; - } while (!row_at_most_neg_one(tab, var->index)); - if (var->is_nonneg) { - /* pivot back to non-negative value */ - if (!pivot_var->is_redundant && pivot_var->index == row) - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - if (restore_row(tab, var) < -1) - return -1; - } - return 1; -} - -/* Return 1 if "var" can attain values >= 1. - * Return 0 otherwise. - */ -static int at_least_one(struct isl_tab *tab, struct isl_tab_var *var) -{ - int row, col; - isl_int *r; - - if (max_is_manifestly_unbounded(tab, var)) - return 1; - if (to_row(tab, var, 1) < 0) - return -1; - r = tab->mat->row[var->index]; - while (isl_int_lt(r[1], r[0])) { - find_pivot(tab, var, var, 1, &row, &col); - if (row == -1) - return isl_int_ge(r[1], r[0]); - if (row == var->index) /* manifestly unbounded */ - return 1; - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - } - return 1; -} - -static void swap_cols(struct isl_tab *tab, int col1, int col2) -{ - int t; - unsigned off = 2 + tab->M; - t = tab->col_var[col1]; - tab->col_var[col1] = tab->col_var[col2]; - tab->col_var[col2] = t; - var_from_col(tab, col1)->index = col1; - var_from_col(tab, col2)->index = col2; - tab->mat = isl_mat_swap_cols(tab->mat, off + col1, off + col2); -} - -/* Mark column with index "col" as representing a zero variable. - * If we may need to undo the operation the column is kept, - * but no longer considered. - * Otherwise, the column is simply removed. - * - * The column may be interchanged with some other column. If it - * is interchanged with a later column, return 1. Otherwise return 0. - * If the columns are checked in order in the calling function, - * then a return value of 1 means that the column with the given - * column number may now contain a different column that - * hasn't been checked yet. - */ -int isl_tab_kill_col(struct isl_tab *tab, int col) -{ - var_from_col(tab, col)->is_zero = 1; - if (tab->need_undo) { - if (isl_tab_push_var(tab, isl_tab_undo_zero, - var_from_col(tab, col)) < 0) - return -1; - if (col != tab->n_dead) - swap_cols(tab, col, tab->n_dead); - tab->n_dead++; - return 0; - } else { - if (col != tab->n_col - 1) - swap_cols(tab, col, tab->n_col - 1); - var_from_col(tab, tab->n_col - 1)->index = -1; - tab->n_col--; - return 1; - } -} - -static int row_is_manifestly_non_integral(struct isl_tab *tab, int row) -{ - unsigned off = 2 + tab->M; - - if (tab->M && !isl_int_eq(tab->mat->row[row][2], - tab->mat->row[row][0])) - return 0; - if (isl_seq_first_non_zero(tab->mat->row[row] + off + tab->n_dead, - tab->n_col - tab->n_dead) != -1) - return 0; - - return !isl_int_is_divisible_by(tab->mat->row[row][1], - tab->mat->row[row][0]); -} - -/* For integer tableaus, check if any of the coordinates are stuck - * at a non-integral value. - */ -static int tab_is_manifestly_empty(struct isl_tab *tab) -{ - int i; - - if (tab->empty) - return 1; - if (tab->rational) - return 0; - - for (i = 0; i < tab->n_var; ++i) { - if (!tab->var[i].is_row) - continue; - if (row_is_manifestly_non_integral(tab, tab->var[i].index)) - return 1; - } - - return 0; -} - -/* Row variable "var" is non-negative and cannot attain any values - * larger than zero. This means that the coefficients of the unrestricted - * column variables are zero and that the coefficients of the non-negative - * column variables are zero or negative. - * Each of the non-negative variables with a negative coefficient can - * then also be written as the negative sum of non-negative variables - * and must therefore also be zero. - */ -static int close_row(struct isl_tab *tab, struct isl_tab_var *var) WARN_UNUSED; -static int close_row(struct isl_tab *tab, struct isl_tab_var *var) -{ - int j; - struct isl_mat *mat = tab->mat; - unsigned off = 2 + tab->M; - - isl_assert(tab->mat->ctx, var->is_nonneg, return -1); - var->is_zero = 1; - if (tab->need_undo) - if (isl_tab_push_var(tab, isl_tab_undo_zero, var) < 0) - return -1; - for (j = tab->n_dead; j < tab->n_col; ++j) { - int recheck; - if (isl_int_is_zero(mat->row[var->index][off + j])) - continue; - isl_assert(tab->mat->ctx, - isl_int_is_neg(mat->row[var->index][off + j]), return -1); - recheck = isl_tab_kill_col(tab, j); - if (recheck < 0) - return -1; - if (recheck) - --j; - } - if (isl_tab_mark_redundant(tab, var->index) < 0) - return -1; - if (tab_is_manifestly_empty(tab) && isl_tab_mark_empty(tab) < 0) - return -1; - return 0; -} - -/* Add a constraint to the tableau and allocate a row for it. - * Return the index into the constraint array "con". - */ -int isl_tab_allocate_con(struct isl_tab *tab) -{ - int r; - - isl_assert(tab->mat->ctx, tab->n_row < tab->mat->n_row, return -1); - isl_assert(tab->mat->ctx, tab->n_con < tab->max_con, return -1); - - r = tab->n_con; - tab->con[r].index = tab->n_row; - tab->con[r].is_row = 1; - tab->con[r].is_nonneg = 0; - tab->con[r].is_zero = 0; - tab->con[r].is_redundant = 0; - tab->con[r].frozen = 0; - tab->con[r].negated = 0; - tab->row_var[tab->n_row] = ~r; - - tab->n_row++; - tab->n_con++; - if (isl_tab_push_var(tab, isl_tab_undo_allocate, &tab->con[r]) < 0) - return -1; - - return r; -} - -/* Add a variable to the tableau and allocate a column for it. - * Return the index into the variable array "var". - */ -int isl_tab_allocate_var(struct isl_tab *tab) -{ - int r; - int i; - unsigned off = 2 + tab->M; - - isl_assert(tab->mat->ctx, tab->n_col < tab->mat->n_col, return -1); - isl_assert(tab->mat->ctx, tab->n_var < tab->max_var, return -1); - - r = tab->n_var; - tab->var[r].index = tab->n_col; - tab->var[r].is_row = 0; - tab->var[r].is_nonneg = 0; - tab->var[r].is_zero = 0; - tab->var[r].is_redundant = 0; - tab->var[r].frozen = 0; - tab->var[r].negated = 0; - tab->col_var[tab->n_col] = r; - - for (i = 0; i < tab->n_row; ++i) - isl_int_set_si(tab->mat->row[i][off + tab->n_col], 0); - - tab->n_var++; - tab->n_col++; - if (isl_tab_push_var(tab, isl_tab_undo_allocate, &tab->var[r]) < 0) - return -1; - - return r; -} - -/* Add a row to the tableau. The row is given as an affine combination - * of the original variables and needs to be expressed in terms of the - * column variables. - * - * We add each term in turn. - * If r = n/d_r is the current sum and we need to add k x, then - * if x is a column variable, we increase the numerator of - * this column by k d_r - * if x = f/d_x is a row variable, then the new representation of r is - * - * n k f d_x/g n + d_r/g k f m/d_r n + m/d_g k f - * --- + --- = ------------------- = ------------------- - * d_r d_r d_r d_x/g m - * - * with g the gcd of d_r and d_x and m the lcm of d_r and d_x. - * - * If tab->M is set, then, internally, each variable x is represented - * as x' - M. We then also need no subtract k d_r from the coefficient of M. - */ -int isl_tab_add_row(struct isl_tab *tab, isl_int *line) -{ - int i; - int r; - isl_int *row; - isl_int a, b; - unsigned off = 2 + tab->M; - - r = isl_tab_allocate_con(tab); - if (r < 0) - return -1; - - isl_int_init(a); - isl_int_init(b); - row = tab->mat->row[tab->con[r].index]; - isl_int_set_si(row[0], 1); - isl_int_set(row[1], line[0]); - isl_seq_clr(row + 2, tab->M + tab->n_col); - for (i = 0; i < tab->n_var; ++i) { - if (tab->var[i].is_zero) - continue; - if (tab->var[i].is_row) { - isl_int_lcm(a, - row[0], tab->mat->row[tab->var[i].index][0]); - isl_int_swap(a, row[0]); - isl_int_divexact(a, row[0], a); - isl_int_divexact(b, - row[0], tab->mat->row[tab->var[i].index][0]); - isl_int_mul(b, b, line[1 + i]); - isl_seq_combine(row + 1, a, row + 1, - b, tab->mat->row[tab->var[i].index] + 1, - 1 + tab->M + tab->n_col); - } else - isl_int_addmul(row[off + tab->var[i].index], - line[1 + i], row[0]); - if (tab->M && i >= tab->n_param && i < tab->n_var - tab->n_div) - isl_int_submul(row[2], line[1 + i], row[0]); - } - isl_seq_normalize(tab->mat->ctx, row, off + tab->n_col); - isl_int_clear(a); - isl_int_clear(b); - - if (tab->row_sign) - tab->row_sign[tab->con[r].index] = isl_tab_row_unknown; - - return r; -} - -static int drop_row(struct isl_tab *tab, int row) -{ - isl_assert(tab->mat->ctx, ~tab->row_var[row] == tab->n_con - 1, return -1); - if (row != tab->n_row - 1) - swap_rows(tab, row, tab->n_row - 1); - tab->n_row--; - tab->n_con--; - return 0; -} - -static int drop_col(struct isl_tab *tab, int col) -{ - isl_assert(tab->mat->ctx, tab->col_var[col] == tab->n_var - 1, return -1); - if (col != tab->n_col - 1) - swap_cols(tab, col, tab->n_col - 1); - tab->n_col--; - tab->n_var--; - return 0; -} - -/* Add inequality "ineq" and check if it conflicts with the - * previously added constraints or if it is obviously redundant. - */ -int isl_tab_add_ineq(struct isl_tab *tab, isl_int *ineq) -{ - int r; - int sgn; - isl_int cst; - - if (!tab) - return -1; - if (tab->bmap) { - struct isl_basic_map *bmap = tab->bmap; - - isl_assert(tab->mat->ctx, tab->n_eq == bmap->n_eq, return -1); - isl_assert(tab->mat->ctx, - tab->n_con == bmap->n_eq + bmap->n_ineq, return -1); - tab->bmap = isl_basic_map_add_ineq(tab->bmap, ineq); - if (isl_tab_push(tab, isl_tab_undo_bmap_ineq) < 0) - return -1; - if (!tab->bmap) - return -1; - } - if (tab->cone) { - isl_int_init(cst); - isl_int_swap(ineq[0], cst); - } - r = isl_tab_add_row(tab, ineq); - if (tab->cone) { - isl_int_swap(ineq[0], cst); - isl_int_clear(cst); - } - if (r < 0) - return -1; - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - return -1; - if (isl_tab_row_is_redundant(tab, tab->con[r].index)) { - if (isl_tab_mark_redundant(tab, tab->con[r].index) < 0) - return -1; - return 0; - } - - sgn = restore_row(tab, &tab->con[r]); - if (sgn < -1) - return -1; - if (sgn < 0) - return isl_tab_mark_empty(tab); - if (tab->con[r].is_row && isl_tab_row_is_redundant(tab, tab->con[r].index)) - if (isl_tab_mark_redundant(tab, tab->con[r].index) < 0) - return -1; - return 0; -} - -/* Pivot a non-negative variable down until it reaches the value zero - * and then pivot the variable into a column position. - */ -static int to_col(struct isl_tab *tab, struct isl_tab_var *var) WARN_UNUSED; -static int to_col(struct isl_tab *tab, struct isl_tab_var *var) -{ - int i; - int row, col; - unsigned off = 2 + tab->M; - - if (!var->is_row) - return 0; - - while (isl_int_is_pos(tab->mat->row[var->index][1])) { - find_pivot(tab, var, NULL, -1, &row, &col); - isl_assert(tab->mat->ctx, row != -1, return -1); - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - if (!var->is_row) - return 0; - } - - for (i = tab->n_dead; i < tab->n_col; ++i) - if (!isl_int_is_zero(tab->mat->row[var->index][off + i])) - break; - - isl_assert(tab->mat->ctx, i < tab->n_col, return -1); - if (isl_tab_pivot(tab, var->index, i) < 0) - return -1; - - return 0; -} - -/* We assume Gaussian elimination has been performed on the equalities. - * The equalities can therefore never conflict. - * Adding the equalities is currently only really useful for a later call - * to isl_tab_ineq_type. - */ -static struct isl_tab *add_eq(struct isl_tab *tab, isl_int *eq) -{ - int i; - int r; - - if (!tab) - return NULL; - r = isl_tab_add_row(tab, eq); - if (r < 0) - goto error; - - r = tab->con[r].index; - i = isl_seq_first_non_zero(tab->mat->row[r] + 2 + tab->M + tab->n_dead, - tab->n_col - tab->n_dead); - isl_assert(tab->mat->ctx, i >= 0, goto error); - i += tab->n_dead; - if (isl_tab_pivot(tab, r, i) < 0) - goto error; - if (isl_tab_kill_col(tab, i) < 0) - goto error; - tab->n_eq++; - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -static int row_is_manifestly_zero(struct isl_tab *tab, int row) -{ - unsigned off = 2 + tab->M; - - if (!isl_int_is_zero(tab->mat->row[row][1])) - return 0; - if (tab->M && !isl_int_is_zero(tab->mat->row[row][2])) - return 0; - return isl_seq_first_non_zero(tab->mat->row[row] + off + tab->n_dead, - tab->n_col - tab->n_dead) == -1; -} - -/* Add an equality that is known to be valid for the given tableau. - */ -int isl_tab_add_valid_eq(struct isl_tab *tab, isl_int *eq) -{ - struct isl_tab_var *var; - int r; - - if (!tab) - return -1; - r = isl_tab_add_row(tab, eq); - if (r < 0) - return -1; - - var = &tab->con[r]; - r = var->index; - if (row_is_manifestly_zero(tab, r)) { - var->is_zero = 1; - if (isl_tab_mark_redundant(tab, r) < 0) - return -1; - return 0; - } - - if (isl_int_is_neg(tab->mat->row[r][1])) { - isl_seq_neg(tab->mat->row[r] + 1, tab->mat->row[r] + 1, - 1 + tab->n_col); - var->negated = 1; - } - var->is_nonneg = 1; - if (to_col(tab, var) < 0) - return -1; - var->is_nonneg = 0; - if (isl_tab_kill_col(tab, var->index) < 0) - return -1; - - return 0; -} - -static int add_zero_row(struct isl_tab *tab) -{ - int r; - isl_int *row; - - r = isl_tab_allocate_con(tab); - if (r < 0) - return -1; - - row = tab->mat->row[tab->con[r].index]; - isl_seq_clr(row + 1, 1 + tab->M + tab->n_col); - isl_int_set_si(row[0], 1); - - return r; -} - -/* Add equality "eq" and check if it conflicts with the - * previously added constraints or if it is obviously redundant. - */ -int isl_tab_add_eq(struct isl_tab *tab, isl_int *eq) -{ - struct isl_tab_undo *snap = NULL; - struct isl_tab_var *var; - int r; - int row; - int sgn; - isl_int cst; - - if (!tab) - return -1; - isl_assert(tab->mat->ctx, !tab->M, return -1); - - if (tab->need_undo) - snap = isl_tab_snap(tab); - - if (tab->cone) { - isl_int_init(cst); - isl_int_swap(eq[0], cst); - } - r = isl_tab_add_row(tab, eq); - if (tab->cone) { - isl_int_swap(eq[0], cst); - isl_int_clear(cst); - } - if (r < 0) - return -1; - - var = &tab->con[r]; - row = var->index; - if (row_is_manifestly_zero(tab, row)) { - if (snap) { - if (isl_tab_rollback(tab, snap) < 0) - return -1; - } else - drop_row(tab, row); - return 0; - } - - if (tab->bmap) { - tab->bmap = isl_basic_map_add_ineq(tab->bmap, eq); - if (isl_tab_push(tab, isl_tab_undo_bmap_ineq) < 0) - return -1; - isl_seq_neg(eq, eq, 1 + tab->n_var); - tab->bmap = isl_basic_map_add_ineq(tab->bmap, eq); - isl_seq_neg(eq, eq, 1 + tab->n_var); - if (isl_tab_push(tab, isl_tab_undo_bmap_ineq) < 0) - return -1; - if (!tab->bmap) - return -1; - if (add_zero_row(tab) < 0) - return -1; - } - - sgn = isl_int_sgn(tab->mat->row[row][1]); - - if (sgn > 0) { - isl_seq_neg(tab->mat->row[row] + 1, tab->mat->row[row] + 1, - 1 + tab->n_col); - var->negated = 1; - sgn = -1; - } - - if (sgn < 0) { - sgn = sign_of_max(tab, var); - if (sgn < -1) - return -1; - if (sgn < 0) { - if (isl_tab_mark_empty(tab) < 0) - return -1; - return 0; - } - } - - var->is_nonneg = 1; - if (to_col(tab, var) < 0) - return -1; - var->is_nonneg = 0; - if (isl_tab_kill_col(tab, var->index) < 0) - return -1; - - return 0; -} - -/* Construct and return an inequality that expresses an upper bound - * on the given div. - * In particular, if the div is given by - * - * d = floor(e/m) - * - * then the inequality expresses - * - * m d <= e - */ -static struct isl_vec *ineq_for_div(struct isl_basic_map *bmap, unsigned div) -{ - unsigned total; - unsigned div_pos; - struct isl_vec *ineq; - - if (!bmap) - return NULL; - - total = isl_basic_map_total_dim(bmap); - div_pos = 1 + total - bmap->n_div + div; - - ineq = isl_vec_alloc(bmap->ctx, 1 + total); - if (!ineq) - return NULL; - - isl_seq_cpy(ineq->el, bmap->div[div] + 1, 1 + total); - isl_int_neg(ineq->el[div_pos], bmap->div[div][0]); - return ineq; -} - -/* For a div d = floor(f/m), add the constraints - * - * f - m d >= 0 - * -(f-(m-1)) + m d >= 0 - * - * Note that the second constraint is the negation of - * - * f - m d >= m - * - * If add_ineq is not NULL, then this function is used - * instead of isl_tab_add_ineq to effectively add the inequalities. - */ -static int add_div_constraints(struct isl_tab *tab, unsigned div, - int (*add_ineq)(void *user, isl_int *), void *user) -{ - unsigned total; - unsigned div_pos; - struct isl_vec *ineq; - - total = isl_basic_map_total_dim(tab->bmap); - div_pos = 1 + total - tab->bmap->n_div + div; - - ineq = ineq_for_div(tab->bmap, div); - if (!ineq) - goto error; - - if (add_ineq) { - if (add_ineq(user, ineq->el) < 0) - goto error; - } else { - if (isl_tab_add_ineq(tab, ineq->el) < 0) - goto error; - } - - isl_seq_neg(ineq->el, tab->bmap->div[div] + 1, 1 + total); - isl_int_set(ineq->el[div_pos], tab->bmap->div[div][0]); - isl_int_add(ineq->el[0], ineq->el[0], ineq->el[div_pos]); - isl_int_sub_ui(ineq->el[0], ineq->el[0], 1); - - if (add_ineq) { - if (add_ineq(user, ineq->el) < 0) - goto error; - } else { - if (isl_tab_add_ineq(tab, ineq->el) < 0) - goto error; - } - - isl_vec_free(ineq); - - return 0; -error: - isl_vec_free(ineq); - return -1; -} - -/* Check whether the div described by "div" is obviously non-negative. - * If we are using a big parameter, then we will encode the div - * as div' = M + div, which is always non-negative. - * Otherwise, we check whether div is a non-negative affine combination - * of non-negative variables. - */ -static int div_is_nonneg(struct isl_tab *tab, __isl_keep isl_vec *div) -{ - int i; - - if (tab->M) - return 1; - - if (isl_int_is_neg(div->el[1])) - return 0; - - for (i = 0; i < tab->n_var; ++i) { - if (isl_int_is_neg(div->el[2 + i])) - return 0; - if (isl_int_is_zero(div->el[2 + i])) - continue; - if (!tab->var[i].is_nonneg) - return 0; - } - - return 1; -} - -/* Add an extra div, prescribed by "div" to the tableau and - * the associated bmap (which is assumed to be non-NULL). - * - * If add_ineq is not NULL, then this function is used instead - * of isl_tab_add_ineq to add the div constraints. - * This complication is needed because the code in isl_tab_pip - * wants to perform some extra processing when an inequality - * is added to the tableau. - */ -int isl_tab_add_div(struct isl_tab *tab, __isl_keep isl_vec *div, - int (*add_ineq)(void *user, isl_int *), void *user) -{ - int r; - int k; - int nonneg; - - if (!tab || !div) - return -1; - - isl_assert(tab->mat->ctx, tab->bmap, return -1); - - nonneg = div_is_nonneg(tab, div); - - if (isl_tab_extend_cons(tab, 3) < 0) - return -1; - if (isl_tab_extend_vars(tab, 1) < 0) - return -1; - r = isl_tab_allocate_var(tab); - if (r < 0) - return -1; - - if (nonneg) - tab->var[r].is_nonneg = 1; - - tab->bmap = isl_basic_map_extend_dim(tab->bmap, - isl_basic_map_get_dim(tab->bmap), 1, 0, 2); - k = isl_basic_map_alloc_div(tab->bmap); - if (k < 0) - return -1; - isl_seq_cpy(tab->bmap->div[k], div->el, div->size); - if (isl_tab_push(tab, isl_tab_undo_bmap_div) < 0) - return -1; - - if (add_div_constraints(tab, k, add_ineq, user) < 0) - return -1; - - return r; -} - -struct isl_tab *isl_tab_from_basic_map(struct isl_basic_map *bmap) -{ - int i; - struct isl_tab *tab; - - if (!bmap) - return NULL; - tab = isl_tab_alloc(bmap->ctx, - isl_basic_map_total_dim(bmap) + bmap->n_ineq + 1, - isl_basic_map_total_dim(bmap), 0); - if (!tab) - return NULL; - tab->rational = ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL); - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) { - if (isl_tab_mark_empty(tab) < 0) - goto error; - return tab; - } - for (i = 0; i < bmap->n_eq; ++i) { - tab = add_eq(tab, bmap->eq[i]); - if (!tab) - return tab; - } - for (i = 0; i < bmap->n_ineq; ++i) { - if (isl_tab_add_ineq(tab, bmap->ineq[i]) < 0) - goto error; - if (tab->empty) - return tab; - } - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -struct isl_tab *isl_tab_from_basic_set(struct isl_basic_set *bset) -{ - return isl_tab_from_basic_map((struct isl_basic_map *)bset); -} - -/* Construct a tableau corresponding to the recession cone of "bset". - */ -struct isl_tab *isl_tab_from_recession_cone(__isl_keep isl_basic_set *bset, - int parametric) -{ - isl_int cst; - int i; - struct isl_tab *tab; - unsigned offset = 0; - - if (!bset) - return NULL; - if (parametric) - offset = isl_basic_set_dim(bset, isl_dim_param); - tab = isl_tab_alloc(bset->ctx, bset->n_eq + bset->n_ineq, - isl_basic_set_total_dim(bset) - offset, 0); - if (!tab) - return NULL; - tab->rational = ISL_F_ISSET(bset, ISL_BASIC_SET_RATIONAL); - tab->cone = 1; - - isl_int_init(cst); - for (i = 0; i < bset->n_eq; ++i) { - isl_int_swap(bset->eq[i][offset], cst); - if (offset > 0) { - if (isl_tab_add_eq(tab, bset->eq[i] + offset) < 0) - goto error; - } else - tab = add_eq(tab, bset->eq[i]); - isl_int_swap(bset->eq[i][offset], cst); - if (!tab) - goto done; - } - for (i = 0; i < bset->n_ineq; ++i) { - int r; - isl_int_swap(bset->ineq[i][offset], cst); - r = isl_tab_add_row(tab, bset->ineq[i] + offset); - isl_int_swap(bset->ineq[i][offset], cst); - if (r < 0) - goto error; - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - goto error; - } -done: - isl_int_clear(cst); - return tab; -error: - isl_int_clear(cst); - isl_tab_free(tab); - return NULL; -} - -/* Assuming "tab" is the tableau of a cone, check if the cone is - * bounded, i.e., if it is empty or only contains the origin. - */ -int isl_tab_cone_is_bounded(struct isl_tab *tab) -{ - int i; - - if (!tab) - return -1; - if (tab->empty) - return 1; - if (tab->n_dead == tab->n_col) - return 1; - - for (;;) { - for (i = tab->n_redundant; i < tab->n_row; ++i) { - struct isl_tab_var *var; - int sgn; - var = isl_tab_var_from_row(tab, i); - if (!var->is_nonneg) - continue; - sgn = sign_of_max(tab, var); - if (sgn < -1) - return -1; - if (sgn != 0) - return 0; - if (close_row(tab, var) < 0) - return -1; - break; - } - if (tab->n_dead == tab->n_col) - return 1; - if (i == tab->n_row) - return 0; - } -} - -int isl_tab_sample_is_integer(struct isl_tab *tab) -{ - int i; - - if (!tab) - return -1; - - for (i = 0; i < tab->n_var; ++i) { - int row; - if (!tab->var[i].is_row) - continue; - row = tab->var[i].index; - if (!isl_int_is_divisible_by(tab->mat->row[row][1], - tab->mat->row[row][0])) - return 0; - } - return 1; -} - -static struct isl_vec *extract_integer_sample(struct isl_tab *tab) -{ - int i; - struct isl_vec *vec; - - vec = isl_vec_alloc(tab->mat->ctx, 1 + tab->n_var); - if (!vec) - return NULL; - - isl_int_set_si(vec->block.data[0], 1); - for (i = 0; i < tab->n_var; ++i) { - if (!tab->var[i].is_row) - isl_int_set_si(vec->block.data[1 + i], 0); - else { - int row = tab->var[i].index; - isl_int_divexact(vec->block.data[1 + i], - tab->mat->row[row][1], tab->mat->row[row][0]); - } - } - - return vec; -} - -struct isl_vec *isl_tab_get_sample_value(struct isl_tab *tab) -{ - int i; - struct isl_vec *vec; - isl_int m; - - if (!tab) - return NULL; - - vec = isl_vec_alloc(tab->mat->ctx, 1 + tab->n_var); - if (!vec) - return NULL; - - isl_int_init(m); - - isl_int_set_si(vec->block.data[0], 1); - for (i = 0; i < tab->n_var; ++i) { - int row; - if (!tab->var[i].is_row) { - isl_int_set_si(vec->block.data[1 + i], 0); - continue; - } - row = tab->var[i].index; - isl_int_gcd(m, vec->block.data[0], tab->mat->row[row][0]); - isl_int_divexact(m, tab->mat->row[row][0], m); - isl_seq_scale(vec->block.data, vec->block.data, m, 1 + i); - isl_int_divexact(m, vec->block.data[0], tab->mat->row[row][0]); - isl_int_mul(vec->block.data[1 + i], m, tab->mat->row[row][1]); - } - vec = isl_vec_normalize(vec); - - isl_int_clear(m); - return vec; -} - -/* Update "bmap" based on the results of the tableau "tab". - * In particular, implicit equalities are made explicit, redundant constraints - * are removed and if the sample value happens to be integer, it is stored - * in "bmap" (unless "bmap" already had an integer sample). - * - * The tableau is assumed to have been created from "bmap" using - * isl_tab_from_basic_map. - */ -struct isl_basic_map *isl_basic_map_update_from_tab(struct isl_basic_map *bmap, - struct isl_tab *tab) -{ - int i; - unsigned n_eq; - - if (!bmap) - return NULL; - if (!tab) - return bmap; - - n_eq = tab->n_eq; - if (tab->empty) - bmap = isl_basic_map_set_to_empty(bmap); - else - for (i = bmap->n_ineq - 1; i >= 0; --i) { - if (isl_tab_is_equality(tab, n_eq + i)) - isl_basic_map_inequality_to_equality(bmap, i); - else if (isl_tab_is_redundant(tab, n_eq + i)) - isl_basic_map_drop_inequality(bmap, i); - } - if (bmap->n_eq != n_eq) - isl_basic_map_gauss(bmap, NULL); - if (!tab->rational && - !bmap->sample && isl_tab_sample_is_integer(tab)) - bmap->sample = extract_integer_sample(tab); - return bmap; -} - -struct isl_basic_set *isl_basic_set_update_from_tab(struct isl_basic_set *bset, - struct isl_tab *tab) -{ - return (struct isl_basic_set *)isl_basic_map_update_from_tab( - (struct isl_basic_map *)bset, tab); -} - -/* Given a non-negative variable "var", add a new non-negative variable - * that is the opposite of "var", ensuring that var can only attain the - * value zero. - * If var = n/d is a row variable, then the new variable = -n/d. - * If var is a column variables, then the new variable = -var. - * If the new variable cannot attain non-negative values, then - * the resulting tableau is empty. - * Otherwise, we know the value will be zero and we close the row. - */ -static int cut_to_hyperplane(struct isl_tab *tab, struct isl_tab_var *var) -{ - unsigned r; - isl_int *row; - int sgn; - unsigned off = 2 + tab->M; - - if (var->is_zero) - return 0; - isl_assert(tab->mat->ctx, !var->is_redundant, return -1); - isl_assert(tab->mat->ctx, var->is_nonneg, return -1); - - if (isl_tab_extend_cons(tab, 1) < 0) - return -1; - - r = tab->n_con; - tab->con[r].index = tab->n_row; - tab->con[r].is_row = 1; - tab->con[r].is_nonneg = 0; - tab->con[r].is_zero = 0; - tab->con[r].is_redundant = 0; - tab->con[r].frozen = 0; - tab->con[r].negated = 0; - tab->row_var[tab->n_row] = ~r; - row = tab->mat->row[tab->n_row]; - - if (var->is_row) { - isl_int_set(row[0], tab->mat->row[var->index][0]); - isl_seq_neg(row + 1, - tab->mat->row[var->index] + 1, 1 + tab->n_col); - } else { - isl_int_set_si(row[0], 1); - isl_seq_clr(row + 1, 1 + tab->n_col); - isl_int_set_si(row[off + var->index], -1); - } - - tab->n_row++; - tab->n_con++; - if (isl_tab_push_var(tab, isl_tab_undo_allocate, &tab->con[r]) < 0) - return -1; - - sgn = sign_of_max(tab, &tab->con[r]); - if (sgn < -1) - return -1; - if (sgn < 0) { - if (isl_tab_mark_empty(tab) < 0) - return -1; - return 0; - } - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - return -1; - /* sgn == 0 */ - if (close_row(tab, &tab->con[r]) < 0) - return -1; - - return 0; -} - -/* Given a tableau "tab" and an inequality constraint "con" of the tableau, - * relax the inequality by one. That is, the inequality r >= 0 is replaced - * by r' = r + 1 >= 0. - * If r is a row variable, we simply increase the constant term by one - * (taking into account the denominator). - * If r is a column variable, then we need to modify each row that - * refers to r = r' - 1 by substituting this equality, effectively - * subtracting the coefficient of the column from the constant. - * We should only do this if the minimum is manifestly unbounded, - * however. Otherwise, we may end up with negative sample values - * for non-negative variables. - * So, if r is a column variable with a minimum that is not - * manifestly unbounded, then we need to move it to a row. - * However, the sample value of this row may be negative, - * even after the relaxation, so we need to restore it. - * We therefore prefer to pivot a column up to a row, if possible. - */ -struct isl_tab *isl_tab_relax(struct isl_tab *tab, int con) -{ - struct isl_tab_var *var; - unsigned off = 2 + tab->M; - - if (!tab) - return NULL; - - var = &tab->con[con]; - - if (!var->is_row && !max_is_manifestly_unbounded(tab, var)) - if (to_row(tab, var, 1) < 0) - goto error; - if (!var->is_row && !min_is_manifestly_unbounded(tab, var)) - if (to_row(tab, var, -1) < 0) - goto error; - - if (var->is_row) { - isl_int_add(tab->mat->row[var->index][1], - tab->mat->row[var->index][1], tab->mat->row[var->index][0]); - if (restore_row(tab, var) < 0) - goto error; - } else { - int i; - - for (i = 0; i < tab->n_row; ++i) { - if (isl_int_is_zero(tab->mat->row[i][off + var->index])) - continue; - isl_int_sub(tab->mat->row[i][1], tab->mat->row[i][1], - tab->mat->row[i][off + var->index]); - } - - } - - if (isl_tab_push_var(tab, isl_tab_undo_relax, var) < 0) - goto error; - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -int isl_tab_select_facet(struct isl_tab *tab, int con) -{ - if (!tab) - return -1; - - return cut_to_hyperplane(tab, &tab->con[con]); -} - -static int may_be_equality(struct isl_tab *tab, int row) -{ - return tab->rational ? isl_int_is_zero(tab->mat->row[row][1]) - : isl_int_lt(tab->mat->row[row][1], - tab->mat->row[row][0]); -} - -/* Check for (near) equalities among the constraints. - * A constraint is an equality if it is non-negative and if - * its maximal value is either - * - zero (in case of rational tableaus), or - * - strictly less than 1 (in case of integer tableaus) - * - * We first mark all non-redundant and non-dead variables that - * are not frozen and not obviously not an equality. - * Then we iterate over all marked variables if they can attain - * any values larger than zero or at least one. - * If the maximal value is zero, we mark any column variables - * that appear in the row as being zero and mark the row as being redundant. - * Otherwise, if the maximal value is strictly less than one (and the - * tableau is integer), then we restrict the value to being zero - * by adding an opposite non-negative variable. - */ -int isl_tab_detect_implicit_equalities(struct isl_tab *tab) -{ - int i; - unsigned n_marked; - - if (!tab) - return -1; - if (tab->empty) - return 0; - if (tab->n_dead == tab->n_col) - return 0; - - n_marked = 0; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - struct isl_tab_var *var = isl_tab_var_from_row(tab, i); - var->marked = !var->frozen && var->is_nonneg && - may_be_equality(tab, i); - if (var->marked) - n_marked++; - } - for (i = tab->n_dead; i < tab->n_col; ++i) { - struct isl_tab_var *var = var_from_col(tab, i); - var->marked = !var->frozen && var->is_nonneg; - if (var->marked) - n_marked++; - } - while (n_marked) { - struct isl_tab_var *var; - int sgn; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - var = isl_tab_var_from_row(tab, i); - if (var->marked) - break; - } - if (i == tab->n_row) { - for (i = tab->n_dead; i < tab->n_col; ++i) { - var = var_from_col(tab, i); - if (var->marked) - break; - } - if (i == tab->n_col) - break; - } - var->marked = 0; - n_marked--; - sgn = sign_of_max(tab, var); - if (sgn < 0) - return -1; - if (sgn == 0) { - if (close_row(tab, var) < 0) - return -1; - } else if (!tab->rational && !at_least_one(tab, var)) { - if (cut_to_hyperplane(tab, var) < 0) - return -1; - return isl_tab_detect_implicit_equalities(tab); - } - for (i = tab->n_redundant; i < tab->n_row; ++i) { - var = isl_tab_var_from_row(tab, i); - if (!var->marked) - continue; - if (may_be_equality(tab, i)) - continue; - var->marked = 0; - n_marked--; - } - } - - return 0; -} - -static int con_is_redundant(struct isl_tab *tab, struct isl_tab_var *var) -{ - if (!tab) - return -1; - if (tab->rational) { - int sgn = sign_of_min(tab, var); - if (sgn < -1) - return -1; - return sgn >= 0; - } else { - int irred = isl_tab_min_at_most_neg_one(tab, var); - if (irred < 0) - return -1; - return !irred; - } -} - -/* Check for (near) redundant constraints. - * A constraint is redundant if it is non-negative and if - * its minimal value (temporarily ignoring the non-negativity) is either - * - zero (in case of rational tableaus), or - * - strictly larger than -1 (in case of integer tableaus) - * - * We first mark all non-redundant and non-dead variables that - * are not frozen and not obviously negatively unbounded. - * Then we iterate over all marked variables if they can attain - * any values smaller than zero or at most negative one. - * If not, we mark the row as being redundant (assuming it hasn't - * been detected as being obviously redundant in the mean time). - */ -int isl_tab_detect_redundant(struct isl_tab *tab) -{ - int i; - unsigned n_marked; - - if (!tab) - return -1; - if (tab->empty) - return 0; - if (tab->n_redundant == tab->n_row) - return 0; - - n_marked = 0; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - struct isl_tab_var *var = isl_tab_var_from_row(tab, i); - var->marked = !var->frozen && var->is_nonneg; - if (var->marked) - n_marked++; - } - for (i = tab->n_dead; i < tab->n_col; ++i) { - struct isl_tab_var *var = var_from_col(tab, i); - var->marked = !var->frozen && var->is_nonneg && - !min_is_manifestly_unbounded(tab, var); - if (var->marked) - n_marked++; - } - while (n_marked) { - struct isl_tab_var *var; - int red; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - var = isl_tab_var_from_row(tab, i); - if (var->marked) - break; - } - if (i == tab->n_row) { - for (i = tab->n_dead; i < tab->n_col; ++i) { - var = var_from_col(tab, i); - if (var->marked) - break; - } - if (i == tab->n_col) - break; - } - var->marked = 0; - n_marked--; - red = con_is_redundant(tab, var); - if (red < 0) - return -1; - if (red && !var->is_redundant) - if (isl_tab_mark_redundant(tab, var->index) < 0) - return -1; - for (i = tab->n_dead; i < tab->n_col; ++i) { - var = var_from_col(tab, i); - if (!var->marked) - continue; - if (!min_is_manifestly_unbounded(tab, var)) - continue; - var->marked = 0; - n_marked--; - } - } - - return 0; -} - -int isl_tab_is_equality(struct isl_tab *tab, int con) -{ - int row; - unsigned off; - - if (!tab) - return -1; - if (tab->con[con].is_zero) - return 1; - if (tab->con[con].is_redundant) - return 0; - if (!tab->con[con].is_row) - return tab->con[con].index < tab->n_dead; - - row = tab->con[con].index; - - off = 2 + tab->M; - return isl_int_is_zero(tab->mat->row[row][1]) && - (!tab->M || isl_int_is_zero(tab->mat->row[row][2])) && - isl_seq_first_non_zero(tab->mat->row[row] + off + tab->n_dead, - tab->n_col - tab->n_dead) == -1; -} - -/* Return the minimal value of the affine expression "f" with denominator - * "denom" in *opt, *opt_denom, assuming the tableau is not empty and - * the expression cannot attain arbitrarily small values. - * If opt_denom is NULL, then *opt is rounded up to the nearest integer. - * The return value reflects the nature of the result (empty, unbounded, - * minimal value returned in *opt). - */ -enum isl_lp_result isl_tab_min(struct isl_tab *tab, - isl_int *f, isl_int denom, isl_int *opt, isl_int *opt_denom, - unsigned flags) -{ - int r; - enum isl_lp_result res = isl_lp_ok; - struct isl_tab_var *var; - struct isl_tab_undo *snap; - - if (!tab) - return isl_lp_error; - - if (tab->empty) - return isl_lp_empty; - - snap = isl_tab_snap(tab); - r = isl_tab_add_row(tab, f); - if (r < 0) - return isl_lp_error; - var = &tab->con[r]; - for (;;) { - int row, col; - find_pivot(tab, var, var, -1, &row, &col); - if (row == var->index) { - res = isl_lp_unbounded; - break; - } - if (row == -1) - break; - if (isl_tab_pivot(tab, row, col) < 0) - return isl_lp_error; - } - isl_int_mul(tab->mat->row[var->index][0], - tab->mat->row[var->index][0], denom); - if (ISL_FL_ISSET(flags, ISL_TAB_SAVE_DUAL)) { - int i; - - isl_vec_free(tab->dual); - tab->dual = isl_vec_alloc(tab->mat->ctx, 1 + tab->n_con); - if (!tab->dual) - return isl_lp_error; - isl_int_set(tab->dual->el[0], tab->mat->row[var->index][0]); - for (i = 0; i < tab->n_con; ++i) { - int pos; - if (tab->con[i].is_row) { - isl_int_set_si(tab->dual->el[1 + i], 0); - continue; - } - pos = 2 + tab->M + tab->con[i].index; - if (tab->con[i].negated) - isl_int_neg(tab->dual->el[1 + i], - tab->mat->row[var->index][pos]); - else - isl_int_set(tab->dual->el[1 + i], - tab->mat->row[var->index][pos]); - } - } - if (opt && res == isl_lp_ok) { - if (opt_denom) { - isl_int_set(*opt, tab->mat->row[var->index][1]); - isl_int_set(*opt_denom, tab->mat->row[var->index][0]); - } else - isl_int_cdiv_q(*opt, tab->mat->row[var->index][1], - tab->mat->row[var->index][0]); - } - if (isl_tab_rollback(tab, snap) < 0) - return isl_lp_error; - return res; -} - -int isl_tab_is_redundant(struct isl_tab *tab, int con) -{ - if (!tab) - return -1; - if (tab->con[con].is_zero) - return 0; - if (tab->con[con].is_redundant) - return 1; - return tab->con[con].is_row && tab->con[con].index < tab->n_redundant; -} - -/* Take a snapshot of the tableau that can be restored by s call to - * isl_tab_rollback. - */ -struct isl_tab_undo *isl_tab_snap(struct isl_tab *tab) -{ - if (!tab) - return NULL; - tab->need_undo = 1; - return tab->top; -} - -/* Undo the operation performed by isl_tab_relax. - */ -static int unrelax(struct isl_tab *tab, struct isl_tab_var *var) WARN_UNUSED; -static int unrelax(struct isl_tab *tab, struct isl_tab_var *var) -{ - unsigned off = 2 + tab->M; - - if (!var->is_row && !max_is_manifestly_unbounded(tab, var)) - if (to_row(tab, var, 1) < 0) - return -1; - - if (var->is_row) { - isl_int_sub(tab->mat->row[var->index][1], - tab->mat->row[var->index][1], tab->mat->row[var->index][0]); - if (var->is_nonneg) { - int sgn = restore_row(tab, var); - isl_assert(tab->mat->ctx, sgn >= 0, return -1); - } - } else { - int i; - - for (i = 0; i < tab->n_row; ++i) { - if (isl_int_is_zero(tab->mat->row[i][off + var->index])) - continue; - isl_int_add(tab->mat->row[i][1], tab->mat->row[i][1], - tab->mat->row[i][off + var->index]); - } - - } - - return 0; -} - -static int perform_undo_var(struct isl_tab *tab, struct isl_tab_undo *undo) WARN_UNUSED; -static int perform_undo_var(struct isl_tab *tab, struct isl_tab_undo *undo) -{ - struct isl_tab_var *var = var_from_index(tab, undo->u.var_index); - switch (undo->type) { - case isl_tab_undo_nonneg: - var->is_nonneg = 0; - break; - case isl_tab_undo_redundant: - var->is_redundant = 0; - tab->n_redundant--; - restore_row(tab, isl_tab_var_from_row(tab, tab->n_redundant)); - break; - case isl_tab_undo_freeze: - var->frozen = 0; - break; - case isl_tab_undo_zero: - var->is_zero = 0; - if (!var->is_row) - tab->n_dead--; - break; - case isl_tab_undo_allocate: - if (undo->u.var_index >= 0) { - isl_assert(tab->mat->ctx, !var->is_row, return -1); - drop_col(tab, var->index); - break; - } - if (!var->is_row) { - if (!max_is_manifestly_unbounded(tab, var)) { - if (to_row(tab, var, 1) < 0) - return -1; - } else if (!min_is_manifestly_unbounded(tab, var)) { - if (to_row(tab, var, -1) < 0) - return -1; - } else - if (to_row(tab, var, 0) < 0) - return -1; - } - drop_row(tab, var->index); - break; - case isl_tab_undo_relax: - return unrelax(tab, var); - default: - isl_die(tab->mat->ctx, isl_error_internal, - "perform_undo_var called on invalid undo record", - return -1); - } - - return 0; -} - -/* Restore the tableau to the state where the basic variables - * are those in "col_var". - * We first construct a list of variables that are currently in - * the basis, but shouldn't. Then we iterate over all variables - * that should be in the basis and for each one that is currently - * not in the basis, we exchange it with one of the elements of the - * list constructed before. - * We can always find an appropriate variable to pivot with because - * the current basis is mapped to the old basis by a non-singular - * matrix and so we can never end up with a zero row. - */ -static int restore_basis(struct isl_tab *tab, int *col_var) -{ - int i, j; - int n_extra = 0; - int *extra = NULL; /* current columns that contain bad stuff */ - unsigned off = 2 + tab->M; - - extra = isl_alloc_array(tab->mat->ctx, int, tab->n_col); - if (!extra) - goto error; - for (i = 0; i < tab->n_col; ++i) { - for (j = 0; j < tab->n_col; ++j) - if (tab->col_var[i] == col_var[j]) - break; - if (j < tab->n_col) - continue; - extra[n_extra++] = i; - } - for (i = 0; i < tab->n_col && n_extra > 0; ++i) { - struct isl_tab_var *var; - int row; - - for (j = 0; j < tab->n_col; ++j) - if (col_var[i] == tab->col_var[j]) - break; - if (j < tab->n_col) - continue; - var = var_from_index(tab, col_var[i]); - row = var->index; - for (j = 0; j < n_extra; ++j) - if (!isl_int_is_zero(tab->mat->row[row][off+extra[j]])) - break; - isl_assert(tab->mat->ctx, j < n_extra, goto error); - if (isl_tab_pivot(tab, row, extra[j]) < 0) - goto error; - extra[j] = extra[--n_extra]; - } - - free(extra); - return 0; -error: - free(extra); - return -1; -} - -/* Remove all samples with index n or greater, i.e., those samples - * that were added since we saved this number of samples in - * isl_tab_save_samples. - */ -static void drop_samples_since(struct isl_tab *tab, int n) -{ - int i; - - for (i = tab->n_sample - 1; i >= 0 && tab->n_sample > n; --i) { - if (tab->sample_index[i] < n) - continue; - - if (i != tab->n_sample - 1) { - int t = tab->sample_index[tab->n_sample-1]; - tab->sample_index[tab->n_sample-1] = tab->sample_index[i]; - tab->sample_index[i] = t; - isl_mat_swap_rows(tab->samples, tab->n_sample-1, i); - } - tab->n_sample--; - } -} - -static int perform_undo(struct isl_tab *tab, struct isl_tab_undo *undo) WARN_UNUSED; -static int perform_undo(struct isl_tab *tab, struct isl_tab_undo *undo) -{ - switch (undo->type) { - case isl_tab_undo_empty: - tab->empty = 0; - break; - case isl_tab_undo_nonneg: - case isl_tab_undo_redundant: - case isl_tab_undo_freeze: - case isl_tab_undo_zero: - case isl_tab_undo_allocate: - case isl_tab_undo_relax: - return perform_undo_var(tab, undo); - case isl_tab_undo_bmap_eq: - return isl_basic_map_free_equality(tab->bmap, 1); - case isl_tab_undo_bmap_ineq: - return isl_basic_map_free_inequality(tab->bmap, 1); - case isl_tab_undo_bmap_div: - if (isl_basic_map_free_div(tab->bmap, 1) < 0) - return -1; - if (tab->samples) - tab->samples->n_col--; - break; - case isl_tab_undo_saved_basis: - if (restore_basis(tab, undo->u.col_var) < 0) - return -1; - break; - case isl_tab_undo_drop_sample: - tab->n_outside--; - break; - case isl_tab_undo_saved_samples: - drop_samples_since(tab, undo->u.n); - break; - case isl_tab_undo_callback: - return undo->u.callback->run(undo->u.callback); - default: - isl_assert(tab->mat->ctx, 0, return -1); - } - return 0; -} - -/* Return the tableau to the state it was in when the snapshot "snap" - * was taken. - */ -int isl_tab_rollback(struct isl_tab *tab, struct isl_tab_undo *snap) -{ - struct isl_tab_undo *undo, *next; - - if (!tab) - return -1; - - tab->in_undo = 1; - for (undo = tab->top; undo && undo != &tab->bottom; undo = next) { - next = undo->next; - if (undo == snap) - break; - if (perform_undo(tab, undo) < 0) { - tab->top = undo; - free_undo(tab); - tab->in_undo = 0; - return -1; - } - free_undo_record(undo); - } - tab->in_undo = 0; - tab->top = undo; - if (!undo) - return -1; - return 0; -} - -/* The given row "row" represents an inequality violated by all - * points in the tableau. Check for some special cases of such - * separating constraints. - * In particular, if the row has been reduced to the constant -1, - * then we know the inequality is adjacent (but opposite) to - * an equality in the tableau. - * If the row has been reduced to r = c*(-1 -r'), with r' an inequality - * of the tableau and c a positive constant, then the inequality - * is adjacent (but opposite) to the inequality r'. - */ -static enum isl_ineq_type separation_type(struct isl_tab *tab, unsigned row) -{ - int pos; - unsigned off = 2 + tab->M; - - if (tab->rational) - return isl_ineq_separate; - - if (!isl_int_is_one(tab->mat->row[row][0])) - return isl_ineq_separate; - - pos = isl_seq_first_non_zero(tab->mat->row[row] + off + tab->n_dead, - tab->n_col - tab->n_dead); - if (pos == -1) { - if (isl_int_is_negone(tab->mat->row[row][1])) - return isl_ineq_adj_eq; - else - return isl_ineq_separate; - } - - if (!isl_int_eq(tab->mat->row[row][1], - tab->mat->row[row][off + tab->n_dead + pos])) - return isl_ineq_separate; - - pos = isl_seq_first_non_zero( - tab->mat->row[row] + off + tab->n_dead + pos + 1, - tab->n_col - tab->n_dead - pos - 1); - - return pos == -1 ? isl_ineq_adj_ineq : isl_ineq_separate; -} - -/* Check the effect of inequality "ineq" on the tableau "tab". - * The result may be - * isl_ineq_redundant: satisfied by all points in the tableau - * isl_ineq_separate: satisfied by no point in the tableau - * isl_ineq_cut: satisfied by some by not all points - * isl_ineq_adj_eq: adjacent to an equality - * isl_ineq_adj_ineq: adjacent to an inequality. - */ -enum isl_ineq_type isl_tab_ineq_type(struct isl_tab *tab, isl_int *ineq) -{ - enum isl_ineq_type type = isl_ineq_error; - struct isl_tab_undo *snap = NULL; - int con; - int row; - - if (!tab) - return isl_ineq_error; - - if (isl_tab_extend_cons(tab, 1) < 0) - return isl_ineq_error; - - snap = isl_tab_snap(tab); - - con = isl_tab_add_row(tab, ineq); - if (con < 0) - goto error; - - row = tab->con[con].index; - if (isl_tab_row_is_redundant(tab, row)) - type = isl_ineq_redundant; - else if (isl_int_is_neg(tab->mat->row[row][1]) && - (tab->rational || - isl_int_abs_ge(tab->mat->row[row][1], - tab->mat->row[row][0]))) { - int nonneg = at_least_zero(tab, &tab->con[con]); - if (nonneg < 0) - goto error; - if (nonneg) - type = isl_ineq_cut; - else - type = separation_type(tab, row); - } else { - int red = con_is_redundant(tab, &tab->con[con]); - if (red < 0) - goto error; - if (!red) - type = isl_ineq_cut; - else - type = isl_ineq_redundant; - } - - if (isl_tab_rollback(tab, snap)) - return isl_ineq_error; - return type; -error: - return isl_ineq_error; -} - -int isl_tab_track_bmap(struct isl_tab *tab, __isl_take isl_basic_map *bmap) -{ - if (!tab || !bmap) - goto error; - - isl_assert(tab->mat->ctx, tab->n_eq == bmap->n_eq, return -1); - isl_assert(tab->mat->ctx, - tab->n_con == bmap->n_eq + bmap->n_ineq, return -1); - - tab->bmap = bmap; - - return 0; -error: - isl_basic_map_free(bmap); - return -1; -} - -int isl_tab_track_bset(struct isl_tab *tab, __isl_take isl_basic_set *bset) -{ - return isl_tab_track_bmap(tab, (isl_basic_map *)bset); -} - -__isl_keep isl_basic_set *isl_tab_peek_bset(struct isl_tab *tab) -{ - if (!tab) - return NULL; - - return (isl_basic_set *)tab->bmap; -} - -static void isl_tab_print_internal(__isl_keep struct isl_tab *tab, - FILE *out, int indent) -{ - unsigned r, c; - int i; - - if (!tab) { - fprintf(out, "%*snull tab\n", indent, ""); - return; - } - fprintf(out, "%*sn_redundant: %d, n_dead: %d", indent, "", - tab->n_redundant, tab->n_dead); - if (tab->rational) - fprintf(out, ", rational"); - if (tab->empty) - fprintf(out, ", empty"); - fprintf(out, "\n"); - fprintf(out, "%*s[", indent, ""); - for (i = 0; i < tab->n_var; ++i) { - if (i) - fprintf(out, (i == tab->n_param || - i == tab->n_var - tab->n_div) ? "; " - : ", "); - fprintf(out, "%c%d%s", tab->var[i].is_row ? 'r' : 'c', - tab->var[i].index, - tab->var[i].is_zero ? " [=0]" : - tab->var[i].is_redundant ? " [R]" : ""); - } - fprintf(out, "]\n"); - fprintf(out, "%*s[", indent, ""); - for (i = 0; i < tab->n_con; ++i) { - if (i) - fprintf(out, ", "); - fprintf(out, "%c%d%s", tab->con[i].is_row ? 'r' : 'c', - tab->con[i].index, - tab->con[i].is_zero ? " [=0]" : - tab->con[i].is_redundant ? " [R]" : ""); - } - fprintf(out, "]\n"); - fprintf(out, "%*s[", indent, ""); - for (i = 0; i < tab->n_row; ++i) { - const char *sign = ""; - if (i) - fprintf(out, ", "); - if (tab->row_sign) { - if (tab->row_sign[i] == isl_tab_row_unknown) - sign = "?"; - else if (tab->row_sign[i] == isl_tab_row_neg) - sign = "-"; - else if (tab->row_sign[i] == isl_tab_row_pos) - sign = "+"; - else - sign = "+-"; - } - fprintf(out, "r%d: %d%s%s", i, tab->row_var[i], - isl_tab_var_from_row(tab, i)->is_nonneg ? " [>=0]" : "", sign); - } - fprintf(out, "]\n"); - fprintf(out, "%*s[", indent, ""); - for (i = 0; i < tab->n_col; ++i) { - if (i) - fprintf(out, ", "); - fprintf(out, "c%d: %d%s", i, tab->col_var[i], - var_from_col(tab, i)->is_nonneg ? " [>=0]" : ""); - } - fprintf(out, "]\n"); - r = tab->mat->n_row; - tab->mat->n_row = tab->n_row; - c = tab->mat->n_col; - tab->mat->n_col = 2 + tab->M + tab->n_col; - isl_mat_print_internal(tab->mat, out, indent); - tab->mat->n_row = r; - tab->mat->n_col = c; - if (tab->bmap) - isl_basic_map_print_internal(tab->bmap, out, indent); -} - -void isl_tab_dump(__isl_keep struct isl_tab *tab) -{ - isl_tab_print_internal(tab, stderr, 0); -} diff --git a/cloog-0.16.3/isl/isl_tab.h b/cloog-0.16.3/isl/isl_tab.h deleted file mode 100644 index 6888044..0000000 --- a/cloog-0.16.3/isl/isl_tab.h +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_TAB_H -#define ISL_TAB_H - -#include -#include -#include -#include - -struct isl_tab_var { - int index; - unsigned is_row : 1; - unsigned is_nonneg : 1; - unsigned is_zero : 1; - unsigned is_redundant : 1; - unsigned marked : 1; - unsigned frozen : 1; - unsigned negated : 1; -}; - -enum isl_tab_undo_type { - isl_tab_undo_bottom, - isl_tab_undo_empty, - isl_tab_undo_nonneg, - isl_tab_undo_redundant, - isl_tab_undo_freeze, - isl_tab_undo_zero, - isl_tab_undo_allocate, - isl_tab_undo_relax, - isl_tab_undo_bmap_ineq, - isl_tab_undo_bmap_eq, - isl_tab_undo_bmap_div, - isl_tab_undo_saved_basis, - isl_tab_undo_drop_sample, - isl_tab_undo_saved_samples, - isl_tab_undo_callback, -}; - -struct isl_tab_callback { - int (*run)(struct isl_tab_callback *cb); -}; - -union isl_tab_undo_val { - int var_index; - int *col_var; - int n; - struct isl_tab_callback *callback; -}; - -struct isl_tab_undo { - enum isl_tab_undo_type type; - union isl_tab_undo_val u; - struct isl_tab_undo *next; -}; - -/* The tableau maintains equality relations. - * Each column and each row is associated to a variable or a constraint. - * The "value" of an inequality constraint is the value of the corresponding - * slack variable. - * The "row_var" and "col_var" arrays map column and row indices - * to indices in the "var" and "con" arrays. The elements of these - * arrays maintain extra information about the variables and the constraints. - * Each row expresses the corresponding row variable as an affine expression - * of the column variables. - * The first two columns in the matrix contain the common denominator of - * the row and the numerator of the constant term. - * If "M" is set, then the third column represents the "big parameter". - * The third (M = 0) or fourth (M = 1) column - * in the matrix is called column 0 with respect to the col_var array. - * The sample value of the tableau is the value that assigns zero - * to all the column variables and the constant term of each affine - * expression to the corresponding row variable. - * The operations on the tableau maintain the property that the sample - * value satisfies the non-negativity constraints (usually on the slack - * variables). - * - * The big parameter represents an arbitrarily big (and divisible) - * positive number. If present, then the sign of a row is determined - * lexicographically, with the sign of the big parameter coefficient - * considered first. The big parameter is only used while - * solving PILP problems. - * - * The first n_dead column variables have their values fixed to zero. - * The corresponding tab_vars are flagged "is_zero". - * Some of the rows that have have zero coefficients in all but - * the dead columns are also flagged "is_zero". - * - * The first n_redundant rows correspond to inequality constraints - * that are always satisfied for any value satisfying the non-redundant - * rows. The corresponding tab_vars are flagged "is_redundant". - * A row variable that is flagged "is_zero" is also flagged "is_redundant" - * since the constraint has been reduced to 0 = 0 and is therefore always - * satisfied. - * - * There are "n_var" variables in total. The first "n_param" of these - * are called parameters and the last "n_div" of these are called divs. - * The basic tableau operations makes no distinction between different - * kinds of variables. These special variables are only used while - * solving PILP problems. - * - * Dead columns and redundant rows are detected on the fly. - * However, the basic operations do not ensure that all dead columns - * or all redundant rows are detected. - * isl_tab_detect_implicit_equalities and isl_tab_detect_redundant can be used - * to perform and exhaustive search for dead columns and redundant rows. - * - * The samples matrix contains "n_sample" integer points that have at some - * point been elements satisfying the tableau. The first "n_outside" - * of them no longer satisfy the tableau. They are kept because they - * can be reinstated during rollback when the constraint that cut them - * out is removed. These samples are only maintained for the context - * tableau while solving PILP problems. - */ -enum isl_tab_row_sign { - isl_tab_row_unknown = 0, - isl_tab_row_pos, - isl_tab_row_neg, - isl_tab_row_any, -}; -struct isl_tab { - struct isl_mat *mat; - - unsigned n_row; - unsigned n_col; - unsigned n_dead; - unsigned n_redundant; - - unsigned n_var; - unsigned n_param; - unsigned n_div; - unsigned max_var; - unsigned n_con; - unsigned n_eq; - unsigned max_con; - struct isl_tab_var *var; - struct isl_tab_var *con; - int *row_var; /* v >= 0 -> var v; v < 0 -> con ~v */ - int *col_var; /* v >= 0 -> var v; v < 0 -> con ~v */ - enum isl_tab_row_sign *row_sign; - - struct isl_tab_undo bottom; - struct isl_tab_undo *top; - - struct isl_vec *dual; - struct isl_basic_map *bmap; - - unsigned n_sample; - unsigned n_outside; - int *sample_index; - struct isl_mat *samples; - - int n_zero; - int n_unbounded; - struct isl_mat *basis; - - int (*conflict)(int con, void *user); - void *conflict_user; - - unsigned strict_redundant : 1; - unsigned need_undo : 1; - unsigned rational : 1; - unsigned empty : 1; - unsigned in_undo : 1; - unsigned M : 1; - unsigned cone : 1; -}; - -struct isl_tab *isl_tab_alloc(struct isl_ctx *ctx, - unsigned n_row, unsigned n_var, unsigned M); -void isl_tab_free(struct isl_tab *tab); - -struct isl_tab *isl_tab_from_basic_map(struct isl_basic_map *bmap); -struct isl_tab *isl_tab_from_basic_set(struct isl_basic_set *bset); -struct isl_tab *isl_tab_from_recession_cone(struct isl_basic_set *bset, - int parametric); -int isl_tab_cone_is_bounded(struct isl_tab *tab); -struct isl_basic_map *isl_basic_map_update_from_tab(struct isl_basic_map *bmap, - struct isl_tab *tab); -struct isl_basic_set *isl_basic_set_update_from_tab(struct isl_basic_set *bset, - struct isl_tab *tab); -int isl_tab_detect_implicit_equalities(struct isl_tab *tab) WARN_UNUSED; -int isl_tab_detect_redundant(struct isl_tab *tab) WARN_UNUSED; -#define ISL_TAB_SAVE_DUAL (1 << 0) -enum isl_lp_result isl_tab_min(struct isl_tab *tab, - isl_int *f, isl_int denom, isl_int *opt, isl_int *opt_denom, - unsigned flags) WARN_UNUSED; - -struct isl_tab *isl_tab_extend(struct isl_tab *tab, unsigned n_new) WARN_UNUSED; -int isl_tab_add_ineq(struct isl_tab *tab, isl_int *ineq) WARN_UNUSED; -int isl_tab_add_eq(struct isl_tab *tab, isl_int *eq) WARN_UNUSED; -int isl_tab_add_valid_eq(struct isl_tab *tab, isl_int *eq) WARN_UNUSED; - -int isl_tab_freeze_constraint(struct isl_tab *tab, int con) WARN_UNUSED; - -int isl_tab_track_bmap(struct isl_tab *tab, __isl_take isl_basic_map *bmap) WARN_UNUSED; -int isl_tab_track_bset(struct isl_tab *tab, __isl_take isl_basic_set *bset) WARN_UNUSED; -__isl_keep isl_basic_set *isl_tab_peek_bset(struct isl_tab *tab); - -int isl_tab_is_equality(struct isl_tab *tab, int con); -int isl_tab_is_redundant(struct isl_tab *tab, int con); - -int isl_tab_sample_is_integer(struct isl_tab *tab); -struct isl_vec *isl_tab_get_sample_value(struct isl_tab *tab); - -enum isl_ineq_type { - isl_ineq_error = -1, - isl_ineq_redundant, - isl_ineq_separate, - isl_ineq_cut, - isl_ineq_adj_eq, - isl_ineq_adj_ineq, -}; - -enum isl_ineq_type isl_tab_ineq_type(struct isl_tab *tab, isl_int *ineq); - -struct isl_tab_undo *isl_tab_snap(struct isl_tab *tab); -int isl_tab_rollback(struct isl_tab *tab, struct isl_tab_undo *snap) WARN_UNUSED; - -struct isl_tab *isl_tab_relax(struct isl_tab *tab, int con) WARN_UNUSED; -int isl_tab_select_facet(struct isl_tab *tab, int con) WARN_UNUSED; - -void isl_tab_dump(__isl_keep struct isl_tab *tab); - -struct isl_map *isl_tab_basic_map_partial_lexopt( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty, int max); - -/* An isl_region represents a sequence of consecutive variables. - * pos is the location (starting at 0) of the first variable in the sequence. - */ -struct isl_region { - int pos; - int len; -}; - -__isl_give isl_vec *isl_tab_basic_set_non_trivial_lexmin( - __isl_take isl_basic_set *bset, int n_op, int n_region, - struct isl_region *region, - int (*conflict)(int con, void *user), void *user); -__isl_give isl_vec *isl_tab_basic_set_non_neg_lexmin( - __isl_take isl_basic_set *bset); - -/* private */ - -struct isl_tab_var *isl_tab_var_from_row(struct isl_tab *tab, int i); -int isl_tab_mark_redundant(struct isl_tab *tab, int row) WARN_UNUSED; -int isl_tab_mark_empty(struct isl_tab *tab) WARN_UNUSED; -struct isl_tab *isl_tab_dup(struct isl_tab *tab); -struct isl_tab *isl_tab_product(struct isl_tab *tab1, struct isl_tab *tab2); -int isl_tab_extend_cons(struct isl_tab *tab, unsigned n_new) WARN_UNUSED; -int isl_tab_allocate_con(struct isl_tab *tab) WARN_UNUSED; -int isl_tab_extend_vars(struct isl_tab *tab, unsigned n_new) WARN_UNUSED; -int isl_tab_allocate_var(struct isl_tab *tab) WARN_UNUSED; -int isl_tab_pivot(struct isl_tab *tab, int row, int col) WARN_UNUSED; -int isl_tab_add_row(struct isl_tab *tab, isl_int *line) WARN_UNUSED; -int isl_tab_row_is_redundant(struct isl_tab *tab, int row); -int isl_tab_min_at_most_neg_one(struct isl_tab *tab, struct isl_tab_var *var); -int isl_tab_sign_of_max(struct isl_tab *tab, int con); -int isl_tab_kill_col(struct isl_tab *tab, int col) WARN_UNUSED; - -int isl_tab_push(struct isl_tab *tab, enum isl_tab_undo_type type) WARN_UNUSED; -int isl_tab_push_var(struct isl_tab *tab, - enum isl_tab_undo_type type, struct isl_tab_var *var) WARN_UNUSED; -int isl_tab_push_basis(struct isl_tab *tab) WARN_UNUSED; - -struct isl_tab *isl_tab_init_samples(struct isl_tab *tab) WARN_UNUSED; -struct isl_tab *isl_tab_add_sample(struct isl_tab *tab, - __isl_take isl_vec *sample) WARN_UNUSED; -struct isl_tab *isl_tab_drop_sample(struct isl_tab *tab, int s); -int isl_tab_save_samples(struct isl_tab *tab) WARN_UNUSED; - -struct isl_tab *isl_tab_detect_equalities(struct isl_tab *tab, - struct isl_tab *tab_cone) WARN_UNUSED; - -int isl_tab_push_callback(struct isl_tab *tab, - struct isl_tab_callback *callback) WARN_UNUSED; - -int isl_tab_add_div(struct isl_tab *tab, __isl_keep isl_vec *div, - int (*add_ineq)(void *user, isl_int *), void *user); - -#endif diff --git a/cloog-0.16.3/isl/isl_tab_pip.c b/cloog-0.16.3/isl/isl_tab_pip.c deleted file mode 100644 index 2f39a08..0000000 --- a/cloog-0.16.3/isl/isl_tab_pip.c +++ /dev/null @@ -1,4991 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include "isl_map_private.h" -#include -#include "isl_tab.h" -#include "isl_sample.h" -#include -#include -#include - -/* - * The implementation of parametric integer linear programming in this file - * was inspired by the paper "Parametric Integer Programming" and the - * report "Solving systems of affine (in)equalities" by Paul Feautrier - * (and others). - * - * The strategy used for obtaining a feasible solution is different - * from the one used in isl_tab.c. In particular, in isl_tab.c, - * upon finding a constraint that is not yet satisfied, we pivot - * in a row that increases the constant term of the row holding the - * constraint, making sure the sample solution remains feasible - * for all the constraints it already satisfied. - * Here, we always pivot in the row holding the constraint, - * choosing a column that induces the lexicographically smallest - * increment to the sample solution. - * - * By starting out from a sample value that is lexicographically - * smaller than any integer point in the problem space, the first - * feasible integer sample point we find will also be the lexicographically - * smallest. If all variables can be assumed to be non-negative, - * then the initial sample value may be chosen equal to zero. - * However, we will not make this assumption. Instead, we apply - * the "big parameter" trick. Any variable x is then not directly - * used in the tableau, but instead it is represented by another - * variable x' = M + x, where M is an arbitrarily large (positive) - * value. x' is therefore always non-negative, whatever the value of x. - * Taking as initial sample value x' = 0 corresponds to x = -M, - * which is always smaller than any possible value of x. - * - * The big parameter trick is used in the main tableau and - * also in the context tableau if isl_context_lex is used. - * In this case, each tableaus has its own big parameter. - * Before doing any real work, we check if all the parameters - * happen to be non-negative. If so, we drop the column corresponding - * to M from the initial context tableau. - * If isl_context_gbr is used, then the big parameter trick is only - * used in the main tableau. - */ - -struct isl_context; -struct isl_context_op { - /* detect nonnegative parameters in context and mark them in tab */ - struct isl_tab *(*detect_nonnegative_parameters)( - struct isl_context *context, struct isl_tab *tab); - /* return temporary reference to basic set representation of context */ - struct isl_basic_set *(*peek_basic_set)(struct isl_context *context); - /* return temporary reference to tableau representation of context */ - struct isl_tab *(*peek_tab)(struct isl_context *context); - /* add equality; check is 1 if eq may not be valid; - * update is 1 if we may want to call ineq_sign on context later. - */ - void (*add_eq)(struct isl_context *context, isl_int *eq, - int check, int update); - /* add inequality; check is 1 if ineq may not be valid; - * update is 1 if we may want to call ineq_sign on context later. - */ - void (*add_ineq)(struct isl_context *context, isl_int *ineq, - int check, int update); - /* check sign of ineq based on previous information. - * strict is 1 if saturation should be treated as a positive sign. - */ - enum isl_tab_row_sign (*ineq_sign)(struct isl_context *context, - isl_int *ineq, int strict); - /* check if inequality maintains feasibility */ - int (*test_ineq)(struct isl_context *context, isl_int *ineq); - /* return index of a div that corresponds to "div" */ - int (*get_div)(struct isl_context *context, struct isl_tab *tab, - struct isl_vec *div); - /* add div "div" to context and return non-negativity */ - int (*add_div)(struct isl_context *context, struct isl_vec *div); - int (*detect_equalities)(struct isl_context *context, - struct isl_tab *tab); - /* return row index of "best" split */ - int (*best_split)(struct isl_context *context, struct isl_tab *tab); - /* check if context has already been determined to be empty */ - int (*is_empty)(struct isl_context *context); - /* check if context is still usable */ - int (*is_ok)(struct isl_context *context); - /* save a copy/snapshot of context */ - void *(*save)(struct isl_context *context); - /* restore saved context */ - void (*restore)(struct isl_context *context, void *); - /* invalidate context */ - void (*invalidate)(struct isl_context *context); - /* free context */ - void (*free)(struct isl_context *context); -}; - -struct isl_context { - struct isl_context_op *op; -}; - -struct isl_context_lex { - struct isl_context context; - struct isl_tab *tab; -}; - -struct isl_partial_sol { - int level; - struct isl_basic_set *dom; - struct isl_mat *M; - - struct isl_partial_sol *next; -}; - -struct isl_sol; -struct isl_sol_callback { - struct isl_tab_callback callback; - struct isl_sol *sol; -}; - -/* isl_sol is an interface for constructing a solution to - * a parametric integer linear programming problem. - * Every time the algorithm reaches a state where a solution - * can be read off from the tableau (including cases where the tableau - * is empty), the function "add" is called on the isl_sol passed - * to find_solutions_main. - * - * The context tableau is owned by isl_sol and is updated incrementally. - * - * There are currently two implementations of this interface, - * isl_sol_map, which simply collects the solutions in an isl_map - * and (optionally) the parts of the context where there is no solution - * in an isl_set, and - * isl_sol_for, which calls a user-defined function for each part of - * the solution. - */ -struct isl_sol { - int error; - int rational; - int level; - int max; - int n_out; - struct isl_context *context; - struct isl_partial_sol *partial; - void (*add)(struct isl_sol *sol, - struct isl_basic_set *dom, struct isl_mat *M); - void (*add_empty)(struct isl_sol *sol, struct isl_basic_set *bset); - void (*free)(struct isl_sol *sol); - struct isl_sol_callback dec_level; -}; - -static void sol_free(struct isl_sol *sol) -{ - struct isl_partial_sol *partial, *next; - if (!sol) - return; - for (partial = sol->partial; partial; partial = next) { - next = partial->next; - isl_basic_set_free(partial->dom); - isl_mat_free(partial->M); - free(partial); - } - sol->free(sol); -} - -/* Push a partial solution represented by a domain and mapping M - * onto the stack of partial solutions. - */ -static void sol_push_sol(struct isl_sol *sol, - struct isl_basic_set *dom, struct isl_mat *M) -{ - struct isl_partial_sol *partial; - - if (sol->error || !dom) - goto error; - - partial = isl_alloc_type(dom->ctx, struct isl_partial_sol); - if (!partial) - goto error; - - partial->level = sol->level; - partial->dom = dom; - partial->M = M; - partial->next = sol->partial; - - sol->partial = partial; - - return; -error: - isl_basic_set_free(dom); - sol->error = 1; -} - -/* Pop one partial solution from the partial solution stack and - * pass it on to sol->add or sol->add_empty. - */ -static void sol_pop_one(struct isl_sol *sol) -{ - struct isl_partial_sol *partial; - - partial = sol->partial; - sol->partial = partial->next; - - if (partial->M) - sol->add(sol, partial->dom, partial->M); - else - sol->add_empty(sol, partial->dom); - free(partial); -} - -/* Return a fresh copy of the domain represented by the context tableau. - */ -static struct isl_basic_set *sol_domain(struct isl_sol *sol) -{ - struct isl_basic_set *bset; - - if (sol->error) - return NULL; - - bset = isl_basic_set_dup(sol->context->op->peek_basic_set(sol->context)); - bset = isl_basic_set_update_from_tab(bset, - sol->context->op->peek_tab(sol->context)); - - return bset; -} - -/* Check whether two partial solutions have the same mapping, where n_div - * is the number of divs that the two partial solutions have in common. - */ -static int same_solution(struct isl_partial_sol *s1, struct isl_partial_sol *s2, - unsigned n_div) -{ - int i; - unsigned dim; - - if (!s1->M != !s2->M) - return 0; - if (!s1->M) - return 1; - - dim = isl_basic_set_total_dim(s1->dom) - s1->dom->n_div; - - for (i = 0; i < s1->M->n_row; ++i) { - if (isl_seq_first_non_zero(s1->M->row[i]+1+dim+n_div, - s1->M->n_col-1-dim-n_div) != -1) - return 0; - if (isl_seq_first_non_zero(s2->M->row[i]+1+dim+n_div, - s2->M->n_col-1-dim-n_div) != -1) - return 0; - if (!isl_seq_eq(s1->M->row[i], s2->M->row[i], 1+dim+n_div)) - return 0; - } - return 1; -} - -/* Pop all solutions from the partial solution stack that were pushed onto - * the stack at levels that are deeper than the current level. - * If the two topmost elements on the stack have the same level - * and represent the same solution, then their domains are combined. - * This combined domain is the same as the current context domain - * as sol_pop is called each time we move back to a higher level. - */ -static void sol_pop(struct isl_sol *sol) -{ - struct isl_partial_sol *partial; - unsigned n_div; - - if (sol->error) - return; - - if (sol->level == 0) { - for (partial = sol->partial; partial; partial = sol->partial) - sol_pop_one(sol); - return; - } - - partial = sol->partial; - if (!partial) - return; - - if (partial->level <= sol->level) - return; - - if (partial->next && partial->next->level == partial->level) { - n_div = isl_basic_set_dim( - sol->context->op->peek_basic_set(sol->context), - isl_dim_div); - - if (!same_solution(partial, partial->next, n_div)) { - sol_pop_one(sol); - sol_pop_one(sol); - } else { - struct isl_basic_set *bset; - - bset = sol_domain(sol); - - isl_basic_set_free(partial->next->dom); - partial->next->dom = bset; - partial->next->level = sol->level; - - sol->partial = partial->next; - isl_basic_set_free(partial->dom); - isl_mat_free(partial->M); - free(partial); - } - } else - sol_pop_one(sol); -} - -static void sol_dec_level(struct isl_sol *sol) -{ - if (sol->error) - return; - - sol->level--; - - sol_pop(sol); -} - -static int sol_dec_level_wrap(struct isl_tab_callback *cb) -{ - struct isl_sol_callback *callback = (struct isl_sol_callback *)cb; - - sol_dec_level(callback->sol); - - return callback->sol->error ? -1 : 0; -} - -/* Move down to next level and push callback onto context tableau - * to decrease the level again when it gets rolled back across - * the current state. That is, dec_level will be called with - * the context tableau in the same state as it is when inc_level - * is called. - */ -static void sol_inc_level(struct isl_sol *sol) -{ - struct isl_tab *tab; - - if (sol->error) - return; - - sol->level++; - tab = sol->context->op->peek_tab(sol->context); - if (isl_tab_push_callback(tab, &sol->dec_level.callback) < 0) - sol->error = 1; -} - -static void scale_rows(struct isl_mat *mat, isl_int m, int n_row) -{ - int i; - - if (isl_int_is_one(m)) - return; - - for (i = 0; i < n_row; ++i) - isl_seq_scale(mat->row[i], mat->row[i], m, mat->n_col); -} - -/* Add the solution identified by the tableau and the context tableau. - * - * The layout of the variables is as follows. - * tab->n_var is equal to the total number of variables in the input - * map (including divs that were copied from the context) - * + the number of extra divs constructed - * Of these, the first tab->n_param and the last tab->n_div variables - * correspond to the variables in the context, i.e., - * tab->n_param + tab->n_div = context_tab->n_var - * tab->n_param is equal to the number of parameters and input - * dimensions in the input map - * tab->n_div is equal to the number of divs in the context - * - * If there is no solution, then call add_empty with a basic set - * that corresponds to the context tableau. (If add_empty is NULL, - * then do nothing). - * - * If there is a solution, then first construct a matrix that maps - * all dimensions of the context to the output variables, i.e., - * the output dimensions in the input map. - * The divs in the input map (if any) that do not correspond to any - * div in the context do not appear in the solution. - * The algorithm will make sure that they have an integer value, - * but these values themselves are of no interest. - * We have to be careful not to drop or rearrange any divs in the - * context because that would change the meaning of the matrix. - * - * To extract the value of the output variables, it should be noted - * that we always use a big parameter M in the main tableau and so - * the variable stored in this tableau is not an output variable x itself, but - * x' = M + x (in case of minimization) - * or - * x' = M - x (in case of maximization) - * If x' appears in a column, then its optimal value is zero, - * which means that the optimal value of x is an unbounded number - * (-M for minimization and M for maximization). - * We currently assume that the output dimensions in the original map - * are bounded, so this cannot occur. - * Similarly, when x' appears in a row, then the coefficient of M in that - * row is necessarily 1. - * If the row in the tableau represents - * d x' = c + d M + e(y) - * then, in case of minimization, the corresponding row in the matrix - * will be - * a c + a e(y) - * with a d = m, the (updated) common denominator of the matrix. - * In case of maximization, the row will be - * -a c - a e(y) - */ -static void sol_add(struct isl_sol *sol, struct isl_tab *tab) -{ - struct isl_basic_set *bset = NULL; - struct isl_mat *mat = NULL; - unsigned off; - int row; - isl_int m; - - if (sol->error || !tab) - goto error; - - if (tab->empty && !sol->add_empty) - return; - - bset = sol_domain(sol); - - if (tab->empty) { - sol_push_sol(sol, bset, NULL); - return; - } - - off = 2 + tab->M; - - mat = isl_mat_alloc(tab->mat->ctx, 1 + sol->n_out, - 1 + tab->n_param + tab->n_div); - if (!mat) - goto error; - - isl_int_init(m); - - isl_seq_clr(mat->row[0] + 1, mat->n_col - 1); - isl_int_set_si(mat->row[0][0], 1); - for (row = 0; row < sol->n_out; ++row) { - int i = tab->n_param + row; - int r, j; - - isl_seq_clr(mat->row[1 + row], mat->n_col); - if (!tab->var[i].is_row) { - if (tab->M) - isl_die(mat->ctx, isl_error_invalid, - "unbounded optimum", goto error2); - continue; - } - - r = tab->var[i].index; - if (tab->M && - isl_int_ne(tab->mat->row[r][2], tab->mat->row[r][0])) - isl_die(mat->ctx, isl_error_invalid, - "unbounded optimum", goto error2); - isl_int_gcd(m, mat->row[0][0], tab->mat->row[r][0]); - isl_int_divexact(m, tab->mat->row[r][0], m); - scale_rows(mat, m, 1 + row); - isl_int_divexact(m, mat->row[0][0], tab->mat->row[r][0]); - isl_int_mul(mat->row[1 + row][0], m, tab->mat->row[r][1]); - for (j = 0; j < tab->n_param; ++j) { - int col; - if (tab->var[j].is_row) - continue; - col = tab->var[j].index; - isl_int_mul(mat->row[1 + row][1 + j], m, - tab->mat->row[r][off + col]); - } - for (j = 0; j < tab->n_div; ++j) { - int col; - if (tab->var[tab->n_var - tab->n_div+j].is_row) - continue; - col = tab->var[tab->n_var - tab->n_div+j].index; - isl_int_mul(mat->row[1 + row][1 + tab->n_param + j], m, - tab->mat->row[r][off + col]); - } - if (sol->max) - isl_seq_neg(mat->row[1 + row], mat->row[1 + row], - mat->n_col); - } - - isl_int_clear(m); - - sol_push_sol(sol, bset, mat); - return; -error2: - isl_int_clear(m); -error: - isl_basic_set_free(bset); - isl_mat_free(mat); - sol->error = 1; -} - -struct isl_sol_map { - struct isl_sol sol; - struct isl_map *map; - struct isl_set *empty; -}; - -static void sol_map_free(struct isl_sol_map *sol_map) -{ - if (!sol_map) - return; - if (sol_map->sol.context) - sol_map->sol.context->op->free(sol_map->sol.context); - isl_map_free(sol_map->map); - isl_set_free(sol_map->empty); - free(sol_map); -} - -static void sol_map_free_wrap(struct isl_sol *sol) -{ - sol_map_free((struct isl_sol_map *)sol); -} - -/* This function is called for parts of the context where there is - * no solution, with "bset" corresponding to the context tableau. - * Simply add the basic set to the set "empty". - */ -static void sol_map_add_empty(struct isl_sol_map *sol, - struct isl_basic_set *bset) -{ - if (!bset) - goto error; - isl_assert(bset->ctx, sol->empty, goto error); - - sol->empty = isl_set_grow(sol->empty, 1); - bset = isl_basic_set_simplify(bset); - bset = isl_basic_set_finalize(bset); - sol->empty = isl_set_add_basic_set(sol->empty, isl_basic_set_copy(bset)); - if (!sol->empty) - goto error; - isl_basic_set_free(bset); - return; -error: - isl_basic_set_free(bset); - sol->sol.error = 1; -} - -static void sol_map_add_empty_wrap(struct isl_sol *sol, - struct isl_basic_set *bset) -{ - sol_map_add_empty((struct isl_sol_map *)sol, bset); -} - -/* Add bset to sol's empty, but only if we are actually collecting - * the empty set. - */ -static void sol_map_add_empty_if_needed(struct isl_sol_map *sol, - struct isl_basic_set *bset) -{ - if (sol->empty) - sol_map_add_empty(sol, bset); - else - isl_basic_set_free(bset); -} - -/* Given a basic map "dom" that represents the context and an affine - * matrix "M" that maps the dimensions of the context to the - * output variables, construct a basic map with the same parameters - * and divs as the context, the dimensions of the context as input - * dimensions and a number of output dimensions that is equal to - * the number of output dimensions in the input map. - * - * The constraints and divs of the context are simply copied - * from "dom". For each row - * x = c + e(y) - * an equality - * c + e(y) - d x = 0 - * is added, with d the common denominator of M. - */ -static void sol_map_add(struct isl_sol_map *sol, - struct isl_basic_set *dom, struct isl_mat *M) -{ - int i; - struct isl_basic_map *bmap = NULL; - unsigned n_eq; - unsigned n_ineq; - unsigned nparam; - unsigned total; - unsigned n_div; - unsigned n_out; - - if (sol->sol.error || !dom || !M) - goto error; - - n_out = sol->sol.n_out; - n_eq = dom->n_eq + n_out; - n_ineq = dom->n_ineq; - n_div = dom->n_div; - nparam = isl_basic_set_total_dim(dom) - n_div; - total = isl_map_dim(sol->map, isl_dim_all); - bmap = isl_basic_map_alloc_dim(isl_map_get_dim(sol->map), - n_div, n_eq, 2 * n_div + n_ineq); - if (!bmap) - goto error; - if (sol->sol.rational) - ISL_F_SET(bmap, ISL_BASIC_MAP_RATIONAL); - for (i = 0; i < dom->n_div; ++i) { - int k = isl_basic_map_alloc_div(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->div[k], dom->div[i], 1 + 1 + nparam); - isl_seq_clr(bmap->div[k] + 1 + 1 + nparam, total - nparam); - isl_seq_cpy(bmap->div[k] + 1 + 1 + total, - dom->div[i] + 1 + 1 + nparam, i); - } - for (i = 0; i < dom->n_eq; ++i) { - int k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->eq[k], dom->eq[i], 1 + nparam); - isl_seq_clr(bmap->eq[k] + 1 + nparam, total - nparam); - isl_seq_cpy(bmap->eq[k] + 1 + total, - dom->eq[i] + 1 + nparam, n_div); - } - for (i = 0; i < dom->n_ineq; ++i) { - int k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->ineq[k], dom->ineq[i], 1 + nparam); - isl_seq_clr(bmap->ineq[k] + 1 + nparam, total - nparam); - isl_seq_cpy(bmap->ineq[k] + 1 + total, - dom->ineq[i] + 1 + nparam, n_div); - } - for (i = 0; i < M->n_row - 1; ++i) { - int k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->eq[k], M->row[1 + i], 1 + nparam); - isl_seq_clr(bmap->eq[k] + 1 + nparam, n_out); - isl_int_neg(bmap->eq[k][1 + nparam + i], M->row[0][0]); - isl_seq_cpy(bmap->eq[k] + 1 + nparam + n_out, - M->row[1 + i] + 1 + nparam, n_div); - } - bmap = isl_basic_map_simplify(bmap); - bmap = isl_basic_map_finalize(bmap); - sol->map = isl_map_grow(sol->map, 1); - sol->map = isl_map_add_basic_map(sol->map, bmap); - if (!sol->map) - goto error; - isl_basic_set_free(dom); - isl_mat_free(M); - return; -error: - isl_basic_set_free(dom); - isl_mat_free(M); - isl_basic_map_free(bmap); - sol->sol.error = 1; -} - -static void sol_map_add_wrap(struct isl_sol *sol, - struct isl_basic_set *dom, struct isl_mat *M) -{ - sol_map_add((struct isl_sol_map *)sol, dom, M); -} - - -/* Store the "parametric constant" of row "row" of tableau "tab" in "line", - * i.e., the constant term and the coefficients of all variables that - * appear in the context tableau. - * Note that the coefficient of the big parameter M is NOT copied. - * The context tableau may not have a big parameter and even when it - * does, it is a different big parameter. - */ -static void get_row_parameter_line(struct isl_tab *tab, int row, isl_int *line) -{ - int i; - unsigned off = 2 + tab->M; - - isl_int_set(line[0], tab->mat->row[row][1]); - for (i = 0; i < tab->n_param; ++i) { - if (tab->var[i].is_row) - isl_int_set_si(line[1 + i], 0); - else { - int col = tab->var[i].index; - isl_int_set(line[1 + i], tab->mat->row[row][off + col]); - } - } - for (i = 0; i < tab->n_div; ++i) { - if (tab->var[tab->n_var - tab->n_div + i].is_row) - isl_int_set_si(line[1 + tab->n_param + i], 0); - else { - int col = tab->var[tab->n_var - tab->n_div + i].index; - isl_int_set(line[1 + tab->n_param + i], - tab->mat->row[row][off + col]); - } - } -} - -/* Check if rows "row1" and "row2" have identical "parametric constants", - * as explained above. - * In this case, we also insist that the coefficients of the big parameter - * be the same as the values of the constants will only be the same - * if these coefficients are also the same. - */ -static int identical_parameter_line(struct isl_tab *tab, int row1, int row2) -{ - int i; - unsigned off = 2 + tab->M; - - if (isl_int_ne(tab->mat->row[row1][1], tab->mat->row[row2][1])) - return 0; - - if (tab->M && isl_int_ne(tab->mat->row[row1][2], - tab->mat->row[row2][2])) - return 0; - - for (i = 0; i < tab->n_param + tab->n_div; ++i) { - int pos = i < tab->n_param ? i : - tab->n_var - tab->n_div + i - tab->n_param; - int col; - - if (tab->var[pos].is_row) - continue; - col = tab->var[pos].index; - if (isl_int_ne(tab->mat->row[row1][off + col], - tab->mat->row[row2][off + col])) - return 0; - } - return 1; -} - -/* Return an inequality that expresses that the "parametric constant" - * should be non-negative. - * This function is only called when the coefficient of the big parameter - * is equal to zero. - */ -static struct isl_vec *get_row_parameter_ineq(struct isl_tab *tab, int row) -{ - struct isl_vec *ineq; - - ineq = isl_vec_alloc(tab->mat->ctx, 1 + tab->n_param + tab->n_div); - if (!ineq) - return NULL; - - get_row_parameter_line(tab, row, ineq->el); - if (ineq) - ineq = isl_vec_normalize(ineq); - - return ineq; -} - -/* Return a integer division for use in a parametric cut based on the given row. - * In particular, let the parametric constant of the row be - * - * \sum_i a_i y_i - * - * where y_0 = 1, but none of the y_i corresponds to the big parameter M. - * The div returned is equal to - * - * floor(\sum_i {-a_i} y_i) = floor((\sum_i (-a_i mod d) y_i)/d) - */ -static struct isl_vec *get_row_parameter_div(struct isl_tab *tab, int row) -{ - struct isl_vec *div; - - div = isl_vec_alloc(tab->mat->ctx, 1 + 1 + tab->n_param + tab->n_div); - if (!div) - return NULL; - - isl_int_set(div->el[0], tab->mat->row[row][0]); - get_row_parameter_line(tab, row, div->el + 1); - div = isl_vec_normalize(div); - isl_seq_neg(div->el + 1, div->el + 1, div->size - 1); - isl_seq_fdiv_r(div->el + 1, div->el + 1, div->el[0], div->size - 1); - - return div; -} - -/* Return a integer division for use in transferring an integrality constraint - * to the context. - * In particular, let the parametric constant of the row be - * - * \sum_i a_i y_i - * - * where y_0 = 1, but none of the y_i corresponds to the big parameter M. - * The the returned div is equal to - * - * floor(\sum_i {a_i} y_i) = floor((\sum_i (a_i mod d) y_i)/d) - */ -static struct isl_vec *get_row_split_div(struct isl_tab *tab, int row) -{ - struct isl_vec *div; - - div = isl_vec_alloc(tab->mat->ctx, 1 + 1 + tab->n_param + tab->n_div); - if (!div) - return NULL; - - isl_int_set(div->el[0], tab->mat->row[row][0]); - get_row_parameter_line(tab, row, div->el + 1); - div = isl_vec_normalize(div); - isl_seq_fdiv_r(div->el + 1, div->el + 1, div->el[0], div->size - 1); - - return div; -} - -/* Construct and return an inequality that expresses an upper bound - * on the given div. - * In particular, if the div is given by - * - * d = floor(e/m) - * - * then the inequality expresses - * - * m d <= e - */ -static struct isl_vec *ineq_for_div(struct isl_basic_set *bset, unsigned div) -{ - unsigned total; - unsigned div_pos; - struct isl_vec *ineq; - - if (!bset) - return NULL; - - total = isl_basic_set_total_dim(bset); - div_pos = 1 + total - bset->n_div + div; - - ineq = isl_vec_alloc(bset->ctx, 1 + total); - if (!ineq) - return NULL; - - isl_seq_cpy(ineq->el, bset->div[div] + 1, 1 + total); - isl_int_neg(ineq->el[div_pos], bset->div[div][0]); - return ineq; -} - -/* Given a row in the tableau and a div that was created - * using get_row_split_div and that been constrained to equality, i.e., - * - * d = floor(\sum_i {a_i} y_i) = \sum_i {a_i} y_i - * - * replace the expression "\sum_i {a_i} y_i" in the row by d, - * i.e., we subtract "\sum_i {a_i} y_i" and add 1 d. - * The coefficients of the non-parameters in the tableau have been - * verified to be integral. We can therefore simply replace coefficient b - * by floor(b). For the coefficients of the parameters we have - * floor(a_i) = a_i - {a_i}, while for the other coefficients, we have - * floor(b) = b. - */ -static struct isl_tab *set_row_cst_to_div(struct isl_tab *tab, int row, int div) -{ - isl_seq_fdiv_q(tab->mat->row[row] + 1, tab->mat->row[row] + 1, - tab->mat->row[row][0], 1 + tab->M + tab->n_col); - - isl_int_set_si(tab->mat->row[row][0], 1); - - if (tab->var[tab->n_var - tab->n_div + div].is_row) { - int drow = tab->var[tab->n_var - tab->n_div + div].index; - - isl_assert(tab->mat->ctx, - isl_int_is_one(tab->mat->row[drow][0]), goto error); - isl_seq_combine(tab->mat->row[row] + 1, - tab->mat->ctx->one, tab->mat->row[row] + 1, - tab->mat->ctx->one, tab->mat->row[drow] + 1, - 1 + tab->M + tab->n_col); - } else { - int dcol = tab->var[tab->n_var - tab->n_div + div].index; - - isl_int_set_si(tab->mat->row[row][2 + tab->M + dcol], 1); - } - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Check if the (parametric) constant of the given row is obviously - * negative, meaning that we don't need to consult the context tableau. - * If there is a big parameter and its coefficient is non-zero, - * then this coefficient determines the outcome. - * Otherwise, we check whether the constant is negative and - * all non-zero coefficients of parameters are negative and - * belong to non-negative parameters. - */ -static int is_obviously_neg(struct isl_tab *tab, int row) -{ - int i; - int col; - unsigned off = 2 + tab->M; - - if (tab->M) { - if (isl_int_is_pos(tab->mat->row[row][2])) - return 0; - if (isl_int_is_neg(tab->mat->row[row][2])) - return 1; - } - - if (isl_int_is_nonneg(tab->mat->row[row][1])) - return 0; - for (i = 0; i < tab->n_param; ++i) { - /* Eliminated parameter */ - if (tab->var[i].is_row) - continue; - col = tab->var[i].index; - if (isl_int_is_zero(tab->mat->row[row][off + col])) - continue; - if (!tab->var[i].is_nonneg) - return 0; - if (isl_int_is_pos(tab->mat->row[row][off + col])) - return 0; - } - for (i = 0; i < tab->n_div; ++i) { - if (tab->var[tab->n_var - tab->n_div + i].is_row) - continue; - col = tab->var[tab->n_var - tab->n_div + i].index; - if (isl_int_is_zero(tab->mat->row[row][off + col])) - continue; - if (!tab->var[tab->n_var - tab->n_div + i].is_nonneg) - return 0; - if (isl_int_is_pos(tab->mat->row[row][off + col])) - return 0; - } - return 1; -} - -/* Check if the (parametric) constant of the given row is obviously - * non-negative, meaning that we don't need to consult the context tableau. - * If there is a big parameter and its coefficient is non-zero, - * then this coefficient determines the outcome. - * Otherwise, we check whether the constant is non-negative and - * all non-zero coefficients of parameters are positive and - * belong to non-negative parameters. - */ -static int is_obviously_nonneg(struct isl_tab *tab, int row) -{ - int i; - int col; - unsigned off = 2 + tab->M; - - if (tab->M) { - if (isl_int_is_pos(tab->mat->row[row][2])) - return 1; - if (isl_int_is_neg(tab->mat->row[row][2])) - return 0; - } - - if (isl_int_is_neg(tab->mat->row[row][1])) - return 0; - for (i = 0; i < tab->n_param; ++i) { - /* Eliminated parameter */ - if (tab->var[i].is_row) - continue; - col = tab->var[i].index; - if (isl_int_is_zero(tab->mat->row[row][off + col])) - continue; - if (!tab->var[i].is_nonneg) - return 0; - if (isl_int_is_neg(tab->mat->row[row][off + col])) - return 0; - } - for (i = 0; i < tab->n_div; ++i) { - if (tab->var[tab->n_var - tab->n_div + i].is_row) - continue; - col = tab->var[tab->n_var - tab->n_div + i].index; - if (isl_int_is_zero(tab->mat->row[row][off + col])) - continue; - if (!tab->var[tab->n_var - tab->n_div + i].is_nonneg) - return 0; - if (isl_int_is_neg(tab->mat->row[row][off + col])) - return 0; - } - return 1; -} - -/* Given a row r and two columns, return the column that would - * lead to the lexicographically smallest increment in the sample - * solution when leaving the basis in favor of the row. - * Pivoting with column c will increment the sample value by a non-negative - * constant times a_{V,c}/a_{r,c}, with a_{V,c} the elements of column c - * corresponding to the non-parametric variables. - * If variable v appears in a column c_v, the a_{v,c} = 1 iff c = c_v, - * with all other entries in this virtual row equal to zero. - * If variable v appears in a row, then a_{v,c} is the element in column c - * of that row. - * - * Let v be the first variable with a_{v,c1}/a_{r,c1} != a_{v,c2}/a_{r,c2}. - * Then if a_{v,c1}/a_{r,c1} < a_{v,c2}/a_{r,c2}, i.e., - * a_{v,c2} a_{r,c1} - a_{v,c1} a_{r,c2} > 0, c1 results in the minimal - * increment. Otherwise, it's c2. - */ -static int lexmin_col_pair(struct isl_tab *tab, - int row, int col1, int col2, isl_int tmp) -{ - int i; - isl_int *tr; - - tr = tab->mat->row[row] + 2 + tab->M; - - for (i = tab->n_param; i < tab->n_var - tab->n_div; ++i) { - int s1, s2; - isl_int *r; - - if (!tab->var[i].is_row) { - if (tab->var[i].index == col1) - return col2; - if (tab->var[i].index == col2) - return col1; - continue; - } - - if (tab->var[i].index == row) - continue; - - r = tab->mat->row[tab->var[i].index] + 2 + tab->M; - s1 = isl_int_sgn(r[col1]); - s2 = isl_int_sgn(r[col2]); - if (s1 == 0 && s2 == 0) - continue; - if (s1 < s2) - return col1; - if (s2 < s1) - return col2; - - isl_int_mul(tmp, r[col2], tr[col1]); - isl_int_submul(tmp, r[col1], tr[col2]); - if (isl_int_is_pos(tmp)) - return col1; - if (isl_int_is_neg(tmp)) - return col2; - } - return -1; -} - -/* Given a row in the tableau, find and return the column that would - * result in the lexicographically smallest, but positive, increment - * in the sample point. - * If there is no such column, then return tab->n_col. - * If anything goes wrong, return -1. - */ -static int lexmin_pivot_col(struct isl_tab *tab, int row) -{ - int j; - int col = tab->n_col; - isl_int *tr; - isl_int tmp; - - tr = tab->mat->row[row] + 2 + tab->M; - - isl_int_init(tmp); - - for (j = tab->n_dead; j < tab->n_col; ++j) { - if (tab->col_var[j] >= 0 && - (tab->col_var[j] < tab->n_param || - tab->col_var[j] >= tab->n_var - tab->n_div)) - continue; - - if (!isl_int_is_pos(tr[j])) - continue; - - if (col == tab->n_col) - col = j; - else - col = lexmin_col_pair(tab, row, col, j, tmp); - isl_assert(tab->mat->ctx, col >= 0, goto error); - } - - isl_int_clear(tmp); - return col; -error: - isl_int_clear(tmp); - return -1; -} - -/* Return the first known violated constraint, i.e., a non-negative - * constraint that currently has an either obviously negative value - * or a previously determined to be negative value. - * - * If any constraint has a negative coefficient for the big parameter, - * if any, then we return one of these first. - */ -static int first_neg(struct isl_tab *tab) -{ - int row; - - if (tab->M) - for (row = tab->n_redundant; row < tab->n_row; ++row) { - if (!isl_tab_var_from_row(tab, row)->is_nonneg) - continue; - if (!isl_int_is_neg(tab->mat->row[row][2])) - continue; - if (tab->row_sign) - tab->row_sign[row] = isl_tab_row_neg; - return row; - } - for (row = tab->n_redundant; row < tab->n_row; ++row) { - if (!isl_tab_var_from_row(tab, row)->is_nonneg) - continue; - if (tab->row_sign) { - if (tab->row_sign[row] == 0 && - is_obviously_neg(tab, row)) - tab->row_sign[row] = isl_tab_row_neg; - if (tab->row_sign[row] != isl_tab_row_neg) - continue; - } else if (!is_obviously_neg(tab, row)) - continue; - return row; - } - return -1; -} - -/* Check whether the invariant that all columns are lexico-positive - * is satisfied. This function is not called from the current code - * but is useful during debugging. - */ -static void check_lexpos(struct isl_tab *tab) __attribute__ ((unused)); -static void check_lexpos(struct isl_tab *tab) -{ - unsigned off = 2 + tab->M; - int col; - int var; - int row; - - for (col = tab->n_dead; col < tab->n_col; ++col) { - if (tab->col_var[col] >= 0 && - (tab->col_var[col] < tab->n_param || - tab->col_var[col] >= tab->n_var - tab->n_div)) - continue; - for (var = tab->n_param; var < tab->n_var - tab->n_div; ++var) { - if (!tab->var[var].is_row) { - if (tab->var[var].index == col) - break; - else - continue; - } - row = tab->var[var].index; - if (isl_int_is_zero(tab->mat->row[row][off + col])) - continue; - if (isl_int_is_pos(tab->mat->row[row][off + col])) - break; - fprintf(stderr, "lexneg column %d (row %d)\n", - col, row); - } - if (var >= tab->n_var - tab->n_div) - fprintf(stderr, "zero column %d\n", col); - } -} - -/* Report to the caller that the given constraint is part of an encountered - * conflict. - */ -static int report_conflicting_constraint(struct isl_tab *tab, int con) -{ - return tab->conflict(con, tab->conflict_user); -} - -/* Given a conflicting row in the tableau, report all constraints - * involved in the row to the caller. That is, the row itself - * (if represents a constraint) and all constraint columns with - * non-zero (and therefore negative) coefficient. - */ -static int report_conflict(struct isl_tab *tab, int row) -{ - int j; - isl_int *tr; - - if (!tab->conflict) - return 0; - - if (tab->row_var[row] < 0 && - report_conflicting_constraint(tab, ~tab->row_var[row]) < 0) - return -1; - - tr = tab->mat->row[row] + 2 + tab->M; - - for (j = tab->n_dead; j < tab->n_col; ++j) { - if (tab->col_var[j] >= 0 && - (tab->col_var[j] < tab->n_param || - tab->col_var[j] >= tab->n_var - tab->n_div)) - continue; - - if (!isl_int_is_neg(tr[j])) - continue; - - if (tab->col_var[j] < 0 && - report_conflicting_constraint(tab, ~tab->col_var[j]) < 0) - return -1; - } - - return 0; -} - -/* Resolve all known or obviously violated constraints through pivoting. - * In particular, as long as we can find any violated constraint, we - * look for a pivoting column that would result in the lexicographically - * smallest increment in the sample point. If there is no such column - * then the tableau is infeasible. - */ -static int restore_lexmin(struct isl_tab *tab) WARN_UNUSED; -static int restore_lexmin(struct isl_tab *tab) -{ - int row, col; - - if (!tab) - return -1; - if (tab->empty) - return 0; - while ((row = first_neg(tab)) != -1) { - col = lexmin_pivot_col(tab, row); - if (col >= tab->n_col) { - if (report_conflict(tab, row) < 0) - return -1; - if (isl_tab_mark_empty(tab) < 0) - return -1; - return 0; - } - if (col < 0) - return -1; - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - } - return 0; -} - -/* Given a row that represents an equality, look for an appropriate - * pivoting column. - * In particular, if there are any non-zero coefficients among - * the non-parameter variables, then we take the last of these - * variables. Eliminating this variable in terms of the other - * variables and/or parameters does not influence the property - * that all column in the initial tableau are lexicographically - * positive. The row corresponding to the eliminated variable - * will only have non-zero entries below the diagonal of the - * initial tableau. That is, we transform - * - * I I - * 1 into a - * I I - * - * If there is no such non-parameter variable, then we are dealing with - * pure parameter equality and we pick any parameter with coefficient 1 or -1 - * for elimination. This will ensure that the eliminated parameter - * always has an integer value whenever all the other parameters are integral. - * If there is no such parameter then we return -1. - */ -static int last_var_col_or_int_par_col(struct isl_tab *tab, int row) -{ - unsigned off = 2 + tab->M; - int i; - - for (i = tab->n_var - tab->n_div - 1; i >= 0 && i >= tab->n_param; --i) { - int col; - if (tab->var[i].is_row) - continue; - col = tab->var[i].index; - if (col <= tab->n_dead) - continue; - if (!isl_int_is_zero(tab->mat->row[row][off + col])) - return col; - } - for (i = tab->n_dead; i < tab->n_col; ++i) { - if (isl_int_is_one(tab->mat->row[row][off + i])) - return i; - if (isl_int_is_negone(tab->mat->row[row][off + i])) - return i; - } - return -1; -} - -/* Add an equality that is known to be valid to the tableau. - * We first check if we can eliminate a variable or a parameter. - * If not, we add the equality as two inequalities. - * In this case, the equality was a pure parameter equality and there - * is no need to resolve any constraint violations. - */ -static struct isl_tab *add_lexmin_valid_eq(struct isl_tab *tab, isl_int *eq) -{ - int i; - int r; - - if (!tab) - return NULL; - r = isl_tab_add_row(tab, eq); - if (r < 0) - goto error; - - r = tab->con[r].index; - i = last_var_col_or_int_par_col(tab, r); - if (i < 0) { - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - goto error; - isl_seq_neg(eq, eq, 1 + tab->n_var); - r = isl_tab_add_row(tab, eq); - if (r < 0) - goto error; - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - goto error; - } else { - if (isl_tab_pivot(tab, r, i) < 0) - goto error; - if (isl_tab_kill_col(tab, i) < 0) - goto error; - tab->n_eq++; - } - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Check if the given row is a pure constant. - */ -static int is_constant(struct isl_tab *tab, int row) -{ - unsigned off = 2 + tab->M; - - return isl_seq_first_non_zero(tab->mat->row[row] + off + tab->n_dead, - tab->n_col - tab->n_dead) == -1; -} - -/* Add an equality that may or may not be valid to the tableau. - * If the resulting row is a pure constant, then it must be zero. - * Otherwise, the resulting tableau is empty. - * - * If the row is not a pure constant, then we add two inequalities, - * each time checking that they can be satisfied. - * In the end we try to use one of the two constraints to eliminate - * a column. - */ -static int add_lexmin_eq(struct isl_tab *tab, isl_int *eq) WARN_UNUSED; -static int add_lexmin_eq(struct isl_tab *tab, isl_int *eq) -{ - int r1, r2; - int row; - struct isl_tab_undo *snap; - - if (!tab) - return -1; - snap = isl_tab_snap(tab); - r1 = isl_tab_add_row(tab, eq); - if (r1 < 0) - return -1; - tab->con[r1].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r1]) < 0) - return -1; - - row = tab->con[r1].index; - if (is_constant(tab, row)) { - if (!isl_int_is_zero(tab->mat->row[row][1]) || - (tab->M && !isl_int_is_zero(tab->mat->row[row][2]))) { - if (isl_tab_mark_empty(tab) < 0) - return -1; - return 0; - } - if (isl_tab_rollback(tab, snap) < 0) - return -1; - return 0; - } - - if (restore_lexmin(tab) < 0) - return -1; - if (tab->empty) - return 0; - - isl_seq_neg(eq, eq, 1 + tab->n_var); - - r2 = isl_tab_add_row(tab, eq); - if (r2 < 0) - return -1; - tab->con[r2].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r2]) < 0) - return -1; - - if (restore_lexmin(tab) < 0) - return -1; - if (tab->empty) - return 0; - - if (!tab->con[r1].is_row) { - if (isl_tab_kill_col(tab, tab->con[r1].index) < 0) - return -1; - } else if (!tab->con[r2].is_row) { - if (isl_tab_kill_col(tab, tab->con[r2].index) < 0) - return -1; - } - - if (tab->bmap) { - tab->bmap = isl_basic_map_add_ineq(tab->bmap, eq); - if (isl_tab_push(tab, isl_tab_undo_bmap_ineq) < 0) - return -1; - isl_seq_neg(eq, eq, 1 + tab->n_var); - tab->bmap = isl_basic_map_add_ineq(tab->bmap, eq); - isl_seq_neg(eq, eq, 1 + tab->n_var); - if (isl_tab_push(tab, isl_tab_undo_bmap_ineq) < 0) - return -1; - if (!tab->bmap) - return -1; - } - - return 0; -} - -/* Add an inequality to the tableau, resolving violations using - * restore_lexmin. - */ -static struct isl_tab *add_lexmin_ineq(struct isl_tab *tab, isl_int *ineq) -{ - int r; - - if (!tab) - return NULL; - if (tab->bmap) { - tab->bmap = isl_basic_map_add_ineq(tab->bmap, ineq); - if (isl_tab_push(tab, isl_tab_undo_bmap_ineq) < 0) - goto error; - if (!tab->bmap) - goto error; - } - r = isl_tab_add_row(tab, ineq); - if (r < 0) - goto error; - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - goto error; - if (isl_tab_row_is_redundant(tab, tab->con[r].index)) { - if (isl_tab_mark_redundant(tab, tab->con[r].index) < 0) - goto error; - return tab; - } - - if (restore_lexmin(tab) < 0) - goto error; - if (!tab->empty && tab->con[r].is_row && - isl_tab_row_is_redundant(tab, tab->con[r].index)) - if (isl_tab_mark_redundant(tab, tab->con[r].index) < 0) - goto error; - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Check if the coefficients of the parameters are all integral. - */ -static int integer_parameter(struct isl_tab *tab, int row) -{ - int i; - int col; - unsigned off = 2 + tab->M; - - for (i = 0; i < tab->n_param; ++i) { - /* Eliminated parameter */ - if (tab->var[i].is_row) - continue; - col = tab->var[i].index; - if (!isl_int_is_divisible_by(tab->mat->row[row][off + col], - tab->mat->row[row][0])) - return 0; - } - for (i = 0; i < tab->n_div; ++i) { - if (tab->var[tab->n_var - tab->n_div + i].is_row) - continue; - col = tab->var[tab->n_var - tab->n_div + i].index; - if (!isl_int_is_divisible_by(tab->mat->row[row][off + col], - tab->mat->row[row][0])) - return 0; - } - return 1; -} - -/* Check if the coefficients of the non-parameter variables are all integral. - */ -static int integer_variable(struct isl_tab *tab, int row) -{ - int i; - unsigned off = 2 + tab->M; - - for (i = tab->n_dead; i < tab->n_col; ++i) { - if (tab->col_var[i] >= 0 && - (tab->col_var[i] < tab->n_param || - tab->col_var[i] >= tab->n_var - tab->n_div)) - continue; - if (!isl_int_is_divisible_by(tab->mat->row[row][off + i], - tab->mat->row[row][0])) - return 0; - } - return 1; -} - -/* Check if the constant term is integral. - */ -static int integer_constant(struct isl_tab *tab, int row) -{ - return isl_int_is_divisible_by(tab->mat->row[row][1], - tab->mat->row[row][0]); -} - -#define I_CST 1 << 0 -#define I_PAR 1 << 1 -#define I_VAR 1 << 2 - -/* Check for next (non-parameter) variable after "var" (first if var == -1) - * that is non-integer and therefore requires a cut and return - * the index of the variable. - * For parametric tableaus, there are three parts in a row, - * the constant, the coefficients of the parameters and the rest. - * For each part, we check whether the coefficients in that part - * are all integral and if so, set the corresponding flag in *f. - * If the constant and the parameter part are integral, then the - * current sample value is integral and no cut is required - * (irrespective of whether the variable part is integral). - */ -static int next_non_integer_var(struct isl_tab *tab, int var, int *f) -{ - var = var < 0 ? tab->n_param : var + 1; - - for (; var < tab->n_var - tab->n_div; ++var) { - int flags = 0; - int row; - if (!tab->var[var].is_row) - continue; - row = tab->var[var].index; - if (integer_constant(tab, row)) - ISL_FL_SET(flags, I_CST); - if (integer_parameter(tab, row)) - ISL_FL_SET(flags, I_PAR); - if (ISL_FL_ISSET(flags, I_CST) && ISL_FL_ISSET(flags, I_PAR)) - continue; - if (integer_variable(tab, row)) - ISL_FL_SET(flags, I_VAR); - *f = flags; - return var; - } - return -1; -} - -/* Check for first (non-parameter) variable that is non-integer and - * therefore requires a cut and return the corresponding row. - * For parametric tableaus, there are three parts in a row, - * the constant, the coefficients of the parameters and the rest. - * For each part, we check whether the coefficients in that part - * are all integral and if so, set the corresponding flag in *f. - * If the constant and the parameter part are integral, then the - * current sample value is integral and no cut is required - * (irrespective of whether the variable part is integral). - */ -static int first_non_integer_row(struct isl_tab *tab, int *f) -{ - int var = next_non_integer_var(tab, -1, f); - - return var < 0 ? -1 : tab->var[var].index; -} - -/* Add a (non-parametric) cut to cut away the non-integral sample - * value of the given row. - * - * If the row is given by - * - * m r = f + \sum_i a_i y_i - * - * then the cut is - * - * c = - {-f/m} + \sum_i {a_i/m} y_i >= 0 - * - * The big parameter, if any, is ignored, since it is assumed to be big - * enough to be divisible by any integer. - * If the tableau is actually a parametric tableau, then this function - * is only called when all coefficients of the parameters are integral. - * The cut therefore has zero coefficients for the parameters. - * - * The current value is known to be negative, so row_sign, if it - * exists, is set accordingly. - * - * Return the row of the cut or -1. - */ -static int add_cut(struct isl_tab *tab, int row) -{ - int i; - int r; - isl_int *r_row; - unsigned off = 2 + tab->M; - - if (isl_tab_extend_cons(tab, 1) < 0) - return -1; - r = isl_tab_allocate_con(tab); - if (r < 0) - return -1; - - r_row = tab->mat->row[tab->con[r].index]; - isl_int_set(r_row[0], tab->mat->row[row][0]); - isl_int_neg(r_row[1], tab->mat->row[row][1]); - isl_int_fdiv_r(r_row[1], r_row[1], tab->mat->row[row][0]); - isl_int_neg(r_row[1], r_row[1]); - if (tab->M) - isl_int_set_si(r_row[2], 0); - for (i = 0; i < tab->n_col; ++i) - isl_int_fdiv_r(r_row[off + i], - tab->mat->row[row][off + i], tab->mat->row[row][0]); - - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - return -1; - if (tab->row_sign) - tab->row_sign[tab->con[r].index] = isl_tab_row_neg; - - return tab->con[r].index; -} - -/* Given a non-parametric tableau, add cuts until an integer - * sample point is obtained or until the tableau is determined - * to be integer infeasible. - * As long as there is any non-integer value in the sample point, - * we add appropriate cuts, if possible, for each of these - * non-integer values and then resolve the violated - * cut constraints using restore_lexmin. - * If one of the corresponding rows is equal to an integral - * combination of variables/constraints plus a non-integral constant, - * then there is no way to obtain an integer point and we return - * a tableau that is marked empty. - */ -static struct isl_tab *cut_to_integer_lexmin(struct isl_tab *tab) -{ - int var; - int row; - int flags; - - if (!tab) - return NULL; - if (tab->empty) - return tab; - - while ((var = next_non_integer_var(tab, -1, &flags)) != -1) { - do { - if (ISL_FL_ISSET(flags, I_VAR)) { - if (isl_tab_mark_empty(tab) < 0) - goto error; - return tab; - } - row = tab->var[var].index; - row = add_cut(tab, row); - if (row < 0) - goto error; - } while ((var = next_non_integer_var(tab, var, &flags)) != -1); - if (restore_lexmin(tab) < 0) - goto error; - if (tab->empty) - break; - } - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Check whether all the currently active samples also satisfy the inequality - * "ineq" (treated as an equality if eq is set). - * Remove those samples that do not. - */ -static struct isl_tab *check_samples(struct isl_tab *tab, isl_int *ineq, int eq) -{ - int i; - isl_int v; - - if (!tab) - return NULL; - - isl_assert(tab->mat->ctx, tab->bmap, goto error); - isl_assert(tab->mat->ctx, tab->samples, goto error); - isl_assert(tab->mat->ctx, tab->samples->n_col == 1 + tab->n_var, goto error); - - isl_int_init(v); - for (i = tab->n_outside; i < tab->n_sample; ++i) { - int sgn; - isl_seq_inner_product(ineq, tab->samples->row[i], - 1 + tab->n_var, &v); - sgn = isl_int_sgn(v); - if (eq ? (sgn == 0) : (sgn >= 0)) - continue; - tab = isl_tab_drop_sample(tab, i); - if (!tab) - break; - } - isl_int_clear(v); - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Check whether the sample value of the tableau is finite, - * i.e., either the tableau does not use a big parameter, or - * all values of the variables are equal to the big parameter plus - * some constant. This constant is the actual sample value. - */ -static int sample_is_finite(struct isl_tab *tab) -{ - int i; - - if (!tab->M) - return 1; - - for (i = 0; i < tab->n_var; ++i) { - int row; - if (!tab->var[i].is_row) - return 0; - row = tab->var[i].index; - if (isl_int_ne(tab->mat->row[row][0], tab->mat->row[row][2])) - return 0; - } - return 1; -} - -/* Check if the context tableau of sol has any integer points. - * Leave tab in empty state if no integer point can be found. - * If an integer point can be found and if moreover it is finite, - * then it is added to the list of sample values. - * - * This function is only called when none of the currently active sample - * values satisfies the most recently added constraint. - */ -static struct isl_tab *check_integer_feasible(struct isl_tab *tab) -{ - struct isl_tab_undo *snap; - - if (!tab) - return NULL; - - snap = isl_tab_snap(tab); - if (isl_tab_push_basis(tab) < 0) - goto error; - - tab = cut_to_integer_lexmin(tab); - if (!tab) - goto error; - - if (!tab->empty && sample_is_finite(tab)) { - struct isl_vec *sample; - - sample = isl_tab_get_sample_value(tab); - - tab = isl_tab_add_sample(tab, sample); - } - - if (!tab->empty && isl_tab_rollback(tab, snap) < 0) - goto error; - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Check if any of the currently active sample values satisfies - * the inequality "ineq" (an equality if eq is set). - */ -static int tab_has_valid_sample(struct isl_tab *tab, isl_int *ineq, int eq) -{ - int i; - isl_int v; - - if (!tab) - return -1; - - isl_assert(tab->mat->ctx, tab->bmap, return -1); - isl_assert(tab->mat->ctx, tab->samples, return -1); - isl_assert(tab->mat->ctx, tab->samples->n_col == 1 + tab->n_var, return -1); - - isl_int_init(v); - for (i = tab->n_outside; i < tab->n_sample; ++i) { - int sgn; - isl_seq_inner_product(ineq, tab->samples->row[i], - 1 + tab->n_var, &v); - sgn = isl_int_sgn(v); - if (eq ? (sgn == 0) : (sgn >= 0)) - break; - } - isl_int_clear(v); - - return i < tab->n_sample; -} - -/* Add a div specified by "div" to the tableau "tab" and return - * 1 if the div is obviously non-negative. - */ -static int context_tab_add_div(struct isl_tab *tab, struct isl_vec *div, - int (*add_ineq)(void *user, isl_int *), void *user) -{ - int i; - int r; - struct isl_mat *samples; - int nonneg; - - r = isl_tab_add_div(tab, div, add_ineq, user); - if (r < 0) - return -1; - nonneg = tab->var[r].is_nonneg; - tab->var[r].frozen = 1; - - samples = isl_mat_extend(tab->samples, - tab->n_sample, 1 + tab->n_var); - tab->samples = samples; - if (!samples) - return -1; - for (i = tab->n_outside; i < samples->n_row; ++i) { - isl_seq_inner_product(div->el + 1, samples->row[i], - div->size - 1, &samples->row[i][samples->n_col - 1]); - isl_int_fdiv_q(samples->row[i][samples->n_col - 1], - samples->row[i][samples->n_col - 1], div->el[0]); - } - - return nonneg; -} - -/* Add a div specified by "div" to both the main tableau and - * the context tableau. In case of the main tableau, we only - * need to add an extra div. In the context tableau, we also - * need to express the meaning of the div. - * Return the index of the div or -1 if anything went wrong. - */ -static int add_div(struct isl_tab *tab, struct isl_context *context, - struct isl_vec *div) -{ - int r; - int nonneg; - - if ((nonneg = context->op->add_div(context, div)) < 0) - goto error; - - if (!context->op->is_ok(context)) - goto error; - - if (isl_tab_extend_vars(tab, 1) < 0) - goto error; - r = isl_tab_allocate_var(tab); - if (r < 0) - goto error; - if (nonneg) - tab->var[r].is_nonneg = 1; - tab->var[r].frozen = 1; - tab->n_div++; - - return tab->n_div - 1; -error: - context->op->invalidate(context); - return -1; -} - -static int find_div(struct isl_tab *tab, isl_int *div, isl_int denom) -{ - int i; - unsigned total = isl_basic_map_total_dim(tab->bmap); - - for (i = 0; i < tab->bmap->n_div; ++i) { - if (isl_int_ne(tab->bmap->div[i][0], denom)) - continue; - if (!isl_seq_eq(tab->bmap->div[i] + 1, div, 1 + total)) - continue; - return i; - } - return -1; -} - -/* Return the index of a div that corresponds to "div". - * We first check if we already have such a div and if not, we create one. - */ -static int get_div(struct isl_tab *tab, struct isl_context *context, - struct isl_vec *div) -{ - int d; - struct isl_tab *context_tab = context->op->peek_tab(context); - - if (!context_tab) - return -1; - - d = find_div(context_tab, div->el + 1, div->el[0]); - if (d != -1) - return d; - - return add_div(tab, context, div); -} - -/* Add a parametric cut to cut away the non-integral sample value - * of the give row. - * Let a_i be the coefficients of the constant term and the parameters - * and let b_i be the coefficients of the variables or constraints - * in basis of the tableau. - * Let q be the div q = floor(\sum_i {-a_i} y_i). - * - * The cut is expressed as - * - * c = \sum_i -{-a_i} y_i + \sum_i {b_i} x_i + q >= 0 - * - * If q did not already exist in the context tableau, then it is added first. - * If q is in a column of the main tableau then the "+ q" can be accomplished - * by setting the corresponding entry to the denominator of the constraint. - * If q happens to be in a row of the main tableau, then the corresponding - * row needs to be added instead (taking care of the denominators). - * Note that this is very unlikely, but perhaps not entirely impossible. - * - * The current value of the cut is known to be negative (or at least - * non-positive), so row_sign is set accordingly. - * - * Return the row of the cut or -1. - */ -static int add_parametric_cut(struct isl_tab *tab, int row, - struct isl_context *context) -{ - struct isl_vec *div; - int d; - int i; - int r; - isl_int *r_row; - int col; - int n; - unsigned off = 2 + tab->M; - - if (!context) - return -1; - - div = get_row_parameter_div(tab, row); - if (!div) - return -1; - - n = tab->n_div; - d = context->op->get_div(context, tab, div); - if (d < 0) - return -1; - - if (isl_tab_extend_cons(tab, 1) < 0) - return -1; - r = isl_tab_allocate_con(tab); - if (r < 0) - return -1; - - r_row = tab->mat->row[tab->con[r].index]; - isl_int_set(r_row[0], tab->mat->row[row][0]); - isl_int_neg(r_row[1], tab->mat->row[row][1]); - isl_int_fdiv_r(r_row[1], r_row[1], tab->mat->row[row][0]); - isl_int_neg(r_row[1], r_row[1]); - if (tab->M) - isl_int_set_si(r_row[2], 0); - for (i = 0; i < tab->n_param; ++i) { - if (tab->var[i].is_row) - continue; - col = tab->var[i].index; - isl_int_neg(r_row[off + col], tab->mat->row[row][off + col]); - isl_int_fdiv_r(r_row[off + col], r_row[off + col], - tab->mat->row[row][0]); - isl_int_neg(r_row[off + col], r_row[off + col]); - } - for (i = 0; i < tab->n_div; ++i) { - if (tab->var[tab->n_var - tab->n_div + i].is_row) - continue; - col = tab->var[tab->n_var - tab->n_div + i].index; - isl_int_neg(r_row[off + col], tab->mat->row[row][off + col]); - isl_int_fdiv_r(r_row[off + col], r_row[off + col], - tab->mat->row[row][0]); - isl_int_neg(r_row[off + col], r_row[off + col]); - } - for (i = 0; i < tab->n_col; ++i) { - if (tab->col_var[i] >= 0 && - (tab->col_var[i] < tab->n_param || - tab->col_var[i] >= tab->n_var - tab->n_div)) - continue; - isl_int_fdiv_r(r_row[off + i], - tab->mat->row[row][off + i], tab->mat->row[row][0]); - } - if (tab->var[tab->n_var - tab->n_div + d].is_row) { - isl_int gcd; - int d_row = tab->var[tab->n_var - tab->n_div + d].index; - isl_int_init(gcd); - isl_int_gcd(gcd, tab->mat->row[d_row][0], r_row[0]); - isl_int_divexact(r_row[0], r_row[0], gcd); - isl_int_divexact(gcd, tab->mat->row[d_row][0], gcd); - isl_seq_combine(r_row + 1, gcd, r_row + 1, - r_row[0], tab->mat->row[d_row] + 1, - off - 1 + tab->n_col); - isl_int_mul(r_row[0], r_row[0], tab->mat->row[d_row][0]); - isl_int_clear(gcd); - } else { - col = tab->var[tab->n_var - tab->n_div + d].index; - isl_int_set(r_row[off + col], tab->mat->row[row][0]); - } - - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - return -1; - if (tab->row_sign) - tab->row_sign[tab->con[r].index] = isl_tab_row_neg; - - isl_vec_free(div); - - row = tab->con[r].index; - - if (d >= n && context->op->detect_equalities(context, tab) < 0) - return -1; - - return row; -} - -/* Construct a tableau for bmap that can be used for computing - * the lexicographic minimum (or maximum) of bmap. - * If not NULL, then dom is the domain where the minimum - * should be computed. In this case, we set up a parametric - * tableau with row signs (initialized to "unknown"). - * If M is set, then the tableau will use a big parameter. - * If max is set, then a maximum should be computed instead of a minimum. - * This means that for each variable x, the tableau will contain the variable - * x' = M - x, rather than x' = M + x. This in turn means that the coefficient - * of the variables in all constraints are negated prior to adding them - * to the tableau. - */ -static struct isl_tab *tab_for_lexmin(struct isl_basic_map *bmap, - struct isl_basic_set *dom, unsigned M, int max) -{ - int i; - struct isl_tab *tab; - - tab = isl_tab_alloc(bmap->ctx, 2 * bmap->n_eq + bmap->n_ineq + 1, - isl_basic_map_total_dim(bmap), M); - if (!tab) - return NULL; - - tab->rational = ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL); - if (dom) { - tab->n_param = isl_basic_set_total_dim(dom) - dom->n_div; - tab->n_div = dom->n_div; - tab->row_sign = isl_calloc_array(bmap->ctx, - enum isl_tab_row_sign, tab->mat->n_row); - if (!tab->row_sign) - goto error; - } - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) { - if (isl_tab_mark_empty(tab) < 0) - goto error; - return tab; - } - - for (i = tab->n_param; i < tab->n_var - tab->n_div; ++i) { - tab->var[i].is_nonneg = 1; - tab->var[i].frozen = 1; - } - for (i = 0; i < bmap->n_eq; ++i) { - if (max) - isl_seq_neg(bmap->eq[i] + 1 + tab->n_param, - bmap->eq[i] + 1 + tab->n_param, - tab->n_var - tab->n_param - tab->n_div); - tab = add_lexmin_valid_eq(tab, bmap->eq[i]); - if (max) - isl_seq_neg(bmap->eq[i] + 1 + tab->n_param, - bmap->eq[i] + 1 + tab->n_param, - tab->n_var - tab->n_param - tab->n_div); - if (!tab || tab->empty) - return tab; - } - if (bmap->n_eq && restore_lexmin(tab) < 0) - goto error; - for (i = 0; i < bmap->n_ineq; ++i) { - if (max) - isl_seq_neg(bmap->ineq[i] + 1 + tab->n_param, - bmap->ineq[i] + 1 + tab->n_param, - tab->n_var - tab->n_param - tab->n_div); - tab = add_lexmin_ineq(tab, bmap->ineq[i]); - if (max) - isl_seq_neg(bmap->ineq[i] + 1 + tab->n_param, - bmap->ineq[i] + 1 + tab->n_param, - tab->n_var - tab->n_param - tab->n_div); - if (!tab || tab->empty) - return tab; - } - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Given a main tableau where more than one row requires a split, - * determine and return the "best" row to split on. - * - * Given two rows in the main tableau, if the inequality corresponding - * to the first row is redundant with respect to that of the second row - * in the current tableau, then it is better to split on the second row, - * since in the positive part, both row will be positive. - * (In the negative part a pivot will have to be performed and just about - * anything can happen to the sign of the other row.) - * - * As a simple heuristic, we therefore select the row that makes the most - * of the other rows redundant. - * - * Perhaps it would also be useful to look at the number of constraints - * that conflict with any given constraint. - */ -static int best_split(struct isl_tab *tab, struct isl_tab *context_tab) -{ - struct isl_tab_undo *snap; - int split; - int row; - int best = -1; - int best_r; - - if (isl_tab_extend_cons(context_tab, 2) < 0) - return -1; - - snap = isl_tab_snap(context_tab); - - for (split = tab->n_redundant; split < tab->n_row; ++split) { - struct isl_tab_undo *snap2; - struct isl_vec *ineq = NULL; - int r = 0; - int ok; - - if (!isl_tab_var_from_row(tab, split)->is_nonneg) - continue; - if (tab->row_sign[split] != isl_tab_row_any) - continue; - - ineq = get_row_parameter_ineq(tab, split); - if (!ineq) - return -1; - ok = isl_tab_add_ineq(context_tab, ineq->el) >= 0; - isl_vec_free(ineq); - if (!ok) - return -1; - - snap2 = isl_tab_snap(context_tab); - - for (row = tab->n_redundant; row < tab->n_row; ++row) { - struct isl_tab_var *var; - - if (row == split) - continue; - if (!isl_tab_var_from_row(tab, row)->is_nonneg) - continue; - if (tab->row_sign[row] != isl_tab_row_any) - continue; - - ineq = get_row_parameter_ineq(tab, row); - if (!ineq) - return -1; - ok = isl_tab_add_ineq(context_tab, ineq->el) >= 0; - isl_vec_free(ineq); - if (!ok) - return -1; - var = &context_tab->con[context_tab->n_con - 1]; - if (!context_tab->empty && - !isl_tab_min_at_most_neg_one(context_tab, var)) - r++; - if (isl_tab_rollback(context_tab, snap2) < 0) - return -1; - } - if (best == -1 || r > best_r) { - best = split; - best_r = r; - } - if (isl_tab_rollback(context_tab, snap) < 0) - return -1; - } - - return best; -} - -static struct isl_basic_set *context_lex_peek_basic_set( - struct isl_context *context) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - if (!clex->tab) - return NULL; - return isl_tab_peek_bset(clex->tab); -} - -static struct isl_tab *context_lex_peek_tab(struct isl_context *context) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - return clex->tab; -} - -static void context_lex_add_eq(struct isl_context *context, isl_int *eq, - int check, int update) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - if (isl_tab_extend_cons(clex->tab, 2) < 0) - goto error; - if (add_lexmin_eq(clex->tab, eq) < 0) - goto error; - if (check) { - int v = tab_has_valid_sample(clex->tab, eq, 1); - if (v < 0) - goto error; - if (!v) - clex->tab = check_integer_feasible(clex->tab); - } - if (update) - clex->tab = check_samples(clex->tab, eq, 1); - return; -error: - isl_tab_free(clex->tab); - clex->tab = NULL; -} - -static void context_lex_add_ineq(struct isl_context *context, isl_int *ineq, - int check, int update) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - if (isl_tab_extend_cons(clex->tab, 1) < 0) - goto error; - clex->tab = add_lexmin_ineq(clex->tab, ineq); - if (check) { - int v = tab_has_valid_sample(clex->tab, ineq, 0); - if (v < 0) - goto error; - if (!v) - clex->tab = check_integer_feasible(clex->tab); - } - if (update) - clex->tab = check_samples(clex->tab, ineq, 0); - return; -error: - isl_tab_free(clex->tab); - clex->tab = NULL; -} - -static int context_lex_add_ineq_wrap(void *user, isl_int *ineq) -{ - struct isl_context *context = (struct isl_context *)user; - context_lex_add_ineq(context, ineq, 0, 0); - return context->op->is_ok(context) ? 0 : -1; -} - -/* Check which signs can be obtained by "ineq" on all the currently - * active sample values. See row_sign for more information. - */ -static enum isl_tab_row_sign tab_ineq_sign(struct isl_tab *tab, isl_int *ineq, - int strict) -{ - int i; - int sgn; - isl_int tmp; - enum isl_tab_row_sign res = isl_tab_row_unknown; - - isl_assert(tab->mat->ctx, tab->samples, return isl_tab_row_unknown); - isl_assert(tab->mat->ctx, tab->samples->n_col == 1 + tab->n_var, - return isl_tab_row_unknown); - - isl_int_init(tmp); - for (i = tab->n_outside; i < tab->n_sample; ++i) { - isl_seq_inner_product(tab->samples->row[i], ineq, - 1 + tab->n_var, &tmp); - sgn = isl_int_sgn(tmp); - if (sgn > 0 || (sgn == 0 && strict)) { - if (res == isl_tab_row_unknown) - res = isl_tab_row_pos; - if (res == isl_tab_row_neg) - res = isl_tab_row_any; - } - if (sgn < 0) { - if (res == isl_tab_row_unknown) - res = isl_tab_row_neg; - if (res == isl_tab_row_pos) - res = isl_tab_row_any; - } - if (res == isl_tab_row_any) - break; - } - isl_int_clear(tmp); - - return res; -} - -static enum isl_tab_row_sign context_lex_ineq_sign(struct isl_context *context, - isl_int *ineq, int strict) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - return tab_ineq_sign(clex->tab, ineq, strict); -} - -/* Check whether "ineq" can be added to the tableau without rendering - * it infeasible. - */ -static int context_lex_test_ineq(struct isl_context *context, isl_int *ineq) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - struct isl_tab_undo *snap; - int feasible; - - if (!clex->tab) - return -1; - - if (isl_tab_extend_cons(clex->tab, 1) < 0) - return -1; - - snap = isl_tab_snap(clex->tab); - if (isl_tab_push_basis(clex->tab) < 0) - return -1; - clex->tab = add_lexmin_ineq(clex->tab, ineq); - clex->tab = check_integer_feasible(clex->tab); - if (!clex->tab) - return -1; - feasible = !clex->tab->empty; - if (isl_tab_rollback(clex->tab, snap) < 0) - return -1; - - return feasible; -} - -static int context_lex_get_div(struct isl_context *context, struct isl_tab *tab, - struct isl_vec *div) -{ - return get_div(tab, context, div); -} - -/* Add a div specified by "div" to the context tableau and return - * 1 if the div is obviously non-negative. - * context_tab_add_div will always return 1, because all variables - * in a isl_context_lex tableau are non-negative. - * However, if we are using a big parameter in the context, then this only - * reflects the non-negativity of the variable used to _encode_ the - * div, i.e., div' = M + div, so we can't draw any conclusions. - */ -static int context_lex_add_div(struct isl_context *context, struct isl_vec *div) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - int nonneg; - nonneg = context_tab_add_div(clex->tab, div, - context_lex_add_ineq_wrap, context); - if (nonneg < 0) - return -1; - if (clex->tab->M) - return 0; - return nonneg; -} - -static int context_lex_detect_equalities(struct isl_context *context, - struct isl_tab *tab) -{ - return 0; -} - -static int context_lex_best_split(struct isl_context *context, - struct isl_tab *tab) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - struct isl_tab_undo *snap; - int r; - - snap = isl_tab_snap(clex->tab); - if (isl_tab_push_basis(clex->tab) < 0) - return -1; - r = best_split(tab, clex->tab); - - if (r >= 0 && isl_tab_rollback(clex->tab, snap) < 0) - return -1; - - return r; -} - -static int context_lex_is_empty(struct isl_context *context) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - if (!clex->tab) - return -1; - return clex->tab->empty; -} - -static void *context_lex_save(struct isl_context *context) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - struct isl_tab_undo *snap; - - snap = isl_tab_snap(clex->tab); - if (isl_tab_push_basis(clex->tab) < 0) - return NULL; - if (isl_tab_save_samples(clex->tab) < 0) - return NULL; - - return snap; -} - -static void context_lex_restore(struct isl_context *context, void *save) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - if (isl_tab_rollback(clex->tab, (struct isl_tab_undo *)save) < 0) { - isl_tab_free(clex->tab); - clex->tab = NULL; - } -} - -static int context_lex_is_ok(struct isl_context *context) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - return !!clex->tab; -} - -/* For each variable in the context tableau, check if the variable can - * only attain non-negative values. If so, mark the parameter as non-negative - * in the main tableau. This allows for a more direct identification of some - * cases of violated constraints. - */ -static struct isl_tab *tab_detect_nonnegative_parameters(struct isl_tab *tab, - struct isl_tab *context_tab) -{ - int i; - struct isl_tab_undo *snap; - struct isl_vec *ineq = NULL; - struct isl_tab_var *var; - int n; - - if (context_tab->n_var == 0) - return tab; - - ineq = isl_vec_alloc(tab->mat->ctx, 1 + context_tab->n_var); - if (!ineq) - goto error; - - if (isl_tab_extend_cons(context_tab, 1) < 0) - goto error; - - snap = isl_tab_snap(context_tab); - - n = 0; - isl_seq_clr(ineq->el, ineq->size); - for (i = 0; i < context_tab->n_var; ++i) { - isl_int_set_si(ineq->el[1 + i], 1); - if (isl_tab_add_ineq(context_tab, ineq->el) < 0) - goto error; - var = &context_tab->con[context_tab->n_con - 1]; - if (!context_tab->empty && - !isl_tab_min_at_most_neg_one(context_tab, var)) { - int j = i; - if (i >= tab->n_param) - j = i - tab->n_param + tab->n_var - tab->n_div; - tab->var[j].is_nonneg = 1; - n++; - } - isl_int_set_si(ineq->el[1 + i], 0); - if (isl_tab_rollback(context_tab, snap) < 0) - goto error; - } - - if (context_tab->M && n == context_tab->n_var) { - context_tab->mat = isl_mat_drop_cols(context_tab->mat, 2, 1); - context_tab->M = 0; - } - - isl_vec_free(ineq); - return tab; -error: - isl_vec_free(ineq); - isl_tab_free(tab); - return NULL; -} - -static struct isl_tab *context_lex_detect_nonnegative_parameters( - struct isl_context *context, struct isl_tab *tab) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - struct isl_tab_undo *snap; - - if (!tab) - return NULL; - - snap = isl_tab_snap(clex->tab); - if (isl_tab_push_basis(clex->tab) < 0) - goto error; - - tab = tab_detect_nonnegative_parameters(tab, clex->tab); - - if (isl_tab_rollback(clex->tab, snap) < 0) - goto error; - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -static void context_lex_invalidate(struct isl_context *context) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - isl_tab_free(clex->tab); - clex->tab = NULL; -} - -static void context_lex_free(struct isl_context *context) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - isl_tab_free(clex->tab); - free(clex); -} - -struct isl_context_op isl_context_lex_op = { - context_lex_detect_nonnegative_parameters, - context_lex_peek_basic_set, - context_lex_peek_tab, - context_lex_add_eq, - context_lex_add_ineq, - context_lex_ineq_sign, - context_lex_test_ineq, - context_lex_get_div, - context_lex_add_div, - context_lex_detect_equalities, - context_lex_best_split, - context_lex_is_empty, - context_lex_is_ok, - context_lex_save, - context_lex_restore, - context_lex_invalidate, - context_lex_free, -}; - -static struct isl_tab *context_tab_for_lexmin(struct isl_basic_set *bset) -{ - struct isl_tab *tab; - - bset = isl_basic_set_cow(bset); - if (!bset) - return NULL; - tab = tab_for_lexmin((struct isl_basic_map *)bset, NULL, 1, 0); - if (!tab) - goto error; - if (isl_tab_track_bset(tab, bset) < 0) - goto error; - tab = isl_tab_init_samples(tab); - return tab; -error: - isl_basic_set_free(bset); - return NULL; -} - -static struct isl_context *isl_context_lex_alloc(struct isl_basic_set *dom) -{ - struct isl_context_lex *clex; - - if (!dom) - return NULL; - - clex = isl_alloc_type(dom->ctx, struct isl_context_lex); - if (!clex) - return NULL; - - clex->context.op = &isl_context_lex_op; - - clex->tab = context_tab_for_lexmin(isl_basic_set_copy(dom)); - if (restore_lexmin(clex->tab) < 0) - goto error; - clex->tab = check_integer_feasible(clex->tab); - if (!clex->tab) - goto error; - - return &clex->context; -error: - clex->context.op->free(&clex->context); - return NULL; -} - -struct isl_context_gbr { - struct isl_context context; - struct isl_tab *tab; - struct isl_tab *shifted; - struct isl_tab *cone; -}; - -static struct isl_tab *context_gbr_detect_nonnegative_parameters( - struct isl_context *context, struct isl_tab *tab) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - if (!tab) - return NULL; - return tab_detect_nonnegative_parameters(tab, cgbr->tab); -} - -static struct isl_basic_set *context_gbr_peek_basic_set( - struct isl_context *context) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - if (!cgbr->tab) - return NULL; - return isl_tab_peek_bset(cgbr->tab); -} - -static struct isl_tab *context_gbr_peek_tab(struct isl_context *context) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - return cgbr->tab; -} - -/* Initialize the "shifted" tableau of the context, which - * contains the constraints of the original tableau shifted - * by the sum of all negative coefficients. This ensures - * that any rational point in the shifted tableau can - * be rounded up to yield an integer point in the original tableau. - */ -static void gbr_init_shifted(struct isl_context_gbr *cgbr) -{ - int i, j; - struct isl_vec *cst; - struct isl_basic_set *bset = isl_tab_peek_bset(cgbr->tab); - unsigned dim = isl_basic_set_total_dim(bset); - - cst = isl_vec_alloc(cgbr->tab->mat->ctx, bset->n_ineq); - if (!cst) - return; - - for (i = 0; i < bset->n_ineq; ++i) { - isl_int_set(cst->el[i], bset->ineq[i][0]); - for (j = 0; j < dim; ++j) { - if (!isl_int_is_neg(bset->ineq[i][1 + j])) - continue; - isl_int_add(bset->ineq[i][0], bset->ineq[i][0], - bset->ineq[i][1 + j]); - } - } - - cgbr->shifted = isl_tab_from_basic_set(bset); - - for (i = 0; i < bset->n_ineq; ++i) - isl_int_set(bset->ineq[i][0], cst->el[i]); - - isl_vec_free(cst); -} - -/* Check if the shifted tableau is non-empty, and if so - * use the sample point to construct an integer point - * of the context tableau. - */ -static struct isl_vec *gbr_get_shifted_sample(struct isl_context_gbr *cgbr) -{ - struct isl_vec *sample; - - if (!cgbr->shifted) - gbr_init_shifted(cgbr); - if (!cgbr->shifted) - return NULL; - if (cgbr->shifted->empty) - return isl_vec_alloc(cgbr->tab->mat->ctx, 0); - - sample = isl_tab_get_sample_value(cgbr->shifted); - sample = isl_vec_ceil(sample); - - return sample; -} - -static struct isl_basic_set *drop_constant_terms(struct isl_basic_set *bset) -{ - int i; - - if (!bset) - return NULL; - - for (i = 0; i < bset->n_eq; ++i) - isl_int_set_si(bset->eq[i][0], 0); - - for (i = 0; i < bset->n_ineq; ++i) - isl_int_set_si(bset->ineq[i][0], 0); - - return bset; -} - -static int use_shifted(struct isl_context_gbr *cgbr) -{ - return cgbr->tab->bmap->n_eq == 0 && cgbr->tab->bmap->n_div == 0; -} - -static struct isl_vec *gbr_get_sample(struct isl_context_gbr *cgbr) -{ - struct isl_basic_set *bset; - struct isl_basic_set *cone; - - if (isl_tab_sample_is_integer(cgbr->tab)) - return isl_tab_get_sample_value(cgbr->tab); - - if (use_shifted(cgbr)) { - struct isl_vec *sample; - - sample = gbr_get_shifted_sample(cgbr); - if (!sample || sample->size > 0) - return sample; - - isl_vec_free(sample); - } - - if (!cgbr->cone) { - bset = isl_tab_peek_bset(cgbr->tab); - cgbr->cone = isl_tab_from_recession_cone(bset, 0); - if (!cgbr->cone) - return NULL; - if (isl_tab_track_bset(cgbr->cone, isl_basic_set_dup(bset)) < 0) - return NULL; - } - if (isl_tab_detect_implicit_equalities(cgbr->cone) < 0) - return NULL; - - if (cgbr->cone->n_dead == cgbr->cone->n_col) { - struct isl_vec *sample; - struct isl_tab_undo *snap; - - if (cgbr->tab->basis) { - if (cgbr->tab->basis->n_col != 1 + cgbr->tab->n_var) { - isl_mat_free(cgbr->tab->basis); - cgbr->tab->basis = NULL; - } - cgbr->tab->n_zero = 0; - cgbr->tab->n_unbounded = 0; - } - - snap = isl_tab_snap(cgbr->tab); - - sample = isl_tab_sample(cgbr->tab); - - if (isl_tab_rollback(cgbr->tab, snap) < 0) { - isl_vec_free(sample); - return NULL; - } - - return sample; - } - - cone = isl_basic_set_dup(isl_tab_peek_bset(cgbr->cone)); - cone = drop_constant_terms(cone); - cone = isl_basic_set_update_from_tab(cone, cgbr->cone); - cone = isl_basic_set_underlying_set(cone); - cone = isl_basic_set_gauss(cone, NULL); - - bset = isl_basic_set_dup(isl_tab_peek_bset(cgbr->tab)); - bset = isl_basic_set_update_from_tab(bset, cgbr->tab); - bset = isl_basic_set_underlying_set(bset); - bset = isl_basic_set_gauss(bset, NULL); - - return isl_basic_set_sample_with_cone(bset, cone); -} - -static void check_gbr_integer_feasible(struct isl_context_gbr *cgbr) -{ - struct isl_vec *sample; - - if (!cgbr->tab) - return; - - if (cgbr->tab->empty) - return; - - sample = gbr_get_sample(cgbr); - if (!sample) - goto error; - - if (sample->size == 0) { - isl_vec_free(sample); - if (isl_tab_mark_empty(cgbr->tab) < 0) - goto error; - return; - } - - cgbr->tab = isl_tab_add_sample(cgbr->tab, sample); - - return; -error: - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; -} - -static struct isl_tab *add_gbr_eq(struct isl_tab *tab, isl_int *eq) -{ - if (!tab) - return NULL; - - if (isl_tab_extend_cons(tab, 2) < 0) - goto error; - - if (isl_tab_add_eq(tab, eq) < 0) - goto error; - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -static void context_gbr_add_eq(struct isl_context *context, isl_int *eq, - int check, int update) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - - cgbr->tab = add_gbr_eq(cgbr->tab, eq); - - if (cgbr->cone && cgbr->cone->n_col != cgbr->cone->n_dead) { - if (isl_tab_extend_cons(cgbr->cone, 2) < 0) - goto error; - if (isl_tab_add_eq(cgbr->cone, eq) < 0) - goto error; - } - - if (check) { - int v = tab_has_valid_sample(cgbr->tab, eq, 1); - if (v < 0) - goto error; - if (!v) - check_gbr_integer_feasible(cgbr); - } - if (update) - cgbr->tab = check_samples(cgbr->tab, eq, 1); - return; -error: - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; -} - -static void add_gbr_ineq(struct isl_context_gbr *cgbr, isl_int *ineq) -{ - if (!cgbr->tab) - return; - - if (isl_tab_extend_cons(cgbr->tab, 1) < 0) - goto error; - - if (isl_tab_add_ineq(cgbr->tab, ineq) < 0) - goto error; - - if (cgbr->shifted && !cgbr->shifted->empty && use_shifted(cgbr)) { - int i; - unsigned dim; - dim = isl_basic_map_total_dim(cgbr->tab->bmap); - - if (isl_tab_extend_cons(cgbr->shifted, 1) < 0) - goto error; - - for (i = 0; i < dim; ++i) { - if (!isl_int_is_neg(ineq[1 + i])) - continue; - isl_int_add(ineq[0], ineq[0], ineq[1 + i]); - } - - if (isl_tab_add_ineq(cgbr->shifted, ineq) < 0) - goto error; - - for (i = 0; i < dim; ++i) { - if (!isl_int_is_neg(ineq[1 + i])) - continue; - isl_int_sub(ineq[0], ineq[0], ineq[1 + i]); - } - } - - if (cgbr->cone && cgbr->cone->n_col != cgbr->cone->n_dead) { - if (isl_tab_extend_cons(cgbr->cone, 1) < 0) - goto error; - if (isl_tab_add_ineq(cgbr->cone, ineq) < 0) - goto error; - } - - return; -error: - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; -} - -static void context_gbr_add_ineq(struct isl_context *context, isl_int *ineq, - int check, int update) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - - add_gbr_ineq(cgbr, ineq); - if (!cgbr->tab) - return; - - if (check) { - int v = tab_has_valid_sample(cgbr->tab, ineq, 0); - if (v < 0) - goto error; - if (!v) - check_gbr_integer_feasible(cgbr); - } - if (update) - cgbr->tab = check_samples(cgbr->tab, ineq, 0); - return; -error: - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; -} - -static int context_gbr_add_ineq_wrap(void *user, isl_int *ineq) -{ - struct isl_context *context = (struct isl_context *)user; - context_gbr_add_ineq(context, ineq, 0, 0); - return context->op->is_ok(context) ? 0 : -1; -} - -static enum isl_tab_row_sign context_gbr_ineq_sign(struct isl_context *context, - isl_int *ineq, int strict) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - return tab_ineq_sign(cgbr->tab, ineq, strict); -} - -/* Check whether "ineq" can be added to the tableau without rendering - * it infeasible. - */ -static int context_gbr_test_ineq(struct isl_context *context, isl_int *ineq) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - struct isl_tab_undo *snap; - struct isl_tab_undo *shifted_snap = NULL; - struct isl_tab_undo *cone_snap = NULL; - int feasible; - - if (!cgbr->tab) - return -1; - - if (isl_tab_extend_cons(cgbr->tab, 1) < 0) - return -1; - - snap = isl_tab_snap(cgbr->tab); - if (cgbr->shifted) - shifted_snap = isl_tab_snap(cgbr->shifted); - if (cgbr->cone) - cone_snap = isl_tab_snap(cgbr->cone); - add_gbr_ineq(cgbr, ineq); - check_gbr_integer_feasible(cgbr); - if (!cgbr->tab) - return -1; - feasible = !cgbr->tab->empty; - if (isl_tab_rollback(cgbr->tab, snap) < 0) - return -1; - if (shifted_snap) { - if (isl_tab_rollback(cgbr->shifted, shifted_snap)) - return -1; - } else if (cgbr->shifted) { - isl_tab_free(cgbr->shifted); - cgbr->shifted = NULL; - } - if (cone_snap) { - if (isl_tab_rollback(cgbr->cone, cone_snap)) - return -1; - } else if (cgbr->cone) { - isl_tab_free(cgbr->cone); - cgbr->cone = NULL; - } - - return feasible; -} - -/* Return the column of the last of the variables associated to - * a column that has a non-zero coefficient. - * This function is called in a context where only coefficients - * of parameters or divs can be non-zero. - */ -static int last_non_zero_var_col(struct isl_tab *tab, isl_int *p) -{ - int i; - int col; - - if (tab->n_var == 0) - return -1; - - for (i = tab->n_var - 1; i >= 0; --i) { - if (i >= tab->n_param && i < tab->n_var - tab->n_div) - continue; - if (tab->var[i].is_row) - continue; - col = tab->var[i].index; - if (!isl_int_is_zero(p[col])) - return col; - } - - return -1; -} - -/* Look through all the recently added equalities in the context - * to see if we can propagate any of them to the main tableau. - * - * The newly added equalities in the context are encoded as pairs - * of inequalities starting at inequality "first". - * - * We tentatively add each of these equalities to the main tableau - * and if this happens to result in a row with a final coefficient - * that is one or negative one, we use it to kill a column - * in the main tableau. Otherwise, we discard the tentatively - * added row. - */ -static void propagate_equalities(struct isl_context_gbr *cgbr, - struct isl_tab *tab, unsigned first) -{ - int i; - struct isl_vec *eq = NULL; - - eq = isl_vec_alloc(tab->mat->ctx, 1 + tab->n_var); - if (!eq) - goto error; - - if (isl_tab_extend_cons(tab, (cgbr->tab->bmap->n_ineq - first)/2) < 0) - goto error; - - isl_seq_clr(eq->el + 1 + tab->n_param, - tab->n_var - tab->n_param - tab->n_div); - for (i = first; i < cgbr->tab->bmap->n_ineq; i += 2) { - int j; - int r; - struct isl_tab_undo *snap; - snap = isl_tab_snap(tab); - - isl_seq_cpy(eq->el, cgbr->tab->bmap->ineq[i], 1 + tab->n_param); - isl_seq_cpy(eq->el + 1 + tab->n_var - tab->n_div, - cgbr->tab->bmap->ineq[i] + 1 + tab->n_param, - tab->n_div); - - r = isl_tab_add_row(tab, eq->el); - if (r < 0) - goto error; - r = tab->con[r].index; - j = last_non_zero_var_col(tab, tab->mat->row[r] + 2 + tab->M); - if (j < 0 || j < tab->n_dead || - !isl_int_is_one(tab->mat->row[r][0]) || - (!isl_int_is_one(tab->mat->row[r][2 + tab->M + j]) && - !isl_int_is_negone(tab->mat->row[r][2 + tab->M + j]))) { - if (isl_tab_rollback(tab, snap) < 0) - goto error; - continue; - } - if (isl_tab_pivot(tab, r, j) < 0) - goto error; - if (isl_tab_kill_col(tab, j) < 0) - goto error; - - if (restore_lexmin(tab) < 0) - goto error; - } - - isl_vec_free(eq); - - return; -error: - isl_vec_free(eq); - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; -} - -static int context_gbr_detect_equalities(struct isl_context *context, - struct isl_tab *tab) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - struct isl_ctx *ctx; - unsigned n_ineq; - - ctx = cgbr->tab->mat->ctx; - - if (!cgbr->cone) { - struct isl_basic_set *bset = isl_tab_peek_bset(cgbr->tab); - cgbr->cone = isl_tab_from_recession_cone(bset, 0); - if (!cgbr->cone) - goto error; - if (isl_tab_track_bset(cgbr->cone, isl_basic_set_dup(bset)) < 0) - goto error; - } - if (isl_tab_detect_implicit_equalities(cgbr->cone) < 0) - goto error; - - n_ineq = cgbr->tab->bmap->n_ineq; - cgbr->tab = isl_tab_detect_equalities(cgbr->tab, cgbr->cone); - if (cgbr->tab && cgbr->tab->bmap->n_ineq > n_ineq) - propagate_equalities(cgbr, tab, n_ineq); - - return 0; -error: - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; - return -1; -} - -static int context_gbr_get_div(struct isl_context *context, struct isl_tab *tab, - struct isl_vec *div) -{ - return get_div(tab, context, div); -} - -static int context_gbr_add_div(struct isl_context *context, struct isl_vec *div) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - if (cgbr->cone) { - int k; - - if (isl_tab_extend_cons(cgbr->cone, 3) < 0) - return -1; - if (isl_tab_extend_vars(cgbr->cone, 1) < 0) - return -1; - if (isl_tab_allocate_var(cgbr->cone) <0) - return -1; - - cgbr->cone->bmap = isl_basic_map_extend_dim(cgbr->cone->bmap, - isl_basic_map_get_dim(cgbr->cone->bmap), 1, 0, 2); - k = isl_basic_map_alloc_div(cgbr->cone->bmap); - if (k < 0) - return -1; - isl_seq_cpy(cgbr->cone->bmap->div[k], div->el, div->size); - if (isl_tab_push(cgbr->cone, isl_tab_undo_bmap_div) < 0) - return -1; - } - return context_tab_add_div(cgbr->tab, div, - context_gbr_add_ineq_wrap, context); -} - -static int context_gbr_best_split(struct isl_context *context, - struct isl_tab *tab) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - struct isl_tab_undo *snap; - int r; - - snap = isl_tab_snap(cgbr->tab); - r = best_split(tab, cgbr->tab); - - if (r >= 0 && isl_tab_rollback(cgbr->tab, snap) < 0) - return -1; - - return r; -} - -static int context_gbr_is_empty(struct isl_context *context) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - if (!cgbr->tab) - return -1; - return cgbr->tab->empty; -} - -struct isl_gbr_tab_undo { - struct isl_tab_undo *tab_snap; - struct isl_tab_undo *shifted_snap; - struct isl_tab_undo *cone_snap; -}; - -static void *context_gbr_save(struct isl_context *context) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - struct isl_gbr_tab_undo *snap; - - snap = isl_alloc_type(cgbr->tab->mat->ctx, struct isl_gbr_tab_undo); - if (!snap) - return NULL; - - snap->tab_snap = isl_tab_snap(cgbr->tab); - if (isl_tab_save_samples(cgbr->tab) < 0) - goto error; - - if (cgbr->shifted) - snap->shifted_snap = isl_tab_snap(cgbr->shifted); - else - snap->shifted_snap = NULL; - - if (cgbr->cone) - snap->cone_snap = isl_tab_snap(cgbr->cone); - else - snap->cone_snap = NULL; - - return snap; -error: - free(snap); - return NULL; -} - -static void context_gbr_restore(struct isl_context *context, void *save) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - struct isl_gbr_tab_undo *snap = (struct isl_gbr_tab_undo *)save; - if (!snap) - goto error; - if (isl_tab_rollback(cgbr->tab, snap->tab_snap) < 0) { - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; - } - - if (snap->shifted_snap) { - if (isl_tab_rollback(cgbr->shifted, snap->shifted_snap) < 0) - goto error; - } else if (cgbr->shifted) { - isl_tab_free(cgbr->shifted); - cgbr->shifted = NULL; - } - - if (snap->cone_snap) { - if (isl_tab_rollback(cgbr->cone, snap->cone_snap) < 0) - goto error; - } else if (cgbr->cone) { - isl_tab_free(cgbr->cone); - cgbr->cone = NULL; - } - - free(snap); - - return; -error: - free(snap); - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; -} - -static int context_gbr_is_ok(struct isl_context *context) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - return !!cgbr->tab; -} - -static void context_gbr_invalidate(struct isl_context *context) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; -} - -static void context_gbr_free(struct isl_context *context) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - isl_tab_free(cgbr->tab); - isl_tab_free(cgbr->shifted); - isl_tab_free(cgbr->cone); - free(cgbr); -} - -struct isl_context_op isl_context_gbr_op = { - context_gbr_detect_nonnegative_parameters, - context_gbr_peek_basic_set, - context_gbr_peek_tab, - context_gbr_add_eq, - context_gbr_add_ineq, - context_gbr_ineq_sign, - context_gbr_test_ineq, - context_gbr_get_div, - context_gbr_add_div, - context_gbr_detect_equalities, - context_gbr_best_split, - context_gbr_is_empty, - context_gbr_is_ok, - context_gbr_save, - context_gbr_restore, - context_gbr_invalidate, - context_gbr_free, -}; - -static struct isl_context *isl_context_gbr_alloc(struct isl_basic_set *dom) -{ - struct isl_context_gbr *cgbr; - - if (!dom) - return NULL; - - cgbr = isl_calloc_type(dom->ctx, struct isl_context_gbr); - if (!cgbr) - return NULL; - - cgbr->context.op = &isl_context_gbr_op; - - cgbr->shifted = NULL; - cgbr->cone = NULL; - cgbr->tab = isl_tab_from_basic_set(dom); - cgbr->tab = isl_tab_init_samples(cgbr->tab); - if (!cgbr->tab) - goto error; - if (isl_tab_track_bset(cgbr->tab, - isl_basic_set_cow(isl_basic_set_copy(dom))) < 0) - goto error; - check_gbr_integer_feasible(cgbr); - - return &cgbr->context; -error: - cgbr->context.op->free(&cgbr->context); - return NULL; -} - -static struct isl_context *isl_context_alloc(struct isl_basic_set *dom) -{ - if (!dom) - return NULL; - - if (dom->ctx->opt->context == ISL_CONTEXT_LEXMIN) - return isl_context_lex_alloc(dom); - else - return isl_context_gbr_alloc(dom); -} - -/* Construct an isl_sol_map structure for accumulating the solution. - * If track_empty is set, then we also keep track of the parts - * of the context where there is no solution. - * If max is set, then we are solving a maximization, rather than - * a minimization problem, which means that the variables in the - * tableau have value "M - x" rather than "M + x". - */ -static struct isl_sol_map *sol_map_init(struct isl_basic_map *bmap, - struct isl_basic_set *dom, int track_empty, int max) -{ - struct isl_sol_map *sol_map = NULL; - - if (!bmap) - goto error; - - sol_map = isl_calloc_type(bmap->ctx, struct isl_sol_map); - if (!sol_map) - goto error; - - sol_map->sol.rational = ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL); - sol_map->sol.dec_level.callback.run = &sol_dec_level_wrap; - sol_map->sol.dec_level.sol = &sol_map->sol; - sol_map->sol.max = max; - sol_map->sol.n_out = isl_basic_map_dim(bmap, isl_dim_out); - sol_map->sol.add = &sol_map_add_wrap; - sol_map->sol.add_empty = track_empty ? &sol_map_add_empty_wrap : NULL; - sol_map->sol.free = &sol_map_free_wrap; - sol_map->map = isl_map_alloc_dim(isl_basic_map_get_dim(bmap), 1, - ISL_MAP_DISJOINT); - if (!sol_map->map) - goto error; - - sol_map->sol.context = isl_context_alloc(dom); - if (!sol_map->sol.context) - goto error; - - if (track_empty) { - sol_map->empty = isl_set_alloc_dim(isl_basic_set_get_dim(dom), - 1, ISL_SET_DISJOINT); - if (!sol_map->empty) - goto error; - } - - isl_basic_set_free(dom); - return sol_map; -error: - isl_basic_set_free(dom); - sol_map_free(sol_map); - return NULL; -} - -/* Check whether all coefficients of (non-parameter) variables - * are non-positive, meaning that no pivots can be performed on the row. - */ -static int is_critical(struct isl_tab *tab, int row) -{ - int j; - unsigned off = 2 + tab->M; - - for (j = tab->n_dead; j < tab->n_col; ++j) { - if (tab->col_var[j] >= 0 && - (tab->col_var[j] < tab->n_param || - tab->col_var[j] >= tab->n_var - tab->n_div)) - continue; - - if (isl_int_is_pos(tab->mat->row[row][off + j])) - return 0; - } - - return 1; -} - -/* Check whether the inequality represented by vec is strict over the integers, - * i.e., there are no integer values satisfying the constraint with - * equality. This happens if the gcd of the coefficients is not a divisor - * of the constant term. If so, scale the constraint down by the gcd - * of the coefficients. - */ -static int is_strict(struct isl_vec *vec) -{ - isl_int gcd; - int strict = 0; - - isl_int_init(gcd); - isl_seq_gcd(vec->el + 1, vec->size - 1, &gcd); - if (!isl_int_is_one(gcd)) { - strict = !isl_int_is_divisible_by(vec->el[0], gcd); - isl_int_fdiv_q(vec->el[0], vec->el[0], gcd); - isl_seq_scale_down(vec->el + 1, vec->el + 1, gcd, vec->size-1); - } - isl_int_clear(gcd); - - return strict; -} - -/* Determine the sign of the given row of the main tableau. - * The result is one of - * isl_tab_row_pos: always non-negative; no pivot needed - * isl_tab_row_neg: always non-positive; pivot - * isl_tab_row_any: can be both positive and negative; split - * - * We first handle some simple cases - * - the row sign may be known already - * - the row may be obviously non-negative - * - the parametric constant may be equal to that of another row - * for which we know the sign. This sign will be either "pos" or - * "any". If it had been "neg" then we would have pivoted before. - * - * If none of these cases hold, we check the value of the row for each - * of the currently active samples. Based on the signs of these values - * we make an initial determination of the sign of the row. - * - * all zero -> unk(nown) - * all non-negative -> pos - * all non-positive -> neg - * both negative and positive -> all - * - * If we end up with "all", we are done. - * Otherwise, we perform a check for positive and/or negative - * values as follows. - * - * samples neg unk pos - * <0 ? Y N Y N - * pos any pos - * >0 ? Y N Y N - * any neg any neg - * - * There is no special sign for "zero", because we can usually treat zero - * as either non-negative or non-positive, whatever works out best. - * However, if the row is "critical", meaning that pivoting is impossible - * then we don't want to limp zero with the non-positive case, because - * then we we would lose the solution for those values of the parameters - * where the value of the row is zero. Instead, we treat 0 as non-negative - * ensuring a split if the row can attain both zero and negative values. - * The same happens when the original constraint was one that could not - * be satisfied with equality by any integer values of the parameters. - * In this case, we normalize the constraint, but then a value of zero - * for the normalized constraint is actually a positive value for the - * original constraint, so again we need to treat zero as non-negative. - * In both these cases, we have the following decision tree instead: - * - * all non-negative -> pos - * all negative -> neg - * both negative and non-negative -> all - * - * samples neg pos - * <0 ? Y N - * any pos - * >=0 ? Y N - * any neg - */ -static enum isl_tab_row_sign row_sign(struct isl_tab *tab, - struct isl_sol *sol, int row) -{ - struct isl_vec *ineq = NULL; - enum isl_tab_row_sign res = isl_tab_row_unknown; - int critical; - int strict; - int row2; - - if (tab->row_sign[row] != isl_tab_row_unknown) - return tab->row_sign[row]; - if (is_obviously_nonneg(tab, row)) - return isl_tab_row_pos; - for (row2 = tab->n_redundant; row2 < tab->n_row; ++row2) { - if (tab->row_sign[row2] == isl_tab_row_unknown) - continue; - if (identical_parameter_line(tab, row, row2)) - return tab->row_sign[row2]; - } - - critical = is_critical(tab, row); - - ineq = get_row_parameter_ineq(tab, row); - if (!ineq) - goto error; - - strict = is_strict(ineq); - - res = sol->context->op->ineq_sign(sol->context, ineq->el, - critical || strict); - - if (res == isl_tab_row_unknown || res == isl_tab_row_pos) { - /* test for negative values */ - int feasible; - isl_seq_neg(ineq->el, ineq->el, ineq->size); - isl_int_sub_ui(ineq->el[0], ineq->el[0], 1); - - feasible = sol->context->op->test_ineq(sol->context, ineq->el); - if (feasible < 0) - goto error; - if (!feasible) - res = isl_tab_row_pos; - else - res = (res == isl_tab_row_unknown) ? isl_tab_row_neg - : isl_tab_row_any; - if (res == isl_tab_row_neg) { - isl_seq_neg(ineq->el, ineq->el, ineq->size); - isl_int_sub_ui(ineq->el[0], ineq->el[0], 1); - } - } - - if (res == isl_tab_row_neg) { - /* test for positive values */ - int feasible; - if (!critical && !strict) - isl_int_sub_ui(ineq->el[0], ineq->el[0], 1); - - feasible = sol->context->op->test_ineq(sol->context, ineq->el); - if (feasible < 0) - goto error; - if (feasible) - res = isl_tab_row_any; - } - - isl_vec_free(ineq); - return res; -error: - isl_vec_free(ineq); - return isl_tab_row_unknown; -} - -static void find_solutions(struct isl_sol *sol, struct isl_tab *tab); - -/* Find solutions for values of the parameters that satisfy the given - * inequality. - * - * We currently take a snapshot of the context tableau that is reset - * when we return from this function, while we make a copy of the main - * tableau, leaving the original main tableau untouched. - * These are fairly arbitrary choices. Making a copy also of the context - * tableau would obviate the need to undo any changes made to it later, - * while taking a snapshot of the main tableau could reduce memory usage. - * If we were to switch to taking a snapshot of the main tableau, - * we would have to keep in mind that we need to save the row signs - * and that we need to do this before saving the current basis - * such that the basis has been restore before we restore the row signs. - */ -static void find_in_pos(struct isl_sol *sol, struct isl_tab *tab, isl_int *ineq) -{ - void *saved; - - if (!sol->context) - goto error; - saved = sol->context->op->save(sol->context); - - tab = isl_tab_dup(tab); - if (!tab) - goto error; - - sol->context->op->add_ineq(sol->context, ineq, 0, 1); - - find_solutions(sol, tab); - - if (!sol->error) - sol->context->op->restore(sol->context, saved); - return; -error: - sol->error = 1; -} - -/* Record the absence of solutions for those values of the parameters - * that do not satisfy the given inequality with equality. - */ -static void no_sol_in_strict(struct isl_sol *sol, - struct isl_tab *tab, struct isl_vec *ineq) -{ - int empty; - void *saved; - - if (!sol->context || sol->error) - goto error; - saved = sol->context->op->save(sol->context); - - isl_int_sub_ui(ineq->el[0], ineq->el[0], 1); - - sol->context->op->add_ineq(sol->context, ineq->el, 1, 0); - if (!sol->context) - goto error; - - empty = tab->empty; - tab->empty = 1; - sol_add(sol, tab); - tab->empty = empty; - - isl_int_add_ui(ineq->el[0], ineq->el[0], 1); - - sol->context->op->restore(sol->context, saved); - return; -error: - sol->error = 1; -} - -/* Compute the lexicographic minimum of the set represented by the main - * tableau "tab" within the context "sol->context_tab". - * On entry the sample value of the main tableau is lexicographically - * less than or equal to this lexicographic minimum. - * Pivots are performed until a feasible point is found, which is then - * necessarily equal to the minimum, or until the tableau is found to - * be infeasible. Some pivots may need to be performed for only some - * feasible values of the context tableau. If so, the context tableau - * is split into a part where the pivot is needed and a part where it is not. - * - * Whenever we enter the main loop, the main tableau is such that no - * "obvious" pivots need to be performed on it, where "obvious" means - * that the given row can be seen to be negative without looking at - * the context tableau. In particular, for non-parametric problems, - * no pivots need to be performed on the main tableau. - * The caller of find_solutions is responsible for making this property - * hold prior to the first iteration of the loop, while restore_lexmin - * is called before every other iteration. - * - * Inside the main loop, we first examine the signs of the rows of - * the main tableau within the context of the context tableau. - * If we find a row that is always non-positive for all values of - * the parameters satisfying the context tableau and negative for at - * least one value of the parameters, we perform the appropriate pivot - * and start over. An exception is the case where no pivot can be - * performed on the row. In this case, we require that the sign of - * the row is negative for all values of the parameters (rather than just - * non-positive). This special case is handled inside row_sign, which - * will say that the row can have any sign if it determines that it can - * attain both negative and zero values. - * - * If we can't find a row that always requires a pivot, but we can find - * one or more rows that require a pivot for some values of the parameters - * (i.e., the row can attain both positive and negative signs), then we split - * the context tableau into two parts, one where we force the sign to be - * non-negative and one where we force is to be negative. - * The non-negative part is handled by a recursive call (through find_in_pos). - * Upon returning from this call, we continue with the negative part and - * perform the required pivot. - * - * If no such rows can be found, all rows are non-negative and we have - * found a (rational) feasible point. If we only wanted a rational point - * then we are done. - * Otherwise, we check if all values of the sample point of the tableau - * are integral for the variables. If so, we have found the minimal - * integral point and we are done. - * If the sample point is not integral, then we need to make a distinction - * based on whether the constant term is non-integral or the coefficients - * of the parameters. Furthermore, in order to decide how to handle - * the non-integrality, we also need to know whether the coefficients - * of the other columns in the tableau are integral. This leads - * to the following table. The first two rows do not correspond - * to a non-integral sample point and are only mentioned for completeness. - * - * constant parameters other - * - * int int int | - * int int rat | -> no problem - * - * rat int int -> fail - * - * rat int rat -> cut - * - * int rat rat | - * rat rat rat | -> parametric cut - * - * int rat int | - * rat rat int | -> split context - * - * If the parametric constant is completely integral, then there is nothing - * to be done. If the constant term is non-integral, but all the other - * coefficient are integral, then there is nothing that can be done - * and the tableau has no integral solution. - * If, on the other hand, one or more of the other columns have rational - * coefficients, but the parameter coefficients are all integral, then - * we can perform a regular (non-parametric) cut. - * Finally, if there is any parameter coefficient that is non-integral, - * then we need to involve the context tableau. There are two cases here. - * If at least one other column has a rational coefficient, then we - * can perform a parametric cut in the main tableau by adding a new - * integer division in the context tableau. - * If all other columns have integral coefficients, then we need to - * enforce that the rational combination of parameters (c + \sum a_i y_i)/m - * is always integral. We do this by introducing an integer division - * q = floor((c + \sum a_i y_i)/m) and stipulating that its argument should - * always be integral in the context tableau, i.e., m q = c + \sum a_i y_i. - * Since q is expressed in the tableau as - * c + \sum a_i y_i - m q >= 0 - * -c - \sum a_i y_i + m q + m - 1 >= 0 - * it is sufficient to add the inequality - * -c - \sum a_i y_i + m q >= 0 - * In the part of the context where this inequality does not hold, the - * main tableau is marked as being empty. - */ -static void find_solutions(struct isl_sol *sol, struct isl_tab *tab) -{ - struct isl_context *context; - int r; - - if (!tab || sol->error) - goto error; - - context = sol->context; - - if (tab->empty) - goto done; - if (context->op->is_empty(context)) - goto done; - - for (r = 0; r >= 0 && tab && !tab->empty; r = restore_lexmin(tab)) { - int flags; - int row; - enum isl_tab_row_sign sgn; - int split = -1; - int n_split = 0; - - for (row = tab->n_redundant; row < tab->n_row; ++row) { - if (!isl_tab_var_from_row(tab, row)->is_nonneg) - continue; - sgn = row_sign(tab, sol, row); - if (!sgn) - goto error; - tab->row_sign[row] = sgn; - if (sgn == isl_tab_row_any) - n_split++; - if (sgn == isl_tab_row_any && split == -1) - split = row; - if (sgn == isl_tab_row_neg) - break; - } - if (row < tab->n_row) - continue; - if (split != -1) { - struct isl_vec *ineq; - if (n_split != 1) - split = context->op->best_split(context, tab); - if (split < 0) - goto error; - ineq = get_row_parameter_ineq(tab, split); - if (!ineq) - goto error; - is_strict(ineq); - for (row = tab->n_redundant; row < tab->n_row; ++row) { - if (!isl_tab_var_from_row(tab, row)->is_nonneg) - continue; - if (tab->row_sign[row] == isl_tab_row_any) - tab->row_sign[row] = isl_tab_row_unknown; - } - tab->row_sign[split] = isl_tab_row_pos; - sol_inc_level(sol); - find_in_pos(sol, tab, ineq->el); - tab->row_sign[split] = isl_tab_row_neg; - row = split; - isl_seq_neg(ineq->el, ineq->el, ineq->size); - isl_int_sub_ui(ineq->el[0], ineq->el[0], 1); - if (!sol->error) - context->op->add_ineq(context, ineq->el, 0, 1); - isl_vec_free(ineq); - if (sol->error) - goto error; - continue; - } - if (tab->rational) - break; - row = first_non_integer_row(tab, &flags); - if (row < 0) - break; - if (ISL_FL_ISSET(flags, I_PAR)) { - if (ISL_FL_ISSET(flags, I_VAR)) { - if (isl_tab_mark_empty(tab) < 0) - goto error; - break; - } - row = add_cut(tab, row); - } else if (ISL_FL_ISSET(flags, I_VAR)) { - struct isl_vec *div; - struct isl_vec *ineq; - int d; - div = get_row_split_div(tab, row); - if (!div) - goto error; - d = context->op->get_div(context, tab, div); - isl_vec_free(div); - if (d < 0) - goto error; - ineq = ineq_for_div(context->op->peek_basic_set(context), d); - if (!ineq) - goto error; - sol_inc_level(sol); - no_sol_in_strict(sol, tab, ineq); - isl_seq_neg(ineq->el, ineq->el, ineq->size); - context->op->add_ineq(context, ineq->el, 1, 1); - isl_vec_free(ineq); - if (sol->error || !context->op->is_ok(context)) - goto error; - tab = set_row_cst_to_div(tab, row, d); - if (context->op->is_empty(context)) - break; - } else - row = add_parametric_cut(tab, row, context); - if (row < 0) - goto error; - } - if (r < 0) - goto error; -done: - sol_add(sol, tab); - isl_tab_free(tab); - return; -error: - isl_tab_free(tab); - sol->error = 1; -} - -/* Compute the lexicographic minimum of the set represented by the main - * tableau "tab" within the context "sol->context_tab". - * - * As a preprocessing step, we first transfer all the purely parametric - * equalities from the main tableau to the context tableau, i.e., - * parameters that have been pivoted to a row. - * These equalities are ignored by the main algorithm, because the - * corresponding rows may not be marked as being non-negative. - * In parts of the context where the added equality does not hold, - * the main tableau is marked as being empty. - */ -static void find_solutions_main(struct isl_sol *sol, struct isl_tab *tab) -{ - int row; - - if (!tab) - goto error; - - sol->level = 0; - - for (row = tab->n_redundant; row < tab->n_row; ++row) { - int p; - struct isl_vec *eq; - - if (tab->row_var[row] < 0) - continue; - if (tab->row_var[row] >= tab->n_param && - tab->row_var[row] < tab->n_var - tab->n_div) - continue; - if (tab->row_var[row] < tab->n_param) - p = tab->row_var[row]; - else - p = tab->row_var[row] - + tab->n_param - (tab->n_var - tab->n_div); - - eq = isl_vec_alloc(tab->mat->ctx, 1+tab->n_param+tab->n_div); - if (!eq) - goto error; - get_row_parameter_line(tab, row, eq->el); - isl_int_neg(eq->el[1 + p], tab->mat->row[row][0]); - eq = isl_vec_normalize(eq); - - sol_inc_level(sol); - no_sol_in_strict(sol, tab, eq); - - isl_seq_neg(eq->el, eq->el, eq->size); - sol_inc_level(sol); - no_sol_in_strict(sol, tab, eq); - isl_seq_neg(eq->el, eq->el, eq->size); - - sol->context->op->add_eq(sol->context, eq->el, 1, 1); - - isl_vec_free(eq); - - if (isl_tab_mark_redundant(tab, row) < 0) - goto error; - - if (sol->context->op->is_empty(sol->context)) - break; - - row = tab->n_redundant - 1; - } - - find_solutions(sol, tab); - - sol->level = 0; - sol_pop(sol); - - return; -error: - isl_tab_free(tab); - sol->error = 1; -} - -static void sol_map_find_solutions(struct isl_sol_map *sol_map, - struct isl_tab *tab) -{ - find_solutions_main(&sol_map->sol, tab); -} - -/* Check if integer division "div" of "dom" also occurs in "bmap". - * If so, return its position within the divs. - * If not, return -1. - */ -static int find_context_div(struct isl_basic_map *bmap, - struct isl_basic_set *dom, unsigned div) -{ - int i; - unsigned b_dim = isl_dim_total(bmap->dim); - unsigned d_dim = isl_dim_total(dom->dim); - - if (isl_int_is_zero(dom->div[div][0])) - return -1; - if (isl_seq_first_non_zero(dom->div[div] + 2 + d_dim, dom->n_div) != -1) - return -1; - - for (i = 0; i < bmap->n_div; ++i) { - if (isl_int_is_zero(bmap->div[i][0])) - continue; - if (isl_seq_first_non_zero(bmap->div[i] + 2 + d_dim, - (b_dim - d_dim) + bmap->n_div) != -1) - continue; - if (isl_seq_eq(bmap->div[i], dom->div[div], 2 + d_dim)) - return i; - } - return -1; -} - -/* The correspondence between the variables in the main tableau, - * the context tableau, and the input map and domain is as follows. - * The first n_param and the last n_div variables of the main tableau - * form the variables of the context tableau. - * In the basic map, these n_param variables correspond to the - * parameters and the input dimensions. In the domain, they correspond - * to the parameters and the set dimensions. - * The n_div variables correspond to the integer divisions in the domain. - * To ensure that everything lines up, we may need to copy some of the - * integer divisions of the domain to the map. These have to be placed - * in the same order as those in the context and they have to be placed - * after any other integer divisions that the map may have. - * This function performs the required reordering. - */ -static struct isl_basic_map *align_context_divs(struct isl_basic_map *bmap, - struct isl_basic_set *dom) -{ - int i; - int common = 0; - int other; - - for (i = 0; i < dom->n_div; ++i) - if (find_context_div(bmap, dom, i) != -1) - common++; - other = bmap->n_div - common; - if (dom->n_div - common > 0) { - bmap = isl_basic_map_extend_dim(bmap, isl_dim_copy(bmap->dim), - dom->n_div - common, 0, 0); - if (!bmap) - return NULL; - } - for (i = 0; i < dom->n_div; ++i) { - int pos = find_context_div(bmap, dom, i); - if (pos < 0) { - pos = isl_basic_map_alloc_div(bmap); - if (pos < 0) - goto error; - isl_int_set_si(bmap->div[pos][0], 0); - } - if (pos != other + i) - isl_basic_map_swap_div(bmap, pos, other + i); - } - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Base case of isl_tab_basic_map_partial_lexopt, after removing - * some obvious symmetries. - * - * We make sure the divs in the domain are properly ordered, - * because they will be added one by one in the given order - * during the construction of the solution map. - */ -static __isl_give isl_map *basic_map_partial_lexopt_base( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max) -{ - isl_map *result = NULL; - struct isl_tab *tab; - struct isl_sol_map *sol_map = NULL; - struct isl_context *context; - - if (dom->n_div) { - dom = isl_basic_set_order_divs(dom); - bmap = align_context_divs(bmap, dom); - } - sol_map = sol_map_init(bmap, dom, !!empty, max); - if (!sol_map) - goto error; - - context = sol_map->sol.context; - if (isl_basic_set_plain_is_empty(context->op->peek_basic_set(context))) - /* nothing */; - else if (isl_basic_map_plain_is_empty(bmap)) - sol_map_add_empty_if_needed(sol_map, - isl_basic_set_copy(context->op->peek_basic_set(context))); - else { - tab = tab_for_lexmin(bmap, - context->op->peek_basic_set(context), 1, max); - tab = context->op->detect_nonnegative_parameters(context, tab); - sol_map_find_solutions(sol_map, tab); - } - if (sol_map->sol.error) - goto error; - - result = isl_map_copy(sol_map->map); - if (empty) - *empty = isl_set_copy(sol_map->empty); - sol_free(&sol_map->sol); - isl_basic_map_free(bmap); - return result; -error: - sol_free(&sol_map->sol); - isl_basic_map_free(bmap); - return NULL; -} - -/* Structure used during detection of parallel constraints. - * n_in: number of "input" variables: isl_dim_param + isl_dim_in - * n_out: number of "output" variables: isl_dim_out + isl_dim_div - * val: the coefficients of the output variables - */ -struct isl_constraint_equal_info { - isl_basic_map *bmap; - unsigned n_in; - unsigned n_out; - isl_int *val; -}; - -/* Check whether the coefficients of the output variables - * of the constraint in "entry" are equal to info->val. - */ -static int constraint_equal(const void *entry, const void *val) -{ - isl_int **row = (isl_int **)entry; - const struct isl_constraint_equal_info *info = val; - - return isl_seq_eq((*row) + 1 + info->n_in, info->val, info->n_out); -} - -/* Check whether "bmap" has a pair of constraints that have - * the same coefficients for the output variables. - * Note that the coefficients of the existentially quantified - * variables need to be zero since the existentially quantified - * of the result are usually not the same as those of the input. - * the isl_dim_out and isl_dim_div dimensions. - * If so, return 1 and return the row indices of the two constraints - * in *first and *second. - */ -static int parallel_constraints(__isl_keep isl_basic_map *bmap, - int *first, int *second) -{ - int i; - isl_ctx *ctx = isl_basic_map_get_ctx(bmap); - struct isl_hash_table *table = NULL; - struct isl_hash_table_entry *entry; - struct isl_constraint_equal_info info; - unsigned n_out; - unsigned n_div; - - ctx = isl_basic_map_get_ctx(bmap); - table = isl_hash_table_alloc(ctx, bmap->n_ineq); - if (!table) - goto error; - - info.n_in = isl_basic_map_dim(bmap, isl_dim_param) + - isl_basic_map_dim(bmap, isl_dim_in); - info.bmap = bmap; - n_out = isl_basic_map_dim(bmap, isl_dim_out); - n_div = isl_basic_map_dim(bmap, isl_dim_div); - info.n_out = n_out + n_div; - for (i = 0; i < bmap->n_ineq; ++i) { - uint32_t hash; - - info.val = bmap->ineq[i] + 1 + info.n_in; - if (isl_seq_first_non_zero(info.val, n_out) < 0) - continue; - if (isl_seq_first_non_zero(info.val + n_out, n_div) >= 0) - continue; - hash = isl_seq_get_hash(info.val, info.n_out); - entry = isl_hash_table_find(ctx, table, hash, - constraint_equal, &info, 1); - if (!entry) - goto error; - if (entry->data) - break; - entry->data = &bmap->ineq[i]; - } - - if (i < bmap->n_ineq) { - *first = ((isl_int **)entry->data) - bmap->ineq; - *second = i; - } - - isl_hash_table_free(ctx, table); - - return i < bmap->n_ineq; -error: - isl_hash_table_free(ctx, table); - return -1; -} - -/* Given a set of upper bounds on the last "input" variable m, - * construct a set that assigns the minimal upper bound to m, i.e., - * construct a set that divides the space into cells where one - * of the upper bounds is smaller than all the others and assign - * this upper bound to m. - * - * In particular, if there are n bounds b_i, then the result - * consists of n basic sets, each one of the form - * - * m = b_i - * b_i <= b_j for j > i - * b_i < b_j for j < i - */ -static __isl_give isl_set *set_minimum(__isl_take isl_dim *dim, - __isl_take isl_mat *var) -{ - int i, j, k; - isl_basic_set *bset = NULL; - isl_ctx *ctx; - isl_set *set = NULL; - - if (!dim || !var) - goto error; - - ctx = isl_dim_get_ctx(dim); - set = isl_set_alloc_dim(isl_dim_copy(dim), - var->n_row, ISL_SET_DISJOINT); - - for (i = 0; i < var->n_row; ++i) { - bset = isl_basic_set_alloc_dim(isl_dim_copy(dim), 0, - 1, var->n_row - 1); - k = isl_basic_set_alloc_equality(bset); - if (k < 0) - goto error; - isl_seq_cpy(bset->eq[k], var->row[i], var->n_col); - isl_int_set_si(bset->eq[k][var->n_col], -1); - for (j = 0; j < var->n_row; ++j) { - if (j == i) - continue; - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_combine(bset->ineq[k], ctx->one, var->row[j], - ctx->negone, var->row[i], - var->n_col); - isl_int_set_si(bset->ineq[k][var->n_col], 0); - if (j < i) - isl_int_sub_ui(bset->ineq[k][0], - bset->ineq[k][0], 1); - } - bset = isl_basic_set_finalize(bset); - set = isl_set_add_basic_set(set, bset); - } - - isl_dim_free(dim); - isl_mat_free(var); - return set; -error: - isl_basic_set_free(bset); - isl_set_free(set); - isl_dim_free(dim); - isl_mat_free(var); - return NULL; -} - -/* Given that the last input variable of "bmap" represents the minimum - * of the bounds in "cst", check whether we need to split the domain - * based on which bound attains the minimum. - * - * A split is needed when the minimum appears in an integer division - * or in an equality. Otherwise, it is only needed if it appears in - * an upper bound that is different from the upper bounds on which it - * is defined. - */ -static int need_split_map(__isl_keep isl_basic_map *bmap, - __isl_keep isl_mat *cst) -{ - int i, j; - unsigned total; - unsigned pos; - - pos = cst->n_col - 1; - total = isl_basic_map_dim(bmap, isl_dim_all); - - for (i = 0; i < bmap->n_div; ++i) - if (!isl_int_is_zero(bmap->div[i][2 + pos])) - return 1; - - for (i = 0; i < bmap->n_eq; ++i) - if (!isl_int_is_zero(bmap->eq[i][1 + pos])) - return 1; - - for (i = 0; i < bmap->n_ineq; ++i) { - if (isl_int_is_nonneg(bmap->ineq[i][1 + pos])) - continue; - if (!isl_int_is_negone(bmap->ineq[i][1 + pos])) - return 1; - if (isl_seq_first_non_zero(bmap->ineq[i] + 1 + pos + 1, - total - pos - 1) >= 0) - return 1; - - for (j = 0; j < cst->n_row; ++j) - if (isl_seq_eq(bmap->ineq[i], cst->row[j], cst->n_col)) - break; - if (j >= cst->n_row) - return 1; - } - - return 0; -} - -static int need_split_set(__isl_keep isl_basic_set *bset, - __isl_keep isl_mat *cst) -{ - return need_split_map((isl_basic_map *)bset, cst); -} - -/* Given a set of which the last set variable is the minimum - * of the bounds in "cst", split each basic set in the set - * in pieces where one of the bounds is (strictly) smaller than the others. - * This subdivision is given in "min_expr". - * The variable is subsequently projected out. - * - * We only do the split when it is needed. - * For example if the last input variable m = min(a,b) and the only - * constraints in the given basic set are lower bounds on m, - * i.e., l <= m = min(a,b), then we can simply project out m - * to obtain l <= a and l <= b, without having to split on whether - * m is equal to a or b. - */ -static __isl_give isl_set *split(__isl_take isl_set *empty, - __isl_take isl_set *min_expr, __isl_take isl_mat *cst) -{ - int n_in; - int i; - isl_dim *dim; - isl_set *res; - - if (!empty || !min_expr || !cst) - goto error; - - n_in = isl_set_dim(empty, isl_dim_set); - dim = isl_set_get_dim(empty); - dim = isl_dim_drop(dim, isl_dim_set, n_in - 1, 1); - res = isl_set_empty(dim); - - for (i = 0; i < empty->n; ++i) { - isl_set *set; - - set = isl_set_from_basic_set(isl_basic_set_copy(empty->p[i])); - if (need_split_set(empty->p[i], cst)) - set = isl_set_intersect(set, isl_set_copy(min_expr)); - set = isl_set_remove_dims(set, isl_dim_set, n_in - 1, 1); - - res = isl_set_union_disjoint(res, set); - } - - isl_set_free(empty); - isl_set_free(min_expr); - isl_mat_free(cst); - return res; -error: - isl_set_free(empty); - isl_set_free(min_expr); - isl_mat_free(cst); - return NULL; -} - -/* Given a map of which the last input variable is the minimum - * of the bounds in "cst", split each basic set in the set - * in pieces where one of the bounds is (strictly) smaller than the others. - * This subdivision is given in "min_expr". - * The variable is subsequently projected out. - * - * The implementation is essentially the same as that of "split". - */ -static __isl_give isl_map *split_domain(__isl_take isl_map *opt, - __isl_take isl_set *min_expr, __isl_take isl_mat *cst) -{ - int n_in; - int i; - isl_dim *dim; - isl_map *res; - - if (!opt || !min_expr || !cst) - goto error; - - n_in = isl_map_dim(opt, isl_dim_in); - dim = isl_map_get_dim(opt); - dim = isl_dim_drop(dim, isl_dim_in, n_in - 1, 1); - res = isl_map_empty(dim); - - for (i = 0; i < opt->n; ++i) { - isl_map *map; - - map = isl_map_from_basic_map(isl_basic_map_copy(opt->p[i])); - if (need_split_map(opt->p[i], cst)) - map = isl_map_intersect_domain(map, - isl_set_copy(min_expr)); - map = isl_map_remove_dims(map, isl_dim_in, n_in - 1, 1); - - res = isl_map_union_disjoint(res, map); - } - - isl_map_free(opt); - isl_set_free(min_expr); - isl_mat_free(cst); - return res; -error: - isl_map_free(opt); - isl_set_free(min_expr); - isl_mat_free(cst); - return NULL; -} - -static __isl_give isl_map *basic_map_partial_lexopt( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max); - -/* Given a basic map with at least two parallel constraints (as found - * by the function parallel_constraints), first look for more constraints - * parallel to the two constraint and replace the found list of parallel - * constraints by a single constraint with as "input" part the minimum - * of the input parts of the list of constraints. Then, recursively call - * basic_map_partial_lexopt (possibly finding more parallel constraints) - * and plug in the definition of the minimum in the result. - * - * More specifically, given a set of constraints - * - * a x + b_i(p) >= 0 - * - * Replace this set by a single constraint - * - * a x + u >= 0 - * - * with u a new parameter with constraints - * - * u <= b_i(p) - * - * Any solution to the new system is also a solution for the original system - * since - * - * a x >= -u >= -b_i(p) - * - * Moreover, m = min_i(b_i(p)) satisfies the constraints on u and can - * therefore be plugged into the solution. - */ -static __isl_give isl_map *basic_map_partial_lexopt_symm( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max, int first, int second) -{ - int i, n, k; - int *list = NULL; - unsigned n_in, n_out, n_div; - isl_ctx *ctx; - isl_vec *var = NULL; - isl_mat *cst = NULL; - isl_map *opt; - isl_set *min_expr; - isl_dim *map_dim, *set_dim; - - map_dim = isl_basic_map_get_dim(bmap); - set_dim = empty ? isl_basic_set_get_dim(dom) : NULL; - - n_in = isl_basic_map_dim(bmap, isl_dim_param) + - isl_basic_map_dim(bmap, isl_dim_in); - n_out = isl_basic_map_dim(bmap, isl_dim_all) - n_in; - - ctx = isl_basic_map_get_ctx(bmap); - list = isl_alloc_array(ctx, int, bmap->n_ineq); - var = isl_vec_alloc(ctx, n_out); - if (!list || !var) - goto error; - - list[0] = first; - list[1] = second; - isl_seq_cpy(var->el, bmap->ineq[first] + 1 + n_in, n_out); - for (i = second + 1, n = 2; i < bmap->n_ineq; ++i) { - if (isl_seq_eq(var->el, bmap->ineq[i] + 1 + n_in, n_out)) - list[n++] = i; - } - - cst = isl_mat_alloc(ctx, n, 1 + n_in); - if (!cst) - goto error; - - for (i = 0; i < n; ++i) - isl_seq_cpy(cst->row[i], bmap->ineq[list[i]], 1 + n_in); - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - goto error; - for (i = n - 1; i >= 0; --i) - if (isl_basic_map_drop_inequality(bmap, list[i]) < 0) - goto error; - - bmap = isl_basic_map_add(bmap, isl_dim_in, 1); - bmap = isl_basic_map_extend_constraints(bmap, 0, 1); - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->ineq[k], 1 + n_in); - isl_int_set_si(bmap->ineq[k][1 + n_in], 1); - isl_seq_cpy(bmap->ineq[k] + 1 + n_in + 1, var->el, n_out); - bmap = isl_basic_map_finalize(bmap); - - n_div = isl_basic_set_dim(dom, isl_dim_div); - dom = isl_basic_set_add(dom, isl_dim_set, 1); - dom = isl_basic_set_extend_constraints(dom, 0, n); - for (i = 0; i < n; ++i) { - k = isl_basic_set_alloc_inequality(dom); - if (k < 0) - goto error; - isl_seq_cpy(dom->ineq[k], cst->row[i], 1 + n_in); - isl_int_set_si(dom->ineq[k][1 + n_in], -1); - isl_seq_clr(dom->ineq[k] + 1 + n_in + 1, n_div); - } - - min_expr = set_minimum(isl_basic_set_get_dim(dom), isl_mat_copy(cst)); - - isl_vec_free(var); - free(list); - - opt = basic_map_partial_lexopt(bmap, dom, empty, max); - - if (empty) { - *empty = split(*empty, - isl_set_copy(min_expr), isl_mat_copy(cst)); - *empty = isl_set_reset_dim(*empty, set_dim); - } - - opt = split_domain(opt, min_expr, cst); - opt = isl_map_reset_dim(opt, map_dim); - - return opt; -error: - isl_dim_free(map_dim); - isl_dim_free(set_dim); - isl_mat_free(cst); - isl_vec_free(var); - free(list); - isl_basic_set_free(dom); - isl_basic_map_free(bmap); - return NULL; -} - -/* Recursive part of isl_tab_basic_map_partial_lexopt, after detecting - * equalities and removing redundant constraints. - * - * We first check if there are any parallel constraints (left). - * If not, we are in the base case. - * If there are parallel constraints, we replace them by a single - * constraint in basic_map_partial_lexopt_symm and then call - * this function recursively to look for more parallel constraints. - */ -static __isl_give isl_map *basic_map_partial_lexopt( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max) -{ - int par = 0; - int first, second; - - if (!bmap) - goto error; - - if (bmap->ctx->opt->pip_symmetry) - par = parallel_constraints(bmap, &first, &second); - if (par < 0) - goto error; - if (!par) - return basic_map_partial_lexopt_base(bmap, dom, empty, max); - - return basic_map_partial_lexopt_symm(bmap, dom, empty, max, - first, second); -error: - isl_basic_set_free(dom); - isl_basic_map_free(bmap); - return NULL; -} - -/* Compute the lexicographic minimum (or maximum if "max" is set) - * of "bmap" over the domain "dom" and return the result as a map. - * If "empty" is not NULL, then *empty is assigned a set that - * contains those parts of the domain where there is no solution. - * If "bmap" is marked as rational (ISL_BASIC_MAP_RATIONAL), - * then we compute the rational optimum. Otherwise, we compute - * the integral optimum. - * - * We perform some preprocessing. As the PILP solver does not - * handle implicit equalities very well, we first make sure all - * the equalities are explicitly available. - * - * We also add context constraints to the basic map and remove - * redundant constraints. This is only needed because of the - * way we handle simple symmetries. In particular, we currently look - * for symmetries on the constraints, before we set up the main tableau. - * It is then no good to look for symmetries on possibly redundant constraints. - */ -struct isl_map *isl_tab_basic_map_partial_lexopt( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty, int max) -{ - if (empty) - *empty = NULL; - if (!bmap || !dom) - goto error; - - isl_assert(bmap->ctx, - isl_basic_map_compatible_domain(bmap, dom), goto error); - - if (isl_basic_set_dim(dom, isl_dim_all) == 0) - return basic_map_partial_lexopt(bmap, dom, empty, max); - - bmap = isl_basic_map_intersect_domain(bmap, isl_basic_set_copy(dom)); - bmap = isl_basic_map_detect_equalities(bmap); - bmap = isl_basic_map_remove_redundancies(bmap); - - return basic_map_partial_lexopt(bmap, dom, empty, max); -error: - isl_basic_set_free(dom); - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_sol_for { - struct isl_sol sol; - int (*fn)(__isl_take isl_basic_set *dom, - __isl_take isl_aff_list *list, void *user); - void *user; -}; - -static void sol_for_free(struct isl_sol_for *sol_for) -{ - if (sol_for->sol.context) - sol_for->sol.context->op->free(sol_for->sol.context); - free(sol_for); -} - -static void sol_for_free_wrap(struct isl_sol *sol) -{ - sol_for_free((struct isl_sol_for *)sol); -} - -/* Add the solution identified by the tableau and the context tableau. - * - * See documentation of sol_add for more details. - * - * Instead of constructing a basic map, this function calls a user - * defined function with the current context as a basic set and - * a list of affine expressions representing the relation between - * the input and output. The space over which the affine expressions - * are defined is the same as that of the domain. The number of - * affine expressions in the list is equal to the number of output variables. - */ -static void sol_for_add(struct isl_sol_for *sol, - struct isl_basic_set *dom, struct isl_mat *M) -{ - int i; - isl_ctx *ctx; - isl_local_space *ls; - isl_aff *aff; - isl_aff_list *list; - - if (sol->sol.error || !dom || !M) - goto error; - - ctx = isl_basic_set_get_ctx(dom); - ls = isl_basic_set_get_local_space(dom); - list = isl_aff_list_alloc(ctx, M->n_row - 1); - for (i = 1; i < M->n_row; ++i) { - aff = isl_aff_alloc(isl_local_space_copy(ls)); - if (aff) { - isl_int_set_si(aff->v->el[0], 1); - isl_seq_cpy(aff->v->el + 1, M->row[i], M->n_col); - } - list = isl_aff_list_add(list, aff); - } - isl_local_space_free(ls); - - dom = isl_basic_set_finalize(dom); - - if (sol->fn(isl_basic_set_copy(dom), list, sol->user) < 0) - goto error; - - isl_basic_set_free(dom); - isl_mat_free(M); - return; -error: - isl_basic_set_free(dom); - isl_mat_free(M); - sol->sol.error = 1; -} - -static void sol_for_add_wrap(struct isl_sol *sol, - struct isl_basic_set *dom, struct isl_mat *M) -{ - sol_for_add((struct isl_sol_for *)sol, dom, M); -} - -static struct isl_sol_for *sol_for_init(struct isl_basic_map *bmap, int max, - int (*fn)(__isl_take isl_basic_set *dom, __isl_take isl_aff_list *list, - void *user), - void *user) -{ - struct isl_sol_for *sol_for = NULL; - struct isl_dim *dom_dim; - struct isl_basic_set *dom = NULL; - - sol_for = isl_calloc_type(bmap->ctx, struct isl_sol_for); - if (!sol_for) - goto error; - - dom_dim = isl_dim_domain(isl_dim_copy(bmap->dim)); - dom = isl_basic_set_universe(dom_dim); - - sol_for->sol.rational = ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL); - sol_for->sol.dec_level.callback.run = &sol_dec_level_wrap; - sol_for->sol.dec_level.sol = &sol_for->sol; - sol_for->fn = fn; - sol_for->user = user; - sol_for->sol.max = max; - sol_for->sol.n_out = isl_basic_map_dim(bmap, isl_dim_out); - sol_for->sol.add = &sol_for_add_wrap; - sol_for->sol.add_empty = NULL; - sol_for->sol.free = &sol_for_free_wrap; - - sol_for->sol.context = isl_context_alloc(dom); - if (!sol_for->sol.context) - goto error; - - isl_basic_set_free(dom); - return sol_for; -error: - isl_basic_set_free(dom); - sol_for_free(sol_for); - return NULL; -} - -static void sol_for_find_solutions(struct isl_sol_for *sol_for, - struct isl_tab *tab) -{ - find_solutions_main(&sol_for->sol, tab); -} - -int isl_basic_map_foreach_lexopt(__isl_keep isl_basic_map *bmap, int max, - int (*fn)(__isl_take isl_basic_set *dom, __isl_take isl_aff_list *list, - void *user), - void *user) -{ - struct isl_sol_for *sol_for = NULL; - - bmap = isl_basic_map_copy(bmap); - if (!bmap) - return -1; - - bmap = isl_basic_map_detect_equalities(bmap); - sol_for = sol_for_init(bmap, max, fn, user); - - if (isl_basic_map_plain_is_empty(bmap)) - /* nothing */; - else { - struct isl_tab *tab; - struct isl_context *context = sol_for->sol.context; - tab = tab_for_lexmin(bmap, - context->op->peek_basic_set(context), 1, max); - tab = context->op->detect_nonnegative_parameters(context, tab); - sol_for_find_solutions(sol_for, tab); - if (sol_for->sol.error) - goto error; - } - - sol_free(&sol_for->sol); - isl_basic_map_free(bmap); - return 0; -error: - sol_free(&sol_for->sol); - isl_basic_map_free(bmap); - return -1; -} - -int isl_basic_map_foreach_lexmin(__isl_keep isl_basic_map *bmap, - int (*fn)(__isl_take isl_basic_set *dom, __isl_take isl_aff_list *list, - void *user), - void *user) -{ - return isl_basic_map_foreach_lexopt(bmap, 0, fn, user); -} - -int isl_basic_map_foreach_lexmax(__isl_keep isl_basic_map *bmap, - int (*fn)(__isl_take isl_basic_set *dom, __isl_take isl_aff_list *list, - void *user), - void *user) -{ - return isl_basic_map_foreach_lexopt(bmap, 1, fn, user); -} - -int isl_basic_set_foreach_lexmax(__isl_keep isl_basic_set *bset, - int (*fn)(__isl_take isl_basic_set *dom, __isl_take isl_aff_list *list, - void *user), - void *user) -{ - return isl_basic_map_foreach_lexmax(bset, fn, user); -} - -/* Check if the given sequence of len variables starting at pos - * represents a trivial (i.e., zero) solution. - * The variables are assumed to be non-negative and to come in pairs, - * with each pair representing a variable of unrestricted sign. - * The solution is trivial if each such pair in the sequence consists - * of two identical values, meaning that the variable being represented - * has value zero. - */ -static int region_is_trivial(struct isl_tab *tab, int pos, int len) -{ - int i; - - if (len == 0) - return 0; - - for (i = 0; i < len; i += 2) { - int neg_row; - int pos_row; - - neg_row = tab->var[pos + i].is_row ? - tab->var[pos + i].index : -1; - pos_row = tab->var[pos + i + 1].is_row ? - tab->var[pos + i + 1].index : -1; - - if ((neg_row < 0 || - isl_int_is_zero(tab->mat->row[neg_row][1])) && - (pos_row < 0 || - isl_int_is_zero(tab->mat->row[pos_row][1]))) - continue; - - if (neg_row < 0 || pos_row < 0) - return 0; - if (isl_int_ne(tab->mat->row[neg_row][1], - tab->mat->row[pos_row][1])) - return 0; - } - - return 1; -} - -/* Return the index of the first trivial region or -1 if all regions - * are non-trivial. - */ -static int first_trivial_region(struct isl_tab *tab, - int n_region, struct isl_region *region) -{ - int i; - - for (i = 0; i < n_region; ++i) { - if (region_is_trivial(tab, region[i].pos, region[i].len)) - return i; - } - - return -1; -} - -/* Check if the solution is optimal, i.e., whether the first - * n_op entries are zero. - */ -static int is_optimal(__isl_keep isl_vec *sol, int n_op) -{ - int i; - - for (i = 0; i < n_op; ++i) - if (!isl_int_is_zero(sol->el[1 + i])) - return 0; - return 1; -} - -/* Add constraints to "tab" that ensure that any solution is significantly - * better that that represented by "sol". That is, find the first - * relevant (within first n_op) non-zero coefficient and force it (along - * with all previous coefficients) to be zero. - * If the solution is already optimal (all relevant coefficients are zero), - * then just mark the table as empty. - */ -static int force_better_solution(struct isl_tab *tab, - __isl_keep isl_vec *sol, int n_op) -{ - int i; - isl_ctx *ctx; - isl_vec *v = NULL; - - if (!sol) - return -1; - - for (i = 0; i < n_op; ++i) - if (!isl_int_is_zero(sol->el[1 + i])) - break; - - if (i == n_op) { - if (isl_tab_mark_empty(tab) < 0) - return -1; - return 0; - } - - ctx = isl_vec_get_ctx(sol); - v = isl_vec_alloc(ctx, 1 + tab->n_var); - if (!v) - return -1; - - for (; i >= 0; --i) { - v = isl_vec_clr(v); - isl_int_set_si(v->el[1 + i], -1); - if (add_lexmin_eq(tab, v->el) < 0) - goto error; - } - - isl_vec_free(v); - return 0; -error: - isl_vec_free(v); - return -1; -} - -struct isl_trivial { - int update; - int region; - int side; - struct isl_tab_undo *snap; -}; - -/* Return the lexicographically smallest non-trivial solution of the - * given ILP problem. - * - * All variables are assumed to be non-negative. - * - * n_op is the number of initial coordinates to optimize. - * That is, once a solution has been found, we will only continue looking - * for solution that result in significantly better values for those - * initial coordinates. That is, we only continue looking for solutions - * that increase the number of initial zeros in this sequence. - * - * A solution is non-trivial, if it is non-trivial on each of the - * specified regions. Each region represents a sequence of pairs - * of variables. A solution is non-trivial on such a region if - * at least one of these pairs consists of different values, i.e., - * such that the non-negative variable represented by the pair is non-zero. - * - * Whenever a conflict is encountered, all constraints involved are - * reported to the caller through a call to "conflict". - * - * We perform a simple branch-and-bound backtracking search. - * Each level in the search represents initially trivial region that is forced - * to be non-trivial. - * At each level we consider n cases, where n is the length of the region. - * In terms of the n/2 variables of unrestricted signs being encoded by - * the region, we consider the cases - * x_0 >= 1 - * x_0 <= -1 - * x_0 = 0 and x_1 >= 1 - * x_0 = 0 and x_1 <= -1 - * x_0 = 0 and x_1 = 0 and x_2 >= 1 - * x_0 = 0 and x_1 = 0 and x_2 <= -1 - * ... - * The cases are considered in this order, assuming that each pair - * x_i_a x_i_b represents the value x_i_b - x_i_a. - * That is, x_0 >= 1 is enforced by adding the constraint - * x_0_b - x_0_a >= 1 - */ -__isl_give isl_vec *isl_tab_basic_set_non_trivial_lexmin( - __isl_take isl_basic_set *bset, int n_op, int n_region, - struct isl_region *region, - int (*conflict)(int con, void *user), void *user) -{ - int i, j; - int r; - isl_ctx *ctx = isl_basic_set_get_ctx(bset); - isl_vec *v = NULL; - isl_vec *sol = isl_vec_alloc(ctx, 0); - struct isl_tab *tab; - struct isl_trivial *triv = NULL; - int level, init; - - tab = tab_for_lexmin(isl_basic_map_from_range(bset), NULL, 0, 0); - if (!tab) - goto error; - tab->conflict = conflict; - tab->conflict_user = user; - - v = isl_vec_alloc(ctx, 1 + tab->n_var); - triv = isl_calloc_array(ctx, struct isl_trivial, n_region); - if (!v || !triv) - goto error; - - level = 0; - init = 1; - - while (level >= 0) { - int side, base; - - if (init) { - tab = cut_to_integer_lexmin(tab); - if (!tab) - goto error; - if (tab->empty) - goto backtrack; - r = first_trivial_region(tab, n_region, region); - if (r < 0) { - for (i = 0; i < level; ++i) - triv[i].update = 1; - isl_vec_free(sol); - sol = isl_tab_get_sample_value(tab); - if (!sol) - goto error; - if (is_optimal(sol, n_op)) - break; - goto backtrack; - } - if (level >= n_region) - isl_die(ctx, isl_error_internal, - "nesting level too deep", goto error); - if (isl_tab_extend_cons(tab, - 2 * region[r].len + 2 * n_op) < 0) - goto error; - triv[level].region = r; - triv[level].side = 0; - } - - r = triv[level].region; - side = triv[level].side; - base = 2 * (side/2); - - if (side >= region[r].len) { -backtrack: - level--; - init = 0; - if (level >= 0) - if (isl_tab_rollback(tab, triv[level].snap) < 0) - goto error; - continue; - } - - if (triv[level].update) { - if (force_better_solution(tab, sol, n_op) < 0) - goto error; - triv[level].update = 0; - } - - if (side == base && base >= 2) { - for (j = base - 2; j < base; ++j) { - v = isl_vec_clr(v); - isl_int_set_si(v->el[1 + region[r].pos + j], 1); - if (add_lexmin_eq(tab, v->el) < 0) - goto error; - } - } - - triv[level].snap = isl_tab_snap(tab); - if (isl_tab_push_basis(tab) < 0) - goto error; - - v = isl_vec_clr(v); - isl_int_set_si(v->el[0], -1); - isl_int_set_si(v->el[1 + region[r].pos + side], -1); - isl_int_set_si(v->el[1 + region[r].pos + (side ^ 1)], 1); - tab = add_lexmin_ineq(tab, v->el); - - triv[level].side++; - level++; - init = 1; - } - - free(triv); - isl_vec_free(v); - isl_tab_free(tab); - isl_basic_set_free(bset); - - return sol; -error: - free(triv); - isl_vec_free(v); - isl_tab_free(tab); - isl_basic_set_free(bset); - isl_vec_free(sol); - return NULL; -} - -/* Return the lexicographically smallest rational point in "bset", - * assuming that all variables are non-negative. - * If "bset" is empty, then return a zero-length vector. - */ - __isl_give isl_vec *isl_tab_basic_set_non_neg_lexmin( - __isl_take isl_basic_set *bset) -{ - struct isl_tab *tab; - isl_ctx *ctx = isl_basic_set_get_ctx(bset); - isl_vec *sol; - - tab = tab_for_lexmin(isl_basic_map_from_range(bset), NULL, 0, 0); - if (!tab) - goto error; - if (tab->empty) - sol = isl_vec_alloc(ctx, 0); - else - sol = isl_tab_get_sample_value(tab); - isl_tab_free(tab); - isl_basic_set_free(bset); - return sol; -error: - isl_tab_free(tab); - isl_basic_set_free(bset); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_test.c b/cloog-0.16.3/isl/isl_test.c deleted file mode 100644 index d8248a3..0000000 --- a/cloog-0.16.3/isl/isl_test.c +++ /dev/null @@ -1,2386 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static char *srcdir; - -static char *get_filename(isl_ctx *ctx, const char *name, const char *suffix) { - char *filename; - int length; - char *pattern = "%s/test_inputs/%s.%s"; - - length = strlen(pattern) - 6 + strlen(srcdir) + strlen(name) - + strlen(suffix) + 1; - filename = isl_alloc_array(ctx, char, length); - - if (!filename) - return NULL; - - sprintf(filename, pattern, srcdir, name, suffix); - - return filename; -} - -void test_parse_map(isl_ctx *ctx, const char *str) -{ - isl_map *map; - - map = isl_map_read_from_str(ctx, str, -1); - assert(map); - isl_map_free(map); -} - -void test_parse_map_equal(isl_ctx *ctx, const char *str, const char *str2) -{ - isl_map *map, *map2; - - map = isl_map_read_from_str(ctx, str, -1); - map2 = isl_map_read_from_str(ctx, str2, -1); - assert(map && map2 && isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); -} - -void test_parse_pwqp(isl_ctx *ctx, const char *str) -{ - isl_pw_qpolynomial *pwqp; - - pwqp = isl_pw_qpolynomial_read_from_str(ctx, str); - assert(pwqp); - isl_pw_qpolynomial_free(pwqp); -} - -void test_parse(struct isl_ctx *ctx) -{ - isl_map *map, *map2; - const char *str, *str2; - - str = "{ [i] -> [-i] }"; - map = isl_map_read_from_str(ctx, str, -1); - assert(map); - isl_map_free(map); - - str = "{ A[i] -> L[([i/3])] }"; - map = isl_map_read_from_str(ctx, str, -1); - assert(map); - isl_map_free(map); - - test_parse_map(ctx, "{[[s] -> A[i]] -> [[s+1] -> A[i]]}"); - test_parse_map(ctx, "{ [p1, y1, y2] -> [2, y1, y2] : " - "p1 = 1 && (y1 <= y2 || y2 = 0) }"); - - str = "{ [x,y] : [([x/2]+y)/3] >= 1 }"; - str2 = "{ [x, y] : 2y >= 6 - x }"; - test_parse_map_equal(ctx, str, str2); - - test_parse_map_equal(ctx, "{ [x,y] : x <= min(y, 2*y+3) }", - "{ [x,y] : x <= y, 2*y + 3 }"); - str = "{ [x, y] : (y <= x and y >= -3) or (2y <= -3 + x and y <= -4) }"; - test_parse_map_equal(ctx, "{ [x,y] : x >= min(y, 2*y+3) }", str); - - str = "{[new,old] -> [new+1-2*[(new+1)/2],old+1-2*[(old+1)/2]]}"; - map = isl_map_read_from_str(ctx, str, -1); - str = "{ [new, old] -> [o0, o1] : " - "exists (e0 = [(-1 - new + o0)/2], e1 = [(-1 - old + o1)/2]: " - "2e0 = -1 - new + o0 and 2e1 = -1 - old + o1 and o0 >= 0 and " - "o0 <= 1 and o1 >= 0 and o1 <= 1) }"; - map2 = isl_map_read_from_str(ctx, str, -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "{[new,old] -> [new+1-2*[(new+1)/2],old+1-2*[(old+1)/2]]}"; - map = isl_map_read_from_str(ctx, str, -1); - str = "{[new,old] -> [(new+1)%2,(old+1)%2]}"; - map2 = isl_map_read_from_str(ctx, str, -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "[n] -> { [c1] : c1>=0 and c1<=floord(n-4,3) }"; - str2 = "[n] -> { [c1] : c1 >= 0 and 3c1 <= -4 + n }"; - test_parse_map_equal(ctx, str, str2); - - test_parse_pwqp(ctx, "{ [i] -> i + [ (i + [i/3])/2 ] }"); - test_parse_map(ctx, "{ S1[i] -> [([i/10]),i%10] : 0 <= i <= 45 }"); -} - -void test_read(struct isl_ctx *ctx) -{ - char *filename; - FILE *input; - struct isl_basic_set *bset1, *bset2; - const char *str = "{[y]: Exists ( alpha : 2alpha = y)}"; - - filename = get_filename(ctx, "set", "omega"); - assert(filename); - input = fopen(filename, "r"); - assert(input); - - bset1 = isl_basic_set_read_from_file(ctx, input, 0); - bset2 = isl_basic_set_read_from_str(ctx, str, 0); - - assert(isl_basic_set_is_equal(bset1, bset2) == 1); - - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - free(filename); - - fclose(input); -} - -void test_bounded(struct isl_ctx *ctx) -{ - isl_set *set; - int bounded; - - set = isl_set_read_from_str(ctx, "[n] -> {[i] : 0 <= i <= n }", -1); - bounded = isl_set_is_bounded(set); - assert(bounded); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, "{[n, i] : 0 <= i <= n }", -1); - bounded = isl_set_is_bounded(set); - assert(!bounded); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, "[n] -> {[i] : i <= n }", -1); - bounded = isl_set_is_bounded(set); - assert(!bounded); - isl_set_free(set); -} - -/* Construct the basic set { [i] : 5 <= i <= N } */ -void test_construction(struct isl_ctx *ctx) -{ - isl_int v; - struct isl_dim *dim; - struct isl_basic_set *bset; - struct isl_constraint *c; - - isl_int_init(v); - - dim = isl_dim_set_alloc(ctx, 1, 1); - bset = isl_basic_set_universe(dim); - - c = isl_inequality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_param, 0, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_inequality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, -5); - isl_constraint_set_constant(c, v); - bset = isl_basic_set_add_constraint(bset, c); - - isl_basic_set_free(bset); - - isl_int_clear(v); -} - -void test_dim(struct isl_ctx *ctx) -{ - const char *str; - isl_map *map1, *map2; - - map1 = isl_map_read_from_str(ctx, - "[n] -> { [i] -> [j] : exists (a = [i/10] : i - 10a <= n ) }", -1); - map1 = isl_map_add_dims(map1, isl_dim_in, 1); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [i,k] -> [j] : exists (a = [i/10] : i - 10a <= n ) }", -1); - assert(isl_map_is_equal(map1, map2)); - isl_map_free(map2); - - map1 = isl_map_project_out(map1, isl_dim_in, 0, 1); - map2 = isl_map_read_from_str(ctx, "[n] -> { [i] -> [j] : n >= 0 }", -1); - assert(isl_map_is_equal(map1, map2)); - - isl_map_free(map1); - isl_map_free(map2); - - str = "[n] -> { [i] -> [] : exists a : 0 <= i <= n and i = 2 a }"; - map1 = isl_map_read_from_str(ctx, str, -1); - str = "{ [i] -> [j] : exists a : 0 <= i <= j and i = 2 a }"; - map2 = isl_map_read_from_str(ctx, str, -1); - map1 = isl_map_move_dims(map1, isl_dim_out, 0, isl_dim_param, 0, 1); - assert(isl_map_is_equal(map1, map2)); - - isl_map_free(map1); - isl_map_free(map2); -} - -void test_div(struct isl_ctx *ctx) -{ - isl_int v; - struct isl_dim *dim; - struct isl_basic_set *bset; - struct isl_constraint *c; - - isl_int_init(v); - - /* test 1 */ - dim = isl_dim_set_alloc(ctx, 0, 3); - bset = isl_basic_set_universe(dim); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, -1); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, 1); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 1, 2); - - assert(bset && bset->n_div == 1); - isl_basic_set_free(bset); - - /* test 2 */ - dim = isl_dim_set_alloc(ctx, 0, 3); - bset = isl_basic_set_universe(dim); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, 1); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, -1); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 1, 2); - - assert(bset && bset->n_div == 1); - isl_basic_set_free(bset); - - /* test 3 */ - dim = isl_dim_set_alloc(ctx, 0, 3); - bset = isl_basic_set_universe(dim); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, 1); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, -3); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 4); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 1, 2); - - assert(bset && bset->n_div == 1); - isl_basic_set_free(bset); - - /* test 4 */ - dim = isl_dim_set_alloc(ctx, 0, 3); - bset = isl_basic_set_universe(dim); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, 2); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, -1); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 6); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 1, 2); - - assert(isl_basic_set_is_empty(bset)); - isl_basic_set_free(bset); - - /* test 5 */ - dim = isl_dim_set_alloc(ctx, 0, 3); - bset = isl_basic_set_universe(dim); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, -3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 2, 1); - - assert(bset && bset->n_div == 0); - isl_basic_set_free(bset); - - /* test 6 */ - dim = isl_dim_set_alloc(ctx, 0, 3); - bset = isl_basic_set_universe(dim); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 6); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, -3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 2, 1); - - assert(bset && bset->n_div == 1); - isl_basic_set_free(bset); - - /* test 7 */ - /* This test is a bit tricky. We set up an equality - * a + 3b + 3c = 6 e0 - * Normalization of divs creates _two_ divs - * a = 3 e0 - * c - b - e0 = 2 e1 - * Afterwards e0 is removed again because it has coefficient -1 - * and we end up with the original equality and div again. - * Perhaps we can avoid the introduction of this temporary div. - */ - dim = isl_dim_set_alloc(ctx, 0, 4); - bset = isl_basic_set_universe(dim); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, -3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - isl_int_set_si(v, -3); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - isl_int_set_si(v, 6); - isl_constraint_set_coefficient(c, isl_dim_set, 3, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 3, 1); - - /* Test disabled for now */ - /* - assert(bset && bset->n_div == 1); - */ - isl_basic_set_free(bset); - - /* test 8 */ - dim = isl_dim_set_alloc(ctx, 0, 5); - bset = isl_basic_set_universe(dim); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, -3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - isl_int_set_si(v, -3); - isl_constraint_set_coefficient(c, isl_dim_set, 3, v); - isl_int_set_si(v, 6); - isl_constraint_set_coefficient(c, isl_dim_set, 4, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - isl_int_set_si(v, 1); - isl_constraint_set_constant(c, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 4, 1); - - /* Test disabled for now */ - /* - assert(bset && bset->n_div == 1); - */ - isl_basic_set_free(bset); - - /* test 9 */ - dim = isl_dim_set_alloc(ctx, 0, 4); - bset = isl_basic_set_universe(dim); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - isl_int_set_si(v, -2); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 3, v); - isl_int_set_si(v, 2); - isl_constraint_set_constant(c, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 2, 2); - - bset = isl_basic_set_fix_si(bset, isl_dim_set, 0, 2); - - assert(!isl_basic_set_is_empty(bset)); - - isl_basic_set_free(bset); - - /* test 10 */ - dim = isl_dim_set_alloc(ctx, 0, 3); - bset = isl_basic_set_universe(dim); - - c = isl_equality_alloc(isl_basic_set_get_dim(bset)); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, -2); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 2, 1); - - bset = isl_basic_set_fix_si(bset, isl_dim_set, 0, 2); - - isl_basic_set_free(bset); - - isl_int_clear(v); -} - -void test_application_case(struct isl_ctx *ctx, const char *name) -{ - char *filename; - FILE *input; - struct isl_basic_set *bset1, *bset2; - struct isl_basic_map *bmap; - - filename = get_filename(ctx, name, "omega"); - assert(filename); - input = fopen(filename, "r"); - assert(input); - - bset1 = isl_basic_set_read_from_file(ctx, input, 0); - bmap = isl_basic_map_read_from_file(ctx, input, 0); - - bset1 = isl_basic_set_apply(bset1, bmap); - - bset2 = isl_basic_set_read_from_file(ctx, input, 0); - - assert(isl_basic_set_is_equal(bset1, bset2) == 1); - - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - free(filename); - - fclose(input); -} - -void test_application(struct isl_ctx *ctx) -{ - test_application_case(ctx, "application"); - test_application_case(ctx, "application2"); -} - -void test_affine_hull_case(struct isl_ctx *ctx, const char *name) -{ - char *filename; - FILE *input; - struct isl_basic_set *bset1, *bset2; - - filename = get_filename(ctx, name, "polylib"); - assert(filename); - input = fopen(filename, "r"); - assert(input); - - bset1 = isl_basic_set_read_from_file(ctx, input, 0); - bset2 = isl_basic_set_read_from_file(ctx, input, 0); - - bset1 = isl_basic_set_affine_hull(bset1); - - assert(isl_basic_set_is_equal(bset1, bset2) == 1); - - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - free(filename); - - fclose(input); -} - -void test_affine_hull(struct isl_ctx *ctx) -{ - test_affine_hull_case(ctx, "affine2"); - test_affine_hull_case(ctx, "affine"); - test_affine_hull_case(ctx, "affine3"); -} - -void test_convex_hull_case(struct isl_ctx *ctx, const char *name) -{ - char *filename; - FILE *input; - struct isl_basic_set *bset1, *bset2; - struct isl_set *set; - - filename = get_filename(ctx, name, "polylib"); - assert(filename); - input = fopen(filename, "r"); - assert(input); - - bset1 = isl_basic_set_read_from_file(ctx, input, 0); - bset2 = isl_basic_set_read_from_file(ctx, input, 0); - - set = isl_basic_set_union(bset1, bset2); - bset1 = isl_set_convex_hull(set); - - bset2 = isl_basic_set_read_from_file(ctx, input, 0); - - assert(isl_basic_set_is_equal(bset1, bset2) == 1); - - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - free(filename); - - fclose(input); -} - -void test_convex_hull_algo(struct isl_ctx *ctx, int convex) -{ - const char *str1, *str2; - isl_set *set1, *set2; - int orig_convex = ctx->opt->convex; - ctx->opt->convex = convex; - - test_convex_hull_case(ctx, "convex0"); - test_convex_hull_case(ctx, "convex1"); - test_convex_hull_case(ctx, "convex2"); - test_convex_hull_case(ctx, "convex3"); - test_convex_hull_case(ctx, "convex4"); - test_convex_hull_case(ctx, "convex5"); - test_convex_hull_case(ctx, "convex6"); - test_convex_hull_case(ctx, "convex7"); - test_convex_hull_case(ctx, "convex8"); - test_convex_hull_case(ctx, "convex9"); - test_convex_hull_case(ctx, "convex10"); - test_convex_hull_case(ctx, "convex11"); - test_convex_hull_case(ctx, "convex12"); - test_convex_hull_case(ctx, "convex13"); - test_convex_hull_case(ctx, "convex14"); - test_convex_hull_case(ctx, "convex15"); - - str1 = "{ [i0, i1, i2] : (i2 = 1 and i0 = 0 and i1 >= 0) or " - "(i0 = 1 and i1 = 0 and i2 = 1) or " - "(i0 = 0 and i1 = 0 and i2 = 0) }"; - str2 = "{ [i0, i1, i2] : i0 >= 0 and i2 >= i0 and i2 <= 1 and i1 >= 0 }"; - set1 = isl_set_read_from_str(ctx, str1, -1); - set2 = isl_set_read_from_str(ctx, str2, -1); - set1 = isl_set_from_basic_set(isl_set_convex_hull(set1)); - assert(isl_set_is_equal(set1, set2)); - isl_set_free(set1); - isl_set_free(set2); - - ctx->opt->convex = orig_convex; -} - -void test_convex_hull(struct isl_ctx *ctx) -{ - test_convex_hull_algo(ctx, ISL_CONVEX_HULL_FM); - test_convex_hull_algo(ctx, ISL_CONVEX_HULL_WRAP); -} - -void test_gist_case(struct isl_ctx *ctx, const char *name) -{ - char *filename; - FILE *input; - struct isl_basic_set *bset1, *bset2; - - filename = get_filename(ctx, name, "polylib"); - assert(filename); - input = fopen(filename, "r"); - assert(input); - - bset1 = isl_basic_set_read_from_file(ctx, input, 0); - bset2 = isl_basic_set_read_from_file(ctx, input, 0); - - bset1 = isl_basic_set_gist(bset1, bset2); - - bset2 = isl_basic_set_read_from_file(ctx, input, 0); - - assert(isl_basic_set_is_equal(bset1, bset2) == 1); - - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - free(filename); - - fclose(input); -} - -void test_gist(struct isl_ctx *ctx) -{ - const char *str; - isl_basic_set *bset1, *bset2; - - test_gist_case(ctx, "gist1"); - - str = "[p0, p2, p3, p5, p6, p10] -> { [] : " - "exists (e0 = [(15 + p0 + 15p6 + 15p10)/16], e1 = [(p5)/8], " - "e2 = [(p6)/128], e3 = [(8p2 - p5)/128], " - "e4 = [(128p3 - p6)/4096]: 8e1 = p5 and 128e2 = p6 and " - "128e3 = 8p2 - p5 and 4096e4 = 128p3 - p6 and p2 >= 0 and " - "16e0 >= 16 + 16p6 + 15p10 and p2 <= 15 and p3 >= 0 and " - "p3 <= 31 and p6 >= 128p3 and p5 >= 8p2 and p10 >= 0 and " - "16e0 <= 15 + p0 + 15p6 + 15p10 and 16e0 >= p0 + 15p6 + 15p10 and " - "p10 <= 15 and p10 <= -1 + p0 - p6) }"; - bset1 = isl_basic_set_read_from_str(ctx, str, -1); - str = "[p0, p2, p3, p5, p6, p10] -> { [] : exists (e0 = [(p5)/8], " - "e1 = [(p6)/128], e2 = [(8p2 - p5)/128], " - "e3 = [(128p3 - p6)/4096]: 8e0 = p5 and 128e1 = p6 and " - "128e2 = 8p2 - p5 and 4096e3 = 128p3 - p6 and p5 >= -7 and " - "p2 >= 0 and 8p2 <= -1 + p0 and p2 <= 15 and p3 >= 0 and " - "p3 <= 31 and 128p3 <= -1 + p0 and p6 >= -127 and " - "p5 <= -1 + p0 and p6 <= -1 + p0 and p6 >= 128p3 and " - "p0 >= 1 and p5 >= 8p2 and p10 >= 0 and p10 <= 15 ) }"; - bset2 = isl_basic_set_read_from_str(ctx, str, -1); - bset1 = isl_basic_set_gist(bset1, bset2); - assert(bset1 && bset1->n_div == 0); - isl_basic_set_free(bset1); -} - -void test_coalesce_set(isl_ctx *ctx, const char *str, int check_one) -{ - isl_set *set, *set2; - - set = isl_set_read_from_str(ctx, str, -1); - set = isl_set_coalesce(set); - set2 = isl_set_read_from_str(ctx, str, -1); - assert(isl_set_is_equal(set, set2)); - if (check_one) - assert(set && set->n == 1); - isl_set_free(set); - isl_set_free(set2); -} - -void test_coalesce(struct isl_ctx *ctx) -{ - const char *str; - struct isl_set *set, *set2; - struct isl_map *map, *map2; - - set = isl_set_read_from_str(ctx, - "{[x,y]: x >= 0 & x <= 10 & y >= 0 & y <= 10 or " - "y >= x & x >= 2 & 5 >= y }", -1); - set = isl_set_coalesce(set); - assert(set && set->n == 1); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & 2x + y <= 30 & y <= 10 & x >= 0 or " - "x + y >= 10 & y <= x & x + y <= 20 & y >= 0}", -1); - set = isl_set_coalesce(set); - assert(set && set->n == 1); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & 2x + y <= 30 & y <= 10 & x >= 0 or " - "x + y >= 10 & y <= x & x + y <= 19 & y >= 0}", -1); - set = isl_set_coalesce(set); - assert(set && set->n == 2); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x >= 6 & x <= 10 & y <= x}", -1); - set = isl_set_coalesce(set); - assert(set && set->n == 1); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x >= 7 & x <= 10 & y <= x}", -1); - set = isl_set_coalesce(set); - assert(set && set->n == 2); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x >= 6 & x <= 10 & y + 1 <= x}", -1); - set = isl_set_coalesce(set); - assert(set && set->n == 2); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x = 6 & y <= 6}", -1); - set = isl_set_coalesce(set); - assert(set && set->n == 1); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x = 7 & y <= 6}", -1); - set = isl_set_coalesce(set); - assert(set && set->n == 2); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x = 6 & y <= 5}", -1); - set = isl_set_coalesce(set); - assert(set && set->n == 1); - set2 = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x = 6 & y <= 5}", -1); - assert(isl_set_is_equal(set, set2)); - isl_set_free(set); - isl_set_free(set2); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x = 6 & y <= 7}", -1); - set = isl_set_coalesce(set); - assert(set && set->n == 2); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "[n] -> { [i] : i = 1 and n >= 2 or 2 <= i and i <= n }", -1); - set = isl_set_coalesce(set); - assert(set && set->n == 1); - set2 = isl_set_read_from_str(ctx, - "[n] -> { [i] : i = 1 and n >= 2 or 2 <= i and i <= n }", -1); - assert(isl_set_is_equal(set, set2)); - isl_set_free(set); - isl_set_free(set2); - - set = isl_set_read_from_str(ctx, - "{[x,y] : x >= 0 and y >= 0 or 0 <= y and y <= 5 and x = -1}", -1); - set = isl_set_coalesce(set); - set2 = isl_set_read_from_str(ctx, - "{[x,y] : x >= 0 and y >= 0 or 0 <= y and y <= 5 and x = -1}", -1); - assert(isl_set_is_equal(set, set2)); - isl_set_free(set); - isl_set_free(set2); - - set = isl_set_read_from_str(ctx, - "[n] -> { [i] : 1 <= i and i <= n - 1 or " - "2 <= i and i <= n }", -1); - set = isl_set_coalesce(set); - assert(set && set->n == 1); - set2 = isl_set_read_from_str(ctx, - "[n] -> { [i] : 1 <= i and i <= n - 1 or " - "2 <= i and i <= n }", -1); - assert(isl_set_is_equal(set, set2)); - isl_set_free(set); - isl_set_free(set2); - - map = isl_map_read_from_str(ctx, - "[n] -> { [i0] -> [o0] : exists (e0 = [(i0)/4], e1 = [(o0)/4], " - "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], " - "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and " - "4e4 = -2 + o0 and i0 >= 8 + 2n and o0 >= 2 + i0 and " - "o0 <= 56 + 2n and o0 <= -12 + 4n and i0 <= 57 + 2n and " - "i0 <= -11 + 4n and o0 >= 6 + 2n and 4e0 <= i0 and " - "4e0 >= -3 + i0 and 4e1 <= o0 and 4e1 >= -3 + o0 and " - "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0);" - "[i0] -> [o0] : exists (e0 = [(i0)/4], e1 = [(o0)/4], " - "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], " - "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and " - "4e4 = -2 + o0 and 2e0 >= 3 + n and e0 <= -4 + n and " - "2e0 <= 27 + n and e1 <= -4 + n and 2e1 <= 27 + n and " - "2e1 >= 2 + n and e1 >= 1 + e0 and i0 >= 7 + 2n and " - "i0 <= -11 + 4n and i0 <= 57 + 2n and 4e0 <= -2 + i0 and " - "4e0 >= -3 + i0 and o0 >= 6 + 2n and o0 <= -11 + 4n and " - "o0 <= 57 + 2n and 4e1 <= -2 + o0 and 4e1 >= -3 + o0 and " - "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0 ) }", -1); - map = isl_map_coalesce(map); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [i0] -> [o0] : exists (e0 = [(i0)/4], e1 = [(o0)/4], " - "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], " - "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and " - "4e4 = -2 + o0 and i0 >= 8 + 2n and o0 >= 2 + i0 and " - "o0 <= 56 + 2n and o0 <= -12 + 4n and i0 <= 57 + 2n and " - "i0 <= -11 + 4n and o0 >= 6 + 2n and 4e0 <= i0 and " - "4e0 >= -3 + i0 and 4e1 <= o0 and 4e1 >= -3 + o0 and " - "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0);" - "[i0] -> [o0] : exists (e0 = [(i0)/4], e1 = [(o0)/4], " - "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], " - "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and " - "4e4 = -2 + o0 and 2e0 >= 3 + n and e0 <= -4 + n and " - "2e0 <= 27 + n and e1 <= -4 + n and 2e1 <= 27 + n and " - "2e1 >= 2 + n and e1 >= 1 + e0 and i0 >= 7 + 2n and " - "i0 <= -11 + 4n and i0 <= 57 + 2n and 4e0 <= -2 + i0 and " - "4e0 >= -3 + i0 and o0 >= 6 + 2n and o0 <= -11 + 4n and " - "o0 <= 57 + 2n and 4e1 <= -2 + o0 and 4e1 >= -3 + o0 and " - "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0 ) }", -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "[n, m] -> { [] -> [o0, o2, o3] : (o3 = 1 and o0 >= 1 + m and " - "o0 <= n + m and o2 <= m and o0 >= 2 + n and o2 >= 3) or " - "(o0 >= 2 + n and o0 >= 1 + m and o0 <= n + m and n >= 1 and " - "o3 <= -1 + o2 and o3 >= 1 - m + o2 and o3 >= 2 and o3 <= n) }"; - map = isl_map_read_from_str(ctx, str, -1); - map = isl_map_coalesce(map); - map2 = isl_map_read_from_str(ctx, str, -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "[M, N] -> { [i0, i1, i2, i3, i4, i5, i6] -> " - "[o0, o1, o2, o3, o4, o5, o6] : " - "(o6 <= -4 + 2M - 2N + i0 + i1 - i2 + i6 - o0 - o1 + o2 and " - "o3 <= -2 + i3 and o6 >= 2 + i0 + i3 + i6 - o0 - o3 and " - "o6 >= 2 - M + N + i3 + i4 + i6 - o3 - o4 and o0 <= -1 + i0 and " - "o4 >= 4 - 3M + 3N - i0 - i1 + i2 + 2i3 + i4 + o0 + o1 - o2 - 2o3 " - "and o6 <= -3 + 2M - 2N + i3 + i4 - i5 + i6 - o3 - o4 + o5 and " - "2o6 <= -5 + 5M - 5N + 2i0 + i1 - i2 - i5 + 2i6 - 2o0 - o1 + o2 + o5 " - "and o6 >= 2i0 + i1 + i6 - 2o0 - o1 and " - "3o6 <= -5 + 4M - 4N + 2i0 + i1 - i2 + 2i3 + i4 - i5 + 3i6 " - "- 2o0 - o1 + o2 - 2o3 - o4 + o5) or " - "(N >= 2 and o3 <= -1 + i3 and o0 <= -1 + i0 and " - "o6 >= i3 + i6 - o3 and M >= 0 and " - "2o6 >= 1 + i0 + i3 + 2i6 - o0 - o3 and " - "o6 >= 1 - M + i0 + i6 - o0 and N >= 2M and o6 >= i0 + i6 - o0) }"; - map = isl_map_read_from_str(ctx, str, -1); - map = isl_map_coalesce(map); - map2 = isl_map_read_from_str(ctx, str, -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "[M, N] -> { [] -> [o0] : (o0 = 0 and M >= 1 and N >= 2) or " - "(o0 = 0 and M >= 1 and N >= 2M and N >= 2 + M) or " - "(o0 = 0 and M >= 2 and N >= 3) or " - "(M = 0 and o0 = 0 and N >= 3) }"; - map = isl_map_read_from_str(ctx, str, -1); - map = isl_map_coalesce(map); - map2 = isl_map_read_from_str(ctx, str, -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "{ [i0, i1, i2, i3] : (i1 = 10i0 and i0 >= 1 and 10i0 <= 100 and " - "i3 <= 9 + 10 i2 and i3 >= 1 + 10i2 and i3 >= 0) or " - "(i1 <= 9 + 10i0 and i1 >= 1 + 10i0 and i2 >= 0 and " - "i0 >= 0 and i1 <= 100 and i3 <= 9 + 10i2 and i3 >= 1 + 10i2) }"; - map = isl_map_read_from_str(ctx, str, -1); - map = isl_map_coalesce(map); - map2 = isl_map_read_from_str(ctx, str, -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - test_coalesce_set(ctx, - "[M] -> { [i1] : (i1 >= 2 and i1 <= M) or " - "(i1 = M and M >= 1) }", 0); - test_coalesce_set(ctx, - "{[x,y] : x,y >= 0; [x,y] : 10 <= x <= 20 and y >= -1 }", 0); - test_coalesce_set(ctx, - "{ [x, y] : (x >= 1 and y >= 1 and x <= 2 and y <= 2) or " - "(y = 3 and x = 1) }", 1); - test_coalesce_set(ctx, - "[M] -> { [i0, i1, i2, i3, i4] : (i1 >= 3 and i4 >= 2 + i2 and " - "i2 >= 2 and i0 >= 2 and i3 >= 1 + i2 and i0 <= M and " - "i1 <= M and i3 <= M and i4 <= M) or " - "(i1 >= 2 and i4 >= 1 + i2 and i2 >= 2 and i0 >= 2 and " - "i3 >= 1 + i2 and i0 <= M and i1 <= -1 + M and i3 <= M and " - "i4 <= -1 + M) }", 1); - test_coalesce_set(ctx, - "{ [x, y] : (x >= 0 and y >= 0 and x <= 10 and y <= 10) or " - "(x >= 1 and y >= 1 and x <= 11 and y <= 11) }", 1); - test_coalesce_set(ctx, - "{[x,y,z] : y + 2 >= 0 and x - y + 1 >= 0 and " - "-x - y + 1 >= 0 and -3 <= z <= 3;" - "[x,y,z] : -x+z + 20 >= 0 and -x-z + 20 >= 0 and " - "x-z + 20 >= 0 and x+z + 20 >= 0 and -10 <= y <= 0}", 1); - test_coalesce_set(ctx, - "{[x,y] : 0 <= x,y <= 10; [5,y]: 4 <=y <= 11}", 1); - test_coalesce_set(ctx, "{[x,0] : x >= 0; [x,1] : x <= 20}", 0); - test_coalesce_set(ctx, - "{[x,0,0] : -5 <= x <= 5; [0,y,1] : -5 <= y <= 5 }", 1); - test_coalesce_set(ctx, "{ [x, 1 - x] : 0 <= x <= 1; [0,0] }", 1); - test_coalesce_set(ctx, "{ [0,0]; [i,i] : 1 <= i <= 10 }", 1); - test_coalesce_set(ctx, "{ [0,0]; [i,j] : 1 <= i,j <= 10 }", 0); - test_coalesce_set(ctx, "{ [0,0]; [i,2i] : 1 <= i <= 10 }", 1); - test_coalesce_set(ctx, "{ [0,0]; [i,2i] : 2 <= i <= 10 }", 0); - test_coalesce_set(ctx, "{ [1,0]; [i,2i] : 1 <= i <= 10 }", 0); - test_coalesce_set(ctx, "{ [0,1]; [i,2i] : 1 <= i <= 10 }", 0); -} - -void test_closure(struct isl_ctx *ctx) -{ - const char *str; - isl_set *dom; - isl_map *up, *right; - isl_map *map, *map2; - int exact; - - /* COCOA example 1 */ - map = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : i2 = i + 1 and j2 = j + 1 and " - "1 <= i and i < n and 1 <= j and j < n or " - "i2 = i + 1 and j2 = j - 1 and " - "1 <= i and i < n and 2 <= j and j <= n }", -1); - map = isl_map_power(map, &exact); - assert(exact); - isl_map_free(map); - - /* COCOA example 1 */ - map = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : i2 = i + 1 and j2 = j + 1 and " - "1 <= i and i < n and 1 <= j and j < n or " - "i2 = i + 1 and j2 = j - 1 and " - "1 <= i and i < n and 2 <= j and j <= n }", -1); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k : " - "1 <= i and i < n and 1 <= j and j <= n and " - "2 <= i2 and i2 <= n and 1 <= j2 and j2 <= n and " - "i2 = i + k1 + k2 and j2 = j + k1 - k2 and " - "k1 >= 0 and k2 >= 0 and k1 + k2 = k and k >= 1 )}", -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map2); - isl_map_free(map); - - map = isl_map_read_from_str(ctx, - "[n] -> { [x] -> [y] : y = x + 1 and 0 <= x and x <= n and " - " 0 <= y and y <= n }", -1); - map = isl_map_transitive_closure(map, &exact); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [x] -> [y] : y > x and 0 <= x and x <= n and " - " 0 <= y and y <= n }", -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map2); - isl_map_free(map); - - /* COCOA example 2 */ - map = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : i2 = i + 2 and j2 = j + 2 and " - "1 <= i and i < n - 1 and 1 <= j and j < n - 1 or " - "i2 = i + 2 and j2 = j - 2 and " - "1 <= i and i < n - 1 and 3 <= j and j <= n }", -1); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k : " - "1 <= i and i < n - 1 and 1 <= j and j <= n and " - "3 <= i2 and i2 <= n and 1 <= j2 and j2 <= n and " - "i2 = i + 2 k1 + 2 k2 and j2 = j + 2 k1 - 2 k2 and " - "k1 >= 0 and k2 >= 0 and k1 + k2 = k and k >= 1) }", -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - /* COCOA Fig.2 left */ - map = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : i2 = i + 2 and j2 = j and " - "i <= 2 j - 3 and i <= n - 2 and j <= 2 i - 1 and " - "j <= n or " - "i2 = i and j2 = j + 2 and i <= 2 j - 1 and i <= n and " - "j <= 2 i - 3 and j <= n - 2 or " - "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and " - "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }", -1); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - isl_map_free(map); - - /* COCOA Fig.2 right */ - map = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : i2 = i + 3 and j2 = j and " - "i <= 2 j - 4 and i <= n - 3 and j <= 2 i - 1 and " - "j <= n or " - "i2 = i and j2 = j + 3 and i <= 2 j - 1 and i <= n and " - "j <= 2 i - 4 and j <= n - 3 or " - "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and " - "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }", -1); - map = isl_map_power(map, &exact); - assert(exact); - isl_map_free(map); - - /* COCOA Fig.2 right */ - map = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : i2 = i + 3 and j2 = j and " - "i <= 2 j - 4 and i <= n - 3 and j <= 2 i - 1 and " - "j <= n or " - "i2 = i and j2 = j + 3 and i <= 2 j - 1 and i <= n and " - "j <= 2 i - 4 and j <= n - 3 or " - "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and " - "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }", -1); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k3,k : " - "i <= 2 j - 1 and i <= n and j <= 2 i - 1 and " - "j <= n and 3 + i + 2 j <= 3 n and " - "3 + 2 i + j <= 3n and i2 <= 2 j2 -1 and i2 <= n and " - "i2 <= 3 j2 - 4 and j2 <= 2 i2 -1 and j2 <= n and " - "13 + 4 j2 <= 11 i2 and i2 = i + 3 k1 + k3 and " - "j2 = j + 3 k2 + k3 and k1 >= 0 and k2 >= 0 and " - "k3 >= 0 and k1 + k2 + k3 = k and k > 0) }", -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map2); - isl_map_free(map); - - /* COCOA Fig.1 right */ - dom = isl_set_read_from_str(ctx, - "{ [x,y] : x >= 0 and -2 x + 3 y >= 0 and x <= 3 and " - "2 x - 3 y + 3 >= 0 }", -1); - right = isl_map_read_from_str(ctx, - "{ [x,y] -> [x2,y2] : x2 = x + 1 and y2 = y }", -1); - up = isl_map_read_from_str(ctx, - "{ [x,y] -> [x2,y2] : x2 = x and y2 = y + 1 }", -1); - right = isl_map_intersect_domain(right, isl_set_copy(dom)); - right = isl_map_intersect_range(right, isl_set_copy(dom)); - up = isl_map_intersect_domain(up, isl_set_copy(dom)); - up = isl_map_intersect_range(up, dom); - map = isl_map_union(up, right); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - map2 = isl_map_read_from_str(ctx, - "{ [0,0] -> [0,1]; [0,0] -> [1,1]; [0,1] -> [1,1]; " - " [2,2] -> [3,2]; [2,2] -> [3,3]; [3,2] -> [3,3] }", -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map2); - isl_map_free(map); - - /* COCOA Theorem 1 counter example */ - map = isl_map_read_from_str(ctx, - "{ [i,j] -> [i2,j2] : i = 0 and 0 <= j and j <= 1 and " - "i2 = 1 and j2 = j or " - "i = 0 and j = 0 and i2 = 0 and j2 = 1 }", -1); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - isl_map_free(map); - - map = isl_map_read_from_str(ctx, - "[m,n] -> { [i,j] -> [i2,j2] : i2 = i and j2 = j + 2 and " - "1 <= i,i2 <= n and 1 <= j,j2 <= m or " - "i2 = i + 1 and 3 <= j2 - j <= 4 and " - "1 <= i,i2 <= n and 1 <= j,j2 <= m }", -1); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - isl_map_free(map); - - /* Kelly et al 1996, fig 12 */ - map = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : i2 = i and j2 = j + 1 and " - "1 <= i,j,j+1 <= n or " - "j = n and j2 = 1 and i2 = i + 1 and " - "1 <= i,i+1 <= n }", -1); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : 1 <= j < j2 <= n and " - "1 <= i <= n and i = i2 or " - "1 <= i < i2 <= n and 1 <= j <= n and " - "1 <= j2 <= n }", -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map2); - isl_map_free(map); - - /* Omega's closure4 */ - map = isl_map_read_from_str(ctx, - "[m,n] -> { [x,y] -> [x2,y2] : x2 = x and y2 = y + 1 and " - "1 <= x,y <= 10 or " - "x2 = x + 1 and y2 = y and " - "1 <= x <= 20 && 5 <= y <= 15 }", -1); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - isl_map_free(map); - - map = isl_map_read_from_str(ctx, - "[n] -> { [x] -> [y]: 1 <= n <= y - x <= 10 }", -1); - map = isl_map_transitive_closure(map, &exact); - assert(!exact); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [x] -> [y] : 1 <= n <= 10 and y >= n + x }", -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "[n, m] -> { [i0, i1, i2, i3] -> [o0, o1, o2, o3] : " - "i3 = 1 and o0 = i0 and o1 = -1 + i1 and o2 = -1 + i2 and " - "o3 = -2 + i2 and i1 <= -1 + i0 and i1 >= 1 - m + i0 and " - "i1 >= 2 and i1 <= n and i2 >= 3 and i2 <= 1 + n and i2 <= m }"; - map = isl_map_read_from_str(ctx, str, -1); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - map2 = isl_map_read_from_str(ctx, str, -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "{[0] -> [1]; [2] -> [3]}"; - map = isl_map_read_from_str(ctx, str, -1); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - map2 = isl_map_read_from_str(ctx, str, -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "[n] -> { [[i0, i1, 1, 0, i0] -> [i5, 1]] -> " - "[[i0, -1 + i1, 2, 0, i0] -> [-1 + i5, 2]] : " - "exists (e0 = [(3 - n)/3]: i5 >= 2 and i1 >= 2 and " - "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and " - "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); " - "[[i0, i1, 2, 0, i0] -> [i5, 1]] -> " - "[[i0, i1, 1, 0, i0] -> [-1 + i5, 2]] : " - "exists (e0 = [(3 - n)/3]: i5 >= 2 and i1 >= 1 and " - "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and " - "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); " - "[[i0, i1, 1, 0, i0] -> [i5, 2]] -> " - "[[i0, -1 + i1, 2, 0, i0] -> [i5, 1]] : " - "exists (e0 = [(3 - n)/3]: i1 >= 2 and i5 >= 1 and " - "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and " - "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); " - "[[i0, i1, 2, 0, i0] -> [i5, 2]] -> " - "[[i0, i1, 1, 0, i0] -> [i5, 1]] : " - "exists (e0 = [(3 - n)/3]: i5 >= 1 and i1 >= 1 and " - "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and " - "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n) }"; - map = isl_map_read_from_str(ctx, str, -1); - map = isl_map_transitive_closure(map, NULL); - assert(map); - isl_map_free(map); -} - -void test_lex(struct isl_ctx *ctx) -{ - isl_dim *dim; - isl_map *map; - - dim = isl_dim_alloc(ctx, 0, 0, 0); - map = isl_map_lex_le(dim); - assert(!isl_map_is_empty(map)); - isl_map_free(map); -} - -static int consume_lexmin(__isl_take isl_basic_set *dom, - __isl_take isl_aff_list *list, void *user) -{ - isl_dim *dim; - isl_basic_map *bmap; - isl_map **map = user; - - dim = isl_basic_set_get_dim(dom); - bmap = isl_basic_map_from_aff_list(dim, list); - bmap = isl_basic_map_intersect_domain(bmap, dom); - - *map = isl_map_union(*map, isl_map_from_basic_map(bmap)); - - return 0; -} - -void test_lexmin(struct isl_ctx *ctx) -{ - const char *str; - isl_basic_map *bmap; - isl_map *map, *map2; - isl_set *set; - isl_set *set2; - - str = "[p0, p1] -> { [] -> [] : " - "exists (e0 = [(2p1)/3], e1, e2, e3 = [(3 - p1 + 3e0)/3], " - "e4 = [(p1)/3], e5 = [(p1 + 3e4)/3]: " - "3e0 >= -2 + 2p1 and 3e0 >= p1 and 3e3 >= 1 - p1 + 3e0 and " - "3e0 <= 2p1 and 3e3 >= -2 + p1 and 3e3 <= -1 + p1 and p1 >= 3 and " - "3e5 >= -2 + 2p1 and 3e5 >= p1 and 3e5 <= -1 + p1 + 3e4 and " - "3e4 <= p1 and 3e4 >= -2 + p1 and e3 <= -1 + e0 and " - "3e4 >= 6 - p1 + 3e1 and 3e1 >= p1 and 3e5 >= -2 + p1 + 3e4 and " - "2e4 >= 3 - p1 + 2e1 and e4 <= e1 and 3e3 <= 2 - p1 + 3e0 and " - "e5 >= 1 + e1 and 3e4 >= 6 - 2p1 + 3e1 and " - "p0 >= 2 and p1 >= p0 and 3e2 >= p1 and 3e4 >= 6 - p1 + 3e2 and " - "e2 <= e1 and e3 >= 1 and e4 <= e2) }"; - map = isl_map_read_from_str(ctx, str, -1); - map = isl_map_lexmin(map); - isl_map_free(map); - - str = "[C] -> { [obj,a,b,c] : obj <= 38 a + 7 b + 10 c and " - "a + b <= 1 and c <= 10 b and c <= C and a,b,c,C >= 0 }"; - set = isl_set_read_from_str(ctx, str, -1); - set = isl_set_lexmax(set); - str = "[C] -> { [obj,a,b,c] : C = 8 }"; - set2 = isl_set_read_from_str(ctx, str, -1); - set = isl_set_intersect(set, set2); - assert(!isl_set_is_empty(set)); - isl_set_free(set); - - str = "{ [x] -> [y] : x <= y <= 10; [x] -> [5] : -8 <= x <= 8 }"; - map = isl_map_read_from_str(ctx, str, -1); - map = isl_map_lexmin(map); - str = "{ [x] -> [5] : 6 <= x <= 8; " - "[x] -> [x] : x <= 5 or (9 <= x <= 10) }"; - map2 = isl_map_read_from_str(ctx, str, -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "{ [x] -> [y] : 4y = x or 4y = -1 + x or 4y = -2 + x }"; - map = isl_map_read_from_str(ctx, str, -1); - map2 = isl_map_copy(map); - map = isl_map_lexmin(map); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "{ [x] -> [y] : x = 4y; [x] -> [y] : x = 2y }"; - map = isl_map_read_from_str(ctx, str, -1); - map = isl_map_lexmin(map); - str = "{ [x] -> [y] : (4y = x and x >= 0) or " - "(exists (e0 = [(x)/4], e1 = [(-2 + x)/4]: 2y = x and " - "4e1 = -2 + x and 4e0 <= -1 + x and 4e0 >= -3 + x)) or " - "(exists (e0 = [(x)/4]: 2y = x and 4e0 = x and x <= -4)) }"; - map2 = isl_map_read_from_str(ctx, str, -1); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "{ [i] -> [i', j] : j = i - 8i' and i' >= 0 and i' <= 7 and " - " 8i' <= i and 8i' >= -7 + i }"; - bmap = isl_basic_map_read_from_str(ctx, str, -1); - map2 = isl_map_empty(isl_basic_map_get_dim(bmap)); - isl_basic_map_foreach_lexmin(bmap, &consume_lexmin, &map2); - map = isl_map_from_basic_map(bmap); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); -} - -struct must_may { - isl_map *must; - isl_map *may; -}; - -static int collect_must_may(__isl_take isl_map *dep, int must, - void *dep_user, void *user) -{ - struct must_may *mm = (struct must_may *)user; - - if (must) - mm->must = isl_map_union(mm->must, dep); - else - mm->may = isl_map_union(mm->may, dep); - - return 0; -} - -static int common_space(void *first, void *second) -{ - int depth = *(int *)first; - return 2 * depth; -} - -static int map_is_equal(__isl_keep isl_map *map, const char *str) -{ - isl_map *map2; - int equal; - - if (!map) - return -1; - - map2 = isl_map_read_from_str(map->ctx, str, -1); - equal = isl_map_is_equal(map, map2); - isl_map_free(map2); - - return equal; -} - -void test_dep(struct isl_ctx *ctx) -{ - const char *str; - isl_dim *dim; - isl_map *map; - isl_access_info *ai; - isl_flow *flow; - int depth; - struct must_may mm; - - depth = 3; - - str = "{ [2,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_alloc(map, &depth, &common_space, 2); - - str = "{ [0,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_add_source(ai, map, 1, &depth); - - str = "{ [1,i,0] -> [5] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_add_source(ai, map, 1, &depth); - - flow = isl_access_info_compute_flow(ai); - dim = isl_dim_alloc(ctx, 0, 3, 3); - mm.must = isl_map_empty(isl_dim_copy(dim)); - mm.may = isl_map_empty(dim); - - isl_flow_foreach(flow, collect_must_may, &mm); - - str = "{ [0,i,0] -> [2,i,0] : (0 <= i <= 4) or (6 <= i <= 10); " - " [1,10,0] -> [2,5,0] }"; - assert(map_is_equal(mm.must, str)); - str = "{ [i,j,k] -> [l,m,n] : 1 = 0 }"; - assert(map_is_equal(mm.may, str)); - - isl_map_free(mm.must); - isl_map_free(mm.may); - isl_flow_free(flow); - - - str = "{ [2,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_alloc(map, &depth, &common_space, 2); - - str = "{ [0,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_add_source(ai, map, 1, &depth); - - str = "{ [1,i,0] -> [5] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_add_source(ai, map, 0, &depth); - - flow = isl_access_info_compute_flow(ai); - dim = isl_dim_alloc(ctx, 0, 3, 3); - mm.must = isl_map_empty(isl_dim_copy(dim)); - mm.may = isl_map_empty(dim); - - isl_flow_foreach(flow, collect_must_may, &mm); - - str = "{ [0,i,0] -> [2,i,0] : (0 <= i <= 4) or (6 <= i <= 10) }"; - assert(map_is_equal(mm.must, str)); - str = "{ [0,5,0] -> [2,5,0]; [1,i,0] -> [2,5,0] : 0 <= i <= 10 }"; - assert(map_is_equal(mm.may, str)); - - isl_map_free(mm.must); - isl_map_free(mm.may); - isl_flow_free(flow); - - - str = "{ [2,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_alloc(map, &depth, &common_space, 2); - - str = "{ [0,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_add_source(ai, map, 0, &depth); - - str = "{ [1,i,0] -> [5] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_add_source(ai, map, 0, &depth); - - flow = isl_access_info_compute_flow(ai); - dim = isl_dim_alloc(ctx, 0, 3, 3); - mm.must = isl_map_empty(isl_dim_copy(dim)); - mm.may = isl_map_empty(dim); - - isl_flow_foreach(flow, collect_must_may, &mm); - - str = "{ [0,i,0] -> [2,i,0] : 0 <= i <= 10; " - " [1,i,0] -> [2,5,0] : 0 <= i <= 10 }"; - assert(map_is_equal(mm.may, str)); - str = "{ [i,j,k] -> [l,m,n] : 1 = 0 }"; - assert(map_is_equal(mm.must, str)); - - isl_map_free(mm.must); - isl_map_free(mm.may); - isl_flow_free(flow); - - - str = "{ [0,i,2] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_alloc(map, &depth, &common_space, 2); - - str = "{ [0,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_add_source(ai, map, 0, &depth); - - str = "{ [0,i,1] -> [5] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_add_source(ai, map, 0, &depth); - - flow = isl_access_info_compute_flow(ai); - dim = isl_dim_alloc(ctx, 0, 3, 3); - mm.must = isl_map_empty(isl_dim_copy(dim)); - mm.may = isl_map_empty(dim); - - isl_flow_foreach(flow, collect_must_may, &mm); - - str = "{ [0,i,0] -> [0,i,2] : 0 <= i <= 10; " - " [0,i,1] -> [0,5,2] : 0 <= i <= 5 }"; - assert(map_is_equal(mm.may, str)); - str = "{ [i,j,k] -> [l,m,n] : 1 = 0 }"; - assert(map_is_equal(mm.must, str)); - - isl_map_free(mm.must); - isl_map_free(mm.may); - isl_flow_free(flow); - - - str = "{ [0,i,1] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_alloc(map, &depth, &common_space, 2); - - str = "{ [0,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_add_source(ai, map, 0, &depth); - - str = "{ [0,i,2] -> [5] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_add_source(ai, map, 0, &depth); - - flow = isl_access_info_compute_flow(ai); - dim = isl_dim_alloc(ctx, 0, 3, 3); - mm.must = isl_map_empty(isl_dim_copy(dim)); - mm.may = isl_map_empty(dim); - - isl_flow_foreach(flow, collect_must_may, &mm); - - str = "{ [0,i,0] -> [0,i,1] : 0 <= i <= 10; " - " [0,i,2] -> [0,5,1] : 0 <= i <= 4 }"; - assert(map_is_equal(mm.may, str)); - str = "{ [i,j,k] -> [l,m,n] : 1 = 0 }"; - assert(map_is_equal(mm.must, str)); - - isl_map_free(mm.must); - isl_map_free(mm.may); - isl_flow_free(flow); - - - depth = 5; - - str = "{ [1,i,0,0,0] -> [i,j] : 0 <= i <= 10 and 0 <= j <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_alloc(map, &depth, &common_space, 1); - - str = "{ [0,i,0,j,0] -> [i,j] : 0 <= i <= 10 and 0 <= j <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - ai = isl_access_info_add_source(ai, map, 1, &depth); - - flow = isl_access_info_compute_flow(ai); - dim = isl_dim_alloc(ctx, 0, 5, 5); - mm.must = isl_map_empty(isl_dim_copy(dim)); - mm.may = isl_map_empty(dim); - - isl_flow_foreach(flow, collect_must_may, &mm); - - str = "{ [0,i,0,j,0] -> [1,i,0,0,0] : 0 <= i,j <= 10 }"; - assert(map_is_equal(mm.must, str)); - str = "{ [0,0,0,0,0] -> [0,0,0,0,0] : 1 = 0 }"; - assert(map_is_equal(mm.may, str)); - - isl_map_free(mm.must); - isl_map_free(mm.may); - isl_flow_free(flow); -} - -int test_sv(isl_ctx *ctx) -{ - const char *str; - isl_map *map; - isl_union_map *umap; - int sv; - - str = "[N] -> { [i] -> [f] : 0 <= i <= N and 0 <= i - 10 f <= 9 }"; - map = isl_map_read_from_str(ctx, str, -1); - sv = isl_map_is_single_valued(map); - isl_map_free(map); - if (sv < 0) - return -1; - if (!sv) - isl_die(ctx, isl_error_internal, - "map not detected as single valued", return -1); - - str = "[N] -> { [i] -> [f] : 0 <= i <= N and 0 <= i - 10 f <= 10 }"; - map = isl_map_read_from_str(ctx, str, -1); - sv = isl_map_is_single_valued(map); - isl_map_free(map); - if (sv < 0) - return -1; - if (sv) - isl_die(ctx, isl_error_internal, - "map detected as single valued", return -1); - - str = "{ S1[i] -> [i] : 0 <= i <= 9; S2[i] -> [i] : 0 <= i <= 9 }"; - umap = isl_union_map_read_from_str(ctx, str); - sv = isl_union_map_is_single_valued(umap); - isl_union_map_free(umap); - if (sv < 0) - return -1; - if (!sv) - isl_die(ctx, isl_error_internal, - "map not detected as single valued", return -1); - - str = "{ [i] -> S1[i] : 0 <= i <= 9; [i] -> S2[i] : 0 <= i <= 9 }"; - umap = isl_union_map_read_from_str(ctx, str); - sv = isl_union_map_is_single_valued(umap); - isl_union_map_free(umap); - if (sv < 0) - return -1; - if (sv) - isl_die(ctx, isl_error_internal, - "map detected as single valued", return -1); - - return 0; -} - -void test_bijective_case(struct isl_ctx *ctx, const char *str, int bijective) -{ - isl_map *map; - - map = isl_map_read_from_str(ctx, str, -1); - if (bijective) - assert(isl_map_is_bijective(map)); - else - assert(!isl_map_is_bijective(map)); - isl_map_free(map); -} - -void test_bijective(struct isl_ctx *ctx) -{ - test_bijective_case(ctx, "[N,M]->{[i,j] -> [i]}", 0); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [i] : j=i}", 1); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [i] : j=0}", 1); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [i] : j=N}", 1); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [j,i]}", 1); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [i+j]}", 0); - test_bijective_case(ctx, "[N,M]->{[i,j] -> []}", 0); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [i,j,N]}", 1); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [2i]}", 0); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [i,i]}", 0); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [2i,i]}", 0); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [2i,j]}", 1); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [x,y] : 2x=i & y =j}", 1); -} - -void test_pwqp(struct isl_ctx *ctx) -{ - const char *str; - isl_set *set; - isl_pw_qpolynomial *pwqp1, *pwqp2; - - str = "{ [i,j,k] -> 1 + 9 * [i/5] + 7 * [j/11] + 4 * [k/13] }"; - pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp1 = isl_pw_qpolynomial_move_dims(pwqp1, isl_dim_param, 0, - isl_dim_set, 1, 1); - - str = "[j] -> { [i,k] -> 1 + 9 * [i/5] + 7 * [j/11] + 4 * [k/13] }"; - pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2); - - assert(isl_pw_qpolynomial_is_zero(pwqp1)); - - isl_pw_qpolynomial_free(pwqp1); - - str = "{ [i] -> i }"; - pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str); - str = "{ [k] : exists a : k = 2a }"; - set = isl_set_read_from_str(ctx, str, 0); - pwqp1 = isl_pw_qpolynomial_gist(pwqp1, set); - str = "{ [i] -> i }"; - pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2); - - assert(isl_pw_qpolynomial_is_zero(pwqp1)); - - isl_pw_qpolynomial_free(pwqp1); - - str = "{ [i] -> i + [ (i + [i/3])/2 ] }"; - pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str); - str = "{ [10] }"; - set = isl_set_read_from_str(ctx, str, 0); - pwqp1 = isl_pw_qpolynomial_gist(pwqp1, set); - str = "{ [i] -> 16 }"; - pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2); - - assert(isl_pw_qpolynomial_is_zero(pwqp1)); - - isl_pw_qpolynomial_free(pwqp1); - - str = "{ [i] -> ([(i)/2]) }"; - pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str); - str = "{ [k] : exists a : k = 2a+1 }"; - set = isl_set_read_from_str(ctx, str, 0); - pwqp1 = isl_pw_qpolynomial_gist(pwqp1, set); - str = "{ [i] -> -1/2 + 1/2 * i }"; - pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2); - - assert(isl_pw_qpolynomial_is_zero(pwqp1)); - - isl_pw_qpolynomial_free(pwqp1); - - str = "{ [i] -> ([([i/2] + [i/2])/5]) }"; - pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str); - str = "{ [i] -> ([(2 * [i/2])/5]) }"; - pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2); - - assert(isl_pw_qpolynomial_is_zero(pwqp1)); - - isl_pw_qpolynomial_free(pwqp1); - - str = "{ [x] -> ([x/2] + [(x+1)/2]) }"; - pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str); - str = "{ [x] -> x }"; - pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2); - - assert(isl_pw_qpolynomial_is_zero(pwqp1)); - - isl_pw_qpolynomial_free(pwqp1); - - str = "{ [i] -> ([i/2]) : i >= 0; [i] -> ([i/3]) : i < 0 }"; - pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str); - pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str); - pwqp1 = isl_pw_qpolynomial_coalesce(pwqp1); - pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2); - assert(isl_pw_qpolynomial_is_zero(pwqp1)); - isl_pw_qpolynomial_free(pwqp1); -} - -void test_split_periods(isl_ctx *ctx) -{ - const char *str; - isl_pw_qpolynomial *pwqp; - - str = "{ [U,V] -> 1/3 * U + 2/3 * V - [(U + 2V)/3] + [U/2] : " - "U + 2V + 3 >= 0 and - U -2V >= 0 and - U + 10 >= 0 and " - "U >= 0; [U,V] -> U^2 : U >= 100 }"; - pwqp = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp = isl_pw_qpolynomial_split_periods(pwqp, 2); - assert(pwqp); - - isl_pw_qpolynomial_free(pwqp); -} - -void test_union(isl_ctx *ctx) -{ - const char *str; - isl_union_set *uset1, *uset2; - isl_union_map *umap1, *umap2; - - str = "{ [i] : 0 <= i <= 1 }"; - uset1 = isl_union_set_read_from_str(ctx, str); - str = "{ [1] -> [0] }"; - umap1 = isl_union_map_read_from_str(ctx, str); - - umap2 = isl_union_set_lex_gt_union_set(isl_union_set_copy(uset1), uset1); - assert(isl_union_map_is_equal(umap1, umap2)); - - isl_union_map_free(umap1); - isl_union_map_free(umap2); - - str = "{ A[i] -> B[i]; B[i] -> C[i]; A[0] -> C[1] }"; - umap1 = isl_union_map_read_from_str(ctx, str); - str = "{ A[i]; B[i] }"; - uset1 = isl_union_set_read_from_str(ctx, str); - - uset2 = isl_union_map_domain(umap1); - - assert(isl_union_set_is_equal(uset1, uset2)); - - isl_union_set_free(uset1); - isl_union_set_free(uset2); -} - -void test_bound(isl_ctx *ctx) -{ - const char *str; - isl_pw_qpolynomial *pwqp; - isl_pw_qpolynomial_fold *pwf; - - str = "{ [[a, b, c, d] -> [e]] -> 0 }"; - pwqp = isl_pw_qpolynomial_read_from_str(ctx, str); - pwf = isl_pw_qpolynomial_bound(pwqp, isl_fold_max, NULL); - assert(isl_pw_qpolynomial_fold_dim(pwf, isl_dim_set) == 4); - isl_pw_qpolynomial_fold_free(pwf); - - str = "{ [[x]->[x]] -> 1 : exists a : x = 2 a }"; - pwqp = isl_pw_qpolynomial_read_from_str(ctx, str); - pwf = isl_pw_qpolynomial_bound(pwqp, isl_fold_max, NULL); - assert(isl_pw_qpolynomial_fold_dim(pwf, isl_dim_set) == 1); - isl_pw_qpolynomial_fold_free(pwf); -} - -void test_lift(isl_ctx *ctx) -{ - const char *str; - isl_basic_map *bmap; - isl_basic_set *bset; - - str = "{ [i0] : exists e0 : i0 = 4e0 }"; - bset = isl_basic_set_read_from_str(ctx, str, 0); - bset = isl_basic_set_lift(bset); - bmap = isl_basic_map_from_range(bset); - bset = isl_basic_map_domain(bmap); - isl_basic_set_free(bset); -} - -void test_subset(isl_ctx *ctx) -{ - const char *str; - isl_set *set1, *set2; - - str = "{ [112, 0] }"; - set1 = isl_set_read_from_str(ctx, str, 0); - str = "{ [i0, i1] : exists (e0 = [(i0 - i1)/16], e1: " - "16e0 <= i0 - i1 and 16e0 >= -15 + i0 - i1 and " - "16e1 <= i1 and 16e0 >= -i1 and 16e1 >= -i0 + i1) }"; - set2 = isl_set_read_from_str(ctx, str, 0); - assert(isl_set_is_subset(set1, set2)); - isl_set_free(set1); - isl_set_free(set2); -} - -void test_factorize(isl_ctx *ctx) -{ - const char *str; - isl_basic_set *bset; - isl_factorizer *f; - - str = "{ [i0, i1, i2, i3, i4, i5, i6, i7] : 3i5 <= 2 - 2i0 and " - "i0 >= -2 and i6 >= 1 + i3 and i7 >= 0 and 3i5 >= -2i0 and " - "2i4 <= i2 and i6 >= 1 + 2i0 + 3i1 and i4 <= -1 and " - "i6 >= 1 + 2i0 + 3i5 and i6 <= 2 + 2i0 + 3i5 and " - "3i5 <= 2 - 2i0 - i2 + 3i4 and i6 <= 2 + 2i0 + 3i1 and " - "i0 <= -1 and i7 <= i2 + i3 - 3i4 - i6 and " - "3i5 >= -2i0 - i2 + 3i4 }"; - bset = isl_basic_set_read_from_str(ctx, str, 0); - f = isl_basic_set_factorizer(bset); - assert(f); - isl_basic_set_free(bset); - isl_factorizer_free(f); - - str = "{ [i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12] : " - "i12 <= 2 + i0 - i11 and 2i8 >= -i4 and i11 >= i1 and " - "3i5 <= -i2 and 2i11 >= -i4 - 2i7 and i11 <= 3 + i0 + 3i9 and " - "i11 <= -i4 - 2i7 and i12 >= -i10 and i2 >= -2 and " - "i11 >= i1 + 3i10 and i11 >= 1 + i0 + 3i9 and " - "i11 <= 1 - i4 - 2i8 and 6i6 <= 6 - i2 and 3i6 >= 1 - i2 and " - "i11 <= 2 + i1 and i12 <= i4 + i11 and i12 >= i0 - i11 and " - "3i5 >= -2 - i2 and i12 >= -1 + i4 + i11 and 3i3 <= 3 - i2 and " - "9i6 <= 11 - i2 + 6i5 and 3i3 >= 1 - i2 and " - "9i6 <= 5 - i2 + 6i3 and i12 <= -1 and i2 <= 0 }"; - bset = isl_basic_set_read_from_str(ctx, str, 0); - f = isl_basic_set_factorizer(bset); - assert(f); - isl_basic_set_free(bset); - isl_factorizer_free(f); -} - -static int check_injective(__isl_take isl_map *map, void *user) -{ - int *injective = user; - - *injective = isl_map_is_injective(map); - isl_map_free(map); - - if (*injective < 0 || !*injective) - return -1; - - return 0; -} - -int test_one_schedule(isl_ctx *ctx, const char *d, const char *w, - const char *r, const char *s, int tilable, int parallel) -{ - int i; - isl_union_set *D; - isl_union_map *W, *R, *S; - isl_union_map *empty; - isl_union_map *dep_raw, *dep_war, *dep_waw, *dep; - isl_union_map *validity, *proximity; - isl_union_map *schedule; - isl_union_map *test; - isl_union_set *delta; - isl_union_set *domain; - isl_set *delta_set; - isl_set *slice; - isl_set *origin; - isl_schedule *sched; - int is_nonneg, is_parallel, is_tilable, is_injection, is_complete; - - D = isl_union_set_read_from_str(ctx, d); - W = isl_union_map_read_from_str(ctx, w); - R = isl_union_map_read_from_str(ctx, r); - S = isl_union_map_read_from_str(ctx, s); - - W = isl_union_map_intersect_domain(W, isl_union_set_copy(D)); - R = isl_union_map_intersect_domain(R, isl_union_set_copy(D)); - - empty = isl_union_map_empty(isl_union_map_get_dim(S)); - isl_union_map_compute_flow(isl_union_map_copy(R), - isl_union_map_copy(W), empty, - isl_union_map_copy(S), - &dep_raw, NULL, NULL, NULL); - isl_union_map_compute_flow(isl_union_map_copy(W), - isl_union_map_copy(W), - isl_union_map_copy(R), - isl_union_map_copy(S), - &dep_waw, &dep_war, NULL, NULL); - - dep = isl_union_map_union(dep_waw, dep_war); - dep = isl_union_map_union(dep, dep_raw); - validity = isl_union_map_copy(dep); - proximity = isl_union_map_copy(dep); - - sched = isl_union_set_compute_schedule(isl_union_set_copy(D), - validity, proximity); - schedule = isl_schedule_get_map(sched); - isl_schedule_free(sched); - isl_union_map_free(W); - isl_union_map_free(R); - isl_union_map_free(S); - - is_injection = 1; - isl_union_map_foreach_map(schedule, &check_injective, &is_injection); - - domain = isl_union_map_domain(isl_union_map_copy(schedule)); - is_complete = isl_union_set_is_subset(D, domain); - isl_union_set_free(D); - isl_union_set_free(domain); - - test = isl_union_map_reverse(isl_union_map_copy(schedule)); - test = isl_union_map_apply_range(test, dep); - test = isl_union_map_apply_range(test, schedule); - - delta = isl_union_map_deltas(test); - if (isl_union_set_n_set(delta) == 0) { - is_tilable = 1; - is_parallel = 1; - is_nonneg = 1; - isl_union_set_free(delta); - } else { - delta_set = isl_set_from_union_set(delta); - - slice = isl_set_universe(isl_set_get_dim(delta_set)); - for (i = 0; i < tilable; ++i) - slice = isl_set_lower_bound_si(slice, isl_dim_set, i, 0); - is_tilable = isl_set_is_subset(delta_set, slice); - isl_set_free(slice); - - slice = isl_set_universe(isl_set_get_dim(delta_set)); - for (i = 0; i < parallel; ++i) - slice = isl_set_fix_si(slice, isl_dim_set, i, 0); - is_parallel = isl_set_is_subset(delta_set, slice); - isl_set_free(slice); - - origin = isl_set_universe(isl_set_get_dim(delta_set)); - for (i = 0; i < isl_set_dim(origin, isl_dim_set); ++i) - origin = isl_set_fix_si(origin, isl_dim_set, i, 0); - - delta_set = isl_set_union(delta_set, isl_set_copy(origin)); - delta_set = isl_set_lexmin(delta_set); - - is_nonneg = isl_set_is_equal(delta_set, origin); - - isl_set_free(origin); - isl_set_free(delta_set); - } - - if (is_nonneg < 0 || is_parallel < 0 || is_tilable < 0 || - is_injection < 0 || is_complete < 0) - return -1; - if (!is_complete) - isl_die(ctx, isl_error_unknown, - "generated schedule incomplete", return -1); - if (!is_injection) - isl_die(ctx, isl_error_unknown, - "generated schedule not injective on each statement", - return -1); - if (!is_nonneg) - isl_die(ctx, isl_error_unknown, - "negative dependences in generated schedule", - return -1); - if (!is_tilable) - isl_die(ctx, isl_error_unknown, - "generated schedule not as tilable as expected", - return -1); - if (!is_parallel) - isl_die(ctx, isl_error_unknown, - "generated schedule not as parallel as expected", - return -1); - - return 0; -} - -int test_special_schedule(isl_ctx *ctx) -{ - const char *str; - isl_union_set *dom; - isl_union_map *empty; - isl_union_map *dep; - isl_union_map *sched1, *sched2; - isl_schedule *schedule; - int equal; - - str = "{ S[i,j] : 0 <= i <= 10 }"; - dom = isl_union_set_read_from_str(ctx, str); - str = "{ S[i,j] -> S[i+1,j] : 0 <= i,j <= 10 }"; - dep = isl_union_map_read_from_str(ctx, str); - empty = isl_union_map_read_from_str(ctx, "{}"); - schedule = isl_union_set_compute_schedule(dom, empty, dep); - sched1 = isl_schedule_get_map(schedule); - isl_schedule_free(schedule); - - str = "{ S[i, j] -> [j, i] }"; - sched2 = isl_union_map_read_from_str(ctx, str); - - equal = isl_union_map_is_equal(sched1, sched2); - isl_union_map_free(sched1); - isl_union_map_free(sched2); - - if (equal < 0) - return -1; - if (!equal) - isl_die(ctx, isl_error_unknown, "unexpected schedule", - return -1); - - return 0; -} - -int test_schedule(isl_ctx *ctx) -{ - const char *D, *W, *R, *S; - - /* Jacobi */ - D = "[T,N] -> { S1[t,i] : 1 <= t <= T and 2 <= i <= N - 1 }"; - W = "{ S1[t,i] -> a[t,i] }"; - R = "{ S1[t,i] -> a[t-1,i]; S1[t,i] -> a[t-1,i-1]; " - "S1[t,i] -> a[t-1,i+1] }"; - S = "{ S1[t,i] -> [t,i] }"; - if (test_one_schedule(ctx, D, W, R, S, 2, 0) < 0) - return -1; - - /* Fig. 5 of CC2008 */ - D = "[N] -> { S_0[i, j] : i >= 0 and i <= -1 + N and j >= 2 and " - "j <= -1 + N }"; - W = "[N] -> { S_0[i, j] -> a[i, j] : i >= 0 and i <= -1 + N and " - "j >= 2 and j <= -1 + N }"; - R = "[N] -> { S_0[i, j] -> a[j, i] : i >= 0 and i <= -1 + N and " - "j >= 2 and j <= -1 + N; " - "S_0[i, j] -> a[i, -1 + j] : i >= 0 and i <= -1 + N and " - "j >= 2 and j <= -1 + N }"; - S = "[N] -> { S_0[i, j] -> [0, i, 0, j, 0] }"; - if (test_one_schedule(ctx, D, W, R, S, 2, 0) < 0) - return -1; - - D = "{ S1[i] : 0 <= i <= 10; S2[i] : 0 <= i <= 9 }"; - W = "{ S1[i] -> a[i] }"; - R = "{ S2[i] -> a[i+1] }"; - S = "{ S1[i] -> [0,i]; S2[i] -> [1,i] }"; - if (test_one_schedule(ctx, D, W, R, S, 1, 1) < 0) - return -1; - - D = "{ S1[i] : 0 <= i < 10; S2[i] : 0 <= i < 10 }"; - W = "{ S1[i] -> a[i] }"; - R = "{ S2[i] -> a[9-i] }"; - S = "{ S1[i] -> [0,i]; S2[i] -> [1,i] }"; - if (test_one_schedule(ctx, D, W, R, S, 1, 1) < 0) - return -1; - - D = "[N] -> { S1[i] : 0 <= i < N; S2[i] : 0 <= i < N }"; - W = "{ S1[i] -> a[i] }"; - R = "[N] -> { S2[i] -> a[N-1-i] }"; - S = "{ S1[i] -> [0,i]; S2[i] -> [1,i] }"; - if (test_one_schedule(ctx, D, W, R, S, 1, 1) < 0) - return -1; - - D = "{ S1[i] : 0 < i < 10; S2[i] : 0 <= i < 10 }"; - W = "{ S1[i] -> a[i]; S2[i] -> b[i] }"; - R = "{ S2[i] -> a[i]; S1[i] -> b[i-1] }"; - S = "{ S1[i] -> [i,0]; S2[i] -> [i,1] }"; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - - D = "[N] -> { S1[i] : 1 <= i <= N; S2[i,j] : 1 <= i,j <= N }"; - W = "{ S1[i] -> a[0,i]; S2[i,j] -> a[i,j] }"; - R = "{ S2[i,j] -> a[i-1,j] }"; - S = "{ S1[i] -> [0,i,0]; S2[i,j] -> [1,i,j] }"; - if (test_one_schedule(ctx, D, W, R, S, 2, 1) < 0) - return -1; - - D = "[N] -> { S1[i] : 1 <= i <= N; S2[i,j] : 1 <= i,j <= N }"; - W = "{ S1[i] -> a[i,0]; S2[i,j] -> a[i,j] }"; - R = "{ S2[i,j] -> a[i,j-1] }"; - S = "{ S1[i] -> [0,i,0]; S2[i,j] -> [1,i,j] }"; - if (test_one_schedule(ctx, D, W, R, S, 2, 1) < 0) - return -1; - - D = "[N] -> { S_0[]; S_1[i] : i >= 0 and i <= -1 + N; S_2[] }"; - W = "[N] -> { S_0[] -> a[0]; S_2[] -> b[0]; " - "S_1[i] -> a[1 + i] : i >= 0 and i <= -1 + N }"; - R = "[N] -> { S_2[] -> a[N]; S_1[i] -> a[i] : i >= 0 and i <= -1 + N }"; - S = "[N] -> { S_1[i] -> [1, i, 0]; S_2[] -> [2, 0, 1]; " - "S_0[] -> [0, 0, 0] }"; - if (test_one_schedule(ctx, D, W, R, S, 1, 0) < 0) - return -1; - ctx->opt->schedule_parametric = 0; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - ctx->opt->schedule_parametric = 1; - - D = "[N] -> { S1[i] : 1 <= i <= N; S2[i] : 1 <= i <= N; " - "S3[i,j] : 1 <= i,j <= N; S4[i] : 1 <= i <= N }"; - W = "{ S1[i] -> a[i,0]; S2[i] -> a[0,i]; S3[i,j] -> a[i,j] }"; - R = "[N] -> { S3[i,j] -> a[i-1,j]; S3[i,j] -> a[i,j-1]; " - "S4[i] -> a[i,N] }"; - S = "{ S1[i] -> [0,i,0]; S2[i] -> [1,i,0]; S3[i,j] -> [2,i,j]; " - "S4[i] -> [4,i,0] }"; - if (test_one_schedule(ctx, D, W, R, S, 2, 0) < 0) - return -1; - - D = "[N] -> { S_0[i, j] : i >= 1 and i <= N and j >= 1 and j <= N }"; - W = "[N] -> { S_0[i, j] -> s[0] : i >= 1 and i <= N and j >= 1 and " - "j <= N }"; - R = "[N] -> { S_0[i, j] -> s[0] : i >= 1 and i <= N and j >= 1 and " - "j <= N; " - "S_0[i, j] -> a[i, j] : i >= 1 and i <= N and j >= 1 and " - "j <= N }"; - S = "[N] -> { S_0[i, j] -> [0, i, 0, j, 0] }"; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - - D = "[N] -> { S_0[t] : t >= 0 and t <= -1 + N; " - " S_2[t] : t >= 0 and t <= -1 + N; " - " S_1[t, i] : t >= 0 and t <= -1 + N and i >= 0 and " - "i <= -1 + N }"; - W = "[N] -> { S_0[t] -> a[t, 0] : t >= 0 and t <= -1 + N; " - " S_2[t] -> b[t] : t >= 0 and t <= -1 + N; " - " S_1[t, i] -> a[t, 1 + i] : t >= 0 and t <= -1 + N and " - "i >= 0 and i <= -1 + N }"; - R = "[N] -> { S_1[t, i] -> a[t, i] : t >= 0 and t <= -1 + N and " - "i >= 0 and i <= -1 + N; " - " S_2[t] -> a[t, N] : t >= 0 and t <= -1 + N }"; - S = "[N] -> { S_2[t] -> [0, t, 2]; S_1[t, i] -> [0, t, 1, i, 0]; " - " S_0[t] -> [0, t, 0] }"; - - if (test_one_schedule(ctx, D, W, R, S, 2, 1) < 0) - return -1; - ctx->opt->schedule_parametric = 0; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - ctx->opt->schedule_parametric = 1; - - D = "[N] -> { S1[i,j] : 0 <= i,j < N; S2[i,j] : 0 <= i,j < N }"; - S = "{ S1[i,j] -> [0,i,j]; S2[i,j] -> [1,i,j] }"; - if (test_one_schedule(ctx, D, "{}", "{}", S, 2, 2) < 0) - return -1; - - D = "[M, N] -> { S_1[i] : i >= 0 and i <= -1 + M; " - "S_0[i, j] : i >= 0 and i <= -1 + M and j >= 0 and j <= -1 + N }"; - W = "[M, N] -> { S_0[i, j] -> a[j] : i >= 0 and i <= -1 + M and " - "j >= 0 and j <= -1 + N; " - "S_1[i] -> b[0] : i >= 0 and i <= -1 + M }"; - R = "[M, N] -> { S_0[i, j] -> a[0] : i >= 0 and i <= -1 + M and " - "j >= 0 and j <= -1 + N; " - "S_1[i] -> b[0] : i >= 0 and i <= -1 + M }"; - S = "[M, N] -> { S_1[i] -> [1, i, 0]; S_0[i, j] -> [0, i, 0, j, 0] }"; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - - D = "{ S_0[i] : i >= 0 }"; - W = "{ S_0[i] -> a[i] : i >= 0 }"; - R = "{ S_0[i] -> a[0] : i >= 0 }"; - S = "{ S_0[i] -> [0, i, 0] }"; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - - D = "{ S_0[i] : i >= 0; S_1[i] : i >= 0 }"; - W = "{ S_0[i] -> a[i] : i >= 0; S_1[i] -> b[i] : i >= 0 }"; - R = "{ S_0[i] -> b[0] : i >= 0; S_1[i] -> a[i] : i >= 0 }"; - S = "{ S_1[i] -> [0, i, 1]; S_0[i] -> [0, i, 0] }"; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - - return test_special_schedule(ctx); -} - -int test_plain_injective(isl_ctx *ctx, const char *str, int injective) -{ - isl_union_map *umap; - int test; - - umap = isl_union_map_read_from_str(ctx, str); - test = isl_union_map_plain_is_injective(umap); - isl_union_map_free(umap); - if (test < 0) - return -1; - if (test == injective) - return 0; - if (injective) - isl_die(ctx, isl_error_unknown, - "map not detected as injective", return -1); - else - isl_die(ctx, isl_error_unknown, - "map detected as injective", return -1); -} - -int test_injective(isl_ctx *ctx) -{ - const char *str; - - if (test_plain_injective(ctx, "{S[i,j] -> A[0]; T[i,j] -> B[1]}", 0)) - return -1; - if (test_plain_injective(ctx, "{S[] -> A[0]; T[] -> B[0]}", 1)) - return -1; - if (test_plain_injective(ctx, "{S[] -> A[0]; T[] -> A[1]}", 1)) - return -1; - if (test_plain_injective(ctx, "{S[] -> A[0]; T[] -> A[0]}", 0)) - return -1; - if (test_plain_injective(ctx, "{S[i] -> A[i,0]; T[i] -> A[i,1]}", 1)) - return -1; - if (test_plain_injective(ctx, "{S[i] -> A[i]; T[i] -> A[i]}", 0)) - return -1; - if (test_plain_injective(ctx, "{S[] -> A[0,0]; T[] -> A[0,1]}", 1)) - return -1; - if (test_plain_injective(ctx, "{S[] -> A[0,0]; T[] -> A[1,0]}", 1)) - return -1; - - str = "{S[] -> A[0,0]; T[] -> A[0,1]; U[] -> A[1,0]}"; - if (test_plain_injective(ctx, str, 1)) - return -1; - str = "{S[] -> A[0,0]; T[] -> A[0,1]; U[] -> A[0,0]}"; - if (test_plain_injective(ctx, str, 0)) - return -1; - - return 0; -} - -int test_aff(isl_ctx *ctx) -{ - const char *str; - isl_set *set; - isl_dim *dim; - isl_local_space *ls; - isl_aff *aff; - int zero; - - dim = isl_dim_set_alloc(ctx, 0, 1); - ls = isl_local_space_from_dim(dim); - aff = isl_aff_zero(ls); - - aff = isl_aff_add_coefficient_si(aff, isl_dim_set, 0, 1); - aff = isl_aff_scale_down_ui(aff, 3); - aff = isl_aff_floor(aff); - aff = isl_aff_add_coefficient_si(aff, isl_dim_set, 0, 1); - aff = isl_aff_scale_down_ui(aff, 2); - aff = isl_aff_floor(aff); - aff = isl_aff_add_coefficient_si(aff, isl_dim_set, 0, 1); - - str = "{ [10] }"; - set = isl_set_read_from_str(ctx, str, 0); - aff = isl_aff_gist(aff, set); - - aff = isl_aff_add_constant_si(aff, -16); - zero = isl_aff_plain_is_zero(aff); - isl_aff_free(aff); - - if (zero < 0) - return -1; - if (!zero) - isl_die(ctx, isl_error_unknown, "unexpected result", return -1); - - return 0; -} - -int test_dim_max(isl_ctx *ctx) -{ - int equal; - const char *str; - isl_map *map, *map2; - isl_set *set; - isl_pw_aff *pwaff; - - str = "[N] -> { [i] : 0 <= i <= min(N,10) }"; - set = isl_set_read_from_str(ctx, str, -1); - pwaff = isl_set_dim_max(set, 0); - map = isl_map_from_pw_aff(pwaff); - str = "[N] -> { [] -> [10] : N >= 10; [] -> [N] : N <= 9 and N >= 0 }"; - map2 = isl_map_read_from_str(ctx, str, -1); - equal = isl_map_is_equal(map, map2); - isl_map_free(map); - isl_map_free(map2); - if (equal < 0) - return -1; - if (!equal) - isl_die(ctx, isl_error_unknown, "unexpected result", return -1); - - str = "[N] -> { [i] : 0 <= i <= max(2N,N+6) }"; - set = isl_set_read_from_str(ctx, str, -1); - pwaff = isl_set_dim_max(set, 0); - map = isl_map_from_pw_aff(pwaff); - str = "[N] -> { [] -> [6 + N] : -6 <= N <= 5; [] -> [2N] : N >= 6 }"; - map2 = isl_map_read_from_str(ctx, str, -1); - equal = isl_map_is_equal(map, map2); - isl_map_free(map); - isl_map_free(map2); - if (equal < 0) - return -1; - if (!equal) - isl_die(ctx, isl_error_unknown, "unexpected result", return -1); - - str = "[N] -> { [i] : 0 <= i <= 2N or 0 <= i <= N+6 }"; - set = isl_set_read_from_str(ctx, str, -1); - pwaff = isl_set_dim_max(set, 0); - map = isl_map_from_pw_aff(pwaff); - str = "[N] -> { [] -> [6 + N] : -6 <= N <= 5; [] -> [2N] : N >= 6 }"; - map2 = isl_map_read_from_str(ctx, str, -1); - equal = isl_map_is_equal(map, map2); - isl_map_free(map); - isl_map_free(map2); - if (equal < 0) - return -1; - if (!equal) - isl_die(ctx, isl_error_unknown, "unexpected result", return -1); - - str = "[N,M] -> { [i,j] -> [([i/16]), i%16, ([j/16]), j%16] : " - "0 <= i < N and 0 <= j < M }"; - map = isl_map_read_from_str(ctx, str, -1); - set = isl_map_range(map); - - pwaff = isl_set_dim_max(isl_set_copy(set), 0); - map = isl_map_from_pw_aff(pwaff); - str = "[N,M] -> { [] -> [([(N-1)/16])] : M,N > 0 }"; - map2 = isl_map_read_from_str(ctx, str, -1); - equal = isl_map_is_equal(map, map2); - isl_map_free(map); - isl_map_free(map2); - - pwaff = isl_set_dim_max(isl_set_copy(set), 3); - map = isl_map_from_pw_aff(pwaff); - str = "[N,M] -> { [] -> [t] : t = min(M-1,15) and M,N > 0 }"; - map2 = isl_map_read_from_str(ctx, str, -1); - if (equal >= 0 && equal) - equal = isl_map_is_equal(map, map2); - isl_map_free(map); - isl_map_free(map2); - - isl_set_free(set); - - if (equal < 0) - return -1; - if (!equal) - isl_die(ctx, isl_error_unknown, "unexpected result", return -1); - - return 0; -} - -int main() -{ - struct isl_ctx *ctx; - - srcdir = getenv("srcdir"); - assert(srcdir); - - ctx = isl_ctx_alloc(); - if (test_dim_max(ctx) < 0) - goto error; - if (test_aff(ctx) < 0) - goto error; - if (test_injective(ctx) < 0) - goto error; - if (test_schedule(ctx) < 0) - goto error; - test_factorize(ctx); - test_subset(ctx); - test_lift(ctx); - test_bound(ctx); - test_union(ctx); - test_split_periods(ctx); - test_parse(ctx); - test_pwqp(ctx); - test_lex(ctx); - if (test_sv(ctx) < 0) - goto error; - test_bijective(ctx); - test_dep(ctx); - test_read(ctx); - test_bounded(ctx); - test_construction(ctx); - test_dim(ctx); - test_div(ctx); - test_application(ctx); - test_affine_hull(ctx); - test_convex_hull(ctx); - test_gist(ctx); - test_coalesce(ctx); - test_closure(ctx); - test_lexmin(ctx); - isl_ctx_free(ctx); - return 0; -error: - isl_ctx_free(ctx); - return -1; -} diff --git a/cloog-0.16.3/isl/isl_transitive_closure.c b/cloog-0.16.3/isl/isl_transitive_closure.c deleted file mode 100644 index 53f5d14..0000000 --- a/cloog-0.16.3/isl/isl_transitive_closure.c +++ /dev/null @@ -1,3103 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -int isl_map_is_transitively_closed(__isl_keep isl_map *map) -{ - isl_map *map2; - int closed; - - map2 = isl_map_apply_range(isl_map_copy(map), isl_map_copy(map)); - closed = isl_map_is_subset(map2, map); - isl_map_free(map2); - - return closed; -} - -int isl_union_map_is_transitively_closed(__isl_keep isl_union_map *umap) -{ - isl_union_map *umap2; - int closed; - - umap2 = isl_union_map_apply_range(isl_union_map_copy(umap), - isl_union_map_copy(umap)); - closed = isl_union_map_is_subset(umap2, umap); - isl_union_map_free(umap2); - - return closed; -} - -/* Given a map that represents a path with the length of the path - * encoded as the difference between the last output coordindate - * and the last input coordinate, set this length to either - * exactly "length" (if "exactly" is set) or at least "length" - * (if "exactly" is not set). - */ -static __isl_give isl_map *set_path_length(__isl_take isl_map *map, - int exactly, int length) -{ - struct isl_dim *dim; - struct isl_basic_map *bmap; - unsigned d; - unsigned nparam; - int k; - isl_int *c; - - if (!map) - return NULL; - - dim = isl_map_get_dim(map); - d = isl_dim_size(dim, isl_dim_in); - nparam = isl_dim_size(dim, isl_dim_param); - bmap = isl_basic_map_alloc_dim(dim, 0, 1, 1); - if (exactly) { - k = isl_basic_map_alloc_equality(bmap); - c = bmap->eq[k]; - } else { - k = isl_basic_map_alloc_inequality(bmap); - c = bmap->ineq[k]; - } - if (k < 0) - goto error; - isl_seq_clr(c, 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(c[0], -length); - isl_int_set_si(c[1 + nparam + d - 1], -1); - isl_int_set_si(c[1 + nparam + d + d - 1], 1); - - bmap = isl_basic_map_finalize(bmap); - map = isl_map_intersect(map, isl_map_from_basic_map(bmap)); - - return map; -error: - isl_basic_map_free(bmap); - isl_map_free(map); - return NULL; -} - -/* Check whether the overapproximation of the power of "map" is exactly - * the power of "map". Let R be "map" and A_k the overapproximation. - * The approximation is exact if - * - * A_1 = R - * A_k = A_{k-1} \circ R k >= 2 - * - * Since A_k is known to be an overapproximation, we only need to check - * - * A_1 \subset R - * A_k \subset A_{k-1} \circ R k >= 2 - * - * In practice, "app" has an extra input and output coordinate - * to encode the length of the path. So, we first need to add - * this coordinate to "map" and set the length of the path to - * one. - */ -static int check_power_exactness(__isl_take isl_map *map, - __isl_take isl_map *app) -{ - int exact; - isl_map *app_1; - isl_map *app_2; - - map = isl_map_add_dims(map, isl_dim_in, 1); - map = isl_map_add_dims(map, isl_dim_out, 1); - map = set_path_length(map, 1, 1); - - app_1 = set_path_length(isl_map_copy(app), 1, 1); - - exact = isl_map_is_subset(app_1, map); - isl_map_free(app_1); - - if (!exact || exact < 0) { - isl_map_free(app); - isl_map_free(map); - return exact; - } - - app_1 = set_path_length(isl_map_copy(app), 0, 1); - app_2 = set_path_length(app, 0, 2); - app_1 = isl_map_apply_range(map, app_1); - - exact = isl_map_is_subset(app_2, app_1); - - isl_map_free(app_1); - isl_map_free(app_2); - - return exact; -} - -/* Check whether the overapproximation of the power of "map" is exactly - * the power of "map", possibly after projecting out the power (if "project" - * is set). - * - * If "project" is set and if "steps" can only result in acyclic paths, - * then we check - * - * A = R \cup (A \circ R) - * - * where A is the overapproximation with the power projected out, i.e., - * an overapproximation of the transitive closure. - * More specifically, since A is known to be an overapproximation, we check - * - * A \subset R \cup (A \circ R) - * - * Otherwise, we check if the power is exact. - * - * Note that "app" has an extra input and output coordinate to encode - * the length of the part. If we are only interested in the transitive - * closure, then we can simply project out these coordinates first. - */ -static int check_exactness(__isl_take isl_map *map, __isl_take isl_map *app, - int project) -{ - isl_map *test; - int exact; - unsigned d; - - if (!project) - return check_power_exactness(map, app); - - d = isl_map_dim(map, isl_dim_in); - app = set_path_length(app, 0, 1); - app = isl_map_project_out(app, isl_dim_in, d, 1); - app = isl_map_project_out(app, isl_dim_out, d, 1); - - app = isl_map_reset_dim(app, isl_map_get_dim(map)); - - test = isl_map_apply_range(isl_map_copy(map), isl_map_copy(app)); - test = isl_map_union(test, isl_map_copy(map)); - - exact = isl_map_is_subset(app, test); - - isl_map_free(app); - isl_map_free(test); - - isl_map_free(map); - - return exact; -} - -/* - * The transitive closure implementation is based on the paper - * "Computing the Transitive Closure of a Union of Affine Integer - * Tuple Relations" by Anna Beletska, Denis Barthou, Wlodzimierz Bielecki and - * Albert Cohen. - */ - -/* Given a set of n offsets v_i (the rows of "steps"), construct a relation - * of the given dimension specification (Z^{n+1} -> Z^{n+1}) - * that maps an element x to any element that can be reached - * by taking a non-negative number of steps along any of - * the extended offsets v'_i = [v_i 1]. - * That is, construct - * - * { [x] -> [y] : exists k_i >= 0, y = x + \sum_i k_i v'_i } - * - * For any element in this relation, the number of steps taken - * is equal to the difference in the final coordinates. - */ -static __isl_give isl_map *path_along_steps(__isl_take isl_dim *dim, - __isl_keep isl_mat *steps) -{ - int i, j, k; - struct isl_basic_map *path = NULL; - unsigned d; - unsigned n; - unsigned nparam; - - if (!dim || !steps) - goto error; - - d = isl_dim_size(dim, isl_dim_in); - n = steps->n_row; - nparam = isl_dim_size(dim, isl_dim_param); - - path = isl_basic_map_alloc_dim(isl_dim_copy(dim), n, d, n); - - for (i = 0; i < n; ++i) { - k = isl_basic_map_alloc_div(path); - if (k < 0) - goto error; - isl_assert(steps->ctx, i == k, goto error); - isl_int_set_si(path->div[k][0], 0); - } - - for (i = 0; i < d; ++i) { - k = isl_basic_map_alloc_equality(path); - if (k < 0) - goto error; - isl_seq_clr(path->eq[k], 1 + isl_basic_map_total_dim(path)); - isl_int_set_si(path->eq[k][1 + nparam + i], 1); - isl_int_set_si(path->eq[k][1 + nparam + d + i], -1); - if (i == d - 1) - for (j = 0; j < n; ++j) - isl_int_set_si(path->eq[k][1 + nparam + 2 * d + j], 1); - else - for (j = 0; j < n; ++j) - isl_int_set(path->eq[k][1 + nparam + 2 * d + j], - steps->row[j][i]); - } - - for (i = 0; i < n; ++i) { - k = isl_basic_map_alloc_inequality(path); - if (k < 0) - goto error; - isl_seq_clr(path->ineq[k], 1 + isl_basic_map_total_dim(path)); - isl_int_set_si(path->ineq[k][1 + nparam + 2 * d + i], 1); - } - - isl_dim_free(dim); - - path = isl_basic_map_simplify(path); - path = isl_basic_map_finalize(path); - return isl_map_from_basic_map(path); -error: - isl_dim_free(dim); - isl_basic_map_free(path); - return NULL; -} - -#define IMPURE 0 -#define PURE_PARAM 1 -#define PURE_VAR 2 -#define MIXED 3 - -/* Check whether the parametric constant term of constraint c is never - * positive in "bset". - */ -static int parametric_constant_never_positive(__isl_keep isl_basic_set *bset, - isl_int *c, int *div_purity) -{ - unsigned d; - unsigned n_div; - unsigned nparam; - int i; - int k; - int empty; - - n_div = isl_basic_set_dim(bset, isl_dim_div); - d = isl_basic_set_dim(bset, isl_dim_set); - nparam = isl_basic_set_dim(bset, isl_dim_param); - - bset = isl_basic_set_copy(bset); - bset = isl_basic_set_cow(bset); - bset = isl_basic_set_extend_constraints(bset, 0, 1); - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_clr(bset->ineq[k], 1 + isl_basic_set_total_dim(bset)); - isl_seq_cpy(bset->ineq[k], c, 1 + nparam); - for (i = 0; i < n_div; ++i) { - if (div_purity[i] != PURE_PARAM) - continue; - isl_int_set(bset->ineq[k][1 + nparam + d + i], - c[1 + nparam + d + i]); - } - isl_int_sub_ui(bset->ineq[k][0], bset->ineq[k][0], 1); - empty = isl_basic_set_is_empty(bset); - isl_basic_set_free(bset); - - return empty; -error: - isl_basic_set_free(bset); - return -1; -} - -/* Return PURE_PARAM if only the coefficients of the parameters are non-zero. - * Return PURE_VAR if only the coefficients of the set variables are non-zero. - * Return MIXED if only the coefficients of the parameters and the set - * variables are non-zero and if moreover the parametric constant - * can never attain positive values. - * Return IMPURE otherwise. - * - * If div_purity is NULL then we are dealing with a non-parametric set - * and so the constraint is obviously PURE_VAR. - */ -static int purity(__isl_keep isl_basic_set *bset, isl_int *c, int *div_purity, - int eq) -{ - unsigned d; - unsigned n_div; - unsigned nparam; - int empty; - int i; - int p = 0, v = 0; - - if (!div_purity) - return PURE_VAR; - - n_div = isl_basic_set_dim(bset, isl_dim_div); - d = isl_basic_set_dim(bset, isl_dim_set); - nparam = isl_basic_set_dim(bset, isl_dim_param); - - for (i = 0; i < n_div; ++i) { - if (isl_int_is_zero(c[1 + nparam + d + i])) - continue; - switch (div_purity[i]) { - case PURE_PARAM: p = 1; break; - case PURE_VAR: v = 1; break; - default: return IMPURE; - } - } - if (!p && isl_seq_first_non_zero(c + 1, nparam) == -1) - return PURE_VAR; - if (!v && isl_seq_first_non_zero(c + 1 + nparam, d) == -1) - return PURE_PARAM; - - empty = parametric_constant_never_positive(bset, c, div_purity); - if (eq && empty >= 0 && !empty) { - isl_seq_neg(c, c, 1 + nparam + d + n_div); - empty = parametric_constant_never_positive(bset, c, div_purity); - } - - return empty < 0 ? -1 : empty ? MIXED : IMPURE; -} - -/* Return an array of integers indicating the type of each div in bset. - * If the div is (recursively) defined in terms of only the parameters, - * then the type is PURE_PARAM. - * If the div is (recursively) defined in terms of only the set variables, - * then the type is PURE_VAR. - * Otherwise, the type is IMPURE. - */ -static __isl_give int *get_div_purity(__isl_keep isl_basic_set *bset) -{ - int i, j; - int *div_purity; - unsigned d; - unsigned n_div; - unsigned nparam; - - if (!bset) - return NULL; - - n_div = isl_basic_set_dim(bset, isl_dim_div); - d = isl_basic_set_dim(bset, isl_dim_set); - nparam = isl_basic_set_dim(bset, isl_dim_param); - - div_purity = isl_alloc_array(bset->ctx, int, n_div); - if (!div_purity) - return NULL; - - for (i = 0; i < bset->n_div; ++i) { - int p = 0, v = 0; - if (isl_int_is_zero(bset->div[i][0])) { - div_purity[i] = IMPURE; - continue; - } - if (isl_seq_first_non_zero(bset->div[i] + 2, nparam) != -1) - p = 1; - if (isl_seq_first_non_zero(bset->div[i] + 2 + nparam, d) != -1) - v = 1; - for (j = 0; j < i; ++j) { - if (isl_int_is_zero(bset->div[i][2 + nparam + d + j])) - continue; - switch (div_purity[j]) { - case PURE_PARAM: p = 1; break; - case PURE_VAR: v = 1; break; - default: p = v = 1; break; - } - } - div_purity[i] = v ? p ? IMPURE : PURE_VAR : PURE_PARAM; - } - - return div_purity; -} - -/* Given a path with the as yet unconstrained length at position "pos", - * check if setting the length to zero results in only the identity - * mapping. - */ -static int empty_path_is_identity(__isl_keep isl_basic_map *path, unsigned pos) -{ - isl_basic_map *test = NULL; - isl_basic_map *id = NULL; - int k; - int is_id; - - test = isl_basic_map_copy(path); - test = isl_basic_map_extend_constraints(test, 1, 0); - k = isl_basic_map_alloc_equality(test); - if (k < 0) - goto error; - isl_seq_clr(test->eq[k], 1 + isl_basic_map_total_dim(test)); - isl_int_set_si(test->eq[k][pos], 1); - id = isl_basic_map_identity(isl_basic_map_get_dim(path)); - is_id = isl_basic_map_is_equal(test, id); - isl_basic_map_free(test); - isl_basic_map_free(id); - return is_id; -error: - isl_basic_map_free(test); - return -1; -} - -/* If any of the constraints is found to be impure then this function - * sets *impurity to 1. - */ -static __isl_give isl_basic_map *add_delta_constraints( - __isl_take isl_basic_map *path, - __isl_keep isl_basic_set *delta, unsigned off, unsigned nparam, - unsigned d, int *div_purity, int eq, int *impurity) -{ - int i, k; - int n = eq ? delta->n_eq : delta->n_ineq; - isl_int **delta_c = eq ? delta->eq : delta->ineq; - unsigned n_div; - - n_div = isl_basic_set_dim(delta, isl_dim_div); - - for (i = 0; i < n; ++i) { - isl_int *path_c; - int p = purity(delta, delta_c[i], div_purity, eq); - if (p < 0) - goto error; - if (p != PURE_VAR && p != PURE_PARAM && !*impurity) - *impurity = 1; - if (p == IMPURE) - continue; - if (eq && p != MIXED) { - k = isl_basic_map_alloc_equality(path); - path_c = path->eq[k]; - } else { - k = isl_basic_map_alloc_inequality(path); - path_c = path->ineq[k]; - } - if (k < 0) - goto error; - isl_seq_clr(path_c, 1 + isl_basic_map_total_dim(path)); - if (p == PURE_VAR) { - isl_seq_cpy(path_c + off, - delta_c[i] + 1 + nparam, d); - isl_int_set(path_c[off + d], delta_c[i][0]); - } else if (p == PURE_PARAM) { - isl_seq_cpy(path_c, delta_c[i], 1 + nparam); - } else { - isl_seq_cpy(path_c + off, - delta_c[i] + 1 + nparam, d); - isl_seq_cpy(path_c, delta_c[i], 1 + nparam); - } - isl_seq_cpy(path_c + off - n_div, - delta_c[i] + 1 + nparam + d, n_div); - } - - return path; -error: - isl_basic_map_free(path); - return NULL; -} - -/* Given a set of offsets "delta", construct a relation of the - * given dimension specification (Z^{n+1} -> Z^{n+1}) that - * is an overapproximation of the relations that - * maps an element x to any element that can be reached - * by taking a non-negative number of steps along any of - * the elements in "delta". - * That is, construct an approximation of - * - * { [x] -> [y] : exists f \in \delta, k \in Z : - * y = x + k [f, 1] and k >= 0 } - * - * For any element in this relation, the number of steps taken - * is equal to the difference in the final coordinates. - * - * In particular, let delta be defined as - * - * \delta = [p] -> { [x] : A x + a >= 0 and B p + b >= 0 and - * C x + C'p + c >= 0 and - * D x + D'p + d >= 0 } - * - * where the constraints C x + C'p + c >= 0 are such that the parametric - * constant term of each constraint j, "C_j x + C'_j p + c_j", - * can never attain positive values, then the relation is constructed as - * - * { [x] -> [y] : exists [f, k] \in Z^{n+1} : y = x + f and - * A f + k a >= 0 and B p + b >= 0 and - * C f + C'p + c >= 0 and k >= 1 } - * union { [x] -> [x] } - * - * If the zero-length paths happen to correspond exactly to the identity - * mapping, then we return - * - * { [x] -> [y] : exists [f, k] \in Z^{n+1} : y = x + f and - * A f + k a >= 0 and B p + b >= 0 and - * C f + C'p + c >= 0 and k >= 0 } - * - * instead. - * - * Existentially quantified variables in \delta are handled by - * classifying them as independent of the parameters, purely - * parameter dependent and others. Constraints containing - * any of the other existentially quantified variables are removed. - * This is safe, but leads to an additional overapproximation. - * - * If there are any impure constraints, then we also eliminate - * the parameters from \delta, resulting in a set - * - * \delta' = { [x] : E x + e >= 0 } - * - * and add the constraints - * - * E f + k e >= 0 - * - * to the constructed relation. - */ -static __isl_give isl_map *path_along_delta(__isl_take isl_dim *dim, - __isl_take isl_basic_set *delta) -{ - isl_basic_map *path = NULL; - unsigned d; - unsigned n_div; - unsigned nparam; - unsigned off; - int i, k; - int is_id; - int *div_purity = NULL; - int impurity = 0; - - if (!delta) - goto error; - n_div = isl_basic_set_dim(delta, isl_dim_div); - d = isl_basic_set_dim(delta, isl_dim_set); - nparam = isl_basic_set_dim(delta, isl_dim_param); - path = isl_basic_map_alloc_dim(isl_dim_copy(dim), n_div + d + 1, - d + 1 + delta->n_eq, delta->n_eq + delta->n_ineq + 1); - off = 1 + nparam + 2 * (d + 1) + n_div; - - for (i = 0; i < n_div + d + 1; ++i) { - k = isl_basic_map_alloc_div(path); - if (k < 0) - goto error; - isl_int_set_si(path->div[k][0], 0); - } - - for (i = 0; i < d + 1; ++i) { - k = isl_basic_map_alloc_equality(path); - if (k < 0) - goto error; - isl_seq_clr(path->eq[k], 1 + isl_basic_map_total_dim(path)); - isl_int_set_si(path->eq[k][1 + nparam + i], 1); - isl_int_set_si(path->eq[k][1 + nparam + d + 1 + i], -1); - isl_int_set_si(path->eq[k][off + i], 1); - } - - div_purity = get_div_purity(delta); - if (!div_purity) - goto error; - - path = add_delta_constraints(path, delta, off, nparam, d, - div_purity, 1, &impurity); - path = add_delta_constraints(path, delta, off, nparam, d, - div_purity, 0, &impurity); - if (impurity) { - isl_dim *dim = isl_basic_set_get_dim(delta); - delta = isl_basic_set_project_out(delta, - isl_dim_param, 0, nparam); - delta = isl_basic_set_add(delta, isl_dim_param, nparam); - delta = isl_basic_set_reset_dim(delta, dim); - if (!delta) - goto error; - path = isl_basic_map_extend_constraints(path, delta->n_eq, - delta->n_ineq + 1); - path = add_delta_constraints(path, delta, off, nparam, d, - NULL, 1, &impurity); - path = add_delta_constraints(path, delta, off, nparam, d, - NULL, 0, &impurity); - path = isl_basic_map_gauss(path, NULL); - } - - is_id = empty_path_is_identity(path, off + d); - if (is_id < 0) - goto error; - - k = isl_basic_map_alloc_inequality(path); - if (k < 0) - goto error; - isl_seq_clr(path->ineq[k], 1 + isl_basic_map_total_dim(path)); - if (!is_id) - isl_int_set_si(path->ineq[k][0], -1); - isl_int_set_si(path->ineq[k][off + d], 1); - - free(div_purity); - isl_basic_set_free(delta); - path = isl_basic_map_finalize(path); - if (is_id) { - isl_dim_free(dim); - return isl_map_from_basic_map(path); - } - return isl_basic_map_union(path, isl_basic_map_identity(dim)); -error: - free(div_purity); - isl_dim_free(dim); - isl_basic_set_free(delta); - isl_basic_map_free(path); - return NULL; -} - -/* Given a dimension specification Z^{n+1} -> Z^{n+1} and a parameter "param", - * construct a map that equates the parameter to the difference - * in the final coordinates and imposes that this difference is positive. - * That is, construct - * - * { [x,x_s] -> [y,y_s] : k = y_s - x_s > 0 } - */ -static __isl_give isl_map *equate_parameter_to_length(__isl_take isl_dim *dim, - unsigned param) -{ - struct isl_basic_map *bmap; - unsigned d; - unsigned nparam; - int k; - - d = isl_dim_size(dim, isl_dim_in); - nparam = isl_dim_size(dim, isl_dim_param); - bmap = isl_basic_map_alloc_dim(dim, 0, 1, 1); - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->eq[k], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->eq[k][1 + param], -1); - isl_int_set_si(bmap->eq[k][1 + nparam + d - 1], -1); - isl_int_set_si(bmap->eq[k][1 + nparam + d + d - 1], 1); - - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->ineq[k], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->ineq[k][1 + param], 1); - isl_int_set_si(bmap->ineq[k][0], -1); - - bmap = isl_basic_map_finalize(bmap); - return isl_map_from_basic_map(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Check whether "path" is acyclic, where the last coordinates of domain - * and range of path encode the number of steps taken. - * That is, check whether - * - * { d | d = y - x and (x,y) in path } - * - * does not contain any element with positive last coordinate (positive length) - * and zero remaining coordinates (cycle). - */ -static int is_acyclic(__isl_take isl_map *path) -{ - int i; - int acyclic; - unsigned dim; - struct isl_set *delta; - - delta = isl_map_deltas(path); - dim = isl_set_dim(delta, isl_dim_set); - for (i = 0; i < dim; ++i) { - if (i == dim -1) - delta = isl_set_lower_bound_si(delta, isl_dim_set, i, 1); - else - delta = isl_set_fix_si(delta, isl_dim_set, i, 0); - } - - acyclic = isl_set_is_empty(delta); - isl_set_free(delta); - - return acyclic; -} - -/* Given a union of basic maps R = \cup_i R_i \subseteq D \times D - * and a dimension specification (Z^{n+1} -> Z^{n+1}), - * construct a map that is an overapproximation of the map - * that takes an element from the space D \times Z to another - * element from the same space, such that the first n coordinates of the - * difference between them is a sum of differences between images - * and pre-images in one of the R_i and such that the last coordinate - * is equal to the number of steps taken. - * That is, let - * - * \Delta_i = { y - x | (x, y) in R_i } - * - * then the constructed map is an overapproximation of - * - * { (x) -> (x + d) | \exists k_i >= 0, \delta_i \in \Delta_i : - * d = (\sum_i k_i \delta_i, \sum_i k_i) } - * - * The elements of the singleton \Delta_i's are collected as the - * rows of the steps matrix. For all these \Delta_i's together, - * a single path is constructed. - * For each of the other \Delta_i's, we compute an overapproximation - * of the paths along elements of \Delta_i. - * Since each of these paths performs an addition, composition is - * symmetric and we can simply compose all resulting paths in any order. - */ -static __isl_give isl_map *construct_extended_path(__isl_take isl_dim *dim, - __isl_keep isl_map *map, int *project) -{ - struct isl_mat *steps = NULL; - struct isl_map *path = NULL; - unsigned d; - int i, j, n; - - d = isl_map_dim(map, isl_dim_in); - - path = isl_map_identity(isl_dim_copy(dim)); - - steps = isl_mat_alloc(map->ctx, map->n, d); - if (!steps) - goto error; - - n = 0; - for (i = 0; i < map->n; ++i) { - struct isl_basic_set *delta; - - delta = isl_basic_map_deltas(isl_basic_map_copy(map->p[i])); - - for (j = 0; j < d; ++j) { - int fixed; - - fixed = isl_basic_set_plain_dim_is_fixed(delta, j, - &steps->row[n][j]); - if (fixed < 0) { - isl_basic_set_free(delta); - goto error; - } - if (!fixed) - break; - } - - - if (j < d) { - path = isl_map_apply_range(path, - path_along_delta(isl_dim_copy(dim), delta)); - path = isl_map_coalesce(path); - } else { - isl_basic_set_free(delta); - ++n; - } - } - - if (n > 0) { - steps->n_row = n; - path = isl_map_apply_range(path, - path_along_steps(isl_dim_copy(dim), steps)); - } - - if (project && *project) { - *project = is_acyclic(isl_map_copy(path)); - if (*project < 0) - goto error; - } - - isl_dim_free(dim); - isl_mat_free(steps); - return path; -error: - isl_dim_free(dim); - isl_mat_free(steps); - isl_map_free(path); - return NULL; -} - -static int isl_set_overlaps(__isl_keep isl_set *set1, __isl_keep isl_set *set2) -{ - isl_set *i; - int no_overlap; - - if (!isl_dim_tuple_match(set1->dim, isl_dim_set, set2->dim, isl_dim_set)) - return 0; - - i = isl_set_intersect(isl_set_copy(set1), isl_set_copy(set2)); - no_overlap = isl_set_is_empty(i); - isl_set_free(i); - - return no_overlap < 0 ? -1 : !no_overlap; -} - -/* Given a union of basic maps R = \cup_i R_i \subseteq D \times D - * and a dimension specification (Z^{n+1} -> Z^{n+1}), - * construct a map that is an overapproximation of the map - * that takes an element from the dom R \times Z to an - * element from ran R \times Z, such that the first n coordinates of the - * difference between them is a sum of differences between images - * and pre-images in one of the R_i and such that the last coordinate - * is equal to the number of steps taken. - * That is, let - * - * \Delta_i = { y - x | (x, y) in R_i } - * - * then the constructed map is an overapproximation of - * - * { (x) -> (x + d) | \exists k_i >= 0, \delta_i \in \Delta_i : - * d = (\sum_i k_i \delta_i, \sum_i k_i) and - * x in dom R and x + d in ran R and - * \sum_i k_i >= 1 } - */ -static __isl_give isl_map *construct_component(__isl_take isl_dim *dim, - __isl_keep isl_map *map, int *exact, int project) -{ - struct isl_set *domain = NULL; - struct isl_set *range = NULL; - struct isl_map *app = NULL; - struct isl_map *path = NULL; - - domain = isl_map_domain(isl_map_copy(map)); - domain = isl_set_coalesce(domain); - range = isl_map_range(isl_map_copy(map)); - range = isl_set_coalesce(range); - if (!isl_set_overlaps(domain, range)) { - isl_set_free(domain); - isl_set_free(range); - isl_dim_free(dim); - - map = isl_map_copy(map); - map = isl_map_add_dims(map, isl_dim_in, 1); - map = isl_map_add_dims(map, isl_dim_out, 1); - map = set_path_length(map, 1, 1); - return map; - } - app = isl_map_from_domain_and_range(domain, range); - app = isl_map_add_dims(app, isl_dim_in, 1); - app = isl_map_add_dims(app, isl_dim_out, 1); - - path = construct_extended_path(isl_dim_copy(dim), map, - exact && *exact ? &project : NULL); - app = isl_map_intersect(app, path); - - if (exact && *exact && - (*exact = check_exactness(isl_map_copy(map), isl_map_copy(app), - project)) < 0) - goto error; - - isl_dim_free(dim); - app = set_path_length(app, 0, 1); - return app; -error: - isl_dim_free(dim); - isl_map_free(app); - return NULL; -} - -/* Call construct_component and, if "project" is set, project out - * the final coordinates. - */ -static __isl_give isl_map *construct_projected_component( - __isl_take isl_dim *dim, - __isl_keep isl_map *map, int *exact, int project) -{ - isl_map *app; - unsigned d; - - if (!dim) - return NULL; - d = isl_dim_size(dim, isl_dim_in); - - app = construct_component(dim, map, exact, project); - if (project) { - app = isl_map_project_out(app, isl_dim_in, d - 1, 1); - app = isl_map_project_out(app, isl_dim_out, d - 1, 1); - } - return app; -} - -/* Compute an extended version, i.e., with path lengths, of - * an overapproximation of the transitive closure of "bmap" - * with path lengths greater than or equal to zero and with - * domain and range equal to "dom". - */ -static __isl_give isl_map *q_closure(__isl_take isl_dim *dim, - __isl_take isl_set *dom, __isl_keep isl_basic_map *bmap, int *exact) -{ - int project = 1; - isl_map *path; - isl_map *map; - isl_map *app; - - dom = isl_set_add_dims(dom, isl_dim_set, 1); - app = isl_map_from_domain_and_range(dom, isl_set_copy(dom)); - map = isl_map_from_basic_map(isl_basic_map_copy(bmap)); - path = construct_extended_path(dim, map, &project); - app = isl_map_intersect(app, path); - - if ((*exact = check_exactness(map, isl_map_copy(app), project)) < 0) - goto error; - - return app; -error: - isl_map_free(app); - return NULL; -} - -/* Check whether qc has any elements of length at least one - * with domain and/or range outside of dom and ran. - */ -static int has_spurious_elements(__isl_keep isl_map *qc, - __isl_keep isl_set *dom, __isl_keep isl_set *ran) -{ - isl_set *s; - int subset; - unsigned d; - - if (!qc || !dom || !ran) - return -1; - - d = isl_map_dim(qc, isl_dim_in); - - qc = isl_map_copy(qc); - qc = set_path_length(qc, 0, 1); - qc = isl_map_project_out(qc, isl_dim_in, d - 1, 1); - qc = isl_map_project_out(qc, isl_dim_out, d - 1, 1); - - s = isl_map_domain(isl_map_copy(qc)); - subset = isl_set_is_subset(s, dom); - isl_set_free(s); - if (subset < 0) - goto error; - if (!subset) { - isl_map_free(qc); - return 1; - } - - s = isl_map_range(qc); - subset = isl_set_is_subset(s, ran); - isl_set_free(s); - - return subset < 0 ? -1 : !subset; -error: - isl_map_free(qc); - return -1; -} - -#define LEFT 2 -#define RIGHT 1 - -/* For each basic map in "map", except i, check whether it combines - * with the transitive closure that is reflexive on C combines - * to the left and to the right. - * - * In particular, if - * - * dom map_j \subseteq C - * - * then right[j] is set to 1. Otherwise, if - * - * ran map_i \cap dom map_j = \emptyset - * - * then right[j] is set to 0. Otherwise, composing to the right - * is impossible. - * - * Similar, for composing to the left, we have if - * - * ran map_j \subseteq C - * - * then left[j] is set to 1. Otherwise, if - * - * dom map_i \cap ran map_j = \emptyset - * - * then left[j] is set to 0. Otherwise, composing to the left - * is impossible. - * - * The return value is or'd with LEFT if composing to the left - * is possible and with RIGHT if composing to the right is possible. - */ -static int composability(__isl_keep isl_set *C, int i, - isl_set **dom, isl_set **ran, int *left, int *right, - __isl_keep isl_map *map) -{ - int j; - int ok; - - ok = LEFT | RIGHT; - for (j = 0; j < map->n && ok; ++j) { - int overlaps, subset; - if (j == i) - continue; - - if (ok & RIGHT) { - if (!dom[j]) - dom[j] = isl_set_from_basic_set( - isl_basic_map_domain( - isl_basic_map_copy(map->p[j]))); - if (!dom[j]) - return -1; - overlaps = isl_set_overlaps(ran[i], dom[j]); - if (overlaps < 0) - return -1; - if (!overlaps) - right[j] = 0; - else { - subset = isl_set_is_subset(dom[j], C); - if (subset < 0) - return -1; - if (subset) - right[j] = 1; - else - ok &= ~RIGHT; - } - } - - if (ok & LEFT) { - if (!ran[j]) - ran[j] = isl_set_from_basic_set( - isl_basic_map_range( - isl_basic_map_copy(map->p[j]))); - if (!ran[j]) - return -1; - overlaps = isl_set_overlaps(dom[i], ran[j]); - if (overlaps < 0) - return -1; - if (!overlaps) - left[j] = 0; - else { - subset = isl_set_is_subset(ran[j], C); - if (subset < 0) - return -1; - if (subset) - left[j] = 1; - else - ok &= ~LEFT; - } - } - } - - return ok; -} - -static __isl_give isl_map *anonymize(__isl_take isl_map *map) -{ - map = isl_map_reset(map, isl_dim_in); - map = isl_map_reset(map, isl_dim_out); - return map; -} - -/* Return a map that is a union of the basic maps in "map", except i, - * composed to left and right with qc based on the entries of "left" - * and "right". - */ -static __isl_give isl_map *compose(__isl_keep isl_map *map, int i, - __isl_take isl_map *qc, int *left, int *right) -{ - int j; - isl_map *comp; - - comp = isl_map_empty(isl_map_get_dim(map)); - for (j = 0; j < map->n; ++j) { - isl_map *map_j; - - if (j == i) - continue; - - map_j = isl_map_from_basic_map(isl_basic_map_copy(map->p[j])); - map_j = anonymize(map_j); - if (left && left[j]) - map_j = isl_map_apply_range(map_j, isl_map_copy(qc)); - if (right && right[j]) - map_j = isl_map_apply_range(isl_map_copy(qc), map_j); - comp = isl_map_union(comp, map_j); - } - - comp = isl_map_compute_divs(comp); - comp = isl_map_coalesce(comp); - - isl_map_free(qc); - - return comp; -} - -/* Compute the transitive closure of "map" incrementally by - * computing - * - * map_i^+ \cup qc^+ - * - * or - * - * map_i^+ \cup ((id \cup map_i^) \circ qc^+) - * - * or - * - * map_i^+ \cup (qc^+ \circ (id \cup map_i^)) - * - * depending on whether left or right are NULL. - */ -static __isl_give isl_map *compute_incremental( - __isl_take isl_dim *dim, __isl_keep isl_map *map, - int i, __isl_take isl_map *qc, int *left, int *right, int *exact) -{ - isl_map *map_i; - isl_map *tc; - isl_map *rtc = NULL; - - if (!map) - goto error; - isl_assert(map->ctx, left || right, goto error); - - map_i = isl_map_from_basic_map(isl_basic_map_copy(map->p[i])); - tc = construct_projected_component(isl_dim_copy(dim), map_i, - exact, 1); - isl_map_free(map_i); - - if (*exact) - qc = isl_map_transitive_closure(qc, exact); - - if (!*exact) { - isl_dim_free(dim); - isl_map_free(tc); - isl_map_free(qc); - return isl_map_universe(isl_map_get_dim(map)); - } - - if (!left || !right) - rtc = isl_map_union(isl_map_copy(tc), - isl_map_identity(isl_map_get_dim(tc))); - if (!right) - qc = isl_map_apply_range(rtc, qc); - if (!left) - qc = isl_map_apply_range(qc, rtc); - qc = isl_map_union(tc, qc); - - isl_dim_free(dim); - - return qc; -error: - isl_dim_free(dim); - isl_map_free(qc); - return NULL; -} - -/* Given a map "map", try to find a basic map such that - * map^+ can be computed as - * - * map^+ = map_i^+ \cup - * \bigcup_j ((map_i^+ \cup Id_C)^+ \circ map_j \circ (map_i^+ \cup Id_C))^+ - * - * with C the simple hull of the domain and range of the input map. - * map_i^ \cup Id_C is computed by allowing the path lengths to be zero - * and by intersecting domain and range with C. - * Of course, we need to check that this is actually equal to map_i^ \cup Id_C. - * Also, we only use the incremental computation if all the transitive - * closures are exact and if the number of basic maps in the union, - * after computing the integer divisions, is smaller than the number - * of basic maps in the input map. - */ -static int incemental_on_entire_domain(__isl_keep isl_dim *dim, - __isl_keep isl_map *map, - isl_set **dom, isl_set **ran, int *left, int *right, - __isl_give isl_map **res) -{ - int i; - isl_set *C; - unsigned d; - - *res = NULL; - - C = isl_set_union(isl_map_domain(isl_map_copy(map)), - isl_map_range(isl_map_copy(map))); - C = isl_set_from_basic_set(isl_set_simple_hull(C)); - if (!C) - return -1; - if (C->n != 1) { - isl_set_free(C); - return 0; - } - - d = isl_map_dim(map, isl_dim_in); - - for (i = 0; i < map->n; ++i) { - isl_map *qc; - int exact_i, spurious; - int j; - dom[i] = isl_set_from_basic_set(isl_basic_map_domain( - isl_basic_map_copy(map->p[i]))); - ran[i] = isl_set_from_basic_set(isl_basic_map_range( - isl_basic_map_copy(map->p[i]))); - qc = q_closure(isl_dim_copy(dim), isl_set_copy(C), - map->p[i], &exact_i); - if (!qc) - goto error; - if (!exact_i) { - isl_map_free(qc); - continue; - } - spurious = has_spurious_elements(qc, dom[i], ran[i]); - if (spurious) { - isl_map_free(qc); - if (spurious < 0) - goto error; - continue; - } - qc = isl_map_project_out(qc, isl_dim_in, d, 1); - qc = isl_map_project_out(qc, isl_dim_out, d, 1); - qc = isl_map_compute_divs(qc); - for (j = 0; j < map->n; ++j) - left[j] = right[j] = 1; - qc = compose(map, i, qc, left, right); - if (!qc) - goto error; - if (qc->n >= map->n) { - isl_map_free(qc); - continue; - } - *res = compute_incremental(isl_dim_copy(dim), map, i, qc, - left, right, &exact_i); - if (!*res) - goto error; - if (exact_i) - break; - isl_map_free(*res); - *res = NULL; - } - - isl_set_free(C); - - return *res != NULL; -error: - isl_set_free(C); - return -1; -} - -/* Try and compute the transitive closure of "map" as - * - * map^+ = map_i^+ \cup - * \bigcup_j ((map_i^+ \cup Id_C)^+ \circ map_j \circ (map_i^+ \cup Id_C))^+ - * - * with C either the simple hull of the domain and range of the entire - * map or the simple hull of domain and range of map_i. - */ -static __isl_give isl_map *incremental_closure(__isl_take isl_dim *dim, - __isl_keep isl_map *map, int *exact, int project) -{ - int i; - isl_set **dom = NULL; - isl_set **ran = NULL; - int *left = NULL; - int *right = NULL; - isl_set *C; - unsigned d; - isl_map *res = NULL; - - if (!project) - return construct_projected_component(dim, map, exact, project); - - if (!map) - goto error; - if (map->n <= 1) - return construct_projected_component(dim, map, exact, project); - - d = isl_map_dim(map, isl_dim_in); - - dom = isl_calloc_array(map->ctx, isl_set *, map->n); - ran = isl_calloc_array(map->ctx, isl_set *, map->n); - left = isl_calloc_array(map->ctx, int, map->n); - right = isl_calloc_array(map->ctx, int, map->n); - if (!ran || !dom || !left || !right) - goto error; - - if (incemental_on_entire_domain(dim, map, dom, ran, left, right, &res) < 0) - goto error; - - for (i = 0; !res && i < map->n; ++i) { - isl_map *qc; - int exact_i, spurious, comp; - if (!dom[i]) - dom[i] = isl_set_from_basic_set( - isl_basic_map_domain( - isl_basic_map_copy(map->p[i]))); - if (!dom[i]) - goto error; - if (!ran[i]) - ran[i] = isl_set_from_basic_set( - isl_basic_map_range( - isl_basic_map_copy(map->p[i]))); - if (!ran[i]) - goto error; - C = isl_set_union(isl_set_copy(dom[i]), - isl_set_copy(ran[i])); - C = isl_set_from_basic_set(isl_set_simple_hull(C)); - if (!C) - goto error; - if (C->n != 1) { - isl_set_free(C); - continue; - } - comp = composability(C, i, dom, ran, left, right, map); - if (!comp || comp < 0) { - isl_set_free(C); - if (comp < 0) - goto error; - continue; - } - qc = q_closure(isl_dim_copy(dim), C, map->p[i], &exact_i); - if (!qc) - goto error; - if (!exact_i) { - isl_map_free(qc); - continue; - } - spurious = has_spurious_elements(qc, dom[i], ran[i]); - if (spurious) { - isl_map_free(qc); - if (spurious < 0) - goto error; - continue; - } - qc = isl_map_project_out(qc, isl_dim_in, d, 1); - qc = isl_map_project_out(qc, isl_dim_out, d, 1); - qc = isl_map_compute_divs(qc); - qc = compose(map, i, qc, (comp & LEFT) ? left : NULL, - (comp & RIGHT) ? right : NULL); - if (!qc) - goto error; - if (qc->n >= map->n) { - isl_map_free(qc); - continue; - } - res = compute_incremental(isl_dim_copy(dim), map, i, qc, - (comp & LEFT) ? left : NULL, - (comp & RIGHT) ? right : NULL, &exact_i); - if (!res) - goto error; - if (exact_i) - break; - isl_map_free(res); - res = NULL; - } - - for (i = 0; i < map->n; ++i) { - isl_set_free(dom[i]); - isl_set_free(ran[i]); - } - free(dom); - free(ran); - free(left); - free(right); - - if (res) { - isl_dim_free(dim); - return res; - } - - return construct_projected_component(dim, map, exact, project); -error: - if (dom) - for (i = 0; i < map->n; ++i) - isl_set_free(dom[i]); - free(dom); - if (ran) - for (i = 0; i < map->n; ++i) - isl_set_free(ran[i]); - free(ran); - free(left); - free(right); - isl_dim_free(dim); - return NULL; -} - -/* Given an array of sets "set", add "dom" at position "pos" - * and search for elements at earlier positions that overlap with "dom". - * If any can be found, then merge all of them, together with "dom", into - * a single set and assign the union to the first in the array, - * which becomes the new group leader for all groups involved in the merge. - * During the search, we only consider group leaders, i.e., those with - * group[i] = i, as the other sets have already been combined - * with one of the group leaders. - */ -static int merge(isl_set **set, int *group, __isl_take isl_set *dom, int pos) -{ - int i; - - group[pos] = pos; - set[pos] = isl_set_copy(dom); - - for (i = pos - 1; i >= 0; --i) { - int o; - - if (group[i] != i) - continue; - - o = isl_set_overlaps(set[i], dom); - if (o < 0) - goto error; - if (!o) - continue; - - set[i] = isl_set_union(set[i], set[group[pos]]); - set[group[pos]] = NULL; - if (!set[i]) - goto error; - group[group[pos]] = i; - group[pos] = i; - } - - isl_set_free(dom); - return 0; -error: - isl_set_free(dom); - return -1; -} - -/* Replace each entry in the n by n grid of maps by the cross product - * with the relation { [i] -> [i + 1] }. - */ -static int add_length(__isl_keep isl_map *map, isl_map ***grid, int n) -{ - int i, j, k; - isl_dim *dim; - isl_basic_map *bstep; - isl_map *step; - unsigned nparam; - - if (!map) - return -1; - - dim = isl_map_get_dim(map); - nparam = isl_dim_size(dim, isl_dim_param); - dim = isl_dim_drop(dim, isl_dim_in, 0, isl_dim_size(dim, isl_dim_in)); - dim = isl_dim_drop(dim, isl_dim_out, 0, isl_dim_size(dim, isl_dim_out)); - dim = isl_dim_add(dim, isl_dim_in, 1); - dim = isl_dim_add(dim, isl_dim_out, 1); - bstep = isl_basic_map_alloc_dim(dim, 0, 1, 0); - k = isl_basic_map_alloc_equality(bstep); - if (k < 0) { - isl_basic_map_free(bstep); - return -1; - } - isl_seq_clr(bstep->eq[k], 1 + isl_basic_map_total_dim(bstep)); - isl_int_set_si(bstep->eq[k][0], 1); - isl_int_set_si(bstep->eq[k][1 + nparam], 1); - isl_int_set_si(bstep->eq[k][1 + nparam + 1], -1); - bstep = isl_basic_map_finalize(bstep); - step = isl_map_from_basic_map(bstep); - - for (i = 0; i < n; ++i) - for (j = 0; j < n; ++j) - grid[i][j] = isl_map_product(grid[i][j], - isl_map_copy(step)); - - isl_map_free(step); - - return 0; -} - -/* The core of the Floyd-Warshall algorithm. - * Updates the given n x x matrix of relations in place. - * - * The algorithm iterates over all vertices. In each step, the whole - * matrix is updated to include all paths that go to the current vertex, - * possibly stay there a while (including passing through earlier vertices) - * and then come back. At the start of each iteration, the diagonal - * element corresponding to the current vertex is replaced by its - * transitive closure to account for all indirect paths that stay - * in the current vertex. - */ -static void floyd_warshall_iterate(isl_map ***grid, int n, int *exact) -{ - int r, p, q; - - for (r = 0; r < n; ++r) { - int r_exact; - grid[r][r] = isl_map_transitive_closure(grid[r][r], - (exact && *exact) ? &r_exact : NULL); - if (exact && *exact && !r_exact) - *exact = 0; - - for (p = 0; p < n; ++p) - for (q = 0; q < n; ++q) { - isl_map *loop; - if (p == r && q == r) - continue; - loop = isl_map_apply_range( - isl_map_copy(grid[p][r]), - isl_map_copy(grid[r][q])); - grid[p][q] = isl_map_union(grid[p][q], loop); - loop = isl_map_apply_range( - isl_map_copy(grid[p][r]), - isl_map_apply_range( - isl_map_copy(grid[r][r]), - isl_map_copy(grid[r][q]))); - grid[p][q] = isl_map_union(grid[p][q], loop); - grid[p][q] = isl_map_coalesce(grid[p][q]); - } - } -} - -/* Given a partition of the domains and ranges of the basic maps in "map", - * apply the Floyd-Warshall algorithm with the elements in the partition - * as vertices. - * - * In particular, there are "n" elements in the partition and "group" is - * an array of length 2 * map->n with entries in [0,n-1]. - * - * We first construct a matrix of relations based on the partition information, - * apply Floyd-Warshall on this matrix of relations and then take the - * union of all entries in the matrix as the final result. - * - * If we are actually computing the power instead of the transitive closure, - * i.e., when "project" is not set, then the result should have the - * path lengths encoded as the difference between an extra pair of - * coordinates. We therefore apply the nested transitive closures - * to relations that include these lengths. In particular, we replace - * the input relation by the cross product with the unit length relation - * { [i] -> [i + 1] }. - */ -static __isl_give isl_map *floyd_warshall_with_groups(__isl_take isl_dim *dim, - __isl_keep isl_map *map, int *exact, int project, int *group, int n) -{ - int i, j, k; - isl_map ***grid = NULL; - isl_map *app; - - if (!map) - goto error; - - if (n == 1) { - free(group); - return incremental_closure(dim, map, exact, project); - } - - grid = isl_calloc_array(map->ctx, isl_map **, n); - if (!grid) - goto error; - for (i = 0; i < n; ++i) { - grid[i] = isl_calloc_array(map->ctx, isl_map *, n); - if (!grid[i]) - goto error; - for (j = 0; j < n; ++j) - grid[i][j] = isl_map_empty(isl_map_get_dim(map)); - } - - for (k = 0; k < map->n; ++k) { - i = group[2 * k]; - j = group[2 * k + 1]; - grid[i][j] = isl_map_union(grid[i][j], - isl_map_from_basic_map( - isl_basic_map_copy(map->p[k]))); - } - - if (!project && add_length(map, grid, n) < 0) - goto error; - - floyd_warshall_iterate(grid, n, exact); - - app = isl_map_empty(isl_map_get_dim(map)); - - for (i = 0; i < n; ++i) { - for (j = 0; j < n; ++j) - app = isl_map_union(app, grid[i][j]); - free(grid[i]); - } - free(grid); - - free(group); - isl_dim_free(dim); - - return app; -error: - if (grid) - for (i = 0; i < n; ++i) { - if (!grid[i]) - continue; - for (j = 0; j < n; ++j) - isl_map_free(grid[i][j]); - free(grid[i]); - } - free(grid); - free(group); - isl_dim_free(dim); - return NULL; -} - -/* Partition the domains and ranges of the n basic relations in list - * into disjoint cells. - * - * To find the partition, we simply consider all of the domains - * and ranges in turn and combine those that overlap. - * "set" contains the partition elements and "group" indicates - * to which partition element a given domain or range belongs. - * The domain of basic map i corresponds to element 2 * i in these arrays, - * while the domain corresponds to element 2 * i + 1. - * During the construction group[k] is either equal to k, - * in which case set[k] contains the union of all the domains and - * ranges in the corresponding group, or is equal to some l < k, - * with l another domain or range in the same group. - */ -static int *setup_groups(isl_ctx *ctx, __isl_keep isl_basic_map **list, int n, - isl_set ***set, int *n_group) -{ - int i; - int *group = NULL; - int g; - - *set = isl_calloc_array(ctx, isl_set *, 2 * n); - group = isl_alloc_array(ctx, int, 2 * n); - - if (!*set || !group) - goto error; - - for (i = 0; i < n; ++i) { - isl_set *dom; - dom = isl_set_from_basic_set(isl_basic_map_domain( - isl_basic_map_copy(list[i]))); - if (merge(*set, group, dom, 2 * i) < 0) - goto error; - dom = isl_set_from_basic_set(isl_basic_map_range( - isl_basic_map_copy(list[i]))); - if (merge(*set, group, dom, 2 * i + 1) < 0) - goto error; - } - - g = 0; - for (i = 0; i < 2 * n; ++i) - if (group[i] == i) { - if (g != i) { - (*set)[g] = (*set)[i]; - (*set)[i] = NULL; - } - group[i] = g++; - } else - group[i] = group[group[i]]; - - *n_group = g; - - return group; -error: - if (*set) { - for (i = 0; i < 2 * n; ++i) - isl_set_free((*set)[i]); - free(*set); - *set = NULL; - } - free(group); - return NULL; -} - -/* Check if the domains and ranges of the basic maps in "map" can - * be partitioned, and if so, apply Floyd-Warshall on the elements - * of the partition. Note that we also apply this algorithm - * if we want to compute the power, i.e., when "project" is not set. - * However, the results are unlikely to be exact since the recursive - * calls inside the Floyd-Warshall algorithm typically result in - * non-linear path lengths quite quickly. - */ -static __isl_give isl_map *floyd_warshall(__isl_take isl_dim *dim, - __isl_keep isl_map *map, int *exact, int project) -{ - int i; - isl_set **set = NULL; - int *group = NULL; - int n; - - if (!map) - goto error; - if (map->n <= 1) - return incremental_closure(dim, map, exact, project); - - group = setup_groups(map->ctx, map->p, map->n, &set, &n); - if (!group) - goto error; - - for (i = 0; i < 2 * map->n; ++i) - isl_set_free(set[i]); - - free(set); - - return floyd_warshall_with_groups(dim, map, exact, project, group, n); -error: - isl_dim_free(dim); - return NULL; -} - -/* Structure for representing the nodes in the graph being traversed - * using Tarjan's algorithm. - * index represents the order in which nodes are visited. - * min_index is the index of the root of a (sub)component. - * on_stack indicates whether the node is currently on the stack. - */ -struct basic_map_sort_node { - int index; - int min_index; - int on_stack; -}; -/* Structure for representing the graph being traversed - * using Tarjan's algorithm. - * len is the number of nodes - * node is an array of nodes - * stack contains the nodes on the path from the root to the current node - * sp is the stack pointer - * index is the index of the last node visited - * order contains the elements of the components separated by -1 - * op represents the current position in order - * - * check_closed is set if we may have used the fact that - * a pair of basic maps can be interchanged - */ -struct basic_map_sort { - int len; - struct basic_map_sort_node *node; - int *stack; - int sp; - int index; - int *order; - int op; - int check_closed; -}; - -static void basic_map_sort_free(struct basic_map_sort *s) -{ - if (!s) - return; - free(s->node); - free(s->stack); - free(s->order); - free(s); -} - -static struct basic_map_sort *basic_map_sort_alloc(struct isl_ctx *ctx, int len) -{ - struct basic_map_sort *s; - int i; - - s = isl_calloc_type(ctx, struct basic_map_sort); - if (!s) - return NULL; - s->len = len; - s->node = isl_alloc_array(ctx, struct basic_map_sort_node, len); - if (!s->node) - goto error; - for (i = 0; i < len; ++i) - s->node[i].index = -1; - s->stack = isl_alloc_array(ctx, int, len); - if (!s->stack) - goto error; - s->order = isl_alloc_array(ctx, int, 2 * len); - if (!s->order) - goto error; - - s->sp = 0; - s->index = 0; - s->op = 0; - - s->check_closed = 0; - - return s; -error: - basic_map_sort_free(s); - return NULL; -} - -/* Check whether in the computation of the transitive closure - * "bmap1" (R_1) should follow (or be part of the same component as) - * "bmap2" (R_2). - * - * That is check whether - * - * R_1 \circ R_2 - * - * is a subset of - * - * R_2 \circ R_1 - * - * If so, then there is no reason for R_1 to immediately follow R_2 - * in any path. - * - * *check_closed is set if the subset relation holds while - * R_1 \circ R_2 is not empty. - */ -static int basic_map_follows(__isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2, int *check_closed) -{ - struct isl_map *map12 = NULL; - struct isl_map *map21 = NULL; - int subset; - - if (!isl_dim_tuple_match(bmap1->dim, isl_dim_in, bmap2->dim, isl_dim_out)) - return 0; - - map21 = isl_map_from_basic_map( - isl_basic_map_apply_range( - isl_basic_map_copy(bmap2), - isl_basic_map_copy(bmap1))); - subset = isl_map_is_empty(map21); - if (subset < 0) - goto error; - if (subset) { - isl_map_free(map21); - return 0; - } - - if (!isl_dim_tuple_match(bmap1->dim, isl_dim_in, bmap1->dim, isl_dim_out) || - !isl_dim_tuple_match(bmap2->dim, isl_dim_in, bmap2->dim, isl_dim_out)) { - isl_map_free(map21); - return 1; - } - - map12 = isl_map_from_basic_map( - isl_basic_map_apply_range( - isl_basic_map_copy(bmap1), - isl_basic_map_copy(bmap2))); - - subset = isl_map_is_subset(map21, map12); - - isl_map_free(map12); - isl_map_free(map21); - - if (subset) - *check_closed = 1; - - return subset < 0 ? -1 : !subset; -error: - isl_map_free(map21); - return -1; -} - -/* Perform Tarjan's algorithm for computing the strongly connected components - * in the graph with the disjuncts of "map" as vertices and with an - * edge between any pair of disjuncts such that the first has - * to be applied after the second. - */ -static int power_components_tarjan(struct basic_map_sort *s, - __isl_keep isl_basic_map **list, int i) -{ - int j; - - s->node[i].index = s->index; - s->node[i].min_index = s->index; - s->node[i].on_stack = 1; - s->index++; - s->stack[s->sp++] = i; - - for (j = s->len - 1; j >= 0; --j) { - int f; - - if (j == i) - continue; - if (s->node[j].index >= 0 && - (!s->node[j].on_stack || - s->node[j].index > s->node[i].min_index)) - continue; - - f = basic_map_follows(list[i], list[j], &s->check_closed); - if (f < 0) - return -1; - if (!f) - continue; - - if (s->node[j].index < 0) { - power_components_tarjan(s, list, j); - if (s->node[j].min_index < s->node[i].min_index) - s->node[i].min_index = s->node[j].min_index; - } else if (s->node[j].index < s->node[i].min_index) - s->node[i].min_index = s->node[j].index; - } - - if (s->node[i].index != s->node[i].min_index) - return 0; - - do { - j = s->stack[--s->sp]; - s->node[j].on_stack = 0; - s->order[s->op++] = j; - } while (j != i); - s->order[s->op++] = -1; - - return 0; -} - -/* Decompose the "len" basic relations in "list" into strongly connected - * components. - */ -static struct basic_map_sort *basic_map_sort_init(isl_ctx *ctx, int len, - __isl_keep isl_basic_map **list) -{ - int i; - struct basic_map_sort *s = NULL; - - s = basic_map_sort_alloc(ctx, len); - if (!s) - return NULL; - for (i = len - 1; i >= 0; --i) { - if (s->node[i].index >= 0) - continue; - if (power_components_tarjan(s, list, i) < 0) - goto error; - } - - return s; -error: - basic_map_sort_free(s); - return NULL; -} - -/* Given a union of basic maps R = \cup_i R_i \subseteq D \times D - * and a dimension specification (Z^{n+1} -> Z^{n+1}), - * construct a map that is an overapproximation of the map - * that takes an element from the dom R \times Z to an - * element from ran R \times Z, such that the first n coordinates of the - * difference between them is a sum of differences between images - * and pre-images in one of the R_i and such that the last coordinate - * is equal to the number of steps taken. - * If "project" is set, then these final coordinates are not included, - * i.e., a relation of type Z^n -> Z^n is returned. - * That is, let - * - * \Delta_i = { y - x | (x, y) in R_i } - * - * then the constructed map is an overapproximation of - * - * { (x) -> (x + d) | \exists k_i >= 0, \delta_i \in \Delta_i : - * d = (\sum_i k_i \delta_i, \sum_i k_i) and - * x in dom R and x + d in ran R } - * - * or - * - * { (x) -> (x + d) | \exists k_i >= 0, \delta_i \in \Delta_i : - * d = (\sum_i k_i \delta_i) and - * x in dom R and x + d in ran R } - * - * if "project" is set. - * - * We first split the map into strongly connected components, perform - * the above on each component and then join the results in the correct - * order, at each join also taking in the union of both arguments - * to allow for paths that do not go through one of the two arguments. - */ -static __isl_give isl_map *construct_power_components(__isl_take isl_dim *dim, - __isl_keep isl_map *map, int *exact, int project) -{ - int i, n, c; - struct isl_map *path = NULL; - struct basic_map_sort *s = NULL; - int *orig_exact; - int local_exact; - - if (!map) - goto error; - if (map->n <= 1) - return floyd_warshall(dim, map, exact, project); - - s = basic_map_sort_init(map->ctx, map->n, map->p); - if (!s) - goto error; - - orig_exact = exact; - if (s->check_closed && !exact) - exact = &local_exact; - - c = 0; - i = 0; - n = map->n; - if (project) - path = isl_map_empty(isl_map_get_dim(map)); - else - path = isl_map_empty(isl_dim_copy(dim)); - path = anonymize(path); - while (n) { - struct isl_map *comp; - isl_map *path_comp, *path_comb; - comp = isl_map_alloc_dim(isl_map_get_dim(map), n, 0); - while (s->order[i] != -1) { - comp = isl_map_add_basic_map(comp, - isl_basic_map_copy(map->p[s->order[i]])); - --n; - ++i; - } - path_comp = floyd_warshall(isl_dim_copy(dim), - comp, exact, project); - path_comp = anonymize(path_comp); - path_comb = isl_map_apply_range(isl_map_copy(path), - isl_map_copy(path_comp)); - path = isl_map_union(path, path_comp); - path = isl_map_union(path, path_comb); - isl_map_free(comp); - ++i; - ++c; - } - - if (c > 1 && s->check_closed && !*exact) { - int closed; - - closed = isl_map_is_transitively_closed(path); - if (closed < 0) - goto error; - if (!closed) { - basic_map_sort_free(s); - isl_map_free(path); - return floyd_warshall(dim, map, orig_exact, project); - } - } - - basic_map_sort_free(s); - isl_dim_free(dim); - - return path; -error: - basic_map_sort_free(s); - isl_dim_free(dim); - isl_map_free(path); - return NULL; -} - -/* Given a union of basic maps R = \cup_i R_i \subseteq D \times D, - * construct a map that is an overapproximation of the map - * that takes an element from the space D to another - * element from the same space, such that the difference between - * them is a strictly positive sum of differences between images - * and pre-images in one of the R_i. - * The number of differences in the sum is equated to parameter "param". - * That is, let - * - * \Delta_i = { y - x | (x, y) in R_i } - * - * then the constructed map is an overapproximation of - * - * { (x) -> (x + d) | \exists k_i >= 0, \delta_i \in \Delta_i : - * d = \sum_i k_i \delta_i and k = \sum_i k_i > 0 } - * or - * - * { (x) -> (x + d) | \exists k_i >= 0, \delta_i \in \Delta_i : - * d = \sum_i k_i \delta_i and \sum_i k_i > 0 } - * - * if "project" is set. - * - * If "project" is not set, then - * we construct an extended mapping with an extra coordinate - * that indicates the number of steps taken. In particular, - * the difference in the last coordinate is equal to the number - * of steps taken to move from a domain element to the corresponding - * image element(s). - */ -static __isl_give isl_map *construct_power(__isl_keep isl_map *map, - int *exact, int project) -{ - struct isl_map *app = NULL; - struct isl_dim *dim = NULL; - unsigned d; - - if (!map) - return NULL; - - dim = isl_map_get_dim(map); - - d = isl_dim_size(dim, isl_dim_in); - dim = isl_dim_add(dim, isl_dim_in, 1); - dim = isl_dim_add(dim, isl_dim_out, 1); - - app = construct_power_components(isl_dim_copy(dim), map, - exact, project); - - isl_dim_free(dim); - - return app; -} - -/* Compute the positive powers of "map", or an overapproximation. - * If the result is exact, then *exact is set to 1. - * - * If project is set, then we are actually interested in the transitive - * closure, so we can use a more relaxed exactness check. - * The lengths of the paths are also projected out instead of being - * encoded as the difference between an extra pair of final coordinates. - */ -static __isl_give isl_map *map_power(__isl_take isl_map *map, - int *exact, int project) -{ - struct isl_map *app = NULL; - - if (exact) - *exact = 1; - - if (!map) - return NULL; - - isl_assert(map->ctx, - isl_map_dim(map, isl_dim_in) == isl_map_dim(map, isl_dim_out), - goto error); - - app = construct_power(map, exact, project); - - isl_map_free(map); - return app; -error: - isl_map_free(map); - isl_map_free(app); - return NULL; -} - -/* Compute the positive powers of "map", or an overapproximation. - * The result maps the exponent to a nested copy of the corresponding power. - * If the result is exact, then *exact is set to 1. - * map_power constructs an extended relation with the path lengths - * encoded as the difference between the final coordinates. - * In the final step, this difference is equated to an extra parameter - * and made positive. The extra coordinates are subsequently projected out - * and the parameter is turned into the domain of the result. - */ -__isl_give isl_map *isl_map_power(__isl_take isl_map *map, int *exact) -{ - isl_dim *target_dim; - isl_dim *dim; - isl_map *diff; - unsigned d; - unsigned param; - - if (!map) - return NULL; - - d = isl_map_dim(map, isl_dim_in); - param = isl_map_dim(map, isl_dim_param); - - map = isl_map_compute_divs(map); - map = isl_map_coalesce(map); - - if (isl_map_plain_is_empty(map)) { - map = isl_map_from_range(isl_map_wrap(map)); - map = isl_map_add_dims(map, isl_dim_in, 1); - map = isl_map_set_dim_name(map, isl_dim_in, 0, "k"); - return map; - } - - target_dim = isl_map_get_dim(map); - target_dim = isl_dim_from_range(isl_dim_wrap(target_dim)); - target_dim = isl_dim_add(target_dim, isl_dim_in, 1); - target_dim = isl_dim_set_name(target_dim, isl_dim_in, 0, "k"); - - map = map_power(map, exact, 0); - - map = isl_map_add_dims(map, isl_dim_param, 1); - dim = isl_map_get_dim(map); - diff = equate_parameter_to_length(dim, param); - map = isl_map_intersect(map, diff); - map = isl_map_project_out(map, isl_dim_in, d, 1); - map = isl_map_project_out(map, isl_dim_out, d, 1); - map = isl_map_from_range(isl_map_wrap(map)); - map = isl_map_move_dims(map, isl_dim_in, 0, isl_dim_param, param, 1); - - map = isl_map_reset_dim(map, target_dim); - - return map; -} - -/* Compute a relation that maps each element in the range of the input - * relation to the lengths of all paths composed of edges in the input - * relation that end up in the given range element. - * The result may be an overapproximation, in which case *exact is set to 0. - * The resulting relation is very similar to the power relation. - * The difference are that the domain has been projected out, the - * range has become the domain and the exponent is the range instead - * of a parameter. - */ -__isl_give isl_map *isl_map_reaching_path_lengths(__isl_take isl_map *map, - int *exact) -{ - isl_dim *dim; - isl_map *diff; - unsigned d; - unsigned param; - - if (!map) - return NULL; - - d = isl_map_dim(map, isl_dim_in); - param = isl_map_dim(map, isl_dim_param); - - map = isl_map_compute_divs(map); - map = isl_map_coalesce(map); - - if (isl_map_plain_is_empty(map)) { - if (exact) - *exact = 1; - map = isl_map_project_out(map, isl_dim_out, 0, d); - map = isl_map_add_dims(map, isl_dim_out, 1); - return map; - } - - map = map_power(map, exact, 0); - - map = isl_map_add_dims(map, isl_dim_param, 1); - dim = isl_map_get_dim(map); - diff = equate_parameter_to_length(dim, param); - map = isl_map_intersect(map, diff); - map = isl_map_project_out(map, isl_dim_in, 0, d + 1); - map = isl_map_project_out(map, isl_dim_out, d, 1); - map = isl_map_reverse(map); - map = isl_map_move_dims(map, isl_dim_out, 0, isl_dim_param, param, 1); - - return map; -} - -/* Check whether equality i of bset is a pure stride constraint - * on a single dimensions, i.e., of the form - * - * v = k e - * - * with k a constant and e an existentially quantified variable. - */ -static int is_eq_stride(__isl_keep isl_basic_set *bset, int i) -{ - unsigned nparam; - unsigned d; - unsigned n_div; - int pos1; - int pos2; - - if (!bset) - return -1; - - if (!isl_int_is_zero(bset->eq[i][0])) - return 0; - - nparam = isl_basic_set_dim(bset, isl_dim_param); - d = isl_basic_set_dim(bset, isl_dim_set); - n_div = isl_basic_set_dim(bset, isl_dim_div); - - if (isl_seq_first_non_zero(bset->eq[i] + 1, nparam) != -1) - return 0; - pos1 = isl_seq_first_non_zero(bset->eq[i] + 1 + nparam, d); - if (pos1 == -1) - return 0; - if (isl_seq_first_non_zero(bset->eq[i] + 1 + nparam + pos1 + 1, - d - pos1 - 1) != -1) - return 0; - - pos2 = isl_seq_first_non_zero(bset->eq[i] + 1 + nparam + d, n_div); - if (pos2 == -1) - return 0; - if (isl_seq_first_non_zero(bset->eq[i] + 1 + nparam + d + pos2 + 1, - n_div - pos2 - 1) != -1) - return 0; - if (!isl_int_is_one(bset->eq[i][1 + nparam + pos1]) && - !isl_int_is_negone(bset->eq[i][1 + nparam + pos1])) - return 0; - - return 1; -} - -/* Given a map, compute the smallest superset of this map that is of the form - * - * { i -> j : L <= j - i <= U and exists a_p: j_p - i_p = M_p a_p } - * - * (where p ranges over the (non-parametric) dimensions), - * compute the transitive closure of this map, i.e., - * - * { i -> j : exists k > 0: - * k L <= j - i <= k U and exists a: j_p - i_p = M_p a_p } - * - * and intersect domain and range of this transitive closure with - * the given domain and range. - * - * If with_id is set, then try to include as much of the identity mapping - * as possible, by computing - * - * { i -> j : exists k >= 0: - * k L <= j - i <= k U and exists a: j_p - i_p = M_p a_p } - * - * instead (i.e., allow k = 0). - * - * In practice, we compute the difference set - * - * delta = { j - i | i -> j in map }, - * - * look for stride constraint on the individual dimensions and compute - * (constant) lower and upper bounds for each individual dimension, - * adding a constraint for each bound not equal to infinity. - */ -static __isl_give isl_map *box_closure_on_domain(__isl_take isl_map *map, - __isl_take isl_set *dom, __isl_take isl_set *ran, int with_id) -{ - int i; - int k; - unsigned d; - unsigned nparam; - unsigned total; - isl_dim *dim; - isl_set *delta; - isl_map *app = NULL; - isl_basic_set *aff = NULL; - isl_basic_map *bmap = NULL; - isl_vec *obj = NULL; - isl_int opt; - - isl_int_init(opt); - - delta = isl_map_deltas(isl_map_copy(map)); - - aff = isl_set_affine_hull(isl_set_copy(delta)); - if (!aff) - goto error; - dim = isl_map_get_dim(map); - d = isl_dim_size(dim, isl_dim_in); - nparam = isl_dim_size(dim, isl_dim_param); - total = isl_dim_total(dim); - bmap = isl_basic_map_alloc_dim(dim, - aff->n_div + 1, aff->n_div, 2 * d + 1); - for (i = 0; i < aff->n_div + 1; ++i) { - k = isl_basic_map_alloc_div(bmap); - if (k < 0) - goto error; - isl_int_set_si(bmap->div[k][0], 0); - } - for (i = 0; i < aff->n_eq; ++i) { - if (!is_eq_stride(aff, i)) - continue; - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->eq[k], 1 + nparam); - isl_seq_cpy(bmap->eq[k] + 1 + nparam + d, - aff->eq[i] + 1 + nparam, d); - isl_seq_neg(bmap->eq[k] + 1 + nparam, - aff->eq[i] + 1 + nparam, d); - isl_seq_cpy(bmap->eq[k] + 1 + nparam + 2 * d, - aff->eq[i] + 1 + nparam + d, aff->n_div); - isl_int_set_si(bmap->eq[k][1 + total + aff->n_div], 0); - } - obj = isl_vec_alloc(map->ctx, 1 + nparam + d); - if (!obj) - goto error; - isl_seq_clr(obj->el, 1 + nparam + d); - for (i = 0; i < d; ++ i) { - enum isl_lp_result res; - - isl_int_set_si(obj->el[1 + nparam + i], 1); - - res = isl_set_solve_lp(delta, 0, obj->el, map->ctx->one, &opt, - NULL, NULL); - if (res == isl_lp_error) - goto error; - if (res == isl_lp_ok) { - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->ineq[k], - 1 + nparam + 2 * d + bmap->n_div); - isl_int_set_si(bmap->ineq[k][1 + nparam + i], -1); - isl_int_set_si(bmap->ineq[k][1 + nparam + d + i], 1); - isl_int_neg(bmap->ineq[k][1 + nparam + 2 * d + aff->n_div], opt); - } - - res = isl_set_solve_lp(delta, 1, obj->el, map->ctx->one, &opt, - NULL, NULL); - if (res == isl_lp_error) - goto error; - if (res == isl_lp_ok) { - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->ineq[k], - 1 + nparam + 2 * d + bmap->n_div); - isl_int_set_si(bmap->ineq[k][1 + nparam + i], 1); - isl_int_set_si(bmap->ineq[k][1 + nparam + d + i], -1); - isl_int_set(bmap->ineq[k][1 + nparam + 2 * d + aff->n_div], opt); - } - - isl_int_set_si(obj->el[1 + nparam + i], 0); - } - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->ineq[k], - 1 + nparam + 2 * d + bmap->n_div); - if (!with_id) - isl_int_set_si(bmap->ineq[k][0], -1); - isl_int_set_si(bmap->ineq[k][1 + nparam + 2 * d + aff->n_div], 1); - - app = isl_map_from_domain_and_range(dom, ran); - - isl_vec_free(obj); - isl_basic_set_free(aff); - isl_map_free(map); - bmap = isl_basic_map_finalize(bmap); - isl_set_free(delta); - isl_int_clear(opt); - - map = isl_map_from_basic_map(bmap); - map = isl_map_intersect(map, app); - - return map; -error: - isl_vec_free(obj); - isl_basic_map_free(bmap); - isl_basic_set_free(aff); - isl_set_free(dom); - isl_set_free(ran); - isl_map_free(map); - isl_set_free(delta); - isl_int_clear(opt); - return NULL; -} - -/* Given a map, compute the smallest superset of this map that is of the form - * - * { i -> j : L <= j - i <= U and exists a_p: j_p - i_p = M_p a_p } - * - * (where p ranges over the (non-parametric) dimensions), - * compute the transitive closure of this map, i.e., - * - * { i -> j : exists k > 0: - * k L <= j - i <= k U and exists a: j_p - i_p = M_p a_p } - * - * and intersect domain and range of this transitive closure with - * domain and range of the original map. - */ -static __isl_give isl_map *box_closure(__isl_take isl_map *map) -{ - isl_set *domain; - isl_set *range; - - domain = isl_map_domain(isl_map_copy(map)); - domain = isl_set_coalesce(domain); - range = isl_map_range(isl_map_copy(map)); - range = isl_set_coalesce(range); - - return box_closure_on_domain(map, domain, range, 0); -} - -/* Given a map, compute the smallest superset of this map that is of the form - * - * { i -> j : L <= j - i <= U and exists a_p: j_p - i_p = M_p a_p } - * - * (where p ranges over the (non-parametric) dimensions), - * compute the transitive and partially reflexive closure of this map, i.e., - * - * { i -> j : exists k >= 0: - * k L <= j - i <= k U and exists a: j_p - i_p = M_p a_p } - * - * and intersect domain and range of this transitive closure with - * the given domain. - */ -static __isl_give isl_map *box_closure_with_identity(__isl_take isl_map *map, - __isl_take isl_set *dom) -{ - return box_closure_on_domain(map, dom, isl_set_copy(dom), 1); -} - -/* Check whether app is the transitive closure of map. - * In particular, check that app is acyclic and, if so, - * check that - * - * app \subset (map \cup (map \circ app)) - */ -static int check_exactness_omega(__isl_keep isl_map *map, - __isl_keep isl_map *app) -{ - isl_set *delta; - int i; - int is_empty, is_exact; - unsigned d; - isl_map *test; - - delta = isl_map_deltas(isl_map_copy(app)); - d = isl_set_dim(delta, isl_dim_set); - for (i = 0; i < d; ++i) - delta = isl_set_fix_si(delta, isl_dim_set, i, 0); - is_empty = isl_set_is_empty(delta); - isl_set_free(delta); - if (is_empty < 0) - return -1; - if (!is_empty) - return 0; - - test = isl_map_apply_range(isl_map_copy(app), isl_map_copy(map)); - test = isl_map_union(test, isl_map_copy(map)); - is_exact = isl_map_is_subset(app, test); - isl_map_free(test); - - return is_exact; -} - -/* Check if basic map M_i can be combined with all the other - * basic maps such that - * - * (\cup_j M_j)^+ - * - * can be computed as - * - * M_i \cup (\cup_{j \ne i} M_i^* \circ M_j \circ M_i^*)^+ - * - * In particular, check if we can compute a compact representation - * of - * - * M_i^* \circ M_j \circ M_i^* - * - * for each j != i. - * Let M_i^? be an extension of M_i^+ that allows paths - * of length zero, i.e., the result of box_closure(., 1). - * The criterion, as proposed by Kelly et al., is that - * id = M_i^? - M_i^+ can be represented as a basic map - * and that - * - * id \circ M_j \circ id = M_j - * - * for each j != i. - * - * If this function returns 1, then tc and qc are set to - * M_i^+ and M_i^?, respectively. - */ -static int can_be_split_off(__isl_keep isl_map *map, int i, - __isl_give isl_map **tc, __isl_give isl_map **qc) -{ - isl_map *map_i, *id = NULL; - int j = -1; - isl_set *C; - - *tc = NULL; - *qc = NULL; - - C = isl_set_union(isl_map_domain(isl_map_copy(map)), - isl_map_range(isl_map_copy(map))); - C = isl_set_from_basic_set(isl_set_simple_hull(C)); - if (!C) - goto error; - - map_i = isl_map_from_basic_map(isl_basic_map_copy(map->p[i])); - *tc = box_closure(isl_map_copy(map_i)); - *qc = box_closure_with_identity(map_i, C); - id = isl_map_subtract(isl_map_copy(*qc), isl_map_copy(*tc)); - - if (!id || !*qc) - goto error; - if (id->n != 1 || (*qc)->n != 1) - goto done; - - for (j = 0; j < map->n; ++j) { - isl_map *map_j, *test; - int is_ok; - - if (i == j) - continue; - map_j = isl_map_from_basic_map( - isl_basic_map_copy(map->p[j])); - test = isl_map_apply_range(isl_map_copy(id), - isl_map_copy(map_j)); - test = isl_map_apply_range(test, isl_map_copy(id)); - is_ok = isl_map_is_equal(test, map_j); - isl_map_free(map_j); - isl_map_free(test); - if (is_ok < 0) - goto error; - if (!is_ok) - break; - } - -done: - isl_map_free(id); - if (j == map->n) - return 1; - - isl_map_free(*qc); - isl_map_free(*tc); - *qc = NULL; - *tc = NULL; - - return 0; -error: - isl_map_free(id); - isl_map_free(*qc); - isl_map_free(*tc); - *qc = NULL; - *tc = NULL; - return -1; -} - -static __isl_give isl_map *box_closure_with_check(__isl_take isl_map *map, - int *exact) -{ - isl_map *app; - - app = box_closure(isl_map_copy(map)); - if (exact) - *exact = check_exactness_omega(map, app); - - isl_map_free(map); - return app; -} - -/* Compute an overapproximation of the transitive closure of "map" - * using a variation of the algorithm from - * "Transitive Closure of Infinite Graphs and its Applications" - * by Kelly et al. - * - * We first check whether we can can split of any basic map M_i and - * compute - * - * (\cup_j M_j)^+ - * - * as - * - * M_i \cup (\cup_{j \ne i} M_i^* \circ M_j \circ M_i^*)^+ - * - * using a recursive call on the remaining map. - * - * If not, we simply call box_closure on the whole map. - */ -static __isl_give isl_map *transitive_closure_omega(__isl_take isl_map *map, - int *exact) -{ - int i, j; - int exact_i; - isl_map *app; - - if (!map) - return NULL; - if (map->n == 1) - return box_closure_with_check(map, exact); - - for (i = 0; i < map->n; ++i) { - int ok; - isl_map *qc, *tc; - ok = can_be_split_off(map, i, &tc, &qc); - if (ok < 0) - goto error; - if (!ok) - continue; - - app = isl_map_alloc_dim(isl_map_get_dim(map), map->n - 1, 0); - - for (j = 0; j < map->n; ++j) { - if (j == i) - continue; - app = isl_map_add_basic_map(app, - isl_basic_map_copy(map->p[j])); - } - - app = isl_map_apply_range(isl_map_copy(qc), app); - app = isl_map_apply_range(app, qc); - - app = isl_map_union(tc, transitive_closure_omega(app, NULL)); - exact_i = check_exactness_omega(map, app); - if (exact_i == 1) { - if (exact) - *exact = exact_i; - isl_map_free(map); - return app; - } - isl_map_free(app); - if (exact_i < 0) - goto error; - } - - return box_closure_with_check(map, exact); -error: - isl_map_free(map); - return NULL; -} - -/* Compute the transitive closure of "map", or an overapproximation. - * If the result is exact, then *exact is set to 1. - * Simply use map_power to compute the powers of map, but tell - * it to project out the lengths of the paths instead of equating - * the length to a parameter. - */ -__isl_give isl_map *isl_map_transitive_closure(__isl_take isl_map *map, - int *exact) -{ - isl_dim *target_dim; - int closed; - - if (!map) - goto error; - - if (map->ctx->opt->closure == ISL_CLOSURE_BOX) - return transitive_closure_omega(map, exact); - - map = isl_map_compute_divs(map); - map = isl_map_coalesce(map); - closed = isl_map_is_transitively_closed(map); - if (closed < 0) - goto error; - if (closed) { - if (exact) - *exact = 1; - return map; - } - - target_dim = isl_map_get_dim(map); - map = map_power(map, exact, 1); - map = isl_map_reset_dim(map, target_dim); - - return map; -error: - isl_map_free(map); - return NULL; -} - -static int inc_count(__isl_take isl_map *map, void *user) -{ - int *n = user; - - *n += map->n; - - isl_map_free(map); - - return 0; -} - -static int collect_basic_map(__isl_take isl_map *map, void *user) -{ - int i; - isl_basic_map ***next = user; - - for (i = 0; i < map->n; ++i) { - **next = isl_basic_map_copy(map->p[i]); - if (!**next) - goto error; - (*next)++; - } - - isl_map_free(map); - return 0; -error: - isl_map_free(map); - return -1; -} - -/* Perform Floyd-Warshall on the given list of basic relations. - * The basic relations may live in different dimensions, - * but basic relations that get assigned to the diagonal of the - * grid have domains and ranges of the same dimension and so - * the standard algorithm can be used because the nested transitive - * closures are only applied to diagonal elements and because all - * compositions are peformed on relations with compatible domains and ranges. - */ -static __isl_give isl_union_map *union_floyd_warshall_on_list(isl_ctx *ctx, - __isl_keep isl_basic_map **list, int n, int *exact) -{ - int i, j, k; - int n_group; - int *group = NULL; - isl_set **set = NULL; - isl_map ***grid = NULL; - isl_union_map *app; - - group = setup_groups(ctx, list, n, &set, &n_group); - if (!group) - goto error; - - grid = isl_calloc_array(ctx, isl_map **, n_group); - if (!grid) - goto error; - for (i = 0; i < n_group; ++i) { - grid[i] = isl_calloc_array(ctx, isl_map *, n_group); - if (!grid[i]) - goto error; - for (j = 0; j < n_group; ++j) { - isl_dim *dim1, *dim2, *dim; - dim1 = isl_dim_reverse(isl_set_get_dim(set[i])); - dim2 = isl_set_get_dim(set[j]); - dim = isl_dim_join(dim1, dim2); - grid[i][j] = isl_map_empty(dim); - } - } - - for (k = 0; k < n; ++k) { - i = group[2 * k]; - j = group[2 * k + 1]; - grid[i][j] = isl_map_union(grid[i][j], - isl_map_from_basic_map( - isl_basic_map_copy(list[k]))); - } - - floyd_warshall_iterate(grid, n_group, exact); - - app = isl_union_map_empty(isl_map_get_dim(grid[0][0])); - - for (i = 0; i < n_group; ++i) { - for (j = 0; j < n_group; ++j) - app = isl_union_map_add_map(app, grid[i][j]); - free(grid[i]); - } - free(grid); - - for (i = 0; i < 2 * n; ++i) - isl_set_free(set[i]); - free(set); - - free(group); - return app; -error: - if (grid) - for (i = 0; i < n_group; ++i) { - if (!grid[i]) - continue; - for (j = 0; j < n_group; ++j) - isl_map_free(grid[i][j]); - free(grid[i]); - } - free(grid); - if (set) { - for (i = 0; i < 2 * n; ++i) - isl_set_free(set[i]); - free(set); - } - free(group); - return NULL; -} - -/* Perform Floyd-Warshall on the given union relation. - * The implementation is very similar to that for non-unions. - * The main difference is that it is applied unconditionally. - * We first extract a list of basic maps from the union map - * and then perform the algorithm on this list. - */ -static __isl_give isl_union_map *union_floyd_warshall( - __isl_take isl_union_map *umap, int *exact) -{ - int i, n; - isl_ctx *ctx; - isl_basic_map **list = NULL; - isl_basic_map **next; - isl_union_map *res; - - n = 0; - if (isl_union_map_foreach_map(umap, inc_count, &n) < 0) - goto error; - - ctx = isl_union_map_get_ctx(umap); - list = isl_calloc_array(ctx, isl_basic_map *, n); - if (!list) - goto error; - - next = list; - if (isl_union_map_foreach_map(umap, collect_basic_map, &next) < 0) - goto error; - - res = union_floyd_warshall_on_list(ctx, list, n, exact); - - if (list) { - for (i = 0; i < n; ++i) - isl_basic_map_free(list[i]); - free(list); - } - - isl_union_map_free(umap); - return res; -error: - if (list) { - for (i = 0; i < n; ++i) - isl_basic_map_free(list[i]); - free(list); - } - isl_union_map_free(umap); - return NULL; -} - -/* Decompose the give union relation into strongly connected components. - * The implementation is essentially the same as that of - * construct_power_components with the major difference that all - * operations are performed on union maps. - */ -static __isl_give isl_union_map *union_components( - __isl_take isl_union_map *umap, int *exact) -{ - int i; - int n; - isl_ctx *ctx; - isl_basic_map **list; - isl_basic_map **next; - isl_union_map *path = NULL; - struct basic_map_sort *s = NULL; - int c, l; - int recheck = 0; - - n = 0; - if (isl_union_map_foreach_map(umap, inc_count, &n) < 0) - goto error; - - if (n <= 1) - return union_floyd_warshall(umap, exact); - - ctx = isl_union_map_get_ctx(umap); - list = isl_calloc_array(ctx, isl_basic_map *, n); - if (!list) - goto error; - - next = list; - if (isl_union_map_foreach_map(umap, collect_basic_map, &next) < 0) - goto error; - - s = basic_map_sort_init(ctx, n, list); - if (!s) - goto error; - - c = 0; - i = 0; - l = n; - path = isl_union_map_empty(isl_union_map_get_dim(umap)); - while (l) { - isl_union_map *comp; - isl_union_map *path_comp, *path_comb; - comp = isl_union_map_empty(isl_union_map_get_dim(umap)); - while (s->order[i] != -1) { - comp = isl_union_map_add_map(comp, - isl_map_from_basic_map( - isl_basic_map_copy(list[s->order[i]]))); - --l; - ++i; - } - path_comp = union_floyd_warshall(comp, exact); - path_comb = isl_union_map_apply_range(isl_union_map_copy(path), - isl_union_map_copy(path_comp)); - path = isl_union_map_union(path, path_comp); - path = isl_union_map_union(path, path_comb); - ++i; - ++c; - } - - if (c > 1 && s->check_closed && !*exact) { - int closed; - - closed = isl_union_map_is_transitively_closed(path); - if (closed < 0) - goto error; - recheck = !closed; - } - - basic_map_sort_free(s); - - for (i = 0; i < n; ++i) - isl_basic_map_free(list[i]); - free(list); - - if (recheck) { - isl_union_map_free(path); - return union_floyd_warshall(umap, exact); - } - - isl_union_map_free(umap); - - return path; -error: - basic_map_sort_free(s); - if (list) { - for (i = 0; i < n; ++i) - isl_basic_map_free(list[i]); - free(list); - } - isl_union_map_free(umap); - isl_union_map_free(path); - return NULL; -} - -/* Compute the transitive closure of "umap", or an overapproximation. - * If the result is exact, then *exact is set to 1. - */ -__isl_give isl_union_map *isl_union_map_transitive_closure( - __isl_take isl_union_map *umap, int *exact) -{ - int closed; - - if (!umap) - return NULL; - - if (exact) - *exact = 1; - - umap = isl_union_map_compute_divs(umap); - umap = isl_union_map_coalesce(umap); - closed = isl_union_map_is_transitively_closed(umap); - if (closed < 0) - goto error; - if (closed) - return umap; - umap = union_components(umap, exact); - return umap; -error: - isl_union_map_free(umap); - return NULL; -} - -struct isl_union_power { - isl_union_map *pow; - int *exact; -}; - -static int power(__isl_take isl_map *map, void *user) -{ - struct isl_union_power *up = user; - - map = isl_map_power(map, up->exact); - up->pow = isl_union_map_from_map(map); - - return -1; -} - -/* Construct a map [x] -> [x+1], with parameters prescribed by "dim". - */ -static __isl_give isl_union_map *increment(__isl_take isl_dim *dim) -{ - int k; - isl_basic_map *bmap; - - dim = isl_dim_add(dim, isl_dim_in, 1); - dim = isl_dim_add(dim, isl_dim_out, 1); - bmap = isl_basic_map_alloc_dim(dim, 0, 1, 0); - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->eq[k], isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->eq[k][0], 1); - isl_int_set_si(bmap->eq[k][isl_basic_map_offset(bmap, isl_dim_in)], 1); - isl_int_set_si(bmap->eq[k][isl_basic_map_offset(bmap, isl_dim_out)], -1); - return isl_union_map_from_map(isl_map_from_basic_map(bmap)); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Construct a map [[x]->[y]] -> [y-x], with parameters prescribed by "dim". - */ -static __isl_give isl_union_map *deltas_map(__isl_take isl_dim *dim) -{ - isl_basic_map *bmap; - - dim = isl_dim_add(dim, isl_dim_in, 1); - dim = isl_dim_add(dim, isl_dim_out, 1); - bmap = isl_basic_map_universe(dim); - bmap = isl_basic_map_deltas_map(bmap); - - return isl_union_map_from_map(isl_map_from_basic_map(bmap)); -} - -/* Compute the positive powers of "map", or an overapproximation. - * The result maps the exponent to a nested copy of the corresponding power. - * If the result is exact, then *exact is set to 1. - */ -__isl_give isl_union_map *isl_union_map_power(__isl_take isl_union_map *umap, - int *exact) -{ - int n; - isl_union_map *inc; - isl_union_map *dm; - - if (!umap) - return NULL; - n = isl_union_map_n_map(umap); - if (n == 0) - return umap; - if (n == 1) { - struct isl_union_power up = { NULL, exact }; - isl_union_map_foreach_map(umap, &power, &up); - isl_union_map_free(umap); - return up.pow; - } - inc = increment(isl_union_map_get_dim(umap)); - umap = isl_union_map_product(inc, umap); - umap = isl_union_map_transitive_closure(umap, exact); - umap = isl_union_map_zip(umap); - dm = deltas_map(isl_union_map_get_dim(umap)); - umap = isl_union_map_apply_domain(umap, dm); - - return umap; -} diff --git a/cloog-0.16.3/isl/isl_union_map.c b/cloog-0.16.3/isl/isl_union_map.c deleted file mode 100644 index a5910fb..0000000 --- a/cloog-0.16.3/isl/isl_union_map.c +++ /dev/null @@ -1,2042 +0,0 @@ -/* - * Copyright 2010-2011 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -static __isl_give isl_union_map *isl_union_map_alloc(__isl_take isl_dim *dim, - int size) -{ - isl_union_map *umap; - - if (!dim) - return NULL; - - umap = isl_calloc_type(dim->ctx, isl_union_map); - if (!umap) - return NULL; - - umap->ref = 1; - umap->dim = dim; - if (isl_hash_table_init(dim->ctx, &umap->table, size) < 0) - goto error; - - return umap; -error: - isl_dim_free(dim); - isl_union_map_free(umap); - return NULL; -} - -__isl_give isl_union_map *isl_union_map_empty(__isl_take isl_dim *dim) -{ - return isl_union_map_alloc(dim, 16); -} - -__isl_give isl_union_set *isl_union_set_empty(__isl_take isl_dim *dim) -{ - return isl_union_map_empty(dim); -} - -isl_ctx *isl_union_map_get_ctx(__isl_keep isl_union_map *umap) -{ - return umap ? umap->dim->ctx : NULL; -} - -isl_ctx *isl_union_set_get_ctx(__isl_keep isl_union_set *uset) -{ - return uset ? uset->dim->ctx : NULL; -} - -__isl_give isl_dim *isl_union_map_get_dim(__isl_keep isl_union_map *umap) -{ - if (!umap) - return NULL; - return isl_dim_copy(umap->dim); -} - -__isl_give isl_dim *isl_union_set_get_dim(__isl_keep isl_union_set *uset) -{ - return isl_union_map_get_dim(uset); -} - -static int free_umap_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_map_free(map); - return 0; -} - -static int add_map(__isl_take isl_map *map, void *user) -{ - isl_union_map **umap = (isl_union_map **)user; - - *umap = isl_union_map_add_map(*umap, map); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_dup(__isl_keep isl_union_map *umap) -{ - isl_union_map *dup; - - if (!umap) - return NULL; - - dup = isl_union_map_empty(isl_dim_copy(umap->dim)); - if (isl_union_map_foreach_map(umap, &add_map, &dup) < 0) - goto error; - return dup; -error: - isl_union_map_free(dup); - return NULL; -} - -__isl_give isl_union_map *isl_union_map_cow(__isl_take isl_union_map *umap) -{ - if (!umap) - return NULL; - - if (umap->ref == 1) - return umap; - umap->ref--; - return isl_union_map_dup(umap); -} - -struct isl_union_align { - isl_reordering *exp; - isl_union_map *res; -}; - -static int align_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_reordering *exp; - struct isl_union_align *data = user; - - exp = isl_reordering_extend_dim(isl_reordering_copy(data->exp), - isl_map_get_dim(map)); - - data->res = isl_union_map_add_map(data->res, - isl_map_realign(isl_map_copy(map), exp)); - - return 0; -} - -/* Align the parameters of umap along those of model. - * The result has the parameters of model first, in the same order - * as they appear in model, followed by any remaining parameters of - * umap that do not appear in model. - */ -__isl_give isl_union_map *isl_union_map_align_params( - __isl_take isl_union_map *umap, __isl_take isl_dim *model) -{ - struct isl_union_align data = { NULL, NULL }; - - if (!umap || !model) - goto error; - - if (isl_dim_match(umap->dim, isl_dim_param, model, isl_dim_param)) { - isl_dim_free(model); - return umap; - } - - data.exp = isl_parameter_alignment_reordering(umap->dim, model); - if (!data.exp) - goto error; - - data.res = isl_union_map_alloc(isl_dim_copy(data.exp->dim), - umap->table.n); - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, - &align_entry, &data) < 0) - goto error; - - isl_reordering_free(data.exp); - isl_union_map_free(umap); - isl_dim_free(model); - return data.res; -error: - isl_reordering_free(data.exp); - isl_union_map_free(umap); - isl_union_map_free(data.res); - isl_dim_free(model); - return NULL; -} - -__isl_give isl_union_set *isl_union_set_align_params( - __isl_take isl_union_set *uset, __isl_take isl_dim *model) -{ - return isl_union_map_align_params(uset, model); -} - -__isl_give isl_union_map *isl_union_map_union(__isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2) -{ - umap1 = isl_union_map_align_params(umap1, isl_union_map_get_dim(umap2)); - umap2 = isl_union_map_align_params(umap2, isl_union_map_get_dim(umap1)); - - umap1 = isl_union_map_cow(umap1); - - if (!umap1 || !umap2) - goto error; - - if (isl_union_map_foreach_map(umap2, &add_map, &umap1) < 0) - goto error; - - isl_union_map_free(umap2); - - return umap1; -error: - isl_union_map_free(umap1); - isl_union_map_free(umap2); - return NULL; -} - -__isl_give isl_union_set *isl_union_set_union(__isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2) -{ - return isl_union_map_union(uset1, uset2); -} - -__isl_give isl_union_map *isl_union_map_copy(__isl_keep isl_union_map *umap) -{ - if (!umap) - return NULL; - - umap->ref++; - return umap; -} - -__isl_give isl_union_set *isl_union_set_copy(__isl_keep isl_union_set *uset) -{ - return isl_union_map_copy(uset); -} - -void *isl_union_map_free(__isl_take isl_union_map *umap) -{ - if (!umap) - return NULL; - - if (--umap->ref > 0) - return NULL; - - isl_hash_table_foreach(umap->dim->ctx, &umap->table, - &free_umap_entry, NULL); - isl_hash_table_clear(&umap->table); - isl_dim_free(umap->dim); - free(umap); - return NULL; -} - -void *isl_union_set_free(__isl_take isl_union_set *uset) -{ - return isl_union_map_free(uset); -} - -static int has_dim(const void *entry, const void *val) -{ - isl_map *map = (isl_map *)entry; - isl_dim *dim = (isl_dim *)val; - - return isl_dim_equal(map->dim, dim); -} - -__isl_give isl_union_map *isl_union_map_add_map(__isl_take isl_union_map *umap, - __isl_take isl_map *map) -{ - uint32_t hash; - struct isl_hash_table_entry *entry; - - if (isl_map_plain_is_empty(map)) { - isl_map_free(map); - return umap; - } - - umap = isl_union_map_cow(umap); - - if (!map || !umap) - goto error; - - isl_assert(map->ctx, isl_dim_match(map->dim, isl_dim_param, umap->dim, - isl_dim_param), goto error); - - hash = isl_dim_get_hash(map->dim); - entry = isl_hash_table_find(umap->dim->ctx, &umap->table, hash, - &has_dim, map->dim, 1); - if (!entry) - goto error; - - if (!entry->data) - entry->data = map; - else { - entry->data = isl_map_union(entry->data, isl_map_copy(map)); - if (!entry->data) - goto error; - isl_map_free(map); - } - - return umap; -error: - isl_map_free(map); - isl_union_map_free(umap); - return NULL; -} - -__isl_give isl_union_set *isl_union_set_add_set(__isl_take isl_union_set *uset, - __isl_take isl_set *set) -{ - return isl_union_map_add_map(uset, (isl_map *)set); -} - -__isl_give isl_union_map *isl_union_map_from_map(__isl_take isl_map *map) -{ - isl_dim *dim; - isl_union_map *umap; - - if (!map) - return NULL; - - dim = isl_map_get_dim(map); - dim = isl_dim_drop(dim, isl_dim_in, 0, isl_dim_size(dim, isl_dim_in)); - dim = isl_dim_drop(dim, isl_dim_out, 0, isl_dim_size(dim, isl_dim_out)); - umap = isl_union_map_empty(dim); - umap = isl_union_map_add_map(umap, map); - - return umap; -} - -__isl_give isl_union_set *isl_union_set_from_set(__isl_take isl_set *set) -{ - return isl_union_map_from_map((isl_map *)set); -} - -struct isl_union_map_foreach_data -{ - int (*fn)(__isl_take isl_map *map, void *user); - void *user; -}; - -static int call_on_copy(void **entry, void *user) -{ - isl_map *map = *entry; - struct isl_union_map_foreach_data *data; - data = (struct isl_union_map_foreach_data *)user; - - return data->fn(isl_map_copy(map), data->user); -} - -int isl_union_map_n_map(__isl_keep isl_union_map *umap) -{ - return umap ? umap->table.n : 0; -} - -int isl_union_set_n_set(__isl_keep isl_union_set *uset) -{ - return uset ? uset->table.n : 0; -} - -int isl_union_map_foreach_map(__isl_keep isl_union_map *umap, - int (*fn)(__isl_take isl_map *map, void *user), void *user) -{ - struct isl_union_map_foreach_data data = { fn, user }; - - if (!umap) - return -1; - - return isl_hash_table_foreach(umap->dim->ctx, &umap->table, - &call_on_copy, &data); -} - -static int copy_map(void **entry, void *user) -{ - isl_map *map = *entry; - isl_map **map_p = user; - - *map_p = isl_map_copy(map); - - return -1; -} - -__isl_give isl_map *isl_map_from_union_map(__isl_take isl_union_map *umap) -{ - isl_ctx *ctx; - isl_map *map = NULL; - - if (!umap) - return NULL; - ctx = isl_union_map_get_ctx(umap); - if (umap->table.n != 1) - isl_die(ctx, isl_error_invalid, - "union map needs to contain elements in exactly " - "one space", return isl_union_map_free(umap)); - - isl_hash_table_foreach(ctx, &umap->table, ©_map, &map); - - isl_union_map_free(umap); - - return map; -} - -__isl_give isl_set *isl_set_from_union_set(__isl_take isl_union_set *uset) -{ - return isl_map_from_union_map(uset); -} - -__isl_give isl_map *isl_union_map_extract_map(__isl_keep isl_union_map *umap, - __isl_take isl_dim *dim) -{ - uint32_t hash; - struct isl_hash_table_entry *entry; - - if (!umap || !dim) - goto error; - - hash = isl_dim_get_hash(dim); - entry = isl_hash_table_find(umap->dim->ctx, &umap->table, hash, - &has_dim, dim, 0); - if (!entry) - return isl_map_empty(dim); - isl_dim_free(dim); - return isl_map_copy(entry->data); -error: - isl_dim_free(dim); - return NULL; -} - -__isl_give isl_set *isl_union_set_extract_set(__isl_keep isl_union_set *uset, - __isl_take isl_dim *dim) -{ - return (isl_set *)isl_union_map_extract_map(uset, dim); -} - -/* Check if umap contains a map in the given space. - */ -__isl_give int isl_union_map_contains(__isl_keep isl_union_map *umap, - __isl_keep isl_dim *dim) -{ - uint32_t hash; - struct isl_hash_table_entry *entry; - - if (!umap || !dim) - return -1; - - hash = isl_dim_get_hash(dim); - entry = isl_hash_table_find(umap->dim->ctx, &umap->table, hash, - &has_dim, dim, 0); - return !!entry; -} - -__isl_give int isl_union_set_contains(__isl_keep isl_union_set *uset, - __isl_keep isl_dim *dim) -{ - return isl_union_map_contains(uset, dim); -} - -int isl_union_set_foreach_set(__isl_keep isl_union_set *uset, - int (*fn)(__isl_take isl_set *set, void *user), void *user) -{ - return isl_union_map_foreach_map(uset, - (int(*)(__isl_take isl_map *, void*))fn, user); -} - -struct isl_union_set_foreach_point_data { - int (*fn)(__isl_take isl_point *pnt, void *user); - void *user; -}; - -static int foreach_point(__isl_take isl_set *set, void *user) -{ - struct isl_union_set_foreach_point_data *data = user; - int r; - - r = isl_set_foreach_point(set, data->fn, data->user); - isl_set_free(set); - - return r; -} - -int isl_union_set_foreach_point(__isl_keep isl_union_set *uset, - int (*fn)(__isl_take isl_point *pnt, void *user), void *user) -{ - struct isl_union_set_foreach_point_data data = { fn, user }; - return isl_union_set_foreach_set(uset, &foreach_point, &data); -} - -struct isl_union_map_gen_bin_data { - isl_union_map *umap2; - isl_union_map *res; -}; - -static int subtract_entry(void **entry, void *user) -{ - struct isl_union_map_gen_bin_data *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - isl_map *map = *entry; - - hash = isl_dim_get_hash(map->dim); - entry2 = isl_hash_table_find(data->umap2->dim->ctx, &data->umap2->table, - hash, &has_dim, map->dim, 0); - map = isl_map_copy(map); - if (entry2) { - int empty; - map = isl_map_subtract(map, isl_map_copy(entry2->data)); - - empty = isl_map_is_empty(map); - if (empty < 0) { - isl_map_free(map); - return -1; - } - if (empty) { - isl_map_free(map); - return 0; - } - } - data->res = isl_union_map_add_map(data->res, map); - - return 0; -} - -static __isl_give isl_union_map *gen_bin_op(__isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2, int (*fn)(void **, void *)) -{ - struct isl_union_map_gen_bin_data data = { NULL, NULL }; - - umap1 = isl_union_map_align_params(umap1, isl_union_map_get_dim(umap2)); - umap2 = isl_union_map_align_params(umap2, isl_union_map_get_dim(umap1)); - - if (!umap1 || !umap2) - goto error; - - data.umap2 = umap2; - data.res = isl_union_map_alloc(isl_dim_copy(umap1->dim), - umap1->table.n); - if (isl_hash_table_foreach(umap1->dim->ctx, &umap1->table, - fn, &data) < 0) - goto error; - - isl_union_map_free(umap1); - isl_union_map_free(umap2); - return data.res; -error: - isl_union_map_free(umap1); - isl_union_map_free(umap2); - isl_union_map_free(data.res); - return NULL; -} - -__isl_give isl_union_map *isl_union_map_subtract( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return gen_bin_op(umap1, umap2, &subtract_entry); -} - -__isl_give isl_union_set *isl_union_set_subtract( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) -{ - return isl_union_map_subtract(uset1, uset2); -} - -struct isl_union_map_match_bin_data { - isl_union_map *umap2; - isl_union_map *res; - __isl_give isl_map *(*fn)(__isl_take isl_map*, __isl_take isl_map*); -}; - -static int match_bin_entry(void **entry, void *user) -{ - struct isl_union_map_match_bin_data *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - isl_map *map = *entry; - int empty; - - hash = isl_dim_get_hash(map->dim); - entry2 = isl_hash_table_find(data->umap2->dim->ctx, &data->umap2->table, - hash, &has_dim, map->dim, 0); - if (!entry2) - return 0; - - map = isl_map_copy(map); - map = data->fn(map, isl_map_copy(entry2->data)); - - empty = isl_map_is_empty(map); - if (empty < 0) { - isl_map_free(map); - return -1; - } - if (empty) { - isl_map_free(map); - return 0; - } - - data->res = isl_union_map_add_map(data->res, map); - - return 0; -} - -static __isl_give isl_union_map *match_bin_op(__isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2, - __isl_give isl_map *(*fn)(__isl_take isl_map*, __isl_take isl_map*)) -{ - struct isl_union_map_match_bin_data data = { NULL, NULL, fn }; - - umap1 = isl_union_map_align_params(umap1, isl_union_map_get_dim(umap2)); - umap2 = isl_union_map_align_params(umap2, isl_union_map_get_dim(umap1)); - - if (!umap1 || !umap2) - goto error; - - data.umap2 = umap2; - data.res = isl_union_map_alloc(isl_dim_copy(umap1->dim), - umap1->table.n); - if (isl_hash_table_foreach(umap1->dim->ctx, &umap1->table, - &match_bin_entry, &data) < 0) - goto error; - - isl_union_map_free(umap1); - isl_union_map_free(umap2); - return data.res; -error: - isl_union_map_free(umap1); - isl_union_map_free(umap2); - isl_union_map_free(data.res); - return NULL; -} - -__isl_give isl_union_map *isl_union_map_intersect( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return match_bin_op(umap1, umap2, &isl_map_intersect); -} - -__isl_give isl_union_set *isl_union_set_intersect( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) -{ - return isl_union_map_intersect(uset1, uset2); -} - -__isl_give isl_union_map *isl_union_map_gist(__isl_take isl_union_map *umap, - __isl_take isl_union_map *context) -{ - return match_bin_op(umap, context, &isl_map_gist); -} - -__isl_give isl_union_set *isl_union_set_gist(__isl_take isl_union_set *uset, - __isl_take isl_union_set *context) -{ - return isl_union_map_gist(uset, context); -} - -static __isl_give isl_map *lex_le_set(__isl_take isl_map *set1, - __isl_take isl_map *set2) -{ - return isl_set_lex_le_set((isl_set *)set1, (isl_set *)set2); -} - -static __isl_give isl_map *lex_lt_set(__isl_take isl_map *set1, - __isl_take isl_map *set2) -{ - return isl_set_lex_lt_set((isl_set *)set1, (isl_set *)set2); -} - -__isl_give isl_union_map *isl_union_set_lex_lt_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) -{ - return match_bin_op(uset1, uset2, &lex_lt_set); -} - -__isl_give isl_union_map *isl_union_set_lex_le_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) -{ - return match_bin_op(uset1, uset2, &lex_le_set); -} - -__isl_give isl_union_map *isl_union_set_lex_gt_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) -{ - return isl_union_map_reverse(isl_union_set_lex_lt_union_set(uset2, uset1)); -} - -__isl_give isl_union_map *isl_union_set_lex_ge_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) -{ - return isl_union_map_reverse(isl_union_set_lex_le_union_set(uset2, uset1)); -} - -__isl_give isl_union_map *isl_union_map_lex_gt_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return isl_union_map_reverse(isl_union_map_lex_lt_union_map(umap2, umap1)); -} - -__isl_give isl_union_map *isl_union_map_lex_ge_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return isl_union_map_reverse(isl_union_map_lex_le_union_map(umap2, umap1)); -} - -static int intersect_domain_entry(void **entry, void *user) -{ - struct isl_union_map_gen_bin_data *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - isl_dim *dim; - isl_map *map = *entry; - int empty; - - dim = isl_map_get_dim(map); - dim = isl_dim_domain(dim); - hash = isl_dim_get_hash(dim); - entry2 = isl_hash_table_find(data->umap2->dim->ctx, &data->umap2->table, - hash, &has_dim, dim, 0); - isl_dim_free(dim); - if (!entry2) - return 0; - - map = isl_map_copy(map); - map = isl_map_intersect_domain(map, isl_set_copy(entry2->data)); - - empty = isl_map_is_empty(map); - if (empty < 0) { - isl_map_free(map); - return -1; - } - if (empty) { - isl_map_free(map); - return 0; - } - - data->res = isl_union_map_add_map(data->res, map); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_intersect_domain( - __isl_take isl_union_map *umap, __isl_take isl_union_set *uset) -{ - return gen_bin_op(umap, uset, &intersect_domain_entry); -} - -static int intersect_range_entry(void **entry, void *user) -{ - struct isl_union_map_gen_bin_data *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - isl_dim *dim; - isl_map *map = *entry; - int empty; - - dim = isl_map_get_dim(map); - dim = isl_dim_range(dim); - hash = isl_dim_get_hash(dim); - entry2 = isl_hash_table_find(data->umap2->dim->ctx, &data->umap2->table, - hash, &has_dim, dim, 0); - isl_dim_free(dim); - if (!entry2) - return 0; - - map = isl_map_copy(map); - map = isl_map_intersect_range(map, isl_set_copy(entry2->data)); - - empty = isl_map_is_empty(map); - if (empty < 0) { - isl_map_free(map); - return -1; - } - if (empty) { - isl_map_free(map); - return 0; - } - - data->res = isl_union_map_add_map(data->res, map); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_intersect_range( - __isl_take isl_union_map *umap, __isl_take isl_union_set *uset) -{ - return gen_bin_op(umap, uset, &intersect_range_entry); -} - -struct isl_union_map_bin_data { - isl_union_map *umap2; - isl_union_map *res; - isl_map *map; - int (*fn)(void **entry, void *user); -}; - -static int apply_range_entry(void **entry, void *user) -{ - struct isl_union_map_bin_data *data = user; - isl_map *map2 = *entry; - int empty; - - if (!isl_dim_tuple_match(data->map->dim, isl_dim_out, - map2->dim, isl_dim_in)) - return 0; - - map2 = isl_map_apply_range(isl_map_copy(data->map), isl_map_copy(map2)); - - empty = isl_map_is_empty(map2); - if (empty < 0) { - isl_map_free(map2); - return -1; - } - if (empty) { - isl_map_free(map2); - return 0; - } - - data->res = isl_union_map_add_map(data->res, map2); - - return 0; -} - -static int bin_entry(void **entry, void *user) -{ - struct isl_union_map_bin_data *data = user; - isl_map *map = *entry; - - data->map = map; - if (isl_hash_table_foreach(data->umap2->dim->ctx, &data->umap2->table, - data->fn, data) < 0) - return -1; - - return 0; -} - -static __isl_give isl_union_map *bin_op(__isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2, int (*fn)(void **entry, void *user)) -{ - struct isl_union_map_bin_data data = { NULL, NULL, NULL, fn }; - - umap1 = isl_union_map_align_params(umap1, isl_union_map_get_dim(umap2)); - umap2 = isl_union_map_align_params(umap2, isl_union_map_get_dim(umap1)); - - if (!umap1 || !umap2) - goto error; - - data.umap2 = umap2; - data.res = isl_union_map_alloc(isl_dim_copy(umap1->dim), - umap1->table.n); - if (isl_hash_table_foreach(umap1->dim->ctx, &umap1->table, - &bin_entry, &data) < 0) - goto error; - - isl_union_map_free(umap1); - isl_union_map_free(umap2); - return data.res; -error: - isl_union_map_free(umap1); - isl_union_map_free(umap2); - isl_union_map_free(data.res); - return NULL; -} - -__isl_give isl_union_map *isl_union_map_apply_range( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return bin_op(umap1, umap2, &apply_range_entry); -} - -__isl_give isl_union_map *isl_union_map_apply_domain( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - umap1 = isl_union_map_reverse(umap1); - umap1 = isl_union_map_apply_range(umap1, umap2); - return isl_union_map_reverse(umap1); -} - -__isl_give isl_union_set *isl_union_set_apply( - __isl_take isl_union_set *uset, __isl_take isl_union_map *umap) -{ - return isl_union_map_apply_range(uset, umap); -} - -static int map_lex_lt_entry(void **entry, void *user) -{ - struct isl_union_map_bin_data *data = user; - isl_map *map2 = *entry; - - if (!isl_dim_tuple_match(data->map->dim, isl_dim_out, - map2->dim, isl_dim_out)) - return 0; - - map2 = isl_map_lex_lt_map(isl_map_copy(data->map), isl_map_copy(map2)); - - data->res = isl_union_map_add_map(data->res, map2); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_lex_lt_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return bin_op(umap1, umap2, &map_lex_lt_entry); -} - -static int map_lex_le_entry(void **entry, void *user) -{ - struct isl_union_map_bin_data *data = user; - isl_map *map2 = *entry; - - if (!isl_dim_tuple_match(data->map->dim, isl_dim_out, - map2->dim, isl_dim_out)) - return 0; - - map2 = isl_map_lex_le_map(isl_map_copy(data->map), isl_map_copy(map2)); - - data->res = isl_union_map_add_map(data->res, map2); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_lex_le_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return bin_op(umap1, umap2, &map_lex_le_entry); -} - -static int product_entry(void **entry, void *user) -{ - struct isl_union_map_bin_data *data = user; - isl_map *map2 = *entry; - - map2 = isl_map_product(isl_map_copy(data->map), isl_map_copy(map2)); - - data->res = isl_union_map_add_map(data->res, map2); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_product(__isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2) -{ - return bin_op(umap1, umap2, &product_entry); -} - -__isl_give isl_union_set *isl_union_set_product(__isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2) -{ - return isl_union_map_product(uset1, uset2); -} - -static int range_product_entry(void **entry, void *user) -{ - struct isl_union_map_bin_data *data = user; - isl_map *map2 = *entry; - - if (!isl_dim_tuple_match(data->map->dim, isl_dim_in, - map2->dim, isl_dim_in)) - return 0; - - map2 = isl_map_range_product(isl_map_copy(data->map), - isl_map_copy(map2)); - - data->res = isl_union_map_add_map(data->res, map2); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_range_product( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return bin_op(umap1, umap2, &range_product_entry); -} - -static int flat_range_product_entry(void **entry, void *user) -{ - struct isl_union_map_bin_data *data = user; - isl_map *map2 = *entry; - - if (!isl_dim_tuple_match(data->map->dim, isl_dim_in, - map2->dim, isl_dim_in)) - return 0; - - map2 = isl_map_flat_range_product(isl_map_copy(data->map), - isl_map_copy(map2)); - - data->res = isl_union_map_add_map(data->res, map2); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_flat_range_product( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return bin_op(umap1, umap2, &flat_range_product_entry); -} - -__isl_give isl_union_map *isl_union_map_from_range( - __isl_take isl_union_set *uset) -{ - return uset; -} - -__isl_give isl_union_map *isl_union_map_from_domain( - __isl_take isl_union_set *uset) -{ - return isl_union_map_reverse(isl_union_map_from_range(uset)); -} - -__isl_give isl_union_map *isl_union_map_from_domain_and_range( - __isl_take isl_union_set *domain, __isl_take isl_union_set *range) -{ - return isl_union_map_apply_range(isl_union_map_from_domain(domain), - isl_union_map_from_range(range)); -} - -static __isl_give isl_union_map *un_op(__isl_take isl_union_map *umap, - int (*fn)(void **, void *)) -{ - umap = isl_union_map_cow(umap); - if (!umap) - return NULL; - - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, fn, NULL) < 0) - goto error; - - return umap; -error: - isl_union_map_free(umap); - return NULL; -} - -static int affine_entry(void **entry, void *user) -{ - isl_map **map = (isl_map **)entry; - - *map = isl_map_from_basic_map(isl_map_affine_hull(*map)); - - return *map ? 0 : -1; -} - -__isl_give isl_union_map *isl_union_map_affine_hull( - __isl_take isl_union_map *umap) -{ - return un_op(umap, &affine_entry); -} - -__isl_give isl_union_set *isl_union_set_affine_hull( - __isl_take isl_union_set *uset) -{ - return isl_union_map_affine_hull(uset); -} - -static int polyhedral_entry(void **entry, void *user) -{ - isl_map **map = (isl_map **)entry; - - *map = isl_map_from_basic_map(isl_map_polyhedral_hull(*map)); - - return *map ? 0 : -1; -} - -__isl_give isl_union_map *isl_union_map_polyhedral_hull( - __isl_take isl_union_map *umap) -{ - return un_op(umap, &polyhedral_entry); -} - -__isl_give isl_union_set *isl_union_set_polyhedral_hull( - __isl_take isl_union_set *uset) -{ - return isl_union_map_polyhedral_hull(uset); -} - -static int simple_entry(void **entry, void *user) -{ - isl_map **map = (isl_map **)entry; - - *map = isl_map_from_basic_map(isl_map_simple_hull(*map)); - - return *map ? 0 : -1; -} - -__isl_give isl_union_map *isl_union_map_simple_hull( - __isl_take isl_union_map *umap) -{ - return un_op(umap, &simple_entry); -} - -__isl_give isl_union_set *isl_union_set_simple_hull( - __isl_take isl_union_set *uset) -{ - return isl_union_map_simple_hull(uset); -} - -static int inplace_entry(void **entry, void *user) -{ - __isl_give isl_map *(*fn)(__isl_take isl_map *); - isl_map **map = (isl_map **)entry; - isl_map *copy; - - fn = *(__isl_give isl_map *(**)(__isl_take isl_map *)) user; - copy = fn(isl_map_copy(*map)); - if (!copy) - return -1; - - isl_map_free(*map); - *map = copy; - - return 0; -} - -static __isl_give isl_union_map *inplace(__isl_take isl_union_map *umap, - __isl_give isl_map *(*fn)(__isl_take isl_map *)) -{ - if (!umap) - return NULL; - - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, - &inplace_entry, &fn) < 0) - goto error; - - return umap; -error: - isl_union_map_free(umap); - return NULL; -} - -__isl_give isl_union_map *isl_union_map_coalesce( - __isl_take isl_union_map *umap) -{ - return inplace(umap, &isl_map_coalesce); -} - -__isl_give isl_union_set *isl_union_set_coalesce( - __isl_take isl_union_set *uset) -{ - return isl_union_map_coalesce(uset); -} - -__isl_give isl_union_map *isl_union_map_detect_equalities( - __isl_take isl_union_map *umap) -{ - return inplace(umap, &isl_map_detect_equalities); -} - -__isl_give isl_union_set *isl_union_set_detect_equalities( - __isl_take isl_union_set *uset) -{ - return isl_union_map_detect_equalities(uset); -} - -__isl_give isl_union_map *isl_union_map_compute_divs( - __isl_take isl_union_map *umap) -{ - return inplace(umap, &isl_map_compute_divs); -} - -__isl_give isl_union_set *isl_union_set_compute_divs( - __isl_take isl_union_set *uset) -{ - return isl_union_map_compute_divs(uset); -} - -static int lexmin_entry(void **entry, void *user) -{ - isl_map **map = (isl_map **)entry; - - *map = isl_map_lexmin(*map); - - return *map ? 0 : -1; -} - -__isl_give isl_union_map *isl_union_map_lexmin( - __isl_take isl_union_map *umap) -{ - return un_op(umap, &lexmin_entry); -} - -__isl_give isl_union_set *isl_union_set_lexmin( - __isl_take isl_union_set *uset) -{ - return isl_union_map_lexmin(uset); -} - -static int lexmax_entry(void **entry, void *user) -{ - isl_map **map = (isl_map **)entry; - - *map = isl_map_lexmax(*map); - - return *map ? 0 : -1; -} - -__isl_give isl_union_map *isl_union_map_lexmax( - __isl_take isl_union_map *umap) -{ - return un_op(umap, &lexmax_entry); -} - -__isl_give isl_union_set *isl_union_set_lexmax( - __isl_take isl_union_set *uset) -{ - return isl_union_map_lexmax(uset); -} - -static __isl_give isl_union_set *cond_un_op(__isl_take isl_union_map *umap, - int (*fn)(void **, void *)) -{ - isl_union_set *res; - - if (!umap) - return NULL; - - res = isl_union_map_alloc(isl_dim_copy(umap->dim), umap->table.n); - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, fn, &res) < 0) - goto error; - - isl_union_map_free(umap); - return res; -error: - isl_union_map_free(umap); - isl_union_set_free(res); - return NULL; -} - -static int universe_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_map **res = user; - - map = isl_map_universe(isl_map_get_dim(map)); - *res = isl_union_map_add_map(*res, map); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_universe(__isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &universe_entry); -} - -__isl_give isl_union_set *isl_union_set_universe(__isl_take isl_union_set *uset) -{ - return isl_union_map_universe(uset); -} - -static int reverse_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_map **res = user; - - *res = isl_union_map_add_map(*res, isl_map_reverse(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_reverse(__isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &reverse_entry); -} - -static int domain_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_set **res = user; - - *res = isl_union_set_add_set(*res, isl_map_domain(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_set *isl_union_map_domain(__isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &domain_entry); -} - -static int range_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_set **res = user; - - *res = isl_union_set_add_set(*res, isl_map_range(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_set *isl_union_map_range(__isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &range_entry); -} - -static int domain_map_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_set **res = user; - - *res = isl_union_map_add_map(*res, - isl_map_domain_map(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_domain_map( - __isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &domain_map_entry); -} - -static int range_map_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_set **res = user; - - *res = isl_union_map_add_map(*res, - isl_map_range_map(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_range_map( - __isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &range_map_entry); -} - -static int deltas_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_set **res = user; - - if (!isl_dim_tuple_match(map->dim, isl_dim_in, map->dim, isl_dim_out)) - return 0; - - *res = isl_union_set_add_set(*res, isl_map_deltas(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_set *isl_union_map_deltas(__isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &deltas_entry); -} - -static int deltas_map_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_map **res = user; - - if (!isl_dim_tuple_match(map->dim, isl_dim_in, map->dim, isl_dim_out)) - return 0; - - *res = isl_union_map_add_map(*res, - isl_map_deltas_map(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_deltas_map( - __isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &deltas_map_entry); -} - -static int identity_entry(void **entry, void *user) -{ - isl_set *set = *entry; - isl_union_map **res = user; - - *res = isl_union_map_add_map(*res, isl_set_identity(isl_set_copy(set))); - - return 0; -} - -__isl_give isl_union_map *isl_union_set_identity(__isl_take isl_union_set *uset) -{ - return cond_un_op(uset, &identity_entry); -} - -static int unwrap_entry(void **entry, void *user) -{ - isl_set *set = *entry; - isl_union_set **res = user; - - if (!isl_set_is_wrapping(set)) - return 0; - - *res = isl_union_map_add_map(*res, isl_set_unwrap(isl_set_copy(set))); - - return 0; -} - -__isl_give isl_union_map *isl_union_set_unwrap(__isl_take isl_union_set *uset) -{ - return cond_un_op(uset, &unwrap_entry); -} - -static int wrap_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_set **res = user; - - *res = isl_union_set_add_set(*res, isl_map_wrap(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_set *isl_union_map_wrap(__isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &wrap_entry); -} - -struct isl_union_map_is_subset_data { - isl_union_map *umap2; - int is_subset; -}; - -static int is_subset_entry(void **entry, void *user) -{ - struct isl_union_map_is_subset_data *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - isl_map *map = *entry; - - hash = isl_dim_get_hash(map->dim); - entry2 = isl_hash_table_find(data->umap2->dim->ctx, &data->umap2->table, - hash, &has_dim, map->dim, 0); - if (!entry2) { - data->is_subset = 0; - return -1; - } - - data->is_subset = isl_map_is_subset(map, entry2->data); - if (data->is_subset < 0 || !data->is_subset) - return -1; - - return 0; -} - -int isl_union_map_is_subset(__isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2) -{ - struct isl_union_map_is_subset_data data = { NULL, 1 }; - - umap1 = isl_union_map_copy(umap1); - umap2 = isl_union_map_copy(umap2); - umap1 = isl_union_map_align_params(umap1, isl_union_map_get_dim(umap2)); - umap2 = isl_union_map_align_params(umap2, isl_union_map_get_dim(umap1)); - - if (!umap1 || !umap2) - goto error; - - data.umap2 = umap2; - if (isl_hash_table_foreach(umap1->dim->ctx, &umap1->table, - &is_subset_entry, &data) < 0 && - data.is_subset) - goto error; - - isl_union_map_free(umap1); - isl_union_map_free(umap2); - - return data.is_subset; -error: - isl_union_map_free(umap1); - isl_union_map_free(umap2); - return -1; -} - -int isl_union_set_is_subset(__isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2) -{ - return isl_union_map_is_subset(uset1, uset2); -} - -int isl_union_map_is_equal(__isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2) -{ - int is_subset; - - if (!umap1 || !umap2) - return -1; - is_subset = isl_union_map_is_subset(umap1, umap2); - if (is_subset != 1) - return is_subset; - is_subset = isl_union_map_is_subset(umap2, umap1); - return is_subset; -} - -int isl_union_set_is_equal(__isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2) -{ - return isl_union_map_is_equal(uset1, uset2); -} - -int isl_union_map_is_strict_subset(__isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2) -{ - int is_subset; - - if (!umap1 || !umap2) - return -1; - is_subset = isl_union_map_is_subset(umap1, umap2); - if (is_subset != 1) - return is_subset; - is_subset = isl_union_map_is_subset(umap2, umap1); - if (is_subset == -1) - return is_subset; - return !is_subset; -} - -int isl_union_set_is_strict_subset(__isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2) -{ - return isl_union_map_is_strict_subset(uset1, uset2); -} - -static int sample_entry(void **entry, void *user) -{ - isl_basic_map **sample = (isl_basic_map **)user; - isl_map *map = *entry; - - *sample = isl_map_sample(isl_map_copy(map)); - if (!*sample) - return -1; - if (!isl_basic_map_plain_is_empty(*sample)) - return -1; - return 0; -} - -__isl_give isl_basic_map *isl_union_map_sample(__isl_take isl_union_map *umap) -{ - isl_basic_map *sample = NULL; - - if (!umap) - return NULL; - - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, - &sample_entry, &sample) < 0 && - !sample) - goto error; - - if (!sample) - sample = isl_basic_map_empty(isl_union_map_get_dim(umap)); - - isl_union_map_free(umap); - - return sample; -error: - isl_union_map_free(umap); - return NULL; -} - -__isl_give isl_basic_set *isl_union_set_sample(__isl_take isl_union_set *uset) -{ - return (isl_basic_set *)isl_union_map_sample(uset); -} - -struct isl_forall_data { - int res; - int (*fn)(__isl_keep isl_map *map); -}; - -static int forall_entry(void **entry, void *user) -{ - struct isl_forall_data *data = user; - isl_map *map = *entry; - - data->res = data->fn(map); - if (data->res < 0) - return -1; - - if (!data->res) - return -1; - - return 0; -} - -static int union_map_forall(__isl_keep isl_union_map *umap, - int (*fn)(__isl_keep isl_map *map)) -{ - struct isl_forall_data data = { 1, fn }; - - if (!umap) - return -1; - - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, - &forall_entry, &data) < 0 && data.res) - return -1; - - return data.res; -} - -struct isl_forall_user_data { - int res; - int (*fn)(__isl_keep isl_map *map, void *user); - void *user; -}; - -static int forall_user_entry(void **entry, void *user) -{ - struct isl_forall_user_data *data = user; - isl_map *map = *entry; - - data->res = data->fn(map, data->user); - if (data->res < 0) - return -1; - - if (!data->res) - return -1; - - return 0; -} - -/* Check if fn(map, user) returns true for all maps "map" in umap. - */ -static int union_map_forall_user(__isl_keep isl_union_map *umap, - int (*fn)(__isl_keep isl_map *map, void *user), void *user) -{ - struct isl_forall_user_data data = { 1, fn, user }; - - if (!umap) - return -1; - - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, - &forall_user_entry, &data) < 0 && data.res) - return -1; - - return data.res; -} - -int isl_union_map_is_empty(__isl_keep isl_union_map *umap) -{ - return union_map_forall(umap, &isl_map_is_empty); -} - -int isl_union_set_is_empty(__isl_keep isl_union_set *uset) -{ - return isl_union_map_is_empty(uset); -} - -static int is_subset_of_identity(__isl_keep isl_map *map) -{ - int is_subset; - isl_dim *dim; - isl_map *id; - - if (!map) - return -1; - - if (!isl_dim_tuple_match(map->dim, isl_dim_in, map->dim, isl_dim_out)) - return 0; - - dim = isl_map_get_dim(map); - id = isl_map_identity(dim); - - is_subset = isl_map_is_subset(map, id); - - isl_map_free(id); - - return is_subset; -} - -/* Check if the given map is single-valued. - * We simply compute - * - * M \circ M^-1 - * - * and check if the result is a subset of the identity mapping. - */ -int isl_union_map_is_single_valued(__isl_keep isl_union_map *umap) -{ - isl_union_map *test; - int sv; - - if (isl_union_map_n_map(umap) == 1) { - isl_map *map; - umap = isl_union_map_copy(umap); - map = isl_map_from_union_map(umap); - sv = isl_map_is_single_valued(map); - isl_map_free(map); - return sv; - } - - test = isl_union_map_reverse(isl_union_map_copy(umap)); - test = isl_union_map_apply_range(test, isl_union_map_copy(umap)); - - sv = union_map_forall(test, &is_subset_of_identity); - - isl_union_map_free(test); - - return sv; -} - -int isl_union_map_is_injective(__isl_keep isl_union_map *umap) -{ - int in; - - umap = isl_union_map_copy(umap); - umap = isl_union_map_reverse(umap); - in = isl_union_map_is_single_valued(umap); - isl_union_map_free(umap); - - return in; -} - -/* Represents a map that has a fixed value (v) for one of its - * range dimensions. - * The map in this structure is not reference counted, so it - * is only valid while the isl_union_map from which it was - * obtained is still alive. - */ -struct isl_fixed_map { - isl_int v; - isl_map *map; -}; - -static struct isl_fixed_map *alloc_isl_fixed_map_array(isl_ctx *ctx, - int n) -{ - int i; - struct isl_fixed_map *v; - - v = isl_calloc_array(ctx, struct isl_fixed_map, n); - if (!v) - return NULL; - for (i = 0; i < n; ++i) - isl_int_init(v[i].v); - return v; -} - -static void free_isl_fixed_map_array(struct isl_fixed_map *v, int n) -{ - int i; - - if (!v) - return; - for (i = 0; i < n; ++i) - isl_int_clear(v[i].v); - free(v); -} - -/* Compare the "v" field of two isl_fixed_map structs. - */ -static int qsort_fixed_map_cmp(const void *p1, const void *p2) -{ - const struct isl_fixed_map *e1 = (const struct isl_fixed_map *) p1; - const struct isl_fixed_map *e2 = (const struct isl_fixed_map *) p2; - - return isl_int_cmp(e1->v, e2->v); -} - -/* Internal data structure used while checking whether all maps - * in a union_map have a fixed value for a given output dimension. - * v is the list of maps, with the fixed value for the dimension - * n is the number of maps considered so far - * pos is the output dimension under investigation - */ -struct isl_fixed_dim_data { - struct isl_fixed_map *v; - int n; - int pos; -}; - -static int fixed_at_pos(__isl_keep isl_map *map, void *user) -{ - struct isl_fixed_dim_data *data = user; - - data->v[data->n].map = map; - return isl_map_plain_is_fixed(map, isl_dim_out, data->pos, - &data->v[data->n++].v); -} - -static int plain_injective_on_range(__isl_take isl_union_map *umap, - int first, int n_range); - -/* Given a list of the maps, with their fixed values at output dimension "pos", - * check whether the ranges of the maps form an obvious partition. - * - * We first sort the maps according to their fixed values. - * If all maps have a different value, then we know the ranges form - * a partition. - * Otherwise, we collect the maps with the same fixed value and - * check whether each such collection is obviously injective - * based on later dimensions. - */ -static int separates(struct isl_fixed_map *v, int n, - __isl_take isl_dim *dim, int pos, int n_range) -{ - int i; - - if (!v) - goto error; - - qsort(v, n, sizeof(*v), &qsort_fixed_map_cmp); - - for (i = 0; i + 1 < n; ++i) { - int j, k; - isl_union_map *part; - int injective; - - for (j = i + 1; j < n; ++j) - if (isl_int_ne(v[i].v, v[j].v)) - break; - - if (j == i + 1) - continue; - - part = isl_union_map_alloc(isl_dim_copy(dim), j - i); - for (k = i; k < j; ++k) - part = isl_union_map_add_map(part, - isl_map_copy(v[k].map)); - - injective = plain_injective_on_range(part, pos + 1, n_range); - if (injective < 0) - goto error; - if (!injective) - break; - - i = j - 1; - } - - isl_dim_free(dim); - free_isl_fixed_map_array(v, n); - return i + 1 >= n; -error: - isl_dim_free(dim); - free_isl_fixed_map_array(v, n); - return -1; -} - -/* Check whether the maps in umap have obviously distinct ranges. - * In particular, check for an output dimension in the range - * [first,n_range) for which all maps have a fixed value - * and then check if these values, possibly along with fixed values - * at later dimensions, entail distinct ranges. - */ -static int plain_injective_on_range(__isl_take isl_union_map *umap, - int first, int n_range) -{ - isl_ctx *ctx; - int n; - struct isl_fixed_dim_data data = { NULL }; - - ctx = isl_union_map_get_ctx(umap); - - if (!umap) - goto error; - - n = isl_union_map_n_map(umap); - if (n <= 1) { - isl_union_map_free(umap); - return 1; - } - - if (first >= n_range) { - isl_union_map_free(umap); - return 0; - } - - data.v = alloc_isl_fixed_map_array(ctx, n); - if (!data.v) - goto error; - - for (data.pos = first; data.pos < n_range; ++data.pos) { - int fixed; - int injective; - isl_dim *dim; - - data.n = 0; - fixed = union_map_forall_user(umap, &fixed_at_pos, &data); - if (fixed < 0) - goto error; - if (!fixed) - continue; - dim = isl_union_map_get_dim(umap); - injective = separates(data.v, n, dim, data.pos, n_range); - isl_union_map_free(umap); - return injective; - } - - free_isl_fixed_map_array(data.v, n); - isl_union_map_free(umap); - - return 0; -error: - free_isl_fixed_map_array(data.v, n); - isl_union_map_free(umap); - return -1; -} - -/* Check whether the maps in umap that map to subsets of "ran" - * have obviously distinct ranges. - */ -static int plain_injective_on_range_wrap(__isl_keep isl_set *ran, void *user) -{ - isl_union_map *umap = user; - - umap = isl_union_map_copy(umap); - umap = isl_union_map_intersect_range(umap, - isl_union_set_from_set(isl_set_copy(ran))); - return plain_injective_on_range(umap, 0, isl_set_dim(ran, isl_dim_set)); -} - -/* Check if the given union_map is obviously injective. - * - * In particular, we first check if all individual maps are obviously - * injective and then check if all the ranges of these maps are - * obviously disjoint. - */ -int isl_union_map_plain_is_injective(__isl_keep isl_union_map *umap) -{ - int in; - isl_union_map *univ; - isl_union_set *ran; - - in = union_map_forall(umap, &isl_map_plain_is_injective); - if (in < 0) - return -1; - if (!in) - return 0; - - univ = isl_union_map_universe(isl_union_map_copy(umap)); - ran = isl_union_map_range(univ); - - in = union_map_forall_user(ran, &plain_injective_on_range_wrap, umap); - - isl_union_set_free(ran); - - return in; -} - -int isl_union_map_is_bijective(__isl_keep isl_union_map *umap) -{ - int sv; - - sv = isl_union_map_is_single_valued(umap); - if (sv < 0 || !sv) - return sv; - - return isl_union_map_is_injective(umap); -} - -static int zip_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_map **res = user; - - if (!isl_map_can_zip(map)) - return 0; - - *res = isl_union_map_add_map(*res, isl_map_zip(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_zip(__isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &zip_entry); -} - -static int lift_entry(void **entry, void *user) -{ - isl_set *set = *entry; - isl_union_set **res = user; - - *res = isl_union_set_add_set(*res, isl_set_lift(isl_set_copy(set))); - - return 0; -} - -__isl_give isl_union_set *isl_union_set_lift(__isl_take isl_union_set *uset) -{ - return cond_un_op(uset, &lift_entry); -} - -static int coefficients_entry(void **entry, void *user) -{ - isl_set *set = *entry; - isl_union_set **res = user; - - set = isl_set_copy(set); - set = isl_set_from_basic_set(isl_set_coefficients(set)); - *res = isl_union_set_add_set(*res, set); - - return 0; -} - -__isl_give isl_union_set *isl_union_set_coefficients( - __isl_take isl_union_set *uset) -{ - isl_ctx *ctx; - isl_dim *dim; - isl_union_set *res; - - if (!uset) - return NULL; - - ctx = isl_union_set_get_ctx(uset); - dim = isl_dim_set_alloc(ctx, 0, 0); - res = isl_union_map_alloc(dim, uset->table.n); - if (isl_hash_table_foreach(uset->dim->ctx, &uset->table, - &coefficients_entry, &res) < 0) - goto error; - - isl_union_set_free(uset); - return res; -error: - isl_union_set_free(uset); - isl_union_set_free(res); - return NULL; -} - -static int solutions_entry(void **entry, void *user) -{ - isl_set *set = *entry; - isl_union_set **res = user; - - set = isl_set_copy(set); - set = isl_set_from_basic_set(isl_set_solutions(set)); - if (!*res) - *res = isl_union_set_from_set(set); - else - *res = isl_union_set_add_set(*res, set); - - if (!*res) - return -1; - - return 0; -} - -__isl_give isl_union_set *isl_union_set_solutions( - __isl_take isl_union_set *uset) -{ - isl_union_set *res = NULL; - - if (!uset) - return NULL; - - if (uset->table.n == 0) { - res = isl_union_set_empty(isl_union_set_get_dim(uset)); - isl_union_set_free(uset); - return res; - } - - if (isl_hash_table_foreach(uset->dim->ctx, &uset->table, - &solutions_entry, &res) < 0) - goto error; - - isl_union_set_free(uset); - return res; -error: - isl_union_set_free(uset); - isl_union_set_free(res); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_union_map_private.h b/cloog-0.16.3/isl/isl_union_map_private.h deleted file mode 100644 index 2abd4ff..0000000 --- a/cloog-0.16.3/isl/isl_union_map_private.h +++ /dev/null @@ -1,9 +0,0 @@ -#define isl_union_set isl_union_map -#include - -struct isl_union_map { - int ref; - isl_dim *dim; - - struct isl_hash_table table; -}; diff --git a/cloog-0.16.3/isl/isl_union_templ.c b/cloog-0.16.3/isl/isl_union_templ.c deleted file mode 100644 index c06069d..0000000 --- a/cloog-0.16.3/isl/isl_union_templ.c +++ /dev/null @@ -1,614 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#define xFN(TYPE,NAME) TYPE ## _ ## NAME -#define FN(TYPE,NAME) xFN(TYPE,NAME) -#define xS(TYPE,NAME) struct TYPE ## _ ## NAME -#define S(TYPE,NAME) xS(TYPE,NAME) - -struct UNION { - int ref; -#ifdef HAS_TYPE - enum isl_fold type; -#endif - isl_dim *dim; - - struct isl_hash_table table; -}; - -__isl_give UNION *FN(UNION,cow)(__isl_take UNION *u); - -isl_ctx *FN(UNION,get_ctx)(__isl_keep UNION *u) -{ - return u ? u->dim->ctx : NULL; -} - -__isl_give isl_dim *FN(UNION,get_dim)(__isl_keep UNION *u) -{ - if (!u) - return NULL; - return isl_dim_copy(u->dim); -} - -#ifdef HAS_TYPE -static __isl_give UNION *FN(UNION,alloc)(__isl_take isl_dim *dim, - enum isl_fold type, int size) -#else -static __isl_give UNION *FN(UNION,alloc)(__isl_take isl_dim *dim, int size) -#endif -{ - UNION *u; - - if (!dim) - return NULL; - - u = isl_calloc_type(dim->ctx, UNION); - if (!u) - return NULL; - - u->ref = 1; -#ifdef HAS_TYPE - u->type = type; -#endif - u->dim = dim; - if (isl_hash_table_init(dim->ctx, &u->table, size) < 0) - goto error; - - return u; -error: - isl_dim_free(dim); - FN(UNION,free)(u); - return NULL; -} - -#ifdef HAS_TYPE -__isl_give UNION *FN(UNION,zero)(__isl_take isl_dim *dim, enum isl_fold type) -{ - return FN(UNION,alloc)(dim, type, 16); -} -#else -__isl_give UNION *FN(UNION,zero)(__isl_take isl_dim *dim) -{ - return FN(UNION,alloc)(dim, 16); -} -#endif - -__isl_give UNION *FN(UNION,copy)(__isl_keep UNION *u) -{ - if (!u) - return NULL; - - u->ref++; - return u; -} - -S(UNION,foreach_data) -{ - int (*fn)(__isl_take PART *part, void *user); - void *user; -}; - -static int call_on_copy(void **entry, void *user) -{ - PART *part = *entry; - S(UNION,foreach_data) *data = (S(UNION,foreach_data) *)user; - - return data->fn(FN(PART,copy)(part), data->user); -} - -int FN(FN(UNION,foreach),PARTS)(__isl_keep UNION *u, - int (*fn)(__isl_take PART *part, void *user), void *user) -{ - S(UNION,foreach_data) data = { fn, user }; - - if (!u) - return -1; - - return isl_hash_table_foreach(u->dim->ctx, &u->table, - &call_on_copy, &data); -} - -static int has_dim(const void *entry, const void *val) -{ - PART *part = (PART *)entry; - isl_dim *dim = (isl_dim *)val; - - return isl_dim_equal(part->dim, dim); -} - -__isl_give PART *FN(FN(UNION,extract),PARTS)(__isl_keep UNION *u, - __isl_take isl_dim *dim) -{ - uint32_t hash; - struct isl_hash_table_entry *entry; - - if (!u || !dim) - goto error; - - hash = isl_dim_get_hash(dim); - entry = isl_hash_table_find(u->dim->ctx, &u->table, hash, - &has_dim, dim, 0); - if (!entry) -#ifdef HAS_TYPE - return FN(PART,zero)(dim, u->type); -#else - return FN(PART,zero)(dim); -#endif - isl_dim_free(dim); - return FN(PART,copy)(entry->data); -error: - isl_dim_free(dim); - return NULL; -} - -__isl_give UNION *FN(FN(UNION,add),PARTS)(__isl_take UNION *u, - __isl_take PART *part) -{ - uint32_t hash; - struct isl_hash_table_entry *entry; - - if (!part) - goto error; - - if (FN(PART,is_zero)(part)) { - FN(PART,free)(part); - return u; - } - - u = FN(UNION,cow)(u); - - if (!u) - goto error; - - isl_assert(u->dim->ctx, isl_dim_match(part->dim, isl_dim_param, u->dim, - isl_dim_param), goto error); - - hash = isl_dim_get_hash(part->dim); - entry = isl_hash_table_find(u->dim->ctx, &u->table, hash, - &has_dim, part->dim, 1); - if (!entry) - goto error; - - if (!entry->data) - entry->data = part; - else { - entry->data = FN(PART,add)(entry->data, FN(PART,copy)(part)); - if (!entry->data) - goto error; - FN(PART,free)(part); - if (FN(PART,is_zero)(entry->data)) { - FN(PART,free)(entry->data); - isl_hash_table_remove(u->dim->ctx, &u->table, entry); - } - } - - return u; -error: - FN(PART,free)(part); - FN(UNION,free)(u); - return NULL; -} - -static int add_part(__isl_take PART *part, void *user) -{ - UNION **u = (UNION **)user; - - *u = FN(FN(UNION,add),PARTS)(*u, part); - - return 0; -} - -__isl_give UNION *FN(UNION,dup)(__isl_keep UNION *u) -{ - UNION *dup; - - if (!u) - return NULL; - -#ifdef HAS_TYPE - dup = FN(UNION,zero)(isl_dim_copy(u->dim), u->type); -#else - dup = FN(UNION,zero)(isl_dim_copy(u->dim)); -#endif - if (FN(FN(UNION,foreach),PARTS)(u, &add_part, &dup) < 0) - goto error; - return dup; -error: - FN(UNION,free)(dup); - return NULL; -} - -__isl_give UNION *FN(UNION,cow)(__isl_take UNION *u) -{ - if (!u) - return NULL; - - if (u->ref == 1) - return u; - u->ref--; - return FN(UNION,dup)(u); -} - -static int free_u_entry(void **entry, void *user) -{ - PART *part = *entry; - FN(PART,free)(part); - return 0; -} - -void FN(UNION,free)(__isl_take UNION *u) -{ - if (!u) - return; - - if (--u->ref > 0) - return; - - isl_hash_table_foreach(u->dim->ctx, &u->table, &free_u_entry, NULL); - isl_hash_table_clear(&u->table); - isl_dim_free(u->dim); - free(u); -} - -S(UNION,align) { - isl_reordering *exp; - UNION *res; -}; - -static int align_entry(__isl_take PART *part, void *user) -{ - isl_reordering *exp; - S(UNION,align) *data = user; - - exp = isl_reordering_extend_dim(isl_reordering_copy(data->exp), - FN(PART,get_dim)(part)); - - data->res = FN(FN(UNION,add),PARTS)(data->res, - FN(PART,realign)(part, exp)); - - return 0; -} - -__isl_give UNION *FN(UNION,align_params)(__isl_take UNION *u, - __isl_take isl_dim *model) -{ - S(UNION,align) data = { NULL, NULL }; - - if (!u || !model) - goto error; - - if (isl_dim_match(u->dim, isl_dim_param, model, isl_dim_param)) { - isl_dim_free(model); - return u; - } - - data.exp = isl_parameter_alignment_reordering(u->dim, model); - if (!data.exp) - goto error; - -#ifdef HAS_TYPE - data.res = FN(UNION,alloc)(isl_dim_copy(data.exp->dim), - u->type, u->table.n); -#else - data.res = FN(UNION,alloc)(isl_dim_copy(data.exp->dim), u->table.n); -#endif - if (FN(FN(UNION,foreach),PARTS)(u, &align_entry, &data) < 0) - goto error; - - isl_reordering_free(data.exp); - FN(UNION,free)(u); - isl_dim_free(model); - return data.res; -error: - isl_reordering_free(data.exp); - FN(UNION,free)(u); - FN(UNION,free)(data.res); - isl_dim_free(model); - return NULL; -} - -__isl_give UNION *FN(UNION,add)(__isl_take UNION *u1, __isl_take UNION *u2) -{ - u1 = FN(UNION,align_params)(u1, FN(UNION,get_dim)(u2)); - u2 = FN(UNION,align_params)(u2, FN(UNION,get_dim)(u1)); - - u1 = FN(UNION,cow)(u1); - - if (!u1 || !u2) - goto error; - - if (FN(FN(UNION,foreach),PARTS)(u2, &add_part, &u1) < 0) - goto error; - - FN(UNION,free)(u2); - - return u1; -error: - FN(UNION,free)(u1); - FN(UNION,free)(u2); - return NULL; -} - -__isl_give UNION *FN(FN(UNION,from),PARTS)(__isl_take PART *part) -{ - isl_dim *dim; - UNION *u; - - if (!part) - return NULL; - - dim = FN(PART,get_dim)(part); - dim = isl_dim_drop(dim, isl_dim_in, 0, isl_dim_size(dim, isl_dim_in)); - dim = isl_dim_drop(dim, isl_dim_out, 0, isl_dim_size(dim, isl_dim_out)); -#ifdef HAS_TYPE - u = FN(UNION,zero)(dim, part->type); -#else - u = FN(UNION,zero)(dim); -#endif - u = FN(FN(UNION,add),PARTS)(u, part); - - return u; -} - -S(UNION,match_bin_data) { - UNION *u2; - UNION *res; -}; - -/* This function is currently only used from isl_polynomial.c - * and not from isl_fold.c. - */ -static __isl_give UNION *match_bin_op(__isl_take UNION *u1, - __isl_take UNION *u2, - int (*fn)(void **, void *)) __attribute__ ((unused)); -static __isl_give UNION *match_bin_op(__isl_take UNION *u1, - __isl_take UNION *u2, int (*fn)(void **, void *)) -{ - S(UNION,match_bin_data) data = { NULL, NULL }; - - u1 = FN(UNION,align_params)(u1, FN(UNION,get_dim)(u2)); - u2 = FN(UNION,align_params)(u2, FN(UNION,get_dim)(u1)); - - if (!u1 || !u2) - goto error; - - data.u2 = u2; -#ifdef HAS_TYPE - data.res = FN(UNION,alloc)(isl_dim_copy(u1->dim), u1->type, u1->table.n); -#else - data.res = FN(UNION,alloc)(isl_dim_copy(u1->dim), u1->table.n); -#endif - if (isl_hash_table_foreach(u1->dim->ctx, &u1->table, fn, &data) < 0) - goto error; - - FN(UNION,free)(u1); - FN(UNION,free)(u2); - return data.res; -error: - FN(UNION,free)(u1); - FN(UNION,free)(u2); - FN(UNION,free)(data.res); - return NULL; -} - -S(UNION,match_set_data) { - isl_union_set *uset; - UNION *res; - __isl_give PW *(*fn)(__isl_take PW*, __isl_take isl_set*); -}; - -static int set_has_dim(const void *entry, const void *val) -{ - isl_set *set = (isl_set *)entry; - isl_dim *dim = (isl_dim *)val; - - return isl_dim_equal(set->dim, dim); -} - -static int match_set_entry(void **entry, void *user) -{ - S(UNION,match_set_data) *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - PW *pw = *entry; - int empty; - - hash = isl_dim_get_hash(pw->dim); - entry2 = isl_hash_table_find(data->uset->dim->ctx, &data->uset->table, - hash, &set_has_dim, pw->dim, 0); - if (!entry2) - return 0; - - pw = FN(PW,copy)(pw); - pw = data->fn(pw, isl_set_copy(entry2->data)); - - empty = FN(PW,is_zero)(pw); - if (empty < 0) { - FN(PW,free)(pw); - return -1; - } - if (empty) { - FN(PW,free)(pw); - return 0; - } - - data->res = FN(FN(UNION,add),PARTS)(data->res, pw); - - return 0; -} - -static __isl_give UNION *match_set_op(__isl_take UNION *u, - __isl_take isl_union_set *uset, - __isl_give PW *(*fn)(__isl_take PW*, __isl_take isl_set*)) -{ - S(UNION,match_set_data) data = { NULL, NULL, fn }; - - u = FN(UNION,align_params)(u, isl_union_set_get_dim(uset)); - uset = isl_union_set_align_params(uset, FN(UNION,get_dim)(u)); - - if (!u || !uset) - goto error; - - data.uset = uset; -#ifdef HAS_TYPE - data.res = FN(UNION,alloc)(isl_dim_copy(u->dim), u->type, u->table.n); -#else - data.res = FN(UNION,alloc)(isl_dim_copy(u->dim), u->table.n); -#endif - if (isl_hash_table_foreach(u->dim->ctx, &u->table, - &match_set_entry, &data) < 0) - goto error; - - FN(UNION,free)(u); - isl_union_set_free(uset); - return data.res; -error: - FN(UNION,free)(u); - isl_union_set_free(uset); - FN(UNION,free)(data.res); - return NULL; -} - -__isl_give UNION *FN(UNION,intersect_domain)(__isl_take UNION *u, - __isl_take isl_union_set *uset) -{ - return match_set_op(u, uset, &FN(PW,intersect_domain)); -} - -__isl_give UNION *FN(UNION,gist)(__isl_take UNION *u, - __isl_take isl_union_set *uset) -{ - return match_set_op(u, uset, &FN(PW,gist)); -} - -__isl_give isl_qpolynomial *FN(UNION,eval)(__isl_take UNION *u, - __isl_take isl_point *pnt) -{ - uint32_t hash; - struct isl_hash_table_entry *entry; - isl_qpolynomial *qp; - - if (!u || !pnt) - goto error; - - hash = isl_dim_get_hash(pnt->dim); - entry = isl_hash_table_find(u->dim->ctx, &u->table, - hash, &has_dim, pnt->dim, 0); - if (!entry) { - qp = isl_qpolynomial_zero(isl_dim_copy(pnt->dim)); - isl_point_free(pnt); - } else { - qp = FN(PART,eval)(FN(PART,copy)(entry->data), pnt); - } - FN(UNION,free)(u); - return qp; -error: - FN(UNION,free)(u); - isl_point_free(pnt); - return NULL; -} - -static int coalesce_entry(void **entry, void *user) -{ - PW **pw = (PW **)entry; - - *pw = FN(PW,coalesce)(*pw); - if (!*pw) - return -1; - - return 0; -} - -__isl_give UNION *FN(UNION,coalesce)(__isl_take UNION *u) -{ - if (!u) - return NULL; - - if (isl_hash_table_foreach(u->dim->ctx, &u->table, - &coalesce_entry, NULL) < 0) - goto error; - - return u; -error: - FN(UNION,free)(u); - return NULL; -} - -static int domain(__isl_take PART *part, void *user) -{ - isl_union_set **uset = (isl_union_set **)user; - - *uset = isl_union_set_add_set(*uset, FN(PART,domain)(part)); - - return 0; -} - -__isl_give isl_union_set *FN(UNION,domain)(__isl_take UNION *u) -{ - isl_union_set *uset; - - uset = isl_union_set_empty(FN(UNION,get_dim)(u)); - if (FN(FN(UNION,foreach),PARTS)(u, &domain, &uset) < 0) - goto error; - - FN(UNION,free)(u); - - return uset; -error: - isl_union_set_free(uset); - FN(UNION,free)(u); - return NULL; -} - -static int mul_isl_int(void **entry, void *user) -{ - PW **pw = (PW **)entry; - isl_int *v = user; - - *pw = FN(PW,mul_isl_int)(*pw, *v); - if (!*pw) - return -1; - - return 0; -} - -__isl_give UNION *FN(UNION,mul_isl_int)(__isl_take UNION *u, isl_int v) -{ - if (isl_int_is_one(v)) - return u; - - if (u && isl_int_is_zero(v)) { - UNION *zero; - isl_dim *dim = FN(UNION,get_dim)(u); -#ifdef HAS_TYPE - zero = FN(UNION,zero)(dim, u->type); -#else - zero = FN(UNION,zero)(dim); -#endif - FN(UNION,free)(u); - return zero; - } - - u = FN(UNION,cow)(u); - if (!u) - return NULL; - -#ifdef HAS_TYPE - if (isl_int_is_neg(v)) - u->type = isl_fold_type_negate(u->type); -#endif - if (isl_hash_table_foreach(u->dim->ctx, &u->table, &mul_isl_int, v) < 0) - goto error; - - return u; -error: - FN(UNION,free)(u); - return NULL; -} diff --git a/cloog-0.16.3/isl/isl_vec.c b/cloog-0.16.3/isl/isl_vec.c deleted file mode 100644 index b0bd1a3..0000000 --- a/cloog-0.16.3/isl/isl_vec.c +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include - -isl_ctx *isl_vec_get_ctx(__isl_keep isl_vec *vec) -{ - return vec ? vec->ctx : NULL; -} - -struct isl_vec *isl_vec_alloc(struct isl_ctx *ctx, unsigned size) -{ - struct isl_vec *vec; - - vec = isl_alloc_type(ctx, struct isl_vec); - if (!vec) - return NULL; - - vec->block = isl_blk_alloc(ctx, size); - if (isl_blk_is_error(vec->block)) - goto error; - - vec->ctx = ctx; - isl_ctx_ref(ctx); - vec->ref = 1; - vec->size = size; - vec->el = vec->block.data; - - return vec; -error: - isl_blk_free(ctx, vec->block); - return NULL; -} - -__isl_give isl_vec *isl_vec_extend(__isl_take isl_vec *vec, unsigned size) -{ - if (!vec) - return NULL; - if (size <= vec->size) - return vec; - - vec = isl_vec_cow(vec); - if (!vec) - return NULL; - - vec->block = isl_blk_extend(vec->ctx, vec->block, size); - if (!vec->block.data) - goto error; - - vec->size = size; - vec->el = vec->block.data; - - return vec; -error: - isl_vec_free(vec); - return NULL; -} - -__isl_give isl_vec *isl_vec_zero_extend(__isl_take isl_vec *vec, unsigned size) -{ - int extra; - - if (!vec) - return NULL; - if (size <= vec->size) - return vec; - - vec = isl_vec_cow(vec); - if (!vec) - return NULL; - - extra = size - vec->size; - vec = isl_vec_extend(vec, size); - if (!vec) - return NULL; - - isl_seq_clr(vec->el + size - extra, extra); - - return vec; -} - -struct isl_vec *isl_vec_copy(struct isl_vec *vec) -{ - if (!vec) - return NULL; - - vec->ref++; - return vec; -} - -struct isl_vec *isl_vec_dup(struct isl_vec *vec) -{ - struct isl_vec *vec2; - - if (!vec) - return NULL; - vec2 = isl_vec_alloc(vec->ctx, vec->size); - isl_seq_cpy(vec2->el, vec->el, vec->size); - return vec2; -} - -struct isl_vec *isl_vec_cow(struct isl_vec *vec) -{ - struct isl_vec *vec2; - if (!vec) - return NULL; - - if (vec->ref == 1) - return vec; - - vec2 = isl_vec_dup(vec); - isl_vec_free(vec); - return vec2; -} - -void isl_vec_free(struct isl_vec *vec) -{ - if (!vec) - return; - - if (--vec->ref > 0) - return; - - isl_ctx_deref(vec->ctx); - isl_blk_free(vec->ctx, vec->block); - free(vec); -} - -int isl_vec_is_equal(__isl_keep isl_vec *vec1, __isl_keep isl_vec *vec2) -{ - if (!vec1 || !vec2) - return -1; - - if (vec1->size != vec2->size) - return 0; - - return isl_seq_eq(vec1->el, vec2->el, vec1->size); -} - -__isl_give isl_printer *isl_printer_print_vec(__isl_take isl_printer *printer, - __isl_keep isl_vec *vec) -{ - int i; - - if (!printer || !vec) - goto error; - - printer = isl_printer_print_str(printer, "["); - for (i = 0; i < vec->size; ++i) { - if (i) - printer = isl_printer_print_str(printer, ","); - printer = isl_printer_print_isl_int(printer, vec->el[i]); - } - printer = isl_printer_print_str(printer, "]"); - - return printer; -error: - isl_printer_free(printer); - return NULL; -} - -void isl_vec_dump(struct isl_vec *vec) -{ - isl_printer *printer; - - if (!vec) - return; - - printer = isl_printer_to_file(vec->ctx, stderr); - printer = isl_printer_print_vec(printer, vec); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -__isl_give isl_vec *isl_vec_clr(__isl_take isl_vec *vec) -{ - vec = isl_vec_cow(vec); - if (!vec) - return NULL; - isl_seq_clr(vec->el, vec->size); - return vec; -} - -void isl_vec_lcm(struct isl_vec *vec, isl_int *lcm) -{ - isl_seq_lcm(vec->block.data, vec->size, lcm); -} - -/* Given a rational vector, with the denominator in the first element - * of the vector, round up all coordinates. - */ -struct isl_vec *isl_vec_ceil(struct isl_vec *vec) -{ - vec = isl_vec_cow(vec); - if (!vec) - return NULL; - - isl_seq_cdiv_q(vec->el + 1, vec->el + 1, vec->el[0], vec->size - 1); - - isl_int_set_si(vec->el[0], 1); - - return vec; -} - -struct isl_vec *isl_vec_normalize(struct isl_vec *vec) -{ - if (!vec) - return NULL; - isl_seq_normalize(vec->ctx, vec->el, vec->size); - return vec; -} - -__isl_give isl_vec *isl_vec_scale(__isl_take isl_vec *vec, isl_int m) -{ - if (isl_int_is_one(m)) - return vec; - vec = isl_vec_cow(vec); - if (!vec) - return NULL; - isl_seq_scale(vec->el, vec->el, m, vec->size); - return vec; -} - -__isl_give isl_vec *isl_vec_add(__isl_take isl_vec *vec1, - __isl_take isl_vec *vec2) -{ - vec1 = isl_vec_cow(vec1); - if (!vec1 || !vec2) - goto error; - - isl_assert(vec1->ctx, vec1->size == vec2->size, goto error); - - isl_seq_combine(vec1->el, vec1->ctx->one, vec1->el, - vec1->ctx->one, vec2->el, vec1->size); - - isl_vec_free(vec2); - return vec1; -error: - isl_vec_free(vec1); - isl_vec_free(vec2); - return NULL; -} - -static int qsort_int_cmp(const void *p1, const void *p2) -{ - const isl_int *i1 = (const isl_int *) p1; - const isl_int *i2 = (const isl_int *) p2; - - return isl_int_cmp(*i1, *i2); -} - -__isl_give isl_vec *isl_vec_sort(__isl_take isl_vec *vec) -{ - if (!vec) - return NULL; - - qsort(vec->el, vec->size, sizeof(*vec->el), &qsort_int_cmp); - - return vec; -} - -__isl_give isl_vec *isl_vec_drop_els(__isl_take isl_vec *vec, - unsigned pos, unsigned n) -{ - if (n == 0) - return vec; - vec = isl_vec_cow(vec); - if (!vec) - return NULL; - - if (pos + n > vec->size) - isl_die(vec->ctx, isl_error_invalid, - "range out of bounds", goto error); - - if (pos + n != vec->size) - isl_seq_cpy(vec->el + pos, vec->el + pos + n, - vec->size - pos - n); - - vec->size -= n; - - return vec; -error: - isl_vec_free(vec); - return NULL; -} - -__isl_give isl_vec *isl_vec_insert_els(__isl_take isl_vec *vec, - unsigned pos, unsigned n) -{ - isl_vec *ext = NULL; - - if (n == 0) - return vec; - if (!vec) - return NULL; - - if (pos > vec->size) - isl_die(vec->ctx, isl_error_invalid, - "position out of bounds", goto error); - - ext = isl_vec_alloc(vec->ctx, vec->size + n); - if (!ext) - goto error; - - isl_seq_cpy(ext->el, vec->el, pos); - isl_seq_cpy(ext->el + pos + n, vec->el + pos, vec->size - pos); - - isl_vec_free(vec); - return ext; -error: - isl_vec_free(vec); - isl_vec_free(ext); - return NULL; -} - -__isl_give isl_vec *isl_vec_insert_zero_els(__isl_take isl_vec *vec, - unsigned pos, unsigned n) -{ - vec = isl_vec_insert_els(vec, pos, n); - if (!vec) - return NULL; - - isl_seq_clr(vec->el + pos, n); - - return vec; -} diff --git a/cloog-0.16.3/isl/isl_version.c b/cloog-0.16.3/isl/isl_version.c deleted file mode 100644 index 1a59f55..0000000 --- a/cloog-0.16.3/isl/isl_version.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "gitversion.h" - -const char *isl_version(void) -{ - return GIT_HEAD_ID"\n"; -} diff --git a/cloog-0.16.3/isl/isl_vertices.c b/cloog-0.16.3/isl/isl_vertices.c deleted file mode 100644 index 9611d6b..0000000 --- a/cloog-0.16.3/isl/isl_vertices.c +++ /dev/null @@ -1,1571 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#define SELECTED 1 -#define DESELECTED -1 -#define UNSELECTED 0 - -static __isl_give isl_vertices *compute_chambers(__isl_take isl_basic_set *bset, - __isl_take isl_vertices *vertices); - -__isl_give isl_vertices *isl_vertices_copy(__isl_keep isl_vertices *vertices) -{ - if (!vertices) - return NULL; - - vertices->ref++; - return vertices; -} - -void isl_vertices_free(__isl_take isl_vertices *vertices) -{ - int i; - - if (!vertices) - return; - - if (--vertices->ref > 0) - return; - - for (i = 0; i < vertices->n_vertices; ++i) { - isl_basic_set_free(vertices->v[i].vertex); - isl_basic_set_free(vertices->v[i].dom); - } - free(vertices->v); - - for (i = 0; i < vertices->n_chambers; ++i) { - free(vertices->c[i].vertices); - isl_basic_set_free(vertices->c[i].dom); - } - free(vertices->c); - - isl_basic_set_free(vertices->bset); - free(vertices); -} - -struct isl_vertex_list { - struct isl_vertex v; - struct isl_vertex_list *next; -}; - -static void free_vertex_list(struct isl_vertex_list *list) -{ - struct isl_vertex_list *next; - - for (; list; list = next) { - next = list->next; - isl_basic_set_free(list->v.vertex); - isl_basic_set_free(list->v.dom); - free(list); - } -} - -static __isl_give isl_vertices *vertices_from_list(__isl_keep isl_basic_set *bset, - int n_vertices, struct isl_vertex_list *list) -{ - int i; - struct isl_vertex_list *next; - isl_vertices *vertices; - - vertices = isl_calloc_type(bset->ctx, isl_vertices); - if (!vertices) - goto error; - vertices->ref = 1; - vertices->bset = isl_basic_set_copy(bset); - vertices->v = isl_alloc_array(bset->ctx, struct isl_vertex, n_vertices); - if (!vertices->v) - goto error; - vertices->n_vertices = n_vertices; - - for (i = 0; list; list = next, i++) { - next = list->next; - vertices->v[i] = list->v; - free(list); - } - - return vertices; -error: - free(vertices); - free_vertex_list(list); - return NULL; -} - -/* Prepend a vertex to the linked list "list" based on the equalities in "tab". - */ -static int add_vertex(struct isl_vertex_list **list, - __isl_keep isl_basic_set *bset, struct isl_tab *tab) -{ - unsigned nvar; - unsigned nparam; - struct isl_vertex_list *v = NULL; - - if (isl_tab_detect_implicit_equalities(tab) < 0) - return -1; - - nvar = isl_basic_set_dim(bset, isl_dim_set); - nparam = isl_basic_set_dim(bset, isl_dim_param); - - v = isl_calloc_type(tab->mat->ctx, struct isl_vertex_list); - if (!v) - goto error; - - v->v.vertex = isl_basic_set_copy(bset); - v->v.vertex = isl_basic_set_cow(v->v.vertex); - v->v.vertex = isl_basic_set_update_from_tab(v->v.vertex, tab); - v->v.vertex = isl_basic_set_simplify(v->v.vertex); - v->v.vertex = isl_basic_set_finalize(v->v.vertex); - if (!v->v.vertex) - goto error; - isl_assert(bset->ctx, v->v.vertex->n_eq >= nvar, goto error); - v->v.dom = isl_basic_set_copy(v->v.vertex); - v->v.dom = isl_basic_set_project_out(v->v.dom, isl_dim_set, 0, nvar); - if (!v->v.dom) - goto error; - - v->next = *list; - *list = v; - - return 0; -error: - free_vertex_list(v); - return -1; -} - -/* Compute the parametric vertices and the chamber decomposition - * of an empty parametric polytope. - */ -static __isl_give isl_vertices *vertices_empty(__isl_keep isl_basic_set *bset) -{ - isl_vertices *vertices; - unsigned nparam; - - if (!bset) - return NULL; - - nparam = isl_basic_set_dim(bset, isl_dim_param); - - vertices = isl_calloc_type(bset->ctx, isl_vertices); - if (!vertices) - return NULL; - vertices->bset = isl_basic_set_copy(bset); - vertices->ref = 1; - - vertices->n_vertices = 0; - vertices->n_chambers = 0; - - return vertices; -} - -/* Compute the parametric vertices and the chamber decomposition - * of the parametric polytope defined using the same constraints - * as "bset" in the 0D case. - * There is exactly one 0D vertex and a single chamber containing - * the vertex. - */ -static __isl_give isl_vertices *vertices_0D(__isl_keep isl_basic_set *bset) -{ - isl_vertices *vertices; - unsigned nparam; - - if (!bset) - return NULL; - - nparam = isl_basic_set_dim(bset, isl_dim_param); - - vertices = isl_calloc_type(bset->ctx, isl_vertices); - if (!vertices) - return NULL; - vertices->ref = 1; - vertices->bset = isl_basic_set_copy(bset); - - vertices->v = isl_calloc_array(bset->ctx, struct isl_vertex, 1); - if (!vertices->v) - goto error; - vertices->n_vertices = 1; - vertices->v[0].vertex = isl_basic_set_copy(bset); - if (!vertices->v[0].vertex) - goto error; - - vertices->c = isl_calloc_array(bset->ctx, struct isl_chamber, 1); - if (!vertices->c) - goto error; - vertices->n_chambers = 1; - vertices->c[0].n_vertices = 1; - vertices->c[0].vertices = isl_calloc_array(bset->ctx, int, 1); - if (!vertices->c[0].vertices) - goto error; - vertices->c[0].dom = isl_basic_set_copy(bset); - if (!vertices->c[0].dom) - goto error; - - return vertices; -error: - isl_vertices_free(vertices); - return NULL; -} - -static int isl_mat_rank(__isl_keep isl_mat *mat) -{ - int row, col; - isl_mat *H; - - H = isl_mat_left_hermite(isl_mat_copy(mat), 0, NULL, NULL); - if (!H) - return -1; - - for (col = 0; col < H->n_col; ++col) { - for (row = 0; row < H->n_row; ++row) - if (!isl_int_is_zero(H->row[row][col])) - break; - if (row == H->n_row) - break; - } - - isl_mat_free(H); - - return col; -} - -/* Is the row pointed to by "f" linearly independent of the "n" first - * rows in "facets"? - */ -static int is_independent(__isl_keep isl_mat *facets, int n, isl_int *f) -{ - int rank; - - if (isl_seq_first_non_zero(f, facets->n_col) < 0) - return 0; - - isl_seq_cpy(facets->row[n], f, facets->n_col); - facets->n_row = n + 1; - rank = isl_mat_rank(facets); - if (rank < 0) - return -1; - - return rank == n + 1; -} - -/* Check whether we can select constraint "level", given the current selection - * reflected by facets in "tab", the rows of "facets" and the earlier - * "selected" elements of "selection". - * - * If the constraint is (strictly) redundant in the tableau, selecting it would - * result in an empty tableau, so it can't be selected. - * If the set variable part of the constraint is not linearly indepedent - * of the set variable parts of the already selected constraints, - * the constraint cannot be selected. - * If selecting the constraint results in an empty tableau, the constraint - * cannot be selected. - * Finally, if selecting the constraint results in some explicitly - * deselected constraints turning into equalities, then the corresponding - * vertices have already been generated, so the constraint cannot be selected. - */ -static int can_select(__isl_keep isl_basic_set *bset, int level, - struct isl_tab *tab, __isl_keep isl_mat *facets, int selected, - int *selection) -{ - int i; - int indep; - unsigned ovar; - struct isl_tab_undo *snap; - - if (isl_tab_is_redundant(tab, level)) - return 0; - - ovar = isl_dim_offset(bset->dim, isl_dim_set); - - indep = is_independent(facets, selected, bset->ineq[level] + 1 + ovar); - if (indep < 0) - return -1; - if (!indep) - return 0; - - snap = isl_tab_snap(tab); - if (isl_tab_select_facet(tab, level) < 0) - return -1; - - if (tab->empty) { - if (isl_tab_rollback(tab, snap) < 0) - return -1; - return 0; - } - - for (i = 0; i < level; ++i) { - int sgn; - - if (selection[i] != DESELECTED) - continue; - - if (isl_tab_is_equality(tab, i)) - sgn = 0; - else if (isl_tab_is_redundant(tab, i)) - sgn = 1; - else - sgn = isl_tab_sign_of_max(tab, i); - if (sgn < -1) - return -1; - if (sgn <= 0) { - if (isl_tab_rollback(tab, snap) < 0) - return -1; - return 0; - } - } - - return 1; -} - -/* Compute the parametric vertices and the chamber decomposition - * of a parametric polytope that is not full-dimensional. - * - * Simply map the parametric polytope to a lower dimensional space - * and map the resulting vertices back. - */ -static __isl_give isl_vertices *lower_dim_vertices( - __isl_keep isl_basic_set *bset) -{ - isl_morph *morph; - isl_vertices *vertices; - - bset = isl_basic_set_copy(bset); - morph = isl_basic_set_full_compression(bset); - bset = isl_morph_basic_set(isl_morph_copy(morph), bset); - - vertices = isl_basic_set_compute_vertices(bset); - isl_basic_set_free(bset); - - morph = isl_morph_inverse(morph); - - vertices = isl_morph_vertices(morph, vertices); - - return vertices; -} - -/* Compute the parametric vertices and the chamber decomposition - * of the parametric polytope defined using the same constraints - * as "bset". "bset" is assumed to have no existentially quantified - * variables. - * - * The vertices themselves are computed in a fairly simplistic way. - * We simply run through all combinations of d constraints, - * with d the number of set variables, and check if those d constraints - * define a vertex. To avoid the generation of duplicate vertices, - * which we may happen if a vertex is defined by more that d constraints, - * we make sure we only generate the vertex for the d constraints with - * smallest index. - * - * We set up a tableau and keep track of which facets have been - * selected. The tableau is marked strict_redundant so that we can be - * sure that any constraint that is marked redundant (and that is not - * also marked zero) is not an equality. - * If a constraint is marked DESELECTED, it means the constraint was - * SELECTED before (in combination with the same selection of earlier - * constraints). If such a deselected constraint turns out to be an - * equality, then any vertex that may still be found with the current - * selection has already been generated when the constraint was selected. - * A constraint is marked UNSELECTED when there is no way selecting - * the constraint could lead to a vertex (in combination with the current - * selection of earlier constraints). - * - * The set variable coefficients of the selected constraints are stored - * in the facets matrix. - */ -__isl_give isl_vertices *isl_basic_set_compute_vertices( - __isl_keep isl_basic_set *bset) -{ - struct isl_tab *tab; - int level; - int init; - unsigned nvar; - int *selection = NULL; - int selected; - struct isl_tab_undo **snap = NULL; - isl_mat *facets = NULL; - struct isl_vertex_list *list = NULL; - int n_vertices = 0; - isl_vertices *vertices; - - if (!bset) - return NULL; - - if (isl_basic_set_plain_is_empty(bset)) - return vertices_empty(bset); - - if (bset->n_eq != 0) - return lower_dim_vertices(bset); - - isl_assert(bset->ctx, isl_basic_set_dim(bset, isl_dim_div) == 0, - return NULL); - - if (isl_basic_set_dim(bset, isl_dim_set) == 0) - return vertices_0D(bset); - - nvar = isl_basic_set_dim(bset, isl_dim_set); - - bset = isl_basic_set_copy(bset); - bset = isl_basic_set_set_rational(bset); - if (!bset) - return NULL; - - tab = isl_tab_from_basic_set(bset); - if (!tab) - goto error; - tab->strict_redundant = 1; - - if (tab->empty) { - vertices = vertices_empty(bset); - isl_basic_set_free(bset); - isl_tab_free(tab); - return vertices; - } - - selection = isl_alloc_array(bset->ctx, int, bset->n_ineq); - snap = isl_alloc_array(bset->ctx, struct isl_tab_undo *, bset->n_ineq); - facets = isl_mat_alloc(bset->ctx, nvar, nvar); - if (!selection || !snap || !facets) - goto error; - - level = 0; - init = 1; - selected = 0; - - while (level >= 0) { - if (level >= bset->n_ineq || - (!init && selection[level] != SELECTED)) { - --level; - init = 0; - continue; - } - if (init) { - int ok; - snap[level] = isl_tab_snap(tab); - ok = can_select(bset, level, tab, facets, selected, - selection); - if (ok < 0) - goto error; - if (ok) { - selection[level] = SELECTED; - selected++; - } else - selection[level] = UNSELECTED; - } else { - selection[level] = DESELECTED; - selected--; - if (isl_tab_rollback(tab, snap[level]) < 0) - goto error; - } - if (selected == nvar) { - if (tab->n_dead == nvar) { - if (add_vertex(&list, bset, tab) < 0) - goto error; - n_vertices++; - } - init = 0; - continue; - } - ++level; - init = 1; - } - - isl_mat_free(facets); - free(selection); - free(snap); - - isl_tab_free(tab); - - vertices = vertices_from_list(bset, n_vertices, list); - - vertices = compute_chambers(bset, vertices); - - return vertices; -error: - isl_mat_free(facets); - free(selection); - free(snap); - isl_tab_free(tab); - isl_basic_set_free(bset); - return NULL; -} - -struct isl_chamber_list { - struct isl_chamber c; - struct isl_chamber_list *next; -}; - -static void free_chamber_list(struct isl_chamber_list *list) -{ - struct isl_chamber_list *next; - - for (; list; list = next) { - next = list->next; - isl_basic_set_free(list->c.dom); - free(list->c.vertices); - free(list); - } -} - -/* Check whether the basic set "bset" is a superset of the basic set described - * by "tab", i.e., check whether all constraints of "bset" are redundant. - */ -static int bset_covers_tab(__isl_keep isl_basic_set *bset, struct isl_tab *tab) -{ - int i; - - if (!bset || !tab) - return -1; - - for (i = 0; i < bset->n_ineq; ++i) { - enum isl_ineq_type type = isl_tab_ineq_type(tab, bset->ineq[i]); - switch (type) { - case isl_ineq_error: return -1; - case isl_ineq_redundant: continue; - default: return 0; - } - } - - return 1; -} - -static __isl_give isl_vertices *vertices_add_chambers( - __isl_take isl_vertices *vertices, int n_chambers, - struct isl_chamber_list *list) -{ - int i; - isl_ctx *ctx; - struct isl_chamber_list *next; - - ctx = isl_vertices_get_ctx(vertices); - vertices->c = isl_alloc_array(ctx, struct isl_chamber, n_chambers); - if (!vertices->c) - goto error; - vertices->n_chambers = n_chambers; - - for (i = 0; list; list = next, i++) { - next = list->next; - vertices->c[i] = list->c; - free(list); - } - - return vertices; -error: - isl_vertices_free(vertices); - free_chamber_list(list); - return NULL; -} - -/* Can "tab" be intersected with "bset" without resulting in - * a lower-dimensional set. - */ -static int can_intersect(struct isl_tab *tab, __isl_keep isl_basic_set *bset) -{ - int i; - struct isl_tab_undo *snap; - - if (isl_tab_extend_cons(tab, bset->n_ineq) < 0) - return -1; - - snap = isl_tab_snap(tab); - - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_tab_ineq_type(tab, bset->ineq[i]) == isl_ineq_redundant) - continue; - if (isl_tab_add_ineq(tab, bset->ineq[i]) < 0) - return -1; - } - - if (isl_tab_detect_implicit_equalities(tab) < 0) - return -1; - if (tab->n_dead) { - if (isl_tab_rollback(tab, snap) < 0) - return -1; - return 0; - } - - return 1; -} - -static int add_chamber(struct isl_chamber_list **list, - __isl_keep isl_vertices *vertices, struct isl_tab *tab, int *selection) -{ - int n_frozen; - int i, j; - int n_vertices = 0; - struct isl_tab_undo *snap; - struct isl_chamber_list *c = NULL; - - for (i = 0; i < vertices->n_vertices; ++i) - if (selection[i]) - n_vertices++; - - snap = isl_tab_snap(tab); - - for (i = 0; i < tab->n_con && tab->con[i].frozen; ++i) - tab->con[i].frozen = 0; - n_frozen = i; - - if (isl_tab_detect_redundant(tab) < 0) - return -1; - - c = isl_calloc_type(tab->mat->ctx, struct isl_chamber_list); - if (!c) - goto error; - c->c.vertices = isl_alloc_array(tab->mat->ctx, int, n_vertices); - if (!c->c.vertices) - goto error; - c->c.dom = isl_basic_set_from_basic_map(isl_basic_map_copy(tab->bmap)); - c->c.dom = isl_basic_set_set_rational(c->c.dom); - c->c.dom = isl_basic_set_cow(c->c.dom); - c->c.dom = isl_basic_set_update_from_tab(c->c.dom, tab); - c->c.dom = isl_basic_set_simplify(c->c.dom); - c->c.dom = isl_basic_set_finalize(c->c.dom); - if (!c->c.dom) - goto error; - - c->c.n_vertices = n_vertices; - - for (i = 0, j = 0; i < vertices->n_vertices; ++i) - if (selection[i]) { - c->c.vertices[j] = i; - j++; - } - - c->next = *list; - *list = c; - - for (i = 0; i < n_frozen; ++i) - tab->con[i].frozen = 1; - - if (isl_tab_rollback(tab, snap) < 0) - return -1; - - return 0; -error: - free_chamber_list(c); - return -1; -} - -struct isl_facet_todo { - struct isl_tab *tab; /* A tableau representation of the facet */ - isl_basic_set *bset; /* A normalized basic set representation */ - isl_vec *constraint; /* Constraint pointing to the other side */ - struct isl_facet_todo *next; -}; - -static void free_todo(struct isl_facet_todo *todo) -{ - while (todo) { - struct isl_facet_todo *next = todo->next; - - isl_tab_free(todo->tab); - isl_basic_set_free(todo->bset); - isl_vec_free(todo->constraint); - free(todo); - - todo = next; - } -} - -static struct isl_facet_todo *create_todo(struct isl_tab *tab, int con) -{ - int i; - int n_frozen; - struct isl_tab_undo *snap; - struct isl_facet_todo *todo; - - snap = isl_tab_snap(tab); - - for (i = 0; i < tab->n_con && tab->con[i].frozen; ++i) - tab->con[i].frozen = 0; - n_frozen = i; - - if (isl_tab_detect_redundant(tab) < 0) - return NULL; - - todo = isl_calloc_type(tab->mat->ctx, struct isl_facet_todo); - if (!todo) - return NULL; - - todo->constraint = isl_vec_alloc(tab->mat->ctx, 1 + tab->n_var); - if (!todo->constraint) - goto error; - isl_seq_neg(todo->constraint->el, tab->bmap->ineq[con], 1 + tab->n_var); - todo->bset = isl_basic_set_from_basic_map(isl_basic_map_copy(tab->bmap)); - todo->bset = isl_basic_set_set_rational(todo->bset); - todo->bset = isl_basic_set_cow(todo->bset); - todo->bset = isl_basic_set_update_from_tab(todo->bset, tab); - todo->bset = isl_basic_set_simplify(todo->bset); - todo->bset = isl_basic_set_sort_constraints(todo->bset); - if (!todo->bset) - goto error; - ISL_F_SET(todo->bset, ISL_BASIC_SET_NORMALIZED); - todo->tab = isl_tab_dup(tab); - if (!todo->tab) - goto error; - - for (i = 0; i < n_frozen; ++i) - tab->con[i].frozen = 1; - - if (isl_tab_rollback(tab, snap) < 0) - goto error; - - return todo; -error: - free_todo(todo); - return NULL; -} - -/* Create todo items for all interior facets of the chamber represented - * by "tab" and collect them in "next". - */ -static int init_todo(struct isl_facet_todo **next, struct isl_tab *tab) -{ - int i; - struct isl_tab_undo *snap; - struct isl_facet_todo *todo; - - snap = isl_tab_snap(tab); - - for (i = 0; i < tab->n_con; ++i) { - if (tab->con[i].frozen) - continue; - if (tab->con[i].is_redundant) - continue; - - if (isl_tab_select_facet(tab, i) < 0) - return -1; - - todo = create_todo(tab, i); - if (!todo) - return -1; - - todo->next = *next; - *next = todo; - - if (isl_tab_rollback(tab, snap) < 0) - return -1; - } - - return 0; -} - -/* Does the linked list contain a todo item that is the opposite of "todo". - * If so, return 1 and remove the opposite todo item. - */ -static int has_opposite(struct isl_facet_todo *todo, - struct isl_facet_todo **list) -{ - for (; *list; list = &(*list)->next) { - int eq; - eq = isl_basic_set_plain_is_equal(todo->bset, (*list)->bset); - if (eq < 0) - return -1; - if (!eq) - continue; - todo = *list; - *list = todo->next; - todo->next = NULL; - free_todo(todo); - return 1; - } - - return 0; -} - -/* Create todo items for all interior facets of the chamber represented - * by "tab" and collect them in first->next, taking care to cancel - * opposite todo items. - */ -static int update_todo(struct isl_facet_todo *first, struct isl_tab *tab) -{ - int i; - struct isl_tab_undo *snap; - struct isl_facet_todo *todo; - - snap = isl_tab_snap(tab); - - for (i = 0; i < tab->n_con; ++i) { - int drop; - - if (tab->con[i].frozen) - continue; - if (tab->con[i].is_redundant) - continue; - - if (isl_tab_select_facet(tab, i) < 0) - return -1; - - todo = create_todo(tab, i); - if (!todo) - return -1; - - drop = has_opposite(todo, &first->next); - if (drop < 0) - return -1; - - if (drop) - free_todo(todo); - else { - todo->next = first->next; - first->next = todo; - } - - if (isl_tab_rollback(tab, snap) < 0) - return -1; - } - - return 0; -} - -/* Compute the chamber decomposition of the parametric polytope respresented - * by "bset" given the parametric vertices and their activity domains. - * - * We are only interested in full-dimensional chambers. - * Each of these chambers is the intersection of the activity domains of - * one or more vertices and the union of all chambers is equal to the - * projection of the entire parametric polytope onto the parameter space. - * - * We first create an initial chamber by intersecting as many activity - * domains as possible without ending up with an empty or lower-dimensional - * set. As a minor optimization, we only consider those activity domains - * that contain some arbitrary point. - * - * For each of interior facets of the chamber, we construct a todo item, - * containing the facet and a constraint containing the other side of the facet, - * for constructing the chamber on the other side. - * While their are any todo items left, we pick a todo item and - * create the required chamber by intersecting all activity domains - * that contain the facet and have a full-dimensional intersection with - * the other side of the facet. For each of the interior facets, we - * again create todo items, taking care to cancel opposite todo items. - */ -static __isl_give isl_vertices *compute_chambers(__isl_take isl_basic_set *bset, - __isl_take isl_vertices *vertices) -{ - int i; - isl_ctx *ctx; - isl_vec *sample = NULL; - struct isl_tab *tab = NULL; - struct isl_tab_undo *snap; - unsigned nvar; - int *selection = NULL; - int n_chambers = 0; - struct isl_chamber_list *list = NULL; - struct isl_facet_todo *todo = NULL; - - if (!bset || !vertices) - goto error; - - ctx = isl_vertices_get_ctx(vertices); - selection = isl_alloc_array(ctx, int, vertices->n_vertices); - if (!selection) - goto error; - - nvar = isl_basic_set_dim(bset, isl_dim_set); - bset = isl_basic_set_project_out(bset, isl_dim_set, 0, nvar); - - tab = isl_tab_from_basic_set(bset); - for (i = 0; i < bset->n_ineq; ++i) - if (isl_tab_freeze_constraint(tab, i) < 0) - goto error; - if (isl_tab_track_bset(tab, bset) < 0) - goto error; - - snap = isl_tab_snap(tab); - - sample = isl_tab_get_sample_value(tab); - - for (i = 0; i < vertices->n_vertices; ++i) { - selection[i] = isl_basic_set_contains(vertices->v[i].dom, sample); - if (selection[i] < 0) - goto error; - if (!selection[i]) - continue; - selection[i] = can_intersect(tab, vertices->v[i].dom); - if (selection[i] < 0) - goto error; - } - - if (isl_tab_detect_redundant(tab) < 0) - goto error; - - if (add_chamber(&list, vertices, tab, selection) < 0) - goto error; - n_chambers++; - - if (init_todo(&todo, tab) < 0) - goto error; - - while (todo) { - struct isl_facet_todo *next; - - if (isl_tab_rollback(tab, snap) < 0) - goto error; - - if (isl_tab_add_ineq(tab, todo->constraint->el) < 0) - goto error; - if (isl_tab_freeze_constraint(tab, tab->n_con - 1) < 0) - goto error; - - for (i = 0; i < vertices->n_vertices; ++i) { - selection[i] = bset_covers_tab(vertices->v[i].dom, - todo->tab); - if (selection[i] < 0) - goto error; - if (!selection[i]) - continue; - selection[i] = can_intersect(tab, vertices->v[i].dom); - if (selection[i] < 0) - goto error; - } - - if (isl_tab_detect_redundant(tab) < 0) - goto error; - - if (add_chamber(&list, vertices, tab, selection) < 0) - goto error; - n_chambers++; - - if (update_todo(todo, tab) < 0) - goto error; - - next = todo->next; - todo->next = NULL; - free_todo(todo); - todo = next; - } - - isl_vec_free(sample); - - isl_tab_free(tab); - free(selection); - - vertices = vertices_add_chambers(vertices, n_chambers, list); - - for (i = 0; vertices && i < vertices->n_vertices; ++i) { - isl_basic_set_free(vertices->v[i].dom); - vertices->v[i].dom = NULL; - } - - return vertices; -error: - free_chamber_list(list); - free_todo(todo); - isl_vec_free(sample); - isl_tab_free(tab); - free(selection); - if (!tab) - isl_basic_set_free(bset); - isl_vertices_free(vertices); - return NULL; -} - -isl_ctx *isl_vertex_get_ctx(__isl_keep isl_vertex *vertex) -{ - return vertex ? isl_vertices_get_ctx(vertex->vertices) : NULL; -} - -int isl_vertex_get_id(__isl_keep isl_vertex *vertex) -{ - return vertex ? vertex->id : -1; -} - -__isl_give isl_basic_set *isl_vertex_get_domain(__isl_keep isl_vertex *vertex) -{ - struct isl_vertex *v; - - if (!vertex) - return NULL; - - v = &vertex->vertices->v[vertex->id]; - if (!v->dom) { - unsigned nvar; - nvar = isl_basic_set_dim(v->vertex, isl_dim_set); - v->dom = isl_basic_set_copy(v->vertex); - v->dom = isl_basic_set_project_out(v->dom, isl_dim_set, 0, nvar); - } - - return isl_basic_set_copy(v->dom); -} - -__isl_give isl_basic_set *isl_vertex_get_expr(__isl_keep isl_vertex *vertex) -{ - struct isl_vertex *v; - - if (!vertex) - return NULL; - - v = &vertex->vertices->v[vertex->id]; - - return isl_basic_set_copy(v->vertex); -} - -static __isl_give isl_vertex *isl_vertex_alloc(__isl_take isl_vertices *vertices, - int id) -{ - isl_ctx *ctx; - isl_vertex *vertex; - - if (!vertices) - return NULL; - - ctx = isl_vertices_get_ctx(vertices); - vertex = isl_alloc_type(ctx, isl_vertex); - if (!vertex) - goto error; - - vertex->vertices = vertices; - vertex->id = id; - - return vertex; -error: - isl_vertices_free(vertices); - return NULL; -} - -void isl_vertex_free(__isl_take isl_vertex *vertex) -{ - if (!vertex) - return; - isl_vertices_free(vertex->vertices); - free(vertex); -} - -__isl_give isl_basic_set *isl_basic_set_set_integral(__isl_take isl_basic_set *bset) -{ - if (!bset) - return NULL; - - if (!ISL_F_ISSET(bset, ISL_BASIC_MAP_RATIONAL)) - return bset; - - bset = isl_basic_set_cow(bset); - if (!bset) - return NULL; - - ISL_F_CLR(bset, ISL_BASIC_MAP_RATIONAL); - - return isl_basic_set_finalize(bset); -} - -isl_ctx *isl_cell_get_ctx(__isl_keep isl_cell *cell) -{ - return cell ? cell->dom->ctx : NULL; -} - -__isl_give isl_basic_set *isl_cell_get_domain(__isl_keep isl_cell *cell) -{ - return cell ? isl_basic_set_copy(cell->dom) : NULL; -} - -static __isl_give isl_cell *isl_cell_alloc(__isl_take isl_vertices *vertices, - __isl_take isl_basic_set *dom, int id) -{ - int i; - isl_cell *cell = NULL; - - if (!vertices || !dom) - goto error; - - cell = isl_calloc_type(dom->ctx, isl_cell); - if (!cell) - goto error; - - cell->n_vertices = vertices->c[id].n_vertices; - cell->ids = isl_alloc_array(dom->ctx, int, cell->n_vertices); - if (!cell->ids) - goto error; - for (i = 0; i < cell->n_vertices; ++i) - cell->ids[i] = vertices->c[id].vertices[i]; - cell->vertices = vertices; - cell->dom = dom; - - return cell; -error: - isl_cell_free(cell); - isl_vertices_free(vertices); - isl_basic_set_free(dom); - return NULL; -} - -void isl_cell_free(__isl_take isl_cell *cell) -{ - if (!cell) - return; - - isl_vertices_free(cell->vertices); - free(cell->ids); - isl_basic_set_free(cell->dom); - free(cell); -} - -/* Create a tableau of the cone obtained by first homogenizing the given - * polytope and then making all inequalities strict by setting the - * constant term to -1. - */ -static struct isl_tab *tab_for_shifted_cone(__isl_keep isl_basic_set *bset) -{ - int i; - isl_vec *c = NULL; - struct isl_tab *tab; - - if (!bset) - return NULL; - tab = isl_tab_alloc(bset->ctx, bset->n_ineq + 1, - 1 + isl_basic_set_total_dim(bset), 0); - if (!tab) - return NULL; - tab->rational = ISL_F_ISSET(bset, ISL_BASIC_SET_RATIONAL); - if (ISL_F_ISSET(bset, ISL_BASIC_MAP_EMPTY)) { - if (isl_tab_mark_empty(tab) < 0) - goto error; - return tab; - } - - c = isl_vec_alloc(bset->ctx, 1 + 1 + isl_basic_set_total_dim(bset)); - if (!c) - goto error; - - isl_int_set_si(c->el[0], 0); - for (i = 0; i < bset->n_eq; ++i) { - isl_seq_cpy(c->el + 1, bset->eq[i], c->size - 1); - if (isl_tab_add_eq(tab, c->el) < 0) - goto error; - } - - isl_int_set_si(c->el[0], -1); - for (i = 0; i < bset->n_ineq; ++i) { - isl_seq_cpy(c->el + 1, bset->ineq[i], c->size - 1); - if (isl_tab_add_ineq(tab, c->el) < 0) - goto error; - if (tab->empty) { - isl_vec_free(c); - return tab; - } - } - - isl_seq_clr(c->el + 1, c->size - 1); - isl_int_set_si(c->el[1], 1); - if (isl_tab_add_ineq(tab, c->el) < 0) - goto error; - - isl_vec_free(c); - return tab; -error: - isl_vec_free(c); - isl_tab_free(tab); - return NULL; -} - -/* Compute an interior point of "bset" by selecting an interior - * point in homogeneous space and projecting the point back down. - */ -static __isl_give isl_vec *isl_basic_set_interior_point( - __isl_keep isl_basic_set *bset) -{ - isl_vec *vec; - struct isl_tab *tab; - - tab = tab_for_shifted_cone(bset); - vec = isl_tab_get_sample_value(tab); - isl_tab_free(tab); - if (!vec) - return NULL; - - isl_seq_cpy(vec->el, vec->el + 1, vec->size - 1); - vec->size--; - - return vec; -} - -/* Call "fn" on all chambers of the parametric polytope with the shared - * facets of neighboring chambers only appearing in one of the chambers. - * - * We pick an interior point from one of the chambers and then make - * all constraints that do not satisfy this point strict. - */ -int isl_vertices_foreach_disjoint_cell(__isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_cell *cell, void *user), void *user) -{ - int i, j; - isl_vec *vec; - isl_int v; - isl_cell *cell; - - if (!vertices) - return -1; - - if (vertices->n_chambers == 0) - return 0; - - if (vertices->n_chambers == 1) { - isl_basic_set *dom = isl_basic_set_copy(vertices->c[0].dom); - dom = isl_basic_set_set_integral(dom); - cell = isl_cell_alloc(isl_vertices_copy(vertices), dom, 0); - if (!cell) - return -1; - return fn(cell, user); - } - - vec = isl_basic_set_interior_point(vertices->c[0].dom); - if (!vec) - return -1; - - isl_int_init(v); - - for (i = 0; i < vertices->n_chambers; ++i) { - int r; - isl_basic_set *dom = isl_basic_set_copy(vertices->c[i].dom); - dom = isl_basic_set_cow(dom); - if (!dom) - goto error; - for (j = 0; i && j < dom->n_ineq; ++j) { - isl_seq_inner_product(vec->el, dom->ineq[j], vec->size, - &v); - if (!isl_int_is_neg(v)) - continue; - isl_int_sub_ui(dom->ineq[j][0], dom->ineq[j][0], 1); - } - dom = isl_basic_set_set_integral(dom); - cell = isl_cell_alloc(isl_vertices_copy(vertices), dom, i); - if (!cell) - goto error; - r = fn(cell, user); - if (r < 0) - goto error; - } - - isl_int_clear(v); - isl_vec_free(vec); - - return 0; -error: - isl_int_clear(v); - isl_vec_free(vec); - return -1; -} - -int isl_vertices_foreach_cell(__isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_cell *cell, void *user), void *user) -{ - int i; - isl_cell *cell; - - if (!vertices) - return -1; - - if (vertices->n_chambers == 0) - return 0; - - for (i = 0; i < vertices->n_chambers; ++i) { - int r; - isl_basic_set *dom = isl_basic_set_copy(vertices->c[i].dom); - - cell = isl_cell_alloc(isl_vertices_copy(vertices), dom, i); - if (!cell) - return -1; - - r = fn(cell, user); - if (r < 0) - return -1; - } - - return 0; -} - -int isl_vertices_foreach_vertex(__isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_vertex *vertex, void *user), void *user) -{ - int i; - isl_vertex *vertex; - - if (!vertices) - return -1; - - if (vertices->n_vertices == 0) - return 0; - - for (i = 0; i < vertices->n_vertices; ++i) { - int r; - - vertex = isl_vertex_alloc(isl_vertices_copy(vertices), i); - if (!vertex) - return -1; - - r = fn(vertex, user); - if (r < 0) - return -1; - } - - return 0; -} - -int isl_cell_foreach_vertex(__isl_keep isl_cell *cell, - int (*fn)(__isl_take isl_vertex *vertex, void *user), void *user) -{ - int i; - isl_vertex *vertex; - - if (!cell) - return -1; - - if (cell->n_vertices == 0) - return 0; - - for (i = 0; i < cell->n_vertices; ++i) { - int r; - - vertex = isl_vertex_alloc(isl_vertices_copy(cell->vertices), - cell->ids[i]); - if (!vertex) - return -1; - - r = fn(vertex, user); - if (r < 0) - return -1; - } - - return 0; -} - -isl_ctx *isl_vertices_get_ctx(__isl_keep isl_vertices *vertices) -{ - return vertices ? vertices->bset->ctx : NULL; -} - -int isl_vertices_get_n_vertices(__isl_keep isl_vertices *vertices) -{ - return vertices ? vertices->n_vertices : -1; -} - -__isl_give isl_vertices *isl_morph_vertices(__isl_take isl_morph *morph, - __isl_take isl_vertices *vertices) -{ - int i; - isl_morph *param_morph = NULL; - - if (!morph || !vertices) - goto error; - - isl_assert(vertices->bset->ctx, vertices->ref == 1, goto error); - - param_morph = isl_morph_copy(morph); - param_morph = isl_morph_remove_dom_dims(param_morph, isl_dim_set, - 0, isl_morph_dom_dim(morph, isl_dim_set)); - param_morph = isl_morph_remove_ran_dims(param_morph, isl_dim_set, - 0, isl_morph_ran_dim(morph, isl_dim_set)); - - for (i = 0; i < vertices->n_vertices; ++i) { - vertices->v[i].dom = isl_morph_basic_set( - isl_morph_copy(param_morph), vertices->v[i].dom); - vertices->v[i].vertex = isl_morph_basic_set( - isl_morph_copy(morph), vertices->v[i].vertex); - if (!vertices->v[i].vertex) - goto error; - } - - for (i = 0; i < vertices->n_chambers; ++i) { - vertices->c[i].dom = isl_morph_basic_set( - isl_morph_copy(param_morph), vertices->c[i].dom); - if (!vertices->c[i].dom) - goto error; - } - - isl_morph_free(param_morph); - isl_morph_free(morph); - return vertices; -error: - isl_morph_free(param_morph); - isl_morph_free(morph); - isl_vertices_free(vertices); - return NULL; -} - -/* Construct a simplex isl_cell spanned by the vertices with indices in - * "simplex_ids" and "other_ids" and call "fn" on this isl_cell. - */ -static int call_on_simplex(__isl_keep isl_cell *cell, - int *simplex_ids, int n_simplex, int *other_ids, int n_other, - int (*fn)(__isl_take isl_cell *simplex, void *user), void *user) -{ - int i; - isl_ctx *ctx; - struct isl_cell *simplex; - - ctx = isl_cell_get_ctx(cell); - - simplex = isl_calloc_type(ctx, struct isl_cell); - if (!simplex) - return -1; - simplex->vertices = isl_vertices_copy(cell->vertices); - if (!simplex->vertices) - goto error; - simplex->dom = isl_basic_set_copy(cell->dom); - if (!simplex->dom) - goto error; - simplex->n_vertices = n_simplex + n_other; - simplex->ids = isl_alloc_array(ctx, int, simplex->n_vertices); - if (!simplex->ids) - goto error; - - for (i = 0; i < n_simplex; ++i) - simplex->ids[i] = simplex_ids[i]; - for (i = 0; i < n_other; ++i) - simplex->ids[n_simplex + i] = other_ids[i]; - - return fn(simplex, user); -error: - isl_cell_free(simplex); - return -1; -} - -/* Check whether the parametric vertex described by "vertex" - * lies on the facet corresponding to constraint "facet" of "bset". - * The isl_vec "v" is a temporary vector than can be used by this function. - * - * We eliminate the variables from the facet constraint using the - * equalities defining the vertex and check if the result is identical - * to zero. - * - * It would probably be better to keep track of the constraints defining - * a vertex during the vertex construction so that we could simply look - * it up here. - */ -static int vertex_on_facet(__isl_keep isl_basic_set *vertex, - __isl_keep isl_basic_set *bset, int facet, __isl_keep isl_vec *v) -{ - int i; - isl_int m; - - isl_seq_cpy(v->el, bset->ineq[facet], v->size); - - isl_int_init(m); - for (i = 0; i < vertex->n_eq; ++i) { - int k = isl_seq_last_non_zero(vertex->eq[i], v->size); - isl_seq_elim(v->el, vertex->eq[i], k, v->size, &m); - } - isl_int_clear(m); - - return isl_seq_first_non_zero(v->el, v->size) == -1; -} - -/* Triangulate the polytope spanned by the vertices with ids - * in "simplex_ids" and "other_ids" and call "fn" on each of - * the resulting simplices. - * If the input polytope is already a simplex, we simply call "fn". - * Otherwise, we pick a point from "other_ids" and add it to "simplex_ids". - * Then we consider each facet of "bset" that does not contain the point - * we just picked, but does contain some of the other points in "other_ids" - * and call ourselves recursively on the polytope spanned by the new - * "simplex_ids" and those points in "other_ids" that lie on the facet. - */ -static int triangulate(__isl_keep isl_cell *cell, __isl_keep isl_vec *v, - int *simplex_ids, int n_simplex, int *other_ids, int n_other, - int (*fn)(__isl_take isl_cell *simplex, void *user), void *user) -{ - int i, j, k; - int d, nparam; - int *ids; - isl_ctx *ctx; - isl_basic_set *vertex; - isl_basic_set *bset; - - ctx = isl_cell_get_ctx(cell); - d = isl_basic_set_dim(cell->vertices->bset, isl_dim_set); - nparam = isl_basic_set_dim(cell->vertices->bset, isl_dim_param); - - if (n_simplex + n_other == d + 1) - return call_on_simplex(cell, simplex_ids, n_simplex, - other_ids, n_other, fn, user); - - simplex_ids[n_simplex] = other_ids[0]; - vertex = cell->vertices->v[other_ids[0]].vertex; - bset = cell->vertices->bset; - - ids = isl_alloc_array(ctx, int, n_other - 1); - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_seq_first_non_zero(bset->ineq[i] + 1 + nparam, d) == -1) - continue; - if (vertex_on_facet(vertex, bset, i, v)) - continue; - - for (j = 1, k = 0; j < n_other; ++j) { - isl_basic_set *ov; - ov = cell->vertices->v[other_ids[j]].vertex; - if (vertex_on_facet(ov, bset, i, v)) - ids[k++] = other_ids[j]; - } - if (k == 0) - continue; - - if (triangulate(cell, v, simplex_ids, n_simplex + 1, - ids, k, fn, user) < 0) - goto error; - } - free(ids); - - return 0; -error: - free(ids); - return -1; -} - -/* Triangulate the given cell and call "fn" on each of the resulting - * simplices. - */ -int isl_cell_foreach_simplex(__isl_take isl_cell *cell, - int (*fn)(__isl_take isl_cell *simplex, void *user), void *user) -{ - int d, total; - int r; - isl_ctx *ctx; - isl_vec *v = NULL; - int *simplex_ids = NULL; - - if (!cell) - return -1; - - d = isl_basic_set_dim(cell->vertices->bset, isl_dim_set); - total = isl_basic_set_total_dim(cell->vertices->bset); - - if (cell->n_vertices == d + 1) - return fn(cell, user); - - ctx = isl_cell_get_ctx(cell); - simplex_ids = isl_alloc_array(ctx, int, d + 1); - if (!simplex_ids) - goto error; - - v = isl_vec_alloc(ctx, 1 + total); - if (!v) - goto error; - - r = triangulate(cell, v, simplex_ids, 0, - cell->ids, cell->n_vertices, fn, user); - - isl_vec_free(v); - free(simplex_ids); - - isl_cell_free(cell); - - return r; -error: - free(simplex_ids); - isl_vec_free(v); - isl_cell_free(cell); - return -1; -} diff --git a/cloog-0.16.3/isl/isl_vertices_private.h b/cloog-0.16.3/isl/isl_vertices_private.h deleted file mode 100644 index 7c707fd..0000000 --- a/cloog-0.16.3/isl/isl_vertices_private.h +++ /dev/null @@ -1,64 +0,0 @@ -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_morph; - -/* A parametric vertex. "vertex" contains the actual description - * of the vertex as a singleton parametric set. "dom" is the projection - * of "vertex" onto the parameter space, i.e., the activity domain - * of the vertex. - */ -struct isl_vertex { - isl_basic_set *dom; - isl_basic_set *vertex; -}; - -/* A chamber in the chamber decomposition. The indices of the "n_vertices" - * active vertices are stored in "vertices". - */ -struct isl_chamber { - int n_vertices; - int *vertices; - isl_basic_set *dom; -}; - -struct isl_vertices { - int ref; - - /* The rational basic set spanned by the vertices. */ - isl_basic_set *bset; - - int n_vertices; - struct isl_vertex *v; - - int n_chambers; - struct isl_chamber *c; -}; - -struct isl_cell { - int n_vertices; - int *ids; - isl_vertices *vertices; - isl_basic_set *dom; -}; - -struct isl_external_vertex { - isl_vertices *vertices; - int id; -}; - -int isl_vertices_foreach_disjoint_cell(__isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_cell *cell, void *user), void *user); -int isl_cell_foreach_simplex(__isl_take isl_cell *cell, - int (*fn)(__isl_take isl_cell *simplex, void *user), void *user); - -__isl_give isl_vertices *isl_morph_vertices(__isl_take struct isl_morph *morph, - __isl_take isl_vertices *vertices); - -#if defined(__cplusplus) -} -#endif diff --git a/cloog-0.16.3/isl/ltmain.sh b/cloog-0.16.3/isl/ltmain.sh deleted file mode 100755 index be43f41..0000000 --- a/cloog-0.16.3/isl/ltmain.sh +++ /dev/null @@ -1,8750 +0,0 @@ -# Generated from ltmain.m4sh. - -# libtool (GNU libtool) 2.2.8 -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --no-quiet, --no-silent -# print informational messages (default) -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print more informational messages than default -# --no-verbose don't print the extra informational messages -# --version print version information -# -h, --help, --help-all print short, long, or detailed help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. When passed as first option, -# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.8 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . - -PROGRAM=libtool -PACKAGE=libtool -VERSION=2.2.8 -TIMESTAMP="" -package_revision=1.3169 - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# NLS nuisances: We save the old values to restore during execute mode. -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" - fi" -done -LC_ALL=C -LANGUAGE=C -export LANGUAGE LC_ALL - -$lt_unset CDPATH - - - - - - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - - - -: ${CP="cp -f"} -test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} -: ${EGREP="grep -E"} -: ${FGREP="grep -F"} -: ${GREP="grep"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SED="sed"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" - -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` -} - -# Generated shell functions inserted here. - -# These SED scripts presuppose an absolute path with a trailing slash. -pathcar='s,^/\([^/]*\).*$,\1,' -pathcdr='s,^/[^/]*,,' -removedotparts=':dotsl - s@/\./@/@g - t dotsl - s,/\.$,/,' -collapseslashes='s@/\{1,\}@/@g' -finalslash='s,/*$,/,' - -# func_normal_abspath PATH -# Remove doubled-up and trailing slashes, "." path components, -# and cancel out any ".." path components in PATH after making -# it an absolute path. -# value returned in "$func_normal_abspath_result" -func_normal_abspath () -{ - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` - while :; do - # Processed it all yet? - if test "$func_normal_abspath_tpath" = / ; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result" ; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in - "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} - -# func_relative_path SRCDIR DSTDIR -# generates a relative path from SRCDIR to DSTDIR, with a trailing -# slash if non-empty, suitable for immediately appending a filename -# without needing to append a separator. -# value returned in "$func_relative_path_result" -func_relative_path () -{ - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break - ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break - ;; - *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=${func_dirname_result} - if test "x$func_relative_path_tlibdir" = x ; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result - ;; - esac - done - - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test "x$func_stripname_result" != x ; then - func_relative_path_result=${func_relative_path_result}/${func_stripname_result} - fi - - # Normalisation. If bindir is libdir, return empty string, - # else relative path ending with a slash; either way, target - # file name can be directly appended. - if test ! -z "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result/" - func_relative_path_result=$func_stripname_result - fi -} - -# The name of this program: -func_dirname_and_basename "$progpath" -progname=$func_basename_result - -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=: - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname${mode+: }$mode: $*" -} - -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 - - # bash bug again: - : -} - -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` - done - my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "$my_tmpdir" -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () -{ - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac - - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac -} - - -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "$1" | $SED \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac - - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac - - func_quote_for_expand_result="$my_arg" -} - - -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $SED -n '/(C)/!b go - :more - /\./!{ - N - s/\n# // - b more - } - :go - /^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} - -# func_usage -# Echo short help message to standard output and exit. -func_usage () -{ - $SED -n '/^# Usage:/,/^# *.*--help/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - echo - $ECHO "run \`$progname --help | more' for full usage" - exit $? -} - -# func_help [NOEXIT] -# Echo long help message to standard output and exit, -# unless 'noexit' is passed as argument. -func_help () -{ - $SED -n '/^# Usage:/,/# Report bugs to/ { - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ - p - }' < "$progpath" - ret=$? - if test -z "$1"; then - exit $ret - fi -} - -# func_missing_arg argname -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - func_error "missing argument for $1." - exit_cmd=exit -} - -exit_cmd=: - - - - - - -magic="%%%MAGIC variable%%%" -magic_exe="%%%MAGIC EXE variable%%%" - -# Global variables. -# $mode is unset -nonopt= -execute_dlfiles= -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 - -opt_dry_run=false -opt_duplicate_deps=false -opt_silent=false -opt_debug=: - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - -# func_fatal_configuration arg... -# Echo program name prefixed message to standard error, followed by -# a configuration failure hint, and exit. -func_fatal_configuration () -{ - func_error ${1+"$@"} - func_error "See the $PACKAGE documentation for more information." - func_fatal_error "Fatal configuration error." -} - - -# func_config -# Display the configuration for all the tags in this script. -func_config () -{ - re_begincf='^# ### BEGIN LIBTOOL' - re_endcf='^# ### END LIBTOOL' - - # Default configuration. - $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" - - # Now print the configurations for the tags. - for tagname in $taglist; do - $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" - done - - exit $? -} - -# func_features -# Display the features supported by this script. -func_features () -{ - echo "host: $host" - if test "$build_libtool_libs" = yes; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test "$build_old_libs" = yes; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - - exit $? -} - -# func_enable_tag tagname -# Verify that TAGNAME is valid, and either flag an error and exit, or -# enable the TAGNAME tag. We also add TAGNAME to the global $taglist -# variable here. -func_enable_tag () -{ - # Global variable: - tagname="$1" - - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf="/$re_begincf/,/$re_endcf/p" - - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac - - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; - *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - -# Parse options once, thoroughly. This comes as soon as possible in -# the script to make things like `libtool --version' happen quickly. -{ - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - esac - - # Parse non-mode specific arguments: - while test "$#" -gt 0; do - opt="$1" - shift - - case $opt in - --config) func_config ;; - - --debug) preserve_args="$preserve_args $opt" - func_echo "enabling shell trace mode" - opt_debug='set -x' - $opt_debug - ;; - - -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break - execute_dlfiles="$execute_dlfiles $1" - shift - ;; - - --dry-run | -n) opt_dry_run=: ;; - --features) func_features ;; - --finish) mode="finish" ;; - - --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break - case $1 in - # Valid mode arguments: - clean) ;; - compile) ;; - execute) ;; - finish) ;; - install) ;; - link) ;; - relink) ;; - uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; - esac - - mode="$1" - shift - ;; - - --preserve-dup-deps) - opt_duplicate_deps=: ;; - - --quiet|--silent) preserve_args="$preserve_args $opt" - opt_silent=: - opt_verbose=false - ;; - - --no-quiet|--no-silent) - preserve_args="$preserve_args $opt" - opt_silent=false - ;; - - --verbose| -v) preserve_args="$preserve_args $opt" - opt_silent=false - opt_verbose=: - ;; - - --no-verbose) preserve_args="$preserve_args $opt" - opt_verbose=false - ;; - - --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break - preserve_args="$preserve_args $opt $1" - func_enable_tag "$1" # tagname is set here - shift - ;; - - # Separate optargs to long options: - -dlopen=*|--mode=*|--tag=*) - func_opt_split "$opt" - set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} - shift - ;; - - -\?|-h) func_usage ;; - --help) opt_help=: ;; - --help-all) opt_help=': help-all' ;; - --version) func_version ;; - - -*) func_fatal_help "unrecognized option \`$opt'" ;; - - *) nonopt="$opt" - break - ;; - esac - done - - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_duplicate_deps - ;; - esac - - # Having warned about all mis-specified options, bail out if - # anything was wrong. - $exit_cmd $EXIT_FAILURE -} - -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -## ----------- ## -## Main. ## -## ----------- ## - -$opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - test -z "$mode" && func_fatal_error "error: you must specify a MODE." - - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$mode' for more information." -} - - -# func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case "$lalib_p_line" in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test "$lalib_p" = yes -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - func_lalib_p "$1" -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_ltwrapper_scriptname_result="" - if func_ltwrapper_executable_p "$1"; then - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" - fi -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $opt_debug - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$save_ifs - eval cmd=\"$cmd\" - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. -func_source () -{ - $opt_debug - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $opt_debug - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case "$@ " in - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi - - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T <?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - removelist="$removelist $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - removelist="$removelist $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - command="$command -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test "$compiler_c_o" = yes; then - command="$command -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { - test "$mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to build PIC objects only - -prefer-non-pic try to build non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -bindir BINDIR specify path to binaries directory (for systems where - libraries must be found in the PATH setting at runtime) - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -Wc,FLAG - -Xcompiler FLAG pass linker-specific FLAG directly to the compiler - -Wl,FLAG - -Xlinker FLAG pass linker-specific FLAG directly to the linker - -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode \`$mode'" - ;; - esac - - echo - $ECHO "Try \`$progname --help' for more information about other modes." -} - -# Now that we've collected a possible --mode arg, show help if necessary -if $opt_help; then - if test "$opt_help" = :; then - func_mode_help - else - { - func_help noexit - for mode in compile link execute install finish uninstall clean; do - func_mode_help - done - } | sed -n '1p; 2,$s/^Usage:/ or: /p' - { - func_help noexit - for mode in compile link execute install finish uninstall clean; do - echo - func_mode_help - done - } | - sed '1d - /^When reporting/,/^Report/{ - H - d - } - $x - /information about other modes/d - /more detailed .*MODE/d - s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' - fi - exit $? -fi - - -# func_mode_execute arg... -func_mode_execute () -{ - $opt_debug - # The first argument is the command name. - cmd="$nonopt" - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir="$func_dirname_result" - - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir="$func_dirname_result" - ;; - - *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -* | *.la | *.lo ) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file="$progdir/$program" - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_quote_for_eval "$file" - args="$args $func_quote_for_eval_result" - done - - if test "X$opt_dry_run" = Xfalse; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - fi -} - -test "$mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libdirs="$nonopt" - admincmds= - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done - - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || admincmds="$admincmds - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the \`-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - echo - - echo "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" - echo "pages." - ;; - *) - echo "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - echo "----------------------------------------------------------------------" - exit $EXIT_SUCCESS -} - -test "$mode" = finish && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $opt_debug - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac; then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - install_prog="$install_prog$func_quote_for_eval_result" - install_shared_prog=$install_prog - case " $install_prog " in - *[\\\ /]cp\ *) install_cp=: ;; - *) install_cp=false ;; - esac - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - no_mode=: - for arg - do - arg2= - if test -n "$dest"; then - files="$files $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - if $install_cp; then :; else - prev=$arg - fi - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - if test "x$prev" = x-m && test -n "$install_override_mode"; then - arg2=$install_override_mode - no_mode=false - fi - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - install_prog="$install_prog $func_quote_for_eval_result" - if test -n "$arg2"; then - func_quote_for_eval "$arg2" - fi - install_shared_prog="$install_shared_prog $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" - - if test -n "$install_override_mode" && $no_mode; then - if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" - fi - fi - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "\`$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - staticlibs="$staticlibs $file" - ;; - - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - dir="$dir$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking \`$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname="$1" - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme="$stripme" - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme="" - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - $opt_dry_run || { - if test "$finalize" = yes; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_silent || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink \`$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file="$outputname" - else - func_warning "cannot relink \`$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name="$func_basename_result" - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test "$mode" = install && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) -#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" -#endif - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_verbose "extracting global C symbols from \`$progfile'" - $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $opt_dry_run || { - $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" - func_basename "$dlprefile" - name="$func_basename_result" - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - echo >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -" - case $host in - *cygwin* | *mingw* | *cegcc* ) - echo >> "$output_objdir/$my_dlsyms" "\ -/* DATA imports from DLLs on WIN32 con't be const, because - runtime relocations are performed -- see ld's documentation - on pseudo-relocs. */" - lt_dlsym_const= ;; - *osf5*) - echo >> "$output_objdir/$my_dlsyms" "\ -/* This system does not cope well with relocations in const data */" - lt_dlsym_const= ;; - *) - lt_dlsym_const=const ;; - esac - - echo >> "$output_objdir/$my_dlsyms" "\ -extern $lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; -$lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - echo >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) symtab_cflags="$symtab_cflags $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - - # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` - fi -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -# Despite the name, also deal with 64 bit binaries. -func_win32_libid () -{ - $opt_debug - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - win32_nmres=`eval $NM -f posix -A $1 | - $SED -n -e ' - 1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - if test "$lock_old_archive_extraction" = yes; then - lockfile=$f_ex_an_ar_oldlib.lock - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - fi - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ - 'stat=$?; rm -f "$lockfile"; exit $stat' - if test "$lock_old_archive_extraction" = yes; then - $opt_dry_run || rm -f "$lockfile" - fi - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $opt_debug - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib="$func_basename_result" - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` - done - - func_extract_archives_result="$my_oldobjs" -} - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=${1-no} - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - file=\"\$0\"" - - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` - $ECHO "\ - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - ECHO=\"$qECHO\" - fi - -# Very basic option parsing. These options are (a) specific to -# the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ which is used only on -# windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options which match -# this pattern). -# -# There are only two supported options: --lt-debug and -# --lt-dump-script. There is, deliberately, no --lt-help. -# -# The first argument to this parsing function should be the -# script's $0 value, followed by "$@". -lt_option_debug= -func_parse_lt_options () -{ - lt_script_arg0=\$0 - shift - for lt_opt - do - case \"\$lt_opt\" in - --lt-debug) lt_option_debug=1 ;; - --lt-dump-script) - lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` - test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. - lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` - cat \"\$lt_dump_D/\$lt_dump_F\" - exit 0 - ;; - --lt-*) - \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 - exit 1 - ;; - esac - done - - # Print the debug banner immediately: - if test -n \"\$lt_option_debug\"; then - echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 - fi -} - -# Used when --lt-debug. Prints its arguments to stdout -# (redirection is the responsibility of the caller) -func_lt_dump_args () -{ - lt_dump_args_N=1; - for lt_arg - do - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" - lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` - done -} - -# Core function for launching the target application -func_exec_program_core () -{ -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 -} - -# A function to encapsulate launching the target application -# Strips options in the --lt-* namespace from \$@ and -# launches target application with the remaining arguments. -func_exec_program () -{ - for lt_wr_arg - do - case \$lt_wr_arg in - --lt-*) ;; - *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; - esac - shift - done - func_exec_program_core \${1+\"\$@\"} -} - - # Parse options - func_parse_lt_options \"\$0\" \${1+\"\$@\"} - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` - done - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` - - export $shlibpath_var -" - fi - - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. - func_exec_program \${1+\"\$@\"} - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} - - -# func_to_host_path arg -# -# Convert paths to host format when used with build tools. -# Intended for use with "native" mingw (where libtool itself -# is running under the msys shell), or in the following cross- -# build environments: -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# where wine is equipped with the `winepath' executable. -# In the native mingw case, the (msys) shell automatically -# converts paths for any non-msys applications it launches, -# but that facility isn't available from inside the cwrapper. -# Similar accommodations are necessary for $host mingw and -# $build cygwin. Calling this function does no harm for other -# $host/$build combinations not listed above. -# -# ARG is the path (on $build) that should be converted to -# the proper representation for $host. The result is stored -# in $func_to_host_path_result. -func_to_host_path () -{ - func_to_host_path_result="$1" - if test -n "$1"; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - case $build in - *mingw* ) # actually, msys - # awkward: cmd appends spaces to result - func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_path_result=`cygpath -w "$1" | - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # Unfortunately, winepath does not exit with a non-zero - # error code, so we are forced to check the contents of - # stdout. On the other hand, if the command is not - # found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both - # error code of zero AND non-empty stdout, which explains - # the odd construction: - func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then - func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | - $SED -e "$lt_sed_naive_backslashify"` - else - # Allow warning below. - func_to_host_path_result= - fi - ;; - esac - if test -z "$func_to_host_path_result" ; then - func_error "Could not determine host path corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_path_result="$1" - fi - ;; - esac - fi -} -# end: func_to_host_path - -# func_to_host_pathlist arg -# -# Convert pathlists to host format when used with build tools. -# See func_to_host_path(), above. This function supports the -# following $build/$host combinations (but does no harm for -# combinations not listed here): -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# -# Path separators are also converted from $build format to -# $host format. If ARG begins or ends with a path separator -# character, it is preserved (but converted to $host format) -# on output. -# -# ARG is a pathlist (on $build) that should be converted to -# the proper representation on $host. The result is stored -# in $func_to_host_pathlist_result. -func_to_host_pathlist () -{ - func_to_host_pathlist_result="$1" - if test -n "$1"; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_pathlist_tmp1=$func_stripname_result - case $build in - *mingw* ) # Actually, msys. - # Awkward: cmd appends spaces to result. - func_to_host_pathlist_result=` - ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # unfortunately, winepath doesn't convert pathlists - func_to_host_pathlist_result="" - func_to_host_pathlist_oldIFS=$IFS - IFS=: - for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do - IFS=$func_to_host_pathlist_oldIFS - if test -n "$func_to_host_pathlist_f" ; then - func_to_host_path "$func_to_host_pathlist_f" - if test -n "$func_to_host_path_result" ; then - if test -z "$func_to_host_pathlist_result" ; then - func_to_host_pathlist_result="$func_to_host_path_result" - else - func_append func_to_host_pathlist_result ";$func_to_host_path_result" - fi - fi - fi - done - IFS=$func_to_host_pathlist_oldIFS - ;; - esac - if test -z "$func_to_host_pathlist_result"; then - func_error "Could not determine the host path(s) corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This may break if $1 contains DOS-style drive - # specifications. The fix is not to complicate the expression - # below, but for the user to provide a working wine installation - # with winepath so that path translation in the cross-to-mingw - # case works properly. - lt_replace_pathsep_nix_to_dos="s|:|;|g" - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_replace_pathsep_nix_to_dos"` - fi - # Now, add the leading and trailing path separators back - case "$1" in - :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" - ;; - esac - case "$1" in - *: ) func_append func_to_host_pathlist_result ";" - ;; - esac - ;; - esac - fi -} -# end: func_to_host_pathlist - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -#else -# include -# include -# ifdef __CYGWIN__ -# include -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -/* declarations of non-ANSI functions */ -#if defined(__MINGW32__) -# ifdef __STRICT_ANSI__ -int _putenv (const char *); -# endif -#elif defined(__CYGWIN__) -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -/* #elif defined (other platforms) ... */ -#endif - -/* portability defines, excluding path handling macros */ -#if defined(_MSC_VER) -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -# define S_IXUSR _S_IEXEC -# ifndef _INTPTR_T_DEFINED -# define _INTPTR_T_DEFINED -# define intptr_t int -# endif -#elif defined(__MINGW32__) -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -#elif defined(__CYGWIN__) -# define HAVE_SETENV -# define FOPEN_WB "wb" -/* #elif defined (other platforms) ... */ -#endif - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -/* path handling portability macros */ -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -#if defined(LT_DEBUGWRAPPER) -static int lt_debug = 1; -#else -static int lt_debug = 0; -#endif - -const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_debugprintf (const char *file, int line, const char *fmt, ...); -void lt_fatal (const char *file, int line, const char *message, ...); -static const char *nonnull (const char *s); -static const char *nonempty (const char *s); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); -char **prepare_spawn (char **argv); -void lt_dump_script (FILE *f); -EOF - - cat <= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char *concat_name; - - lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", - nonempty (wrapper)); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - lt_debugprintf (__FILE__, __LINE__, - "checking path component for symlinks: %s\n", - tmp_pathspec); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - lt_fatal (__FILE__, __LINE__, - "error accessing file \"%s\": %s", - tmp_pathspec, nonnull (strerror (errno))); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal (__FILE__, __LINE__, - "could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp (str, pat) == 0) - *str = '\0'; - } - return str; -} - -void -lt_debugprintf (const char *file, int line, const char *fmt, ...) -{ - va_list args; - if (lt_debug) - { - (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); - } -} - -static void -lt_error_core (int exit_status, const char *file, - int line, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *file, int line, const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); - va_end (ap); -} - -static const char * -nonnull (const char *s) -{ - return s ? s : "(null)"; -} - -static const char * -nonempty (const char *s) -{ - return (s && !*s) ? "(empty)" : nonnull (s); -} - -void -lt_setenv (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_setenv) setting '%s' to '%s'\n", - nonnull (name), nonnull (value)); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - int len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[len-1] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -EOF - case $host_os in - mingw*) - cat <<"EOF" - -/* Prepares an argument vector before calling spawn(). - Note that spawn() does not by itself call the command interpreter - (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : - ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&v); - v.dwPlatformId == VER_PLATFORM_WIN32_NT; - }) ? "cmd.exe" : "command.com"). - Instead it simply concatenates the arguments, separated by ' ', and calls - CreateProcess(). We must quote the arguments since Win32 CreateProcess() - interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a - special way: - - Space and tab are interpreted as delimiters. They are not treated as - delimiters if they are surrounded by double quotes: "...". - - Unescaped double quotes are removed from the input. Their only effect is - that within double quotes, space and tab are treated like normal - characters. - - Backslashes not followed by double quotes are not special. - - But 2*n+1 backslashes followed by a double quote become - n backslashes followed by a double quote (n >= 0): - \" -> " - \\\" -> \" - \\\\\" -> \\" - */ -#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -char ** -prepare_spawn (char **argv) -{ - size_t argc; - char **new_argv; - size_t i; - - /* Count number of arguments. */ - for (argc = 0; argv[argc] != NULL; argc++) - ; - - /* Allocate new argument vector. */ - new_argv = XMALLOC (char *, argc + 1); - - /* Put quoted arguments into the new argument vector. */ - for (i = 0; i < argc; i++) - { - const char *string = argv[i]; - - if (string[0] == '\0') - new_argv[i] = xstrdup ("\"\""); - else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) - { - int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); - size_t length; - unsigned int backslashes; - const char *s; - char *quoted_string; - char *p; - - length = 0; - backslashes = 0; - if (quote_around) - length++; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - length += backslashes + 1; - length++; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - length += backslashes + 1; - - quoted_string = XMALLOC (char, length + 1); - - p = quoted_string; - backslashes = 0; - if (quote_around) - *p++ = '"'; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - { - unsigned int j; - for (j = backslashes + 1; j > 0; j--) - *p++ = '\\'; - } - *p++ = c; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - { - unsigned int j; - for (j = backslashes; j > 0; j--) - *p++ = '\\'; - *p++ = '"'; - } - *p = '\0'; - - new_argv[i] = quoted_string; - } - else - new_argv[i] = (char *) string; - } - new_argv[argc] = NULL; - - return new_argv; -} -EOF - ;; - esac - - cat <<"EOF" -void lt_dump_script (FILE* f) -{ -EOF - func_emit_wrapper yes | - $SED -e 's/\([\\"]\)/\\\1/g' \ - -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' - - cat <<"EOF" -} -EOF -} -# end: func_emit_cwrapperexe_src - -# func_win32_import_lib_p ARG -# True if ARG is an import lib, as indicated by $file_magic_cmd -func_win32_import_lib_p () -{ - $opt_debug - case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in - *import*) : ;; - *) false ;; - esac -} - -# func_mode_link arg... -func_mode_link () -{ - $opt_debug - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - bindir= - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module="${wl}-single_module" - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - bindir) - bindir="$arg" - prev= - continue - ;; - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) deplibs="$deplibs $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# moreargs="$moreargs $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file \`$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - weak_libs="$weak_libs $arg" - prev= - continue - ;; - xcclinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -bindir) - prev=bindir - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname '-L' '' "$arg" - dir=$func_stripname_result - if test -z "$dir"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" - else - func_fatal_error "need path for \`-L' option" - fi - fi - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - deplibs="$deplibs System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; - esac - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $func_quote_for_eval_result" - compiler_flags="$compiler_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" - linker_flags="$linker_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - # Flags to be passed through unchanged, with rationale: - # -64, -mips[0-9] enable 64-bit mode for the SGI compiler - # -r[0-9][0-9]* specify processor for the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler - # +DA*, +DD* enable 64-bit mode for the HP compiler - # -q* compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* architecture-specific flags for GCC - # -F/path path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* profiling flags for GCC - # @file GCC response files - # -tp=* Portland pgcc target processor selection - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - compiler_flags="$compiler_flags $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_duplicate_deps ; then - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - libs="$libs $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; - esac - pre_post_deps="$pre_post_deps $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs="$tmp_deplibs" - fi - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - case $lib in - *.la) func_source "$lib" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - func_basename "$deplib" - deplib_base=$func_basename_result - case " $weak_libs " in - *" $deplib_base "*) ;; - *) deplibs="$deplibs $deplib" ;; - esac - done - done - libs="$dlprefiles" - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - compiler_flags="$compiler_flags $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - dir=$func_stripname_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - echo - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because the file extensions .$libext of this argument makes me believe" - echo "*** that it is just a static archive that I should not use here." - else - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - ;; - esac - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" - fi - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - dlprefiles="$dlprefiles $lib $dependency_libs" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" - fi - ;; - esac - func_basename "$lib" - laname="$func_basename_result" - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" - fi - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - newdlprefiles="$newdlprefiles $dir/$dlname" - else - newdlprefiles="$newdlprefiles $dir/$linklib" - fi - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in - *"$absdir:"*) ;; - *) temp_rpath="$temp_rpath$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc*) - # No point in relinking DLLs because paths are not encoded - notinst_deplibs="$notinst_deplibs $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" - break - fi - done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then - echo - if test "$linkmode" = prog; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname="$1" - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc*) - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - func_basename "$soroot" - soname="$func_basename_result" - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from \`$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - echo - echo "*** And there doesn't seem to be a static archive available" - echo "*** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - elif test -n "$old_library"; then - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo - $ECHO "*** Warning: This system can not link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - echo "*** But as you try to build a module library, libtool will still create " - echo "*** a static module, that should work as long as the dlopening application" - echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - *) temp_deplibs="$temp_deplibs $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - newlib_search_path="$newlib_search_path $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path="$deplib" ;; - *.la) - func_dirname "$deplib" "" "." - dir="$func_dirname_result" - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" - path= - fi - fi - ;; - *) - path="-L$absdir/$objdir" - ;; - esac - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" - - path="-L$absdir" - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - tmp_libs="$tmp_libs $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "\`-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - objs="$objs$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" - - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" - else - echo - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - libobjs="$libobjs $objs" - fi - fi - - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" - - install_libdir="$1" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - shift - IFS="$save_ifs" - - test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$1" - number_minor="$2" - number_revision="$3" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - darwin|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|qnx|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - esac - ;; - no) - current="$1" - revision="$2" - age="$3" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current" - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; - - qnx) - major=".$current" - versuffix=".$current" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - - *) - func_fatal_configuration "unknown library version type \`$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - fi - - func_generate_dlsyms "$libname" "$libname" "yes" - libobjs="$libobjs $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - removelist="$removelist $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - oldlibs="$oldlibs $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` - # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` - # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) dlfiles="$dlfiles $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) dlprefiles="$dlprefiles $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - deplibs="$deplibs System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - deplibs="$deplibs -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` - done - fi - case $tmp_deplibs in - *[!\ \ ]*) - echo - if test "X$deplibs_check_method" = "Xnone"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." - else - echo "*** Warning: inter-library dependencies are not known to be supported." - fi - echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - ;; - esac - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - echo "*** The inter-library dependencies that have been dropped here will be" - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" - echo "*** it was explicitly requested with -no-undefined," - echo "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - deplibs="$new_libs" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - if test -n "$hardcode_libdir_flag_spec_ld"; then - eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" - else - eval dep_rpath=\"$hardcode_libdir_flag_spec\" - fi - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname="$1" - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - linknames="$linknames $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" - delfiles="$delfiles $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols="$export_symbols" - export_symbols= - always_export_symbols=yes - fi - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - func_len " $cmd" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - tmp_deplibs="$tmp_deplibs $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - linker_flags="$linker_flags $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - func_basename "$output" - output_la=$func_basename_result - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript - func_verbose "creating GNU ld script: $output" - echo 'INPUT (' > $output - for obj in $save_libobjs - do - $ECHO "$obj" >> $output - done - echo ')' >> $output - delfiles="$delfiles $output" - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test "$compiler_needs_object" = yes; then - firstobj="$1 " - shift - fi - for obj - do - $ECHO "$obj" >> $output - done - delfiles="$delfiles $output" - output=$firstobj\"$file_list_spec$output\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test "X$objlist" = X || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - reload_objs=$objlist - eval concat_cmds=\"$reload_cmds\" - else - # All subsequent reloadable object files will link in - # the last one created. - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext - objlist=" $obj" - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\${concat_cmds}$reload_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" - fi - delfiles="$delfiles $output" - - else - output= - fi - - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - fi - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - if ${skipped_export-false}; then - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - fi - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "\`-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "\`-release' is ignored for programs" - - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - compile_command="$compile_command ${wl}-bind_at_load" - finalize_command="$finalize_command ${wl}-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) dllsearchpath="$dllsearchpath:$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=yes - case $host in - *cegcc* | *mingw32ce*) - # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=no - ;; - *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - esac - if test "$wrappers_required" = no; then - # Replace the output file specification. - compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' - fi - - exit $exit_status - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - oldobjs="$oldobjs $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $addlibs - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - echo "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase="$func_basename_result" - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - oldobjs="$oldobjs $gentop/$newobj" - ;; - *) oldobjs="$oldobjs $obj" ;; - esac - done - fi - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - newdependency_libs="$newdependency_libs $libdir/$name" - ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlfiles="$newdlfiles $libdir/$name" - ;; - *) newdlfiles="$newdlfiles $lib" ;; - esac - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlprefiles="$newdlprefiles $libdir/$name" - ;; - esac - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlfiles="$newdlfiles $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlprefiles="$newdlprefiles $abs" - done - dlprefiles="$newdlprefiles" - fi - $RM $output - # place dlname in correct position for cygwin - # In fact, it would be nice if we could use this code for all target - # systems that can't hard-code library paths into their executables - # and that have no shared library path variable independent of PATH, - # but it turns out we can't easily determine that from inspecting - # libtool variables, so we have to hard-code the OSs to which it - # applies here; at the moment, that means platforms that use the PE - # object format with DLL files. See the long comment at the top of - # tests/bindir.at for full details. - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) - # If a -bindir argument was supplied, place the dll there. - if test "x$bindir" != x ; - then - func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result$dlname - else - # Otherwise fall back on heuristic. - tdlname=../bin/$dlname - fi - ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -{ test "$mode" = link || test "$mode" = relink; } && - func_mode_link ${1+"$@"} - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $opt_debug - RM="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) RM="$RM $arg"; rmforce=yes ;; - -*) RM="$RM $arg" ;; - *) files="$files $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - origobjdir="$objdir" - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - objdir="$origobjdir" - else - objdir="$dir/$origobjdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$mode" = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates - if test "$mode" = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" - - case "$mode" in - clean) - case " $library_names " in - # " " in the beginning catches empty $dlname - *" $dlname "*) ;; - *) rmfiles="$rmfiles $objdir/$dlname" ;; - esac - test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then - rmfiles="$rmfiles $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then - rmfiles="$rmfiles $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$mode" = clean ; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - rmfiles="$rmfiles $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - rmfiles="$rmfiles $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - rmfiles="$rmfiles $objdir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - objdir="$origobjdir" - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -{ test "$mode" = uninstall || test "$mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: -# vi:sw=2 - diff --git a/cloog-0.16.3/isl/m4/ax_c___attribute__.m4 b/cloog-0.16.3/isl/m4/ax_c___attribute__.m4 deleted file mode 100644 index cf3d62b..0000000 --- a/cloog-0.16.3/isl/m4/ax_c___attribute__.m4 +++ /dev/null @@ -1,66 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_c___attribute__.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_C___ATTRIBUTE__ -# -# DESCRIPTION -# -# Provides a test for the compiler support of __attribute__ extensions. -# Defines HAVE___ATTRIBUTE__ if it is found. -# -# LICENSE -# -# Copyright (c) 2008 Stepan Kasal -# Copyright (c) 2008 Christian Haggstrom -# Copyright (c) 2008 Ryan McCabe -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 8 - -AC_DEFUN([AX_C___ATTRIBUTE__], [ - AC_CACHE_CHECK([for __attribute__], [ax_cv___attribute__], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - static void foo(void) __attribute__ ((unused)); - static void - foo(void) { - exit(1); - } - ]], [])], - [ax_cv___attribute__=yes], - [ax_cv___attribute__=no] - ) - ]) - if test "$ax_cv___attribute__" = "yes"; then - AC_DEFINE([HAVE___ATTRIBUTE__], 1, [define if your compiler has __attribute__]) - fi -]) diff --git a/cloog-0.16.3/isl/m4/ax_cc_maxopt.m4 b/cloog-0.16.3/isl/m4/ax_cc_maxopt.m4 deleted file mode 100644 index 92d522d..0000000 --- a/cloog-0.16.3/isl/m4/ax_cc_maxopt.m4 +++ /dev/null @@ -1,188 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_cc_maxopt.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CC_MAXOPT -# -# DESCRIPTION -# -# Try to turn on "good" C optimization flags for various compilers and -# architectures, for some definition of "good". (In our case, good for -# FFTW and hopefully for other scientific codes. Modify as needed.) -# -# The user can override the flags by setting the CFLAGS environment -# variable. The user can also specify --enable-portable-binary in order to -# disable any optimization flags that might result in a binary that only -# runs on the host architecture. -# -# Note also that the flags assume that ANSI C aliasing rules are followed -# by the code (e.g. for gcc's -fstrict-aliasing), and that floating-point -# computations can be re-ordered as needed. -# -# Requires macros: AX_CHECK_COMPILER_FLAGS, AX_COMPILER_VENDOR, -# AX_GCC_ARCHFLAG, AX_GCC_X86_CPUID. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CC_MAXOPT], -[ -AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AX_COMPILER_VENDOR]) -AC_REQUIRE([AC_CANONICAL_HOST]) - -AC_ARG_ENABLE(portable-binary, [AC_HELP_STRING([--enable-portable-binary], [disable compiler optimizations that would produce unportable binaries])], - acx_maxopt_portable=$withval, acx_maxopt_portable=no) - -# Try to determine "good" native compiler flags if none specified via CFLAGS -if test "$ac_test_CFLAGS" != "set"; then - CFLAGS="" - case $ax_cv_c_compiler_vendor in - dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" - if test "x$acx_maxopt_portable" = xno; then - CFLAGS="$CFLAGS -arch host" - fi;; - - sun) CFLAGS="-native -fast -xO5 -dalign" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS -xarch=generic" - fi;; - - hp) CFLAGS="+Oall +Optrs_ansi +DSnative" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS +DAportable" - fi;; - - ibm) if test "x$acx_maxopt_portable" = xno; then - xlc_opt="-qarch=auto -qtune=auto" - else - xlc_opt="-qtune=auto" - fi - AX_CHECK_COMPILER_FLAGS($xlc_opt, - CFLAGS="-O3 -qansialias -w $xlc_opt", - [CFLAGS="-O3 -qansialias -w" - echo "******************************************************" - echo "* You seem to have the IBM C compiler. It is *" - echo "* recommended for best performance that you use: *" - echo "* *" - echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" - echo "* ^^^ ^^^ *" - echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" - echo "* CPU you have. (Set the CFLAGS environment var. *" - echo "* and re-run configure.) For more info, man cc. *" - echo "******************************************************"]) - ;; - - intel) CFLAGS="-O3 -ansi_alias" - if test "x$acx_maxopt_portable" = xno; then - icc_archflag=unknown - icc_flags="" - case $host_cpu in - i686*|x86_64*) - # icc accepts gcc assembly syntax, so these should work: - AX_GCC_X86_CPUID(0) - AX_GCC_X86_CPUID(1) - case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *6a?:*[[234]]:*:*|*6[[789b]]?:*:*:*) icc_flags="-xK";; - *f3[[347]]:*:*:*|*f4[1347]:*:*:*) icc_flags="-xP -xN -xW -xK";; - *f??:*:*:*) icc_flags="-xN -xW -xK";; - esac ;; - esac ;; - esac - if test "x$icc_flags" != x; then - for flag in $icc_flags; do - AX_CHECK_COMPILER_FLAGS($flag, [icc_archflag=$flag; break]) - done - fi - AC_MSG_CHECKING([for icc architecture flag]) - AC_MSG_RESULT($icc_archflag) - if test "x$icc_archflag" != xunknown; then - CFLAGS="$CFLAGS $icc_archflag" - fi - fi - ;; - - gnu) - # default optimization flags for gcc on all systems - CFLAGS="-O3 -fomit-frame-pointer" - - # -malign-double for x86 systems - AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double") - - # -fstrict-aliasing for gcc-2.95+ - AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing, - CFLAGS="$CFLAGS -fstrict-aliasing") - - # note that we enable "unsafe" fp optimization with other compilers, too - AX_CHECK_COMPILER_FLAGS(-ffast-math, CFLAGS="$CFLAGS -ffast-math") - - AX_GCC_ARCHFLAG($acx_maxopt_portable) - - # drop to -O1 for gcc 4.2 - $CC --version | - sed -e 's/.* \(@<:@0-9@:>@@<:@0-9@:>@*\)\.\(@<:@0-9@:>@@<:@0-9@:>@*\).*/\1 \2/' | - (read major minor - if test $major -eq 4 -a $minor -eq 2; then - exit 0 - fi - exit 1 - ) && CFLAGS="-O1" - ;; - esac - - if test -z "$CFLAGS"; then - echo "" - echo "********************************************************" - echo "* WARNING: Don't know the best CFLAGS for this system *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" - echo "********************************************************" - echo "" - CFLAGS="-O3" - fi - - AX_CHECK_COMPILER_FLAGS($CFLAGS, [], [ - echo "" - echo "********************************************************" - echo "* WARNING: The guessed CFLAGS don't seem to work with *" - echo "* your compiler. *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "********************************************************" - echo "" - CFLAGS="" - ]) - -fi -]) diff --git a/cloog-0.16.3/isl/m4/ax_check_compiler_flags.m4 b/cloog-0.16.3/isl/m4/ax_check_compiler_flags.m4 deleted file mode 100644 index 7da8324..0000000 --- a/cloog-0.16.3/isl/m4/ax_check_compiler_flags.m4 +++ /dev/null @@ -1,74 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_check_compiler_flags.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CHECK_COMPILER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE]) -# -# DESCRIPTION -# -# Check whether the given compiler FLAGS work with the current language's -# compiler, or whether they give an error. (Warnings, however, are -# ignored.) -# -# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on -# success/failure. -# -# LICENSE -# -# Copyright (c) 2009 Steven G. Johnson -# Copyright (c) 2009 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CHECK_COMPILER_FLAGS], -[AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX -AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1]) -dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname: -AS_LITERAL_IF([$1], - [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1]), [ - ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=yes, - AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=no) - _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])], - [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=yes, - eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=no) - _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS]) -eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1]) -AC_MSG_RESULT($ax_check_compiler_flags) -if test "x$ax_check_compiler_flags" = xyes; then - m4_default([$2], :) -else - m4_default([$3], :) -fi -])dnl AX_CHECK_COMPILER_FLAGS diff --git a/cloog-0.16.3/isl/m4/ax_compiler_vendor.m4 b/cloog-0.16.3/isl/m4/ax_compiler_vendor.m4 deleted file mode 100644 index 3214706..0000000 --- a/cloog-0.16.3/isl/m4/ax_compiler_vendor.m4 +++ /dev/null @@ -1,63 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_compiler_vendor.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_COMPILER_VENDOR -# -# DESCRIPTION -# -# Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, sun, -# hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft, -# watcom, etc. The vendor is returned in the cache variable -# $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 9 - -AC_DEFUN([AX_COMPILER_VENDOR], -[ -AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, - [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown - # note: don't check for gcc first since some other compilers define __GNUC__ - for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ clang:__clang__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do - vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ -#if !($vencpp) - thisisanerror; -#endif -])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break]) - done - ]) -]) diff --git a/cloog-0.16.3/isl/m4/ax_create_pkgconfig_info.m4 b/cloog-0.16.3/isl/m4/ax_create_pkgconfig_info.m4 deleted file mode 100644 index 60ac548..0000000 --- a/cloog-0.16.3/isl/m4/ax_create_pkgconfig_info.m4 +++ /dev/null @@ -1,349 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_create_pkgconfig_info.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CREATE_PKGCONFIG_INFO [(outputfile, [requires [,libs [,summary [,cflags [, ldflags]]]]])] -# -# DESCRIPTION -# -# Defaults: -# -# $1 = $PACKAGE_NAME.pc -# $2 = (empty) -# $3 = $PACKAGE_LIBS $LIBS (as set at that point in configure.ac) -# $4 = $PACKAGE_SUMMARY (or $1 Library) -# $5 = $CPPFLAGS $PACKAGE_CFLAGS (as set at the point in configure.ac) -# $6 = $LDFLAGS $PACKAGE_LDFLAGS (as set at the point in configure.ac) -# -# PACKAGE_NAME defaults to $PACKAGE if not set. -# PACKAGE_LIBS defaults to -l$PACKAGE_NAME if not set. -# -# The resulting file is called $PACKAGE.pc.in / $PACKAGE.pc -# -# You will find this macro most useful in conjunction with -# ax_spec_defaults that can read good initializers from the .spec file. In -# consequencd, most of the generatable installable stuff can be made from -# information being updated in a single place for the whole project. -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# Copyright (c) 2008 Sven Verdoolaege -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CREATE_PKGCONFIG_INFO],[dnl -AS_VAR_PUSHDEF([PKGCONFIG_suffix],[ax_create_pkgconfig_suffix])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libdir],[ax_create_pkgconfig_libdir])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libfile],[ax_create_pkgconfig_libfile])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libname],[ax_create_pkgconfig_libname])dnl -AS_VAR_PUSHDEF([PKGCONFIG_version],[ax_create_pkgconfig_version])dnl -AS_VAR_PUSHDEF([PKGCONFIG_description],[ax_create_pkgconfig_description])dnl -AS_VAR_PUSHDEF([PKGCONFIG_requires],[ax_create_pkgconfig_requires])dnl -AS_VAR_PUSHDEF([PKGCONFIG_pkglibs],[ax_create_pkgconfig_pkglibs])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libs],[ax_create_pkgconfig_libs])dnl -AS_VAR_PUSHDEF([PKGCONFIG_ldflags],[ax_create_pkgconfig_ldflags])dnl -AS_VAR_PUSHDEF([PKGCONFIG_cppflags],[ax_create_pkgconfig_cppflags])dnl -AS_VAR_PUSHDEF([PKGCONFIG_generate],[ax_create_pkgconfig_generate])dnl -AS_VAR_PUSHDEF([PKGCONFIG_src_libdir],[ax_create_pkgconfig_src_libdir])dnl -AS_VAR_PUSHDEF([PKGCONFIG_src_headers],[ax_create_pkgconfig_src_headers])dnl - -# we need the expanded forms... -test "x$prefix" = xNONE && prefix=$ac_default_prefix -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -AC_MSG_CHECKING(our pkgconfig libname) -test ".$PKGCONFIG_libname" != "." || \ -PKGCONFIG_libname="ifelse($1,,${PACKAGE_NAME},`basename $1 .pc`)" -test ".$PKGCONFIG_libname" != "." || \ -PKGCONFIG_libname="$PACKAGE" -PKGCONFIG_libname=`eval echo "$PKGCONFIG_libname"` -PKGCONFIG_libname=`eval echo "$PKGCONFIG_libname"` -AC_MSG_RESULT($PKGCONFIG_libname) - -AC_MSG_CHECKING(our pkgconfig version) -test ".$PKGCONFIG_version" != "." || \ -PKGCONFIG_version="${PACKAGE_VERSION}" -test ".$PKGCONFIG_version" != "." || \ -PKGCONFIG_version="$VERSION" -PKGCONFIG_version=`eval echo "$PKGCONFIG_version"` -PKGCONFIG_version=`eval echo "$PKGCONFIG_version"` -AC_MSG_RESULT($PKGCONFIG_version) - -AC_MSG_CHECKING(our pkgconfig_libdir) -test ".$pkgconfig_libdir" = "." && \ -pkgconfig_libdir='${libdir}/pkgconfig' -PKGCONFIG_libdir=`eval echo "$pkgconfig_libdir"` -PKGCONFIG_libdir=`eval echo "$PKGCONFIG_libdir"` -PKGCONFIG_libdir=`eval echo "$PKGCONFIG_libdir"` -AC_MSG_RESULT($pkgconfig_libdir) -test "$pkgconfig_libdir" != "$PKGCONFIG_libdir" && ( -AC_MSG_RESULT(expanded our pkgconfig_libdir... $PKGCONFIG_libdir)) -AC_SUBST([pkgconfig_libdir]) - -AC_MSG_CHECKING(our pkgconfig_libfile) -test ".$pkgconfig_libfile" != "." || \ -pkgconfig_libfile="ifelse($1,,$PKGCONFIG_libname.pc,`basename $1`)" -PKGCONFIG_libfile=`eval echo "$pkgconfig_libfile"` -PKGCONFIG_libfile=`eval echo "$PKGCONFIG_libfile"` -AC_MSG_RESULT($pkgconfig_libfile) -test "$pkgconfig_libfile" != "$PKGCONFIG_libfile" && ( -AC_MSG_RESULT(expanded our pkgconfig_libfile... $PKGCONFIG_libfile)) -AC_SUBST([pkgconfig_libfile]) - -AC_MSG_CHECKING(our package / suffix) -PKGCONFIG_suffix="$program_suffix" -test ".$PKGCONFIG_suffix" != .NONE || PKGCONFIG_suffix="" -AC_MSG_RESULT(${PACKAGE_NAME} / ${PKGCONFIG_suffix}) - -AC_MSG_CHECKING(our pkgconfig description) -PKGCONFIG_description="ifelse($4,,$PACKAGE_SUMMARY,$4)" -test ".$PKGCONFIG_description" != "." || \ -PKGCONFIG_description="$PKGCONFIG_libname Library" -PKGCONFIG_description=`eval echo "$PKGCONFIG_description"` -PKGCONFIG_description=`eval echo "$PKGCONFIG_description"` -AC_MSG_RESULT($PKGCONFIG_description) - -AC_MSG_CHECKING(our pkgconfig requires) -PKGCONFIG_requires="ifelse($2,,$PACKAGE_REQUIRES,$2)" -PKGCONFIG_requires=`eval echo "$PKGCONFIG_requires"` -PKGCONFIG_requires=`eval echo "$PKGCONFIG_requires"` -AC_MSG_RESULT($PKGCONFIG_requires) - -AC_MSG_CHECKING(our pkgconfig ext libs) -PKGCONFIG_pkglibs="$PACKAGE_LIBS" -test ".$PKGCONFIG_pkglibs" != "." || PKGCONFIG_pkglibs="-l$PKGCONFIG_libname" -PKGCONFIG_libs="ifelse($3,,$PKGCONFIG_pkglibs $LIBS,$3)" -PKGCONFIG_libs=`eval echo "$PKGCONFIG_libs"` -PKGCONFIG_libs=`eval echo "$PKGCONFIG_libs"` -AC_MSG_RESULT($PKGCONFIG_libs) - -AC_MSG_CHECKING(our pkgconfig cppflags) -PKGCONFIG_cppflags="ifelse($5,,$CPPFLAGS $PACKAGE_CFLAGS,$5)" -PKGCONFIG_cppflags=`eval echo "$PKGCONFIG_cppflags"` -PKGCONFIG_cppflags=`eval echo "$PKGCONFIG_cppflags"` -AC_MSG_RESULT($PKGCONFIG_cppflags) - -AC_MSG_CHECKING(our pkgconfig ldflags) -PKGCONFIG_ldflags="ifelse($6,,$LDFLAGS $PACKAGE_LDFLAGS,$5)" -PKGCONFIG_ldflags=`eval echo "$PKGCONFIG_ldflags"` -PKGCONFIG_ldflags=`eval echo "$PKGCONFIG_ldflags"` -AC_MSG_RESULT($PKGCONFIG_ldflags) - -test ".$PKGCONFIG_generate" != "." || \ -PKGCONFIG_generate="ifelse($1,,$PKGCONFIG_libname.pc,$1)" -PKGCONFIG_generate=`eval echo "$PKGCONFIG_generate"` -PKGCONFIG_generate=`eval echo "$PKGCONFIG_generate"` -test "$pkgconfig_libfile" != "$PKGCONFIG_generate" && ( -AC_MSG_RESULT(generate the pkgconfig later... $PKGCONFIG_generate)) - -if test ".$PKGCONFIG_src_libdir" = "." ; then -PKGCONFIG_src_libdir=`pwd` -PKGCONFIG_src_libdir=`AS_DIRNAME("$PKGCONFIG_src_libdir/$PKGCONFIG_generate")` -test ! -d $PKGCONFIG_src_libdir/src || \ -PKGCONFIG_src_libdir="$PKGCONFIG_src_libdir/src" -case ".$objdir" in -*libs) PKGCONFIG_src_libdir="$PKGCONFIG_src_libdir/$objdir" ;; esac -AC_MSG_RESULT(noninstalled pkgconfig -L $PKGCONFIG_src_libdir) -fi - -if test ".$PKGCONFIG_src_headers" = "." ; then -PKGCONFIG_src_headers=`pwd` -v="$ac_top_srcdir" ; -test ".$v" != "." || v="$ax_spec_dir" -test ".$v" != "." || v="$srcdir" -case "$v" in /*) PKGCONFIG_src_headers="" ;; esac -PKGCONFIG_src_headers=`AS_DIRNAME("$PKGCONFIG_src_headers/$v/x")` -test ! -d $PKGCONFIG_src_headers/incl[]ude || \ -PKGCONFIG_src_headers="$PKGCONFIG_src_headers/incl[]ude" -AC_MSG_RESULT(noninstalled pkgconfig -I $PKGCONFIG_src_headers) -fi - - -dnl AC_CONFIG_COMMANDS crap disallows to use $PKGCONFIG_libfile here... -AC_CONFIG_COMMANDS([$ax_create_pkgconfig_generate],[ -pkgconfig_generate="$ax_create_pkgconfig_generate" -if test ! -f "$pkgconfig_generate.in" -then generate="true" -elif grep ' generated by configure ' $pkgconfig_generate.in >/dev/null -then generate="true" -else generate="false"; -fi -if $generate ; then -AC_MSG_NOTICE(creating $pkgconfig_generate.in) -cat > $pkgconfig_generate.in <conftest.sed < $pkgconfig_generate -if test ! -s $pkgconfig_generate ; then - AC_MSG_ERROR([$pkgconfig_generate is empty]) -fi ; rm conftest.sed # DONE generate $pkgconfig_generate -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.pc/'` -AC_MSG_NOTICE(creating $pkgconfig_uninstalled) -cat >conftest.sed < $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - AC_MSG_ERROR([$pkgconfig_uninstalled is empty]) -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled - pkgconfig_requires_add=`echo ${pkgconfig_requires}` -if test ".$pkgconfig_requires_add" != "." ; then - pkgconfig_requires_add="pkg-config $pkgconfig_requires_add" - else pkgconfig_requires_add=":" ; fi -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.sh/'` -AC_MSG_NOTICE(creating $pkgconfig_uninstalled) -cat >conftest.sed <Name:>for option\\; do case \"\$option\" in --list-all|--name) echo > -s>Description: *>\\;\\; --help) pkg-config --help \\; echo Buildscript Of > -s>Version: *>\\;\\; --modversion|--version) echo > -s>Requires:>\\;\\; --requires) echo $pkgconfig_requires_add> -s>Libs: *>\\;\\; --libs) echo > -s>Cflags: *>\\;\\; --cflags) echo > -/--libs)/a\\ - $pkgconfig_requires_add -/--cflags)/a\\ - $pkgconfig_requires_add\\ -;; --variable=*) eval echo '\$'\`echo \$option | sed -e 's/.*=//'\`\\ -;; --uninstalled) exit 0 \\ -;; *) ;; esac done -AXEOF -sed -f conftest.sed $pkgconfig_generate.in > $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - AC_MSG_ERROR([$pkgconfig_uninstalled is empty]) -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled -],[ -dnl AC_CONFIG_COMMANDS crap, the AS_PUSHVAR defines are invalid here... -ax_create_pkgconfig_generate="$ax_create_pkgconfig_generate" -pkgconfig_prefix='$prefix' -pkgconfig_execprefix='$exec_prefix' -pkgconfig_bindir='$bindir' -pkgconfig_libdir='$libdir' -pkgconfig_includedir='$includedir' -pkgconfig_datarootdir='$datarootdir' -pkgconfig_datadir='$datadir' -pkgconfig_sysconfdir='$sysconfdir' -pkgconfig_suffix='$ax_create_pkgconfig_suffix' -pkgconfig_package='$PACKAGE_NAME' -pkgconfig_libname='$ax_create_pkgconfig_libname' -pkgconfig_description='$ax_create_pkgconfig_description' -pkgconfig_version='$ax_create_pkgconfig_version' -pkgconfig_requires='$ax_create_pkgconfig_requires' -pkgconfig_libs='$ax_create_pkgconfig_libs' -pkgconfig_ldflags='$ax_create_pkgconfig_ldflags' -pkgconfig_cppflags='$ax_create_pkgconfig_cppflags' -pkgconfig_src_libdir='$ax_create_pkgconfig_src_libdir' -pkgconfig_src_headers='$ax_create_pkgconfig_src_headers' -])dnl -AS_VAR_POPDEF([PKGCONFIG_suffix])dnl -AS_VAR_POPDEF([PKGCONFIG_libdir])dnl -AS_VAR_POPDEF([PKGCONFIG_libfile])dnl -AS_VAR_POPDEF([PKGCONFIG_libname])dnl -AS_VAR_POPDEF([PKGCONFIG_version])dnl -AS_VAR_POPDEF([PKGCONFIG_description])dnl -AS_VAR_POPDEF([PKGCONFIG_requires])dnl -AS_VAR_POPDEF([PKGCONFIG_pkglibs])dnl -AS_VAR_POPDEF([PKGCONFIG_libs])dnl -AS_VAR_POPDEF([PKGCONFIG_ldflags])dnl -AS_VAR_POPDEF([PKGCONFIG_cppflags])dnl -AS_VAR_POPDEF([PKGCONFIG_generate])dnl -AS_VAR_POPDEF([PKGCONFIG_src_libdir])dnl -AS_VAR_POPDEF([PKGCONFIG_src_headers])dnl -]) diff --git a/cloog-0.16.3/isl/m4/ax_create_stdint_h.m4 b/cloog-0.16.3/isl/m4/ax_create_stdint_h.m4 deleted file mode 100644 index 7b82165..0000000 --- a/cloog-0.16.3/isl/m4/ax_create_stdint_h.m4 +++ /dev/null @@ -1,739 +0,0 @@ -# =========================================================================== -# http://autoconf-archive.cryp.to/ax_create_stdint_h.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CREATE_STDINT_H [( HEADER-TO-GENERATE [, HEDERS-TO-CHECK])] -# -# DESCRIPTION -# -# the "ISO C9X: 7.18 Integer types " section requires the -# existence of an include file that defines a set of typedefs, -# especially uint8_t,int32_t,uintptr_t. Many older installations will not -# provide this file, but some will have the very same definitions in -# . In other enviroments we can use the inet-types in -# which would define the typedefs int8_t and u_int8_t -# respectivly. -# -# This macros will create a local "_stdint.h" or the headerfile given as -# an argument. In many cases that file will just "#include " or -# "#include ", while in other environments it will provide the -# set of basic 'stdint's definitions/typedefs: -# -# int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t -# int_least32_t.. int_fast32_t.. intmax_t -# -# which may or may not rely on the definitions of other files, or using -# the AC_CHECK_SIZEOF macro to determine the actual sizeof each type. -# -# if your header files require the stdint-types you will want to create an -# installable file mylib-int.h that all your other installable header may -# include. So if you have a library package named "mylib", just use -# -# AX_CREATE_STDINT_H(mylib-int.h) -# -# in configure.ac and go to install that very header file in Makefile.am -# along with the other headers (mylib.h) - and the mylib-specific headers -# can simply use "#include " to obtain the stdint-types. -# -# Remember, if the system already had a valid , the generated -# file will include it directly. No need for fuzzy HAVE_STDINT_H things... -# (oops, GCC 4.2.x has deliberatly disabled its stdint.h for non-c99 -# compilation and the c99-mode is not the default. Therefore this macro -# will not use the compiler's stdint.h - please complain to the GCC -# developers). -# -# LAST MODIFICATION -# -# 2008-04-12 -# -# COPYLEFT -# -# Copyright (c) 2008 Guido U. Draheim -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Macro Archive. When you make and -# distribute a modified version of the Autoconf Macro, you may extend this -# special exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CHECK_DATA_MODEL],[ - AC_CHECK_SIZEOF(char) - AC_CHECK_SIZEOF(short) - AC_CHECK_SIZEOF(int) - AC_CHECK_SIZEOF(long) - AC_CHECK_SIZEOF(void*) - ac_cv_char_data_model="" - ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char" - ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short" - ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int" - ac_cv_long_data_model="" - ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int" - ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long" - ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp" - AC_MSG_CHECKING([data model]) - case "$ac_cv_char_data_model/$ac_cv_long_data_model" in - 122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;; - 122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;; - 122/*) ac_cv_data_model="i16" ; n="unusual int16 model" ;; - 124/444) ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;; - 124/488) ac_cv_data_model="LP64" ; n="standard 64bit unixish" ;; - 124/448) ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;; - 124/*) ac_cv_data_model="i32" ; n="unusual int32 model" ;; - 128/888) ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;; - 128/*) ac_cv_data_model="i64" ; n="unusual int64 model" ;; - 222/*2) ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;; - 333/*3) ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;; - 444/*4) ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;; - 666/*6) ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;; - 888/*8) ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;; - 222/*|333/*|444/*|666/*|888/*) : - ac_cv_data_model="iDSP" ; n="unusual dsptype" ;; - *) ac_cv_data_model="none" ; n="very unusual model" ;; - esac - AC_MSG_RESULT([$ac_cv_data_model ($ac_cv_long_data_model, $n)]) -]) - -dnl AX_CHECK_HEADER_STDINT_X([HEADERLIST][,ACTION-IF]) -AC_DEFUN([AX_CHECK_HEADER_STDINT_X],[ -AC_CACHE_CHECK([for stdint uintptr_t], [ac_cv_header_stdint_x],[ - ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h) - AC_MSG_RESULT([(..)]) - for i in m4_ifval([$1],[$1],[stdint.h inttypes.h sys/inttypes.h sys/types.h]) - do - unset ac_cv_type_uintptr_t - unset ac_cv_type_uint64_t - AC_CHECK_TYPE(uintptr_t,[ac_cv_header_stdint_x=$i],continue,[#include <$i>]) - AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>]) - m4_ifvaln([$2],[$2]) break - done - AC_MSG_CHECKING([for stdint uintptr_t]) - ]) -]) - -AC_DEFUN([AX_CHECK_HEADER_STDINT_O],[ -AC_CACHE_CHECK([for stdint uint32_t], [ac_cv_header_stdint_o],[ - ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h) - AC_MSG_RESULT([(..)]) - for i in m4_ifval([$1],[$1],[inttypes.h sys/inttypes.h sys/types.h stdint.h]) - do - unset ac_cv_type_uint32_t - unset ac_cv_type_uint64_t - AC_CHECK_TYPE(uint32_t,[ac_cv_header_stdint_o=$i],continue,[#include <$i>]) - AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>]) - m4_ifvaln([$2],[$2]) break - break; - done - AC_MSG_CHECKING([for stdint uint32_t]) - ]) -]) - -AC_DEFUN([AX_CHECK_HEADER_STDINT_U],[ -AC_CACHE_CHECK([for stdint u_int32_t], [ac_cv_header_stdint_u],[ - ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h) - AC_MSG_RESULT([(..)]) - for i in m4_ifval([$1],[$1],[sys/types.h inttypes.h sys/inttypes.h]) ; do - unset ac_cv_type_u_int32_t - unset ac_cv_type_u_int64_t - AC_CHECK_TYPE(u_int32_t,[ac_cv_header_stdint_u=$i],continue,[#include <$i>]) - AC_CHECK_TYPE(u_int64_t,[and64="/u_int64_t"],[and64=""],[#include<$i>]) - m4_ifvaln([$2],[$2]) break - break; - done - AC_MSG_CHECKING([for stdint u_int32_t]) - ]) -]) - -AC_DEFUN([AX_CREATE_STDINT_H], -[# ------ AX CREATE STDINT H ------------------------------------- -AC_MSG_CHECKING([for stdint types]) -ac_stdint_h=`echo ifelse($1, , _stdint.h, $1)` -# try to shortcircuit - if the default include path of the compiler -# can find a "stdint.h" header then we assume that all compilers can. -AC_CACHE_VAL([ac_cv_header_stdint_t],[ -old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS="" -old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS="" -old_CFLAGS="$CFLAGS" ; CFLAGS="" -AC_TRY_COMPILE([#include ],[int_least32_t v = 0;], -[ac_cv_stdint_result="(assuming C99 compatible system)" - ac_cv_header_stdint_t="stdint.h"; ], -[ac_cv_header_stdint_t=""]) -if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then -CFLAGS="-std=c99" -AC_TRY_COMPILE([#include ],[int_least32_t v = 0;], -[AC_MSG_WARN(your GCC compiler has a defunct stdint.h for its default-mode)]) -fi -CXXFLAGS="$old_CXXFLAGS" -CPPFLAGS="$old_CPPFLAGS" -CFLAGS="$old_CFLAGS" ]) - -v="... $ac_cv_header_stdint_h" -if test "$ac_stdint_h" = "stdint.h" ; then - AC_MSG_RESULT([(are you sure you want them in ./stdint.h?)]) -elif test "$ac_stdint_h" = "inttypes.h" ; then - AC_MSG_RESULT([(are you sure you want them in ./inttypes.h?)]) -elif test "_$ac_cv_header_stdint_t" = "_" ; then - AC_MSG_RESULT([(putting them into $ac_stdint_h)$v]) -else - ac_cv_header_stdint="$ac_cv_header_stdint_t" - AC_MSG_RESULT([$ac_cv_header_stdint (shortcircuit)]) -fi - -if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit.. - -dnl .....intro message done, now do a few system checks..... -dnl btw, all old CHECK_TYPE macros do automatically "DEFINE" a type, -dnl therefore we use the autoconf implementation detail CHECK_TYPE_NEW -dnl instead that is triggered with 3 or more arguments (see types.m4) - -inttype_headers=`echo $2 | sed -e 's/,/ /g'` - -ac_cv_stdint_result="(no helpful system typedefs seen)" -AX_CHECK_HEADER_STDINT_X(dnl - stdint.h inttypes.h sys/inttypes.h $inttype_headers, - ac_cv_stdint_result="(seen uintptr_t$and64 in $i)") - -if test "_$ac_cv_header_stdint_x" = "_" ; then -AX_CHECK_HEADER_STDINT_O(dnl, - inttypes.h sys/inttypes.h stdint.h $inttype_headers, - ac_cv_stdint_result="(seen uint32_t$and64 in $i)") -fi - -if test "_$ac_cv_header_stdint_x" = "_" ; then -if test "_$ac_cv_header_stdint_o" = "_" ; then -AX_CHECK_HEADER_STDINT_U(dnl, - sys/types.h inttypes.h sys/inttypes.h $inttype_headers, - ac_cv_stdint_result="(seen u_int32_t$and64 in $i)") -fi fi - -dnl if there was no good C99 header file, do some typedef checks... -if test "_$ac_cv_header_stdint_x" = "_" ; then - AC_MSG_CHECKING([for stdint datatype model]) - AC_MSG_RESULT([(..)]) - AX_CHECK_DATA_MODEL -fi - -if test "_$ac_cv_header_stdint_x" != "_" ; then - ac_cv_header_stdint="$ac_cv_header_stdint_x" -elif test "_$ac_cv_header_stdint_o" != "_" ; then - ac_cv_header_stdint="$ac_cv_header_stdint_o" -elif test "_$ac_cv_header_stdint_u" != "_" ; then - ac_cv_header_stdint="$ac_cv_header_stdint_u" -else - ac_cv_header_stdint="stddef.h" -fi - -AC_MSG_CHECKING([for extra inttypes in chosen header]) -AC_MSG_RESULT([($ac_cv_header_stdint)]) -dnl see if int_least and int_fast types are present in _this_ header. -unset ac_cv_type_int_least32_t -unset ac_cv_type_int_fast32_t -AC_CHECK_TYPE(int_least32_t,,,[#include <$ac_cv_header_stdint>]) -AC_CHECK_TYPE(int_fast32_t,,,[#include<$ac_cv_header_stdint>]) -AC_CHECK_TYPE(intmax_t,,,[#include <$ac_cv_header_stdint>]) - -fi # shortcircut to system "stdint.h" -# ------------------ PREPARE VARIABLES ------------------------------ -if test "$GCC" = "yes" ; then -ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1` -else -ac_cv_stdint_message="using $CC" -fi - -AC_MSG_RESULT([make use of $ac_cv_header_stdint in $ac_stdint_h dnl -$ac_cv_stdint_result]) - -dnl ----------------------------------------------------------------- -# ----------------- DONE inttypes.h checks START header ------------- -AC_CONFIG_COMMANDS([$ac_stdint_h],[ -AC_MSG_NOTICE(creating $ac_stdint_h : $_ac_stdint_h) -ac_stdint=$tmp/_stdint.h - -echo "#ifndef" $_ac_stdint_h >$ac_stdint -echo "#define" $_ac_stdint_h "1" >>$ac_stdint -echo "#ifndef" _GENERATED_STDINT_H >>$ac_stdint -echo "#define" _GENERATED_STDINT_H '"'$PACKAGE $VERSION'"' >>$ac_stdint -echo "/* generated $ac_cv_stdint_message */" >>$ac_stdint -if test "_$ac_cv_header_stdint_t" != "_" ; then -echo "#define _STDINT_HAVE_STDINT_H" "1" >>$ac_stdint -echo "#include " >>$ac_stdint -echo "#endif" >>$ac_stdint -echo "#endif" >>$ac_stdint -else - -cat >>$ac_stdint < -#else -#include - -/* .................... configured part ............................ */ - -STDINT_EOF - -echo "/* whether we have a C99 compatible stdint header file */" >>$ac_stdint -if test "_$ac_cv_header_stdint_x" != "_" ; then - ac_header="$ac_cv_header_stdint_x" - echo "#define _STDINT_HEADER_INTPTR" '"'"$ac_header"'"' >>$ac_stdint -else - echo "/* #undef _STDINT_HEADER_INTPTR */" >>$ac_stdint -fi - -echo "/* whether we have a C96 compatible inttypes header file */" >>$ac_stdint -if test "_$ac_cv_header_stdint_o" != "_" ; then - ac_header="$ac_cv_header_stdint_o" - echo "#define _STDINT_HEADER_UINT32" '"'"$ac_header"'"' >>$ac_stdint -else - echo "/* #undef _STDINT_HEADER_UINT32 */" >>$ac_stdint -fi - -echo "/* whether we have a BSD compatible inet types header */" >>$ac_stdint -if test "_$ac_cv_header_stdint_u" != "_" ; then - ac_header="$ac_cv_header_stdint_u" - echo "#define _STDINT_HEADER_U_INT32" '"'"$ac_header"'"' >>$ac_stdint -else - echo "/* #undef _STDINT_HEADER_U_INT32 */" >>$ac_stdint -fi - -echo "" >>$ac_stdint - -if test "_$ac_header" != "_" ; then if test "$ac_header" != "stddef.h" ; then - echo "#include <$ac_header>" >>$ac_stdint - echo "" >>$ac_stdint -fi fi - -echo "/* which 64bit typedef has been found */" >>$ac_stdint -if test "$ac_cv_type_uint64_t" = "yes" ; then -echo "#define _STDINT_HAVE_UINT64_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_UINT64_T */" >>$ac_stdint -fi -if test "$ac_cv_type_u_int64_t" = "yes" ; then -echo "#define _STDINT_HAVE_U_INT64_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_U_INT64_T */" >>$ac_stdint -fi -echo "" >>$ac_stdint - -echo "/* which type model has been detected */" >>$ac_stdint -if test "_$ac_cv_char_data_model" != "_" ; then -echo "#define _STDINT_CHAR_MODEL" "$ac_cv_char_data_model" >>$ac_stdint -echo "#define _STDINT_LONG_MODEL" "$ac_cv_long_data_model" >>$ac_stdint -else -echo "/* #undef _STDINT_CHAR_MODEL // skipped */" >>$ac_stdint -echo "/* #undef _STDINT_LONG_MODEL // skipped */" >>$ac_stdint -fi -echo "" >>$ac_stdint - -echo "/* whether int_least types were detected */" >>$ac_stdint -if test "$ac_cv_type_int_least32_t" = "yes"; then -echo "#define _STDINT_HAVE_INT_LEAST32_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_INT_LEAST32_T */" >>$ac_stdint -fi -echo "/* whether int_fast types were detected */" >>$ac_stdint -if test "$ac_cv_type_int_fast32_t" = "yes"; then -echo "#define _STDINT_HAVE_INT_FAST32_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_INT_FAST32_T */" >>$ac_stdint -fi -echo "/* whether intmax_t type was detected */" >>$ac_stdint -if test "$ac_cv_type_intmax_t" = "yes"; then -echo "#define _STDINT_HAVE_INTMAX_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_INTMAX_T */" >>$ac_stdint -fi -echo "" >>$ac_stdint - - cat >>$ac_stdint <= 199901L -#define _HAVE_UINT64_T -#define _HAVE_LONGLONG_UINT64_T -typedef long long int64_t; -typedef unsigned long long uint64_t; - -#elif !defined __STRICT_ANSI__ -#if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__ -#define _HAVE_UINT64_T -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; - -#elif defined __GNUC__ || defined __MWERKS__ || defined __ELF__ -/* note: all ELF-systems seem to have loff-support which needs 64-bit */ -#if !defined _NO_LONGLONG -#define _HAVE_UINT64_T -#define _HAVE_LONGLONG_UINT64_T -typedef long long int64_t; -typedef unsigned long long uint64_t; -#endif - -#elif defined __alpha || (defined __mips && defined _ABIN32) -#if !defined _NO_LONGLONG -typedef long int64_t; -typedef unsigned long uint64_t; -#endif - /* compiler/cpu type to define int64_t */ -#endif -#endif -#endif - -#if defined _STDINT_HAVE_U_INT_TYPES -/* int8_t int16_t int32_t defined by inet code, redeclare the u_intXX types */ -typedef u_int8_t uint8_t; -typedef u_int16_t uint16_t; -typedef u_int32_t uint32_t; - -/* glibc compatibility */ -#ifndef __int8_t_defined -#define __int8_t_defined -#endif -#endif - -#ifdef _STDINT_NEED_INT_MODEL_T -/* we must guess all the basic types. Apart from byte-adressable system, */ -/* there a few 32-bit-only dsp-systems that we guard with BYTE_MODEL 8-} */ -/* (btw, those nibble-addressable systems are way off, or so we assume) */ - -dnl /* have a look at "64bit and data size neutrality" at */ -dnl /* http://unix.org/version2/whatsnew/login_64bit.html */ -dnl /* (the shorthand "ILP" types always have a "P" part) */ - -#if defined _STDINT_BYTE_MODEL -#if _STDINT_LONG_MODEL+0 == 242 -/* 2:4:2 = IP16 = a normal 16-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned long uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef long int32_t; -#endif -#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL == 444 -/* 2:4:4 = LP32 = a 32-bit system derived from a 16-bit */ -/* 4:4:4 = ILP32 = a normal 32-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef int int32_t; -#endif -#elif _STDINT_LONG_MODEL+0 == 484 || _STDINT_LONG_MODEL+0 == 488 -/* 4:8:4 = IP32 = a 32-bit system prepared for 64-bit */ -/* 4:8:8 = LP64 = a normal 64-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef int int32_t; -#endif -/* this system has a "long" of 64bit */ -#ifndef _HAVE_UINT64_T -#define _HAVE_UINT64_T -typedef unsigned long uint64_t; -typedef long int64_t; -#endif -#elif _STDINT_LONG_MODEL+0 == 448 -/* LLP64 a 64-bit system derived from a 32-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef int int32_t; -#endif -/* assuming the system has a "long long" */ -#ifndef _HAVE_UINT64_T -#define _HAVE_UINT64_T -#define _HAVE_LONGLONG_UINT64_T -typedef unsigned long long uint64_t; -typedef long long int64_t; -#endif -#else -#define _STDINT_NO_INT32_T -#endif -#else -#define _STDINT_NO_INT8_T -#define _STDINT_NO_INT32_T -#endif -#endif - -/* - * quote from SunOS-5.8 sys/inttypes.h: - * Use at your own risk. As of February 1996, the committee is squarely - * behind the fixed sized types; the "least" and "fast" types are still being - * discussed. The probability that the "fast" types may be removed before - * the standard is finalized is high enough that they are not currently - * implemented. - */ - -#if defined _STDINT_NEED_INT_LEAST_T -typedef int8_t int_least8_t; -typedef int16_t int_least16_t; -typedef int32_t int_least32_t; -#ifdef _HAVE_UINT64_T -typedef int64_t int_least64_t; -#endif - -typedef uint8_t uint_least8_t; -typedef uint16_t uint_least16_t; -typedef uint32_t uint_least32_t; -#ifdef _HAVE_UINT64_T -typedef uint64_t uint_least64_t; -#endif - /* least types */ -#endif - -#if defined _STDINT_NEED_INT_FAST_T -typedef int8_t int_fast8_t; -typedef int int_fast16_t; -typedef int32_t int_fast32_t; -#ifdef _HAVE_UINT64_T -typedef int64_t int_fast64_t; -#endif - -typedef uint8_t uint_fast8_t; -typedef unsigned uint_fast16_t; -typedef uint32_t uint_fast32_t; -#ifdef _HAVE_UINT64_T -typedef uint64_t uint_fast64_t; -#endif - /* fast types */ -#endif - -#ifdef _STDINT_NEED_INTMAX_T -#ifdef _HAVE_UINT64_T -typedef int64_t intmax_t; -typedef uint64_t uintmax_t; -#else -typedef long intmax_t; -typedef unsigned long uintmax_t; -#endif -#endif - -#ifdef _STDINT_NEED_INTPTR_T -#ifndef __intptr_t_defined -#define __intptr_t_defined -/* we encourage using "long" to store pointer values, never use "int" ! */ -#if _STDINT_LONG_MODEL+0 == 242 || _STDINT_LONG_MODEL+0 == 484 -typedef unsigned int uintptr_t; -typedef int intptr_t; -#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL+0 == 444 -typedef unsigned long uintptr_t; -typedef long intptr_t; -#elif _STDINT_LONG_MODEL+0 == 448 && defined _HAVE_UINT64_T -typedef uint64_t uintptr_t; -typedef int64_t intptr_t; -#else /* matches typical system types ILP32 and LP64 - but not IP16 or LLP64 */ -typedef unsigned long uintptr_t; -typedef long intptr_t; -#endif -#endif -#endif - -/* The ISO C99 standard specifies that in C++ implementations these - should only be defined if explicitly requested. */ -#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS -#ifndef UINT32_C - -/* Signed. */ -# define INT8_C(c) c -# define INT16_C(c) c -# define INT32_C(c) c -# ifdef _HAVE_LONGLONG_UINT64_T -# define INT64_C(c) c ## L -# else -# define INT64_C(c) c ## LL -# endif - -/* Unsigned. */ -# define UINT8_C(c) c ## U -# define UINT16_C(c) c ## U -# define UINT32_C(c) c ## U -# ifdef _HAVE_LONGLONG_UINT64_T -# define UINT64_C(c) c ## UL -# else -# define UINT64_C(c) c ## ULL -# endif - -/* Maximal type. */ -# ifdef _HAVE_LONGLONG_UINT64_T -# define INTMAX_C(c) c ## L -# define UINTMAX_C(c) c ## UL -# else -# define INTMAX_C(c) c ## LL -# define UINTMAX_C(c) c ## ULL -# endif - - /* literalnumbers */ -#endif -#endif - -/* These limits are merily those of a two complement byte-oriented system */ - -/* Minimum of signed integral types. */ -# define INT8_MIN (-128) -# define INT16_MIN (-32767-1) -# define INT32_MIN (-2147483647-1) -#ifndef INT64_MIN -# define INT64_MIN (-__INT64_C(9223372036854775807)-1) -#endif -/* Maximum of signed integral types. */ -# define INT8_MAX (127) -# define INT16_MAX (32767) -# define INT32_MAX (2147483647) -#ifndef INT64_MAX -# define INT64_MAX (__INT64_C(9223372036854775807)) -#endif - -/* Maximum of unsigned integral types. */ -#ifndef UINT8_MAX -# define UINT8_MAX (255) -#endif -#ifndef UINT16_MAX -# define UINT16_MAX (65535) -#endif -# define UINT32_MAX (4294967295U) -#ifndef UINT64_MAX -# define UINT64_MAX (__UINT64_C(18446744073709551615)) -#endif - -/* Minimum of signed integral types having a minimum size. */ -# define INT_LEAST8_MIN INT8_MIN -# define INT_LEAST16_MIN INT16_MIN -# define INT_LEAST32_MIN INT32_MIN -# define INT_LEAST64_MIN INT64_MIN -/* Maximum of signed integral types having a minimum size. */ -# define INT_LEAST8_MAX INT8_MAX -# define INT_LEAST16_MAX INT16_MAX -# define INT_LEAST32_MAX INT32_MAX -# define INT_LEAST64_MAX INT64_MAX - -/* Maximum of unsigned integral types having a minimum size. */ -# define UINT_LEAST8_MAX UINT8_MAX -# define UINT_LEAST16_MAX UINT16_MAX -# define UINT_LEAST32_MAX UINT32_MAX -# define UINT_LEAST64_MAX UINT64_MAX - - /* shortcircuit*/ -#endif - /* once */ -#endif -#endif -STDINT_EOF -fi - if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then - AC_MSG_NOTICE([$ac_stdint_h is unchanged]) - else - ac_dir=`AS_DIRNAME(["$ac_stdint_h"])` - AS_MKDIR_P(["$ac_dir"]) - rm -f $ac_stdint_h - mv $ac_stdint $ac_stdint_h - fi -],[# variables for create stdint.h replacement -PACKAGE="$PACKAGE" -VERSION="$VERSION" -ac_stdint_h="$ac_stdint_h" -_ac_stdint_h=AS_TR_CPP(_$PACKAGE-$ac_stdint_h) -ac_cv_stdint_message="$ac_cv_stdint_message" -ac_cv_header_stdint_t="$ac_cv_header_stdint_t" -ac_cv_header_stdint_x="$ac_cv_header_stdint_x" -ac_cv_header_stdint_o="$ac_cv_header_stdint_o" -ac_cv_header_stdint_u="$ac_cv_header_stdint_u" -ac_cv_type_uint64_t="$ac_cv_type_uint64_t" -ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t" -ac_cv_char_data_model="$ac_cv_char_data_model" -ac_cv_long_data_model="$ac_cv_long_data_model" -ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t" -ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t" -ac_cv_type_intmax_t="$ac_cv_type_intmax_t" -]) -]) diff --git a/cloog-0.16.3/isl/m4/ax_detect_git_head.m4 b/cloog-0.16.3/isl/m4/ax_detect_git_head.m4 deleted file mode 100644 index d585983..0000000 --- a/cloog-0.16.3/isl/m4/ax_detect_git_head.m4 +++ /dev/null @@ -1,27 +0,0 @@ -AC_DEFUN([AX_DETECT_GIT_HEAD], [ - AC_SUBST(GIT_HEAD_ID) - AC_SUBST(GIT_HEAD) - AC_SUBST(GIT_HEAD_VERSION) - if test -f $srcdir/.git/HEAD; then - GIT_HEAD="$srcdir/.git/index" - GIT_REPO="$srcdir/.git" - GIT_HEAD_ID=`GIT_DIR=$GIT_REPO git describe` - elif test -f $srcdir/GIT_HEAD_ID; then - GIT_HEAD_ID=`cat $srcdir/GIT_HEAD_ID` - else - mysrcdir=`(cd $srcdir; pwd)` - head=`basename $mysrcdir | sed -e 's/.*-//'` - head2=`echo $head | sed -e 's/[^0-9a-f]//'` - head3=`echo $head2 | sed -e 's/........................................//'` - if test "x$head3" = "x" -a "x$head" = "x$head2"; then - GIT_HEAD_ID="$head" - else - GIT_HEAD_ID="UNKNOWN" - fi - fi - if test -z "$GIT_REPO" ; then - GIT_HEAD_VERSION="$GIT_HEAD_ID" - else - GIT_HEAD_VERSION="\`GIT_DIR=$GIT_REPO git describe\`" - fi -]) diff --git a/cloog-0.16.3/isl/m4/ax_gcc_archflag.m4 b/cloog-0.16.3/isl/m4/ax_gcc_archflag.m4 deleted file mode 100644 index dedeef4..0000000 --- a/cloog-0.16.3/isl/m4/ax_gcc_archflag.m4 +++ /dev/null @@ -1,213 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_gcc_archflag.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_GCC_ARCHFLAG([PORTABLE?], [ACTION-SUCCESS], [ACTION-FAILURE]) -# -# DESCRIPTION -# -# This macro tries to guess the "native" arch corresponding to the target -# architecture for use with gcc's -march=arch or -mtune=arch flags. If -# found, the cache variable $ax_cv_gcc_archflag is set to this flag and -# ACTION-SUCCESS is executed; otherwise $ax_cv_gcc_archflag is is set to -# "unknown" and ACTION-FAILURE is executed. The default ACTION-SUCCESS is -# to add $ax_cv_gcc_archflag to the end of $CFLAGS. -# -# PORTABLE? should be either [yes] (default) or [no]. In the former case, -# the flag is set to -mtune (or equivalent) so that the architecture is -# only used for tuning, but the instruction set used is still portable. In -# the latter case, the flag is set to -march (or equivalent) so that -# architecture-specific instructions are enabled. -# -# The user can specify --with-gcc-arch= in order to override the -# macro's choice of architecture, or --without-gcc-arch to disable this. -# -# When cross-compiling, or if $CC is not gcc, then ACTION-FAILURE is -# called unless the user specified --with-gcc-arch manually. -# -# Requires macros: AX_CHECK_COMPILER_FLAGS, AX_GCC_X86_CPUID -# -# (The main emphasis here is on recent CPUs, on the principle that doing -# high-performance computing on old hardware is uncommon.) -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_GCC_ARCHFLAG], -[AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AC_CANONICAL_HOST]) - -AC_ARG_WITH(gcc-arch, [AC_HELP_STRING([--with-gcc-arch=], [use architecture for gcc -march/-mtune, instead of guessing])], - ax_gcc_arch=$withval, ax_gcc_arch=yes) - -AC_MSG_CHECKING([for gcc architecture flag]) -AC_MSG_RESULT([]) -AC_CACHE_VAL(ax_cv_gcc_archflag, -[ -ax_cv_gcc_archflag="unknown" - -if test "$GCC" = yes; then - -if test "x$ax_gcc_arch" = xyes; then -ax_gcc_arch="" -if test "$cross_compiling" = no; then -case $host_cpu in - i[[3456]]86*|x86_64*) # use cpuid codes, in part from x86info-1.7 by D. Jones - AX_GCC_X86_CPUID(0) - AX_GCC_X86_CPUID(1) - case $ax_cv_gcc_x86_cpuid_0 in - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *5[[48]]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; - *5??:*:*:*) ax_gcc_arch=pentium ;; - *6[[3456]]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[[01]]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[[234]]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6[[9d]]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; - *6[[78b]]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6??:*:*:*) ax_gcc_arch=pentiumpro ;; - *f3[[347]]:*:*:*|*f4[1347]:*:*:*) - case $host_cpu in - x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; - *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; - esac ;; - *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; - esac ;; - *:68747541:*:*) # AMD - case $ax_cv_gcc_x86_cpuid_1 in - *5[[67]]?:*:*:*) ax_gcc_arch=k6 ;; - *5[[8d]]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; - *5[[9]]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; - *60?:*:*:*) ax_gcc_arch=k7 ;; - *6[[12]]?:*:*:*) ax_gcc_arch="athlon k7" ;; - *6[[34]]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; - *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; - *6[[68a]]?:*:*:*) - AX_GCC_X86_CPUID(0x80000006) # L2 cache size - case $ax_cv_gcc_x86_cpuid_0x80000006 in - *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256 - ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; - *) ax_gcc_arch="athlon-4 athlon k7" ;; - esac ;; - *f[[4cef8b]]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; - *f5?:*:*:*) ax_gcc_arch="opteron k8" ;; - *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; - *f??:*:*:*) ax_gcc_arch="k8" ;; - esac ;; - *:746e6543:*:*) # IDT - case $ax_cv_gcc_x86_cpuid_1 in - *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; - *58?:*:*:*) ax_gcc_arch=winchip2 ;; - *6[[78]]?:*:*:*) ax_gcc_arch=c3 ;; - *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; - esac ;; - esac - if test x"$ax_gcc_arch" = x; then # fallback - case $host_cpu in - i586*) ax_gcc_arch=pentium ;; - i686*) ax_gcc_arch=pentiumpro ;; - esac - fi - ;; - - sparc*) - AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag], [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/]) - cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` - cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters` - case $cputype in - *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; - *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; - *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; - *supersparc*|*tms390z5[[05]]*) ax_gcc_arch="supersparc v8" ;; - *hypersparc*|*rt62[[056]]*) ax_gcc_arch="hypersparc v8" ;; - *cypress*) ax_gcc_arch=cypress ;; - esac ;; - - alphaev5) ax_gcc_arch=ev5 ;; - alphaev56) ax_gcc_arch=ev56 ;; - alphapca56) ax_gcc_arch="pca56 ev56" ;; - alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; - alphaev6) ax_gcc_arch=ev6 ;; - alphaev67) ax_gcc_arch=ev67 ;; - alphaev68) ax_gcc_arch="ev68 ev67" ;; - alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; - alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; - alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; - - powerpc*) - cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` - cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'` - case $cputype in - *750*) ax_gcc_arch="750 G3" ;; - *740[[0-9]]*) ax_gcc_arch="$cputype 7400 G4" ;; - *74[[4-5]][[0-9]]*) ax_gcc_arch="$cputype 7450 G4" ;; - *74[[0-9]][[0-9]]*) ax_gcc_arch="$cputype G4" ;; - *970*) ax_gcc_arch="970 G5 power4";; - *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; - *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; - 603ev|8240) ax_gcc_arch="$cputype 603e 603";; - *) ax_gcc_arch=$cputype ;; - esac - ax_gcc_arch="$ax_gcc_arch powerpc" - ;; -esac -fi # not cross-compiling -fi # guess arch - -if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then -for arch in $ax_gcc_arch; do - if test "x[]m4_default([$1],yes)" = xyes; then # if we require portable code - flags="-mtune=$arch" - # -mcpu=$arch and m$arch generate nonportable code on every arch except - # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. - case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac - else - flags="-march=$arch -mcpu=$arch -m$arch" - fi - for flag in $flags; do - AX_CHECK_COMPILER_FLAGS($flag, [ax_cv_gcc_archflag=$flag; break]) - done - test "x$ax_cv_gcc_archflag" = xunknown || break -done -fi - -fi # $GCC=yes -]) -AC_MSG_CHECKING([for gcc architecture flag]) -AC_MSG_RESULT($ax_cv_gcc_archflag) -if test "x$ax_cv_gcc_archflag" = xunknown; then - m4_default([$3],:) -else - m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_gcc_archflag"]) -fi -]) diff --git a/cloog-0.16.3/isl/m4/ax_gcc_warn_unused_result.m4 b/cloog-0.16.3/isl/m4/ax_gcc_warn_unused_result.m4 deleted file mode 100644 index a957f8f..0000000 --- a/cloog-0.16.3/isl/m4/ax_gcc_warn_unused_result.m4 +++ /dev/null @@ -1,56 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_gcc_warn_unused_result.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_GCC_WARN_UNUSED_RESULT -# -# DESCRIPTION -# -# The macro will compile a test program to see whether the compiler does -# understand the per-function postfix pragma. -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_GCC_WARN_UNUSED_RESULT],[dnl -AC_CACHE_CHECK( - [whether the compiler supports function __attribute__((__warn_unused_result__))], - ax_cv_gcc_warn_unused_result,[ - AC_TRY_COMPILE([__attribute__((__warn_unused_result__)) - int f(int i) { return i; }], - [], - ax_cv_gcc_warn_unused_result=yes, ax_cv_gcc_warn_unused_result=no)]) - if test "$ax_cv_gcc_warn_unused_result" = yes; then - AC_DEFINE([GCC_WARN_UNUSED_RESULT],[__attribute__((__warn_unused_result__))], - [most gcc compilers know a function __attribute__((__warn_unused_result__))]) - fi -]) diff --git a/cloog-0.16.3/isl/m4/ax_gcc_x86_cpuid.m4 b/cloog-0.16.3/isl/m4/ax_gcc_x86_cpuid.m4 deleted file mode 100644 index 5420b09..0000000 --- a/cloog-0.16.3/isl/m4/ax_gcc_x86_cpuid.m4 +++ /dev/null @@ -1,77 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_gcc_x86_cpuid.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_GCC_X86_CPUID(OP) -# -# DESCRIPTION -# -# On Pentium and later x86 processors, with gcc or a compiler that has a -# compatible syntax for inline assembly instructions, run a small program -# that executes the cpuid instruction with input OP. This can be used to -# detect the CPU type. -# -# On output, the values of the eax, ebx, ecx, and edx registers are stored -# as hexadecimal strings as "eax:ebx:ecx:edx" in the cache variable -# ax_cv_gcc_x86_cpuid_OP. -# -# If the cpuid instruction fails (because you are running a -# cross-compiler, or because you are not using gcc, or because you are on -# a processor that doesn't have this instruction), ax_cv_gcc_x86_cpuid_OP -# is set to the string "unknown". -# -# This macro mainly exists to be used in AX_GCC_ARCHFLAG. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_GCC_X86_CPUID], -[AC_REQUIRE([AC_PROG_CC]) -AC_LANG_PUSH([C]) -AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1, - [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], [ - int op = $1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; -])], - [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid], - [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid], - [ax_cv_gcc_x86_cpuid_$1=unknown])]) -AC_LANG_POP([C]) -]) diff --git a/cloog-0.16.3/isl/m4/ax_set_warning_flags.m4 b/cloog-0.16.3/isl/m4/ax_set_warning_flags.m4 deleted file mode 100644 index c64ad7d..0000000 --- a/cloog-0.16.3/isl/m4/ax_set_warning_flags.m4 +++ /dev/null @@ -1,17 +0,0 @@ -dnl Add a set of flags to WARNING_FLAGS, that enable compiler warnings for -dnl isl. The warnings that are enabled vary with the compiler and only include -dnl warnings that did not trigger at the time of adding these flags. -AC_DEFUN([AX_SET_WARNING_FLAGS],[dnl - AX_COMPILER_VENDOR - - WARNING_FLAGS="" - - if test "${ax_cv_c_compiler_vendor}" = "clang"; then - dnl isl is at the moment clean of -Wall warnings. If clang adds - dnl new warnings to -Wall which cause false positives, the - dnl specific warning types will be disabled explicitally (by - dnl adding for example -Wno-return-type). To temporarily disable - dnl all warnings run configure with CFLAGS=-Wno-all. - WARNING_FLAGS="-Wall" - fi -]) diff --git a/cloog-0.16.3/isl/m4/ax_submodule.m4 b/cloog-0.16.3/isl/m4/ax_submodule.m4 deleted file mode 100644 index 7cf8995..0000000 --- a/cloog-0.16.3/isl/m4/ax_submodule.m4 +++ /dev/null @@ -1,71 +0,0 @@ -AC_DEFUN([AX_SUBMODULE], -[ - -m4_if(m4_bregexp($2,|,choice),choice, - [AC_ARG_WITH($1, - [AS_HELP_STRING([--with-$1=$2], - [Which $1 to use [default=$3]])])]) -case "system" in -$2) - AC_ARG_WITH($1_prefix, - [AS_HELP_STRING([--with-$1-prefix=DIR], - [Prefix of $1 installation])]) - AC_ARG_WITH($1_exec_prefix, - [AS_HELP_STRING([--with-$1-exec-prefix=DIR], - [Exec prefix of $1 installation])]) -esac -m4_if(m4_bregexp($2,build,build),build, - [AC_ARG_WITH($1_builddir, - [AS_HELP_STRING([--with-$1-builddir=DIR], - [Location of $1 builddir])])]) -if test "x$with_$1_prefix" != "x" -a "x$with_$1_exec_prefix" = "x"; then - with_$1_exec_prefix=$with_$1_prefix -fi -if test "x$with_$1_prefix" != "x" -o "x$with_$1_exec_prefix" != "x"; then - if test "x$with_$1" != "x" -a "x$with_$1" != "xyes" -a "x$with_$1" != "xsystem"; then - AC_MSG_ERROR([Setting $with_$1_prefix implies use of system $1]) - fi - with_$1="system" -fi -if test "x$with_$1_builddir" != "x"; then - if test "x$with_$1" != "x" -a "x$with_$1" != "xyes" -a "x$with_$1" != "xbuild"; then - AC_MSG_ERROR([Setting $with_$1_builddir implies use of build $1]) - fi - with_$1="build" - $1_srcdir=`echo @abs_srcdir@ | $with_$1_builddir/config.status --file=-` - AC_MSG_NOTICE($1 sources in $$1_srcdir) -fi -if test "x$with_$1_exec_prefix" != "x"; then - export PKG_CONFIG_PATH="$with_$1_exec_prefix/lib/pkgconfig${PKG_CONFIG_PATH+:$PKG_CONFIG_PATH}" -fi -case "$with_$1" in -$2) - ;; -*) - case "$3" in - bundled) - if test -d $srcdir/.git -a \ - -d $srcdir/$1 -a \ - ! -d $srcdir/$1/.git; then - AC_MSG_WARN([git repo detected, but submodule $1 not initialized]) - AC_MSG_WARN([You may want to run]) - AC_MSG_WARN([ git submodule init]) - AC_MSG_WARN([ git submodule update]) - AC_MSG_WARN([ sh autogen.sh]) - fi - if test -f $srcdir/$1/configure; then - with_$1="bundled" - else - with_$1="no" - fi - ;; - *) - with_$1="$3" - ;; - esac - ;; -esac -AC_MSG_CHECKING([which $1 to use]) -AC_MSG_RESULT($with_$1) - -]) diff --git a/cloog-0.16.3/isl/m4/libtool.m4 b/cloog-0.16.3/isl/m4/libtool.m4 deleted file mode 100644 index 22924a8..0000000 --- a/cloog-0.16.3/isl/m4/libtool.m4 +++ /dev/null @@ -1,7437 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -]) - -# serial 57 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl - -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PREPARE_SED_QUOTE_VARS -# -------------------------- -# Define a few sed substitution that help us do robust quoting. -m4_defun([_LT_PREPARE_SED_QUOTE_VARS], -[# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' -]) - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from `configure', and `config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" -])# _LT_PROG_LTMAIN - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$[]1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -_LT_OUTPUT_LIBTOOL_INIT -]) - -# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) -# ------------------------------------ -# Generate a child script FILE with all initialization necessary to -# reuse the environment learned by the parent script, and make the -# file executable. If COMMENT is supplied, it is inserted after the -# `#!' sequence but before initialization text begins. After this -# macro, additional text can be appended to FILE to form the body of -# the child script. The macro ends with non-zero status if the -# file could not be fully written (such as if the disk is full). -m4_ifdef([AS_INIT_GENERATED], -[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], -[m4_defun([_LT_GENERATED_FILE_INIT], -[m4_require([AS_PREPARE])]dnl -[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl -[lt_write_fail=0 -cat >$1 <<_ASEOF || lt_write_fail=1 -#! $SHELL -# Generated by $as_me. -$2 -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$1 <<\_ASEOF || lt_write_fail=1 -AS_SHELL_SANITIZE -_AS_PREPARE -exec AS_MESSAGE_FD>&1 -_ASEOF -test $lt_write_fail = 0 && chmod +x $1[]dnl -m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], -[# Run this file to recreate a libtool stub with the current configuration.]) - -cat >>"$CONFIG_LT" <<\_LTEOF -lt_cl_silent=false -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to ." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -lt_cl_success=: -test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" -exec AS_MESSAGE_LOG_FD>/dev/null -$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false -exec AS_MESSAGE_LOG_FD>>config.log -$lt_cl_success || AS_EXIT(1) -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -_LT_COPYING -_LT_LIBTOOL_TAGS - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_XSI_SHELLFNS - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) -dnl AC_DEFUN([AC_LIBTOOL_RC], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], - [lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD - echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD - $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD - echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD - $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES -# -------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX -# ----------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[m4_divert_text([M4SH-INIT], [$1 -])])# _LT_SHELL_INIT - - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Find how we can fake an echo command that does not interpret backslash. -# In particular, with Autoconf 2.60 or later we add some code to the start -# of the generated configure script which will find a shell with a builtin -# printf (which we can use as an echo command). -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -AC_MSG_CHECKING([how to print strings]) -# Test print first, because it will be a builtin if present. -if test "X`print -r -- -n 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$[]1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -case "$ECHO" in - printf*) AC_MSG_RESULT([printf]) ;; - print*) AC_MSG_RESULT([print -r]) ;; - *) AC_MSG_RESULT([cat]) ;; -esac - -m4_ifdef([_AS_DETECT_SUGGESTED], -[_AS_DETECT_SUGGESTED([ - test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test "X`printf %s $ECHO`" = "X$ECHO" \ - || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) - -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" -])# _LT_ENABLE_LOCK - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[AC_CHECK_TOOL(AR, ar, false) -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1]) - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -_LT_DECL([], [lock_old_archive_extraction], [0], - [Whether to use a lock for old archive extraction]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -void fnord () __attribute__((visibility("default"))); -#endif - -void fnord () { int i=42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[[3-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], - [lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [lt_cv_shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - ]) - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [install_override_mode], [1], - [Permission mode override for installation of shared libraries]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program which can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program which can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PROG_ECHO_BACKSLASH])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method == "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; - *) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; - esac - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ F* | *Sun*Fortran*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac -AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; - *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - m4_if($1, [], [ - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - _LT_LINKER_OPTION([if $CC understands -b], - _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], - [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE(int foo(void) {}, - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - ) - LDFLAGS="$save_LDFLAGS" - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_CACHE_CHECK([whether -lc should be explicitly linked in], - [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), - [$RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - ]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], - [[If ld is used when linking, flag to hardcode $libdir into a binary - during linking. This must work even if $libdir does not exist]]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [fix_srcfile_path], [1], - [Fix the shell variable $srcfile for the compiler]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report which library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC="$lt_save_CC" -])# _LT_LANG_C_CONFIG - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - gnu*) - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ - '"$_LT_TAGVAR(old_archive_cmds, $1)" - _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ - '"$_LT_TAGVAR(reload_cmds, $1)" - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -]) -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_LANG_PUSH(Fortran 77) -if test -z "$F77" || test "X$F77" = "Xno"; then - _lt_disable_F77=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${F77-"f77"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_F77" != yes - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_LANG_PUSH(Fortran) - -if test -z "$FC" || test "X$FC" = "Xno"; then - _lt_disable_FC=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${FC-"f95"} - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_FC" != yes - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC="$lt_save_CC" -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC="$lt_save_CC" -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PROG_XSI_SHELLFNS -# --------------------- -# Bourne and XSI compatible variants of some useful shell functions. -m4_defun([_LT_PROG_XSI_SHELLFNS], -[case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $[*] )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} - -dnl func_dirname_and_basename -dnl A portable version of this function is already defined in general.m4sh -dnl so there is no need for it here. - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[[^=]]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[[^.]]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$[@]"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]+=\$[2]" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]=\$$[1]\$[2]" -} - -_LT_EOF - ;; - esac -]) diff --git a/cloog-0.16.3/isl/m4/ltoptions.m4 b/cloog-0.16.3/isl/m4/ltoptions.m4 deleted file mode 100644 index 17cfd51..0000000 --- a/cloog-0.16.3/isl/m4/ltoptions.m4 +++ /dev/null @@ -1,369 +0,0 @@ -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 7 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - ]) -])# _LT_SET_OPTIONS - - -## --------------------------------- ## -## Macros to handle LT_INIT options. ## -## --------------------------------- ## - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [1], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' -# LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/cloog-0.16.3/isl/m4/ltsugar.m4 b/cloog-0.16.3/isl/m4/ltsugar.m4 deleted file mode 100644 index 9000a05..0000000 --- a/cloog-0.16.3/isl/m4/ltsugar.m4 +++ /dev/null @@ -1,123 +0,0 @@ -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltsugar.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) - - -# lt_join(SEP, ARG1, [ARG2...]) -# ----------------------------- -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their -# associated separator. -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier -# versions in m4sugar had bugs. -m4_define([lt_join], -[m4_if([$#], [1], [], - [$#], [2], [[$2]], - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) -m4_define([_lt_join], -[m4_if([$#$2], [2], [], - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) - - -# lt_car(LIST) -# lt_cdr(LIST) -# ------------ -# Manipulate m4 lists. -# These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. -m4_define([lt_car], [[$1]]) -m4_define([lt_cdr], -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], - [$#], 1, [], - [m4_dquote(m4_shift($@))])]) -m4_define([lt_unquote], $1) - - -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) -# ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. -# Note that neither SEPARATOR nor STRING are expanded; they are appended -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). -# No SEPARATOR is output if MACRO-NAME was previously undefined (different -# than defined and empty). -# -# This macro is needed until we can rely on Autoconf 2.62, since earlier -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. -m4_define([lt_append], -[m4_define([$1], - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) - - - -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) -# ---------------------------------------------------------- -# Produce a SEP delimited list of all paired combinations of elements of -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list -# has the form PREFIXmINFIXSUFFIXn. -# Needed until we can rely on m4_combine added in Autoconf 2.62. -m4_define([lt_combine], -[m4_if(m4_eval([$# > 3]), [1], - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl -[[m4_foreach([_Lt_prefix], [$2], - [m4_foreach([_Lt_suffix], - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) - - -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) -# ----------------------------------------------------------------------- -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. -m4_define([lt_if_append_uniq], -[m4_ifdef([$1], - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], - [lt_append([$1], [$2], [$3])$4], - [$5])], - [lt_append([$1], [$2], [$3])$4])]) - - -# lt_dict_add(DICT, KEY, VALUE) -# ----------------------------- -m4_define([lt_dict_add], -[m4_define([$1($2)], [$3])]) - - -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) -# -------------------------------------------- -m4_define([lt_dict_add_subkey], -[m4_define([$1($2:$3)], [$4])]) - - -# lt_dict_fetch(DICT, KEY, [SUBKEY]) -# ---------------------------------- -m4_define([lt_dict_fetch], -[m4_ifval([$3], - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) - - -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) -# ----------------------------------------------------------------- -m4_define([lt_if_dict_fetch], -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], - [$5], - [$6])]) - - -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) -# -------------------------------------------------------------- -m4_define([lt_dict_filter], -[m4_if([$5], [], [], - [lt_join(m4_quote(m4_default([$4], [[, ]])), - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl -]) diff --git a/cloog-0.16.3/isl/m4/ltversion.m4 b/cloog-0.16.3/isl/m4/ltversion.m4 deleted file mode 100644 index 2e8f929..0000000 --- a/cloog-0.16.3/isl/m4/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# Generated from ltversion.in. - -# serial 3169 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.2.8]) -m4_define([LT_PACKAGE_REVISION], [1.3169]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.2.8' -macro_revision='1.3169' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) diff --git a/cloog-0.16.3/isl/m4/lt~obsolete.m4 b/cloog-0.16.3/isl/m4/lt~obsolete.m4 deleted file mode 100644 index c573da9..0000000 --- a/cloog-0.16.3/isl/m4/lt~obsolete.m4 +++ /dev/null @@ -1,98 +0,0 @@ -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004. -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 5 lt~obsolete.m4 - -# These exist entirely to fool aclocal when bootstrapping libtool. -# -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) -# which have later been changed to m4_define as they aren't part of the -# exported API, or moved to Autoconf or Automake where they belong. -# -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -# using a macro with the same name in our local m4/libtool.m4 it'll -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -# and doesn't know about Autoconf macros at all.) -# -# So we provide this file, which has a silly filename so it's always -# included after everything else. This provides aclocal with the -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -# because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -# -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -# Yes, that means every name once taken will need to remain here until -# we give up compatibility with versions before 1.7, at which point -# we need to keep only those names which we still refer to. - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) - -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) -m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) -m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) -m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) -m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) -m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) -m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/cloog-0.16.3/isl/missing b/cloog-0.16.3/isl/missing deleted file mode 100755 index 1c8ff70..0000000 --- a/cloog-0.16.3/isl/missing +++ /dev/null @@ -1,367 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2006-05-10.23 - -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 -# Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -run=: -sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' -sed_minuso='s/.* -o \([^ ]*\).*/\1/p' - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -msg="missing on your system" - -case $1 in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - autom4te touch the output file, or create a stub one - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch] - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - -esac - -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). -case $1 in - lex|yacc) - # Not GNU programs, they don't have --version. - ;; - - tar) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; - - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running `$TOOL --version' or `$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case $1 in - aclocal*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case $f in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te) - echo 1>&2 "\ -WARNING: \`$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison|yacc) - echo 1>&2 "\ -WARNING: \`$1' $msg. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if test ! -f y.tab.h; then - echo >y.tab.h - fi - if test ! -f y.tab.c; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex|flex) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if test ! -f lex.yy.c; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit 1 - fi - ;; - - makeinfo) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -z "$file"; then - # ... or it is the one specified with @setfilename ... - infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n ' - /^@setfilename/{ - s/.* \([^ ]*\) *$/\1/ - p - q - }' $infile` - # ... or it is derived from the source name (dir/f.texi becomes f.info) - test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info - fi - # If the file does not exist, the user really needs makeinfo; - # let's fail without touching anything. - test -f $file || exit 1 - touch $file - ;; - - tar) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case $firstarg in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case $firstarg in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/cloog-0.16.3/isl/mp_get_memory_functions.c b/cloog-0.16.3/isl/mp_get_memory_functions.c deleted file mode 100644 index e14e336..0000000 --- a/cloog-0.16.3/isl/mp_get_memory_functions.c +++ /dev/null @@ -1,14 +0,0 @@ -#include - -void mp_get_memory_functions( - void *(**alloc_func_ptr) (size_t), - void *(**realloc_func_ptr) (void *, size_t, size_t), - void (**free_func_ptr) (void *, size_t)) -{ - if (alloc_func_ptr) - *alloc_func_ptr = __gmp_allocate_func; - if (realloc_func_ptr) - *realloc_func_ptr = __gmp_reallocate_func; - if (free_func_ptr) - *free_func_ptr = __gmp_free_func; -} diff --git a/cloog-0.16.3/isl/pip.c b/cloog-0.16.3/isl/pip.c deleted file mode 100644 index 0d85f3a..0000000 --- a/cloog-0.16.3/isl/pip.c +++ /dev/null @@ -1,337 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include -#include "isl_tab.h" -#include "isl_sample.h" -#include "isl_scan.h" -#include -#include -#include - -/* The input of this program is the same as that of the "example" program - * from the PipLib distribution, except that the "big parameter column" - * should always be -1. - * - * Context constraints in PolyLib format - * -1 - * Problem constraints in PolyLib format - * Optional list of options - * - * The options are - * Maximize compute maximum instead of minimum - * Rational compute rational optimum instead of integer optimum - * Urs_parms don't assume parameters are non-negative - * Urs_unknowns don't assume unknowns are non-negative - */ - -struct options { - struct isl_options *isl; - unsigned verify; -}; - -struct isl_arg options_arg[] = { -ISL_ARG_CHILD(struct options, isl, "isl", isl_options_arg, "isl options") -ISL_ARG_BOOL(struct options, verify, 'T', "verify", 0, NULL) -ISL_ARG_END -}; - -ISL_ARG_DEF(options, struct options, options_arg) - -static __isl_give isl_basic_set *set_bounds(__isl_take isl_basic_set *bset) -{ - unsigned nparam; - int i, r; - isl_point *pt, *pt2; - isl_basic_set *box; - - nparam = isl_basic_set_dim(bset, isl_dim_param); - r = nparam >= 8 ? 4 : nparam >= 5 ? 6 : 30; - - pt = isl_basic_set_sample_point(isl_basic_set_copy(bset)); - pt2 = isl_point_copy(pt); - - for (i = 0; i < nparam; ++i) { - pt = isl_point_add_ui(pt, isl_dim_param, i, r); - pt2 = isl_point_sub_ui(pt2, isl_dim_param, i, r); - } - - box = isl_basic_set_box_from_points(pt, pt2); - - return isl_basic_set_intersect(bset, box); -} - -static struct isl_basic_set *to_parameter_domain(struct isl_basic_set *context) -{ - return isl_basic_set_move_dims(context, isl_dim_param, 0, isl_dim_set, 0, - isl_basic_set_dim(context, isl_dim_set)); -} - -isl_basic_set *plug_in_parameters(isl_basic_set *bset, struct isl_vec *params) -{ - int i; - - for (i = 0; i < params->size - 1; ++i) - bset = isl_basic_set_fix(bset, - isl_dim_param, i, params->el[1 + i]); - - bset = isl_basic_set_remove_dims(bset, - isl_dim_param, 0, params->size - 1); - - isl_vec_free(params); - - return bset; -} - -isl_set *set_plug_in_parameters(isl_set *set, struct isl_vec *params) -{ - int i; - - for (i = 0; i < params->size - 1; ++i) - set = isl_set_fix(set, isl_dim_param, i, params->el[1 + i]); - - set = isl_set_remove_dims(set, isl_dim_param, 0, params->size - 1); - - isl_vec_free(params); - - return set; -} - -/* Compute the lexicographically minimal (or maximal if max is set) - * element of bset for the given values of the parameters, by - * successively solving an ilp problem in each direction. - */ -struct isl_vec *opt_at(struct isl_basic_set *bset, - struct isl_vec *params, int max) -{ - unsigned dim; - struct isl_vec *opt; - struct isl_vec *obj; - int i; - - dim = isl_basic_set_dim(bset, isl_dim_set); - - bset = plug_in_parameters(bset, params); - - if (isl_basic_set_plain_is_empty(bset)) { - opt = isl_vec_alloc(bset->ctx, 0); - isl_basic_set_free(bset); - return opt; - } - - opt = isl_vec_alloc(bset->ctx, 1 + dim); - assert(opt); - - obj = isl_vec_alloc(bset->ctx, 1 + dim); - assert(obj); - - isl_int_set_si(opt->el[0], 1); - isl_int_set_si(obj->el[0], 0); - - for (i = 0; i < dim; ++i) { - enum isl_lp_result res; - - isl_seq_clr(obj->el + 1, dim); - isl_int_set_si(obj->el[1 + i], 1); - res = isl_basic_set_solve_ilp(bset, max, obj->el, - &opt->el[1 + i], NULL); - if (res == isl_lp_empty) - goto empty; - assert(res == isl_lp_ok); - bset = isl_basic_set_fix(bset, isl_dim_set, i, opt->el[1 + i]); - } - - isl_basic_set_free(bset); - isl_vec_free(obj); - - return opt; -empty: - isl_vec_free(opt); - opt = isl_vec_alloc(bset->ctx, 0); - isl_basic_set_free(bset); - isl_vec_free(obj); - - return opt; -} - -struct isl_scan_pip { - struct isl_scan_callback callback; - isl_basic_set *bset; - isl_set *sol; - isl_set *empty; - int stride; - int n; - int max; -}; - -/* Check if the "manually" computed optimum of bset at the "sample" - * values of the parameters agrees with the solution of pilp problem - * represented by the pair (sol, empty). - * In particular, if there is no solution for this value of the parameters, - * then it should be an element of the parameter domain "empty". - * Otherwise, the optimal solution, should be equal to the result of - * plugging in the value of the parameters in "sol". - */ -static int scan_one(struct isl_scan_callback *callback, - __isl_take isl_vec *sample) -{ - struct isl_scan_pip *sp = (struct isl_scan_pip *)callback; - struct isl_vec *opt; - - sp->n--; - - opt = opt_at(isl_basic_set_copy(sp->bset), isl_vec_copy(sample), sp->max); - assert(opt); - - if (opt->size == 0) { - isl_point *sample_pnt; - sample_pnt = isl_point_alloc(isl_set_get_dim(sp->empty), sample); - assert(isl_set_contains_point(sp->empty, sample_pnt)); - isl_point_free(sample_pnt); - isl_vec_free(opt); - } else { - isl_set *sol; - isl_set *opt_set; - opt_set = isl_set_from_basic_set(isl_basic_set_from_vec(opt)); - sol = set_plug_in_parameters(isl_set_copy(sp->sol), sample); - assert(isl_set_is_equal(opt_set, sol)); - isl_set_free(sol); - isl_set_free(opt_set); - } - - if (!(sp->n % sp->stride)) { - printf("o"); - fflush(stdout); - } - - return sp->n >= 1 ? 0 : -1; -} - -static void check_solution(isl_basic_set *bset, isl_basic_set *context, - isl_set *sol, isl_set *empty, int max) -{ - struct isl_scan_pip sp; - isl_int count, count_max; - int i, n; - int r; - - context = set_bounds(context); - context = isl_basic_set_underlying_set(context); - - isl_int_init(count); - isl_int_init(count_max); - - isl_int_set_si(count_max, 2000); - r = isl_basic_set_count_upto(context, count_max, &count); - assert(r >= 0); - n = isl_int_get_si(count); - - isl_int_clear(count_max); - isl_int_clear(count); - - sp.callback.add = scan_one; - sp.bset = bset; - sp.sol = sol; - sp.empty = empty; - sp.n = n; - sp.stride = n > 70 ? 1 + (n + 1)/70 : 1; - sp.max = max; - - for (i = 0; i < n; i += sp.stride) - printf("."); - printf("\r"); - fflush(stdout); - - isl_basic_set_scan(context, &sp.callback); - - printf("\n"); - - isl_basic_set_free(bset); -} - -int main(int argc, char **argv) -{ - struct isl_ctx *ctx; - struct isl_basic_set *context, *bset, *copy, *context_copy; - struct isl_set *set; - struct isl_set *empty; - int neg_one; - char s[1024]; - int urs_parms = 0; - int urs_unknowns = 0; - int max = 0; - int rational = 0; - int n; - struct options *options; - - options = options_new_with_defaults(); - assert(options); - argc = options_parse(options, argc, argv, ISL_ARG_ALL); - - ctx = isl_ctx_alloc_with_options(options_arg, options); - - context = isl_basic_set_read_from_file(ctx, stdin, 0); - assert(context); - n = fscanf(stdin, "%d", &neg_one); - assert(n == 1); - assert(neg_one == -1); - bset = isl_basic_set_read_from_file(ctx, stdin, - isl_basic_set_dim(context, isl_dim_set)); - - while (fgets(s, sizeof(s), stdin)) { - if (strncasecmp(s, "Maximize", 8) == 0) - max = 1; - if (strncasecmp(s, "Rational", 8) == 0) { - rational = 1; - bset = isl_basic_set_set_rational(bset); - } - if (strncasecmp(s, "Urs_parms", 9) == 0) - urs_parms = 1; - if (strncasecmp(s, "Urs_unknowns", 12) == 0) - urs_unknowns = 1; - } - if (!urs_parms) - context = isl_basic_set_intersect(context, - isl_basic_set_positive_orthant(isl_basic_set_get_dim(context))); - context = to_parameter_domain(context); - if (!urs_unknowns) - bset = isl_basic_set_intersect(bset, - isl_basic_set_positive_orthant(isl_basic_set_get_dim(bset))); - - if (options->verify) { - copy = isl_basic_set_copy(bset); - context_copy = isl_basic_set_copy(context); - } - - if (max) - set = isl_basic_set_partial_lexmax(bset, context, &empty); - else - set = isl_basic_set_partial_lexmin(bset, context, &empty); - - if (options->verify) { - assert(!rational); - check_solution(copy, context_copy, set, empty, max); - } else { - isl_set_print(set, stdout, 0, ISL_FORMAT_ISL); - fprintf(stdout, "\n"); - fprintf(stdout, "no solution: "); - isl_set_print(empty, stdout, 0, ISL_FORMAT_ISL); - fprintf(stdout, "\n"); - } - - isl_set_free(set); - isl_set_free(empty); - isl_ctx_free(ctx); - - return 0; -} diff --git a/cloog-0.16.3/isl/pip_test.sh.in b/cloog-0.16.3/isl/pip_test.sh.in deleted file mode 100755 index cdc5fb9..0000000 --- a/cloog-0.16.3/isl/pip_test.sh.in +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -EXEEXT=@EXEEXT@ - -PIP_TESTS="\ - boulet.pip \ - brisebarre.pip \ - cg1.pip \ - esced.pip \ - ex2.pip \ - ex.pip \ - fimmel.pip \ - max.pip \ - negative.pip \ - seghir-vd.pip \ - small.pip \ - sor1d.pip \ - square.pip \ - sven.pip \ - tobi.pip" - -for i in $PIP_TESTS; do - echo $i; - ./isl_pip$EXEEXT --context=gbr -T < $srcdir/test_inputs/$i || exit - ./isl_pip$EXEEXT --context=lexmin -T < $srcdir/test_inputs/$i || exit -done diff --git a/cloog-0.16.3/isl/polyhedron_detect_equalities.c b/cloog-0.16.3/isl/polyhedron_detect_equalities.c deleted file mode 100644 index 9acea32..0000000 --- a/cloog-0.16.3/isl/polyhedron_detect_equalities.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include - -int main(int argc, char **argv) -{ - struct isl_ctx *ctx = isl_ctx_alloc(); - struct isl_basic_set *bset; - - bset = isl_basic_set_read_from_file(ctx, stdin, 0); - bset = isl_basic_set_detect_equalities(bset); - isl_basic_set_print(bset, stdout, 0, "", "", ISL_FORMAT_POLYLIB); - isl_basic_set_free(bset); - isl_ctx_free(ctx); - - return 0; -} diff --git a/cloog-0.16.3/isl/polyhedron_minimize.c b/cloog-0.16.3/isl/polyhedron_minimize.c deleted file mode 100644 index f6c2dc9..0000000 --- a/cloog-0.16.3/isl/polyhedron_minimize.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include - -/* The input of this program is the same as that of the "polytope_minimize" - * program from the barvinok distribution. - * - * Constraints of set is PolyLib format. - * Linear or affine objective function in PolyLib format. - */ - -static struct isl_vec *isl_vec_lin_to_aff(struct isl_vec *vec) -{ - struct isl_vec *aff; - - if (!vec) - return NULL; - aff = isl_vec_alloc(vec->ctx, 1 + vec->size); - if (!aff) - goto error; - isl_int_set_si(aff->el[0], 0); - isl_seq_cpy(aff->el + 1, vec->el, vec->size); - isl_vec_free(vec); - return aff; -error: - isl_vec_free(vec); - return NULL; -} - -/* Rotate elements of vector right. - * In particular, move the constant term from the end of the - * vector to the start of the vector. - */ -static struct isl_vec *vec_ror(struct isl_vec *vec) -{ - int i; - - if (!vec) - return NULL; - for (i = vec->size - 2; i >= 0; --i) - isl_int_swap(vec->el[i], vec->el[i + 1]); - return vec; -} - -int main(int argc, char **argv) -{ - struct isl_ctx *ctx = isl_ctx_alloc(); - struct isl_basic_set *bset; - struct isl_vec *obj; - struct isl_vec *sol; - isl_int opt; - unsigned dim; - enum isl_lp_result res; - isl_printer *p; - - isl_int_init(opt); - bset = isl_basic_set_read_from_file(ctx, stdin, 0); - assert(bset); - obj = isl_vec_read_from_file(ctx, stdin); - assert(obj); - dim = isl_basic_set_total_dim(bset); - assert(obj->size >= dim && obj->size <= dim + 1); - if (obj->size != dim + 1) - obj = isl_vec_lin_to_aff(obj); - else - obj = vec_ror(obj); - res = isl_basic_set_solve_ilp(bset, 0, obj->el, &opt, &sol); - switch (res) { - case isl_lp_error: - fprintf(stderr, "error\n"); - return -1; - case isl_lp_empty: - fprintf(stdout, "empty\n"); - break; - case isl_lp_unbounded: - fprintf(stdout, "unbounded\n"); - break; - case isl_lp_ok: - p = isl_printer_to_file(ctx, stdout); - p = isl_printer_print_vec(p, sol); - p = isl_printer_end_line(p); - p = isl_printer_print_isl_int(p, opt); - p = isl_printer_end_line(p); - isl_printer_free(p); - } - isl_basic_set_free(bset); - isl_vec_free(obj); - isl_vec_free(sol); - isl_ctx_free(ctx); - isl_int_clear(opt); - - return 0; -} diff --git a/cloog-0.16.3/isl/polyhedron_sample.c b/cloog-0.16.3/isl/polyhedron_sample.c deleted file mode 100644 index 05b343b..0000000 --- a/cloog-0.16.3/isl/polyhedron_sample.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include "isl_sample.h" -#include - -int main(int argc, char **argv) -{ - struct isl_ctx *ctx = isl_ctx_alloc(); - struct isl_basic_set *bset; - struct isl_vec *sample; - isl_printer *p; - - bset = isl_basic_set_read_from_file(ctx, stdin, 0); - sample = isl_basic_set_sample_vec(isl_basic_set_copy(bset)); - p = isl_printer_to_file(ctx, stdout); - p = isl_printer_print_vec(p, sample); - p = isl_printer_end_line(p); - isl_printer_free(p); - assert(sample); - if (sample->size > 0) - assert(isl_basic_set_contains(bset, sample)); - isl_basic_set_free(bset); - isl_vec_free(sample); - isl_ctx_free(ctx); - - return 0; -} diff --git a/cloog-0.16.3/isl/polytope_scan.c b/cloog-0.16.3/isl/polytope_scan.c deleted file mode 100644 index 60ac3e5..0000000 --- a/cloog-0.16.3/isl/polytope_scan.c +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include "isl_equalities.h" -#include -#include "isl_scan.h" -#include - -/* The input of this program is the same as that of the "polytope_scan" - * program from the barvinok distribution. - * - * Constraints of set is PolyLib format. - * - * The input set is assumed to be bounded. - */ - -struct scan_samples { - struct isl_scan_callback callback; - struct isl_mat *samples; -}; - -static int scan_samples_add_sample(struct isl_scan_callback *cb, - __isl_take isl_vec *sample) -{ - struct scan_samples *ss = (struct scan_samples *)cb; - - ss->samples = isl_mat_extend(ss->samples, ss->samples->n_row + 1, - ss->samples->n_col); - if (!ss->samples) - goto error; - - isl_seq_cpy(ss->samples->row[ss->samples->n_row - 1], - sample->el, sample->size); - - isl_vec_free(sample); - return 0; -error: - isl_vec_free(sample); - return -1; -} - -static struct isl_mat *isl_basic_set_scan_samples(struct isl_basic_set *bset) -{ - isl_ctx *ctx; - unsigned dim; - struct scan_samples ss; - - ctx = isl_basic_set_get_ctx(bset); - dim = isl_basic_set_total_dim(bset); - ss.callback.add = scan_samples_add_sample; - ss.samples = isl_mat_alloc(ctx, 0, 1 + dim); - if (!ss.samples) - goto error; - - if (isl_basic_set_scan(bset, &ss.callback) < 0) { - isl_mat_free(ss.samples); - return NULL; - } - - return ss.samples; -error: - isl_basic_set_free(bset); - return NULL; -} - -static struct isl_mat *isl_basic_set_samples(struct isl_basic_set *bset) -{ - struct isl_mat *T; - struct isl_mat *samples; - - if (!bset) - return NULL; - - if (bset->n_eq == 0) - return isl_basic_set_scan_samples(bset); - - bset = isl_basic_set_remove_equalities(bset, &T, NULL); - samples = isl_basic_set_scan_samples(bset); - return isl_mat_product(samples, isl_mat_transpose(T)); -} - -int main(int argc, char **argv) -{ - struct isl_ctx *ctx = isl_ctx_alloc(); - struct isl_basic_set *bset; - struct isl_mat *samples; - - bset = isl_basic_set_read_from_file(ctx, stdin, 0); - samples = isl_basic_set_samples(bset); - isl_mat_print_internal(samples, stdout, 0); - isl_mat_free(samples); - isl_ctx_free(ctx); - - return 0; -} diff --git a/cloog-0.16.3/isl/test_inputs/affine.polylib b/cloog-0.16.3/isl/test_inputs/affine.polylib deleted file mode 100644 index f14720c..0000000 --- a/cloog-0.16.3/isl/test_inputs/affine.polylib +++ /dev/null @@ -1,9 +0,0 @@ -# the affine hull of {[a,b] : a=b && 1 <= a <= 163} ... -3 4 -0 1 -1 0 -1 1 0 -1 -1 -1 0 163 - -# ... is {[a,b] : a=b} (and not {[In_1,In_2]}, as Omega 1.2 claims) -1 4 -0 1 -1 0 diff --git a/cloog-0.16.3/isl/test_inputs/affine2.polylib b/cloog-0.16.3/isl/test_inputs/affine2.polylib deleted file mode 100644 index c67db77..0000000 --- a/cloog-0.16.3/isl/test_inputs/affine2.polylib +++ /dev/null @@ -1,9 +0,0 @@ -5 5 -1 -2 0 1 0 -1 2 0 -1 1 -1 0 -2 1 0 -1 0 2 -1 1 -1 0 0 1 -1 - -1 5 -0 1 -1 0 0 diff --git a/cloog-0.16.3/isl/test_inputs/affine3.polylib b/cloog-0.16.3/isl/test_inputs/affine3.polylib deleted file mode 100644 index f2bc9a2..0000000 --- a/cloog-0.16.3/isl/test_inputs/affine3.polylib +++ /dev/null @@ -1,7 +0,0 @@ -3 4 -1 1 0 0 -1 -7 4 2 -1 5 -4 2 - -1 4 -0 3 -2 0 diff --git a/cloog-0.16.3/isl/test_inputs/application.omega b/cloog-0.16.3/isl/test_inputs/application.omega deleted file mode 100644 index 8f4fd1d..0000000 --- a/cloog-0.16.3/isl/test_inputs/application.omega +++ /dev/null @@ -1,3 +0,0 @@ -{[x]} -{[x] -> [y] : y = 2x} -{[y]: Exists ( alpha : 2alpha = y)} diff --git a/cloog-0.16.3/isl/test_inputs/application2.omega b/cloog-0.16.3/isl/test_inputs/application2.omega deleted file mode 100644 index f2af1e8..0000000 --- a/cloog-0.16.3/isl/test_inputs/application2.omega +++ /dev/null @@ -1,3 +0,0 @@ -{[x] : x >= 0 && x <= 20 } -{[x] -> [y] : y = 2x} -{[y]: Exists ( alpha : 2alpha = y && 0 <= y && y <= 40)} diff --git a/cloog-0.16.3/isl/test_inputs/basicLinear.pwqp b/cloog-0.16.3/isl/test_inputs/basicLinear.pwqp deleted file mode 100644 index 0af7fab..0000000 --- a/cloog-0.16.3/isl/test_inputs/basicLinear.pwqp +++ /dev/null @@ -1 +0,0 @@ -[P, Q] -> { [n, m] -> n : n >= 1 and m >= n and m <= P and m <= Q } diff --git a/cloog-0.16.3/isl/test_inputs/basicLinear2.pwqp b/cloog-0.16.3/isl/test_inputs/basicLinear2.pwqp deleted file mode 100644 index d411a36..0000000 --- a/cloog-0.16.3/isl/test_inputs/basicLinear2.pwqp +++ /dev/null @@ -1 +0,0 @@ -[P, Q] -> { [n, m] -> n : n >= 1 and m >= n and m <= P and n >= -1 + Q } diff --git a/cloog-0.16.3/isl/test_inputs/basicTest.pwqp b/cloog-0.16.3/isl/test_inputs/basicTest.pwqp deleted file mode 100644 index 52e7fc8..0000000 --- a/cloog-0.16.3/isl/test_inputs/basicTest.pwqp +++ /dev/null @@ -1 +0,0 @@ -[p] -> { [n, m] -> (n + n^2) : n >= 1 and m >= n and m <= p } diff --git a/cloog-0.16.3/isl/test_inputs/basicTestParameterPosNeg.pwqp b/cloog-0.16.3/isl/test_inputs/basicTestParameterPosNeg.pwqp deleted file mode 100644 index 6cb4490..0000000 --- a/cloog-0.16.3/isl/test_inputs/basicTestParameterPosNeg.pwqp +++ /dev/null @@ -1 +0,0 @@ -[p] -> { [n, m] -> (n + n^3) : n >= -1 and m >= n and m <= p } diff --git a/cloog-0.16.3/isl/test_inputs/boulet.pip b/cloog-0.16.3/isl/test_inputs/boulet.pip deleted file mode 100644 index 78e90dd..0000000 --- a/cloog-0.16.3/isl/test_inputs/boulet.pip +++ /dev/null @@ -1,13 +0,0 @@ -0 3 - --1 - -5 6 -1 1 -1 2 0 0 -1 0 1 1 4 20 -1 0 -1 -1 0 0 -1 0 1 -1 2 10 -1 0 -1 1 2 10 - -Urs_parms -Urs_unknowns diff --git a/cloog-0.16.3/isl/test_inputs/brisebarre.pip b/cloog-0.16.3/isl/test_inputs/brisebarre.pip deleted file mode 100644 index 5d25dae..0000000 --- a/cloog-0.16.3/isl/test_inputs/brisebarre.pip +++ /dev/null @@ -1,34 +0,0 @@ -# ---------------------- CONTEXT ---------------------- -1 2 -1 0 - --1 - -# ----------------------- DOMAIN ---------------------- -26 6 -1 3 0 0 0 -98300 -1 -3 0 0 0 98308 -1 432 36 6 1 -14757611 -1 -432 -36 -6 -1 14758510 -1 54 9 3 1 -1923190 -1 -54 -9 -3 -1 1923303 -1 48 12 6 3 -1782238 -1 -48 -12 -6 -3 1782339 -1 27 9 6 4 -1045164 -1 -27 -9 -6 -4 1045221 -1 432 180 150 125 -17434139 -1 -432 -180 -150 -125 17435038 -1 6 3 3 3 -252443 -1 -6 -3 -3 -3 252456 -1 432 252 294 343 -18949275 -1 -432 -252 -294 -343 18950174 -1 27 18 24 32 -1234720 -1 -27 -18 -24 -32 1234777 -1 48 36 54 81 -2288453 -1 -48 -36 -54 -81 2288554 -1 54 45 75 125 -2684050 -1 -54 -45 -75 -125 2684163 -1 432 396 726 1331 -22386005 -1 -432 -396 -726 -1331 22386904 -1 3 3 6 12 -162072 -1 -3 -3 -6 -12 162080 diff --git a/cloog-0.16.3/isl/test_inputs/cg1.pip b/cloog-0.16.3/isl/test_inputs/cg1.pip deleted file mode 100644 index 78e31f1..0000000 --- a/cloog-0.16.3/isl/test_inputs/cg1.pip +++ /dev/null @@ -1,15 +0,0 @@ -2 4 - 1 1 0 -1 - 1 -1 1 0 - --1 - -8 7 - 1 0 1 0 -1 0 0 - 1 0 -1 0 1 0 0 - 1 1 0 0 0 -1 0 - 1 -1 0 0 0 1 0 - 1 0 1 0 0 0 -1 - 1 0 -1 0 0 1 0 - 1 0 -1 1 0 0 -1 - 1 0 0 -1 0 1 0 diff --git a/cloog-0.16.3/isl/test_inputs/convex0.polylib b/cloog-0.16.3/isl/test_inputs/convex0.polylib deleted file mode 100644 index cbc4d3b..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex0.polylib +++ /dev/null @@ -1,11 +0,0 @@ -2 3 -1 1 0 -1 -1 1 - -2 3 -1 1 -1 -1 -1 2 - -2 3 -1 1 0 -1 -1 2 diff --git a/cloog-0.16.3/isl/test_inputs/convex1.polylib b/cloog-0.16.3/isl/test_inputs/convex1.polylib deleted file mode 100644 index b563d8d..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex1.polylib +++ /dev/null @@ -1,17 +0,0 @@ -# {j,N | 0<=j<=N-1; 2<=N} -4 4 -1 1 0 0 -1 -1 1 -1 -1 0 1 -2 -1 0 0 1 -# {j, N | 1<=j<=N; 1<=N} -4 4 -1 1 0 -1 -1 -1 1 0 -1 0 1 -1 -1 0 0 1 -# {j,N | 0<=j<=N; 2<=j+N} -3 4 - 1 1 1 -2 - 1 1 0 0 - 1 -1 1 0 diff --git a/cloog-0.16.3/isl/test_inputs/convex10.polylib b/cloog-0.16.3/isl/test_inputs/convex10.polylib deleted file mode 100644 index 3d58cbf..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex10.polylib +++ /dev/null @@ -1,17 +0,0 @@ -3 4 -1 54 1 -4 -1 2 -1 58 -1 0 -1 6 - -4 4 -1 54 1 -4 -1 2 -1 58 -1 0 1 -7 -1 -4 1 0 - -4 4 -1 54 1 -4 -1 2 -1 58 -1 0 -1 116 -1 0 0 1 - diff --git a/cloog-0.16.3/isl/test_inputs/convex11.polylib b/cloog-0.16.3/isl/test_inputs/convex11.polylib deleted file mode 100644 index f664114..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex11.polylib +++ /dev/null @@ -1,14 +0,0 @@ -3 4 -1 0 -1 6 -1 -1 1 1 -1 1 1 -10 - -3 4 -1 1 0 -4 -1 -1 -1 8 -1 -1 1 1 - -3 4 -1 0 -1 6 -1 1 0 -4 -1 -1 1 1 diff --git a/cloog-0.16.3/isl/test_inputs/convex12.polylib b/cloog-0.16.3/isl/test_inputs/convex12.polylib deleted file mode 100644 index e476630..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex12.polylib +++ /dev/null @@ -1,12 +0,0 @@ -3 5 -1 0 0 1 1 -1 0 1 0 1 -1 -1 -1 0 -2 - -3 5 -1 0 0 1 2 -1 1 -1 0 0 -1 1 0 0 -1 - -1 5 -1 0 0 1 2 diff --git a/cloog-0.16.3/isl/test_inputs/convex13.polylib b/cloog-0.16.3/isl/test_inputs/convex13.polylib deleted file mode 100644 index 1b35912..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex13.polylib +++ /dev/null @@ -1,17 +0,0 @@ -3 5 -1 0 0 -1 3 -1 0 -1 0 2 -1 1 1 1 -4 - -3 5 -1 0 0 1 0 -1 1 0 0 -1 -1 1 2 0 1 - -6 5 -1 3 2 0 -1 -1 3 0 2 -3 -1 1 0 1 -1 -1 1 1 1 0 -1 1 1 0 0 -1 1 0 0 1 diff --git a/cloog-0.16.3/isl/test_inputs/convex14.polylib b/cloog-0.16.3/isl/test_inputs/convex14.polylib deleted file mode 100644 index caaa8f5..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex14.polylib +++ /dev/null @@ -1,14 +0,0 @@ -3 4 -0 1 0 2 -1 0 1 0 -1 0 -1 2 - -3 4 -1 1 0 0 -1 0 1 0 -1 0 -1 2 - -3 4 -1 1 0 2 -1 0 1 0 -1 0 -1 2 diff --git a/cloog-0.16.3/isl/test_inputs/convex15.polylib b/cloog-0.16.3/isl/test_inputs/convex15.polylib deleted file mode 100644 index 0118fa8..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex15.polylib +++ /dev/null @@ -1,66 +0,0 @@ -17 8 -1 -1 -8 0 16 0 0 37 -1 1 0 -48 0 2 0 -3 -1 0 -16 -32 16 1 0 14 -1 -1 24 0 0 1 0 18 -1 -1 8 16 0 0 1 21 -1 0 0 -16 0 1 1 -2 -1 1 32 16 -32 0 0 -1 -1 -1 16 16 0 0 0 28 -1 1 -8 -32 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 16 16 -16 0 1 -1 -1 1 8 0 -16 0 0 0 -1 0 3 2 -2 0 0 0 -1 0 1 2 -1 0 0 0 -1 0 -1 -1 1 0 0 0 -1 -1 8 0 0 1 2 4 -1 -1 -24 -32 32 1 0 36 - -13 8 -1 -1 0 0 0 1 3 -4 -1 1 0 -48 0 2 0 -2 -1 0 0 0 0 1 0 -1 -1 0 -8 0 0 0 1 -1 -1 0 3 2 -2 0 0 0 -1 1 -16 -16 0 0 0 0 -1 1 -24 0 0 0 0 0 -1 0 1 0 0 0 0 0 -1 0 -3 -2 2 0 0 1 -1 -1 0 16 0 0 2 13 -1 -1 24 0 0 1 0 20 -1 -1 16 16 0 0 0 29 -1 -1 0 48 0 0 0 45 - -31 8 - 1 0 1 0 0 0 0 0 - 1 0 0 -16 0 1 1 -2 - 1 0 0 0 0 1 0 -1 - 1 -1 8 0 0 1 2 4 - 1 0 3 2 -2 0 0 0 - 1 -1 24 0 0 1 0 20 - 1 1 0 -48 0 2 0 -2 - 1 -1 -24 -32 32 1 0 36 - 1 0 0 0 0 0 1 -1 - 1 -1 24 64 -16 0 0 45 - 1 -15 120 112 0 15 38 52 - 1 1 24 32 -32 0 0 0 - 1 0 -2 -2 2 0 0 1 - 1 -1 8 16 0 0 1 21 - 1 -15 120 352 0 0 23 307 - 1 1 -8 -32 0 1 0 -1 - 1 1 -8 0 0 0 0 0 - 1 1 -8 -16 0 0 0 0 - 1 0 16 16 -16 0 1 -1 - 1 -1 16 16 0 0 0 29 - 1 -1 -8 0 16 0 0 37 - 1 -1 8 32 0 0 0 37 - 1 1 8 0 -16 0 0 0 - 1 -15 360 592 -240 0 23 307 - 1 -1 -6 2 14 0 2 20 - 1 -15 360 352 -240 15 38 52 - 1 -1 8 48 0 0 0 45 - 1 0 -16 -32 16 1 0 14 - 1 -1 -6 -14 14 1 3 3 - 1 1 -38 -78 30 2 0 13 - 1 1 -3 -50 2 2 0 -1 diff --git a/cloog-0.16.3/isl/test_inputs/convex2.polylib b/cloog-0.16.3/isl/test_inputs/convex2.polylib deleted file mode 100644 index 0bfd737..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex2.polylib +++ /dev/null @@ -1,24 +0,0 @@ -# {i,j,N | 1<=i<=N; 0<=j<=N-1; 2<=N} -6 5 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 0 -1 0 -1 1 -1 -1 0 0 1 -2 -1 0 0 0 1 -# {i,j,N | 1<=i<=N; 1<=j<=N; 2<=N} -6 5 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 -1 -1 0 -1 1 0 -1 0 0 1 -2 -1 0 0 0 1 -# {i,j,N | 1<=i<=N; 0<=j<=N; 2<=N} -6 5 - 1 0 0 1 -2 - 1 -1 0 1 0 - 1 0 -1 1 0 - 1 1 0 0 -1 - 1 0 1 0 0 - 1 0 0 0 1 diff --git a/cloog-0.16.3/isl/test_inputs/convex3.polylib b/cloog-0.16.3/isl/test_inputs/convex3.polylib deleted file mode 100644 index ea612c6..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex3.polylib +++ /dev/null @@ -1,10 +0,0 @@ -1 4 -1 1 1 -6 - -3 4 -1 1 1 -3 -1 1 0 -5 -1 -1 0 10 - -1 4 -1 1 1 -3 diff --git a/cloog-0.16.3/isl/test_inputs/convex4.polylib b/cloog-0.16.3/isl/test_inputs/convex4.polylib deleted file mode 100644 index 0c08653..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex4.polylib +++ /dev/null @@ -1,9 +0,0 @@ -1 4 -1 1 1 -6 - -2 4 -0 1 0 -1 -0 0 1 -4 - -1 4 -1 1 1 -5 diff --git a/cloog-0.16.3/isl/test_inputs/convex5.polylib b/cloog-0.16.3/isl/test_inputs/convex5.polylib deleted file mode 100644 index 3aae7c2..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex5.polylib +++ /dev/null @@ -1,12 +0,0 @@ -2 4 -0 1 0 -2 -0 0 1 -6 - -2 4 -0 1 0 -1 -0 0 1 -4 - -3 4 -0 -2 1 -2 -1 1 0 -1 -1 -1 0 2 diff --git a/cloog-0.16.3/isl/test_inputs/convex6.polylib b/cloog-0.16.3/isl/test_inputs/convex6.polylib deleted file mode 100644 index 1bdb4e1..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex6.polylib +++ /dev/null @@ -1,17 +0,0 @@ -3 4 -1 1 1 -2 -1 -1 1 2 -1 0 -1 2 - -3 4 -1 0 1 -1 -1 1 -1 1 -1 -1 -1 5 - -6 4 -1 -1 0 4 -1 1 0 0 -1 1 2 -2 -1 -1 2 2 -1 1 -2 4 -1 -1 -2 8 diff --git a/cloog-0.16.3/isl/test_inputs/convex7.polylib b/cloog-0.16.3/isl/test_inputs/convex7.polylib deleted file mode 100644 index 70eb483..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex7.polylib +++ /dev/null @@ -1,9 +0,0 @@ -1 4 -0 0 1 0 - -2 4 -1 1 -1 1 -1 -1 -1 1 - -1 4 -1 0 -1 1 diff --git a/cloog-0.16.3/isl/test_inputs/convex8.polylib b/cloog-0.16.3/isl/test_inputs/convex8.polylib deleted file mode 100644 index ea1b757..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex8.polylib +++ /dev/null @@ -1,24 +0,0 @@ -4 5 -1 1 1 1 0 -1 0 -1 0 0 -1 -1 0 0 2 -1 1 1 -1 0 - -4 5 -1 -1 1 0 2 -1 1 -2 -2 -1 -1 -1 0 2 3 -1 1 0 0 -1 - -10 5 -1 1 0 1 0 -1 1 1 0 0 -1 0 1 1 2 -1 -3 1 -1 8 -1 -3 1 1 8 -1 0 1 -1 2 -1 1 0 -1 0 -1 1 -2 -1 0 -1 -1 -3 2 6 -1 1 -5 -2 2 - diff --git a/cloog-0.16.3/isl/test_inputs/convex9.polylib b/cloog-0.16.3/isl/test_inputs/convex9.polylib deleted file mode 100644 index f68fca0..0000000 --- a/cloog-0.16.3/isl/test_inputs/convex9.polylib +++ /dev/null @@ -1,14 +0,0 @@ -4 4 -1 1 0 0 -1 -1 0 1 -1 0 1 0 -1 0 -1 10 - -2 4 -1 1 0 -10 -0 0 -1 5 - -3 4 -1 1 0 0 -1 0 1 0 -1 0 -1 10 diff --git a/cloog-0.16.3/isl/test_inputs/devos.pwqp b/cloog-0.16.3/isl/test_inputs/devos.pwqp deleted file mode 100644 index b452544..0000000 --- a/cloog-0.16.3/isl/test_inputs/devos.pwqp +++ /dev/null @@ -1 +0,0 @@ -[U] -> { [i0] -> ((1/3 * U + 2/3 * i0) - [(U + 2i0)/3]) : 2i0 >= -3 - U and 2i0 <= -U and U >= 0 and U <= 10 } diff --git a/cloog-0.16.3/isl/test_inputs/equality1.pwqp b/cloog-0.16.3/isl/test_inputs/equality1.pwqp deleted file mode 100644 index eb16a4b..0000000 --- a/cloog-0.16.3/isl/test_inputs/equality1.pwqp +++ /dev/null @@ -1 +0,0 @@ -[n] -> { [x] -> 1 + [(x+1)/3] : exists a : x = 3a +1 && 0 <= x <= n } diff --git a/cloog-0.16.3/isl/test_inputs/equality2.pwqp b/cloog-0.16.3/isl/test_inputs/equality2.pwqp deleted file mode 100644 index 1629a65..0000000 --- a/cloog-0.16.3/isl/test_inputs/equality2.pwqp +++ /dev/null @@ -1 +0,0 @@ -[n] -> { [x,y] -> x^2 * y : n = 2x + 4y and 0 <= x,y <= 10 } diff --git a/cloog-0.16.3/isl/test_inputs/equality3.pwqp b/cloog-0.16.3/isl/test_inputs/equality3.pwqp deleted file mode 100644 index c6f8c3a..0000000 --- a/cloog-0.16.3/isl/test_inputs/equality3.pwqp +++ /dev/null @@ -1 +0,0 @@ -[m,n] -> { [x,y] -> x^2 * y : n = 2x + 4y and 0 <= x,y <= 10 and 3 n = 5 m } diff --git a/cloog-0.16.3/isl/test_inputs/equality4.pwqp b/cloog-0.16.3/isl/test_inputs/equality4.pwqp deleted file mode 100644 index 49da2e7..0000000 --- a/cloog-0.16.3/isl/test_inputs/equality4.pwqp +++ /dev/null @@ -1 +0,0 @@ -[m,n] -> { [x,y] -> x^2 * y + m + 13 * n: n = 2x + 4y and 0 <= x,y <= 10 and 3 n = 5 m } diff --git a/cloog-0.16.3/isl/test_inputs/equality5.pwqp b/cloog-0.16.3/isl/test_inputs/equality5.pwqp deleted file mode 100644 index 09cb752..0000000 --- a/cloog-0.16.3/isl/test_inputs/equality5.pwqp +++ /dev/null @@ -1 +0,0 @@ -[m,n] -> { [x,y,z] -> x^2 * y + z + m + 13 * n: n = 2x + 4y and 0 <= x,y <= 10 and 3 n = 5 m and z = x + y } diff --git a/cloog-0.16.3/isl/test_inputs/esced.pip b/cloog-0.16.3/isl/test_inputs/esced.pip deleted file mode 100644 index dbf56ff..0000000 --- a/cloog-0.16.3/isl/test_inputs/esced.pip +++ /dev/null @@ -1,27 +0,0 @@ -0 2 - --1 - -16 18 -1 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 - - -0 0 0 0 -1 0 0 0 0 1 -1 0 0 0 0 0 0 0 -0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 - -0 -1 0 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 - -0 0 0 0 0 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 -0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 -0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 0 0 0 -0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 0 - -1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 diff --git a/cloog-0.16.3/isl/test_inputs/ex.pip b/cloog-0.16.3/isl/test_inputs/ex.pip deleted file mode 100644 index a405450..0000000 --- a/cloog-0.16.3/isl/test_inputs/ex.pip +++ /dev/null @@ -1,9 +0,0 @@ -1 5 -1 -1 1 1 0 - --1 - -3 7 -1 0 -1 0 1 0 0 -1 -1 0 0 0 1 0 -1 1 1 -1 0 0 0 diff --git a/cloog-0.16.3/isl/test_inputs/ex2.pip b/cloog-0.16.3/isl/test_inputs/ex2.pip deleted file mode 100644 index bb59848..0000000 --- a/cloog-0.16.3/isl/test_inputs/ex2.pip +++ /dev/null @@ -1,9 +0,0 @@ -1 5 -1 -1 1 1 0 - --1 - -3 7 -1 0 -1 0 1 0 0 -1 -1 0 0 0 1 0 -1 1 1 -1 0 0 0 diff --git a/cloog-0.16.3/isl/test_inputs/faddeev.pwqp b/cloog-0.16.3/isl/test_inputs/faddeev.pwqp deleted file mode 100644 index e7db61d..0000000 --- a/cloog-0.16.3/isl/test_inputs/faddeev.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N] -> { [i, j, k] -> (((4 + 6 * N + 2 * N^2) + (-2 - 2 * N) * j) + ((-2 - N) + j) * k) : j = 1 + i and k = 1 + i and i >= 3 and N <= 100 and i <= N and N >= 10 } diff --git a/cloog-0.16.3/isl/test_inputs/fimmel.pip b/cloog-0.16.3/isl/test_inputs/fimmel.pip deleted file mode 100644 index a6dee41..0000000 --- a/cloog-0.16.3/isl/test_inputs/fimmel.pip +++ /dev/null @@ -1,12 +0,0 @@ -0 4 - --1 - -7 6 -1 2 6 0 0 -9 -1 5 -3 0 0 0 -1 2 -10 0 0 15 -1 -2 6 0 0 -3 -1 -2 -6 0 0 17 -1 0 1 -1 0 0 -1 1 0 0 -1 0 diff --git a/cloog-0.16.3/isl/test_inputs/gist1.polylib b/cloog-0.16.3/isl/test_inputs/gist1.polylib deleted file mode 100644 index 802a4eb..0000000 --- a/cloog-0.16.3/isl/test_inputs/gist1.polylib +++ /dev/null @@ -1,14 +0,0 @@ -4 5 -0 1 0 0 -1 -0 0 1 0 1 -0 0 0 1 -3 -1 0 0 0 1 - -4 5 -0 1 0 0 -1 -0 0 1 1 -2 -1 0 0 1 0 -1 0 0 -1 3 - -1 5 -0 0 1 0 1 diff --git a/cloog-0.16.3/isl/test_inputs/linearExample.pwqp b/cloog-0.16.3/isl/test_inputs/linearExample.pwqp deleted file mode 100644 index 24c5394..0000000 --- a/cloog-0.16.3/isl/test_inputs/linearExample.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N, M, L] -> { [i, j, k] -> ((1/2 * i + 5 * j) + 1/7 * k) : i >= 0 and k >= -N + i and k >= -M - j and j <= L + i and L >= 0 and L >= -M } diff --git a/cloog-0.16.3/isl/test_inputs/max.pip b/cloog-0.16.3/isl/test_inputs/max.pip deleted file mode 100644 index e8af57b..0000000 --- a/cloog-0.16.3/isl/test_inputs/max.pip +++ /dev/null @@ -1,9 +0,0 @@ -0 3 - --1 - -4 5 -1 -1 0 1 0 -1 0 -1 1 0 -1 -1 3 -2 12 -1 2 -1 -1 3 diff --git a/cloog-0.16.3/isl/test_inputs/neg.pwqp b/cloog-0.16.3/isl/test_inputs/neg.pwqp deleted file mode 100644 index 596a7d7..0000000 --- a/cloog-0.16.3/isl/test_inputs/neg.pwqp +++ /dev/null @@ -1 +0,0 @@ -[n] -> { [i0] -> i0^2 : i0 >= -20 - n and i0 <= n and i0 <= -1 and n >= 0 } diff --git a/cloog-0.16.3/isl/test_inputs/negative.pip b/cloog-0.16.3/isl/test_inputs/negative.pip deleted file mode 100644 index 45090a5..0000000 --- a/cloog-0.16.3/isl/test_inputs/negative.pip +++ /dev/null @@ -1,9 +0,0 @@ -1 3 -# n 1 -1 1 -1 # n >= 1 --1 - -2 4 -# i n 1 -1 1 0 1 # i >= -1 -1 -1 1 0 # i <= n diff --git a/cloog-0.16.3/isl/test_inputs/philippe.pwqp b/cloog-0.16.3/isl/test_inputs/philippe.pwqp deleted file mode 100644 index 1c56e7a..0000000 --- a/cloog-0.16.3/isl/test_inputs/philippe.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N] -> { [i, j] -> ((1/2 * i + 1/2 * i^2) + j) : i <= N and j >= 0 and j <= i } diff --git a/cloog-0.16.3/isl/test_inputs/philippe3vars.pwqp b/cloog-0.16.3/isl/test_inputs/philippe3vars.pwqp deleted file mode 100644 index 8d07496..0000000 --- a/cloog-0.16.3/isl/test_inputs/philippe3vars.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N] -> { [i, j, k] -> (((1/2 * i + 1/2 * i^2) + j) + k^3) : i >= 0 and k >= -N + i and k >= -j and j <= i } diff --git a/cloog-0.16.3/isl/test_inputs/philippe3vars3pars.pwqp b/cloog-0.16.3/isl/test_inputs/philippe3vars3pars.pwqp deleted file mode 100644 index f81b8cc..0000000 --- a/cloog-0.16.3/isl/test_inputs/philippe3vars3pars.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N, M, L] -> { [i, j, k] -> (((1/2 * i + 1/2 * i^2) + j) + k^3) : i >= 0 and k >= -N + i and k >= -M - j and j <= L + i and L >= 0 and L >= -M } diff --git a/cloog-0.16.3/isl/test_inputs/philippeNeg.pwqp b/cloog-0.16.3/isl/test_inputs/philippeNeg.pwqp deleted file mode 100644 index 24dc805..0000000 --- a/cloog-0.16.3/isl/test_inputs/philippeNeg.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N] -> { [i, j] -> ((1/2 * i + 1/2 * i^2) + j) : i <= N and j >= -1 and j <= i } diff --git a/cloog-0.16.3/isl/test_inputs/philippePolynomialCoeff.pwqp b/cloog-0.16.3/isl/test_inputs/philippePolynomialCoeff.pwqp deleted file mode 100644 index e6327c7..0000000 --- a/cloog-0.16.3/isl/test_inputs/philippePolynomialCoeff.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N, M] -> { [i, j] -> ((N * i + (1/5 * N + N^2) * i^2) + 5 * j) : i <= N and j >= 0 and j <= i and M >= 0 } diff --git a/cloog-0.16.3/isl/test_inputs/philippePolynomialCoeff1P.pwqp b/cloog-0.16.3/isl/test_inputs/philippePolynomialCoeff1P.pwqp deleted file mode 100644 index ae01d2f..0000000 --- a/cloog-0.16.3/isl/test_inputs/philippePolynomialCoeff1P.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N] -> { [i, j] -> ((N * i + (1/5 * N + N^2) * i^2) + 5 * j) : i <= N and j >= 0 and j <= i } diff --git a/cloog-0.16.3/isl/test_inputs/product.pwqp b/cloog-0.16.3/isl/test_inputs/product.pwqp deleted file mode 100644 index ee48b85..0000000 --- a/cloog-0.16.3/isl/test_inputs/product.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N] -> { [i0, i1, i2] -> (i0^3 * i1^2 + N * i1 * i2) : i0 >= 0 and i0 <= N and i1 >= 0 and i1 <= N and i2 >= 0 and i2 <= N } diff --git a/cloog-0.16.3/isl/test_inputs/seghir-vd.pip b/cloog-0.16.3/isl/test_inputs/seghir-vd.pip deleted file mode 100644 index b5395fb..0000000 --- a/cloog-0.16.3/isl/test_inputs/seghir-vd.pip +++ /dev/null @@ -1,17 +0,0 @@ -0 6 - --1 - -9 8 - 0 0 0 1 1 0 0 2 - 1 2 1 0 0 1 0 0 - 1 0 1 0 -1 0 0 -1 - 1 -2 -1 0 0 0 0 -1 - 1 7 3 0 0 0 0 -1 - 1 -6 -4 0 1 0 3 1 - 1 -7 -3 0 0 1 6 4 - 1 0 0 0 0 0 1 0 - 1 0 0 0 0 0 0 1 - -Urs_parms -Urs_unknowns diff --git a/cloog-0.16.3/isl/test_inputs/set.omega b/cloog-0.16.3/isl/test_inputs/set.omega deleted file mode 100644 index ac8485f..0000000 --- a/cloog-0.16.3/isl/test_inputs/set.omega +++ /dev/null @@ -1 +0,0 @@ -{[y]: Exists ( alpha : 2alpha = y)} diff --git a/cloog-0.16.3/isl/test_inputs/small.pip b/cloog-0.16.3/isl/test_inputs/small.pip deleted file mode 100644 index 59557d2..0000000 --- a/cloog-0.16.3/isl/test_inputs/small.pip +++ /dev/null @@ -1,9 +0,0 @@ -0 2 - --1 - -4 4 -1 1 0 0 -1 0 1 0 -1 1 -3 12 -1 -2 1 3 diff --git a/cloog-0.16.3/isl/test_inputs/sor1d.pip b/cloog-0.16.3/isl/test_inputs/sor1d.pip deleted file mode 100644 index 1bef89e..0000000 --- a/cloog-0.16.3/isl/test_inputs/sor1d.pip +++ /dev/null @@ -1,28 +0,0 @@ -2 4 - 1 1 0 0 - 1 0 1 0 - --1 - -20 8 - - 0 -1 0 0 0 0 0 2 - 0 0 -1 0 0 0 0 1 - 0 0 0 -1 0 0 0 2 - 0 0 0 0 -1 0 0 4 - 1 0 0 0 1 0 0 -2 - 1 -2 0 2 1 0 0 -4 - 1 0 0 0 -1 0 1 -1 - 1 2 0 -2 -1 0 0 5 - 1 0 0 1 0 0 0 -1 - 1 0 -2 1 0 0 0 0 - 1 -2 0 2 0 0 1 -5 - 1 0 0 -1 0 1 0 0 - 1 0 2 -1 0 0 0 1 - 1 2 0 -2 0 0 0 3 - 1 0 1 0 0 0 0 0 - 1 -2 4 0 0 0 1 -3 - 1 0 -2 0 0 1 0 0 - 1 2 -4 0 0 0 0 3 - 1 2 0 0 0 0 0 1 - 1 -2 0 0 0 2 1 -5 diff --git a/cloog-0.16.3/isl/test_inputs/split.pwqp b/cloog-0.16.3/isl/test_inputs/split.pwqp deleted file mode 100644 index 1804563..0000000 --- a/cloog-0.16.3/isl/test_inputs/split.pwqp +++ /dev/null @@ -1 +0,0 @@ -[n] -> { [x] -> -1 + [(x+5)/7] : -n - 20 <= x <= n } diff --git a/cloog-0.16.3/isl/test_inputs/square.pip b/cloog-0.16.3/isl/test_inputs/square.pip deleted file mode 100644 index 7bb3f0c..0000000 --- a/cloog-0.16.3/isl/test_inputs/square.pip +++ /dev/null @@ -1,9 +0,0 @@ -0 3 - --1 - -4 5 -1 1 0 0 0 -1 -1 0 1 0 -1 0 1 0 0 -1 0 -1 1 0 diff --git a/cloog-0.16.3/isl/test_inputs/sven.pip b/cloog-0.16.3/isl/test_inputs/sven.pip deleted file mode 100644 index 8602769..0000000 --- a/cloog-0.16.3/isl/test_inputs/sven.pip +++ /dev/null @@ -1,7 +0,0 @@ -0 3 - --1 - -2 3 -1 1 -4 -1 -1 10 diff --git a/cloog-0.16.3/isl/test_inputs/test3Deg3Var.pwqp b/cloog-0.16.3/isl/test_inputs/test3Deg3Var.pwqp deleted file mode 100644 index d9a9ea9..0000000 --- a/cloog-0.16.3/isl/test_inputs/test3Deg3Var.pwqp +++ /dev/null @@ -1 +0,0 @@ -[p] -> { [n, m] -> (n + n^3) : n >= 1 and m >= n and m <= p } diff --git a/cloog-0.16.3/isl/test_inputs/tobi.pip b/cloog-0.16.3/isl/test_inputs/tobi.pip deleted file mode 100644 index c31beae..0000000 --- a/cloog-0.16.3/isl/test_inputs/tobi.pip +++ /dev/null @@ -1,15 +0,0 @@ -2 3 -1 1 -281 -1 -1 14000 - --1 - -6 6 -0 -392 0 8 -1 0 -0 392 8 0 1 0 -1 -1 0 0 0 0 -1 1 0 0 0 35 -1 392 0 0 1 0 -1 -392 0 0 -1 280 - -Urs_unknowns diff --git a/cloog-0.16.3/isl/test_inputs/toplas.pwqp b/cloog-0.16.3/isl/test_inputs/toplas.pwqp deleted file mode 100644 index 9c09995..0000000 --- a/cloog-0.16.3/isl/test_inputs/toplas.pwqp +++ /dev/null @@ -1 +0,0 @@ -[n] -> { [i0, i1] -> (((4 * n - n^2) + (-3/2 + 2 * n) * i0 - 1/2 * i0^2) - i1) : i1 >= -1 + 3n - i0 and i1 >= -1 + 2n - i0 and i0 >= 0 and i1 <= -2 + 4n - i0 and i0 <= -2 + 4n and i0 <= -1 + 3n and i1 >= 0 and i1 <= -1 + n } diff --git a/cloog-0.16.3/isl/test_inputs/unexpanded.pwqp b/cloog-0.16.3/isl/test_inputs/unexpanded.pwqp deleted file mode 100644 index 5626d3b..0000000 --- a/cloog-0.16.3/isl/test_inputs/unexpanded.pwqp +++ /dev/null @@ -1 +0,0 @@ -{ [x, y] -> ((x - x^2) * y + (-x + x^2) * y^2) : x >= 0 and x <= 2 and y >= 0 and y <= 2 } diff --git a/cloog-0.16.3/m4/ax_cc_maxopt.m4 b/cloog-0.16.3/m4/ax_cc_maxopt.m4 deleted file mode 100644 index da415be..0000000 --- a/cloog-0.16.3/m4/ax_cc_maxopt.m4 +++ /dev/null @@ -1,178 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_cc_maxopt.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CC_MAXOPT -# -# DESCRIPTION -# -# Try to turn on "good" C optimization flags for various compilers and -# architectures, for some definition of "good". (In our case, good for -# FFTW and hopefully for other scientific codes. Modify as needed.) -# -# The user can override the flags by setting the CFLAGS environment -# variable. The user can also specify --enable-portable-binary in order to -# disable any optimization flags that might result in a binary that only -# runs on the host architecture. -# -# Note also that the flags assume that ANSI C aliasing rules are followed -# by the code (e.g. for gcc's -fstrict-aliasing), and that floating-point -# computations can be re-ordered as needed. -# -# Requires macros: AX_CHECK_COMPILER_FLAGS, AX_COMPILER_VENDOR, -# AX_GCC_ARCHFLAG, AX_GCC_X86_CPUID. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CC_MAXOPT], -[ -AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AX_COMPILER_VENDOR]) -AC_REQUIRE([AC_CANONICAL_HOST]) - -AC_ARG_ENABLE(portable-binary, [AC_HELP_STRING([--enable-portable-binary], [disable compiler optimizations that would produce unportable binaries])], - acx_maxopt_portable=$withval, acx_maxopt_portable=no) - -# Try to determine "good" native compiler flags if none specified via CFLAGS -if test "$ac_test_CFLAGS" != "set"; then - CFLAGS="" - case $ax_cv_c_compiler_vendor in - dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" - if test "x$acx_maxopt_portable" = xno; then - CFLAGS="$CFLAGS -arch host" - fi;; - - sun) CFLAGS="-native -fast -xO5 -dalign" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS -xarch=generic" - fi;; - - hp) CFLAGS="+Oall +Optrs_ansi +DSnative" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS +DAportable" - fi;; - - ibm) if test "x$acx_maxopt_portable" = xno; then - xlc_opt="-qarch=auto -qtune=auto" - else - xlc_opt="-qtune=auto" - fi - AX_CHECK_COMPILER_FLAGS($xlc_opt, - CFLAGS="-O3 -qansialias -w $xlc_opt", - [CFLAGS="-O3 -qansialias -w" - echo "******************************************************" - echo "* You seem to have the IBM C compiler. It is *" - echo "* recommended for best performance that you use: *" - echo "* *" - echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" - echo "* ^^^ ^^^ *" - echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" - echo "* CPU you have. (Set the CFLAGS environment var. *" - echo "* and re-run configure.) For more info, man cc. *" - echo "******************************************************"]) - ;; - - intel) CFLAGS="-O3 -ansi_alias" - if test "x$acx_maxopt_portable" = xno; then - icc_archflag=unknown - icc_flags="" - case $host_cpu in - i686*|x86_64*) - # icc accepts gcc assembly syntax, so these should work: - AX_GCC_X86_CPUID(0) - AX_GCC_X86_CPUID(1) - case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *6a?:*[[234]]:*:*|*6[[789b]]?:*:*:*) icc_flags="-xK";; - *f3[[347]]:*:*:*|*f4[1347]:*:*:*) icc_flags="-xP -xN -xW -xK";; - *f??:*:*:*) icc_flags="-xN -xW -xK";; - esac ;; - esac ;; - esac - if test "x$icc_flags" != x; then - for flag in $icc_flags; do - AX_CHECK_COMPILER_FLAGS($flag, [icc_archflag=$flag; break]) - done - fi - AC_MSG_CHECKING([for icc architecture flag]) - AC_MSG_RESULT($icc_archflag) - if test "x$icc_archflag" != xunknown; then - CFLAGS="$CFLAGS $icc_archflag" - fi - fi - ;; - - gnu) - # default optimization flags for gcc on all systems - CFLAGS="-O3 -fomit-frame-pointer" - - # -malign-double for x86 systems - AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double") - - # -fstrict-aliasing for gcc-2.95+ - AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing, - CFLAGS="$CFLAGS -fstrict-aliasing") - - # note that we enable "unsafe" fp optimization with other compilers, too - AX_CHECK_COMPILER_FLAGS(-ffast-math, CFLAGS="$CFLAGS -ffast-math") - - AX_GCC_ARCHFLAG($acx_maxopt_portable) - ;; - esac - - if test -z "$CFLAGS"; then - echo "" - echo "********************************************************" - echo "* WARNING: Don't know the best CFLAGS for this system *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" - echo "********************************************************" - echo "" - CFLAGS="-O3" - fi - - AX_CHECK_COMPILER_FLAGS($CFLAGS, [], [ - echo "" - echo "********************************************************" - echo "* WARNING: The guessed CFLAGS don't seem to work with *" - echo "* your compiler. *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "********************************************************" - echo "" - CFLAGS="" - ]) - -fi -]) diff --git a/cloog-0.16.3/m4/ax_cflags_warn_all.m4 b/cloog-0.16.3/m4/ax_cflags_warn_all.m4 deleted file mode 100644 index 026c6e9..0000000 --- a/cloog-0.16.3/m4/ax_cflags_warn_all.m4 +++ /dev/null @@ -1,149 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_cflags_warn_all.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] -# -# DESCRIPTION -# -# Try to find a compiler option that enables most reasonable warnings. -# -# For the GNU CC compiler it will be -Wall (and -ansi -pedantic) The -# result is added to the shellvar being CFLAGS by default. -# -# Currently this macro knows about GCC, Solaris C compiler, Digital Unix C -# compiler, C for AIX Compiler, HP-UX C compiler, IRIX C compiler, NEC -# SX-5 (Super-UX 10) C compiler, and Cray J90 (Unicos 10.0.0.8) C -# compiler. -# -# - $1 shell-variable-to-add-to : CFLAGS -# - $2 add-value-if-not-found : nothing -# - $3 action-if-found : add value to shellvariable -# - $4 action-if-not-found : nothing -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CFLAGS_WARN_ALL],[dnl -AS_VAR_PUSHDEF([FLAGS],[CFLAGS])dnl -AS_VAR_PUSHDEF([VAR],[ac_cv_cflags_warn_all])dnl -AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings], -VAR,[VAR="no, unknown" - AC_LANG_SAVE - AC_LANG_C - ac_save_[]FLAGS="$[]FLAGS" -for ac_arg dnl -in "-pedantic % -Wall" dnl GCC - "-xstrconst % -v" dnl Solaris C - "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix - "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX - "-ansi -ansiE % -fullwarn" dnl IRIX - "+ESlit % +w1" dnl HP-UX C - "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10) - "-h conform % -h msglevel 2" dnl Cray C (Unicos) - # -do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - AC_TRY_COMPILE([],[return 0;], - [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) -done - FLAGS="$ac_save_[]FLAGS" - AC_LANG_RESTORE -]) -case ".$VAR" in - .ok|.ok,*) m4_ifvaln($3,$3) ;; - .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[ - AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;; - *) m4_ifvaln($3,$3,[ - if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null - then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR]) - else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR" - fi ]) ;; -esac -AS_VAR_POPDEF([VAR])dnl -AS_VAR_POPDEF([FLAGS])dnl -]) - -dnl the only difference - the LANG selection... and the default FLAGS - -AC_DEFUN([AX_CXXFLAGS_WARN_ALL],[dnl -AS_VAR_PUSHDEF([FLAGS],[CXXFLAGS])dnl -AS_VAR_PUSHDEF([VAR],[ax_cv_cxxflags_warn_all])dnl -AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings], -VAR,[VAR="no, unknown" - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - ac_save_[]FLAGS="$[]FLAGS" -for ac_arg dnl -in "-pedantic % -Wall" dnl GCC - "-xstrconst % -v" dnl Solaris C - "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix - "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX - "-ansi -ansiE % -fullwarn" dnl IRIX - "+ESlit % +w1" dnl HP-UX C - "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10) - "-h conform % -h msglevel 2" dnl Cray C (Unicos) - # -do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - AC_TRY_COMPILE([],[return 0;], - [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) -done - FLAGS="$ac_save_[]FLAGS" - AC_LANG_RESTORE -]) -case ".$VAR" in - .ok|.ok,*) m4_ifvaln($3,$3) ;; - .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[ - AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;; - *) m4_ifvaln($3,$3,[ - if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null - then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR]) - else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR" - fi ]) ;; -esac -AS_VAR_POPDEF([VAR])dnl -AS_VAR_POPDEF([FLAGS])dnl -]) - -dnl implementation tactics: -dnl the for-argument contains a list of options. The first part of -dnl these does only exist to detect the compiler - usually it is -dnl a global option to enable -ansi or -extrawarnings. All other -dnl compilers will fail about it. That was needed since a lot of -dnl compilers will give false positives for some option-syntax -dnl like -Woption or -Xoption as they think of it is a pass-through -dnl to later compile stages or something. The "%" is used as a -dnl delimimiter. A non-option comment can be given after "%%" marks -dnl which will be shown but not added to the respective C/CXXFLAGS. diff --git a/cloog-0.16.3/m4/ax_check_compiler_flags.m4 b/cloog-0.16.3/m4/ax_check_compiler_flags.m4 deleted file mode 100644 index 7da8324..0000000 --- a/cloog-0.16.3/m4/ax_check_compiler_flags.m4 +++ /dev/null @@ -1,74 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_check_compiler_flags.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CHECK_COMPILER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE]) -# -# DESCRIPTION -# -# Check whether the given compiler FLAGS work with the current language's -# compiler, or whether they give an error. (Warnings, however, are -# ignored.) -# -# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on -# success/failure. -# -# LICENSE -# -# Copyright (c) 2009 Steven G. Johnson -# Copyright (c) 2009 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CHECK_COMPILER_FLAGS], -[AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX -AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1]) -dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname: -AS_LITERAL_IF([$1], - [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1]), [ - ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=yes, - AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=no) - _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])], - [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=yes, - eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=no) - _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS]) -eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1]) -AC_MSG_RESULT($ax_check_compiler_flags) -if test "x$ax_check_compiler_flags" = xyes; then - m4_default([$2], :) -else - m4_default([$3], :) -fi -])dnl AX_CHECK_COMPILER_FLAGS diff --git a/cloog-0.16.3/m4/ax_compiler_vendor.m4 b/cloog-0.16.3/m4/ax_compiler_vendor.m4 deleted file mode 100644 index b074260..0000000 --- a/cloog-0.16.3/m4/ax_compiler_vendor.m4 +++ /dev/null @@ -1,61 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_compiler_vendor.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_COMPILER_VENDOR -# -# DESCRIPTION -# -# Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, sun, -# hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft, -# watcom, etc. The vendor is returned in the cache variable -# $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_COMPILER_VENDOR], -[ -AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, - [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown - # note: don't check for gcc first since some other compilers define __GNUC__ - for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do - vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ -#if !($vencpp) - thisisanerror; -#endif -])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break]) - done - ]) -]) diff --git a/cloog-0.16.3/m4/ax_create_pkgconfig_info.m4 b/cloog-0.16.3/m4/ax_create_pkgconfig_info.m4 deleted file mode 100644 index 60ac548..0000000 --- a/cloog-0.16.3/m4/ax_create_pkgconfig_info.m4 +++ /dev/null @@ -1,349 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_create_pkgconfig_info.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CREATE_PKGCONFIG_INFO [(outputfile, [requires [,libs [,summary [,cflags [, ldflags]]]]])] -# -# DESCRIPTION -# -# Defaults: -# -# $1 = $PACKAGE_NAME.pc -# $2 = (empty) -# $3 = $PACKAGE_LIBS $LIBS (as set at that point in configure.ac) -# $4 = $PACKAGE_SUMMARY (or $1 Library) -# $5 = $CPPFLAGS $PACKAGE_CFLAGS (as set at the point in configure.ac) -# $6 = $LDFLAGS $PACKAGE_LDFLAGS (as set at the point in configure.ac) -# -# PACKAGE_NAME defaults to $PACKAGE if not set. -# PACKAGE_LIBS defaults to -l$PACKAGE_NAME if not set. -# -# The resulting file is called $PACKAGE.pc.in / $PACKAGE.pc -# -# You will find this macro most useful in conjunction with -# ax_spec_defaults that can read good initializers from the .spec file. In -# consequencd, most of the generatable installable stuff can be made from -# information being updated in a single place for the whole project. -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# Copyright (c) 2008 Sven Verdoolaege -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CREATE_PKGCONFIG_INFO],[dnl -AS_VAR_PUSHDEF([PKGCONFIG_suffix],[ax_create_pkgconfig_suffix])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libdir],[ax_create_pkgconfig_libdir])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libfile],[ax_create_pkgconfig_libfile])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libname],[ax_create_pkgconfig_libname])dnl -AS_VAR_PUSHDEF([PKGCONFIG_version],[ax_create_pkgconfig_version])dnl -AS_VAR_PUSHDEF([PKGCONFIG_description],[ax_create_pkgconfig_description])dnl -AS_VAR_PUSHDEF([PKGCONFIG_requires],[ax_create_pkgconfig_requires])dnl -AS_VAR_PUSHDEF([PKGCONFIG_pkglibs],[ax_create_pkgconfig_pkglibs])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libs],[ax_create_pkgconfig_libs])dnl -AS_VAR_PUSHDEF([PKGCONFIG_ldflags],[ax_create_pkgconfig_ldflags])dnl -AS_VAR_PUSHDEF([PKGCONFIG_cppflags],[ax_create_pkgconfig_cppflags])dnl -AS_VAR_PUSHDEF([PKGCONFIG_generate],[ax_create_pkgconfig_generate])dnl -AS_VAR_PUSHDEF([PKGCONFIG_src_libdir],[ax_create_pkgconfig_src_libdir])dnl -AS_VAR_PUSHDEF([PKGCONFIG_src_headers],[ax_create_pkgconfig_src_headers])dnl - -# we need the expanded forms... -test "x$prefix" = xNONE && prefix=$ac_default_prefix -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -AC_MSG_CHECKING(our pkgconfig libname) -test ".$PKGCONFIG_libname" != "." || \ -PKGCONFIG_libname="ifelse($1,,${PACKAGE_NAME},`basename $1 .pc`)" -test ".$PKGCONFIG_libname" != "." || \ -PKGCONFIG_libname="$PACKAGE" -PKGCONFIG_libname=`eval echo "$PKGCONFIG_libname"` -PKGCONFIG_libname=`eval echo "$PKGCONFIG_libname"` -AC_MSG_RESULT($PKGCONFIG_libname) - -AC_MSG_CHECKING(our pkgconfig version) -test ".$PKGCONFIG_version" != "." || \ -PKGCONFIG_version="${PACKAGE_VERSION}" -test ".$PKGCONFIG_version" != "." || \ -PKGCONFIG_version="$VERSION" -PKGCONFIG_version=`eval echo "$PKGCONFIG_version"` -PKGCONFIG_version=`eval echo "$PKGCONFIG_version"` -AC_MSG_RESULT($PKGCONFIG_version) - -AC_MSG_CHECKING(our pkgconfig_libdir) -test ".$pkgconfig_libdir" = "." && \ -pkgconfig_libdir='${libdir}/pkgconfig' -PKGCONFIG_libdir=`eval echo "$pkgconfig_libdir"` -PKGCONFIG_libdir=`eval echo "$PKGCONFIG_libdir"` -PKGCONFIG_libdir=`eval echo "$PKGCONFIG_libdir"` -AC_MSG_RESULT($pkgconfig_libdir) -test "$pkgconfig_libdir" != "$PKGCONFIG_libdir" && ( -AC_MSG_RESULT(expanded our pkgconfig_libdir... $PKGCONFIG_libdir)) -AC_SUBST([pkgconfig_libdir]) - -AC_MSG_CHECKING(our pkgconfig_libfile) -test ".$pkgconfig_libfile" != "." || \ -pkgconfig_libfile="ifelse($1,,$PKGCONFIG_libname.pc,`basename $1`)" -PKGCONFIG_libfile=`eval echo "$pkgconfig_libfile"` -PKGCONFIG_libfile=`eval echo "$PKGCONFIG_libfile"` -AC_MSG_RESULT($pkgconfig_libfile) -test "$pkgconfig_libfile" != "$PKGCONFIG_libfile" && ( -AC_MSG_RESULT(expanded our pkgconfig_libfile... $PKGCONFIG_libfile)) -AC_SUBST([pkgconfig_libfile]) - -AC_MSG_CHECKING(our package / suffix) -PKGCONFIG_suffix="$program_suffix" -test ".$PKGCONFIG_suffix" != .NONE || PKGCONFIG_suffix="" -AC_MSG_RESULT(${PACKAGE_NAME} / ${PKGCONFIG_suffix}) - -AC_MSG_CHECKING(our pkgconfig description) -PKGCONFIG_description="ifelse($4,,$PACKAGE_SUMMARY,$4)" -test ".$PKGCONFIG_description" != "." || \ -PKGCONFIG_description="$PKGCONFIG_libname Library" -PKGCONFIG_description=`eval echo "$PKGCONFIG_description"` -PKGCONFIG_description=`eval echo "$PKGCONFIG_description"` -AC_MSG_RESULT($PKGCONFIG_description) - -AC_MSG_CHECKING(our pkgconfig requires) -PKGCONFIG_requires="ifelse($2,,$PACKAGE_REQUIRES,$2)" -PKGCONFIG_requires=`eval echo "$PKGCONFIG_requires"` -PKGCONFIG_requires=`eval echo "$PKGCONFIG_requires"` -AC_MSG_RESULT($PKGCONFIG_requires) - -AC_MSG_CHECKING(our pkgconfig ext libs) -PKGCONFIG_pkglibs="$PACKAGE_LIBS" -test ".$PKGCONFIG_pkglibs" != "." || PKGCONFIG_pkglibs="-l$PKGCONFIG_libname" -PKGCONFIG_libs="ifelse($3,,$PKGCONFIG_pkglibs $LIBS,$3)" -PKGCONFIG_libs=`eval echo "$PKGCONFIG_libs"` -PKGCONFIG_libs=`eval echo "$PKGCONFIG_libs"` -AC_MSG_RESULT($PKGCONFIG_libs) - -AC_MSG_CHECKING(our pkgconfig cppflags) -PKGCONFIG_cppflags="ifelse($5,,$CPPFLAGS $PACKAGE_CFLAGS,$5)" -PKGCONFIG_cppflags=`eval echo "$PKGCONFIG_cppflags"` -PKGCONFIG_cppflags=`eval echo "$PKGCONFIG_cppflags"` -AC_MSG_RESULT($PKGCONFIG_cppflags) - -AC_MSG_CHECKING(our pkgconfig ldflags) -PKGCONFIG_ldflags="ifelse($6,,$LDFLAGS $PACKAGE_LDFLAGS,$5)" -PKGCONFIG_ldflags=`eval echo "$PKGCONFIG_ldflags"` -PKGCONFIG_ldflags=`eval echo "$PKGCONFIG_ldflags"` -AC_MSG_RESULT($PKGCONFIG_ldflags) - -test ".$PKGCONFIG_generate" != "." || \ -PKGCONFIG_generate="ifelse($1,,$PKGCONFIG_libname.pc,$1)" -PKGCONFIG_generate=`eval echo "$PKGCONFIG_generate"` -PKGCONFIG_generate=`eval echo "$PKGCONFIG_generate"` -test "$pkgconfig_libfile" != "$PKGCONFIG_generate" && ( -AC_MSG_RESULT(generate the pkgconfig later... $PKGCONFIG_generate)) - -if test ".$PKGCONFIG_src_libdir" = "." ; then -PKGCONFIG_src_libdir=`pwd` -PKGCONFIG_src_libdir=`AS_DIRNAME("$PKGCONFIG_src_libdir/$PKGCONFIG_generate")` -test ! -d $PKGCONFIG_src_libdir/src || \ -PKGCONFIG_src_libdir="$PKGCONFIG_src_libdir/src" -case ".$objdir" in -*libs) PKGCONFIG_src_libdir="$PKGCONFIG_src_libdir/$objdir" ;; esac -AC_MSG_RESULT(noninstalled pkgconfig -L $PKGCONFIG_src_libdir) -fi - -if test ".$PKGCONFIG_src_headers" = "." ; then -PKGCONFIG_src_headers=`pwd` -v="$ac_top_srcdir" ; -test ".$v" != "." || v="$ax_spec_dir" -test ".$v" != "." || v="$srcdir" -case "$v" in /*) PKGCONFIG_src_headers="" ;; esac -PKGCONFIG_src_headers=`AS_DIRNAME("$PKGCONFIG_src_headers/$v/x")` -test ! -d $PKGCONFIG_src_headers/incl[]ude || \ -PKGCONFIG_src_headers="$PKGCONFIG_src_headers/incl[]ude" -AC_MSG_RESULT(noninstalled pkgconfig -I $PKGCONFIG_src_headers) -fi - - -dnl AC_CONFIG_COMMANDS crap disallows to use $PKGCONFIG_libfile here... -AC_CONFIG_COMMANDS([$ax_create_pkgconfig_generate],[ -pkgconfig_generate="$ax_create_pkgconfig_generate" -if test ! -f "$pkgconfig_generate.in" -then generate="true" -elif grep ' generated by configure ' $pkgconfig_generate.in >/dev/null -then generate="true" -else generate="false"; -fi -if $generate ; then -AC_MSG_NOTICE(creating $pkgconfig_generate.in) -cat > $pkgconfig_generate.in <conftest.sed < $pkgconfig_generate -if test ! -s $pkgconfig_generate ; then - AC_MSG_ERROR([$pkgconfig_generate is empty]) -fi ; rm conftest.sed # DONE generate $pkgconfig_generate -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.pc/'` -AC_MSG_NOTICE(creating $pkgconfig_uninstalled) -cat >conftest.sed < $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - AC_MSG_ERROR([$pkgconfig_uninstalled is empty]) -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled - pkgconfig_requires_add=`echo ${pkgconfig_requires}` -if test ".$pkgconfig_requires_add" != "." ; then - pkgconfig_requires_add="pkg-config $pkgconfig_requires_add" - else pkgconfig_requires_add=":" ; fi -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.sh/'` -AC_MSG_NOTICE(creating $pkgconfig_uninstalled) -cat >conftest.sed <Name:>for option\\; do case \"\$option\" in --list-all|--name) echo > -s>Description: *>\\;\\; --help) pkg-config --help \\; echo Buildscript Of > -s>Version: *>\\;\\; --modversion|--version) echo > -s>Requires:>\\;\\; --requires) echo $pkgconfig_requires_add> -s>Libs: *>\\;\\; --libs) echo > -s>Cflags: *>\\;\\; --cflags) echo > -/--libs)/a\\ - $pkgconfig_requires_add -/--cflags)/a\\ - $pkgconfig_requires_add\\ -;; --variable=*) eval echo '\$'\`echo \$option | sed -e 's/.*=//'\`\\ -;; --uninstalled) exit 0 \\ -;; *) ;; esac done -AXEOF -sed -f conftest.sed $pkgconfig_generate.in > $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - AC_MSG_ERROR([$pkgconfig_uninstalled is empty]) -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled -],[ -dnl AC_CONFIG_COMMANDS crap, the AS_PUSHVAR defines are invalid here... -ax_create_pkgconfig_generate="$ax_create_pkgconfig_generate" -pkgconfig_prefix='$prefix' -pkgconfig_execprefix='$exec_prefix' -pkgconfig_bindir='$bindir' -pkgconfig_libdir='$libdir' -pkgconfig_includedir='$includedir' -pkgconfig_datarootdir='$datarootdir' -pkgconfig_datadir='$datadir' -pkgconfig_sysconfdir='$sysconfdir' -pkgconfig_suffix='$ax_create_pkgconfig_suffix' -pkgconfig_package='$PACKAGE_NAME' -pkgconfig_libname='$ax_create_pkgconfig_libname' -pkgconfig_description='$ax_create_pkgconfig_description' -pkgconfig_version='$ax_create_pkgconfig_version' -pkgconfig_requires='$ax_create_pkgconfig_requires' -pkgconfig_libs='$ax_create_pkgconfig_libs' -pkgconfig_ldflags='$ax_create_pkgconfig_ldflags' -pkgconfig_cppflags='$ax_create_pkgconfig_cppflags' -pkgconfig_src_libdir='$ax_create_pkgconfig_src_libdir' -pkgconfig_src_headers='$ax_create_pkgconfig_src_headers' -])dnl -AS_VAR_POPDEF([PKGCONFIG_suffix])dnl -AS_VAR_POPDEF([PKGCONFIG_libdir])dnl -AS_VAR_POPDEF([PKGCONFIG_libfile])dnl -AS_VAR_POPDEF([PKGCONFIG_libname])dnl -AS_VAR_POPDEF([PKGCONFIG_version])dnl -AS_VAR_POPDEF([PKGCONFIG_description])dnl -AS_VAR_POPDEF([PKGCONFIG_requires])dnl -AS_VAR_POPDEF([PKGCONFIG_pkglibs])dnl -AS_VAR_POPDEF([PKGCONFIG_libs])dnl -AS_VAR_POPDEF([PKGCONFIG_ldflags])dnl -AS_VAR_POPDEF([PKGCONFIG_cppflags])dnl -AS_VAR_POPDEF([PKGCONFIG_generate])dnl -AS_VAR_POPDEF([PKGCONFIG_src_libdir])dnl -AS_VAR_POPDEF([PKGCONFIG_src_headers])dnl -]) diff --git a/cloog-0.16.3/m4/ax_gcc_archflag.m4 b/cloog-0.16.3/m4/ax_gcc_archflag.m4 deleted file mode 100644 index dedeef4..0000000 --- a/cloog-0.16.3/m4/ax_gcc_archflag.m4 +++ /dev/null @@ -1,213 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_gcc_archflag.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_GCC_ARCHFLAG([PORTABLE?], [ACTION-SUCCESS], [ACTION-FAILURE]) -# -# DESCRIPTION -# -# This macro tries to guess the "native" arch corresponding to the target -# architecture for use with gcc's -march=arch or -mtune=arch flags. If -# found, the cache variable $ax_cv_gcc_archflag is set to this flag and -# ACTION-SUCCESS is executed; otherwise $ax_cv_gcc_archflag is is set to -# "unknown" and ACTION-FAILURE is executed. The default ACTION-SUCCESS is -# to add $ax_cv_gcc_archflag to the end of $CFLAGS. -# -# PORTABLE? should be either [yes] (default) or [no]. In the former case, -# the flag is set to -mtune (or equivalent) so that the architecture is -# only used for tuning, but the instruction set used is still portable. In -# the latter case, the flag is set to -march (or equivalent) so that -# architecture-specific instructions are enabled. -# -# The user can specify --with-gcc-arch= in order to override the -# macro's choice of architecture, or --without-gcc-arch to disable this. -# -# When cross-compiling, or if $CC is not gcc, then ACTION-FAILURE is -# called unless the user specified --with-gcc-arch manually. -# -# Requires macros: AX_CHECK_COMPILER_FLAGS, AX_GCC_X86_CPUID -# -# (The main emphasis here is on recent CPUs, on the principle that doing -# high-performance computing on old hardware is uncommon.) -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_GCC_ARCHFLAG], -[AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AC_CANONICAL_HOST]) - -AC_ARG_WITH(gcc-arch, [AC_HELP_STRING([--with-gcc-arch=], [use architecture for gcc -march/-mtune, instead of guessing])], - ax_gcc_arch=$withval, ax_gcc_arch=yes) - -AC_MSG_CHECKING([for gcc architecture flag]) -AC_MSG_RESULT([]) -AC_CACHE_VAL(ax_cv_gcc_archflag, -[ -ax_cv_gcc_archflag="unknown" - -if test "$GCC" = yes; then - -if test "x$ax_gcc_arch" = xyes; then -ax_gcc_arch="" -if test "$cross_compiling" = no; then -case $host_cpu in - i[[3456]]86*|x86_64*) # use cpuid codes, in part from x86info-1.7 by D. Jones - AX_GCC_X86_CPUID(0) - AX_GCC_X86_CPUID(1) - case $ax_cv_gcc_x86_cpuid_0 in - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *5[[48]]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; - *5??:*:*:*) ax_gcc_arch=pentium ;; - *6[[3456]]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[[01]]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[[234]]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6[[9d]]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; - *6[[78b]]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6??:*:*:*) ax_gcc_arch=pentiumpro ;; - *f3[[347]]:*:*:*|*f4[1347]:*:*:*) - case $host_cpu in - x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; - *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; - esac ;; - *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; - esac ;; - *:68747541:*:*) # AMD - case $ax_cv_gcc_x86_cpuid_1 in - *5[[67]]?:*:*:*) ax_gcc_arch=k6 ;; - *5[[8d]]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; - *5[[9]]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; - *60?:*:*:*) ax_gcc_arch=k7 ;; - *6[[12]]?:*:*:*) ax_gcc_arch="athlon k7" ;; - *6[[34]]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; - *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; - *6[[68a]]?:*:*:*) - AX_GCC_X86_CPUID(0x80000006) # L2 cache size - case $ax_cv_gcc_x86_cpuid_0x80000006 in - *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256 - ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; - *) ax_gcc_arch="athlon-4 athlon k7" ;; - esac ;; - *f[[4cef8b]]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; - *f5?:*:*:*) ax_gcc_arch="opteron k8" ;; - *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; - *f??:*:*:*) ax_gcc_arch="k8" ;; - esac ;; - *:746e6543:*:*) # IDT - case $ax_cv_gcc_x86_cpuid_1 in - *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; - *58?:*:*:*) ax_gcc_arch=winchip2 ;; - *6[[78]]?:*:*:*) ax_gcc_arch=c3 ;; - *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; - esac ;; - esac - if test x"$ax_gcc_arch" = x; then # fallback - case $host_cpu in - i586*) ax_gcc_arch=pentium ;; - i686*) ax_gcc_arch=pentiumpro ;; - esac - fi - ;; - - sparc*) - AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag], [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/]) - cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` - cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters` - case $cputype in - *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; - *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; - *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; - *supersparc*|*tms390z5[[05]]*) ax_gcc_arch="supersparc v8" ;; - *hypersparc*|*rt62[[056]]*) ax_gcc_arch="hypersparc v8" ;; - *cypress*) ax_gcc_arch=cypress ;; - esac ;; - - alphaev5) ax_gcc_arch=ev5 ;; - alphaev56) ax_gcc_arch=ev56 ;; - alphapca56) ax_gcc_arch="pca56 ev56" ;; - alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; - alphaev6) ax_gcc_arch=ev6 ;; - alphaev67) ax_gcc_arch=ev67 ;; - alphaev68) ax_gcc_arch="ev68 ev67" ;; - alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; - alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; - alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; - - powerpc*) - cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` - cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'` - case $cputype in - *750*) ax_gcc_arch="750 G3" ;; - *740[[0-9]]*) ax_gcc_arch="$cputype 7400 G4" ;; - *74[[4-5]][[0-9]]*) ax_gcc_arch="$cputype 7450 G4" ;; - *74[[0-9]][[0-9]]*) ax_gcc_arch="$cputype G4" ;; - *970*) ax_gcc_arch="970 G5 power4";; - *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; - *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; - 603ev|8240) ax_gcc_arch="$cputype 603e 603";; - *) ax_gcc_arch=$cputype ;; - esac - ax_gcc_arch="$ax_gcc_arch powerpc" - ;; -esac -fi # not cross-compiling -fi # guess arch - -if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then -for arch in $ax_gcc_arch; do - if test "x[]m4_default([$1],yes)" = xyes; then # if we require portable code - flags="-mtune=$arch" - # -mcpu=$arch and m$arch generate nonportable code on every arch except - # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. - case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac - else - flags="-march=$arch -mcpu=$arch -m$arch" - fi - for flag in $flags; do - AX_CHECK_COMPILER_FLAGS($flag, [ax_cv_gcc_archflag=$flag; break]) - done - test "x$ax_cv_gcc_archflag" = xunknown || break -done -fi - -fi # $GCC=yes -]) -AC_MSG_CHECKING([for gcc architecture flag]) -AC_MSG_RESULT($ax_cv_gcc_archflag) -if test "x$ax_cv_gcc_archflag" = xunknown; then - m4_default([$3],:) -else - m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_gcc_archflag"]) -fi -]) diff --git a/cloog-0.16.3/m4/ax_gcc_x86_cpuid.m4 b/cloog-0.16.3/m4/ax_gcc_x86_cpuid.m4 deleted file mode 100644 index 5420b09..0000000 --- a/cloog-0.16.3/m4/ax_gcc_x86_cpuid.m4 +++ /dev/null @@ -1,77 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_gcc_x86_cpuid.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_GCC_X86_CPUID(OP) -# -# DESCRIPTION -# -# On Pentium and later x86 processors, with gcc or a compiler that has a -# compatible syntax for inline assembly instructions, run a small program -# that executes the cpuid instruction with input OP. This can be used to -# detect the CPU type. -# -# On output, the values of the eax, ebx, ecx, and edx registers are stored -# as hexadecimal strings as "eax:ebx:ecx:edx" in the cache variable -# ax_cv_gcc_x86_cpuid_OP. -# -# If the cpuid instruction fails (because you are running a -# cross-compiler, or because you are not using gcc, or because you are on -# a processor that doesn't have this instruction), ax_cv_gcc_x86_cpuid_OP -# is set to the string "unknown". -# -# This macro mainly exists to be used in AX_GCC_ARCHFLAG. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_GCC_X86_CPUID], -[AC_REQUIRE([AC_PROG_CC]) -AC_LANG_PUSH([C]) -AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1, - [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], [ - int op = $1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; -])], - [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid], - [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid], - [ax_cv_gcc_x86_cpuid_$1=unknown])]) -AC_LANG_POP([C]) -]) diff --git a/cloog-0.16.3/m4/ax_submodule.m4 b/cloog-0.16.3/m4/ax_submodule.m4 deleted file mode 100644 index 57e3a56..0000000 --- a/cloog-0.16.3/m4/ax_submodule.m4 +++ /dev/null @@ -1,63 +0,0 @@ -AC_DEFUN([AX_SUBMODULE], -[ - -AC_ARG_WITH($1, - [AS_HELP_STRING([--with-$1=$2], - [Which $1 to use])]) -case "system" in -$2) - AC_ARG_WITH($1_prefix, - [AS_HELP_STRING([--with-$1-prefix=DIR], - [Prefix of $1 installation])]) - AC_ARG_WITH($1_exec_prefix, - [AS_HELP_STRING([--with-$1-exec-prefix=DIR], - [Exec prefix of $1 installation])]) -esac -case "build" in -$2) - AC_ARG_WITH($1_builddir, - [AS_HELP_STRING([--with-$1-builddir=DIR], - [Location of $1 builddir])]) -esac -if test "x$with_$1_prefix" != "x" -a "x$with_$1_exec_prefix" = "x"; then - with_$1_exec_prefix=$with_$1_prefix -fi -if test "x$with_$1_prefix" != "x" -o "x$with_$1_exec_prefix" != "x"; then - if test "x$with_$1" != "x" -a "x$with_$1" != "xsystem"; then - AC_MSG_ERROR([Setting $with_$1_prefix implies use of system $1]) - fi - with_$1="system" -fi -if test "x$with_$1_builddir" != "x"; then - if test "x$with_$1" != "x" -a "x$with_$1" != "xbuild"; then - AC_MSG_ERROR([Setting $with_$1_builddir implies use of build $1]) - fi - with_$1="build" - $1_srcdir=`echo @abs_srcdir@ | $with_$1_builddir/config.status --file=-` - AC_MSG_NOTICE($1 sources in $$1_srcdir) -fi -case "$with_$1" in -$2) - ;; -*) - if test -d $srcdir/.git -a \ - -d $srcdir/$1 -a \ - ! -d $srcdir/$1/.git; then - AC_MSG_WARN( -[git repo detected, but submodule $1 not initialized]) - AC_MSG_WARN([You may want to run]) - AC_MSG_WARN([ git submodule init]) - AC_MSG_WARN([ git submodule update]) - AC_MSG_WARN([ sh autogen.sh]) - fi - if test -f $srcdir/$1/configure -a "$3" != "no"; then - with_$1="bundled" - else - with_$1="$3" - fi - ;; -esac -AC_MSG_CHECKING([which $1 to use]) -AC_MSG_RESULT($with_$1) - -]) diff --git a/cloog-0.16.3/m4/libtool.m4 b/cloog-0.16.3/m4/libtool.m4 deleted file mode 100644 index 22924a8..0000000 --- a/cloog-0.16.3/m4/libtool.m4 +++ /dev/null @@ -1,7437 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -]) - -# serial 57 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl - -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PREPARE_SED_QUOTE_VARS -# -------------------------- -# Define a few sed substitution that help us do robust quoting. -m4_defun([_LT_PREPARE_SED_QUOTE_VARS], -[# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' -]) - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from `configure', and `config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" -])# _LT_PROG_LTMAIN - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$[]1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -_LT_OUTPUT_LIBTOOL_INIT -]) - -# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) -# ------------------------------------ -# Generate a child script FILE with all initialization necessary to -# reuse the environment learned by the parent script, and make the -# file executable. If COMMENT is supplied, it is inserted after the -# `#!' sequence but before initialization text begins. After this -# macro, additional text can be appended to FILE to form the body of -# the child script. The macro ends with non-zero status if the -# file could not be fully written (such as if the disk is full). -m4_ifdef([AS_INIT_GENERATED], -[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], -[m4_defun([_LT_GENERATED_FILE_INIT], -[m4_require([AS_PREPARE])]dnl -[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl -[lt_write_fail=0 -cat >$1 <<_ASEOF || lt_write_fail=1 -#! $SHELL -# Generated by $as_me. -$2 -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$1 <<\_ASEOF || lt_write_fail=1 -AS_SHELL_SANITIZE -_AS_PREPARE -exec AS_MESSAGE_FD>&1 -_ASEOF -test $lt_write_fail = 0 && chmod +x $1[]dnl -m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], -[# Run this file to recreate a libtool stub with the current configuration.]) - -cat >>"$CONFIG_LT" <<\_LTEOF -lt_cl_silent=false -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to ." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -lt_cl_success=: -test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" -exec AS_MESSAGE_LOG_FD>/dev/null -$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false -exec AS_MESSAGE_LOG_FD>>config.log -$lt_cl_success || AS_EXIT(1) -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -_LT_COPYING -_LT_LIBTOOL_TAGS - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_XSI_SHELLFNS - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) -dnl AC_DEFUN([AC_LIBTOOL_RC], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], - [lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD - echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD - $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD - echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD - $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES -# -------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX -# ----------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[m4_divert_text([M4SH-INIT], [$1 -])])# _LT_SHELL_INIT - - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Find how we can fake an echo command that does not interpret backslash. -# In particular, with Autoconf 2.60 or later we add some code to the start -# of the generated configure script which will find a shell with a builtin -# printf (which we can use as an echo command). -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -AC_MSG_CHECKING([how to print strings]) -# Test print first, because it will be a builtin if present. -if test "X`print -r -- -n 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$[]1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -case "$ECHO" in - printf*) AC_MSG_RESULT([printf]) ;; - print*) AC_MSG_RESULT([print -r]) ;; - *) AC_MSG_RESULT([cat]) ;; -esac - -m4_ifdef([_AS_DETECT_SUGGESTED], -[_AS_DETECT_SUGGESTED([ - test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test "X`printf %s $ECHO`" = "X$ECHO" \ - || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) - -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" -])# _LT_ENABLE_LOCK - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[AC_CHECK_TOOL(AR, ar, false) -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1]) - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -_LT_DECL([], [lock_old_archive_extraction], [0], - [Whether to use a lock for old archive extraction]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -void fnord () __attribute__((visibility("default"))); -#endif - -void fnord () { int i=42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[[3-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], - [lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [lt_cv_shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - ]) - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [install_override_mode], [1], - [Permission mode override for installation of shared libraries]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program which can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program which can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PROG_ECHO_BACKSLASH])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method == "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; - *) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; - esac - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ F* | *Sun*Fortran*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac -AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; - *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - m4_if($1, [], [ - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - _LT_LINKER_OPTION([if $CC understands -b], - _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], - [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE(int foo(void) {}, - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - ) - LDFLAGS="$save_LDFLAGS" - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_CACHE_CHECK([whether -lc should be explicitly linked in], - [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), - [$RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - ]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], - [[If ld is used when linking, flag to hardcode $libdir into a binary - during linking. This must work even if $libdir does not exist]]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [fix_srcfile_path], [1], - [Fix the shell variable $srcfile for the compiler]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report which library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC="$lt_save_CC" -])# _LT_LANG_C_CONFIG - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - gnu*) - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ - '"$_LT_TAGVAR(old_archive_cmds, $1)" - _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ - '"$_LT_TAGVAR(reload_cmds, $1)" - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -]) -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_LANG_PUSH(Fortran 77) -if test -z "$F77" || test "X$F77" = "Xno"; then - _lt_disable_F77=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${F77-"f77"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_F77" != yes - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_LANG_PUSH(Fortran) - -if test -z "$FC" || test "X$FC" = "Xno"; then - _lt_disable_FC=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${FC-"f95"} - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_FC" != yes - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC="$lt_save_CC" -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC="$lt_save_CC" -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PROG_XSI_SHELLFNS -# --------------------- -# Bourne and XSI compatible variants of some useful shell functions. -m4_defun([_LT_PROG_XSI_SHELLFNS], -[case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $[*] )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} - -dnl func_dirname_and_basename -dnl A portable version of this function is already defined in general.m4sh -dnl so there is no need for it here. - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[[^=]]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[[^.]]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$[@]"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]+=\$[2]" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]=\$$[1]\$[2]" -} - -_LT_EOF - ;; - esac -]) diff --git a/cloog-0.16.3/m4/ltoptions.m4 b/cloog-0.16.3/m4/ltoptions.m4 deleted file mode 100644 index 17cfd51..0000000 --- a/cloog-0.16.3/m4/ltoptions.m4 +++ /dev/null @@ -1,369 +0,0 @@ -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 7 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - ]) -])# _LT_SET_OPTIONS - - -## --------------------------------- ## -## Macros to handle LT_INIT options. ## -## --------------------------------- ## - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [1], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' -# LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/cloog-0.16.3/m4/ltsugar.m4 b/cloog-0.16.3/m4/ltsugar.m4 deleted file mode 100644 index 9000a05..0000000 --- a/cloog-0.16.3/m4/ltsugar.m4 +++ /dev/null @@ -1,123 +0,0 @@ -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltsugar.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) - - -# lt_join(SEP, ARG1, [ARG2...]) -# ----------------------------- -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their -# associated separator. -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier -# versions in m4sugar had bugs. -m4_define([lt_join], -[m4_if([$#], [1], [], - [$#], [2], [[$2]], - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) -m4_define([_lt_join], -[m4_if([$#$2], [2], [], - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) - - -# lt_car(LIST) -# lt_cdr(LIST) -# ------------ -# Manipulate m4 lists. -# These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. -m4_define([lt_car], [[$1]]) -m4_define([lt_cdr], -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], - [$#], 1, [], - [m4_dquote(m4_shift($@))])]) -m4_define([lt_unquote], $1) - - -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) -# ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. -# Note that neither SEPARATOR nor STRING are expanded; they are appended -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). -# No SEPARATOR is output if MACRO-NAME was previously undefined (different -# than defined and empty). -# -# This macro is needed until we can rely on Autoconf 2.62, since earlier -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. -m4_define([lt_append], -[m4_define([$1], - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) - - - -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) -# ---------------------------------------------------------- -# Produce a SEP delimited list of all paired combinations of elements of -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list -# has the form PREFIXmINFIXSUFFIXn. -# Needed until we can rely on m4_combine added in Autoconf 2.62. -m4_define([lt_combine], -[m4_if(m4_eval([$# > 3]), [1], - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl -[[m4_foreach([_Lt_prefix], [$2], - [m4_foreach([_Lt_suffix], - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) - - -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) -# ----------------------------------------------------------------------- -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. -m4_define([lt_if_append_uniq], -[m4_ifdef([$1], - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], - [lt_append([$1], [$2], [$3])$4], - [$5])], - [lt_append([$1], [$2], [$3])$4])]) - - -# lt_dict_add(DICT, KEY, VALUE) -# ----------------------------- -m4_define([lt_dict_add], -[m4_define([$1($2)], [$3])]) - - -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) -# -------------------------------------------- -m4_define([lt_dict_add_subkey], -[m4_define([$1($2:$3)], [$4])]) - - -# lt_dict_fetch(DICT, KEY, [SUBKEY]) -# ---------------------------------- -m4_define([lt_dict_fetch], -[m4_ifval([$3], - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) - - -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) -# ----------------------------------------------------------------- -m4_define([lt_if_dict_fetch], -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], - [$5], - [$6])]) - - -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) -# -------------------------------------------------------------- -m4_define([lt_dict_filter], -[m4_if([$5], [], [], - [lt_join(m4_quote(m4_default([$4], [[, ]])), - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl -]) diff --git a/cloog-0.16.3/m4/ltversion.m4 b/cloog-0.16.3/m4/ltversion.m4 deleted file mode 100644 index 2e8f929..0000000 --- a/cloog-0.16.3/m4/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# Generated from ltversion.in. - -# serial 3169 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.2.8]) -m4_define([LT_PACKAGE_REVISION], [1.3169]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.2.8' -macro_revision='1.3169' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) diff --git a/cloog-0.16.3/m4/lt~obsolete.m4 b/cloog-0.16.3/m4/lt~obsolete.m4 deleted file mode 100644 index c573da9..0000000 --- a/cloog-0.16.3/m4/lt~obsolete.m4 +++ /dev/null @@ -1,98 +0,0 @@ -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004. -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 5 lt~obsolete.m4 - -# These exist entirely to fool aclocal when bootstrapping libtool. -# -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) -# which have later been changed to m4_define as they aren't part of the -# exported API, or moved to Autoconf or Automake where they belong. -# -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -# using a macro with the same name in our local m4/libtool.m4 it'll -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -# and doesn't know about Autoconf macros at all.) -# -# So we provide this file, which has a silly filename so it's always -# included after everything else. This provides aclocal with the -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -# because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -# -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -# Yes, that means every name once taken will need to remain here until -# we give up compatibility with versions before 1.7, at which point -# we need to keep only those names which we still refer to. - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) - -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) -m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) -m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) -m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) -m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) -m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) -m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/cloog-0.16.3/source/block.c b/cloog-0.16.3/source/block.c deleted file mode 100644 index 08fe807..0000000 --- a/cloog-0.16.3/source/block.c +++ /dev/null @@ -1,404 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** block.c ** - **-------------------------------------------------------------------** - ** First version: june 11th 2005 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ -/* CAUTION: the english used for comments is probably the worst you ever read, - * please feel free to correct and improve it ! - */ - -# include -# include -# include "../include/cloog/cloog.h" - - -/****************************************************************************** - * Memory leaks hunting * - ******************************************************************************/ - - -/** - * These functions and global variables are devoted to memory leaks hunting: we - * want to know at each moment how many CloogBlock structures had been allocated - * (cloog_block_allocated) and how many had been freed (cloog_block_freed). - * Each time a CloogBlock structure is allocated, a call to the function - * cloog_block_leak_up() must be carried out, and respectively - * cloog_block_leak_down() when a CloogBlock structure is freed. The special - * variable cloog_block_max gives the maximal number of CloogBlock structures - * simultaneously alive (i.e. allocated and non-freed) in memory. - * - June 11th 2005: first version. - */ - - -static void cloog_block_leak_up(CloogState *state) -{ - state->block_allocated++; - if ((state->block_allocated - state->block_freed) > state->block_max) - state->block_max = state->block_allocated - state->block_freed; -} - - -static void cloog_block_leak_down(CloogState *state) -{ - state->block_freed++; -} - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ - - -/** - * cloog_domain_print_structure : - * this function is a human-friendly way to display the CloogDomain data - * structure, it includes an indentation level (level) in order to work with - * others print_structure functions. - * - June 16th 2005: first version. - */ -void cloog_block_print_structure(FILE * file, CloogBlock * block, int level) -{ int i ; - - /* Go to the right level. */ - for (i=0; istatement,level+1) ; - - /* A blank line. */ - for (i=0; inb_scaldims == 0) - fprintf(file,"No scalar dimensions\n") ; - else - { fprintf(file,"Scalar dimensions (%d):",block->nb_scaldims) ; - for (i = 0; i < block->nb_scaldims; i++) { - fprintf(file, " "); - cloog_int_print(file, block->scaldims[i]); - } - fprintf(file,"\n") ; - } - - /* A blank line. */ - for (i=0; idepth) ; - - /* A blank line. */ - for (i=0; iblock,1) ; - blocklist = blocklist->next ; - i++ ; - } -} - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ - - -/** - * cloog_block_free function: - * This function frees the allocated memory for a CloogStatement structure. - * - June 11th 2005: first version. - * - June 30th 2005: scaldims field management. - */ -void cloog_block_free(CloogBlock * block) -{ int i ; - - if (block != NULL) - { block->references -- ; - - if (block->references == 0) { - cloog_block_leak_down(block->state); - if (block->scaldims != NULL) - { for (i=0;inb_scaldims;i++) - cloog_int_clear(block->scaldims[i]); - - free(block->scaldims) ; - } - if (block->statement) - cloog_statement_free(block->statement); - free(block) ; - } - } -} - - -/** - * cloog_block_list_free function: - * This function frees the allocated memory for a CloogBlockList structure. - * - June 11th 2005: first version. - */ -void cloog_block_list_free(CloogBlockList * blocklist) -{ CloogBlockList * temp ; - - while (blocklist != NULL) - { temp = blocklist->next ; - cloog_block_free(blocklist->block) ; - free(blocklist) ; - blocklist = temp ; - } -} - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - -/** - * cloog_block_malloc function: - * This function allocates the memory space for a CloogBlock structure and - * sets its fields with default values. Then it returns a pointer to the - * allocated space. - * - November 21th 2005: first version. - */ -CloogBlock *cloog_block_malloc(CloogState *state) -{ CloogBlock * block ; - - /* Memory allocation for the CloogBlock structure. */ - block = (CloogBlock *)malloc(sizeof(CloogBlock)) ; - if (block == NULL) - cloog_die("memory overflow.\n"); - cloog_block_leak_up(state); - - /* We set the various fields with default values. */ - block->state = state; - block->statement = NULL ; - block->nb_scaldims = 0 ; - block->scaldims = NULL ; - block->depth = 0 ; - block->references = 1 ; - block->usr = NULL; - - return block ; -} - - -/** - * cloog_block_alloc function: - * This function allocates the memory space for a CloogBlock structure and - * sets its fields with those given as input. Then it returns a pointer to the - * allocated space. The two parameters nb_scaldims and scaldims are for internal - * service, put to respectively 0 and NULL if you don't know what they are - * useful for ! - * - statement is the statement list of the block, - * - scattering is the scattering function for the block (NULL if unsure !), - * - nb_scaldims is the number of scalar dimensions (0 if unsure !), - * - scaldims is the array with the scalar dimensions values (NULL if unsure !), - * - depth is the original block depth (the number of outer loops). - ** - * - June 11th 2005: first version. - * - June 30th 2005: addition of the nb_scaldims and scaldims parameters. - * - November 21th 2005: use of cloog_block_malloc. - */ -CloogBlock *cloog_block_alloc(CloogStatement *statement, int nb_scaldims, - cloog_int_t *scaldims, int depth) -{ CloogBlock * block ; - - /* Block allocation. */ - block = cloog_block_malloc(statement->state); - - block->statement = statement ; - block->nb_scaldims = nb_scaldims ; - block->scaldims = scaldims ; - block->depth = depth ; - block->references = 1 ; - - return block ; -} - - -/** - * cloog_block_list_malloc function: - * This function allocates the memory space for a CloogBlockList structure and - * sets its fields with default values. Then it returns a pointer to the - * allocated space. - * - November 21th 2005: first version. - */ -CloogBlockList * cloog_block_list_malloc() -{ CloogBlockList * blocklist ; - - /* Memory allocation for the CloogBlock structure. */ - blocklist = (CloogBlockList *)malloc(sizeof(CloogBlockList)) ; - if (blocklist == NULL) - cloog_die("memory overflow.\n"); - - /* We set the various fields with default values. */ - blocklist->block = NULL ; - blocklist->next = NULL ; - - return blocklist ; -} - - -/** - * cloog_block_list_alloc function: - * This function allocates the memory space for a CloogBlockList structure and - * sets its fields with those given as input. Then it returns a pointer to the - * allocated space. - * - block is the block element of the list node, - ** - * - June 11th 2005: first version. - * - November 21th 2005: use of cloog_block_list_malloc. - */ -CloogBlockList * cloog_block_list_alloc(CloogBlock * block) -{ CloogBlockList * blocklist ; - - /* Block list node allocation. */ - blocklist = cloog_block_list_malloc() ; - - blocklist->block = block ; - blocklist->block->references ++ ; /* The block has a new reference to it. */ - blocklist->next = NULL ; - - return blocklist ; -} - - -/** - * cloog_block_copy function: - * This function returns a copy of a CloogBlock structure 'block'. To save - * memory this is not a memory copy but we increment a counter of active - * references inside the structure, then return a pointer to that structure. - */ -CloogBlock * cloog_block_copy(CloogBlock * block) -{ if (block == NULL) - return NULL ; - - block->references ++ ; - return block ; -} - - -/** - * cloog_block_merge function: - * this function adds at the end of the statement list of the block 'block', - * the statement list of the block 'merged'. Then the CloogBlock structure - * of 'merged' is freed (obviously not its statement list that is now - * included in 'block'). - * - June 11th 2005: first version. - */ -void cloog_block_merge(CloogBlock * block, CloogBlock * merged) -{ CloogStatement * statement ; - - if ((block == NULL) || (merged == NULL)) - return ; - - if (block->statement != NULL) - { statement = block->statement ; - - while (statement->next != NULL) - statement = statement->next ; - - statement->next = merged->statement ; - } - else - block->statement = merged->statement ; - - merged->statement = NULL; - cloog_block_free(merged); -} - - - - - - - - - - diff --git a/cloog-0.16.3/source/clast.c b/cloog-0.16.3/source/clast.c deleted file mode 100644 index 011c046..0000000 --- a/cloog-0.16.3/source/clast.c +++ /dev/null @@ -1,1895 +0,0 @@ -#include -#include -#include -#include "../include/cloog/cloog.h" - -#define ALLOC(type) (type*)malloc(sizeof(type)) -#define ALLOCN(type,n) (type*)malloc((n)*sizeof(type)) - -/** - * CloogInfos structure: - * this structure contains all the informations necessary for pretty printing, - * they come from the original CloogProgram structure (language, names), from - * genereral options (options) or are built only for pretty printing (stride). - * This structure is mainly there to reduce the number of function parameters, - * since most pprint.c functions need most of its field. - */ -struct clooginfos { - CloogState *state; /**< State. */ - CloogStride **stride; - int stride_level; /**< Number of valid entries in stride array. */ - int nb_scattdims ; /**< Scattering dimension number. */ - int * scaldims ; /**< Boolean array saying whether a given - * scattering dimension is scalar or not. - */ - CloogNames * names ; /**< Names of iterators and parameters. */ - CloogOptions * options ; /**< Options on CLooG's behaviour. */ - CloogEqualities *equal; /**< Matrix of equalities. */ -} ; - -typedef struct clooginfos CloogInfos ; - -static int clast_expr_cmp(struct clast_expr *e1, struct clast_expr *e2); -static int clast_term_cmp(struct clast_term *t1, struct clast_term *t2); -static int clast_binary_cmp(struct clast_binary *b1, struct clast_binary *b2); -static int clast_reduction_cmp(struct clast_reduction *r1, - struct clast_reduction *r2); - -static struct clast_expr *clast_expr_copy(struct clast_expr *e); - -static int clast_equal_add(CloogEqualities *equal, - CloogConstraintSet *constraints, - int level, CloogConstraint *constraint, - CloogInfos *infos); - -static struct clast_stmt *clast_equal(int level, CloogInfos *infos); -static struct clast_expr *clast_minmax(CloogConstraintSet *constraints, - int level, int max, int guard, - int lower_bound, int no_earlier, - CloogInfos *infos); -static void insert_guard(CloogConstraintSet *constraints, int level, - struct clast_stmt ***next, CloogInfos *infos); -static int insert_modulo_guard(CloogConstraint *upper, - CloogConstraint *lower, int level, - struct clast_stmt ***next, CloogInfos *infos); -static int insert_equation(CloogDomain *domain, CloogConstraint *upper, - CloogConstraint *lower, int level, - struct clast_stmt ***next, CloogInfos *infos); -static int insert_for(CloogDomain *domain, CloogConstraintSet *constraints, - int level, int otl, struct clast_stmt ***next, - CloogInfos *infos); -static void insert_block(CloogDomain *domain, CloogBlock *block, int level, - struct clast_stmt ***next, CloogInfos *infos); -static void insert_loop(CloogLoop * loop, int level, - struct clast_stmt ***next, CloogInfos *infos); - - -struct clast_name *new_clast_name(const char *name) -{ - struct clast_name *n = malloc(sizeof(struct clast_name)); - n->expr.type = clast_expr_name; - n->name = name; - return n; -} - -struct clast_term *new_clast_term(cloog_int_t c, struct clast_expr *v) -{ - struct clast_term *t = malloc(sizeof(struct clast_term)); - t->expr.type = clast_expr_term; - cloog_int_init(t->val); - cloog_int_set(t->val, c); - t->var = v; - return t; -} - -struct clast_binary *new_clast_binary(enum clast_bin_type t, - struct clast_expr *lhs, cloog_int_t rhs) -{ - struct clast_binary *b = malloc(sizeof(struct clast_binary)); - b->expr.type = clast_expr_bin; - b->type = t; - b->LHS = lhs; - cloog_int_init(b->RHS); - cloog_int_set(b->RHS, rhs); - return b; -} - -struct clast_reduction *new_clast_reduction(enum clast_red_type t, int n) -{ - int i; - struct clast_reduction *r; - r = malloc(sizeof(struct clast_reduction)+(n-1)*sizeof(struct clast_expr *)); - r->expr.type = clast_expr_red; - r->type = t; - r->n = n; - for (i = 0; i < n; ++i) - r->elts[i] = NULL; - return r; -} - -static void free_clast_root(struct clast_stmt *s); - -const struct clast_stmt_op stmt_root = { free_clast_root }; - -static void free_clast_root(struct clast_stmt *s) -{ - struct clast_root *r = (struct clast_root *)s; - assert(CLAST_STMT_IS_A(s, stmt_root)); - cloog_names_free(r->names); - free(r); -} - -struct clast_root *new_clast_root(CloogNames *names) -{ - struct clast_root *r = malloc(sizeof(struct clast_root)); - r->stmt.op = &stmt_root; - r->stmt.next = NULL; - r->names = cloog_names_copy(names); - return r; -} - -static void free_clast_assignment(struct clast_stmt *s); - -const struct clast_stmt_op stmt_ass = { free_clast_assignment }; - -static void free_clast_assignment(struct clast_stmt *s) -{ - struct clast_assignment *a = (struct clast_assignment *)s; - assert(CLAST_STMT_IS_A(s, stmt_ass)); - free_clast_expr(a->RHS); - free(a); -} - -struct clast_assignment *new_clast_assignment(const char *lhs, - struct clast_expr *rhs) -{ - struct clast_assignment *a = malloc(sizeof(struct clast_assignment)); - a->stmt.op = &stmt_ass; - a->stmt.next = NULL; - a->LHS = lhs; - a->RHS = rhs; - return a; -} - -static void free_clast_user_stmt(struct clast_stmt *s); - -const struct clast_stmt_op stmt_user = { free_clast_user_stmt }; - -static void free_clast_user_stmt(struct clast_stmt *s) -{ - struct clast_user_stmt *u = (struct clast_user_stmt *)s; - assert(CLAST_STMT_IS_A(s, stmt_user)); - cloog_domain_free(u->domain); - cloog_statement_free(u->statement); - cloog_clast_free(u->substitutions); - free(u); -} - -struct clast_user_stmt *new_clast_user_stmt(CloogDomain *domain, - CloogStatement *stmt, struct clast_stmt *subs) -{ - struct clast_user_stmt *u = malloc(sizeof(struct clast_user_stmt)); - u->stmt.op = &stmt_user; - u->stmt.next = NULL; - u->domain = cloog_domain_copy(domain); - u->statement = cloog_statement_copy(stmt); - u->substitutions = subs; - return u; -} - -static void free_clast_block(struct clast_stmt *b); - -const struct clast_stmt_op stmt_block = { free_clast_block }; - -static void free_clast_block(struct clast_stmt *s) -{ - struct clast_block *b = (struct clast_block *)s; - assert(CLAST_STMT_IS_A(s, stmt_block)); - cloog_clast_free(b->body); - free(b); -} - -struct clast_block *new_clast_block() -{ - struct clast_block *b = malloc(sizeof(struct clast_block)); - b->stmt.op = &stmt_block; - b->stmt.next = NULL; - b->body = NULL; - return b; -} - -static void free_clast_for(struct clast_stmt *s); - -const struct clast_stmt_op stmt_for = { free_clast_for }; - -static void free_clast_for(struct clast_stmt *s) -{ - struct clast_for *f = (struct clast_for *)s; - assert(CLAST_STMT_IS_A(s, stmt_for)); - cloog_domain_free(f->domain); - free_clast_expr(f->LB); - free_clast_expr(f->UB); - cloog_int_clear(f->stride); - cloog_clast_free(f->body); - free(f); -} - -struct clast_for *new_clast_for(CloogDomain *domain, const char *it, - struct clast_expr *LB, struct clast_expr *UB, - CloogStride *stride) -{ - struct clast_for *f = malloc(sizeof(struct clast_for)); - f->stmt.op = &stmt_for; - f->stmt.next = NULL; - f->domain = cloog_domain_copy(domain); - f->iterator = it; - f->LB = LB; - f->UB = UB; - f->body = NULL; - cloog_int_init(f->stride); - if (stride) - cloog_int_set(f->stride, stride->stride); - else - cloog_int_set_si(f->stride, 1); - return f; -} - -static void free_clast_guard(struct clast_stmt *s); - -const struct clast_stmt_op stmt_guard = { free_clast_guard }; - -static void free_clast_guard(struct clast_stmt *s) -{ - int i; - struct clast_guard *g = (struct clast_guard *)s; - assert(CLAST_STMT_IS_A(s, stmt_guard)); - cloog_clast_free(g->then); - for (i = 0; i < g->n; ++i) { - free_clast_expr(g->eq[i].LHS); - free_clast_expr(g->eq[i].RHS); - } - free(g); -} - -struct clast_guard *new_clast_guard(int n) -{ - int i; - struct clast_guard *g = malloc(sizeof(struct clast_guard) + - (n-1) * sizeof(struct clast_equation)); - g->stmt.op = &stmt_guard; - g->stmt.next = NULL; - g->then = NULL; - g->n = n; - for (i = 0; i < n; ++i) { - g->eq[i].LHS = NULL; - g->eq[i].RHS = NULL; - } - return g; -} - -void free_clast_name(struct clast_name *n) -{ - free(n); -} - -void free_clast_term(struct clast_term *t) -{ - cloog_int_clear(t->val); - free_clast_expr(t->var); - free(t); -} - -void free_clast_binary(struct clast_binary *b) -{ - cloog_int_clear(b->RHS); - free_clast_expr(b->LHS); - free(b); -} - -void free_clast_reduction(struct clast_reduction *r) -{ - int i; - for (i = 0; i < r->n; ++i) - free_clast_expr(r->elts[i]); - free(r); -} - -void free_clast_expr(struct clast_expr *e) -{ - if (!e) - return; - switch (e->type) { - case clast_expr_name: - free_clast_name((struct clast_name*) e); - break; - case clast_expr_term: - free_clast_term((struct clast_term*) e); - break; - case clast_expr_red: - free_clast_reduction((struct clast_reduction*) e); - break; - case clast_expr_bin: - free_clast_binary((struct clast_binary*) e); - break; - default: - assert(0); - } -} - -void free_clast_stmt(struct clast_stmt *s) -{ - assert(s->op); - assert(s->op->free); - s->op->free(s); -} - -void cloog_clast_free(struct clast_stmt *s) -{ - struct clast_stmt *next; - while (s) { - next = s->next; - free_clast_stmt(s); - s = next; - } -} - -static int clast_name_cmp(struct clast_name *n1, struct clast_name *n2) -{ - return n1->name == n2->name ? 0 : strcmp(n1->name, n2->name); -} - -static int clast_term_cmp(struct clast_term *t1, struct clast_term *t2) -{ - int c; - if (!t1->var && t2->var) - return -1; - if (t1->var && !t2->var) - return 1; - c = clast_expr_cmp(t1->var, t2->var); - if (c) - return c; - return cloog_int_cmp(t1->val, t2->val); -} - -static int clast_binary_cmp(struct clast_binary *b1, struct clast_binary *b2) -{ - int c; - - if (b1->type != b2->type) - return b1->type - b2->type; - if ((c = cloog_int_cmp(b1->RHS, b2->RHS))) - return c; - return clast_expr_cmp(b1->LHS, b2->LHS); -} - -static int clast_reduction_cmp(struct clast_reduction *r1, struct clast_reduction *r2) -{ - int i; - int c; - - if (r1->n == 1 && r2->n == 1) - return clast_expr_cmp(r1->elts[0], r2->elts[0]); - if (r1->type != r2->type) - return r1->type - r2->type; - if (r1->n != r2->n) - return r1->n - r2->n; - for (i = 0; i < r1->n; ++i) - if ((c = clast_expr_cmp(r1->elts[i], r2->elts[i]))) - return c; - return 0; -} - -static int clast_expr_cmp(struct clast_expr *e1, struct clast_expr *e2) -{ - if (!e1 && !e2) - return 0; - if (!e1) - return -1; - if (!e2) - return 1; - if (e1->type != e2->type) - return e1->type - e2->type; - switch (e1->type) { - case clast_expr_name: - return clast_name_cmp((struct clast_name*) e1, - (struct clast_name*) e2); - case clast_expr_term: - return clast_term_cmp((struct clast_term*) e1, - (struct clast_term*) e2); - case clast_expr_bin: - return clast_binary_cmp((struct clast_binary*) e1, - (struct clast_binary*) e2); - case clast_expr_red: - return clast_reduction_cmp((struct clast_reduction*) e1, - (struct clast_reduction*) e2); - default: - assert(0); - } -} - -int clast_expr_equal(struct clast_expr *e1, struct clast_expr *e2) -{ - return clast_expr_cmp(e1, e2) == 0; -} - -/** - * Return 1 is both expressions are constant terms and e1 is bigger than e2. - */ -int clast_expr_is_bigger_constant(struct clast_expr *e1, struct clast_expr *e2) -{ - struct clast_term *t1, *t2; - struct clast_reduction *r; - - if (!e1 || !e2) - return 0; - if (e1->type == clast_expr_red) { - r = (struct clast_reduction *)e1; - return r->n == 1 && clast_expr_is_bigger_constant(r->elts[0], e2); - } - if (e2->type == clast_expr_red) { - r = (struct clast_reduction *)e2; - return r->n == 1 && clast_expr_is_bigger_constant(e1, r->elts[0]); - } - if (e1->type != clast_expr_term || e2->type != clast_expr_term) - return 0; - t1 = (struct clast_term *)e1; - t2 = (struct clast_term *)e2; - if (t1->var || t2->var) - return 0; - return cloog_int_gt(t1->val, t2->val); -} - -static int qsort_expr_cmp(const void *p1, const void *p2) -{ - return clast_expr_cmp(*(struct clast_expr **)p1, *(struct clast_expr **)p2); -} - -static void clast_reduction_sort(struct clast_reduction *r) -{ - qsort(&r->elts[0], r->n, sizeof(struct clast_expr *), qsort_expr_cmp); -} - -static int qsort_eq_cmp(const void *p1, const void *p2) -{ - struct clast_equation *eq1 = (struct clast_equation *)p1; - struct clast_equation *eq2 = (struct clast_equation *)p2; - int cmp; - - cmp = clast_expr_cmp(eq1->LHS, eq2->LHS); - if (cmp) - return cmp; - - cmp = clast_expr_cmp(eq1->RHS, eq2->RHS); - if (cmp) - return cmp; - - return eq1->sign - eq2->sign; -} - -/** - * Sort equations in a clast_guard. - */ -static void clast_guard_sort(struct clast_guard *g) -{ - qsort(&g->eq[0], g->n, sizeof(struct clast_equation), qsort_eq_cmp); -} - - -/** - * Construct a (deep) copy of an expression clast. - */ -static struct clast_expr *clast_expr_copy(struct clast_expr *e) -{ - if (!e) - return NULL; - switch (e->type) { - case clast_expr_name: { - struct clast_name* n = (struct clast_name*) e; - return &new_clast_name(n->name)->expr; - } - case clast_expr_term: { - struct clast_term* t = (struct clast_term*) e; - return &new_clast_term(t->val, clast_expr_copy(t->var))->expr; - } - case clast_expr_red: { - int i; - struct clast_reduction *r = (struct clast_reduction*) e; - struct clast_reduction *r2 = new_clast_reduction(r->type, r->n); - for (i = 0; i < r->n; ++i) - r2->elts[i] = clast_expr_copy(r->elts[i]); - return &r2->expr; - } - case clast_expr_bin: { - struct clast_binary *b = (struct clast_binary*) e; - return &new_clast_binary(b->type, clast_expr_copy(b->LHS), b->RHS)->expr; - } - default: - assert(0); - } -} - - -/****************************************************************************** - * Equalities spreading functions * - ******************************************************************************/ - - -/** - * clast_equal_allow function: - * This function checks whether the options allow us to spread the equality or - * not. It returns 1 if so, 0 otherwise. - * - equal is the matrix of equalities, - * - level is the column number in equal of the element which is 'equal to', - * - line is the line number in equal of the constraint we want to study, - * - the infos structure gives the user all options on code printing and more. - ** - * - October 27th 2005: first version (extracted from old pprint_equal_add). - */ -static int clast_equal_allow(CloogEqualities *equal, int level, int line, - CloogInfos *infos) -{ - if (level < infos->options->fsp) - return 0 ; - - if ((cloog_equal_type(equal, level) == EQTYPE_EXAFFINE) && - !infos->options->esp) - return 0 ; - - return 1 ; -} - - -/** - * clast_equal_add function: - * This function updates the row (level-1) of the equality matrix (equal) with - * the row that corresponds to the row (line) of the matrix (matrix). It returns - * 1 if the row can be updated, 0 otherwise. - * - equal is the matrix of equalities, - * - matrix is the matrix of constraints, - * - level is the column number in matrix of the element which is 'equal to', - * - line is the line number in matrix of the constraint we want to study, - * - the infos structure gives the user all options on code printing and more. - */ -static int clast_equal_add(CloogEqualities *equal, - CloogConstraintSet *constraints, - int level, CloogConstraint *constraint, - CloogInfos *infos) -{ - cloog_equal_add(equal, constraints, level, constraint, - infos->names->nb_parameters); - - return clast_equal_allow(equal, level, level-1, infos); -} - - - -/** - * clast_equal function: - * This function prints the substitution data of a statement into a clast_stmt. - * Using this function instead of pprint_equal is useful for generating - * a compilable pseudo-code by using preprocessor macro for each statement. - * By opposition to pprint_equal, the result is less human-readable. For - * instance this function will print (i,i+3,k,3) where pprint_equal would - * return (j=i+3,l=3). - * - level is the number of loops enclosing the statement, - * - the infos structure gives the user all options on code printing and more. - ** - * - March 12th 2004: first version. - * - November 21th 2005: (debug) now works well with GMP version. - */ -static struct clast_stmt *clast_equal(int level, CloogInfos *infos) -{ - int i ; - struct clast_expr *e; - struct clast_stmt *a = NULL; - struct clast_stmt **next = &a; - CloogEqualities *equal = infos->equal; - CloogConstraint *equal_constraint; - - for (i=infos->names->nb_scattering;inames); - cloog_constraint_release(equal_constraint); - } else { - e = &new_clast_term(infos->state->one, &new_clast_name( - cloog_names_name_at_level(infos->names, i+1))->expr)->expr; - } - *next = &new_clast_assignment(NULL, e)->stmt; - next = &(*next)->next; - } - - return a; -} - - -/** - * clast_bound_from_constraint function: - * This function returns a clast_expr containing the printing of the - * 'right part' of a constraint according to an element. - * For instance, for the constraint -3*i + 2*j - M >=0 and the element j, - * we have j >= (3*i + M)/2. As we are looking for integral solutions, this - * function should return 'ceild(3*i+M,2)'. - * - matrix is the polyhedron containing all the constraints, - * - line_num is the line number in domain of the constraint we want to print, - * - level is the column number in domain of the element we want to use, - * - names structure gives the user some options about code printing, - * the number of parameters in domain (nb_par), and the arrays of iterator - * names and parameters (iters and params). - ** - * - November 2nd 2001: first version. - * - June 27th 2003: 64 bits version ready. - */ -struct clast_expr *clast_bound_from_constraint(CloogConstraint *constraint, - int level, CloogNames *names) -{ - int i, sign, nb_elts=0, len; - cloog_int_t *line, numerator, denominator, temp, division; - struct clast_expr *e = NULL; - struct cloog_vec *line_vector; - - len = cloog_constraint_total_dimension(constraint) + 2; - line_vector = cloog_vec_alloc(len); - line = line_vector->p; - cloog_constraint_copy_coefficients(constraint, line+1); - cloog_int_init(temp); - cloog_int_init(numerator); - cloog_int_init(denominator); - - if (!cloog_int_is_zero(line[level])) { - struct clast_reduction *r; - /* Maybe we need to invert signs in such a way that the element sign is>0.*/ - sign = -cloog_int_sgn(line[level]); - - for (i = 1, nb_elts = 0; i <= len - 1; ++i) - if (i != level && !cloog_int_is_zero(line[i])) - nb_elts++; - r = new_clast_reduction(clast_red_sum, nb_elts); - nb_elts = 0; - - /* First, we have to print the iterators and the parameters. */ - for (i = 1; i <= len - 2; i++) { - struct clast_expr *v; - - if (i == level || cloog_int_is_zero(line[i])) - continue; - - v = cloog_constraint_variable_expr(constraint, i, names); - - if (sign == -1) - cloog_int_neg(temp,line[i]); - else - cloog_int_set(temp,line[i]); - - r->elts[nb_elts++] = &new_clast_term(temp, v)->expr; - } - - if (sign == -1) { - cloog_int_neg(numerator, line[len - 1]); - cloog_int_set(denominator, line[level]); - } - else { - cloog_int_set(numerator, line[len - 1]); - cloog_int_neg(denominator, line[level]); - } - - /* Finally, the constant, and the final printing. */ - if (nb_elts) { - if (!cloog_int_is_zero(numerator)) - r->elts[nb_elts++] = &new_clast_term(numerator, NULL)->expr; - - if (!cloog_int_is_one(line[level]) && !cloog_int_is_neg_one(line[level])) - { if (!cloog_constraint_is_equality(constraint)) - { if (cloog_int_is_pos(line[level])) - e = &new_clast_binary(clast_bin_cdiv, &r->expr, denominator)->expr; - else - e = &new_clast_binary(clast_bin_fdiv, &r->expr, denominator)->expr; - } else - e = &new_clast_binary(clast_bin_div, &r->expr, denominator)->expr; - } - else - e = &r->expr; - } else { - free_clast_reduction(r); - if (cloog_int_is_zero(numerator)) - e = &new_clast_term(numerator, NULL)->expr; - else - { if (!cloog_int_is_one(denominator)) - { if (!cloog_constraint_is_equality(constraint)) { /* useful? */ - if (cloog_int_is_divisible_by(numerator, denominator)) { - cloog_int_divexact(temp, numerator, denominator); - e = &new_clast_term(temp, NULL)->expr; - } - else { - cloog_int_init(division); - cloog_int_tdiv_q(division, numerator, denominator); - if (cloog_int_is_neg(numerator)) { - if (cloog_int_is_pos(line[level])) { - /* nb<0 need max */ - e = &new_clast_term(division, NULL)->expr; - } else { - /* nb<0 need min */ - cloog_int_sub_ui(temp, division, 1); - e = &new_clast_term(temp, NULL)->expr; - } - } - else - { if (cloog_int_is_pos(line[level])) - { /* nb>0 need max */ - cloog_int_add_ui(temp, division, 1); - e = &new_clast_term(temp, NULL)->expr; - } - else - /* nb>0 need min */ - e = &new_clast_term(division, NULL)->expr; - } - cloog_int_clear(division); - } - } - else - e = &new_clast_binary(clast_bin_div, - &new_clast_term(numerator, NULL)->expr, - denominator)->expr; - } - else - e = &new_clast_term(numerator, NULL)->expr; - } - } - } - - cloog_vec_free(line_vector); - - cloog_int_clear(temp); - cloog_int_clear(numerator); - cloog_int_clear(denominator); - - return e; -} - - -/* Temporary structure for communication between clast_minmax and - * its cloog_constraint_set_foreach_constraint callback functions. - */ -struct clast_minmax_data { - int level; - int max; - int guard; - int lower_bound; - int no_earlier; - CloogInfos *infos; - int n; - struct clast_reduction *r; -}; - - -/* Should constraint "c" be considered by clast_minmax? - * - * If d->no_earlier is set, then the constraint may not involve - * any earlier variables. - */ -static int valid_bound(CloogConstraint *c, struct clast_minmax_data *d) -{ - int i; - - if (d->max && !cloog_constraint_is_lower_bound(c, d->level - 1)) - return 0; - if (!d->max && !cloog_constraint_is_upper_bound(c, d->level - 1)) - return 0; - if (cloog_constraint_is_equality(c)) - return 0; - if (d->guard && cloog_constraint_involves(c, d->guard - 1)) - return 0; - - if (d->no_earlier) - for (i = 0; i < d->level - 1; ++i) - if (cloog_constraint_involves(c, i)) - return 0; - - return 1; -} - - -/* Increment n for each bound that should be considered by clast_minmax. - */ -static int count_bounds(CloogConstraint *c, void *user) -{ - struct clast_minmax_data *d = (struct clast_minmax_data *) user; - - if (!valid_bound(c, d)) - return 0; - - d->n++; - - return 0; -} - - -/* Update the given lower bound based on stride information, - * for those cases where the stride offset is represented by - * a constraint. - * Note that cloog_loop_stride may have already performed a - * similar update of the lower bounds, but the updated lower - * bounds may have been eliminated because they are redundant - * by definition. On the other hand, performing the update - * on an already updated constraint is an identity operation - * and is therefore harmless. - */ -static CloogConstraint *update_lower_bound_c(CloogConstraint *c, int level, - CloogStride *stride) -{ - if (!stride->constraint) - return c; - return cloog_constraint_stride_lower_bound(c, level, stride); -} - - -/* Update the given lower bound based on stride information. - * If the stride offset is represented by a constraint, - * then we have already performed the update in update_lower_bound_c. - * Otherwise, the original lower bound is known to be a constant. - * If the bound has already been updated and it just happens - * to be a constant, then this function performs an identity - * operation on the constant. - */ -static void update_lower_bound(struct clast_expr *expr, int level, - CloogStride *stride) -{ - struct clast_term *t; - if (stride->constraint) - return; - if (expr->type != clast_expr_term) - return; - t = (struct clast_term *)expr; - if (t->var) - return; - cloog_int_sub(t->val, t->val, stride->offset); - cloog_int_cdiv_q(t->val, t->val, stride->stride); - cloog_int_mul(t->val, t->val, stride->stride); - cloog_int_add(t->val, t->val, stride->offset); -} - - -/* Add all relevant bounds to r->elts and update lower bounds - * based on stride information. - */ -static int collect_bounds(CloogConstraint *c, void *user) -{ - struct clast_minmax_data *d = (struct clast_minmax_data *) user; - - if (!valid_bound(c, d)) - return 0; - - c = cloog_constraint_copy(c); - - if (d->lower_bound && d->infos->stride[d->level - 1]) - c = update_lower_bound_c(c, d->level, d->infos->stride[d->level - 1]); - - d->r->elts[d->n] = clast_bound_from_constraint(c, d->level, - d->infos->names); - if (d->lower_bound && d->infos->stride[d->level - 1]) { - update_lower_bound(d->r->elts[d->n], d->level, - d->infos->stride[d->level - 1]); - } - - cloog_constraint_release(c); - - d->n++; - - return 0; -} - - -/** - * clast_minmax function: - * This function returns a clast_expr containing the printing of a minimum or a - * maximum of the 'right parts' of all constraints according to an element. - * For instance consider the constraints: - * -3*i +2*j -M >= 0 - * 2*i +j >= 0 - * -i -j +2*M >= 0 - * if we are looking for the minimum for the element j, the function should - * return 'max(ceild(3*i+M,2),-2*i)'. - * - constraints is the constraints, - * - level is the column number in domain of the element we want to use, - * - max is a boolean set to 1 if we are looking for a maximum, 0 for a minimum, - * - guard is set to 0 if there is no guard, and set to the level of the element - * with a guard otherwise (then the function gives the max or the min only - * for the constraint where the guarded coefficient is 0), - * - lower is set to 1 if the maximum is to be used a lower bound on a loop - * - no_earlier is set if no constraints should be used that involve - * earlier dimensions, - * - the infos structure gives the user some options about code printing, - * the number of parameters in domain (nb_par), and the arrays of iterator - * names and parameters (iters and params). - ** - * - November 2nd 2001: first version. - */ -static struct clast_expr *clast_minmax(CloogConstraintSet *constraints, - int level, int max, int guard, - int lower_bound, int no_earlier, - CloogInfos *infos) -{ - struct clast_minmax_data data = { level, max, guard, lower_bound, - no_earlier, infos }; - - data.n = 0; - - cloog_constraint_set_foreach_constraint(constraints, count_bounds, &data); - - if (!data.n) - return NULL; - data.r = new_clast_reduction(max ? clast_red_max : clast_red_min, data.n); - - data.n = 0; - cloog_constraint_set_foreach_constraint(constraints, collect_bounds, &data); - - clast_reduction_sort(data.r); - return &data.r->expr; -} - - -/** - * Insert modulo guards defined by existentially quantified dimensions, - * not involving the given level. - * - * This function is called from within insert_guard. - * Any constraint used in constructing a modulo guard is removed - * from the constraint set to avoid insert_guard - * adding a duplicate (pair of) constraint(s). - * - * Return the updated CloogConstraintSet. - */ -static CloogConstraintSet *insert_extra_modulo_guards( - CloogConstraintSet *constraints, int level, - struct clast_stmt ***next, CloogInfos *infos) -{ - int i; - int nb_iter; - int total_dim; - CloogConstraint *upper, *lower; - - total_dim = cloog_constraint_set_total_dimension(constraints); - nb_iter = cloog_constraint_set_n_iterators(constraints, - infos->names->nb_parameters); - - for (i = total_dim - infos->names->nb_parameters; i >= nb_iter + 1; i--) { - if (cloog_constraint_is_valid(upper = - cloog_constraint_set_defining_equality(constraints, i))) { - if (!level || (nb_iter < level) || - !cloog_constraint_involves(upper, level-1)) { - insert_modulo_guard(upper, - cloog_constraint_invalid(), i, next, infos); - constraints = cloog_constraint_set_drop_constraint(constraints, - upper); - } - cloog_constraint_release(upper); - } else if (cloog_constraint_is_valid(upper = - cloog_constraint_set_defining_inequalities(constraints, - i, &lower, infos->names->nb_parameters))) { - if (!level || (nb_iter < level) || - !cloog_constraint_involves(upper, level-1)) { - insert_modulo_guard(upper, lower, i, next, infos); - constraints = cloog_constraint_set_drop_constraint(constraints, - upper); - constraints = cloog_constraint_set_drop_constraint(constraints, - lower); - } - cloog_constraint_release(upper); - cloog_constraint_release(lower); - } - } - - return constraints; -} - - -/* Temporary structure for communication between insert_guard and - * its cloog_constraint_set_foreach_constraint callback function. - */ -struct clast_guard_data { - int level; - CloogInfos *infos; - int n; - int i; - int nb_iter; - CloogConstraintSet *copy; - struct clast_guard *g; - - int min; - int max; -}; - - -static int guard_count_bounds(CloogConstraint *c, void *user) -{ - struct clast_guard_data *d = (struct clast_guard_data *) user; - - d->n++; - - return 0; -} - - -/* Insert a guard, if necesessary, for constraint j. - * - * If the constraint involves any earlier dimensions, then we have - * already considered it during a previous iteration over the constraints. - * - * If we have already generated a min [max] for the current level d->i - * and if the current constraint is an upper [lower] bound, then we - * can skip the constraint as it will already have been used - * in that previously generated min [max]. - */ -static int insert_guard_constraint(CloogConstraint *j, void *user) -{ - int i; - struct clast_guard_data *d = (struct clast_guard_data *) user; - int minmax = -1; - int individual_constraint; - struct clast_expr *v; - struct clast_term *t; - - if (!cloog_constraint_involves(j, d->i - 1)) - return 0; - - for (i = 0; i < d->i - 1; ++i) - if (cloog_constraint_involves(j, i)) - return 0; - - if (d->level && d->nb_iter >= d->level && - cloog_constraint_involves(j, d->level - 1)) - return 0; - - individual_constraint = !d->level || cloog_constraint_is_equality(j); - if (!individual_constraint) { - if (d->max && cloog_constraint_is_lower_bound(j, d->i - 1)) - return 0; - if (d->min && cloog_constraint_is_upper_bound(j, d->i - 1)) - return 0; - } - - v = cloog_constraint_variable_expr(j, d->i, d->infos->names); - d->g->eq[d->n].LHS = &(t = new_clast_term(d->infos->state->one, v))->expr; - if (individual_constraint) { - /* put the "denominator" in the LHS */ - cloog_constraint_coefficient_get(j, d->i - 1, &t->val); - cloog_constraint_coefficient_set(j, d->i - 1, d->infos->state->one); - if (cloog_int_is_neg(t->val)) { - cloog_int_neg(t->val, t->val); - cloog_constraint_coefficient_set(j, d->i - 1, d->infos->state->negone); - } - if (d->level || cloog_constraint_is_equality(j)) - d->g->eq[d->n].sign = 0; - else if (cloog_constraint_is_lower_bound(j, d->i - 1)) - d->g->eq[d->n].sign = 1; - else - d->g->eq[d->n].sign = -1; - d->g->eq[d->n].RHS = clast_bound_from_constraint(j, d->i, d->infos->names); - } else { - int guarded; - - if (cloog_constraint_is_lower_bound(j, d->i - 1)) { - minmax = 1; - d->max = 1; - d->g->eq[d->n].sign = 1; - } else { - minmax = 0; - d->min = 1; - d->g->eq[d->n].sign = -1; - } - - guarded = (d->nb_iter >= d->level) ? d->level : 0 ; - d->g->eq[d->n].RHS = clast_minmax(d->copy, d->i, minmax, guarded, 0, 1, - d->infos); - } - d->n++; - - return 0; -} - - -/** - * insert_guard function: - * This function inserts a guard in the clast. - * A guard on an element (level) is : - * -> the conjunction of all the existing constraints where the coefficient of - * this element is 0 if the element is an iterator, - * -> the conjunction of all the existing constraints if the element isn't an - * iterator. - * For instance, considering these constraints and the element j: - * -3*i +2*j -M >= 0 - * 2*i +M >= 0 - * this function should return 'if (2*i+M>=0) {'. - * - matrix is the polyhedron containing all the constraints, - * - level is the column number of the element in matrix we want to use, - * - the infos structure gives the user some options about code printing, - * the number of parameters in matrix (nb_par), and the arrays of iterator - * names and parameters (iters and params). - ** - * - November 3rd 2001: first version. - * - November 14th 2001: a lot of 'purifications'. - * - July 31th 2002: (debug) some guard parts are no more redundants. - * - August 12th 2002: polyhedra union ('or' conditions) are now supported. - * - October 27th 2005: polyhedra union ('or' conditions) are no more supported - * (the need came from loop_simplify that may result in - * domain unions, now it should be fixed directly in - * cloog_loop_simplify). - */ -static void insert_guard(CloogConstraintSet *constraints, int level, - struct clast_stmt ***next, CloogInfos *infos) -{ - int total_dim; - struct clast_guard_data data = { level, infos, 0 }; - - if (!constraints) - return; - - data.copy = cloog_constraint_set_copy(constraints); - - data.copy = insert_extra_modulo_guards(data.copy, level, next, infos); - - cloog_constraint_set_foreach_constraint(constraints, - guard_count_bounds, &data); - - data.g = new_clast_guard(data.n); - data.n = 0; - - /* Well, it looks complicated because I wanted to have a particular, more - * readable, ordering, obviously this function may be far much simpler ! - */ - data.nb_iter = cloog_constraint_set_n_iterators(constraints, - infos->names->nb_parameters); - - /* We search for guard parts. */ - total_dim = cloog_constraint_set_total_dimension(constraints); - for (data.i = 1; data.i <= total_dim; data.i++) { - data.min = 0; - data.max = 0; - cloog_constraint_set_foreach_constraint(data.copy, - insert_guard_constraint, &data); - } - - cloog_constraint_set_free(data.copy); - - data.g->n = data.n; - if (data.n) { - clast_guard_sort(data.g); - **next = &data.g->stmt; - *next = &data.g->then; - } else - free_clast_stmt(&data.g->stmt); -} - -/** - * Check if the constant "cst" satisfies the modulo guard that - * would be introduced by insert_computed_modulo_guard. - * The constant is assumed to have been reduced prior to calling - * this function. - */ -static int constant_modulo_guard_is_satisfied(CloogConstraint *lower, - cloog_int_t bound, cloog_int_t cst) -{ - if (cloog_constraint_is_valid(lower)) - return cloog_int_le(cst, bound); - else - return cloog_int_is_zero(cst); -} - -/** - * Insert a modulo guard "r % mod == 0" or "r % mod <= bound", - * depending on whether lower represents a valid constraint. - */ -static void insert_computed_modulo_guard(struct clast_reduction *r, - CloogConstraint *lower, cloog_int_t mod, cloog_int_t bound, - struct clast_stmt ***next) -{ - struct clast_expr *e; - struct clast_guard *g; - - e = &new_clast_binary(clast_bin_mod, &r->expr, mod)->expr; - g = new_clast_guard(1); - if (!cloog_constraint_is_valid(lower)) { - g->eq[0].LHS = e; - cloog_int_set_si(bound, 0); - g->eq[0].RHS = &new_clast_term(bound, NULL)->expr; - g->eq[0].sign = 0; - } else { - g->eq[0].LHS = e; - g->eq[0].RHS = &new_clast_term(bound, NULL)->expr; - g->eq[0].sign = -1; - } - - **next = &g->stmt; - *next = &g->then; -} - - -/* Try and eliminate coefficients from a modulo constraint based on - * stride information of an earlier level. - * The modulo of the constraint being constructed is "m". - * The stride information at level "level" is given by "stride" - * and indicated that the iterator i at level "level" is equal to - * some expression modulo stride->stride. - * If stride->stride is a multiple of "m' then i is also equal to - * the expression modulo m and so we can eliminate the coefficient of i. - * - * If stride->constraint is NULL, then i has a constant value modulo m, stored - * stride->offset. We simply multiply this constant with the coefficient - * of i and add the result to the constant term, reducing it modulo m. - * - * If stride->constraint is not NULL, then it is a constraint of the form - * - * e + k i = s a - * - * with s equal to stride->stride, e an expression in terms of the - * parameters and earlier iterators and a some arbitrary expression - * in terms of existentially quantified variables. - * stride->factor is a value f such that f * k = -1 mod s. - * Adding stride->constraint f * c times to the current modulo constraint, - * with c the coefficient of i eliminates i in favor of parameters and - * earlier variables. - */ -static void eliminate_using_stride_constraint(cloog_int_t *line, int len, - int nb_iter, CloogStride *stride, int level, cloog_int_t m) -{ - if (!stride) - return; - if (!cloog_int_is_divisible_by(stride->stride, m)) - return; - - if (stride->constraint) { - int i, s_len; - cloog_int_t t, v; - - cloog_int_init(t); - cloog_int_init(v); - cloog_int_mul(t, line[level], stride->factor); - for (i = 1; i < level; ++i) { - cloog_constraint_coefficient_get(stride->constraint, - i - 1, &v); - cloog_int_addmul(line[i], t, v); - cloog_int_fdiv_r(line[i], line[i], m); - } - s_len = cloog_constraint_total_dimension(stride->constraint)+2; - for (i = nb_iter + 1; i <= len - 2; ++i) { - cloog_constraint_coefficient_get(stride->constraint, - i - (len - s_len) - 1, &v); - cloog_int_addmul(line[i], t, v); - cloog_int_fdiv_r(line[i], line[i], m); - } - cloog_constraint_constant_get(stride->constraint, &v); - cloog_int_addmul(line[len - 1], t, v); - cloog_int_fdiv_r(line[len - 1], line[len - 1], m); - cloog_int_clear(v); - cloog_int_clear(t); - } else { - cloog_int_addmul(line[len - 1], line[level], stride->offset); - cloog_int_fdiv_r(line[len - 1], line[len - 1], m); - } - - cloog_int_set_si(line[level], 0); -} - - -/* Temporary structure for communication between insert_modulo_guard and - * its cloog_constraint_set_foreach_constraint callback function. - */ -struct clast_modulo_guard_data { - CloogConstraint *lower; - int level; - struct clast_stmt ***next; - CloogInfos *infos; - int empty; - cloog_int_t val, bound; -}; - - -/* Insert a modulo guard for constraint c. - * The constraint may be either an equality or an inequality. - * Since this function returns -1, it is only called on a single constraint. - * In case of an inequality, the constraint is usually an upper bound - * on d->level. However, if this variable is an existentially - * quantified variable, the upper bound constraint may get removed - * as trivially holding and then this function is called with - * a lower bound instead. In this case, we need to adjust the constraint - * based on the sum of the constant terms of the lower and upper bound - * stored in d->bound. - */ -static int insert_modulo_guard_constraint(CloogConstraint *c, void *user) -{ - struct clast_modulo_guard_data *d = (struct clast_modulo_guard_data *) user; - int level = d->level; - CloogInfos *infos = d->infos; - int i, nb_elts = 0, len, len2, nb_iter, nb_par; - int constant; - struct cloog_vec *line_vector; - cloog_int_t *line; - - len = cloog_constraint_total_dimension(c) + 2; - len2 = cloog_equal_total_dimension(infos->equal) + 2; - nb_par = infos->names->nb_parameters; - nb_iter = len - 2 - nb_par; - - line_vector = cloog_vec_alloc(len); - line = line_vector->p; - cloog_constraint_copy_coefficients(c, line + 1); - - if (cloog_int_is_pos(line[level])) { - cloog_seq_neg(line + 1, line + 1, len - 1); - if (!cloog_constraint_is_equality(c)) - cloog_int_add(line[len - 1], line[len - 1], d->bound); - } - cloog_int_neg(line[level], line[level]); - assert(cloog_int_is_pos(line[level])); - - nb_elts = 0; - for (i = 1; i <= len-1; ++i) { - if (i == level) - continue; - cloog_int_fdiv_r(line[i], line[i], line[level]); - if (cloog_int_is_zero(line[i])) - continue; - if (i == len-1) - continue; - - nb_elts++; - } - - if (nb_elts || !cloog_int_is_zero(line[len-1])) { - struct clast_reduction *r; - const char *name; - - r = new_clast_reduction(clast_red_sum, nb_elts + 1); - nb_elts = 0; - - /* First, the modulo guard : the iterators... */ - i = level - 1; - if (i > infos->stride_level) - i = infos->stride_level; - for (; i >= 1; --i) - eliminate_using_stride_constraint(line, len, nb_iter, - infos->stride[i - 1], i, line[level]); - for (i=1;i<=nb_iter;i++) { - if (i == level || cloog_int_is_zero(line[i])) - continue; - - name = cloog_names_name_at_level(infos->names, i); - - r->elts[nb_elts++] = &new_clast_term(line[i], - &new_clast_name(name)->expr)->expr; - } - - /* ...the parameters... */ - for (i=nb_iter+1;i<=len-2;i++) { - if (cloog_int_is_zero(line[i])) - continue; - - name = infos->names->parameters[i-nb_iter-1] ; - r->elts[nb_elts++] = &new_clast_term(line[i], - &new_clast_name(name)->expr)->expr; - } - - constant = nb_elts == 0; - /* ...the constant. */ - if (!cloog_int_is_zero(line[len-1])) - r->elts[nb_elts++] = &new_clast_term(line[len-1], NULL)->expr; - - /* our initial computation may have been an overestimate */ - r->n = nb_elts; - - if (constant) { - d->empty = !constant_modulo_guard_is_satisfied(d->lower, d->bound, - line[len - 1]); - free_clast_reduction(r); - } else - insert_computed_modulo_guard(r, d->lower, line[level], d->bound, - d->next); - } - - cloog_vec_free(line_vector); - - return -1; -} - - -/** - * insert_modulo_guard: - * This function inserts a modulo guard corresponding to an equality - * or a pair of inequalities. - * Returns 0 if the modulo guard is discovered to be unsatisfiable. - * - * See insert_equation. - * - matrix is the polyhedron containing all the constraints, - * - upper and lower are the line numbers of the constraint in matrix - * we want to print; in particular, if we want to print an equality, - * then lower == -1 and upper is the row of the equality; if we want - * to print an inequality, then upper is the row of the upper bound - * and lower in the row of the lower bound - * - level is the column number of the element in matrix we want to use, - * - the infos structure gives the user some options about code printing, - * the number of parameters in matrix (nb_par), and the arrays of iterator - * names and parameters (iters and params). - */ -static int insert_modulo_guard(CloogConstraint *upper, - CloogConstraint *lower, int level, - struct clast_stmt ***next, CloogInfos *infos) -{ - int nb_par; - CloogConstraintSet *set; - struct clast_modulo_guard_data data = { lower, level, next, infos, 0 }; - - cloog_int_init(data.val); - cloog_constraint_coefficient_get(upper, level-1, &data.val); - if (cloog_int_is_one(data.val) || cloog_int_is_neg_one(data.val)) { - cloog_int_clear(data.val); - return 1; - } - - nb_par = infos->names->nb_parameters; - - cloog_int_init(data.bound); - /* Check if would be emitting the redundant constraint mod(e,m) <= m-1 */ - if (cloog_constraint_is_valid(lower)) { - cloog_constraint_constant_get(upper, &data.val); - cloog_constraint_constant_get(lower, &data.bound); - cloog_int_add(data.bound, data.val, data.bound); - cloog_constraint_coefficient_get(lower, level-1, &data.val); - cloog_int_sub_ui(data.val, data.val, 1); - if (cloog_int_eq(data.val, data.bound)) { - cloog_int_clear(data.val); - cloog_int_clear(data.bound); - return 1; - } - } - - if (cloog_constraint_needs_reduction(upper, level)) { - set = cloog_constraint_set_for_reduction(upper, lower); - set = cloog_constraint_set_reduce(set, level, infos->equal, - nb_par, &data.bound); - cloog_constraint_set_foreach_constraint(set, - insert_modulo_guard_constraint, &data); - cloog_constraint_set_free(set); - } else - insert_modulo_guard_constraint(upper, &data); - - cloog_int_clear(data.val); - cloog_int_clear(data.bound); - - return !data.empty; -} - - -/** - * We found an equality or a pair of inequalities identifying - * a loop with a single iteration, but the user wants us to generate - * a loop anyway, so we do it here. - */ -static int insert_equation_as_loop(CloogDomain *domain, CloogConstraint *upper, - CloogConstraint *lower, int level, struct clast_stmt ***next, - CloogInfos *infos) -{ - const char *iterator = cloog_names_name_at_level(infos->names, level); - struct clast_expr *e1, *e2; - struct clast_for *f; - - e2 = clast_bound_from_constraint(upper, level, infos->names); - if (!cloog_constraint_is_valid(lower)) - e1 = clast_expr_copy(e2); - else - e1 = clast_bound_from_constraint(lower, level, infos->names); - - f = new_clast_for(domain, iterator, e1, e2, infos->stride[level-1]); - **next = &f->stmt; - *next = &f->body; - - cloog_constraint_release(lower); - cloog_constraint_release(upper); - return 1; -} - - -/** - * insert_equation function: - * This function inserts an equality - * constraint according to an element in the clast. - * Returns 1 if the calling function should recurse into inner loops. - * - * An equality can be preceded by a 'modulo guard'. - * For instance, consider the constraint i -2*j = 0 and the - * element j: pprint_equality should return 'if(i%2==0) { j = i/2 ;'. - * - matrix is the polyhedron containing all the constraints, - * - num is the line number of the constraint in matrix we want to print, - * - level is the column number of the element in matrix we want to use, - * - the infos structure gives the user some options about code printing, - * the number of parameters in matrix (nb_par), and the arrays of iterator - * names and parameters (iters and params). - ** - * - November 13th 2001: first version. - * - June 26th 2003: simplification of the modulo guards (remove parts such as - * modulo is 0, compare vivien or vivien2 with a previous - * version for an idea). - * - June 29th 2003: non-unit strides support. - * - July 14th 2003: (debug) no more print the constant in the modulo guard when - * it was previously included in a stride calculation. - */ -static int insert_equation(CloogDomain *domain, CloogConstraint *upper, - CloogConstraint *lower, int level, struct clast_stmt - ***next, CloogInfos *infos) -{ - struct clast_expr *e; - struct clast_assignment *ass; - - if (!infos->options->otl) - return insert_equation_as_loop(domain, upper, lower, level, next, infos); - - if (!insert_modulo_guard(upper, lower, level, next, infos)) { - cloog_constraint_release(lower); - cloog_constraint_release(upper); - - return 0; - } - - if (cloog_constraint_is_valid(lower) || - !clast_equal_add(infos->equal, NULL, level, upper, infos)) - { /* Finally, the equality. */ - - /* If we have to make a block by dimension, we start the block. Function - * pprint knows if there is an equality, if this is the case, it checks - * for the same following condition to close the brace. - */ - if (infos->options->block) { - struct clast_block *b = new_clast_block(); - **next = &b->stmt; - *next = &b->body; - } - - e = clast_bound_from_constraint(upper, level, infos->names); - ass = new_clast_assignment(cloog_names_name_at_level(infos->names, level), e); - - **next = &ass->stmt; - *next = &(**next)->next; - } - - cloog_constraint_release(lower); - cloog_constraint_release(upper); - - return 1; -} - - -/** - * Insert a loop that is executed exactly once as an assignment. - * In particular, the loop - * - * for (i = e; i <= e; ++i) { - * S; - * } - * - * is generated as - * - * i = e; - * S; - * - */ -static void insert_otl_for(CloogConstraintSet *constraints, int level, - struct clast_expr *e, struct clast_stmt ***next, CloogInfos *infos) -{ - const char *iterator; - - iterator = cloog_names_name_at_level(infos->names, level); - - if (!clast_equal_add(infos->equal, constraints, level, - cloog_constraint_invalid(), infos)) { - struct clast_assignment *ass; - if (infos->options->block) { - struct clast_block *b = new_clast_block(); - **next = &b->stmt; - *next = &b->body; - } - ass = new_clast_assignment(iterator, e); - **next = &ass->stmt; - *next = &(**next)->next; - } else { - free_clast_expr(e); - } -} - - -/** - * Insert a loop that is executed at most once as an assignment followed - * by a guard. In particular, the loop - * - * for (i = e1; i <= e2; ++i) { - * S; - * } - * - * is generated as - * - * i = e1; - * if (i <= e2) { - * S; - * } - * - */ -static void insert_guarded_otl_for(CloogConstraintSet *constraints, int level, - struct clast_expr *e1, struct clast_expr *e2, - struct clast_stmt ***next, CloogInfos *infos) -{ - const char *iterator; - struct clast_assignment *ass; - struct clast_guard *guard; - - iterator = cloog_names_name_at_level(infos->names, level); - - if (infos->options->block) { - struct clast_block *b = new_clast_block(); - **next = &b->stmt; - *next = &b->body; - } - ass = new_clast_assignment(iterator, e1); - **next = &ass->stmt; - *next = &(**next)->next; - - guard = new_clast_guard(1); - guard->eq[0].sign = -1; - guard->eq[0].LHS = &new_clast_term(infos->state->one, - &new_clast_name(iterator)->expr)->expr; - guard->eq[0].RHS = e2; - - **next = &guard->stmt; - *next = &guard->then; -} - - -/** - * insert_for function: - * This function inserts a for loop in the clast. - * Returns 1 if the calling function should recurse into inner loops. - * - * A loop header according to an element is the conjunction of a minimum and a - * maximum on a given element (they give the loop bounds). - * For instance, considering these constraints and the element j: - * i + j -9*M >= 0 - * -j +5*M >= 0 - * j -4*M >= 0 - * this function should return 'for (j=max(-i+9*M,4*M),j<=5*M;j++) {'. - * - constraints contains all constraints, - * - level is the column number of the element in matrix we want to use, - * - otl is set if the loop is executed at most once, - * - the infos structure gives the user some options about code printing, - * the number of parameters in matrix (nb_par), and the arrays of iterator - * names and parameters (iters and params). - */ -static int insert_for(CloogDomain *domain, CloogConstraintSet *constraints, - int level, int otl, struct clast_stmt ***next, - CloogInfos *infos) -{ - const char *iterator; - struct clast_expr *e1; - struct clast_expr *e2; - - e1 = clast_minmax(constraints, level, 1, 0, 1, 0, infos); - e2 = clast_minmax(constraints, level, 0, 0, 0, 0, infos); - - if (clast_expr_is_bigger_constant(e1, e2)) { - free_clast_expr(e1); - free_clast_expr(e2); - return 0; - } - - /* If min and max are not equal there is a 'for' else, there is a '='. - * In the special case e1 = e2 = NULL, this is an infinite loop - * so this is not a '='. - */ - if (e1 && e2 && infos->options->otl && clast_expr_equal(e1, e2)) { - free_clast_expr(e2); - insert_otl_for(constraints, level, e1, next, infos); - } else if (otl) { - insert_guarded_otl_for(constraints, level, e1, e2, next, infos); - } else { - struct clast_for *f; - iterator = cloog_names_name_at_level(infos->names, level); - - f = new_clast_for(domain, iterator, e1, e2, infos->stride[level-1]); - **next = &f->stmt; - *next = &f->body; - } - - return 1; -} - - -/** - * insert_block function: - * This function inserts a statement block. - * - block is the statement block, - * - level is the number of loops enclosing the statement, - * - the infos structure gives the user some options about code printing, - * the number of parameters in domain (nb_par), and the arrays of iterator - * names and parameters (iters and params). - ** - * - September 21th 2003: first version (pick from pprint function). - */ -static void insert_block(CloogDomain *domain, CloogBlock *block, int level, - struct clast_stmt ***next, CloogInfos *infos) -{ - CloogStatement * statement ; - struct clast_stmt *subs; - - if (!block) - return; - - for (statement = block->statement; statement; statement = statement->next) { - CloogStatement *s_next = statement->next; - - subs = clast_equal(level,infos); - - statement->next = NULL; - **next = &new_clast_user_stmt(domain, statement, subs)->stmt; - statement->next = s_next; - *next = &(**next)->next; - } -} - - -/** - * insert_loop function: - * This function converts the content of a CloogLoop structure (loop) into a - * clast_stmt (inserted at **next). - * The iterator (level) of - * the current loop is given by 'level': this is the column number of the - * domain corresponding to the current loop iterator. The data of a loop are - * written in this order: - * 1. The guard of the loop, i.e. each constraint in the domain that does not - * depend on the iterator (when the entry in the column 'level' is 0). - * 2. The iteration domain of the iterator, given by the constraints in the - * domain depending on the iterator, i.e.: - * * an equality if the iterator has only one value (possibly preceded by - * a guard verifying if this value is integral), *OR* - * * a loop from the minimum possible value of the iterator to the maximum - * possible value. - * 3. The included statement block. - * 4. The inner loops (recursive call). - * 5. The following loops (recursive call). - * - level is the recursion level or the iteration level that we are printing, - * - the infos structure gives the user some options about code printing, - * the number of parameters in domain (nb_par), and the arrays of iterator - * names and parameters (iters and params). - ** - * - November 2nd 2001: first version. - * - March 6th 2003: infinite domain support. - * - April 19th 2003: (debug) NULL loop support. - * - June 29th 2003: non-unit strides support. - * - April 28th 2005: (debug) level is level+equality when print statement! - * - June 16th 2005: (debug) the N. Vasilache normalization step has been - * added to avoid iteration duplication (see DaeGon Kim - * bug in cloog_program_generate). Try vasilache.cloog - * with and without the call to cloog_polylib_matrix_normalize, - * using -f 8 -l 9 options for an idea. - * - September 15th 2005: (debug) don't close equality braces when unnecessary. - * - October 16th 2005: (debug) scalar value is saved for next loops. - */ -static void insert_loop(CloogLoop * loop, int level, - struct clast_stmt ***next, CloogInfos *infos) -{ - int equality = 0; - CloogConstraintSet *constraints, *temp; - struct clast_stmt **top = *next; - CloogConstraint *i, *j; - int empty_loop = 0; - - /* It can happen that loop be NULL when an input polyhedron is empty. */ - if (loop == NULL) - return; - - /* The constraints do not always have a shape that allows us to generate code from it, - * thus we normalize it, we also simplify it with the equalities. - */ - temp = cloog_domain_constraints(loop->domain); - cloog_constraint_set_normalize(temp,level); - constraints = cloog_constraint_set_simplify(temp,infos->equal,level, - infos->names->nb_parameters); - cloog_constraint_set_free(temp); - if (level) { - infos->stride[level - 1] = loop->stride; - infos->stride_level++; - } - - /* First of all we have to print the guard. */ - insert_guard(constraints,level, next, infos); - - if (level && cloog_constraint_set_contains_level(constraints, level, - infos->names->nb_parameters)) { - /* We scan all the constraints to know in which case we are : - * [[if] equation] or [for]. - */ - if (cloog_constraint_is_valid(i = - cloog_constraint_set_defining_equality(constraints, level))) { - empty_loop = !insert_equation(loop->unsimplified, i, - cloog_constraint_invalid(), level, next, - infos); - equality = 1 ; - } else if (cloog_constraint_is_valid(i = - cloog_constraint_set_defining_inequalities(constraints, - level, &j, infos->names->nb_parameters))) { - empty_loop = !insert_equation(loop->unsimplified, i, j, level, next, - infos); - } else - empty_loop = !insert_for(loop->unsimplified, constraints, level, - loop->otl, next, infos); - } - - if (!empty_loop) { - /* Finally, if there is an included statement block, print it. */ - insert_block(loop->unsimplified, loop->block, level+equality, next, infos); - - /* Go to the next level. */ - if (loop->inner != NULL) - insert_loop(loop->inner, level+1, next, infos); - } - - if (level) { - cloog_equal_del(infos->equal,level); - infos->stride_level--; - } - cloog_constraint_set_free(constraints); - - /* Go to the next loop on the same level. */ - while (*top) - top = &(*top)->next; - if (loop->next != NULL) - insert_loop(loop->next, level, &top,infos); -} - - -struct clast_stmt *cloog_clast_create(CloogProgram *program, - CloogOptions *options) -{ - CloogInfos *infos = ALLOC(CloogInfos); - int nb_levels; - struct clast_stmt *root = &new_clast_root(program->names)->stmt; - struct clast_stmt **next = &root->next; - - infos->state = options->state; - infos->names = program->names; - infos->options = options; - infos->scaldims = program->scaldims; - infos->nb_scattdims = program->nb_scattdims; - - /* Allocation for the array of strides, there is a +1 since the statement can - * be included inside an external loop without iteration domain. - */ - nb_levels = program->names->nb_scattering+program->names->nb_iterators+1; - infos->stride = ALLOCN(CloogStride *, nb_levels); - infos->stride_level = 0; - - infos->equal = cloog_equal_alloc(nb_levels, - nb_levels, program->names->nb_parameters); - - insert_loop(program->loop, 0, &next, infos); - - cloog_equal_free(infos->equal); - - free(infos->stride); - free(infos); - - return root; -} - - -struct clast_stmt *cloog_clast_create_from_input(CloogInput *input, - CloogOptions *options) -{ - CloogProgram *program; - struct clast_stmt *root; - - program = cloog_program_alloc(input->context, input->ud, options); - free(input); - - program = cloog_program_generate(program, options); - - root = cloog_clast_create(program, options); - cloog_program_free(program); - - return root; -} diff --git a/cloog-0.16.3/source/cloog.c b/cloog-0.16.3/source/cloog.c deleted file mode 100644 index 0a42a67..0000000 --- a/cloog-0.16.3/source/cloog.c +++ /dev/null @@ -1,98 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** cloog.c ** - **-------------------------------------------------------------------** - ** First version: october 25th 2001, CLooG's birth date ! ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -# include -# include -# include "../include/cloog/cloog.h" - - -int main(int argv, char * argc[]) -{ CloogProgram * program ; - CloogOptions * options ; - CloogState *state; - FILE * input, * output ; - - state = cloog_state_malloc(); - - /* Options and input/output file setting. */ - cloog_options_read(state, argv, argc, &input, &output, &options); - - /* Reading the program informations. */ - program = cloog_program_read(input,options) ; - fclose(input) ; - - /* Generating and printing the code. */ - program = cloog_program_generate(program,options) ; - if (options->structure) - cloog_program_print(stdout,program) ; - cloog_program_pprint(output,program,options) ; - cloog_program_free(program) ; - - /* Printing the allocation statistics if asked. */ - if (options->leaks) { - fprintf(output,"/* Domains : allocated=%5d, freed=%5d, max=%5d. */\n", - state->domain_allocated, state->domain_freed, state->domain_max); - fprintf(output,"/* Loops : allocated=%5d, freed=%5d, max=%5d. */\n", - state->loop_allocated, state->loop_freed, state->loop_max); - fprintf(output,"/* Statements : allocated=%5d, freed=%5d, max=%5d. */\n", - state->statement_allocated, state->statement_freed, state->statement_max); - fprintf(output,"/* Blocks : allocated=%5d, freed=%5d, max=%5d. */\n", - state->block_allocated, state->block_freed, state->block_max); - } - - /* Inform the user in case of a problem with the allocation statistics. */ - if ((state->domain_allocated != state->domain_freed) || - (state->loop_allocated != state->loop_freed) || - (state->statement_allocated != state->statement_freed) || - (state->block_allocated != state->block_freed)) - { - cloog_msg(options, CLOOG_INFO, - "an internal problem has been detected (it should have" - " no\n consequence on the correctness of the output)." - " Please send (if\n you can) your input file, the first line " - "given by typing 'cloog -v'\n and your full command " - "line call to CLooG including options to\n . Thank you for your participation to get\n" - " CLooG better and safer.\n") ; - } - - cloog_options_free(options) ; - cloog_state_free(state); - fclose(output) ; - return 0; -} - diff --git a/cloog-0.16.3/source/input.c b/cloog-0.16.3/source/input.c deleted file mode 100644 index 1b83a97..0000000 --- a/cloog-0.16.3/source/input.c +++ /dev/null @@ -1,177 +0,0 @@ -#include -#include -#include -#include "../include/cloog/cloog.h" - -#define ALLOC(type) (type*)malloc(sizeof(type)) - -static char *next_line(FILE *input, char *line, unsigned len) -{ - char *p; - - do { - if (!(p = fgets(line, len, input))) - return NULL; - while (isspace(*p) && *p != '\n') - ++p; - } while (*p == '#' || *p == '\n'); - - return p; -} - -/** - * Read input from a .cloog file, putting most of the information - * in the returned CloogInput. The chosen language is put in - * options->language. - */ -CloogInput *cloog_input_read(FILE *file, CloogOptions *options) -{ - char line[MAX_STRING]; - char language; - CloogDomain *context; - CloogUnionDomain *ud; - int nb_par; - - /* First of all, we read the language to use. */ - if (!next_line(file, line, sizeof(line))) - cloog_die("Input error.\n"); - if (sscanf(line, "%c", &language) != 1) - cloog_die("Input error.\n"); - - if (language == 'f') - options->language = LANGUAGE_FORTRAN; - else - options->language = LANGUAGE_C; - - /* We then read the context data. */ - context = cloog_domain_read_context(options->state, file); - nb_par = cloog_domain_parameter_dimension(context); - - ud = cloog_union_domain_read(file, nb_par, options); - - return cloog_input_alloc(context, ud); -} - -/** - * Create a CloogInput from a CloogDomain context and a CloogUnionDomain. - */ -CloogInput *cloog_input_alloc(CloogDomain *context, CloogUnionDomain *ud) -{ - CloogInput *input; - - input = ALLOC(CloogInput); - if (!input) - cloog_die("memory overflow.\n"); - - input->context = context; - input->ud = ud; - - return input; -} - -void cloog_input_free(CloogInput *input) -{ - cloog_domain_free(input->context); - cloog_union_domain_free(input->ud); - free(input); -} - -static void print_names(FILE *file, CloogUnionDomain *ud, - enum cloog_dim_type type, const char *name) -{ - int i; - - fprintf(file, "\n%d # %s name(s)\n", ud->name[type] ? 1 : 0, name); - if (!ud->name[type]) - return; - - for (i = 0; i < ud->n_name[type]; i++) - fprintf(file, "%s ", ud->name[type][i]); - - fprintf(file, "\n"); -} - -/** - * Dump the .cloog description of a CloogInput and a CloogOptions data structure - * into a file. The generated .cloog file will contain the same information as - * the data structures. The file can be used to run the cloog program on the - * example. - */ -void cloog_input_dump_cloog(FILE *file, CloogInput *input, CloogOptions *opt) -{ - int i, num_statements; - CloogUnionDomain *ud = input->ud; - CloogNamedDomainList *ndl = ud->domain; - - fprintf(file, - "# CLooG -> CLooG\n" - "# This is an automatic dump of a CLooG input file from a " - "CloogInput data\n" - "# structure.\n\n"); - - /* Language. */ - if (opt->language == LANGUAGE_FORTRAN) { - fprintf(file, "# Language: FORTRAN\n"); - fprintf(file, "f\n\n"); - } else { - fprintf(file, "# Language: C\n"); - fprintf(file, "c\n\n"); - } - - /* Context. */ - fprintf(file, "# Context:\n"); - cloog_domain_print_constraints(file, input->context, 1); - - print_names(file, ud, CLOOG_PARAM, "Parameter"); - - /* Statement number. */ - i = 0; - while (ndl != NULL) { - i++; - ndl = ndl->next; - } - num_statements = i; - fprintf(file, "\n# Statement number:\n%d\n\n", num_statements); - - /* Iteration domains. */ - i = 1; - ndl = ud->domain; - while (ndl != NULL) { - fprintf(file, "# Iteration domain of statement %d (%s).\n", i, - ndl->name); - - cloog_domain_print_constraints(file, ndl->domain, 1); - fprintf(file,"\n0 0 0 # For future options.\n\n"); - - i++; - ndl = ndl->next; - } - - print_names(file, ud, CLOOG_ITER, "Iterator"); - - /* Exit, if no scattering is supplied. */ - if (!ud->domain || !ud->domain->scattering) { - fprintf(file, "# No scattering functions.\n0\n\n"); - return; - } - - /* Scattering relations. */ - fprintf(file, - "# --------------------- SCATTERING --------------------\n"); - - fprintf(file, "%d # Scattering functions\n", num_statements); - - i = 1; - ndl = ud->domain; - while (ndl != NULL) { - fprintf(file, "\n# Scattering of statement %d (%s).\n", i, - ndl->name); - - cloog_scattering_print_constraints(file, ndl->scattering); - - i++; - ndl = ndl->next; - } - - print_names(file, ud, CLOOG_SCAT, "Scattering dimension"); -} diff --git a/cloog-0.16.3/source/int.c b/cloog-0.16.3/source/int.c deleted file mode 100644 index 67f62df..0000000 --- a/cloog-0.16.3/source/int.c +++ /dev/null @@ -1,177 +0,0 @@ -#include -#include "../include/cloog/cloog.h" - -#define ALLOC(type) (type*)malloc(sizeof(type)) -#define ALLOCN(type,n) (type*)malloc((n)*sizeof(type)) - -#if defined(CLOOG_INT_INT) || \ - defined(CLOOG_INT_LONG) || \ - defined(CLOOG_INT_LONG_LONG) - -cloog_int_t cloog_gcd(cloog_int_t a, cloog_int_t b) -{ - while (a) { - cloog_int_t t = b % a; - b = a; - a = t; - } - if (b < 0) - b = -b; - return b; -} - -#endif - -struct cloog_vec *cloog_vec_alloc(unsigned size) -{ - int i; - struct cloog_vec *vec; - - vec = ALLOC(struct cloog_vec); - if (!vec) - return NULL; - - vec->p = ALLOCN(cloog_int_t, size); - if (!vec->p) - goto error; - vec->size = size; - - for (i = 0; i < size; ++i) - cloog_int_init(vec->p[i]); - - return vec; -error: - free(vec); - return NULL; -} - -void cloog_vec_free(struct cloog_vec *vec) -{ - int i; - - if (!vec) - return; - - for (i = 0; i < vec->size; ++i) - cloog_int_clear(vec->p[i]); - free(vec->p); - free(vec); -} - -void cloog_vec_dump(struct cloog_vec *vec) -{ - int i; - - for (i = 0; i < vec->size; ++i) { - cloog_int_print(stderr, vec->p[i]); - fprintf(stderr, " "); - } - fprintf(stderr, "\n"); -} - -int cloog_seq_first_non_zero(cloog_int_t *p, unsigned len) -{ - int i; - - for (i = 0; i < len; ++i) - if (!cloog_int_is_zero(p[i])) - return i; - return -1; -} - -void cloog_seq_neg(cloog_int_t *dst, cloog_int_t *src, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - cloog_int_neg(dst[i], src[i]); -} - -void cloog_seq_cpy(cloog_int_t *dst, cloog_int_t *src, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - cloog_int_set(dst[i], src[i]); -} - -static void cloog_seq_scale_down(cloog_int_t *dst, cloog_int_t *src, cloog_int_t m, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - cloog_int_divexact(dst[i], src[i], m); -} - -void cloog_seq_combine(cloog_int_t *dst, cloog_int_t m1, cloog_int_t *src1, - cloog_int_t m2, cloog_int_t *src2, unsigned len) -{ - int i; - cloog_int_t tmp; - - cloog_int_init(tmp); - for (i = 0; i < len; ++i) { - cloog_int_mul(tmp, m1, src1[i]); - cloog_int_addmul(tmp, m2, src2[i]); - cloog_int_set(dst[i], tmp); - } - cloog_int_clear(tmp); -} - -static int cloog_seq_abs_min_non_zero(cloog_int_t *p, unsigned len) -{ - int i, min = cloog_seq_first_non_zero(p, len); - if (min < 0) - return -1; - for (i = min + 1; i < len; ++i) { - if (cloog_int_is_zero(p[i])) - continue; - if (cloog_int_abs_lt(p[i], p[min])) - min = i; - } - return min; -} - -void cloog_seq_gcd(cloog_int_t *p, unsigned len, cloog_int_t *gcd) -{ - int i, min = cloog_seq_abs_min_non_zero(p, len); - - if (min < 0) { - cloog_int_set_si(*gcd, 0); - return; - } - cloog_int_abs(*gcd, p[min]); - for (i = 0; cloog_int_cmp_si(*gcd, 1) > 0 && i < len; ++i) { - if (i == min) - continue; - if (cloog_int_is_zero(p[i])) - continue; - cloog_int_gcd(*gcd, *gcd, p[i]); - } -} - -int cloog_seq_is_neg(cloog_int_t *p1, cloog_int_t *p2, unsigned len) -{ - int i; - - for (i = 0; i < len; ++i) { - if (cloog_int_abs_ne(p1[i], p2[i])) - return 0; - if (cloog_int_is_zero(p1[i])) - continue; - if (cloog_int_eq(p1[i], p2[i])) - return 0; - } - return 1; -} - -void cloog_seq_normalize(cloog_int_t *p, unsigned len) -{ - cloog_int_t gcd; - - if (len == 0) - return; - - cloog_int_init(gcd); - cloog_seq_gcd(p, len, &gcd); - if (!cloog_int_is_zero(gcd) && !cloog_int_is_one(gcd)) - cloog_seq_scale_down(p, p, gcd, len); - cloog_int_clear(gcd); -} diff --git a/cloog-0.16.3/source/isl/backend.c b/cloog-0.16.3/source/isl/backend.c deleted file mode 100644 index 6ddb9f9..0000000 --- a/cloog-0.16.3/source/isl/backend.c +++ /dev/null @@ -1,37 +0,0 @@ -#include - -/** - * Allocate and initialize full state. - */ -CloogState *cloog_state_malloc(void) -{ - return cloog_isl_state_malloc(NULL); -} - -/** - * Allocate and initialize full state for isl backend. - */ -CloogState *cloog_isl_state_malloc(struct isl_ctx *ctx) -{ - CloogState *state; - int allocated = !ctx; - - state = cloog_core_state_malloc(); - if (!ctx) - ctx = isl_ctx_alloc(); - state->backend = isl_alloc_type(ctx, CloogBackend); - state->backend->ctx = ctx; - state->backend->ctx_allocated = allocated; - return state; -} - -/** - * Free state and backend independent parts. - */ -void cloog_state_free(CloogState *state) -{ - if (state->backend->ctx_allocated) - isl_ctx_free(state->backend->ctx); - free(state->backend); - cloog_core_state_free(state); -} diff --git a/cloog-0.16.3/source/isl/constraints.c b/cloog-0.16.3/source/isl/constraints.c deleted file mode 100644 index 873a0b9..0000000 --- a/cloog-0.16.3/source/isl/constraints.c +++ /dev/null @@ -1,967 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - - -#define ALLOC(type) (type*)malloc(sizeof(type)) -#define ALLOCN(type,n) (type*)malloc((n)*sizeof(type)) - -CloogConstraintSet *cloog_constraint_set_from_isl_basic_set(struct isl_basic_set *bset) -{ - return (CloogConstraintSet *)bset; -} - -CloogConstraint *cloog_constraint_from_isl_constraint(struct isl_constraint *constraint) -{ - return (CloogConstraint *)constraint; -} - -isl_constraint *cloog_constraint_to_isl(CloogConstraint *constraint) -{ - return (isl_constraint *)constraint; -} - -isl_basic_set *cloog_constraints_set_to_isl(CloogConstraintSet *constraints) -{ - return (isl_basic_set *)constraints; -} - - -/****************************************************************************** - * Memory leaks hunting * - ******************************************************************************/ - - - -void cloog_constraint_set_free(CloogConstraintSet *constraints) -{ - isl_basic_set_free(cloog_constraints_set_to_isl(constraints)); -} - - -int cloog_constraint_set_contains_level(CloogConstraintSet *constraints, - int level, int nb_parameters) -{ - isl_basic_set *bset; - bset = cloog_constraints_set_to_isl(constraints); - return isl_basic_set_dim(bset, isl_dim_set) >= level; -} - -struct cloog_isl_dim { - enum isl_dim_type type; - int pos; -}; - -static struct cloog_isl_dim basic_set_cloog_dim_to_isl_dim( - __isl_keep isl_basic_set *bset, int pos) -{ - enum isl_dim_type types[] = { isl_dim_set, isl_dim_div, isl_dim_param }; - int i; - struct cloog_isl_dim ci_dim; - - for (i = 0; i < 3; ++i) { - unsigned dim = isl_basic_set_dim(bset, types[i]); - if (pos < dim) { - ci_dim.type = types[i]; - ci_dim.pos = pos; - return ci_dim; - } - pos -= dim; - } - assert(0); -} - -static struct cloog_isl_dim set_cloog_dim_to_isl_dim( - CloogConstraintSet *constraints, int pos) -{ - isl_basic_set *bset; - - bset = cloog_constraints_set_to_isl(constraints); - return basic_set_cloog_dim_to_isl_dim(bset, pos); -} - -/* Check if the variable at position level is defined by an - * equality. If so, return the row number. Otherwise, return -1. - */ -CloogConstraint *cloog_constraint_set_defining_equality( - CloogConstraintSet *constraints, int level) -{ - struct isl_constraint *c; - struct cloog_isl_dim dim; - isl_basic_set *bset; - - bset = cloog_constraints_set_to_isl(constraints); - dim = set_cloog_dim_to_isl_dim(constraints, level - 1); - if (isl_basic_set_has_defining_equality(bset, dim.type, dim.pos, &c)) - return cloog_constraint_from_isl_constraint(c); - else - return NULL; -} - - -struct cloog_isl_other { - int level; - int found; - isl_constraint *u; - isl_constraint *l; -}; - - -/* Set other->found to 1 if the given constraint involves other->level - * and is different from other->u and other->l. - */ -static int check_other_constraint(__isl_take isl_constraint *c, void *user) -{ - struct cloog_isl_other *other = user; - CloogConstraint *cc; - - if (!isl_constraint_is_equal(c, other->l) && - !isl_constraint_is_equal(c, other->u)) { - cc = cloog_constraint_from_isl_constraint(c); - if (cloog_constraint_involves(cc, other->level - 1)) - other->found = 1; - } - - isl_constraint_free(c); - - return other->found ? -1 : 0; -} - - -/* Check if the variable (e) at position level is defined by a - * pair of inequalities - * + -m e + + k1 >= 0 - * <-a, i> + m e + <-b, p> + k2 >= 0 - * with 0 <= k1 + k2 < m - * If so return the row number of the upper bound and set *lower - * to the row number of the lower bound. If not, return -1. - * - * If the variable at position level occurs in any other constraint, - * then we currently return -1. The modulo guard that we would generate - * would still be correct, but we would also need to generate - * guards corresponding to the other constraints, and this has not - * been implemented yet. - */ -CloogConstraint *cloog_constraint_set_defining_inequalities( - CloogConstraintSet *constraints, - int level, CloogConstraint **lower, int nb_par) -{ - struct isl_constraint *u; - struct isl_constraint *l; - struct cloog_isl_dim dim; - struct isl_basic_set *bset; - struct cloog_isl_other other; - - bset = cloog_constraints_set_to_isl(constraints); - dim = set_cloog_dim_to_isl_dim(constraints, level - 1); - if (!isl_basic_set_has_defining_inequalities(bset, dim.type, dim.pos, - &l, &u)) - return cloog_constraint_invalid(); - - other.l = l; - other.u = u; - other.found = 0; - other.level = level; - isl_basic_set_foreach_constraint(bset, &check_other_constraint, &other); - if (other.found) { - isl_constraint_free(l); - isl_constraint_free(u); - *lower = NULL; - return NULL; - } - *lower = cloog_constraint_from_isl_constraint(l); - return cloog_constraint_from_isl_constraint(u); -} - -int cloog_constraint_set_total_dimension(CloogConstraintSet *constraints) -{ - isl_basic_set *bset; - bset = cloog_constraints_set_to_isl(constraints); - return isl_basic_set_total_dim(bset); -} - -int cloog_constraint_set_n_iterators(CloogConstraintSet *constraints, int n_par) -{ - isl_basic_set *bset; - bset = cloog_constraints_set_to_isl(constraints); - return isl_basic_set_dim(bset, isl_dim_set); -} - - -/****************************************************************************** - * Equalities spreading functions * - ******************************************************************************/ - - -/* Equalities are stored inside a Matrix data structure called "equal". - * This matrix has (nb_scattering + nb_iterators + 1) rows (i.e. total - * dimensions + 1, the "+ 1" is because a statement can be included inside an - * external loop without iteration domain), and (nb_scattering + nb_iterators + - * nb_parameters + 2) columns (all unknowns plus the scalar plus the equality - * type). The ith row corresponds to the equality "= 0" for the ith dimension - * iterator. The first column gives the equality type (0: no equality, then - * EQTYPE_* -see pprint.h-). At each recursion of pprint, if an equality for - * the current level is found, the corresponding row is updated. Then the - * equality if it exists is used to simplify expressions (e.g. if we have - * "i+1" while we know that "i=2", we simplify it in "3"). At the end of - * the pprint call, the corresponding row is reset to zero. - */ - -CloogEqualities *cloog_equal_alloc(int n, int nb_levels, int nb_parameters) -{ - int i; - CloogEqualities *equal = ALLOC(CloogEqualities); - - equal->total_dim = nb_levels - 1 + nb_parameters; - equal->n = n; - equal->constraints = ALLOCN(isl_constraint *, n); - equal->types = ALLOCN(int, n); - for (i = 0; i < n; ++i) { - equal->constraints[i] = NULL; - equal->types[i] = EQTYPE_NONE; - } - return equal; -} - -int cloog_equal_total_dimension(CloogEqualities *equal) -{ - return equal->total_dim; -} - -void cloog_equal_free(CloogEqualities *equal) -{ - int i; - - for (i = 0; i < equal->n; ++i) - isl_constraint_free(equal->constraints[i]); - free(equal->constraints); - free(equal->types); - free(equal); -} - -int cloog_equal_count(CloogEqualities *equal) -{ - return equal->n; -} - - -/** - * cloog_constraint_equal_type function : - * This function returns the type of the equality in the constraint (line) of - * (constraints) for the element (level). An equality is 'constant' iff all - * other factors are null except the constant one. It is a 'pure item' iff - * it is equal or opposite to a single variable or parameter. - * Otherwise it is an 'affine expression'. - * For instance: - * i = -13 is constant, i = j, j = -M are pure items, - * j = 2*M, i = j+1, 2*j = M are affine expressions. - * - * - constraints is the matrix of constraints, - * - level is the column number in equal of the element which is 'equal to', - */ -static int cloog_constraint_equal_type(CloogConstraint *cc, int level) -{ - int i; - isl_int c; - int type = EQTYPE_NONE; - struct isl_constraint *constraint = cloog_constraint_to_isl(cc); - - isl_int_init(c); - isl_constraint_get_constant(constraint, &c); - if (!isl_int_is_zero(c)) - type = EQTYPE_CONSTANT; - isl_constraint_get_coefficient(constraint, isl_dim_set, level - 1, &c); - if (!isl_int_is_one(c) && !isl_int_is_negone(c)) - type = EQTYPE_EXAFFINE; - for (i = 0; i < isl_constraint_dim(constraint, isl_dim_param); ++i) { - isl_constraint_get_coefficient(constraint, isl_dim_param, i, &c); - if (isl_int_is_zero(c)) - continue; - if ((!isl_int_is_one(c) && !isl_int_is_negone(c)) || - type != EQTYPE_NONE) { - type = EQTYPE_EXAFFINE; - break; - } - type = EQTYPE_PUREITEM; - } - for (i = 0; i < isl_constraint_dim(constraint, isl_dim_set); ++i) { - if (i == level - 1) - continue; - isl_constraint_get_coefficient(constraint, isl_dim_set, i, &c); - if (isl_int_is_zero(c)) - continue; - if ((!isl_int_is_one(c) && !isl_int_is_negone(c)) || - type != EQTYPE_NONE) { - type = EQTYPE_EXAFFINE; - break; - } - type = EQTYPE_PUREITEM; - } - for (i = 0; i < isl_constraint_dim(constraint, isl_dim_div); ++i) { - isl_constraint_get_coefficient(constraint, isl_dim_div, i, &c); - if (isl_int_is_zero(c)) - continue; - if ((!isl_int_is_one(c) && !isl_int_is_negone(c)) || - type != EQTYPE_NONE) { - type = EQTYPE_EXAFFINE; - break; - } - type = EQTYPE_PUREITEM; - } - isl_int_clear(c); - - if (type == EQTYPE_NONE) - type = EQTYPE_CONSTANT; - - return type; -} - - -int cloog_equal_type(CloogEqualities *equal, int level) -{ - return equal->types[level-1]; -} - - -/** - * cloog_equal_add function: - * This function updates the row (level-1) of the equality matrix (equal) with - * the row that corresponds to the row (line) of the matrix (matrix). - * - equal is the matrix of equalities, - * - matrix is the matrix of constraints, - * - level is the column number in matrix of the element which is 'equal to', - * - line is the line number in matrix of the constraint we want to study, - * - the infos structure gives the user all options on code printing and more. - ** - * line is set to an invalid constraint for equalities that CLooG itself has - * discovered because the lower and upper bound of a loop happened to be equal. - * This situation shouldn't happen in the isl port since isl should - * have found the equality itself. - */ -void cloog_equal_add(CloogEqualities *equal, CloogConstraintSet *matrix, - int level, CloogConstraint *line, int nb_par) -{ - isl_constraint *c; - assert(cloog_constraint_is_valid(line)); - - equal->types[level-1] = cloog_constraint_equal_type(line, level); - c = cloog_constraint_to_isl(line); - equal->constraints[level - 1] = isl_constraint_copy(c); -} - - -/** - * cloog_equal_del function : - * This function reset the equality corresponding to the iterator (level) - * in the equality matrix (equal). - * - July 2nd 2002: first version. - */ -void cloog_equal_del(CloogEqualities *equal, int level) -{ - equal->types[level-1] = EQTYPE_NONE; - isl_constraint_free(equal->constraints[level - 1]); - equal->constraints[level-1] = NULL; -} - - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - -/** - * Function cloog_constraint_set_normalize: - * This function will modify the constraint system in such a way that when - * there is an equality depending on the element at level 'level', there are - * no more (in)equalities depending on this element. - * - * The simplified form of isl automatically satisfies this condition. - */ -void cloog_constraint_set_normalize(CloogConstraintSet *matrix, int level) -{ -} - - - -/** - * cloog_constraint_set_copy function: - * this functions builds and returns a "hard copy" (not a pointer copy) of a - * CloogConstraintSet data structure. - */ -CloogConstraintSet *cloog_constraint_set_copy(CloogConstraintSet *constraints) -{ - isl_basic_set *bset; - bset = cloog_constraints_set_to_isl(constraints); - return cloog_constraint_set_from_isl_basic_set(isl_basic_set_dup(bset)); -} - - -/** - * cloog_constraint_set_simplify function: - * this function simplify all constraints inside the matrix "matrix" thanks to - * an equality matrix "equal" that gives for some elements of the affine - * constraint an equality with other elements, preferably constants. - * For instance, if a row of the matrix contains i+j+3>=0 and the equality - * matrix gives i=n and j=2, the constraint is simplified to n+3>=0. The - * simplified constraints are returned back inside a new simplified matrix. - * - matrix is the set of constraints to simplify, - * - equal is the matrix of equalities, - * - level is a level we don't want to simplify (-1 if none), - * - nb_par is the number of parameters of the program. - ** - * isl should have performed these simplifications already in isl_set_gist. - */ -CloogConstraintSet *cloog_constraint_set_simplify(CloogConstraintSet *matrix, - CloogEqualities *equal, int level, int nb_par) -{ - return cloog_constraint_set_copy(matrix); -} - - -static struct cloog_isl_dim constraint_cloog_dim_to_isl_dim( - CloogConstraint *constraint, int pos) -{ - enum isl_dim_type types[] = { isl_dim_set, isl_dim_div, isl_dim_param }; - int i; - struct cloog_isl_dim ci_dim; - - for (i = 0; i < 3; ++i) { - isl_constraint *c = cloog_constraint_to_isl(constraint); - unsigned dim = isl_constraint_dim(c, types[i]); - if (pos < dim) { - ci_dim.type = types[i]; - ci_dim.pos = pos; - return ci_dim; - } - pos -= dim; - } - assert(0); -} - -static struct clast_expr *div_expr(CloogConstraint *constraint, int pos, - CloogNames *names) -{ - int i, nb_elts; - unsigned dim = cloog_constraint_total_dimension(constraint); - cloog_int_t c; - struct clast_reduction *r; - struct clast_expr *e = NULL; - struct isl_div *div; - - div = isl_constraint_div(cloog_constraint_to_isl(constraint), pos); - - cloog_int_init(c); - for (i = 0, nb_elts = 0; i < dim; ++i) { - struct cloog_isl_dim dim; - - dim = constraint_cloog_dim_to_isl_dim(constraint, i); - isl_div_get_coefficient(div, dim.type, dim.pos, &c); - if (!cloog_int_is_zero(c)) - ++nb_elts; - } - isl_div_get_constant(div, &c); - if (!cloog_int_is_zero(c)) - ++nb_elts; - - r = new_clast_reduction(clast_red_sum, nb_elts); - for (i = 0, nb_elts = 0; i < dim; ++i) { - struct clast_expr *v; - struct cloog_isl_dim dim; - - dim = constraint_cloog_dim_to_isl_dim(constraint, i); - isl_div_get_coefficient(div, dim.type, dim.pos, &c); - if (cloog_int_is_zero(c)) - continue; - - v = cloog_constraint_variable_expr(constraint, 1 + i, names); - - r->elts[nb_elts++] = &new_clast_term(c, v)->expr; - } - isl_div_get_constant(div, &c); - if (!cloog_int_is_zero(c)) - r->elts[nb_elts++] = &new_clast_term(c, NULL)->expr; - - isl_div_get_denominator(div, &c); - e = &new_clast_binary(clast_bin_fdiv, &r->expr, c)->expr; - - cloog_int_clear(c); - - isl_div_free(div); - - return e; -} - -/** - * Return clast_expr corresponding to the variable "level" (1 based) in - * the given constraint. - */ -struct clast_expr *cloog_constraint_variable_expr(CloogConstraint *constraint, - int level, CloogNames *names) -{ - struct cloog_isl_dim dim; - const char *name; - - assert(constraint); - - dim = constraint_cloog_dim_to_isl_dim(constraint, level - 1); - if (dim.type == isl_dim_div) - return div_expr(constraint, dim.pos, names); - - if (dim.type == isl_dim_set) - name = cloog_names_name_at_level(names, level); - else - name = names->parameters[dim.pos]; - - return &new_clast_name(name)->expr; -} - - -/** - * Return true if constraint c involves variable v (zero-based). - */ -int cloog_constraint_involves(CloogConstraint *constraint, int v) -{ - isl_int c; - int res; - - isl_int_init(c); - cloog_constraint_coefficient_get(constraint, v, &c); - res = !isl_int_is_zero(c); - isl_int_clear(c); - return res; -} - -int cloog_constraint_is_lower_bound(CloogConstraint *constraint, int v) -{ - isl_int c; - int res; - - isl_int_init(c); - cloog_constraint_coefficient_get(constraint, v, &c); - res = isl_int_is_pos(c); - isl_int_clear(c); - return res; -} - -int cloog_constraint_is_upper_bound(CloogConstraint *constraint, int v) -{ - isl_int c; - int res; - - isl_int_init(c); - cloog_constraint_coefficient_get(constraint, v, &c); - res = isl_int_is_neg(c); - isl_int_clear(c); - return res; -} - -int cloog_constraint_is_equality(CloogConstraint *constraint) -{ - return isl_constraint_is_equality(cloog_constraint_to_isl(constraint)); -} - -CloogConstraintSet *cloog_constraint_set_drop_constraint( - CloogConstraintSet *constraints, CloogConstraint *constraint) -{ - isl_basic_set *bset; - isl_constraint *c; - - bset = cloog_constraints_set_to_isl(constraints); - c = cloog_constraint_to_isl(cloog_constraint_copy(constraint)); - bset = isl_basic_set_drop_constraint(bset, c); - return cloog_constraint_set_from_isl_basic_set(bset); -} - -void cloog_constraint_coefficient_get(CloogConstraint *constraint, - int var, cloog_int_t *val) -{ - struct cloog_isl_dim dim; - isl_constraint *c; - - if (!constraint) - return; - - dim = constraint_cloog_dim_to_isl_dim(constraint, var); - c = cloog_constraint_to_isl(constraint); - isl_constraint_get_coefficient(c, dim.type, dim.pos, val); -} - -void cloog_constraint_coefficient_set(CloogConstraint *constraint, - int var, cloog_int_t val) -{ - struct cloog_isl_dim dim; - isl_constraint *c; - - assert(constraint); - - dim = constraint_cloog_dim_to_isl_dim(constraint, var); - c = cloog_constraint_to_isl(constraint); - isl_constraint_set_coefficient(c, dim.type, dim.pos, val); -} - -void cloog_constraint_constant_get(CloogConstraint *constraint, cloog_int_t *val) -{ - isl_constraint_get_constant(cloog_constraint_to_isl(constraint), val); -} - -/** - * Copy the coefficient of constraint c into dst in PolyLib order, - * i.e., first the coefficients of the variables, then the coefficients - * of the parameters and finally the constant. - */ -void cloog_constraint_copy_coefficients(CloogConstraint *constraint, - cloog_int_t *dst) -{ - int i; - unsigned dim; - - dim = cloog_constraint_total_dimension(constraint); - - for (i = 0; i < dim; ++i) - cloog_constraint_coefficient_get(constraint, i, dst+i); - cloog_constraint_constant_get(constraint, dst+dim); -} - -CloogConstraint *cloog_constraint_invalid(void) -{ - return NULL; -} - -int cloog_constraint_is_valid(CloogConstraint *constraint) -{ - return constraint != NULL; -} - -int cloog_constraint_total_dimension(CloogConstraint *constraint) -{ - isl_constraint *c; - c = cloog_constraint_to_isl(constraint); - return isl_constraint_dim(c, isl_dim_all); -} - - -/** - * Check whether there is any need for the constraint "upper" on - * "level" to get reduced. - * In case of the isl backend, there should be no need to do so - * if the level corresponds to an existentially quantified variable. - * Moreover, the way reduction is performed does not work for such - * variables since its position might chance during the construction - * of a set for reduction. - */ -int cloog_constraint_needs_reduction(CloogConstraint *upper, int level) -{ - isl_basic_set *bset; - isl_constraint *c; - struct cloog_isl_dim dim; - - c = cloog_constraint_to_isl(upper); - bset = isl_basic_set_from_constraint(isl_constraint_copy(c)); - dim = basic_set_cloog_dim_to_isl_dim(bset, level - 1); - isl_basic_set_free(bset); - - return dim.type == isl_dim_set; -} - - -/** - * Create a CloogConstraintSet containing enough information to perform - * a reduction on the upper equality (in this case lower is an invalid - * CloogConstraint) or the pair of inequalities upper and lower - * from within insert_modulo_guard. - * In the isl backend, we return a CloogConstraintSet containing both - * bounds, as the stride may change during the reduction and we may - * need to recompute the bound on the modulo expression. - */ -CloogConstraintSet *cloog_constraint_set_for_reduction(CloogConstraint *upper, - CloogConstraint *lower) -{ - struct isl_basic_set *bset; - isl_constraint *c; - - c = cloog_constraint_to_isl(upper); - bset = isl_basic_set_from_constraint(isl_constraint_copy(c)); - if (cloog_constraint_is_valid(lower)) { - c = cloog_constraint_to_isl(lower); - bset = isl_basic_set_add_constraint(bset, - isl_constraint_copy(c)); - } - return cloog_constraint_set_from_isl_basic_set(bset); -} - - -static int add_constant_term(CloogConstraint *c, void *user) -{ - isl_int *bound = (isl_int *)user; - isl_int v; - - isl_int_init(v); - - cloog_constraint_constant_get(c, &v); - isl_int_add(*bound, *bound, v); - - isl_int_clear(v); - - return 0; -} - - -/* Return an isl_basic_set representation of the equality stored - * at position i in the given CloogEqualities. - */ -static __isl_give isl_basic_set *equality_to_basic_set(CloogEqualities *equal, - int i) -{ - isl_constraint *c; - isl_basic_set *bset; - unsigned nparam; - unsigned nvar; - - c = isl_constraint_copy(equal->constraints[i]); - bset = isl_basic_set_from_constraint(c); - nparam = isl_basic_set_dim(bset, isl_dim_param); - nvar = isl_basic_set_dim(bset, isl_dim_set); - bset = isl_basic_set_add(bset, isl_dim_set, - equal->total_dim - (nparam + nvar)); - return bset; -} - -/** - * Reduce the modulo guard expressed by "constraints" using equalities - * found in outer nesting levels (stored in "equal"). - * The modulo guard may be an equality or a pair of inequalities. - * In case of a pair of inequalities, *bound contains the bound on the - * corresponding modulo expression. If any reduction is performed - * then this bound is recomputed. - * - * "level" may not correspond to an existentially quantified variable. - * - * We first check if there are any equalities we can use. If not, - * there is again nothing to reduce. - * For the actual reduction, we use isl_basic_set_gist, but this - * function will only perform the reduction we want here if the - * the variable that imposes the modulo constraint has been projected - * out (i.e., turned into an existentially quantified variable). - * After the call to isl_basic_set_gist, we need to move the - * existential variable back into the position where the calling - * function expects it (assuming there are any constraints left). - * We do this by adding an equality between the given dimension and - * the existentially quantified variable. - * - * If there are no existentially quantified variables left, then - * we don't need to add this equality. - * If, on the other hand, the resulting basic set involves more - * than one existentially quantified variable, then the caller - * will not be able to handle the result, so we just return the - * original input instead. - */ -CloogConstraintSet *cloog_constraint_set_reduce(CloogConstraintSet *constraints, - int level, CloogEqualities *equal, int nb_par, cloog_int_t *bound) -{ - int j; - isl_ctx *ctx; - isl_dim *idim; - struct isl_basic_set *eq; - struct isl_basic_map *id; - struct cloog_isl_dim dim; - struct isl_constraint *c; - struct isl_div *div; - unsigned constraints_dim; - unsigned n_div; - isl_basic_set *bset, *orig; - isl_aff *aff; - - bset = cloog_constraints_set_to_isl(constraints); - orig = isl_basic_set_copy(bset); - ctx = isl_basic_set_get_ctx(bset); - dim = set_cloog_dim_to_isl_dim(constraints, level - 1); - assert(dim.type == isl_dim_set); - - eq = NULL; - for (j = 0; j < level - 1; ++j) { - isl_basic_set *bset_j; - if (equal->types[j] != EQTYPE_EXAFFINE) - continue; - bset_j = equality_to_basic_set(equal, j); - if (!eq) - eq = bset_j; - else - eq = isl_basic_set_intersect(eq, bset_j); - } - if (!eq) { - isl_basic_set_free(orig); - return cloog_constraint_set_from_isl_basic_set(bset); - } - - idim = isl_dim_map_from_set(isl_basic_set_get_dim(bset)); - id = isl_basic_map_identity(idim); - id = isl_basic_map_remove_dims(id, isl_dim_out, dim.pos, 1); - bset = isl_basic_set_apply(bset, isl_basic_map_copy(id)); - bset = isl_basic_set_apply(bset, isl_basic_map_reverse(id)); - - constraints_dim = isl_basic_set_dim(bset, isl_dim_set); - eq = isl_basic_set_remove_dims(eq, isl_dim_set, constraints_dim, - isl_basic_set_dim(eq, isl_dim_set) - constraints_dim); - bset = isl_basic_set_gist(bset, eq); - n_div = isl_basic_set_dim(bset, isl_dim_div); - if (n_div > 1) { - isl_basic_set_free(bset); - return cloog_constraint_set_from_isl_basic_set(orig); - } - if (n_div < 1) { - isl_basic_set_free(orig); - return cloog_constraint_set_from_isl_basic_set(bset); - } - - div = isl_basic_set_div(isl_basic_set_copy(bset), 0); - aff = isl_aff_from_div(div); - aff = isl_aff_add_coefficient_si(aff, isl_dim_set, dim.pos, -1); - c = isl_equality_from_aff(aff); - bset = isl_basic_set_add_constraint(bset, c); - - isl_int_set_si(*bound, 0); - constraints = cloog_constraint_set_from_isl_basic_set(bset); - cloog_constraint_set_foreach_constraint(constraints, - add_constant_term, bound); - - isl_basic_set_free(orig); - return cloog_constraint_set_from_isl_basic_set(bset); -} - -CloogConstraint *cloog_constraint_copy(CloogConstraint *constraint) -{ - return cloog_constraint_from_isl_constraint( - isl_constraint_copy(cloog_constraint_to_isl(constraint))); -} - -void cloog_constraint_release(CloogConstraint *constraint) -{ - isl_constraint_free(cloog_constraint_to_isl(constraint)); -} - -struct cloog_isl_foreach { - int (*fn)(CloogConstraint *constraint, void *user); - void *user; -}; - -static int cloog_isl_foreach_cb(__isl_take isl_constraint *c, void *user) -{ - struct cloog_isl_foreach *data = (struct cloog_isl_foreach *)user; - int ret; - - if (isl_constraint_is_div_constraint(c)) { - isl_constraint_free(c); - return 0; - } - - ret = data->fn(cloog_constraint_from_isl_constraint(c), data->user); - - isl_constraint_free(c); - - return ret; -} - -int cloog_constraint_set_foreach_constraint(CloogConstraintSet *constraints, - int (*fn)(CloogConstraint *constraint, void *user), void *user) -{ - struct cloog_isl_foreach data = { fn, user }; - isl_basic_set *bset; - - bset = cloog_constraints_set_to_isl(constraints); - return isl_basic_set_foreach_constraint(bset, - cloog_isl_foreach_cb, &data); -} - -CloogConstraint *cloog_equal_constraint(CloogEqualities *equal, int j) -{ - isl_constraint *c; - - c = isl_constraint_copy(equal->constraints[j]); - return cloog_constraint_from_isl_constraint(c); -} - -/* Given a stride constraint on iterator i (specified by level) of the form - * - * i = f(outer iterators) + stride * f(existentials) - * - * extract f as an isl_aff. - */ -static isl_aff *extract_stride_offset(__isl_keep isl_constraint *c, - int level, CloogStride *stride) -{ - int i; - isl_dim *dim = isl_constraint_get_dim(c); - isl_local_space *ls = isl_local_space_from_dim(dim); - isl_aff *offset = isl_aff_zero(ls); - isl_int u; - unsigned nparam, nvar; - - isl_int_init(u); - - nparam = isl_constraint_dim(c, isl_dim_param); - nvar = isl_constraint_dim(c, isl_dim_set); - - for (i = 0; i < nparam; ++i) { - isl_constraint_get_coefficient(c, isl_dim_param, i, &u); - isl_int_mul(u, u, stride->factor); - offset = isl_aff_set_coefficient(offset, isl_dim_param, i, u); - } - for (i = 0; i < nvar; ++i) { - if (i == level - 1) - continue; - isl_constraint_get_coefficient(c, isl_dim_set, i, &u); - isl_int_mul(u, u, stride->factor); - offset = isl_aff_set_coefficient(offset, isl_dim_set, i, u); - } - isl_constraint_get_constant(c, &u); - isl_int_mul(u, u, stride->factor); - offset = isl_aff_set_constant(offset, u); - - isl_int_clear(u); - - return offset; -} - -/* Update the given lower bound on level such that it satisfies the stride - * constraint. The computation performed here is essentially the same - * as that performed in constraint_stride_lower_c. - * - * We update the constraint - * - * a i + f >= 0 - * - * to - * - * i >= s * ceil((-f/a - d)/s) + d - * - * with s the stride and d the offset encoded in the stride constraint. - */ -CloogConstraint *cloog_constraint_stride_lower_bound(CloogConstraint *c, - int level, CloogStride *stride) -{ - isl_constraint *stride_c = cloog_constraint_to_isl(stride->constraint); - isl_constraint *bound = cloog_constraint_to_isl(c); - isl_aff *offset; - isl_aff *lower; - - lower = isl_constraint_get_bound(bound, isl_dim_set, level - 1); - isl_constraint_free(bound); - - offset = extract_stride_offset(stride_c, level, stride); - - lower = isl_aff_sub(lower, isl_aff_copy(offset)); - lower = isl_aff_scale_down(lower, stride->stride); - lower = isl_aff_ceil(lower); - lower = isl_aff_scale(lower, stride->stride); - lower = isl_aff_add(lower, offset); - lower = isl_aff_neg(lower); - lower = isl_aff_add_coefficient_si(lower, isl_dim_set, level - 1, 1); - - bound = isl_inequality_from_aff(lower); - - return cloog_constraint_from_isl_constraint(bound); -} diff --git a/cloog-0.16.3/source/isl/domain.c b/cloog-0.16.3/source/isl/domain.c deleted file mode 100644 index f2807c9..0000000 --- a/cloog-0.16.3/source/isl/domain.c +++ /dev/null @@ -1,1836 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -CloogDomain *cloog_domain_from_isl_set(struct isl_set *set) -{ - set = isl_set_detect_equalities(set); - set = isl_set_compute_divs(set); - return (CloogDomain *)set; -} - -__isl_give isl_set *isl_set_from_cloog_domain(CloogDomain *domain) -{ - return (isl_set *)domain; -} - -CloogScattering *cloog_scattering_from_isl_map(struct isl_map *map) -{ - return (CloogScattering *)map; -} - -__isl_give isl_map *isl_map_from_cloog_scattering(CloogScattering *scattering) -{ - return (isl_map *)scattering; -} - - -/** - * Returns true if each scattering dimension is defined in terms - * of the original iterators. - */ -int cloog_scattering_fully_specified(CloogScattering *scattering, - CloogDomain *domain) -{ - isl_map *map = isl_map_from_cloog_scattering(scattering); - return isl_map_is_single_valued(map); -} - - -CloogConstraintSet *cloog_domain_constraints(CloogDomain *domain) -{ - isl_basic_set *bset; - isl_set *set = isl_set_from_cloog_domain(domain); - assert(isl_set_n_basic_set(set) == 1); - bset = isl_set_copy_basic_set(set); - return cloog_constraint_set_from_isl_basic_set(bset); -} - - -void cloog_domain_print_constraints(FILE *foo, CloogDomain *domain, - int print_number) -{ - isl_basic_set *bset; - isl_set *set = isl_set_from_cloog_domain(domain); - - if (print_number) - isl_set_print(set, foo, 0, ISL_FORMAT_EXT_POLYLIB); - else { - assert(isl_set_n_basic_set(set) == 1); - bset = isl_set_copy_basic_set(set); - isl_basic_set_print(bset, foo, - 0, NULL, NULL, ISL_FORMAT_POLYLIB); - isl_basic_set_free(bset); - } -} - - -void cloog_scattering_print_constraints(FILE *foo, CloogScattering *scattering) -{ - isl_map *map = isl_map_from_cloog_scattering(scattering); - isl_map_print(map, foo, 0, ISL_FORMAT_EXT_POLYLIB); -} - - -void cloog_domain_free(CloogDomain * domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - isl_set_free(set); -} - - -void cloog_scattering_free(CloogScattering *scatt) -{ - isl_map *map = isl_map_from_cloog_scattering(scatt); - isl_map_free(map); -} - - -CloogDomain * cloog_domain_copy(CloogDomain * domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return cloog_domain_from_isl_set(isl_set_copy(set)); -} - - -/** - * cloog_domain_convex function: - * Computes the convex hull of domain. - */ -CloogDomain *cloog_domain_convex(CloogDomain *domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - set = isl_set_from_basic_set(isl_set_convex_hull(isl_set_copy(set))); - return cloog_domain_from_isl_set(set); -} - - -/** - * cloog_domain_simple_convex: - * Given a list (union) of polyhedra, this function returns a "simple" - * convex hull of this union. In particular, the constraints of the - * the returned polyhedron consist of (parametric) lower and upper - * bounds on individual variables and constraints that appear in the - * original polyhedra. - */ -CloogDomain *cloog_domain_simple_convex(CloogDomain *domain) -{ - struct isl_basic_set *hull; - isl_set *set = isl_set_from_cloog_domain(domain); - - if (cloog_domain_isconvex(domain)) - return cloog_domain_copy(domain); - - hull = isl_set_bounded_simple_hull(isl_set_copy(set)); - return cloog_domain_from_isl_set(isl_set_from_basic_set(hull)); -} - - -/** - * cloog_domain_simplify function: - * Given two polyhedral domains (dom1) and (dom2), - * this function finds the largest domain set (or the smallest list - * of non-redundant constraints), that when intersected with polyhedral - * domain (dom2) equals (dom1)intersect(dom2). The output is a new CloogDomain - * structure with a polyhedral domain with the "redundant" constraints removed. - * NB: the second domain is required not to be a union. - */ -CloogDomain *cloog_domain_simplify(CloogDomain *dom1, CloogDomain *dom2) -{ - isl_set *set1 = isl_set_from_cloog_domain(dom1); - isl_set *set2 = isl_set_from_cloog_domain(dom2); - set1 = isl_set_gist(isl_set_copy(set1), isl_set_copy(set2)); - return cloog_domain_from_isl_set(set1); -} - - -/** - * cloog_domain_union function: - * This function returns a new polyhedral domain which is the union of - * two polyhedral domains (dom1) U (dom2). - * Frees dom1 and dom2; - */ -CloogDomain *cloog_domain_union(CloogDomain *dom1, CloogDomain *dom2) -{ - isl_set *set1 = isl_set_from_cloog_domain(dom1); - isl_set *set2 = isl_set_from_cloog_domain(dom2); - set1 = isl_set_union(set1, set2); - return cloog_domain_from_isl_set(set1); -} - - - -/** - * cloog_domain_intersection function: - * This function returns a new polyhedral domain which is the intersection of - * two polyhedral domains (dom1) \cap (dom2). - */ -CloogDomain *cloog_domain_intersection(CloogDomain *dom1, CloogDomain *dom2) -{ - isl_set *set1 = isl_set_from_cloog_domain(dom1); - isl_set *set2 = isl_set_from_cloog_domain(dom2); - set1 = isl_set_intersect(isl_set_copy(set1), isl_set_copy(set2)); - return cloog_domain_from_isl_set(set1); -} - - -/** - * cloog_domain_difference function: - * Returns the set difference domain \ minus. - */ -CloogDomain *cloog_domain_difference(CloogDomain *domain, CloogDomain *minus) -{ - isl_set *set1 = isl_set_from_cloog_domain(domain); - isl_set *set2 = isl_set_from_cloog_domain(minus); - set1 = isl_set_subtract(isl_set_copy(set1), isl_set_copy(set2)); - return cloog_domain_from_isl_set(set1); -} - - -/** - * cloog_domain_sort function: - * This function topologically sorts (nb_doms) domains. Here (doms) is an - * array of pointers to CloogDomains, (nb_doms) is the number of domains, - * (level) is the level to consider for partial ordering (nb_par) is the - * parameter space dimension, (permut) if not NULL, is an array of (nb_doms) - * integers that contains a permutation specification after call in order to - * apply the topological sorting. - */ -void cloog_domain_sort(CloogDomain **doms, unsigned nb_doms, unsigned level, - int *permut) -{ - int i, j, k, cmp; - struct isl_ctx *ctx; - unsigned char **follows; - isl_set *set_i, *set_j; - isl_basic_set *bset_i, *bset_j; - - if (!nb_doms) - return; - set_i = isl_set_from_cloog_domain(doms[0]); - ctx = isl_set_get_ctx(set_i); - for (i = 0; i < nb_doms; i++) { - set_i = isl_set_from_cloog_domain(doms[i]); - assert(isl_set_n_basic_set(set_i) == 1); - } - - follows = isl_alloc_array(ctx, unsigned char *, nb_doms); - assert(follows); - for (i = 0; i < nb_doms; ++i) { - follows[i] = isl_alloc_array(ctx, unsigned char, nb_doms); - assert(follows[i]); - for (j = 0; j < nb_doms; ++j) - follows[i][j] = 0; - } - - for (i = 1; i < nb_doms; ++i) { - for (j = 0; j < i; ++j) { - if (follows[i][j] || follows[j][i]) - continue; - set_i = isl_set_from_cloog_domain(doms[i]); - set_j = isl_set_from_cloog_domain(doms[j]); - bset_i = isl_set_copy_basic_set(set_i); - bset_j = isl_set_copy_basic_set(set_j); - cmp = isl_basic_set_compare_at(bset_i, bset_j, level-1); - isl_basic_set_free(bset_i); - isl_basic_set_free(bset_j); - if (!cmp) - continue; - if (cmp > 0) { - follows[i][j] = 1; - for (k = 0; k < i; ++k) - follows[i][k] |= follows[j][k]; - } else { - follows[j][i] = 1; - for (k = 0; k < i; ++k) - follows[k][i] |= follows[k][j]; - } - } - } - - for (i = 0, j = 0; i < nb_doms; j = (j + 1) % nb_doms) { - for (k = 0; k < nb_doms; ++k) - if (follows[j][k]) - break; - if (k < nb_doms) - continue; - for (k = 0; k < nb_doms; ++k) - follows[k][j] = 0; - follows[j][j] = 1; - permut[i] = 1 + j; - ++i; - } - - for (i = 0; i < nb_doms; ++i) - free(follows[i]); - free(follows); -} - - -/** - * Check whether there is or may be any value of dom1 at the given level - * that is greater than or equal to a value of dom2 at the same level. - * - * Return - * 1 is there is or may be a greater-than pair. - * 0 if there is no greater-than pair, but there may be an equal-to pair - * -1 if there is definitely no such pair - */ -int cloog_domain_follows(CloogDomain *dom1, CloogDomain *dom2, unsigned level) -{ - isl_set *set1 = isl_set_from_cloog_domain(dom1); - isl_set *set2 = isl_set_from_cloog_domain(dom2); - int follows; - - follows = isl_set_follows_at(set1, set2, level - 1); - assert(follows >= -1); - - return follows; -} - - -/** - * cloog_domain_empty function: - * Returns an empty domain of the same dimensions as template. - */ -CloogDomain *cloog_domain_empty(CloogDomain *template) -{ - isl_set *set = isl_set_from_cloog_domain(template); - return cloog_domain_from_isl_set(isl_set_empty_like(set)); -} - - -/** - * Return 1 if the specified dimension has both an upper and a lower bound. - */ -int cloog_domain_is_bounded(CloogDomain *dom, unsigned level) -{ - isl_set *set = isl_set_from_cloog_domain(dom); - return isl_set_dim_is_bounded(set, isl_dim_set, level - 1); -} - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ - - -/** - * cloog_domain_print_structure : - * this function is a more human-friendly way to display the CloogDomain data - * structure, it only shows the constraint system and includes an indentation - * level (level) in order to work with others print_structure functions. - */ -void cloog_domain_print_structure(FILE *file, CloogDomain *domain, int level, - const char *name) -{ - int i ; - isl_set *set = isl_set_from_cloog_domain(domain); - - /* Go to the right level. */ - for (i = 0; i < level; i++) - fprintf(file, "|\t"); - - if (!set) { - fprintf(file, "+-- Null CloogDomain\n"); - return; - } - fprintf(file, "+-- %s\n", name); - for (i = 0; i < level+1; ++i) - fprintf(file, "|\t"); - - isl_set_print(set, file, 0, ISL_FORMAT_ISL); - - fprintf(file, "\n"); -} - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ - - -void cloog_domain_list_free(CloogDomainList *list) -{ - CloogDomainList *next; - - for ( ; list; list = next) { - next = list->next; - cloog_domain_free(list->domain); - free(list); - } -} - - -/** - * cloog_scattering_list_free function: - * This function frees the allocated memory for a CloogScatteringList structure. - */ -void cloog_scattering_list_free(CloogScatteringList *list) -{ - while (list != NULL) { - CloogScatteringList *temp = list->next; - isl_map *map = isl_map_from_cloog_scattering(list->scatt); - isl_map_free(map); - free(list); - list = temp; - } -} - - -/****************************************************************************** - * Reading function * - ******************************************************************************/ - - -/** - * cloog_domain_read_context function: - * Read parameter domain. - */ -CloogDomain *cloog_domain_read_context(CloogState *state, FILE *input) -{ - struct isl_ctx *ctx = state->backend->ctx; - isl_set *set; - - set = isl_set_read_from_file(ctx, input, 0); - set = isl_set_move_dims(set, isl_dim_param, 0, - isl_dim_set, 0, isl_set_dim(set, isl_dim_set)); - - return cloog_domain_from_isl_set(set); -} - - -/** - * cloog_domain_from_context - * Reinterpret context by turning parameters into variables. - */ -CloogDomain *cloog_domain_from_context(CloogDomain *context) -{ - isl_set *set = isl_set_from_cloog_domain(context); - - set = isl_set_move_dims(set, isl_dim_set, 0, - isl_dim_param, 0, isl_set_dim(set, isl_dim_param)); - - return cloog_domain_from_isl_set(set); -} - - -/** - * cloog_domain_union_read function: - * This function reads a union of polyhedra into a file (input) and - * returns a pointer to a CloogDomain containing the read information. - */ -CloogDomain *cloog_domain_union_read(CloogState *state, - FILE *input, int nb_parameters) -{ - struct isl_ctx *ctx = state->backend->ctx; - struct isl_set *set; - - set = isl_set_read_from_file(ctx, input, nb_parameters); - return cloog_domain_from_isl_set(set); -} - - -/** - * cloog_domain_read_scattering function: - * This function reads in a scattering function from the file input. - * - * We try to read the scattering relation as a map, but if it is - * specified in the original PolyLib format, then isl_map_read_from_file - * will treat the input as a set return a map with zero input dimensions. - * In this case, we need to decompose the set into a map from - * scattering dimensions to domain dimensions and then invert the - * resulting map. - */ -CloogScattering *cloog_domain_read_scattering(CloogDomain *domain, FILE *input) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - isl_ctx *ctx = isl_set_get_ctx(set); - struct isl_map *scat; - unsigned nparam; - unsigned dim; - unsigned n_scat; - - dim = isl_set_dim(set, isl_dim_set); - nparam = isl_set_dim(set, isl_dim_param); - scat = isl_map_read_from_file(ctx, input, nparam); - if (isl_map_dim(scat, isl_dim_in) != dim) { - n_scat = isl_map_dim(scat, isl_dim_out) - dim; - scat = isl_map_move_dims(scat, isl_dim_in, 0, - isl_dim_out, n_scat, dim); - } - return cloog_scattering_from_isl_map(scat); -} - -/****************************************************************************** - * CloogMatrix Reading function * - ******************************************************************************/ - -/** - * isl_constraint_read_from_matrix: - * Convert a single line of a matrix to a isl_constraint. - * Returns a pointer to the constraint if successful; NULL otherwise. - */ -static struct isl_constraint *isl_constraint_read_from_matrix( - struct isl_dim *dim, cloog_int_t *row) -{ - struct isl_constraint *constraint; - int j; - int nvariables = isl_dim_size(dim, isl_dim_set); - int nparam = isl_dim_size(dim, isl_dim_param); - - if (cloog_int_is_zero(row[0])) - constraint = isl_equality_alloc(dim); - else - constraint = isl_inequality_alloc(dim); - - for (j = 0; j < nvariables; ++j) - isl_constraint_set_coefficient(constraint, isl_dim_out, j, - row[1 + j]); - - for (j = 0; j < nparam; ++j) - isl_constraint_set_coefficient(constraint, isl_dim_param, j, - row[1 + nvariables + j]); - - isl_constraint_set_constant(constraint, row[1 + nvariables + nparam]); - - return constraint; -} - -/** - * isl_basic_set_read_from_matrix: - * Convert matrix to basic_set. The matrix contains nparam parameter columns. - * Returns a pointer to the basic_set if successful; NULL otherwise. - */ -static struct isl_basic_set *isl_basic_set_read_from_matrix(struct isl_ctx *ctx, - CloogMatrix* matrix, int nparam) -{ - struct isl_dim *dim; - struct isl_basic_set *bset; - int i; - unsigned nrows, ncolumns; - - nrows = matrix->NbRows; - ncolumns = matrix->NbColumns; - int nvariables = ncolumns - 2 - nparam; - - dim = isl_dim_set_alloc(ctx, nparam, nvariables); - - bset = isl_basic_set_universe(isl_dim_copy(dim)); - - for (i = 0; i < nrows; ++i) { - cloog_int_t *row = matrix->p[i]; - struct isl_constraint *constraint = - isl_constraint_read_from_matrix(isl_dim_copy(dim), row); - bset = isl_basic_set_add_constraint(bset, constraint); - } - - isl_dim_free(dim); - - return bset; -} - -/** - * cloog_domain_from_cloog_matrix: - * Create a CloogDomain containing the constraints described in matrix. - * nparam is the number of parameters contained in the domain. - * Returns a pointer to the CloogDomain if successful; NULL otherwise. - */ -CloogDomain *cloog_domain_from_cloog_matrix(CloogState *state, - CloogMatrix *matrix, int nparam) -{ - struct isl_ctx *ctx = state->backend->ctx; - struct isl_basic_set *bset; - - bset = isl_basic_set_read_from_matrix(ctx, matrix, nparam); - - return cloog_domain_from_isl_set(isl_set_from_basic_set(bset)); -} - -/** - * cloog_scattering_from_cloog_matrix: - * Create a CloogScattering containing the constraints described in matrix. - * nparam is the number of parameters contained in the domain. - * Returns a pointer to the CloogScattering if successful; NULL otherwise. - */ -CloogScattering *cloog_scattering_from_cloog_matrix(CloogState *state, - CloogMatrix *matrix, int nb_scat, int nb_par) -{ - struct isl_ctx *ctx = state->backend->ctx; - struct isl_basic_set *bset; - struct isl_basic_map *scat; - struct isl_dim *dims; - unsigned dim; - - bset = isl_basic_set_read_from_matrix(ctx, matrix, nb_par); - dim = isl_basic_set_n_dim(bset) - nb_scat; - dims = isl_dim_alloc(ctx, nb_par, nb_scat, dim); - - scat = isl_basic_map_from_basic_set(bset, dims); - scat = isl_basic_map_reverse(scat); - return cloog_scattering_from_isl_map(isl_map_from_basic_map(scat)); -} - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - - - -/** - * cloog_domain_isempty function: - */ -int cloog_domain_isempty(CloogDomain *domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return isl_set_is_empty(set); -} - - -/** - * cloog_domain_universe function: - * This function returns the complete dim-dimensional space. - */ -CloogDomain *cloog_domain_universe(CloogState *state, unsigned dim) -{ - struct isl_dim *dims; - struct isl_basic_set *bset; - - dims = isl_dim_set_alloc(state->backend->ctx, 0, dim); - bset = isl_basic_set_universe(dims); - return cloog_domain_from_isl_set(isl_set_from_basic_set(bset)); -} - - -/** - * cloog_domain_project function: - * This function returns the projection of - * (domain) on the (level) first dimensions (i.e. outer loops). - */ -CloogDomain *cloog_domain_project(CloogDomain *domain, int level) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - set = isl_set_remove_dims(isl_set_copy(set), isl_dim_set, - level, isl_set_n_dim(set) - level); - set = isl_set_compute_divs(set); - if (level > 0) - set = isl_set_remove_divs_involving_dims(set, - isl_dim_set, level - 1, 1); - return cloog_domain_from_isl_set(set); -} - - -/** - * cloog_domain_extend function: - * This function returns the (domain) given as input with (dim) - * dimensions and (nb_par) parameters. - * This function does not free (domain), and returns a new CloogDomain. - */ -CloogDomain *cloog_domain_extend(CloogDomain *domain, int dim) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - set = isl_set_extend(isl_set_copy(set), isl_set_n_param(set), dim); - return cloog_domain_from_isl_set(set); -} - - -/** - * cloog_domain_never_integral function: - * For us, an equality like 3*i -4 = 0 is always false since 4%3 != 0. - * There is no need to check for such constraints explicitly for the isl - * backend. - */ -int cloog_domain_never_integral(CloogDomain * domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return isl_set_is_empty(set); -} - - -/** - * Check whether the loop at "level" is executed at most once. - * We construct a map that maps all remaining variables to this iterator - * and check whether this map is single valued. - * - * Alternatively, we could have mapped the domain through a mapping - * [p] -> { [..., i] -> [..., i'] : i' > i } - * and then taken the intersection of the original domain and the transformed - * domain. If this intersection is empty, then the corresponding - * loop is executed at most once. - */ -int cloog_domain_is_otl(CloogDomain *domain, int level) -{ - int otl; - isl_set *set = isl_set_from_cloog_domain(domain); - isl_map *map; - - map = isl_map_from_domain(isl_set_copy(set)); - map = isl_map_move_dims(map, isl_dim_out, 0, isl_dim_in, level - 1, 1); - otl = isl_map_is_single_valued(map); - isl_map_free(map); - - return otl; -} - - -/** - * cloog_domain_stride function: - * This function finds the stride imposed to unknown with the column number - * 'strided_level' in order to be integral. For instance, if we have a - * constraint like -i - 2j + 2k = 0, and we consider k, then k can be integral - * only if (i + 2j)%2 = 0. Then only if i%2 = 0. Then k imposes a stride 2 to - * the unknown i. The function returns the imposed stride in a parameter field. - * - domain is the set of constraint we have to consider, - * - strided_level is the column number of the unknown for which a stride have - * to be found, - * - looking_level is the column number of the unknown that impose a stride to - * the first unknown. - * - stride is the stride that is returned back as a function parameter. - * - offset is the value of the constant c if the condition is of the shape - * (i + c)%s = 0, s being the stride. - */ -void cloog_domain_stride(CloogDomain *domain, int strided_level, - cloog_int_t *stride, cloog_int_t *offset) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - isl_set_dim_residue_class(set, strided_level - 1, stride, offset); - if (!isl_int_is_zero(*offset)) - isl_int_sub(*offset, *stride, *offset); - return; -} - - -struct cloog_can_stride { - int level; - int can_stride; -}; - -static int constraint_can_stride(__isl_take isl_constraint *c, void *user) -{ - struct cloog_can_stride *ccs = (struct cloog_can_stride *)user; - int i; - isl_int v; - unsigned n_div; - - if (isl_constraint_is_equality(c)) { - isl_constraint_free(c); - return 0; - } - - isl_int_init(v); - isl_constraint_get_coefficient(c, isl_dim_set, ccs->level - 1, &v); - if (isl_int_is_pos(v)) { - n_div = isl_constraint_dim(c, isl_dim_div); - for (i = 0; i < n_div; ++i) { - isl_constraint_get_coefficient(c, isl_dim_div, i, &v); - if (!isl_int_is_zero(v)) - break; - } - if (i < n_div) - ccs->can_stride = 0; - } - isl_int_clear(v); - isl_constraint_free(c); - - return 0; -} - -static int basic_set_can_stride(__isl_take isl_basic_set *bset, void *user) -{ - struct cloog_can_stride *ccs = (struct cloog_can_stride *)user; - int r; - - r = isl_basic_set_foreach_constraint(bset, constraint_can_stride, ccs); - isl_basic_set_free(bset); - return r; -} - - -/** - * Return 1 if CLooG is allowed to perform stride detection on level "level" - * and 0 otherwise. - * Currently, stride detection is only allowed when none of the lower - * bound constraints involve any existentially quantified variables. - * The reason is that the current isl interface does not make it - * easy to construct an integer division that depends on other integer - * divisions. - * By not allowing existentially quantified variables in the constraints, - * we can ignore them in cloog_domain_stride_lower_bound. - */ -int cloog_domain_can_stride(CloogDomain *domain, int level) -{ - struct cloog_can_stride ccs = { level, 1 }; - isl_set *set = isl_set_from_cloog_domain(domain); - int r; - r = isl_set_foreach_basic_set(set, basic_set_can_stride, &ccs); - assert(r == 0); - return ccs.can_stride; -} - - -struct cloog_stride_lower { - int level; - CloogStride *stride; - isl_set *set; - isl_basic_set *bounds; -}; - -/* If the given constraint is a lower bound on csl->level, then add - * a lower bound to csl->bounds that makes sure that the remainder - * of the smallest value on division by csl->stride is equal to csl->offset. - * - * In particular, the given lower bound is of the form - * - * a i + f >= 0 - * - * where f may depend on the parameters and other iterators. - * The stride is s and the offset is d. - * The lower bound -f/a may not satisfy the above condition. In fact, - * it may not even be integral. We want to round this value of i up - * to the nearest value that satisfies the condition and add the corresponding - * lower bound constraint. This nearest value is obtained by rounding - * i - d up to the nearest multiple of s. - * That is, we first subtract d - * - * i' = -f/a - d - * - * then we round up to the nearest multiple of s - * - * i'' = s * ceil(i'/s) - * - * and finally, we add d again - * - * i''' = i'' + d - * - * and impose the constraint i >= i'''. - * - * We find - * - * i'' = s * ceil((-f - a * d)/(a * s)) = - s * floor((f + a * d)/(a * s)) - * - * i >= - s * floor((f + a * d)/(a * s)) + d - * - * or - * i + s * floor((f + a * d)/(a * s)) - d >= 0 - */ -static int constraint_stride_lower(__isl_take isl_constraint *c, void *user) -{ - struct cloog_stride_lower *csl = (struct cloog_stride_lower *)user; - isl_int v; - isl_constraint *bound; - isl_aff *b; - - if (isl_constraint_is_equality(c)) { - isl_constraint_free(c); - return 0; - } - - isl_int_init(v); - isl_constraint_get_coefficient(c, isl_dim_set, csl->level - 1, &v); - if (!isl_int_is_pos(v)) { - isl_int_clear(v); - isl_constraint_free(c); - - return 0; - } - - b = isl_constraint_get_bound(c, isl_dim_set, csl->level - 1); - - b = isl_aff_neg(b); - b = isl_aff_add_constant(b, csl->stride->offset); - b = isl_aff_scale_down(b, csl->stride->stride); - b = isl_aff_floor(b); - b = isl_aff_scale(b, csl->stride->stride); - isl_int_neg(v, csl->stride->offset); - b = isl_aff_add_constant(b, v); - b = isl_aff_add_coefficient_si(b, isl_dim_set, csl->level - 1, 1); - - bound = isl_inequality_from_aff(b); - - csl->bounds = isl_basic_set_add_constraint(csl->bounds, bound); - - isl_int_clear(v); - isl_constraint_free(c); - - return 0; -} - -/* This functions performs essentially the same operation as - * constraint_stride_lower, the only difference being that the offset d - * is not a constant, but an affine expression in terms of the parameters - * and earlier variables. In particular the affine expression is equal - * to the coefficients of stride->constraint multiplied by stride->factor. - * As in constraint_stride_lower, we add an extra bound - * - * i + s * floor((f + a * d)/(a * s)) - d >= 0 - * - * for each lower bound - * - * a i + f >= 0 - * - * where d is not the aforementioned affine expression. - */ -static int constraint_stride_lower_c(__isl_take isl_constraint *c, void *user) -{ - struct cloog_stride_lower *csl = (struct cloog_stride_lower *)user; - isl_int v; - isl_constraint *bound; - isl_constraint *csl_c; - isl_aff *d, *b; - - if (isl_constraint_is_equality(c)) { - isl_constraint_free(c); - return 0; - } - - isl_int_init(v); - isl_constraint_get_coefficient(c, isl_dim_set, csl->level - 1, &v); - if (!isl_int_is_pos(v)) { - isl_int_clear(v); - isl_constraint_free(c); - - return 0; - } - - csl_c = cloog_constraint_to_isl(csl->stride->constraint); - - d = isl_constraint_get_aff(csl_c); - d = isl_aff_drop_dims(d, isl_dim_div, 0, isl_aff_dim(d, isl_dim_div)); - d = isl_aff_set_coefficient_si(d, isl_dim_set, csl->level - 1, 0); - d = isl_aff_scale(d, csl->stride->factor); - - b = isl_constraint_get_bound(c, isl_dim_set, csl->level - 1); - - b = isl_aff_neg(b); - b = isl_aff_add(b, isl_aff_copy(d)); - b = isl_aff_scale_down(b, csl->stride->stride); - b = isl_aff_floor(b); - b = isl_aff_scale(b, csl->stride->stride); - b = isl_aff_sub(b, d); - b = isl_aff_add_coefficient_si(b, isl_dim_set, csl->level - 1, 1); - - bound = isl_inequality_from_aff(b); - - csl->bounds = isl_basic_set_add_constraint(csl->bounds, bound); - - isl_int_clear(v); - isl_constraint_free(c); - - return 0; -} - -static int basic_set_stride_lower(__isl_take isl_basic_set *bset, void *user) -{ - struct cloog_stride_lower *csl = (struct cloog_stride_lower *)user; - int r; - - csl->bounds = isl_basic_set_universe_like(bset); - if (csl->stride->constraint) - r = isl_basic_set_foreach_constraint(bset, - &constraint_stride_lower_c, csl); - else - r = isl_basic_set_foreach_constraint(bset, - &constraint_stride_lower, csl); - bset = isl_basic_set_intersect(bset, csl->bounds); - csl->set = isl_set_union(csl->set, isl_set_from_basic_set(bset)); - - return r; -} - -/** - * Update the lower bounds at level "level" to the given stride information. - * That is, make sure that the remainder on division by "stride" - * is equal to "offset". - */ -CloogDomain *cloog_domain_stride_lower_bound(CloogDomain *domain, int level, - CloogStride *stride) -{ - struct cloog_stride_lower csl; - isl_set *set = isl_set_from_cloog_domain(domain); - int r; - - csl.stride = stride; - csl.level = level; - csl.set = isl_set_empty_like(set); - - r = isl_set_foreach_basic_set(set, basic_set_stride_lower, &csl); - assert(r == 0); - - cloog_domain_free(domain); - return cloog_domain_from_isl_set(csl.set); -} - - -/* Add stride constraint, if any, to domain. - */ -CloogDomain *cloog_domain_add_stride_constraint(CloogDomain *domain, - CloogStride *stride) -{ - isl_constraint *c; - isl_set *set; - - if (!stride || !stride->constraint) - return domain; - - set = isl_set_from_cloog_domain(domain); - c = isl_constraint_copy(cloog_constraint_to_isl(stride->constraint)); - - set = isl_set_add_constraint(set, c); - - return cloog_domain_from_isl_set(set); -} - - -/** - * cloog_domain_lazy_equal function: - * This function returns 1 if the domains given as input are the same, 0 if it - * is unable to decide. - */ -int cloog_domain_lazy_equal(CloogDomain *d1, CloogDomain *d2) -{ - isl_set *set1 = isl_set_from_cloog_domain(d1); - isl_set *set2 = isl_set_from_cloog_domain(d2); - return isl_set_fast_is_equal(set1, set2); -} - -struct cloog_bound_split { - isl_set *set; - int level; - int lower; - int upper; -}; - -static int constraint_bound_split(__isl_take isl_constraint *c, void *user) -{ - struct cloog_bound_split *cbs = (struct cloog_bound_split *)user; - isl_int v; - int i; - int handle = 0; - - isl_int_init(v); - isl_constraint_get_coefficient(c, isl_dim_set, cbs->level - 1, &v); - if (!cbs->lower && isl_int_is_pos(v)) - cbs->lower = handle = 1; - else if (!cbs->upper && isl_int_is_neg(v)) - cbs->upper = handle = 1; - if (handle) { - for (i = 0; i < isl_set_dim(cbs->set, isl_dim_param); ++i) { - isl_constraint_get_coefficient(c, isl_dim_param, i, &v); - if (isl_int_is_zero(v)) - continue; - cbs->set = isl_set_split_dims(cbs->set, - isl_dim_param, i, 1); - } - } - isl_int_clear(v); - isl_constraint_free(c); - - return (cbs->lower && cbs->upper) ? -1 : 0; -} - -static int basic_set_bound_split(__isl_take isl_basic_set *bset, void *user) -{ - struct cloog_bound_split *cbs = (struct cloog_bound_split *)user; - int r; - - cbs->lower = 0; - cbs->upper = 0; - r = isl_basic_set_foreach_constraint(bset, constraint_bound_split, cbs); - isl_basic_set_free(bset); - return ((!cbs->lower || !cbs->upper) && r < 0) ? -1 : 0; -} - -/** - * Return a union of sets S_i such that the convex hull of "dom", - * when intersected with one the sets S_i, will have an upper and - * lower bound for the dimension at "level" (provided "dom" itself - * has such bounds for the dimensions). - * - * We currently take a very simple approach. For each of the basic - * sets in "dom" we pick a lower and an upper bound and split the - * range of any parameter involved in these two bounds in a - * nonnegative and a negative part. This ensures that the symbolic - * constant in these two constraints are themselves bounded and - * so there will be at least one upper and one lower bound - * in the convex hull. - */ -CloogDomain *cloog_domain_bound_splitter(CloogDomain *dom, int level) -{ - struct cloog_bound_split cbs; - isl_set *set = isl_set_from_cloog_domain(dom); - int r; - cbs.level = level; - cbs.set = isl_set_universe_like(set); - r = isl_set_foreach_basic_set(set, basic_set_bound_split, &cbs); - assert(r == 0); - return cloog_domain_from_isl_set(cbs.set); -} - - -/* Check whether the union of scattering functions over all domains - * is obviously injective. - */ -static int injective_scattering(CloogScatteringList *list) -{ - isl_map *map; - isl_union_map *umap; - int injective; - int i = 0; - char name[30]; - - if (!list) - return 1; - - map = isl_map_copy(isl_map_from_cloog_scattering(list->scatt)); - snprintf(name, sizeof(name), "S%d", i); - map = isl_map_set_tuple_name(map, isl_dim_in, name); - umap = isl_union_map_from_map(map); - - for (list = list->next, ++i; list; list = list->next, ++i) { - map = isl_map_copy(isl_map_from_cloog_scattering(list->scatt)); - snprintf(name, sizeof(name), "S%d", i); - map = isl_map_set_tuple_name(map, isl_dim_in, name); - umap = isl_union_map_add_map(umap, map); - } - - injective = isl_union_map_plain_is_injective(umap); - - isl_union_map_free(umap); - - return injective; -} - - -/** - * cloog_scattering_lazy_block function: - * This function returns 1 if the two scattering functions s1 and s2 given - * as input are the same (except possibly for the final dimension, where we - * allow a difference of 1), assuming that the domains on which this - * scatterings are applied are the same. - * In fact this function answers the question "can I - * safely consider the two domains as only one with two statements (a block) ?". - * A difference of 1 in the final dimension is only allowed if the - * entire scattering function is injective. - * - s1 and s2 are the two domains to check for blocking, - * - scattering is the linked list of all domains, - * - scattdims is the total number of scattering dimentions. - */ -int cloog_scattering_lazy_block(CloogScattering *s1, CloogScattering *s2, - CloogScatteringList *scattering, int scattdims) -{ - int i; - struct isl_dim *dim; - struct isl_map *rel; - struct isl_set *delta; - isl_map *map1 = isl_map_from_cloog_scattering(s1); - isl_map *map2 = isl_map_from_cloog_scattering(s2); - int fixed, block; - isl_int cst; - unsigned n_scat; - - n_scat = isl_map_dim(map1, isl_dim_out); - if (n_scat != isl_map_dim(map2, isl_dim_out)) - return 0; - - dim = isl_map_get_dim(map1); - dim = isl_dim_map_from_set(isl_dim_domain(dim)); - rel = isl_map_identity(dim); - rel = isl_map_apply_domain(rel, isl_map_copy(map1)); - rel = isl_map_apply_range(rel, isl_map_copy(map2)); - delta = isl_map_deltas(rel); - isl_int_init(cst); - for (i = 0; i < n_scat; ++i) { - fixed = isl_set_fast_dim_is_fixed(delta, i, &cst); - if (fixed != 1) - break; - if (isl_int_is_zero(cst)) - continue; - if (i + 1 < n_scat) - break; - if (!isl_int_is_one(cst)) - break; - if (!injective_scattering(scattering)) - break; - } - block = i >= n_scat; - isl_int_clear(cst); - isl_set_free(delta); - return block; -} - - -/** - * cloog_domain_lazy_disjoint function: - * This function returns 1 if the domains given as input are disjoint, 0 if it - * is unable to decide. - */ -int cloog_domain_lazy_disjoint(CloogDomain *d1, CloogDomain *d2) -{ - isl_set *set1 = isl_set_from_cloog_domain(d1); - isl_set *set2 = isl_set_from_cloog_domain(d2); - return isl_set_fast_is_disjoint(set1, set2); -} - - -/** - * cloog_scattering_list_lazy_same function: - * This function returns 1 if two domains in the list are the same, 0 if it - * is unable to decide. - */ -int cloog_scattering_list_lazy_same(CloogScatteringList *list) -{ - CloogScatteringList *one, *other; - isl_map *one_map, *other_map; - - for (one = list; one; one = one->next) { - one_map = isl_map_from_cloog_scattering(one->scatt); - for (other = one->next; other; other = other->next) { - other_map = isl_map_from_cloog_scattering(other->scatt); - if (isl_map_fast_is_equal(one_map, other_map)) - return 1; - } - } - return 0; -} - -int cloog_domain_dimension(CloogDomain * domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return isl_set_dim(set, isl_dim_set); -} - -int cloog_domain_parameter_dimension(CloogDomain *domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return isl_set_dim(set, isl_dim_param); -} - -int cloog_scattering_dimension(CloogScattering *scatt, CloogDomain *domain) -{ - isl_map *map = isl_map_from_cloog_scattering(scatt); - return isl_map_dim(map, isl_dim_out); -} - -int cloog_domain_isconvex(CloogDomain * domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return isl_set_n_basic_set(set) <= 1; -} - - -/** - * cloog_domain_cut_first function: - * This function splits off and returns the first convex set in the - * union "domain". The remainder of the union is returned in rest. - * The original "domain" itself is destroyed and may not be used - * after a call to this function. - */ -CloogDomain *cloog_domain_cut_first(CloogDomain *domain, CloogDomain **rest) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - struct isl_basic_set *first; - - first = isl_set_copy_basic_set(set); - set = isl_set_drop_basic_set(set, first); - *rest = cloog_domain_from_isl_set(set); - - return cloog_domain_from_isl_set(isl_set_from_basic_set(first)); -} - - -/** - * Given a union domain, try to find a simpler representation - * using fewer sets in the union. - * The original "domain" itself is destroyed and may not be used - * after a call to this function. - */ -CloogDomain *cloog_domain_simplify_union(CloogDomain *domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return cloog_domain_from_isl_set(isl_set_coalesce(set)); -} - - -/** - * cloog_scattering_lazy_isscalar function: - * this function returns 1 if the scattering dimension 'dimension' in the - * scattering 'scatt' is constant. - * If value is not NULL, then it is set to the constant value of dimension. - */ -int cloog_scattering_lazy_isscalar(CloogScattering *scatt, int dimension, - cloog_int_t *value) -{ - isl_map *map = isl_map_from_cloog_scattering(scatt); - return isl_map_fast_is_fixed(map, isl_dim_out, dimension, value); -} - - -/** - * cloog_domain_lazy_isconstant function: - * this function returns 1 if the dimension 'dimension' in the - * domain 'domain' is constant. - * If value is not NULL, then it is set to the constant value of dimension. - */ -int cloog_domain_lazy_isconstant(CloogDomain *domain, int dimension, - cloog_int_t *value) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return isl_set_fast_dim_is_fixed(set, dimension, value); -} - - -/** - * cloog_scattering_erase_dimension function: - * this function returns a CloogDomain structure builds from 'domain' where - * we removed the dimension 'dimension' and every constraint involving this - * dimension. - */ -CloogScattering *cloog_scattering_erase_dimension(CloogScattering *scattering, - int dimension) -{ - isl_map *map = isl_map_from_cloog_scattering(scattering); - map = isl_map_remove_dims(isl_map_copy(map), isl_dim_out, dimension, 1); - return cloog_scattering_from_isl_map(map); -} - -/** - * cloog_domain_cube: - * Construct and return a dim-dimensional cube, with values ranging - * between min and max in each dimension. - */ -CloogDomain *cloog_domain_cube(CloogState *state, - int dim, cloog_int_t min, cloog_int_t max) -{ - int i; - struct isl_basic_set *cube; - struct isl_basic_set *interval; - struct isl_basic_set_list *list; - - if (dim == 0) - return cloog_domain_universe(state, dim); - - interval = isl_basic_set_interval(state->backend->ctx, min, max); - list = isl_basic_set_list_alloc(state->backend->ctx, dim); - for (i = 0; i < dim; ++i) - list = isl_basic_set_list_add(list, isl_basic_set_copy(interval)); - isl_basic_set_free(interval); - cube = isl_basic_set_list_product(list); - return cloog_domain_from_isl_set(isl_set_from_basic_set(cube)); -} - - -/** - * cloog_domain_scatter function: - * This function add the scattering (scheduling) informations to a domain. - */ -CloogDomain *cloog_domain_scatter(CloogDomain *domain, CloogScattering *scatt) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - isl_map *map = isl_map_from_cloog_scattering(scatt); - - map = isl_map_reverse(isl_map_copy(map)); - map = isl_map_intersect_range(map, set); - set = isl_set_flatten(isl_map_wrap(map)); - return cloog_domain_from_isl_set(set); -} - -static int add_domain_from_map(__isl_take isl_map *map, void *user) -{ - isl_dim *dim; - const char *name; - CloogDomain *domain; - CloogScattering *scat; - CloogUnionDomain **ud = (CloogUnionDomain **)user; - - dim = isl_map_get_dim(map); - name = isl_dim_get_tuple_name(dim, isl_dim_in); - domain = cloog_domain_from_isl_set(isl_map_domain(isl_map_copy(map))); - scat = cloog_scattering_from_isl_map(map); - *ud = cloog_union_domain_add_domain(*ud, name, domain, scat, NULL); - isl_dim_free(dim); - - return 0; -} - -/** - * Construct a CloogUnionDomain from an isl_union_map representing - * a global scattering function. The input is a mapping from different - * spaces (different tuple names and possibly different dimensions) - * to a common space. The iteration domains are set to the domains - * in each space. The statement names are set to the names of the - * spaces. The parameter names of the result are set to those of - * the input, but the iterator and scattering dimension names are - * left unspecified. - */ -CloogUnionDomain *cloog_union_domain_from_isl_union_map( - __isl_take isl_union_map *umap) -{ - int i; - int nparam; - isl_dim *dim; - CloogUnionDomain *ud; - - dim = isl_union_map_get_dim(umap); - nparam = isl_dim_size(dim, isl_dim_param); - - ud = cloog_union_domain_alloc(nparam); - - for (i = 0; i < nparam; ++i) { - const char *s = isl_dim_get_name(dim, isl_dim_param, i); - ud = cloog_union_domain_set_name(ud, CLOOG_PARAM, i, s); - } - isl_dim_free(dim); - - if (isl_union_map_foreach_map(umap, &add_domain_from_map, &ud) < 0) { - isl_union_map_free(umap); - cloog_union_domain_free(ud); - assert(0); - } - - isl_union_map_free(umap); - - return ud; -} - -static int count_same_name(__isl_keep isl_dim *dim, - enum isl_dim_type type, unsigned pos, const char *name) -{ - enum isl_dim_type t; - unsigned p, s; - int count = 0; - int len = strlen(name); - - for (t = isl_dim_param; t <= type && t <= isl_dim_out; ++t) { - s = t == type ? pos : isl_dim_size(dim, t); - for (p = 0; p < s; ++p) { - const char *n = isl_dim_get_name(dim, t, p); - if (n && !strncmp(n, name, len)) - count++; - } - } - return count; -} - -static int add_domain(__isl_take isl_set *set, void *user) -{ - int i, nvar; - isl_ctx *ctx; - isl_dim *dim; - char buffer[20]; - const char *name; - CloogDomain *domain; - CloogUnionDomain **ud = (CloogUnionDomain **)user; - - ctx = isl_set_get_ctx(set); - dim = isl_set_get_dim(set); - name = isl_dim_get_tuple_name(dim, isl_dim_set); - set = isl_set_flatten(set); - set = isl_set_set_tuple_name(set, NULL); - domain = cloog_domain_from_isl_set(set); - *ud = cloog_union_domain_add_domain(*ud, name, domain, NULL, NULL); - - nvar = isl_dim_size(dim, isl_dim_set); - for (i = 0; i < nvar; ++i) { - char *long_name = NULL; - int n; - - name = isl_dim_get_name(dim, isl_dim_set, i); - if (!name) { - snprintf(buffer, sizeof(buffer), "i%d", i); - name = buffer; - } - n = count_same_name(dim, isl_dim_set, i, name); - if (n) { - int size = strlen(name) + 10; - long_name = isl_alloc_array(ctx, char, size); - if (!long_name) - cloog_die("memory overflow.\n"); - snprintf(long_name, size, "%s_%d", name, n); - name = long_name; - } - *ud = cloog_union_domain_set_name(*ud, CLOOG_ITER, i, name); - free(long_name); - } - isl_dim_free(dim); - - return 0; -} - -/** - * Construct a CloogUnionDomain from an isl_union_set. - * The statement names are set to the names of the - * spaces. The parameter and iterator names of the result are set to those of - * the input, but the scattering dimension names are left unspecified. - */ -CloogUnionDomain *cloog_union_domain_from_isl_union_set( - __isl_take isl_union_set *uset) -{ - int i; - int nparam; - isl_dim *dim; - CloogUnionDomain *ud; - - dim = isl_union_set_get_dim(uset); - nparam = isl_dim_size(dim, isl_dim_param); - - ud = cloog_union_domain_alloc(nparam); - - for (i = 0; i < nparam; ++i) { - const char *s = isl_dim_get_name(dim, isl_dim_param, i); - ud = cloog_union_domain_set_name(ud, CLOOG_PARAM, i, s); - } - isl_dim_free(dim); - - if (isl_union_set_foreach_set(uset, &add_domain, &ud) < 0) { - isl_union_set_free(uset); - cloog_union_domain_free(ud); - assert(0); - } - - isl_union_set_free(uset); - - return ud; -} - -/* Computes x, y and g such that g = gcd(a,b) and a*x+b*y = g */ -static void Euclid(cloog_int_t a, cloog_int_t b, - cloog_int_t *x, cloog_int_t *y, cloog_int_t *g) -{ - cloog_int_t c, d, e, f, tmp; - - cloog_int_init(c); - cloog_int_init(d); - cloog_int_init(e); - cloog_int_init(f); - cloog_int_init(tmp); - cloog_int_abs(c, a); - cloog_int_abs(d, b); - cloog_int_set_si(e, 1); - cloog_int_set_si(f, 0); - while (cloog_int_is_pos(d)) { - cloog_int_tdiv_q(tmp, c, d); - cloog_int_mul(tmp, tmp, f); - cloog_int_sub(e, e, tmp); - cloog_int_tdiv_q(tmp, c, d); - cloog_int_mul(tmp, tmp, d); - cloog_int_sub(c, c, tmp); - cloog_int_swap(c, d); - cloog_int_swap(e, f); - } - cloog_int_set(*g, c); - if (cloog_int_is_zero(a)) - cloog_int_set_si(*x, 0); - else if (cloog_int_is_pos(a)) - cloog_int_set(*x, e); - else cloog_int_neg(*x, e); - if (cloog_int_is_zero(b)) - cloog_int_set_si(*y, 0); - else { - cloog_int_mul(tmp, a, *x); - cloog_int_sub(tmp, c, tmp); - cloog_int_divexact(*y, tmp, b); - } - cloog_int_clear(c); - cloog_int_clear(d); - cloog_int_clear(e); - cloog_int_clear(f); - cloog_int_clear(tmp); -} - -/* Construct a CloogStride from the given constraint for the given level, - * if possible. - * We first compute the gcd of the coefficients of the existentially - * quantified variables and then remove any common factors it has - * with the coefficient at the given level. - * The result is the value of the stride and if it is not one, - * then it is possible to construct a CloogStride. - * The constraint leading to the stride is stored in the CloogStride - * as well a value (factor) such that the product of this value - * and the coefficient at the given level is equal to -1 modulo the stride. - */ -static CloogStride *construct_stride(isl_constraint *c, int level) -{ - int i, n, sign; - isl_int v, m, gcd, stride, factor; - CloogStride *s; - - if (!c) - return NULL; - - isl_int_init(v); - isl_int_init(m); - isl_int_init(gcd); - isl_int_init(factor); - isl_int_init(stride); - - isl_constraint_get_coefficient(c, isl_dim_set, level - 1, &v); - sign = isl_int_sgn(v); - isl_int_abs(m, v); - - isl_int_set_si(gcd, 0); - n = isl_constraint_dim(c, isl_dim_div); - for (i = 0; i < n; ++i) { - isl_constraint_get_coefficient(c, isl_dim_div, i, &v); - isl_int_gcd(gcd, gcd, v); - } - - isl_int_gcd(v, m, gcd); - isl_int_divexact(stride, gcd, v); - - if (isl_int_is_zero(stride) || isl_int_is_one(stride)) - s = NULL; - else { - Euclid(m, stride, &factor, &v, &gcd); - if (sign > 0) - isl_int_neg(factor, factor); - - c = isl_constraint_copy(c); - s = cloog_stride_alloc_from_constraint(stride, - cloog_constraint_from_isl_constraint(c), factor); - } - - isl_int_clear(stride); - isl_int_clear(factor); - isl_int_clear(gcd); - isl_int_clear(m); - isl_int_clear(v); - - return s; -} - -struct cloog_isl_find_stride_data { - int level; - CloogStride *stride; -}; - -/* Check if the given constraint can be used to derive - * a stride on the iterator identified by data->level. - * We first check that there are some existentially quantified variables - * and that the coefficient at data->level is non-zero. - * Then we call construct_stride for further checks and the actual - * construction of the CloogStride. - */ -static int find_stride(__isl_take isl_constraint *c, void *user) -{ - struct cloog_isl_find_stride_data *data; - int n; - isl_int v; - - data = (struct cloog_isl_find_stride_data *)user; - - if (data->stride) { - isl_constraint_free(c); - return 0; - } - - n = isl_constraint_dim(c, isl_dim_div); - if (n == 0) { - isl_constraint_free(c); - return 0; - } - - isl_int_init(v); - - isl_constraint_get_coefficient(c, isl_dim_set, data->level - 1, &v); - if (!isl_int_is_zero(v)) - data->stride = construct_stride(c, data->level); - - isl_int_clear(v); - - isl_constraint_free(c); - - return 0; -} - -/* Check if the given list of domains has a common stride on the given level. - * If so, return a pointer to a CloogStride object. If not, return NULL. - * - * We project out all later variables, take the union and compute - * the affine hull of the union. Then we check the (equality) - * constraints in this affine hull for imposing a stride. - */ -CloogStride *cloog_domain_list_stride(CloogDomainList *list, int level) -{ - struct cloog_isl_find_stride_data data = { level, NULL }; - isl_set *set; - isl_basic_set *aff; - int first = level; - int n; - int r; - - set = isl_set_from_cloog_domain(list->domain); - n = isl_set_dim(set, isl_dim_set) - first; - set = isl_set_project_out(isl_set_copy(set), isl_dim_set, first, n); - - for (list = list->next; list; list = list->next) { - isl_set *set_i = isl_set_from_cloog_domain(list->domain); - n = isl_set_dim(set_i, isl_dim_set) - first; - set_i = isl_set_project_out(isl_set_copy(set_i), - isl_dim_set, first, n); - set = isl_set_union(set, set_i); - } - aff = isl_set_affine_hull(set); - - r = isl_basic_set_foreach_constraint(aff, &find_stride, &data); - assert(r == 0); - - isl_basic_set_free(aff); - - return data.stride; -} - -struct cloog_can_unroll { - int can_unroll; - int level; - isl_constraint *c; - isl_set *set; - isl_int *n; -}; - - -/* - * Check if the given lower bound can be used for unrolling. - * If the lower bound involves any existentially quantified - * variables, we currently punt. - * Otherwise we compute the maximal value of (i - ceil(l) + 1), - * with l the given lower bound and i the iterator identified by level. - */ -static int is_valid_unrolling_lower_bound(struct cloog_can_unroll *ccu, - __isl_keep isl_constraint *c) -{ - unsigned n_div; - isl_aff *aff; - enum isl_lp_result res; - - n_div = isl_constraint_dim(c, isl_dim_div); - if (isl_constraint_involves_dims(c, isl_dim_div, 0, n_div)) - return 0; - - aff = isl_constraint_get_bound(c, isl_dim_set, ccu->level - 1); - aff = isl_aff_ceil(aff); - aff = isl_aff_neg(aff); - aff = isl_aff_add_coefficient_si(aff, isl_dim_set, ccu->level - 1, 1); - res = isl_set_max(ccu->set, aff, ccu->n); - isl_aff_free(aff); - - if (res == isl_lp_unbounded) - return 0; - - assert(res == isl_lp_ok); - - cloog_int_add_ui(*ccu->n, *ccu->n, 1); - - return 1; -} - - -/* Check if we can unroll based on the given constraint. - * Only lower bounds can be used. - * Record it if it turns out to be usable and if we haven't recorded - * any other constraint already. - */ -static int constraint_can_unroll(__isl_take isl_constraint *c, void *user) -{ - struct cloog_can_unroll *ccu = (struct cloog_can_unroll *)user; - isl_int v; - - isl_int_init(v); - isl_constraint_get_coefficient(c, isl_dim_set, ccu->level - 1, &v); - if (isl_int_is_pos(v)) { - if (!ccu->c && is_valid_unrolling_lower_bound(ccu, c)) - ccu->c = isl_constraint_copy(c); - } - isl_int_clear(v); - isl_constraint_free(c); - - return 0; -} - - -/* Check if we can unroll the domain at the current level. - * If the domain is a union, we cannot. Otherwise, we check the - * constraints. - */ -static int basic_set_can_unroll(__isl_take isl_basic_set *bset, void *user) -{ - struct cloog_can_unroll *ccu = (struct cloog_can_unroll *)user; - int r = 0; - - if (ccu->c || !ccu->can_unroll) - ccu->can_unroll = 0; - else { - bset = isl_basic_set_remove_redundancies(bset); - r = isl_basic_set_foreach_constraint(bset, - &constraint_can_unroll, ccu); - } - isl_basic_set_free(bset); - return r; -} - - -/* Check if we can unroll the given domain at the given level, and - * if so, return the single lower bound in *lb and an upper bound - * on the number of iterations in *n. - * If we cannot unroll, return 0 and set *lb to NULL. - * - * We can unroll, if we can identify a lower bound on level - * such that the number of iterations is bounded by a constant. - */ -int cloog_domain_can_unroll(CloogDomain *domain, int level, cloog_int_t *n, - CloogConstraint **lb) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - struct cloog_can_unroll ccu = { 1, level, NULL, set, n }; - int r; - - *lb = NULL; - r = isl_set_foreach_basic_set(set, &basic_set_can_unroll, &ccu); - assert(r == 0); - if (!ccu.c) - ccu.can_unroll = 0; - if (!ccu.can_unroll) { - isl_constraint_free(ccu.c); - return 0; - } - - *lb = cloog_constraint_from_isl_constraint(ccu.c); - - return ccu.can_unroll; -} - - -/* Fix the iterator i at the given level to l + o, - * where l is prescribed by the constraint lb and o is equal to offset. - * In particular, if lb is the constraint - * - * a i >= f(j) - * - * then l = ceil(f(j)/a). - */ -CloogDomain *cloog_domain_fixed_offset(CloogDomain *domain, - int level, CloogConstraint *lb, cloog_int_t offset) -{ - isl_aff *aff; - isl_set *set = isl_set_from_cloog_domain(domain); - isl_constraint *c; - isl_constraint *eq; - - c = cloog_constraint_to_isl(lb); - aff = isl_constraint_get_bound(c, isl_dim_set, level - 1); - aff = isl_aff_ceil(aff); - aff = isl_aff_add_coefficient_si(aff, isl_dim_set, level - 1, -1); - aff = isl_aff_add_constant(aff, offset); - eq = isl_equality_from_aff(aff); - set = isl_set_add_constraint(set, eq); - - return cloog_domain_from_isl_set(set); -} diff --git a/cloog-0.16.3/source/loop.c b/cloog-0.16.3/source/loop.c deleted file mode 100644 index f3d0ef9..0000000 --- a/cloog-0.16.3/source/loop.c +++ /dev/null @@ -1,2665 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** loop.c ** - **-------------------------------------------------------------------** - ** First version: october 26th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ -/* CAUTION: the english used for comments is probably the worst you ever read, - * please feel free to correct and improve it ! - */ - -# include -# include -# include "../include/cloog/cloog.h" - -#define ALLOC(type) (type*)malloc(sizeof(type)) - - -/****************************************************************************** - * Memory leaks hunting * - ******************************************************************************/ - - -/** - * These functions and global variables are devoted to memory leaks hunting: we - * want to know at each moment how many CloogLoop structures had been allocated - * (cloog_loop_allocated) and how many had been freed (cloog_loop_freed). - * Each time a CloogLoog structure is allocated, a call to the function - * cloog_loop_leak_up() must be carried out, and respectively - * cloog_loop_leak_down() when a CloogLoop structure is freed. The special - * variable cloog_loop_max gives the maximal number of CloogLoop structures - * simultaneously alive (i.e. allocated and non-freed) in memory. - * - July 3rd->11th 2003: first version (memory leaks hunt and correction). - */ - - -static void cloog_loop_leak_up(CloogState *state) -{ - state->loop_allocated++; - if ((state->loop_allocated - state->loop_freed) > state->loop_max) - state->loop_max = state->loop_allocated - state->loop_freed; -} - - -static void cloog_loop_leak_down(CloogState *state) -{ - state->loop_freed++; -} - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ - - -/** - * cloog_loop_print_structure function: - * Displays a loop structure in a way that trends to be understandable without - * falling in a deep depression or, for the lucky ones, getting a headache... - * Written by Olivier Chorier, Luc Marchaud, Pierre Martin and Romain Tartiere. - * - April 24th 2005: Initial version. - * - May 21rd 2005: - New parameter `F' for destination file (ie stdout), - * - Minor tweaks. - * - May 26th 2005: Memory leak hunt. - * - June 2nd 2005: (Ced) Integration and minor fixes. - * -June 22nd 2005: (Ced) Adaptation for GMP. - */ -void cloog_loop_print_structure(FILE * file, CloogLoop * loop, int level) -{ int i, j, first=1 ; - - if (loop) - { /* Go to the right level. */ - for (i=0; idomain, level+1, "CloogDomain"); - - /* Print the stride. */ - for(j=0; j<=level; j++) - fprintf(file,"|\t") ; - if (loop->stride) { - fprintf(file, "Stride: "); - cloog_int_print(file, loop->stride->stride); - fprintf(file, "\n"); - fprintf(file, "Offset: "); - cloog_int_print(file, loop->stride->offset); - fprintf(file, "\n"); - } - - /* A blank line. */ - for(j=0; j<=level+1; j++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the block. */ - cloog_block_print_structure(file,loop->block,level+1) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print inner if any. */ - if (loop->inner) - cloog_loop_print_structure(file,loop->inner,level+1) ; - - /* And let's go for the next one. */ - loop = loop->next ; - - /* One more time something that is here only for a better look. */ - if (!loop) - { /* Two blank lines if this is the end of the linked list. */ - for (j=0; j<2; j++) - { for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - - fprintf(file,"\n") ; - } - } - else - { /* A special blank line if the is a next loop. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - fprintf(file,"V\n") ; - } - } -} - - -/** - * cloog_loop_print function: - * This function prints the content of a CloogLoop structure (start) into a - * file (file, possibly stdout). - * - June 2nd 2005: Now this very old function (probably as old as CLooG) is - * only a frontend to cloog_loop_print_structure, with a quite - * better human-readable representation. - */ -void cloog_loop_print(FILE * file, CloogLoop * loop) -{ cloog_loop_print_structure(file,loop,0) ; -} - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ - - -/** - * cloog_loop_free function: - * This function frees the allocated memory for a CloogLoop structure (loop), - * and frees its inner loops and its next loops. - * - June 22nd 2005: Adaptation for GMP. - */ -void cloog_loop_free(CloogLoop * loop) -{ CloogLoop * next ; - - while (loop != NULL) { - cloog_loop_leak_down(loop->state); - - next = loop->next ; - cloog_domain_free(loop->domain) ; - cloog_domain_free(loop->unsimplified); - cloog_block_free(loop->block) ; - if (loop->inner != NULL) - cloog_loop_free(loop->inner) ; - - cloog_stride_free(loop->stride); - free(loop) ; - loop = next ; - } -} - - -/** - * cloog_loop_free_parts function: - * This function frees the allocated memory for some parts of a CloogLoop - * structure (loop), each other argument is a boolean having to be set to 1 if - * we want to free the corresponding part, 0 otherwise. This function applies - * the same freeing policy to its inner ans next loops recursively. - * - July 3rd 2003: first version. - * - June 22nd 2005: Adaptation for GMP. - */ -void cloog_loop_free_parts(loop, domain, block, inner, next) -CloogLoop * loop ; -int domain, block, inner, next ; -{ CloogLoop * follow ; - - while (loop != NULL) { - cloog_loop_leak_down(loop->state); - follow = loop->next ; - - if (domain) - cloog_domain_free(loop->domain) ; - - if (block) - cloog_block_free(loop->block) ; - - if ((inner) && (loop->inner != NULL)) - cloog_loop_free_parts(loop->inner,domain,block,inner,1) ; - - cloog_domain_free(loop->unsimplified); - cloog_stride_free(loop->stride); - free(loop) ; - if (next) - loop = follow ; - else - loop = NULL ; - } -} - - -/****************************************************************************** - * Reading functions * - ******************************************************************************/ - - -/** - * Construct a CloogLoop structure from a given iteration domain - * and statement number. - */ -CloogLoop *cloog_loop_from_domain(CloogState *state, CloogDomain *domain, - int number) -{ - int nb_iterators; - CloogLoop * loop ; - CloogStatement * statement ; - - /* Memory allocation and information reading for the first domain: */ - loop = cloog_loop_malloc(state); - /* domain. */ - loop->domain = domain; - if (loop->domain != NULL) - nb_iterators = cloog_domain_dimension(loop->domain); - else - nb_iterators = 0 ; - /* included statement block. */ - statement = cloog_statement_alloc(state, number + 1); - loop->block = cloog_block_alloc(statement, 0, NULL, nb_iterators); - - return loop ; -} - - -/** - * cloog_loop_read function: - * This function reads loop data from a file (foo, possibly stdin) and - * returns a pointer to a CloogLoop structure containing the read information. - * This function can be used only for input file reading, when one loop is - * associated with one statement. - * - number is the statement block number carried by the loop (-1 if none). - * - nb_parameters is the number of parameters. - ** - * - September 9th 2002: first version. - * - April 16th 2005: adaptation to new CloogStatement struct (with number). - * - June 11th 2005: adaptation to new CloogBlock structure. - * - June 22nd 2005: Adaptation for GMP. - */ -CloogLoop *cloog_loop_read(CloogState *state, - FILE *foo, int number, int nb_parameters) -{ - int op1, op2, op3; - char s[MAX_STRING]; - CloogDomain *domain; - - domain = cloog_domain_union_read(state, foo, nb_parameters); - - /* To read that stupid "0 0 0" line. */ - while (fgets(s,MAX_STRING,foo) == 0) ; - while ((*s=='#' || *s=='\n') || (sscanf(s," %d %d %d",&op1,&op2,&op3)<3)) - fgets(s,MAX_STRING,foo) ; - - return cloog_loop_from_domain(state, domain, number); -} - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - - -/** - * cloog_loop_malloc function: - * This function allocates the memory space for a CloogLoop structure and - * sets its fields with default values. Then it returns a pointer to the - * allocated space. - * - November 21th 2005: first version. - */ -CloogLoop *cloog_loop_malloc(CloogState *state) -{ CloogLoop * loop ; - - /* Memory allocation for the CloogLoop structure. */ - loop = (CloogLoop *)malloc(sizeof(CloogLoop)) ; - if (loop == NULL) - cloog_die("memory overflow.\n"); - cloog_loop_leak_up(state); - - - /* We set the various fields with default values. */ - loop->state = state; - loop->domain = NULL ; - loop->unsimplified = NULL; - loop->block = NULL ; - loop->usr = NULL; - loop->inner = NULL ; - loop->next = NULL ; - loop->otl = 0; - loop->stride = NULL; - - return loop ; -} - - -/** - * cloog_loop_alloc function: - * This function allocates the memory space for a CloogLoop structure and - * sets its fields with those given as input. Then it returns a pointer to the - * allocated space. - * - October 27th 2001: first version. - * - June 22nd 2005: Adaptation for GMP. - * - November 21th 2005: use of cloog_loop_malloc. - */ -CloogLoop *cloog_loop_alloc(CloogState *state, - CloogDomain *domain, int otl, CloogStride *stride, - CloogBlock *block, CloogLoop *inner, CloogLoop *next) -{ CloogLoop * loop ; - - loop = cloog_loop_malloc(state); - - loop->domain = domain ; - loop->block = block ; - loop->inner = inner ; - loop->next = next ; - loop->otl = otl; - loop->stride = cloog_stride_copy(stride); - - return(loop) ; -} - - -/** - * cloog_loop_add function: - * This function adds a CloogLoop structure (loop) at a given place (now) of a - * NULL terminated list of CloogLoop structures. The beginning of this list - * is (start). This function updates (now) to (loop), and updates (start) if the - * added element is the first one -that is when (start) is NULL-. - * - October 28th 2001: first version. - */ -void cloog_loop_add(CloogLoop ** start, CloogLoop ** now, CloogLoop * loop) -{ if (*start == NULL) - { *start = loop ; - *now = *start ; - } - else - { (*now)->next = loop ; - *now = (*now)->next ; - } -} - - -/** - * cloog_loop_add function: - * This function adds a CloogLoop structure (loop) at a given place (now) of a - * NULL terminated list of CloogLoop structures. The beginning of this list - * is (start). This function updates (now) to the end of the loop list (loop), - * and updates (start) if the added element is the first one -that is when - * (start) is NULL-. - * - September 9th 2005: first version. - */ -void cloog_loop_add_list(CloogLoop ** start, CloogLoop ** now, CloogLoop * loop) -{ if (*start == NULL) - { *start = loop ; - *now = *start ; - } - else - { (*now)->next = loop ; - *now = (*now)->next ; - } - - while ((*now)->next != NULL) - *now = (*now)->next ; -} - - -/** - * cloog_loop_copy function: - * This function returns a copy of the CloogLoop structure given as input. In - * fact, there is just new allocations for the CloogLoop structures, but their - * contents are the same. - * - October 28th 2001: first version. - * - July 3rd->11th 2003: memory leaks hunt and correction. - */ -CloogLoop * cloog_loop_copy(CloogLoop * source) -{ CloogLoop * loop ; - CloogBlock * block ; - CloogDomain * domain ; - - loop = NULL ; - if (source != NULL) - { domain = cloog_domain_copy(source->domain) ; - block = cloog_block_copy(source->block) ; - loop = cloog_loop_alloc(source->state, domain, source->otl, - source->stride, block, NULL, NULL); - loop->usr = source->usr; - loop->inner = cloog_loop_copy(source->inner) ; - loop->next = cloog_loop_copy(source->next) ; - } - return(loop) ; -} - - -/** - * cloog_loop_add_disjoint function: - * This function adds some CloogLoop structures at a given place (now) of a - * NULL terminated list of CloogLoop structures. The beginning of this list - * is (start). (loop) can be an union of polyhedra, this function separates the - * union into a list of *disjoint* polyhedra then adds the list. This function - * updates (now) to the end of the list and updates (start) if first added - * element is the first of the principal list -that is when (start) is NULL-. - * (loop) can be freed by this function, basically when its domain is actually - * a union of polyhedra, but don't worry, all the useful data are now stored - * inside the list (start). We do not use PolyLib's Domain_Disjoint function, - * since the number of union components is often higher (thus code size too). - * - October 28th 2001: first version. - * - November 14th 2001: bug correction (this one was hard to find !). - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - June 22nd 2005: Adaptation for GMP. - * - October 27th 2005: (debug) included blocks were not copied for new loops. - */ -void cloog_loop_add_disjoint(start, now, loop) -CloogLoop ** start, ** now, * loop ; -{ - CloogLoop * sep, * inner ; - CloogDomain *domain, *seen, *temp, *rest; - CloogBlock * block ; - - if (cloog_domain_isconvex(loop->domain)) - cloog_loop_add(start,now,loop) ; - else { - domain = cloog_domain_simplify_union(loop->domain); - loop->domain = NULL ; - - /* We separate the first element of the rest of the union. */ - domain = cloog_domain_cut_first(domain, &rest); - - /* This first element is the first of the list of disjoint polyhedra. */ - sep = cloog_loop_alloc(loop->state, domain, 0, NULL, - loop->block, loop->inner, NULL); - cloog_loop_add(start,now,sep) ; - - seen = cloog_domain_copy(domain); - while (!cloog_domain_isempty(domain = rest)) { - temp = cloog_domain_cut_first(domain, &rest); - domain = cloog_domain_difference(temp, seen); - cloog_domain_free(temp); - - if (cloog_domain_isempty(domain)) { - cloog_domain_free(domain); - continue; - } - - /* Each new loop will have its own life, for instance we can free its - * inner loop and included block. Then each one must have its own copy - * of both 'inner' and 'block'. - */ - inner = cloog_loop_copy(loop->inner) ; - block = cloog_block_copy(loop->block) ; - - sep = cloog_loop_alloc(loop->state, cloog_domain_copy(domain), - 0, NULL, block, inner, NULL); - /* domain can be an union too. If so: recursion. */ - if (cloog_domain_isconvex(domain)) - cloog_loop_add(start,now,sep) ; - else - cloog_loop_add_disjoint(start,now,sep) ; - - if (cloog_domain_isempty(rest)) { - cloog_domain_free(domain); - break; - } - - seen = cloog_domain_union(seen, domain); - } - cloog_domain_free(rest); - cloog_domain_free(seen); - cloog_loop_free_parts(loop,0,0,0,0) ; - } -} - - -/** - * cloog_loop_disjoint function: - * This function returns a list of loops such that each loop with non-convex - * domain in the input list (loop) is separated into several loops where the - * domains are the components of the union of *disjoint* polyhedra equivalent - * to the original non-convex domain. See cloog_loop_add_disjoint comments - * for more details. - * - September 16th 2005: first version. - */ -CloogLoop * cloog_loop_disjoint(CloogLoop * loop) -{ CloogLoop *res=NULL, * now=NULL, * next ; - - /* Because this is often the case, don't waste time ! */ - if (loop && !loop->next && cloog_domain_isconvex(loop->domain)) - return loop ; - - while (loop != NULL) - { next = loop->next ; - loop->next = NULL ; - cloog_loop_add_disjoint(&res,&now,loop) ; - loop = next ; - } - - return res ; -} - - -/** - * cloog_loop_restrict function: - * This function returns the (loop) in the context of (context): it makes the - * intersection between the (loop) domain and the (context), then it returns - * a pointer to a new loop, with this intersection as domain. - ** - * - October 27th 2001: first version. - * - June 15th 2005: a memory leak fixed (domain was not freed when empty). - * - June 22nd 2005: Adaptation for GMP. - */ -CloogLoop *cloog_loop_restrict(CloogLoop *loop, CloogDomain *context) -{ int new_dimension ; - CloogDomain * domain, * extended_context, * new_domain ; - CloogLoop * new_loop ; - - domain = loop->domain ; - if (cloog_domain_dimension(domain) > cloog_domain_dimension(context)) - { - new_dimension = cloog_domain_dimension(domain); - extended_context = cloog_domain_extend(context, new_dimension); - new_domain = cloog_domain_intersection(extended_context,loop->domain) ; - cloog_domain_free(extended_context) ; - } - else - new_domain = cloog_domain_intersection(context,loop->domain) ; - - if (cloog_domain_isempty(new_domain)) - { cloog_domain_free(new_domain) ; - return(NULL) ; - } - else { - new_loop = cloog_loop_alloc(loop->state, new_domain, - 0, NULL, loop->block, loop->inner, NULL); - return(new_loop) ; - } -} - - -/** - * Call cloog_loop_restrict on each loop in the list "loop" and return - * the concatenated result. - */ -CloogLoop *cloog_loop_restrict_all(CloogLoop *loop, CloogDomain *context) -{ - CloogLoop *next; - CloogLoop *res = NULL; - CloogLoop **res_next = &res; - - for (; loop; loop = next) { - next = loop->next; - - *res_next = cloog_loop_restrict(loop, context); - if (*res_next) { - res_next = &(*res_next)->next; - cloog_loop_free_parts(loop, 1, 0, 0, 0); - } else { - loop->next = NULL; - cloog_loop_free(loop); - } - } - - return res; -} - - -/** - * Restrict the domains of the inner loops of each loop l in the given - * list of loops to the domain of the loop l. If the domains of all - * inner loops of a given loop l turn out to be empty, then remove l - * from the list. - */ -CloogLoop *cloog_loop_restrict_inner(CloogLoop *loop) -{ - CloogLoop *next; - CloogLoop *res; - CloogLoop **res_next = &res; - - for (; loop; loop = next) { - next = loop->next; - - loop->inner = cloog_loop_restrict_all(loop->inner, loop->domain); - if (loop->inner) { - *res_next = loop; - res_next = &(*res_next)->next; - } else { - loop->next = NULL; - cloog_loop_free(loop); - } - } - - *res_next = NULL; - - return res; -} - -/** - * cloog_loop_project function: - * This function returns the projection of (loop) on the (level) first - * dimensions (outer loops). It makes the projection of the (loop) domain, - * then it returns a pointer to a new loop, with this projection as domain. - ** - * - October 27th 2001: first version. - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - June 22nd 2005: Adaptation for GMP. - */ -CloogLoop * cloog_loop_project(CloogLoop * loop, int level) -{ - CloogDomain * new_domain ; - CloogLoop * new_loop, * copy ; - - copy = cloog_loop_alloc(loop->state, loop->domain, loop->otl, loop->stride, - loop->block, loop->inner, NULL); - - if (cloog_domain_dimension(loop->domain) == level) - new_domain = cloog_domain_copy(loop->domain) ; - else - new_domain = cloog_domain_project(loop->domain, level); - - new_loop = cloog_loop_alloc(loop->state, new_domain, 0, NULL, - NULL, copy, NULL); - - return(new_loop) ; -} - - -/** - * Call cloog_loop_project on each loop in the list "loop" and return - * the concatenated result. - */ -CloogLoop *cloog_loop_project_all(CloogLoop *loop, int level) -{ - CloogLoop *next; - CloogLoop *res = NULL; - CloogLoop **res_next = &res; - - for (; loop; loop = next) { - next = loop->next; - - *res_next = cloog_loop_project(loop, level); - res_next = &(*res_next)->next; - cloog_loop_free_parts(loop, 0, 0, 0, 0); - } - - return res; -} - - -/** - * cloog_loop_concat function: - * This function returns a pointer to the concatenation of the - * CloogLoop lists given as input. - * - October 28th 2001: first version. - */ -CloogLoop * cloog_loop_concat(CloogLoop * a, CloogLoop * b) -{ CloogLoop * loop, * temp ; - - loop = a ; - temp = loop ; - if (loop != NULL) - { while (temp->next != NULL) - temp = temp->next ; - temp->next = b ; - } - else - loop = b ; - - return(loop) ; -} - - -/** - * cloog_loop_combine: - * Combine consecutive loops with identical domains into - * a single loop with the concatenation of their inner loops - * as inner loop. - */ -CloogLoop *cloog_loop_combine(CloogLoop *loop) -{ - CloogLoop *first, *second; - - for (first = loop; first; first = first->next) { - while (first->next) { - if (!cloog_domain_lazy_equal(first->domain, first->next->domain)) - break; - second = first->next; - first->inner = cloog_loop_concat(first->inner, second->inner); - first->next = second->next; - cloog_loop_free_parts(second, 1, 0, 0, 0); - } - } - - return loop; -} - -/** - * Remove loops from list that have an empty domain. - */ -CloogLoop *cloog_loop_remove_empty_domain_loops(CloogLoop *loop) -{ - CloogLoop *l, *res, *next, **res_next; - - res = NULL; - res_next = &res; - for (l = loop; l; l = next) { - next = l->next; - if (cloog_domain_isempty(l->domain)) - cloog_loop_free_parts(l, 1, 1, 1, 0); - else { - *res_next = l; - res_next = &(*res_next)->next; - } - } - *res_next = NULL; - - return res; -} - -CloogLoop *cloog_loop_decompose_inner(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims); - -/* For each loop with only one inner loop, replace the domain - * of the loop with the projection of the domain of the inner - * loop. To increase the number of loops with a single inner - * we first decompose the inner loops into strongly connected - * components. - */ -CloogLoop *cloog_loop_specialize(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims) -{ - int dim; - CloogDomain *domain; - CloogLoop *l; - - loop = cloog_loop_decompose_inner(loop, level, scalar, - scaldims, nb_scattdims); - - for (l = loop; l; l = l->next) { - if (l->inner->next) - continue; - if (!cloog_domain_isconvex(l->inner->domain)) - continue; - - dim = cloog_domain_dimension(l->domain); - domain = cloog_domain_project(l->inner->domain, dim); - if (cloog_domain_isconvex(domain)) { - cloog_domain_free(l->domain); - l->domain = domain; - } else { - cloog_domain_free(domain); - } - } - - return cloog_loop_remove_empty_domain_loops(loop); -} - -/* For each loop with only one inner loop, propagate the bounds from - * the inner loop domain to the outer loop domain. This is especially - * useful if the inner loop domain has a non-trivial stride which - * results in an update of the lower bound. - */ -CloogLoop *cloog_loop_propagate_lower_bound(CloogLoop *loop, int level) -{ - int dim; - CloogDomain *domain, *t; - CloogLoop *l; - - for (l = loop; l; l = l->next) { - if (l->inner->next) - continue; - if (!cloog_domain_isconvex(l->inner->domain)) - continue; - - dim = cloog_domain_dimension(l->domain); - domain = cloog_domain_project(l->inner->domain, dim); - if (cloog_domain_isconvex(domain)) { - t = cloog_domain_intersection(domain, l->domain); - cloog_domain_free(l->domain); - l->domain = t; - } - cloog_domain_free(domain); - } - - return loop; -} - -/** - * cloog_loop_separate function: - * This function implements the Quillere algorithm for separation of multiple - * loops: for a given set of polyhedra (loop), it computes a set of disjoint - * polyhedra such that the unions of these sets are equal, and returns this set. - * - October 28th 2001: first version. - * - November 14th 2001: elimination of some unused blocks. - * - August 13th 2002: (debug) in the case of union of polyhedra for one - * loop, redundant constraints are fired. - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - June 22nd 2005: Adaptation for GMP. - * - October 16th 2005: Removal of the non-shared constraint elimination when - * there is only one loop in the list (seems to work - * without now, DomainSimplify may have been improved). - * The problem was visible with test/iftest2.cloog. - */ -CloogLoop * cloog_loop_separate(CloogLoop * loop) -{ int lazy_equal=0, disjoint = 0; - CloogLoop * new_loop, * new_inner, * res, * now, * temp, * Q, - * inner, * old /*, * previous, * next*/ ; - CloogDomain *UQ, *domain; - - if (loop == NULL) - return NULL ; - - loop = cloog_loop_combine(loop); - - if (loop->next == NULL) - return cloog_loop_disjoint(loop) ; - - UQ = cloog_domain_copy(loop->domain) ; - domain = cloog_domain_copy(loop->domain) ; - res = cloog_loop_alloc(loop->state, domain, 0, NULL, - loop->block, loop->inner, NULL); - - old = loop ; - while((loop = loop->next) != NULL) - { temp = NULL ; - - /* For all Q, add Q-loop associated with the blocks of Q alone, - * and Q inter loop associated with the blocks of Q and loop. - */ - for (Q = res; Q; Q = Q->next) { - /* Add (Q inter loop). */ - if ((disjoint = cloog_domain_lazy_disjoint(Q->domain,loop->domain))) - domain = NULL ; - else - { if ((lazy_equal = cloog_domain_lazy_equal(Q->domain,loop->domain))) - domain = cloog_domain_copy(Q->domain) ; - else - domain = cloog_domain_intersection(Q->domain,loop->domain) ; - - if (!cloog_domain_isempty(domain)) - { new_inner = cloog_loop_concat(cloog_loop_copy(Q->inner), - cloog_loop_copy(loop->inner)) ; - new_loop = cloog_loop_alloc(loop->state, domain, 0, NULL, - NULL, new_inner, NULL); - cloog_loop_add_disjoint(&temp,&now,new_loop) ; - } - else { - disjoint = 1; - cloog_domain_free(domain); - } - } - - /* Add (Q - loop). */ - if (disjoint) - domain = cloog_domain_copy(Q->domain) ; - else - { if (lazy_equal) - domain = cloog_domain_empty(Q->domain); - else - domain = cloog_domain_difference(Q->domain,loop->domain) ; - } - - if (!cloog_domain_isempty(domain)) { - new_loop = cloog_loop_alloc(loop->state, domain, 0, NULL, - NULL, Q->inner, NULL); - cloog_loop_add_disjoint(&temp,&now,new_loop) ; - } - else - { cloog_domain_free(domain) ; - /* If Q->inner is no more useful, we can free it. */ - inner = Q->inner ; - Q->inner = NULL ; - cloog_loop_free(inner) ; - } - } - - /* Add loop-UQ associated with the blocks of loop alone.*/ - if (cloog_domain_lazy_disjoint(loop->domain,UQ)) - domain = cloog_domain_copy(loop->domain) ; - else - { if (cloog_domain_lazy_equal(loop->domain,UQ)) - domain = cloog_domain_empty(UQ); - else - domain = cloog_domain_difference(loop->domain,UQ) ; - } - - if (!cloog_domain_isempty(domain)) { - new_loop = cloog_loop_alloc(loop->state, domain, 0, NULL, - NULL, loop->inner, NULL); - cloog_loop_add_disjoint(&temp,&now,new_loop) ; - } - else - { cloog_domain_free(domain) ; - /* If loop->inner is no more useful, we can free it. */ - cloog_loop_free(loop->inner) ; - } - - loop->inner = NULL ; - - if (loop->next != NULL) - UQ = cloog_domain_union(UQ, cloog_domain_copy(loop->domain)); - else - cloog_domain_free(UQ); - - cloog_loop_free_parts(res,1,0,0,1) ; - - res = temp ; - } - cloog_loop_free_parts(old,1,0,0,1) ; - - return(res) ; -} - - -static CloogDomain *bounding_domain(CloogDomain *dom, CloogOptions *options) -{ - if (options->sh) - return cloog_domain_simple_convex(dom); - else - return cloog_domain_convex(dom); -} - - -/** - * cloog_loop_merge function: - * This function is the 'soft' version of loop_separate if we are looking for - * a code much simpler (and less efficicient). This function returns the new - * CloogLoop list. - * - October 29th 2001: first version. - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - June 22nd 2005: Adaptation for GMP. - */ -CloogLoop *cloog_loop_merge(CloogLoop *loop, int level, CloogOptions *options) -{ - CloogLoop *res, *new_inner, *old; - CloogDomain *new_domain, *temp; - - if (loop == NULL) - return loop; - - if (loop->next == NULL && cloog_domain_isconvex(loop->domain)) - return loop; - - old = loop; - temp = loop->domain; - loop->domain = NULL; - new_inner = loop->inner; - - for (loop = loop->next; loop; loop = loop->next) { - temp = cloog_domain_union(temp, loop->domain); - loop->domain = NULL; - new_inner = cloog_loop_concat(new_inner, loop->inner); - } - - new_domain = bounding_domain(temp, options); - - if (level > 0 && !cloog_domain_is_bounded(new_domain, level) && - cloog_domain_is_bounded(temp, level)) { - CloogDomain *splitter, *t2; - - cloog_domain_free(new_domain); - splitter = cloog_domain_bound_splitter(temp, level); - - res = NULL; - while (!cloog_domain_isconvex(splitter)) { - CloogDomain *first, *rest; - first = cloog_domain_cut_first(splitter, &rest); - splitter = rest; - t2 = cloog_domain_intersection(first, temp); - cloog_domain_free(first); - - new_domain = bounding_domain(t2, options); - cloog_domain_free(t2); - - if (cloog_domain_isempty(new_domain)) { - cloog_domain_free(new_domain); - continue; - } - res = cloog_loop_alloc(old->state, new_domain, 0, NULL, - NULL, cloog_loop_copy(new_inner), res); - } - - t2 = cloog_domain_intersection(splitter, temp); - cloog_domain_free(splitter); - - new_domain = bounding_domain(t2, options); - cloog_domain_free(t2); - - if (cloog_domain_isempty(new_domain)) { - cloog_domain_free(new_domain); - cloog_loop_free(new_inner); - } else - res = cloog_loop_alloc(old->state, new_domain, 0, NULL, - NULL, new_inner, res); - } else { - res = cloog_loop_alloc(old->state, new_domain, 0, NULL, - NULL, new_inner, NULL); - } - cloog_domain_free(temp); - - cloog_loop_free_parts(old, 0, 0, 0, 1); - - return res; -} - - -static int cloog_loop_count(CloogLoop *loop) -{ - int nb_loops; - - for (nb_loops = 0; loop; loop = loop->next) - nb_loops++; - - return nb_loops; -} - - -/** - * cloog_loop_sort function: - * Adaptation from LoopGen 0.4 by F. Quillere. This function sorts a list of - * parameterized disjoint polyhedra, in order to not have lexicographic order - * violation (see Quillere paper). - * - September 16th 2005: inclusion of cloog_loop_number (October 29th 2001). - */ -CloogLoop *cloog_loop_sort(CloogLoop *loop, int level) -{ - CloogLoop *res, *now, **loop_array; - CloogDomain **doms; - int i, nb_loops=0, * permut ; - - /* There is no need to sort the parameter domains. */ - if (!level) - return loop; - - /* We will need to know how many loops are in the list. */ - nb_loops = cloog_loop_count(loop); - - /* If there is only one loop, it's the end. */ - if (nb_loops == 1) - return(loop) ; - - /* We have to allocate memory for some useful components: - * - loop_array: the loop array, - * - doms: the array of domains to sort, - * - permut: will give us a possible sort (maybe not the only one). - */ - loop_array = (CloogLoop **)malloc(nb_loops*sizeof(CloogLoop *)) ; - doms = (CloogDomain **)malloc(nb_loops*sizeof(CloogDomain *)); - permut = (int *)malloc(nb_loops*sizeof(int)) ; - - /* We fill up the loop and domain arrays. */ - for (i=0;inext) - { loop_array[i] = loop ; - doms[i] = loop_array[i]->domain; - } - - /* cloog_domain_sort will fill up permut. */ - cloog_domain_sort(doms, nb_loops, level, permut); - - /* With permut and loop_array we build the sorted list. */ - res = NULL ; - for (i=0;inext = NULL ; - cloog_loop_add(&res,&now,loop_array[permut[i]-1]) ; - } - - free(permut) ; - free(doms); - free(loop_array) ; - - return res; -} - - -/** - * cloog_loop_nest function: - * This function changes the loop list in such a way that we have no more than - * one dimension added by level. It returns an equivalent loop list with - * this property. - * - October 29th 2001: first version. - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - June 22nd 2005: Adaptation for GMP. - * - November 21th 2005: (debug) now OK when cloog_loop_restrict returns NULL. - */ -CloogLoop *cloog_loop_nest(CloogLoop *loop, CloogDomain *context, int level) -{ int l ; - CloogLoop * p, * temp, * res, * now, * next ; - CloogDomain * new_domain ; - - loop = cloog_loop_disjoint(loop); - - res = NULL ; - /* Each domain is changed by its intersection with the context. */ - while (loop != NULL) - { p = cloog_loop_restrict(loop, context); - next = loop->next ; - - if (p != NULL) - { cloog_loop_free_parts(loop,1,0,0,0) ; - - temp = cloog_loop_alloc(p->state, p->domain, 0, NULL, - p->block, p->inner, NULL); - - /* If the intersection dimension is too big, we make projections smaller - * and smaller, and each projection includes the preceding projection - * (thus, in the target list, dimensions are added one by one). - */ - if (cloog_domain_dimension(p->domain) >= level) - for (l = cloog_domain_dimension(p->domain); l >= level; l--) { - new_domain = cloog_domain_project(p->domain, l); - temp = cloog_loop_alloc(p->state, new_domain, 0, NULL, - NULL, temp, NULL); - } - - /* p is no more useful (but its content yes !). */ - cloog_loop_free_parts(p,0,0,0,0) ; - - cloog_loop_add(&res,&now,temp) ; - } - else - cloog_loop_free_parts(loop,1,1,1,0) ; - - loop = next ; - } - - return(res) ; -} - - -/* Check if the domains of the inner loops impose a stride constraint - * on the given level. - * The core of the search is implemented in cloog_domain_list_stride. - * Here, we simply construct a list of domains to pass to this function - * and if a stride is found, we adjust the lower bounds by calling - * cloog_domain_stride_lower_bound. - */ -static int cloog_loop_variable_offset_stride(CloogLoop *loop, int level) -{ - CloogDomainList *list = NULL; - CloogLoop *inner; - CloogStride *stride; - - for (inner = loop->inner; inner; inner = inner->next) { - CloogDomainList *entry = ALLOC(CloogDomainList); - entry->domain = cloog_domain_copy(inner->domain); - entry->next = list; - list = entry; - } - - stride = cloog_domain_list_stride(list, level); - - cloog_domain_list_free(list); - - if (!stride) - return 0; - - loop->stride = stride; - loop->domain = cloog_domain_stride_lower_bound(loop->domain, level, stride); - - return 1; -} - - -/** - * cloog_loop_stride function: - * This function will find the stride of a loop for the iterator at the column - * number 'level' in the constraint matrix. It will update the lower bound of - * the iterator accordingly. Basically, the function will try to find in the - * inner loops a common condition on this iterator for the inner loop iterators - * to be integral. For instance, let us consider a loop with the iterator i, - * the iteration domain -4<=i<=n, and its two inner loops with the iterator j. - * The first inner loop has the constraint 3j=i, and the second one has the - * constraint 6j=i. Then the common constraint on i for j to be integral is - * i%3=0, the stride for i is 3. Lastly, we have to find the new lower bound - * for i: the first value satisfying the common constraint: -3. At the end, the - * iteration domain for i is -3<=i<=n and the stride for i is 3. - * - * The algorithm implemented in this function only allows for strides - * on loops with a lower bound that has a constant remainder on division - * by the stride. Before initiating this procedure, we first check - * if we can find a stride with a lower bound with a variable offset in - * cloog_loop_variable_offset_stride. - * - * - loop is the loop including the iteration domain of the considered iterator, - * - level is the column number of the iterator in the matrix of contraints. - ** - * - June 29th 2003: first version (work in progress since June 26th 2003). - * - July 14th 2003: simpler version. - * - June 22nd 2005: Adaptation for GMP (from S. Verdoolaege's 0.12.1 version). - */ -void cloog_loop_stride(CloogLoop * loop, int level) -{ int first_search ; - cloog_int_t stride, ref_offset, offset, potential; - CloogLoop * inner ; - - if (!cloog_domain_can_stride(loop->domain, level)) - return; - - if (cloog_loop_variable_offset_stride(loop, level)) - return; - - cloog_int_init(stride); - cloog_int_init(ref_offset); - cloog_int_init(offset); - cloog_int_init(potential); - - cloog_int_set_si(ref_offset, 0); - cloog_int_set_si(offset, 0); - - /* Default stride. */ - cloog_int_set_si(stride, 1); - first_search = 1 ; - inner = loop->inner ; - - while (inner != NULL) - { /* If the minimun stride has not been found yet, find the stride. */ - if ((first_search) || (!cloog_int_is_one(stride))) - { - cloog_domain_stride(inner->domain, level, &potential, &offset); - if (!cloog_int_is_one(potential) && (!first_search)) - { /* Offsets must be the same for common stride. */ - cloog_int_gcd(stride, potential, stride); - if (!cloog_int_is_zero(stride)) { - cloog_int_fdiv_r(offset, offset, stride); - cloog_int_fdiv_r(ref_offset, ref_offset, stride); - } - if (cloog_int_ne(offset,ref_offset)) - cloog_int_set_si(stride, 1); - } - else { - cloog_int_set(stride, potential); - cloog_int_set(ref_offset, offset); - } - - first_search = 0 ; - } - - inner = inner->next ; - } - - if (cloog_int_is_zero(stride)) - cloog_int_set_si(stride, 1); - - /* Update the values if necessary. */ - if (!cloog_int_is_one(stride)) - { /* Update the stride value. */ - if (!cloog_int_is_zero(offset)) - cloog_int_sub(offset, stride, offset); - loop->stride = cloog_stride_alloc(stride, offset); - loop->domain = cloog_domain_stride_lower_bound(loop->domain, level, - loop->stride); - } - - cloog_int_clear(stride); - cloog_int_clear(ref_offset); - cloog_int_clear(offset); - cloog_int_clear(potential); -} - - -void cloog_loop_otl(CloogLoop *loop, int level) -{ - if (cloog_domain_is_otl(loop->domain, level)) - loop->otl = 1; -} - - -/** - * cloog_loop_stop function: - * This function implements the 'stop' option : each domain of each loop - * in the list 'loop' is replaced by 'context'. 'context' should be the - * domain of the outer loop. By using this method, there are no more dimensions - * to scan and the simplification step will automaticaly remove the domains - * since they are the same as the corresponding contexts. The effect of this - * function is to stop the code generation at the level this function is called, - * the resulting code do not consider the next dimensions. - * - January 11th 2005: first version. - */ -CloogLoop * cloog_loop_stop(CloogLoop * loop, CloogDomain * context) -{ if (loop == NULL) - return NULL ; - else - { cloog_domain_free(loop->domain) ; - loop->domain = cloog_domain_copy(context) ; - loop->next = cloog_loop_stop(loop->next, context) ; - } - - return loop ; -} - - -static int level_is_constant(int level, int scalar, int *scaldims, int nb_scattdims) -{ - return level && (level+scalar <= nb_scattdims) && (scaldims[level+scalar-1]); -} - - -/** - * Compare the constant dimensions of loops 'l1' and 'l2' starting at 'scalar' - * and return -1 if the vector of constant dimensions of 'l1' is smaller - * than that of 'l2', 0 if they are the same and +1 if that of 'l1' is - * greater than that of 'l2'. - * This function should be called on the innermost loop (the loop - * containing a block). - * \param l1 Loop to be compared with l2. - * \param l2 Loop to be compared with l1. - * \param level Current non-scalar dimension. - * \param scaldims Boolean array saying whether a dimension is scalar or not. - * \param nb_scattdims Size of the scaldims array. - * \param scalar Current scalar dimension. - * \return -1 if (l1 < l2), 0 if (l1 == l2) and +1 if (l1 > l2) - */ -int cloog_loop_constant_cmp(CloogLoop *l1, CloogLoop *l2, int level, - int *scaldims, int nb_scattdims, int scalar) -{ - CloogBlock *b1, *b2; - b1 = l1->block; - b2 = l2->block; - while (level_is_constant(level, scalar, scaldims, nb_scattdims)) { - int cmp = cloog_int_cmp(b1->scaldims[scalar], b2->scaldims[scalar]); - if (cmp) - return cmp; - scalar++; - } - return 0; -} - - -/** - * cloog_loop_scalar_gt function: - * This function returns 1 if loop 'l1' is greater than loop 'l2' for the - * scalar dimension vector that begins at dimension 'scalar', 0 otherwise. What - * we want to know is whether a loop is scheduled before another one or not. - * This function solves the problem when the considered dimension for scheduling - * is a scalar dimension. Since there may be a succession of scalar dimensions, - * this function will reason about the vector of scalar dimension that begins - * at dimension 'level+scalar' and finish to the first non-scalar dimension. - * \param l1 Loop to be compared with l2. - * \param l2 Loop to be compared with l1. - * \param level Current non-scalar dimension. - * \param scaldims Boolean array saying whether a dimension is scalar or not. - * \param nb_scattdims Size of the scaldims array. - * \param scalar Current scalar dimension. - * \return 1 if (l1 > l2), 0 otherwise. - ** - * - September 9th 2005: first version. - * - October 15nd 2007: now "greater than" instead of "greater or equal". - */ -int cloog_loop_scalar_gt(l1, l2, level, scaldims, nb_scattdims, scalar) -CloogLoop * l1, * l2 ; -int level, * scaldims, nb_scattdims, scalar ; -{ - return cloog_loop_constant_cmp(l1, l2, level, scaldims, nb_scattdims, scalar) > 0; -} - - -/** - * cloog_loop_scalar_eq function: - * This function returns 1 if loop 'l1' is equal to loop 'l2' for the scalar - * dimension vector that begins at dimension 'scalar', 0 otherwise. What we want - * to know is whether two loops are scheduled for the same time or not. - * This function solves the problem when the considered dimension for scheduling - * is a scalar dimension. Since there may be a succession of scalar dimensions, - * this function will reason about the vector of scalar dimension that begins - * at dimension 'level+scalar' and finish to the first non-scalar dimension. - * - l1 and l2 are the loops to compare, - * - level is the current non-scalar dimension, - * - scaldims is the boolean array saying whether a dimension is scalar or not, - * - nb_scattdims is the size of the scaldims array, - * - scalar is the current scalar dimension. - ** - * - September 9th 2005 : first version. - */ -int cloog_loop_scalar_eq(l1, l2, level, scaldims, nb_scattdims, scalar) -CloogLoop * l1, * l2 ; -int level, * scaldims, nb_scattdims, scalar ; -{ - return cloog_loop_constant_cmp(l1, l2, level, scaldims, nb_scattdims, scalar) == 0; -} - - -/** - * cloog_loop_scalar_sort function: - * This function sorts a linked list of loops (loop) with respect to the - * scalar dimension vector that begins at dimension 'scalar'. Since there may - * be a succession of scalar dimensions, this function will reason about the - * vector of scalar dimension that begins at dimension 'level+scalar' and - * finish to the first non-scalar dimension. - * \param loop Loop list to sort. - * \param level Current non-scalar dimension. - * \param scaldims Boolean array saying whether a dimension is scalar or not. - * \param nb_scattdims Size of the scaldims array. - * \param scalar Current scalar dimension. - * \return A pointer to the sorted list. - ** - * - July 2nd 2005: first developments. - * - September 2nd 2005: first version. - * - October 15nd 2007: complete rewrite to remove bugs, now a bubble sort. - */ -CloogLoop * cloog_loop_scalar_sort(loop, level, scaldims, nb_scattdims, scalar) -CloogLoop * loop ; -int level, * scaldims, nb_scattdims, scalar ; -{ int ok ; - CloogLoop **current; - - do { - ok = 1; - for (current = &loop; (*current)->next; current = &(*current)->next) { - CloogLoop *next = (*current)->next; - if (cloog_loop_scalar_gt(*current,next,level,scaldims,nb_scattdims,scalar)) { - ok = 0; - (*current)->next = next->next; - next->next = *current; - *current = next; - } - } - } while (!ok); - - return loop ; -} - - -/** - * cloog_loop_generate_backtrack function: - * adaptation from LoopGen 0.4 by F. Quillere. This function implements the - * backtrack of the Quillere et al. algorithm (see the Quillere paper). - * It eliminates unused iterations of the current level for the new one. See the - * example called linearity-1-1 example with and without this part for an idea. - * - October 26th 2001: first version in cloog_loop_generate_general. - * - July 31th 2002: (debug) no more parasite loops (REALLY hard !). - * - October 30th 2005: extraction from cloog_loop_generate_general. - */ -CloogLoop *cloog_loop_generate_backtrack(CloogLoop *loop, - int level, CloogOptions *options) -{ - CloogDomain * domain ; - CloogLoop * now, * now2, * next, * next2, * end, * temp, * l, * inner, - * new_loop ; - - temp = loop ; - loop = NULL ; - - while (temp != NULL) - { l = NULL ; - inner = temp->inner ; - - while (inner != NULL) - { next = inner->next ; - /* This 'if' and its first part is the debug of july 31th 2002. */ - if (inner->block != NULL) { - end = cloog_loop_alloc(temp->state, inner->domain, 0, NULL, - inner->block, NULL, NULL); - domain = cloog_domain_copy(temp->domain) ; - new_loop = cloog_loop_alloc(temp->state, domain, 0, NULL, - NULL, end, NULL); - } - else - new_loop = cloog_loop_project(inner, level); - - cloog_loop_free_parts(inner,0,0,0,0) ; - cloog_loop_add(&l,&now2,new_loop) ; - inner = next ; - } - - temp->inner = NULL ; - - if (l != NULL) - { l = cloog_loop_separate(l) ; - l = cloog_loop_sort(l, level); - while (l != NULL) { - l->stride = cloog_stride_copy(l->stride); - cloog_loop_add(&loop,&now,l) ; - l = l->next ; - } - } - next2 = temp->next ; - cloog_loop_free_parts(temp,1,0,0,0) ; - temp = next2 ; - } - - return loop ; -} - - -/** - * Return 1 if we need to continue recursing to the specified level. - */ -int cloog_loop_more(CloogLoop *loop, int level, int scalar, int nb_scattdims) -{ - return level + scalar <= nb_scattdims || - cloog_domain_dimension(loop->domain) >= level; -} - -/** - * Return 1 if the domains of all loops in the given linked list - * have a fixed value at the given level. - * In principle, there would be no need to check that the fixed value is - * the same for each of these loops because this function is only - * called on a component. However, not all backends perform a proper - * decomposition into components. - */ -int cloog_loop_is_constant(CloogLoop *loop, int level) -{ - cloog_int_t c1, c2; - int r = 1; - - cloog_int_init(c1); - cloog_int_init(c2); - - if (!cloog_domain_lazy_isconstant(loop->domain, level - 1, &c1)) - r = 0; - - for (loop = loop->next; r && loop; loop = loop->next) { - if (!cloog_domain_lazy_isconstant(loop->domain, level - 1, &c2)) - r = 0; - else if (cloog_int_ne(c1, c2)) - r = 0; - } - - cloog_int_clear(c1); - cloog_int_clear(c2); - - return r; -} - -/** - * Assuming all domains in the given linked list of loop - * have a fixed values at level, return a single loop with - * a domain corresponding to this fixed value and with as - * list of inner loops the concatenation of all inner loops - * in the original list. - */ -CloogLoop *cloog_loop_constant(CloogLoop *loop, int level) -{ - CloogLoop *res, *inner, *tmp; - CloogDomain *domain, *t; - - if (!loop) - return loop; - - inner = loop->inner; - domain = loop->domain; - for (tmp = loop->next; tmp; tmp = tmp->next) { - inner = cloog_loop_concat(inner, tmp->inner); - domain = cloog_domain_union(domain, tmp->domain); - } - - domain = cloog_domain_simple_convex(t = domain); - cloog_domain_free(t); - - res = cloog_loop_alloc(loop->state, domain, 0, NULL, NULL, inner, NULL); - - cloog_loop_free_parts(loop, 0, 0, 0, 1); - - return res; -} - - -/* Unroll the given loop at the given level, provided it is allowed - * by cloog_domain_can_unroll. - * If so, we return a list of loops, one for each iteration of the original - * loop. Otherwise, we simply return the original loop. - */ -static CloogLoop *loop_unroll(CloogLoop *loop, int level) -{ - int can_unroll; - cloog_int_t i; - cloog_int_t n; - CloogConstraint *lb; - CloogLoop *res = NULL; - CloogLoop **next_res = &res; - CloogDomain *domain; - CloogLoop *inner; - - cloog_int_init(n); - can_unroll = cloog_domain_can_unroll(loop->domain, level, &n, &lb); - if (!can_unroll) { - cloog_int_clear(n); - return loop; - } - - cloog_int_init(i); - - for (cloog_int_set_si(i, 0); cloog_int_lt(i, n); cloog_int_add_ui(i, i, 1)) { - domain = cloog_domain_copy(loop->domain); - domain = cloog_domain_fixed_offset(domain, level, lb, i); - inner = cloog_loop_copy(loop->inner); - inner = cloog_loop_restrict_all(inner, domain); - if (!inner) { - cloog_domain_free(domain); - continue; - } - *next_res = cloog_loop_alloc(loop->state, domain, 1, NULL, NULL, - inner, NULL); - next_res = &(*next_res)->next; - } - - cloog_int_clear(i); - cloog_int_clear(n); - cloog_constraint_release(lb); - - cloog_loop_free(loop); - - return res; -} - - -/* Unroll all loops in the given list at the given level, provided - * they can be unrolled. - */ -CloogLoop *cloog_loop_unroll(CloogLoop *loop, int level) -{ - CloogLoop *now, *next; - CloogLoop *res = NULL; - CloogLoop **next_res = &res; - - for (now = loop; now; now = next) { - next = now->next; - now->next = NULL; - - *next_res = loop_unroll(now, level); - - while (*next_res) - next_res = &(*next_res)->next; - } - - return res; -} - -CloogLoop *cloog_loop_generate_restricted_or_stop(CloogLoop *loop, - CloogDomain *context, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options); - -CloogLoop *cloog_loop_recurse(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - int constant, CloogOptions *options); - - -/** - * Recurse on the inner loops of the given single loop. - * - * - loop is the loop for which we have to generate scanning code, - * - level is the current non-scalar dimension, - * - scalar is the current scalar dimension, - * - scaldims is the boolean array saying whether a dimension is scalar or not, - * - nb_scattdims is the size of the scaldims array, - * - constant is true if the loop is known to be executed at most once - * - options are the general code generation options. - */ -static CloogLoop *loop_recurse(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - int constant, CloogOptions *options) -{ - CloogLoop *inner, *into, *end, *next, *l, *now; - CloogDomain *domain; - - if (level && options->strides && !constant) - cloog_loop_stride(loop, level); - - if (!constant && - options->first_unroll >= 0 && level + scalar >= options->first_unroll) { - loop = cloog_loop_unroll(loop, level); - if (loop->next) - return cloog_loop_recurse(loop, level, scalar, scaldims, - nb_scattdims, 1, options); - } - - if (level && options->otl) - cloog_loop_otl(loop, level); - inner = loop->inner; - domain = cloog_domain_copy(loop->domain); - domain = cloog_domain_add_stride_constraint(domain, loop->stride); - into = NULL ; - while (inner != NULL) - { /* 4b. -ced- recurse for each sub-list of non terminal loops. */ - if (cloog_loop_more(inner, level + 1, scalar, nb_scattdims)) { - end = inner; - while ((end->next != NULL) && - cloog_loop_more(end->next, level + 1, scalar, nb_scattdims)) - end = end->next ; - - next = end->next ; - end->next = NULL ; - - l = cloog_loop_generate_restricted_or_stop(inner, domain, - level + 1, scalar, scaldims, nb_scattdims, options); - - if (l != NULL) - cloog_loop_add_list(&into,&now,l) ; - - inner = next ; - } - else - { cloog_loop_add(&into,&now,inner) ; - inner = inner->next ; - } - } - - cloog_domain_free(domain); - loop->inner = into; - return loop; -} - - -/** - * Recurse on the inner loops of each of the loops in the loop list. - * - * - loop is the loop list for which we have to generate scanning code, - * - level is the current non-scalar dimension, - * - scalar is the current scalar dimension, - * - scaldims is the boolean array saying whether a dimension is scalar or not, - * - nb_scattdims is the size of the scaldims array, - * - constant is true if the loop is known to be executed at most once - * - options are the general code generation options. - */ -CloogLoop *cloog_loop_recurse(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - int constant, CloogOptions *options) -{ - CloogLoop *now, *next; - CloogLoop *res = NULL; - CloogLoop **next_res = &res; - - for (now = loop; now; now = next) { - next = now->next; - now->next = NULL; - - *next_res = loop_recurse(now, level, scalar, scaldims, nb_scattdims, - constant, options); - - while (*next_res) - next_res = &(*next_res)->next; - } - - return res; -} - -/** - * cloog_loop_generate_general function: - * Adaptation from LoopGen 0.4 by F. Quillere. This function implements the - * Quillere algorithm for polyhedron scanning from step 3 to 5. - * (see the Quillere paper). - * - loop is the loop for which we have to generate a scanning code, - * - level is the current non-scalar dimension, - * - scalar is the current scalar dimension, - * - scaldims is the boolean array saying whether a dimension is scalar or not, - * - nb_scattdims is the size of the scaldims array, - * - options are the general code generation options. - ** - * - October 26th 2001: first version. - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - June 22nd 2005: Adaptation for GMP. - * - September 2nd 2005: The function have been cutted out in two pieces: - * cloog_loop_generate and this one, in order to handle - * the scalar dimension case more efficiently with - * cloog_loop_generate_scalar. - * - November 15th 2005: (debug) the result of the cloog_loop_generate call may - * be a list of polyhedra (especially if stop option is - * used): cloog_loop_add_list instead of cloog_loop_add. - */ -CloogLoop *cloog_loop_generate_general(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options) -{ - CloogLoop *res, *now, *temp, *l, *new_loop, *next; - int separate = 0; - int constant = 0; - - /* 3. Separate all projections into disjoint polyhedra. */ - if (level > 0 && cloog_loop_is_constant(loop, level)) { - res = cloog_loop_constant(loop, level); - constant = 1; - } else if ((options->f > level+scalar) || (options->f < 0)) - res = cloog_loop_merge(loop, level, options); - else { - res = cloog_loop_separate(loop); - separate = 1; - } - - /* 3b. -correction- sort the loops to determine their textual order. */ - res = cloog_loop_sort(res, level); - - res = cloog_loop_restrict_inner(res); - - if (separate) - res = cloog_loop_specialize(res, level, scalar, scaldims, nb_scattdims); - - /* 4. Recurse for each loop with the current domain as context. */ - temp = res ; - res = NULL ; - if (!level || (level+scalar < options->l) || (options->l < 0)) - res = cloog_loop_recurse(temp, level, scalar, scaldims, nb_scattdims, - constant, options); - else - while (temp != NULL) - { next = temp->next ; - l = cloog_loop_nest(temp->inner, temp->domain, level+1); - new_loop = cloog_loop_alloc(temp->state, temp->domain, 0, NULL, - NULL, l, NULL); - temp->inner = NULL ; - temp->next = NULL ; - cloog_loop_free_parts(temp,0,0,0,0) ; - cloog_loop_add(&res,&now,new_loop) ; - temp = next ; - } - - if (options->strides) - res = cloog_loop_propagate_lower_bound(res, level); - - /* 5. eliminate unused iterations of the current level for the new one. See - * the example called linearity-1-1 example with and without this part - * for an idea. - */ - if (options->backtrack && level && - ((level+scalar < options->l) || (options->l < 0)) && - ((options->f <= level+scalar) && !(options->f < 0))) - res = cloog_loop_generate_backtrack(res, level, options); - - /* Pray for my new paper to be accepted somewhere since the following stuff - * is really amazing :-) ! - * Far long later: The paper has been accepted to PACT 2004 :-))). But there - * are still some bugs and I have no time to fix them. Thus now you have to - * pray for me to get an academic position for that really amazing stuff :-) ! - * Later again: OK, I get my academic position, but still I have not enough - * time to fix and clean this part... Pray again :-) !!! - */ - /* res = cloog_loop_unisolate(res,level) ;*/ - - return(res) ; -} - - -CloogLoop *cloog_loop_generate_restricted(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options); - - -/** - * cloog_loop_generate_scalar function: - * This function applies the simplified code generation scheme in the trivial - * case of scalar dimensions. When dealing with scalar dimensions, there is - * no need of costly polyhedral operations for separation or sorting: sorting - * is a question of comparing scalar vectors and separation amounts to consider - * only loops with the same scalar vector for the next step of the code - * generation process. This function achieves the separation/sorting process - * for the vector of scalar dimension that begins at dimension 'level+scalar' - * and finish to the first non-scalar dimension. - * - loop is the loop for which we have to generate a scanning code, - * - level is the current non-scalar dimension, - * - scalar is the current scalar dimension, - * - scaldims is the boolean array saying whether a dimension is scalar or not, - * - nb_scattdims is the size of the scaldims array, - * - options are the general code generation options. - ** - * - September 2nd 2005: First version. - */ -CloogLoop *cloog_loop_generate_scalar(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options) -{ CloogLoop * res, * now, * temp, * l, * end, * next, * ref ; - int scalar_new; - - /* We sort the loop list with respect to the current scalar vector. */ - res = cloog_loop_scalar_sort(loop,level,scaldims,nb_scattdims,scalar) ; - - scalar_new = scalar + scaldims[level + scalar - 1]; - - temp = res ; - res = NULL ; - while (temp != NULL) - { /* Then we will appy the general code generation process to each sub-list - * of loops with the same scalar vector. - */ - end = temp ; - ref = temp ; - - while((end->next != NULL) && - cloog_loop_more(end->next, level, scalar_new, nb_scattdims) && - cloog_loop_scalar_eq(ref,end->next,level,scaldims,nb_scattdims,scalar)) - end = end->next ; - - next = end->next ; - end->next = NULL ; - - /* For the next dimension, scalar value is updated by adding the scalar - * vector size, which is stored at scaldims[level+scalar-1]. - */ - if (cloog_loop_more(temp, level, scalar_new, nb_scattdims)) { - l = cloog_loop_generate_restricted(temp, level, scalar_new, - scaldims, nb_scattdims, options); - - if (l != NULL) - cloog_loop_add_list(&res, &now, l); - } else - cloog_loop_add(&res, &now, temp); - - temp = next ; - } - - return res ; -} - - -/* Compare loop with the next loop based on their constant dimensions. - * The result is < 0, == 0 or > 0 depending on whether the constant - * dimensions of loop are lexicographically smaller, equal or greater - * than those of loop->next. - * If loop is the last in the list, then it is assumed to be smaller - * than the "next" one. - */ -static int cloog_loop_next_scal_cmp(CloogLoop *loop) -{ - int i; - int nb_scaldims; - - if (!loop->next) - return -1; - - nb_scaldims = loop->block->nb_scaldims; - if (loop->next->block->nb_scaldims < nb_scaldims) - nb_scaldims = loop->next->block->nb_scaldims; - - for (i = 0; i < nb_scaldims; ++i) { - int cmp = cloog_int_cmp(loop->block->scaldims[i], - loop->next->block->scaldims[i]); - if (cmp) - return cmp; - } - return loop->block->nb_scaldims - loop->next->block->nb_scaldims; -} - - -/* Check whether the globally constant dimensions of a and b - * have the same value for all globally constant dimensions - * that are situated before any (locally) non-constant dimension. - */ -static int cloog_loop_equal_prefix(CloogLoop *a, CloogLoop *b, - int *scaldims, int nb_scattdims) -{ - int i; - int cst = 0; - int dim = 0; - - for (i = 0; i < nb_scattdims; ++i) { - if (!scaldims[i]) { - dim++; - continue; - } - if (!cloog_int_eq(a->block->scaldims[cst], b->block->scaldims[cst])) - break; - cst++; - } - for (i = i + 1; i < nb_scattdims; ++i) { - if (scaldims[i]) - continue; - if (!cloog_domain_lazy_isconstant(a->domain, dim, NULL)) - return 0; - /* No need to check that dim is also constant in b and that the - * constant values are equal. That will happen during the check - * whether the two domains are equal. - */ - dim++; - } - return 1; -} - - -/* Try to block adjacent loops in the loop list "loop". - * We only attempt blocking if the constant dimensions of the loops - * in the least are (not necessarily strictly) increasing. - * Then we look for a sublist such that the first (begin) has constant - * dimensions strictly larger than the previous loop in the complete - * list and such that the loop (end) after the last loop in the sublist - * has constant dimensions strictly larger than the last loop in the sublist. - * Furthermore, all loops in the sublist should have the same domain - * (with globally constant dimensions removed) and the difference - * (if any) in constant dimensions may only occur after all the - * (locally) constant dimensions. - * If we find such a sublist, then the blocks of all but the first - * are merged into the block of the first. - * - * Note that this function can only be called before the global - * blocklist has been created because it may otherwise modify and destroy - * elements on that list. - */ -CloogLoop *cloog_loop_block(CloogLoop *loop, int *scaldims, int nb_scattdims) -{ - CloogLoop *begin, *end, *l; - int begin_after_previous; - int end_after_previous; - - if (!loop->next) - return loop; - for (begin = loop; begin; begin = begin->next) { - if (!begin->block || !begin->block->scaldims) - return loop; - if (cloog_loop_next_scal_cmp(begin) > 0) - return loop; - } - - begin_after_previous = 1; - for (begin = loop; begin; begin = begin->next) { - if (!begin_after_previous) { - begin_after_previous = cloog_loop_next_scal_cmp(begin) < 0; - continue; - } - - end_after_previous = cloog_loop_next_scal_cmp(begin) < 0; - for (end = begin->next; end; end = end->next) { - if (!cloog_loop_equal_prefix(begin, end, scaldims, nb_scattdims)) - break; - if (!cloog_domain_lazy_equal(begin->domain, end->domain)) - break; - end_after_previous = cloog_loop_next_scal_cmp(end) < 0; - } - if (end != begin->next && end_after_previous) { - for (l = begin->next; l != end; l = begin->next) { - cloog_block_merge(begin->block, l->block); - begin->next = l->next; - cloog_loop_free_parts(l, 1, 0, 1, 0); - } - } - - begin_after_previous = cloog_loop_next_scal_cmp(begin) < 0; - } - - return loop; -} - - -/** - * Check whether for any fixed iteration of the outer loops, - * there is an iteration of loop1 that is lexicographically greater - * than an iteration of loop2. - * Return 1 if there exists (or may exist) such a pair. - * Return 0 if all iterations of loop1 are lexicographically smaller - * than the iterations of loop2. - * If no iteration is lexicographically greater, but if there are - * iterations that are equal to iterations of loop2, then return "def". - * This is useful for ensuring that such statements are not reordered. - * Some users, including the test_run target in test, expect - * the statements at a given point to be run in the original order. - * Passing the value "0" for "def" would allow such statements to be reordered - * and would allow for the detection of more components. - */ -int cloog_loop_follows(CloogLoop *loop1, CloogLoop *loop2, - int level, int scalar, int *scaldims, int nb_scattdims, int def) -{ - int dim1, dim2; - - dim1 = cloog_domain_dimension(loop1->domain); - dim2 = cloog_domain_dimension(loop2->domain); - while ((level <= dim1 && level <= dim2) || - level_is_constant(level, scalar, scaldims, nb_scattdims)) { - if (level_is_constant(level, scalar, scaldims, nb_scattdims)) { - int cmp = cloog_loop_constant_cmp(loop1, loop2, level, scaldims, - nb_scattdims, scalar); - if (cmp > 0) - return 1; - if (cmp < 0) - return 0; - scalar += scaldims[level + scalar - 1]; - } else { - int follows = cloog_domain_follows(loop1->domain, loop2->domain, - level); - if (follows > 0) - return 1; - if (follows < 0) - return 0; - level++; - } - } - - return def; -} - - -/* Structure for representing the nodes in the graph being traversed - * using Tarjan's algorithm. - * index represents the order in which nodes are visited. - * min_index is the index of the root of a (sub)component. - * on_stack indicates whether the node is currently on the stack. - */ -struct cloog_loop_sort_node { - int index; - int min_index; - int on_stack; -}; -/* Structure for representing the graph being traversed - * using Tarjan's algorithm. - * len is the number of nodes - * node is an array of nodes - * stack contains the nodes on the path from the root to the current node - * sp is the stack pointer - * index is the index of the last node visited - * order contains the elements of the components separated by -1 - * op represents the current position in order - */ -struct cloog_loop_sort { - int len; - struct cloog_loop_sort_node *node; - int *stack; - int sp; - int index; - int *order; - int op; -}; - -/* Allocate and initialize cloog_loop_sort structure. - */ -static struct cloog_loop_sort *cloog_loop_sort_alloc(int len) -{ - struct cloog_loop_sort *s; - int i; - - s = (struct cloog_loop_sort *)malloc(sizeof(struct cloog_loop_sort)); - assert(s); - s->len = len; - s->node = (struct cloog_loop_sort_node *) - malloc(len * sizeof(struct cloog_loop_sort_node)); - assert(s->node); - for (i = 0; i < len; ++i) - s->node[i].index = -1; - s->stack = (int *)malloc(len * sizeof(int)); - assert(s->stack); - s->order = (int *)malloc(2 * len * sizeof(int)); - assert(s->order); - - s->sp = 0; - s->index = 0; - s->op = 0; - - return s; -} - -/* Free cloog_loop_sort structure. - */ -static void cloog_loop_sort_free(struct cloog_loop_sort *s) -{ - free(s->node); - free(s->stack); - free(s->order); - free(s); -} - - -/* Check whether for any fixed iteration of the outer loops, - * there is an iteration of loop1 that is lexicographically greater - * than an iteration of loop2, where the iteration domains are - * available in the inner loops of the arguments. - * - * By using this functions to detect components, we ensure that - * two CloogLoops appear in the same component if some iterations of - * each loop should be executed before some iterations of the other loop. - * Since we also want two CloogLoops that have exactly the same - * iteration domain at the current level to be placed in the same component, - * we first check if these domains are indeed the same. - */ -static int inner_loop_follows(CloogLoop *loop1, CloogLoop *loop2, - int level, int scalar, int *scaldims, int nb_scattdims, int def) -{ - int f; - - f = cloog_domain_lazy_equal(loop1->domain, loop2->domain); - if (!f) - f = cloog_loop_follows(loop1->inner, loop2->inner, - level, scalar, scaldims, nb_scattdims, def); - - return f; -} - - -/* Perform Tarjan's algorithm for computing the strongly connected components - * in the graph with the individual CloogLoops as vertices. - * Two CloopLoops appear in the same component if they both (indirectly) - * "follow" each other, where the following relation is determined - * by the follows function. - */ -static void cloog_loop_components_tarjan(struct cloog_loop_sort *s, - CloogLoop **loop_array, int i, int level, int scalar, int *scaldims, - int nb_scattdims, - int (*follows)(CloogLoop *loop1, CloogLoop *loop2, - int level, int scalar, int *scaldims, int nb_scattdims, int def)) -{ - int j; - - s->node[i].index = s->index; - s->node[i].min_index = s->index; - s->node[i].on_stack = 1; - s->index++; - s->stack[s->sp++] = i; - - for (j = s->len - 1; j >= 0; --j) { - int f; - - if (j == i) - continue; - if (s->node[j].index >= 0 && - (!s->node[j].on_stack || - s->node[j].index > s->node[i].min_index)) - continue; - - f = follows(loop_array[i], loop_array[j], - level, scalar, scaldims, nb_scattdims, i > j); - if (!f) - continue; - - if (s->node[j].index < 0) { - cloog_loop_components_tarjan(s, loop_array, j, level, scalar, - scaldims, nb_scattdims, follows); - if (s->node[j].min_index < s->node[i].min_index) - s->node[i].min_index = s->node[j].min_index; - } else if (s->node[j].index < s->node[i].min_index) - s->node[i].min_index = s->node[j].index; - } - - if (s->node[i].index != s->node[i].min_index) - return; - - do { - j = s->stack[--s->sp]; - s->node[j].on_stack = 0; - s->order[s->op++] = j; - } while (j != i); - s->order[s->op++] = -1; -} - - -static int qsort_index_cmp(const void *p1, const void *p2) -{ - return *(int *)p1 - *(int *)p2; -} - -/* Sort the elements of the component starting at list. - * The list is terminated by a -1. - */ -static void sort_component(int *list) -{ - int len; - - for (len = 0; list[len] != -1; ++len) - ; - - qsort(list, len, sizeof(int), qsort_index_cmp); -} - -/* Given an array of indices "list" into the "loop_array" array, - * terminated by -1, construct a linked list of the corresponding - * entries and put the result in *res. - * The value returned is the number of CloogLoops in the (linked) list - */ -static int extract_component(CloogLoop **loop_array, int *list, CloogLoop **res) -{ - int i = 0; - - sort_component(list); - while (list[i] != -1) { - *res = loop_array[list[i]]; - res = &(*res)->next; - ++i; - } - *res = NULL; - - return i; -} - - -/** - * Call cloog_loop_generate_scalar or cloog_loop_generate_general - * on each of the strongly connected components in the list of CloogLoops - * pointed to by "loop". - * - * We use Tarjan's algorithm to find the strongly connected components. - * Note that this algorithm also topologically sorts the components. - * - * The components are treated separately to avoid spurious separations. - * The concatentation of the results may contain successive loops - * with the same bounds, so we try to combine such loops. - */ -CloogLoop *cloog_loop_generate_components(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options) -{ - int i, nb_loops; - CloogLoop *tmp; - CloogLoop *res, **res_next; - CloogLoop **loop_array; - struct cloog_loop_sort *s; - - if (level == 0 || !loop->next) - return cloog_loop_generate_general(loop, level, scalar, - scaldims, nb_scattdims, options); - - nb_loops = cloog_loop_count(loop); - - loop_array = (CloogLoop **)malloc(nb_loops * sizeof(CloogLoop *)); - assert(loop_array); - - for (i = 0, tmp = loop; i < nb_loops; i++, tmp = tmp->next) - loop_array[i] = tmp; - - s = cloog_loop_sort_alloc(nb_loops); - for (i = nb_loops - 1; i >= 0; --i) { - if (s->node[i].index >= 0) - continue; - cloog_loop_components_tarjan(s, loop_array, i, level, scalar, scaldims, - nb_scattdims, &inner_loop_follows); - } - - i = 0; - res = NULL; - res_next = &res; - while (nb_loops) { - int n = extract_component(loop_array, &s->order[i], &tmp); - i += n + 1; - nb_loops -= n; - *res_next = cloog_loop_generate_general(tmp, level, scalar, - scaldims, nb_scattdims, options); - while (*res_next) - res_next = &(*res_next)->next; - } - - cloog_loop_sort_free(s); - - free(loop_array); - - res = cloog_loop_combine(res); - - return res; -} - - -/* For each loop in the list "loop", decompose the list of - * inner loops into strongly connected components and put - * the components into separate loops at the top level. - */ -CloogLoop *cloog_loop_decompose_inner(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims) -{ - CloogLoop *l, *tmp; - CloogLoop **loop_array; - int i, n_loops, max_loops = 0; - struct cloog_loop_sort *s; - - for (l = loop; l; l = l->next) { - n_loops = cloog_loop_count(l->inner); - if (max_loops < n_loops) - max_loops = n_loops; - } - - if (max_loops <= 1) - return loop; - - loop_array = (CloogLoop **)malloc(max_loops * sizeof(CloogLoop *)); - assert(loop_array); - - for (l = loop; l; l = l->next) { - int n; - - for (i = 0, tmp = l->inner; tmp; i++, tmp = tmp->next) - loop_array[i] = tmp; - n_loops = i; - if (n_loops <= 1) - continue; - - s = cloog_loop_sort_alloc(n_loops); - for (i = n_loops - 1; i >= 0; --i) { - if (s->node[i].index >= 0) - continue; - cloog_loop_components_tarjan(s, loop_array, i, level, scalar, - scaldims, nb_scattdims, &cloog_loop_follows); - } - - n = extract_component(loop_array, s->order, &l->inner); - n_loops -= n; - i = n + 1; - while (n_loops) { - CloogLoop *inner; - - n = extract_component(loop_array, &s->order[i], &inner); - n_loops -= n; - i += n + 1; - tmp = cloog_loop_alloc(l->state, cloog_domain_copy(l->domain), - l->otl, l->stride, l->block, inner, l->next); - l->next = tmp; - l = tmp; - } - - cloog_loop_sort_free(s); - } - - free(loop_array); - - return loop; -} - - -CloogLoop *cloog_loop_generate_restricted(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options) -{ - /* To save both time and memory, we switch here depending on whether the - * current dimension is scalar (simplified processing) or not (general - * processing). - */ - if (level_is_constant(level, scalar, scaldims, nb_scattdims)) - return cloog_loop_generate_scalar(loop, level, scalar, - scaldims, nb_scattdims, options); - /* - * 2. Compute the projection of each polyhedron onto the outermost - * loop variable and the parameters. - */ - loop = cloog_loop_project_all(loop, level); - - return cloog_loop_generate_components(loop, level, scalar, scaldims, - nb_scattdims, options); -} - - -CloogLoop *cloog_loop_generate_restricted_or_stop(CloogLoop *loop, - CloogDomain *context, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options) -{ - /* If the user asked to stop code generation at this level, let's stop. */ - if ((options->stop >= 0) && (level+scalar >= options->stop+1)) - return cloog_loop_stop(loop,context) ; - - return cloog_loop_generate_restricted(loop, level, scalar, scaldims, - nb_scattdims, options); -} - - -/** - * cloog_loop_generate function: - * Adaptation from LoopGen 0.4 by F. Quillere. This function implements the - * Quillere algorithm for polyhedron scanning from step 1 to 2. - * (see the Quillere paper). - * - loop is the loop for which we have to generate a scanning code, - * - context is the context of the current loop (constraints on parameter and/or - * on outer loop counters), - * - level is the current non-scalar dimension, - * - scalar is the current scalar dimension, - * - scaldims is the boolean array saying whether a dimension is scalar or not, - * - nb_scattdims is the size of the scaldims array, - * - options are the general code generation options. - ** - * - October 26th 2001: first version. - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - June 15th 2005: a memory leak fixed (loop was not entirely freed when - * the result of cloog_loop_restrict was NULL). - * - June 22nd 2005: Adaptation for GMP. - * - September 2nd 2005: The function have been cutted out in two pieces: - * cloog_loop_generate and this one, in order to handle - * the scalar dimension case more efficiently with - * cloog_loop_generate_scalar. - * - November 15th 2005: (debug) Condition for stop option no more take care of - * further scalar dimensions. - */ -CloogLoop *cloog_loop_generate(CloogLoop *loop, CloogDomain *context, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options) -{ - /* 1. Replace each polyhedron by its intersection with the context. - */ - loop = cloog_loop_restrict_all(loop, context); - if (!loop) - return NULL; - - return cloog_loop_generate_restricted_or_stop(loop, context, - level, scalar, scaldims, nb_scattdims, options); -} - - -/* - * Internal function for simplifying a single loop in a list of loops. - * See cloog_loop_simplify. - */ -static CloogLoop *loop_simplify(CloogLoop *loop, CloogDomain *context, - int level, int nb_scattdims, CloogOptions *options) -{ - int domain_dim; - CloogBlock * new_block ; - CloogLoop *simplified, *inner; - CloogDomain * domain, * simp, * inter, * extended_context ; - - domain = loop->domain ; - - domain_dim = cloog_domain_dimension(domain); - extended_context = cloog_domain_extend(context, domain_dim); - inter = cloog_domain_intersection(domain,extended_context) ; - simp = cloog_domain_simplify(domain, extended_context); - cloog_domain_free(extended_context) ; - - /* If the constraint system is never true, go to the next one. */ - if (cloog_domain_never_integral(simp)) { - cloog_loop_free(loop->inner); - cloog_domain_free(inter); - cloog_domain_free(simp); - return NULL; - } - - inner = cloog_loop_simplify(loop->inner, inter, level+1, nb_scattdims, - options); - - if ((inner == NULL) && (loop->block == NULL)) { - cloog_domain_free(inter); - cloog_domain_free(simp); - return NULL; - } - - new_block = cloog_block_copy(loop->block) ; - - simplified = cloog_loop_alloc(loop->state, simp, loop->otl, loop->stride, - new_block, inner, NULL); - - /* Only save the domains, if it involves only scattering dimensions. */ - if (options->save_domains) { - if (domain_dim > nb_scattdims) { - CloogDomain *t; - inter = cloog_domain_project(t = inter, nb_scattdims); - cloog_domain_free(t); - } - inter = cloog_domain_add_stride_constraint(inter, loop->stride); - simplified->unsimplified = inter; - } else - cloog_domain_free(inter); - - return(simplified) ; -} - - -/** - * cloog_loop_simplify function: - * This function implements the part 6. of the Quillere algorithm, it - * recursively simplifies each loop in the context of the preceding loop domain. - * It returns a pointer to the simplified loop list. - * The cloog_domain_simplify (DomainSimplify) behaviour is really bad with - * polyhedra union and some really awful sidesteppings were written, I plan - * to solve that... - * - October 31th 2001: first version. - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - April 16th 2005: a memory leak fixed (extended_context was not freed). - * - June 15th 2005: a memory leak fixed (loop was not conveniently freed - * when the constraint system is never true). - * - October 27th 2005: - this function called before cloog_loop_fast_simplify - * is now the official cloog_loop_simplify function in - * replacement of a slower and more complex one (after - * deep changes in the pretty printer). - * - we use cloog_loop_disjoint to fix the problem when - * simplifying gives a union of polyhedra (before, it - * was under the responsibility of the pretty printer). - */ -CloogLoop *cloog_loop_simplify(CloogLoop *loop, CloogDomain *context, int level, - int nb_scattdims, CloogOptions *options) -{ - CloogLoop *now; - CloogLoop *res = NULL; - CloogLoop **next = &res; - int need_split = 0; - - for (now = loop; now; now = now->next) - if (!cloog_domain_isconvex(now->domain)) { - now->domain = cloog_domain_simplify_union(now->domain); - if (!cloog_domain_isconvex(now->domain)) - need_split = 1; - } - - /* If the input of CLooG contains any union domains, then they - * may not have been split yet at this point. Do so now as the - * clast construction assumes there are no union domains. - */ - if (need_split) - loop = cloog_loop_disjoint(loop); - - for (now = loop; now; now = now->next) { - *next = loop_simplify(now, context, level, nb_scattdims, options); - - now->inner = NULL; /* For loop integrity. */ - cloog_domain_free(now->domain); - now->domain = NULL; - - if (*next) - next = &(*next)->next; - } - cloog_loop_free(loop); - - return res; -} - - -/** - * cloog_loop_scatter function: - * This function add the scattering (scheduling) informations in a loop. - */ -void cloog_loop_scatter(CloogLoop * loop, CloogScattering *scatt) -{ - loop->domain = cloog_domain_scatter(loop->domain, scatt); -} - diff --git a/cloog-0.16.3/source/matrix.c b/cloog-0.16.3/source/matrix.c deleted file mode 100644 index 43c2380..0000000 --- a/cloog-0.16.3/source/matrix.c +++ /dev/null @@ -1,213 +0,0 @@ - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** cloogmatrix.c ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - -#include -#include -#include -#include "../include/cloog/cloog.h" - -/** - * cloog_matrix_alloc: - * Allocate a CloogMatrix data structure with NbRows rows and NbColumns columns. - * All values are initialized to 0. - * This method returns a pointer to the data structure if successful or a NULL - * pointer otherwise. - */ -CloogMatrix *cloog_matrix_alloc(unsigned NbRows, unsigned NbColumns) -{ - CloogMatrix *matrix; - cloog_int_t **p, *q; - int i, j; - - matrix = (CloogMatrix *)malloc(sizeof(CloogMatrix)); - - if (!matrix) - return NULL; - - matrix->NbRows = NbRows; - matrix->NbColumns = NbColumns; - - if (!NbRows || !NbColumns) { - matrix->p = NULL; - matrix->p_Init = NULL; - return matrix; - } - - p = (cloog_int_t **)malloc(NbRows * sizeof(cloog_int_t *)); - - if (p == NULL) { - free (matrix); - return NULL; - } - - q = (cloog_int_t *)malloc(NbRows * NbColumns * sizeof(cloog_int_t)); - - if (q == NULL) { - free (matrix); - free (p); - return NULL; - } - - matrix->p = p; - matrix->p_Init = q; - - for (i = 0; i < NbRows; i++) { - *p++ = q; - for (j = 0; j < NbColumns; j++) { - cloog_int_init(*(q+j)); - cloog_int_set_si(*(q+j), 0); - } - q += NbColumns; - } - - return matrix; -} - -/** - * cloog_matrix_free: - * Free matrix. - */ -void cloog_matrix_free(CloogMatrix * matrix) -{ - int i; - cloog_int_t *p; - int size = matrix->NbRows * matrix->NbColumns; - - p = matrix->p_Init; - - for (i = 0; i < size; i++) - cloog_int_clear(*p++); - - if (matrix) { - free(matrix->p_Init); - free(matrix->p); - free(matrix); - } -} - - -/** - * Print the elements of CloogMatrix M to file, with each row prefixed - * by prefix and suffixed by suffix. - */ -void cloog_matrix_print_structure(FILE *file, CloogMatrix *M, - const char *prefix, const char *suffix) -{ - int i, j; - - for (i = 0; i < M->NbRows; ++i) { - fprintf(file, "%s", prefix); - for (j = 0; j < M->NbColumns; ++j) { - cloog_int_print(file, M->p[i][j]); - fprintf(file, " "); - } - fprintf(file, "%s\n", suffix); - } -} - -/** - * cloog_matrix_print function: - * This function prints the content of a CloogMatrix structure (matrix) into a - * file (foo, possibly stdout). - */ -void cloog_matrix_print(FILE* foo, CloogMatrix* m) -{ - if (!m) - fprintf(foo, "(null)\n"); - - fprintf(foo, "%d %d\n", m->NbRows, m->NbColumns); - cloog_matrix_print_structure(foo, m, "", ""); - fflush(foo); -} - - -static char *next_line(FILE *input, char *line, unsigned len) -{ - char *p; - - do { - if (!(p = fgets(line, len, input))) - return NULL; - while (isspace(*p) && *p != '\n') - ++p; - } while (*p == '#' || *p == '\n'); - - return p; -} - -CloogMatrix *cloog_matrix_read(FILE *input) -{ - unsigned n_row, n_col; - char line[1024]; - - if (!next_line(input, line, sizeof(line))) - cloog_die("Input error.\n"); - if (sscanf(line, "%u %u", &n_row, &n_col) != 2) - cloog_die("Input error.\n"); - - return cloog_matrix_read_of_size(input, n_row, n_col); -} - -/** - * Read a matrix in PolyLib format from input. - */ -CloogMatrix *cloog_matrix_read_of_size(FILE *input, - unsigned n_row, unsigned n_col) -{ - CloogMatrix *M; - int i, j; - char line[1024]; - char val[1024]; - char *p; - - M = cloog_matrix_alloc(n_row, n_col); - if (!M) - cloog_die("memory overflow.\n"); - for (i = 0; i < n_row; ++i) { - int offset; - int n; - - p = next_line(input, line, sizeof(line)); - if (!p) - cloog_die("Input error.\n"); - for (j = 0; j < n_col; ++j) { - n = sscanf(p, "%s%n", val, &offset); - if (!n) - cloog_die("Input error.\n"); - cloog_int_read(M->p[i][j], val); - p += offset; - } - } - - return M; -} diff --git a/cloog-0.16.3/source/matrix/constraintset.c b/cloog-0.16.3/source/matrix/constraintset.c deleted file mode 100644 index 78025f8..0000000 --- a/cloog-0.16.3/source/matrix/constraintset.c +++ /dev/null @@ -1,1056 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** constraintset.c ** - **-------------------------------------------------------------------** - ** First version: april 17th 2005 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ -/* CAUTION: the english used for comments is probably the worst you ever read, - * please feel free to correct and improve it ! - */ - - -# include -# include -# include -#include -#include - - -#define ALLOC(type) (type*)malloc(sizeof(type)) -#define ALLOCN(type,n) (type*)malloc((n)*sizeof(type)) - - -CloogConstraint *cloog_constraint_first(CloogConstraintSet *constraints); -CloogConstraint *cloog_constraint_next(CloogConstraint *constraint); - - -CloogConstraintSet *cloog_constraint_set_from_cloog_matrix(CloogMatrix *M) -{ - return (CloogConstraintSet *)M; -} - - -void cloog_constraint_set_free(CloogConstraintSet *constraints) -{ - cloog_matrix_free(&constraints->M); -} - -int cloog_constraint_set_contains_level(CloogConstraintSet *constraints, - int level, int nb_parameters) -{ - return constraints->M.NbColumns - 2 - nb_parameters >= level; -} - -/* Check if the variable at position level is defined by an - * equality. If so, return the row number. Otherwise, return -1. - * - * If there is an equality, we can print it directly -no ambiguity-. - * PolyLib can give more than one equality, we use just the first one - * (this is a PolyLib problem, but all equalities are equivalent). - */ -CloogConstraint *cloog_constraint_set_defining_equality(CloogConstraintSet *constraints, int level) -{ - CloogConstraint *constraint = ALLOC(CloogConstraint); - int i; - - constraint->set = constraints; - for (i = 0; i < constraints->M.NbRows; i++) - if (cloog_int_is_zero(constraints->M.p[i][0]) && - !cloog_int_is_zero(constraints->M.p[i][level])) { - constraint->line = &constraints->M.p[i]; - return constraint; - } - free(constraint); - return cloog_constraint_invalid(); -} - -/* Check if the variable (e) at position level is defined by a - * pair of inequalities - * + -m e + + k1 >= 0 - * <-a, i> + m e + <-b, p> + k2 >= 0 - * with 0 <= k1 + k2 < m - * If so return the row number of the upper bound and set *lower - * to the row number of the lower bound. If not, return -1. - * - * If the variable at position level occurs in any other constraint, - * then we currently return -1. The modulo guard that we would generate - * would still be correct, but we would also need to generate - * guards corresponding to the other constraints, and this has not - * been implemented yet. - */ -CloogConstraint *cloog_constraint_set_defining_inequalities(CloogConstraintSet *constraints, - int level, CloogConstraint **lower, int nb_par) -{ - int i, j, k; - cloog_int_t m; - CloogMatrix *matrix = &constraints->M; - unsigned len = matrix->NbColumns - 2; - unsigned nb_iter = len - nb_par; - CloogConstraint *constraint; - - for (i = 0; i < matrix->NbRows; i++) { - if (cloog_int_is_zero(matrix->p[i][level])) - continue; - if (cloog_int_is_zero(matrix->p[i][0])) - return cloog_constraint_invalid(); - if (cloog_int_is_one(matrix->p[i][level])) - return cloog_constraint_invalid(); - if (cloog_int_is_neg_one(matrix->p[i][level])) - return cloog_constraint_invalid(); - if (cloog_seq_first_non_zero(matrix->p[i]+level+1, - (1+nb_iter)-(level+1)) != -1) - return cloog_constraint_invalid(); - for (j = i+1; j < matrix->NbRows; ++j) { - if (cloog_int_is_zero(matrix->p[j][level])) - continue; - if (cloog_int_is_zero(matrix->p[j][0])) - return cloog_constraint_invalid(); - if (cloog_int_is_one(matrix->p[j][level])) - return cloog_constraint_invalid(); - if (cloog_int_is_neg_one(matrix->p[j][level])) - return cloog_constraint_invalid(); - if (cloog_seq_first_non_zero(matrix->p[j]+level+1, - (1+nb_iter)-(level+1)) != -1) - return cloog_constraint_invalid(); - - cloog_int_init(m); - cloog_int_add(m, matrix->p[i][1+len], matrix->p[j][1+len]); - if (cloog_int_is_neg(m) || - cloog_int_abs_ge(m, matrix->p[i][level])) { - cloog_int_clear(m); - return cloog_constraint_invalid(); - } - cloog_int_clear(m); - - if (!cloog_seq_is_neg(matrix->p[i]+1, matrix->p[j]+1, - len)) - return cloog_constraint_invalid(); - for (k = j+1; k < matrix->NbRows; ++k) - if (!cloog_int_is_zero(matrix->p[k][level])) - return cloog_constraint_invalid(); - *lower = ALLOC(CloogConstraint); - constraint = ALLOC(CloogConstraint); - (*lower)->set = constraints; - constraint->set = constraints; - if (cloog_int_is_pos(matrix->p[i][level])) { - (*lower)->line = &matrix->p[i]; - constraint->line = &matrix->p[j]; - } else { - (*lower)->line = &matrix->p[j]; - constraint->line = &matrix->p[i]; - } - return constraint; - } - } - return cloog_constraint_invalid(); -} - -int cloog_constraint_set_total_dimension(CloogConstraintSet *constraints) -{ - return constraints->M.NbColumns - 2; -} - -int cloog_constraint_set_n_iterators(CloogConstraintSet *constraint, int nb_par) -{ - return cloog_constraint_set_total_dimension(constraint) - nb_par; -} - -int cloog_equal_total_dimension(CloogEqualities *equal) -{ - return cloog_constraint_set_total_dimension(equal->constraints); -} - -int cloog_constraint_total_dimension(CloogConstraint *constraint) -{ - return cloog_constraint_set_total_dimension(constraint->set); -} - - - -/****************************************************************************** - * Equalities spreading functions * - ******************************************************************************/ - - -/* Equalities are stored inside a CloogMatrix data structure called "equal". - * This matrix has (nb_scattering + nb_iterators + 1) rows (i.e. total - * dimensions + 1, the "+ 1" is because a statement can be included inside an - * external loop without iteration domain), and (nb_scattering + nb_iterators + - * nb_parameters + 2) columns (all unknowns plus the scalar plus the equality - * type). The ith row corresponds to the equality "= 0" for the ith dimension - * iterator. The first column gives the equality type (0: no equality, then - * EQTYPE_* -see pprint.h-). At each recursion of pprint, if an equality for - * the current level is found, the corresponding row is updated. Then the - * equality if it exists is used to simplify expressions (e.g. if we have - * "i+1" while we know that "i=2", we simplify it in "3"). At the end of - * the pprint call, the corresponding row is reset to zero. - */ - -CloogEqualities *cloog_equal_alloc(int n, int nb_levels, - int nb_parameters) -{ - int i; - CloogEqualities *equal = ALLOC(CloogEqualities); - - equal->constraints = cloog_constraint_set_from_cloog_matrix( - cloog_matrix_alloc(n, nb_levels + nb_parameters + 1)); - equal->types = ALLOCN(int, n); - for (i = 0; i < n; ++i) - equal->types[i] = EQTYPE_NONE; - return equal; -} - -void cloog_equal_free(CloogEqualities *equal) -{ - cloog_matrix_free(&equal->constraints->M); - free(equal->types); - free(equal); -} - -int cloog_equal_count(CloogEqualities *equal) -{ - return equal->constraints->M.NbRows; -} - -CloogConstraintSet *cloog_equal_constraints(CloogEqualities *equal) -{ - return equal->constraints; -} - - -/** - * cloog_constraint_equal_type function : - * This function returns the type of the equality in the constraint (line) of - * (constraints) for the element (level). An equality is 'constant' iff all - * other factors are null except the constant one. It is a 'pure item' iff - * it is equal or opposite to a single variable or parameter. - * Otherwise it is an 'affine expression'. - * For instance: - * i = -13 is constant, i = j, j = -M are pure items, - * j = 2*M, i = j+1, 2*j = M are affine expressions. - * - * - constraints is the matrix of constraints, - * - level is the column number in equal of the element which is 'equal to', - ** - * - July 3rd 2002: first version, called pprint_equal_isconstant. - * - July 6th 2002: adaptation for the 3 types. - * - June 15th 2005: (debug) expr = domain->Constraint[line] was evaluated - * before checking if line != ONE_TIME_LOOP. Since - * ONE_TIME_LOOP is -1, an invalid read was possible. - * - October 19th 2005: Removal of the once-time-loop specific processing. - */ -static int cloog_constraint_equal_type(CloogConstraint *constraint, int level) -{ - int i, one=0 ; - cloog_int_t *expr; - - expr = *constraint->line; - - if (!cloog_int_is_one(expr[level]) && !cloog_int_is_neg_one(expr[level])) - return EQTYPE_EXAFFINE; - - /* There is only one non null factor, and it must be +1 or -1 for - * iterators or parameters. - */ - for (i = 1;i <= constraint->set->M.NbColumns-2; i++) - if (!cloog_int_is_zero(expr[i]) && (i != level)) { - if ((!cloog_int_is_one(expr[i]) && !cloog_int_is_neg_one(expr[i])) || (one != 0)) - return EQTYPE_EXAFFINE ; - else - one = 1 ; - } - /* if the constant factor is non null, it must be alone. */ - if (one != 0) { - if (!cloog_int_is_zero(expr[constraint->set->M.NbColumns-1])) - return EQTYPE_EXAFFINE ; - } - else - return EQTYPE_CONSTANT ; - - return EQTYPE_PUREITEM ; -} - - -int cloog_equal_type(CloogEqualities *equal, int level) -{ - return equal->types[level-1]; -} - - -/** - * cloog_equal_update function: - * this function updates a matrix of equalities where each row corresponds to - * the equality "=0" of an affine expression such that the entry at column - * "row" (="level") is not zero. This matrix is upper-triangular, except the - * row number "level-1" which has to be updated for the matrix to be triangular. - * This function achieves the processing. - * - equal is the matrix to be updated, - * - level gives the row that has to be updated (it is actually row "level-1"), - * - nb_par is the number of parameters of the program. - ** - * - September 20th 2005: first version. - */ -static void cloog_equal_update(CloogEqualities *equal, int level, int nb_par) -{ int i, j ; - cloog_int_t gcd, factor_level, factor_outer, temp_level, temp_outer; - - cloog_int_init(gcd); - cloog_int_init(temp_level); - cloog_int_init(temp_outer); - cloog_int_init(factor_level); - cloog_int_init(factor_outer); - - /* For each previous level, */ - for (i=level-2;i>=0;i--) - { /* if the corresponding iterator is inside the current equality and is equal - * to something, - */ - if (!cloog_int_is_zero(equal->constraints->M.p[level-1][i+1]) && equal->types[i]) - { /* Compute the Greatest Common Divisor. */ - cloog_int_gcd(gcd, equal->constraints->M.p[level-1][i+1], - equal->constraints->M.p[i][i+1]); - - /* Compute the factors to apply to each row vector element. */ - cloog_int_divexact(factor_level, equal->constraints->M.p[i][i+1], gcd); - cloog_int_divexact(factor_outer, equal->constraints->M.p[level-1][i+1], gcd); - - /* Now update the row 'level'. */ - /* - the iterators, up to level, */ - for (j = 1; j <= level; j++) { - cloog_int_mul(temp_level, factor_level, - equal->constraints->M.p[level-1][j]); - cloog_int_mul(temp_outer, factor_outer, equal->constraints->M.p[i][j]); - cloog_int_sub(equal->constraints->M.p[level-1][j], temp_level, temp_outer); - } - /* - between last useful iterator (level) and the first parameter, the - * matrix is sparse (full of zeroes), we just do nothing there. - * - the parameters and the scalar. - */ - for (j = 0; j < nb_par + 1; j++) { - cloog_int_mul(temp_level,factor_level, - equal->constraints->M.p[level-1] - [equal->constraints->M.NbColumns-j-1]); - cloog_int_mul(temp_outer,factor_outer, - equal->constraints->M.p[i][equal->constraints->M.NbColumns-j-1]); - cloog_int_sub(equal->constraints->M.p[level-1] - [equal->constraints->M.NbColumns-j-1], - temp_level,temp_outer) ; - } - } - } - - /* Normalize (divide by GCD of all elements) the updated equality. */ - cloog_seq_normalize(&(equal->constraints->M.p[level-1][1]), - equal->constraints->M.NbColumns-1); - - cloog_int_clear(gcd); - cloog_int_clear(temp_level); - cloog_int_clear(temp_outer); - cloog_int_clear(factor_level); - cloog_int_clear(factor_outer); -} - - -/** - * cloog_equal_add function: - * This function updates the row (level-1) of the equality matrix (equal) with - * the row that corresponds to the row (line) of the matrix (matrix). - * - equal is the matrix of equalities, - * - matrix is the matrix of constraints, - * - level is the column number in matrix of the element which is 'equal to', - * - line is the line number in matrix of the constraint we want to study, - * - the infos structure gives the user all options on code printing and more. - ** - * - July 2nd 2002: first version. - * - October 19th 2005: Addition of the once-time-loop specific processing. - */ -void cloog_equal_add(CloogEqualities *equal, CloogConstraintSet *constraints, - int level, CloogConstraint *line, int nb_par) -{ - int j; - CloogConstraint *i = cloog_constraint_invalid(); - CloogMatrix *matrix = &constraints->M; - - /* If we are in the case of a loop running once, this means that the equality - * comes from an inequality. Here we find this inequality. - */ - if (!cloog_constraint_is_valid(line)) - { for (i = cloog_constraint_first(constraints); - cloog_constraint_is_valid(i); i = cloog_constraint_next(i)) - if ((!cloog_int_is_zero(i->line[0][0]))&& (!cloog_int_is_zero(i->line[0][level]))) - { line = i ; - - /* Since in once-time-loops, equalities derive from inequalities, we - * may have to offset the values. For instance if we have 2i>=3, the - * equality is in fact i=2. This may happen when the level coefficient is - * not 1 or -1 and the scalar value is not zero. In any other case (e.g., - * if the inequality is an expression including outer loop counters or - * parameters) the once time loop would not have been detected - * because of floord and ceild functions. - */ - if (cloog_int_ne_si(i->line[0][level],1) && - cloog_int_ne_si(i->line[0][level],-1) && - !cloog_int_is_zero(i->line[0][matrix->NbColumns-1])) { - cloog_int_t denominator; - - cloog_int_init(denominator); - cloog_int_abs(denominator, i->line[0][level]); - cloog_int_fdiv_q(i->line[0][matrix->NbColumns-1], - i->line[0][matrix->NbColumns-1], denominator); - cloog_int_set_si(i->line[0][level], cloog_int_sgn(i->line[0][level])); - cloog_int_clear(denominator); - } - - break ; - } - } - assert(cloog_constraint_is_valid(line)); - - /* We update the line of equal corresponding to level: - * - the first element gives the equality type, - */ - equal->types[level-1] = cloog_constraint_equal_type(line, level); - /* - the other elements corresponding to the equality itself - * (the iterators up to level, then the parameters and the scalar). - */ - for (j=1;j<=level;j++) - cloog_int_set(equal->constraints->M.p[level-1][j], line->line[0][j]); - for (j = 0; j < nb_par + 1; j++) - cloog_int_set(equal->constraints->M.p[level-1][equal->constraints->M.NbColumns-j-1], - line->line[0][line->set->M.NbColumns-j-1]); - - if (cloog_constraint_is_valid(i)) - cloog_constraint_release(line); - cloog_equal_update(equal, level, nb_par); -} - - -/** - * cloog_equal_del function : - * This function reset the equality corresponding to the iterator (level) - * in the equality matrix (equal). - * - July 2nd 2002: first version. - */ -void cloog_equal_del(CloogEqualities *equal, int level) -{ - equal->types[level-1] = EQTYPE_NONE; -} - - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - -/** - * Function cloog_constraint_set_normalize: - * This function will modify the constraint system in such a way that when - * there is an equality depending on the element at level 'level', there are - * no more (in)equalities depending on this element. For instance, try - * test/valilache.cloog with options -f 8 -l 9, with and without the call - * to this function. At a given moment, for the level L we will have - * 32*P=L && L>=1 (P is a lower level), this constraint system cannot be - * translated directly into a source code. Thus, we normalize the domain to - * remove L from the inequalities. In our example, this leads to - * 32*P=L && 32*P>=1, that can be transated to the code - * if (P>=1) { L=32*P ; ... }. This function solves the DaeGon Kim bug. - * WARNING: Remember that if there is another call to Polylib after a call to - * this function, we have to recall this function. - * -June 16th 2005: first version (adaptation from URGent June-7th-2005 by - * N. Vasilache). - * - June 21rd 2005: Adaptation for GMP. - * - November 4th 2005: Complete rewriting, simpler and faster. It is no more an - * adaptation from URGent. - */ -void cloog_constraint_set_normalize(CloogConstraintSet *constraints, int level) -{ int ref, i, j ; - cloog_int_t factor_i, factor_ref, temp_i, temp_ref, gcd; - CloogMatrix *matrix = &constraints->M; - - if (matrix == NULL) - return ; - - /* Don't "normalize" the constant term. */ - if (level == matrix->NbColumns-1) - return; - - /* Let us find an equality for the current level that can be propagated. */ - for (ref=0;refNbRows;ref++) - if (cloog_int_is_zero(matrix->p[ref][0]) && !cloog_int_is_zero(matrix->p[ref][level])) { - cloog_int_init(gcd); - cloog_int_init(temp_i); - cloog_int_init(temp_ref); - cloog_int_init(factor_i); - cloog_int_init(factor_ref); - - /* Row "ref" is the reference equality, now let us find a row to simplify.*/ - for (i=ref+1;iNbRows;i++) - if (!cloog_int_is_zero(matrix->p[i][level])) { - /* Now let us set to 0 the "level" coefficient of row "j" using "ref". - * First we compute the factors to apply to each row vector element. - */ - cloog_int_gcd(gcd, matrix->p[ref][level], matrix->p[i][level]); - cloog_int_divexact(factor_i, matrix->p[ref][level], gcd); - cloog_int_divexact(factor_ref, matrix->p[i][level], gcd); - - /* Maybe we are simplifying an inequality: factor_i must not be <0. */ - if (cloog_int_is_neg(factor_i)) { - cloog_int_abs(factor_i, factor_i); - cloog_int_neg(factor_ref, factor_ref); - } - - /* Now update the vector. */ - for (j=1;jNbColumns;j++) { - cloog_int_mul(temp_i, factor_i, matrix->p[i][j]); - cloog_int_mul(temp_ref, factor_ref, matrix->p[ref][j]); - cloog_int_sub(matrix->p[i][j], temp_i, temp_ref); - } - - /* Normalize (divide by GCD of all elements) the updated vector. */ - cloog_seq_normalize(&(matrix->p[i][1]), matrix->NbColumns-1); - } - - cloog_int_clear(gcd); - cloog_int_clear(temp_i); - cloog_int_clear(temp_ref); - cloog_int_clear(factor_i); - cloog_int_clear(factor_ref); - break ; - } -} - - - -/** - * cloog_constraint_set_copy function: - * this functions builds and returns a "hard copy" (not a pointer copy) of a - * CloogMatrix data structure. - * - October 26th 2005: first version. - */ -CloogConstraintSet *cloog_constraint_set_copy(CloogConstraintSet *constraints) -{ int i, j ; - CloogMatrix *copy; - CloogMatrix *matrix = &constraints->M; - - copy = cloog_matrix_alloc(matrix->NbRows, matrix->NbColumns); - - for (i=0;iNbRows;i++) - for (j=0;jNbColumns;j++) - cloog_int_set(copy->p[i][j], matrix->p[i][j]); - - return cloog_constraint_set_from_cloog_matrix(copy); -} - - -/** - * cloog_equal_vector_simplify function: - * this function simplify an affine expression with its coefficients in - * "vector" of length "length" thanks to an equality matrix "equal" that gives - * for some elements of the affine expression an equality with other elements, - * preferably constants. For instance, if the vector contains i+j+3 and the - * equality matrix gives i=n and j=2, the vector is simplified to n+3 and is - * returned in a new vector. - * - vector is the array of affine expression coefficients - * - equal is the matrix of equalities, - * - length is the vector length, - * - level is a level we don't want to simplify (-1 if none), - * - nb_par is the number of parameters of the program. - ** - * - September 20th 2005: first version. - * - November 2nd 2005: (debug) we are simplifying inequalities, thus we are - * not allowed to multiply the vector by a negative - * constant.Problem found after a report of Michael - * Classen. - */ -struct cloog_vec *cloog_equal_vector_simplify(CloogEqualities *equal, cloog_int_t *vector, - int length, int level, int nb_par) -{ int i, j ; - cloog_int_t gcd, factor_vector, factor_equal, temp_vector, temp_equal; - struct cloog_vec *simplified; - - simplified = cloog_vec_alloc(length); - cloog_seq_cpy(simplified->p, vector, length); - - cloog_int_init(gcd); - cloog_int_init(temp_vector); - cloog_int_init(temp_equal); - cloog_int_init(factor_vector); - cloog_int_init(factor_equal); - - /* For each non-null coefficient in the vector, */ - for (i=length-nb_par-2;i>0;i--) - if (i != level) - { /* if the coefficient in not null, and there exists a useful equality */ - if ((!cloog_int_is_zero(simplified->p[i])) && equal->types[i-1]) - { /* Compute the Greatest Common Divisor. */ - cloog_int_gcd(gcd, simplified->p[i], equal->constraints->M.p[i-1][i]); - - /* Compute the factors to apply to each row vector element. */ - cloog_int_divexact(factor_vector, equal->constraints->M.p[i-1][i], gcd); - cloog_int_divexact(factor_equal, simplified->p[i], gcd); - - /* We are simplifying an inequality: factor_vector must not be <0. */ - if (cloog_int_is_neg(factor_vector)) { - cloog_int_abs(factor_vector, factor_vector); - cloog_int_neg(factor_equal, factor_equal); - } - - /* Now update the vector. */ - /* - the iterators, up to the current level, */ - for (j=1;j<=length-nb_par-2;j++) { - cloog_int_mul(temp_vector, factor_vector, simplified->p[j]); - cloog_int_mul(temp_equal, factor_equal, equal->constraints->M.p[i-1][j]); - cloog_int_sub(simplified->p[j], temp_vector, temp_equal); - } - /* - between last useful iterator (i) and the first parameter, the equal - * matrix is sparse (full of zeroes), we just do nothing there. - * - the parameters and the scalar. - */ - for (j = 0; j < nb_par + 1; j++) { - cloog_int_mul(temp_vector, factor_vector, simplified->p[length-1-j]); - cloog_int_mul(temp_equal,factor_equal, - equal->constraints->M.p[i-1][equal->constraints->M.NbColumns-j-1]); - cloog_int_sub(simplified->p[length-1-j],temp_vector,temp_equal) ; - } - } - } - - /* Normalize (divide by GCD of all elements) the updated vector. */ - cloog_seq_normalize(&simplified->p[1], length - 1); - - cloog_int_clear(gcd); - cloog_int_clear(temp_vector); - cloog_int_clear(temp_equal); - cloog_int_clear(factor_vector); - cloog_int_clear(factor_equal); - - return simplified ; -} - - -/** - * cloog_constraint_set_simplify function: - * this function simplify all constraints inside the matrix "matrix" thanks to - * an equality matrix "equal" that gives for some elements of the affine - * constraint an equality with other elements, preferably constants. - * For instance, if a row of the matrix contains i+j+3>=0 and the equality - * matrix gives i=n and j=2, the constraint is simplified to n+3>=0. The - * simplified constraints are returned back inside a new simplified matrix. - * - matrix is the set of constraints to simplify, - * - equal is the matrix of equalities, - * - level is a level we don't want to simplify (-1 if none), - * - nb_par is the number of parameters of the program. - ** - * - November 4th 2005: first version. - */ -CloogConstraintSet *cloog_constraint_set_simplify(CloogConstraintSet *constraints, - CloogEqualities *equal, int level, int nb_par) -{ int i, j, k ; - struct cloog_vec *vector; - CloogMatrix *simplified; - CloogMatrix *matrix = &constraints->M; - - if (matrix == NULL) - return NULL ; - - /* The simplified matrix is such that each row has been simplified thanks - * tho the "equal" matrix. We allocate the memory for the simplified matrix, - * then for each row of the original matrix, we compute the simplified - * vector and we copy its content into the according simplified row. - */ - simplified = cloog_matrix_alloc(matrix->NbRows, matrix->NbColumns); - for (i=0;iNbRows;i++) - { vector = cloog_equal_vector_simplify(equal, matrix->p[i], - matrix->NbColumns, level, nb_par); - for (j=0;jNbColumns;j++) - cloog_int_set(simplified->p[i][j], vector->p[j]); - - cloog_vec_free(vector); - } - - /* After simplification, it may happen that few constraints are the same, - * we remove them here by replacing them with 0=0 constraints. - */ - for (i=0;iNbRows;i++) - for (j=i+1;jNbRows;j++) - { for (k=0;kNbColumns;k++) - if (cloog_int_ne(simplified->p[i][k],simplified->p[j][k])) - break ; - - if (k == matrix->NbColumns) - { for (k=0;kNbColumns;k++) - cloog_int_set_si(simplified->p[j][k],0); - } - } - - return cloog_constraint_set_from_cloog_matrix(simplified); -} - - -/** - * Return clast_expr corresponding to the variable "level" (1 based) in - * the given constraint. - */ -struct clast_expr *cloog_constraint_variable_expr(CloogConstraint *constraint, - int level, CloogNames *names) -{ - int total_dim, nb_iter; - const char *name; - - total_dim = cloog_constraint_total_dimension(constraint); - nb_iter = total_dim - names->nb_parameters; - - if (level <= nb_iter) - name = cloog_names_name_at_level(names, level); - else - name = names->parameters[level - (nb_iter+1)] ; - - return &new_clast_name(name)->expr; -} - - -/** - * Return true if constraint c involves variable v (zero-based). - */ -int cloog_constraint_involves(CloogConstraint *constraint, int v) -{ - return !cloog_int_is_zero(constraint->line[0][1+v]); -} - -int cloog_constraint_is_lower_bound(CloogConstraint *constraint, int v) -{ - return cloog_int_is_pos(constraint->line[0][1+v]); -} - -int cloog_constraint_is_upper_bound(CloogConstraint *constraint, int v) -{ - return cloog_int_is_neg(constraint->line[0][1+v]); -} - -int cloog_constraint_is_equality(CloogConstraint *constraint) -{ - return cloog_int_is_zero(constraint->line[0][0]); -} - -void cloog_constraint_clear(CloogConstraint *constraint) -{ - int k; - - for (k = 1; k <= constraint->set->M.NbColumns - 2; k++) - cloog_int_set_si(constraint->line[0][k], 0); -} - -CloogConstraintSet *cloog_constraint_set_drop_constraint( - CloogConstraintSet *constraints, CloogConstraint *constraint) -{ - cloog_constraint_clear(constraint); - return constraints; -} - -void cloog_constraint_coefficient_get(CloogConstraint *constraint, - int var, cloog_int_t *val) -{ - cloog_int_set(*val, constraint->line[0][1+var]); -} - -void cloog_constraint_coefficient_set(CloogConstraint *constraint, - int var, cloog_int_t val) -{ - cloog_int_set(constraint->line[0][1+var], val); -} - -void cloog_constraint_constant_get(CloogConstraint *constraint, cloog_int_t *val) -{ - cloog_int_set(*val, constraint->line[0][constraint->set->M.NbColumns-1]); -} - -/** - * Copy the coefficient of constraint c into dst in PolyLib order, - * i.e., first the coefficients of the variables, then the coefficients - * of the parameters and finally the constant. - */ -void cloog_constraint_copy_coefficients(CloogConstraint *constraint, - cloog_int_t *dst) -{ - cloog_seq_cpy(dst, constraint->line[0]+1, constraint->set->M.NbColumns-1); -} - -CloogConstraint *cloog_constraint_invalid(void) -{ - return NULL; -} - -int cloog_constraint_is_valid(CloogConstraint *constraint) -{ - return constraint != NULL; -} - - -/** - * Check whether there is any need for the constraint "upper" on - * "level" to get reduced. - * Yes. - */ -int cloog_constraint_needs_reduction(CloogConstraint *upper, int level) -{ - return 1; -} - - -/** - * Create a CloogConstraintSet containing enough information to perform - * a reduction on the upper equality (in this case lower is an invalid - * CloogConstraint) or the pair of inequalities upper and lower - * from within insert_modulo_guard. - * In the PolyLib backend, we return a CloogConstraintSet containting only - * the upper bound. The reduction will not change the stride so there - * will be no need to recompute the bound on the modulo expression. - */ -CloogConstraintSet *cloog_constraint_set_for_reduction(CloogConstraint *upper, - CloogConstraint *lower) -{ - CloogConstraintSet *set; - - set = cloog_constraint_set_from_cloog_matrix( - cloog_matrix_alloc(1, upper->set->M.NbColumns)); - cloog_seq_cpy(set->M.p[0], upper->line[0], set->M.NbColumns); - return set; -} - - -/* Computes x, y and g such that g = gcd(a,b) and a*x+b*y = g */ -static void Euclid(cloog_int_t a, cloog_int_t b, - cloog_int_t *x, cloog_int_t *y, cloog_int_t *g) -{ - cloog_int_t c, d, e, f, tmp; - - cloog_int_init(c); - cloog_int_init(d); - cloog_int_init(e); - cloog_int_init(f); - cloog_int_init(tmp); - cloog_int_abs(c, a); - cloog_int_abs(d, b); - cloog_int_set_si(e, 1); - cloog_int_set_si(f, 0); - while (cloog_int_is_pos(d)) { - cloog_int_tdiv_q(tmp, c, d); - cloog_int_mul(tmp, tmp, f); - cloog_int_sub(e, e, tmp); - cloog_int_tdiv_q(tmp, c, d); - cloog_int_mul(tmp, tmp, d); - cloog_int_sub(c, c, tmp); - cloog_int_swap(c, d); - cloog_int_swap(e, f); - } - cloog_int_set(*g, c); - if (cloog_int_is_zero(a)) - cloog_int_set_si(*x, 0); - else if (cloog_int_is_pos(a)) - cloog_int_set(*x, e); - else cloog_int_neg(*x, e); - if (cloog_int_is_zero(b)) - cloog_int_set_si(*y, 0); - else { - cloog_int_mul(tmp, a, *x); - cloog_int_sub(tmp, c, tmp); - cloog_int_divexact(*y, tmp, b); - } - cloog_int_clear(c); - cloog_int_clear(d); - cloog_int_clear(e); - cloog_int_clear(f); - cloog_int_clear(tmp); -} - -/** - * Reduce the modulo guard expressed by "contraints" using equalities - * found in outer nesting levels (stored in "equal"). - * The modulo guard may be an equality or a pair of inequalities. - * In case of a pair of inequalities, "constraints" only contains the - * upper bound and *bound contains the bound on the - * corresponding modulo expression. The bound is left untouched by - * this function. - */ -CloogConstraintSet *cloog_constraint_set_reduce(CloogConstraintSet *constraints, - int level, CloogEqualities *equal, int nb_par, cloog_int_t *bound) -{ - int i, j, k, len, len2, nb_iter; - struct cloog_vec *line_vector2; - cloog_int_t *line, *line2, val, x, y, g; - - len = constraints->M.NbColumns; - len2 = cloog_equal_total_dimension(equal) + 2; - nb_iter = len - 2 - nb_par; - - cloog_int_init(val); - cloog_int_init(x); - cloog_int_init(y); - cloog_int_init(g); - - line_vector2 = cloog_vec_alloc(len2); - line2 = line_vector2->p; - - line = constraints->M.p[0]; - if (cloog_int_is_pos(line[level])) - cloog_seq_neg(line+1, line+1, len-1); - cloog_int_neg(line[level], line[level]); - assert(cloog_int_is_pos(line[level])); - - for (i = nb_iter; i >= 1; --i) { - if (i == level) - continue; - cloog_int_fdiv_r(line[i], line[i], line[level]); - if (cloog_int_is_zero(line[i])) - continue; - - /* Look for an earlier variable that is also a multiple of line[level] - * and check whether we can use the corresponding affine expression - * to "reduce" the modulo guard, where reduction means that we eliminate - * a variable, possibly at the expense of introducing other variables - * with smaller index. - */ - for (j = level-1; j >= 0; --j) { - CloogConstraint *equal_constraint; - if (cloog_equal_type(equal, j+1) != EQTYPE_EXAFFINE) - continue; - equal_constraint = cloog_equal_constraint(equal, j); - cloog_constraint_coefficient_get(equal_constraint, j, &val); - if (!cloog_int_is_divisible_by(val, line[level])) { - cloog_constraint_release(equal_constraint); - continue; - } - cloog_constraint_coefficient_get(equal_constraint, i-1, &val); - if (cloog_int_is_divisible_by(val, line[level])) { - cloog_constraint_release(equal_constraint); - continue; - } - for (k = j; k > i; --k) { - cloog_constraint_coefficient_get(equal_constraint, k-1, &val); - if (cloog_int_is_zero(val)) - continue; - if (!cloog_int_is_divisible_by(val, line[level])) - break; - } - if (k > i) { - cloog_constraint_release(equal_constraint); - continue; - } - cloog_constraint_coefficient_get(equal_constraint, i-1, &val); - Euclid(val, line[level], &x, &y, &g); - if (!cloog_int_is_divisible_by(val, line[i])) { - cloog_constraint_release(equal_constraint); - continue; - } - cloog_int_divexact(val, line[i], g); - cloog_int_neg(val, val); - cloog_int_mul(val, val, x); - cloog_int_set_si(y, 1); - /* Add (equal->p[j][i])^{-1} * line[i] times the equality */ - cloog_constraint_copy_coefficients(equal_constraint, line2+1); - cloog_seq_combine(line+1, y, line+1, val, line2+1, i); - cloog_seq_combine(line+len-nb_par-1, y, line+len-nb_par-1, - val, line2+len2-nb_par-1, nb_par+1); - cloog_constraint_release(equal_constraint); - break; - } - } - - cloog_vec_free(line_vector2); - - cloog_int_clear(val); - cloog_int_clear(x); - cloog_int_clear(y); - cloog_int_clear(g); - - /* Make sure the line is not inverted again in the calling function. */ - cloog_int_neg(line[level], line[level]); - - return constraints; -} - -CloogConstraint *cloog_constraint_first(CloogConstraintSet *constraints) -{ - CloogConstraint *c; - if (constraints->M.NbRows == 0) - return cloog_constraint_invalid(); - c = ALLOC(CloogConstraint); - c->set = constraints; - c->line = &constraints->M.p[0]; - return c; -} - -CloogConstraint *cloog_constraint_next(CloogConstraint *constraint) -{ - constraint->line++; - if (constraint->line == constraint->set->M.p + constraint->set->M.NbRows) { - cloog_constraint_release(constraint); - return NULL; - } - return constraint; -} - -CloogConstraint *cloog_constraint_copy(CloogConstraint *constraint) -{ - CloogConstraint *c = ALLOC(CloogConstraint); - c->set = constraint->set; - c->line = constraint->line; - return c; -} - -void cloog_constraint_release(CloogConstraint *constraint) -{ - free(constraint); -} - -int cloog_constraint_set_foreach_constraint(CloogConstraintSet *constraints, - int (*fn)(CloogConstraint *constraint, void *user), void *user) -{ - CloogConstraint *c; - - for (c = cloog_constraint_first(constraints); - cloog_constraint_is_valid(c); c = cloog_constraint_next(c)) - if (fn(c, user) < 0) { - cloog_constraint_release(c); - return -1; - } - - return 0; -} - -CloogConstraint *cloog_equal_constraint(CloogEqualities *equal, int j) -{ - CloogConstraint *c = ALLOC(CloogConstraint); - c->set = equal->constraints; - c->line = &equal->constraints->M.p[j]; - return c; -} diff --git a/cloog-0.16.3/source/mp_get_memory_functions.c b/cloog-0.16.3/source/mp_get_memory_functions.c deleted file mode 100644 index e14e336..0000000 --- a/cloog-0.16.3/source/mp_get_memory_functions.c +++ /dev/null @@ -1,14 +0,0 @@ -#include - -void mp_get_memory_functions( - void *(**alloc_func_ptr) (size_t), - void *(**realloc_func_ptr) (void *, size_t, size_t), - void (**free_func_ptr) (void *, size_t)) -{ - if (alloc_func_ptr) - *alloc_func_ptr = __gmp_allocate_func; - if (realloc_func_ptr) - *realloc_func_ptr = __gmp_reallocate_func; - if (free_func_ptr) - *free_func_ptr = __gmp_free_func; -} diff --git a/cloog-0.16.3/source/names.c b/cloog-0.16.3/source/names.c deleted file mode 100644 index 53e39b2..0000000 --- a/cloog-0.16.3/source/names.c +++ /dev/null @@ -1,528 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** names.c ** - **-------------------------------------------------------------------** - ** First version: august 1st 2002 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2002-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ -/* CAUTION: the english used for comments is probably the worst you ever read, - * please feel free to correct and improve it ! - */ - - -# include -# include -# include -# include "../include/cloog/cloog.h" - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ - - -/** - * cloog_names_print function: - * this function is a human-friendly way to display the CloogNames data - * structure, it shows all the different fields and includes an indentation - * level (level) in order to work with others print_structure functions. - * - July 1st 2005: first version based on the old cloog_names_print function, - * it was the first modification in this file since two years ! - */ -void cloog_names_print_structure(FILE * file, CloogNames * names, int level) -{ int i ; - - /* Go to the right level. */ - for (i=0; inb_scalars) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the scalar iterators. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - if (names->nb_scalars > 0) - { fprintf(file,"+-- Scalar iterator strings:") ; - for (i=0;inb_scalars;i++) - fprintf(file," %s",names->scalars[i]) ; - fprintf(file,"\n") ; - } - else - fprintf(file,"+-- No scalar string\n") ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the scattering dimension number. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - fprintf(file,"Scattering dimension number: %d\n",names->nb_scattering) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the scattering iterators. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - if (names->nb_scattering > 0) - { fprintf(file,"+-- Scattering strings ----:") ; - for (i=0;inb_scattering;i++) - fprintf(file," %s",names->scattering[i]) ; - fprintf(file,"\n") ; - } - else - fprintf(file,"+-- No scattering string\n") ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the iterator number. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - fprintf(file,"Iterator number -----------: %d\n",names->nb_iterators) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the iterators. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - if (names->nb_iterators > 0) - { fprintf(file,"+-- Iterator strings ------:") ; - for (i=0;inb_iterators;i++) - fprintf(file," %s",names->iterators[i]) ; - fprintf(file,"\n") ; - } - else - fprintf(file,"+-- No iterators\n") ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the parameter number. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - fprintf(file,"Parameter number ----------: %d\n",names->nb_parameters) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the parameters. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - if (names->nb_parameters > 0) - { fprintf(file,"+-- Parameter strings -----:") ; - for (i=0;inb_parameters;i++) - fprintf(file," %s",names->parameters[i]) ; - fprintf(file,"\n") ; - } - else - fprintf(file,"No parameters\n") ; - - } - else - fprintf(file,"+-- No CloogNames\n") ; - fprintf(file, "Number of active references: %d\n", names->references); -} - - -/** - * cloog_names_print function: - * This function prints the content of a CloogNames structure (names) into a - * file (file, possibly stdout). - * - July 1st 2005: Now this function is only a frontend to - * cloog_program_print_structure, with a quite better - * human-readable representation. - */ -void cloog_names_print(FILE * file, CloogNames * names) -{ cloog_names_print_structure(file,names,0) ; -} - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ - - -/** - * cloog_names_free function: - * This function decrements the number of active references to - * a CloogNames structure and frees the allocated memory for this structure - * if the count drops to zero. - */ -void cloog_names_free(CloogNames * names) -{ int i ; - - if (--names->references) - return; - - if (names->scalars != NULL) - { for (i=0;inb_scalars;i++) - free(names->scalars[i]) ; - free(names->scalars) ; - } - - if (names->scattering != NULL) - { for (i=0;inb_scattering;i++) - free(names->scattering[i]) ; - free(names->scattering) ; - } - - if (names->iterators != NULL) - { for (i=0;inb_iterators;i++) - free(names->iterators[i]) ; - free(names->iterators) ; - } - - if (names->parameters != NULL) - { for (i=0;inb_parameters;i++) - free(names->parameters[i]) ; - free(names->parameters) ; - } - free(names) ; -} - - -/** - * cloog_names_copy function: - * As usual in CLooG, "copy" means incrementing the reference count. - */ -CloogNames *cloog_names_copy(CloogNames *names) -{ - names->references++; - return names; -} - - -/****************************************************************************** - * Reading functions * - ******************************************************************************/ - - -/** - * cloog_names_read_strings function: - * This function reads names data from a file (file, possibly stdin). It first - * reads the naming option to know if whether it can read the names from the - * file. If not, NULL is returned. Otherwise, the names are stored - * into an array of strings, and a pointer to this array is returned. - * - nb_items is the number of names the function will have to read if the - * naming option is set to read. - */ -char ** cloog_names_read_strings(FILE *file, int nb_items) -{ int i, option, n ; - char s[MAX_STRING], str[MAX_STRING], * c, **names = NULL; - - /* We first read name option. */ - while (fgets(s,MAX_STRING,file) == 0) ; - while ((*s=='#' || *s=='\n') || (sscanf(s," %d",&option)<1)) - fgets(s,MAX_STRING,file) ; - - /* If there is no item to read, then return NULL. */ - if (nb_items == 0) - return NULL ; - - /* If option is to read them in the file, then we do it and put them into - * the array. - */ - if (option) - { /* Memory allocation. */ - names = (char **)malloc(nb_items*sizeof(char *)) ; - if (names == NULL) - cloog_die("memory overflow.\n"); - for (i=0;inb_scalars = 0 ; - names->nb_scattering = 0 ; - names->nb_iterators = 0 ; - names->nb_parameters = 0 ; - names->scalars = NULL ; - names->scattering = NULL ; - names->iterators = NULL ; - names->parameters = NULL ; - names->references = 1; - - return names ; -} - - -/** - * cloog_names_alloc function: - * This function allocates the memory space for a CloogNames structure and - * sets its fields with those given as input. Then it returns a pointer to the - * allocated space. - * - July 7th 2005: first version. - * - September 11th 2005: addition of both scalar and scattering informations. - * - November 21th 2005: use of cloog_names_malloc. - */ -CloogNames * cloog_names_alloc() -{ CloogNames * names ; - - /* Memory allocation for the CloogNames structure. */ - names = cloog_names_malloc() ; - - names->nb_scalars = 0; - names->nb_scattering = 0; - names->nb_iterators = 0; - names->nb_parameters = 0; - names->scalars = NULL; - names->scattering = NULL; - names->iterators = NULL; - names->parameters = NULL; - - return names ; -} - - -/** - * cloog_names_generate_items function: - * This function returns a pointer to an array of strings with entries set - * based on the function's parameters. - * - nb_items will be the number of entries in the string array. - * - prefix is the name prefix of each item or NULL. - * If not NULL, then the remainder of the name will be an integer - * in the range [0, nb_items-1]. - * - first_item is the name of the first item (if prefix == NULL), - * the nb_items-1 following items will be the nb_items-1 - * following letters in ASCII code. - ** - * - September 9th 2002 : first version, extracted from cloog_names_generate. - */ -char ** cloog_names_generate_items(int nb_items, char * prefix, char first_item) -{ int i ; - char ** names ; - - if (nb_items == 0) - return NULL ; - - names = (char **)malloc(nb_items*sizeof(char *)) ; - if (names == NULL) - cloog_die("memory overflow.\n"); - for (i=0;inb_scalars = nb_scalars ; - names->nb_scattering = nb_scattering ; - names->nb_parameters = nb_parameters ; - names->nb_iterators = nb_iterators ; - names->scalars = cloog_names_generate_items(nb_scalars, NULL,first_s); - names->scattering = cloog_names_generate_items(nb_scattering,NULL,first_t); - names->parameters = cloog_names_generate_items(nb_parameters,NULL,first_p); - names->iterators = cloog_names_generate_items(nb_iterators, NULL,first_i); - - return names ; -} - - -/* Lastly we update the CLoogNames structure: the iterators corresponding to - * scalar dimensions have to be removed since these dimensions have been - * erased and do not need to be print. We copy all the iterator names except - * the scalar ones in a new string array. - * - September 12th 2005: first version. - */ -void cloog_names_scalarize(CloogNames * names, int nb_scattdims, int * scaldims) -{ int nb_scalars, nb_scattering, i, current_scalar, current_scattering ; - char ** scalars, ** scattering ; - - if (!nb_scattdims || (scaldims == NULL)) - return ; - - nb_scalars = 0 ; - for (i=0;inb_scattering - nb_scalars ; - scattering = (char **)malloc(nb_scattering * sizeof(char *)) ; - if (scattering == NULL) - cloog_die("memory overflow.\n"); - scalars = (char **)malloc(nb_scalars * sizeof(char *)) ; - if (scalars == NULL) - cloog_die("memory overflow.\n"); - - current_scalar = 0 ; - current_scattering = 0 ; - for (i=0;iscattering[i] ; - current_scattering ++ ; - } - else - { scalars[current_scalar] = names->scattering[i] ; - current_scalar ++ ; - } - } - - free(names->scattering) ; - names->scattering = scattering ; - names->scalars = scalars ; - names->nb_scattering = nb_scattering ; - names->nb_scalars = nb_scalars ; -} - -/** - * Return the name at a given level (starting at one). - * May be a scattering dimension or an iterator of the original domain. - */ -const char *cloog_names_name_at_level(CloogNames *names, int level) -{ - if (level <= names->nb_scattering) - return names->scattering[level - 1]; - else - return names->iterators[level - names->nb_scattering - 1]; -} diff --git a/cloog-0.16.3/source/options.c b/cloog-0.16.3/source/options.c deleted file mode 100644 index 561b4f6..0000000 --- a/cloog-0.16.3/source/options.c +++ /dev/null @@ -1,464 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** options.c ** - **-------------------------------------------------------------------** - ** First version: april 19th 2003 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#include -# include -# include -# include -# include "../include/cloog/cloog.h" - - -/****************************************************************************** - * Error reporting functions * - ******************************************************************************/ - -void cloog_vmsg(CloogOptions *options, enum cloog_msg_type type, - const char *msg, va_list ap) -{ - const char *type_msg; - - if (options && options->quiet && - (type == CLOOG_WARNING || type == CLOOG_INFO)) - return; - - switch(type) { - case CLOOG_WARNING: - type_msg = "WARNING"; - break; - case CLOOG_INFO: - type_msg = "INFO"; - break; - case CLOOG_ERROR: - default: - type_msg = "ERROR"; - break; - } - fprintf(stderr, "[CLooG] %s: ", type_msg); - vfprintf(stderr, msg, ap); -} - -/** - * Print message to stderr. - * @param msg printf format string - */ -void cloog_msg(CloogOptions *options, enum cloog_msg_type type, - const char *msg, ...) -{ - va_list args; - - va_start(args, msg); - cloog_vmsg(options, type, msg, args); - va_end(args); -} - -/** - * Print error message to stderr and exit. - * @param msg printf format string - */ -void cloog_die(const char *msg, ...) -{ - va_list args; - - va_start(args, msg); - cloog_vmsg(NULL, CLOOG_ERROR, msg, args); - va_end(args); - exit(1); -} - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ - - -/** - * cloog_option_print function: - * This function prints the content of a CloogOptions structure (program) into - * a file (foo, possibly stdout). - * - April 19th 2003: first version. - */ -void cloog_options_print(FILE * foo, CloogOptions * options) -{ fprintf(foo,"Options:\n") ; - fprintf(foo,"OPTIONS FOR LOOP GENERATION\n") ; - fprintf(foo,"l = %3d,\n",options->l) ; - fprintf(foo,"f = %3d,\n",options->f) ; - fprintf(foo,"stop = %3d,\n",options->stop) ; - fprintf(foo,"strides = %3d,\n",options->strides) ; - fprintf(foo,"sh = %3d,\n",options->sh); - fprintf(foo,"OPTIONS FOR PRETTY PRINTING\n") ; - fprintf(foo,"esp = %3d,\n",options->esp) ; - fprintf(foo,"fsp = %3d,\n",options->fsp) ; - fprintf(foo,"otl = %3d.\n",options->otl) ; - fprintf(foo,"block = %3d.\n",options->block) ; - fprintf(foo,"compilable = %3d.\n",options->compilable) ; - fprintf(foo,"callable = %3d.\n",options->callable) ; - fprintf(foo,"UNDOCUMENTED OPTIONS FOR THE AUTHOR ONLY\n") ; - fprintf(foo,"leaks = %3d.\n",options->leaks) ; - fprintf(foo,"backtrack = %3d.\n",options->backtrack); - fprintf(foo,"override = %3d.\n",options->override) ; - fprintf(foo,"structure = %3d.\n",options->structure) ; - fprintf(foo,"noscalars = %3d.\n",options->noscalars) ; - fprintf(foo,"noblocks = %3d.\n",options->noblocks) ; - fprintf(foo,"nosimplify = %3d.\n",options->nosimplify) ; -} - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ - - -/** - * cloog_options_free function: - * This function frees the allocated memory for a CloogOptions structure. - * - April 19th 2003: first version. - */ -void cloog_options_free(CloogOptions *options) -{ - free(options); -} - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - - -/** - * cloog_options_help function: - * This function displays the quick help when the user set the option -help - * while calling cloog. Prints are cutted to respect the 509 characters - * limitation of the ISO C 89 compilers. - * - August 5th 2002: first version. - */ -void cloog_options_help() -{ printf( - "Usage: cloog [ options | file ] ...\n" - "Options for code generation:\n" - " -l Last loop depth to optimize (-1: infinity)\n" - " (default setting: -1).\n" - " -f First loop depth to start loop separation (-1: " - "infinity)\n (default setting: 1).\n") ; - printf( - " -stop Loop depth to stop code generation (-1: infinity)" - "\n (default setting: -1).\n" - " -strides Handle non-unit strides (1) or not (0)\n" - " (default setting: 0).\n") ; - printf( - "\nOptions for pretty printing:\n" - " -otl Simplify loops running one time (1) or not (0)\n" - " (default setting: 1).\n") ; - printf( - " -esp Allow complex equalities spreading (1) or not (0)\n" - " (default setting: 0).\n"); - printf( - " -fsp First level to begin the spreading\n" - " (default setting: 1).\n" - " -block Make a new statement block per iterator in C\n" - " programs (1) or not (0) (default setting: 0).\n") ; - printf( - " -compilable Compilable code by using preprocessor (not 0) or" - "\n not (0), number being the value of the parameters" - "\n (default setting: 0).\n" - " -callable Testable code by using preprocessor (not 0) or" - "\n not (0) (default setting: 0).\n"); - printf( - "\nGeneral options:\n" - " -o Name of the output file; 'stdout' is a special\n" - " value: when used, output is standard output\n" - " (default setting: stdout).\n" - " -v, --version Display the version information (and more).\n" - " -q, --quiet Don't print any informational messages.\n" - " -h, --help Display this information.\n\n") ; - printf( - "The special value 'stdin' for 'file' makes CLooG to read data on\n" - "standard input.\n\n" - "For bug reporting or any suggestions, please send an email to the author\n" - ".\n") ; -} - - -/** - * cloog_options_version function: - * This function displays some version informations when the user set the - * option -version while calling cloog. Prints are cutted to respect the 509 - * characters limitation of the ISO C 89 compilers. - * - August 5th 2002: first version. - */ -void cloog_options_version() -{ printf("%s The Chunky Loop Generator\n", cloog_version()); - printf( - "-----\n" - "This is a loop generator for scanning Z-polyhedra. It is based on the " - "work of\nF. Quillere and C. Bastoul on high level code generation and of " - "the PolyLib Team\non polyhedral computation. This program is distributed " - "under the terms of the\nGNU Lesser General Public License " - "(details at http://www.gnu.org/licenses/lgpl-2.1.html).\n" - "-----\n") ; - printf( - "It would be fair to refer the following paper in any publication " - "resulting from\nthe use of this software or its library:\n" - "@InProceedings{Bas04,\n" - "author = {Cedric Bastoul},\n" - "title = {Code Generation in the Polyhedral Model Is Easier Than You " - "Think},\n" - "booktitle = {PACT'13 IEEE International Conference on Parallel " - "Architecture\n and Compilation Techniques},\n" - "pages = {7--16},\n" - "month = {september},\n" - "year = 2004,\n" - "address = {Juan-les-Pins}\n" - "}\n" - "-----\n" - "For any information, please ask the author at " - ".\n") ; -} - - -/** - * cloog_options_set function: - * This function sets the value of an option thanks to the user's calling line. - * - option is the value to set, - * - argc are the elements of the user's calling line, - * - number is the number of the element corresponding to the considered option, - * this function adds 1 to number to pass away the option value. - ** - * - August 5th 2002: first version. - * - June 29th 2003: (debug) lack of argument now detected. - */ -void cloog_options_set(int * option, int argv, char ** argc, int * number) -{ char ** endptr ; - - if (*number+1 >= argv) - cloog_die("an option lacks of argument.\n"); - - endptr = NULL ; - *option = strtol(argc[*number+1],endptr,10) ; - if (endptr != NULL) - cloog_die("value '%s' for option '%s' is not valid.\n", - argc[*number+1], argc[*number]); - *number = *number + 1 ; -} - - -/** - * cloog_options_malloc function: - * This functions allocate the memory space for a CLoogOptions structure and - * fill its fields with the defaults values. It returns a pointer to the - * allocated CloogOptions structure. - * - April 19th 2003: first version. - * - November 21th 2005: name changed (before it was cloog_options_init). - */ -CloogOptions *cloog_options_malloc(CloogState *state) -{ CloogOptions * options ; - - /* Memory allocation for the CloogOptions structure. */ - options = (CloogOptions *)malloc(sizeof(CloogOptions)) ; - if (options == NULL) - cloog_die("memory overflow.\n"); - - options->state = state; - - /* We set the various fields with default values. */ - /* OPTIONS FOR LOOP GENERATION */ - options->l = -1 ; /* Last level to optimize: infinity. */ - options->f = 1 ; /* First level to optimize: the first. */ - options->stop = -1 ; /* Generate all the code. */ - options->strides = 0 ; /* Generate a code with unit strides. */ - options->sh = 0; /* Compute actual convex hull. */ - options->first_unroll = -1; /* First level to unroll: none. */ - options->name = ""; - /* OPTIONS FOR PRETTY PRINTING */ - options->esp = 1 ; /* We want Equality SPreading.*/ - options->fsp = 1 ; /* The First level to SPread is the first. */ - options->otl = 1 ; /* We want to fire One Time Loops. */ - options->block = 0 ; /* We don't want to force statement blocks. */ - options->compilable = 0 ; /* No compilable code. */ - options->callable = 0 ; /* No callable code. */ - options->quiet = 0; /* Do print informational messages. */ - options->language = LANGUAGE_C; /* The default output language is C. */ - options->save_domains = 0; /* Don't save domains. */ - /* UNDOCUMENTED OPTIONS FOR THE AUTHOR ONLY */ - options->leaks = 0 ; /* I don't want to print allocation statistics.*/ - options->backtrack = 0; /* Perform backtrack in Quillere's algorithm.*/ - options->override = 0 ; /* I don't want to override CLooG decisions.*/ - options->structure = 0 ; /* I don't want to print internal structure.*/ - options->noblocks = 0 ; /* I do want to make statement blocks.*/ - options->noscalars = 0 ; /* I do want to use scalar dimensions.*/ - options->nosimplify = 0 ; /* I do want to simplify polyhedra.*/ - - return options ; -} - - - -/** - * cloog_options_read function: - * This functions reads all the options and the input/output files thanks - * the the user's calling line elements (in argc). It fills a CloogOptions - * structure and the FILE structure corresponding to input and output files. - * - August 5th 2002: first version. - * - April 19th 2003: now in options.c and support of the CloogOptions structure. - */ -void cloog_options_read(CloogState *state, int argc, char **argv, - FILE **input, FILE **output, CloogOptions **options) -{ int i, infos=0, input_is_set=0 ; - - /* CloogOptions structure allocation and initialization. */ - *options = cloog_options_malloc(state); - - /* The default output is the standard output. */ - *output = stdout ; - - for (i=1;il,argc,argv,&i) ; - else - if (strcmp(argv[i],"-f") == 0) - cloog_options_set(&(*options)->f,argc,argv,&i) ; - else - if (strcmp(argv[i],"-stop") == 0) - cloog_options_set(&(*options)->stop,argc,argv,&i) ; - else - if (strcmp(argv[i],"-strides") == 0) - cloog_options_set(&(*options)->strides,argc,argv,&i) ; - else if (strcmp(argv[i],"-sh") == 0) - cloog_options_set(&(*options)->sh,argc,argv,&i) ; - else if (!strcmp(argv[i], "-first-unroll")) - cloog_options_set(&(*options)->first_unroll, argc, argv, &i); - else - if (strcmp(argv[i],"-otl") == 0) - cloog_options_set(&(*options)->otl,argc,argv,&i) ; - else - if (strcmp(argv[i],"-esp") == 0) - cloog_options_set(&(*options)->esp,argc,argv,&i) ; - else - if (strcmp(argv[i],"-fsp") == 0) - cloog_options_set(&(*options)->fsp,argc,argv,&i) ; - else - if (strcmp(argv[i],"-block") == 0) - cloog_options_set(&(*options)->block,argc,argv,&i) ; - else - if (strcmp(argv[i],"-compilable") == 0) - cloog_options_set(&(*options)->compilable, argc, argv, &i); - else if (strcmp(argv[i], "-callable") == 0) - cloog_options_set(&(*options)->callable, argc, argv, &i); - else - if (strcmp(argv[i],"-loopo") == 0) /* Special option for the LooPo team ! */ - { (*options)->esp = 0 ; - (*options)->block = 1 ; - } - else - if (strcmp(argv[i],"-bipbip") == 0)/* Special option for the author only !*/ - (*options)->backtrack = 0; - else - if (strcmp(argv[i],"-leaks") == 0) - (*options)->leaks = 1 ; - else - if (strcmp(argv[i],"-nobacktrack") == 0) - (*options)->backtrack = 0; - else if (strcmp(argv[i], "-backtrack") == 0) - (*options)->backtrack = 1; - else - if (strcmp(argv[i],"-override") == 0) - (*options)->override = 1 ; - else - if (strcmp(argv[i],"-noblocks") == 0) - (*options)->noblocks = 1 ; - else - if (strcmp(argv[i],"-noscalars") == 0) - (*options)->noscalars = 1 ; - else - if (strcmp(argv[i],"-nosimplify") == 0) - (*options)->nosimplify = 1 ; - else - if ((strcmp(argv[i],"-struct") == 0) || (strcmp(argv[i],"-structure") == 0)) - (*options)->structure = 1 ; - else - if ((strcmp(argv[i],"--help") == 0) || (strcmp(argv[i],"-h") == 0)) - { cloog_options_help() ; - infos = 1 ; - } - else - if ((strcmp(argv[i],"--version") == 0) || (strcmp(argv[i],"-v") == 0)) - { cloog_options_version() ; - infos = 1 ; - } else if ((strcmp(argv[i],"--quiet") == 0) || (strcmp(argv[i],"-q") == 0)) - (*options)->quiet = 1; - else - if (strcmp(argv[i],"-o") == 0) - { if (i+1 >= argc) - cloog_die("no output name for -o option.\n"); - - /* stdout is a special value, when used, we set output to standard - * output. - */ - if (strcmp(argv[i+1],"stdout") == 0) - *output = stdout ; - else - { *output = fopen(argv[i+1],"w") ; - if (*output == NULL) - cloog_die("can't create output file %s.\n", argv[i+1]); - } - i ++ ; - } - else - cloog_msg(*options, CLOOG_WARNING, "unknown %s option.\n", argv[i]); - } - else - { if (!input_is_set) - { input_is_set = 1 ; - (*options)->name = argv[i] ; - /* stdin is a special value, when used, we set input to standard input. */ - if (strcmp(argv[i],"stdin") == 0) - *input = stdin ; - else - { *input = fopen(argv[i],"r") ; - if (*input == NULL) - cloog_die("%s file does not exist.\n", argv[i]); - } - } - else - cloog_die("multiple input files.\n"); - } - if (!input_is_set) - { if (!infos) - cloog_die("no input file (-h for help).\n"); - exit(1) ; - } -} - diff --git a/cloog-0.16.3/source/pprint.c b/cloog-0.16.3/source/pprint.c deleted file mode 100644 index 3dacec2..0000000 --- a/cloog-0.16.3/source/pprint.c +++ /dev/null @@ -1,423 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** pprint.c ** - **-------------------------------------------------------------------** - ** First version: october 26th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ -/* CAUTION: the english used for comments is probably the worst you ever read, - * please feel free to correct and improve it ! - */ - -/* June 22nd 2005: General adaptation for GMP. - * October 26th 2005: General adaptation from CloogDomain to Matrix data - * structure for all constraint systems. - * October 27th 2005: General adaptation from CloogEqual to Matrix data - * structure for equality spreading. - */ - -# include -# include -# include -#include -# include "../include/cloog/cloog.h" - - -static void pprint_name(FILE *dst, struct clast_name *n); -static void pprint_term(struct cloogoptions *i, FILE *dst, struct clast_term *t); -static void pprint_sum(struct cloogoptions *opt, - FILE *dst, struct clast_reduction *r); -static void pprint_binary(struct cloogoptions *i, - FILE *dst, struct clast_binary *b); -static void pprint_minmax_f(struct cloogoptions *info, - FILE *dst, struct clast_reduction *r); -static void pprint_minmax_c(struct cloogoptions *info, - FILE *dst, struct clast_reduction *r); -static void pprint_reduction(struct cloogoptions *i, - FILE *dst, struct clast_reduction *r); -static void pprint_expr(struct cloogoptions *i, FILE *dst, struct clast_expr *e); -static void pprint_equation(struct cloogoptions *i, - FILE *dst, struct clast_equation *eq); -static void pprint_assignment(struct cloogoptions *i, FILE *dst, - struct clast_assignment *a); -static void pprint_user_stmt(struct cloogoptions *options, FILE *dst, - struct clast_user_stmt *u); -static void pprint_guard(struct cloogoptions *options, FILE *dst, int indent, - struct clast_guard *g); -static void pprint_for(struct cloogoptions *options, FILE *dst, int indent, - struct clast_for *f); -static void pprint_stmt_list(struct cloogoptions *options, FILE *dst, int indent, - struct clast_stmt *s); - - -void pprint_name(FILE *dst, struct clast_name *n) -{ - fprintf(dst, "%s", n->name); -} - -/** - * This function returns a string containing the printing of a value (possibly - * an iterator or a parameter with its coefficient or a constant). - * - val is the coefficient or constant value, - * - name is a string containing the name of the iterator or of the parameter, - */ -void pprint_term(struct cloogoptions *i, FILE *dst, struct clast_term *t) -{ - if (t->var) { - int group = t->var->type == clast_expr_red && - ((struct clast_reduction*) t->var)->n > 1; - if (cloog_int_is_one(t->val)) - ; - else if (cloog_int_is_neg_one(t->val)) - fprintf(dst, "-"); - else { - cloog_int_print(dst, t->val); - fprintf(dst, "*"); - } - if (group) - fprintf(dst, "("); - pprint_expr(i, dst, t->var); - if (group) - fprintf(dst, ")"); - } else - cloog_int_print(dst, t->val); -} - -void pprint_sum(struct cloogoptions *opt, FILE *dst, struct clast_reduction *r) -{ - int i; - struct clast_term *t; - - assert(r->n >= 1); - assert(r->elts[0]->type == clast_expr_term); - t = (struct clast_term *) r->elts[0]; - pprint_term(opt, dst, t); - - for (i = 1; i < r->n; ++i) { - assert(r->elts[i]->type == clast_expr_term); - t = (struct clast_term *) r->elts[i]; - if (cloog_int_is_pos(t->val)) - fprintf(dst, "+"); - pprint_term(opt, dst, t); - } -} - -void pprint_binary(struct cloogoptions *i, FILE *dst, struct clast_binary *b) -{ - const char *s1 = NULL, *s2 = NULL, *s3 = NULL; - int group = b->LHS->type == clast_expr_red && - ((struct clast_reduction*) b->LHS)->n > 1; - if (i->language == LANGUAGE_FORTRAN) { - switch (b->type) { - case clast_bin_fdiv: - s1 = "FLOOR(REAL(", s2 = ")/REAL(", s3 = "))"; - break; - case clast_bin_cdiv: - s1 = "CEILING(REAL(", s2 = ")/REAL(", s3 = "))"; - break; - case clast_bin_div: - if (group) - s1 = "(", s2 = ")/", s3 = ""; - else - s1 = "", s2 = "/", s3 = ""; - break; - case clast_bin_mod: - s1 = "MOD(", s2 = ", ", s3 = ")"; - break; - } - } else { - switch (b->type) { - case clast_bin_fdiv: - s1 = "floord(", s2 = ",", s3 = ")"; - break; - case clast_bin_cdiv: - s1 = "ceild(", s2 = ",", s3 = ")"; - break; - case clast_bin_div: - if (group) - s1 = "(", s2 = ")/", s3 = ""; - else - s1 = "", s2 = "/", s3 = ""; - break; - case clast_bin_mod: - if (group) - s1 = "(", s2 = ")%", s3 = ""; - else - s1 = "", s2 = "%", s3 = ""; - break; - } - } - fprintf(dst, "%s", s1); - pprint_expr(i, dst, b->LHS); - fprintf(dst, "%s", s2); - cloog_int_print(dst, b->RHS); - fprintf(dst, "%s", s3); -} - -void pprint_minmax_f(struct cloogoptions *info, FILE *dst, struct clast_reduction *r) -{ - int i; - if (r->n == 0) - return; - fprintf(dst, r->type == clast_red_max ? "MAX(" : "MIN("); - pprint_expr(info, dst, r->elts[0]); - for (i = 1; i < r->n; ++i) { - fprintf(dst, ","); - pprint_expr(info, dst, r->elts[i]); - } - fprintf(dst, ")"); -} - -void pprint_minmax_c(struct cloogoptions *info, FILE *dst, struct clast_reduction *r) -{ - int i; - for (i = 1; i < r->n; ++i) - fprintf(dst, r->type == clast_red_max ? "max(" : "min("); - if (r->n > 0) - pprint_expr(info, dst, r->elts[0]); - for (i = 1; i < r->n; ++i) { - fprintf(dst, ","); - pprint_expr(info, dst, r->elts[i]); - fprintf(dst, ")"); - } -} - -void pprint_reduction(struct cloogoptions *i, FILE *dst, struct clast_reduction *r) -{ - switch (r->type) { - case clast_red_sum: - pprint_sum(i, dst, r); - break; - case clast_red_min: - case clast_red_max: - if (r->n == 1) { - pprint_expr(i, dst, r->elts[0]); - break; - } - if (i->language == LANGUAGE_FORTRAN) - pprint_minmax_f(i, dst, r); - else - pprint_minmax_c(i, dst, r); - break; - default: - assert(0); - } -} - -void pprint_expr(struct cloogoptions *i, FILE *dst, struct clast_expr *e) -{ - if (!e) - return; - switch (e->type) { - case clast_expr_name: - pprint_name(dst, (struct clast_name*) e); - break; - case clast_expr_term: - pprint_term(i, dst, (struct clast_term*) e); - break; - case clast_expr_red: - pprint_reduction(i, dst, (struct clast_reduction*) e); - break; - case clast_expr_bin: - pprint_binary(i, dst, (struct clast_binary*) e); - break; - default: - assert(0); - } -} - -void pprint_equation(struct cloogoptions *i, FILE *dst, struct clast_equation *eq) -{ - pprint_expr(i, dst, eq->LHS); - if (eq->sign == 0) - fprintf(dst, " == "); - else if (eq->sign > 0) - fprintf(dst, " >= "); - else - fprintf(dst, " <= "); - pprint_expr(i, dst, eq->RHS); -} - -void pprint_assignment(struct cloogoptions *i, FILE *dst, - struct clast_assignment *a) -{ - if (a->LHS) - fprintf(dst, "%s = ", a->LHS); - pprint_expr(i, dst, a->RHS); -} - -void pprint_user_stmt(struct cloogoptions *options, FILE *dst, - struct clast_user_stmt *u) -{ - struct clast_stmt *t; - if (u->statement->name) - fprintf(dst, "%s", u->statement->name); - else - fprintf(dst, "S%d", u->statement->number); - fprintf(dst, "("); - for (t = u->substitutions; t; t = t->next) { - assert(CLAST_STMT_IS_A(t, stmt_ass)); - pprint_assignment(options, dst, (struct clast_assignment *)t); - if (t->next) - fprintf(dst, ","); - } - fprintf(dst, ")"); - if (options->language != LANGUAGE_FORTRAN) - fprintf(dst, ";"); - fprintf(dst, "\n"); -} - -void pprint_guard(struct cloogoptions *options, FILE *dst, int indent, - struct clast_guard *g) -{ - int k; - if (options->language == LANGUAGE_FORTRAN) - fprintf(dst,"IF "); - else - fprintf(dst,"if "); - if (g->n > 1) - fprintf(dst,"("); - for (k = 0; k < g->n; ++k) { - if (k > 0) { - if (options->language == LANGUAGE_FORTRAN) - fprintf(dst," .AND. "); - else - fprintf(dst," && "); - } - fprintf(dst,"("); - pprint_equation(options, dst, &g->eq[k]); - fprintf(dst,")"); - } - if (g->n > 1) - fprintf(dst,")"); - if (options->language == LANGUAGE_FORTRAN) - fprintf(dst," THEN\n"); - else - fprintf(dst," {\n"); - - pprint_stmt_list(options, dst, indent + INDENT_STEP, g->then); - - fprintf(dst, "%*s", indent, ""); - if (options->language == LANGUAGE_FORTRAN) - fprintf(dst,"END IF\n"); - else - fprintf(dst,"}\n"); -} - -void pprint_for(struct cloogoptions *options, FILE *dst, int indent, - struct clast_for *f) -{ - if (options->language == LANGUAGE_FORTRAN) - fprintf(dst, "DO "); - else - fprintf(dst, "for ("); - - if (f->LB) { - fprintf(dst, "%s=", f->iterator); - pprint_expr(options, dst, f->LB); - } else if (options->language == LANGUAGE_FORTRAN) - cloog_die("unbounded loops not allowed in FORTRAN.\n"); - - if (options->language == LANGUAGE_FORTRAN) - fprintf(dst,", "); - else - fprintf(dst,";"); - - if (f->UB) { - if (options->language != LANGUAGE_FORTRAN) - fprintf(dst,"%s<=", f->iterator); - pprint_expr(options, dst, f->UB); - } else if (options->language == LANGUAGE_FORTRAN) - cloog_die("unbounded loops not allowed in FORTRAN.\n"); - - if (options->language == LANGUAGE_FORTRAN) { - if (cloog_int_gt_si(f->stride, 1)) - cloog_int_print(dst, f->stride); - fprintf(dst,"\n"); - } - else { - if (cloog_int_gt_si(f->stride, 1)) { - fprintf(dst,";%s+=", f->iterator); - cloog_int_print(dst, f->stride); - fprintf(dst, ") {\n"); - } else - fprintf(dst, ";%s++) {\n", f->iterator); - } - - pprint_stmt_list(options, dst, indent + INDENT_STEP, f->body); - - fprintf(dst, "%*s", indent, ""); - if (options->language == LANGUAGE_FORTRAN) - fprintf(dst,"END DO\n") ; - else - fprintf(dst,"}\n") ; -} - -void pprint_stmt_list(struct cloogoptions *options, FILE *dst, int indent, - struct clast_stmt *s) -{ - for ( ; s; s = s->next) { - if (CLAST_STMT_IS_A(s, stmt_root)) - continue; - fprintf(dst, "%*s", indent, ""); - if (CLAST_STMT_IS_A(s, stmt_ass)) { - pprint_assignment(options, dst, (struct clast_assignment *) s); - if (options->language != LANGUAGE_FORTRAN) - fprintf(dst, ";"); - fprintf(dst, "\n"); - } else if (CLAST_STMT_IS_A(s, stmt_user)) { - pprint_user_stmt(options, dst, (struct clast_user_stmt *) s); - } else if (CLAST_STMT_IS_A(s, stmt_for)) { - pprint_for(options, dst, indent, (struct clast_for *) s); - } else if (CLAST_STMT_IS_A(s, stmt_guard)) { - pprint_guard(options, dst, indent, (struct clast_guard *) s); - } else if (CLAST_STMT_IS_A(s, stmt_block)) { - fprintf(dst, "{\n"); - pprint_stmt_list(options, dst, indent + INDENT_STEP, - ((struct clast_block *)s)->body); - fprintf(dst, "%*s", indent, ""); - fprintf(dst, "}\n"); - } else { - assert(0); - } - } -} - - -/****************************************************************************** - * Pretty Printing (dirty) functions * - ******************************************************************************/ - -void clast_pprint(FILE *foo, struct clast_stmt *root, - int indent, CloogOptions *options) -{ - pprint_stmt_list(options, foo, indent, root); -} diff --git a/cloog-0.16.3/source/program.c b/cloog-0.16.3/source/program.c deleted file mode 100644 index e5aa4fc..0000000 --- a/cloog-0.16.3/source/program.c +++ /dev/null @@ -1,1077 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** program.c ** - **-------------------------------------------------------------------** - ** First version: october 25th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ -/* CAUTION: the english used for comments is probably the worst you ever read, - * please feel free to correct and improve it ! - */ - - -# include -# include -#include -# include -# include -# include -# include -# include -# include "../include/cloog/cloog.h" -#ifdef CLOOG_RUSAGE -# include -#endif - -#define ALLOC(type) (type*)malloc(sizeof(type)) - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ - - -/** - * cloog_program_print function: - * this function is a human-friendly way to display the CloogProgram data - * structure, it shows all the different fields and includes an indentation - * level (level) in order to work with others print_structure functions. - * - July 1st 2005: first version based on the old cloog_program_print function. - */ -void cloog_program_print_structure(file, program, level) -FILE * file ; -CloogProgram * program ; -int level ; -{ int i, j ; - - /* Go to the right level. */ - for (i=0; ilanguage) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the scattering dimension number. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - fprintf(file,"Scattering dimension number: %d\n",program->nb_scattdims) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the scalar scattering dimension informations. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - if (program->scaldims != NULL) - { fprintf(file,"Scalar dimensions:") ; - for (i=0;inb_scattdims;i++) - fprintf(file," %d:%d ",i,program->scaldims[i]) ; - fprintf(file,"\n") ; - } - else - fprintf(file,"No scalar scattering dimensions\n") ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the parameter and the iterator names. */ - cloog_names_print_structure(file,program->names,level+1) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the context. */ - cloog_domain_print_structure(file, program->context, level+1, "Context"); - - /* Print the loop. */ - cloog_loop_print_structure(file,program->loop,level+1) ; - - /* One more time something that is here only for a better look. */ - for (j=0; j<2; j++) - { for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - - fprintf(file,"\n") ; - } -} - - -/** - * cloog_program_dump_cloog function: - * This function dumps a CloogProgram structure supposed to be completely - * filled in a CLooG input file (foo possibly stdout) such as CLooG can - * rebuild almost exactly the data structure from the input file. - * - * If the scattering is already applied, the scattering parameter is supposed to - * be NULL. In this case the number of scattering functions is lost, since they - * are included inside the iteration domains. This can only lead to a less - * beautiful pretty printing. - * - * In case the scattering is not yet applied it can be passed to this function - * and will be included in the CLooG input file dump. - */ -void cloog_program_dump_cloog(FILE * foo, CloogProgram * program, - CloogScatteringList *scattering) -{ - int i; - CloogLoop * loop ; - CloogScatteringList *tmp_scatt; - - fprintf(foo, - "# CLooG -> CLooG\n" - "# This is an automatic dump of a CLooG input file from a CloogProgram data\n" - "# structure. WARNING: it is highly dangerous and MAY be correct ONLY if\n" - "# - it has been dumped before loop generation.\n" - "# - option -noscalars is used (it removes scalar dimensions otherwise)\n" - "# - option -l is at least the original scattering dimension number\n" - "# ASK THE AUTHOR IF YOU *NEED* SOMETHING MORE ROBUST\n") ; - - /* Language. */ - if (program->language == 'c') - fprintf(foo,"# Language: C\n") ; - else - fprintf(foo,"# Language: FORTRAN\n") ; - fprintf(foo,"%c\n\n",program->language) ; - - /* Context. */ - fprintf(foo, "# Context (%d parameter(s)):\n", program->names->nb_parameters); - cloog_domain_print_constraints(foo, program->context, 0); - fprintf(foo,"1 # Parameter name(s)\n") ; - for (i=0;inames->nb_parameters;i++) - fprintf(foo,"%s ",program->names->parameters[i]) ; - - /* Statement number. */ - i = 0 ; - loop = program->loop ; - while (loop != NULL) - { i++ ; - loop = loop->next ; - } - fprintf(foo,"\n\n# Statement number:\n%d\n\n",i) ; - - /* Iteration domains. */ - i = 1 ; - loop = program->loop ; - while (loop != NULL) - { /* Name of the domain. */ - fprintf(foo,"# Iteration domain of statement %d.\n",i) ; - - cloog_domain_print_constraints(foo, loop->domain, 1); - fprintf(foo,"0 0 0 # For future options.\n\n") ; - - i++ ; - loop = loop->next ; - } - fprintf(foo,"\n1 # Iterator name(s)\n") ; - - /* Scattering already applied? In this case print the scattering names as - * additional iterator names. */ - if (!scattering) - for (i = 0; i < program->names->nb_scattering; i++) - fprintf(foo, "%s ", program->names->scattering[i]); - for (i=0;inames->nb_iterators;i++) - fprintf(foo,"%s ",program->names->iterators[i]); - fprintf(foo,"\n\n") ; - - /* Exit, if scattering is already applied. */ - if (!scattering) { - fprintf(foo, "# No scattering functions.\n0\n\n"); - return; - } - - /* Scattering relations. */ - fprintf(foo, "# --------------------- SCATTERING --------------------\n"); - - i = 0; - for (tmp_scatt = scattering; tmp_scatt; tmp_scatt = tmp_scatt->next) - i++; - - fprintf(foo, "%d # Scattering functions", i); - - for (tmp_scatt = scattering; tmp_scatt; tmp_scatt = tmp_scatt->next) - cloog_scattering_print_constraints(foo, tmp_scatt->scatt); - - fprintf(foo, "\n1 # Scattering dimension name(s)\n"); - - for (i = 0; i < program->names->nb_scattering; i++) - fprintf(foo, "%s ", program->names->scattering[i]); -} - - -/** - * cloog_program_print function: - * This function prints the content of a CloogProgram structure (program) into a - * file (file, possibly stdout). - * - July 1st 2005: Now this very old function (probably as old as CLooG) is - * only a frontend to cloog_program_print_structure, with a - * quite better human-readable representation. - */ -void cloog_program_print(FILE * file, CloogProgram * program) -{ cloog_program_print_structure(file,program,0) ; -} - - -static void print_comment(FILE *file, CloogOptions *options, - const char *fmt, ...) -{ - va_list args; - - va_start(args, fmt); - if (options->language == LANGUAGE_FORTRAN) { - fprintf(file, "! "); - vfprintf(file, fmt, args); - fprintf(file, "\n"); - } else { - fprintf(file, "/* "); - vfprintf(file, fmt, args); - fprintf(file, " */\n"); - } -} - -static void print_macros(FILE *file) -{ - fprintf(file, "/* Useful macros. */\n") ; - fprintf(file, - "#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d))\n"); - fprintf(file, - "#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d))\n"); - fprintf(file, "#define max(x,y) ((x) > (y) ? (x) : (y))\n") ; - fprintf(file, "#define min(x,y) ((x) < (y) ? (x) : (y))\n\n") ; -} - -static void print_declarations(FILE *file, int n, char **names) -{ - int i; - - fprintf(file, " int %s", names[0]); - for (i = 1; i < n; i++) - fprintf(file, ", %s", names[i]); - - fprintf(file, ";\n"); -} - -static void print_iterator_declarations(FILE *file, CloogProgram *program, - CloogOptions *options) -{ - CloogNames *names = program->names; - - if (names->nb_scattering) { - fprintf(file, " /* Scattering iterators. */\n"); - print_declarations(file, names->nb_scattering, names->scattering); - } - if (names->nb_iterators) { - fprintf(file, " /* Original iterators. */\n"); - print_declarations(file, names->nb_iterators, names->iterators); - } -} - -static void print_callable_preamble(FILE *file, CloogProgram *program, - CloogOptions *options) -{ - int j; - CloogBlockList *blocklist; - CloogBlock *block; - CloogStatement *statement; - - fprintf(file, "extern void hash(int);\n\n"); - - print_macros(file); - - for (blocklist = program->blocklist; blocklist; blocklist = blocklist->next) { - block = blocklist->block; - for (statement = block->statement; statement; statement = statement->next) { - fprintf(file, "#define S%d(", statement->number); - if (block->depth > 0) { - fprintf(file, "%s", program->names->iterators[0]); - for(j = 1; j < block->depth; j++) - fprintf(file, ",%s", program->names->iterators[j]); - } - fprintf(file,") { hash(%d);", statement->number); - for(j = 0; j < block->depth; j++) - fprintf(file, " hash(%s);", program->names->iterators[j]); - fprintf(file, " }\n"); - } - } - fprintf(file, "\nvoid test("); - if (program->names->nb_parameters > 0) { - fprintf(file, "int %s", program->names->parameters[0]); - for(j = 1; j < program->names->nb_parameters; j++) - fprintf(file, ", int %s", program->names->parameters[j]); - } - fprintf(file, ")\n{\n"); - print_iterator_declarations(file, program, options); -} - -static void print_callable_postamble(FILE *file, CloogProgram *program) -{ - fprintf(file, "}\n"); -} - -/** - * cloog_program_pprint function: - * This function prints the content of a CloogProgram structure (program) into a - * file (file, possibly stdout), in a C-like language. - * - June 22nd 2005: Adaptation for GMP. - */ -void cloog_program_pprint(file, program, options) -FILE * file ; -CloogProgram * program ; -CloogOptions * options ; -{ int i, j, nb_scattering, indentation=0 ; - CloogStatement * statement ; - CloogBlockList * blocklist ; - CloogBlock * block ; - struct clast_stmt *root; - - if (program->language == 'f') - options->language = LANGUAGE_FORTRAN ; - else - options->language = LANGUAGE_C ; - -#ifdef CLOOG_RUSAGE - print_comment(file, options, "Generated from %s by %s in %.2fs.", - options->name, cloog_version(), options->time); -#else - print_comment(file, options, "Generated from %s by %s.", - options->name, cloog_version()); -#endif -#ifdef CLOOG_MEMORY - print_comment(file, options, "CLooG asked for %d KBytes.", options->memory); - cloog_msg(CLOOG_INFO, "%.2fs and %dKB used for code generation.\n", - options->time,options->memory); -#endif - - /* If the option "compilable" is set, we provide the whole stuff to generate - * a compilable code. This code just do nothing, but now the user can edit - * the source and set the statement macros and parameters values. - */ - nb_scattering = program->nb_scattdims ; - if (options->compilable && (program->language == 'c')) - { /* The headers. */ - fprintf(file,"/* DON'T FORGET TO USE -lm OPTION TO COMPILE. */\n\n") ; - fprintf(file,"/* Useful headers. */\n") ; - fprintf(file,"#include \n") ; - fprintf(file,"#include \n") ; - fprintf(file,"#include \n\n") ; - - /* The value of parameters. */ - fprintf(file,"/* Parameter value. */\n") ; - for (i = 1; i <= program->names->nb_parameters; i++) - fprintf(file, "#define PARVAL%d %d\n", i, options->compilable); - - /* The macros. */ - print_macros(file); - - /* The statement macros. */ - fprintf(file,"/* Statement macros (please set). */\n") ; - blocklist = program->blocklist ; - while (blocklist != NULL) - { block = blocklist->block ; - statement = block->statement ; - while (statement != NULL) - { fprintf(file,"#define S%d(",statement->number) ; - if (block->depth > 0) - { fprintf(file,"%s",program->names->iterators[0]) ; - for(j=1;jdepth;j++) - fprintf(file,",%s",program->names->iterators[j]) ; - } - fprintf(file,") {total++;") ; - if (block->depth > 0) { - fprintf(file, " printf(\"S%d %%d", statement->number); - for(j=1;jdepth;j++) - fprintf(file, " %%d"); - - fprintf(file,"\\n\",%s",program->names->iterators[0]) ; - for(j=1;jdepth;j++) - fprintf(file,",%s",program->names->iterators[j]) ; - fprintf(file,");") ; - } - fprintf(file,"}\n") ; - - statement = statement->next ; - } - blocklist = blocklist->next ; - } - - /* The iterator and parameter declaration. */ - fprintf(file,"\nint main() {\n") ; - print_iterator_declarations(file, program, options); - if (program->names->nb_parameters > 0) - { fprintf(file," /* Parameters. */\n") ; - fprintf(file, " int %s=PARVAL1",program->names->parameters[0]); - for(i=2;i<=program->names->nb_parameters;i++) - fprintf(file, ", %s=PARVAL%d", program->names->parameters[i-1], i); - - fprintf(file,";\n"); - } - fprintf(file," int total=0;\n"); - fprintf(file,"\n") ; - - /* And we adapt the identation. */ - indentation += 2 ; - } else if (options->callable && program->language == 'c') { - print_callable_preamble(file, program, options); - indentation += 2; - } - - root = cloog_clast_create(program, options); - clast_pprint(file, root, indentation, options); - cloog_clast_free(root); - - /* The end of the compilable code in case of 'compilable' option. */ - if (options->compilable && (program->language == 'c')) - { - fprintf(file, "\n printf(\"Number of integral points: %%d.\\n\",total);"); - fprintf(file, "\n return 0;\n}\n"); - } else if (options->callable && program->language == 'c') - print_callable_postamble(file, program); -} - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ - - -/** - * cloog_program_free function: - * This function frees the allocated memory for a CloogProgram structure. - */ -void cloog_program_free(CloogProgram * program) -{ cloog_names_free(program->names) ; - cloog_loop_free(program->loop) ; - cloog_domain_free(program->context) ; - cloog_block_list_free(program->blocklist) ; - if (program->scaldims != NULL) - free(program->scaldims) ; - - free(program) ; -} - - -/****************************************************************************** - * Reading function * - ******************************************************************************/ - - -static void cloog_program_construct_block_list(CloogProgram *p) -{ - CloogLoop *loop; - CloogBlockList **next = &p->blocklist; - - for (loop = p->loop; loop; loop = loop->next) { - *next = cloog_block_list_alloc(loop->block); - next = &(*next)->next; - } -} - - -/** - * Construct a CloogProgram structure from a given context and - * union domain representing the iteration domains and scattering functions. - */ -CloogProgram *cloog_program_alloc(CloogDomain *context, CloogUnionDomain *ud, - CloogOptions *options) -{ - int i; - char prefix[] = "c"; - CloogScatteringList * scatteringl; - CloogNames *n; - CloogProgram * p ; - - /* Memory allocation for the CloogProgram structure. */ - p = cloog_program_malloc() ; - - if (options->language == LANGUAGE_FORTRAN) - p->language = 'f'; - else - p->language = 'c'; - - p->names = n = cloog_names_alloc(); - - /* We then read the context data. */ - p->context = context; - n->nb_parameters = ud->n_name[CLOOG_PARAM]; - - /* First part of the CloogNames structure: the parameter names. */ - if (ud->name[CLOOG_PARAM]) { - n->parameters = ud->name[CLOOG_PARAM]; - ud->name[CLOOG_PARAM] = NULL; - } else - n->parameters = cloog_names_generate_items(n->nb_parameters, NULL, - FIRST_PARAMETER); - - n->nb_iterators = ud->n_name[CLOOG_ITER]; - if (ud->name[CLOOG_ITER]) { - n->iterators = ud->name[CLOOG_ITER]; - ud->name[CLOOG_ITER] = NULL; - } else - n->iterators = cloog_names_generate_items(n->nb_iterators, NULL, - FIRST_ITERATOR); - - if (ud->domain) { - CloogNamedDomainList *l; - CloogLoop **next = &p->loop; - CloogScatteringList **next_scat = &scatteringl; - - scatteringl = NULL; - for (i = 0, l = ud->domain; l; ++i, l = l->next) { - *next = cloog_loop_from_domain(options->state, l->domain, i); - l->domain = NULL; - (*next)->block->statement->name = l->name; - (*next)->block->statement->usr = l->usr; - l->name = NULL; - - if (l->scattering) { - *next_scat = ALLOC(CloogScatteringList); - (*next_scat)->scatt = l->scattering; - l->scattering = NULL; - (*next_scat)->next = NULL; - - next_scat = &(*next_scat)->next; - } - - next = &(*next)->next; - } - - if (scatteringl != NULL) { - p->nb_scattdims = cloog_scattering_dimension(scatteringl->scatt, - p->loop->domain); - n->nb_scattering = p->nb_scattdims; - if (ud->name[CLOOG_SCAT]) { - n->scattering = ud->name[CLOOG_SCAT]; - ud->name[CLOOG_SCAT] = NULL; - } else - n->scattering = cloog_names_generate_items(n->nb_scattering, prefix, -1); - - /* The boolean array for scalar dimensions is created and set to 0. */ - p->scaldims = (int *)malloc(p->nb_scattdims*(sizeof(int))) ; - if (p->scaldims == NULL) - cloog_die("memory overflow.\n"); - for (i=0;inb_scattdims;i++) - p->scaldims[i] = 0 ; - - /* We try to find blocks in the input problem to reduce complexity. */ - if (!options->noblocks) - cloog_program_block(p, scatteringl, options); - if (!options->noscalars) - cloog_program_extract_scalars(p, scatteringl, options); - - cloog_program_scatter(p, scatteringl, options); - cloog_scattering_list_free(scatteringl); - - if (!options->noblocks) - p->loop = cloog_loop_block(p->loop, p->scaldims, p->nb_scattdims); - } - else - { p->nb_scattdims = 0 ; - p->scaldims = NULL ; - } - - cloog_names_scalarize(p->names,p->nb_scattdims,p->scaldims) ; - - cloog_program_construct_block_list(p); - } - else - { p->loop = NULL ; - p->blocklist = NULL ; - p->scaldims = NULL ; - } - - cloog_union_domain_free(ud); - - return(p) ; -} - - -/** - * cloog_program_read function: - * This function read the informations to put in a CloogProgram structure from - * a file (file, possibly stdin). It returns a pointer to a CloogProgram - * structure containing the read informations. - * - October 25th 2001: first version. - * - September 9th 2002: - the big reading function is now split in several - * functions (one per read data structure). - * - adaptation to the new file format with naming. - */ -CloogProgram *cloog_program_read(FILE *file, CloogOptions *options) -{ - CloogInput *input; - CloogProgram *p; - - input = cloog_input_read(file, options); - p = cloog_program_alloc(input->context, input->ud, options); - free(input); - - return p; -} - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - - -/** - * cloog_program_malloc function: - * This function allocates the memory space for a CloogProgram structure and - * sets its fields with default values. Then it returns a pointer to the - * allocated space. - * - November 21th 2005: first version. - */ -CloogProgram * cloog_program_malloc() -{ CloogProgram * program ; - - /* Memory allocation for the CloogProgram structure. */ - program = (CloogProgram *)malloc(sizeof(CloogProgram)) ; - if (program == NULL) - cloog_die("memory overflow.\n"); - - /* We set the various fields with default values. */ - program->language = 'c' ; - program->nb_scattdims = 0 ; - program->context = NULL ; - program->loop = NULL ; - program->names = NULL ; - program->blocklist = NULL ; - program->scaldims = NULL ; - program->usr = NULL; - - return program ; -} - - -/** - * cloog_program_generate function: - * This function calls the Quillere algorithm for loop scanning. (see the - * Quillere paper) and calls the loop simplification function. - * - depth is the loop depth we want to optimize (guard free as possible), - * the first loop depth is 1 and anegative value is the infinity depth. - * - sep_level is the level number where we want to start loop separation. - ** - * - October 26th 2001: first version. - * - April 19th 2005: some basic fixes and memory usage feature. - * - April 29th 2005: (bug fix, bug found by DaeGon Kim) see case 2 below. - */ -CloogProgram * cloog_program_generate(program, options) -CloogProgram * program ; -CloogOptions * options ; -{ -#ifdef CLOOG_RUSAGE - float time; - struct rusage start, end ; -#endif - CloogLoop * loop ; -#ifdef CLOOG_MEMORY - char status_path[MAX_STRING_VAL] ; - FILE * status ; - - /* We initialize the memory need to 0. */ - options->memory = 0 ; -#endif - - if (options->override) - { - cloog_msg(options, CLOOG_WARNING, - "you are using -override option, be aware that the " - "generated\n code may be incorrect.\n") ; - } - else - { /* Playing with options may be dangerous, here are two possible issues : - * 1. Using -l option less than scattering dimension number may lead to - * an illegal target code (since the scattering is not respected), if - * it is the case, we set -l depth to the first acceptable value. - */ - if ((program->nb_scattdims > options->l) && (options->l >= 0)) - { - cloog_msg(options, CLOOG_WARNING, - "-l depth is less than the scattering dimension number " - "(the \n generated code may be incorrect), it has been " - "automaticaly set\n to this value (use option -override " - "to override).\n") ; - options->l = program->nb_scattdims ; - } - - /* 2. Using -f option greater than one while -l depth is greater than the - * scattering dimension number may lead to iteration duplication (try - * test/daegon_lu_osp.cloog with '-f 3' to test) because of the step 4b - * of the cloog_loop_generate function, if it is the case, we set -l to - * the first acceptable value. - */ - if (((options->f > 1) || (options->f < 0)) && - ((options->l > program->nb_scattdims) || (options->l < 0))) - { - cloog_msg(options, CLOOG_WARNING, - "-f depth is more than one, -l depth has been " - "automaticaly set\n to the scattering dimension number " - "(target code may have\n duplicated iterations), -l depth " - "has been automaticaly set to\n this value (use option " - "-override to override).\n") ; - options->l = program->nb_scattdims ; - } - } - -#ifdef CLOOG_RUSAGE - getrusage(RUSAGE_SELF, &start) ; -#endif - if (program->loop != NULL) - { loop = program->loop ; - - /* Here we go ! */ - loop = cloog_loop_generate(loop, program->context, 0, 0, - program->scaldims, - program->nb_scattdims, - options); - -#ifdef CLOOG_MEMORY - /* We read into the status file of the process how many memory it uses. */ - sprintf(status_path,"/proc/%d/status",getpid()) ; - status = fopen(status_path, "r") ; - while (fscanf(status,"%s",status_path) && strcmp(status_path,"VmData:")!=0); - fscanf(status,"%d",&(options->memory)) ; - fclose(status) ; -#endif - - if ((!options->nosimplify) && (program->loop != NULL)) - loop = cloog_loop_simplify(loop, program->context, 0, - program->nb_scattdims, options); - - program->loop = loop ; - } - -#ifdef CLOOG_RUSAGE - getrusage(RUSAGE_SELF, &end) ; - /* We calculate the time spent in code generation. */ - time = (end.ru_utime.tv_usec - start.ru_utime.tv_usec)/(float)(MEGA) ; - time += (float)(end.ru_utime.tv_sec - start.ru_utime.tv_sec) ; - options->time = time ; -#endif - - return program ; -} - - -/** - * cloog_program_block function: - * this function gives a last chance to the lazy user to consider statement - * blocks instead of some statement lists where the whole list may be - * considered as a single statement from a code generation point of view. - * For instance two statements with the same iteration domain and the same - * scattering functions may be considered as a block. This function is lazy - * and can only find very simple forms of trivial blocks (see - * cloog_domain_lazy_block function for more details). The useless loops and - * scattering functions are removed and freed while the statement list of - * according blocks are filled. - * - program is the whole program structure (befaore applying scattering), - * - scattering is the list of scattering functions. - ** - * - April 30th 2005: first attempt. - * - June 10-11th 2005: first working version. - */ -void cloog_program_block(CloogProgram *program, - CloogScatteringList *scattering, CloogOptions *options) -{ int blocked_reference=0, blocked=0, nb_blocked=0 ; - CloogLoop * reference, * start, * loop ; - CloogScatteringList * scatt_reference, * scatt_loop, * scatt_start; - - if ((program->loop == NULL) || (program->loop->next == NULL)) - return ; - - /* The process will use three variables for the linked list : - * - 'start' is the starting point of a new block, - * - 'reference' is the node of the block used for the block checking, - * - 'loop' is the candidate to be inserted inside the block. - * At the beginning of the process, the linked lists are as follow: - * O------>O------>O------>O------>NULL - * | | - * start loop - * reference - */ - - reference = program->loop ; - start = program->loop ; - loop = reference->next ; - scatt_reference = scattering ; - scatt_start = scattering ; - scatt_loop = scattering->next ; - - while (loop != NULL) - { if (cloog_domain_lazy_equal(reference->domain,loop->domain) && - cloog_scattering_lazy_block(scatt_reference->scatt, scatt_loop->scatt, - scattering,program->nb_scattdims)) - { /* If we find a block we update the links: - * +---------------+ - * | v - * O O------>O------>O------>NULL - * | | - * start loop - * reference - */ - blocked = 1 ; - nb_blocked ++ ; - cloog_block_merge(start->block,loop->block); /* merge frees loop->block */ - loop->block = NULL ; - start->next = loop->next ; - scatt_start->next = scatt_loop->next ; - } - else - { /* If we didn't find a block, the next start of a block is updated: - * O------>O------>O------>O------>NULL - * | | - * reference start - * loop - */ - blocked= 0 ; - start = loop ; - scatt_start = scatt_loop ; - } - - /* If the reference node has been included into a block, we can free it. */ - if (blocked_reference) - { reference->next = NULL ; - cloog_loop_free(reference) ; - cloog_scattering_free(scatt_reference->scatt); - free(scatt_reference) ; - } - - /* The reference and the loop are now updated for the next try, the - * starting position depends on the previous step. - * O ? O------>O------>O------>NULL - * | | - * reference loop - */ - reference = loop ; - loop = loop->next ; - scatt_reference = scatt_loop ; - scatt_loop = scatt_loop->next ; - - /* We mark the new reference as being blocked or not, if will be freed - * during the next while loop execution. - */ - if (blocked) - blocked_reference = 1 ; - else - blocked_reference = 0 ; - } - - /* We free the last blocked reference if any (since in the while loop it was - * freed during the next loop execution, it was not possible to free the - * last one inside). - */ - if (blocked_reference) - { reference->next = NULL ; - cloog_loop_free(reference) ; - cloog_scattering_free(scatt_reference->scatt); - free(scatt_reference) ; - } - - if (nb_blocked != 0) - cloog_msg(options, CLOOG_INFO, "%d domains have been blocked.\n", nb_blocked); -} - - -/** - * cloog_program_extract_scalars function: - * this functions finds and removes the dimensions of the scattering functions - * when they are scalar (i.e. of the shape "dim + scalar = 0") for all - * scattering functions. The reason is that the processing of such dimensions - * is trivial and do not need neither a row and a column in the matrix - * representation of the domain (this will save memory) neither the full - * Quillere processing (this will save time). The scalar dimensions data are - * dispatched in the CloogProgram structure (the boolean vector scaldims will - * say which original dimensions are scalar or not) and to the CloogBlock - * structures (each one has a scaldims vector that contains the scalar values). - * - June 14th 2005: first developments. - * - June 30th 2005: first version. - */ -void cloog_program_extract_scalars(CloogProgram *program, - CloogScatteringList *scattering, CloogOptions *options) -{ int i, j, scalar, current, nb_scaldims=0 ; - CloogScatteringList *start; - CloogScattering *old; - CloogLoop *loop; - CloogBlock * block ; - - start = scattering ; - - for (i=0;inb_scattdims;i++) - { scalar = 1 ; - scattering = start ; - while (scattering != NULL) - { if (!cloog_scattering_lazy_isscalar(scattering->scatt, i, NULL)) - { scalar = 0 ; - break ; - } - scattering = scattering->next ; - } - - if (scalar) - { nb_scaldims ++ ; - program->scaldims[i] = 1 ; - } - } - - /* If there are no scalar dimensions, we can continue directly. */ - if (!nb_scaldims) - return ; - - /* Otherwise, in each block, we have to put the number of scalar dimensions, - * and to allocate the memory for the scalar values. - */ - for (loop = program->loop; loop; loop = loop->next) { - block = loop->block; - block->nb_scaldims = nb_scaldims ; - block->scaldims = (cloog_int_t *)malloc(nb_scaldims*sizeof(cloog_int_t)); - for (i=0;iscaldims[i]); - } - - /* Then we have to fill these scalar values, so we can erase those dimensions - * from the scattering functions. It's easier to begin with the last one, - * since there would be an offset otherwise (if we remove the i^th dimension, - * then the next one is not the (i+1)^th but still the i^th...). - */ - current = nb_scaldims - 1 ; - for (i=program->nb_scattdims-1;i>=0;i--) - if (program->scaldims[i]) - { - scattering = start ; - for (loop = program->loop; loop; loop = loop->next) { - block = loop->block; - if (!cloog_scattering_lazy_isscalar(scattering->scatt, i, - &block->scaldims[current])) { - /* We should have found a scalar value: if not, there is an error. */ - cloog_die("dimension %d is not scalar as expected.\n", i); - } - scattering = scattering->next ; - } - - scattering = start ; - while (scattering != NULL) { - old = scattering->scatt; - scattering->scatt = cloog_scattering_erase_dimension(old, i); - cloog_scattering_free(old); - scattering = scattering->next ; - } - current-- ; - } - - /* We postprocess the scaldims array in such a way that each entry is how - * many scalar dimensions follows + 1 (the current one). This will make - * some other processing easier (e.g. knowledge of some offsets). - */ - for (i=0;inb_scattdims-1;i++) - { if (program->scaldims[i]) - { j = i + 1 ; - while ((j < program->nb_scattdims) && program->scaldims[j]) - { program->scaldims[i] ++ ; - j ++ ; - } - } - } - - if (nb_scaldims != 0) - cloog_msg(options, CLOOG_INFO, "%d dimensions (over %d) are scalar.\n", - nb_scaldims,program->nb_scattdims) ; -} - - -/** - * cloog_program_scatter function: - * This function adds the scattering (scheduling) informations in a program. - * If names is NULL, this function create names itself such that the i^th - * name is ci. - * - November 6th 2001: first version. - */ -void cloog_program_scatter(CloogProgram *program, - CloogScatteringList *scattering, CloogOptions *options) -{ int scattering_dim, scattering_dim2, not_enough_constraints=0 ; - CloogLoop * loop ; - - if ((program != NULL) && (scattering != NULL)) - { loop = program->loop ; - - /* We compute the scattering dimension and check it is >=0. */ - scattering_dim = cloog_scattering_dimension(scattering->scatt, loop->domain); - if (scattering_dim < 0) - cloog_die("scattering has not enough dimensions.\n"); - if (!cloog_scattering_fully_specified(scattering->scatt, loop->domain)) - not_enough_constraints ++ ; - - /* The scattering dimension may have been modified by scalar extraction. */ - scattering_dim = cloog_scattering_dimension(scattering->scatt, loop->domain); - - /* Finally we scatter all loops. */ - cloog_loop_scatter(loop, scattering->scatt); - loop = loop->next ; - scattering = scattering->next ; - - while ((loop != NULL) && (scattering != NULL)) - { scattering_dim2 = cloog_scattering_dimension(scattering->scatt, - loop->domain); - if (scattering_dim2 != scattering_dim) - cloog_die("scattering dimensions are not the same.\n") ; - if (!cloog_scattering_fully_specified(scattering->scatt, loop->domain)) - not_enough_constraints ++ ; - - cloog_loop_scatter(loop, scattering->scatt); - loop = loop->next ; - scattering = scattering->next ; - } - if ((loop != NULL) || (scattering != NULL)) - cloog_msg(options, CLOOG_WARNING, - "there is not a scattering for each statement.\n"); - - if (not_enough_constraints) - cloog_msg(options, CLOOG_WARNING, "not enough constraints for " - "%d scattering function(s).\n",not_enough_constraints) ; - } -} diff --git a/cloog-0.16.3/source/state.c b/cloog-0.16.3/source/state.c deleted file mode 100644 index 7f3fff8..0000000 --- a/cloog-0.16.3/source/state.c +++ /dev/null @@ -1,52 +0,0 @@ -#include -#include "../include/cloog/cloog.h" - -/** - * Allocate state and initialize backend independent part. - */ -CloogState *cloog_core_state_malloc(void) -{ - CloogState *state; - - state = (CloogState *)malloc(sizeof(CloogState)); - if (!state) - cloog_die("memory overflow.\n"); - - state->backend = NULL; - - cloog_int_init(state->zero); - cloog_int_set_si(state->zero, 0); - cloog_int_init(state->one); - cloog_int_set_si(state->one, 1); - cloog_int_init(state->negone); - cloog_int_set_si(state->negone, -1); - - state->block_allocated = 0; - state->block_freed = 0; - state->block_max = 0; - - state->domain_allocated = 0; - state->domain_freed = 0; - state->domain_max = 0; - - state->loop_allocated = 0; - state->loop_freed = 0; - state->loop_max = 0; - - state->statement_allocated = 0; - state->statement_freed = 0; - state->statement_max = 0; - - return state; -} - -/** - * Free state. - */ -void cloog_core_state_free(CloogState *state) -{ - cloog_int_clear(state->zero); - cloog_int_clear(state->one); - cloog_int_clear(state->negone); - free(state); -} diff --git a/cloog-0.16.3/source/statement.c b/cloog-0.16.3/source/statement.c deleted file mode 100644 index 1c6af4e..0000000 --- a/cloog-0.16.3/source/statement.c +++ /dev/null @@ -1,280 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** statement.c ** - **-------------------------------------------------------------------** - ** First version: november 4th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ -/* CAUTION: the english used for comments is probably the worst you ever read, - * please feel free to correct and improve it ! - */ - -# include -# include -# include -# include "../include/cloog/cloog.h" - - -/****************************************************************************** - * Memory leaks hunting * - ******************************************************************************/ - - -/** - * These functions and global variables are devoted to memory leaks hunting: we - * want to know at each moment how many CloogStatement structures had been - * allocated (cloog_statement_allocated) and how many had been freed - * (cloog_statement_freed). Each time a CloogStatement structure is allocated, - * a call to the function cloog_statement_leak_up() must be carried out, and - * respectively cloog_statement_leak_down() when a CloogStatement structure is - * freed. The special variable cloog_statement_max gives the maximal number of - * CloogStatement structures simultaneously alive (i.e. allocated and - * non-freed) in memory. - * - July 3rd->11th 2003: first version (memory leaks hunt and correction). - */ - - -static void cloog_statement_leak_up(CloogState *state) -{ - state->statement_allocated++; - if ((state->statement_allocated - state->statement_freed) > state->statement_max) - state->statement_max = state->statement_allocated - state->statement_freed ; -} - - -static void cloog_statement_leak_down(CloogState *state) -{ - state->statement_freed++; -} - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ - - -/** - * cloog_domain_print_structure : - * this function is a human-friendly way to display the CloogDomain data - * structure, it includes an indentation level (level) in order to work with - * others print_structure functions. - * - June 16th 2005: first version. - */ -void cloog_statement_print_structure(file, statement, level) -FILE * file ; -CloogStatement * statement ; -int level ; -{ int i ; - - if (statement != NULL) - { /* Go to the right level. */ - for (i=0; inumber) ; - - statement = statement->next ; - - while (statement != NULL) - { for (i=0; inumber) ; - statement = statement->next ; - } - } - else - { for (i=0; istate); - - next = statement->next ; - /* free(statement->usr) ; Actually, this is user's job ! */ - free(statement->name); - free(statement) ; - statement = next ; - } -} - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - - -/** - * cloog_statement_malloc function: - * This function allocates the memory space for a CloogStatement structure and - * sets its fields with default values. Then it returns a pointer to the - * allocated space. - * - November 21th 2005: first version. - */ -CloogStatement *cloog_statement_malloc(CloogState *state) -{ CloogStatement * statement ; - - /* Memory allocation for the CloogStatement structure. */ - statement = (CloogStatement *)malloc(sizeof(CloogStatement)) ; - if (statement == NULL) - cloog_die("memory overflow.\n"); - cloog_statement_leak_up(state); - - /* We set the various fields with default values. */ - statement->state = state; - statement->number = 0; - statement->name = NULL; - statement->usr = NULL ; /* To fill it is actually user's job ! */ - statement->next = NULL ; - - return statement ; -} - - -/** - * cloog_statement_alloc function: - * This function allocates the memory space for a CloogStatement structure and - * sets its fields with those given as input. Then it returns a pointer to the - * allocated space. - * - number is the statement number. - ** - * - September 9th 2002: first version. - * - March 17th 2003: fix for the usr field in CloogStatement structure. - * - April 16th 2005: adaptation to new CloogStatement structure (with - * number), cloog_statement_read becomes - * cloog_statement_alloc sincethere is nothing more to - * read on a file. - * - November 21th 2005: use of cloog_statement_malloc. - */ -CloogStatement *cloog_statement_alloc(CloogState *state, int number) -{ CloogStatement * statement ; - - /* Memory allocation and initialization of the structure. */ - statement = cloog_statement_malloc(state); - - statement->number = number ; - - return statement ; -} - - -/** - * cloog_statement_copy function: - * This function returns a copy of the CloogStatement structure given as input. - * - October 28th 2001: first version (in loop.c). - * - March 17th 2003: fix for the usr field in CloogStatement structure. - * - April 16th 2005: adaptation to new CloogStatement struct (with number). - */ -CloogStatement * cloog_statement_copy(CloogStatement * source) -{ CloogStatement * statement, * temp, * now = NULL ; - - statement = NULL ; - - while (source != NULL) { - cloog_statement_leak_up(source->state); - - temp = (CloogStatement *)malloc(sizeof(CloogStatement)) ; - if (temp == NULL) - cloog_die("memory overflow.\n"); - - temp->state = source->state; - temp->number = source->number ; - temp->name = source->name ? strdup(source->name) : NULL; - temp->usr = source->usr ; - temp->next = NULL ; - - if (statement == NULL) - { statement = temp ; - now = statement ; - } - else - { now->next = temp ; - now = now->next ; - } - source = source->next ; - } - return(statement) ; -} - - -/** - * cloog_statement_add function: - * This function adds a CloogStatement structure (statement) at a given place - * (now) of a NULL terminated list of CloogStatement structures. The beginning - * of this list is (start). This function updates (now) to (loop), and - * updates (start) if the added element is the first one -that is when (start) - * is NULL-. - * - March 27th 2004: first version. - */ -void cloog_statement_add(start, now, statement) -CloogStatement ** start, ** now, * statement ; -{ if (*start == NULL) - { *start = statement ; - *now = *start ; - } - else - { (*now)->next = statement ; - *now = (*now)->next ; - } -} - diff --git a/cloog-0.16.3/source/stride.c b/cloog-0.16.3/source/stride.c deleted file mode 100644 index d7358a0..0000000 --- a/cloog-0.16.3/source/stride.c +++ /dev/null @@ -1,70 +0,0 @@ -#include -#include - -#define ALLOC(type) (type*)malloc(sizeof(type)) - -CloogStride *cloog_stride_malloc() -{ - CloogStride *s; - - s = ALLOC(CloogStride); - if (!s) - cloog_die("memory overflow.\n"); - - s->references = 1; - cloog_int_init(s->stride); - cloog_int_init(s->offset); - cloog_int_init(s->factor); - s->constraint = cloog_constraint_invalid(); - - return s; -} - -CloogStride *cloog_stride_alloc(cloog_int_t stride, cloog_int_t offset) -{ - CloogStride *s = cloog_stride_malloc(); - - cloog_int_set(s->stride, stride); - cloog_int_set(s->offset, offset); - cloog_int_set_si(s->factor, 0); - - return s; -} - -CloogStride *cloog_stride_alloc_from_constraint(cloog_int_t stride, - CloogConstraint *constraint, cloog_int_t factor) -{ - CloogStride *s = cloog_stride_malloc(); - - cloog_int_set(s->stride, stride); - cloog_int_set(s->factor, factor); - cloog_int_set_si(s->offset, -1); - s->constraint = constraint; - - return s; -} - -CloogStride *cloog_stride_copy(CloogStride *stride) -{ - if (!stride) - return stride; - - stride->references++; - return stride; -} - -void cloog_stride_free(CloogStride *stride) -{ - if (!stride) - return; - - stride->references--; - if (stride->references > 0) - return; - - cloog_int_clear(stride->stride); - cloog_int_clear(stride->offset); - cloog_int_clear(stride->factor); - cloog_constraint_release(stride->constraint); - free(stride); -} diff --git a/cloog-0.16.3/source/union_domain.c b/cloog-0.16.3/source/union_domain.c deleted file mode 100644 index 32b0087..0000000 --- a/cloog-0.16.3/source/union_domain.c +++ /dev/null @@ -1,298 +0,0 @@ -#include -#include -#include -#include "../include/cloog/cloog.h" - -#define ALLOC(type) (type*)malloc(sizeof(type)) -#define ALLOCN(type,n) (type*)malloc((n)*sizeof(type)) - -void cloog_named_domain_list_free(CloogNamedDomainList *list) -{ - while (list != NULL) { - CloogNamedDomainList *temp = list->next; - cloog_domain_free(list->domain); - cloog_scattering_free(list->scattering); - free(list->name); - free(list); - list = temp; - } -} - -CloogUnionDomain *cloog_union_domain_alloc(int nb_par) -{ - CloogUnionDomain *ud; - - ud = ALLOC(CloogUnionDomain); - if (!ud) - cloog_die("memory overflow.\n"); - - ud->domain = NULL; - ud->next_domain = &ud->domain; - - ud->n_name[CLOOG_PARAM] = nb_par; - ud->n_name[CLOOG_ITER] = 0; - ud->n_name[CLOOG_SCAT] = 0; - - ud->name[CLOOG_PARAM] = NULL; - ud->name[CLOOG_ITER] = NULL; - ud->name[CLOOG_SCAT] = NULL; - - return ud; -} - -void cloog_union_domain_free(CloogUnionDomain *ud) -{ - int i; - int j; - - if (!ud) - return; - - for (i = 0; i < 3; ++i) { - if (!ud->name[i]) - continue; - for (j = 0; j < ud->n_name[i]; ++i) - free(ud->name[i][j]); - free(ud->name[i]); - } - - cloog_named_domain_list_free(ud->domain); - - free(ud); -} - -/** - * Add a domain with scattering function to the union of domains. - * name may be NULL and is duplicated if it is not. - * domain and scattering are taken over by the CloogUnionDomain. - * scattering may be NULL. - */ -CloogUnionDomain *cloog_union_domain_add_domain(CloogUnionDomain *ud, - const char *name, CloogDomain *domain, CloogScattering *scattering, - void *usr) -{ - CloogNamedDomainList *named; - int n; - - if (!ud) - return NULL; - - named = ALLOC(CloogNamedDomainList); - if (!named) - cloog_die("memory overflow.\n"); - - if (ud->name[CLOOG_ITER]) - cloog_die("iterator names must be set after adding domains.\n"); - if (ud->name[CLOOG_SCAT]) - cloog_die("scattering names must be set after adding domains.\n"); - - n = cloog_domain_dimension(domain); - if (n > ud->n_name[CLOOG_ITER]) - ud->n_name[CLOOG_ITER] = n; - - if (scattering) { - n = cloog_scattering_dimension(scattering, domain); - if (n > ud->n_name[CLOOG_SCAT]) - ud->n_name[CLOOG_SCAT] = n; - } - - named->domain = domain; - named->scattering = scattering; - named->name = name ? strdup(name) : NULL; - named->usr = usr; - named->next = NULL; - - *ud->next_domain = named; - ud->next_domain = &named->next; - - return ud; -} - -/** - * Set the name of parameter, iterator or scattering dimension - * at the specified position. The name is duplicated. - */ -CloogUnionDomain *cloog_union_domain_set_name(CloogUnionDomain *ud, - enum cloog_dim_type type, int index, const char *name) -{ - int i; - - if (!ud) - return ud; - - if (type != CLOOG_PARAM && - type != CLOOG_ITER && - type != CLOOG_SCAT) - cloog_die("invalid dim type\n"); - - if (index < 0 || index >= ud->n_name[type]) - cloog_die("index out of range\n"); - - if (!ud->name[type]) { - ud->name[type] = ALLOCN(char *, ud->n_name[type]); - if (!ud->name[type]) - cloog_die("memory overflow.\n"); - for (i = 0; i < ud->n_name[type]; ++i) - ud->name[type][i] = NULL; - } - - free(ud->name[type][index]); - ud->name[type][index] = strdup(name); - if (!ud->name[type][index]) - cloog_die("memory overflow.\n"); - - return ud; -} - -static char *next_line(FILE *input, char *line, unsigned len) -{ - char *p; - - do { - if (!(p = fgets(line, len, input))) - return NULL; - while (isspace(*p) && *p != '\n') - ++p; - } while (*p == '#' || *p == '\n'); - - return p; -} - -/** - * cloog_scattering_list_read - * Read in a list of scattering functions for the nb_statements - * domains in loop. - */ -static CloogScatteringList *cloog_scattering_list_read(FILE * foo, - CloogDomain **domain, int nb_statements, int nb_parameters) -{ - int nb_scat = 0; - char s[MAX_STRING]; - CloogScatteringList *list = NULL, **next = &list; - - /* We read first the number of scattering functions in the list. */ - do { - if (!fgets(s, MAX_STRING, foo)) - break; - } while ((*s=='#' || *s=='\n') || (sscanf(s, " %d", &nb_scat) < 1)); - - if (nb_scat == 0) - return NULL; - - if (nb_scat != nb_statements) - cloog_die("wrong number of scattering functions.\n"); - - while (nb_scat--) { - *next = (CloogScatteringList *)malloc(sizeof(CloogScatteringList)); - (*next)->scatt = cloog_domain_read_scattering(*domain, foo); - (*next)->next = NULL; - - next = &(*next)->next; - domain++; - } - return list; -} - -static CloogUnionDomain *set_names_from_list(CloogUnionDomain *ud, - enum cloog_dim_type type, int n, char **names) -{ - int i; - - if (!names) - return ud; - - for (i = 0; i < n; ++i) { - ud = cloog_union_domain_set_name(ud, type, i, names[i]); - free(names[i]); - } - free(names); - - return ud; -} - -/** - * Fill up a CloogUnionDomain from information in a CLooG input file. - * The language and the context are assumed to have been read from - * the input file already. - */ -CloogUnionDomain *cloog_union_domain_read(FILE *file, int nb_par, - CloogOptions *options) -{ - int op1, op2, op3; - char line[MAX_STRING]; - CloogDomain **domain; - CloogUnionDomain *ud; - CloogScatteringList *scatteringl; - int i; - int n_iter = -1; - int n_dom; - char **names; - - ud = cloog_union_domain_alloc(nb_par); - - names = cloog_names_read_strings(file, nb_par); - ud = set_names_from_list(ud, CLOOG_PARAM, nb_par, names); - - /* We read the number of statements. */ - if (!next_line(file, line, sizeof(line))) - cloog_die("Input error.\n"); - if (sscanf(line, "%d", &n_dom) != 1) - cloog_die("Input error.\n"); - - domain = ALLOCN(CloogDomain *, n_dom); - if (!domain) - cloog_die("memory overflow.\n"); - - for (i = 0; i < n_dom; ++i) { - int dim; - - domain[i] = cloog_domain_union_read(options->state, file, - nb_par); - dim = cloog_domain_dimension(domain[i]); - if (dim > n_iter) - n_iter = dim; - - /* To read that stupid "0 0 0" line. */ - if (!next_line(file, line, sizeof(line))) - cloog_die("Input error.\n"); - if (sscanf(line, " %d %d %d", &op1, &op2, &op3) != 3) - cloog_die("Input error.\n"); - } - - /* Reading of the iterator names. */ - names = cloog_names_read_strings(file, n_iter); - - /* Reading and putting the scattering data in program structure. */ - scatteringl = cloog_scattering_list_read(file, domain, n_dom, nb_par); - - if (scatteringl) { - CloogScatteringList *is, *next; - - if (cloog_scattering_list_lazy_same(scatteringl)) - cloog_msg(options, CLOOG_WARNING, - "some scattering functions are similar.\n"); - - for (i = 0, is = scatteringl; i < n_dom; ++i, is = next) { - next = is->next; - ud = cloog_union_domain_add_domain(ud, NULL, domain[i], - is->scatt, NULL); - free(is); - } - } else { - for (i = 0; i < n_dom; ++i) - ud = cloog_union_domain_add_domain(ud, NULL, domain[i], - NULL, NULL); - } - - ud = set_names_from_list(ud, CLOOG_ITER, n_iter, names); - - if (scatteringl) { - int n_scat = ud->n_name[CLOOG_SCAT]; - names = cloog_names_read_strings(file, n_scat); - ud = set_names_from_list(ud, CLOOG_SCAT, n_scat, names); - } - - free(domain); - - return ud; -} diff --git a/cloog-0.16.3/source/version.c b/cloog-0.16.3/source/version.c deleted file mode 100644 index f1b86e2..0000000 --- a/cloog-0.16.3/source/version.c +++ /dev/null @@ -1,24 +0,0 @@ -#include "version.h" -#include "cloog/version.h" - -#define CLOOG_BITS "gmp" - -const char *cloog_version(void) -{ - return "CLooG "CLOOG_HEAD" "CLOOG_BITS" bits"; -} - -int cloog_version_major(void) -{ - return CLOOG_VERSION_MAJOR; -} - -int cloog_version_minor(void) -{ - return CLOOG_VERSION_MINOR; -} - -int cloog_version_revision(void) -{ - return CLOOG_VERSION_REVISION; -} diff --git a/cloog-0.16.3/source/version.c.in b/cloog-0.16.3/source/version.c.in deleted file mode 100644 index f5d026e..0000000 --- a/cloog-0.16.3/source/version.c.in +++ /dev/null @@ -1,24 +0,0 @@ -#include "version.h" -#include "cloog/version.h" - -#define CLOOG_BITS "@BITS@" - -const char *cloog_version(void) -{ - return "CLooG "CLOOG_HEAD" "CLOOG_BITS" bits"; -} - -int cloog_version_major(void) -{ - return CLOOG_VERSION_MAJOR; -} - -int cloog_version_minor(void) -{ - return CLOOG_VERSION_MINOR; -} - -int cloog_version_revision(void) -{ - return CLOOG_VERSION_REVISION; -} diff --git a/cloog-0.16.3/test/0D-1.c b/cloog-0.16.3/test/0D-1.c deleted file mode 100644 index 7f24623..0000000 --- a/cloog-0.16.3/test/0D-1.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/0D-1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -S1() ; diff --git a/cloog-0.16.3/test/0D-1.cloog b/cloog-0.16.3/test/0D-1.cloog deleted file mode 100644 index 226e7cb..0000000 --- a/cloog-0.16.3/test/0D-1.cloog +++ /dev/null @@ -1,13 +0,0 @@ -c - -0 2 -0 - -1 - -1 -0 2 -0 0 0 -0 - -0 diff --git a/cloog-0.16.3/test/0D-1.good.c b/cloog-0.16.3/test/0D-1.good.c deleted file mode 100644 index 0a37a56..0000000 --- a/cloog-0.16.3/test/0D-1.good.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Generated from ../../../git/cloog/test/0D-1.cloog by CLooG 0.14.0-117-g5444fca gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } - -void test() -{ - S1() ; -} diff --git a/cloog-0.16.3/test/0D-2.c b/cloog-0.16.3/test/0D-2.c deleted file mode 100644 index 4aa9c17..0000000 --- a/cloog-0.16.3/test/0D-2.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Generated from ../../../git/cloog/test/0D-2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -if (M >= 0) { - S1() ; -} diff --git a/cloog-0.16.3/test/0D-2.cloog b/cloog-0.16.3/test/0D-2.cloog deleted file mode 100644 index 69f2015..0000000 --- a/cloog-0.16.3/test/0D-2.cloog +++ /dev/null @@ -1,14 +0,0 @@ -c - -0 3 -0 - -1 - -1 -1 3 -1 1 0 -0 0 0 -0 - -0 diff --git a/cloog-0.16.3/test/0D-2.good.c b/cloog-0.16.3/test/0D-2.good.c deleted file mode 100644 index 65a12c6..0000000 --- a/cloog-0.16.3/test/0D-2.good.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/0D-2.cloog by CLooG 0.14.0-117-g5444fca gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } - -void test(int M) -{ - if (M >= 0) { - S1() ; - } -} diff --git a/cloog-0.16.3/test/0D-3.c b/cloog-0.16.3/test/0D-3.c deleted file mode 100644 index 62b4269..0000000 --- a/cloog-0.16.3/test/0D-3.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/0D-3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -S1() ; diff --git a/cloog-0.16.3/test/0D-3.cloog b/cloog-0.16.3/test/0D-3.cloog deleted file mode 100644 index ab4d59c..0000000 --- a/cloog-0.16.3/test/0D-3.cloog +++ /dev/null @@ -1,15 +0,0 @@ -c - -1 3 -1 1 0 -0 - -1 - -1 -1 3 -1 1 0 -0 0 0 -0 - -0 diff --git a/cloog-0.16.3/test/0D-3.good.c b/cloog-0.16.3/test/0D-3.good.c deleted file mode 100644 index 10150eb..0000000 --- a/cloog-0.16.3/test/0D-3.good.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Generated from ../../../git/cloog/test/0D-3.cloog by CLooG 0.14.0-117-g5444fca gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } - -void test(int M) -{ - S1() ; -} diff --git a/cloog-0.16.3/test/1point-1.c b/cloog-0.16.3/test/1point-1.c deleted file mode 100644 index 7c0106b..0000000 --- a/cloog-0.16.3/test/1point-1.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/1point-1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -S1(2*M,M) ; diff --git a/cloog-0.16.3/test/1point-1.cloog b/cloog-0.16.3/test/1point-1.cloog deleted file mode 100644 index 318d89b..0000000 --- a/cloog-0.16.3/test/1point-1.cloog +++ /dev/null @@ -1,23 +0,0 @@ -# language: C -c - -# Context -#{M | } -1 3 -# M 1 -1 0 1 -0 - -1 # Number of statements - -1 -#{i, j | i=2N; i=2j} -3 5 -# i j M 1 -0 1 0 -2 0 -0 1 -2 0 0 -1 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/1point-1.good.c b/cloog-0.16.3/test/1point-1.good.c deleted file mode 100644 index 196f8a9..0000000 --- a/cloog-0.16.3/test/1point-1.good.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Generated from ../../../git/cloog/test/1point-1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - i = 2*M ; - S1(2*M,M) ; -} diff --git a/cloog-0.16.3/test/1point-2.c b/cloog-0.16.3/test/1point-2.c deleted file mode 100644 index 48f6ad4..0000000 --- a/cloog-0.16.3/test/1point-2.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/1point-2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -S1(2*M,N+2) ; diff --git a/cloog-0.16.3/test/1point-2.cloog b/cloog-0.16.3/test/1point-2.cloog deleted file mode 100644 index 66eec58..0000000 --- a/cloog-0.16.3/test/1point-2.cloog +++ /dev/null @@ -1,23 +0,0 @@ -# language: C -c - -# Context -#{M,N | } -1 4 -# M N 1 -1 0 0 1 -0 - -1 # Number of statements - -1 -# -3 6 -# i j M N 1 -0 1 0 -2 0 0 -0 2 -2 -4 2 4 -1 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/1point-2.good.c b/cloog-0.16.3/test/1point-2.good.c deleted file mode 100644 index 9880504..0000000 --- a/cloog-0.16.3/test/1point-2.good.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated from ../../../git/cloog/test/1point-2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - i = 2*M ; - j = N+2 ; - S1(2*M,N+2) ; -} diff --git a/cloog-0.16.3/test/4-param.c b/cloog-0.16.3/test/4-param.c deleted file mode 100644 index b542796..0000000 --- a/cloog-0.16.3/test/4-param.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/4-param.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.18s. */ -for (i=m;i<=min(n,p-1);i++) { - S1(i) ; -} -for (i=p;i<=min(q,m-1);i++) { - S2(i) ; -} -for (i=max(m,p);i<=min(n,q);i++) { - S1(i) ; - S2(i) ; -} -for (i=max(max(m,p),q+1);i<=n;i++) { - S1(i) ; -} -for (i=max(max(m,p),n+1);i<=q;i++) { - S2(i) ; -} diff --git a/cloog-0.16.3/test/4-param.cloog b/cloog-0.16.3/test/4-param.cloog deleted file mode 100644 index a19ba08..0000000 --- a/cloog-0.16.3/test/4-param.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# language: C -c - -# Context -# parameters m n p q -1 6 -# m n p q 1 -1 0 0 0 0 1 -1 -m n p q - -2 # Number of statements - -1 -# S1 i,... -3 7 -# i m n p q 1 -1 1 -1 0 0 0 0 -1 -1 0 1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 -# -3 7 -# i m n p q 1 -1 1 0 0 -1 0 0 -1 -1 0 0 0 1 0 -1 0 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/4-param.good.c b/cloog-0.16.3/test/4-param.good.c deleted file mode 100644 index 563b90b..0000000 --- a/cloog-0.16.3/test/4-param.good.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Generated from ../../../git/cloog/test/4-param.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } - -void test(int m, int n, int p, int q) -{ - /* Original iterators. */ - int i; - for (i=m;i<=min(min(n,p-1),q);i++) { - S1(i) ; - } - for (i=p;i<=min(min(q,m-1),n);i++) { - S2(i) ; - } - for (i=max(m,p);i<=min(n,q);i++) { - S1(i) ; - S2(i) ; - } - for (i=max(m,q+1);i<=n;i++) { - S1(i) ; - } - for (i=max(p,n+1);i<=q;i++) { - S2(i) ; - } -} diff --git a/cloog-0.16.3/test/Makefile.am b/cloog-0.16.3/test/Makefile.am deleted file mode 100644 index be6995d..0000000 --- a/cloog-0.16.3/test/Makefile.am +++ /dev/null @@ -1,424 +0,0 @@ -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** makefile ** -# **-------------------------------------------------------------------** -# ** First version: march 6th 2003 ** -# **-------------------------------------------------------------------**/ -# -# makefile for checking. - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2003 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * This file has been written with the help of the Bart Kienhuis's checking * -# * makefile for PipLib. * -# * * -# *****************************************************************************/ - -if NO_ISL -GENERATE_TEST = -else -GENERATE_TEST = generate_test -endif -noinst_PROGRAMS = $(GENERATE_TEST) -INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -LDADD = ../libcloog-isl.la -generate_test_SOURCES = generate_test.c - -FORCE: -../libcloog-isl.la: FORCE - cd ..; $(MAKE) $(AM_MAKEFLAGS) libcloog-isl.la - -ROOT = .. - -FINITE_CLOOGTEST_C = \ - 0D-1 \ - 0D-2 \ - 0D-3 \ - 1point-1 \ - 1point-2 \ - 4-param \ - basic-bounds-1 \ - basic-bounds-2 \ - basic-bounds-3 \ - basic-bounds-4 \ - basic-bounds-5 \ - basic-bounds-6 \ - block \ - block2 \ - block3 \ - byu98-1-2-3 \ - cholesky \ - cholesky2 \ - christian \ - classen \ - classen2 \ - constant \ - constbound \ - darte \ - dealII \ - donotsimp \ - dot \ - dot2 \ - double \ - durbin_e_s \ - emploi \ - esced \ - ex1 \ - forwardsub-1-1-2 \ - forwardsub-2-1-2-3 \ - forwardsub-3-1-2 \ - gauss \ - gesced \ - gesced2 \ - gesced3 \ - guide \ - iftest \ - iftest2 \ - largeur \ - levenshtein-1-2-3 \ - lex \ - lineality-1-2 \ - lineality-2-1-2 \ - logo \ - logopar \ - lu \ - lu2 \ - lub \ - lux \ - min-1-1 \ - min-2-1 \ - min-3-1 \ - min-4-1 \ - mode \ - multi-mm-1 \ - no_lindep \ - orc \ - rectangle \ - singleton \ - square+triangle-1-1-2-3 \ - swim \ - test \ - thomasset \ - tiling \ - uday_scalars \ - union \ - vivien \ - vivien2 \ - walters \ - walters2 \ - walters3 \ - wavefront \ - yosr \ - yosr2 \ - ./non_optimal/nul_complex1 \ - ./non_optimal/usvd_e_t \ - ./non_optimal/youcef \ - ./reservoir/cholesky2 \ - ./reservoir/fusion1 \ - ./reservoir/fusion2 \ - ./reservoir/jacobi2 \ - ./reservoir/jacobi3 \ - ./reservoir/lim-lam1 \ - ./reservoir/lim-lam2 \ - ./reservoir/lim-lam3 \ - ./reservoir/lim-lam4 \ - ./reservoir/lim-lam5 \ - ./reservoir/lim-lam6 \ - ./reservoir/liu-zhuge1 \ - ./reservoir/loechner3 \ - ./reservoir/loechner4 \ - ./reservoir/loechner5 \ - ./reservoir/mg-interp2 \ - ./reservoir/mg-interp \ - ./reservoir/mg-psinv \ - ./reservoir/mg-resid \ - ./reservoir/mg-rprj3 \ - ./reservoir/pingali1 \ - ./reservoir/pingali2 \ - ./reservoir/pingali3 \ - ./reservoir/pingali4 \ - ./reservoir/pingali5 \ - ./reservoir/pingali6 \ - ./reservoir/QR \ - ./reservoir/tang-xue1 \ - ./reservoir/two - -CLOOG_ISL_TEST_C = \ - isl/mod \ - isl/mod2 \ - isl/mod3 \ - isl/mod4 - -CLOOGTEST_C = \ - infinite \ - infinite2 \ - infinite3 \ - infinite4 \ - $(FINITE_CLOOGTEST_C) \ - $(CLOOG_ISL_TEST_C) - -# ./reservoir/long \ -# faber - -CLOOGTEST_FORTRAN = \ - dartef \ - iftestf \ - levenshtein-1-2-3f \ - yosrf - -CLOOG_ISL_TEST_STRIDED = \ - isl/mxm-shared - -CLOOGTEST_STRIDED = \ - basic-bounds-2 \ - mod4 \ - nul_basic1 \ - nul_basic2 \ - nul_lcpc \ - multi-stride \ - multi-stride2 \ - stride3 \ - stride4 \ - reservoir/bastoul3 \ - reservoir/stride \ - reservoir/stride2 \ - $(CLOOG_ISL_TEST_STRIDED) - -SPECIAL_TESTS = \ - isl/jacobi-shared \ - backtrack \ - vasilache \ - merge \ - equality \ - equality2 \ - otl \ - param-split \ - pouchet \ - stride \ - stride2 \ - sor1d -SPECIAL_OPTIONS = \ - 'isl/jacobi-shared -f 4 -l -1 -override -strides 1 -sh 1' \ - 'backtrack -f 1 -backtrack' \ - 'vasilache -f 8 -l 9' \ - 'merge -f -1' \ - 'equality -f -1 -l 2 -override' \ - 'equality2 -f -1 -l 4 -esp 1 -override' \ - 'otl -block 1 -esp 0 -otl 0' \ - 'param-split -f -1' \ - 'pouchet -f 3 -l 7' \ - 'stride -f -1 -strides 1' \ - 'stride2 -f -1 -strides 1' \ - 'sor1d -f -1' - -EXTRA_DIST = \ - $(CLOOGTEST_C:%=%.cloog) \ - $(CLOOGTEST_C:%=%.c) \ - $(FINITE_CLOOGTEST_C:%=%.good.c) \ - $(CLOOGTEST_FORTRAN:%=%.cloog) \ - $(CLOOGTEST_FORTRAN:%=%.f) \ - $(CLOOGTEST_STRIDED:%=%.cloog) \ - $(CLOOGTEST_STRIDED:%=%.c) \ - $(SPECIAL_TESTS:%=%.cloog) \ - $(SPECIAL_TESTS:%=%.c) \ - $(SPECIAL_TESTS:%=%.good.c) - -generate: - @echo " /*-----------------------------------------------*" - @echo " * Generate files *" - @echo " *-----------------------------------------------*/" - @for x in $(CLOOGTEST_C) ; do \ - echo "Generate $$x.c" ; \ - $(top_builddir)/cloog $(srcdir)/$$x.cloog -o $(srcdir)/$$x.c ; \ - done ; \ - for x in $(CLOOGTEST_FORTRAN) ; do \ - echo "Generate $$x.f" ; \ - $(top_builddir)/cloog $(srcdir)/$$x.cloog -o $(srcdir)/$$x.f ; \ - done ; \ - for x in $(CLOOGTEST_STRIDED) ; do \ - echo "Generate $$x.c" ; \ - $(top_builddir)/cloog $(srcdir)/$$x.cloog \ - -strides 1 -o $(srcdir)/$$x.c ; \ - done ; \ - for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \ - echo "Generate file $$x ($$options)" ; \ - $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog \ - $$options > $(srcdir)/$$x.c ; \ - done; done - -generate_good: - @for x in $(FINITE_CLOOGTEST_C) ; do \ - echo "Generate $$x.good.c" ; \ - $(top_builddir)/cloog$(EXEEXT) -callable 1 $(srcdir)/$$x.cloog -o $(srcdir)/$$x.good.c ; \ - done; \ - for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \ - echo "Generate $$x.good.c ($$options)" ; \ - $(top_builddir)/cloog$(EXEEXT) -callable 1 $$options $(srcdir)/$$x.cloog -o $(srcdir)/$$x.good.c ; \ - done; done - -valgrind: - @echo " /*-----------------------------------------------*" - @echo " * Checking files by Valgrind *" - @echo " *-----------------------------------------------*/" - for x in $(CLOOGTEST_C) ; do \ - echo "Valgrinding $$x.c" ; \ - valgrind $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog ; \ - done ; \ - for x in $(CLOOGTEST_FORTRAN) ; do \ - echo "Valgrinding $$x.f" ; \ - valgrind $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog ; \ - done - -test_run: generate_test$(EXEEXT) - @echo " /*-----------------------------------------------*" - @echo " * Testing CLooG *" - @echo " *-----------------------------------------------*/" - @failedtest=0 ; \ - echo "--- Testing C files... (correct output)" ; \ - for x in $(FINITE_CLOOGTEST_C) ; do \ - echo -n "Verify file $$x... " ; \ - echo -n "generating... " ; \ - $(top_builddir)/cloog$(EXEEXT) -q -callable 1 $(srcdir)/$$x.cloog > test_test.c ; \ - ./generate_test$(EXEEXT) < $(srcdir)/$$x.cloog > test_main.c; \ - echo -n "compiling... " ; \ - $(COMPILE) -c test_test.c; \ - $(COMPILE) -Dtest=good -c $(srcdir)/$$x.good.c -o test_good.o; \ - $(LINK) test_main.c test_test.o test_good.o > /dev/null; \ - echo -n "comparing... " ; \ - ./test_run$(EXEEXT); \ - result=$$?; \ - if test "$$result" -ne "0" ; then \ - failedtest=`expr $$failedtest + 1` ; \ - fi; \ - $(RM) $@; \ - echo; \ - done; \ - for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \ - echo -n "Verify file $$x ($$options)... " ; \ - echo -n "generating... " ; \ - $(top_builddir)/cloog$(EXEEXT) -q -callable 1 $$options $(srcdir)/$$x.cloog > test_test.c ; \ - ./generate_test$(EXEEXT) < $(srcdir)/$$x.cloog > test_main.c; \ - echo -n "compiling... " ; \ - $(COMPILE) -c test_test.c; \ - $(COMPILE) -Dtest=good -c $(srcdir)/$$x.good.c -o test_good.o; \ - $(LINK) test_main.c test_test.o test_good.o > /dev/null; \ - echo -n "comparing... " ; \ - ./test_run$(EXEEXT); \ - result=$$?; \ - if test "$$result" -ne "0" ; then \ - failedtest=`expr $$failedtest + 1` ; \ - fi; \ - $(RM) $@; \ - echo; \ - done; done; \ - for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \ - echo -n "Verify file $$x ($$options -sh 1)... " ; \ - echo -n "generating... " ; \ - $(top_builddir)/cloog$(EXEEXT) -q -callable 1 $$options -sh 1 $(srcdir)/$$x.cloog > test_test.c ; \ - ./generate_test$(EXEEXT) < $(srcdir)/$$x.cloog > test_main.c; \ - echo -n "compiling... " ; \ - $(COMPILE) -c test_test.c; \ - $(COMPILE) -Dtest=good -c $(srcdir)/$$x.good.c -o test_good.o; \ - $(LINK) test_main.c test_test.o test_good.o > /dev/null; \ - echo -n "comparing... " ; \ - ./test_run$(EXEEXT); \ - result=$$?; \ - if test "$$result" -ne "0" ; then \ - failedtest=`expr $$failedtest + 1` ; \ - fi; \ - $(RM) $@; \ - echo; \ - done; done; \ - if [ $$failedtest != 0 ] ; then \ - echo "$$failedtest tests failed" ; \ - else \ - echo "CLooG works correctly :-) !" ; \ - fi -test: - @echo " /*-----------------------------------------------*" - @echo " * Testing CLooG *" - @echo " *-----------------------------------------------*/" - @failedtest=0 ; \ - echo "--- Testing C files... (expected output)" ; \ - for x in $(CLOOGTEST_C) ; do \ - echo "Verify file $$x" ; \ - $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog > ttemp ; \ - diff -u -w --ignore-matching-lines='CLooG' ttemp $(srcdir)/$$x.c ; \ - result=$$?; \ - if [ "$$result" -ne "0" ] ; then \ - echo "!!! Error: $$x is not the same" ; \ - failedtest=`expr $$failedtest + 1` ; \ - else \ - echo "$$x passed" ; \ - fi ; \ - done ; \ - echo "--- Testing FORTRAN files..." ; \ - for x in $(CLOOGTEST_FORTRAN) ; do \ - echo "Verify file $$x" ; \ - $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog > ttemp ; \ - diff -u -w --ignore-matching-lines='CLooG' ttemp $(srcdir)/$$x.f ; \ - result=$$?; \ - if [ "$$result" -ne "0" ] ; then \ - echo "!!! Error: $$x is not the same" ; \ - failedtest=`expr $$failedtest + 1` ; \ - else \ - echo "$$x passed" ; \ - fi ; \ - done ; \ - echo "--- Testing STRIDED files..." ; \ - for x in $(CLOOGTEST_STRIDED) ; do \ - echo "Verify file $$x" ; \ - $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog \ - -strides 1 > ttemp ; \ - diff -u -w --ignore-matching-lines='CLooG' ttemp $(srcdir)/$$x.c ; \ - result=$$?; \ - if [ "$$result" -ne "0" ] ; then \ - echo "!!! Error: $$x is not the same" ; \ - failedtest=`expr $$failedtest + 1` ; \ - else \ - echo "$$x passed" ; \ - fi ; \ - done ; \ - echo "--- Testing SPECIAL OPTIONS files..." ; \ - for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \ - echo "Verify file $$x ($$options)" ; \ - $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog \ - $$options > ttemp ; \ - diff -u -w --ignore-matching-lines='CLooG' ttemp $(srcdir)/$$x.c ; \ - result=$$?; \ - if [ "$$result" -ne "0" ] ; then \ - echo "!!! Error: $$x is not the same" ; \ - failedtest=`expr $$failedtest + 1` ; \ - else \ - echo "$$x passed" ; \ - fi ; \ - done; done; \ - rm ttemp ; \ - if [ $$failedtest != 0 ] ; then \ - echo "$$failedtest tests failed" ; \ - else \ - echo "CLooG works correctly :-) !" ; \ - fi diff --git a/cloog-0.16.3/test/Makefile.in b/cloog-0.16.3/test/Makefile.in deleted file mode 100644 index e0ec242..0000000 --- a/cloog-0.16.3/test/Makefile.in +++ /dev/null @@ -1,929 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** makefile ** -# **-------------------------------------------------------------------** -# ** First version: march 6th 2003 ** -# **-------------------------------------------------------------------**/ -# -# makefile for checking. - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2003 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * This file has been written with the help of the Bart Kienhuis's checking * -# * makefile for PipLib. * -# * * -# *****************************************************************************/ - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -noinst_PROGRAMS = $(am__EXEEXT_1) -subdir = test -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/ax_submodule.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -@NO_ISL_FALSE@am__EXEEXT_1 = generate_test$(EXEEXT) -PROGRAMS = $(noinst_PROGRAMS) -am_generate_test_OBJECTS = generate_test.$(OBJEXT) -generate_test_OBJECTS = $(am_generate_test_OBJECTS) -generate_test_LDADD = $(LDADD) -generate_test_DEPENDENCIES = ../libcloog-isl.la -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -DEFAULT_INCLUDES = -I.@am__isrc@ -depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(generate_test_SOURCES) -DIST_SOURCES = $(generate_test_SOURCES) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BITS = @BITS@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CD = @CD@ -CFLAGS = @CFLAGS@ -CFLAGS_WARN = @CFLAGS_WARN@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIT_INDEX = @GIT_INDEX@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -ISL_CPPFLAGS = @ISL_CPPFLAGS@ -ISL_LDFLAGS = @ISL_LDFLAGS@ -ISL_LIBS = @ISL_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TEXI2DVI = @TEXI2DVI@ -VERSION = @VERSION@ -VERSION_MAJOR = @VERSION_MAJOR@ -VERSION_MINOR = @VERSION_MINOR@ -VERSION_REVISION = @VERSION_REVISION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfig_libdir = @pkgconfig_libdir@ -pkgconfig_libfile = @pkgconfig_libfile@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -subdirs = @subdirs@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -versioninfo = @versioninfo@ -@NO_ISL_FALSE@GENERATE_TEST = generate_test -@NO_ISL_TRUE@GENERATE_TEST = -INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -LDADD = ../libcloog-isl.la -generate_test_SOURCES = generate_test.c -ROOT = .. -FINITE_CLOOGTEST_C = \ - 0D-1 \ - 0D-2 \ - 0D-3 \ - 1point-1 \ - 1point-2 \ - 4-param \ - basic-bounds-1 \ - basic-bounds-2 \ - basic-bounds-3 \ - basic-bounds-4 \ - basic-bounds-5 \ - basic-bounds-6 \ - block \ - block2 \ - block3 \ - byu98-1-2-3 \ - cholesky \ - cholesky2 \ - christian \ - classen \ - classen2 \ - constant \ - constbound \ - darte \ - dealII \ - donotsimp \ - dot \ - dot2 \ - double \ - durbin_e_s \ - emploi \ - esced \ - ex1 \ - forwardsub-1-1-2 \ - forwardsub-2-1-2-3 \ - forwardsub-3-1-2 \ - gauss \ - gesced \ - gesced2 \ - gesced3 \ - guide \ - iftest \ - iftest2 \ - largeur \ - levenshtein-1-2-3 \ - lex \ - lineality-1-2 \ - lineality-2-1-2 \ - logo \ - logopar \ - lu \ - lu2 \ - lub \ - lux \ - min-1-1 \ - min-2-1 \ - min-3-1 \ - min-4-1 \ - mode \ - multi-mm-1 \ - no_lindep \ - orc \ - rectangle \ - singleton \ - square+triangle-1-1-2-3 \ - swim \ - test \ - thomasset \ - tiling \ - uday_scalars \ - union \ - vivien \ - vivien2 \ - walters \ - walters2 \ - walters3 \ - wavefront \ - yosr \ - yosr2 \ - ./non_optimal/nul_complex1 \ - ./non_optimal/usvd_e_t \ - ./non_optimal/youcef \ - ./reservoir/cholesky2 \ - ./reservoir/fusion1 \ - ./reservoir/fusion2 \ - ./reservoir/jacobi2 \ - ./reservoir/jacobi3 \ - ./reservoir/lim-lam1 \ - ./reservoir/lim-lam2 \ - ./reservoir/lim-lam3 \ - ./reservoir/lim-lam4 \ - ./reservoir/lim-lam5 \ - ./reservoir/lim-lam6 \ - ./reservoir/liu-zhuge1 \ - ./reservoir/loechner3 \ - ./reservoir/loechner4 \ - ./reservoir/loechner5 \ - ./reservoir/mg-interp2 \ - ./reservoir/mg-interp \ - ./reservoir/mg-psinv \ - ./reservoir/mg-resid \ - ./reservoir/mg-rprj3 \ - ./reservoir/pingali1 \ - ./reservoir/pingali2 \ - ./reservoir/pingali3 \ - ./reservoir/pingali4 \ - ./reservoir/pingali5 \ - ./reservoir/pingali6 \ - ./reservoir/QR \ - ./reservoir/tang-xue1 \ - ./reservoir/two - -CLOOG_ISL_TEST_C = \ - isl/mod \ - isl/mod2 \ - isl/mod3 \ - isl/mod4 - -CLOOGTEST_C = \ - infinite \ - infinite2 \ - infinite3 \ - infinite4 \ - $(FINITE_CLOOGTEST_C) \ - $(CLOOG_ISL_TEST_C) - - -# ./reservoir/long \ -# faber -CLOOGTEST_FORTRAN = \ - dartef \ - iftestf \ - levenshtein-1-2-3f \ - yosrf - -CLOOG_ISL_TEST_STRIDED = \ - isl/mxm-shared - -CLOOGTEST_STRIDED = \ - basic-bounds-2 \ - mod4 \ - nul_basic1 \ - nul_basic2 \ - nul_lcpc \ - multi-stride \ - multi-stride2 \ - stride3 \ - stride4 \ - reservoir/bastoul3 \ - reservoir/stride \ - reservoir/stride2 \ - $(CLOOG_ISL_TEST_STRIDED) - -SPECIAL_TESTS = \ - isl/jacobi-shared \ - backtrack \ - vasilache \ - merge \ - equality \ - equality2 \ - otl \ - param-split \ - pouchet \ - stride \ - stride2 \ - sor1d - -SPECIAL_OPTIONS = \ - 'isl/jacobi-shared -f 4 -l -1 -override -strides 1 -sh 1' \ - 'backtrack -f 1 -backtrack' \ - 'vasilache -f 8 -l 9' \ - 'merge -f -1' \ - 'equality -f -1 -l 2 -override' \ - 'equality2 -f -1 -l 4 -esp 1 -override' \ - 'otl -block 1 -esp 0 -otl 0' \ - 'param-split -f -1' \ - 'pouchet -f 3 -l 7' \ - 'stride -f -1 -strides 1' \ - 'stride2 -f -1 -strides 1' \ - 'sor1d -f -1' - -EXTRA_DIST = \ - $(CLOOGTEST_C:%=%.cloog) \ - $(CLOOGTEST_C:%=%.c) \ - $(FINITE_CLOOGTEST_C:%=%.good.c) \ - $(CLOOGTEST_FORTRAN:%=%.cloog) \ - $(CLOOGTEST_FORTRAN:%=%.f) \ - $(CLOOGTEST_STRIDED:%=%.cloog) \ - $(CLOOGTEST_STRIDED:%=%.c) \ - $(SPECIAL_TESTS:%=%.cloog) \ - $(SPECIAL_TESTS:%=%.c) \ - $(SPECIAL_TESTS:%=%.good.c) - -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign test/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list -generate_test$(EXEEXT): $(generate_test_OBJECTS) $(generate_test_DEPENDENCIES) - @rm -f generate_test$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(generate_test_OBJECTS) $(generate_test_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generate_test.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstPROGRAMS ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am - - -FORCE: -../libcloog-isl.la: FORCE - cd ..; $(MAKE) $(AM_MAKEFLAGS) libcloog-isl.la - -generate: - @echo " /*-----------------------------------------------*" - @echo " * Generate files *" - @echo " *-----------------------------------------------*/" - @for x in $(CLOOGTEST_C) ; do \ - echo "Generate $$x.c" ; \ - $(top_builddir)/cloog $(srcdir)/$$x.cloog -o $(srcdir)/$$x.c ; \ - done ; \ - for x in $(CLOOGTEST_FORTRAN) ; do \ - echo "Generate $$x.f" ; \ - $(top_builddir)/cloog $(srcdir)/$$x.cloog -o $(srcdir)/$$x.f ; \ - done ; \ - for x in $(CLOOGTEST_STRIDED) ; do \ - echo "Generate $$x.c" ; \ - $(top_builddir)/cloog $(srcdir)/$$x.cloog \ - -strides 1 -o $(srcdir)/$$x.c ; \ - done ; \ - for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \ - echo "Generate file $$x ($$options)" ; \ - $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog \ - $$options > $(srcdir)/$$x.c ; \ - done; done - -generate_good: - @for x in $(FINITE_CLOOGTEST_C) ; do \ - echo "Generate $$x.good.c" ; \ - $(top_builddir)/cloog$(EXEEXT) -callable 1 $(srcdir)/$$x.cloog -o $(srcdir)/$$x.good.c ; \ - done; \ - for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \ - echo "Generate $$x.good.c ($$options)" ; \ - $(top_builddir)/cloog$(EXEEXT) -callable 1 $$options $(srcdir)/$$x.cloog -o $(srcdir)/$$x.good.c ; \ - done; done - -valgrind: - @echo " /*-----------------------------------------------*" - @echo " * Checking files by Valgrind *" - @echo " *-----------------------------------------------*/" - for x in $(CLOOGTEST_C) ; do \ - echo "Valgrinding $$x.c" ; \ - valgrind $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog ; \ - done ; \ - for x in $(CLOOGTEST_FORTRAN) ; do \ - echo "Valgrinding $$x.f" ; \ - valgrind $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog ; \ - done - -test_run: generate_test$(EXEEXT) - @echo " /*-----------------------------------------------*" - @echo " * Testing CLooG *" - @echo " *-----------------------------------------------*/" - @failedtest=0 ; \ - echo "--- Testing C files... (correct output)" ; \ - for x in $(FINITE_CLOOGTEST_C) ; do \ - echo -n "Verify file $$x... " ; \ - echo -n "generating... " ; \ - $(top_builddir)/cloog$(EXEEXT) -q -callable 1 $(srcdir)/$$x.cloog > test_test.c ; \ - ./generate_test$(EXEEXT) < $(srcdir)/$$x.cloog > test_main.c; \ - echo -n "compiling... " ; \ - $(COMPILE) -c test_test.c; \ - $(COMPILE) -Dtest=good -c $(srcdir)/$$x.good.c -o test_good.o; \ - $(LINK) test_main.c test_test.o test_good.o > /dev/null; \ - echo -n "comparing... " ; \ - ./test_run$(EXEEXT); \ - result=$$?; \ - if test "$$result" -ne "0" ; then \ - failedtest=`expr $$failedtest + 1` ; \ - fi; \ - $(RM) $@; \ - echo; \ - done; \ - for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \ - echo -n "Verify file $$x ($$options)... " ; \ - echo -n "generating... " ; \ - $(top_builddir)/cloog$(EXEEXT) -q -callable 1 $$options $(srcdir)/$$x.cloog > test_test.c ; \ - ./generate_test$(EXEEXT) < $(srcdir)/$$x.cloog > test_main.c; \ - echo -n "compiling... " ; \ - $(COMPILE) -c test_test.c; \ - $(COMPILE) -Dtest=good -c $(srcdir)/$$x.good.c -o test_good.o; \ - $(LINK) test_main.c test_test.o test_good.o > /dev/null; \ - echo -n "comparing... " ; \ - ./test_run$(EXEEXT); \ - result=$$?; \ - if test "$$result" -ne "0" ; then \ - failedtest=`expr $$failedtest + 1` ; \ - fi; \ - $(RM) $@; \ - echo; \ - done; done; \ - for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \ - echo -n "Verify file $$x ($$options -sh 1)... " ; \ - echo -n "generating... " ; \ - $(top_builddir)/cloog$(EXEEXT) -q -callable 1 $$options -sh 1 $(srcdir)/$$x.cloog > test_test.c ; \ - ./generate_test$(EXEEXT) < $(srcdir)/$$x.cloog > test_main.c; \ - echo -n "compiling... " ; \ - $(COMPILE) -c test_test.c; \ - $(COMPILE) -Dtest=good -c $(srcdir)/$$x.good.c -o test_good.o; \ - $(LINK) test_main.c test_test.o test_good.o > /dev/null; \ - echo -n "comparing... " ; \ - ./test_run$(EXEEXT); \ - result=$$?; \ - if test "$$result" -ne "0" ; then \ - failedtest=`expr $$failedtest + 1` ; \ - fi; \ - $(RM) $@; \ - echo; \ - done; done; \ - if [ $$failedtest != 0 ] ; then \ - echo "$$failedtest tests failed" ; \ - else \ - echo "CLooG works correctly :-) !" ; \ - fi -test: - @echo " /*-----------------------------------------------*" - @echo " * Testing CLooG *" - @echo " *-----------------------------------------------*/" - @failedtest=0 ; \ - echo "--- Testing C files... (expected output)" ; \ - for x in $(CLOOGTEST_C) ; do \ - echo "Verify file $$x" ; \ - $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog > ttemp ; \ - diff -u -w --ignore-matching-lines='CLooG' ttemp $(srcdir)/$$x.c ; \ - result=$$?; \ - if [ "$$result" -ne "0" ] ; then \ - echo "!!! Error: $$x is not the same" ; \ - failedtest=`expr $$failedtest + 1` ; \ - else \ - echo "$$x passed" ; \ - fi ; \ - done ; \ - echo "--- Testing FORTRAN files..." ; \ - for x in $(CLOOGTEST_FORTRAN) ; do \ - echo "Verify file $$x" ; \ - $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog > ttemp ; \ - diff -u -w --ignore-matching-lines='CLooG' ttemp $(srcdir)/$$x.f ; \ - result=$$?; \ - if [ "$$result" -ne "0" ] ; then \ - echo "!!! Error: $$x is not the same" ; \ - failedtest=`expr $$failedtest + 1` ; \ - else \ - echo "$$x passed" ; \ - fi ; \ - done ; \ - echo "--- Testing STRIDED files..." ; \ - for x in $(CLOOGTEST_STRIDED) ; do \ - echo "Verify file $$x" ; \ - $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog \ - -strides 1 > ttemp ; \ - diff -u -w --ignore-matching-lines='CLooG' ttemp $(srcdir)/$$x.c ; \ - result=$$?; \ - if [ "$$result" -ne "0" ] ; then \ - echo "!!! Error: $$x is not the same" ; \ - failedtest=`expr $$failedtest + 1` ; \ - else \ - echo "$$x passed" ; \ - fi ; \ - done ; \ - echo "--- Testing SPECIAL OPTIONS files..." ; \ - for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \ - echo "Verify file $$x ($$options)" ; \ - $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog \ - $$options > ttemp ; \ - diff -u -w --ignore-matching-lines='CLooG' ttemp $(srcdir)/$$x.c ; \ - result=$$?; \ - if [ "$$result" -ne "0" ] ; then \ - echo "!!! Error: $$x is not the same" ; \ - failedtest=`expr $$failedtest + 1` ; \ - else \ - echo "$$x passed" ; \ - fi ; \ - done; done; \ - rm ttemp ; \ - if [ $$failedtest != 0 ] ; then \ - echo "$$failedtest tests failed" ; \ - else \ - echo "CLooG works correctly :-) !" ; \ - fi - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.16.3/test/backtrack.c b/cloog-0.16.3/test/backtrack.c deleted file mode 100644 index 9895d83..0000000 --- a/cloog-0.16.3/test/backtrack.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/backtrack.cloog by CLooG 0.14.0-367-gf043665 gmp bits in 0.00s. */ -S1(0); diff --git a/cloog-0.16.3/test/backtrack.cloog b/cloog-0.16.3/test/backtrack.cloog deleted file mode 100644 index f8d978e..0000000 --- a/cloog-0.16.3/test/backtrack.cloog +++ /dev/null @@ -1,24 +0,0 @@ -c - -0 2 - -0 - -# Number of statements -1 - -1 # of domains -1 3 -0 1 0 -0 0 0 - -0 - -# of scattering functions -1 - -2 5 -0 1 0 -1 0 -0 0 1 0 0 - -0 diff --git a/cloog-0.16.3/test/backtrack.good.c b/cloog-0.16.3/test/backtrack.good.c deleted file mode 100644 index 5cb04a3..0000000 --- a/cloog-0.16.3/test/backtrack.good.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated from ../../../git/cloog/test/backtrack.cloog by CLooG 0.14.0-367-gf043665 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test() -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i; - S1(0); -} diff --git a/cloog-0.16.3/test/basic-bounds-1.c b/cloog-0.16.3/test/basic-bounds-1.c deleted file mode 100644 index 1ddede1..0000000 --- a/cloog-0.16.3/test/basic-bounds-1.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (i=0;i<=2;i++) { - S1(i) ; -} diff --git a/cloog-0.16.3/test/basic-bounds-1.cloog b/cloog-0.16.3/test/basic-bounds-1.cloog deleted file mode 100644 index 1c3ac40..0000000 --- a/cloog-0.16.3/test/basic-bounds-1.cloog +++ /dev/null @@ -1,21 +0,0 @@ -# language: C -c - -# Context -1 2 -1 1 -0 - -1 # Number of statements - -1 -# -3 3 -# i 1 -1 1 0 -1 -1 2 -1 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/basic-bounds-1.good.c b/cloog-0.16.3/test/basic-bounds-1.good.c deleted file mode 100644 index ab53e94..0000000 --- a/cloog-0.16.3/test/basic-bounds-1.good.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test() -{ - /* Original iterators. */ - int i; - for (i=0;i<=2;i++) { - S1(i) ; - } -} diff --git a/cloog-0.16.3/test/basic-bounds-2.c b/cloog-0.16.3/test/basic-bounds-2.c deleted file mode 100644 index 38780ff..0000000 --- a/cloog-0.16.3/test/basic-bounds-2.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -S1(0) ; diff --git a/cloog-0.16.3/test/basic-bounds-2.cloog b/cloog-0.16.3/test/basic-bounds-2.cloog deleted file mode 100644 index 45a51ba..0000000 --- a/cloog-0.16.3/test/basic-bounds-2.cloog +++ /dev/null @@ -1,21 +0,0 @@ -# language: C -c - -# Context -1 2 -1 1 -0 - -1 # Number of statements - -1 -# -3 3 -# i 1 -1 3 0 -1 -3 2 -1 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/basic-bounds-2.good.c b/cloog-0.16.3/test/basic-bounds-2.good.c deleted file mode 100644 index 48544ff..0000000 --- a/cloog-0.16.3/test/basic-bounds-2.good.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test() -{ - /* Original iterators. */ - int i; - S1(0) ; -} diff --git a/cloog-0.16.3/test/basic-bounds-3.c b/cloog-0.16.3/test/basic-bounds-3.c deleted file mode 100644 index f5fdaf8..0000000 --- a/cloog-0.16.3/test/basic-bounds-3.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (i=0;i<=M;i++) { - S1(i) ; -} diff --git a/cloog-0.16.3/test/basic-bounds-3.cloog b/cloog-0.16.3/test/basic-bounds-3.cloog deleted file mode 100644 index f3ad8bc..0000000 --- a/cloog-0.16.3/test/basic-bounds-3.cloog +++ /dev/null @@ -1,23 +0,0 @@ -# language: C -c - -# Context -2 3 -# M 1 -1 1 0 -1 0 1 -0 - -1 # Number of statements - -1 -# -3 4 -# i M 1 -1 1 0 0 -1 -1 1 0 -1 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/basic-bounds-3.good.c b/cloog-0.16.3/test/basic-bounds-3.good.c deleted file mode 100644 index c5c0f7c..0000000 --- a/cloog-0.16.3/test/basic-bounds-3.good.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test(int M) -{ - /* Original iterators. */ - int i; - for (i=0;i<=M;i++) { - S1(i) ; - } -} diff --git a/cloog-0.16.3/test/basic-bounds-4.c b/cloog-0.16.3/test/basic-bounds-4.c deleted file mode 100644 index 1f15c42..0000000 --- a/cloog-0.16.3/test/basic-bounds-4.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-4.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (i=0;i<=M+1;i++) { - S1(i) ; -} diff --git a/cloog-0.16.3/test/basic-bounds-4.cloog b/cloog-0.16.3/test/basic-bounds-4.cloog deleted file mode 100644 index 5e76687..0000000 --- a/cloog-0.16.3/test/basic-bounds-4.cloog +++ /dev/null @@ -1,23 +0,0 @@ -# language: C -c - -# Context -2 3 -# M 1 -1 1 0 -1 0 1 -0 - -1 # Number of statements - -1 -# -3 4 -# i M 1 -1 1 0 0 -1 -1 1 1 -1 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/basic-bounds-4.good.c b/cloog-0.16.3/test/basic-bounds-4.good.c deleted file mode 100644 index 310c948..0000000 --- a/cloog-0.16.3/test/basic-bounds-4.good.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-4.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test(int M) -{ - /* Original iterators. */ - int i; - for (i=0;i<=M+1;i++) { - S1(i) ; - } -} diff --git a/cloog-0.16.3/test/basic-bounds-5.c b/cloog-0.16.3/test/basic-bounds-5.c deleted file mode 100644 index 1761b56..0000000 --- a/cloog-0.16.3/test/basic-bounds-5.c +++ /dev/null @@ -1,3 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-5.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -j = floord(M+1,2) ; -S1(1,j) ; diff --git a/cloog-0.16.3/test/basic-bounds-5.cloog b/cloog-0.16.3/test/basic-bounds-5.cloog deleted file mode 100644 index 855a9bb..0000000 --- a/cloog-0.16.3/test/basic-bounds-5.cloog +++ /dev/null @@ -1,22 +0,0 @@ -# language: C -c - -# Context -1 3 -# M 1 -1 0 1 -0 - -1 # Number of statements - -1 -# {i,j,N | i=1; 2j-1<=N<=2j} -3 5 -# i j M 1 -0 1 0 0 -1 -1 0 2 -1 0 -1 0 -2 1 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/basic-bounds-5.good.c b/cloog-0.16.3/test/basic-bounds-5.good.c deleted file mode 100644 index 3e669c0..0000000 --- a/cloog-0.16.3/test/basic-bounds-5.good.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-5.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - j = floord(M+1,2) ; - S1(1,j) ; -} diff --git a/cloog-0.16.3/test/basic-bounds-6.c b/cloog-0.16.3/test/basic-bounds-6.c deleted file mode 100644 index 449ad37..0000000 --- a/cloog-0.16.3/test/basic-bounds-6.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-6.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -S1(-1) ; diff --git a/cloog-0.16.3/test/basic-bounds-6.cloog b/cloog-0.16.3/test/basic-bounds-6.cloog deleted file mode 100644 index 2acc2ab..0000000 --- a/cloog-0.16.3/test/basic-bounds-6.cloog +++ /dev/null @@ -1,20 +0,0 @@ -# language: C -c - -# Context -1 2 -1 1 -0 - -1 # Number of statements - -1 -3 3 -# i 1 -1 2 3 -1 -2 -1 -1 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/basic-bounds-6.good.c b/cloog-0.16.3/test/basic-bounds-6.good.c deleted file mode 100644 index a993e2f..0000000 --- a/cloog-0.16.3/test/basic-bounds-6.good.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-6.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test() -{ - /* Original iterators. */ - int i; - S1(-1) ; -} diff --git a/cloog-0.16.3/test/block.c b/cloog-0.16.3/test/block.c deleted file mode 100644 index 2ba5668..0000000 --- a/cloog-0.16.3/test/block.c +++ /dev/null @@ -1,5 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/block.cloog by CLooG 0.14.0-170-g72daac3 gmp bits in 0.00s. */ -S1(); -S3(0); -S2(); -S3(1); diff --git a/cloog-0.16.3/test/block.cloog b/cloog-0.16.3/test/block.cloog deleted file mode 100644 index 9913b74..0000000 --- a/cloog-0.16.3/test/block.cloog +++ /dev/null @@ -1,42 +0,0 @@ -c - -0 2 - -0 - -3 - -1 -0 2 - -0 0 0 - -1 -0 2 - -0 0 0 - -1 -2 3 -1 1 0 -1 -1 1 - -0 0 0 - -0 - -3 - -2 4 -0 -1 0 0 # c1 = 0 -0 0 -1 0 # c2 = 0 - -2 4 -0 -1 0 1 # c1 = 1 -0 0 -1 0 # c2 = 0 - -2 5 -0 -1 0 1 0 # c1 = i -0 0 -1 0 1 # c2 = 1 - -0 diff --git a/cloog-0.16.3/test/block.good.c b/cloog-0.16.3/test/block.good.c deleted file mode 100644 index b2f280f..0000000 --- a/cloog-0.16.3/test/block.good.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/block.cloog by CLooG 0.14.0-170-g72daac3 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } -#define S2() { hash(2); } -#define S3(i) { hash(3); hash(i); } - -void test() -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i; - S1(); - S3(0); - S2(); - S3(1); -} diff --git a/cloog-0.16.3/test/block2.c b/cloog-0.16.3/test/block2.c deleted file mode 100644 index 7209a10..0000000 --- a/cloog-0.16.3/test/block2.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/block2.cloog by CLooG 0.14.0-302-g309b32c gmp bits in 0.01s. */ -for (c0=0;c0<=9;c0++) { - S1(c0,1); - S3(c0,1); - S2(c0,1); -} diff --git a/cloog-0.16.3/test/block2.cloog b/cloog-0.16.3/test/block2.cloog deleted file mode 100644 index 866c634..0000000 --- a/cloog-0.16.3/test/block2.cloog +++ /dev/null @@ -1,77 +0,0 @@ -# CLooG -> CLooG -# This is an automatic dump of a CLooG input file from a CloogInput data -# structure. - -# Language: C -c - -# Context: -0 2 - -0 # Parameter name(s) - -# Statement number: -3 - -# Iteration domain of statement 5 (ND_1IP_ED_0_0_V_0). -1 - -3 4 -0 0 1 -1 -1 1 0 0 -1 -1 0 9 - -0 0 0 # For future options. - -# Iteration domain of statement 6 (ND_1OP_ED_3_0_V_1). -1 - -3 4 -0 0 1 -1 -1 1 0 0 -1 -1 0 9 - -0 0 0 # For future options. - -# Iteration domain of statement 7 (ND_1). -1 - -3 4 -0 0 1 -1 -1 1 0 0 -1 -1 0 9 - -0 0 0 # For future options. - - -0 # Iterator name(s) - -# --------------------- SCATTERING -------------------- -3 # Scattering functions - -# Scattering of statement 5 (ND_1IP_ED_0_0_V_0). -1 - -3 7 -0 0 0 1 0 0 -6 -0 0 1 0 0 -1 0 -0 1 0 0 -1 0 0 - -# Scattering of statement 6 (ND_1OP_ED_3_0_V_1). -1 - -3 7 -0 0 0 1 0 0 -11 -0 0 1 0 0 -1 0 -0 1 0 0 -1 0 0 - -# Scattering of statement 7 (ND_1). -1 - -3 7 -0 0 0 1 0 0 -8 -0 0 1 0 0 -1 0 -0 1 0 0 -1 0 0 - -1 # Scattering dimension name(s) -c0 c1 c2 diff --git a/cloog-0.16.3/test/block2.good.c b/cloog-0.16.3/test/block2.good.c deleted file mode 100644 index 23a4942..0000000 --- a/cloog-0.16.3/test/block2.good.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/block2.cloog by CLooG 0.14.0-302-g309b32c gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } - -void test() -{ - /* Scattering iterators. */ - int c0, c1; - /* Original iterators. */ - int i, j; - for (c0=0;c0<=9;c0++) { - S1(c0,1); - S3(c0,1); - S2(c0,1); - } -} diff --git a/cloog-0.16.3/test/block3.c b/cloog-0.16.3/test/block3.c deleted file mode 100644 index 2c701e9..0000000 --- a/cloog-0.16.3/test/block3.c +++ /dev/null @@ -1,5 +0,0 @@ -/* Generated from ../../../git/cloog/test/block3.cloog by CLooG 0.16.2-4-gba4e834 gmp bits in 0.00s. */ -S1(); -S3(0); -S2(); -S3(1); diff --git a/cloog-0.16.3/test/block3.cloog b/cloog-0.16.3/test/block3.cloog deleted file mode 100644 index fd9997d..0000000 --- a/cloog-0.16.3/test/block3.cloog +++ /dev/null @@ -1,36 +0,0 @@ -C - -0 2 - -0 - -3 - -1 -0 2 -0 0 0 - -1 -0 2 -0 0 0 - -1 -2 3 -1 1 0 -1 -1 1 -0 0 0 - -0 - -3 - -1 3 -0 -1 0 - -1 3 -0 -1 1 - -1 4 -0 -1 1 0 - -0 diff --git a/cloog-0.16.3/test/block3.good.c b/cloog-0.16.3/test/block3.good.c deleted file mode 100644 index b4bdf6d..0000000 --- a/cloog-0.16.3/test/block3.good.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Generated from ../../../git/cloog/test/block3.cloog by CLooG 0.16.2-4-gba4e834 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } -#define S2() { hash(2); } -#define S3(i) { hash(3); hash(i); } - -void test() -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i; - S1(); - S3(0); - S2(); - S3(1); -} diff --git a/cloog-0.16.3/test/byu98-1-2-3.c b/cloog-0.16.3/test/byu98-1-2-3.c deleted file mode 100644 index 2a1e151..0000000 --- a/cloog-0.16.3/test/byu98-1-2-3.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/byu98-1-2-3.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.01s. */ -for (i=2;i<=3;i++) { - for (j=-i+6;j<=6;j++) { - S1(i,j); - } -} -for (i=4;i<=7;i++) { - if (i == 4) { - for (j=3;j<=4;j++) { - S1(i,j); - } - } - if (i >= 6) { - S2(i,-i+9); - } - if (i <= 5) { - S1(i,-i+9); - S2(i,-i+9); - } - for (j=max(-i+10,i-1);j<=6;j++) { - S1(i,j); - } -} -S2(8,1); diff --git a/cloog-0.16.3/test/byu98-1-2-3.cloog b/cloog-0.16.3/test/byu98-1-2-3.cloog deleted file mode 100644 index 76d16ab..0000000 --- a/cloog-0.16.3/test/byu98-1-2-3.cloog +++ /dev/null @@ -1,65 +0,0 @@ -# Here is the result given by an old CLooG (the same was given up to 0.12.2), -# the difference with the new constant spreading technique of 0.14.0 is -# one of the most beautiful. -# -# /* Generated by CLooG v0.10.7 */ -# for (i=2;i<=3;i++) { -# for (j=-i+6;j<=6;j++) { -# S1 ; -# } -# } -# for (j=4-1;j<=-(4)+8;j++) { -# S1(i = 4) ; -# } -# j = -(4)+9 ; -# S1(i = 4) ; -# S2(i = 4) ; -# for (j=-(4)+10;j<=6;j++) { -# S1(i = 4) ; -# } -# S1(i = 5,j = 4) ; -# S2(i = 5,j = 4) ; -# for (j=5;j<=6;j++) { -# S1(i = 5) ; -# } -# for (i=6;i<=7;i++) { -# j = -i+9 ; -# S2 ; -# for (j=i-1;j<=6;j++) { -# S1 ; -# } -# } -# S2(i = 8,j = 1) ; - -# language: C -c - -# Context -#{ | 1>=0} -1 2 -1 1 -0 - -2 # Number of statements - -1 -# {i,j | (-j+6,2)<=i<=j+1; 3<=j<=6} -5 4 -# i j 1 -1 1 1 -6 -1 1 0 -2 -1 0 1 -3 -1 0 -1 6 -1 -1 1 1 -0 0 0 - -1 -# {i,j | i=-j+9; 1<=j<=5} -3 4 -0 1 1 -9 -1 0 1 -1 -1 0 -1 5 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/byu98-1-2-3.good.c b/cloog-0.16.3/test/byu98-1-2-3.good.c deleted file mode 100644 index d1ad156..0000000 --- a/cloog-0.16.3/test/byu98-1-2-3.good.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Generated from ../../../git/cloog/test/byu98-1-2-3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test() -{ - /* Original iterators. */ - int i, j; - for (i=2;i<=3;i++) { - for (j=-i+6;j<=6;j++) { - S1(i,j) ; - } - } - for (j=3;j<=4;j++) { - S1(4,j) ; - } - S1(4,5) ; - S2(4,5) ; - S1(4,6) ; - S1(5,4) ; - S2(5,4) ; - for (j=5;j<=6;j++) { - S1(5,j) ; - } - for (i=6;i<=7;i++) { - j = -i+9 ; - S2(i,-i+9) ; - for (j=i-1;j<=6;j++) { - S1(i,j) ; - } - } - S2(8,1) ; -} diff --git a/cloog-0.16.3/test/cholesky.c b/cloog-0.16.3/test/cholesky.c deleted file mode 100644 index a0d08fc..0000000 --- a/cloog-0.16.3/test/cholesky.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Generated from ../../../git/cloog/test/cholesky.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.04s. */ -if (n >= 1) { - if (n >= 2) { - S1(1) ; - S3(1) ; - for (c3=2;c3<=n;c3++) { - S4(1,c3) ; - S6(1,c3) ; - } - } - if (n == 1) { - S1(1) ; - S3(1) ; - } - for (c1=2;c1<=n-1;c1++) { - S1(c1) ; - for (c3=1;c3<=c1-1;c3++) { - S2(c1,c3) ; - } - S3(c1) ; - for (c3=c1+1;c3<=n;c3++) { - S4(c1,c3) ; - for (c5=1;c5<=c1-1;c5++) { - S5(c1,c3,c5) ; - } - S6(c1,c3) ; - } - } - if (n >= 2) { - S1(n) ; - for (c3=1;c3<=n-1;c3++) { - S2(n,c3) ; - } - S3(n) ; - } -} diff --git a/cloog-0.16.3/test/cholesky.cloog b/cloog-0.16.3/test/cholesky.cloog deleted file mode 100644 index a3eadea..0000000 --- a/cloog-0.16.3/test/cholesky.cloog +++ /dev/null @@ -1,129 +0,0 @@ -# language: C -c - -# parameter n -1 3 -# n 1 -1 0 1 -1 -n - -6 # Number of statements - -1 -# S1 {i | 1<=i<=n} -2 4 -# i n 1 -1 1 0 -1 -1 -1 1 0 -0 0 0 - -1 -# S2 {i, j | 1<=i<=n; 1<=j<=i-1} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 -1 -1 1 -1 0 -1 -0 0 0 - -1 -# S3 {i | 1<=i<=n} -2 4 -# i n 1 -1 1 0 -1 -1 -1 1 0 -0 0 0 - -1 -# S4 {i, j | 1<=i<=n; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 - -1 -# S5 {i, j, k | 1<=i<=n; i+1<=j<=n 1<=k<=i-1} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 0 -1 -1 1 0 -1 0 -1 -0 0 0 - -1 -# S6 {i, j | 1<=i<=n; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 -0 - -6 # Scattering functions -# Et les instructions de chunking (prog init)... -6 10 -# c1 c2 c3 c4 c5 c6 i n 1 -0 1 0 0 0 0 0 -1 0 0 -0 0 1 0 0 0 0 0 0 -1 -0 0 0 1 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 - -6 11 -# c1 c2 c3 c4 c5 c6 i j n 1 -0 1 0 0 0 0 0 -1 0 0 0 -0 0 1 0 0 0 0 0 0 0 -2 -0 0 0 1 0 0 0 0 -1 0 0 -0 0 0 0 1 0 0 0 0 0 -1 -0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 - -6 10 -# c1 c2 c3 c4 c5 c6 i n 1 -0 1 0 0 0 0 0 -1 0 0 -0 0 1 0 0 0 0 0 0 -3 -0 0 0 1 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 - -6 11 -# c1 c2 c3 c4 c5 c6 i j n 1 -0 1 0 0 0 0 0 -1 0 0 0 -0 0 1 0 0 0 0 0 0 0 -4 -0 0 0 1 0 0 0 0 -1 0 0 -0 0 0 0 1 0 0 0 0 0 -1 -0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 - -6 12 -# c1 c2 c3 c4 c5 c6 i j k n 1 -0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 0 -4 -0 0 0 1 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -2 -0 0 0 0 0 1 0 0 0 -1 0 0 -0 0 0 0 0 0 1 0 0 0 0 -1 - -6 11 -# c1 c2 c3 c4 c5 c6 i j n 1 -0 1 0 0 0 0 0 -1 0 0 0 -0 0 1 0 0 0 0 0 0 0 -4 -0 0 0 1 0 0 0 0 -1 0 0 -0 0 0 0 1 0 0 0 0 0 -3 -0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 -0 - - diff --git a/cloog-0.16.3/test/cholesky.good.c b/cloog-0.16.3/test/cholesky.good.c deleted file mode 100644 index 7619b7e..0000000 --- a/cloog-0.16.3/test/cholesky.good.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Generated from ../../../git/cloog/test/cholesky.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.05s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i) { hash(3); hash(i); } -#define S4(i,j) { hash(4); hash(i); hash(j); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } -#define S6(i,j) { hash(6); hash(i); hash(j); } - -void test(int n) -{ - /* Scattering iterators. */ - int c1, c3, c5; - /* Original iterators. */ - int i, j, k; - if (n >= 2) { - S1(1) ; - S3(1) ; - for (c3=2;c3<=n;c3++) { - S4(1,c3) ; - S6(1,c3) ; - } - } - if (n == 1) { - S1(1) ; - S3(1) ; - } - for (c1=2;c1<=n-1;c1++) { - S1(c1) ; - for (c3=1;c3<=c1-1;c3++) { - S2(c1,c3) ; - } - S3(c1) ; - for (c3=c1+1;c3<=n;c3++) { - S4(c1,c3) ; - for (c5=1;c5<=c1-1;c5++) { - S5(c1,c3,c5) ; - } - S6(c1,c3) ; - } - } - if (n >= 2) { - S1(n) ; - for (c3=1;c3<=n-1;c3++) { - S2(n,c3) ; - } - S3(n) ; - } -} diff --git a/cloog-0.16.3/test/cholesky2.c b/cloog-0.16.3/test/cholesky2.c deleted file mode 100644 index 3141bdc..0000000 --- a/cloog-0.16.3/test/cholesky2.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Generated from ../../../git/cloog/test/cholesky2.cloog by CLooG 0.16.1-2-g33ac553 gmp bits in 0.02s. */ -if (M >= 1) { - for (c2=1;c2<=M-1;c2++) { - S1(c2); - for (c3=c2+1;c3<=M;c3++) { - S4(c2,c3); - } - } - S1(M); - S3(1); - if (M >= 3) { - S6(1,2); - for (c2=3;c2<=M;c2++) { - S6(1,c2); - for (i=2;i<=c2-1;i++) { - S5(i,c2,1); - } - } - } - if (M == 2) { - S6(1,2); - } - for (c1=3;c1<=3*M-7;c1++) { - if ((c1+2)%3 == 0) { - S3((c1+2)/3); - } - if (c1%3 == 0) { - S2((c1+3)/3,c1/3); - } - if ((c1+1)%3 == 0) { - S6((c1+1)/3,(c1+4)/3); - } - if (c1%3 == 0) { - S2((c1+6)/3,c1/3); - } - for (c2=ceild(c1+7,3);c2<=M;c2++) { - if ((c1+1)%3 == 0) { - S6((c1+1)/3,c2); - } - if (c1%3 == 0) { - S2(c2,c1/3); - } - if ((c1+1)%3 == 0) { - for (i=ceild(c1+4,3);i<=c2-1;i++) { - S5(i,c2,(c1+1)/3); - } - } - } - } - if (M >= 3) { - for (c2=M-1;c2<=M;c2++) { - S2(c2,M-2); - } - } - if (M >= 3) { - S3(M-1); - } - if (M >= 3) { - S6(M-1,M); - } - if (M >= 2) { - S2(M,M-1); - } - if (M >= 2) { - S3(M); - } -} diff --git a/cloog-0.16.3/test/cholesky2.cloog b/cloog-0.16.3/test/cholesky2.cloog deleted file mode 100644 index 6c0a81a..0000000 --- a/cloog-0.16.3/test/cholesky2.cloog +++ /dev/null @@ -1,108 +0,0 @@ -# language: C -c - -# parameter n -1 3 -# n 1 -1 0 1 -0 - -6 # Number of statements - -1 -# S1 {i | 1<=i<=n} -2 4 -# i n 1 -1 1 0 -1 -1 -1 1 0 -0 0 0 - -1 -# S2 {i, j | 1<=i<=n; 1<=j<=i-1} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 -1 -1 1 -1 0 -1 -0 0 0 - -1 -# S3 {i | 1<=i<=n} -2 4 -# i n 1 -1 1 0 -1 -1 -1 1 0 -0 0 0 - -1 -# S4 {i, j | 1<=i<=n; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 - -1 -# S5 {i, j, k | 1<=i<=n; i+1<=j<=n 1<=k<=i-1} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 0 -1 -1 1 0 -1 0 -1 -0 0 0 - -1 -# S6 {i, j | 1<=i<=n; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 -0 - -6 # Scattering functions -# Et les instructions de chunking (parallele)... -3 7 -# c1 c2 c3 i n 1 -0 1 0 0 0 0 0 -0 0 1 0 -1 0 0 -0 0 0 1 0 0 0 - -3 8 -# c1 c2 c3 i j n 1 -0 1 0 0 0 -3 0 0 -0 0 1 0 -1 0 0 0 -0 0 0 1 0 0 0 0 - -3 7 -# c1 c2 c3 i n 1 -0 1 0 0 -3 0 2 -0 0 1 0 0 0 0 -0 0 0 1 0 0 0 - -3 8 -# c1 c2 c3 i j n 1 -0 1 0 0 0 0 0 0 -0 0 1 0 -1 0 0 0 -0 0 0 1 0 -1 0 0 - -3 9 -# c1 c2 c3 i j k n 1 -0 1 0 0 0 0 -3 0 1 -0 0 1 0 0 -1 0 0 0 -0 0 0 1 0 0 -1 0 0 - -3 8 -# c1 c2 c3 i j n 1 -0 1 0 0 -3 0 0 1 -0 0 1 0 0 -1 0 0 -0 0 0 1 0 0 0 0 -0 diff --git a/cloog-0.16.3/test/cholesky2.good.c b/cloog-0.16.3/test/cholesky2.good.c deleted file mode 100644 index ee4b344..0000000 --- a/cloog-0.16.3/test/cholesky2.good.c +++ /dev/null @@ -1,114 +0,0 @@ -/* Generated from ../../../git/cloog/test/cholesky2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.11s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i) { hash(3); hash(i); } -#define S4(i,j) { hash(4); hash(i); hash(j); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } -#define S6(i,j) { hash(6); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c1, c2, c3; - /* Original iterators. */ - int i, j, k; - if (M >= 2) { - for (c2=1;c2<=M-1;c2++) { - S1(c2) ; - for (c3=c2+1;c3<=M;c3++) { - S4(c2,c3) ; - } - } - S1(M) ; - } - if (M == 1) { - S1(1) ; - } - if (M >= 2) { - S3(1) ; - } - if (M >= 3) { - S6(1,2) ; - for (c2=3;c2<=M;c2++) { - S6(1,c2) ; - for (i=2;i<=c2-1;i++) { - S5(i,c2,1) ; - } - } - } - if (M == 2) { - S6(1,2) ; - } - for (c1=3;c1<=3*M-7;c1++) { - if ((c1+2)%3 == 0) { - i = (c1+2)/3 ; - S3((c1+2)/3) ; - } - if (c1%3 == 0) { - c2 = (c1+3)/3 ; - i = (c1+3)/3 ; - S2((c1+3)/3,c1/3) ; - } - c2 = floord(c1+6,3) ; - if ((c1+1)%3 == 0) { - i = (c1+1)/3 ; - S6((c1+1)/3,c2) ; - } - if (c1%3 == 0) { - S2(c2,c1/3) ; - } - for (c2=ceild(c1+7,3);c2<=M;c2++) { - if ((c1+1)%3 == 0) { - i = (c1+1)/3 ; - S6((c1+1)/3,c2) ; - } - if (c1%3 == 0) { - S2(c2,c1/3) ; - } - if ((c1+1)%3 == 0) { - c3 = (c1+1)/3 ; - for (i=ceild(c1+4,3);i<=c2-1;i++) { - k = (c1+1)/3 ; - S5(i,c2,(c1+1)/3) ; - } - } - } - } - for (c1=max(3*M-6,3);c1<=3*M-4;c1++) { - if ((c1+2)%3 == 0) { - i = (c1+2)/3 ; - S3((c1+2)/3) ; - } - if (c1%3 == 0) { - c2 = (c1+3)/3 ; - i = (c1+3)/3 ; - S2((c1+3)/3,c1/3) ; - } - for (c2=ceild(c1+4,3);c2<=M;c2++) { - if ((c1+1)%3 == 0) { - i = (c1+1)/3 ; - S6((c1+1)/3,c2) ; - } - if (c1%3 == 0) { - S2(c2,c1/3) ; - } - } - } - if (M >= 2) { - c1 = 3*M-3 ; - j = M-1 ; - S2(M,M-1) ; - } - if (M >= 1) { - c1 = 3*M-2 ; - S3(M) ; - } -} diff --git a/cloog-0.16.3/test/christian.c b/cloog-0.16.3/test/christian.c deleted file mode 100644 index cc3c5d3..0000000 --- a/cloog-0.16.3/test/christian.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/christian.cloog by CLooG 0.16.2-5-g3b3bf96 gmp bits in 0.01s. */ -if (N >= 1) { - S1(0,N-1); - for (p=-N+2;p<=N-1;p++) { - if (p >= 1) { - S2(p-1,0); - } - for (i=max(0,p);i<=min(N-1,p+N-2);i++) { - S1(i,-p+i); - S2(i,-p+i+1); - } - if (p <= 0) { - S1(p+N-1,N-1); - } - } - S2(N-1,0); -} diff --git a/cloog-0.16.3/test/christian.cloog b/cloog-0.16.3/test/christian.cloog deleted file mode 100644 index 088977e..0000000 --- a/cloog-0.16.3/test/christian.cloog +++ /dev/null @@ -1,57 +0,0 @@ -# =============================================== Global -# Language -C - -# Context -0 3 - -# Parameter names are provided -1 -# Parameter names -N - -# Number of statements -2 - -# =============================================== Statement 1 -# ---------------------------------------------- 1.1 Domain -# Iteration domain -1 -4 5 - 1 1 0 0 0 ## i >= 0 - 1 -1 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 ## j >= 0 - 1 0 -1 1 -1 ## -j+N-1 >= 0 -0 0 0 - -# =============================================== Statement 2 -# ---------------------------------------------- 2.1 Domain -# Iteration domain -1 -4 5 - 1 1 0 0 0 ## i >= 0 - 1 -1 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 ## j >= 0 - 1 0 -1 1 -1 ## -j+N-1 >= 0 -0 0 0 - -#naming for domains -0 - -# ---------------------------------------------- Scatterings -# of Scattering functions -2 - -# Scattering function -1 6 - 0 1 -1 1 0 0 ## p = i-j - -# Scattering function -1 6 - 0 1 -1 1 0 -1 ## p = i-j+1 - - -# we will set the scattering dimension names -1 -p - diff --git a/cloog-0.16.3/test/christian.good.c b/cloog-0.16.3/test/christian.good.c deleted file mode 100644 index 28f578c..0000000 --- a/cloog-0.16.3/test/christian.good.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Generated from ../../../git/cloog/test/christian.cloog by CLooG 0.16.2-5-g3b3bf96 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int N) -{ - /* Scattering iterators. */ - int p; - /* Original iterators. */ - int i, j; - if (N >= 1) { - S1(0,N-1); - for (p=-N+2;p<=N-1;p++) { - if (p >= 1) { - S2(p-1,0); - } - for (i=max(0,p);i<=min(N-1,p+N-2);i++) { - S1(i,-p+i); - S2(i,-p+i+1); - } - if (p <= 0) { - S1(p+N-1,N-1); - } - } - S2(N-1,0); - } -} diff --git a/cloog-0.16.3/test/classen.c b/cloog-0.16.3/test/classen.c deleted file mode 100644 index 3b5b05e..0000000 --- a/cloog-0.16.3/test/classen.c +++ /dev/null @@ -1,101 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/classen.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.45s. */ -if (m >= 1) { - if (m >= 2) { - S1(0,1,1,1); - S2(0,1,1,1,1,1,2,1); - S3(0,1,1,2,1,1,1,2); - S4(0,1,2,2,1,1,2,2); - S8(0,1); - } - if (m == 1) { - S1(0,1,1,1); - S8(0,1); - } - for (glT1=1;glT1<=2*m-4;glT1++) { - if (glT1 <= m-2) { - S5(glT1-1,1,glT1,1,glT1,1,glT1+1,1); - S1(glT1,1,glT1+1,1); - S2(glT1,1,glT1+1,1,glT1+1,1,glT1+2,1); - S3(glT1,1,glT1+1,2,glT1+1,1,glT1+1,2); - S4(glT1,1,glT1+2,2,glT1+1,1,glT1+2,2); - } - if (glT1 >= m) { - S5(glT1-1,glT1-m+2,glT1,glT1-m+2,m-1,glT1-m+2,m,glT1-m+2); - S6(glT1-1,glT1-m+1,glT1,glT1-m+2,m,glT1-m+1,m,glT1-m+2); - S1(glT1,glT1-m+2,m,glT1-m+2); - S3(glT1,glT1-m+2,glT1+1,glT1-m+3,m,glT1-m+2,m,glT1-m+3); - } - if (glT1 == m-1) { - S5(m-2,1,m-1,1,m-1,1,m,1); - S1(m-1,1,m,1); - S3(m-1,1,m,2,m,1,m,2); - } - for (rp1=max(2,glT1-m+3);rp1<=min(glT1,m-1);rp1++) { - S5(glT1-1,rp1,glT1,rp1,glT1-rp1+1,rp1,glT1-rp1+2,rp1); - S6(glT1-1,rp1-1,glT1,rp1,glT1-rp1+2,rp1-1,glT1-rp1+2,rp1); - S7(glT1-1,rp1-1,glT1+1,rp1,glT1-rp1+2,rp1-1,glT1-rp1+3,rp1); - S1(glT1,rp1,glT1-rp1+2,rp1); - S2(glT1,rp1,glT1+1,rp1,glT1-rp1+2,rp1,glT1-rp1+3,rp1); - S3(glT1,rp1,glT1+1,rp1+1,glT1-rp1+2,rp1,glT1-rp1+2,rp1+1); - S4(glT1,rp1,glT1+2,rp1+1,glT1-rp1+2,rp1,glT1-rp1+3,rp1+1); - } - if (glT1 <= m-2) { - S6(glT1-1,glT1,glT1,glT1+1,1,glT1,1,glT1+1); - S7(glT1-1,glT1,glT1+1,glT1+1,1,glT1,2,glT1+1); - S1(glT1,glT1+1,1,glT1+1); - S2(glT1,glT1+1,glT1+1,glT1+1,1,glT1+1,2,glT1+1); - S3(glT1,glT1+1,glT1+1,glT1+2,1,glT1+1,1,glT1+2); - S4(glT1,glT1+1,glT1+2,glT1+2,1,glT1+1,2,glT1+2); - } - if (glT1 >= m) { - S5(glT1-1,m,glT1,m,glT1-m+1,m,glT1-m+2,m); - S6(glT1-1,m-1,glT1,m,glT1-m+2,m-1,glT1-m+2,m); - S7(glT1-1,m-1,glT1+1,m,glT1-m+2,m-1,glT1-m+3,m); - S1(glT1,m,glT1-m+2,m); - S2(glT1,m,glT1+1,m,glT1-m+2,m,glT1-m+3,m); - } - if (glT1 == m-1) { - S6(m-2,m-1,m-1,m,1,m-1,1,m); - S7(m-2,m-1,m,m,1,m-1,2,m); - S1(m-1,m,1,m); - S2(m-1,m,m,m,1,m,2,m); - } - for (coordP1=max(1,glT1-m+2);coordP1<=min(m,glT1+1);coordP1++) { - S8(glT1,coordP1); - } - } - if (m >= 2) { - if (m >= 3) { - S5(2*m-4,m-1,2*m-3,m-1,m-1,m-1,m,m-1); - S6(2*m-4,m-2,2*m-3,m-1,m,m-2,m,m-1); - S1(2*m-3,m-1,m,m-1); - S3(2*m-3,m-1,2*m-2,m,m,m-1,m,m); - } - if (m == 2) { - S5(0,1,1,1,1,1,2,1); - S1(1,1,2,1); - S3(1,1,2,2,2,1,2,2); - } - if (m >= 3) { - S5(2*m-4,m,2*m-3,m,m-2,m,m-1,m); - S6(2*m-4,m-1,2*m-3,m,m-1,m-1,m-1,m); - S7(2*m-4,m-1,2*m-2,m,m-1,m-1,m,m); - S1(2*m-3,m,m-1,m); - } - if (m == 2) { - S6(0,1,1,2,1,1,1,2); - S7(0,1,2,2,1,1,2,2); - S1(1,2,1,2); - } - S2(2*m-3,m,2*m-2,m,m-1,m,m,m); - for (coordP1=m-1;coordP1<=m;coordP1++) { - S8(2*m-3,coordP1); - } - } - if (m >= 2) { - S5(2*m-3,m,2*m-2,m,m-1,m,m,m); - S6(2*m-3,m-1,2*m-2,m,m,m-1,m,m); - S1(2*m-2,m,m,m); - S8(2*m-2,m); - } -} diff --git a/cloog-0.16.3/test/classen.cloog b/cloog-0.16.3/test/classen.cloog deleted file mode 100644 index 06fe3b0..0000000 --- a/cloog-0.16.3/test/classen.cloog +++ /dev/null @@ -1,233 +0,0 @@ -# created: Fri Mar 4 11:37:56 CET 2005 -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context -1 3 - 1 1 0 - - -1 # set parameter names -m - -# --------------------- STATEMENTS -------------------- -8 - -# 1 computation stmts: -1 # one domain per statement -7 7 - 1 0 0 0 0 1 -1 - 1 0 0 -1 0 1 0 - 1 0 0 1 0 0 -1 - 1 0 0 0 -1 1 0 - 1 0 0 0 1 0 -1 - 0 0 -1 0 1 0 0 - 0 -1 0 1 1 0 -2 -0 0 0 # for future options... - - -# 3 prepare-send stmts: -1 # one domain per statement -13 11 - 1 0 0 0 0 0 0 0 0 1 -1 - 1 -1 0 0 0 0 0 0 0 2 -3 - 1 1 0 0 0 0 0 0 0 0 0 - 1 1 -1 0 0 0 0 0 0 0 1 - 1 0 -1 0 0 0 0 0 0 1 0 - 1 -1 1 0 0 0 0 0 0 1 -3 - 1 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 -1 0 0 0 1 0 0 - 0 0 0 -1 0 0 0 1 1 0 -2 - 0 0 -1 0 0 0 1 0 0 0 0 - 0 -1 0 0 0 1 1 0 0 0 -2 - 0 -1 0 1 0 0 0 0 0 0 -1 - 0 0 -1 0 1 0 0 0 0 0 0 -0 0 0 # for future options... - - -1 # one domain per statement -13 11 - 1 0 0 0 0 0 0 0 0 1 -1 - 1 -1 0 0 0 0 0 0 0 2 -3 - 1 1 0 0 0 0 0 0 0 0 0 - 1 1 -1 0 0 0 0 0 0 0 1 - 1 0 -1 0 0 0 0 0 0 1 -1 - 1 -1 1 0 0 0 0 0 0 1 -2 - 1 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 -1 0 0 0 1 0 0 - 0 0 0 -1 0 0 0 1 1 0 -2 - 0 0 -1 0 0 0 1 0 0 0 0 - 0 -1 0 0 0 1 1 0 0 0 -2 - 0 -1 0 1 0 0 0 0 0 0 -1 - 0 0 -1 0 1 0 0 0 0 0 -1 -0 0 0 # for future options... - - -1 # one domain per statement -13 11 - 1 0 0 0 0 0 0 0 0 1 -1 - 1 -1 0 0 0 0 0 0 0 2 -4 - 1 1 0 0 0 0 0 0 0 0 0 - 1 1 -1 0 0 0 0 0 0 0 1 - 1 0 -1 0 0 0 0 0 0 1 -1 - 1 -1 1 0 0 0 0 0 0 1 -3 - 1 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 -1 0 0 0 1 0 0 - 0 0 0 -1 0 0 0 1 1 0 -2 - 0 0 -1 0 0 0 1 0 0 0 0 - 0 -1 0 0 0 1 1 0 0 0 -2 - 0 -1 0 1 0 0 0 0 0 0 -2 - 0 0 -1 0 1 0 0 0 0 0 -1 -0 0 0 # for future options... - - -# 3 prepare-receive stmts: -1 # one domain per statement -13 11 - 1 0 0 0 0 0 0 0 0 1 -1 - 1 -1 0 0 0 0 0 0 0 2 -3 - 1 1 0 0 0 0 0 0 0 0 0 - 1 1 -1 0 0 0 0 0 0 0 1 - 1 0 -1 0 0 0 0 0 0 1 0 - 1 -1 1 0 0 0 0 0 0 1 -3 - 1 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 -1 0 0 0 1 0 0 - 0 0 0 -1 0 0 0 1 1 0 -2 - 0 0 -1 0 0 0 1 0 0 0 0 - 0 -1 0 0 0 1 1 0 0 0 -2 - 0 -1 0 1 0 0 0 0 0 0 -1 - 0 0 -1 0 1 0 0 0 0 0 0 -0 0 0 # for future options... - - -1 # one domain per statement -13 11 - 1 0 0 0 0 0 0 0 0 1 -1 - 1 -1 0 0 0 0 0 0 0 2 -3 - 1 1 0 0 0 0 0 0 0 0 0 - 1 1 -1 0 0 0 0 0 0 0 1 - 1 0 -1 0 0 0 0 0 0 1 -1 - 1 -1 1 0 0 0 0 0 0 1 -2 - 1 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 -1 0 0 0 1 0 0 - 0 0 0 -1 0 0 0 1 1 0 -2 - 0 0 -1 0 0 0 1 0 0 0 0 - 0 -1 0 0 0 1 1 0 0 0 -2 - 0 -1 0 1 0 0 0 0 0 0 -1 - 0 0 -1 0 1 0 0 0 0 0 -1 -0 0 0 # for future options... - - -1 # one domain per statement -13 11 - 1 0 0 0 0 0 0 0 0 1 -1 - 1 -1 0 0 0 0 0 0 0 2 -4 - 1 1 0 0 0 0 0 0 0 0 0 - 1 1 -1 0 0 0 0 0 0 0 1 - 1 0 -1 0 0 0 0 0 0 1 -1 - 1 -1 1 0 0 0 0 0 0 1 -3 - 1 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 -1 0 0 0 1 0 0 - 0 0 0 -1 0 0 0 1 1 0 -2 - 0 0 -1 0 0 0 1 0 0 0 0 - 0 -1 0 0 0 1 1 0 0 0 -2 - 0 -1 0 1 0 0 0 0 0 0 -2 - 0 0 -1 0 1 0 0 0 0 0 -1 -0 0 0 # for future options... - - -# communication statement: -1 # number of domains for communication statement -6 5 - 1 -1 0 2 -2 - 1 1 0 0 0 - 1 1 -1 0 1 - 1 0 -1 1 0 - 1 -1 1 1 -2 - 1 0 1 0 -1 - - -0 0 0 # for future options... - - -1 # set the iterator names -coordT1 coordP1 other1 other2 other3 other4 other5 other6 - -# --------------------- SCATTERING -------------------- -8 # Scattering functions -7 14 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - -7 18 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -7 18 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -7 18 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -7 18 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -7 18 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -7 18 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -7 12 - 0 1 0 0 0 0 0 0 -1 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - - -1 # we set the scattering dimension names -glT1 bl rp1 stmtType local1 local2 local3 - diff --git a/cloog-0.16.3/test/classen.good.c b/cloog-0.16.3/test/classen.good.c deleted file mode 100644 index 5c97c50..0000000 --- a/cloog-0.16.3/test/classen.good.c +++ /dev/null @@ -1,396 +0,0 @@ -/* Generated from ../../../git/cloog/test/classen.cloog by CLooG 0.14.0-76-gfd78716 gmp bits in 1.73s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(coordT1,coordP1,other1,other2) { hash(1); hash(coordT1); hash(coordP1); hash(other1); hash(other2); } -#define S2(coordT1,coordP1,other1,other2,other3,other4,other5,other6) { hash(2); hash(coordT1); hash(coordP1); hash(other1); hash(other2); hash(other3); hash(other4); hash(other5); hash(other6); } -#define S3(coordT1,coordP1,other1,other2,other3,other4,other5,other6) { hash(3); hash(coordT1); hash(coordP1); hash(other1); hash(other2); hash(other3); hash(other4); hash(other5); hash(other6); } -#define S4(coordT1,coordP1,other1,other2,other3,other4,other5,other6) { hash(4); hash(coordT1); hash(coordP1); hash(other1); hash(other2); hash(other3); hash(other4); hash(other5); hash(other6); } -#define S5(coordT1,coordP1,other1,other2,other3,other4,other5,other6) { hash(5); hash(coordT1); hash(coordP1); hash(other1); hash(other2); hash(other3); hash(other4); hash(other5); hash(other6); } -#define S6(coordT1,coordP1,other1,other2,other3,other4,other5,other6) { hash(6); hash(coordT1); hash(coordP1); hash(other1); hash(other2); hash(other3); hash(other4); hash(other5); hash(other6); } -#define S7(coordT1,coordP1,other1,other2,other3,other4,other5,other6) { hash(7); hash(coordT1); hash(coordP1); hash(other1); hash(other2); hash(other3); hash(other4); hash(other5); hash(other6); } -#define S8(coordT1,coordP1) { hash(8); hash(coordT1); hash(coordP1); } - -void test(int m) -{ - /* Scattering iterators. */ - int glT1, rp1, local1, local2; - /* Original iterators. */ - int coordT1, coordP1, other1, other2, other3, other4, other5, other6; - if (m >= 2) { - S1(0,1,1,1) ; - S2(0,1,1,1,1,1,2,1) ; - S3(0,1,1,2,1,1,1,2) ; - S4(0,1,2,2,1,1,2,2) ; - S8(0,1) ; - } - if (m == 1) { - S1(0,1,1,1) ; - S8(0,1) ; - } - if (m >= 3) { - S5(0,1,1,1,1,1,2,1) ; - S1(1,1,2,1) ; - S2(1,1,2,1,2,1,3,1) ; - S3(1,1,2,2,2,1,2,2) ; - S4(1,1,3,2,2,1,3,2) ; - S6(0,1,1,2,1,1,1,2) ; - S7(0,1,2,2,1,1,2,2) ; - S1(1,2,1,2) ; - S2(1,2,2,2,1,2,2,2) ; - S3(1,2,2,3,1,2,1,3) ; - S4(1,2,3,3,1,2,2,3) ; - for (coordP1=1;coordP1<=2;coordP1++) { - S8(1,coordP1) ; - } - } - for (glT1=2;glT1<=m-2;glT1++) { - coordT1 = glT1-1 ; - other5 = glT1+1 ; - S5(glT1-1,1,glT1,1,glT1,1,glT1+1,1) ; - other1 = glT1+1 ; - S1(glT1,1,glT1+1,1) ; - local1 = glT1+1 ; - other1 = glT1+1 ; - other3 = glT1+1 ; - other5 = glT1+2 ; - S2(glT1,1,glT1+1,1,glT1+1,1,glT1+2,1) ; - other3 = glT1+1 ; - other5 = glT1+1 ; - S3(glT1,1,glT1+1,2,glT1+1,1,glT1+1,2) ; - other1 = glT1+2 ; - other3 = glT1+1 ; - other5 = glT1+2 ; - S4(glT1,1,glT1+2,2,glT1+1,1,glT1+2,2) ; - for (rp1=2;rp1<=glT1;rp1++) { - local1 = glT1-rp1+1 ; - coordT1 = glT1-1 ; - other3 = glT1-rp1+1 ; - other5 = glT1-rp1+2 ; - S5(glT1-1,rp1,glT1,rp1,glT1-rp1+1,rp1,glT1-rp1+2,rp1) ; - local1 = glT1-rp1+2 ; - local2 = rp1-1 ; - coordT1 = glT1-1 ; - coordP1 = rp1-1 ; - other3 = glT1-rp1+2 ; - other4 = rp1-1 ; - other5 = glT1-rp1+2 ; - S6(glT1-1,rp1-1,glT1,rp1,glT1-rp1+2,rp1-1,glT1-rp1+2,rp1) ; - other1 = glT1+1 ; - other3 = glT1-rp1+2 ; - other4 = rp1-1 ; - other5 = glT1-rp1+3 ; - S7(glT1-1,rp1-1,glT1+1,rp1,glT1-rp1+2,rp1-1,glT1-rp1+3,rp1) ; - other1 = glT1-rp1+2 ; - S1(glT1,rp1,glT1-rp1+2,rp1) ; - local1 = glT1-rp1+2 ; - other1 = glT1+1 ; - other3 = glT1-rp1+2 ; - other5 = glT1-rp1+3 ; - S2(glT1,rp1,glT1+1,rp1,glT1-rp1+2,rp1,glT1-rp1+3,rp1) ; - other2 = rp1+1 ; - other3 = glT1-rp1+2 ; - other5 = glT1-rp1+2 ; - other6 = rp1+1 ; - S3(glT1,rp1,glT1+1,rp1+1,glT1-rp1+2,rp1,glT1-rp1+2,rp1+1) ; - other1 = glT1+2 ; - other2 = rp1+1 ; - other3 = glT1-rp1+2 ; - other5 = glT1-rp1+3 ; - other6 = rp1+1 ; - S4(glT1,rp1,glT1+2,rp1+1,glT1-rp1+2,rp1,glT1-rp1+3,rp1+1) ; - } - rp1 = glT1+1 ; - coordT1 = glT1-1 ; - other2 = glT1+1 ; - other6 = glT1+1 ; - S6(glT1-1,glT1,glT1,glT1+1,1,glT1,1,glT1+1) ; - other1 = glT1+1 ; - other2 = glT1+1 ; - other6 = glT1+1 ; - S7(glT1-1,glT1,glT1+1,glT1+1,1,glT1,2,glT1+1) ; - coordP1 = glT1+1 ; - other2 = glT1+1 ; - S1(glT1,glT1+1,1,glT1+1) ; - local2 = glT1+1 ; - coordP1 = glT1+1 ; - other1 = glT1+1 ; - other2 = glT1+1 ; - other4 = glT1+1 ; - other6 = glT1+1 ; - S2(glT1,glT1+1,glT1+1,glT1+1,1,glT1+1,2,glT1+1) ; - other2 = glT1+2 ; - other4 = glT1+1 ; - other6 = glT1+2 ; - S3(glT1,glT1+1,glT1+1,glT1+2,1,glT1+1,1,glT1+2) ; - other1 = glT1+2 ; - other2 = glT1+2 ; - other4 = glT1+1 ; - other6 = glT1+2 ; - S4(glT1,glT1+1,glT1+2,glT1+2,1,glT1+1,2,glT1+2) ; - for (coordP1=1;coordP1<=glT1+1;coordP1++) { - S8(glT1,coordP1) ; - } - } - if (m >= 3) { - glT1 = m-1 ; - local1 = m-1 ; - coordT1 = m-2 ; - other1 = m-1 ; - other3 = m-1 ; - S5(m-2,1,m-1,1,m-1,1,m,1) ; - coordT1 = m-1 ; - S1(m-1,1,m,1) ; - coordT1 = m-1 ; - S3(m-1,1,m,2,m,1,m,2) ; - for (rp1=2;rp1<=m-1;rp1++) { - local1 = -rp1+m ; - coordT1 = m-2 ; - other1 = m-1 ; - other3 = -rp1+m ; - other5 = -rp1+m+1 ; - S5(m-2,rp1,m-1,rp1,-rp1+m,rp1,-rp1+m+1,rp1) ; - local1 = -rp1+m+1 ; - local2 = rp1-1 ; - coordT1 = m-2 ; - coordP1 = rp1-1 ; - other1 = m-1 ; - other3 = -rp1+m+1 ; - other4 = rp1-1 ; - other5 = -rp1+m+1 ; - S6(m-2,rp1-1,m-1,rp1,-rp1+m+1,rp1-1,-rp1+m+1,rp1) ; - other3 = -rp1+m+1 ; - other4 = rp1-1 ; - other5 = -rp1+m+2 ; - S7(m-2,rp1-1,m,rp1,-rp1+m+1,rp1-1,-rp1+m+2,rp1) ; - coordT1 = m-1 ; - other1 = -rp1+m+1 ; - S1(m-1,rp1,-rp1+m+1,rp1) ; - local1 = -rp1+m+1 ; - coordT1 = m-1 ; - other3 = -rp1+m+1 ; - other5 = -rp1+m+2 ; - S2(m-1,rp1,m,rp1,-rp1+m+1,rp1,-rp1+m+2,rp1) ; - other2 = rp1+1 ; - other3 = -rp1+m+1 ; - other5 = -rp1+m+1 ; - other6 = rp1+1 ; - S3(m-1,rp1,m,rp1+1,-rp1+m+1,rp1,-rp1+m+1,rp1+1) ; - other1 = m+1 ; - other2 = rp1+1 ; - other3 = -rp1+m+1 ; - other5 = -rp1+m+2 ; - other6 = rp1+1 ; - S4(m-1,rp1,m+1,rp1+1,-rp1+m+1,rp1,-rp1+m+2,rp1+1) ; - } - local2 = m-1 ; - coordT1 = m-2 ; - coordP1 = m-1 ; - other1 = m-1 ; - other4 = m-1 ; - S6(m-2,m-1,m-1,m,1,m-1,1,m) ; - other4 = m-1 ; - S7(m-2,m-1,m,m,1,m-1,2,m) ; - coordT1 = m-1 ; - S1(m-1,m,1,m) ; - coordT1 = m-1 ; - S2(m-1,m,m,m,1,m,2,m) ; - coordT1 = m-1 ; - for (coordP1=1;coordP1<=m;coordP1++) { - S8(m-1,coordP1) ; - } - } - for (glT1=m;glT1<=2*m-4;glT1++) { - rp1 = glT1-m+2 ; - local1 = m-1 ; - local2 = glT1-m+2 ; - coordT1 = glT1-1 ; - coordP1 = glT1-m+2 ; - other2 = glT1-m+2 ; - other3 = m-1 ; - other4 = glT1-m+2 ; - other6 = glT1-m+2 ; - S5(glT1-1,glT1-m+2,glT1,glT1-m+2,m-1,glT1-m+2,m,glT1-m+2) ; - local2 = glT1-m+1 ; - coordT1 = glT1-1 ; - coordP1 = glT1-m+1 ; - other2 = glT1-m+2 ; - other4 = glT1-m+1 ; - other6 = glT1-m+2 ; - S6(glT1-1,glT1-m+1,glT1,glT1-m+2,m,glT1-m+1,m,glT1-m+2) ; - coordP1 = glT1-m+2 ; - other2 = glT1-m+2 ; - S1(glT1,glT1-m+2,m,glT1-m+2) ; - local2 = glT1-m+2 ; - coordP1 = glT1-m+2 ; - other1 = glT1+1 ; - other2 = glT1-m+3 ; - other4 = glT1-m+2 ; - other6 = glT1-m+3 ; - S3(glT1,glT1-m+2,glT1+1,glT1-m+3,m,glT1-m+2,m,glT1-m+3) ; - for (rp1=glT1-m+3;rp1<=m-1;rp1++) { - local1 = glT1-rp1+1 ; - coordT1 = glT1-1 ; - other3 = glT1-rp1+1 ; - other5 = glT1-rp1+2 ; - S5(glT1-1,rp1,glT1,rp1,glT1-rp1+1,rp1,glT1-rp1+2,rp1) ; - local1 = glT1-rp1+2 ; - local2 = rp1-1 ; - coordT1 = glT1-1 ; - coordP1 = rp1-1 ; - other3 = glT1-rp1+2 ; - other4 = rp1-1 ; - other5 = glT1-rp1+2 ; - S6(glT1-1,rp1-1,glT1,rp1,glT1-rp1+2,rp1-1,glT1-rp1+2,rp1) ; - other1 = glT1+1 ; - other3 = glT1-rp1+2 ; - other4 = rp1-1 ; - other5 = glT1-rp1+3 ; - S7(glT1-1,rp1-1,glT1+1,rp1,glT1-rp1+2,rp1-1,glT1-rp1+3,rp1) ; - other1 = glT1-rp1+2 ; - S1(glT1,rp1,glT1-rp1+2,rp1) ; - local1 = glT1-rp1+2 ; - other1 = glT1+1 ; - other3 = glT1-rp1+2 ; - other5 = glT1-rp1+3 ; - S2(glT1,rp1,glT1+1,rp1,glT1-rp1+2,rp1,glT1-rp1+3,rp1) ; - other2 = rp1+1 ; - other3 = glT1-rp1+2 ; - other5 = glT1-rp1+2 ; - other6 = rp1+1 ; - S3(glT1,rp1,glT1+1,rp1+1,glT1-rp1+2,rp1,glT1-rp1+2,rp1+1) ; - other1 = glT1+2 ; - other2 = rp1+1 ; - other3 = glT1-rp1+2 ; - other5 = glT1-rp1+3 ; - other6 = rp1+1 ; - S4(glT1,rp1,glT1+2,rp1+1,glT1-rp1+2,rp1,glT1-rp1+3,rp1+1) ; - } - local1 = glT1-m+1 ; - coordT1 = glT1-1 ; - other3 = glT1-m+1 ; - other5 = glT1-m+2 ; - S5(glT1-1,m,glT1,m,glT1-m+1,m,glT1-m+2,m) ; - local1 = glT1-m+2 ; - local2 = m-1 ; - coordT1 = glT1-1 ; - coordP1 = m-1 ; - other3 = glT1-m+2 ; - other4 = m-1 ; - other5 = glT1-m+2 ; - S6(glT1-1,m-1,glT1,m,glT1-m+2,m-1,glT1-m+2,m) ; - other1 = glT1+1 ; - other3 = glT1-m+2 ; - other4 = m-1 ; - other5 = glT1-m+3 ; - S7(glT1-1,m-1,glT1+1,m,glT1-m+2,m-1,glT1-m+3,m) ; - other1 = glT1-m+2 ; - S1(glT1,m,glT1-m+2,m) ; - local1 = glT1-m+2 ; - other1 = glT1+1 ; - other3 = glT1-m+2 ; - other5 = glT1-m+3 ; - S2(glT1,m,glT1+1,m,glT1-m+2,m,glT1-m+3,m) ; - for (coordP1=glT1-m+2;coordP1<=m;coordP1++) { - S8(glT1,coordP1) ; - } - } - if (m >= 3) { - glT1 = 2*m-3 ; - rp1 = m-1 ; - local1 = m-1 ; - local2 = m-1 ; - coordT1 = 2*m-4 ; - coordP1 = m-1 ; - other1 = 2*m-3 ; - other2 = m-1 ; - other3 = m-1 ; - other4 = m-1 ; - other6 = m-1 ; - S5(2*m-4,m-1,2*m-3,m-1,m-1,m-1,m,m-1) ; - local2 = m-2 ; - coordT1 = 2*m-4 ; - coordP1 = m-2 ; - other1 = 2*m-3 ; - other2 = m-1 ; - other4 = m-2 ; - other6 = m-1 ; - S6(2*m-4,m-2,2*m-3,m-1,m,m-2,m,m-1) ; - coordT1 = 2*m-3 ; - coordP1 = m-1 ; - other2 = m-1 ; - S1(2*m-3,m-1,m,m-1) ; - local2 = m-1 ; - coordT1 = 2*m-3 ; - coordP1 = m-1 ; - other1 = 2*m-2 ; - other4 = m-1 ; - S3(2*m-3,m-1,2*m-2,m,m,m-1,m,m) ; - local1 = m-2 ; - coordT1 = 2*m-4 ; - other1 = 2*m-3 ; - other3 = m-2 ; - other5 = m-1 ; - S5(2*m-4,m,2*m-3,m,m-2,m,m-1,m) ; - local1 = m-1 ; - local2 = m-1 ; - coordT1 = 2*m-4 ; - coordP1 = m-1 ; - other1 = 2*m-3 ; - other3 = m-1 ; - other4 = m-1 ; - other5 = m-1 ; - S6(2*m-4,m-1,2*m-3,m,m-1,m-1,m-1,m) ; - other1 = 2*m-2 ; - other3 = m-1 ; - other4 = m-1 ; - S7(2*m-4,m-1,2*m-2,m,m-1,m-1,m,m) ; - coordT1 = 2*m-3 ; - other1 = m-1 ; - S1(2*m-3,m,m-1,m) ; - local1 = m-1 ; - coordT1 = 2*m-3 ; - other1 = 2*m-2 ; - other3 = m-1 ; - S2(2*m-3,m,2*m-2,m,m-1,m,m,m) ; - coordT1 = 2*m-3 ; - for (coordP1=m-1;coordP1<=m;coordP1++) { - S8(2*m-3,coordP1) ; - } - } - if (m == 2) { - S5(0,1,1,1,1,1,2,1) ; - S1(1,1,2,1) ; - S3(1,1,2,2,2,1,2,2) ; - S6(0,1,1,2,1,1,1,2) ; - S7(0,1,2,2,1,1,2,2) ; - S1(1,2,1,2) ; - S2(1,2,2,2,1,2,2,2) ; - for (coordP1=1;coordP1<=2;coordP1++) { - S8(1,coordP1) ; - } - } - if (m >= 2) { - glT1 = 2*m-2 ; - local1 = m-1 ; - coordT1 = 2*m-3 ; - other1 = 2*m-2 ; - other3 = m-1 ; - S5(2*m-3,m,2*m-2,m,m-1,m,m,m) ; - local2 = m-1 ; - coordT1 = 2*m-3 ; - coordP1 = m-1 ; - other1 = 2*m-2 ; - other4 = m-1 ; - S6(2*m-3,m-1,2*m-2,m,m,m-1,m,m) ; - coordT1 = 2*m-2 ; - S1(2*m-2,m,m,m) ; - coordT1 = 2*m-2 ; - S8(2*m-2,m) ; - } -} diff --git a/cloog-0.16.3/test/classen2.c b/cloog-0.16.3/test/classen2.c deleted file mode 100644 index 2afd378..0000000 --- a/cloog-0.16.3/test/classen2.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/classen2.cloog by CLooG 0.14.0-271-gaa1e292 gmp bits in 0.14s. */ -if ((M >= 2) && (N >= 3) && (outerProcTileScatter1 >= outerProcTileScatter2) && (5*outerProcTileScatter1 <= M+2*N-4) && (5*outerProcTileScatter1 <= 5*outerProcTileScatter2+N+2) && (outerProcTileScatter2 >= 0) && (5*outerProcTileScatter2 <= M+N-2) && (outerTimeTileScatter >= outerProcTileScatter1) && (outerTimeTileScatter <= 2*outerProcTileScatter1) && (outerTimeTileScatter <= outerProcTileScatter1+outerProcTileScatter2+1) && (5*outerTimeTileScatter <= 2*M+2*N-6) && (5*outerTimeTileScatter <= 5*outerProcTileScatter1+M+2) && (5*outerTimeTileScatter >= 10*outerProcTileScatter1-2*N-2) && (5*outerTimeTileScatter <= 5*outerProcTileScatter2+M+N) && (5*outerTimeTileScatter >= 10*outerProcTileScatter2-N-3) && (5*outerTimeTileScatter <= 10*outerProcTileScatter2+N+3) && (5*outerTimeTileScatter >= 5*outerProcTileScatter1+5*outerProcTileScatter2-N-4)) { - for (compScatter1=max(max(max(max(max(4,5*outerTimeTileScatter),5*outerProcTileScatter2+1),5*outerProcTileScatter1+5*outerProcTileScatter2-N),10*outerProcTileScatter1-2*N+2),10*outerProcTileScatter2-N+1);compScatter1<=min(min(min(min(min(5*outerTimeTileScatter+4,2*M+2*N-6),5*outerProcTileScatter1+M+2),5*outerProcTileScatter1+5*outerProcTileScatter2+5),5*outerProcTileScatter2+M+N),10*outerProcTileScatter2+N+3);compScatter1++) { - for (compScatter2=max(max(max(max(ceild(compScatter1+4,2),5*outerProcTileScatter1),5*outerProcTileScatter2+1),compScatter1-M+2),compScatter1-5*outerProcTileScatter2-1);compScatter2<=min(min(min(min(floord(compScatter1+2*N-2,2),compScatter1),5*outerProcTileScatter1+4),compScatter1-5*outerProcTileScatter2+N),5*outerProcTileScatter2+N+2);compScatter2++) { - for (compScatter3=max(max(5*outerProcTileScatter2,compScatter1-compScatter2+3),compScatter2-N+2);compScatter3<=min(min(compScatter2-1,5*outerProcTileScatter2+4),compScatter1-compScatter2+N);compScatter3++) { - S1(compScatter1-compScatter2+1,-compScatter1+compScatter2+compScatter3-2,compScatter2-compScatter3,compScatter1,compScatter2,compScatter3); - } - } - } -} diff --git a/cloog-0.16.3/test/classen2.cloog b/cloog-0.16.3/test/classen2.cloog deleted file mode 100644 index dc12884..0000000 --- a/cloog-0.16.3/test/classen2.cloog +++ /dev/null @@ -1,57 +0,0 @@ -# created: Wed Mar 17 17:37:13 CET 2010 -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context (no parameter, so always true) -1 7 - 1 0 0 0 0 0 0 - - -1 # set parameter names -outerTimeTileScatter outerProcTileScatter1 outerProcTileScatter2 M N - -# --------------------- STATEMENTS -------------------- -1 - -1 # domains per statement -20 13 - 1 2 1 1 -1 0 0 0 0 0 0 0 0 - 1 1 1 1 0 -1 0 0 0 0 0 0 1 - 1 1 1 0 0 0 -1 0 0 0 0 0 1 - 1 -2 -1 -1 1 0 0 0 0 0 0 0 0 - 1 -1 -1 -1 0 1 0 0 0 0 0 0 -1 - 1 -1 -1 0 0 0 1 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 0 0 0 0 0 0 0 1 -2 - 1 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 0 0 0 0 0 0 1 -2 - 1 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 0 0 0 0 1 0 -1 - 1 0 0 0 1 0 0 -5 0 0 0 0 0 - 1 0 0 0 0 1 0 0 -5 0 0 0 0 - 1 0 0 0 0 0 1 0 0 -5 0 0 0 - 1 0 0 0 0 0 -1 0 0 5 0 0 4 - 1 0 0 0 0 -1 0 0 5 0 0 0 4 - 1 0 0 0 -1 0 0 5 0 0 0 0 4 - 1 0 0 0 0 0 0 0 0 0 0 1 -3 - 1 0 0 0 0 0 0 0 0 0 1 0 -2 - - -0 0 0 # for future options... - - - -1 # set the iterator names -compIter1 compIter2 compIter3 compIter4 compIter5 compIter6 - -# --------------------- SCATTERING -------------------- -1 # Scattering functions -3 16 - 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - - -1 # we set the scattering dimension names -compScatter1 compScatter2 compScatter3 - diff --git a/cloog-0.16.3/test/classen2.good.c b/cloog-0.16.3/test/classen2.good.c deleted file mode 100644 index 6aa11e4..0000000 --- a/cloog-0.16.3/test/classen2.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/classen2.cloog by CLooG 0.14.0-271-gaa1e292 gmp bits in 0.13s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(compIter1,compIter2,compIter3,compIter4,compIter5,compIter6) { hash(1); hash(compIter1); hash(compIter2); hash(compIter3); hash(compIter4); hash(compIter5); hash(compIter6); } - -void test(int outerTimeTileScatter, int outerProcTileScatter1, int outerProcTileScatter2, int M, int N) -{ - /* Scattering iterators. */ - int compScatter1, compScatter2, compScatter3; - /* Original iterators. */ - int compIter1, compIter2, compIter3, compIter4, compIter5, compIter6; - if ((M >= 2) && (N >= 3) && (outerProcTileScatter1 >= outerProcTileScatter2) && (5*outerProcTileScatter1 <= M+2*N-4) && (5*outerProcTileScatter1 <= 5*outerProcTileScatter2+N+2) && (outerProcTileScatter2 >= 0) && (5*outerProcTileScatter2 <= M+N-2) && (outerTimeTileScatter >= outerProcTileScatter1) && (outerTimeTileScatter <= 2*outerProcTileScatter1) && (outerTimeTileScatter <= outerProcTileScatter1+outerProcTileScatter2+1) && (5*outerTimeTileScatter <= 2*M+2*N-6) && (5*outerTimeTileScatter <= 5*outerProcTileScatter1+M+2) && (5*outerTimeTileScatter >= 10*outerProcTileScatter1-2*N-2) && (5*outerTimeTileScatter <= 5*outerProcTileScatter2+M+N) && (5*outerTimeTileScatter >= 10*outerProcTileScatter2-N-3) && (5*outerTimeTileScatter <= 10*outerProcTileScatter2+N+3) && (5*outerTimeTileScatter >= 5*outerProcTileScatter1+5*outerProcTileScatter2-N-4)) { - for (compScatter1=max(max(max(max(max(4,5*outerTimeTileScatter),5*outerProcTileScatter2+1),5*outerProcTileScatter1+5*outerProcTileScatter2-N),10*outerProcTileScatter1-2*N+2),10*outerProcTileScatter2-N+1);compScatter1<=min(min(min(min(min(5*outerTimeTileScatter+4,2*M+2*N-6),5*outerProcTileScatter1+M+2),5*outerProcTileScatter1+5*outerProcTileScatter2+5),5*outerProcTileScatter2+M+N),10*outerProcTileScatter2+N+3);compScatter1++) { - for (compScatter2=max(max(max(max(ceild(compScatter1+4,2),5*outerProcTileScatter1),5*outerProcTileScatter2+1),compScatter1-M+2),compScatter1-5*outerProcTileScatter2-1);compScatter2<=min(min(min(min(floord(compScatter1+2*N-2,2),compScatter1),5*outerProcTileScatter1+4),compScatter1-5*outerProcTileScatter2+N),5*outerProcTileScatter2+N+2);compScatter2++) { - for (compScatter3=max(max(5*outerProcTileScatter2,compScatter1-compScatter2+3),compScatter2-N+2);compScatter3<=min(min(compScatter2-1,5*outerProcTileScatter2+4),compScatter1-compScatter2+N);compScatter3++) { - S1(compScatter1-compScatter2+1,-compScatter1+compScatter2+compScatter3-2,compScatter2-compScatter3,compScatter1,compScatter2,compScatter3); - } - } - } - } -} diff --git a/cloog-0.16.3/test/constant.c b/cloog-0.16.3/test/constant.c deleted file mode 100644 index 3a6378e..0000000 --- a/cloog-0.16.3/test/constant.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/constant.cloog by CLooG 0.14.0-333-g4442dac gmp bits in 0.01s. */ -for (c2=0;c2<=min(1023,M+1024);c2++) { - S1(c2); - S3(c2); -} -for (c2=max(0,M+1025);c2<=1023;c2++) { - S2(c2); - S3(c2); -} -for (c1=0;c1<=min(1023,M+1024);c1++) { - S4(c1); - S6(c1); -} -for (c1=max(0,M+1025);c1<=1023;c1++) { - S5(c1); - S6(c1); -} diff --git a/cloog-0.16.3/test/constant.cloog b/cloog-0.16.3/test/constant.cloog deleted file mode 100644 index d251b1b..0000000 --- a/cloog-0.16.3/test/constant.cloog +++ /dev/null @@ -1,128 +0,0 @@ -# CLooG -> CLooG -# This is an automatic dump of a CLooG input file from a CloogInput data -# structure. - -# Language: C -c - -# Context: -0 3 - -0 # Parameter name(s) - -# Statement number: -6 - -# Iteration domain of statement 1 (Stmt_if.then). -1 - -3 4 1 0 0 1 -1 1 0 0 -1 -1 0 1023 -1 -1 1 1024 - -0 0 0 # For future options. - -# Iteration domain of statement 2 (Stmt_if.else). -1 - -3 4 1 0 0 1 -1 1 0 0 -1 -1 0 1023 -1 1 -1 -1025 - -0 0 0 # For future options. - -# Iteration domain of statement 3 (Stmt_if.end). -1 - -2 4 1 0 0 1 -1 1 0 0 -1 -1 0 1023 - -0 0 0 # For future options. - -# Iteration domain of statement 1 (Stmt_if.then). -1 - -3 4 1 0 0 1 -1 1 0 0 -1 -1 0 1023 -1 -1 1 1024 - -0 0 0 # For future options. - -# Iteration domain of statement 2 (Stmt_if.else). -1 - -3 4 1 0 0 1 -1 1 0 0 -1 -1 0 1023 -1 1 -1 -1025 - -0 0 0 # For future options. - -# Iteration domain of statement 3 (Stmt_if.end). -1 - -2 4 1 0 0 1 -1 1 0 0 -1 -1 0 1023 - -0 0 0 # For future options. - - -0 # Iterator name(s) - -# --------------------- SCATTERING -------------------- -6 # Scattering functions - -# Scattering of statement 1 (Stmt_if.then). -1 - -3 7 3 1 0 1 -0 0 0 1 0 0 0 -0 0 1 0 -1 0 0 -0 1 0 0 0 0 1 - -# Scattering of statement 2 (Stmt_if.else). -1 - -3 7 3 1 0 1 -0 0 0 1 0 0 -1 -0 0 1 0 -1 0 0 -0 1 0 0 0 0 1 - -# Scattering of statement 3 (Stmt_if.end). -1 - -3 7 3 1 0 1 -0 0 0 1 0 0 -2 -0 0 1 0 -1 0 0 -0 1 0 0 0 0 1 - -# Scattering of statement 1 (Stmt_if.then). -1 - -3 7 3 1 0 1 -0 0 0 1 0 0 0 -0 1 0 0 -1 0 0 -0 0 1 0 0 0 0 - -# Scattering of statement 2 (Stmt_if.else). -1 - -3 7 3 1 0 1 -0 0 0 1 0 0 -1 -0 1 0 0 -1 0 0 -0 0 1 0 0 0 0 - -# Scattering of statement 3 (Stmt_if.end). -1 - -3 7 3 1 0 1 -0 0 0 1 0 0 -2 -0 1 0 0 -1 0 0 -0 0 1 0 0 0 0 - -0 # Scattering dimension name(s) diff --git a/cloog-0.16.3/test/constant.good.c b/cloog-0.16.3/test/constant.good.c deleted file mode 100644 index c94fc44..0000000 --- a/cloog-0.16.3/test/constant.good.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Generated from ../../../git/cloog/test/constant.cloog by CLooG 0.14.0-333-g4442dac gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } -#define S3(i) { hash(3); hash(i); } -#define S4(i) { hash(4); hash(i); } -#define S5(i) { hash(5); hash(i); } -#define S6(i) { hash(6); hash(i); } - -void test(int M) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i; - for (c2=0;c2<=min(1023,M+1024);c2++) { - S1(c2); - S3(c2); - } - for (c2=max(0,M+1025);c2<=1023;c2++) { - S2(c2); - S3(c2); - } - for (c1=0;c1<=min(1023,M+1024);c1++) { - S4(c1); - S6(c1); - } - for (c1=max(0,M+1025);c1<=1023;c1++) { - S5(c1); - S6(c1); - } -} diff --git a/cloog-0.16.3/test/constbound.c b/cloog-0.16.3/test/constbound.c deleted file mode 100644 index c68b1c9..0000000 --- a/cloog-0.16.3/test/constbound.c +++ /dev/null @@ -1,13 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/constbound.cloog by CLooG 0.14.0-170-g72daac3 gmp bits in 0.01s. */ -for (t0=0;t0<=199;t0++) { - for (t2=50*t0;t2<=50*t0+24;t2++) { - for (t3=0;t3<=t2;t3++) { - S1(t0,t2,t3); - } - } - for (t2=50*t0+25;t2<=50*t0+49;t2++) { - for (t3=0;t3<=t2;t3++) { - S2(t0,t2,t3); - } - } -} diff --git a/cloog-0.16.3/test/constbound.cloog b/cloog-0.16.3/test/constbound.cloog deleted file mode 100644 index 78ac963..0000000 --- a/cloog-0.16.3/test/constbound.cloog +++ /dev/null @@ -1,53 +0,0 @@ -# CLooG script generated automatically by PLUTO -# language: C -c - -# Context -0 2 - -1 - - -# Number of statements -2 - -1 # of domains -6 5 -1 0 1 0 0 -1 0 -1 0 9999 -1 0 0 1 0 -1 0 1 -1 0 -1 -50 1 0 0 -1 50 -1 0 24 -0 0 0 - -1 -6 5 -1 0 1 0 0 -1 0 -1 0 9999 -1 0 0 1 0 -1 0 1 -1 0 -1 -50 1 0 -25 -1 50 -1 0 49 -0 0 0 - -0 - -# of scattering functions -2 - -4 9 -0 1 0 0 0 -1 0 0 0 -0 0 1 0 0 0 0 0 0 -0 0 0 1 0 0 -1 0 0 -0 0 0 0 1 0 0 -1 0 - -4 9 -0 1 0 0 0 -1 0 0 0 -0 0 1 0 0 0 0 0 -1 -0 0 0 1 0 0 -1 0 0 -0 0 0 0 1 0 0 -1 0 - -# we will set the scattering dimension names -4 -t0 t1 t2 t3 diff --git a/cloog-0.16.3/test/constbound.good.c b/cloog-0.16.3/test/constbound.good.c deleted file mode 100644 index 30704dd..0000000 --- a/cloog-0.16.3/test/constbound.good.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/constbound.cloog by CLooG 0.14.0-170-g72daac3 64 bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test() -{ - /* Scattering iterators. */ - int t0, t2, t3; - /* Original iterators. */ - int i, j, k; - for (t0=0;t0<=199;t0++) { - for (t2=max(0,50*t0);t2<=50*t0+24;t2++) { - for (t3=0;t3<=t2;t3++) { - S1(t0,t2,t3); - } - } - for (t2=50*t0+25;t2<=min(9999,50*t0+49);t2++) { - for (t3=0;t3<=t2;t3++) { - S2(t0,t2,t3); - } - } - } -} diff --git a/cloog-0.16.3/test/darte.c b/cloog-0.16.3/test/darte.c deleted file mode 100644 index e185b7a..0000000 --- a/cloog-0.16.3/test/darte.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/darte.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.05s. */ -if (n >= 1) { - for (t3=n+3;t3<=3*n+1;t3++) { - if ((t3+n+1)%2 == 0) { - S1(1,n,(t3-n-1)/2); - } - } - for (t1=-n+2;t1<=n-1;t1++) { - if (t1 >= 2) { - for (t3=t1+4;t3<=t1+2*n+2;t3++) { - if ((t1+t3)%2 == 0) { - S1(t1+1,1,(-t1+t3-2)/2); - } - } - } - for (t2=max(-t1+2,t1+2);t2<=-t1+4;t2++) { - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - if ((t1+t3)%2 == 0) { - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2); - } - } - } - } - for (t2=max(-t1+5,t1+3);t2<=min(-t1+2*n,t1+2*n);t2++) { - for (t3=1;t3<=min(n,t2+1);t3++) { - if ((t1+t2+1)%2 == 0) { - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3); - } - } - for (t3=t2+2;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3); - } - if ((t1+t2)%2 == 0) { - if ((t1+t3)%2 == 0) { - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2); - } - } - } - for (t3=max(n+1,t2+2);t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - if ((t1+t3)%2 == 0) { - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2); - } - } - } - } - if (t1 <= -1) { - for (t3=1;t3<=n;t3++) { - S2(t1+n-1,n,t3); - } - } - for (t2=-t1+2*n+1;t2<=min(-t1+2*n+3,t1+2*n+1);t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3); - } - } - } - } - for (t3=1;t3<=n;t3++) { - S2(n,1,t3); - } -} diff --git a/cloog-0.16.3/test/darte.cloog b/cloog-0.16.3/test/darte.cloog deleted file mode 100644 index a853691..0000000 --- a/cloog-0.16.3/test/darte.cloog +++ /dev/null @@ -1,52 +0,0 @@ -# language: C -c - -# parameters n m -1 3 -# n 1 -1 0 0 -1 -n - -2 # Number of statements - -1 -# S1 {i, j, k | 1<=i<=n; 1<=j<=n, 1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 - -1 -# S2 {i, j, k | 1<=i<=n; 1<=j<=n, 1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 -0 - -2 -# Scattering functions -3 9 -# c1 c2 c3 i j k n 1 -0 1 0 0 -1 1 0 0 0 -0 0 1 0 -1 -1 0 0 0 -0 0 0 1 -1 -1 -2 0 0 - -3 9 -# c1 c2 c3 i j k n 1 -0 1 0 0 -1 1 0 0 -1 -0 0 1 0 -1 -1 0 0 -2 -0 0 0 1 0 0 -1 0 0 -1 -t1 t2 t3 diff --git a/cloog-0.16.3/test/darte.good.c b/cloog-0.16.3/test/darte.good.c deleted file mode 100644 index 298c24f..0000000 --- a/cloog-0.16.3/test/darte.good.c +++ /dev/null @@ -1,449 +0,0 @@ -/* Generated from ../../../git/cloog/test/darte.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.27s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int n) -{ - /* Scattering iterators. */ - int t1, t2, t3; - /* Original iterators. */ - int i, j, k; - if (n >= 1) { - t1 = -n+1 ; - t2 = n+1 ; - for (t3=n+3;t3<=3*n+1;t3++) { - if ((t3+n+1)%2 == 0) { - k = (t3-n-1)/2 ; - S1(1,n,(t3-n-1)/2) ; - } - } - } - if ((n >= 2) && (n <= 2)) { - t1 = -n+2 ; - for (t2=-n+4;t2<=3*n-2;t2++) { - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t2+n)%2 == 0) { - i = (t2-n+2)/2 ; - j = (t2+n-2)/2 ; - if ((t3+n)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t2-n+2)/2,(t2+n-2)/2,(-t2+t3)/2) ; - } - } - } - } - t2 = n+3 ; - for (t3=1;t3<=n;t3++) { - S2(1,n,t3) ; - } - } - if (n >= 3) { - t1 = -n+2 ; - for (t2=n;t2<=n+2;t2++) { - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t2+n)%2 == 0) { - i = (t2-n+2)/2 ; - j = (t2+n-2)/2 ; - if ((t3+n)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t2-n+2)/2,(t2+n-2)/2,(-t2+t3)/2) ; - } - } - } - } - t2 = n+3 ; - for (t3=1;t3<=n;t3++) { - S2(1,n,t3) ; - } - } - for (t1=ceild(-2*n+5,2);t1<=min(-n+6,-1);t1++) { - for (t2=-t1+2;t2<=-t1+4;t2++) { - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+5;t2<=t1+2*n;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - t2 = t1+2*n+1 ; - for (t3=1;t3<=n;t3++) { - i = t1+n-1 ; - S2(t1+n-1,n,t3) ; - } - } - if (n == 2) { - for (t3=5;t3<=7;t3++) { - if ((t3+1)%2 == 0) { - k = (t3-3)/2 ; - S1(2,1,(t3-3)/2) ; - } - } - for (t2=4;t2<=6;t2++) { - for (t3=1;t3<=2;t3++) { - if (t2%2 == 0) { - i = (t2-2)/2 ; - j = (t2-2)/2 ; - S2((t2-2)/2,(t2-2)/2,t3) ; - } - } - } - } - for (t1=-n+7;t1<=-1;t1++) { - for (t2=-t1+2;t2<=-t1+4;t2++) { - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+5;t2<=n-2;t2++) { - for (t3=1;t3<=t2+1;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - for (t3=n+1;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=n-1;t2<=t1+2*n;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - t2 = t1+2*n+1 ; - for (t3=1;t3<=n;t3++) { - i = t1+n-1 ; - S2(t1+n-1,n,t3) ; - } - } - if (n >= 3) { - for (t1=0;t1<=min(1,-n+6);t1++) { - for (t2=t1+2;t2<=-t1+4;t2++) { - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+5;t2<=-t1+2*n;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+2*n+1;t2<=t1+2*n+1;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - } - } - } - for (t1=max(-n+7,0);t1<=1;t1++) { - for (t2=t1+2;t2<=-t1+4;t2++) { - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+5;t2<=n-2;t2++) { - for (t3=1;t3<=t2+1;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - for (t3=n+1;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=n-1;t2<=-t1+2*n;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+2*n+1;t2<=t1+2*n+1;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - } - } - for (t1=2;t1<=n-5;t1++) { - t2 = t1+2 ; - for (t3=t1+4;t3<=t1+2*n+2;t3++) { - i = t1+1 ; - if ((t1+t3)%2 == 0) { - k = (-t1+t3-2)/2 ; - S1(t1+1,1,(-t1+t3-2)/2) ; - } - } - for (t2=t1+3;t2<=n-2;t2++) { - for (t3=1;t3<=t2+1;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - for (t3=n+1;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=n-1;t2<=-t1+2*n;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+2*n+1;t2<=-t1+2*n+3;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - } - } - for (t1=max(2,n-4);t1<=floord(2*n-3,2);t1++) { - t2 = t1+2 ; - for (t3=t1+4;t3<=t1+2*n+2;t3++) { - i = t1+1 ; - if ((t1+t3)%2 == 0) { - k = (-t1+t3-2)/2 ; - S1(t1+1,1,(-t1+t3-2)/2) ; - } - } - for (t2=t1+3;t2<=-t1+2*n;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+2*n+1;t2<=-t1+2*n+3;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - } - } - if (n >= 3) { - t1 = n-1 ; - t2 = n+1 ; - for (t3=n+3;t3<=3*n+1;t3++) { - if ((t3+n+1)%2 == 0) { - k = (t3-n-1)/2 ; - S1(n,1,(t3-n-1)/2) ; - } - } - for (t2=n+2;t2<=n+4;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t2+n)%2 == 0) { - i = (t2+n-4)/2 ; - j = (t2-n)/2 ; - S2((t2+n-4)/2,(t2-n)/2,t3) ; - } - } - } - } - if (n >= 1) { - t2 = n+3 ; - for (t3=1;t3<=n;t3++) { - S2(n,1,t3) ; - } - } -} diff --git a/cloog-0.16.3/test/dartef.cloog b/cloog-0.16.3/test/dartef.cloog deleted file mode 100644 index 14454e2..0000000 --- a/cloog-0.16.3/test/dartef.cloog +++ /dev/null @@ -1,52 +0,0 @@ -# language: FORTRAN -f - -# parameters n m -1 3 -# n 1 -1 0 0 -1 -n - -2 # Number of statements - -1 -# S1 {i, j, k | 1<=i<=n; 1<=j<=n, 1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 - -1 -# S2 {i, j, k | 1<=i<=n; 1<=j<=n, 1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 -0 - -2 -# Scattering functions -3 9 -# c1 c2 c3 i j k n 1 -0 1 0 0 -1 1 0 0 0 -0 0 1 0 -1 -1 0 0 0 -0 0 0 1 -1 -1 -2 0 0 - -3 9 -# c1 c2 c3 i j k n 1 -0 1 0 0 -1 1 0 0 -1 -0 0 1 0 -1 -1 0 0 -2 -0 0 0 1 0 0 -1 0 0 -1 -t1 t2 t3 diff --git a/cloog-0.16.3/test/dartef.f b/cloog-0.16.3/test/dartef.f deleted file mode 100644 index 50e1073..0000000 --- a/cloog-0.16.3/test/dartef.f +++ /dev/null @@ -1,65 +0,0 @@ -! Generated from /home/skimo/git/cloog/test/dartef.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.08s. -IF (n >= 1) THEN - DO t3=n+3, 3*n+1 - IF (MOD(t3+n+1, 2) == 0) THEN - S1(1,n,(t3-n-1)/2) - END IF - END DO - DO t1=-n+2, n-1 - IF (t1 >= 2) THEN - DO t3=t1+4, t1+2*n+2 - IF (MOD(t1+t3, 2) == 0) THEN - S1(t1+1,1,(-t1+t3-2)/2) - END IF - END DO - END IF - DO t2=MAX(-t1+2,t1+2), -t1+4 - DO t3=t2+2, t2+2*n - IF (MOD(t1+t2, 2) == 0) THEN - IF (MOD(t1+t3, 2) == 0) THEN - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) - END IF - END IF - END DO - END DO - DO t2=MAX(-t1+5,t1+3), MIN(-t1+2*n,t1+2*n) - DO t3=1, MIN(n,t2+1) - IF (MOD(t1+t2+1, 2) == 0) THEN - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) - END IF - END DO - DO t3=t2+2, n - IF (MOD(t1+t2+1, 2) == 0) THEN - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) - END IF - IF (MOD(t1+t2, 2) == 0) THEN - IF (MOD(t1+t3, 2) == 0) THEN - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) - END IF - END IF - END DO - DO t3=MAX(n+1,t2+2), t2+2*n - IF (MOD(t1+t2, 2) == 0) THEN - IF (MOD(t1+t3, 2) == 0) THEN - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) - END IF - END IF - END DO - END DO - IF (t1 <= -1) THEN - DO t3=1, n - S2(t1+n-1,n,t3) - END DO - END IF - DO t2=-t1+2*n+1, MIN(-t1+2*n+3,t1+2*n+1) - DO t3=1, n - IF (MOD(t1+t2+1, 2) == 0) THEN - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) - END IF - END DO - END DO - END DO - DO t3=1, n - S2(n,1,t3) - END DO -END IF diff --git a/cloog-0.16.3/test/dealII.c b/cloog-0.16.3/test/dealII.c deleted file mode 100644 index 200b257..0000000 --- a/cloog-0.16.3/test/dealII.c +++ /dev/null @@ -1,14 +0,0 @@ -/* Generated from ../../../git/cloog/test/dealII.cloog by CLooG 0.14.0-270-g7ee1261 gmp bits in 0.01s. */ -for (scat_0=0;scat_0<=min(T_66,T_2-1);scat_0++) { - S1(scat_0); - S2(scat_0); -} -if ((T_2 == 0) && (T_67 == 0)) { - S1(0); -} -for (scat_0=max(0,T_66+1);scat_0<=T_2-1;scat_0++) { - S1(scat_0); -} -for (scat_0=T_2;scat_0<=min(T_66,T_67-1);scat_0++) { - S2(scat_0); -} diff --git a/cloog-0.16.3/test/dealII.cloog b/cloog-0.16.3/test/dealII.cloog deleted file mode 100644 index 1c648f4..0000000 --- a/cloog-0.16.3/test/dealII.cloog +++ /dev/null @@ -1,54 +0,0 @@ -# CLooG -> CLooG -# This is an automatic dump of a CLooG input file from a CloogProgram data -# structure. WARNING: it is highly dangerous and MAY be correct ONLY if -# - it has been dumped before loop generation. -# - option -noscalars is used (it removes scalar dimensions otherwise) -# - option -l is at least the original scattering dimension number -# ASK THE AUTHOR IF YOU *NEED* SOMETHING MORE ROBUST -# Language: C -c - -# Context (3 parameter(s)): -4 5 -1 -1 0 0 4 -1 1 0 0 0 -1 0 -1 0 4 -1 0 1 0 0 -1 # Parameter name(s) -T_2 T_67 T_66 - -# Statement number: -2 - -# Iteration domain of statement 1. -2 - -2 6 -1 -1 1 0 0 -1 -1 1 0 0 0 0 - -2 6 -1 -1 0 -1 0 0 -1 1 0 0 0 0 -0 0 0 # For future options. - -# Iteration domain of statement 2. -2 - -3 6 -1 -1 1 0 0 -1 -1 1 0 0 0 0 -1 -1 0 0 1 0 - -3 6 -1 -1 0 1 0 -1 -1 1 0 0 0 0 -1 -1 0 0 1 0 -0 0 0 # For future options. - -1 # Iterator name(s) -scat_0 scat_1 scat_2 git_0 - -# No scattering functions. -0 - diff --git a/cloog-0.16.3/test/dealII.good.c b/cloog-0.16.3/test/dealII.good.c deleted file mode 100644 index 9a220ff..0000000 --- a/cloog-0.16.3/test/dealII.good.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Generated from ../../../git/cloog/test/dealII.cloog by CLooG 0.14.0-270-g7ee1261 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(scat_0) { hash(1); hash(scat_0); } -#define S2(scat_0) { hash(2); hash(scat_0); } - -void test(int T_2, int T_67, int T_66) -{ - /* Original iterators. */ - int scat_0; - for (scat_0=0;scat_0<=min(T_66,T_2-1);scat_0++) { - S1(scat_0); - S2(scat_0); - } - if ((T_2 == 0) && (T_67 == 0)) { - S1(0); - } - for (scat_0=max(0,T_66+1);scat_0<=T_2-1;scat_0++) { - S1(scat_0); - } - for (scat_0=T_2;scat_0<=min(T_66,T_67-1);scat_0++) { - S2(scat_0); - } -} diff --git a/cloog-0.16.3/test/donotsimp.c b/cloog-0.16.3/test/donotsimp.c deleted file mode 100644 index bccb8b4..0000000 --- a/cloog-0.16.3/test/donotsimp.c +++ /dev/null @@ -1,9 +0,0 @@ -/* Generated from ../../../git/cloog/test/donotsimp.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -for (c2=1;c2<=10;c2++) { - for (c4=1;c4<=c2;c4++) { - S1(c2,c4) ; - } - for (c4=11;c4<=M;c4++) { - S2(c2,c4) ; - } -} diff --git a/cloog-0.16.3/test/donotsimp.cloog b/cloog-0.16.3/test/donotsimp.cloog deleted file mode 100644 index 6450917..0000000 --- a/cloog-0.16.3/test/donotsimp.cloog +++ /dev/null @@ -1,54 +0,0 @@ -# Language -c - -# Context - -# {n>=20} - 1 3 - 1 1 -20 -0 - -# Number of statments -2 - -1 -# {i,j | 0<=i<=10 1<=j<=i} - - 4 5 - 1 1 0 0 -1 - 1 -1 0 0 10 - 1 0 1 0 -1 - 1 1 -1 0 0 -0 0 0 - -1 -# {i,j | 0<=i<=10 11<=j<=n} - - 4 5 - 1 1 0 0 -1 - 1 -1 0 0 10 - 1 0 1 0 -11 - 1 0 -1 1 0 -0 0 0 - -0 -# Scattering functions -2 - - 5 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - - 5 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - - -0 - diff --git a/cloog-0.16.3/test/donotsimp.good.c b/cloog-0.16.3/test/donotsimp.good.c deleted file mode 100644 index 8e45ab8..0000000 --- a/cloog-0.16.3/test/donotsimp.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/donotsimp.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - for (c2=1;c2<=10;c2++) { - for (c4=1;c4<=c2;c4++) { - S1(c2,c4) ; - } - for (c4=11;c4<=M;c4++) { - S2(c2,c4) ; - } - } -} diff --git a/cloog-0.16.3/test/dot.c b/cloog-0.16.3/test/dot.c deleted file mode 100644 index 5114ef1..0000000 --- a/cloog-0.16.3/test/dot.c +++ /dev/null @@ -1,9 +0,0 @@ -/* Generated from ../../../git/cloog/test/dot.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (j=1;j<=M;j++) { - S1(0,j) ; -} -for (i=1;i<=N;i++) { - for (j=1;j<=M;j++) { - S2(i,j) ; - } -} diff --git a/cloog-0.16.3/test/dot.cloog b/cloog-0.16.3/test/dot.cloog deleted file mode 100644 index 112816e..0000000 --- a/cloog-0.16.3/test/dot.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# language: C -c - -# parameters {M, N | M>=1 N >=1} -2 4 -1 1 0 -1 -1 0 1 -1 -0 - -2 # Number of statements - -1 -# {i, j | i=0 0<=i<=N 1<=j<=M} -5 6 -0 1 0 0 0 0 -1 1 0 0 0 0 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 - -1 -# {i, j | i>=1 0<=i<=N 1<=j<=M} -5 6 -1 1 0 0 0 -1 -1 1 0 0 0 0 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/dot.good.c b/cloog-0.16.3/test/dot.good.c deleted file mode 100644 index 9cb7b96..0000000 --- a/cloog-0.16.3/test/dot.good.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated from ../../../git/cloog/test/dot.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - for (j=1;j<=M;j++) { - S1(0,j) ; - } - for (i=1;i<=N;i++) { - for (j=1;j<=M;j++) { - S2(i,j) ; - } - } -} diff --git a/cloog-0.16.3/test/dot2.c b/cloog-0.16.3/test/dot2.c deleted file mode 100644 index 3b6eb5d..0000000 --- a/cloog-0.16.3/test/dot2.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Generated from ../../../git/cloog/test/dot2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -for (i=1;i<=min(M,N);i++) { - S1(i) ; - for (j=1;j<=M;j++) { - S2(i,j) ; - } -} -for (i=N+1;i<=M;i++) { - S1(i) ; -} -for (i=M+1;i<=N;i++) { - for (j=1;j<=M;j++) { - S2(i,j) ; - } -} diff --git a/cloog-0.16.3/test/dot2.cloog b/cloog-0.16.3/test/dot2.cloog deleted file mode 100644 index 71f471a..0000000 --- a/cloog-0.16.3/test/dot2.cloog +++ /dev/null @@ -1,29 +0,0 @@ -# language: C -c - -# parameters {M, N | M>=1 N >=1} -2 4 -1 1 0 -1 -1 0 1 -1 -0 - -2 # Number of statements - -1 -# {i | 1<=i<=M} -2 5 -1 1 0 0 -1 -1 -1 1 0 0 -0 0 0 - -1 -# {i, j | 1<=i<=N 1<=j<=M} -4 6 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/dot2.good.c b/cloog-0.16.3/test/dot2.good.c deleted file mode 100644 index 9b7805c..0000000 --- a/cloog-0.16.3/test/dot2.good.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Generated from ../../../git/cloog/test/dot2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - for (i=1;i<=min(M,N);i++) { - S1(i) ; - for (j=1;j<=M;j++) { - S2(i,j) ; - } - } - for (i=N+1;i<=M;i++) { - S1(i) ; - } - for (i=M+1;i<=N;i++) { - for (j=1;j<=M;j++) { - S2(i,j) ; - } - } -} diff --git a/cloog-0.16.3/test/double.c b/cloog-0.16.3/test/double.c deleted file mode 100644 index b8e5e59..0000000 --- a/cloog-0.16.3/test/double.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from ../../../git/cloog/test/double.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (M >= 0) { - for (i=0;i<=M;i++) { - S1(i) ; - for (j=0;j<=N;j++) { - S2(i,j) ; - S3(i,j) ; - } - S4(i) ; - } -} diff --git a/cloog-0.16.3/test/double.cloog b/cloog-0.16.3/test/double.cloog deleted file mode 100644 index a9db60d..0000000 --- a/cloog-0.16.3/test/double.cloog +++ /dev/null @@ -1,69 +0,0 @@ -# language: C -c - -# parameters n m -1 4 -# n m 1 -1 0 1 0 -0 - -4 # Number of statements - -1 -# S1 {i | 0<=i<=n} -2 5 -# i n m 1 -1 1 0 0 0 -1 -1 1 0 0 -0 0 0 - -1 -# S2 {i, j | 0<=i<=n; 0<=j<=m} -4 6 -# i j n m 1 -1 1 0 0 0 0 -1 -1 0 1 0 0 -1 0 1 0 0 0 -1 0 -1 0 1 0 -0 0 0 - -1 -# S3 {i, j | 0<=i<=n; 0<=j<=m} -4 6 -# i j n m 1 -1 1 0 0 0 0 -1 -1 0 1 0 0 -1 0 1 0 0 0 -1 0 -1 0 1 0 -0 0 0 - -1 -# S4 {i | 0<=i<=n} -2 5 -# i n m 1 -1 1 0 0 0 -1 -1 1 0 0 -0 0 0 -0 - -0 # Scattering functions -2 7 -# c1 C2 i n m 1 -0 1 0 -1 0 0 0 -0 0 1 0 0 0 -1 - -2 8 -# c1 C2 i j n m 1 -0 1 0 -1 0 0 0 0 -0 0 1 0 0 0 0 -2 - -2 8 -# c1 C2 i j n m 1 -0 1 0 -1 0 0 0 0 -0 0 1 0 0 0 0 -3 - -2 7 -# c1 C2 i n m 1 -0 1 0 -1 0 0 0 -0 0 1 0 0 0 -4 -0 diff --git a/cloog-0.16.3/test/double.good.c b/cloog-0.16.3/test/double.good.c deleted file mode 100644 index 7aa0eb3..0000000 --- a/cloog-0.16.3/test/double.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/double.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } -#define S4(i) { hash(4); hash(i); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - for (i=0;i<=M;i++) { - S1(i) ; - for (j=0;j<=N;j++) { - S2(i,j) ; - S3(i,j) ; - } - S4(i) ; - } -} diff --git a/cloog-0.16.3/test/durbin_e_s.c b/cloog-0.16.3/test/durbin_e_s.c deleted file mode 100644 index d0301c8..0000000 --- a/cloog-0.16.3/test/durbin_e_s.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated from ../../../git/cloog/test/durbin_e_s.cloog by CLooG 0.14.0-238-gb1cb779 gmp bits in 0.01s. */ -S4(1,0,0); -S7(1,0,0); -S8(1,0,3); -for (i=2;i<=9;i++) { - S2(i,-7,0); - for (j=-7;j<=i-9;j++) { - S3(i,j,1); - } - S6(i,i-9,2); - S8(i,0,3); - for (j=1;j<=i-1;j++) { - S5(i,j,3); - } -} -S2(10,-7,0); -for (j=-7;j<=1;j++) { - S3(10,j,1); -} -S6(10,1,2); -for (j=1;j<=9;j++) { - S5(10,j,3); - S1(10,j,4); -} -S1(10,10,4); diff --git a/cloog-0.16.3/test/durbin_e_s.cloog b/cloog-0.16.3/test/durbin_e_s.cloog deleted file mode 100644 index 55c0859..0000000 --- a/cloog-0.16.3/test/durbin_e_s.cloog +++ /dev/null @@ -1,71 +0,0 @@ -# language: C -c - -# Context -0 2 - -0 # parameter names - - -8 # Number of statements - -1 -4 5 - 0 1 0 0 -10 - 0 0 0 1 -4 - 1 0 1 0 -1 - 1 0 -1 0 10 -0 0 0 -1 -4 5 - 0 0 1 0 7 - 0 0 0 1 0 - 1 1 0 0 -2 - 1 -1 0 0 10 -0 0 0 -1 -4 5 - 0 0 0 1 -1 - 1 0 1 0 7 - 1 -1 0 0 10 - 1 1 -1 0 -9 -0 0 0 -1 -4 5 - 0 1 0 0 -1 - 0 0 1 0 0 - 0 0 0 1 0 - 1 0 0 0 1 -0 0 0 -1 -4 5 - 0 0 0 1 -3 - 1 1 -1 0 -1 - 1 -1 0 0 10 - 1 0 1 0 -1 -0 0 0 -1 -4 5 - 0 1 -1 0 -9 - 0 0 0 1 -2 - 1 0 1 0 7 - 1 0 -1 0 1 -0 0 0 -1 -4 5 - 0 1 0 0 -1 - 0 0 1 0 0 - 0 0 0 1 0 - 1 0 0 0 1 -0 0 0 -1 -4 5 - 0 0 1 0 0 - 0 0 0 1 -3 - 1 1 0 0 -1 - 1 -1 0 0 9 -0 0 0 -0 # iterator names -0 # scattering functions -0 # scattering dimension names - diff --git a/cloog-0.16.3/test/durbin_e_s.good.c b/cloog-0.16.3/test/durbin_e_s.good.c deleted file mode 100644 index f96d006..0000000 --- a/cloog-0.16.3/test/durbin_e_s.good.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Generated from ../../../git/cloog/test/durbin_e_s.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.05s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } -#define S4(i,j,k) { hash(4); hash(i); hash(j); hash(k); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } -#define S6(i,j,k) { hash(6); hash(i); hash(j); hash(k); } -#define S7(i,j,k) { hash(7); hash(i); hash(j); hash(k); } -#define S8(i,j,k) { hash(8); hash(i); hash(j); hash(k); } - -void test() -{ - /* Original iterators. */ - int i, j, k; - S4(1,0,0) ; - S7(1,0,0) ; - S8(1,0,3) ; - S2(2,-7,0) ; - S3(2,-7,1) ; - S6(2,-7,2) ; - S8(2,0,3) ; - S5(2,1,3) ; - S2(3,-7,0) ; - S3(3,-7,1) ; - S3(3,-6,1) ; - S6(3,-6,2) ; - S8(3,0,3) ; - for (j=1;j<=2;j++) { - S5(3,j,3) ; - } - for (i=4;i<=8;i++) { - S2(i,-7,0) ; - S3(i,-7,1) ; - for (j=-6;j<=i-10;j++) { - S3(i,j,1) ; - } - j = i-9 ; - S3(i,i-9,1) ; - S6(i,i-9,2) ; - S8(i,0,3) ; - for (j=1;j<=i-1;j++) { - S5(i,j,3) ; - } - } - S2(9,-7,0) ; - S3(9,-7,1) ; - for (j=-6;j<=-1;j++) { - S3(9,j,1) ; - } - S3(9,0,1) ; - S6(9,0,2) ; - S8(9,0,3) ; - for (j=1;j<=8;j++) { - S5(9,j,3) ; - } - S2(10,-7,0) ; - S3(10,-7,1) ; - for (j=-6;j<=0;j++) { - S3(10,j,1) ; - } - S3(10,1,1) ; - S6(10,1,2) ; - S5(10,1,3) ; - S1(10,1,4) ; - for (j=2;j<=9;j++) { - S5(10,j,3) ; - S1(10,j,4) ; - } - S1(10,10,4) ; -} diff --git a/cloog-0.16.3/test/emploi.c b/cloog-0.16.3/test/emploi.c deleted file mode 100644 index 1716721..0000000 --- a/cloog-0.16.3/test/emploi.c +++ /dev/null @@ -1,16 +0,0 @@ -/* Generated from ../../../git/cloog/test/emploi.cloog by CLooG 0.14.0-245-gd8c1718 gmp bits in 0.01s. */ -if (n >= 1) { - if (m >= 1) { - for (i=1;i<=n;i++) { - S1(i); - for (j=1;j<=m;j++) { - S2(i,j); - } - } - } - if (m <= 0) { - for (i=1;i<=n;i++) { - S1(i); - } - } -} diff --git a/cloog-0.16.3/test/emploi.cloog b/cloog-0.16.3/test/emploi.cloog deleted file mode 100644 index 0dd7a26..0000000 --- a/cloog-0.16.3/test/emploi.cloog +++ /dev/null @@ -1,49 +0,0 @@ -# language: C -c - -# The context (no constraints on parameters) -1 4 # 1 lines and 4 columns -# m n 1 -1 0 0 0 # 0 >= 0, always true -1 # We want to set the parameter names -m n - -2 # The number of statements - -2 # First statement -# The first domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 -1 2 0 0 # i <= 2*m -# The second domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 1 -1 0 0 # i >= m -0 0 0 - -1 # Second statement -4 6 # 4 lines and 6 columns -# i j m n 1 -1 1 0 0 0 -1 # i >= 1 -1 -1 0 0 1 0 # i <= n -1 0 1 0 0 -1 # j >= 1 -1 0 -1 1 0 0 # j <= m -0 0 0 -0 - -0 # Scattering functions -# The first function -2 7 # 2 lines and 7 columns -# c1 c2 i m n 1 -0 1 0 -1 0 0 0 # c1 = i -0 0 1 0 0 0 0 # c2 = 0 -# The second function -2 8 # 2 lines and 8 columns -# c1 c2 i j m n 1 -0 1 0 0 0 0 -1 0 # c1 = n -0 0 1 -1 -1 0 0 0 # c2 = i+j -0 diff --git a/cloog-0.16.3/test/emploi.good.c b/cloog-0.16.3/test/emploi.good.c deleted file mode 100644 index ad812d8..0000000 --- a/cloog-0.16.3/test/emploi.good.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Generated from ../../../git/cloog/test/emploi.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int m, int n) -{ - /* Original iterators. */ - int i, j; - if (m >= 1) { - for (i=1;i<=n;i++) { - if (i >= m) { - S1(i) ; - } - if (i <= min(2*m,m-1)) { - S1(i) ; - } - for (j=1;j<=m;j++) { - S2(i,j) ; - } - } - } - if (m <= 0) { - for (i=1;i<=n;i++) { - S1(i) ; - } - } -} diff --git a/cloog-0.16.3/test/equality.c b/cloog-0.16.3/test/equality.c deleted file mode 100644 index 86b024d..0000000 --- a/cloog-0.16.3/test/equality.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from ../../../git/cloog/test/equality.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -for (i0=0;i0<=5;i0++) { - for (i1=ceild(4*i0,5);i1<=floord(6*i0+20,5);i1++) { - if (2*i0 == i1) { - S1(i0,i1) ; - } - if (i1 == 4) { - S2(i0,i1) ; - } - } -} diff --git a/cloog-0.16.3/test/equality.cloog b/cloog-0.16.3/test/equality.cloog deleted file mode 100644 index da83671..0000000 --- a/cloog-0.16.3/test/equality.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# Language: C -c - -# Context (0 parameter(s)): -1 2 - 1 1 -1 # Parameter name(s) - - -# Statement number: -2 - -# Iteration domain of statement 1. -1 -3 4 -0 2 -1 0 -1 1 0 0 -1 -1 0 5 -0 0 0 # For future options. - -# Iteration domain of statement 2. -1 -3 4 -0 0 -1 4 -1 1 0 0 -1 -1 0 5 -0 0 0 # For future options. - -1 # Iterator name(s) -i0 i1 - -# No scattering functions. -0 diff --git a/cloog-0.16.3/test/equality.good.c b/cloog-0.16.3/test/equality.good.c deleted file mode 100644 index 371f48b..0000000 --- a/cloog-0.16.3/test/equality.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/equality.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i0,i1) { hash(1); hash(i0); hash(i1); } -#define S2(i0,i1) { hash(2); hash(i0); hash(i1); } - -void test() -{ - /* Original iterators. */ - int i0, i1; - for (i0=0;i0<=5;i0++) { - for (i1=ceild(4*i0,5);i1<=floord(6*i0+20,5);i1++) { - if (2*i0 == i1) { - S1(i0,i1) ; - } - if (i1 == 4) { - S2(i0,i1) ; - } - } - } -} diff --git a/cloog-0.16.3/test/equality2.c b/cloog-0.16.3/test/equality2.c deleted file mode 100644 index ea28ab2..0000000 --- a/cloog-0.16.3/test/equality2.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Generated from ../../../git/cloog/test/equality2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.07s. */ -for (i0=1;i0<=10000;i0++) { - for (i1=1000;i1<=1016;i1++) { - for (i2=1;i2<=min(-2*i1+2033,2*i1-1999);i2++) { - if (2*i1 == i2+1999) { - S2(i0,i1,i2,1,i0,2*i1-1000,1,2,i0,i1-499,2*i1-1999,i0,2*i1-1999,i1-999,i1-999) ; - } - if (i2 == 1) { - if (i1%2 == 0) { - S1(i0,i1,i2,2,i0,(i1+2)/2,i1-999,i0,i1-999,(i1-998)/2,(i1-998)/2) ; - } - } - } - } -} diff --git a/cloog-0.16.3/test/equality2.cloog b/cloog-0.16.3/test/equality2.cloog deleted file mode 100644 index c62469c..0000000 --- a/cloog-0.16.3/test/equality2.cloog +++ /dev/null @@ -1,57 +0,0 @@ -c - -# Context (0 parameter(s)): -1 2 - 1 1 -1 # Parameter name(s) - - -# Statement number: -2 - -# Iteration domain of statement 2. -1 -13 13 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 -2 -998 - 0 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 1 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 -1 -500 - 0 0 0 0 0 0 0 1 0 0 0 -2 1 - 0 0 0 0 0 0 0 0 0 1 0 -2 1 - 0 0 0 0 0 0 0 0 0 0 1 -1 0 - 1 0 0 0 0 0 0 0 1 0 0 0 -1 - 1 0 0 0 0 0 0 0 -1 0 0 0 10000 - 1 0 0 0 0 0 0 0 0 0 0 1 -1 - 1 0 0 0 0 0 0 0 0 0 0 -1 9 -0 0 0 # For future options. - -# Iteration domain of statement 3. -1 -17 17 - 0 1 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 -999 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -2 1 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -2 -998 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 -500 - 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -2 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -2 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 10000 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 9 -0 0 0 # For future options. - - -1 # Iterator name(s) -i0 i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 i14 - -# No scattering functions. -0 diff --git a/cloog-0.16.3/test/equality2.good.c b/cloog-0.16.3/test/equality2.good.c deleted file mode 100644 index 74bf88b..0000000 --- a/cloog-0.16.3/test/equality2.good.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Generated from ../../../git/cloog/test/equality2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.05s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) { hash(1); hash(i0); hash(i1); hash(i2); hash(i3); hash(i4); hash(i5); hash(i6); hash(i7); hash(i8); hash(i9); hash(i10); } -#define S2(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) { hash(2); hash(i0); hash(i1); hash(i2); hash(i3); hash(i4); hash(i5); hash(i6); hash(i7); hash(i8); hash(i9); hash(i10); hash(i11); hash(i12); hash(i13); hash(i14); } - -void test() -{ - /* Original iterators. */ - int i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14; - for (i0=1;i0<=10000;i0++) { - for (i1=1000;i1<=1016;i1++) { - for (i2=1;i2<=min(-2*i1+2033,2*i1-1999);i2++) { - if (2*i1 == i2+1999) { - S2(i0,i1,i2,1,i0,2*i1-1000,1,2,i0,i1-499,2*i1-1999,i0,2*i1-1999,i1-999,i1-999) ; - } - if (i2 == 1) { - if (i1%2 == 0) { - S1(i0,i1,i2,2,i0,(i1+2)/2,i1-999,i0,i1-999,(i1-998)/2,(i1-998)/2) ; - } - } - } - } - } -} diff --git a/cloog-0.16.3/test/esced.c b/cloog-0.16.3/test/esced.c deleted file mode 100644 index d26d395..0000000 --- a/cloog-0.16.3/test/esced.c +++ /dev/null @@ -1,16 +0,0 @@ -/* Generated from ../../../git/cloog/test/esced.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (m >= 1) { - if (n >= 1) { - for (i=1;i<=m;i++) { - S1(i) ; - for (j=1;j<=n;j++) { - S2(i,j) ; - } - } - } - if (n <= 0) { - for (i=1;i<=m;i++) { - S1(i) ; - } - } -} diff --git a/cloog-0.16.3/test/esced.cloog b/cloog-0.16.3/test/esced.cloog deleted file mode 100644 index 9caba01..0000000 --- a/cloog-0.16.3/test/esced.cloog +++ /dev/null @@ -1,30 +0,0 @@ -# language: C -c - -# parameters {n, m | n<=m} -1 4 -#1 1 -1 0 -1 0 0 1 -1 -n m - -2 # Number of statements - -1 -# {i | 1<=i<=n} -2 5 -1 1 0 0 -1 -1 -1 0 1 0 -0 0 0 - -1 -# {i, j | 1<=i<=n 1<=j<=m} -4 6 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/esced.good.c b/cloog-0.16.3/test/esced.good.c deleted file mode 100644 index cab5f34..0000000 --- a/cloog-0.16.3/test/esced.good.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Generated from ../../../git/cloog/test/esced.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int n, int m) -{ - /* Original iterators. */ - int i, j; - if (n >= 1) { - for (i=1;i<=m;i++) { - S1(i) ; - for (j=1;j<=n;j++) { - S2(i,j) ; - } - } - } - if (n <= 0) { - for (i=1;i<=m;i++) { - S1(i) ; - } - } -} diff --git a/cloog-0.16.3/test/ex1.c b/cloog-0.16.3/test/ex1.c deleted file mode 100644 index b5584c0..0000000 --- a/cloog-0.16.3/test/ex1.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Generated from ../../../git/cloog/test/ex1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -for (i=0;i<=14;i++) { - for (j=0;j<=n-15;j++) { - S1(i,j) ; - } -} -for (i=15;i<=n;i++) { - for (j=0;j<=9;j++) { - S1(i,j) ; - } - for (j=10;j<=n-15;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=n-14;j<=n;j++) { - S2(i,j) ; - } -} diff --git a/cloog-0.16.3/test/ex1.cloog b/cloog-0.16.3/test/ex1.cloog deleted file mode 100644 index 6a85398..0000000 --- a/cloog-0.16.3/test/ex1.cloog +++ /dev/null @@ -1,34 +0,0 @@ -# language: C -c - -# parameters {n} -1 3 -# n 1 -1 1 -25 -1 -n - -2 # Number of statements - -1 -# {i | 0<=i<=n, 0<=j<=n-15} -4 5 -# i j n 1 -1 1 0 0 0 -1 -1 0 1 0 -1 0 1 0 0 -1 0 -1 1 -15 -0 0 0 - -1 -# {i | 15<=i<=n, 10<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -15 -1 -1 0 1 0 -1 0 1 0 -10 -1 0 -1 1 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/ex1.good.c b/cloog-0.16.3/test/ex1.good.c deleted file mode 100644 index b73fd94..0000000 --- a/cloog-0.16.3/test/ex1.good.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Generated from ../../../git/cloog/test/ex1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int n) -{ - /* Original iterators. */ - int i, j; - for (i=0;i<=14;i++) { - for (j=0;j<=n-15;j++) { - S1(i,j) ; - } - } - for (i=15;i<=n;i++) { - for (j=0;j<=9;j++) { - S1(i,j) ; - } - for (j=10;j<=n-15;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=n-14;j<=n;j++) { - S2(i,j) ; - } - } -} diff --git a/cloog-0.16.3/test/forwardsub-1-1-2.c b/cloog-0.16.3/test/forwardsub-1-1-2.c deleted file mode 100644 index 58ce5c8..0000000 --- a/cloog-0.16.3/test/forwardsub-1-1-2.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from ../../../git/cloog/test/forwardsub-1-1-2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -S3(1,1) ; -S1(2,1) ; -S4(2,2) ; -for (i=3;i<=M;i++) { - S1(i,1) ; - for (j=2;j<=i-1;j++) { - S2(i,j) ; - } - S4(i,i) ; -} diff --git a/cloog-0.16.3/test/forwardsub-1-1-2.cloog b/cloog-0.16.3/test/forwardsub-1-1-2.cloog deleted file mode 100644 index 38986f9..0000000 --- a/cloog-0.16.3/test/forwardsub-1-1-2.cloog +++ /dev/null @@ -1,56 +0,0 @@ -# language: C -c - -# Context -#{N | 3<=N} -2 3 -# M 1 -1 1 -3 -1 0 1 -0 - -4 # Number of statements - -1 -#{t1,t2 | 2<=t1<=N; t2=1; 3<=N} -5 5 -# i j M 1 -0 0 1 0 -1 -1 0 0 1 -3 -1 -1 0 1 0 -1 1 0 0 -2 -1 0 0 0 1 -0 0 0 - -1 -#{t1,t2 | t2+1<=t1<=N; 2<=t2} -4 5 -# i j M 1 -1 1 -1 0 -1 -1 0 1 0 -2 -1 -1 0 1 0 -1 0 0 0 1 -0 0 0 - -1 -#{t1,t2 | t1=1; t2=1; 3<=N} -4 5 -# i j M 1 -0 1 0 0 -1 -0 0 1 0 -1 -1 0 0 1 -3 -1 0 0 0 1 -0 0 0 - -1 -#{t1,t2 | t1=t2; 2<=t2<=N; 3<=N} -4 5 -# i j M 1 -0 1 -1 0 0 -1 0 0 1 -3 -1 0 -1 1 0 -1 0 1 0 -2 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/forwardsub-1-1-2.good.c b/cloog-0.16.3/test/forwardsub-1-1-2.good.c deleted file mode 100644 index cebe239..0000000 --- a/cloog-0.16.3/test/forwardsub-1-1-2.good.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/forwardsub-1-1-2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } -#define S4(i,j) { hash(4); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - S3(1,1) ; - S1(2,1) ; - S4(2,2) ; - for (i=3;i<=M;i++) { - S1(i,1) ; - for (j=2;j<=i-1;j++) { - S2(i,j) ; - } - S4(i,i) ; - } -} diff --git a/cloog-0.16.3/test/forwardsub-2-1-2-3.c b/cloog-0.16.3/test/forwardsub-2-1-2-3.c deleted file mode 100644 index 7c4bc22..0000000 --- a/cloog-0.16.3/test/forwardsub-2-1-2-3.c +++ /dev/null @@ -1,12 +0,0 @@ -/* Generated from ../../../git/cloog/test/forwardsub-2-1-2-3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -S3(1,0) ; -for (k=2;k<=M;k++) { - S1(1,1,k) ; -} -for (i=2;i<=M-1;i++) { - S4(i,0) ; - for (k=i+1;k<=M;k++) { - S2(i,1,k) ; - } -} -S4(M,0) ; diff --git a/cloog-0.16.3/test/forwardsub-2-1-2-3.cloog b/cloog-0.16.3/test/forwardsub-2-1-2-3.cloog deleted file mode 100644 index 33d29f3..0000000 --- a/cloog-0.16.3/test/forwardsub-2-1-2-3.cloog +++ /dev/null @@ -1,58 +0,0 @@ -# language: C -c - -# Context -#{M | 3<=M} -2 3 -# M 1 -1 1 -3 -1 0 1 -0 - -4 # Number of statements - -1 -#{i,j,k | i=1; j=1; 2<=k<=M; 3<=M} -6 6 -# i j k M 1 -0 1 0 0 0 -1 -0 0 1 0 0 -1 -1 0 0 0 1 -3 -1 0 0 -1 1 0 -1 0 0 1 0 -2 -1 0 0 0 0 1 -0 0 0 - -1 -#{i,j,k | 2<=i<=k-1; j=1; k<=M} -5 6 -# i j k M 1 -0 0 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 0 0 -2 -1 0 0 -1 1 0 -1 0 0 0 0 1 -0 0 0 - -1 -#{i,j | i=1; j=0; 3<=M} -4 5 -# i j M 1 -0 1 0 0 -1 -0 0 1 0 0 -1 0 0 1 -3 -1 0 0 0 1 -0 0 0 - -1 -#{i,j | 2<=i<=M; j=0; 3<=M} -4 5 -# i j M 1 -0 0 1 0 0 -1 1 0 0 -2 -1 0 0 1 -3 -1 -1 0 1 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/forwardsub-2-1-2-3.good.c b/cloog-0.16.3/test/forwardsub-2-1-2-3.good.c deleted file mode 100644 index 69ff99c..0000000 --- a/cloog-0.16.3/test/forwardsub-2-1-2-3.good.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Generated from ../../../git/cloog/test/forwardsub-2-1-2-3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j) { hash(3); hash(i); hash(j); } -#define S4(i,j) { hash(4); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j, k; - S3(1,0) ; - for (k=2;k<=M;k++) { - S1(1,1,k) ; - } - for (i=2;i<=M-1;i++) { - S4(i,0) ; - for (k=i+1;k<=M;k++) { - S2(i,1,k) ; - } - } - S4(M,0) ; -} diff --git a/cloog-0.16.3/test/forwardsub-3-1-2.c b/cloog-0.16.3/test/forwardsub-3-1-2.c deleted file mode 100644 index 0f398ed..0000000 --- a/cloog-0.16.3/test/forwardsub-3-1-2.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Generated from ../../../git/cloog/test/forwardsub-3-1-2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -S3(2,1) ; -S1(3,1) ; -S1(4,1) ; -S4(4,2) ; -for (i=5;i<=M+1;i++) { - S1(i,1) ; - for (j=2;j<=floord(i-1,2);j++) { - S2(i,j) ; - } - if (i%2 == 0) { - S4(i,i/2) ; - } -} -for (i=M+2;i<=2*M-1;i++) { - for (j=i-M;j<=floord(i-1,2);j++) { - S2(i,j) ; - } - if (i%2 == 0) { - S4(i,i/2) ; - } -} -S4(2*M,M) ; diff --git a/cloog-0.16.3/test/forwardsub-3-1-2.cloog b/cloog-0.16.3/test/forwardsub-3-1-2.cloog deleted file mode 100644 index 6e41e75..0000000 --- a/cloog-0.16.3/test/forwardsub-3-1-2.cloog +++ /dev/null @@ -1,57 +0,0 @@ -# language: C -c - -# Context -#{N | 3<=N} -2 3 -# M 1 -1 1 -3 -1 0 1 -0 - -4 # Number of statements - -1 -#{t1,i | 3<=t1<=N+1; i=1; 3<=N} -5 5 -# i j M 1 -0 0 1 0 -1 -1 0 0 1 -3 -1 -1 0 1 1 -1 1 0 0 -3 -1 0 0 0 1 -0 0 0 - -1 -#{t1,i | 2i+1<=t1<=i+N; 2<=i} -4 5 -# i j M 1 -1 1 -2 0 -1 -1 0 1 0 -2 -1 -1 1 1 0 -1 0 0 0 1 -0 0 0 - -1 -#{t1,i | t1=2; i=1; 3<=N} -4 5 -# i j M 1 -0 1 0 0 -2 -0 0 1 0 -1 -1 0 0 1 -3 -1 0 0 0 1 -0 0 0 - -1 -#{t1,i | t1=2i; 2<=i<=N; 3<=N} -5 5 -# i j M 1 -0 1 -2 0 0 -1 0 0 1 -3 -1 0 -1 1 0 -1 0 1 0 -2 -1 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/forwardsub-3-1-2.good.c b/cloog-0.16.3/test/forwardsub-3-1-2.good.c deleted file mode 100644 index 2969ae8..0000000 --- a/cloog-0.16.3/test/forwardsub-3-1-2.good.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Generated from ../../../git/cloog/test/forwardsub-3-1-2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } -#define S4(i,j) { hash(4); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - S3(2,1) ; - S1(3,1) ; - S1(4,1) ; - S4(4,2) ; - for (i=5;i<=M+1;i++) { - S1(i,1) ; - for (j=2;j<=floord(i-1,2);j++) { - S2(i,j) ; - } - if (i%2 == 0) { - S4(i,i/2) ; - } - } - for (i=M+2;i<=2*M-1;i++) { - for (j=i-M;j<=floord(i-1,2);j++) { - S2(i,j) ; - } - if (i%2 == 0) { - S4(i,i/2) ; - } - } - i = 2*M ; - S4(2*M,M) ; -} diff --git a/cloog-0.16.3/test/gauss.c b/cloog-0.16.3/test/gauss.c deleted file mode 100644 index 341c2aa..0000000 --- a/cloog-0.16.3/test/gauss.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Generated from ../../../git/cloog/test/gauss.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.03s. */ -if (M >= 2) { - for (c2=2;c2<=M;c2++) { - for (j=2;j<=M;j++) { - S2(1,j,c2) ; - } - } - for (c1=2;c1<=M-1;c1++) { - for (c2=c1+1;c2<=M;c2++) { - for (j=1;j<=c1-1;j++) { - S1(c1,j,c2) ; - } - for (j=c1+1;j<=M;j++) { - S2(c1,j,c2) ; - } - } - } -} diff --git a/cloog-0.16.3/test/gauss.cloog b/cloog-0.16.3/test/gauss.cloog deleted file mode 100644 index 0a84b01..0000000 --- a/cloog-0.16.3/test/gauss.cloog +++ /dev/null @@ -1,72 +0,0 @@ -# language: C -c - -# parameter n -1 3 -# n 1 -1 0 1 -0 - -2 # Number of statements - -1 -# {i, j, k | 1<=i<=n; 1<=j<=i-1 i+1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 1 -1 0 0 -1 -1 -1 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 - -1 -# {i, j, k | 1<=i<=n; i+1<=j<=n i+1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 -1 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 -0 - -2 # Scattering functions -# Et les instructions de chunking... -2 8 -# c1 c2 i j k n 1 -0 1 0 -1 0 0 0 0 -0 0 1 0 0 -1 0 0 - -2 8 -# c1 c2 i j k n 1 -0 1 0 -1 0 0 0 0 -0 0 1 0 0 -1 0 0 -0 - -2 -# Et les instructions de chunking... -1 7 -# c1 i j k n 1 -0 1 0 0 0 -1 2 - -1 7 -# c1 i j k n 1 -0 1 -1 0 0 0 1 -0 - -2 -# Et les instructions de chunking... -2 8 -# c1 c2 i j k n 1 -0 1 0 -1 0 0 0 0 -0 0 1 0 0 -1 0 0 - -2 8 -# c1 c2 i j k n 1 -0 1 0 -1 0 0 0 0 -0 0 1 0 0 -1 0 0 -0 diff --git a/cloog-0.16.3/test/gauss.good.c b/cloog-0.16.3/test/gauss.good.c deleted file mode 100644 index fb1939d..0000000 --- a/cloog-0.16.3/test/gauss.good.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Generated from ../../../git/cloog/test/gauss.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int M) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j, k; - if (M >= 2) { - for (c2=2;c2<=M;c2++) { - for (j=2;j<=M;j++) { - S2(1,j,c2) ; - } - } - } - for (c1=2;c1<=M-1;c1++) { - for (c2=c1+1;c2<=M;c2++) { - for (j=1;j<=c1-1;j++) { - S1(c1,j,c2) ; - } - for (j=c1+1;j<=M;j++) { - S2(c1,j,c2) ; - } - } - } -} diff --git a/cloog-0.16.3/test/generate_test.c b/cloog-0.16.3/test/generate_test.c deleted file mode 100644 index 40a8dbd..0000000 --- a/cloog-0.16.3/test/generate_test.c +++ /dev/null @@ -1,153 +0,0 @@ -#include -#include - -/* Generate code that scans part of the parameter domain of - * a given cloog problem, running both a function called "good" - * and a function called "test" for each value of the parameters. - * These functions are assumed to call the "hash" function, - * which is also generated by this program. - * If for any given value of the parameters, the final hash - * value computed by test is different from that computed by - * good, then an error is reported. - */ - -CloogDomain *get_param_domain(CloogOptions *options) -{ - CloogDomain *domain; - CloogProgram *program; - - program = cloog_program_read(stdin, options); - - domain = cloog_domain_copy(program->context); - - cloog_program_free(program); - - return cloog_domain_from_context(domain); -} - -static const char preamble[] = -"#include \n" -"#include \n" -"\n" -"static unsigned h;\n" -"\n" -"void hash(int v)\n" -"{\n" -" int i;\n" -" union u {\n" -" int v;\n" -" unsigned char c[1];\n" -" } u;\n" -" u.v = v;\n" -" for (i = 0; i < sizeof(int); ++i) {\n" -" h *= 16777619;\n" -" h ^= u.c[i];\n" -" }\n" -"}\n" -"\n" -"int main()\n" -"{\n" -" unsigned h_good, h_test;\n"; -; - -static const char postamble[] = -" return 0;\n" -"}\n" -; - -static const char *call[] = {"good", "test"}; - -static void print_macros(FILE *file) -{ - fprintf(file, "/* Useful macros. */\n") ; - fprintf(file, - "#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d))\n"); - fprintf(file, - "#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d))\n"); - fprintf(file, "#define max(x,y) ((x) > (y) ? (x) : (y))\n") ; - fprintf(file, "#define min(x,y) ((x) < (y) ? (x) : (y))\n\n") ; -} - -int main() -{ - int dim; - int range; - int i, j; - CloogState *state = cloog_state_malloc(); - CloogOptions *options = cloog_options_malloc(state); - CloogDomain *domain; - CloogDomain *cube, *tmp; - CloogProgram *p; - CloogStatement *statement; - cloog_int_t m, M; - - options->quiet = 1; - domain = get_param_domain(options); - dim = cloog_domain_dimension(domain); - - if (dim >= 8) - range = 4; - else if (dim >= 5) - range = 6; - else - range = 30; - - cloog_int_init(m); - cloog_int_init(M); - cloog_int_set_si(m, 0); - cloog_int_set_si(M, range); - cube = cloog_domain_cube(state, dim, m, M); - domain = cloog_domain_intersection(tmp = domain, cube); - cloog_domain_free(tmp); - cloog_domain_free(cube); - - p = cloog_program_malloc(); - assert(p); - p->names = cloog_names_malloc(); - assert(p->names); - p->names->nb_iterators = dim; - p->names->iterators = cloog_names_generate_items(dim, "p", 0); - p->language = 'c'; - p->context = cloog_domain_universe(state, 0); - statement = cloog_statement_alloc(state, 1); - p->loop = cloog_loop_malloc(state); - p->loop->domain = domain; - p->loop->block = cloog_block_alloc(statement, 0, NULL, dim); - p->blocklist = cloog_block_list_alloc(p->loop->block); - p = cloog_program_generate(p, options); - - printf("%s", preamble); - for (i = 0; i < dim; ++i) - printf("\tint %s;\n", p->names->iterators[i]); - printf("#define S1("); - for (i = 0; i < dim; ++i) { - if (i) - printf(","); - printf("p%d", i); - } - printf(") do {"); - for (j = 0; j < 2; ++j) { - printf(" h = 2166136261u;"); - printf(" %s(", call[j]); - for (i = 0; i < dim; ++i) { - if (i) - printf(", "); - printf("p%d", i); - } - printf(");"); - printf(" h_%s = h;", call[j]); - } - printf(" assert(h_good == h_test);"); - printf(" } while (0)\n"); - print_macros(stdout); - cloog_program_pprint(stdout, p, options); - printf("%s", postamble); - - cloog_int_clear(m); - cloog_int_clear(M); - cloog_program_free(p); - cloog_options_free(options); - cloog_state_free(state); - - return 0; -} diff --git a/cloog-0.16.3/test/gesced.c b/cloog-0.16.3/test/gesced.c deleted file mode 100644 index 6b69507..0000000 --- a/cloog-0.16.3/test/gesced.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Generated from ../../../git/cloog/test/gesced.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.05s. */ -for (c1=1;c1<=N;c1++) { - S1(c1) ; -} -for (c1=N+1;c1<=2*N;c1++) { - for (i=1;i<=N;i++) { - S2(i,c1-N) ; - } -} -for (c1=2*N+1;c1<=M+N;c1++) { - for (i=1;i<=N;i++) { - S3(i,c1-2*N) ; - S2(i,c1-N) ; - } -} -for (c1=M+N+1;c1<=M+2*N;c1++) { - for (i=1;i<=N;i++) { - S3(i,c1-2*N) ; - } -} diff --git a/cloog-0.16.3/test/gesced.cloog b/cloog-0.16.3/test/gesced.cloog deleted file mode 100644 index 5f37046..0000000 --- a/cloog-0.16.3/test/gesced.cloog +++ /dev/null @@ -1,56 +0,0 @@ -# language: C -c - -# parameters {n, m | n<=m n>=2 m>=2} -3 4 -# m n 1 -1 1 -1 0 -1 1 0 -2 -1 0 1 -2 -0 - -3 # Number of statements - -1 -# {i | 1<=i<=n} -2 5 -# i m n 1 -1 1 0 0 -1 -1 -1 0 1 0 -0 0 0 - -1 -# {i, j | 1<=i<=n 1<=j<=m} -4 6 -# i j m n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 - -1 -# {i, j | 1<=i<=n 1<=j<=m} -4 6 -# i j m n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -3 # Scattering functions -# Et les instructions de chunking (prog init)... -1 6 -# c1 i m n 1 -0 1 -1 0 0 0 - -1 7 -# c1 i j m n 1 -0 1 0 -1 0 -1 0 - -1 7 -# c1 i j m n 1 -0 1 0 -1 0 -2 0 -0 diff --git a/cloog-0.16.3/test/gesced.good.c b/cloog-0.16.3/test/gesced.good.c deleted file mode 100644 index bae55dd..0000000 --- a/cloog-0.16.3/test/gesced.good.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Generated from ../../../git/cloog/test/gesced.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i, j; - for (c1=1;c1<=N;c1++) { - S1(c1) ; - } - for (c1=N+1;c1<=2*N;c1++) { - for (i=1;i<=N;i++) { - j = c1-N ; - S2(i,c1-N) ; - } - } - for (c1=2*N+1;c1<=M+N;c1++) { - for (i=1;i<=N;i++) { - j = c1-2*N ; - S3(i,c1-2*N) ; - j = c1-N ; - S2(i,c1-N) ; - } - } - for (c1=M+N+1;c1<=M+2*N;c1++) { - for (i=1;i<=N;i++) { - j = c1-2*N ; - S3(i,c1-2*N) ; - } - } -} diff --git a/cloog-0.16.3/test/gesced2.c b/cloog-0.16.3/test/gesced2.c deleted file mode 100644 index 5cebdb5..0000000 --- a/cloog-0.16.3/test/gesced2.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/gesced2.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.03s. */ -for (c1=1;c1<=4;c1++) { - for (c2=5;c2<=M-10;c2++) { - S1(c1,c2); - } -} -for (c1=5;c1<=M-10;c1++) { - for (c2=-c1+1;c2<=4;c2++) { - S2(c1+c2,c1); - } - for (c2=5;c2<=min(M-10,-c1+M);c2++) { - S1(c1,c2); - S2(c1+c2,c1); - } - for (c2=-c1+M+1;c2<=M-10;c2++) { - S1(c1,c2); - } - for (c2=M-9;c2<=-c1+M;c2++) { - S2(c1+c2,c1); - } -} -for (c1=M-9;c1<=M;c1++) { - for (c2=5;c2<=M-10;c2++) { - S1(c1,c2); - } -} diff --git a/cloog-0.16.3/test/gesced2.cloog b/cloog-0.16.3/test/gesced2.cloog deleted file mode 100644 index 982368b..0000000 --- a/cloog-0.16.3/test/gesced2.cloog +++ /dev/null @@ -1,82 +0,0 @@ -# language: C -c - -# parameters {n | n>=16} -1 3 -# n 1 -1 1 -16 -0 - -2 # Number of statements - -1 -# {i, j | 1<=i<=n 5<=j<=n-10} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 -5 -1 0 -1 1 -10 -0 0 0 - -1 -# {i, j | 1<=i<=n 5<=j<=n-10} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 -5 -1 0 -1 1 -10 -0 0 0 -0 - -2 # Scattering functions -# Et les instructions de chunking (sol triviale)... -2 7 -# c1 c2 i j n 1 -0 1 0 -1 0 0 0 -0 0 1 0 -1 0 0 - -2 7 -# c1 c2 i j n 1 -0 1 0 0 -1 0 0 -0 0 1 -1 1 0 0 -0 - -# Et les instructions de chunking (sol aux inverse)... -2 7 -# c1 c2 i j n 1 -0 1 0 -10 -3 0 -5 -0 0 1 -4 -1 0 5 - -2 7 -# c1 c2 i j n 1 -0 1 0 -9 -4 0 -15 -0 0 1 -5 0 0 0 -0 - -2 -# Et les instructions de chunking (sol aux egalites)... -2 7 -# c1 c2 i j n 1 -0 1 0 1 -2 0 -30 -0 0 1 -1 1 0 30 - -2 7 -# c1 c2 i j n 1 -0 1 0 -1 1 0 15 -0 0 1 1 -2 0 -30 -0 - -# Et les instructions de chunking (sol triviale)... -2 7 -# c1 c2 i j n 1 -0 1 0 -1 0 0 0 -0 0 1 0 -1 0 5 - -2 7 -# c1 c2 i j n 1 -0 1 0 0 -1 0 -10 -0 0 1 -1 0 0 0 -0 - diff --git a/cloog-0.16.3/test/gesced2.good.c b/cloog-0.16.3/test/gesced2.good.c deleted file mode 100644 index 669093a..0000000 --- a/cloog-0.16.3/test/gesced2.good.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Generated from ../../../git/cloog/test/gesced2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.04s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j; - for (c1=1;c1<=4;c1++) { - for (c2=5;c2<=M-10;c2++) { - S1(c1,c2) ; - } - } - for (c1=5;c1<=min(M-10,9);c1++) { - for (c2=-c1+1;c2<=4;c2++) { - i = c1+c2 ; - S2(c1+c2,c1) ; - } - for (c2=5;c2<=M-10;c2++) { - S1(c1,c2) ; - i = c1+c2 ; - S2(c1+c2,c1) ; - } - for (c2=M-9;c2<=-c1+M;c2++) { - i = c1+c2 ; - S2(c1+c2,c1) ; - } - } - if (M >= 20) { - for (c2=-9;c2<=4;c2++) { - i = c2+10 ; - S2(c2+10,10) ; - } - for (c2=5;c2<=M-10;c2++) { - S1(10,c2) ; - i = c2+10 ; - S2(c2+10,10) ; - } - } - for (c1=11;c1<=M-10;c1++) { - for (c2=-c1+1;c2<=4;c2++) { - i = c1+c2 ; - S2(c1+c2,c1) ; - } - for (c2=5;c2<=-c1+M;c2++) { - S1(c1,c2) ; - i = c1+c2 ; - S2(c1+c2,c1) ; - } - for (c2=-c1+M+1;c2<=M-10;c2++) { - S1(c1,c2) ; - } - } - for (c1=M-9;c1<=M;c1++) { - for (c2=5;c2<=M-10;c2++) { - S1(c1,c2) ; - } - } -} diff --git a/cloog-0.16.3/test/gesced3.c b/cloog-0.16.3/test/gesced3.c deleted file mode 100644 index 8d2119d..0000000 --- a/cloog-0.16.3/test/gesced3.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from ../../../git/cloog/test/gesced3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -for (c1=M+1;c1<=2*M;c1++) { - S1(c1-M) ; -} -for (c1=2*M+1;c1<=M+N;c1++) { - S2(c1-2*M) ; - S1(c1-M) ; -} -for (c1=M+N+1;c1<=2*M+N;c1++) { - S2(c1-2*M) ; -} diff --git a/cloog-0.16.3/test/gesced3.cloog b/cloog-0.16.3/test/gesced3.cloog deleted file mode 100644 index 758924c..0000000 --- a/cloog-0.16.3/test/gesced3.cloog +++ /dev/null @@ -1,39 +0,0 @@ -# language: C -c - -# parametres {n | n>=m m>=2} -2 4 -# m n 1 -1 -1 1 0 -1 1 0 -2 -0 - -2 # Number of statements - -1 -# {i | 1<=i<=n} -2 5 -# i m n 1 -1 1 0 0 -1 -1 -1 0 1 0 -0 0 0 - -1 -# {i | 1<=i<=n} -2 5 -# i m n 1 -1 1 0 0 -1 -1 -1 0 1 0 -0 0 0 -0 - -2 -# Et les instructions de chunking (sol triviale)... -1 6 -# c1 i m n 1 -0 1 -1 -1 0 0 - -1 6 -# c1 i m n 1 -0 1 -1 -2 0 0 -0 diff --git a/cloog-0.16.3/test/gesced3.good.c b/cloog-0.16.3/test/gesced3.good.c deleted file mode 100644 index 43708fc..0000000 --- a/cloog-0.16.3/test/gesced3.good.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Generated from ../../../git/cloog/test/gesced3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i; - for (c1=M+1;c1<=2*M;c1++) { - i = c1-M ; - S1(c1-M) ; - } - for (c1=2*M+1;c1<=M+N;c1++) { - i = c1-2*M ; - S2(c1-2*M) ; - i = c1-M ; - S1(c1-M) ; - } - for (c1=M+N+1;c1<=2*M+N;c1++) { - i = c1-2*M ; - S2(c1-2*M) ; - } -} diff --git a/cloog-0.16.3/test/guide.c b/cloog-0.16.3/test/guide.c deleted file mode 100644 index 31e9db1..0000000 --- a/cloog-0.16.3/test/guide.c +++ /dev/null @@ -1,9 +0,0 @@ -/* Generated from ../../../git/cloog/test/guide.cloog by CLooG 0.14.0-245-gd8c1718 gmp bits in 0.00s. */ -if (N >= 1) { - for (i=1;i<=N;i++) { - S1(i); - } - for (i=N+1;i<=2*N;i++) { - S2(i); - } -} diff --git a/cloog-0.16.3/test/guide.cloog b/cloog-0.16.3/test/guide.cloog deleted file mode 100644 index 5a35582..0000000 --- a/cloog-0.16.3/test/guide.cloog +++ /dev/null @@ -1,35 +0,0 @@ -# Language is C -c - -# The context (no constraints on parameters) -1 4 # 1 lines and 4 columns -# m n 1 -1 0 0 0 # 0 >= 0, always true -0 # CLooG will set parameters names automatically - -2 # The number of statements - -2 # First statement -# The first domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 -1 2 0 0 # i <= 2*m -# The second domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 1 -1 0 0 # i >= m -0 0 0 - -1 # Second statement -2 5 # 4 lines and 6 columns -# i m n 1 -1 1 0 -1 -1 # i >= 1 -1 -1 0 2 0 # i <= n -0 0 0 -0 # CLooG will set iterators names automatically - -0 diff --git a/cloog-0.16.3/test/guide.good.c b/cloog-0.16.3/test/guide.good.c deleted file mode 100644 index 31e0346..0000000 --- a/cloog-0.16.3/test/guide.good.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Generated from ../../../git/cloog/test/guide.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i; - for (i=1;i<=N;i++) { - if (i >= M) { - S1(i) ; - } - if (i <= min(2*M,M-1)) { - S1(i) ; - } - } - for (i=N+1;i<=2*N;i++) { - S2(i) ; - } -} diff --git a/cloog-0.16.3/test/iftest.c b/cloog-0.16.3/test/iftest.c deleted file mode 100644 index 8f95ef8..0000000 --- a/cloog-0.16.3/test/iftest.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/iftest.cloog by CLooG 0.14.0-245-gd8c1718 gmp bits in 0.00s. */ -if (n >= 1) { - for (i=1;i<=n;i++) { - S1(i); - } -} diff --git a/cloog-0.16.3/test/iftest.cloog b/cloog-0.16.3/test/iftest.cloog deleted file mode 100644 index 0adbc8d..0000000 --- a/cloog-0.16.3/test/iftest.cloog +++ /dev/null @@ -1,28 +0,0 @@ -# language: C -c -# The context (no constraints on parameters) -1 4 # 1 lines and 4 columns -# m n 1 -1 0 0 0 -1 -m n - -1 # The number of statements - -2 # First statement -# The first domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 1 -1 0 0 # i >= m -# The second domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 -1 2 0 0 # i <= 2*m -0 0 0 -0 - -0 diff --git a/cloog-0.16.3/test/iftest.good.c b/cloog-0.16.3/test/iftest.good.c deleted file mode 100644 index 4ce26e4..0000000 --- a/cloog-0.16.3/test/iftest.good.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Generated from ../../../git/cloog/test/iftest.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test(int m, int n) -{ - /* Original iterators. */ - int i; - for (i=1;i<=n;i++) { - if (i <= 2*m) { - S1(i) ; - } - if (i >= max(m,2*m+1)) { - S1(i) ; - } - } -} diff --git a/cloog-0.16.3/test/iftest2.c b/cloog-0.16.3/test/iftest2.c deleted file mode 100644 index 355aa74..0000000 --- a/cloog-0.16.3/test/iftest2.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/iftest2.cloog by CLooG 0.14.0-245-gd8c1718 gmp bits in 0.00s. */ -if ((M >= 1) && (N >= 1)) { - for (i=1;i<=N;i++) { - for (j=1;j<=M;j++) { - S1(i,j); - } - } -} diff --git a/cloog-0.16.3/test/iftest2.cloog b/cloog-0.16.3/test/iftest2.cloog deleted file mode 100644 index 2bd7336..0000000 --- a/cloog-0.16.3/test/iftest2.cloog +++ /dev/null @@ -1,31 +0,0 @@ -# language: C -c -# The context (no constraints on parameters) -1 4 # 1 lines and 4 columns -# m n 1 -1 0 0 0 -0 - -1 # The number of statements - -2 # First statement -# The first domain -5 6 # 3 lines and 5 columns -# i j m n 1 -1 1 0 0 0 -1 # i >= 1 -1 -1 0 0 1 0 # i <= n -1 1 0 -1 0 0 # i >= m -1 0 1 0 0 -1 -1 0 -1 1 0 0 -# The second domain -5 6 # 3 lines and 5 columns -# i j m n 1 -1 1 0 0 0 -1 # i >= 1 -1 -1 0 0 1 0 # i <= n -1 -1 0 2 0 0 # i <= 2*m -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -0 diff --git a/cloog-0.16.3/test/iftest2.good.c b/cloog-0.16.3/test/iftest2.good.c deleted file mode 100644 index 9e7f514..0000000 --- a/cloog-0.16.3/test/iftest2.good.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Generated from ../../../git/cloog/test/iftest2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - if (M >= 1) { - for (i=1;i<=N;i++) { - for (j=1;j<=M;j++) { - if (i <= 2*M) { - S1(i,j) ; - } - if (i >= max(M,2*M+1)) { - S1(i,j) ; - } - } - } - } -} diff --git a/cloog-0.16.3/test/iftestf.cloog b/cloog-0.16.3/test/iftestf.cloog deleted file mode 100644 index 1f0d6a9..0000000 --- a/cloog-0.16.3/test/iftestf.cloog +++ /dev/null @@ -1,29 +0,0 @@ -# language: FORTRAN -f - -# The context (no constraints on parameters) -1 4 # 1 lines and 4 columns -# m n 1 -1 0 0 0 -1 -m n - -1 # The number of statements - -2 # First statement -# The first domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 1 -1 0 0 # i >= m -# The second domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 -1 2 0 0 # i <= 2*m -0 0 0 -0 - -0 diff --git a/cloog-0.16.3/test/iftestf.f b/cloog-0.16.3/test/iftestf.f deleted file mode 100644 index 65685b9..0000000 --- a/cloog-0.16.3/test/iftestf.f +++ /dev/null @@ -1,6 +0,0 @@ -! Generated from ../../../git/cloog/test/iftestf.cloog by CLooG 0.14.0-245-gd8c1718 gmp bits in 0.00s. -IF (n >= 1) THEN - DO i=1, n - S1(i) - END DO -END IF diff --git a/cloog-0.16.3/test/infinite.c b/cloog-0.16.3/test/infinite.c deleted file mode 100644 index 10f35f2..0000000 --- a/cloog-0.16.3/test/infinite.c +++ /dev/null @@ -1,13 +0,0 @@ -/* Generated from ../../../git/cloog/test/infinite.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -for (;i<=0;i++) { - S1(i) ; -} -for (i=1;i<=N;i++) { - S1(i) ; - for (j=1;j<=M;j++) { - S2(i,j) ; - } -} -for (i=N+1;;i++) { - S1(i) ; -} diff --git a/cloog-0.16.3/test/infinite.cloog b/cloog-0.16.3/test/infinite.cloog deleted file mode 100644 index dacc187..0000000 --- a/cloog-0.16.3/test/infinite.cloog +++ /dev/null @@ -1,32 +0,0 @@ -# langage -c - -# parametres {M, N | M>=1 N >=1} -2 4 -# M N 1 -1 1 0 -1 -1 0 1 -1 -0 - -2 # Number of statements - -1 -# {i | 1<=i<=M} -0 5 -# i M N 1 -#1 1 0 0 -1 -#1 -1 1 0 0 -0 0 0 - -1 -# {i, j | 1<=i<=N 1<=j<=M} -4 6 -# i j M N 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/infinite2.c b/cloog-0.16.3/test/infinite2.c deleted file mode 100644 index 80a0b35..0000000 --- a/cloog-0.16.3/test/infinite2.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/infinite2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (i=1;i<=N;i++) { - S1(i) ; - for (j=1;j<=M;j++) { - S2(i,j) ; - } -} -for (i=N+1;;i++) { - S1(i) ; -} diff --git a/cloog-0.16.3/test/infinite2.cloog b/cloog-0.16.3/test/infinite2.cloog deleted file mode 100644 index 2d7cf97..0000000 --- a/cloog-0.16.3/test/infinite2.cloog +++ /dev/null @@ -1,32 +0,0 @@ -# langage -c - -# parametres {M, N | M>=1 N >=1} -2 4 -# M N 1 -1 1 0 -1 -1 0 1 -1 -0 - -2 # Number of statements - -1 -# {i | 1<=i<=M} -1 5 -# i M N 1 -1 1 0 0 -1 -#1 -1 1 0 0 -0 0 0 - -1 -# {i, j | 1<=i<=N 1<=j<=M} -4 6 -# i j M N 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/infinite3.c b/cloog-0.16.3/test/infinite3.c deleted file mode 100644 index 9e4292c..0000000 --- a/cloog-0.16.3/test/infinite3.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Generated from ../../../git/cloog/test/infinite3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.03s. */ -for (;i<=0;i++) { - S1(i) ; -} -for (i=1;i<=min(M,N);i++) { - S1(i) ; - for (j=1;j<=M;j++) { - S2(i,j) ; - } -} -for (i=N+1;i<=M;i++) { - S1(i) ; -} -for (i=M+1;i<=N;i++) { - for (j=1;j<=M;j++) { - S2(i,j) ; - } -} diff --git a/cloog-0.16.3/test/infinite3.cloog b/cloog-0.16.3/test/infinite3.cloog deleted file mode 100644 index 9154a0e..0000000 --- a/cloog-0.16.3/test/infinite3.cloog +++ /dev/null @@ -1,32 +0,0 @@ -# langage -c - -# parametres {M, N | M>=1 N >=1} -2 4 -# M N 1 -1 1 0 -1 -1 0 1 -1 -0 - -2 # Number of statements - -1 -# {i | 1<=i<=M} -1 5 -# i M N 1 -#1 1 0 0 -1 -1 -1 1 0 0 -0 0 0 - -1 -# {i, j | 1<=i<=N 1<=j<=M} -4 6 -# i j M N 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/infinite4.c b/cloog-0.16.3/test/infinite4.c deleted file mode 100644 index fff00ed..0000000 --- a/cloog-0.16.3/test/infinite4.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Generated from ../../../git/cloog/test/infinite4.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (;;i++) { - S1(i) ; -} diff --git a/cloog-0.16.3/test/infinite4.cloog b/cloog-0.16.3/test/infinite4.cloog deleted file mode 100644 index 5502453..0000000 --- a/cloog-0.16.3/test/infinite4.cloog +++ /dev/null @@ -1,16 +0,0 @@ -# langage -c - -# Context -0 2 -0 - -1 # Number of statements - -1 -# {i | 1<=i<=M} -0 3 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/isl/jacobi-shared.c b/cloog-0.16.3/test/isl/jacobi-shared.c deleted file mode 100644 index 3246227..0000000 --- a/cloog-0.16.3/test/isl/jacobi-shared.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/jacobi-shared.cloog by CLooG 0.16.2-19-gfcd8fdc gmp bits in 1.65s. */ -if ((h0+1)%2 == 0) { - if ((16*floord(g1+t0-3,16) >= -N+g1+t0+1) && (16*floord(N+15*g1+15*t0+15,16) >= 16*g1+15*t0+17) && (floord(t1-1,32) <= floord(g2+t1-3,32)) && (32*floord(t1-1,32) >= -N+g2+t1+1)) { - for (c0=max(-16*floord(t0-1,16)+t0,-16*floord(g1+t0-3,16)+t0);c0<=min(32,N-g1-1);c0+=16) { - c1 = -32*floord(t1-1,32)+t1; - if (c1 <= 32) { - S1(c0+g1-1,c1+g2-1); - } - } - } -} diff --git a/cloog-0.16.3/test/isl/jacobi-shared.cloog b/cloog-0.16.3/test/isl/jacobi-shared.cloog deleted file mode 100644 index 25e4903..0000000 --- a/cloog-0.16.3/test/isl/jacobi-shared.cloog +++ /dev/null @@ -1,129 +0,0 @@ -# CLooG -> CLooG -# This is an automatic dump of a CLooG input file from a CloogInput data -# structure. - -# Language: C -c - -# Context: -1 - -22 16 0 0 2 12 -0 0 1024 0 0 0 0 32 0 0 -1 0 0 0 0 0 -0 2048 0 0 0 0 32 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 29 -1 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 29 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 63 -1 0 0 0 1 0 0 -32 0 0 0 0 0 0 0 -2 -1 0 0 0 1 0 -32 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -4 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 0 0 2 0 -1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 -32 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -32 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 31 - -1 # Parameter name(s) -T N h0 b0 b1 g0 g1 g2 g3 g4 t0 t1 - -# Statement number: -1 - -# Iteration domain of statement 1 (write_shared_A). -1 - -33 21 2 0 5 12 -0 0 1 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 -1 1 -0 1 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 -1 0 1 -0 0 0 0 0 1024 0 0 0 0 0 0 992 0 0 1 0 0 0 0 0 -0 0 0 0 2048 0 0 0 0 0 0 2016 0 0 1 0 0 0 0 0 0 -0 0 0 2 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 -0 0 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 2 0 -1 0 0 0 0 0 0 0 0 0 -1 -1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 -1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -1 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 63 -1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 31 -1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -4 -1 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 29 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 29 -1 0 0 0 0 0 0 0 0 0 0 -32 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 -32 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 -32 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 1 0 0 -32 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 31 - -0 0 0 # For future options. - - -0 # Iterator name(s) -# --------------------- SCATTERING -------------------- -1 # Scattering functions - -# Scattering of statement 1 (write_shared_A). -1 - -37 25 4 2 5 12 -0 0 0 0 0 0 1 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 -1 1 -0 0 0 0 0 1 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 -1 0 1 -0 0 0 0 0 0 0 0 0 1024 0 0 0 0 0 0 992 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 2048 0 0 0 0 0 0 2016 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 2 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 -0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 2 0 -1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 63 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 31 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -4 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 29 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 29 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -32 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -32 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -32 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -32 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 31 - -1 # Scattering dimension name(s) -c0 c1 c2 c3 diff --git a/cloog-0.16.3/test/isl/jacobi-shared.good.c b/cloog-0.16.3/test/isl/jacobi-shared.good.c deleted file mode 100644 index fcd67dc..0000000 --- a/cloog-0.16.3/test/isl/jacobi-shared.good.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/jacobi-shared.cloog by CLooG 0.16.2-19-gfcd8fdc gmp bits in 1.65s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int T, int N, int h0, int b0, int b1, int g0, int g1, int g2, int g3, int g4, int t0, int t1) -{ - /* Scattering iterators. */ - int c0, c1, c2, c3; - /* Original iterators. */ - int i, j; - if ((h0+1)%2 == 0) { - if ((16*floord(g1+t0-3,16) >= -N+g1+t0+1) && (16*floord(N+15*g1+15*t0+15,16) >= 16*g1+15*t0+17) && (floord(t1-1,32) <= floord(g2+t1-3,32)) && (32*floord(t1-1,32) >= -N+g2+t1+1)) { - for (c0=max(-16*floord(t0-1,16)+t0,-16*floord(g1+t0-3,16)+t0);c0<=min(32,N-g1-1);c0+=16) { - c1 = -32*floord(t1-1,32)+t1; - if (c1 <= 32) { - S1(c0+g1-1,c1+g2-1); - } - } - } - } -} diff --git a/cloog-0.16.3/test/isl/mod.c b/cloog-0.16.3/test/isl/mod.c deleted file mode 100644 index 4f6a15e..0000000 --- a/cloog-0.16.3/test/isl/mod.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/mod.cloog by CLooG 0.14.0-325-g71fa959 gmp bits in 0.00s. */ -for (i=0;i<=3;i++) { - if (i%3 <= 1) { - S1(i); - } -} diff --git a/cloog-0.16.3/test/isl/mod.cloog b/cloog-0.16.3/test/isl/mod.cloog deleted file mode 100644 index e12de40..0000000 --- a/cloog-0.16.3/test/isl/mod.cloog +++ /dev/null @@ -1,23 +0,0 @@ -c - -# Context: -0 2 - -0 # Parameter name(s) -# Statement number: -1 - -# Iteration domain of statement 1 -4 4 1 0 1 0 -1 1 0 0 -1 -1 0 3 -1 1 -3 0 -1 -1 3 1 - -0 0 0 # For future options. - - -0 # Iterator name(s) - -# No scattering functions. -0 diff --git a/cloog-0.16.3/test/isl/mod2.c b/cloog-0.16.3/test/isl/mod2.c deleted file mode 100644 index 4f6a15e..0000000 --- a/cloog-0.16.3/test/isl/mod2.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/mod.cloog by CLooG 0.14.0-325-g71fa959 gmp bits in 0.00s. */ -for (i=0;i<=3;i++) { - if (i%3 <= 1) { - S1(i); - } -} diff --git a/cloog-0.16.3/test/isl/mod2.cloog b/cloog-0.16.3/test/isl/mod2.cloog deleted file mode 100644 index 1b09d5f..0000000 --- a/cloog-0.16.3/test/isl/mod2.cloog +++ /dev/null @@ -1,20 +0,0 @@ -# Language: C -c - -# Context: -0 2 - -0 # Parameter name(s) -# Statement number: -1 - -# Iteration domain of statement 1 -{ [i] : 0 <= i <= 3 and 0 <= i - 3*[i/3] <= 1 } - -0 0 0 # For future options. - - -0 # Iterator name(s) - -# No scattering functions. -0 diff --git a/cloog-0.16.3/test/isl/mod3.c b/cloog-0.16.3/test/isl/mod3.c deleted file mode 100644 index 3fa291b..0000000 --- a/cloog-0.16.3/test/isl/mod3.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/mod3.cloog by CLooG 0.14.0-325-g62da9f7 gmp bits in 0.02s. */ -for (i=max(0,32*h0-1991);i<=min(999,32*h0+31);i++) { - if ((63*i+32*h0+31)%64 <= 62) { - for (j=0;j<=999;j++) { - S1(i,j); - } - } -} diff --git a/cloog-0.16.3/test/isl/mod3.cloog b/cloog-0.16.3/test/isl/mod3.cloog deleted file mode 100644 index 1637080..0000000 --- a/cloog-0.16.3/test/isl/mod3.cloog +++ /dev/null @@ -1,34 +0,0 @@ -# Language: C -c - -# Context: -2 3 -1 -1 93 -1 1 0 - -1 # Parameter name(s) -h0 -# Statement number: -1 - -# Iteration domain of statement 1 -1 - -9 6 2 0 1 1 -1 1 0 0 0 0 -1 -1 0 0 0 999 -1 0 0 -1 0 31 -1 1 0 32 -32 999 -1 0 1 0 0 0 -1 0 -1 0 0 999 -1 1 0 64 -32 31 -1 -1 0 -64 32 31 -1 0 0 1 0 0 - -0 0 0 # For future options. - - -0 # Iterator name(s) - -# No scattering functions. -0 diff --git a/cloog-0.16.3/test/isl/mod4.c b/cloog-0.16.3/test/isl/mod4.c deleted file mode 100644 index 9a30f3c..0000000 --- a/cloog-0.16.3/test/isl/mod4.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/mod4.cloog by CLooG 0.16.0-9-g188dbd4 gmp bits in 0.00s. */ -if (M%11 <= 6) { - if (N%5 <= 2) { - if (M >= -N) { - for (i=0;i<=M+N;i++) { - S1(i); - } - } - } -} diff --git a/cloog-0.16.3/test/isl/mod4.cloog b/cloog-0.16.3/test/isl/mod4.cloog deleted file mode 100644 index d5837ae..0000000 --- a/cloog-0.16.3/test/isl/mod4.cloog +++ /dev/null @@ -1,23 +0,0 @@ -c - -1 - -0 4 - -0 - -1 - -6 7 1 0 2 2 -1 0 -5 0 0 1 0 -1 0 5 0 0 -1 2 -1 0 0 -11 1 0 0 -1 0 0 11 -1 0 6 -1 1 0 0 0 0 0 -1 -1 0 0 1 1 0 - -0 0 0 - -0 - -0 diff --git a/cloog-0.16.3/test/isl/mxm-shared.c b/cloog-0.16.3/test/isl/mxm-shared.c deleted file mode 100644 index e5f4c66..0000000 --- a/cloog-0.16.3/test/isl/mxm-shared.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/mxm-shared.cloog by CLooG 0.16.1-5-gcba2a9f gmp bits in 0.34s. */ -if (g4%4 == 0) { - if ((N >= g0+t1+1) && (N >= g1+t0+1) && (t1 <= 7)) { - for (c0=t0;c0<=min(127,N-g1-1);c0+=16) { - S1(g0+t1,c0+g1); - } - } -} diff --git a/cloog-0.16.3/test/isl/mxm-shared.cloog b/cloog-0.16.3/test/isl/mxm-shared.cloog deleted file mode 100644 index f82b2dd..0000000 --- a/cloog-0.16.3/test/isl/mxm-shared.cloog +++ /dev/null @@ -1,162 +0,0 @@ -# CLooG -> CLooG -# This is an automatic dump of a CLooG input file from a CloogInput data -# structure. - -# Language: C -c - -# Context: -1 - -19 15 0 0 3 10 -0 0 0 128 0 -8 0 1 0 0 0 0 0 0 0 -0 0 4096 0 0 0 128 0 -1 0 0 0 0 0 0 -0 8 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 -128 0 0 0 1 0 0 0 0 -0 0 0 0 0 -8 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 -1 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 15 -1 0 0 0 1 0 0 0 -1 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 1 0 0 -1 0 0 0 0 0 0 -1 -1 0 0 0 0 0 -128 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 -8 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 -1 15 - -1 # Parameter name(s) -N b0 b1 g0 g1 g2 g3 g4 t0 t1 - -# Statement number: -1 - -# Iteration domain of statement 1 (write_shared_C). -2 - -22 18 2 0 4 10 -0 0 -1 0 0 0 16 0 0 0 0 0 0 0 0 1 0 0 -0 0 0 0 0 128 0 0 8 0 -1 0 0 0 0 0 0 0 -0 0 0 0 4096 0 0 0 0 -128 0 1 0 0 0 0 0 0 -0 0 0 128 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -0 0 0 0 0 0 0 0 0 -128 0 0 0 1 0 0 0 0 -0 0 0 0 0 0 0 0 -8 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -128 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 0 0 -8 0 1 0 0 0 0 0 0 0 -1 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 15 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 127 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 7 -1 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 - -24 19 2 0 5 10 -0 0 -1 0 0 0 0 16 0 0 0 0 0 0 0 0 1 0 0 -0 0 0 0 0 0 128 0 0 8 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 4096 0 0 0 0 0 -128 0 1 0 0 0 0 0 0 -0 0 0 128 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 -0 0 0 0 0 0 0 0 0 0 -128 0 0 0 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 -8 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -8 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 0 0 0 0 -128 0 1 0 0 0 0 0 0 -1 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 7 -1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 15 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 127 -1 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 - -0 0 0 # For future options. - - -0 # Iterator name(s) -# --------------------- SCATTERING -------------------- -1 # Scattering functions - -# Scattering of statement 1 (write_shared_C). -2 - -27 22 4 2 4 10 -0 0 0 0 0 1 0 0 0 0 16 0 8 0 0 0 0 0 0 0 -1 0 -0 0 0 0 0 0 1 0 0 16 0 0 0 0 0 0 0 0 0 -1 0 0 -0 0 0 0 0 0 0 0 128 0 0 0 120 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 4096 0 0 0 0 0 3968 0 1 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -0 0 1 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 -128 0 0 0 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 -8 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 -128 0 1 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 -8 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 127 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 7 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 15 - -29 23 4 2 5 10 -0 0 0 0 0 1 0 0 0 0 0 16 0 8 0 0 0 0 0 0 0 -1 0 -0 0 0 0 0 0 1 0 0 0 16 0 0 0 0 0 0 0 0 0 -1 0 0 -0 0 0 0 0 0 0 0 0 128 0 0 0 120 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 4096 0 0 0 0 0 3968 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 -128 0 0 0 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 -8 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 -8 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 -128 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 -1 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 7 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 127 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 15 - -1 # Scattering dimension name(s) -c0 c1 c2 c3 diff --git a/cloog-0.16.3/test/largeur.c b/cloog-0.16.3/test/largeur.c deleted file mode 100644 index ff49b94..0000000 --- a/cloog-0.16.3/test/largeur.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/largeur.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -if (M >= 1) { - for (c1=1;c1<=M;c1++) { - for (c2=1;c2<=c1;c2++) { - S1(c2,c1) ; - } - } -} diff --git a/cloog-0.16.3/test/largeur.cloog b/cloog-0.16.3/test/largeur.cloog deleted file mode 100644 index fe372da..0000000 --- a/cloog-0.16.3/test/largeur.cloog +++ /dev/null @@ -1,26 +0,0 @@ -# language: C -c - -# parameters {n | n>= 0} -1 3 -1 1 0 -0 - -1 # Number of statements - -1 -# {i, j | 1<=i<=n i<=j<=n} -4 5 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 0 -1 0 -1 1 0 -0 0 0 -0 - -1 # Scattering functions -# Et les instructions de chunking... -2 7 -0 1 0 0 -1 0 0 -0 0 1 -1 0 0 0 -0 diff --git a/cloog-0.16.3/test/largeur.good.c b/cloog-0.16.3/test/largeur.good.c deleted file mode 100644 index 10f63ed..0000000 --- a/cloog-0.16.3/test/largeur.good.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Generated from ../../../git/cloog/test/largeur.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j; - for (c1=1;c1<=M;c1++) { - for (c2=1;c2<=c1;c2++) { - S1(c2,c1) ; - } - } -} diff --git a/cloog-0.16.3/test/levenshtein-1-2-3.c b/cloog-0.16.3/test/levenshtein-1-2-3.c deleted file mode 100644 index 224bd29..0000000 --- a/cloog-0.16.3/test/levenshtein-1-2-3.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Generated from ../../../git/cloog/test/levenshtein-1-2-3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.12s. */ -S1(0,0) ; -S2(1,0) ; -S3(1,1) ; -for (i=2;i<=N;i++) { - S2(i,0) ; - for (j=1;j<=i-1;j++) { - S6(i,j) ; - } - S3(i,i) ; -} -S7(N+1,0) ; -for (j=1;j<=N;j++) { - S6(N+1,j) ; - S8(N+1,j) ; -} -for (i=N+2;i<=2*M-N-2;i++) { - j = floord(i-N-1,2) ; - S7(i,j) ; - if ((i+N)%2 == 0) { - S5(i,(i-N)/2) ; - S8(i,(i-N)/2) ; - } - for (j=ceild(i-N+1,2);j<=floord(i+N-1,2);j++) { - S6(i,j) ; - S8(i,j) ; - } - if ((i+N)%2 == 0) { - S4(i,(i+N)/2) ; - S8(i,(i+N)/2) ; - } -} -for (i=2*M-N-1;i<=2*M-2;i++) { - for (j=i-M+1;j<=M-1;j++) { - S6(i,j) ; - } -} diff --git a/cloog-0.16.3/test/levenshtein-1-2-3.cloog b/cloog-0.16.3/test/levenshtein-1-2-3.cloog deleted file mode 100644 index acc6522..0000000 --- a/cloog-0.16.3/test/levenshtein-1-2-3.cloog +++ /dev/null @@ -1,110 +0,0 @@ -# language: C -c - -# Context -# {length,width | width+2<=length; 1<=width} -3 4 -# M N 1 -1 1 -1 -2 -1 0 1 -1 -1 0 0 1 -0 - -8 # Number of statements - -1 -# {t1,t2,length,width | t1=0; t2=0; width+2<=length; 1<=width} -5 6 -# i j M N 1 -0 1 0 0 0 0 -0 0 1 0 0 0 -1 0 0 1 -1 -2 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | 1<=t1<=width; t2=0; width+2<=length} -5 6 -# i j M N 1 -0 0 1 0 0 0 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 0 1 -1 -2 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | t1=t2; 1<=t2<=width; width+2<=length} -5 6 -# i j M N 1 -0 1 -1 0 0 0 -1 0 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 -1 -2 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | t1=2t2-width; width+1<=t2<=length-1; 1<=width} -5 6 -# i j M N 1 -0 1 -2 0 1 0 -1 0 1 0 -1 -1 -1 0 -1 1 0 -1 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | t1=2t2+width; 1<=t2<=length-width-1; 1<=width} -5 6 -# i j M N 1 -0 1 -2 0 -1 0 -1 0 1 0 0 -1 -1 0 -1 1 -1 -1 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | (2t2-width+1,t2+1)<=t1<=(t2+length-1,2t2+width-1); 1<=t2<=length-1; width+2<=length} -8 6 -# i j M N 1 -1 1 -2 0 1 -1 -1 1 -1 0 0 -1 -1 -1 1 1 0 -1 -1 -1 2 0 1 -1 -1 0 1 0 0 -1 -1 0 -1 1 0 -1 -1 0 0 1 -1 -2 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | (width+1,2t2+width+1)<=t1<=(2length-width-2,2t2+width+2); width+2<=length; 1<=width} -6 6 -# i j M N 1 -1 1 0 0 -1 -1 -1 1 -2 0 -1 -1 -1 -1 0 2 -1 -2 -1 -1 2 0 1 2 -1 0 0 1 -1 -2 -1 0 0 0 1 -1 -0 0 0 - -1 -# {t1,t2,length,width | (width+1,2t2-width)<=t1<=(2t2+width,2length-width-2); width+2<=length; 1<=width} -7 6 -# i j M N 1 -1 1 0 0 -1 -1 -1 1 -2 0 1 0 -1 -1 2 0 1 0 -1 -1 0 2 -1 -2 -1 0 0 1 -1 -2 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/levenshtein-1-2-3.good.c b/cloog-0.16.3/test/levenshtein-1-2-3.good.c deleted file mode 100644 index 76548ea..0000000 --- a/cloog-0.16.3/test/levenshtein-1-2-3.good.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Generated from ../../../git/cloog/test/levenshtein-1-2-3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.03s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } -#define S4(i,j) { hash(4); hash(i); hash(j); } -#define S5(i,j) { hash(5); hash(i); hash(j); } -#define S6(i,j) { hash(6); hash(i); hash(j); } -#define S7(i,j) { hash(7); hash(i); hash(j); } -#define S8(i,j) { hash(8); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - S1(0,0) ; - S2(1,0) ; - S3(1,1) ; - for (i=2;i<=N;i++) { - S2(i,0) ; - for (j=1;j<=i-1;j++) { - S6(i,j) ; - } - S3(i,i) ; - } - i = N+1 ; - S7(N+1,0) ; - for (j=1;j<=N;j++) { - S6(N+1,j) ; - S8(N+1,j) ; - } - for (i=N+2;i<=2*M-N-2;i++) { - j = floord(i-N-1,2) ; - S7(i,j) ; - if ((i+N)%2 == 0) { - j = (i-N)/2 ; - S5(i,(i-N)/2) ; - S8(i,(i-N)/2) ; - } - for (j=ceild(i-N+1,2);j<=floord(i+N-1,2);j++) { - S6(i,j) ; - S8(i,j) ; - } - if ((i+N)%2 == 0) { - j = (i+N)/2 ; - S4(i,(i+N)/2) ; - S8(i,(i+N)/2) ; - } - } - for (i=2*M-N-1;i<=2*M-2;i++) { - for (j=i-M+1;j<=M-1;j++) { - S6(i,j) ; - } - } -} diff --git a/cloog-0.16.3/test/levenshtein-1-2-3f.cloog b/cloog-0.16.3/test/levenshtein-1-2-3f.cloog deleted file mode 100644 index c78bc19..0000000 --- a/cloog-0.16.3/test/levenshtein-1-2-3f.cloog +++ /dev/null @@ -1,110 +0,0 @@ -# language: FORTRAN -f - -# Context -# {length,width | width+2<=length; 1<=width} -3 4 -# M N 1 -1 1 -1 -2 -1 0 1 -1 -1 0 0 1 -0 - -8 # Number of statements - -1 -# {t1,t2,length,width | t1=0; t2=0; width+2<=length; 1<=width} -5 6 -# i j M N 1 -0 1 0 0 0 0 -0 0 1 0 0 0 -1 0 0 1 -1 -2 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | 1<=t1<=width; t2=0; width+2<=length} -5 6 -# i j M N 1 -0 0 1 0 0 0 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 0 1 -1 -2 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | t1=t2; 1<=t2<=width; width+2<=length} -5 6 -# i j M N 1 -0 1 -1 0 0 0 -1 0 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 -1 -2 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | t1=2t2-width; width+1<=t2<=length-1; 1<=width} -5 6 -# i j M N 1 -0 1 -2 0 1 0 -1 0 1 0 -1 -1 -1 0 -1 1 0 -1 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | t1=2t2+width; 1<=t2<=length-width-1; 1<=width} -5 6 -# i j M N 1 -0 1 -2 0 -1 0 -1 0 1 0 0 -1 -1 0 -1 1 -1 -1 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | (2t2-width+1,t2+1)<=t1<=(t2+length-1,2t2+width-1); 1<=t2<=length-1; width+2<=length} -8 6 -# i j M N 1 -1 1 -2 0 1 -1 -1 1 -1 0 0 -1 -1 -1 1 1 0 -1 -1 -1 2 0 1 -1 -1 0 1 0 0 -1 -1 0 -1 1 0 -1 -1 0 0 1 -1 -2 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | (width+1,2t2+width+1)<=t1<=(2length-width-2,2t2+width+2); width+2<=length; 1<=width} -6 6 -# i j M N 1 -1 1 0 0 -1 -1 -1 1 -2 0 -1 -1 -1 -1 0 2 -1 -2 -1 -1 2 0 1 2 -1 0 0 1 -1 -2 -1 0 0 0 1 -1 -0 0 0 - -1 -# {t1,t2,length,width | (width+1,2t2-width)<=t1<=(2t2+width,2length-width-2); width+2<=length; 1<=width} -7 6 -# i j M N 1 -1 1 0 0 -1 -1 -1 1 -2 0 1 0 -1 -1 2 0 1 0 -1 -1 0 2 -1 -2 -1 0 0 1 -1 -2 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/levenshtein-1-2-3f.f b/cloog-0.16.3/test/levenshtein-1-2-3f.f deleted file mode 100644 index 5a57950..0000000 --- a/cloog-0.16.3/test/levenshtein-1-2-3f.f +++ /dev/null @@ -1,37 +0,0 @@ -! Generated from ../../../git/cloog/test/levenshtein-1-2-3f.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.11s. -S1(0,0) -S2(1,0) -S3(1,1) -DO i=2, N - S2(i,0) - DO j=1, i-1 - S6(i,j) - END DO - S3(i,i) -END DO -S7(N+1,0) -DO j=1, N - S6(N+1,j) - S8(N+1,j) -END DO -DO i=N+2, 2*M-N-2 - j = FLOOR(REAL(i-N-1)/REAL(2)) - S7(i,j) - IF (MOD(i+N, 2) == 0) THEN - S5(i,(i-N)/2) - S8(i,(i-N)/2) - END IF - DO j=CEILING(REAL(i-N+1)/REAL(2)), FLOOR(REAL(i+N-1)/REAL(2)) - S6(i,j) - S8(i,j) - END DO - IF (MOD(i+N, 2) == 0) THEN - S4(i,(i+N)/2) - S8(i,(i+N)/2) - END IF -END DO -DO i=2*M-N-1, 2*M-2 - DO j=i-M+1, M-1 - S6(i,j) - END DO -END DO diff --git a/cloog-0.16.3/test/lex.c b/cloog-0.16.3/test/lex.c deleted file mode 100644 index 52df96d..0000000 --- a/cloog-0.16.3/test/lex.c +++ /dev/null @@ -1,5 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/lex.cloog by CLooG 0.14.0-234-g330f397 gmp bits in 0.00s. */ -for (c1=0;c1<=10;c1++) { - S2(c1); - S1(c1); -} diff --git a/cloog-0.16.3/test/lex.cloog b/cloog-0.16.3/test/lex.cloog deleted file mode 100644 index a7e2b88..0000000 --- a/cloog-0.16.3/test/lex.cloog +++ /dev/null @@ -1,35 +0,0 @@ -c - -0 2 - -0 - -2 - -1 -2 3 -1 1 0 -1 -1 10 -0 0 0 - -1 -2 3 -1 1 0 -1 -1 10 -0 0 0 - -0 - -2 - -3 6 -0 -1 0 0 1 0 -0 0 -1 0 0 0 -0 0 0 -1 0 0 - -3 6 -0 -1 0 0 1 0 -0 0 -1 0 0 -1 -0 0 0 -1 0 0 - -0 diff --git a/cloog-0.16.3/test/lex.good.c b/cloog-0.16.3/test/lex.good.c deleted file mode 100644 index 4769fb1..0000000 --- a/cloog-0.16.3/test/lex.good.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/lex.cloog by CLooG 0.14.0-234-g330f397 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } - -void test() -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i; - for (c1=0;c1<=10;c1++) { - S2(c1); - S1(c1); - } -} diff --git a/cloog-0.16.3/test/lineality-1-2.c b/cloog-0.16.3/test/lineality-1-2.c deleted file mode 100644 index 9bd902e..0000000 --- a/cloog-0.16.3/test/lineality-1-2.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/lineality-1-2.cloog by CLooG 0.14.0-284-g5c046c9 gmp bits in 0.00s. */ -for (i=1;i<=M;i++) { - for (j=1;j<=i-1;j++) { - S1(i,j); - } - S1(i,i); - S2(i,i); - for (j=i+1;j<=M;j++) { - S1(i,j); - } -} diff --git a/cloog-0.16.3/test/lineality-1-2.cloog b/cloog-0.16.3/test/lineality-1-2.cloog deleted file mode 100644 index 7629fd8..0000000 --- a/cloog-0.16.3/test/lineality-1-2.cloog +++ /dev/null @@ -1,36 +0,0 @@ -# language: C -c - -# Context -# {M | 2<=M} -2 3 -# M 1 -1 1 -2 -1 0 1 -0 - -2 # Number of statements - -1 -# {i,j,M | 1<=i<=M; 1<=j<=M} -5 5 -# i j M 1 -1 1 0 0 -1 -1 0 1 0 -1 -1 -1 0 1 0 -1 0 -1 1 0 -1 0 0 0 1 -0 0 0 - -1 -# {i,j,M | i=j; 1<=j<=M} -4 5 -# i j M 1 -0 1 -1 0 0 -1 0 1 0 -1 -1 0 -1 1 0 -1 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/lineality-1-2.good.c b/cloog-0.16.3/test/lineality-1-2.good.c deleted file mode 100644 index d28268f..0000000 --- a/cloog-0.16.3/test/lineality-1-2.good.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Generated from ../../../git/cloog/test/lineality-1-2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - S1(1,1) ; - S2(1,1) ; - for (j=2;j<=M;j++) { - S1(1,j) ; - } - for (i=2;i<=M-1;i++) { - for (j=1;j<=i-1;j++) { - S1(i,j) ; - } - S1(i,i) ; - S2(i,i) ; - for (j=i+1;j<=M;j++) { - S1(i,j) ; - } - } - for (j=1;j<=M-1;j++) { - S1(M,j) ; - } - S1(M,M) ; - S2(M,M) ; -} diff --git a/cloog-0.16.3/test/lineality-2-1-2.c b/cloog-0.16.3/test/lineality-2-1-2.c deleted file mode 100644 index 37a7e2a..0000000 --- a/cloog-0.16.3/test/lineality-2-1-2.c +++ /dev/null @@ -1,16 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/lineality-2-1-2.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.00s. */ -for (i=1;i<=M;i++) { - for (j=1;j<=min(M,i+1);j++) { - S1(i,j); - } - if (i >= M-1) { - S2(i,i+2); - } - if (i <= M-2) { - S1(i,i+2); - S2(i,i+2); - } - for (j=i+3;j<=M;j++) { - S1(i,j); - } -} diff --git a/cloog-0.16.3/test/lineality-2-1-2.cloog b/cloog-0.16.3/test/lineality-2-1-2.cloog deleted file mode 100644 index a6ae5e1..0000000 --- a/cloog-0.16.3/test/lineality-2-1-2.cloog +++ /dev/null @@ -1,36 +0,0 @@ -# language: C -c - -# Context -# {M | 2<=M} -2 3 -# M 1 -1 1 -2 -1 0 1 -0 - -2 # Number of statements - -1 -# {i,j,M | 1<=i<=M; 1<=j<=M} -5 5 -# i j M 1 -1 1 0 0 -1 -1 0 1 0 -1 -1 -1 0 1 0 -1 0 -1 1 0 -1 0 0 0 1 -0 0 0 - -1 -# {i,j,M | i=j-2; 3<=j<=M+2} -4 5 -# i j M 1 -0 1 -1 0 2 -1 0 1 0 -3 -1 0 -1 1 2 -1 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/lineality-2-1-2.good.c b/cloog-0.16.3/test/lineality-2-1-2.good.c deleted file mode 100644 index 78d8126..0000000 --- a/cloog-0.16.3/test/lineality-2-1-2.good.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Generated from ../../../git/cloog/test/lineality-2-1-2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - for (i=1;i<=M-3;i++) { - for (j=1;j<=i+1;j++) { - S1(i,j) ; - } - j = i+2 ; - S1(i,i+2) ; - S2(i,i+2) ; - for (j=i+3;j<=M;j++) { - S1(i,j) ; - } - } - if (M >= 3) { - i = M-2 ; - for (j=1;j<=M-1;j++) { - S1(M-2,j) ; - } - S1(M-2,M) ; - S2(M-2,M) ; - } - for (i=M-1;i<=M;i++) { - for (j=1;j<=M;j++) { - S1(i,j) ; - } - j = i+2 ; - S2(i,i+2) ; - } -} diff --git a/cloog-0.16.3/test/logo.c b/cloog-0.16.3/test/logo.c deleted file mode 100644 index 54d229d..0000000 --- a/cloog-0.16.3/test/logo.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/logo.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.01s. */ -for (j=0;j<=7;j++) { - S1(1,j); -} -for (i=2;i<=6;i++) { - for (j=0;j<=i-2;j++) { - S2(i,j); - } - for (j=i-1;j<=4;j++) { - S1(i,j); - S2(i,j); - } - for (j=5;j<=7;j++) { - S1(i,j); - } -} -for (i=7;i<=8;i++) { - for (j=i-1;j<=7;j++) { - S1(i,j); - } -} diff --git a/cloog-0.16.3/test/logo.cloog b/cloog-0.16.3/test/logo.cloog deleted file mode 100644 index 5583c29..0000000 --- a/cloog-0.16.3/test/logo.cloog +++ /dev/null @@ -1,30 +0,0 @@ -# language: C -c - -# Context -1 3 -# n 1 -1 0 1 -0 - -2 # Number of statements - -1 -3 5 -# i j n 1 -1 1 0 0 -1 # i >= 1 -1 0 -1 0 7 # j <= 7 -1 -1 1 0 1 # j >= i-1 -0 0 0 - -1 -4 5 -# i j n 1 -1 1 0 0 -2 # i >= 2 -1 -1 0 0 6 # i <= 6 -1 0 1 0 0 # j >= 0 -1 0 -1 0 4 # j <= 4 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/logo.good.c b/cloog-0.16.3/test/logo.good.c deleted file mode 100644 index 203e5ac..0000000 --- a/cloog-0.16.3/test/logo.good.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Generated from ../../../git/cloog/test/logo.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - for (j=0;j<=7;j++) { - S1(1,j) ; - } - for (i=2;i<=5;i++) { - for (j=0;j<=i-2;j++) { - S2(i,j) ; - } - for (j=i-1;j<=4;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=5;j<=7;j++) { - S1(i,j) ; - } - } - for (j=0;j<=4;j++) { - S2(6,j) ; - } - for (j=5;j<=7;j++) { - S1(6,j) ; - } - for (i=7;i<=8;i++) { - for (j=i-1;j<=7;j++) { - S1(i,j) ; - } - } -} diff --git a/cloog-0.16.3/test/logopar.c b/cloog-0.16.3/test/logopar.c deleted file mode 100644 index 0b2c8f9..0000000 --- a/cloog-0.16.3/test/logopar.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/logopar.cloog by CLooG 0.14.0-284-g5c046c9 gmp bits in 0.00s. */ -for (j=0;j<=m;j++) { - S1(1,j); -} -for (i=2;i<=n;i++) { - for (j=0;j<=i-2;j++) { - S2(i,j); - } - for (j=i-1;j<=n;j++) { - S1(i,j); - S2(i,j); - } - for (j=n+1;j<=m;j++) { - S1(i,j); - } -} -for (i=n+1;i<=m+1;i++) { - for (j=i-1;j<=m;j++) { - S1(i,j); - } -} diff --git a/cloog-0.16.3/test/logopar.cloog b/cloog-0.16.3/test/logopar.cloog deleted file mode 100644 index 37114ae..0000000 --- a/cloog-0.16.3/test/logopar.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# language: C -c - -# Context -3 4 -# m n 1 -1 1 -1 0 # m > n -1 1 0 0 # m >= 0 -1 0 1 -2 # n >= 2 -1 -m n - -2 # Number of statements - -1 -3 6 -# i j m n 1 -1 1 0 0 0 -1 # i >= 1 -1 0 -1 1 0 0 # j <= m -1 -1 1 0 0 1 # j >= i-1 -0 0 0 - -1 -4 6 -# i j m n 1 -1 1 0 0 0 -2 # i >= 2 -1 -1 0 0 1 0 # i <= n -1 0 1 0 0 0 # j >= 0 -1 0 -1 0 1 0 # j <= n -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/logopar.good.c b/cloog-0.16.3/test/logopar.good.c deleted file mode 100644 index 2b03ca2..0000000 --- a/cloog-0.16.3/test/logopar.good.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Generated from ../../../git/cloog/test/logopar.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int m, int n) -{ - /* Original iterators. */ - int i, j; - for (j=0;j<=m;j++) { - S1(1,j) ; - } - if (m >= n+1) { - for (i=2;i<=n;i++) { - for (j=0;j<=i-2;j++) { - S2(i,j) ; - } - for (j=i-1;j<=n;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=n+1;j<=m;j++) { - S1(i,j) ; - } - } - } - if (m == n) { - for (i=2;i<=n;i++) { - for (j=0;j<=i-2;j++) { - S2(i,j) ; - } - for (j=i-1;j<=n;j++) { - S1(i,j) ; - S2(i,j) ; - } - } - } - for (i=n+1;i<=m+1;i++) { - for (j=i-1;j<=m;j++) { - S1(i,j) ; - } - } -} diff --git a/cloog-0.16.3/test/lu.c b/cloog-0.16.3/test/lu.c deleted file mode 100644 index 74ec81f..0000000 --- a/cloog-0.16.3/test/lu.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/lu.cloog by CLooG 0.14.0-238-gb1cb779 gmp bits in 0.01s. */ -if (n >= 2) { - for (j=2;j<=n;j++) { - S1(1,j); - } - for (c1=2;c1<=n-1;c1++) { - for (c2=2;c2<=n;c2++) { - for (i=1;i<=min(c1-1,c2-1);i++) { - S2(i,c2,c1); - } - } - for (j=c1+1;j<=n;j++) { - S1(c1,j); - } - } - for (c2=2;c2<=n;c2++) { - for (i=1;i<=c2-1;i++) { - S2(i,c2,n); - } - } -} diff --git a/cloog-0.16.3/test/lu.cloog b/cloog-0.16.3/test/lu.cloog deleted file mode 100644 index 7753006..0000000 --- a/cloog-0.16.3/test/lu.cloog +++ /dev/null @@ -1,47 +0,0 @@ -# language: C -c - -# parameter n -1 3 -# n 1 -1 0 1 -1 -n - -2 # Number of statements - -1 -# {i, j | 1<=i<=n; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 - -1 -# {i, j, k | 1<=i<=n; i+1<=j<=n i+1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 -1 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 -0 - -2 # Scattering functions -# Et les instructions de chunking... -2 7 -# c1 c2 i j n 1 -0 1 0 -1 0 0 0 -0 0 1 0 0 -1 0 - -2 8 -# c1 c2 i j k n 1 -0 1 0 0 0 -1 0 0 -0 0 1 0 -1 0 0 0 -0 diff --git a/cloog-0.16.3/test/lu.good.c b/cloog-0.16.3/test/lu.good.c deleted file mode 100644 index 5e9d3d2..0000000 --- a/cloog-0.16.3/test/lu.good.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Generated from ../../../git/cloog/test/lu.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int n) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j, k; - if (n >= 2) { - for (j=2;j<=n;j++) { - S1(1,j) ; - } - } - for (c1=2;c1<=n-1;c1++) { - for (c2=2;c2<=n-1;c2++) { - for (i=1;i<=min(c2-1,c1-1);i++) { - S2(i,c2,c1) ; - } - } - for (i=1;i<=c1-1;i++) { - S2(i,n,c1) ; - } - for (j=c1+1;j<=n;j++) { - S1(c1,j) ; - } - } - if (n >= 2) { - for (c2=2;c2<=n;c2++) { - for (i=1;i<=c2-1;i++) { - S2(i,c2,n) ; - } - } - } -} diff --git a/cloog-0.16.3/test/lu2.c b/cloog-0.16.3/test/lu2.c deleted file mode 100644 index 2f3b34b..0000000 --- a/cloog-0.16.3/test/lu2.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/lu2.cloog by CLooG 0.14.0-238-gb1cb779 gmp bits in 0.01s. */ -if (n >= 2) { - for (l=2;l<=n;l++) { - S1(1,n,1,l); - } - for (i=2;i<=n-1;i++) { - for (j=2;j<=n;j++) { - for (k=1;k<=min(i-1,j-1);k++) { - S2(i,j,k,j,i); - } - } - for (l=i+1;l<=n;l++) { - S1(i,n,i,l); - } - } - for (j=2;j<=n;j++) { - for (k=1;k<=j-1;k++) { - S2(n,j,k,j,n); - } - } -} diff --git a/cloog-0.16.3/test/lu2.cloog b/cloog-0.16.3/test/lu2.cloog deleted file mode 100644 index 5775e49..0000000 --- a/cloog-0.16.3/test/lu2.cloog +++ /dev/null @@ -1,37 +0,0 @@ -# language: C -c - -# parameter n -1 3 -1 0 1 -1 -n - -2 # Number of statements - -1 -# {c1, c2, i, j | c1=i, c2=n, 1<=i<=n; i+1<=j<=n} -6 7 -0 1 0 -1 0 0 0 -0 0 1 0 0 -1 0 -1 0 0 1 0 0 -1 -1 0 0 -1 0 1 0 -1 0 0 -1 1 0 -1 -1 0 0 0 -1 1 0 -0 0 0 - -1 -# {c1, c2, i, j, k | c1=k, c2=j, 1<=i<=n; i+1<=j<=n i+1<=k<=n} -8 8 -0 1 0 0 0 -1 0 0 -0 0 1 0 -1 0 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 -1 0 0 1 0 -1 0 0 -1 1 0 0 -1 -1 0 0 0 -1 0 1 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 -1 1 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/lu2.good.c b/cloog-0.16.3/test/lu2.good.c deleted file mode 100644 index 5641856..0000000 --- a/cloog-0.16.3/test/lu2.good.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Generated from ../../../git/cloog/test/lu2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k,l) { hash(1); hash(i); hash(j); hash(k); hash(l); } -#define S2(i,j,k,l,m) { hash(2); hash(i); hash(j); hash(k); hash(l); hash(m); } - -void test(int n) -{ - /* Original iterators. */ - int i, j, k, l, m; - if (n >= 2) { - for (l=2;l<=n;l++) { - S1(1,n,1,l) ; - } - } - for (i=2;i<=n-1;i++) { - for (j=2;j<=n-1;j++) { - for (k=1;k<=min(j-1,i-1);k++) { - S2(i,j,k,j,i) ; - } - } - for (k=1;k<=i-1;k++) { - S2(i,n,k,n,i) ; - } - for (l=i+1;l<=n;l++) { - S1(i,n,i,l) ; - } - } - if (n >= 2) { - for (j=2;j<=n;j++) { - for (k=1;k<=j-1;k++) { - S2(n,j,k,j,n) ; - } - } - } -} diff --git a/cloog-0.16.3/test/lub.c b/cloog-0.16.3/test/lub.c deleted file mode 100644 index 43269a4..0000000 --- a/cloog-0.16.3/test/lub.c +++ /dev/null @@ -1,13 +0,0 @@ -/* Generated from ../../../git/cloog/test/lub.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -if (M >= 2) { - for (i=1;i<=M-1;i++) { - for (j=i+1;j<=M;j++) { - S1(i,j) ; - for (k=i+1;k<=M;k++) { - S2(i,j,k) ; - S3(i,j,k) ; - } - S4(i,j) ; - } - } -} diff --git a/cloog-0.16.3/test/lub.cloog b/cloog-0.16.3/test/lub.cloog deleted file mode 100644 index fcab9b5..0000000 --- a/cloog-0.16.3/test/lub.cloog +++ /dev/null @@ -1,58 +0,0 @@ -# language: C -c - -# parameter n -1 3 -# n 1 -1 0 1 -0 - -4 # Number of statements - -1 -# {i, j | 1<=i<=n; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 - -1 -# {i, j, k | 1<=i<=n; i+1<=j<=n i+1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 -1 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 - -1 -# {i, j, k | 1<=i<=n; i+1<=j<=n i+1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 -1 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 - -1 -# {i, j | 1<=i<=n; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 -0 - -0 # Scattering functions - diff --git a/cloog-0.16.3/test/lub.good.c b/cloog-0.16.3/test/lub.good.c deleted file mode 100644 index 3122a3c..0000000 --- a/cloog-0.16.3/test/lub.good.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/lub.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } -#define S4(i,j) { hash(4); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j, k; - for (i=1;i<=M-1;i++) { - for (j=i+1;j<=M;j++) { - S1(i,j) ; - for (k=i+1;k<=M;k++) { - S2(i,j,k) ; - S3(i,j,k) ; - } - S4(i,j) ; - } - } -} diff --git a/cloog-0.16.3/test/lux.c b/cloog-0.16.3/test/lux.c deleted file mode 100644 index d313e3a..0000000 --- a/cloog-0.16.3/test/lux.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/lux.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -if (M >= 2) { - for (l=2;l<=M;l++) { - S1(1,1,M,l) ; - } - for (i=2;i<=M-1;i++) { - for (j=1;j<=i-1;j++) { - for (k=j+1;k<=M;k++) { - S2(i,j,k,k,i) ; - } - } - for (l=i+1;l<=M;l++) { - S1(i,i,M,l) ; - } - } - for (j=1;j<=M-1;j++) { - for (k=j+1;k<=M;k++) { - S2(M,j,k,k,M) ; - } - } -} diff --git a/cloog-0.16.3/test/lux.cloog b/cloog-0.16.3/test/lux.cloog deleted file mode 100644 index 1687e32..0000000 --- a/cloog-0.16.3/test/lux.cloog +++ /dev/null @@ -1,36 +0,0 @@ -# language: C -c - -# parameter n -1 3 -1 0 1 -0 - -2 # Number of statements - -1 -# {c1, c2, i, j | c1=i, c2=n, 1<=i<=n; i+1<=j<=n} -6 7 -0 1 -1 0 0 0 0 -0 0 0 1 0 -1 0 -1 0 1 0 0 0 -1 -1 0 -1 0 0 1 0 -1 0 -1 0 1 0 -1 -1 0 0 0 -1 1 0 -0 0 0 - -1 -# {c1, c2, i, j, k | c1=k, c2=j, 1<=i<=n; i+1<=j<=n i+1<=k<=n} -8 8 -0 1 0 0 0 -1 0 0 -0 0 0 -1 1 0 0 0 -1 0 1 0 0 0 0 -1 -1 0 -1 0 0 0 1 0 -1 0 -1 1 0 0 0 -1 -1 0 0 -1 0 0 1 0 -1 0 -1 0 0 1 0 -1 -1 0 0 0 0 -1 1 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/lux.good.c b/cloog-0.16.3/test/lux.good.c deleted file mode 100644 index e30289c..0000000 --- a/cloog-0.16.3/test/lux.good.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Generated from ../../../git/cloog/test/lux.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k,l) { hash(1); hash(i); hash(j); hash(k); hash(l); } -#define S2(i,j,k,l,m) { hash(2); hash(i); hash(j); hash(k); hash(l); hash(m); } - -void test(int M) -{ - /* Original iterators. */ - int i, j, k, l, m; - if (M >= 2) { - for (l=2;l<=M;l++) { - S1(1,1,M,l) ; - } - } - for (i=2;i<=M-1;i++) { - for (j=1;j<=i-1;j++) { - for (k=j+1;k<=M;k++) { - S2(i,j,k,k,i) ; - } - } - for (l=i+1;l<=M;l++) { - S1(i,i,M,l) ; - } - } - if (M >= 2) { - for (j=1;j<=M-1;j++) { - for (k=j+1;k<=M;k++) { - S2(M,j,k,k,M) ; - } - } - } -} diff --git a/cloog-0.16.3/test/merge.c b/cloog-0.16.3/test/merge.c deleted file mode 100644 index b85ca1c..0000000 --- a/cloog-0.16.3/test/merge.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/merge.cloog by CLooG 0.14.0-238-gb1cb779 gmp bits in 0.00s. */ -S1(0); -for (c1=0;c1<=10;c1++) { - if (c1 >= 2) { - S2(c1); - } - S3(c1); -} diff --git a/cloog-0.16.3/test/merge.cloog b/cloog-0.16.3/test/merge.cloog deleted file mode 100644 index d98c1d0..0000000 --- a/cloog-0.16.3/test/merge.cloog +++ /dev/null @@ -1,42 +0,0 @@ -c - -0 2 - -0 - -3 - -1 -1 3 -0 -1 0 -0 0 0 - -1 -2 3 -1 1 -2 -1 -1 10 -0 0 0 - -1 -2 3 -1 1 0 -1 -1 10 -0 0 0 - -0 - -3 - -2 5 -0 1 0 -1 0 -0 0 1 0 0 - -2 5 -0 1 0 -1 0 -0 0 1 0 -1 - -2 5 -0 1 0 -1 0 -0 0 1 0 -2 - -0 diff --git a/cloog-0.16.3/test/merge.good.c b/cloog-0.16.3/test/merge.good.c deleted file mode 100644 index 283dc4b..0000000 --- a/cloog-0.16.3/test/merge.good.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/merge.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } -#define S3(i) { hash(3); hash(i); } - -void test() -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i; - for (c1=0;c1<=10;c1++) { - if (c1 == 0) { - S1(0) ; - } - if (c1 >= 2) { - S2(c1) ; - } - S3(c1) ; - } -} diff --git a/cloog-0.16.3/test/min-1-1.c b/cloog-0.16.3/test/min-1-1.c deleted file mode 100644 index 896fea0..0000000 --- a/cloog-0.16.3/test/min-1-1.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-1-1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if ((M >= 0) && (N >= 1)) { - for (i=1;i<=N;i++) { - for (j=0;j<=min(min(M,i),-i+N);j++) { - S1(i,j) ; - } - } -} diff --git a/cloog-0.16.3/test/min-1-1.cloog b/cloog-0.16.3/test/min-1-1.cloog deleted file mode 100644 index a15cdbd..0000000 --- a/cloog-0.16.3/test/min-1-1.cloog +++ /dev/null @@ -1,27 +0,0 @@ -# language: C -c - -# Context -# {M,N | 1>=0} -1 4 -# M N 1 -1 0 0 1 -0 - -1 # Number of statements - -1 -# {i,j |1<=i<=N; 0<=j<=M; j<=i; j+i<=N}, i.e. -# {i,j | (1,j)<=i<=-j+N; 0<=j<=M} -6 6 -# i j M N 1 -1 1 0 0 0 -1 -1 0 1 0 0 0 -1 0 -1 1 0 0 -1 1 -1 0 0 0 -1 -1 -1 0 1 0 -1 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/min-1-1.good.c b/cloog-0.16.3/test/min-1-1.good.c deleted file mode 100644 index ff0d5fc..0000000 --- a/cloog-0.16.3/test/min-1-1.good.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-1-1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - if (M >= 0) { - for (i=1;i<=N;i++) { - for (j=0;j<=min(min(i,-i+N),M);j++) { - S1(i,j) ; - } - } - } -} diff --git a/cloog-0.16.3/test/min-2-1.c b/cloog-0.16.3/test/min-2-1.c deleted file mode 100644 index f7161bc..0000000 --- a/cloog-0.16.3/test/min-2-1.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-2-1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if ((M >= 0) && (N >= 1)) { - for (i=1;i<=N;i++) { - for (j=0;j<=min(min(M,i),-i+N);j++) { - for (k=0;k<=min(min(M,i),-i+N);k++) { - S1(i,j,k) ; - } - } - } -} diff --git a/cloog-0.16.3/test/min-2-1.cloog b/cloog-0.16.3/test/min-2-1.cloog deleted file mode 100644 index 0c1ed37..0000000 --- a/cloog-0.16.3/test/min-2-1.cloog +++ /dev/null @@ -1,31 +0,0 @@ -# language: C -c - -# Context -# {M,N | 1>=0} -1 4 -# M N 1 -1 0 0 1 -0 - -1 # Number of statements - -1 -# {i,j |1<=i<=N; 0<=j<=M; j<=i; j+i<=N}, i.e. -# {i,j | (1,j)<=i<=-j+N; 0<=j<=M} -10 7 -# i j k M N 1 -1 1 0 0 0 0 -1 -1 0 1 0 0 0 0 -1 0 -1 0 1 0 0 -1 1 -1 0 0 0 0 -1 -1 -1 0 0 1 0 -1 0 0 1 0 0 0 -1 0 0 -1 1 0 0 -1 1 0 -1 0 0 0 -1 -1 0 -1 0 1 0 -1 0 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/min-2-1.good.c b/cloog-0.16.3/test/min-2-1.good.c deleted file mode 100644 index e052a0c..0000000 --- a/cloog-0.16.3/test/min-2-1.good.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-2-1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j, k; - if (M >= 0) { - for (i=1;i<=N;i++) { - for (j=0;j<=min(min(i,M),-i+N);j++) { - for (k=0;k<=min(min(M,i),-i+N);k++) { - S1(i,j,k) ; - } - } - } - } -} diff --git a/cloog-0.16.3/test/min-3-1.c b/cloog-0.16.3/test/min-3-1.c deleted file mode 100644 index 5736a3c..0000000 --- a/cloog-0.16.3/test/min-3-1.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-3-1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (i=0;i<=min(10,M);i++) { - for (j=0;j<=min(10,M);j++) { - S1(i,j) ; - } -} diff --git a/cloog-0.16.3/test/min-3-1.cloog b/cloog-0.16.3/test/min-3-1.cloog deleted file mode 100644 index f1a3c12..0000000 --- a/cloog-0.16.3/test/min-3-1.cloog +++ /dev/null @@ -1,27 +0,0 @@ -# language: C -c - -# Context -2 3 -# M 1 -1 1 0 -1 0 1 -0 - -1 # Number of statements - -1 -# -7 5 -# i j M 1 -1 1 0 0 0 -1 -1 0 1 0 -1 -1 0 0 10 -1 0 1 0 0 -1 0 -1 1 0 -1 0 -1 0 10 -1 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/min-3-1.good.c b/cloog-0.16.3/test/min-3-1.good.c deleted file mode 100644 index ec50b38..0000000 --- a/cloog-0.16.3/test/min-3-1.good.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-3-1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - for (i=0;i<=min(10,M);i++) { - for (j=0;j<=min(10,M);j++) { - S1(i,j) ; - } - } -} diff --git a/cloog-0.16.3/test/min-4-1.c b/cloog-0.16.3/test/min-4-1.c deleted file mode 100644 index 91e5e65..0000000 --- a/cloog-0.16.3/test/min-4-1.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-4-1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if ((M >= -N) && (M >= -O) && (N >= 0) && (N >= -O)) { - for (i=max(-M,-N);i<=min(N,O);i++) { - S1(i) ; - } -} diff --git a/cloog-0.16.3/test/min-4-1.cloog b/cloog-0.16.3/test/min-4-1.cloog deleted file mode 100644 index 5cce62f..0000000 --- a/cloog-0.16.3/test/min-4-1.cloog +++ /dev/null @@ -1,25 +0,0 @@ -# language: C -c - -# Context -# {L,M,N|} -1 5 -# L M N 1 -1 0 0 0 1 -0 - -1 # Number of statements - -1 -# {i|-L,-M <= i <= M, N} -5 6 -# i L M N 1 -1 1 1 0 0 0 -1 1 0 1 0 0 -1 -1 0 1 0 0 -1 -1 0 0 1 0 -1 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/min-4-1.good.c b/cloog-0.16.3/test/min-4-1.good.c deleted file mode 100644 index a04831f..0000000 --- a/cloog-0.16.3/test/min-4-1.good.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-4-1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test(int M, int N, int O) -{ - /* Original iterators. */ - int i; - for (i=max(-M,-N);i<=min(O,N);i++) { - S1(i) ; - } -} diff --git a/cloog-0.16.3/test/mod4.c b/cloog-0.16.3/test/mod4.c deleted file mode 100644 index 6a1ad6a..0000000 --- a/cloog-0.16.3/test/mod4.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/mod4.cloog by CLooG 0.14.0-225-g6e2d019 gmp bits in 0.00s. */ -for (j=2;j<=10;j+=3) { - S1(j,(j+1)/3,(j+1)/3,2,(j-2)/3); - S2(j,(j+1)/3,(j+1)/3,2,(j-2)/3); - S3(j,(j+1)/3,(j+1)/3,2,(j-2)/3); -} diff --git a/cloog-0.16.3/test/mod4.cloog b/cloog-0.16.3/test/mod4.cloog deleted file mode 100644 index 6f3eecd..0000000 --- a/cloog-0.16.3/test/mod4.cloog +++ /dev/null @@ -1,72 +0,0 @@ -# language: C -c - -# parameters -1 2 -1 1 - 0 - - -3 - - - -# S1: ND_4IP_3 -1 -11 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 0 0 10 - 0 0 0 0 1 0 -2 - 1 -1 0 0 0 3 2 - 1 -1 0 0 0 3 2 - 1 1 0 0 0 -3 0 - 0 1 0 0 -1 -3 0 - 1 1 -3 0 0 0 2 - 1 -1 3 0 0 0 0 - 1 1 0 -3 0 0 1 - 1 -1 0 3 0 0 1 - 0 0 0 - - - -# S2: W:ND_4OP_1 -1 -13 7 - 1 0 1 0 0 -1 -1 - 1 0 0 3 0 -3 -2 - 1 1 0 0 0 0 -1 - 1 -1 0 0 0 0 10 - 0 0 0 0 1 0 -2 - 1 -1 0 0 0 3 2 - 1 -1 0 0 0 3 2 - 1 1 0 0 0 -3 0 - 0 1 0 0 -1 -3 0 - 1 1 -3 0 0 0 2 - 1 -1 3 0 0 0 0 - 1 1 0 -3 0 0 1 - 1 -1 0 3 0 0 1 - 0 0 0 - - - -# S3: ND_4 -1 -11 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 0 0 10 - 0 0 0 0 1 0 -2 - 1 -1 0 0 0 3 2 - 1 -1 0 0 0 3 2 - 1 1 0 0 0 -3 0 - 0 1 0 0 -1 -3 0 - 1 1 -3 0 0 0 2 - 1 -1 3 0 0 0 0 - 1 1 0 -3 0 0 1 - 1 -1 0 3 0 0 1 - 0 0 0 - - - 1 - j div41 div42 mod6 mod6_a - 0 - 0 diff --git a/cloog-0.16.3/test/mode.c b/cloog-0.16.3/test/mode.c deleted file mode 100644 index c527eed..0000000 --- a/cloog-0.16.3/test/mode.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/mode.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.00s. */ -if (M >= 0) { - if (N >= 0) { - for (i=0;i<=M;i++) { - for (j=0;j<=min(N,i);j++) { - S1(i,j); - S2(i,j); - } - for (j=N+1;j<=i;j++) { - S1(i,j); - } - for (j=i+1;j<=N;j++) { - S2(i,j); - } - } - } - if (N <= -1) { - for (i=0;i<=M;i++) { - for (j=0;j<=i;j++) { - S1(i,j); - } - } - } -} diff --git a/cloog-0.16.3/test/mode.cloog b/cloog-0.16.3/test/mode.cloog deleted file mode 100644 index caeecb8..0000000 --- a/cloog-0.16.3/test/mode.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# language: C -c - -# parameters n m -1 4 -# n m 1 -1 0 0 1 -0 - -2 # Number of statements - -1 -# S2 {i, j | 0<=i<=n; 0<=j<=i} -4 6 -# i j n m 1 -1 1 0 0 0 0 -1 -1 0 1 0 0 -1 0 1 0 0 0 -1 1 -1 0 0 0 -0 0 0 - -1 -# S2 {i, j | 0<=i<=n; 0<=j<=m} -4 6 -# i j n m 1 -1 1 0 0 0 0 -1 -1 0 1 0 0 -1 0 1 0 0 0 -1 0 -1 0 1 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/mode.good.c b/cloog-0.16.3/test/mode.good.c deleted file mode 100644 index 0714757..0000000 --- a/cloog-0.16.3/test/mode.good.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Generated from ../../../git/cloog/test/mode.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - for (i=0;i<=min(M,N-1);i++) { - for (j=0;j<=i;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=i+1;j<=N;j++) { - S2(i,j) ; - } - } - if ((M >= N) && (N >= 0)) { - for (j=0;j<=N;j++) { - S1(N,j) ; - S2(N,j) ; - } - } - if (N >= 0) { - for (i=N+1;i<=M;i++) { - for (j=0;j<=N;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=N+1;j<=i;j++) { - S1(i,j) ; - } - } - } - if (N <= -1) { - for (i=0;i<=M;i++) { - for (j=0;j<=i;j++) { - S1(i,j) ; - } - } - } -} diff --git a/cloog-0.16.3/test/multi-mm-1.c b/cloog-0.16.3/test/multi-mm-1.c deleted file mode 100644 index 646395c..0000000 --- a/cloog-0.16.3/test/multi-mm-1.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/multi-mm-1.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.00s. */ -for (i=0;i<=M;i++) { - for (j=0;j<=min(N,i);j++) { - S1(i,j); - S2(i,j); - } - for (j=N+1;j<=i;j++) { - S1(i,j); - } -} diff --git a/cloog-0.16.3/test/multi-mm-1.cloog b/cloog-0.16.3/test/multi-mm-1.cloog deleted file mode 100644 index 58f4ce8..0000000 --- a/cloog-0.16.3/test/multi-mm-1.cloog +++ /dev/null @@ -1,37 +0,0 @@ -# language: C -c - -# Context -#{M,N|M>N} -3 4 -# M N 1 -1 1 -1 0 -1 0 1 -1 -1 0 0 1 -0 - -2 # Number of statements - -1 -# -4 6 -# i j M N 1 -1 0 1 0 0 0 -1 1 -1 0 0 0 -1 -1 0 1 0 0 -1 0 0 0 0 1 -0 0 0 - -1 -# -5 6 -# i j M N 1 -1 0 1 0 0 0 -1 1 -1 0 0 0 -1 -1 0 1 0 0 -1 0 -1 0 1 0 -1 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/multi-mm-1.good.c b/cloog-0.16.3/test/multi-mm-1.good.c deleted file mode 100644 index 6bfcc3c..0000000 --- a/cloog-0.16.3/test/multi-mm-1.good.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Generated from ../../../git/cloog/test/multi-mm-1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - for (i=0;i<=N;i++) { - for (j=0;j<=i;j++) { - S1(i,j) ; - S2(i,j) ; - } - } - for (i=N+1;i<=M;i++) { - for (j=0;j<=N;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=N+1;j<=i;j++) { - S1(i,j) ; - } - } -} diff --git a/cloog-0.16.3/test/multi-stride.c b/cloog-0.16.3/test/multi-stride.c deleted file mode 100644 index 51b2061..0000000 --- a/cloog-0.16.3/test/multi-stride.c +++ /dev/null @@ -1 +0,0 @@ -/* Generated from ../../../git/cloog/test/multi-stride.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ diff --git a/cloog-0.16.3/test/multi-stride.cloog b/cloog-0.16.3/test/multi-stride.cloog deleted file mode 100644 index 8f858da..0000000 --- a/cloog-0.16.3/test/multi-stride.cloog +++ /dev/null @@ -1,28 +0,0 @@ -# Language -c - -# Context - - 1 2 - 1 1 -0 - -# Number of statements -1 - -1 - -# i' i j 1 - 4 5 - 0 1 -2 0 -1 - 0 1 0 -6 -2 - 1 1 0 0 0 - 1 -1 0 0 100 - -0 0 0 - -0 -0 - - - diff --git a/cloog-0.16.3/test/multi-stride2.c b/cloog-0.16.3/test/multi-stride2.c deleted file mode 100644 index 443107b..0000000 --- a/cloog-0.16.3/test/multi-stride2.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Generated from ../../../git/cloog/test/multi-stride2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -for (i=5;i<=100;i+=6) { - S1(i,(i-1)/2,(i-2)/3) ; -} diff --git a/cloog-0.16.3/test/multi-stride2.cloog b/cloog-0.16.3/test/multi-stride2.cloog deleted file mode 100644 index db1afd4..0000000 --- a/cloog-0.16.3/test/multi-stride2.cloog +++ /dev/null @@ -1,28 +0,0 @@ -# Language -c - -# Context - - 1 2 - 1 1 -0 - -# Number of statements -1 - -1 - -# i' i j 1 - 4 5 - 0 1 -2 0 -1 - 0 1 0 -3 -2 - 1 1 0 0 0 - 1 -1 0 0 100 - -0 0 0 - -0 -0 - - - diff --git a/cloog-0.16.3/test/no_lindep.c b/cloog-0.16.3/test/no_lindep.c deleted file mode 100644 index 3c7c574..0000000 --- a/cloog-0.16.3/test/no_lindep.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/no_lindep.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -S1(N+2) ; diff --git a/cloog-0.16.3/test/no_lindep.cloog b/cloog-0.16.3/test/no_lindep.cloog deleted file mode 100644 index ab0cb7d..0000000 --- a/cloog-0.16.3/test/no_lindep.cloog +++ /dev/null @@ -1,34 +0,0 @@ -# language C -c - -# 2 parameters -1 4 -1 0 0 0 - -0 - -# 1 statement -1 - -# 1 domain -# i=n+2 -1 -1 5 -0 -1 0 1 2 - -0 0 0 - -0 - -# 1 scattering function -# c1=M+1 -# c2=N -1 -2 7 -0 -1 0 0 1 0 1 -0 0 -1 0 0 1 0 - -0 - - - diff --git a/cloog-0.16.3/test/no_lindep.good.c b/cloog-0.16.3/test/no_lindep.good.c deleted file mode 100644 index 5db6759..0000000 --- a/cloog-0.16.3/test/no_lindep.good.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/no_lindep.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i; - c1 = M+1 ; - i = N+2 ; - S1(N+2) ; -} diff --git a/cloog-0.16.3/test/non_optimal/nul_complex1.c b/cloog-0.16.3/test/non_optimal/nul_complex1.c deleted file mode 100644 index ff78145..0000000 --- a/cloog-0.16.3/test/non_optimal/nul_complex1.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/./non_optimal/nul_complex1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -if (n >= 0) { - for (c1=0;c1<=5*n;c1++) { - for (c2=max(ceild(2*c1,3),c1-n);c2<=min(floord(2*c1+2*n,3),c1);c2++) { - if (c2%2 == 0) { - S1((-2*c1+3*c2)/2,c1-c2) ; - } - } - } -} diff --git a/cloog-0.16.3/test/non_optimal/nul_complex1.cloog b/cloog-0.16.3/test/non_optimal/nul_complex1.cloog deleted file mode 100644 index 4b4d45a..0000000 --- a/cloog-0.16.3/test/non_optimal/nul_complex1.cloog +++ /dev/null @@ -1,37 +0,0 @@ -# Optimal code is in fact : -# -# for (i=0;i<=M;i+=2) { -# S1 ; -# } - -# language: C -c - -# parameter n -1 3 -# n 1 -1 0 1 -1 -n - -1 # Number of statements - -1 -# {i | 0<=i<=n} -4 5 -# i j n 1 -1 1 0 0 0 -1 -1 0 1 0 -1 0 1 0 0 -1 0 -1 1 0 -0 0 0 -0 - -1 # Scattering functions - -2 7 -# c1 c2 i j n 1 -0 1 0 -2 -3 0 0 -0 0 1 -2 -2 0 0 - -0 diff --git a/cloog-0.16.3/test/non_optimal/nul_complex1.good.c b/cloog-0.16.3/test/non_optimal/nul_complex1.good.c deleted file mode 100644 index 79694f1..0000000 --- a/cloog-0.16.3/test/non_optimal/nul_complex1.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/./non_optimal/nul_complex1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int n) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j; - for (c1=0;c1<=5*n;c1++) { - for (c2=max(c1-n,ceild(2*c1,3));c2<=min(c1,floord(2*c1+2*n,3));c2++) { - if (c2%2 == 0) { - i = (-2*c1+3*c2)/2 ; - j = c1-c2 ; - S1((-2*c1+3*c2)/2,c1-c2) ; - } - } - } -} diff --git a/cloog-0.16.3/test/non_optimal/usvd_e_t.c b/cloog-0.16.3/test/non_optimal/usvd_e_t.c deleted file mode 100644 index 6d253f6..0000000 --- a/cloog-0.16.3/test/non_optimal/usvd_e_t.c +++ /dev/null @@ -1,375 +0,0 @@ -/* Generated from ../../../git/cloog/test/non_optimal/usvd_e_t.cloog by CLooG 0.14.0-238-gb1cb779 gmp bits in 0.11s. */ -for (i=0;i<=2;i++) { - S1(i,0,0); - for (j=0;j<=4;j++) { - S2(i,j,0); - } -} -S1(3,0,0); -for (j=0;j<=4;j++) { - S2(3,j,0); -} -for (j=7;j<=11;j++) { - S8(3,j,0); -} -S1(4,0,0); -S2(4,0,0); -S3(4,0,0); -S5(4,0,0); -for (j=1;j<=4;j++) { - S2(4,j,0); - S5(4,j,0); -} -for (j=7;j<=11;j++) { - S8(4,j,0); -} -for (i=5;i<=6;i++) { - for (j=-4;j<=i-9;j++) { - S6(i,j,0); - } - for (j=i-9;j<=-1;j++) { - S7(i,j,0); - } - S3(i,0,0); - S7(i,0,0); - for (j=1;j<=i-4;j++) { - S4(i,j,-1); - } - for (j=i-4;j<=4;j++) { - S5(i,j,0); - } - for (j=7;j<=11;j++) { - S8(i,j,0); - } -} -for (j=-4;j<=-2;j++) { - S6(7,j,0); -} -for (j=-2;j<=-1;j++) { - S7(7,j,0); -} -S3(7,0,0); -S7(7,0,0); -for (j=1;j<=3;j++) { - S4(7,j,-1); -} -for (j=3;j<=4;j++) { - S5(7,j,0); -} -S9(7,4,0); -S10(7,4,0); -S11(7,4,0); -S21(7,4,0); -S23(7,4,0); -S11(7,4,1); -S16(7,4,1); -S17(7,4,1); -for (k=2;k<=4;k++) { - S11(7,4,k); -} -S12(7,5,0); -S21(7,5,0); -S22(7,5,0); -S23(7,5,0); -S12(7,5,1); -S16(7,5,1); -S17(7,5,1); -for (k=2;k<=4;k++) { - S12(7,5,k); -} -S21(7,6,0); -S22(7,6,0); -S23(7,6,0); -for (j=7;j<=8;j++) { - S8(7,j,0); - S21(7,j,0); - S22(7,j,0); - S23(7,j,0); -} -S8(7,9,0); -S22(7,9,0); -for (j=10;j<=11;j++) { - S8(7,j,0); -} -for (j=-4;j<=-1;j++) { - S6(8,j,0); -} -S7(8,-1,0); -S3(8,0,0); -S7(8,0,0); -S19(8,1,-2); -S4(8,1,-1); -S19(8,1,-1); -S19(8,1,0); -S15(8,1,4); -S18(8,1,4); -for (k=-4;k<=-3;k++) { - S14(8,2,k); - S20(8,2,k); -} -S14(8,2,-2); -S19(8,2,-2); -S20(8,2,-2); -S4(8,2,-1); -S14(8,2,-1); -S19(8,2,-1); -S20(8,2,-1); -S14(8,2,0); -S19(8,2,0); -S20(8,2,0); -S15(8,2,4); -S18(8,2,4); -for (k=-4;k<=-2;k++) { - S14(8,3,k); - S20(8,3,k); -} -S4(8,3,-1); -S14(8,3,-1); -S20(8,3,-1); -S14(8,3,0); -S20(8,3,0); -S15(8,3,4); -S18(8,3,4); -for (k=-4;k<=-2;k++) { - S14(8,4,k); - S20(8,4,k); -} -S4(8,4,-1); -S14(8,4,-1); -S20(8,4,-1); -S5(8,4,0); -S9(8,4,0); -S10(8,4,0); -S14(8,4,0); -S20(8,4,0); -S23(8,4,0); -S13(8,4,1); -S21(8,4,1); -S23(8,4,1); -S24(8,4,1); -S13(8,4,2); -S16(8,4,2); -S17(8,4,2); -S24(8,4,2); -S13(8,4,3); -S24(8,4,3); -S13(8,4,4); -S15(8,4,4); -S23(8,5,0); -S11(8,5,1); -S21(8,5,1); -S22(8,5,1); -S23(8,5,1); -S24(8,5,1); -S11(8,5,2); -S16(8,5,2); -S17(8,5,2); -S24(8,5,2); -S11(8,5,3); -S24(8,5,3); -S11(8,5,4); -S15(8,5,4); -S23(8,6,0); -S12(8,6,1); -S21(8,6,1); -S22(8,6,1); -S23(8,6,1); -S24(8,6,1); -S12(8,6,2); -S16(8,6,2); -S17(8,6,2); -S24(8,6,2); -S12(8,6,3); -S24(8,6,3); -S12(8,6,4); -for (j=7;j<=8;j++) { - S23(8,j,0); - S21(8,j,1); - S22(8,j,1); - S23(8,j,1); - for (k=1;k<=3;k++) { - S24(8,j,k); - } -} -S22(8,9,1); -S7(9,0,0); -for (j=1;j<=2;j++) { - for (k=-1;k<=0;k++) { - S19(9,j,k); - } - for (k=4;k<=5;k++) { - S15(9,j,k); - S18(9,j,k); - } -} -S20(9,3,-4); -for (k=-3;k<=-2;k++) { - S14(9,3,k); - S20(9,3,k); -} -for (k=-1;k<=0;k++) { - S14(9,3,k); - S19(9,3,k); - S20(9,3,k); -} -for (k=4;k<=5;k++) { - S15(9,3,k); - S18(9,3,k); -} -S20(9,4,-4); -for (k=-3;k<=-1;k++) { - S14(9,4,k); - S20(9,4,k); -} -S9(9,4,0); -S10(9,4,0); -S14(9,4,0); -S20(9,4,0); -for (k=0;k<=1;k++) { - S23(9,4,k); -} -S13(9,4,2); -S21(9,4,2); -S23(9,4,2); -S24(9,4,2); -S13(9,4,3); -S16(9,4,3); -S17(9,4,3); -S24(9,4,3); -S13(9,4,4); -for (k=4;k<=5;k++) { - S15(9,4,k); - S18(9,4,k); -} -for (k=0;k<=1;k++) { - S23(9,5,k); -} -S13(9,5,2); -S21(9,5,2); -S22(9,5,2); -S23(9,5,2); -S24(9,5,2); -S13(9,5,3); -S16(9,5,3); -S17(9,5,3); -S24(9,5,3); -S13(9,5,4); -for (k=4;k<=5;k++) { - S15(9,5,k); -} -for (k=0;k<=1;k++) { - S23(9,6,k); -} -S11(9,6,2); -S21(9,6,2); -S22(9,6,2); -S23(9,6,2); -S24(9,6,2); -S11(9,6,3); -S16(9,6,3); -S17(9,6,3); -S24(9,6,3); -S11(9,6,4); -for (k=0;k<=1;k++) { - S23(9,7,k); -} -S12(9,7,2); -S21(9,7,2); -S22(9,7,2); -S23(9,7,2); -S24(9,7,2); -S12(9,7,3); -S16(9,7,3); -S17(9,7,3); -S24(9,7,3); -S12(9,7,4); -for (k=0;k<=1;k++) { - S23(9,8,k); -} -S21(9,8,2); -S22(9,8,2); -S23(9,8,2); -for (k=2;k<=3;k++) { - S24(9,8,k); -} -S22(9,9,2); -for (j=1;j<=3;j++) { - S19(10,j,0); - S26(10,j,3); - S15(10,j,4); - S18(10,j,4); - S25(10,j,4); - for (k=5;k<=6;k++) { - S15(10,j,k); - S18(10,j,k); - } -} -for (k=-4;k<=-3;k++) { - S20(10,4,k); -} -for (k=-2;k<=-1;k++) { - S14(10,4,k); - S20(10,4,k); -} -S9(10,4,0); -S10(10,4,0); -S14(10,4,0); -S19(10,4,0); -S20(10,4,0); -S13(10,4,3); -S21(10,4,3); -S24(10,4,3); -S26(10,4,3); -S13(10,4,4); -S15(10,4,4); -S16(10,4,4); -S17(10,4,4); -S18(10,4,4); -S25(10,4,4); -for (k=5;k<=6;k++) { - S15(10,4,k); - S18(10,4,k); -} -S13(10,5,3); -S21(10,5,3); -S22(10,5,3); -S24(10,5,3); -S26(10,5,3); -S13(10,5,4); -S15(10,5,4); -S16(10,5,4); -S17(10,5,4); -S18(10,5,4); -S25(10,5,4); -for (k=5;k<=6;k++) { - S15(10,5,k); - S18(10,5,k); -} -S13(10,6,3); -S21(10,6,3); -S22(10,6,3); -S24(10,6,3); -S13(10,6,4); -S16(10,6,4); -S17(10,6,4); -S11(10,7,3); -S21(10,7,3); -S22(10,7,3); -S24(10,7,3); -S11(10,7,4); -S16(10,7,4); -S17(10,7,4); -S12(10,8,3); -S21(10,8,3); -S22(10,8,3); -S24(10,8,3); -S12(10,8,4); -S16(10,8,4); -S17(10,8,4); -S22(10,9,3); -for (i=11;i<=14;i++) { - for (j=1;j<=5;j++) { - S26(i,j,3); - S25(i,j,4); - } -} diff --git a/cloog-0.16.3/test/non_optimal/usvd_e_t.cloog b/cloog-0.16.3/test/non_optimal/usvd_e_t.cloog deleted file mode 100644 index a8d8510..0000000 --- a/cloog-0.16.3/test/non_optimal/usvd_e_t.cloog +++ /dev/null @@ -1,240 +0,0 @@ -# language: C -c - -# Context -0 2 - -0 # parameter names - -26 # Number of statements - -1 -4 5 -# i j k 1 - 0 0 1 0 0 - 0 0 0 1 0 - 1 1 0 0 0 - 1 -1 0 0 4 -0 0 0 -1 -5 5 -# i j k 1 - 0 0 0 1 0 - 1 1 0 0 0 - 1 -1 0 0 4 - 1 0 1 0 0 - 1 0 -1 0 4 -0 0 0 -1 -4 5 -# i j k 1 - 0 0 1 0 0 - 0 0 0 1 0 - 1 1 0 0 -4 - 1 -1 0 0 8 -0 0 0 -1 -4 5 -# i j k 1 - 0 0 0 1 1 - 1 -1 0 0 8 - 1 0 1 0 -1 - 1 1 -1 0 -4 -0 0 0 -1 -4 5 -# i j k 1 - 0 0 0 1 0 - 1 1 0 0 -4 - 1 0 -1 0 4 - 1 -1 1 0 4 -0 0 0 -1 -4 5 -# i j k 1 - 0 0 0 1 0 - 1 -1 0 0 8 - 1 0 1 0 4 - 1 1 -1 0 -9 -0 0 0 -1 -4 5 -# i j k 1 - 0 0 0 1 0 - 1 1 0 0 -5 - 1 0 -1 0 0 - 1 -1 1 0 9 -0 0 0 -1 -5 5 -# i j k 1 - 0 0 0 1 0 - 1 1 0 0 -3 - 1 -1 0 0 7 - 1 0 1 0 -7 - 1 0 -1 0 11 -0 0 0 -1 -4 5 -# i j k 1 - 0 0 1 0 -4 - 0 0 0 1 0 - 1 1 0 0 -7 - 1 -1 0 0 10 -0 0 0 -1 -4 5 -# i j k 1 - 0 0 1 0 -4 - 0 0 0 1 0 - 1 1 0 0 -7 - 1 -1 0 0 10 -0 0 0 -1 -5 5 -# i j k 1 - 0 1 -1 0 -3 - 1 0 -1 0 7 - 1 0 1 0 -4 - 1 0 0 -1 4 - 1 0 -1 1 4 -0 0 0 -1 -5 5 -# i j k 1 - 0 1 -1 0 -2 - 1 0 1 0 -5 - 1 0 -1 0 8 - 1 0 0 -1 4 - 1 0 -1 1 5 -0 0 0 -1 -5 5 -# i j k 1 - 1 -1 0 0 10 - 1 0 1 0 -4 - 1 0 0 -1 4 - 1 -1 0 1 7 - 1 1 -1 0 -4 -0 0 0 -1 -5 5 -# i j k 1 - 1 1 0 0 -8 - 1 0 -1 0 4 - 1 0 0 -1 0 - 1 -1 0 1 12 - 1 -1 1 0 6 -0 0 0 -1 -5 5 -# i j k 1 - 1 -1 0 0 10 - 1 0 1 0 -1 - 1 0 -1 0 5 - 1 0 0 1 -4 - 1 1 0 -1 -4 -0 0 0 -1 -5 5 -# i j k 1 - 0 1 0 -1 -6 - 1 0 0 -1 4 - 1 0 1 0 -4 - 1 0 0 1 -1 - 1 0 -1 1 4 -0 0 0 -1 -5 5 -# i j k 1 - 0 1 0 -1 -6 - 1 0 0 1 -1 - 1 0 1 0 -4 - 1 0 0 -1 4 - 1 0 -1 1 4 -0 0 0 -1 -5 5 -# i j k 1 - 1 -1 0 0 10 - 1 0 1 0 -1 - 1 0 0 1 -4 - 1 1 0 -1 -4 - 1 1 -1 0 -5 -0 0 0 -1 -5 5 -# i j k 1 - 1 1 0 0 -8 - 1 0 1 0 -1 - 1 0 0 -1 0 - 1 -1 0 1 10 - 1 1 -1 0 -6 -0 0 0 -1 -5 5 -# i j k 1 - 1 1 0 0 -8 - 1 0 -1 0 4 - 1 0 0 1 4 - 1 0 0 -1 0 - 1 -1 1 0 6 -0 0 0 -1 -5 5 -# i j k 1 - 0 1 0 -1 -7 - 1 0 0 -1 3 - 1 0 1 0 -4 - 1 0 -1 0 8 - 1 0 0 1 0 -0 0 0 -1 -5 5 -# i j k 1 - 0 1 0 -1 -7 - 1 0 0 1 0 - 1 0 1 0 -5 - 1 0 -1 0 9 - 1 0 0 -1 3 -0 0 0 -1 -5 5 -# i j k 1 - 1 -1 0 0 9 - 1 0 1 0 -4 - 1 0 -1 0 8 - 1 0 0 1 0 - 1 1 0 -1 -7 -0 0 0 -1 -5 5 -# i j k 1 - 1 1 0 0 -8 - 1 0 1 0 -4 - 1 0 -1 0 8 - 1 0 0 -1 3 - 1 -1 0 1 7 -0 0 0 -1 -5 5 -# i j k 1 - 0 0 0 1 -4 - 1 1 0 0 -10 - 1 -1 0 0 14 - 1 0 1 0 -1 - 1 0 -1 0 5 -0 0 0 -1 -5 5 -# i j k 1 - 0 0 0 1 -3 - 1 1 0 0 -10 - 1 -1 0 0 14 - 1 0 1 0 -1 - 1 0 -1 0 5 -0 0 0 -0 # iterator names -0 # scattering functions -0 # scattering dimension names - diff --git a/cloog-0.16.3/test/non_optimal/usvd_e_t.good.c b/cloog-0.16.3/test/non_optimal/usvd_e_t.good.c deleted file mode 100644 index f54c11c..0000000 --- a/cloog-0.16.3/test/non_optimal/usvd_e_t.good.c +++ /dev/null @@ -1,429 +0,0 @@ -/* Generated from ../../../git/cloog/test/./non_optimal/usvd_e_t.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.36s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } -#define S4(i,j,k) { hash(4); hash(i); hash(j); hash(k); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } -#define S6(i,j,k) { hash(6); hash(i); hash(j); hash(k); } -#define S7(i,j,k) { hash(7); hash(i); hash(j); hash(k); } -#define S8(i,j,k) { hash(8); hash(i); hash(j); hash(k); } -#define S9(i,j,k) { hash(9); hash(i); hash(j); hash(k); } -#define S10(i,j,k) { hash(10); hash(i); hash(j); hash(k); } -#define S11(i,j,k) { hash(11); hash(i); hash(j); hash(k); } -#define S12(i,j,k) { hash(12); hash(i); hash(j); hash(k); } -#define S13(i,j,k) { hash(13); hash(i); hash(j); hash(k); } -#define S14(i,j,k) { hash(14); hash(i); hash(j); hash(k); } -#define S15(i,j,k) { hash(15); hash(i); hash(j); hash(k); } -#define S16(i,j,k) { hash(16); hash(i); hash(j); hash(k); } -#define S17(i,j,k) { hash(17); hash(i); hash(j); hash(k); } -#define S18(i,j,k) { hash(18); hash(i); hash(j); hash(k); } -#define S19(i,j,k) { hash(19); hash(i); hash(j); hash(k); } -#define S20(i,j,k) { hash(20); hash(i); hash(j); hash(k); } -#define S21(i,j,k) { hash(21); hash(i); hash(j); hash(k); } -#define S22(i,j,k) { hash(22); hash(i); hash(j); hash(k); } -#define S23(i,j,k) { hash(23); hash(i); hash(j); hash(k); } -#define S24(i,j,k) { hash(24); hash(i); hash(j); hash(k); } -#define S25(i,j,k) { hash(25); hash(i); hash(j); hash(k); } -#define S26(i,j,k) { hash(26); hash(i); hash(j); hash(k); } - -void test() -{ - /* Original iterators. */ - int i, j, k; - for (i=0;i<=2;i++) { - S1(i,0,0) ; - S2(i,0,0) ; - for (j=1;j<=4;j++) { - S2(i,j,0) ; - } - } - S1(3,0,0) ; - S2(3,0,0) ; - for (j=1;j<=4;j++) { - S2(3,j,0) ; - } - for (j=7;j<=11;j++) { - S8(3,j,0) ; - } - S1(4,0,0) ; - S2(4,0,0) ; - S3(4,0,0) ; - S5(4,0,0) ; - for (j=1;j<=4;j++) { - S2(4,j,0) ; - S5(4,j,0) ; - } - for (j=7;j<=11;j++) { - S8(4,j,0) ; - } - S6(5,-4,0) ; - S7(5,-4,0) ; - for (j=-3;j<=-1;j++) { - S7(5,j,0) ; - } - S3(5,0,0) ; - S7(5,0,0) ; - S4(5,1,-1) ; - S5(5,1,0) ; - for (j=2;j<=4;j++) { - S5(5,j,0) ; - } - for (j=7;j<=11;j++) { - S8(5,j,0) ; - } - S6(6,-4,0) ; - S6(6,-3,0) ; - S7(6,-3,0) ; - for (j=-2;j<=-1;j++) { - S7(6,j,0) ; - } - S3(6,0,0) ; - S7(6,0,0) ; - S4(6,1,-1) ; - S4(6,2,-1) ; - S5(6,2,0) ; - for (j=3;j<=4;j++) { - S5(6,j,0) ; - } - for (j=7;j<=11;j++) { - S8(6,j,0) ; - } - for (j=-4;j<=-3;j++) { - S6(7,j,0) ; - } - S6(7,-2,0) ; - S7(7,-2,0) ; - S7(7,-1,0) ; - S3(7,0,0) ; - S7(7,0,0) ; - for (j=1;j<=2;j++) { - S4(7,j,-1) ; - } - S4(7,3,-1) ; - S5(7,3,0) ; - S5(7,4,0) ; - S9(7,4,0) ; - S10(7,4,0) ; - S11(7,4,0) ; - S21(7,4,0) ; - S23(7,4,0) ; - S11(7,4,1) ; - S16(7,4,1) ; - S17(7,4,1) ; - for (k=2;k<=4;k++) { - S11(7,4,k) ; - } - S12(7,5,0) ; - S21(7,5,0) ; - S22(7,5,0) ; - S23(7,5,0) ; - S12(7,5,1) ; - S16(7,5,1) ; - S17(7,5,1) ; - for (k=2;k<=4;k++) { - S12(7,5,k) ; - } - S21(7,6,0) ; - S22(7,6,0) ; - S23(7,6,0) ; - for (j=7;j<=8;j++) { - S8(7,j,0) ; - S21(7,j,0) ; - S22(7,j,0) ; - S23(7,j,0) ; - } - S8(7,9,0) ; - S22(7,9,0) ; - for (j=10;j<=11;j++) { - S8(7,j,0) ; - } - for (j=-4;j<=-2;j++) { - S6(8,j,0) ; - } - S6(8,-1,0) ; - S7(8,-1,0) ; - S3(8,0,0) ; - S7(8,0,0) ; - S19(8,1,-2) ; - S4(8,1,-1) ; - S19(8,1,-1) ; - S19(8,1,0) ; - S15(8,1,4) ; - S18(8,1,4) ; - for (k=-4;k<=-3;k++) { - S14(8,2,k) ; - S20(8,2,k) ; - } - S14(8,2,-2) ; - S19(8,2,-2) ; - S20(8,2,-2) ; - S4(8,2,-1) ; - S14(8,2,-1) ; - S19(8,2,-1) ; - S20(8,2,-1) ; - S14(8,2,0) ; - S19(8,2,0) ; - S20(8,2,0) ; - S15(8,2,4) ; - S18(8,2,4) ; - for (k=-4;k<=-2;k++) { - S14(8,3,k) ; - S20(8,3,k) ; - } - S4(8,3,-1) ; - S14(8,3,-1) ; - S20(8,3,-1) ; - S14(8,3,0) ; - S20(8,3,0) ; - S15(8,3,4) ; - S18(8,3,4) ; - for (k=-4;k<=-2;k++) { - S14(8,4,k) ; - S20(8,4,k) ; - } - S4(8,4,-1) ; - S14(8,4,-1) ; - S20(8,4,-1) ; - S5(8,4,0) ; - S9(8,4,0) ; - S10(8,4,0) ; - S14(8,4,0) ; - S20(8,4,0) ; - S23(8,4,0) ; - S13(8,4,1) ; - S21(8,4,1) ; - S23(8,4,1) ; - S24(8,4,1) ; - S13(8,4,2) ; - S16(8,4,2) ; - S17(8,4,2) ; - S24(8,4,2) ; - S13(8,4,3) ; - S24(8,4,3) ; - S13(8,4,4) ; - S15(8,4,4) ; - S23(8,5,0) ; - S11(8,5,1) ; - S21(8,5,1) ; - S22(8,5,1) ; - S23(8,5,1) ; - S24(8,5,1) ; - S11(8,5,2) ; - S16(8,5,2) ; - S17(8,5,2) ; - S24(8,5,2) ; - S11(8,5,3) ; - S24(8,5,3) ; - S11(8,5,4) ; - S15(8,5,4) ; - S23(8,6,0) ; - S12(8,6,1) ; - S21(8,6,1) ; - S22(8,6,1) ; - S23(8,6,1) ; - S24(8,6,1) ; - S12(8,6,2) ; - S16(8,6,2) ; - S17(8,6,2) ; - S24(8,6,2) ; - S12(8,6,3) ; - S24(8,6,3) ; - S12(8,6,4) ; - for (j=7;j<=8;j++) { - S23(8,j,0) ; - S21(8,j,1) ; - S22(8,j,1) ; - S23(8,j,1) ; - S24(8,j,1) ; - for (k=2;k<=3;k++) { - S24(8,j,k) ; - } - } - S22(8,9,1) ; - S7(9,0,0) ; - for (j=1;j<=2;j++) { - for (k=-1;k<=0;k++) { - S19(9,j,k) ; - } - for (k=4;k<=5;k++) { - S15(9,j,k) ; - S18(9,j,k) ; - } - } - S20(9,3,-4) ; - for (k=-3;k<=-2;k++) { - S14(9,3,k) ; - S20(9,3,k) ; - } - for (k=-1;k<=0;k++) { - S14(9,3,k) ; - S19(9,3,k) ; - S20(9,3,k) ; - } - for (k=4;k<=5;k++) { - S15(9,3,k) ; - S18(9,3,k) ; - } - S20(9,4,-4) ; - for (k=-3;k<=-1;k++) { - S14(9,4,k) ; - S20(9,4,k) ; - } - S9(9,4,0) ; - S10(9,4,0) ; - S14(9,4,0) ; - S20(9,4,0) ; - S23(9,4,0) ; - S23(9,4,1) ; - S13(9,4,2) ; - S21(9,4,2) ; - S23(9,4,2) ; - S24(9,4,2) ; - S13(9,4,3) ; - S16(9,4,3) ; - S17(9,4,3) ; - S24(9,4,3) ; - S13(9,4,4) ; - S15(9,4,4) ; - S18(9,4,4) ; - S15(9,4,5) ; - S18(9,4,5) ; - for (k=0;k<=1;k++) { - S23(9,5,k) ; - } - S13(9,5,2) ; - S21(9,5,2) ; - S22(9,5,2) ; - S23(9,5,2) ; - S24(9,5,2) ; - S13(9,5,3) ; - S16(9,5,3) ; - S17(9,5,3) ; - S24(9,5,3) ; - S13(9,5,4) ; - S15(9,5,4) ; - S15(9,5,5) ; - for (k=0;k<=1;k++) { - S23(9,6,k) ; - } - S11(9,6,2) ; - S21(9,6,2) ; - S22(9,6,2) ; - S23(9,6,2) ; - S24(9,6,2) ; - S11(9,6,3) ; - S16(9,6,3) ; - S17(9,6,3) ; - S24(9,6,3) ; - S11(9,6,4) ; - for (k=0;k<=1;k++) { - S23(9,7,k) ; - } - S12(9,7,2) ; - S21(9,7,2) ; - S22(9,7,2) ; - S23(9,7,2) ; - S24(9,7,2) ; - S12(9,7,3) ; - S16(9,7,3) ; - S17(9,7,3) ; - S24(9,7,3) ; - S12(9,7,4) ; - for (k=0;k<=1;k++) { - S23(9,8,k) ; - } - S21(9,8,2) ; - S22(9,8,2) ; - S23(9,8,2) ; - S24(9,8,2) ; - S24(9,8,3) ; - S22(9,9,2) ; - for (j=1;j<=3;j++) { - S19(10,j,0) ; - S26(10,j,3) ; - S15(10,j,4) ; - S18(10,j,4) ; - S25(10,j,4) ; - for (k=5;k<=6;k++) { - S15(10,j,k) ; - S18(10,j,k) ; - } - } - for (k=-4;k<=-3;k++) { - S20(10,4,k) ; - } - for (k=-2;k<=-1;k++) { - S14(10,4,k) ; - S20(10,4,k) ; - } - S9(10,4,0) ; - S10(10,4,0) ; - S14(10,4,0) ; - S19(10,4,0) ; - S20(10,4,0) ; - S13(10,4,3) ; - S21(10,4,3) ; - S24(10,4,3) ; - S26(10,4,3) ; - S13(10,4,4) ; - S15(10,4,4) ; - S16(10,4,4) ; - S17(10,4,4) ; - S18(10,4,4) ; - S25(10,4,4) ; - for (k=5;k<=6;k++) { - S15(10,4,k) ; - S18(10,4,k) ; - } - S13(10,5,3) ; - S21(10,5,3) ; - S22(10,5,3) ; - S24(10,5,3) ; - S26(10,5,3) ; - S13(10,5,4) ; - S15(10,5,4) ; - S16(10,5,4) ; - S17(10,5,4) ; - S18(10,5,4) ; - S25(10,5,4) ; - for (k=5;k<=6;k++) { - S15(10,5,k) ; - S18(10,5,k) ; - } - S13(10,6,3) ; - S21(10,6,3) ; - S22(10,6,3) ; - S24(10,6,3) ; - S13(10,6,4) ; - S16(10,6,4) ; - S17(10,6,4) ; - S11(10,7,3) ; - S21(10,7,3) ; - S22(10,7,3) ; - S24(10,7,3) ; - S11(10,7,4) ; - S16(10,7,4) ; - S17(10,7,4) ; - S12(10,8,3) ; - S21(10,8,3) ; - S22(10,8,3) ; - S24(10,8,3) ; - S12(10,8,4) ; - S16(10,8,4) ; - S17(10,8,4) ; - S22(10,9,3) ; - for (i=11;i<=14;i++) { - for (j=1;j<=5;j++) { - S26(i,j,3) ; - S25(i,j,4) ; - } - } -} diff --git a/cloog-0.16.3/test/non_optimal/youcef.c b/cloog-0.16.3/test/non_optimal/youcef.c deleted file mode 100644 index 386cea2..0000000 --- a/cloog-0.16.3/test/non_optimal/youcef.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/non_optimal/youcef.cloog by CLooG 0.14.0-238-gb1cb779 gmp bits in 0.00s. */ -for (i=0;i<=5;i++) { - S1(i,i); - for (j=i;j<=5;j++) { - S2(i,j); - } - S3(i,5); -} diff --git a/cloog-0.16.3/test/non_optimal/youcef.cloog b/cloog-0.16.3/test/non_optimal/youcef.cloog deleted file mode 100644 index 297bf79..0000000 --- a/cloog-0.16.3/test/non_optimal/youcef.cloog +++ /dev/null @@ -1,46 +0,0 @@ -# Optimal code is in fact : -# -# for (i=0;i<=M;i++) { -# S1 ; -# for (j=0;j<=N;j++) { -# S2 ; -# } -# S3 ; -# } - -# language: C -c - -# parameters {M, N | M>=1 N >=1} -0 2 -0 - -3 # Number of statements - -1 -# {i | 0<=i<=5 i==j} -3 4 -1 1 0 0 -1 -1 0 5 -0 1 -1 0 -0 0 0 - -1 -# {i | 0<=i<=5 i<=j<=5} -4 4 -1 1 0 0 -1 -1 0 5 -1 -1 1 0 -1 0 -1 5 -0 0 0 - -1 -# {i | 0<=i<=5 j==5} -3 4 -1 1 0 0 -1 -1 0 5 -0 0 1 -5 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/non_optimal/youcef.good.c b/cloog-0.16.3/test/non_optimal/youcef.good.c deleted file mode 100644 index 9fe1d31..0000000 --- a/cloog-0.16.3/test/non_optimal/youcef.good.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Generated from ../../../git/cloog/test/./non_optimal/youcef.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } - -void test() -{ - /* Original iterators. */ - int i, j; - for (i=0;i<=3;i++) { - S1(i,i) ; - S2(i,i) ; - for (j=i+1;j<=4;j++) { - S2(i,j) ; - } - S2(i,5) ; - S3(i,5) ; - } - S1(4,4) ; - S2(4,4) ; - S2(4,5) ; - S3(4,5) ; - S1(5,5) ; - S2(5,5) ; - S3(5,5) ; -} diff --git a/cloog-0.16.3/test/nul_basic1.c b/cloog-0.16.3/test/nul_basic1.c deleted file mode 100644 index d6b0cf0..0000000 --- a/cloog-0.16.3/test/nul_basic1.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/nul_basic1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -if (M >= 0) { - for (i=0;i<=M;i+=2) { - S1(i,i/2) ; - } -} diff --git a/cloog-0.16.3/test/nul_basic1.cloog b/cloog-0.16.3/test/nul_basic1.cloog deleted file mode 100644 index 878bd89..0000000 --- a/cloog-0.16.3/test/nul_basic1.cloog +++ /dev/null @@ -1,28 +0,0 @@ -# Optimal code is in fact : -# -# for (i=0;i<=M;i+=2) { -# S1 ; -# } - -# language: C -c - -# parameter n -1 3 -# n 1 -1 0 1 -0 - -1 # Number of statements - -1 -# {i, j | i=2*j; 0<=i<=n} -3 5 -# i j n 1 -0 1 -2 0 0 -1 1 0 0 0 -1 -1 0 1 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/nul_basic2.c b/cloog-0.16.3/test/nul_basic2.c deleted file mode 100644 index 6231f0e..0000000 --- a/cloog-0.16.3/test/nul_basic2.c +++ /dev/null @@ -1,7 +0,0 @@ -/* Generated from ../../../git/cloog/test/nul_basic2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (i=2;i<=n;i+=2) { - if (i%4 == 0) { - S2(i,i/4) ; - } - S1(i,i/2) ; -} diff --git a/cloog-0.16.3/test/nul_basic2.cloog b/cloog-0.16.3/test/nul_basic2.cloog deleted file mode 100644 index bf3c78c..0000000 --- a/cloog-0.16.3/test/nul_basic2.cloog +++ /dev/null @@ -1,54 +0,0 @@ -# Optimal code is in fact : -# -# for (i=0;i<=M;i+=2) { -# S1 ; -# } - -# language: C -c - -# parameter n -1 3 -# n 1 -1 1 -2 -1 -n - -2 # Number of statements - -1 -# {i, j | i=2*j; 1<=i<=n} -3 5 -# i j n 1 -0 1 -2 0 0 -1 1 0 0 -1 -1 -1 0 1 0 -0 0 0 - -1 -# {i, j | i=4*j; 1<=i<=n} -3 5 -# i j n 1 -0 1 -4 0 0 -1 1 0 0 -1 -1 -1 0 1 0 -0 0 0 -0 - -0 # Scattering functions -5 10 -# t1 t2 t3 t4 t5 i j n 1 -0 1 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 -1 0 0 0 -0 0 0 1 0 0 0 0 0 0 -0 0 0 0 1 0 0 -1 0 0 -0 0 0 0 0 1 0 0 0 0 - -5 10 -# t1 t2 t3 t4 t5 i j n 1 -0 1 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 -1 0 0 0 -0 0 0 1 0 0 0 0 0 0 -0 0 0 0 1 0 0 -1 0 0 -0 0 0 0 0 1 0 0 0 0 -0 diff --git a/cloog-0.16.3/test/nul_lcpc.c b/cloog-0.16.3/test/nul_lcpc.c deleted file mode 100644 index b9592f5..0000000 --- a/cloog-0.16.3/test/nul_lcpc.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Generated from ../../../git/cloog/test/nul_lcpc.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.03s. */ -for (i=1;i<=6;i+=2) { - for (j=1;j<=i;j++) { - S1(i,(i-1)/2,j) ; - S2(i,(i-1)/2,j) ; - } - for (j=i+1;j<=p;j++) { - S1(i,(i-1)/2,j) ; - } -} -for (i=7;i<=m;i+=2) { - for (j=1;j<=p;j++) { - S1(i,(i-1)/2,j) ; - } -} diff --git a/cloog-0.16.3/test/nul_lcpc.cloog b/cloog-0.16.3/test/nul_lcpc.cloog deleted file mode 100644 index 263e1ea..0000000 --- a/cloog-0.16.3/test/nul_lcpc.cloog +++ /dev/null @@ -1,39 +0,0 @@ -# language: C -c - -# parameter n -3 5 -# m n p 1 -1 1 -1 0 -1 -1 0 -1 1 -1 -0 0 1 0 -6 -1 -m n p - -2 # Number of statements - -1 -# {i, j, k | i=2*k+1; 1<=i<=m; 1<=j<=p} -5 8 -# i k j m n p 1 -0 1 -2 0 0 0 0 -1 # i=2*k+1 -1 1 0 0 0 0 0 -1 # 1<=i -1 -1 0 0 1 0 0 0 # i<=m -1 0 0 1 0 0 0 -1 # 1<=j -1 0 0 -1 0 0 1 0 # j<=p -0 0 0 - -1 -# {i, j, k | i=2*k+1; 1<=i<=n; 1<=j<=i} -5 8 -# i k j m n p 1 -0 1 -2 0 0 0 0 -1 # i=2*k+1 -1 1 0 0 0 0 0 -1 # 1<=i -1 -1 0 0 0 1 0 0 # i<=n -1 0 0 1 0 0 0 -1 # 1<=j -1 1 0 -1 0 0 0 0 # j<=i -0 0 0 -1 -i k j - -0 # Scattering functions diff --git a/cloog-0.16.3/test/orc.c b/cloog-0.16.3/test/orc.c deleted file mode 100644 index 7ed1547..0000000 --- a/cloog-0.16.3/test/orc.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Generated from ../../../git/cloog/test/orc.cloog by CLooG 0.16.2-5-g590827b gmp bits in 0.03s. */ -S1(0); -S2(0,0); -for (p2=1;p2<=22;p2++) { - if ((p2+1)%2 == 0) { - S3(0,(p2-1)/2); - } - if (p2%2 == 0) { - S2(0,p2/2); - } -} -S3(0,11); -for (p1=2;p1<=6;p1++) { - if ((p1+1)%3 == 0) { - S4((p1-2)/3); - } - if (p1%3 == 0) { - S1(p1/3); - } - if (p1 == 4) { - S2(1,0); - } - if (p1 == 4) { - for (p2=1;p2<=20;p2++) { - if ((p2+1)%2 == 0) { - S3(1,(p2-1)/2); - } - if (p2%2 == 0) { - S2(1,p2/2); - } - } - } - if (p1 == 4) { - S3(1,10); - } -} -S2(2,0); -for (p2=1;p2<=18;p2++) { - if ((p2+1)%2 == 0) { - S3(2,(p2-1)/2); - } - if (p2%2 == 0) { - S2(2,p2/2); - } -} -S3(2,9); -S4(2); -S5(0); -for (p2=0;p2<=9;p2++) { - S6(0,p2); -} -for (p1=2;p1<=42;p1++) { - if ((p1+1)%3 == 0) { - S7((p1-2)/3); - } - if (p1%3 == 0) { - S5(p1/3); - } - for (p2=0;p2<=9;p2++) { - if ((p1+2)%3 == 0) { - S6((p1-1)/3,p2); - } - } -} -for (p2=0;p2<=9;p2++) { - S6(14,p2); -} -S7(14); diff --git a/cloog-0.16.3/test/orc.cloog b/cloog-0.16.3/test/orc.cloog deleted file mode 100644 index 18c7cf2..0000000 --- a/cloog-0.16.3/test/orc.cloog +++ /dev/null @@ -1,133 +0,0 @@ - - -#-------------------CONTEXT------------------------ - c # language is c - # Context (no constarints on parameters) - 1 2 # 1 lines and 2 coloumns - # 1 - 1 0 - - 1 # We want to set manually the parameter names - -#---------------------STATEMENTS-------------------- - 7 #Number of Statements - - 1 #STMT 1 at line no. 12 has 1 domain - - # Domain 1 - 2 3 - # i 1 - 1 1 0 - 1 -1 2 -0 0 0 - 1 #STMT 2 at line no. 15 has 1 domain - - # Domain 1 - 4 4 - # i j 1 - 1 1 0 0 - 1 -1 0 2 - 1 0 1 0 - 1 -1 -1 11 -0 0 0 - 1 #STMT 3 at line no. 16 has 1 domain - - # Domain 1 - 4 4 - # i j 1 - 1 1 0 0 - 1 -1 0 2 - 1 0 1 0 - 1 -1 -1 11 -0 0 0 - 1 #STMT 4 at line no. 20 has 1 domain - - # Domain 1 - 2 3 - # i 1 - 1 1 0 - 1 -1 2 -0 0 0 - 1 #STMT 1 at line no. 32 has 1 domain - - # Domain 1 - 2 3 - # l 1 - 1 1 0 - 1 -1 14 -0 0 0 - 1 #STMT 2 at line no. 37 has 1 domain - - # Domain 1 - 4 4 - # l m 1 - 1 1 0 0 - 1 -1 0 14 - 1 0 1 0 - 1 0 -1 9 -0 0 0 - 1 #STMT 3 at line no. 41 has 1 domain - - # Domain 1 - 2 3 - # l 1 - 1 1 0 - 1 -1 14 -0 0 0 - 1 # Set Iterator Names - i j #Iterator Names - -#---------------------SCATTERING FUNCTIONS-------------------- - 7 #Scattering functions - -# Scattering Matrix for stmt at line no.12 - 3 6 - # p0 p1 p2 i 1 - 0 1 0 0 0 0 - 0 0 1 0 -3 0 - 0 0 0 1 0 0 - -# Scattering Matrix for stmt at line no.15 - 3 7 - # p0 p1 p2 i j 1 - 0 1 0 0 0 0 0 - 0 0 1 0 -3 0 -1 - 0 0 0 1 0 -2 0 - -# Scattering Matrix for stmt at line no.16 - 3 7 - # p0 p1 p2 i j 1 - 0 1 0 0 0 0 0 - 0 0 1 0 -3 0 -1 - 0 0 0 1 0 -2 -1 - -# Scattering Matrix for stmt at line no.20 - 3 6 - # p0 p1 p2 i 1 - 0 1 0 0 0 0 - 0 0 1 0 -3 -2 - 0 0 0 1 0 0 - -# Scattering Matrix for stmt at line no.32 - 3 6 - # p0 p1 p2 l 1 - 0 1 0 0 0 -2 - 0 0 1 0 -3 0 - 0 0 0 1 0 0 - -# Scattering Matrix for stmt at line no.37 - 3 7 - # p0 p1 p2 l m 1 - 0 1 0 0 0 0 -2 - 0 0 1 0 -3 0 -1 - 0 0 0 1 0 -1 0 - -# Scattering Matrix for stmt at line no.41 - 3 6 - # p0 p1 p2 l 1 - 0 1 0 0 0 -2 - 0 0 1 0 -3 -2 - 0 0 0 1 0 0 - - 1 # Set manually the scattering dimension names - p0 p1 p2 #Scattering dimension names diff --git a/cloog-0.16.3/test/orc.good.c b/cloog-0.16.3/test/orc.good.c deleted file mode 100644 index 2b2b7e7..0000000 --- a/cloog-0.16.3/test/orc.good.c +++ /dev/null @@ -1,110 +0,0 @@ -/* Generated from ../../../git/cloog/test/orc.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.06s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } -#define S4(i) { hash(4); hash(i); } -#define S5(i) { hash(5); hash(i); } -#define S6(i,j) { hash(6); hash(i); hash(j); } -#define S7(i) { hash(7); hash(i); } - -void test() -{ - /* Scattering iterators. */ - int p1, p2; - /* Original iterators. */ - int i, j; - S1(0) ; - S2(0,0) ; - for (p2=1;p2<=22;p2++) { - if ((p2+1)%2 == 0) { - j = (p2-1)/2 ; - S3(0,(p2-1)/2) ; - } - if (p2%2 == 0) { - S2(0,p2/2) ; - } - } - S3(0,11) ; - for (p1=2;p1<=6;p1++) { - if ((p1+1)%3 == 0) { - i = (p1-2)/3 ; - S4((p1-2)/3) ; - } - if ((p1+2)%3 == 0) { - i = (p1-1)/3 ; - S2((p1-1)/3,0) ; - } - if (p1%3 == 0) { - S1(p1/3) ; - } - for (p2=1;p2<=floord(-2*p1+68,3);p2++) { - if ((p1+2)%3 == 0) { - i = (p1-1)/3 ; - if ((p2+1)%2 == 0) { - j = (p2-1)/2 ; - S3((p1-1)/3,(p2-1)/2) ; - } - if (p2%2 == 0) { - S2((p1-1)/3,p2/2) ; - } - } - } - p2 = floord(-2*p1+71,3) ; - if ((p1+2)%3 == 0) { - i = (p1-1)/3 ; - if ((p2+1)%2 == 0) { - j = (p2-1)/2 ; - S3((p1-1)/3,(p2-1)/2) ; - } - } - } - S2(2,0) ; - for (p2=1;p2<=18;p2++) { - if ((p2+1)%2 == 0) { - j = (p2-1)/2 ; - S3(2,(p2-1)/2) ; - } - if (p2%2 == 0) { - S2(2,p2/2) ; - } - } - S3(2,9) ; - S4(2) ; - S5(0) ; - S6(0,0) ; - for (p2=1;p2<=9;p2++) { - S6(0,p2) ; - } - for (p1=2;p1<=42;p1++) { - if ((p1+1)%3 == 0) { - i = (p1-2)/3 ; - S7((p1-2)/3) ; - } - if ((p1+2)%3 == 0) { - i = (p1-1)/3 ; - S6((p1-1)/3,0) ; - } - if (p1%3 == 0) { - S5(p1/3) ; - } - for (p2=1;p2<=9;p2++) { - if ((p1+2)%3 == 0) { - i = (p1-1)/3 ; - S6((p1-1)/3,p2) ; - } - } - } - S6(14,0) ; - for (p2=1;p2<=9;p2++) { - S6(14,p2) ; - } - S7(14) ; -} diff --git a/cloog-0.16.3/test/otl.c b/cloog-0.16.3/test/otl.c deleted file mode 100644 index 93bd830..0000000 --- a/cloog-0.16.3/test/otl.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Generated from ../../../git/cloog/test/otl.cloog by CLooG 0.14.0-278-gcf1f323 gmp bits in 0.26s. */ -if ((M >= 3) && (N >= 4)) { - for (outerTimeTileScatter=1;outerTimeTileScatter<=floord(2*M+2*N-7,5);outerTimeTileScatter++) { - for (outerProcTileScatter1=max(ceild(outerTimeTileScatter,2),ceild(5*outerTimeTileScatter-M-2,5));outerProcTileScatter1<=min(min(floord(M+2*N-5,5),floord(5*outerTimeTileScatter+2*N+1,10)),outerTimeTileScatter);outerProcTileScatter1++) { - for (outerProcTileScatter2=max(max(max(max(ceild(outerTimeTileScatter-outerProcTileScatter1-1,2),ceild(5*outerProcTileScatter1-N-1,5)),ceild(5*outerTimeTileScatter-M-N+1,5)),ceild(5*outerTimeTileScatter-N-2,10)),outerTimeTileScatter-outerProcTileScatter1-1);outerProcTileScatter2<=min(min(min(floord(M+N-2,5),floord(5*outerTimeTileScatter-5*outerProcTileScatter1+N+4,5)),floord(5*outerTimeTileScatter+N+3,10)),outerProcTileScatter1);outerProcTileScatter2++) { - for (innerTimeTileScatter=max(max(max(ceild(10*outerProcTileScatter1-2*N,5),ceild(10*outerProcTileScatter2-N-2,5)),ceild(5*outerProcTileScatter1+5*outerProcTileScatter2-N-3,5)),outerTimeTileScatter);innerTimeTileScatter<=min(min(min(min(min(floord(2*M+2*N-6,5),floord(5*outerProcTileScatter1+M+3,5)),floord(5*outerProcTileScatter2+M+N,5)),floord(10*outerProcTileScatter2+N+3,5)),outerTimeTileScatter+1),outerProcTileScatter1+outerProcTileScatter2+1);innerTimeTileScatter++) { - for (innerProcTileScatter1=max(max(max(max(ceild(innerTimeTileScatter,2),ceild(5*innerTimeTileScatter-M-2,5)),ceild(5*outerTimeTileScatter-M-1,5)),outerProcTileScatter1),outerTimeTileScatter-outerProcTileScatter2);innerProcTileScatter1<=min(min(min(min(min(min(min(floord(M+2*N-4,5),floord(5*outerProcTileScatter2+N+2,5)),floord(-5*outerProcTileScatter2+5*innerTimeTileScatter+N+4,5)),floord(5*outerTimeTileScatter-5*outerProcTileScatter2+N+5,5)),floord(5*innerTimeTileScatter+2*N+2,10)),floord(5*outerTimeTileScatter+2*N+3,10)),outerTimeTileScatter),outerProcTileScatter1+1);innerProcTileScatter1++) { - for (innerProcTileScatter2=outerProcTileScatter2;innerProcTileScatter2<=outerProcTileScatter2;innerProcTileScatter2++) { - for (outerTimeTileIter=outerTimeTileScatter;outerTimeTileIter<=outerTimeTileScatter;outerTimeTileIter++) { - for (outerProcTileIter1=outerProcTileScatter1;outerProcTileIter1<=outerProcTileScatter1;outerProcTileIter1++) { - for (outerProcTileIter2=outerProcTileScatter2;outerProcTileIter2<=outerProcTileScatter2;outerProcTileIter2++) { - for (innerTimeTileIter=innerTimeTileScatter;innerTimeTileIter<=innerTimeTileScatter;innerTimeTileIter++) { - for (innerProcTileIter1=innerProcTileScatter1;innerProcTileIter1<=innerProcTileScatter1;innerProcTileIter1++) { - for (innerProcTileIter2=outerProcTileScatter2;innerProcTileIter2<=outerProcTileScatter2;innerProcTileIter2++) { - S1(outerTimeTileIter,outerProcTileIter1,outerProcTileIter2,innerTimeTileIter,innerProcTileIter1,innerProcTileIter2); - } - } - } - } - } - } - } - } - } - } - } - } -} diff --git a/cloog-0.16.3/test/otl.cloog b/cloog-0.16.3/test/otl.cloog deleted file mode 100644 index 5f9b783..0000000 --- a/cloog-0.16.3/test/otl.cloog +++ /dev/null @@ -1,117 +0,0 @@ -# created: Tue Mar 23 01:51:15 CET 2010 -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context -2 4 - 1 1 0 -1 - 1 0 1 -1 - - -1 # set parameter names -M N - -# --------------------- STATEMENTS -------------------- -1 - -1 # domains per statement -76 10 - 1 -5 0 0 0 0 0 2 2 -7 - 1 -20 0 0 0 20 20 0 0 16 - 1 -40 0 0 0 0 80 0 8 16 - 1 -4 4 0 0 0 4 0 0 4 - 1 -20 0 0 0 40 0 0 0 8 - 1 -20 0 20 0 20 0 0 0 16 - 1 -20 0 40 0 0 0 0 4 8 - 1 -20 40 0 0 0 0 0 0 16 - 1 -4 4 4 0 0 0 0 0 4 - 1 -20 0 0 0 0 20 4 4 -4 - 1 -10 0 0 0 10 0 2 0 2 - 1 -5 0 0 5 0 0 0 0 3 - 1 -5 5 0 0 0 0 1 0 2 - 1 -10 0 10 0 0 0 2 2 -2 - 1 0 -10 -10 10 0 0 0 2 6 - 1 20 -20 -20 0 0 0 0 4 16 - 1 0 -10 0 10 0 -10 0 2 6 - 1 40 -40 0 0 0 -40 0 8 32 - 1 0 -20 0 10 0 0 0 4 0 - 1 0 -10 0 0 0 0 2 4 -10 - 1 40 -80 0 0 0 0 0 16 8 - 1 0 -10 0 0 0 10 0 2 2 - 1 0 -5 0 0 5 0 0 0 3 - 1 0 -10 0 10 0 0 0 0 4 - 1 0 -5 5 0 0 0 0 1 1 - 1 20 -20 0 0 0 0 0 0 12 - 1 0 0 -10 10 -10 0 0 2 8 - 1 40 0 -40 0 -40 0 0 8 40 - 1 0 0 -20 10 0 0 0 2 4 - 1 0 0 -5 0 0 0 1 1 -2 - 1 40 0 -80 0 0 0 0 8 24 - 1 0 0 -5 0 0 5 0 0 4 - 1 0 0 -10 0 10 0 0 0 4 - 1 0 0 -10 10 0 0 0 0 2 - 1 0 5 -5 0 0 0 0 0 3 - 1 40 0 -40 0 0 0 0 0 16 - 1 0 0 0 -5 0 0 2 2 -6 - 1 0 0 0 -20 20 20 0 0 20 - 1 0 0 0 -40 0 80 0 8 24 - 1 0 20 0 -20 0 20 0 0 24 - 1 0 0 20 -20 20 0 0 0 20 - 1 0 0 0 -20 40 0 0 0 12 - 1 0 0 40 -20 0 0 0 4 12 - 1 0 40 0 -20 0 0 0 0 20 - 1 0 20 20 -20 0 0 0 0 24 - 1 0 0 0 -40 0 40 8 8 0 - 1 0 0 0 -20 20 0 4 0 8 - 1 0 0 20 -20 0 0 4 4 0 - 1 2 0 0 -2 0 0 0 0 2 - 1 0 10 0 -10 0 0 2 0 6 - 1 0 0 0 10 -10 -10 0 2 8 - 1 80 0 0 0 -80 -80 0 16 80 - 1 0 0 0 10 -20 0 0 4 4 - 1 0 0 0 0 -10 0 2 4 -8 - 1 120 0 0 0 -240 0 0 48 72 - 1 0 0 0 0 -20 20 0 4 8 - 1 0 0 0 10 -10 0 0 0 6 - 1 0 0 10 0 -10 0 0 2 4 - 1 0 1 0 0 -1 0 0 0 1 - 1 40 0 0 0 -40 0 0 0 32 - 1 0 0 0 10 0 -20 0 2 4 - 1 0 0 0 0 0 -5 1 1 -2 - 1 80 0 0 0 0 -160 0 16 48 - 1 0 0 0 0 10 -10 0 0 4 - 1 0 0 0 10 0 -10 0 0 2 - 1 0 0 5 0 0 -5 0 0 4 - 1 0 10 0 0 0 -10 0 0 6 - 1 40 0 0 0 0 -40 0 0 16 - 1 0 0 0 0 0 4 0 0 0 - 1 0 0 0 0 20 0 0 0 -8 - 1 0 0 0 20 0 0 0 0 -12 - 1 0 0 4 0 0 0 0 0 0 - 1 0 20 0 0 0 0 0 0 -4 - 1 80 0 0 0 0 0 0 0 -32 - 1 0 0 0 0 0 0 0 1 -4 - 1 0 0 0 0 0 0 1 0 -3 - - -0 0 0 # for future options... - - - -1 # set the iterator names -outerTimeTileIter outerProcTileIter1 outerProcTileIter2 innerTimeTileIter innerProcTileIter1 innerProcTileIter2 - -# --------------------- SCATTERING -------------------- -1 # Scattering functions -6 16 - 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 - - -1 # we set the scattering dimension names -outerTimeTileScatter outerProcTileScatter1 outerProcTileScatter2 innerTimeTileScatter innerProcTileScatter1 innerProcTileScatter2 - diff --git a/cloog-0.16.3/test/otl.good.c b/cloog-0.16.3/test/otl.good.c deleted file mode 100644 index 3004d8e..0000000 --- a/cloog-0.16.3/test/otl.good.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Generated from ../../../git/cloog/test/otl.cloog by CLooG 0.14.0-273-gfe7416f gmp bits in 0.24s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(outerTimeTileIter,outerProcTileIter1,outerProcTileIter2,innerTimeTileIter,innerProcTileIter1,innerProcTileIter2) { hash(1); hash(outerTimeTileIter); hash(outerProcTileIter1); hash(outerProcTileIter2); hash(innerTimeTileIter); hash(innerProcTileIter1); hash(innerProcTileIter2); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int outerTimeTileScatter, outerProcTileScatter1, outerProcTileScatter2, innerTimeTileScatter, innerProcTileScatter1, innerProcTileScatter2; - /* Original iterators. */ - int outerTimeTileIter, outerProcTileIter1, outerProcTileIter2, innerTimeTileIter, innerProcTileIter1, innerProcTileIter2; - if ((M >= 3) && (N >= 4)) { - for (outerTimeTileScatter=1;outerTimeTileScatter<=floord(2*M+2*N-7,5);outerTimeTileScatter++) { - for (outerProcTileScatter1=max(ceild(outerTimeTileScatter,2),ceild(5*outerTimeTileScatter-M-2,5));outerProcTileScatter1<=min(min(floord(M+2*N-5,5),floord(5*outerTimeTileScatter+2*N+1,10)),outerTimeTileScatter);outerProcTileScatter1++) { - for (outerProcTileScatter2=max(max(max(max(max(ceild(outerTimeTileScatter-outerProcTileScatter1-1,2),ceild(5*outerProcTileScatter1-N-1,5)),ceild(5*outerTimeTileScatter-M-N+1,5)),ceild(5*outerTimeTileScatter-N-2,10)),ceild(5*outerTimeTileScatter-N-3,15)),outerTimeTileScatter-outerProcTileScatter1-1);outerProcTileScatter2<=min(min(min(floord(M+N-2,5),floord(5*outerTimeTileScatter-5*outerProcTileScatter1+N+4,5)),floord(5*outerTimeTileScatter+N+3,10)),outerProcTileScatter1);outerProcTileScatter2++) { - for (innerTimeTileScatter=max(max(max(ceild(10*outerProcTileScatter1-2*N,5),ceild(10*outerProcTileScatter2-N-2,5)),ceild(5*outerProcTileScatter1+5*outerProcTileScatter2-N-3,5)),outerTimeTileScatter);innerTimeTileScatter<=min(min(min(min(min(floord(2*M+2*N-6,5),floord(5*outerProcTileScatter1+M+3,5)),floord(5*outerProcTileScatter2+M+N,5)),floord(10*outerProcTileScatter2+N+3,5)),outerTimeTileScatter+1),outerProcTileScatter1+outerProcTileScatter2+1);innerTimeTileScatter++) { - for (innerProcTileScatter1=max(max(max(max(ceild(innerTimeTileScatter,2),ceild(5*innerTimeTileScatter-M-2,5)),ceild(5*outerTimeTileScatter-M-1,5)),outerProcTileScatter1),outerTimeTileScatter-outerProcTileScatter2);innerProcTileScatter1<=min(min(min(min(min(min(min(floord(M+2*N-4,5),floord(5*outerProcTileScatter2+N+2,5)),floord(-5*outerProcTileScatter2+5*innerTimeTileScatter+N+4,5)),floord(5*outerTimeTileScatter-5*outerProcTileScatter2+N+5,5)),floord(5*innerTimeTileScatter+2*N+2,10)),floord(5*outerTimeTileScatter+2*N+3,10)),outerTimeTileScatter),outerProcTileScatter1+1);innerProcTileScatter1++) { - for (innerProcTileScatter2=outerProcTileScatter2;innerProcTileScatter2<=outerProcTileScatter2;innerProcTileScatter2++) { - for (outerTimeTileIter=outerTimeTileScatter;outerTimeTileIter<=outerTimeTileScatter;outerTimeTileIter++) { - for (outerProcTileIter1=outerProcTileScatter1;outerProcTileIter1<=outerProcTileScatter1;outerProcTileIter1++) { - for (outerProcTileIter2=outerProcTileScatter2;outerProcTileIter2<=outerProcTileScatter2;outerProcTileIter2++) { - for (innerTimeTileIter=innerTimeTileScatter;innerTimeTileIter<=innerTimeTileScatter;innerTimeTileIter++) { - for (innerProcTileIter1=innerProcTileScatter1;innerProcTileIter1<=innerProcTileScatter1;innerProcTileIter1++) { - for (innerProcTileIter2=outerProcTileScatter2;innerProcTileIter2<=outerProcTileScatter2;innerProcTileIter2++) { - S1(outerTimeTileIter,outerProcTileIter1,outerProcTileIter2,innerTimeTileIter,innerProcTileIter1,innerProcTileIter2); - } - } - } - } - } - } - } - } - } - } - } - } - } -} diff --git a/cloog-0.16.3/test/param-split.c b/cloog-0.16.3/test/param-split.c deleted file mode 100644 index 97c75b1..0000000 --- a/cloog-0.16.3/test/param-split.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/param-split.cloog by CLooG 0.14.0-277-gce2ba57 gmp bits in 0.00s. */ -for (i=0;i<=M;i++) { - S1(i); - if (i == 0) { - S2(i); - } -} -if (M <= -1) { - S2(0); -} diff --git a/cloog-0.16.3/test/param-split.cloog b/cloog-0.16.3/test/param-split.cloog deleted file mode 100644 index 6f9e58f..0000000 --- a/cloog-0.16.3/test/param-split.cloog +++ /dev/null @@ -1,24 +0,0 @@ -c - -0 3 - -0 - -2 - -1 -2 4 -1 1 0 0 -1 -1 1 0 - -0 0 0 - -1 -1 4 -0 1 0 0 - -0 0 0 - -0 - -0 diff --git a/cloog-0.16.3/test/param-split.good.c b/cloog-0.16.3/test/param-split.good.c deleted file mode 100644 index 25b3bc6..0000000 --- a/cloog-0.16.3/test/param-split.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/param-split.cloog by CLooG 0.14.0-277-gce2ba57 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } - -void test(int M) -{ - /* Original iterators. */ - int i; - if (M >= 0) { - S1(0); - S2(0); - } - for (i=1;i<=M;i++) { - S1(i); - } - if (M <= -1) { - S2(0); - } -} diff --git a/cloog-0.16.3/test/pouchet.c b/cloog-0.16.3/test/pouchet.c deleted file mode 100644 index 3eb887f..0000000 --- a/cloog-0.16.3/test/pouchet.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Generated from ../../../git/cloog/test/pouchet.cloog by CLooG 0.16.2-3-gc1aebd7 gmp bits in 0.03s. */ -if (Ny >= 2) { - for (c0=1;c0<=floord(Ny+4,2);c0++) { - for (c1=max(ceild(c0+1,2),c0-1);c1<=min(floord(2*c0+Ny,4),c0);c1++) { - if (c0 >= ceild(4*c1-Ny+1,2)) { - for (c2=1;c2<=2;c2++) { - S1(c0-c1,c1,2*c0-2*c1,-2*c0+4*c1,c2); - S2(c0-c1,c1,2*c0-2*c1,-2*c0+4*c1-1,c2); - } - } - if (2*c0 == 4*c1-Ny) { - for (c2=1;c2<=2;c2++) { - if (Ny%2 == 0) { - if ((2*c0+3*Ny)%4 == 0) { - S2((2*c0-Ny)/4,(2*c0+Ny)/4,(2*c0-Ny)/2,Ny-1,c2); - } - } - } - } - } - } -} diff --git a/cloog-0.16.3/test/pouchet.cloog b/cloog-0.16.3/test/pouchet.cloog deleted file mode 100644 index bef7293..0000000 --- a/cloog-0.16.3/test/pouchet.cloog +++ /dev/null @@ -1,76 +0,0 @@ -# CLooG -> CLooG -# This is an automatic dump of a CLooG input file from a CloogInput data -# structure. - -# Language: C -c - -# Context: -1 - -0 3 0 0 0 1 - -1 # Parameter name(s) -Ny - -# Statement number: -2 - -# Iteration domain of statement 2 ((null)). -1 - -8 8 5 0 0 1 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 0 2 -1 0 0 0 1 0 0 -1 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 1 0 -1 -1 0 0 0 0 -1 0 2 -0 -2 0 1 0 0 0 0 -0 0 -2 1 1 0 0 0 - -0 0 0 # For future options. - -# Iteration domain of statement 4 ((null)). -1 - -8 8 5 0 0 1 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 0 2 -1 0 0 0 1 0 0 -1 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 1 0 -1 -1 0 0 0 0 -1 0 2 -0 -2 0 1 0 0 0 0 -0 0 -2 1 1 0 0 1 - -0 0 0 # For future options. - -0 # Iterator name(s) -# --------------------- SCATTERING -------------------- -2 # Scattering functions - -# Scattering of statement 2 ((null)). -1 - -6 14 6 5 0 1 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 -0 0 0 0 0 1 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 1 0 0 0 0 0 -1 -1 0 0 0 0 0 - -# Scattering of statement 4 ((null)). -1 - -6 14 6 5 0 1 -0 0 0 0 0 0 1 0 0 0 0 -1 0 -1 -0 0 0 0 0 1 0 0 0 0 -1 0 0 -1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 1 0 0 0 0 0 -1 -1 0 0 0 0 0 - -1 # Scattering dimension name(s) -c0 c1 c2 c3 c4 c5 diff --git a/cloog-0.16.3/test/pouchet.good.c b/cloog-0.16.3/test/pouchet.good.c deleted file mode 100644 index 43009f5..0000000 --- a/cloog-0.16.3/test/pouchet.good.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Generated from ../../../git/cloog/test/pouchet.cloog by CLooG 0.16.2-3-gc1aebd7 gmp bits in 0.04s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k,l,m) { hash(1); hash(i); hash(j); hash(k); hash(l); hash(m); } -#define S2(i,j,k,l,m) { hash(2); hash(i); hash(j); hash(k); hash(l); hash(m); } - -void test(int Ny) -{ - /* Scattering iterators. */ - int c0, c1, c2, c3, c4, c5; - /* Original iterators. */ - int i, j, k, l, m; - if (Ny >= 2) { - for (c0=1;c0<=floord(Ny+4,2);c0++) { - for (c1=max(ceild(c0+1,2),c0-1);c1<=min(floord(2*c0+Ny,4),c0);c1++) { - if (c0 >= ceild(4*c1-Ny+1,2)) { - for (c2=1;c2<=2;c2++) { - S1(c0-c1,c1,2*c0-2*c1,-2*c0+4*c1,c2); - S2(c0-c1,c1,2*c0-2*c1,-2*c0+4*c1-1,c2); - } - } - if (2*c0 == 4*c1-Ny) { - for (c2=1;c2<=2;c2++) { - if (Ny%2 == 0) { - if ((2*c0+3*Ny)%4 == 0) { - S2((2*c0-Ny)/4,(2*c0+Ny)/4,(2*c0-Ny)/2,Ny-1,c2); - } - } - } - } - } - } - } -} diff --git a/cloog-0.16.3/test/rectangle.c b/cloog-0.16.3/test/rectangle.c deleted file mode 100644 index dba226a..0000000 --- a/cloog-0.16.3/test/rectangle.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/rectangle.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (c1=0;c1<=2*n;c1++) { - for (i=max(0,c1-n);i<=min(c1,n);i++) { - S1(i,c1-i) ; - } -} diff --git a/cloog-0.16.3/test/rectangle.cloog b/cloog-0.16.3/test/rectangle.cloog deleted file mode 100644 index 9f639ab..0000000 --- a/cloog-0.16.3/test/rectangle.cloog +++ /dev/null @@ -1,29 +0,0 @@ -# language: C -c - -# parameter {n | n>= 0} -1 3 -# n 1 -1 1 0 -1 -n - -1 # Number of statements: - -1 -# {ii, i | 0<=i<=n 0<=j<=n} -4 5 -# i j n 1 -1 1 0 0 0 -1 -1 0 1 0 -1 0 1 0 0 -1 0 -1 1 0 -0 0 0 -0 - -1 # Scattering functions - -1 6 -# c1 j i n 1 -0 1 -1 -1 0 0 -0 diff --git a/cloog-0.16.3/test/rectangle.good.c b/cloog-0.16.3/test/rectangle.good.c deleted file mode 100644 index b977e28..0000000 --- a/cloog-0.16.3/test/rectangle.good.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Generated from ../../../git/cloog/test/rectangle.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int n) -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i, j; - for (c1=0;c1<=2*n;c1++) { - for (i=max(c1-n,0);i<=min(c1,n);i++) { - j = c1-i ; - S1(i,c1-i) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/QR.c b/cloog-0.16.3/test/reservoir/QR.c deleted file mode 100644 index 5a8c26f..0000000 --- a/cloog-0.16.3/test/reservoir/QR.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/QR.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.21s. */ -if (N >= 1) { - S1(0) ; - if ((M >= 1) && (N == 1)) { - for (c4=0;c4<=M-1;c4++) { - S2(0,c4) ; - } - S3(0) ; - for (c4=0;c4<=M-1;c4++) { - S4(0,c4) ; - } - S10(0) ; - S5(0) ; - } - if ((M <= 0) && (N == 1)) { - S3(0) ; - S10(0) ; - S5(0) ; - } - if ((M >= 1) && (N >= 2)) { - for (c4=0;c4<=M-1;c4++) { - S2(0,c4) ; - } - S3(0) ; - for (c4=0;c4<=M-1;c4++) { - S4(0,c4) ; - } - S10(0) ; - S1(1) ; - S5(0) ; - } - if ((M <= 0) && (N >= 2)) { - S3(0) ; - S10(0) ; - S1(1) ; - S5(0) ; - } - for (c2=2;c2<=min(M,N-1);c2++) { - for (c4=c2-1;c4<=N-1;c4++) { - S6(c2-2,c4) ; - for (c6=c2-2;c6<=M-1;c6++) { - S7(c2-2,c4,c6) ; - } - S8(c2-2,c4) ; - for (c6=c2-2;c6<=M-1;c6++) { - S9(c2-2,c4,c6) ; - } - } - for (c4=c2-1;c4<=M-1;c4++) { - S2(c2-1,c4) ; - } - S3(c2-1) ; - for (c4=c2-1;c4<=M-1;c4++) { - S4(c2-1,c4) ; - } - S10(c2-1) ; - S1(c2) ; - S5(c2-1) ; - } - if ((M >= 1) && (M <= N-2)) { - for (c4=M;c4<=N-1;c4++) { - S6(M-1,c4) ; - S7(M-1,c4,M-1) ; - S8(M-1,c4) ; - S9(M-1,c4,M-1) ; - } - S3(M) ; - S10(M) ; - S1(M+1) ; - S5(M) ; - } - for (c2=max(2,M+2);c2<=N-1;c2++) { - for (c4=c2-1;c4<=N-1;c4++) { - S6(c2-2,c4) ; - S8(c2-2,c4) ; - } - S3(c2-1) ; - S10(c2-1) ; - S1(c2) ; - S5(c2-1) ; - } - if ((M >= N) && (N >= 2)) { - S6(N-2,N-1) ; - for (c6=N-2;c6<=M-1;c6++) { - S7(N-2,N-1,c6) ; - } - S8(N-2,N-1) ; - for (c6=N-2;c6<=M-1;c6++) { - S9(N-2,N-1,c6) ; - } - for (c4=N-1;c4<=M-1;c4++) { - S2(N-1,c4) ; - } - S3(N-1) ; - for (c4=N-1;c4<=M-1;c4++) { - S4(N-1,c4) ; - } - S10(N-1) ; - S5(N-1) ; - } - if ((M == N-1) && (M >= 1)) { - S6(M-1,M) ; - S7(M-1,M,M-1) ; - S8(M-1,M) ; - S9(M-1,M,M-1) ; - S3(M) ; - S10(M) ; - S5(M) ; - } - if ((M <= N-2) && (N >= 2)) { - S6(N-2,N-1) ; - S8(N-2,N-1) ; - S3(N-1) ; - S10(N-1) ; - S5(N-1) ; - } -} diff --git a/cloog-0.16.3/test/reservoir/QR.cloog b/cloog-0.16.3/test/reservoir/QR.cloog deleted file mode 100755 index 8baed20..0000000 --- a/cloog-0.16.3/test/reservoir/QR.cloog +++ /dev/null @@ -1,228 +0,0 @@ -# Language -c - -# Context - - 1 4 - 1 0 0 1 -0 - -# Number of statments -10 - -1 -# { (i,j,k) | i >= 0, -i+k-1 >= 0, 1 >= 0 } - - 3 5 - 1 1 0 0 0 - 1 -1 0 1 -1 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i >= 0, -i+l-1 >= 0, -i+j >= 0, -j+k-1 >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 0 - 1 -1 0 0 1 -1 - 1 -1 1 0 0 0 - 1 0 -1 1 0 -1 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i >= 0, -i+k-1 >= 0, 1 >= 0 } - - 3 5 - 1 1 0 0 0 - 1 -1 0 1 -1 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i >= 0, -i+l-1 >= 0, -i+j >= 0, -j+k-1 >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 0 - 1 -1 0 0 1 -1 - 1 -1 1 0 0 0 - 1 0 -1 1 0 -1 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i >= 0, -i+k-1 >= 0, 1 >= 0 } - - 3 5 - 1 1 0 0 0 - 1 -1 0 1 -1 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i >= 0, -i+j-1 >= 0, -j+l-1 >= 0, 1 >= 0 } - - 4 6 - 1 1 0 0 0 0 - 1 -1 1 0 0 -1 - 1 0 -1 0 1 -1 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m) | i >= 0, -i+j-1 >= 0, -j+m-1 >= 0, -i+k >= 0, -k+l-1 >= 0, 1 >= 0 } - - 6 7 - 1 1 0 0 0 0 0 - 1 -1 1 0 0 0 -1 - 1 0 -1 0 0 1 -1 - 1 -1 0 1 0 0 0 - 1 0 0 -1 1 0 -1 - 1 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i >= 0, -i+j-1 >= 0, -j+l-1 >= 0, 1 >= 0 } - - 4 6 - 1 1 0 0 0 0 - 1 -1 1 0 0 -1 - 1 0 -1 0 1 -1 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m) | i >= 0, -i+j-1 >= 0, -j+m-1 >= 0, -i+k >= 0, -k+l-1 >= 0, 1 >= 0 } - - 6 7 - 1 1 0 0 0 0 0 - 1 -1 1 0 0 0 -1 - 1 0 -1 0 0 1 -1 - 1 -1 0 1 0 0 0 - 1 0 0 -1 1 0 -1 - 1 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i >= 0, -i+k-1 >= 0, 1 >= 0 } - - 3 5 - 1 1 0 0 0 - 1 -1 0 1 -1 - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -10 - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 -5 - 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 -2 - 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 0 -3 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 -6 - 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 -2 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 14 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 -2 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 -2 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 14 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 -2 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 -3 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 -4 - 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/QR.good.c b/cloog-0.16.3/test/reservoir/QR.good.c deleted file mode 100644 index facd214..0000000 --- a/cloog-0.16.3/test/reservoir/QR.good.c +++ /dev/null @@ -1,208 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/QR.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.27s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i) { hash(3); hash(i); } -#define S4(i,j) { hash(4); hash(i); hash(j); } -#define S5(i) { hash(5); hash(i); } -#define S6(i,j) { hash(6); hash(i); hash(j); } -#define S7(i,j,k) { hash(7); hash(i); hash(j); hash(k); } -#define S8(i,j) { hash(8); hash(i); hash(j); } -#define S9(i,j,k) { hash(9); hash(i); hash(j); hash(k); } -#define S10(i) { hash(10); hash(i); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if ((M <= -1) && (N >= 1)) { - S1(0) ; - } - if ((M >= 0) && (N >= 1)) { - S1(0) ; - } - if ((M >= 1) && (N >= 2)) { - for (c4=0;c4<=M-1;c4++) { - S2(0,c4) ; - } - S3(0) ; - for (c4=0;c4<=M-1;c4++) { - S4(0,c4) ; - } - S10(0) ; - S1(1) ; - S5(0) ; - } - if ((M <= 0) && (N >= 2)) { - S3(0) ; - S10(0) ; - S1(1) ; - S5(0) ; - } - if ((M >= 1) && (N == 1)) { - for (c4=0;c4<=M-1;c4++) { - S2(0,c4) ; - } - S3(0) ; - for (c4=0;c4<=M-1;c4++) { - S4(0,c4) ; - } - S10(0) ; - S5(0) ; - } - if ((M <= 0) && (N == 1)) { - S3(0) ; - S10(0) ; - S5(0) ; - } - for (c2=2;c2<=min(N-1,M);c2++) { - for (c4=c2-1;c4<=N-1;c4++) { - i = c2-2 ; - S6(c2-2,c4) ; - for (c6=c2-2;c6<=M-1;c6++) { - i = c2-2 ; - S7(c2-2,c4,c6) ; - } - i = c2-2 ; - S8(c2-2,c4) ; - for (c6=c2-2;c6<=M-1;c6++) { - i = c2-2 ; - S9(c2-2,c4,c6) ; - } - } - for (c4=c2-1;c4<=M-1;c4++) { - i = c2-1 ; - S2(c2-1,c4) ; - } - i = c2-1 ; - S3(c2-1) ; - for (c4=c2-1;c4<=M-1;c4++) { - i = c2-1 ; - S4(c2-1,c4) ; - } - i = c2-1 ; - S10(c2-1) ; - S1(c2) ; - i = c2-1 ; - S5(c2-1) ; - } - if ((M >= 1) && (M <= N-2)) { - c2 = M+1 ; - for (c4=M;c4<=N-1;c4++) { - i = M-1 ; - S6(M-1,c4) ; - c6 = M-1 ; - i = M-1 ; - k = M-1 ; - S7(M-1,c4,M-1) ; - i = M-1 ; - S8(M-1,c4) ; - c6 = M-1 ; - i = M-1 ; - k = M-1 ; - S9(M-1,c4,M-1) ; - } - S3(M) ; - S10(M) ; - i = M+1 ; - S1(M+1) ; - S5(M) ; - } - if ((M >= N) && (N >= 2)) { - c4 = N-1 ; - i = N-2 ; - j = N-1 ; - S6(N-2,N-1) ; - for (c6=N-2;c6<=M-1;c6++) { - i = N-2 ; - j = N-1 ; - S7(N-2,N-1,c6) ; - } - i = N-2 ; - j = N-1 ; - S8(N-2,N-1) ; - for (c6=N-2;c6<=M-1;c6++) { - i = N-2 ; - j = N-1 ; - S9(N-2,N-1,c6) ; - } - for (c4=N-1;c4<=M-1;c4++) { - i = N-1 ; - S2(N-1,c4) ; - } - i = N-1 ; - S3(N-1) ; - for (c4=N-1;c4<=M-1;c4++) { - i = N-1 ; - S4(N-1,c4) ; - } - i = N-1 ; - S10(N-1) ; - i = N-1 ; - S5(N-1) ; - } - if ((M == N-1) && (N >= 2)) { - c4 = N-1 ; - i = N-2 ; - j = N-1 ; - S6(N-2,N-1) ; - c6 = N-2 ; - i = N-2 ; - j = N-1 ; - k = N-2 ; - S7(N-2,N-1,N-2) ; - i = N-2 ; - j = N-1 ; - S8(N-2,N-1) ; - c6 = N-2 ; - i = N-2 ; - j = N-1 ; - k = N-2 ; - S9(N-2,N-1,N-2) ; - i = N-1 ; - S3(N-1) ; - i = N-1 ; - S10(N-1) ; - i = N-1 ; - S5(N-1) ; - } - for (c2=max(M+2,2);c2<=N-1;c2++) { - for (c4=c2-1;c4<=N-1;c4++) { - i = c2-2 ; - S6(c2-2,c4) ; - i = c2-2 ; - S8(c2-2,c4) ; - } - i = c2-1 ; - S3(c2-1) ; - i = c2-1 ; - S10(c2-1) ; - S1(c2) ; - i = c2-1 ; - S5(c2-1) ; - } - if ((M <= N-2) && (N >= 2)) { - c4 = N-1 ; - i = N-2 ; - j = N-1 ; - S6(N-2,N-1) ; - i = N-2 ; - j = N-1 ; - S8(N-2,N-1) ; - i = N-1 ; - S3(N-1) ; - i = N-1 ; - S10(N-1) ; - i = N-1 ; - S5(N-1) ; - } -} diff --git a/cloog-0.16.3/test/reservoir/bastoul3.c b/cloog-0.16.3/test/reservoir/bastoul3.c deleted file mode 100644 index a89d28e..0000000 --- a/cloog-0.16.3/test/reservoir/bastoul3.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/reservoir/bastoul3.cloog by CLooG 0.14.0-308-g2713b64 gmp bits in 0.01s. */ -for (i=3;i<=9;i++) { - for (j=max(i-6,i-2*floord(i-1,2));j<=min(3,i-2);j+=2) { - S1(i,j,(i-j)/2); - } -} diff --git a/cloog-0.16.3/test/reservoir/bastoul3.cloog b/cloog-0.16.3/test/reservoir/bastoul3.cloog deleted file mode 100644 index 8437226..0000000 --- a/cloog-0.16.3/test/reservoir/bastoul3.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# Figure 4 from "Efficient code generation for automatic parallelization -# and optimization". -# -# Language -c - -# Context - - 1 2 - 1 1 -0 - -# Number of statements -1 - -1 - -# i' i j 1 - 6 5 - 0 1 -1 -2 0 - 1 0 1 0 -1 - 1 0 -1 0 3 - 1 0 0 1 -1 - 1 0 0 -1 3 - 1 0 0 0 1 - -0 0 0 - -0 -0 - - - diff --git a/cloog-0.16.3/test/reservoir/cholesky2.c b/cloog-0.16.3/test/reservoir/cholesky2.c deleted file mode 100644 index ee3c52e..0000000 --- a/cloog-0.16.3/test/reservoir/cholesky2.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Generated from ../../../git/cloog/test/reservoir/cholesky2.cloog by CLooG 0.14.0-283-g7c18f7a gmp bits in 0.04s. */ -if (M >= 1) { - if (M >= 2) { - S1(1); - } - for (c2=2;c2<=min(3,M);c2++) { - S2(1,c2); - } - if (M == 1) { - S1(1); - } - for (c2=4;c2<=3*M-4;c2++) { - if ((c2+1)%3 == 0) { - S1((c2+1)/3); - } - for (c4=ceild(c2+2,3);c4<=min(M,c2-2);c4++) { - for (c6=ceild(c2-c4+2,2);c6<=min(c4,c2-c4);c6++) { - S3(c2-c4-c6+1,c4,c6); - } - } - for (c4=ceild(c2+4,3);c4<=min(M,c2);c4++) { - if ((c2+c4)%2 == 0) { - S2((c2-c4+2)/2,c4); - } - } - } - for (c2=max(2*M,3*M-3);c2<=3*M-2;c2++) { - S3(c2-2*M+1,M,M); - } - if (M >= 2) { - S1(M); - } -} diff --git a/cloog-0.16.3/test/reservoir/cholesky2.cloog b/cloog-0.16.3/test/reservoir/cholesky2.cloog deleted file mode 100755 index 7317c6a..0000000 --- a/cloog-0.16.3/test/reservoir/cholesky2.cloog +++ /dev/null @@ -1,79 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j) | i-1 >= 0, -i+j >= 0, 1 >= 0 } - - 3 4 - 1 1 0 -1 - 1 -1 1 0 - 1 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i-1 >= 0, -i+j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 4 5 - 1 1 0 0 -1 - 1 -1 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i-1 >= 0, -j+l >= 0, -i+k-1 >= 0, j-k >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 -1 - 1 0 -1 0 1 0 - 1 -1 0 1 0 -1 - 1 0 1 -1 0 0 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 8 11 - 0 1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -3 0 1 - 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -2 -1 0 2 - 0 0 0 1 0 0 0 0 0 0 0 -2 - 0 0 0 0 1 0 0 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 -1 -1 0 1 - 0 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/cholesky2.good.c b/cloog-0.16.3/test/reservoir/cholesky2.good.c deleted file mode 100644 index 36efcde..0000000 --- a/cloog-0.16.3/test/reservoir/cholesky2.good.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/cholesky2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.05s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - for (c2=2;c2<=min(3,3*M-4);c2++) { - if ((c2+1)%3 == 0) { - i = (c2+1)/3 ; - S1((c2+1)/3) ; - } - for (c4=ceild(c2+4,3);c4<=min(c2,M);c4++) { - if ((c2+c4)%2 == 0) { - i = (c2-c4+2)/2 ; - S2((c2-c4+2)/2,c4) ; - } - } - } - for (c2=4;c2<=3*M-4;c2++) { - if ((c2+1)%3 == 0) { - i = (c2+1)/3 ; - S1((c2+1)/3) ; - } - for (c4=ceild(c2+2,3);c4<=min(c2-2,M);c4++) { - for (c6=ceild(c2-c4+2,2);c6<=min(c2-c4,c4);c6++) { - i = c2-c4-c6+1 ; - S3(c2-c4-c6+1,c4,c6) ; - } - } - for (c4=ceild(c2+4,3);c4<=min(M,c2);c4++) { - if ((c2+c4)%2 == 0) { - i = (c2-c4+2)/2 ; - S2((c2-c4+2)/2,c4) ; - } - } - } - for (c2=max(2,3*M-3);c2<=min(3,3*M-2);c2++) { - if ((c2+1)%3 == 0) { - i = (c2+1)/3 ; - S1((c2+1)/3) ; - } - } - for (c2=max(3*M-3,4);c2<=3*M-2;c2++) { - if ((c2+1)%3 == 0) { - i = (c2+1)/3 ; - S1((c2+1)/3) ; - } - for (c4=ceild(c2+2,3);c4<=min(M,c2-2);c4++) { - for (c6=ceild(c2-c4+2,2);c6<=min(c2-c4,c4);c6++) { - i = c2-c4-c6+1 ; - S3(c2-c4-c6+1,c4,c6) ; - } - } - } - if (M >= 1) { - c2 = 3*M-1 ; - S1(M) ; - } -} diff --git a/cloog-0.16.3/test/reservoir/fusion1.c b/cloog-0.16.3/test/reservoir/fusion1.c deleted file mode 100644 index c2c0adf..0000000 --- a/cloog-0.16.3/test/reservoir/fusion1.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/fusion1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (c2=0;c2<=M;c2++) { - S1(c2) ; -} -for (c2=1;c2<=M;c2++) { - S2(c2) ; -} -for (c2=0;c2<=M;c2++) { - S3(c2) ; -} diff --git a/cloog-0.16.3/test/reservoir/fusion1.cloog b/cloog-0.16.3/test/reservoir/fusion1.cloog deleted file mode 100755 index 3aea334..0000000 --- a/cloog-0.16.3/test/reservoir/fusion1.cloog +++ /dev/null @@ -1,65 +0,0 @@ -# Language -c - -# Context - - 2 3 - 1 1 -1 - 1 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j) | i >= 0, -i+j >= 0, 1 >= 0 } - - 3 4 - 1 1 0 0 - 1 -1 1 0 - 1 0 0 1 - -0 0 0 -1 -# { (i,j) | i-1 >= 0, -i+j >= 0, 1 >= 0 } - - 3 4 - 1 1 0 -1 - 1 -1 1 0 - 1 0 0 1 - -0 0 0 -1 -# { (i,j) | i >= 0, -i+j >= 0, 1 >= 0 } - - 3 4 - 1 1 0 0 - 1 -1 1 0 - 1 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 4 7 - 0 1 0 0 0 0 0 - 0 0 1 0 -1 0 0 - 0 0 0 1 0 0 0 - 1 0 0 0 0 0 1 - - - 4 7 - 0 1 0 0 0 0 -1 - 0 0 1 0 -1 0 0 - 0 0 0 1 0 0 0 - 1 0 0 0 0 0 1 - - - 4 7 - 0 1 0 0 0 0 -2 - 0 0 1 0 -1 0 0 - 0 0 0 1 0 0 0 - 1 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/fusion1.good.c b/cloog-0.16.3/test/reservoir/fusion1.good.c deleted file mode 100644 index ba28eba..0000000 --- a/cloog-0.16.3/test/reservoir/fusion1.good.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/fusion1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } -#define S3(i) { hash(3); hash(i); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2; - /* Original iterators. */ - int i; - for (c2=0;c2<=M;c2++) { - S1(c2) ; - } - for (c2=1;c2<=M;c2++) { - S2(c2) ; - } - for (c2=0;c2<=M;c2++) { - S3(c2) ; - } -} diff --git a/cloog-0.16.3/test/reservoir/fusion2.c b/cloog-0.16.3/test/reservoir/fusion2.c deleted file mode 100644 index d9d02d6..0000000 --- a/cloog-0.16.3/test/reservoir/fusion2.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/fusion2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -if ((M >= 1) && (N >= 1)) { - for (c4=1;c4<=M;c4++) { - S1(1,c4) ; - } - for (c2=2;c2<=N;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c2-1,c4) ; - } - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c4=1;c4<=M;c4++) { - S2(N,c4) ; - } -} diff --git a/cloog-0.16.3/test/reservoir/fusion2.cloog b/cloog-0.16.3/test/reservoir/fusion2.cloog deleted file mode 100755 index dad8353..0000000 --- a/cloog-0.16.3/test/reservoir/fusion2.cloog +++ /dev/null @@ -1,56 +0,0 @@ -# Language -c - -# Context - - 1 4 - 1 0 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k,l) | i-1 >= 0, -i+l >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 -1 - 1 -1 0 0 1 0 - 1 0 1 0 0 -1 - 1 0 -1 1 0 0 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i-1 >= 0, -i+l >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 -1 - 1 -1 0 0 1 0 - 1 0 1 0 0 -1 - 1 0 -1 1 0 0 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 6 11 - 0 1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - - - 6 11 - 0 1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/fusion2.good.c b/cloog-0.16.3/test/reservoir/fusion2.good.c deleted file mode 100644 index b4b8f1c..0000000 --- a/cloog-0.16.3/test/reservoir/fusion2.good.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/fusion2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - if ((M >= 1) && (N >= 1)) { - for (c4=1;c4<=M;c4++) { - S1(1,c4) ; - } - } - if (M >= 1) { - for (c2=2;c2<=N;c2++) { - for (c4=1;c4<=M;c4++) { - i = c2-1 ; - S2(c2-1,c4) ; - } - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - } - if ((M >= 1) && (N >= 1)) { - c2 = N+1 ; - for (c4=1;c4<=M;c4++) { - S2(N,c4) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/jacobi2.c b/cloog-0.16.3/test/reservoir/jacobi2.c deleted file mode 100644 index 421e8a9..0000000 --- a/cloog-0.16.3/test/reservoir/jacobi2.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/jacobi2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (c2=0;c2<=M-1;c2++) { - for (c4=0;c4<=M-1;c4++) { - S1(c2,c4) ; - } -} diff --git a/cloog-0.16.3/test/reservoir/jacobi2.cloog b/cloog-0.16.3/test/reservoir/jacobi2.cloog deleted file mode 100755 index 7352362..0000000 --- a/cloog-0.16.3/test/reservoir/jacobi2.cloog +++ /dev/null @@ -1,37 +0,0 @@ -# Language -c - -# Context - - 2 3 - 1 1 -1 - 1 0 1 -0 - -# Number of statments -1 - -1 -# { (i,j,k) | i >= 0, -i+k-1 >= 0, j >= 0, -j+k-1 >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 0 - 1 -1 0 1 -1 - 1 0 1 0 0 - 1 0 -1 1 -1 - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -1 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/jacobi2.good.c b/cloog-0.16.3/test/reservoir/jacobi2.good.c deleted file mode 100644 index 8c6ea0e..0000000 --- a/cloog-0.16.3/test/reservoir/jacobi2.good.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/jacobi2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - for (c2=0;c2<=M-1;c2++) { - for (c4=0;c4<=M-1;c4++) { - S1(c2,c4) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/jacobi3.c b/cloog-0.16.3/test/reservoir/jacobi3.c deleted file mode 100644 index 0182c15..0000000 --- a/cloog-0.16.3/test/reservoir/jacobi3.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/jacobi3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -if ((M >= 1) && (N >= 3)) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S1(1,c4,c6) ; - } - } - for (c2=3;c2<=2*M;c2++) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if (c2%2 == 0) { - S1(c2/2,c4,c6) ; - } - } - } - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if ((c2+1)%2 == 0) { - S2((c2-1)/2,c4,c6) ; - } - } - } - } - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S2(M,c4,c6) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/jacobi3.cloog b/cloog-0.16.3/test/reservoir/jacobi3.cloog deleted file mode 100755 index dff32ff..0000000 --- a/cloog-0.16.3/test/reservoir/jacobi3.cloog +++ /dev/null @@ -1,64 +0,0 @@ -# Language -c - -# Context - - 1 4 - 1 0 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k,l,m) | i-1 >= 0, -i+l >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+m-1 >= 0, 1 >= 0 } - - 7 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 1 0 0 - 1 0 1 0 0 0 -2 - 1 0 -1 0 0 1 -1 - 1 0 0 1 0 0 -2 - 1 0 0 -1 0 1 -1 - 1 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m) | i-1 >= 0, -i+l >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+m-1 >= 0, 1 >= 0 } - - 7 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 1 0 0 - 1 0 1 0 0 0 -2 - 1 0 -1 0 0 1 -1 - 1 0 0 1 0 0 -2 - 1 0 0 -1 0 1 -1 - 1 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 8 14 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -2 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 14 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -2 0 0 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/jacobi3.good.c b/cloog-0.16.3/test/reservoir/jacobi3.good.c deleted file mode 100644 index 39cfce3..0000000 --- a/cloog-0.16.3/test/reservoir/jacobi3.good.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/jacobi3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.03s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if ((M >= 1) && (N >= 3)) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S1(1,c4,c6) ; - } - } - } - if (N >= 3) { - for (c2=3;c2<=2*M;c2++) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if (c2%2 == 0) { - S1(c2/2,c4,c6) ; - } - } - } - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if ((c2+1)%2 == 0) { - i = (c2-1)/2 ; - S2((c2-1)/2,c4,c6) ; - } - } - } - } - } - if ((M >= 1) && (N >= 3)) { - c2 = 2*M+1 ; - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S2(M,c4,c6) ; - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/lim-lam1.c b/cloog-0.16.3/test/reservoir/lim-lam1.c deleted file mode 100644 index 469117c..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam1.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/lim-lam1.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.01s. */ -S1(1,100); -for (c2=-98;c2<=99;c2++) { - if (c2 <= 0) { - S1(1,-c2+1); - } - if (c2 >= 1) { - S2(c2,1); - } - for (c4=max(2,-2*c2+3);c4<=min(199,-2*c2+200);c4++) { - if (c4%2 == 0) { - S1((2*c2+c4)/2,c4/2); - } - if ((c4+1)%2 == 0) { - S2((2*c2+c4-1)/2,(c4+1)/2); - } - } - if (c2 <= 0) { - S1(c2+100,100); - } - if (c2 >= 1) { - S2(100,-c2+101); - } -} -S2(100,1); diff --git a/cloog-0.16.3/test/reservoir/lim-lam1.cloog b/cloog-0.16.3/test/reservoir/lim-lam1.cloog deleted file mode 100644 index 7a7c684..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam1.cloog +++ /dev/null @@ -1,54 +0,0 @@ -# Language -c - -# Context - - 1 2 - 1 1 -0 - -# Number of statments -2 - -1 -# { (i,j) | i-1 >= 0, -i+100 >= 0, j-1 >= 0, -j+100 >= 0 } - - 4 4 - 1 1 0 -1 - 1 -1 0 100 - 1 0 1 -1 - 1 0 -1 100 - -0 0 0 -1 -# { (i,j) | i-1 >= 0, -i+100 >= 0, j-1 >= 0, -j+100 >= 0 } - - 4 4 - 1 1 0 -1 - 1 -1 0 100 - 1 0 1 -1 - 1 0 -1 100 - -0 0 0 -0 -# Scattering functions -2 - - 6 9 - 0 1 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 1 0 - 0 0 0 1 0 0 0 0 0 - 0 0 0 0 1 0 0 -2 0 - 0 0 0 0 0 1 0 0 0 - 1 0 0 0 0 0 0 0 1 - - - 6 9 - 0 1 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 1 -1 - 0 0 0 1 0 0 0 0 0 - 0 0 0 0 1 0 0 -2 1 - 0 0 0 0 0 1 0 0 -1 - 1 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/lim-lam1.good.c b/cloog-0.16.3/test/reservoir/lim-lam1.good.c deleted file mode 100644 index cd6faf7..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam1.good.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test() -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - S1(1,100) ; - for (c2=-98;c2<=0;c2++) { - c4 = -2*c2+2 ; - j = -c2+1 ; - S1(1,-c2+1) ; - for (c4=-2*c2+3;c4<=199;c4++) { - if (c4%2 == 0) { - i = (2*c2+c4)/2 ; - S1((2*c2+c4)/2,c4/2) ; - } - if ((c4+1)%2 == 0) { - i = (2*c2+c4-1)/2 ; - j = (c4+1)/2 ; - S2((2*c2+c4-1)/2,(c4+1)/2) ; - } - } - i = c2+100 ; - S1(c2+100,100) ; - } - for (c2=1;c2<=99;c2++) { - S2(c2,1) ; - for (c4=2;c4<=-2*c2+200;c4++) { - if (c4%2 == 0) { - i = (2*c2+c4)/2 ; - S1((2*c2+c4)/2,c4/2) ; - } - if ((c4+1)%2 == 0) { - i = (2*c2+c4-1)/2 ; - j = (c4+1)/2 ; - S2((2*c2+c4-1)/2,(c4+1)/2) ; - } - } - c4 = -2*c2+201 ; - j = -c2+101 ; - S2(100,-c2+101) ; - } - S2(100,1) ; -} diff --git a/cloog-0.16.3/test/reservoir/lim-lam2.c b/cloog-0.16.3/test/reservoir/lim-lam2.c deleted file mode 100644 index ab1a32f..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam2.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -for (c2=1;c2<=M;c2++) { - S1(c2) ; -} -if (N >= 2) { - for (c2=1;c2<=M;c2++) { - for (c4=2;c4<=N;c4++) { - S2(c2,c4) ; - } - } -} -if (N >= 2) { - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=N-1;c4++) { - S3(c2,c4) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/lim-lam2.cloog b/cloog-0.16.3/test/reservoir/lim-lam2.cloog deleted file mode 100755 index db50b74..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam2.cloog +++ /dev/null @@ -1,76 +0,0 @@ -# Language -c - -# Context - - 3 4 - 1 1 0 -1 - 1 0 1 -1 - 1 0 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j,k) | i-1 >= 0, -i+j >= 0, 1 >= 0 } - - 3 5 - 1 1 0 0 -1 - 1 -1 1 0 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i-1 >= 0, -i+k >= 0, j-2 >= 0, -j+l >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 -1 - 1 -1 0 1 0 0 - 1 0 1 0 0 -2 - 1 0 -1 0 1 0 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+l-1 >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 -1 - 1 -1 0 1 0 0 - 1 0 1 0 0 -1 - 1 0 -1 0 1 -1 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - - - 6 11 - 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - - - 6 11 - 0 1 0 0 0 0 0 0 0 0 -2 - 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 -2 - 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/lim-lam2.good.c b/cloog-0.16.3/test/reservoir/lim-lam2.good.c deleted file mode 100644 index 0ea3332..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam2.good.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - for (c2=1;c2<=M;c2++) { - S1(c2) ; - } - if (N >= 2) { - for (c2=1;c2<=M;c2++) { - for (c4=2;c4<=N;c4++) { - S2(c2,c4) ; - } - } - } - if (N >= 2) { - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=N-1;c4++) { - S3(c2,c4) ; - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/lim-lam3.c b/cloog-0.16.3/test/reservoir/lim-lam3.c deleted file mode 100644 index c68a629..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam3.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Generated from ../../../git/cloog/test/reservoir/lim-lam3.cloog by CLooG 0.16.2-8-g1421b58 gmp bits in 0.03s. */ -S4(1); -for (c2=9;c2<=min(13,5*M-1);c2++) { - if (c2 <= M+7) { - S2(c2-7,1); - } - if (c2 == 10) { - S4(2); - } - if (c2 <= 3*M+3) { - if (c2%3 == 0) { - S3((c2-3)/3,1); - } - } -} -for (c2=14;c2<=5*M-1;c2++) { - for (c4=max(2,ceild(c2-M-3,4));c4<=min(floord(c2-8,3),M-1);c4++) { - for (c6=max(1,ceild(c2-2*c4-M-5,2));c6<=min(floord(c2-3*c4-6,2),c4-1);c6++) { - S1(c2-2*c4-2*c6-5,c4,c6); - } - } - for (c4=max(1,ceild(c2-M-3,4));c4<=floord(c2-4,5);c4++) { - S2(c2-4*c4-3,c4); - } - if (c2%5 == 0) { - S4(c2/5); - } - for (c4=max(1,ceild(c2-3*M-1,2));c4<=floord(c2-4,5);c4++) { - if ((c2+c4+2)%3 == 0) { - S3((c2-2*c4-1)/3,c4); - } - } -} -if (M >= 2) { - S4(M); -} diff --git a/cloog-0.16.3/test/reservoir/lim-lam3.cloog b/cloog-0.16.3/test/reservoir/lim-lam3.cloog deleted file mode 100755 index 0d3d4a5..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam3.cloog +++ /dev/null @@ -1,101 +0,0 @@ -# Language -c - -# Context - - 2 3 - 1 1 -1 - 1 0 1 -0 - -# Number of statments -4 - -1 -# { (i,j,k,l) | -i+l >= 0, i-j-1 >= 0, k-1 >= 0, j-k-1 >= 0, 1 >= 0 } - - 5 6 - 1 -1 0 0 1 0 - 1 1 -1 0 0 -1 - 1 0 0 1 0 -1 - 1 0 1 -1 0 -1 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | -i+k >= 0, j-1 >= 0, i-j-1 >= 0, 1 >= 0 } - - 4 5 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 1 -1 0 -1 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | -i+k >= 0, j-1 >= 0, i-j-1 >= 0, 1 >= 0 } - - 4 5 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 1 -1 0 -1 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j) | i-1 >= 0, -i+j >= 0, 1 >= 0 } - - 3 4 - 1 1 0 -1 - 1 -1 1 0 - 1 0 0 1 - -0 0 0 -0 -# Scattering functions -4 - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 -2 -2 0 -5 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 -4 0 -3 - 0 0 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -3 -2 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 -2 - 0 0 0 0 1 0 0 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 11 - 0 1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -5 0 0 - 0 0 0 1 0 0 0 0 0 0 -2 - 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/lim-lam3.good.c b/cloog-0.16.3/test/reservoir/lim-lam3.good.c deleted file mode 100644 index 0cddca9..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam3.good.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.04s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } -#define S4(i) { hash(4); hash(i); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - for (c2=5;c2<=min(5*M,8);c2++) { - if (c2%5 == 0) { - S4(c2/5) ; - } - } - for (c2=9;c2<=min(13,5*M-1);c2++) { - for (c4=max(1,ceild(c2-M-3,4));c4<=floord(c2-4,5);c4++) { - i = c2-4*c4-3 ; - S2(c2-4*c4-3,c4) ; - } - if (c2%5 == 0) { - S4(c2/5) ; - } - for (c4=max(1,ceild(c2-3*M-1,2));c4<=floord(c2-4,5);c4++) { - if ((c2+c4+2)%3 == 0) { - i = (c2-2*c4-1)/3 ; - S3((c2-2*c4-1)/3,c4) ; - } - } - } - for (c2=14;c2<=5*M-1;c2++) { - for (c4=max(2,ceild(c2-M-3,4));c4<=min(M-1,floord(c2-8,3));c4++) { - for (c6=max(1,ceild(c2-2*c4-M-5,2));c6<=min(c4-1,floord(c2-3*c4-6,2));c6++) { - i = c2-2*c4-2*c6-5 ; - S1(c2-2*c4-2*c6-5,c4,c6) ; - } - } - for (c4=max(ceild(c2-M-3,4),1);c4<=floord(c2-4,5);c4++) { - i = c2-4*c4-3 ; - S2(c2-4*c4-3,c4) ; - } - if (c2%5 == 0) { - S4(c2/5) ; - } - for (c4=max(ceild(c2-3*M-1,2),1);c4<=floord(c2-4,5);c4++) { - if ((c2+c4+2)%3 == 0) { - i = (c2-2*c4-1)/3 ; - S3((c2-2*c4-1)/3,c4) ; - } - } - } - if (M >= 2) { - c2 = 5*M ; - S4(M) ; - } -} diff --git a/cloog-0.16.3/test/reservoir/lim-lam4.c b/cloog-0.16.3/test/reservoir/lim-lam4.c deleted file mode 100644 index b2c0845..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam4.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam4.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.04s. */ -if (M >= 2) { - S1(1,0,0) ; - for (c2=2;c2<=2*M-2;c2++) { - for (c4=max(-M+1,-c2+1);c4<=-1;c4++) { - for (i=max(1,c2-M+1);i<=min(M-1,c2+c4);i++) { - S1(i,c2+c4-i,-c4) ; - } - for (c6=max(-c4,c2-M+1);c6<=min(M-1,c2-1);c6++) { - S2(c2-c6,c4+c6,c6) ; - } - } - for (i=max(1,c2-M+1);i<=min(c2,M-1);i++) { - S1(i,c2-i,0) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/lim-lam4.cloog b/cloog-0.16.3/test/reservoir/lim-lam4.cloog deleted file mode 100755 index 0aa66e3..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam4.cloog +++ /dev/null @@ -1,62 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k,l) | i-1 >= 0, -i+l-1 >= 0, j >= 0, k >= 0, -j-k+l-1 >= 0, 1 >= 0 } - - 6 6 - 1 1 0 0 0 -1 - 1 -1 0 0 1 -1 - 1 0 1 0 0 0 - 1 0 0 1 0 0 - 1 0 -1 -1 1 -1 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i-1 >= 0, -i+l-1 >= 0, j >= 0, -j+k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 6 6 - 1 1 0 0 0 -1 - 1 -1 0 0 1 -1 - 1 0 1 0 0 0 - 1 0 -1 1 0 -1 - 1 0 0 -1 1 -1 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 -1 -1 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 -1 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/lim-lam4.good.c b/cloog-0.16.3/test/reservoir/lim-lam4.good.c deleted file mode 100644 index afb05ec..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam4.good.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam4.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if (M >= 2) { - S1(1,0,0) ; - } - for (c2=2;c2<=2*M-2;c2++) { - for (c4=max(-M+1,-c2+1);c4<=-1;c4++) { - for (i=max(1,c2-M+1);i<=min(c2+c4,M-1);i++) { - j = c2+c4-i ; - S1(i,c2+c4-i,-c4) ; - } - for (c6=max(-c4,c2-M+1);c6<=min(c2-1,M-1);c6++) { - i = c2-c6 ; - j = c4+c6 ; - S2(c2-c6,c4+c6,c6) ; - } - } - for (i=max(1,c2-M+1);i<=min(M-1,c2);i++) { - j = c2-i ; - S1(i,c2-i,0) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/lim-lam5.c b/cloog-0.16.3/test/reservoir/lim-lam5.c deleted file mode 100644 index e6b0a57..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam5.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam5.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (M >= 1) { - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S3(c2,c4) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/lim-lam5.cloog b/cloog-0.16.3/test/reservoir/lim-lam5.cloog deleted file mode 100755 index c5d6ef9..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam5.cloog +++ /dev/null @@ -1,76 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - - - 6 10 - 0 1 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - - - 6 10 - 0 1 0 0 0 0 0 0 0 -2 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/lim-lam5.good.c b/cloog-0.16.3/test/reservoir/lim-lam5.good.c deleted file mode 100644 index 69d8805..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam5.good.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam5.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S3(c2,c4) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/lim-lam6.c b/cloog-0.16.3/test/reservoir/lim-lam6.c deleted file mode 100644 index 05baff1..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam6.c +++ /dev/null @@ -1,13 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam6.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (M >= 1) { - for (c2=0;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=0;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c4,c2) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/lim-lam6.cloog b/cloog-0.16.3/test/reservoir/lim-lam6.cloog deleted file mode 100755 index a1bf181..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam6.cloog +++ /dev/null @@ -1,56 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k) | i >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 0 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 0 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - - - 6 10 - 0 1 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 -1 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/lim-lam6.good.c b/cloog-0.16.3/test/reservoir/lim-lam6.good.c deleted file mode 100644 index f49ab57..0000000 --- a/cloog-0.16.3/test/reservoir/lim-lam6.good.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam6.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - if (M >= 1) { - for (c2=0;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - } - if (M >= 1) { - for (c2=0;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c4,c2) ; - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/liu-zhuge1.c b/cloog-0.16.3/test/reservoir/liu-zhuge1.c deleted file mode 100644 index b0f8602..0000000 --- a/cloog-0.16.3/test/reservoir/liu-zhuge1.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/liu-zhuge1.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.02s. */ -if ((M >= 0) && (N >= 0)) { - for (c2=-4;c2<=min(-1,3*M+N-4);c2++) { - for (c4=max(0,c2-3*M+4);c4<=min(N,c2+4);c4++) { - if ((c2+2*c4+1)%3 == 0) { - S1((c2-c4+4)/3,c4); - } - } - } - for (c2=0;c2<=3*M+N-4;c2++) { - for (c4=max(0,c2-3*M);c4<=min(c2,c2-3*M+3);c4++) { - if ((c2+2*c4)%3 == 0) { - S2((c2-c4)/3,c4); - } - } - for (c4=max(0,c2-3*M+4);c4<=min(N,c2);c4++) { - if ((c2+2*c4)%3 == 0) { - S2((c2-c4)/3,c4); - } - if ((c2+2*c4+1)%3 == 0) { - S1((c2-c4+4)/3,c4); - } - } - for (c4=max(c2+1,c2-3*M+4);c4<=min(N,c2+4);c4++) { - if ((c2+2*c4+1)%3 == 0) { - S1((c2-c4+4)/3,c4); - } - } - for (c4=max(0,c2-3*M);c4<=min(N,c2);c4++) { - if ((c2+2*c4)%3 == 0) { - S3((c2-c4)/3,c4); - } - } - } - for (c2=max(0,3*M+N-3);c2<=3*M+N;c2++) { - for (c4=max(0,c2-3*M);c4<=min(N,c2);c4++) { - if ((c2+2*c4)%3 == 0) { - S2((c2-c4)/3,c4); - } - } - for (c4=max(0,c2-3*M);c4<=min(N,c2);c4++) { - if ((c2+2*c4)%3 == 0) { - S3((c2-c4)/3,c4); - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/liu-zhuge1.cloog b/cloog-0.16.3/test/reservoir/liu-zhuge1.cloog deleted file mode 100755 index e28cb4b..0000000 --- a/cloog-0.16.3/test/reservoir/liu-zhuge1.cloog +++ /dev/null @@ -1,76 +0,0 @@ -# Language -c - -# Context - - 1 4 - 1 0 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j,k,l) | i >= 0, -i+k >= 0, j >= 0, -j+l >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 0 - 1 -1 0 1 0 0 - 1 0 1 0 0 0 - 1 0 -1 0 1 0 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i >= 0, -i+k >= 0, j >= 0, -j+l >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 0 - 1 -1 0 1 0 0 - 1 0 1 0 0 0 - 1 0 -1 0 1 0 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i >= 0, -i+k >= 0, j >= 0, -j+l >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 0 - 1 -1 0 1 0 0 - 1 0 1 0 0 0 - 1 0 -1 0 1 0 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 6 11 - 0 1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -3 -1 0 0 4 - 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - - - 6 11 - 0 1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -3 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - - - 6 11 - 0 1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -3 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/liu-zhuge1.good.c b/cloog-0.16.3/test/reservoir/liu-zhuge1.good.c deleted file mode 100644 index 2b07ade..0000000 --- a/cloog-0.16.3/test/reservoir/liu-zhuge1.good.c +++ /dev/null @@ -1,168 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/liu-zhuge1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.05s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - if ((M >= 0) && (N >= 0)) { - for (c2=-4;c2<=min(-1,3*M+N-4);c2++) { - for (c4=max(0,c2-3*M+4);c4<=min(c2+4,N);c4++) { - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - } - } - if ((M <= 1) && (M >= 0)) { - for (c2=0;c2<=3*M+N-4;c2++) { - for (c4=max(c2-3*M,0);c4<=c2;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - } - for (c4=c2-3*M+4;c4<=min(c2+4,N);c4++) { - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - for (c4=max(0,c2-3*M);c4<=c2;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S3((c2-c4)/3,c4) ; - } - } - } - } - for (c2=0;c2<=min(3*M-4,N-1);c2++) { - for (c4=0;c4<=c2;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - for (c4=c2+1;c4<=min(c2+4,N);c4++) { - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - for (c4=0;c4<=c2;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S3((c2-c4)/3,c4) ; - } - } - } - if (M >= 2) { - for (c2=3*M-3;c2<=N-1;c2++) { - for (c4=max(c2-3*M,0);c4<=c2-3*M+3;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - } - for (c4=c2-3*M+4;c4<=c2;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - for (c4=c2+1;c4<=min(c2+4,N);c4++) { - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - for (c4=max(0,c2-3*M);c4<=c2;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S3((c2-c4)/3,c4) ; - } - } - } - } - if (N >= 0) { - for (c2=N;c2<=3*M-4;c2++) { - for (c4=0;c4<=N;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - for (c4=0;c4<=N;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S3((c2-c4)/3,c4) ; - } - } - } - } - for (c2=max(3*M-3,N);c2<=3*M+N-4;c2++) { - for (c4=max(c2-3*M,0);c4<=c2-3*M+3;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - } - for (c4=c2-3*M+4;c4<=N;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - for (c4=max(0,c2-3*M);c4<=N;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S3((c2-c4)/3,c4) ; - } - } - } - if ((M >= 0) && (N >= 0)) { - for (c2=max(3*M+N-3,0);c2<=3*M+N;c2++) { - for (c4=max(0,c2-3*M);c4<=min(c2,N);c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - } - for (c4=max(0,c2-3*M);c4<=min(c2,N);c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S3((c2-c4)/3,c4) ; - } - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/loechner3.c b/cloog-0.16.3/test/reservoir/loechner3.c deleted file mode 100644 index c3967b8..0000000 --- a/cloog-0.16.3/test/reservoir/loechner3.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/loechner3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (M >= 1) { - for (c2=1;c2<=M;c2++) { - for (c4=2;c4<=c2+M;c4++) { - for (c6=max(1,-c2+c4);c6<=min(M,c4-1);c6++) { - S1(c2,c6,c4-c6) ; - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/loechner3.cloog b/cloog-0.16.3/test/reservoir/loechner3.cloog deleted file mode 100755 index 04b34cb..0000000 --- a/cloog-0.16.3/test/reservoir/loechner3.cloog +++ /dev/null @@ -1,39 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -1 - -1 -# { (i,j,k,l) | -i+l >= 0, j-1 >= 0, -j+l >= 0, k-1 >= 0, i-k >= 0, 1 >= 0 } - - 6 6 - 1 -1 0 0 1 0 - 1 0 1 0 0 -1 - 1 0 -1 0 1 0 - 1 0 0 1 0 -1 - 1 1 0 -1 0 0 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -1 - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/loechner3.good.c b/cloog-0.16.3/test/reservoir/loechner3.good.c deleted file mode 100644 index 377fb46..0000000 --- a/cloog-0.16.3/test/reservoir/loechner3.good.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/loechner3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - for (c2=1;c2<=M;c2++) { - for (c4=2;c4<=c2+M;c4++) { - for (c6=max(1,-c2+c4);c6<=min(M,c4-1);c6++) { - k = c4-c6 ; - S1(c2,c6,c4-c6) ; - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/loechner4.c b/cloog-0.16.3/test/reservoir/loechner4.c deleted file mode 100644 index 8c4b9c7..0000000 --- a/cloog-0.16.3/test/reservoir/loechner4.c +++ /dev/null @@ -1,12 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/loechner4.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -if (M >= 1) { - for (c2=2;c2<=2*M;c2++) { - for (c4=1;c4<=M;c4++) { - for (c6=1;c6<=M;c6++) { - for (c8=max(1,c2-M);c8<=min(M,c2-1);c8++) { - S1(c6,c4,c8,c2-c8) ; - } - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/loechner4.cloog b/cloog-0.16.3/test/reservoir/loechner4.cloog deleted file mode 100755 index 503f56a..0000000 --- a/cloog-0.16.3/test/reservoir/loechner4.cloog +++ /dev/null @@ -1,44 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -1 - -1 -# { (i,j,k,l,m) | i-1 >= 0, -i+m >= 0, j-1 >= 0, -j+m >= 0, k-1 >= 0, -k+m >= 0, l-1 >= 0, -l+m >= 0, 1 >= 0 } - - 9 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 0 1 0 - 1 0 1 0 0 0 -1 - 1 0 -1 0 0 1 0 - 1 0 0 1 0 0 -1 - 1 0 0 -1 0 1 0 - 1 0 0 0 1 0 -1 - 1 0 0 0 -1 1 0 - 1 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -1 - - 10 16 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/loechner4.good.c b/cloog-0.16.3/test/reservoir/loechner4.good.c deleted file mode 100644 index ecd109e..0000000 --- a/cloog-0.16.3/test/reservoir/loechner4.good.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/loechner4.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k,l) { hash(1); hash(i); hash(j); hash(k); hash(l); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6, c8; - /* Original iterators. */ - int i, j, k, l; - for (c2=2;c2<=2*M;c2++) { - for (c4=1;c4<=M;c4++) { - for (c6=1;c6<=M;c6++) { - for (c8=max(1,c2-M);c8<=min(c2-1,M);c8++) { - l = c2-c8 ; - S1(c6,c4,c8,c2-c8) ; - } - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/loechner5.c b/cloog-0.16.3/test/reservoir/loechner5.c deleted file mode 100644 index 3ba1f5b..0000000 --- a/cloog-0.16.3/test/reservoir/loechner5.c +++ /dev/null @@ -1,12 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/loechner5.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -if (M >= 1) { - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - for (c6=1;c6<=M;c6++) { - for (c8=1;c8<=M;c8++) { - S1(c4,c6,c2,c8) ; - } - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/loechner5.cloog b/cloog-0.16.3/test/reservoir/loechner5.cloog deleted file mode 100755 index f208435..0000000 --- a/cloog-0.16.3/test/reservoir/loechner5.cloog +++ /dev/null @@ -1,44 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -1 - -1 -# { (i,j,k,l,m) | i-1 >= 0, -i+m >= 0, j-1 >= 0, -j+m >= 0, k-1 >= 0, -k+m >= 0, l-1 >= 0, -l+m >= 0, 1 >= 0 } - - 9 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 0 1 0 - 1 0 1 0 0 0 -1 - 1 0 -1 0 0 1 0 - 1 0 0 1 0 0 -1 - 1 0 0 -1 0 1 0 - 1 0 0 0 1 0 -1 - 1 0 0 0 -1 1 0 - 1 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -1 - - 10 16 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/loechner5.good.c b/cloog-0.16.3/test/reservoir/loechner5.good.c deleted file mode 100644 index 937c118..0000000 --- a/cloog-0.16.3/test/reservoir/loechner5.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/loechner5.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k,l) { hash(1); hash(i); hash(j); hash(k); hash(l); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6, c8; - /* Original iterators. */ - int i, j, k, l; - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - for (c6=1;c6<=M;c6++) { - for (c8=1;c8<=M;c8++) { - S1(c4,c6,c2,c8) ; - } - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/mg-interp.c b/cloog-0.16.3/test/reservoir/mg-interp.c deleted file mode 100644 index 3ed1fcf..0000000 --- a/cloog-0.16.3/test/reservoir/mg-interp.c +++ /dev/null @@ -1,219 +0,0 @@ -/* Generated from ../../../git/cloog/test/reservoir/mg-interp.cloog by CLooG 0.16.2-5-g590827b gmp bits in 0.29s. */ -if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,1,c6); - } - if (N == 2) { - for (c6=1;c6<=M-1;c6++) { - S6(c2,1,c6); - S7(c2,1,c6); - } - } - if (N >= 3) { - for (c6=1;c6<=M-1;c6++) { - S6(c2,1,c6); - S7(c2,1,c6); - } - } - if (N == 2) { - for (c6=1;c6<=M;c6++) { - S3(c2,1,c6); - } - } - if (N == 2) { - for (c6=1;c6<=M-1;c6++) { - S11(c2,1,c6); - } - } - if (N >= 3) { - for (c6=1;c6<=M;c6++) { - S3(c2,1,c6); - } - for (c6=1;c6<=M;c6++) { - S1(c2,2,c6); - } - } - if (N == 3) { - for (c6=1;c6<=M-1;c6++) { - S6(c2,2,c6); - S7(c2,2,c6); - } - for (c6=1;c6<=M-1;c6++) { - S11(c2,1,c6); - } - } - if (N >= 4) { - for (c6=1;c6<=M-1;c6++) { - S6(c2,2,c6); - S7(c2,2,c6); - } - for (c6=1;c6<=M-1;c6++) { - S11(c2,1,c6); - } - } - for (c4=3;c4<=2*N-5;c4++) { - for (c6=1;c6<=M-1;c6++) { - if ((c4+1)%2 == 0) { - S10(c2,(c4-1)/2,c6); - } - } - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - S3(c2,(c4+1)/2,c6); - } - } - for (c6=1;c6<=M-1;c6++) { - if (c4%2 == 0) { - S6(c2,(c4+2)/2,c6); - } - if ((c4+1)%2 == 0) { - S1(c2,(c4+3)/2,c6); - } - if (c4%2 == 0) { - S7(c2,(c4+2)/2,c6); - } - } - if ((c4+1)%2 == 0) { - S1(c2,(c4+3)/2,M); - } - for (c6=1;c6<=M-1;c6++) { - if (c4%2 == 0) { - S11(c2,c4/2,c6); - } - } - } - if (N >= 4) { - for (c6=1;c6<=M-1;c6++) { - S6(c2,N-1,c6); - S7(c2,N-1,c6); - } - for (c6=1;c6<=M-1;c6++) { - S11(c2,N-2,c6); - } - } - if (N >= 3) { - for (c6=1;c6<=M-1;c6++) { - S10(c2,N-2,c6); - } - for (c6=1;c6<=M;c6++) { - S3(c2,N-1,c6); - } - } - if (N >= 3) { - for (c6=1;c6<=M-1;c6++) { - S11(c2,N-1,c6); - } - } - for (c6=1;c6<=M-1;c6++) { - S10(c2,N-1,c6); - } - } -} -if ((M == 1) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - S1(c2,1,1); - for (c4=1;c4<=2*N-5;c4++) { - if ((c4+1)%2 == 0) { - S3(c2,(c4+1)/2,1); - } - if ((c4+1)%2 == 0) { - S1(c2,(c4+3)/2,1); - } - } - S3(c2,N-1,1); - } -} -if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S2(c2,1,c6); - } - for (c6=1;c6<=M-1;c6++) { - S8(c2,1,c6); - } - for (c4=3;c4<=2*N-2;c4++) { - for (c6=1;c6<=M;c6++) { - if (c4%2 == 0) { - S2(c2,c4/2,c6); - } - } - for (c6=1;c6<=M-1;c6++) { - if (c4%2 == 0) { - S8(c2,c4/2,c6); - } - } - for (c6=1;c6<=M-1;c6++) { - if ((c4+1)%2 == 0) { - S9(c2,(c4-1)/2,c6); - } - } - } - for (c6=1;c6<=M-1;c6++) { - S9(c2,N-1,c6); - } - } -} -if ((M == 1) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=2;c4<=2*N-2;c4++) { - if (c4%2 == 0) { - S2(c2,c4/2,1); - } - } - } -} -if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S4(c2,c4,c6); - } - } - } -} -if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S5(c2,c4,c6); - } - } - } -} -if ((M >= P+1) && (N >= Q+1)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S12(c2,c4,c6); - } - } - } -} -if ((M >= 2) && (N >= Q+1)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S13(c2,c4,c6); - } - } - } -} -if ((M >= P+1) && (N >= 2)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S14(c2,c4,c6); - } - } - } -} -if ((M >= 2) && (N >= 2)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S15(c2,c4,c6); - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/mg-interp.cloog b/cloog-0.16.3/test/reservoir/mg-interp.cloog deleted file mode 100755 index 9d08463..0000000 --- a/cloog-0.16.3/test/reservoir/mg-interp.cloog +++ /dev/null @@ -1,376 +0,0 @@ -# Language -c - -# Context - - 1 11 - 1 0 0 0 0 0 0 0 0 0 1 -0 - -# Number of statments -15 - -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-q >= 0, -i+n-1 >= 0, j-p >= 0, -j+m-1 >= 0, k-o >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 -1 0 0 0 0 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 -1 0 0 0 0 0 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 -1 0 0 0 0 0 0 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-q >= 0, -i+n-1 >= 0, j-p >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 -1 0 0 0 0 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 -1 0 0 0 0 0 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-q >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-o >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 -1 0 0 0 0 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 -1 0 0 0 0 0 0 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-q >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 -1 0 0 0 0 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -15 - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 3 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 2 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 2 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -7 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/mg-interp.good.c b/cloog-0.16.3/test/reservoir/mg-interp.good.c deleted file mode 100644 index 7f919c8..0000000 --- a/cloog-0.16.3/test/reservoir/mg-interp.good.c +++ /dev/null @@ -1,318 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/mg-interp.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 1.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } -#define S4(i,j,k) { hash(4); hash(i); hash(j); hash(k); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } -#define S6(i,j,k) { hash(6); hash(i); hash(j); hash(k); } -#define S7(i,j,k) { hash(7); hash(i); hash(j); hash(k); } -#define S8(i,j,k) { hash(8); hash(i); hash(j); hash(k); } -#define S9(i,j,k) { hash(9); hash(i); hash(j); hash(k); } -#define S10(i,j,k) { hash(10); hash(i); hash(j); hash(k); } -#define S11(i,j,k) { hash(11); hash(i); hash(j); hash(k); } -#define S12(i,j,k) { hash(12); hash(i); hash(j); hash(k); } -#define S13(i,j,k) { hash(13); hash(i); hash(j); hash(k); } -#define S14(i,j,k) { hash(14); hash(i); hash(j); hash(k); } -#define S15(i,j,k) { hash(15); hash(i); hash(j); hash(k); } - -void test(int M, int N, int O, int P, int Q, int R, int S, int T, int U) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if ((M >= 2) && (N >= 4)) { - for (c2=1;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S6(c2,1,c6) ; - S7(c2,1,c6) ; - } - for (c6=1;c6<=M;c6++) { - S3(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S1(c2,2,c6) ; - } - S1(c2,2,M) ; - for (c6=1;c6<=M-1;c6++) { - S6(c2,2,c6) ; - S7(c2,2,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S11(c2,1,c6) ; - } - for (c4=3;c4<=2*N-5;c4++) { - for (c6=1;c6<=M-1;c6++) { - if ((c4+1)%2 == 0) { - j = (c4-1)/2 ; - S10(c2,(c4-1)/2,c6) ; - } - } - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S3(c2,(c4+1)/2,c6) ; - } - } - for (c6=1;c6<=M-1;c6++) { - if (c4%2 == 0) { - j = (c4+2)/2 ; - S6(c2,(c4+2)/2,c6) ; - S7(c2,(c4+2)/2,c6) ; - } - if ((c4+1)%2 == 0) { - j = (c4+3)/2 ; - S1(c2,(c4+3)/2,c6) ; - } - } - if ((c4+1)%2 == 0) { - j = (c4+3)/2 ; - S1(c2,(c4+3)/2,M) ; - } - for (c6=1;c6<=M-1;c6++) { - if (c4%2 == 0) { - S11(c2,c4/2,c6) ; - } - } - } - c4 = 2*N-4 ; - for (c6=1;c6<=M-1;c6++) { - j = N-1 ; - S6(c2,N-1,c6) ; - S7(c2,N-1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - j = N-2 ; - S11(c2,N-2,c6) ; - } - c4 = 2*N-3 ; - for (c6=1;c6<=M-1;c6++) { - j = N-2 ; - S10(c2,N-2,c6) ; - } - for (c6=1;c6<=M;c6++) { - j = N-1 ; - S3(c2,N-1,c6) ; - } - c4 = 2*N-2 ; - for (c6=1;c6<=M-1;c6++) { - j = N-1 ; - S11(c2,N-1,c6) ; - } - c4 = 2*N-1 ; - for (c6=1;c6<=M-1;c6++) { - j = N-1 ; - S10(c2,N-1,c6) ; - } - } - } - if ((M >= 2) && (N == 3)) { - for (c2=1;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S6(c2,1,c6) ; - S7(c2,1,c6) ; - } - for (c6=1;c6<=M;c6++) { - S3(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S1(c2,2,c6) ; - } - S1(c2,2,M) ; - for (c6=1;c6<=M-1;c6++) { - S6(c2,2,c6) ; - S7(c2,2,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S11(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S10(c2,1,c6) ; - } - for (c6=1;c6<=M;c6++) { - S3(c2,2,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S11(c2,2,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S10(c2,2,c6) ; - } - } - } - if ((M >= 2) && (N == 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S6(c2,1,c6) ; - S7(c2,1,c6) ; - } - for (c6=1;c6<=M;c6++) { - S3(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S11(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S10(c2,1,c6) ; - } - } - } - if ((M == 1) && (N >= 3)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=-1;c4<=0;c4++) { - if ((c4+1)%2 == 0) { - j = (c4+3)/2 ; - S1(c2,(c4+3)/2,1) ; - } - } - for (c4=1;c4<=2*N-5;c4++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S3(c2,(c4+1)/2,1) ; - } - if ((c4+1)%2 == 0) { - j = (c4+3)/2 ; - S1(c2,(c4+3)/2,1) ; - } - } - for (c4=2*N-4;c4<=2*N-3;c4++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S3(c2,(c4+1)/2,1) ; - } - } - } - } - if ((M == 1) && (N == 2)) { - for (c2=1;c2<=O-1;c2++) { - S1(c2,1,1) ; - S3(c2,1,1) ; - } - } - if ((M >= 2) && (N >= 3)) { - for (c2=1;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S2(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S8(c2,1,c6) ; - } - for (c4=3;c4<=2*N-2;c4++) { - for (c6=1;c6<=M;c6++) { - if (c4%2 == 0) { - S2(c2,c4/2,c6) ; - } - } - for (c6=1;c6<=M-1;c6++) { - if (c4%2 == 0) { - S8(c2,c4/2,c6) ; - } - } - for (c6=1;c6<=M-1;c6++) { - if ((c4+1)%2 == 0) { - j = (c4-1)/2 ; - S9(c2,(c4-1)/2,c6) ; - } - } - } - c4 = 2*N-1 ; - for (c6=1;c6<=M-1;c6++) { - j = N-1 ; - S9(c2,N-1,c6) ; - } - } - } - if ((M >= 2) && (N == 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S2(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S8(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S9(c2,1,c6) ; - } - } - } - if ((M == 1) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=2;c4<=2*N-2;c4++) { - if (c4%2 == 0) { - S2(c2,c4/2,1) ; - } - } - } - } - if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S4(c2,c4,c6) ; - } - } - } - } - if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S5(c2,c4,c6) ; - } - } - } - } - if ((M >= P+1) && (N >= Q+1)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S12(c2,c4,c6) ; - } - } - } - } - if ((M >= 2) && (N >= Q+1)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S13(c2,c4,c6) ; - } - } - } - } - if ((M >= P+1) && (N >= 2)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S14(c2,c4,c6) ; - } - } - } - } - if ((M >= 2) && (N >= 2)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S15(c2,c4,c6) ; - } - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/mg-interp2.c b/cloog-0.16.3/test/reservoir/mg-interp2.c deleted file mode 100644 index 688cc91..0000000 --- a/cloog-0.16.3/test/reservoir/mg-interp2.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/mg-interp2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.11s. */ -if (O >= 2) { - if ((M >= P+1) && (N >= Q+1)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S1(c2,c4,c6) ; - } - } - } - } - if ((M >= 2) && (N >= Q+1)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S2(c2,c4,c6) ; - } - } - } - } - if ((M >= P+1) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S3(c2,c4,c6) ; - } - } - } - } - if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S4(c2,c4,c6) ; - } - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/mg-interp2.cloog b/cloog-0.16.3/test/reservoir/mg-interp2.cloog deleted file mode 100755 index d1218bc..0000000 --- a/cloog-0.16.3/test/reservoir/mg-interp2.cloog +++ /dev/null @@ -1,112 +0,0 @@ -# Language -c - -# Context - - 1 11 - 1 0 0 0 0 0 0 0 0 0 1 -0 - -# Number of statments -4 - -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-p >= 0, -j+m-1 >= 0, k-o >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 -1 0 0 0 0 0 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 -1 0 0 0 0 0 0 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-p >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 -1 0 0 0 0 0 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-o >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 -1 0 0 0 0 0 0 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -4 - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/mg-interp2.good.c b/cloog-0.16.3/test/reservoir/mg-interp2.good.c deleted file mode 100644 index 2e1f365..0000000 --- a/cloog-0.16.3/test/reservoir/mg-interp2.good.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/mg-interp2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.07s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } -#define S4(i,j,k) { hash(4); hash(i); hash(j); hash(k); } - -void test(int M, int N, int O, int P, int Q, int R, int S, int T, int U) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if ((M >= P+1) && (N >= Q+1)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S1(c2,c4,c6) ; - } - } - } - } - if ((M >= 2) && (N >= Q+1)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S2(c2,c4,c6) ; - } - } - } - } - if ((M >= P+1) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S3(c2,c4,c6) ; - } - } - } - } - if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S4(c2,c4,c6) ; - } - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/mg-psinv.c b/cloog-0.16.3/test/reservoir/mg-psinv.c deleted file mode 100644 index a0447e1..0000000 --- a/cloog-0.16.3/test/reservoir/mg-psinv.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/mg-psinv.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.02s. */ -if ((M >= 1) && (N >= 3) && (O >= 3)) { - if (M >= 3) { - for (c2=2;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,2,c6); - S2(c2,2,c6); - } - for (c4=4;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - S1(c2,(c4+1)/2,c6); - S2(c2,(c4+1)/2,c6); - } - } - for (c6=2;c6<=M-1;c6++) { - if (c4%2 == 0) { - S3(c2,c4/2,c6); - } - } - } - for (c6=2;c6<=M-1;c6++) { - S3(c2,N-1,c6); - } - } - } - if (M <= 2) { - for (c2=2;c2<=O-1;c2++) { - for (c4=3;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - S1(c2,(c4+1)/2,c6); - S2(c2,(c4+1)/2,c6); - } - } - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/mg-psinv.cloog b/cloog-0.16.3/test/reservoir/mg-psinv.cloog deleted file mode 100755 index 7f0dd2c..0000000 --- a/cloog-0.16.3/test/reservoir/mg-psinv.cloog +++ /dev/null @@ -1,88 +0,0 @@ -# Language -c - -# Context - - 1 5 - 1 0 0 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j,k,l,m,n) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 8 - 1 1 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 -1 - 1 0 1 0 0 0 0 -2 - 1 0 -1 0 0 1 0 -1 - 1 0 0 1 0 0 0 -1 - 1 0 0 -1 1 0 0 0 - 1 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 8 - 1 1 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 -1 - 1 0 1 0 0 0 0 -2 - 1 0 -1 0 0 1 0 -1 - 1 0 0 1 0 0 0 -1 - 1 0 0 -1 1 0 0 0 - 1 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 8 - 1 1 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 -1 - 1 0 1 0 0 0 0 -2 - 1 0 -1 0 0 1 0 -1 - 1 0 0 1 0 0 0 -2 - 1 0 0 -1 1 0 0 -1 - 1 0 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 8 15 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 15 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 15 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/mg-psinv.good.c b/cloog-0.16.3/test/reservoir/mg-psinv.good.c deleted file mode 100644 index cb5b57c..0000000 --- a/cloog-0.16.3/test/reservoir/mg-psinv.good.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/mg-psinv.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.05s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } - -void test(int M, int N, int O) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if ((M >= 3) && (N >= 4)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,2,c6) ; - S2(c2,2,c6) ; - } - for (c4=4;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S1(c2,(c4+1)/2,c6) ; - S2(c2,(c4+1)/2,c6) ; - } - } - for (c6=2;c6<=M-1;c6++) { - if (c4%2 == 0) { - S3(c2,c4/2,c6) ; - } - } - } - c4 = 2*N-2 ; - for (c6=2;c6<=M-1;c6++) { - j = N-1 ; - S3(c2,N-1,c6) ; - } - } - } - if ((M >= 3) && (N == 3)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,2,c6) ; - S2(c2,2,c6) ; - } - for (c6=2;c6<=M-1;c6++) { - S3(c2,2,c6) ; - } - } - } - if ((M >= 1) && (M <= 2) && (N >= 3)) { - for (c2=2;c2<=O-1;c2++) { - for (c4=3;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S1(c2,(c4+1)/2,c6) ; - S2(c2,(c4+1)/2,c6) ; - } - } - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/mg-resid.c b/cloog-0.16.3/test/reservoir/mg-resid.c deleted file mode 100644 index 89a3cda..0000000 --- a/cloog-0.16.3/test/reservoir/mg-resid.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/mg-resid.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.03s. */ -if ((M >= 1) && (N >= 3) && (O >= 3)) { - if (M >= 3) { - for (c2=2;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,2,c6); - S2(c2,2,c6); - } - for (c4=4;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - S1(c2,(c4+1)/2,c6); - S2(c2,(c4+1)/2,c6); - } - } - for (c6=2;c6<=M-1;c6++) { - if (c4%2 == 0) { - S3(c2,c4/2,c6); - } - } - } - for (c6=2;c6<=M-1;c6++) { - S3(c2,N-1,c6); - } - } - } - if (M <= 2) { - for (c2=2;c2<=O-1;c2++) { - for (c4=3;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - S1(c2,(c4+1)/2,c6); - S2(c2,(c4+1)/2,c6); - } - } - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/mg-resid.cloog b/cloog-0.16.3/test/reservoir/mg-resid.cloog deleted file mode 100755 index 7f0dd2c..0000000 --- a/cloog-0.16.3/test/reservoir/mg-resid.cloog +++ /dev/null @@ -1,88 +0,0 @@ -# Language -c - -# Context - - 1 5 - 1 0 0 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j,k,l,m,n) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 8 - 1 1 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 -1 - 1 0 1 0 0 0 0 -2 - 1 0 -1 0 0 1 0 -1 - 1 0 0 1 0 0 0 -1 - 1 0 0 -1 1 0 0 0 - 1 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 8 - 1 1 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 -1 - 1 0 1 0 0 0 0 -2 - 1 0 -1 0 0 1 0 -1 - 1 0 0 1 0 0 0 -1 - 1 0 0 -1 1 0 0 0 - 1 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 8 - 1 1 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 -1 - 1 0 1 0 0 0 0 -2 - 1 0 -1 0 0 1 0 -1 - 1 0 0 1 0 0 0 -2 - 1 0 0 -1 1 0 0 -1 - 1 0 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 8 15 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 15 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 15 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/mg-resid.good.c b/cloog-0.16.3/test/reservoir/mg-resid.good.c deleted file mode 100644 index 4056aab..0000000 --- a/cloog-0.16.3/test/reservoir/mg-resid.good.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/mg-resid.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.05s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } - -void test(int M, int N, int O) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if ((M >= 3) && (N >= 4)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,2,c6) ; - S2(c2,2,c6) ; - } - for (c4=4;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S1(c2,(c4+1)/2,c6) ; - S2(c2,(c4+1)/2,c6) ; - } - } - for (c6=2;c6<=M-1;c6++) { - if (c4%2 == 0) { - S3(c2,c4/2,c6) ; - } - } - } - c4 = 2*N-2 ; - for (c6=2;c6<=M-1;c6++) { - j = N-1 ; - S3(c2,N-1,c6) ; - } - } - } - if ((M >= 3) && (N == 3)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,2,c6) ; - S2(c2,2,c6) ; - } - for (c6=2;c6<=M-1;c6++) { - S3(c2,2,c6) ; - } - } - } - if ((M >= 1) && (M <= 2) && (N >= 3)) { - for (c2=2;c2<=O-1;c2++) { - for (c4=3;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S1(c2,(c4+1)/2,c6) ; - S2(c2,(c4+1)/2,c6) ; - } - } - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/mg-rprj3.c b/cloog-0.16.3/test/reservoir/mg-rprj3.c deleted file mode 100644 index f7f7a4d..0000000 --- a/cloog-0.16.3/test/reservoir/mg-rprj3.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/mg-rprj3.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.10s. */ -if ((M >= 2) && (N >= 3) && (O >= 3)) { - if (M >= 3) { - for (c2=2;c2<=O-1;c2++) { - for (c6=2;c6<=M;c6++) { - S1(c2,2,c6); - } - for (c4=3;c4<=N-1;c4++) { - for (c6=2;c6<=M;c6++) { - S2(c2,c4-1,c6); - } - S4(c2,c4-1,2); - for (c6=2;c6<=M-2;c6++) { - S3(c2,c4-1,c6); - S5(c2,c4-1,c6); - S4(c2,c4-1,c6+1); - } - S3(c2,c4-1,M-1); - S5(c2,c4-1,M-1); - for (c6=2;c6<=M;c6++) { - S1(c2,c4,c6); - } - } - for (c6=2;c6<=M;c6++) { - S2(c2,N-1,c6); - } - S4(c2,N-1,2); - for (c6=2;c6<=M-2;c6++) { - S3(c2,N-1,c6); - S5(c2,N-1,c6); - S4(c2,N-1,c6+1); - } - S3(c2,N-1,M-1); - S5(c2,N-1,M-1); - } - } - if (M == 2) { - for (c2=2;c2<=O-1;c2++) { - S1(c2,2,2); - for (c4=3;c4<=N-1;c4++) { - S2(c2,c4-1,2); - S1(c2,c4,2); - } - S2(c2,N-1,2); - } - } -} diff --git a/cloog-0.16.3/test/reservoir/mg-rprj3.cloog b/cloog-0.16.3/test/reservoir/mg-rprj3.cloog deleted file mode 100755 index adf72fd..0000000 --- a/cloog-0.16.3/test/reservoir/mg-rprj3.cloog +++ /dev/null @@ -1,136 +0,0 @@ -# Language -c - -# Context - - 1 8 - 1 0 0 0 0 0 0 1 -0 - -# Number of statments -5 - -1 -# { (i,j,k,l,m,n,o,p,q) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+l >= 0, 1 >= 0 } - - 7 11 - 1 1 0 0 0 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 -2 - 1 0 -1 0 0 1 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 -2 - 1 0 0 -1 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+l >= 0, 1 >= 0 } - - 7 11 - 1 1 0 0 0 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 -2 - 1 0 -1 0 0 1 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 -2 - 1 0 0 -1 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 11 - 1 1 0 0 0 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 -2 - 1 0 -1 0 0 1 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 -2 - 1 0 0 -1 1 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 11 - 1 1 0 0 0 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 -2 - 1 0 -1 0 0 1 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 -2 - 1 0 0 -1 1 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 11 - 1 1 0 0 0 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 -2 - 1 0 -1 0 0 1 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 -2 - 1 0 0 -1 1 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -5 - - 8 18 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 18 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 18 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 18 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 1 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -2 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 18 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/mg-rprj3.good.c b/cloog-0.16.3/test/reservoir/mg-rprj3.good.c deleted file mode 100644 index 38ac53e..0000000 --- a/cloog-0.16.3/test/reservoir/mg-rprj3.good.c +++ /dev/null @@ -1,163 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/mg-rprj3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.39s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } -#define S4(i,j,k) { hash(4); hash(i); hash(j); hash(k); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } - -void test(int M, int N, int O, int P, int Q, int R) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if ((M >= 4) && (N >= 4)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=2;c6<=M;c6++) { - S1(c2,2,c6) ; - } - for (c4=3;c4<=N-1;c4++) { - for (c6=2;c6<=M;c6++) { - j = c4-1 ; - S2(c2,c4-1,c6) ; - } - j = c4-1 ; - S4(c2,c4-1,2) ; - for (c6=2;c6<=M-2;c6++) { - j = c4-1 ; - S3(c2,c4-1,c6) ; - j = c4-1 ; - S5(c2,c4-1,c6) ; - j = c4-1 ; - k = c6+1 ; - S4(c2,c4-1,c6+1) ; - } - c6 = M-1 ; - j = c4-1 ; - k = M-1 ; - S3(c2,c4-1,M-1) ; - j = c4-1 ; - k = M-1 ; - S5(c2,c4-1,M-1) ; - for (c6=2;c6<=M;c6++) { - S1(c2,c4,c6) ; - } - } - for (c6=2;c6<=M;c6++) { - j = N-1 ; - S2(c2,N-1,c6) ; - } - j = N-1 ; - S4(c2,N-1,2) ; - for (c6=2;c6<=M-2;c6++) { - j = N-1 ; - S3(c2,N-1,c6) ; - j = N-1 ; - S5(c2,N-1,c6) ; - j = N-1 ; - k = c6+1 ; - S4(c2,N-1,c6+1) ; - } - c6 = M-1 ; - j = N-1 ; - k = M-1 ; - S3(c2,N-1,M-1) ; - j = N-1 ; - k = M-1 ; - S5(c2,N-1,M-1) ; - } - } - if ((M >= 4) && (N == 3)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=2;c6<=M;c6++) { - S1(c2,2,c6) ; - } - for (c6=2;c6<=M;c6++) { - S2(c2,2,c6) ; - } - S4(c2,2,2) ; - for (c6=2;c6<=M-2;c6++) { - S3(c2,2,c6) ; - S5(c2,2,c6) ; - k = c6+1 ; - S4(c2,2,c6+1) ; - } - c6 = M-1 ; - k = M-1 ; - S3(c2,2,M-1) ; - k = M-1 ; - S5(c2,2,M-1) ; - } - } - if ((M == 3) && (N == 3)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=2;c6<=3;c6++) { - S1(c2,2,c6) ; - } - for (c6=2;c6<=3;c6++) { - S2(c2,2,c6) ; - } - S4(c2,2,2) ; - S3(c2,2,2) ; - S5(c2,2,2) ; - } - } - if ((M == 3) && (N >= 4)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=2;c6<=3;c6++) { - S1(c2,2,c6) ; - } - for (c4=3;c4<=N-1;c4++) { - for (c6=2;c6<=3;c6++) { - j = c4-1 ; - S2(c2,c4-1,c6) ; - } - j = c4-1 ; - S4(c2,c4-1,2) ; - j = c4-1 ; - S3(c2,c4-1,2) ; - j = c4-1 ; - S5(c2,c4-1,2) ; - for (c6=2;c6<=3;c6++) { - S1(c2,c4,c6) ; - } - } - for (c6=2;c6<=3;c6++) { - j = N-1 ; - S2(c2,N-1,c6) ; - } - j = N-1 ; - S4(c2,N-1,2) ; - j = N-1 ; - S3(c2,N-1,2) ; - j = N-1 ; - S5(c2,N-1,2) ; - } - } - if ((M == 2) && (N >= 4)) { - for (c2=2;c2<=O-1;c2++) { - S1(c2,2,2) ; - for (c4=3;c4<=N-1;c4++) { - j = c4-1 ; - S2(c2,c4-1,2) ; - S1(c2,c4,2) ; - } - j = N-1 ; - S2(c2,N-1,2) ; - } - } - if ((M == 2) && (N == 3)) { - for (c2=2;c2<=O-1;c2++) { - S1(c2,2,2) ; - S2(c2,2,2) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/pingali1.c b/cloog-0.16.3/test/reservoir/pingali1.c deleted file mode 100644 index 505df8d..0000000 --- a/cloog-0.16.3/test/reservoir/pingali1.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/pingali1.cloog by CLooG 0.14.0-225-g6e2d019 gmp bits in 0.01s. */ -if ((M >= 1) && (N >= 1)) { - if (N >= 2) { - for (c2=1;c2<=M;c2++) { - S2(c2,1); - for (c4=3;c4<=2*N-1;c4++) { - for (c6=max(1,c4-N);c6<=floord(c4-1,2);c6++) { - S1(c2,c4-c6,c6); - } - if ((c4+1)%2 == 0) { - S2(c2,(c4+1)/2); - } - } - } - } - if (N == 1) { - for (c2=1;c2<=M;c2++) { - S2(c2,1); - } - } -} diff --git a/cloog-0.16.3/test/reservoir/pingali1.cloog b/cloog-0.16.3/test/reservoir/pingali1.cloog deleted file mode 100755 index 0be0a2a..0000000 --- a/cloog-0.16.3/test/reservoir/pingali1.cloog +++ /dev/null @@ -1,61 +0,0 @@ -# Language -c - -# Context - - 1 4 - 1 0 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k,l,m) | i-1 >= 0, -i+l >= 0, -j+m >= 0, k-1 >= 0, j-k-1 >= 0, 1 >= 0 } - - 6 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 1 0 0 - 1 0 -1 0 0 1 0 - 1 0 0 1 0 0 -1 - 1 0 1 -1 0 0 -1 - 1 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+l >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 -1 - 1 -1 0 1 0 0 - 1 0 1 0 0 -1 - 1 0 -1 0 1 0 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 8 14 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 1 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/pingali1.good.c b/cloog-0.16.3/test/reservoir/pingali1.good.c deleted file mode 100644 index b72eb17..0000000 --- a/cloog-0.16.3/test/reservoir/pingali1.good.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if (N >= 2) { - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=2;c4++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S2(c2,(c4+1)/2) ; - } - } - for (c4=3;c4<=2*N-1;c4++) { - for (c6=max(1,c4-N);c6<=floord(c4-1,2);c6++) { - j = c4-c6 ; - S1(c2,c4-c6,c6) ; - } - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S2(c2,(c4+1)/2) ; - } - } - } - } - if (N == 1) { - for (c2=1;c2<=M;c2++) { - S2(c2,1) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/pingali2.c b/cloog-0.16.3/test/reservoir/pingali2.c deleted file mode 100644 index b09c4f9..0000000 --- a/cloog-0.16.3/test/reservoir/pingali2.c +++ /dev/null @@ -1,13 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -if (M >= 1) { - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c2,c4) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/pingali2.cloog b/cloog-0.16.3/test/reservoir/pingali2.cloog deleted file mode 100755 index 0f89038..0000000 --- a/cloog-0.16.3/test/reservoir/pingali2.cloog +++ /dev/null @@ -1,56 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - - - 6 10 - 0 1 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/pingali2.good.c b/cloog-0.16.3/test/reservoir/pingali2.good.c deleted file mode 100644 index 9341731..0000000 --- a/cloog-0.16.3/test/reservoir/pingali2.good.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c2,c4) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/pingali3.c b/cloog-0.16.3/test/reservoir/pingali3.c deleted file mode 100644 index b53542a..0000000 --- a/cloog-0.16.3/test/reservoir/pingali3.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (M >= 1) { - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - for (c6=1;c6<=M;c6++) { - S2(c2,c4,c6) ; - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/pingali3.cloog b/cloog-0.16.3/test/reservoir/pingali3.cloog deleted file mode 100755 index 8f345c0..0000000 --- a/cloog-0.16.3/test/reservoir/pingali3.cloog +++ /dev/null @@ -1,62 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i-1 >= 0, -i+l >= 0, j-1 >= 0, -j+l >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 6 - 1 1 0 0 0 -1 - 1 -1 0 0 1 0 - 1 0 1 0 0 -1 - 1 0 -1 0 1 0 - 1 0 0 1 0 -1 - 1 0 0 -1 1 0 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/pingali3.good.c b/cloog-0.16.3/test/reservoir/pingali3.good.c deleted file mode 100644 index 5b5e4a9..0000000 --- a/cloog-0.16.3/test/reservoir/pingali3.good.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - for (c6=1;c6<=M;c6++) { - S2(c2,c4,c6) ; - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/pingali4.c b/cloog-0.16.3/test/reservoir/pingali4.c deleted file mode 100644 index 9905699..0000000 --- a/cloog-0.16.3/test/reservoir/pingali4.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali4.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } -} -for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c2,c4) ; - } -} diff --git a/cloog-0.16.3/test/reservoir/pingali4.cloog b/cloog-0.16.3/test/reservoir/pingali4.cloog deleted file mode 100755 index 46f4e07..0000000 --- a/cloog-0.16.3/test/reservoir/pingali4.cloog +++ /dev/null @@ -1,57 +0,0 @@ -# Language -c - -# Context - - 2 3 - 1 1 -2 - 1 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - - - 6 10 - 0 1 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/pingali4.good.c b/cloog-0.16.3/test/reservoir/pingali4.good.c deleted file mode 100644 index 5b61707..0000000 --- a/cloog-0.16.3/test/reservoir/pingali4.good.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali4.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c2,c4) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/pingali5.c b/cloog-0.16.3/test/reservoir/pingali5.c deleted file mode 100644 index 1b2c415..0000000 --- a/cloog-0.16.3/test/reservoir/pingali5.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/pingali5.cloog by CLooG 0.14.0-225-g6e2d019 gmp bits in 0.02s. */ -if (M >= 2) { - for (c2=3;c2<=2*M-3;c2++) { - for (c4=ceild(c2+3,2);c4<=M;c4++) { - for (i=ceild(c2+1,2);i<=min(c2-1,c4-1);i++) { - S1(i,c2-i,c4); - } - } - for (c4=max(1,c2-M);c4<=floord(c2-1,2);c4++) { - S2(c2-c4,c4); - } - for (c4=ceild(c2+3,2);c4<=M;c4++) { - for (i=ceild(c2+1,2);i<=min(c2-1,c4-1);i++) { - S3(i,c2-i,c4); - } - } - } - for (c2=max(M+1,2*M-2);c2<=2*M-1;c2++) { - S2(M,c2-M); - } -} diff --git a/cloog-0.16.3/test/reservoir/pingali5.cloog b/cloog-0.16.3/test/reservoir/pingali5.cloog deleted file mode 100755 index 2933d75..0000000 --- a/cloog-0.16.3/test/reservoir/pingali5.cloog +++ /dev/null @@ -1,81 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j,k,l) | j-1 >= 0, i-j-1 >= 0, -i+k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 5 6 - 1 0 1 0 0 -1 - 1 1 -1 0 0 -1 - 1 -1 0 1 0 -1 - 1 0 0 -1 1 0 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | -i+k >= 0, j-1 >= 0, i-j-1 >= 0, 1 >= 0 } - - 4 5 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 1 -1 0 -1 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | j-1 >= 0, i-j-1 >= 0, -i+k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 5 6 - 1 0 1 0 0 -1 - 1 1 -1 0 0 -1 - 1 -1 0 1 0 -1 - 1 0 0 -1 1 0 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 -1 0 0 - 0 0 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 1 0 0 0 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/pingali5.good.c b/cloog-0.16.3/test/reservoir/pingali5.good.c deleted file mode 100644 index 351e5d3..0000000 --- a/cloog-0.16.3/test/reservoir/pingali5.good.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali5.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.03s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - for (c2=3;c2<=2*M-3;c2++) { - for (c4=ceild(c2+3,2);c4<=M;c4++) { - for (i=ceild(c2+1,2);i<=min(c4-1,c2-1);i++) { - j = c2-i ; - S1(i,c2-i,c4) ; - } - } - for (c4=max(1,c2-M);c4<=floord(c2-1,2);c4++) { - i = c2-c4 ; - S2(c2-c4,c4) ; - } - for (c4=ceild(c2+3,2);c4<=M;c4++) { - for (i=ceild(c2+1,2);i<=min(c4-1,c2-1);i++) { - j = c2-i ; - S3(i,c2-i,c4) ; - } - } - } - for (c2=max(2*M-2,3);c2<=2*M-1;c2++) { - for (c4=max(1,c2-M);c4<=floord(c2-1,2);c4++) { - i = c2-c4 ; - S2(c2-c4,c4) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/pingali6.c b/cloog-0.16.3/test/reservoir/pingali6.c deleted file mode 100644 index 5ce4a85..0000000 --- a/cloog-0.16.3/test/reservoir/pingali6.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali6.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.04s. */ -if (N >= 3) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S1(1,c4,c6) ; - } - } - for (c2=3;c2<=2*M;c2++) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if (c2%2 == 0) { - S1(c2/2,c4,c6) ; - } - } - } - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if ((c2+1)%2 == 0) { - S2((c2-1)/2,c4,c6) ; - } - } - } - } - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S2(M,c4,c6) ; - } - } -} diff --git a/cloog-0.16.3/test/reservoir/pingali6.cloog b/cloog-0.16.3/test/reservoir/pingali6.cloog deleted file mode 100755 index 93726ec..0000000 --- a/cloog-0.16.3/test/reservoir/pingali6.cloog +++ /dev/null @@ -1,66 +0,0 @@ -# Language -c - -# Context - - 3 4 - 1 1 0 -1 - 1 0 1 -1 - 1 0 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k,l,m) | i-1 >= 0, -i+l >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+m-1 >= 0, 1 >= 0 } - - 7 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 1 0 0 - 1 0 1 0 0 0 -2 - 1 0 -1 0 0 1 -1 - 1 0 0 1 0 0 -2 - 1 0 0 -1 0 1 -1 - 1 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m) | i-1 >= 0, -i+l >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+m-1 >= 0, 1 >= 0 } - - 7 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 1 0 0 - 1 0 1 0 0 0 -2 - 1 0 -1 0 0 1 -1 - 1 0 0 1 0 0 -2 - 1 0 0 -1 0 1 -1 - 1 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 8 14 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -2 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 14 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -2 0 0 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/pingali6.good.c b/cloog-0.16.3/test/reservoir/pingali6.good.c deleted file mode 100644 index 26e9831..0000000 --- a/cloog-0.16.3/test/reservoir/pingali6.good.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali6.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.03s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if (N >= 3) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S1(1,c4,c6) ; - } - } - } - if (N >= 3) { - for (c2=3;c2<=2*M;c2++) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if (c2%2 == 0) { - S1(c2/2,c4,c6) ; - } - } - } - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if ((c2+1)%2 == 0) { - i = (c2-1)/2 ; - S2((c2-1)/2,c4,c6) ; - } - } - } - } - } - if (N >= 3) { - c2 = 2*M+1 ; - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S2(M,c4,c6) ; - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/stride.c b/cloog-0.16.3/test/reservoir/stride.c deleted file mode 100644 index e22c74b..0000000 --- a/cloog-0.16.3/test/reservoir/stride.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/reservoir/stride.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -if (M >= 2) { - for (c2=2;c2<=M;c2+=7) { - S1(c2,(c2-2)/7) ; - } -} diff --git a/cloog-0.16.3/test/reservoir/stride.cloog b/cloog-0.16.3/test/reservoir/stride.cloog deleted file mode 100644 index 760a1a6..0000000 --- a/cloog-0.16.3/test/reservoir/stride.cloog +++ /dev/null @@ -1,45 +0,0 @@ -# -# Stride-bug: -# -# for (i = 2; i <= N; i+=7) { -# S(i); -# -# becomes: -# -# for (i = 5; i <= N; i+=7) { -# S(i); - -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statements -1 - -1 - - 4 5 - 0 1 -7 0 -2 - 1 1 0 0 -2 - 1 -1 0 1 0 - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -1 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/stride2.c b/cloog-0.16.3/test/reservoir/stride2.c deleted file mode 100644 index 8c2b7bf..0000000 --- a/cloog-0.16.3/test/reservoir/stride2.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/reservoir/stride2.cloog by CLooG 0.16.1-2-g0ae5c85 gmp bits in 0.00s. */ -if (M >= 2) { - for (c2=2;c2<=M;c2+=7) { - S1(c2,(c2-2)/7); - } -} diff --git a/cloog-0.16.3/test/reservoir/stride2.cloog b/cloog-0.16.3/test/reservoir/stride2.cloog deleted file mode 100644 index 5fb9b14..0000000 --- a/cloog-0.16.3/test/reservoir/stride2.cloog +++ /dev/null @@ -1,45 +0,0 @@ -# -# Stride-bug: -# -# for (i = 2; i <= N; i+=7) { -# S(i); -# -# becomes: -# -# for (i = 5; i <= N; i+=7) { -# S(i); - -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statements -1 - -1 - - 4 5 - 0 1 -7 0 -2 # i - 7j = 2 - 1 1 0 0 0 # i >= 0 - 1 -1 0 1 0 # i <= n - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -1 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.16.3/test/reservoir/tang-xue1.c b/cloog-0.16.3/test/reservoir/tang-xue1.c deleted file mode 100644 index 7dd0610..0000000 --- a/cloog-0.16.3/test/reservoir/tang-xue1.c +++ /dev/null @@ -1,14 +0,0 @@ -/* Generated from ../../../git/cloog/test/reservoir/tang-xue1.cloog by CLooG 0.14.0-165-g01eb246 gmp bits in 0.01s. */ -for (c2=0;c2<=9;c2++) { - for (c4=max(-1,c2-9);c4<=min(4,c2+3);c4++) { - for (c6=max(max(1,c2),c2-c4);c6<=min(min(9,c2+1),c2-c4+4);c6++) { - for (c8=max(1,-c2+c4+c6);c8<=min(4,-c2+c4+c6+1);c8++) { - if (c2%2 == 0) { - if (c4%2 == 0) { - S1(c2/2,(-c2+c4)/2,-c2+c6,-c4+c8); - } - } - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/tang-xue1.cloog b/cloog-0.16.3/test/reservoir/tang-xue1.cloog deleted file mode 100644 index bf9b92b..0000000 --- a/cloog-0.16.3/test/reservoir/tang-xue1.cloog +++ /dev/null @@ -1,80 +0,0 @@ -# -# Example 1 in "Generating Efficient Tiled Code for Distributed Memory -# Machines", Peiyi Tang and Jingling Xue. -# - -# for (int i = 1; i <= 9; i++) { -# for (int j = 1; j <= 4; j++) { -# A[i,2*j] = A[i,2*j-2] + A[i-1,2*j-2]; -# } -# } -# -# We tile it with a tiling matrix H = [1/2 0] -# [-1/2 1/2] -# -# We get: -# -# for (int i = 0; i <= 9; i += 2) { -# for (int j = max(-1, -9 + i); j <= min(4, 3 + i); j++) { -# for (int k = max(1, i, i-j); k <= min(4 + i -j, 1 + i, 9); k++) { -# for (int l = max(-i + j + k, 1); l <= min(4, 1 -i + j + k); l++) { -# if (i % 2 == 0) { -# if ((i + j) % 2 == 0) { -# A[k, 2 * l] = A[k, -2 + 2 * l] + A[-1 + k, -2 + 2 * l]; -# } -# } -# } -# } -# } -# } -# - -# language: C -c - -# parameter (none) -1 2 -# 1 -1 1 -0 - -1 # number of statements - -1 -# -2i-2j -l +4 >= 0 -# -k +l >= 0 -# -2i -k +9 >= 0 -# k >= 0 -# 2i +k -1 >= 0 -# k -l +1 >= 0 -# -k +1 >= 0 -# 2i+2j +l-1 >= 0 -8 6 -# i j k l 1 -1 -2 -2 0 -1 4 -1 0 0 -1 1 0 -1 -2 0 -1 0 9 -1 0 0 1 0 0 -1 2 0 1 0 -1 -1 0 0 1 -1 1 -1 0 0 -1 0 1 -1 2 2 0 1 -1 -0 0 0 -0 - -1 - -# Scattering functions -9 15 -# alpha=[2i, 2i+2j, 2i+k, 2i+2j+l] gamma=[0, 0, 0, 0] beta=[0, 0, 0, 0, 0, 0] -# c1 c2 c3 c4 c5 c6 c7 c8 c9 i j k l 1 -0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 -1 0 0 0 0 0 0 0 2 0 0 0 0 -0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 -1 0 0 0 0 0 2 2 0 0 0 -0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 -1 0 0 0 2 0 1 0 0 -0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 -1 0 2 2 0 1 0 -0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 diff --git a/cloog-0.16.3/test/reservoir/tang-xue1.good.c b/cloog-0.16.3/test/reservoir/tang-xue1.good.c deleted file mode 100644 index 1c4215c..0000000 --- a/cloog-0.16.3/test/reservoir/tang-xue1.good.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/tang-xue1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k,l) { hash(1); hash(i); hash(j); hash(k); hash(l); } - -void test() -{ - /* Scattering iterators. */ - int c2, c4, c6, c8; - /* Original iterators. */ - int i, j, k, l; - for (c2=0;c2<=9;c2++) { - for (c4=max(-1,c2-9);c4<=min(4,c2+3);c4++) { - for (c6=max(max(c2,1),c2-c4);c6<=min(min(c2+1,9),c2-c4+4);c6++) { - for (c8=max(1,-c2+c4+c6);c8<=min(4,-c2+c4+c6+1);c8++) { - if (c2%2 == 0) { - if ((c2+c4)%2 == 0) { - j = (-c2+c4)/2 ; - k = -c2+c6 ; - l = -c4+c8 ; - S1(c2/2,(-c2+c4)/2,-c2+c6,-c4+c8) ; - } - } - } - } - } - } -} diff --git a/cloog-0.16.3/test/reservoir/two.c b/cloog-0.16.3/test/reservoir/two.c deleted file mode 100644 index 374e754..0000000 --- a/cloog-0.16.3/test/reservoir/two.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/two.cloog by CLooG 0.14.0-225-g6e2d019 gmp bits in 0.00s. */ -S1(1,1,5); diff --git a/cloog-0.16.3/test/reservoir/two.cloog b/cloog-0.16.3/test/reservoir/two.cloog deleted file mode 100644 index 60b259f..0000000 --- a/cloog-0.16.3/test/reservoir/two.cloog +++ /dev/null @@ -1,26 +0,0 @@ -# Scan -# D = { (i, j, k) | 0 <= i < 10, 1 <= j < 20, 2i + 3j = k, i + j + 3 = 3k } -# -# language: C -c - -# parameter (none) -1 2 -1 1 -0 - -1 # Number of statements - -1 -6 5 -# i j k 1 -1 1 0 0 0 -1 -1 0 0 10 -1 0 1 0 -1 -1 0 -1 0 20 -0 2 3 -1 0 -0 1 1 -1 3 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/reservoir/two.good.c b/cloog-0.16.3/test/reservoir/two.good.c deleted file mode 100644 index a80671f..0000000 --- a/cloog-0.16.3/test/reservoir/two.good.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/two.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } - -void test() -{ - /* Original iterators. */ - int i, j, k; - for (i=0;i<=1;i++) { - if ((i+1)%2 == 0) { - j = (-i+3)/2 ; - k = (i+9)/2 ; - S1(i,(-i+3)/2,(i+9)/2) ; - } - } -} diff --git a/cloog-0.16.3/test/singleton.c b/cloog-0.16.3/test/singleton.c deleted file mode 100644 index ad14ebe..0000000 --- a/cloog-0.16.3/test/singleton.c +++ /dev/null @@ -1,3 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/singleton.cloog by CLooG 0.14.0-242-g720faff gmp bits in 0.00s. */ -S2(); -S1(); diff --git a/cloog-0.16.3/test/singleton.cloog b/cloog-0.16.3/test/singleton.cloog deleted file mode 100644 index 8636efb..0000000 --- a/cloog-0.16.3/test/singleton.cloog +++ /dev/null @@ -1,27 +0,0 @@ -c - -0 2 - -0 - -2 - -1 -0 2 -0 0 0 - -1 -0 2 -0 0 0 - -0 - -2 - -1 3 -0 -1 0 - -1 3 -0 -1 -1 - -0 diff --git a/cloog-0.16.3/test/singleton.good.c b/cloog-0.16.3/test/singleton.good.c deleted file mode 100644 index 40106ed..0000000 --- a/cloog-0.16.3/test/singleton.good.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/singleton.cloog by CLooG 0.14.0-242-g720faff gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } -#define S2() { hash(2); } - -void test() -{ - S2(); - S1(); -} diff --git a/cloog-0.16.3/test/sor1d.c b/cloog-0.16.3/test/sor1d.c deleted file mode 100644 index da1b5ec..0000000 --- a/cloog-0.16.3/test/sor1d.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated from ../../../git/cloog/test/sor1d.cloog by CLooG 0.14.0-278-gcf1f323 gmp bits in 0.11s. */ -if ((M >= 1) && (N >= 3)) { - for (glT1=-1;glT1<=floord(3*M+N-5,100);glT1++) { - for (rp1=max(max(0,ceild(100*glT1-2*M-N+5,100)),ceild(100*glT1-N-193,300));rp1<=min(min(floord(glT1+1,3),floord(M,100)),glT1);rp1++) { - for (vT1=max(max(100*glT1-100*rp1,200*rp1-3),200*rp1-N+1);vT1<=min(min(min(2*M+N-5,100*glT1-100*rp1+99),200*rp1+N+193),100*glT1-100*rp1+N+95);vT1++) { - if (rp1 >= max(1,ceild(vT1-N+7,200))) { - S3(glT1-rp1,rp1-1,rp1,100*rp1-1,-200*rp1+vT1+6); - } - for (vP1=max(max(1,ceild(vT1-N+5,2)),100*rp1);vP1<=min(min(floord(vT1+2,2),M),100*rp1+99);vP1++) { - S1(glT1-rp1,rp1,vP1,vT1-2*vP1+4); - } - if (rp1 <= min(floord(M-100,100),floord(vT1-197,200))) { - S2(glT1-rp1,rp1,rp1+1,100*rp1+99,-200*rp1+vT1-194); - } - } - } - S4(glT1); - } -} diff --git a/cloog-0.16.3/test/sor1d.cloog b/cloog-0.16.3/test/sor1d.cloog deleted file mode 100644 index ba1ca70..0000000 --- a/cloog-0.16.3/test/sor1d.cloog +++ /dev/null @@ -1,256 +0,0 @@ -# created: Thu Dec 17 16:41:33 CET 2009 -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context -2 4 - 1 1 0 0 - 1 0 1 0 - - -1 # set parameter names -M N - -# --------------------- STATEMENTS -------------------- -4 - -# 1 computation stmts: -1 # domains per statement -19 8 - 1 -100 0 2 1 0 0 -4 - 1 0 0 0 1 0 0 -2 - 1 100 0 -2 -1 0 0 103 - 1 0 0 0 -1 0 1 -1 - 1 0 0 1 0 0 0 -1 - 1 0 -100 1 0 0 0 0 - 1 -100 0 2 0 0 1 -5 - 1 0 0 -1 0 1 0 0 - 1 0 100 -1 0 0 0 99 - 1 100 0 -2 0 0 0 101 - 1 0 50 0 0 0 0 49 - 1 -100 200 0 0 0 1 193 - 1 0 -100 0 0 1 0 0 - 1 100 -200 0 0 0 0 101 - 1 100 0 0 0 0 0 99 - 1 -100 0 0 0 2 1 -5 - 1 0 0 0 0 0 1 -3 - 1 0 0 0 0 2 1 94 - 1 0 0 0 0 1 0 -1 - - -0 0 0 # for future options... - - -# 1 prepare-send stmts: -1 # domains per statement -57 9 - 1 0 -200 0 2 1 0 0 -3 - 1 0 0 0 2 1 0 0 -5 - 1 -100 0 0 2 1 0 0 -4 - 1 0 0 0 0 1 0 0 -3 - 1 0 200 0 -2 -1 0 1 197 - 1 0 0 0 -2 -1 2 1 -3 - 1 100 0 0 -2 -1 0 0 103 - 1 0 0 0 0 -1 0 1 -1 - 1 0 0 -100 1 0 0 0 1 - 1 0 -100 0 1 0 0 0 0 - 1 0 0 0 1 0 0 0 -1 - 1 0 -200 0 2 0 0 1 -4 - 1 0 0 0 2 0 0 1 -6 - 1 -100 0 0 2 0 0 1 -5 - 1 0 0 100 -1 0 0 0 98 - 1 0 100 0 -1 0 0 0 99 - 1 0 0 0 -1 0 1 0 -1 - 1 0 200 0 -2 0 0 1 194 - 1 0 0 0 -2 0 2 1 -6 - 1 50 0 0 -1 0 0 0 50 - 1 0 -1 1 0 0 0 0 -1 - 1 0 0 100 0 0 0 0 97 - 1 0 -200 200 0 0 0 1 192 - 1 0 0 200 0 0 0 1 190 - 1 -100 0 200 0 0 0 1 191 - 1 0 1 -1 0 0 0 0 1 - 1 0 0 -100 0 0 1 0 0 - 1 0 200 -200 0 0 0 1 196 - 1 0 0 -200 0 0 2 1 -4 - 1 50 0 -100 0 0 0 0 51 - 1 -100 200 0 0 0 0 2 189 - 1 -100 200 0 0 0 0 1 193 - 1 0 100 0 0 0 0 1 94 - 1 0 200 0 0 0 0 1 192 - 1 0 50 0 0 0 0 0 49 - 1 100 -200 0 0 0 0 1 96 - 1 0 -100 0 0 0 1 1 -5 - 1 0 -100 0 0 0 1 0 -100 - 1 0 -200 0 0 0 2 1 -204 - 1 50 -100 0 0 0 0 0 -49 - 1 50 0 0 0 0 0 0 49 - 1 100 0 0 0 0 0 1 94 - 1 100 0 0 0 0 0 3 284 - 1 50 0 0 0 0 0 1 45 - 1 -100 0 0 0 0 2 1 -7 - 1 -100 0 0 0 0 2 2 -11 - 1 -100 0 0 0 0 2 4 179 - 1 -100 0 0 0 0 2 3 -15 - 1 0 0 0 0 0 2 1 -8 - 1 0 0 0 0 0 2 3 -16 - 1 0 0 0 0 0 1 1 -6 - 1 0 0 0 0 0 0 1 -4 - 1 0 0 0 0 0 2 4 79 - 1 0 0 0 0 0 2 7 463 - 1 0 0 0 0 0 2 6 269 - 1 0 0 0 0 0 2 5 75 - 1 0 0 0 0 0 1 0 -2 - - -0 0 0 # for future options... - - -# 1 prepare-receive stmts: -1 # domains per statement -57 9 - 1 0 -200 0 2 1 0 0 -3 - 1 0 0 0 2 1 0 0 -5 - 1 -100 0 0 2 1 0 0 -4 - 1 0 0 0 0 1 0 0 -3 - 1 0 200 0 -2 -1 0 1 197 - 1 0 0 0 -2 -1 2 1 -3 - 1 100 0 0 -2 -1 0 0 103 - 1 0 0 0 0 -1 0 1 -1 - 1 0 0 -100 1 0 0 0 1 - 1 0 -100 0 1 0 0 0 0 - 1 0 0 0 1 0 0 0 -1 - 1 0 -200 0 2 0 0 1 -4 - 1 0 0 0 2 0 0 1 -6 - 1 -100 0 0 2 0 0 1 -5 - 1 0 0 100 -1 0 0 0 98 - 1 0 100 0 -1 0 0 0 99 - 1 0 0 0 -1 0 1 0 -1 - 1 0 200 0 -2 0 0 1 194 - 1 0 0 0 -2 0 2 1 -6 - 1 50 0 0 -1 0 0 0 50 - 1 0 -1 1 0 0 0 0 -1 - 1 0 0 100 0 0 0 0 97 - 1 0 -200 200 0 0 0 1 192 - 1 0 0 200 0 0 0 1 190 - 1 -100 0 200 0 0 0 1 191 - 1 0 1 -1 0 0 0 0 1 - 1 0 0 -100 0 0 1 0 0 - 1 0 200 -200 0 0 0 1 196 - 1 0 0 -200 0 0 2 1 -4 - 1 50 0 -100 0 0 0 0 51 - 1 -100 200 0 0 0 0 2 189 - 1 -100 200 0 0 0 0 1 193 - 1 0 100 0 0 0 0 1 94 - 1 0 200 0 0 0 0 1 192 - 1 0 50 0 0 0 0 0 49 - 1 100 -200 0 0 0 0 1 96 - 1 0 -100 0 0 0 1 1 -5 - 1 0 -100 0 0 0 1 0 -100 - 1 0 -200 0 0 0 2 1 -204 - 1 50 -100 0 0 0 0 0 -49 - 1 50 0 0 0 0 0 0 49 - 1 100 0 0 0 0 0 1 94 - 1 100 0 0 0 0 0 3 284 - 1 50 0 0 0 0 0 1 45 - 1 -100 0 0 0 0 2 1 -7 - 1 -100 0 0 0 0 2 2 -11 - 1 -100 0 0 0 0 2 4 179 - 1 -100 0 0 0 0 2 3 -15 - 1 0 0 0 0 0 2 1 -8 - 1 0 0 0 0 0 2 3 -16 - 1 0 0 0 0 0 1 1 -6 - 1 0 0 0 0 0 0 1 -4 - 1 0 0 0 0 0 2 4 79 - 1 0 0 0 0 0 2 7 463 - 1 0 0 0 0 0 2 6 269 - 1 0 0 0 0 0 2 5 75 - 1 0 0 0 0 0 1 0 -2 - - -0 0 0 # for future options... - - -# 1 communication stmts: -1 # domains per statement -21 5 - 1 200 0 3 781 - 1 200 0 1 391 - 1 200 0 4 1075 - 1 100 0 1 392 - 1 100 0 0 197 - 1 -200 6 5 377 - 1 -200 6 6 671 - 1 -100 3 2 190 - 1 -200 6 3 -13 - 1 -100 3 1 -5 - 1 0 2 3 484 - 1 0 1 1 95 - 1 0 3 1 192 - 1 0 3 5 873 - 1 0 3 2 189 - 1 0 6 7 1062 - 1 0 6 5 771 - 1 0 3 4 579 - 1 0 0 1 -3 - 1 0 2 1 -5 - 1 0 1 0 -1 - - -0 0 0 # for future options... - - - -1 # set the iterator names -tileT1 tileP1 other1 other2 other3 other4 other5 - -# --------------------- SCATTERING -------------------- -4 # Scattering functions -9 17 - 0 1 0 -1 0 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 -2 -1 0 0 4 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -9 18 - 0 1 0 -1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 -2 -1 0 0 4 - 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 - -9 18 - 0 1 0 0 0 0 0 -1 0 0 -1 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 -2 -1 0 0 4 - 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 - -9 14 - 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 1 0 0 0 0 - - -1 # we set the scattering dimension names -glT1 bl rp1 vT1 vP1 stmtType otherP1 arrAcc1 arrNr1 - diff --git a/cloog-0.16.3/test/sor1d.good.c b/cloog-0.16.3/test/sor1d.good.c deleted file mode 100644 index bb5d643..0000000 --- a/cloog-0.16.3/test/sor1d.good.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/sor1d.cloog by CLooG 0.14.0-226-g3fc65ac gmp bits in 0.04s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(tileT1,tileP1,other1,other2) { hash(1); hash(tileT1); hash(tileP1); hash(other1); hash(other2); } -#define S2(tileT1,tileP1,other1,other2,other3) { hash(2); hash(tileT1); hash(tileP1); hash(other1); hash(other2); hash(other3); } -#define S3(tileT1,tileP1,other1,other2,other3) { hash(3); hash(tileT1); hash(tileP1); hash(other1); hash(other2); hash(other3); } -#define S4(tileT1) { hash(4); hash(tileT1); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int glT1, rp1, vT1, vP1, otherP1, arrAcc1; - /* Original iterators. */ - int tileT1, tileP1, other1, other2, other3; - if ((M >= 1) && (N >= 3)) { - for (glT1=-1;glT1<=floord(3*M+N-5,100);glT1++) { - for (rp1=max(max(0,ceild(100*glT1-2*M-N+5,100)),ceild(100*glT1-N-193,300));rp1<=min(min(min(min(floord(glT1+1,2),floord(M,100)),floord(100*glT1+99,100)),floord(50*glT1+51,150)),floord(100*glT1+N+98,300));rp1++) { - for (vT1=max(max(max(max(0,100*glT1-100*rp1),100*rp1-1),200*rp1-3),200*rp1-N+1);vT1<=min(min(2*M+N-5,100*glT1-100*rp1+99),200*rp1+N+193);vT1++) { - if (rp1 >= max(1,ceild(vT1-N+7,200))) { - S3(glT1-rp1,rp1-1,rp1,100*rp1-1,-200*rp1+vT1+6); - } - for (vP1=max(max(1,ceild(vT1-N+5,2)),100*rp1);vP1<=min(min(floord(vT1+2,2),M),100*rp1+99);vP1++) { - S1(glT1-rp1,rp1,vP1,vT1-2*vP1+4); - if ((rp1 <= min(floord(M-100,100),floord(vT1-197,200))) && (100*rp1 == vP1-99)) { - S2(glT1-rp1,rp1,rp1+1,100*rp1+99,-200*rp1+vT1-194); - } - } - } - } - S4(glT1); - } - } -} diff --git a/cloog-0.16.3/test/square+triangle-1-1-2-3.c b/cloog-0.16.3/test/square+triangle-1-1-2-3.c deleted file mode 100644 index c30b4e2..0000000 --- a/cloog-0.16.3/test/square+triangle-1-1-2-3.c +++ /dev/null @@ -1,14 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/square+triangle-1-1-2-3.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.00s. */ -for (j=1;j<=M;j++) { - S1(1,j); -} -for (i=2;i<=M;i++) { - S1(i,1); - for (j=2;j<=i;j++) { - S1(i,j); - S2(i,j); - } - for (j=i+1;j<=M;j++) { - S1(i,j); - } -} diff --git a/cloog-0.16.3/test/square+triangle-1-1-2-3.cloog b/cloog-0.16.3/test/square+triangle-1-1-2-3.cloog deleted file mode 100644 index ce8f547..0000000 --- a/cloog-0.16.3/test/square+triangle-1-1-2-3.cloog +++ /dev/null @@ -1,36 +0,0 @@ -# language: C -c - -# Context -# {M | M >= 1} -2 3 -# M 1 -1 1 -1 -1 0 1 -0 - -2 # Number of statements - -1 -# {i, j | 1<=i<=M; 1<=j<=M} -5 5 -# i j M 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 -1 -1 0 -1 1 0 -1 0 0 0 1 -0 0 0 - -1 -# {i, j | 2<=j<=i<=M} -4 5 -# i j M 1 -1 0 1 0 -2 -1 1 -1 0 0 -1 -1 0 1 0 -1 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/square+triangle-1-1-2-3.good.c b/cloog-0.16.3/test/square+triangle-1-1-2-3.good.c deleted file mode 100644 index ea68a7f..0000000 --- a/cloog-0.16.3/test/square+triangle-1-1-2-3.good.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Generated from ../../../git/cloog/test/square+triangle-1-1-2-3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - for (j=1;j<=M;j++) { - S1(1,j) ; - } - for (i=2;i<=M-1;i++) { - S1(i,1) ; - for (j=2;j<=i;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=i+1;j<=M;j++) { - S1(i,j) ; - } - } - if (M >= 2) { - S1(M,1) ; - for (j=2;j<=M;j++) { - S1(M,j) ; - S2(M,j) ; - } - } -} diff --git a/cloog-0.16.3/test/stride.c b/cloog-0.16.3/test/stride.c deleted file mode 100644 index d2cf8fe..0000000 --- a/cloog-0.16.3/test/stride.c +++ /dev/null @@ -1,9 +0,0 @@ -/* Generated from stride.cloog by CLooG 0.14.0-200-g26bdb56 gmp bits in 0.01s. */ -for (c1=3;c1<=100;c1++) { - if (c1 == 25) { - S1(25); - } - if (c1%3 == 0) { - S2(c1,c1/3); - } -} diff --git a/cloog-0.16.3/test/stride.cloog b/cloog-0.16.3/test/stride.cloog deleted file mode 100644 index 1526377..0000000 --- a/cloog-0.16.3/test/stride.cloog +++ /dev/null @@ -1,32 +0,0 @@ -c - -0 2 - -0 - -2 - -1 -1 3 -0 -1 25 --1 0 0 - -1 -3 4 -1 1 0 -3 -1 -1 0 100 -0 1 -3 0 -0 0 0 - -0 - -2 -2 5 -0 -1 0 1 0 -0 0 -1 0 0 - -2 6 -0 -1 0 1 0 0 -0 0 -1 0 1 0 - -0 diff --git a/cloog-0.16.3/test/stride.good.c b/cloog-0.16.3/test/stride.good.c deleted file mode 100644 index 7380723..0000000 --- a/cloog-0.16.3/test/stride.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from stride.cloog by CLooG 0.14.0-200-g26bdb56 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test() -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j; - for (c1=3;c1<=100;c1++) { - if (c1 == 25) { - S1(25); - } - if (c1%3 == 0) { - S2(c1,c1/3); - } - } -} diff --git a/cloog-0.16.3/test/stride2.c b/cloog-0.16.3/test/stride2.c deleted file mode 100644 index 320a2fb..0000000 --- a/cloog-0.16.3/test/stride2.c +++ /dev/null @@ -1,7 +0,0 @@ -/* Generated from stride2.cloog by CLooG 0.14.0-200-g26bdb56 gmp bits in 0.00s. */ -for (c1=3;c1<=100;c1+=3) { - if (c1 == 27) { - S1(27); - } - S2(c1,c1/3); -} diff --git a/cloog-0.16.3/test/stride2.cloog b/cloog-0.16.3/test/stride2.cloog deleted file mode 100644 index 72a597a..0000000 --- a/cloog-0.16.3/test/stride2.cloog +++ /dev/null @@ -1,32 +0,0 @@ -c - -0 2 - -0 - -2 - -1 -1 3 -0 -1 27 --1 0 0 - -1 -3 4 -1 1 0 -3 -1 -1 0 100 -0 1 -3 0 -0 0 0 - -0 - -2 -2 5 -0 -1 0 1 0 -0 0 -1 0 0 - -2 6 -0 -1 0 1 0 0 -0 0 -1 0 1 0 - -0 diff --git a/cloog-0.16.3/test/stride2.good.c b/cloog-0.16.3/test/stride2.good.c deleted file mode 100644 index 4cf8b60..0000000 --- a/cloog-0.16.3/test/stride2.good.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated from stride2.cloog by CLooG 0.14.0-200-g26bdb56 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test() -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j; - for (c1=3;c1<=100;c1+=3) { - if (c1 == 27) { - S1(27); - } - S2(c1,c1/3); - } -} diff --git a/cloog-0.16.3/test/stride3.c b/cloog-0.16.3/test/stride3.c deleted file mode 100644 index c228cb6..0000000 --- a/cloog-0.16.3/test/stride3.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/stride3.cloog by CLooG 0.14.0-291-g5879c32 gmp bits in 0.00s. */ -if ((m <= n) && (n >= 1)) { - for (p1=max(50,50*m);p1<=50*n;p1+=50) { - S1(p1/50); - } -} diff --git a/cloog-0.16.3/test/stride3.cloog b/cloog-0.16.3/test/stride3.cloog deleted file mode 100644 index bd5d6b0..0000000 --- a/cloog-0.16.3/test/stride3.cloog +++ /dev/null @@ -1,41 +0,0 @@ - - -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context (no constraints on two parameters) -1 4 # 1 lines and 4 columns -# eq/in m n 1 -1 0 0 0 # 0 >= 0, always true - -1 # We want to set manually the parameter names -m n # parameter names - -# --------------------- STATEMENTS -------------------- -1 # Number of statements - -1 # First statement: two domains -# First domain -3 5 # 3 lines and 5 columns -# eq/in i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 1 -1 0 0 # i >= m -# Second domain -0 0 0 # for future options - - -1 # We want to set manually the iterator names -i j # iterator names - -# --------------------- SCATTERING -------------------- -1 # Scattering functions -# First function -2 7 # 2 lines and 7 columns -# eq/in p1 p2 i m n 1 -0 1 0 -50 0 0 0 # p1 = i -0 0 1 0 0 0 0 # p2 = 0 - -1 # We want to set manually the scattering dimension names -p1 p2 # scattering dimension names - diff --git a/cloog-0.16.3/test/stride4.c b/cloog-0.16.3/test/stride4.c deleted file mode 100644 index 2e874be..0000000 --- a/cloog-0.16.3/test/stride4.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/stride4.cloog by CLooG 0.16.0-10-g13c6274 gmp bits in 0.00s. */ -if ((t >= 0) && (t <= 15)) { - for (i0=t;i0<=99;i0+=16) { - S1(i0,t); - } -} diff --git a/cloog-0.16.3/test/stride4.cloog b/cloog-0.16.3/test/stride4.cloog deleted file mode 100644 index 0271d97..0000000 --- a/cloog-0.16.3/test/stride4.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# Language: C -c - -# Context: -1 - -0 3 0 0 0 1 - -1 # Parameter name(s) -t -# Statement number: -1 - -# Iteration domain of statement 1. -1 - -6 6 2 0 1 1 -0 1 0 16 -1 0 -0 0 1 0 -1 0 -1 1 0 0 0 0 -1 -1 0 0 0 99 -1 0 0 0 1 0 -1 0 0 0 -1 15 - -0 0 0 # For future options. - - -1 # Iterator name(s) - -i0 i1 - -# No scattering functions. -0 diff --git a/cloog-0.16.3/test/swim.c b/cloog-0.16.3/test/swim.c deleted file mode 100644 index 0a0046a..0000000 --- a/cloog-0.16.3/test/swim.c +++ /dev/null @@ -1,672 +0,0 @@ -/* Generated from ../../../git/cloog/test/swim.cloog by CLooG 0.16.1-3-g277eafa gmp bits in 0.20s. */ -if (M == 1) { - S1(); - S2(); - S3(); - S4(); - S5(); - S6(); - S7(); - S8(); - S9(); - S10(); - S11(); - S12(); - S13(); - S14(); - S15(); - S16(); - S17(); - S18(); - S19(); - S20(); - S21(); - S22(); - S23(); - S24(); - S25(); - S26(); - S27(); - for (p1=1;p1<=N;p1++) { - for (p3=1;p3<=N;p3++) { - S28(p1,p3); - S29(p1,p3); - S30(p1,p3); - } - S31(p1); - } - S32(); - S33(); - S34(); - if (O <= 1) { - S35(); - } - S36(); - S37(); - if ((N >= 1) && (Q >= 1) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S40(p1,p3,p5); - S41(p1,p3,p5); - S42(p1,p3,p5); - S43(p1,p3,p5); - } - } - for (p3=1;p3<=Q;p3++) { - S44(p1,p3); - S45(p1,p3); - S46(p1,p3); - S47(p1,p3); - } - for (p3=1;p3<=R;p3++) { - S48(p1,p3); - S49(p1,p3); - S50(p1,p3); - S51(p1,p3); - } - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S59(p1,p3,p5); - S60(p1,p3,p5); - S61(p1,p3,p5); - } - } - for (p3=1;p3<=Q;p3++) { - S62(p1,p3); - S63(p1,p3); - S64(p1,p3); - } - for (p3=1;p3<=R;p3++) { - S65(p1,p3); - S66(p1,p3); - S67(p1,p3); - } - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5); - S96(p1,p3,p5); - S97(p1,p3,p5); - } - S98(p1,p3); - } - S99(p1); - S100(p1); - S101(p1); - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S102(p1,p3,p5); - S103(p1,p3,p5); - S104(p1,p3,p5); - S105(p1,p3,p5); - S106(p1,p3,p5); - S107(p1,p3,p5); - } - } - for (p3=1;p3<=Q;p3++) { - S108(p1,p3); - S109(p1,p3); - S110(p1,p3); - S111(p1,p3); - S112(p1,p3); - S113(p1,p3); - } - for (p3=1;p3<=R;p3++) { - S114(p1,p3); - S115(p1,p3); - S116(p1,p3); - S117(p1,p3); - S118(p1,p3); - S119(p1,p3); - } - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } - if ((N <= 0) && (Q >= 1) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S40(p1,p3,p5); - S41(p1,p3,p5); - S42(p1,p3,p5); - S43(p1,p3,p5); - } - } - for (p3=1;p3<=Q;p3++) { - S44(p1,p3); - S45(p1,p3); - S46(p1,p3); - S47(p1,p3); - } - for (p3=1;p3<=R;p3++) { - S48(p1,p3); - S49(p1,p3); - S50(p1,p3); - S51(p1,p3); - } - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S59(p1,p3,p5); - S60(p1,p3,p5); - S61(p1,p3,p5); - } - } - for (p3=1;p3<=Q;p3++) { - S62(p1,p3); - S63(p1,p3); - S64(p1,p3); - } - for (p3=1;p3<=R;p3++) { - S65(p1,p3); - S66(p1,p3); - S67(p1,p3); - } - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - S99(p1); - S100(p1); - S101(p1); - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S102(p1,p3,p5); - S103(p1,p3,p5); - S104(p1,p3,p5); - S105(p1,p3,p5); - S106(p1,p3,p5); - S107(p1,p3,p5); - } - } - for (p3=1;p3<=Q;p3++) { - S108(p1,p3); - S109(p1,p3); - S110(p1,p3); - S111(p1,p3); - S112(p1,p3); - S113(p1,p3); - } - for (p3=1;p3<=R;p3++) { - S114(p1,p3); - S115(p1,p3); - S116(p1,p3); - S117(p1,p3); - S118(p1,p3); - S119(p1,p3); - } - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } - if ((N >= 1) && (Q >= 1) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - for (p3=1;p3<=Q;p3++) { - S44(p1,p3); - S45(p1,p3); - S46(p1,p3); - S47(p1,p3); - } - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - for (p3=1;p3<=Q;p3++) { - S62(p1,p3); - S63(p1,p3); - S64(p1,p3); - } - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5); - S96(p1,p3,p5); - S97(p1,p3,p5); - } - S98(p1,p3); - } - S99(p1); - S100(p1); - S101(p1); - for (p3=1;p3<=Q;p3++) { - S108(p1,p3); - S109(p1,p3); - S110(p1,p3); - S111(p1,p3); - S112(p1,p3); - S113(p1,p3); - } - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } - if ((N <= 0) && (Q >= 1) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - for (p3=1;p3<=Q;p3++) { - S44(p1,p3); - S45(p1,p3); - S46(p1,p3); - S47(p1,p3); - } - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - for (p3=1;p3<=Q;p3++) { - S62(p1,p3); - S63(p1,p3); - S64(p1,p3); - } - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - S99(p1); - S100(p1); - S101(p1); - for (p3=1;p3<=Q;p3++) { - S108(p1,p3); - S109(p1,p3); - S110(p1,p3); - S111(p1,p3); - S112(p1,p3); - S113(p1,p3); - } - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } - if ((N >= 1) && (Q <= 0) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - for (p3=1;p3<=R;p3++) { - S48(p1,p3); - S49(p1,p3); - S50(p1,p3); - S51(p1,p3); - } - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - for (p3=1;p3<=R;p3++) { - S65(p1,p3); - S66(p1,p3); - S67(p1,p3); - } - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5); - S96(p1,p3,p5); - S97(p1,p3,p5); - } - S98(p1,p3); - } - S99(p1); - S100(p1); - S101(p1); - for (p3=1;p3<=R;p3++) { - S114(p1,p3); - S115(p1,p3); - S116(p1,p3); - S117(p1,p3); - S118(p1,p3); - S119(p1,p3); - } - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } - if ((N <= 0) && (Q <= 0) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - for (p3=1;p3<=R;p3++) { - S48(p1,p3); - S49(p1,p3); - S50(p1,p3); - S51(p1,p3); - } - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - for (p3=1;p3<=R;p3++) { - S65(p1,p3); - S66(p1,p3); - S67(p1,p3); - } - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - S99(p1); - S100(p1); - S101(p1); - for (p3=1;p3<=R;p3++) { - S114(p1,p3); - S115(p1,p3); - S116(p1,p3); - S117(p1,p3); - S118(p1,p3); - S119(p1,p3); - } - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } - if ((N >= 1) && (Q <= 0) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5); - S96(p1,p3,p5); - S97(p1,p3,p5); - } - S98(p1,p3); - } - S99(p1); - S100(p1); - S101(p1); - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } - if ((N <= 0) && (Q <= 0) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - S99(p1); - S100(p1); - S101(p1); - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } -} diff --git a/cloog-0.16.3/test/swim.cloog b/cloog-0.16.3/test/swim.cloog deleted file mode 100644 index 9216e46..0000000 --- a/cloog-0.16.3/test/swim.cloog +++ /dev/null @@ -1,2453 +0,0 @@ -c # language is C -# ---------- CONTEXT ---------- -# Context (no constraints on parameters) -1 8 # 1 lines, 8 columns -0 0 0 0 0 0 0 0 - -0 # Automatically find parameter names - -# ---------- STATEMENTS ---------- -125 # Number of statements - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -1 -1 -1 0 0 1 0 0 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -1 -1 -1 0 0 1 0 0 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -1 -1 -1 0 0 1 0 0 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -1 -1 -1 0 1 0 0 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -4 8 -1 0 0 -1 0 0 0 1 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 1 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 1 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 1 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -0 # Automatically find iterator names. - -# ---------- SCATTERING FUNCTIONS ---------- -125 # Number of scattering functions - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -2 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -4 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -5 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -6 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -7 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -8 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -9 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -10 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -11 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -12 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -13 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -14 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -15 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -16 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -17 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -18 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -19 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -20 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -21 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -22 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -23 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -24 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -25 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -26 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -27 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -27 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -27 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -27 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -28 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -29 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -30 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -31 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -32 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -33 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -2 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -3 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -3 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -4 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -4 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -4 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -4 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -3 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -5 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -6 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -7 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -8 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -9 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -10 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -11 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -12 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -12 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -12 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -2 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -13 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -13 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -13 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -14 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -14 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -14 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -15 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -16 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -17 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -18 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -19 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -20 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -21 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -22 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -23 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -24 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -25 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -26 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -27 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -28 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -29 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -30 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -31 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -32 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -33 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -35 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -36 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -37 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -38 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -39 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -40 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -41 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -42 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -42 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -42 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -2 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -42 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -43 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -44 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -45 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -46 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -46 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -46 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -2 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -46 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -3 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -46 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -4 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -46 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -5 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -47 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -47 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -47 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -47 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -3 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -47 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -4 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -47 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -5 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -48 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -48 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -48 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -48 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -3 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -48 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -4 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -48 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -5 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -49 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -50 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -51 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -52 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -53 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -54 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -1 # Set the scattering parameter names. -p0 p1 p2 p3 p4 p5 p6 - diff --git a/cloog-0.16.3/test/swim.good.c b/cloog-0.16.3/test/swim.good.c deleted file mode 100644 index 80f0de1..0000000 --- a/cloog-0.16.3/test/swim.good.c +++ /dev/null @@ -1,819 +0,0 @@ -/* Generated from ../../../git/cloog/test/swim.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.70s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } -#define S2() { hash(2); } -#define S3() { hash(3); } -#define S4() { hash(4); } -#define S5() { hash(5); } -#define S6() { hash(6); } -#define S7() { hash(7); } -#define S8() { hash(8); } -#define S9() { hash(9); } -#define S10() { hash(10); } -#define S11() { hash(11); } -#define S12() { hash(12); } -#define S13() { hash(13); } -#define S14() { hash(14); } -#define S15() { hash(15); } -#define S16() { hash(16); } -#define S17() { hash(17); } -#define S18() { hash(18); } -#define S19() { hash(19); } -#define S20() { hash(20); } -#define S21() { hash(21); } -#define S22() { hash(22); } -#define S23() { hash(23); } -#define S24() { hash(24); } -#define S25() { hash(25); } -#define S26() { hash(26); } -#define S27() { hash(27); } -#define S28(i,j) { hash(28); hash(i); hash(j); } -#define S29(i,j) { hash(29); hash(i); hash(j); } -#define S30(i,j) { hash(30); hash(i); hash(j); } -#define S31(i) { hash(31); hash(i); } -#define S32() { hash(32); } -#define S33() { hash(33); } -#define S34() { hash(34); } -#define S35() { hash(35); } -#define S36() { hash(36); } -#define S37() { hash(37); } -#define S38(i) { hash(38); hash(i); } -#define S39(i) { hash(39); hash(i); } -#define S40(i,j,k) { hash(40); hash(i); hash(j); hash(k); } -#define S41(i,j,k) { hash(41); hash(i); hash(j); hash(k); } -#define S42(i,j,k) { hash(42); hash(i); hash(j); hash(k); } -#define S43(i,j,k) { hash(43); hash(i); hash(j); hash(k); } -#define S44(i,j) { hash(44); hash(i); hash(j); } -#define S45(i,j) { hash(45); hash(i); hash(j); } -#define S46(i,j) { hash(46); hash(i); hash(j); } -#define S47(i,j) { hash(47); hash(i); hash(j); } -#define S48(i,j) { hash(48); hash(i); hash(j); } -#define S49(i,j) { hash(49); hash(i); hash(j); } -#define S50(i,j) { hash(50); hash(i); hash(j); } -#define S51(i,j) { hash(51); hash(i); hash(j); } -#define S52(i) { hash(52); hash(i); } -#define S53(i) { hash(53); hash(i); } -#define S54(i) { hash(54); hash(i); } -#define S55(i) { hash(55); hash(i); } -#define S56(i) { hash(56); hash(i); } -#define S57(i) { hash(57); hash(i); } -#define S58(i) { hash(58); hash(i); } -#define S59(i,j,k) { hash(59); hash(i); hash(j); hash(k); } -#define S60(i,j,k) { hash(60); hash(i); hash(j); hash(k); } -#define S61(i,j,k) { hash(61); hash(i); hash(j); hash(k); } -#define S62(i,j) { hash(62); hash(i); hash(j); } -#define S63(i,j) { hash(63); hash(i); hash(j); } -#define S64(i,j) { hash(64); hash(i); hash(j); } -#define S65(i,j) { hash(65); hash(i); hash(j); } -#define S66(i,j) { hash(66); hash(i); hash(j); } -#define S67(i,j) { hash(67); hash(i); hash(j); } -#define S68(i) { hash(68); hash(i); } -#define S69(i) { hash(69); hash(i); } -#define S70(i) { hash(70); hash(i); } -#define S71(i) { hash(71); hash(i); } -#define S72(i) { hash(72); hash(i); } -#define S73(i) { hash(73); hash(i); } -#define S74(i) { hash(74); hash(i); } -#define S75(i) { hash(75); hash(i); } -#define S76(i) { hash(76); hash(i); } -#define S77(i) { hash(77); hash(i); } -#define S78(i) { hash(78); hash(i); } -#define S79(i) { hash(79); hash(i); } -#define S80(i) { hash(80); hash(i); } -#define S81(i) { hash(81); hash(i); } -#define S82(i) { hash(82); hash(i); } -#define S83(i) { hash(83); hash(i); } -#define S84(i) { hash(84); hash(i); } -#define S85(i) { hash(85); hash(i); } -#define S86(i) { hash(86); hash(i); } -#define S87(i) { hash(87); hash(i); } -#define S88(i) { hash(88); hash(i); } -#define S89(i) { hash(89); hash(i); } -#define S90(i) { hash(90); hash(i); } -#define S91(i) { hash(91); hash(i); } -#define S92(i) { hash(92); hash(i); } -#define S93(i) { hash(93); hash(i); } -#define S94(i) { hash(94); hash(i); } -#define S95(i,j,k) { hash(95); hash(i); hash(j); hash(k); } -#define S96(i,j,k) { hash(96); hash(i); hash(j); hash(k); } -#define S97(i,j,k) { hash(97); hash(i); hash(j); hash(k); } -#define S98(i,j) { hash(98); hash(i); hash(j); } -#define S99(i) { hash(99); hash(i); } -#define S100(i) { hash(100); hash(i); } -#define S101(i) { hash(101); hash(i); } -#define S102(i,j,k) { hash(102); hash(i); hash(j); hash(k); } -#define S103(i,j,k) { hash(103); hash(i); hash(j); hash(k); } -#define S104(i,j,k) { hash(104); hash(i); hash(j); hash(k); } -#define S105(i,j,k) { hash(105); hash(i); hash(j); hash(k); } -#define S106(i,j,k) { hash(106); hash(i); hash(j); hash(k); } -#define S107(i,j,k) { hash(107); hash(i); hash(j); hash(k); } -#define S108(i,j) { hash(108); hash(i); hash(j); } -#define S109(i,j) { hash(109); hash(i); hash(j); } -#define S110(i,j) { hash(110); hash(i); hash(j); } -#define S111(i,j) { hash(111); hash(i); hash(j); } -#define S112(i,j) { hash(112); hash(i); hash(j); } -#define S113(i,j) { hash(113); hash(i); hash(j); } -#define S114(i,j) { hash(114); hash(i); hash(j); } -#define S115(i,j) { hash(115); hash(i); hash(j); } -#define S116(i,j) { hash(116); hash(i); hash(j); } -#define S117(i,j) { hash(117); hash(i); hash(j); } -#define S118(i,j) { hash(118); hash(i); hash(j); } -#define S119(i,j) { hash(119); hash(i); hash(j); } -#define S120(i) { hash(120); hash(i); } -#define S121(i) { hash(121); hash(i); } -#define S122(i) { hash(122); hash(i); } -#define S123(i) { hash(123); hash(i); } -#define S124(i) { hash(124); hash(i); } -#define S125(i) { hash(125); hash(i); } - -void test(int M, int N, int O, int P, int Q, int R) -{ - /* Scattering iterators. */ - int p1, p3, p5; - /* Original iterators. */ - int i, j, k; - if (M == 1) { - S1() ; - S2() ; - S3() ; - S4() ; - S5() ; - S6() ; - S7() ; - S8() ; - S9() ; - S10() ; - S11() ; - S12() ; - S13() ; - S14() ; - S15() ; - S16() ; - S17() ; - S18() ; - S19() ; - S20() ; - S21() ; - S22() ; - S23() ; - S24() ; - S25() ; - S26() ; - S27() ; - } - if (M == 1) { - for (p1=1;p1<=N;p1++) { - for (p3=1;p3<=N;p3++) { - S28(p1,p3) ; - S29(p1,p3) ; - S30(p1,p3) ; - } - S31(p1) ; - } - } - if (M == 1) { - S32() ; - S33() ; - S34() ; - } - if ((M == 1) && (O <= 1)) { - S35() ; - } - if (M == 1) { - S36() ; - S37() ; - } - if ((M == 1) && (N >= 1) && (Q >= 1) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S40(p1,p3,p5) ; - S41(p1,p3,p5) ; - S42(p1,p3,p5) ; - S43(p1,p3,p5) ; - } - } - for (p3=1;p3<=Q;p3++) { - S44(p1,p3) ; - S45(p1,p3) ; - S46(p1,p3) ; - S47(p1,p3) ; - } - for (p3=1;p3<=R;p3++) { - S48(p1,p3) ; - S49(p1,p3) ; - S50(p1,p3) ; - S51(p1,p3) ; - } - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S59(p1,p3,p5) ; - S60(p1,p3,p5) ; - S61(p1,p3,p5) ; - } - } - for (p3=1;p3<=Q;p3++) { - S62(p1,p3) ; - S63(p1,p3) ; - S64(p1,p3) ; - } - for (p3=1;p3<=R;p3++) { - S65(p1,p3) ; - S66(p1,p3) ; - S67(p1,p3) ; - } - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5) ; - S96(p1,p3,p5) ; - S97(p1,p3,p5) ; - } - S98(p1,p3) ; - } - S99(p1) ; - S100(p1) ; - S101(p1) ; - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S102(p1,p3,p5) ; - S103(p1,p3,p5) ; - S104(p1,p3,p5) ; - S105(p1,p3,p5) ; - S106(p1,p3,p5) ; - S107(p1,p3,p5) ; - } - } - for (p3=1;p3<=Q;p3++) { - S108(p1,p3) ; - S109(p1,p3) ; - S110(p1,p3) ; - S111(p1,p3) ; - S112(p1,p3) ; - S113(p1,p3) ; - } - for (p3=1;p3<=R;p3++) { - S114(p1,p3) ; - S115(p1,p3) ; - S116(p1,p3) ; - S117(p1,p3) ; - S118(p1,p3) ; - S119(p1,p3) ; - } - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } - if ((M == 1) && (N <= 0) && (Q >= 1) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S40(p1,p3,p5) ; - S41(p1,p3,p5) ; - S42(p1,p3,p5) ; - S43(p1,p3,p5) ; - } - } - for (p3=1;p3<=Q;p3++) { - S44(p1,p3) ; - S45(p1,p3) ; - S46(p1,p3) ; - S47(p1,p3) ; - } - for (p3=1;p3<=R;p3++) { - S48(p1,p3) ; - S49(p1,p3) ; - S50(p1,p3) ; - S51(p1,p3) ; - } - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S59(p1,p3,p5) ; - S60(p1,p3,p5) ; - S61(p1,p3,p5) ; - } - } - for (p3=1;p3<=Q;p3++) { - S62(p1,p3) ; - S63(p1,p3) ; - S64(p1,p3) ; - } - for (p3=1;p3<=R;p3++) { - S65(p1,p3) ; - S66(p1,p3) ; - S67(p1,p3) ; - } - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - S99(p1) ; - S100(p1) ; - S101(p1) ; - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S102(p1,p3,p5) ; - S103(p1,p3,p5) ; - S104(p1,p3,p5) ; - S105(p1,p3,p5) ; - S106(p1,p3,p5) ; - S107(p1,p3,p5) ; - } - } - for (p3=1;p3<=Q;p3++) { - S108(p1,p3) ; - S109(p1,p3) ; - S110(p1,p3) ; - S111(p1,p3) ; - S112(p1,p3) ; - S113(p1,p3) ; - } - for (p3=1;p3<=R;p3++) { - S114(p1,p3) ; - S115(p1,p3) ; - S116(p1,p3) ; - S117(p1,p3) ; - S118(p1,p3) ; - S119(p1,p3) ; - } - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } - if ((M == 1) && (N >= 1) && (Q <= 0) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - for (p3=1;p3<=R;p3++) { - S48(p1,p3) ; - S49(p1,p3) ; - S50(p1,p3) ; - S51(p1,p3) ; - } - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - for (p3=1;p3<=R;p3++) { - S65(p1,p3) ; - S66(p1,p3) ; - S67(p1,p3) ; - } - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5) ; - S96(p1,p3,p5) ; - S97(p1,p3,p5) ; - } - S98(p1,p3) ; - } - S99(p1) ; - S100(p1) ; - S101(p1) ; - for (p3=1;p3<=R;p3++) { - S114(p1,p3) ; - S115(p1,p3) ; - S116(p1,p3) ; - S117(p1,p3) ; - S118(p1,p3) ; - S119(p1,p3) ; - } - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } - if ((M == 1) && (N <= 0) && (Q <= 0) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - for (p3=1;p3<=R;p3++) { - S48(p1,p3) ; - S49(p1,p3) ; - S50(p1,p3) ; - S51(p1,p3) ; - } - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - for (p3=1;p3<=R;p3++) { - S65(p1,p3) ; - S66(p1,p3) ; - S67(p1,p3) ; - } - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - S99(p1) ; - S100(p1) ; - S101(p1) ; - for (p3=1;p3<=R;p3++) { - S114(p1,p3) ; - S115(p1,p3) ; - S116(p1,p3) ; - S117(p1,p3) ; - S118(p1,p3) ; - S119(p1,p3) ; - } - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } - if ((M == 1) && (N >= 1) && (Q <= 0) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5) ; - S96(p1,p3,p5) ; - S97(p1,p3,p5) ; - } - S98(p1,p3) ; - } - S99(p1) ; - S100(p1) ; - S101(p1) ; - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } - if ((M == 1) && (N <= 0) && (Q <= 0) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - S99(p1) ; - S100(p1) ; - S101(p1) ; - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } - if ((M == 1) && (N >= 1) && (Q >= 1) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - for (p3=1;p3<=Q;p3++) { - S44(p1,p3) ; - S45(p1,p3) ; - S46(p1,p3) ; - S47(p1,p3) ; - } - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - for (p3=1;p3<=Q;p3++) { - S62(p1,p3) ; - S63(p1,p3) ; - S64(p1,p3) ; - } - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5) ; - S96(p1,p3,p5) ; - S97(p1,p3,p5) ; - } - S98(p1,p3) ; - } - S99(p1) ; - S100(p1) ; - S101(p1) ; - for (p3=1;p3<=Q;p3++) { - S108(p1,p3) ; - S109(p1,p3) ; - S110(p1,p3) ; - S111(p1,p3) ; - S112(p1,p3) ; - S113(p1,p3) ; - } - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } - if ((M == 1) && (N <= 0) && (Q >= 1) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - for (p3=1;p3<=Q;p3++) { - S44(p1,p3) ; - S45(p1,p3) ; - S46(p1,p3) ; - S47(p1,p3) ; - } - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - for (p3=1;p3<=Q;p3++) { - S62(p1,p3) ; - S63(p1,p3) ; - S64(p1,p3) ; - } - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - S99(p1) ; - S100(p1) ; - S101(p1) ; - for (p3=1;p3<=Q;p3++) { - S108(p1,p3) ; - S109(p1,p3) ; - S110(p1,p3) ; - S111(p1,p3) ; - S112(p1,p3) ; - S113(p1,p3) ; - } - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } -} diff --git a/cloog-0.16.3/test/test.c b/cloog-0.16.3/test/test.c deleted file mode 100644 index a3d0711..0000000 --- a/cloog-0.16.3/test/test.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/test.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.01s. */ -for (i=1;i<=2;i++) { - for (j=1;j<=M;j++) { - S1(i,j); - } -} -for (i=3;i<=N;i++) { - for (j=1;j<=min(M,i-1);j++) { - S1(i,j); - } - if (i >= M+1) { - S2(i,i); - } - if (i <= M) { - S1(i,i); - S2(i,i); - } - for (j=i+1;j<=M;j++) { - S1(i,j); - } -} diff --git a/cloog-0.16.3/test/test.cloog b/cloog-0.16.3/test/test.cloog deleted file mode 100644 index 78bd336..0000000 --- a/cloog-0.16.3/test/test.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# language: C -c - -# parameters {m, n | 4<=m<=n} -2 4 -# m n 1 -1 -1 1 0 -1 1 0 -4 -0 - -2 # Number of statements - -1 -# {i, j | 1<=i<=n 1<=j<=m} -4 6 -# i j m n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 - -1 -# {i, j | i=j 3<=j<=N} -3 6 -# i j m n 1 -0 1 -1 0 0 0 -1 0 1 0 0 -3 -1 0 -1 0 1 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.16.3/test/test.good.c b/cloog-0.16.3/test/test.good.c deleted file mode 100644 index 3a786f8..0000000 --- a/cloog-0.16.3/test/test.good.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Generated from ../../../git/cloog/test/test.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - for (i=1;i<=2;i++) { - for (j=1;j<=M;j++) { - S1(i,j) ; - } - } - for (i=3;i<=M-1;i++) { - for (j=1;j<=i-1;j++) { - S1(i,j) ; - } - S1(i,i) ; - S2(i,i) ; - for (j=i+1;j<=M;j++) { - S1(i,j) ; - } - } - for (j=1;j<=M-1;j++) { - S1(M,j) ; - } - S1(M,M) ; - S2(M,M) ; - for (i=M+1;i<=N;i++) { - for (j=1;j<=M;j++) { - S1(i,j) ; - } - S2(i,i) ; - } -} diff --git a/cloog-0.16.3/test/thomasset.c b/cloog-0.16.3/test/thomasset.c deleted file mode 100644 index f201f6f..0000000 --- a/cloog-0.16.3/test/thomasset.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/thomasset.cloog by CLooG 0.14.0-292-g2bfd6ac gmp bits in 0.04s. */ -if (n >= 1) { - for (c1=0;c1<=floord(n-4,3);c1++) { - for (i=3*c1+1;i<=3*c1+3;i++) { - S1(i,c1); - } - } - c1 = floord(n-1,3); - if (c1 >= ceild(n-2,3)) { - if (c1 == 0) { - S1(1,0); - for (j=1;j<=n;j++) { - S2(1,j,0,0,0); - } - } - if (c1 >= 1) { - for (j=1;j<=2;j++) { - S2(1,j,0,c1,0); - } - } - for (i=max(2,3*c1+1);i<=n;i++) { - S1(i,c1); - } - } - if (3*c1 == n-3) { - for (i=n-2;i<=n;i++) { - if (n%3 == 0) { - S1(i,(n-3)/3); - } - } - } - if (c1 >= ceild(n-2,3)) { - for (c2=1;c2<=n-1;c2++) { - for (j=1;j<=2;j++) { - S2(c2+1,j,0,c1,0); - } - } - } - for (c1=ceild(n,3);c1<=floord(2*n,3);c1++) { - for (c2=0;c2<=n-1;c2++) { - for (j=max(1,3*c1-n);j<=min(n,3*c1-n+4);j++) { - p = max(ceild(3*c1-j,3),ceild(n-2,3)); - if (p <= min(floord(n,3),floord(3*c1-j+2,3))) { - S2(c2+1,j,0,p,c1-p); - } - } - } - } -} diff --git a/cloog-0.16.3/test/thomasset.cloog b/cloog-0.16.3/test/thomasset.cloog deleted file mode 100644 index 24c30eb..0000000 --- a/cloog-0.16.3/test/thomasset.cloog +++ /dev/null @@ -1,51 +0,0 @@ -# language: C -c -1 3 -1 0 0 # 0 >= 0 -1 -n - -# ------------- STATEMENTS ------------- -2 # Number of statements - -# ax:Z -1 # The domain is made of one polyhedron -4 5 # 4 lines and 5 columns -# i j n -1 -1 0 1 0 -1 1 0 0 -1 -1 1 -3 0 -1 -1 -1 3 0 3 -0 0 0 # future options - -# ax:P -1 # The domain is made of one polyhedron -10 8 # 10 lines and 8 columns -# i j k p q n -1 -1 0 0 0 0 1 0 -1 0 -1 0 0 0 1 0 -1 0 1 0 0 0 0 -1 -1 1 0 0 0 0 0 -1 -1 0 1 0 0 -3 0 0 -1 0 -1 0 0 3 0 2 -1 0 0 0 -3 0 1 0 -1 0 0 0 3 0 -1 2 -1 0 0 -3 0 0 0 1 -1 0 0 3 0 0 0 1 -0 0 0 # future options -1 # Iterator Names -i j k p q - -# ------------- SCATTERING ------------- -2 # nb scattering functions -# Scattering for ax:Z -2 7 # 2 lines and 7 columns -# c1 c2 i j n -0 1 0 0 -1 0 0 -0 0 1 0 0 0 0 -# Scattering for ax:P -2 10 # 2 lines and 10 columns -# c1 c2 i j k p q n -0 1 0 0 0 -1 -1 -1 0 0 -0 0 1 -1 0 0 0 0 0 1 -0 # Scattering Function Names diff --git a/cloog-0.16.3/test/thomasset.good.c b/cloog-0.16.3/test/thomasset.good.c deleted file mode 100644 index f9ca016..0000000 --- a/cloog-0.16.3/test/thomasset.good.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Generated from ../../../git/cloog/test/thomasset.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.10s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j,k,p,q) { hash(2); hash(i); hash(j); hash(k); hash(p); hash(q); } - -void test(int n) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j, k, p, q; - for (c1=0;c1<=floord(n-5,3);c1++) { - for (i=max(3*c1+1,1);i<=3*c1+3;i++) { - S1(i,c1) ; - } - } - if (n == 1) { - S1(1,0) ; - for (k=0;k<=min(0,0);k++) { - for (p=max(0,ceild(-3*k-1,3));p<=min(floord(-3*k+1,3),0);p++) { - q = -k-p ; - S2(1,1,k,p,-k-p) ; - } - } - } - if (n >= 2) { - for (c1=max(0,ceild(n-4,3));c1<=0;c1++) { - S1(1,c1) ; - for (j=1;j<=min(n,3*c1-n+5);j++) { - for (k=0;k<=floord(3*c1-j-n+4,3);k++) { - for (p=ceild(n-2,3);p<=floord(3*c1-j-3*k+2,3);p++) { - q = c1-k-p ; - S2(1,j,k,p,c1-k-p) ; - } - } - } - for (i=2;i<=min(n,3*c1+3);i++) { - S1(i,c1) ; - } - for (c2=1;c2<=n-1;c2++) { - i = c2+1 ; - for (j=1;j<=min(3*c1-n+5,n);j++) { - for (k=0;k<=floord(3*c1-j-n+4,3);k++) { - for (p=ceild(n-2,3);p<=floord(3*c1-j-3*k+2,3);p++) { - q = c1-k-p ; - S2(c2+1,j,k,p,c1-k-p) ; - } - } - } - } - } - } - for (c1=max(1,ceild(n-4,3));c1<=floord(n-1,3);c1++) { - for (j=1;j<=3*c1-n+5;j++) { - for (k=0;k<=min(floord(3*c1-j-n+4,3),0);k++) { - for (p=max(ceild(n-2,3),ceild(3*c1-j-3*k,3));p<=min(floord(3*c1-j-3*k+2,3),floord(n,3));p++) { - q = c1-k-p ; - S2(1,j,k,p,c1-k-p) ; - } - } - } - for (i=3*c1+1;i<=min(n,3*c1+3);i++) { - S1(i,c1) ; - } - for (c2=1;c2<=n-1;c2++) { - i = c2+1 ; - for (j=1;j<=3*c1-n+5;j++) { - for (k=0;k<=min(floord(3*c1-j-n+4,3),0);k++) { - for (p=max(ceild(n-2,3),ceild(3*c1-j-3*k,3));p<=min(floord(3*c1-j-3*k+2,3),floord(n,3));p++) { - q = c1-k-p ; - S2(c2+1,j,k,p,c1-k-p) ; - } - } - } - } - } - if (n >= 1) { - for (c1=ceild(n,3);c1<=floord(2*n+1,3);c1++) { - for (c2=0;c2<=n-1;c2++) { - i = c2+1 ; - for (j=max(1,3*c1-n-1);j<=min(n,3*c1-n+5);j++) { - for (k=max(ceild(3*c1-j-n,3),0);k<=min(floord(3*c1-j-n+4,3),0);k++) { - for (p=max(ceild(n-2,3),ceild(3*c1-j-3*k,3));p<=min(floord(3*c1-j-3*k+2,3),floord(n,3));p++) { - q = c1-k-p ; - S2(c2+1,j,k,p,c1-k-p) ; - } - } - } - } - } - } -} diff --git a/cloog-0.16.3/test/tiling.c b/cloog-0.16.3/test/tiling.c deleted file mode 100644 index 86f2a2e..0000000 --- a/cloog-0.16.3/test/tiling.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/tiling.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (ii=0;ii<=floord(n,10);ii++) { - for (i=10*ii;i<=min(n,10*ii+9);i++) { - S1(ii,i) ; - } -} diff --git a/cloog-0.16.3/test/tiling.cloog b/cloog-0.16.3/test/tiling.cloog deleted file mode 100644 index fa2b676..0000000 --- a/cloog-0.16.3/test/tiling.cloog +++ /dev/null @@ -1,30 +0,0 @@ -# language: C -c - -# parameter {n | n>= 0} -1 3 -# n 1 -1 1 0 -1 -n - -1 # Number of statements: - -1 -# {ii, i | t*ii<=i<=t*ii+t-1 0<=i<=n} -4 5 -# ii i n 1 -1 0 1 0 0 -1 0 -1 1 0 -1 10 -1 0 9 -1 -10 1 0 0 -0 0 0 -1 -ii i - -0 # Scattering functions - -1 6 -# c1 ii i n 1 -0 1 -1 -2 0 0 -0 diff --git a/cloog-0.16.3/test/tiling.good.c b/cloog-0.16.3/test/tiling.good.c deleted file mode 100644 index b736286..0000000 --- a/cloog-0.16.3/test/tiling.good.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/tiling.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(ii,i) { hash(1); hash(ii); hash(i); } - -void test(int n) -{ - /* Original iterators. */ - int ii, i; - for (ii=0;ii<=floord(n,10);ii++) { - for (i=max(10*ii,0);i<=min(10*ii+9,n);i++) { - S1(ii,i) ; - } - } -} diff --git a/cloog-0.16.3/test/uday_scalars.c b/cloog-0.16.3/test/uday_scalars.c deleted file mode 100644 index 6c8564c..0000000 --- a/cloog-0.16.3/test/uday_scalars.c +++ /dev/null @@ -1,9 +0,0 @@ -/* Generated from ../../../git/cloog/test/uday_scalars.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (n >= 0) { - for (p3=0;p3<=n;p3++) { - S1(p3,0,0) ; - } - for (p3=0;p3<=n;p3++) { - S2(0,p3,0) ; - } -} diff --git a/cloog-0.16.3/test/uday_scalars.cloog b/cloog-0.16.3/test/uday_scalars.cloog deleted file mode 100644 index 8da09d4..0000000 --- a/cloog-0.16.3/test/uday_scalars.cloog +++ /dev/null @@ -1,58 +0,0 @@ -# Langage: C -c - -# Context (1 parameter) -# no constraints on parameters: -1 3 - 1 0 1 -1 # Parameter name(s) -n - -# Statement number: -2 - -# Iteration domain of statement 1. -1 # 1 domain -4 6 # 4 lines and 6 columns -# j l m n cst - 1 1 0 0 0 0 # j >= 0 - 1 -1 0 0 1 0 # j <= N - 0 0 1 0 0 0 # l = 0 - 0 0 0 1 0 0 # m = 0 -0 0 0 # For future options. - -# Iteration domain of statement 2. -1 # 1 domain -4 6 # 4 lines and 6 columns -# j l m n cst - 1 0 1 0 0 0 # l >= 0 - 1 0 -1 0 1 0 # l <= N - 0 1 0 0 0 0 # j = 0 - 0 0 0 1 0 0 # m = 0 -0 0 0 # For future options. - - -1 # Iterator name(s) -j l m - -# 1 scattering functions. -2 -# First function -4 10 -# p1 p2 p3 p4 j l m n cst - 0 1 0 0 0 0 0 0 0 0 # p1 = 0 - 0 0 1 0 0 0 0 0 0 -1 # p2 = 1 - 0 0 0 1 0 -1 0 0 0 0 # p3 = j - 0 0 0 0 1 0 0 0 0 0 # p4 = 0 - -# Second function -4 10 -# p1 p2 p3 p4 j l m n cst - 0 1 0 0 0 0 0 0 0 -1 # p1 = 1 - 0 0 1 0 0 0 0 0 0 0 # p2 = 0 - 0 0 0 1 0 0 -1 0 0 0 # p3 = l - 0 0 0 0 1 0 0 0 0 -1 # p4 = 1 - -1 # set scattering dimension names manually -p1 p2 p3 p4 - diff --git a/cloog-0.16.3/test/uday_scalars.good.c b/cloog-0.16.3/test/uday_scalars.good.c deleted file mode 100644 index e4969da..0000000 --- a/cloog-0.16.3/test/uday_scalars.good.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated from ../../../git/cloog/test/uday_scalars.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(j,l,m) { hash(1); hash(j); hash(l); hash(m); } -#define S2(j,l,m) { hash(2); hash(j); hash(l); hash(m); } - -void test(int n) -{ - /* Scattering iterators. */ - int p3; - /* Original iterators. */ - int j, l, m; - for (p3=0;p3<=n;p3++) { - S1(p3,0,0) ; - } - for (p3=0;p3<=n;p3++) { - S2(0,p3,0) ; - } -} diff --git a/cloog-0.16.3/test/union.c b/cloog-0.16.3/test/union.c deleted file mode 100644 index f65b26f..0000000 --- a/cloog-0.16.3/test/union.c +++ /dev/null @@ -1,16 +0,0 @@ -/* Generated from ../../../git/cloog/test/union.cloog by CLooG 0.16.0-3-g7eee03c gmp bits in 0.00s. */ -if (M <= -1) { - for (c1=0;c1<=100;c1++) { - S1(c1); - } -} -if (M >= 11) { - for (c1=-100;c1<=0;c1++) { - S1(-c1); - } -} -if ((M >= 1) && (M <= 10)) { - for (c1=0;c1<=100;c1++) { - S1(c1); - } -} diff --git a/cloog-0.16.3/test/union.cloog b/cloog-0.16.3/test/union.cloog deleted file mode 100644 index 33e8425..0000000 --- a/cloog-0.16.3/test/union.cloog +++ /dev/null @@ -1,33 +0,0 @@ -c - -2 -1 3 -1 1 -1 - -1 3 -1 -1 -1 - -0 - -1 - -1 -2 4 -1 1 0 0 -1 -1 0 100 - -0 0 0 - -0 - -1 -2 -2 5 -0 -1 1 0 0 -1 0 0 -1 10 - -2 5 -0 -1 -1 0 0 -1 0 0 1 -11 - -0 diff --git a/cloog-0.16.3/test/union.good.c b/cloog-0.16.3/test/union.good.c deleted file mode 100644 index 70b4537..0000000 --- a/cloog-0.16.3/test/union.good.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Generated from ../../../git/cloog/test/union.cloog by CLooG 0.14.0-277-g62f7d82 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test(int M) -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i; - if (M <= -1) { - for (c1=0;c1<=100;c1++) { - S1(c1); - } - } - if (M >= 1) { - if (M >= 11) { - for (c1=-100;c1<=0;c1++) { - S1(-c1); - } - } - if (M <= 10) { - for (c1=0;c1<=100;c1++) { - S1(c1); - } - } - } -} diff --git a/cloog-0.16.3/test/vasilache.c b/cloog-0.16.3/test/vasilache.c deleted file mode 100644 index 5a00a33..0000000 --- a/cloog-0.16.3/test/vasilache.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/vasilache.cloog by CLooG 0.14.0-162-g1e599e0 gmp bits in 0.03s. */ -S1(); -S2(); -for (p1=0;p1<=N-1;p1++) { - for (p3=0;p3<=N-1;p3++) { - S4(p1,p3); - S5(p1,p3); - } -} -for (p1=0;p1<=N-1;p1++) { - for (p3=0;p3<=N-1;p3++) { - for (p5=0;p5<=floord(N-1,32);p5++) { - S7(p1,p3,p5,32*p5); - for (p7=32*p5+1;p7<=min(N-1,32*p5+31);p7++) { - S6(p1,p3,p5,p7-1); - S7(p1,p3,p5,p7); - } - if (p5 <= floord(N-33,32)) { - S6(p1,p3,p5,32*p5+31); - } - if (p5 >= ceild(N-32,32)) { - S6(p1,p3,p5,N-1); - } - } - } -} -S8(); diff --git a/cloog-0.16.3/test/vasilache.cloog b/cloog-0.16.3/test/vasilache.cloog deleted file mode 100644 index 29f9598..0000000 --- a/cloog-0.16.3/test/vasilache.cloog +++ /dev/null @@ -1,248 +0,0 @@ -# A SCoP from matmul (matmul.B.main.scop1.cloog) to check normalization -# -# Options: -# cloog -f 8 -l 9 vasilache.cloog -# -# Correct: -# S1; -# S2; -# for (p0=0;p0<=N-1;p0++) { -# for (p1=0;p1<=N-1;p1++) { -# S4(i = p0,j = p1); -# S5(i = p0,j = p1); -# } -# } -# for (p0=0;p0<=N-1;p0++) { -# for (p1=0;p1<=N-1;p1++) { -# for (p2=0;p2<=floord(N-1,32);p2++) { -# S7(i = p0,j = p1,k = p2,l = 32*p2); -# for (p3=32*p2+1;p3<=min(N-1,32*p2+31);p3++) { -# S6(i = p0,j = p1,k = p2,l = p3-1); -# S7(i = p0,j = p1,k = p2,l = p3); -# } -# if (p2 >= ceild(N-32,32)) { -# S6(i = p0,j = p1,k = p2,l = N-1); -# } -# if (p2 <= floord(N-33,32)) { -# S6(i = p0,j = p1,k = p2,l = 32*p2+31); -# } -# } -# } -# } -# S8; -# -# -# NOT correct: -# S1 ; -# S2 ; -# for (p1=0;p1<=N-1;p1++) { -# for (p3=0;p3<=N-1;p3++) { -# S4(i = p1,j = p3) ; -# S5(i = p1,j = p3) ; -# } -# } -# for (p1=0;p1<=N-1;p1++) { -# for (p3=0;p3<=N-1;p3++) { -# for (p5=0;p5<=floord(N-1,32);p5++) { -# if (p5 <= 0) { -# S7(i = p1,j = p3,k = p5,l = 0) ; -# } -# p7 = 32*p5 ; -# l = 32*p5 ; -# S7(i = p1,j = p3,k = p5) ; -# for (p7=max(32*p5+1,1);p7<=min(32*p5+31,N-1);p7++) { -# l = p7-1 ; -# S6(i = p1,j = p3,k = p5) ; -# S7(i = p1,j = p3,k = p5,l = p7) ; -# } -# if (p5 >= ceild(N-32,32)) { -# l = N-1 ; -# S6(i = p1,j = p3,k = p5) ; -# } -# p7 = 32*p5+32 ; -# l = 32*p5+31 ; -# S6(i = p1,j = p3,k = p5) ; -# } -# } -# } -# S8 ; - - - -c # language is C -# ---------- CONTEXT ---------- -# Context (constraints on parameters) -2 4 # 1 lines, 4 columns -1 -1 0 3 -1 0 1 -100 - - -0 # Automatically find parameter names - -# ---------- STATEMENTS ---------- -8 # Number of statements - -1 # Statement has a non resticted domain -1 4 -1 0 0 0 -0 0 0 - -1 # Statement has a non resticted domain -1 4 -1 0 0 0 -0 0 0 - -1 # Statement has 1 domain -1 4 -1 1 0 -79 -0 0 0 - -1 # Statement has 1 domain -4 6 -1 1 0 0 0 0 -1 -1 0 0 1 -1 -1 0 1 0 0 0 -1 0 -1 0 1 -1 -0 0 0 - -1 # Statement has 1 domain -4 6 -1 1 0 0 0 0 -1 -1 0 0 1 -1 -1 0 1 0 0 0 -1 0 -1 0 1 -1 -0 0 0 - -1 # Statement has 1 domain -8 8 -1 1 0 0 0 0 0 0 -1 -1 0 0 0 0 1 -1 -1 0 1 0 0 0 0 0 -1 0 -1 0 0 0 1 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 -32 1 0 0 0 -1 0 0 32 -1 0 0 31 -0 0 0 - -1 # Statement has 1 domain -8 8 -1 1 0 0 0 0 0 0 -1 -1 0 0 0 0 1 -1 -1 0 1 0 0 0 0 0 -1 0 -1 0 0 0 1 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 -32 1 0 0 0 -1 0 0 32 -1 0 0 31 -0 0 0 - -1 # Statement has a non resticted domain -1 4 -1 0 0 0 -0 0 0 - -0 # Automatically find iterator names. - -# ---------- SCATTERING FUNCTIONS ---------- -8 # Number of scattering functions - -9 13 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 # Beta 4 - -9 13 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 # Beta 4 - -9 13 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 # Beta 4 - -9 15 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 # Beta 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 # Beta 4 - -9 15 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 # Beta 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 # Beta 4 - -9 17 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4 # Beta 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 -1 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 4 - -9 17 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4 # Beta 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 # Beta 4 - -9 13 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 -5 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 # Beta 4 - -1 # Set the scattering parameter names. -p0 p1 p2 p3 p4 p5 p6 p7 p8 - diff --git a/cloog-0.16.3/test/vasilache.good.c b/cloog-0.16.3/test/vasilache.good.c deleted file mode 100644 index f12f3fa..0000000 --- a/cloog-0.16.3/test/vasilache.good.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Generated from ../../../git/cloog/test/vasilache.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.15s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } -#define S2() { hash(2); } -#define S3() { hash(3); } -#define S4(i,j) { hash(4); hash(i); hash(j); } -#define S5(i,j) { hash(5); hash(i); hash(j); } -#define S6(i,j,k,l) { hash(6); hash(i); hash(j); hash(k); hash(l); } -#define S7(i,j,k,l) { hash(7); hash(i); hash(j); hash(k); hash(l); } -#define S8() { hash(8); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int p1, p3, p5, p7; - /* Original iterators. */ - int i, j, k, l; - S1() ; - S2() ; - for (p1=0;p1<=N-1;p1++) { - for (p3=0;p3<=N-1;p3++) { - S4(p1,p3) ; - S5(p1,p3) ; - } - } - for (p1=0;p1<=N-1;p1++) { - for (p3=0;p3<=N-1;p3++) { - for (p5=0;p5<=floord(N-1,32);p5++) { - if (p5 >= 0) { - p7 = 32*p5 ; - l = 32*p5 ; - S7(p1,p3,p5,32*p5) ; - } - if (p5 <= -1) { - S7(p1,p3,p5,0) ; - } - for (p7=max(32*p5+1,1);p7<=min(N-1,32*p5+31);p7++) { - l = p7-1 ; - S6(p1,p3,p5,p7-1) ; - S7(p1,p3,p5,p7) ; - } - if (p5 >= ceild(N-32,32)) { - l = N-1 ; - S6(p1,p3,p5,N-1) ; - } - if (p5 <= floord(N-33,32)) { - p7 = 32*p5+32 ; - l = 32*p5+31 ; - S6(p1,p3,p5,32*p5+31) ; - } - } - } - } - S8() ; -} diff --git a/cloog-0.16.3/test/vivien.c b/cloog-0.16.3/test/vivien.c deleted file mode 100644 index d364046..0000000 --- a/cloog-0.16.3/test/vivien.c +++ /dev/null @@ -1,195 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/vivien.cloog by CLooG 0.14.0-292-g2bfd6ac gmp bits in 0.12s. */ -if (n >= 0) { - for (p1=-54*n+4;p1<=4;p1++) { - if (p1%2 == 0) { - S1((p1-2)/2); - } - } - if (n >= 1) { - S3(1); - } - if (n <= 1) { - S1(2); - } - if (n >= 2) { - S4(1,2); - S1(2); - S6(1,2); - } - for (p1=7;p1<=min(9,4*n-2);p1++) { - if (p1 == 8) { - S4(1,3); - } - if (p1 == 8) { - S1(3); - } - if (p1 == 8) { - S6(1,3); - } - if (p1 == 9) { - S3(2); - } - if ((p1+1)%2 == 0) { - S2((p1-3)/2,1); - } - } - for (p1=10;p1<=min(2*n+58,4*n-2);p1++) { - p2 = ceild(-p1+2,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+5,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - } - if (p1 >= 4*n-4) { - if (p1%2 == 0) { - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - p2 = ceild(-p1+6,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+9,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - for (p2=ceild(-p1+10,4);p2<=min(-1,floord(-p1+2*n,2));p2++) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - if (p1%2 == 0) { - S6(-p2+2,(p1+2*p2-4)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - if ((p1 >= 2*n+4) && (p1 <= 4*n-6)) { - if (p1%2 == 0) { - S6((p1-2*n+2)/2,n-1); - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - if (p1 >= 2*n+6) { - if (p1%2 == 0) { - S6((p1-2*n)/2,n); - } - } - if (p1 <= 2*n+4) { - if (p1%2 == 0) { - S6(2,(p1-4)/2); - } - if ((p1+3)%4 == 0) { - S3((p1-1)/4); - } - if (p1%2 == 0) { - S1((p1-2)/2); - } - } - if (p1 >= 2*n+5) { - if ((p1+3)%4 == 0) { - S3((p1-1)/4); - } - if (p1%2 == 0) { - S1((p1-2)/2); - } - } - if (p1 <= 2*n+2) { - if (p1%2 == 0) { - S6(1,(p1-2)/2); - } - } - for (p2=max(1,ceild(p1-2*n-1,2));p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - S2((p1-2*p2-1)/2,p2); - } - } - } - if ((n >= 2) && (n <= 29)) { - S2(n,n-1); - } - if ((n >= 2) && (n <= 29)) { - S1(2*n-1); - } - if ((n >= 2) && (n <= 28)) { - S3(n); - } - for (p1=max(7,4*n+2);p1<=2*n+58;p1++) { - if (p1%2 == 0) { - S1((p1-2)/2); - } - } - for (p1=2*n+59;p1<=4*n-2;p1++) { - p2 = ceild(-p1+2,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+5,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - } - if (p1 >= 4*n-4) { - if (p1%2 == 0) { - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - p2 = ceild(-p1+6,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+9,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - if (p1%2 == 0) { - S6(-p2+2,(p1+2*p2-4)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - if (p1 <= 4*n-6) { - if (p1%2 == 0) { - S6((p1-2*n+2)/2,n-1); - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - if (p1%2 == 0) { - S6((p1-2*n)/2,n); - } - if ((p1+3)%4 == 0) { - S3((p1-1)/4); - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - S2((p1-2*p2-1)/2,p2); - } - } - } - if (n >= 30) { - S2(n,n-1); - } - if (n >= 29) { - S3(n); - } -} diff --git a/cloog-0.16.3/test/vivien.cloog b/cloog-0.16.3/test/vivien.cloog deleted file mode 100644 index 3db4103..0000000 --- a/cloog-0.16.3/test/vivien.cloog +++ /dev/null @@ -1,156 +0,0 @@ -# Context -c # output in language C - -# no constraints on parameters -1 3 # 1 line and 3 columns - -# n 1 -1 0 0 # 0 >= 0 always true - -1 # Setting manually the parameter' sname -n # The name - - - -# -------------------- Statements ------------------ -6 # Number of statements - - -1 # First statement: 1 domain - -# First domain - -2 4 # 2 lines and 4 columns -# i n 1 -1 1 27 -1 # i >= 1 -1 -1 1 28 # n >= i -0 0 0 - -1 # Second statement: 1 domain - -# First domain - -4 5 # 4 lines and 5 columns -# i k n 1 -1 1 29 0 -1 # i >= 1 -1 -1 0 1 0 # n >= i -1 0 1 0 -1 # k >= 1 -1 1 -1 0 -1 # k <= i-1 -0 0 0 - - -1 # Third statement: 1 domain - -# First domain - -2 4 # 2 lines and 4 columns -# i n 1 -1 1 0 -1 # i >= 1 -1 -1 1 0 # n >= i -0 0 0 - - -1 # Fourth statement: 1 domain - -# First domain - -4 5 # 4 lines and 5 columns -# i j n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # n >= i -1 -1 1 0 -1 # j >= i+1 -1 0 -1 1 0 # j <= n -0 0 0 - -1 # Fifth statement: 1 domain - -# First domain - -6 6 # 6 lines and 6 columns -# i j k n 1 -1 1 0 0 0 -1 # i >= 1 -1 -1 0 0 1 0 # n >= i -1 -1 1 0 0 -1 # j >= i+1 -1 0 -1 0 1 0 # j <= n -1 0 0 1 0 -1 # k >= 1 -1 1 0 -1 0 -1 # k <= i-1 -0 0 0 - -1 # Sixth statement: 1 domain - -# First domain - -4 5 # 4 lines and 5 columns -# i j n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # n >= i -1 -1 1 0 -1 # j >= i+1 -1 0 -1 1 0 # j <= n -0 0 0 - - -1 # We manually set the iterator names -i j k - - -# ------------------------ Scattering ------------------- - -6 # Number of scattering functions - - -# First function -3 7 # 3 lines and 7 columns -# p1 p2 p3 i n 1 -0 1 0 0 -2 0 -2 # p1 = 2i+2 -0 0 1 0 0 0 0 # p2 = 0 -0 0 0 1 0 0 0 # p3 = 0 - -# Second function -3 8 # 3 lines and 8 columns -# p1 p2 p3 i j n 1 -0 1 0 0 -2 -2 0 -1 # p1 = 2i+2j+1 -0 0 1 0 0 -1 0 0 # p2 = j -0 0 0 1 0 0 0 0 # p3 = 0 - -# Third function -3 7 # 3 lines and 7 columns -# p1 p2 p3 i n 1 -0 1 0 0 -4 0 -1 # p1 = 4i+1 -0 0 1 0 0 0 0 # p2 = 0 -0 0 0 1 0 0 0 # p3 = 0 - -# Fourth function -3 8 # 3 lines and 8 columns -# p1 p2 p3 i j n 1 -0 1 0 0 -2 -2 0 0 # p1 = 2i+2j -0 0 1 0 1 0 0 0 # p2 = -i -0 0 0 1 0 0 0 0 # p3 = 0 - - -# Fifth function -3 9 # 3 lines and 9 columns -# p1 p2 p3 i j k n 1 -0 1 0 0 -2 -2 0 0 0 # p1 = 2i+2j -0 0 1 0 1 0 0 0 -1 # p2 = -i+1 -0 0 0 1 0 0 -1 0 0 # p3 = k - -# Sixth function -3 8 # 3 lines and 8 columns -# p1 p2 p3 i j n 1 -0 1 0 0 -2 -2 0 0 # p1 = 2i+2j -0 0 1 0 1 0 0 -2 # p2 = -i+2 -0 0 0 1 0 0 0 0 # p3 = 0 - -1 # Manually set the scattering dimensions -p1 p2 p3 - - - - - - - - - - - diff --git a/cloog-0.16.3/test/vivien.good.c b/cloog-0.16.3/test/vivien.good.c deleted file mode 100644 index 8d2c9d3..0000000 --- a/cloog-0.16.3/test/vivien.good.c +++ /dev/null @@ -1,831 +0,0 @@ -/* Generated from ../../../git/cloog/test/vivien.cloog by CLooG 0.14.0-76-gef19709 gmp bits in 0.78s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i) { hash(3); hash(i); } -#define S4(i,j) { hash(4); hash(i); hash(j); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } -#define S6(i,j) { hash(6); hash(i); hash(j); } - -void test(int n) -{ - /* Scattering iterators. */ - int p1, p2, p3; - /* Original iterators. */ - int i, j, k; - for (p1=-54*n+4;p1<=min(4,4*n+1);p1++) { - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - } - if (n >= 1) { - S3(1) ; - } - if (n >= 2) { - S4(1,2) ; - S1(2) ; - S6(1,2) ; - } - for (p1=max(-54*n+4,4*n+2);p1<=6;p1++) { - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - } - for (p1=7;p1<=min(min(2*n+2,9),floord(4*n+12,3));p1++) { - for (p2=ceild(-p1+2,4);p2<=-1;p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - if (p1%2 == 0) { - j = (p1-2)/2 ; - S6(1,(p1-2)/2) ; - } - if ((p1+1)%2 == 0) { - i = (p1-3)/2 ; - S2((p1-3)/2,1) ; - } - } - for (p1=2*n+3;p1<=min(9,4*n-2);p1++) { - for (p2=ceild(-p1+2,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - if (n >= 4) { - S4(2,3) ; - S4(1,4) ; - S5(2,3,1) ; - S6(2,3) ; - S1(4) ; - S6(1,4) ; - } - if (n == 3) { - S4(2,3) ; - S5(2,3,1) ; - S6(2,3) ; - S1(4) ; - } - for (p1=11;p1<=min(12,2*n+2);p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=-1;p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - if (p1%2 == 0) { - j = (p1-4)/2 ; - S6(2,(p1-4)/2) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - if (p1%2 == 0) { - j = (p1-2)/2 ; - S6(1,(p1-2)/2) ; - } - if ((p1+1)%2 == 0) { - i = (p1-3)/2 ; - S2((p1-3)/2,1) ; - } - for (p2=2;p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - if (n == 4) { - S2(4,1) ; - S2(3,2) ; - } - if (n == 5) { - S3(3) ; - S2(5,1) ; - S2(4,2) ; - } - if (n >= 6) { - S3(3) ; - S2(5,1) ; - S2(4,2) ; - } - if ((n <= 4) && (n >= 4)) { - p1 = 2*n+4 ; - for (p2=ceild(-n-1,2);p2<=-2;p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - } - for (p2=ceild(-n+1,2);p2<=-1;p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - S6(2,n) ; - i = n+1 ; - S1(n+1) ; - } - for (p1=14;p1<=2*n+2;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - p2 = floord(-p1+9,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+10,4);p2<=-1;p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - if (p1%2 == 0) { - j = (p1-4)/2 ; - S6(2,(p1-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - if (p1%2 == 0) { - j = (p1-2)/2 ; - S6(1,(p1-2)/2) ; - } - if ((p1+1)%2 == 0) { - i = (p1-3)/2 ; - S2((p1-3)/2,1) ; - } - for (p2=2;p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - if ((n <= 4) && (n >= 4)) { - S3(3) ; - for (p2=-n+6;p2<=2;p2++) { - i = -p2+6 ; - S2(-p2+6,p2) ; - } - } - if (n >= 7) { - p1 = 2*n+3 ; - if ((n+1)%2 == 0) { - i = (n+1)/2 ; - S3((n+1)/2) ; - } - S2(n,1) ; - for (p2=2;p2<=floord(n,2);p2++) { - i = -p2+n+1 ; - S2(-p2+n+1,p2) ; - } - } - if ((n <= 6) && (n >= 6)) { - p1 = 2*n+3 ; - if ((n+1)%2 == 0) { - i = (n+1)/2 ; - S3((n+1)/2) ; - } - S2(n,1) ; - for (p2=2;p2<=floord(n,2);p2++) { - i = -p2+n+1 ; - S2(-p2+n+1,p2) ; - } - } - if (n >= 7) { - p1 = 2*n+4 ; - for (p2=ceild(-n-1,2);p2<=floord(-2*n+1,4);p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - } - for (p2=ceild(-n+1,2);p2<=floord(-2*n+5,4);p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - for (p2=ceild(-n+3,2);p2<=-2;p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - i = -p2+2 ; - j = p2+n ; - S6(-p2+2,p2+n) ; - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - j = n-1 ; - S6(3,n-1) ; - S5(2,n,1) ; - S6(2,n) ; - i = n+1 ; - S1(n+1) ; - } - if ((n <= 5) && (n >= 5)) { - p1 = 2*n+4 ; - for (p2=ceild(-n-1,2);p2<=floord(-2*n+1,4);p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - } - for (p2=ceild(-n+1,2);p2<=-2;p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - for (p2=-1;p2<=floord(-2*n+5,4);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - for (p2=ceild(-n+3,2);p2<=-1;p2++) { - i = -p2+2 ; - j = p2+n ; - S6(-p2+2,p2+n) ; - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - S6(2,n) ; - i = n+1 ; - S1(n+1) ; - } - if ((n <= 6) && (n >= 6)) { - p1 = 2*n+4 ; - for (p2=ceild(-n-1,2);p2<=floord(-2*n+1,4);p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - } - for (p2=ceild(-n+1,2);p2<=-2;p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - j = n-1 ; - S6(3,n-1) ; - S5(2,n,1) ; - S6(2,n) ; - i = n+1 ; - S1(n+1) ; - } - for (p1=2*n+5;p1<=min(4*n-10,2*n+58);p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - p2 = floord(-p1+9,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+2*n+3,2);p2<=min(floord(-p1+2*n+4,2),-1);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-9,2*n+5);p1<=min(4*n-8,2*n+58);p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+2*n+3,2);p2<=min(floord(-p1+2*n+4,2),-1);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-7,2*n+5);p1<=min(4*n-6,2*n+58);p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+2*n+1,2);p2<=floord(-p1+9,4);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n+2,2);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+2*n+3,2);p2<=min(floord(-p1+2*n+4,2),-1);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(max(4*n-5,14),2*n+5);p1<=min(4*n-2,2*n+58);p1++) { - for (p2=ceild(-p1+2,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - } - for (p2=max(ceild(-p1+2*n+1,2),ceild(-p1+6,4));p2<=floord(-p1+2*n+2,2);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=max(ceild(-p1+10,4),ceild(-p1+2*n+3,2));p2<=min(floord(-p1+2*n+4,2),-1);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - if ((n >= 2) && (n <= 29)) { - p1 = 4*n-1 ; - p2 = n-1 ; - j = n-1 ; - S2(n,n-1) ; - } - for (p1=2*n+59;p1<=4*n-10;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - p2 = floord(-p1+9,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-9,2*n+59);p1<=4*n-8;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-7,2*n+59);p1<=4*n-6;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+2*n+1,2);p2<=floord(-p1+9,4);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n+2,2);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-5,2*n+59);p1<=4*n-2;p1++) { - for (p2=ceild(-p1+2,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - } - for (p2=max(ceild(-p1+2*n+1,2),ceild(-p1+6,4));p2<=floord(-p1+2*n+2,2);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=max(ceild(-p1+10,4),ceild(-p1+2*n+3,2));p2<=floord(-p1+2*n+4,2);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n,7);p1<=min(4*n+1,2*n+58);p1++) { - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - } - if (n >= 30) { - p1 = 4*n-1 ; - p2 = n-1 ; - j = n-1 ; - S2(n,n-1) ; - } - for (p1=max(max(-54*n+4,4*n+2),7);p1<=2*n+58;p1++) { - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - } - for (p1=max(4*n,2*n+59);p1<=4*n+1;p1++) { - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - } -} diff --git a/cloog-0.16.3/test/vivien2.c b/cloog-0.16.3/test/vivien2.c deleted file mode 100644 index d4f1f04..0000000 --- a/cloog-0.16.3/test/vivien2.c +++ /dev/null @@ -1,168 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/vivien2.cloog by CLooG 0.14.0-292-g2bfd6ac gmp bits in 0.10s. */ -for (p1=-54*n+4;p1<=4;p1++) { - if (p1%2 == 0) { - S1((p1-2)/2); - } -} -S3(1); -S4(1,2); -S1(2); -S6(1,2); -for (p1=7;p1<=9;p1++) { - if (p1 == 8) { - S4(1,3); - } - if (p1 == 8) { - S1(3); - } - if (p1 == 8) { - S6(1,3); - } - if (p1 == 9) { - S3(2); - } - if ((p1+1)%2 == 0) { - S2((p1-3)/2,1); - } -} -for (p1=10;p1<=2*n+58;p1++) { - p2 = ceild(-p1+2,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+5,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - } - if (p1 >= 4*n-4) { - if (p1%2 == 0) { - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - p2 = ceild(-p1+6,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+9,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - for (p2=ceild(-p1+10,4);p2<=min(-1,floord(-p1+2*n,2));p2++) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - if (p1%2 == 0) { - S6(-p2+2,(p1+2*p2-4)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - if ((p1 >= 2*n+4) && (p1 <= 4*n-6)) { - if (p1%2 == 0) { - S6((p1-2*n+2)/2,n-1); - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - if (p1 >= 2*n+6) { - if (p1%2 == 0) { - S6((p1-2*n)/2,n); - } - } - if (p1 <= 2*n+4) { - if (p1%2 == 0) { - S6(2,(p1-4)/2); - } - if ((p1+3)%4 == 0) { - S3((p1-1)/4); - } - if (p1%2 == 0) { - S1((p1-2)/2); - } - } - if (p1 >= 2*n+5) { - if ((p1+3)%4 == 0) { - S3((p1-1)/4); - } - if (p1%2 == 0) { - S1((p1-2)/2); - } - } - if (p1 <= 2*n+2) { - if (p1%2 == 0) { - S6(1,(p1-2)/2); - } - } - for (p2=max(1,ceild(p1-2*n-1,2));p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - S2((p1-2*p2-1)/2,p2); - } - } -} -for (p1=2*n+59;p1<=4*n-2;p1++) { - p2 = ceild(-p1+2,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+5,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - } - if (p1 >= 4*n-4) { - if (p1%2 == 0) { - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - p2 = ceild(-p1+6,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+9,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - if (p1%2 == 0) { - S6(-p2+2,(p1+2*p2-4)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - if (p1 <= 4*n-6) { - if (p1%2 == 0) { - S6((p1-2*n+2)/2,n-1); - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - if (p1%2 == 0) { - S6((p1-2*n)/2,n); - } - if ((p1+3)%4 == 0) { - S3((p1-1)/4); - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - S2((p1-2*p2-1)/2,p2); - } - } -} -S2(n,n-1); -S3(n); diff --git a/cloog-0.16.3/test/vivien2.cloog b/cloog-0.16.3/test/vivien2.cloog deleted file mode 100644 index 42e7fb7..0000000 --- a/cloog-0.16.3/test/vivien2.cloog +++ /dev/null @@ -1,156 +0,0 @@ -# Context -c # output in language C - -# no constraints on parameters -1 3 # 1 line and 3 columns - -# n 1 -1 1 -30 # 0 >= 0 always true - -1 # Setting manually the parameter' sname -n # The name - - - -# -------------------- Statements ------------------ -6 # Number of statements - - -1 # First statement: 1 domain - -# First domain - -2 4 # 2 lines and 4 columns -# i n 1 -1 1 27 -1 # i >= 1 -1 -1 1 28 # n >= i -0 0 0 - -1 # Second statement: 1 domain - -# First domain - -4 5 # 4 lines and 5 columns -# i k n 1 -1 1 29 0 -1 # i >= 1 -1 -1 0 1 0 # n >= i -1 0 1 0 -1 # k >= 1 -1 1 -1 0 -1 # k <= i-1 -0 0 0 - - -1 # Third statement: 1 domain - -# First domain - -2 4 # 2 lines and 4 columns -# i n 1 -1 1 0 -1 # i >= 1 -1 -1 1 0 # n >= i -0 0 0 - - -1 # Fourth statement: 1 domain - -# First domain - -4 5 # 4 lines and 5 columns -# i j n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # n >= i -1 -1 1 0 -1 # j >= i+1 -1 0 -1 1 0 # j <= n -0 0 0 - -1 # Fifth statement: 1 domain - -# First domain - -6 6 # 6 lines and 6 columns -# i j k n 1 -1 1 0 0 0 -1 # i >= 1 -1 -1 0 0 1 0 # n >= i -1 -1 1 0 0 -1 # j >= i+1 -1 0 -1 0 1 0 # j <= n -1 0 0 1 0 -1 # k >= 1 -1 1 0 -1 0 -1 # k <= i-1 -0 0 0 - -1 # Sixth statement: 1 domain - -# First domain - -4 5 # 4 lines and 5 columns -# i j n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # n >= i -1 -1 1 0 -1 # j >= i+1 -1 0 -1 1 0 # j <= n -0 0 0 - - -1 # We manually set the iterator names -i j k - - -# ------------------------ Scattering ------------------- - -6 # Number of scattering functions - - -# First function -3 7 # 3 lines and 7 columns -# p1 p2 p3 i n 1 -0 1 0 0 -2 0 -2 # p1 = 2i+2 -0 0 1 0 0 0 0 # p2 = 0 -0 0 0 1 0 0 0 # p3 = 0 - -# Second function -3 8 # 3 lines and 8 columns -# p1 p2 p3 i j n 1 -0 1 0 0 -2 -2 0 -1 # p1 = 2i+2j+1 -0 0 1 0 0 -1 0 0 # p2 = j -0 0 0 1 0 0 0 0 # p3 = 0 - -# Third function -3 7 # 3 lines and 7 columns -# p1 p2 p3 i n 1 -0 1 0 0 -4 0 -1 # p1 = 4i+1 -0 0 1 0 0 0 0 # p2 = 0 -0 0 0 1 0 0 0 # p3 = 0 - -# Fourth function -3 8 # 3 lines and 8 columns -# p1 p2 p3 i j n 1 -0 1 0 0 -2 -2 0 0 # p1 = 2i+2j -0 0 1 0 1 0 0 0 # p2 = -i -0 0 0 1 0 0 0 0 # p3 = 0 - - -# Fifth function -3 9 # 3 lines and 9 columns -# p1 p2 p3 i j k n 1 -0 1 0 0 -2 -2 0 0 0 # p1 = 2i+2j -0 0 1 0 1 0 0 0 -1 # p2 = -i+1 -0 0 0 1 0 0 -1 0 0 # p3 = k - -# Sixth function -3 8 # 3 lines and 8 columns -# p1 p2 p3 i j n 1 -0 1 0 0 -2 -2 0 0 # p1 = 2i+2j -0 0 1 0 1 0 0 -2 # p2 = -i+2 -0 0 0 1 0 0 0 0 # p3 = 0 - -1 # Manually set the scattering dimensions -p1 p2 p3 - - - - - - - - - - - diff --git a/cloog-0.16.3/test/vivien2.good.c b/cloog-0.16.3/test/vivien2.good.c deleted file mode 100644 index 32f1fff..0000000 --- a/cloog-0.16.3/test/vivien2.good.c +++ /dev/null @@ -1,656 +0,0 @@ -/* Generated from ../../../git/cloog/test/vivien2.cloog by CLooG 0.14.0-76-gef19709 gmp bits in 0.58s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i) { hash(3); hash(i); } -#define S4(i,j) { hash(4); hash(i); hash(j); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } -#define S6(i,j) { hash(6); hash(i); hash(j); } - -void test(int n) -{ - /* Scattering iterators. */ - int p1, p2, p3; - /* Original iterators. */ - int i, j, k; - for (p1=-54*n+4;p1<=4;p1++) { - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - } - S3(1) ; - S4(1,2) ; - S1(2) ; - S6(1,2) ; - for (p1=7;p1<=9;p1++) { - for (p2=ceild(-p1+2,4);p2<=-1;p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - if (p1%2 == 0) { - j = (p1-2)/2 ; - S6(1,(p1-2)/2) ; - } - if ((p1+1)%2 == 0) { - i = (p1-3)/2 ; - S2((p1-3)/2,1) ; - } - } - S4(2,3) ; - S4(1,4) ; - S5(2,3,1) ; - S6(2,3) ; - S1(4) ; - S6(1,4) ; - for (p1=11;p1<=12;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=-1;p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - if (p1%2 == 0) { - j = (p1-4)/2 ; - S6(2,(p1-4)/2) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - if (p1%2 == 0) { - j = (p1-2)/2 ; - S6(1,(p1-2)/2) ; - } - if ((p1+1)%2 == 0) { - i = (p1-3)/2 ; - S2((p1-3)/2,1) ; - } - for (p2=2;p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - S3(3) ; - S2(5,1) ; - S2(4,2) ; - for (p1=14;p1<=2*n+2;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - p2 = floord(-p1+9,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+10,4);p2<=-1;p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - if (p1%2 == 0) { - j = (p1-4)/2 ; - S6(2,(p1-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - if (p1%2 == 0) { - j = (p1-2)/2 ; - S6(1,(p1-2)/2) ; - } - if ((p1+1)%2 == 0) { - i = (p1-3)/2 ; - S2((p1-3)/2,1) ; - } - for (p2=2;p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - p1 = 2*n+3 ; - if ((n+1)%2 == 0) { - i = (n+1)/2 ; - S3((n+1)/2) ; - } - S2(n,1) ; - for (p2=2;p2<=floord(n,2);p2++) { - i = -p2+n+1 ; - S2(-p2+n+1,p2) ; - } - p1 = 2*n+4 ; - for (p2=ceild(-n-1,2);p2<=floord(-2*n+1,4);p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - } - for (p2=ceild(-n+1,2);p2<=floord(-2*n+5,4);p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - for (p2=ceild(-n+3,2);p2<=-2;p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - i = -p2+2 ; - j = p2+n ; - S6(-p2+2,p2+n) ; - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - j = n-1 ; - S6(3,n-1) ; - S5(2,n,1) ; - S6(2,n) ; - i = n+1 ; - S1(n+1) ; - for (p1=2*n+5;p1<=min(4*n-10,2*n+58);p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - p2 = floord(-p1+9,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+2*n+3,2);p2<=min(floord(-p1+2*n+4,2),-1);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=4*n-9;p1<=min(4*n-8,2*n+58);p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=4*n-7;p1<=min(4*n-6,2*n+58);p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+2*n+1,2);p2<=floord(-p1+9,4);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n+2,2);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=4*n-5;p1<=2*n+58;p1++) { - for (p2=ceild(-p1+2,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - } - for (p2=max(ceild(-p1+2*n+1,2),ceild(-p1+6,4));p2<=floord(-p1+2*n+2,2);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=max(ceild(-p1+2*n+3,2),ceild(-p1+10,4));p2<=floord(-p1+2*n+4,2);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=2*n+59;p1<=4*n-10;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - p2 = floord(-p1+9,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-9,2*n+59);p1<=4*n-8;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-7,2*n+59);p1<=4*n-6;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+2*n+1,2);p2<=floord(-p1+9,4);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n+2,2);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-5,2*n+59);p1<=4*n-2;p1++) { - for (p2=ceild(-p1+2,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - } - for (p2=max(ceild(-p1+2*n+1,2),ceild(-p1+6,4));p2<=floord(-p1+2*n+2,2);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=max(ceild(-p1+10,4),ceild(-p1+2*n+3,2));p2<=floord(-p1+2*n+4,2);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - p1 = 4*n-1 ; - p2 = n-1 ; - j = n-1 ; - S2(n,n-1) ; - for (p1=4*n;p1<=4*n+1;p1++) { - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - } -} diff --git a/cloog-0.16.3/test/walters.c b/cloog-0.16.3/test/walters.c deleted file mode 100644 index fdb2183..0000000 --- a/cloog-0.16.3/test/walters.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/walters.cloog by CLooG 0.16.1-3-g354eed5 gmp bits in 0.01s. */ -S2(1,0,1,0); -S4(1,0,1,0); -S3(2,0,1,1); -S4(2,0,1,1); -for (i=3;i<=10;i++) { - if ((i+1)%3 == 0) { - S3(i,(i-2)/3,(i+1)/3,(i+1)/3); - } - if ((i+2)%3 == 0) { - S2(i,(i-1)/3,(i+2)/3,(i-1)/3); - } - if (i%3 == 0) { - S1(i,i/3,i/3,i/3); - } - div36 = floord(i,3); - div37 = ceild(2*i-3*div36-1,3); - if (div37 <= floord(i+2,3)) { - S4(i,div36,div37,i-div36-div37); - } -} diff --git a/cloog-0.16.3/test/walters.cloog b/cloog-0.16.3/test/walters.cloog deleted file mode 100644 index 9a3ba81..0000000 --- a/cloog-0.16.3/test/walters.cloog +++ /dev/null @@ -1,189 +0,0 @@ -# language: C - -c - - - -# parameters - -1 2 - -1 1 - - 1 - - - -4 - - - -# S1: sub1 - -1 - -18 6 - - 1 1 0 0 0 -1 - - 1 -1 0 0 0 10 - - 1 -1 3 0 0 2 - - 1 1 -3 0 0 0 - - 1 0 1 0 0 -1 - - 1 -1 3 0 0 0 - - 1 1 0 -3 0 2 - - 1 -1 0 3 0 0 - - 1 1 0 0 -3 1 - - 1 -1 0 0 3 1 - - 1 1 0 0 0 -1 - - 1 -1 0 0 0 10 - - 1 1 -3 0 0 0 - - 1 -1 3 0 0 2 - - 1 1 0 -3 0 2 - - 1 -1 0 3 0 0 - - 1 1 0 0 -3 1 - - 1 -1 0 0 3 1 - - 0 0 0 - - - -# S2: sub2 - -1 - -17 6 - - 1 1 0 0 0 -1 - - 1 -1 0 0 0 10 - - 1 -1 0 3 0 0 - - 1 1 0 -3 0 2 - - 1 -1 0 3 0 -2 - - 1 1 -3 0 0 0 - - 1 -1 3 0 0 2 - - 1 1 0 0 -3 1 - - 1 -1 0 0 3 1 - - 1 1 0 0 0 -1 - - 1 -1 0 0 0 10 - - 1 1 -3 0 0 0 - - 1 -1 3 0 0 2 - - 1 1 0 -3 0 2 - - 1 -1 0 3 0 0 - - 1 1 0 0 -3 1 - - 1 -1 0 0 3 1 - - 0 0 0 - - - -# S3: sub3 - -1 - -18 6 - - 1 -1 0 0 0 10 - - 1 1 0 0 0 -1 - - 1 -1 0 0 3 1 - - 1 1 0 0 -3 1 - - 1 0 0 0 1 -1 - - 1 -1 0 0 3 -1 - - 1 1 -3 0 0 0 - - 1 -1 3 0 0 2 - - 1 1 0 -3 0 2 - - 1 -1 0 3 0 0 - - 1 1 0 0 0 -1 - - 1 -1 0 0 0 10 - - 1 1 -3 0 0 0 - - 1 -1 3 0 0 2 - - 1 1 0 -3 0 2 - - 1 -1 0 3 0 0 - - 1 1 0 0 -3 1 - - 1 -1 0 0 3 1 - - 0 0 0 - - - -# S4: enclosing - -1 - -8 6 - - 1 1 0 0 0 -1 - - 1 -1 0 0 0 10 - - 1 1 -3 0 0 0 - - 1 -1 3 0 0 2 - - 1 1 0 -3 0 2 - - 1 -1 0 3 0 0 - - 1 1 0 0 -3 1 - - 1 -1 0 0 3 1 - - 0 0 0 - - - - 1 - - i div36 div37 div38 - - 0 - - 0 diff --git a/cloog-0.16.3/test/walters.good.c b/cloog-0.16.3/test/walters.good.c deleted file mode 100644 index 0e1c2b7..0000000 --- a/cloog-0.16.3/test/walters.good.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/walters.cloog by CLooG 0.14.0-223-gad1f0a0 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,div36,div37,div38) { hash(1); hash(i); hash(div36); hash(div37); hash(div38); } -#define S2(i,div36,div37,div38) { hash(2); hash(i); hash(div36); hash(div37); hash(div38); } -#define S3(i,div36,div37,div38) { hash(3); hash(i); hash(div36); hash(div37); hash(div38); } -#define S4(i,div36,div37,div38) { hash(4); hash(i); hash(div36); hash(div37); hash(div38); } - -void test() -{ - /* Original iterators. */ - int i, div36, div37, div38; - S2(1,0,1,0); - S4(1,0,1,0); - S3(2,0,1,1); - S4(2,0,1,1); - for (i=3;i<=10;i++) { - if ((i+2)%3 <= 1) { - div36 = floord(i-1,3); - if ((i+1)%3 <= 1) { - div37 = floord(i+1,3); - if ((i+1)%3 == 0) { - S3(i,div36,div37,(i+1)/3); - S4(i,div36,div37,(i+1)/3); - } - } - if ((i+2)%3 == 0) { - div38 = floord(i+1,3); - S2(i,div36,(i+2)/3,div38); - S4(i,div36,(i+2)/3,div38); - } - } - if (i%3 == 0) { - div37 = floord(i+2,3); - div38 = floord(i+1,3); - S1(i,i/3,div37,div38); - S4(i,i/3,div37,div38); - } - } -} diff --git a/cloog-0.16.3/test/walters2.c b/cloog-0.16.3/test/walters2.c deleted file mode 100644 index bc31d9e..0000000 --- a/cloog-0.16.3/test/walters2.c +++ /dev/null @@ -1,14 +0,0 @@ -/* Generated from ../../../git/cloog/test/walters2.cloog by CLooG 0.14.0-245-gd8c1718 gmp bits in 0.01s. */ -for (i=0;i<=51;i++) { - S2(0,i); -} -for (j=1;j<=24;j++) { - S2(j,0); - for (i=1;i<=50;i++) { - S1(j,i); - } - S2(j,51); -} -for (i=0;i<=51;i++) { - S2(25,i); -} diff --git a/cloog-0.16.3/test/walters2.cloog b/cloog-0.16.3/test/walters2.cloog deleted file mode 100644 index efdf2f6..0000000 --- a/cloog-0.16.3/test/walters2.cloog +++ /dev/null @@ -1,90 +0,0 @@ -# language: C -c - -# parameters -1 2 -1 1 - 1 - -2 - - -# S1 -1 -12 4 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 - 1 1 0 -1 - 1 0 1 -1 - 1 -1 0 24 - 1 0 -1 50 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 - 0 0 0 - - - - - - -# S2 -4 -11 4 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 - 1 1 0 -1 - 1 0 1 -1 - 1 1 0 -25 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 -12 4 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 - 1 1 0 -1 - 1 0 1 -1 - 1 -1 0 24 - 1 0 1 -51 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 -10 4 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 - 1 1 0 -1 - 1 0 -1 0 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 -9 4 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 - 1 -1 0 0 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 - 0 0 0 - - - - 1 - j i - 0 - 0 - diff --git a/cloog-0.16.3/test/walters2.good.c b/cloog-0.16.3/test/walters2.good.c deleted file mode 100644 index 2b8990f..0000000 --- a/cloog-0.16.3/test/walters2.good.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/walters2.cloog by CLooG 0.14.0-227-g08f253a gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(j,i) { hash(1); hash(j); hash(i); } -#define S2(j,i) { hash(2); hash(j); hash(i); } - -void test() -{ - /* Original iterators. */ - int j, i; - for (i=0;i<=51;i++) { - S2(0,i); - } - for (j=1;j<=24;j++) { - S2(j,0); - for (i=1;i<=50;i++) { - S1(j,i); - } - S2(j,51); - } - for (i=0;i<=51;i++) { - if (i >= 0) { - S2(25,i); - } - } -} diff --git a/cloog-0.16.3/test/walters3.c b/cloog-0.16.3/test/walters3.c deleted file mode 100644 index fc922d6..0000000 --- a/cloog-0.16.3/test/walters3.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/walters3.cloog by CLooG 0.14.0-338-g99c7504 gmp bits in 0.00s. */ -for (j=2;j<=8;j++) { - if (j%2 == 0) { - S1(j,j/2,j/2); - S2(j,j/2,j/2); - } -} -S2(10,5,5); diff --git a/cloog-0.16.3/test/walters3.cloog b/cloog-0.16.3/test/walters3.cloog deleted file mode 100644 index fb45ab0..0000000 --- a/cloog-0.16.3/test/walters3.cloog +++ /dev/null @@ -1,49 +0,0 @@ -# language: C -c - -# parameters -1 2 -1 1 - 1 - - -2 - -1 -15 5 - 1 -1 0 0 10 - 1 -1 0 0 8 - 1 -1 0 2 1 - 1 1 0 -2 0 - 1 -1 0 2 0 - 1 0 0 1 -1 - 1 1 -2 0 0 - 1 -1 2 0 1 - 1 1 0 0 -1 - 1 -1 0 0 10 - 0 1 -2 0 0 - 1 1 -2 0 0 - 1 -1 2 0 1 - 1 1 0 -2 0 - 1 -1 0 2 1 - 0 0 0 - - - -1 -7 5 - 1 1 0 0 -1 - 1 -1 0 0 10 - 0 1 -2 0 0 - 1 1 -2 0 0 - 1 -1 2 0 1 - 1 1 0 -2 0 - 1 -1 0 2 1 - 0 0 0 - - - 1 - j a b - #-------- SCATTERING ------------- - 0 # no scattering function - diff --git a/cloog-0.16.3/test/walters3.good.c b/cloog-0.16.3/test/walters3.good.c deleted file mode 100644 index 45a1b33..0000000 --- a/cloog-0.16.3/test/walters3.good.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Generated from ../../../git/cloog/test/walters3.cloog by CLooG 0.14.0-338-g99c7504 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(j,a,b) { hash(1); hash(j); hash(a); hash(b); } -#define S2(j,a,b) { hash(2); hash(j); hash(a); hash(b); } - -void test() -{ - /* Original iterators. */ - int j, a, b; - for (j=2;j<=8;j++) { - if (j%2 == 0) { - S1(j,j/2,j/2); - S2(j,j/2,j/2); - } - } - S2(10,5,5); -} diff --git a/cloog-0.16.3/test/wavefront.c b/cloog-0.16.3/test/wavefront.c deleted file mode 100644 index c6d2868..0000000 --- a/cloog-0.16.3/test/wavefront.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/wavefront.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if ((m >= 1) && (n >= 1)) { - for (c1=2;c1<=n+m;c1++) { - for (c2=max(1,c1-m);c2<=min(n,c1-1);c2++) { - S1(c2,c1-c2) ; - } - } -} diff --git a/cloog-0.16.3/test/wavefront.cloog b/cloog-0.16.3/test/wavefront.cloog deleted file mode 100644 index 845b368..0000000 --- a/cloog-0.16.3/test/wavefront.cloog +++ /dev/null @@ -1,27 +0,0 @@ -c - -1 4 -# n m 1 -1 0 0 1 -1 -n m - -1 - -1 -4 6 -# i j n m 1 -1 1 0 0 0 -1 -1 -1 0 1 0 0 -1 0 1 0 0 -1 -1 0 -1 0 1 0 -0 0 0 - -0 - -1 -2 8 -# c1 c2 i j n m 1 -0 1 0 -1 -1 0 0 0 -0 0 1 -1 0 0 0 0 -0 diff --git a/cloog-0.16.3/test/wavefront.good.c b/cloog-0.16.3/test/wavefront.good.c deleted file mode 100644 index c6e721f..0000000 --- a/cloog-0.16.3/test/wavefront.good.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Generated from ../../../git/cloog/test/wavefront.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int n, int m) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j; - if ((n >= 1) && (m >= 1)) { - for (c1=2;c1<=n+m;c1++) { - for (c2=max(1,c1-m);c2<=min(n,c1-1);c2++) { - j = c1-c2 ; - S1(c2,c1-c2) ; - } - } - } -} diff --git a/cloog-0.16.3/test/yosr.c b/cloog-0.16.3/test/yosr.c deleted file mode 100644 index 341c787..0000000 --- a/cloog-0.16.3/test/yosr.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/yosr.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (n >= 2) { - for (j=2;j<=n;j++) { - S1(1,j) ; - } - for (proc=2;proc<=n-1;proc++) { - for (i=1;i<=proc-1;i++) { - for (j=i+1;j<=n;j++) { - S2(i,j,proc) ; - } - } - for (j=proc+1;j<=n;j++) { - S1(proc,j) ; - } - } - for (i=1;i<=n-1;i++) { - for (j=i+1;j<=n;j++) { - S2(i,j,n) ; - } - } -} diff --git a/cloog-0.16.3/test/yosr.cloog b/cloog-0.16.3/test/yosr.cloog deleted file mode 100644 index cefa035..0000000 --- a/cloog-0.16.3/test/yosr.cloog +++ /dev/null @@ -1,65 +0,0 @@ -# language: C -c - -# One parameter : n -1 3 -# n 1 -1 0 1 -# We want to set the parameter names... -1 -# and 'n' is the name of the unique parameter -n - -2 # Number of statements: 2. - -1 -# {i, j | 1<=i<=n-1; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 -1 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 - -1 -# {i, j, k | 1<=i<=n-1; i+1<=j<=n i+1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 -1 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 -1 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 -# We want to let CLooG set the iterator names. -0 - -2 -# Scattering functions -1 6 -# c1 i j n 1 -0 1 -1 0 0 0 - -1 7 -# c1 i j k n 1 -0 1 0 0 -1 0 0 -1 -proc - -2 -# Scattering functions -3 8 -# c1 c2 c3 i j n 1 -0 1 0 0 -1 0 0 0 -0 0 1 0 0 0 0 0 -0 0 0 1 0 0 0 0 - -3 9 -# c1 c2 c3 i j k n 1 -0 1 0 0 0 0 -1 0 0 -0 0 1 0 0 0 0 0 -1 -0 0 0 1 0 0 -1 0 0 -0 - diff --git a/cloog-0.16.3/test/yosr.good.c b/cloog-0.16.3/test/yosr.good.c deleted file mode 100644 index 8845a2c..0000000 --- a/cloog-0.16.3/test/yosr.good.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Generated from ../../../git/cloog/test/yosr.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int n) -{ - /* Scattering iterators. */ - int proc; - /* Original iterators. */ - int i, j, k; - if (n >= 2) { - for (j=2;j<=n;j++) { - S1(1,j) ; - } - } - for (proc=2;proc<=n-1;proc++) { - for (i=1;i<=proc-1;i++) { - for (j=i+1;j<=n;j++) { - S2(i,j,proc) ; - } - } - for (j=proc+1;j<=n;j++) { - S1(proc,j) ; - } - } - if (n >= 2) { - for (i=1;i<=n-1;i++) { - for (j=i+1;j<=n;j++) { - S2(i,j,n) ; - } - } - } -} diff --git a/cloog-0.16.3/test/yosr2.c b/cloog-0.16.3/test/yosr2.c deleted file mode 100644 index 999eb41..0000000 --- a/cloog-0.16.3/test/yosr2.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Generated from ../../../git/cloog/test/yosr2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -for (i=1;i<=M;i++) { - S2(i) ; -} -for (proc=2;proc<=M-1;proc++) { - for (i=1;i<=proc-1;i++) { - S4(i,proc) ; - } - for (j=1;j<=proc-1;j++) { - S1(proc,j) ; - } - for (j=proc+1;j<=M;j++) { - for (k=1;k<=proc-1;k++) { - S3(proc,j,k) ; - } - } -} -for (i=1;i<=M-1;i++) { - S4(i,M) ; -} -for (j=1;j<=M-1;j++) { - S1(M,j) ; -} diff --git a/cloog-0.16.3/test/yosr2.cloog b/cloog-0.16.3/test/yosr2.cloog deleted file mode 100644 index e9dea4a..0000000 --- a/cloog-0.16.3/test/yosr2.cloog +++ /dev/null @@ -1,71 +0,0 @@ -# language: C -c - -# parameter n -1 3 -# n 1 -1 1 -2 -0 - -4 # Number of statements - -1 -# S2 {k, l | 1<=k<=n; 1<=l<=k-1} -4 5 -# k l n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 -1 -1 1 -1 0 -1 -0 0 0 - -1 -# S3 {k | 1<=k<=n} -2 4 -# k n 1 -1 1 0 -1 -1 -1 1 0 -0 0 0 - -1 -# S5 {k, i, m | 1<=k<=n; k+1<=i<=n 1<=m<=k-1} -6 6 -# k i m n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 0 -1 -1 1 0 -1 0 -1 -0 0 0 - -1 -# S4 {k, i | 1<=k<=n; k+1<=i<=n} -4 5 -# k i n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 -0 - - -4 # Scattering functions -1 6 -# c1 k l n 1 -0 1 -1 0 0 0 - -1 5 -# c1 k n 1 -0 1 0 0 0 - -1 7 -# c1 k i m n 1 -0 1 -1 0 0 0 0 - -1 6 -# c1 k i n 1 -0 1 0 -1 0 0 -1 -proc diff --git a/cloog-0.16.3/test/yosr2.good.c b/cloog-0.16.3/test/yosr2.good.c deleted file mode 100644 index 7608db8..0000000 --- a/cloog-0.16.3/test/yosr2.good.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Generated from ../../../git/cloog/test/yosr2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i) { hash(2); hash(i); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } -#define S4(i,j) { hash(4); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int proc; - /* Original iterators. */ - int i, j, k; - for (i=1;i<=M;i++) { - S2(i) ; - } - for (proc=2;proc<=M-1;proc++) { - for (i=1;i<=proc-1;i++) { - S4(i,proc) ; - } - for (j=1;j<=proc-1;j++) { - S1(proc,j) ; - } - for (j=proc+1;j<=M;j++) { - for (k=1;k<=proc-1;k++) { - S3(proc,j,k) ; - } - } - } - for (i=1;i<=M-1;i++) { - S4(i,M) ; - } - for (j=1;j<=M-1;j++) { - S1(M,j) ; - } -} diff --git a/cloog-0.16.3/test/yosrf.cloog b/cloog-0.16.3/test/yosrf.cloog deleted file mode 100644 index 1661ef7..0000000 --- a/cloog-0.16.3/test/yosrf.cloog +++ /dev/null @@ -1,65 +0,0 @@ -# language: FORTRAN -f - -# One parameter : n -1 3 -# n 1 -1 0 1 -# We want to set the parameter names... -1 -# and 'n' is the name of the unique parameter -n - -2 # Number of statements: 2. - -1 -# {i, j | 1<=i<=n-1; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 -1 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 - -1 -# {i, j, k | 1<=i<=n-1; i+1<=j<=n i+1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 -1 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 -1 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 -# We want to let CLooG set the iterator names. -0 - -2 -# Scattering functions -1 6 -# c1 i j n 1 -0 1 -1 0 0 0 - -1 7 -# c1 i j k n 1 -0 1 0 0 -1 0 0 -1 -proc - -2 -# Scattering functions -3 8 -# c1 c2 c3 i j n 1 -0 1 0 0 -1 0 0 0 -0 0 1 0 0 0 0 0 -0 0 0 1 0 0 0 0 - -3 9 -# c1 c2 c3 i j k n 1 -0 1 0 0 0 0 -1 0 0 -0 0 1 0 0 0 0 0 -1 -0 0 0 1 0 0 -1 0 0 -0 - diff --git a/cloog-0.16.3/test/yosrf.f b/cloog-0.16.3/test/yosrf.f deleted file mode 100644 index 2d8efad..0000000 --- a/cloog-0.16.3/test/yosrf.f +++ /dev/null @@ -1,21 +0,0 @@ -! Generated from ../../../git/cloog/test/yosrf.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. -IF (n >= 2) THEN - DO j=2, n - S1(1,j) - END DO - DO proc=2, n-1 - DO i=1, proc-1 - DO j=i+1, n - S2(i,j,proc) - END DO - END DO - DO j=proc+1, n - S1(proc,j) - END DO - END DO - DO i=1, n-1 - DO j=i+1, n - S2(i,j,n) - END DO - END DO -END IF diff --git a/cloog-0.17.0/CLOOG_HEAD b/cloog-0.17.0/CLOOG_HEAD deleted file mode 100644 index c5523bd..0000000 --- a/cloog-0.17.0/CLOOG_HEAD +++ /dev/null @@ -1 +0,0 @@ -0.17.0 diff --git a/cloog-0.17.0/ChangeLog b/cloog-0.17.0/ChangeLog deleted file mode 100644 index 9767b37..0000000 --- a/cloog-0.17.0/ChangeLog +++ /dev/null @@ -1,22 +0,0 @@ -version: 0.17.0 -date: Mon Dec 12 00:51:44 CET 2011 -changes: - - Support openscop as input format - - update isl backend to changes in isl 0.08 - - Add CLOOG_ prefix to LANGUAGE defines in public header files - - Replace cloog_union_domain_from_isl_union_set() with - cloog_union_domain_from_isl_set() - - Allow to build CLooG from gmp build directory - - Smaller improvements - -version: 0.16.3 -date: Wed Jul 13 18:18:19 CEST 2011 -changes: - - update isl backend to recent changes in isl - - add support for unrolling ---- -version: 0.16.2 -date: Sun Mar 20 15:51:13 CET 2011 -changes: - - update isl backend to recent changes in isl - - improved output in case of stride detection diff --git a/cloog-0.17.0/Makefile.am b/cloog-0.17.0/Makefile.am deleted file mode 100644 index 80bfc43..0000000 --- a/cloog-0.17.0/Makefile.am +++ /dev/null @@ -1,179 +0,0 @@ -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** makefile.in ** -# **-------------------------------------------------------------------** -# ** First version: october 25th 2001 ** -# **-------------------------------------------------------------------**/ -# -# makefile.in (or makefile if generated) of CLooG, the Chunky LOOp Generator. -# makefile.in is not a makefile, you must run the 'configure' shellscript to -# generate the makefile thanks to this file. - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2001 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * * -# *****************************************************************************/ -if BUNDLED_ISL - MAYBE_ISL = isl - ISL_LA = $(top_builddir)/isl/libisl.la -endif - -if BUNDLED_OSL - MAYBE_OSL = osl - OSL_LA = $(top_builddir)/osl/source/libosl.la -endif - -SUBDIRS = $(MAYBE_ISL) $(MAYBE_OSL) . doc test -DIST_SUBDIRS = $(MAYBE_ISL) $(MAYBE_OSL) . doc test - -ACLOCAL_AMFLAGS = -I m4 - -FORCE: -isl/libisl.la: FORCE - cd isl; $(MAKE) $(AM_MAKEFLAGS) libisl.la - -if NO_ISL -CLOOG = -LIBCLOOG = -else -CLOOG = cloog -LIBCLOOG = libcloog-isl.la -endif -bin_PROGRAMS = $(CLOOG) -lib_LTLIBRARIES = $(LIBCLOOG) - -if NEED_GET_MEMORY_FUNCTIONS -GET_MEMORY_FUNCTIONS=source/mp_get_memory_functions.c -endif - -SOURCES_CORE = \ - $(GET_MEMORY_FUNCTIONS) \ - source/block.c \ - source/clast.c \ - source/matrix.c \ - source/state.c \ - source/input.c \ - source/int.c \ - source/loop.c \ - source/names.c \ - source/options.c \ - source/pprint.c \ - source/program.c \ - source/statement.c \ - source/stride.c \ - source/union_domain.c \ - source/version.c - -DEFAULT_INCLUDES = -I. -INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -AM_CFLAGS = $(CFLAGS_WARN) -libcloog_isl_la_CPPFLAGS = @ISL_CPPFLAGS@ @OSL_CPPFLAGS@ -libcloog_isl_la_LDFLAGS = -version-info @versioninfo@ \ - -rpath $(libdir) @ISL_LDFLAGS@ @OSL_LDFLAGS@ -libcloog_isl_la_LIBADD = @ISL_LIBS@ @OSL_LIBS@ $(ISL_LA) $(OSL_LA) -libcloog_isl_la_SOURCES = \ - $(SOURCES_CORE) \ - source/isl/domain.c \ - source/isl/constraints.c \ - source/isl/backend.c -LDADD = libcloog-isl.la -cloog_DEPENDENCIES = libcloog-isl.la -cloog_SOURCES = source/cloog.c - -pkginclude_HEADERS = \ - include/cloog/block.h \ - include/cloog/clast.h \ - include/cloog/cloog.h \ - include/cloog/input.h \ - include/cloog/int.h \ - include/cloog/matrix.h \ - include/cloog/state.h \ - include/cloog/domain.h \ - include/cloog/loop.h \ - include/cloog/constraints.h \ - include/cloog/names.h \ - include/cloog/options.h \ - include/cloog/pprint.h \ - include/cloog/program.h \ - include/cloog/statement.h \ - include/cloog/stride.h \ - include/cloog/union_domain.h \ - include/cloog/version.h - -pkgmatrixincludedir = $(pkgincludedir)/matrix -pkgmatrixinclude_HEADERS = \ - include/cloog/matrix/constraintset.h - -pkgislincludedir = $(pkgincludedir)/isl -pkgislinclude_HEADERS = \ - include/cloog/isl/backend.h \ - include/cloog/isl/cloog.h \ - include/cloog/isl/domain.h \ - include/cloog/isl/constraintset.h - -version.h: @GIT_INDEX@ - echo '#define CLOOG_HEAD "'`$(top_builddir)/genversion.sh`'"' > $@ - -EXTRA_DIST = \ - autoconf/Doxyfile.in \ - source/matrix/constraintset.c \ - doc/cloog.texi \ - doc/images \ - examples - -install-data-local: - @test -z "$(pkgconfig_libdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfig_libdir)" - $(INSTALL_DATA) $(pkgconfig_libfile) "$(DESTDIR)$(pkgconfig_libdir)/$(pkgconfig_libfile)" - -uninstall-local: - rm -f "$(DESTDIR)$(pkgconfig_libdir)/$(pkgconfig_libfile)" - -dist-hook: - rm -f $(distdir)/test/Makefile - $(top_builddir)/genversion.sh > $(distdir)/CLOOG_HEAD - (cd doc; make cloog.pdf) && cp doc/cloog.pdf $(distdir)/doc/ - -#/***************************************************************************** -# * Rules * -# *****************************************************************************/ - -valcheck: - $(MAKE) valgrind -C test - -total: - @echo " /*-----------------------------------------------*" - @echo " * CLooG *" - @echo " *-----------------------------------------------*/" - $(MAKE) uninstall - $(MAKE) clean - $(MAKE) - $(MAKE) install - -doc: - @echo " /*-----------------------------------------------*" - @echo " * Generating CLooG's documentation *" - @echo " *-----------------------------------------------*/" - doxygen ./autoconf/Doxyfile diff --git a/cloog-0.17.0/Makefile.in b/cloog-0.17.0/Makefile.in deleted file mode 100644 index 162b97d..0000000 --- a/cloog-0.17.0/Makefile.in +++ /dev/null @@ -1,1375 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** makefile.in ** -# **-------------------------------------------------------------------** -# ** First version: october 25th 2001 ** -# **-------------------------------------------------------------------**/ -# -# makefile.in (or makefile if generated) of CLooG, the Chunky LOOp Generator. -# makefile.in is not a makefile, you must run the 'configure' shellscript to -# generate the makefile thanks to this file. - - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -bin_PROGRAMS = $(am__EXEEXT_1) -subdir = . -DIST_COMMON = README $(am__configure_deps) $(pkginclude_HEADERS) \ - $(pkgislinclude_HEADERS) $(pkgmatrixinclude_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/genversion.sh.in $(top_srcdir)/autoconf/Doxyfile.in \ - $(top_srcdir)/configure \ - $(top_srcdir)/include/cloog/version.h.in \ - $(top_srcdir)/source/version.c.in ChangeLog \ - autoconf/config.guess autoconf/config.sub autoconf/depcomp \ - autoconf/install-sh autoconf/ltmain.sh autoconf/missing -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/ax_submodule.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_CLEAN_FILES = autoconf/Doxyfile source/version.c \ - include/cloog/version.h genversion.sh -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ - "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgislincludedir)" \ - "$(DESTDIR)$(pkgmatrixincludedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libcloog_isl_la_DEPENDENCIES = $(ISL_LA) $(OSL_LA) -am__libcloog_isl_la_SOURCES_DIST = source/mp_get_memory_functions.c \ - source/block.c source/clast.c source/matrix.c source/state.c \ - source/input.c source/int.c source/loop.c source/names.c \ - source/options.c source/pprint.c source/program.c \ - source/statement.c source/stride.c source/union_domain.c \ - source/version.c source/isl/domain.c source/isl/constraints.c \ - source/isl/backend.c -@NEED_GET_MEMORY_FUNCTIONS_TRUE@am__objects_1 = libcloog_isl_la-mp_get_memory_functions.lo -am__objects_2 = $(am__objects_1) libcloog_isl_la-block.lo \ - libcloog_isl_la-clast.lo libcloog_isl_la-matrix.lo \ - libcloog_isl_la-state.lo libcloog_isl_la-input.lo \ - libcloog_isl_la-int.lo libcloog_isl_la-loop.lo \ - libcloog_isl_la-names.lo libcloog_isl_la-options.lo \ - libcloog_isl_la-pprint.lo libcloog_isl_la-program.lo \ - libcloog_isl_la-statement.lo libcloog_isl_la-stride.lo \ - libcloog_isl_la-union_domain.lo libcloog_isl_la-version.lo -am_libcloog_isl_la_OBJECTS = $(am__objects_2) \ - libcloog_isl_la-domain.lo libcloog_isl_la-constraints.lo \ - libcloog_isl_la-backend.lo -libcloog_isl_la_OBJECTS = $(am_libcloog_isl_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -libcloog_isl_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(AM_CFLAGS) $(CFLAGS) $(libcloog_isl_la_LDFLAGS) $(LDFLAGS) \ - -o $@ -@NO_ISL_FALSE@am_libcloog_isl_la_rpath = -rpath $(libdir) -@NO_ISL_FALSE@am__EXEEXT_1 = cloog$(EXEEXT) -PROGRAMS = $(bin_PROGRAMS) -am_cloog_OBJECTS = cloog.$(OBJEXT) -cloog_OBJECTS = $(am_cloog_OBJECTS) -cloog_LDADD = $(LDADD) -depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(libcloog_isl_la_SOURCES) $(cloog_SOURCES) -DIST_SOURCES = $(am__libcloog_isl_la_SOURCES_DIST) $(cloog_SOURCES) -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -HEADERS = $(pkginclude_HEADERS) $(pkgislinclude_HEADERS) \ - $(pkgmatrixinclude_HEADERS) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir dist dist-all distcheck -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BITS = @BITS@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CD = @CD@ -CFLAGS = @CFLAGS@ -CFLAGS_WARN = @CFLAGS_WARN@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIT_INDEX = @GIT_INDEX@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -ISL_CPPFLAGS = @ISL_CPPFLAGS@ -ISL_LDFLAGS = @ISL_LDFLAGS@ -ISL_LIBS = @ISL_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OSL_CPPFLAGS = @OSL_CPPFLAGS@ -OSL_LDFLAGS = @OSL_LDFLAGS@ -OSL_LIBS = @OSL_LIBS@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TEXI2DVI = @TEXI2DVI@ -VERSION = @VERSION@ -VERSION_MAJOR = @VERSION_MAJOR@ -VERSION_MINOR = @VERSION_MINOR@ -VERSION_REVISION = @VERSION_REVISION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfig_libdir = @pkgconfig_libdir@ -pkgconfig_libfile = @pkgconfig_libfile@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -subdirs = @subdirs@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -versioninfo = @versioninfo@ - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2001 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * * -# *****************************************************************************/ -@BUNDLED_ISL_TRUE@MAYBE_ISL = isl -@BUNDLED_ISL_TRUE@ISL_LA = $(top_builddir)/isl/libisl.la -@BUNDLED_OSL_TRUE@MAYBE_OSL = osl -@BUNDLED_OSL_TRUE@OSL_LA = $(top_builddir)/osl/source/libosl.la -SUBDIRS = $(MAYBE_ISL) $(MAYBE_OSL) . doc test -DIST_SUBDIRS = $(MAYBE_ISL) $(MAYBE_OSL) . doc test -ACLOCAL_AMFLAGS = -I m4 -@NO_ISL_FALSE@CLOOG = cloog -@NO_ISL_TRUE@CLOOG = -@NO_ISL_FALSE@LIBCLOOG = libcloog-isl.la -@NO_ISL_TRUE@LIBCLOOG = -lib_LTLIBRARIES = $(LIBCLOOG) -@NEED_GET_MEMORY_FUNCTIONS_TRUE@GET_MEMORY_FUNCTIONS = source/mp_get_memory_functions.c -SOURCES_CORE = \ - $(GET_MEMORY_FUNCTIONS) \ - source/block.c \ - source/clast.c \ - source/matrix.c \ - source/state.c \ - source/input.c \ - source/int.c \ - source/loop.c \ - source/names.c \ - source/options.c \ - source/pprint.c \ - source/program.c \ - source/statement.c \ - source/stride.c \ - source/union_domain.c \ - source/version.c - -DEFAULT_INCLUDES = -I. -INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -AM_CFLAGS = $(CFLAGS_WARN) -libcloog_isl_la_CPPFLAGS = @ISL_CPPFLAGS@ @OSL_CPPFLAGS@ -libcloog_isl_la_LDFLAGS = -version-info @versioninfo@ \ - -rpath $(libdir) @ISL_LDFLAGS@ @OSL_LDFLAGS@ - -libcloog_isl_la_LIBADD = @ISL_LIBS@ @OSL_LIBS@ $(ISL_LA) $(OSL_LA) -libcloog_isl_la_SOURCES = \ - $(SOURCES_CORE) \ - source/isl/domain.c \ - source/isl/constraints.c \ - source/isl/backend.c - -LDADD = libcloog-isl.la -cloog_DEPENDENCIES = libcloog-isl.la -cloog_SOURCES = source/cloog.c -pkginclude_HEADERS = \ - include/cloog/block.h \ - include/cloog/clast.h \ - include/cloog/cloog.h \ - include/cloog/input.h \ - include/cloog/int.h \ - include/cloog/matrix.h \ - include/cloog/state.h \ - include/cloog/domain.h \ - include/cloog/loop.h \ - include/cloog/constraints.h \ - include/cloog/names.h \ - include/cloog/options.h \ - include/cloog/pprint.h \ - include/cloog/program.h \ - include/cloog/statement.h \ - include/cloog/stride.h \ - include/cloog/union_domain.h \ - include/cloog/version.h - -pkgmatrixincludedir = $(pkgincludedir)/matrix -pkgmatrixinclude_HEADERS = \ - include/cloog/matrix/constraintset.h - -pkgislincludedir = $(pkgincludedir)/isl -pkgislinclude_HEADERS = \ - include/cloog/isl/backend.h \ - include/cloog/isl/cloog.h \ - include/cloog/isl/domain.h \ - include/cloog/isl/constraintset.h - -EXTRA_DIST = \ - autoconf/Doxyfile.in \ - source/matrix/constraintset.c \ - doc/cloog.texi \ - doc/images \ - examples - -all: all-recursive - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -am--refresh: - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): -autoconf/Doxyfile: $(top_builddir)/config.status $(top_srcdir)/autoconf/Doxyfile.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -source/version.c: $(top_builddir)/config.status $(top_srcdir)/source/version.c.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -include/cloog/version.h: $(top_builddir)/config.status $(top_srcdir)/include/cloog/version.h.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -genversion.sh: $(top_builddir)/config.status $(srcdir)/genversion.sh.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libcloog-isl.la: $(libcloog_isl_la_OBJECTS) $(libcloog_isl_la_DEPENDENCIES) - $(AM_V_CCLD)$(libcloog_isl_la_LINK) $(am_libcloog_isl_la_rpath) $(libcloog_isl_la_OBJECTS) $(libcloog_isl_la_LIBADD) $(LIBS) -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p || test -f $$p1; \ - then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list -cloog$(EXEEXT): $(cloog_OBJECTS) $(cloog_DEPENDENCIES) - @rm -f cloog$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(cloog_OBJECTS) $(cloog_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cloog.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-backend.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-block.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-clast.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-constraints.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-domain.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-input.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-int.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-loop.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-matrix.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-mp_get_memory_functions.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-names.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-options.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-pprint.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-program.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-state.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-statement.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-stride.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-union_domain.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcloog_isl_la-version.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -libcloog_isl_la-mp_get_memory_functions.lo: source/mp_get_memory_functions.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-mp_get_memory_functions.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-mp_get_memory_functions.Tpo -c -o libcloog_isl_la-mp_get_memory_functions.lo `test -f 'source/mp_get_memory_functions.c' || echo '$(srcdir)/'`source/mp_get_memory_functions.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-mp_get_memory_functions.Tpo $(DEPDIR)/libcloog_isl_la-mp_get_memory_functions.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/mp_get_memory_functions.c' object='libcloog_isl_la-mp_get_memory_functions.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-mp_get_memory_functions.lo `test -f 'source/mp_get_memory_functions.c' || echo '$(srcdir)/'`source/mp_get_memory_functions.c - -libcloog_isl_la-block.lo: source/block.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-block.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-block.Tpo -c -o libcloog_isl_la-block.lo `test -f 'source/block.c' || echo '$(srcdir)/'`source/block.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-block.Tpo $(DEPDIR)/libcloog_isl_la-block.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/block.c' object='libcloog_isl_la-block.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-block.lo `test -f 'source/block.c' || echo '$(srcdir)/'`source/block.c - -libcloog_isl_la-clast.lo: source/clast.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-clast.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-clast.Tpo -c -o libcloog_isl_la-clast.lo `test -f 'source/clast.c' || echo '$(srcdir)/'`source/clast.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-clast.Tpo $(DEPDIR)/libcloog_isl_la-clast.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/clast.c' object='libcloog_isl_la-clast.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-clast.lo `test -f 'source/clast.c' || echo '$(srcdir)/'`source/clast.c - -libcloog_isl_la-matrix.lo: source/matrix.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-matrix.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-matrix.Tpo -c -o libcloog_isl_la-matrix.lo `test -f 'source/matrix.c' || echo '$(srcdir)/'`source/matrix.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-matrix.Tpo $(DEPDIR)/libcloog_isl_la-matrix.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/matrix.c' object='libcloog_isl_la-matrix.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-matrix.lo `test -f 'source/matrix.c' || echo '$(srcdir)/'`source/matrix.c - -libcloog_isl_la-state.lo: source/state.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-state.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-state.Tpo -c -o libcloog_isl_la-state.lo `test -f 'source/state.c' || echo '$(srcdir)/'`source/state.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-state.Tpo $(DEPDIR)/libcloog_isl_la-state.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/state.c' object='libcloog_isl_la-state.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-state.lo `test -f 'source/state.c' || echo '$(srcdir)/'`source/state.c - -libcloog_isl_la-input.lo: source/input.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-input.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-input.Tpo -c -o libcloog_isl_la-input.lo `test -f 'source/input.c' || echo '$(srcdir)/'`source/input.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-input.Tpo $(DEPDIR)/libcloog_isl_la-input.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/input.c' object='libcloog_isl_la-input.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-input.lo `test -f 'source/input.c' || echo '$(srcdir)/'`source/input.c - -libcloog_isl_la-int.lo: source/int.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-int.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-int.Tpo -c -o libcloog_isl_la-int.lo `test -f 'source/int.c' || echo '$(srcdir)/'`source/int.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-int.Tpo $(DEPDIR)/libcloog_isl_la-int.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/int.c' object='libcloog_isl_la-int.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-int.lo `test -f 'source/int.c' || echo '$(srcdir)/'`source/int.c - -libcloog_isl_la-loop.lo: source/loop.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-loop.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-loop.Tpo -c -o libcloog_isl_la-loop.lo `test -f 'source/loop.c' || echo '$(srcdir)/'`source/loop.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-loop.Tpo $(DEPDIR)/libcloog_isl_la-loop.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/loop.c' object='libcloog_isl_la-loop.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-loop.lo `test -f 'source/loop.c' || echo '$(srcdir)/'`source/loop.c - -libcloog_isl_la-names.lo: source/names.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-names.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-names.Tpo -c -o libcloog_isl_la-names.lo `test -f 'source/names.c' || echo '$(srcdir)/'`source/names.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-names.Tpo $(DEPDIR)/libcloog_isl_la-names.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/names.c' object='libcloog_isl_la-names.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-names.lo `test -f 'source/names.c' || echo '$(srcdir)/'`source/names.c - -libcloog_isl_la-options.lo: source/options.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-options.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-options.Tpo -c -o libcloog_isl_la-options.lo `test -f 'source/options.c' || echo '$(srcdir)/'`source/options.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-options.Tpo $(DEPDIR)/libcloog_isl_la-options.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/options.c' object='libcloog_isl_la-options.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-options.lo `test -f 'source/options.c' || echo '$(srcdir)/'`source/options.c - -libcloog_isl_la-pprint.lo: source/pprint.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-pprint.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-pprint.Tpo -c -o libcloog_isl_la-pprint.lo `test -f 'source/pprint.c' || echo '$(srcdir)/'`source/pprint.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-pprint.Tpo $(DEPDIR)/libcloog_isl_la-pprint.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/pprint.c' object='libcloog_isl_la-pprint.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-pprint.lo `test -f 'source/pprint.c' || echo '$(srcdir)/'`source/pprint.c - -libcloog_isl_la-program.lo: source/program.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-program.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-program.Tpo -c -o libcloog_isl_la-program.lo `test -f 'source/program.c' || echo '$(srcdir)/'`source/program.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-program.Tpo $(DEPDIR)/libcloog_isl_la-program.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/program.c' object='libcloog_isl_la-program.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-program.lo `test -f 'source/program.c' || echo '$(srcdir)/'`source/program.c - -libcloog_isl_la-statement.lo: source/statement.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-statement.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-statement.Tpo -c -o libcloog_isl_la-statement.lo `test -f 'source/statement.c' || echo '$(srcdir)/'`source/statement.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-statement.Tpo $(DEPDIR)/libcloog_isl_la-statement.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/statement.c' object='libcloog_isl_la-statement.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-statement.lo `test -f 'source/statement.c' || echo '$(srcdir)/'`source/statement.c - -libcloog_isl_la-stride.lo: source/stride.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-stride.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-stride.Tpo -c -o libcloog_isl_la-stride.lo `test -f 'source/stride.c' || echo '$(srcdir)/'`source/stride.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-stride.Tpo $(DEPDIR)/libcloog_isl_la-stride.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/stride.c' object='libcloog_isl_la-stride.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-stride.lo `test -f 'source/stride.c' || echo '$(srcdir)/'`source/stride.c - -libcloog_isl_la-union_domain.lo: source/union_domain.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-union_domain.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-union_domain.Tpo -c -o libcloog_isl_la-union_domain.lo `test -f 'source/union_domain.c' || echo '$(srcdir)/'`source/union_domain.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-union_domain.Tpo $(DEPDIR)/libcloog_isl_la-union_domain.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/union_domain.c' object='libcloog_isl_la-union_domain.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-union_domain.lo `test -f 'source/union_domain.c' || echo '$(srcdir)/'`source/union_domain.c - -libcloog_isl_la-version.lo: source/version.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-version.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-version.Tpo -c -o libcloog_isl_la-version.lo `test -f 'source/version.c' || echo '$(srcdir)/'`source/version.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-version.Tpo $(DEPDIR)/libcloog_isl_la-version.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/version.c' object='libcloog_isl_la-version.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-version.lo `test -f 'source/version.c' || echo '$(srcdir)/'`source/version.c - -libcloog_isl_la-domain.lo: source/isl/domain.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-domain.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-domain.Tpo -c -o libcloog_isl_la-domain.lo `test -f 'source/isl/domain.c' || echo '$(srcdir)/'`source/isl/domain.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-domain.Tpo $(DEPDIR)/libcloog_isl_la-domain.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/isl/domain.c' object='libcloog_isl_la-domain.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-domain.lo `test -f 'source/isl/domain.c' || echo '$(srcdir)/'`source/isl/domain.c - -libcloog_isl_la-constraints.lo: source/isl/constraints.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-constraints.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-constraints.Tpo -c -o libcloog_isl_la-constraints.lo `test -f 'source/isl/constraints.c' || echo '$(srcdir)/'`source/isl/constraints.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-constraints.Tpo $(DEPDIR)/libcloog_isl_la-constraints.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/isl/constraints.c' object='libcloog_isl_la-constraints.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-constraints.lo `test -f 'source/isl/constraints.c' || echo '$(srcdir)/'`source/isl/constraints.c - -libcloog_isl_la-backend.lo: source/isl/backend.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libcloog_isl_la-backend.lo -MD -MP -MF $(DEPDIR)/libcloog_isl_la-backend.Tpo -c -o libcloog_isl_la-backend.lo `test -f 'source/isl/backend.c' || echo '$(srcdir)/'`source/isl/backend.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcloog_isl_la-backend.Tpo $(DEPDIR)/libcloog_isl_la-backend.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/isl/backend.c' object='libcloog_isl_la-backend.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcloog_isl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libcloog_isl_la-backend.lo `test -f 'source/isl/backend.c' || echo '$(srcdir)/'`source/isl/backend.c - -cloog.o: source/cloog.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cloog.o -MD -MP -MF $(DEPDIR)/cloog.Tpo -c -o cloog.o `test -f 'source/cloog.c' || echo '$(srcdir)/'`source/cloog.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cloog.Tpo $(DEPDIR)/cloog.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/cloog.c' object='cloog.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cloog.o `test -f 'source/cloog.c' || echo '$(srcdir)/'`source/cloog.c - -cloog.obj: source/cloog.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cloog.obj -MD -MP -MF $(DEPDIR)/cloog.Tpo -c -o cloog.obj `if test -f 'source/cloog.c'; then $(CYGPATH_W) 'source/cloog.c'; else $(CYGPATH_W) '$(srcdir)/source/cloog.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cloog.Tpo $(DEPDIR)/cloog.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='source/cloog.c' object='cloog.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cloog.obj `if test -f 'source/cloog.c'; then $(CYGPATH_W) 'source/cloog.c'; else $(CYGPATH_W) '$(srcdir)/source/cloog.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt -install-pkgincludeHEADERS: $(pkginclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" - @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ - done - -uninstall-pkgincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files -install-pkgislincludeHEADERS: $(pkgislinclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(pkgislincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgislincludedir)" - @list='$(pkgislinclude_HEADERS)'; test -n "$(pkgislincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgislincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgislincludedir)" || exit $$?; \ - done - -uninstall-pkgislincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(pkgislinclude_HEADERS)'; test -n "$(pkgislincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgislincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgislincludedir)" && rm -f $$files -install-pkgmatrixincludeHEADERS: $(pkgmatrixinclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(pkgmatrixincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgmatrixincludedir)" - @list='$(pkgmatrixinclude_HEADERS)'; test -n "$(pkgmatrixincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgmatrixincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgmatrixincludedir)" || exit $$?; \ - done - -uninstall-pkgmatrixincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(pkgmatrixinclude_HEADERS)'; test -n "$(pkgmatrixincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgmatrixincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgmatrixincludedir)" && rm -f $$files - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: check-recursive -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) -install-binPROGRAMS: install-libLTLIBRARIES - -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgislincludedir)" "$(DESTDIR)$(pkgmatrixincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ - clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: install-data-local install-pkgincludeHEADERS \ - install-pkgislincludeHEADERS install-pkgmatrixincludeHEADERS - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: install-binPROGRAMS install-libLTLIBRARIES - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES \ - uninstall-local uninstall-pkgincludeHEADERS \ - uninstall-pkgislincludeHEADERS \ - uninstall-pkgmatrixincludeHEADERS - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ - install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-binPROGRAMS \ - clean-generic clean-libLTLIBRARIES clean-libtool ctags \ - ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ - distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-binPROGRAMS install-data \ - install-data-am install-data-local install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-libLTLIBRARIES \ - install-man install-pdf install-pdf-am \ - install-pkgincludeHEADERS install-pkgislincludeHEADERS \ - install-pkgmatrixincludeHEADERS install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-binPROGRAMS \ - uninstall-libLTLIBRARIES uninstall-local \ - uninstall-pkgincludeHEADERS uninstall-pkgislincludeHEADERS \ - uninstall-pkgmatrixincludeHEADERS - - -FORCE: -isl/libisl.la: FORCE - cd isl; $(MAKE) $(AM_MAKEFLAGS) libisl.la - -version.h: @GIT_INDEX@ - echo '#define CLOOG_HEAD "'`$(top_builddir)/genversion.sh`'"' > $@ - -install-data-local: - @test -z "$(pkgconfig_libdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfig_libdir)" - $(INSTALL_DATA) $(pkgconfig_libfile) "$(DESTDIR)$(pkgconfig_libdir)/$(pkgconfig_libfile)" - -uninstall-local: - rm -f "$(DESTDIR)$(pkgconfig_libdir)/$(pkgconfig_libfile)" - -dist-hook: - rm -f $(distdir)/test/Makefile - $(top_builddir)/genversion.sh > $(distdir)/CLOOG_HEAD - (cd doc; make cloog.pdf) && cp doc/cloog.pdf $(distdir)/doc/ - -#/***************************************************************************** -# * Rules * -# *****************************************************************************/ - -valcheck: - $(MAKE) valgrind -C test - -total: - @echo " /*-----------------------------------------------*" - @echo " * CLooG *" - @echo " *-----------------------------------------------*/" - $(MAKE) uninstall - $(MAKE) clean - $(MAKE) - $(MAKE) install - -doc: - @echo " /*-----------------------------------------------*" - @echo " * Generating CLooG's documentation *" - @echo " *-----------------------------------------------*/" - doxygen ./autoconf/Doxyfile - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.17.0/README b/cloog-0.17.0/README deleted file mode 100644 index 7003a2b..0000000 --- a/cloog-0.17.0/README +++ /dev/null @@ -1,203 +0,0 @@ -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** The Chunky Loop Generator ** -# **-------------------------------------------------------------------** -# ** First version of this file: january 22th 2002 ** -# **-------------------------------------------------------------------**/ -# - -For complete informations about this software, how to build and use it, -please see the postscript file in the ./doc subdirectory (a pdf version -is available in the web site). - -Overview : -I. Description -II. Building CLooG -III. Options -IV. Running CLooG -V. General Questions - -# **-------------------------------------------------------------------** -# ** I. Description ** -# **-------------------------------------------------------------------**/ - -CLooG is a software which generates loops for scanning Z-polyhedra. That is, -CLooG finds the code or pseudo-code where each integral point of one or more -parametrized polyhedron or parametrized polyhedra union is reached. CLooG is -designed to avoid control overhead and to produce a very efficient code. - -Its input is some data on the polyhedra to scan, basically the system of -affine inequalities that define them, and a context that defines some -properties known on the parameters if any. The output is the pseudo scanning -code. Many facilities are provided to generate a near-to-be-compileable code, -and every useful functions to generate the code may be called from the CLooG -library. - - INPUT | OUTPUT -(fortunately not exactly the input, | (the real one, with default options) - check test/readme.cloog for the | - real input for that problem !) | - | - j^ i>=2 | - | | j<=n+2-i | - | |\ | i<=n | - | | \ | | - m-+-****---+-j<=m | for (i=2;i<=n;i++) { - | ***** | | for (j=2;j<=min(m,-i+n+2);j++) { - | ****** | ==> S1 ; - | *******| | } - 2-+-********-j>=2 | } - | | |\ | - 0-+-+------+--->i | - | | | | - 0 2 n | - | - Context : n>=2 | - m>=2 | - System : 2<=i<=n | - 2<=j<=m | - j<=n+2-i | - -# **-------------------------------------------------------------------** -# ** II. Building CLooG ** -# **-------------------------------------------------------------------**/ - -If you obtained CLooG from the git repository, then you first -need to obtain the submodules and create a configure script. - - ./get_submodules.sh - ./autogen.sh - -The first step is only needed if you plan on using the isl backend. - -The configure shell script attempts to guess correct values for various -system-dependent variables used during compilation. It uses those values to -create a Makefile. The file configure.ac is used to create configure by a -program called autoconf. You only need configure.ac if you want to change -it or regenerate configure using a newer version of autoconf. - -The simplest way to compile this package is: -cd to the directory containing the package's source code and type - - ./configure - -to configure the package for your system (while running, configure prints -some messages telling which features it is checking for). To compile the -package, type - - make - - -to install the program and/or the library, type - - make install - -you can remove the program binaries and object files from the source code -directory by typing - - make clean - -To also remove the files that configure created (so you can compile the -package for a different kind of computer) type - - make distclean - -# **-------------------------------------------------------------------** -# ** III. Options ** -# **-------------------------------------------------------------------**/ - -By default, make will install the package's files in /usr/local/bin, -/usr/local/lib, etc. You can specify an installation prefix other than -/usr/local by giving onfigure the option --prefix=PATH. - -By default, configure will use the isl that comes bundled with CLooG. -Using the --with-isl option of configure the user can specify that "no" isl, -a previously installed ("system") isl or a "build" isl should be used. -In the latter case, the user should also specify the build location -using --with-isl-builddir=PATH. In case of an installed isl, -the installation location can be specified using the ---with-isl-prefix=PATH and --with-isl-exec-prefix=PATH options of configure. - -By default, configure will seek the PolyLib in standard locations. -If necessary, you can specify the PolyLib's path by giving configure the -option --with-polylib-prefix=PATH and/or --with-polylib-exec-prefix=PATH. - -By default, configure will seek the GMP library in standard locations. -If necessary, you can specify the GMP's path by giving configure the -option --with-gmp-prefix=PATH and/or --with-gmp-exec-prefix=PATH. - -By default, when using the PolyLib backend, -CLooG and its library are built using 64 bits integer -representation. You can choose to specify explicitly others integer -representations by using: ---with-bits=32 for 32 bits integers, ---with-bits=64 for 64 bits integers (default), ---with-bits=gmp for multiple precision integers. - -# **-------------------------------------------------------------------** -# ** IV. Running CLooG ** -# **-------------------------------------------------------------------**/ - -To run CLooG, simply type 'cloog', optionally followed by the name of an -input file. You can type 'cloog -h' or 'cloog --help' for some help. -For more informations, please check the ./doc subdirectory. - -# **-------------------------------------------------------------------** -# ** V. General Questions ** -# **-------------------------------------------------------------------**/ - -1. What does CLooG means ? - -CLooG is the Chunky LOOp Generator, Chunky is an automatic loop optimizer for -data locality. CLooG is a completely independent part of the Chunky project. -Pronounce 'CLooG' as 'klug', which means 'sly' in german :-). - -2. CLooG do not compile, what should I do ? - -CLooG should compile everywhere (assuming that PolyLib is still there), thus -there is a problem or the documentation is not clear, in both case it is -necessary to ask the author(s) ! - -3. I need a feature that CLooG do not implement, what should I do ? - -There are two ways. First, CLooG is a LGPL software and library. So you -are welcome to improve it yourself ;-) ! Many project have been successful, it -is -maybe- a sign that this is not too hard to put your hands inside the -source. Second, just ask the author(s) :-) ! Maybe a lot of people would be -interessed by such feature, maybe many people asked for it before, maybe it's -trivial to implement (and even)... Please just never hesitate to ask the -author(s) ! - -4. I implemented a cool feature, can I submit it ? - -Obviously you are welcome to send the author(s) any improvement. But obviously -we are quite careful with readability, correctness and stability, and the -author(s) will read, check and check again any contribution before including it. -Thus, it can take time... There are few basic rules to write contributions: -- (1) Do never change the indentation of any part of the code that is not yours. -- (2) Do never send codes that use more than 80 columns. -- (3) Do never send codes without a lot of comments in (bad or good) english. -- (4) Do never send codes with obscure and/or non-english variable names. -- (5) Use C89, just C, only C (note: "//" comments are not C89, - variable declaration elsewhere than at the beginning of a block, is not C89). -- (6) Read doc/SubmittingPatches -Please understand that in order to live for a long time, and to be used in many -projects the very first priority for CLooG is to be readable and documented. - -5. Is CLooG bug free ? - -No, who can ? ClooG is a complex program, and we do not pretend it to be bug -free. Nevertheless because it has been tested and tested, we are fairly sure -that CLooG results with default options have good chances to be satisfactory. -If you find a result that looks strange, inadequate or incorrect, please send: -- (1) The input file to the author(s). -- (2) The output. -- (3) The first line given by typing 'cloog -v'. -- (4) All your command line options to achieve the result. -We will try to explain the result or to fix the problem as soon as possible. - -6. How can I contact the author(s) ? - -Just send a mail to cloog-development@googlegroups.com diff --git a/cloog-0.17.0/aclocal.m4 b/cloog-0.17.0/aclocal.m4 deleted file mode 100644 index 884385e..0000000 --- a/cloog-0.17.0/aclocal.m4 +++ /dev/null @@ -1,991 +0,0 @@ -# generated automatically by aclocal 1.11.1 -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],, -[m4_warning([this file was generated for autoconf 2.67. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically `autoreconf'.])]) - -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.11' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 9 - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 10 - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -#serial 5 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 16 - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) - -dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST(install_sh)]) - -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 6 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_MKDIR_P -# --------------- -# Check for `mkdir -p'. -AC_DEFUN([AM_PROG_MKDIR_P], -[AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 5 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# Copyright (C) 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 1 - -# AM_SILENT_RULES([DEFAULT]) -# -------------------------- -# Enable less verbose build rules; with the default set to DEFAULT -# (`yes' being less verbose, `no' or empty being verbose). -AC_DEFUN([AM_SILENT_RULES], -[AC_ARG_ENABLE([silent-rules], -[ --enable-silent-rules less verbose build output (undo: `make V=1') - --disable-silent-rules verbose build output (undo: `make V=0')]) -case $enable_silent_rules in -yes) AM_DEFAULT_VERBOSITY=0;; -no) AM_DEFAULT_VERBOSITY=1;; -*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; -esac -AC_SUBST([AM_DEFAULT_VERBOSITY])dnl -AM_BACKSLASH='\' -AC_SUBST([AM_BACKSLASH])dnl -_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl -]) - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([m4/ax_cc_maxopt.m4]) -m4_include([m4/ax_cflags_warn_all.m4]) -m4_include([m4/ax_check_compiler_flags.m4]) -m4_include([m4/ax_compiler_vendor.m4]) -m4_include([m4/ax_create_pkgconfig_info.m4]) -m4_include([m4/ax_gcc_archflag.m4]) -m4_include([m4/ax_gcc_x86_cpuid.m4]) -m4_include([m4/ax_submodule.m4]) -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) diff --git a/cloog-0.17.0/autoconf/Doxyfile.in b/cloog-0.17.0/autoconf/Doxyfile.in deleted file mode 100644 index fa02ac7..0000000 --- a/cloog-0.17.0/autoconf/Doxyfile.in +++ /dev/null @@ -1,1101 +0,0 @@ -# Doxyfile 1.3.5 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = CLooG - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = @RELEASE@ - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = doc/source - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, -# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en -# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, -# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is used -# as the annotated text. Otherwise, the brief description is used as-is. If left -# blank, the following values are used ("$name" is automatically replaced with the -# name of the entity): "The $name class" "The $name widget" "The $name file" -# "is" "provides" "specifies" "contains" "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = YES - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. - -INLINE_INHERITED_MEMB = YES - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. It is allowed to use relative paths in the argument list. - -STRIP_FROM_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = YES - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = -#WARN_LOGFILE = doc/doxygen.log - - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = source \ - include/cloog - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp -# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories -# that are symbolic links (a Unix filesystem feature) are excluded from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. - -INPUT_FILTER = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = YES - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse the -# parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superseded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = /usr/bin/ - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -# DOTFILE_DIRS = src - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes that -# lay further from the root node will be omitted. Note that setting this option to -# 1 or 2 may greatly reduce the computation time needed for large code bases. Also -# note that a graph may be further truncated if the graph's image dimensions are -# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). -# If 0 is used for the depth value (the default), the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/cloog-0.17.0/autoconf/config.guess b/cloog-0.17.0/autoconf/config.guess deleted file mode 100755 index c2246a4..0000000 --- a/cloog-0.17.0/autoconf/config.guess +++ /dev/null @@ -1,1502 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -# Free Software Foundation, Inc. - -timestamp='2009-12-30' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/cloog-0.17.0/autoconf/config.sub b/cloog-0.17.0/autoconf/config.sub deleted file mode 100755 index c2d1257..0000000 --- a/cloog-0.17.0/autoconf/config.sub +++ /dev/null @@ -1,1714 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -# Free Software Foundation, Inc. - -timestamp='2010-01-22' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nios | nios2 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12 | picochip) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile-* | tilegx-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze) - basic_machine=microblaze-xilinx - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - # This must be matched before tile*. - tilegx*) - basic_machine=tilegx-unknown - os=-linux-gnu - ;; - tile*) - basic_machine=tile-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -nacl*) - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/cloog-0.17.0/autoconf/depcomp b/cloog-0.17.0/autoconf/depcomp deleted file mode 100755 index df8eea7..0000000 --- a/cloog-0.17.0/autoconf/depcomp +++ /dev/null @@ -1,630 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2009-04-28.21; # UTC - -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free -# Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by `PROGRAMS ARGS'. - object Object file output by `PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputing dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -cygpath_u="cygpath -u -f -" -if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u="sed s,\\\\\\\\,/,g" - depmode=msvisualcpp -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory -## that the space means something, we add a space to the output as -## well. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the - # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> "$depfile" - echo >> "$depfile" - - # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # 'foo.d', which lands next to the object file, wherever that - # happens to be. - # Much of this is similar to the tru64 case; see comments there. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" - # Add `dependent.h:' lines. - sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" "$tmpdepfile2" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mechanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. - "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no eat=no - for arg - do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - if test $eat = yes; then - eat=no - continue - fi - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -arch) - eat=yes ;; - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix=`echo "$object" | sed 's/^.*\././'` - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - IFS=" " - for arg - do - case "$arg" in - -o) - shift - ;; - $object) - shift - ;; - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E 2>/dev/null | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvcmsys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/cloog-0.17.0/autoconf/install-sh b/cloog-0.17.0/autoconf/install-sh deleted file mode 100755 index 6781b98..0000000 --- a/cloog-0.17.0/autoconf/install-sh +++ /dev/null @@ -1,520 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2009-04-28.21; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -no_target_directory= - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writeable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - -*) prefix='./';; - *) prefix='';; - esac - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob set +f - IFS=$oIFS - - prefixes= - - for d - do - test -z "$d" && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/cloog-0.17.0/autoconf/ltmain.sh b/cloog-0.17.0/autoconf/ltmain.sh deleted file mode 100755 index fa4b1e1..0000000 --- a/cloog-0.17.0/autoconf/ltmain.sh +++ /dev/null @@ -1,8413 +0,0 @@ -# Generated from ltmain.m4sh. - -# ltmain.sh (GNU libtool) 2.2.6b -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print informational messages (default) -# --version print version information -# -h, --help print short or long help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu3 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . - -PROGRAM=ltmain.sh -PACKAGE=libtool -VERSION="2.2.6b Debian-2.2.6b-2ubuntu3" -TIMESTAMP="" -package_revision=1.3017 - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# NLS nuisances: We save the old values to restore during execute mode. -# Only set LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" - fi" -done - -$lt_unset CDPATH - - - - - -: ${CP="cp -f"} -: ${ECHO="echo"} -: ${EGREP="/bin/grep -E"} -: ${FGREP="/bin/grep -F"} -: ${GREP="/bin/grep"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SED="/bin/sed"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" - -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - -# Generated shell functions inserted here. - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - -# The name of this program: -# In the unlikely event $progname began with a '-', it would play havoc with -# func_echo (imagine progname=-n), so we prepend ./ in that case: -func_dirname_and_basename "$progpath" -progname=$func_basename_result -case $progname in - -*) progname=./$progname ;; -esac - -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=: - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname${mode+: }$mode: $*" -} - -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 - - # bash bug again: - : -} - -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` - done - my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "X$my_tmpdir" | $Xsed -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () -{ - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac - - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac -} - - -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "X$1" | $Xsed \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac - - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac - - func_quote_for_expand_result="$my_arg" -} - - -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - - - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} - -# func_usage -# Echo short help message to standard output and exit. -func_usage () -{ - $SED -n '/^# Usage:/,/# -h/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - $ECHO - $ECHO "run \`$progname --help | more' for full usage" - exit $? -} - -# func_help -# Echo long help message to standard output and exit. -func_help () -{ - $SED -n '/^# Usage:/,/# Report bugs to/ { - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ - p - }' < "$progpath" - exit $? -} - -# func_missing_arg argname -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - func_error "missing argument for $1" - exit_cmd=exit -} - -exit_cmd=: - - - - - -# Check that we have a working $ECHO. -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell, and then maybe $ECHO will work. - exec $SHELL "$progpath" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - -# Parse options once, thoroughly. This comes as soon as possible in -# the script to make things like `libtool --version' happen quickly. -{ - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - esac - - # Parse non-mode specific arguments: - while test "$#" -gt 0; do - opt="$1" - shift - - case $opt in - --config) func_config ;; - - --debug) preserve_args="$preserve_args $opt" - func_echo "enabling shell trace mode" - opt_debug='set -x' - $opt_debug - ;; - - -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break - execute_dlfiles="$execute_dlfiles $1" - shift - ;; - - --dry-run | -n) opt_dry_run=: ;; - --features) func_features ;; - --finish) mode="finish" ;; - - --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break - case $1 in - # Valid mode arguments: - clean) ;; - compile) ;; - execute) ;; - finish) ;; - install) ;; - link) ;; - relink) ;; - uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; - esac - - mode="$1" - shift - ;; - - --preserve-dup-deps) - opt_duplicate_deps=: ;; - - --quiet|--silent) preserve_args="$preserve_args $opt" - opt_silent=: - ;; - - --verbose| -v) preserve_args="$preserve_args $opt" - opt_silent=false - ;; - - --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break - preserve_args="$preserve_args $opt $1" - func_enable_tag "$1" # tagname is set here - shift - ;; - - # Separate optargs to long options: - -dlopen=*|--mode=*|--tag=*) - func_opt_split "$opt" - set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} - shift - ;; - - -\?|-h) func_usage ;; - --help) opt_help=: ;; - --version) func_version ;; - - -*) func_fatal_help "unrecognized option \`$opt'" ;; - - *) nonopt="$opt" - break - ;; - esac - done - - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_duplicate_deps - ;; - esac - - # Having warned about all mis-specified options, bail out if - # anything was wrong. - $exit_cmd $EXIT_FAILURE -} - -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -## ----------- ## -## Main. ## -## ----------- ## - -$opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - test -z "$mode" && func_fatal_error "error: you must specify a MODE." - - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$mode' for more information." -} - - -# func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case "$lalib_p_line" in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test "$lalib_p" = yes -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - func_lalib_p "$1" -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_ltwrapper_scriptname_result="" - if func_ltwrapper_executable_p "$1"; then - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" - fi -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $opt_debug - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$save_ifs - eval cmd=\"$cmd\" - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. -func_source () -{ - $opt_debug - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $opt_debug - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - case "$@ " in - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi - - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T <?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - removelist="$removelist $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - removelist="$removelist $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - command="$command -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test "$compiler_c_o" = yes; then - command="$command -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { -test "$mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to building PIC objects only - -prefer-non-pic try to building non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode \`$mode'" - ;; - esac - - $ECHO - $ECHO "Try \`$progname --help' for more information about other modes." - - exit $? -} - - # Now that we've collected a possible --mode arg, show help if necessary - $opt_help && func_mode_help - - -# func_mode_execute arg... -func_mode_execute () -{ - $opt_debug - # The first argument is the command name. - cmd="$nonopt" - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir="$func_dirname_result" - - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir="$func_dirname_result" - ;; - - *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -*) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file="$progdir/$program" - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_quote_for_eval "$file" - args="$args $func_quote_for_eval_result" - done - - if test "X$opt_dry_run" = Xfalse; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - $ECHO "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - fi -} - -test "$mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libdirs="$nonopt" - admincmds= - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done - - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || admincmds="$admincmds - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - $ECHO "X----------------------------------------------------------------------" | $Xsed - $ECHO "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - $ECHO - $ECHO "If you ever happen to want to link against installed libraries" - $ECHO "in a given directory, LIBDIR, you must either use libtool, and" - $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" - $ECHO "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" - $ECHO " during execution" - fi - if test -n "$runpath_var"; then - $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" - $ECHO " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - $ECHO - - $ECHO "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" - $ECHO "pages." - ;; - *) - $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - $ECHO "X----------------------------------------------------------------------" | $Xsed - exit $EXIT_SUCCESS -} - -test "$mode" = finish && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $opt_debug - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - $ECHO "X$nonopt" | $GREP shtool >/dev/null; then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - install_prog="$install_prog$func_quote_for_eval_result" - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - for arg - do - if test -n "$dest"; then - files="$files $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - case " $install_prog " in - *[\\\ /]cp\ *) ;; - *) prev=$arg ;; - esac - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - install_prog="$install_prog $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "\`$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - staticlibs="$staticlibs $file" - ;; - - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - dir="$dir$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking \`$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname="$1" - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme="$stripme" - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme="" - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - $opt_dry_run || { - if test "$finalize" = yes; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_silent || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink \`$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file="$outputname" - else - func_warning "cannot relink \`$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name="$func_basename_result" - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test "$mode" = install && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_verbose "extracting global C symbols from \`$progfile'" - $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $opt_dry_run || { - $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" - func_basename "$dlprefile" - name="$func_basename_result" - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - $ECHO >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -" - case $host in - *cygwin* | *mingw* | *cegcc* ) - $ECHO >> "$output_objdir/$my_dlsyms" "\ -/* DATA imports from DLLs on WIN32 con't be const, because - runtime relocations are performed -- see ld's documentation - on pseudo-relocs. */" - lt_dlsym_const= ;; - *osf5*) - echo >> "$output_objdir/$my_dlsyms" "\ -/* This system does not cope well with relocations in const data */" - lt_dlsym_const= ;; - *) - lt_dlsym_const=const ;; - esac - - $ECHO >> "$output_objdir/$my_dlsyms" "\ -extern $lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; -$lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - $ECHO >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) symtab_cflags="$symtab_cflags $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - - # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -func_win32_libid () -{ - $opt_debug - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then - win32_nmres=`eval $NM -f posix -A $1 | - $SED -n -e ' - 1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $opt_debug - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib="$func_basename_result" - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` - done - - func_extract_archives_result="$my_oldobjs" -} - - - -# func_emit_wrapper_part1 [arg=no] -# -# Emit the first part of a libtool wrapper script on stdout. -# For more information, see the description associated with -# func_emit_wrapper(), below. -func_emit_wrapper_part1 () -{ - func_emit_wrapper_part1_arg1=no - if test -n "$1" ; then - func_emit_wrapper_part1_arg1=$1 - fi - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='${SED} -e 1s/^X//' -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - ECHO=\"$qecho\" - file=\"\$0\" - # Make sure echo works. - if test \"X\$1\" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then - # Yippee, \$ECHO works! - : - else - # Restart under the correct shell, and then maybe \$ECHO will work. - exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} - fi - fi\ -" - $ECHO "\ - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` - done -" -} -# end: func_emit_wrapper_part1 - -# func_emit_wrapper_part2 [arg=no] -# -# Emit the second part of a libtool wrapper script on stdout. -# For more information, see the description associated with -# func_emit_wrapper(), below. -func_emit_wrapper_part2 () -{ - func_emit_wrapper_part2_arg1=no - if test -n "$1" ; then - func_emit_wrapper_part2_arg1=$1 - fi - - $ECHO "\ - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` - - export $shlibpath_var -" - fi - - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} -# end: func_emit_wrapper_part2 - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=no - if test -n "$1" ; then - func_emit_wrapper_arg1=$1 - fi - - # split this up so that func_emit_cwrapperexe_src - # can call each part independently. - func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" - func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" -} - - -# func_to_host_path arg -# -# Convert paths to host format when used with build tools. -# Intended for use with "native" mingw (where libtool itself -# is running under the msys shell), or in the following cross- -# build environments: -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# where wine is equipped with the `winepath' executable. -# In the native mingw case, the (msys) shell automatically -# converts paths for any non-msys applications it launches, -# but that facility isn't available from inside the cwrapper. -# Similar accommodations are necessary for $host mingw and -# $build cygwin. Calling this function does no harm for other -# $host/$build combinations not listed above. -# -# ARG is the path (on $build) that should be converted to -# the proper representation for $host. The result is stored -# in $func_to_host_path_result. -func_to_host_path () -{ - func_to_host_path_result="$1" - if test -n "$1" ; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - case $build in - *mingw* ) # actually, msys - # awkward: cmd appends spaces to result - lt_sed_strip_trailing_spaces="s/[ ]*\$//" - func_to_host_path_tmp1=`( cmd //c echo "$1" |\ - $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_path_tmp1=`cygpath -w "$1"` - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # Unfortunately, winepath does not exit with a non-zero - # error code, so we are forced to check the contents of - # stdout. On the other hand, if the command is not - # found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both - # error code of zero AND non-empty stdout, which explains - # the odd construction: - func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - else - # Allow warning below. - func_to_host_path_result="" - fi - ;; - esac - if test -z "$func_to_host_path_result" ; then - func_error "Could not determine host path corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_path_result="$1" - fi - ;; - esac - fi -} -# end: func_to_host_path - -# func_to_host_pathlist arg -# -# Convert pathlists to host format when used with build tools. -# See func_to_host_path(), above. This function supports the -# following $build/$host combinations (but does no harm for -# combinations not listed here): -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# -# Path separators are also converted from $build format to -# $host format. If ARG begins or ends with a path separator -# character, it is preserved (but converted to $host format) -# on output. -# -# ARG is a pathlist (on $build) that should be converted to -# the proper representation on $host. The result is stored -# in $func_to_host_pathlist_result. -func_to_host_pathlist () -{ - func_to_host_pathlist_result="$1" - if test -n "$1" ; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_to_host_pathlist_tmp2="$1" - # Once set for this call, this variable should not be - # reassigned. It is used in tha fallback case. - func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e 's|^:*||' -e 's|:*$||'` - case $build in - *mingw* ) # Actually, msys. - # Awkward: cmd appends spaces to result. - lt_sed_strip_trailing_spaces="s/[ ]*\$//" - func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # unfortunately, winepath doesn't convert pathlists - func_to_host_pathlist_result="" - func_to_host_pathlist_oldIFS=$IFS - IFS=: - for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do - IFS=$func_to_host_pathlist_oldIFS - if test -n "$func_to_host_pathlist_f" ; then - func_to_host_path "$func_to_host_pathlist_f" - if test -n "$func_to_host_path_result" ; then - if test -z "$func_to_host_pathlist_result" ; then - func_to_host_pathlist_result="$func_to_host_path_result" - else - func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" - fi - fi - fi - IFS=: - done - IFS=$func_to_host_pathlist_oldIFS - ;; - esac - if test -z "$func_to_host_pathlist_result" ; then - func_error "Could not determine the host path(s) corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This may break if $1 contains DOS-style drive - # specifications. The fix is not to complicate the expression - # below, but for the user to provide a working wine installation - # with winepath so that path translation in the cross-to-mingw - # case works properly. - lt_replace_pathsep_nix_to_dos="s|:|;|g" - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_replace_pathsep_nix_to_dos"` - fi - # Now, add the leading and trailing path separators back - case "$1" in - :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" - ;; - esac - case "$1" in - *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" - ;; - esac - ;; - esac - fi -} -# end: func_to_host_pathlist - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -# define setmode _setmode -#else -# include -# include -# ifdef __CYGWIN__ -# include -# define HAVE_SETENV -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -#ifdef _MSC_VER -# define S_IXUSR _S_IEXEC -# define stat _stat -# ifndef _INTPTR_T_DEFINED -# define intptr_t int -# endif -#endif - -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifdef __CYGWIN__ -# define FOPEN_WB "wb" -#endif - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -#undef LTWRAPPER_DEBUGPRINTF -#if defined DEBUGWRAPPER -# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args -static void -ltwrapper_debugprintf (const char *fmt, ...) -{ - va_list args; - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); -} -#else -# define LTWRAPPER_DEBUGPRINTF(args) -#endif - -const char *program_name = NULL; - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_fatal (const char *message, ...); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_opt_process_env_set (const char *arg); -void lt_opt_process_env_prepend (const char *arg); -void lt_opt_process_env_append (const char *arg); -int lt_split_name_value (const char *arg, char** name, char** value); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); - -static const char *script_text_part1 = -EOF - - func_emit_wrapper_part1 yes | - $SED -e 's/\([\\"]\)/\\\1/g' \ - -e 's/^/ "/' -e 's/$/\\n"/' - echo ";" - cat <"))); - for (i = 0; i < newargc; i++) - { - LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); - } - -EOF - - case $host_os in - mingw*) - cat <<"EOF" - /* execv doesn't actually work on mingw as expected on unix */ - rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); - if (rval == -1) - { - /* failed to start process */ - LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); - return 127; - } - return rval; -EOF - ;; - *) - cat <<"EOF" - execv (lt_argv_zero, newargz); - return rval; /* =127, but avoids unused variable warning */ -EOF - ;; - esac - - cat <<"EOF" -} - -void * -xmalloc (size_t num) -{ - void *p = (void *) malloc (num); - if (!p) - lt_fatal ("Memory exhausted"); - - return p; -} - -char * -xstrdup (const char *string) -{ - return string ? strcpy ((char *) xmalloc (strlen (string) + 1), - string) : NULL; -} - -const char * -base_name (const char *name) -{ - const char *base; - -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - /* Skip over the disk name in MSDOS pathnames. */ - if (isalpha ((unsigned char) name[0]) && name[1] == ':') - name += 2; -#endif - - for (base = name; *name; name++) - if (IS_DIR_SEPARATOR (*name)) - base = name + 1; - return base; -} - -int -check_executable (const char *path) -{ - struct stat st; - - LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", - path ? (*path ? path : "EMPTY!") : "NULL!")); - if ((!path) || (!*path)) - return 0; - - if ((stat (path, &st) >= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", - path ? (*path ? path : "EMPTY!") : "NULL!")); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char *concat_name; - - LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", - wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", - tmp_pathspec)); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - char *errstr = strerror (errno); - lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal ("Could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp (str, pat) == 0) - *str = '\0'; - } - return str; -} - -static void -lt_error_core (int exit_status, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s: %s: ", program_name, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, "FATAL", message, ap); - va_end (ap); -} - -void -lt_setenv (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", - (name ? name : ""), - (value ? value : ""))); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - int len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -int -lt_split_name_value (const char *arg, char** name, char** value) -{ - const char *p; - int len; - if (!arg || !*arg) - return 1; - - p = strchr (arg, (int)'='); - - if (!p) - return 1; - - *value = xstrdup (++p); - - len = strlen (arg) - strlen (*value); - *name = XMALLOC (char, len); - strncpy (*name, arg, len-1); - (*name)[len - 1] = '\0'; - - return 0; -} - -void -lt_opt_process_env_set (const char *arg) -{ - char *name = NULL; - char *value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); - } - - lt_setenv (name, value); - XFREE (name); - XFREE (value); -} - -void -lt_opt_process_env_prepend (const char *arg) -{ - char *name = NULL; - char *value = NULL; - char *new_value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); - } - - new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - XFREE (name); - XFREE (value); -} - -void -lt_opt_process_env_append (const char *arg) -{ - char *name = NULL; - char *value = NULL; - char *new_value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); - } - - new_value = lt_extend_str (getenv (name), value, 1); - lt_setenv (name, new_value); - XFREE (new_value); - XFREE (name); - XFREE (value); -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - (name ? name : ""), - (value ? value : ""))); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[len-1] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - (name ? name : ""), - (value ? value : ""))); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - - -EOF -} -# end: func_emit_cwrapperexe_src - -# func_mode_link arg... -func_mode_link () -{ - $opt_debug - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module="${wl}-single_module" - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) deplibs="$deplibs $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# moreargs="$moreargs $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file \`$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - weak_libs="$weak_libs $arg" - prev= - continue - ;; - xcclinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname '-L' '' "$arg" - dir=$func_stripname_result - if test -z "$dir"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" - else - func_fatal_error "need path for \`-L' option" - fi - fi - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - deplibs="$deplibs System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; - esac - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" - linker_flags="$linker_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - # -64, -mips[0-9] enable 64-bit mode on the SGI compiler - # -r[0-9][0-9]* specifies the processor on the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler - # +DA*, +DD* enable 64-bit mode on the HP compiler - # -q* pass through compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* pass through architecture-specific - # compiler args for GCC - # -F/path gives path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC - # @file GCC response files - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - compiler_flags="$compiler_flags $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_duplicate_deps ; then - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - libs="$libs $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; - esac - pre_post_deps="$pre_post_deps $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs="$tmp_deplibs" - fi - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" - ;; - esac - fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - case $lib in - *.la) func_source "$lib" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` - case " $weak_libs " in - *" $deplib_base "*) ;; - *) deplibs="$deplibs $deplib" ;; - esac - done - done - libs="$dlprefiles" - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - compiler_flags="$compiler_flags $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - dir=$func_stripname_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - $ECHO - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because the file extensions .$libext of this argument makes me believe" - $ECHO "*** that it is just a static archive that I should not use here." - else - $ECHO - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - ;; - esac - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" - fi - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - dlprefiles="$dlprefiles $lib $dependency_libs" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" - fi - ;; - esac - func_basename "$lib" - laname="$func_basename_result" - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" - fi - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - newdlprefiles="$newdlprefiles $dir/$dlname" - else - newdlprefiles="$newdlprefiles $dir/$linklib" - fi - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in - *"$absdir:"*) ;; - *) temp_rpath="$temp_rpath$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc*) - # No point in relinking DLLs because paths are not encoded - notinst_deplibs="$notinst_deplibs $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" - break - fi - done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then - $ECHO - if test "$linkmode" = prog; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname="$1" - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc*) - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - func_basename "$soroot" - soname="$func_basename_result" - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from \`$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - $ECHO - $ECHO "*** And there doesn't seem to be a static archive available" - $ECHO "*** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - elif test -n "$old_library"; then - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - $ECHO - $ECHO "*** Warning: This system can not link to static lib archive $lib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - $ECHO "*** But as you try to build a module library, libtool will still create " - $ECHO "*** a static module, that should work as long as the dlopening application" - $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - $ECHO - $ECHO "*** However, this would only work if libtool was able to extract symbol" - $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" - $ECHO "*** not find such a program. So, this module is probably useless." - $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - *) temp_deplibs="$temp_deplibs $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - newlib_search_path="$newlib_search_path $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path="$deplib" ;; - *.la) - func_dirname "$deplib" "" "." - dir="$func_dirname_result" - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" - path= - fi - fi - ;; - *) - path="-L$absdir/$objdir" - ;; - esac - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" - - path="-L$absdir" - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - tmp_libs="$tmp_libs $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "\`-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - objs="$objs$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" - - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" - else - $ECHO - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - libobjs="$libobjs $objs" - fi - fi - - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" - - install_libdir="$1" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - shift - IFS="$save_ifs" - - test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$1" - number_minor="$2" - number_revision="$3" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - darwin|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - *) - func_fatal_configuration "$modename: unknown library version type \`$version_type'" - ;; - esac - ;; - no) - current="$1" - revision="$2" - age="$3" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current" - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; - - qnx) - major=".$current" - versuffix=".$current" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - - *) - func_fatal_configuration "unknown library version type \`$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - fi - - func_generate_dlsyms "$libname" "$libname" "yes" - libobjs="$libobjs $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - removelist="$removelist $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - oldlibs="$oldlibs $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` - # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` - # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) dlfiles="$dlfiles $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) dlprefiles="$dlprefiles $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - deplibs="$deplibs System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - deplibs="$deplibs -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $ECHO - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $ECHO - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ - -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` - done - fi - if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | - $GREP . >/dev/null; then - $ECHO - if test "X$deplibs_check_method" = "Xnone"; then - $ECHO "*** Warning: inter-library dependencies are not supported in this platform." - else - $ECHO "*** Warning: inter-library dependencies are not known to be supported." - fi - $ECHO "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - fi - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - $ECHO - $ECHO "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - $ECHO "*** a static module, that should work as long as the dlopening" - $ECHO "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - $ECHO - $ECHO "*** However, this would only work if libtool was able to extract symbol" - $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" - $ECHO "*** not find such a program. So, this module is probably useless." - $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - $ECHO "*** The inter-library dependencies that have been dropped here will be" - $ECHO "*** automatically added whenever a program is linked with this library" - $ECHO "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - $ECHO - $ECHO "*** Since this library must not contain undefined symbols," - $ECHO "*** because either the platform does not support them or" - $ECHO "*** it was explicitly requested with -no-undefined," - $ECHO "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - deplibs="$new_libs" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - if test -n "$hardcode_libdir_flag_spec_ld"; then - eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" - else - eval dep_rpath=\"$hardcode_libdir_flag_spec\" - fi - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname="$1" - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - linknames="$linknames $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" - delfiles="$delfiles $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols="$export_symbols" - export_symbols= - always_export_symbols=yes - fi - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - func_len " $cmd" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' - fi - - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - tmp_deplibs="$tmp_deplibs $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - linker_flags="$linker_flags $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - output_la=`$ECHO "X$output" | $Xsed -e "$basename"` - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript - func_verbose "creating GNU ld script: $output" - $ECHO 'INPUT (' > $output - for obj in $save_libobjs - do - $ECHO "$obj" >> $output - done - $ECHO ')' >> $output - delfiles="$delfiles $output" - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test "$compiler_needs_object" = yes; then - firstobj="$1 " - shift - fi - for obj - do - $ECHO "$obj" >> $output - done - delfiles="$delfiles $output" - output=$firstobj\"$file_list_spec$output\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test "X$objlist" = X || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - eval concat_cmds=\"$reload_cmds $objlist $last_robj\" - else - # All subsequent reloadable object files will link in - # the last one created. - eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext - objlist=$obj - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" - if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" - fi - delfiles="$delfiles $output" - - else - output= - fi - - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - fi - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - if ${skipped_export-false}; then - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - fi - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "\`-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "\`-release' is ignored for programs" - - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - compile_command="$compile_command ${wl}-bind_at_load" - finalize_command="$finalize_command ${wl}-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) dllsearchpath="$dllsearchpath:$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=yes - case $host in - *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - *cegcc) - # Disable wrappers for cegcc, we are cross compiling anyway. - wrappers_required=no - ;; - *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - esac - if test "$wrappers_required" = no; then - # Replace the output file specification. - compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' - fi - - exit $exit_status - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - - # Quote $ECHO for shipping. - if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then - case $progpath in - [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; - *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; - esac - qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` - else - qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - oldobjs="$oldobjs $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $addlibs - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - $ECHO "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase="$func_basename_result" - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - oldobjs="$oldobjs $gentop/$newobj" - ;; - *) oldobjs="$oldobjs $obj" ;; - esac - done - fi - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - newdependency_libs="$newdependency_libs $libdir/$name" - ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlfiles="$newdlfiles $libdir/$name" - ;; - *) newdlfiles="$newdlfiles $lib" ;; - esac - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlprefiles="$newdlprefiles $libdir/$name" - ;; - esac - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlfiles="$newdlfiles $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlprefiles="$newdlprefiles $abs" - done - dlprefiles="$newdlprefiles" - fi - $RM $output - # place dlname in correct position for cygwin - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -{ test "$mode" = link || test "$mode" = relink; } && - func_mode_link ${1+"$@"} - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $opt_debug - RM="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) RM="$RM $arg"; rmforce=yes ;; - -*) RM="$RM $arg" ;; - *) files="$files $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - origobjdir="$objdir" - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - objdir="$origobjdir" - else - objdir="$dir/$origobjdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$mode" = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates - if test "$mode" = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" - - case "$mode" in - clean) - case " $library_names " in - # " " in the beginning catches empty $dlname - *" $dlname "*) ;; - *) rmfiles="$rmfiles $objdir/$dlname" ;; - esac - test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then - rmfiles="$rmfiles $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then - rmfiles="$rmfiles $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$mode" = clean ; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - rmfiles="$rmfiles $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - rmfiles="$rmfiles $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - rmfiles="$rmfiles $objdir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - objdir="$origobjdir" - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -{ test "$mode" = uninstall || test "$mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: -# vi:sw=2 - diff --git a/cloog-0.17.0/autoconf/missing b/cloog-0.17.0/autoconf/missing deleted file mode 100755 index 28055d2..0000000 --- a/cloog-0.17.0/autoconf/missing +++ /dev/null @@ -1,376 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2009-04-28.21; # UTC - -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, -# 2008, 2009 Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -run=: -sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' -sed_minuso='s/.* -o \([^ ]*\).*/\1/p' - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -msg="missing on your system" - -case $1 in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - autom4te touch the output file, or create a stub one - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch] - -Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and -\`g' are ignored when checking the name. - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - -esac - -# normalize program name to check for. -program=`echo "$1" | sed ' - s/^gnu-//; t - s/^gnu//; t - s/^g//; t'` - -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). This is about non-GNU programs, so use $1 not -# $program. -case $1 in - lex*|yacc*) - # Not GNU programs, they don't have --version. - ;; - - tar*) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; - - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running `$TOOL --version' or `$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case $program in - aclocal*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case $f in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te*) - echo 1>&2 "\ -WARNING: \`$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison*|yacc*) - echo 1>&2 "\ -WARNING: \`$1' $msg. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if test ! -f y.tab.h; then - echo >y.tab.h - fi - if test ! -f y.tab.c; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex*|flex*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if test ! -f lex.yy.c; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit $? - fi - ;; - - makeinfo*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -z "$file"; then - # ... or it is the one specified with @setfilename ... - infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n ' - /^@setfilename/{ - s/.* \([^ ]*\) *$/\1/ - p - q - }' $infile` - # ... or it is derived from the source name (dir/f.texi becomes f.info) - test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info - fi - # If the file does not exist, the user really needs makeinfo; - # let's fail without touching anything. - test -f $file || exit 1 - touch $file - ;; - - tar*) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case $firstarg in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case $firstarg in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/cloog-0.17.0/configure b/cloog-0.17.0/configure deleted file mode 100755 index 9f2f7a5..0000000 --- a/cloog-0.17.0/configure +++ /dev/null @@ -1,15080 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.67 for cloog 0.17.0. -# -# Report bugs to . -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: cloog-development@googlegroups.com about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$lt_ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` - ;; -esac - -ECHO=${lt_ECHO-echo} -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat <<_LT_EOF -$* -_LT_EOF - exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$lt_ECHO"; then - if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if { echo_test_string=`eval $cmd`; } 2>/dev/null && - { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null - then - break - fi - done - fi - - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : - else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$ECHO" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - ECHO='print -r' - elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - ECHO='printf %s\n' - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - ECHO="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - ECHO=echo - fi - fi - fi - fi - fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -lt_ECHO=$ECHO -if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" -fi - - - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='cloog' -PACKAGE_TARNAME='cloog' -PACKAGE_VERSION='0.17.0' -PACKAGE_STRING='cloog 0.17.0' -PACKAGE_BUGREPORT='cloog-development@googlegroups.com' -PACKAGE_URL='' - -ac_unique_file="source/cloog.c" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -enable_option_checking=no -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -subdirs -pkgconfig_libfile -pkgconfig_libdir -VERSION_REVISION -VERSION_MINOR -VERSION_MAJOR -BITS -INSTALL -GIT_INDEX -NO_OSL_FALSE -NO_OSL_TRUE -BUNDLED_OSL_FALSE -BUNDLED_OSL_TRUE -OSL_LIBS -OSL_LDFLAGS -OSL_CPPFLAGS -NO_ISL_FALSE -NO_ISL_TRUE -BUNDLED_ISL_FALSE -BUNDLED_ISL_TRUE -ISL_LIBS -ISL_LDFLAGS -ISL_CPPFLAGS -NEED_GET_MEMORY_FUNCTIONS_FALSE -NEED_GET_MEMORY_FUNCTIONS_TRUE -CFLAGS_WARN -PRTDIAG -HAVE_TEXI2DVI_FALSE -HAVE_TEXI2DVI_TRUE -TEXI2DVI -CPP -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -lt_ECHO -RANLIB -AR -OBJDUMP -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -LIBTOOL -CD -LN_S -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -AM_BACKSLASH -AM_DEFAULT_VERBOSITY -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -versioninfo -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_silent_rules -enable_dependency_tracking -enable_shared -enable_static -with_pic -enable_fast_install -with_gnu_ld -enable_libtool_lock -enable_portable_binary -with_gcc_arch -with_isl -with_isl_prefix -with_isl_exec_prefix -with_isl_builddir -with_gmp -with_gmp_prefix -with_gmp_exec_prefix -with_gmp_builddir -with_osl -with_osl_prefix -with_osl_exec_prefix -with_osl_builddir -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' -ac_subdirs_all='isl -osl' - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures cloog 0.17.0 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/cloog] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of cloog 0.17.0:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-silent-rules less verbose build output (undo: `make V=1') - --disable-silent-rules verbose build output (undo: `make V=0') - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - --enable-portable-binary - disable compiler optimizations that would produce - unportable binaries - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-gcc-arch= use architecture for gcc -march/-mtune, - instead of guessing - --with-isl=no|system|build|bundled - Which isl to use - --with-isl-prefix=DIR Prefix of isl installation - --with-isl-exec-prefix=DIR - Exec prefix of isl installation - --with-isl-builddir=DIR Location of isl builddir - --with-gmp=system|build Which gmp to use - --with-gmp-prefix=DIR Prefix of gmp installation - --with-gmp-exec-prefix=DIR - Exec prefix of gmp installation - --with-gmp-builddir=DIR Location of gmp builddir - --with-osl=no|system|build|bundled - Which osl to use - --with-osl-prefix=DIR Prefix of osl installation - --with-osl-exec-prefix=DIR - Exec prefix of osl installation - --with-osl-builddir=DIR Location of osl builddir - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -cloog configure 0.17.0 -generated by GNU Autoconf 2.67 - -Copyright (C) 2010 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_func - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_type - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval "test \"\${$3+set}\"" = set; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ------------------------------------------------- ## -## Report this to cloog-development@googlegroups.com ## -## ------------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES -# --------------------------------------------- -# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. -ac_fn_c_check_decl () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - as_decl_name=`echo $2|sed 's/ *(.*//'` - as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -#ifndef $as_decl_name -#ifdef __cplusplus - (void) $as_decl_use; -#else - (void) $as_decl_name; -#endif -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_decl -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by cloog $as_me 0.17.0, which was -generated by GNU Autoconf 2.67. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5 ; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_aux_dir= -for ac_dir in autoconf "$srcdir"/autoconf; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in autoconf \"$srcdir\"/autoconf" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - - -VERSION_MAJOR=0 -VERSION_MINOR=17 -VERSION_REVISION=0 - -versioninfo=3:0:0 - -am__api_version='1.11' - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error $? "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='cloog' - VERSION='0.17.0' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - -# Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : - enableval=$enable_silent_rules; -fi - -case $enable_silent_rules in -yes) AM_DEFAULT_VERBOSITY=0;; -no) AM_DEFAULT_VERBOSITY=1;; -*) AM_DEFAULT_VERBOSITY=0;; -esac -AM_BACKSLASH='\' - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5 ; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5 ; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5 ; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5 ; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5 ; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -# Extract the first word of "cd", so it can be a program name with args. -set dummy cd; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CD"; then - ac_cv_prog_CD="$CD" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CD="" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CD=$ac_cv_prog_CD -if test -n "$CD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CD" >&5 -$as_echo "$CD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.2.6b' -macro_revision='1.3017' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test "${lt_cv_path_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$ac_tool_prefix"; then - for ac_prog in "dumpbin -symbols" "link -dump -symbols" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in "dumpbin -symbols" "link -dump -symbols" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if test "${lt_cv_nm_interface+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:4747: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:4750: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:4753: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - - - - - - - - - - - - - - - - - - - - - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 5948 "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if test "${lt_cv_apple_cc_single_mod+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5 ; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if test "${lt_cv_objdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - - - - - - - - - - - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag=' -fno-builtin' - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7477: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:7481: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl*) - # IBM XL C 8.0/Fortran 10.1 on PPC - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 -$as_echo "$lt_prog_compiler_pic" >&6; } - - - - - - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7816: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:7820: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test "${lt_cv_prog_compiler_static_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7921: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:7925: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7976: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:7980: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu) - link_all_deplibs=no - ;; - esac - - ld_shlibs=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld='-rpath $libdir' - archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - link_all_deplibs=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - whole_archive_flag_spec='' - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo(void) {} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - archive_cmds_need_lc=no - else - archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 -$as_echo "$archive_cmds_need_lc" >&6; } - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line 10360 "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line 10456 "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - -# Extract the first word of "texi2dvi", so it can be a program name with args. -set dummy texi2dvi; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_TEXI2DVI+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$TEXI2DVI"; then - ac_cv_prog_TEXI2DVI="$TEXI2DVI" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_TEXI2DVI="texi2dvi" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -TEXI2DVI=$ac_cv_prog_TEXI2DVI -if test -n "$TEXI2DVI"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEXI2DVI" >&5 -$as_echo "$TEXI2DVI" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test -n "$TEXI2DVI"; then - HAVE_TEXI2DVI_TRUE= - HAVE_TEXI2DVI_FALSE='#' -else - HAVE_TEXI2DVI_TRUE='#' - HAVE_TEXI2DVI_FALSE= -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 -$as_echo_n "checking for C compiler vendor... " >&6; } -if test "${ax_cv_c_compiler_vendor+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ax_cv_c_compiler_vendor=unknown - # note: don't check for gcc first since some other compilers define __GNUC__ - for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do - vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - -#if !($vencpp) - thisisanerror; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_compiler_vendor=`echo $ventest | cut -d: -f1`; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5 -$as_echo "$ax_cv_c_compiler_vendor" >&6; } - - - - - - -# Check whether --enable-portable-binary was given. -if test "${enable_portable_binary+set}" = set; then : - enableval=$enable_portable_binary; acx_maxopt_portable=$withval -else - acx_maxopt_portable=no -fi - - -# Try to determine "good" native compiler flags if none specified via CFLAGS -if test "$ac_test_CFLAGS" != "set"; then - CFLAGS="" - case $ax_cv_c_compiler_vendor in - dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" - if test "x$acx_maxopt_portable" = xno; then - CFLAGS="$CFLAGS -arch host" - fi;; - - sun) CFLAGS="-native -fast -xO5 -dalign" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS -xarch=generic" - fi;; - - hp) CFLAGS="+Oall +Optrs_ansi +DSnative" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS +DAportable" - fi;; - - ibm) if test "x$acx_maxopt_portable" = xno; then - xlc_opt="-qarch=auto -qtune=auto" - else - xlc_opt="-qtune=auto" - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $xlc_opt" >&5 -$as_echo_n "checking whether C compiler accepts $xlc_opt... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$xlc_opt" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="-O3 -qansialias -w $xlc_opt" -else - CFLAGS="-O3 -qansialias -w" - echo "******************************************************" - echo "* You seem to have the IBM C compiler. It is *" - echo "* recommended for best performance that you use: *" - echo "* *" - echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" - echo "* ^^^ ^^^ *" - echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" - echo "* CPU you have. (Set the CFLAGS environment var. *" - echo "* and re-run configure.) For more info, man cc. *" - echo "******************************************************" -fi - - ;; - - intel) CFLAGS="-O3 -ansi_alias" - if test "x$acx_maxopt_portable" = xno; then - icc_archflag=unknown - icc_flags="" - case $host_cpu in - i686*|x86_64*) - # icc accepts gcc assembly syntax, so these should work: - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 -$as_echo_n "checking for x86 cpuid 0 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_0+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 -$as_echo_n "checking for x86 cpuid 1 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_1+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_1=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *6a?:*[234]:*:*|*6[789b]?:*:*:*) icc_flags="-xK";; - *f3[347]:*:*:*|*f41347:*:*:*) icc_flags="-xP -xN -xW -xK";; - *f??:*:*:*) icc_flags="-xN -xW -xK";; - esac ;; - esac ;; - esac - if test "x$icc_flags" != x; then - for flag in $icc_flags; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 -$as_echo_n "checking whether C compiler accepts $flag... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$flag" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - icc_archflag=$flag; break -else - : -fi - - done - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icc architecture flag" >&5 -$as_echo_n "checking for icc architecture flag... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $icc_archflag" >&5 -$as_echo "$icc_archflag" >&6; } - if test "x$icc_archflag" != xunknown; then - CFLAGS="$CFLAGS $icc_archflag" - fi - fi - ;; - - gnu) - # default optimization flags for gcc on all systems - CFLAGS="-O3 -fomit-frame-pointer" - - # -malign-double for x86 systems - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -malign-double" >&5 -$as_echo_n "checking whether C compiler accepts -malign-double... " >&6; } -if test "${ax_cv_c_flags__malign_double+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ax_save_FLAGS=$CFLAGS - CFLAGS="-malign-double" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_flags__malign_double=yes -else - ax_cv_c_flags__malign_double=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -fi - -eval ax_check_compiler_flags=$ax_cv_c_flags__malign_double -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="$CFLAGS -malign-double" -else - : -fi - - - # -fstrict-aliasing for gcc-2.95+ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5 -$as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; } -if test "${ax_cv_c_flags__fstrict_aliasing+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ax_save_FLAGS=$CFLAGS - CFLAGS="-fstrict-aliasing" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_flags__fstrict_aliasing=yes -else - ax_cv_c_flags__fstrict_aliasing=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -fi - -eval ax_check_compiler_flags=$ax_cv_c_flags__fstrict_aliasing -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="$CFLAGS -fstrict-aliasing" -else - : -fi - - - # note that we enable "unsafe" fp optimization with other compilers, too - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -ffast-math" >&5 -$as_echo_n "checking whether C compiler accepts -ffast-math... " >&6; } -if test "${ax_cv_c_flags__ffast_math+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ax_save_FLAGS=$CFLAGS - CFLAGS="-ffast-math" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_flags__ffast_math=yes -else - ax_cv_c_flags__ffast_math=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -fi - -eval ax_check_compiler_flags=$ax_cv_c_flags__ffast_math -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="$CFLAGS -ffast-math" -else - : -fi - - - - - - -# Check whether --with-gcc-arch was given. -if test "${with_gcc_arch+set}" = set; then : - withval=$with_gcc_arch; ax_gcc_arch=$withval -else - ax_gcc_arch=yes -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 -$as_echo_n "checking for gcc architecture flag... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } -if test "${ax_cv_gcc_archflag+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -ax_cv_gcc_archflag="unknown" - -if test "$GCC" = yes; then - -if test "x$ax_gcc_arch" = xyes; then -ax_gcc_arch="" -if test "$cross_compiling" = no; then -case $host_cpu in - i[3456]86*|x86_64*) # use cpuid codes, in part from x86info-1.7 by D. Jones - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 -$as_echo_n "checking for x86 cpuid 0 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_0+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 -$as_echo_n "checking for x86 cpuid 1 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_1+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_1=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - case $ax_cv_gcc_x86_cpuid_0 in - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *5[48]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; - *5??:*:*:*) ax_gcc_arch=pentium ;; - *6[3456]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[01]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[234]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6[9d]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; - *6[78b]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6??:*:*:*) ax_gcc_arch=pentiumpro ;; - *f3[347]:*:*:*|*f41347:*:*:*) - case $host_cpu in - x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; - *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; - esac ;; - *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; - esac ;; - *:68747541:*:*) # AMD - case $ax_cv_gcc_x86_cpuid_1 in - *5[67]?:*:*:*) ax_gcc_arch=k6 ;; - *5[8d]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; - *5[9]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; - *60?:*:*:*) ax_gcc_arch=k7 ;; - *6[12]?:*:*:*) ax_gcc_arch="athlon k7" ;; - *6[34]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; - *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; - *6[68a]?:*:*:*) - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0x80000006 output" >&5 -$as_echo_n "checking for x86 cpuid 0x80000006 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_0x80000006+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0x80000006=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0x80000006, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0x80000006=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0x80000006=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0x80000006" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0x80000006" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - # L2 cache size - case $ax_cv_gcc_x86_cpuid_0x80000006 in - *:*:*[1-9a-f]??????:*) # (L2 = ecx >> 16) >= 256 - ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; - *) ax_gcc_arch="athlon-4 athlon k7" ;; - esac ;; - *f[4cef8b]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; - *f5?:*:*:*) ax_gcc_arch="opteron k8" ;; - *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; - *f??:*:*:*) ax_gcc_arch="k8" ;; - esac ;; - *:746e6543:*:*) # IDT - case $ax_cv_gcc_x86_cpuid_1 in - *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; - *58?:*:*:*) ax_gcc_arch=winchip2 ;; - *6[78]?:*:*:*) ax_gcc_arch=c3 ;; - *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; - esac ;; - esac - if test x"$ax_gcc_arch" = x; then # fallback - case $host_cpu in - i586*) ax_gcc_arch=pentium ;; - i686*) ax_gcc_arch=pentiumpro ;; - esac - fi - ;; - - sparc*) - # Extract the first word of "prtdiag", so it can be a program name with args. -set dummy prtdiag; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PRTDIAG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $PRTDIAG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PRTDIAG="$PRTDIAG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy="$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PRTDIAG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_PRTDIAG" && ac_cv_path_PRTDIAG="prtdiag" - ;; -esac -fi -PRTDIAG=$ac_cv_path_PRTDIAG -if test -n "$PRTDIAG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRTDIAG" >&5 -$as_echo "$PRTDIAG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` - cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters` - case $cputype in - *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; - *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; - *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; - *supersparc*|*tms390z5[05]*) ax_gcc_arch="supersparc v8" ;; - *hypersparc*|*rt62[056]*) ax_gcc_arch="hypersparc v8" ;; - *cypress*) ax_gcc_arch=cypress ;; - esac ;; - - alphaev5) ax_gcc_arch=ev5 ;; - alphaev56) ax_gcc_arch=ev56 ;; - alphapca56) ax_gcc_arch="pca56 ev56" ;; - alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; - alphaev6) ax_gcc_arch=ev6 ;; - alphaev67) ax_gcc_arch=ev67 ;; - alphaev68) ax_gcc_arch="ev68 ev67" ;; - alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; - alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; - alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; - - powerpc*) - cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` - cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'` - case $cputype in - *750*) ax_gcc_arch="750 G3" ;; - *740[0-9]*) ax_gcc_arch="$cputype 7400 G4" ;; - *74[4-5][0-9]*) ax_gcc_arch="$cputype 7450 G4" ;; - *74[0-9][0-9]*) ax_gcc_arch="$cputype G4" ;; - *970*) ax_gcc_arch="970 G5 power4";; - *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; - *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; - 603ev|8240) ax_gcc_arch="$cputype 603e 603";; - *) ax_gcc_arch=$cputype ;; - esac - ax_gcc_arch="$ax_gcc_arch powerpc" - ;; -esac -fi # not cross-compiling -fi # guess arch - -if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then -for arch in $ax_gcc_arch; do - if test "x$acx_maxopt_portable" = xyes; then # if we require portable code - flags="-mtune=$arch" - # -mcpu=$arch and m$arch generate nonportable code on every arch except - # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. - case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac - else - flags="-march=$arch -mcpu=$arch -m$arch" - fi - for flag in $flags; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 -$as_echo_n "checking whether C compiler accepts $flag... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$flag" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - ax_cv_gcc_archflag=$flag; break -else - : -fi - - done - test "x$ax_cv_gcc_archflag" = xunknown || break -done -fi - -fi # $GCC=yes - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 -$as_echo_n "checking for gcc architecture flag... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_archflag" >&5 -$as_echo "$ax_cv_gcc_archflag" >&6; } -if test "x$ax_cv_gcc_archflag" = xunknown; then - : -else - CFLAGS="$CFLAGS $ax_cv_gcc_archflag" -fi - - ;; - esac - - if test -z "$CFLAGS"; then - echo "" - echo "********************************************************" - echo "* WARNING: Don't know the best CFLAGS for this system *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" - echo "********************************************************" - echo "" - CFLAGS="-O3" - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 -$as_echo_n "checking whether C compiler accepts $CFLAGS... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$CFLAGS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - : -else - - echo "" - echo "********************************************************" - echo "* WARNING: The guessed CFLAGS don't seem to work with *" - echo "* your compiler. *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "********************************************************" - echo "" - CFLAGS="" - -fi - - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking CFLAGS_WARN for maximum warnings" >&5 -$as_echo_n "checking CFLAGS_WARN for maximum warnings... " >&6; } -if test "${ac_cv_cflags_warn_all+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_cflags_warn_all="no, unknown" - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - ac_save_CFLAGS="$CFLAGS" -for ac_arg in "-pedantic % -Wall" "-xstrconst % -v" "-std1 % -verbose -w0 -warnprotos" "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" "-ansi -ansiE % -fullwarn" "+ESlit % +w1" "-Xc % -pvctl,fullmsg" "-h conform % -h msglevel 2" # -do CFLAGS="$ac_save_CFLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_cflags_warn_all=`echo $ac_arg | sed -e 's,.*% *,,'` ; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done - CFLAGS="$ac_save_CFLAGS" - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cflags_warn_all" >&5 -$as_echo "$ac_cv_cflags_warn_all" >&6; } -case ".$ac_cv_cflags_warn_all" in - .ok|.ok,*) ;; - .|.no|.no,*) - ;; - *) - if echo " $CFLAGS_WARN " | grep " $ac_cv_cflags_warn_all " 2>&1 >/dev/null - then { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS_WARN does contain \$ac_cv_cflags_warn_all"; } >&5 - (: CFLAGS_WARN does contain $ac_cv_cflags_warn_all) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - else { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS_WARN=\"\$CFLAGS_WARN \$ac_cv_cflags_warn_all\""; } >&5 - (: CFLAGS_WARN="$CFLAGS_WARN $ac_cv_cflags_warn_all") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - CFLAGS_WARN="$CFLAGS_WARN $ac_cv_cflags_warn_all" - fi - ;; -esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if test "${ac_cv_c_const+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset cs; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_const=yes -else - ac_cv_c_const=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then - -$as_echo "#define const /**/" >>confdefs.h - -fi - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = x""yes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - - - -for ac_func in strtol -do : - ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol" -if test "x$ac_cv_func_strtol" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STRTOL 1 -_ACEOF - -fi -done - - - - -for ac_func in getrusage -do : - ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage" -if test "x$ac_cv_func_getrusage" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GETRUSAGE 1 -_ACEOF - -$as_echo "#define CLOOG_RUSAGE /**/" >>confdefs.h - -fi -done - - - - - -# Check whether --with-isl was given. -if test "${with_isl+set}" = set; then : - withval=$with_isl; -fi - -case "system" in -no|system|build|bundled) - -# Check whether --with-isl_prefix was given. -if test "${with_isl_prefix+set}" = set; then : - withval=$with_isl_prefix; -fi - - -# Check whether --with-isl_exec_prefix was given. -if test "${with_isl_exec_prefix+set}" = set; then : - withval=$with_isl_exec_prefix; -fi - -esac -case "build" in -no|system|build|bundled) - -# Check whether --with-isl_builddir was given. -if test "${with_isl_builddir+set}" = set; then : - withval=$with_isl_builddir; -fi - -esac -if test "x$with_isl_prefix" != "x" -a "x$with_isl_exec_prefix" = "x"; then - with_isl_exec_prefix=$with_isl_prefix -fi -if test "x$with_isl_prefix" != "x" -o "x$with_isl_exec_prefix" != "x"; then - if test "x$with_isl" != "x" -a "x$with_isl" != "xsystem"; then - as_fn_error $? "Setting $with_isl_prefix implies use of system isl" "$LINENO" 5 - fi - with_isl="system" -fi -if test "x$with_isl_builddir" != "x"; then - if test "x$with_isl" != "x" -a "x$with_isl" != "xbuild"; then - as_fn_error $? "Setting $with_isl_builddir implies use of build isl" "$LINENO" 5 - fi - with_isl="build" - isl_srcdir=`echo @abs_srcdir@ | $with_isl_builddir/config.status --file=-` - { $as_echo "$as_me:${as_lineno-$LINENO}: isl sources in $isl_srcdir" >&5 -$as_echo "$as_me: isl sources in $isl_srcdir" >&6;} -fi -case "$with_isl" in -no|system|build|bundled) - ;; -*) - if test -d $srcdir/.git -a \ - -d $srcdir/isl -a \ - ! -d $srcdir/isl/.git; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git repo detected, but submodule isl not initialized" >&5 -$as_echo "$as_me: WARNING: git repo detected, but submodule isl not initialized" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You may want to run" >&5 -$as_echo "$as_me: WARNING: You may want to run" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule init" >&5 -$as_echo "$as_me: WARNING: git submodule init" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule update" >&5 -$as_echo "$as_me: WARNING: git submodule update" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sh autogen.sh" >&5 -$as_echo "$as_me: WARNING: sh autogen.sh" >&2;} - fi - if test -f $srcdir/isl/configure -a "bundled" != "no"; then - with_isl="bundled" - else - with_isl="bundled" - fi - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which isl to use" >&5 -$as_echo_n "checking which isl to use... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_isl" >&5 -$as_echo "$with_isl" >&6; } - - -BITS="gmp" - - - - - -# Check whether --with-gmp was given. -if test "${with_gmp+set}" = set; then : - withval=$with_gmp; -fi - -case "system" in -system|build) - -# Check whether --with-gmp_prefix was given. -if test "${with_gmp_prefix+set}" = set; then : - withval=$with_gmp_prefix; -fi - - -# Check whether --with-gmp_exec_prefix was given. -if test "${with_gmp_exec_prefix+set}" = set; then : - withval=$with_gmp_exec_prefix; -fi - -esac -case "build" in -system|build) - -# Check whether --with-gmp_builddir was given. -if test "${with_gmp_builddir+set}" = set; then : - withval=$with_gmp_builddir; -fi - -esac -if test "x$with_gmp_prefix" != "x" -a "x$with_gmp_exec_prefix" = "x"; then - with_gmp_exec_prefix=$with_gmp_prefix -fi -if test "x$with_gmp_prefix" != "x" -o "x$with_gmp_exec_prefix" != "x"; then - if test "x$with_gmp" != "x" -a "x$with_gmp" != "xsystem"; then - as_fn_error $? "Setting $with_gmp_prefix implies use of system gmp" "$LINENO" 5 - fi - with_gmp="system" -fi -if test "x$with_gmp_builddir" != "x"; then - if test "x$with_gmp" != "x" -a "x$with_gmp" != "xbuild"; then - as_fn_error $? "Setting $with_gmp_builddir implies use of build gmp" "$LINENO" 5 - fi - with_gmp="build" - gmp_srcdir=`echo @abs_srcdir@ | $with_gmp_builddir/config.status --file=-` - { $as_echo "$as_me:${as_lineno-$LINENO}: gmp sources in $gmp_srcdir" >&5 -$as_echo "$as_me: gmp sources in $gmp_srcdir" >&6;} -fi -case "$with_gmp" in -system|build) - ;; -*) - if test -d $srcdir/.git -a \ - -d $srcdir/gmp -a \ - ! -d $srcdir/gmp/.git; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git repo detected, but submodule gmp not initialized" >&5 -$as_echo "$as_me: WARNING: git repo detected, but submodule gmp not initialized" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You may want to run" >&5 -$as_echo "$as_me: WARNING: You may want to run" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule init" >&5 -$as_echo "$as_me: WARNING: git submodule init" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule update" >&5 -$as_echo "$as_me: WARNING: git submodule update" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sh autogen.sh" >&5 -$as_echo "$as_me: WARNING: sh autogen.sh" >&2;} - fi - if test -f $srcdir/gmp/configure -a "system" != "no"; then - with_gmp="bundled" - else - with_gmp="system" - fi - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which gmp to use" >&5 -$as_echo_n "checking which gmp to use... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_gmp" >&5 -$as_echo "$with_gmp" >&6; } - - - -need_get_memory_functions=false -case "$with_gmp" in -build) - CPPFLAGS="-I$with_gmp_builddir $CPPFLAGS" - LDFLAGS="-L$with_gmp_builddir/$lt_cv_objdir $LDFLAGS" - ;; -system) - if test "x$with_gmp_prefix" != "x"; then - CPPFLAGS="-I$with_gmp_prefix/include $CPPFLAGS" - fi - - if test "$with_gmp_exec_prefix" != "yes" ; then - LDFLAGS="-L$with_gmp_exec_prefix/lib $LDFLAGS" - fi - ;; -esac -case "$with_gmp" in -build|system) - ac_fn_c_check_header_mongrel "$LINENO" "gmp.h" "ac_cv_header_gmp_h" "$ac_includes_default" -if test "x$ac_cv_header_gmp_h" = x""yes; then : - -else - as_fn_error $? "Can't find gmp headers." "$LINENO" 5 -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __gmpz_init in -lgmp" >&5 -$as_echo_n "checking for __gmpz_init in -lgmp... " >&6; } -if test "${ac_cv_lib_gmp___gmpz_init+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgmp $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char __gmpz_init (); -int -main () -{ -return __gmpz_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_gmp___gmpz_init=yes -else - ac_cv_lib_gmp___gmpz_init=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gmp___gmpz_init" >&5 -$as_echo "$ac_cv_lib_gmp___gmpz_init" >&6; } -if test "x$ac_cv_lib_gmp___gmpz_init" = x""yes; then : - LIBS="$LIBS -lgmp" -else - as_fn_error $? "Can't find gmp library." "$LINENO" 5 -fi - - ac_fn_c_check_decl "$LINENO" "mp_get_memory_functions" "ac_cv_have_decl_mp_get_memory_functions" "#include -" -if test "x$ac_cv_have_decl_mp_get_memory_functions" = x""yes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_MP_GET_MEMORY_FUNCTIONS $ac_have_decl -_ACEOF -if test $ac_have_decl = 1; then : - -else - - need_get_memory_functions=true - -fi - - ;; -esac - if test x$need_get_memory_functions = xtrue; then - NEED_GET_MEMORY_FUNCTIONS_TRUE= - NEED_GET_MEMORY_FUNCTIONS_FALSE='#' -else - NEED_GET_MEMORY_FUNCTIONS_TRUE='#' - NEED_GET_MEMORY_FUNCTIONS_FALSE= -fi - - - - - - -case "$with_isl" in -bundled) - ISL_CPPFLAGS="-I$srcdir/isl/include -Iisl/include" - ;; -build) - ISL_CPPFLAGS="-I$isl_srcdir/include -I$with_isl_builddir/include" - ISL_LIBS="$with_isl_builddir/libisl.la" - ;; -system) - if test "x$with_isl_prefix" != "x"; then - ISL_CPPFLAGS="-I$with_isl_prefix/include" - fi - if test "x$with_isl_exec_prefix" != "x"; then - ISL_LDFLAGS="-L$with_isl_exec_prefix/lib" - fi - ISL_LIBS="-lisl" -esac - if test $with_isl = bundled; then - BUNDLED_ISL_TRUE= - BUNDLED_ISL_FALSE='#' -else - BUNDLED_ISL_TRUE='#' - BUNDLED_ISL_FALSE= -fi - - if test $with_isl = no; then - NO_ISL_TRUE= - NO_ISL_FALSE='#' -else - NO_ISL_TRUE='#' - NO_ISL_FALSE= -fi - - - - - - - -# Check whether --with-osl was given. -if test "${with_osl+set}" = set; then : - withval=$with_osl; -fi - -case "system" in -no|system|build|bundled) - -# Check whether --with-osl_prefix was given. -if test "${with_osl_prefix+set}" = set; then : - withval=$with_osl_prefix; -fi - - -# Check whether --with-osl_exec_prefix was given. -if test "${with_osl_exec_prefix+set}" = set; then : - withval=$with_osl_exec_prefix; -fi - -esac -case "build" in -no|system|build|bundled) - -# Check whether --with-osl_builddir was given. -if test "${with_osl_builddir+set}" = set; then : - withval=$with_osl_builddir; -fi - -esac -if test "x$with_osl_prefix" != "x" -a "x$with_osl_exec_prefix" = "x"; then - with_osl_exec_prefix=$with_osl_prefix -fi -if test "x$with_osl_prefix" != "x" -o "x$with_osl_exec_prefix" != "x"; then - if test "x$with_osl" != "x" -a "x$with_osl" != "xsystem"; then - as_fn_error $? "Setting $with_osl_prefix implies use of system osl" "$LINENO" 5 - fi - with_osl="system" -fi -if test "x$with_osl_builddir" != "x"; then - if test "x$with_osl" != "x" -a "x$with_osl" != "xbuild"; then - as_fn_error $? "Setting $with_osl_builddir implies use of build osl" "$LINENO" 5 - fi - with_osl="build" - osl_srcdir=`echo @abs_srcdir@ | $with_osl_builddir/config.status --file=-` - { $as_echo "$as_me:${as_lineno-$LINENO}: osl sources in $osl_srcdir" >&5 -$as_echo "$as_me: osl sources in $osl_srcdir" >&6;} -fi -case "$with_osl" in -no|system|build|bundled) - ;; -*) - if test -d $srcdir/.git -a \ - -d $srcdir/osl -a \ - ! -d $srcdir/osl/.git; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git repo detected, but submodule osl not initialized" >&5 -$as_echo "$as_me: WARNING: git repo detected, but submodule osl not initialized" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You may want to run" >&5 -$as_echo "$as_me: WARNING: You may want to run" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule init" >&5 -$as_echo "$as_me: WARNING: git submodule init" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule update" >&5 -$as_echo "$as_me: WARNING: git submodule update" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sh autogen.sh" >&5 -$as_echo "$as_me: WARNING: sh autogen.sh" >&2;} - fi - if test -f $srcdir/osl/configure -a "no" != "no"; then - with_osl="bundled" - else - with_osl="no" - fi - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which osl to use" >&5 -$as_echo_n "checking which osl to use... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_osl" >&5 -$as_echo "$with_osl" >&6; } - - -osl_flag="OSL_SUPPORT" - - - - -case "$with_osl" in -bundled) - OSL_CPPFLAGS="-D$osl_flag -I$srcdir/osl/include -Iosl/include" - ;; -build) - OSL_CPPFLAGS="-D$osl_flag -I$osl_srcdir/include -I$with_osl_builddir/include" - OSL_LIBS="$with_osl_builddir/libosl.la" - ;; -system) - if test "x$with_osl_prefix" != "x"; then - OSL_CPPFLAGS="-D$osl_flag -I$with_osl_prefix/include" - fi - if test "x$with_osl_exec_prefix" != "x"; then - OSL_LDFLAGS="-L$with_osl_exec_prefix/lib" - fi - OSL_LIBS="-losl" -esac - if test $with_osl = bundled; then - BUNDLED_OSL_TRUE= - BUNDLED_OSL_FALSE='#' -else - BUNDLED_OSL_TRUE='#' - BUNDLED_OSL_FALSE= -fi - - if test $with_osl = no; then - NO_OSL_TRUE= - NO_OSL_FALSE='#' -else - NO_OSL_TRUE='#' - NO_OSL_FALSE= -fi - - - - -$as_echo "#define CLOOG_INT_GMP 1" >>confdefs.h - - - -if test -f $srcdir/.git/HEAD; then - GIT_INDEX="\$(top_srcdir)/.git/index" -fi - - - - - - - - - - - - - - - - - -PACKAGE_NAME="cloog-isl" -PACKAGE_CFLAGS="-DCLOOG_INT_GMP=1" - -# we need the expanded forms... -test "x$prefix" = xNONE && prefix=$ac_default_prefix -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig libname" >&5 -$as_echo_n "checking our pkgconfig libname... " >&6; } -test ".$ax_create_pkgconfig_libname" != "." || \ -ax_create_pkgconfig_libname="${PACKAGE_NAME}" -test ".$ax_create_pkgconfig_libname" != "." || \ -ax_create_pkgconfig_libname="$PACKAGE" -ax_create_pkgconfig_libname=`eval echo "$ax_create_pkgconfig_libname"` -ax_create_pkgconfig_libname=`eval echo "$ax_create_pkgconfig_libname"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_libname" >&5 -$as_echo "$ax_create_pkgconfig_libname" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig version" >&5 -$as_echo_n "checking our pkgconfig version... " >&6; } -test ".$ax_create_pkgconfig_version" != "." || \ -ax_create_pkgconfig_version="${PACKAGE_VERSION}" -test ".$ax_create_pkgconfig_version" != "." || \ -ax_create_pkgconfig_version="$VERSION" -ax_create_pkgconfig_version=`eval echo "$ax_create_pkgconfig_version"` -ax_create_pkgconfig_version=`eval echo "$ax_create_pkgconfig_version"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_version" >&5 -$as_echo "$ax_create_pkgconfig_version" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig_libdir" >&5 -$as_echo_n "checking our pkgconfig_libdir... " >&6; } -test ".$pkgconfig_libdir" = "." && \ -pkgconfig_libdir='${libdir}/pkgconfig' -ax_create_pkgconfig_libdir=`eval echo "$pkgconfig_libdir"` -ax_create_pkgconfig_libdir=`eval echo "$ax_create_pkgconfig_libdir"` -ax_create_pkgconfig_libdir=`eval echo "$ax_create_pkgconfig_libdir"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkgconfig_libdir" >&5 -$as_echo "$pkgconfig_libdir" >&6; } -test "$pkgconfig_libdir" != "$ax_create_pkgconfig_libdir" && ( -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: expanded our pkgconfig_libdir... $ax_create_pkgconfig_libdir" >&5 -$as_echo "expanded our pkgconfig_libdir... $ax_create_pkgconfig_libdir" >&6; }) - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig_libfile" >&5 -$as_echo_n "checking our pkgconfig_libfile... " >&6; } -test ".$pkgconfig_libfile" != "." || \ -pkgconfig_libfile="$ax_create_pkgconfig_libname.pc" -ax_create_pkgconfig_libfile=`eval echo "$pkgconfig_libfile"` -ax_create_pkgconfig_libfile=`eval echo "$ax_create_pkgconfig_libfile"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkgconfig_libfile" >&5 -$as_echo "$pkgconfig_libfile" >&6; } -test "$pkgconfig_libfile" != "$ax_create_pkgconfig_libfile" && ( -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: expanded our pkgconfig_libfile... $ax_create_pkgconfig_libfile" >&5 -$as_echo "expanded our pkgconfig_libfile... $ax_create_pkgconfig_libfile" >&6; }) - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our package / suffix" >&5 -$as_echo_n "checking our package / suffix... " >&6; } -ax_create_pkgconfig_suffix="$program_suffix" -test ".$ax_create_pkgconfig_suffix" != .NONE || ax_create_pkgconfig_suffix="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${PACKAGE_NAME} / ${ax_create_pkgconfig_suffix}" >&5 -$as_echo "${PACKAGE_NAME} / ${ax_create_pkgconfig_suffix}" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig description" >&5 -$as_echo_n "checking our pkgconfig description... " >&6; } -ax_create_pkgconfig_description="$PACKAGE_SUMMARY" -test ".$ax_create_pkgconfig_description" != "." || \ -ax_create_pkgconfig_description="$ax_create_pkgconfig_libname Library" -ax_create_pkgconfig_description=`eval echo "$ax_create_pkgconfig_description"` -ax_create_pkgconfig_description=`eval echo "$ax_create_pkgconfig_description"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_description" >&5 -$as_echo "$ax_create_pkgconfig_description" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig requires" >&5 -$as_echo_n "checking our pkgconfig requires... " >&6; } -ax_create_pkgconfig_requires="$PACKAGE_REQUIRES" -ax_create_pkgconfig_requires=`eval echo "$ax_create_pkgconfig_requires"` -ax_create_pkgconfig_requires=`eval echo "$ax_create_pkgconfig_requires"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_requires" >&5 -$as_echo "$ax_create_pkgconfig_requires" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig ext libs" >&5 -$as_echo_n "checking our pkgconfig ext libs... " >&6; } -ax_create_pkgconfig_pkglibs="$PACKAGE_LIBS" -test ".$ax_create_pkgconfig_pkglibs" != "." || ax_create_pkgconfig_pkglibs="-l$ax_create_pkgconfig_libname" -ax_create_pkgconfig_libs="$ax_create_pkgconfig_pkglibs $LIBS" -ax_create_pkgconfig_libs=`eval echo "$ax_create_pkgconfig_libs"` -ax_create_pkgconfig_libs=`eval echo "$ax_create_pkgconfig_libs"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_libs" >&5 -$as_echo "$ax_create_pkgconfig_libs" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig cppflags" >&5 -$as_echo_n "checking our pkgconfig cppflags... " >&6; } -ax_create_pkgconfig_cppflags="$CPPFLAGS $PACKAGE_CFLAGS" -ax_create_pkgconfig_cppflags=`eval echo "$ax_create_pkgconfig_cppflags"` -ax_create_pkgconfig_cppflags=`eval echo "$ax_create_pkgconfig_cppflags"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_cppflags" >&5 -$as_echo "$ax_create_pkgconfig_cppflags" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig ldflags" >&5 -$as_echo_n "checking our pkgconfig ldflags... " >&6; } -ax_create_pkgconfig_ldflags="$LDFLAGS $PACKAGE_LDFLAGS" -ax_create_pkgconfig_ldflags=`eval echo "$ax_create_pkgconfig_ldflags"` -ax_create_pkgconfig_ldflags=`eval echo "$ax_create_pkgconfig_ldflags"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_ldflags" >&5 -$as_echo "$ax_create_pkgconfig_ldflags" >&6; } - -test ".$ax_create_pkgconfig_generate" != "." || \ -ax_create_pkgconfig_generate="$ax_create_pkgconfig_libname.pc" -ax_create_pkgconfig_generate=`eval echo "$ax_create_pkgconfig_generate"` -ax_create_pkgconfig_generate=`eval echo "$ax_create_pkgconfig_generate"` -test "$pkgconfig_libfile" != "$ax_create_pkgconfig_generate" && ( -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: generate the pkgconfig later... $ax_create_pkgconfig_generate" >&5 -$as_echo "generate the pkgconfig later... $ax_create_pkgconfig_generate" >&6; }) - -if test ".$ax_create_pkgconfig_src_libdir" = "." ; then -ax_create_pkgconfig_src_libdir=`pwd` -ax_create_pkgconfig_src_libdir=`$as_dirname -- "$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" || -$as_expr X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(//\)[^/]' \| \ - X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(//\)$' \| \ - X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` -test ! -d $ax_create_pkgconfig_src_libdir/src || \ -ax_create_pkgconfig_src_libdir="$ax_create_pkgconfig_src_libdir/src" -case ".$objdir" in -*libs) ax_create_pkgconfig_src_libdir="$ax_create_pkgconfig_src_libdir/$objdir" ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: noninstalled pkgconfig -L $ax_create_pkgconfig_src_libdir" >&5 -$as_echo "noninstalled pkgconfig -L $ax_create_pkgconfig_src_libdir" >&6; } -fi - -if test ".$ax_create_pkgconfig_src_headers" = "." ; then -ax_create_pkgconfig_src_headers=`pwd` -v="$ac_top_srcdir" ; -test ".$v" != "." || v="$ax_spec_dir" -test ".$v" != "." || v="$srcdir" -case "$v" in /*) ax_create_pkgconfig_src_headers="" ;; esac -ax_create_pkgconfig_src_headers=`$as_dirname -- "$ax_create_pkgconfig_src_headers/$v/x" || -$as_expr X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(//\)[^/]' \| \ - X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(//\)$' \| \ - X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ax_create_pkgconfig_src_headers/$v/x" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` -test ! -d $ax_create_pkgconfig_src_headers/include || \ -ax_create_pkgconfig_src_headers="$ax_create_pkgconfig_src_headers/include" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: noninstalled pkgconfig -I $ax_create_pkgconfig_src_headers" >&5 -$as_echo "noninstalled pkgconfig -I $ax_create_pkgconfig_src_headers" >&6; } -fi - - -ac_config_commands="$ac_config_commands $ax_create_pkgconfig_generate" - - -ac_config_files="$ac_config_files Makefile test/Makefile" - -ac_config_files="$ac_config_files autoconf/Doxyfile" - -ac_config_files="$ac_config_files doc/Makefile" - -ac_config_files="$ac_config_files source/version.c" - -ac_config_files="$ac_config_files include/cloog/version.h" - -ac_config_files="$ac_config_files genversion.sh" - -ac_config_commands="$ac_config_commands version.h" - -ac_config_commands="$ac_config_commands doc/gitversion.texi" - -if test $with_isl = bundled; then - - -subdirs="$subdirs isl" - -fi -if test $with_osl = bundled; then - subdirs="$subdirs osl" - -fi - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -:mline -/\\$/{ - N - s,\\\n,, - b mline -} -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${HAVE_TEXI2DVI_TRUE}" && test -z "${HAVE_TEXI2DVI_FALSE}"; then - as_fn_error $? "conditional \"HAVE_TEXI2DVI\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${NEED_GET_MEMORY_FUNCTIONS_TRUE}" && test -z "${NEED_GET_MEMORY_FUNCTIONS_FALSE}"; then - as_fn_error $? "conditional \"NEED_GET_MEMORY_FUNCTIONS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUNDLED_ISL_TRUE}" && test -z "${BUNDLED_ISL_FALSE}"; then - as_fn_error $? "conditional \"BUNDLED_ISL\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${NO_ISL_TRUE}" && test -z "${NO_ISL_FALSE}"; then - as_fn_error $? "conditional \"NO_ISL\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${BUNDLED_OSL_TRUE}" && test -z "${BUNDLED_OSL_FALSE}"; then - as_fn_error $? "conditional \"BUNDLED_OSL\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${NO_OSL_TRUE}" && test -z "${NO_OSL_FALSE}"; then - as_fn_error $? "conditional \"NO_OSL\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by cloog $as_me 0.17.0, which was -generated by GNU Autoconf 2.67. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Configuration commands: -$config_commands - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -cloog config.status 0.17.0 -configured by $0, generated by GNU Autoconf 2.67, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' -macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' -enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' -pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' -host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' -host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' -host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' -build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' -build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' -build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' -SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' -Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' -GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' -EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' -FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' -LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' -NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' -LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' -ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' -exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' -lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' -reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' -AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' -STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' -RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' -compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' -GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' -SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' -ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' -need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' -LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' -libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' -fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' -version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' -runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' -libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' -soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' -old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' -striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# Quote evaled strings. -for var in SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -AR \ -AR_FLAGS \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -SHELL \ -ECHO \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_wl \ -lt_prog_compiler_pic \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ -hardcode_libdir_separator \ -fix_srcfile_path \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -finish_eval \ -old_striplib \ -striplib; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case \$lt_ECHO in -*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` - ;; -esac - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - - -ax_create_pkgconfig_generate="$ax_create_pkgconfig_generate" -pkgconfig_prefix='$prefix' -pkgconfig_execprefix='$exec_prefix' -pkgconfig_bindir='$bindir' -pkgconfig_libdir='$libdir' -pkgconfig_includedir='$includedir' -pkgconfig_datarootdir='$datarootdir' -pkgconfig_datadir='$datadir' -pkgconfig_sysconfdir='$sysconfdir' -pkgconfig_suffix='$ax_create_pkgconfig_suffix' -pkgconfig_package='$PACKAGE_NAME' -pkgconfig_libname='$ax_create_pkgconfig_libname' -pkgconfig_description='$ax_create_pkgconfig_description' -pkgconfig_version='$ax_create_pkgconfig_version' -pkgconfig_requires='$ax_create_pkgconfig_requires' -pkgconfig_libs='$ax_create_pkgconfig_libs' -pkgconfig_ldflags='$ax_create_pkgconfig_ldflags' -pkgconfig_cppflags='$ax_create_pkgconfig_cppflags' -pkgconfig_src_libdir='$ax_create_pkgconfig_src_libdir' -pkgconfig_src_headers='$ax_create_pkgconfig_src_headers' - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "$ax_create_pkgconfig_generate") CONFIG_COMMANDS="$CONFIG_COMMANDS $ax_create_pkgconfig_generate" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; - "autoconf/Doxyfile") CONFIG_FILES="$CONFIG_FILES autoconf/Doxyfile" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "source/version.c") CONFIG_FILES="$CONFIG_FILES source/version.c" ;; - "include/cloog/version.h") CONFIG_FILES="$CONFIG_FILES include/cloog/version.h" ;; - "genversion.sh") CONFIG_FILES="$CONFIG_FILES genversion.sh" ;; - "version.h") CONFIG_COMMANDS="$CONFIG_COMMANDS version.h" ;; - "doc/gitversion.texi") CONFIG_COMMANDS="$CONFIG_COMMANDS doc/gitversion.texi" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="" - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that does not interpret backslashes. -ECHO=$lt_ECHO - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac - - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - ;; - "$ax_create_pkgconfig_generate":C) -pkgconfig_generate="$ax_create_pkgconfig_generate" -if test ! -f "$pkgconfig_generate.in" -then generate="true" -elif grep ' generated by configure ' $pkgconfig_generate.in >/dev/null -then generate="true" -else generate="false"; -fi -if $generate ; then -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $pkgconfig_generate.in" >&5 -$as_echo "$as_me: creating $pkgconfig_generate.in" >&6;} -cat > $pkgconfig_generate.in <&5 -$as_echo "$as_me: creating $pkgconfig_generate" >&6;} -cat >conftest.sed < $pkgconfig_generate -if test ! -s $pkgconfig_generate ; then - as_fn_error $? "$pkgconfig_generate is empty" "$LINENO" 5 -fi ; rm conftest.sed # DONE generate $pkgconfig_generate -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.pc/'` -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $pkgconfig_uninstalled" >&5 -$as_echo "$as_me: creating $pkgconfig_uninstalled" >&6;} -cat >conftest.sed < $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - as_fn_error $? "$pkgconfig_uninstalled is empty" "$LINENO" 5 -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled - pkgconfig_requires_add=`echo ${pkgconfig_requires}` -if test ".$pkgconfig_requires_add" != "." ; then - pkgconfig_requires_add="pkg-config $pkgconfig_requires_add" - else pkgconfig_requires_add=":" ; fi -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.sh/'` -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $pkgconfig_uninstalled" >&5 -$as_echo "$as_me: creating $pkgconfig_uninstalled" >&6;} -cat >conftest.sed <Name:>for option\\; do case \"\$option\" in --list-all|--name) echo > -s>Description: *>\\;\\; --help) pkg-config --help \\; echo Buildscript Of > -s>Version: *>\\;\\; --modversion|--version) echo > -s>Requires:>\\;\\; --requires) echo $pkgconfig_requires_add> -s>Libs: *>\\;\\; --libs) echo > -s>Cflags: *>\\;\\; --cflags) echo > -/--libs)/a\\ - $pkgconfig_requires_add -/--cflags)/a\\ - $pkgconfig_requires_add\\ -;; --variable=*) eval echo '\$'\`echo \$option | sed -e 's/.*=//'\`\\ -;; --uninstalled) exit 0 \\ -;; *) ;; esac done -AXEOF -sed -f conftest.sed $pkgconfig_generate.in > $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - as_fn_error $? "$pkgconfig_uninstalled is empty" "$LINENO" 5 -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled - ;; - "genversion.sh":F) chmod +x genversion.sh ;; - "version.h":C) echo '#define CLOOG_HEAD "'`./genversion.sh`'"' > version.h ;; - "doc/gitversion.texi":C) echo '@set VERSION '`./genversion.sh`'' > doc/gitversion.texi ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - - ac_configure_args="$ac_configure_args $cloog_configure_args" - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi - -# -# CONFIG_SUBDIRS section. -# -if test "$no_recursion" != yes; then - - # Remove --cache-file, --srcdir, and --disable-option-checking arguments - # so they do not pile up. - ac_sub_configure_args= - ac_prev= - eval "set x $ac_configure_args" - shift - for ac_arg - do - if test -n "$ac_prev"; then - ac_prev= - continue - fi - case $ac_arg in - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ - | --c=*) - ;; - --config-cache | -C) - ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - ;; - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - ;; - --disable-option-checking) - ;; - *) - case $ac_arg in - *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append ac_sub_configure_args " '$ac_arg'" ;; - esac - done - - # Always prepend --prefix to ensure using the same prefix - # in subdir configurations. - ac_arg="--prefix=$prefix" - case $ac_arg in - *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" - - # Pass --silent - if test "$silent" = yes; then - ac_sub_configure_args="--silent $ac_sub_configure_args" - fi - - # Always prepend --disable-option-checking to silence warnings, since - # different subdirs can have different --enable and --with options. - ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" - - ac_popdir=`pwd` - for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue - - # Do not complain, so a configure script can configure whichever - # parts of a large source tree are present. - test -d "$srcdir/$ac_dir" || continue - - ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" - $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 - $as_echo "$ac_msg" >&6 - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - cd "$ac_dir" - - # Check for guested configure; otherwise get Cygnus style configure. - if test -f "$ac_srcdir/configure.gnu"; then - ac_sub_configure=$ac_srcdir/configure.gnu - elif test -f "$ac_srcdir/configure"; then - ac_sub_configure=$ac_srcdir/configure - elif test -f "$ac_srcdir/configure.in"; then - # This should be Cygnus configure. - ac_sub_configure=$ac_aux_dir/configure - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 -$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} - ac_sub_configure= - fi - - # The recursion is here. - if test -n "$ac_sub_configure"; then - # Make the cache file name correct relative to the subdirectory. - case $cache_file in - [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; - *) # Relative name. - ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 -$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} - # The eval makes quoting arguments work. - eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ - --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || - as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 - fi - - cd "$ac_popdir" - done -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - - -echo " /*-----------------------------------------------*" -echo " * CLooG configuration is OK *" -echo " *-----------------------------------------------*/" -echo "It appears that your system is OK to start CLooG compilation. You need" -echo "now to type \"make\". After compilation, you should check CLooG by typing" -echo "\"make check\". If no problem occur, you can type \"make uninstall\" if" -echo "you are upgrading an old version. Lastly type \"make install\" to install" -echo "CLooG on your system (log as root if necessary)." diff --git a/cloog-0.17.0/configure.ac b/cloog-0.17.0/configure.ac deleted file mode 100644 index e7001d3..0000000 --- a/cloog-0.17.0/configure.ac +++ /dev/null @@ -1,263 +0,0 @@ - -dnl /**-------------------------------------------------------------------** -dnl ** CLooG ** -dnl **-------------------------------------------------------------------** -dnl ** configure.ac ** -dnl **-------------------------------------------------------------------** -dnl ** First version: august 7th 2002 ** -dnl **-------------------------------------------------------------------**/ -dnl -dnl Input file for autoconf to build a configuration shellscript. -dnl To build the configure script from the CLooG's top-level directory, use -dnl autoconf -l autoconf autoconf/configure.in > configure -dnl if it doesn't work (invalid option -l) try -I instead -dnl autoconf -I autoconf autoconf/configure.in > configure - -dnl /************************************************************************** -dnl * CLooG : the Chunky Loop Generator (experimental) * -dnl *************************************************************************** -dnl * * -dnl * Copyright (C) 2001 Cedric Bastoul * -dnl * * -dnl * This library is free software; you can redistribute it and/or * -dnl * modify it under the terms of the GNU Lesser General Public * -dnl * License as published by the Free Software Foundation; either * -dnl * version 2.1 of the License, or (at your option) any later version. * -dnl * * -dnl * This library is distributed in the hope that it will be useful, * -dnl * but WITHOUT ANY WARRANTY; without even the implied warranty of * -dnl * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -dnl * Lesser General Public License for more details. * -dnl * * -dnl * You should have received a copy of the GNU Lesser General Public * -dnl * License along with this library; if not, write to the Free Software * -dnl * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -dnl * Boston, MA 02110-1301 USA * -dnl * * -dnl * CLooG, the Chunky Loop Generator * -dnl * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -dnl * * -dnl ***************************************************************************/ - -m4_define([version_major], [0]) -m4_define([version_minor], [17]) -m4_define([version_revision], [0]) - -AC_PREREQ(2.53) -AC_INIT([cloog], [version_major.version_minor.version_revision], - [cloog-development@googlegroups.com]) -AC_CONFIG_SRCDIR(source/cloog.c) -AC_CONFIG_AUX_DIR(autoconf) -AC_CONFIG_MACRO_DIR([m4]) - -VERSION_MAJOR=version_major -VERSION_MINOR=version_minor -VERSION_REVISION=version_revision -AC_SUBST(versioninfo) -versioninfo=3:0:0 - -AM_INIT_AUTOMAKE([foreign]) -m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) - -dnl /************************************************************************** -dnl * Checking * -dnl **************************************************************************/ - -dnl Checks for programs. -AC_PROG_CC -AC_PROG_LN_S -AC_PROG_MAKE_SET -AC_CHECK_PROG(CD, cd) -dnl Configure needs an empty install.sh file with this, i HATE that... -AC_PROG_INSTALL -AC_PROG_LIBTOOL -AC_CHECK_PROG(TEXI2DVI, texi2dvi, texi2dvi, []) -AM_CONDITIONAL(HAVE_TEXI2DVI, test -n "$TEXI2DVI") - -AX_CC_MAXOPT -AC_SUBST(CFLAGS_WARN) -AX_CFLAGS_WARN_ALL(CFLAGS_WARN) - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_SIZE_T - - - -dnl Checks for header files. -AC_HEADER_STDC - - -dnl Checks for library functions. -AC_CHECK_FUNCS(strtol) - - -dnl /************************************************************************** -dnl * Option setting * -dnl **************************************************************************/ - -AC_CHECK_FUNCS([getrusage], - [AC_DEFINE([CLOOG_RUSAGE], [], [Print time required to generate code])]) - -AX_SUBMODULE(isl,no|system|build|bundled,bundled) -BITS="gmp" - -dnl /************************************************************************** -dnl * Where is GMP? * -dnl **************************************************************************/ - -AX_SUBMODULE(gmp,system|build,system) - -need_get_memory_functions=false -case "$with_gmp" in -build) - CPPFLAGS="-I$with_gmp_builddir $CPPFLAGS" - LDFLAGS="-L$with_gmp_builddir/$lt_cv_objdir $LDFLAGS" - ;; -system) - if test "x$with_gmp_prefix" != "x"; then - CPPFLAGS="-I$with_gmp_prefix/include $CPPFLAGS" - fi - - if test "$with_gmp_exec_prefix" != "yes" ; then - LDFLAGS="-L$with_gmp_exec_prefix/lib $LDFLAGS" - fi - ;; -esac -case "$with_gmp" in -build|system) - AC_CHECK_HEADER(gmp.h, - [], - [AC_MSG_ERROR(Can't find gmp headers.)]) - AC_CHECK_LIB(gmp, - __gmpz_init, - [LIBS="$LIBS -lgmp"], - [AC_MSG_ERROR(Can't find gmp library.)]) - AC_CHECK_DECLS(mp_get_memory_functions,[],[ - need_get_memory_functions=true - ],[#include ]) - ;; -esac -AM_CONDITIONAL(NEED_GET_MEMORY_FUNCTIONS, - test x$need_get_memory_functions = xtrue) - -dnl /************************************************************************** -dnl * Where is isl? * -dnl **************************************************************************/ - -AC_SUBST(ISL_CPPFLAGS) -AC_SUBST(ISL_LDFLAGS) -AC_SUBST(ISL_LIBS) -case "$with_isl" in -bundled) - ISL_CPPFLAGS="-I$srcdir/isl/include -Iisl/include" - ;; -build) - ISL_CPPFLAGS="-I$isl_srcdir/include -I$with_isl_builddir/include" - ISL_LIBS="$with_isl_builddir/libisl.la" - ;; -system) - if test "x$with_isl_prefix" != "x"; then - ISL_CPPFLAGS="-I$with_isl_prefix/include" - fi - if test "x$with_isl_exec_prefix" != "x"; then - ISL_LDFLAGS="-L$with_isl_exec_prefix/lib" - fi - ISL_LIBS="-lisl" -esac -AM_CONDITIONAL(BUNDLED_ISL, test $with_isl = bundled) -AM_CONDITIONAL(NO_ISL, test $with_isl = no) - - -dnl /************************************************************************** -dnl * Where is the OpenScop Library? * -dnl **************************************************************************/ - -AX_SUBMODULE(osl,no|system|build|bundled,no) -osl_flag="OSL_SUPPORT" - -AC_SUBST(OSL_CPPFLAGS) -AC_SUBST(OSL_LDFLAGS) -AC_SUBST(OSL_LIBS) -case "$with_osl" in -bundled) - OSL_CPPFLAGS="-D$osl_flag -I$srcdir/osl/include -Iosl/include" - ;; -build) - OSL_CPPFLAGS="-D$osl_flag -I$osl_srcdir/include -I$with_osl_builddir/include" - OSL_LIBS="$with_osl_builddir/libosl.la" - ;; -system) - if test "x$with_osl_prefix" != "x"; then - OSL_CPPFLAGS="-D$osl_flag -I$with_osl_prefix/include" - fi - if test "x$with_osl_exec_prefix" != "x"; then - OSL_LDFLAGS="-L$with_osl_exec_prefix/lib" - fi - OSL_LIBS="-losl" -esac -AM_CONDITIONAL(BUNDLED_OSL, test $with_osl = bundled) -AM_CONDITIONAL(NO_OSL, test $with_osl = no) - - -AC_DEFINE([CLOOG_INT_GMP], 1, [Use arbitrary precision integers]) - -AC_SUBST(GIT_INDEX) -if test -f $srcdir/.git/HEAD; then - GIT_INDEX="\$(top_srcdir)/.git/index" -fi - - -dnl /************************************************************************** -dnl * Substitutions * -dnl **************************************************************************/ - - -dnl Substitutions to do in Makefile.in. -AC_SUBST(CC) -AC_SUBST(LN_S) - -AC_SUBST(prefix) -AC_SUBST(exec_prefix) -AC_SUBST(INSTALL) - -AC_SUBST(BITS) - -AC_SUBST(VERSION_MAJOR) -AC_SUBST(VERSION_MINOR) -AC_SUBST(VERSION_REVISION) - -PACKAGE_NAME="cloog-isl" -PACKAGE_CFLAGS="-DCLOOG_INT_GMP=1" -AX_CREATE_PKGCONFIG_INFO - -AC_CONFIG_FILES(Makefile test/Makefile) -AC_CONFIG_FILES(autoconf/Doxyfile) -AC_CONFIG_FILES(doc/Makefile) -AC_CONFIG_FILES(source/version.c) -AC_CONFIG_FILES(include/cloog/version.h) -AC_CONFIG_FILES([genversion.sh], [chmod +x genversion.sh]) -AC_CONFIG_COMMANDS([version.h], - [echo '#define CLOOG_HEAD "'`./genversion.sh`'"' > version.h]) -AC_CONFIG_COMMANDS([doc/gitversion.texi], - [echo '@set VERSION '`./genversion.sh`'' > doc/gitversion.texi]) -if test $with_isl = bundled; then - AC_CONFIG_SUBDIRS(isl) -fi -if test $with_osl = bundled; then - AC_CONFIG_SUBDIRS(osl) -fi -AC_CONFIG_COMMANDS_POST([ - ac_configure_args="$ac_configure_args $cloog_configure_args" -]) -AC_OUTPUT - - -echo " /*-----------------------------------------------*" -echo " * CLooG configuration is OK *" -echo " *-----------------------------------------------*/" -echo "It appears that your system is OK to start CLooG compilation. You need" -echo "now to type \"make\". After compilation, you should check CLooG by typing" -echo "\"make check\". If no problem occur, you can type \"make uninstall\" if" -echo "you are upgrading an old version. Lastly type \"make install\" to install" -echo "CLooG on your system (log as root if necessary)." diff --git a/cloog-0.17.0/doc/Makefile.am b/cloog-0.17.0/doc/Makefile.am deleted file mode 100644 index 160dfd1..0000000 --- a/cloog-0.17.0/doc/Makefile.am +++ /dev/null @@ -1,7 +0,0 @@ -if HAVE_TEXI2DVI -cloog.pdf: cloog.texi gitversion.texi - $(TEXI2DVI) --pdf $< -endif - -gitversion.texi: @GIT_INDEX@ - echo '@set VERSION '`$(top_builddir)/genversion.sh`'' > $@ diff --git a/cloog-0.17.0/doc/Makefile.in b/cloog-0.17.0/doc/Makefile.in deleted file mode 100644 index 7eae5d6..0000000 --- a/cloog-0.17.0/doc/Makefile.in +++ /dev/null @@ -1,387 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = doc -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in TODO -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/ax_submodule.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BITS = @BITS@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CD = @CD@ -CFLAGS = @CFLAGS@ -CFLAGS_WARN = @CFLAGS_WARN@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIT_INDEX = @GIT_INDEX@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -ISL_CPPFLAGS = @ISL_CPPFLAGS@ -ISL_LDFLAGS = @ISL_LDFLAGS@ -ISL_LIBS = @ISL_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OSL_CPPFLAGS = @OSL_CPPFLAGS@ -OSL_LDFLAGS = @OSL_LDFLAGS@ -OSL_LIBS = @OSL_LIBS@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TEXI2DVI = @TEXI2DVI@ -VERSION = @VERSION@ -VERSION_MAJOR = @VERSION_MAJOR@ -VERSION_MINOR = @VERSION_MINOR@ -VERSION_REVISION = @VERSION_REVISION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfig_libdir = @pkgconfig_libdir@ -pkgconfig_libfile = @pkgconfig_libfile@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -subdirs = @subdirs@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -versioninfo = @versioninfo@ -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign doc/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - -@HAVE_TEXI2DVI_TRUE@cloog.pdf: cloog.texi gitversion.texi -@HAVE_TEXI2DVI_TRUE@ $(TEXI2DVI) --pdf $< - -gitversion.texi: @GIT_INDEX@ - echo '@set VERSION '`$(top_builddir)/genversion.sh`'' > $@ - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.17.0/doc/TODO b/cloog-0.17.0/doc/TODO deleted file mode 100644 index 152c82d..0000000 --- a/cloog-0.17.0/doc/TODO +++ /dev/null @@ -1,58 +0,0 @@ -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** The Chunky Loop Generator ** -# **-------------------------------------------------------------------** -# ** First version of this file: april 29th 2005 ** -# **-------------------------------------------------------------------**/ -# - -This file is mainly for the authors, in order to put ideas, requests, and -work-in-progress notes. - -# **-------------------------------------------------------------------** -# ** I. Requested features ** -# **-------------------------------------------------------------------**/ - -1. GMP !!! (LooPo Team). -DOOOOOOOOOOOOOOOOOOOOOOOOONE !!!!!!!!!!!!!!!!! - -2. Set the statement prefix (Michael Classen). - -3. Do not fuse the iterators/scattering dimension names lists (Hadda Cheroun). -DOOOOOOOOOOOOOOOOOOOOOOOOONE !!!!!!!!!!!!!!!!! - -4. Exploit URUK transformation properties (WRAP-IT Team). -DOOOOOOOOOOOOOOOOOOOOOOOOONE !!!!!!!!!!!!!!!!! - - -# **-------------------------------------------------------------------** -# ** II. Known bugs ** -# **-------------------------------------------------------------------**/ - -1. Lead to segfault : -cloog ./test/daegon_lu_osp.cloog -f 3 -l 6 -nobacktrack -override -(while every other -l values do not !) -DOOOOOOOOOOOOOOOOOOOOOOOOONE !!!!!!!!!!!!!!!!! - -2. -strides gives bad result for a dreamup or interpolation-duration file in -test/non_optimal (I don't remember which one) - -3. Various configure problems (check Sylvain Girbal mails in the mailbox !). -DOOOOOOOOOOOOOOOOOOOOOOOOONE !!!!!!!!!!!!!!!!! - -4. With GMP, try test/emploi.cloog (with valgrind): a memory leak... -DOOOOOOOOOOOOOOOOOOOOOOOOONE !!!!!!!!!!!!!!!!! - -5. With GMP, option -cpp do not write all the statement internal stuff -(e.g., S1(,,) ; instead of S1(i,j,k) ;). -DOOOOOOOOOOOOOOOOOOOOOOOOONE !!!!!!!!!!!!!!!!! - -# **-------------------------------------------------------------------** -# ** III. Various notes ** -# **-------------------------------------------------------------------**/ - -Kill the cat. - - diff --git a/cloog-0.17.0/doc/cloog.pdf b/cloog-0.17.0/doc/cloog.pdf deleted file mode 100644 index af0750fc99f2b75032dd08c3e7c88008719af21e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273287 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%0Aazb3J`SssY;IxzS3gPqe=BOb;YFZR1|p!&wl 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 w2-~<2|Xk=;)~G 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%0As@%lfKhigMt!lpM zzi7#o*guuhbN)*xck(cN_T>G2xbw@4=_Qfh&Pjf6Sa(Oh=<>hIv*g}t6kXpm)og+s zQ}eN>S%)snPge3>vgr1kj53j1El&E}i9F^{p8wvK+FMic{95kAMmrn6w8uX?Uza}2 zDnB&qMRog=vM~9@`~qvGCkReE`=CqnUFp*IJ6>d0-i)`tdf({6e6F6E+Y|D){&3~2 z+@fl^aH&mR)`@kx<+qm2efca~TcQ1+&BgF&?`ee+E1gffgkS1YP~Y(G(cQhj{li(N z|Mxrj?yS0(fK@q%O#GfA3;y+W@!qRA_kDS#+PD4)-*2btHD+pDHaYI!OLQik;R{>s zxus+Elk)Ui+LM_RjB0)Yu)_c=d)7!Pp5%R|4(C{8`ITyE?RTCCr+xnBr&s|v+m5bLk{T^ z3*>LsN{dYMPhS0_NJs1TrOWs3#z`->qPr! zM_&57WEV}XUpaM^;{y-VGj4jk%4c5%gj%^)DljCKZk}sXFWZWXverl z@ZKz^ic2>lIj%nybl-Q-C_3gxc4OM|z_$L*Es<$OnXG$$ugd$o@r15J!498a(@u9X zG<>`4d*qJ0#+CWATn%?zYi6iX<>>+it_Sn@Zs z#((>D;___^p%?e(GVN%;ra)Bb1pcDwHZ6~7eDQ0ndU4l?7#90=hy4c zJjBG)E}fp6>kstw{;dJnMU9#k+k+ zNt;-A&K!@YR~}bfEr0B8H|5Uhm1X7cJM*l-hC_NeXLrVIitumB?%e&f z;-SMF|8t!kDn&cggCE@}Furl>%emmx^50z1?J1l_;u-S1a zsd*{IB}J);xgb`4QWlq~sR5SDObkto4PdvI7%7;U7{jkNLB7kx+{C~Pe3gj;;k!(F z%UDB%-`uuSHMCkX(Nkk@FWbvJPtKKwW)d3@O2{f{sA{fM(Dcw))yZrZ~y%FxpOz?J>T_s=lbXS-aYU6zH4FUhE2-17}qtrCAKOmB}6V*wQr+{ z0FRh3W3wyco;}Mv)=2;17dcSP-uKaIQQ)TkiQz{NER2v@#&-14oi7(P7W8eG7Eoeq z@i^tQB;{bj0u2eB&(oEql(|Eie<{c|{!(&~HQ{>4`XJP``bY8vzjG0HH0yO6YYgfX zT-@BeUX)t|+?4HeJhVV#ft|=}p7P^!IhuDd`d%bxrjCGIvh`4zt(0d z{VwE~JV)e5Yr{T|HO3bt-mxD4aX_|l{|hGG1@AuGKjOl$$00a<$#wY+oKlTnTaz9* z$UJCkIT#qXgCT#4vJCT)xx6M9uQA{I*0A_r!L{Fq9XWnHzsjJfG-3bczmk8o1%$WylcBaqh93{XNSYCgN@rwzqo9ui%?V$dHUnD;Hzh?$BsJJF7Pm4!F=vv`NMz( zZJPuIx*mU5x7L?nd)fF^=%drFzeyawrm~fve5K(Yx@EVuOzT&sKdbzCI~xxdY=6i9 z>uy-M$SrZvAIGH{T`ZOA0t>!;W0<*c!n}J0xm)dR3j`j>pW*Cd^=denpebn}@Q$

4iIhxf7! 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

*nijND^%H>&Jrl+p{ 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 WilWpsE+cb8Gh<^eRaIAiH!c98Ku{$B diff --git a/cloog-0.17.0/doc/cloog.texi b/cloog-0.17.0/doc/cloog.texi deleted file mode 100644 index 4dd2f7a..0000000 --- a/cloog-0.17.0/doc/cloog.texi +++ /dev/null @@ -1,2571 +0,0 @@ -\input texinfo -@c % -@c % /**-----------------------------------------------------------------** -@c % ** CLooG ** -@c % **-----------------------------------------------------------------** -@c % ** cloog.texi ** -@c % **-----------------------------------------------------------------** -@c % ** First version: july 6th 2002 ** -@c % **-----------------------------------------------------------------**/ -@c % -@c % release 1.0: September 17th 2002 -@c % release 1.1: December 5th 2002 -@c % release 1.2: April 22th 2003 -@c % release 2.0: November 21th 2005 (and now in texinfo instead of LaTeX) -@c % release 2.1: October 15th 2007 -@c % -@c %/************************************************************************** -@c % * CLooG : the Chunky Loop Generator (experimental) * -@c % **************************************************************************/ -@c %/* CAUTION: the English used is probably the worst you ever read, please -@c % * feel free to correct and improve it ! -@c % */ - -@c %\textit{"I found the ultimate transformation functions, optimization for -@c %static control programs is now a closed problem, I have \textnormal{just} -@c %to generate the target code !"} - - - -@c % /************************************************************************* -@c % * PART I: HEADER * -@c % *************************************************************************/ -@c %**start of header -@setfilename cloog.info -@settitle CLooG - a loop generator for scanning polyhedra - -@set EDITION 2.1 -@include gitversion.texi -@set UPDATED October 15th 2007 -@setchapternewpage odd - -@c %**end of header - -@c % /************************************************************************* -@c % * PART II: SUMMARY DESCRIPTION AND COPYRIGHT * -@c % *************************************************************************/ - -@copying -This manual is for CLooG version @value{VERSION}, a software -which generates loops for scanning Z-polyhedra. That is, CLooG produces a -code visiting each integral point of a union of parametrized -polyhedra. CLooG is designed to avoid control overhead and to produce a very -efficient code. - -It would be quite kind to refer the following paper in any publication that -results from the use of the CLooG software or its library: - -@example -@@InProceedings@{Bas04, -@ @ author =@ @ @ @ @{C. Bastoul@}, -@ @ title =@ @ @ @ @ @{Code Generation in the Polyhedral Model -@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Is Easier Than You Think@}, -@ @ booktitle = @{PACT'13 IEEE International Conference on -@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ Parallel Architecture and Compilation Techniques@}, -@ @ year =@ @ @ @ @ @ 2004, -@ @ pages =@ @ @ @ @ @{7--16@}, -@ @ month =@ @ @ @ @ @{september@}, -@ @ address =@ @ @ @{Juan-les-Pins@} -@} -@end example - -Copyright @copyright{} 2002-2005 C@'edric Bastoul. - -@c quotation -Permission is granted to copy, distribute and/or modify this document under -the terms of the GNU Free Documentation License, Version 1.2 -published by the Free Software Foundation. To receive a copy of the -GNU Free Documentation License, write to the Free Software Foundation, Inc., -59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -@c end quotation -@end copying - -@c % /************************************************************************* -@c % * PART III: TITLEPAGE, CONTENTS, COPYRIGHT * -@c % *************************************************************************/ -@titlepage -@title CLooG -@subtitle A Loop Generator For Scanning Polyhedra -@subtitle Edition @value{EDITION}, for CLooG @value{VERSION} -@subtitle @value{UPDATED} -@author C@'edric Bastoul - -@c The following two commands start the copyright page. -@page -@noindent (September 2001) -@table @code -@item C@'edric Bastoul -SCHEDULES GENERATE !!! I just need to apply them now, where can I find -a good code generator ?! - -@item Paul Feautrier -Hmmm. I fear that if you want something powerful enough, you'll have to -write it yourself ! -@end table - -@vskip 0pt plus 1filll -@insertcopying -@end titlepage - -@c Output the table of contents at the beginning. -@contents - -@c % /************************************************************************* -@c % * PART IV: TOP NODE AND MASTER MENU * -@c % *************************************************************************/ -@ifnottex -@node Top -@top CLooG - -@insertcopying -@end ifnottex - -@menu -* Introduction:: -* CLooG Software:: -* CLooG Library:: -@c * Hacking:: -* Installing:: -* Documentation:: -* References:: -@end menu - - - -@c % /************************************************************************* -@c % * PART V: BODY OF THE DOCUMENT * -@c % *************************************************************************/ - -@c % ****************************** INTRODUCTION ****************************** -@node Introduction -@chapter Introduction -CLooG is a free software and library generating loops for scanning Z-polyhedra. -That is, it finds a code (e.g. in C, FORTRAN...) that reaches each integral -point of one or more parameterized polyhedra. CLooG has been originally -written to solve the code generation problem for optimizing compilers based on -the polytope model. Nevertheless it is used now in various area, e.g., to build -control automata for high-level synthesis or to find the best polynomial -approximation of a function. CLooG may help in any situation where scanning -polyhedra matters. It uses the best state-of-the-art code generation -algorithm known as the Quiller@'e et al. algorithm (@pxref{Qui00}) -with our own improvements and extensions (@pxref{Bas04}). -The user has full control on generated code quality. -On one hand, generated code size has to be tuned for sake of -readability or instruction cache use. On the other hand, we must ensure that -a bad control management does not hamper performance of the generated code, -for instance by producing redundant guards or complex loop bounds. -CLooG is specially designed to avoid control overhead and to produce a very -efficient code. - -CLooG stands for @emph{Chunky Loop Generator}: it is a part of the Chunky -project, a research tool for data locality improvement (@pxref{Bas03a}). -It is designed -also to be the back-end of automatic parallelizers like LooPo (@pxref{Gri04}). -Thus it is very -compilable code oriented and provides powerful program transformation -facilities. Mainly, it allows the user to specify very general schedules where, -e.g., unimodularity or invertibility of the transformation doesn't matter. - -The current version is still under -evaluation, and there is no guarantee that the upward compatibility -will be respected (but the previous API has been stable for two years, -we hope this one will be as successful -and we believe it-). -A lot of reports are necessary to freeze the library -API and the input file shape. Most API changes from 0.12.x to 0.14.x -have been requested by the users themselves. -Thus you are very welcome and encouraged -to post reports on bugs, wishes, critics, comments, suggestions or -successful experiences in the forum of @code{http://www.CLooG.org} -or to send them to cedric.bastoul@@inria.fr directly. - -@menu -* Basics:: -* Scattering:: -@end menu - -@node Basics -@section Basically, what's the point ? -If you want to use CLooG, this is because you want to scan or to find -something inside the integral points of a set of polyhedra. There are many -reasons for that. Maybe you need the generated code itself because it -actually implements a very smart program transformation you found. -Maybe you want to use the generated code -because you know that the solution of your problem belongs to the integral -points of those damned polyhedra and you don't know which one. Maybe you just -want to know if a polyhedron has integral points depending on some parameters, -which is the lexicographic minimum, maximum, the third on the basis of the -left etc. Probably you have your own reasons to use CLooG. - -Let us illustrate a basic use of CLooG. Suppose we have a set of affine -constraints that describes a part of a whatever-dimensional space, -called a @strong{domain}, and we -want to scan it. Let us consider for instance the following set of constraints -where @samp{i} -and @samp{j} are the unknown (the two dimensions of the space) and -@samp{m} and @samp{n} are the parameters (some symbolic constants): -@example -@group -2<=i<=n -2<=j<=m -j<=n+2-i -@end group -@end example -Let us also consider that we have a partial knowledge of the parameter values, -called the @strong{context}, expressed as affine constraints as well, -for instance: -@example -@group -m>=2 -n>=2 -@end group -@end example -Note that using parameters is optional, if you are not comfortable with -parameter manipulation, just replace them with any scalar value that fits -@code{m>=2} and @code{n>=2}. -A graphical representation of this part of the 2-dimensional space, where -the integral points are represented using heavy dots would be for instance: - -@image{images/basic,6cm} - -The affine constraints of both the domain and the context are what we will -provide to CLooG as input (in a particular shape that will be described later). -The output of CLooG is a pseudo-code to scan the integral points of the -input domain according to the context: -@example -@group -for (i=2;i<=n;i++) @{ - for (j=2;j<=min(m,-i+n+2);j++) @{ - S1(i,j) ; - @} -@} -@end group -@end example -If you felt such a basic example is yet interesting, there is a good chance -that CLooG is appropriate for you. CLooG can do much more: scanning several -polyhedra or unions of polyhedra at the same time, applying general affine -transformations to the polyhedra, generate compilable code etc. Welcome -to the CLooG's user's guide ! - -@node Scattering -@section Defining a Scanning Order: Scattering Functions -In CLooG, domains only define the set of integral points to scan and their -coordinates. In particular, CLooG is free to choose the scanning order for -generating the most efficient code. This means, for optimizing/parallelizing -compiler people, that CLooG doesn't make any speculation on dependences on and -between statements (by the way, it's not its job !). -For instance, if an user give to -CLooG only two domains @code{S1:1<=i<=n}, @code{S2:1<=i<=n} and the context -@code{n>=1}, the following pseudo-codes are considered to be equivalent: - -@example -@group -/* A convenient target pseudo-code. */ -for (i=1;i<=N;i++) @{ - S1(i) ; -@} -for (i=1;i<=N;i++) @{ - S2(i) ; -@} -@end group -@end example - -@example -@group -/* Another convenient target pseudo-code. */ -for (i=1;i<=N;i++) @{ - S1(i) ; - S2(i) ; -@} -@end group -@end example - -The default behaviour -of CLooG is to generate the second one, since it is optimized in control. -It is right if there are no data dependences -between @code{S1} and @code{S2}, but wrong otherwise. - -Thus it is often useful to force scanning to respect a given order. This can be -done in CLooG by using @strong{scattering functions}. Scattering is a -shortcut for scheduling, allocation, chunking functions and the like we can -find in the restructuring compilation literature. There are a lot of reasons -to scatter the integral points of the domains (i.e. the statement instances -of a program, for compilation people), parallelization or optimization are good -examples. For instance, if the user wants for any reason to set some -precedence constraints between the statements of our example above -in order to force the generation of the -first code, he can do it easily by setting (for example) the following -scheduling functions: - -@tex -$$\theta _{S1}(i) = (1)$$ -$$\theta _{S2}(j) = (2)$$ -@end tex - -@ifnottex -@example -@group -T_S1(i) = (1) -T_S2(j) = (2) -@end group -@end example -@end ifnottex - -This scattering means that each integral point of the domain @code{S1} -is scanned at logical date @code{1} while each integral point of the domain -@code{S2} is scanned at logical date @code{2}. As a result, the whole -domain @code{S1} is scanned before domain @code{S2} and the first code in our -example is generated. - -The user can set every kind of affine scanning order thanks to the -scattering functions. Each domain has its own scattering function and -each scattering function may be multi-dimensional. A multi-dimensional logical -date may be seen as classical date (year,month,day,hour,minute,etc.) where -the first dimensions are the most significant. Each scattering dimension -may depend linearly on the original dimensions (e.g., @code{i}), the -parameters (e.g., @code{n}) ans scalars (e.g., @code{2}). - -A very useful example of multi-dimensional scattering functions is, for -compilation people, the scheduling of the original program. -The basic data to use for code generation are statement iteration domains. -As we saw, these data are not sufficient to rebuild the original -program (what is the ordering between instances of different statements ?). -The missing data can be put in the scattering functions as the original -scheduling. The method to compute it is quite simple (@pxref{Fea92}). The idea is to -build an abstract syntax tree of the program and to read the scheduling for -each statement. For instance, let us consider the following implementation of -a Cholesky factorization: - -@example -@group -/* A Cholesky factorization kernel. */ -for (i=1;i<=N;i++) @{ - for (j=1;j<=i-1;j++) @{ - a[i][i] -= a[i][j] ; /* S1 */ - @} - a[i][i] = sqrt(a[i][i]) ; /* S2 */ - for (j=i+1;j<=N;j++) @{ - for (k=1;k<=i-1;k++) @{ - a[j][i] -= a[j][k]*a[i][k] ; /* S3 */ - @} - a[j][i] /= a[i][i] ; /* S4 */ - @} - @} -@} -@end group -@end example - -The corresponding abstract syntax tree is given in the following figure. -It directly gives the scattering functions (schedules) for all the -statements of the program. - -@image{images/tree,6cm} - -@tex -$$ -\hbox{$ \cases{ \theta _{S1}(i,j)^T &$= (0,i,0,j,0)^T$\cr - \theta _{S2}(i) &$= (0,i,1)^T$\cr - \theta _{S3}(i,j,k)^T &$= (0,i,2,j,0,k,0)^T$\cr - \theta _{S4}(i,j)^T &$= (0,i,2,j,1)^T$}$} -$$ -@end tex - -@ifnottex -@example -@group -T_S1(i,j)^T = (0,i,0,j,0)^T -T_S2(i) = (0,i,1)^T -T_S3(i,j,k)^T = (0,i,2,j,0,k,0)^T -T_S4(i,j)^T = (0,i,2,j,1)^T -@end group -@end example -@end ifnottex - -These schedules depend on the iterators and give for each instance of each -statement a unique execution date. Using such scattering functions allow -CLooG to re-generate the input code. - - - - - -@c % ***********************Using the CLooG Software ************************** -@node CLooG Software -@chapter Using the CLooG Software - - -@menu -* A First Example:: -* Writing The Input File:: -* Calling CLooG:: -* CLooG Options:: -* Full Example:: -@end menu - -@c %/************************************************************************* -@c % * A FIRST EXAMPLE * -@c % *************************************************************************/ -@node A First Example -@section A First Example -CLooG takes as input a file that must be written accordingly to a grammar -described in depth in a further section (@pxref{Writing The Input File}). -Moreover it supports many options to tune the target code presentation or -quality as discussed in a dedicated section (@pxref{Calling CLooG}). -However, a basic use -of CLooG is not very complex and we present in this section how to generate the -code corresponding to a basic example discussed earlier (@pxref{Basics}). - -The problem is to find the code that scans a 2-dimensional polyhedron -where @samp{i} and @samp{j} are the unknown (the two dimensions of the space) -and @samp{m} and @samp{n} are the parameters (the symbolic constants), -defined by the following set of constraints: -@example -@group -2<=i<=n -2<=j<=m -j<=n+2-i -@end group -@end example -@noindent We also consider a partial knowledge of the parameter values, -expressed thanks to the following affine constraints: -@example -@group -m>=2 -n>=2 -@end group -@end example - -An input file that corresponds to this problem, and asks for a generated -code in C, may be the following. Note that we do not describe here precisely -the structure and the components of this file (@pxref{Writing The Input File} - for such information, if you feel it necessary): - -@example -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context (constraints on two parameters) -2 4 # 2 lines and 4 columns -# eq/in m n 1 eq/in: 1 for inequality >=0, 0 for equality =0 - 1 1 0 -2 # 1*m + 0*n -2*1 >= 0, i.e. m>=2 - 1 0 1 -2 # 0*m + 1*n -2*1 >= 0, i.e. n>=2 - -1 # We want to set manually the parameter names -m n # parameter names - -# --------------------- STATEMENTS -------------------- -1 # Number of statements - -1 # First statement: one domain -# First domain -5 6 # 5 lines and 6 columns -# eq/in i j m n 1 - 1 1 0 0 0 -2 # i >= 2 - 1 -1 0 0 1 0 # i <= n - 1 0 1 0 0 -2 # j >= 2 - 1 0 -1 1 0 0 # j <= m - 1 -1 -1 0 1 2 # n+2-i>=j -0 0 0 # for future options - -1 # We want to set manually the iterator names -i j # iterator names - -# --------------------- SCATTERING -------------------- -0 # No scattering functions -@end example - -This file may be called @samp{basic.cloog} -(this example is provided in the CLooG distribution as -@code{test/manual_basic.cloog}) and we can ask CLooG to process it -and to generate the code by a simple calling to CLooG with this file as input: -@samp{cloog basic.cloog}. By default, CLooG will print the generated code in -the standard output: - -@example -@group -/* Generated by CLooG v@value{VERSION} in 0.00s. */ -for (i=2;i<=n;i++) @{ - for (j=2;j<=min(m,-i+n+2);j++) @{ - S1(i,j) ; - @} -@} -@end group -@end example - -@c %/************************************************************************* -@c % * Input file * -@c % *************************************************************************/ -@node Writing The Input File -@section Writing The Input File -The input text file contains a problem description, i.e. the context, -the domains and the scattering functions. -Because CLooG is very 'compilable code generation oriented', we can associate -some additional informations to each domain. We call this association a -@emph{statement}. The set of all informations is -called a @emph{program}. The input file respects the grammar below -(terminals are preceded by "_"): - -@example -File ::= Program -Program ::= Context Statements Scattering -Context ::= Language Domain_union Naming -Statements ::= Nb_statements Statement_list Naming -Scatterings ::= Nb_functions Scattering_list Naming -Naming ::= Option Name_list -Name_list ::= _String Name_list | (void) -Statement_list ::= Statement Statement_list | (void) -Domain_list ::= _Domain Domain_list | (void) -Scattering_list ::= Domain_union Scattering_list | (void) -Statement ::= Iteration_domain 0 0 0 -Iteration_domain ::= Domain_union -Domain_union ::= Nb_domains Domain_list -Option ::= 0 | 1 -Language ::= c | f -Nb_statements ::= _Integer -Nb_domains ::= _Integer -Nb_functions ::= _Integer -@end example - -Note: if there is only one domain in a @samp{Domain_union}, -i.e., if @samp{Nb_domains} is 1, then this 1 may be omitted. - -@itemize @bullet -@item @samp{Context} represents the informations that are - shared by all the statements. It consists on - the language used (which can be @samp{c} for C or @samp{f} for FORTRAN 90) - and the global constraints on parameters. - These constraints are essential - since they give to CLooG the number of parameters. If there is no - parameter or no constraints on parameters, just give a constraint - always satisfied like @math{1 \geq 0}. @samp{Naming} sets the parameter - names. - If the naming option @samp{Option} is 1, parameter names will be read - on the next line. There must be exactly as many names as parameters. - If the naming option @samp{Option} is 0, parameter names are - automatically generated. The name of the first parameter will - be @samp{M}, and the name of the @math{(n+1)^{th}} parameter directly - follows the name of the @math{n^{th}} parameter in ASCII code. - It is the user responsibility to ensure that parameter names, - iterators and scattering dimension names are different. -@item @samp{Statements} represents the informations on the statements. - @samp{Nb_statements} is the number of statements in the program, - i.e. the number of @samp{Statement} items in the @samp{Statement_list}. - @samp{Statement} represents the informations on a given statement. - To each statement is associated a domain - (the statement iteration domain: @samp{Iteration_domain}) and three - zeroes that represents future options. - @samp{Naming} sets the iterator names. If the naming option - @samp{Option} is 1, the iterator names - will be read on the next line. There must be exactly as many names as - nesting level in the deepest iteration domain. If the naming option - @samp{Option} is 0, iterator names are automatically generated. - The iterator name of the outermost loop will be @samp{i}, and the - iterator name of the loop at level @math{n+1} directly follows the - iterator name of the loop at level @math{n} in ASCII code. -@item @samp{Scatterings} represents the informations on scattering functions. - @samp{Nb_functions} is the number of functions (it must be - equal to the number of statements or 0 if there is no scattering - function). The functions themselves are represented through - @samp{Scattering_list}. - @samp{Naming} sets the scattering dimension names. If the naming option - @samp{Option} is 1, the scattering dimension names will be read on the - next line. - There must be exactly as many names as scattering dimensions. If the - naming option @samp{Option} is 0, scattering dimension names are automatically - generated. The name of the @math{n^{th}} scattering dimension - will be @samp{cn}. -@end itemize - -@menu -* Domain Representation:: -* Scattering Representation:: -@end menu - -@node Domain Representation -@subsection Domain Representation -As shown by the grammar, the input file describes the various informations -thanks to characters, integers and domains. Each domain is defined by a set of -constraints in the PolyLib format (@pxref{Wil93}). They have the -following syntax: -@enumerate -@item some optional comment lines beginning with @samp{#}, -@item the row and column numbers, possibly followed by comments, -@item the constraint rows, each row corresponds to a constraint the - domain have to satisfy. Each row must be on a single line and is possibly - followed by comments. The constraint is an equality @math{p(x) = 0} if the - first element is 0, an inequality @math{p(x) \geq 0} if the first element - is 1. The next elements are the unknown coefficients, followed by - the parameter coefficients. The last element is the constant factor. -@end enumerate -For instance, assuming that @samp{i}, @samp{j} and @samp{k} are iterators and -@samp{m} and @samp{n} are parameters, the domain defined by the following -constraints : - -@tex -$$ -\hbox{$ \cases{ -i + m &$\geq 0$\cr - -j + n &$\geq 0$\cr - i + j - k &$\geq 0$}$} -$$ -@end tex - -@ifnottex -@example -@group - -i + m >= 0 - -j + n >= 0 -i + j - k >= 0 -@end group -@end example -@end ifnottex - -@noindent can be written in the input file as follows : - -@example -@group -# This is the domain -3 7 # 3 lines and 7 columns -# eq/in i j k m n 1 - 1 -1 0 0 1 0 0 # -i + m >= 0 - 1 0 -1 0 0 1 0 # -j + n >= 0 - 1 1 1 -1 0 0 0 # i + j - k >= 0 -@end group -@end example - -Each iteration domain @samp{Iteration_domain} of a given statement -is a union of polyhedra -@samp{Domain_union}. A union is defined by its number of elements -@samp{Nb_domains} and the elements themselves @samp{Domain_list}. -For instance, let us consider the following pseudo-code: - -@example -@group -for (i=1;i<=n;i++) @{ - if ((i >= m) || (i <= 2*m)) - S1 ; - for (j=i+1;j<=m;j++) - S2 ; -@} -@end group -@end example - -@noindent The iteration domain of @samp{S1} can be divided into two -polyhedra and written in the input file as follows: - -@example -@group -2 # Number of polyhedra in the union -# First domain -3 5 # 3 lines and 5 columns -# eq/in i m n 1 - 1 1 0 0 -1 # i >= 1 - 1 -1 0 1 0 # i <= n - 1 1 -1 0 0 # i >= m -# Second domain -3 5 # 3 lines and 5 columns -# eq/in i m n 1 - 1 1 0 0 -1 # i >= 1 - 1 -1 0 1 0 # i <= n - 1 -1 2 0 0 # i <= 2*m -@end group -@end example - -@node Scattering Representation -@subsection Scattering Function Representation -Scattering functions are depicted in the input file thanks a representation -very close to the domain one. -An integer gives the number of functions @samp{Nb_functions} and each function -is represented by a domain. Each line of the domain corresponds to an equality -defining a dimension of the function. Note that at present -(CLooG @value{VERSION}) -@strong{all functions must have the same scattering dimension number}. If a -user wants to set scattering functions with different dimensionality, he has -to complete the smaller one with zeroes to reach the maximum dimensionality. -For instance, let us consider the following code and -scheduling functions: - -@example -@group -for (i=1;i<=n;i++) @{ - if ((i >= m) || (i <= 2*m)) - S1 ; - for (j=i+1;j<=m;j++) - S2 ; -@} -@end group -@end example - -@tex -$$ -\hbox{$ \cases{ \theta _{S1}(i) &$= (i,0)^T$\cr - \theta _{S2}(i,j)^T &$= (n,i+j)^T$}$} -$$ -@end tex - -@ifnottex -@example -@group -T_S1(i) = (i,0)^T -T_S2(i,j)^T = (n,i+j)^T -@end group -@end example -@end ifnottex - - -@noindent This scheduling can be written in the input file as follows: - -@example -@group -2 # Number of scattering functions -# First function -2 7 # 2 lines and 7 columns -# eq/in c1 c2 i m n 1 - 0 1 0 -1 0 0 0 # c1 = i - 0 0 1 0 0 0 0 # c2 = 0 -# Second function -2 8 # 2 lines and 8 columns -# eq/in c1 c2 i j m n 1 - 0 1 0 0 0 0 -1 0 # c1 = n - 0 0 1 -1 -1 0 0 0 # c2 = i+j -@end group -@end example -The complete input file for the user who wants to generate the code for this -example with the preceding scheduling would be -(this file is provided in the CLooG distribution -as @code{test/manual_scattering.cloog}: - -@example -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context (no constraints on two parameters) -1 4 # 1 lines and 4 columns -# eq/in m n 1 - 1 0 0 0 # 0 >= 0, always true - -1 # We want to set manually the parameter names -m n # parameter names - -# --------------------- STATEMENTS -------------------- -2 # Number of statements - -2 # First statement: two domains -# First domain -3 5 # 3 lines and 5 columns -# eq/in i m n 1 - 1 1 0 0 -1 # i >= 1 - 1 -1 0 1 0 # i <= n - 1 1 -1 0 0 # i >= m -# Second domain -3 5 # 3 lines and 5 columns -# eq/in i m n 1 - 1 1 0 0 -1 # i >= 1 - 1 -1 0 1 0 # i <= n - 1 -1 2 0 0 # i <= 2*m -0 0 0 # for future options - -1 # Second statement: one domain -4 6 # 4 lines and 6 columns -# eq/in i j m n 1 - 1 1 0 0 0 -1 # i >= 1 - 1 -1 0 0 1 0 # i <= n - 1 -1 1 0 0 -1 # j >= i+1 - 1 0 -1 1 0 0 # j <= m -0 0 0 # for future options - -1 # We want to set manually the iterator names -i j # iterator names - -# --------------------- SCATTERING -------------------- -2 # Scattering functions -# First function -2 7 # 2 lines and 7 columns -# eq/in p1 p2 i m n 1 - 0 1 0 -1 0 0 0 # p1 = i - 0 0 1 0 0 0 0 # p2 = 0 -# Second function -2 8 # 2 lines and 8 columns -# eq/in p1 p2 i j m n 1 - 0 1 0 0 0 0 -1 0 # p1 = n - 0 0 1 -1 -1 0 0 0 # p2 = i+j - -1 # We want to set manually the scattering dimension names -p1 p2 # scattering dimension names -@end example - - -@c %/************************************************************************* -@c % * Calling CLooG * -@c % *************************************************************************/ -@node Calling CLooG -@section Calling CLooG -CLooG is called by the following command: -@example - cloog [ options | file ] -@end example -The default behavior of CLooG is to read the input informations from a file and -to print the generated code or pseudo-code on the standard output. -CLooG's behavior and the output code shape is under the user control thanks -to many options which are detailed a further section (@pxref{CLooG Options}). -@code{file} is the input file. @code{stdin} is a special value: when used, -input is standard input. For instance, we can call CLooG to treat the -input file @code{basic.cloog} with default options by typing: -@code{cloog basic.cloog} or @code{more basic.cloog | cloog stdin}. - -@c %/************************************************************************* -@c % * CLooG Options * -@c % *************************************************************************/ -@node CLooG Options -@section CLooG Options - -@menu -* Last Depth to Optimize Control:: -* First Depth to Optimize Control:: -* Simplify Convex Hull:: -* Once Time Loop Elimination:: -* Equality Spreading:: -* First Level for Spreading:: -* Statement Block:: -* Loop Strides:: -* Unrolling:: -* Compilable Code:: -* Output:: -* OpenScop:: -* Help:: -* Version :: -* Quiet :: -@end menu - -@node Last Depth to Optimize Control -@subsection Last Depth to Optimize Control @code{-l } - -@code{-l }: this option sets the last loop depth to be optimized in -control. The higher this depth, the less control overhead. -For instance, with some input file, a user can generate -different pseudo-codes with different @code{depth} values as shown below. -@example -@group -/* Generated using a given input file and @strong{option -l 1} */ -for (i=0;i<=M;i++) @{ - S1 ; - for (j=0;j<=N;j++) @{ - S2 ; - @} - for (j=0;j<=N;j++) @{ - S3 ; - @} - S4 ; -@} -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -l 2} */ -for (i=0;i<=M;i++) @{ - S1 ; - for (j=0;j<=N;j++) @{ - S2 ; - S3 ; - @} - S4 ; -@} -@end group -@end example - In this example we can see that this option can change the operation - execution order between statements. Let us remind that CLooG does not - make any speculation on dependences between statements - (@pxref{Scattering}). Thus if nothing (i.e. scattering functions) - forbids this, CLooG considers the above codes to be equivalent. - If there is no scattering functions, the minimum value for @code{depth} - is 1 (in the case of 0, the user doesn't really need a loop generator !), - and the number of scattering dimensions otherwise (CLooG will warn the - user if he doesn't respect such constraint). - The maximum value for depth is -1 (infinity). - Default value is infinity. - -@node First Depth to Optimize Control -@subsection First Depth to Optimize Control @code{-f } - - @code{-f }: this option sets the first loop depth to be optimized - in control. The lower this depth, the less control overhead (and the longer - the generated code). For instance, with some input file, a user - can generate different pseudo-codes with different @code{depth} values - as shown below. - The minimum value for @code{depth} is 1, and the - maximum value is -1 (infinity). - Default value is 1. -@example -@group -/* Generated using a given input file and @strong{option -f 3} */ -for (i=1;i<=N;i++) @{ - for (j=1;j<=M;j++) @{ - S1 ; - if (j >= 10) @{ - S2 ; - @} - @} -@} -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -f 2} */ -for (i=1;i<=N;i++) @{ - for (j=1;j<=9;j++) @{ - S1 ; - @} - for (j=10;j<=M;j++) @{ - S1 ; - S2 ; - @} -@} -@end group -@end example - -@node Simple Convex Hull -@subsection Simple Convex Hull @code{-sh } - - @code{-sh }: this option enables (@code{boolean=1}) - or forbids (@code{boolean=0}) the use of an overapproximation - of the convex hull that may be easier to compute - (especially in the isl backend) and that may result in - simpler bounds. - This option works only for generated code without - code duplication (it means, you have to tune @code{-f} and - @code{-l} options first to generate only a loop nest with internal - guards). For instance, with the input file @code{test/union.cloog}, a user - can generate different pseudo-codes as shown below. - Default value is 0. -@example -@group -/* Generated using test/union.cloog and @strong{option -f -1 -l 2 -override} */ -for (i=0;i<=11;i++) @{ - for (j=max(0,5*i-50);j<=min(15,5*i+10);j++) @{ - if ((i <= 10) && (j <= 10)) @{ - S1 ; - @} - if ((i >= 1) && (j >= 5)) @{ - S2 ; - @} - @} -@} -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -sh 1 -f -1 -l 2 -override} */ -for (i=0;i<=11;i++) @{ - for (j=0;j<=15;j++) @{ - if ((i <= 10) && (j <= 10)) @{ - S1 ; - @} - if ((i >= 1) && (j >= 5)) @{ - S2 ; - @} - @} -@} -@end group -@end example - -@node Once Time Loop Elimination -@subsection Once Time Loop Elimination @code{-otl } - - @code{-otl }: this option allows (@code{boolean=1}) or - forbids (@code{boolean=0}) the simplification of loops running - once. Default value is 1. -@example -@group -/* Generated using a given input file and @strong{option -otl 0} */ -for (j=i+1;j<=i+1;j++) @{ - S1 ; -@} -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -otl 1} */ -j = i+1 ; -S1 ; -@end group -@end example - - -@node Equality Spreading -@subsection Equality Spreading @code{-esp } - - @code{-esp }: this option allows (@code{boolean=1}) or - forbids (@code{boolean=0}) values spreading when there - are equalities. Default value is 1. -@example -@group -/* Generated using a given input file and @strong{option -esp 0} */ -i = M+2 ; -j = N ; -for (k=i;k<=j+M;k++) @{ - S1 ; -@} -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -esp 1} */ -for (k=M+2;k<=N+M;k++) @{ - S1(i = M+2, j = N) ; -@} -@end group -@end example - - -@node First Level for Spreading -@subsection First Level for Spreading @code{-fsp } - - @code{-fsp }: it can be useful to set a - first level to begin equality spreading. Particularly when using - scattering functions, the user may want to see the scattering dimension - values instead of spreading or hiding them. If user has set a - spreading, @code{level} is - the first level to start it. Default value is 1. -@example -@group -/* Generated using a given input file and @strong{option -fsp 1} */ -for (j=0;j<=N+M;j++) @{ - S1(i = N) ; -@} -for (j=0;j<=N+M;j++) @{ - S1(i = M) ; -@} -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -fsp 2} */ -c1 = N ; -for (j=0;j<=c1+M;j++) @{ - S1(i = c1) ; -@} -c1 = M ; -for (j=0;j<=N+c1;j++) @{ - S1(i = c1) ; -@} -@end group -@end example - - -@node Statement Block -@subsection Statement Block @code{-block } - - @code{-block }: this option allows (@code{boolean=1}) to - create a statement block for each new iterator, even if there is only - an equality. This can be useful in order to parse the generated - pseudo-code. When @code{boolean} is set to 0 or when the generation - language is FORTRAN, this feature is disabled. Default value is 0. -@example -@group -/* Generated using a given input file and @strong{option -block 0} */ -i = M+2 ; -j = N ; -S1 ; -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -block 1} */ -@{ i = M+2 ; - @{ j = N ; - S1 ; - @} -@} -@end group -@end example - - -@node Loop Strides -@subsection Loop Strides @code{-strides } - - @code{-strides }: this options allows (@code{boolean=1}) to - handle non-unit strides for loop increments. This can remove a lot of - guards and make the generated code more efficient. Default value is 0. -@example -@group -/* Generated using a given input file and @strong{option -strides 0} */ -for (i=1;i<=n;i++) @{ - if (i%2 == 0) @{ - S1(j = i/2) ; - @} - if (i%4 == 0) @{ - S2(j = i/4) ; - @} -@} -@end group -@end example -@example -@group -/* Generated using the same input file but @strong{option -strides 1} */ -for (i=2;i<=n;i+=2) @{ - S1(j = i/2) ; - if (i%4 == 0) @{ - S2(j = i/4) ; - @} -@} -@end group -@end example - - -@node Unrolling -@subsection First Depth to Unroll @code{-first-unroll } - - @code{-first-unroll }: this option sets the first loop depth - to unroll. Note that a loop is only unrolled when it is supported - by the backend. In case of the isl backend, a loop is unrolled - if it has a lower bound that can only be incremented - a fixed (non-parametric) amount of times. - - -@node Compilable Code -@subsection Compilable Code @code{-compilable } - - @code{-compilable }: this options allows (@code{value} is not 0) - to generate a compilable code where all parameters have the integral value - @code{value}. This option creates a macro for each statement. Since - CLooG do not know anything about the statement sources, it fills the - macros with a basic increment that computes the total number of - scanned integral points. The user may change easily the macros according - to his own needs. This option is possible only if the generated code is - in C. Default value is 0. -@example -@group -/* Generated using a given input file and @strong{option -compilable 0} */ -for (i=0;i<=n;i++) @{ - for (j=0;j<=n;j++) @{ - S1 ; - S2 ; - @} - S3 ; -@} -@end group -@end example -@example -/* Generated using the same input file but @strong{option -compilable 10} */ -/* DON'T FORGET TO USE -lm OPTION TO COMPILE. */ - -/* Useful headers. */ -#include -#include -#include - -/* Parameter value. */ -#define PARVAL 10 - -/* Statement macros (please set). */ -#define S1(i,j) @{total++;@} -#define S2(i,j) @{total++;@} -#define S3(i) @{total++;@} - -int main() @{ - /* Original iterators. */ - int i, j ; - /* Parameters. */ - int n=PARVAL, total=0 ; - - for (i=0;i<=n;i++) @{ - for (j=0;j<=n;j++) @{ - S1(i,j) ; - S2(i,j) ; - @} - S3(i) ; - @} - - printf("Number of integral points: %d.\n",total) ; - return 0 ; -@} -@end example - -@node Callable Code -@subsection Callable Code @code{-callable } - - @code{-callable }: if @code{boolean=1}, then a @code{test} - function will be generated that has the parameters as arguments. - Similarly to the @code{-compilable} option, - a macro for each statement is generated. The generated definitions of - these macros are as used during the correctness testing, but they - can easily be changed by the user to suit her own needs. - This option is only available if the target language is C. - The default value is 0. - -@example -/* Generated from double.cloog with @strong{option -callable 0} */ -for (i=0;i<=M;i++) @{ - S1 ; - for (j=0;j<=N;j++) @{ - S2 ; - S3 ; - @} - S4 ; -@} -@end example -@example -/* Generated from double.cloog with @strong{option -callable 1} */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? ((n)-(d)+1)/(d) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? (n)/(d) : ((n)+(d)+1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) @{ hash(1); hash(i); @} -#define S2(i,j) @{ hash(2); hash(i); hash(j); @} -#define S3(i,j) @{ hash(3); hash(i); hash(j); @} -#define S4(i) @{ hash(4); hash(i); @} - -void test(int M, int N) -@{ - /* Original iterators. */ - int i, j; - for (i=0;i<=M;i++) @{ - S1(i) ; - for (j=0;j<=N;j++) @{ - S2(i,j) ; - S3(i,j) ; - @} - S4(i) ; - @} -@} -@end example - -@node Output -@subsection Output @code{-o } - - @code{-o }: this option sets the output file. @code{stdout} is a - special value: when used, output is standard output. - Default value is @code{stdout}. - -@node OpenScop -@subsection OpenScop @code{-openscop} - - @code{-openscop}: this option states that the input file complies to - the OpenScop specification instead of the native file format - (@pxref{Bas11}). This option is available only if the OpenScop - support has been enabled at compile time (@pxref{Optional Features}). - -@node Help -@subsection Help @code{--help} or @code{-h} - - @code{--help} or @code{-h}: this option ask CLooG to print a short help. - -@node Version -@subsection Version @code{--version} or @code{-v} - - @code{--version} or @code{-v}: this option ask CLooG to print some version - informations. - -@node Quiet -@subsection Quiet @code{--quiet} or @code{-q} - - @code{--quiet} or @code{-q}: this option tells CLooG not to print - any informational messages. - - -@c %/************************************************************************* -@c % * A Full Example * -@c % *************************************************************************/ -@node Full Example -@section A Full Example - -Let us consider the allocation problem of a Gaussian elimination, i.e. we want -to distribute the various statement instances of the compute kernel onto -different processors. The original code is the following: -@example -@group -for (i=1;j<=N-1;i++) @{ - for (j=i+1;j<=N;j++) @{ - c[i][j] = a[j][i]/a[i][i] ; /* S1 */ - for (k=i+1;k<=N;k++) @{ - a[j][k] -= c[i][j]*a[i][k] ; /* S2 */ - @} - @} -@} -@end group -@end example - -@noindent The best affine allocation functions can be found by any good automatic -parallelizer like LooPo (@pxref{Gri04}): - -@tex -$$ -\hbox{$ \cases{ \theta _{S1}(i,j)^T &$= (i)$\cr - \theta _{S2}(i,j,k)^T &$= (k)$}$} -$$ -@end tex - -@ifnottex -@example -@group -T_S1(i,j)^T = (i) -T_S2(i,j,k)^T = (k) -@end group -@end example -@end ifnottex - -@noindent To ensure that on each processor, the set of statement instances is -executed according to the original ordering, we add as minor scattering -dimensions the original scheduling (@pxref{Scattering}): - -@tex -$$ -\hbox{$ \cases{ \theta _{S1}(i,j)^T &$= (i,0,i,0,j,0)^T$\cr - \theta _{S2}(i,j,k)^T &$= (k,0,i,0,j,1,k,0)^T$}$} -$$ -@end tex - -@ifnottex -@example -@group -T_S1(i,j)^T = (i,0,i,0,j,0)^T -T_S2(i,j,k)^T = (k,0,i,0,j,1,k,0)^T -@end group -@end example -@end ifnottex - -@noindent To ensure that the scattering functions have the same dimensionality, we -complete the first function with zeroes -(this is a CLooG @value{VERSION} and previous versions requirement, -it should be removed in a future version, don't worry it's absolutely legal !): - -@tex -$$ -\hbox{$ \cases{ \theta _{S1}(i,j)^T &$= (i,0,i,0,j,0,0,0)^T$\cr - \theta _{S2}(i,j,k)^T &$= (k,0,i,0,j,1,k,0)^T$}$} -$$ -@end tex - -@ifnottex -@example -@group -T_S1(i,j)^T = (i,0,i,0,j,0,0,0)^T -T_S2(i,j,k)^T = (k,0,i,0,j,1,k,0)^T -@end group -@end example -@end ifnottex - -@noindent The input file corresponding to this code generation problem -could be (this file is provided in the CLooG distribution -as @code{test/manual_gauss.cloog}: - -@example -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context (no constraints on one parameter) -1 3 # 1 line and 3 columns -# eq/in n 1 - 1 0 0 # 0 >= 0, always true - -1 # We want to set manually the parameter name -n # parameter name - -# --------------------- STATEMENTS -------------------- -2 # Number of statements - -1 # First statement: one domain -4 5 # 4 lines and 3 columns -# eq/in i j n 1 - 1 1 0 0 -1 # i >= 1 - 1 -1 0 1 -1 # i <= n-1 - 1 -1 1 0 -1 # j >= i+1 - 1 0 -1 1 0 # j <= n -0 0 0 # for future options - -1 -# Second statement: one domain -6 6 # 6 lines and 3 columns -# eq/in i j k n 1 - 1 1 0 0 0 -1 # i >= 1 - 1 -1 0 0 1 -1 # i <= n-1 - 1 -1 1 0 0 -1 # j >= i+1 - 1 0 -1 0 1 0 # j <= n - 1 -1 0 1 0 -1 # k >= i+1 - 1 0 0 -1 1 0 # k <= n -0 0 0 # for future options - -0 # We let CLooG set the iterator names - -# --------------------- SCATTERING -------------------- -2 # Scattering functions -# First function -8 13 # 3 lines and 3 columns -# eq/in p1 p2 p3 p4 p5 p6 p7 p8 i j n 1 - 0 1 0 0 0 0 0 0 0 -1 0 0 0 # p1 = i - 0 0 1 0 0 0 0 0 0 0 0 0 0 # p2 = 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 # p3 = i - 0 0 0 0 1 0 0 0 0 0 0 0 0 # p4 = 0 - 0 0 0 0 0 1 0 0 0 0 -1 0 0 # p5 = j - 0 0 0 0 0 0 1 0 0 0 0 0 0 # p6 = 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 # p7 = 0 - 0 0 0 0 0 0 0 0 1 0 0 0 0 # p8 = 0 -# Second function -8 14 # 3 lines and 3 columns -# eq/in p1 p2 p3 p4 p5 p6 p7 p8 i j k n 1 - 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 # p1 = k - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # p2 = 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 # p3 = i - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # p4 = 0 - 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 # p5 = j - 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 # p6 = 1 - 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 # p7 = k - 0 0 0 0 0 0 0 0 1 0 0 0 0 0 # p8 = 0 - -1 # We want to set manually the scattering dimension names -p1 p2 p3 p4 p5 p6 p7 p8 # scattering dimension names -@end example - -Calling CLooG, with for instance the command line -@code{cloog -fsp 2 gauss.cloog} for a better view -of the allocation (the processor number is given by @code{p1}), -will result on the following target code that actually implements -the transformation. A minor processing on the dimension @code{p1} -to implement, e.g., MPI calls, which is not shown here may -result in dramatic speedups ! - -@example -if (n >= 2) @{ - p1 = 1 ; - for (p5=2;p5<=n;p5++) @{ - S1(i = 1,j = p5) ; - @} -@} -for (p1=2;p1<=n-1;p1++) @{ - for (p3=1;p3<=p1-1;p3++) @{ - for (p5=p3+1;p5<=n;p5++) @{ - S2(i = p3,j = p5,k = p1) ; - @} - @} - for (p5=p1+1;p5<=n;p5++) @{ - S1(i = p1,j = p5) ; - @} -@} -if (n >= 2) @{ - p1 = n ; - for (p3=1;p3<=n-1;p3++) @{ - for (p5=p3+1;p5<=n;p5++) @{ - S2(i = p3,j = p5,k = n) ; - @} - @} -@} -@end example - - -@c %/************************************************************************* -@c % * A Full Example * -@c % *************************************************************************/ -@node CLooG Library -@chapter Using the CLooG Library -The CLooG Library was implemented to allow the user to call CLooG -directly from his programs, without file accesses or system calls. The -user only needs to link his programs with C libraries. The CLooG -library mainly provides one function (@code{cloog_clast_create_from_input}) -which takes as input the problem -description with some options, and returns the data structure corresponding -to the generated code (a @code{struct clast_stmt} structure) -which is more or less an abstract syntax tree. -The user can work with this data structure and/or use -our pretty printing function to write the final code in either C or FORTRAN. -Some other functions are provided for convenience reasons. -These functions as well as the data structures are described in this section. - -@menu -* CLooG Data Structures:: -* CLooG Output:: -* Retrieving version information:: -* Example of Library Utilization:: -@end menu - - -@node CLooG Data Structures -@section CLooG Data Structures Description -In this section, we describe the data structures used by the loop -generator to represent and to process a code generation problem. - -@menu -* CloogState:: -* CloogMatrix:: -* CloogDomain:: -* CloogScattering:: -* CloogUnionDomain:: -* CloogStatement:: -* CloogOptions:: -* CloogInput:: -@end menu - - -@node CloogState -@subsection CloogState -@example -@group -CloogState *cloog_state_malloc(void); -void cloog_state_free(CloogState *state); -@end group -@end example - -@noindent The @code{CloogState} structure is (implicitly) needed to perform -any CLooG operation. It should be created using @code{cloog_state_malloc} -before any other CLooG objects are created and destroyed using -@code{cloog_state_free} after all objects have been freed. -It is allowed to use more than one @code{CloogState} structure at -the same time, but an object created within the state of a one -@code{CloogState} structure is not allowed to interact with an object -created within the state of an other @code{CloogState} structure. - - -@node CloogMatrix -@subsection CloogMatrix - -@noindent The @code{CloogMatrix} structure is equivalent to the PolyLib -@code{Matrix} data structure (@pxref{Wil93}). This structure is devoted to -represent a set of constraints. - -@example -@group -struct cloogmatrix -@{ unsigned NbRows ; /* Number of rows. */ - unsigned NbColumns ; /* Number of columns. */ - cloog_int_t **p; /* Array of pointers to the matrix rows. */ - cloog_int_t *p_Init; /* Matrix rows contiguously in memory. */ -@}; -typedef struct cloogmatrix CloogMatrix; - -CloogMatrix *cloog_matrix_alloc(unsigned NbRows, unsigned NbColumns); -void cloog_matrix_print(FILE *foo, CloogMatrix *m); -void cloog_matrix_free(CloogMatrix *matrix); -@end group -@end example - -@noindent The whole matrix is stored in memory row after row at the -@code{p_Init} address. @code{p} is an array of pointers where -@code{p[i]} points to the first element of the @math{i^{th}} row. -@code{NbRows} and @code{NbColumns} are respectively the number of -rows and columns of the matrix. -Each row corresponds to a constraint. The first element of each row is an -equality/inequality tag. The -constraint is an equality @math{p(x) = 0} if the first element is 0, but it is -an inequality @math{p(x) \geq 0} if the first element is 1. -The next elements are the coefficients of the unknowns, -followed by the coefficients of the parameters, and finally the constant term. -For instance, the following three constraints: - -@tex -$$ -\hbox{$ \cases{ -i + m &$= 0$\cr - -j + n &$\geq 0$\cr - j + i - k &$\geq 0$}$} -$$ -@end tex - -@ifnottex -@example -@group - -i + m = 0 - -j + n >= 0 - i + j - k >= 0 -@end group -@end example -@end ifnottex - -@noindent would be represented by the following rows: - -@example -@group -# eq/in i j k m n cst - 0 0 -1 0 1 0 0 - 1 -1 0 0 0 1 0 - 1 1 1 -1 0 0 0 -@end group -@end example - -@noindent To be able to provide different precision version (CLooG -supports 32 bits, 64 bits and arbitrary precision through the GMP library), -the @code{cloog_int_t} type depends on the configuration options (it may be -@code{long int} for 32 bits version, @code{long long int} for 64 bits version, -and @code{mpz_t} for multiple precision version). - -@node CloogDomain -@subsection CloogDomain -@example -@group -CloogDomain *cloog_domain_union_read(CloogState *state, - FILE *input, int nb_parameters); -CloogDomain *cloog_domain_from_cloog_matrix(CloogState *state, - CloogMatrix *matrix, int nb_par); -void cloog_domain_free(CloogDomain *domain); -@end group -@end example - -@noindent @code{CloogDomain} is an opaque type representing a polyhedral -domain (a union of polyhedra). -A @code{CloogDomain} can be read -from a file using @code{cloog_domain_union_read} or -converted from a @code{CloogMatrix}. -The input format for @code{cloog_domain_union_read} -is that of @ref{Domain Representation}. -The function @code{cloog_domain_from_cloog_matrix} takes a @code{CloogState}, a -@code{CloogMatrix} and @code{int} as input and returns a pointer to a -@code{CloogDomain}. @code{matrix} describes the domain and @code{nb_par} is the -number of parameters in this domain. The input data structures are neither -modified nor freed. -The @code{CloogDomain} can be freed using @code{cloog_domain_free}. -There are also some backend dependent functions for creating -@code{CloogDomain}s. - -@menu -* CloogDomain/PolyLib:: -* CloogDomain/isl:: -@end menu - -@node CloogDomain/PolyLib -@subsubsection PolyLib - -@example -#include -CloogDomain *cloog_domain_from_polylib_polyhedron(CloogState *state, - Polyhedron *, int nb_par); -@end example -@noindent -The function @code{cloog_domain_from_polylib_polyhedron} takes a PolyLib -@code{Polyhedron} as input and returns a pointer to a @code{CloogDomain}. -The @code{nb_par} parameter indicates the number of parameters -in the domain. The input data structure if neither modified nor freed. - -@node CloogDomain/isl -@subsubsection isl - -@example -#include -CloogDomain *cloog_domain_from_isl_set(struct isl_set *set); -__isl_give isl_set *isl_set_from_cloog_domain(CloogDomain *domain); -@end example -@noindent -The function @code{cloog_domain_from_isl_set} takes a -@code{struct isl_set} as input and returns a pointer to a @code{CloogDomain}. -The function consumes a reference to the given @code{struct isl_set}. -Similarly, @code{isl_set_from_cloog_domain} consumes a reference -to a @code{CloogDomain} and returns an @code{isl_set}. - - -@node CloogScattering -@subsection CloogScattering -@example -@group -CloogScattering *cloog_domain_read_scattering(CloogDomain *domain, - FILE *foo); -CloogScattering *cloog_scattering_from_cloog_matrix(CloogState *state, - CloogMatrix *matrix, int nb_scat, int nb_par); -void cloog_scattering_free(CloogScattering *); -@end group -@end example - -@noindent -The @code{CloogScattering} type represents a scattering function. -A @code{CloogScattering} for a given @code{CloogDomain} can be read -from a file using @code{cloog_scattering_read} or converted -from a @code{CloogMatrix} using @code{cloog_scattering_from_cloog_matrix}. -The function @code{cloog_scattering_from_cloog_matrix} takes a -@code{CloogState}, a @code{CloogMatrix} and two @code{int}s as input and -returns a -pointer to a @code{CloogScattering}. -@code{matrix} describes the scattering, while @code{nb_scat} and -@code{nb_par} are the number of scattering dimensions and -the number of parameters, respectively. The input data structures are -neither modified nor freed. -A @code{CloogScattering} can be freed using @code{cloog_scattering_free}. -There are also some backend dependent functions for creating -@code{CloogScattering}s. - -@menu -* CloogScattering/PolyLib:: -* CloogScattering/isl:: -@end menu - -@node CloogScattering/PolyLib -@subsubsection PolyLib - -@example -#include -CloogScattering *cloog_scattering_from_polylib_polyhedron( - CloogState *state, Polyhedron *polyhedron, int nb_par); -@end example -@noindent -The function @code{cloog_scattering_from_polylib_polyhedron} takes a PolyLib -@code{Polyhedron} as input and returns a pointer to a @code{CloogScattering}. -The @code{nb_par} parameter indicates the number of parameters -in the domain. The input data structure if neither modified nor freed. - -@node CloogScattering/isl -@subsubsection isl - -@example -#include -CloogScattering *cloog_scattering_from_isl_map(struct isl_map *map); -@end example -@noindent -The function @code{cloog_scattering_from_isl_map} takes a -@code{struct isl_map} as input and returns a pointer to a @code{CloogScattering}. -The output dimensions of the @code{struct isl_map} correspond to the -scattering dimensions, while the input dimensions correspond to the -domain dimensions. -The function consumes a reference to the given @code{struct isl_map}. - - -@node CloogUnionDomain -@subsection CloogUnionDomain -@example -@group -enum cloog_dim_type @{ CLOOG_PARAM, CLOOG_ITER, CLOOG_SCAT @}; - -CloogUnionDomain *cloog_union_domain_alloc(int nb_par); -CloogUnionDomain *cloog_union_domain_add_domain(CloogUnionDomain *ud, - const char *name, CloogDomain *domain, - CloogScattering *scattering, void *usr); -CloogUnionDomain *cloog_union_domain_set_name(CloogUnionDomain *ud, - enum cloog_dim_type type, int index, const char *name); -void cloog_union_domain_free(CloogUnionDomain *ud); -@end group -@end example - -@noindent A @code{CloogUnionDomain} structure represents a union -of scattered named domains. A @code{CloogUnionDomain} is -initialized by a call to @code{cloog_union_domain_alloc}, -after which domains can be added using @code{cloog_union_domain_add_domain}. - -@code{cloog_union_domain_alloc} takes the number of parameters as input. -@code{cloog_union_domain_add_domain} takes a previously created -@code{CloogUnionDomain} as input along with an optional name, -a domain, an optional scattering function and a user pointer. -The name may be @code{NULL} and is duplicated if it is not. -If no name is specified, then the statements will be named according -to the order in which they were added. -@code{domain} and @code{scattering} are taken over -by the @code{CloogUnionDomain}. @code{scattering} may be @code{NULL}, -but it must be consistently @code{NULL} or not over all calls -to @code{cloog_union_domain_add_domain}. -@code{cloog_union_domain_set_name} can be used to set the names -of parameters, iterators and scattering dimensions. -The names of iterators and scattering dimensions can only be set -after all domains have been added. - -There is also a backend dependent function for creating -@code{CloogUnionDomain}s. - -@menu -* CloogUnionDomain/isl:: -@end menu - -@node CloogUnionDomain/isl -@subsubsection isl - -@example -#include -CloogUnionDomain *cloog_union_domain_from_isl_union_map( - __isl_take isl_union_map *umap); -CloogUnionDomain *cloog_union_domain_from_isl_set( - __isl_take isl_set *set); -@end example -@noindent -The function @code{cloog_union_domain_from_isl_union_map} takes a -@code{isl_union_map} as input and returns a pointer -to a @code{CloogUnionDomain}. -The input is a mapping from different -spaces (different tuple names and possibly different dimensions) -to a common space. The iteration domains are set to the domains -in each space. The statement names are set to the names of the -spaces. The parameter names of the result are set to those of -the input, but the iterator and scattering dimension names are -left unspecified. -The function consumes a reference to the given @code{isl_union_map}. The -function @code{cloog_union_domain_from_isl_set} is similar, but takes an -unscattered domain as input. It is not defined for an union_set, because the -order of iterations from two different isl_sets is undefined, if no scattering -is provided. - - -@node CloogStatement -@subsection CloogStatement -@example -@group -struct cloogstatement -@{ int number ; /* The statement unique number. */ - char *name; /* Name of the statement. */ - void * usr ; /* Pointer for user's convenience. */ - struct cloogstatement * next ;/* Next element of the linked list. */ -@} ; -typedef struct cloogstatement CloogStatement ; - -CloogStatement *cloog_statement_malloc(CloogState *state); -void cloog_statement_print(FILE *, CloogStatement *); -void cloog_statement_free(CloogStatement *); -@end group -@end example - -@noindent The @code{CloogStatement} structure represents a @code{NULL} -terminated linked -list of statements. In CLooG, a statement is only defined by its unique -number (@code{number}). The user can use the pointer @code{usr} for his -own convenience to link his own statement representation to the -corresponding @code{CloogStatement} structure. The whole management of the -@code{usr} pointer is under the responsibility of the user, in particular, -CLooG never tries to print, to allocate or to free a memory block pointed -by @code{usr}. - - - -@node CloogOptions -@subsection CloogOptions -@example -@group -struct cloogoptions -@{ int l; /* -l option. */ - int f; /* -f option. */ - int strides; /* -strides option. */ - int sh; /* -sh option. */ - int first_unroll; /* -first-unroll option. */ - int esp; /* -esp option. */ - int fsp; /* -fsp option. */ - int otl; /* -otl option. */ - int block; /* -block option. */ - int compilable; /* -compilable option. */ - int language; /* CLOOG_LANGUAGE_C or CLOOG_LANGUAGE_FORTRAN */ - int save_domains; /* Save unsimplified copy of domain. */ -@} ; -typedef struct cloogoptions CloogOptions ; - -CloogOptions *cloog_options_malloc(CloogState *state); -void cloog_options_print(FILE *foo, CloogOptions *options); -void cloog_options_free(CloogOptions *options); -@end group -@end example - -@noindent The @code{CloogOptions} structure contains all the possible options to -rule CLooG's behaviour (@pxref{Calling CLooG}). -As a reminder, the default values are: -@itemize @bullet -@item @math{l = -1} (optimize control until the innermost loops), -@item @math{f = 1} (optimize control from the outermost loops), -@item @math{strides = 0} (use only unit strides), -@item @math{sh = 0} (do not compute simple convex hulls), -@item @math{first\_unroll = -1} (do not perform unrolling), -@item @math{esp = 1} (spread complex equalities), -@item @math{fsp = 1} (start to spread from the first iterators), -@item @math{otl = 1} (simplify loops running only once). -@item @math{block = 0} (do not make statement blocks when not necessary). -@item @math{compilable = 0} (do not generate a compilable code). -@end itemize - -The @code{save_domains} option is only useful for users of the CLooG -library. This option defaults to 0, but when it is set, the @code{domain} -field of each @code{clast_user_stmt} will be set to the set of values for the -scattering dimensions for which this instance of the user statement is executed. -The @code{domain} field of each @code{clast_for} contains the set of values for -the scattering dimensions for which an instance of a user statement is executed -inside the @code{clast_for}. It is only available if the @code{clast_for} -enumerates a scattering dimension. - -@node CloogInput -@subsection CloogInput -@example -@group -CloogInput *cloog_input_read(FILE *file, CloogOptions *options); -CloogInput *cloog_input_alloc(CloogDomain *context, - CloogUnionDomain *ud); -void cloog_input_free(CloogInput *input); - -void cloog_input_dump_cloog(FILE *, CloogInput *, CloogOptions *); -@end group -@end example - -@noindent A @code{CloogInput} structure represents the input to CLooG. -It is essentially a @code{CloogUnionDomain} along with a context -@code{CloogDomain}. A @code{CloogInput} can be created from -a @code{CloogDomain} and a @code{CloogUnionDomains} using -@code{cloog_input_alloc}, or it can be read from a CLooG input -file using @code{cloog_input_read}. The latter also modifies -the @code{language} field of the @code{CloogOptions} structure. -The constructed @code{CloogInput} can be used as input -to a @code{cloog_clast_create_from_input} call. - -A @code{CloogInput} data structure and a @code{CloogOptions} contain -the same information as a .cloog file. This function dumps the .cloog -description of the given data structures into a file. - -@node Dump CLooG Input File Function -@subsection Dump CLooG Input File Function -@example -@end example - -@node CLooG Output -@section CLooG Output - -@noindent -Given a description of the input, -an AST corresponding to the @code{CloogInput} can be constructed -using @code{cloog_clast_create_from_input} and destroyed using -@code{free_clast_stmt}. -@example -struct clast_stmt *cloog_clast_create_from_input(CloogInput *input, - CloogOptions *options); -void free_clast_stmt(struct clast_stmt *s); -@end example -@noindent -@code{clast_stmt} represents a linked list of ``statements''. -@example -struct clast_stmt @{ - const struct clast_stmt_op *op; - struct clast_stmt *next; -@}; -@end example -@noindent -The entries in the list are not of type @code{clast_stmt} itself, -but of some larger type. The following statement types are defined -by CLooG. - -@example -struct clast_root @{ - struct clast_stmt stmt; - CloogNames * names; -@}; -struct clast_root *new_clast_root(CloogNames *names); - -struct clast_assignment @{ - struct clast_stmt stmt; - const char * LHS; - struct clast_expr * RHS; -@}; -struct clast_assignment *new_clast_assignment(const char *lhs, - struct clast_expr *rhs); - -struct clast_block @{ - struct clast_stmt stmt; - struct clast_stmt * body; -@}; -struct clast_block *new_clast_block(void); - -struct clast_user_stmt @{ - struct clast_stmt stmt; - CloogDomain * domain; - CloogStatement * statement; - struct clast_stmt * substitutions; -@}; -struct clast_user_stmt *new_clast_user_stmt(CloogDomain *domain, - CloogStatement *stmt, struct clast_stmt *subs); - -struct clast_for @{ - struct clast_stmt stmt; - CloogDomain * domain; - const char * iterator; - struct clast_expr * LB; - struct clast_expr * UB; - cloog_int_t stride; - struct clast_stmt * body; -@}; -struct clast_for *new_clast_for(CloogDomain *domain, const char *it, - struct clast_expr *LB, struct clast_expr *UB, - cloog_int_t stride); - -struct clast_guard @{ - struct clast_stmt stmt; - struct clast_stmt * then; - int n; - struct clast_equation eq[1]; -@}; -struct clast_guard *new_clast_guard(int n); -@end example -@noindent -The @code{clast_stmt} returned by @code{cloog_clast_create} -is a @code{clast_root}. -It contains a placeholder for all the variable names that appear -in the AST and a (list of) nested statement(s). - -@noindent -A @code{clast_assignment} assigns the value given by -the @code{clast_expr} @code{RHS} to a variable named @code{LHS}. - -@noindent -A @code{clast_block} groups a list of statements into one statement. -These statements are only generated if the @code{block} option is set, -@pxref{Statement Block} and @ref{CloogOptions}. - -@noindent -A @code{clast_user_stmt} represents a call to a statement specified -by the user, @pxref{CloogStatement}. -@code{substitutions} is a list of @code{clast_assignment} statements -assigning an expression in terms of the scattering dimensions to -each of the original iterators in the original order. -The @code{LHS}s of these assignments are left blank (@code{NULL}). -The @code{domain} is set to @code{NULL} if the @code{save_domains} option -is not set. Otherwise, it is set to the set -of values for the scattering dimensions -for which this instance of the user statement is executed. -Note that unless the @code{noscalars} option has been set, the -constant scattering dimensions may have been removed from this set. - -@noindent -A @code{clast_for} represents a for loop, iterating @code{body} for each -value of @code{iterator} between @code{LB} and @code{UB} in steps -of size @code{stride}. -The @code{domain} is set to @code{NULL} if the @code{save_domains} option is not -set. Otherwise, it is set to the set of values for the scattering dimensions -for which a user statement is executed inside this @code{clast_for}. Note that -unless the @code{noscalars} option has been set, the constant scattering -dimensions may have been removed from this set. - -@noindent -A @code{clast_guard} represents the guarded execution of the @code{then} -(list of) statement(s) by a conjunction of @code{n} (in)equalities. -Each (in)equality is represented by a @code{clast_equation}. -@example -struct clast_equation @{ - struct clast_expr * LHS; - struct clast_expr * RHS; - int sign; -@}; -@end example -@noindent -The condition expressed by a @code{clast_equation} is -@code{LHS <= RHS}, @code{LHS == RHS} or @code{LHS >= RHS} -depending on whether @code{sign} is less than zero, equal -to zero, or greater than zero. - -The dynamic type of a @code{clast_stmt} can be determined -using the macro @code{CLAST_STMT_IS_A(stmt,type)}, -where @code{stmt} is a pointer to a @code{clast_stmt} -and @code{type} is one of @code{stmt_root}, @code{stmt_ass}, -@code{stmt_user}, @code{stmt_block}, @code{stmt_for} or -@code{stmt_guard}. -Users are allowed to define their own statement types by -assigning the @code{op} field of the statements a pointer -to a @code{clast_stmt_op} structure. -@example -struct clast_stmt_op @{ - void (*free)(struct clast_stmt *); -@}; -@end example -@noindent -The @code{free} field of this structure should point -to a function that frees the user defined statement. - -@noindent -A @code{clast_expr} can be an identifier, a term, -a binary expression or a reduction. -@example -enum clast_expr_type @{ - clast_expr_name, - clast_expr_term, - clast_expr_bin, - clast_expr_red -@}; -struct clast_expr @{ - enum clast_expr_type type; -@}; -void free_clast_expr(struct clast_expr *e); -@end example - -@noindent -Identifiers are of subtype @code{clast_name}. -@example -struct clast_name @{ - struct clast_expr expr; - const char * name; -@}; -struct clast_name *new_clast_name(const char *name); -void free_clast_name(struct clast_name *t); -@end example -@noindent -The character string pointed to by @code{name} is -assumed to be part of the @code{CloogNames} structure -in the root of the clast as is therefore not copied. - -@noindent -Terms are of type @code{clast_term}. -@example -struct clast_term @{ - struct clast_expr expr; - cloog_int_t val; - struct clast_expr *var; -@}; -struct clast_term *new_clast_term(cloog_int_t c, struct clast_expr *v); -void free_clast_term(struct clast_term *t); -@end example -@noindent -If @code{var} is set to @code{NULL}, then the term represents -the integer value @code{val}. Otherwise, it represents -the term @code{val * var}. -@code{new_clast_term} simply copies the @code{v} pointer -without copying the underlying @code{clast_expr}. -@code{free_clast_term}, on the other hand, recursively frees -@code{var}. - -@noindent -Binary expressions are of type @code{clast_bin_type} and -represent either the floor of a division (fdiv), -the ceil of a division (cdiv), an exact division or -the remainder of an fdiv. -@example -enum clast_bin_type @{ clast_bin_fdiv, clast_bin_cdiv, - clast_bin_div, clast_bin_mod @}; -struct clast_binary @{ - struct clast_expr expr; - enum clast_bin_type type; - struct clast_expr* LHS; - cloog_int_t RHS; -@}; -struct clast_binary *new_clast_binary(enum clast_bin_type t, - struct clast_expr *lhs, cloog_int_t rhs); -void free_clast_binary(struct clast_binary *b); -@end example - -@noindent -Reductions are of type @code{clast_reduction} and -can represent either the sum, the minimum or the maximum -of its elements. -@example -enum clast_red_type @{ clast_red_sum, clast_red_min, clast_red_max @}; -struct clast_reduction @{ - struct clast_expr expr; - enum clast_red_type type; - int n; - struct clast_expr* elts[1]; -@}; -struct clast_reduction *new_clast_reduction(enum clast_red_type t, - int n); -void free_clast_reduction(struct clast_reduction *r); -@end example - -@node Retrieving version information -@section Retrieving version information -CLooG provides static and dynamic version checks to assist on -including a compatible version of the library. -A static version check at compile time can be achieved by -querying the version constants defined in @code{version.h}: - -@itemize @bullet -@item @code{CLOOG_VERSION_MAJOR} -@item @code{CLOOG_VERSION_MINOR} -@item @code{CLOOG_VERSION_REVISION} -@end itemize - -This way it is possible to ensure the included headers are of the -correct version. It is still possible that the installed CLooG -library version differs from the installed headers. -In order to avoid this, a dynamic version check is provided with -the functions: - -@example -@group -int cloog_version_major(void); -int cloog_version_minor(void); -int cloog_version_revision(void); -@end group -@end example - -By using both the static and the dynamic version check, it is possible -to match CLooG's header version with the library's version. - -@node Example of Library Utilization -@section Example of Library Utilization -Here is a basic example showing how it is possible to use the CLooG library, -assuming that a standard installation has been done. -The following C program reads a CLooG input file on the standard input, -then prints the solution on the standard output. -Options are preselected to the default values of the CLooG software. -This example is provided in the @code{example} directory of the -CLooG distribution. -@example -/* example.c */ -# include -# include - -int main() -@{ - CloogState *state; - CloogInput *input; - CloogOptions * options ; - struct clast_stmt *root; - - /* Setting options and reading program informations. */ - state = cloog_state_malloc(); - options = cloog_options_malloc(state); - input = cloog_input_read(stdin, options); - - /* Generating and printing the code. */ - root = cloog_clast_create_from_input(input, options); - clast_pprint(stdout, root, 0, options); - - cloog_clast_free(root); - cloog_options_free(options) ; - cloog_state_free(state); - return 0; -@} -@end example - -@noindent The compilation command could be: -@example -gcc example.c -lcloog -o example -@end example -@noindent A calling command with the input file test.cloog could be: -@example -more test.cloog | ./example -@end example - - -@c % ******************************** HACKING ********************************* -@c @node Hacking -@c @chapter Hacking CLooG - -@c @menu -@c * Program organization:: -@c * Special Options:: -@c * CLooG Coding Standards:: -@c @end menu - -@c @node Program organization -@c @section Program organization - -@c @node Special Options -@c @section Special Options - -@c @node CLooG Coding Standards -@c @section CLooG Coding Standards - - -@c % ****************************** INSTALLING ******************************** -@node Installing -@chapter Installing CLooG - -@menu -* License:: -* Requirements:: -* Basic Installation:: -* Optional Features:: -* Uninstallation:: -@end menu - -@node License -@section License -First of all, it would be very kind to refer the following paper in any -publication that result from the use of the CLooG software or its library, -@pxref{Bas04} (a bibtex entry is provided behind the title page of this -manual, along with copyright notice, and in the CLooG home -@code{http://www.CLooG.org}. - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. -@code{http://www.gnu.org/licenses/lgpl-2.1.html} - -Note, though, that if you link CLooG against a GPL library such -as the PolyLib backend, then the combination becomes GPL too. -In particular, a CLooG library based on the PolyLib backend -is GPL version 2 only. -Since the isl backend is LGPL, linking against it does not affect -the license of CLooG. - - -@node Requirements -@section Requirements - -CLooG can be used with one of two possible backends, -one using isl and one using PolyLib. -The isl library is included in the CLooG distribution, -while the PolyLib library needs to be obtained separately. -On the other hand, isl requires GMP, while PolyLib can be -compiled with or without the use of GMP. -The user therefore needs to install at least one of -PolyLib or GMP. - -@menu -* PolyLib:: -* GMP Library:: -@end menu - - -@node PolyLib -@subsection PolyLib (optional) -To successfully install CLooG with the PolyLib backend, -the user first needs to install PolyLib -version 5.22.1 or above (default 64 bits version is satisfying -as well as 32 bits or GMP multiple precision version). -Polylib can be downloaded freely -at @code{http://icps.u-strasbg.fr/PolyLib/} or -@code{http://www.irisa.fr/polylib/}. Once downloaded and unpacked -(e.g. using the @samp{tar -zxvf polylib-5.22.3.tar.gz} command), -the user can compile -it by typing the following commands on the PolyLib's root directory: - -@itemize @bullet -@item @code{./configure} -@item @code{make} -@item And as root: @code{make install} -@end itemize - -Alternatively, the latest development version can be obtained from the -git repository: -@itemize @bullet -@item @code{git clone git://repo.or.cz/polylib.git} -@item @code{cd polylib} -@item @code{./autogen.sh} -@item @code{./configure} -@item @code{make} -@item And as root: @code{make install} -@end itemize - -The PolyLib default installation is @code{/usr/local}. This directory may -not be inside your library path. To fix the problem, the user should set -@example -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib -@end example -@noindent if your shell is, e.g., bash or -@example -setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH:/usr/local/lib -@end example -@noindent if your shell is, e.g., tcsh. Add the line to your .bashrc or .tcshrc (or -whatever convenient file) to make this change permanent. Another solution -is to ask PolyLib to install in the standard path by using the prefix -option of the configure script: -@samp{./configure --prefix=/usr}. - -CLooG makes intensive calls to polyhedral operations, and PolyLib -functions do the job. Polylib is a free library written in C for the -manipulation of polyhedra. The library is operating on objects like -vectors, matrices, lattices, polyhedra, Z-polyhedra, unions of -polyhedra and a lot of other intermediary structures. It provides -functions for all the important operations on these structures. - -@node GMP Library -@subsection GMP Library (optional) - -To be able to deal with insanely large coefficient, the user will need to -install the GNU Multiple Precision Library (GMP for short) version 4.1.4 -or above. It can be freely downloaded from @code{http://www.swox.com/gmp}. -Note that the isl backend currently requires GMP. -The user can compile GMP by typing the following commands on the GMP root -directory: - -@itemize @bullet -@item @code{./configure} -@item @code{make} -@item And as root: @code{make install} -@end itemize - -The GMP default installation is @code{/usr/local}, the same method to -fix a library path problem applies as with PolyLib (@pxref{PolyLib}). - -If you want to use the PolyLib backend, then -PolyLib has to be built using the GMP library by specifying the option -@samp{--with-libgmp=PATH_TO_GMP} to the PolyLib configure script -(where @code{PATH_TO_GMP} is @code{/usr/local} if you did not change the GMP -installation directory). Then you have to set the convenient CLooG configure -script options to build the GMP version (@pxref{Optional Features}). - - -@node Basic Installation -@section CLooG Basic Installation - -Once downloaded and unpacked -(e.g. using the @samp{tar -zxvf cloog-@value{VERSION}.tar.gz} command), -you can compile CLooG by typing the following commands on the CLooG's root -directory: - -@itemize @bullet -@item @code{./configure} -@item @code{make} -@item And as root: @code{make install} -@end itemize - -Alternatively, the latest development version can be obtained from the -git repository: -@itemize @bullet -@item @code{git clone git://repo.or.cz/cloog.git} -@item @code{cd cloog} -@item @code{./get_submodules.sh} -@item @code{./autogen.sh} -@item @code{./configure} -@item @code{make} -@item And as root: @code{make install} -@end itemize - -Depending on which backend you want to use and where they -are located, you may need to pass some -options to the configure script, @pxref{Optional Features}. - -The program binaries and object files can be removed from the -source code directory by typing @code{make clean}. To also remove the -files that the @code{configure} script created (so you can compile the -package for a different kind of computer) type @code{make distclean}. - -Both the CLooG software and library have been successfully compiled -on the following systems: -@itemize @bullet -@item PC's under Linux, with the @code{gcc} compiler, -@item PC's under Windows (Cygwin), with the @code{gcc} compiler, -@item Sparc and UltraSparc Stations, with the @code{gcc} compiler. -@end itemize - -@node Optional Features -@section Optional Features -The @code{configure} shell script attempts to guess correct values for -various system-dependent variables and user options used during compilation. -It uses those values to create the @code{Makefile}. Various user options -are provided by the CLooG's configure script. They are summarized in the -following list and may be printed by typing @code{./configure --help} in the -CLooG top-level directory. - -@itemize @bullet -@item By default, the installation directory is @code{/usr/local}: -@code{make install} will install the package's files in -@code{/usr/local/bin}, @code{/usr/local/lib} and @code{/usr/local/include}. -The user can specify an installation prefix other than @code{/usr/local} by -giving @code{configure} the option @code{--prefix=PATH}. - -@item By default, the isl backend will use the version of isl -that is @code{bundled} together with CLooG. -Using the @code{--with-isl} option of @code{configure} -the user can specify that @code{no} isl, -a previously installed (@code{system}) isl or a @code{build} isl -should be used. -In the latter case, the user should also specify the build location -using @code{--with-isl-builddir=PATH}. -In case of an installed isl, -the installation location can be specified using the -@code{--with-isl-prefix=PATH} and -@code{--with-isl-exec-prefix=PATH} options of @code{configure}. - -@item By default, the PolyLib backend will use an installed -(@code{system}) PolyLib, if any. -The installation location can be specified using the -@code{--with-polylib-prefix=PATH} and -@code{--with-polylib-exec-prefix=PATH} options of @code{configure}. -Using the @code{--with-polylib} option of @code{configure} -the user can specify that @code{no} PolyLib or a @code{build} PolyLib -should be used. -In the latter case, the user should also specify the build location -using @code{--with-polylib-builddir=PATH}. - -@item By default, the PolyLib backend of CLooG is built -in 64bits version if such version of the -PolyLib is found by @code{configure}. If the only existing version of the -PolyLib is the 32bits or if the user give to @code{configure} the option -@code{--with-bits=32}, the 32bits version of CLooG will be compiled. In the -same way, the option @code{--with-bits=gmp} have to be used to build -the multiple precision version. - -@item By default, @code{configure} will look for the GMP library -(necessary to build the multiple precision version) in standard -locations. If necessary, the user can specify the GMP path by giving -@code{configure} the option @code{--with-gmp-prefix=PATH} and/or -@code{--with-gmp-exec-prefix=PATH}. - -@item By default, the OpenScop Library (osl) support is not enabled. -@c @code{configure} will use the bundled OpenScop Library (osl). -Using the @code{--with-osl} option of @code{configure} -the user can specify that @code{no} osl, -a previously installed (@code{system}) osl, a @code{bundled} osl, or a -@code{build} osl should be used. -In the latter case, the user should also specify the build location -using @code{--with-osl-builddir=PATH}. -In case of an installed osl, -the installation location can be specified using the -@code{--with-osl-prefix=PATH} and -@code{--with-osl-exec-prefix=PATH} options of @code{configure}. -@end itemize - -@node Uninstallation -@section Uninstallation -The user can easily remove the CLooG software and library from his system -by typing (as root if necessary) from the CLooG top-level directory -@code{make uninstall}. - -@c % **************************** DOCUMENTATION ****************************** -@node Documentation -@chapter Documentation -The CLooG distribution provides several documentation sources. First, the -source code itself is as documented as possible. The code comments use a -Doxygen-compatible presentation (something similar to what JavaDoc does for -JAVA). The user may install Doxygen -(see @code{http://www.stack.nl/~dimitri/doxygen}) to automatically -generate a technical documentation by typing @code{make doc} or -@code{doxygen ./autoconf/Doxyfile} at the CLooG top-level directory after -running the configure script (@pxref{Installing}). Doxygen will generate -documentation sources (in HTML, LaTeX and man) in the @code{doc/source} -directory of the CLooG distribution. - -The Texinfo sources of the present document are also provided in the @code{doc} -directory. You can build it in either DVI format (by typing -@code{texi2dvi cloog.texi}) or PDF format -(by typing @code{texi2pdf cloog.texi}) or HTML format -(by typing @code{makeinfo --html cloog.texi}, using @code{--no-split} -option to generate a single HTML file) or info format -(by typing @code{makeinfo cloog.texi}). - -@c % ****************************** REFERENCES ******************************** -@node References -@chapter References - -@itemize -@item -@anchor{Bas03a}[Bas03a] C. Bastoul, P. Feautrier. Improving data locality -by chunking. CC'12 International Conference on Compiler Construction, -LNCS 2622, pages 320-335, Warsaw, april 2003. - -@item -@anchor{Bas03b}[Bas03b] C. Bastoul. Efficient code generation for automatic -parallelization and optimization. ISPDC'03 IEEE International Symposium on -Parallel and Distributed Computing, pages 23-30, Ljubljana, october 2003. - -@item -@anchor{Bas04}[Bas04] C. Bastoul. Code Generation in the Polyhedral Model -Is Easier Than You Think. PACT'13 IEEE International Conference on Parallel -Architecture and Compilation Techniques, pages 7-16, Juan-les-Pins, -september 2004. - -@item -@anchor{Bas11}[Bas11] C. Bastoul. A Specification and a Library for Data -Exchange in Polyhedral Compilation Tools. Technical Report, -Paris-Sud University, France, September 2011. - -@item -@anchor{Fea92}[Fea92] P. Feautrier Some efficient solutions to the affine -scheduling problem, part II: multidimensional time. -International Journal of Parallel Programming, 21(6):389--420, December 1992. - -@item -@anchor{Gri04}[Gri04] M. Griebl. Automatic parallelization of loop programs -for distributed memory architectures. Habilitation Thesis. Facult@"at f@"ur -Mathematik und Informatik, Universit@"at Passau, 2004. -@emph{http://www.infosun.fmi.uni-passau.de/cl/loopo/} - -@item -@anchor{Qui00}[Qui00] F. Quiller@'e, S. Rajopadhye, and D. Wilde. -Generation of efficient nested loops from polyhedra. -International Journal of Parallel Programming, 28(5):469-498, -october 2000. - -@item -@anchor{Wil93}[Wil93] Doran K. Wilde. -A library for doing polyhedral operations. -Technical Report 785, IRISA, Rennes, France, 1993. - -@end itemize - - - - -@c % /************************************************************************* -@c % * PART VI: END OF THE DOCUMENT * -@c % *************************************************************************/ -@c @unnumbered Index - -@c @printindex cp - -@bye diff --git a/cloog-0.17.0/doc/images/basic.eps b/cloog-0.17.0/doc/images/basic.eps deleted file mode 100644 index 0cc0497..0000000 --- a/cloog-0.17.0/doc/images/basic.eps +++ /dev/null @@ -1,402 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: basic.fig -%%Creator: fig2dev Version 3.2 Patchlevel 4 -%%CreationDate: Thu Nov 17 16:54:54 2005 -%%For: bastoul@ulysse.futurs.inria.fr (Cedric Bastoul) -%%BoundingBox: 0 0 445 301 -%%Magnification: 1.0000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save -newpath 0 301 moveto 0 0 lineto 445 0 lineto 445 301 lineto closepath clip newpath --153.0 333.0 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/reencdict 12 dict def /ReEncode { reencdict begin -/newcodesandnames exch def /newfontname exch def /basefontname exch def -/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def -basefontdict { exch dup /FID ne { dup /Encoding eq -{ exch dup length array copy newfont 3 1 roll put } -{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall -newfont /FontName newfontname put newcodesandnames aload pop -128 1 255 { newfont /Encoding get exch /.notdef put } for -newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat -newfontname newfont definefont pop end } def -/isovec [ -8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde -8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis -8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron -8#220 /dotlessi 8#230 /oe 8#231 /OE -8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling -8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis -8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot -8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus -8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph -8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine -8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf -8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute -8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring -8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute -8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute -8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve -8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply -8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex -8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave -8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring -8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute -8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute -8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve -8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide -8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex -8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def -/Times-Bold /Times-Bold-iso isovec ReEncode -/Times-Roman /Times-Roman-iso isovec ReEncode - /DrawEllipse { - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def - /savematrix mtrx currentmatrix def - x y tr xrad yrad sc 0 0 1 startangle endangle arc - closepath - savematrix setmatrix - } def - -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06000 0.06000 sc -% -% Fig objects follow -% -% -% here starts figure with depth 51 -% Polyline -n 4200 1500 m 4200 3900 l 8400 3900 l 6000 1500 l - cp gs col7 0.75 shd ef gr -% Ellipse -7.500 slw - [15 45] 45 sd -1 slc -n 5400 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6600 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 7200 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 7800 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 7200 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6600 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 5400 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 5400 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6600 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 5400 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 1500 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 1500 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 5400 1500 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 7800 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 8400 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 7200 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6600 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 1500 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Polyline -0 slc -gs clippath -9615 5160 m 9615 5040 l 9395 5040 l 9575 5100 l 9395 5160 l cp -eoclip -n 3000 5100 m - 9600 5100 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 9395 5160 m 9575 5100 l 9395 5040 l 9395 5160 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -3060 885 m 2940 885 l 2940 1105 l 3000 925 l 3060 1105 l cp -eoclip -n 3000 5100 m - 3000 900 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 3060 1105 m 3000 925 l 2940 1105 l 3060 1105 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -n 3000 4500 m - 2925 4500 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 3900 m - 2925 3900 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 3300 m - 2925 3300 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3600 5100 m - 3600 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 4200 5100 m - 4200 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 5400 5100 m - 5400 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 4800 5100 m - 4800 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 6000 5100 m - 6000 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 6600 5100 m - 6600 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 2700 m - 2925 2700 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 1500 m - 2925 1500 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 2100 m - 2925 2100 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline - [15 45] 45 sd -n 3000 1500 m - 9000 1500 l gs col0 s gr [] 0 sd -% Polyline - [15 45] 45 sd -n 8400 5100 m - 8400 900 l gs col0 s gr [] 0 sd -% Polyline -n 7200 5100 m - 7200 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 7800 5100 m - 7800 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 8400 5100 m - 8400 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline - [15 45] 45 sd -n 3000 3900 m - 9000 3900 l gs col0 s gr [] 0 sd -% Polyline - [15 45] 45 sd -n 5400 900 m - 9600 5100 l gs col0 s gr [] 0 sd -% Polyline - [15 45] 45 sd -n 4200 5100 m - 4200 900 l gs col0 s gr [] 0 sd -/Times-Bold-iso ff 390.00 scf sf -2625 4650 m -gs 1 -1 sc (1) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -2625 4050 m -gs 1 -1 sc (2) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -3525 5550 m -gs 1 -1 sc (1) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -2700 1050 m -gs 1 -1 sc (j) col0 sh gr -/Times-Roman-iso ff 390.00 scf sf -8025 825 m -gs 1 -1 sc (i<=n) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -4125 5550 m -gs 1 -1 sc (2) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -8325 5550 m -gs 1 -1 sc (n) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -2550 1575 m -gs 1 -1 sc (m) col0 sh gr -/Times-Roman-iso ff 390.00 scf sf -9075 3975 m -gs 1 -1 sc (j>=2) col0 sh gr -/Times-Roman-iso ff 390.00 scf sf -9075 1575 m -gs 1 -1 sc (j<=m) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -9450 5475 m -gs 1 -1 sc (i) col0 sh gr -/Times-Roman-iso ff 390.00 scf sf -3825 825 m -gs 1 -1 sc (i>=2) col0 sh gr -/Times-Roman-iso ff 390.00 scf sf -4875 825 m -gs 1 -1 sc (j<=n+2-i) col0 sh gr -% here ends figure; -$F2psEnd -rs -showpage diff --git a/cloog-0.17.0/doc/images/basic.fig b/cloog-0.17.0/doc/images/basic.fig deleted file mode 100644 index 7fe0a97..0000000 --- a/cloog-0.17.0/doc/images/basic.fig +++ /dev/null @@ -1,100 +0,0 @@ -#FIG 3.2 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 3900 75 75 5400 3900 5400 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 3900 75 75 4800 3900 4800 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 3300 75 75 4200 3300 4200 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 3300 75 75 4800 3300 4800 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 2700 75 75 4200 2700 4200 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 3900 75 75 4200 3900 4200 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 3900 75 75 6000 3900 6000 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 3900 75 75 6600 3900 6600 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7200 3900 75 75 7200 3900 7200 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7800 3900 75 75 7800 3900 7800 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7200 3300 75 75 7200 3300 7200 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 3300 75 75 6600 3300 6600 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 3300 75 75 6000 3300 6000 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 3300 75 75 5400 3300 5400 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 2700 75 75 4800 2700 4800 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 2700 75 75 5400 2700 5400 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 2700 75 75 6000 2700 6000 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 2700 75 75 6600 2700 6600 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 2100 75 75 6000 2100 6000 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 2100 75 75 5400 2100 5400 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 2100 75 75 4800 2100 4800 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 2100 75 75 4200 2100 4200 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 1500 75 75 4200 1500 4200 1575 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 1500 75 75 4800 1500 4800 1575 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 1500 75 75 5400 1500 5400 1575 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7800 3300 75 75 7800 3300 7800 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 8400 3900 75 75 8400 3900 8400 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7200 2700 75 75 7200 2700 7200 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 2100 75 75 6600 2100 6600 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 1500 75 75 6000 1500 6000 1575 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 120.00 180.00 - 3000 5100 9600 5100 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 120.00 180.00 - 3000 5100 3000 900 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 4500 2925 4500 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 3900 2925 3900 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 3300 2925 3300 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3600 5100 3600 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 4200 5100 4200 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 5400 5100 5400 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 4800 5100 4800 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 6000 5100 6000 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 6600 5100 6600 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 2700 2925 2700 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 1500 2925 1500 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 2100 2925 2100 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 3000 1500 9000 1500 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 8400 5100 8400 900 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 7200 5100 7200 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 7800 5100 7800 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 8400 5100 8400 5175 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 3000 3900 9000 3900 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 5400 900 9600 5100 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 4200 5100 4200 900 -2 3 0 0 0 7 51 -1 15 0.000 0 0 -1 0 0 5 - 4200 1500 4200 3900 8400 3900 6000 1500 4200 1500 -4 0 0 50 -1 2 26 0.0000 0 270 195 2625 4650 1\001 -4 0 0 50 -1 2 26 0.0000 0 270 195 2625 4050 2\001 -4 0 0 50 -1 2 26 0.0000 0 270 195 3525 5550 1\001 -4 0 0 50 -1 2 26 0.0000 0 345 135 2700 1050 j\001 -4 0 0 50 -1 0 26 0.0000 0 270 750 8025 825 i<=n\001 -4 0 0 50 -1 2 26 0.0000 0 270 195 4125 5550 2\001 -4 0 0 50 -1 2 26 0.0000 0 180 225 8325 5550 n\001 -4 0 0 50 -1 2 26 0.0000 0 180 330 2550 1575 m\001 -4 0 0 50 -1 0 26 0.0000 0 360 750 9075 3975 j>=2\001 -4 0 0 50 -1 0 26 0.0000 0 360 855 9075 1575 j<=m\001 -4 0 0 50 -1 2 26 0.0000 0 270 105 9450 5475 i\001 -4 0 0 50 -1 0 26 0.0000 0 270 750 3825 825 i>=2\001 -4 0 0 50 -1 0 26 0.0000 0 360 1410 4875 825 j<=n+2-i\001 diff --git a/cloog-0.17.0/doc/images/basic.jpg b/cloog-0.17.0/doc/images/basic.jpg deleted file mode 100644 index 995b1d816207e6585df9c61ea65745d38e0db845..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21180 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 p1w&AAuAuLkmzJ*pirpYk=2 - | | j<=n+2-i - | |\ | i<=n - | | \ | -m-+-****---+-j<=m - | ***** | - | ****** | - | *******| -2-+-********-j>=2 - | | |\ -0-+-+------+--->i - | | | - 0 2 n diff --git a/cloog-0.17.0/doc/images/tree.eps b/cloog-0.17.0/doc/images/tree.eps deleted file mode 100644 index d80f6e9..0000000 --- a/cloog-0.17.0/doc/images/tree.eps +++ /dev/null @@ -1,258 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: tree.eps -%%Creator: fig2dev Version 3.2 Patchlevel 3c -%%CreationDate: Fri Sep 6 10:09:40 2002 -%%For: bastoul@whisky (Cedric Bastoul) -%%BoundingBox: 0 0 388 312 -%%Magnification: 1.0000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save -newpath 0 312 moveto 0 0 lineto 388 0 lineto 388 312 lineto closepath clip newpath --165.0 369.0 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def - /DrawEllipse { - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def - /savematrix mtrx currentmatrix def - x y tr xrad yrad sc 0 0 1 startangle endangle arc - closepath - savematrix setmatrix - } def - -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -%%Page: 1 1 -10 setmiterlimit - 0.06000 0.06000 sc -% -% Fig objects follow -% -7.500 slw -% Ellipse -n 5400 1200 237 237 0 360 DrawEllipse gs col0 s gr - -% Ellipse -n 3000 3600 237 237 0 360 DrawEllipse gs col0 s gr - -% Ellipse -n 7800 3600 237 237 0 360 DrawEllipse gs col0 s gr - -% Ellipse -n 6600 4800 237 237 0 360 DrawEllipse gs col0 s gr - -% Ellipse -n 5400 2325 237 237 0 360 DrawEllipse gs col0 s gr - -% Polyline -gs clippath -5355 2115 m 5445 2115 l 5445 1888 l 5400 2068 l 5355 1888 l cp -eoclip -n 5400 1425 m - 5400 2100 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 5355 1888 m 5400 2068 l 5445 1888 l 5355 1888 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -5355 3390 m 5445 3390 l 5445 3163 l 5400 3343 l 5355 3163 l cp -eoclip -n 5400 2550 m - 5400 3375 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 5355 3163 m 5400 3343 l 5445 3163 l 5355 3163 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -2955 4590 m 3045 4590 l 3045 4363 l 3000 4543 l 2955 4363 l cp -eoclip -n 3000 3825 m - 3000 4575 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 2955 4363 m 3000 4543 l 3045 4363 l 2955 4363 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -6563 4544 m 6611 4621 l 6803 4500 l 6627 4558 l 6755 4424 l cp -eoclip -n 7800 3825 m - 6600 4575 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 6755 4424 m 6627 4558 l 6803 4500 l 6755 4424 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -8988 4621 m 9036 4544 l 8844 4424 l 8973 4558 l 8796 4500 l cp -eoclip -n 7800 3825 m - 9000 4575 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 8796 4500 m 8973 4558 l 8844 4424 l 8796 4500 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -6555 5790 m 6645 5790 l 6645 5563 l 6600 5743 l 6555 5563 l cp -eoclip -n 6600 5025 m - 6600 5775 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 6555 5563 m 6600 5743 l 6645 5563 l 6555 5563 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -7802 3411 m 7831 3326 l 7615 3253 l 7772 3354 l 7587 3338 l cp -eoclip -n 5400 2550 m - 7803 3364 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 7587 3338 m 7772 3354 l 7615 3253 l 7587 3338 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -2971 3337 m 3000 3422 l 3215 3348 l 3031 3364 l 3186 3262 l cp -eoclip -n 5400 2550 m - 3000 3375 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 3186 3262 m 3031 3364 l 3215 3348 l 3186 3262 l cp gs 0.00 setgray ef gr col0 s -/Times-Roman ff 330.00 scf sf -3075 4200 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -6675 5400 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -5475 3000 m -gs 1 -1 sc (1) col0 sh gr -/Times-Roman ff 330.00 scf sf -3825 3000 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -6900 3000 m -gs 1 -1 sc (2) col0 sh gr -/Times-Roman ff 330.00 scf sf -6975 4200 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -8475 4200 m -gs 1 -1 sc (1) col0 sh gr -/Times-Roman ff 330.00 scf sf -5475 1800 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -2850 4950 m -gs 1 -1 sc (S1) col0 sh gr -/Times-Roman ff 330.00 scf sf -5250 3750 m -gs 1 -1 sc (S2) col0 sh gr -/Times-Roman ff 330.00 scf sf -6450 6150 m -gs 1 -1 sc (S3) col0 sh gr -/Times-Roman ff 330.00 scf sf -8850 4950 m -gs 1 -1 sc (S4) col0 sh gr -/Times-Roman ff 330.00 scf sf -5355 2430 m -gs 1 -1 sc (i) col0 sh gr -/Times-Roman ff 330.00 scf sf -2963 3667 m -gs 1 -1 sc (j) col0 sh gr -/Times-Roman ff 330.00 scf sf -7763 3675 m -gs 1 -1 sc (j) col0 sh gr -/Times-Roman ff 330.00 scf sf -6533 4890 m -gs 1 -1 sc (k) col0 sh gr -$F2psEnd -rs diff --git a/cloog-0.17.0/doc/images/tree.fig b/cloog-0.17.0/doc/images/tree.fig deleted file mode 100644 index 9c202bb..0000000 --- a/cloog-0.17.0/doc/images/tree.fig +++ /dev/null @@ -1,54 +0,0 @@ -#FIG 3.2 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 5400 1200 237 237 5400 1200 5625 1275 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 3000 3600 237 237 3000 3600 3225 3675 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 7800 3600 237 237 7800 3600 8025 3675 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 6600 4800 237 237 6600 4800 6825 4875 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 5400 2325 237 237 5400 2325 5625 2400 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 5400 1425 5400 2100 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 5400 2550 5400 3375 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 3000 3825 3000 4575 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 7800 3825 6600 4575 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 7800 3825 9000 4575 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 6600 5025 6600 5775 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 5400 2550 7803 3364 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 5400 2550 3000 3375 -4 0 0 50 0 0 22 0.0000 0 225 150 3075 4200 0\001 -4 0 0 50 0 0 22 0.0000 0 225 150 6675 5400 0\001 -4 0 0 50 0 0 22 0.0000 0 225 150 5475 3000 1\001 -4 0 0 50 0 0 22 0.0000 0 225 150 3825 3000 0\001 -4 0 0 50 0 0 22 0.0000 0 225 150 6900 3000 2\001 -4 0 0 50 0 0 22 0.0000 0 225 150 6975 4200 0\001 -4 0 0 50 0 0 22 0.0000 0 225 150 8475 4200 1\001 -4 0 0 50 0 0 22 0.0000 0 225 150 5475 1800 0\001 -4 0 0 50 0 0 22 0.0000 0 225 345 2850 4950 S1\001 -4 0 0 50 0 0 22 0.0000 0 225 345 5250 3750 S2\001 -4 0 0 50 0 0 22 0.0000 0 225 345 6450 6150 S3\001 -4 0 0 50 0 0 22 0.0000 0 225 345 8850 4950 S4\001 -4 0 0 50 0 0 22 0.0000 0 225 90 5355 2430 i\001 -4 0 0 50 0 0 22 0.0000 0 300 90 2963 3667 j\001 -4 0 0 50 0 0 22 0.0000 0 300 90 7763 3675 j\001 -4 0 0 50 0 0 22 0.0000 0 225 150 6533 4890 k\001 diff --git a/cloog-0.17.0/doc/images/tree.jpg b/cloog-0.17.0/doc/images/tree.jpg deleted file mode 100644 index 7329268b65736eafa7d05bbd39135092db60da2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13713 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 diff --git a/cloog-0.17.0/doc/images/tree.pdf b/cloog-0.17.0/doc/images/tree.pdf deleted file mode 100644 index 7569edebb461590b8208c320a8e109fd4a44c25c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4558 zcmY!laBzLzpZpC2X%esJZ$1gYK!rFNF79(|DOBbvR^M;#ZX`ru_<{iRoIF7b|6jRSOh2bV59po*xQ2T;|F<@wB&4j`)iwn#BuVNw-DD zHlJ$!{=GBGHMR8oHdX$atCKb>_B(Yn-}1S`EP6l5zcAbA@tU90mfd1_z0i!KW3gF@ z%~iMfH%ArLRp%PK3zN2+VsO2!e__w97mxRv9ZTZ(jQM^mAm-cyWv_b=4J+;Z@37>t zv8PC#xWrqnnaUpFKPPk9ipSCN%a4?7Fp;|W>RRowTj`%~v;V$+Cu&P9i{Sd@2UDb` zy}QA9&G<)W#j;;t4w|S{Ui!xO3p}Ks&4x7 zO|L6M+1hhc_4@Az+;4R*U;Sy$=j1~RG)>urbU&DBS45{>Aoy)XjSo8e@`#a^x>(8wPnNcw5!paYi zk~^CYua3$K%X+N0)O_-+qyN&*i)!s$J~3yWh}D5L-%Z*T&Mk3X{hq0E3%j}C%4us4 z2l7SAyG<0`{^GUQ)i;{Ik6i6g_;+4gYv1QKD~2`YAB?|tX0P~S!l3=7?bGD*v;LLG zzCABqbMJskp7nHpH~Z?2+!NkMf}Zd9TDA3-_;#1SeK(iIbBT)@MVQR7ulzK<`)|gN@A~g%AODb= zmjW#UQu9(k#RjOb0MUj9hUQ#QF;hg55>i=^svnS;o~rMgnv$95lwY9`ZJ=PFU~FNo zU~Fg<%cUQXSd^MqqF@Xvbhz|`Qj7CTi;`1|ZEW-dit>|#Q%j=t162o3Kyo0xT>73Ri8-0cj(O=h zsR{;M`oSfsxnT;1hK5}FzL~|vnR)5qnJFb13Pz>|T>24EV@%8px%8bg5{rUUOEmPW zQj7BS^Yc>mOUm>0OEQX5Q}xsGON;b_^)vOe^s_a&z;1TS%t zmnM~fQWPlq44t8M6v#ucDhgJI8G>Rg$j%O$SS#k_PKpi?4wpDy-g$CeSfHn|koL)I zetUU>l&=PM^({8Y5EW(W@;Tn7F+1h#)f8c$O`H=}bk1XuU{ads?XdEqR@Z`{R}YpR zz2+^epX<6zZ05&>#@jAmVn6@r(*TS)-G*{quXyiQcy~)^ho$xk_N@@;LrB3wD8aZ|(@zNEl&NlL*BBc>gc zpLz30*zSp2W=$8E;^{n7 zR4qEVc2Y49ThXf3pO`F|S1-QNUi#1NgG9T)ZBAJsZr|BwWxuSfNO%7uayN65`sV9< z4c*OmtFm4G9rP&q!spvEA49igBuzb{$aNt!R4;%xX6w3+Ws$-cn~fF}y)}Kw<7cYD zcr(1~!IY-sPqyAwKgpIqm-$A4;pUAc*MFV)GuvQih+FrOaQ|Yf#CDA<*RII0x;uI= zc)~>RMc>A%MfqB*I zSi|(?%MbDv+S-C4g1GjX1u{QcN@vnu;Z z{#FJ7LOjnxKDq1-T%)u_{ftR-p5~e33I}snbG9@;Oz;hmTDi`WgYTi;{exaN>)2*3 zQVQ)|=xci-^?>ZkkN$GC#lJUKxJa$d<=f6+BlPr?&7yAiKDGw-AGLD+s?(3DF5k3z zgTst9CO^6F1}%=Cu_KH}Z^!9%neGpFCNgF>kyh)s4+gB+4 z-fIW5QU$|4pAMT?Va-^L3eNt$A_uDe8Fn|`T6$4bY@!U?j+G70=Zk{byYyDDN(HLHU3oj9GI0j>qzwSz^Yn#X3gi~2d^4@Kk6?&zhU{MczcPuF#^cGc})o+ToO_YHj}TlwaLcrpL-p9$P+oZNU6b zV<)Q>|NIXRAKl3P?V5V;&eT)BuXRMfs+$-kuU>uc=zsoWk1xb-vzL*3`AT{M|CdtU z#@`7SY!j@4FK*oLd9|&3y}g7*<-=ol6o*e{cK$Mz-Pp z>+q-9l54MOnM<8L!zMj1=Hj_`8SO{kF1mbq-u^->quO7eue~%Dc*1}Aw4V&9hJ%)L z&?*>Q{(%ZjLn9M-y$r4~L4r0m`avdKph_wTQOts?P?)Tt0hb}Do<^1j@uBi4<*>d} zVsR>{HqysZ6M;%7xN3Fey_8Y);o z+2%$@TrhPY{UA0-9;63^Elo_odO&QDILI838$h&)nI*`tTwu0|35cy=f<%MFVg3Q> z0bvjyM1#Tx#5OfBfcqb$9^^)lJX8*BH;fH3+r+{^!N|Zs0Ysac7=pqQ9RA?2G&KP6 zNySvr4{|%qorY%S;IM%4LA0TT0X%F#YC#wj)~2RrVEaL8U>N2X6H{XaV_4cUF@fth zG%zqw023gUpcDY2K_=qE$ZC+;#>U26aKk_nWMHrtKuHR$*W3&v3P4E*l!QQPj14iO z39KKK{J{EQ(FjWJNNiB>fXpy8Fo;EJ0fQRb(99oDl%G|%GcYhT#n5YLfT7ON98>~=9D{I+p^1qlx?W>LBMS^M0}~88j1A1p zFx6QiiIo&3X6B?8ae+D{!I@R53Wg>M`a${mB?{oytAf5~URu5aDCEI?i{g^Rq7rbZ Qniv@vaH*=g`nz!f04+F%L;wH) diff --git a/cloog-0.17.0/doc/images/tree.txt b/cloog-0.17.0/doc/images/tree.txt deleted file mode 100644 index 7bcfef2..0000000 --- a/cloog-0.17.0/doc/images/tree.txt +++ /dev/null @@ -1,25 +0,0 @@ - * - | - |0 - | - V - i - | - +-----+-----+ - | | | - |0 |1 |2 - | | | - V V V - j S2 j - | | - |0 +--+--+ - | | | - V |0 |1 - S1 | | - V V - k S4 - | - |0 - | - V - S3 diff --git a/cloog-0.17.0/examples/README b/cloog-0.17.0/examples/README deleted file mode 100644 index 1a9881e..0000000 --- a/cloog-0.17.0/examples/README +++ /dev/null @@ -1,58 +0,0 @@ -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** Library use examples ** -# **-------------------------------------------------------------------** -# ** First version of this file: july 15th 2003 ** -# **-------------------------------------------------------------------**/ -# - - -In this directory are presented various examples of how to use the CLooG -library. For each case, you will need to edit the makefile file according to -your system, in particular you will have to set where your CLooG library has -been installed, and where are the CLooG header files. Don't forget to update -your LD_LIBRARY_PATH environment variable to reach the CLooG library. If you -performed the default installation of CLooG, the library is in /usr/local/lib -thus you need to set LD_LIBRARY_PATH thanks to one of the following command: -'setenv LD_LIBRARY_PATH /usr/local/lib' for tcsh-like shells, or -'export LD_LIBRARY_PATH=/usr/local/lib' for bash-like shells. - -For any problem: . - - -# **-------------------------------------------------------------------** -# ** I. Example ** -# **-------------------------------------------------------------------**/ - - -This example program creates a simple CLooG-like loop generation program in a -few lines. The input problem has to be given on standard input. We can test it -for instance by typing 'more FILE.cloog | ./example' (or example.exe under -Cygwin). - - -# **-------------------------------------------------------------------** -# ** II. cloog2loopgen ** -# **-------------------------------------------------------------------**/ - -NO MORE EXISTS ! - -This example creates a program converting a CLooG input file to a LoopGen input -file. This can be useful to compare the two tools (I do not support LoopGen, -don't ask me if you find some bugs !). The usage of the created tool is: -'cloog2loopgen input_file output_file'. - - -# **-------------------------------------------------------------------** -# ** III. cloog2Omega ** -# **-------------------------------------------------------------------**/ - - -NO MORE EXISTS ! - -This example creates a program converting a CLooG input file to an Omega -CodeGen input file. This can be useful to compare the two tools (I do not -support CodeGen, don't ask me if you find some bugs !). The usage of the -created tool is: 'cloog2omega input_file output_file'. diff --git a/cloog-0.17.0/examples/example/Makefile b/cloog-0.17.0/examples/example/Makefile deleted file mode 100644 index 9b6150b..0000000 --- a/cloog-0.17.0/examples/example/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Please enter here the locations for CloogLib include and libraries if they -# aren't the default values (/usr/lib and /usr/include). -CLOOG_INC = $(HOME)/progs/linux/include -CLOOG_LIB = $(HOME)/progs/linux/lib - -CC = gcc -LDLIBS= -lcloog -CFLAGS= -I $(CLOOG_INC) -L $(CLOOG_LIB) - - -example: example.c - @echo " /*-----------------------------------------------*" - @echo " * Making example *" - @echo " *-----------------------------------------------*/" - $(CC) example.c -o example $(CFLAGS) $(LDLIBS) - -clean: - @echo " /*-----------------------------------------------*" - @echo " * Cleaning example *" - @echo " *-----------------------------------------------*/" - -rm -f example example.exe core diff --git a/cloog-0.17.0/examples/example/example.c b/cloog-0.17.0/examples/example/example.c deleted file mode 100644 index 403d213..0000000 --- a/cloog-0.17.0/examples/example/example.c +++ /dev/null @@ -1,29 +0,0 @@ -/* This is a very simple example of how to use the CLooGLib inside your - * programs. You should compile it by typing 'make' (after edition of the - * makefile), then test it for instance by typing - * 'more FILE.cloog | ./example' (or example.exe under Cygwin). - */ - -# include -# include - -int main() -{ - CloogState *state; - CloogInput *input; - CloogOptions * options ; - struct clast_stmt *root; - - state = cloog_state_malloc(); - options = cloog_options_malloc(state); - input = cloog_input_read(stdin, options); - - root = cloog_clast_create_from_input(input, options); - clast_pprint(stdout, root, 0, options); - - cloog_clast_free(root); - cloog_options_free(options) ; - cloog_state_free(state); - - return 0 ; -} diff --git a/cloog-0.17.0/genversion.sh.in b/cloog-0.17.0/genversion.sh.in deleted file mode 100755 index 77c04d7..0000000 --- a/cloog-0.17.0/genversion.sh.in +++ /dev/null @@ -1,15 +0,0 @@ -#! /bin/sh -srcdir=@abs_srcdir@ -PACKAGE=@PACKAGE@ -VERSION=@VERSION@ - -if test -f $srcdir/.git/HEAD; then - GIT_REPO="$srcdir/.git" - GIT_HEAD_ID=`GIT_DIR=$GIT_REPO git describe` -elif test -f $srcdir/CLOOG_HEAD; then - GIT_HEAD_ID=`cat $srcdir/CLOOG_HEAD` -else - GIT_HEAD_ID="$PACKAGE-$VERSION-UNKNOWN" -fi - -echo $GIT_HEAD_ID | sed -e 's/cloog-//' diff --git a/cloog-0.17.0/include/cloog/block.h b/cloog-0.17.0/include/cloog/block.h deleted file mode 100644 index 95f2a44..0000000 --- a/cloog-0.17.0/include/cloog/block.h +++ /dev/null @@ -1,117 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** block.h ** - **-------------------------------------------------------------------** - ** First version: June 11th 2005 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_BLOCK_H -#define CLOOG_BLOCK_H -#if defined(__cplusplus) -extern "C" - { -#endif - - -/** - * CloogBlock structure: - * this structure contains the informations of a statement block. It may happen - * that users are lazy enough to ask CLooG to generate the code for statements - * with exactly the same domain/scattering pair (possibly differing by only one - * constant) instead of giving only one pair. CLooG provides them a last chance - * to save time and memory by trying to find these blocks itself. The block - * contains the statement list and the common informations of the statements. - * This structure contains also the number of existing active references to it: - * because CLooG uses many copies of blocks there is no need to actually copy - * these blocks but just to return a pointer to them and to increment the number - * of active references. Each time a CloogBlock will be freed, we will decrement - * the active reference counter and actually free it if its value is zero. - */ -struct cloogblock -{ - CloogState *state; /**< State. */ - CloogStatement * statement ; /**< The list of statements in the block. */ - int nb_scaldims ; /**< Number of scalar dimensions. */ - cloog_int_t *scaldims; /**< Scalar dimension values. */ - int depth ; /**< Original block depth (outer loop number).*/ - int references ; /**< Number of references to this structure. */ - void * usr; /**< User field, for library user convenience. - * This pointer is not freed when the - * CloogBlock structure is freed. - */ -} ; -typedef struct cloogblock CloogBlock ; - - -/** - * CloogBlockList structure: - * this structure reprensents a node of a linked list of CloogBlock structures. - */ -struct cloogblocklist -{ CloogBlock * block ; /**< An element of the list. */ - struct cloogblocklist * next ;/**< Pointer to the next element of the list.*/ -} ; -typedef struct cloogblocklist CloogBlockList ; - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void cloog_block_print_structure(FILE *, CloogBlock *, int) ; -void cloog_block_print(FILE *, CloogBlock *) ; -void cloog_block_list_print(FILE *, CloogBlockList *) ; - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ -void cloog_block_free(CloogBlock *) ; -void cloog_block_list_free(CloogBlockList *) ; - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -CloogBlock * cloog_block_malloc(CloogState *state); -CloogBlock * cloog_block_alloc(CloogStatement *statement, int nb_scaldims, - cloog_int_t *scaldims, int depth); -CloogBlockList * cloog_block_list_malloc(void); -CloogBlockList * cloog_block_list_alloc(CloogBlock *) ; -CloogBlock * cloog_block_copy(CloogBlock * block) ; -void cloog_block_merge(CloogBlock *, CloogBlock *) ; - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ - diff --git a/cloog-0.17.0/include/cloog/clast.h b/cloog-0.17.0/include/cloog/clast.h deleted file mode 100644 index b455369..0000000 --- a/cloog-0.17.0/include/cloog/clast.h +++ /dev/null @@ -1,154 +0,0 @@ -#ifndef CLOOG_CLAST_H -#define CLOOG_CLAST_H -#if defined(__cplusplus) -extern "C" - { -#endif - -enum clast_expr_type { - clast_expr_name, - clast_expr_term, - clast_expr_bin, - clast_expr_red -}; -struct clast_expr { - enum clast_expr_type type; -}; - -struct clast_name { - struct clast_expr expr; - const char * name; -}; - -/* Represents the term - * val * var (if var != NULL) - * or - * val (if var == NULL) - */ -struct clast_term { - struct clast_expr expr; - cloog_int_t val; - struct clast_expr *var; -}; - -enum clast_red_type { clast_red_sum, clast_red_min, clast_red_max }; -struct clast_reduction { - struct clast_expr expr; - enum clast_red_type type; - int n; - struct clast_expr* elts[1]; -}; - -enum clast_bin_type { clast_bin_fdiv, clast_bin_cdiv, - clast_bin_div, clast_bin_mod }; -struct clast_binary { - struct clast_expr expr; - enum clast_bin_type type; - struct clast_expr* LHS; - cloog_int_t RHS; -}; - -struct clast_stmt; -struct clast_stmt_op { - void (*free)(struct clast_stmt *); -}; - -#define CLAST_STMT_IS_A(stmt, type) ((stmt)->op == &(type)) - -extern const struct clast_stmt_op stmt_root; -extern const struct clast_stmt_op stmt_ass; -extern const struct clast_stmt_op stmt_user; -extern const struct clast_stmt_op stmt_block; -extern const struct clast_stmt_op stmt_for; -extern const struct clast_stmt_op stmt_guard; - -struct clast_stmt { - const struct clast_stmt_op *op; - struct clast_stmt *next; -}; - -struct clast_root { - struct clast_stmt stmt; - CloogNames * names; /**< Names of iterators and parameters. */ -}; - -struct clast_assignment { - struct clast_stmt stmt; - const char * LHS; - struct clast_expr * RHS; -}; - -struct clast_block { - struct clast_stmt stmt; - struct clast_stmt * body; -}; - -struct clast_user_stmt { - struct clast_stmt stmt; - CloogDomain * domain; - CloogStatement * statement; - struct clast_stmt * substitutions; -}; - -struct clast_for { - struct clast_stmt stmt; - CloogDomain * domain; - const char * iterator; - struct clast_expr * LB; - struct clast_expr * UB; - cloog_int_t stride; - struct clast_stmt * body; -}; - -struct clast_equation { - struct clast_expr * LHS; - struct clast_expr * RHS; - int sign; -}; - -struct clast_guard { - struct clast_stmt stmt; - struct clast_stmt * then; - int n; - struct clast_equation eq[1]; -}; - - -struct clast_stmt *cloog_clast_create_from_input(CloogInput *input, - CloogOptions *options); -struct clast_stmt *cloog_clast_create(CloogProgram *program, - CloogOptions *options); -void cloog_clast_free(struct clast_stmt *s); - -struct clast_name *new_clast_name(const char *name); -struct clast_term *new_clast_term(cloog_int_t c, struct clast_expr *v); -struct clast_binary *new_clast_binary(enum clast_bin_type t, - struct clast_expr *lhs, cloog_int_t rhs); -struct clast_reduction *new_clast_reduction(enum clast_red_type t, int n); -struct clast_root *new_clast_root(CloogNames *names); -struct clast_assignment *new_clast_assignment(const char *lhs, - struct clast_expr *rhs); -struct clast_user_stmt *new_clast_user_stmt(CloogDomain *domain, - CloogStatement *stmt, struct clast_stmt *subs); -struct clast_block *new_clast_block(void); -struct clast_for *new_clast_for(CloogDomain *domain, const char *it, - struct clast_expr *LB, struct clast_expr *UB, - CloogStride *stride); -struct clast_guard *new_clast_guard(int n); - -void free_clast_name(struct clast_name *t); -void free_clast_term(struct clast_term *t); -void free_clast_binary(struct clast_binary *b); -void free_clast_reduction(struct clast_reduction *r); -void free_clast_expr(struct clast_expr *e); -void free_clast_stmt(struct clast_stmt *s); - -int clast_expr_equal(struct clast_expr *e1, struct clast_expr *e2); - -struct clast_expr *clast_bound_from_constraint(CloogConstraint *constraint, - int level, CloogNames *names); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.17.0/include/cloog/cloog.h b/cloog-0.17.0/include/cloog/cloog.h deleted file mode 100644 index a8c3f28..0000000 --- a/cloog-0.17.0/include/cloog/cloog.h +++ /dev/null @@ -1,62 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** cloog.h ** - **-------------------------------------------------------------------** - ** First version: july 25th 2002 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - -/****************************************************************************** - * THIS FILE HAS BEEN AUTOMATICALLY GENERATED FROM clooh.h.in BY configure * - ******************************************************************************/ - -#ifndef CLOOG_H -#define CLOOG_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#endif /* !CLOOG_H */ diff --git a/cloog-0.17.0/include/cloog/constraints.h b/cloog-0.17.0/include/cloog/constraints.h deleted file mode 100644 index 4818c4c..0000000 --- a/cloog-0.17.0/include/cloog/constraints.h +++ /dev/null @@ -1,121 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** constraints.h ** - **-------------------------------------------------------------------** - ** First version: april 17th 2005 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_CONSTRAINTS_H -#define CLOOG_CONSTRAINTS_H - -struct cloogconstraint; -typedef struct cloogconstraint CloogConstraint; -struct cloogconstraintset; -typedef struct cloogconstraintset CloogConstraintSet; -struct cloogequalities; -typedef struct cloogequalities CloogEqualities; - -#if defined(__cplusplus) -extern "C" - { -#endif - -/****************************************************************************** - * Equalities spreading functions * - ******************************************************************************/ -CloogEqualities *cloog_equal_alloc(int n, int nb_levels, - int nb_parameters); -void cloog_equal_free(CloogEqualities *equal); -int cloog_equal_count(CloogEqualities *equal); -int cloog_equal_type(CloogEqualities *equal, int level); -void cloog_equal_del(CloogEqualities *equal, int level); -int cloog_equal_total_dimension(CloogEqualities *equal); - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -void cloog_constraint_set_normalize(CloogConstraintSet *, int); -void cloog_constraint_set_free(CloogConstraintSet *); -int cloog_constraint_set_contains_level(CloogConstraintSet *constraints, - int level, int nb_parameters); -int cloog_constraint_set_total_dimension(CloogConstraintSet *constraints); -int cloog_constraint_set_n_iterators(CloogConstraintSet *constraints, - int nb_parameters); -CloogConstraintSet *cloog_constraint_set_copy(CloogConstraintSet *); -CloogConstraintSet *cloog_constraint_set_simplify(CloogConstraintSet *, CloogEqualities *, int, int); - -int cloog_constraint_needs_reduction(CloogConstraint *upper, int level); -CloogConstraintSet *cloog_constraint_set_for_reduction(CloogConstraint *upper, - CloogConstraint *lower); -CloogConstraintSet *cloog_constraint_set_reduce(CloogConstraintSet *constraints, - int level, CloogEqualities *equal, int nb_par, cloog_int_t *bound); -int cloog_constraint_set_foreach_constraint(CloogConstraintSet *constraints, - int (*fn)(CloogConstraint *constraint, void *user), void *user); -int cloog_constraint_is_valid(CloogConstraint *constraint); -CloogConstraint *cloog_constraint_copy(CloogConstraint *constraint); -void cloog_constraint_release(CloogConstraint *constraint); -CloogConstraint *cloog_constraint_invalid(void); -int cloog_constraint_total_dimension(CloogConstraint *constraint); - -CloogConstraint *cloog_equal_constraint(CloogEqualities *equal, int j); -void cloog_equal_add(CloogEqualities *equal, - CloogConstraintSet *constraints, - int level, CloogConstraint *line, int nb_par); - -CloogConstraint *cloog_constraint_set_defining_equality( - CloogConstraintSet *constraints, int level); -CloogConstraint *cloog_constraint_set_defining_inequalities( - CloogConstraintSet *constraints, - int level, CloogConstraint **lower, int nb_parameters); -int cloog_constraint_involves(CloogConstraint *constraint, int v); -int cloog_constraint_is_lower_bound(CloogConstraint *constraint, int v); -int cloog_constraint_is_upper_bound(CloogConstraint *constraint, int v); -int cloog_constraint_is_equality(CloogConstraint *constraint); -void cloog_constraint_constant_get(CloogConstraint *constraint, - cloog_int_t *val); -void cloog_constraint_coefficient_get(CloogConstraint *constraint, - int var, cloog_int_t *val); -void cloog_constraint_coefficient_set(CloogConstraint *constraint, - int var, cloog_int_t val); -void cloog_constraint_copy_coefficients(CloogConstraint *constraint, - cloog_int_t *dst); -CloogConstraintSet *cloog_constraint_set_drop_constraint( - CloogConstraintSet *constraints, CloogConstraint *constraint); - -struct clast_expr *cloog_constraint_variable_expr(CloogConstraint *constraint, - int level, CloogNames *names); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.17.0/include/cloog/domain.h b/cloog-0.17.0/include/cloog/domain.h deleted file mode 100644 index 767771b..0000000 --- a/cloog-0.17.0/include/cloog/domain.h +++ /dev/null @@ -1,177 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** domain.h ** - **-------------------------------------------------------------------** - ** First version: october 28th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_DOMAIN_H -#define CLOOG_DOMAIN_H -#if defined(__cplusplus) -extern "C" - { -#endif - - -struct cloogdomain; -typedef struct cloogdomain CloogDomain ; -struct cloogscattering; -typedef struct cloogscattering CloogScattering; -struct osl_relation; - - -/** - * CloogDomainList structure: - * this structure reprensents a node of a linked list of CloogDomain structures. - */ -struct cloogdomainlist { - CloogDomain *domain; /**< An element of the list. */ - struct cloogdomainlist *next;/**< Pointer to the next element of the list.*/ -} ; -typedef struct cloogdomainlist CloogDomainList; - - -/** - * CloogScatteringList structure: - * this structure reprensents a node of a linked list of CloogScattering structures. - */ -struct cloogscatteringlist { - CloogScattering *scatt; /**< An element of the list. */ - struct cloogscatteringlist *next;/**< Pointer to the next element of the list.*/ -} ; -typedef struct cloogscatteringlist CloogScatteringList; - - -/****************************************************************************** - * PolyLib interface * - ******************************************************************************/ -void cloog_domain_print_constraints(FILE *, CloogDomain *, - int print_number); -void cloog_scattering_print_constraints(FILE *, CloogScattering *); -void cloog_domain_free(CloogDomain *) ; -void cloog_scattering_free(CloogScattering *); -CloogDomain * cloog_domain_copy(CloogDomain *) ; -CloogDomain * cloog_domain_convex(CloogDomain * Pol) ; -CloogDomain * cloog_domain_simple_convex(CloogDomain * domain); -CloogDomain * cloog_domain_simplify(CloogDomain *, CloogDomain *) ; -CloogDomain * cloog_domain_union(CloogDomain *, CloogDomain *) ; -CloogDomain * cloog_domain_intersection(CloogDomain *, CloogDomain *) ; -CloogDomain * cloog_domain_difference(CloogDomain *, CloogDomain *) ; -void cloog_domain_sort(CloogDomain**,unsigned,unsigned,int *); -int cloog_domain_follows(CloogDomain *dom1, CloogDomain *dom2, unsigned level); -CloogDomain * cloog_domain_empty(CloogDomain *model); -int cloog_domain_is_bounded(CloogDomain *dim, unsigned level); -CloogDomain *cloog_domain_bound_splitter(CloogDomain *dom, int level); - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void cloog_domain_print_structure(FILE *file, CloogDomain *domain, int level, - const char *name); - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ -void cloog_domain_list_free(CloogDomainList *); -void cloog_scattering_list_free(CloogScatteringList *); - - -/*+**************************************************************************** - * Reading function * - ******************************************************************************/ -CloogDomain * cloog_domain_read_context(CloogState *state, FILE * foo); -CloogDomain * cloog_domain_union_read(CloogState *state, FILE *foo, int nb_par); -CloogScattering *cloog_domain_read_scattering(CloogDomain *domain, FILE *foo); - -CloogDomain * cloog_domain_from_cloog_matrix(CloogState *state, - CloogMatrix *matrix, int nb_par); -CloogScattering * cloog_scattering_from_cloog_matrix(CloogState *state, - CloogMatrix *matrix, int nb_scat, int nb_par); - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -CloogDomain *cloog_domain_from_osl_relation(CloogState *, - struct osl_relation *); -CloogScattering *cloog_scattering_from_osl_relation(CloogState *, - struct osl_relation *); -CloogConstraintSet *cloog_domain_constraints(CloogDomain *); -int cloog_domain_isempty(CloogDomain *) ; -CloogDomain * cloog_domain_universe(CloogState *state, unsigned dim); -CloogDomain * cloog_domain_project(CloogDomain *, int); -CloogDomain * cloog_domain_extend(CloogDomain *, int); -int cloog_domain_never_integral(CloogDomain *) ; -void cloog_domain_stride(CloogDomain *, int, cloog_int_t *, cloog_int_t *); -int cloog_domain_can_stride(CloogDomain *domain, int level); -int cloog_domain_is_otl(CloogDomain *domain, int level); -CloogDomain * cloog_domain_stride_lower_bound(CloogDomain *domain, int level, - CloogStride *stride); -CloogDomain * cloog_domain_add_stride_constraint(CloogDomain *domain, - CloogStride *stride); -int cloog_domain_can_unroll(CloogDomain *domain, int level, - cloog_int_t *n, CloogConstraint **lb); -CloogDomain * cloog_domain_fixed_offset(CloogDomain *domain, int level, - CloogConstraint *lb, cloog_int_t offset); -int cloog_domain_lazy_disjoint(CloogDomain *, CloogDomain *) ; -int cloog_domain_lazy_equal(CloogDomain *, CloogDomain *) ; -int cloog_scattering_lazy_block(CloogScattering *, CloogScattering *, - CloogScatteringList *, int); -int cloog_scattering_lazy_isscalar(CloogScattering *, int, - cloog_int_t *); -int cloog_domain_lazy_isconstant(CloogDomain *domain, int dimension, - cloog_int_t *value); -int cloog_scattering_list_lazy_same(CloogScatteringList *); -CloogDomain * cloog_domain_cut_first(CloogDomain *domain, CloogDomain **rest); -CloogDomain * cloog_domain_simplify_union(CloogDomain *domain); -CloogScattering * cloog_scattering_erase_dimension(CloogScattering *, int); - -int cloog_domain_dimension(CloogDomain *) ; -int cloog_domain_parameter_dimension(CloogDomain *domain); -int cloog_scattering_dimension(CloogScattering *, CloogDomain *); -int cloog_domain_isconvex(CloogDomain *) ; -CloogDomain * cloog_domain_cube(CloogState *state, - int dim, cloog_int_t min, cloog_int_t max); -CloogDomain * cloog_domain_from_context(CloogDomain *context); -CloogDomain * cloog_domain_scatter(CloogDomain *domain, CloogScattering *scatt); -int cloog_scattering_fully_specified(CloogScattering *scattering, - CloogDomain *domain); - -CloogStride *cloog_domain_list_stride(CloogDomainList *list, int level); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.17.0/include/cloog/input.h b/cloog-0.17.0/include/cloog/input.h deleted file mode 100644 index b3d3c53..0000000 --- a/cloog-0.17.0/include/cloog/input.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef CLOOG_INPUT_H -#define CLOOG_INPUT_H - -#if defined(__cplusplus) -extern "C" { -#endif - -struct osl_scop; - -struct clooginput { - CloogDomain *context; - CloogUnionDomain *ud; -}; -typedef struct clooginput CloogInput; - -CloogInput *cloog_input_from_osl_scop(CloogState *, struct osl_scop *); -CloogInput *cloog_input_read(FILE *file, CloogOptions *options); -CloogInput *cloog_input_alloc(CloogDomain *context, CloogUnionDomain *ud); -void cloog_input_free(CloogInput *input); - -void cloog_input_dump_cloog(FILE *file, CloogInput *input, CloogOptions *opt); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/include/cloog/int.h b/cloog-0.17.0/include/cloog/int.h deleted file mode 100644 index 623a1cb..0000000 --- a/cloog-0.17.0/include/cloog/int.h +++ /dev/null @@ -1,174 +0,0 @@ -#ifndef CLOOG_INT_H -#define CLOOG_INT_H - -#include -#include -#if defined(CLOOG_INT_GMP) -#include -#include -#ifndef mp_get_memory_functions -void mp_get_memory_functions( - void *(**alloc_func_ptr) (size_t), - void *(**realloc_func_ptr) (void *, size_t, size_t), - void (**free_func_ptr) (void *, size_t)); -#endif -#endif - -#if defined(__cplusplus) -extern "C" - { -#endif - -#if defined(CLOOG_INT_INT) -typedef int cloog_int_t; -#define CLOOG_INT_FORMAT "%d" -#elif defined(CLOOG_INT_LONG) -typedef long cloog_int_t; -#define CLOOG_INT_FORMAT "%ld" -#elif defined(CLOOG_INT_LONG_LONG) -typedef long long cloog_int_t; -#define CLOOG_INT_FORMAT "%lld" -#elif defined(CLOOG_INT_GMP) -typedef mpz_t cloog_int_t; -#else -#error "No integer type defined" -#endif - -#if defined(CLOOG_INT_GMP) - -#define cloog_int_init(i) mpz_init(i) -#define cloog_int_clear(i) mpz_clear(i); - -#define cloog_int_set(r,i) mpz_set(r,i) -#define cloog_int_set_si(r,i) mpz_set_si(r,i) -#define cloog_int_abs(r,i) mpz_abs(r,i) -#define cloog_int_neg(r,i) mpz_neg(r,i) -#define cloog_int_swap(i,j) mpz_swap(i,j) - -#define cloog_int_add(r,i,j) mpz_add(r,i,j) -#define cloog_int_add_ui(r,i,j) mpz_add_ui(r,i,j) -#define cloog_int_sub(r,i,j) mpz_sub(r,i,j) -#define cloog_int_sub_ui(r,i,j) mpz_sub_ui(r,i,j) -#define cloog_int_mul(r,i,j) mpz_mul(r,i,j) -#define cloog_int_addmul(r,i,j) mpz_addmul(r,i,j) -#define cloog_int_divexact(r,i,j) mpz_divexact(r,i,j) -#define cloog_int_tdiv_q(r,i,j) mpz_tdiv_q(r,i,j) -#define cloog_int_fdiv_q(r,i,j) mpz_fdiv_q(r,i,j) -#define cloog_int_fdiv_r(r,i,j) mpz_fdiv_r(r,i,j) -#define cloog_int_cdiv_q(r,i,j) mpz_cdiv_q(r,i,j) -#define cloog_int_gcd(r,i,j) mpz_gcd(r,i,j) - -#define cloog_int_sgn(i) mpz_sgn(i) -#define cloog_int_cmp(i,j) mpz_cmp(i,j) -#define cloog_int_abs_cmp(i,j) mpz_cmpabs(i,j) -#define cloog_int_cmp_si(i,si) mpz_cmp_si(i,si) -#define cloog_int_eq(i,j) (mpz_cmp(i,j) == 0) -#define cloog_int_ne(i,j) (mpz_cmp(i,j) != 0) -#define cloog_int_gt(i,j) (mpz_cmp(i,j) > 0) - -#define cloog_int_is_divisible_by(i,j) mpz_divisible_p(i,j) - -#define cloog_int_read(r,s) mpz_set_str(r,s,10) -typedef void (*cloog_int_print_gmp_free_t)(void *, size_t); -#define cloog_int_print(out,i) \ - do { \ - char *s; \ - cloog_int_print_gmp_free_t gmp_free; \ - s = mpz_get_str(0, 10, i); \ - fprintf(out, "%s", s); \ - mp_get_memory_functions(NULL, NULL, &gmp_free); \ - (*gmp_free)(s, strlen(s)+1); \ - } while (0) - -#else - -#define cloog_int_init(i) ((i) = 0) -#define cloog_int_clear(i) do { } while (0) - -#define cloog_int_set(r,i) ((r) = (i)) -#define cloog_int_set_si(r,i) ((r) = (i)) -#define cloog_int_abs(r,i) ((r) = (i) > 0 ? (i) : -(i)) -#define cloog_int_neg(r,i) ((r) = -(i)) -#define cloog_int_swap(i,j) do { \ - cloog_int_t _t = i; \ - i = j; \ - j = _t; \ - } while (0) - -#define cloog_int_add(r,i,j) ((r) = (i) + (j)) -#define cloog_int_add_ui(r,i,j) ((r) = (i) + (j)) -#define cloog_int_sub(r,i,j) ((r) = (i) - (j)) -#define cloog_int_sub_ui(r,i,j) ((r) = (i) - (j)) -#define cloog_int_mul(r,i,j) ((r) = (i) * (j)) -#define cloog_int_addmul(r,i,j) ((r) += (i) * (j)) -#define cloog_int_divexact(r,i,j) ((r) = (i) / (j)) -#define cloog_int_tdiv_q(r,i,j) ((r) = (i) / (j)) -#define cloog_int_fdiv_q(r,i,j) do { \ - assert((j) > 0); \ - (r) = (i) >= 0 ? (i) / (j) : \ - -((-(i)+(j)-1)/(j)); \ - } while (0) -#define cloog_int_fdiv_r(r,i,j) do { \ - assert((j) > 0); \ - (r) = (i) >= 0 ? (i) % (j) : \ - (j)-1 - ((-(i)+(j)-1)%(j)); \ - } while (0) -#define cloog_int_cdiv_q(r,i,j) do { \ - assert((j) > 0); \ - (r) = (i) >= 0 ? \ - ((i)+(j)-1) / (j) : \ - -(-(i)/(j)); \ - } while (0) -cloog_int_t cloog_gcd(cloog_int_t a, cloog_int_t b); -#define cloog_int_gcd(r,i,j) (r) = cloog_gcd(i,j) - -#define cloog_int_sgn(i) ((i) > 0 ? 1 : (i) < 0 ? -1 : 0) -#define cloog_int_cmp(i,j) (i - j) -#define cloog_int_abs_cmp(i,j) (((i) > 0 ? (i) : -(i)) - ((j) > 0 ? (j) : -(j))) -#define cloog_int_cmp_si(i,si) (i - si) -#define cloog_int_eq(i,j) ((i) == (j)) -#define cloog_int_ne(i,j) ((i) != (j)) -#define cloog_int_gt(i,j) ((i) > (j)) - -#define cloog_int_is_divisible_by(i,j) ((i) % (j) == 0) - -#define cloog_int_read(i,s) sscanf(s, CLOOG_INT_FORMAT, &i) -#define cloog_int_print(out,i) fprintf(out, CLOOG_INT_FORMAT, i) - -#endif - -#define cloog_int_is_pos(i) (cloog_int_sgn(i) > 0) -#define cloog_int_is_neg(i) (cloog_int_sgn(i) < 0) -#define cloog_int_is_zero(i) (cloog_int_sgn(i) == 0) -#define cloog_int_is_one(i) (cloog_int_cmp_si(i,1) == 0) -#define cloog_int_is_neg_one(i) (cloog_int_cmp_si(i,-1) == 0) -#define cloog_int_gt_si(i,si) (cloog_int_cmp_si(i,si) > 0) -#define cloog_int_ne_si(i,j) (cloog_int_cmp_si(i,j) != 0) -#define cloog_int_lt(i,j) (cloog_int_cmp(i,j) < 0) -#define cloog_int_le(i,j) (cloog_int_cmp(i,j) <= 0) -#define cloog_int_abs_ne(i,j) (cloog_int_abs_cmp(i,j) != 0) -#define cloog_int_abs_ge(i,j) (cloog_int_abs_cmp(i,j) >= 0) -#define cloog_int_abs_lt(i,j) (cloog_int_abs_cmp(i,j) < 0) - -struct cloog_vec { - unsigned size; - cloog_int_t *p; -}; - -struct cloog_vec *cloog_vec_alloc(unsigned size); -void cloog_vec_free(struct cloog_vec *vec); - -int cloog_seq_first_non_zero(cloog_int_t *p, unsigned len); -void cloog_seq_cpy(cloog_int_t *dst, cloog_int_t *src, unsigned len); -void cloog_seq_neg(cloog_int_t *dst, cloog_int_t *src, unsigned len); -void cloog_seq_combine(cloog_int_t *dst, cloog_int_t m1, cloog_int_t *src1, - cloog_int_t m2, cloog_int_t *src2, unsigned len); -void cloog_seq_gcd(cloog_int_t *p, unsigned len, cloog_int_t *gcd); -int cloog_seq_is_neg(cloog_int_t *p1, cloog_int_t *p2, unsigned len); -void cloog_seq_normalize(cloog_int_t *p, unsigned len); - -#if defined(__cplusplus) - } -#endif - -#endif diff --git a/cloog-0.17.0/include/cloog/isl/backend.h b/cloog-0.17.0/include/cloog/isl/backend.h deleted file mode 100644 index e4576d9..0000000 --- a/cloog-0.17.0/include/cloog/isl/backend.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef CLOOG_ISL_BACKEND_H -#define CLOOG_ISL_BACKEND_H - -#include - -struct cloogbackend { - struct isl_ctx *ctx; - unsigned ctx_allocated : 1; -}; - -#endif /* define _H */ diff --git a/cloog-0.17.0/include/cloog/isl/cloog.h b/cloog-0.17.0/include/cloog/isl/cloog.h deleted file mode 100644 index 9379054..0000000 --- a/cloog-0.17.0/include/cloog/isl/cloog.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef CLOOG_ISL_H -#define CLOOG_ISL_H - -#ifndef CLOOG_INT_GMP -#define CLOOG_INT_GMP -#endif - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -CloogState *cloog_isl_state_malloc(struct isl_ctx *ctx); - -#if defined(__cplusplus) -} -#endif - -#endif /* define _H */ diff --git a/cloog-0.17.0/include/cloog/isl/constraintset.h b/cloog-0.17.0/include/cloog/isl/constraintset.h deleted file mode 100644 index c3c2eed..0000000 --- a/cloog-0.17.0/include/cloog/isl/constraintset.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef CLOOG_ISL_CONSTRAINTSET_H -#define CLOOG_ISL_CONSTRAINTSET_H - -#include - -#if defined(__cplusplus) -extern "C" - { -#endif - -struct cloogconstraintset { - int dummy; /* Solaris cc doesn't like zero-sized structs */ -}; - -struct cloogequalities { - int n; - unsigned total_dim; - isl_constraint **constraints; - int *types; -}; - -struct cloogconstraint { - int dummy; /* Solaris cc doesn't like zero-sized structs */ -}; - -CloogConstraintSet *cloog_constraint_set_from_isl_basic_set(struct isl_basic_set *bset); -CloogConstraint *cloog_constraint_from_isl_constraint(struct isl_constraint *constraint); -isl_constraint *cloog_constraint_to_isl(CloogConstraint *constraint); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.17.0/include/cloog/isl/domain.h b/cloog-0.17.0/include/cloog/isl/domain.h deleted file mode 100644 index 427d847..0000000 --- a/cloog-0.17.0/include/cloog/isl/domain.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef CLOOG_ISL_DOMAIN_H -#define CLOOG_ISL_DOMAIN_H - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" - { -#endif - - -struct cloogdomain { - int dummy; /* Solaris cc doesn't like zero-sized structs */ -}; - -struct cloogscattering { - int dummy; /* Solaris cc doesn't like zero-sized structs */ -}; - -CloogDomain *cloog_domain_from_isl_set(struct isl_set *set); -CloogScattering *cloog_scattering_from_isl_map(struct isl_map *map); -CloogUnionDomain *cloog_union_domain_from_isl_union_map( - __isl_take isl_union_map *umap); -CloogUnionDomain *cloog_union_domain_from_isl_set( - __isl_take isl_set *set); - -__isl_give isl_set *isl_set_from_cloog_domain(CloogDomain *domain); - - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.17.0/include/cloog/loop.h b/cloog-0.17.0/include/cloog/loop.h deleted file mode 100644 index b62a274..0000000 --- a/cloog-0.17.0/include/cloog/loop.h +++ /dev/null @@ -1,120 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** loop.h ** - **-------------------------------------------------------------------** - ** First version: october 26th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_LOOP_H -#define CLOOG_LOOP_H -#if defined(__cplusplus) -extern "C" - { -#endif - -/** - * CloogLoop structure: - * this structure contains all the informations of a loop generated or to be - * generated. - * - if the loop has not been processed yet (it is not a result of a call to - * cloog_loop_generate), the domain is the whole iteration domain of a given - * block, the stride is 1 (i.e. there is no stride), block is necessarily not - * NULL and inner is NULL. - * - if the loop comes as a result of a cloog_loop_generate call, the domain - * describes the constraints (guards and loop bounds) for only one dimension - * (the last one: outer dimensions being considered as parameters), the stride - * may differ from one (this means that on the considered dimension, a step of - * 'stride' must be considered between integral point, the first integral - * point to be considered being the lower bound of the loop), inner may differ - * from NULL, meaning that there are further dimensions and nesting levels in - * the loop. - */ -struct cloogloop -{ - CloogState *state; /**< State. */ - CloogDomain * domain ; /**< The iteration domain. */ - CloogDomain *unsimplified; /**< Unsimplified version of domain. */ - int otl; /**< Loop is executed at most once. */ - CloogStride *stride; /**< If not NULL, stride information on iterator - * (filled only after loop generation). - */ - CloogBlock * block ; /**< The included statement block, NULL if none.*/ - void * usr; /**< User field, for library user convenience. - * This pointer is not freed when the - * CloogLoop structure is freed. - */ - struct cloogloop * inner ; /**< Loops at the next level. */ - struct cloogloop * next ; /**< Next loop at the same level. */ -} ; -typedef struct cloogloop CloogLoop ; - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void cloog_loop_print_structure(FILE *, CloogLoop *, int) ; -void cloog_loop_print(FILE *, CloogLoop *) ; - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ -void cloog_loop_free(CloogLoop *) ; - - -/****************************************************************************** - * Reading functions * - ******************************************************************************/ -CloogLoop *cloog_loop_from_domain(CloogState *state, CloogDomain *domain, - int number); -CloogLoop * cloog_loop_read(CloogState *state, - FILE * foo, int number, int nb_parameters); - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -CloogLoop * cloog_loop_block(CloogLoop *loop, int *scaldims, int nb_scattdims); -CloogLoop * cloog_loop_malloc(CloogState *state); -CloogLoop *cloog_loop_generate(CloogLoop *loop, CloogDomain *context, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options); -CloogLoop *cloog_loop_simplify(CloogLoop *loop, CloogDomain *context, int level, - int nb_scattdims, CloogOptions *options); -void cloog_loop_scatter(CloogLoop *, CloogScattering *); - - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.17.0/include/cloog/matrix.h b/cloog-0.17.0/include/cloog/matrix.h deleted file mode 100644 index 2b73039..0000000 --- a/cloog-0.17.0/include/cloog/matrix.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef CLOOG_MATRIX_H -#define CLOOG_MATRIX_H -#if defined(__cplusplus) -extern "C" - { -#endif - -/* The CloogMatrix structure is equivalent to the PolyLib Matrix data structure - * (see Wil93). This structure is devoted to represent a set of constraints. - * - * The whole matrix is stored in memory row after row at the p_Init address. p - * is an array of pointers where p[i] points to the first element of the i^{th - * row. NbRows and NbColumns are respectively the number of rows and columns of - * the matrix. Each row corresponds to a constraint. The first element of each - * row is an equality/inequality tag. The constraint is an equality p(x) = 0 if - * the first element is 0, but it is an inequality p(x) \geq 0 if the first - * element is 1. The next elements are the unknown coefficients, followed by - * the parameter coefficients, then the constant term. For instance, the - * following three constraints: - * - * -i + m = 0 - * -j + n >= 0 - * i + j - k >= 0 - * - * would be represented by the following rows: - * - * # eq/in i j k m n cst - * 0 0 -1 0 1 0 0 - * 1 -1 0 0 0 1 0 - * 1 1 1 -1 0 0 0 - * - * To be able to provide different precision version (CLooG supports 32 bits, - * 64 bits and arbitrary precision through the GMP library), the cloog_int_t - * type depends on the configuration options (it may be long int for 32 bits - * version, long long int for 64 bits version, and mpz_t for multiple precision - * version). */ - -struct cloogmatrix -{ unsigned NbRows; /* Number of rows. */ - unsigned NbColumns; /* Number of columns. */ - cloog_int_t ** p; /* Array of pointers to the matrix rows. */ - cloog_int_t * p_Init; /* Matrix rows contiguously in memory. */ -}; - -typedef struct cloogmatrix CloogMatrix; - -CloogMatrix *cloog_matrix_alloc (unsigned, unsigned); -void cloog_matrix_free (CloogMatrix *); -void cloog_matrix_print_structure(FILE *file, CloogMatrix *M, - const char *prefix, const char *suffix); -CloogMatrix *cloog_matrix_read(FILE *input); -CloogMatrix *cloog_matrix_read_of_size(FILE *input, - unsigned n_row, unsigned n_col); -void cloog_matrix_print(FILE*, CloogMatrix*); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.17.0/include/cloog/matrix/constraintset.h b/cloog-0.17.0/include/cloog/matrix/constraintset.h deleted file mode 100644 index 5023162..0000000 --- a/cloog-0.17.0/include/cloog/matrix/constraintset.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef CLOOG_MATRIX_CONSTRAINTSET_H -#define CLOOG_MATRIX_CONSTRAINTSET_H - -#if defined(__cplusplus) -extern "C" - { -#endif - -struct cloogconstraintset { - CloogMatrix M; -}; - -struct cloogequalities { - CloogConstraintSet *constraints; - int *types; -}; - -struct cloogconstraint { - CloogConstraintSet *set; - cloog_int_t **line; -}; - -CloogConstraintSet *cloog_constraint_set_from_cloog_matrix(CloogMatrix *M); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.17.0/include/cloog/names.h b/cloog-0.17.0/include/cloog/names.h deleted file mode 100644 index 7f566f1..0000000 --- a/cloog-0.17.0/include/cloog/names.h +++ /dev/null @@ -1,103 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** names.h ** - **-------------------------------------------------------------------** - ** First version: august 1st 2002 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_NAMES_H -#define CLOOG_NAMES_H -#if defined(__cplusplus) -extern "C" - { -#endif - - -# define MAX_NAME 50 -# define FIRST_PARAMETER 'M' -# define FIRST_ITERATOR 'i' - - -/** - * CloogNames structure: - * this structure contains all the informations about parameter and iterator - * names (as strings). - */ -struct cloognames -{ int nb_scalars ; /**< Scalar dimension number. */ - int nb_scattering ; /**< Scattering iterator number. */ - int nb_iterators ; /**< Iterator number. */ - int nb_parameters ; /**< Parameter number. */ - char ** scalars ; /**< The scalar names (an array of strings). */ - char ** scattering ; /**< The scattering names (an array of strings). */ - char ** iterators ; /**< The iterator names (an array of strings). */ - char ** parameters ; /**< The parameter names (an array of strings). */ - int references; /**< Number of references to this structure. */ -} ; -typedef struct cloognames CloogNames ; - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void cloog_names_print_structure(FILE *, CloogNames *, int) ; -void cloog_names_print(FILE *, CloogNames *) ; - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ -void cloog_names_free(CloogNames *) ; - - -/****************************************************************************** - * Reading functions * - ******************************************************************************/ -char ** cloog_names_read_strings(FILE *file, int nb_items); - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -CloogNames * cloog_names_malloc(void); -CloogNames * cloog_names_copy(CloogNames *names); -CloogNames * cloog_names_alloc(void); -char ** cloog_names_generate_items(int, char *, char) ; -CloogNames * cloog_names_generate(int, int, int, int, char, char, char, char) ; -void cloog_names_scalarize(CloogNames *, int, int *) ; -const char * cloog_names_name_at_level(CloogNames *names, int level); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.17.0/include/cloog/options.h b/cloog-0.17.0/include/cloog/options.h deleted file mode 100644 index 2233579..0000000 --- a/cloog-0.17.0/include/cloog/options.h +++ /dev/null @@ -1,165 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** options.h ** - **-------------------------------------------------------------------** - ** First version: april 19th 2003 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - -#include - -#ifndef CLOOG_OPTIONS_H -#define CLOOG_OPTIONS_H -#if defined(__cplusplus) -extern "C" - { -#endif - - -/* Uncomment the following line if you want some information about - * maximum total allocated memory for code generation. -#define CLOOG_MEMORY - */ -#define CLOOG_SCALARS - -struct osl_scop; - -struct cloogoptions; -typedef struct cloogoptions CloogOptions; -struct osl_scop; - -struct cloogoptions -{ - CloogState *state; /* State. */ - /* OPTIONS FOR LOOP GENERATION */ - int l ; /* Last level to optimize. */ - int f ; /* First level to optimize. */ - int stop ; /* Level to stop code generation. */ - int strides ; /* 1 if user wants to handle non-unit strides (then loop - * increment can be something else than one), 0 otherwise. - */ - int sh; /* 1 for computing simple hulls */ - int first_unroll; /* The first dimension to unroll */ - - /* OPTIONS FOR PRETTY PRINTING */ - int esp ; /* 1 if user wants to spread all equalities, i.e. when there - * is something like "i = 3*j + 1 ; A[i] = 0 ;" the generator - * will write "A[3*j + 1] = 0 ;", 0 otherwise. - */ - int fsp ; /* The iteration level where equalities spreading can begin - * (it might happen that the user wants not to spread values - * of scattering iterators). - */ - int otl ; /* 1 for eliminate loops running just one time and write them - * as an affectation of the iterator, 0 otherwise. - */ - int block ; /* 1 to make one new block {...} per new dimension, - * 0 otherwise. - */ - int compilable; /* 1 to generate a compilable code by using - * preprocessing, 0 otherwise. - */ - int callable; /* 1 to generate callable code by using - * preprocessing, 0 otherwise. - */ - int language; /* 1 to generate FORTRAN, 0 for C otherwise. */ - - int save_domains;/* Save unsimplified copy of domain. */ - - /* MISC OPTIONS */ - char * name ; /* Name of the input file. */ - float time ; /* Time spent for code generation in seconds. */ - int openscop; /* 1 if the input file has OpenScop format, 0 otherwise. */ - struct osl_scop *scop; /* Input OpenScop scop if any, NULL otherwise. */ -#ifdef CLOOG_MEMORY - int memory ; /* Memory spent for code generation in kilobytes. */ -#endif - int quiet; /* Don't print any informational messages. */ - /* UNDOCUMENTED OPTIONS FOR THE AUTHOR ONLY */ - int leaks ; /* 1 if I want to print the allocation statistics, - * 0 otherwise. - */ - int backtrack; /* 1 to perform backtracking in - * Quillere's algorithm, 0 otherwise. - */ - int override ; /* 1 if I want to bypass CLooG decisions on option correctness - * (generated code may be incorrect), 0 otherwise. - */ - int structure ; /* 1 if I want to print the CloogProgram structure before the - * pretty printed code, 0 otherwise. - */ - int noblocks ; /* 1 if I don't want to make statement blocks, 0 otherwise. */ - int noscalars ; /* 1 if I don't want to use scalar dimensions, 0 otherwise. */ - int nosimplify; /* 1 if I don't want to simplify polyhedra, 0 otherwise. */ -} ; - - -/****************************************************************************** - * Error reporting functions * - ******************************************************************************/ - -enum cloog_msg_type { CLOOG_ERROR, CLOOG_WARNING, CLOOG_INFO }; - -void cloog_msg(CloogOptions *options, enum cloog_msg_type type, - const char *msg, ...); -void cloog_die(const char *msg, ...); - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void cloog_options_print(FILE *, CloogOptions *) ; - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ -void cloog_options_free(CloogOptions *) ; - - -/****************************************************************************** - * Reading function * - ******************************************************************************/ -void cloog_options_read(CloogState *state, int argc, char **argv, - FILE **input, FILE **output, CloogOptions **options); - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -CloogOptions *cloog_options_malloc(CloogState *state); -void cloog_options_copy_from_osl_scop(struct osl_scop *, CloogOptions *); - - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.17.0/include/cloog/pprint.h b/cloog-0.17.0/include/cloog/pprint.h deleted file mode 100644 index 55e2b5e..0000000 --- a/cloog-0.17.0/include/cloog/pprint.h +++ /dev/null @@ -1,67 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** pprint.h ** - **-------------------------------------------------------------------** - ** First version: october 26th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_PPRINT_H -#define CLOOG_PPRINT_H -#if defined(__cplusplus) -extern "C" - { -#endif - - -# define MAX_STRING_VAL 32 -# define INDENT_STEP 2 - -# define EQTYPE_NONE 0 -# define EQTYPE_CONSTANT 1 -# define EQTYPE_PUREITEM 2 -# define EQTYPE_EXAFFINE 3 - -#define CLOOG_LANGUAGE_C 0 -#define CLOOG_LANGUAGE_FORTRAN 1 - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void clast_pprint(FILE *foo, struct clast_stmt *root, int indent, - CloogOptions *options); - - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.17.0/include/cloog/program.h b/cloog-0.17.0/include/cloog/program.h deleted file mode 100644 index 530d21f..0000000 --- a/cloog-0.17.0/include/cloog/program.h +++ /dev/null @@ -1,116 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** program.h ** - **-------------------------------------------------------------------** - ** First version: october 25th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_PROGRAM_H -#define CLOOG_PROGRAM_H -#if defined(__cplusplus) -extern "C" - { -#endif - - -# define MAX_STRING 1024 -# define MEGA 1000000 /* One million. */ - - -/** - * CloogProgram structure: - * this structure contains all the informations of a program generated or to be - * generated. - */ -struct cloogprogram -{ /* Basic program description fields. */ - char language ; /**< The language of the program. */ - int nb_scattdims ; /**< Scattering dimension number. */ - CloogDomain * context ; /**< The context of the program. */ - CloogLoop * loop ; /**< The loops of the program. */ - CloogNames * names ; /**< Iterators and parameters names. */ - CloogBlockList * blocklist ; /**< The statement block list. */ - - /* Internal service fields, filled up by cloog_program_scatter function. */ - int * scaldims ; /**< Boolean array saying whether a given - * scattering dimension is scalar or not. - */ - /* Library user reserved field. */ - void * usr; /**< User field, for library user convenience. - * This pointer is not freed when the - * CloogProgram structure is freed. - */ -} ; -typedef struct cloogprogram CloogProgram ; - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void cloog_program_print_structure(FILE *, CloogProgram *, int) ; -void cloog_program_print(FILE *, CloogProgram *) ; -void cloog_program_pprint(FILE *, CloogProgram *, CloogOptions *) ; -void cloog_program_dump_cloog(FILE *, CloogProgram *, CloogScatteringList *); - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ -void cloog_program_free(CloogProgram *) ; - - -/****************************************************************************** - * Reading function * - ******************************************************************************/ -CloogProgram * cloog_program_read(FILE *, CloogOptions *) ; - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -CloogProgram * cloog_program_malloc(void); -CloogProgram * cloog_program_alloc(CloogDomain *context, CloogUnionDomain *ud, - CloogOptions *options); -CloogProgram * cloog_program_generate(CloogProgram *, CloogOptions *) ; -void cloog_program_block(CloogProgram *program, - CloogScatteringList *scattering, CloogOptions *options); -void cloog_program_extract_scalars(CloogProgram *program, - CloogScatteringList *scattering, CloogOptions *options); -void cloog_program_scatter(CloogProgram *program, - CloogScatteringList *scattering, CloogOptions *options); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ - diff --git a/cloog-0.17.0/include/cloog/state.h b/cloog-0.17.0/include/cloog/state.h deleted file mode 100644 index ebc3272..0000000 --- a/cloog-0.17.0/include/cloog/state.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef CLOOG_STATE_H -#define CLOOG_STATE_H - -struct cloogbackend; -typedef struct cloogbackend CloogBackend; - -#if defined(__cplusplus) -extern "C" { -#endif - -struct cloogstate { - CloogBackend *backend; - - cloog_int_t zero; - cloog_int_t one; - cloog_int_t negone; - - int block_allocated; - int block_freed; - int block_max; - - int domain_allocated; - int domain_freed; - int domain_max; - - int loop_allocated; - int loop_freed; - int loop_max; - - int statement_allocated; - int statement_freed; - int statement_max; -}; -typedef struct cloogstate CloogState; - -CloogState *cloog_core_state_malloc(void); -CloogState *cloog_state_malloc(void); - -void cloog_core_state_free(CloogState *state); -void cloog_state_free(CloogState *state); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/include/cloog/statement.h b/cloog-0.17.0/include/cloog/statement.h deleted file mode 100644 index abc505e..0000000 --- a/cloog-0.17.0/include/cloog/statement.h +++ /dev/null @@ -1,85 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** statement.h ** - **-------------------------------------------------------------------** - ** First version: november 4th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_STATEMENT_H -#define CLOOG_STATEMENT_H -#if defined(__cplusplus) -extern "C" - { -#endif - - -struct cloogstatement -{ - CloogState *state; /* State. */ - char *name; /* Name of the statement. */ - int number; /* The statement unique number. */ - void * usr ; /* A pointer for library users convenience. */ - struct cloogstatement * next ; /* Pointer to the next statement with the - * same original domain and the same - * scattering function. - */ -} ; -typedef struct cloogstatement CloogStatement ; - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ -void cloog_statement_print_structure(FILE *, CloogStatement *, int) ; -void cloog_statement_print(FILE *, CloogStatement *) ; - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ -void cloog_statement_free(CloogStatement *) ; - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ -CloogStatement * cloog_statement_malloc(CloogState *state); -CloogStatement * cloog_statement_alloc(CloogState *state, int); -CloogStatement * cloog_statement_copy(CloogStatement *) ; -void cloog_statement_add(CloogStatement**, CloogStatement**, CloogStatement*) ; - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ - diff --git a/cloog-0.17.0/include/cloog/stride.h b/cloog-0.17.0/include/cloog/stride.h deleted file mode 100644 index f93dc4e..0000000 --- a/cloog-0.17.0/include/cloog/stride.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef CLOOG_STRIDE_H -#define CLOOG_STRIDE_H - -#if defined(__cplusplus) -extern "C" { -#endif - -/** - * Information about strides. - */ -struct cloogstride { - int references; - cloog_int_t stride; /**< The actual stride. */ - cloog_int_t offset; /**< Offset of strided loop. */ - cloog_int_t factor; - CloogConstraint *constraint; -}; -typedef struct cloogstride CloogStride; - -CloogStride *cloog_stride_alloc(cloog_int_t stride, cloog_int_t offset); -CloogStride *cloog_stride_alloc_from_constraint(cloog_int_t stride, - CloogConstraint *constraint, cloog_int_t factor); -CloogStride *cloog_stride_copy(CloogStride *stride); -void cloog_stride_free(CloogStride *stride); - -CloogConstraint *cloog_constraint_stride_lower_bound(CloogConstraint *c, - int level, CloogStride *stride); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/include/cloog/union_domain.h b/cloog-0.17.0/include/cloog/union_domain.h deleted file mode 100644 index 5c6ff86..0000000 --- a/cloog-0.17.0/include/cloog/union_domain.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef CLOOG_UNION_DOMAIN_H -#define CLOOG_UNION_DOMAIN_H - -#if defined(__cplusplus) -extern "C" { -#endif - -struct osl_scop; - -/** - * CloogNamedDomainList structure: - * this structure reprensents a node of a linked list of CloogDomain structures. - */ -struct cloognameddomainlist { - CloogDomain *domain; /**< An element of the list. */ - CloogScattering *scattering; /**< Scattering function for domain. */ - char *name; /**< Name of the domain. */ - void *usr; /**< A pointer for library user's convenience. */ - struct cloognameddomainlist *next;/**< Pointer to the next element of the list.*/ -}; -typedef struct cloognameddomainlist CloogNamedDomainList; - -/** - * A structure representing the input domains and scattering functions. - */ -struct clooguniondomain { - int n_name[3]; - char **name[3]; - CloogNamedDomainList *domain; - CloogNamedDomainList **next_domain; -}; -typedef struct clooguniondomain CloogUnionDomain; - -enum cloog_dim_type { CLOOG_PARAM, CLOOG_ITER, CLOOG_SCAT }; - -CloogUnionDomain *cloog_union_domain_read(FILE *file, int nb_par, - CloogOptions *options); -CloogUnionDomain *cloog_union_domain_alloc(int nb_par); -CloogUnionDomain *cloog_union_domain_add_domain(CloogUnionDomain *ud, - const char *name, CloogDomain *domain, CloogScattering *scattering, - void *usr); -CloogUnionDomain *cloog_union_domain_set_name(CloogUnionDomain *ud, - enum cloog_dim_type type, int index, const char *name); -void cloog_union_domain_free(CloogUnionDomain *ud); -CloogUnionDomain *cloog_union_domain_from_osl_scop(CloogState *, - struct osl_scop *); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/include/cloog/version.h b/cloog-0.17.0/include/cloog/version.h deleted file mode 100644 index 18a0db9..0000000 --- a/cloog-0.17.0/include/cloog/version.h +++ /dev/null @@ -1,50 +0,0 @@ -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_VERSION_H -#define CLOOG_VERSION_H -#if defined(__cplusplus) -extern "C" - { -#endif - -#define CLOOG_VERSION_MAJOR 0 -#define CLOOG_VERSION_MINOR 17 -#define CLOOG_VERSION_REVISION 0 - -const char *cloog_version(void); - -int cloog_version_major(void); - -int cloog_version_minor(void); - -int cloog_version_revision(void); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.17.0/include/cloog/version.h.in b/cloog-0.17.0/include/cloog/version.h.in deleted file mode 100644 index cee91a0..0000000 --- a/cloog-0.17.0/include/cloog/version.h.in +++ /dev/null @@ -1,50 +0,0 @@ -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#ifndef CLOOG_VERSION_H -#define CLOOG_VERSION_H -#if defined(__cplusplus) -extern "C" - { -#endif - -#define CLOOG_VERSION_MAJOR @VERSION_MAJOR@ -#define CLOOG_VERSION_MINOR @VERSION_MINOR@ -#define CLOOG_VERSION_REVISION @VERSION_REVISION@ - -const char *cloog_version(void); - -int cloog_version_major(void); - -int cloog_version_minor(void); - -int cloog_version_revision(void); - -#if defined(__cplusplus) - } -#endif -#endif /* define _H */ diff --git a/cloog-0.17.0/isl/AUTHORS b/cloog-0.17.0/isl/AUTHORS deleted file mode 100644 index 965ed11..0000000 --- a/cloog-0.17.0/isl/AUTHORS +++ /dev/null @@ -1,19 +0,0 @@ -isl was written by - - Sven Verdoolaege -2006-2007 Leiden Institute of Advanced Computer Science - Universiteit Leiden - Niels Bohrweg 1 - 2333 CA Leiden - The Netherlands -2008-2009 K.U.Leuven - Departement Computerwetenschappen - Celestijnenlaan 200A - B-3001 Leuven - Belgium -2010 INRIA Saclay - Ile-de-France - Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod - 91893 Orsay - France - -The quicksort implementation was written by Douglas C. Schmidt. diff --git a/cloog-0.17.0/isl/ChangeLog b/cloog-0.17.0/isl/ChangeLog deleted file mode 100644 index 506e95d..0000000 --- a/cloog-0.17.0/isl/ChangeLog +++ /dev/null @@ -1,64 +0,0 @@ -version: 0.08 -date: Fri Oct 21 12:36:20 CEST 2011 -changes: - - improved parsing - - drop isl_div abstraction - - rename isl_dim to isl_space - - |- - explicitly differentiate between spaces of maps, - sets and parameter sets - - add support for identifiers - - add support for (piecewise) multi quasi-affine expressions - - preliminary Python bindings ---- -version: 0.07 -date: Tue Jul 12 19:34:51 CEST 2011 -changes: - - hide internal structures of isl_div and isl_constraint - - preliminary scheduling - - add support for local spaces and (piecewise) quasi-affine expressions ---- -version: 0.06 -date: Fri Mar 18 15:59:16 CET 2011 -changes: - - improved parsing - - consistency changes in API - - hide internal structure of isl_ctx ---- -version: 0.05.1 -date: Wed Jan 5 10:21:42 CET 2011 -changes: - - fix simple symmetry detection in parametric integer programming ---- -version: 0.05 -date: Thu Dec 23 17:03:14 CET 2010 -changes: - - rename header files from isl_header.h to isl/header.h - - add higher level interface for dependence analysis - - improved argument parsing - - optionally triangulate domains during Bernstein expansion - - support extended PolyLib format - - hide internal structure of some data types - - improved coalescing - - add simple symmetry detection in parametric integer programming ---- -version: 0.04 -date: Fri Sep 10 12:57:50 CEST 2010 -changes: - - rename isl_pw_qpolynomial_fold_add - - add isl_map_apply_pw_qpolynomial_fold - - support named and nested spaces - - support union sets and maps - - add public API for matrices ---- -version: 0.03 -date: Tue Jun 29 13:16:46 CEST 2010 -changes: - - new printing functions - - support for "may" accesses in dependence analysis - - improved coalescing - - improved transitive closure - - fix several hard to trigger bugs - - improved argument parsing - - support parametric vertex enumeration for barvinok - - optionally use Bernstein expansion to compute bounds diff --git a/cloog-0.17.0/isl/GIT_HEAD_ID b/cloog-0.17.0/isl/GIT_HEAD_ID deleted file mode 100644 index eb4dbb1..0000000 --- a/cloog-0.17.0/isl/GIT_HEAD_ID +++ /dev/null @@ -1 +0,0 @@ -isl-0.08-60-g60518c5 diff --git a/cloog-0.17.0/isl/Makefile.am b/cloog-0.17.0/isl/Makefile.am deleted file mode 100644 index 5a8d307..0000000 --- a/cloog-0.17.0/isl/Makefile.am +++ /dev/null @@ -1,274 +0,0 @@ -if HAVE_CLANG - MAYBE_INTERFACE = interface -endif -SUBDIRS = . $(MAYBE_INTERFACE) doc -DIST_SUBDIRS = $(MAYBE_INTERFACE) doc - -ACLOCAL_AMFLAGS = -I m4 -AUTOMAKE_OPTIONS = nostdinc - -lib_LTLIBRARIES = libisl.la -noinst_PROGRAMS = isl_test isl_polyhedron_sample isl_pip \ - isl_polyhedron_minimize isl_polytope_scan \ - isl_polyhedron_detect_equalities isl_cat \ - isl_closure isl_bound -TESTS = isl_test pip_test.sh bound_test.sh - -if HAVE_PIPLIB -ISL_PIPLIB = \ - isl_lp_piplib.c \ - isl_map_piplib.c \ - isl_sample_piplib.c \ - isl_sample_piplib.h \ - isl_piplib.c -else -ISL_PIPLIB = \ - isl_lp_no_piplib.c \ - isl_map_no_piplib.c \ - isl_sample_no_piplib.c -endif - -if NEED_GET_MEMORY_FUNCTIONS -GET_MEMORY_FUNCTIONS=mp_get_memory_functions.c -endif - -INCLUDES = -I. -I$(srcdir) -I$(srcdir)/include -Iinclude/ -AM_CFLAGS = @WARNING_FLAGS@ - -libisl_la_SOURCES = \ - $(ISL_PIPLIB) \ - $(GET_MEMORY_FUNCTIONS) \ - isl_aff.c \ - isl_aff_private.h \ - isl_affine_hull.c \ - isl_arg.c \ - isl_band.c \ - isl_band_private.h \ - isl_basis_reduction.h \ - basis_reduction_tab.c \ - isl_bernstein.c \ - isl_bernstein.h \ - isl_blk.c \ - isl_bound.c \ - isl_bound.h \ - isl_coalesce.c \ - isl_constraint.c \ - isl_constraint_private.h \ - isl_convex_hull.c \ - isl_ctx.c \ - isl_ctx_private.h \ - isl_dim.c \ - isl_dim_map.h \ - isl_dim_map.c \ - isl_equalities.c \ - isl_equalities.h \ - isl_factorization.c \ - isl_factorization.h \ - isl_farkas.c \ - isl_flow.c \ - isl_fold.c \ - isl_gmp.c \ - isl_hash.c \ - isl_hmap_map_basic_set.c \ - isl_hmap_map_basic_set.h \ - isl_ilp.c \ - isl_input.c \ - isl_list.c \ - isl_list_private.h \ - isl_local_space_private.h \ - isl_local_space.c \ - isl_lp.c \ - isl_lp_piplib.h \ - isl_map.c \ - isl_map_simplify.c \ - isl_map_subtract.c \ - isl_map_private.h \ - isl_map_piplib.h \ - isl_mat.c \ - isl_mat_private.h \ - isl_morph.c \ - isl_morph.h \ - isl_id.c \ - isl_id_private.h \ - isl_obj.c \ - isl_options.c \ - isl_options_private.h \ - isl_output.c \ - isl_qsort.c \ - isl_qsort.h \ - isl_piplib.h \ - isl_point_private.h \ - isl_point.c \ - isl_polynomial_private.h \ - isl_polynomial.c \ - isl_printer_private.h \ - isl_printer.c \ - print.c \ - isl_range.c \ - isl_range.h \ - isl_reordering.c \ - isl_reordering.h \ - isl_sample.h \ - isl_sample.c \ - isl_scan.c \ - isl_scan.h \ - isl_schedule.c \ - isl_schedule_private.h \ - isl_space.c \ - isl_space_private.h \ - isl_stream.c \ - isl_stream_private.h \ - isl_seq.c \ - isl_tab.c \ - isl_tab.h \ - isl_tab_pip.c \ - isl_transitive_closure.c \ - isl_union_map.c \ - isl_union_map_private.h \ - isl_vec.c \ - isl_version.c \ - isl_vertices_private.h \ - isl_vertices.c -EXTRA_libisl_la_SOURCES = \ - isl_lp_piplib.c \ - isl_lp_no_piplib.c \ - isl_map_piplib.c \ - isl_map_no_piplib.c \ - isl_sample_no_piplib.c \ - isl_sample_piplib.c \ - isl_sample_piplib.h \ - isl_piplib.c -libisl_la_LIBADD = @PIPLIB_LIBS@ @GMP_LIBS@ -libisl_la_LDFLAGS = -version-info @versioninfo@ \ - @PIPLIB_LDFLAGS@ @GMP_LDFLAGS@ -libisl_la_CPPFLAGS = $(INCLUDES) @PIPLIB_CPPFLAGS@ @GMP_CPPFLAGS@ - -isl_test_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_test_LDFLAGS = @GMP_LDFLAGS@ -isl_test_LDADD = libisl.la @GMP_LIBS@ - -isl_polyhedron_sample_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polyhedron_sample_LDADD = libisl.la -isl_polyhedron_sample_SOURCES = \ - polyhedron_sample.c - -isl_pip_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_pip_LDFLAGS = @GMP_LDFLAGS@ -isl_pip_LDADD = libisl.la @GMP_LIBS@ -isl_pip_SOURCES = \ - pip.c - -isl_bound_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_bound_LDFLAGS = @GMP_LDFLAGS@ -isl_bound_LDADD = libisl.la @GMP_LIBS@ -isl_bound_SOURCES = \ - bound.c - -isl_polyhedron_minimize_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polyhedron_minimize_LDFLAGS = @GMP_LDFLAGS@ -isl_polyhedron_minimize_LDADD = libisl.la @GMP_LIBS@ -isl_polyhedron_minimize_SOURCES = \ - polyhedron_minimize.c - -isl_polytope_scan_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polytope_scan_LDADD = libisl.la -isl_polytope_scan_SOURCES = \ - polytope_scan.c - -isl_polyhedron_detect_equalities_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polyhedron_detect_equalities_LDADD = libisl.la -isl_polyhedron_detect_equalities_SOURCES = \ - polyhedron_detect_equalities.c - -isl_cat_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_cat_LDADD = libisl.la -isl_cat_SOURCES = \ - cat.c - -isl_closure_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_closure_LDADD = libisl.la -isl_closure_SOURCES = \ - closure.c - -nodist_pkginclude_HEADERS = \ - include/isl/config.h \ - include/isl/stdint.h -pkginclude_HEADERS = \ - include/isl/aff.h \ - include/isl/aff_type.h \ - include/isl/arg.h \ - include/isl/band.h \ - include/isl/blk.h \ - include/isl/constraint.h \ - include/isl/ctx.h \ - include/isl/dim.h \ - include/isl/flow.h \ - include/isl/id.h \ - include/isl/ilp.h \ - include/isl/int.h \ - include/isl/hash.h \ - include/isl/list.h \ - include/isl/local_space.h \ - include/isl/lp.h \ - include/isl/mat.h \ - include/isl/map.h \ - include/isl/map_type.h \ - include/isl/multi.h \ - include/isl/obj.h \ - include/isl/options.h \ - include/isl/point.h \ - include/isl/polynomial.h \ - include/isl/polynomial_type.h \ - include/isl/printer.h \ - include/isl/schedule.h \ - include/isl/seq.h \ - include/isl/set.h \ - include/isl/set_type.h \ - include/isl/space.h \ - include/isl/stream.h \ - include/isl/union_map.h \ - include/isl/union_set.h \ - include/isl/vec.h \ - include/isl/version.h \ - include/isl/vertices.h - -EXTRA_DIST = \ - isl_config_post.h \ - basis_reduction_templ.c \ - isl_list_templ.c \ - isl_list_templ.h \ - isl_multi_templ.c \ - isl_multi_templ.h \ - print_templ.c \ - isl_pw_templ.c \ - isl_union_templ.c \ - isl.py \ - doc/chicago.bst \ - doc/chicago.sty \ - doc/implementation.tex \ - doc/isl.bib \ - doc/mypod2latex \ - doc/manual.tex \ - doc/user.pod \ - test_inputs - -dist-hook: - echo @GIT_HEAD_VERSION@ > $(distdir)/GIT_HEAD_ID - (cd doc; make manual.pdf) - cp doc/manual.pdf $(distdir)/doc/ - -pkgconfigdir=$(pkgconfig_libdir) -pkgconfig_DATA = $(pkgconfig_libfile) - -gitversion.h: @GIT_HEAD@ - $(AM_V_GEN)echo '#define GIT_HEAD_ID "'@GIT_HEAD_VERSION@'"' > $@ - -install-data-local: $(srcdir)/isl.py - @libisl=`sed -ne "/^library_names=/{s/.*='//;s/'$$//;s/ .*//;p}" \ - $(builddir)/libisl.la`; \ - case $$libisl in \ - '') echo Cannot find isl library name. GDB bindings not installed.;; \ - *) echo $(INSTALL_DATA) $(srcdir)/isl.py \ - $(DESTDIR)$(libdir)/$$libisl-gdb.py; \ - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"; \ - $(INSTALL_DATA) $(srcdir)/isl.py $(DESTDIR)$(libdir)/$$libisl-gdb.py; esac diff --git a/cloog-0.17.0/isl/Makefile.in b/cloog-0.17.0/isl/Makefile.in deleted file mode 100644 index 0a62eee..0000000 --- a/cloog-0.17.0/isl/Makefile.in +++ /dev/null @@ -1,2227 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -noinst_PROGRAMS = isl_test$(EXEEXT) isl_polyhedron_sample$(EXEEXT) \ - isl_pip$(EXEEXT) isl_polyhedron_minimize$(EXEEXT) \ - isl_polytope_scan$(EXEEXT) \ - isl_polyhedron_detect_equalities$(EXEEXT) isl_cat$(EXEEXT) \ - isl_closure$(EXEEXT) isl_bound$(EXEEXT) -TESTS = isl_test$(EXEEXT) pip_test.sh bound_test.sh -subdir = . -DIST_COMMON = $(am__configure_deps) $(pkginclude_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/bound_test.sh.in $(srcdir)/isl_config.h.in \ - $(srcdir)/pip_test.sh.in $(top_srcdir)/configure \ - $(top_srcdir)/include/isl/config.h.in AUTHORS ChangeLog \ - config.guess config.sub depcomp install-sh ltmain.sh missing -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_c___attribute__.m4 \ - $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ - $(top_srcdir)/m4/ax_create_stdint_h.m4 \ - $(top_srcdir)/m4/ax_detect_git_head.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_warn_unused_result.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/ax_set_warning_flags.m4 \ - $(top_srcdir)/m4/ax_submodule.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = isl_config.h $(top_builddir)/include/isl/config.h -CONFIG_CLEAN_FILES = bound_test.sh pip_test.sh -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ - "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libisl_la_DEPENDENCIES = -am__libisl_la_SOURCES_DIST = isl_lp_no_piplib.c isl_map_no_piplib.c \ - isl_sample_no_piplib.c isl_lp_piplib.c isl_map_piplib.c \ - isl_sample_piplib.c isl_sample_piplib.h isl_piplib.c \ - mp_get_memory_functions.c isl_aff.c isl_aff_private.h \ - isl_affine_hull.c isl_arg.c isl_band.c isl_band_private.h \ - isl_basis_reduction.h basis_reduction_tab.c isl_bernstein.c \ - isl_bernstein.h isl_blk.c isl_bound.c isl_bound.h \ - isl_coalesce.c isl_constraint.c isl_constraint_private.h \ - isl_convex_hull.c isl_ctx.c isl_ctx_private.h isl_dim.c \ - isl_dim_map.h isl_dim_map.c isl_equalities.c isl_equalities.h \ - isl_factorization.c isl_factorization.h isl_farkas.c \ - isl_flow.c isl_fold.c isl_gmp.c isl_hash.c \ - isl_hmap_map_basic_set.c isl_hmap_map_basic_set.h isl_ilp.c \ - isl_input.c isl_list.c isl_list_private.h \ - isl_local_space_private.h isl_local_space.c isl_lp.c \ - isl_lp_piplib.h isl_map.c isl_map_simplify.c \ - isl_map_subtract.c isl_map_private.h isl_map_piplib.h \ - isl_mat.c isl_mat_private.h isl_morph.c isl_morph.h isl_id.c \ - isl_id_private.h isl_obj.c isl_options.c isl_options_private.h \ - isl_output.c isl_qsort.c isl_qsort.h isl_piplib.h \ - isl_point_private.h isl_point.c isl_polynomial_private.h \ - isl_polynomial.c isl_printer_private.h isl_printer.c print.c \ - isl_range.c isl_range.h isl_reordering.c isl_reordering.h \ - isl_sample.h isl_sample.c isl_scan.c isl_scan.h isl_schedule.c \ - isl_schedule_private.h isl_space.c isl_space_private.h \ - isl_stream.c isl_stream_private.h isl_seq.c isl_tab.c \ - isl_tab.h isl_tab_pip.c isl_transitive_closure.c \ - isl_union_map.c isl_union_map_private.h isl_vec.c \ - isl_version.c isl_vertices_private.h isl_vertices.c -@HAVE_PIPLIB_FALSE@am__objects_1 = libisl_la-isl_lp_no_piplib.lo \ -@HAVE_PIPLIB_FALSE@ libisl_la-isl_map_no_piplib.lo \ -@HAVE_PIPLIB_FALSE@ libisl_la-isl_sample_no_piplib.lo -@HAVE_PIPLIB_TRUE@am__objects_1 = libisl_la-isl_lp_piplib.lo \ -@HAVE_PIPLIB_TRUE@ libisl_la-isl_map_piplib.lo \ -@HAVE_PIPLIB_TRUE@ libisl_la-isl_sample_piplib.lo \ -@HAVE_PIPLIB_TRUE@ libisl_la-isl_piplib.lo -@NEED_GET_MEMORY_FUNCTIONS_TRUE@am__objects_2 = libisl_la-mp_get_memory_functions.lo -am_libisl_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ - libisl_la-isl_aff.lo libisl_la-isl_affine_hull.lo \ - libisl_la-isl_arg.lo libisl_la-isl_band.lo \ - libisl_la-basis_reduction_tab.lo libisl_la-isl_bernstein.lo \ - libisl_la-isl_blk.lo libisl_la-isl_bound.lo \ - libisl_la-isl_coalesce.lo libisl_la-isl_constraint.lo \ - libisl_la-isl_convex_hull.lo libisl_la-isl_ctx.lo \ - libisl_la-isl_dim.lo libisl_la-isl_dim_map.lo \ - libisl_la-isl_equalities.lo libisl_la-isl_factorization.lo \ - libisl_la-isl_farkas.lo libisl_la-isl_flow.lo \ - libisl_la-isl_fold.lo libisl_la-isl_gmp.lo \ - libisl_la-isl_hash.lo libisl_la-isl_hmap_map_basic_set.lo \ - libisl_la-isl_ilp.lo libisl_la-isl_input.lo \ - libisl_la-isl_list.lo libisl_la-isl_local_space.lo \ - libisl_la-isl_lp.lo libisl_la-isl_map.lo \ - libisl_la-isl_map_simplify.lo libisl_la-isl_map_subtract.lo \ - libisl_la-isl_mat.lo libisl_la-isl_morph.lo \ - libisl_la-isl_id.lo libisl_la-isl_obj.lo \ - libisl_la-isl_options.lo libisl_la-isl_output.lo \ - libisl_la-isl_qsort.lo libisl_la-isl_point.lo \ - libisl_la-isl_polynomial.lo libisl_la-isl_printer.lo \ - libisl_la-print.lo libisl_la-isl_range.lo \ - libisl_la-isl_reordering.lo libisl_la-isl_sample.lo \ - libisl_la-isl_scan.lo libisl_la-isl_schedule.lo \ - libisl_la-isl_space.lo libisl_la-isl_stream.lo \ - libisl_la-isl_seq.lo libisl_la-isl_tab.lo \ - libisl_la-isl_tab_pip.lo libisl_la-isl_transitive_closure.lo \ - libisl_la-isl_union_map.lo libisl_la-isl_vec.lo \ - libisl_la-isl_version.lo libisl_la-isl_vertices.lo -libisl_la_OBJECTS = $(am_libisl_la_OBJECTS) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -libisl_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libisl_la_LDFLAGS) $(LDFLAGS) -o $@ -PROGRAMS = $(noinst_PROGRAMS) -am_isl_bound_OBJECTS = isl_bound-bound.$(OBJEXT) -isl_bound_OBJECTS = $(am_isl_bound_OBJECTS) -isl_bound_DEPENDENCIES = libisl.la -isl_bound_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(isl_bound_LDFLAGS) $(LDFLAGS) -o $@ -am_isl_cat_OBJECTS = isl_cat-cat.$(OBJEXT) -isl_cat_OBJECTS = $(am_isl_cat_OBJECTS) -isl_cat_DEPENDENCIES = libisl.la -am_isl_closure_OBJECTS = isl_closure-closure.$(OBJEXT) -isl_closure_OBJECTS = $(am_isl_closure_OBJECTS) -isl_closure_DEPENDENCIES = libisl.la -am_isl_pip_OBJECTS = isl_pip-pip.$(OBJEXT) -isl_pip_OBJECTS = $(am_isl_pip_OBJECTS) -isl_pip_DEPENDENCIES = libisl.la -isl_pip_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(isl_pip_LDFLAGS) $(LDFLAGS) -o $@ -am_isl_polyhedron_detect_equalities_OBJECTS = isl_polyhedron_detect_equalities-polyhedron_detect_equalities.$(OBJEXT) -isl_polyhedron_detect_equalities_OBJECTS = \ - $(am_isl_polyhedron_detect_equalities_OBJECTS) -isl_polyhedron_detect_equalities_DEPENDENCIES = libisl.la -am_isl_polyhedron_minimize_OBJECTS = \ - isl_polyhedron_minimize-polyhedron_minimize.$(OBJEXT) -isl_polyhedron_minimize_OBJECTS = \ - $(am_isl_polyhedron_minimize_OBJECTS) -isl_polyhedron_minimize_DEPENDENCIES = libisl.la -isl_polyhedron_minimize_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(AM_CFLAGS) $(CFLAGS) $(isl_polyhedron_minimize_LDFLAGS) \ - $(LDFLAGS) -o $@ -am_isl_polyhedron_sample_OBJECTS = \ - isl_polyhedron_sample-polyhedron_sample.$(OBJEXT) -isl_polyhedron_sample_OBJECTS = $(am_isl_polyhedron_sample_OBJECTS) -isl_polyhedron_sample_DEPENDENCIES = libisl.la -am_isl_polytope_scan_OBJECTS = \ - isl_polytope_scan-polytope_scan.$(OBJEXT) -isl_polytope_scan_OBJECTS = $(am_isl_polytope_scan_OBJECTS) -isl_polytope_scan_DEPENDENCIES = libisl.la -isl_test_SOURCES = isl_test.c -isl_test_OBJECTS = isl_test-isl_test.$(OBJEXT) -isl_test_DEPENDENCIES = libisl.la -isl_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(isl_test_LDFLAGS) $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(libisl_la_SOURCES) $(EXTRA_libisl_la_SOURCES) \ - $(isl_bound_SOURCES) $(isl_cat_SOURCES) $(isl_closure_SOURCES) \ - $(isl_pip_SOURCES) $(isl_polyhedron_detect_equalities_SOURCES) \ - $(isl_polyhedron_minimize_SOURCES) \ - $(isl_polyhedron_sample_SOURCES) $(isl_polytope_scan_SOURCES) \ - isl_test.c -DIST_SOURCES = $(am__libisl_la_SOURCES_DIST) \ - $(EXTRA_libisl_la_SOURCES) $(isl_bound_SOURCES) \ - $(isl_cat_SOURCES) $(isl_closure_SOURCES) $(isl_pip_SOURCES) \ - $(isl_polyhedron_detect_equalities_SOURCES) \ - $(isl_polyhedron_minimize_SOURCES) \ - $(isl_polyhedron_sample_SOURCES) $(isl_polytope_scan_SOURCES) \ - isl_test.c -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -DATA = $(pkgconfig_DATA) -HEADERS = $(nodist_pkginclude_HEADERS) $(pkginclude_HEADERS) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir dist dist-all distcheck -ETAGS = etags -CTAGS = ctags -am__tty_colors = \ -red=; grn=; lgn=; blu=; std= -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CLANG_CXXFLAGS = @CLANG_CXXFLAGS@ -CLANG_LDFLAGS = @CLANG_LDFLAGS@ -CLANG_LIBS = @CLANG_LIBS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIT_HEAD = @GIT_HEAD@ -GIT_HEAD_ID = @GIT_HEAD_ID@ -GIT_HEAD_VERSION = @GIT_HEAD_VERSION@ -GMP_CPPFLAGS = @GMP_CPPFLAGS@ -GMP_LDFLAGS = @GMP_LDFLAGS@ -GMP_LIBS = @GMP_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PDFLATEX = @PDFLATEX@ -PERL = @PERL@ -PIPLIB_CPPFLAGS = @PIPLIB_CPPFLAGS@ -PIPLIB_LDFLAGS = @PIPLIB_LDFLAGS@ -PIPLIB_LIBS = @PIPLIB_LIBS@ -POD2HTML = @POD2HTML@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -WARNING_FLAGS = @WARNING_FLAGS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -llvm_config_found = @llvm_config_found@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfig_libdir = @pkgconfig_libdir@ -pkgconfig_libfile = @pkgconfig_libfile@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -versioninfo = @versioninfo@ -@HAVE_CLANG_TRUE@MAYBE_INTERFACE = interface -SUBDIRS = . $(MAYBE_INTERFACE) doc -DIST_SUBDIRS = $(MAYBE_INTERFACE) doc -ACLOCAL_AMFLAGS = -I m4 -AUTOMAKE_OPTIONS = nostdinc -lib_LTLIBRARIES = libisl.la -@HAVE_PIPLIB_FALSE@ISL_PIPLIB = \ -@HAVE_PIPLIB_FALSE@ isl_lp_no_piplib.c \ -@HAVE_PIPLIB_FALSE@ isl_map_no_piplib.c \ -@HAVE_PIPLIB_FALSE@ isl_sample_no_piplib.c - -@HAVE_PIPLIB_TRUE@ISL_PIPLIB = \ -@HAVE_PIPLIB_TRUE@ isl_lp_piplib.c \ -@HAVE_PIPLIB_TRUE@ isl_map_piplib.c \ -@HAVE_PIPLIB_TRUE@ isl_sample_piplib.c \ -@HAVE_PIPLIB_TRUE@ isl_sample_piplib.h \ -@HAVE_PIPLIB_TRUE@ isl_piplib.c - -@NEED_GET_MEMORY_FUNCTIONS_TRUE@GET_MEMORY_FUNCTIONS = mp_get_memory_functions.c -INCLUDES = -I. -I$(srcdir) -I$(srcdir)/include -Iinclude/ -AM_CFLAGS = @WARNING_FLAGS@ -libisl_la_SOURCES = \ - $(ISL_PIPLIB) \ - $(GET_MEMORY_FUNCTIONS) \ - isl_aff.c \ - isl_aff_private.h \ - isl_affine_hull.c \ - isl_arg.c \ - isl_band.c \ - isl_band_private.h \ - isl_basis_reduction.h \ - basis_reduction_tab.c \ - isl_bernstein.c \ - isl_bernstein.h \ - isl_blk.c \ - isl_bound.c \ - isl_bound.h \ - isl_coalesce.c \ - isl_constraint.c \ - isl_constraint_private.h \ - isl_convex_hull.c \ - isl_ctx.c \ - isl_ctx_private.h \ - isl_dim.c \ - isl_dim_map.h \ - isl_dim_map.c \ - isl_equalities.c \ - isl_equalities.h \ - isl_factorization.c \ - isl_factorization.h \ - isl_farkas.c \ - isl_flow.c \ - isl_fold.c \ - isl_gmp.c \ - isl_hash.c \ - isl_hmap_map_basic_set.c \ - isl_hmap_map_basic_set.h \ - isl_ilp.c \ - isl_input.c \ - isl_list.c \ - isl_list_private.h \ - isl_local_space_private.h \ - isl_local_space.c \ - isl_lp.c \ - isl_lp_piplib.h \ - isl_map.c \ - isl_map_simplify.c \ - isl_map_subtract.c \ - isl_map_private.h \ - isl_map_piplib.h \ - isl_mat.c \ - isl_mat_private.h \ - isl_morph.c \ - isl_morph.h \ - isl_id.c \ - isl_id_private.h \ - isl_obj.c \ - isl_options.c \ - isl_options_private.h \ - isl_output.c \ - isl_qsort.c \ - isl_qsort.h \ - isl_piplib.h \ - isl_point_private.h \ - isl_point.c \ - isl_polynomial_private.h \ - isl_polynomial.c \ - isl_printer_private.h \ - isl_printer.c \ - print.c \ - isl_range.c \ - isl_range.h \ - isl_reordering.c \ - isl_reordering.h \ - isl_sample.h \ - isl_sample.c \ - isl_scan.c \ - isl_scan.h \ - isl_schedule.c \ - isl_schedule_private.h \ - isl_space.c \ - isl_space_private.h \ - isl_stream.c \ - isl_stream_private.h \ - isl_seq.c \ - isl_tab.c \ - isl_tab.h \ - isl_tab_pip.c \ - isl_transitive_closure.c \ - isl_union_map.c \ - isl_union_map_private.h \ - isl_vec.c \ - isl_version.c \ - isl_vertices_private.h \ - isl_vertices.c - -EXTRA_libisl_la_SOURCES = \ - isl_lp_piplib.c \ - isl_lp_no_piplib.c \ - isl_map_piplib.c \ - isl_map_no_piplib.c \ - isl_sample_no_piplib.c \ - isl_sample_piplib.c \ - isl_sample_piplib.h \ - isl_piplib.c - -libisl_la_LIBADD = @PIPLIB_LIBS@ @GMP_LIBS@ -libisl_la_LDFLAGS = -version-info @versioninfo@ \ - @PIPLIB_LDFLAGS@ @GMP_LDFLAGS@ - -libisl_la_CPPFLAGS = $(INCLUDES) @PIPLIB_CPPFLAGS@ @GMP_CPPFLAGS@ -isl_test_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_test_LDFLAGS = @GMP_LDFLAGS@ -isl_test_LDADD = libisl.la @GMP_LIBS@ -isl_polyhedron_sample_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polyhedron_sample_LDADD = libisl.la -isl_polyhedron_sample_SOURCES = \ - polyhedron_sample.c - -isl_pip_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_pip_LDFLAGS = @GMP_LDFLAGS@ -isl_pip_LDADD = libisl.la @GMP_LIBS@ -isl_pip_SOURCES = \ - pip.c - -isl_bound_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_bound_LDFLAGS = @GMP_LDFLAGS@ -isl_bound_LDADD = libisl.la @GMP_LIBS@ -isl_bound_SOURCES = \ - bound.c - -isl_polyhedron_minimize_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polyhedron_minimize_LDFLAGS = @GMP_LDFLAGS@ -isl_polyhedron_minimize_LDADD = libisl.la @GMP_LIBS@ -isl_polyhedron_minimize_SOURCES = \ - polyhedron_minimize.c - -isl_polytope_scan_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polytope_scan_LDADD = libisl.la -isl_polytope_scan_SOURCES = \ - polytope_scan.c - -isl_polyhedron_detect_equalities_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_polyhedron_detect_equalities_LDADD = libisl.la -isl_polyhedron_detect_equalities_SOURCES = \ - polyhedron_detect_equalities.c - -isl_cat_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_cat_LDADD = libisl.la -isl_cat_SOURCES = \ - cat.c - -isl_closure_CPPFLAGS = $(INCLUDES) @GMP_CPPFLAGS@ -isl_closure_LDADD = libisl.la -isl_closure_SOURCES = \ - closure.c - -nodist_pkginclude_HEADERS = \ - include/isl/config.h \ - include/isl/stdint.h - -pkginclude_HEADERS = \ - include/isl/aff.h \ - include/isl/aff_type.h \ - include/isl/arg.h \ - include/isl/band.h \ - include/isl/blk.h \ - include/isl/constraint.h \ - include/isl/ctx.h \ - include/isl/dim.h \ - include/isl/flow.h \ - include/isl/id.h \ - include/isl/ilp.h \ - include/isl/int.h \ - include/isl/hash.h \ - include/isl/list.h \ - include/isl/local_space.h \ - include/isl/lp.h \ - include/isl/mat.h \ - include/isl/map.h \ - include/isl/map_type.h \ - include/isl/multi.h \ - include/isl/obj.h \ - include/isl/options.h \ - include/isl/point.h \ - include/isl/polynomial.h \ - include/isl/polynomial_type.h \ - include/isl/printer.h \ - include/isl/schedule.h \ - include/isl/seq.h \ - include/isl/set.h \ - include/isl/set_type.h \ - include/isl/space.h \ - include/isl/stream.h \ - include/isl/union_map.h \ - include/isl/union_set.h \ - include/isl/vec.h \ - include/isl/version.h \ - include/isl/vertices.h - -EXTRA_DIST = \ - isl_config_post.h \ - basis_reduction_templ.c \ - isl_list_templ.c \ - isl_list_templ.h \ - isl_multi_templ.c \ - isl_multi_templ.h \ - print_templ.c \ - isl_pw_templ.c \ - isl_union_templ.c \ - isl.py \ - doc/chicago.bst \ - doc/chicago.sty \ - doc/implementation.tex \ - doc/isl.bib \ - doc/mypod2latex \ - doc/manual.tex \ - doc/user.pod \ - test_inputs - -pkgconfigdir = $(pkgconfig_libdir) -pkgconfig_DATA = $(pkgconfig_libfile) -all: isl_config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -am--refresh: - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -isl_config.h: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ - else :; fi - -stamp-h1: $(srcdir)/isl_config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status isl_config.h -$(srcdir)/isl_config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -include/isl/config.h: include/isl/stamp-h2 - @if test ! -f $@; then \ - rm -f include/isl/stamp-h2; \ - $(MAKE) $(AM_MAKEFLAGS) include/isl/stamp-h2; \ - else :; fi - -include/isl/stamp-h2: $(top_srcdir)/include/isl/config.h.in $(top_builddir)/config.status - @rm -f include/isl/stamp-h2 - cd $(top_builddir) && $(SHELL) ./config.status include/isl/config.h - -distclean-hdr: - -rm -f isl_config.h stamp-h1 include/isl/config.h include/isl/stamp-h2 -bound_test.sh: $(top_builddir)/config.status $(srcdir)/bound_test.sh.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -pip_test.sh: $(top_builddir)/config.status $(srcdir)/pip_test.sh.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libisl.la: $(libisl_la_OBJECTS) $(libisl_la_DEPENDENCIES) - $(AM_V_CCLD)$(libisl_la_LINK) -rpath $(libdir) $(libisl_la_OBJECTS) $(libisl_la_LIBADD) $(LIBS) - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list -isl_bound$(EXEEXT): $(isl_bound_OBJECTS) $(isl_bound_DEPENDENCIES) - @rm -f isl_bound$(EXEEXT) - $(AM_V_CCLD)$(isl_bound_LINK) $(isl_bound_OBJECTS) $(isl_bound_LDADD) $(LIBS) -isl_cat$(EXEEXT): $(isl_cat_OBJECTS) $(isl_cat_DEPENDENCIES) - @rm -f isl_cat$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(isl_cat_OBJECTS) $(isl_cat_LDADD) $(LIBS) -isl_closure$(EXEEXT): $(isl_closure_OBJECTS) $(isl_closure_DEPENDENCIES) - @rm -f isl_closure$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(isl_closure_OBJECTS) $(isl_closure_LDADD) $(LIBS) -isl_pip$(EXEEXT): $(isl_pip_OBJECTS) $(isl_pip_DEPENDENCIES) - @rm -f isl_pip$(EXEEXT) - $(AM_V_CCLD)$(isl_pip_LINK) $(isl_pip_OBJECTS) $(isl_pip_LDADD) $(LIBS) -isl_polyhedron_detect_equalities$(EXEEXT): $(isl_polyhedron_detect_equalities_OBJECTS) $(isl_polyhedron_detect_equalities_DEPENDENCIES) - @rm -f isl_polyhedron_detect_equalities$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(isl_polyhedron_detect_equalities_OBJECTS) $(isl_polyhedron_detect_equalities_LDADD) $(LIBS) -isl_polyhedron_minimize$(EXEEXT): $(isl_polyhedron_minimize_OBJECTS) $(isl_polyhedron_minimize_DEPENDENCIES) - @rm -f isl_polyhedron_minimize$(EXEEXT) - $(AM_V_CCLD)$(isl_polyhedron_minimize_LINK) $(isl_polyhedron_minimize_OBJECTS) $(isl_polyhedron_minimize_LDADD) $(LIBS) -isl_polyhedron_sample$(EXEEXT): $(isl_polyhedron_sample_OBJECTS) $(isl_polyhedron_sample_DEPENDENCIES) - @rm -f isl_polyhedron_sample$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(isl_polyhedron_sample_OBJECTS) $(isl_polyhedron_sample_LDADD) $(LIBS) -isl_polytope_scan$(EXEEXT): $(isl_polytope_scan_OBJECTS) $(isl_polytope_scan_DEPENDENCIES) - @rm -f isl_polytope_scan$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(isl_polytope_scan_OBJECTS) $(isl_polytope_scan_LDADD) $(LIBS) -isl_test$(EXEEXT): $(isl_test_OBJECTS) $(isl_test_DEPENDENCIES) - @rm -f isl_test$(EXEEXT) - $(AM_V_CCLD)$(isl_test_LINK) $(isl_test_OBJECTS) $(isl_test_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_bound-bound.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_cat-cat.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_closure-closure.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_pip-pip.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_polyhedron_detect_equalities-polyhedron_detect_equalities.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_polyhedron_minimize-polyhedron_minimize.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_polyhedron_sample-polyhedron_sample.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_polytope_scan-polytope_scan.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isl_test-isl_test.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-basis_reduction_tab.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_aff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_affine_hull.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_arg.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_band.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_bernstein.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_blk.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_bound.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_coalesce.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_constraint.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_convex_hull.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_ctx.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_dim.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_dim_map.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_equalities.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_factorization.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_farkas.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_flow.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_fold.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_gmp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_hash.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_hmap_map_basic_set.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_id.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_ilp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_input.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_list.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_local_space.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_lp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_lp_no_piplib.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_lp_piplib.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_map.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_map_no_piplib.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_map_piplib.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_map_simplify.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_map_subtract.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_mat.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_morph.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_obj.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_options.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_output.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_piplib.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_point.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_polynomial.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_printer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_qsort.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_range.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_reordering.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_sample.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_sample_no_piplib.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_sample_piplib.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_scan.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_schedule.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_seq.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_space.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_stream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_tab.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_tab_pip.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_transitive_closure.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_union_map.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_vec.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_version.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-isl_vertices.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-mp_get_memory_functions.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisl_la-print.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -libisl_la-isl_lp_no_piplib.lo: isl_lp_no_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_lp_no_piplib.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_lp_no_piplib.Tpo -c -o libisl_la-isl_lp_no_piplib.lo `test -f 'isl_lp_no_piplib.c' || echo '$(srcdir)/'`isl_lp_no_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_lp_no_piplib.Tpo $(DEPDIR)/libisl_la-isl_lp_no_piplib.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_lp_no_piplib.c' object='libisl_la-isl_lp_no_piplib.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_lp_no_piplib.lo `test -f 'isl_lp_no_piplib.c' || echo '$(srcdir)/'`isl_lp_no_piplib.c - -libisl_la-isl_map_no_piplib.lo: isl_map_no_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_map_no_piplib.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_map_no_piplib.Tpo -c -o libisl_la-isl_map_no_piplib.lo `test -f 'isl_map_no_piplib.c' || echo '$(srcdir)/'`isl_map_no_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_map_no_piplib.Tpo $(DEPDIR)/libisl_la-isl_map_no_piplib.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_map_no_piplib.c' object='libisl_la-isl_map_no_piplib.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_map_no_piplib.lo `test -f 'isl_map_no_piplib.c' || echo '$(srcdir)/'`isl_map_no_piplib.c - -libisl_la-isl_sample_no_piplib.lo: isl_sample_no_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_sample_no_piplib.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_sample_no_piplib.Tpo -c -o libisl_la-isl_sample_no_piplib.lo `test -f 'isl_sample_no_piplib.c' || echo '$(srcdir)/'`isl_sample_no_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_sample_no_piplib.Tpo $(DEPDIR)/libisl_la-isl_sample_no_piplib.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_sample_no_piplib.c' object='libisl_la-isl_sample_no_piplib.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_sample_no_piplib.lo `test -f 'isl_sample_no_piplib.c' || echo '$(srcdir)/'`isl_sample_no_piplib.c - -libisl_la-isl_lp_piplib.lo: isl_lp_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_lp_piplib.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_lp_piplib.Tpo -c -o libisl_la-isl_lp_piplib.lo `test -f 'isl_lp_piplib.c' || echo '$(srcdir)/'`isl_lp_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_lp_piplib.Tpo $(DEPDIR)/libisl_la-isl_lp_piplib.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_lp_piplib.c' object='libisl_la-isl_lp_piplib.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_lp_piplib.lo `test -f 'isl_lp_piplib.c' || echo '$(srcdir)/'`isl_lp_piplib.c - -libisl_la-isl_map_piplib.lo: isl_map_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_map_piplib.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_map_piplib.Tpo -c -o libisl_la-isl_map_piplib.lo `test -f 'isl_map_piplib.c' || echo '$(srcdir)/'`isl_map_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_map_piplib.Tpo $(DEPDIR)/libisl_la-isl_map_piplib.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_map_piplib.c' object='libisl_la-isl_map_piplib.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_map_piplib.lo `test -f 'isl_map_piplib.c' || echo '$(srcdir)/'`isl_map_piplib.c - -libisl_la-isl_sample_piplib.lo: isl_sample_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_sample_piplib.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_sample_piplib.Tpo -c -o libisl_la-isl_sample_piplib.lo `test -f 'isl_sample_piplib.c' || echo '$(srcdir)/'`isl_sample_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_sample_piplib.Tpo $(DEPDIR)/libisl_la-isl_sample_piplib.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_sample_piplib.c' object='libisl_la-isl_sample_piplib.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_sample_piplib.lo `test -f 'isl_sample_piplib.c' || echo '$(srcdir)/'`isl_sample_piplib.c - -libisl_la-isl_piplib.lo: isl_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_piplib.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_piplib.Tpo -c -o libisl_la-isl_piplib.lo `test -f 'isl_piplib.c' || echo '$(srcdir)/'`isl_piplib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_piplib.Tpo $(DEPDIR)/libisl_la-isl_piplib.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_piplib.c' object='libisl_la-isl_piplib.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_piplib.lo `test -f 'isl_piplib.c' || echo '$(srcdir)/'`isl_piplib.c - -libisl_la-mp_get_memory_functions.lo: mp_get_memory_functions.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-mp_get_memory_functions.lo -MD -MP -MF $(DEPDIR)/libisl_la-mp_get_memory_functions.Tpo -c -o libisl_la-mp_get_memory_functions.lo `test -f 'mp_get_memory_functions.c' || echo '$(srcdir)/'`mp_get_memory_functions.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-mp_get_memory_functions.Tpo $(DEPDIR)/libisl_la-mp_get_memory_functions.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mp_get_memory_functions.c' object='libisl_la-mp_get_memory_functions.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-mp_get_memory_functions.lo `test -f 'mp_get_memory_functions.c' || echo '$(srcdir)/'`mp_get_memory_functions.c - -libisl_la-isl_aff.lo: isl_aff.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_aff.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_aff.Tpo -c -o libisl_la-isl_aff.lo `test -f 'isl_aff.c' || echo '$(srcdir)/'`isl_aff.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_aff.Tpo $(DEPDIR)/libisl_la-isl_aff.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_aff.c' object='libisl_la-isl_aff.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_aff.lo `test -f 'isl_aff.c' || echo '$(srcdir)/'`isl_aff.c - -libisl_la-isl_affine_hull.lo: isl_affine_hull.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_affine_hull.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_affine_hull.Tpo -c -o libisl_la-isl_affine_hull.lo `test -f 'isl_affine_hull.c' || echo '$(srcdir)/'`isl_affine_hull.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_affine_hull.Tpo $(DEPDIR)/libisl_la-isl_affine_hull.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_affine_hull.c' object='libisl_la-isl_affine_hull.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_affine_hull.lo `test -f 'isl_affine_hull.c' || echo '$(srcdir)/'`isl_affine_hull.c - -libisl_la-isl_arg.lo: isl_arg.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_arg.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_arg.Tpo -c -o libisl_la-isl_arg.lo `test -f 'isl_arg.c' || echo '$(srcdir)/'`isl_arg.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_arg.Tpo $(DEPDIR)/libisl_la-isl_arg.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_arg.c' object='libisl_la-isl_arg.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_arg.lo `test -f 'isl_arg.c' || echo '$(srcdir)/'`isl_arg.c - -libisl_la-isl_band.lo: isl_band.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_band.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_band.Tpo -c -o libisl_la-isl_band.lo `test -f 'isl_band.c' || echo '$(srcdir)/'`isl_band.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_band.Tpo $(DEPDIR)/libisl_la-isl_band.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_band.c' object='libisl_la-isl_band.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_band.lo `test -f 'isl_band.c' || echo '$(srcdir)/'`isl_band.c - -libisl_la-basis_reduction_tab.lo: basis_reduction_tab.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-basis_reduction_tab.lo -MD -MP -MF $(DEPDIR)/libisl_la-basis_reduction_tab.Tpo -c -o libisl_la-basis_reduction_tab.lo `test -f 'basis_reduction_tab.c' || echo '$(srcdir)/'`basis_reduction_tab.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-basis_reduction_tab.Tpo $(DEPDIR)/libisl_la-basis_reduction_tab.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='basis_reduction_tab.c' object='libisl_la-basis_reduction_tab.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-basis_reduction_tab.lo `test -f 'basis_reduction_tab.c' || echo '$(srcdir)/'`basis_reduction_tab.c - -libisl_la-isl_bernstein.lo: isl_bernstein.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_bernstein.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_bernstein.Tpo -c -o libisl_la-isl_bernstein.lo `test -f 'isl_bernstein.c' || echo '$(srcdir)/'`isl_bernstein.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_bernstein.Tpo $(DEPDIR)/libisl_la-isl_bernstein.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_bernstein.c' object='libisl_la-isl_bernstein.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_bernstein.lo `test -f 'isl_bernstein.c' || echo '$(srcdir)/'`isl_bernstein.c - -libisl_la-isl_blk.lo: isl_blk.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_blk.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_blk.Tpo -c -o libisl_la-isl_blk.lo `test -f 'isl_blk.c' || echo '$(srcdir)/'`isl_blk.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_blk.Tpo $(DEPDIR)/libisl_la-isl_blk.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_blk.c' object='libisl_la-isl_blk.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_blk.lo `test -f 'isl_blk.c' || echo '$(srcdir)/'`isl_blk.c - -libisl_la-isl_bound.lo: isl_bound.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_bound.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_bound.Tpo -c -o libisl_la-isl_bound.lo `test -f 'isl_bound.c' || echo '$(srcdir)/'`isl_bound.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_bound.Tpo $(DEPDIR)/libisl_la-isl_bound.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_bound.c' object='libisl_la-isl_bound.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_bound.lo `test -f 'isl_bound.c' || echo '$(srcdir)/'`isl_bound.c - -libisl_la-isl_coalesce.lo: isl_coalesce.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_coalesce.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_coalesce.Tpo -c -o libisl_la-isl_coalesce.lo `test -f 'isl_coalesce.c' || echo '$(srcdir)/'`isl_coalesce.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_coalesce.Tpo $(DEPDIR)/libisl_la-isl_coalesce.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_coalesce.c' object='libisl_la-isl_coalesce.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_coalesce.lo `test -f 'isl_coalesce.c' || echo '$(srcdir)/'`isl_coalesce.c - -libisl_la-isl_constraint.lo: isl_constraint.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_constraint.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_constraint.Tpo -c -o libisl_la-isl_constraint.lo `test -f 'isl_constraint.c' || echo '$(srcdir)/'`isl_constraint.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_constraint.Tpo $(DEPDIR)/libisl_la-isl_constraint.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_constraint.c' object='libisl_la-isl_constraint.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_constraint.lo `test -f 'isl_constraint.c' || echo '$(srcdir)/'`isl_constraint.c - -libisl_la-isl_convex_hull.lo: isl_convex_hull.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_convex_hull.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_convex_hull.Tpo -c -o libisl_la-isl_convex_hull.lo `test -f 'isl_convex_hull.c' || echo '$(srcdir)/'`isl_convex_hull.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_convex_hull.Tpo $(DEPDIR)/libisl_la-isl_convex_hull.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_convex_hull.c' object='libisl_la-isl_convex_hull.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_convex_hull.lo `test -f 'isl_convex_hull.c' || echo '$(srcdir)/'`isl_convex_hull.c - -libisl_la-isl_ctx.lo: isl_ctx.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_ctx.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_ctx.Tpo -c -o libisl_la-isl_ctx.lo `test -f 'isl_ctx.c' || echo '$(srcdir)/'`isl_ctx.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_ctx.Tpo $(DEPDIR)/libisl_la-isl_ctx.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_ctx.c' object='libisl_la-isl_ctx.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_ctx.lo `test -f 'isl_ctx.c' || echo '$(srcdir)/'`isl_ctx.c - -libisl_la-isl_dim.lo: isl_dim.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_dim.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_dim.Tpo -c -o libisl_la-isl_dim.lo `test -f 'isl_dim.c' || echo '$(srcdir)/'`isl_dim.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_dim.Tpo $(DEPDIR)/libisl_la-isl_dim.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_dim.c' object='libisl_la-isl_dim.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_dim.lo `test -f 'isl_dim.c' || echo '$(srcdir)/'`isl_dim.c - -libisl_la-isl_dim_map.lo: isl_dim_map.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_dim_map.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_dim_map.Tpo -c -o libisl_la-isl_dim_map.lo `test -f 'isl_dim_map.c' || echo '$(srcdir)/'`isl_dim_map.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_dim_map.Tpo $(DEPDIR)/libisl_la-isl_dim_map.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_dim_map.c' object='libisl_la-isl_dim_map.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_dim_map.lo `test -f 'isl_dim_map.c' || echo '$(srcdir)/'`isl_dim_map.c - -libisl_la-isl_equalities.lo: isl_equalities.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_equalities.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_equalities.Tpo -c -o libisl_la-isl_equalities.lo `test -f 'isl_equalities.c' || echo '$(srcdir)/'`isl_equalities.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_equalities.Tpo $(DEPDIR)/libisl_la-isl_equalities.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_equalities.c' object='libisl_la-isl_equalities.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_equalities.lo `test -f 'isl_equalities.c' || echo '$(srcdir)/'`isl_equalities.c - -libisl_la-isl_factorization.lo: isl_factorization.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_factorization.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_factorization.Tpo -c -o libisl_la-isl_factorization.lo `test -f 'isl_factorization.c' || echo '$(srcdir)/'`isl_factorization.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_factorization.Tpo $(DEPDIR)/libisl_la-isl_factorization.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_factorization.c' object='libisl_la-isl_factorization.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_factorization.lo `test -f 'isl_factorization.c' || echo '$(srcdir)/'`isl_factorization.c - -libisl_la-isl_farkas.lo: isl_farkas.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_farkas.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_farkas.Tpo -c -o libisl_la-isl_farkas.lo `test -f 'isl_farkas.c' || echo '$(srcdir)/'`isl_farkas.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_farkas.Tpo $(DEPDIR)/libisl_la-isl_farkas.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_farkas.c' object='libisl_la-isl_farkas.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_farkas.lo `test -f 'isl_farkas.c' || echo '$(srcdir)/'`isl_farkas.c - -libisl_la-isl_flow.lo: isl_flow.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_flow.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_flow.Tpo -c -o libisl_la-isl_flow.lo `test -f 'isl_flow.c' || echo '$(srcdir)/'`isl_flow.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_flow.Tpo $(DEPDIR)/libisl_la-isl_flow.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_flow.c' object='libisl_la-isl_flow.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_flow.lo `test -f 'isl_flow.c' || echo '$(srcdir)/'`isl_flow.c - -libisl_la-isl_fold.lo: isl_fold.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_fold.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_fold.Tpo -c -o libisl_la-isl_fold.lo `test -f 'isl_fold.c' || echo '$(srcdir)/'`isl_fold.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_fold.Tpo $(DEPDIR)/libisl_la-isl_fold.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_fold.c' object='libisl_la-isl_fold.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_fold.lo `test -f 'isl_fold.c' || echo '$(srcdir)/'`isl_fold.c - -libisl_la-isl_gmp.lo: isl_gmp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_gmp.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_gmp.Tpo -c -o libisl_la-isl_gmp.lo `test -f 'isl_gmp.c' || echo '$(srcdir)/'`isl_gmp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_gmp.Tpo $(DEPDIR)/libisl_la-isl_gmp.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_gmp.c' object='libisl_la-isl_gmp.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_gmp.lo `test -f 'isl_gmp.c' || echo '$(srcdir)/'`isl_gmp.c - -libisl_la-isl_hash.lo: isl_hash.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_hash.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_hash.Tpo -c -o libisl_la-isl_hash.lo `test -f 'isl_hash.c' || echo '$(srcdir)/'`isl_hash.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_hash.Tpo $(DEPDIR)/libisl_la-isl_hash.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_hash.c' object='libisl_la-isl_hash.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_hash.lo `test -f 'isl_hash.c' || echo '$(srcdir)/'`isl_hash.c - -libisl_la-isl_hmap_map_basic_set.lo: isl_hmap_map_basic_set.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_hmap_map_basic_set.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_hmap_map_basic_set.Tpo -c -o libisl_la-isl_hmap_map_basic_set.lo `test -f 'isl_hmap_map_basic_set.c' || echo '$(srcdir)/'`isl_hmap_map_basic_set.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_hmap_map_basic_set.Tpo $(DEPDIR)/libisl_la-isl_hmap_map_basic_set.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_hmap_map_basic_set.c' object='libisl_la-isl_hmap_map_basic_set.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_hmap_map_basic_set.lo `test -f 'isl_hmap_map_basic_set.c' || echo '$(srcdir)/'`isl_hmap_map_basic_set.c - -libisl_la-isl_ilp.lo: isl_ilp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_ilp.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_ilp.Tpo -c -o libisl_la-isl_ilp.lo `test -f 'isl_ilp.c' || echo '$(srcdir)/'`isl_ilp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_ilp.Tpo $(DEPDIR)/libisl_la-isl_ilp.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_ilp.c' object='libisl_la-isl_ilp.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_ilp.lo `test -f 'isl_ilp.c' || echo '$(srcdir)/'`isl_ilp.c - -libisl_la-isl_input.lo: isl_input.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_input.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_input.Tpo -c -o libisl_la-isl_input.lo `test -f 'isl_input.c' || echo '$(srcdir)/'`isl_input.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_input.Tpo $(DEPDIR)/libisl_la-isl_input.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_input.c' object='libisl_la-isl_input.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_input.lo `test -f 'isl_input.c' || echo '$(srcdir)/'`isl_input.c - -libisl_la-isl_list.lo: isl_list.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_list.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_list.Tpo -c -o libisl_la-isl_list.lo `test -f 'isl_list.c' || echo '$(srcdir)/'`isl_list.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_list.Tpo $(DEPDIR)/libisl_la-isl_list.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_list.c' object='libisl_la-isl_list.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_list.lo `test -f 'isl_list.c' || echo '$(srcdir)/'`isl_list.c - -libisl_la-isl_local_space.lo: isl_local_space.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_local_space.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_local_space.Tpo -c -o libisl_la-isl_local_space.lo `test -f 'isl_local_space.c' || echo '$(srcdir)/'`isl_local_space.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_local_space.Tpo $(DEPDIR)/libisl_la-isl_local_space.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_local_space.c' object='libisl_la-isl_local_space.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_local_space.lo `test -f 'isl_local_space.c' || echo '$(srcdir)/'`isl_local_space.c - -libisl_la-isl_lp.lo: isl_lp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_lp.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_lp.Tpo -c -o libisl_la-isl_lp.lo `test -f 'isl_lp.c' || echo '$(srcdir)/'`isl_lp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_lp.Tpo $(DEPDIR)/libisl_la-isl_lp.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_lp.c' object='libisl_la-isl_lp.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_lp.lo `test -f 'isl_lp.c' || echo '$(srcdir)/'`isl_lp.c - -libisl_la-isl_map.lo: isl_map.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_map.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_map.Tpo -c -o libisl_la-isl_map.lo `test -f 'isl_map.c' || echo '$(srcdir)/'`isl_map.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_map.Tpo $(DEPDIR)/libisl_la-isl_map.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_map.c' object='libisl_la-isl_map.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_map.lo `test -f 'isl_map.c' || echo '$(srcdir)/'`isl_map.c - -libisl_la-isl_map_simplify.lo: isl_map_simplify.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_map_simplify.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_map_simplify.Tpo -c -o libisl_la-isl_map_simplify.lo `test -f 'isl_map_simplify.c' || echo '$(srcdir)/'`isl_map_simplify.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_map_simplify.Tpo $(DEPDIR)/libisl_la-isl_map_simplify.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_map_simplify.c' object='libisl_la-isl_map_simplify.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_map_simplify.lo `test -f 'isl_map_simplify.c' || echo '$(srcdir)/'`isl_map_simplify.c - -libisl_la-isl_map_subtract.lo: isl_map_subtract.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_map_subtract.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_map_subtract.Tpo -c -o libisl_la-isl_map_subtract.lo `test -f 'isl_map_subtract.c' || echo '$(srcdir)/'`isl_map_subtract.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_map_subtract.Tpo $(DEPDIR)/libisl_la-isl_map_subtract.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_map_subtract.c' object='libisl_la-isl_map_subtract.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_map_subtract.lo `test -f 'isl_map_subtract.c' || echo '$(srcdir)/'`isl_map_subtract.c - -libisl_la-isl_mat.lo: isl_mat.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_mat.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_mat.Tpo -c -o libisl_la-isl_mat.lo `test -f 'isl_mat.c' || echo '$(srcdir)/'`isl_mat.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_mat.Tpo $(DEPDIR)/libisl_la-isl_mat.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_mat.c' object='libisl_la-isl_mat.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_mat.lo `test -f 'isl_mat.c' || echo '$(srcdir)/'`isl_mat.c - -libisl_la-isl_morph.lo: isl_morph.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_morph.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_morph.Tpo -c -o libisl_la-isl_morph.lo `test -f 'isl_morph.c' || echo '$(srcdir)/'`isl_morph.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_morph.Tpo $(DEPDIR)/libisl_la-isl_morph.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_morph.c' object='libisl_la-isl_morph.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_morph.lo `test -f 'isl_morph.c' || echo '$(srcdir)/'`isl_morph.c - -libisl_la-isl_id.lo: isl_id.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_id.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_id.Tpo -c -o libisl_la-isl_id.lo `test -f 'isl_id.c' || echo '$(srcdir)/'`isl_id.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_id.Tpo $(DEPDIR)/libisl_la-isl_id.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_id.c' object='libisl_la-isl_id.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_id.lo `test -f 'isl_id.c' || echo '$(srcdir)/'`isl_id.c - -libisl_la-isl_obj.lo: isl_obj.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_obj.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_obj.Tpo -c -o libisl_la-isl_obj.lo `test -f 'isl_obj.c' || echo '$(srcdir)/'`isl_obj.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_obj.Tpo $(DEPDIR)/libisl_la-isl_obj.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_obj.c' object='libisl_la-isl_obj.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_obj.lo `test -f 'isl_obj.c' || echo '$(srcdir)/'`isl_obj.c - -libisl_la-isl_options.lo: isl_options.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_options.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_options.Tpo -c -o libisl_la-isl_options.lo `test -f 'isl_options.c' || echo '$(srcdir)/'`isl_options.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_options.Tpo $(DEPDIR)/libisl_la-isl_options.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_options.c' object='libisl_la-isl_options.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_options.lo `test -f 'isl_options.c' || echo '$(srcdir)/'`isl_options.c - -libisl_la-isl_output.lo: isl_output.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_output.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_output.Tpo -c -o libisl_la-isl_output.lo `test -f 'isl_output.c' || echo '$(srcdir)/'`isl_output.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_output.Tpo $(DEPDIR)/libisl_la-isl_output.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_output.c' object='libisl_la-isl_output.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_output.lo `test -f 'isl_output.c' || echo '$(srcdir)/'`isl_output.c - -libisl_la-isl_qsort.lo: isl_qsort.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_qsort.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_qsort.Tpo -c -o libisl_la-isl_qsort.lo `test -f 'isl_qsort.c' || echo '$(srcdir)/'`isl_qsort.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_qsort.Tpo $(DEPDIR)/libisl_la-isl_qsort.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_qsort.c' object='libisl_la-isl_qsort.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_qsort.lo `test -f 'isl_qsort.c' || echo '$(srcdir)/'`isl_qsort.c - -libisl_la-isl_point.lo: isl_point.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_point.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_point.Tpo -c -o libisl_la-isl_point.lo `test -f 'isl_point.c' || echo '$(srcdir)/'`isl_point.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_point.Tpo $(DEPDIR)/libisl_la-isl_point.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_point.c' object='libisl_la-isl_point.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_point.lo `test -f 'isl_point.c' || echo '$(srcdir)/'`isl_point.c - -libisl_la-isl_polynomial.lo: isl_polynomial.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_polynomial.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_polynomial.Tpo -c -o libisl_la-isl_polynomial.lo `test -f 'isl_polynomial.c' || echo '$(srcdir)/'`isl_polynomial.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_polynomial.Tpo $(DEPDIR)/libisl_la-isl_polynomial.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_polynomial.c' object='libisl_la-isl_polynomial.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_polynomial.lo `test -f 'isl_polynomial.c' || echo '$(srcdir)/'`isl_polynomial.c - -libisl_la-isl_printer.lo: isl_printer.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_printer.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_printer.Tpo -c -o libisl_la-isl_printer.lo `test -f 'isl_printer.c' || echo '$(srcdir)/'`isl_printer.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_printer.Tpo $(DEPDIR)/libisl_la-isl_printer.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_printer.c' object='libisl_la-isl_printer.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_printer.lo `test -f 'isl_printer.c' || echo '$(srcdir)/'`isl_printer.c - -libisl_la-print.lo: print.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-print.lo -MD -MP -MF $(DEPDIR)/libisl_la-print.Tpo -c -o libisl_la-print.lo `test -f 'print.c' || echo '$(srcdir)/'`print.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-print.Tpo $(DEPDIR)/libisl_la-print.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='print.c' object='libisl_la-print.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-print.lo `test -f 'print.c' || echo '$(srcdir)/'`print.c - -libisl_la-isl_range.lo: isl_range.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_range.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_range.Tpo -c -o libisl_la-isl_range.lo `test -f 'isl_range.c' || echo '$(srcdir)/'`isl_range.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_range.Tpo $(DEPDIR)/libisl_la-isl_range.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_range.c' object='libisl_la-isl_range.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_range.lo `test -f 'isl_range.c' || echo '$(srcdir)/'`isl_range.c - -libisl_la-isl_reordering.lo: isl_reordering.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_reordering.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_reordering.Tpo -c -o libisl_la-isl_reordering.lo `test -f 'isl_reordering.c' || echo '$(srcdir)/'`isl_reordering.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_reordering.Tpo $(DEPDIR)/libisl_la-isl_reordering.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_reordering.c' object='libisl_la-isl_reordering.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_reordering.lo `test -f 'isl_reordering.c' || echo '$(srcdir)/'`isl_reordering.c - -libisl_la-isl_sample.lo: isl_sample.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_sample.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_sample.Tpo -c -o libisl_la-isl_sample.lo `test -f 'isl_sample.c' || echo '$(srcdir)/'`isl_sample.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_sample.Tpo $(DEPDIR)/libisl_la-isl_sample.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_sample.c' object='libisl_la-isl_sample.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_sample.lo `test -f 'isl_sample.c' || echo '$(srcdir)/'`isl_sample.c - -libisl_la-isl_scan.lo: isl_scan.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_scan.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_scan.Tpo -c -o libisl_la-isl_scan.lo `test -f 'isl_scan.c' || echo '$(srcdir)/'`isl_scan.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_scan.Tpo $(DEPDIR)/libisl_la-isl_scan.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_scan.c' object='libisl_la-isl_scan.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_scan.lo `test -f 'isl_scan.c' || echo '$(srcdir)/'`isl_scan.c - -libisl_la-isl_schedule.lo: isl_schedule.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_schedule.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_schedule.Tpo -c -o libisl_la-isl_schedule.lo `test -f 'isl_schedule.c' || echo '$(srcdir)/'`isl_schedule.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_schedule.Tpo $(DEPDIR)/libisl_la-isl_schedule.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_schedule.c' object='libisl_la-isl_schedule.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_schedule.lo `test -f 'isl_schedule.c' || echo '$(srcdir)/'`isl_schedule.c - -libisl_la-isl_space.lo: isl_space.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_space.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_space.Tpo -c -o libisl_la-isl_space.lo `test -f 'isl_space.c' || echo '$(srcdir)/'`isl_space.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_space.Tpo $(DEPDIR)/libisl_la-isl_space.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_space.c' object='libisl_la-isl_space.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_space.lo `test -f 'isl_space.c' || echo '$(srcdir)/'`isl_space.c - -libisl_la-isl_stream.lo: isl_stream.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_stream.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_stream.Tpo -c -o libisl_la-isl_stream.lo `test -f 'isl_stream.c' || echo '$(srcdir)/'`isl_stream.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_stream.Tpo $(DEPDIR)/libisl_la-isl_stream.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_stream.c' object='libisl_la-isl_stream.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_stream.lo `test -f 'isl_stream.c' || echo '$(srcdir)/'`isl_stream.c - -libisl_la-isl_seq.lo: isl_seq.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_seq.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_seq.Tpo -c -o libisl_la-isl_seq.lo `test -f 'isl_seq.c' || echo '$(srcdir)/'`isl_seq.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_seq.Tpo $(DEPDIR)/libisl_la-isl_seq.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_seq.c' object='libisl_la-isl_seq.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_seq.lo `test -f 'isl_seq.c' || echo '$(srcdir)/'`isl_seq.c - -libisl_la-isl_tab.lo: isl_tab.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_tab.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_tab.Tpo -c -o libisl_la-isl_tab.lo `test -f 'isl_tab.c' || echo '$(srcdir)/'`isl_tab.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_tab.Tpo $(DEPDIR)/libisl_la-isl_tab.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_tab.c' object='libisl_la-isl_tab.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_tab.lo `test -f 'isl_tab.c' || echo '$(srcdir)/'`isl_tab.c - -libisl_la-isl_tab_pip.lo: isl_tab_pip.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_tab_pip.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_tab_pip.Tpo -c -o libisl_la-isl_tab_pip.lo `test -f 'isl_tab_pip.c' || echo '$(srcdir)/'`isl_tab_pip.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_tab_pip.Tpo $(DEPDIR)/libisl_la-isl_tab_pip.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_tab_pip.c' object='libisl_la-isl_tab_pip.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_tab_pip.lo `test -f 'isl_tab_pip.c' || echo '$(srcdir)/'`isl_tab_pip.c - -libisl_la-isl_transitive_closure.lo: isl_transitive_closure.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_transitive_closure.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_transitive_closure.Tpo -c -o libisl_la-isl_transitive_closure.lo `test -f 'isl_transitive_closure.c' || echo '$(srcdir)/'`isl_transitive_closure.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_transitive_closure.Tpo $(DEPDIR)/libisl_la-isl_transitive_closure.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_transitive_closure.c' object='libisl_la-isl_transitive_closure.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_transitive_closure.lo `test -f 'isl_transitive_closure.c' || echo '$(srcdir)/'`isl_transitive_closure.c - -libisl_la-isl_union_map.lo: isl_union_map.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_union_map.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_union_map.Tpo -c -o libisl_la-isl_union_map.lo `test -f 'isl_union_map.c' || echo '$(srcdir)/'`isl_union_map.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_union_map.Tpo $(DEPDIR)/libisl_la-isl_union_map.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_union_map.c' object='libisl_la-isl_union_map.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_union_map.lo `test -f 'isl_union_map.c' || echo '$(srcdir)/'`isl_union_map.c - -libisl_la-isl_vec.lo: isl_vec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_vec.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_vec.Tpo -c -o libisl_la-isl_vec.lo `test -f 'isl_vec.c' || echo '$(srcdir)/'`isl_vec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_vec.Tpo $(DEPDIR)/libisl_la-isl_vec.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_vec.c' object='libisl_la-isl_vec.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_vec.lo `test -f 'isl_vec.c' || echo '$(srcdir)/'`isl_vec.c - -libisl_la-isl_version.lo: isl_version.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_version.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_version.Tpo -c -o libisl_la-isl_version.lo `test -f 'isl_version.c' || echo '$(srcdir)/'`isl_version.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_version.Tpo $(DEPDIR)/libisl_la-isl_version.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_version.c' object='libisl_la-isl_version.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_version.lo `test -f 'isl_version.c' || echo '$(srcdir)/'`isl_version.c - -libisl_la-isl_vertices.lo: isl_vertices.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libisl_la-isl_vertices.lo -MD -MP -MF $(DEPDIR)/libisl_la-isl_vertices.Tpo -c -o libisl_la-isl_vertices.lo `test -f 'isl_vertices.c' || echo '$(srcdir)/'`isl_vertices.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisl_la-isl_vertices.Tpo $(DEPDIR)/libisl_la-isl_vertices.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_vertices.c' object='libisl_la-isl_vertices.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libisl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libisl_la-isl_vertices.lo `test -f 'isl_vertices.c' || echo '$(srcdir)/'`isl_vertices.c - -isl_bound-bound.o: bound.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_bound_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_bound-bound.o -MD -MP -MF $(DEPDIR)/isl_bound-bound.Tpo -c -o isl_bound-bound.o `test -f 'bound.c' || echo '$(srcdir)/'`bound.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_bound-bound.Tpo $(DEPDIR)/isl_bound-bound.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bound.c' object='isl_bound-bound.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_bound_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_bound-bound.o `test -f 'bound.c' || echo '$(srcdir)/'`bound.c - -isl_bound-bound.obj: bound.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_bound_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_bound-bound.obj -MD -MP -MF $(DEPDIR)/isl_bound-bound.Tpo -c -o isl_bound-bound.obj `if test -f 'bound.c'; then $(CYGPATH_W) 'bound.c'; else $(CYGPATH_W) '$(srcdir)/bound.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_bound-bound.Tpo $(DEPDIR)/isl_bound-bound.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bound.c' object='isl_bound-bound.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_bound_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_bound-bound.obj `if test -f 'bound.c'; then $(CYGPATH_W) 'bound.c'; else $(CYGPATH_W) '$(srcdir)/bound.c'; fi` - -isl_cat-cat.o: cat.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_cat_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_cat-cat.o -MD -MP -MF $(DEPDIR)/isl_cat-cat.Tpo -c -o isl_cat-cat.o `test -f 'cat.c' || echo '$(srcdir)/'`cat.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_cat-cat.Tpo $(DEPDIR)/isl_cat-cat.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cat.c' object='isl_cat-cat.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_cat_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_cat-cat.o `test -f 'cat.c' || echo '$(srcdir)/'`cat.c - -isl_cat-cat.obj: cat.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_cat_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_cat-cat.obj -MD -MP -MF $(DEPDIR)/isl_cat-cat.Tpo -c -o isl_cat-cat.obj `if test -f 'cat.c'; then $(CYGPATH_W) 'cat.c'; else $(CYGPATH_W) '$(srcdir)/cat.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_cat-cat.Tpo $(DEPDIR)/isl_cat-cat.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cat.c' object='isl_cat-cat.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_cat_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_cat-cat.obj `if test -f 'cat.c'; then $(CYGPATH_W) 'cat.c'; else $(CYGPATH_W) '$(srcdir)/cat.c'; fi` - -isl_closure-closure.o: closure.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_closure_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_closure-closure.o -MD -MP -MF $(DEPDIR)/isl_closure-closure.Tpo -c -o isl_closure-closure.o `test -f 'closure.c' || echo '$(srcdir)/'`closure.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_closure-closure.Tpo $(DEPDIR)/isl_closure-closure.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='closure.c' object='isl_closure-closure.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_closure_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_closure-closure.o `test -f 'closure.c' || echo '$(srcdir)/'`closure.c - -isl_closure-closure.obj: closure.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_closure_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_closure-closure.obj -MD -MP -MF $(DEPDIR)/isl_closure-closure.Tpo -c -o isl_closure-closure.obj `if test -f 'closure.c'; then $(CYGPATH_W) 'closure.c'; else $(CYGPATH_W) '$(srcdir)/closure.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_closure-closure.Tpo $(DEPDIR)/isl_closure-closure.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='closure.c' object='isl_closure-closure.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_closure_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_closure-closure.obj `if test -f 'closure.c'; then $(CYGPATH_W) 'closure.c'; else $(CYGPATH_W) '$(srcdir)/closure.c'; fi` - -isl_pip-pip.o: pip.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_pip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_pip-pip.o -MD -MP -MF $(DEPDIR)/isl_pip-pip.Tpo -c -o isl_pip-pip.o `test -f 'pip.c' || echo '$(srcdir)/'`pip.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_pip-pip.Tpo $(DEPDIR)/isl_pip-pip.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pip.c' object='isl_pip-pip.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_pip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_pip-pip.o `test -f 'pip.c' || echo '$(srcdir)/'`pip.c - -isl_pip-pip.obj: pip.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_pip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_pip-pip.obj -MD -MP -MF $(DEPDIR)/isl_pip-pip.Tpo -c -o isl_pip-pip.obj `if test -f 'pip.c'; then $(CYGPATH_W) 'pip.c'; else $(CYGPATH_W) '$(srcdir)/pip.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_pip-pip.Tpo $(DEPDIR)/isl_pip-pip.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pip.c' object='isl_pip-pip.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_pip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_pip-pip.obj `if test -f 'pip.c'; then $(CYGPATH_W) 'pip.c'; else $(CYGPATH_W) '$(srcdir)/pip.c'; fi` - -isl_polyhedron_detect_equalities-polyhedron_detect_equalities.o: polyhedron_detect_equalities.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_detect_equalities_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polyhedron_detect_equalities-polyhedron_detect_equalities.o -MD -MP -MF $(DEPDIR)/isl_polyhedron_detect_equalities-polyhedron_detect_equalities.Tpo -c -o isl_polyhedron_detect_equalities-polyhedron_detect_equalities.o `test -f 'polyhedron_detect_equalities.c' || echo '$(srcdir)/'`polyhedron_detect_equalities.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polyhedron_detect_equalities-polyhedron_detect_equalities.Tpo $(DEPDIR)/isl_polyhedron_detect_equalities-polyhedron_detect_equalities.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polyhedron_detect_equalities.c' object='isl_polyhedron_detect_equalities-polyhedron_detect_equalities.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_detect_equalities_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polyhedron_detect_equalities-polyhedron_detect_equalities.o `test -f 'polyhedron_detect_equalities.c' || echo '$(srcdir)/'`polyhedron_detect_equalities.c - -isl_polyhedron_detect_equalities-polyhedron_detect_equalities.obj: polyhedron_detect_equalities.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_detect_equalities_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polyhedron_detect_equalities-polyhedron_detect_equalities.obj -MD -MP -MF $(DEPDIR)/isl_polyhedron_detect_equalities-polyhedron_detect_equalities.Tpo -c -o isl_polyhedron_detect_equalities-polyhedron_detect_equalities.obj `if test -f 'polyhedron_detect_equalities.c'; then $(CYGPATH_W) 'polyhedron_detect_equalities.c'; else $(CYGPATH_W) '$(srcdir)/polyhedron_detect_equalities.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polyhedron_detect_equalities-polyhedron_detect_equalities.Tpo $(DEPDIR)/isl_polyhedron_detect_equalities-polyhedron_detect_equalities.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polyhedron_detect_equalities.c' object='isl_polyhedron_detect_equalities-polyhedron_detect_equalities.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_detect_equalities_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polyhedron_detect_equalities-polyhedron_detect_equalities.obj `if test -f 'polyhedron_detect_equalities.c'; then $(CYGPATH_W) 'polyhedron_detect_equalities.c'; else $(CYGPATH_W) '$(srcdir)/polyhedron_detect_equalities.c'; fi` - -isl_polyhedron_minimize-polyhedron_minimize.o: polyhedron_minimize.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_minimize_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polyhedron_minimize-polyhedron_minimize.o -MD -MP -MF $(DEPDIR)/isl_polyhedron_minimize-polyhedron_minimize.Tpo -c -o isl_polyhedron_minimize-polyhedron_minimize.o `test -f 'polyhedron_minimize.c' || echo '$(srcdir)/'`polyhedron_minimize.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polyhedron_minimize-polyhedron_minimize.Tpo $(DEPDIR)/isl_polyhedron_minimize-polyhedron_minimize.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polyhedron_minimize.c' object='isl_polyhedron_minimize-polyhedron_minimize.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_minimize_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polyhedron_minimize-polyhedron_minimize.o `test -f 'polyhedron_minimize.c' || echo '$(srcdir)/'`polyhedron_minimize.c - -isl_polyhedron_minimize-polyhedron_minimize.obj: polyhedron_minimize.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_minimize_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polyhedron_minimize-polyhedron_minimize.obj -MD -MP -MF $(DEPDIR)/isl_polyhedron_minimize-polyhedron_minimize.Tpo -c -o isl_polyhedron_minimize-polyhedron_minimize.obj `if test -f 'polyhedron_minimize.c'; then $(CYGPATH_W) 'polyhedron_minimize.c'; else $(CYGPATH_W) '$(srcdir)/polyhedron_minimize.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polyhedron_minimize-polyhedron_minimize.Tpo $(DEPDIR)/isl_polyhedron_minimize-polyhedron_minimize.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polyhedron_minimize.c' object='isl_polyhedron_minimize-polyhedron_minimize.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_minimize_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polyhedron_minimize-polyhedron_minimize.obj `if test -f 'polyhedron_minimize.c'; then $(CYGPATH_W) 'polyhedron_minimize.c'; else $(CYGPATH_W) '$(srcdir)/polyhedron_minimize.c'; fi` - -isl_polyhedron_sample-polyhedron_sample.o: polyhedron_sample.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_sample_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polyhedron_sample-polyhedron_sample.o -MD -MP -MF $(DEPDIR)/isl_polyhedron_sample-polyhedron_sample.Tpo -c -o isl_polyhedron_sample-polyhedron_sample.o `test -f 'polyhedron_sample.c' || echo '$(srcdir)/'`polyhedron_sample.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polyhedron_sample-polyhedron_sample.Tpo $(DEPDIR)/isl_polyhedron_sample-polyhedron_sample.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polyhedron_sample.c' object='isl_polyhedron_sample-polyhedron_sample.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_sample_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polyhedron_sample-polyhedron_sample.o `test -f 'polyhedron_sample.c' || echo '$(srcdir)/'`polyhedron_sample.c - -isl_polyhedron_sample-polyhedron_sample.obj: polyhedron_sample.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_sample_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polyhedron_sample-polyhedron_sample.obj -MD -MP -MF $(DEPDIR)/isl_polyhedron_sample-polyhedron_sample.Tpo -c -o isl_polyhedron_sample-polyhedron_sample.obj `if test -f 'polyhedron_sample.c'; then $(CYGPATH_W) 'polyhedron_sample.c'; else $(CYGPATH_W) '$(srcdir)/polyhedron_sample.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polyhedron_sample-polyhedron_sample.Tpo $(DEPDIR)/isl_polyhedron_sample-polyhedron_sample.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polyhedron_sample.c' object='isl_polyhedron_sample-polyhedron_sample.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polyhedron_sample_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polyhedron_sample-polyhedron_sample.obj `if test -f 'polyhedron_sample.c'; then $(CYGPATH_W) 'polyhedron_sample.c'; else $(CYGPATH_W) '$(srcdir)/polyhedron_sample.c'; fi` - -isl_polytope_scan-polytope_scan.o: polytope_scan.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polytope_scan_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polytope_scan-polytope_scan.o -MD -MP -MF $(DEPDIR)/isl_polytope_scan-polytope_scan.Tpo -c -o isl_polytope_scan-polytope_scan.o `test -f 'polytope_scan.c' || echo '$(srcdir)/'`polytope_scan.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polytope_scan-polytope_scan.Tpo $(DEPDIR)/isl_polytope_scan-polytope_scan.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polytope_scan.c' object='isl_polytope_scan-polytope_scan.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polytope_scan_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polytope_scan-polytope_scan.o `test -f 'polytope_scan.c' || echo '$(srcdir)/'`polytope_scan.c - -isl_polytope_scan-polytope_scan.obj: polytope_scan.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polytope_scan_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_polytope_scan-polytope_scan.obj -MD -MP -MF $(DEPDIR)/isl_polytope_scan-polytope_scan.Tpo -c -o isl_polytope_scan-polytope_scan.obj `if test -f 'polytope_scan.c'; then $(CYGPATH_W) 'polytope_scan.c'; else $(CYGPATH_W) '$(srcdir)/polytope_scan.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_polytope_scan-polytope_scan.Tpo $(DEPDIR)/isl_polytope_scan-polytope_scan.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polytope_scan.c' object='isl_polytope_scan-polytope_scan.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_polytope_scan_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_polytope_scan-polytope_scan.obj `if test -f 'polytope_scan.c'; then $(CYGPATH_W) 'polytope_scan.c'; else $(CYGPATH_W) '$(srcdir)/polytope_scan.c'; fi` - -isl_test-isl_test.o: isl_test.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_test-isl_test.o -MD -MP -MF $(DEPDIR)/isl_test-isl_test.Tpo -c -o isl_test-isl_test.o `test -f 'isl_test.c' || echo '$(srcdir)/'`isl_test.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_test-isl_test.Tpo $(DEPDIR)/isl_test-isl_test.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_test.c' object='isl_test-isl_test.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_test-isl_test.o `test -f 'isl_test.c' || echo '$(srcdir)/'`isl_test.c - -isl_test-isl_test.obj: isl_test.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isl_test-isl_test.obj -MD -MP -MF $(DEPDIR)/isl_test-isl_test.Tpo -c -o isl_test-isl_test.obj `if test -f 'isl_test.c'; then $(CYGPATH_W) 'isl_test.c'; else $(CYGPATH_W) '$(srcdir)/isl_test.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/isl_test-isl_test.Tpo $(DEPDIR)/isl_test-isl_test.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isl_test.c' object='isl_test-isl_test.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(isl_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isl_test-isl_test.obj `if test -f 'isl_test.c'; then $(CYGPATH_W) 'isl_test.c'; else $(CYGPATH_W) '$(srcdir)/isl_test.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files -install-nodist_pkgincludeHEADERS: $(nodist_pkginclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" - @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ - done - -uninstall-nodist_pkgincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(nodist_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files -install-pkgincludeHEADERS: $(pkginclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" - @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ - done - -uninstall-pkgincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) isl_config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) isl_config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) isl_config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) isl_config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; skip=0; \ - srcdir=$(srcdir); export srcdir; \ - list=' $(TESTS) '; \ - $(am__tty_colors); \ - if test -n "$$list"; then \ - for tst in $$list; do \ - if test -f ./$$tst; then dir=./; \ - elif test -f $$tst; then dir=; \ - else dir="$(srcdir)/"; fi; \ - if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xpass=`expr $$xpass + 1`; \ - failed=`expr $$failed + 1`; \ - col=$$red; res=XPASS; \ - ;; \ - *) \ - col=$$grn; res=PASS; \ - ;; \ - esac; \ - elif test $$? -ne 77; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xfail=`expr $$xfail + 1`; \ - col=$$lgn; res=XFAIL; \ - ;; \ - *) \ - failed=`expr $$failed + 1`; \ - col=$$red; res=FAIL; \ - ;; \ - esac; \ - else \ - skip=`expr $$skip + 1`; \ - col=$$blu; res=SKIP; \ - fi; \ - echo "$${col}$$res$${std}: $$tst"; \ - done; \ - if test "$$all" -eq 1; then \ - tests="test"; \ - All=""; \ - else \ - tests="tests"; \ - All="All "; \ - fi; \ - if test "$$failed" -eq 0; then \ - if test "$$xfail" -eq 0; then \ - banner="$$All$$all $$tests passed"; \ - else \ - if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ - banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ - fi; \ - else \ - if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all $$tests failed"; \ - else \ - if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ - banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ - fi; \ - fi; \ - dashes="$$banner"; \ - skipped=""; \ - if test "$$skip" -ne 0; then \ - if test "$$skip" -eq 1; then \ - skipped="($$skip test was not run)"; \ - else \ - skipped="($$skip tests were not run)"; \ - fi; \ - test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$skipped"; \ - fi; \ - report=""; \ - if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ - report="Please report to $(PACKAGE_BUGREPORT)"; \ - test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$report"; \ - fi; \ - dashes=`echo "$$dashes" | sed s/./=/g`; \ - if test "$$failed" -eq 0; then \ - echo "$$grn$$dashes"; \ - else \ - echo "$$red$$dashes"; \ - fi; \ - echo "$$banner"; \ - test -z "$$skipped" || echo "$$skipped"; \ - test -z "$$report" || echo "$$report"; \ - echo "$$dashes$$std"; \ - test "$$failed" -eq 0; \ - else :; fi - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: check-recursive -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) \ - isl_config.h -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: install-data-local install-nodist_pkgincludeHEADERS \ - install-pkgconfigDATA install-pkgincludeHEADERS - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-libLTLIBRARIES \ - uninstall-nodist_pkgincludeHEADERS uninstall-pkgconfigDATA \ - uninstall-pkgincludeHEADERS - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check-am \ - ctags-recursive install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-TESTS check-am clean \ - clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstPROGRAMS ctags ctags-recursive dist dist-all \ - dist-bzip2 dist-gzip dist-hook dist-lzma dist-shar dist-tarZ \ - dist-xz dist-zip distcheck distclean distclean-compile \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-tags distcleancheck distdir distuninstallcheck dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-data-local install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-man \ - install-nodist_pkgincludeHEADERS install-pdf install-pdf-am \ - install-pkgconfigDATA install-pkgincludeHEADERS install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am \ - uninstall-libLTLIBRARIES uninstall-nodist_pkgincludeHEADERS \ - uninstall-pkgconfigDATA uninstall-pkgincludeHEADERS - - -dist-hook: - echo @GIT_HEAD_VERSION@ > $(distdir)/GIT_HEAD_ID - (cd doc; make manual.pdf) - cp doc/manual.pdf $(distdir)/doc/ - -gitversion.h: @GIT_HEAD@ - $(AM_V_GEN)echo '#define GIT_HEAD_ID "'@GIT_HEAD_VERSION@'"' > $@ - -install-data-local: $(srcdir)/isl.py - @libisl=`sed -ne "/^library_names=/{s/.*='//;s/'$$//;s/ .*//;p}" \ - $(builddir)/libisl.la`; \ - case $$libisl in \ - '') echo Cannot find isl library name. GDB bindings not installed.;; \ - *) echo $(INSTALL_DATA) $(srcdir)/isl.py \ - $(DESTDIR)$(libdir)/$$libisl-gdb.py; \ - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"; \ - $(INSTALL_DATA) $(srcdir)/isl.py $(DESTDIR)$(libdir)/$$libisl-gdb.py; esac - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.17.0/isl/aclocal.m4 b/cloog-0.17.0/isl/aclocal.m4 deleted file mode 100644 index 0e08e3f..0000000 --- a/cloog-0.17.0/isl/aclocal.m4 +++ /dev/null @@ -1,995 +0,0 @@ -# generated automatically by aclocal 1.11.1 -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],, -[m4_warning([this file was generated for autoconf 2.67. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically `autoreconf'.])]) - -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.11' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 9 - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 10 - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -#serial 5 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 16 - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) - -dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST(install_sh)]) - -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 6 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_MKDIR_P -# --------------- -# Check for `mkdir -p'. -AC_DEFUN([AM_PROG_MKDIR_P], -[AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 5 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# Copyright (C) 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 1 - -# AM_SILENT_RULES([DEFAULT]) -# -------------------------- -# Enable less verbose build rules; with the default set to DEFAULT -# (`yes' being less verbose, `no' or empty being verbose). -AC_DEFUN([AM_SILENT_RULES], -[AC_ARG_ENABLE([silent-rules], -[ --enable-silent-rules less verbose build output (undo: `make V=1') - --disable-silent-rules verbose build output (undo: `make V=0')]) -case $enable_silent_rules in -yes) AM_DEFAULT_VERBOSITY=0;; -no) AM_DEFAULT_VERBOSITY=1;; -*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; -esac -AC_SUBST([AM_DEFAULT_VERBOSITY])dnl -AM_BACKSLASH='\' -AC_SUBST([AM_BACKSLASH])dnl -_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl -]) - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([m4/ax_c___attribute__.m4]) -m4_include([m4/ax_cc_maxopt.m4]) -m4_include([m4/ax_check_compiler_flags.m4]) -m4_include([m4/ax_compiler_vendor.m4]) -m4_include([m4/ax_create_pkgconfig_info.m4]) -m4_include([m4/ax_create_stdint_h.m4]) -m4_include([m4/ax_detect_git_head.m4]) -m4_include([m4/ax_gcc_archflag.m4]) -m4_include([m4/ax_gcc_warn_unused_result.m4]) -m4_include([m4/ax_gcc_x86_cpuid.m4]) -m4_include([m4/ax_set_warning_flags.m4]) -m4_include([m4/ax_submodule.m4]) -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) diff --git a/cloog-0.17.0/isl/basis_reduction_tab.c b/cloog-0.17.0/isl/basis_reduction_tab.c deleted file mode 100644 index af54569..0000000 --- a/cloog-0.17.0/isl/basis_reduction_tab.c +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include "isl_tab.h" - -struct tab_lp { - struct isl_ctx *ctx; - struct isl_vec *row; - struct isl_tab *tab; - struct isl_tab_undo **stack; - isl_int *obj; - isl_int opt; - isl_int opt_denom; - isl_int tmp; - isl_int tmp2; - int neq; - unsigned dim; - /* number of constraints in initial product tableau */ - int con_offset; - /* objective function has fixed or no integer value */ - int is_fixed; -}; - -static struct tab_lp *init_lp(struct isl_tab *tab); -static void set_lp_obj(struct tab_lp *lp, isl_int *row, int dim); -static int solve_lp(struct tab_lp *lp); -static void get_obj_val(struct tab_lp* lp, mpq_t *F); -static void delete_lp(struct tab_lp *lp); -static int add_lp_row(struct tab_lp *lp, isl_int *row, int dim); -static void get_alpha(struct tab_lp* lp, int row, mpq_t *alpha); -static int del_lp_row(struct tab_lp *lp) WARN_UNUSED; -static int cut_lp_to_hyperplane(struct tab_lp *lp, isl_int *row); - -#define GBR_LP struct tab_lp -#define GBR_type mpq_t -#define GBR_init(v) mpq_init(v) -#define GBR_clear(v) mpq_clear(v) -#define GBR_set(a,b) mpq_set(a,b) -#define GBR_set_ui(a,b) mpq_set_ui(a,b,1) -#define GBR_mul(a,b,c) mpq_mul(a,b,c) -#define GBR_lt(a,b) (mpq_cmp(a,b) < 0) -#define GBR_is_zero(a) (mpq_sgn(a) == 0) -#define GBR_floor(a,b) mpz_fdiv_q(a,mpq_numref(b),mpq_denref(b)) -#define GBR_ceil(a,b) mpz_cdiv_q(a,mpq_numref(b),mpq_denref(b)) -#define GBR_lp_init(P) init_lp(P) -#define GBR_lp_set_obj(lp, obj, dim) set_lp_obj(lp, obj, dim) -#define GBR_lp_solve(lp) solve_lp(lp) -#define GBR_lp_get_obj_val(lp, F) get_obj_val(lp, F) -#define GBR_lp_delete(lp) delete_lp(lp) -#define GBR_lp_next_row(lp) lp->neq -#define GBR_lp_add_row(lp, row, dim) add_lp_row(lp, row, dim) -#define GBR_lp_get_alpha(lp, row, alpha) get_alpha(lp, row, alpha) -#define GBR_lp_del_row(lp) del_lp_row(lp) -#define GBR_lp_is_fixed(lp) (lp)->is_fixed -#define GBR_lp_cut(lp, obj) cut_lp_to_hyperplane(lp, obj) -#include "basis_reduction_templ.c" - -/* Set up a tableau for the Cartesian product of bset with itself. - * This could be optimized by first setting up a tableau for bset - * and then performing the Cartesian product on the tableau. - */ -static struct isl_tab *gbr_tab(struct isl_tab *tab, struct isl_vec *row) -{ - unsigned dim; - struct isl_tab *prod; - - if (!tab || !row) - return NULL; - - dim = tab->n_var; - prod = isl_tab_product(tab, tab); - if (isl_tab_extend_cons(prod, 3 * dim + 1) < 0) { - isl_tab_free(prod); - return NULL; - } - return prod; -} - -static struct tab_lp *init_lp(struct isl_tab *tab) -{ - struct tab_lp *lp = NULL; - - if (!tab) - return NULL; - - lp = isl_calloc_type(tab->mat->ctx, struct tab_lp); - if (!lp) - return NULL; - - isl_int_init(lp->opt); - isl_int_init(lp->opt_denom); - isl_int_init(lp->tmp); - isl_int_init(lp->tmp2); - - lp->dim = tab->n_var; - - lp->ctx = tab->mat->ctx; - isl_ctx_ref(lp->ctx); - - lp->stack = isl_alloc_array(lp->ctx, struct isl_tab_undo *, lp->dim); - - lp->row = isl_vec_alloc(lp->ctx, 1 + 2 * lp->dim); - if (!lp->row) - goto error; - lp->tab = gbr_tab(tab, lp->row); - if (!lp->tab) - goto error; - lp->con_offset = lp->tab->n_con; - lp->obj = NULL; - lp->neq = 0; - - return lp; -error: - delete_lp(lp); - return NULL; -} - -static void set_lp_obj(struct tab_lp *lp, isl_int *row, int dim) -{ - lp->obj = row; -} - -static int solve_lp(struct tab_lp *lp) -{ - enum isl_lp_result res; - unsigned flags = 0; - - lp->is_fixed = 0; - - isl_int_set_si(lp->row->el[0], 0); - isl_seq_cpy(lp->row->el + 1, lp->obj, lp->dim); - isl_seq_neg(lp->row->el + 1 + lp->dim, lp->obj, lp->dim); - if (lp->neq) - flags = ISL_TAB_SAVE_DUAL; - res = isl_tab_min(lp->tab, lp->row->el, lp->ctx->one, - &lp->opt, &lp->opt_denom, flags); - isl_int_mul_ui(lp->opt_denom, lp->opt_denom, 2); - if (isl_int_abs_lt(lp->opt, lp->opt_denom)) { - struct isl_vec *sample = isl_tab_get_sample_value(lp->tab); - if (!sample) - return -1; - isl_seq_inner_product(lp->obj, sample->el + 1, lp->dim, &lp->tmp); - isl_seq_inner_product(lp->obj, sample->el + 1 + lp->dim, lp->dim, &lp->tmp2); - isl_int_cdiv_q(lp->tmp, lp->tmp, sample->el[0]); - isl_int_fdiv_q(lp->tmp2, lp->tmp2, sample->el[0]); - if (isl_int_ge(lp->tmp, lp->tmp2)) - lp->is_fixed = 1; - isl_vec_free(sample); - } - isl_int_divexact_ui(lp->opt_denom, lp->opt_denom, 2); - if (res != isl_lp_ok) - return -1; - return 0; -} - -/* The current objective function has a fixed (or no) integer value. - * Cut the tableau to the hyperplane that fixes this value in - * both halves of the tableau. - * Return 1 if the resulting tableau is empty. - */ -static int cut_lp_to_hyperplane(struct tab_lp *lp, isl_int *row) -{ - enum isl_lp_result res; - - isl_int_set_si(lp->row->el[0], 0); - isl_seq_cpy(lp->row->el + 1, row, lp->dim); - isl_seq_clr(lp->row->el + 1 + lp->dim, lp->dim); - res = isl_tab_min(lp->tab, lp->row->el, lp->ctx->one, - &lp->tmp, NULL, 0); - if (res != isl_lp_ok) - return -1; - - isl_int_neg(lp->row->el[0], lp->tmp); - if (isl_tab_add_eq(lp->tab, lp->row->el) < 0) - return -1; - - isl_seq_cpy(lp->row->el + 1 + lp->dim, row, lp->dim); - isl_seq_clr(lp->row->el + 1, lp->dim); - if (isl_tab_add_eq(lp->tab, lp->row->el) < 0) - return -1; - - lp->con_offset += 2; - - return lp->tab->empty; -} - -static void get_obj_val(struct tab_lp* lp, mpq_t *F) -{ - isl_int_neg(mpq_numref(*F), lp->opt); - isl_int_set(mpq_denref(*F), lp->opt_denom); -} - -static void delete_lp(struct tab_lp *lp) -{ - if (!lp) - return; - - isl_int_clear(lp->opt); - isl_int_clear(lp->opt_denom); - isl_int_clear(lp->tmp); - isl_int_clear(lp->tmp2); - isl_vec_free(lp->row); - free(lp->stack); - isl_tab_free(lp->tab); - isl_ctx_deref(lp->ctx); - free(lp); -} - -static int add_lp_row(struct tab_lp *lp, isl_int *row, int dim) -{ - lp->stack[lp->neq] = isl_tab_snap(lp->tab); - - isl_int_set_si(lp->row->el[0], 0); - isl_seq_cpy(lp->row->el + 1, row, lp->dim); - isl_seq_neg(lp->row->el + 1 + lp->dim, row, lp->dim); - - if (isl_tab_add_valid_eq(lp->tab, lp->row->el) < 0) - return -1; - - return lp->neq++; -} - -static void get_alpha(struct tab_lp* lp, int row, mpq_t *alpha) -{ - row += lp->con_offset; - isl_int_neg(mpq_numref(*alpha), lp->tab->dual->el[1 + row]); - isl_int_set(mpq_denref(*alpha), lp->tab->dual->el[0]); -} - -static int del_lp_row(struct tab_lp *lp) -{ - lp->neq--; - return isl_tab_rollback(lp->tab, lp->stack[lp->neq]); -} diff --git a/cloog-0.17.0/isl/basis_reduction_templ.c b/cloog-0.17.0/isl/basis_reduction_templ.c deleted file mode 100644 index f4c50ed..0000000 --- a/cloog-0.17.0/isl/basis_reduction_templ.c +++ /dev/null @@ -1,357 +0,0 @@ -/* - * Copyright 2006-2007 Universiteit Leiden - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, Leiden Institute of Advanced Computer Science, - * Universiteit Leiden, Niels Bohrweg 1, 2333 CA Leiden, The Netherlands - * and K.U.Leuven, Departement Computerwetenschappen, Celestijnenlaan 200A, - * B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include "isl_basis_reduction.h" - -static void save_alpha(GBR_LP *lp, int first, int n, GBR_type *alpha) -{ - int i; - - for (i = 0; i < n; ++i) - GBR_lp_get_alpha(lp, first + i, &alpha[i]); -} - -/* Compute a reduced basis for the set represented by the tableau "tab". - * tab->basis, which must be initialized by the calling function to an affine - * unimodular basis, is updated to reflect the reduced basis. - * The first tab->n_zero rows of the basis (ignoring the constant row) - * are assumed to correspond to equalities and are left untouched. - * tab->n_zero is updated to reflect any additional equalities that - * have been detected in the first rows of the new basis. - * The final tab->n_unbounded rows of the basis are assumed to correspond - * to unbounded directions and are also left untouched. - * In particular this means that the remaining rows are assumed to - * correspond to bounded directions. - * - * This function implements the algorithm described in - * "An Implementation of the Generalized Basis Reduction Algorithm - * for Integer Programming" of Cook el al. to compute a reduced basis. - * We use \epsilon = 1/4. - * - * If ctx->opt->gbr_only_first is set, the user is only interested - * in the first direction. In this case we stop the basis reduction when - * the width in the first direction becomes smaller than 2. - */ -struct isl_tab *isl_tab_compute_reduced_basis(struct isl_tab *tab) -{ - unsigned dim; - struct isl_ctx *ctx; - struct isl_mat *B; - int unbounded; - int i; - GBR_LP *lp = NULL; - GBR_type F_old, alpha, F_new; - int row; - isl_int tmp; - struct isl_vec *b_tmp; - GBR_type *F = NULL; - GBR_type *alpha_buffer[2] = { NULL, NULL }; - GBR_type *alpha_saved; - GBR_type F_saved; - int use_saved = 0; - isl_int mu[2]; - GBR_type mu_F[2]; - GBR_type two; - GBR_type one; - int empty = 0; - int fixed = 0; - int fixed_saved = 0; - int mu_fixed[2]; - int n_bounded; - int gbr_only_first; - - if (!tab) - return NULL; - - if (tab->empty) - return tab; - - ctx = tab->mat->ctx; - gbr_only_first = ctx->opt->gbr_only_first; - dim = tab->n_var; - B = tab->basis; - if (!B) - return tab; - - n_bounded = dim - tab->n_unbounded; - if (n_bounded <= tab->n_zero + 1) - return tab; - - isl_int_init(tmp); - isl_int_init(mu[0]); - isl_int_init(mu[1]); - - GBR_init(alpha); - GBR_init(F_old); - GBR_init(F_new); - GBR_init(F_saved); - GBR_init(mu_F[0]); - GBR_init(mu_F[1]); - GBR_init(two); - GBR_init(one); - - b_tmp = isl_vec_alloc(ctx, dim); - if (!b_tmp) - goto error; - - F = isl_alloc_array(ctx, GBR_type, n_bounded); - alpha_buffer[0] = isl_alloc_array(ctx, GBR_type, n_bounded); - alpha_buffer[1] = isl_alloc_array(ctx, GBR_type, n_bounded); - alpha_saved = alpha_buffer[0]; - - if (!F || !alpha_buffer[0] || !alpha_buffer[1]) - goto error; - - for (i = 0; i < n_bounded; ++i) { - GBR_init(F[i]); - GBR_init(alpha_buffer[0][i]); - GBR_init(alpha_buffer[1][i]); - } - - GBR_set_ui(two, 2); - GBR_set_ui(one, 1); - - lp = GBR_lp_init(tab); - if (!lp) - goto error; - - i = tab->n_zero; - - GBR_lp_set_obj(lp, B->row[1+i]+1, dim); - ctx->stats->gbr_solved_lps++; - unbounded = GBR_lp_solve(lp); - isl_assert(ctx, !unbounded, goto error); - GBR_lp_get_obj_val(lp, &F[i]); - - if (GBR_lt(F[i], one)) { - if (!GBR_is_zero(F[i])) { - empty = GBR_lp_cut(lp, B->row[1+i]+1); - if (empty) - goto done; - GBR_set_ui(F[i], 0); - } - tab->n_zero++; - } - - do { - if (i+1 == tab->n_zero) { - GBR_lp_set_obj(lp, B->row[1+i+1]+1, dim); - ctx->stats->gbr_solved_lps++; - unbounded = GBR_lp_solve(lp); - isl_assert(ctx, !unbounded, goto error); - GBR_lp_get_obj_val(lp, &F_new); - fixed = GBR_lp_is_fixed(lp); - GBR_set_ui(alpha, 0); - } else - if (use_saved) { - row = GBR_lp_next_row(lp); - GBR_set(F_new, F_saved); - fixed = fixed_saved; - GBR_set(alpha, alpha_saved[i]); - } else { - row = GBR_lp_add_row(lp, B->row[1+i]+1, dim); - GBR_lp_set_obj(lp, B->row[1+i+1]+1, dim); - ctx->stats->gbr_solved_lps++; - unbounded = GBR_lp_solve(lp); - isl_assert(ctx, !unbounded, goto error); - GBR_lp_get_obj_val(lp, &F_new); - fixed = GBR_lp_is_fixed(lp); - - GBR_lp_get_alpha(lp, row, &alpha); - - if (i > 0) - save_alpha(lp, row-i, i, alpha_saved); - - if (GBR_lp_del_row(lp) < 0) - goto error; - } - GBR_set(F[i+1], F_new); - - GBR_floor(mu[0], alpha); - GBR_ceil(mu[1], alpha); - - if (isl_int_eq(mu[0], mu[1])) - isl_int_set(tmp, mu[0]); - else { - int j; - - for (j = 0; j <= 1; ++j) { - isl_int_set(tmp, mu[j]); - isl_seq_combine(b_tmp->el, - ctx->one, B->row[1+i+1]+1, - tmp, B->row[1+i]+1, dim); - GBR_lp_set_obj(lp, b_tmp->el, dim); - ctx->stats->gbr_solved_lps++; - unbounded = GBR_lp_solve(lp); - isl_assert(ctx, !unbounded, goto error); - GBR_lp_get_obj_val(lp, &mu_F[j]); - mu_fixed[j] = GBR_lp_is_fixed(lp); - if (i > 0) - save_alpha(lp, row-i, i, alpha_buffer[j]); - } - - if (GBR_lt(mu_F[0], mu_F[1])) - j = 0; - else - j = 1; - - isl_int_set(tmp, mu[j]); - GBR_set(F_new, mu_F[j]); - fixed = mu_fixed[j]; - alpha_saved = alpha_buffer[j]; - } - isl_seq_combine(B->row[1+i+1]+1, ctx->one, B->row[1+i+1]+1, - tmp, B->row[1+i]+1, dim); - - if (i+1 == tab->n_zero && fixed) { - if (!GBR_is_zero(F[i+1])) { - empty = GBR_lp_cut(lp, B->row[1+i+1]+1); - if (empty) - goto done; - GBR_set_ui(F[i+1], 0); - } - tab->n_zero++; - } - - GBR_set(F_old, F[i]); - - use_saved = 0; - /* mu_F[0] = 4 * F_new; mu_F[1] = 3 * F_old */ - GBR_set_ui(mu_F[0], 4); - GBR_mul(mu_F[0], mu_F[0], F_new); - GBR_set_ui(mu_F[1], 3); - GBR_mul(mu_F[1], mu_F[1], F_old); - if (GBR_lt(mu_F[0], mu_F[1])) { - B = isl_mat_swap_rows(B, 1 + i, 1 + i + 1); - if (i > tab->n_zero) { - use_saved = 1; - GBR_set(F_saved, F_new); - fixed_saved = fixed; - if (GBR_lp_del_row(lp) < 0) - goto error; - --i; - } else { - GBR_set(F[tab->n_zero], F_new); - if (gbr_only_first && GBR_lt(F[tab->n_zero], two)) - break; - - if (fixed) { - if (!GBR_is_zero(F[tab->n_zero])) { - empty = GBR_lp_cut(lp, B->row[1+tab->n_zero]+1); - if (empty) - goto done; - GBR_set_ui(F[tab->n_zero], 0); - } - tab->n_zero++; - } - } - } else { - GBR_lp_add_row(lp, B->row[1+i]+1, dim); - ++i; - } - } while (i < n_bounded - 1); - - if (0) { -done: - if (empty < 0) { -error: - isl_mat_free(B); - B = NULL; - } - } - - GBR_lp_delete(lp); - - if (alpha_buffer[1]) - for (i = 0; i < n_bounded; ++i) { - GBR_clear(F[i]); - GBR_clear(alpha_buffer[0][i]); - GBR_clear(alpha_buffer[1][i]); - } - free(F); - free(alpha_buffer[0]); - free(alpha_buffer[1]); - - isl_vec_free(b_tmp); - - GBR_clear(alpha); - GBR_clear(F_old); - GBR_clear(F_new); - GBR_clear(F_saved); - GBR_clear(mu_F[0]); - GBR_clear(mu_F[1]); - GBR_clear(two); - GBR_clear(one); - - isl_int_clear(tmp); - isl_int_clear(mu[0]); - isl_int_clear(mu[1]); - - tab->basis = B; - - return tab; -} - -/* Compute an affine form of a reduced basis of the given basic - * non-parametric set, which is assumed to be bounded and not - * include any integer divisions. - * The first column and the first row correspond to the constant term. - * - * If the input contains any equalities, we first create an initial - * basis with the equalities first. Otherwise, we start off with - * the identity matrix. - */ -struct isl_mat *isl_basic_set_reduced_basis(struct isl_basic_set *bset) -{ - struct isl_mat *basis; - struct isl_tab *tab; - - if (!bset) - return NULL; - - if (isl_basic_set_dim(bset, isl_dim_div) != 0) - isl_die(bset->ctx, isl_error_invalid, - "no integer division allowed", return NULL); - if (isl_basic_set_dim(bset, isl_dim_param) != 0) - isl_die(bset->ctx, isl_error_invalid, - "no parameters allowed", return NULL); - - tab = isl_tab_from_basic_set(bset); - if (!tab) - return NULL; - - if (bset->n_eq == 0) - tab->basis = isl_mat_identity(bset->ctx, 1 + tab->n_var); - else { - isl_mat *eq; - unsigned nvar = isl_basic_set_total_dim(bset); - eq = isl_mat_sub_alloc6(bset->ctx, bset->eq, 0, bset->n_eq, - 1, nvar); - eq = isl_mat_left_hermite(eq, 0, NULL, &tab->basis); - tab->basis = isl_mat_lin_to_aff(tab->basis); - tab->n_zero = bset->n_eq; - isl_mat_free(eq); - } - tab = isl_tab_compute_reduced_basis(tab); - if (!tab) - return NULL; - - basis = isl_mat_copy(tab->basis); - - isl_tab_free(tab); - - return basis; -} diff --git a/cloog-0.17.0/isl/bound.c b/cloog-0.17.0/isl/bound.c deleted file mode 100644 index a0772b7..0000000 --- a/cloog-0.17.0/isl/bound.c +++ /dev/null @@ -1,278 +0,0 @@ -#include -#include -#include -#include -#include - -struct bound_options { - struct isl_options *isl; - unsigned verify; - int print_all; - int continue_on_error; -}; - -ISL_ARGS_START(struct bound_options, bound_options_args) -ISL_ARG_CHILD(struct bound_options, isl, "isl", &isl_options_args, - "isl options") -ISL_ARG_BOOL(struct bound_options, verify, 'T', "verify", 0, NULL) -ISL_ARG_BOOL(struct bound_options, print_all, 'A', "print-all", 0, NULL) -ISL_ARG_BOOL(struct bound_options, continue_on_error, '\0', "continue-on-error", 0, NULL) -ISL_ARGS_END - -ISL_ARG_DEF(bound_options, struct bound_options, bound_options_args) - -static __isl_give isl_set *set_bounds(__isl_take isl_set *set) -{ - unsigned nparam; - int i, r; - isl_point *pt, *pt2; - isl_set *box; - - nparam = isl_set_dim(set, isl_dim_param); - r = nparam >= 8 ? 5 : nparam >= 5 ? 15 : 50; - - pt = isl_set_sample_point(isl_set_copy(set)); - pt2 = isl_point_copy(pt); - - for (i = 0; i < nparam; ++i) { - pt = isl_point_add_ui(pt, isl_dim_param, i, r); - pt2 = isl_point_sub_ui(pt2, isl_dim_param, i, r); - } - - box = isl_set_box_from_points(pt, pt2); - - return isl_set_intersect(set, box); -} - -struct verify_point_bound { - struct bound_options *options; - int stride; - int n; - int exact; - int error; - - isl_pw_qpolynomial_fold *pwf; - isl_pw_qpolynomial_fold *bound; -}; - -static int verify_point(__isl_take isl_point *pnt, void *user) -{ - int i; - unsigned nvar; - unsigned nparam; - struct verify_point_bound *vpb = (struct verify_point_bound *) user; - isl_int t; - isl_pw_qpolynomial_fold *pwf; - isl_qpolynomial *bound = NULL; - isl_qpolynomial *opt = NULL; - isl_set *dom = NULL; - const char *minmax; - int bounded; - int sign; - int ok; - FILE *out = vpb->options->print_all ? stdout : stderr; - - vpb->n--; - - if (1) { - minmax = "ub"; - sign = 1; - } else { - minmax = "lb"; - sign = -1; - } - - isl_int_init(t); - - pwf = isl_pw_qpolynomial_fold_copy(vpb->pwf); - - nparam = isl_pw_qpolynomial_fold_dim(pwf, isl_dim_param); - for (i = 0; i < nparam; ++i) { - isl_point_get_coordinate(pnt, isl_dim_param, i, &t); - pwf = isl_pw_qpolynomial_fold_fix_dim(pwf, isl_dim_param, i, t); - } - - bound = isl_pw_qpolynomial_fold_eval( - isl_pw_qpolynomial_fold_copy(vpb->bound), - isl_point_copy(pnt)); - - dom = isl_pw_qpolynomial_fold_domain(isl_pw_qpolynomial_fold_copy(pwf)); - bounded = isl_set_is_bounded(dom); - - if (bounded < 0) - goto error; - - if (!bounded) - opt = isl_pw_qpolynomial_fold_eval( - isl_pw_qpolynomial_fold_copy(pwf), - isl_set_sample_point(isl_set_copy(dom))); - else if (sign > 0) - opt = isl_pw_qpolynomial_fold_max(isl_pw_qpolynomial_fold_copy(pwf)); - else - opt = isl_pw_qpolynomial_fold_min(isl_pw_qpolynomial_fold_copy(pwf)); - - nvar = isl_set_dim(dom, isl_dim_set); - opt = isl_qpolynomial_project_domain_on_params(opt); - if (vpb->exact && bounded) - ok = isl_qpolynomial_plain_is_equal(opt, bound); - else if (sign > 0) - ok = isl_qpolynomial_le_cst(opt, bound); - else - ok = isl_qpolynomial_le_cst(bound, opt); - if (ok < 0) - goto error; - - if (vpb->options->print_all || !ok) { - fprintf(out, "%s(", minmax); - for (i = 0; i < nparam; ++i) { - if (i) - fprintf(out, ", "); - isl_point_get_coordinate(pnt, isl_dim_param, i, &t); - isl_int_print(out, t, 0); - } - fprintf(out, ") = "); - isl_qpolynomial_print(bound, out, ISL_FORMAT_ISL); - fprintf(out, ", %s = ", bounded ? "opt" : "sample"); - isl_qpolynomial_print(opt, out, ISL_FORMAT_ISL); - if (ok) - fprintf(out, ". OK\n"); - else - fprintf(out, ". NOT OK\n"); - } else if ((vpb->n % vpb->stride) == 0) { - printf("o"); - fflush(stdout); - } - - if (0) { -error: - ok = 0; - } - - isl_pw_qpolynomial_fold_free(pwf); - isl_qpolynomial_free(bound); - isl_qpolynomial_free(opt); - isl_point_free(pnt); - isl_set_free(dom); - - isl_int_clear(t); - - if (!ok) - vpb->error = 1; - - if (vpb->options->continue_on_error) - ok = 1; - - return (vpb->n >= 1 && ok) ? 0 : -1; -} - -static int check_solution(__isl_take isl_pw_qpolynomial_fold *pwf, - __isl_take isl_pw_qpolynomial_fold *bound, int exact, - struct bound_options *options) -{ - struct verify_point_bound vpb; - isl_int count, max; - isl_set *dom; - isl_set *context; - int i, r, n; - - dom = isl_pw_qpolynomial_fold_domain(isl_pw_qpolynomial_fold_copy(pwf)); - context = isl_set_params(isl_set_copy(dom)); - context = isl_set_remove_divs(context); - context = set_bounds(context); - - isl_int_init(count); - isl_int_init(max); - - isl_int_set_si(max, 200); - r = isl_set_count_upto(context, max, &count); - assert(r >= 0); - n = isl_int_get_si(count); - - isl_int_clear(max); - isl_int_clear(count); - - vpb.options = options; - vpb.pwf = pwf; - vpb.bound = bound; - vpb.n = n; - vpb.stride = n > 70 ? 1 + (n + 1)/70 : 1; - vpb.error = 0; - vpb.exact = exact; - - if (!options->print_all) { - for (i = 0; i < vpb.n; i += vpb.stride) - printf("."); - printf("\r"); - fflush(stdout); - } - - isl_set_foreach_point(context, verify_point, &vpb); - - isl_set_free(context); - isl_set_free(dom); - isl_pw_qpolynomial_fold_free(pwf); - isl_pw_qpolynomial_fold_free(bound); - - if (!options->print_all) - printf("\n"); - - if (vpb.error) { - fprintf(stderr, "Check failed !\n"); - return -1; - } - - return 0; -} - -int main(int argc, char **argv) -{ - isl_ctx *ctx; - isl_pw_qpolynomial_fold *copy; - isl_pw_qpolynomial_fold *pwf; - struct isl_stream *s; - struct isl_obj obj; - struct bound_options *options; - int exact; - int r = 0; - - options = bound_options_new_with_defaults(); - assert(options); - argc = bound_options_parse(options, argc, argv, ISL_ARG_ALL); - - ctx = isl_ctx_alloc_with_options(&bound_options_args, options); - - s = isl_stream_new_file(ctx, stdin); - obj = isl_stream_read_obj(s); - if (obj.type == isl_obj_pw_qpolynomial) - pwf = isl_pw_qpolynomial_fold_from_pw_qpolynomial(isl_fold_max, - obj.v); - else if (obj.type == isl_obj_pw_qpolynomial_fold) - pwf = obj.v; - else { - obj.type->free(obj.v); - isl_die(ctx, isl_error_invalid, "invalid input", goto error); - } - - if (options->verify) - copy = isl_pw_qpolynomial_fold_copy(pwf); - - pwf = isl_pw_qpolynomial_fold_bound(pwf, &exact); - pwf = isl_pw_qpolynomial_fold_coalesce(pwf); - - if (options->verify) { - r = check_solution(copy, pwf, exact, options); - } else { - if (!exact) - printf("# NOT exact\n"); - isl_pw_qpolynomial_fold_print(pwf, stdout, 0); - fprintf(stdout, "\n"); - isl_pw_qpolynomial_fold_free(pwf); - } - -error: - isl_stream_free(s); - - isl_ctx_free(ctx); - - return r; -} diff --git a/cloog-0.17.0/isl/bound_test.sh.in b/cloog-0.17.0/isl/bound_test.sh.in deleted file mode 100755 index e3fc037..0000000 --- a/cloog-0.17.0/isl/bound_test.sh.in +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh - -EXEEXT=@EXEEXT@ - -BOUND_TESTS="\ - basicLinear2.pwqp \ - basicLinear.pwqp \ - basicTestParameterPosNeg.pwqp \ - basicTest.pwqp \ - devos.pwqp \ - equality1.pwqp \ - equality2.pwqp \ - equality3.pwqp \ - equality4.pwqp \ - equality5.pwqp \ - faddeev.pwqp \ - linearExample.pwqp \ - neg.pwqp \ - philippe3vars3pars.pwqp \ - philippe3vars.pwqp \ - philippeNeg.pwqp \ - philippePolynomialCoeff1P.pwqp \ - philippePolynomialCoeff.pwqp \ - philippe.pwqp \ - product.pwqp \ - split.pwqp \ - test3Deg3Var.pwqp \ - toplas.pwqp \ - unexpanded.pwqp" - -for i in $BOUND_TESTS; do - echo $i; - ./isl_bound$EXEEXT -T --bound=bernstein < $srcdir/test_inputs/$i || exit - ./isl_bound$EXEEXT -T --bound=range < $srcdir/test_inputs/$i || exit -done diff --git a/cloog-0.17.0/isl/cat.c b/cloog-0.17.0/isl/cat.c deleted file mode 100644 index 6313142..0000000 --- a/cloog-0.17.0/isl/cat.c +++ /dev/null @@ -1,58 +0,0 @@ -#include -#include -#include -#include -#include - -struct isl_arg_choice cat_format[] = { - {"isl", ISL_FORMAT_ISL}, - {"omega", ISL_FORMAT_OMEGA}, - {"polylib", ISL_FORMAT_POLYLIB}, - {"ext-polylib", ISL_FORMAT_EXT_POLYLIB}, - {"latex", ISL_FORMAT_LATEX}, - {0} -}; - -struct cat_options { - struct isl_options *isl; - unsigned format; -}; - -ISL_ARGS_START(struct cat_options, cat_options_args) -ISL_ARG_CHILD(struct cat_options, isl, "isl", &isl_options_args, "isl options") -ISL_ARG_CHOICE(struct cat_options, format, 0, "format", \ - cat_format, ISL_FORMAT_ISL, "output format") -ISL_ARGS_END - -ISL_ARG_DEF(cat_options, struct cat_options, cat_options_args) - -int main(int argc, char **argv) -{ - struct isl_ctx *ctx; - struct isl_stream *s; - struct isl_obj obj; - struct cat_options *options; - isl_printer *p; - - options = cat_options_new_with_defaults(); - assert(options); - argc = cat_options_parse(options, argc, argv, ISL_ARG_ALL); - - ctx = isl_ctx_alloc_with_options(&cat_options_args, options); - - s = isl_stream_new_file(ctx, stdin); - obj = isl_stream_read_obj(s); - isl_stream_free(s); - - p = isl_printer_to_file(ctx, stdout); - p = isl_printer_set_output_format(p, options->format); - p = obj.type->print(p, obj.v); - p = isl_printer_end_line(p); - isl_printer_free(p); - - obj.type->free(obj.v); - - isl_ctx_free(ctx); - - return 0; -} diff --git a/cloog-0.17.0/isl/closure.c b/cloog-0.17.0/isl/closure.c deleted file mode 100644 index a0faa15..0000000 --- a/cloog-0.17.0/isl/closure.c +++ /dev/null @@ -1,34 +0,0 @@ -#include -#include -#include - -int main(int argc, char **argv) -{ - struct isl_ctx *ctx; - struct isl_map *map; - struct isl_options *options; - int exact; - - options = isl_options_new_with_defaults(); - assert(options); - argc = isl_options_parse(options, argc, argv, ISL_ARG_ALL); - - ctx = isl_ctx_alloc_with_options(&isl_options_args, options); - - map = isl_map_read_from_file(ctx, stdin); - map = isl_map_transitive_closure(map, &exact); - if (!exact) - printf("# NOT exact\n"); - isl_map_print(map, stdout, 0, ISL_FORMAT_ISL); - printf("\n"); - map = isl_map_compute_divs(map); - map = isl_map_coalesce(map); - printf("# coalesced\n"); - isl_map_print(map, stdout, 0, ISL_FORMAT_ISL); - printf("\n"); - isl_map_free(map); - - isl_ctx_free(ctx); - - return 0; -} diff --git a/cloog-0.17.0/isl/config.guess b/cloog-0.17.0/isl/config.guess deleted file mode 100755 index c2246a4..0000000 --- a/cloog-0.17.0/isl/config.guess +++ /dev/null @@ -1,1502 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -# Free Software Foundation, Inc. - -timestamp='2009-12-30' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/cloog-0.17.0/isl/config.sub b/cloog-0.17.0/isl/config.sub deleted file mode 100755 index c2d1257..0000000 --- a/cloog-0.17.0/isl/config.sub +++ /dev/null @@ -1,1714 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -# Free Software Foundation, Inc. - -timestamp='2010-01-22' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nios | nios2 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12 | picochip) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile-* | tilegx-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze) - basic_machine=microblaze-xilinx - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - # This must be matched before tile*. - tilegx*) - basic_machine=tilegx-unknown - os=-linux-gnu - ;; - tile*) - basic_machine=tile-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -nacl*) - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/cloog-0.17.0/isl/configure b/cloog-0.17.0/isl/configure deleted file mode 100755 index b397e19..0000000 --- a/cloog-0.17.0/isl/configure +++ /dev/null @@ -1,20410 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.67 for isl 0.08. -# -# Report bugs to . -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: isl-development@googlegroups.com about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$lt_ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` - ;; -esac - -ECHO=${lt_ECHO-echo} -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat <<_LT_EOF -$* -_LT_EOF - exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$lt_ECHO"; then - if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if { echo_test_string=`eval $cmd`; } 2>/dev/null && - { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null - then - break - fi - done - fi - - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : - else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$ECHO" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - ECHO='print -r' - elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - ECHO='printf %s\n' - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - ECHO="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - ECHO=echo - fi - fi - fi - fi - fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -lt_ECHO=$ECHO -if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" -fi - - - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='isl' -PACKAGE_TARNAME='isl' -PACKAGE_VERSION='0.08' -PACKAGE_STRING='isl 0.08' -PACKAGE_BUGREPORT='isl-development@googlegroups.com' -PACKAGE_URL='' - -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -GIT_HEAD_VERSION -GIT_HEAD -GIT_HEAD_ID -pkgconfig_libfile -pkgconfig_libdir -WARNING_FLAGS -HAVE_CLANG_FALSE -HAVE_CLANG_TRUE -llvm_config_found -CLANG_LIBS -CLANG_LDFLAGS -CLANG_CXXFLAGS -HAVE_PIPLIB_FALSE -HAVE_PIPLIB_TRUE -PIPLIB_LIBS -PIPLIB_LDFLAGS -PIPLIB_CPPFLAGS -NEED_GET_MEMORY_FUNCTIONS_FALSE -NEED_GET_MEMORY_FUNCTIONS_TRUE -GMP_LIBS -GMP_LDFLAGS -GMP_CPPFLAGS -GENERATE_DOC_FALSE -GENERATE_DOC_TRUE -POD2HTML -PDFLATEX -PERL -CXXCPP -CPP -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -lt_ECHO -RANLIB -AR -OBJDUMP -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -LIBTOOL -PRTDIAG -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -am__fastdepCXX_FALSE -am__fastdepCXX_TRUE -CXXDEPMODE -ac_ct_CXX -CXXFLAGS -CXX -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -versioninfo -AM_BACKSLASH -AM_DEFAULT_VERBOSITY -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_silent_rules -enable_dependency_tracking -enable_portable_binary -with_gcc_arch -enable_shared -enable_static -with_pic -enable_fast_install -with_gnu_ld -enable_libtool_lock -with_gmp -with_gmp_prefix -with_gmp_exec_prefix -with_gmp_builddir -with_piplib -with_piplib_prefix -with_piplib_exec_prefix -with_piplib_builddir -with_clang -with_clang_prefix -with_clang_exec_prefix -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CXX -CXXFLAGS -CCC -CPP -CXXCPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures isl 0.08 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/isl] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of isl 0.08:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-silent-rules less verbose build output (undo: `make V=1') - --disable-silent-rules verbose build output (undo: `make V=0') - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --enable-portable-binary - disable compiler optimizations that would produce - unportable binaries - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-gcc-arch= use architecture for gcc -march/-mtune, - instead of guessing - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-gmp=system|build Which gmp to use [default=system] - --with-gmp-prefix=DIR Prefix of gmp installation - --with-gmp-exec-prefix=DIR - Exec prefix of gmp installation - --with-gmp-builddir=DIR Location of gmp builddir - --with-piplib=no|system|build - Which piplib to use [default=no] - --with-piplib-prefix=DIR - Prefix of piplib installation - --with-piplib-exec-prefix=DIR - Exec prefix of piplib installation - --with-piplib-builddir=DIR - Location of piplib builddir - --with-clang=system|no Which clang to use [default=no] - --with-clang-prefix=DIR Prefix of clang installation - --with-clang-exec-prefix=DIR - Exec prefix of clang installation - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CPP C preprocessor - CXXCPP C++ preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -isl configure 0.08 -generated by GNU Autoconf 2.67 - -Copyright (C) 2010 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_compile - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_func - -# ac_fn_cxx_try_cpp LINENO -# ------------------------ -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_cpp - -# ac_fn_cxx_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_link - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_type - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - echo >>conftest.val; read $3 &5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -#ifndef $as_decl_name -#ifdef __cplusplus - (void) $as_decl_use; -#else - (void) $as_decl_name; -#endif -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_decl - -# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES -# ---------------------------------------------------- -# Tries to find if the field MEMBER exists in type AGGR, after including -# INCLUDES, setting cache variable VAR accordingly. -ac_fn_c_check_member () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 -$as_echo_n "checking for $2.$3... " >&6; } -if eval "test \"\${$4+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (sizeof ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - eval "$4=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$4 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_member - -# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES -# --------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_cxx_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval "test \"\${$3+set}\"" = set; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ----------------------------------------------- ## -## Report this to isl-development@googlegroups.com ## -## ----------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_cxx_check_header_mongrel -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by isl $as_me 0.08, which was -generated by GNU Autoconf 2.67. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5 ; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_aux_dir= -for ac_dir in . "$srcdir"/.; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in . \"$srcdir\"/." "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - -am__api_version='1.11' - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error $? "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='isl' - VERSION='0.08' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - -# Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : - enableval=$enable_silent_rules; -fi - -case $enable_silent_rules in -yes) AM_DEFAULT_VERBOSITY=0;; -no) AM_DEFAULT_VERBOSITY=1;; -*) AM_DEFAULT_VERBOSITY=0;; -esac -AM_BACKSLASH='\' - - -versioninfo=8:0:0 - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5 ; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5 ; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5 ; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5 ; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5 ; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CXX" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 -$as_echo_n "checking for C compiler vendor... " >&6; } -if test "${ax_cv_c_compiler_vendor+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ax_cv_c_compiler_vendor=unknown - # note: don't check for gcc first since some other compilers define __GNUC__ - for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ clang:__clang__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do - vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - -#if !($vencpp) - thisisanerror; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_compiler_vendor=`echo $ventest | cut -d: -f1`; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5 -$as_echo "$ax_cv_c_compiler_vendor" >&6; } - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - - - - - - -# Check whether --enable-portable-binary was given. -if test "${enable_portable_binary+set}" = set; then : - enableval=$enable_portable_binary; acx_maxopt_portable=$withval -else - acx_maxopt_portable=no -fi - - -# Try to determine "good" native compiler flags if none specified via CFLAGS -if test "$ac_test_CFLAGS" != "set"; then - CFLAGS="" - case $ax_cv_c_compiler_vendor in - dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" - if test "x$acx_maxopt_portable" = xno; then - CFLAGS="$CFLAGS -arch host" - fi;; - - sun) CFLAGS="-native -fast -xO5 -dalign" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS -xarch=generic" - fi;; - - hp) CFLAGS="+Oall +Optrs_ansi +DSnative" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS +DAportable" - fi;; - - ibm) if test "x$acx_maxopt_portable" = xno; then - xlc_opt="-qarch=auto -qtune=auto" - else - xlc_opt="-qtune=auto" - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $xlc_opt" >&5 -$as_echo_n "checking whether C compiler accepts $xlc_opt... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$xlc_opt" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$xlc_opt" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="-O3 -qansialias -w $xlc_opt" -else - CFLAGS="-O3 -qansialias -w" - echo "******************************************************" - echo "* You seem to have the IBM C compiler. It is *" - echo "* recommended for best performance that you use: *" - echo "* *" - echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" - echo "* ^^^ ^^^ *" - echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" - echo "* CPU you have. (Set the CFLAGS environment var. *" - echo "* and re-run configure.) For more info, man cc. *" - echo "******************************************************" -fi - - ;; - - intel) CFLAGS="-O3 -ansi_alias" - if test "x$acx_maxopt_portable" = xno; then - icc_archflag=unknown - icc_flags="" - case $host_cpu in - i686*|x86_64*) - # icc accepts gcc assembly syntax, so these should work: - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 -$as_echo_n "checking for x86 cpuid 0 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_0+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 -$as_echo_n "checking for x86 cpuid 1 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_1+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_1=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *6a?:*[234]:*:*|*6[789b]?:*:*:*) icc_flags="-xK";; - *f3[347]:*:*:*|*f41347:*:*:*) icc_flags="-xP -xN -xW -xK";; - *f??:*:*:*) icc_flags="-xN -xW -xK";; - esac ;; - esac ;; - esac - if test "x$icc_flags" != x; then - for flag in $icc_flags; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 -$as_echo_n "checking whether C compiler accepts $flag... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$flag" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - icc_archflag=$flag; break -else - : -fi - - done - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icc architecture flag" >&5 -$as_echo_n "checking for icc architecture flag... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $icc_archflag" >&5 -$as_echo "$icc_archflag" >&6; } - if test "x$icc_archflag" != xunknown; then - CFLAGS="$CFLAGS $icc_archflag" - fi - fi - ;; - - gnu) - # default optimization flags for gcc on all systems - CFLAGS="-O3 -fomit-frame-pointer" - - # -malign-double for x86 systems - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -malign-double" >&5 -$as_echo_n "checking whether C compiler accepts -malign-double... " >&6; } -if test "${ax_cv_c_flags__malign_double+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ax_save_FLAGS=$CFLAGS - CFLAGS="-malign-double" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_flags__malign_double=yes -else - ax_cv_c_flags__malign_double=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -fi - -eval ax_check_compiler_flags=$ax_cv_c_flags__malign_double -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="$CFLAGS -malign-double" -else - : -fi - - - # -fstrict-aliasing for gcc-2.95+ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstrict-aliasing" >&5 -$as_echo_n "checking whether C compiler accepts -fstrict-aliasing... " >&6; } -if test "${ax_cv_c_flags__fstrict_aliasing+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ax_save_FLAGS=$CFLAGS - CFLAGS="-fstrict-aliasing" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_flags__fstrict_aliasing=yes -else - ax_cv_c_flags__fstrict_aliasing=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -fi - -eval ax_check_compiler_flags=$ax_cv_c_flags__fstrict_aliasing -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="$CFLAGS -fstrict-aliasing" -else - : -fi - - - # note that we enable "unsafe" fp optimization with other compilers, too - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -ffast-math" >&5 -$as_echo_n "checking whether C compiler accepts -ffast-math... " >&6; } -if test "${ax_cv_c_flags__ffast_math+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ax_save_FLAGS=$CFLAGS - CFLAGS="-ffast-math" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_flags__ffast_math=yes -else - ax_cv_c_flags__ffast_math=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -fi - -eval ax_check_compiler_flags=$ax_cv_c_flags__ffast_math -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - CFLAGS="$CFLAGS -ffast-math" -else - : -fi - - - - - - -# Check whether --with-gcc-arch was given. -if test "${with_gcc_arch+set}" = set; then : - withval=$with_gcc_arch; ax_gcc_arch=$withval -else - ax_gcc_arch=yes -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 -$as_echo_n "checking for gcc architecture flag... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } -if test "${ax_cv_gcc_archflag+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -ax_cv_gcc_archflag="unknown" - -if test "$GCC" = yes; then - -if test "x$ax_gcc_arch" = xyes; then -ax_gcc_arch="" -if test "$cross_compiling" = no; then -case $host_cpu in - i[3456]86*|x86_64*) # use cpuid codes, in part from x86info-1.7 by D. Jones - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0 output" >&5 -$as_echo_n "checking for x86 cpuid 0 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_0+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 1 output" >&5 -$as_echo_n "checking for x86 cpuid 1 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_1+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_1=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_1=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_1=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_1" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_1" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - case $ax_cv_gcc_x86_cpuid_0 in - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *5[48]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; - *5??:*:*:*) ax_gcc_arch=pentium ;; - *6[3456]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[01]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[234]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6[9d]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; - *6[78b]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6??:*:*:*) ax_gcc_arch=pentiumpro ;; - *f3[347]:*:*:*|*f41347:*:*:*) - case $host_cpu in - x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; - *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; - esac ;; - *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; - esac ;; - *:68747541:*:*) # AMD - case $ax_cv_gcc_x86_cpuid_1 in - *5[67]?:*:*:*) ax_gcc_arch=k6 ;; - *5[8d]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; - *5[9]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; - *60?:*:*:*) ax_gcc_arch=k7 ;; - *6[12]?:*:*:*) ax_gcc_arch="athlon k7" ;; - *6[34]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; - *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; - *6[68a]?:*:*:*) - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid 0x80000006 output" >&5 -$as_echo_n "checking for x86 cpuid 0x80000006 output... " >&6; } -if test "${ax_cv_gcc_x86_cpuid_0x80000006+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ax_cv_gcc_x86_cpuid_0x80000006=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - int op = 0x80000006, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ax_cv_gcc_x86_cpuid_0x80000006=`cat conftest_cpuid`; rm -f conftest_cpuid -else - ax_cv_gcc_x86_cpuid_0x80000006=unknown; rm -f conftest_cpuid -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_x86_cpuid_0x80000006" >&5 -$as_echo "$ax_cv_gcc_x86_cpuid_0x80000006" >&6; } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - # L2 cache size - case $ax_cv_gcc_x86_cpuid_0x80000006 in - *:*:*[1-9a-f]??????:*) # (L2 = ecx >> 16) >= 256 - ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; - *) ax_gcc_arch="athlon-4 athlon k7" ;; - esac ;; - *f[4cef8b]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; - *f5?:*:*:*) ax_gcc_arch="opteron k8" ;; - *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; - *f??:*:*:*) ax_gcc_arch="k8" ;; - esac ;; - *:746e6543:*:*) # IDT - case $ax_cv_gcc_x86_cpuid_1 in - *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; - *58?:*:*:*) ax_gcc_arch=winchip2 ;; - *6[78]?:*:*:*) ax_gcc_arch=c3 ;; - *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; - esac ;; - esac - if test x"$ax_gcc_arch" = x; then # fallback - case $host_cpu in - i586*) ax_gcc_arch=pentium ;; - i686*) ax_gcc_arch=pentiumpro ;; - esac - fi - ;; - - sparc*) - # Extract the first word of "prtdiag", so it can be a program name with args. -set dummy prtdiag; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PRTDIAG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $PRTDIAG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PRTDIAG="$PRTDIAG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy="$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PRTDIAG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_PRTDIAG" && ac_cv_path_PRTDIAG="prtdiag" - ;; -esac -fi -PRTDIAG=$ac_cv_path_PRTDIAG -if test -n "$PRTDIAG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRTDIAG" >&5 -$as_echo "$PRTDIAG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` - cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters` - case $cputype in - *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; - *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; - *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; - *supersparc*|*tms390z5[05]*) ax_gcc_arch="supersparc v8" ;; - *hypersparc*|*rt62[056]*) ax_gcc_arch="hypersparc v8" ;; - *cypress*) ax_gcc_arch=cypress ;; - esac ;; - - alphaev5) ax_gcc_arch=ev5 ;; - alphaev56) ax_gcc_arch=ev56 ;; - alphapca56) ax_gcc_arch="pca56 ev56" ;; - alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; - alphaev6) ax_gcc_arch=ev6 ;; - alphaev67) ax_gcc_arch=ev67 ;; - alphaev68) ax_gcc_arch="ev68 ev67" ;; - alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; - alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; - alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; - - powerpc*) - cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` - cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'` - case $cputype in - *750*) ax_gcc_arch="750 G3" ;; - *740[0-9]*) ax_gcc_arch="$cputype 7400 G4" ;; - *74[4-5][0-9]*) ax_gcc_arch="$cputype 7450 G4" ;; - *74[0-9][0-9]*) ax_gcc_arch="$cputype G4" ;; - *970*) ax_gcc_arch="970 G5 power4";; - *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; - *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; - 603ev|8240) ax_gcc_arch="$cputype 603e 603";; - *) ax_gcc_arch=$cputype ;; - esac - ax_gcc_arch="$ax_gcc_arch powerpc" - ;; -esac -fi # not cross-compiling -fi # guess arch - -if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then -for arch in $ax_gcc_arch; do - if test "x$acx_maxopt_portable" = xyes; then # if we require portable code - flags="-mtune=$arch" - # -mcpu=$arch and m$arch generate nonportable code on every arch except - # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. - case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac - else - flags="-march=$arch -mcpu=$arch -m$arch" - fi - for flag in $flags; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 -$as_echo_n "checking whether C compiler accepts $flag... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$flag" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$flag" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - ax_cv_gcc_archflag=$flag; break -else - : -fi - - done - test "x$ax_cv_gcc_archflag" = xunknown || break -done -fi - -fi # $GCC=yes - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc architecture flag" >&5 -$as_echo_n "checking for gcc architecture flag... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_archflag" >&5 -$as_echo "$ax_cv_gcc_archflag" >&6; } -if test "x$ax_cv_gcc_archflag" = xunknown; then - : -else - CFLAGS="$CFLAGS $ax_cv_gcc_archflag" -fi - - - # drop to -O1 for gcc 4.2 - $CC --version | - sed -e 's/.* \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1 \2/' | - (read major minor - if test $major -eq 4 -a $minor -eq 2; then - exit 0 - fi - exit 1 - ) && CFLAGS="-O1" - ;; - esac - - if test -z "$CFLAGS"; then - echo "" - echo "********************************************************" - echo "* WARNING: Don't know the best CFLAGS for this system *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" - echo "********************************************************" - echo "" - CFLAGS="-O3" - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 -$as_echo_n "checking whether C compiler accepts $CFLAGS... " >&6; } -ax_save_FLAGS=$CFLAGS - CFLAGS="$CFLAGS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=yes -else - eval `$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_save_FLAGS -eval ax_check_compiler_flags=$`$as_echo "ax_cv_c_flags_$CFLAGS" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 -$as_echo "$ax_check_compiler_flags" >&6; } -if test "x$ax_check_compiler_flags" = xyes; then - : -else - - echo "" - echo "********************************************************" - echo "* WARNING: The guessed CFLAGS don't seem to work with *" - echo "* your compiler. *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "********************************************************" - echo "" - CFLAGS="" - -fi - - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports function __attribute__((__warn_unused_result__))" >&5 -$as_echo_n "checking whether the compiler supports function __attribute__((__warn_unused_result__))... " >&6; } -if test "${ax_cv_gcc_warn_unused_result+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -__attribute__((__warn_unused_result__)) - int f(int i) { return i; } -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_gcc_warn_unused_result=yes -else - ax_cv_gcc_warn_unused_result=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_gcc_warn_unused_result" >&5 -$as_echo "$ax_cv_gcc_warn_unused_result" >&6; } - if test "$ax_cv_gcc_warn_unused_result" = yes; then - -$as_echo "#define GCC_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))" >>confdefs.h - - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__" >&5 -$as_echo_n "checking for __attribute__... " >&6; } -if test "${ax_cv___attribute__+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - static void foo(void) __attribute__ ((unused)); - static void - foo(void) { - exit(1); - } - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv___attribute__=yes -else - ax_cv___attribute__=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv___attribute__" >&5 -$as_echo "$ax_cv___attribute__" >&6; } - if test "$ax_cv___attribute__" = "yes"; then - -$as_echo "#define HAVE___ATTRIBUTE__ 1" >>confdefs.h - - fi - - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.2.6b' -macro_revision='1.3017' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test "${lt_cv_path_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$ac_tool_prefix"; then - for ac_prog in "dumpbin -symbols" "link -dump -symbols" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in "dumpbin -symbols" "link -dump -symbols" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if test "${lt_cv_nm_interface+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:6351: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:6354: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:6357: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - - - - - - - - - - - - - - - - - - - - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 7562 "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if test "${lt_cv_apple_cc_single_mod+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5 ; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CXX" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -_lt_caught_CXX_error=yes; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -else - _lt_caught_CXX_error=yes -fi - - - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if test "${lt_cv_objdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - - - - - - - - - - - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag=' -fno-builtin' - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9618: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:9622: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl*) - # IBM XL C 8.0/Fortran 10.1 on PPC - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 -$as_echo "$lt_prog_compiler_pic" >&6; } - - - - - - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9957: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:9961: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test "${lt_cv_prog_compiler_static_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:10062: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:10066: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:10117: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:10121: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu) - link_all_deplibs=no - ;; - esac - - ld_shlibs=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld='-rpath $libdir' - archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - link_all_deplibs=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - whole_archive_flag_spec='' - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo(void) {} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - archive_cmds_need_lc=no - else - archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 -$as_echo "$archive_cmds_need_lc" >&6; } - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line 12501 "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line 12597 "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -compiler_needs_object_CXX=no -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_direct_absolute_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_flag_spec_ld_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -inherit_rpath_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - - # save warnings/boilerplate of simple test code - ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - - ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - compiler=$CC - compiler_CXX=$CC - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' - else - lt_prog_compiler_no_builtin_flag_CXX= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - ld_shlibs_CXX=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - file_list_spec_CXX='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec_CXX='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - darwin* | rhapsody*) - - - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - whole_archive_flag_spec_CXX='' - link_all_deplibs_CXX=yes - allow_undefined_flag_CXX="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - if test "$lt_cv_apple_cc_single_mod" != "yes"; then - archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi - - else - ld_shlibs_CXX=no - fi - - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - freebsd[12]*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - ld_shlibs_CXX=no - ;; - - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - - gnu*) - ;; - - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - interix[3-9]*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - inherit_rpath_CXX=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [1-5]* | *pgcpp\ [1-5]*) - prelink_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' - old_archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ - $RANLIB $oldlib' - archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 will use weak symbols - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - xl*) - # IBM XL 8.0 on PPC, with GNU ld - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - hardcode_libdir_flag_spec_CXX='-R$libdir' - whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object_CXX=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - ld_shlibs_CXX=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - hardcode_direct_absolute_CXX=yes - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=echo - else - ld_shlibs_CXX=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - case $host in - osf3*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - ;; - *) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - ;; - esac - - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - fi - - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='${wl}-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_CXX='${wl}-z,text' - allow_undefined_flag_CXX='${wl}-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } - test "$ld_shlibs_CXX" = no && can_build_shared=no - - GCC_CXX="$GXX" - LD_CXX="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - # Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= - -cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF - -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$RM -f confest.$objext - -# PORTME: override above test on systems where it is broken -case $host_os in -interix[3-9]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac - - -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - compiler_lib_search_dirs_CXX= -if test -n "${compiler_lib_search_path_CXX}"; then - compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } - - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic_CXX='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix[4-9]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - xlc* | xlC*) - # IBM XL 8.0 on PPC - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-qpic' - lt_prog_compiler_static_CXX='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5 -$as_echo "$lt_prog_compiler_pic_CXX" >&6; } - - - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14553: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:14557: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works_CXX=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works_CXX=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works_CXX=yes - fi - else - lt_cv_prog_compiler_static_works_CXX=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then - : -else - lt_prog_compiler_static_CXX= -fi - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14652: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:14656: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14704: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:14708: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix[4-9]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - ;; - linux* | k*bsd*-gnu) - link_all_deplibs_CXX=no - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -with_gnu_ld_CXX=$with_gnu_ld - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - archive_cmds_need_lc_CXX=no - else - archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5 -$as_echo "$archive_cmds_need_lc_CXX" >&6; } - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test "X$hardcode_automatic_CXX" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } - -if test "$hardcode_action_CXX" = relink || - test "$inherit_rpath_CXX" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - - fi # test -n "$compiler" - - CC=$lt_save_CC - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - - -# Extract the first word of "perl", so it can be a program name with args. -set dummy perl; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_PERL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PERL"; then - ac_cv_prog_PERL="$PERL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PERL="perl" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PERL=$ac_cv_prog_PERL -if test -n "$PERL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 -$as_echo "$PERL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -# Extract the first word of "pdflatex", so it can be a program name with args. -set dummy pdflatex; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_PDFLATEX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PDFLATEX"; then - ac_cv_prog_PDFLATEX="$PDFLATEX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PDFLATEX="pdflatex" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PDFLATEX=$ac_cv_prog_PDFLATEX -if test -n "$PDFLATEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDFLATEX" >&5 -$as_echo "$PDFLATEX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -# Extract the first word of "pod2html", so it can be a program name with args. -set dummy pod2html; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_POD2HTML+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$POD2HTML"; then - ac_cv_prog_POD2HTML="$POD2HTML" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_POD2HTML="pod2html" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -POD2HTML=$ac_cv_prog_POD2HTML -if test -n "$POD2HTML"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POD2HTML" >&5 -$as_echo "$POD2HTML" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - if test -n "$PERL" -a -n "$PDFLATEX" -a -n "$POD2HTML"; then - GENERATE_DOC_TRUE= - GENERATE_DOC_FALSE='#' -else - GENERATE_DOC_TRUE='#' - GENERATE_DOC_FALSE= -fi - - -# ------ AX CREATE STDINT H ------------------------------------- -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint types" >&5 -$as_echo_n "checking for stdint types... " >&6; } -ac_stdint_h=`echo include/isl/stdint.h` -# try to shortcircuit - if the default include path of the compiler -# can find a "stdint.h" header then we assume that all compilers can. -if test "${ac_cv_header_stdint_t+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS="" -old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS="" -old_CFLAGS="$CFLAGS" ; CFLAGS="" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -int_least32_t v = 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_stdint_result="(assuming C99 compatible system)" - ac_cv_header_stdint_t="stdint.h"; -else - ac_cv_header_stdint_t="" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then -CFLAGS="-std=c99" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -int_least32_t v = 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: your GCC compiler has a defunct stdint.h for its default-mode" >&5 -$as_echo "$as_me: WARNING: your GCC compiler has a defunct stdint.h for its default-mode" >&2;} -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -CXXFLAGS="$old_CXXFLAGS" -CPPFLAGS="$old_CPPFLAGS" -CFLAGS="$old_CFLAGS" -fi - - -v="... $ac_cv_header_stdint_h" -if test "$ac_stdint_h" = "stdint.h" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (are you sure you want them in ./stdint.h?)" >&5 -$as_echo "(are you sure you want them in ./stdint.h?)" >&6; } -elif test "$ac_stdint_h" = "inttypes.h" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (are you sure you want them in ./inttypes.h?)" >&5 -$as_echo "(are you sure you want them in ./inttypes.h?)" >&6; } -elif test "_$ac_cv_header_stdint_t" = "_" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (putting them into $ac_stdint_h)$v" >&5 -$as_echo "(putting them into $ac_stdint_h)$v" >&6; } -else - ac_cv_header_stdint="$ac_cv_header_stdint_t" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint (shortcircuit)" >&5 -$as_echo "$ac_cv_header_stdint (shortcircuit)" >&6; } -fi - -if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit.. - - -inttype_headers=`echo | sed -e 's/,/ /g'` - -ac_cv_stdint_result="(no helpful system typedefs seen)" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uintptr_t" >&5 -$as_echo_n "checking for stdint uintptr_t... " >&6; } -if test "${ac_cv_header_stdint_x+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 -$as_echo "(..)" >&6; } - for i in stdint.h inttypes.h sys/inttypes.h $inttype_headers - do - unset ac_cv_type_uintptr_t - unset ac_cv_type_uint64_t - ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#include <$i> -" -if test "x$ac_cv_type_uintptr_t" = x""yes; then : - ac_cv_header_stdint_x=$i -else - continue -fi - - ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i> -" -if test "x$ac_cv_type_uint64_t" = x""yes; then : - and64="/uint64_t" -else - and64="" -fi - - ac_cv_stdint_result="(seen uintptr_t$and64 in $i)" - break - done - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uintptr_t" >&5 -$as_echo_n "checking for stdint uintptr_t... " >&6; } - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_x" >&5 -$as_echo "$ac_cv_header_stdint_x" >&6; } - - -if test "_$ac_cv_header_stdint_x" = "_" ; then - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uint32_t" >&5 -$as_echo_n "checking for stdint uint32_t... " >&6; } -if test "${ac_cv_header_stdint_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 -$as_echo "(..)" >&6; } - for i in inttypes.h sys/inttypes.h stdint.h $inttype_headers - do - unset ac_cv_type_uint32_t - unset ac_cv_type_uint64_t - ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "#include <$i> -" -if test "x$ac_cv_type_uint32_t" = x""yes; then : - ac_cv_header_stdint_o=$i -else - continue -fi - - ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i> -" -if test "x$ac_cv_type_uint64_t" = x""yes; then : - and64="/uint64_t" -else - and64="" -fi - - ac_cv_stdint_result="(seen uint32_t$and64 in $i)" - break - break; - done - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uint32_t" >&5 -$as_echo_n "checking for stdint uint32_t... " >&6; } - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_o" >&5 -$as_echo "$ac_cv_header_stdint_o" >&6; } - -fi - -if test "_$ac_cv_header_stdint_x" = "_" ; then -if test "_$ac_cv_header_stdint_o" = "_" ; then - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint u_int32_t" >&5 -$as_echo_n "checking for stdint u_int32_t... " >&6; } -if test "${ac_cv_header_stdint_u+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 -$as_echo "(..)" >&6; } - for i in sys/types.h inttypes.h sys/inttypes.h $inttype_headers ; do - unset ac_cv_type_u_int32_t - unset ac_cv_type_u_int64_t - ac_fn_c_check_type "$LINENO" "u_int32_t" "ac_cv_type_u_int32_t" "#include <$i> -" -if test "x$ac_cv_type_u_int32_t" = x""yes; then : - ac_cv_header_stdint_u=$i -else - continue -fi - - ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "#include<$i> -" -if test "x$ac_cv_type_u_int64_t" = x""yes; then : - and64="/u_int64_t" -else - and64="" -fi - - ac_cv_stdint_result="(seen u_int32_t$and64 in $i)" - break - break; - done - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint u_int32_t" >&5 -$as_echo_n "checking for stdint u_int32_t... " >&6; } - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdint_u" >&5 -$as_echo "$ac_cv_header_stdint_u" >&6; } - -fi fi - -if test "_$ac_cv_header_stdint_x" = "_" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint datatype model" >&5 -$as_echo_n "checking for stdint datatype model... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: (..)" >&5 -$as_echo "(..)" >&6; } - - # The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 -$as_echo_n "checking size of char... " >&6; } -if test "${ac_cv_sizeof_char+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_char" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (char) -See \`config.log' for more details" "$LINENO" 5 ; } - else - ac_cv_sizeof_char=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 -$as_echo "$ac_cv_sizeof_char" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_CHAR $ac_cv_sizeof_char -_ACEOF - - - # The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 -$as_echo_n "checking size of short... " >&6; } -if test "${ac_cv_sizeof_short+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_short" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (short) -See \`config.log' for more details" "$LINENO" 5 ; } - else - ac_cv_sizeof_short=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 -$as_echo "$ac_cv_sizeof_short" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_SHORT $ac_cv_sizeof_short -_ACEOF - - - # The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 -$as_echo_n "checking size of int... " >&6; } -if test "${ac_cv_sizeof_int+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_int" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (int) -See \`config.log' for more details" "$LINENO" 5 ; } - else - ac_cv_sizeof_int=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 -$as_echo "$ac_cv_sizeof_int" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT $ac_cv_sizeof_int -_ACEOF - - - # The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 -$as_echo_n "checking size of long... " >&6; } -if test "${ac_cv_sizeof_long+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (long) -See \`config.log' for more details" "$LINENO" 5 ; } - else - ac_cv_sizeof_long=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 -$as_echo "$ac_cv_sizeof_long" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG $ac_cv_sizeof_long -_ACEOF - - - # The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5 -$as_echo_n "checking size of void*... " >&6; } -if test "${ac_cv_sizeof_voidp+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_voidp" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (void*) -See \`config.log' for more details" "$LINENO" 5 ; } - else - ac_cv_sizeof_voidp=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5 -$as_echo "$ac_cv_sizeof_voidp" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_VOIDP $ac_cv_sizeof_voidp -_ACEOF - - - ac_cv_char_data_model="" - ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char" - ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short" - ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int" - ac_cv_long_data_model="" - ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int" - ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long" - ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking data model" >&5 -$as_echo_n "checking data model... " >&6; } - case "$ac_cv_char_data_model/$ac_cv_long_data_model" in - 122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;; - 122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;; - 122/*) ac_cv_data_model="i16" ; n="unusual int16 model" ;; - 124/444) ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;; - 124/488) ac_cv_data_model="LP64" ; n="standard 64bit unixish" ;; - 124/448) ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;; - 124/*) ac_cv_data_model="i32" ; n="unusual int32 model" ;; - 128/888) ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;; - 128/*) ac_cv_data_model="i64" ; n="unusual int64 model" ;; - 222/*2) ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;; - 333/*3) ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;; - 444/*4) ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;; - 666/*6) ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;; - 888/*8) ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;; - 222/*|333/*|444/*|666/*|888/*) : - ac_cv_data_model="iDSP" ; n="unusual dsptype" ;; - *) ac_cv_data_model="none" ; n="very unusual model" ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_data_model ($ac_cv_long_data_model, $n)" >&5 -$as_echo "$ac_cv_data_model ($ac_cv_long_data_model, $n)" >&6; } - -fi - -if test "_$ac_cv_header_stdint_x" != "_" ; then - ac_cv_header_stdint="$ac_cv_header_stdint_x" -elif test "_$ac_cv_header_stdint_o" != "_" ; then - ac_cv_header_stdint="$ac_cv_header_stdint_o" -elif test "_$ac_cv_header_stdint_u" != "_" ; then - ac_cv_header_stdint="$ac_cv_header_stdint_u" -else - ac_cv_header_stdint="stddef.h" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for extra inttypes in chosen header" >&5 -$as_echo_n "checking for extra inttypes in chosen header... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ($ac_cv_header_stdint)" >&5 -$as_echo "($ac_cv_header_stdint)" >&6; } -unset ac_cv_type_int_least32_t -unset ac_cv_type_int_fast32_t -ac_fn_c_check_type "$LINENO" "int_least32_t" "ac_cv_type_int_least32_t" "#include <$ac_cv_header_stdint> -" -if test "x$ac_cv_type_int_least32_t" = x""yes; then : - -fi - -ac_fn_c_check_type "$LINENO" "int_fast32_t" "ac_cv_type_int_fast32_t" "#include<$ac_cv_header_stdint> -" -if test "x$ac_cv_type_int_fast32_t" = x""yes; then : - -fi - -ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "#include <$ac_cv_header_stdint> -" -if test "x$ac_cv_type_intmax_t" = x""yes; then : - -fi - - -fi # shortcircut to system "stdint.h" -# ------------------ PREPARE VARIABLES ------------------------------ -if test "$GCC" = "yes" ; then -ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1` -else -ac_cv_stdint_message="using $CC" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&5 -$as_echo "make use of $ac_cv_header_stdint in $ac_stdint_h $ac_cv_stdint_result" >&6; } - -# ----------------- DONE inttypes.h checks START header ------------- -ac_config_commands="$ac_config_commands $ac_stdint_h" - - - - - - -# Check whether --with-gmp was given. -if test "${with_gmp+set}" = set; then : - withval=$with_gmp; -fi - -case "system" in -system|build) - -# Check whether --with-gmp_prefix was given. -if test "${with_gmp_prefix+set}" = set; then : - withval=$with_gmp_prefix; -fi - - -# Check whether --with-gmp_exec_prefix was given. -if test "${with_gmp_exec_prefix+set}" = set; then : - withval=$with_gmp_exec_prefix; -fi - -esac - -# Check whether --with-gmp_builddir was given. -if test "${with_gmp_builddir+set}" = set; then : - withval=$with_gmp_builddir; -fi - -if test "x$with_gmp_prefix" != "x" -a "x$with_gmp_exec_prefix" = "x"; then - with_gmp_exec_prefix=$with_gmp_prefix -fi -if test "x$with_gmp_prefix" != "x" -o "x$with_gmp_exec_prefix" != "x"; then - if test "x$with_gmp" != "x" -a "x$with_gmp" != "xyes" -a "x$with_gmp" != "xsystem"; then - as_fn_error $? "Setting $with_gmp_prefix implies use of system gmp" "$LINENO" 5 - fi - with_gmp="system" -fi -if test "x$with_gmp_builddir" != "x"; then - if test "x$with_gmp" != "x" -a "x$with_gmp" != "xyes" -a "x$with_gmp" != "xbuild"; then - as_fn_error $? "Setting $with_gmp_builddir implies use of build gmp" "$LINENO" 5 - fi - with_gmp="build" - gmp_srcdir=`echo @abs_srcdir@ | $with_gmp_builddir/config.status --file=-` - { $as_echo "$as_me:${as_lineno-$LINENO}: gmp sources in $gmp_srcdir" >&5 -$as_echo "$as_me: gmp sources in $gmp_srcdir" >&6;} -fi -if test "x$with_gmp_exec_prefix" != "x"; then - export PKG_CONFIG_PATH="$with_gmp_exec_prefix/lib/pkgconfig${PKG_CONFIG_PATH+:$PKG_CONFIG_PATH}" -fi -case "$with_gmp" in -system|build) - ;; -*) - case "system" in - bundled) - if test -d $srcdir/.git -a \ - -d $srcdir/gmp -a \ - ! -d $srcdir/gmp/.git; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git repo detected, but submodule gmp not initialized" >&5 -$as_echo "$as_me: WARNING: git repo detected, but submodule gmp not initialized" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You may want to run" >&5 -$as_echo "$as_me: WARNING: You may want to run" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule init" >&5 -$as_echo "$as_me: WARNING: git submodule init" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule update" >&5 -$as_echo "$as_me: WARNING: git submodule update" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sh autogen.sh" >&5 -$as_echo "$as_me: WARNING: sh autogen.sh" >&2;} - fi - if test -f $srcdir/gmp/configure; then - with_gmp="bundled" - else - with_gmp="no" - fi - ;; - *) - with_gmp="system" - ;; - esac - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which gmp to use" >&5 -$as_echo_n "checking which gmp to use... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_gmp" >&5 -$as_echo "$with_gmp" >&6; } - - - - - - -case "$with_gmp" in -system) - if test "x$with_gmp_prefix" != "x"; then - isl_configure_args="$isl_configure_args --with-gmp=$with_gmp_prefix" - GMP_CPPFLAGS="-I$with_gmp_prefix/include" - GMP_LDFLAGS="-L$with_gmp_prefix/lib" - fi - GMP_LIBS=-lgmp - ;; -build) - GMP_CPPFLAGS="-I$gmp_srcdir -I$with_gmp_builddir" - GMP_LIBS="$with_gmp_builddir/libgmp.la" - ;; -esac -SAVE_CPPFLAGS="$CPPFLAGS" -CPPFLAGS="$GMP_CPPFLAGS $CPPFLAGS" -need_get_memory_functions=false -ac_fn_c_check_decl "$LINENO" "mp_get_memory_functions" "ac_cv_have_decl_mp_get_memory_functions" "#include -" -if test "x$ac_cv_have_decl_mp_get_memory_functions" = x""yes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_MP_GET_MEMORY_FUNCTIONS $ac_have_decl -_ACEOF -if test $ac_have_decl = 1; then : - -else - - need_get_memory_functions=true - -fi - -CPPFLAGS="$SAVE_CPPFLAGS" - if test x$need_get_memory_functions = xtrue; then - NEED_GET_MEMORY_FUNCTIONS_TRUE= - NEED_GET_MEMORY_FUNCTIONS_FALSE='#' -else - NEED_GET_MEMORY_FUNCTIONS_TRUE='#' - NEED_GET_MEMORY_FUNCTIONS_FALSE= -fi - -ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "#include -" -if test "x$ac_cv_have_decl_ffs" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FFS $ac_have_decl -_ACEOF - -ac_fn_c_check_decl "$LINENO" "__builtin_ffs" "ac_cv_have_decl___builtin_ffs" "$ac_includes_default" -if test "x$ac_cv_have_decl___builtin_ffs" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL___BUILTIN_FFS $ac_have_decl -_ACEOF - - - - - -# Check whether --with-piplib was given. -if test "${with_piplib+set}" = set; then : - withval=$with_piplib; -fi - -case "system" in -no|system|build) - -# Check whether --with-piplib_prefix was given. -if test "${with_piplib_prefix+set}" = set; then : - withval=$with_piplib_prefix; -fi - - -# Check whether --with-piplib_exec_prefix was given. -if test "${with_piplib_exec_prefix+set}" = set; then : - withval=$with_piplib_exec_prefix; -fi - -esac - -# Check whether --with-piplib_builddir was given. -if test "${with_piplib_builddir+set}" = set; then : - withval=$with_piplib_builddir; -fi - -if test "x$with_piplib_prefix" != "x" -a "x$with_piplib_exec_prefix" = "x"; then - with_piplib_exec_prefix=$with_piplib_prefix -fi -if test "x$with_piplib_prefix" != "x" -o "x$with_piplib_exec_prefix" != "x"; then - if test "x$with_piplib" != "x" -a "x$with_piplib" != "xyes" -a "x$with_piplib" != "xsystem"; then - as_fn_error $? "Setting $with_piplib_prefix implies use of system piplib" "$LINENO" 5 - fi - with_piplib="system" -fi -if test "x$with_piplib_builddir" != "x"; then - if test "x$with_piplib" != "x" -a "x$with_piplib" != "xyes" -a "x$with_piplib" != "xbuild"; then - as_fn_error $? "Setting $with_piplib_builddir implies use of build piplib" "$LINENO" 5 - fi - with_piplib="build" - piplib_srcdir=`echo @abs_srcdir@ | $with_piplib_builddir/config.status --file=-` - { $as_echo "$as_me:${as_lineno-$LINENO}: piplib sources in $piplib_srcdir" >&5 -$as_echo "$as_me: piplib sources in $piplib_srcdir" >&6;} -fi -if test "x$with_piplib_exec_prefix" != "x"; then - export PKG_CONFIG_PATH="$with_piplib_exec_prefix/lib/pkgconfig${PKG_CONFIG_PATH+:$PKG_CONFIG_PATH}" -fi -case "$with_piplib" in -no|system|build) - ;; -*) - case "no" in - bundled) - if test -d $srcdir/.git -a \ - -d $srcdir/piplib -a \ - ! -d $srcdir/piplib/.git; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git repo detected, but submodule piplib not initialized" >&5 -$as_echo "$as_me: WARNING: git repo detected, but submodule piplib not initialized" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You may want to run" >&5 -$as_echo "$as_me: WARNING: You may want to run" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule init" >&5 -$as_echo "$as_me: WARNING: git submodule init" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule update" >&5 -$as_echo "$as_me: WARNING: git submodule update" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sh autogen.sh" >&5 -$as_echo "$as_me: WARNING: sh autogen.sh" >&2;} - fi - if test -f $srcdir/piplib/configure; then - with_piplib="bundled" - else - with_piplib="no" - fi - ;; - *) - with_piplib="no" - ;; - esac - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which piplib to use" >&5 -$as_echo_n "checking which piplib to use... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_piplib" >&5 -$as_echo "$with_piplib" >&6; } - - - -have_piplib=false - - - -case "$with_piplib" in - build) - PIPLIB_CPPFLAGS="-I$piplib_srcdir/include" - PIPLIB_LIBS="$with_piplib_builddir/libpiplibMP.la" - ;; - system) - PIPLIB_LIBS="-lpiplibMP" - if test "x$with_piplib_prefix" != "x"; then - PIPLIB_CPPFLAGS="-I$with_piplib_prefix/include" - PIPLIB_LDFLAGS="-L$with_piplib_prefix/lib" - fi - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$PIPLIB_CPPFLAGS $CPPFLAGS" - LDFLAGS="$PIPLIB_LDFLAGS $LDFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pip_solve in -lpiplibMP" >&5 -$as_echo_n "checking for pip_solve in -lpiplibMP... " >&6; } -if test "${ac_cv_lib_piplibMP_pip_solve+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpiplibMP $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pip_solve (); -int -main () -{ -return pip_solve (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_piplibMP_pip_solve=yes -else - ac_cv_lib_piplibMP_pip_solve=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_piplibMP_pip_solve" >&5 -$as_echo "$ac_cv_lib_piplibMP_pip_solve" >&6; } -if test "x$ac_cv_lib_piplibMP_pip_solve" = x""yes; then : - - ac_fn_c_check_member "$LINENO" "PipOptions" "Urs_parms" "ac_cv_member_PipOptions_Urs_parms" "#include -" -if test "x$ac_cv_member_PipOptions_Urs_parms" = x""yes; then : - -else - - as_fn_error $? "Piplib too old; please install version 1.3.6 or newer" "$LINENO" 5 - -fi - - -else - - as_fn_error $? "Piplib not found" "$LINENO" 5 - -fi - - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" - ;; - no) - ;; - *) - as_fn_error $? "unsupported" "$LINENO" 5 - ;; -esac -if test "$with_piplib" != "no"; then - -$as_echo "#define ISL_PIPLIB /**/" >>confdefs.h - - have_piplib=true -fi - if test x$have_piplib = xtrue; then - HAVE_PIPLIB_TRUE= - HAVE_PIPLIB_FALSE='#' -else - HAVE_PIPLIB_TRUE='#' - HAVE_PIPLIB_FALSE= -fi - - - - - - - - -# Check whether --with-clang was given. -if test "${with_clang+set}" = set; then : - withval=$with_clang; -fi - -case "system" in -system|no) - -# Check whether --with-clang_prefix was given. -if test "${with_clang_prefix+set}" = set; then : - withval=$with_clang_prefix; -fi - - -# Check whether --with-clang_exec_prefix was given. -if test "${with_clang_exec_prefix+set}" = set; then : - withval=$with_clang_exec_prefix; -fi - -esac - -if test "x$with_clang_prefix" != "x" -a "x$with_clang_exec_prefix" = "x"; then - with_clang_exec_prefix=$with_clang_prefix -fi -if test "x$with_clang_prefix" != "x" -o "x$with_clang_exec_prefix" != "x"; then - if test "x$with_clang" != "x" -a "x$with_clang" != "xyes" -a "x$with_clang" != "xsystem"; then - as_fn_error $? "Setting $with_clang_prefix implies use of system clang" "$LINENO" 5 - fi - with_clang="system" -fi -if test "x$with_clang_builddir" != "x"; then - if test "x$with_clang" != "x" -a "x$with_clang" != "xyes" -a "x$with_clang" != "xbuild"; then - as_fn_error $? "Setting $with_clang_builddir implies use of build clang" "$LINENO" 5 - fi - with_clang="build" - clang_srcdir=`echo @abs_srcdir@ | $with_clang_builddir/config.status --file=-` - { $as_echo "$as_me:${as_lineno-$LINENO}: clang sources in $clang_srcdir" >&5 -$as_echo "$as_me: clang sources in $clang_srcdir" >&6;} -fi -if test "x$with_clang_exec_prefix" != "x"; then - export PKG_CONFIG_PATH="$with_clang_exec_prefix/lib/pkgconfig${PKG_CONFIG_PATH+:$PKG_CONFIG_PATH}" -fi -case "$with_clang" in -system|no) - ;; -*) - case "no" in - bundled) - if test -d $srcdir/.git -a \ - -d $srcdir/clang -a \ - ! -d $srcdir/clang/.git; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git repo detected, but submodule clang not initialized" >&5 -$as_echo "$as_me: WARNING: git repo detected, but submodule clang not initialized" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You may want to run" >&5 -$as_echo "$as_me: WARNING: You may want to run" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule init" >&5 -$as_echo "$as_me: WARNING: git submodule init" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: git submodule update" >&5 -$as_echo "$as_me: WARNING: git submodule update" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: sh autogen.sh" >&5 -$as_echo "$as_me: WARNING: sh autogen.sh" >&2;} - fi - if test -f $srcdir/clang/configure; then - with_clang="bundled" - else - with_clang="no" - fi - ;; - *) - with_clang="no" - ;; - esac - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which clang to use" >&5 -$as_echo_n "checking which clang to use... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_clang" >&5 -$as_echo "$with_clang" >&6; } - - -case "$with_clang" in -system) - llvm_config="llvm-config" - # Extract the first word of ""$llvm_config"", so it can be a program name with args. -set dummy "$llvm_config"; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_llvm_config_found+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$llvm_config_found"; then - ac_cv_prog_llvm_config_found="$llvm_config_found" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_llvm_config_found="yes" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -llvm_config_found=$ac_cv_prog_llvm_config_found -if test -n "$llvm_config_found"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $llvm_config_found" >&5 -$as_echo "$llvm_config_found" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$with_clang_prefix" != "x"; then - llvm_config="$with_clang_prefix/bin/llvm-config" - if test -x "$llvm_config"; then - llvm_config_found=yes - fi - fi - if test "$llvm_config_found" != yes; then - as_fn_error $? "llvm-config not found" "$LINENO" 5 - fi - CLANG_CXXFLAGS=`$llvm_config --cxxflags` - CLANG_LDFLAGS=`$llvm_config --ldflags` - CLANG_LIBS=`$llvm_config --libs` - CLANG_PREFIX=`$llvm_config --prefix` - -cat >>confdefs.h <<_ACEOF -#define CLANG_PREFIX "$CLANG_PREFIX" -_ACEOF - - - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CLANG_CXXFLAGS $CPPFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -ac_fn_cxx_check_header_mongrel "$LINENO" "clang/Basic/SourceLocation.h" "ac_cv_header_clang_Basic_SourceLocation_h" "$ac_includes_default" -if test "x$ac_cv_header_clang_Basic_SourceLocation_h" = x""yes; then : - -else - as_fn_error $? "clang header file not found" "$LINENO" 5 -fi - - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "getDefaultTargetTriple" >/dev/null 2>&1; then : - -else - -$as_echo "#define getDefaultTargetTriple getHostTriple" >>confdefs.h - -fi -rm -f conftest* - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "getExpansionLineNumber" >/dev/null 2>&1; then : - -else - -$as_echo "#define getExpansionLineNumber getInstantiationLineNumber" >>confdefs.h - -fi -rm -f conftest* - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "DiagnosticsEngine" >/dev/null 2>&1; then : - -else - -$as_echo "#define DiagnosticsEngine Diagnostic" >>confdefs.h - -fi -rm -f conftest* - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "ArrayRef" >/dev/null 2>&1; then : - -$as_echo "#define USE_ARRAYREF /**/" >>confdefs.h - -fi -rm -f conftest* - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "CXXIsProduction" >/dev/null 2>&1; then : - -$as_echo "#define HAVE_CXXISPRODUCTION /**/" >>confdefs.h - -fi -rm -f conftest* - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - CPPFLAGS="$SAVE_CPPFLAGS" - ;; -esac - if test $with_clang = system; then - HAVE_CLANG_TRUE= - HAVE_CLANG_FALSE='#' -else - HAVE_CLANG_TRUE='#' - HAVE_CLANG_FALSE= -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler vendor" >&5 -$as_echo_n "checking for C compiler vendor... " >&6; } -if test "${ax_cv_c_compiler_vendor+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ax_cv_c_compiler_vendor=unknown - # note: don't check for gcc first since some other compilers define __GNUC__ - for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ clang:__clang__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do - vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - -#if !($vencpp) - thisisanerror; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_c_compiler_vendor=`echo $ventest | cut -d: -f1`; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_vendor" >&5 -$as_echo "$ax_cv_c_compiler_vendor" >&6; } - - - WARNING_FLAGS="" - - if test "${ax_cv_c_compiler_vendor}" = "clang"; then - WARNING_FLAGS="-Wall" - fi - - - - -PACKAGE_CFLAGS="$GMP_CPPFLAGS" -PACKAGE_LDFLAGS="$GMP_LDFLAGS" -PACKAGE_LIBS="-lisl -lgmp" - -# we need the expanded forms... -test "x$prefix" = xNONE && prefix=$ac_default_prefix -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig libname" >&5 -$as_echo_n "checking our pkgconfig libname... " >&6; } -test ".$ax_create_pkgconfig_libname" != "." || \ -ax_create_pkgconfig_libname="${PACKAGE_NAME}" -test ".$ax_create_pkgconfig_libname" != "." || \ -ax_create_pkgconfig_libname="$PACKAGE" -ax_create_pkgconfig_libname=`eval echo "$ax_create_pkgconfig_libname"` -ax_create_pkgconfig_libname=`eval echo "$ax_create_pkgconfig_libname"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_libname" >&5 -$as_echo "$ax_create_pkgconfig_libname" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig version" >&5 -$as_echo_n "checking our pkgconfig version... " >&6; } -test ".$ax_create_pkgconfig_version" != "." || \ -ax_create_pkgconfig_version="${PACKAGE_VERSION}" -test ".$ax_create_pkgconfig_version" != "." || \ -ax_create_pkgconfig_version="$VERSION" -ax_create_pkgconfig_version=`eval echo "$ax_create_pkgconfig_version"` -ax_create_pkgconfig_version=`eval echo "$ax_create_pkgconfig_version"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_version" >&5 -$as_echo "$ax_create_pkgconfig_version" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig_libdir" >&5 -$as_echo_n "checking our pkgconfig_libdir... " >&6; } -test ".$pkgconfig_libdir" = "." && \ -pkgconfig_libdir='${libdir}/pkgconfig' -ax_create_pkgconfig_libdir=`eval echo "$pkgconfig_libdir"` -ax_create_pkgconfig_libdir=`eval echo "$ax_create_pkgconfig_libdir"` -ax_create_pkgconfig_libdir=`eval echo "$ax_create_pkgconfig_libdir"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkgconfig_libdir" >&5 -$as_echo "$pkgconfig_libdir" >&6; } -test "$pkgconfig_libdir" != "$ax_create_pkgconfig_libdir" && ( -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: expanded our pkgconfig_libdir... $ax_create_pkgconfig_libdir" >&5 -$as_echo "expanded our pkgconfig_libdir... $ax_create_pkgconfig_libdir" >&6; }) - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig_libfile" >&5 -$as_echo_n "checking our pkgconfig_libfile... " >&6; } -test ".$pkgconfig_libfile" != "." || \ -pkgconfig_libfile="$ax_create_pkgconfig_libname.pc" -ax_create_pkgconfig_libfile=`eval echo "$pkgconfig_libfile"` -ax_create_pkgconfig_libfile=`eval echo "$ax_create_pkgconfig_libfile"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkgconfig_libfile" >&5 -$as_echo "$pkgconfig_libfile" >&6; } -test "$pkgconfig_libfile" != "$ax_create_pkgconfig_libfile" && ( -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: expanded our pkgconfig_libfile... $ax_create_pkgconfig_libfile" >&5 -$as_echo "expanded our pkgconfig_libfile... $ax_create_pkgconfig_libfile" >&6; }) - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our package / suffix" >&5 -$as_echo_n "checking our package / suffix... " >&6; } -ax_create_pkgconfig_suffix="$program_suffix" -test ".$ax_create_pkgconfig_suffix" != .NONE || ax_create_pkgconfig_suffix="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${PACKAGE_NAME} / ${ax_create_pkgconfig_suffix}" >&5 -$as_echo "${PACKAGE_NAME} / ${ax_create_pkgconfig_suffix}" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig description" >&5 -$as_echo_n "checking our pkgconfig description... " >&6; } -ax_create_pkgconfig_description="$PACKAGE_SUMMARY" -test ".$ax_create_pkgconfig_description" != "." || \ -ax_create_pkgconfig_description="$ax_create_pkgconfig_libname Library" -ax_create_pkgconfig_description=`eval echo "$ax_create_pkgconfig_description"` -ax_create_pkgconfig_description=`eval echo "$ax_create_pkgconfig_description"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_description" >&5 -$as_echo "$ax_create_pkgconfig_description" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig requires" >&5 -$as_echo_n "checking our pkgconfig requires... " >&6; } -ax_create_pkgconfig_requires="$PACKAGE_REQUIRES" -ax_create_pkgconfig_requires=`eval echo "$ax_create_pkgconfig_requires"` -ax_create_pkgconfig_requires=`eval echo "$ax_create_pkgconfig_requires"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_requires" >&5 -$as_echo "$ax_create_pkgconfig_requires" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig ext libs" >&5 -$as_echo_n "checking our pkgconfig ext libs... " >&6; } -ax_create_pkgconfig_pkglibs="$PACKAGE_LIBS" -test ".$ax_create_pkgconfig_pkglibs" != "." || ax_create_pkgconfig_pkglibs="-l$ax_create_pkgconfig_libname" -ax_create_pkgconfig_libs="$ax_create_pkgconfig_pkglibs $LIBS" -ax_create_pkgconfig_libs=`eval echo "$ax_create_pkgconfig_libs"` -ax_create_pkgconfig_libs=`eval echo "$ax_create_pkgconfig_libs"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_libs" >&5 -$as_echo "$ax_create_pkgconfig_libs" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig cppflags" >&5 -$as_echo_n "checking our pkgconfig cppflags... " >&6; } -ax_create_pkgconfig_cppflags="$CPPFLAGS $PACKAGE_CFLAGS" -ax_create_pkgconfig_cppflags=`eval echo "$ax_create_pkgconfig_cppflags"` -ax_create_pkgconfig_cppflags=`eval echo "$ax_create_pkgconfig_cppflags"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_cppflags" >&5 -$as_echo "$ax_create_pkgconfig_cppflags" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking our pkgconfig ldflags" >&5 -$as_echo_n "checking our pkgconfig ldflags... " >&6; } -ax_create_pkgconfig_ldflags="$LDFLAGS $PACKAGE_LDFLAGS" -ax_create_pkgconfig_ldflags=`eval echo "$ax_create_pkgconfig_ldflags"` -ax_create_pkgconfig_ldflags=`eval echo "$ax_create_pkgconfig_ldflags"` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_create_pkgconfig_ldflags" >&5 -$as_echo "$ax_create_pkgconfig_ldflags" >&6; } - -test ".$ax_create_pkgconfig_generate" != "." || \ -ax_create_pkgconfig_generate="$ax_create_pkgconfig_libname.pc" -ax_create_pkgconfig_generate=`eval echo "$ax_create_pkgconfig_generate"` -ax_create_pkgconfig_generate=`eval echo "$ax_create_pkgconfig_generate"` -test "$pkgconfig_libfile" != "$ax_create_pkgconfig_generate" && ( -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: generate the pkgconfig later... $ax_create_pkgconfig_generate" >&5 -$as_echo "generate the pkgconfig later... $ax_create_pkgconfig_generate" >&6; }) - -if test ".$ax_create_pkgconfig_src_libdir" = "." ; then -ax_create_pkgconfig_src_libdir=`pwd` -ax_create_pkgconfig_src_libdir=`$as_dirname -- "$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" || -$as_expr X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(//\)[^/]' \| \ - X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(//\)$' \| \ - X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ax_create_pkgconfig_src_libdir/$ax_create_pkgconfig_generate" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` -test ! -d $ax_create_pkgconfig_src_libdir/src || \ -ax_create_pkgconfig_src_libdir="$ax_create_pkgconfig_src_libdir/src" -case ".$objdir" in -*libs) ax_create_pkgconfig_src_libdir="$ax_create_pkgconfig_src_libdir/$objdir" ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: noninstalled pkgconfig -L $ax_create_pkgconfig_src_libdir" >&5 -$as_echo "noninstalled pkgconfig -L $ax_create_pkgconfig_src_libdir" >&6; } -fi - -if test ".$ax_create_pkgconfig_src_headers" = "." ; then -ax_create_pkgconfig_src_headers=`pwd` -v="$ac_top_srcdir" ; -test ".$v" != "." || v="$ax_spec_dir" -test ".$v" != "." || v="$srcdir" -case "$v" in /*) ax_create_pkgconfig_src_headers="" ;; esac -ax_create_pkgconfig_src_headers=`$as_dirname -- "$ax_create_pkgconfig_src_headers/$v/x" || -$as_expr X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(//\)[^/]' \| \ - X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(//\)$' \| \ - X"$ax_create_pkgconfig_src_headers/$v/x" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ax_create_pkgconfig_src_headers/$v/x" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` -test ! -d $ax_create_pkgconfig_src_headers/include || \ -ax_create_pkgconfig_src_headers="$ax_create_pkgconfig_src_headers/include" -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: noninstalled pkgconfig -I $ax_create_pkgconfig_src_headers" >&5 -$as_echo "noninstalled pkgconfig -I $ax_create_pkgconfig_src_headers" >&6; } -fi - - -ac_config_commands="$ac_config_commands $ax_create_pkgconfig_generate" - - - - - - - if test -f $srcdir/.git/HEAD; then - GIT_HEAD="$srcdir/.git/index" - GIT_REPO="$srcdir/.git" - GIT_HEAD_ID=`GIT_DIR=$GIT_REPO git describe` - elif test -f $srcdir/GIT_HEAD_ID; then - GIT_HEAD_ID=`cat $srcdir/GIT_HEAD_ID` - else - mysrcdir=`(cd $srcdir; pwd)` - head=`basename $mysrcdir | sed -e 's/.*-//'` - head2=`echo $head | sed -e 's/^0-9a-f//'` - head3=`echo $head2 | sed -e 's/........................................//'` - if test "x$head3" = "x" -a "x$head" = "x$head2"; then - GIT_HEAD_ID="$head" - else - GIT_HEAD_ID="UNKNOWN" - fi - fi - if test -z "$GIT_REPO" ; then - GIT_HEAD_VERSION="$GIT_HEAD_ID" - else - GIT_HEAD_VERSION="\`GIT_DIR=$GIT_REPO git describe\`" - fi - -echo '#define GIT_HEAD_ID "'$GIT_HEAD_ID'"' > gitversion.h - - -ac_config_headers="$ac_config_headers isl_config.h" - -ac_config_headers="$ac_config_headers include/isl/config.h" - -ac_config_files="$ac_config_files Makefile" - -ac_config_files="$ac_config_files doc/Makefile" - -if test $with_clang = system; then - ac_config_files="$ac_config_files interface/Makefile" - -fi -ac_config_files="$ac_config_files bound_test.sh" - -ac_config_files="$ac_config_files pip_test.sh" - - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${GENERATE_DOC_TRUE}" && test -z "${GENERATE_DOC_FALSE}"; then - as_fn_error $? "conditional \"GENERATE_DOC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${NEED_GET_MEMORY_FUNCTIONS_TRUE}" && test -z "${NEED_GET_MEMORY_FUNCTIONS_FALSE}"; then - as_fn_error $? "conditional \"NEED_GET_MEMORY_FUNCTIONS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${HAVE_PIPLIB_TRUE}" && test -z "${HAVE_PIPLIB_FALSE}"; then - as_fn_error $? "conditional \"HAVE_PIPLIB\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${HAVE_CLANG_TRUE}" && test -z "${HAVE_CLANG_FALSE}"; then - as_fn_error $? "conditional \"HAVE_CLANG\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by isl $as_me 0.08, which was -generated by GNU Autoconf 2.67. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -isl config.status 0.08 -configured by $0, generated by GNU Autoconf 2.67, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' -macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' -enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' -pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' -host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' -host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' -host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' -build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' -build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' -build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' -SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' -Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' -GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' -EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' -FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' -LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' -NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' -LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' -ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' -exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' -lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' -reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' -AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' -STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' -RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' -compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' -GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' -SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' -ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' -need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' -LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' -libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' -fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' -version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' -runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' -libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' -soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' -old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' -striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' -compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' -predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' -postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' -predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' -postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' -compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' -LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`' -GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`' -export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' -whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' -compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' -allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' -no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`' -inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`' -link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`' -fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' -always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`' -export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' -include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' -prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' -file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`' -compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`' -predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' -postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' -predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' -postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' -compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# Quote evaled strings. -for var in SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -AR \ -AR_FLAGS \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -SHELL \ -ECHO \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_wl \ -lt_prog_compiler_pic \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ -hardcode_libdir_separator \ -fix_srcfile_path \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -finish_eval \ -old_striplib \ -striplib \ -compiler_lib_search_dirs \ -predep_objects \ -postdep_objects \ -predeps \ -postdeps \ -compiler_lib_search_path \ -LD_CXX \ -compiler_CXX \ -lt_prog_compiler_no_builtin_flag_CXX \ -lt_prog_compiler_wl_CXX \ -lt_prog_compiler_pic_CXX \ -lt_prog_compiler_static_CXX \ -lt_cv_prog_compiler_c_o_CXX \ -export_dynamic_flag_spec_CXX \ -whole_archive_flag_spec_CXX \ -compiler_needs_object_CXX \ -with_gnu_ld_CXX \ -allow_undefined_flag_CXX \ -no_undefined_flag_CXX \ -hardcode_libdir_flag_spec_CXX \ -hardcode_libdir_flag_spec_ld_CXX \ -hardcode_libdir_separator_CXX \ -fix_srcfile_path_CXX \ -exclude_expsyms_CXX \ -include_expsyms_CXX \ -file_list_spec_CXX \ -compiler_lib_search_dirs_CXX \ -predep_objects_CXX \ -postdep_objects_CXX \ -predeps_CXX \ -postdeps_CXX \ -compiler_lib_search_path_CXX; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec \ -old_archive_cmds_CXX \ -old_archive_from_new_cmds_CXX \ -old_archive_from_expsyms_cmds_CXX \ -archive_cmds_CXX \ -archive_expsym_cmds_CXX \ -module_cmds_CXX \ -module_expsym_cmds_CXX \ -export_symbols_cmds_CXX \ -prelink_cmds_CXX; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case \$lt_ECHO in -*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` - ;; -esac - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - - - -# variables for create stdint.h replacement -PACKAGE="$PACKAGE" -VERSION="$VERSION" -ac_stdint_h="$ac_stdint_h" -_ac_stdint_h=`$as_echo "_$PACKAGE-$ac_stdint_h" | $as_tr_cpp` -ac_cv_stdint_message="$ac_cv_stdint_message" -ac_cv_header_stdint_t="$ac_cv_header_stdint_t" -ac_cv_header_stdint_x="$ac_cv_header_stdint_x" -ac_cv_header_stdint_o="$ac_cv_header_stdint_o" -ac_cv_header_stdint_u="$ac_cv_header_stdint_u" -ac_cv_type_uint64_t="$ac_cv_type_uint64_t" -ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t" -ac_cv_char_data_model="$ac_cv_char_data_model" -ac_cv_long_data_model="$ac_cv_long_data_model" -ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t" -ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t" -ac_cv_type_intmax_t="$ac_cv_type_intmax_t" - - -ax_create_pkgconfig_generate="$ax_create_pkgconfig_generate" -pkgconfig_prefix='$prefix' -pkgconfig_execprefix='$exec_prefix' -pkgconfig_bindir='$bindir' -pkgconfig_libdir='$libdir' -pkgconfig_includedir='$includedir' -pkgconfig_datarootdir='$datarootdir' -pkgconfig_datadir='$datadir' -pkgconfig_sysconfdir='$sysconfdir' -pkgconfig_suffix='$ax_create_pkgconfig_suffix' -pkgconfig_package='$PACKAGE_NAME' -pkgconfig_libname='$ax_create_pkgconfig_libname' -pkgconfig_description='$ax_create_pkgconfig_description' -pkgconfig_version='$ax_create_pkgconfig_version' -pkgconfig_requires='$ax_create_pkgconfig_requires' -pkgconfig_libs='$ax_create_pkgconfig_libs' -pkgconfig_ldflags='$ax_create_pkgconfig_ldflags' -pkgconfig_cppflags='$ax_create_pkgconfig_cppflags' -pkgconfig_src_libdir='$ax_create_pkgconfig_src_libdir' -pkgconfig_src_headers='$ax_create_pkgconfig_src_headers' - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "$ac_stdint_h") CONFIG_COMMANDS="$CONFIG_COMMANDS $ac_stdint_h" ;; - "$ax_create_pkgconfig_generate") CONFIG_COMMANDS="$CONFIG_COMMANDS $ax_create_pkgconfig_generate" ;; - "isl_config.h") CONFIG_HEADERS="$CONFIG_HEADERS isl_config.h" ;; - "include/isl/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/isl/config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "interface/Makefile") CONFIG_FILES="$CONFIG_FILES interface/Makefile" ;; - "bound_test.sh") CONFIG_FILES="$CONFIG_FILES bound_test.sh" ;; - "pip_test.sh") CONFIG_FILES="$CONFIG_FILES pip_test.sh" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_t=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_t"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="CXX " - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that does not interpret backslashes. -ECHO=$lt_ECHO - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects -postdep_objects=$lt_postdep_objects -predeps=$lt_predeps -postdeps=$lt_postdeps - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac - - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - - cat <<_LT_EOF >> "$ofile" - -# ### BEGIN LIBTOOL TAG CONFIG: CXX - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds_CXX - -# A language specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU compiler? -with_gcc=$GCC_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object_CXX - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld_CXX - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute_CXX - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath_CXX - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path_CXX - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds_CXX - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec_CXX - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects_CXX -postdep_objects=$lt_postdep_objects_CXX -predeps=$lt_predeps_CXX -postdeps=$lt_postdeps_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -# ### END LIBTOOL TAG CONFIG: CXX -_LT_EOF - - ;; - "$ac_stdint_h":C) -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_stdint_h : $_ac_stdint_h" >&5 -$as_echo "$as_me: creating $ac_stdint_h : $_ac_stdint_h" >&6;} -ac_stdint=$tmp/_stdint.h - -echo "#ifndef" $_ac_stdint_h >$ac_stdint -echo "#define" $_ac_stdint_h "1" >>$ac_stdint -echo "#ifndef" _GENERATED_STDINT_H >>$ac_stdint -echo "#define" _GENERATED_STDINT_H '"'$PACKAGE $VERSION'"' >>$ac_stdint -echo "/* generated $ac_cv_stdint_message */" >>$ac_stdint -if test "_$ac_cv_header_stdint_t" != "_" ; then -echo "#define _STDINT_HAVE_STDINT_H" "1" >>$ac_stdint -echo "#include " >>$ac_stdint -echo "#endif" >>$ac_stdint -echo "#endif" >>$ac_stdint -else - -cat >>$ac_stdint < -#else -#include - -/* .................... configured part ............................ */ - -STDINT_EOF - -echo "/* whether we have a C99 compatible stdint header file */" >>$ac_stdint -if test "_$ac_cv_header_stdint_x" != "_" ; then - ac_header="$ac_cv_header_stdint_x" - echo "#define _STDINT_HEADER_INTPTR" '"'"$ac_header"'"' >>$ac_stdint -else - echo "/* #undef _STDINT_HEADER_INTPTR */" >>$ac_stdint -fi - -echo "/* whether we have a C96 compatible inttypes header file */" >>$ac_stdint -if test "_$ac_cv_header_stdint_o" != "_" ; then - ac_header="$ac_cv_header_stdint_o" - echo "#define _STDINT_HEADER_UINT32" '"'"$ac_header"'"' >>$ac_stdint -else - echo "/* #undef _STDINT_HEADER_UINT32 */" >>$ac_stdint -fi - -echo "/* whether we have a BSD compatible inet types header */" >>$ac_stdint -if test "_$ac_cv_header_stdint_u" != "_" ; then - ac_header="$ac_cv_header_stdint_u" - echo "#define _STDINT_HEADER_U_INT32" '"'"$ac_header"'"' >>$ac_stdint -else - echo "/* #undef _STDINT_HEADER_U_INT32 */" >>$ac_stdint -fi - -echo "" >>$ac_stdint - -if test "_$ac_header" != "_" ; then if test "$ac_header" != "stddef.h" ; then - echo "#include <$ac_header>" >>$ac_stdint - echo "" >>$ac_stdint -fi fi - -echo "/* which 64bit typedef has been found */" >>$ac_stdint -if test "$ac_cv_type_uint64_t" = "yes" ; then -echo "#define _STDINT_HAVE_UINT64_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_UINT64_T */" >>$ac_stdint -fi -if test "$ac_cv_type_u_int64_t" = "yes" ; then -echo "#define _STDINT_HAVE_U_INT64_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_U_INT64_T */" >>$ac_stdint -fi -echo "" >>$ac_stdint - -echo "/* which type model has been detected */" >>$ac_stdint -if test "_$ac_cv_char_data_model" != "_" ; then -echo "#define _STDINT_CHAR_MODEL" "$ac_cv_char_data_model" >>$ac_stdint -echo "#define _STDINT_LONG_MODEL" "$ac_cv_long_data_model" >>$ac_stdint -else -echo "/* #undef _STDINT_CHAR_MODEL // skipped */" >>$ac_stdint -echo "/* #undef _STDINT_LONG_MODEL // skipped */" >>$ac_stdint -fi -echo "" >>$ac_stdint - -echo "/* whether int_least types were detected */" >>$ac_stdint -if test "$ac_cv_type_int_least32_t" = "yes"; then -echo "#define _STDINT_HAVE_INT_LEAST32_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_INT_LEAST32_T */" >>$ac_stdint -fi -echo "/* whether int_fast types were detected */" >>$ac_stdint -if test "$ac_cv_type_int_fast32_t" = "yes"; then -echo "#define _STDINT_HAVE_INT_FAST32_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_INT_FAST32_T */" >>$ac_stdint -fi -echo "/* whether intmax_t type was detected */" >>$ac_stdint -if test "$ac_cv_type_intmax_t" = "yes"; then -echo "#define _STDINT_HAVE_INTMAX_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_INTMAX_T */" >>$ac_stdint -fi -echo "" >>$ac_stdint - - cat >>$ac_stdint <= 199901L -#define _HAVE_UINT64_T -#define _HAVE_LONGLONG_UINT64_T -typedef long long int64_t; -typedef unsigned long long uint64_t; - -#elif !defined __STRICT_ANSI__ -#if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__ -#define _HAVE_UINT64_T -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; - -#elif defined __GNUC__ || defined __MWERKS__ || defined __ELF__ -/* note: all ELF-systems seem to have loff-support which needs 64-bit */ -#if !defined _NO_LONGLONG -#define _HAVE_UINT64_T -#define _HAVE_LONGLONG_UINT64_T -typedef long long int64_t; -typedef unsigned long long uint64_t; -#endif - -#elif defined __alpha || (defined __mips && defined _ABIN32) -#if !defined _NO_LONGLONG -typedef long int64_t; -typedef unsigned long uint64_t; -#endif - /* compiler/cpu type to define int64_t */ -#endif -#endif -#endif - -#if defined _STDINT_HAVE_U_INT_TYPES -/* int8_t int16_t int32_t defined by inet code, redeclare the u_intXX types */ -typedef u_int8_t uint8_t; -typedef u_int16_t uint16_t; -typedef u_int32_t uint32_t; - -/* glibc compatibility */ -#ifndef __int8_t_defined -#define __int8_t_defined -#endif -#endif - -#ifdef _STDINT_NEED_INT_MODEL_T -/* we must guess all the basic types. Apart from byte-adressable system, */ -/* there a few 32-bit-only dsp-systems that we guard with BYTE_MODEL 8-} */ -/* (btw, those nibble-addressable systems are way off, or so we assume) */ - - -#if defined _STDINT_BYTE_MODEL -#if _STDINT_LONG_MODEL+0 == 242 -/* 2:4:2 = IP16 = a normal 16-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned long uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef long int32_t; -#endif -#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL == 444 -/* 2:4:4 = LP32 = a 32-bit system derived from a 16-bit */ -/* 4:4:4 = ILP32 = a normal 32-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef int int32_t; -#endif -#elif _STDINT_LONG_MODEL+0 == 484 || _STDINT_LONG_MODEL+0 == 488 -/* 4:8:4 = IP32 = a 32-bit system prepared for 64-bit */ -/* 4:8:8 = LP64 = a normal 64-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef int int32_t; -#endif -/* this system has a "long" of 64bit */ -#ifndef _HAVE_UINT64_T -#define _HAVE_UINT64_T -typedef unsigned long uint64_t; -typedef long int64_t; -#endif -#elif _STDINT_LONG_MODEL+0 == 448 -/* LLP64 a 64-bit system derived from a 32-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef int int32_t; -#endif -/* assuming the system has a "long long" */ -#ifndef _HAVE_UINT64_T -#define _HAVE_UINT64_T -#define _HAVE_LONGLONG_UINT64_T -typedef unsigned long long uint64_t; -typedef long long int64_t; -#endif -#else -#define _STDINT_NO_INT32_T -#endif -#else -#define _STDINT_NO_INT8_T -#define _STDINT_NO_INT32_T -#endif -#endif - -/* - * quote from SunOS-5.8 sys/inttypes.h: - * Use at your own risk. As of February 1996, the committee is squarely - * behind the fixed sized types; the "least" and "fast" types are still being - * discussed. The probability that the "fast" types may be removed before - * the standard is finalized is high enough that they are not currently - * implemented. - */ - -#if defined _STDINT_NEED_INT_LEAST_T -typedef int8_t int_least8_t; -typedef int16_t int_least16_t; -typedef int32_t int_least32_t; -#ifdef _HAVE_UINT64_T -typedef int64_t int_least64_t; -#endif - -typedef uint8_t uint_least8_t; -typedef uint16_t uint_least16_t; -typedef uint32_t uint_least32_t; -#ifdef _HAVE_UINT64_T -typedef uint64_t uint_least64_t; -#endif - /* least types */ -#endif - -#if defined _STDINT_NEED_INT_FAST_T -typedef int8_t int_fast8_t; -typedef int int_fast16_t; -typedef int32_t int_fast32_t; -#ifdef _HAVE_UINT64_T -typedef int64_t int_fast64_t; -#endif - -typedef uint8_t uint_fast8_t; -typedef unsigned uint_fast16_t; -typedef uint32_t uint_fast32_t; -#ifdef _HAVE_UINT64_T -typedef uint64_t uint_fast64_t; -#endif - /* fast types */ -#endif - -#ifdef _STDINT_NEED_INTMAX_T -#ifdef _HAVE_UINT64_T -typedef int64_t intmax_t; -typedef uint64_t uintmax_t; -#else -typedef long intmax_t; -typedef unsigned long uintmax_t; -#endif -#endif - -#ifdef _STDINT_NEED_INTPTR_T -#ifndef __intptr_t_defined -#define __intptr_t_defined -/* we encourage using "long" to store pointer values, never use "int" ! */ -#if _STDINT_LONG_MODEL+0 == 242 || _STDINT_LONG_MODEL+0 == 484 -typedef unsigned int uintptr_t; -typedef int intptr_t; -#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL+0 == 444 -typedef unsigned long uintptr_t; -typedef long intptr_t; -#elif _STDINT_LONG_MODEL+0 == 448 && defined _HAVE_UINT64_T -typedef uint64_t uintptr_t; -typedef int64_t intptr_t; -#else /* matches typical system types ILP32 and LP64 - but not IP16 or LLP64 */ -typedef unsigned long uintptr_t; -typedef long intptr_t; -#endif -#endif -#endif - -/* The ISO C99 standard specifies that in C++ implementations these - should only be defined if explicitly requested. */ -#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS -#ifndef UINT32_C - -/* Signed. */ -# define INT8_C(c) c -# define INT16_C(c) c -# define INT32_C(c) c -# ifdef _HAVE_LONGLONG_UINT64_T -# define INT64_C(c) c ## L -# else -# define INT64_C(c) c ## LL -# endif - -/* Unsigned. */ -# define UINT8_C(c) c ## U -# define UINT16_C(c) c ## U -# define UINT32_C(c) c ## U -# ifdef _HAVE_LONGLONG_UINT64_T -# define UINT64_C(c) c ## UL -# else -# define UINT64_C(c) c ## ULL -# endif - -/* Maximal type. */ -# ifdef _HAVE_LONGLONG_UINT64_T -# define INTMAX_C(c) c ## L -# define UINTMAX_C(c) c ## UL -# else -# define INTMAX_C(c) c ## LL -# define UINTMAX_C(c) c ## ULL -# endif - - /* literalnumbers */ -#endif -#endif - -/* These limits are merily those of a two complement byte-oriented system */ - -/* Minimum of signed integral types. */ -# define INT8_MIN (-128) -# define INT16_MIN (-32767-1) -# define INT32_MIN (-2147483647-1) -#ifndef INT64_MIN -# define INT64_MIN (-__INT64_C(9223372036854775807)-1) -#endif -/* Maximum of signed integral types. */ -# define INT8_MAX (127) -# define INT16_MAX (32767) -# define INT32_MAX (2147483647) -#ifndef INT64_MAX -# define INT64_MAX (__INT64_C(9223372036854775807)) -#endif - -/* Maximum of unsigned integral types. */ -#ifndef UINT8_MAX -# define UINT8_MAX (255) -#endif -#ifndef UINT16_MAX -# define UINT16_MAX (65535) -#endif -# define UINT32_MAX (4294967295U) -#ifndef UINT64_MAX -# define UINT64_MAX (__UINT64_C(18446744073709551615)) -#endif - -/* Minimum of signed integral types having a minimum size. */ -# define INT_LEAST8_MIN INT8_MIN -# define INT_LEAST16_MIN INT16_MIN -# define INT_LEAST32_MIN INT32_MIN -# define INT_LEAST64_MIN INT64_MIN -/* Maximum of signed integral types having a minimum size. */ -# define INT_LEAST8_MAX INT8_MAX -# define INT_LEAST16_MAX INT16_MAX -# define INT_LEAST32_MAX INT32_MAX -# define INT_LEAST64_MAX INT64_MAX - -/* Maximum of unsigned integral types having a minimum size. */ -# define UINT_LEAST8_MAX UINT8_MAX -# define UINT_LEAST16_MAX UINT16_MAX -# define UINT_LEAST32_MAX UINT32_MAX -# define UINT_LEAST64_MAX UINT64_MAX - - /* shortcircuit*/ -#endif - /* once */ -#endif -#endif -STDINT_EOF -fi - if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_stdint_h is unchanged" >&5 -$as_echo "$as_me: $ac_stdint_h is unchanged" >&6;} - else - ac_dir=`$as_dirname -- "$ac_stdint_h" || -$as_expr X"$ac_stdint_h" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_stdint_h" : 'X\(//\)[^/]' \| \ - X"$ac_stdint_h" : 'X\(//\)$' \| \ - X"$ac_stdint_h" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_stdint_h" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - rm -f $ac_stdint_h - mv $ac_stdint $ac_stdint_h - fi - ;; - "$ax_create_pkgconfig_generate":C) -pkgconfig_generate="$ax_create_pkgconfig_generate" -if test ! -f "$pkgconfig_generate.in" -then generate="true" -elif grep ' generated by configure ' $pkgconfig_generate.in >/dev/null -then generate="true" -else generate="false"; -fi -if $generate ; then -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $pkgconfig_generate.in" >&5 -$as_echo "$as_me: creating $pkgconfig_generate.in" >&6;} -cat > $pkgconfig_generate.in <&5 -$as_echo "$as_me: creating $pkgconfig_generate" >&6;} -cat >conftest.sed < $pkgconfig_generate -if test ! -s $pkgconfig_generate ; then - as_fn_error $? "$pkgconfig_generate is empty" "$LINENO" 5 -fi ; rm conftest.sed # DONE generate $pkgconfig_generate -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.pc/'` -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $pkgconfig_uninstalled" >&5 -$as_echo "$as_me: creating $pkgconfig_uninstalled" >&6;} -cat >conftest.sed < $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - as_fn_error $? "$pkgconfig_uninstalled is empty" "$LINENO" 5 -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled - pkgconfig_requires_add=`echo ${pkgconfig_requires}` -if test ".$pkgconfig_requires_add" != "." ; then - pkgconfig_requires_add="pkg-config $pkgconfig_requires_add" - else pkgconfig_requires_add=":" ; fi -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.sh/'` -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $pkgconfig_uninstalled" >&5 -$as_echo "$as_me: creating $pkgconfig_uninstalled" >&6;} -cat >conftest.sed <Name:>for option\\; do case \"\$option\" in --list-all|--name) echo > -s>Description: *>\\;\\; --help) pkg-config --help \\; echo Buildscript Of > -s>Version: *>\\;\\; --modversion|--version) echo > -s>Requires:>\\;\\; --requires) echo $pkgconfig_requires_add> -s>Libs: *>\\;\\; --libs) echo > -s>Cflags: *>\\;\\; --cflags) echo > -/--libs)/a\\ - $pkgconfig_requires_add -/--cflags)/a\\ - $pkgconfig_requires_add\\ -;; --variable=*) eval echo '\$'\`echo \$option | sed -e 's/.*=//'\`\\ -;; --uninstalled) exit 0 \\ -;; *) ;; esac done -AXEOF -sed -f conftest.sed $pkgconfig_generate.in > $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - as_fn_error $? "$pkgconfig_uninstalled is empty" "$LINENO" 5 -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled - ;; - "bound_test.sh":F) chmod +x bound_test.sh ;; - "pip_test.sh":F) chmod +x pip_test.sh ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - - ac_configure_args="$ac_configure_args $isl_configure_args" - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/cloog-0.17.0/isl/configure.ac b/cloog-0.17.0/isl/configure.ac deleted file mode 100644 index a41023c..0000000 --- a/cloog-0.17.0/isl/configure.ac +++ /dev/null @@ -1,180 +0,0 @@ -AC_INIT([isl], [0.08], [isl-development@googlegroups.com]) -AC_CONFIG_AUX_DIR([.]) -AC_CONFIG_MACRO_DIR([m4]) -AM_INIT_AUTOMAKE([foreign]) -m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) -AC_SUBST(versioninfo) -versioninfo=8:0:0 - -AC_PROG_CC -AC_PROG_CXX - -AX_CC_MAXOPT -AX_GCC_WARN_UNUSED_RESULT -AX_C___ATTRIBUTE__ - -AC_PROG_LIBTOOL - -AC_CHECK_PROG(PERL, perl, perl, []) -AC_CHECK_PROG(PDFLATEX, pdflatex, pdflatex, []) -AC_CHECK_PROG(POD2HTML, pod2html, pod2html, []) - -AM_CONDITIONAL(GENERATE_DOC, test -n "$PERL" -a -n "$PDFLATEX" -a -n "$POD2HTML") - -AX_CREATE_STDINT_H(include/isl/stdint.h) - -AX_SUBMODULE(gmp,system|build,system) - -AC_SUBST(GMP_CPPFLAGS) -AC_SUBST(GMP_LDFLAGS) -AC_SUBST(GMP_LIBS) -case "$with_gmp" in -system) - if test "x$with_gmp_prefix" != "x"; then - isl_configure_args="$isl_configure_args --with-gmp=$with_gmp_prefix" - GMP_CPPFLAGS="-I$with_gmp_prefix/include" - GMP_LDFLAGS="-L$with_gmp_prefix/lib" - fi - GMP_LIBS=-lgmp - ;; -build) - GMP_CPPFLAGS="-I$gmp_srcdir -I$with_gmp_builddir" - GMP_LIBS="$with_gmp_builddir/libgmp.la" - ;; -esac -SAVE_CPPFLAGS="$CPPFLAGS" -CPPFLAGS="$GMP_CPPFLAGS $CPPFLAGS" -need_get_memory_functions=false -AC_CHECK_DECLS(mp_get_memory_functions,[],[ - need_get_memory_functions=true -],[#include ]) -CPPFLAGS="$SAVE_CPPFLAGS" -AM_CONDITIONAL(NEED_GET_MEMORY_FUNCTIONS, test x$need_get_memory_functions = xtrue) -AC_CHECK_DECLS(ffs,[],[],[#include ]) -AC_CHECK_DECLS(__builtin_ffs,[],[],[]) - -AX_SUBMODULE(piplib,no|system|build,no) - -have_piplib=false -AC_SUBST(PIPLIB_CPPFLAGS) -AC_SUBST(PIPLIB_LDFLAGS) -AC_SUBST(PIPLIB_LIBS) -case "$with_piplib" in - build) - PIPLIB_CPPFLAGS="-I$piplib_srcdir/include" - PIPLIB_LIBS="$with_piplib_builddir/libpiplibMP.la" - ;; - system) - PIPLIB_LIBS="-lpiplibMP" - if test "x$with_piplib_prefix" != "x"; then - PIPLIB_CPPFLAGS="-I$with_piplib_prefix/include" - PIPLIB_LDFLAGS="-L$with_piplib_prefix/lib" - fi - SAVE_CPPFLAGS="$CPPFLAGS" - SAVE_LDFLAGS="$LDFLAGS" - CPPFLAGS="$PIPLIB_CPPFLAGS $CPPFLAGS" - LDFLAGS="$PIPLIB_LDFLAGS $LDFLAGS" - AC_CHECK_LIB(piplibMP, pip_solve,[ - AC_CHECK_MEMBER(PipOptions.Urs_parms, [], [ - AC_MSG_ERROR([Piplib too old; please install version 1.3.6 or newer]) - ],[#include ]) - ],[ - AC_MSG_ERROR([Piplib not found]) - ]) - CPPFLAGS="$SAVE_CPPFLAGS" - LDFLAGS="$SAVE_LDFLAGS" - ;; - no) - ;; - *) - AC_MSG_ERROR(unsupported) - ;; -esac -if test "$with_piplib" != "no"; then - AC_DEFINE(ISL_PIPLIB,,piplib is available) - have_piplib=true -fi -AM_CONDITIONAL(HAVE_PIPLIB, test x$have_piplib = xtrue) - -AC_SUBST(CLANG_CXXFLAGS) -AC_SUBST(CLANG_LDFLAGS) -AC_SUBST(CLANG_LIBS) -AX_SUBMODULE(clang,system|no,no) -case "$with_clang" in -system) - llvm_config="llvm-config" - AC_CHECK_PROG([llvm_config_found], ["$llvm_config"], [yes]) - if test "x$with_clang_prefix" != "x"; then - llvm_config="$with_clang_prefix/bin/llvm-config" - if test -x "$llvm_config"; then - llvm_config_found=yes - fi - fi - if test "$llvm_config_found" != yes; then - AC_MSG_ERROR([llvm-config not found]) - fi - CLANG_CXXFLAGS=`$llvm_config --cxxflags` - CLANG_LDFLAGS=`$llvm_config --ldflags` - CLANG_LIBS=`$llvm_config --libs` - CLANG_PREFIX=`$llvm_config --prefix` - AC_DEFINE_UNQUOTED(CLANG_PREFIX, ["$CLANG_PREFIX"], - [Clang installation prefix]) - - SAVE_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CLANG_CXXFLAGS $CPPFLAGS" - AC_LANG_PUSH(C++) - AC_CHECK_HEADER([clang/Basic/SourceLocation.h], [], - [AC_ERROR([clang header file not found])]) - AC_EGREP_HEADER([getDefaultTargetTriple], [llvm/Support/Host.h], [], - [AC_DEFINE([getDefaultTargetTriple], [getHostTriple], - [Define to getHostTriple for older versions of clang])]) - AC_EGREP_HEADER([getExpansionLineNumber], - [clang/Basic/SourceLocation.h], [], - [AC_DEFINE([getExpansionLineNumber], - [getInstantiationLineNumber], - [Define to getInstantiationLineNumber for older versions of clang])]) - AC_EGREP_HEADER([DiagnosticsEngine], - [clang/Basic/Diagnostic.h], [], - [AC_DEFINE([DiagnosticsEngine], - [Diagnostic], - [Define to Diagnostic for older versions of clang])]) - AC_EGREP_HEADER([ArrayRef], [clang/Driver/Driver.h], - [AC_DEFINE([USE_ARRAYREF], [], - [Define if Driver::BuildCompilation takes ArrayRef])]) - AC_EGREP_HEADER([CXXIsProduction], [clang/Driver/Driver.h], - [AC_DEFINE([HAVE_CXXISPRODUCTION], [], - [Define if Driver constructor takes CXXIsProduction argument])]) - AC_LANG_POP - CPPFLAGS="$SAVE_CPPFLAGS" - ;; -esac -AM_CONDITIONAL(HAVE_CLANG, test $with_clang = system) - -AX_SET_WARNING_FLAGS - -AC_SUBST(WARNING_FLAGS) - -PACKAGE_CFLAGS="$GMP_CPPFLAGS" -PACKAGE_LDFLAGS="$GMP_LDFLAGS" -PACKAGE_LIBS="-lisl -lgmp" -AX_CREATE_PKGCONFIG_INFO - -AX_DETECT_GIT_HEAD -echo '#define GIT_HEAD_ID "'$GIT_HEAD_ID'"' > gitversion.h - -AH_BOTTOM([#include ]) -AC_CONFIG_HEADERS(isl_config.h) -AC_CONFIG_HEADERS(include/isl/config.h) -AC_CONFIG_FILES(Makefile) -AC_CONFIG_FILES(doc/Makefile) -if test $with_clang = system; then - AC_CONFIG_FILES(interface/Makefile) -fi -AC_CONFIG_FILES([bound_test.sh], [chmod +x bound_test.sh]) -AC_CONFIG_FILES([pip_test.sh], [chmod +x pip_test.sh]) -AC_CONFIG_COMMANDS_POST([ - dnl pass on arguments to subdir configures, but don't - dnl add them to config.status - ac_configure_args="$ac_configure_args $isl_configure_args" -]) -AC_OUTPUT diff --git a/cloog-0.17.0/isl/depcomp b/cloog-0.17.0/isl/depcomp deleted file mode 100755 index df8eea7..0000000 --- a/cloog-0.17.0/isl/depcomp +++ /dev/null @@ -1,630 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2009-04-28.21; # UTC - -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free -# Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by `PROGRAMS ARGS'. - object Object file output by `PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputing dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -cygpath_u="cygpath -u -f -" -if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u="sed s,\\\\\\\\,/,g" - depmode=msvisualcpp -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory -## that the space means something, we add a space to the output as -## well. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the - # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> "$depfile" - echo >> "$depfile" - - # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # 'foo.d', which lands next to the object file, wherever that - # happens to be. - # Much of this is similar to the tru64 case; see comments there. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" - # Add `dependent.h:' lines. - sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" "$tmpdepfile2" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mechanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. - "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no eat=no - for arg - do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - if test $eat = yes; then - eat=no - continue - fi - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -arch) - eat=yes ;; - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix=`echo "$object" | sed 's/^.*\././'` - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - IFS=" " - for arg - do - case "$arg" in - -o) - shift - ;; - $object) - shift - ;; - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E 2>/dev/null | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvcmsys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/cloog-0.17.0/isl/doc/Makefile.am b/cloog-0.17.0/isl/doc/Makefile.am deleted file mode 100644 index aa79a6c..0000000 --- a/cloog-0.17.0/isl/doc/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ -if GENERATE_DOC -export TEXINPUTS := $(srcdir):$(TEXINPUTS) -export BIBINPUTS := $(srcdir):$(BIBINPUTS) -export BSTINPUTS := $(srcdir):$(BSTINPUTS) - -user.tex: user.pod - $(PERL) $(srcdir)/mypod2latex $< $@ -manual.pdf: manual.tex user.tex $(srcdir)/implementation.tex - (cd ..; echo "@GIT_HEAD_VERSION@") > version.tex - $(PDFLATEX) $< - bibtex manual - $(PDFLATEX) $< - $(PDFLATEX) $< -user.html: user.pod - (cd ..; echo "@GIT_HEAD_VERSION@") > version - $(POD2HTML) --infile=$< --outfile=$@ --title="Integer Set Library: Manual [version `cat version`]" -endif diff --git a/cloog-0.17.0/isl/doc/Makefile.in b/cloog-0.17.0/isl/doc/Makefile.in deleted file mode 100644 index ca5f881..0000000 --- a/cloog-0.17.0/isl/doc/Makefile.in +++ /dev/null @@ -1,410 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = doc -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_c___attribute__.m4 \ - $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ - $(top_srcdir)/m4/ax_create_stdint_h.m4 \ - $(top_srcdir)/m4/ax_detect_git_head.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_warn_unused_result.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/ax_set_warning_flags.m4 \ - $(top_srcdir)/m4/ax_submodule.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/isl_config.h \ - $(top_builddir)/include/isl/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CLANG_CXXFLAGS = @CLANG_CXXFLAGS@ -CLANG_LDFLAGS = @CLANG_LDFLAGS@ -CLANG_LIBS = @CLANG_LIBS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIT_HEAD = @GIT_HEAD@ -GIT_HEAD_ID = @GIT_HEAD_ID@ -GIT_HEAD_VERSION = @GIT_HEAD_VERSION@ -GMP_CPPFLAGS = @GMP_CPPFLAGS@ -GMP_LDFLAGS = @GMP_LDFLAGS@ -GMP_LIBS = @GMP_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PDFLATEX = @PDFLATEX@ -PERL = @PERL@ -PIPLIB_CPPFLAGS = @PIPLIB_CPPFLAGS@ -PIPLIB_LDFLAGS = @PIPLIB_LDFLAGS@ -PIPLIB_LIBS = @PIPLIB_LIBS@ -POD2HTML = @POD2HTML@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -WARNING_FLAGS = @WARNING_FLAGS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -llvm_config_found = @llvm_config_found@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfig_libdir = @pkgconfig_libdir@ -pkgconfig_libfile = @pkgconfig_libfile@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -versioninfo = @versioninfo@ -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign doc/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am - -@GENERATE_DOC_TRUE@export TEXINPUTS := $(srcdir):$(TEXINPUTS) -@GENERATE_DOC_TRUE@export BIBINPUTS := $(srcdir):$(BIBINPUTS) -@GENERATE_DOC_TRUE@export BSTINPUTS := $(srcdir):$(BSTINPUTS) - -@GENERATE_DOC_TRUE@user.tex: user.pod -@GENERATE_DOC_TRUE@ $(PERL) $(srcdir)/mypod2latex $< $@ -@GENERATE_DOC_TRUE@manual.pdf: manual.tex user.tex $(srcdir)/implementation.tex -@GENERATE_DOC_TRUE@ (cd ..; echo "@GIT_HEAD_VERSION@") > version.tex -@GENERATE_DOC_TRUE@ $(PDFLATEX) $< -@GENERATE_DOC_TRUE@ bibtex manual -@GENERATE_DOC_TRUE@ $(PDFLATEX) $< -@GENERATE_DOC_TRUE@ $(PDFLATEX) $< -@GENERATE_DOC_TRUE@user.html: user.pod -@GENERATE_DOC_TRUE@ (cd ..; echo "@GIT_HEAD_VERSION@") > version -@GENERATE_DOC_TRUE@ $(POD2HTML) --infile=$< --outfile=$@ --title="Integer Set Library: Manual [version `cat version`]" - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.17.0/isl/doc/chicago.bst b/cloog-0.17.0/isl/doc/chicago.bst deleted file mode 100644 index ba05833..0000000 --- a/cloog-0.17.0/isl/doc/chicago.bst +++ /dev/null @@ -1,1726 +0,0 @@ -%%% ==================================================================== -%%% @BibTeX-style-file{ -%%% author = "Glenn Paulley", -%%% version = "4", -%%% date = "28 August 1992", -%%% time = "10:23:39 199", -%%% filename = "chicago.bst", -%%% address = "Data Structuring Group -%%% Department of Computer Science -%%% University of Waterloo -%%% Waterloo, Ontario, Canada -%%% N2L 3G1", -%%% telephone = "(519) 885-1211", -%%% FAX = "(519) 885-1208", -%%% checksum = "26323 1654 5143 37417", -%%% email = "gnpaulle@bluebox.uwaterloo.ca", -%%% codetable = "ISO/ASCII", -%%% keywords = "", -%%% supported = "yes", -%%% abstract = "A BibTeX bibliography style that follows the -%%% `B' reference style of the 13th Edition of -%%% the Chicago Manual of Style. A detailed -%%% feature list is given below.", -%%% docstring = "The checksum field above contains a CRC-16 -%%% checksum as the first value, followed by the -%%% equivalent of the standard UNIX wc (word -%%% count) utility output of lines, words, and -%%% characters. This is produced by Robert -%%% Solovay's checksum utility.", -%%% } -%%% ==================================================================== -% -% "Chicago" BibTeX style, chicago.bst -% =================================== -% -% BibTeX `chicago' style file for BibTeX version 0.99c, LaTeX version 2.09 -% Place it in a file called chicago.bst in the BibTeX search path. -% You need to include chicago.sty as a \documentstyle option. -% (Placing it in the same directory as the LaTeX document should also work.) -% This "chicago" style is based on newapa.bst (American Psych. Assoc.) -% found at ymir.claremont.edu. -% -% Citation format: (author-last-name year) -% (author-last-name and author-last-name year) -% (author-last-name, author-last-name, and author-last-name year) -% (author-last-name et al. year) -% (author-last-name) -% author-last-name (year) -% (author-last-name and author-last-name) -% (author-last-name et al.) -% (year) or (year,year) -% year or year,year -% -% Reference list ordering: alphabetical by author or whatever passes -% for author in the absence of one. -% -% This BibTeX style has support for abbreviated author lists and for -% year-only citations. This is done by having the citations -% actually look like -% -% \citeauthoryear{full-author-info}{abbrev-author-info}{year} -% -% The LaTeX style has to have the following (or similar) -% -% \let\@internalcite\cite -% \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite} -% \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite} -% \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite} -% \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite} -% \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite} -% -% These TeX macro definitions are found in chicago.sty. Additional -% commands to manipulate different components of a citation can be defined -% so that, for example, you can list author's names without parentheses -% if using a citation as a noun or object in a sentence. -% -% This file was originally copied from newapa.bst at ymir.claremont.edu. -% -% Features of chicago.bst: -% ======================= -% -% - full names used in citations, but abbreviated citations are available -% (see above) -% - if an entry has a "month", then the month and year are also printed -% as part of that bibitem. -% - all conjunctions use "and" instead of "\&" -% - major modification from Chicago Manual of Style (13th ed.) is that -% only the first author in a reference appears last name first- -% additional authors appear as J. Q. Public. -% - pages are listed as "pp. xx-xx" in all entry types except -% article entries. -% - book, inbook, and manual use "location: publisher" (or organization) -% for address and publisher. All other types list publishers separately. -% - "pp." are used to identify page numbers for all entry types except -% articles. -% - organization is used as a citation label if neither author nor editor -% is present (for manuals). -% - "et al." is used for long author and editor lists, or when "others" -% is used. -% -% Modifications and bug fixes from newapa.bst: -% =========================================== -% -% - added month, year to bib entries if month is present -% - fixed bug with In proceedings, added necessary comma after title -% - all conjunctions changed to "and" from "\&" -% - fixed bug with author labels in my.full.label: "et al." now is -% generated when "others" is an author name -% - major modification from Chicago Manual of Style (13th ed.) is that -% only the first author in a reference appears last name first- -% additional authors appear as J. Q. Public. -% - pages are listed as "pp. xx-xx" in all entry types except -% article entries. Unnecessary (IMHO) "()" around page numbers -% were removed, and page numbers now don't end with a period. -% - created chicago.sty for use with this bibstyle (required). -% - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume, -% number, and /or pages. Renamed to format.jour.vol. -% - fixed bug in formatting booktitles: additional period an error if -% book has a volume. -% - fixed bug: editors usually given redundant period before next clause -% (format.editors.dot) removed. -% - added label support for organizations, if both author and editor -% are missing (from alpha.bst). If organization is too long, then -% the key field is used for abbreviated citations. -% - In proceedings or books of several volumes, no comma was written -% between the "Volume x" and the page numbers (this was intentional -% in newapa.bst). Fixed. -% - Some journals may not have volumes/numbers, only month/year (eg. -% IEEE Computer). Fixed bug in article style that assumed volume/number -% was always present. -% -% Original documentation for newapa.sty: -% ===================================== -% -% This version was made by modifying the master file made by -% Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU), and the 'named' BibTeX -% style of Peter F. Patel-Schneider. -% -% Copyright (C) 1985, all rights reserved. -% Copying of this file is authorized only if either -% (1) you make absolutely no changes to your copy, including name, or -% (2) if you do make changes, you name it something other than 'newapa.bst'. -% There are undoubtably bugs in this style. If you make bug fixes, -% improvements, etc. please let me know. My e-mail address is: -% spencer@cgrg.ohio.state.edu or 71160.3141@compuserve.com -% -% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst', -% with lots of tweaking to make it look like APA style, along with tips -% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'. - -ENTRY - { address - author - booktitle - chapter - edition - editor - fjournal - howpublished - institution - journal - key - month - note - number - organization - pages - publisher - school - series - title - type - volume - year - } - {} - { label.year extra.label sort.year sort.label } - -INTEGERS { output.state before.all mid.sentence after.sentence after.block } - -FUNCTION {init.state.consts} -{ #0 'before.all := - #1 'mid.sentence := - #2 'after.sentence := - #3 'after.block := -} - -STRINGS { s t u } - -FUNCTION {output.nonnull} -{ 's := - output.state mid.sentence = - { ", " * write$ } - { output.state after.block = - { add.period$ write$ - newline$ - "\newblock " write$ - } - { output.state before.all = - 'write$ - { add.period$ " " * write$ } - if$ - } - if$ - mid.sentence 'output.state := - } - if$ - s -} - -% Use a colon to separate output. Used only for address/publisher -% combination in book/inbook types, address/institution for manuals, -% and organization:publisher for proceedings (inproceedings). -% -FUNCTION {output.nonnull.colon} -{ 's := - output.state mid.sentence = - { ": " * write$ } - { output.state after.block = - { add.period$ write$ - newline$ - "\newblock " write$ - } - { output.state before.all = - 'write$ - { add.period$ " " * write$ } - if$ - } - if$ - mid.sentence 'output.state := - } - if$ - s -} - -FUNCTION {output} -{ duplicate$ empty$ - 'pop$ - 'output.nonnull - if$ -} - -FUNCTION {output.colon} -{ duplicate$ empty$ - 'pop$ - 'output.nonnull.colon - if$ -} - -FUNCTION {output.check} -{ 't := - duplicate$ empty$ - { pop$ "empty " t * " in " * cite$ * warning$ } - 'output.nonnull - if$ -} - -FUNCTION {output.check.colon} -{ 't := - duplicate$ empty$ - { pop$ "empty " t * " in " * cite$ * warning$ } - 'output.nonnull.colon - if$ -} - -FUNCTION {output.year.check} -{ year empty$ - { "empty year in " cite$ * warning$ } - { write$ - " (" year * extra.label * - month empty$ - { ")" * } - { ", " * month * ")" * } - if$ - mid.sentence 'output.state := - } - if$ -} - - -FUNCTION {fin.entry} -{ add.period$ - write$ - newline$ -} - -FUNCTION {new.block} -{ output.state before.all = - 'skip$ - { after.block 'output.state := } - if$ -} - -FUNCTION {new.sentence} -{ output.state after.block = - 'skip$ - { output.state before.all = - 'skip$ - { after.sentence 'output.state := } - if$ - } - if$ -} - -FUNCTION {not} -{ { #0 } - { #1 } - if$ -} - -FUNCTION {and} -{ 'skip$ - { pop$ #0 } - if$ -} - -FUNCTION {or} -{ { pop$ #1 } - 'skip$ - if$ -} - -FUNCTION {new.block.checka} -{ empty$ - 'skip$ - 'new.block - if$ -} - -FUNCTION {new.block.checkb} -{ empty$ - swap$ empty$ - and - 'skip$ - 'new.block - if$ -} - -FUNCTION {new.sentence.checka} -{ empty$ - 'skip$ - 'new.sentence - if$ -} - -FUNCTION {new.sentence.checkb} -{ empty$ - swap$ empty$ - and - 'skip$ - 'new.sentence - if$ -} - -FUNCTION {field.or.null} -{ duplicate$ empty$ - { pop$ "" } - 'skip$ - if$ -} - -% -% Emphasize the top string on the stack. -% -FUNCTION {emphasize} -{ duplicate$ empty$ - { pop$ "" } - { "{\em " swap$ * "}" * } - if$ -} - -% -% Emphasize the top string on the stack, but add a trailing space. -% -FUNCTION {emphasize.space} -{ duplicate$ empty$ - { pop$ "" } - { "{\em " swap$ * "\/}" * } - if$ -} - -INTEGERS { nameptr namesleft numnames } -% -% Format bibliographical entries with the first author last name first, -% and subsequent authors with initials followed by last name. -% All names are formatted in this routine. -% -FUNCTION {format.names} -{ 's := - #1 'nameptr := % nameptr = 1; - s num.names$ 'numnames := % numnames = num.name$(s); - numnames 'namesleft := - { namesleft #0 > } - - { nameptr #1 = - {s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := } - {s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := } - if$ - nameptr #1 > - { namesleft #1 > - { ", " * t * } - { numnames #2 > - { "," * } - 'skip$ - if$ - t "others" = - { " et~al." * } - { " and " * t * } % from Chicago Manual of Style - if$ - } - if$ - } - 't - if$ - s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := - "\protect \index {" * t * "|hyperemph}" * - nameptr #1 + 'nameptr := % nameptr += 1; - namesleft #1 - 'namesleft := % namesleft =- 1; - } - while$ -} - -FUNCTION {my.full.label} -{ 's := - #1 'nameptr := % nameptr = 1; - s num.names$ 'numnames := % numnames = num.name$(s); - numnames 'namesleft := - { namesleft #0 > } - - { s nameptr "{vv~}{ll}" format.name$ 't := % get the next name - nameptr #1 > - { namesleft #1 > - { ", " * t * } - { numnames #2 > - { "," * } - 'skip$ - if$ - t "others" = - { " et~al." * } - { " and " * t * } % from Chicago Manual of Style - if$ - } - if$ - } - 't - if$ - s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := - "\protect \index {" * t * "|bold}" * - nameptr #1 + 'nameptr := % nameptr += 1; - namesleft #1 - 'namesleft := % namesleft =- 1; - } - while$ - -} - -FUNCTION {format.names.fml} -% -% Format names in "familiar" format, with first initial followed by -% last name. Like format.names, ALL names are formatted. -% -{ 's := - #1 'nameptr := % nameptr = 1; - s num.names$ 'numnames := % numnames = num.name$(s); - numnames 'namesleft := - { namesleft #0 > } - - { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := - - nameptr #1 > - { namesleft #1 > - { ", " * t * } - { numnames #2 > - { "," * } - 'skip$ - if$ - t "others" = - { " et~al." * } - { " and " * t * } -% { " \& " * t * } - if$ - } - if$ - } - 't - if$ - nameptr #1 + 'nameptr := % nameptr += 1; - namesleft #1 - 'namesleft := % namesleft =- 1; - } - while$ -} - -FUNCTION {format.authors} -{ author empty$ - { "" } - { author format.names } - if$ -} - -FUNCTION {format.key} -{ empty$ - { key field.or.null } - { "" } - if$ -} - -% -% Format editor names for use in the "in" types: inbook, incollection, -% inproceedings: first initial, then last names. When editors are the -% LABEL for an entry, then format.editor is used which lists editors -% by last name first. -% -FUNCTION {format.editors.fml} -{ editor empty$ - { "" } - { editor format.names.fml - editor num.names$ #1 > - { " (Eds.)" * } - { " (Ed.)" * } - if$ - } - if$ -} - -% -% Format editor names for use in labels, last names first. -% -FUNCTION {format.editors} -{ editor empty$ - { "" } - { editor format.names - editor num.names$ #1 > - { " (Eds.)" * } - { " (Ed.)" * } - if$ - } - if$ -} - -FUNCTION {format.title} -{ title empty$ - { "" } - { title "t" change.case$ } - if$ -} - -% Note that the APA style requres case changes -% in article titles. The following does not -% change cases. If you perfer it, uncomment the -% following and comment out the above. - -%FUNCTION {format.title} -%{ title empty$ -% { "" } -% { title } -% if$ -%} - -FUNCTION {n.dashify} -{ 't := - "" - { t empty$ not } - { t #1 #1 substring$ "-" = - { t #1 #2 substring$ "--" = not - { "--" * - t #2 global.max$ substring$ 't := - } - { { t #1 #1 substring$ "-" = } - { "-" * - t #2 global.max$ substring$ 't := - } - while$ - } - if$ - } - { t #1 #1 substring$ * - t #2 global.max$ substring$ 't := - } - if$ - } - while$ -} - -FUNCTION {format.btitle} -{ edition empty$ - { title emphasize } - { title empty$ - { title emphasize } - { volume empty$ % gnp - check for volume, then don't need period - { "{\em " title * "\/} (" * edition * " ed.)" * "." * } - { "{\em " title * "\/} (" * edition * " ed.)" * } - if$ - } - if$ - } - if$ -} - -FUNCTION {format.emphasize.booktitle} -{ edition empty$ - { booktitle emphasize } - { booktitle empty$ - { booktitle emphasize } - { volume empty$ % gnp - extra period an error if book has a volume - { "{\em " booktitle * "\/} (" * edition * " ed.)" * "." *} - { "{\em " booktitle * "\/} (" * edition * " ed.)" * } - if$ - } - if$ - } - if$ - } - - -FUNCTION {tie.or.space.connect} -{ duplicate$ text.length$ #3 < - { "~" } - { " " } - if$ - swap$ * * -} - -FUNCTION {either.or.check} -{ empty$ - 'pop$ - { "can't use both " swap$ * " fields in " * cite$ * warning$ } - if$ -} - -FUNCTION {format.bvolume} -{ volume empty$ - { "" } - { "Volume" volume tie.or.space.connect % gnp - changed to mixed case - series empty$ - 'skip$ - { " of " * series emphasize * } - if$ - "volume and number" number either.or.check - } - if$ -} - -FUNCTION {format.number.series} -{ volume empty$ - { number empty$ - { series field.or.null } - { output.state mid.sentence = - { "Number" } % gnp - changed to mixed case always - { "Number" } - if$ - number tie.or.space.connect - series empty$ - { "there's a number but no series in " cite$ * warning$ } - { " in " * series * } - if$ - } - if$ - } - { "" } - if$ -} - -INTEGERS { multiresult } - -FUNCTION {multi.page.check} -{ 't := - #0 'multiresult := - { multiresult not - t empty$ not - and - } - { t #1 #1 substring$ - duplicate$ "-" = - swap$ duplicate$ "," = - swap$ "+" = - or or - { #1 'multiresult := } - { t #2 global.max$ substring$ 't := } - if$ - } - while$ - multiresult -} - -FUNCTION {format.pages} -{ pages empty$ - { "" } - { pages multi.page.check - { "pp.\ " pages n.dashify tie.or.space.connect } % gnp - removed () - { "pp.\ " pages tie.or.space.connect } - if$ - } - if$ -} - -% By Young (and Spencer) -% GNP - fixed bugs with missing volume, number, and/or pages -% -% Format journal, volume, number, pages for article types. -% -FUNCTION {format.jour.vol} -{ fjournal empty$ - { journal empty$ - { "no journal in " cite$ * warning$ - "" } - { journal emphasize.space } - if$ - } - { fjournal emphasize.space } - if$ - number empty$ - { volume empty$ - { "no number and no volume in " cite$ * warning$ - "" * } - { "~{\em " * Volume * "}" * } - if$ - } - { volume empty$ - {"no volume for " cite$ * warning$ - "~(" * number * ")" * } - { "~" * - volume emphasize.space - "(" * number * ")" * * } - if$ - } - if$ - pages empty$ - {"page numbers missing in " cite$ * warning$ - "" * } % gnp - place a null string on the stack for output - { duplicate$ empty$ - { pop$ format.pages } - { ", " * pages n.dashify * } % gnp - removed pp. for articles - if$ - } - if$ -} - -FUNCTION {format.chapter.pages} -{ chapter empty$ - 'format.pages - { type empty$ - { "Chapter" } % gnp - changed to mixed case - { type "t" change.case$ } - if$ - chapter tie.or.space.connect - pages empty$ - {"page numbers missing in " cite$ * warning$} % gnp - added check - { ", " * format.pages * } - if$ - } - if$ -} - -FUNCTION {format.in.ed.booktitle} -{ booktitle empty$ - { "" } - { editor empty$ - { "In " format.emphasize.booktitle * } - { "In " format.editors.fml * ", " * format.emphasize.booktitle * } - if$ - } - if$ -} - -FUNCTION {format.thesis.type} -{ type empty$ - 'skip$ - { pop$ - type "t" change.case$ - } - if$ -} - -FUNCTION {format.tr.number} -{ type empty$ - { "Technical Report" } - 'type - if$ - number empty$ - { "t" change.case$ } - { number tie.or.space.connect } - if$ -} - -FUNCTION {format.article.crossref} -{ "See" - "\citeN{" * crossref * "}" * -} - -FUNCTION {format.crossref.editor} -{ editor #1 "{vv~}{ll}" format.name$ - editor num.names$ duplicate$ - #2 > - { pop$ " et~al." * } - { #2 < - 'skip$ - { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = - { " et~al." * } - { " and " * editor #2 "{vv~}{ll}" format.name$ * } - if$ - } - if$ - } - if$ -} - -FUNCTION {format.book.crossref} -{ volume empty$ - { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ - "In " - } - { "Volume" volume tie.or.space.connect % gnp - changed to mixed case - " of " * - } - if$ - editor empty$ - editor field.or.null author field.or.null = - or - { key empty$ - { series empty$ - { "need editor, key, or series for " cite$ * " to crossref " * - crossref * warning$ - "" * - } - { "{\em " * series * "\/}" * } - if$ - } - { key * } - if$ - } - { format.crossref.editor * } - if$ - " \citeN{" * crossref * "}" * -} - -FUNCTION {format.incoll.inproc.crossref} -{ "See" - " \citeN{" * crossref * "}" * -} - -% format.lab.names: -% -% determines "short" names for the abbreviated author information. -% "Long" labels are created in calc.label, using the routine my.full.label -% to format author and editor fields. -% -% There are 4 cases for labels. (n=3 in the example) -% a) one author Foo -% b) one to n Foo, Bar and Baz -% c) use of "and others" Foo, Bar et al. -% d) more than n Foo et al. -% -FUNCTION {format.lab.names} -{ 's := - s num.names$ 'numnames := - numnames #2 > % change number to number of others allowed before - % forcing "et al". - { s #1 "{vv~}{ll}" format.name$ - "\protect \index {" * - s #1 "{vv~}{ll}{, jj}{, f.}" format.name$ * - "}" * - "\protect\chicagoetal/" * } - { - numnames #1 - 'namesleft := - #2 'nameptr := - s #1 "{vv~}{ll}" format.name$ - "\protect \index {" * - s #1 "{vv~}{ll}{, jj}{, f.}" format.name$ * - "}" * - { namesleft #0 > } - { nameptr numnames = - { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = - { "\protect\chicagoetal/" * } - { "\protect\chicagoand/" * s nameptr "{vv~}{ll}" format.name$ * - "\protect \index {" * - s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ * - "}" * - } - if$ - } - { ", " * s nameptr "{vv~}{ll}" format.name$ * } - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ - } - if$ -} - -FUNCTION {author.key.label} -{ author empty$ - { key empty$ - { "no key, author in " cite$ * warning$ - cite$ #1 #3 substring$ } - 'key - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {editor.key.label} -{ editor empty$ - { key empty$ - { "no key, editor in " cite$ * warning$ - cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.lab.names } - if$ -} - -FUNCTION {author.key.organization.label} -% -% added - gnp. Provide label formatting by organization if author is null. -% -{ author empty$ - { organization empty$ - { key empty$ - { "no key, author or organization in " cite$ * warning$ - cite$ #1 #3 substring$ } - 'key - if$ - } - { organization } - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {editor.key.organization.label} -% -% added - gnp. Provide label formatting by organization if editor is null. -% -{ editor empty$ - { organization empty$ - { key empty$ - { "no key, editor or organization in " cite$ * warning$ - cite$ #1 #3 substring$ } - 'key - if$ - } - { organization } - if$ - } - { editor format.lab.names } - if$ -} - -FUNCTION {author.editor.key.label} -{ author empty$ - { editor empty$ - { key empty$ - { "no key, author, or editor in " cite$ * warning$ - cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.lab.names } - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {calc.label.orig} -% -% Changed - GNP. See also author.organization.sort, editor.organization.sort -% Form label for BibTeX entry. The classification of which fields are used -% for which type of entry (book, inbook, etc.) are taken from alpha.bst. -% The change here from newapa is to also include organization as a -% citation label if author or editor is missing. -% -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.key.label - { type$ "proceedings" = - 'editor.key.organization.label - { type$ "manual" = - 'author.key.organization.label - 'author.key.label - if$ - } - if$ - } - if$ - - author empty$ % generate the full label citation information. - { editor empty$ - { organization empty$ - { "no author, editor, or organization in " cite$ * warning$ - "??" } - { organization } - if$ - } - { editor my.full.label } - if$ - } - { author.key.label } - if$ - -% leave label on the stack, to be popped when required. - - "}{" * swap$ * -% year field.or.null purify$ #-1 #4 substring$ * -% -% save the year for sort processing afterwards (adding a, b, c, etc.) -% - year field.or.null purify$ #-1 #4 substring$ - 'label.year := -} - -FUNCTION {calc.label} -% -% Changed - GNP. See also author.organization.sort, editor.organization.sort -% Form label for BibTeX entry. The classification of which fields are used -% for which type of entry (book, inbook, etc.) are taken from alpha.bst. -% The change here from newapa is to also include organization as a -% citation label if author or editor is missing. -% -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.key.label - { type$ "proceedings" = - 'editor.key.organization.label - { type$ "manual" = - 'author.key.organization.label - 'author.key.label - if$ - } - if$ - } - if$ - - author empty$ % generate the full label citation information. - { editor empty$ - { organization empty$ - { "no author, editor, or organization in " cite$ * warning$ - "??" } - { organization } - if$ - } - { editor my.full.label } - if$ - } - { author my.full.label } - if$ - -% leave label on the stack, to be popped when required. - - "}{" * swap$ * "}{" * title * "}{" * -% year field.or.null purify$ #-1 #4 substring$ * -% -% save the year for sort processing afterwards (adding a, b, c, etc.) -% - year field.or.null purify$ #-1 #4 substring$ - 'label.year := -} - -FUNCTION {output.bibitem} -{ newline$ - - "\bibitem[\protect\citeauthortitleyear{" write$ - calc.label write$ - sort.year write$ - "}]{" write$ - - cite$ write$ - "}" write$ - newline$ - "" - before.all 'output.state := -} - -FUNCTION {article} -{ output.bibitem - format.authors - "author" output.check - author format.key output % added - output.year.check % added - new.block - format.title - "title" output.check - new.block - crossref missing$ - { format.jour.vol output - } - { format.article.crossref output.nonnull - format.pages output - } - if$ - new.block - note output - fin.entry -} - -FUNCTION {book} -{ output.bibitem - author empty$ - { format.editors - "author and editor" output.check } - { format.authors - output.nonnull - crossref missing$ - { "author and editor" editor either.or.check } - 'skip$ - if$ - } - if$ - output.year.check % added - new.block - format.btitle - "title" output.check - crossref missing$ - { format.bvolume output - new.block - format.number.series output - new.sentence - address output - publisher "publisher" output.check.colon - } - { new.block - format.book.crossref output.nonnull - } - if$ - new.block - note output - fin.entry -} - -FUNCTION {booklet} -{ output.bibitem - format.authors output - author format.key output % added - output.year.check % added - new.block - format.title - "title" output.check - new.block - howpublished output - address output - new.block - note output - fin.entry -} - -FUNCTION {inbook} -{ output.bibitem - author empty$ - { format.editors - "author and editor" output.check - } - { format.authors output.nonnull - crossref missing$ - { "author and editor" editor either.or.check } - 'skip$ - if$ - } - if$ - output.year.check % added - new.block - format.btitle - "title" output.check - crossref missing$ - { format.bvolume output - format.chapter.pages - "chapter and pages" output.check - new.block - format.number.series output - new.sentence - address output - publisher - "publisher" output.check.colon - } - { format.chapter.pages "chapter and pages" output.check - new.block - format.book.crossref output.nonnull - } - if$ - new.block - note output - fin.entry -} - -FUNCTION {incollection} -{ output.bibitem - format.authors - "author" output.check - author format.key output % added - output.year.check % added - new.block - format.title - "title" output.check - new.block - crossref missing$ - { format.in.ed.booktitle - "booktitle" output.check - format.bvolume output - format.number.series output - format.chapter.pages output % gnp - was special.output.nonnull -% left out comma before page numbers - new.sentence - address output - publisher "publisher" output.check.colon - } - { format.incoll.inproc.crossref - output.nonnull - format.chapter.pages output - } - if$ - new.block - note output - fin.entry -} - -FUNCTION {inproceedings} -{ output.bibitem - format.authors - "author" output.check - author format.key output % added - output.year.check % added - new.block - format.title - "title" output.check - new.block - crossref missing$ - { format.in.ed.booktitle - "booktitle" output.check - format.bvolume output - format.number.series output - address output - format.pages output - new.sentence - organization output - publisher output.colon - } - { format.incoll.inproc.crossref output.nonnull - format.pages output - } - if$ - new.block - note output - fin.entry -} - -FUNCTION {conference} { inproceedings } - -FUNCTION {manual} -{ output.bibitem - author empty$ - { editor empty$ - { organization "organization" output.check - organization format.key output } % if all else fails, use key - { format.editors "author and editor" output.check } - if$ - } - { format.authors output.nonnull } - if$ - output.year.check % added - new.block - format.btitle - "title" output.check - organization address new.block.checkb -% Reversed the order of "address" and "organization", added the ":". - address output - organization "organization" output.check.colon -% address output -% ":" output -% organization output - new.block - note output - fin.entry -} - -FUNCTION {mastersthesis} -{ output.bibitem - format.authors - "author" output.check - author format.key output % added - output.year.check % added - new.block - format.title - "title" output.check - new.block - "Master's thesis" format.thesis.type output.nonnull - school "school" output.check - address output - new.block - note output - fin.entry -} - -FUNCTION {misc} -{ output.bibitem - format.authors output - author format.key output % added - output.year.check % added - title howpublished new.block.checkb - format.title output - new.block - howpublished output - new.block - note output - fin.entry -} - -FUNCTION {phdthesis} -{ output.bibitem - format.authors - "author" output.check - author format.key output % added - output.year.check % added - new.block - format.btitle - "title" output.check - new.block - "Ph.\ D. thesis" format.thesis.type output.nonnull - school "school" output.check - address output - new.block - note output - fin.entry -} - -FUNCTION {proceedings} -{ output.bibitem - editor empty$ - { organization output - organization format.key output } % gnp - changed from author format.key - { format.editors output.nonnull } - if$ -% author format.key output % gnp - removed (should be either -% editor or organization - output.year.check % added (newapa) - new.block - format.btitle - "title" output.check - format.bvolume output - format.number.series output - address output - new.sentence - organization output - publisher output.colon - new.block - note output - fin.entry -} - -FUNCTION {techreport} -{ output.bibitem - format.authors - "author" output.check - author format.key output % added - output.year.check % added - new.block - format.title - "title" output.check - new.block - format.tr.number output.nonnull - institution - "institution" output.check - address output - new.block - note output - fin.entry -} - -FUNCTION {unpublished} -{ output.bibitem - format.authors - "author" output.check - author format.key output % added - output.year.check % added - new.block - format.title - "title" output.check - new.block - note "note" output.check - fin.entry -} - -FUNCTION {default.type} { misc } - -MACRO {jan} {"January"} - -MACRO {feb} {"February"} - -MACRO {mar} {"March"} - -MACRO {apr} {"April"} - -MACRO {may} {"May"} - -MACRO {jun} {"June"} - -MACRO {jul} {"July"} - -MACRO {aug} {"August"} - -MACRO {sep} {"September"} - -MACRO {oct} {"October"} - -MACRO {nov} {"November"} - -MACRO {dec} {"December"} - -MACRO {acmcs} {"ACM Computing Surveys"} - -MACRO {acta} {"Acta Informatica"} - -MACRO {ai} {"Artificial Intelligence"} - -MACRO {cacm} {"Communications of the ACM"} - -MACRO {ibmjrd} {"IBM Journal of Research and Development"} - -MACRO {ibmsj} {"IBM Systems Journal"} - -MACRO {ieeese} {"IEEE Transactions on Software Engineering"} - -MACRO {ieeetc} {"IEEE Transactions on Computers"} - -MACRO {ieeetcad} - {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} - -MACRO {ipl} {"Information Processing Letters"} - -MACRO {jacm} {"Journal of the ACM"} - -MACRO {jcss} {"Journal of Computer and System Sciences"} - -MACRO {scp} {"Science of Computer Programming"} - -MACRO {sicomp} {"SIAM Journal on Computing"} - -MACRO {tocs} {"ACM Transactions on Computer Systems"} - -MACRO {tods} {"ACM Transactions on Database Systems"} - -MACRO {tog} {"ACM Transactions on Graphics"} - -MACRO {toms} {"ACM Transactions on Mathematical Software"} - -MACRO {toois} {"ACM Transactions on Office Information Systems"} - -MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} - -MACRO {tcs} {"Theoretical Computer Science"} - -READ - -FUNCTION {sortify} -{ purify$ - "l" change.case$ -} - -INTEGERS { len } - -FUNCTION {chop.word} -{ 's := - 'len := - s #1 len substring$ = - { s len #1 + global.max$ substring$ } - 's - if$ -} - - - -FUNCTION {sort.format.names} -{ 's := - #1 'nameptr := - "" - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { nameptr #2 = - { year field.or.null purify$ #-1 #4 substring$ * } - 'skip$ - if$ - nameptr #1 > - { " " * } - 'skip$ - if$ - s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := - nameptr numnames = t "others" = and - { " et~al" * } - { t sortify * } - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ -} - -FUNCTION {sort.format.title} -{ 't := - "A " #2 - "An " #3 - "The " #4 t chop.word - chop.word - chop.word - sortify - #1 global.max$ substring$ -} - -FUNCTION {author.sort} -{ author empty$ - { key empty$ - { "to sort, need author or key in " cite$ * warning$ - "" } - { key sortify } - if$ - } - { author sort.format.names } - if$ -} - -FUNCTION {editor.sort} -{ editor empty$ - { key empty$ - { "to sort, need editor or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { editor sort.format.names } - if$ -} - -FUNCTION {author.editor.sort} -{ author empty$ - { "missing author in " cite$ * warning$ - editor empty$ - { key empty$ - { "to sort, need author, editor, or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { editor sort.format.names } - if$ - } - { author sort.format.names } - if$ -} - -FUNCTION {author.organization.sort} -% -% added - GNP. Stack author or organization for sorting (from alpha.bst). -% Unlike alpha.bst, we need entire names, not abbreviations -% -{ author empty$ - { organization empty$ - { key empty$ - { "to sort, need author, organization, or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { organization sortify } - if$ - } - { author sort.format.names } - if$ -} - -FUNCTION {editor.organization.sort} -% -% added - GNP. Stack editor or organization for sorting (from alpha.bst). -% Unlike alpha.bst, we need entire names, not abbreviations -% -{ editor empty$ - { organization empty$ - { key empty$ - { "to sort, need editor, organization, or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { organization sortify } - if$ - } - { editor sort.format.names } - if$ -} - -FUNCTION {presort} -% -% Presort creates the bibentry's label via a call to calc.label, and then -% sorts the entries based on entry type. Chicago.bst adds support for -% including organizations as the sort key; the following is stolen from -% alpha.bst. -% -{ %calc.label sortify % recalculate bibitem label - %year field.or.null purify$ #-1 #4 substring$ * % add year - %duplicate$ warning$ - %" " - %* - type$ "book" = - type$ "inbook" = - or - 'author.editor.sort - { type$ "proceedings" = - 'editor.organization.sort - { type$ "manual" = - 'author.organization.sort - 'author.sort - if$ - } - if$ - } - if$ - #1 entry.max$ substring$ % added for newapa - 'sort.label := % added for newapa - sort.label % added for newapa - %* - " " - * - title field.or.null - sort.format.title - * - #1 entry.max$ substring$ - 'sort.key$ := -} - -ITERATE {presort} - -SORT % by label, year, author/editor, title - -STRINGS { last.label next.extra } - -INTEGERS { last.extra.num } - -FUNCTION {initialize.extra.label.stuff} -{ #0 int.to.chr$ 'last.label := - "" 'next.extra := - #0 'last.extra.num := -} - -FUNCTION {forward.pass} -% -% Pass through all entries, comparing current entry to last one. -% Need to concatenate year to the stack (done by calc.label) to determine -% if two entries are the same (see presort) -% -{ last.label - calc.label.orig year field.or.null purify$ #-1 #4 substring$ * % add year - #1 entry.max$ substring$ = % are they equal? - { last.extra.num #1 + 'last.extra.num := - last.extra.num int.to.chr$ 'extra.label := - } - { "a" chr.to.int$ 'last.extra.num := - "" 'extra.label := - calc.label.orig year field.or.null purify$ #-1 #4 substring$ * % add year - #1 entry.max$ substring$ 'last.label := % assign to last.label - } - if$ -} - -FUNCTION {reverse.pass} -{ next.extra "b" = - { "a" 'extra.label := } - 'skip$ - if$ - label.year extra.label * 'sort.year := - extra.label 'next.extra := -} - -EXECUTE {initialize.extra.label.stuff} - -ITERATE {forward.pass} - -REVERSE {reverse.pass} - -FUNCTION {bib.sort.order} -{ sort.label - " " - * - year field.or.null sortify - * - " " - * - title field.or.null - sort.format.title - * - #1 entry.max$ substring$ - 'sort.key$ := -} - -ITERATE {bib.sort.order} - -SORT % by sort.label, year, title --- giving final bib. order. - -FUNCTION {begin.bib} - -{ preamble$ empty$ - 'skip$ - { preamble$ write$ newline$ } - if$ - "\begin{thebibliography}{}" write$ newline$ -} - - -EXECUTE {begin.bib} - -EXECUTE {init.state.consts} - -ITERATE {call.type$} - -FUNCTION {end.bib} -{ newline$ - "\end{thebibliography}" write$ newline$ -} - -EXECUTE {end.bib} - diff --git a/cloog-0.17.0/isl/doc/chicago.sty b/cloog-0.17.0/isl/doc/chicago.sty deleted file mode 100644 index 33588db..0000000 --- a/cloog-0.17.0/isl/doc/chicago.sty +++ /dev/null @@ -1,320 +0,0 @@ -% -*- LaTeX -*- -%%% ==================================================================== -%%% @LaTeX-style-file{ -%%% author = "Glenn Paulley", -%%% version = "4", -%%% date = "31 August 1992", -%%% time = "09:42:44 199", -%%% filename = "chicago.sty", -%%% address = "Data Structuring Group -%%% Department of Computer Science -%%% University of Waterloo -%%% Waterloo, Ontario, Canada -%%% N2L 3G1", -%%% telephone = "(519) 885-1211", -%%% FAX = "(519) 885-1208", -%%% checksum = "44674 264 1050 10394", -%%% email = "gnpaulle@bluebox.uwaterloo.ca", -%%% codetable = "ISO/ASCII", -%%% keywords = "", -%%% supported = "yes", -%%% abstract = "Contains the LaTeX style command definitions -%%% for the Chicago BibTeX styles chicago.bst and -%%% chicagoa.bst. For details, see below.", -%%% docstring = "The checksum field above contains a CRC-16 -%%% checksum as the first value, followed by the -%%% equivalent of the standard UNIX wc (word -%%% count) utility output of lines, words, and -%%% characters. This is produced by Robert -%%% Solovay's checksum utility.", -%%% } -%%% ==================================================================== -% -% chicago.sty: Style file for use with bibtex style chicago.bst, for -% bibliographies formatted according to the 13th Edition of the Chicago -% Manual of Style. -% -% 'newapa.bst' was made from 'plain.bst', 'named.bst', and 'apalike.bst', -% with lots of tweaking to make it look like APA style, along with tips -% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'. -% newapa.sty formed the basis of this style, chicago.sty. Author-date -% references in newapa.bst formed the basis for chicago.bst. Chicagoa.bst -% supports annotations. -% -% Version 4 (August, 1992): -% - fixed chicago.bst and chicagoa.bst to handle long author lists in -% sorting -% - fixed chicago.bst and chicagoa.bst so that missing page numbers in -% ``article'' entries are handled correctly -% - modified chicago.sty to format entries with 2nd and subsequent lines -% indented. -% -% Citation format: (author-last-name year) -% (author-last-name and author-last-name year) -% (author-last-name et al. year) -% (author-last-name) -% author-last-name -% author-last-name (year) -% (author-last-name and author-last-name) -% (author-last-name et al.) -% (year) or (year,year) -% year or year,year -% -% Reference list ordering: alphabetical by author or whatever passes -% for author in the absence of one. -% -% This BibTeX style has support for abbreviated author lists and for -% year-only citations. This is done by having the citations -% actually look like -% -% \citeauthoryear{full-author-info}{abbrev-author-info}{year} -% -% The LaTeX style has to have the following (or similar) -% -% \let\@internalcite\cite -% \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite} -% \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite} -% \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite} -% \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite} -% \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite} -% -% ------------------------------------------------------------------------- -% This file implements citations for the ``chicago'' bibliography style. -% Place it in a file called chicago.sty in the TeX search path. -%(Placing it in the same directory as the LaTeX document should also work.) -% -% This file is a modification of the ``newapa'' LaTeX style, -% originally adapted by Steven Spencer from the ``apalike'' LaTeX style. -% It was originally modified by Stephen N. Spencer, with further -% modifications by Young U. Ryu. -% -% The ``chicago'' BibTeX bibliography style creates citations with labels: -% \citeauthoryear{author-info}{abbrev. author-info}{year} -% -% These labels are processed by the following LaTeX commands: -% -% \cite{key} -% which produces citations with full author list and year. -% eg. (Brown 1978; Jarke, Turner, Stohl, et al. 1985) -% \citeNP{key} -% which produces citations with full author list and year, but without -% enclosing parentheses: -% eg. Brown 1978; Jarke, Turner and Stohl 1985 -% \citeA{key} -% which produces citations with only the full author list. -% eg. (Brown; Jarke, Turner and Stohl) -% \citeANP{key} -% which produces citations with only the full author list, without -% parentheses eg. Brown; Jarke, Turner and Stohl -% \citeN{key} -% which produces citations with the full author list and year, but -% can be used as nouns in a sentence; no parentheses appear around -% the author names, but only around the year. -% eg. Shneiderman (1978) states that...... -% \citeN should only be used for a single citation. -% \shortcite{key} -% which produces citations with abbreviated author list and year. -% \shortciteNP{key} -% which produces citations with abbreviated author list and year. -% \shortciteA{key} -% which produces only the abbreviated author list. -% \shortciteANP{key} -% which produces only the abbreviated author list. -% \shortciteN{key} -% which produces the abbreviated author list and year, with only the -% year in parentheses. Use with only one citation. -% \citeyear{key} -% which produces the year information only, within parentheses. -% \citeyearNP{key} -% which produces the year information only. -% -% Abbreviated author lists use the ``et al.'' construct. -% -% `NP' means `no parentheses'. -% -% This LaTeX style file must be used with the ``chicago'' or ``chicagoa'' -% (annotated chicago style) BibTeX styles. -% -\typeout{Using Chicago Manual of Style bibliography: 31 August 1992} -% -% ------------------------------------------------------------------------- -% -% Citation macros. -% -\def\chicagoand/{ and } -\def\chicagoetal/{ et~al.} -% -\let\@internalcite\cite -% -\def\cite{\def\@citeseppen{-1000}% - \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}% - \def\citeauthortitleyear##1##2##3##4{##1\ ##4}\@internalcite} -\def\citeNP{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2\fi}% - \def\citeauthortitleyear##1##2##3##4{##1\ ##4}\@internalcite} -\def\citetitleN{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2)\else{)}\fi}% - \def\citeauthortitleyear##1##2##3##4{##3\ (##1; ##4}\@citedata} -\def\citeN{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2)\else{)}\fi}% - \def\citeauthortitleyear##1##2##3##4{##1\ (##4}\@citedata} -\def\citeA{\def\@citeseppen{-1000}% - \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}% - \def\citeauthortitleyear##1##2##3##4{##1}\@internalcite} -\def\citeANP{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2\fi}% - \def\citeauthortitleyear##1##2##3##4{##1}\@internalcite} -% -\def\shortcite{\def\@citeseppen{-1000}% - \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}% - \def\citeauthortitleyear##1##2##3##4{##2\ ##4}\@internalcite} -\def\shortciteNP{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2\fi}% - \def\citeauthortitleyear##1##2##3##4{##2\ ##4}\@internalcite} -\def\shortciteN{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2)\else{)}\fi}% - \def\citeauthortitleyear##1##2##3##4{##2\ (##4}\@citedata} -\def\shortciteA{\def\@citeseppen{-1000}% - \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}% - \def\citeauthortitleyear##1##2##3##4{##2}\@internalcite} -\def\shortciteANP{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2\fi}% - \def\citeauthortitleyear##1##2##3##4{##2}\@internalcite} -% -\def\citeyear{\def\@citeseppen{-1000}% - \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}% - \def\citeauthortitleyear##1##2##3##4{##4}\@citedata} -\def\citeyearNP{\def\@citeseppen{-1000}% - \def\@cite##1##2{##1\if@tempswa , ##2\fi}% - \def\citeauthortitleyear##1##2##3##4{##4}\@citedata} - -% -% \@citedata and \@citedatax: -% -% Place commas in-between citations in the same \citeyear, \citeyearNP, -% \citeN, or \shortciteN command. -% Use something like \citeN{ref1,ref2,ref3} and \citeN{ref4} for a list. -% -\def\@citedata{% - \@ifnextchar [{\@tempswatrue\@citedatax}% - {\@tempswafalse\@citedatax[]}% -} - -\def\@citedatax[#1]#2{% -\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi% - \def\@citea{}\@cite{\@for\@citeb:=#2\do% - {\@citea\def\@citea{), }\@ifundefined% by Young - {b@\@citeb}{{\bf ?}% - \@warning{Citation `\@citeb' on page \thepage \space undefined}}% -{\csname b@\@citeb\endcsname}}}{#1}}% - -\@ifpackageloaded{hyperref}{% - \let\BRorg@citedatax\@citedatax - \def\@citedatax[#1]#2{% - \BRorg@citedatax[#1]{#2}% - \Hy@backout{#2}% - }% -}{} -\@ifpackageloaded{hyperref}{% -\def\hyperemph#1{{\em\hyperpage{#1}}}% -\def\bold#1{{\bf\hyperpage{#1}}}% -}{% -\def\hyperemph#1{{\em #1}}% -\def\bold#1{{\bf #1}}% -} - -\def\BR@@lbibitem[#1]#2#3\par{% - \BRorg@bibitem[#1]{#2}#3\hfill\penalty100\hbox{} - \newblock - \backref\hfill[{\csname br@#2\endcsname}% - ]\parskip=-10pt\penalty-10000\hbox{}\nobreak\par -}% -\def\BR@@bibitem#1#2\par{% - \BRorg@bibitem{#1}#2 - \newblock - \backref\penalty-100\hbox{}\nobreak\hfill[\hbox{\csname br@#2\endcsname}% - ]\par -} -\def\thepageorcolor{\thepage} -\def\Hy@backout#1{% - \@bsphack - \ifx\@empty\@currentlabel - \protected@write\@auxout{}{% - \string\@writefile{brf}{% - \string\backcite{#1}{{\thepageorcolor}{(document)}{Doc-Start}}% - }% - }% - \else - \protected@write\@auxout{}{% - \string\@writefile{brf}{% - \string\backcite{#1}{{\thepageorcolor}{\@currentlabel}{\@currentHref}}% - }% - }% - \fi - \@esphack -} - -% don't box citations, separate with ; and a space -% also, make the penalty between citations negative: a good place to break. -% -\def\@citex[#1]#2{% -\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi% - \def\@citea{}\@cite{\@for\@citeb:=#2\do% - {\@citea\def\@citea{; }\@ifundefined% by Young - {b@\@citeb}{{\bf ?}% - \@warning{Citation `\@citeb' on page \thepage \space undefined}}% -{\csname b@\@citeb\endcsname}}}{#1}}% - -% (from apalike.sty) -% No labels in the bibliography. -% -\def\@biblabel#1{} - -% (from apalike.sty) -% Set length of hanging indentation for bibliography entries. -% -\newlength{\bibhang} -\setlength{\bibhang}{2em} - -% Indent second and subsequent lines of bibliographic entries. Stolen -% from openbib.sty: \newblock is set to {}. - -\newdimen\bibindent -\bibindent=1.5em -\@ifundefined{refname}% - {\@ifundefined{chapter}% - {\newcommand{\refname}{References}}% - {\newcommand{\refname}{Bibliography}}% - }% - {}% -\@ifundefined{chapter}% - {\def\thebibliography#1{\section*{\refname\@mkboth - {\uppercase{\refname}}{\uppercase{\refname}}} - \addcontentsline{toc}{section}{References} - \list - {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]} - \leftmargin\labelwidth - \advance\leftmargin\labelsep - \advance\leftmargin\bibindent - \itemindent -\bibindent - \listparindent \itemindent - \parsep \z@ - \usecounter{enumi}} - \def\newblock{} - \sloppy - \sfcode`\.=1000\relax}} - {\def\thebibliography#1{\chapter*{\refname\@mkboth - {\refname}{\refname}} - \addcontentsline{toc}{chapter}{References} - \list - {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]} - \leftmargin\labelwidth - \advance\leftmargin\labelsep - \advance\leftmargin\bibindent - \itemindent -\bibindent - \listparindent \itemindent - \parsep \z@ - \usecounter{enumi}} - \def\newblock{} - \sloppy - \sfcode`\.=1000\relax}} diff --git a/cloog-0.17.0/isl/doc/implementation.tex b/cloog-0.17.0/isl/doc/implementation.tex deleted file mode 100644 index d5ece80..0000000 --- a/cloog-0.17.0/isl/doc/implementation.tex +++ /dev/null @@ -1,2036 +0,0 @@ -\section{Sets and Relations} - -\begin{definition}[Polyhedral Set] -A {\em polyhedral set}\index{polyhedral set} $S$ is a finite union of basic sets -$S = \bigcup_i S_i$, each of which can be represented using affine -constraints -$$ -S_i : \Z^n \to 2^{\Z^d} : \vec s \mapsto -S_i(\vec s) = -\{\, \vec x \in \Z^d \mid \exists \vec z \in \Z^e : -A \vec x + B \vec s + D \vec z + \vec c \geq \vec 0 \,\} -, -$$ -with $A \in \Z^{m \times d}$, -$B \in \Z^{m \times n}$, -$D \in \Z^{m \times e}$ -and $\vec c \in \Z^m$. -\end{definition} - -\begin{definition}[Parameter Domain of a Set] -Let $S \in \Z^n \to 2^{\Z^d}$ be a set. -The {\em parameter domain} of $S$ is the set -$$\pdom S \coloneqq \{\, \vec s \in \Z^n \mid S(\vec s) \ne \emptyset \,\}.$$ -\end{definition} - -\begin{definition}[Polyhedral Relation] -A {\em polyhedral relation}\index{polyhedral relation} -$R$ is a finite union of basic relations -$R = \bigcup_i R_i$ of type -$\Z^n \to 2^{\Z^{d_1+d_2}}$, -each of which can be represented using affine -constraints -$$ -R_i = \vec s \mapsto -R_i(\vec s) = -\{\, \vec x_1 \to \vec x_2 \in \Z^{d_1} \times \Z^{d_2} -\mid \exists \vec z \in \Z^e : -A_1 \vec x_1 + A_2 \vec x_2 + B \vec s + D \vec z + \vec c \geq \vec 0 \,\} -, -$$ -with $A_i \in \Z^{m \times d_i}$, -$B \in \Z^{m \times n}$, -$D \in \Z^{m \times e}$ -and $\vec c \in \Z^m$. -\end{definition} - -\begin{definition}[Parameter Domain of a Relation] -Let $R \in \Z^n \to 2^{\Z^{d+d}}$ be a relation. -The {\em parameter domain} of $R$ is the set -$$\pdom R \coloneqq \{\, \vec s \in \Z^n \mid R(\vec s) \ne \emptyset \,\}.$$ -\end{definition} - -\begin{definition}[Domain of a Relation] -Let $R \in \Z^n \to 2^{\Z^{d+d}}$ be a relation. -The {\em domain} of $R$ is the polyhedral set -$$\domain R \coloneqq \vec s \mapsto -\{\, \vec x_1 \in \Z^{d_1} \mid \exists \vec x_2 \in \Z^{d_2} : -(\vec x_1, \vec x_2) \in R(\vec s) \,\} -. -$$ -\end{definition} - -\begin{definition}[Range of a Relation] -Let $R \in \Z^n \to 2^{\Z^{d+d}}$ be a relation. -The {\em range} of $R$ is the polyhedral set -$$ -\range R \coloneqq \vec s \mapsto -\{\, \vec x_2 \in \Z^{d_2} \mid \exists \vec x_1 \in \Z^{d_1} : -(\vec x_1, \vec x_2) \in R(\vec s) \,\} -. -$$ -\end{definition} - -\begin{definition}[Composition of Relations] -Let $R \in \Z^n \to 2^{\Z^{d_1+d_2}}$ and -$S \in \Z^n \to 2^{\Z^{d_2+d_3}}$ be two relations, -then the composition of -$R$ and $S$ is defined as -$$ -S \circ R \coloneqq -\vec s \mapsto -\{\, \vec x_1 \to \vec x_3 \in \Z^{d_1} \times \Z^{d_3} -\mid \exists \vec x_2 \in \Z^{d_2} : -\vec x_1 \to \vec x_2 \in R(\vec s) \wedge -\vec x_2 \to \vec x_3 \in S(\vec s) -\,\} -. -$$ -\end{definition} - -\begin{definition}[Difference Set of a Relation] -Let $R \in \Z^n \to 2^{\Z^{d+d}}$ be a relation. -The difference set ($\Delta \, R$) of $R$ is the set -of differences between image elements and the corresponding -domain elements, -$$ -\diff R \coloneqq -\vec s \mapsto -\{\, \vec \delta \in \Z^{d} \mid \exists \vec x \to \vec y \in R : -\vec \delta = \vec y - \vec x -\,\} -$$ -\end{definition} - -\section{Simple Hull}\label{s:simple hull} - -It is sometimes useful to have a single -basic set or basic relation that contains a given set or relation. -For rational sets, the obvious choice would be to compute the -(rational) convex hull. For integer sets, the obvious choice -would be the integer hull. -However, {\tt isl} currently does not support an integer hull operation -and even if it did, it would be fairly expensive to compute. -The convex hull operation is supported, but it is also fairly -expensive to compute given only an implicit representation. - -Usually, it is not required to compute the exact integer hull, -and an overapproximation of this hull is sufficient. -The ``simple hull'' of a set is such an overapproximation -and it is defined as the (inclusion-wise) smallest basic set -that is described by constraints that are translates of -the constraints in the input set. -This means that the simple hull is relatively cheap to compute -and that the number of constraints in the simple hull is no -larger than the number of constraints in the input. -\begin{definition}[Simple Hull of a Set] -The {\em simple hull} of a set -$S = \bigcup_{1 \le i \le v} S_i$, with -$$ -S : \Z^n \to 2^{\Z^d} : \vec s \mapsto -S(\vec s) = -\left\{\, \vec x \in \Z^d \mid \exists \vec z \in \Z^e : -\bigvee_{1 \le i \le v} -A_i \vec x + B_i \vec s + D_i \vec z + \vec c_i \geq \vec 0 \,\right\} -$$ -is the set -$$ -H : \Z^n \to 2^{\Z^d} : \vec s \mapsto -S(\vec s) = -\left\{\, \vec x \in \Z^d \mid \exists \vec z \in \Z^e : -\bigwedge_{1 \le i \le v} -A_i \vec x + B_i \vec s + D_i \vec z + \vec c_i + \vec K_i \geq \vec 0 -\,\right\} -, -$$ -with $\vec K_i$ the (component-wise) smallest non-negative integer vectors -such that $S \subseteq H$. -\end{definition} -The $\vec K_i$ can be obtained by solving a number of -LP problems, one for each element of each $\vec K_i$. -If any LP problem is unbounded, then the corresponding constraint -is dropped. - -\section{Parametric Integer Programming} - -\subsection{Introduction}\label{s:intro} - -Parametric integer programming \shortcite{Feautrier88parametric} -is used to solve many problems within the context of the polyhedral model. -Here, we are mainly interested in dependence analysis \shortcite{Fea91} -and in computing a unique representation for existentially quantified -variables. The latter operation has been used for counting elements -in sets involving such variables -\shortcite{BouletRe98,Verdoolaege2005experiences} and lies at the core -of the internal representation of {\tt isl}. - -Parametric integer programming was first implemented in \texttt{PipLib}. -An alternative method for parametric integer programming -was later implemented in {\tt barvinok} \cite{barvinok-0.22}. -This method is not based on Feautrier's algorithm, but on rational -generating functions \cite{Woods2003short} and was inspired by the -``digging'' technique of \shortciteN{DeLoera2004Three} for solving -non-parametric integer programming problems. - -In the following sections, we briefly recall the dual simplex -method combined with Gomory cuts and describe some extensions -and optimizations. The main algorithm is applied to a matrix -data structure known as a tableau. In case of parametric problems, -there are two tableaus, one for the main problem and one for -the constraints on the parameters, known as the context tableau. -The handling of the context tableau is described in \autoref{s:context}. - -\subsection{The Dual Simplex Method} - -Tableaus can be represented in several slightly different ways. -In {\tt isl}, the dual simplex method uses the same representation -as that used by its incremental LP solver based on the \emph{primal} -simplex method. The implementation of this LP solver is based -on that of {\tt Simplify} \shortcite{Detlefs2005simplify}, which, in turn, -was derived from the work of \shortciteN{Nelson1980phd}. -In the original \shortcite{Nelson1980phd}, the tableau was implemented -as a sparse matrix, but neither {\tt Simplify} nor the current -implementation of {\tt isl} does so. - -Given some affine constraints on the variables, -$A \vec x + \vec b \ge \vec 0$, the tableau represents the relationship -between the variables $\vec x$ and non-negative variables -$\vec y = A \vec x + \vec b$ corresponding to the constraints. -The initial tableau contains $\begin{pmatrix} -\vec b & A -\end{pmatrix}$ and expresses the constraints $\vec y$ in the rows in terms -of the variables $\vec x$ in the columns. The main operation defined -on a tableau exchanges a column and a row variable and is called a pivot. -During this process, some coefficients may become rational. -As in the \texttt{PipLib} implementation, -{\tt isl} maintains a shared denominator per row. -The sample value of a tableau is one where each column variable is assigned -zero and each row variable is assigned the constant term of the row. -This sample value represents a valid solution if each constraint variable -is assigned a non-negative value, i.e., if the constant terms of -rows corresponding to constraints are all non-negative. - -The dual simplex method starts from an initial sample value that -may be invalid, but that is known to be (lexicographically) no -greater than any solution, and gradually increments this sample value -through pivoting until a valid solution is obtained. -In particular, each pivot exchanges a row variable -$r = -n + \sum_i a_i \, c_i$ with negative -sample value $-n$ with a column variable $c_j$ -such that $a_j > 0$. Since $c_j = (n + r - \sum_{i\ne j} a_i \, c_i)/a_j$, -the new row variable will have a positive sample value $n$. -If no such column can be found, then the problem is infeasible. -By always choosing the column that leads to the (lexicographically) -smallest increment in the variables $\vec x$, -the first solution found is guaranteed to be the (lexicographically) -minimal solution \cite{Feautrier88parametric}. -In order to be able to determine the smallest increment, the tableau -is (implicitly) extended with extra rows defining the original -variables in terms of the column variables. -If we assume that all variables are non-negative, then we know -that the zero vector is no greater than the minimal solution and -then the initial extended tableau looks as follows. -$$ -\begin{tikzpicture} -\matrix (m) [matrix of math nodes] -{ -& {} & 1 & \vec c \\ -\vec x && |(top)| \vec 0 & I \\ -\vec r && \vec b & |(bottom)|A \\ -}; -\begin{pgfonlayer}{background} -\node (core) [inner sep=0pt,fill=black!20,right delimiter=),left delimiter=(,fit=(top)(bottom)] {}; -\end{pgfonlayer} -\end{tikzpicture} -$$ -Each column in this extended tableau is lexicographically positive -and will remain so because of the column choice explained above. -It is then clear that the value of $\vec x$ will increase in each step. -Note that there is no need to store the extra rows explicitly. -If a given $x_i$ is a column variable, then the corresponding row -is the unit vector $e_i$. If, on the other hand, it is a row variable, -then the row already appears somewhere else in the tableau. - -In case of parametric problems, the sign of the constant term -may depend on the parameters. Each time the constant term of a constraint row -changes, we therefore need to check whether the new term can attain -negative and/or positive values over the current set of possible -parameter values, i.e., the context. -If all these terms can only attain non-negative values, the current -state of the tableau represents a solution. If one of the terms -can only attain non-positive values and is not identically zero, -the corresponding row can be pivoted. -Otherwise, we pick one of the terms that can attain both positive -and negative values and split the context into a part where -it only attains non-negative values and a part where it only attains -negative values. - -\subsection{Gomory Cuts} - -The solution found by the dual simplex method may have -non-integral coordinates. If so, some rational solutions -(including the current sample value), can be cut off by -applying a (parametric) Gomory cut. -Let $r = b(\vec p) + \sp {\vec a} {\vec c}$ be the row -corresponding to the first non-integral coordinate of $\vec x$, -with $b(\vec p)$ the constant term, an affine expression in the -parameters $\vec p$, i.e., $b(\vec p) = \sp {\vec f} {\vec p} + g$. -Note that only row variables can attain -non-integral values as the sample value of the column variables is zero. -Consider the expression -$b(\vec p) - \ceil{b(\vec p)} + \sp {\fract{\vec a}} {\vec c}$, -with $\ceil\cdot$ the ceiling function and $\fract\cdot$ the -fractional part. This expression is negative at the sample value -since $\vec c = \vec 0$ and $r = b(\vec p)$ is fractional, i.e., -$\ceil{b(\vec p)} > b(\vec p)$. On the other hand, for each integral -value of $r$ and $\vec c \ge 0$, the expression is non-negative -because $b(\vec p) - \ceil{b(\vec p)} > -1$. -Imposing this expression to be non-negative therefore does not -invalidate any integral solutions, while it does cut away the current -fractional sample value. To be able to formulate this constraint, -a new variable $q = \floor{-b(\vec p)} = - \ceil{b(\vec p)}$ is added -to the context. This integral variable is uniquely defined by the constraints -$0 \le -d \, b(\vec p) - d \, q \le d - 1$, with $d$ the common -denominator of $\vec f$ and $g$. In practice, the variable -$q' = \floor{\sp {\fract{-f}} {\vec p} + \fract{-g}}$ is used instead -and the coefficients of the new constraint are adjusted accordingly. -The sign of the constant term of this new constraint need not be determined -as it is non-positive by construction. -When several of these extra context variables are added, it is important -to avoid adding duplicates. -Recent versions of {\tt PipLib} also check for such duplicates. - -\subsection{Negative Unknowns and Maximization} - -There are two places in the above algorithm where the unknowns $\vec x$ -are assumed to be non-negative: the initial tableau starts from -sample value $\vec x = \vec 0$ and $\vec c$ is assumed to be non-negative -during the construction of Gomory cuts. -To deal with negative unknowns, \shortciteN[Appendix A.2]{Fea91} -proposed to use a ``big parameter'', say $M$, that is taken to be -an arbitrarily large positive number. Instead of looking for the -lexicographically minimal value of $\vec x$, we search instead -for the lexicographically minimal value of $\vec x' = \vec M + \vec x$. -The sample value $\vec x' = \vec 0$ of the initial tableau then -corresponds to $\vec x = -\vec M$, which is clearly not greater than -any potential solution. The sign of the constant term of a row -is determined lexicographically, with the coefficient of $M$ considered -first. That is, if the coefficient of $M$ is not zero, then its sign -is the sign of the entire term. Otherwise, the sign is determined -by the remaining affine expression in the parameters. -If the original problem has a bounded optimum, then the final sample -value will be of the form $\vec M + \vec v$ and the optimal value -of the original problem is then $\vec v$. -Maximization problems can be handled in a similar way by computing -the minimum of $\vec M - \vec x$. - -When the optimum is unbounded, the optimal value computed for -the original problem will involve the big parameter. -In the original implementation of {\tt PipLib}, the big parameter could -even appear in some of the extra variables $\vec q$ created during -the application of a Gomory cut. The final result could then contain -implicit conditions on the big parameter through conditions on such -$\vec q$ variables. This problem was resolved in later versions -of {\tt PipLib} by taking $M$ to be divisible by any positive number. -The big parameter can then never appear in any $\vec q$ because -$\fract {\alpha M } = 0$. It should be noted, though, that an unbounded -problem usually (but not always) -indicates an incorrect formulation of the problem. - -The original version of {\tt PipLib} required the user to ``manually'' -add a big parameter, perform the reformulation and interpret the result -\shortcite{Feautrier02}. Recent versions allow the user to simply -specify that the unknowns may be negative or that the maximum should -be computed and then these transformations are performed internally. -Although there are some application, e.g., -that of \shortciteN{Feautrier92multi}, -where it is useful to have explicit control over the big parameter, -negative unknowns and maximization are by far the most common applications -of the big parameter and we believe that the user should not be bothered -with such implementation issues. -The current version of {\tt isl} therefore does not -provide any interface for specifying big parameters. Instead, the user -can specify whether a maximum needs to be computed and no assumptions -are made on the sign of the unknowns. Instead, the sign of the unknowns -is checked internally and a big parameter is automatically introduced when -needed. For compatibility with {\tt PipLib}, the {\tt isl\_pip} tool -does explicitly add non-negativity constraints on the unknowns unless -the \verb+Urs_unknowns+ option is specified. -Currently, there is also no way in {\tt isl} of expressing a big -parameter in the output. Even though -{\tt isl} makes the same divisibility assumption on the big parameter -as recent versions of {\tt PipLib}, it will therefore eventually -produce an error if the problem turns out to be unbounded. - -\subsection{Preprocessing} - -In this section, we describe some transformations that are -or can be applied in advance to reduce the running time -of the actual dual simplex method with Gomory cuts. - -\subsubsection{Feasibility Check and Detection of Equalities} - -Experience with the original {\tt PipLib} has shown that Gomory cuts -do not perform very well on problems that are (non-obviously) empty, -i.e., problems with rational solutions, but no integer solutions. -In {\tt isl}, we therefore first perform a feasibility check on -the original problem considered as a non-parametric problem -over the combined space of unknowns and parameters. -In fact, we do not simply check the feasibility, but we also -check for implicit equalities among the integer points by computing -the integer affine hull. The algorithm used is the same as that -described in \autoref{s:GBR} below. -Computing the affine hull is fairly expensive, but it can -bring huge benefits if any equalities can be found or if the problem -turns out to be empty. - -\subsubsection{Constraint Simplification} - -If the coefficients of the unknown and parameters in a constraint -have a common factor, then this factor should be removed, possibly -rounding down the constant term. For example, the constraint -$2 x - 5 \ge 0$ should be simplified to $x - 3 \ge 0$. -{\tt isl} performs such simplifications on all sets and relations. -Recent versions of {\tt PipLib} also perform this simplification -on the input. - -\subsubsection{Exploiting Equalities}\label{s:equalities} - -If there are any (explicit) equalities in the input description, -{\tt PipLib} converts each into a pair of inequalities. -It is also possible to write $r$ equalities as $r+1$ inequalities -\shortcite{Feautrier02}, but it is even better to \emph{exploit} the -equalities to reduce the dimensionality of the problem. -Given an equality involving at least one unknown, we pivot -the row corresponding to the equality with the column corresponding -to the last unknown with non-zero coefficient. The new column variable -can then be removed completely because it is identically zero, -thereby reducing the dimensionality of the problem by one. -The last unknown is chosen to ensure that the columns of the initial -tableau remain lexicographically positive. In particular, if -the equality is of the form $b + \sum_{i \le j} a_i \, x_i = 0$ with -$a_j \ne 0$, then the (implicit) top rows of the initial tableau -are changed as follows -$$ -\begin{tikzpicture} -\matrix [matrix of math nodes] -{ - & {} & |(top)| 0 & I_1 & |(j)| & \\ -j && 0 & & 1 & \\ - && 0 & & & |(bottom)|I_2 \\ -}; -\node[overlay,above=2mm of j,anchor=south]{j}; -\begin{pgfonlayer}{background} -\node (m) [inner sep=0pt,fill=black!20,right delimiter=),left delimiter=(,fit=(top)(bottom)] {}; -\end{pgfonlayer} -\begin{scope}[xshift=4cm] -\matrix [matrix of math nodes] -{ - & {} & |(top)| 0 & I_1 & \\ -j && |(left)| -b/a_j & -a_i/a_j & \\ - && 0 & & |(bottom)|I_2 \\ -}; -\begin{pgfonlayer}{background} -\node (m2) [inner sep=0pt,fill=black!20,right delimiter=),left delimiter=(,fit=(top)(bottom)(left)] {}; -\end{pgfonlayer} -\end{scope} - \draw [shorten >=7mm,-to,thick,decorate, - decoration={snake,amplitude=.4mm,segment length=2mm, - pre=moveto,pre length=5mm,post length=8mm}] - (m) -- (m2); -\end{tikzpicture} -$$ -Currently, {\tt isl} also eliminates equalities involving only parameters -in a similar way, provided at least one of the coefficients is equal to one. -The application of parameter compression (see below) -would obviate the need for removing parametric equalities. - -\subsubsection{Offline Symmetry Detection}\label{s:offline} - -Some problems, notably those of \shortciteN{Bygde2010licentiate}, -have a collection of constraints, say -$b_i(\vec p) + \sp {\vec a} {\vec x} \ge 0$, -that only differ in their (parametric) constant terms. -These constant terms will be non-negative on different parts -of the context and this context may have to be split for each -of the constraints. In the worst case, the basic algorithm may -have to consider all possible orderings of the constant terms. -Instead, {\tt isl} introduces a new parameter, say $u$, and -replaces the collection of constraints by the single -constraint $u + \sp {\vec a} {\vec x} \ge 0$ along with -context constraints $u \le b_i(\vec p)$. -Any solution to the new system is also a solution -to the original system since -$\sp {\vec a} {\vec x} \ge -u \ge -b_i(\vec p)$. -Conversely, $m = \min_i b_i(\vec p)$ satisfies the constraints -on $u$ and therefore extends a solution to the new system. -It can also be plugged into a new solution. -See \autoref{s:post} for how this substitution is currently performed -in {\tt isl}. -The method described in this section can only detect symmetries -that are explicitly available in the input. -See \autoref{s:online} for the detection -and exploitation of symmetries that appear during the course of -the dual simplex method. - -\subsubsection{Parameter Compression}\label{s:compression} - -It may in some cases be apparent from the equalities in the problem -description that there can only be a solution for a sublattice -of the parameters. In such cases ``parameter compression'' -\shortcite{Meister2004PhD,Meister2008} can be used to replace -the parameters by alternative ``dense'' parameters. -For example, if there is a constraint $2x = n$, then the system -will only have solutions for even values of $n$ and $n$ can be replaced -by $2n'$. Similarly, the parameters $n$ and $m$ in a system with -the constraint $2n = 3m$ can be replaced by a single parameter $n'$ -with $n=3n'$ and $m=2n'$. -It is also possible to perform a similar compression on the unknowns, -but it would be more complicated as the compression would have to -preserve the lexicographical order. Moreover, due to our handling -of equalities described above there should be -no need for such variable compression. -Although parameter compression has been implemented in {\tt isl}, -it is currently not yet used during parametric integer programming. - -\subsection{Postprocessing}\label{s:post} - -The output of {\tt PipLib} is a quast (quasi-affine selection tree). -Each internal node in this tree corresponds to a split of the context -based on a parametric constant term in the main tableau with indeterminate -sign. Each of these nodes may introduce extra variables in the context -corresponding to integer divisions. Each leaf of the tree prescribes -the solution in that part of the context that satisfies all the conditions -on the path leading to the leaf. -Such a quast is a very economical way of representing the solution, but -it would not be suitable as the (only) internal representation of -sets and relations in {\tt isl}. Instead, {\tt isl} represents -the constraints of a set or relation in disjunctive normal form. -The result of a parametric integer programming problem is then also -converted to this internal representation. Unfortunately, the conversion -to disjunctive normal form can lead to an explosion of the size -of the representation. -In some cases, this overhead would have to be paid anyway in subsequent -operations, but in other cases, especially for outside users that just -want to solve parametric integer programming problems, we would like -to avoid this overhead in future. That is, we are planning on introducing -quasts or a related representation as one of several possible internal -representations and on allowing the output of {\tt isl\_pip} to optionally -be printed as a quast. - -Currently, {\tt isl} also does not have an internal representation -for expressions such as $\min_i b_i(\vec p)$ from the offline -symmetry detection of \autoref{s:offline}. -Assume that one of these expressions has $n$ bounds $b_i(\vec p)$. -If the expression -does not appear in the affine expression describing the solution, -but only in the constraints, and if moreover, the expression -only appears with a positive coefficient, i.e., -$\min_i b_i(\vec p) \ge f_j(\vec p)$, then each of these constraints -can simply be reduplicated $n$ times, once for each of the bounds. -Otherwise, a conversion to disjunctive normal form -leads to $n$ cases, each described as $u = b_i(\vec p)$ with constraints -$b_i(\vec p) \le b_j(\vec p)$ for $j > i$ -and -$b_i(\vec p) < b_j(\vec p)$ for $j < i$. -Note that even though this conversion leads to a size increase -by a factor of $n$, not detecting the symmetry could lead to -an increase by a factor of $n!$ if all possible orderings end up being -considered. - -\subsection{Context Tableau}\label{s:context} - -The main operation that a context tableau needs to provide is a test -on the sign of an affine expression over the elements of the context. -This sign can be determined by solving two integer linear feasibility -problems, one with a constraint added to the context that enforces -the expression to be non-negative and one where the expression is -negative. As already mentioned by \shortciteN{Feautrier88parametric}, -any integer linear feasibility solver could be used, but the {\tt PipLib} -implementation uses a recursive call to the dual simplex with Gomory -cuts algorithm to determine the feasibility of a context. -In {\tt isl}, two ways of handling the context have been implemented, -one that performs the recursive call and one, used by default, that -uses generalized basis reduction. -We start with some optimizations that are shared between the two -implementations and then discuss additional details of each of them. - -\subsubsection{Maintaining Witnesses}\label{s:witness} - -A common feature of both integer linear feasibility solvers is that -they will not only say whether a set is empty or not, but if the set -is non-empty, they will also provide a \emph{witness} for this result, -i.e., a point that belongs to the set. By maintaining a list of such -witnesses, we can avoid many feasibility tests during the determination -of the signs of affine expressions. In particular, if the expression -evaluates to a positive number on some of these points and to a negative -number on some others, then no feasibility test needs to be performed. -If all the evaluations are non-negative, we only need to check for the -possibility of a negative value and similarly in case of all -non-positive evaluations. Finally, in the rare case that all points -evaluate to zero or at the start, when no points have been collected yet, -one or two feasibility tests need to be performed depending on the result -of the first test. - -When a new constraint is added to the context, the points that -violate the constraint are temporarily removed. They are reconsidered -when we backtrack over the addition of the constraint, as they will -satisfy the negation of the constraint. It is only when we backtrack -over the addition of the points that they are finally removed completely. -When an extra integer division is added to the context, -the new coordinates of the -witnesses can easily be computed by evaluating the integer division. -The idea of keeping track of witnesses was first used in {\tt barvinok}. - -\subsubsection{Choice of Constant Term on which to Split} - -Recall that if there are no rows with a non-positive constant term, -but there are rows with an indeterminate sign, then the context -needs to be split along the constant term of one of these rows. -If there is more than one such row, then we need to choose which row -to split on first. {\tt PipLib} uses a heuristic based on the (absolute) -sizes of the coefficients. In particular, it takes the largest coefficient -of each row and then selects the row where this largest coefficient is smaller -than those of the other rows. - -In {\tt isl}, we take that row for which non-negativity of its constant -term implies non-negativity of as many of the constant terms of the other -rows as possible. The intuition behind this heuristic is that on the -positive side, we will have fewer negative and indeterminate signs, -while on the negative side, we need to perform a pivot, which may -affect any number of rows meaning that the effect on the signs -is difficult to predict. This heuristic is of course much more -expensive to evaluate than the heuristic used by {\tt PipLib}. -More extensive tests are needed to evaluate whether the heuristic is worthwhile. - -\subsubsection{Dual Simplex + Gomory Cuts} - -When a new constraint is added to the context, the first steps -of the dual simplex method applied to this new context will be the same -or at least very similar to those taken on the original context, i.e., -before the constraint was added. In {\tt isl}, we therefore apply -the dual simplex method incrementally on the context and backtrack -to a previous state when a constraint is removed again. -An initial implementation that was never made public would also -keep the Gomory cuts, but the current implementation backtracks -to before the point where Gomory cuts are added before adding -an extra constraint to the context. -Keeping the Gomory cuts has the advantage that the sample value -is always an integer point and that this point may also satisfy -the new constraint. However, due to the technique of maintaining -witnesses explained above, -we would not perform a feasibility test in such cases and then -the previously added cuts may be redundant, possibly resulting -in an accumulation of a large number of cuts. - -If the parameters may be negative, then the same big parameter trick -used in the main tableau is applied to the context. This big parameter -is of course unrelated to the big parameter from the main tableau. -Note that it is not a requirement for this parameter to be ``big'', -but it does allow for some code reuse in {\tt isl}. -In {\tt PipLib}, the extra parameter is not ``big'', but this may be because -the big parameter of the main tableau also appears -in the context tableau. - -Finally, it was reported by \shortciteN{Galea2009personal}, who -worked on a parametric integer programming implementation -in {\tt PPL} \shortcite{PPL}, -that it is beneficial to add cuts for \emph{all} rational coordinates -in the context tableau. Based on this report, -the initial {\tt isl} implementation was adapted accordingly. - -\subsubsection{Generalized Basis Reduction}\label{s:GBR} - -The default algorithm used in {\tt isl} for feasibility checking -is generalized basis reduction \shortcite{Cook1991implementation}. -This algorithm is also used in the {\tt barvinok} implementation. -The algorithm is fairly robust, but it has some overhead. -We therefore try to avoid calling the algorithm in easy cases. -In particular, we incrementally keep track of points for which -the entire unit hypercube positioned at that point lies in the context. -This set is described by translates of the constraints of the context -and if (rationally) non-empty, any rational point -in the set can be rounded up to yield an integer point in the context. - -A restriction of the algorithm is that it only works on bounded sets. -The affine hull of the recession cone therefore needs to be projected -out first. As soon as the algorithm is invoked, we then also -incrementally keep track of this recession cone. The reduced basis -found by one call of the algorithm is also reused as initial basis -for the next call. - -Some problems lead to the -introduction of many integer divisions. Within a given context, -some of these integer divisions may be equal to each other, even -if the expressions are not identical, or they may be equal to some -affine combination of other variables. -To detect such cases, we compute the affine hull of the context -each time a new integer division is added. The algorithm used -for computing this affine hull is that of \shortciteN{Karr1976affine}, -while the points used in this algorithm are obtained by performing -integer feasibility checks on that part of the context outside -the current approximation of the affine hull. -The list of witnesses is used to construct an initial approximation -of the hull, while any extra points found during the construction -of the hull is added to this list. -Any equality found in this way that expresses an integer division -as an \emph{integer} affine combination of other variables is -propagated to the main tableau, where it is used to eliminate that -integer division. - -\subsection{Experiments} - -\autoref{t:comparison} compares the execution times of {\tt isl} -(with both types of context tableau) -on some more difficult instances to those of other tools, -run on an Intel Xeon W3520 @ 2.66GHz. -Easier problems such as the -test cases distributed with {\tt Pip\-Lib} can be solved so quickly -that we would only be measuring overhead such as input/output and conversions -and not the running time of the actual algorithm. -We compare the following versions: -{\tt piplib-1.4.0-5-g0132fd9}, -{\tt barvinok-0.32.1-73-gc5d7751}, -{\tt isl-0.05.1-82-g3a37260} -and {\tt PPL} version 0.11.2. - -The first test case is the following dependence analysis problem -originating from the Phideo project \shortcite{Verhaegh1995PhD} -that was communicated to us by Bart Kienhuis: -\begin{lstlisting}[flexiblecolumns=true,breaklines=true]{} -lexmax { [j1,j2] -> [i1,i2,i3,i4,i5,i6,i7,i8,i9,i10] : 1 <= i1,j1 <= 8 and 1 <= i2,i3,i4,i5,i6,i7,i8,i9,i10 <= 2 and 1 <= j2 <= 128 and i1-1 = j1-1 and i2-1+2*i3-2+4*i4-4+8*i5-8+16*i6-16+32*i7-32+64*i8-64+128*i9-128+256*i10-256=3*j2-3+66 }; -\end{lstlisting} -This problem was the main inspiration -for some of the optimizations in \autoref{s:GBR}. -The second group of test cases are projections used during counting. -The first nine of these come from \shortciteN{Seghir2006minimizing}. -The remaining two come from \shortciteN{Verdoolaege2005experiences} and -were used to drive the first, Gomory cuts based, implementation -in {\tt isl}. -The third and final group of test cases are borrowed from -\shortciteN{Bygde2010licentiate} and inspired the offline symmetry detection -of \autoref{s:offline}. Without symmetry detection, the running times -are 11s and 5.9s. -All running times of {\tt barvinok} and {\tt isl} include a conversion -to disjunctive normal form. Without this conversion, the final two -cases can be solved in 0.07s and 0.21s. -The {\tt PipLib} implementation has some fixed limits and will -sometimes report the problem to be too complex (TC), while on some other -problems it will run out of memory (OOM). -The {\tt barvinok} implementation does not support problems -with a non-trivial lineality space (line) nor maximization problems (max). -The Gomory cuts based {\tt isl} implementation was terminated after 1000 -minutes on the first problem. The gbr version introduces some -overhead on some of the easier problems, but is overall the clear winner. - -\begin{table} -\begin{center} -\begin{tabular}{lrrrrr} - & {\tt PipLib} & {\tt barvinok} & {\tt isl} cut & {\tt isl} gbr & {\tt PPL} \\ -\hline -\hline -% bart.pip -Phideo & TC & 793m & $>$999m & 2.7s & 372m \\ -\hline -e1 & 0.33s & 3.5s & 0.08s & 0.11s & 0.18s \\ -e3 & 0.14s & 0.13s & 0.10s & 0.10s & 0.17s \\ -e4 & 0.24s & 9.1s & 0.09s & 0.11s & 0.70s \\ -e5 & 0.12s & 6.0s & 0.06s & 0.14s & 0.17s \\ -e6 & 0.10s & 6.8s & 0.17s & 0.08s & 0.21s \\ -e7 & 0.03s & 0.27s & 0.04s & 0.04s & 0.03s \\ -e8 & 0.03s & 0.18s & 0.03s & 0.04s & 0.01s \\ -e9 & OOM & 70m & 2.6s & 0.94s & 22s \\ -vd & 0.04s & 0.10s & 0.03s & 0.03s & 0.03s \\ -bouleti & 0.25s & line & 0.06s & 0.06s & 0.15s \\ -difficult & OOM & 1.3s & 1.7s & 0.33s & 1.4s \\ -\hline -cnt/sum & TC & max & 2.2s & 2.2s & OOM \\ -jcomplex & TC & max & 3.7s & 3.9s & OOM \\ -\end{tabular} -\caption{Comparison of Execution Times} -\label{t:comparison} -\end{center} -\end{table} - -\subsection{Online Symmetry Detection}\label{s:online} - -Manual experiments on small instances of the problems of -\shortciteN{Bygde2010licentiate} and an analysis of the results -by the approximate MPA method developed by \shortciteN{Bygde2010licentiate} -have revealed that these problems contain many more symmetries -than can be detected using the offline method of \autoref{s:offline}. -In this section, we present an online detection mechanism that has -not been implemented yet, but that has shown promising results -in manual applications. - -Let us first consider what happens when we do not perform offline -symmetry detection. At some point, one of the -$b_i(\vec p) + \sp {\vec a} {\vec x} \ge 0$ constraints, -say the $j$th constraint, appears as a column -variable, say $c_1$, while the other constraints are represented -as rows of the form $b_i(\vec p) - b_j(\vec p) + c$. -The context is then split according to the relative order of -$b_j(\vec p)$ and one of the remaining $b_i(\vec p)$. -The offline method avoids this split by replacing all $b_i(\vec p)$ -by a single newly introduced parameter that represents the minimum -of these $b_i(\vec p)$. -In the online method the split is similarly avoided by the introduction -of a new parameter. In particular, a new parameter is introduced -that represents -$\left| b_j(\vec p) - b_i(\vec p) \right|_+ = -\max(b_j(\vec p) - b_i(\vec p), 0)$. - -In general, let $r = b(\vec p) + \sp {\vec a} {\vec c}$ be a row -of the tableau such that the sign of $b(\vec p)$ is indeterminate -and such that exactly one of the elements of $\vec a$ is a $1$, -while all remaining elements are non-positive. -That is, $r = b(\vec p) + c_j - f$ with $f = -\sum_{i\ne j} a_i c_i \ge 0$. -We introduce a new parameter $t$ with -context constraints $t \ge -b(\vec p)$ and $t \ge 0$ and replace -the column variable $c_j$ by $c' + t$. The row $r$ is now equal -to $b(\vec p) + t + c' - f$. The constant term of this row is always -non-negative because any negative value of $b(\vec p)$ is compensated -by $t \ge -b(\vec p)$ while and non-negative value remains non-negative -because $t \ge 0$. - -We need to show that this transformation does not eliminate any valid -solutions and that it does not introduce any spurious solutions. -Given a valid solution for the original problem, we need to find -a non-negative value of $c'$ satisfying the constraints. -If $b(\vec p) \ge 0$, we can take $t = 0$ so that -$c' = c_j - t = c_j \ge 0$. -If $b(\vec p) < 0$, we can take $t = -b(\vec p)$. -Since $r = b(\vec p) + c_j - f \ge 0$ and $f \ge 0$, we have -$c' = c_j + b(\vec p) \ge 0$. -Note that these choices amount to plugging in -$t = \left|-b(\vec p)\right|_+ = \max(-b(\vec p), 0)$. -Conversely, given a solution to the new problem, we need to find -a non-negative value of $c_j$, but this is easy since $c_j = c' + t$ -and both of these are non-negative. - -Plugging in $t = \max(-b(\vec p), 0)$ can be performed as in -\autoref{s:post}, but, as in the case of offline symmetry detection, -it may be better to provide a direct representation for such -expressions in the internal representation of sets and relations -or at least in a quast-like output format. - -\section{Coalescing}\label{s:coalescing} - -See \shortciteN{Verdoolaege2009isl}, for now. -More details will be added later. - -\section{Transitive Closure} - -\subsection{Introduction} - -\begin{definition}[Power of a Relation] -Let $R \in \Z^n \to 2^{\Z^{d+d}}$ be a relation and -$k \in \Z_{\ge 1}$ -a positive number, then power $k$ of relation $R$ is defined as -\begin{equation} -\label{eq:transitive:power} -R^k \coloneqq -\begin{cases} -R & \text{if $k = 1$} -\\ -R \circ R^{k-1} & \text{if $k \ge 2$} -. -\end{cases} -\end{equation} -\end{definition} - -\begin{definition}[Transitive Closure of a Relation] -Let $R \in \Z^n \to 2^{\Z^{d+d}}$ be a relation, -then the transitive closure $R^+$ of $R$ is the union -of all positive powers of $R$, -$$ -R^+ \coloneqq \bigcup_{k \ge 1} R^k -. -$$ -\end{definition} -Alternatively, the transitive closure may be defined -inductively as -\begin{equation} -\label{eq:transitive:inductive} -R^+ \coloneqq R \cup \left(R \circ R^+\right) -. -\end{equation} - -Since the transitive closure of a polyhedral relation -may no longer be a polyhedral relation \shortcite{Kelly1996closure}, -we can, in the general case, only compute an approximation -of the transitive closure. -Whereas \shortciteN{Kelly1996closure} compute underapproximations, -we, like \shortciteN{Beletska2009}, compute overapproximations. -That is, given a relation $R$, we will compute a relation $T$ -such that $R^+ \subseteq T$. Of course, we want this approximation -to be as close as possible to the actual transitive closure -$R^+$ and we want to detect the cases where the approximation is -exact, i.e., where $T = R^+$. - -For computing an approximation of the transitive closure of $R$, -we follow the same general strategy as \shortciteN{Beletska2009} -and first compute an approximation of $R^k$ for $k \ge 1$ and then project -out the parameter $k$ from the resulting relation. - -\begin{example} -As a trivial example, consider the relation -$R = \{\, x \to x + 1 \,\}$. The $k$th power of this map -for arbitrary $k$ is -$$ -R^k = k \mapsto \{\, x \to x + k \mid k \ge 1 \,\} -. -$$ -The transitive closure is then -$$ -\begin{aligned} -R^+ & = \{\, x \to y \mid \exists k \in \Z_{\ge 1} : y = x + k \,\} -\\ -& = \{\, x \to y \mid y \ge x + 1 \,\} -. -\end{aligned} -$$ -\end{example} - -\subsection{Computing an Approximation of $R^k$} -\label{s:power} - -There are some special cases where the computation of $R^k$ is very easy. -One such case is that where $R$ does not compose with itself, -i.e., $R \circ R = \emptyset$ or $\domain R \cap \range R = \emptyset$. -In this case, $R^k$ is only non-empty for $k=1$ where it is equal -to $R$ itself. - -In general, it is impossible to construct a closed form -of $R^k$ as a polyhedral relation. -We will therefore need to make some approximations. -As a first approximations, we will consider each of the basic -relations in $R$ as simply adding one or more offsets to a domain element -to arrive at an image element and ignore the fact that some of these -offsets may only be applied to some of the domain elements. -That is, we will only consider the difference set $\Delta\,R$ of the relation. -In particular, we will first construct a collection $P$ of paths -that move through -a total of $k$ offsets and then intersect domain and range of this -collection with those of $R$. -That is, -\begin{equation} -\label{eq:transitive:approx} -K = P \cap \left(\domain R \to \range R\right) -, -\end{equation} -with -\begin{equation} -\label{eq:transitive:path} -P = \vec s \mapsto \{\, \vec x \to \vec y \mid -\exists k_i \in \Z_{\ge 0}, \vec\delta_i \in k_i \, \Delta_i(\vec s) : -\vec y = \vec x + \sum_i \vec\delta_i -\wedge -\sum_i k_i = k > 0 -\,\} -\end{equation} -and with $\Delta_i$ the basic sets that compose -the difference set $\Delta\,R$. -Note that the number of basic sets $\Delta_i$ need not be -the same as the number of basic relations in $R$. -Also note that since addition is commutative, it does not -matter in which order we add the offsets and so we are allowed -to group them as we did in \eqref{eq:transitive:path}. - -If all the $\Delta_i$s are singleton sets -$\Delta_i = \{\, \vec \delta_i \,\}$ with $\vec \delta_i \in \Z^d$, -then \eqref{eq:transitive:path} simplifies to -\begin{equation} -\label{eq:transitive:singleton} -P = \{\, \vec x \to \vec y \mid -\exists k_i \in \Z_{\ge 0} : -\vec y = \vec x + \sum_i k_i \, \vec \delta_i -\wedge -\sum_i k_i = k > 0 -\,\} -\end{equation} -and then the approximation computed in \eqref{eq:transitive:approx} -is essentially the same as that of \shortciteN{Beletska2009}. -If some of the $\Delta_i$s are not singleton sets or if -some of $\vec \delta_i$s are parametric, then we need -to resort to further approximations. - -To ease both the exposition and the implementation, we will for -the remainder of this section work with extended offsets -$\Delta_i' = \Delta_i \times \{\, 1 \,\}$. -That is, each offset is extended with an extra coordinate that is -set equal to one. The paths constructed by summing such extended -offsets have the length encoded as the difference of their -final coordinates. The path $P'$ can then be decomposed into -paths $P_i'$, one for each $\Delta_i$, -\begin{equation} -\label{eq:transitive:decompose} -P' = \left( -(P_m' \cup \identity) \circ \cdots \circ -(P_2' \cup \identity) \circ -(P_1' \cup \identity) -\right) \cap -\{\, -\vec x' \to \vec y' \mid y_{d+1} - x_{d+1} = k > 0 -\,\} -, -\end{equation} -with -$$ -P_i' = \vec s \mapsto \{\, \vec x' \to \vec y' \mid -\exists k \in \Z_{\ge 1}, \vec \delta \in k \, \Delta_i'(\vec s) : -\vec y' = \vec x' + \vec \delta -\,\} -. -$$ -Note that each $P_i'$ contains paths of length at least one. -We therefore need to take the union with the identity relation -when composing the $P_i'$s to allow for paths that do not contain -any offsets from one or more $\Delta_i'$. -The path that consists of only identity relations is removed -by imposing the constraint $y_{d+1} - x_{d+1} > 0$. -Taking the union with the identity relation means that -that the relations we compose in \eqref{eq:transitive:decompose} -each consist of two basic relations. If there are $m$ -disjuncts in the input relation, then a direct application -of the composition operation may therefore result in a relation -with $2^m$ disjuncts, which is prohibitively expensive. -It is therefore crucial to apply coalescing (\autoref{s:coalescing}) -after each composition. - -Let us now consider how to compute an overapproximation of $P_i'$. -Those that correspond to singleton $\Delta_i$s are grouped together -and handled as in \eqref{eq:transitive:singleton}. -Note that this is just an optimization. The procedure described -below would produce results that are at least as accurate. -For simplicity, we first assume that no constraint in $\Delta_i'$ -involves any existentially quantified variables. -We will return to existentially quantified variables at the end -of this section. -Without existentially quantified variables, we can classify -the constraints of $\Delta_i'$ as follows -\begin{enumerate} -\item non-parametric constraints -\begin{equation} -\label{eq:transitive:non-parametric} -A_1 \vec x + \vec c_1 \geq \vec 0 -\end{equation} -\item purely parametric constraints -\begin{equation} -\label{eq:transitive:parametric} -B_2 \vec s + \vec c_2 \geq \vec 0 -\end{equation} -\item negative mixed constraints -\begin{equation} -\label{eq:transitive:mixed} -A_3 \vec x + B_3 \vec s + \vec c_3 \geq \vec 0 -\end{equation} -such that for each row $j$ and for all $\vec s$, -$$ -\Delta_i'(\vec s) \cap -\{\, \vec \delta' \mid B_{3,j} \vec s + c_{3,j} > 0 \,\} -= \emptyset -$$ -\item positive mixed constraints -$$ -A_4 \vec x + B_4 \vec s + \vec c_4 \geq \vec 0 -$$ -such that for each row $j$, there is at least one $\vec s$ such that -$$ -\Delta_i'(\vec s) \cap -\{\, \vec \delta' \mid B_{4,j} \vec s + c_{4,j} > 0 \,\} -\ne \emptyset -$$ -\end{enumerate} -We will use the following approximation $Q_i$ for $P_i'$: -\begin{equation} -\label{eq:transitive:Q} -\begin{aligned} -Q_i = \vec s \mapsto -\{\, -\vec x' \to \vec y' -\mid {} & \exists k \in \Z_{\ge 1}, \vec f \in \Z^d : -\vec y' = \vec x' + (\vec f, k) -\wedge {} -\\ -& -A_1 \vec f + k \vec c_1 \geq \vec 0 -\wedge -B_2 \vec s + \vec c_2 \geq \vec 0 -\wedge -A_3 \vec f + B_3 \vec s + \vec c_3 \geq \vec 0 -\,\} -. -\end{aligned} -\end{equation} -To prove that $Q_i$ is indeed an overapproximation of $P_i'$, -we need to show that for every $\vec s \in \Z^n$, for every -$k \in \Z_{\ge 1}$ and for every $\vec f \in k \, \Delta_i(\vec s)$ -we have that -$(\vec f, k)$ satisfies the constraints in \eqref{eq:transitive:Q}. -If $\Delta_i(\vec s)$ is non-empty, then $\vec s$ must satisfy -the constraints in \eqref{eq:transitive:parametric}. -Each element $(\vec f, k) \in k \, \Delta_i'(\vec s)$ is a sum -of $k$ elements $(\vec f_j, 1)$ in $\Delta_i'(\vec s)$. -Each of these elements satisfies the constraints in -\eqref{eq:transitive:non-parametric}, i.e., -$$ -\left[ -\begin{matrix} -A_1 & \vec c_1 -\end{matrix} -\right] -\left[ -\begin{matrix} -\vec f_j \\ 1 -\end{matrix} -\right] -\ge \vec 0 -. -$$ -The sum of these elements therefore satisfies the same set of inequalities, -i.e., $A_1 \vec f + k \vec c_1 \geq \vec 0$. -Finally, the constraints in \eqref{eq:transitive:mixed} are such -that for any $\vec s$ in the parameter domain of $\Delta$, -we have $-\vec r(\vec s) \coloneqq B_3 \vec s + \vec c_3 \le \vec 0$, -i.e., $A_3 \vec f_j \ge \vec r(\vec s) \ge \vec 0$ -and therefore also $A_3 \vec f \ge \vec r(\vec s)$. -Note that if there are no mixed constraints and if the -rational relaxation of $\Delta_i(\vec s)$, i.e., -$\{\, \vec x \in \Q^d \mid A_1 \vec x + \vec c_1 \ge \vec 0\,\}$, -has integer vertices, then the approximation is exact, i.e., -$Q_i = P_i'$. In this case, the vertices of $\Delta'_i(\vec s)$ -generate the rational cone -$\{\, \vec x' \in \Q^{d+1} \mid \left[ -\begin{matrix} -A_1 & \vec c_1 -\end{matrix} -\right] \vec x' \,\}$ and therefore $\Delta'_i(\vec s)$ is -a Hilbert basis of this cone \shortcite[Theorem~16.4]{Schrijver1986}. - -Note however that, as pointed out by \shortciteN{DeSmet2010personal}, -if there \emph{are} any mixed constraints, then the above procedure may -not compute the most accurate affine approximation of -$k \, \Delta_i(\vec s)$ with $k \ge 1$. -In particular, we only consider the negative mixed constraints that -happen to appear in the description of $\Delta_i(\vec s)$, while we -should instead consider \emph{all} valid such constraints. -It is also sufficient to consider those constraints because any -constraint that is valid for $k \, \Delta_i(\vec s)$ is also -valid for $1 \, \Delta_i(\vec s) = \Delta_i(\vec s)$. -Take therefore any constraint -$\spv a x + \spv b s + c \ge 0$ valid for $\Delta_i(\vec s)$. -This constraint is also valid for $k \, \Delta_i(\vec s)$ iff -$k \, \spv a x + \spv b s + c \ge 0$. -If $\spv b s + c$ can attain any positive value, then $\spv a x$ -may be negative for some elements of $\Delta_i(\vec s)$. -We then have $k \, \spv a x < \spv a x$ for $k > 1$ and so the constraint -is not valid for $k \, \Delta_i(\vec s)$. -We therefore need to impose $\spv b s + c \le 0$ for all values -of $\vec s$ such that $\Delta_i(\vec s)$ is non-empty, i.e., -$\vec b$ and $c$ need to be such that $- \spv b s - c \ge 0$ is a valid -constraint of $\Delta_i(\vec s)$. That is, $(\vec b, c)$ are the opposites -of the coefficients of a valid constraint of $\Delta_i(\vec s)$. -The approximation of $k \, \Delta_i(\vec s)$ can therefore be obtained -using three applications of Farkas' lemma. The first obtains the coefficients -of constraints valid for $\Delta_i(\vec s)$. The second obtains -the coefficients of constraints valid for the projection of $\Delta_i(\vec s)$ -onto the parameters. The opposite of the second set is then computed -and intersected with the first set. The result is the set of coefficients -of constraints valid for $k \, \Delta_i(\vec s)$. A final application -of Farkas' lemma is needed to obtain the approximation of -$k \, \Delta_i(\vec s)$ itself. - -\begin{example} -Consider the relation -$$ -n \to \{\, (x, y) \to (1 + x, 1 - n + y) \mid n \ge 2 \,\} -. -$$ -The difference set of this relation is -$$ -\Delta = n \to \{\, (1, 1 - n) \mid n \ge 2 \,\} -. -$$ -Using our approach, we would only consider the mixed constraint -$y - 1 + n \ge 0$, leading to the following approximation of the -transitive closure: -$$ -n \to \{\, (x, y) \to (o_0, o_1) \mid n \ge 2 \wedge o_1 \le 1 - n + y \wedge o_0 \ge 1 + x \,\} -. -$$ -If, instead, we apply Farkas's lemma to $\Delta$, i.e., -\begin{verbatim} -D := [n] -> { [1, 1 - n] : n >= 2 }; -CD := coefficients D; -CD; -\end{verbatim} -we obtain -\begin{verbatim} -{ rat: coefficients[[c_cst, c_n] -> [i2, i3]] : i3 <= c_n and - i3 <= c_cst + 2c_n + i2 } -\end{verbatim} -The pure-parametric constraints valid for $\Delta$, -\begin{verbatim} -P := { [a,b] -> [] }(D); -CP := coefficients P; -CP; -\end{verbatim} -are -\begin{verbatim} -{ rat: coefficients[[c_cst, c_n] -> []] : c_n >= 0 and 2c_n >= -c_cst } -\end{verbatim} -Negating these coefficients and intersecting with \verb+CD+, -\begin{verbatim} -NCP := { rat: coefficients[[a,b] -> []] - -> coefficients[[-a,-b] -> []] }(CP); -CK := wrap((unwrap CD) * (dom (unwrap NCP))); -CK; -\end{verbatim} -we obtain -\begin{verbatim} -{ rat: [[c_cst, c_n] -> [i2, i3]] : i3 <= c_n and - i3 <= c_cst + 2c_n + i2 and c_n <= 0 and 2c_n <= -c_cst } -\end{verbatim} -The approximation for $k\,\Delta$, -\begin{verbatim} -K := solutions CK; -K; -\end{verbatim} -is then -\begin{verbatim} -[n] -> { rat: [i0, i1] : i1 <= -i0 and i0 >= 1 and i1 <= 2 - n - i0 } -\end{verbatim} -Finally, the computed approximation for $R^+$, -\begin{verbatim} -T := unwrap({ [dx,dy] -> [[x,y] -> [x+dx,y+dy]] }(K)); -R := [n] -> { [x,y] -> [x+1,y+1-n] : n >= 2 }; -T := T * ((dom R) -> (ran R)); -T; -\end{verbatim} -is -\begin{verbatim} -[n] -> { [x, y] -> [o0, o1] : o1 <= x + y - o0 and - o0 >= 1 + x and o1 <= 2 - n + x + y - o0 and n >= 2 } -\end{verbatim} -\end{example} - -Existentially quantified variables can be handled by -classifying them into variables that are uniquely -determined by the parameters, variables that are independent -of the parameters and others. The first set can be treated -as parameters and the second as variables. Constraints involving -the other existentially quantified variables are removed. - -\begin{example} -Consider the relation -$$ -R = -n \to \{\, x \to y \mid \exists \, \alpha_0, \alpha_1: 7\alpha_0 = -2 + n \wedge 5\alpha_1 = -1 - x + y \wedge y \ge 6 + x \,\} -. -$$ -The difference set of this relation is -$$ -\Delta = \Delta \, R = -n \to \{\, x \mid \exists \, \alpha_0, \alpha_1: 7\alpha_0 = -2 + n \wedge 5\alpha_1 = -1 + x \wedge x \ge 6 \,\} -. -$$ -The existentially quantified variables can be defined in terms -of the parameters and variables as -$$ -\alpha_0 = \floor{\frac{-2 + n}7} -\qquad -\text{and} -\qquad -\alpha_1 = \floor{\frac{-1 + x}5} -. -$$ -$\alpha_0$ can therefore be treated as a parameter, -while $\alpha_1$ can be treated as a variable. -This in turn means that $7\alpha_0 = -2 + n$ can be treated as -a purely parametric constraint, while the other two constraints are -non-parametric. -The corresponding $Q$~\eqref{eq:transitive:Q} is therefore -$$ -\begin{aligned} -n \to \{\, (x,z) \to (y,w) \mid -\exists\, \alpha_0, \alpha_1, k, f : {} & -k \ge 1 \wedge -y = x + f \wedge -w = z + k \wedge {} \\ -& -7\alpha_0 = -2 + n \wedge -5\alpha_1 = -k + x \wedge -x \ge 6 k -\,\} -. -\end{aligned} -$$ -Projecting out the final coordinates encoding the length of the paths, -results in the exact transitive closure -$$ -R^+ = -n \to \{\, x \to y \mid \exists \, \alpha_0, \alpha_1: 7\alpha_1 = -2 + n \wedge 6\alpha_0 \ge -x + y \wedge 5\alpha_0 \le -1 - x + y \,\} -. -$$ -\end{example} - -The fact that we ignore some impure constraints clearly leads -to a loss of accuracy. In some cases, some of this loss can be recovered -by not considering the parameters in a special way. -That is, instead of considering the set -$$ -\Delta = \diff R = -\vec s \mapsto -\{\, \vec \delta \in \Z^{d} \mid \exists \vec x \to \vec y \in R : -\vec \delta = \vec y - \vec x -\,\} -$$ -we consider the set -$$ -\Delta' = \diff R' = -\{\, \vec \delta \in \Z^{n+d} \mid \exists -(\vec s, \vec x) \to (\vec s, \vec y) \in R' : -\vec \delta = (\vec s - \vec s, \vec y - \vec x) -\,\} -. -$$ -The first $n$ coordinates of every element in $\Delta'$ are zero. -Projecting out these zero coordinates from $\Delta'$ is equivalent -to projecting out the parameters in $\Delta$. -The result is obviously a superset of $\Delta$, but all its constraints -are of type \eqref{eq:transitive:non-parametric} and they can therefore -all be used in the construction of $Q_i$. - -\begin{example} -Consider the relation -$$ -% [n] -> { [x, y] -> [1 + x, 1 - n + y] | n >= 2 } -R = n \to \{\, (x, y) \to (1 + x, 1 - n + y) \mid n \ge 2 \,\} -. -$$ -We have -$$ -\diff R = n \to \{\, (1, 1 - n) \mid n \ge 2 \,\} -$$ -and so, by treating the parameters in a special way, we obtain -the following approximation for $R^+$: -$$ -n \to \{\, (x, y) \to (x', y') \mid n \ge 2 \wedge y' \le 1 - n + y \wedge x' \ge 1 + x \,\} -. -$$ -If we consider instead -$$ -R' = \{\, (n, x, y) \to (n, 1 + x, 1 - n + y) \mid n \ge 2 \,\} -$$ -then -$$ -\diff R' = \{\, (0, 1, y) \mid y \le -1 \,\} -$$ -and we obtain the approximation -$$ -n \to \{\, (x, y) \to (x', y') \mid n \ge 2 \wedge x' \ge 1 + x \wedge y' \le x + y - x' \,\} -. -$$ -If we consider both $\diff R$ and $\diff R'$, then we obtain -$$ -n \to \{\, (x, y) \to (x', y') \mid n \ge 2 \wedge y' \le 1 - n + y \wedge x' \ge 1 + x \wedge y' \le x + y - x' \,\} -. -$$ -Note, however, that this is not the most accurate affine approximation that -can be obtained. That would be -$$ -n \to \{\, (x, y) \to (x', y') \mid y' \le 2 - n + x + y - x' \wedge n \ge 2 \wedge x' \ge 1 + x \,\} -. -$$ -\end{example} - -\subsection{Checking Exactness} - -The approximation $T$ for the transitive closure $R^+$ can be obtained -by projecting out the parameter $k$ from the approximation $K$ -\eqref{eq:transitive:approx} of the power $R^k$. -Since $K$ is an overapproximation of $R^k$, $T$ will also be an -overapproximation of $R^+$. -To check whether the results are exact, we need to consider two -cases depending on whether $R$ is {\em cyclic}, where $R$ is defined -to be cyclic if $R^+$ maps any element to itself, i.e., -$R^+ \cap \identity \ne \emptyset$. -If $R$ is acyclic, then the inductive definition of -\eqref{eq:transitive:inductive} is equivalent to its completion, -i.e., -$$ -R^+ = R \cup \left(R \circ R^+\right) -$$ -is a defining property. -Since $T$ is known to be an overapproximation, we only need to check -whether -$$ -T \subseteq R \cup \left(R \circ T\right) -. -$$ -This is essentially Theorem~5 of \shortciteN{Kelly1996closure}. -The only difference is that they only consider lexicographically -forward relations, a special case of acyclic relations. - -If, on the other hand, $R$ is cyclic, then we have to resort -to checking whether the approximation $K$ of the power is exact. -Note that $T$ may be exact even if $K$ is not exact, so the check -is sound, but incomplete. -To check exactness of the power, we simply need to check -\eqref{eq:transitive:power}. Since again $K$ is known -to be an overapproximation, we only need to check whether -$$ -\begin{aligned} -K'|_{y_{d+1} - x_{d+1} = 1} & \subseteq R' -\\ -K'|_{y_{d+1} - x_{d+1} \ge 2} & \subseteq R' \circ K'|_{y_{d+1} - x_{d+1} \ge 1} -, -\end{aligned} -$$ -where $R' = \{\, \vec x' \to \vec y' \mid \vec x \to \vec y \in R -\wedge y_{d+1} - x_{d+1} = 1\,\}$, i.e., $R$ extended with path -lengths equal to 1. - -All that remains is to explain how to check the cyclicity of $R$. -Note that the exactness on the power is always sound, even -in the acyclic case, so we only need to be careful that we find -all cyclic cases. Now, if $R$ is cyclic, i.e., -$R^+ \cap \identity \ne \emptyset$, then, since $T$ is -an overapproximation of $R^+$, also -$T \cap \identity \ne \emptyset$. This in turn means -that $\Delta \, K'$ contains a point whose first $d$ coordinates -are zero and whose final coordinate is positive. -In the implementation we currently perform this test on $P'$ instead of $K'$. -Note that if $R^+$ is acyclic and $T$ is not, then the approximation -is clearly not exact and the approximation of the power $K$ -will not be exact either. - -\subsection{Decomposing $R$ into strongly connected components} - -If the input relation $R$ is a union of several basic relations -that can be partially ordered -then the accuracy of the approximation may be improved by computing -an approximation of each strongly connected components separately. -For example, if $R = R_1 \cup R_2$ and $R_1 \circ R_2 = \emptyset$, -then we know that any path that passes through $R_2$ cannot later -pass through $R_1$, i.e., -\begin{equation} -\label{eq:transitive:components} -R^+ = R_1^+ \cup R_2^+ \cup \left(R_2^+ \circ R_1^+\right) -. -\end{equation} -We can therefore compute (approximations of) transitive closures -of $R_1$ and $R_2$ separately. -Note, however, that the condition $R_1 \circ R_2 = \emptyset$ -is actually too strong. -If $R_1 \circ R_2$ is a subset of $R_2 \circ R_1$ -then we can reorder the segments -in any path that moves through both $R_1$ and $R_2$ to -first move through $R_1$ and then through $R_2$. - -This idea can be generalized to relations that are unions -of more than two basic relations by constructing the -strongly connected components in the graph with as vertices -the basic relations and an edge between two basic relations -$R_i$ and $R_j$ if $R_i$ needs to follow $R_j$ in some paths. -That is, there is an edge from $R_i$ to $R_j$ iff -\begin{equation} -\label{eq:transitive:edge} -R_i \circ R_j -\not\subseteq -R_j \circ R_i -. -\end{equation} -The components can be obtained from the graph by applying -Tarjan's algorithm \shortcite{Tarjan1972}. - -In practice, we compute the (extended) powers $K_i'$ of each component -separately and then compose them as in \eqref{eq:transitive:decompose}. -Note, however, that in this case the order in which we apply them is -important and should correspond to a topological ordering of the -strongly connected components. Simply applying Tarjan's -algorithm will produce topologically sorted strongly connected components. -The graph on which Tarjan's algorithm is applied is constructed on-the-fly. -That is, whenever the algorithm checks if there is an edge between -two vertices, we evaluate \eqref{eq:transitive:edge}. -The exactness check is performed on each component separately. -If the approximation turns out to be inexact for any of the components, -then the entire result is marked inexact and the exactness check -is skipped on the components that still need to be handled. - -It should be noted that \eqref{eq:transitive:components} -is only valid for exact transitive closures. -If overapproximations are computed in the right hand side, then the result will -still be an overapproximation of the left hand side, but this result -may not be transitively closed. If we only separate components based -on the condition $R_i \circ R_j = \emptyset$, then there is no problem, -as this condition will still hold on the computed approximations -of the transitive closures. If, however, we have exploited -\eqref{eq:transitive:edge} during the decomposition and if the -result turns out not to be exact, then we check whether -the result is transitively closed. If not, we recompute -the transitive closure, skipping the decomposition. -Note that testing for transitive closedness on the result may -be fairly expensive, so we may want to make this check -configurable. - -\begin{figure} -\begin{center} -\begin{tikzpicture}[x=0.5cm,y=0.5cm,>=stealth,shorten >=1pt] -\foreach \x in {1,...,10}{ - \foreach \y in {1,...,10}{ - \draw[->] (\x,\y) -- (\x,\y+1); - } -} -\foreach \x in {1,...,20}{ - \foreach \y in {5,...,15}{ - \draw[->] (\x,\y) -- (\x+1,\y); - } -} -\end{tikzpicture} -\end{center} -\caption{The relation from \autoref{ex:closure4}} -\label{f:closure4} -\end{figure} -\begin{example} -\label{ex:closure4} -Consider the relation in example {\tt closure4} that comes with -the Omega calculator~\shortcite{Omega_calc}, $R = R_1 \cup R_2$, -with -$$ -\begin{aligned} -R_1 & = \{\, (x,y) \to (x,y+1) \mid 1 \le x,y \le 10 \,\} -\\ -R_2 & = \{\, (x,y) \to (x+1,y) \mid 1 \le x \le 20 \wedge 5 \le y \le 15 \,\} -. -\end{aligned} -$$ -This relation is shown graphically in \autoref{f:closure4}. -We have -$$ -\begin{aligned} -R_1 \circ R_2 &= -\{\, (x,y) \to (x+1,y+1) \mid 1 \le x \le 9 \wedge 5 \le y \le 10 \,\} -\\ -R_2 \circ R_1 &= -\{\, (x,y) \to (x+1,y+1) \mid 1 \le x \le 10 \wedge 4 \le y \le 10 \,\} -. -\end{aligned} -$$ -Clearly, $R_1 \circ R_2 \subseteq R_2 \circ R_1$ and so -$$ -\left( -R_1 \cup R_2 -\right)^+ -= -\left(R_2^+ \circ R_1^+\right) -\cup R_1^+ -\cup R_2^+ -. -$$ -\end{example} - -\begin{figure} -\newcounter{n} -\newcounter{t1} -\newcounter{t2} -\newcounter{t3} -\newcounter{t4} -\begin{center} -\begin{tikzpicture}[>=stealth,shorten >=1pt] -\setcounter{n}{7} -\foreach \i in {1,...,\value{n}}{ - \foreach \j in {1,...,\value{n}}{ - \setcounter{t1}{2 * \j - 4 - \i + 1} - \setcounter{t2}{\value{n} - 3 - \i + 1} - \setcounter{t3}{2 * \i - 1 - \j + 1} - \setcounter{t4}{\value{n} - \j + 1} - \ifnum\value{t1}>0\ifnum\value{t2}>0 - \ifnum\value{t3}>0\ifnum\value{t4}>0 - \draw[thick,->] (\i,\j) to[out=20] (\i+3,\j); - \fi\fi\fi\fi - \setcounter{t1}{2 * \j - 1 - \i + 1} - \setcounter{t2}{\value{n} - \i + 1} - \setcounter{t3}{2 * \i - 4 - \j + 1} - \setcounter{t4}{\value{n} - 3 - \j + 1} - \ifnum\value{t1}>0\ifnum\value{t2}>0 - \ifnum\value{t3}>0\ifnum\value{t4}>0 - \draw[thick,->] (\i,\j) to[in=-20,out=20] (\i,\j+3); - \fi\fi\fi\fi - \setcounter{t1}{2 * \j - 1 - \i + 1} - \setcounter{t2}{\value{n} - 1 - \i + 1} - \setcounter{t3}{2 * \i - 1 - \j + 1} - \setcounter{t4}{\value{n} - 1 - \j + 1} - \ifnum\value{t1}>0\ifnum\value{t2}>0 - \ifnum\value{t3}>0\ifnum\value{t4}>0 - \draw[thick,->] (\i,\j) to (\i+1,\j+1); - \fi\fi\fi\fi - } -} -\end{tikzpicture} -\end{center} -\caption{The relation from \autoref{ex:decomposition}} -\label{f:decomposition} -\end{figure} -\begin{example} -\label{ex:decomposition} -Consider the relation on the right of \shortciteN[Figure~2]{Beletska2009}, -reproduced in \autoref{f:decomposition}. -The relation can be described as $R = R_1 \cup R_2 \cup R_3$, -with -$$ -\begin{aligned} -R_1 &= n \mapsto \{\, (i,j) \to (i+3,j) \mid -i \le 2 j - 4 \wedge -i \le n - 3 \wedge -j \le 2 i - 1 \wedge -j \le n \,\} -\\ -R_2 &= n \mapsto \{\, (i,j) \to (i,j+3) \mid -i \le 2 j - 1 \wedge -i \le n \wedge -j \le 2 i - 4 \wedge -j \le n - 3 \,\} -\\ -R_3 &= n \mapsto \{\, (i,j) \to (i+1,j+1) \mid -i \le 2 j - 1 \wedge -i \le n - 1 \wedge -j \le 2 i - 1 \wedge -j \le n - 1\,\} -. -\end{aligned} -$$ -The figure shows this relation for $n = 7$. -Both -$R_3 \circ R_1 \subseteq R_1 \circ R_3$ -and -$R_3 \circ R_2 \subseteq R_2 \circ R_3$, -which the reader can verify using the {\tt iscc} calculator: -\begin{verbatim} -R1 := [n] -> { [i,j] -> [i+3,j] : i <= 2 j - 4 and i <= n - 3 and - j <= 2 i - 1 and j <= n }; -R2 := [n] -> { [i,j] -> [i,j+3] : i <= 2 j - 1 and i <= n and - j <= 2 i - 4 and j <= n - 3 }; -R3 := [n] -> { [i,j] -> [i+1,j+1] : i <= 2 j - 1 and i <= n - 1 and - j <= 2 i - 1 and j <= n - 1 }; -(R1 . R3) - (R3 . R1); -(R2 . R3) - (R3 . R2); -\end{verbatim} -$R_3$ can therefore be moved forward in any path. -For the other two basic relations, we have both -$R_2 \circ R_1 \not\subseteq R_1 \circ R_2$ -and -$R_1 \circ R_2 \not\subseteq R_2 \circ R_1$ -and so $R_1$ and $R_2$ form a strongly connected component. -By computing the power of $R_3$ and $R_1 \cup R_2$ separately -and composing the results, the power of $R$ can be computed exactly -using \eqref{eq:transitive:singleton}. -As explained by \shortciteN{Beletska2009}, applying the same formula -to $R$ directly, without a decomposition, would result in -an overapproximation of the power. -\end{example} - -\subsection{Partitioning the domains and ranges of $R$} - -The algorithm of \autoref{s:power} assumes that the input relation $R$ -can be treated as a union of translations. -This is a reasonable assumption if $R$ maps elements of a given -abstract domain to the same domain. -However, if $R$ is a union of relations that map between different -domains, then this assumption no longer holds. -In particular, when an entire dependence graph is encoded -in a single relation, as is done by, e.g., -\shortciteN[Section~6.1]{Barthou2000MSE}, then it does not make -sense to look at differences between iterations of different domains. -Now, arguably, a modified Floyd-Warshall algorithm should -be applied to the dependence graph, as advocated by -\shortciteN{Kelly1996closure}, with the transitive closure operation -only being applied to relations from a given domain to itself. -However, it is also possible to detect disjoint domains and ranges -and to apply Floyd-Warshall internally. - -\linesnumbered -\begin{algorithm} -\caption{The modified Floyd-Warshall algorithm of -\protect\shortciteN{Kelly1996closure}} -\label{a:Floyd} -\SetKwInput{Input}{Input} -\SetKwInput{Output}{Output} -\Input{Relations $R_{pq}$, $0 \le p, q < n$} -\Output{Updated relations $R_{pq}$ such that each relation -$R_{pq}$ contains all indirect paths from $p$ to $q$ in the input graph} -% -\BlankLine -\SetVline -\dontprintsemicolon -% -\For{$r \in [0, n-1]$}{ - $R_{rr} \coloneqq R_{rr}^+$ \nllabel{l:Floyd:closure}\; - \For{$p \in [0, n-1]$}{ - \For{$q \in [0, n-1]$}{ - \If{$p \ne r$ or $q \ne r$}{ - $R_{pq} \coloneqq R_{pq} \cup \left(R_{rq} \circ R_{pr}\right) - \cup \left(R_{rq} \circ R_{rr} \circ R_{pr}\right)$ - \nllabel{l:Floyd:update} - } - } - } -} -\end{algorithm} - -Let the input relation $R$ be a union of $m$ basic relations $R_i$. -Let $D_{2i}$ be the domains of $R_i$ and $D_{2i+1}$ the ranges of $R_i$. -The first step is to group overlapping $D_j$ until a partition is -obtained. If the resulting partition consists of a single part, -then we continue with the algorithm of \autoref{s:power}. -Otherwise, we apply Floyd-Warshall on the graph with as vertices -the parts of the partition and as edges the $R_i$ attached to -the appropriate pairs of vertices. -In particular, let there be $n$ parts $P_k$ in the partition. -We construct $n^2$ relations -$$ -R_{pq} \coloneqq \bigcup_{i \text{ s.t. } \domain R_i \subseteq P_p \wedge - \range R_i \subseteq P_q} R_i -, -$$ -apply \autoref{a:Floyd} and return the union of all resulting -$R_{pq}$ as the transitive closure of $R$. -Each iteration of the $r$-loop in \autoref{a:Floyd} updates -all relations $R_{pq}$ to include paths that go from $p$ to $r$, -possibly stay there for a while, and then go from $r$ to $q$. -Note that paths that ``stay in $r$'' include all paths that -pass through earlier vertices since $R_{rr}$ itself has been updated -accordingly in previous iterations of the outer loop. -In principle, it would be sufficient to use the $R_{pr}$ -and $R_{rq}$ computed in the previous iteration of the -$r$-loop in Line~\ref{l:Floyd:update}. -However, from an implementation perspective, it is easier -to allow either or both of these to have been updated -in the same iteration of the $r$-loop. -This may result in duplicate paths, but these can usually -be removed by coalescing (\autoref{s:coalescing}) the result of the union -in Line~\ref{l:Floyd:update}, which should be done in any case. -The transitive closure in Line~\ref{l:Floyd:closure} -is performed using a recursive call. This recursive call -includes the partitioning step, but the resulting partition will -usually be a singleton. -The result of the recursive call will either be exact or an -overapproximation. The final result of Floyd-Warshall is therefore -also exact or an overapproximation. - -\begin{figure} -\begin{center} -\begin{tikzpicture}[x=1cm,y=1cm,>=stealth,shorten >=3pt] -\foreach \x/\y in {0/0,1/1,3/2} { - \fill (\x,\y) circle (2pt); -} -\foreach \x/\y in {0/1,2/2,3/3} { - \draw (\x,\y) circle (2pt); -} -\draw[->] (0,0) -- (0,1); -\draw[->] (0,1) -- (1,1); -\draw[->] (2,2) -- (3,2); -\draw[->] (3,2) -- (3,3); -\draw[->,dashed] (2,2) -- (3,3); -\draw[->,dotted] (0,0) -- (1,1); -\end{tikzpicture} -\end{center} -\caption{The relation (solid arrows) on the right of Figure~1 of -\protect\shortciteN{Beletska2009} and its transitive closure} -\label{f:COCOA:1} -\end{figure} -\begin{example} -Consider the relation on the right of Figure~1 of -\shortciteN{Beletska2009}, -reproduced in \autoref{f:COCOA:1}. -This relation can be described as -$$ -\begin{aligned} -\{\, (x, y) \to (x_2, y_2) \mid {} & (3y = 2x \wedge x_2 = x \wedge 3y_2 = 3 + 2x \wedge x \ge 0 \wedge x \le 3) \vee {} \\ -& (x_2 = 1 + x \wedge y_2 = y \wedge x \ge 0 \wedge 3y \ge 2 + 2x \wedge x \le 2 \wedge 3y \le 3 + 2x) \,\} -. -\end{aligned} -$$ -Note that the domain of the upward relation overlaps with the range -of the rightward relation and vice versa, but that the domain -of neither relation overlaps with its own range or the domain of -the other relation. -The domains and ranges can therefore be partitioned into two parts, -$P_0$ and $P_1$, shown as the white and black dots in \autoref{f:COCOA:1}, -respectively. -Initially, we have -$$ -\begin{aligned} -R_{00} & = \emptyset -\\ -R_{01} & = -\{\, (x, y) \to (x+1, y) \mid -(x \ge 0 \wedge 3y \ge 2 + 2x \wedge x \le 2 \wedge 3y \le 3 + 2x) \,\} -\\ -R_{10} & = -\{\, (x, y) \to (x_2, y_2) \mid (3y = 2x \wedge x_2 = x \wedge 3y_2 = 3 + 2x \wedge x \ge 0 \wedge x \le 3) \,\} -\\ -R_{11} & = \emptyset -. -\end{aligned} -$$ -In the first iteration, $R_{00}$ remains the same ($\emptyset^+ = \emptyset$). -$R_{01}$ and $R_{10}$ are therefore also unaffected, but -$R_{11}$ is updated to include $R_{01} \circ R_{10}$, i.e., -the dashed arrow in the figure. -This new $R_{11}$ is obviously transitively closed, so it is not -changed in the second iteration and it does not have an effect -on $R_{01}$ and $R_{10}$. However, $R_{00}$ is updated to -include $R_{10} \circ R_{01}$, i.e., the dotted arrow in the figure. -The transitive closure of the original relation is then equal to -$R_{00} \cup R_{01} \cup R_{10} \cup R_{11}$. -\end{example} - -\subsection{Incremental Computation} -\label{s:incremental} - -In some cases it is possible and useful to compute the transitive closure -of union of basic relations incrementally. In particular, -if $R$ is a union of $m$ basic maps, -$$ -R = \bigcup_j R_j -, -$$ -then we can pick some $R_i$ and compute the transitive closure of $R$ as -\begin{equation} -\label{eq:transitive:incremental} -R^+ = R_i^+ \cup -\left( -\bigcup_{j \ne i} -R_i^* \circ R_j \circ R_i^* -\right)^+ -. -\end{equation} -For this approach to be successful, it is crucial that each -of the disjuncts in the argument of the second transitive -closure in \eqref{eq:transitive:incremental} be representable -as a single basic relation, i.e., without a union. -If this condition holds, then by using \eqref{eq:transitive:incremental}, -the number of disjuncts in the argument of the transitive closure -can be reduced by one. -Now, $R_i^* = R_i^+ \cup \identity$, but in some cases it is possible -to relax the constraints of $R_i^+$ to include part of the identity relation, -say on domain $D$. We will use the notation -${\cal C}(R_i,D) = R_i^+ \cup \identity_D$ to represent -this relaxed version of $R^+$. -\shortciteN{Kelly1996closure} use the notation $R_i^?$. -${\cal C}(R_i,D)$ can be computed by allowing $k$ to attain -the value $0$ in \eqref{eq:transitive:Q} and by using -$$ -P \cap \left(D \to D\right) -$$ -instead of \eqref{eq:transitive:approx}. -Typically, $D$ will be a strict superset of both $\domain R_i$ -and $\range R_i$. We therefore need to check that domain -and range of the transitive closure are part of ${\cal C}(R_i,D)$, -i.e., the part that results from the paths of positive length ($k \ge 1$), -are equal to the domain and range of $R_i$. -If not, then the incremental approach cannot be applied for -the given choice of $R_i$ and $D$. - -In order to be able to replace $R^*$ by ${\cal C}(R_i,D)$ -in \eqref{eq:transitive:incremental}, $D$ should be chosen -to include both $\domain R$ and $\range R$, i.e., such -that $\identity_D \circ R_j \circ \identity_D = R_j$ for all $j\ne i$. -\shortciteN{Kelly1996closure} say that they use -$D = \domain R_i \cup \range R_i$, but presumably they mean that -they use $D = \domain R \cup \range R$. -Now, this expression of $D$ contains a union, so it not directly usable. -\shortciteN{Kelly1996closure} do not explain how they avoid this union. -Apparently, in their implementation, -they are using the convex hull of $\domain R \cup \range R$ -or at least an approximation of this convex hull. -We use the simple hull (\autoref{s:simple hull}) of $\domain R \cup \range R$. - -It is also possible to use a domain $D$ that does {\em not\/} -include $\domain R \cup \range R$, but then we have to -compose with ${\cal C}(R_i,D)$ more selectively. -In particular, if we have -\begin{equation} -\label{eq:transitive:right} -\text{for each $j \ne i$ either } -\domain R_j \subseteq D \text{ or } \domain R_j \cap \range R_i = \emptyset -\end{equation} -and, similarly, -\begin{equation} -\label{eq:transitive:left} -\text{for each $j \ne i$ either } -\range R_j \subseteq D \text{ or } \range R_j \cap \domain R_i = \emptyset -\end{equation} -then we can refine \eqref{eq:transitive:incremental} to -$$ -R_i^+ \cup -\left( -\left( -\bigcup_{\shortstack{$\scriptstyle\domain R_j \subseteq D $\\ - $\scriptstyle\range R_j \subseteq D$}} -{\cal C} \circ R_j \circ {\cal C} -\right) -\cup -\left( -\bigcup_{\shortstack{$\scriptstyle\domain R_j \cap \range R_i = \emptyset$\\ - $\scriptstyle\range R_j \subseteq D$}} -\!\!\!\!\! -{\cal C} \circ R_j -\right) -\cup -\left( -\bigcup_{\shortstack{$\scriptstyle\domain R_j \subseteq D $\\ - $\scriptstyle\range R_j \cap \domain R_i = \emptyset$}} -\!\!\!\!\! -R_j \circ {\cal C} -\right) -\cup -\left( -\bigcup_{\shortstack{$\scriptstyle\domain R_j \cap \range R_i = \emptyset$\\ - $\scriptstyle\range R_j \cap \domain R_i = \emptyset$}} -\!\!\!\!\! -R_j -\right) -\right)^+ -. -$$ -If only property~\eqref{eq:transitive:right} holds, -we can use -$$ -R_i^+ \cup -\left( -\left( -R_i^+ \cup \identity -\right) -\circ -\left( -\left( -\bigcup_{\shortstack{$\scriptstyle\domain R_j \subseteq D $}} -R_j \circ {\cal C} -\right) -\cup -\left( -\bigcup_{\shortstack{$\scriptstyle\domain R_j \cap \range R_i = \emptyset$}} -\!\!\!\!\! -R_j -\right) -\right)^+ -\right) -, -$$ -while if only property~\eqref{eq:transitive:left} holds, -we can use -$$ -R_i^+ \cup -\left( -\left( -\left( -\bigcup_{\shortstack{$\scriptstyle\range R_j \subseteq D $}} -{\cal C} \circ R_j -\right) -\cup -\left( -\bigcup_{\shortstack{$\scriptstyle\range R_j \cap \domain R_i = \emptyset$}} -\!\!\!\!\! -R_j -\right) -\right)^+ -\circ -\left( -R_i^+ \cup \identity -\right) -\right) -. -$$ - -It should be noted that if we want the result of the incremental -approach to be transitively closed, then we can only apply it -if all of the transitive closure operations involved are exact. -If, say, the second transitive closure in \eqref{eq:transitive:incremental} -contains extra elements, then the result does not necessarily contain -the composition of these extra elements with powers of $R_i$. - -\subsection{An {\tt Omega}-like implementation} - -While the main algorithm of \shortciteN{Kelly1996closure} is -designed to compute and underapproximation of the transitive closure, -the authors mention that they could also compute overapproximations. -In this section, we describe our implementation of an algorithm -that is based on their ideas. -Note that the {\tt Omega} library computes underapproximations -\shortcite[Section 6.4]{Omega_lib}. - -The main tool is Equation~(2) of \shortciteN{Kelly1996closure}. -The input relation $R$ is first overapproximated by a ``d-form'' relation -$$ -\{\, \vec i \to \vec j \mid \exists \vec \alpha : -\vec L \le \vec j - \vec i \le \vec U -\wedge -(\forall p : j_p - i_p = M_p \alpha_p) -\,\} -, -$$ -where $p$ ranges over the dimensions and $\vec L$, $\vec U$ and -$\vec M$ are constant integer vectors. The elements of $\vec U$ -may be $\infty$, meaning that there is no upper bound corresponding -to that element, and similarly for $\vec L$. -Such an overapproximation can be obtained by computing strides, -lower and upper bounds on the difference set $\Delta \, R$. -The transitive closure of such a ``d-form'' relation is -\begin{equation} -\label{eq:omega} -\{\, \vec i \to \vec j \mid \exists \vec \alpha, k : -k \ge 1 \wedge -k \, \vec L \le \vec j - \vec i \le k \, \vec U -\wedge -(\forall p : j_p - i_p = M_p \alpha_p) -\,\} -. -\end{equation} -The domain and range of this transitive closure are then -intersected with those of the input relation. -This is a special case of the algorithm in \autoref{s:power}. - -In their algorithm for computing lower bounds, the authors -use the above algorithm as a substep on the disjuncts in the relation. -At the end, they say -\begin{quote} -If an upper bound is required, it can be calculated in a manner -similar to that of a single conjunct [sic] relation. -\end{quote} -Presumably, the authors mean that a ``d-form'' approximation -of the whole input relation should be used. -However, the accuracy can be improved by also trying to -apply the incremental technique from the same paper, -which is explained in more detail in \autoref{s:incremental}. -In this case, ${\cal C}(R_i,D)$ can be obtained by -allowing the value zero for $k$ in \eqref{eq:omega}, -i.e., by computing -$$ -\{\, \vec i \to \vec j \mid \exists \vec \alpha, k : -k \ge 0 \wedge -k \, \vec L \le \vec j - \vec i \le k \, \vec U -\wedge -(\forall p : j_p - i_p = M_p \alpha_p) -\,\} -. -$$ -In our implementation we take as $D$ the simple hull -(\autoref{s:simple hull}) of $\domain R \cup \range R$. -To determine whether it is safe to use ${\cal C}(R_i,D)$, -we check the following conditions, as proposed by -\shortciteN{Kelly1996closure}: -${\cal C}(R_i,D) - R_i^+$ is not a union and for each $j \ne i$ -the condition -$$ -\left({\cal C}(R_i,D) - R_i^+\right) -\circ -R_j -\circ -\left({\cal C}(R_i,D) - R_i^+\right) -= -R_j -$$ -holds. diff --git a/cloog-0.17.0/isl/doc/isl.bib b/cloog-0.17.0/isl/doc/isl.bib deleted file mode 100644 index cfe8081..0000000 --- a/cloog-0.17.0/isl/doc/isl.bib +++ /dev/null @@ -1,313 +0,0 @@ -@inproceedings{Kelly1996closure, - author = {Wayne Kelly and - William Pugh and - Evan Rosser and - Tatiana Shpeisman}, - title = {Transitive Closure of Infinite Graphs and Its Applications}, - pages = {126-140}, - editor = {Chua-Huang Huang and - P. Sadayappan and - Utpal Banerjee and - David Gelernter and - Alexandru Nicolau and - David A. Padua}, - booktitle = {Languages and Compilers for Parallel Computing, 8th International - Workshop, LCPC'95, Columbus, Ohio, USA, August 10-12, 1995, - Proceedings}, - publisher = {Springer}, - series = {Lecture Notes in Computer Science}, - volume = {1033}, - year = {1996}, - isbn = {3-540-60765-X}, -} - -@inproceedings{Beletska2009, - author = {Beletska, Anna and Barthou, Denis and Bielecki, Wlodzimierz and Cohen, Albert}, - title = {Computing the Transitive Closure of a Union of Affine Integer Tuple Relations}, - booktitle = {COCOA '09: Proceedings of the 3rd International Conference on Combinatorial Optimization and Applications}, - year = {2009}, - isbn = {978-3-642-02025-4}, - pages = {98--109}, - location = {Huangshan, China}, - doi = {10.1007/978-3-642-02026-1_9}, - publisher = {Springer-Verlag}, - address = {Berlin, Heidelberg}, -} - -@book{Schrijver1986, - author = "Schrijver, Alexander", - title = "Theory of Linear and Integer Programming", - publisher = "John Wiley \& Sons", - year = 1986 -} - -@article{Tarjan1972, - author = {Tarjan, Robert}, - journal = {SIAM Journal on Computing}, - number = {2}, - pages = {146--160}, - publisher = {SIAM}, - title = {Depth-First Search and Linear Graph Algorithms}, - volume = {1}, - year = {1972} -} - -@TechReport{ Omega_calc, - author = "Wayne Kelly and Vadim Maslov and William Pugh and Evan Rosser and Tatiana Shpeisman and Dave Wonnacott", - title = "The {Omega} Calculator and Library", - month = nov, - institution = "University of Maryland", - year = 1996 -} - -@TechReport{ Omega_lib, - author = "Wayne Kelly and Vadim Maslov and William Pugh and Evan Rosser and Tatiana Shpeisman and Dave Wonnacott", - title = "The {Omega} Library", - month = nov, - institution = "University of Maryland", - year = 1996 -} - -@unpublished{Verdoolaege2009isl, - author = "Verdoolaege, Sven", - title = "An integer set library for program analysis", - note = "Advances in the Theory of Integer Linear Optimization and its Extensions,AMS 2009 Spring Western Section Meeting, San Francisco, California, 25-26 April 2009", - month = Apr, - year = "2009", - url = "https://lirias.kuleuven.be/handle/123456789/228373", -} - -@article{Barthou2000MSE, - author = {Barthou, Denis and Cohen, Albert and Collard, Jean-Fran\c{c}ois}, - title = {Maximal Static Expansion}, - journal = {Int. J. Parallel Program.}, - volume = {28}, - number = {3}, - year = {2000}, - issn = {0885-7458}, - pages = {213--243}, - doi = {10.1023/A:1007500431910}, - publisher = {Kluwer Academic Publishers}, - address = {Norwell, MA, USA}, -} - -@article{ Feautrier88parametric, - author = "P. Feautrier", - title = "Parametric Integer Programming", - journal = "RAIRO Recherche Op\'erationnelle", - volume = "22", - number = "3", - pages = "243--268", - year = "1988", -} - -@Article{ Fea91, - author = {Feautrier, P.}, - title = {Dataflow analysis of array and scalar references}, - journal = {International Journal of Parallel Programming}, - year = {1991}, - OPTkey = {}, - volume = {20}, - number = {1}, - OPTmonth = {}, - pages = {23--53}, - OPTnote = {}, - OPTannote = {}, -} - -@INPROCEEDINGS{BouletRe98, - AUTHOR = {Pierre Boulet and Xavier Redon}, - TITLE = {Communication Pre-evaluation in {HPF}}, - BOOKTITLE = {EUROPAR'98}, - PAGES = {263--272}, - YEAR = 1998, - VOLUME = 1470, - series = {Lecture Notes in Computer Science}, - PUBLISHER = {Springer-Verlag, Berlin}, - ABSTRACT = { Parallel computers are difficult to program efficiently. We believe - that a good way to help programmers write efficient programs is to - provide them with tools that show them how their programs behave on - a parallel computer. Data distribution is the major performance - factor of data-parallel programs and so automatic data layout for - HPF programs has been studied by many researchers recently. The - communication volume induced by a data distribution is a good - estimator of the efficiency of this data distribution. - - We present here a symbolic method to compute the communication - volume generated by a given data distribution during the program - writing phase (before compilation). We stay machine-independent to - assure portability. Our goal is to help the programmer understand - the data movements its program generates and thus find a good data - distribution. Our method is based on parametric polyhedral - computations. It can be applied to a large class of regular codes.}, -} - -@INPROCEEDINGS {Verdoolaege2005experiences, - AUTHOR = "Verdoolaege, Sven and Beyls, Kristof and Bruynooghe, Maurice and Catthoor, Francky", - TITLE = {{E}xperiences with enumeration of integer projections of parametric polytopes}, - BOOKTITLE = {{P}roceedings of 14th {I}nternational {C}onference on {C}ompiler {C}onstruction, {E}dinburgh, {S}cotland}, - YEAR = {2005}, - EDITOR = {Bodik, R.}, - VOLUME = 3443, - pages = "91-105", - series = "Lecture Notes in Computer Science", - publisher = "Springer-Verlag", - address = "Berlin", - doi = "10.1007/b107108", -} - -@article{Detlefs2005simplify, - author = {David Detlefs and Greg Nelson and James B. Saxe}, - title = {Simplify: a theorem prover for program checking}, - journal = {J. ACM}, - volume = {52}, - number = {3}, - year = {2005}, - issn = {0004-5411}, - pages = {365--473}, - doi = {10.1145/1066100.1066102}, - publisher = {ACM}, - address = {New York, NY, USA}, - } - -@phdthesis{Nelson1980phd, - author = {Charles Gregory Nelson}, - title = {Techniques for program verification}, - year = {1980}, - order_no = {AAI8011683}, - school = {Stanford University}, - address = {Stanford, CA, USA}, - } - -@article{Woods2003short, - year = 2003, - Journal = "J. Amer. Math. Soc.", - volume = 16, - pages = "957--979", - month = apr, - title = {{Short rational generating functions for lattice point - problems}}, - author = {Alexander Barvinok and Kevin Woods}, -} - -@misc{barvinok-0.22, - author = {Sven Verdoolaege}, - title = {{\texttt{barvinok}}, version 0.22}, - howpublished = {Available from \url{http://freshmeat.net/projects/barvinok/}}, - year = 2006 -} - -@inproceedings{DeLoera2004Three, - title = "Three Kinds of Integer Programming Algorithms based on Barvinok's Rational Functions", - author = "De Loera, J. A. and D. Haws and R. Hemmecke and P. Huggins and R. Yoshida", - booktitle = "Integer Programming and Combinatorial Optimization: 10th International IPCO Conference", - year = "2004", - month = jan, - series = "Lecture Notes in Computer Science", - Volume = 3064, - Pages = "244-255", -} - -@TechReport{Feautrier02, - author = {P. Feautrier and J. Collard and C. Bastoul}, - title = {Solving systems of affine (in)equalities}, - institution = {PRiSM, Versailles University}, - year = 2002 -} - -@article{ Feautrier92multi, - author = "Paul Feautrier", - title = "Some Efficient Solutions to the Affine Scheduling Problem. {P}art {II}. Multidimensional Time", - journal = "International Journal of Parallel Programming", - volume = "21", - number = "6", - pages = "389--420", - year = "1992", - month = dec, - url = "citeseer.nj.nec.com/article/feautrier92some.html", -} - -@misc{Bygde2010licentiate, - author = {Stefan Bygde}, - title = {Static {WCET} Analysis based on Abstract Interpretation and Counting of Elements}, - month = {March}, - year = {2010}, - howpublished = {Licentiate thesis}, - publisher = {M{\"{a}}lardalen University Press}, - url = {http://www.mrtc.mdh.se/index.php?choice=publications&id=2144}, -} - -@phdthesis{Meister2004PhD, - title = {Stating and Manipulating Periodicity in the Polytope Model. Applications to Program Analysis and Optimization}, - author= {Beno\^it Meister}, - school = {Universit\'e Louis Pasteur}, - month = Dec, - year = {2004}, -} - -@inproceedings{Meister2008, - author = {Beno\^it Meister and Sven Verdoolaege}, - title = {Polynomial Approximations in the Polytope Model: Bringing the Power - of Quasi-Polynomials to the Masses}, - year = {2008}, - booktitle = {Digest of the 6th Workshop on Optimization for DSP and Embedded Systems, ODES-6}, - editor = "Jagadeesh Sankaran and Vander Aa, Tom", - month = apr, -} - -@misc{Galea2009personal, - author = "Fran\c{c}ois Galea", - title = "personal communication", - year = 2009, - month = nov, -} - -@misc{PPL, - author = "R. Bagnara and P. M. Hill and E. Zaffanella", - title = "The {Parma Polyhedra Library}", - howpublished = {\url{http://www.cs.unipr.it/ppl/}}, -} - -@TECHREPORT{Cook1991implementation, -AUTHOR={William Cook and Thomas Rutherford and Herbert E. Scarf and David F. Shallcross}, -TITLE={An Implementation of the Generalized Basis Reduction Algorithm for Integer Programming}, -YEAR=1991, -MONTH=Aug, -INSTITUTION={Cowles Foundation, Yale University}, -TYPE={Cowles Foundation Discussion Papers}, -NOTE={available at \url{http://ideas.repec.org/p/cwl/cwldpp/990.html}}, -NUMBER={990}, -} - - @article{Karr1976affine, -author={ Michael Karr}, -title={ Affine Relationships Among Variables of a Program }, -journal={Acta Informatica}, -Volume={6}, -pages={133-151}, -year={1976}, -publisher={Springer-Verlag}, -ignore={ }, -} - -@PhdThesis{Verhaegh1995PhD, - title = "Multidimensional Periodic Scheduling", - author = "Wim F. J. Verhaegh", - school = "Technische Universiteit Eindhoven", - year = 1995, -} - -@INPROCEEDINGS{Seghir2006minimizing, - AUTHOR = "Rachid Seghir and Vincent Loechner", - TITLE = {Memory Optimization by Counting Points in Integer Transformations of Parametric Polytopes}, - BOOKTITLE = {{P}roceedings of the {I}nternational {C}onference on {C}ompilers, {A}rchitectures, and {S}ynthesis for {E}mbedded Systems, CASES 2006, {S}eoul, {K}orea}, - month = oct, - YEAR = {2006} -} - -@misc{DeSmet2010personal, - author = "De Smet, Sven", - title = "personal communication", - year = 2010, - month = apr, -} diff --git a/cloog-0.17.0/isl/doc/manual.pdf b/cloog-0.17.0/isl/doc/manual.pdf deleted file mode 100644 index 3bd22073f7559ca75e66825284f12820e11d639c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314986 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

&3S9@-M{yzw)pQd&6I_?s&7QHYWWr( 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ð+IpBdwvT~bkEyIpg2O}uAL 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 N%}lsdRbBnvxB&5vIo$vN diff --git a/cloog-0.17.0/isl/doc/manual.tex b/cloog-0.17.0/isl/doc/manual.tex deleted file mode 100644 index 91b3db0..0000000 --- a/cloog-0.17.0/isl/doc/manual.tex +++ /dev/null @@ -1,75 +0,0 @@ -\documentclass{report} -\usepackage[plainpages=false,pdfpagelabels,breaklinks,pagebackref]{hyperref} -\usepackage{amsmath} -\usepackage{amssymb} -\usepackage{txfonts} -\usepackage{chicago} -\usepackage{aliascnt} -\usepackage{tikz} -\usepackage{calc} -\usepackage[ruled]{algorithm2e} -\usetikzlibrary{matrix,fit,backgrounds,decorations.pathmorphing,positioning} -\usepackage{listings} - -\lstset{basicstyle=\tt,flexiblecolumns=false} - -\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle\bf#1$}} -{\mbox{\boldmath$\textstyle\bf#1$}} -{\mbox{\boldmath$\scriptstyle\bf#1$}} -{\mbox{\boldmath$\scriptscriptstyle\bf#1$}}} - -\providecommand{\fract}[1]{\left\{#1\right\}} -\providecommand{\floor}[1]{\left\lfloor#1\right\rfloor} -\providecommand{\ceil}[1]{\left\lceil#1\right\rceil} -\def\sp#1#2{\langle #1, #2 \rangle} -\def\spv#1#2{\langle\vec #1,\vec #2\rangle} - -\newtheorem{theorem}{Theorem} -\newaliascnt{example}{theorem} -\newtheorem{example}[example]{Example} -\newaliascnt{def}{theorem} -\newtheorem{definition}[def]{Definition} -\aliascntresetthe{example} -\aliascntresetthe{def} -\numberwithin{theorem}{section} -\numberwithin{def}{section} -\numberwithin{example}{section} - -\newcommand{\algocflineautorefname}{Algorithm} -\newcommand{\exampleautorefname}{Example} -\newcommand{\lstnumberautorefname}{Line} -\renewcommand{\sectionautorefname}{Section} -\renewcommand{\subsectionautorefname}{Section} - -\def\Z{\mathbb{Z}} -\def\Q{\mathbb{Q}} - -\def\pdom{\mathop{\rm pdom}\nolimits} -\def\domain{\mathop{\rm dom}\nolimits} -\def\range{\mathop{\rm ran}\nolimits} -\def\identity{\mathop{\rm Id}\nolimits} -\def\diff{\mathop{\Delta}\nolimits} - -\providecommand{\floor}[1]{\left\lfloor#1\right\rfloor} - -\begin{document} - -\title{Integer Set Library: Manual\\ -\small Version: \input{version} } -\author{Sven Verdoolaege} - -\maketitle -\tableofcontents - -\chapter{User Manual} - -\input{user} - -\chapter{Implementation Details} - -\input{implementation} - -\bibliography{isl} -\bibliographystyle{chicago} - -\end{document} diff --git a/cloog-0.17.0/isl/doc/mypod2latex b/cloog-0.17.0/isl/doc/mypod2latex deleted file mode 100755 index b11c059..0000000 --- a/cloog-0.17.0/isl/doc/mypod2latex +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Pod::LaTeX; - -my ($in, $out) = @ARGV; - -my $parser = new Pod::LaTeX( - AddPreamble => 0, - AddPostamble => 0, - LevelNoNum => 5, - ); - -$parser->parse_from_file($in, $out); diff --git a/cloog-0.17.0/isl/doc/user.pod b/cloog-0.17.0/isl/doc/user.pod deleted file mode 100644 index 720a12a..0000000 --- a/cloog-0.17.0/isl/doc/user.pod +++ /dev/null @@ -1,4267 +0,0 @@ -=head1 Introduction - -C is a thread-safe C library for manipulating -sets and relations of integer points bounded by affine constraints. -The descriptions of the sets and relations may involve -both parameters and existentially quantified variables. -All computations are performed in exact integer arithmetic -using C. -The C library offers functionality that is similar -to that offered by the C and C libraries, -but the underlying algorithms are in most cases completely different. - -The library is by no means complete and some fairly basic -functionality is still missing. -Still, even in its current form, the library has been successfully -used as a backend polyhedral library for the polyhedral -scanner C and as part of an equivalence checker of -static affine programs. -For bug reports, feature requests and questions, -visit the the discussion group at -L. - -=head2 Backward Incompatible Changes - -=head3 Changes since isl-0.02 - -=over - -=item * The old printing functions have been deprecated -and replaced by C functions, see L. - -=item * Most functions related to dependence analysis have acquired -an extra C argument. To obtain the old behavior, this argument -should be given the value 1. See L. - -=back - -=head3 Changes since isl-0.03 - -=over - -=item * The function C has been -renamed to C. -Similarly, C has been -renamed to C. - -=back - -=head3 Changes since isl-0.04 - -=over - -=item * All header files have been renamed from C -to C. - -=back - -=head3 Changes since isl-0.05 - -=over - -=item * The functions C and -C no longer print a newline. - -=item * The functions C -and C now return -the accesses for which no source could be found instead of -the iterations where those accesses occur. - -=item * The functions C and -C now take a B space as input. An old call -C can be rewritten to -C. - -=item * The function C no longer takes -a parameter position as input. Instead, the exponent -is now expressed as the domain of the resulting relation. - -=back - -=head3 Changes since isl-0.06 - -=over - -=item * The format of C's -C output has changed. -Use C to obtain the old output. - -=item * The C<*_fast_*> functions have been renamed to C<*_plain_*>. -Some of the old names have been kept for backward compatibility, -but they will be removed in the future. - -=back - -=head3 Changes since isl-0.07 - -=over - -=item * The function C has been renamed to -C. -Similarly, the function C has been renamed to -C. - -=item * The C type has been renamed to C -along with the associated functions. -Some of the old names have been kept for backward compatibility, -but they will be removed in the future. - -=item * Spaces of maps, sets and parameter domains are now -treated differently. The distinction between map spaces and set spaces -has always been made on a conceptual level, but proper use of such spaces -was never checked. Furthermore, up until isl-0.07 there was no way -of explicitly creating a parameter space. These can now be created -directly using C or from other spaces using -C. - -=item * The space in which C, C, C, -C, C and C -objects live is now a map space -instead of a set space. This means, for example, that the dimensions -of the domain of an C are now considered to be of type -C instead of C. Extra functions have been -added to obtain the domain space. Some of the constructors still -take a domain space and have therefore been renamed. - -=item * The functions C and C -now take an C instead of an C. -An C can be created from an C -using C. - -=item * The C type has been removed. Functions that used -to return an C now return an C. -Note that the space of an C is that of relation. -When replacing a call to C by a call to -C any C argument needs -to be replaced by C. -A call to C can be replaced by a call -to C. -A call to C call be replaced by -the nested call - - isl_qpolynomial_from_aff(isl_aff_floor(div)) - -The function C has also been renamed -to C. - -=item * The C argument has been removed from -C and similar functions. -When reading input in the original PolyLib format, -the result will have no parameters. -If parameters are expected, the caller may want to perform -dimension manipulation on the result. - -=back - -=head1 Installation - -The source of C can be obtained either as a tarball -or from the git repository. Both are available from -L. -The installation process depends on how you obtained -the source. - -=head2 Installation from the git repository - -=over - -=item 1 Clone or update the repository - -The first time the source is obtained, you need to clone -the repository. - - git clone git://repo.or.cz/isl.git - -To obtain updates, you need to pull in the latest changes - - git pull - -=item 2 Generate C - - ./autogen.sh - -=back - -After performing the above steps, continue -with the L. - -=head2 Common installation instructions - -=over - -=item 1 Obtain C - -Building C requires C, including its headers files. -Your distribution may not provide these header files by default -and you may need to install a package called C or something -similar. Alternatively, C can be built from -source, available from L. - -=item 2 Configure - -C uses the standard C C script. -To run it, just type - - ./configure - -optionally followed by some configure options. -A complete list of options can be obtained by running - - ./configure --help - -Below we discuss some of the more common options. - -C can optionally use C, but no -C functionality is currently used by default. -The C<--with-piplib> option can -be used to specify which C -library to use, either an installed version (C), -an externally built version (C) -or no version (C). The option C is mostly useful -in C scripts of larger projects that bundle both C -and C. - -=over - -=item C<--prefix> - -Installation prefix for C - -=item C<--with-gmp-prefix> - -Installation prefix for C (architecture-independent files). - -=item C<--with-gmp-exec-prefix> - -Installation prefix for C (architecture-dependent files). - -=item C<--with-piplib> - -Which copy of C to use, either C (default), C or C. - -=item C<--with-piplib-prefix> - -Installation prefix for C C (architecture-independent files). - -=item C<--with-piplib-exec-prefix> - -Installation prefix for C C (architecture-dependent files). - -=item C<--with-piplib-builddir> - -Location where C C was built. - -=back - -=item 3 Compile - - make - -=item 4 Install (optional) - - make install - -=back - -=head1 Library - -=head2 Initialization - -All manipulations of integer sets and relations occur within -the context of an C. -A given C can only be used within a single thread. -All arguments of a function are required to have been allocated -within the same context. -There are currently no functions available for moving an object -from one C to another C. This means that -there is currently no way of safely moving an object from one -thread to another, unless the whole C is moved. - -An C can be allocated using C and -freed using C. -All objects allocated within an C should be freed -before the C itself is freed. - - isl_ctx *isl_ctx_alloc(); - void isl_ctx_free(isl_ctx *ctx); - -=head2 Integers - -All operations on integers, mainly the coefficients -of the constraints describing the sets and relations, -are performed in exact integer arithmetic using C. -However, to allow future versions of C to optionally -support fixed integer arithmetic, all calls to C -are wrapped inside C specific macros. -The basic type is C and the operations below -are available on this type. -The meanings of these operations are essentially the same -as their C C counterparts. -As always with C types, Cs need to be -initialized with C before they can be used -and they need to be released with C -after the last use. -The user should not assume that an C is represented -as a C, but should instead explicitly convert between -Cs and Cs using C and -C whenever a C is required. - -=over - -=item isl_int_init(i) - -=item isl_int_clear(i) - -=item isl_int_set(r,i) - -=item isl_int_set_si(r,i) - -=item isl_int_set_gmp(r,g) - -=item isl_int_get_gmp(i,g) - -=item isl_int_abs(r,i) - -=item isl_int_neg(r,i) - -=item isl_int_swap(i,j) - -=item isl_int_swap_or_set(i,j) - -=item isl_int_add_ui(r,i,j) - -=item isl_int_sub_ui(r,i,j) - -=item isl_int_add(r,i,j) - -=item isl_int_sub(r,i,j) - -=item isl_int_mul(r,i,j) - -=item isl_int_mul_ui(r,i,j) - -=item isl_int_addmul(r,i,j) - -=item isl_int_submul(r,i,j) - -=item isl_int_gcd(r,i,j) - -=item isl_int_lcm(r,i,j) - -=item isl_int_divexact(r,i,j) - -=item isl_int_cdiv_q(r,i,j) - -=item isl_int_fdiv_q(r,i,j) - -=item isl_int_fdiv_r(r,i,j) - -=item isl_int_fdiv_q_ui(r,i,j) - -=item isl_int_read(r,s) - -=item isl_int_print(out,i,width) - -=item isl_int_sgn(i) - -=item isl_int_cmp(i,j) - -=item isl_int_cmp_si(i,si) - -=item isl_int_eq(i,j) - -=item isl_int_ne(i,j) - -=item isl_int_lt(i,j) - -=item isl_int_le(i,j) - -=item isl_int_gt(i,j) - -=item isl_int_ge(i,j) - -=item isl_int_abs_eq(i,j) - -=item isl_int_abs_ne(i,j) - -=item isl_int_abs_lt(i,j) - -=item isl_int_abs_gt(i,j) - -=item isl_int_abs_ge(i,j) - -=item isl_int_is_zero(i) - -=item isl_int_is_one(i) - -=item isl_int_is_negone(i) - -=item isl_int_is_pos(i) - -=item isl_int_is_neg(i) - -=item isl_int_is_nonpos(i) - -=item isl_int_is_nonneg(i) - -=item isl_int_is_divisible_by(i,j) - -=back - -=head2 Sets and Relations - -C uses six types of objects for representing sets and relations, -C, C, C, C, -C and C. -C and C represent sets and relations that -can be described as a conjunction of affine constraints, while -C and C represent unions of -Cs and Cs, respectively. -However, all Cs or Cs in the union need -to live in the same space. Cs and Cs -represent unions of Cs or Cs in I spaces, -where spaces are considered different if they have a different number -of dimensions and/or different names (see L<"Spaces">). -The difference between sets and relations (maps) is that sets have -one set of variables, while relations have two sets of variables, -input variables and output variables. - -=head2 Memory Management - -Since a high-level operation on sets and/or relations usually involves -several substeps and since the user is usually not interested in -the intermediate results, most functions that return a new object -will also release all the objects passed as arguments. -If the user still wants to use one or more of these arguments -after the function call, she should pass along a copy of the -object rather than the object itself. -The user is then responsible for making sure that the original -object gets used somewhere else or is explicitly freed. - -The arguments and return values of all documented functions are -annotated to make clear which arguments are released and which -arguments are preserved. In particular, the following annotations -are used - -=over - -=item C<__isl_give> - -C<__isl_give> means that a new object is returned. -The user should make sure that the returned pointer is -used exactly once as a value for an C<__isl_take> argument. -In between, it can be used as a value for as many -C<__isl_keep> arguments as the user likes. -There is one exception, and that is the case where the -pointer returned is C. Is this case, the user -is free to use it as an C<__isl_take> argument or not. - -=item C<__isl_take> - -C<__isl_take> means that the object the argument points to -is taken over by the function and may no longer be used -by the user as an argument to any other function. -The pointer value must be one returned by a function -returning an C<__isl_give> pointer. -If the user passes in a C value, then this will -be treated as an error in the sense that the function will -not perform its usual operation. However, it will still -make sure that all the other C<__isl_take> arguments -are released. - -=item C<__isl_keep> - -C<__isl_keep> means that the function will only use the object -temporarily. After the function has finished, the user -can still use it as an argument to other functions. -A C value will be treated in the same way as -a C value for an C<__isl_take> argument. - -=back - -=head2 Error Handling - -C supports different ways to react in case a runtime error is triggered. -Runtime errors arise, e.g., if a function such as C is called -with two maps that have incompatible spaces. There are three possible ways -to react on error: to warn, to continue or to abort. - -The default behavior is to warn. In this mode, C prints a warning, stores -the last error in the corresponding C and the function in which the -error was triggered returns C. An error does not corrupt internal state, -such that isl can continue to be used. C also provides functions to -read the last error and to reset the memory that stores the last error. The -last error is only stored for information purposes. Its presence does not -change the behavior of C. Hence, resetting an error is not required to -continue to use isl, but only to observe new errors. - - #include - enum isl_error isl_ctx_last_error(isl_ctx *ctx); - void isl_ctx_reset_error(isl_ctx *ctx); - -Another option is to continue on error. This is similar to warn on error mode, -except that C does not print any warning. This allows a program to -implement its own error reporting. - -The last option is to directly abort the execution of the program from within -the isl library. This makes it obviously impossible to recover from an error, -but it allows to directly spot the error location. By aborting on error, -debuggers break at the location the error occurred and can provide a stack -trace. Other tools that automatically provide stack traces on abort or that do -not want to continue execution after an error was triggered may also prefer to -abort on error. - -The on error behavior of isl can be specified by calling -C or by setting the command line option -C<--isl-on-error>. Valid arguments for the function call are -C, C and C. The -choices for the command line option are C, C and C. -It is also possible to query the current error mode. - - #include - int isl_options_set_on_error(isl_ctx *ctx, int val); - int isl_options_get_on_error(isl_ctx *ctx); - -=head2 Identifiers - -Identifiers are used to identify both individual dimensions -and tuples of dimensions. They consist of a name and an optional -pointer. Identifiers with the same name but different pointer values -are considered to be distinct. -Identifiers can be constructed, copied, freed, inspected and printed -using the following functions. - - #include - __isl_give isl_id *isl_id_alloc(isl_ctx *ctx, - __isl_keep const char *name, void *user); - __isl_give isl_id *isl_id_copy(isl_id *id); - void *isl_id_free(__isl_take isl_id *id); - - isl_ctx *isl_id_get_ctx(__isl_keep isl_id *id); - void *isl_id_get_user(__isl_keep isl_id *id); - __isl_keep const char *isl_id_get_name(__isl_keep isl_id *id); - - __isl_give isl_printer *isl_printer_print_id( - __isl_take isl_printer *p, __isl_keep isl_id *id); - -Note that C returns a pointer to some internal -data structure, so the result can only be used while the -corresponding C is alive. - -=head2 Spaces - -Whenever a new set or relation is created from scratch, -the space in which it lives needs to be specified using an C. - - #include - __isl_give isl_space *isl_space_alloc(isl_ctx *ctx, - unsigned nparam, unsigned n_in, unsigned n_out); - __isl_give isl_space *isl_space_params_alloc(isl_ctx *ctx, - unsigned nparam); - __isl_give isl_space *isl_space_set_alloc(isl_ctx *ctx, - unsigned nparam, unsigned dim); - __isl_give isl_space *isl_space_copy(__isl_keep isl_space *space); - void isl_space_free(__isl_take isl_space *space); - unsigned isl_space_dim(__isl_keep isl_space *space, - enum isl_dim_type type); - -The space used for creating a parameter domain -needs to be created using C. -For other sets, the space -needs to be created using C, while -for a relation, the space -needs to be created using C. -C can be used -to find out the number of dimensions of each type in -a space, where type may be -C, C (only for relations), -C (only for relations), C -(only for sets) or C. - -To check whether a given space is that of a set or a map -or whether it is a parameter space, use these functions: - - #include - int isl_space_is_params(__isl_keep isl_space *space); - int isl_space_is_set(__isl_keep isl_space *space); - -It is often useful to create objects that live in the -same space as some other object. This can be accomplished -by creating the new objects -(see L or -L) based on the space -of the original object. - - #include - __isl_give isl_space *isl_basic_set_get_space( - __isl_keep isl_basic_set *bset); - __isl_give isl_space *isl_set_get_space(__isl_keep isl_set *set); - - #include - __isl_give isl_space *isl_union_set_get_space( - __isl_keep isl_union_set *uset); - - #include - __isl_give isl_space *isl_basic_map_get_space( - __isl_keep isl_basic_map *bmap); - __isl_give isl_space *isl_map_get_space(__isl_keep isl_map *map); - - #include - __isl_give isl_space *isl_union_map_get_space( - __isl_keep isl_union_map *umap); - - #include - __isl_give isl_space *isl_constraint_get_space( - __isl_keep isl_constraint *constraint); - - #include - __isl_give isl_space *isl_qpolynomial_get_domain_space( - __isl_keep isl_qpolynomial *qp); - __isl_give isl_space *isl_qpolynomial_get_space( - __isl_keep isl_qpolynomial *qp); - __isl_give isl_space *isl_qpolynomial_fold_get_space( - __isl_keep isl_qpolynomial_fold *fold); - __isl_give isl_space *isl_pw_qpolynomial_get_domain_space( - __isl_keep isl_pw_qpolynomial *pwqp); - __isl_give isl_space *isl_pw_qpolynomial_get_space( - __isl_keep isl_pw_qpolynomial *pwqp); - __isl_give isl_space *isl_pw_qpolynomial_fold_get_domain_space( - __isl_keep isl_pw_qpolynomial_fold *pwf); - __isl_give isl_space *isl_pw_qpolynomial_fold_get_space( - __isl_keep isl_pw_qpolynomial_fold *pwf); - __isl_give isl_space *isl_union_pw_qpolynomial_get_space( - __isl_keep isl_union_pw_qpolynomial *upwqp); - __isl_give isl_space *isl_union_pw_qpolynomial_fold_get_space( - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - - #include - __isl_give isl_space *isl_aff_get_domain_space( - __isl_keep isl_aff *aff); - __isl_give isl_space *isl_aff_get_space( - __isl_keep isl_aff *aff); - __isl_give isl_space *isl_pw_aff_get_domain_space( - __isl_keep isl_pw_aff *pwaff); - __isl_give isl_space *isl_pw_aff_get_space( - __isl_keep isl_pw_aff *pwaff); - __isl_give isl_space *isl_multi_aff_get_space( - __isl_keep isl_multi_aff *maff); - __isl_give isl_space *isl_pw_multi_aff_get_domain_space( - __isl_keep isl_pw_multi_aff *pma); - __isl_give isl_space *isl_pw_multi_aff_get_space( - __isl_keep isl_pw_multi_aff *pma); - - #include - __isl_give isl_space *isl_point_get_space( - __isl_keep isl_point *pnt); - -The identifiers or names of the individual dimensions may be set or read off -using the following functions. - - #include - __isl_give isl_space *isl_space_set_dim_id( - __isl_take isl_space *space, - enum isl_dim_type type, unsigned pos, - __isl_take isl_id *id); - int isl_space_has_dim_id(__isl_keep isl_space *space, - enum isl_dim_type type, unsigned pos); - __isl_give isl_id *isl_space_get_dim_id( - __isl_keep isl_space *space, - enum isl_dim_type type, unsigned pos); - __isl_give isl_space *isl_space_set_dim_name(__isl_take isl_space *space, - enum isl_dim_type type, unsigned pos, - __isl_keep const char *name); - __isl_keep const char *isl_space_get_dim_name(__isl_keep isl_space *space, - enum isl_dim_type type, unsigned pos); - -Note that C returns a pointer to some internal -data structure, so the result can only be used while the -corresponding C is alive. -Also note that every function that operates on two sets or relations -requires that both arguments have the same parameters. This also -means that if one of the arguments has named parameters, then the -other needs to have named parameters too and the names need to match. -Pairs of C, C, C and/or C -arguments may have different parameters (as long as they are named), -in which case the result will have as parameters the union of the parameters of -the arguments. - -Given the identifier or name of a dimension (typically a parameter), -its position can be obtained from the following function. - - #include - int isl_space_find_dim_by_id(__isl_keep isl_space *space, - enum isl_dim_type type, __isl_keep isl_id *id); - int isl_space_find_dim_by_name(__isl_keep isl_space *space, - enum isl_dim_type type, const char *name); - -The identifiers or names of entire spaces may be set or read off -using the following functions. - - #include - __isl_give isl_space *isl_space_set_tuple_id( - __isl_take isl_space *space, - enum isl_dim_type type, __isl_take isl_id *id); - __isl_give isl_space *isl_space_reset_tuple_id( - __isl_take isl_space *space, enum isl_dim_type type); - int isl_space_has_tuple_id(__isl_keep isl_space *space, - enum isl_dim_type type); - __isl_give isl_id *isl_space_get_tuple_id( - __isl_keep isl_space *space, enum isl_dim_type type); - __isl_give isl_space *isl_space_set_tuple_name( - __isl_take isl_space *space, - enum isl_dim_type type, const char *s); - const char *isl_space_get_tuple_name(__isl_keep isl_space *space, - enum isl_dim_type type); - -The C argument needs to be one of C, C -or C. As with C, -the C function returns a pointer to some internal -data structure. -Binary operations require the corresponding spaces of their arguments -to have the same name. - -Spaces can be nested. In particular, the domain of a set or -the domain or range of a relation can be a nested relation. -The following functions can be used to construct and deconstruct -such nested spaces. - - #include - int isl_space_is_wrapping(__isl_keep isl_space *space); - __isl_give isl_space *isl_space_wrap(__isl_take isl_space *space); - __isl_give isl_space *isl_space_unwrap(__isl_take isl_space *space); - -The input to C and C should -be the space of a set, while that of -C should be the space of a relation. -Conversely, the output of C is the space -of a relation, while that of C is the space of a set. - -Spaces can be created from other spaces -using the following functions. - - __isl_give isl_space *isl_space_domain(__isl_take isl_space *space); - __isl_give isl_space *isl_space_from_domain(__isl_take isl_space *space); - __isl_give isl_space *isl_space_range(__isl_take isl_space *space); - __isl_give isl_space *isl_space_from_range(__isl_take isl_space *space); - __isl_give isl_space *isl_space_params( - __isl_take isl_space *space); - __isl_give isl_space *isl_space_set_from_params( - __isl_take isl_space *space); - __isl_give isl_space *isl_space_reverse(__isl_take isl_space *space); - __isl_give isl_space *isl_space_join(__isl_take isl_space *left, - __isl_take isl_space *right); - __isl_give isl_space *isl_space_align_params( - __isl_take isl_space *space1, __isl_take isl_space *space2) - __isl_give isl_space *isl_space_insert_dims(__isl_take isl_space *space, - enum isl_dim_type type, unsigned pos, unsigned n); - __isl_give isl_space *isl_space_add_dims(__isl_take isl_space *space, - enum isl_dim_type type, unsigned n); - __isl_give isl_space *isl_space_drop_dims(__isl_take isl_space *space, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_space *isl_space_move_dims(__isl_take isl_space *space, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, - unsigned n); - __isl_give isl_space *isl_space_map_from_set( - __isl_take isl_space *space); - __isl_give isl_space *isl_space_zip(__isl_take isl_space *space); - -Note that if dimensions are added or removed from a space, then -the name and the internal structure are lost. - -=head2 Local Spaces - -A local space is essentially a space with -zero or more existentially quantified variables. -The local space of a basic set or relation can be obtained -using the following functions. - - #include - __isl_give isl_local_space *isl_basic_set_get_local_space( - __isl_keep isl_basic_set *bset); - - #include - __isl_give isl_local_space *isl_basic_map_get_local_space( - __isl_keep isl_basic_map *bmap); - -A new local space can be created from a space using - - #include - __isl_give isl_local_space *isl_local_space_from_space( - __isl_take isl_space *space); - -They can be inspected, modified, copied and freed using the following functions. - - #include - isl_ctx *isl_local_space_get_ctx( - __isl_keep isl_local_space *ls); - int isl_local_space_is_set(__isl_keep isl_local_space *ls); - int isl_local_space_dim(__isl_keep isl_local_space *ls, - enum isl_dim_type type); - const char *isl_local_space_get_dim_name( - __isl_keep isl_local_space *ls, - enum isl_dim_type type, unsigned pos); - __isl_give isl_local_space *isl_local_space_set_dim_name( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned pos, const char *s); - __isl_give isl_local_space *isl_local_space_set_dim_id( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned pos, - __isl_take isl_id *id); - __isl_give isl_space *isl_local_space_get_space( - __isl_keep isl_local_space *ls); - __isl_give isl_aff *isl_local_space_get_div( - __isl_keep isl_local_space *ls, int pos); - __isl_give isl_local_space *isl_local_space_copy( - __isl_keep isl_local_space *ls); - void *isl_local_space_free(__isl_take isl_local_space *ls); - -Two local spaces can be compared using - - int isl_local_space_is_equal(__isl_keep isl_local_space *ls1, - __isl_keep isl_local_space *ls2); - -Local spaces can be created from other local spaces -using the following functions. - - __isl_give isl_local_space *isl_local_space_domain( - __isl_take isl_local_space *ls); - __isl_give isl_local_space *isl_local_space_range( - __isl_take isl_local_space *ls); - __isl_give isl_local_space *isl_local_space_from_domain( - __isl_take isl_local_space *ls); - __isl_give isl_local_space *isl_local_space_intersect( - __isl_take isl_local_space *ls1, - __isl_take isl_local_space *ls2); - __isl_give isl_local_space *isl_local_space_add_dims( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned n); - __isl_give isl_local_space *isl_local_space_insert_dims( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_local_space *isl_local_space_drop_dims( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned first, unsigned n); - -=head2 Input and Output - -C supports its own input/output format, which is similar -to the C format, but also supports the C format -in some cases. - -=head3 C format - -The C format is similar to that of C, but has a different -syntax for describing the parameters and allows for the definition -of an existentially quantified variable as the integer division -of an affine expression. -For example, the set of integers C between C<0> and C -such that C can be described as - - [n] -> { [i] : exists (a = [i/10] : 0 <= i and i <= n and - i - 10 a <= 6) } - -A set or relation can have several disjuncts, separated -by the keyword C. Each disjunct is either a conjunction -of constraints or a projection (C) of a conjunction -of constraints. The constraints are separated by the keyword -C. - -=head3 C format - -If the represented set is a union, then the first line -contains a single number representing the number of disjuncts. -Otherwise, a line containing the number C<1> is optional. - -Each disjunct is represented by a matrix of constraints. -The first line contains two numbers representing -the number of rows and columns, -where the number of rows is equal to the number of constraints -and the number of columns is equal to two plus the number of variables. -The following lines contain the actual rows of the constraint matrix. -In each row, the first column indicates whether the constraint -is an equality (C<0>) or inequality (C<1>). The final column -corresponds to the constant term. - -If the set is parametric, then the coefficients of the parameters -appear in the last columns before the constant column. -The coefficients of any existentially quantified variables appear -between those of the set variables and those of the parameters. - -=head3 Extended C format - -The extended C format is nearly identical to the -C format. The only difference is that the line -containing the number of rows and columns of a constraint matrix -also contains four additional numbers: -the number of output dimensions, the number of input dimensions, -the number of local dimensions (i.e., the number of existentially -quantified variables) and the number of parameters. -For sets, the number of ``output'' dimensions is equal -to the number of set dimensions, while the number of ``input'' -dimensions is zero. - -=head3 Input - - #include - __isl_give isl_basic_set *isl_basic_set_read_from_file( - isl_ctx *ctx, FILE *input); - __isl_give isl_basic_set *isl_basic_set_read_from_str( - isl_ctx *ctx, const char *str); - __isl_give isl_set *isl_set_read_from_file(isl_ctx *ctx, - FILE *input); - __isl_give isl_set *isl_set_read_from_str(isl_ctx *ctx, - const char *str); - - #include - __isl_give isl_basic_map *isl_basic_map_read_from_file( - isl_ctx *ctx, FILE *input); - __isl_give isl_basic_map *isl_basic_map_read_from_str( - isl_ctx *ctx, const char *str); - __isl_give isl_map *isl_map_read_from_file( - isl_ctx *ctx, FILE *input); - __isl_give isl_map *isl_map_read_from_str(isl_ctx *ctx, - const char *str); - - #include - __isl_give isl_union_set *isl_union_set_read_from_file( - isl_ctx *ctx, FILE *input); - __isl_give isl_union_set *isl_union_set_read_from_str( - isl_ctx *ctx, const char *str); - - #include - __isl_give isl_union_map *isl_union_map_read_from_file( - isl_ctx *ctx, FILE *input); - __isl_give isl_union_map *isl_union_map_read_from_str( - isl_ctx *ctx, const char *str); - -The input format is autodetected and may be either the C format -or the C format. - -=head3 Output - -Before anything can be printed, an C needs to -be created. - - __isl_give isl_printer *isl_printer_to_file(isl_ctx *ctx, - FILE *file); - __isl_give isl_printer *isl_printer_to_str(isl_ctx *ctx); - void isl_printer_free(__isl_take isl_printer *printer); - __isl_give char *isl_printer_get_str( - __isl_keep isl_printer *printer); - -The behavior of the printer can be modified in various ways - - __isl_give isl_printer *isl_printer_set_output_format( - __isl_take isl_printer *p, int output_format); - __isl_give isl_printer *isl_printer_set_indent( - __isl_take isl_printer *p, int indent); - __isl_give isl_printer *isl_printer_indent( - __isl_take isl_printer *p, int indent); - __isl_give isl_printer *isl_printer_set_prefix( - __isl_take isl_printer *p, const char *prefix); - __isl_give isl_printer *isl_printer_set_suffix( - __isl_take isl_printer *p, const char *suffix); - -The C may be either C, C, -C, C or C -and defaults to C. -Each line in the output is indented by C (set by -C) spaces -(default: 0), prefixed by C and suffixed by C. -In the C format output, -the coefficients of the existentially quantified variables -appear between those of the set variables and those -of the parameters. -The function C increases the indentation -by the specified amount (which may be negative). - -To actually print something, use - - #include - __isl_give isl_printer *isl_printer_print_basic_set( - __isl_take isl_printer *printer, - __isl_keep isl_basic_set *bset); - __isl_give isl_printer *isl_printer_print_set( - __isl_take isl_printer *printer, - __isl_keep isl_set *set); - - #include - __isl_give isl_printer *isl_printer_print_basic_map( - __isl_take isl_printer *printer, - __isl_keep isl_basic_map *bmap); - __isl_give isl_printer *isl_printer_print_map( - __isl_take isl_printer *printer, - __isl_keep isl_map *map); - - #include - __isl_give isl_printer *isl_printer_print_union_set( - __isl_take isl_printer *p, - __isl_keep isl_union_set *uset); - - #include - __isl_give isl_printer *isl_printer_print_union_map( - __isl_take isl_printer *p, - __isl_keep isl_union_map *umap); - -When called on a file printer, the following function flushes -the file. When called on a string printer, the buffer is cleared. - - __isl_give isl_printer *isl_printer_flush( - __isl_take isl_printer *p); - -=head2 Creating New Sets and Relations - -C has functions for creating some standard sets and relations. - -=over - -=item * Empty sets and relations - - __isl_give isl_basic_set *isl_basic_set_empty( - __isl_take isl_space *space); - __isl_give isl_basic_map *isl_basic_map_empty( - __isl_take isl_space *space); - __isl_give isl_set *isl_set_empty( - __isl_take isl_space *space); - __isl_give isl_map *isl_map_empty( - __isl_take isl_space *space); - __isl_give isl_union_set *isl_union_set_empty( - __isl_take isl_space *space); - __isl_give isl_union_map *isl_union_map_empty( - __isl_take isl_space *space); - -For Cs and Cs, the space -is only used to specify the parameters. - -=item * Universe sets and relations - - __isl_give isl_basic_set *isl_basic_set_universe( - __isl_take isl_space *space); - __isl_give isl_basic_map *isl_basic_map_universe( - __isl_take isl_space *space); - __isl_give isl_set *isl_set_universe( - __isl_take isl_space *space); - __isl_give isl_map *isl_map_universe( - __isl_take isl_space *space); - __isl_give isl_union_set *isl_union_set_universe( - __isl_take isl_union_set *uset); - __isl_give isl_union_map *isl_union_map_universe( - __isl_take isl_union_map *umap); - -The sets and relations constructed by the functions above -contain all integer values, while those constructed by the -functions below only contain non-negative values. - - __isl_give isl_basic_set *isl_basic_set_nat_universe( - __isl_take isl_space *space); - __isl_give isl_basic_map *isl_basic_map_nat_universe( - __isl_take isl_space *space); - __isl_give isl_set *isl_set_nat_universe( - __isl_take isl_space *space); - __isl_give isl_map *isl_map_nat_universe( - __isl_take isl_space *space); - -=item * Identity relations - - __isl_give isl_basic_map *isl_basic_map_identity( - __isl_take isl_space *space); - __isl_give isl_map *isl_map_identity( - __isl_take isl_space *space); - -The number of input and output dimensions in C needs -to be the same. - -=item * Lexicographic order - - __isl_give isl_map *isl_map_lex_lt( - __isl_take isl_space *set_space); - __isl_give isl_map *isl_map_lex_le( - __isl_take isl_space *set_space); - __isl_give isl_map *isl_map_lex_gt( - __isl_take isl_space *set_space); - __isl_give isl_map *isl_map_lex_ge( - __isl_take isl_space *set_space); - __isl_give isl_map *isl_map_lex_lt_first( - __isl_take isl_space *space, unsigned n); - __isl_give isl_map *isl_map_lex_le_first( - __isl_take isl_space *space, unsigned n); - __isl_give isl_map *isl_map_lex_gt_first( - __isl_take isl_space *space, unsigned n); - __isl_give isl_map *isl_map_lex_ge_first( - __isl_take isl_space *space, unsigned n); - -The first four functions take a space for a B -and return relations that express that the elements in the domain -are lexicographically less -(C), less or equal (C), -greater (C) or greater or equal (C) -than the elements in the range. -The last four functions take a space for a map -and return relations that express that the first C dimensions -in the domain are lexicographically less -(C), less or equal (C), -greater (C) or greater or equal (C) -than the first C dimensions in the range. - -=back - -A basic set or relation can be converted to a set or relation -using the following functions. - - __isl_give isl_set *isl_set_from_basic_set( - __isl_take isl_basic_set *bset); - __isl_give isl_map *isl_map_from_basic_map( - __isl_take isl_basic_map *bmap); - -Sets and relations can be converted to union sets and relations -using the following functions. - - __isl_give isl_union_map *isl_union_map_from_map( - __isl_take isl_map *map); - __isl_give isl_union_set *isl_union_set_from_set( - __isl_take isl_set *set); - -The inverse conversions below can only be used if the input -union set or relation is known to contain elements in exactly one -space. - - __isl_give isl_set *isl_set_from_union_set( - __isl_take isl_union_set *uset); - __isl_give isl_map *isl_map_from_union_map( - __isl_take isl_union_map *umap); - -A zero-dimensional set can be constructed on a given parameter domain -using the following function. - - __isl_give isl_set *isl_set_from_params( - __isl_take isl_set *set); - -Sets and relations can be copied and freed again using the following -functions. - - __isl_give isl_basic_set *isl_basic_set_copy( - __isl_keep isl_basic_set *bset); - __isl_give isl_set *isl_set_copy(__isl_keep isl_set *set); - __isl_give isl_union_set *isl_union_set_copy( - __isl_keep isl_union_set *uset); - __isl_give isl_basic_map *isl_basic_map_copy( - __isl_keep isl_basic_map *bmap); - __isl_give isl_map *isl_map_copy(__isl_keep isl_map *map); - __isl_give isl_union_map *isl_union_map_copy( - __isl_keep isl_union_map *umap); - void isl_basic_set_free(__isl_take isl_basic_set *bset); - void isl_set_free(__isl_take isl_set *set); - void *isl_union_set_free(__isl_take isl_union_set *uset); - void isl_basic_map_free(__isl_take isl_basic_map *bmap); - void isl_map_free(__isl_take isl_map *map); - void *isl_union_map_free(__isl_take isl_union_map *umap); - -Other sets and relations can be constructed by starting -from a universe set or relation, adding equality and/or -inequality constraints and then projecting out the -existentially quantified variables, if any. -Constraints can be constructed, manipulated and -added to (or removed from) (basic) sets and relations -using the following functions. - - #include - __isl_give isl_constraint *isl_equality_alloc( - __isl_take isl_local_space *ls); - __isl_give isl_constraint *isl_inequality_alloc( - __isl_take isl_local_space *ls); - __isl_give isl_constraint *isl_constraint_set_constant( - __isl_take isl_constraint *constraint, isl_int v); - __isl_give isl_constraint *isl_constraint_set_constant_si( - __isl_take isl_constraint *constraint, int v); - __isl_give isl_constraint *isl_constraint_set_coefficient( - __isl_take isl_constraint *constraint, - enum isl_dim_type type, int pos, isl_int v); - __isl_give isl_constraint *isl_constraint_set_coefficient_si( - __isl_take isl_constraint *constraint, - enum isl_dim_type type, int pos, int v); - __isl_give isl_basic_map *isl_basic_map_add_constraint( - __isl_take isl_basic_map *bmap, - __isl_take isl_constraint *constraint); - __isl_give isl_basic_set *isl_basic_set_add_constraint( - __isl_take isl_basic_set *bset, - __isl_take isl_constraint *constraint); - __isl_give isl_map *isl_map_add_constraint( - __isl_take isl_map *map, - __isl_take isl_constraint *constraint); - __isl_give isl_set *isl_set_add_constraint( - __isl_take isl_set *set, - __isl_take isl_constraint *constraint); - __isl_give isl_basic_set *isl_basic_set_drop_constraint( - __isl_take isl_basic_set *bset, - __isl_take isl_constraint *constraint); - -For example, to create a set containing the even integers -between 10 and 42, you would use the following code. - - isl_space *space; - isl_local_space *ls; - isl_constraint *c; - isl_basic_set *bset; - - space = isl_space_set_alloc(ctx, 0, 2); - bset = isl_basic_set_universe(isl_space_copy(space)); - ls = isl_local_space_from_space(space); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - c = isl_constraint_set_coefficient_si(c, isl_dim_set, 0, -1); - c = isl_constraint_set_coefficient_si(c, isl_dim_set, 1, 2); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_inequality_alloc(isl_local_space_copy(ls)); - c = isl_constraint_set_constant_si(c, -10); - c = isl_constraint_set_coefficient_si(c, isl_dim_set, 0, 1); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_inequality_alloc(ls); - c = isl_constraint_set_constant_si(c, 42); - c = isl_constraint_set_coefficient_si(c, isl_dim_set, 0, -1); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 1, 1); - -Or, alternatively, - - isl_basic_set *bset; - bset = isl_basic_set_read_from_str(ctx, - "{[i] : exists (a : i = 2a and i >= 10 and i <= 42)}"); - -A basic set or relation can also be constructed from two matrices -describing the equalities and the inequalities. - - __isl_give isl_basic_set *isl_basic_set_from_constraint_matrices( - __isl_take isl_space *space, - __isl_take isl_mat *eq, __isl_take isl_mat *ineq, - enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4); - __isl_give isl_basic_map *isl_basic_map_from_constraint_matrices( - __isl_take isl_space *space, - __isl_take isl_mat *eq, __isl_take isl_mat *ineq, - enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5); - -The C arguments indicate the order in which -different kinds of variables appear in the input matrices -and should be a permutation of C, C, -C and C for sets and -of C, C, -C, C and C for relations. - -A (basic) set or relation can also be constructed from a (piecewise) -(multiple) affine expression -or a list of affine expressions -(See L<"Piecewise Quasi Affine Expressions"> and -L<"Piecewise Multiple Quasi Affine Expressions">). - - __isl_give isl_basic_map *isl_basic_map_from_aff( - __isl_take isl_aff *aff); - __isl_give isl_set *isl_set_from_pw_aff( - __isl_take isl_pw_aff *pwaff); - __isl_give isl_map *isl_map_from_pw_aff( - __isl_take isl_pw_aff *pwaff); - __isl_give isl_basic_map *isl_basic_map_from_aff_list( - __isl_take isl_space *domain_space, - __isl_take isl_aff_list *list); - __isl_give isl_basic_map *isl_basic_map_from_multi_aff( - __isl_take isl_multi_aff *maff) - __isl_give isl_set *isl_set_from_pw_multi_aff( - __isl_take isl_pw_multi_aff *pma); - __isl_give isl_map *isl_map_from_pw_multi_aff( - __isl_take isl_pw_multi_aff *pma); - -The C argument describes the domain of the resulting -basic relation. It is required because the C may consist -of zero affine expressions. - -=head2 Inspecting Sets and Relations - -Usually, the user should not have to care about the actual constraints -of the sets and maps, but should instead apply the abstract operations -explained in the following sections. -Occasionally, however, it may be required to inspect the individual -coefficients of the constraints. This section explains how to do so. -In these cases, it may also be useful to have C compute -an explicit representation of the existentially quantified variables. - - __isl_give isl_set *isl_set_compute_divs( - __isl_take isl_set *set); - __isl_give isl_map *isl_map_compute_divs( - __isl_take isl_map *map); - __isl_give isl_union_set *isl_union_set_compute_divs( - __isl_take isl_union_set *uset); - __isl_give isl_union_map *isl_union_map_compute_divs( - __isl_take isl_union_map *umap); - -This explicit representation defines the existentially quantified -variables as integer divisions of the other variables, possibly -including earlier existentially quantified variables. -An explicitly represented existentially quantified variable therefore -has a unique value when the values of the other variables are known. -If, furthermore, the same existentials, i.e., existentials -with the same explicit representations, should appear in the -same order in each of the disjuncts of a set or map, then the user should call -either of the following functions. - - __isl_give isl_set *isl_set_align_divs( - __isl_take isl_set *set); - __isl_give isl_map *isl_map_align_divs( - __isl_take isl_map *map); - -Alternatively, the existentially quantified variables can be removed -using the following functions, which compute an overapproximation. - - __isl_give isl_basic_set *isl_basic_set_remove_divs( - __isl_take isl_basic_set *bset); - __isl_give isl_basic_map *isl_basic_map_remove_divs( - __isl_take isl_basic_map *bmap); - __isl_give isl_set *isl_set_remove_divs( - __isl_take isl_set *set); - __isl_give isl_map *isl_map_remove_divs( - __isl_take isl_map *map); - -To iterate over all the sets or maps in a union set or map, use - - int isl_union_set_foreach_set(__isl_keep isl_union_set *uset, - int (*fn)(__isl_take isl_set *set, void *user), - void *user); - int isl_union_map_foreach_map(__isl_keep isl_union_map *umap, - int (*fn)(__isl_take isl_map *map, void *user), - void *user); - -The number of sets or maps in a union set or map can be obtained -from - - int isl_union_set_n_set(__isl_keep isl_union_set *uset); - int isl_union_map_n_map(__isl_keep isl_union_map *umap); - -To extract the set or map in a given space from a union, use - - __isl_give isl_set *isl_union_set_extract_set( - __isl_keep isl_union_set *uset, - __isl_take isl_space *space); - __isl_give isl_map *isl_union_map_extract_map( - __isl_keep isl_union_map *umap, - __isl_take isl_space *space); - -To iterate over all the basic sets or maps in a set or map, use - - int isl_set_foreach_basic_set(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_basic_set *bset, void *user), - void *user); - int isl_map_foreach_basic_map(__isl_keep isl_map *map, - int (*fn)(__isl_take isl_basic_map *bmap, void *user), - void *user); - -The callback function C should return 0 if successful and --1 if an error occurs. In the latter case, or if any other error -occurs, the above functions will return -1. - -It should be noted that C does not guarantee that -the basic sets or maps passed to C are disjoint. -If this is required, then the user should call one of -the following functions first. - - __isl_give isl_set *isl_set_make_disjoint( - __isl_take isl_set *set); - __isl_give isl_map *isl_map_make_disjoint( - __isl_take isl_map *map); - -The number of basic sets in a set can be obtained -from - - int isl_set_n_basic_set(__isl_keep isl_set *set); - -To iterate over the constraints of a basic set or map, use - - #include - - int isl_basic_map_foreach_constraint( - __isl_keep isl_basic_map *bmap, - int (*fn)(__isl_take isl_constraint *c, void *user), - void *user); - void *isl_constraint_free(__isl_take isl_constraint *c); - -Again, the callback function C should return 0 if successful and --1 if an error occurs. In the latter case, or if any other error -occurs, the above functions will return -1. -The constraint C represents either an equality or an inequality. -Use the following function to find out whether a constraint -represents an equality. If not, it represents an inequality. - - int isl_constraint_is_equality( - __isl_keep isl_constraint *constraint); - -The coefficients of the constraints can be inspected using -the following functions. - - void isl_constraint_get_constant( - __isl_keep isl_constraint *constraint, isl_int *v); - void isl_constraint_get_coefficient( - __isl_keep isl_constraint *constraint, - enum isl_dim_type type, int pos, isl_int *v); - int isl_constraint_involves_dims( - __isl_keep isl_constraint *constraint, - enum isl_dim_type type, unsigned first, unsigned n); - -The explicit representations of the existentially quantified -variables can be inspected using the following function. -Note that the user is only allowed to use this function -if the inspected set or map is the result of a call -to C or C. -The existentially quantified variable is equal to the floor -of the returned affine expression. The affine expression -itself can be inspected using the functions in -L<"Piecewise Quasi Affine Expressions">. - - __isl_give isl_aff *isl_constraint_get_div( - __isl_keep isl_constraint *constraint, int pos); - -To obtain the constraints of a basic set or map in matrix -form, use the following functions. - - __isl_give isl_mat *isl_basic_set_equalities_matrix( - __isl_keep isl_basic_set *bset, - enum isl_dim_type c1, enum isl_dim_type c2, - enum isl_dim_type c3, enum isl_dim_type c4); - __isl_give isl_mat *isl_basic_set_inequalities_matrix( - __isl_keep isl_basic_set *bset, - enum isl_dim_type c1, enum isl_dim_type c2, - enum isl_dim_type c3, enum isl_dim_type c4); - __isl_give isl_mat *isl_basic_map_equalities_matrix( - __isl_keep isl_basic_map *bmap, - enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5); - __isl_give isl_mat *isl_basic_map_inequalities_matrix( - __isl_keep isl_basic_map *bmap, - enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5); - -The C arguments dictate the order in which -different kinds of variables appear in the resulting matrix -and should be a permutation of C, C, -C, C and C. - -The number of parameters, input, output or set dimensions can -be obtained using the following functions. - - unsigned isl_basic_set_dim(__isl_keep isl_basic_set *bset, - enum isl_dim_type type); - unsigned isl_basic_map_dim(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type); - unsigned isl_set_dim(__isl_keep isl_set *set, - enum isl_dim_type type); - unsigned isl_map_dim(__isl_keep isl_map *map, - enum isl_dim_type type); - -To check whether the description of a set or relation depends -on one or more given dimensions, it is not necessary to iterate over all -constraints. Instead the following functions can be used. - - int isl_basic_set_involves_dims( - __isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n); - int isl_set_involves_dims(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); - int isl_basic_map_involves_dims( - __isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n); - int isl_map_involves_dims(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n); - -Similarly, the following functions can be used to check whether -a given dimension is involved in any lower or upper bound. - - int isl_set_dim_has_lower_bound(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos); - int isl_set_dim_has_upper_bound(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos); - -The identifiers or names of the domain and range spaces of a set -or relation can be read off or set using the following functions. - - __isl_give isl_set *isl_set_set_tuple_id( - __isl_take isl_set *set, __isl_take isl_id *id); - __isl_give isl_set *isl_set_reset_tuple_id( - __isl_take isl_set *set); - int isl_set_has_tuple_id(__isl_keep isl_set *set); - __isl_give isl_id *isl_set_get_tuple_id( - __isl_keep isl_set *set); - __isl_give isl_map *isl_map_set_tuple_id( - __isl_take isl_map *map, enum isl_dim_type type, - __isl_take isl_id *id); - __isl_give isl_map *isl_map_reset_tuple_id( - __isl_take isl_map *map, enum isl_dim_type type); - int isl_map_has_tuple_id(__isl_keep isl_map *map, - enum isl_dim_type type); - __isl_give isl_id *isl_map_get_tuple_id( - __isl_keep isl_map *map, enum isl_dim_type type); - - const char *isl_basic_set_get_tuple_name( - __isl_keep isl_basic_set *bset); - __isl_give isl_basic_set *isl_basic_set_set_tuple_name( - __isl_take isl_basic_set *set, const char *s); - const char *isl_set_get_tuple_name( - __isl_keep isl_set *set); - const char *isl_basic_map_get_tuple_name( - __isl_keep isl_basic_map *bmap, - enum isl_dim_type type); - __isl_give isl_basic_map *isl_basic_map_set_tuple_name( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, const char *s); - const char *isl_map_get_tuple_name( - __isl_keep isl_map *map, - enum isl_dim_type type); - -As with C, the value returned points to -an internal data structure. -The identifiers, positions or names of individual dimensions can be -read off using the following functions. - - __isl_give isl_set *isl_set_set_dim_id( - __isl_take isl_set *set, enum isl_dim_type type, - unsigned pos, __isl_take isl_id *id); - int isl_set_has_dim_id(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos); - __isl_give isl_id *isl_set_get_dim_id( - __isl_keep isl_set *set, enum isl_dim_type type, - unsigned pos); - int isl_basic_map_has_dim_id( - __isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos); - __isl_give isl_map *isl_map_set_dim_id( - __isl_take isl_map *map, enum isl_dim_type type, - unsigned pos, __isl_take isl_id *id); - int isl_map_has_dim_id(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos); - __isl_give isl_id *isl_map_get_dim_id( - __isl_keep isl_map *map, enum isl_dim_type type, - unsigned pos); - - int isl_set_find_dim_by_id(__isl_keep isl_set *set, - enum isl_dim_type type, __isl_keep isl_id *id); - int isl_map_find_dim_by_id(__isl_keep isl_map *map, - enum isl_dim_type type, __isl_keep isl_id *id); - int isl_set_find_dim_by_name(__isl_keep isl_set *set, - enum isl_dim_type type, const char *name); - int isl_map_find_dim_by_name(__isl_keep isl_map *map, - enum isl_dim_type type, const char *name); - - const char *isl_constraint_get_dim_name( - __isl_keep isl_constraint *constraint, - enum isl_dim_type type, unsigned pos); - const char *isl_basic_set_get_dim_name( - __isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned pos); - const char *isl_set_get_dim_name( - __isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos); - const char *isl_basic_map_get_dim_name( - __isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos); - const char *isl_map_get_dim_name( - __isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos); - -These functions are mostly useful to obtain the identifiers, positions -or names of the parameters. Identifiers of individual dimensions are -essentially only useful for printing. They are ignored by all other -operations and may not be preserved across those operations. - -=head2 Properties - -=head3 Unary Properties - -=over - -=item * Emptiness - -The following functions test whether the given set or relation -contains any integer points. The ``plain'' variants do not perform -any computations, but simply check if the given set or relation -is already known to be empty. - - int isl_basic_set_plain_is_empty(__isl_keep isl_basic_set *bset); - int isl_basic_set_is_empty(__isl_keep isl_basic_set *bset); - int isl_set_plain_is_empty(__isl_keep isl_set *set); - int isl_set_is_empty(__isl_keep isl_set *set); - int isl_union_set_is_empty(__isl_keep isl_union_set *uset); - int isl_basic_map_plain_is_empty(__isl_keep isl_basic_map *bmap); - int isl_basic_map_is_empty(__isl_keep isl_basic_map *bmap); - int isl_map_plain_is_empty(__isl_keep isl_map *map); - int isl_map_is_empty(__isl_keep isl_map *map); - int isl_union_map_is_empty(__isl_keep isl_union_map *umap); - -=item * Universality - - int isl_basic_set_is_universe(__isl_keep isl_basic_set *bset); - int isl_basic_map_is_universe(__isl_keep isl_basic_map *bmap); - int isl_set_plain_is_universe(__isl_keep isl_set *set); - -=item * Single-valuedness - - int isl_map_is_single_valued(__isl_keep isl_map *map); - int isl_union_map_is_single_valued(__isl_keep isl_union_map *umap); - -=item * Injectivity - - int isl_map_plain_is_injective(__isl_keep isl_map *map); - int isl_map_is_injective(__isl_keep isl_map *map); - int isl_union_map_plain_is_injective( - __isl_keep isl_union_map *umap); - int isl_union_map_is_injective( - __isl_keep isl_union_map *umap); - -=item * Bijectivity - - int isl_map_is_bijective(__isl_keep isl_map *map); - int isl_union_map_is_bijective(__isl_keep isl_union_map *umap); - -=item * Position - - int isl_basic_map_plain_is_fixed( - __isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, - isl_int *val); - int isl_set_plain_is_fixed(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos, - isl_int *val); - int isl_map_plain_is_fixed(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos, - isl_int *val); - -Check if the relation obviously lies on a hyperplane where the given dimension -has a fixed value and if so, return that value in C<*val>. - -=item * Space - -To check whether a set is a parameter domain, use this function: - - int isl_set_is_params(__isl_keep isl_set *set); - int isl_union_set_is_params( - __isl_keep isl_union_set *uset); - -=item * Wrapping - -The following functions check whether the domain of the given -(basic) set is a wrapped relation. - - int isl_basic_set_is_wrapping( - __isl_keep isl_basic_set *bset); - int isl_set_is_wrapping(__isl_keep isl_set *set); - -=item * Internal Product - - int isl_basic_map_can_zip( - __isl_keep isl_basic_map *bmap); - int isl_map_can_zip(__isl_keep isl_map *map); - -Check whether the product of domain and range of the given relation -can be computed, -i.e., whether both domain and range are nested relations. - -=back - -=head3 Binary Properties - -=over - -=item * Equality - - int isl_set_plain_is_equal(__isl_keep isl_set *set1, - __isl_keep isl_set *set2); - int isl_set_is_equal(__isl_keep isl_set *set1, - __isl_keep isl_set *set2); - int isl_union_set_is_equal( - __isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2); - int isl_basic_map_is_equal( - __isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2); - int isl_map_is_equal(__isl_keep isl_map *map1, - __isl_keep isl_map *map2); - int isl_map_plain_is_equal(__isl_keep isl_map *map1, - __isl_keep isl_map *map2); - int isl_union_map_is_equal( - __isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2); - -=item * Disjointness - - int isl_set_plain_is_disjoint(__isl_keep isl_set *set1, - __isl_keep isl_set *set2); - -=item * Subset - - int isl_set_is_subset(__isl_keep isl_set *set1, - __isl_keep isl_set *set2); - int isl_set_is_strict_subset( - __isl_keep isl_set *set1, - __isl_keep isl_set *set2); - int isl_union_set_is_subset( - __isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2); - int isl_union_set_is_strict_subset( - __isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2); - int isl_basic_map_is_subset( - __isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2); - int isl_basic_map_is_strict_subset( - __isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2); - int isl_map_is_subset( - __isl_keep isl_map *map1, - __isl_keep isl_map *map2); - int isl_map_is_strict_subset( - __isl_keep isl_map *map1, - __isl_keep isl_map *map2); - int isl_union_map_is_subset( - __isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2); - int isl_union_map_is_strict_subset( - __isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2); - -=back - -=head2 Unary Operations - -=over - -=item * Complement - - __isl_give isl_set *isl_set_complement( - __isl_take isl_set *set); - -=item * Inverse map - - __isl_give isl_basic_map *isl_basic_map_reverse( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_reverse( - __isl_take isl_map *map); - __isl_give isl_union_map *isl_union_map_reverse( - __isl_take isl_union_map *umap); - -=item * Projection - - __isl_give isl_basic_set *isl_basic_set_project_out( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_basic_map *isl_basic_map_project_out( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_set *isl_set_project_out(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_map *isl_map_project_out(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_basic_set *isl_basic_set_params( - __isl_take isl_basic_set *bset); - __isl_give isl_basic_set *isl_basic_map_domain( - __isl_take isl_basic_map *bmap); - __isl_give isl_basic_set *isl_basic_map_range( - __isl_take isl_basic_map *bmap); - __isl_give isl_set *isl_set_params(__isl_take isl_set *set); - __isl_give isl_set *isl_map_params(__isl_take isl_map *map); - __isl_give isl_set *isl_map_domain( - __isl_take isl_map *bmap); - __isl_give isl_set *isl_map_range( - __isl_take isl_map *map); - __isl_give isl_set *isl_union_set_params( - __isl_take isl_union_set *uset); - __isl_give isl_set *isl_union_map_params( - __isl_take isl_union_map *umap); - __isl_give isl_union_set *isl_union_map_domain( - __isl_take isl_union_map *umap); - __isl_give isl_union_set *isl_union_map_range( - __isl_take isl_union_map *umap); - - __isl_give isl_basic_map *isl_basic_map_domain_map( - __isl_take isl_basic_map *bmap); - __isl_give isl_basic_map *isl_basic_map_range_map( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_domain_map(__isl_take isl_map *map); - __isl_give isl_map *isl_map_range_map(__isl_take isl_map *map); - __isl_give isl_union_map *isl_union_map_domain_map( - __isl_take isl_union_map *umap); - __isl_give isl_union_map *isl_union_map_range_map( - __isl_take isl_union_map *umap); - -The functions above construct a (basic, regular or union) relation -that maps (a wrapped version of) the input relation to its domain or range. - -=item * Elimination - - __isl_give isl_set *isl_set_eliminate( - __isl_take isl_set *set, enum isl_dim_type type, - unsigned first, unsigned n); - __isl_give isl_basic_map *isl_basic_map_eliminate( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, - unsigned first, unsigned n); - __isl_give isl_map *isl_map_eliminate( - __isl_take isl_map *map, enum isl_dim_type type, - unsigned first, unsigned n); - -Eliminate the coefficients for the given dimensions from the constraints, -without removing the dimensions. - -=item * Slicing - - __isl_give isl_basic_set *isl_basic_set_fix( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, - isl_int value); - __isl_give isl_basic_set *isl_basic_set_fix_si( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, int value); - __isl_give isl_set *isl_set_fix(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, - isl_int value); - __isl_give isl_set *isl_set_fix_si(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, int value); - __isl_give isl_basic_map *isl_basic_map_fix_si( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, int value); - __isl_give isl_map *isl_map_fix_si(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, int value); - -Intersect the set or relation with the hyperplane where the given -dimension has the fixed given value. - - __isl_give isl_basic_map *isl_basic_map_lower_bound_si( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, int value); - __isl_give isl_set *isl_set_lower_bound_si( - __isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, int value); - __isl_give isl_map *isl_map_lower_bound_si( - __isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, int value); - __isl_give isl_set *isl_set_upper_bound_si( - __isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, int value); - __isl_give isl_map *isl_map_upper_bound_si( - __isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, int value); - -Intersect the set or relation with the half-space where the given -dimension has a value bounded the fixed given value. - - __isl_give isl_set *isl_set_equate(__isl_take isl_set *set, - enum isl_dim_type type1, int pos1, - enum isl_dim_type type2, int pos2); - __isl_give isl_map *isl_map_equate(__isl_take isl_map *map, - enum isl_dim_type type1, int pos1, - enum isl_dim_type type2, int pos2); - -Intersect the set or relation with the hyperplane where the given -dimensions are equal to each other. - - __isl_give isl_map *isl_map_oppose(__isl_take isl_map *map, - enum isl_dim_type type1, int pos1, - enum isl_dim_type type2, int pos2); - -Intersect the relation with the hyperplane where the given -dimensions have opposite values. - -=item * Identity - - __isl_give isl_map *isl_set_identity( - __isl_take isl_set *set); - __isl_give isl_union_map *isl_union_set_identity( - __isl_take isl_union_set *uset); - -Construct an identity relation on the given (union) set. - -=item * Deltas - - __isl_give isl_basic_set *isl_basic_map_deltas( - __isl_take isl_basic_map *bmap); - __isl_give isl_set *isl_map_deltas(__isl_take isl_map *map); - __isl_give isl_union_set *isl_union_map_deltas( - __isl_take isl_union_map *umap); - -These functions return a (basic) set containing the differences -between image elements and corresponding domain elements in the input. - - __isl_give isl_basic_map *isl_basic_map_deltas_map( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_deltas_map( - __isl_take isl_map *map); - __isl_give isl_union_map *isl_union_map_deltas_map( - __isl_take isl_union_map *umap); - -The functions above construct a (basic, regular or union) relation -that maps (a wrapped version of) the input relation to its delta set. - -=item * Coalescing - -Simplify the representation of a set or relation by trying -to combine pairs of basic sets or relations into a single -basic set or relation. - - __isl_give isl_set *isl_set_coalesce(__isl_take isl_set *set); - __isl_give isl_map *isl_map_coalesce(__isl_take isl_map *map); - __isl_give isl_union_set *isl_union_set_coalesce( - __isl_take isl_union_set *uset); - __isl_give isl_union_map *isl_union_map_coalesce( - __isl_take isl_union_map *umap); - -=item * Detecting equalities - - __isl_give isl_basic_set *isl_basic_set_detect_equalities( - __isl_take isl_basic_set *bset); - __isl_give isl_basic_map *isl_basic_map_detect_equalities( - __isl_take isl_basic_map *bmap); - __isl_give isl_set *isl_set_detect_equalities( - __isl_take isl_set *set); - __isl_give isl_map *isl_map_detect_equalities( - __isl_take isl_map *map); - __isl_give isl_union_set *isl_union_set_detect_equalities( - __isl_take isl_union_set *uset); - __isl_give isl_union_map *isl_union_map_detect_equalities( - __isl_take isl_union_map *umap); - -Simplify the representation of a set or relation by detecting implicit -equalities. - -=item * Removing redundant constraints - - __isl_give isl_basic_set *isl_basic_set_remove_redundancies( - __isl_take isl_basic_set *bset); - __isl_give isl_set *isl_set_remove_redundancies( - __isl_take isl_set *set); - __isl_give isl_basic_map *isl_basic_map_remove_redundancies( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_remove_redundancies( - __isl_take isl_map *map); - -=item * Convex hull - - __isl_give isl_basic_set *isl_set_convex_hull( - __isl_take isl_set *set); - __isl_give isl_basic_map *isl_map_convex_hull( - __isl_take isl_map *map); - -If the input set or relation has any existentially quantified -variables, then the result of these operations is currently undefined. - -=item * Simple hull - - __isl_give isl_basic_set *isl_set_simple_hull( - __isl_take isl_set *set); - __isl_give isl_basic_map *isl_map_simple_hull( - __isl_take isl_map *map); - __isl_give isl_union_map *isl_union_map_simple_hull( - __isl_take isl_union_map *umap); - -These functions compute a single basic set or relation -that contains the whole input set or relation. -In particular, the output is described by translates -of the constraints describing the basic sets or relations in the input. - -=begin latex - -(See \autoref{s:simple hull}.) - -=end latex - -=item * Affine hull - - __isl_give isl_basic_set *isl_basic_set_affine_hull( - __isl_take isl_basic_set *bset); - __isl_give isl_basic_set *isl_set_affine_hull( - __isl_take isl_set *set); - __isl_give isl_union_set *isl_union_set_affine_hull( - __isl_take isl_union_set *uset); - __isl_give isl_basic_map *isl_basic_map_affine_hull( - __isl_take isl_basic_map *bmap); - __isl_give isl_basic_map *isl_map_affine_hull( - __isl_take isl_map *map); - __isl_give isl_union_map *isl_union_map_affine_hull( - __isl_take isl_union_map *umap); - -In case of union sets and relations, the affine hull is computed -per space. - -=item * Polyhedral hull - - __isl_give isl_basic_set *isl_set_polyhedral_hull( - __isl_take isl_set *set); - __isl_give isl_basic_map *isl_map_polyhedral_hull( - __isl_take isl_map *map); - __isl_give isl_union_set *isl_union_set_polyhedral_hull( - __isl_take isl_union_set *uset); - __isl_give isl_union_map *isl_union_map_polyhedral_hull( - __isl_take isl_union_map *umap); - -These functions compute a single basic set or relation -not involving any existentially quantified variables -that contains the whole input set or relation. -In case of union sets and relations, the polyhedral hull is computed -per space. - -=item * Optimization - - #include - enum isl_lp_result isl_basic_set_max( - __isl_keep isl_basic_set *bset, - __isl_keep isl_aff *obj, isl_int *opt) - enum isl_lp_result isl_set_min(__isl_keep isl_set *set, - __isl_keep isl_aff *obj, isl_int *opt); - enum isl_lp_result isl_set_max(__isl_keep isl_set *set, - __isl_keep isl_aff *obj, isl_int *opt); - -Compute the minimum or maximum of the integer affine expression C -over the points in C, returning the result in C. -The return value may be one of C, -C, C or C. - -=item * Parametric optimization - - __isl_give isl_pw_aff *isl_set_dim_min( - __isl_take isl_set *set, int pos); - __isl_give isl_pw_aff *isl_set_dim_max( - __isl_take isl_set *set, int pos); - __isl_give isl_pw_aff *isl_map_dim_max( - __isl_take isl_map *map, int pos); - -Compute the minimum or maximum of the given set or output dimension -as a function of the parameters (and input dimensions), but independently -of the other set or output dimensions. -For lexicographic optimization, see L<"Lexicographic Optimization">. - -=item * Dual - -The following functions compute either the set of (rational) coefficient -values of valid constraints for the given set or the set of (rational) -values satisfying the constraints with coefficients from the given set. -Internally, these two sets of functions perform essentially the -same operations, except that the set of coefficients is assumed to -be a cone, while the set of values may be any polyhedron. -The current implementation is based on the Farkas lemma and -Fourier-Motzkin elimination, but this may change or be made optional -in future. In particular, future implementations may use different -dualization algorithms or skip the elimination step. - - __isl_give isl_basic_set *isl_basic_set_coefficients( - __isl_take isl_basic_set *bset); - __isl_give isl_basic_set *isl_set_coefficients( - __isl_take isl_set *set); - __isl_give isl_union_set *isl_union_set_coefficients( - __isl_take isl_union_set *bset); - __isl_give isl_basic_set *isl_basic_set_solutions( - __isl_take isl_basic_set *bset); - __isl_give isl_basic_set *isl_set_solutions( - __isl_take isl_set *set); - __isl_give isl_union_set *isl_union_set_solutions( - __isl_take isl_union_set *bset); - -=item * Power - - __isl_give isl_map *isl_map_power(__isl_take isl_map *map, - int *exact); - __isl_give isl_union_map *isl_union_map_power( - __isl_take isl_union_map *umap, int *exact); - -Compute a parametric representation for all positive powers I of C. -The result maps I to a nested relation corresponding to the -Ith power of C. -The result may be an overapproximation. If the result is known to be exact, -then C<*exact> is set to C<1>. - -=item * Transitive closure - - __isl_give isl_map *isl_map_transitive_closure( - __isl_take isl_map *map, int *exact); - __isl_give isl_union_map *isl_union_map_transitive_closure( - __isl_take isl_union_map *umap, int *exact); - -Compute the transitive closure of C. -The result may be an overapproximation. If the result is known to be exact, -then C<*exact> is set to C<1>. - -=item * Reaching path lengths - - __isl_give isl_map *isl_map_reaching_path_lengths( - __isl_take isl_map *map, int *exact); - -Compute a relation that maps each element in the range of C -to the lengths of all paths composed of edges in C that -end up in the given element. -The result may be an overapproximation. If the result is known to be exact, -then C<*exact> is set to C<1>. -To compute the I path length, the resulting relation -should be postprocessed by C. -In particular, if the input relation is a dependence relation -(mapping sources to sinks), then the maximal path length corresponds -to the free schedule. -Note, however, that C expects the maximum to be -finite, so if the path lengths are unbounded (possibly due to -the overapproximation), then you will get an error message. - -=item * Wrapping - - __isl_give isl_basic_set *isl_basic_map_wrap( - __isl_take isl_basic_map *bmap); - __isl_give isl_set *isl_map_wrap( - __isl_take isl_map *map); - __isl_give isl_union_set *isl_union_map_wrap( - __isl_take isl_union_map *umap); - __isl_give isl_basic_map *isl_basic_set_unwrap( - __isl_take isl_basic_set *bset); - __isl_give isl_map *isl_set_unwrap( - __isl_take isl_set *set); - __isl_give isl_union_map *isl_union_set_unwrap( - __isl_take isl_union_set *uset); - -=item * Flattening - -Remove any internal structure of domain (and range) of the given -set or relation. If there is any such internal structure in the input, -then the name of the space is also removed. - - __isl_give isl_basic_set *isl_basic_set_flatten( - __isl_take isl_basic_set *bset); - __isl_give isl_set *isl_set_flatten( - __isl_take isl_set *set); - __isl_give isl_basic_map *isl_basic_map_flatten_domain( - __isl_take isl_basic_map *bmap); - __isl_give isl_basic_map *isl_basic_map_flatten_range( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_flatten_range( - __isl_take isl_map *map); - __isl_give isl_map *isl_map_flatten_domain( - __isl_take isl_map *map); - __isl_give isl_basic_map *isl_basic_map_flatten( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_flatten( - __isl_take isl_map *map); - - __isl_give isl_map *isl_set_flatten_map( - __isl_take isl_set *set); - -The function above constructs a relation -that maps the input set to a flattened version of the set. - -=item * Lifting - -Lift the input set to a space with extra dimensions corresponding -to the existentially quantified variables in the input. -In particular, the result lives in a wrapped map where the domain -is the original space and the range corresponds to the original -existentially quantified variables. - - __isl_give isl_basic_set *isl_basic_set_lift( - __isl_take isl_basic_set *bset); - __isl_give isl_set *isl_set_lift( - __isl_take isl_set *set); - __isl_give isl_union_set *isl_union_set_lift( - __isl_take isl_union_set *uset); - -Given a local space that contains the existentially quantified -variables of a set, a basic relation that, when applied to -a basic set, has essentially the same effect as C, -can be constructed using the following function. - - #include - __isl_give isl_basic_map *isl_local_space_lifting( - __isl_take isl_local_space *ls); - -=item * Internal Product - - __isl_give isl_basic_map *isl_basic_map_zip( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_zip( - __isl_take isl_map *map); - __isl_give isl_union_map *isl_union_map_zip( - __isl_take isl_union_map *umap); - -Given a relation with nested relations for domain and range, -interchange the range of the domain with the domain of the range. - -=item * Aligning parameters - - __isl_give isl_set *isl_set_align_params( - __isl_take isl_set *set, - __isl_take isl_space *model); - __isl_give isl_map *isl_map_align_params( - __isl_take isl_map *map, - __isl_take isl_space *model); - -Change the order of the parameters of the given set or relation -such that the first parameters match those of C. -This may involve the introduction of extra parameters. -All parameters need to be named. - -=item * Dimension manipulation - - __isl_give isl_set *isl_set_add_dims( - __isl_take isl_set *set, - enum isl_dim_type type, unsigned n); - __isl_give isl_map *isl_map_add_dims( - __isl_take isl_map *map, - enum isl_dim_type type, unsigned n); - __isl_give isl_set *isl_set_insert_dims( - __isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, unsigned n); - __isl_give isl_map *isl_map_insert_dims( - __isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, unsigned n); - __isl_give isl_basic_set *isl_basic_set_move_dims( - __isl_take isl_basic_set *bset, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, - unsigned n); - __isl_give isl_basic_map *isl_basic_map_move_dims( - __isl_take isl_basic_map *bmap, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, - unsigned n); - __isl_give isl_set *isl_set_move_dims( - __isl_take isl_set *set, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, - unsigned n); - __isl_give isl_map *isl_map_move_dims( - __isl_take isl_map *map, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, - unsigned n); - -It is usually not advisable to directly change the (input or output) -space of a set or a relation as this removes the name and the internal -structure of the space. However, the above functions can be useful -to add new parameters, assuming -C and C -are not sufficient. - -=back - -=head2 Binary Operations - -The two arguments of a binary operation not only need to live -in the same C, they currently also need to have -the same (number of) parameters. - -=head3 Basic Operations - -=over - -=item * Intersection - - __isl_give isl_basic_set *isl_basic_set_intersect_params( - __isl_take isl_basic_set *bset1, - __isl_take isl_basic_set *bset2); - __isl_give isl_basic_set *isl_basic_set_intersect( - __isl_take isl_basic_set *bset1, - __isl_take isl_basic_set *bset2); - __isl_give isl_set *isl_set_intersect_params( - __isl_take isl_set *set, - __isl_take isl_set *params); - __isl_give isl_set *isl_set_intersect( - __isl_take isl_set *set1, - __isl_take isl_set *set2); - __isl_give isl_union_set *isl_union_set_intersect_params( - __isl_take isl_union_set *uset, - __isl_take isl_set *set); - __isl_give isl_union_map *isl_union_map_intersect_params( - __isl_take isl_union_map *umap, - __isl_take isl_set *set); - __isl_give isl_union_set *isl_union_set_intersect( - __isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2); - __isl_give isl_basic_map *isl_basic_map_intersect_domain( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *bset); - __isl_give isl_basic_map *isl_basic_map_intersect_range( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *bset); - __isl_give isl_basic_map *isl_basic_map_intersect( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_map *isl_map_intersect_params( - __isl_take isl_map *map, - __isl_take isl_set *params); - __isl_give isl_map *isl_map_intersect_domain( - __isl_take isl_map *map, - __isl_take isl_set *set); - __isl_give isl_map *isl_map_intersect_range( - __isl_take isl_map *map, - __isl_take isl_set *set); - __isl_give isl_map *isl_map_intersect( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_map *isl_union_map_intersect_domain( - __isl_take isl_union_map *umap, - __isl_take isl_union_set *uset); - __isl_give isl_union_map *isl_union_map_intersect_range( - __isl_take isl_union_map *umap, - __isl_take isl_union_set *uset); - __isl_give isl_union_map *isl_union_map_intersect( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - -=item * Union - - __isl_give isl_set *isl_basic_set_union( - __isl_take isl_basic_set *bset1, - __isl_take isl_basic_set *bset2); - __isl_give isl_map *isl_basic_map_union( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_set *isl_set_union( - __isl_take isl_set *set1, - __isl_take isl_set *set2); - __isl_give isl_map *isl_map_union( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_set *isl_union_set_union( - __isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2); - __isl_give isl_union_map *isl_union_map_union( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - -=item * Set difference - - __isl_give isl_set *isl_set_subtract( - __isl_take isl_set *set1, - __isl_take isl_set *set2); - __isl_give isl_map *isl_map_subtract( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_map *isl_map_subtract_domain( - __isl_take isl_map *map, - __isl_take isl_set *dom); - __isl_give isl_map *isl_map_subtract_range( - __isl_take isl_map *map, - __isl_take isl_set *dom); - __isl_give isl_union_set *isl_union_set_subtract( - __isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2); - __isl_give isl_union_map *isl_union_map_subtract( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - -=item * Application - - __isl_give isl_basic_set *isl_basic_set_apply( - __isl_take isl_basic_set *bset, - __isl_take isl_basic_map *bmap); - __isl_give isl_set *isl_set_apply( - __isl_take isl_set *set, - __isl_take isl_map *map); - __isl_give isl_union_set *isl_union_set_apply( - __isl_take isl_union_set *uset, - __isl_take isl_union_map *umap); - __isl_give isl_basic_map *isl_basic_map_apply_domain( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_basic_map *isl_basic_map_apply_range( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_map *isl_map_apply_domain( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_map *isl_union_map_apply_domain( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - __isl_give isl_map *isl_map_apply_range( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_map *isl_union_map_apply_range( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - -=item * Cartesian Product - - __isl_give isl_set *isl_set_product( - __isl_take isl_set *set1, - __isl_take isl_set *set2); - __isl_give isl_union_set *isl_union_set_product( - __isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2); - __isl_give isl_basic_map *isl_basic_map_domain_product( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_basic_map *isl_basic_map_range_product( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_map *isl_map_domain_product( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_map *isl_map_range_product( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_map *isl_union_map_range_product( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - __isl_give isl_map *isl_map_product( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_map *isl_union_map_product( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - -The above functions compute the cross product of the given -sets or relations. The domains and ranges of the results -are wrapped maps between domains and ranges of the inputs. -To obtain a ``flat'' product, use the following functions -instead. - - __isl_give isl_basic_set *isl_basic_set_flat_product( - __isl_take isl_basic_set *bset1, - __isl_take isl_basic_set *bset2); - __isl_give isl_set *isl_set_flat_product( - __isl_take isl_set *set1, - __isl_take isl_set *set2); - __isl_give isl_basic_map *isl_basic_map_flat_range_product( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_map *isl_map_flat_domain_product( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_map *isl_map_flat_range_product( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - __isl_give isl_union_map *isl_union_map_flat_range_product( - __isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); - __isl_give isl_basic_map *isl_basic_map_flat_product( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); - __isl_give isl_map *isl_map_flat_product( - __isl_take isl_map *map1, - __isl_take isl_map *map2); - -=item * Simplification - - __isl_give isl_basic_set *isl_basic_set_gist( - __isl_take isl_basic_set *bset, - __isl_take isl_basic_set *context); - __isl_give isl_set *isl_set_gist(__isl_take isl_set *set, - __isl_take isl_set *context); - __isl_give isl_set *isl_set_gist_params( - __isl_take isl_set *set, - __isl_take isl_set *context); - __isl_give isl_union_set *isl_union_set_gist( - __isl_take isl_union_set *uset, - __isl_take isl_union_set *context); - __isl_give isl_union_set *isl_union_set_gist_params( - __isl_take isl_union_set *uset, - __isl_take isl_set *set); - __isl_give isl_basic_map *isl_basic_map_gist( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_map *context); - __isl_give isl_map *isl_map_gist(__isl_take isl_map *map, - __isl_take isl_map *context); - __isl_give isl_map *isl_map_gist_params( - __isl_take isl_map *map, - __isl_take isl_set *context); - __isl_give isl_map *isl_map_gist_domain( - __isl_take isl_map *map, - __isl_take isl_set *context); - __isl_give isl_map *isl_map_gist_range( - __isl_take isl_map *map, - __isl_take isl_set *context); - __isl_give isl_union_map *isl_union_map_gist( - __isl_take isl_union_map *umap, - __isl_take isl_union_map *context); - __isl_give isl_union_map *isl_union_map_gist_params( - __isl_take isl_union_map *umap, - __isl_take isl_set *set); - __isl_give isl_union_map *isl_union_map_gist_domain( - __isl_take isl_union_map *umap, - __isl_take isl_union_set *uset); - -The gist operation returns a set or relation that has the -same intersection with the context as the input set or relation. -Any implicit equality in the intersection is made explicit in the result, -while all inequalities that are redundant with respect to the intersection -are removed. -In case of union sets and relations, the gist operation is performed -per space. - -=back - -=head3 Lexicographic Optimization - -Given a (basic) set C (or C) and a zero-dimensional domain C, -the following functions -compute a set that contains the lexicographic minimum or maximum -of the elements in C (or C) for those values of the parameters -that satisfy C. -If C is not C, then C<*empty> is assigned a set -that contains the parameter values in C for which C (or C) -has no elements. -In other words, the union of the parameter values -for which the result is non-empty and of C<*empty> -is equal to C. - - __isl_give isl_set *isl_basic_set_partial_lexmin( - __isl_take isl_basic_set *bset, - __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); - __isl_give isl_set *isl_basic_set_partial_lexmax( - __isl_take isl_basic_set *bset, - __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); - __isl_give isl_set *isl_set_partial_lexmin( - __isl_take isl_set *set, __isl_take isl_set *dom, - __isl_give isl_set **empty); - __isl_give isl_set *isl_set_partial_lexmax( - __isl_take isl_set *set, __isl_take isl_set *dom, - __isl_give isl_set **empty); - -Given a (basic) set C (or C), the following functions simply -return a set containing the lexicographic minimum or maximum -of the elements in C (or C). -In case of union sets, the optimum is computed per space. - - __isl_give isl_set *isl_basic_set_lexmin( - __isl_take isl_basic_set *bset); - __isl_give isl_set *isl_basic_set_lexmax( - __isl_take isl_basic_set *bset); - __isl_give isl_set *isl_set_lexmin( - __isl_take isl_set *set); - __isl_give isl_set *isl_set_lexmax( - __isl_take isl_set *set); - __isl_give isl_union_set *isl_union_set_lexmin( - __isl_take isl_union_set *uset); - __isl_give isl_union_set *isl_union_set_lexmax( - __isl_take isl_union_set *uset); - -Given a (basic) relation C (or C) and a domain C, -the following functions -compute a relation that maps each element of C -to the single lexicographic minimum or maximum -of the elements that are associated to that same -element in C (or C). -If C is not C, then C<*empty> is assigned a set -that contains the elements in C that do not map -to any elements in C (or C). -In other words, the union of the domain of the result and of C<*empty> -is equal to C. - - __isl_give isl_map *isl_basic_map_partial_lexmax( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); - __isl_give isl_map *isl_basic_map_partial_lexmin( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); - __isl_give isl_map *isl_map_partial_lexmax( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty); - __isl_give isl_map *isl_map_partial_lexmin( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty); - -Given a (basic) map C (or C), the following functions simply -return a map mapping each element in the domain of -C (or C) to the lexicographic minimum or maximum -of all elements associated to that element. -In case of union relations, the optimum is computed per space. - - __isl_give isl_map *isl_basic_map_lexmin( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_basic_map_lexmax( - __isl_take isl_basic_map *bmap); - __isl_give isl_map *isl_map_lexmin( - __isl_take isl_map *map); - __isl_give isl_map *isl_map_lexmax( - __isl_take isl_map *map); - __isl_give isl_union_map *isl_union_map_lexmin( - __isl_take isl_union_map *umap); - __isl_give isl_union_map *isl_union_map_lexmax( - __isl_take isl_union_map *umap); - -The following functions return their result in the form of -a piecewise multi-affine expression -(See L<"Piecewise Multiple Quasi Affine Expressions">), -but are otherwise equivalent to the corresponding functions -returning a basic set or relation. - - __isl_give isl_pw_multi_aff * - isl_basic_map_lexmin_pw_multi_aff( - __isl_take isl_basic_map *bmap); - __isl_give isl_pw_multi_aff * - isl_basic_set_partial_lexmin_pw_multi_aff( - __isl_take isl_basic_set *bset, - __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); - __isl_give isl_pw_multi_aff * - isl_basic_set_partial_lexmax_pw_multi_aff( - __isl_take isl_basic_set *bset, - __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); - __isl_give isl_pw_multi_aff * - isl_basic_map_partial_lexmin_pw_multi_aff( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); - __isl_give isl_pw_multi_aff * - isl_basic_map_partial_lexmax_pw_multi_aff( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); - -=head2 Lists - -Lists are defined over several element types, including -C, C, C and C. -Here we take lists of Cs as an example. -Lists can be created, copied and freed using the following functions. - - #include - __isl_give isl_set_list *isl_set_list_from_set( - __isl_take isl_set *el); - __isl_give isl_set_list *isl_set_list_alloc( - isl_ctx *ctx, int n); - __isl_give isl_set_list *isl_set_list_copy( - __isl_keep isl_set_list *list); - __isl_give isl_set_list *isl_set_list_add( - __isl_take isl_set_list *list, - __isl_take isl_set *el); - __isl_give isl_set_list *isl_set_list_concat( - __isl_take isl_set_list *list1, - __isl_take isl_set_list *list2); - void *isl_set_list_free(__isl_take isl_set_list *list); - -C creates an empty list with a capacity for -C elements. C creates a list with a single -element. - -Lists can be inspected using the following functions. - - #include - isl_ctx *isl_set_list_get_ctx(__isl_keep isl_set_list *list); - int isl_set_list_n_set(__isl_keep isl_set_list *list); - __isl_give isl_set *isl_set_list_get_set( - __isl_keep isl_set_list *list, int index); - int isl_set_list_foreach(__isl_keep isl_set_list *list, - int (*fn)(__isl_take isl_set *el, void *user), - void *user); - -Lists can be printed using - - #include - __isl_give isl_printer *isl_printer_print_set_list( - __isl_take isl_printer *p, - __isl_keep isl_set_list *list); - -=head2 Matrices - -Matrices can be created, copied and freed using the following functions. - - #include - __isl_give isl_mat *isl_mat_alloc(isl_ctx *ctx, - unsigned n_row, unsigned n_col); - __isl_give isl_mat *isl_mat_copy(__isl_keep isl_mat *mat); - void isl_mat_free(__isl_take isl_mat *mat); - -Note that the elements of a newly created matrix may have arbitrary values. -The elements can be changed and inspected using the following functions. - - isl_ctx *isl_mat_get_ctx(__isl_keep isl_mat *mat); - int isl_mat_rows(__isl_keep isl_mat *mat); - int isl_mat_cols(__isl_keep isl_mat *mat); - int isl_mat_get_element(__isl_keep isl_mat *mat, - int row, int col, isl_int *v); - __isl_give isl_mat *isl_mat_set_element(__isl_take isl_mat *mat, - int row, int col, isl_int v); - __isl_give isl_mat *isl_mat_set_element_si(__isl_take isl_mat *mat, - int row, int col, int v); - -C will return a negative value if anything went wrong. -In that case, the value of C<*v> is undefined. - -The following function can be used to compute the (right) inverse -of a matrix, i.e., a matrix such that the product of the original -and the inverse (in that order) is a multiple of the identity matrix. -The input matrix is assumed to be of full row-rank. - - __isl_give isl_mat *isl_mat_right_inverse(__isl_take isl_mat *mat); - -The following function can be used to compute the (right) kernel -(or null space) of a matrix, i.e., a matrix such that the product of -the original and the kernel (in that order) is the zero matrix. - - __isl_give isl_mat *isl_mat_right_kernel(__isl_take isl_mat *mat); - -=head2 Piecewise Quasi Affine Expressions - -The zero quasi affine expression on a given domain can be created using - - __isl_give isl_aff *isl_aff_zero_on_domain( - __isl_take isl_local_space *ls); - -Note that the space in which the resulting object lives is a map space -with the given space as domain and a one-dimensional range. - -An empty piecewise quasi affine expression (one with no cells) -or a piecewise quasi affine expression with a single cell can -be created using the following functions. - - #include - __isl_give isl_pw_aff *isl_pw_aff_empty( - __isl_take isl_space *space); - __isl_give isl_pw_aff *isl_pw_aff_alloc( - __isl_take isl_set *set, __isl_take isl_aff *aff); - __isl_give isl_pw_aff *isl_pw_aff_from_aff( - __isl_take isl_aff *aff); - -Quasi affine expressions can be copied and freed using - - #include - __isl_give isl_aff *isl_aff_copy(__isl_keep isl_aff *aff); - void *isl_aff_free(__isl_take isl_aff *aff); - - __isl_give isl_pw_aff *isl_pw_aff_copy( - __isl_keep isl_pw_aff *pwaff); - void *isl_pw_aff_free(__isl_take isl_pw_aff *pwaff); - -A (rational) bound on a dimension can be extracted from an C -using the following function. The constraint is required to have -a non-zero coefficient for the specified dimension. - - #include - __isl_give isl_aff *isl_constraint_get_bound( - __isl_keep isl_constraint *constraint, - enum isl_dim_type type, int pos); - -The entire affine expression of the constraint can also be extracted -using the following function. - - #include - __isl_give isl_aff *isl_constraint_get_aff( - __isl_keep isl_constraint *constraint); - -Conversely, an equality constraint equating -the affine expression to zero or an inequality constraint enforcing -the affine expression to be non-negative, can be constructed using - - __isl_give isl_constraint *isl_equality_from_aff( - __isl_take isl_aff *aff); - __isl_give isl_constraint *isl_inequality_from_aff( - __isl_take isl_aff *aff); - -The expression can be inspected using - - #include - isl_ctx *isl_aff_get_ctx(__isl_keep isl_aff *aff); - int isl_aff_dim(__isl_keep isl_aff *aff, - enum isl_dim_type type); - __isl_give isl_local_space *isl_aff_get_domain_local_space( - __isl_keep isl_aff *aff); - __isl_give isl_local_space *isl_aff_get_local_space( - __isl_keep isl_aff *aff); - const char *isl_aff_get_dim_name(__isl_keep isl_aff *aff, - enum isl_dim_type type, unsigned pos); - const char *isl_pw_aff_get_dim_name( - __isl_keep isl_pw_aff *pa, - enum isl_dim_type type, unsigned pos); - int isl_pw_aff_has_dim_id(__isl_keep isl_pw_aff *pa, - enum isl_dim_type type, unsigned pos); - __isl_give isl_id *isl_pw_aff_get_dim_id( - __isl_keep isl_pw_aff *pa, - enum isl_dim_type type, unsigned pos); - int isl_aff_get_constant(__isl_keep isl_aff *aff, - isl_int *v); - int isl_aff_get_coefficient(__isl_keep isl_aff *aff, - enum isl_dim_type type, int pos, isl_int *v); - int isl_aff_get_denominator(__isl_keep isl_aff *aff, - isl_int *v); - __isl_give isl_aff *isl_aff_get_div( - __isl_keep isl_aff *aff, int pos); - - int isl_pw_aff_foreach_piece(__isl_keep isl_pw_aff *pwaff, - int (*fn)(__isl_take isl_set *set, - __isl_take isl_aff *aff, - void *user), void *user); - - int isl_aff_is_cst(__isl_keep isl_aff *aff); - int isl_pw_aff_is_cst(__isl_keep isl_pw_aff *pwaff); - - int isl_aff_involves_dims(__isl_keep isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n); - int isl_pw_aff_involves_dims(__isl_keep isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned first, unsigned n); - - isl_ctx *isl_pw_aff_get_ctx(__isl_keep isl_pw_aff *pwaff); - unsigned isl_pw_aff_dim(__isl_keep isl_pw_aff *pwaff, - enum isl_dim_type type); - int isl_pw_aff_is_empty(__isl_keep isl_pw_aff *pwaff); - -It can be modified using - - #include - __isl_give isl_pw_aff *isl_pw_aff_set_tuple_id( - __isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, __isl_take isl_id *id); - __isl_give isl_aff *isl_aff_set_dim_name( - __isl_take isl_aff *aff, enum isl_dim_type type, - unsigned pos, const char *s); - __isl_give isl_aff *isl_aff_set_dim_id( - __isl_take isl_aff *aff, enum isl_dim_type type, - unsigned pos, __isl_take isl_id *id); - __isl_give isl_pw_aff *isl_pw_aff_set_dim_id( - __isl_take isl_pw_aff *pma, - enum isl_dim_type type, unsigned pos, - __isl_take isl_id *id); - __isl_give isl_aff *isl_aff_set_constant( - __isl_take isl_aff *aff, isl_int v); - __isl_give isl_aff *isl_aff_set_constant_si( - __isl_take isl_aff *aff, int v); - __isl_give isl_aff *isl_aff_set_coefficient( - __isl_take isl_aff *aff, - enum isl_dim_type type, int pos, isl_int v); - __isl_give isl_aff *isl_aff_set_coefficient_si( - __isl_take isl_aff *aff, - enum isl_dim_type type, int pos, int v); - __isl_give isl_aff *isl_aff_set_denominator( - __isl_take isl_aff *aff, isl_int v); - - __isl_give isl_aff *isl_aff_add_constant( - __isl_take isl_aff *aff, isl_int v); - __isl_give isl_aff *isl_aff_add_constant_si( - __isl_take isl_aff *aff, int v); - __isl_give isl_aff *isl_aff_add_coefficient( - __isl_take isl_aff *aff, - enum isl_dim_type type, int pos, isl_int v); - __isl_give isl_aff *isl_aff_add_coefficient_si( - __isl_take isl_aff *aff, - enum isl_dim_type type, int pos, int v); - - __isl_give isl_aff *isl_aff_insert_dims( - __isl_take isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_pw_aff *isl_pw_aff_insert_dims( - __isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_aff *isl_aff_add_dims( - __isl_take isl_aff *aff, - enum isl_dim_type type, unsigned n); - __isl_give isl_pw_aff *isl_pw_aff_add_dims( - __isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned n); - __isl_give isl_aff *isl_aff_drop_dims( - __isl_take isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n); - __isl_give isl_pw_aff *isl_pw_aff_drop_dims( - __isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned first, unsigned n); - -Note that the C and C functions -set the I of the constant or coefficient, while -C and C add an integer value to -the possibly rational constant or coefficient. - -To check whether an affine expressions is obviously zero -or obviously equal to some other affine expression, use - - #include - int isl_aff_plain_is_zero(__isl_keep isl_aff *aff); - int isl_aff_plain_is_equal(__isl_keep isl_aff *aff1, - __isl_keep isl_aff *aff2); - int isl_pw_aff_plain_is_equal( - __isl_keep isl_pw_aff *pwaff1, - __isl_keep isl_pw_aff *pwaff2); - -Operations include - - #include - __isl_give isl_aff *isl_aff_add(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2); - __isl_give isl_pw_aff *isl_pw_aff_add( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_pw_aff *isl_pw_aff_min( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_pw_aff *isl_pw_aff_max( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_aff *isl_aff_sub(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2); - __isl_give isl_pw_aff *isl_pw_aff_sub( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_aff *isl_aff_neg(__isl_take isl_aff *aff); - __isl_give isl_pw_aff *isl_pw_aff_neg( - __isl_take isl_pw_aff *pwaff); - __isl_give isl_aff *isl_aff_ceil(__isl_take isl_aff *aff); - __isl_give isl_pw_aff *isl_pw_aff_ceil( - __isl_take isl_pw_aff *pwaff); - __isl_give isl_aff *isl_aff_floor(__isl_take isl_aff *aff); - __isl_give isl_pw_aff *isl_pw_aff_floor( - __isl_take isl_pw_aff *pwaff); - __isl_give isl_aff *isl_aff_mod(__isl_take isl_aff *aff, - isl_int mod); - __isl_give isl_pw_aff *isl_pw_aff_mod( - __isl_take isl_pw_aff *pwaff, isl_int mod); - __isl_give isl_aff *isl_aff_scale(__isl_take isl_aff *aff, - isl_int f); - __isl_give isl_pw_aff *isl_pw_aff_scale( - __isl_take isl_pw_aff *pwaff, isl_int f); - __isl_give isl_aff *isl_aff_scale_down(__isl_take isl_aff *aff, - isl_int f); - __isl_give isl_aff *isl_aff_scale_down_ui( - __isl_take isl_aff *aff, unsigned f); - __isl_give isl_pw_aff *isl_pw_aff_scale_down( - __isl_take isl_pw_aff *pwaff, isl_int f); - - __isl_give isl_pw_aff *isl_pw_aff_list_min( - __isl_take isl_pw_aff_list *list); - __isl_give isl_pw_aff *isl_pw_aff_list_max( - __isl_take isl_pw_aff_list *list); - - __isl_give isl_pw_aff *isl_pw_aff_coalesce( - __isl_take isl_pw_aff *pwqp); - - __isl_give isl_pw_aff *isl_pw_aff_align_params( - __isl_take isl_pw_aff *pwaff, - __isl_take isl_space *model); - - __isl_give isl_aff *isl_aff_gist_params( - __isl_take isl_aff *aff, - __isl_take isl_set *context); - __isl_give isl_aff *isl_aff_gist(__isl_take isl_aff *aff, - __isl_take isl_set *context); - __isl_give isl_pw_aff *isl_pw_aff_gist_params( - __isl_take isl_pw_aff *pwaff, - __isl_take isl_set *context); - __isl_give isl_pw_aff *isl_pw_aff_gist( - __isl_take isl_pw_aff *pwaff, - __isl_take isl_set *context); - - __isl_give isl_set *isl_pw_aff_domain( - __isl_take isl_pw_aff *pwaff); - __isl_give isl_pw_aff *isl_pw_aff_intersect_domain( - __isl_take isl_pw_aff *pa, - __isl_take isl_set *set); - __isl_give isl_pw_aff *isl_pw_aff_intersect_params( - __isl_take isl_pw_aff *pa, - __isl_take isl_set *set); - - __isl_give isl_aff *isl_aff_mul(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2); - __isl_give isl_pw_aff *isl_pw_aff_mul( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - -When multiplying two affine expressions, at least one of the two needs -to be a constant. - - #include - __isl_give isl_basic_set *isl_aff_le_basic_set( - __isl_take isl_aff *aff1, __isl_take isl_aff *aff2); - __isl_give isl_basic_set *isl_aff_ge_basic_set( - __isl_take isl_aff *aff1, __isl_take isl_aff *aff2); - __isl_give isl_set *isl_pw_aff_eq_set( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_set *isl_pw_aff_ne_set( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_set *isl_pw_aff_le_set( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_set *isl_pw_aff_lt_set( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_set *isl_pw_aff_ge_set( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_set *isl_pw_aff_gt_set( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - - __isl_give isl_set *isl_pw_aff_list_eq_set( - __isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2); - __isl_give isl_set *isl_pw_aff_list_ne_set( - __isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2); - __isl_give isl_set *isl_pw_aff_list_le_set( - __isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2); - __isl_give isl_set *isl_pw_aff_list_lt_set( - __isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2); - __isl_give isl_set *isl_pw_aff_list_ge_set( - __isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2); - __isl_give isl_set *isl_pw_aff_list_gt_set( - __isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2); - -The function C returns a basic set -containing those elements in the shared space -of C and C where C is greater than or equal to C. -The function C returns a set -containing those elements in the shared domain -of C and C where C is greater than or equal to C. -The functions operating on C apply the corresponding -C function to each pair of elements in the two lists. - - #include - __isl_give isl_set *isl_pw_aff_nonneg_set( - __isl_take isl_pw_aff *pwaff); - __isl_give isl_set *isl_pw_aff_zero_set( - __isl_take isl_pw_aff *pwaff); - __isl_give isl_set *isl_pw_aff_non_zero_set( - __isl_take isl_pw_aff *pwaff); - -The function C returns a set -containing those elements in the domain -of C where C is non-negative. - - #include - __isl_give isl_pw_aff *isl_pw_aff_cond( - __isl_take isl_set *cond, - __isl_take isl_pw_aff *pwaff_true, - __isl_take isl_pw_aff *pwaff_false); - -The function C performs a conditional operator -and returns an expression that is equal to C -for elements in C and equal to C for elements -not in C. - - #include - __isl_give isl_pw_aff *isl_pw_aff_union_min( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_pw_aff *isl_pw_aff_union_max( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - __isl_give isl_pw_aff *isl_pw_aff_union_add( - __isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - -The function C computes a piecewise quasi-affine -expression with a domain that is the union of those of C and -C and such that on each cell, the quasi-affine expression is -the maximum of those of C and C. If only one of -C or C is defined on a given cell, then the -associated expression is the defined one. - -An expression can be read from input using - - #include - __isl_give isl_aff *isl_aff_read_from_str( - isl_ctx *ctx, const char *str); - __isl_give isl_pw_aff *isl_pw_aff_read_from_str( - isl_ctx *ctx, const char *str); - -An expression can be printed using - - #include - __isl_give isl_printer *isl_printer_print_aff( - __isl_take isl_printer *p, __isl_keep isl_aff *aff); - - __isl_give isl_printer *isl_printer_print_pw_aff( - __isl_take isl_printer *p, - __isl_keep isl_pw_aff *pwaff); - -=head2 Piecewise Multiple Quasi Affine Expressions - -An C object represents a sequence of -zero or more affine expressions, all defined on the same domain space. - -An C can be constructed from a C using the -following function. - - #include - __isl_give isl_multi_aff *isl_multi_aff_from_aff_list( - __isl_take isl_space *space, - __isl_take isl_aff_list *list); - -An empty piecewise multiple quasi affine expression (one with no cells) or -a piecewise multiple quasi affine expression with a single cell can -be created using the following functions. - - #include - __isl_give isl_pw_multi_aff *isl_pw_multi_aff_empty( - __isl_take isl_space *space); - __isl_give isl_pw_multi_aff *isl_pw_multi_aff_alloc( - __isl_take isl_set *set, - __isl_take isl_multi_aff *maff); - -A piecewise multiple quasi affine expression can also be initialized -from an C or C, provided the C is a singleton -and the C is single-valued. - - __isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_set( - __isl_take isl_set *set); - __isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_map( - __isl_take isl_map *map); - -Multiple quasi affine expressions can be copied and freed using - - #include - __isl_give isl_multi_aff *isl_multi_aff_copy( - __isl_keep isl_multi_aff *maff); - void *isl_multi_aff_free(__isl_take isl_multi_aff *maff); - - __isl_give isl_pw_multi_aff *isl_pw_multi_aff_copy( - __isl_keep isl_pw_multi_aff *pma); - void *isl_pw_multi_aff_free( - __isl_take isl_pw_multi_aff *pma); - -The expression can be inspected using - - #include - isl_ctx *isl_multi_aff_get_ctx( - __isl_keep isl_multi_aff *maff); - isl_ctx *isl_pw_multi_aff_get_ctx( - __isl_keep isl_pw_multi_aff *pma); - unsigned isl_multi_aff_dim(__isl_keep isl_multi_aff *maff, - enum isl_dim_type type); - unsigned isl_pw_multi_aff_dim( - __isl_keep isl_pw_multi_aff *pma, - enum isl_dim_type type); - __isl_give isl_aff *isl_multi_aff_get_aff( - __isl_keep isl_multi_aff *multi, int pos); - const char *isl_pw_multi_aff_get_dim_name( - __isl_keep isl_pw_multi_aff *pma, - enum isl_dim_type type, unsigned pos); - __isl_give isl_id *isl_pw_multi_aff_get_dim_id( - __isl_keep isl_pw_multi_aff *pma, - enum isl_dim_type type, unsigned pos); - const char *isl_multi_aff_get_tuple_name( - __isl_keep isl_multi_aff *multi, - enum isl_dim_type type); - const char *isl_pw_multi_aff_get_tuple_name( - __isl_keep isl_pw_multi_aff *pma, - enum isl_dim_type type); - int isl_pw_multi_aff_has_tuple_id( - __isl_keep isl_pw_multi_aff *pma, - enum isl_dim_type type); - __isl_give isl_id *isl_pw_multi_aff_get_tuple_id( - __isl_keep isl_pw_multi_aff *pma, - enum isl_dim_type type); - - int isl_pw_multi_aff_foreach_piece( - __isl_keep isl_pw_multi_aff *pma, - int (*fn)(__isl_take isl_set *set, - __isl_take isl_multi_aff *maff, - void *user), void *user); - -It can be modified using - - #include - __isl_give isl_multi_aff *isl_multi_aff_set_dim_name( - __isl_take isl_multi_aff *maff, - enum isl_dim_type type, unsigned pos, const char *s); - __isl_give isl_pw_multi_aff *isl_pw_multi_aff_set_tuple_id( - __isl_take isl_pw_multi_aff *pma, - enum isl_dim_type type, __isl_take isl_id *id); - -To check whether two multiple affine expressions are -obviously equal to each other, use - - int isl_multi_aff_plain_is_equal(__isl_keep isl_multi_aff *maff1, - __isl_keep isl_multi_aff *maff2); - int isl_pw_multi_aff_plain_is_equal( - __isl_keep isl_pw_multi_aff *pma1, - __isl_keep isl_pw_multi_aff *pma2); - -Operations include - - #include - __isl_give isl_multi_aff *isl_multi_aff_add( - __isl_take isl_multi_aff *maff1, - __isl_take isl_multi_aff *maff2); - __isl_give isl_pw_multi_aff *isl_pw_multi_aff_add( - __isl_take isl_pw_multi_aff *pma1, - __isl_take isl_pw_multi_aff *pma2); - __isl_give isl_pw_multi_aff *isl_pw_multi_aff_union_add( - __isl_take isl_pw_multi_aff *pma1, - __isl_take isl_pw_multi_aff *pma2); - __isl_give isl_multi_aff *isl_multi_aff_scale( - __isl_take isl_multi_aff *maff, - isl_int f); - __isl_give isl_pw_multi_aff *isl_pw_multi_aff_intersect_params( - __isl_take isl_pw_multi_aff *pma, - __isl_take isl_set *set); - __isl_give isl_pw_multi_aff *isl_pw_multi_aff_intersect_domain( - __isl_take isl_pw_multi_aff *pma, - __isl_take isl_set *set); - __isl_give isl_multi_aff *isl_multi_aff_lift( - __isl_take isl_multi_aff *maff, - __isl_give isl_local_space **ls); - __isl_give isl_multi_aff *isl_multi_aff_gist_params( - __isl_take isl_multi_aff *maff, - __isl_take isl_set *context); - __isl_give isl_multi_aff *isl_multi_aff_gist( - __isl_take isl_multi_aff *maff, - __isl_take isl_set *context); - __isl_give isl_pw_multi_aff *isl_pw_multi_aff_gist_params( - __isl_take isl_pw_multi_aff *pma, - __isl_take isl_set *set); - __isl_give isl_pw_multi_aff *isl_pw_multi_aff_gist( - __isl_take isl_pw_multi_aff *pma, - __isl_take isl_set *set); - -If the C argument of C is not C, -then it is assigned the local space that lies at the basis of -the lifting applied. - -An expression can be read from input using - - #include - __isl_give isl_multi_aff *isl_multi_aff_read_from_str( - isl_ctx *ctx, const char *str); - __isl_give isl_pw_multi_aff *isl_pw_multi_aff_read_from_str( - isl_ctx *ctx, const char *str); - -An expression can be printed using - - #include - __isl_give isl_printer *isl_printer_print_multi_aff( - __isl_take isl_printer *p, - __isl_keep isl_multi_aff *maff); - __isl_give isl_printer *isl_printer_print_pw_multi_aff( - __isl_take isl_printer *p, - __isl_keep isl_pw_multi_aff *pma); - -=head2 Points - -Points are elements of a set. They can be used to construct -simple sets (boxes) or they can be used to represent the -individual elements of a set. -The zero point (the origin) can be created using - - __isl_give isl_point *isl_point_zero(__isl_take isl_space *space); - -The coordinates of a point can be inspected, set and changed -using - - int isl_point_get_coordinate(__isl_keep isl_point *pnt, - enum isl_dim_type type, int pos, isl_int *v); - __isl_give isl_point *isl_point_set_coordinate( - __isl_take isl_point *pnt, - enum isl_dim_type type, int pos, isl_int v); - - __isl_give isl_point *isl_point_add_ui( - __isl_take isl_point *pnt, - enum isl_dim_type type, int pos, unsigned val); - __isl_give isl_point *isl_point_sub_ui( - __isl_take isl_point *pnt, - enum isl_dim_type type, int pos, unsigned val); - -Other properties can be obtained using - - isl_ctx *isl_point_get_ctx(__isl_keep isl_point *pnt); - -Points can be copied or freed using - - __isl_give isl_point *isl_point_copy( - __isl_keep isl_point *pnt); - void isl_point_free(__isl_take isl_point *pnt); - -A singleton set can be created from a point using - - __isl_give isl_basic_set *isl_basic_set_from_point( - __isl_take isl_point *pnt); - __isl_give isl_set *isl_set_from_point( - __isl_take isl_point *pnt); - -and a box can be created from two opposite extremal points using - - __isl_give isl_basic_set *isl_basic_set_box_from_points( - __isl_take isl_point *pnt1, - __isl_take isl_point *pnt2); - __isl_give isl_set *isl_set_box_from_points( - __isl_take isl_point *pnt1, - __isl_take isl_point *pnt2); - -All elements of a B (union) set can be enumerated using -the following functions. - - int isl_set_foreach_point(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_point *pnt, void *user), - void *user); - int isl_union_set_foreach_point(__isl_keep isl_union_set *uset, - int (*fn)(__isl_take isl_point *pnt, void *user), - void *user); - -The function C is called for each integer point in -C with as second argument the last argument of -the C call. The function C -should return C<0> on success and C<-1> on failure. -In the latter case, C will stop -enumerating and return C<-1> as well. -If the enumeration is performed successfully and to completion, -then C returns C<0>. - -To obtain a single point of a (basic) set, use - - __isl_give isl_point *isl_basic_set_sample_point( - __isl_take isl_basic_set *bset); - __isl_give isl_point *isl_set_sample_point( - __isl_take isl_set *set); - -If C does not contain any (integer) points, then the -resulting point will be ``void'', a property that can be -tested using - - int isl_point_is_void(__isl_keep isl_point *pnt); - -=head2 Piecewise Quasipolynomials - -A piecewise quasipolynomial is a particular kind of function that maps -a parametric point to a rational value. -More specifically, a quasipolynomial is a polynomial expression in greatest -integer parts of affine expressions of parameters and variables. -A piecewise quasipolynomial is a subdivision of a given parametric -domain into disjoint cells with a quasipolynomial associated to -each cell. The value of the piecewise quasipolynomial at a given -point is the value of the quasipolynomial associated to the cell -that contains the point. Outside of the union of cells, -the value is assumed to be zero. -For example, the piecewise quasipolynomial - - [n] -> { [x] -> ((1 + n) - x) : x <= n and x >= 0 } - -maps C to C<1 + n - x> for values of C between C<0> and C. -A given piecewise quasipolynomial has a fixed domain dimension. -Union piecewise quasipolynomials are used to contain piecewise quasipolynomials -defined over different domains. -Piecewise quasipolynomials are mainly used by the C -library for representing the number of elements in a parametric set or map. -For example, the piecewise quasipolynomial above represents -the number of points in the map - - [n] -> { [x] -> [y] : x,y >= 0 and 0 <= x + y <= n } - -=head3 Input and Output - -Piecewise quasipolynomials can be read from input using - - __isl_give isl_union_pw_qpolynomial * - isl_union_pw_qpolynomial_read_from_str( - isl_ctx *ctx, const char *str); - -Quasipolynomials and piecewise quasipolynomials can be printed -using the following functions. - - __isl_give isl_printer *isl_printer_print_qpolynomial( - __isl_take isl_printer *p, - __isl_keep isl_qpolynomial *qp); - - __isl_give isl_printer *isl_printer_print_pw_qpolynomial( - __isl_take isl_printer *p, - __isl_keep isl_pw_qpolynomial *pwqp); - - __isl_give isl_printer *isl_printer_print_union_pw_qpolynomial( - __isl_take isl_printer *p, - __isl_keep isl_union_pw_qpolynomial *upwqp); - -The output format of the printer -needs to be set to either C or C. -For C, only C -is supported. -In case of printing in C, the user may want -to set the names of all dimensions - - __isl_give isl_qpolynomial *isl_qpolynomial_set_dim_name( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type type, unsigned pos, - const char *s); - __isl_give isl_pw_qpolynomial * - isl_pw_qpolynomial_set_dim_name( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned pos, - const char *s); - -=head3 Creating New (Piecewise) Quasipolynomials - -Some simple quasipolynomials can be created using the following functions. -More complicated quasipolynomials can be created by applying -operations such as addition and multiplication -on the resulting quasipolynomials - - __isl_give isl_qpolynomial *isl_qpolynomial_zero_on_domain( - __isl_take isl_space *domain); - __isl_give isl_qpolynomial *isl_qpolynomial_one_on_domain( - __isl_take isl_space *domain); - __isl_give isl_qpolynomial *isl_qpolynomial_infty_on_domain( - __isl_take isl_space *domain); - __isl_give isl_qpolynomial *isl_qpolynomial_neginfty_on_domain( - __isl_take isl_space *domain); - __isl_give isl_qpolynomial *isl_qpolynomial_nan_on_domain( - __isl_take isl_space *domain); - __isl_give isl_qpolynomial *isl_qpolynomial_rat_cst_on_domain( - __isl_take isl_space *domain, - const isl_int n, const isl_int d); - __isl_give isl_qpolynomial *isl_qpolynomial_var_on_domain( - __isl_take isl_space *domain, - enum isl_dim_type type, unsigned pos); - __isl_give isl_qpolynomial *isl_qpolynomial_from_aff( - __isl_take isl_aff *aff); - -Note that the space in which a quasipolynomial lives is a map space -with a one-dimensional range. The C argument in some of -the functions above corresponds to the domain of this map space. - -The zero piecewise quasipolynomial or a piecewise quasipolynomial -with a single cell can be created using the following functions. -Multiple of these single cell piecewise quasipolynomials can -be combined to create more complicated piecewise quasipolynomials. - - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_zero( - __isl_take isl_space *space); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_alloc( - __isl_take isl_set *set, - __isl_take isl_qpolynomial *qp); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_from_qpolynomial( - __isl_take isl_qpolynomial *qp); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_from_pw_aff( - __isl_take isl_pw_aff *pwaff); - - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_zero( - __isl_take isl_space *space); - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_from_pw_qpolynomial( - __isl_take isl_pw_qpolynomial *pwqp); - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_add_pw_qpolynomial( - __isl_take isl_union_pw_qpolynomial *upwqp, - __isl_take isl_pw_qpolynomial *pwqp); - -Quasipolynomials can be copied and freed again using the following -functions. - - __isl_give isl_qpolynomial *isl_qpolynomial_copy( - __isl_keep isl_qpolynomial *qp); - void *isl_qpolynomial_free(__isl_take isl_qpolynomial *qp); - - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_copy( - __isl_keep isl_pw_qpolynomial *pwqp); - void *isl_pw_qpolynomial_free( - __isl_take isl_pw_qpolynomial *pwqp); - - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_copy( - __isl_keep isl_union_pw_qpolynomial *upwqp); - void isl_union_pw_qpolynomial_free( - __isl_take isl_union_pw_qpolynomial *upwqp); - -=head3 Inspecting (Piecewise) Quasipolynomials - -To iterate over all piecewise quasipolynomials in a union -piecewise quasipolynomial, use the following function - - int isl_union_pw_qpolynomial_foreach_pw_qpolynomial( - __isl_keep isl_union_pw_qpolynomial *upwqp, - int (*fn)(__isl_take isl_pw_qpolynomial *pwqp, void *user), - void *user); - -To extract the piecewise quasipolynomial in a given space from a union, use - - __isl_give isl_pw_qpolynomial * - isl_union_pw_qpolynomial_extract_pw_qpolynomial( - __isl_keep isl_union_pw_qpolynomial *upwqp, - __isl_take isl_space *space); - -To iterate over the cells in a piecewise quasipolynomial, -use either of the following two functions - - int isl_pw_qpolynomial_foreach_piece( - __isl_keep isl_pw_qpolynomial *pwqp, - int (*fn)(__isl_take isl_set *set, - __isl_take isl_qpolynomial *qp, - void *user), void *user); - int isl_pw_qpolynomial_foreach_lifted_piece( - __isl_keep isl_pw_qpolynomial *pwqp, - int (*fn)(__isl_take isl_set *set, - __isl_take isl_qpolynomial *qp, - void *user), void *user); - -As usual, the function C should return C<0> on success -and C<-1> on failure. The difference between -C and -C is that -C will first -compute unique representations for all existentially quantified -variables and then turn these existentially quantified variables -into extra set variables, adapting the associated quasipolynomial -accordingly. This means that the C passed to C -will not have any existentially quantified variables, but that -the dimensions of the sets may be different for different -invocations of C. - -To iterate over all terms in a quasipolynomial, -use - - int isl_qpolynomial_foreach_term( - __isl_keep isl_qpolynomial *qp, - int (*fn)(__isl_take isl_term *term, - void *user), void *user); - -The terms themselves can be inspected and freed using -these functions - - unsigned isl_term_dim(__isl_keep isl_term *term, - enum isl_dim_type type); - void isl_term_get_num(__isl_keep isl_term *term, - isl_int *n); - void isl_term_get_den(__isl_keep isl_term *term, - isl_int *d); - int isl_term_get_exp(__isl_keep isl_term *term, - enum isl_dim_type type, unsigned pos); - __isl_give isl_aff *isl_term_get_div( - __isl_keep isl_term *term, unsigned pos); - void isl_term_free(__isl_take isl_term *term); - -Each term is a product of parameters, set variables and -integer divisions. The function C -returns the exponent of a given dimensions in the given term. -The Cs in the arguments of C -and C need to have been initialized -using C before calling these functions. - -=head3 Properties of (Piecewise) Quasipolynomials - -To check whether a quasipolynomial is actually a constant, -use the following function. - - int isl_qpolynomial_is_cst(__isl_keep isl_qpolynomial *qp, - isl_int *n, isl_int *d); - -If C is a constant and if C and C are not C -then the numerator and denominator of the constant -are returned in C<*n> and C<*d>, respectively. - -To check whether two union piecewise quasipolynomials are -obviously equal, use - - int isl_union_pw_qpolynomial_plain_is_equal( - __isl_keep isl_union_pw_qpolynomial *upwqp1, - __isl_keep isl_union_pw_qpolynomial *upwqp2); - -=head3 Operations on (Piecewise) Quasipolynomials - - __isl_give isl_qpolynomial *isl_qpolynomial_scale( - __isl_take isl_qpolynomial *qp, isl_int v); - __isl_give isl_qpolynomial *isl_qpolynomial_neg( - __isl_take isl_qpolynomial *qp); - __isl_give isl_qpolynomial *isl_qpolynomial_add( - __isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2); - __isl_give isl_qpolynomial *isl_qpolynomial_sub( - __isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2); - __isl_give isl_qpolynomial *isl_qpolynomial_mul( - __isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2); - __isl_give isl_qpolynomial *isl_qpolynomial_pow( - __isl_take isl_qpolynomial *qp, unsigned exponent); - - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_sub( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add_disjoint( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_neg( - __isl_take isl_pw_qpolynomial *pwqp); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_mul( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_pow( - __isl_take isl_pw_qpolynomial *pwqp, unsigned exponent); - - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_add( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2); - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_sub( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2); - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_mul( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2); - - __isl_give isl_qpolynomial *isl_pw_qpolynomial_eval( - __isl_take isl_pw_qpolynomial *pwqp, - __isl_take isl_point *pnt); - - __isl_give isl_qpolynomial *isl_union_pw_qpolynomial_eval( - __isl_take isl_union_pw_qpolynomial *upwqp, - __isl_take isl_point *pnt); - - __isl_give isl_set *isl_pw_qpolynomial_domain( - __isl_take isl_pw_qpolynomial *pwqp); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_intersect_domain( - __isl_take isl_pw_qpolynomial *pwpq, - __isl_take isl_set *set); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_intersect_params( - __isl_take isl_pw_qpolynomial *pwpq, - __isl_take isl_set *set); - - __isl_give isl_union_set *isl_union_pw_qpolynomial_domain( - __isl_take isl_union_pw_qpolynomial *upwqp); - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_intersect_domain( - __isl_take isl_union_pw_qpolynomial *upwpq, - __isl_take isl_union_set *uset); - __isl_give isl_union_pw_qpolynomial * - isl_union_pw_qpolynomial_intersect_params( - __isl_take isl_union_pw_qpolynomial *upwpq, - __isl_take isl_set *set); - - __isl_give isl_qpolynomial *isl_qpolynomial_align_params( - __isl_take isl_qpolynomial *qp, - __isl_take isl_space *model); - - __isl_give isl_qpolynomial *isl_qpolynomial_project_domain_on_params( - __isl_take isl_qpolynomial *qp); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_project_domain_on_params( - __isl_take isl_pw_qpolynomial *pwqp); - - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_coalesce( - __isl_take isl_union_pw_qpolynomial *upwqp); - - __isl_give isl_qpolynomial *isl_qpolynomial_gist_params( - __isl_take isl_qpolynomial *qp, - __isl_take isl_set *context); - __isl_give isl_qpolynomial *isl_qpolynomial_gist( - __isl_take isl_qpolynomial *qp, - __isl_take isl_set *context); - - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_gist_params( - __isl_take isl_pw_qpolynomial *pwqp, - __isl_take isl_set *context); - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_gist( - __isl_take isl_pw_qpolynomial *pwqp, - __isl_take isl_set *context); - - __isl_give isl_union_pw_qpolynomial * - isl_union_pw_qpolynomial_gist_params( - __isl_take isl_union_pw_qpolynomial *upwqp, - __isl_take isl_set *context); - __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_gist( - __isl_take isl_union_pw_qpolynomial *upwqp, - __isl_take isl_union_set *context); - -The gist operation applies the gist operation to each of -the cells in the domain of the input piecewise quasipolynomial. -The context is also exploited -to simplify the quasipolynomials associated to each cell. - - __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_to_polynomial( - __isl_take isl_pw_qpolynomial *pwqp, int sign); - __isl_give isl_union_pw_qpolynomial * - isl_union_pw_qpolynomial_to_polynomial( - __isl_take isl_union_pw_qpolynomial *upwqp, int sign); - -Approximate each quasipolynomial by a polynomial. If C is positive, -the polynomial will be an overapproximation. If C is negative, -it will be an underapproximation. If C is zero, the approximation -will lie somewhere in between. - -=head2 Bounds on Piecewise Quasipolynomials and Piecewise Quasipolynomial Reductions - -A piecewise quasipolynomial reduction is a piecewise -reduction (or fold) of quasipolynomials. -In particular, the reduction can be maximum or a minimum. -The objects are mainly used to represent the result of -an upper or lower bound on a quasipolynomial over its domain, -i.e., as the result of the following function. - - __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_bound( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_fold type, int *tight); - - __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_bound( - __isl_take isl_union_pw_qpolynomial *upwqp, - enum isl_fold type, int *tight); - -The C argument may be either C or C. -If C is not C, then C<*tight> is set to C<1> -is the returned bound is known be tight, i.e., for each value -of the parameters there is at least -one element in the domain that reaches the bound. -If the domain of C is not wrapping, then the bound is computed -over all elements in that domain and the result has a purely parametric -domain. If the domain of C is wrapping, then the bound is -computed over the range of the wrapped relation. The domain of the -wrapped relation becomes the domain of the result. - -A (piecewise) quasipolynomial reduction can be copied or freed using the -following functions. - - __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_copy( - __isl_keep isl_qpolynomial_fold *fold); - __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_copy( - __isl_keep isl_pw_qpolynomial_fold *pwf); - __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_copy( - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - void isl_qpolynomial_fold_free( - __isl_take isl_qpolynomial_fold *fold); - void *isl_pw_qpolynomial_fold_free( - __isl_take isl_pw_qpolynomial_fold *pwf); - void isl_union_pw_qpolynomial_fold_free( - __isl_take isl_union_pw_qpolynomial_fold *upwf); - -=head3 Printing Piecewise Quasipolynomial Reductions - -Piecewise quasipolynomial reductions can be printed -using the following function. - - __isl_give isl_printer *isl_printer_print_pw_qpolynomial_fold( - __isl_take isl_printer *p, - __isl_keep isl_pw_qpolynomial_fold *pwf); - __isl_give isl_printer *isl_printer_print_union_pw_qpolynomial_fold( - __isl_take isl_printer *p, - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - -For C, -output format of the printer -needs to be set to either C or C. -For C, -output format of the printer -needs to be set to C. -In case of printing in C, the user may want -to set the names of all dimensions - - __isl_give isl_pw_qpolynomial_fold * - isl_pw_qpolynomial_fold_set_dim_name( - __isl_take isl_pw_qpolynomial_fold *pwf, - enum isl_dim_type type, unsigned pos, - const char *s); - -=head3 Inspecting (Piecewise) Quasipolynomial Reductions - -To iterate over all piecewise quasipolynomial reductions in a union -piecewise quasipolynomial reduction, use the following function - - int isl_union_pw_qpolynomial_fold_foreach_pw_qpolynomial_fold( - __isl_keep isl_union_pw_qpolynomial_fold *upwf, - int (*fn)(__isl_take isl_pw_qpolynomial_fold *pwf, - void *user), void *user); - -To iterate over the cells in a piecewise quasipolynomial reduction, -use either of the following two functions - - int isl_pw_qpolynomial_fold_foreach_piece( - __isl_keep isl_pw_qpolynomial_fold *pwf, - int (*fn)(__isl_take isl_set *set, - __isl_take isl_qpolynomial_fold *fold, - void *user), void *user); - int isl_pw_qpolynomial_fold_foreach_lifted_piece( - __isl_keep isl_pw_qpolynomial_fold *pwf, - int (*fn)(__isl_take isl_set *set, - __isl_take isl_qpolynomial_fold *fold, - void *user), void *user); - -See L for an explanation -of the difference between these two functions. - -To iterate over all quasipolynomials in a reduction, use - - int isl_qpolynomial_fold_foreach_qpolynomial( - __isl_keep isl_qpolynomial_fold *fold, - int (*fn)(__isl_take isl_qpolynomial *qp, - void *user), void *user); - -=head3 Properties of Piecewise Quasipolynomial Reductions - -To check whether two union piecewise quasipolynomial reductions are -obviously equal, use - - int isl_union_pw_qpolynomial_fold_plain_is_equal( - __isl_keep isl_union_pw_qpolynomial_fold *upwf1, - __isl_keep isl_union_pw_qpolynomial_fold *upwf2); - -=head3 Operations on Piecewise Quasipolynomial Reductions - - __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_scale( - __isl_take isl_qpolynomial_fold *fold, isl_int v); - - __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_add( - __isl_take isl_pw_qpolynomial_fold *pwf1, - __isl_take isl_pw_qpolynomial_fold *pwf2); - - __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_fold( - __isl_take isl_pw_qpolynomial_fold *pwf1, - __isl_take isl_pw_qpolynomial_fold *pwf2); - - __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_fold( - __isl_take isl_union_pw_qpolynomial_fold *upwf1, - __isl_take isl_union_pw_qpolynomial_fold *upwf2); - - __isl_give isl_qpolynomial *isl_pw_qpolynomial_fold_eval( - __isl_take isl_pw_qpolynomial_fold *pwf, - __isl_take isl_point *pnt); - - __isl_give isl_qpolynomial *isl_union_pw_qpolynomial_fold_eval( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_point *pnt); - - __isl_give isl_pw_qpolynomial_fold * - sl_pw_qpolynomial_fold_intersect_params( - __isl_take isl_pw_qpolynomial_fold *pwf, - __isl_take isl_set *set); - - __isl_give isl_union_set *isl_union_pw_qpolynomial_fold_domain( - __isl_take isl_union_pw_qpolynomial_fold *upwf); - __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_intersect_domain( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_union_set *uset); - __isl_give isl_union_pw_qpolynomial_fold * - isl_union_pw_qpolynomial_fold_intersect_params( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_set *set); - - __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_project_domain_on_params( - __isl_take isl_pw_qpolynomial_fold *pwf); - - __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_coalesce( - __isl_take isl_pw_qpolynomial_fold *pwf); - - __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_coalesce( - __isl_take isl_union_pw_qpolynomial_fold *upwf); - - __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_gist_params( - __isl_take isl_qpolynomial_fold *fold, - __isl_take isl_set *context); - __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_gist( - __isl_take isl_qpolynomial_fold *fold, - __isl_take isl_set *context); - - __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_gist( - __isl_take isl_pw_qpolynomial_fold *pwf, - __isl_take isl_set *context); - __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_gist_params( - __isl_take isl_pw_qpolynomial_fold *pwf, - __isl_take isl_set *context); - - __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_gist( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_union_set *context); - __isl_give isl_union_pw_qpolynomial_fold * - isl_union_pw_qpolynomial_fold_gist_params( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_set *context); - -The gist operation applies the gist operation to each of -the cells in the domain of the input piecewise quasipolynomial reduction. -In future, the operation will also exploit the context -to simplify the quasipolynomial reductions associated to each cell. - - __isl_give isl_pw_qpolynomial_fold * - isl_set_apply_pw_qpolynomial_fold( - __isl_take isl_set *set, - __isl_take isl_pw_qpolynomial_fold *pwf, - int *tight); - __isl_give isl_pw_qpolynomial_fold * - isl_map_apply_pw_qpolynomial_fold( - __isl_take isl_map *map, - __isl_take isl_pw_qpolynomial_fold *pwf, - int *tight); - __isl_give isl_union_pw_qpolynomial_fold * - isl_union_set_apply_union_pw_qpolynomial_fold( - __isl_take isl_union_set *uset, - __isl_take isl_union_pw_qpolynomial_fold *upwf, - int *tight); - __isl_give isl_union_pw_qpolynomial_fold * - isl_union_map_apply_union_pw_qpolynomial_fold( - __isl_take isl_union_map *umap, - __isl_take isl_union_pw_qpolynomial_fold *upwf, - int *tight); - -The functions taking a map -compose the given map with the given piecewise quasipolynomial reduction. -That is, compute a bound (of the same type as C or C itself) -over all elements in the intersection of the range of the map -and the domain of the piecewise quasipolynomial reduction -as a function of an element in the domain of the map. -The functions taking a set compute a bound over all elements in the -intersection of the set and the domain of the -piecewise quasipolynomial reduction. - -=head2 Dependence Analysis - -C contains specialized functionality for performing -array dataflow analysis. That is, given a I access relation -and a collection of possible I access relations, -C can compute relations that describe -for each iteration of the sink access, which iteration -of which of the source access relations was the last -to access the same data element before the given iteration -of the sink access. -The resulting dependence relations map source iterations -to the corresponding sink iterations. -To compute standard flow dependences, the sink should be -a read, while the sources should be writes. -If any of the source accesses are marked as being I -accesses, then there will be a dependence from the last -I access B from any I access that follows -this last I access. -In particular, if I sources are I accesses, -then memory based dependence analysis is performed. -If, on the other hand, all sources are I accesses, -then value based dependence analysis is performed. - - #include - - typedef int (*isl_access_level_before)(void *first, void *second); - - __isl_give isl_access_info *isl_access_info_alloc( - __isl_take isl_map *sink, - void *sink_user, isl_access_level_before fn, - int max_source); - __isl_give isl_access_info *isl_access_info_add_source( - __isl_take isl_access_info *acc, - __isl_take isl_map *source, int must, - void *source_user); - void isl_access_info_free(__isl_take isl_access_info *acc); - - __isl_give isl_flow *isl_access_info_compute_flow( - __isl_take isl_access_info *acc); - - int isl_flow_foreach(__isl_keep isl_flow *deps, - int (*fn)(__isl_take isl_map *dep, int must, - void *dep_user, void *user), - void *user); - __isl_give isl_map *isl_flow_get_no_source( - __isl_keep isl_flow *deps, int must); - void isl_flow_free(__isl_take isl_flow *deps); - -The function C performs the actual -dependence analysis. The other functions are used to construct -the input for this function or to read off the output. - -The input is collected in an C, which can -be created through a call to C. -The arguments to this functions are the sink access relation -C, a token C used to identify the sink -access to the user, a callback function for specifying the -relative order of source and sink accesses, and the number -of source access relations that will be added. -The callback function has type C. -The function is called with two user supplied tokens identifying -either a source or the sink and it should return the shared nesting -level and the relative order of the two accesses. -In particular, let I be the number of loops shared by -the two accesses. If C precedes C textually, -then the function should return I<2 * n + 1>; otherwise, -it should return I<2 * n>. -The sources can be added to the C by performing -(at most) C calls to C. -C indicates whether the source is a I access -or a I access. Note that a multi-valued access relation -should only be marked I if every iteration in the domain -of the relation accesses I elements in its image. -The C token is again used to identify -the source access. The range of the source access relation -C should have the same dimension as the range -of the sink access relation. -The C function should usually not be -called explicitly, because it is called implicitly by -C. - -The result of the dependence analysis is collected in an -C. There may be elements of -the sink access for which no preceding source access could be -found or for which all preceding sources are I accesses. -The relations containing these elements can be obtained through -calls to C, the first with C set -and the second with C unset. -In the case of standard flow dependence analysis, -with the sink a read and the sources I writes, -the first relation corresponds to the reads from uninitialized -array elements and the second relation is empty. -The actual flow dependences can be extracted using -C. This function will call the user-specified -callback function C for each B dependence between -a source and the sink. The callback function is called -with four arguments, the actual flow dependence relation -mapping source iterations to sink iterations, a boolean that -indicates whether it is a I or I dependence, a token -identifying the source and an additional C with value -equal to the third argument of the C call. -A dependence is marked I if it originates from a I -source and if it is not followed by any I sources. - -After finishing with an C, the user should call -C to free all associated memory. - -A higher-level interface to dependence analysis is provided -by the following function. - - #include - - int isl_union_map_compute_flow(__isl_take isl_union_map *sink, - __isl_take isl_union_map *must_source, - __isl_take isl_union_map *may_source, - __isl_take isl_union_map *schedule, - __isl_give isl_union_map **must_dep, - __isl_give isl_union_map **may_dep, - __isl_give isl_union_map **must_no_source, - __isl_give isl_union_map **may_no_source); - -The arrays are identified by the tuple names of the ranges -of the accesses. The iteration domains by the tuple names -of the domains of the accesses and of the schedule. -The relative order of the iteration domains is given by the -schedule. The relations returned through C -and C are subsets of C. -Any of C, C, C -or C may be C, but a C value for -any of the other arguments is treated as an error. - -=head2 Scheduling - -B - -The following function can be used to compute a schedule -for a union of domains. The generated schedule respects -all C dependences. That is, all dependence distances -over these dependences in the scheduled space are lexicographically -positive. The generated schedule schedule also tries to minimize -the dependence distances over C dependences. -Moreover, it tries to obtain sequences (bands) of schedule dimensions -for groups of domains where the dependence distances have only -non-negative values. -The algorithm used to construct the schedule is similar to that -of C. - - #include - __isl_give isl_schedule *isl_union_set_compute_schedule( - __isl_take isl_union_set *domain, - __isl_take isl_union_map *validity, - __isl_take isl_union_map *proximity); - void *isl_schedule_free(__isl_take isl_schedule *sched); - -A mapping from the domains to the scheduled space can be obtained -from an C using the following function. - - __isl_give isl_union_map *isl_schedule_get_map( - __isl_keep isl_schedule *sched); - -A representation of the schedule can be printed using - - __isl_give isl_printer *isl_printer_print_schedule( - __isl_take isl_printer *p, - __isl_keep isl_schedule *schedule); - -A representation of the schedule as a forest of bands can be obtained -using the following function. - - __isl_give isl_band_list *isl_schedule_get_band_forest( - __isl_keep isl_schedule *schedule); - -The list can be manipulated as explained in L<"Lists">. -The bands inside the list can be copied and freed using the following -functions. - - #include - __isl_give isl_band *isl_band_copy( - __isl_keep isl_band *band); - void *isl_band_free(__isl_take isl_band *band); - -Each band contains zero or more scheduling dimensions. -These are referred to as the members of the band. -The section of the schedule that corresponds to the band is -referred to as the partial schedule of the band. -For those nodes that participate in a band, the outer scheduling -dimensions form the prefix schedule, while the inner scheduling -dimensions form the suffix schedule. -That is, if we take a cut of the band forest, then the union of -the concatenations of the prefix, partial and suffix schedules of -each band in the cut is equal to the entire schedule (modulo -some possible padding at the end with zero scheduling dimensions). -The properties of a band can be inspected using the following functions. - - #include - isl_ctx *isl_band_get_ctx(__isl_keep isl_band *band); - - int isl_band_has_children(__isl_keep isl_band *band); - __isl_give isl_band_list *isl_band_get_children( - __isl_keep isl_band *band); - - __isl_give isl_union_map *isl_band_get_prefix_schedule( - __isl_keep isl_band *band); - __isl_give isl_union_map *isl_band_get_partial_schedule( - __isl_keep isl_band *band); - __isl_give isl_union_map *isl_band_get_suffix_schedule( - __isl_keep isl_band *band); - - int isl_band_n_member(__isl_keep isl_band *band); - int isl_band_member_is_zero_distance( - __isl_keep isl_band *band, int pos); - -Note that a scheduling dimension is considered to be ``zero -distance'' if it does not carry any proximity dependences -within its band. -That is, if the dependence distances of the proximity -dependences are all zero in that direction (for fixed -iterations of outer bands). - -A representation of the band can be printed using - - #include - __isl_give isl_printer *isl_printer_print_band( - __isl_take isl_printer *p, - __isl_keep isl_band *band); - -=head3 Options - - #include - int isl_options_set_schedule_max_constant_term( - isl_ctx *ctx, int val); - int isl_options_get_schedule_max_constant_term( - isl_ctx *ctx); - int isl_options_set_schedule_maximize_band_depth( - isl_ctx *ctx, int val); - int isl_options_get_schedule_maximize_band_depth( - isl_ctx *ctx); - int isl_options_set_schedule_outer_zero_distance( - isl_ctx *ctx, int val); - int isl_options_get_schedule_outer_zero_distance( - isl_ctx *ctx); - -=over - -=item * max_constant_term - -This option enforces that the constant coefficients in the calculated schedule -are not larger than the maximal constant term. This option can significantly -increase the speed of the scheduling calculation and may also prevent fusing of -unrelated dimensions. A value of -1 means that this option does not introduce -bounds on the constant coefficients. - -=item * maximize_band_depth - -If this option is set, we do not split bands at the point -where we detect splitting is necessary. Instead, we -backtrack and split bands as early as possible. This -reduces the number of splits and maximizes the width of -the bands. Wider bands give more possibilities for tiling. - -=item * schedule_outer_zero_distance - -If this option is set, then we try to construct schedules -where the outermost scheduling dimension in each band -results in a zero dependence distance over the proximity -dependences. - -=back - -=head2 Parametric Vertex Enumeration - -The parametric vertex enumeration described in this section -is mainly intended to be used internally and by the C -library. - - #include - __isl_give isl_vertices *isl_basic_set_compute_vertices( - __isl_keep isl_basic_set *bset); - -The function C performs the -actual computation of the parametric vertices and the chamber -decomposition and store the result in an C object. -This information can be queried by either iterating over all -the vertices or iterating over all the chambers or cells -and then iterating over all vertices that are active on the chamber. - - int isl_vertices_foreach_vertex( - __isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_vertex *vertex, void *user), - void *user); - - int isl_vertices_foreach_cell( - __isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_cell *cell, void *user), - void *user); - int isl_cell_foreach_vertex(__isl_keep isl_cell *cell, - int (*fn)(__isl_take isl_vertex *vertex, void *user), - void *user); - -Other operations that can be performed on an C object are -the following. - - isl_ctx *isl_vertices_get_ctx( - __isl_keep isl_vertices *vertices); - int isl_vertices_get_n_vertices( - __isl_keep isl_vertices *vertices); - void isl_vertices_free(__isl_take isl_vertices *vertices); - -Vertices can be inspected and destroyed using the following functions. - - isl_ctx *isl_vertex_get_ctx(__isl_keep isl_vertex *vertex); - int isl_vertex_get_id(__isl_keep isl_vertex *vertex); - __isl_give isl_basic_set *isl_vertex_get_domain( - __isl_keep isl_vertex *vertex); - __isl_give isl_basic_set *isl_vertex_get_expr( - __isl_keep isl_vertex *vertex); - void isl_vertex_free(__isl_take isl_vertex *vertex); - -C returns a singleton parametric set describing -the vertex, while C returns the activity domain -of the vertex. -Note that C and C return -B basic sets, so they should mainly be used for inspection -and should not be mixed with integer sets. - -Chambers can be inspected and destroyed using the following functions. - - isl_ctx *isl_cell_get_ctx(__isl_keep isl_cell *cell); - __isl_give isl_basic_set *isl_cell_get_domain( - __isl_keep isl_cell *cell); - void isl_cell_free(__isl_take isl_cell *cell); - -=head1 Applications - -Although C is mainly meant to be used as a library, -it also contains some basic applications that use some -of the functionality of C. -The input may be specified in either the L -or the L. - -=head2 C - -C takes a polyhedron as input and prints -an integer element of the polyhedron, if there is any. -The first column in the output is the denominator and is always -equal to 1. If the polyhedron contains no integer points, -then a vector of length zero is printed. - -=head2 C - -C takes the same input as the C program -from the C distribution, i.e., a set of constraints -on the parameters, a line containing only -1 and finally a set -of constraints on a parametric polyhedron. -The coefficients of the parameters appear in the last columns -(but before the final constant column). -The output is the lexicographic minimum of the parametric polyhedron. -As C currently does not have its own output format, the output -is just a dump of the internal state. - -=head2 C - -C computes the minimum of some linear -or affine objective function over the integer points in a polyhedron. -If an affine objective function -is given, then the constant should appear in the last column. - -=head2 C - -Given a polytope, C prints -all integer points in the polytope. diff --git a/cloog-0.17.0/isl/include/isl/aff.h b/cloog-0.17.0/isl/include/isl/aff.h deleted file mode 100644 index 32c0d03..0000000 --- a/cloog-0.17.0/isl/include/isl/aff.h +++ /dev/null @@ -1,350 +0,0 @@ -#ifndef ISL_AFF_H -#define ISL_AFF_H - -#include -#include -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -__isl_give isl_aff *isl_aff_zero_on_domain(__isl_take isl_local_space *ls); - -__isl_give isl_aff *isl_aff_copy(__isl_keep isl_aff *aff); -void *isl_aff_free(__isl_take isl_aff *aff); - -isl_ctx *isl_aff_get_ctx(__isl_keep isl_aff *aff); - -int isl_aff_dim(__isl_keep isl_aff *aff, enum isl_dim_type type); -int isl_aff_involves_dims(__isl_keep isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_space *isl_aff_get_domain_space(__isl_keep isl_aff *aff); -__isl_give isl_space *isl_aff_get_space(__isl_keep isl_aff *aff); -__isl_give isl_local_space *isl_aff_get_domain_local_space( - __isl_keep isl_aff *aff); -__isl_give isl_local_space *isl_aff_get_local_space(__isl_keep isl_aff *aff); - -const char *isl_aff_get_dim_name(__isl_keep isl_aff *aff, - enum isl_dim_type type, unsigned pos); -int isl_aff_get_constant(__isl_keep isl_aff *aff, isl_int *v); -int isl_aff_get_coefficient(__isl_keep isl_aff *aff, - enum isl_dim_type type, int pos, isl_int *v); -int isl_aff_get_denominator(__isl_keep isl_aff *aff, isl_int *v); -__isl_give isl_aff *isl_aff_set_constant(__isl_take isl_aff *aff, isl_int v); -__isl_give isl_aff *isl_aff_set_constant_si(__isl_take isl_aff *aff, int v); -__isl_give isl_aff *isl_aff_set_coefficient(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, isl_int v); -__isl_give isl_aff *isl_aff_set_coefficient_si(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, int v); -__isl_give isl_aff *isl_aff_set_denominator(__isl_take isl_aff *aff, isl_int v); -__isl_give isl_aff *isl_aff_add_constant(__isl_take isl_aff *aff, isl_int v); -__isl_give isl_aff *isl_aff_add_constant_si(__isl_take isl_aff *aff, int v); -__isl_give isl_aff *isl_aff_add_coefficient(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, isl_int v); -__isl_give isl_aff *isl_aff_add_coefficient_si(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, int v); - -int isl_aff_is_cst(__isl_keep isl_aff *aff); - -__isl_give isl_aff *isl_aff_set_dim_name(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned pos, const char *s); -__isl_give isl_aff *isl_aff_set_dim_id(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id); - -int isl_aff_plain_is_equal(__isl_keep isl_aff *aff1, __isl_keep isl_aff *aff2); -int isl_aff_plain_is_zero(__isl_keep isl_aff *aff); - -__isl_give isl_aff *isl_aff_get_div(__isl_keep isl_aff *aff, int pos); - -__isl_give isl_aff *isl_aff_neg(__isl_take isl_aff *aff); -__isl_give isl_aff *isl_aff_ceil(__isl_take isl_aff *aff); -__isl_give isl_aff *isl_aff_floor(__isl_take isl_aff *aff); -__isl_give isl_aff *isl_aff_mod(__isl_take isl_aff *aff, isl_int mod); - -__isl_give isl_aff *isl_aff_mul(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2); -__isl_give isl_aff *isl_aff_add(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2); -__isl_give isl_aff *isl_aff_sub(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2); - -__isl_give isl_aff *isl_aff_scale(__isl_take isl_aff *aff, isl_int f); -__isl_give isl_aff *isl_aff_scale_down(__isl_take isl_aff *aff, isl_int f); -__isl_give isl_aff *isl_aff_scale_down_ui(__isl_take isl_aff *aff, unsigned f); - -__isl_give isl_aff *isl_aff_insert_dims(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_aff *isl_aff_add_dims(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned n); -__isl_give isl_aff *isl_aff_drop_dims(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_aff *isl_aff_gist(__isl_take isl_aff *aff, - __isl_take isl_set *context); -__isl_give isl_aff *isl_aff_gist_params(__isl_take isl_aff *aff, - __isl_take isl_set *context); - -__isl_give isl_basic_set *isl_aff_le_basic_set(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2); -__isl_give isl_basic_set *isl_aff_ge_basic_set(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2); - -__isl_give isl_aff *isl_aff_read_from_str(isl_ctx *ctx, const char *str); -__isl_give isl_printer *isl_printer_print_aff(__isl_take isl_printer *p, - __isl_keep isl_aff *aff); -void isl_aff_dump(__isl_keep isl_aff *aff); - -isl_ctx *isl_pw_aff_get_ctx(__isl_keep isl_pw_aff *pwaff); -__isl_give isl_space *isl_pw_aff_get_domain_space(__isl_keep isl_pw_aff *pwaff); -__isl_give isl_space *isl_pw_aff_get_space(__isl_keep isl_pw_aff *pwaff); - -__isl_give isl_pw_aff *isl_pw_aff_from_aff(__isl_take isl_aff *aff); -__isl_give isl_pw_aff *isl_pw_aff_empty(__isl_take isl_space *dim); -__isl_give isl_pw_aff *isl_pw_aff_alloc(__isl_take isl_set *set, - __isl_take isl_aff *aff); - -const char *isl_pw_aff_get_dim_name(__isl_keep isl_pw_aff *pa, - enum isl_dim_type type, unsigned pos); -int isl_pw_aff_has_dim_id(__isl_keep isl_pw_aff *pa, - enum isl_dim_type type, unsigned pos); -__isl_give isl_id *isl_pw_aff_get_dim_id(__isl_keep isl_pw_aff *pa, - enum isl_dim_type type, unsigned pos); -__isl_give isl_pw_aff *isl_pw_aff_set_dim_id(__isl_take isl_pw_aff *pma, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id); - -int isl_pw_aff_is_empty(__isl_keep isl_pw_aff *pwaff); -int isl_pw_aff_plain_is_equal(__isl_keep isl_pw_aff *pwaff1, - __isl_keep isl_pw_aff *pwaff2); - -__isl_give isl_pw_aff *isl_pw_aff_union_min(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_pw_aff *isl_pw_aff_union_max(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_pw_aff *isl_pw_aff_union_add(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - -__isl_give isl_pw_aff *isl_pw_aff_copy(__isl_keep isl_pw_aff *pwaff); -void *isl_pw_aff_free(__isl_take isl_pw_aff *pwaff); - -unsigned isl_pw_aff_dim(__isl_keep isl_pw_aff *pwaff, enum isl_dim_type type); -int isl_pw_aff_involves_dims(__isl_keep isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned first, unsigned n); - -int isl_pw_aff_is_cst(__isl_keep isl_pw_aff *pwaff); - -__isl_give isl_pw_aff *isl_pw_aff_align_params(__isl_take isl_pw_aff *pwaff, - __isl_take isl_space *model); - -__isl_give isl_pw_aff *isl_pw_aff_set_tuple_id(__isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, __isl_take isl_id *id); - -__isl_give isl_set *isl_pw_aff_domain(__isl_take isl_pw_aff *pwaff); - -__isl_give isl_pw_aff *isl_pw_aff_min(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_pw_aff *isl_pw_aff_max(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_pw_aff *isl_pw_aff_mul(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_pw_aff *isl_pw_aff_add(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_pw_aff *isl_pw_aff_sub(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_pw_aff *isl_pw_aff_neg(__isl_take isl_pw_aff *pwaff); -__isl_give isl_pw_aff *isl_pw_aff_ceil(__isl_take isl_pw_aff *pwaff); -__isl_give isl_pw_aff *isl_pw_aff_floor(__isl_take isl_pw_aff *pwaff); -__isl_give isl_pw_aff *isl_pw_aff_mod(__isl_take isl_pw_aff *pwaff, - isl_int mod); - -__isl_give isl_pw_aff *isl_pw_aff_intersect_params(__isl_take isl_pw_aff *pa, - __isl_take isl_set *set); -__isl_give isl_pw_aff *isl_pw_aff_intersect_domain(__isl_take isl_pw_aff *pa, - __isl_take isl_set *set); - -__isl_give isl_pw_aff *isl_pw_aff_cond(__isl_take isl_set *cond, - __isl_take isl_pw_aff *pwaff_true, __isl_take isl_pw_aff *pwaff_false); - -__isl_give isl_pw_aff *isl_pw_aff_scale(__isl_take isl_pw_aff *pwaff, - isl_int f); -__isl_give isl_pw_aff *isl_pw_aff_scale_down(__isl_take isl_pw_aff *pwaff, - isl_int f); - -__isl_give isl_pw_aff *isl_pw_aff_insert_dims(__isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_pw_aff *isl_pw_aff_add_dims(__isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned n); -__isl_give isl_pw_aff *isl_pw_aff_drop_dims(__isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_pw_aff *isl_pw_aff_coalesce(__isl_take isl_pw_aff *pwqp); -__isl_give isl_pw_aff *isl_pw_aff_gist(__isl_take isl_pw_aff *pwaff, - __isl_take isl_set *context); -__isl_give isl_pw_aff *isl_pw_aff_gist_params(__isl_take isl_pw_aff *pwaff, - __isl_take isl_set *context); - -int isl_pw_aff_foreach_piece(__isl_keep isl_pw_aff *pwaff, - int (*fn)(__isl_take isl_set *set, __isl_take isl_aff *aff, - void *user), void *user); - -__isl_give isl_set *isl_set_from_pw_aff(__isl_take isl_pw_aff *pwaff); -__isl_give isl_map *isl_map_from_pw_aff(__isl_take isl_pw_aff *pwaff); - -__isl_give isl_set *isl_pw_aff_nonneg_set(__isl_take isl_pw_aff *pwaff); -__isl_give isl_set *isl_pw_aff_zero_set(__isl_take isl_pw_aff *pwaff); -__isl_give isl_set *isl_pw_aff_non_zero_set(__isl_take isl_pw_aff *pwaff); - -__isl_give isl_set *isl_pw_aff_eq_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_set *isl_pw_aff_ne_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_set *isl_pw_aff_le_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_set *isl_pw_aff_lt_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_set *isl_pw_aff_ge_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); -__isl_give isl_set *isl_pw_aff_gt_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2); - -__isl_give isl_pw_aff *isl_pw_aff_read_from_str(isl_ctx *ctx, const char *str); -__isl_give isl_printer *isl_printer_print_pw_aff(__isl_take isl_printer *p, - __isl_keep isl_pw_aff *pwaff); -void isl_pw_aff_dump(__isl_keep isl_pw_aff *pwaff); - -__isl_give isl_pw_aff *isl_pw_aff_list_min(__isl_take isl_pw_aff_list *list); -__isl_give isl_pw_aff *isl_pw_aff_list_max(__isl_take isl_pw_aff_list *list); - -__isl_give isl_set *isl_pw_aff_list_eq_set(__isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2); -__isl_give isl_set *isl_pw_aff_list_ne_set(__isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2); -__isl_give isl_set *isl_pw_aff_list_le_set(__isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2); -__isl_give isl_set *isl_pw_aff_list_lt_set(__isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2); -__isl_give isl_set *isl_pw_aff_list_ge_set(__isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2); -__isl_give isl_set *isl_pw_aff_list_gt_set(__isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2); - -isl_ctx *isl_multi_aff_get_ctx(__isl_keep isl_multi_aff *maff); -__isl_give isl_space *isl_multi_aff_get_space(__isl_keep isl_multi_aff *maff); -__isl_give isl_multi_aff *isl_multi_aff_copy(__isl_keep isl_multi_aff *maff); -void *isl_multi_aff_free(__isl_take isl_multi_aff *maff); - -unsigned isl_multi_aff_dim(__isl_keep isl_multi_aff *maff, - enum isl_dim_type type); -__isl_give isl_aff *isl_multi_aff_get_aff(__isl_keep isl_multi_aff *multi, - int pos); - -__isl_give isl_multi_aff *isl_multi_aff_set_dim_name( - __isl_take isl_multi_aff *maff, - enum isl_dim_type type, unsigned pos, const char *s); - -int isl_multi_aff_plain_is_equal(__isl_keep isl_multi_aff *maff1, - __isl_keep isl_multi_aff *maff2); - -__isl_give isl_multi_aff *isl_multi_aff_add(__isl_take isl_multi_aff *maff1, - __isl_take isl_multi_aff *maff2); - -__isl_give isl_multi_aff *isl_multi_aff_scale(__isl_take isl_multi_aff *maff, - isl_int f); - -__isl_give isl_multi_aff *isl_multi_aff_gist_params( - __isl_take isl_multi_aff *maff, __isl_take isl_set *context); -__isl_give isl_multi_aff *isl_multi_aff_gist(__isl_take isl_multi_aff *maff, - __isl_take isl_set *context); - -__isl_give isl_multi_aff *isl_multi_aff_lift(__isl_take isl_multi_aff *maff, - __isl_give isl_local_space **ls); - -__isl_give isl_printer *isl_printer_print_multi_aff(__isl_take isl_printer *p, - __isl_keep isl_multi_aff *maff); - -__isl_give isl_multi_aff *isl_multi_aff_read_from_str(isl_ctx *ctx, - const char *str); -void isl_multi_aff_dump(__isl_keep isl_multi_aff *maff); - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_alloc(__isl_take isl_set *set, - __isl_take isl_multi_aff *maff); -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_copy( - __isl_keep isl_pw_multi_aff *pma); -void *isl_pw_multi_aff_free(__isl_take isl_pw_multi_aff *pma); - -unsigned isl_pw_multi_aff_dim(__isl_keep isl_pw_multi_aff *pma, - enum isl_dim_type type); - -isl_ctx *isl_pw_multi_aff_get_ctx(__isl_keep isl_pw_multi_aff *pma); -__isl_give isl_space *isl_pw_multi_aff_get_domain_space( - __isl_keep isl_pw_multi_aff *pma); -__isl_give isl_space *isl_pw_multi_aff_get_space( - __isl_keep isl_pw_multi_aff *pma); -const char *isl_pw_multi_aff_get_tuple_name(__isl_keep isl_pw_multi_aff *pma, - enum isl_dim_type type); -__isl_give isl_id *isl_pw_multi_aff_get_tuple_id( - __isl_keep isl_pw_multi_aff *pma, enum isl_dim_type type); -int isl_pw_multi_aff_has_tuple_id(__isl_keep isl_pw_multi_aff *pma, - enum isl_dim_type type); -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_set_tuple_id( - __isl_take isl_pw_multi_aff *pma, - enum isl_dim_type type, __isl_take isl_id *id); - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_empty(__isl_take isl_space *space); - -const char *isl_pw_multi_aff_get_dim_name(__isl_keep isl_pw_multi_aff *pma, - enum isl_dim_type type, unsigned pos); -__isl_give isl_id *isl_pw_multi_aff_get_dim_id( - __isl_keep isl_pw_multi_aff *pma, enum isl_dim_type type, - unsigned pos); -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_set_dim_id( - __isl_take isl_pw_multi_aff *pma, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id); - -int isl_pw_multi_aff_plain_is_equal(__isl_keep isl_pw_multi_aff *pma1, - __isl_keep isl_pw_multi_aff *pma2); - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_union_add( - __isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2); - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_add( - __isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2); - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_intersect_params( - __isl_take isl_pw_multi_aff *pma, __isl_take isl_set *set); -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_intersect_domain( - __isl_take isl_pw_multi_aff *pma, __isl_take isl_set *set); - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_gist_params( - __isl_take isl_pw_multi_aff *pma, __isl_take isl_set *set); -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_gist( - __isl_take isl_pw_multi_aff *pma, __isl_take isl_set *set); - -int isl_pw_multi_aff_foreach_piece(__isl_keep isl_pw_multi_aff *pma, - int (*fn)(__isl_take isl_set *set, __isl_take isl_multi_aff *maff, - void *user), void *user); - -__isl_give isl_map *isl_map_from_pw_multi_aff(__isl_take isl_pw_multi_aff *pma); -__isl_give isl_set *isl_set_from_pw_multi_aff(__isl_take isl_pw_multi_aff *pma); - -__isl_give isl_printer *isl_printer_print_pw_multi_aff(__isl_take isl_printer *p, - __isl_keep isl_pw_multi_aff *pma); - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_set(__isl_take isl_set *set); -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_map(__isl_take isl_map *map); - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_read_from_str(isl_ctx *ctx, - const char *str); -void isl_pw_multi_aff_dump(__isl_keep isl_pw_multi_aff *pma); - -#if defined(__cplusplus) -} -#endif - -#include - -#endif diff --git a/cloog-0.17.0/isl/include/isl/aff_type.h b/cloog-0.17.0/isl/include/isl/aff_type.h deleted file mode 100644 index 152eeb5..0000000 --- a/cloog-0.17.0/isl/include/isl/aff_type.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef ISL_AFF_TYPE_H -#define ISL_AFF_TYPE_H - -struct isl_aff; -typedef struct isl_aff isl_aff; - -struct isl_pw_aff; -typedef struct isl_pw_aff isl_pw_aff; - -struct isl_multi_aff; -typedef struct isl_multi_aff isl_multi_aff; - -struct isl_pw_multi_aff; -typedef struct isl_pw_multi_aff isl_pw_multi_aff; - -#endif diff --git a/cloog-0.17.0/isl/include/isl/arg.h b/cloog-0.17.0/isl/include/isl/arg.h deleted file mode 100644 index 4ae3374..0000000 --- a/cloog-0.17.0/isl/include/isl/arg.h +++ /dev/null @@ -1,313 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_ARG_H -#define ISL_ARG_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_arg_choice { - const char *name; - unsigned value; -}; - -struct isl_arg_flags { - const char *name; - unsigned mask; - unsigned value; -}; - -enum isl_arg_type { - isl_arg_end, - isl_arg_alias, - isl_arg_arg, - isl_arg_bool, - isl_arg_child, - isl_arg_choice, - isl_arg_flags, - isl_arg_footer, - isl_arg_int, - isl_arg_user, - isl_arg_long, - isl_arg_ulong, - isl_arg_str, - isl_arg_str_list, - isl_arg_version -}; - -struct isl_args; - -struct isl_arg { - enum isl_arg_type type; - char short_name; - const char *long_name; - const char *argument_name; - size_t offset; - const char *help_msg; -#define ISL_ARG_SINGLE_DASH (1 << 0) -#define ISL_ARG_BOOL_ARG (1 << 1) -#define ISL_ARG_HIDDEN (1 << 2) - unsigned flags; - union { - struct { - struct isl_arg_choice *choice; - unsigned default_value; - unsigned default_selected; - int (*set)(void *opt, unsigned val); - } choice; - struct { - struct isl_arg_flags *flags; - unsigned default_value; - } flags; - struct { - unsigned default_value; - int (*set)(void *opt, unsigned val); - } b; - struct { - int default_value; - } i; - struct { - long default_value; - long default_selected; - int (*set)(void *opt, long val); - } l; - struct { - unsigned long default_value; - } ul; - struct { - const char *default_value; - } str; - struct { - size_t offset_n; - } str_list; - struct { - struct isl_args *child; - } child; - struct { - void (*print_version)(void); - } version; - struct { - int (*init)(void*); - void (*clear)(void*); - } user; - } u; -}; - -struct isl_args { - size_t options_size; - struct isl_arg *args; -}; - -#define ISL_ARGS_START(s,name) \ - struct isl_arg name ## LIST[]; \ - struct isl_args name = { sizeof(s), name ## LIST }; \ - struct isl_arg name ## LIST[] = { -#define ISL_ARGS_END \ - { isl_arg_end } }; - -#define ISL_ARG_ALIAS(l) { \ - .type = isl_arg_alias, \ - .long_name = l, \ -}, -#define ISL_ARG_ARG(st,f,a,d) { \ - .type = isl_arg_arg, \ - .argument_name = a, \ - .offset = offsetof(st, f), \ - .u = { .str = { .default_value = d } } \ -}, -#define ISL_ARG_FOOTER(h) { \ - .type = isl_arg_footer, \ - .help_msg = h, \ -}, -#define ISL_ARG_CHOICE(st,f,s,l,c,d,h) { \ - .type = isl_arg_choice, \ - .short_name = s, \ - .long_name = l, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .choice = { .choice = c, .default_value = d, \ - .default_selected = d, .set = NULL } } \ -}, -#define ISL_ARG_OPT_CHOICE(st,f,s,l,c,d,ds,h) { \ - .type = isl_arg_choice, \ - .short_name = s, \ - .long_name = l, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .choice = { .choice = c, .default_value = d, \ - .default_selected = ds, .set = NULL } } \ -}, -#define ISL_ARG_USER_OPT_CHOICE(st,f,s,l,c,setter,d,ds,h) { \ - .type = isl_arg_choice, \ - .short_name = s, \ - .long_name = l, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .choice = { .choice = c, .default_value = d, \ - .default_selected = ds, .set = setter } } \ -}, -#define _ISL_ARG_BOOL_F(o,s,l,setter,d,h,fl) { \ - .type = isl_arg_bool, \ - .short_name = s, \ - .long_name = l, \ - .offset = o, \ - .help_msg = h, \ - .flags = fl, \ - .u = { .b = { .default_value = d, .set = setter } } \ -}, -#define ISL_ARG_BOOL_F(st,f,s,l,d,h,fl) \ - _ISL_ARG_BOOL_F(offsetof(st, f),s,l,NULL,d,h,fl) -#define ISL_ARG_BOOL(st,f,s,l,d,h) \ - ISL_ARG_BOOL_F(st,f,s,l,d,h,0) -#define ISL_ARG_PHANTOM_BOOL_F(s,l,setter,h,fl) \ - _ISL_ARG_BOOL_F(-1,s,l,setter,0,h,fl) -#define ISL_ARG_PHANTOM_BOOL(s,l,setter,h) \ - ISL_ARG_PHANTOM_BOOL_F(s,l,setter,h,0) -#define ISL_ARG_INT_F(st,f,s,l,a,d,h,fl) { \ - .type = isl_arg_int, \ - .short_name = s, \ - .long_name = l, \ - .argument_name = a, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .flags = fl, \ - .u = { .ul = { .default_value = d } } \ -}, -#define ISL_ARG_INT(st,f,s,l,a,d,h) \ - ISL_ARG_INT_F(st,f,s,l,a,d,h,0) -#define ISL_ARG_LONG(st,f,s,lo,d,h) { \ - .type = isl_arg_long, \ - .short_name = s, \ - .long_name = lo, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .l = { .default_value = d, .default_selected = d, \ - .set = NULL } } \ -}, -#define ISL_ARG_USER_LONG(st,f,s,lo,setter,d,h) { \ - .type = isl_arg_long, \ - .short_name = s, \ - .long_name = lo, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .l = { .default_value = d, .default_selected = d, \ - .set = setter } } \ -}, -#define ISL_ARG_OPT_LONG(st,f,s,lo,d,ds,h) { \ - .type = isl_arg_long, \ - .short_name = s, \ - .long_name = lo, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .l = { .default_value = d, .default_selected = ds, \ - .set = NULL } } \ -}, -#define ISL_ARG_ULONG(st,f,s,l,d,h) { \ - .type = isl_arg_ulong, \ - .short_name = s, \ - .long_name = l, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .ul = { .default_value = d } } \ -}, -#define ISL_ARG_STR_F(st,f,s,l,a,d,h,fl) { \ - .type = isl_arg_str, \ - .short_name = s, \ - .long_name = l, \ - .argument_name = a, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .flags = fl, \ - .u = { .str = { .default_value = d } } \ -}, -#define ISL_ARG_STR(st,f,s,l,a,d,h) \ - ISL_ARG_STR_F(st,f,s,l,a,d,h,0) -#define ISL_ARG_STR_LIST(st,f_n,f_l,s,l,a,h) { \ - .type = isl_arg_str_list, \ - .short_name = s, \ - .long_name = l, \ - .argument_name = a, \ - .offset = offsetof(st, f_l), \ - .help_msg = h, \ - .u = { .str_list = { .offset_n = offsetof(st, f_n) } } \ -}, -#define _ISL_ARG_CHILD(o,l,c,h,fl) { \ - .type = isl_arg_child, \ - .long_name = l, \ - .offset = o, \ - .help_msg = h, \ - .flags = fl, \ - .u = { .child = { .child = c } } \ -}, -#define ISL_ARG_CHILD(st,f,l,c,h) \ - _ISL_ARG_CHILD(offsetof(st, f),l,c,h,0) -#define ISL_ARG_GROUP_F(c,h,fl) \ - _ISL_ARG_CHILD(-1,NULL,c,h,fl) -#define ISL_ARG_GROUP(c,h) \ - ISL_ARG_GROUP_F(c,h,0) -#define ISL_ARG_FLAGS(st,f,s,l,c,d,h) { \ - .type = isl_arg_flags, \ - .short_name = s, \ - .long_name = l, \ - .offset = offsetof(st, f), \ - .help_msg = h, \ - .u = { .flags = { .flags = c, .default_value = d } } \ -}, -#define ISL_ARG_USER(st,f,i,c) { \ - .type = isl_arg_user, \ - .offset = offsetof(st, f), \ - .u = { .user = { .init = i, .clear = c} } \ -}, -#define ISL_ARG_VERSION(print) { \ - .type = isl_arg_version, \ - .u = { .version = { .print_version = print } } \ -}, - -#define ISL_ARG_ALL (1 << 0) - -void isl_args_set_defaults(struct isl_args *args, void *opt); -void isl_args_free(struct isl_args *args, void *opt); -int isl_args_parse(struct isl_args *args, int argc, char **argv, void *opt, - unsigned flags); - -#define ISL_ARG_DECL(prefix,st,args) \ -extern struct isl_args args; \ -st *prefix ## _new_with_defaults(void); \ -void prefix ## _free(st *opt); \ -int prefix ## _parse(st *opt, int argc, char **argv, unsigned flags); - -#define ISL_ARG_DEF(prefix,st,args) \ -st *prefix ## _new_with_defaults() \ -{ \ - st *opt = (st *)calloc(1, sizeof(st)); \ - if (opt) \ - isl_args_set_defaults(&(args), opt); \ - return opt; \ -} \ - \ -void prefix ## _free(st *opt) \ -{ \ - isl_args_free(&(args), opt); \ -} \ - \ -int prefix ## _parse(st *opt, int argc, char **argv, unsigned flags) \ -{ \ - return isl_args_parse(&(args), argc, argv, opt, flags); \ -} - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/band.h b/cloog-0.17.0/isl/include/isl/band.h deleted file mode 100644 index 880cb12..0000000 --- a/cloog-0.17.0/isl/include/isl/band.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef ISL_BAND_H -#define ISL_BAND_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_band; -typedef struct isl_band isl_band; - -__isl_give isl_band *isl_band_copy(__isl_keep isl_band *band); -void *isl_band_free(__isl_take isl_band *band); - -isl_ctx *isl_band_get_ctx(__isl_keep isl_band *band); - -int isl_band_has_children(__isl_keep isl_band *band); -__isl_give isl_band_list *isl_band_get_children( - __isl_keep isl_band *band); - -__isl_give isl_union_map *isl_band_get_prefix_schedule( - __isl_keep isl_band *band); -__isl_give isl_union_map *isl_band_get_partial_schedule( - __isl_keep isl_band *band); -__isl_give isl_union_map *isl_band_get_suffix_schedule( - __isl_keep isl_band *band); - -int isl_band_n_member(__isl_keep isl_band *band); -int isl_band_member_is_zero_distance(__isl_keep isl_band *band, int pos); - -__isl_give isl_printer *isl_printer_print_band(__isl_take isl_printer *p, - __isl_keep isl_band *band); -void isl_band_dump(__isl_keep isl_band *band); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/blk.h b/cloog-0.17.0/isl/include/isl/blk.h deleted file mode 100644 index 690a872..0000000 --- a/cloog-0.17.0/isl/include/isl/blk.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_BLK_H -#define ISL_BLK_H - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_blk { - size_t size; - isl_int *data; -}; - -#define ISL_BLK_CACHE_SIZE 20 - -struct isl_ctx; - -struct isl_blk isl_blk_alloc(struct isl_ctx *ctx, size_t n); -struct isl_blk isl_blk_empty(void); -int isl_blk_is_error(struct isl_blk block); -struct isl_blk isl_blk_extend(struct isl_ctx *ctx, struct isl_blk block, - size_t new_n); -void isl_blk_free(struct isl_ctx *ctx, struct isl_blk block); -void isl_blk_clear_cache(struct isl_ctx *ctx); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/config.h.in b/cloog-0.17.0/isl/include/isl/config.h.in deleted file mode 100644 index 231575e..0000000 --- a/cloog-0.17.0/isl/include/isl/config.h.in +++ /dev/null @@ -1,3 +0,0 @@ -#undef GCC_WARN_UNUSED_RESULT - -#undef ISL_PIPLIB diff --git a/cloog-0.17.0/isl/include/isl/constraint.h b/cloog-0.17.0/isl/include/isl/constraint.h deleted file mode 100644 index bfd8989..0000000 --- a/cloog-0.17.0/isl/include/isl/constraint.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_CONSTRAINT_H -#define ISL_CONSTRAINT_H - -#include -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_constraint; -typedef struct isl_constraint isl_constraint; - -isl_ctx *isl_constraint_get_ctx(__isl_keep isl_constraint *c); - -__isl_give isl_constraint *isl_equality_alloc(__isl_take isl_local_space *ls); -__isl_give isl_constraint *isl_inequality_alloc(__isl_take isl_local_space *ls); - -struct isl_constraint *isl_constraint_cow(struct isl_constraint *c); -struct isl_constraint *isl_constraint_copy(struct isl_constraint *c); -void *isl_constraint_free(__isl_take isl_constraint *c); - -int isl_basic_map_foreach_constraint(__isl_keep isl_basic_map *bmap, - int (*fn)(__isl_take isl_constraint *c, void *user), void *user); -int isl_basic_set_foreach_constraint(__isl_keep isl_basic_set *bset, - int (*fn)(__isl_take isl_constraint *c, void *user), void *user); -int isl_constraint_is_equal(struct isl_constraint *constraint1, - struct isl_constraint *constraint2); - -int isl_basic_set_foreach_bound_pair(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, - int (*fn)(__isl_take isl_constraint *lower, - __isl_take isl_constraint *upper, - __isl_take isl_basic_set *bset, void *user), void *user); - -__isl_give isl_basic_map *isl_basic_map_add_constraint( - __isl_take isl_basic_map *bmap, __isl_take isl_constraint *constraint); -__isl_give isl_basic_set *isl_basic_set_add_constraint( - __isl_take isl_basic_set *bset, __isl_take isl_constraint *constraint); -__isl_give isl_map *isl_map_add_constraint(__isl_take isl_map *map, - __isl_take isl_constraint *constraint); -__isl_give isl_set *isl_set_add_constraint(__isl_take isl_set *set, - __isl_take isl_constraint *constraint); - -int isl_basic_map_has_defining_equality( - __isl_keep isl_basic_map *bmap, enum isl_dim_type type, int pos, - __isl_give isl_constraint **c); -int isl_basic_set_has_defining_equality( - struct isl_basic_set *bset, enum isl_dim_type type, int pos, - struct isl_constraint **constraint); -int isl_basic_set_has_defining_inequalities( - struct isl_basic_set *bset, enum isl_dim_type type, int pos, - struct isl_constraint **lower, - struct isl_constraint **upper); - -__isl_give isl_space *isl_constraint_get_space( - __isl_keep isl_constraint *constraint); -int isl_constraint_dim(struct isl_constraint *constraint, - enum isl_dim_type type); - -int isl_constraint_involves_dims(__isl_keep isl_constraint *constraint, - enum isl_dim_type type, unsigned first, unsigned n); - -const char *isl_constraint_get_dim_name(__isl_keep isl_constraint *constraint, - enum isl_dim_type type, unsigned pos); -void isl_constraint_get_constant(__isl_keep isl_constraint *constraint, - isl_int *v); -void isl_constraint_get_coefficient(__isl_keep isl_constraint *constraint, - enum isl_dim_type type, int pos, isl_int *v); -__isl_give isl_constraint *isl_constraint_set_constant( - __isl_take isl_constraint *constraint, isl_int v); -__isl_give isl_constraint *isl_constraint_set_constant_si( - __isl_take isl_constraint *constraint, int v); -__isl_give isl_constraint *isl_constraint_set_coefficient( - __isl_take isl_constraint *constraint, - enum isl_dim_type type, int pos, isl_int v); -__isl_give isl_constraint *isl_constraint_set_coefficient_si( - __isl_take isl_constraint *constraint, - enum isl_dim_type type, int pos, int v); - -__isl_give isl_aff *isl_constraint_get_div(__isl_keep isl_constraint *constraint, - int pos); - -struct isl_constraint *isl_constraint_negate(struct isl_constraint *constraint); - -int isl_constraint_is_equality(__isl_keep isl_constraint *constraint); -int isl_constraint_is_div_constraint(__isl_keep isl_constraint *constraint); - -__isl_give isl_basic_map *isl_basic_map_from_constraint( - __isl_take isl_constraint *constraint); -struct isl_basic_set *isl_basic_set_from_constraint( - struct isl_constraint *constraint); - -__isl_give isl_aff *isl_constraint_get_bound( - __isl_keep isl_constraint *constraint, enum isl_dim_type type, int pos); -__isl_give isl_aff *isl_constraint_get_aff( - __isl_keep isl_constraint *constraint); -__isl_give isl_constraint *isl_equality_from_aff(__isl_take isl_aff *aff); -__isl_give isl_constraint *isl_inequality_from_aff(__isl_take isl_aff *aff); - -__isl_give isl_basic_set *isl_basic_set_drop_constraint( - __isl_take isl_basic_set *bset, __isl_take isl_constraint *constraint); - -__isl_give isl_printer *isl_printer_print_constraint(__isl_take isl_printer *p, - __isl_keep isl_constraint *c); -void isl_constraint_dump(__isl_keep isl_constraint *c); - -#if defined(__cplusplus) -} -#endif - -#include - -#endif diff --git a/cloog-0.17.0/isl/include/isl/ctx.h b/cloog-0.17.0/isl/include/isl/ctx.h deleted file mode 100644 index a772723..0000000 --- a/cloog-0.17.0/isl/include/isl/ctx.h +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_CTX_H -#define ISL_CTX_H - -#include -#include - -#include -#include -#include -#include -#include - -#ifndef __isl_give -#define __isl_give -#endif -#ifndef __isl_take -#define __isl_take -#endif -#ifndef __isl_keep -#define __isl_keep -#endif -#ifndef __isl_export -#define __isl_export -#endif -#ifndef __isl_constructor -#define __isl_constructor -#endif -#ifndef __isl_subclass -#define __isl_subclass(super) -#endif - -#ifdef GCC_WARN_UNUSED_RESULT -#define WARN_UNUSED GCC_WARN_UNUSED_RESULT -#else -#define WARN_UNUSED -#endif - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Nearly all isa functions require a struct isl_ctx allocated using - * isl_ctx_alloc. This ctx contains (or will contain) options that - * control the behavior of the library and some caches. - * - * An object allocated within a given ctx should never be used inside - * another ctx. Functions for moving objects from one ctx to another - * will be added as the need arises. - * - * A given context should only be used inside a single thread. - * A global context for synchronization between different threads - * as well as functions for moving a context to a different thread - * will be added as the need arises. - * - * If anything goes wrong (out of memory, failed assertion), then - * the library will currently simply abort. This will be made - * configurable in the future. - * Users of the library should expect functions that return - * a pointer to a structure, to return NULL, indicating failure. - * Any function accepting a pointer to a structure will treat - * a NULL argument as a failure, resulting in the function freeing - * the remaining structures (if any) and returning NULL itself - * (in case of pointer return type). - * The only exception is the isl_ctx argument, which should never be NULL. - */ -struct isl_stats { - long gbr_solved_lps; -}; -enum isl_error { - isl_error_none = 0, - isl_error_abort, - isl_error_unknown, - isl_error_internal, - isl_error_invalid, - isl_error_unsupported -}; -struct isl_ctx; -typedef struct isl_ctx isl_ctx; - -/* Some helper macros */ - -#define ISL_FL_INIT(l, f) (l) = (f) /* Specific flags location. */ -#define ISL_FL_SET(l, f) ((l) |= (f)) -#define ISL_FL_CLR(l, f) ((l) &= ~(f)) -#define ISL_FL_ISSET(l, f) (!!((l) & (f))) - -#define ISL_F_INIT(p, f) ISL_FL_INIT((p)->flags, f) /* Structure element flags. */ -#define ISL_F_SET(p, f) ISL_FL_SET((p)->flags, f) -#define ISL_F_CLR(p, f) ISL_FL_CLR((p)->flags, f) -#define ISL_F_ISSET(p, f) ISL_FL_ISSET((p)->flags, f) - -/* isl_check_ctx() checks at compile time if 'ctx' is of type 'isl_ctx *' and - * returns the value of 'expr'. It is used to ensure, that always an isl_ctx is - * passed to the following macros, even if they currently do not use it. - */ -#define isl_check_ctx(ctx, expr) (ctx != (isl_ctx *) 0) ? expr : expr - -#define isl_alloc(ctx,type,size) isl_check_ctx(ctx, (type *)malloc(size)) -#define isl_calloc(ctx,type,size) isl_check_ctx(ctx, \ - (type *)calloc(1, size)) -#define isl_realloc(ctx,ptr,type,size) isl_check_ctx(ctx, \ - (type *)realloc(ptr,size)) -#define isl_alloc_type(ctx,type) isl_alloc(ctx,type,sizeof(type)) -#define isl_calloc_type(ctx,type) isl_calloc(ctx,type,sizeof(type)) -#define isl_realloc_type(ctx,ptr,type) isl_realloc(ctx,ptr,type,sizeof(type)) -#define isl_alloc_array(ctx,type,n) isl_alloc(ctx,type,(n)*sizeof(type)) -#define isl_calloc_array(ctx,type,n) isl_check_ctx(ctx,\ - (type *)calloc(n, sizeof(type))) -#define isl_realloc_array(ctx,ptr,type,n) \ - isl_realloc(ctx,ptr,type,(n)*sizeof(type)) - -#define isl_die(ctx,errno,msg,code) \ - do { \ - isl_handle_error(ctx, errno, msg, __FILE__, __LINE__); \ - code; \ - } while (0) - -void isl_handle_error(isl_ctx *ctx, int errno, const char *msg, - const char *file, int line); - -#define isl_assert4(ctx,test,code,errno) \ - do { \ - if (test) \ - break; \ - isl_die(ctx, errno, "Assertion \"" #test "\" failed", code); \ - } while (0) -#define isl_assert(ctx,test,code) \ - isl_assert4(ctx,test,code,isl_error_unknown) - -#define isl_min(a,b) ((a < b) ? (a) : (b)) - -/* struct isl_ctx functions */ - -struct isl_options *isl_ctx_options(isl_ctx *ctx); - -isl_ctx *isl_ctx_alloc_with_options(struct isl_args *args, - __isl_take void *opt); -isl_ctx *isl_ctx_alloc(void); -void *isl_ctx_peek_options(isl_ctx *ctx, struct isl_args *args); -int isl_ctx_parse_options(isl_ctx *ctx, int argc, char **argv, unsigned flags); -void isl_ctx_ref(struct isl_ctx *ctx); -void isl_ctx_deref(struct isl_ctx *ctx); -void isl_ctx_free(isl_ctx *ctx); - -void isl_ctx_abort(isl_ctx *ctx); -void isl_ctx_resume(isl_ctx *ctx); -int isl_ctx_aborted(isl_ctx *ctx); - -#define ISL_ARG_CTX_DECL(prefix,st,args) \ -st *isl_ctx_peek_ ## prefix(isl_ctx *ctx); - -#define ISL_ARG_CTX_DEF(prefix,st,args) \ -st *isl_ctx_peek_ ## prefix(isl_ctx *ctx) \ -{ \ - return (st *)isl_ctx_peek_options(ctx, &(args)); \ -} - -#define ISL_CTX_GET_INT_DEF(prefix,st,args,field) \ -int prefix ## _get_ ## field(isl_ctx *ctx) \ -{ \ - st *options; \ - options = isl_ctx_peek_ ## prefix(ctx); \ - if (!options) \ - isl_die(ctx, isl_error_invalid, \ - "isl_ctx does not reference " #prefix, \ - return -1); \ - return options->field; \ -} - -#define ISL_CTX_SET_INT_DEF(prefix,st,args,field) \ -int prefix ## _set_ ## field(isl_ctx *ctx, int val) \ -{ \ - st *options; \ - options = isl_ctx_peek_ ## prefix(ctx); \ - if (!options) \ - isl_die(ctx, isl_error_invalid, \ - "isl_ctx does not reference " #prefix, \ - return -1); \ - options->field = val; \ - return 0; \ -} - -#define ISL_CTX_GET_BOOL_DEF(prefix,st,args,field) \ - ISL_CTX_GET_INT_DEF(prefix,st,args,field) - -#define ISL_CTX_SET_BOOL_DEF(prefix,st,args,field) \ - ISL_CTX_SET_INT_DEF(prefix,st,args,field) - -#define ISL_CTX_GET_CHOICE_DEF(prefix,st,args,field) \ - ISL_CTX_GET_INT_DEF(prefix,st,args,field) - -#define ISL_CTX_SET_CHOICE_DEF(prefix,st,args,field) \ - ISL_CTX_SET_INT_DEF(prefix,st,args,field) - -enum isl_error isl_ctx_last_error(isl_ctx *ctx); -void isl_ctx_reset_error(isl_ctx *ctx); -void isl_ctx_set_error(isl_ctx *ctx, enum isl_error error); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/dim.h b/cloog-0.17.0/isl/include/isl/dim.h deleted file mode 100644 index 7c31c02..0000000 --- a/cloog-0.17.0/isl/include/isl/dim.h +++ /dev/null @@ -1,122 +0,0 @@ -#ifndef ISL_DIM_H -#define ISL_DIM_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -#define isl_dim isl_space - -isl_ctx *isl_dim_get_ctx(__isl_keep isl_space *dim); -__isl_give isl_space *isl_dim_alloc(isl_ctx *ctx, - unsigned nparam, unsigned n_in, unsigned n_out); -__isl_give isl_space *isl_dim_set_alloc(isl_ctx *ctx, - unsigned nparam, unsigned dim); -__isl_give isl_space *isl_dim_copy(__isl_keep isl_space *dim); -void isl_dim_free(__isl_take isl_space *dim); - -unsigned isl_dim_size(__isl_keep isl_space *dim, enum isl_dim_type type); - -__isl_give isl_space *isl_dim_set_dim_id(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id); -int isl_dim_has_dim_id(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos); -__isl_give isl_id *isl_dim_get_dim_id(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos); - -int isl_dim_find_dim_by_id(__isl_keep isl_space *dim, - enum isl_dim_type type, __isl_keep isl_id *id); - -__isl_give isl_space *isl_dim_set_tuple_id(__isl_take isl_space *dim, - enum isl_dim_type type, __isl_take isl_id *id); -__isl_give isl_space *isl_dim_reset_tuple_id(__isl_take isl_space *dim, - enum isl_dim_type type); -int isl_dim_has_tuple_id(__isl_keep isl_space *dim, enum isl_dim_type type); -__isl_give isl_id *isl_dim_get_tuple_id(__isl_keep isl_space *dim, - enum isl_dim_type type); - -__isl_give isl_space *isl_dim_set_name(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos, __isl_keep const char *name); -__isl_keep const char *isl_dim_get_name(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos); - -__isl_give isl_space *isl_dim_set_tuple_name(__isl_take isl_space *dim, - enum isl_dim_type type, const char *s); -const char *isl_dim_get_tuple_name(__isl_keep isl_space *dim, - enum isl_dim_type type); - -int isl_dim_is_wrapping(__isl_keep isl_space *dim); -__isl_give isl_space *isl_dim_wrap(__isl_take isl_space *dim); -__isl_give isl_space *isl_dim_unwrap(__isl_take isl_space *dim); - -__isl_give isl_space *isl_dim_domain(__isl_take isl_space *dim); -__isl_give isl_space *isl_dim_from_domain(__isl_take isl_space *dim); -__isl_give isl_space *isl_dim_range(__isl_take isl_space *dim); -__isl_give isl_space *isl_dim_from_range(__isl_take isl_space *dim); -__isl_give isl_space *isl_dim_reverse(__isl_take isl_space *dim); -__isl_give isl_space *isl_dim_join(__isl_take isl_space *left, - __isl_take isl_space *right); -__isl_give isl_space *isl_dim_align_params(__isl_take isl_space *dim1, - __isl_take isl_space *dim2); -__isl_give isl_space *isl_dim_insert(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos, unsigned n); -__isl_give isl_space *isl_dim_add(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned n); -__isl_give isl_space *isl_dim_drop(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_space *isl_dim_move(__isl_take isl_space *dim, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); -__isl_give isl_space *isl_dim_map_from_set( - __isl_take isl_space *dim); -__isl_give isl_space *isl_dim_zip(__isl_take isl_space *dim); - -__isl_give isl_local_space *isl_local_space_from_dim( - __isl_take isl_space *dim); -__isl_give isl_space *isl_local_space_get_dim( - __isl_keep isl_local_space *ls); - -__isl_give isl_space *isl_aff_get_dim(__isl_keep isl_aff *aff); -__isl_give isl_space *isl_pw_aff_get_dim(__isl_keep isl_pw_aff *pwaff); - -__isl_give isl_space *isl_constraint_get_dim( - __isl_keep isl_constraint *constraint); - -__isl_give isl_space *isl_basic_map_get_dim(__isl_keep isl_basic_map *bmap); -__isl_give isl_space *isl_map_get_dim(__isl_keep isl_map *map); -__isl_give isl_space *isl_union_map_get_dim(__isl_keep isl_union_map *umap); - -__isl_give isl_space *isl_basic_set_get_dim(__isl_keep isl_basic_set *bset); -__isl_give isl_space *isl_set_get_dim(__isl_keep isl_set *set); -__isl_give isl_space *isl_union_set_get_dim(__isl_keep isl_union_set *uset); - -__isl_give isl_space *isl_point_get_dim(__isl_keep isl_point *pnt); - -__isl_give isl_space *isl_qpolynomial_get_dim(__isl_keep isl_qpolynomial *qp); -__isl_give isl_space *isl_pw_qpolynomial_get_dim( - __isl_keep isl_pw_qpolynomial *pwqp); -__isl_give isl_space *isl_qpolynomial_fold_get_dim( - __isl_keep isl_qpolynomial_fold *fold); -__isl_give isl_space *isl_pw_qpolynomial_fold_get_dim( - __isl_keep isl_pw_qpolynomial_fold *pwf); -__isl_give isl_space *isl_union_pw_qpolynomial_get_dim( - __isl_keep isl_union_pw_qpolynomial *upwqp); -__isl_give isl_space *isl_union_pw_qpolynomial_fold_get_dim( - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/flow.h b/cloog-0.17.0/isl/include/isl/flow.h deleted file mode 100644 index 8fc2698..0000000 --- a/cloog-0.17.0/isl/include/isl/flow.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef ISL_FLOW_H -#define ISL_FLOW_H - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Let n (>= 0) be the number of iterators shared by first and second. - * If first precedes second textually return 2 * n + 1, - * otherwise return 2 * n. - */ -typedef int (*isl_access_level_before)(void *first, void *second); - -struct isl_access_info; -typedef struct isl_access_info isl_access_info; -struct isl_flow; -typedef struct isl_flow isl_flow; - -__isl_give isl_access_info *isl_access_info_alloc(__isl_take isl_map *sink, - void *sink_user, isl_access_level_before fn, int max_source); -__isl_give isl_access_info *isl_access_info_add_source( - __isl_take isl_access_info *acc, __isl_take isl_map *source, - int must, void *source_user); -void isl_access_info_free(__isl_take isl_access_info *acc); - -isl_ctx *isl_access_info_get_ctx(__isl_keep isl_access_info *acc); - -__isl_give isl_flow *isl_access_info_compute_flow(__isl_take isl_access_info *acc); -int isl_flow_foreach(__isl_keep isl_flow *deps, - int (*fn)(__isl_take isl_map *dep, int must, void *dep_user, void *user), - void *user); -__isl_give isl_map *isl_flow_get_no_source(__isl_keep isl_flow *deps, int must); -void isl_flow_free(__isl_take isl_flow *deps); - -isl_ctx *isl_flow_get_ctx(__isl_keep isl_flow *deps); - -int isl_union_map_compute_flow(__isl_take isl_union_map *sink, - __isl_take isl_union_map *must_source, - __isl_take isl_union_map *may_source, - __isl_take isl_union_map *schedule, - __isl_give isl_union_map **must_dep, __isl_give isl_union_map **may_dep, - __isl_give isl_union_map **must_no_source, - __isl_give isl_union_map **may_no_source); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/hash.h b/cloog-0.17.0/isl/include/isl/hash.h deleted file mode 100644 index 654b6b6..0000000 --- a/cloog-0.17.0/isl/include/isl/hash.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_HASH_H -#define ISL_HASH_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -#define isl_hash_init() (2166136261u) -#define isl_hash_byte(h,b) do { \ - h *= 16777619; \ - h ^= b; \ - } while(0) -#define isl_hash_hash(h,h2) \ - do { \ - isl_hash_byte(h, (h2) & 0xFF); \ - isl_hash_byte(h, ((h2) >> 8) & 0xFF); \ - isl_hash_byte(h, ((h2) >> 16) & 0xFF); \ - isl_hash_byte(h, ((h2) >> 24) & 0xFF); \ - } while(0) -#define isl_hash_bits(h,bits) \ - ((bits) == 32) ? (h) : \ - ((bits) >= 16) ? \ - ((h) >> (bits)) ^ ((h) & (((uint32_t)1 << (bits)) - 1)) : \ - (((h) >> (bits)) ^ (h)) & (((uint32_t)1 << (bits)) - 1) - -uint32_t isl_hash_string(uint32_t hash, const char *s); -uint32_t isl_hash_mem(uint32_t hash, const void *p, size_t len); - -#define isl_hash_builtin(h,l) isl_hash_mem(h, &l, sizeof(l)) - -struct isl_hash_table_entry -{ - uint32_t hash; - void *data; -}; - -struct isl_hash_table { - int bits; - int n; - struct isl_hash_table_entry *entries; -}; - -struct isl_ctx; - -struct isl_hash_table *isl_hash_table_alloc(struct isl_ctx *ctx, int min_size); -void isl_hash_table_free(struct isl_ctx *ctx, struct isl_hash_table *table); - -int isl_hash_table_init(struct isl_ctx *ctx, struct isl_hash_table *table, - int min_size); -void isl_hash_table_clear(struct isl_hash_table *table); -struct isl_hash_table_entry *isl_hash_table_find(struct isl_ctx *ctx, - struct isl_hash_table *table, - uint32_t key_hash, - int (*eq)(const void *entry, const void *val), - const void *val, int reserve); -int isl_hash_table_foreach(struct isl_ctx *ctx, - struct isl_hash_table *table, - int (*fn)(void **entry, void *user), void *user); -void isl_hash_table_remove(struct isl_ctx *ctx, - struct isl_hash_table *table, - struct isl_hash_table_entry *entry); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/id.h b/cloog-0.17.0/isl/include/isl/id.h deleted file mode 100644 index 86232f7..0000000 --- a/cloog-0.17.0/isl/include/isl/id.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef ISL_ID_H -#define ISL_ID_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_id; -typedef struct isl_id isl_id; - -isl_ctx *isl_id_get_ctx(__isl_keep isl_id *id); - -__isl_give isl_id *isl_id_alloc(isl_ctx *ctx, - __isl_keep const char *name, void *user); -__isl_give isl_id *isl_id_copy(isl_id *id); -void *isl_id_free(__isl_take isl_id *id); - -void *isl_id_get_user(__isl_keep isl_id *id); -__isl_keep const char *isl_id_get_name(__isl_keep isl_id *id); - -__isl_give isl_printer *isl_printer_print_id(__isl_take isl_printer *p, - __isl_keep isl_id *id); -void isl_id_dump(__isl_keep isl_id *id); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/ilp.h b/cloog-0.17.0/isl/include/isl/ilp.h deleted file mode 100644 index de5ec80..0000000 --- a/cloog-0.17.0/isl/include/isl/ilp.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_ILP_H -#define ISL_ILP_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -enum isl_lp_result isl_basic_set_solve_ilp(struct isl_basic_set *bset, int max, - isl_int *f, isl_int *opt, - struct isl_vec **sol_p); -enum isl_lp_result isl_basic_set_max(__isl_keep isl_basic_set *bset, - __isl_keep isl_aff *obj, isl_int *opt); -enum isl_lp_result isl_set_min(__isl_keep isl_set *set, - __isl_keep isl_aff *obj, isl_int *opt); -enum isl_lp_result isl_set_max(__isl_keep isl_set *set, - __isl_keep isl_aff *obj, isl_int *opt); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/int.h b/cloog-0.17.0/isl/include/isl/int.h deleted file mode 100644 index d5385b1..0000000 --- a/cloog-0.17.0/isl/include/isl/int.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_INT_H -#define ISL_INT_H - -#include -#include -#include -#if defined(__cplusplus) -#include -#endif - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifndef mp_get_memory_functions -void mp_get_memory_functions( - void *(**alloc_func_ptr) (size_t), - void *(**realloc_func_ptr) (void *, size_t, size_t), - void (**free_func_ptr) (void *, size_t)); -#endif - -/* isl_int is the basic integer type. It currently always corresponds - * to a gmp mpz_t, but in the future, different types such as long long - * or cln::cl_I will be supported. - */ -typedef mpz_t isl_int; - -#define isl_int_init(i) mpz_init(i) -#define isl_int_clear(i) mpz_clear(i) - -#define isl_int_set(r,i) mpz_set(r,i) -#define isl_int_set_gmp(r,i) mpz_set(r,i) -#define isl_int_set_si(r,i) mpz_set_si(r,i) -#define isl_int_set_ui(r,i) mpz_set_ui(r,i) -#define isl_int_get_gmp(i,g) mpz_set(g,i) -#define isl_int_get_si(r) mpz_get_si(r) -#define isl_int_get_ui(r) mpz_get_ui(r) -#define isl_int_get_d(r) mpz_get_d(r) -#define isl_int_get_str(r) mpz_get_str(0, 10, r) -#define isl_int_abs(r,i) mpz_abs(r,i) -#define isl_int_neg(r,i) mpz_neg(r,i) -#define isl_int_swap(i,j) mpz_swap(i,j) -#define isl_int_swap_or_set(i,j) mpz_swap(i,j) -#define isl_int_add_ui(r,i,j) mpz_add_ui(r,i,j) -#define isl_int_sub_ui(r,i,j) mpz_sub_ui(r,i,j) - -#define isl_int_add(r,i,j) mpz_add(r,i,j) -#define isl_int_sub(r,i,j) mpz_sub(r,i,j) -#define isl_int_mul(r,i,j) mpz_mul(r,i,j) -#define isl_int_mul_2exp(r,i,j) mpz_mul_2exp(r,i,j) -#define isl_int_mul_ui(r,i,j) mpz_mul_ui(r,i,j) -#define isl_int_pow_ui(r,i,j) mpz_pow_ui(r,i,j) -#define isl_int_addmul(r,i,j) mpz_addmul(r,i,j) -#define isl_int_submul(r,i,j) mpz_submul(r,i,j) - -#define isl_int_gcd(r,i,j) mpz_gcd(r,i,j) -#define isl_int_lcm(r,i,j) mpz_lcm(r,i,j) -#define isl_int_divexact(r,i,j) mpz_divexact(r,i,j) -#define isl_int_divexact_ui(r,i,j) mpz_divexact_ui(r,i,j) -#define isl_int_tdiv_q(r,i,j) mpz_tdiv_q(r,i,j) -#define isl_int_cdiv_q(r,i,j) mpz_cdiv_q(r,i,j) -#define isl_int_fdiv_q(r,i,j) mpz_fdiv_q(r,i,j) -#define isl_int_fdiv_r(r,i,j) mpz_fdiv_r(r,i,j) -#define isl_int_fdiv_q_ui(r,i,j) mpz_fdiv_q_ui(r,i,j) - -#define isl_int_read(r,s) mpz_set_str(r,s,10) -typedef void (*isl_int_print_gmp_free_t)(void *, size_t); -#define isl_int_print(out,i,width) \ - do { \ - char *s; \ - isl_int_print_gmp_free_t gmp_free; \ - s = mpz_get_str(0, 10, i); \ - fprintf(out, "%*s", width, s); \ - mp_get_memory_functions(NULL, NULL, &gmp_free); \ - (*gmp_free)(s, strlen(s)+1); \ - } while (0) - -#define isl_int_sgn(i) mpz_sgn(i) -#define isl_int_cmp(i,j) mpz_cmp(i,j) -#define isl_int_cmp_si(i,si) mpz_cmp_si(i,si) -#define isl_int_eq(i,j) (mpz_cmp(i,j) == 0) -#define isl_int_ne(i,j) (mpz_cmp(i,j) != 0) -#define isl_int_lt(i,j) (mpz_cmp(i,j) < 0) -#define isl_int_le(i,j) (mpz_cmp(i,j) <= 0) -#define isl_int_gt(i,j) (mpz_cmp(i,j) > 0) -#define isl_int_ge(i,j) (mpz_cmp(i,j) >= 0) -#define isl_int_abs_eq(i,j) (mpz_cmpabs(i,j) == 0) -#define isl_int_abs_ne(i,j) (mpz_cmpabs(i,j) != 0) -#define isl_int_abs_lt(i,j) (mpz_cmpabs(i,j) < 0) -#define isl_int_abs_gt(i,j) (mpz_cmpabs(i,j) > 0) -#define isl_int_abs_ge(i,j) (mpz_cmpabs(i,j) >= 0) - - -#define isl_int_is_zero(i) (isl_int_sgn(i) == 0) -#define isl_int_is_one(i) (isl_int_cmp_si(i,1) == 0) -#define isl_int_is_negone(i) (isl_int_cmp_si(i,-1) == 0) -#define isl_int_is_pos(i) (isl_int_sgn(i) > 0) -#define isl_int_is_neg(i) (isl_int_sgn(i) < 0) -#define isl_int_is_nonpos(i) (isl_int_sgn(i) <= 0) -#define isl_int_is_nonneg(i) (isl_int_sgn(i) >= 0) -#define isl_int_is_divisible_by(i,j) mpz_divisible_p(i,j) - -uint32_t isl_gmp_hash(mpz_t v, uint32_t hash); -#define isl_int_hash(v,h) isl_gmp_hash(v,h) - -#if defined(__cplusplus) -} -#endif - -#if defined(__cplusplus) -extern "C" { typedef void (*isl_gmp_free_t)(void *, size_t); } - -static inline std::ostream &operator<<(std::ostream &os, isl_int i) -{ - char *s; - isl_gmp_free_t gmp_free; - s = mpz_get_str(0, 10, i); - os << s; - mp_get_memory_functions(NULL, NULL, &gmp_free); - (*gmp_free)(s, strlen(s)+1); - return os; -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/list.h b/cloog-0.17.0/isl/include/isl/list.h deleted file mode 100644 index e0dbfed..0000000 --- a/cloog-0.17.0/isl/include/isl/list.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_LIST_H -#define ISL_LIST_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -#define ISL_DECLARE_LIST(EL) \ -struct isl_##EL; \ -struct isl_##EL##_list; \ -typedef struct isl_##EL##_list isl_##EL##_list; \ -isl_ctx *isl_##EL##_list_get_ctx(__isl_keep isl_##EL##_list *list); \ -__isl_give isl_##EL##_list *isl_##EL##_list_from_##EL( \ - __isl_take struct isl_##EL *el); \ -__isl_give isl_##EL##_list *isl_##EL##_list_alloc(isl_ctx *ctx, int n); \ -__isl_give isl_##EL##_list *isl_##EL##_list_copy( \ - __isl_keep isl_##EL##_list *list); \ -void *isl_##EL##_list_free(__isl_take isl_##EL##_list *list); \ -__isl_give isl_##EL##_list *isl_##EL##_list_add( \ - __isl_take isl_##EL##_list *list, \ - __isl_take struct isl_##EL *el); \ -__isl_give isl_##EL##_list *isl_##EL##_list_concat( \ - __isl_take isl_##EL##_list *list1, \ - __isl_take isl_##EL##_list *list2); \ -int isl_##EL##_list_n_##EL(__isl_keep isl_##EL##_list *list); \ -__isl_give struct isl_##EL *isl_##EL##_list_get_##EL( \ - __isl_keep isl_##EL##_list *list, int index); \ -int isl_##EL##_list_foreach(__isl_keep isl_##EL##_list *list, \ - int (*fn)(__isl_take struct isl_##EL *el, void *user), \ - void *user); \ -__isl_give isl_printer *isl_printer_print_##EL##_list( \ - __isl_take isl_printer *p, __isl_keep isl_##EL##_list *list); \ -void isl_##EL##_list_dump(__isl_keep isl_##EL##_list *list); - -ISL_DECLARE_LIST(basic_set) -ISL_DECLARE_LIST(set) -ISL_DECLARE_LIST(aff) -ISL_DECLARE_LIST(pw_aff) -ISL_DECLARE_LIST(band) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/local_space.h b/cloog-0.17.0/isl/include/isl/local_space.h deleted file mode 100644 index 1f6108d..0000000 --- a/cloog-0.17.0/isl/include/isl/local_space.h +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef ISL_LOCAL_SPACE_H -#define ISL_LOCAL_SPACE_H - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_local_space; -typedef struct isl_local_space isl_local_space; - -isl_ctx *isl_local_space_get_ctx(__isl_keep isl_local_space *ls); - -__isl_give isl_local_space *isl_local_space_from_space(__isl_take isl_space *dim); - -__isl_give isl_local_space *isl_local_space_copy( - __isl_keep isl_local_space *ls); -void *isl_local_space_free(__isl_take isl_local_space *ls); - -int isl_local_space_is_set(__isl_keep isl_local_space *ls); - -int isl_local_space_dim(__isl_keep isl_local_space *ls, - enum isl_dim_type type); -const char *isl_local_space_get_dim_name(__isl_keep isl_local_space *ls, - enum isl_dim_type type, unsigned pos); -__isl_give isl_local_space *isl_local_space_set_dim_name( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned pos, const char *s); -__isl_give isl_local_space *isl_local_space_set_dim_id( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id); -__isl_give isl_space *isl_local_space_get_space(__isl_keep isl_local_space *ls); -__isl_give isl_aff *isl_local_space_get_div(__isl_keep isl_local_space *ls, - int pos); - -__isl_give isl_local_space *isl_local_space_domain( - __isl_take isl_local_space *ls); -__isl_give isl_local_space *isl_local_space_range( - __isl_take isl_local_space *ls); -__isl_give isl_local_space *isl_local_space_from_domain( - __isl_take isl_local_space *ls); -__isl_give isl_local_space *isl_local_space_add_dims( - __isl_take isl_local_space *ls, enum isl_dim_type type, unsigned n); -__isl_give isl_local_space *isl_local_space_drop_dims( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_local_space *isl_local_space_insert_dims( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_local_space *isl_local_space_intersect( - __isl_take isl_local_space *ls1, __isl_take isl_local_space *ls2); - -int isl_local_space_is_equal(__isl_keep isl_local_space *ls1, - __isl_keep isl_local_space *ls2); - -__isl_give isl_basic_map *isl_local_space_lifting( - __isl_take isl_local_space *ls); - -__isl_give isl_printer *isl_printer_print_local_space(__isl_take isl_printer *p, - __isl_keep isl_local_space *ls); -void isl_local_space_dump(__isl_keep isl_local_space *ls); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/lp.h b/cloog-0.17.0/isl/include/isl/lp.h deleted file mode 100644 index 9f7a912..0000000 --- a/cloog-0.17.0/isl/include/isl/lp.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_LP_H -#define ISL_LP_H - -#include -#include -#include -#include - -enum isl_lp_result { - isl_lp_error = -1, - isl_lp_ok = 0, - isl_lp_unbounded, - isl_lp_empty -}; - -#if defined(__cplusplus) -extern "C" { -#endif - -enum isl_lp_result isl_basic_map_solve_lp(struct isl_basic_map *bmap, int max, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol); -enum isl_lp_result isl_basic_set_solve_lp(struct isl_basic_set *bset, int max, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol); -enum isl_lp_result isl_map_solve_lp(__isl_keep isl_map *map, int max, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol); -enum isl_lp_result isl_set_solve_lp(__isl_keep isl_set *set, int max, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/map.h b/cloog-0.17.0/isl/include/isl/map.h deleted file mode 100644 index 289e7cc..0000000 --- a/cloog-0.17.0/isl/include/isl/map.h +++ /dev/null @@ -1,594 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_MAP_H -#define ISL_MAP_H - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -/* General notes: - * - * All structures are reference counted to allow reuse without duplication. - * A *_copy operation will increase the reference count, while a *_free - * operation will decrease the reference count and only actually release - * the structures when the reference count drops to zero. - * - * Functions that return an isa structure will in general _destroy_ - * all argument isa structures (the obvious execption begin the _copy - * functions). A pointer passed to such a function may therefore - * never be used after the function call. If you want to keep a - * reference to the old structure(s), use the appropriate _copy function. - */ - -unsigned isl_basic_map_n_in(const struct isl_basic_map *bmap); -unsigned isl_basic_map_n_out(const struct isl_basic_map *bmap); -unsigned isl_basic_map_n_param(const struct isl_basic_map *bmap); -unsigned isl_basic_map_n_div(const struct isl_basic_map *bmap); -unsigned isl_basic_map_total_dim(const struct isl_basic_map *bmap); -unsigned isl_basic_map_dim(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type); - -unsigned isl_map_n_in(const struct isl_map *map); -unsigned isl_map_n_out(const struct isl_map *map); -unsigned isl_map_n_param(const struct isl_map *map); -unsigned isl_map_dim(__isl_keep isl_map *map, enum isl_dim_type type); - -isl_ctx *isl_basic_map_get_ctx(__isl_keep isl_basic_map *bmap); -isl_ctx *isl_map_get_ctx(__isl_keep isl_map *map); -__isl_give isl_space *isl_basic_map_get_space(__isl_keep isl_basic_map *bmap); -__isl_give isl_space *isl_map_get_space(__isl_keep isl_map *map); - -__isl_give isl_aff *isl_basic_map_get_div(__isl_keep isl_basic_map *bmap, - int pos); - -__isl_give isl_local_space *isl_basic_map_get_local_space( - __isl_keep isl_basic_map *bmap); - -__isl_give isl_basic_map *isl_basic_map_set_tuple_name( - __isl_take isl_basic_map *bmap, enum isl_dim_type type, const char *s); -const char *isl_basic_map_get_tuple_name(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type); -const char *isl_map_get_tuple_name(__isl_keep isl_map *map, - enum isl_dim_type type); -__isl_give isl_map *isl_map_set_tuple_name(__isl_take isl_map *map, - enum isl_dim_type type, const char *s); -const char *isl_basic_map_get_dim_name(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos); -const char *isl_map_get_dim_name(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos); -__isl_give isl_basic_map *isl_basic_map_set_dim_name( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, const char *s); -__isl_give isl_map *isl_map_set_dim_name(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, const char *s); - -__isl_give isl_map *isl_map_set_dim_id(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id); -int isl_basic_map_has_dim_id(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos); -int isl_map_has_dim_id(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos); -__isl_give isl_id *isl_map_get_dim_id(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos); -__isl_give isl_map *isl_map_set_tuple_id(__isl_take isl_map *map, - enum isl_dim_type type, __isl_take isl_id *id); -__isl_give isl_map *isl_map_reset_tuple_id(__isl_take isl_map *map, - enum isl_dim_type type); -int isl_map_has_tuple_id(__isl_keep isl_map *map, enum isl_dim_type type); -__isl_give isl_id *isl_map_get_tuple_id(__isl_keep isl_map *map, - enum isl_dim_type type); - -int isl_map_find_dim_by_id(__isl_keep isl_map *map, enum isl_dim_type type, - __isl_keep isl_id *id); -int isl_map_find_dim_by_name(__isl_keep isl_map *map, enum isl_dim_type type, - const char *name); - -int isl_basic_map_is_rational(__isl_keep isl_basic_map *bmap); - -struct isl_basic_map *isl_basic_map_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned in, unsigned out, unsigned extra, - unsigned n_eq, unsigned n_ineq); -__isl_give isl_basic_map *isl_basic_map_identity(__isl_take isl_space *dim); -struct isl_basic_map *isl_basic_map_identity_like(struct isl_basic_map *model); -struct isl_basic_map *isl_basic_map_finalize(struct isl_basic_map *bmap); -void isl_basic_map_free(__isl_take isl_basic_map *bmap); -__isl_give isl_basic_map *isl_basic_map_copy(__isl_keep isl_basic_map *bmap); -struct isl_basic_map *isl_basic_map_extend(struct isl_basic_map *base, - unsigned nparam, unsigned n_in, unsigned n_out, unsigned extra, - unsigned n_eq, unsigned n_ineq); -struct isl_basic_map *isl_basic_map_extend_constraints( - struct isl_basic_map *base, unsigned n_eq, unsigned n_ineq); -__isl_give isl_basic_map *isl_basic_map_equal( - __isl_take isl_space *dim, unsigned n_equal); -__isl_give isl_basic_map *isl_basic_map_less_at(__isl_take isl_space *dim, - unsigned pos); -__isl_give isl_basic_map *isl_basic_map_more_at(__isl_take isl_space *dim, - unsigned pos); -__isl_give isl_basic_map *isl_basic_map_empty(__isl_take isl_space *dim); -struct isl_basic_map *isl_basic_map_empty_like(struct isl_basic_map *model); -struct isl_basic_map *isl_basic_map_empty_like_map(struct isl_map *model); -__isl_give isl_basic_map *isl_basic_map_universe(__isl_take isl_space *dim); -__isl_give isl_basic_map *isl_basic_map_nat_universe(__isl_take isl_space *dim); -__isl_give isl_basic_map *isl_basic_map_universe_like( - __isl_keep isl_basic_map *bmap); -__isl_give isl_basic_map *isl_basic_map_remove_redundancies( - __isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_remove_redundancies(__isl_take isl_map *map); -__isl_give isl_basic_map *isl_map_simple_hull(__isl_take isl_map *map); - -__isl_export -__isl_give isl_basic_map *isl_basic_map_intersect_domain( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *bset); -__isl_export -__isl_give isl_basic_map *isl_basic_map_intersect_range( - __isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *bset); -__isl_export -__isl_give isl_basic_map *isl_basic_map_intersect( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); -__isl_export -__isl_give isl_map *isl_basic_map_union( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); -__isl_export -__isl_give isl_basic_map *isl_basic_map_apply_domain( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); -__isl_export -__isl_give isl_basic_map *isl_basic_map_apply_range( - __isl_take isl_basic_map *bmap1, - __isl_take isl_basic_map *bmap2); -__isl_export -__isl_give isl_basic_map *isl_basic_map_affine_hull( - __isl_take isl_basic_map *bmap); -__isl_export -__isl_give isl_basic_map *isl_basic_map_reverse(__isl_take isl_basic_map *bmap); -__isl_give isl_basic_set *isl_basic_map_domain(__isl_take isl_basic_map *bmap); -__isl_give isl_basic_set *isl_basic_map_range(__isl_take isl_basic_map *bmap); -__isl_give isl_basic_map *isl_basic_map_domain_map( - __isl_take isl_basic_map *bmap); -__isl_give isl_basic_map *isl_basic_map_range_map( - __isl_take isl_basic_map *bmap); -__isl_give isl_basic_map *isl_basic_map_remove_dims( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_basic_map *isl_basic_map_eliminate( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_basic_map *isl_basic_map_from_basic_set( - __isl_take isl_basic_set *bset, __isl_take isl_space *dim); -struct isl_basic_set *isl_basic_set_from_basic_map(struct isl_basic_map *bmap); -__isl_export -__isl_give isl_basic_map *isl_basic_map_sample(__isl_take isl_basic_map *bmap); -struct isl_basic_map *isl_basic_map_simplify(struct isl_basic_map *bmap); -__isl_export -__isl_give isl_basic_map *isl_basic_map_detect_equalities( - __isl_take isl_basic_map *bmap); -__isl_give isl_basic_map *isl_basic_map_read_from_file(isl_ctx *ctx, - FILE *input); -__isl_constructor -__isl_give isl_basic_map *isl_basic_map_read_from_str(isl_ctx *ctx, - const char *str); -__isl_give isl_map *isl_map_read_from_file(isl_ctx *ctx, FILE *input); -__isl_constructor -__isl_give isl_map *isl_map_read_from_str(isl_ctx *ctx, const char *str); -void isl_basic_map_dump(__isl_keep isl_basic_map *bmap); -void isl_basic_map_print(__isl_keep isl_basic_map *bmap, FILE *out, int indent, - const char *prefix, const char *suffix, unsigned output_format); -void isl_map_dump(__isl_keep isl_map *map); -void isl_map_print(__isl_keep isl_map *map, FILE *out, int indent, - unsigned output_format); -__isl_give isl_printer *isl_printer_print_basic_map( - __isl_take isl_printer *printer, __isl_keep isl_basic_map *bmap); -__isl_give isl_printer *isl_printer_print_map(__isl_take isl_printer *printer, - __isl_keep isl_map *map); -__isl_give isl_basic_map *isl_basic_map_fix_si(__isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, int value); -__isl_give isl_basic_map *isl_basic_map_lower_bound_si( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, int value); - -struct isl_basic_map *isl_basic_map_sum( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2); -struct isl_basic_map *isl_basic_map_neg(struct isl_basic_map *bmap); -struct isl_basic_map *isl_basic_map_floordiv(struct isl_basic_map *bmap, - isl_int d); - -struct isl_map *isl_map_sum(struct isl_map *map1, struct isl_map *map2); -struct isl_map *isl_map_neg(struct isl_map *map); -struct isl_map *isl_map_floordiv(struct isl_map *map, isl_int d); - -__isl_export -int isl_basic_map_is_equal( - __isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2); - -__isl_give isl_map *isl_basic_map_partial_lexmax( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); -__isl_give isl_map *isl_basic_map_partial_lexmin( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); -__isl_give isl_map *isl_map_partial_lexmax( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty); -__isl_give isl_map *isl_map_partial_lexmin( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty); -__isl_export -__isl_give isl_map *isl_basic_map_lexmin(__isl_take isl_basic_map *bmap); -__isl_export -__isl_give isl_map *isl_basic_map_lexmax(__isl_take isl_basic_map *bmap); -__isl_export -__isl_give isl_map *isl_map_lexmin(__isl_take isl_map *map); -__isl_export -__isl_give isl_map *isl_map_lexmax(__isl_take isl_map *map); -__isl_give isl_pw_multi_aff *isl_basic_map_partial_lexmin_pw_multi_aff( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); -__isl_give isl_pw_multi_aff *isl_basic_map_partial_lexmax_pw_multi_aff( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); -__isl_give isl_pw_multi_aff *isl_basic_map_lexmin_pw_multi_aff( - __isl_take isl_basic_map *bmap); - -void isl_basic_map_print_internal(__isl_keep isl_basic_map *bmap, - FILE *out, int indent); - -struct isl_basic_map *isl_map_copy_basic_map(struct isl_map *map); -__isl_give isl_map *isl_map_drop_basic_map(__isl_take isl_map *map, - __isl_keep isl_basic_map *bmap); - -int isl_basic_map_plain_is_fixed(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, isl_int *val); - -int isl_basic_map_image_is_bounded(__isl_keep isl_basic_map *bmap); -int isl_basic_map_is_universe(__isl_keep isl_basic_map *bmap); -int isl_basic_map_plain_is_empty(__isl_keep isl_basic_map *bmap); -int isl_basic_map_fast_is_empty(__isl_keep isl_basic_map *bmap); -__isl_export -int isl_basic_map_is_empty(__isl_keep isl_basic_map *bmap); -int isl_basic_map_is_subset(__isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2); -int isl_basic_map_is_strict_subset(__isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2); - -struct isl_map *isl_map_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned in, unsigned out, int n, - unsigned flags); -__isl_give isl_map *isl_map_universe(__isl_take isl_space *dim); -__isl_give isl_map *isl_map_nat_universe(__isl_take isl_space *dim); -__isl_give isl_map *isl_map_empty(__isl_take isl_space *dim); -struct isl_map *isl_map_empty_like(struct isl_map *model); -struct isl_map *isl_map_empty_like_basic_map(struct isl_basic_map *model); -struct isl_map *isl_map_dup(struct isl_map *map); -__isl_give isl_map *isl_map_add_basic_map(__isl_take isl_map *map, - __isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_identity(__isl_take isl_space *dim); -struct isl_map *isl_map_identity_like(struct isl_map *model); -struct isl_map *isl_map_identity_like_basic_map(struct isl_basic_map *model); -__isl_give isl_map *isl_map_lex_lt_first(__isl_take isl_space *dim, unsigned n); -__isl_give isl_map *isl_map_lex_le_first(__isl_take isl_space *dim, unsigned n); -__isl_give isl_map *isl_map_lex_lt(__isl_take isl_space *set_dim); -__isl_give isl_map *isl_map_lex_le(__isl_take isl_space *set_dim); -__isl_give isl_map *isl_map_lex_gt_first(__isl_take isl_space *dim, unsigned n); -__isl_give isl_map *isl_map_lex_ge_first(__isl_take isl_space *dim, unsigned n); -__isl_give isl_map *isl_map_lex_gt(__isl_take isl_space *set_dim); -__isl_give isl_map *isl_map_lex_ge(__isl_take isl_space *set_dim); -struct isl_map *isl_map_finalize(struct isl_map *map); -void isl_map_free(__isl_take isl_map *map); -__isl_give isl_map *isl_map_copy(__isl_keep isl_map *map); -struct isl_map *isl_map_extend(struct isl_map *base, - unsigned nparam, unsigned n_in, unsigned n_out); -__isl_export -__isl_give isl_map *isl_map_reverse(__isl_take isl_map *map); -__isl_export -__isl_give isl_map *isl_map_union( - __isl_take isl_map *map1, - __isl_take isl_map *map2); -struct isl_map *isl_map_union_disjoint( - struct isl_map *map1, struct isl_map *map2); -__isl_export -__isl_give isl_map *isl_map_intersect_domain( - __isl_take isl_map *map, - __isl_take isl_set *set); -__isl_export -__isl_give isl_map *isl_map_intersect_range( - __isl_take isl_map *map, - __isl_take isl_set *set); -__isl_export -__isl_give isl_map *isl_map_apply_domain( - __isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_export -__isl_give isl_map *isl_map_apply_range( - __isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_map *isl_map_product(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_basic_map *isl_basic_map_domain_product( - __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2); -__isl_give isl_basic_map *isl_basic_map_range_product( - __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2); -__isl_give isl_map *isl_map_domain_product(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_map *isl_map_range_product(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_basic_map *isl_basic_map_flat_product( - __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2); -__isl_give isl_map *isl_map_flat_product(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_basic_map *isl_basic_map_flat_range_product( - __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2); -__isl_give isl_map *isl_map_flat_domain_product(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_map *isl_map_flat_range_product(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_export -__isl_give isl_map *isl_map_intersect(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_export -__isl_give isl_map *isl_map_intersect_params(__isl_take isl_map *map, - __isl_take isl_set *params); -__isl_export -__isl_give isl_map *isl_map_subtract( - __isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_map *isl_map_subtract_domain(__isl_take isl_map *map, - __isl_take isl_set *dom); -__isl_give isl_map *isl_map_subtract_range(__isl_take isl_map *map, - __isl_take isl_set *dom); -struct isl_map *isl_map_fix_input_si(struct isl_map *map, - unsigned input, int value); -__isl_give isl_map *isl_map_fix_si(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, int value); -__isl_give isl_map *isl_map_lower_bound_si(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, int value); -__isl_give isl_map *isl_map_upper_bound_si(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, int value); -__isl_export -__isl_give isl_basic_set *isl_basic_map_deltas(__isl_take isl_basic_map *bmap); -__isl_export -__isl_give isl_set *isl_map_deltas(__isl_take isl_map *map); -__isl_give isl_basic_map *isl_basic_map_deltas_map( - __isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_deltas_map(__isl_take isl_map *map); -__isl_export -__isl_give isl_map *isl_map_detect_equalities(__isl_take isl_map *map); -__isl_export -__isl_give isl_basic_map *isl_map_affine_hull(__isl_take isl_map *map); -__isl_give isl_basic_map *isl_map_convex_hull(__isl_take isl_map *map); -__isl_export -__isl_give isl_basic_map *isl_map_polyhedral_hull(__isl_take isl_map *map); -__isl_give isl_basic_map *isl_basic_map_add(__isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned n); -__isl_give isl_map *isl_map_add_dims(__isl_take isl_map *map, - enum isl_dim_type type, unsigned n); -__isl_give isl_map *isl_map_insert_dims(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, unsigned n); -__isl_give isl_basic_map *isl_basic_map_move_dims( - __isl_take isl_basic_map *bmap, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); -__isl_give isl_map *isl_map_move_dims(__isl_take isl_map *map, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); -__isl_give isl_basic_map *isl_basic_map_project_out( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_map *isl_map_project_out(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_basic_map *isl_basic_map_remove_divs( - __isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_remove_divs(__isl_take isl_map *map); -__isl_give isl_map *isl_map_eliminate(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_map *isl_map_remove_dims(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n); -struct isl_map *isl_map_remove_inputs(struct isl_map *map, - unsigned first, unsigned n); - -__isl_give isl_map *isl_map_equate(__isl_take isl_map *map, - enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2); -__isl_give isl_map *isl_map_oppose(__isl_take isl_map *map, - enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2); - -__isl_export -__isl_give isl_map *isl_set_identity(__isl_take isl_set *set); - -__isl_export -int isl_basic_set_is_wrapping(__isl_keep isl_basic_set *bset); -__isl_export -int isl_set_is_wrapping(__isl_keep isl_set *set); -__isl_give isl_basic_set *isl_basic_map_wrap(__isl_take isl_basic_map *bmap); -__isl_give isl_set *isl_map_wrap(__isl_take isl_map *map); -__isl_give isl_basic_map *isl_basic_set_unwrap(__isl_take isl_basic_set *bset); -__isl_give isl_map *isl_set_unwrap(__isl_take isl_set *set); -__isl_export -__isl_give isl_basic_map *isl_basic_map_flatten(__isl_take isl_basic_map *bmap); -__isl_export -__isl_give isl_map *isl_map_flatten(__isl_take isl_map *map); -__isl_export -__isl_give isl_basic_map *isl_basic_map_flatten_domain( - __isl_take isl_basic_map *bmap); -__isl_export -__isl_give isl_basic_map *isl_basic_map_flatten_range( - __isl_take isl_basic_map *bmap); -__isl_export -__isl_give isl_map *isl_map_flatten_domain(__isl_take isl_map *map); -__isl_export -__isl_give isl_map *isl_map_flatten_range(__isl_take isl_map *map); -__isl_export -__isl_give isl_basic_set *isl_basic_set_flatten(__isl_take isl_basic_set *bset); -__isl_export -__isl_give isl_set *isl_set_flatten(__isl_take isl_set *set); -__isl_give isl_map *isl_set_flatten_map(__isl_take isl_set *set); -__isl_give isl_set *isl_map_params(__isl_take isl_map *map); -__isl_give isl_set *isl_map_domain(__isl_take isl_map *bmap); -__isl_give isl_set *isl_map_range(__isl_take isl_map *map); -__isl_give isl_map *isl_map_domain_map(__isl_take isl_map *map); -__isl_give isl_map *isl_map_range_map(__isl_take isl_map *map); -__isl_constructor -__isl_give isl_map *isl_map_from_basic_map(__isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_from_domain(__isl_take isl_set *set); -__isl_give isl_basic_map *isl_basic_map_from_domain( - __isl_take isl_basic_set *bset); -__isl_give isl_basic_map *isl_basic_map_from_range( - __isl_take isl_basic_set *bset); -struct isl_map *isl_map_from_range(struct isl_set *set); -__isl_give isl_basic_map *isl_basic_map_from_domain_and_range( - __isl_take isl_basic_set *domain, __isl_take isl_basic_set *range); -__isl_give isl_map *isl_map_from_domain_and_range(__isl_take isl_set *domain, - __isl_take isl_set *range); -__isl_give isl_map *isl_map_from_set(__isl_take isl_set *set, - __isl_take isl_space *dim); -struct isl_set *isl_set_from_map(struct isl_map *map); -__isl_export -__isl_give isl_basic_map *isl_map_sample(__isl_take isl_map *map); - -int isl_map_plain_is_empty(__isl_keep isl_map *map); -int isl_map_fast_is_empty(__isl_keep isl_map *map); -int isl_map_plain_is_universe(__isl_keep isl_map *map); -__isl_export -int isl_map_is_empty(__isl_keep isl_map *map); -__isl_export -int isl_map_is_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2); -__isl_export -int isl_map_is_strict_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2); -__isl_export -int isl_map_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2); -__isl_export -int isl_map_is_single_valued(__isl_keep isl_map *map); -int isl_map_plain_is_injective(__isl_keep isl_map *map); -__isl_export -int isl_map_is_injective(__isl_keep isl_map *map); -__isl_export -int isl_map_is_bijective(__isl_keep isl_map *map); -int isl_map_is_translation(__isl_keep isl_map *map); -int isl_map_has_equal_space(__isl_keep isl_map *map1, __isl_keep isl_map *map2); - -int isl_basic_map_can_zip(__isl_keep isl_basic_map *bmap); -int isl_map_can_zip(__isl_keep isl_map *map); -__isl_give isl_basic_map *isl_basic_map_zip(__isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_zip(__isl_take isl_map *map); - -__isl_give isl_map *isl_map_make_disjoint(__isl_take isl_map *map); -__isl_give isl_map *isl_basic_map_compute_divs(__isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_compute_divs(__isl_take isl_map *map); -__isl_give isl_map *isl_map_align_divs(__isl_take isl_map *map); - -int isl_basic_map_involves_dims(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n); -int isl_map_involves_dims(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n); - -void isl_map_print_internal(__isl_keep isl_map *map, FILE *out, int indent); - -int isl_map_plain_input_is_fixed(__isl_keep isl_map *map, - unsigned in, isl_int *val); -int isl_map_plain_is_fixed(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos, isl_int *val); -int isl_map_fast_is_fixed(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos, isl_int *val); - -__isl_export -__isl_give isl_basic_map *isl_basic_map_gist(__isl_take isl_basic_map *bmap, - __isl_take isl_basic_map *context); -__isl_export -__isl_give isl_map *isl_map_gist(__isl_take isl_map *map, - __isl_take isl_map *context); -__isl_export -__isl_give isl_map *isl_map_gist_domain(__isl_take isl_map *map, - __isl_take isl_set *context); -__isl_give isl_map *isl_map_gist_range(__isl_take isl_map *map, - __isl_take isl_set *context); -__isl_give isl_map *isl_map_gist_params(__isl_take isl_map *map, - __isl_take isl_set *context); -__isl_give isl_map *isl_map_gist_basic_map(__isl_take isl_map *map, - __isl_take isl_basic_map *context); - -__isl_export -__isl_give isl_map *isl_map_coalesce(__isl_take isl_map *map); - -int isl_map_plain_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2); -int isl_map_fast_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2); - -uint32_t isl_map_get_hash(__isl_keep isl_map *map); - -__isl_export -int isl_map_foreach_basic_map(__isl_keep isl_map *map, - int (*fn)(__isl_take isl_basic_map *bmap, void *user), void *user); - -__isl_give isl_map *isl_set_lifting(__isl_take isl_set *set); - -__isl_give isl_map *isl_map_power(__isl_take isl_map *map, int *exact); -__isl_give isl_map *isl_map_reaching_path_lengths(__isl_take isl_map *map, - int *exact); -__isl_give isl_map *isl_map_transitive_closure(__isl_take isl_map *map, - int *exact); - -__isl_give isl_map *isl_map_lex_le_map(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_map *isl_map_lex_lt_map(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_map *isl_map_lex_ge_map(__isl_take isl_map *map1, - __isl_take isl_map *map2); -__isl_give isl_map *isl_map_lex_gt_map(__isl_take isl_map *map1, - __isl_take isl_map *map2); - -__isl_give isl_map *isl_map_align_params(__isl_take isl_map *map, - __isl_take isl_space *model); - -__isl_give isl_mat *isl_basic_map_equalities_matrix( - __isl_keep isl_basic_map *bmap, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5); -__isl_give isl_mat *isl_basic_map_inequalities_matrix( - __isl_keep isl_basic_map *bmap, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5); -__isl_give isl_basic_map *isl_basic_map_from_constraint_matrices( - __isl_take isl_space *dim, - __isl_take isl_mat *eq, __isl_take isl_mat *ineq, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5); - -__isl_give isl_basic_map *isl_basic_map_from_aff(__isl_take isl_aff *aff); -__isl_give isl_basic_map *isl_basic_map_from_multi_aff( - __isl_take isl_multi_aff *maff); -__isl_give isl_basic_map *isl_basic_map_from_aff_list( - __isl_take isl_space *domain_dim, __isl_take isl_aff_list *list); - -__isl_give isl_pw_aff *isl_map_dim_max(__isl_take isl_map *map, int pos); - -#if defined(__cplusplus) -} -#endif - -#include - -#endif diff --git a/cloog-0.17.0/isl/include/isl/map_type.h b/cloog-0.17.0/isl/include/isl/map_type.h deleted file mode 100644 index a600233..0000000 --- a/cloog-0.17.0/isl/include/isl/map_type.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef ISL_MAP_TYPE_H -#define ISL_MAP_TYPE_H - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -__isl_subclass(isl_map) -struct isl_basic_map; -typedef struct isl_basic_map isl_basic_map; -__isl_subclass(isl_union_map) -struct isl_map; -typedef struct isl_map isl_map; - -#ifndef isl_basic_set -__isl_subclass(isl_set) -struct isl_basic_set; -typedef struct isl_basic_set isl_basic_set; -#endif -#ifndef isl_set -__isl_subclass(isl_union_set) -struct isl_set; -typedef struct isl_set isl_set; -#endif - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/mat.h b/cloog-0.17.0/isl/include/isl/mat.h deleted file mode 100644 index e888888..0000000 --- a/cloog-0.17.0/isl/include/isl/mat.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_MAT_H -#define ISL_MAT_H - -#include - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_mat; -typedef struct isl_mat isl_mat; - -isl_ctx *isl_mat_get_ctx(__isl_keep isl_mat *mat); - -__isl_give isl_mat *isl_mat_alloc(isl_ctx *ctx, - unsigned n_row, unsigned n_col); -struct isl_mat *isl_mat_dup(struct isl_mat *mat); -struct isl_mat *isl_mat_extend(struct isl_mat *mat, - unsigned n_row, unsigned n_col); -struct isl_mat *isl_mat_identity(struct isl_ctx *ctx, unsigned n_row); -__isl_give isl_mat *isl_mat_copy(__isl_keep isl_mat *mat); -struct isl_mat *isl_mat_cow(struct isl_mat *mat); -void isl_mat_free(__isl_take isl_mat *mat); - -int isl_mat_rows(__isl_keep isl_mat *mat); -int isl_mat_cols(__isl_keep isl_mat *mat); -int isl_mat_get_element(__isl_keep isl_mat *mat, int row, int col, isl_int *v); -__isl_give isl_mat *isl_mat_set_element(__isl_take isl_mat *mat, - int row, int col, isl_int v); -__isl_give isl_mat *isl_mat_set_element_si(__isl_take isl_mat *mat, - int row, int col, int v); - -struct isl_mat *isl_mat_swap_cols(struct isl_mat *mat, unsigned i, unsigned j); -struct isl_mat *isl_mat_swap_rows(struct isl_mat *mat, unsigned i, unsigned j); - -struct isl_vec *isl_mat_vec_product(struct isl_mat *mat, struct isl_vec *vec); -struct isl_vec *isl_vec_mat_product(struct isl_vec *vec, struct isl_mat *mat); -__isl_give isl_vec *isl_mat_vec_inverse_product(__isl_take isl_mat *mat, - __isl_take isl_vec *vec); -struct isl_mat *isl_mat_aff_direct_sum(struct isl_mat *left, - struct isl_mat *right); -__isl_give isl_mat *isl_mat_diagonal(__isl_take isl_mat *mat1, - __isl_take isl_mat *mat2); -struct isl_mat *isl_mat_left_hermite(struct isl_mat *M, - int neg, struct isl_mat **U, struct isl_mat **Q); -struct isl_mat *isl_mat_lin_to_aff(struct isl_mat *mat); -struct isl_mat *isl_mat_inverse_product(struct isl_mat *left, - struct isl_mat *right); -struct isl_mat *isl_mat_product(struct isl_mat *left, struct isl_mat *right); -struct isl_mat *isl_mat_transpose(struct isl_mat *mat); -__isl_give isl_mat *isl_mat_right_inverse(__isl_take isl_mat *mat); -__isl_give isl_mat *isl_mat_right_kernel(__isl_take isl_mat *mat); - -__isl_give isl_mat *isl_mat_normalize(__isl_take isl_mat *mat); -__isl_give isl_mat *isl_mat_normalize_row(__isl_take isl_mat *mat, int row); - -struct isl_mat *isl_mat_drop_cols(struct isl_mat *mat, - unsigned col, unsigned n); -struct isl_mat *isl_mat_drop_rows(struct isl_mat *mat, - unsigned row, unsigned n); -__isl_give isl_mat *isl_mat_insert_cols(__isl_take isl_mat *mat, - unsigned col, unsigned n); -__isl_give isl_mat *isl_mat_insert_rows(__isl_take isl_mat *mat, - unsigned row, unsigned n); -__isl_give isl_mat *isl_mat_move_cols(__isl_take isl_mat *mat, - unsigned dst_col, unsigned src_col, unsigned n); -__isl_give isl_mat *isl_mat_add_rows(__isl_take isl_mat *mat, unsigned n); -__isl_give isl_mat *isl_mat_insert_zero_cols(__isl_take isl_mat *mat, - unsigned first, unsigned n); -__isl_give isl_mat *isl_mat_add_zero_cols(__isl_take isl_mat *mat, unsigned n); -__isl_give isl_mat *isl_mat_insert_zero_rows(__isl_take isl_mat *mat, - unsigned row, unsigned n); -__isl_give isl_mat *isl_mat_add_zero_rows(__isl_take isl_mat *mat, unsigned n); - -void isl_mat_col_add(__isl_keep isl_mat *mat, int dst_col, int src_col); -void isl_mat_col_mul(struct isl_mat *mat, int dst_col, isl_int f, int src_col); -void isl_mat_col_submul(struct isl_mat *mat, - int dst_col, isl_int f, int src_col); - -struct isl_mat *isl_mat_unimodular_complete(struct isl_mat *M, int row); - -__isl_give isl_mat *isl_mat_from_row_vec(__isl_take isl_vec *vec); -__isl_give isl_mat *isl_mat_concat(__isl_take isl_mat *top, - __isl_take isl_mat *bot); -__isl_give isl_mat *isl_mat_vec_concat(__isl_take isl_mat *top, - __isl_take isl_vec *bot); - -int isl_mat_is_equal(__isl_keep isl_mat *mat1, __isl_keep isl_mat *mat2); - -int isl_mat_initial_non_zero_cols(__isl_keep isl_mat *mat); - -void isl_mat_print_internal(__isl_keep isl_mat *mat, FILE *out, int indent); -void isl_mat_dump(__isl_keep isl_mat *mat); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/multi.h b/cloog-0.17.0/isl/include/isl/multi.h deleted file mode 100644 index b9bb116..0000000 --- a/cloog-0.17.0/isl/include/isl/multi.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef ISL_MULTI_H -#define ISL_MULTI_H - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -#define ISL_DECLARE_MULTI(BASE) \ -__isl_give isl_multi_##BASE *isl_multi_##BASE##_from_##BASE##_list( \ - __isl_take isl_space *space, __isl_take isl_##BASE##_list *list); \ -const char *isl_multi_##BASE##_get_tuple_name( \ - __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type); - -ISL_DECLARE_MULTI(aff) - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/obj.h b/cloog-0.17.0/isl/include/isl/obj.h deleted file mode 100644 index d40a82c..0000000 --- a/cloog-0.17.0/isl/include/isl/obj.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef ISL_OBJ_H -#define ISL_OBJ_H - -#include -#include -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_obj_vtable { - void *(*copy)(void *v1); - void *(*add)(void *v1, void *v2); - __isl_give isl_printer *(*print)(__isl_take isl_printer *p, void *v); - void (*free)(void *v); -}; -typedef struct isl_obj_vtable *isl_obj_type; -extern struct isl_obj_vtable isl_obj_none_vtable; -#define isl_obj_none (&isl_obj_none_vtable) -extern struct isl_obj_vtable isl_obj_int_vtable; -#define isl_obj_int (&isl_obj_int_vtable) -extern struct isl_obj_vtable isl_obj_set_vtable; -#define isl_obj_set (&isl_obj_set_vtable) -extern struct isl_obj_vtable isl_obj_union_set_vtable; -#define isl_obj_union_set (&isl_obj_union_set_vtable) -extern struct isl_obj_vtable isl_obj_map_vtable; -#define isl_obj_map (&isl_obj_map_vtable) -extern struct isl_obj_vtable isl_obj_union_map_vtable; -#define isl_obj_union_map (&isl_obj_union_map_vtable) -extern struct isl_obj_vtable isl_obj_pw_qpolynomial_vtable; -#define isl_obj_pw_qpolynomial (&isl_obj_pw_qpolynomial_vtable) -extern struct isl_obj_vtable isl_obj_union_pw_qpolynomial_vtable; -#define isl_obj_union_pw_qpolynomial (&isl_obj_union_pw_qpolynomial_vtable) -extern struct isl_obj_vtable isl_obj_pw_qpolynomial_fold_vtable; -#define isl_obj_pw_qpolynomial_fold (&isl_obj_pw_qpolynomial_fold_vtable) -extern struct isl_obj_vtable isl_obj_union_pw_qpolynomial_fold_vtable; -#define isl_obj_union_pw_qpolynomial_fold (&isl_obj_union_pw_qpolynomial_fold_vtable) -struct isl_obj { - isl_obj_type type; - void *v; -}; - -struct isl_int_obj; -typedef struct isl_int_obj isl_int_obj; - -__isl_give isl_int_obj *isl_int_obj_alloc(isl_ctx *ctx, isl_int v); -void isl_int_obj_free(__isl_take isl_int_obj *i); -__isl_give isl_int_obj *isl_int_obj_add(__isl_take isl_int_obj *i1, - __isl_take isl_int_obj *i2); -__isl_give isl_int_obj *isl_int_obj_sub(__isl_take isl_int_obj *i1, - __isl_take isl_int_obj *i2); -__isl_give isl_int_obj *isl_int_obj_mul(__isl_take isl_int_obj *i1, - __isl_take isl_int_obj *i2); -void isl_int_obj_get_int(__isl_keep isl_int_obj *i, isl_int *v); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/options.h b/cloog-0.17.0/isl/include/isl/options.h deleted file mode 100644 index 1c14b19..0000000 --- a/cloog-0.17.0/isl/include/isl/options.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_OPTIONS_H -#define ISL_OPTIONS_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_options; - -ISL_ARG_DECL(isl_options, struct isl_options, isl_options_args) - -#define ISL_BOUND_BERNSTEIN 0 -#define ISL_BOUND_RANGE 1 -int isl_options_set_bound(isl_ctx *ctx, int val); -int isl_options_get_bound(isl_ctx *ctx); - -#define ISL_ON_ERROR_WARN 0 -#define ISL_ON_ERROR_CONTINUE 1 -#define ISL_ON_ERROR_ABORT 2 -int isl_options_set_on_error(isl_ctx *ctx, int val); -int isl_options_get_on_error(isl_ctx *ctx); - -int isl_options_set_gbr_only_first(isl_ctx *ctx, int val); -int isl_options_get_gbr_only_first(isl_ctx *ctx); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/point.h b/cloog-0.17.0/isl/include/isl/point.h deleted file mode 100644 index 5d845e9..0000000 --- a/cloog-0.17.0/isl/include/isl/point.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef ISL_POINT_H -#define ISL_POINT_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_point; -typedef struct isl_point isl_point; - -isl_ctx *isl_point_get_ctx(__isl_keep isl_point *pnt); -__isl_give isl_space *isl_point_get_space(__isl_keep isl_point *pnt); - -__isl_give isl_point *isl_point_zero(__isl_take isl_space *dim); -__isl_give isl_point *isl_point_copy(__isl_keep isl_point *pnt); -void isl_point_free(__isl_take isl_point *pnt); - -int isl_point_get_coordinate(__isl_keep isl_point *pnt, - enum isl_dim_type type, int pos, isl_int *v); -__isl_give isl_point *isl_point_set_coordinate(__isl_take isl_point *pnt, - enum isl_dim_type type, int pos, isl_int v); - -__isl_give isl_point *isl_point_add_ui(__isl_take isl_point *pnt, - enum isl_dim_type type, int pos, unsigned val); -__isl_give isl_point *isl_point_sub_ui(__isl_take isl_point *pnt, - enum isl_dim_type type, int pos, unsigned val); - -__isl_give isl_point *isl_point_void(__isl_take isl_space *dim); -int isl_point_is_void(__isl_keep isl_point *pnt); - -__isl_give isl_printer *isl_printer_print_point( - __isl_take isl_printer *printer, __isl_keep isl_point *pnt); - -#if defined(__cplusplus) -} -#endif - -#include - -#endif diff --git a/cloog-0.17.0/isl/include/isl/polynomial.h b/cloog-0.17.0/isl/include/isl/polynomial.h deleted file mode 100644 index de4d4a7..0000000 --- a/cloog-0.17.0/isl/include/isl/polynomial.h +++ /dev/null @@ -1,593 +0,0 @@ -#ifndef ISL_POLYNOMIAL_H -#define ISL_POLYNOMIAL_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -isl_ctx *isl_qpolynomial_get_ctx(__isl_keep isl_qpolynomial *qp); -__isl_give isl_space *isl_qpolynomial_get_domain_space( - __isl_keep isl_qpolynomial *qp); -__isl_give isl_space *isl_qpolynomial_get_space(__isl_keep isl_qpolynomial *qp); -unsigned isl_qpolynomial_dim(__isl_keep isl_qpolynomial *qp, - enum isl_dim_type type); -int isl_qpolynomial_involves_dims(__isl_keep isl_qpolynomial *qp, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_qpolynomial *isl_qpolynomial_set_dim_name( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type type, unsigned pos, const char *s); - -__isl_give isl_qpolynomial *isl_qpolynomial_zero_on_domain(__isl_take isl_space *dim); -__isl_give isl_qpolynomial *isl_qpolynomial_one_on_domain(__isl_take isl_space *dim); -__isl_give isl_qpolynomial *isl_qpolynomial_infty_on_domain(__isl_take isl_space *dim); -__isl_give isl_qpolynomial *isl_qpolynomial_neginfty_on_domain(__isl_take isl_space *dim); -__isl_give isl_qpolynomial *isl_qpolynomial_nan_on_domain(__isl_take isl_space *dim); -__isl_give isl_qpolynomial *isl_qpolynomial_rat_cst_on_domain(__isl_take isl_space *dim, - const isl_int n, const isl_int d); -__isl_give isl_qpolynomial *isl_qpolynomial_var_on_domain(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos); -__isl_give isl_qpolynomial *isl_qpolynomial_copy(__isl_keep isl_qpolynomial *qp); -void *isl_qpolynomial_free(__isl_take isl_qpolynomial *qp); - -int isl_qpolynomial_plain_is_equal(__isl_keep isl_qpolynomial *qp1, - __isl_keep isl_qpolynomial *qp2); -int isl_qpolynomial_is_zero(__isl_keep isl_qpolynomial *qp); -int isl_qpolynomial_is_nan(__isl_keep isl_qpolynomial *qp); -int isl_qpolynomial_is_infty(__isl_keep isl_qpolynomial *qp); -int isl_qpolynomial_is_neginfty(__isl_keep isl_qpolynomial *qp); -int isl_qpolynomial_sgn(__isl_keep isl_qpolynomial *qp); -int isl_qpolynomial_is_cst(__isl_keep isl_qpolynomial *qp, - isl_int *n, isl_int *d); -void isl_qpolynomial_get_den(__isl_keep isl_qpolynomial *qp, isl_int *d); - -__isl_give isl_qpolynomial *isl_qpolynomial_neg(__isl_take isl_qpolynomial *qp); -__isl_give isl_qpolynomial *isl_qpolynomial_add(__isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2); -__isl_give isl_qpolynomial *isl_qpolynomial_sub(__isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2); -__isl_give isl_qpolynomial *isl_qpolynomial_mul(__isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2); -__isl_give isl_qpolynomial *isl_qpolynomial_pow(__isl_take isl_qpolynomial *qp, - unsigned power); -__isl_give isl_qpolynomial *isl_qpolynomial_add_isl_int( - __isl_take isl_qpolynomial *qp, isl_int v); -__isl_give isl_qpolynomial *isl_qpolynomial_mul_isl_int( - __isl_take isl_qpolynomial *qp, isl_int v); -__isl_give isl_qpolynomial *isl_qpolynomial_scale( - __isl_take isl_qpolynomial *qp, isl_int v); - -__isl_give isl_qpolynomial *isl_qpolynomial_insert_dims( - __isl_take isl_qpolynomial *qp, enum isl_dim_type type, - unsigned first, unsigned n); -__isl_give isl_qpolynomial *isl_qpolynomial_add_dims( - __isl_take isl_qpolynomial *qp, enum isl_dim_type type, unsigned n); -__isl_give isl_qpolynomial *isl_qpolynomial_move_dims( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); -__isl_give isl_qpolynomial *isl_qpolynomial_project_domain_on_params( - __isl_take isl_qpolynomial *qp); -__isl_give isl_qpolynomial *isl_qpolynomial_drop_dims( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_qpolynomial *isl_qpolynomial_substitute( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type type, unsigned first, unsigned n, - __isl_keep isl_qpolynomial **subs); - -int isl_qpolynomial_as_polynomial_on_domain(__isl_keep isl_qpolynomial *qp, - __isl_keep isl_basic_set *bset, - int (*fn)(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, void *user), void *user); - -__isl_give isl_qpolynomial *isl_qpolynomial_homogenize( - __isl_take isl_qpolynomial *poly); - -__isl_give isl_qpolynomial *isl_qpolynomial_align_params( - __isl_take isl_qpolynomial *qp, __isl_take isl_space *model); - -isl_ctx *isl_term_get_ctx(__isl_keep isl_term *term); - -__isl_give isl_term *isl_term_copy(__isl_keep isl_term *term); -void isl_term_free(__isl_take isl_term *term); - -unsigned isl_term_dim(__isl_keep isl_term *term, enum isl_dim_type type); -void isl_term_get_num(__isl_keep isl_term *term, isl_int *n); -void isl_term_get_den(__isl_keep isl_term *term, isl_int *d); -int isl_term_get_exp(__isl_keep isl_term *term, - enum isl_dim_type type, unsigned pos); -__isl_give isl_aff *isl_term_get_div(__isl_keep isl_term *term, unsigned pos); - -int isl_qpolynomial_foreach_term(__isl_keep isl_qpolynomial *qp, - int (*fn)(__isl_take isl_term *term, void *user), void *user); - -__isl_give isl_qpolynomial *isl_qpolynomial_eval( - __isl_take isl_qpolynomial *qp, __isl_take isl_point *pnt); - -__isl_give isl_qpolynomial *isl_qpolynomial_gist_params( - __isl_take isl_qpolynomial *qp, __isl_take isl_set *context); -__isl_give isl_qpolynomial *isl_qpolynomial_gist( - __isl_take isl_qpolynomial *qp, __isl_take isl_set *context); - -__isl_give isl_qpolynomial *isl_qpolynomial_from_constraint( - __isl_take isl_constraint *c, enum isl_dim_type type, unsigned pos); -__isl_give isl_qpolynomial *isl_qpolynomial_from_term(__isl_take isl_term *term); -__isl_give isl_qpolynomial *isl_qpolynomial_from_aff(__isl_take isl_aff *aff); -__isl_give isl_basic_map *isl_basic_map_from_qpolynomial( - __isl_take isl_qpolynomial *qp); - -__isl_give isl_printer *isl_printer_print_qpolynomial( - __isl_take isl_printer *p, __isl_keep isl_qpolynomial *qp); -void isl_qpolynomial_print(__isl_keep isl_qpolynomial *qp, FILE *out, - unsigned output_format); -void isl_qpolynomial_dump(__isl_keep isl_qpolynomial *qp); - -isl_ctx *isl_pw_qpolynomial_get_ctx(__isl_keep isl_pw_qpolynomial *pwqp); - -int isl_pw_qpolynomial_plain_is_equal(__isl_keep isl_pw_qpolynomial *pwqp1, - __isl_keep isl_pw_qpolynomial *pwqp2); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_zero(__isl_take isl_space *dim); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_alloc(__isl_take isl_set *set, - __isl_take isl_qpolynomial *qp); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_from_qpolynomial( - __isl_take isl_qpolynomial *qp); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_copy( - __isl_keep isl_pw_qpolynomial *pwqp); -void *isl_pw_qpolynomial_free(__isl_take isl_pw_qpolynomial *pwqp); - -int isl_pw_qpolynomial_is_zero(__isl_keep isl_pw_qpolynomial *pwqp); - -__isl_give isl_space *isl_pw_qpolynomial_get_domain_space( - __isl_keep isl_pw_qpolynomial *pwqp); -__isl_give isl_space *isl_pw_qpolynomial_get_space( - __isl_keep isl_pw_qpolynomial *pwqp); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_reset_domain_space( - __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_space *dim); -unsigned isl_pw_qpolynomial_dim(__isl_keep isl_pw_qpolynomial *pwqp, - enum isl_dim_type type); -int isl_pw_qpolynomial_involves_dims(__isl_keep isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned first, unsigned n); -int isl_pw_qpolynomial_has_equal_space(__isl_keep isl_pw_qpolynomial *pwqp1, - __isl_keep isl_pw_qpolynomial *pwqp2); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_set_dim_name( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned pos, const char *s); - -__isl_give isl_set *isl_pw_qpolynomial_domain(__isl_take isl_pw_qpolynomial *pwqp); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_intersect_domain( - __isl_take isl_pw_qpolynomial *pwpq, __isl_take isl_set *set); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_intersect_params( - __isl_take isl_pw_qpolynomial *pwpq, __isl_take isl_set *set); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_project_domain_on_params( - __isl_take isl_pw_qpolynomial *pwqp); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_drop_dims( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_split_dims( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_sub( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add_disjoint( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_neg( - __isl_take isl_pw_qpolynomial *pwqp); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_mul( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_mul_isl_int( - __isl_take isl_pw_qpolynomial *pwqp, isl_int v); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_pow( - __isl_take isl_pw_qpolynomial *pwqp, unsigned exponent); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_insert_dims( - __isl_take isl_pw_qpolynomial *pwqp, enum isl_dim_type type, - unsigned first, unsigned n); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add_dims( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned n); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_move_dims( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_fix_dim( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned n, isl_int v); - -__isl_give isl_qpolynomial *isl_pw_qpolynomial_eval( - __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_point *pnt); - -__isl_give isl_qpolynomial *isl_pw_qpolynomial_max( - __isl_take isl_pw_qpolynomial *pwqp); -__isl_give isl_qpolynomial *isl_pw_qpolynomial_min( - __isl_take isl_pw_qpolynomial *pwqp); - -int isl_pw_qpolynomial_foreach_piece(__isl_keep isl_pw_qpolynomial *pwqp, - int (*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial *qp, - void *user), void *user); -int isl_pw_qpolynomial_foreach_lifted_piece(__isl_keep isl_pw_qpolynomial *pwqp, - int (*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial *qp, - void *user), void *user); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_from_pw_aff( - __isl_take isl_pw_aff *pwaff); - -__isl_constructor -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_read_from_str(isl_ctx *ctx, - const char *str); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_read_from_file(isl_ctx *ctx, - FILE *input); -__isl_give isl_printer *isl_printer_print_pw_qpolynomial( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial *pwqp); -void isl_pw_qpolynomial_print(__isl_keep isl_pw_qpolynomial *pwqp, FILE *out, - unsigned output_format); -void isl_pw_qpolynomial_dump(__isl_keep isl_pw_qpolynomial *pwqp); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_coalesce( - __isl_take isl_pw_qpolynomial *pwqp); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_gist( - __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_set *context); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_gist_params( - __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_set *context); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_split_periods( - __isl_take isl_pw_qpolynomial *pwqp, int max_periods); - -__isl_give isl_pw_qpolynomial *isl_basic_set_multiplicative_call( - __isl_take isl_basic_set *bset, - __isl_give isl_pw_qpolynomial *(*fn)(__isl_take isl_basic_set *bset)); - -isl_ctx *isl_qpolynomial_fold_get_ctx(__isl_keep isl_qpolynomial_fold *fold); -enum isl_fold isl_qpolynomial_fold_get_type(__isl_keep isl_qpolynomial_fold *fold); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_empty(enum isl_fold type, - __isl_take isl_space *dim); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_alloc( - enum isl_fold type, __isl_take isl_qpolynomial *qp); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_copy( - __isl_keep isl_qpolynomial_fold *fold); -void isl_qpolynomial_fold_free(__isl_take isl_qpolynomial_fold *fold); - -int isl_qpolynomial_fold_is_empty(__isl_keep isl_qpolynomial_fold *fold); -int isl_qpolynomial_fold_plain_is_equal(__isl_keep isl_qpolynomial_fold *fold1, - __isl_keep isl_qpolynomial_fold *fold2); - -__isl_give isl_space *isl_qpolynomial_fold_get_space( - __isl_keep isl_qpolynomial_fold *fold); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_fold( - __isl_take isl_qpolynomial_fold *fold1, - __isl_take isl_qpolynomial_fold *fold2); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_mul_isl_int( - __isl_take isl_qpolynomial_fold *fold, isl_int v); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_scale( - __isl_take isl_qpolynomial_fold *fold, isl_int v); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_move_dims( - __isl_take isl_qpolynomial_fold *fold, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_substitute( - __isl_take isl_qpolynomial_fold *fold, - enum isl_dim_type type, unsigned first, unsigned n, - __isl_keep isl_qpolynomial **subs); - -__isl_give isl_qpolynomial *isl_qpolynomial_fold_eval( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_point *pnt); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_gist_params( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *context); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_gist( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *context); - -int isl_qpolynomial_fold_foreach_qpolynomial( - __isl_keep isl_qpolynomial_fold *fold, - int (*fn)(__isl_take isl_qpolynomial *qp, void *user), void *user); - -__isl_give isl_printer *isl_printer_print_qpolynomial_fold( - __isl_take isl_printer *p, __isl_keep isl_qpolynomial_fold *fold); -void isl_qpolynomial_fold_print(__isl_keep isl_qpolynomial_fold *fold, FILE *out, - unsigned output_format); -void isl_qpolynomial_fold_dump(__isl_keep isl_qpolynomial_fold *fold); - -isl_ctx *isl_pw_qpolynomial_fold_get_ctx(__isl_keep isl_pw_qpolynomial_fold *pwf); - -int isl_pw_qpolynomial_fold_plain_is_equal( - __isl_keep isl_pw_qpolynomial_fold *pwf1, - __isl_keep isl_pw_qpolynomial_fold *pwf2); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_from_pw_qpolynomial( - enum isl_fold type, __isl_take isl_pw_qpolynomial *pwqp); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_alloc( - enum isl_fold type, - __isl_take isl_set *set, __isl_take isl_qpolynomial_fold *fold); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_copy( - __isl_keep isl_pw_qpolynomial_fold *pwf); -void *isl_pw_qpolynomial_fold_free(__isl_take isl_pw_qpolynomial_fold *pwf); - -int isl_pw_qpolynomial_fold_is_zero(__isl_keep isl_pw_qpolynomial_fold *pwf); - -__isl_give isl_space *isl_pw_qpolynomial_fold_get_domain_space( - __isl_keep isl_pw_qpolynomial_fold *pwf); -__isl_give isl_space *isl_pw_qpolynomial_fold_get_space( - __isl_keep isl_pw_qpolynomial_fold *pwf); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_reset_space( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_space *dim); -unsigned isl_pw_qpolynomial_fold_dim(__isl_keep isl_pw_qpolynomial_fold *pwf, - enum isl_dim_type type); -int isl_pw_qpolynomial_fold_has_equal_space( - __isl_keep isl_pw_qpolynomial_fold *pwf1, - __isl_keep isl_pw_qpolynomial_fold *pwf2); - -size_t isl_pw_qpolynomial_fold_size(__isl_keep isl_pw_qpolynomial_fold *pwf); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_zero( - __isl_take isl_space *dim, enum isl_fold type); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_set_dim_name( - __isl_take isl_pw_qpolynomial_fold *pwf, - enum isl_dim_type type, unsigned pos, const char *s); - -__isl_give isl_set *isl_pw_qpolynomial_fold_domain( - __isl_take isl_pw_qpolynomial_fold *pwf); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_intersect_domain( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_set *set); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_intersect_params( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_set *set); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_add( - __isl_take isl_pw_qpolynomial_fold *pwf1, - __isl_take isl_pw_qpolynomial_fold *pwf2); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_fold( - __isl_take isl_pw_qpolynomial_fold *pwf1, - __isl_take isl_pw_qpolynomial_fold *pwf2); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_add_disjoint( - __isl_take isl_pw_qpolynomial_fold *pwf1, - __isl_take isl_pw_qpolynomial_fold *pwf2); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_mul_isl_int( - __isl_take isl_pw_qpolynomial_fold *pwf, isl_int v); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_project_domain_on_params( - __isl_take isl_pw_qpolynomial_fold *pwf); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_drop_dims( - __isl_take isl_pw_qpolynomial_fold *pwf, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_move_dims( - __isl_take isl_pw_qpolynomial_fold *pwf, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_fix_dim( - __isl_take isl_pw_qpolynomial_fold *pwf, - enum isl_dim_type type, unsigned n, isl_int v); - -__isl_give isl_qpolynomial *isl_pw_qpolynomial_fold_eval( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_point *pnt); - -int isl_pw_qpolynomial_fold_foreach_piece( - __isl_keep isl_pw_qpolynomial_fold *pwf, - int (*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial_fold *fold, - void *user), void *user); -int isl_pw_qpolynomial_fold_foreach_lifted_piece( - __isl_keep isl_pw_qpolynomial_fold *pwf, - int (*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial_fold *fold, - void *user), void *user); - -__isl_give isl_printer *isl_printer_print_pw_qpolynomial_fold( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial_fold *pwf); -void isl_pw_qpolynomial_fold_print(__isl_keep isl_pw_qpolynomial_fold *pwf, - FILE *out, unsigned output_format); -void isl_pw_qpolynomial_fold_dump(__isl_keep isl_pw_qpolynomial_fold *pwf); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_coalesce( - __isl_take isl_pw_qpolynomial_fold *pwf); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_gist( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_set *context); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_gist_params( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_set *context); - -__isl_give isl_qpolynomial *isl_pw_qpolynomial_fold_max( - __isl_take isl_pw_qpolynomial_fold *pwf); -__isl_give isl_qpolynomial *isl_pw_qpolynomial_fold_min( - __isl_take isl_pw_qpolynomial_fold *pwf); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_bound( - __isl_take isl_pw_qpolynomial *pwqp, enum isl_fold type, int *tight); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_bound( - __isl_take isl_pw_qpolynomial_fold *pwf, int *tight); -__isl_give isl_pw_qpolynomial_fold *isl_set_apply_pw_qpolynomial_fold( - __isl_take isl_set *set, __isl_take isl_pw_qpolynomial_fold *pwf, - int *tight); -__isl_give isl_pw_qpolynomial_fold *isl_map_apply_pw_qpolynomial_fold( - __isl_take isl_map *map, __isl_take isl_pw_qpolynomial_fold *pwf, - int *tight); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_to_polynomial( - __isl_take isl_pw_qpolynomial *pwqp, int sign); - -isl_ctx *isl_union_pw_qpolynomial_get_ctx( - __isl_keep isl_union_pw_qpolynomial *upwqp); - -int isl_union_pw_qpolynomial_plain_is_equal( - __isl_keep isl_union_pw_qpolynomial *upwqp1, - __isl_keep isl_union_pw_qpolynomial *upwqp2); - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_from_pw_qpolynomial(__isl_take isl_pw_qpolynomial *pwqp); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_zero( - __isl_take isl_space *dim); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_add_pw_qpolynomial( - __isl_take isl_union_pw_qpolynomial *upwqp, - __isl_take isl_pw_qpolynomial *pwqp); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_copy( - __isl_keep isl_union_pw_qpolynomial *upwqp); -void isl_union_pw_qpolynomial_free(__isl_take isl_union_pw_qpolynomial *upwqp); - -__isl_constructor -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_read_from_str( - isl_ctx *ctx, const char *str); - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_add( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_sub( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_mul( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_mul_isl_int( - __isl_take isl_union_pw_qpolynomial *upwqp, isl_int v); - -__isl_give isl_union_set *isl_union_pw_qpolynomial_domain( - __isl_take isl_union_pw_qpolynomial *upwqp); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_intersect_domain( - __isl_take isl_union_pw_qpolynomial *upwpq, - __isl_take isl_union_set *uset); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_intersect_params( - __isl_take isl_union_pw_qpolynomial *upwpq, - __isl_take isl_set *set); - -__isl_give isl_space *isl_union_pw_qpolynomial_get_space( - __isl_keep isl_union_pw_qpolynomial *upwqp); - -__isl_give isl_qpolynomial *isl_union_pw_qpolynomial_eval( - __isl_take isl_union_pw_qpolynomial *upwqp, __isl_take isl_point *pnt); - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_coalesce( - __isl_take isl_union_pw_qpolynomial *upwqp); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_gist( - __isl_take isl_union_pw_qpolynomial *upwqp, - __isl_take isl_union_set *context); -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_gist_params( - __isl_take isl_union_pw_qpolynomial *upwqp, - __isl_take isl_set *context); - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_align_params( - __isl_take isl_union_pw_qpolynomial *upwqp, - __isl_take isl_space *model); - -int isl_union_pw_qpolynomial_foreach_pw_qpolynomial( - __isl_keep isl_union_pw_qpolynomial *upwqp, - int (*fn)(__isl_take isl_pw_qpolynomial *pwqp, void *user), void *user); -__isl_give isl_pw_qpolynomial *isl_union_pw_qpolynomial_extract_pw_qpolynomial( - __isl_keep isl_union_pw_qpolynomial *upwqp, __isl_take isl_space *dim); - -__isl_give isl_printer *isl_printer_print_union_pw_qpolynomial( - __isl_take isl_printer *p, __isl_keep isl_union_pw_qpolynomial *upwqp); - -isl_ctx *isl_union_pw_qpolynomial_fold_get_ctx( - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - -int isl_union_pw_qpolynomial_fold_plain_is_equal( - __isl_keep isl_union_pw_qpolynomial_fold *upwf1, - __isl_keep isl_union_pw_qpolynomial_fold *upwf2); - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_from_pw_qpolynomial_fold(__isl_take isl_pw_qpolynomial_fold *pwf); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_zero( - __isl_take isl_space *dim, enum isl_fold type); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold( - __isl_take isl_union_pw_qpolynomial_fold *upwqp, - __isl_take isl_pw_qpolynomial_fold *pwqp); -void isl_union_pw_qpolynomial_fold_free( - __isl_take isl_union_pw_qpolynomial_fold *upwf); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_copy( - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_fold( - __isl_take isl_union_pw_qpolynomial_fold *upwf1, - __isl_take isl_union_pw_qpolynomial_fold *upwf2); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_add_union_pw_qpolynomial( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_union_pw_qpolynomial *upwqp); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_mul_isl_int( - __isl_take isl_union_pw_qpolynomial_fold *upwf, isl_int v); - -__isl_give isl_union_set *isl_union_pw_qpolynomial_fold_domain( - __isl_take isl_union_pw_qpolynomial_fold *upwf); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_intersect_domain( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_union_set *uset); -__isl_give isl_union_pw_qpolynomial_fold * -isl_union_pw_qpolynomial_fold_intersect_params( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_set *set); - -enum isl_fold isl_union_pw_qpolynomial_fold_get_type( - __isl_keep isl_union_pw_qpolynomial_fold *upwf); -__isl_give isl_space *isl_union_pw_qpolynomial_fold_get_space( - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - -__isl_give isl_qpolynomial *isl_union_pw_qpolynomial_fold_eval( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_point *pnt); - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_coalesce( - __isl_take isl_union_pw_qpolynomial_fold *upwf); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_gist( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_union_set *context); -__isl_give isl_union_pw_qpolynomial_fold * -isl_union_pw_qpolynomial_fold_gist_params( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_set *context); - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_align_params( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_space *model); - -int isl_union_pw_qpolynomial_fold_foreach_pw_qpolynomial_fold( - __isl_keep isl_union_pw_qpolynomial_fold *upwf, - int (*fn)(__isl_take isl_pw_qpolynomial_fold *pwf, - void *user), void *user); -__isl_give isl_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_extract_pw_qpolynomial_fold( - __isl_keep isl_union_pw_qpolynomial_fold *upwf, __isl_take isl_space *dim); - -__isl_give isl_printer *isl_printer_print_union_pw_qpolynomial_fold( - __isl_take isl_printer *p, - __isl_keep isl_union_pw_qpolynomial_fold *upwf); - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_bound( - __isl_take isl_union_pw_qpolynomial *upwqp, - enum isl_fold type, int *tight); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_set_apply_union_pw_qpolynomial_fold( - __isl_take isl_union_set *uset, - __isl_take isl_union_pw_qpolynomial_fold *upwf, int *tight); -__isl_give isl_union_pw_qpolynomial_fold *isl_union_map_apply_union_pw_qpolynomial_fold( - __isl_take isl_union_map *umap, - __isl_take isl_union_pw_qpolynomial_fold *upwf, int *tight); - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_to_polynomial( - __isl_take isl_union_pw_qpolynomial *upwqp, int sign); - -#if defined(__cplusplus) -} -#endif - -#include - -#endif diff --git a/cloog-0.17.0/isl/include/isl/polynomial_type.h b/cloog-0.17.0/isl/include/isl/polynomial_type.h deleted file mode 100644 index bb022bf..0000000 --- a/cloog-0.17.0/isl/include/isl/polynomial_type.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef ISL_POLYNOMIAL_TYPE_H -#define ISL_POLYNOMIAL_TYPE_H - -struct isl_qpolynomial; -typedef struct isl_qpolynomial isl_qpolynomial; - -struct isl_term; -typedef struct isl_term isl_term; - -__isl_export -struct isl_pw_qpolynomial; -typedef struct isl_pw_qpolynomial isl_pw_qpolynomial; - -enum isl_fold { - isl_fold_min, - isl_fold_max, - isl_fold_list -}; - -struct isl_qpolynomial_fold; -typedef struct isl_qpolynomial_fold isl_qpolynomial_fold; - -struct isl_pw_qpolynomial_fold; -typedef struct isl_pw_qpolynomial_fold isl_pw_qpolynomial_fold; - -__isl_export -struct isl_union_pw_qpolynomial; -typedef struct isl_union_pw_qpolynomial isl_union_pw_qpolynomial; - -struct isl_union_pw_qpolynomial_fold; -typedef struct isl_union_pw_qpolynomial_fold isl_union_pw_qpolynomial_fold; - -#endif diff --git a/cloog-0.17.0/isl/include/isl/printer.h b/cloog-0.17.0/isl/include/isl/printer.h deleted file mode 100644 index da2f043..0000000 --- a/cloog-0.17.0/isl/include/isl/printer.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef ISL_PRINTER_H -#define ISL_PRINTER_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_printer; -typedef struct isl_printer isl_printer; - -__isl_give isl_printer *isl_printer_to_file(isl_ctx *ctx, FILE *file); -__isl_give isl_printer *isl_printer_to_str(isl_ctx *ctx); -void isl_printer_free(__isl_take isl_printer *printer); - -isl_ctx *isl_printer_get_ctx(__isl_keep isl_printer *printer); - -__isl_give char *isl_printer_get_str(__isl_keep isl_printer *printer); - -__isl_give isl_printer *isl_printer_set_indent(__isl_take isl_printer *p, - int indent); -__isl_give isl_printer *isl_printer_indent(__isl_take isl_printer *p, - int indent); - -#define ISL_FORMAT_ISL 0 -#define ISL_FORMAT_POLYLIB 1 -#define ISL_FORMAT_POLYLIB_CONSTRAINTS 2 -#define ISL_FORMAT_OMEGA 3 -#define ISL_FORMAT_C 4 -#define ISL_FORMAT_LATEX 5 -#define ISL_FORMAT_EXT_POLYLIB 6 -__isl_give isl_printer *isl_printer_set_output_format(__isl_take isl_printer *p, - int output_format); - -__isl_give isl_printer *isl_printer_set_prefix(__isl_take isl_printer *p, - const char *prefix); -__isl_give isl_printer *isl_printer_set_suffix(__isl_take isl_printer *p, - const char *suffix); -__isl_give isl_printer *isl_printer_set_isl_int_width(__isl_take isl_printer *p, - int width); - -__isl_give isl_printer *isl_printer_start_line(__isl_take isl_printer *p); -__isl_give isl_printer *isl_printer_end_line(__isl_take isl_printer *p); -__isl_give isl_printer *isl_printer_print_int(__isl_take isl_printer *p, int i); -__isl_give isl_printer *isl_printer_print_isl_int(__isl_take isl_printer *p, - isl_int i); -__isl_give isl_printer *isl_printer_print_str(__isl_take isl_printer *p, - const char *s); - -__isl_give isl_printer *isl_printer_flush(__isl_take isl_printer *p); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/schedule.h b/cloog-0.17.0/isl/include/isl/schedule.h deleted file mode 100644 index 7978979..0000000 --- a/cloog-0.17.0/isl/include/isl/schedule.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef ISL_SCHEDULE_H -#define ISL_SCHEDULE_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_schedule; -typedef struct isl_schedule isl_schedule; - -int isl_options_set_schedule_max_constant_term(isl_ctx *ctx, int val); -int isl_options_get_schedule_max_constant_term(isl_ctx *ctx); - -int isl_options_set_schedule_maximize_band_depth(isl_ctx *ctx, int val); -int isl_options_get_schedule_maximize_band_depth(isl_ctx *ctx); - -int isl_options_set_schedule_outer_zero_distance(isl_ctx *ctx, int val); -int isl_options_get_schedule_outer_zero_distance(isl_ctx *ctx); - -__isl_give isl_schedule *isl_union_set_compute_schedule( - __isl_take isl_union_set *domain, - __isl_take isl_union_map *validity, - __isl_take isl_union_map *proximity); -void *isl_schedule_free(__isl_take isl_schedule *sched); -__isl_give isl_union_map *isl_schedule_get_map(__isl_keep isl_schedule *sched); - -isl_ctx *isl_schedule_get_ctx(__isl_keep isl_schedule *sched); - -__isl_give isl_band_list *isl_schedule_get_band_forest( - __isl_keep isl_schedule *schedule); - -__isl_give isl_printer *isl_printer_print_schedule(__isl_take isl_printer *p, - __isl_keep isl_schedule *schedule); -void isl_schedule_dump(__isl_keep isl_schedule *schedule); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/seq.h b/cloog-0.17.0/isl/include/isl/seq.h deleted file mode 100644 index eda8818..0000000 --- a/cloog-0.17.0/isl/include/isl/seq.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_SEQ_H -#define ISL_SEQ_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Some common operations on sequences of isl_int's */ - -void isl_seq_clr(isl_int *p, unsigned len); -void isl_seq_set(isl_int *p, isl_int v, unsigned len); -void isl_seq_neg(isl_int *dat, isl_int *src, unsigned len); -void isl_seq_cpy(isl_int *dst, isl_int *src, unsigned len); -void isl_seq_addmul(isl_int *dst, isl_int f, isl_int *src, unsigned len); -void isl_seq_submul(isl_int *dst, isl_int f, isl_int *src, unsigned len); -void isl_seq_swp_or_cpy(isl_int *dst, isl_int *src, unsigned len); -void isl_seq_scale(isl_int *dst, isl_int *src, isl_int f, unsigned len); -void isl_seq_scale_down(isl_int *dst, isl_int *src, isl_int f, unsigned len); -void isl_seq_cdiv_q(isl_int *dst, isl_int *src, isl_int m, unsigned len); -void isl_seq_fdiv_q(isl_int *dst, isl_int *src, isl_int m, unsigned len); -void isl_seq_fdiv_r(isl_int *dst, isl_int *src, isl_int m, unsigned len); -void isl_seq_combine(isl_int *dst, isl_int m1, isl_int *src1, - isl_int m2, isl_int *src2, unsigned len); -void isl_seq_elim(isl_int *dst, isl_int *src, unsigned pos, unsigned len, - isl_int *m); -void isl_seq_gcd(isl_int *p, unsigned len, isl_int *gcd); -void isl_seq_lcm(isl_int *p, unsigned len, isl_int *lcm); -void isl_seq_normalize(struct isl_ctx *ctx, isl_int *p, unsigned len); -void isl_seq_inner_product(isl_int *p1, isl_int *p2, unsigned len, - isl_int *prod); -int isl_seq_first_non_zero(isl_int *p, unsigned len); -int isl_seq_last_non_zero(isl_int *p, unsigned len); -int isl_seq_abs_min_non_zero(isl_int *p, unsigned len); -int isl_seq_eq(isl_int *p1, isl_int *p2, unsigned len); -int isl_seq_cmp(isl_int *p1, isl_int *p2, unsigned len); -int isl_seq_is_neg(isl_int *p1, isl_int *p2, unsigned len); - -uint32_t isl_seq_get_hash(isl_int *p, unsigned len); -uint32_t isl_seq_get_hash_bits(isl_int *p, unsigned len, unsigned bits); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/set.h b/cloog-0.17.0/isl/include/isl/set.h deleted file mode 100644 index 2711427..0000000 --- a/cloog-0.17.0/isl/include/isl/set.h +++ /dev/null @@ -1,477 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_SET_H -#define ISL_SET_H - -#include -#include -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -unsigned isl_basic_set_n_dim(__isl_keep isl_basic_set *bset); -unsigned isl_basic_set_n_param(__isl_keep isl_basic_set *bset); -unsigned isl_basic_set_total_dim(const struct isl_basic_set *bset); -unsigned isl_basic_set_dim(__isl_keep isl_basic_set *bset, - enum isl_dim_type type); - -unsigned isl_set_n_dim(__isl_keep isl_set *set); -unsigned isl_set_n_param(__isl_keep isl_set *set); -unsigned isl_set_dim(__isl_keep isl_set *set, enum isl_dim_type type); - -isl_ctx *isl_basic_set_get_ctx(__isl_keep isl_basic_set *bset); -isl_ctx *isl_set_get_ctx(__isl_keep isl_set *set); -__isl_give isl_space *isl_basic_set_get_space(__isl_keep isl_basic_set *bset); -__isl_give isl_space *isl_set_get_space(__isl_keep isl_set *set); -__isl_give isl_set *isl_set_reset_space(__isl_take isl_set *set, - __isl_take isl_space *dim); - -__isl_give isl_aff *isl_basic_set_get_div(__isl_keep isl_basic_set *bset, - int pos); - -__isl_give isl_local_space *isl_basic_set_get_local_space( - __isl_keep isl_basic_set *bset); - -const char *isl_basic_set_get_tuple_name(__isl_keep isl_basic_set *bset); -const char *isl_set_get_tuple_name(__isl_keep isl_set *set); -__isl_give isl_basic_set *isl_basic_set_set_tuple_name( - __isl_take isl_basic_set *set, const char *s); -__isl_give isl_set *isl_set_set_tuple_name(__isl_take isl_set *set, - const char *s); -const char *isl_basic_set_get_dim_name(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned pos); -__isl_give isl_basic_set *isl_basic_set_set_dim_name( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, const char *s); -const char *isl_set_get_dim_name(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos); -__isl_give isl_set *isl_set_set_dim_name(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, const char *s); - -__isl_give isl_set *isl_set_set_dim_id(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id); -int isl_set_has_dim_id(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos); -__isl_give isl_id *isl_set_get_dim_id(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos); -__isl_give isl_set *isl_set_set_tuple_id(__isl_take isl_set *set, - __isl_take isl_id *id); -__isl_give isl_set *isl_set_reset_tuple_id(__isl_take isl_set *set); -int isl_set_has_tuple_id(__isl_keep isl_set *set); -__isl_give isl_id *isl_set_get_tuple_id(__isl_keep isl_set *set); - -int isl_set_find_dim_by_id(__isl_keep isl_set *set, enum isl_dim_type type, - __isl_keep isl_id *id); -int isl_set_find_dim_by_name(__isl_keep isl_set *set, enum isl_dim_type type, - const char *name); - -int isl_basic_set_is_rational(__isl_keep isl_basic_set *bset); - -struct isl_basic_set *isl_basic_set_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned dim, unsigned extra, - unsigned n_eq, unsigned n_ineq); -struct isl_basic_set *isl_basic_set_extend(struct isl_basic_set *base, - unsigned nparam, unsigned dim, unsigned extra, - unsigned n_eq, unsigned n_ineq); -struct isl_basic_set *isl_basic_set_extend_constraints( - struct isl_basic_set *base, unsigned n_eq, unsigned n_ineq); -struct isl_basic_set *isl_basic_set_finalize(struct isl_basic_set *bset); -void isl_basic_set_free(__isl_take isl_basic_set *bset); -__isl_give isl_basic_set *isl_basic_set_copy(__isl_keep isl_basic_set *bset); -struct isl_basic_set *isl_basic_set_dup(struct isl_basic_set *bset); -__isl_give isl_basic_set *isl_basic_set_empty(__isl_take isl_space *dim); -struct isl_basic_set *isl_basic_set_empty_like(struct isl_basic_set *bset); -__isl_give isl_basic_set *isl_basic_set_universe(__isl_take isl_space *dim); -__isl_give isl_basic_set *isl_basic_set_nat_universe(__isl_take isl_space *dim); -struct isl_basic_set *isl_basic_set_universe_like(struct isl_basic_set *bset); -__isl_give isl_basic_set *isl_basic_set_universe_like_set( - __isl_keep isl_set *model); -struct isl_basic_set *isl_basic_set_interval(struct isl_ctx *ctx, - isl_int min, isl_int max); -__isl_give isl_basic_set *isl_basic_set_positive_orthant( - __isl_take isl_space *space); -void isl_basic_set_print_internal(__isl_keep isl_basic_set *bset, - FILE *out, int indent); -__isl_export -__isl_give isl_basic_set *isl_basic_set_intersect( - __isl_take isl_basic_set *bset1, - __isl_take isl_basic_set *bset2); -__isl_export -__isl_give isl_basic_set *isl_basic_set_intersect_params( - __isl_take isl_basic_set *bset1, __isl_take isl_basic_set *bset2); -__isl_export -__isl_give isl_basic_set *isl_basic_set_apply( - __isl_take isl_basic_set *bset, - __isl_take isl_basic_map *bmap); -__isl_export -__isl_give isl_basic_set *isl_basic_set_affine_hull( - __isl_take isl_basic_set *bset); -__isl_give isl_basic_set *isl_basic_set_remove_dims( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n); -struct isl_basic_set *isl_basic_set_simplify(struct isl_basic_set *bset); -__isl_export -__isl_give isl_basic_set *isl_basic_set_detect_equalities( - __isl_take isl_basic_set *bset); -__isl_give isl_basic_set *isl_basic_set_remove_redundancies( - __isl_take isl_basic_set *bset); -__isl_give isl_set *isl_set_remove_redundancies(__isl_take isl_set *set); -__isl_give isl_basic_set *isl_basic_set_list_product( - __isl_take struct isl_basic_set_list *list); - -__isl_give isl_basic_set *isl_basic_set_read_from_file(isl_ctx *ctx, - FILE *input); -__isl_constructor -__isl_give isl_basic_set *isl_basic_set_read_from_str(isl_ctx *ctx, - const char *str); -__isl_give isl_set *isl_set_read_from_file(isl_ctx *ctx, FILE *input); -__isl_constructor -__isl_give isl_set *isl_set_read_from_str(isl_ctx *ctx, const char *str); -void isl_basic_set_dump(__isl_keep isl_basic_set *bset); -void isl_set_dump(__isl_keep isl_set *set); -__isl_give isl_printer *isl_printer_print_basic_set( - __isl_take isl_printer *printer, __isl_keep isl_basic_set *bset); -__isl_give isl_printer *isl_printer_print_set(__isl_take isl_printer *printer, - __isl_keep isl_set *map); -void isl_basic_set_print(__isl_keep isl_basic_set *bset, FILE *out, int indent, - const char *prefix, const char *suffix, unsigned output_format); -void isl_set_print(__isl_keep struct isl_set *set, FILE *out, int indent, - unsigned output_format); -__isl_give isl_basic_set *isl_basic_set_fix(__isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, isl_int value); -__isl_give isl_basic_set *isl_basic_set_fix_si(__isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, int value); -__isl_give isl_set *isl_set_fix_si(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, int value); -__isl_give isl_set *isl_set_lower_bound_si(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, int value); -__isl_give isl_set *isl_set_upper_bound_si(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, int value); - -__isl_give isl_set *isl_set_equate(__isl_take isl_set *set, - enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2); - -struct isl_basic_set *isl_basic_set_from_underlying_set( - struct isl_basic_set *bset, struct isl_basic_set *like); -struct isl_set *isl_set_from_underlying_set( - struct isl_set *set, struct isl_basic_set *like); -struct isl_set *isl_set_to_underlying_set(struct isl_set *set); - -__isl_export -int isl_basic_set_is_equal( - struct isl_basic_set *bset1, struct isl_basic_set *bset2); - -__isl_give isl_set *isl_basic_set_partial_lexmin( - __isl_take isl_basic_set *bset, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); -__isl_give isl_set *isl_basic_set_partial_lexmax( - __isl_take isl_basic_set *bset, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); -__isl_give isl_set *isl_set_partial_lexmin( - __isl_take isl_set *set, __isl_take isl_set *dom, - __isl_give isl_set **empty); -__isl_give isl_set *isl_set_partial_lexmax( - __isl_take isl_set *set, __isl_take isl_set *dom, - __isl_give isl_set **empty); -__isl_export -__isl_give isl_set *isl_basic_set_lexmin(__isl_take isl_basic_set *bset); -__isl_export -__isl_give isl_set *isl_basic_set_lexmax(__isl_take isl_basic_set *bset); -__isl_export -__isl_give isl_set *isl_set_lexmin(__isl_take isl_set *set); -__isl_export -__isl_give isl_set *isl_set_lexmax(__isl_take isl_set *set); -__isl_give isl_pw_multi_aff *isl_basic_set_partial_lexmin_pw_multi_aff( - __isl_take isl_basic_set *bset, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); -__isl_give isl_pw_multi_aff *isl_basic_set_partial_lexmax_pw_multi_aff( - __isl_take isl_basic_set *bset, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty); - -__isl_export -__isl_give isl_set *isl_basic_set_union( - __isl_take isl_basic_set *bset1, - __isl_take isl_basic_set *bset2); - -int isl_basic_set_compare_at(struct isl_basic_set *bset1, - struct isl_basic_set *bset2, int pos); -int isl_set_follows_at(__isl_keep isl_set *set1, - __isl_keep isl_set *set2, int pos); - -__isl_give isl_basic_set *isl_basic_set_params(__isl_take isl_basic_set *bset); -__isl_give isl_set *isl_set_params(__isl_take isl_set *set); -__isl_give isl_set *isl_set_from_params(__isl_take isl_set *set); - -int isl_basic_set_dims_get_sign(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, unsigned n, int *signs); - -int isl_basic_set_is_universe(__isl_keep isl_basic_set *bset); -int isl_basic_set_plain_is_empty(__isl_keep isl_basic_set *bset); -int isl_basic_set_fast_is_empty(__isl_keep isl_basic_set *bset); -__isl_export -int isl_basic_set_is_empty(__isl_keep isl_basic_set *bset); -int isl_basic_set_is_bounded(__isl_keep isl_basic_set *bset); - -struct isl_set *isl_set_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned dim, int n, unsigned flags); -struct isl_set *isl_set_extend(struct isl_set *base, - unsigned nparam, unsigned dim); -__isl_give isl_set *isl_set_empty(__isl_take isl_space *dim); -struct isl_set *isl_set_empty_like(struct isl_set *set); -__isl_give isl_set *isl_set_universe(__isl_take isl_space *dim); -__isl_give isl_set *isl_set_nat_universe(__isl_take isl_space *dim); -__isl_give isl_set *isl_set_universe_like(__isl_keep isl_set *model); -__isl_give isl_set *isl_set_add_basic_set(__isl_take isl_set *set, - __isl_take isl_basic_set *bset); -struct isl_set *isl_set_finalize(struct isl_set *set); -__isl_give isl_set *isl_set_copy(__isl_keep isl_set *set); -void isl_set_free(__isl_take isl_set *set); -struct isl_set *isl_set_dup(struct isl_set *set); -__isl_constructor -__isl_give isl_set *isl_set_from_basic_set(__isl_take isl_basic_set *bset); -__isl_give isl_basic_set *isl_set_sample(__isl_take isl_set *set); -__isl_give isl_point *isl_basic_set_sample_point(__isl_take isl_basic_set *bset); -__isl_give isl_point *isl_set_sample_point(__isl_take isl_set *set); -__isl_export -__isl_give isl_set *isl_set_detect_equalities(__isl_take isl_set *set); -__isl_export -__isl_give isl_basic_set *isl_set_affine_hull(__isl_take isl_set *set); -__isl_give isl_basic_set *isl_set_convex_hull(__isl_take isl_set *set); -__isl_export -__isl_give isl_basic_set *isl_set_polyhedral_hull(__isl_take isl_set *set); -__isl_give isl_basic_set *isl_set_simple_hull(__isl_take isl_set *set); -struct isl_basic_set *isl_set_bounded_simple_hull(struct isl_set *set); -__isl_give isl_set *isl_set_recession_cone(__isl_take isl_set *set); - -struct isl_set *isl_set_union_disjoint( - struct isl_set *set1, struct isl_set *set2); -__isl_export -__isl_give isl_set *isl_set_union( - __isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_set *isl_set_product(__isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_basic_set *isl_basic_set_flat_product( - __isl_take isl_basic_set *bset1, __isl_take isl_basic_set *bset2); -__isl_give isl_set *isl_set_flat_product(__isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_export -__isl_give isl_set *isl_set_intersect( - __isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_export -__isl_give isl_set *isl_set_intersect_params(__isl_take isl_set *set, - __isl_take isl_set *params); -__isl_export -__isl_give isl_set *isl_set_subtract( - __isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_export -__isl_give isl_set *isl_set_complement(__isl_take isl_set *set); -__isl_export -__isl_give isl_set *isl_set_apply( - __isl_take isl_set *set, - __isl_take isl_map *map); -__isl_give isl_set *isl_set_fix(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, isl_int value); -struct isl_set *isl_set_fix_dim_si(struct isl_set *set, - unsigned dim, int value); -struct isl_set *isl_set_lower_bound_dim(struct isl_set *set, - unsigned dim, isl_int value); -__isl_give isl_set *isl_set_insert_dims(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, unsigned n); -__isl_give isl_basic_set *isl_basic_set_add(__isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned n); -__isl_give isl_set *isl_set_add_dims(__isl_take isl_set *set, - enum isl_dim_type type, unsigned n); -__isl_give isl_basic_set *isl_basic_set_move_dims(__isl_take isl_basic_set *bset, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); -__isl_give isl_set *isl_set_move_dims(__isl_take isl_set *set, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); -__isl_give isl_basic_set *isl_basic_set_project_out( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_set *isl_set_project_out(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_basic_set *isl_basic_set_remove_divs( - __isl_take isl_basic_set *bset); -__isl_give isl_set *isl_set_eliminate(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); -struct isl_set *isl_set_eliminate_dims(struct isl_set *set, - unsigned first, unsigned n); -__isl_give isl_set *isl_set_remove_dims(__isl_take isl_set *bset, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_set *isl_set_remove_divs_involving_dims(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_set *isl_set_remove_unknown_divs(__isl_take isl_set *set); -__isl_give isl_set *isl_set_remove_divs(__isl_take isl_set *set); -__isl_give isl_set *isl_set_split_dims(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); - -int isl_basic_set_involves_dims(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n); -int isl_set_involves_dims(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); - -void isl_set_print_internal(__isl_keep isl_set *set, FILE *out, int indent); -int isl_set_plain_is_empty(__isl_keep isl_set *set); -int isl_set_fast_is_empty(__isl_keep isl_set *set); -int isl_set_plain_is_universe(__isl_keep isl_set *set); -int isl_set_fast_is_universe(__isl_keep isl_set *set); -int isl_set_is_params(__isl_keep isl_set *set); -__isl_export -int isl_set_is_empty(__isl_keep isl_set *set); -int isl_set_is_bounded(__isl_keep isl_set *set); -__isl_export -int isl_set_is_subset(__isl_keep isl_set *set1, __isl_keep isl_set *set2); -__isl_export -int isl_set_is_strict_subset(__isl_keep isl_set *set1, __isl_keep isl_set *set2); -__isl_export -int isl_set_is_equal(__isl_keep isl_set *set1, __isl_keep isl_set *set2); -int isl_set_is_singleton(__isl_keep isl_set *set); -int isl_set_is_box(__isl_keep isl_set *set); -int isl_set_has_equal_space(__isl_keep isl_set *set1, __isl_keep isl_set *set2); - -__isl_give isl_set *isl_set_sum(__isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_basic_set *isl_basic_set_neg(__isl_take isl_basic_set *bset); -__isl_give isl_set *isl_set_neg(__isl_take isl_set *set); - -__isl_give isl_set *isl_set_make_disjoint(__isl_take isl_set *set); -struct isl_set *isl_basic_set_compute_divs(struct isl_basic_set *bset); -__isl_give isl_set *isl_set_compute_divs(__isl_take isl_set *set); -__isl_give isl_set *isl_set_align_divs(__isl_take isl_set *set); - -struct isl_basic_set *isl_set_copy_basic_set(struct isl_set *set); -struct isl_set *isl_set_drop_basic_set(struct isl_set *set, - struct isl_basic_set *bset); - -int isl_basic_set_plain_dim_is_fixed(__isl_keep isl_basic_set *bset, - unsigned dim, isl_int *val); - -int isl_set_plain_is_fixed(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos, isl_int *val); -int isl_set_plain_dim_is_fixed(__isl_keep isl_set *set, - unsigned dim, isl_int *val); -int isl_set_fast_dim_is_fixed(__isl_keep isl_set *set, - unsigned dim, isl_int *val); -int isl_set_plain_dim_has_fixed_lower_bound(__isl_keep isl_set *set, - unsigned dim, isl_int *val); -int isl_set_dim_is_bounded(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos); -int isl_set_dim_has_lower_bound(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos); -int isl_set_dim_has_upper_bound(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos); - -__isl_export -__isl_give isl_basic_set *isl_basic_set_gist(__isl_take isl_basic_set *bset, - __isl_take isl_basic_set *context); -__isl_give isl_set *isl_set_gist_basic_set(__isl_take isl_set *set, - __isl_take isl_basic_set *context); -__isl_export -__isl_give isl_set *isl_set_gist(__isl_take isl_set *set, - __isl_take isl_set *context); -__isl_give isl_set *isl_set_gist_params(__isl_take isl_set *set, - __isl_take isl_set *context); -int isl_basic_set_dim_residue_class(struct isl_basic_set *bset, - int pos, isl_int *modulo, isl_int *residue); -int isl_set_dim_residue_class(struct isl_set *set, - int pos, isl_int *modulo, isl_int *residue); - -__isl_export -__isl_give isl_set *isl_set_coalesce(__isl_take isl_set *set); - -int isl_set_plain_is_equal(__isl_keep isl_set *set1, __isl_keep isl_set *set2); -int isl_set_fast_is_equal(__isl_keep isl_set *set1, __isl_keep isl_set *set2); -int isl_set_plain_is_disjoint(__isl_keep isl_set *set1, - __isl_keep isl_set *set2); -int isl_set_fast_is_disjoint(__isl_keep isl_set *set1, - __isl_keep isl_set *set2); - -uint32_t isl_set_get_hash(struct isl_set *set); - -int isl_set_dim_is_unique(struct isl_set *set, unsigned dim); - -int isl_set_n_basic_set(__isl_keep isl_set *set); -__isl_export -int isl_set_foreach_basic_set(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_basic_set *bset, void *user), void *user); - -int isl_set_foreach_point(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_point *pnt, void *user), void *user); -int isl_set_count(__isl_keep isl_set *set, isl_int *count); -int isl_basic_set_count_upto(__isl_keep isl_basic_set *bset, - isl_int max, isl_int *count); -int isl_set_count_upto(__isl_keep isl_set *set, isl_int max, isl_int *count); - -__isl_give isl_basic_set *isl_basic_set_from_point(__isl_take isl_point *pnt); -__isl_give isl_set *isl_set_from_point(__isl_take isl_point *pnt); -__isl_give isl_basic_set *isl_basic_set_box_from_points( - __isl_take isl_point *pnt1, __isl_take isl_point *pnt2); -__isl_give isl_set *isl_set_box_from_points(__isl_take isl_point *pnt1, - __isl_take isl_point *pnt2); - -__isl_give isl_basic_set *isl_basic_set_lift(__isl_take isl_basic_set *bset); -__isl_give isl_set *isl_set_lift(__isl_take isl_set *set); - -__isl_give isl_map *isl_set_lex_le_set(__isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_map *isl_set_lex_lt_set(__isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_map *isl_set_lex_ge_set(__isl_take isl_set *set1, - __isl_take isl_set *set2); -__isl_give isl_map *isl_set_lex_gt_set(__isl_take isl_set *set1, - __isl_take isl_set *set2); - -int isl_set_size(__isl_keep isl_set *set); - -__isl_give isl_set *isl_set_align_params(__isl_take isl_set *set, - __isl_take isl_space *model); - -__isl_give isl_mat *isl_basic_set_equalities_matrix( - __isl_keep isl_basic_set *bset, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, enum isl_dim_type c4); -__isl_give isl_mat *isl_basic_set_inequalities_matrix( - __isl_keep isl_basic_set *bset, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, enum isl_dim_type c4); -__isl_give isl_basic_set *isl_basic_set_from_constraint_matrices( - __isl_take isl_space *dim, - __isl_take isl_mat *eq, __isl_take isl_mat *ineq, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, enum isl_dim_type c4); - -__isl_give isl_mat *isl_basic_set_reduced_basis(__isl_keep isl_basic_set *bset); - -__isl_give isl_basic_set *isl_basic_set_coefficients( - __isl_take isl_basic_set *bset); -__isl_give isl_basic_set *isl_set_coefficients(__isl_take isl_set *set); -__isl_give isl_basic_set *isl_basic_set_solutions( - __isl_take isl_basic_set *bset); -__isl_give isl_basic_set *isl_set_solutions(__isl_take isl_set *set); - -__isl_give isl_pw_aff *isl_set_dim_max(__isl_take isl_set *set, int pos); -__isl_give isl_pw_aff *isl_set_dim_min(__isl_take isl_set *set, int pos); - -__isl_give char *isl_set_to_str(__isl_keep isl_set *set); - -#if defined(__cplusplus) -} -#endif - -#include - -#endif diff --git a/cloog-0.17.0/isl/include/isl/set_type.h b/cloog-0.17.0/isl/include/isl/set_type.h deleted file mode 100644 index ce349e1..0000000 --- a/cloog-0.17.0/isl/include/isl/set_type.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef ISL_SET_TYPE_H -#define ISL_SET_TYPE_H - -#include - -#endif diff --git a/cloog-0.17.0/isl/include/isl/space.h b/cloog-0.17.0/isl/include/isl/space.h deleted file mode 100644 index d3496e0..0000000 --- a/cloog-0.17.0/isl/include/isl/space.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_SPACE_H -#define ISL_SPACE_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_space; -typedef struct isl_space isl_space; - -enum isl_dim_type { - isl_dim_cst, - isl_dim_param, - isl_dim_in, - isl_dim_out, - isl_dim_set = isl_dim_out, - isl_dim_div, - isl_dim_all -}; - -isl_ctx *isl_space_get_ctx(__isl_keep isl_space *dim); -__isl_give isl_space *isl_space_alloc(isl_ctx *ctx, - unsigned nparam, unsigned n_in, unsigned n_out); -__isl_give isl_space *isl_space_set_alloc(isl_ctx *ctx, - unsigned nparam, unsigned dim); -__isl_give isl_space *isl_space_params_alloc(isl_ctx *ctx, unsigned nparam); -__isl_give isl_space *isl_space_copy(__isl_keep isl_space *dim); -void isl_space_free(__isl_take isl_space *dim); - -int isl_space_is_params(__isl_keep isl_space *space); -int isl_space_is_set(__isl_keep isl_space *space); - -__isl_give isl_space *isl_space_set_tuple_name(__isl_take isl_space *dim, - enum isl_dim_type type, const char *s); -const char *isl_space_get_tuple_name(__isl_keep isl_space *dim, - enum isl_dim_type type); -__isl_give isl_space *isl_space_set_tuple_id(__isl_take isl_space *dim, - enum isl_dim_type type, __isl_take isl_id *id); -__isl_give isl_space *isl_space_reset_tuple_id(__isl_take isl_space *dim, - enum isl_dim_type type); -int isl_space_has_tuple_id(__isl_keep isl_space *dim, enum isl_dim_type type); -__isl_give isl_id *isl_space_get_tuple_id(__isl_keep isl_space *dim, - enum isl_dim_type type); - -__isl_give isl_space *isl_space_set_dim_id(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id); -int isl_space_has_dim_id(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos); -__isl_give isl_id *isl_space_get_dim_id(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos); - -int isl_space_find_dim_by_id(__isl_keep isl_space *dim, enum isl_dim_type type, - __isl_keep isl_id *id); -int isl_space_find_dim_by_name(__isl_keep isl_space *space, - enum isl_dim_type type, const char *name); - -__isl_give isl_space *isl_space_set_dim_name(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos, - __isl_keep const char *name); -__isl_keep const char *isl_space_get_dim_name(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos); - -__isl_give isl_space *isl_space_extend(__isl_take isl_space *dim, - unsigned nparam, unsigned n_in, unsigned n_out); -__isl_give isl_space *isl_space_add_dims(__isl_take isl_space *dim, enum isl_dim_type type, - unsigned n); -__isl_give isl_space *isl_space_move_dims(__isl_take isl_space *dim, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n); -__isl_give isl_space *isl_space_insert_dims(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos, unsigned n); -__isl_give isl_space *isl_space_join(__isl_take isl_space *left, - __isl_take isl_space *right); -__isl_give isl_space *isl_space_product(__isl_take isl_space *left, - __isl_take isl_space *right); -__isl_give isl_space *isl_space_domain_product(__isl_take isl_space *left, - __isl_take isl_space *right); -__isl_give isl_space *isl_space_range_product(__isl_take isl_space *left, - __isl_take isl_space *right); -__isl_give isl_space *isl_space_map_from_set(__isl_take isl_space *dim); -__isl_give isl_space *isl_space_reverse(__isl_take isl_space *dim); -__isl_give isl_space *isl_space_drop_dims(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned first, unsigned num); -__isl_give isl_space *isl_space_drop_inputs(__isl_take isl_space *dim, - unsigned first, unsigned n); -__isl_give isl_space *isl_space_drop_outputs(__isl_take isl_space *dim, - unsigned first, unsigned n); -__isl_give isl_space *isl_space_domain(__isl_take isl_space *dim); -__isl_give isl_space *isl_space_from_domain(__isl_take isl_space *dim); -__isl_give isl_space *isl_space_range(__isl_take isl_space *dim); -__isl_give isl_space *isl_space_from_range(__isl_take isl_space *dim); -__isl_give isl_space *isl_space_params(__isl_take isl_space *space); -__isl_give isl_space *isl_space_set_from_params(__isl_take isl_space *space); - -__isl_give isl_space *isl_space_align_params(__isl_take isl_space *dim1, - __isl_take isl_space *dim2); - -int isl_space_is_wrapping(__isl_keep isl_space *dim); -__isl_give isl_space *isl_space_wrap(__isl_take isl_space *dim); -__isl_give isl_space *isl_space_unwrap(__isl_take isl_space *dim); - -int isl_space_can_zip(__isl_keep isl_space *dim); -__isl_give isl_space *isl_space_zip(__isl_take isl_space *dim); - -int isl_space_is_equal(__isl_keep isl_space *dim1, __isl_keep isl_space *dim2); -int isl_space_match(__isl_keep isl_space *dim1, enum isl_dim_type dim1_type, - __isl_keep isl_space *dim2, enum isl_dim_type dim2_type); -int isl_space_tuple_match(__isl_keep isl_space *dim1, enum isl_dim_type dim1_type, - __isl_keep isl_space *dim2, enum isl_dim_type dim2_type); -int isl_space_compatible(__isl_keep isl_space *dim1, - __isl_keep isl_space *dim2); -unsigned isl_space_dim(__isl_keep isl_space *dim, enum isl_dim_type type); - -__isl_give isl_printer *isl_printer_print_space(__isl_take isl_printer *p, - __isl_keep isl_space *dim); -void isl_space_dump(__isl_keep isl_space *dim); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/stream.h b/cloog-0.17.0/isl/include/isl/stream.h deleted file mode 100644 index 7c19299..0000000 --- a/cloog-0.17.0/isl/include/isl/stream.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_STREAM_H -#define ISL_STREAM_H - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -enum isl_token_type { ISL_TOKEN_ERROR = -1, - ISL_TOKEN_UNKNOWN = 256, ISL_TOKEN_VALUE, - ISL_TOKEN_IDENT, ISL_TOKEN_GE, - ISL_TOKEN_LE, ISL_TOKEN_GT, ISL_TOKEN_LT, - ISL_TOKEN_NE, ISL_TOKEN_EQ_EQ, - ISL_TOKEN_LEX_GE, ISL_TOKEN_LEX_LE, - ISL_TOKEN_LEX_GT, ISL_TOKEN_LEX_LT, - ISL_TOKEN_TO, ISL_TOKEN_AND, - ISL_TOKEN_OR, ISL_TOKEN_EXISTS, ISL_TOKEN_NOT, - ISL_TOKEN_DEF, ISL_TOKEN_INFTY, ISL_TOKEN_NAN, - ISL_TOKEN_MIN, ISL_TOKEN_MAX, ISL_TOKEN_RAT, - ISL_TOKEN_TRUE, ISL_TOKEN_FALSE, - ISL_TOKEN_CEILD, ISL_TOKEN_FLOORD, ISL_TOKEN_MOD, - ISL_TOKEN_STRING, - ISL_TOKEN_MAP, ISL_TOKEN_AFF, - ISL_TOKEN_LAST }; - -struct isl_token { - enum isl_token_type type; - - unsigned int on_new_line : 1; - unsigned is_keyword : 1; - int line; - int col; - - union { - isl_int v; - char *s; - isl_map *map; - isl_pw_aff *pwaff; - } u; -}; - -void isl_token_free(struct isl_token *tok); - -struct isl_stream { - struct isl_ctx *ctx; - FILE *file; - const char *str; - int line; - int col; - int eof; - - char *buffer; - size_t size; - size_t len; - int c; - int un[5]; - int n_un; - - struct isl_token *tokens[5]; - int n_token; - - struct isl_hash_table *keywords; - enum isl_token_type next_type; -}; - -struct isl_stream* isl_stream_new_file(struct isl_ctx *ctx, FILE *file); -struct isl_stream* isl_stream_new_str(struct isl_ctx *ctx, const char *str); -void isl_stream_free(struct isl_stream *s); - -void isl_stream_error(struct isl_stream *s, struct isl_token *tok, char *msg); - -struct isl_token *isl_stream_next_token(struct isl_stream *s); -struct isl_token *isl_stream_next_token_on_same_line(struct isl_stream *s); -int isl_stream_next_token_is(struct isl_stream *s, int type); -void isl_stream_push_token(struct isl_stream *s, struct isl_token *tok); -void isl_stream_flush_tokens(struct isl_stream *s); -int isl_stream_eat_if_available(struct isl_stream *s, int type); -char *isl_stream_read_ident_if_available(struct isl_stream *s); -int isl_stream_eat(struct isl_stream *s, int type); -int isl_stream_is_empty(struct isl_stream *s); -int isl_stream_skip_line(struct isl_stream *s); - -enum isl_token_type isl_stream_register_keyword(struct isl_stream *s, - const char *name); - -struct isl_obj isl_stream_read_obj(struct isl_stream *s); -__isl_give isl_map *isl_stream_read_map(struct isl_stream *s); -__isl_give isl_set *isl_stream_read_set(struct isl_stream *s); -__isl_give isl_pw_qpolynomial *isl_stream_read_pw_qpolynomial( - struct isl_stream *s); -__isl_give isl_union_map *isl_stream_read_union_map(struct isl_stream *s); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/union_map.h b/cloog-0.17.0/isl/include/isl/union_map.h deleted file mode 100644 index f0ebeb2..0000000 --- a/cloog-0.17.0/isl/include/isl/union_map.h +++ /dev/null @@ -1,191 +0,0 @@ -#ifndef ISL_UNION_MAP_H -#define ISL_UNION_MAP_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -__isl_export -struct isl_union_map; -typedef struct isl_union_map isl_union_map; -#ifndef isl_union_set -__isl_export -struct isl_union_set; -typedef struct isl_union_set isl_union_set; -#endif - -__isl_constructor -__isl_give isl_union_map *isl_union_map_from_map(__isl_take isl_map *map); -__isl_give isl_union_map *isl_union_map_empty(__isl_take isl_space *dim); -__isl_give isl_union_map *isl_union_map_copy(__isl_keep isl_union_map *umap); -void *isl_union_map_free(__isl_take isl_union_map *umap); - -isl_ctx *isl_union_map_get_ctx(__isl_keep isl_union_map *umap); -__isl_give isl_space *isl_union_map_get_space(__isl_keep isl_union_map *umap); - -__isl_give isl_union_map *isl_union_map_universe( - __isl_take isl_union_map *umap); -__isl_give isl_set *isl_union_map_params(__isl_take isl_union_map *umap); -__isl_give isl_union_set *isl_union_map_domain(__isl_take isl_union_map *umap); -__isl_give isl_union_set *isl_union_map_range(__isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_domain_map( - __isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_range_map( - __isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_from_domain( - __isl_take isl_union_set *uset); -__isl_give isl_union_map *isl_union_map_from_range( - __isl_take isl_union_set *uset); - -__isl_export -__isl_give isl_union_map *isl_union_map_affine_hull( - __isl_take isl_union_map *umap); -__isl_export -__isl_give isl_union_map *isl_union_map_polyhedral_hull( - __isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_simple_hull( - __isl_take isl_union_map *umap); -__isl_export -__isl_give isl_union_map *isl_union_map_coalesce( - __isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_compute_divs( - __isl_take isl_union_map *umap); -__isl_export -__isl_give isl_union_map *isl_union_map_lexmin(__isl_take isl_union_map *umap); -__isl_export -__isl_give isl_union_map *isl_union_map_lexmax(__isl_take isl_union_map *umap); - -__isl_give isl_union_map *isl_union_map_add_map(__isl_take isl_union_map *umap, - __isl_take isl_map *map); -__isl_export -__isl_give isl_union_map *isl_union_map_union(__isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); -__isl_export -__isl_give isl_union_map *isl_union_map_subtract( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_export -__isl_give isl_union_map *isl_union_map_intersect( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_export -__isl_give isl_union_map *isl_union_map_intersect_params( - __isl_take isl_union_map *umap, __isl_take isl_set *set); -__isl_give isl_union_map *isl_union_map_product(__isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_range_product( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_flat_range_product( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_export -__isl_give isl_union_map *isl_union_map_gist(__isl_take isl_union_map *umap, - __isl_take isl_union_map *context); -__isl_export -__isl_give isl_union_map *isl_union_map_gist_params( - __isl_take isl_union_map *umap, __isl_take isl_set *set); -__isl_export -__isl_give isl_union_map *isl_union_map_gist_domain( - __isl_take isl_union_map *umap, __isl_take isl_union_set *uset); - -__isl_export -__isl_give isl_union_map *isl_union_map_intersect_domain( - __isl_take isl_union_map *umap, __isl_take isl_union_set *uset); -__isl_export -__isl_give isl_union_map *isl_union_map_intersect_range( - __isl_take isl_union_map *umap, __isl_take isl_union_set *uset); - -__isl_export -__isl_give isl_union_map *isl_union_map_apply_domain( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_export -__isl_give isl_union_map *isl_union_map_apply_range( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_export -__isl_give isl_union_map *isl_union_map_reverse(__isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_from_domain_and_range( - __isl_take isl_union_set *domain, __isl_take isl_union_set *range); - -__isl_export -__isl_give isl_union_map *isl_union_map_detect_equalities( - __isl_keep isl_union_map *umap); -__isl_export -__isl_give isl_union_set *isl_union_map_deltas(__isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_map_deltas_map( - __isl_take isl_union_map *umap); -__isl_export -__isl_give isl_union_map *isl_union_set_identity(__isl_take isl_union_set *uset); - -__isl_export -int isl_union_map_is_empty(__isl_keep isl_union_map *umap); -__isl_export -int isl_union_map_is_single_valued(__isl_keep isl_union_map *umap); -int isl_union_map_plain_is_injective(__isl_keep isl_union_map *umap); -__isl_export -int isl_union_map_is_injective(__isl_keep isl_union_map *umap); -__isl_export -int isl_union_map_is_bijective(__isl_keep isl_union_map *umap); - -__isl_export -int isl_union_map_is_subset(__isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2); -__isl_export -int isl_union_map_is_equal(__isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2); -__isl_export -int isl_union_map_is_strict_subset(__isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2); - -int isl_union_map_n_map(__isl_keep isl_union_map *umap); -__isl_export -int isl_union_map_foreach_map(__isl_keep isl_union_map *umap, - int (*fn)(__isl_take isl_map *map, void *user), void *user); -__isl_give int isl_union_map_contains(__isl_keep isl_union_map *umap, - __isl_keep isl_space *dim); -__isl_give isl_map *isl_union_map_extract_map(__isl_keep isl_union_map *umap, - __isl_take isl_space *dim); -__isl_give isl_map *isl_map_from_union_map(__isl_take isl_union_map *umap); - -__isl_give isl_basic_map *isl_union_map_sample(__isl_take isl_union_map *umap); - -__isl_give isl_union_map *isl_union_map_power(__isl_take isl_union_map *umap, - int *exact); -__isl_give isl_union_map *isl_union_map_transitive_closure( - __isl_take isl_union_map *umap, int *exact); - -__isl_give isl_union_map *isl_union_map_lex_lt_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_lex_le_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_lex_gt_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); -__isl_give isl_union_map *isl_union_map_lex_ge_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); - -__isl_give isl_union_map *isl_union_map_read_from_file(isl_ctx *ctx, - FILE *input); -__isl_constructor -__isl_give isl_union_map *isl_union_map_read_from_str(isl_ctx *ctx, - const char *str); -__isl_give isl_printer *isl_printer_print_union_map(__isl_take isl_printer *p, - __isl_keep isl_union_map *umap); -void isl_union_map_dump(__isl_keep isl_union_map *umap); - -__isl_give isl_union_set *isl_union_map_wrap(__isl_take isl_union_map *umap); -__isl_give isl_union_map *isl_union_set_unwrap(__isl_take isl_union_set *uset); - -__isl_give isl_union_map *isl_union_map_zip(__isl_take isl_union_map *umap); - -__isl_give isl_union_map *isl_union_map_align_params( - __isl_take isl_union_map *umap, __isl_take isl_space *model); -__isl_give isl_union_set *isl_union_set_align_params( - __isl_take isl_union_set *uset, __isl_take isl_space *model); - -#if defined(__cplusplus) -} -#endif - -#include - -#endif diff --git a/cloog-0.17.0/isl/include/isl/union_set.h b/cloog-0.17.0/isl/include/isl/union_set.h deleted file mode 100644 index c2acec4..0000000 --- a/cloog-0.17.0/isl/include/isl/union_set.h +++ /dev/null @@ -1,130 +0,0 @@ -#ifndef ISL_UNION_SET_H -#define ISL_UNION_SET_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -__isl_constructor -__isl_give isl_union_set *isl_union_set_from_set(__isl_take isl_set *set); -__isl_give isl_union_set *isl_union_set_empty(__isl_take isl_space *dim); -__isl_give isl_union_set *isl_union_set_copy(__isl_keep isl_union_set *uset); -void *isl_union_set_free(__isl_take isl_union_set *uset); - -isl_ctx *isl_union_set_get_ctx(__isl_keep isl_union_set *uset); -__isl_give isl_space *isl_union_set_get_space(__isl_keep isl_union_set *uset); - -__isl_give isl_union_set *isl_union_set_universe( - __isl_take isl_union_set *uset); -__isl_give isl_set *isl_union_set_params(__isl_take isl_union_set *uset); - -__isl_export -__isl_give isl_union_set *isl_union_set_detect_equalities( - __isl_take isl_union_set *uset); -__isl_export -__isl_give isl_union_set *isl_union_set_affine_hull( - __isl_take isl_union_set *uset); -__isl_export -__isl_give isl_union_set *isl_union_set_polyhedral_hull( - __isl_take isl_union_set *uset); -__isl_give isl_union_set *isl_union_set_simple_hull( - __isl_take isl_union_set *uset); -__isl_export -__isl_give isl_union_set *isl_union_set_coalesce( - __isl_take isl_union_set *uset); -__isl_give isl_union_set *isl_union_set_compute_divs( - __isl_take isl_union_set *uset); -__isl_export -__isl_give isl_union_set *isl_union_set_lexmin(__isl_take isl_union_set *uset); -__isl_export -__isl_give isl_union_set *isl_union_set_lexmax(__isl_take isl_union_set *uset); - -__isl_give isl_union_set *isl_union_set_add_set(__isl_take isl_union_set *uset, - __isl_take isl_set *set); -__isl_give isl_union_set *isl_union_set_union(__isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2); -__isl_export -__isl_give isl_union_set *isl_union_set_subtract( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); -__isl_export -__isl_give isl_union_set *isl_union_set_intersect( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); -__isl_export -__isl_give isl_union_set *isl_union_set_intersect_params( - __isl_take isl_union_set *uset, __isl_take isl_set *set); -__isl_give isl_union_set *isl_union_set_product(__isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2); -__isl_export -__isl_give isl_union_set *isl_union_set_gist(__isl_take isl_union_set *uset, - __isl_take isl_union_set *context); -__isl_export -__isl_give isl_union_set *isl_union_set_gist_params( - __isl_take isl_union_set *uset, __isl_take isl_set *set); - -__isl_export -__isl_give isl_union_set *isl_union_set_apply( - __isl_take isl_union_set *uset, __isl_take isl_union_map *umap); - -int isl_union_set_is_params(__isl_keep isl_union_set *uset); -__isl_export -int isl_union_set_is_empty(__isl_keep isl_union_set *uset); - -__isl_export -int isl_union_set_is_subset(__isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2); -__isl_export -int isl_union_set_is_equal(__isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2); -__isl_export -int isl_union_set_is_strict_subset(__isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2); - -int isl_union_set_n_set(__isl_keep isl_union_set *uset); -__isl_export -int isl_union_set_foreach_set(__isl_keep isl_union_set *uset, - int (*fn)(__isl_take isl_set *set, void *user), void *user); -__isl_give int isl_union_set_contains(__isl_keep isl_union_set *uset, - __isl_keep isl_space *dim); -__isl_give isl_set *isl_union_set_extract_set(__isl_keep isl_union_set *uset, - __isl_take isl_space *dim); -__isl_give isl_set *isl_set_from_union_set(__isl_take isl_union_set *uset); -int isl_union_set_foreach_point(__isl_keep isl_union_set *uset, - int (*fn)(__isl_take isl_point *pnt, void *user), void *user); - -__isl_give isl_basic_set *isl_union_set_sample(__isl_take isl_union_set *uset); - -__isl_give isl_union_set *isl_union_set_lift(__isl_take isl_union_set *uset); - -__isl_give isl_union_map *isl_union_set_lex_lt_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); -__isl_give isl_union_map *isl_union_set_lex_le_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); -__isl_give isl_union_map *isl_union_set_lex_gt_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); -__isl_give isl_union_map *isl_union_set_lex_ge_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); - -__isl_give isl_union_set *isl_union_set_coefficients( - __isl_take isl_union_set *bset); -__isl_give isl_union_set *isl_union_set_solutions( - __isl_take isl_union_set *bset); - -__isl_give isl_union_set *isl_union_set_read_from_file(isl_ctx *ctx, - FILE *input); -__isl_constructor -__isl_give isl_union_set *isl_union_set_read_from_str(isl_ctx *ctx, - const char *str); -__isl_give isl_printer *isl_printer_print_union_set(__isl_take isl_printer *p, - __isl_keep isl_union_set *uset); -void isl_union_set_dump(__isl_keep isl_union_set *uset); - -#if defined(__cplusplus) -} -#endif - -#include - -#endif diff --git a/cloog-0.17.0/isl/include/isl/vec.h b/cloog-0.17.0/isl/include/isl/vec.h deleted file mode 100644 index eb9a7e2..0000000 --- a/cloog-0.17.0/isl/include/isl/vec.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_VEC_H -#define ISL_VEC_H - -#include - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_vec { - int ref; - - struct isl_ctx *ctx; - - unsigned size; - isl_int *el; - - struct isl_blk block; -}; -typedef struct isl_vec isl_vec; - -struct isl_vec *isl_vec_alloc(struct isl_ctx *ctx, unsigned size); -struct isl_vec *isl_vec_copy(struct isl_vec *vec); -struct isl_vec *isl_vec_cow(struct isl_vec *vec); -void isl_vec_free(struct isl_vec *vec); - -isl_ctx *isl_vec_get_ctx(__isl_keep isl_vec *vec); - -int isl_vec_is_equal(__isl_keep isl_vec *vec1, __isl_keep isl_vec *vec2); - -void isl_vec_dump(__isl_keep isl_vec *vec); -__isl_give isl_printer *isl_printer_print_vec(__isl_take isl_printer *printer, - __isl_keep isl_vec *vec); - -void isl_vec_lcm(struct isl_vec *vec, isl_int *lcm); -struct isl_vec *isl_vec_ceil(struct isl_vec *vec); -struct isl_vec *isl_vec_normalize(struct isl_vec *vec); -__isl_give isl_vec *isl_vec_clr(__isl_take isl_vec *vec); -__isl_give isl_vec *isl_vec_neg(__isl_take isl_vec *vec); -__isl_give isl_vec *isl_vec_scale(__isl_take isl_vec *vec, isl_int m); -__isl_give isl_vec *isl_vec_add(__isl_take isl_vec *vec1, - __isl_take isl_vec *vec2); -__isl_give isl_vec *isl_vec_extend(__isl_take isl_vec *vec, unsigned size); -__isl_give isl_vec *isl_vec_zero_extend(__isl_take isl_vec *vec, unsigned size); - -__isl_give isl_vec *isl_vec_sort(__isl_take isl_vec *vec); - -__isl_give isl_vec *isl_vec_read_from_file(isl_ctx *ctx, FILE *input); - -__isl_give isl_vec *isl_vec_drop_els(__isl_take isl_vec *vec, - unsigned pos, unsigned n); -__isl_give isl_vec *isl_vec_insert_els(__isl_take isl_vec *vec, - unsigned pos, unsigned n); -__isl_give isl_vec *isl_vec_insert_zero_els(__isl_take isl_vec *vec, - unsigned pos, unsigned n); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/version.h b/cloog-0.17.0/isl/include/isl/version.h deleted file mode 100644 index 7f8f23d..0000000 --- a/cloog-0.17.0/isl/include/isl/version.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef ISL_VERSION_H -#define ISL_VERSION_H - -#if defined(__cplusplus) -extern "C" { -#endif - -const char *isl_version(void); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/include/isl/vertices.h b/cloog-0.17.0/isl/include/isl/vertices.h deleted file mode 100644 index 3e8460d..0000000 --- a/cloog-0.17.0/isl/include/isl/vertices.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef ISL_VERTICES_H -#define ISL_VERTICES_H - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_external_vertex; -typedef struct isl_external_vertex isl_vertex; - -struct isl_cell; -typedef struct isl_cell isl_cell; - -struct isl_vertices; -typedef struct isl_vertices isl_vertices; - -isl_ctx *isl_vertex_get_ctx(__isl_keep isl_vertex *vertex); -int isl_vertex_get_id(__isl_keep isl_vertex *vertex); -__isl_give isl_basic_set *isl_vertex_get_domain(__isl_keep isl_vertex *vertex); -__isl_give isl_basic_set *isl_vertex_get_expr(__isl_keep isl_vertex *vertex); -void isl_vertex_free(__isl_take isl_vertex *vertex); - -__isl_give isl_vertices *isl_basic_set_compute_vertices( - __isl_keep isl_basic_set *bset); -isl_ctx *isl_vertices_get_ctx(__isl_keep isl_vertices *vertices); -int isl_vertices_get_n_vertices(__isl_keep isl_vertices *vertices); -int isl_vertices_foreach_vertex(__isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_vertex *vertex, void *user), void *user); -void isl_vertices_free(__isl_take isl_vertices *vertices); - -isl_ctx *isl_cell_get_ctx(__isl_keep isl_cell *cell); -__isl_give isl_basic_set *isl_cell_get_domain(__isl_keep isl_cell *cell); -int isl_cell_foreach_vertex(__isl_keep isl_cell *cell, - int (*fn)(__isl_take isl_vertex *vertex, void *user), void *user); -void isl_cell_free(__isl_take isl_cell *cell); - -int isl_vertices_foreach_cell(__isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_cell *cell, void *user), void *user); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/install-sh b/cloog-0.17.0/isl/install-sh deleted file mode 100755 index 6781b98..0000000 --- a/cloog-0.17.0/isl/install-sh +++ /dev/null @@ -1,520 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2009-04-28.21; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -no_target_directory= - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writeable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - -*) prefix='./';; - *) prefix='';; - esac - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob set +f - IFS=$oIFS - - prefixes= - - for d - do - test -z "$d" && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/cloog-0.17.0/isl/interface/Makefile.am b/cloog-0.17.0/isl/interface/Makefile.am deleted file mode 100644 index 89644b9..0000000 --- a/cloog-0.17.0/isl/interface/Makefile.am +++ /dev/null @@ -1,30 +0,0 @@ -AUTOMAKE_OPTIONS = nostdinc - -noinst_PROGRAMS = extract_interface - -AM_CXXFLAGS = $(CLANG_CXXFLAGS) -AM_LDFLAGS = $(CLANG_LDFLAGS) - -INCLUDES = -I$(top_builddir) -I$(top_srcdir) \ - -I$(top_builddir)/include -I$(top_srcdir)/include - -extract_interface_SOURCES = \ - python.h \ - python.cc \ - extract_interface.h \ - extract_interface.cc -extract_interface_LDADD = \ - -lclangFrontend -lclangSerialization -lclangParse -lclangSema \ - -lclangAnalysis -lclangAST -lclangLex -lclangBasic -lclangDriver \ - $(CLANG_LIBS) $(CLANG_LDFLAGS) - -test: extract_interface - ./extract_interface$(EXEEXT) $(INCLUDES) $(srcdir)/all.h - -isl.py: extract_interface isl.py.top - (cat $(srcdir)/isl.py.top; \ - ./extract_interface$(EXEEXT) $(INCLUDES) $(srcdir)/all.h) \ - > isl.py - -dist-hook: isl.py - cp isl.py $(distdir)/ diff --git a/cloog-0.17.0/isl/interface/Makefile.in b/cloog-0.17.0/isl/interface/Makefile.in deleted file mode 100644 index dc65cbf..0000000 --- a/cloog-0.17.0/isl/interface/Makefile.in +++ /dev/null @@ -1,575 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -noinst_PROGRAMS = extract_interface$(EXEEXT) -subdir = interface -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_c___attribute__.m4 \ - $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ - $(top_srcdir)/m4/ax_create_stdint_h.m4 \ - $(top_srcdir)/m4/ax_detect_git_head.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_warn_unused_result.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/ax_set_warning_flags.m4 \ - $(top_srcdir)/m4/ax_submodule.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/isl_config.h \ - $(top_builddir)/include/isl/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -PROGRAMS = $(noinst_PROGRAMS) -am_extract_interface_OBJECTS = python.$(OBJEXT) \ - extract_interface.$(OBJEXT) -extract_interface_OBJECTS = $(am_extract_interface_OBJECTS) -am__DEPENDENCIES_1 = -extract_interface_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -DEFAULT_INCLUDES = -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -AM_V_CXX = $(am__v_CXX_$(V)) -am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) -am__v_CXX_0 = @echo " CXX " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CXXLD = $(am__v_CXXLD_$(V)) -am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CXXLD_0 = @echo " CXXLD " $@; -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(extract_interface_SOURCES) -DIST_SOURCES = $(extract_interface_SOURCES) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CLANG_CXXFLAGS = @CLANG_CXXFLAGS@ -CLANG_LDFLAGS = @CLANG_LDFLAGS@ -CLANG_LIBS = @CLANG_LIBS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIT_HEAD = @GIT_HEAD@ -GIT_HEAD_ID = @GIT_HEAD_ID@ -GIT_HEAD_VERSION = @GIT_HEAD_VERSION@ -GMP_CPPFLAGS = @GMP_CPPFLAGS@ -GMP_LDFLAGS = @GMP_LDFLAGS@ -GMP_LIBS = @GMP_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PDFLATEX = @PDFLATEX@ -PERL = @PERL@ -PIPLIB_CPPFLAGS = @PIPLIB_CPPFLAGS@ -PIPLIB_LDFLAGS = @PIPLIB_LDFLAGS@ -PIPLIB_LIBS = @PIPLIB_LIBS@ -POD2HTML = @POD2HTML@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -WARNING_FLAGS = @WARNING_FLAGS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -llvm_config_found = @llvm_config_found@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfig_libdir = @pkgconfig_libdir@ -pkgconfig_libfile = @pkgconfig_libfile@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -versioninfo = @versioninfo@ -AUTOMAKE_OPTIONS = nostdinc -AM_CXXFLAGS = $(CLANG_CXXFLAGS) -AM_LDFLAGS = $(CLANG_LDFLAGS) -INCLUDES = -I$(top_builddir) -I$(top_srcdir) \ - -I$(top_builddir)/include -I$(top_srcdir)/include - -extract_interface_SOURCES = \ - python.h \ - python.cc \ - extract_interface.h \ - extract_interface.cc - -extract_interface_LDADD = \ - -lclangFrontend -lclangSerialization -lclangParse -lclangSema \ - -lclangAnalysis -lclangAST -lclangLex -lclangBasic -lclangDriver \ - $(CLANG_LIBS) $(CLANG_LDFLAGS) - -all: all-am - -.SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign interface/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign interface/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list -extract_interface$(EXEEXT): $(extract_interface_OBJECTS) $(extract_interface_DEPENDENCIES) - @rm -f extract_interface$(EXEEXT) - $(AM_V_CXXLD)$(CXXLINK) $(extract_interface_OBJECTS) $(extract_interface_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extract_interface.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/python.Po@am__quote@ - -.cc.o: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cc.obj: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: -@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstPROGRAMS ctags dist-hook distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am - - -test: extract_interface - ./extract_interface$(EXEEXT) $(INCLUDES) $(srcdir)/all.h - -isl.py: extract_interface isl.py.top - (cat $(srcdir)/isl.py.top; \ - ./extract_interface$(EXEEXT) $(INCLUDES) $(srcdir)/all.h) \ - > isl.py - -dist-hook: isl.py - cp isl.py $(distdir)/ - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.17.0/isl/interface/extract_interface.cc b/cloog-0.17.0/isl/interface/extract_interface.cc deleted file mode 100644 index b2126a3..0000000 --- a/cloog-0.17.0/isl/interface/extract_interface.cc +++ /dev/null @@ -1,251 +0,0 @@ -/* - * Copyright 2011 Sven Verdoolaege. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY SVEN VERDOOLAEGE ''AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SVEN VERDOOLAEGE OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation - * are those of the authors and should not be interpreted as - * representing official policies, either expressed or implied, of - * Sven Verdoolaege. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "isl_config.h" -#include "extract_interface.h" -#include "python.h" - -using namespace std; -using namespace clang; -using namespace clang::driver; - -static llvm::cl::opt InputFilename(llvm::cl::Positional, - llvm::cl::Required, llvm::cl::desc("")); -static llvm::cl::list Includes("I", - llvm::cl::desc("Header search path"), - llvm::cl::value_desc("path"), llvm::cl::Prefix); - -static const char *ResourceDir = CLANG_PREFIX"/lib/clang/"CLANG_VERSION_STRING; - -/* Does decl have an attribute of the following form? - * - * __attribute__((annotate("name"))) - */ -bool has_annotation(Decl *decl, const char *name) -{ - if (!decl->hasAttrs()) - return false; - - AttrVec attrs = decl->getAttrs(); - for (AttrVec::const_iterator i = attrs.begin() ; i != attrs.end(); ++i) { - const AnnotateAttr *ann = dyn_cast(*i); - if (!ann) - continue; - if (ann->getAnnotation().str() == name) - return true; - } - - return false; -} - -/* Is decl marked as exported? - */ -static bool is_exported(Decl *decl) -{ - return has_annotation(decl, "isl_export"); -} - -/* Collect all types and functions that are annotated "isl_export" - * in "types" and "function". - * - * We currently only consider single declarations. - */ -struct MyASTConsumer : public ASTConsumer { - set types; - set functions; - - virtual void HandleTopLevelDecl(DeclGroupRef D) { - Decl *decl; - - if (!D.isSingleDecl()) - return; - decl = D.getSingleDecl(); - if (!is_exported(decl)) - return; - switch (decl->getKind()) { - case Decl::Record: - types.insert(cast(decl)); - break; - case Decl::Function: - functions.insert(cast(decl)); - break; - default: - break; - } - } -}; - -#ifdef USE_ARRAYREF - -#ifdef HAVE_CXXISPRODUCTION -static Driver *construct_driver(const char *binary, DiagnosticsEngine &Diags) -{ - return new Driver(binary, llvm::sys::getDefaultTargetTriple(), - "", false, false, Diags); -} -#else -static Driver *construct_driver(const char *binary, DiagnosticsEngine &Diags) -{ - return new Driver(binary, llvm::sys::getDefaultTargetTriple(), - "", false, Diags); -} -#endif - -/* Create a CompilerInvocation object that stores the command line - * arguments constructed by the driver. - * The arguments are mainly useful for setting up the system include - * paths on newer clangs and on some platforms. - */ -static CompilerInvocation *construct_invocation(const char *filename, - DiagnosticsEngine &Diags) -{ - const char *binary = CLANG_PREFIX"/bin/clang"; - const llvm::OwningPtr driver(construct_driver(binary, Diags)); - std::vector Argv; - Argv.push_back(binary); - Argv.push_back(filename); - const llvm::OwningPtr compilation( - driver->BuildCompilation(llvm::ArrayRef(Argv))); - JobList &Jobs = compilation->getJobs(); - - Command *cmd = cast(*Jobs.begin()); - if (strcmp(cmd->getCreator().getName(), "clang")) - return NULL; - - const ArgStringList *args = &cmd->getArguments(); - - CompilerInvocation *invocation = new CompilerInvocation; - CompilerInvocation::CreateFromArgs(*invocation, args->data() + 1, - args->data() + args->size(), - Diags); - return invocation; -} - -#else - -static CompilerInvocation *construct_invocation(const char *filename, - DiagnosticsEngine &Diags) -{ - return NULL; -} - -#endif - -int main(int argc, char *argv[]) -{ - llvm::cl::ParseCommandLineOptions(argc, argv); - - CompilerInstance *Clang = new CompilerInstance(); - DiagnosticOptions DO; - Clang->createDiagnostics(0, NULL, - new TextDiagnosticPrinter(llvm::errs(), DO)); - DiagnosticsEngine &Diags = Clang->getDiagnostics(); - Diags.setSuppressSystemWarnings(true); - CompilerInvocation *invocation = - construct_invocation(InputFilename.c_str(), Diags); - if (invocation) - Clang->setInvocation(invocation); - Clang->createFileManager(); - Clang->createSourceManager(Clang->getFileManager()); - TargetOptions TO; - TO.Triple = llvm::sys::getDefaultTargetTriple(); - TargetInfo *target = TargetInfo::CreateTargetInfo(Diags, TO); - Clang->setTarget(target); - CompilerInvocation::setLangDefaults(Clang->getLangOpts(), IK_C, - LangStandard::lang_unspecified); - HeaderSearchOptions &HSO = Clang->getHeaderSearchOpts(); - LangOptions &LO = Clang->getLangOpts(); - PreprocessorOptions &PO = Clang->getPreprocessorOpts(); - HSO.ResourceDir = ResourceDir; - - for (int i = 0; i < Includes.size(); ++i) - HSO.AddPath(Includes[i], frontend::Angled, true, false, false); - - PO.addMacroDef("__isl_give=__attribute__((annotate(\"isl_give\")))"); - PO.addMacroDef("__isl_keep=__attribute__((annotate(\"isl_keep\")))"); - PO.addMacroDef("__isl_take=__attribute__((annotate(\"isl_take\")))"); - PO.addMacroDef("__isl_export=__attribute__((annotate(\"isl_export\")))"); - PO.addMacroDef("__isl_constructor=__attribute__((annotate(\"isl_constructor\"))) __attribute__((annotate(\"isl_export\")))"); - PO.addMacroDef("__isl_subclass(super)=__attribute__((annotate(\"isl_subclass(\" #super \")\"))) __attribute__((annotate(\"isl_export\")))"); - - Clang->createPreprocessor(); - Preprocessor &PP = Clang->getPreprocessor(); - - PP.getBuiltinInfo().InitializeBuiltins(PP.getIdentifierTable(), LO); - - const FileEntry *file = Clang->getFileManager().getFile(InputFilename); - assert(file); - Clang->getSourceManager().createMainFileID(file); - - Clang->createASTContext(); - MyASTConsumer consumer; - Sema *sema = new Sema(PP, Clang->getASTContext(), consumer); - - Diags.getClient()->BeginSourceFile(LO, &PP); - ParseAST(*sema); - Diags.getClient()->EndSourceFile(); - - generate_python(consumer.types, consumer.functions); - - delete sema; - delete Clang; - llvm::llvm_shutdown(); - - return 0; -} diff --git a/cloog-0.17.0/isl/interface/extract_interface.h b/cloog-0.17.0/isl/interface/extract_interface.h deleted file mode 100644 index b6788f1..0000000 --- a/cloog-0.17.0/isl/interface/extract_interface.h +++ /dev/null @@ -1,3 +0,0 @@ -#include - -bool has_annotation(clang::Decl *decl, const char *name); diff --git a/cloog-0.17.0/isl/interface/isl.py b/cloog-0.17.0/isl/interface/isl.py deleted file mode 100644 index 98eeb47..0000000 --- a/cloog-0.17.0/isl/interface/isl.py +++ /dev/null @@ -1,1091 +0,0 @@ -from ctypes import * - -isl = cdll.LoadLibrary("libisl.so") -libc = cdll.LoadLibrary("libc.so.6") - -class Error(Exception): - pass - -class Context: - defaultInstance = None - - def __init__(self): - ptr = isl.isl_ctx_alloc() - self.ptr = ptr - - def __del__(self): - isl.isl_ctx_free(self) - - def from_param(self): - return self.ptr - - @staticmethod - def getDefaultInstance(): - if Context.defaultInstance == None: - Context.defaultInstance = Context() - return Context.defaultInstance - -isl.isl_ctx_alloc.restype = c_void_p -isl.isl_ctx_free.argtypes = [Context] - -class union_map: - def __init__(self, *args, **keywords): - if "ptr" in keywords: - self.ctx = keywords["ctx"] - self.ptr = keywords["ptr"] - return - if len(args) == 1 and args[0].__class__ is map: - self.ctx = Context.getDefaultInstance() - self.ptr = isl.isl_union_map_from_map(isl.isl_map_copy(args[0].ptr)) - return - if len(args) == 1 and type(args[0]) == str: - self.ctx = Context.getDefaultInstance() - self.ptr = isl.isl_union_map_read_from_str(self.ctx, args[0]) - return - raise Error - def __del__(self): - if hasattr(self, 'ptr'): - isl.isl_union_map_free(self.ptr) - def __str__(self): - ptr = isl.isl_union_map_to_str(self.ptr) - res = str(cast(ptr, c_char_p).value) - libc.free(ptr) - return res - def __repr__(self): - return 'isl.union_map("%s")' % str(self) - def affine_hull(self): - res = isl.isl_union_map_affine_hull(isl.isl_union_map_copy(self.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def polyhedral_hull(self): - res = isl.isl_union_map_polyhedral_hull(isl.isl_union_map_copy(self.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def coalesce(self): - res = isl.isl_union_map_coalesce(isl.isl_union_map_copy(self.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def lexmin(self): - res = isl.isl_union_map_lexmin(isl.isl_union_map_copy(self.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def lexmax(self): - res = isl.isl_union_map_lexmax(isl.isl_union_map_copy(self.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def union(self, arg1): - try: - if not arg1.__class__ is union_map: - arg1 = union_map(arg1) - except: - raise - res = isl.isl_union_map_union(isl.isl_union_map_copy(self.ptr), isl.isl_union_map_copy(arg1.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def subtract(self, arg1): - try: - if not arg1.__class__ is union_map: - arg1 = union_map(arg1) - except: - raise - res = isl.isl_union_map_subtract(isl.isl_union_map_copy(self.ptr), isl.isl_union_map_copy(arg1.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def intersect(self, arg1): - try: - if not arg1.__class__ is union_map: - arg1 = union_map(arg1) - except: - raise - res = isl.isl_union_map_intersect(isl.isl_union_map_copy(self.ptr), isl.isl_union_map_copy(arg1.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def intersect_params(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - raise - res = isl.isl_union_map_intersect_params(isl.isl_union_map_copy(self.ptr), isl.isl_set_copy(arg1.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def gist(self, arg1): - try: - if not arg1.__class__ is union_map: - arg1 = union_map(arg1) - except: - raise - res = isl.isl_union_map_gist(isl.isl_union_map_copy(self.ptr), isl.isl_union_map_copy(arg1.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def gist_params(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - raise - res = isl.isl_union_map_gist_params(isl.isl_union_map_copy(self.ptr), isl.isl_set_copy(arg1.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def gist_domain(self, arg1): - try: - if not arg1.__class__ is union_set: - arg1 = union_set(arg1) - except: - raise - res = isl.isl_union_map_gist_domain(isl.isl_union_map_copy(self.ptr), isl.isl_union_set_copy(arg1.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def intersect_domain(self, arg1): - try: - if not arg1.__class__ is union_set: - arg1 = union_set(arg1) - except: - raise - res = isl.isl_union_map_intersect_domain(isl.isl_union_map_copy(self.ptr), isl.isl_union_set_copy(arg1.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def intersect_range(self, arg1): - try: - if not arg1.__class__ is union_set: - arg1 = union_set(arg1) - except: - raise - res = isl.isl_union_map_intersect_range(isl.isl_union_map_copy(self.ptr), isl.isl_union_set_copy(arg1.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def apply_domain(self, arg1): - try: - if not arg1.__class__ is union_map: - arg1 = union_map(arg1) - except: - raise - res = isl.isl_union_map_apply_domain(isl.isl_union_map_copy(self.ptr), isl.isl_union_map_copy(arg1.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def apply_range(self, arg1): - try: - if not arg1.__class__ is union_map: - arg1 = union_map(arg1) - except: - raise - res = isl.isl_union_map_apply_range(isl.isl_union_map_copy(self.ptr), isl.isl_union_map_copy(arg1.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def reverse(self): - res = isl.isl_union_map_reverse(isl.isl_union_map_copy(self.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def detect_equalities(self): - res = isl.isl_union_map_detect_equalities(self.ptr) - return union_map(ctx=self.ctx, ptr=res) - def deltas(self): - res = isl.isl_union_map_deltas(isl.isl_union_map_copy(self.ptr)) - return union_set(ctx=self.ctx, ptr=res) - def is_empty(self): - res = isl.isl_union_map_is_empty(self.ptr) - return res - def is_single_valued(self): - res = isl.isl_union_map_is_single_valued(self.ptr) - return res - def is_injective(self): - res = isl.isl_union_map_is_injective(self.ptr) - return res - def is_bijective(self): - res = isl.isl_union_map_is_bijective(self.ptr) - return res - def is_subset(self, arg1): - try: - if not arg1.__class__ is union_map: - arg1 = union_map(arg1) - except: - raise - res = isl.isl_union_map_is_subset(self.ptr, arg1.ptr) - return res - def is_equal(self, arg1): - try: - if not arg1.__class__ is union_map: - arg1 = union_map(arg1) - except: - raise - res = isl.isl_union_map_is_equal(self.ptr, arg1.ptr) - return res - def is_strict_subset(self, arg1): - try: - if not arg1.__class__ is union_map: - arg1 = union_map(arg1) - except: - raise - res = isl.isl_union_map_is_strict_subset(self.ptr, arg1.ptr) - return res - def foreach_map(self, arg1): - exc_info = [None] - fn = CFUNCTYPE(c_int, c_void_p, c_void_p) - def cb_func(cb_arg0, cb_arg1): - cb_arg0 = map(ctx=self.ctx, ptr=cb_arg0) - try: - arg1(cb_arg0) - except: - import sys - exc_info[0] = sys.exc_info() - return -1 - return 0 - cb = fn(cb_func) - res = isl.isl_union_map_foreach_map(self.ptr, cb, None) - if exc_info[0] != None: - raise exc_info[0][0], exc_info[0][1], exc_info[0][2] - return res - -isl.isl_union_map_from_map.restype = c_void_p -isl.isl_union_map_from_map.argtypes = [c_void_p] -isl.isl_union_map_read_from_str.restype = c_void_p -isl.isl_union_map_read_from_str.argtypes = [Context, c_char_p] -isl.isl_union_map_affine_hull.restype = c_void_p -isl.isl_union_map_polyhedral_hull.restype = c_void_p -isl.isl_union_map_coalesce.restype = c_void_p -isl.isl_union_map_lexmin.restype = c_void_p -isl.isl_union_map_lexmax.restype = c_void_p -isl.isl_union_map_union.restype = c_void_p -isl.isl_union_map_subtract.restype = c_void_p -isl.isl_union_map_intersect.restype = c_void_p -isl.isl_union_map_intersect_params.restype = c_void_p -isl.isl_union_map_gist.restype = c_void_p -isl.isl_union_map_gist_params.restype = c_void_p -isl.isl_union_map_gist_domain.restype = c_void_p -isl.isl_union_map_intersect_domain.restype = c_void_p -isl.isl_union_map_intersect_range.restype = c_void_p -isl.isl_union_map_apply_domain.restype = c_void_p -isl.isl_union_map_apply_range.restype = c_void_p -isl.isl_union_map_reverse.restype = c_void_p -isl.isl_union_map_detect_equalities.restype = c_void_p -isl.isl_union_map_deltas.restype = c_void_p -isl.isl_union_map_free.argtypes = [c_void_p] -isl.isl_union_map_to_str.argtypes = [c_void_p] -isl.isl_union_map_to_str.restype = POINTER(c_char) - -class map(union_map): - def __init__(self, *args, **keywords): - if "ptr" in keywords: - self.ctx = keywords["ctx"] - self.ptr = keywords["ptr"] - return - if len(args) == 1 and type(args[0]) == str: - self.ctx = Context.getDefaultInstance() - self.ptr = isl.isl_map_read_from_str(self.ctx, args[0]) - return - if len(args) == 1 and args[0].__class__ is basic_map: - self.ctx = Context.getDefaultInstance() - self.ptr = isl.isl_map_from_basic_map(isl.isl_basic_map_copy(args[0].ptr)) - return - raise Error - def __del__(self): - if hasattr(self, 'ptr'): - isl.isl_map_free(self.ptr) - def __str__(self): - ptr = isl.isl_map_to_str(self.ptr) - res = str(cast(ptr, c_char_p).value) - libc.free(ptr) - return res - def __repr__(self): - return 'isl.map("%s")' % str(self) - def lexmin(self): - res = isl.isl_map_lexmin(isl.isl_map_copy(self.ptr)) - return map(ctx=self.ctx, ptr=res) - def lexmax(self): - res = isl.isl_map_lexmax(isl.isl_map_copy(self.ptr)) - return map(ctx=self.ctx, ptr=res) - def reverse(self): - res = isl.isl_map_reverse(isl.isl_map_copy(self.ptr)) - return map(ctx=self.ctx, ptr=res) - def union(self, arg1): - try: - if not arg1.__class__ is map: - arg1 = map(arg1) - except: - return union_map(self).union(arg1) - res = isl.isl_map_union(isl.isl_map_copy(self.ptr), isl.isl_map_copy(arg1.ptr)) - return map(ctx=self.ctx, ptr=res) - def intersect_domain(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - return union_map(self).intersect_domain(arg1) - res = isl.isl_map_intersect_domain(isl.isl_map_copy(self.ptr), isl.isl_set_copy(arg1.ptr)) - return map(ctx=self.ctx, ptr=res) - def intersect_range(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - return union_map(self).intersect_range(arg1) - res = isl.isl_map_intersect_range(isl.isl_map_copy(self.ptr), isl.isl_set_copy(arg1.ptr)) - return map(ctx=self.ctx, ptr=res) - def apply_domain(self, arg1): - try: - if not arg1.__class__ is map: - arg1 = map(arg1) - except: - return union_map(self).apply_domain(arg1) - res = isl.isl_map_apply_domain(isl.isl_map_copy(self.ptr), isl.isl_map_copy(arg1.ptr)) - return map(ctx=self.ctx, ptr=res) - def apply_range(self, arg1): - try: - if not arg1.__class__ is map: - arg1 = map(arg1) - except: - return union_map(self).apply_range(arg1) - res = isl.isl_map_apply_range(isl.isl_map_copy(self.ptr), isl.isl_map_copy(arg1.ptr)) - return map(ctx=self.ctx, ptr=res) - def intersect(self, arg1): - try: - if not arg1.__class__ is map: - arg1 = map(arg1) - except: - return union_map(self).intersect(arg1) - res = isl.isl_map_intersect(isl.isl_map_copy(self.ptr), isl.isl_map_copy(arg1.ptr)) - return map(ctx=self.ctx, ptr=res) - def intersect_params(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - return union_map(self).intersect_params(arg1) - res = isl.isl_map_intersect_params(isl.isl_map_copy(self.ptr), isl.isl_set_copy(arg1.ptr)) - return map(ctx=self.ctx, ptr=res) - def subtract(self, arg1): - try: - if not arg1.__class__ is map: - arg1 = map(arg1) - except: - return union_map(self).subtract(arg1) - res = isl.isl_map_subtract(isl.isl_map_copy(self.ptr), isl.isl_map_copy(arg1.ptr)) - return map(ctx=self.ctx, ptr=res) - def deltas(self): - res = isl.isl_map_deltas(isl.isl_map_copy(self.ptr)) - return set(ctx=self.ctx, ptr=res) - def detect_equalities(self): - res = isl.isl_map_detect_equalities(isl.isl_map_copy(self.ptr)) - return map(ctx=self.ctx, ptr=res) - def affine_hull(self): - res = isl.isl_map_affine_hull(isl.isl_map_copy(self.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def polyhedral_hull(self): - res = isl.isl_map_polyhedral_hull(isl.isl_map_copy(self.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def flatten(self): - res = isl.isl_map_flatten(isl.isl_map_copy(self.ptr)) - return map(ctx=self.ctx, ptr=res) - def flatten_domain(self): - res = isl.isl_map_flatten_domain(isl.isl_map_copy(self.ptr)) - return map(ctx=self.ctx, ptr=res) - def flatten_range(self): - res = isl.isl_map_flatten_range(isl.isl_map_copy(self.ptr)) - return map(ctx=self.ctx, ptr=res) - def sample(self): - res = isl.isl_map_sample(isl.isl_map_copy(self.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def is_empty(self): - res = isl.isl_map_is_empty(self.ptr) - return res - def is_subset(self, arg1): - try: - if not arg1.__class__ is map: - arg1 = map(arg1) - except: - return union_map(self).is_subset(arg1) - res = isl.isl_map_is_subset(self.ptr, arg1.ptr) - return res - def is_strict_subset(self, arg1): - try: - if not arg1.__class__ is map: - arg1 = map(arg1) - except: - return union_map(self).is_strict_subset(arg1) - res = isl.isl_map_is_strict_subset(self.ptr, arg1.ptr) - return res - def is_equal(self, arg1): - try: - if not arg1.__class__ is map: - arg1 = map(arg1) - except: - return union_map(self).is_equal(arg1) - res = isl.isl_map_is_equal(self.ptr, arg1.ptr) - return res - def is_single_valued(self): - res = isl.isl_map_is_single_valued(self.ptr) - return res - def is_injective(self): - res = isl.isl_map_is_injective(self.ptr) - return res - def is_bijective(self): - res = isl.isl_map_is_bijective(self.ptr) - return res - def gist(self, arg1): - try: - if not arg1.__class__ is map: - arg1 = map(arg1) - except: - return union_map(self).gist(arg1) - res = isl.isl_map_gist(isl.isl_map_copy(self.ptr), isl.isl_map_copy(arg1.ptr)) - return map(ctx=self.ctx, ptr=res) - def gist_domain(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - return union_map(self).gist_domain(arg1) - res = isl.isl_map_gist_domain(isl.isl_map_copy(self.ptr), isl.isl_set_copy(arg1.ptr)) - return map(ctx=self.ctx, ptr=res) - def coalesce(self): - res = isl.isl_map_coalesce(isl.isl_map_copy(self.ptr)) - return map(ctx=self.ctx, ptr=res) - def foreach_basic_map(self, arg1): - exc_info = [None] - fn = CFUNCTYPE(c_int, c_void_p, c_void_p) - def cb_func(cb_arg0, cb_arg1): - cb_arg0 = basic_map(ctx=self.ctx, ptr=cb_arg0) - try: - arg1(cb_arg0) - except: - import sys - exc_info[0] = sys.exc_info() - return -1 - return 0 - cb = fn(cb_func) - res = isl.isl_map_foreach_basic_map(self.ptr, cb, None) - if exc_info[0] != None: - raise exc_info[0][0], exc_info[0][1], exc_info[0][2] - return res - -isl.isl_map_read_from_str.restype = c_void_p -isl.isl_map_read_from_str.argtypes = [Context, c_char_p] -isl.isl_map_from_basic_map.restype = c_void_p -isl.isl_map_from_basic_map.argtypes = [c_void_p] -isl.isl_map_lexmin.restype = c_void_p -isl.isl_map_lexmax.restype = c_void_p -isl.isl_map_reverse.restype = c_void_p -isl.isl_map_union.restype = c_void_p -isl.isl_map_intersect_domain.restype = c_void_p -isl.isl_map_intersect_range.restype = c_void_p -isl.isl_map_apply_domain.restype = c_void_p -isl.isl_map_apply_range.restype = c_void_p -isl.isl_map_intersect.restype = c_void_p -isl.isl_map_intersect_params.restype = c_void_p -isl.isl_map_subtract.restype = c_void_p -isl.isl_map_deltas.restype = c_void_p -isl.isl_map_detect_equalities.restype = c_void_p -isl.isl_map_affine_hull.restype = c_void_p -isl.isl_map_polyhedral_hull.restype = c_void_p -isl.isl_map_flatten.restype = c_void_p -isl.isl_map_flatten_domain.restype = c_void_p -isl.isl_map_flatten_range.restype = c_void_p -isl.isl_map_sample.restype = c_void_p -isl.isl_map_gist.restype = c_void_p -isl.isl_map_gist_domain.restype = c_void_p -isl.isl_map_coalesce.restype = c_void_p -isl.isl_map_free.argtypes = [c_void_p] -isl.isl_map_to_str.argtypes = [c_void_p] -isl.isl_map_to_str.restype = POINTER(c_char) - -class basic_map(map): - def __init__(self, *args, **keywords): - if "ptr" in keywords: - self.ctx = keywords["ctx"] - self.ptr = keywords["ptr"] - return - if len(args) == 1 and type(args[0]) == str: - self.ctx = Context.getDefaultInstance() - self.ptr = isl.isl_basic_map_read_from_str(self.ctx, args[0]) - return - raise Error - def __del__(self): - if hasattr(self, 'ptr'): - isl.isl_basic_map_free(self.ptr) - def __str__(self): - ptr = isl.isl_basic_map_to_str(self.ptr) - res = str(cast(ptr, c_char_p).value) - libc.free(ptr) - return res - def __repr__(self): - return 'isl.basic_map("%s")' % str(self) - def intersect_domain(self, arg1): - try: - if not arg1.__class__ is basic_set: - arg1 = basic_set(arg1) - except: - return map(self).intersect_domain(arg1) - res = isl.isl_basic_map_intersect_domain(isl.isl_basic_map_copy(self.ptr), isl.isl_basic_set_copy(arg1.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def intersect_range(self, arg1): - try: - if not arg1.__class__ is basic_set: - arg1 = basic_set(arg1) - except: - return map(self).intersect_range(arg1) - res = isl.isl_basic_map_intersect_range(isl.isl_basic_map_copy(self.ptr), isl.isl_basic_set_copy(arg1.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def intersect(self, arg1): - try: - if not arg1.__class__ is basic_map: - arg1 = basic_map(arg1) - except: - return map(self).intersect(arg1) - res = isl.isl_basic_map_intersect(isl.isl_basic_map_copy(self.ptr), isl.isl_basic_map_copy(arg1.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def union(self, arg1): - try: - if not arg1.__class__ is basic_map: - arg1 = basic_map(arg1) - except: - return map(self).union(arg1) - res = isl.isl_basic_map_union(isl.isl_basic_map_copy(self.ptr), isl.isl_basic_map_copy(arg1.ptr)) - return map(ctx=self.ctx, ptr=res) - def apply_domain(self, arg1): - try: - if not arg1.__class__ is basic_map: - arg1 = basic_map(arg1) - except: - return map(self).apply_domain(arg1) - res = isl.isl_basic_map_apply_domain(isl.isl_basic_map_copy(self.ptr), isl.isl_basic_map_copy(arg1.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def apply_range(self, arg1): - try: - if not arg1.__class__ is basic_map: - arg1 = basic_map(arg1) - except: - return map(self).apply_range(arg1) - res = isl.isl_basic_map_apply_range(isl.isl_basic_map_copy(self.ptr), isl.isl_basic_map_copy(arg1.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def affine_hull(self): - res = isl.isl_basic_map_affine_hull(isl.isl_basic_map_copy(self.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def reverse(self): - res = isl.isl_basic_map_reverse(isl.isl_basic_map_copy(self.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def sample(self): - res = isl.isl_basic_map_sample(isl.isl_basic_map_copy(self.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def detect_equalities(self): - res = isl.isl_basic_map_detect_equalities(isl.isl_basic_map_copy(self.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def is_equal(self, arg1): - try: - if not arg1.__class__ is basic_map: - arg1 = basic_map(arg1) - except: - return map(self).is_equal(arg1) - res = isl.isl_basic_map_is_equal(self.ptr, arg1.ptr) - return res - def lexmin(self): - res = isl.isl_basic_map_lexmin(isl.isl_basic_map_copy(self.ptr)) - return map(ctx=self.ctx, ptr=res) - def lexmax(self): - res = isl.isl_basic_map_lexmax(isl.isl_basic_map_copy(self.ptr)) - return map(ctx=self.ctx, ptr=res) - def is_empty(self): - res = isl.isl_basic_map_is_empty(self.ptr) - return res - def deltas(self): - res = isl.isl_basic_map_deltas(isl.isl_basic_map_copy(self.ptr)) - return basic_set(ctx=self.ctx, ptr=res) - def flatten(self): - res = isl.isl_basic_map_flatten(isl.isl_basic_map_copy(self.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def flatten_domain(self): - res = isl.isl_basic_map_flatten_domain(isl.isl_basic_map_copy(self.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def flatten_range(self): - res = isl.isl_basic_map_flatten_range(isl.isl_basic_map_copy(self.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - def gist(self, arg1): - try: - if not arg1.__class__ is basic_map: - arg1 = basic_map(arg1) - except: - return map(self).gist(arg1) - res = isl.isl_basic_map_gist(isl.isl_basic_map_copy(self.ptr), isl.isl_basic_map_copy(arg1.ptr)) - return basic_map(ctx=self.ctx, ptr=res) - -isl.isl_basic_map_read_from_str.restype = c_void_p -isl.isl_basic_map_read_from_str.argtypes = [Context, c_char_p] -isl.isl_basic_map_intersect_domain.restype = c_void_p -isl.isl_basic_map_intersect_range.restype = c_void_p -isl.isl_basic_map_intersect.restype = c_void_p -isl.isl_basic_map_union.restype = c_void_p -isl.isl_basic_map_apply_domain.restype = c_void_p -isl.isl_basic_map_apply_range.restype = c_void_p -isl.isl_basic_map_affine_hull.restype = c_void_p -isl.isl_basic_map_reverse.restype = c_void_p -isl.isl_basic_map_sample.restype = c_void_p -isl.isl_basic_map_detect_equalities.restype = c_void_p -isl.isl_basic_map_lexmin.restype = c_void_p -isl.isl_basic_map_lexmax.restype = c_void_p -isl.isl_basic_map_deltas.restype = c_void_p -isl.isl_basic_map_flatten.restype = c_void_p -isl.isl_basic_map_flatten_domain.restype = c_void_p -isl.isl_basic_map_flatten_range.restype = c_void_p -isl.isl_basic_map_gist.restype = c_void_p -isl.isl_basic_map_free.argtypes = [c_void_p] -isl.isl_basic_map_to_str.argtypes = [c_void_p] -isl.isl_basic_map_to_str.restype = POINTER(c_char) - -class union_set: - def __init__(self, *args, **keywords): - if "ptr" in keywords: - self.ctx = keywords["ctx"] - self.ptr = keywords["ptr"] - return - if len(args) == 1 and args[0].__class__ is set: - self.ctx = Context.getDefaultInstance() - self.ptr = isl.isl_union_set_from_set(isl.isl_set_copy(args[0].ptr)) - return - if len(args) == 1 and type(args[0]) == str: - self.ctx = Context.getDefaultInstance() - self.ptr = isl.isl_union_set_read_from_str(self.ctx, args[0]) - return - raise Error - def __del__(self): - if hasattr(self, 'ptr'): - isl.isl_union_set_free(self.ptr) - def __str__(self): - ptr = isl.isl_union_set_to_str(self.ptr) - res = str(cast(ptr, c_char_p).value) - libc.free(ptr) - return res - def __repr__(self): - return 'isl.union_set("%s")' % str(self) - def identity(self): - res = isl.isl_union_set_identity(isl.isl_union_set_copy(self.ptr)) - return union_map(ctx=self.ctx, ptr=res) - def detect_equalities(self): - res = isl.isl_union_set_detect_equalities(isl.isl_union_set_copy(self.ptr)) - return union_set(ctx=self.ctx, ptr=res) - def affine_hull(self): - res = isl.isl_union_set_affine_hull(isl.isl_union_set_copy(self.ptr)) - return union_set(ctx=self.ctx, ptr=res) - def polyhedral_hull(self): - res = isl.isl_union_set_polyhedral_hull(isl.isl_union_set_copy(self.ptr)) - return union_set(ctx=self.ctx, ptr=res) - def coalesce(self): - res = isl.isl_union_set_coalesce(isl.isl_union_set_copy(self.ptr)) - return union_set(ctx=self.ctx, ptr=res) - def lexmin(self): - res = isl.isl_union_set_lexmin(isl.isl_union_set_copy(self.ptr)) - return union_set(ctx=self.ctx, ptr=res) - def lexmax(self): - res = isl.isl_union_set_lexmax(isl.isl_union_set_copy(self.ptr)) - return union_set(ctx=self.ctx, ptr=res) - def subtract(self, arg1): - try: - if not arg1.__class__ is union_set: - arg1 = union_set(arg1) - except: - raise - res = isl.isl_union_set_subtract(isl.isl_union_set_copy(self.ptr), isl.isl_union_set_copy(arg1.ptr)) - return union_set(ctx=self.ctx, ptr=res) - def intersect(self, arg1): - try: - if not arg1.__class__ is union_set: - arg1 = union_set(arg1) - except: - raise - res = isl.isl_union_set_intersect(isl.isl_union_set_copy(self.ptr), isl.isl_union_set_copy(arg1.ptr)) - return union_set(ctx=self.ctx, ptr=res) - def intersect_params(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - raise - res = isl.isl_union_set_intersect_params(isl.isl_union_set_copy(self.ptr), isl.isl_set_copy(arg1.ptr)) - return union_set(ctx=self.ctx, ptr=res) - def gist(self, arg1): - try: - if not arg1.__class__ is union_set: - arg1 = union_set(arg1) - except: - raise - res = isl.isl_union_set_gist(isl.isl_union_set_copy(self.ptr), isl.isl_union_set_copy(arg1.ptr)) - return union_set(ctx=self.ctx, ptr=res) - def gist_params(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - raise - res = isl.isl_union_set_gist_params(isl.isl_union_set_copy(self.ptr), isl.isl_set_copy(arg1.ptr)) - return union_set(ctx=self.ctx, ptr=res) - def apply(self, arg1): - try: - if not arg1.__class__ is union_map: - arg1 = union_map(arg1) - except: - raise - res = isl.isl_union_set_apply(isl.isl_union_set_copy(self.ptr), isl.isl_union_map_copy(arg1.ptr)) - return union_set(ctx=self.ctx, ptr=res) - def is_empty(self): - res = isl.isl_union_set_is_empty(self.ptr) - return res - def is_subset(self, arg1): - try: - if not arg1.__class__ is union_set: - arg1 = union_set(arg1) - except: - raise - res = isl.isl_union_set_is_subset(self.ptr, arg1.ptr) - return res - def is_equal(self, arg1): - try: - if not arg1.__class__ is union_set: - arg1 = union_set(arg1) - except: - raise - res = isl.isl_union_set_is_equal(self.ptr, arg1.ptr) - return res - def is_strict_subset(self, arg1): - try: - if not arg1.__class__ is union_set: - arg1 = union_set(arg1) - except: - raise - res = isl.isl_union_set_is_strict_subset(self.ptr, arg1.ptr) - return res - def foreach_set(self, arg1): - exc_info = [None] - fn = CFUNCTYPE(c_int, c_void_p, c_void_p) - def cb_func(cb_arg0, cb_arg1): - cb_arg0 = set(ctx=self.ctx, ptr=cb_arg0) - try: - arg1(cb_arg0) - except: - import sys - exc_info[0] = sys.exc_info() - return -1 - return 0 - cb = fn(cb_func) - res = isl.isl_union_set_foreach_set(self.ptr, cb, None) - if exc_info[0] != None: - raise exc_info[0][0], exc_info[0][1], exc_info[0][2] - return res - -isl.isl_union_set_from_set.restype = c_void_p -isl.isl_union_set_from_set.argtypes = [c_void_p] -isl.isl_union_set_read_from_str.restype = c_void_p -isl.isl_union_set_read_from_str.argtypes = [Context, c_char_p] -isl.isl_union_set_identity.restype = c_void_p -isl.isl_union_set_detect_equalities.restype = c_void_p -isl.isl_union_set_affine_hull.restype = c_void_p -isl.isl_union_set_polyhedral_hull.restype = c_void_p -isl.isl_union_set_coalesce.restype = c_void_p -isl.isl_union_set_lexmin.restype = c_void_p -isl.isl_union_set_lexmax.restype = c_void_p -isl.isl_union_set_subtract.restype = c_void_p -isl.isl_union_set_intersect.restype = c_void_p -isl.isl_union_set_intersect_params.restype = c_void_p -isl.isl_union_set_gist.restype = c_void_p -isl.isl_union_set_gist_params.restype = c_void_p -isl.isl_union_set_apply.restype = c_void_p -isl.isl_union_set_free.argtypes = [c_void_p] -isl.isl_union_set_to_str.argtypes = [c_void_p] -isl.isl_union_set_to_str.restype = POINTER(c_char) - -class set(union_set): - def __init__(self, *args, **keywords): - if "ptr" in keywords: - self.ctx = keywords["ctx"] - self.ptr = keywords["ptr"] - return - if len(args) == 1 and type(args[0]) == str: - self.ctx = Context.getDefaultInstance() - self.ptr = isl.isl_set_read_from_str(self.ctx, args[0]) - return - if len(args) == 1 and args[0].__class__ is basic_set: - self.ctx = Context.getDefaultInstance() - self.ptr = isl.isl_set_from_basic_set(isl.isl_basic_set_copy(args[0].ptr)) - return - raise Error - def __del__(self): - if hasattr(self, 'ptr'): - isl.isl_set_free(self.ptr) - def __str__(self): - ptr = isl.isl_set_to_str(self.ptr) - res = str(cast(ptr, c_char_p).value) - libc.free(ptr) - return res - def __repr__(self): - return 'isl.set("%s")' % str(self) - def intersect(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - return union_set(self).intersect(arg1) - res = isl.isl_set_intersect(isl.isl_set_copy(self.ptr), isl.isl_set_copy(arg1.ptr)) - return set(ctx=self.ctx, ptr=res) - def intersect_params(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - return union_set(self).intersect_params(arg1) - res = isl.isl_set_intersect_params(isl.isl_set_copy(self.ptr), isl.isl_set_copy(arg1.ptr)) - return set(ctx=self.ctx, ptr=res) - def subtract(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - return union_set(self).subtract(arg1) - res = isl.isl_set_subtract(isl.isl_set_copy(self.ptr), isl.isl_set_copy(arg1.ptr)) - return set(ctx=self.ctx, ptr=res) - def complement(self): - res = isl.isl_set_complement(isl.isl_set_copy(self.ptr)) - return set(ctx=self.ctx, ptr=res) - def apply(self, arg1): - try: - if not arg1.__class__ is map: - arg1 = map(arg1) - except: - return union_set(self).apply(arg1) - res = isl.isl_set_apply(isl.isl_set_copy(self.ptr), isl.isl_map_copy(arg1.ptr)) - return set(ctx=self.ctx, ptr=res) - def is_empty(self): - res = isl.isl_set_is_empty(self.ptr) - return res - def is_subset(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - return union_set(self).is_subset(arg1) - res = isl.isl_set_is_subset(self.ptr, arg1.ptr) - return res - def is_strict_subset(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - return union_set(self).is_strict_subset(arg1) - res = isl.isl_set_is_strict_subset(self.ptr, arg1.ptr) - return res - def is_equal(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - return union_set(self).is_equal(arg1) - res = isl.isl_set_is_equal(self.ptr, arg1.ptr) - return res - def gist(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - return union_set(self).gist(arg1) - res = isl.isl_set_gist(isl.isl_set_copy(self.ptr), isl.isl_set_copy(arg1.ptr)) - return set(ctx=self.ctx, ptr=res) - def coalesce(self): - res = isl.isl_set_coalesce(isl.isl_set_copy(self.ptr)) - return set(ctx=self.ctx, ptr=res) - def foreach_basic_set(self, arg1): - exc_info = [None] - fn = CFUNCTYPE(c_int, c_void_p, c_void_p) - def cb_func(cb_arg0, cb_arg1): - cb_arg0 = basic_set(ctx=self.ctx, ptr=cb_arg0) - try: - arg1(cb_arg0) - except: - import sys - exc_info[0] = sys.exc_info() - return -1 - return 0 - cb = fn(cb_func) - res = isl.isl_set_foreach_basic_set(self.ptr, cb, None) - if exc_info[0] != None: - raise exc_info[0][0], exc_info[0][1], exc_info[0][2] - return res - def lexmin(self): - res = isl.isl_set_lexmin(isl.isl_set_copy(self.ptr)) - return set(ctx=self.ctx, ptr=res) - def lexmax(self): - res = isl.isl_set_lexmax(isl.isl_set_copy(self.ptr)) - return set(ctx=self.ctx, ptr=res) - def detect_equalities(self): - res = isl.isl_set_detect_equalities(isl.isl_set_copy(self.ptr)) - return set(ctx=self.ctx, ptr=res) - def affine_hull(self): - res = isl.isl_set_affine_hull(isl.isl_set_copy(self.ptr)) - return basic_set(ctx=self.ctx, ptr=res) - def polyhedral_hull(self): - res = isl.isl_set_polyhedral_hull(isl.isl_set_copy(self.ptr)) - return basic_set(ctx=self.ctx, ptr=res) - def union(self, arg1): - try: - if not arg1.__class__ is set: - arg1 = set(arg1) - except: - return union_set(self).union(arg1) - res = isl.isl_set_union(isl.isl_set_copy(self.ptr), isl.isl_set_copy(arg1.ptr)) - return set(ctx=self.ctx, ptr=res) - def identity(self): - res = isl.isl_set_identity(isl.isl_set_copy(self.ptr)) - return map(ctx=self.ctx, ptr=res) - def is_wrapping(self): - res = isl.isl_set_is_wrapping(self.ptr) - return res - def flatten(self): - res = isl.isl_set_flatten(isl.isl_set_copy(self.ptr)) - return set(ctx=self.ctx, ptr=res) - -isl.isl_set_read_from_str.restype = c_void_p -isl.isl_set_read_from_str.argtypes = [Context, c_char_p] -isl.isl_set_from_basic_set.restype = c_void_p -isl.isl_set_from_basic_set.argtypes = [c_void_p] -isl.isl_set_intersect.restype = c_void_p -isl.isl_set_intersect_params.restype = c_void_p -isl.isl_set_subtract.restype = c_void_p -isl.isl_set_complement.restype = c_void_p -isl.isl_set_apply.restype = c_void_p -isl.isl_set_gist.restype = c_void_p -isl.isl_set_coalesce.restype = c_void_p -isl.isl_set_lexmin.restype = c_void_p -isl.isl_set_lexmax.restype = c_void_p -isl.isl_set_detect_equalities.restype = c_void_p -isl.isl_set_affine_hull.restype = c_void_p -isl.isl_set_polyhedral_hull.restype = c_void_p -isl.isl_set_union.restype = c_void_p -isl.isl_set_identity.restype = c_void_p -isl.isl_set_flatten.restype = c_void_p -isl.isl_set_free.argtypes = [c_void_p] -isl.isl_set_to_str.argtypes = [c_void_p] -isl.isl_set_to_str.restype = POINTER(c_char) - -class basic_set(set): - def __init__(self, *args, **keywords): - if "ptr" in keywords: - self.ctx = keywords["ctx"] - self.ptr = keywords["ptr"] - return - if len(args) == 1 and type(args[0]) == str: - self.ctx = Context.getDefaultInstance() - self.ptr = isl.isl_basic_set_read_from_str(self.ctx, args[0]) - return - raise Error - def __del__(self): - if hasattr(self, 'ptr'): - isl.isl_basic_set_free(self.ptr) - def __str__(self): - ptr = isl.isl_basic_set_to_str(self.ptr) - res = str(cast(ptr, c_char_p).value) - libc.free(ptr) - return res - def __repr__(self): - return 'isl.basic_set("%s")' % str(self) - def gist(self, arg1): - try: - if not arg1.__class__ is basic_set: - arg1 = basic_set(arg1) - except: - return set(self).gist(arg1) - res = isl.isl_basic_set_gist(isl.isl_basic_set_copy(self.ptr), isl.isl_basic_set_copy(arg1.ptr)) - return basic_set(ctx=self.ctx, ptr=res) - def intersect(self, arg1): - try: - if not arg1.__class__ is basic_set: - arg1 = basic_set(arg1) - except: - return set(self).intersect(arg1) - res = isl.isl_basic_set_intersect(isl.isl_basic_set_copy(self.ptr), isl.isl_basic_set_copy(arg1.ptr)) - return basic_set(ctx=self.ctx, ptr=res) - def intersect_params(self, arg1): - try: - if not arg1.__class__ is basic_set: - arg1 = basic_set(arg1) - except: - return set(self).intersect_params(arg1) - res = isl.isl_basic_set_intersect_params(isl.isl_basic_set_copy(self.ptr), isl.isl_basic_set_copy(arg1.ptr)) - return basic_set(ctx=self.ctx, ptr=res) - def apply(self, arg1): - try: - if not arg1.__class__ is basic_map: - arg1 = basic_map(arg1) - except: - return set(self).apply(arg1) - res = isl.isl_basic_set_apply(isl.isl_basic_set_copy(self.ptr), isl.isl_basic_map_copy(arg1.ptr)) - return basic_set(ctx=self.ctx, ptr=res) - def affine_hull(self): - res = isl.isl_basic_set_affine_hull(isl.isl_basic_set_copy(self.ptr)) - return basic_set(ctx=self.ctx, ptr=res) - def detect_equalities(self): - res = isl.isl_basic_set_detect_equalities(isl.isl_basic_set_copy(self.ptr)) - return basic_set(ctx=self.ctx, ptr=res) - def is_equal(self, arg1): - res = isl.isl_basic_set_is_equal(self.ptr, arg1.ptr) - return res - def lexmin(self): - res = isl.isl_basic_set_lexmin(isl.isl_basic_set_copy(self.ptr)) - return set(ctx=self.ctx, ptr=res) - def lexmax(self): - res = isl.isl_basic_set_lexmax(isl.isl_basic_set_copy(self.ptr)) - return set(ctx=self.ctx, ptr=res) - def union(self, arg1): - try: - if not arg1.__class__ is basic_set: - arg1 = basic_set(arg1) - except: - return set(self).union(arg1) - res = isl.isl_basic_set_union(isl.isl_basic_set_copy(self.ptr), isl.isl_basic_set_copy(arg1.ptr)) - return set(ctx=self.ctx, ptr=res) - def is_empty(self): - res = isl.isl_basic_set_is_empty(self.ptr) - return res - def is_wrapping(self): - res = isl.isl_basic_set_is_wrapping(self.ptr) - return res - def flatten(self): - res = isl.isl_basic_set_flatten(isl.isl_basic_set_copy(self.ptr)) - return basic_set(ctx=self.ctx, ptr=res) - -isl.isl_basic_set_read_from_str.restype = c_void_p -isl.isl_basic_set_read_from_str.argtypes = [Context, c_char_p] -isl.isl_basic_set_gist.restype = c_void_p -isl.isl_basic_set_intersect.restype = c_void_p -isl.isl_basic_set_intersect_params.restype = c_void_p -isl.isl_basic_set_apply.restype = c_void_p -isl.isl_basic_set_affine_hull.restype = c_void_p -isl.isl_basic_set_detect_equalities.restype = c_void_p -isl.isl_basic_set_lexmin.restype = c_void_p -isl.isl_basic_set_lexmax.restype = c_void_p -isl.isl_basic_set_union.restype = c_void_p -isl.isl_basic_set_flatten.restype = c_void_p -isl.isl_basic_set_free.argtypes = [c_void_p] -isl.isl_basic_set_to_str.argtypes = [c_void_p] -isl.isl_basic_set_to_str.restype = POINTER(c_char) - -class pw_qpolynomial: - def __init__(self, *args, **keywords): - if "ptr" in keywords: - self.ctx = keywords["ctx"] - self.ptr = keywords["ptr"] - return - raise Error - def __del__(self): - if hasattr(self, 'ptr'): - isl.isl_pw_qpolynomial_free(self.ptr) - def __str__(self): - ptr = isl.isl_pw_qpolynomial_to_str(self.ptr) - res = str(cast(ptr, c_char_p).value) - libc.free(ptr) - return res - def __repr__(self): - return 'isl.pw_qpolynomial("%s")' % str(self) - -isl.isl_pw_qpolynomial_free.argtypes = [c_void_p] -isl.isl_pw_qpolynomial_to_str.argtypes = [c_void_p] -isl.isl_pw_qpolynomial_to_str.restype = POINTER(c_char) - -class union_pw_qpolynomial: - def __init__(self, *args, **keywords): - if "ptr" in keywords: - self.ctx = keywords["ctx"] - self.ptr = keywords["ptr"] - return - raise Error - def __del__(self): - if hasattr(self, 'ptr'): - isl.isl_union_pw_qpolynomial_free(self.ptr) - def __str__(self): - ptr = isl.isl_union_pw_qpolynomial_to_str(self.ptr) - res = str(cast(ptr, c_char_p).value) - libc.free(ptr) - return res - def __repr__(self): - return 'isl.union_pw_qpolynomial("%s")' % str(self) - -isl.isl_union_pw_qpolynomial_free.argtypes = [c_void_p] -isl.isl_union_pw_qpolynomial_to_str.argtypes = [c_void_p] -isl.isl_union_pw_qpolynomial_to_str.restype = POINTER(c_char) diff --git a/cloog-0.17.0/isl/interface/python.cc b/cloog-0.17.0/isl/interface/python.cc deleted file mode 100644 index 784b4be..0000000 --- a/cloog-0.17.0/isl/interface/python.cc +++ /dev/null @@ -1,515 +0,0 @@ -/* - * Copyright 2011 Sven Verdoolaege. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY SVEN VERDOOLAEGE ''AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SVEN VERDOOLAEGE OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation - * are those of the authors and should not be interpreted as - * representing official policies, either expressed or implied, of - * Sven Verdoolaege. - */ - -#include -#include -#include -#include "extract_interface.h" -#include "python.h" - -/* Is the given type declaration marked as being a subtype of some other - * type? If so, return that other type in "super". - */ -static bool is_subclass(RecordDecl *decl, string &super) -{ - if (!decl->hasAttrs()) - return false; - - string sub = "isl_subclass"; - size_t len = sub.length(); - AttrVec attrs = decl->getAttrs(); - for (AttrVec::const_iterator i = attrs.begin() ; i != attrs.end(); ++i) { - const AnnotateAttr *ann = dyn_cast(*i); - if (!ann) - continue; - string s = ann->getAnnotation().str(); - if (s.substr(0, len) == sub) { - super = s.substr(len + 1, s.length() - len - 2); - return true; - } - } - - return false; -} - -/* Is decl marked as a constructor? - */ -static bool is_constructor(Decl *decl) -{ - return has_annotation(decl, "isl_constructor"); -} - -/* Is decl marked as consuming a reference? - */ -static bool takes(Decl *decl) -{ - return has_annotation(decl, "isl_take"); -} - -/* isl_class collects all constructors and methods for an isl "class". - * "name" is the name of the class. - * "type" is the declaration that introduces the type. - */ -struct isl_class { - string name; - RecordDecl *type; - set constructors; - set methods; - - void print(map &classes, set &done); - void print_constructor(FunctionDecl *method); - void print_method(FunctionDecl *method, bool subclass, string super); -}; - -/* Return the class that has a name that matches the initial part - * of the namd of function "fd". - */ -static isl_class &method2class(map &classes, - FunctionDecl *fd) -{ - string best; - map::iterator ci; - string name = fd->getNameAsString(); - - for (ci = classes.begin(); ci != classes.end(); ++ci) { - if (name.substr(0, ci->first.length()) == ci->first) - best = ci->first; - } - - return classes[best]; -} - -/* Is "type" the type "isl_ctx *"? - */ -static bool is_isl_ctx(QualType type) -{ - if (!type->isPointerType()) - return 0; - type = type->getPointeeType(); - if (type.getAsString() != "isl_ctx") - return false; - - return true; -} - -/* Is the first argument of "fd" of type "isl_ctx *"? - */ -static bool first_arg_is_isl_ctx(FunctionDecl *fd) -{ - ParmVarDecl *param; - - if (fd->getNumParams() < 1) - return false; - - param = fd->getParamDecl(0); - return is_isl_ctx(param->getOriginalType()); -} - -/* Is "type" that of a pointer to an isl_* structure? - */ -static bool is_isl_type(QualType type) -{ - if (type->isPointerType()) { - string s = type->getPointeeType().getAsString(); - return s.substr(0, 4) == "isl_"; - } - - return false; -} - -/* Is "type" that of a pointer to a function? - */ -static bool is_callback(QualType type) -{ - if (!type->isPointerType()) - return false; - type = type->getPointeeType(); - return type->isFunctionType(); -} - -/* Is "type" that of "char *" of "const char *"? - */ -static bool is_string(QualType type) -{ - if (type->isPointerType()) { - string s = type->getPointeeType().getAsString(); - return s == "const char" || s == "char"; - } - - return false; -} - -/* Return the name of the type that "type" points to. - * The input "type" is assumed to be a pointer type. - */ -static string extract_type(QualType type) -{ - if (type->isPointerType()) - return type->getPointeeType().getAsString(); - assert(0); -} - -/* Drop the "isl_" initial part of the type name "name". - */ -static string type2python(string name) -{ - return name.substr(4); -} - -/* Construct a wrapper for a callback argument (at position "arg"). - * Assign the wrapper to "cb". We assume here that a function call - * has at most one callback argument. - * - * The wrapper converts the arguments of the callback to python types. - * If any exception is thrown, the wrapper keeps track of it in exc_info[0] - * and returns -1. Otherwise the wrapper returns 0. - */ -static void print_callback(QualType type, int arg) -{ - const FunctionProtoType *fn = type->getAs(); - unsigned n_arg = fn->getNumArgs(); - - printf(" exc_info = [None]\n"); - printf(" fn = CFUNCTYPE(c_int"); - for (int i = 0; i < n_arg - 1; ++i) { - QualType arg_type = fn->getArgType(i); - assert(is_isl_type(arg_type)); - printf(", c_void_p"); - } - printf(", c_void_p)\n"); - printf(" def cb_func("); - for (int i = 0; i < n_arg; ++i) { - if (i) - printf(", "); - printf("cb_arg%d", i); - } - printf("):\n"); - for (int i = 0; i < n_arg - 1; ++i) { - string arg_type; - arg_type = type2python(extract_type(fn->getArgType(i))); - printf(" cb_arg%d = %s(ctx=self.ctx, ptr=cb_arg%d)\n", - i, arg_type.c_str(), i); - } - printf(" try:\n"); - printf(" arg%d(", arg); - for (int i = 0; i < n_arg - 1; ++i) { - if (i) - printf(", "); - printf("cb_arg%d", i); - } - printf(")\n"); - printf(" except:\n"); - printf(" import sys\n"); - printf(" exc_info[0] = sys.exc_info()\n"); - printf(" return -1\n"); - printf(" return 0\n"); - printf(" cb = fn(cb_func)\n"); -} - -/* Print a python method corresponding to the C function "method". - * "subclass" is set if the method belongs to a class that is a subclass - * of some other class ("super"). - * - * If the function has a callback argument, then it also has a "user" - * argument. Since Python has closures, there is no need for such - * a user argument in the Python interface, so we simply drop it. - * We also create a wrapper ("cb") for the callback. - * - * If the function has additional arguments that refer to isl structures, - * then we check if the actual arguments are of the right type. - * If not, we try to convert it to the right type. - * It that doesn't work and if subclass is set, we try to convert self - * to the type of the superclass and call the corresponding method. - * - * If the function consumes a reference, then we pass it a copy of - * the actual argument. - */ -void isl_class::print_method(FunctionDecl *method, bool subclass, string super) -{ - string fullname = method->getName(); - string cname = fullname.substr(name.length() + 1); - int num_params = method->getNumParams(); - int drop_user = 0; - - for (int i = 1; i < num_params; ++i) { - ParmVarDecl *param = method->getParamDecl(i); - QualType type = param->getOriginalType(); - if (is_callback(type)) - drop_user = 1; - } - - printf(" def %s(self", cname.c_str()); - for (int i = 1; i < num_params - drop_user; ++i) - printf(", arg%d", i); - printf("):\n"); - - for (int i = 1; i < num_params; ++i) { - ParmVarDecl *param = method->getParamDecl(i); - string type; - if (!is_isl_type(param->getOriginalType())) - continue; - type = type2python(extract_type(param->getOriginalType())); - printf(" try:\n"); - printf(" if not arg%d.__class__ is %s:\n", - i, type.c_str()); - printf(" arg%d = %s(arg%d)\n", - i, type.c_str(), i); - printf(" except:\n"); - if (subclass) { - printf(" return %s(self).%s(", - type2python(super).c_str(), cname.c_str()); - for (int i = 1; i < num_params - drop_user; ++i) { - if (i != 1) - printf(", "); - printf("arg%d", i); - } - printf(")\n"); - } else - printf(" raise\n"); - } - for (int i = 1; i < num_params; ++i) { - ParmVarDecl *param = method->getParamDecl(i); - QualType type = param->getOriginalType(); - if (!is_callback(type)) - continue; - print_callback(type->getPointeeType(), i); - } - printf(" res = isl.%s(", fullname.c_str()); - if (takes(method->getParamDecl(0))) - printf("isl.%s_copy(self.ptr)", name.c_str()); - else - printf("self.ptr"); - for (int i = 1; i < num_params - drop_user; ++i) { - ParmVarDecl *param = method->getParamDecl(i); - QualType type = param->getOriginalType(); - if (is_callback(type)) - printf(", cb"); - else if (takes(param)) { - string type_s = extract_type(type); - printf(", isl.%s_copy(arg%d.ptr)", type_s.c_str(), i); - } else - printf(", arg%d.ptr", i); - } - if (drop_user) - printf(", None"); - printf(")\n"); - - if (is_isl_type(method->getResultType())) { - string type; - type = type2python(extract_type(method->getResultType())); - printf(" return %s(ctx=self.ctx, ptr=res)\n", - type.c_str()); - } else { - if (drop_user) { - printf(" if exc_info[0] != None:\n"); - printf(" raise exc_info[0][0], " - "exc_info[0][1], exc_info[0][2]\n"); - } - printf(" return res\n"); - } -} - -/* Print part of the constructor for this isl_class. - * - * In particular, check if the actual arguments correspond to the - * formal arguments of "cons" and if so call "cons" and put the - * result in self.ptr and a reference to the default context in self.ctx. - * - * If the function consumes a reference, then we pass it a copy of - * the actual argument. - */ -void isl_class::print_constructor(FunctionDecl *cons) -{ - string fullname = cons->getName(); - string cname = fullname.substr(name.length() + 1); - int num_params = cons->getNumParams(); - int drop_ctx = first_arg_is_isl_ctx(cons); - - printf(" if len(args) == %d", num_params - drop_ctx); - for (int i = drop_ctx; i < num_params; ++i) { - ParmVarDecl *param = cons->getParamDecl(i); - if (is_isl_type(param->getOriginalType())) { - string type; - type = extract_type(param->getOriginalType()); - type = type2python(type); - printf(" and args[%d].__class__ is %s", - i - drop_ctx, type.c_str()); - } else - printf(" and type(args[%d]) == str", i - drop_ctx); - } - printf(":\n"); - printf(" self.ctx = Context.getDefaultInstance()\n"); - printf(" self.ptr = isl.%s(", fullname.c_str()); - if (drop_ctx) - printf("self.ctx"); - for (int i = drop_ctx; i < num_params; ++i) { - ParmVarDecl *param = cons->getParamDecl(i); - if (i) - printf(", "); - if (is_isl_type(param->getOriginalType())) { - if (takes(param)) { - string type; - type = extract_type(param->getOriginalType()); - printf("isl.%s_copy(args[%d].ptr)", - type.c_str(), i - drop_ctx); - } else - printf("args[%d].ptr", i - drop_ctx); - } else - printf("args[%d]", i - drop_ctx); - } - printf(")\n"); - printf(" return\n"); -} - -/* Print out the definition of this isl_class. - * - * We first check if this isl_class is a subclass of some other class. - * If it is, we make sure the superclass is printed out first. - * - * Then we print a constructor with several cases, one for constructing - * a Python object from a return value and one for each function that - * was marked as a constructor. - * - * Next, we print out some common methods and the methods corresponding - * to functions that are not marked as constructors. - * - * Finally, we tell ctypes about the types of the arguments of the - * constructor functions and the return types of those function returning - * an isl object. - */ -void isl_class::print(map &classes, set &done) -{ - string super; - string p_name = type2python(name); - set::iterator in; - bool subclass = is_subclass(type, super); - - if (subclass && done.find(super) == done.end()) - classes[super].print(classes, done); - done.insert(name); - - printf("\n"); - printf("class %s", p_name.c_str()); - if (subclass) - printf("(%s)", type2python(super).c_str()); - printf(":\n"); - printf(" def __init__(self, *args, **keywords):\n"); - - printf(" if \"ptr\" in keywords:\n"); - printf(" self.ctx = keywords[\"ctx\"]\n"); - printf(" self.ptr = keywords[\"ptr\"]\n"); - printf(" return\n"); - - for (in = constructors.begin(); in != constructors.end(); ++in) - print_constructor(*in); - printf(" raise Error\n"); - printf(" def __del__(self):\n"); - printf(" if hasattr(self, 'ptr'):\n"); - printf(" isl.%s_free(self.ptr)\n", name.c_str()); - printf(" def __str__(self):\n"); - printf(" ptr = isl.%s_to_str(self.ptr)\n", name.c_str()); - printf(" res = str(cast(ptr, c_char_p).value)\n"); - printf(" libc.free(ptr)\n"); - printf(" return res\n"); - printf(" def __repr__(self):\n"); - printf(" return 'isl.%s(\"%%s\")' %% str(self)\n", p_name.c_str()); - - for (in = methods.begin(); in != methods.end(); ++in) - print_method(*in, subclass, super); - - printf("\n"); - for (in = constructors.begin(); in != constructors.end(); ++in) { - string fullname = (*in)->getName(); - printf("isl.%s.restype = c_void_p\n", fullname.c_str()); - printf("isl.%s.argtypes = [", fullname.c_str()); - for (int i = 0; i < (*in)->getNumParams(); ++i) { - ParmVarDecl *param = (*in)->getParamDecl(i); - QualType type = param->getOriginalType(); - if (i) - printf(", "); - if (is_isl_ctx(type)) - printf("Context"); - else if (is_isl_type(type)) - printf("c_void_p"); - else if (is_string(type)) - printf("c_char_p"); - else - printf("c_int"); - } - printf("]\n"); - } - for (in = methods.begin(); in != methods.end(); ++in) { - string fullname = (*in)->getName(); - if (is_isl_type((*in)->getResultType())) - printf("isl.%s.restype = c_void_p\n", fullname.c_str()); - } - printf("isl.%s_free.argtypes = [c_void_p]\n", name.c_str()); - printf("isl.%s_to_str.argtypes = [c_void_p]\n", name.c_str()); - printf("isl.%s_to_str.restype = POINTER(c_char)\n", name.c_str()); -} - -/* Generate a python interface based on the extracted types and functions. - * We first collect all functions that belong to a certain type, - * separating constructors from regular methods. - * - * Then we print out each class in turn. If one of these is a subclass - * of some other class, it will make sure the superclass is printed out first. - */ -void generate_python(set &types, set functions) -{ - map classes; - map::iterator ci; - set done; - - set::iterator it; - for (it = types.begin(); it != types.end(); ++it) { - RecordDecl *decl = *it; - string name = decl->getName(); - classes[name].name = name; - classes[name].type = decl; - } - - set::iterator in; - for (in = functions.begin(); in != functions.end(); ++in) { - isl_class &c = method2class(classes, *in); - if (is_constructor(*in)) - c.constructors.insert(*in); - else - c.methods.insert(*in); - } - - for (ci = classes.begin(); ci != classes.end(); ++ci) { - if (done.find(ci->first) == done.end()) - ci->second.print(classes, done); - } -} diff --git a/cloog-0.17.0/isl/interface/python.h b/cloog-0.17.0/isl/interface/python.h deleted file mode 100644 index 0f6e8ec..0000000 --- a/cloog-0.17.0/isl/interface/python.h +++ /dev/null @@ -1,7 +0,0 @@ -#include -#include - -using namespace std; -using namespace clang; - -void generate_python(set &types, set functions); diff --git a/cloog-0.17.0/isl/isl.py b/cloog-0.17.0/isl/isl.py deleted file mode 100644 index 6382f63..0000000 --- a/cloog-0.17.0/isl/isl.py +++ /dev/null @@ -1,100 +0,0 @@ -import gdb -import re - -# GDB Pretty Printers for most isl objects -class IslObjectPrinter: - """Print an isl object""" - def __init__ (self, val, type): - self.val = val - self.type = type - - def to_string (self): - # Cast val to a void pointer to stop gdb using this pretty - # printer for the pointer which would lead to an infinite loop. - void_ptr = gdb.lookup_type('void').pointer() - value = str(self.val.cast(void_ptr)) - printer = gdb.parse_and_eval("isl_printer_to_str(isl_" - + str(self.type) - + "_get_ctx(" + value + "))") - printer = gdb.parse_and_eval("isl_printer_print_" - + str(self.type) + "(" - + str(printer) + ", " - + value + ")") - string = gdb.parse_and_eval("(char*)isl_printer_get_str(" - + str(printer) + ")") - gdb.parse_and_eval("isl_printer_free(" + str(printer) + ")") - return string - - def display_hint (self): - return 'string' - -class IslIntPrinter: - """Print an isl_int """ - def __init__ (self, val): - self.val = val - - def to_string (self): - # Cast val to a void pointer to stop gdb using this pretty - # printer for the pointer which would lead to an infinite loop. - void_ptr = gdb.lookup_type('void').pointer() - value = str(self.val.cast(void_ptr)) - - context = gdb.parse_and_eval("isl_ctx_alloc()") - printer = gdb.parse_and_eval("isl_printer_to_str(" - + str(context) + ")") - printer = gdb.parse_and_eval("isl_printer_print_isl_int(" - + str(printer) + ", " - + value + ")") - string = gdb.parse_and_eval("(char*)isl_printer_get_str(" - + str(printer) + ")") - gdb.parse_and_eval("isl_printer_free(" + str(printer) + ")") - gdb.parse_and_eval("isl_ctx_free(" + str(context) + ")") - return string - - def display_hint (self): - return 'string' - -class IslPrintCommand (gdb.Command): - """Print an isl value.""" - def __init__ (self): - super (IslPrintCommand, self).__init__ ("islprint", - gdb.COMMAND_OBSCURE) - def invoke (self, arg, from_tty): - arg = gdb.parse_and_eval(arg); - printer = str_lookup_function(arg) - - if printer == None: - print "No isl printer for this type" - return - - print printer.to_string() - -IslPrintCommand() - -def str_lookup_function (val): - if val.type.code != gdb.TYPE_CODE_PTR: - if str(val.type) == "isl_int": - return IslIntPrinter(val) - else: - return None - - lookup_tag = val.type.target() - regex = re.compile ("^isl_(.*)$") - - if lookup_tag == None: - return None - - m = regex.match (str(lookup_tag)) - - if m: - # Those types of printers defined in isl. - if m.group(1) in ["basic_set", "set", "union_set", "basic_map", - "map", "union_map", "qpolynomial", - "pw_qpolynomial", "pw_qpolynomial_fold", - "union_pw_qpolynomial", - "union_pw_qpolynomial_fold"]: - return IslObjectPrinter(val, m.group(1)) - return None - -# Do not register the pretty printer. -# gdb.current_objfile().pretty_printers.append(str_lookup_function) diff --git a/cloog-0.17.0/isl/isl_aff.c b/cloog-0.17.0/isl/isl_aff.c deleted file mode 100644 index 173ccf0..0000000 --- a/cloog-0.17.0/isl/isl_aff.c +++ /dev/null @@ -1,2516 +0,0 @@ -/* - * Copyright 2011 INRIA Saclay - * Copyright 2011 Sven Verdoolaege - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -__isl_give isl_aff *isl_aff_alloc_vec(__isl_take isl_local_space *ls, - __isl_take isl_vec *v) -{ - isl_aff *aff; - - if (!ls || !v) - goto error; - - aff = isl_calloc_type(v->ctx, struct isl_aff); - if (!aff) - goto error; - - aff->ref = 1; - aff->ls = ls; - aff->v = v; - - return aff; -error: - isl_local_space_free(ls); - isl_vec_free(v); - return NULL; -} - -__isl_give isl_aff *isl_aff_alloc(__isl_take isl_local_space *ls) -{ - isl_ctx *ctx; - isl_vec *v; - unsigned total; - - if (!ls) - return NULL; - - ctx = isl_local_space_get_ctx(ls); - if (!isl_local_space_divs_known(ls)) - isl_die(ctx, isl_error_invalid, "local space has unknown divs", - goto error); - if (!isl_local_space_is_set(ls)) - isl_die(ctx, isl_error_invalid, - "domain of affine expression should be a set", - goto error); - - total = isl_local_space_dim(ls, isl_dim_all); - v = isl_vec_alloc(ctx, 1 + 1 + total); - return isl_aff_alloc_vec(ls, v); -error: - isl_local_space_free(ls); - return NULL; -} - -__isl_give isl_aff *isl_aff_zero_on_domain(__isl_take isl_local_space *ls) -{ - isl_aff *aff; - - aff = isl_aff_alloc(ls); - if (!aff) - return NULL; - - isl_int_set_si(aff->v->el[0], 1); - isl_seq_clr(aff->v->el + 1, aff->v->size - 1); - - return aff; -} - -__isl_give isl_aff *isl_aff_copy(__isl_keep isl_aff *aff) -{ - if (!aff) - return NULL; - - aff->ref++; - return aff; -} - -__isl_give isl_aff *isl_aff_dup(__isl_keep isl_aff *aff) -{ - if (!aff) - return NULL; - - return isl_aff_alloc_vec(isl_local_space_copy(aff->ls), - isl_vec_copy(aff->v)); -} - -__isl_give isl_aff *isl_aff_cow(__isl_take isl_aff *aff) -{ - if (!aff) - return NULL; - - if (aff->ref == 1) - return aff; - aff->ref--; - return isl_aff_dup(aff); -} - -void *isl_aff_free(__isl_take isl_aff *aff) -{ - if (!aff) - return NULL; - - if (--aff->ref > 0) - return NULL; - - isl_local_space_free(aff->ls); - isl_vec_free(aff->v); - - free(aff); - - return NULL; -} - -isl_ctx *isl_aff_get_ctx(__isl_keep isl_aff *aff) -{ - return aff ? isl_local_space_get_ctx(aff->ls) : NULL; -} - -/* Externally, an isl_aff has a map space, but internally, the - * ls field corresponds to the domain of that space. - */ -int isl_aff_dim(__isl_keep isl_aff *aff, enum isl_dim_type type) -{ - if (!aff) - return 0; - if (type == isl_dim_out) - return 1; - if (type == isl_dim_in) - type = isl_dim_set; - return isl_local_space_dim(aff->ls, type); -} - -__isl_give isl_space *isl_aff_get_domain_space(__isl_keep isl_aff *aff) -{ - return aff ? isl_local_space_get_space(aff->ls) : NULL; -} - -__isl_give isl_space *isl_aff_get_space(__isl_keep isl_aff *aff) -{ - isl_space *space; - if (!aff) - return NULL; - space = isl_local_space_get_space(aff->ls); - space = isl_space_from_domain(space); - space = isl_space_add_dims(space, isl_dim_out, 1); - return space; -} - -__isl_give isl_local_space *isl_aff_get_domain_local_space( - __isl_keep isl_aff *aff) -{ - return aff ? isl_local_space_copy(aff->ls) : NULL; -} - -__isl_give isl_local_space *isl_aff_get_local_space(__isl_keep isl_aff *aff) -{ - isl_local_space *ls; - if (!aff) - return NULL; - ls = isl_local_space_copy(aff->ls); - ls = isl_local_space_from_domain(ls); - ls = isl_local_space_add_dims(ls, isl_dim_out, 1); - return ls; -} - -/* Externally, an isl_aff has a map space, but internally, the - * ls field corresponds to the domain of that space. - */ -const char *isl_aff_get_dim_name(__isl_keep isl_aff *aff, - enum isl_dim_type type, unsigned pos) -{ - if (!aff) - return NULL; - if (type == isl_dim_out) - return NULL; - if (type == isl_dim_in) - type = isl_dim_set; - return isl_local_space_get_dim_name(aff->ls, type, pos); -} - -__isl_give isl_aff *isl_aff_reset_domain_space(__isl_take isl_aff *aff, - __isl_take isl_space *dim) -{ - aff = isl_aff_cow(aff); - if (!aff || !dim) - goto error; - - aff->ls = isl_local_space_reset_space(aff->ls, dim); - if (!aff->ls) - return isl_aff_free(aff); - - return aff; -error: - isl_aff_free(aff); - isl_space_free(dim); - return NULL; -} - -/* Reset the space of "aff". This function is called from isl_pw_templ.c - * and doesn't know if the space of an element object is represented - * directly or through its domain. It therefore passes along both. - */ -__isl_give isl_aff *isl_aff_reset_space_and_domain(__isl_take isl_aff *aff, - __isl_take isl_space *space, __isl_take isl_space *domain) -{ - isl_space_free(space); - return isl_aff_reset_domain_space(aff, domain); -} - -/* Reorder the coefficients of the affine expression based - * on the given reodering. - * The reordering r is assumed to have been extended with the local - * variables. - */ -static __isl_give isl_vec *vec_reorder(__isl_take isl_vec *vec, - __isl_take isl_reordering *r, int n_div) -{ - isl_vec *res; - int i; - - if (!vec || !r) - goto error; - - res = isl_vec_alloc(vec->ctx, - 2 + isl_space_dim(r->dim, isl_dim_all) + n_div); - isl_seq_cpy(res->el, vec->el, 2); - isl_seq_clr(res->el + 2, res->size - 2); - for (i = 0; i < r->len; ++i) - isl_int_set(res->el[2 + r->pos[i]], vec->el[2 + i]); - - isl_reordering_free(r); - isl_vec_free(vec); - return res; -error: - isl_vec_free(vec); - isl_reordering_free(r); - return NULL; -} - -/* Reorder the dimensions of the domain of "aff" according - * to the given reordering. - */ -__isl_give isl_aff *isl_aff_realign_domain(__isl_take isl_aff *aff, - __isl_take isl_reordering *r) -{ - aff = isl_aff_cow(aff); - if (!aff) - goto error; - - r = isl_reordering_extend(r, aff->ls->div->n_row); - aff->v = vec_reorder(aff->v, isl_reordering_copy(r), - aff->ls->div->n_row); - aff->ls = isl_local_space_realign(aff->ls, r); - - if (!aff->v || !aff->ls) - return isl_aff_free(aff); - - return aff; -error: - isl_aff_free(aff); - isl_reordering_free(r); - return NULL; -} - -int isl_aff_plain_is_zero(__isl_keep isl_aff *aff) -{ - if (!aff) - return -1; - - return isl_seq_first_non_zero(aff->v->el + 1, aff->v->size - 1) < 0; -} - -int isl_aff_plain_is_equal(__isl_keep isl_aff *aff1, __isl_keep isl_aff *aff2) -{ - int equal; - - if (!aff1 || !aff2) - return -1; - - equal = isl_local_space_is_equal(aff1->ls, aff2->ls); - if (equal < 0 || !equal) - return equal; - - return isl_vec_is_equal(aff1->v, aff2->v); -} - -int isl_aff_get_denominator(__isl_keep isl_aff *aff, isl_int *v) -{ - if (!aff) - return -1; - isl_int_set(*v, aff->v->el[0]); - return 0; -} - -int isl_aff_get_constant(__isl_keep isl_aff *aff, isl_int *v) -{ - if (!aff) - return -1; - isl_int_set(*v, aff->v->el[1]); - return 0; -} - -int isl_aff_get_coefficient(__isl_keep isl_aff *aff, - enum isl_dim_type type, int pos, isl_int *v) -{ - if (!aff) - return -1; - - if (type == isl_dim_out) - isl_die(aff->v->ctx, isl_error_invalid, - "output/set dimension does not have a coefficient", - return -1); - if (type == isl_dim_in) - type = isl_dim_set; - - if (pos >= isl_local_space_dim(aff->ls, type)) - isl_die(aff->v->ctx, isl_error_invalid, - "position out of bounds", return -1); - - pos += isl_local_space_offset(aff->ls, type); - isl_int_set(*v, aff->v->el[1 + pos]); - - return 0; -} - -__isl_give isl_aff *isl_aff_set_denominator(__isl_take isl_aff *aff, isl_int v) -{ - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - isl_int_set(aff->v->el[0], v); - - return aff; -} - -__isl_give isl_aff *isl_aff_set_constant(__isl_take isl_aff *aff, isl_int v) -{ - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - isl_int_set(aff->v->el[1], v); - - return aff; -} - -__isl_give isl_aff *isl_aff_add_constant(__isl_take isl_aff *aff, isl_int v) -{ - if (isl_int_is_zero(v)) - return aff; - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - isl_int_addmul(aff->v->el[1], aff->v->el[0], v); - - return aff; -} - -__isl_give isl_aff *isl_aff_add_constant_si(__isl_take isl_aff *aff, int v) -{ - isl_int t; - - isl_int_init(t); - isl_int_set_si(t, v); - aff = isl_aff_add_constant(aff, t); - isl_int_clear(t); - - return aff; -} - -__isl_give isl_aff *isl_aff_set_constant_si(__isl_take isl_aff *aff, int v) -{ - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - isl_int_set_si(aff->v->el[1], v); - - return aff; -} - -__isl_give isl_aff *isl_aff_set_coefficient(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, isl_int v) -{ - if (!aff) - return NULL; - - if (type == isl_dim_out) - isl_die(aff->v->ctx, isl_error_invalid, - "output/set dimension does not have a coefficient", - return isl_aff_free(aff)); - if (type == isl_dim_in) - type = isl_dim_set; - - if (pos >= isl_local_space_dim(aff->ls, type)) - isl_die(aff->v->ctx, isl_error_invalid, - "position out of bounds", return isl_aff_free(aff)); - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - pos += isl_local_space_offset(aff->ls, type); - isl_int_set(aff->v->el[1 + pos], v); - - return aff; -} - -__isl_give isl_aff *isl_aff_set_coefficient_si(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, int v) -{ - if (!aff) - return NULL; - - if (type == isl_dim_out) - isl_die(aff->v->ctx, isl_error_invalid, - "output/set dimension does not have a coefficient", - return isl_aff_free(aff)); - if (type == isl_dim_in) - type = isl_dim_set; - - if (pos >= isl_local_space_dim(aff->ls, type)) - isl_die(aff->v->ctx, isl_error_invalid, - "position out of bounds", return isl_aff_free(aff)); - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - pos += isl_local_space_offset(aff->ls, type); - isl_int_set_si(aff->v->el[1 + pos], v); - - return aff; -} - -__isl_give isl_aff *isl_aff_add_coefficient(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, isl_int v) -{ - if (!aff) - return NULL; - - if (type == isl_dim_out) - isl_die(aff->v->ctx, isl_error_invalid, - "output/set dimension does not have a coefficient", - return isl_aff_free(aff)); - if (type == isl_dim_in) - type = isl_dim_set; - - if (pos >= isl_local_space_dim(aff->ls, type)) - isl_die(aff->v->ctx, isl_error_invalid, - "position out of bounds", return isl_aff_free(aff)); - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - pos += isl_local_space_offset(aff->ls, type); - isl_int_addmul(aff->v->el[1 + pos], aff->v->el[0], v); - - return aff; -} - -__isl_give isl_aff *isl_aff_add_coefficient_si(__isl_take isl_aff *aff, - enum isl_dim_type type, int pos, int v) -{ - isl_int t; - - isl_int_init(t); - isl_int_set_si(t, v); - aff = isl_aff_add_coefficient(aff, type, pos, t); - isl_int_clear(t); - - return aff; -} - -__isl_give isl_aff *isl_aff_get_div(__isl_keep isl_aff *aff, int pos) -{ - if (!aff) - return NULL; - - return isl_local_space_get_div(aff->ls, pos); -} - -__isl_give isl_aff *isl_aff_neg(__isl_take isl_aff *aff) -{ - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - isl_seq_neg(aff->v->el + 1, aff->v->el + 1, aff->v->size - 1); - - return aff; -} - -__isl_give isl_aff *isl_aff_normalize(__isl_take isl_aff *aff) -{ - if (!aff) - return NULL; - aff->v = isl_vec_normalize(aff->v); - if (!aff->v) - return isl_aff_free(aff); - return aff; -} - -/* Given f, return floor(f). - * If f is an integer expression, then just return f. - * Otherwise, if f = g/m, write g = q m + r, - * create a new div d = [r/m] and return the expression q + d. - * The coefficients in r are taken to lie between -m/2 and m/2. - */ -__isl_give isl_aff *isl_aff_floor(__isl_take isl_aff *aff) -{ - int i; - int size; - isl_ctx *ctx; - isl_vec *div; - - if (!aff) - return NULL; - - if (isl_int_is_one(aff->v->el[0])) - return aff; - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->v = isl_vec_cow(aff->v); - div = isl_vec_copy(aff->v); - div = isl_vec_cow(div); - if (!div) - return isl_aff_free(aff); - - ctx = isl_aff_get_ctx(aff); - isl_int_fdiv_q(aff->v->el[0], aff->v->el[0], ctx->two); - for (i = 1; i < aff->v->size; ++i) { - isl_int_fdiv_r(div->el[i], div->el[i], div->el[0]); - isl_int_fdiv_q(aff->v->el[i], aff->v->el[i], div->el[0]); - if (isl_int_gt(div->el[i], aff->v->el[0])) { - isl_int_sub(div->el[i], div->el[i], div->el[0]); - isl_int_add_ui(aff->v->el[i], aff->v->el[i], 1); - } - } - - aff->ls = isl_local_space_add_div(aff->ls, div); - if (!aff->ls) - return isl_aff_free(aff); - - size = aff->v->size; - aff->v = isl_vec_extend(aff->v, size + 1); - if (!aff->v) - return isl_aff_free(aff); - isl_int_set_si(aff->v->el[0], 1); - isl_int_set_si(aff->v->el[size], 1); - - return aff; -} - -/* Compute - * - * aff mod m = aff - m * floor(aff/m) - */ -__isl_give isl_aff *isl_aff_mod(__isl_take isl_aff *aff, isl_int m) -{ - isl_aff *res; - - res = isl_aff_copy(aff); - aff = isl_aff_scale_down(aff, m); - aff = isl_aff_floor(aff); - aff = isl_aff_scale(aff, m); - res = isl_aff_sub(res, aff); - - return res; -} - -/* Compute - * - * pwaff mod m = pwaff - m * floor(pwaff/m) - */ -__isl_give isl_pw_aff *isl_pw_aff_mod(__isl_take isl_pw_aff *pwaff, isl_int m) -{ - isl_pw_aff *res; - - res = isl_pw_aff_copy(pwaff); - pwaff = isl_pw_aff_scale_down(pwaff, m); - pwaff = isl_pw_aff_floor(pwaff); - pwaff = isl_pw_aff_scale(pwaff, m); - res = isl_pw_aff_sub(res, pwaff); - - return res; -} - -/* Given f, return ceil(f). - * If f is an integer expression, then just return f. - * Otherwise, create a new div d = [-f] and return the expression -d. - */ -__isl_give isl_aff *isl_aff_ceil(__isl_take isl_aff *aff) -{ - if (!aff) - return NULL; - - if (isl_int_is_one(aff->v->el[0])) - return aff; - - aff = isl_aff_neg(aff); - aff = isl_aff_floor(aff); - aff = isl_aff_neg(aff); - - return aff; -} - -/* Apply the expansion computed by isl_merge_divs. - * The expansion itself is given by "exp" while the resulting - * list of divs is given by "div". - */ -__isl_give isl_aff *isl_aff_expand_divs( __isl_take isl_aff *aff, - __isl_take isl_mat *div, int *exp) -{ - int i, j; - int old_n_div; - int new_n_div; - int offset; - - aff = isl_aff_cow(aff); - if (!aff || !div) - goto error; - - old_n_div = isl_local_space_dim(aff->ls, isl_dim_div); - new_n_div = isl_mat_rows(div); - if (new_n_div < old_n_div) - isl_die(isl_mat_get_ctx(div), isl_error_invalid, - "not an expansion", goto error); - - aff->v = isl_vec_extend(aff->v, aff->v->size + new_n_div - old_n_div); - if (!aff->v) - goto error; - - offset = 1 + isl_local_space_offset(aff->ls, isl_dim_div); - j = old_n_div - 1; - for (i = new_n_div - 1; i >= 0; --i) { - if (j >= 0 && exp[j] == i) { - if (i != j) - isl_int_swap(aff->v->el[offset + i], - aff->v->el[offset + j]); - j--; - } else - isl_int_set_si(aff->v->el[offset + i], 0); - } - - aff->ls = isl_local_space_replace_divs(aff->ls, isl_mat_copy(div)); - if (!aff->ls) - goto error; - isl_mat_free(div); - return aff; -error: - isl_aff_free(aff); - isl_mat_free(div); - return NULL; -} - -/* Add two affine expressions that live in the same local space. - */ -static __isl_give isl_aff *add_expanded(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2) -{ - isl_int gcd, f; - - aff1 = isl_aff_cow(aff1); - if (!aff1 || !aff2) - goto error; - - aff1->v = isl_vec_cow(aff1->v); - if (!aff1->v) - goto error; - - isl_int_init(gcd); - isl_int_init(f); - isl_int_gcd(gcd, aff1->v->el[0], aff2->v->el[0]); - isl_int_divexact(f, aff2->v->el[0], gcd); - isl_seq_scale(aff1->v->el + 1, aff1->v->el + 1, f, aff1->v->size - 1); - isl_int_divexact(f, aff1->v->el[0], gcd); - isl_seq_addmul(aff1->v->el + 1, f, aff2->v->el + 1, aff1->v->size - 1); - isl_int_divexact(f, aff2->v->el[0], gcd); - isl_int_mul(aff1->v->el[0], aff1->v->el[0], f); - isl_int_clear(f); - isl_int_clear(gcd); - - isl_aff_free(aff2); - return aff1; -error: - isl_aff_free(aff1); - isl_aff_free(aff2); - return NULL; -} - -__isl_give isl_aff *isl_aff_add(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2) -{ - isl_ctx *ctx; - int *exp1 = NULL; - int *exp2 = NULL; - isl_mat *div; - - if (!aff1 || !aff2) - goto error; - - ctx = isl_aff_get_ctx(aff1); - if (!isl_space_is_equal(aff1->ls->dim, aff2->ls->dim)) - isl_die(ctx, isl_error_invalid, - "spaces don't match", goto error); - - if (aff1->ls->div->n_row == 0 && aff2->ls->div->n_row == 0) - return add_expanded(aff1, aff2); - - exp1 = isl_alloc_array(ctx, int, aff1->ls->div->n_row); - exp2 = isl_alloc_array(ctx, int, aff2->ls->div->n_row); - if (!exp1 || !exp2) - goto error; - - div = isl_merge_divs(aff1->ls->div, aff2->ls->div, exp1, exp2); - aff1 = isl_aff_expand_divs(aff1, isl_mat_copy(div), exp1); - aff2 = isl_aff_expand_divs(aff2, div, exp2); - free(exp1); - free(exp2); - - return add_expanded(aff1, aff2); -error: - free(exp1); - free(exp2); - isl_aff_free(aff1); - isl_aff_free(aff2); - return NULL; -} - -__isl_give isl_aff *isl_aff_sub(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2) -{ - return isl_aff_add(aff1, isl_aff_neg(aff2)); -} - -__isl_give isl_aff *isl_aff_scale(__isl_take isl_aff *aff, isl_int f) -{ - isl_int gcd; - - if (isl_int_is_one(f)) - return aff; - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - isl_int_init(gcd); - isl_int_gcd(gcd, aff->v->el[0], f); - isl_int_divexact(aff->v->el[0], aff->v->el[0], gcd); - isl_int_divexact(gcd, f, gcd); - isl_seq_scale(aff->v->el + 1, aff->v->el + 1, gcd, aff->v->size - 1); - isl_int_clear(gcd); - - return aff; -} - -__isl_give isl_aff *isl_aff_scale_down(__isl_take isl_aff *aff, isl_int f) -{ - isl_int gcd; - - if (isl_int_is_one(f)) - return aff; - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - isl_int_init(gcd); - isl_seq_gcd(aff->v->el + 1, aff->v->size - 1, &gcd); - isl_int_gcd(gcd, gcd, f); - isl_seq_scale_down(aff->v->el + 1, aff->v->el + 1, gcd, aff->v->size - 1); - isl_int_divexact(gcd, f, gcd); - isl_int_mul(aff->v->el[0], aff->v->el[0], gcd); - isl_int_clear(gcd); - - return aff; -} - -__isl_give isl_aff *isl_aff_scale_down_ui(__isl_take isl_aff *aff, unsigned f) -{ - isl_int v; - - if (f == 1) - return aff; - - isl_int_init(v); - isl_int_set_ui(v, f); - aff = isl_aff_scale_down(aff, v); - isl_int_clear(v); - - return aff; -} - -__isl_give isl_aff *isl_aff_set_dim_name(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned pos, const char *s) -{ - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - if (type == isl_dim_out) - isl_die(aff->v->ctx, isl_error_invalid, - "cannot set name of output/set dimension", - return isl_aff_free(aff)); - if (type == isl_dim_in) - type = isl_dim_set; - aff->ls = isl_local_space_set_dim_name(aff->ls, type, pos, s); - if (!aff->ls) - return isl_aff_free(aff); - - return aff; -} - -__isl_give isl_aff *isl_aff_set_dim_id(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id) -{ - aff = isl_aff_cow(aff); - if (!aff) - return isl_id_free(id); - if (type == isl_dim_out) - isl_die(aff->v->ctx, isl_error_invalid, - "cannot set name of output/set dimension", - goto error); - if (type == isl_dim_in) - type = isl_dim_set; - aff->ls = isl_local_space_set_dim_id(aff->ls, type, pos, id); - if (!aff->ls) - return isl_aff_free(aff); - - return aff; -error: - isl_id_free(id); - isl_aff_free(aff); - return NULL; -} - -/* Exploit the equalities in "eq" to simplify the affine expression - * and the expressions of the integer divisions in the local space. - * The integer divisions in this local space are assumed to appear - * as regular dimensions in "eq". - */ -static __isl_give isl_aff *isl_aff_substitute_equalities_lifted( - __isl_take isl_aff *aff, __isl_take isl_basic_set *eq) -{ - int i, j; - unsigned total; - unsigned n_div; - - if (!eq) - goto error; - if (eq->n_eq == 0) { - isl_basic_set_free(eq); - return aff; - } - - aff = isl_aff_cow(aff); - if (!aff) - goto error; - - aff->ls = isl_local_space_substitute_equalities(aff->ls, - isl_basic_set_copy(eq)); - if (!aff->ls) - goto error; - - total = 1 + isl_space_dim(eq->dim, isl_dim_all); - n_div = eq->n_div; - for (i = 0; i < eq->n_eq; ++i) { - j = isl_seq_last_non_zero(eq->eq[i], total + n_div); - if (j < 0 || j == 0 || j >= total) - continue; - - isl_seq_elim(aff->v->el + 1, eq->eq[i], j, total, - &aff->v->el[0]); - } - - isl_basic_set_free(eq); - return aff; -error: - isl_basic_set_free(eq); - isl_aff_free(aff); - return NULL; -} - -/* Exploit the equalities in "eq" to simplify the affine expression - * and the expressions of the integer divisions in the local space. - */ -static __isl_give isl_aff *isl_aff_substitute_equalities( - __isl_take isl_aff *aff, __isl_take isl_basic_set *eq) -{ - int n_div; - - if (!aff || !eq) - goto error; - n_div = isl_local_space_dim(aff->ls, isl_dim_div); - if (n_div > 0) - eq = isl_basic_set_add(eq, isl_dim_set, n_div); - return isl_aff_substitute_equalities_lifted(aff, eq); -error: - isl_basic_set_free(eq); - isl_aff_free(aff); - return NULL; -} - -/* Look for equalities among the variables shared by context and aff - * and the integer divisions of aff, if any. - * The equalities are then used to eliminate coefficients and/or integer - * divisions from aff. - */ -__isl_give isl_aff *isl_aff_gist(__isl_take isl_aff *aff, - __isl_take isl_set *context) -{ - isl_basic_set *hull; - int n_div; - - if (!aff) - goto error; - n_div = isl_local_space_dim(aff->ls, isl_dim_div); - if (n_div > 0) { - isl_basic_set *bset; - isl_local_space *ls; - context = isl_set_add_dims(context, isl_dim_set, n_div); - ls = isl_aff_get_domain_local_space(aff); - bset = isl_basic_set_from_local_space(ls); - bset = isl_basic_set_lift(bset); - bset = isl_basic_set_flatten(bset); - context = isl_set_intersect(context, - isl_set_from_basic_set(bset)); - } - - hull = isl_set_affine_hull(context); - return isl_aff_substitute_equalities_lifted(aff, hull); -error: - isl_aff_free(aff); - isl_set_free(context); - return NULL; -} - -__isl_give isl_aff *isl_aff_gist_params(__isl_take isl_aff *aff, - __isl_take isl_set *context) -{ - isl_set *dom_context = isl_set_universe(isl_aff_get_domain_space(aff)); - dom_context = isl_set_intersect_params(dom_context, context); - return isl_aff_gist(aff, dom_context); -} - -/* Return a basic set containing those elements in the space - * of aff where it is non-negative. - */ -__isl_give isl_basic_set *isl_aff_nonneg_basic_set(__isl_take isl_aff *aff) -{ - isl_constraint *ineq; - - ineq = isl_inequality_from_aff(aff); - - return isl_basic_set_from_constraint(ineq); -} - -/* Return a basic set containing those elements in the space - * of aff where it is zero. - */ -__isl_give isl_basic_set *isl_aff_zero_basic_set(__isl_take isl_aff *aff) -{ - isl_constraint *ineq; - - ineq = isl_equality_from_aff(aff); - - return isl_basic_set_from_constraint(ineq); -} - -/* Return a basic set containing those elements in the shared space - * of aff1 and aff2 where aff1 is greater than or equal to aff2. - */ -__isl_give isl_basic_set *isl_aff_ge_basic_set(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2) -{ - aff1 = isl_aff_sub(aff1, aff2); - - return isl_aff_nonneg_basic_set(aff1); -} - -/* Return a basic set containing those elements in the shared space - * of aff1 and aff2 where aff1 is smaller than or equal to aff2. - */ -__isl_give isl_basic_set *isl_aff_le_basic_set(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2) -{ - return isl_aff_ge_basic_set(aff2, aff1); -} - -__isl_give isl_aff *isl_aff_add_on_domain(__isl_keep isl_set *dom, - __isl_take isl_aff *aff1, __isl_take isl_aff *aff2) -{ - aff1 = isl_aff_add(aff1, aff2); - aff1 = isl_aff_gist(aff1, isl_set_copy(dom)); - return aff1; -} - -int isl_aff_is_empty(__isl_keep isl_aff *aff) -{ - if (!aff) - return -1; - - return 0; -} - -/* Check whether the given affine expression has non-zero coefficient - * for any dimension in the given range or if any of these dimensions - * appear with non-zero coefficients in any of the integer divisions - * involved in the affine expression. - */ -int isl_aff_involves_dims(__isl_keep isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - isl_ctx *ctx; - int *active = NULL; - int involves = 0; - - if (!aff) - return -1; - if (n == 0) - return 0; - - ctx = isl_aff_get_ctx(aff); - if (first + n > isl_aff_dim(aff, type)) - isl_die(ctx, isl_error_invalid, - "range out of bounds", return -1); - - active = isl_local_space_get_active(aff->ls, aff->v->el + 2); - if (!active) - goto error; - - first += isl_local_space_offset(aff->ls, type) - 1; - for (i = 0; i < n; ++i) - if (active[first + i]) { - involves = 1; - break; - } - - free(active); - - return involves; -error: - free(active); - return -1; -} - -__isl_give isl_aff *isl_aff_drop_dims(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n) -{ - isl_ctx *ctx; - - if (!aff) - return NULL; - if (type == isl_dim_out) - isl_die(aff->v->ctx, isl_error_invalid, - "cannot drop output/set dimension", - return isl_aff_free(aff)); - if (type == isl_dim_in) - type = isl_dim_set; - if (n == 0 && !isl_local_space_is_named_or_nested(aff->ls, type)) - return aff; - - ctx = isl_aff_get_ctx(aff); - if (first + n > isl_local_space_dim(aff->ls, type)) - isl_die(ctx, isl_error_invalid, "range out of bounds", - return isl_aff_free(aff)); - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->ls = isl_local_space_drop_dims(aff->ls, type, first, n); - if (!aff->ls) - return isl_aff_free(aff); - - first += 1 + isl_local_space_offset(aff->ls, type); - aff->v = isl_vec_drop_els(aff->v, first, n); - if (!aff->v) - return isl_aff_free(aff); - - return aff; -} - -__isl_give isl_aff *isl_aff_insert_dims(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned first, unsigned n) -{ - isl_ctx *ctx; - - if (!aff) - return NULL; - if (type == isl_dim_out) - isl_die(aff->v->ctx, isl_error_invalid, - "cannot insert output/set dimensions", - return isl_aff_free(aff)); - if (type == isl_dim_in) - type = isl_dim_set; - if (n == 0 && !isl_local_space_is_named_or_nested(aff->ls, type)) - return aff; - - ctx = isl_aff_get_ctx(aff); - if (first > isl_local_space_dim(aff->ls, type)) - isl_die(ctx, isl_error_invalid, "position out of bounds", - return isl_aff_free(aff)); - - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->ls = isl_local_space_insert_dims(aff->ls, type, first, n); - if (!aff->ls) - return isl_aff_free(aff); - - first += 1 + isl_local_space_offset(aff->ls, type); - aff->v = isl_vec_insert_zero_els(aff->v, first, n); - if (!aff->v) - return isl_aff_free(aff); - - return aff; -} - -__isl_give isl_aff *isl_aff_add_dims(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned n) -{ - unsigned pos; - - pos = isl_aff_dim(aff, type); - - return isl_aff_insert_dims(aff, type, pos, n); -} - -__isl_give isl_pw_aff *isl_pw_aff_add_dims(__isl_take isl_pw_aff *pwaff, - enum isl_dim_type type, unsigned n) -{ - unsigned pos; - - pos = isl_pw_aff_dim(pwaff, type); - - return isl_pw_aff_insert_dims(pwaff, type, pos, n); -} - -__isl_give isl_pw_aff *isl_pw_aff_from_aff(__isl_take isl_aff *aff) -{ - isl_set *dom = isl_set_universe(isl_aff_get_domain_space(aff)); - return isl_pw_aff_alloc(dom, aff); -} - -#undef PW -#define PW isl_pw_aff -#undef EL -#define EL isl_aff -#undef EL_IS_ZERO -#define EL_IS_ZERO is_empty -#undef ZERO -#define ZERO empty -#undef IS_ZERO -#define IS_ZERO is_empty -#undef FIELD -#define FIELD aff -#undef DEFAULT_IS_ZERO -#define DEFAULT_IS_ZERO 0 - -#define NO_EVAL -#define NO_OPT -#define NO_MOVE_DIMS -#define NO_LIFT -#define NO_MORPH - -#include - -static __isl_give isl_set *align_params_pw_pw_set_and( - __isl_take isl_pw_aff *pwaff1, __isl_take isl_pw_aff *pwaff2, - __isl_give isl_set *(*fn)(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2)) -{ - if (!pwaff1 || !pwaff2) - goto error; - if (isl_space_match(pwaff1->dim, isl_dim_param, - pwaff2->dim, isl_dim_param)) - return fn(pwaff1, pwaff2); - if (!isl_space_has_named_params(pwaff1->dim) || - !isl_space_has_named_params(pwaff2->dim)) - isl_die(isl_pw_aff_get_ctx(pwaff1), isl_error_invalid, - "unaligned unnamed parameters", goto error); - pwaff1 = isl_pw_aff_align_params(pwaff1, isl_pw_aff_get_space(pwaff2)); - pwaff2 = isl_pw_aff_align_params(pwaff2, isl_pw_aff_get_space(pwaff1)); - return fn(pwaff1, pwaff2); -error: - isl_pw_aff_free(pwaff1); - isl_pw_aff_free(pwaff2); - return NULL; -} - -/* Compute a piecewise quasi-affine expression with a domain that - * is the union of those of pwaff1 and pwaff2 and such that on each - * cell, the quasi-affine expression is the better (according to cmp) - * of those of pwaff1 and pwaff2. If only one of pwaff1 or pwaff2 - * is defined on a given cell, then the associated expression - * is the defined one. - */ -static __isl_give isl_pw_aff *pw_aff_union_opt(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2, - __isl_give isl_basic_set *(*cmp)(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2)) -{ - int i, j, n; - isl_pw_aff *res; - isl_ctx *ctx; - isl_set *set; - - if (!pwaff1 || !pwaff2) - goto error; - - ctx = isl_space_get_ctx(pwaff1->dim); - if (!isl_space_is_equal(pwaff1->dim, pwaff2->dim)) - isl_die(ctx, isl_error_invalid, - "arguments should live in same space", goto error); - - if (isl_pw_aff_is_empty(pwaff1)) { - isl_pw_aff_free(pwaff1); - return pwaff2; - } - - if (isl_pw_aff_is_empty(pwaff2)) { - isl_pw_aff_free(pwaff2); - return pwaff1; - } - - n = 2 * (pwaff1->n + 1) * (pwaff2->n + 1); - res = isl_pw_aff_alloc_size(isl_space_copy(pwaff1->dim), n); - - for (i = 0; i < pwaff1->n; ++i) { - set = isl_set_copy(pwaff1->p[i].set); - for (j = 0; j < pwaff2->n; ++j) { - struct isl_set *common; - isl_set *better; - - common = isl_set_intersect( - isl_set_copy(pwaff1->p[i].set), - isl_set_copy(pwaff2->p[j].set)); - better = isl_set_from_basic_set(cmp( - isl_aff_copy(pwaff2->p[j].aff), - isl_aff_copy(pwaff1->p[i].aff))); - better = isl_set_intersect(common, better); - if (isl_set_plain_is_empty(better)) { - isl_set_free(better); - continue; - } - set = isl_set_subtract(set, isl_set_copy(better)); - - res = isl_pw_aff_add_piece(res, better, - isl_aff_copy(pwaff2->p[j].aff)); - } - res = isl_pw_aff_add_piece(res, set, - isl_aff_copy(pwaff1->p[i].aff)); - } - - for (j = 0; j < pwaff2->n; ++j) { - set = isl_set_copy(pwaff2->p[j].set); - for (i = 0; i < pwaff1->n; ++i) - set = isl_set_subtract(set, - isl_set_copy(pwaff1->p[i].set)); - res = isl_pw_aff_add_piece(res, set, - isl_aff_copy(pwaff2->p[j].aff)); - } - - isl_pw_aff_free(pwaff1); - isl_pw_aff_free(pwaff2); - - return res; -error: - isl_pw_aff_free(pwaff1); - isl_pw_aff_free(pwaff2); - return NULL; -} - -/* Compute a piecewise quasi-affine expression with a domain that - * is the union of those of pwaff1 and pwaff2 and such that on each - * cell, the quasi-affine expression is the maximum of those of pwaff1 - * and pwaff2. If only one of pwaff1 or pwaff2 is defined on a given - * cell, then the associated expression is the defined one. - */ -static __isl_give isl_pw_aff *pw_aff_union_max(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return pw_aff_union_opt(pwaff1, pwaff2, &isl_aff_ge_basic_set); -} - -__isl_give isl_pw_aff *isl_pw_aff_union_max(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return isl_pw_aff_align_params_pw_pw_and(pwaff1, pwaff2, - &pw_aff_union_max); -} - -/* Compute a piecewise quasi-affine expression with a domain that - * is the union of those of pwaff1 and pwaff2 and such that on each - * cell, the quasi-affine expression is the minimum of those of pwaff1 - * and pwaff2. If only one of pwaff1 or pwaff2 is defined on a given - * cell, then the associated expression is the defined one. - */ -static __isl_give isl_pw_aff *pw_aff_union_min(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return pw_aff_union_opt(pwaff1, pwaff2, &isl_aff_le_basic_set); -} - -__isl_give isl_pw_aff *isl_pw_aff_union_min(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return isl_pw_aff_align_params_pw_pw_and(pwaff1, pwaff2, - &pw_aff_union_min); -} - -__isl_give isl_pw_aff *isl_pw_aff_union_opt(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2, int max) -{ - if (max) - return isl_pw_aff_union_max(pwaff1, pwaff2); - else - return isl_pw_aff_union_min(pwaff1, pwaff2); -} - -/* Construct a map with as domain the domain of pwaff and - * one-dimensional range corresponding to the affine expressions. - */ -static __isl_give isl_map *map_from_pw_aff(__isl_take isl_pw_aff *pwaff) -{ - int i; - isl_space *dim; - isl_map *map; - - if (!pwaff) - return NULL; - - dim = isl_pw_aff_get_space(pwaff); - map = isl_map_empty(dim); - - for (i = 0; i < pwaff->n; ++i) { - isl_basic_map *bmap; - isl_map *map_i; - - bmap = isl_basic_map_from_aff(isl_aff_copy(pwaff->p[i].aff)); - map_i = isl_map_from_basic_map(bmap); - map_i = isl_map_intersect_domain(map_i, - isl_set_copy(pwaff->p[i].set)); - map = isl_map_union_disjoint(map, map_i); - } - - isl_pw_aff_free(pwaff); - - return map; -} - -/* Construct a map with as domain the domain of pwaff and - * one-dimensional range corresponding to the affine expressions. - */ -__isl_give isl_map *isl_map_from_pw_aff(__isl_take isl_pw_aff *pwaff) -{ - if (isl_space_is_set(pwaff->dim)) - isl_die(isl_pw_aff_get_ctx(pwaff), isl_error_invalid, - "space of input is not a map", - return isl_pw_aff_free(pwaff)); - return map_from_pw_aff(pwaff); -} - -/* Construct a one-dimensional set with as parameter domain - * the domain of pwaff and the single set dimension - * corresponding to the affine expressions. - */ -__isl_give isl_set *isl_set_from_pw_aff(__isl_take isl_pw_aff *pwaff) -{ - if (!pwaff) - return NULL; - if (!isl_space_is_set(pwaff->dim)) - isl_die(isl_pw_aff_get_ctx(pwaff), isl_error_invalid, - "space of input is not a set", - return isl_pw_aff_free(pwaff)); - return map_from_pw_aff(pwaff); -} - -/* Return a set containing those elements in the domain - * of pwaff where it is non-negative. - */ -__isl_give isl_set *isl_pw_aff_nonneg_set(__isl_take isl_pw_aff *pwaff) -{ - int i; - isl_set *set; - - if (!pwaff) - return NULL; - - set = isl_set_empty(isl_pw_aff_get_domain_space(pwaff)); - - for (i = 0; i < pwaff->n; ++i) { - isl_basic_set *bset; - isl_set *set_i; - - bset = isl_aff_nonneg_basic_set(isl_aff_copy(pwaff->p[i].aff)); - set_i = isl_set_from_basic_set(bset); - set_i = isl_set_intersect(set_i, isl_set_copy(pwaff->p[i].set)); - set = isl_set_union_disjoint(set, set_i); - } - - isl_pw_aff_free(pwaff); - - return set; -} - -/* Return a set containing those elements in the domain - * of pwaff where it is zero. - */ -__isl_give isl_set *isl_pw_aff_zero_set(__isl_take isl_pw_aff *pwaff) -{ - int i; - isl_set *set; - - if (!pwaff) - return NULL; - - set = isl_set_empty(isl_pw_aff_get_domain_space(pwaff)); - - for (i = 0; i < pwaff->n; ++i) { - isl_basic_set *bset; - isl_set *set_i; - - bset = isl_aff_zero_basic_set(isl_aff_copy(pwaff->p[i].aff)); - set_i = isl_set_from_basic_set(bset); - set_i = isl_set_intersect(set_i, isl_set_copy(pwaff->p[i].set)); - set = isl_set_union_disjoint(set, set_i); - } - - isl_pw_aff_free(pwaff); - - return set; -} - -/* Return a set containing those elements in the domain - * of pwaff where it is not zero. - */ -__isl_give isl_set *isl_pw_aff_non_zero_set(__isl_take isl_pw_aff *pwaff) -{ - return isl_set_complement(isl_pw_aff_zero_set(pwaff)); -} - -/* Return a set containing those elements in the shared domain - * of pwaff1 and pwaff2 where pwaff1 is greater than (or equal) to pwaff2. - * - * We compute the difference on the shared domain and then construct - * the set of values where this difference is non-negative. - * If strict is set, we first subtract 1 from the difference. - * If equal is set, we only return the elements where pwaff1 and pwaff2 - * are equal. - */ -static __isl_give isl_set *pw_aff_gte_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2, int strict, int equal) -{ - isl_set *set1, *set2; - - set1 = isl_pw_aff_domain(isl_pw_aff_copy(pwaff1)); - set2 = isl_pw_aff_domain(isl_pw_aff_copy(pwaff2)); - set1 = isl_set_intersect(set1, set2); - pwaff1 = isl_pw_aff_intersect_domain(pwaff1, isl_set_copy(set1)); - pwaff2 = isl_pw_aff_intersect_domain(pwaff2, isl_set_copy(set1)); - pwaff1 = isl_pw_aff_add(pwaff1, isl_pw_aff_neg(pwaff2)); - - if (strict) { - isl_space *dim = isl_set_get_space(set1); - isl_aff *aff; - aff = isl_aff_zero_on_domain(isl_local_space_from_space(dim)); - aff = isl_aff_add_constant_si(aff, -1); - pwaff1 = isl_pw_aff_add(pwaff1, isl_pw_aff_alloc(set1, aff)); - } else - isl_set_free(set1); - - if (equal) - return isl_pw_aff_zero_set(pwaff1); - return isl_pw_aff_nonneg_set(pwaff1); -} - -/* Return a set containing those elements in the shared domain - * of pwaff1 and pwaff2 where pwaff1 is equal to pwaff2. - */ -static __isl_give isl_set *pw_aff_eq_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return pw_aff_gte_set(pwaff1, pwaff2, 0, 1); -} - -__isl_give isl_set *isl_pw_aff_eq_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return align_params_pw_pw_set_and(pwaff1, pwaff2, &pw_aff_eq_set); -} - -/* Return a set containing those elements in the shared domain - * of pwaff1 and pwaff2 where pwaff1 is greater than or equal to pwaff2. - */ -static __isl_give isl_set *pw_aff_ge_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return pw_aff_gte_set(pwaff1, pwaff2, 0, 0); -} - -__isl_give isl_set *isl_pw_aff_ge_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return align_params_pw_pw_set_and(pwaff1, pwaff2, &pw_aff_ge_set); -} - -/* Return a set containing those elements in the shared domain - * of pwaff1 and pwaff2 where pwaff1 is strictly greater than pwaff2. - */ -static __isl_give isl_set *pw_aff_gt_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return pw_aff_gte_set(pwaff1, pwaff2, 1, 0); -} - -__isl_give isl_set *isl_pw_aff_gt_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return align_params_pw_pw_set_and(pwaff1, pwaff2, &pw_aff_gt_set); -} - -__isl_give isl_set *isl_pw_aff_le_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return isl_pw_aff_ge_set(pwaff2, pwaff1); -} - -__isl_give isl_set *isl_pw_aff_lt_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return isl_pw_aff_gt_set(pwaff2, pwaff1); -} - -/* Return a set containing those elements in the shared domain - * of the elements of list1 and list2 where each element in list1 - * has the relation specified by "fn" with each element in list2. - */ -static __isl_give isl_set *pw_aff_list_set(__isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2, - __isl_give isl_set *(*fn)(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2)) -{ - int i, j; - isl_ctx *ctx; - isl_set *set; - - if (!list1 || !list2) - goto error; - - ctx = isl_pw_aff_list_get_ctx(list1); - if (list1->n < 1 || list2->n < 1) - isl_die(ctx, isl_error_invalid, - "list should contain at least one element", goto error); - - set = isl_set_universe(isl_pw_aff_get_domain_space(list1->p[0])); - for (i = 0; i < list1->n; ++i) - for (j = 0; j < list2->n; ++j) { - isl_set *set_ij; - - set_ij = fn(isl_pw_aff_copy(list1->p[i]), - isl_pw_aff_copy(list2->p[j])); - set = isl_set_intersect(set, set_ij); - } - - isl_pw_aff_list_free(list1); - isl_pw_aff_list_free(list2); - return set; -error: - isl_pw_aff_list_free(list1); - isl_pw_aff_list_free(list2); - return NULL; -} - -/* Return a set containing those elements in the shared domain - * of the elements of list1 and list2 where each element in list1 - * is equal to each element in list2. - */ -__isl_give isl_set *isl_pw_aff_list_eq_set(__isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2) -{ - return pw_aff_list_set(list1, list2, &isl_pw_aff_eq_set); -} - -__isl_give isl_set *isl_pw_aff_list_ne_set(__isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2) -{ - return pw_aff_list_set(list1, list2, &isl_pw_aff_ne_set); -} - -/* Return a set containing those elements in the shared domain - * of the elements of list1 and list2 where each element in list1 - * is less than or equal to each element in list2. - */ -__isl_give isl_set *isl_pw_aff_list_le_set(__isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2) -{ - return pw_aff_list_set(list1, list2, &isl_pw_aff_le_set); -} - -__isl_give isl_set *isl_pw_aff_list_lt_set(__isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2) -{ - return pw_aff_list_set(list1, list2, &isl_pw_aff_lt_set); -} - -__isl_give isl_set *isl_pw_aff_list_ge_set(__isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2) -{ - return pw_aff_list_set(list1, list2, &isl_pw_aff_ge_set); -} - -__isl_give isl_set *isl_pw_aff_list_gt_set(__isl_take isl_pw_aff_list *list1, - __isl_take isl_pw_aff_list *list2) -{ - return pw_aff_list_set(list1, list2, &isl_pw_aff_gt_set); -} - - -/* Return a set containing those elements in the shared domain - * of pwaff1 and pwaff2 where pwaff1 is not equal to pwaff2. - */ -static __isl_give isl_set *pw_aff_ne_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - isl_set *set_lt, *set_gt; - - set_lt = isl_pw_aff_lt_set(isl_pw_aff_copy(pwaff1), - isl_pw_aff_copy(pwaff2)); - set_gt = isl_pw_aff_gt_set(pwaff1, pwaff2); - return isl_set_union_disjoint(set_lt, set_gt); -} - -__isl_give isl_set *isl_pw_aff_ne_set(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return align_params_pw_pw_set_and(pwaff1, pwaff2, &pw_aff_ne_set); -} - -__isl_give isl_pw_aff *isl_pw_aff_scale_down(__isl_take isl_pw_aff *pwaff, - isl_int v) -{ - int i; - - if (isl_int_is_one(v)) - return pwaff; - if (!isl_int_is_pos(v)) - isl_die(isl_pw_aff_get_ctx(pwaff), isl_error_invalid, - "factor needs to be positive", - return isl_pw_aff_free(pwaff)); - pwaff = isl_pw_aff_cow(pwaff); - if (!pwaff) - return NULL; - if (pwaff->n == 0) - return pwaff; - - for (i = 0; i < pwaff->n; ++i) { - pwaff->p[i].aff = isl_aff_scale_down(pwaff->p[i].aff, v); - if (!pwaff->p[i].aff) - return isl_pw_aff_free(pwaff); - } - - return pwaff; -} - -__isl_give isl_pw_aff *isl_pw_aff_floor(__isl_take isl_pw_aff *pwaff) -{ - int i; - - pwaff = isl_pw_aff_cow(pwaff); - if (!pwaff) - return NULL; - if (pwaff->n == 0) - return pwaff; - - for (i = 0; i < pwaff->n; ++i) { - pwaff->p[i].aff = isl_aff_floor(pwaff->p[i].aff); - if (!pwaff->p[i].aff) - return isl_pw_aff_free(pwaff); - } - - return pwaff; -} - -__isl_give isl_pw_aff *isl_pw_aff_ceil(__isl_take isl_pw_aff *pwaff) -{ - int i; - - pwaff = isl_pw_aff_cow(pwaff); - if (!pwaff) - return NULL; - if (pwaff->n == 0) - return pwaff; - - for (i = 0; i < pwaff->n; ++i) { - pwaff->p[i].aff = isl_aff_ceil(pwaff->p[i].aff); - if (!pwaff->p[i].aff) - return isl_pw_aff_free(pwaff); - } - - return pwaff; -} - -/* Return an affine expression that is equal to pwaff_true for elements - * in "cond" and to pwaff_false for elements not in "cond". - * That is, return cond ? pwaff_true : pwaff_false; - */ -__isl_give isl_pw_aff *isl_pw_aff_cond(__isl_take isl_set *cond, - __isl_take isl_pw_aff *pwaff_true, __isl_take isl_pw_aff *pwaff_false) -{ - isl_set *comp; - - comp = isl_set_complement(isl_set_copy(cond)); - pwaff_true = isl_pw_aff_intersect_domain(pwaff_true, cond); - pwaff_false = isl_pw_aff_intersect_domain(pwaff_false, comp); - - return isl_pw_aff_add_disjoint(pwaff_true, pwaff_false); -} - -int isl_aff_is_cst(__isl_keep isl_aff *aff) -{ - if (!aff) - return -1; - - return isl_seq_first_non_zero(aff->v->el + 2, aff->v->size - 2) == -1; -} - -/* Check whether pwaff is a piecewise constant. - */ -int isl_pw_aff_is_cst(__isl_keep isl_pw_aff *pwaff) -{ - int i; - - if (!pwaff) - return -1; - - for (i = 0; i < pwaff->n; ++i) { - int is_cst = isl_aff_is_cst(pwaff->p[i].aff); - if (is_cst < 0 || !is_cst) - return is_cst; - } - - return 1; -} - -__isl_give isl_aff *isl_aff_mul(__isl_take isl_aff *aff1, - __isl_take isl_aff *aff2) -{ - if (!isl_aff_is_cst(aff2) && isl_aff_is_cst(aff1)) - return isl_aff_mul(aff2, aff1); - - if (!isl_aff_is_cst(aff2)) - isl_die(isl_aff_get_ctx(aff1), isl_error_invalid, - "at least one affine expression should be constant", - goto error); - - aff1 = isl_aff_cow(aff1); - if (!aff1 || !aff2) - goto error; - - aff1 = isl_aff_scale(aff1, aff2->v->el[1]); - aff1 = isl_aff_scale_down(aff1, aff2->v->el[0]); - - isl_aff_free(aff2); - return aff1; -error: - isl_aff_free(aff1); - isl_aff_free(aff2); - return NULL; -} - -static __isl_give isl_pw_aff *pw_aff_add(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return isl_pw_aff_on_shared_domain(pwaff1, pwaff2, &isl_aff_add); -} - -__isl_give isl_pw_aff *isl_pw_aff_add(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return isl_pw_aff_align_params_pw_pw_and(pwaff1, pwaff2, &pw_aff_add); -} - -__isl_give isl_pw_aff *isl_pw_aff_union_add(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return isl_pw_aff_union_add_(pwaff1, pwaff2); -} - -static __isl_give isl_pw_aff *pw_aff_mul(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return isl_pw_aff_on_shared_domain(pwaff1, pwaff2, &isl_aff_mul); -} - -__isl_give isl_pw_aff *isl_pw_aff_mul(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return isl_pw_aff_align_params_pw_pw_and(pwaff1, pwaff2, &pw_aff_mul); -} - -static __isl_give isl_pw_aff *pw_aff_min(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - isl_set *le; - - le = isl_pw_aff_le_set(isl_pw_aff_copy(pwaff1), - isl_pw_aff_copy(pwaff2)); - return isl_pw_aff_cond(le, pwaff1, pwaff2); -} - -__isl_give isl_pw_aff *isl_pw_aff_min(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return isl_pw_aff_align_params_pw_pw_and(pwaff1, pwaff2, &pw_aff_min); -} - -static __isl_give isl_pw_aff *pw_aff_max(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - isl_set *le; - - le = isl_pw_aff_ge_set(isl_pw_aff_copy(pwaff1), - isl_pw_aff_copy(pwaff2)); - return isl_pw_aff_cond(le, pwaff1, pwaff2); -} - -__isl_give isl_pw_aff *isl_pw_aff_max(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2) -{ - return isl_pw_aff_align_params_pw_pw_and(pwaff1, pwaff2, &pw_aff_max); -} - -static __isl_give isl_pw_aff *pw_aff_list_reduce( - __isl_take isl_pw_aff_list *list, - __isl_give isl_pw_aff *(*fn)(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2)) -{ - int i; - isl_ctx *ctx; - isl_pw_aff *res; - - if (!list) - return NULL; - - ctx = isl_pw_aff_list_get_ctx(list); - if (list->n < 1) - isl_die(ctx, isl_error_invalid, - "list should contain at least one element", - return isl_pw_aff_list_free(list)); - - res = isl_pw_aff_copy(list->p[0]); - for (i = 1; i < list->n; ++i) - res = fn(res, isl_pw_aff_copy(list->p[i])); - - isl_pw_aff_list_free(list); - return res; -} - -/* Return an isl_pw_aff that maps each element in the intersection of the - * domains of the elements of list to the minimal corresponding affine - * expression. - */ -__isl_give isl_pw_aff *isl_pw_aff_list_min(__isl_take isl_pw_aff_list *list) -{ - return pw_aff_list_reduce(list, &isl_pw_aff_min); -} - -/* Return an isl_pw_aff that maps each element in the intersection of the - * domains of the elements of list to the maximal corresponding affine - * expression. - */ -__isl_give isl_pw_aff *isl_pw_aff_list_max(__isl_take isl_pw_aff_list *list) -{ - return pw_aff_list_reduce(list, &isl_pw_aff_max); -} - -#undef BASE -#define BASE aff - -#include - -__isl_give isl_multi_aff *isl_multi_aff_add(__isl_take isl_multi_aff *maff1, - __isl_take isl_multi_aff *maff2) -{ - int i; - isl_ctx *ctx; - - maff1 = isl_multi_aff_cow(maff1); - if (!maff1 || !maff2) - goto error; - - ctx = isl_multi_aff_get_ctx(maff1); - if (!isl_space_is_equal(maff1->space, maff2->space)) - isl_die(ctx, isl_error_invalid, - "spaces don't match", goto error); - - for (i = 0; i < maff1->n; ++i) { - maff1->p[i] = isl_aff_add(maff1->p[i], - isl_aff_copy(maff2->p[i])); - if (!maff1->p[i]) - goto error; - } - - isl_multi_aff_free(maff2); - return maff1; -error: - isl_multi_aff_free(maff1); - isl_multi_aff_free(maff2); - return NULL; -} - -/* Exploit the equalities in "eq" to simplify the affine expressions. - */ -static __isl_give isl_multi_aff *isl_multi_aff_substitute_equalities( - __isl_take isl_multi_aff *maff, __isl_take isl_basic_set *eq) -{ - int i; - - maff = isl_multi_aff_cow(maff); - if (!maff || !eq) - goto error; - - for (i = 0; i < maff->n; ++i) { - maff->p[i] = isl_aff_substitute_equalities(maff->p[i], - isl_basic_set_copy(eq)); - if (!maff->p[i]) - goto error; - } - - isl_basic_set_free(eq); - return maff; -error: - isl_basic_set_free(eq); - isl_multi_aff_free(maff); - return NULL; -} - -__isl_give isl_multi_aff *isl_multi_aff_scale(__isl_take isl_multi_aff *maff, - isl_int f) -{ - int i; - - maff = isl_multi_aff_cow(maff); - if (!maff) - return NULL; - - for (i = 0; i < maff->n; ++i) { - maff->p[i] = isl_aff_scale(maff->p[i], f); - if (!maff->p[i]) - return isl_multi_aff_free(maff); - } - - return maff; -} - -__isl_give isl_multi_aff *isl_multi_aff_add_on_domain(__isl_keep isl_set *dom, - __isl_take isl_multi_aff *maff1, __isl_take isl_multi_aff *maff2) -{ - maff1 = isl_multi_aff_add(maff1, maff2); - maff1 = isl_multi_aff_gist(maff1, isl_set_copy(dom)); - return maff1; -} - -int isl_multi_aff_is_empty(__isl_keep isl_multi_aff *maff) -{ - if (!maff) - return -1; - - return 0; -} - -int isl_multi_aff_plain_is_equal(__isl_keep isl_multi_aff *maff1, - __isl_keep isl_multi_aff *maff2) -{ - int i; - int equal; - - if (!maff1 || !maff2) - return -1; - if (maff1->n != maff2->n) - return 0; - equal = isl_space_is_equal(maff1->space, maff2->space); - if (equal < 0 || !equal) - return equal; - - for (i = 0; i < maff1->n; ++i) { - equal = isl_aff_plain_is_equal(maff1->p[i], maff2->p[i]); - if (equal < 0 || !equal) - return equal; - } - - return 1; -} - -__isl_give isl_multi_aff *isl_multi_aff_set_dim_name( - __isl_take isl_multi_aff *maff, - enum isl_dim_type type, unsigned pos, const char *s) -{ - int i; - - maff = isl_multi_aff_cow(maff); - if (!maff) - return NULL; - - maff->space = isl_space_set_dim_name(maff->space, type, pos, s); - if (!maff->space) - return isl_multi_aff_free(maff); - for (i = 0; i < maff->n; ++i) { - maff->p[i] = isl_aff_set_dim_name(maff->p[i], type, pos, s); - if (!maff->p[i]) - return isl_multi_aff_free(maff); - } - - return maff; -} - -__isl_give isl_multi_aff *isl_multi_aff_drop_dims(__isl_take isl_multi_aff *maff, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - maff = isl_multi_aff_cow(maff); - if (!maff) - return NULL; - - maff->space = isl_space_drop_dims(maff->space, type, first, n); - if (!maff->space) - return isl_multi_aff_free(maff); - for (i = 0; i < maff->n; ++i) { - maff->p[i] = isl_aff_drop_dims(maff->p[i], type, first, n); - if (!maff->p[i]) - return isl_multi_aff_free(maff); - } - - return maff; -} - -#undef PW -#define PW isl_pw_multi_aff -#undef EL -#define EL isl_multi_aff -#undef EL_IS_ZERO -#define EL_IS_ZERO is_empty -#undef ZERO -#define ZERO empty -#undef IS_ZERO -#define IS_ZERO is_empty -#undef FIELD -#define FIELD maff -#undef DEFAULT_IS_ZERO -#define DEFAULT_IS_ZERO 0 - -#define NO_NEG -#define NO_EVAL -#define NO_OPT -#define NO_INVOLVES_DIMS -#define NO_MOVE_DIMS -#define NO_INSERT_DIMS -#define NO_LIFT -#define NO_MORPH - -#include - -static __isl_give isl_pw_multi_aff *pw_multi_aff_add( - __isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2) -{ - return isl_pw_multi_aff_on_shared_domain(pma1, pma2, - &isl_multi_aff_add); -} - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_add( - __isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2) -{ - return isl_pw_multi_aff_align_params_pw_pw_and(pma1, pma2, - &pw_multi_aff_add); -} - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_union_add( - __isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2) -{ - return isl_pw_multi_aff_union_add_(pma1, pma2); -} - -/* Construct a map mapping the domain the piecewise multi-affine expression - * to its range, with each dimension in the range equated to the - * corresponding affine expression on its cell. - */ -__isl_give isl_map *isl_map_from_pw_multi_aff(__isl_take isl_pw_multi_aff *pma) -{ - int i; - isl_map *map; - - if (!pma) - return NULL; - - map = isl_map_empty(isl_pw_multi_aff_get_space(pma)); - - for (i = 0; i < pma->n; ++i) { - isl_multi_aff *maff; - isl_basic_map *bmap; - isl_map *map_i; - - maff = isl_multi_aff_copy(pma->p[i].maff); - bmap = isl_basic_map_from_multi_aff(maff); - map_i = isl_map_from_basic_map(bmap); - map_i = isl_map_intersect_domain(map_i, - isl_set_copy(pma->p[i].set)); - map = isl_map_union_disjoint(map, map_i); - } - - isl_pw_multi_aff_free(pma); - return map; -} - -__isl_give isl_set *isl_set_from_pw_multi_aff(__isl_take isl_pw_multi_aff *pma) -{ - if (!isl_space_is_set(pma->dim)) - isl_die(isl_pw_multi_aff_get_ctx(pma), isl_error_invalid, - "isl_pw_multi_aff cannot be converted into an isl_set", - return isl_pw_multi_aff_free(pma)); - - return isl_map_from_pw_multi_aff(pma); -} - -/* Try and create an isl_pw_multi_aff that is equivalent to the given isl_map. - * This obivously only works if the input "map" is single-valued. - * If so, we compute the lexicographic minimum of the image in the form - * of an isl_pw_multi_aff. Since the image is unique, it is equal - * to its lexicographic minimum. - * If the input is not single-valued, we produce an error. - */ -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_map(__isl_take isl_map *map) -{ - int i; - int sv; - isl_pw_multi_aff *pma; - - if (!map) - return NULL; - - sv = isl_map_is_single_valued(map); - if (sv < 0) - goto error; - if (!sv) - isl_die(isl_map_get_ctx(map), isl_error_invalid, - "map is not single-valued", goto error); - map = isl_map_make_disjoint(map); - if (!map) - return NULL; - - pma = isl_pw_multi_aff_empty(isl_map_get_space(map)); - - for (i = 0; i < map->n; ++i) { - isl_pw_multi_aff *pma_i; - isl_basic_map *bmap; - bmap = isl_basic_map_copy(map->p[i]); - pma_i = isl_basic_map_lexmin_pw_multi_aff(bmap); - pma = isl_pw_multi_aff_add_disjoint(pma, pma_i); - } - - isl_map_free(map); - return pma; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_set(__isl_take isl_set *set) -{ - return isl_pw_multi_aff_from_map(set); -} - -/* Plug in "subs" for dimension "type", "pos" of "aff". - * - * Let i be the dimension to replace and let "subs" be of the form - * - * f/d - * - * and "aff" of the form - * - * (a i + g)/m - * - * The result is - * - * floor((a f + d g')/(m d)) - * - * where g' is the result of plugging in "subs" in each of the integer - * divisions in g. - */ -__isl_give isl_aff *isl_aff_substitute(__isl_take isl_aff *aff, - enum isl_dim_type type, unsigned pos, __isl_keep isl_aff *subs) -{ - isl_ctx *ctx; - isl_int v; - - aff = isl_aff_cow(aff); - if (!aff || !subs) - return isl_aff_free(aff); - - ctx = isl_aff_get_ctx(aff); - if (!isl_space_is_equal(aff->ls->dim, subs->ls->dim)) - isl_die(ctx, isl_error_invalid, - "spaces don't match", return isl_aff_free(aff)); - if (isl_local_space_dim(subs->ls, isl_dim_div) != 0) - isl_die(ctx, isl_error_unsupported, - "cannot handle divs yet", return isl_aff_free(aff)); - - aff->ls = isl_local_space_substitute(aff->ls, type, pos, subs); - if (!aff->ls) - return isl_aff_free(aff); - - aff->v = isl_vec_cow(aff->v); - if (!aff->v) - return isl_aff_free(aff); - - pos += isl_local_space_offset(aff->ls, type); - - isl_int_init(v); - isl_int_set(v, aff->v->el[1 + pos]); - isl_int_set_si(aff->v->el[1 + pos], 0); - isl_seq_combine(aff->v->el + 1, subs->v->el[0], aff->v->el + 1, - v, subs->v->el + 1, subs->v->size - 1); - isl_int_mul(aff->v->el[0], aff->v->el[0], subs->v->el[0]); - isl_int_clear(v); - - return aff; -} - -/* Plug in "subs" for dimension "type", "pos" in each of the affine - * expressions in "maff". - */ -__isl_give isl_multi_aff *isl_multi_aff_substitute( - __isl_take isl_multi_aff *maff, enum isl_dim_type type, unsigned pos, - __isl_keep isl_aff *subs) -{ - int i; - - maff = isl_multi_aff_cow(maff); - if (!maff || !subs) - return isl_multi_aff_free(maff); - - if (type == isl_dim_in) - type = isl_dim_set; - - for (i = 0; i < maff->n; ++i) { - maff->p[i] = isl_aff_substitute(maff->p[i], type, pos, subs); - if (!maff->p[i]) - return isl_multi_aff_free(maff); - } - - return maff; -} - -/* Plug in "subs" for dimension "type", "pos" of "pma". - * - * pma is of the form - * - * A_i(v) -> M_i(v) - * - * while subs is of the form - * - * v' = B_j(v) -> S_j - * - * Each pair i,j such that C_ij = A_i \cap B_i is non-empty - * has a contribution in the result, in particular - * - * C_ij(S_j) -> M_i(S_j) - * - * Note that plugging in S_j in C_ij may also result in an empty set - * and this contribution should simply be discarded. - */ -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_substitute( - __isl_take isl_pw_multi_aff *pma, enum isl_dim_type type, unsigned pos, - __isl_keep isl_pw_aff *subs) -{ - int i, j, n; - isl_pw_multi_aff *res; - - if (!pma || !subs) - return isl_pw_multi_aff_free(pma); - - n = pma->n * subs->n; - res = isl_pw_multi_aff_alloc_size(isl_space_copy(pma->dim), n); - - for (i = 0; i < pma->n; ++i) { - for (j = 0; j < subs->n; ++j) { - isl_set *common; - isl_multi_aff *res_ij; - common = isl_set_intersect( - isl_set_copy(pma->p[i].set), - isl_set_copy(subs->p[j].set)); - common = isl_set_substitute(common, - type, pos, subs->p[j].aff); - if (isl_set_plain_is_empty(common)) { - isl_set_free(common); - continue; - } - - res_ij = isl_multi_aff_substitute( - isl_multi_aff_copy(pma->p[i].maff), - type, pos, subs->p[j].aff); - - res = isl_pw_multi_aff_add_piece(res, common, res_ij); - } - } - - isl_pw_multi_aff_free(pma); - return res; -} - -/* Extend the local space of "dst" to include the divs - * in the local space of "src". - */ -__isl_give isl_aff *isl_aff_align_divs(__isl_take isl_aff *dst, - __isl_keep isl_aff *src) -{ - isl_ctx *ctx; - int *exp1 = NULL; - int *exp2 = NULL; - isl_mat *div; - - if (!src || !dst) - return isl_aff_free(dst); - - ctx = isl_aff_get_ctx(src); - if (!isl_space_is_equal(src->ls->dim, dst->ls->dim)) - isl_die(ctx, isl_error_invalid, - "spaces don't match", goto error); - - if (src->ls->div->n_row == 0) - return dst; - - exp1 = isl_alloc_array(ctx, int, src->ls->div->n_row); - exp2 = isl_alloc_array(ctx, int, dst->ls->div->n_row); - if (!exp1 || !exp2) - goto error; - - div = isl_merge_divs(src->ls->div, dst->ls->div, exp1, exp2); - dst = isl_aff_expand_divs(dst, div, exp2); - free(exp1); - free(exp2); - - return dst; -error: - free(exp1); - free(exp2); - return isl_aff_free(dst); -} - -/* Adjust the local spaces of the affine expressions in "maff" - * such that they all have the save divs. - */ -__isl_give isl_multi_aff *isl_multi_aff_align_divs( - __isl_take isl_multi_aff *maff) -{ - int i; - - if (!maff) - return NULL; - if (maff->n == 0) - return maff; - maff = isl_multi_aff_cow(maff); - if (!maff) - return NULL; - - for (i = 1; i < maff->n; ++i) - maff->p[0] = isl_aff_align_divs(maff->p[0], maff->p[i]); - for (i = 1; i < maff->n; ++i) { - maff->p[i] = isl_aff_align_divs(maff->p[i], maff->p[0]); - if (!maff->p[i]) - return isl_multi_aff_free(maff); - } - - return maff; -} - -__isl_give isl_aff *isl_aff_lift(__isl_take isl_aff *aff) -{ - aff = isl_aff_cow(aff); - if (!aff) - return NULL; - - aff->ls = isl_local_space_lift(aff->ls); - if (!aff->ls) - return isl_aff_free(aff); - - return aff; -} - -/* Lift "maff" to a space with extra dimensions such that the result - * has no more existentially quantified variables. - * If "ls" is not NULL, then *ls is assigned the local space that lies - * at the basis of the lifting applied to "maff". - */ -__isl_give isl_multi_aff *isl_multi_aff_lift(__isl_take isl_multi_aff *maff, - __isl_give isl_local_space **ls) -{ - int i; - isl_space *space; - unsigned n_div; - - if (ls) - *ls = NULL; - - if (!maff) - return NULL; - - if (maff->n == 0) { - if (ls) { - isl_space *space = isl_multi_aff_get_domain_space(maff); - *ls = isl_local_space_from_space(space); - if (!*ls) - return isl_multi_aff_free(maff); - } - return maff; - } - - maff = isl_multi_aff_cow(maff); - maff = isl_multi_aff_align_divs(maff); - if (!maff) - return NULL; - - n_div = isl_aff_dim(maff->p[0], isl_dim_div); - space = isl_multi_aff_get_space(maff); - space = isl_space_lift(isl_space_domain(space), n_div); - space = isl_space_extend_domain_with_range(space, - isl_multi_aff_get_space(maff)); - if (!space) - return isl_multi_aff_free(maff); - isl_space_free(maff->space); - maff->space = space; - - if (ls) { - *ls = isl_aff_get_domain_local_space(maff->p[0]); - if (!*ls) - return isl_multi_aff_free(maff); - } - - for (i = 0; i < maff->n; ++i) { - maff->p[i] = isl_aff_lift(maff->p[i]); - if (!maff->p[i]) - goto error; - } - - return maff; -error: - if (ls) - isl_local_space_free(*ls); - return isl_multi_aff_free(maff); -} diff --git a/cloog-0.17.0/isl/isl_aff_private.h b/cloog-0.17.0/isl/isl_aff_private.h deleted file mode 100644 index 5a7c3e0..0000000 --- a/cloog-0.17.0/isl/isl_aff_private.h +++ /dev/null @@ -1,104 +0,0 @@ -#ifndef ISL_AFF_PRIVATE_H -#define ISL_AFF_PRIVATE_H - -#include -#include -#include -#include - -/* ls represents the domain space. - */ -struct isl_aff { - int ref; - - isl_local_space *ls; - isl_vec *v; -}; - -struct isl_pw_aff_piece { - struct isl_set *set; - struct isl_aff *aff; -}; - -struct isl_pw_aff { - int ref; - - isl_space *dim; - - int n; - - size_t size; - struct isl_pw_aff_piece p[1]; -}; - -struct isl_pw_multi_aff_piece { - isl_set *set; - isl_multi_aff *maff; -}; - -struct isl_pw_multi_aff { - int ref; - - isl_space *dim; - - int n; - - size_t size; - struct isl_pw_multi_aff_piece p[1]; -}; - -__isl_give isl_aff *isl_aff_alloc(__isl_take isl_local_space *ls); - -__isl_give isl_aff *isl_aff_reset_space_and_domain(__isl_take isl_aff *aff, - __isl_take isl_space *space, __isl_take isl_space *domain); -__isl_give isl_aff *isl_aff_reset_domain_space(__isl_take isl_aff *aff, - __isl_take isl_space *dim); -__isl_give isl_aff *isl_aff_realign_domain(__isl_take isl_aff *aff, - __isl_take isl_reordering *r); - -__isl_give isl_aff *isl_aff_normalize(__isl_take isl_aff *aff); - -__isl_give isl_aff *isl_aff_expand_divs( __isl_take isl_aff *aff, - __isl_take isl_mat *div, int *exp); - -__isl_give isl_pw_aff *isl_pw_aff_alloc_size(__isl_take isl_space *space, - int n); -__isl_give isl_pw_aff *isl_pw_aff_reset_space(__isl_take isl_pw_aff *pwaff, - __isl_take isl_space *dim); -__isl_give isl_pw_aff *isl_pw_aff_reset_domain_space( - __isl_take isl_pw_aff *pwaff, __isl_take isl_space *space); -__isl_give isl_pw_aff *isl_pw_aff_add_disjoint( - __isl_take isl_pw_aff *pwaff1, __isl_take isl_pw_aff *pwaff2); - -__isl_give isl_pw_aff *isl_pw_aff_union_opt(__isl_take isl_pw_aff *pwaff1, - __isl_take isl_pw_aff *pwaff2, int max); - -#undef BASE -#define BASE aff - -#include - -__isl_give isl_multi_aff *isl_multi_aff_dup(__isl_keep isl_multi_aff *multi); -__isl_give isl_multi_aff *isl_multi_aff_align_params( - __isl_take isl_multi_aff *multi, __isl_take isl_space *model); - -__isl_give isl_multi_aff *isl_multi_aff_drop_dims( - __isl_take isl_multi_aff *maff, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_reset_domain_space( - __isl_take isl_pw_multi_aff *pwmaff, __isl_take isl_space *space); -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_reset_space( - __isl_take isl_pw_multi_aff *pwmaff, __isl_take isl_space *space); -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_add_disjoint( - __isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2); - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_project_out( - __isl_take isl_pw_multi_aff *pma, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_substitute( - __isl_take isl_pw_multi_aff *pma, enum isl_dim_type type, unsigned pos, - __isl_keep isl_pw_aff *subs); - -#endif diff --git a/cloog-0.17.0/isl/isl_affine_hull.c b/cloog-0.17.0/isl/isl_affine_hull.c deleted file mode 100644 index 96af313..0000000 --- a/cloog-0.17.0/isl/isl_affine_hull.c +++ /dev/null @@ -1,1018 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include -#include -#include "isl_equalities.h" -#include "isl_sample.h" -#include "isl_tab.h" -#include - -struct isl_basic_map *isl_basic_map_implicit_equalities( - struct isl_basic_map *bmap) -{ - struct isl_tab *tab; - - if (!bmap) - return bmap; - - bmap = isl_basic_map_gauss(bmap, NULL); - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) - return bmap; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_NO_IMPLICIT)) - return bmap; - if (bmap->n_ineq <= 1) - return bmap; - - tab = isl_tab_from_basic_map(bmap); - if (isl_tab_detect_implicit_equalities(tab) < 0) - goto error; - bmap = isl_basic_map_update_from_tab(bmap, tab); - isl_tab_free(tab); - bmap = isl_basic_map_gauss(bmap, NULL); - ISL_F_SET(bmap, ISL_BASIC_MAP_NO_IMPLICIT); - return bmap; -error: - isl_tab_free(tab); - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_implicit_equalities( - struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_implicit_equalities((struct isl_basic_map*)bset); -} - -struct isl_map *isl_map_implicit_equalities(struct isl_map *map) -{ - int i; - - if (!map) - return map; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_implicit_equalities(map->p[i]); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Make eq[row][col] of both bmaps equal so we can add the row - * add the column to the common matrix. - * Note that because of the echelon form, the columns of row row - * after column col are zero. - */ -static void set_common_multiple( - struct isl_basic_set *bset1, struct isl_basic_set *bset2, - unsigned row, unsigned col) -{ - isl_int m, c; - - if (isl_int_eq(bset1->eq[row][col], bset2->eq[row][col])) - return; - - isl_int_init(c); - isl_int_init(m); - isl_int_lcm(m, bset1->eq[row][col], bset2->eq[row][col]); - isl_int_divexact(c, m, bset1->eq[row][col]); - isl_seq_scale(bset1->eq[row], bset1->eq[row], c, col+1); - isl_int_divexact(c, m, bset2->eq[row][col]); - isl_seq_scale(bset2->eq[row], bset2->eq[row], c, col+1); - isl_int_clear(c); - isl_int_clear(m); -} - -/* Delete a given equality, moving all the following equalities one up. - */ -static void delete_row(struct isl_basic_set *bset, unsigned row) -{ - isl_int *t; - int r; - - t = bset->eq[row]; - bset->n_eq--; - for (r = row; r < bset->n_eq; ++r) - bset->eq[r] = bset->eq[r+1]; - bset->eq[bset->n_eq] = t; -} - -/* Make first row entries in column col of bset1 identical to - * those of bset2, using the fact that entry bset1->eq[row][col]=a - * is non-zero. Initially, these elements of bset1 are all zero. - * For each row i < row, we set - * A[i] = a * A[i] + B[i][col] * A[row] - * B[i] = a * B[i] - * so that - * A[i][col] = B[i][col] = a * old(B[i][col]) - */ -static void construct_column( - struct isl_basic_set *bset1, struct isl_basic_set *bset2, - unsigned row, unsigned col) -{ - int r; - isl_int a; - isl_int b; - unsigned total; - - isl_int_init(a); - isl_int_init(b); - total = 1 + isl_basic_set_n_dim(bset1); - for (r = 0; r < row; ++r) { - if (isl_int_is_zero(bset2->eq[r][col])) - continue; - isl_int_gcd(b, bset2->eq[r][col], bset1->eq[row][col]); - isl_int_divexact(a, bset1->eq[row][col], b); - isl_int_divexact(b, bset2->eq[r][col], b); - isl_seq_combine(bset1->eq[r], a, bset1->eq[r], - b, bset1->eq[row], total); - isl_seq_scale(bset2->eq[r], bset2->eq[r], a, total); - } - isl_int_clear(a); - isl_int_clear(b); - delete_row(bset1, row); -} - -/* Make first row entries in column col of bset1 identical to - * those of bset2, using only these entries of the two matrices. - * Let t be the last row with different entries. - * For each row i < t, we set - * A[i] = (A[t][col]-B[t][col]) * A[i] + (B[i][col]-A[i][col) * A[t] - * B[i] = (A[t][col]-B[t][col]) * B[i] + (B[i][col]-A[i][col) * B[t] - * so that - * A[i][col] = B[i][col] = old(A[t][col]*B[i][col]-A[i][col]*B[t][col]) - */ -static int transform_column( - struct isl_basic_set *bset1, struct isl_basic_set *bset2, - unsigned row, unsigned col) -{ - int i, t; - isl_int a, b, g; - unsigned total; - - for (t = row-1; t >= 0; --t) - if (isl_int_ne(bset1->eq[t][col], bset2->eq[t][col])) - break; - if (t < 0) - return 0; - - total = 1 + isl_basic_set_n_dim(bset1); - isl_int_init(a); - isl_int_init(b); - isl_int_init(g); - isl_int_sub(b, bset1->eq[t][col], bset2->eq[t][col]); - for (i = 0; i < t; ++i) { - isl_int_sub(a, bset2->eq[i][col], bset1->eq[i][col]); - isl_int_gcd(g, a, b); - isl_int_divexact(a, a, g); - isl_int_divexact(g, b, g); - isl_seq_combine(bset1->eq[i], g, bset1->eq[i], a, bset1->eq[t], - total); - isl_seq_combine(bset2->eq[i], g, bset2->eq[i], a, bset2->eq[t], - total); - } - isl_int_clear(a); - isl_int_clear(b); - isl_int_clear(g); - delete_row(bset1, t); - delete_row(bset2, t); - return 1; -} - -/* The implementation is based on Section 5.2 of Michael Karr, - * "Affine Relationships Among Variables of a Program", - * except that the echelon form we use starts from the last column - * and that we are dealing with integer coefficients. - */ -static struct isl_basic_set *affine_hull( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - unsigned total; - int col; - int row; - - if (!bset1 || !bset2) - goto error; - - total = 1 + isl_basic_set_n_dim(bset1); - - row = 0; - for (col = total-1; col >= 0; --col) { - int is_zero1 = row >= bset1->n_eq || - isl_int_is_zero(bset1->eq[row][col]); - int is_zero2 = row >= bset2->n_eq || - isl_int_is_zero(bset2->eq[row][col]); - if (!is_zero1 && !is_zero2) { - set_common_multiple(bset1, bset2, row, col); - ++row; - } else if (!is_zero1 && is_zero2) { - construct_column(bset1, bset2, row, col); - } else if (is_zero1 && !is_zero2) { - construct_column(bset2, bset1, row, col); - } else { - if (transform_column(bset1, bset2, row, col)) - --row; - } - } - isl_assert(bset1->ctx, row == bset1->n_eq, goto error); - isl_basic_set_free(bset2); - bset1 = isl_basic_set_normalize_constraints(bset1); - return bset1; -error: - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return NULL; -} - -/* Find an integer point in the set represented by "tab" - * that lies outside of the equality "eq" e(x) = 0. - * If "up" is true, look for a point satisfying e(x) - 1 >= 0. - * Otherwise, look for a point satisfying -e(x) - 1 >= 0 (i.e., e(x) <= -1). - * The point, if found, is returned. - * If no point can be found, a zero-length vector is returned. - * - * Before solving an ILP problem, we first check if simply - * adding the normal of the constraint to one of the known - * integer points in the basic set represented by "tab" - * yields another point inside the basic set. - * - * The caller of this function ensures that the tableau is bounded or - * that tab->basis and tab->n_unbounded have been set appropriately. - */ -static struct isl_vec *outside_point(struct isl_tab *tab, isl_int *eq, int up) -{ - struct isl_ctx *ctx; - struct isl_vec *sample = NULL; - struct isl_tab_undo *snap; - unsigned dim; - - if (!tab) - return NULL; - ctx = tab->mat->ctx; - - dim = tab->n_var; - sample = isl_vec_alloc(ctx, 1 + dim); - if (!sample) - return NULL; - isl_int_set_si(sample->el[0], 1); - isl_seq_combine(sample->el + 1, - ctx->one, tab->bmap->sample->el + 1, - up ? ctx->one : ctx->negone, eq + 1, dim); - if (isl_basic_map_contains(tab->bmap, sample)) - return sample; - isl_vec_free(sample); - sample = NULL; - - snap = isl_tab_snap(tab); - - if (!up) - isl_seq_neg(eq, eq, 1 + dim); - isl_int_sub_ui(eq[0], eq[0], 1); - - if (isl_tab_extend_cons(tab, 1) < 0) - goto error; - if (isl_tab_add_ineq(tab, eq) < 0) - goto error; - - sample = isl_tab_sample(tab); - - isl_int_add_ui(eq[0], eq[0], 1); - if (!up) - isl_seq_neg(eq, eq, 1 + dim); - - if (sample && isl_tab_rollback(tab, snap) < 0) - goto error; - - return sample; -error: - isl_vec_free(sample); - return NULL; -} - -struct isl_basic_set *isl_basic_set_recession_cone(struct isl_basic_set *bset) -{ - int i; - - bset = isl_basic_set_cow(bset); - if (!bset) - return NULL; - isl_assert(bset->ctx, bset->n_div == 0, goto error); - - for (i = 0; i < bset->n_eq; ++i) - isl_int_set_si(bset->eq[i][0], 0); - - for (i = 0; i < bset->n_ineq; ++i) - isl_int_set_si(bset->ineq[i][0], 0); - - ISL_F_CLR(bset, ISL_BASIC_SET_NO_IMPLICIT); - return isl_basic_set_implicit_equalities(bset); -error: - isl_basic_set_free(bset); - return NULL; -} - -__isl_give isl_set *isl_set_recession_cone(__isl_take isl_set *set) -{ - int i; - - if (!set) - return NULL; - if (set->n == 0) - return set; - - set = isl_set_remove_divs(set); - set = isl_set_cow(set); - if (!set) - return NULL; - - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_recession_cone(set->p[i]); - if (!set->p[i]) - goto error; - } - - return set; -error: - isl_set_free(set); - return NULL; -} - -/* Extend an initial (under-)approximation of the affine hull of basic - * set represented by the tableau "tab" - * by looking for points that do not satisfy one of the equalities - * in the current approximation and adding them to that approximation - * until no such points can be found any more. - * - * The caller of this function ensures that "tab" is bounded or - * that tab->basis and tab->n_unbounded have been set appropriately. - */ -static struct isl_basic_set *extend_affine_hull(struct isl_tab *tab, - struct isl_basic_set *hull) -{ - int i, j; - unsigned dim; - - if (!tab || !hull) - goto error; - - dim = tab->n_var; - - if (isl_tab_extend_cons(tab, 2 * dim + 1) < 0) - goto error; - - for (i = 0; i < dim; ++i) { - struct isl_vec *sample; - struct isl_basic_set *point; - for (j = 0; j < hull->n_eq; ++j) { - sample = outside_point(tab, hull->eq[j], 1); - if (!sample) - goto error; - if (sample->size > 0) - break; - isl_vec_free(sample); - sample = outside_point(tab, hull->eq[j], 0); - if (!sample) - goto error; - if (sample->size > 0) - break; - isl_vec_free(sample); - - if (isl_tab_add_eq(tab, hull->eq[j]) < 0) - goto error; - } - if (j == hull->n_eq) - break; - if (tab->samples) - tab = isl_tab_add_sample(tab, isl_vec_copy(sample)); - if (!tab) - goto error; - point = isl_basic_set_from_vec(sample); - hull = affine_hull(hull, point); - if (!hull) - return NULL; - } - - return hull; -error: - isl_basic_set_free(hull); - return NULL; -} - -/* Drop all constraints in bset that involve any of the dimensions - * first to first+n-1. - */ -__isl_give isl_basic_set *isl_basic_set_drop_constraints_involving( - __isl_take isl_basic_set *bset, unsigned first, unsigned n) -{ - int i; - - if (n == 0) - return bset; - - bset = isl_basic_set_cow(bset); - - if (!bset) - return NULL; - - for (i = bset->n_eq - 1; i >= 0; --i) { - if (isl_seq_first_non_zero(bset->eq[i] + 1 + first, n) == -1) - continue; - isl_basic_set_drop_equality(bset, i); - } - - for (i = bset->n_ineq - 1; i >= 0; --i) { - if (isl_seq_first_non_zero(bset->ineq[i] + 1 + first, n) == -1) - continue; - isl_basic_set_drop_inequality(bset, i); - } - - return bset; -} - -/* Look for all equalities satisfied by the integer points in bset, - * which is assumed to be bounded. - * - * The equalities are obtained by successively looking for - * a point that is affinely independent of the points found so far. - * In particular, for each equality satisfied by the points so far, - * we check if there is any point on a hyperplane parallel to the - * corresponding hyperplane shifted by at least one (in either direction). - */ -static struct isl_basic_set *uset_affine_hull_bounded(struct isl_basic_set *bset) -{ - struct isl_vec *sample = NULL; - struct isl_basic_set *hull; - struct isl_tab *tab = NULL; - unsigned dim; - - if (isl_basic_set_plain_is_empty(bset)) - return bset; - - dim = isl_basic_set_n_dim(bset); - - if (bset->sample && bset->sample->size == 1 + dim) { - int contains = isl_basic_set_contains(bset, bset->sample); - if (contains < 0) - goto error; - if (contains) { - if (dim == 0) - return bset; - sample = isl_vec_copy(bset->sample); - } else { - isl_vec_free(bset->sample); - bset->sample = NULL; - } - } - - tab = isl_tab_from_basic_set(bset); - if (!tab) - goto error; - if (tab->empty) { - isl_tab_free(tab); - isl_vec_free(sample); - return isl_basic_set_set_to_empty(bset); - } - if (isl_tab_track_bset(tab, isl_basic_set_copy(bset)) < 0) - goto error; - - if (!sample) { - struct isl_tab_undo *snap; - snap = isl_tab_snap(tab); - sample = isl_tab_sample(tab); - if (isl_tab_rollback(tab, snap) < 0) - goto error; - isl_vec_free(tab->bmap->sample); - tab->bmap->sample = isl_vec_copy(sample); - } - - if (!sample) - goto error; - if (sample->size == 0) { - isl_tab_free(tab); - isl_vec_free(sample); - return isl_basic_set_set_to_empty(bset); - } - - hull = isl_basic_set_from_vec(sample); - - isl_basic_set_free(bset); - hull = extend_affine_hull(tab, hull); - isl_tab_free(tab); - - return hull; -error: - isl_vec_free(sample); - isl_tab_free(tab); - isl_basic_set_free(bset); - return NULL; -} - -/* Given an unbounded tableau and an integer point satisfying the tableau, - * construct an initial affine hull containing the recession cone - * shifted to the given point. - * - * The unbounded directions are taken from the last rows of the basis, - * which is assumed to have been initialized appropriately. - */ -static __isl_give isl_basic_set *initial_hull(struct isl_tab *tab, - __isl_take isl_vec *vec) -{ - int i; - int k; - struct isl_basic_set *bset = NULL; - struct isl_ctx *ctx; - unsigned dim; - - if (!vec || !tab) - return NULL; - ctx = vec->ctx; - isl_assert(ctx, vec->size != 0, goto error); - - bset = isl_basic_set_alloc(ctx, 0, vec->size - 1, 0, vec->size - 1, 0); - if (!bset) - goto error; - dim = isl_basic_set_n_dim(bset) - tab->n_unbounded; - for (i = 0; i < dim; ++i) { - k = isl_basic_set_alloc_equality(bset); - if (k < 0) - goto error; - isl_seq_cpy(bset->eq[k] + 1, tab->basis->row[1 + i] + 1, - vec->size - 1); - isl_seq_inner_product(bset->eq[k] + 1, vec->el +1, - vec->size - 1, &bset->eq[k][0]); - isl_int_neg(bset->eq[k][0], bset->eq[k][0]); - } - bset->sample = vec; - bset = isl_basic_set_gauss(bset, NULL); - - return bset; -error: - isl_basic_set_free(bset); - isl_vec_free(vec); - return NULL; -} - -/* Given a tableau of a set and a tableau of the corresponding - * recession cone, detect and add all equalities to the tableau. - * If the tableau is bounded, then we can simply keep the - * tableau in its state after the return from extend_affine_hull. - * However, if the tableau is unbounded, then - * isl_tab_set_initial_basis_with_cone will add some additional - * constraints to the tableau that have to be removed again. - * In this case, we therefore rollback to the state before - * any constraints were added and then add the equalities back in. - */ -struct isl_tab *isl_tab_detect_equalities(struct isl_tab *tab, - struct isl_tab *tab_cone) -{ - int j; - struct isl_vec *sample; - struct isl_basic_set *hull; - struct isl_tab_undo *snap; - - if (!tab || !tab_cone) - goto error; - - snap = isl_tab_snap(tab); - - isl_mat_free(tab->basis); - tab->basis = NULL; - - isl_assert(tab->mat->ctx, tab->bmap, goto error); - isl_assert(tab->mat->ctx, tab->samples, goto error); - isl_assert(tab->mat->ctx, tab->samples->n_col == 1 + tab->n_var, goto error); - isl_assert(tab->mat->ctx, tab->n_sample > tab->n_outside, goto error); - - if (isl_tab_set_initial_basis_with_cone(tab, tab_cone) < 0) - goto error; - - sample = isl_vec_alloc(tab->mat->ctx, 1 + tab->n_var); - if (!sample) - goto error; - - isl_seq_cpy(sample->el, tab->samples->row[tab->n_outside], sample->size); - - isl_vec_free(tab->bmap->sample); - tab->bmap->sample = isl_vec_copy(sample); - - if (tab->n_unbounded == 0) - hull = isl_basic_set_from_vec(isl_vec_copy(sample)); - else - hull = initial_hull(tab, isl_vec_copy(sample)); - - for (j = tab->n_outside + 1; j < tab->n_sample; ++j) { - isl_seq_cpy(sample->el, tab->samples->row[j], sample->size); - hull = affine_hull(hull, - isl_basic_set_from_vec(isl_vec_copy(sample))); - } - - isl_vec_free(sample); - - hull = extend_affine_hull(tab, hull); - if (!hull) - goto error; - - if (tab->n_unbounded == 0) { - isl_basic_set_free(hull); - return tab; - } - - if (isl_tab_rollback(tab, snap) < 0) - goto error; - - if (hull->n_eq > tab->n_zero) { - for (j = 0; j < hull->n_eq; ++j) { - isl_seq_normalize(tab->mat->ctx, hull->eq[j], 1 + tab->n_var); - if (isl_tab_add_eq(tab, hull->eq[j]) < 0) - goto error; - } - } - - isl_basic_set_free(hull); - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Compute the affine hull of "bset", where "cone" is the recession cone - * of "bset". - * - * We first compute a unimodular transformation that puts the unbounded - * directions in the last dimensions. In particular, we take a transformation - * that maps all equalities to equalities (in HNF) on the first dimensions. - * Let x be the original dimensions and y the transformed, with y_1 bounded - * and y_2 unbounded. - * - * [ y_1 ] [ y_1 ] [ Q_1 ] - * x = U [ y_2 ] [ y_2 ] = [ Q_2 ] x - * - * Let's call the input basic set S. We compute S' = preimage(S, U) - * and drop the final dimensions including any constraints involving them. - * This results in set S''. - * Then we compute the affine hull A'' of S''. - * Let F y_1 >= g be the constraint system of A''. In the transformed - * space the y_2 are unbounded, so we can add them back without any constraints, - * resulting in - * - * [ y_1 ] - * [ F 0 ] [ y_2 ] >= g - * or - * [ Q_1 ] - * [ F 0 ] [ Q_2 ] x >= g - * or - * F Q_1 x >= g - * - * The affine hull in the original space is then obtained as - * A = preimage(A'', Q_1). - */ -static struct isl_basic_set *affine_hull_with_cone(struct isl_basic_set *bset, - struct isl_basic_set *cone) -{ - unsigned total; - unsigned cone_dim; - struct isl_basic_set *hull; - struct isl_mat *M, *U, *Q; - - if (!bset || !cone) - goto error; - - total = isl_basic_set_total_dim(cone); - cone_dim = total - cone->n_eq; - - M = isl_mat_sub_alloc6(bset->ctx, cone->eq, 0, cone->n_eq, 1, total); - M = isl_mat_left_hermite(M, 0, &U, &Q); - if (!M) - goto error; - isl_mat_free(M); - - U = isl_mat_lin_to_aff(U); - bset = isl_basic_set_preimage(bset, isl_mat_copy(U)); - - bset = isl_basic_set_drop_constraints_involving(bset, total - cone_dim, - cone_dim); - bset = isl_basic_set_drop_dims(bset, total - cone_dim, cone_dim); - - Q = isl_mat_lin_to_aff(Q); - Q = isl_mat_drop_rows(Q, 1 + total - cone_dim, cone_dim); - - if (bset && bset->sample && bset->sample->size == 1 + total) - bset->sample = isl_mat_vec_product(isl_mat_copy(Q), bset->sample); - - hull = uset_affine_hull_bounded(bset); - - if (!hull) - isl_mat_free(U); - else { - struct isl_vec *sample = isl_vec_copy(hull->sample); - U = isl_mat_drop_cols(U, 1 + total - cone_dim, cone_dim); - if (sample && sample->size > 0) - sample = isl_mat_vec_product(U, sample); - else - isl_mat_free(U); - hull = isl_basic_set_preimage(hull, Q); - if (hull) { - isl_vec_free(hull->sample); - hull->sample = sample; - } else - isl_vec_free(sample); - } - - isl_basic_set_free(cone); - - return hull; -error: - isl_basic_set_free(bset); - isl_basic_set_free(cone); - return NULL; -} - -/* Look for all equalities satisfied by the integer points in bset, - * which is assumed not to have any explicit equalities. - * - * The equalities are obtained by successively looking for - * a point that is affinely independent of the points found so far. - * In particular, for each equality satisfied by the points so far, - * we check if there is any point on a hyperplane parallel to the - * corresponding hyperplane shifted by at least one (in either direction). - * - * Before looking for any outside points, we first compute the recession - * cone. The directions of this recession cone will always be part - * of the affine hull, so there is no need for looking for any points - * in these directions. - * In particular, if the recession cone is full-dimensional, then - * the affine hull is simply the whole universe. - */ -static struct isl_basic_set *uset_affine_hull(struct isl_basic_set *bset) -{ - struct isl_basic_set *cone; - - if (isl_basic_set_plain_is_empty(bset)) - return bset; - - cone = isl_basic_set_recession_cone(isl_basic_set_copy(bset)); - if (!cone) - goto error; - if (cone->n_eq == 0) { - struct isl_basic_set *hull; - isl_basic_set_free(cone); - hull = isl_basic_set_universe_like(bset); - isl_basic_set_free(bset); - return hull; - } - - if (cone->n_eq < isl_basic_set_total_dim(cone)) - return affine_hull_with_cone(bset, cone); - - isl_basic_set_free(cone); - return uset_affine_hull_bounded(bset); -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Look for all equalities satisfied by the integer points in bmap - * that are independent of the equalities already explicitly available - * in bmap. - * - * We first remove all equalities already explicitly available, - * then look for additional equalities in the reduced space - * and then transform the result to the original space. - * The original equalities are _not_ added to this set. This is - * the responsibility of the calling function. - * The resulting basic set has all meaning about the dimensions removed. - * In particular, dimensions that correspond to existential variables - * in bmap and that are found to be fixed are not removed. - */ -static struct isl_basic_set *equalities_in_underlying_set( - struct isl_basic_map *bmap) -{ - struct isl_mat *T1 = NULL; - struct isl_mat *T2 = NULL; - struct isl_basic_set *bset = NULL; - struct isl_basic_set *hull = NULL; - - bset = isl_basic_map_underlying_set(bmap); - if (!bset) - return NULL; - if (bset->n_eq) - bset = isl_basic_set_remove_equalities(bset, &T1, &T2); - if (!bset) - goto error; - - hull = uset_affine_hull(bset); - if (!T2) - return hull; - - if (!hull) { - isl_mat_free(T1); - isl_mat_free(T2); - } else { - struct isl_vec *sample = isl_vec_copy(hull->sample); - if (sample && sample->size > 0) - sample = isl_mat_vec_product(T1, sample); - else - isl_mat_free(T1); - hull = isl_basic_set_preimage(hull, T2); - if (hull) { - isl_vec_free(hull->sample); - hull->sample = sample; - } else - isl_vec_free(sample); - } - - return hull; -error: - isl_mat_free(T2); - isl_basic_set_free(bset); - isl_basic_set_free(hull); - return NULL; -} - -/* Detect and make explicit all equalities satisfied by the (integer) - * points in bmap. - */ -struct isl_basic_map *isl_basic_map_detect_equalities( - struct isl_basic_map *bmap) -{ - int i, j; - struct isl_basic_set *hull = NULL; - - if (!bmap) - return NULL; - if (bmap->n_ineq == 0) - return bmap; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) - return bmap; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_ALL_EQUALITIES)) - return bmap; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL)) - return isl_basic_map_implicit_equalities(bmap); - - hull = equalities_in_underlying_set(isl_basic_map_copy(bmap)); - if (!hull) - goto error; - if (ISL_F_ISSET(hull, ISL_BASIC_SET_EMPTY)) { - isl_basic_set_free(hull); - return isl_basic_map_set_to_empty(bmap); - } - bmap = isl_basic_map_extend_space(bmap, isl_space_copy(bmap->dim), 0, - hull->n_eq, 0); - for (i = 0; i < hull->n_eq; ++i) { - j = isl_basic_map_alloc_equality(bmap); - if (j < 0) - goto error; - isl_seq_cpy(bmap->eq[j], hull->eq[i], - 1 + isl_basic_set_total_dim(hull)); - } - isl_vec_free(bmap->sample); - bmap->sample = isl_vec_copy(hull->sample); - isl_basic_set_free(hull); - ISL_F_SET(bmap, ISL_BASIC_MAP_NO_IMPLICIT | ISL_BASIC_MAP_ALL_EQUALITIES); - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_set_free(hull); - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_detect_equalities( - __isl_take isl_basic_set *bset) -{ - return (isl_basic_set *) - isl_basic_map_detect_equalities((isl_basic_map *)bset); -} - -__isl_give isl_map *isl_map_inline_foreach_basic_map(__isl_take isl_map *map, - __isl_give isl_basic_map *(*fn)(__isl_take isl_basic_map *bmap)) -{ - struct isl_basic_map *bmap; - int i; - - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - bmap = isl_basic_map_copy(map->p[i]); - bmap = fn(bmap); - if (!bmap) - goto error; - isl_basic_map_free(map->p[i]); - map->p[i] = bmap; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_map *isl_map_detect_equalities(__isl_take isl_map *map) -{ - return isl_map_inline_foreach_basic_map(map, - &isl_basic_map_detect_equalities); -} - -__isl_give isl_set *isl_set_detect_equalities(__isl_take isl_set *set) -{ - return (isl_set *)isl_map_detect_equalities((isl_map *)set); -} - -/* After computing the rational affine hull (by detecting the implicit - * equalities), we compute the additional equalities satisfied by - * the integer points (if any) and add the original equalities back in. - */ -struct isl_basic_map *isl_basic_map_affine_hull(struct isl_basic_map *bmap) -{ - bmap = isl_basic_map_detect_equalities(bmap); - bmap = isl_basic_map_cow(bmap); - if (bmap) - isl_basic_map_free_inequality(bmap, bmap->n_ineq); - bmap = isl_basic_map_finalize(bmap); - return bmap; -} - -struct isl_basic_set *isl_basic_set_affine_hull(struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_affine_hull((struct isl_basic_map *)bset); -} - -struct isl_basic_map *isl_map_affine_hull(struct isl_map *map) -{ - int i; - struct isl_basic_map *model = NULL; - struct isl_basic_map *hull = NULL; - struct isl_set *set; - - map = isl_map_detect_equalities(map); - map = isl_map_align_divs(map); - - if (!map) - return NULL; - - if (map->n == 0) { - hull = isl_basic_map_empty_like_map(map); - isl_map_free(map); - return hull; - } - - model = isl_basic_map_copy(map->p[0]); - set = isl_map_underlying_set(map); - set = isl_set_cow(set); - if (!set) - goto error; - - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_cow(set->p[i]); - set->p[i] = isl_basic_set_affine_hull(set->p[i]); - set->p[i] = isl_basic_set_gauss(set->p[i], NULL); - if (!set->p[i]) - goto error; - } - set = isl_set_remove_empty_parts(set); - if (set->n == 0) { - hull = isl_basic_map_empty_like(model); - isl_basic_map_free(model); - } else { - struct isl_basic_set *bset; - while (set->n > 1) { - set->p[0] = affine_hull(set->p[0], set->p[--set->n]); - if (!set->p[0]) - goto error; - } - bset = isl_basic_set_copy(set->p[0]); - hull = isl_basic_map_overlying_set(bset, model); - } - isl_set_free(set); - hull = isl_basic_map_simplify(hull); - return isl_basic_map_finalize(hull); -error: - isl_basic_map_free(model); - isl_set_free(set); - return NULL; -} - -struct isl_basic_set *isl_set_affine_hull(struct isl_set *set) -{ - return (struct isl_basic_set *) - isl_map_affine_hull((struct isl_map *)set); -} diff --git a/cloog-0.17.0/isl/isl_arg.c b/cloog-0.17.0/isl/isl_arg.c deleted file mode 100644 index 6961a07..0000000 --- a/cloog-0.17.0/isl/isl_arg.c +++ /dev/null @@ -1,1205 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include - -#include -#include - -static struct isl_arg help_arg[] = { -ISL_ARG_PHANTOM_BOOL('h', "help", NULL, "print this help, then exit") -}; - -static void set_default_choice(struct isl_arg *arg, void *opt) -{ - *(unsigned *)(((char *)opt) + arg->offset) = arg->u.choice.default_value; -} - -static void set_default_flags(struct isl_arg *arg, void *opt) -{ - *(unsigned *)(((char *)opt) + arg->offset) = arg->u.flags.default_value; -} - -static void set_default_bool(struct isl_arg *arg, void *opt) -{ - if (arg->offset == (size_t) -1) - return; - *(unsigned *)(((char *)opt) + arg->offset) = arg->u.b.default_value; -} - -static void set_default_child(struct isl_arg *arg, void *opt) -{ - void *child; - - if (arg->offset == (size_t) -1) - child = opt; - else { - child = calloc(1, arg->u.child.child->options_size); - *(void **)(((char *)opt) + arg->offset) = child; - } - - if (child) - isl_args_set_defaults(arg->u.child.child, child); -} - -static void set_default_user(struct isl_arg *arg, void *opt) -{ - arg->u.user.init(((char *)opt) + arg->offset); -} - -static void set_default_int(struct isl_arg *arg, void *opt) -{ - *(int *)(((char *)opt) + arg->offset) = arg->u.i.default_value; -} - -static void set_default_long(struct isl_arg *arg, void *opt) -{ - *(long *)(((char *)opt) + arg->offset) = arg->u.l.default_value; -} - -static void set_default_ulong(struct isl_arg *arg, void *opt) -{ - *(unsigned long *)(((char *)opt) + arg->offset) = arg->u.ul.default_value; -} - -static void set_default_str(struct isl_arg *arg, void *opt) -{ - const char *str = NULL; - if (arg->u.str.default_value) - str = strdup(arg->u.str.default_value); - *(const char **)(((char *)opt) + arg->offset) = str; -} - -static void set_default_str_list(struct isl_arg *arg, void *opt) -{ - *(const char ***)(((char *) opt) + arg->offset) = NULL; - *(int *)(((char *) opt) + arg->u.str_list.offset_n) = 0; -} - -void isl_args_set_defaults(struct isl_args *args, void *opt) -{ - int i; - - for (i = 0; args->args[i].type != isl_arg_end; ++i) { - switch (args->args[i].type) { - case isl_arg_choice: - set_default_choice(&args->args[i], opt); - break; - case isl_arg_flags: - set_default_flags(&args->args[i], opt); - break; - case isl_arg_bool: - set_default_bool(&args->args[i], opt); - break; - case isl_arg_child: - set_default_child(&args->args[i], opt); - break; - case isl_arg_user: - set_default_user(&args->args[i], opt); - break; - case isl_arg_int: - set_default_int(&args->args[i], opt); - break; - case isl_arg_long: - set_default_long(&args->args[i], opt); - break; - case isl_arg_ulong: - set_default_ulong(&args->args[i], opt); - break; - case isl_arg_arg: - case isl_arg_str: - set_default_str(&args->args[i], opt); - break; - case isl_arg_str_list: - set_default_str_list(&args->args[i], opt); - break; - case isl_arg_alias: - case isl_arg_footer: - case isl_arg_version: - case isl_arg_end: - break; - } - } -} - -static void free_str_list(struct isl_arg *arg, void *opt) -{ - int i; - int n = *(int *)(((char *) opt) + arg->u.str_list.offset_n); - char **list = *(char ***)(((char *) opt) + arg->offset); - - for (i = 0; i < n; ++i) - free(list[i]); - free(list); -} - -static void free_args(struct isl_arg *arg, void *opt) -{ - int i; - - for (i = 0; arg[i].type != isl_arg_end; ++i) { - switch (arg[i].type) { - case isl_arg_child: - if (arg[i].offset == (size_t) -1) - free_args(arg[i].u.child.child->args, opt); - else - isl_args_free(arg[i].u.child.child, - *(void **)(((char *)opt) + arg[i].offset)); - break; - case isl_arg_arg: - case isl_arg_str: - free(*(char **)(((char *)opt) + arg[i].offset)); - break; - case isl_arg_str_list: - free_str_list(&arg[i], opt); - break; - case isl_arg_user: - if (arg[i].u.user.clear) - arg[i].u.user.clear(((char *)opt) + arg[i].offset); - break; - case isl_arg_alias: - case isl_arg_bool: - case isl_arg_choice: - case isl_arg_flags: - case isl_arg_int: - case isl_arg_long: - case isl_arg_ulong: - case isl_arg_version: - case isl_arg_footer: - case isl_arg_end: - break; - } - } -} - -void isl_args_free(struct isl_args *args, void *opt) -{ - if (!opt) - return; - - free_args(args->args, opt); - - free(opt); -} - -static int print_arg_help(struct isl_arg *decl, const char *prefix, int no) -{ - int len = 0; - - if (!decl->long_name) { - printf(" -%c", decl->short_name); - return 4; - } - - if (decl->short_name) { - printf(" -%c, --", decl->short_name); - len += 8; - } else if (decl->flags & ISL_ARG_SINGLE_DASH) { - printf(" -"); - len += 3; - } else { - printf(" --"); - len += 8; - } - - if (prefix) { - printf("%s-", prefix); - len += strlen(prefix) + 1; - } - if (no) { - printf("no-"); - len += 3; - } - printf("%s", decl->long_name); - len += strlen(decl->long_name); - - while ((++decl)->type == isl_arg_alias) { - printf(", --"); - len += 4; - if (no) { - printf("no-"); - len += 3; - } - printf("%s", decl->long_name); - len += strlen(decl->long_name); - } - - return len; -} - -const void *isl_memrchr(const void *s, int c, size_t n) -{ - const char *p = s; - while (n-- > 0) - if (p[n] == c) - return p + n; - return NULL; -} - -static int wrap_msg(const char *s, int indent, int pos) -{ - int len; - int wrap_len = 75 - indent; - - if (pos + 1 >= indent) - printf("\n%*s", indent, ""); - else - printf("%*s", indent - pos, ""); - - len = strlen(s); - while (len > wrap_len) { - const char *space = isl_memrchr(s, ' ', wrap_len); - int l; - - if (!space) - space = strchr(s + wrap_len, ' '); - if (!space) - break; - l = space - s; - printf("%.*s", l, s); - s = space + 1; - len -= l + 1; - printf("\n%*s", indent, ""); - } - - printf("%s", s); - return len; -} - -static int print_help_msg(struct isl_arg *decl, int pos) -{ - if (!decl->help_msg) - return pos; - - return wrap_msg(decl->help_msg, 30, pos); -} - -static void print_default(struct isl_arg *decl, const char *def, int pos) -{ - const char *default_prefix = "[default: "; - const char *default_suffix = "]"; - int len; - - len = strlen(default_prefix) + strlen(def) + strlen(default_suffix); - - if (!decl->help_msg) { - if (pos >= 29) - printf("\n%30s", ""); - else - printf("%*s", 30 - pos, ""); - pos = 0; - } else { - if (pos + len >= 48) - printf("\n%30s", ""); - else - printf(" "); - } - printf("%s%s%s", default_prefix, def, default_suffix); -} - -static void print_default_choice(struct isl_arg *decl, void *opt, int pos) -{ - int i; - const char *s = "none"; - unsigned *p; - - p = (unsigned *)(((char *) opt) + decl->offset); - for (i = 0; decl->u.choice.choice[i].name; ++i) - if (decl->u.choice.choice[i].value == *p) { - s = decl->u.choice.choice[i].name; - break; - } - - print_default(decl, s, pos); -} - -static void print_choice_help(struct isl_arg *decl, const char *prefix, - void *opt) -{ - int i; - int pos; - - pos = print_arg_help(decl, prefix, 0); - printf("="); - pos++; - - for (i = 0; decl->u.choice.choice[i].name; ++i) { - if (i) { - printf("|"); - pos++; - } - printf("%s", decl->u.choice.choice[i].name); - pos += strlen(decl->u.choice.choice[i].name); - } - - pos = print_help_msg(decl, pos); - print_default_choice(decl, opt, pos); - - printf("\n"); -} - -static void print_default_flags(struct isl_arg *decl, void *opt, int pos) -{ - int i, first; - const char *default_prefix = "[default: "; - const char *default_suffix = "]"; - int len = strlen(default_prefix) + strlen(default_suffix); - unsigned *p; - - p = (unsigned *)(((char *) opt) + decl->offset); - for (i = 0; decl->u.flags.flags[i].name; ++i) - if ((*p & decl->u.flags.flags[i].mask) == - decl->u.flags.flags[i].value) - len += strlen(decl->u.flags.flags[i].name); - - if (!decl->help_msg) { - if (pos >= 29) - printf("\n%30s", ""); - else - printf("%*s", 30 - pos, ""); - pos = 0; - } else { - if (pos + len >= 48) - printf("\n%30s", ""); - else - printf(" "); - } - printf("%s", default_prefix); - - for (first = 1, i = 0; decl->u.flags.flags[i].name; ++i) - if ((*p & decl->u.flags.flags[i].mask) == - decl->u.flags.flags[i].value) { - if (!first) - printf(","); - printf("%s", decl->u.flags.flags[i].name); - first = 0; - } - - printf("%s", default_suffix); -} - -static void print_flags_help(struct isl_arg *decl, const char *prefix, - void *opt) -{ - int i, j; - int pos; - - pos = print_arg_help(decl, prefix, 0); - printf("="); - pos++; - - for (i = 0; decl->u.flags.flags[i].name; ++i) { - if (i) { - printf(","); - pos++; - } - for (j = i; - decl->u.flags.flags[j].mask == decl->u.flags.flags[i].mask; - ++j) { - if (j != i) { - printf("|"); - pos++; - } - printf("%s", decl->u.flags.flags[j].name); - pos += strlen(decl->u.flags.flags[j].name); - } - i = j - 1; - } - - pos = print_help_msg(decl, pos); - print_default_flags(decl, opt, pos); - - printf("\n"); -} - -static void print_bool_help(struct isl_arg *decl, const char *prefix, void *opt) -{ - int pos; - unsigned *p = opt ? (unsigned *)(((char *) opt) + decl->offset) : NULL; - int no = p ? *p == 1 : 0; - pos = print_arg_help(decl, prefix, no); - pos = print_help_msg(decl, pos); - if (decl->offset != (size_t) -1) - print_default(decl, no ? "yes" : "no", pos); - printf("\n"); -} - -static int print_argument_name(struct isl_arg *decl, const char *name, int pos) -{ - printf("%c<%s>", decl->long_name ? '=' : ' ', name); - return pos + 3 + strlen(name); -} - -static void print_int_help(struct isl_arg *decl, const char *prefix, void *opt) -{ - int pos; - char val[20]; - int *p = (int *)(((char *) opt) + decl->offset); - pos = print_arg_help(decl, prefix, 0); - pos = print_argument_name(decl, decl->argument_name, pos); - pos = print_help_msg(decl, pos); - snprintf(val, sizeof(val), "%d", *p); - print_default(decl, val, pos); - printf("\n"); -} - -static void print_long_help(struct isl_arg *decl, const char *prefix, void *opt) -{ - int pos; - long *p = (long *)(((char *) opt) + decl->offset); - pos = print_arg_help(decl, prefix, 0); - if (*p != decl->u.l.default_selected) { - printf("["); - pos++; - } - printf("=long"); - pos += 5; - if (*p != decl->u.l.default_selected) { - printf("]"); - pos++; - } - print_help_msg(decl, pos); - printf("\n"); -} - -static void print_ulong_help(struct isl_arg *decl, const char *prefix) -{ - int pos; - pos = print_arg_help(decl, prefix, 0); - printf("=ulong"); - pos += 6; - print_help_msg(decl, pos); - printf("\n"); -} - -static void print_str_help(struct isl_arg *decl, const char *prefix, void *opt) -{ - int pos; - const char *a = decl->argument_name ? decl->argument_name : "string"; - const char **p = (const char **)(((char *) opt) + decl->offset); - pos = print_arg_help(decl, prefix, 0); - pos = print_argument_name(decl, a, pos); - pos = print_help_msg(decl, pos); - if (*p) - print_default(decl, *p, pos); - printf("\n"); -} - -static void print_str_list_help(struct isl_arg *decl, const char *prefix) -{ - int pos; - const char *a = decl->argument_name ? decl->argument_name : "string"; - pos = print_arg_help(decl, prefix, 0); - pos = print_argument_name(decl, a, pos); - pos = print_help_msg(decl, pos); - printf("\n"); -} - -static void print_help(struct isl_arg *arg, const char *prefix, void *opt) -{ - int i; - int any = 0; - - for (i = 0; arg[i].type != isl_arg_end; ++i) { - if (arg[i].flags & ISL_ARG_HIDDEN) - continue; - switch (arg[i].type) { - case isl_arg_flags: - print_flags_help(&arg[i], prefix, opt); - any = 1; - break; - case isl_arg_choice: - print_choice_help(&arg[i], prefix, opt); - any = 1; - break; - case isl_arg_bool: - print_bool_help(&arg[i], prefix, opt); - any = 1; - break; - case isl_arg_int: - print_int_help(&arg[i], prefix, opt); - any = 1; - break; - case isl_arg_long: - print_long_help(&arg[i], prefix, opt); - any = 1; - break; - case isl_arg_ulong: - print_ulong_help(&arg[i], prefix); - any = 1; - break; - case isl_arg_str: - print_str_help(&arg[i], prefix, opt); - any = 1; - break; - case isl_arg_str_list: - print_str_list_help(&arg[i], prefix); - any = 1; - break; - case isl_arg_alias: - case isl_arg_version: - case isl_arg_arg: - case isl_arg_footer: - case isl_arg_child: - case isl_arg_user: - case isl_arg_end: - break; - } - } - - for (i = 0; arg[i].type != isl_arg_end; ++i) { - void *child; - - if (arg[i].type != isl_arg_child) - continue; - if (arg[i].flags & ISL_ARG_HIDDEN) - continue; - - if (any) - printf("\n"); - if (arg[i].help_msg) - printf(" %s\n", arg[i].help_msg); - if (arg[i].offset == (size_t) -1) - child = opt; - else - child = *(void **)(((char *) opt) + arg[i].offset); - print_help(arg[i].u.child.child->args, arg[i].long_name, child); - any = 1; - } -} - -static const char *prog_name(const char *prog) -{ - const char *slash; - - slash = strrchr(prog, '/'); - if (slash) - prog = slash + 1; - if (strncmp(prog, "lt-", 3) == 0) - prog += 3; - - return prog; -} - -static int any_version(struct isl_arg *decl) -{ - int i; - - for (i = 0; decl[i].type != isl_arg_end; ++i) { - switch (decl[i].type) { - case isl_arg_version: - return 1; - case isl_arg_child: - if (any_version(decl[i].u.child.child->args)) - return 1; - break; - default: - break; - } - } - - return 0; -} - -static void print_help_and_exit(struct isl_arg *arg, const char *prog, - void *opt) -{ - int i; - - printf("Usage: %s [OPTION...]", prog_name(prog)); - - for (i = 0; arg[i].type != isl_arg_end; ++i) - if (arg[i].type == isl_arg_arg) - printf(" %s", arg[i].argument_name); - - printf("\n\n"); - - print_help(arg, NULL, opt); - printf("\n"); - if (any_version(arg)) - printf(" -V, --version\n"); - print_bool_help(help_arg, NULL, NULL); - - for (i = 0; arg[i].type != isl_arg_end; ++i) { - if (arg[i].type != isl_arg_footer) - continue; - wrap_msg(arg[i].help_msg, 0, 0); - printf("\n"); - } - - exit(0); -} - -static int match_long_name(struct isl_arg *decl, - const char *start, const char *end) -{ - do { - if (end - start == strlen(decl->long_name) && - !strncmp(start, decl->long_name, end - start)) - return 1; - } while ((++decl)->type == isl_arg_alias); - - return 0; -} - -static const char *skip_dash_dash(struct isl_arg *decl, const char *arg) -{ - if (!strncmp(arg, "--", 2)) - return arg + 2; - if ((decl->flags & ISL_ARG_SINGLE_DASH) && arg[0] == '-') - return arg + 1; - return NULL; -} - -static const char *skip_name(struct isl_arg *decl, const char *arg, - const char *prefix, int need_argument, int *has_argument) -{ - const char *equal; - const char *name; - const char *end; - - if (arg[0] == '-' && arg[1] && arg[1] == decl->short_name) { - if (need_argument && !arg[2]) - return NULL; - if (has_argument) - *has_argument = arg[2] != '\0'; - return arg + 2; - } - if (!decl->long_name) - return NULL; - - name = skip_dash_dash(decl, arg); - if (!name) - return NULL; - - equal = strchr(name, '='); - if (need_argument && !equal) - return NULL; - - if (has_argument) - *has_argument = !!equal; - end = equal ? equal : name + strlen(name); - - if (prefix) { - size_t prefix_len = strlen(prefix); - if (strncmp(name, prefix, prefix_len) == 0 && - name[prefix_len] == '-') - name += prefix_len + 1; - } - - if (!match_long_name(decl, name, end)) - return NULL; - - return equal ? equal + 1 : end; -} - -static int parse_choice_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int i; - int has_argument; - const char *choice; - - choice = skip_name(decl, arg[0], prefix, 0, &has_argument); - if (!choice) - return 0; - - if (!has_argument && (!arg[1] || arg[1][0] == '-')) { - unsigned u = decl->u.choice.default_selected; - if (decl->u.choice.set) - decl->u.choice.set(opt, u); - else - *(unsigned *)(((char *)opt) + decl->offset) = u; - - return 1; - } - - if (!has_argument) - choice = arg[1]; - - for (i = 0; decl->u.choice.choice[i].name; ++i) { - unsigned u; - - if (strcmp(choice, decl->u.choice.choice[i].name)) - continue; - - u = decl->u.choice.choice[i].value; - if (decl->u.choice.set) - decl->u.choice.set(opt, u); - else - *(unsigned *)(((char *)opt) + decl->offset) = u; - - return has_argument ? 1 : 2; - } - - return 0; -} - -static int set_flag(struct isl_arg *decl, unsigned *val, const char *flag, - size_t len) -{ - int i; - - for (i = 0; decl->u.flags.flags[i].name; ++i) { - if (strncmp(flag, decl->u.flags.flags[i].name, len)) - continue; - - *val &= ~decl->u.flags.flags[i].mask; - *val |= decl->u.flags.flags[i].value; - - return 1; - } - - return 0; -} - -static int parse_flags_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int has_argument; - const char *flags; - const char *comma; - unsigned val; - - flags = skip_name(decl, arg[0], prefix, 0, &has_argument); - if (!flags) - return 0; - - if (!has_argument && !arg[1]) - return 0; - - if (!has_argument) - flags = arg[1]; - - val = *(unsigned *)(((char *)opt) + decl->offset); - - while ((comma = strchr(flags, ',')) != NULL) { - if (!set_flag(decl, &val, flags, comma - flags)) - return 0; - flags = comma + 1; - } - if (!set_flag(decl, &val, flags, strlen(flags))) - return 0; - - *(unsigned *)(((char *)opt) + decl->offset) = val; - - return has_argument ? 1 : 2; -} - -static int parse_bool_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - const char *name; - unsigned *p = (unsigned *)(((char *)opt) + decl->offset); - - if (skip_name(decl, arg[0], prefix, 0, NULL)) { - if ((decl->flags & ISL_ARG_BOOL_ARG) && arg[1]) { - char *endptr; - int val = strtol(arg[1], &endptr, 0); - if (*endptr == '\0' && (val == 0 || val == 1)) { - if (decl->u.b.set) - decl->u.b.set(opt, val); - else if (decl->offset != (size_t) -1) - *p = val; - return 2; - } - } - if (decl->u.b.set) - decl->u.b.set(opt, 1); - else if (decl->offset != (size_t) -1) - *p = 1; - - return 1; - } - - if (!decl->long_name) - return 0; - - name = skip_dash_dash(decl, arg[0]); - if (!name) - return 0; - - if (prefix) { - size_t prefix_len = strlen(prefix); - if (strncmp(name, prefix, prefix_len) == 0 && - name[prefix_len] == '-') { - name += prefix_len + 1; - prefix = NULL; - } - } - - if (strncmp(name, "no-", 3)) - return 0; - name += 3; - - if (prefix) { - size_t prefix_len = strlen(prefix); - if (strncmp(name, prefix, prefix_len) == 0 && - name[prefix_len] == '-') - name += prefix_len + 1; - } - - if (match_long_name(decl, name, name + strlen(name))) { - if (decl->u.b.set) - decl->u.b.set(opt, 0); - else if (decl->offset != (size_t) -1) - *p = 0; - - return 1; - } - - return 0; -} - -static int parse_str_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int has_argument; - const char *s; - char **p = (char **)(((char *)opt) + decl->offset); - - s = skip_name(decl, arg[0], prefix, 0, &has_argument); - if (!s) - return 0; - - if (has_argument) { - free(*p); - *p = strdup(s); - return 1; - } - - if (arg[1]) { - free(*p); - *p = strdup(arg[1]); - return 2; - } - - return 0; -} - -static int isl_arg_str_list_append(struct isl_arg *decl, void *opt, - const char *s) -{ - int *n = (int *)(((char *) opt) + decl->u.str_list.offset_n); - char **list = *(char ***)(((char *) opt) + decl->offset); - - list = realloc(list, (*n + 1) * sizeof(char *)); - if (!list) - return -1; - *(char ***)(((char *) opt) + decl->offset) = list; - list[*n] = strdup(s); - (*n)++; - return 0; -} - -static int parse_str_list_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int has_argument; - const char *s; - - s = skip_name(decl, arg[0], prefix, 0, &has_argument); - if (!s) - return 0; - - if (has_argument) { - isl_arg_str_list_append(decl, opt, s); - return 1; - } - - if (arg[1]) { - isl_arg_str_list_append(decl, opt, arg[1]); - return 2; - } - - return 0; -} - -static int parse_int_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int has_argument; - const char *val; - char *endptr; - int *p = (int *)(((char *)opt) + decl->offset); - - val = skip_name(decl, arg[0], prefix, 0, &has_argument); - if (!val) - return 0; - - if (has_argument) { - *p = atoi(val); - return 1; - } - - if (arg[1]) { - int i = strtol(arg[1], &endptr, 0); - if (*endptr == '\0') { - *p = i; - return 2; - } - } - - return 0; -} - -static int parse_long_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int has_argument; - const char *val; - char *endptr; - long *p = (long *)(((char *)opt) + decl->offset); - - val = skip_name(decl, arg[0], prefix, 0, &has_argument); - if (!val) - return 0; - - if (has_argument) { - long l = strtol(val, NULL, 0); - if (decl->u.l.set) - decl->u.l.set(opt, l); - else - *p = l; - return 1; - } - - if (arg[1]) { - long l = strtol(arg[1], &endptr, 0); - if (*endptr == '\0') { - if (decl->u.l.set) - decl->u.l.set(opt, l); - else - *p = l; - return 2; - } - } - - if (decl->u.l.default_value != decl->u.l.default_selected) { - if (decl->u.l.set) - decl->u.l.set(opt, decl->u.l.default_selected); - else - *p = decl->u.l.default_selected; - return 1; - } - - return 0; -} - -static int parse_ulong_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int has_argument; - const char *val; - char *endptr; - unsigned long *p = (unsigned long *)(((char *)opt) + decl->offset); - - val = skip_name(decl, arg[0], prefix, 0, &has_argument); - if (!val) - return 0; - - if (has_argument) { - *p = strtoul(val, NULL, 0); - return 1; - } - - if (arg[1]) { - unsigned long ul = strtoul(arg[1], &endptr, 0); - if (*endptr == '\0') { - *p = ul; - return 2; - } - } - - return 0; -} - -static int parse_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt); - -static int parse_child_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - void *child; - - if (decl->offset == (size_t) -1) - child = opt; - else { - child = *(void **)(((char *)opt) + decl->offset); - prefix = decl->long_name; - } - return parse_option(decl->u.child.child->args, arg, prefix, child); -} - -static int parse_option(struct isl_arg *decl, char **arg, - const char *prefix, void *opt) -{ - int i; - - for (i = 0; decl[i].type != isl_arg_end; ++i) { - int parsed = 0; - switch (decl[i].type) { - case isl_arg_choice: - parsed = parse_choice_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_flags: - parsed = parse_flags_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_int: - parsed = parse_int_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_long: - parsed = parse_long_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_ulong: - parsed = parse_ulong_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_bool: - parsed = parse_bool_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_str: - parsed = parse_str_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_str_list: - parsed = parse_str_list_option(&decl[i], arg, prefix, - opt); - break; - case isl_arg_child: - parsed = parse_child_option(&decl[i], arg, prefix, opt); - break; - case isl_arg_alias: - case isl_arg_arg: - case isl_arg_footer: - case isl_arg_user: - case isl_arg_version: - case isl_arg_end: - break; - } - if (parsed) - return parsed; - } - - return 0; -} - -static void print_version(struct isl_arg *decl) -{ - int i; - - for (i = 0; decl[i].type != isl_arg_end; ++i) { - switch (decl[i].type) { - case isl_arg_version: - decl[i].u.version.print_version(); - break; - case isl_arg_child: - print_version(decl[i].u.child.child->args); - break; - default: - break; - } - } -} - -static void print_version_and_exit(struct isl_arg *decl) -{ - print_version(decl); - - exit(0); -} - -static int drop_argument(int argc, char **argv, int drop, int n) -{ - for (; drop < argc; ++drop) - argv[drop] = argv[drop + n]; - - return argc - n; -} - -static int n_arg(struct isl_arg *arg) -{ - int i; - int n_arg = 0; - - for (i = 0; arg[i].type != isl_arg_end; ++i) - if (arg[i].type == isl_arg_arg) - n_arg++; - - return n_arg; -} - -static int next_arg(struct isl_arg *arg, int a) -{ - for (++a; arg[a].type != isl_arg_end; ++a) - if (arg[a].type == isl_arg_arg) - return a; - - return -1; -} - -int isl_args_parse(struct isl_args *args, int argc, char **argv, void *opt, - unsigned flags) -{ - int a = -1; - int skip = 0; - int i; - int n; - - n = n_arg(args->args); - - for (i = 1; i < argc; ++i) { - if (strcmp(argv[i], "--help") == 0) - print_help_and_exit(args->args, argv[0], opt); - } - - for (i = 1; i < argc; ++i) { - if ((strcmp(argv[i], "--version") == 0 || - strcmp(argv[i], "-V") == 0) && any_version(args->args)) - print_version_and_exit(args->args); - } - - while (argc > 1 + skip) { - int parsed; - if (argv[1 + skip][0] != '-') { - a = next_arg(args->args, a); - if (a >= 0) { - char **p; - p = (char **)(((char *)opt)+args->args[a].offset); - free(*p); - *p = strdup(argv[1 + skip]); - argc = drop_argument(argc, argv, 1 + skip, 1); - --n; - } else if (ISL_FL_ISSET(flags, ISL_ARG_ALL)) { - fprintf(stderr, "%s: extra argument: %s\n", - prog_name(argv[0]), argv[1 + skip]); - exit(-1); - } else - ++skip; - continue; - } - parsed = parse_option(args->args, &argv[1 + skip], NULL, opt); - if (parsed) - argc = drop_argument(argc, argv, 1 + skip, parsed); - else if (ISL_FL_ISSET(flags, ISL_ARG_ALL)) { - fprintf(stderr, "%s: unrecognized option: %s\n", - prog_name(argv[0]), argv[1 + skip]); - exit(-1); - } else - ++skip; - } - - if (n > 0) { - fprintf(stderr, "%s: expecting %d more argument(s)\n", - prog_name(argv[0]), n); - exit(-1); - } - - return argc; -} diff --git a/cloog-0.17.0/isl/isl_band.c b/cloog-0.17.0/isl/isl_band.c deleted file mode 100644 index 53582f0..0000000 --- a/cloog-0.17.0/isl/isl_band.c +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright 2011 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include - -isl_ctx *isl_band_get_ctx(__isl_keep isl_band *band) -{ - return band ? isl_union_map_get_ctx(band->map) : NULL; -} - -/* We not only increment the reference count of the band, - * but also that of the schedule that contains this band. - * This ensures that the schedule won't disappear while there - * is still a reference to the band outside of the schedule. - * There is no need to increment the reference count of the parent - * band as the parent band is part of the same schedule. - */ -__isl_give isl_band *isl_band_copy(__isl_keep isl_band *band) -{ - if (!band) - return NULL; - - band->ref++; - band->schedule->ref++; - return band; -} - -/* If this is not the last reference to the band (the one from within the - * schedule), then we also need to decrement the reference count of the - * containing schedule as it was incremented in isl_band_copy. - */ -void *isl_band_free(__isl_take isl_band *band) -{ - if (!band) - return NULL; - - if (--band->ref > 0) - return isl_schedule_free(band->schedule); - - isl_union_map_free(band->map); - isl_band_list_free(band->children); - free(band->zero); - free(band); - - return NULL; -} - -int isl_band_has_children(__isl_keep isl_band *band) -{ - if (!band) - return -1; - - return band->children != NULL; -} - -__isl_give isl_band_list *isl_band_get_children( - __isl_keep isl_band *band) -{ - if (!band) - return NULL; - if (!band->children) - isl_die(isl_band_get_ctx(band), isl_error_invalid, - "band has no children", return NULL); - return isl_band_list_dup(band->children); -} - -int isl_band_n_member(__isl_keep isl_band *band) -{ - return band ? band->n : 0; -} - -/* Is the given scheduling dimension zero distance within the band and - * with respect to the proximity dependences. - */ -int isl_band_member_is_zero_distance(__isl_keep isl_band *band, int pos) -{ - if (!band) - return -1; - - if (pos < 0 || pos >= band->n) - isl_die(isl_band_get_ctx(band), isl_error_invalid, - "invalid member position", return -1); - - return band->zero[pos]; -} - -/* Return the schedule that leads up to this band. - */ -__isl_give isl_union_map *isl_band_get_prefix_schedule( - __isl_keep isl_band *band) -{ - isl_union_map *prefix; - isl_band *a; - - if (!band) - return NULL; - - prefix = isl_union_map_copy(band->map); - prefix = isl_union_map_from_domain(isl_union_map_domain(prefix)); - - for (a = band->parent; a; a = a->parent) { - isl_union_map *partial = isl_union_map_copy(a->map); - prefix = isl_union_map_flat_range_product(partial, prefix); - } - - return prefix; -} - -/* Return the schedule of the band in isolation. - */ -__isl_give isl_union_map *isl_band_get_partial_schedule( - __isl_keep isl_band *band) -{ - return band ? isl_union_map_copy(band->map) : NULL; -} - -/* Return the schedule for the forest underneath the given band. - */ -__isl_give isl_union_map *isl_band_get_suffix_schedule( - __isl_keep isl_band *band) -{ - isl_union_map *suffix; - - if (!band) - return NULL; - - if (!isl_band_has_children(band)) { - suffix = isl_union_map_copy(band->map); - suffix = isl_union_map_from_domain(isl_union_map_domain(suffix)); - } else { - int i, n; - isl_band_list *children; - - suffix = isl_union_map_empty(isl_union_map_get_space(band->map)); - children = isl_band_get_children(band); - n = isl_band_list_n_band(children); - for (i = 0; i < n; ++i) { - isl_band *child; - isl_union_map *partial_i; - isl_union_map *suffix_i; - - child = isl_band_list_get_band(children, i); - partial_i = isl_band_get_partial_schedule(child); - suffix_i = isl_band_get_suffix_schedule(child); - suffix_i = isl_union_map_flat_range_product(partial_i, - suffix_i); - suffix = isl_union_map_union(suffix, suffix_i); - - isl_band_free(child); - } - isl_band_list_free(children); - } - - return suffix; -} - -__isl_give isl_printer *isl_printer_print_band(__isl_take isl_printer *p, - __isl_keep isl_band *band) -{ - isl_union_map *prefix, *partial, *suffix; - - prefix = isl_band_get_prefix_schedule(band); - partial = isl_band_get_partial_schedule(band); - suffix = isl_band_get_suffix_schedule(band); - - p = isl_printer_print_str(p, "("); - p = isl_printer_print_union_map(p, prefix); - p = isl_printer_print_str(p, ","); - p = isl_printer_print_union_map(p, partial); - p = isl_printer_print_str(p, ","); - p = isl_printer_print_union_map(p, suffix); - p = isl_printer_print_str(p, ")"); - - isl_union_map_free(prefix); - isl_union_map_free(partial); - isl_union_map_free(suffix); - - return p; -} diff --git a/cloog-0.17.0/isl/isl_band_private.h b/cloog-0.17.0/isl/isl_band_private.h deleted file mode 100644 index 579ef66..0000000 --- a/cloog-0.17.0/isl/isl_band_private.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef ISL_BAND_PRIVATE_H -#define ISL_BAND_PRIVATE_H - -#include -#include -#include -#include - -/* Information about a band within a schedule. - * - * n is the number of scheduling dimensions within the band. - * zero is an array of length n, indicating whether a scheduling dimension - * results in zero dependence distances for the proximity dependences. - * map is the partial map corresponding to this band. - * schedule is the schedule that contains this band. - * parent is the parent of this band (or NULL if the band is a root). - * children are the children of this band (or NULL if the band is a leaf). - * - * To avoid circular dependences in the reference counting, - * the schedule and parent pointers are not reference counted. - * isl_band_copy increments the reference count of schedule to ensure - * that outside references to the band keep the schedule alive. - */ -struct isl_band { - int ref; - - int n; - int *zero; - - isl_union_map *map; - isl_schedule *schedule; - isl_band *parent; - isl_band_list *children; -}; - -#endif diff --git a/cloog-0.17.0/isl/isl_basis_reduction.h b/cloog-0.17.0/isl/isl_basis_reduction.h deleted file mode 100644 index fd63560..0000000 --- a/cloog-0.17.0/isl/isl_basis_reduction.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_BASIS_REDUCTION_H -#define ISL_BASIS_REDUCTION_H - -#include -#include -#include "isl_tab.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_tab *isl_tab_compute_reduced_basis(struct isl_tab *tab); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/isl_bernstein.c b/cloog-0.17.0/isl/isl_bernstein.c deleted file mode 100644 index 0e528e5..0000000 --- a/cloog-0.17.0/isl/isl_bernstein.c +++ /dev/null @@ -1,554 +0,0 @@ -/* - * Copyright 2006-2007 Universiteit Leiden - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, Leiden Institute of Advanced Computer Science, - * Universiteit Leiden, Niels Bohrweg 1, 2333 CA Leiden, The Netherlands - * and K.U.Leuven, Departement Computerwetenschappen, Celestijnenlaan 200A, - * B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct bernstein_data { - enum isl_fold type; - isl_qpolynomial *poly; - int check_tight; - - isl_cell *cell; - - isl_qpolynomial_fold *fold; - isl_qpolynomial_fold *fold_tight; - isl_pw_qpolynomial_fold *pwf; - isl_pw_qpolynomial_fold *pwf_tight; -}; - -static int vertex_is_integral(__isl_keep isl_basic_set *vertex) -{ - unsigned nvar; - unsigned nparam; - int i; - - nvar = isl_basic_set_dim(vertex, isl_dim_set); - nparam = isl_basic_set_dim(vertex, isl_dim_param); - for (i = 0; i < nvar; ++i) { - int r = nvar - 1 - i; - if (!isl_int_is_one(vertex->eq[r][1 + nparam + i]) && - !isl_int_is_negone(vertex->eq[r][1 + nparam + i])) - return 0; - } - - return 1; -} - -static __isl_give isl_qpolynomial *vertex_coordinate( - __isl_keep isl_basic_set *vertex, int i, __isl_take isl_space *dim) -{ - unsigned nvar; - unsigned nparam; - int r; - isl_int denom; - isl_qpolynomial *v; - - nvar = isl_basic_set_dim(vertex, isl_dim_set); - nparam = isl_basic_set_dim(vertex, isl_dim_param); - r = nvar - 1 - i; - - isl_int_init(denom); - isl_int_set(denom, vertex->eq[r][1 + nparam + i]); - isl_assert(vertex->ctx, !isl_int_is_zero(denom), goto error); - - if (isl_int_is_pos(denom)) - isl_seq_neg(vertex->eq[r], vertex->eq[r], - 1 + isl_basic_set_total_dim(vertex)); - else - isl_int_neg(denom, denom); - - v = isl_qpolynomial_from_affine(dim, vertex->eq[r], denom); - isl_int_clear(denom); - - return v; -error: - isl_space_free(dim); - isl_int_clear(denom); - return NULL; -} - -/* Check whether the bound associated to the selection "k" is tight, - * which is the case if we select exactly one vertex and if that vertex - * is integral for all values of the parameters. - */ -static int is_tight(int *k, int n, int d, isl_cell *cell) -{ - int i; - - for (i = 0; i < n; ++i) { - int v; - if (k[i] != d) { - if (k[i]) - return 0; - continue; - } - v = cell->ids[n - 1 - i]; - return vertex_is_integral(cell->vertices->v[v].vertex); - } - - return 0; -} - -static void add_fold(__isl_take isl_qpolynomial *b, __isl_keep isl_set *dom, - int *k, int n, int d, struct bernstein_data *data) -{ - isl_qpolynomial_fold *fold; - - fold = isl_qpolynomial_fold_alloc(data->type, b); - - if (data->check_tight && is_tight(k, n, d, data->cell)) - data->fold_tight = isl_qpolynomial_fold_fold_on_domain(dom, - data->fold_tight, fold); - else - data->fold = isl_qpolynomial_fold_fold_on_domain(dom, - data->fold, fold); -} - -/* Extract the coefficients of the Bernstein base polynomials and store - * them in data->fold and data->fold_tight. - * - * In particular, the coefficient of each monomial - * of multi-degree (k[0], k[1], ..., k[n-1]) is divided by the corresponding - * multinomial coefficient d!/k[0]! k[1]! ... k[n-1]! - * - * c[i] contains the coefficient of the selected powers of the first i+1 vars. - * multinom[i] contains the partial multinomial coefficient. - */ -static void extract_coefficients(isl_qpolynomial *poly, - __isl_keep isl_set *dom, struct bernstein_data *data) -{ - int i; - int d; - int n; - isl_ctx *ctx; - isl_qpolynomial **c = NULL; - int *k = NULL; - int *left = NULL; - isl_vec *multinom = NULL; - - if (!poly) - return; - - ctx = isl_qpolynomial_get_ctx(poly); - n = isl_qpolynomial_dim(poly, isl_dim_in); - d = isl_qpolynomial_degree(poly); - isl_assert(ctx, n >= 2, return); - - c = isl_calloc_array(ctx, isl_qpolynomial *, n); - k = isl_alloc_array(ctx, int, n); - left = isl_alloc_array(ctx, int, n); - multinom = isl_vec_alloc(ctx, n); - if (!c || !k || !left || !multinom) - goto error; - - isl_int_set_si(multinom->el[0], 1); - for (k[0] = d; k[0] >= 0; --k[0]) { - int i = 1; - isl_qpolynomial_free(c[0]); - c[0] = isl_qpolynomial_coeff(poly, isl_dim_in, n - 1, k[0]); - left[0] = d - k[0]; - k[1] = -1; - isl_int_set(multinom->el[1], multinom->el[0]); - while (i > 0) { - if (i == n - 1) { - int j; - isl_space *dim; - isl_qpolynomial *b; - isl_qpolynomial *f; - for (j = 2; j <= left[i - 1]; ++j) - isl_int_divexact_ui(multinom->el[i], - multinom->el[i], j); - b = isl_qpolynomial_coeff(c[i - 1], isl_dim_in, - n - 1 - i, left[i - 1]); - b = isl_qpolynomial_project_domain_on_params(b); - dim = isl_qpolynomial_get_domain_space(b); - f = isl_qpolynomial_rat_cst_on_domain(dim, ctx->one, - multinom->el[i]); - b = isl_qpolynomial_mul(b, f); - k[n - 1] = left[n - 2]; - add_fold(b, dom, k, n, d, data); - --i; - continue; - } - if (k[i] >= left[i - 1]) { - --i; - continue; - } - ++k[i]; - if (k[i]) - isl_int_divexact_ui(multinom->el[i], - multinom->el[i], k[i]); - isl_qpolynomial_free(c[i]); - c[i] = isl_qpolynomial_coeff(c[i - 1], isl_dim_in, - n - 1 - i, k[i]); - left[i] = left[i - 1] - k[i]; - k[i + 1] = -1; - isl_int_set(multinom->el[i + 1], multinom->el[i]); - ++i; - } - isl_int_mul_ui(multinom->el[0], multinom->el[0], k[0]); - } - - for (i = 0; i < n; ++i) - isl_qpolynomial_free(c[i]); - - isl_vec_free(multinom); - free(left); - free(k); - free(c); - return; -error: - isl_vec_free(multinom); - free(left); - free(k); - if (c) - for (i = 0; i < n; ++i) - isl_qpolynomial_free(c[i]); - free(c); - return; -} - -/* Perform bernstein expansion on the parametric vertices that are active - * on "cell". - * - * data->poly has been homogenized in the calling function. - * - * We plug in the barycentric coordinates for the set variables - * - * \vec x = \sum_i \alpha_i v_i(\vec p) - * - * and the constant "1 = \sum_i \alpha_i" for the homogeneous dimension. - * Next, we extract the coefficients of the Bernstein base polynomials. - */ -static int bernstein_coefficients_cell(__isl_take isl_cell *cell, void *user) -{ - int i, j; - struct bernstein_data *data = (struct bernstein_data *)user; - isl_space *dim_param; - isl_space *dim_dst; - isl_qpolynomial *poly = data->poly; - unsigned nvar; - int n_vertices; - isl_qpolynomial **subs; - isl_pw_qpolynomial_fold *pwf; - isl_set *dom; - isl_ctx *ctx; - - if (!poly) - goto error; - - nvar = isl_qpolynomial_dim(poly, isl_dim_in) - 1; - n_vertices = cell->n_vertices; - - ctx = isl_qpolynomial_get_ctx(poly); - if (n_vertices > nvar + 1 && ctx->opt->bernstein_triangulate) - return isl_cell_foreach_simplex(cell, - &bernstein_coefficients_cell, user); - - subs = isl_alloc_array(ctx, isl_qpolynomial *, 1 + nvar); - if (!subs) - goto error; - - dim_param = isl_basic_set_get_space(cell->dom); - dim_dst = isl_qpolynomial_get_domain_space(poly); - dim_dst = isl_space_add_dims(dim_dst, isl_dim_set, n_vertices); - - for (i = 0; i < 1 + nvar; ++i) - subs[i] = isl_qpolynomial_zero_on_domain(isl_space_copy(dim_dst)); - - for (i = 0; i < n_vertices; ++i) { - isl_qpolynomial *c; - c = isl_qpolynomial_var_on_domain(isl_space_copy(dim_dst), isl_dim_set, - 1 + nvar + i); - for (j = 0; j < nvar; ++j) { - int k = cell->ids[i]; - isl_qpolynomial *v; - v = vertex_coordinate(cell->vertices->v[k].vertex, j, - isl_space_copy(dim_param)); - v = isl_qpolynomial_add_dims(v, isl_dim_in, - 1 + nvar + n_vertices); - v = isl_qpolynomial_mul(v, isl_qpolynomial_copy(c)); - subs[1 + j] = isl_qpolynomial_add(subs[1 + j], v); - } - subs[0] = isl_qpolynomial_add(subs[0], c); - } - isl_space_free(dim_dst); - - poly = isl_qpolynomial_copy(poly); - - poly = isl_qpolynomial_add_dims(poly, isl_dim_in, n_vertices); - poly = isl_qpolynomial_substitute(poly, isl_dim_in, 0, 1 + nvar, subs); - poly = isl_qpolynomial_drop_dims(poly, isl_dim_in, 0, 1 + nvar); - - data->cell = cell; - dom = isl_set_from_basic_set(isl_basic_set_copy(cell->dom)); - data->fold = isl_qpolynomial_fold_empty(data->type, isl_space_copy(dim_param)); - data->fold_tight = isl_qpolynomial_fold_empty(data->type, dim_param); - extract_coefficients(poly, dom, data); - - pwf = isl_pw_qpolynomial_fold_alloc(data->type, isl_set_copy(dom), - data->fold); - data->pwf = isl_pw_qpolynomial_fold_fold(data->pwf, pwf); - pwf = isl_pw_qpolynomial_fold_alloc(data->type, dom, data->fold_tight); - data->pwf_tight = isl_pw_qpolynomial_fold_fold(data->pwf_tight, pwf); - - isl_qpolynomial_free(poly); - isl_cell_free(cell); - for (i = 0; i < 1 + nvar; ++i) - isl_qpolynomial_free(subs[i]); - free(subs); - return 0; -error: - isl_cell_free(cell); - return -1; -} - -/* Base case of applying bernstein expansion. - * - * We compute the chamber decomposition of the parametric polytope "bset" - * and then perform bernstein expansion on the parametric vertices - * that are active on each chamber. - */ -static __isl_give isl_pw_qpolynomial_fold *bernstein_coefficients_base( - __isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct bernstein_data *data, int *tight) -{ - unsigned nvar; - isl_space *dim; - isl_pw_qpolynomial_fold *pwf; - isl_vertices *vertices; - int covers; - - nvar = isl_basic_set_dim(bset, isl_dim_set); - if (nvar == 0) { - isl_set *dom; - isl_qpolynomial_fold *fold; - - fold = isl_qpolynomial_fold_alloc(data->type, poly); - dom = isl_set_from_basic_set(bset); - if (tight) - *tight = 1; - pwf = isl_pw_qpolynomial_fold_alloc(data->type, dom, fold); - return isl_pw_qpolynomial_fold_project_domain_on_params(pwf); - } - - if (isl_qpolynomial_is_zero(poly)) { - isl_set *dom; - isl_qpolynomial_fold *fold; - fold = isl_qpolynomial_fold_alloc(data->type, poly); - dom = isl_set_from_basic_set(bset); - pwf = isl_pw_qpolynomial_fold_alloc(data->type, dom, fold); - if (tight) - *tight = 1; - return isl_pw_qpolynomial_fold_project_domain_on_params(pwf); - } - - dim = isl_basic_set_get_space(bset); - dim = isl_space_params(dim); - dim = isl_space_from_domain(dim); - dim = isl_space_add_dims(dim, isl_dim_set, 1); - data->pwf = isl_pw_qpolynomial_fold_zero(isl_space_copy(dim), data->type); - data->pwf_tight = isl_pw_qpolynomial_fold_zero(dim, data->type); - data->poly = isl_qpolynomial_homogenize(isl_qpolynomial_copy(poly)); - vertices = isl_basic_set_compute_vertices(bset); - isl_vertices_foreach_disjoint_cell(vertices, - &bernstein_coefficients_cell, data); - isl_vertices_free(vertices); - isl_qpolynomial_free(data->poly); - - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - - covers = isl_pw_qpolynomial_fold_covers(data->pwf_tight, data->pwf); - if (covers < 0) - goto error; - - if (tight) - *tight = covers; - - if (covers) { - isl_pw_qpolynomial_fold_free(data->pwf); - return data->pwf_tight; - } - - data->pwf = isl_pw_qpolynomial_fold_fold(data->pwf, data->pwf_tight); - - return data->pwf; -error: - isl_pw_qpolynomial_fold_free(data->pwf_tight); - isl_pw_qpolynomial_fold_free(data->pwf); - return NULL; -} - -/* Apply bernstein expansion recursively by working in on len[i] - * set variables at a time, with i ranging from n_group - 1 to 0. - */ -static __isl_give isl_pw_qpolynomial_fold *bernstein_coefficients_recursive( - __isl_take isl_pw_qpolynomial *pwqp, - int n_group, int *len, struct bernstein_data *data, int *tight) -{ - int i; - unsigned nparam; - unsigned nvar; - isl_pw_qpolynomial_fold *pwf; - - if (!pwqp) - return NULL; - - nparam = isl_pw_qpolynomial_dim(pwqp, isl_dim_param); - nvar = isl_pw_qpolynomial_dim(pwqp, isl_dim_in); - - pwqp = isl_pw_qpolynomial_move_dims(pwqp, isl_dim_param, nparam, - isl_dim_in, 0, nvar - len[n_group - 1]); - pwf = isl_pw_qpolynomial_bound(pwqp, data->type, tight); - - for (i = n_group - 2; i >= 0; --i) { - nparam = isl_pw_qpolynomial_fold_dim(pwf, isl_dim_param); - pwf = isl_pw_qpolynomial_fold_move_dims(pwf, isl_dim_in, 0, - isl_dim_param, nparam - len[i], len[i]); - if (tight && !*tight) - tight = NULL; - pwf = isl_pw_qpolynomial_fold_bound(pwf, tight); - } - - return pwf; -} - -static __isl_give isl_pw_qpolynomial_fold *bernstein_coefficients_factors( - __isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct bernstein_data *data, int *tight) -{ - isl_factorizer *f; - isl_set *set; - isl_pw_qpolynomial *pwqp; - isl_pw_qpolynomial_fold *pwf; - - f = isl_basic_set_factorizer(bset); - if (!f) - goto error; - if (f->n_group == 0) { - isl_factorizer_free(f); - return bernstein_coefficients_base(bset, poly, data, tight); - } - - set = isl_set_from_basic_set(bset); - pwqp = isl_pw_qpolynomial_alloc(set, poly); - pwqp = isl_pw_qpolynomial_morph_domain(pwqp, isl_morph_copy(f->morph)); - - pwf = bernstein_coefficients_recursive(pwqp, f->n_group, f->len, data, - tight); - - isl_factorizer_free(f); - - return pwf; -error: - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - return NULL; -} - -static __isl_give isl_pw_qpolynomial_fold *bernstein_coefficients_full_recursive( - __isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct bernstein_data *data, int *tight) -{ - int i; - int *len; - unsigned nvar; - isl_pw_qpolynomial_fold *pwf; - isl_set *set; - isl_pw_qpolynomial *pwqp; - - if (!bset || !poly) - goto error; - - nvar = isl_basic_set_dim(bset, isl_dim_set); - - len = isl_alloc_array(bset->ctx, int, nvar); - if (!len) - goto error; - - for (i = 0; i < nvar; ++i) - len[i] = 1; - - set = isl_set_from_basic_set(bset); - pwqp = isl_pw_qpolynomial_alloc(set, poly); - - pwf = bernstein_coefficients_recursive(pwqp, nvar, len, data, tight); - - free(len); - - return pwf; -error: - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - return NULL; -} - -/* Compute a bound on the polynomial defined over the parametric polytope - * using bernstein expansion and store the result - * in bound->pwf and bound->pwf_tight. - * - * If bernstein_recurse is set to ISL_BERNSTEIN_FACTORS, we check if - * the polytope can be factorized and apply bernstein expansion recursively - * on the factors. - * If bernstein_recurse is set to ISL_BERNSTEIN_INTERVALS, we apply - * bernstein expansion recursively on each dimension. - * Otherwise, we apply bernstein expansion on the entire polytope. - */ -int isl_qpolynomial_bound_on_domain_bernstein(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct isl_bound *bound) -{ - struct bernstein_data data; - isl_pw_qpolynomial_fold *pwf; - unsigned nvar; - int tight = 0; - int *tp = bound->check_tight ? &tight : NULL; - - if (!bset || !poly) - goto error; - - data.type = bound->type; - data.check_tight = bound->check_tight; - - nvar = isl_basic_set_dim(bset, isl_dim_set); - - if (bset->ctx->opt->bernstein_recurse & ISL_BERNSTEIN_FACTORS) - pwf = bernstein_coefficients_factors(bset, poly, &data, tp); - else if (nvar > 1 && - (bset->ctx->opt->bernstein_recurse & ISL_BERNSTEIN_INTERVALS)) - pwf = bernstein_coefficients_full_recursive(bset, poly, &data, tp); - else - pwf = bernstein_coefficients_base(bset, poly, &data, tp); - - if (tight) - bound->pwf_tight = isl_pw_qpolynomial_fold_fold(bound->pwf_tight, pwf); - else - bound->pwf = isl_pw_qpolynomial_fold_fold(bound->pwf, pwf); - - return 0; -error: - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - return -1; -} diff --git a/cloog-0.17.0/isl/isl_bernstein.h b/cloog-0.17.0/isl/isl_bernstein.h deleted file mode 100644 index 7694b04..0000000 --- a/cloog-0.17.0/isl/isl_bernstein.h +++ /dev/null @@ -1,4 +0,0 @@ -#include - -int isl_qpolynomial_bound_on_domain_bernstein(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct isl_bound *bound); diff --git a/cloog-0.17.0/isl/isl_blk.c b/cloog-0.17.0/isl/isl_blk.c deleted file mode 100644 index 0c1dae7..0000000 --- a/cloog-0.17.0/isl/isl_blk.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include - -/* The maximal number of cache misses before first element is evicted */ -#define ISL_BLK_MAX_MISS 100 - -struct isl_blk isl_blk_empty() -{ - struct isl_blk block; - block.size = 0; - block.data = NULL; - return block; -} - -static int isl_blk_is_empty(struct isl_blk block) -{ - return block.size == 0 && block.data == NULL; -} - -static struct isl_blk isl_blk_error() -{ - struct isl_blk block; - block.size = -1; - block.data = NULL; - return block; -} - -int isl_blk_is_error(struct isl_blk block) -{ - return block.size == -1 && block.data == NULL; -} - -static struct isl_blk extend(struct isl_ctx *ctx, struct isl_blk block, - size_t new_n) -{ - int i; - isl_int *p; - - if (block.size >= new_n) - return block; - - p = block.data; - block.data = isl_realloc_array(ctx, block.data, isl_int, new_n); - if (!block.data) { - free(p); - return isl_blk_error(); - } - - for (i = block.size; i < new_n; ++i) - isl_int_init(block.data[i]); - block.size = new_n; - - return block; -} - -static void isl_blk_free_force(struct isl_ctx *ctx, struct isl_blk block) -{ - int i; - - for (i = 0; i < block.size; ++i) - isl_int_clear(block.data[i]); - free(block.data); -} - -struct isl_blk isl_blk_alloc(struct isl_ctx *ctx, size_t n) -{ - int i; - struct isl_blk block; - - block = isl_blk_empty(); - if (n && ctx->n_cached) { - int best = 0; - for (i = 1; ctx->cache[best].size != n && i < ctx->n_cached; ++i) { - if (ctx->cache[best].size < n) { - if (ctx->cache[i].size > ctx->cache[best].size) - best = i; - } else if (ctx->cache[i].size >= n && - ctx->cache[i].size < ctx->cache[best].size) - best = i; - } - if (ctx->cache[best].size < 2 * n + 100) { - block = ctx->cache[best]; - if (--ctx->n_cached != best) - ctx->cache[best] = ctx->cache[ctx->n_cached]; - if (best == 0) - ctx->n_miss = 0; - } else if (ctx->n_miss++ >= ISL_BLK_MAX_MISS) { - isl_blk_free_force(ctx, ctx->cache[0]); - if (--ctx->n_cached != 0) - ctx->cache[0] = ctx->cache[ctx->n_cached]; - ctx->n_miss = 0; - } - } - - return extend(ctx, block, n); -} - -struct isl_blk isl_blk_extend(struct isl_ctx *ctx, struct isl_blk block, - size_t new_n) -{ - if (isl_blk_is_empty(block)) - return isl_blk_alloc(ctx, new_n); - - return extend(ctx, block, new_n); -} - -void isl_blk_free(struct isl_ctx *ctx, struct isl_blk block) -{ - if (isl_blk_is_empty(block) || isl_blk_is_error(block)) - return; - - if (ctx->n_cached < ISL_BLK_CACHE_SIZE) - ctx->cache[ctx->n_cached++] = block; - else - isl_blk_free_force(ctx, block); -} - -void isl_blk_clear_cache(struct isl_ctx *ctx) -{ - int i; - - for (i = 0; i < ctx->n_cached; ++i) - isl_blk_free_force(ctx, ctx->cache[i]); - ctx->n_cached = 0; -} diff --git a/cloog-0.17.0/isl/isl_bound.c b/cloog-0.17.0/isl/isl_bound.c deleted file mode 100644 index d9c10bc..0000000 --- a/cloog-0.17.0/isl/isl_bound.c +++ /dev/null @@ -1,331 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include - -/* Compute a bound on the polynomial defined over the parametric polytope - * using either range propagation or bernstein expansion and - * store the result in bound->pwf and bound->pwf_tight. - * Since bernstein expansion requires bounded domains, we apply - * range propagation on unbounded domains. Otherwise, we respect the choice - * of the user. - */ -static int compressed_guarded_poly_bound(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, void *user) -{ - struct isl_bound *bound = (struct isl_bound *)user; - int bounded; - - if (!bset || !poly) - goto error; - - if (bset->ctx->opt->bound == ISL_BOUND_RANGE) - return isl_qpolynomial_bound_on_domain_range(bset, poly, bound); - - bounded = isl_basic_set_is_bounded(bset); - if (bounded < 0) - goto error; - if (bounded) - return isl_qpolynomial_bound_on_domain_bernstein(bset, poly, bound); - else - return isl_qpolynomial_bound_on_domain_range(bset, poly, bound); -error: - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - return -1; -} - -static int unwrapped_guarded_poly_bound(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, void *user) -{ - struct isl_bound *bound = (struct isl_bound *)user; - isl_pw_qpolynomial_fold *top_pwf; - isl_pw_qpolynomial_fold *top_pwf_tight; - isl_space *dim; - isl_morph *morph; - int r; - - bset = isl_basic_set_detect_equalities(bset); - - if (!bset) - goto error; - - if (bset->n_eq == 0) - return compressed_guarded_poly_bound(bset, poly, user); - - morph = isl_basic_set_full_compression(bset); - - bset = isl_morph_basic_set(isl_morph_copy(morph), bset); - poly = isl_qpolynomial_morph_domain(poly, isl_morph_copy(morph)); - - dim = isl_morph_get_ran_space(morph); - dim = isl_space_params(dim); - - top_pwf = bound->pwf; - top_pwf_tight = bound->pwf_tight; - - dim = isl_space_from_domain(dim); - dim = isl_space_add_dims(dim, isl_dim_out, 1); - bound->pwf = isl_pw_qpolynomial_fold_zero(isl_space_copy(dim), - bound->type); - bound->pwf_tight = isl_pw_qpolynomial_fold_zero(dim, bound->type); - - r = compressed_guarded_poly_bound(bset, poly, user); - - morph = isl_morph_dom_params(morph); - morph = isl_morph_ran_params(morph); - morph = isl_morph_inverse(morph); - - bound->pwf = isl_pw_qpolynomial_fold_morph_domain(bound->pwf, - isl_morph_copy(morph)); - bound->pwf_tight = isl_pw_qpolynomial_fold_morph_domain( - bound->pwf_tight, morph); - - bound->pwf = isl_pw_qpolynomial_fold_fold(top_pwf, bound->pwf); - bound->pwf_tight = isl_pw_qpolynomial_fold_fold(top_pwf_tight, - bound->pwf_tight); - - return r; -error: - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - return -1; -} - -static int guarded_poly_bound(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, void *user) -{ - struct isl_bound *bound = (struct isl_bound *)user; - isl_space *dim; - isl_pw_qpolynomial_fold *top_pwf; - isl_pw_qpolynomial_fold *top_pwf_tight; - int nparam; - int n_in; - int r; - - if (!bound->wrapping) - return unwrapped_guarded_poly_bound(bset, poly, user); - - nparam = isl_space_dim(bound->dim, isl_dim_param); - n_in = isl_space_dim(bound->dim, isl_dim_in); - - bset = isl_basic_set_move_dims(bset, isl_dim_param, nparam, - isl_dim_set, 0, n_in); - poly = isl_qpolynomial_move_dims(poly, isl_dim_param, nparam, - isl_dim_in, 0, n_in); - - dim = isl_basic_set_get_space(bset); - dim = isl_space_params(dim); - - top_pwf = bound->pwf; - top_pwf_tight = bound->pwf_tight; - - dim = isl_space_from_domain(dim); - dim = isl_space_add_dims(dim, isl_dim_out, 1); - bound->pwf = isl_pw_qpolynomial_fold_zero(isl_space_copy(dim), - bound->type); - bound->pwf_tight = isl_pw_qpolynomial_fold_zero(dim, bound->type); - - r = unwrapped_guarded_poly_bound(bset, poly, user); - - bound->pwf = isl_pw_qpolynomial_fold_reset_space(bound->pwf, - isl_space_copy(bound->dim)); - bound->pwf_tight = isl_pw_qpolynomial_fold_reset_space(bound->pwf_tight, - isl_space_copy(bound->dim)); - - bound->pwf = isl_pw_qpolynomial_fold_fold(top_pwf, bound->pwf); - bound->pwf_tight = isl_pw_qpolynomial_fold_fold(top_pwf_tight, - bound->pwf_tight); - - return r; -} - -static int guarded_qp(__isl_take isl_qpolynomial *qp, void *user) -{ - struct isl_bound *bound = (struct isl_bound *)user; - int r; - - r = isl_qpolynomial_as_polynomial_on_domain(qp, bound->bset, - &guarded_poly_bound, user); - isl_qpolynomial_free(qp); - return r; -} - -static int basic_guarded_fold(__isl_take isl_basic_set *bset, void *user) -{ - struct isl_bound *bound = (struct isl_bound *)user; - int r; - - bound->bset = bset; - r = isl_qpolynomial_fold_foreach_qpolynomial(bound->fold, - &guarded_qp, user); - isl_basic_set_free(bset); - return r; -} - -static int guarded_fold(__isl_take isl_set *set, - __isl_take isl_qpolynomial_fold *fold, void *user) -{ - struct isl_bound *bound = (struct isl_bound *)user; - - if (!set || !fold) - goto error; - - set = isl_set_make_disjoint(set); - - bound->fold = fold; - bound->type = isl_qpolynomial_fold_get_type(fold); - - if (isl_set_foreach_basic_set(set, &basic_guarded_fold, bound) < 0) - goto error; - - isl_set_free(set); - isl_qpolynomial_fold_free(fold); - - return 0; -error: - isl_set_free(set); - isl_qpolynomial_fold_free(fold); - return -1; -} - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_bound( - __isl_take isl_pw_qpolynomial_fold *pwf, int *tight) -{ - unsigned nvar; - struct isl_bound bound; - int covers; - - if (!pwf) - return NULL; - - bound.dim = isl_pw_qpolynomial_fold_get_domain_space(pwf); - - bound.wrapping = isl_space_is_wrapping(bound.dim); - if (bound.wrapping) - bound.dim = isl_space_unwrap(bound.dim); - nvar = isl_space_dim(bound.dim, isl_dim_out); - bound.dim = isl_space_domain(bound.dim); - bound.dim = isl_space_from_domain(bound.dim); - bound.dim = isl_space_add_dims(bound.dim, isl_dim_out, 1); - - if (nvar == 0) { - if (tight) - *tight = 1; - return isl_pw_qpolynomial_fold_reset_space(pwf, bound.dim); - } - - if (isl_pw_qpolynomial_fold_is_zero(pwf)) { - enum isl_fold type = pwf->type; - isl_pw_qpolynomial_fold_free(pwf); - if (tight) - *tight = 1; - return isl_pw_qpolynomial_fold_zero(bound.dim, type); - } - - bound.pwf = isl_pw_qpolynomial_fold_zero(isl_space_copy(bound.dim), - pwf->type); - bound.pwf_tight = isl_pw_qpolynomial_fold_zero(isl_space_copy(bound.dim), - pwf->type); - bound.check_tight = !!tight; - - if (isl_pw_qpolynomial_fold_foreach_lifted_piece(pwf, - guarded_fold, &bound) < 0) - goto error; - - covers = isl_pw_qpolynomial_fold_covers(bound.pwf_tight, bound.pwf); - if (covers < 0) - goto error; - - if (tight) - *tight = covers; - - isl_space_free(bound.dim); - isl_pw_qpolynomial_fold_free(pwf); - - if (covers) { - isl_pw_qpolynomial_fold_free(bound.pwf); - return bound.pwf_tight; - } - - bound.pwf = isl_pw_qpolynomial_fold_fold(bound.pwf, bound.pwf_tight); - - return bound.pwf; -error: - isl_pw_qpolynomial_fold_free(bound.pwf_tight); - isl_pw_qpolynomial_fold_free(bound.pwf); - isl_pw_qpolynomial_fold_free(pwf); - isl_space_free(bound.dim); - return NULL; -} - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_bound( - __isl_take isl_pw_qpolynomial *pwqp, enum isl_fold type, int *tight) -{ - isl_pw_qpolynomial_fold *pwf; - - pwf = isl_pw_qpolynomial_fold_from_pw_qpolynomial(type, pwqp); - return isl_pw_qpolynomial_fold_bound(pwf, tight); -} - -struct isl_union_bound_data { - enum isl_fold type; - int tight; - isl_union_pw_qpolynomial_fold *res; -}; - -static int bound_pw(__isl_take isl_pw_qpolynomial *pwqp, void *user) -{ - struct isl_union_bound_data *data = user; - isl_pw_qpolynomial_fold *pwf; - - pwf = isl_pw_qpolynomial_bound(pwqp, data->type, - data->tight ? &data->tight : NULL); - data->res = isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold( - data->res, pwf); - - return 0; -} - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_bound( - __isl_take isl_union_pw_qpolynomial *upwqp, - enum isl_fold type, int *tight) -{ - isl_space *dim; - struct isl_union_bound_data data = { type, 1, NULL }; - - if (!upwqp) - return NULL; - - if (!tight) - data.tight = 0; - - dim = isl_union_pw_qpolynomial_get_space(upwqp); - data.res = isl_union_pw_qpolynomial_fold_zero(dim, type); - if (isl_union_pw_qpolynomial_foreach_pw_qpolynomial(upwqp, - &bound_pw, &data) < 0) - goto error; - - isl_union_pw_qpolynomial_free(upwqp); - if (tight) - *tight = data.tight; - - return data.res; -error: - isl_union_pw_qpolynomial_free(upwqp); - isl_union_pw_qpolynomial_fold_free(data.res); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_bound.h b/cloog-0.17.0/isl/isl_bound.h deleted file mode 100644 index 1a9d390..0000000 --- a/cloog-0.17.0/isl/isl_bound.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef ISL_BOUND_H -#define ISL_BOUND_H - -#include - -struct isl_bound { - /* input */ - int check_tight; - int wrapping; - enum isl_fold type; - isl_space *dim; - isl_basic_set *bset; - isl_qpolynomial_fold *fold; - - /* output */ - isl_pw_qpolynomial_fold *pwf; - isl_pw_qpolynomial_fold *pwf_tight; -}; - -#endif diff --git a/cloog-0.17.0/isl/isl_coalesce.c b/cloog-0.17.0/isl/isl_coalesce.c deleted file mode 100644 index b99c7b5..0000000 --- a/cloog-0.17.0/isl/isl_coalesce.c +++ /dev/null @@ -1,1294 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include "isl_map_private.h" -#include -#include "isl_tab.h" -#include - -#define STATUS_ERROR -1 -#define STATUS_REDUNDANT 1 -#define STATUS_VALID 2 -#define STATUS_SEPARATE 3 -#define STATUS_CUT 4 -#define STATUS_ADJ_EQ 5 -#define STATUS_ADJ_INEQ 6 - -static int status_in(isl_int *ineq, struct isl_tab *tab) -{ - enum isl_ineq_type type = isl_tab_ineq_type(tab, ineq); - switch (type) { - default: - case isl_ineq_error: return STATUS_ERROR; - case isl_ineq_redundant: return STATUS_VALID; - case isl_ineq_separate: return STATUS_SEPARATE; - case isl_ineq_cut: return STATUS_CUT; - case isl_ineq_adj_eq: return STATUS_ADJ_EQ; - case isl_ineq_adj_ineq: return STATUS_ADJ_INEQ; - } -} - -/* Compute the position of the equalities of basic map "i" - * with respect to basic map "j". - * The resulting array has twice as many entries as the number - * of equalities corresponding to the two inequalties to which - * each equality corresponds. - */ -static int *eq_status_in(struct isl_map *map, int i, int j, - struct isl_tab **tabs) -{ - int k, l; - int *eq = isl_calloc_array(map->ctx, int, 2 * map->p[i]->n_eq); - unsigned dim; - - dim = isl_basic_map_total_dim(map->p[i]); - for (k = 0; k < map->p[i]->n_eq; ++k) { - for (l = 0; l < 2; ++l) { - isl_seq_neg(map->p[i]->eq[k], map->p[i]->eq[k], 1+dim); - eq[2 * k + l] = status_in(map->p[i]->eq[k], tabs[j]); - if (eq[2 * k + l] == STATUS_ERROR) - goto error; - } - if (eq[2 * k] == STATUS_SEPARATE || - eq[2 * k + 1] == STATUS_SEPARATE) - break; - } - - return eq; -error: - free(eq); - return NULL; -} - -/* Compute the position of the inequalities of basic map "i" - * with respect to basic map "j". - */ -static int *ineq_status_in(struct isl_map *map, int i, int j, - struct isl_tab **tabs) -{ - int k; - unsigned n_eq = map->p[i]->n_eq; - int *ineq = isl_calloc_array(map->ctx, int, map->p[i]->n_ineq); - - for (k = 0; k < map->p[i]->n_ineq; ++k) { - if (isl_tab_is_redundant(tabs[i], n_eq + k)) { - ineq[k] = STATUS_REDUNDANT; - continue; - } - ineq[k] = status_in(map->p[i]->ineq[k], tabs[j]); - if (ineq[k] == STATUS_ERROR) - goto error; - if (ineq[k] == STATUS_SEPARATE) - break; - } - - return ineq; -error: - free(ineq); - return NULL; -} - -static int any(int *con, unsigned len, int status) -{ - int i; - - for (i = 0; i < len ; ++i) - if (con[i] == status) - return 1; - return 0; -} - -static int count(int *con, unsigned len, int status) -{ - int i; - int c = 0; - - for (i = 0; i < len ; ++i) - if (con[i] == status) - c++; - return c; -} - -static int all(int *con, unsigned len, int status) -{ - int i; - - for (i = 0; i < len ; ++i) { - if (con[i] == STATUS_REDUNDANT) - continue; - if (con[i] != status) - return 0; - } - return 1; -} - -static void drop(struct isl_map *map, int i, struct isl_tab **tabs) -{ - isl_basic_map_free(map->p[i]); - isl_tab_free(tabs[i]); - - if (i != map->n - 1) { - map->p[i] = map->p[map->n - 1]; - tabs[i] = tabs[map->n - 1]; - } - tabs[map->n - 1] = NULL; - map->n--; -} - -/* Replace the pair of basic maps i and j by the basic map bounded - * by the valid constraints in both basic maps and the constraint - * in extra (if not NULL). - */ -static int fuse(struct isl_map *map, int i, int j, - struct isl_tab **tabs, int *eq_i, int *ineq_i, int *eq_j, int *ineq_j, - __isl_keep isl_mat *extra) -{ - int k, l; - struct isl_basic_map *fused = NULL; - struct isl_tab *fused_tab = NULL; - unsigned total = isl_basic_map_total_dim(map->p[i]); - unsigned extra_rows = extra ? extra->n_row : 0; - - fused = isl_basic_map_alloc_space(isl_space_copy(map->p[i]->dim), - map->p[i]->n_div, - map->p[i]->n_eq + map->p[j]->n_eq, - map->p[i]->n_ineq + map->p[j]->n_ineq + extra_rows); - if (!fused) - goto error; - - for (k = 0; k < map->p[i]->n_eq; ++k) { - if (eq_i && (eq_i[2 * k] != STATUS_VALID || - eq_i[2 * k + 1] != STATUS_VALID)) - continue; - l = isl_basic_map_alloc_equality(fused); - if (l < 0) - goto error; - isl_seq_cpy(fused->eq[l], map->p[i]->eq[k], 1 + total); - } - - for (k = 0; k < map->p[j]->n_eq; ++k) { - if (eq_j && (eq_j[2 * k] != STATUS_VALID || - eq_j[2 * k + 1] != STATUS_VALID)) - continue; - l = isl_basic_map_alloc_equality(fused); - if (l < 0) - goto error; - isl_seq_cpy(fused->eq[l], map->p[j]->eq[k], 1 + total); - } - - for (k = 0; k < map->p[i]->n_ineq; ++k) { - if (ineq_i[k] != STATUS_VALID) - continue; - l = isl_basic_map_alloc_inequality(fused); - if (l < 0) - goto error; - isl_seq_cpy(fused->ineq[l], map->p[i]->ineq[k], 1 + total); - } - - for (k = 0; k < map->p[j]->n_ineq; ++k) { - if (ineq_j[k] != STATUS_VALID) - continue; - l = isl_basic_map_alloc_inequality(fused); - if (l < 0) - goto error; - isl_seq_cpy(fused->ineq[l], map->p[j]->ineq[k], 1 + total); - } - - for (k = 0; k < map->p[i]->n_div; ++k) { - int l = isl_basic_map_alloc_div(fused); - if (l < 0) - goto error; - isl_seq_cpy(fused->div[l], map->p[i]->div[k], 1 + 1 + total); - } - - for (k = 0; k < extra_rows; ++k) { - l = isl_basic_map_alloc_inequality(fused); - if (l < 0) - goto error; - isl_seq_cpy(fused->ineq[l], extra->row[k], 1 + total); - } - - fused = isl_basic_map_gauss(fused, NULL); - ISL_F_SET(fused, ISL_BASIC_MAP_FINAL); - if (ISL_F_ISSET(map->p[i], ISL_BASIC_MAP_RATIONAL) && - ISL_F_ISSET(map->p[j], ISL_BASIC_MAP_RATIONAL)) - ISL_F_SET(fused, ISL_BASIC_MAP_RATIONAL); - - fused_tab = isl_tab_from_basic_map(fused); - if (isl_tab_detect_redundant(fused_tab) < 0) - goto error; - - isl_basic_map_free(map->p[i]); - map->p[i] = fused; - isl_tab_free(tabs[i]); - tabs[i] = fused_tab; - drop(map, j, tabs); - - return 1; -error: - isl_tab_free(fused_tab); - isl_basic_map_free(fused); - return -1; -} - -/* Given a pair of basic maps i and j such that all constraints are either - * "valid" or "cut", check if the facets corresponding to the "cut" - * constraints of i lie entirely within basic map j. - * If so, replace the pair by the basic map consisting of the valid - * constraints in both basic maps. - * - * To see that we are not introducing any extra points, call the - * two basic maps A and B and the resulting map U and let x - * be an element of U \setminus ( A \cup B ). - * Then there is a pair of cut constraints c_1 and c_2 in A and B such that x - * violates them. Let X be the intersection of U with the opposites - * of these constraints. Then x \in X. - * The facet corresponding to c_1 contains the corresponding facet of A. - * This facet is entirely contained in B, so c_2 is valid on the facet. - * However, since it is also (part of) a facet of X, -c_2 is also valid - * on the facet. This means c_2 is saturated on the facet, so c_1 and - * c_2 must be opposites of each other, but then x could not violate - * both of them. - */ -static int check_facets(struct isl_map *map, int i, int j, - struct isl_tab **tabs, int *ineq_i, int *ineq_j) -{ - int k, l; - struct isl_tab_undo *snap; - unsigned n_eq = map->p[i]->n_eq; - - snap = isl_tab_snap(tabs[i]); - - for (k = 0; k < map->p[i]->n_ineq; ++k) { - if (ineq_i[k] != STATUS_CUT) - continue; - if (isl_tab_select_facet(tabs[i], n_eq + k) < 0) - return -1; - for (l = 0; l < map->p[j]->n_ineq; ++l) { - int stat; - if (ineq_j[l] != STATUS_CUT) - continue; - stat = status_in(map->p[j]->ineq[l], tabs[i]); - if (stat != STATUS_VALID) - break; - } - if (isl_tab_rollback(tabs[i], snap) < 0) - return -1; - if (l < map->p[j]->n_ineq) - break; - } - - if (k < map->p[i]->n_ineq) - /* BAD CUT PAIR */ - return 0; - return fuse(map, i, j, tabs, NULL, ineq_i, NULL, ineq_j, NULL); -} - -/* Both basic maps have at least one inequality with and adjacent - * (but opposite) inequality in the other basic map. - * Check that there are no cut constraints and that there is only - * a single pair of adjacent inequalities. - * If so, we can replace the pair by a single basic map described - * by all but the pair of adjacent inequalities. - * Any additional points introduced lie strictly between the two - * adjacent hyperplanes and can therefore be integral. - * - * ____ _____ - * / ||\ / \ - * / || \ / \ - * \ || \ => \ \ - * \ || / \ / - * \___||_/ \_____/ - * - * The test for a single pair of adjancent inequalities is important - * for avoiding the combination of two basic maps like the following - * - * /| - * / | - * /__| - * _____ - * | | - * | | - * |___| - */ -static int check_adj_ineq(struct isl_map *map, int i, int j, - struct isl_tab **tabs, int *ineq_i, int *ineq_j) -{ - int changed = 0; - - if (any(ineq_i, map->p[i]->n_ineq, STATUS_CUT) || - any(ineq_j, map->p[j]->n_ineq, STATUS_CUT)) - /* ADJ INEQ CUT */ - ; - else if (count(ineq_i, map->p[i]->n_ineq, STATUS_ADJ_INEQ) == 1 && - count(ineq_j, map->p[j]->n_ineq, STATUS_ADJ_INEQ) == 1) - changed = fuse(map, i, j, tabs, NULL, ineq_i, NULL, ineq_j, NULL); - /* else ADJ INEQ TOO MANY */ - - return changed; -} - -/* Check if basic map "i" contains the basic map represented - * by the tableau "tab". - */ -static int contains(struct isl_map *map, int i, int *ineq_i, - struct isl_tab *tab) -{ - int k, l; - unsigned dim; - - dim = isl_basic_map_total_dim(map->p[i]); - for (k = 0; k < map->p[i]->n_eq; ++k) { - for (l = 0; l < 2; ++l) { - int stat; - isl_seq_neg(map->p[i]->eq[k], map->p[i]->eq[k], 1+dim); - stat = status_in(map->p[i]->eq[k], tab); - if (stat != STATUS_VALID) - return 0; - } - } - - for (k = 0; k < map->p[i]->n_ineq; ++k) { - int stat; - if (ineq_i[k] == STATUS_REDUNDANT) - continue; - stat = status_in(map->p[i]->ineq[k], tab); - if (stat != STATUS_VALID) - return 0; - } - return 1; -} - -/* Basic map "i" has an inequality "k" that is adjacent to some equality - * of basic map "j". All the other inequalities are valid for "j". - * Check if basic map "j" forms an extension of basic map "i". - * - * In particular, we relax constraint "k", compute the corresponding - * facet and check whether it is included in the other basic map. - * If so, we know that relaxing the constraint extends the basic - * map with exactly the other basic map (we already know that this - * other basic map is included in the extension, because there - * were no "cut" inequalities in "i") and we can replace the - * two basic maps by thie extension. - * ____ _____ - * / || / | - * / || / | - * \ || => \ | - * \ || \ | - * \___|| \____| - */ -static int is_extension(struct isl_map *map, int i, int j, int k, - struct isl_tab **tabs, int *eq_i, int *ineq_i, int *eq_j, int *ineq_j) -{ - int changed = 0; - int super; - struct isl_tab_undo *snap, *snap2; - unsigned n_eq = map->p[i]->n_eq; - - snap = isl_tab_snap(tabs[i]); - tabs[i] = isl_tab_relax(tabs[i], n_eq + k); - snap2 = isl_tab_snap(tabs[i]); - if (isl_tab_select_facet(tabs[i], n_eq + k) < 0) - return -1; - super = contains(map, j, ineq_j, tabs[i]); - if (super) { - if (isl_tab_rollback(tabs[i], snap2) < 0) - return -1; - map->p[i] = isl_basic_map_cow(map->p[i]); - if (!map->p[i]) - return -1; - isl_int_add_ui(map->p[i]->ineq[k][0], map->p[i]->ineq[k][0], 1); - ISL_F_SET(map->p[i], ISL_BASIC_MAP_FINAL); - drop(map, j, tabs); - changed = 1; - } else - if (isl_tab_rollback(tabs[i], snap) < 0) - return -1; - - return changed; -} - -/* For each non-redundant constraint in "bmap" (as determined by "tab"), - * wrap the constraint around "bound" such that it includes the whole - * set "set" and append the resulting constraint to "wraps". - * "wraps" is assumed to have been pre-allocated to the appropriate size. - * wraps->n_row is the number of actual wrapped constraints that have - * been added. - * If any of the wrapping problems results in a constraint that is - * identical to "bound", then this means that "set" is unbounded in such - * way that no wrapping is possible. If this happens then wraps->n_row - * is reset to zero. - */ -static int add_wraps(__isl_keep isl_mat *wraps, __isl_keep isl_basic_map *bmap, - struct isl_tab *tab, isl_int *bound, __isl_keep isl_set *set) -{ - int l; - int w; - unsigned total = isl_basic_map_total_dim(bmap); - - w = wraps->n_row; - - for (l = 0; l < bmap->n_ineq; ++l) { - if (isl_seq_is_neg(bound, bmap->ineq[l], 1 + total)) - continue; - if (isl_seq_eq(bound, bmap->ineq[l], 1 + total)) - continue; - if (isl_tab_is_redundant(tab, bmap->n_eq + l)) - continue; - - isl_seq_cpy(wraps->row[w], bound, 1 + total); - if (!isl_set_wrap_facet(set, wraps->row[w], bmap->ineq[l])) - return -1; - if (isl_seq_eq(wraps->row[w], bound, 1 + total)) - goto unbounded; - ++w; - } - for (l = 0; l < bmap->n_eq; ++l) { - if (isl_seq_is_neg(bound, bmap->eq[l], 1 + total)) - continue; - if (isl_seq_eq(bound, bmap->eq[l], 1 + total)) - continue; - - isl_seq_cpy(wraps->row[w], bound, 1 + total); - isl_seq_neg(wraps->row[w + 1], bmap->eq[l], 1 + total); - if (!isl_set_wrap_facet(set, wraps->row[w], wraps->row[w + 1])) - return -1; - if (isl_seq_eq(wraps->row[w], bound, 1 + total)) - goto unbounded; - ++w; - - isl_seq_cpy(wraps->row[w], bound, 1 + total); - if (!isl_set_wrap_facet(set, wraps->row[w], bmap->eq[l])) - return -1; - if (isl_seq_eq(wraps->row[w], bound, 1 + total)) - goto unbounded; - ++w; - } - - wraps->n_row = w; - return 0; -unbounded: - wraps->n_row = 0; - return 0; -} - -/* Check if the constraints in "wraps" from "first" until the last - * are all valid for the basic set represented by "tab". - * If not, wraps->n_row is set to zero. - */ -static int check_wraps(__isl_keep isl_mat *wraps, int first, - struct isl_tab *tab) -{ - int i; - - for (i = first; i < wraps->n_row; ++i) { - enum isl_ineq_type type; - type = isl_tab_ineq_type(tab, wraps->row[i]); - if (type == isl_ineq_error) - return -1; - if (type == isl_ineq_redundant) - continue; - wraps->n_row = 0; - return 0; - } - - return 0; -} - -/* Return a set that corresponds to the non-redudant constraints - * (as recorded in tab) of bmap. - * - * It's important to remove the redundant constraints as some - * of the other constraints may have been modified after the - * constraints were marked redundant. - * In particular, a constraint may have been relaxed. - * Redundant constraints are ignored when a constraint is relaxed - * and should therefore continue to be ignored ever after. - * Otherwise, the relaxation might be thwarted by some of - * these constraints. - */ -static __isl_give isl_set *set_from_updated_bmap(__isl_keep isl_basic_map *bmap, - struct isl_tab *tab) -{ - bmap = isl_basic_map_copy(bmap); - bmap = isl_basic_map_cow(bmap); - bmap = isl_basic_map_update_from_tab(bmap, tab); - return isl_set_from_basic_set(isl_basic_map_underlying_set(bmap)); -} - -/* Given a basic set i with a constraint k that is adjacent to either the - * whole of basic set j or a facet of basic set j, check if we can wrap - * both the facet corresponding to k and the facet of j (or the whole of j) - * around their ridges to include the other set. - * If so, replace the pair of basic sets by their union. - * - * All constraints of i (except k) are assumed to be valid for j. - * - * However, the constraints of j may not be valid for i and so - * we have to check that the wrapping constraints for j are valid for i. - * - * In the case where j has a facet adjacent to i, tab[j] is assumed - * to have been restricted to this facet, so that the non-redundant - * constraints in tab[j] are the ridges of the facet. - * Note that for the purpose of wrapping, it does not matter whether - * we wrap the ridges of i around the whole of j or just around - * the facet since all the other constraints are assumed to be valid for j. - * In practice, we wrap to include the whole of j. - * ____ _____ - * / | / \ - * / || / | - * \ || => \ | - * \ || \ | - * \___|| \____| - * - */ -static int can_wrap_in_facet(struct isl_map *map, int i, int j, int k, - struct isl_tab **tabs, int *eq_i, int *ineq_i, int *eq_j, int *ineq_j) -{ - int changed = 0; - struct isl_mat *wraps = NULL; - struct isl_set *set_i = NULL; - struct isl_set *set_j = NULL; - struct isl_vec *bound = NULL; - unsigned total = isl_basic_map_total_dim(map->p[i]); - struct isl_tab_undo *snap; - int n; - - set_i = set_from_updated_bmap(map->p[i], tabs[i]); - set_j = set_from_updated_bmap(map->p[j], tabs[j]); - wraps = isl_mat_alloc(map->ctx, 2 * (map->p[i]->n_eq + map->p[j]->n_eq) + - map->p[i]->n_ineq + map->p[j]->n_ineq, - 1 + total); - bound = isl_vec_alloc(map->ctx, 1 + total); - if (!set_i || !set_j || !wraps || !bound) - goto error; - - isl_seq_cpy(bound->el, map->p[i]->ineq[k], 1 + total); - isl_int_add_ui(bound->el[0], bound->el[0], 1); - - isl_seq_cpy(wraps->row[0], bound->el, 1 + total); - wraps->n_row = 1; - - if (add_wraps(wraps, map->p[j], tabs[j], bound->el, set_i) < 0) - goto error; - if (!wraps->n_row) - goto unbounded; - - snap = isl_tab_snap(tabs[i]); - - if (isl_tab_select_facet(tabs[i], map->p[i]->n_eq + k) < 0) - goto error; - if (isl_tab_detect_redundant(tabs[i]) < 0) - goto error; - - isl_seq_neg(bound->el, map->p[i]->ineq[k], 1 + total); - - n = wraps->n_row; - if (add_wraps(wraps, map->p[i], tabs[i], bound->el, set_j) < 0) - goto error; - - if (isl_tab_rollback(tabs[i], snap) < 0) - goto error; - if (check_wraps(wraps, n, tabs[i]) < 0) - goto error; - if (!wraps->n_row) - goto unbounded; - - changed = fuse(map, i, j, tabs, eq_i, ineq_i, eq_j, ineq_j, wraps); - -unbounded: - isl_mat_free(wraps); - - isl_set_free(set_i); - isl_set_free(set_j); - - isl_vec_free(bound); - - return changed; -error: - isl_vec_free(bound); - isl_mat_free(wraps); - isl_set_free(set_i); - isl_set_free(set_j); - return -1; -} - -/* Set the is_redundant property of the "n" constraints in "cuts", - * except "k" to "v". - * This is a fairly tricky operation as it bypasses isl_tab.c. - * The reason we want to temporarily mark some constraints redundant - * is that we want to ignore them in add_wraps. - * - * Initially all cut constraints are non-redundant, but the - * selection of a facet right before the call to this function - * may have made some of them redundant. - * Likewise, the same constraints are marked non-redundant - * in the second call to this function, before they are officially - * made non-redundant again in the subsequent rollback. - */ -static void set_is_redundant(struct isl_tab *tab, unsigned n_eq, - int *cuts, int n, int k, int v) -{ - int l; - - for (l = 0; l < n; ++l) { - if (l == k) - continue; - tab->con[n_eq + cuts[l]].is_redundant = v; - } -} - -/* Given a pair of basic maps i and j such that j sticks out - * of i at n cut constraints, each time by at most one, - * try to compute wrapping constraints and replace the two - * basic maps by a single basic map. - * The other constraints of i are assumed to be valid for j. - * - * The facets of i corresponding to the cut constraints are - * wrapped around their ridges, except those ridges determined - * by any of the other cut constraints. - * The intersections of cut constraints need to be ignored - * as the result of wrapping one cut constraint around another - * would result in a constraint cutting the union. - * In each case, the facets are wrapped to include the union - * of the two basic maps. - * - * The pieces of j that lie at an offset of exactly one from - * one of the cut constraints of i are wrapped around their edges. - * Here, there is no need to ignore intersections because we - * are wrapping around the union of the two basic maps. - * - * If any wrapping fails, i.e., if we cannot wrap to touch - * the union, then we give up. - * Otherwise, the pair of basic maps is replaced by their union. - */ -static int wrap_in_facets(struct isl_map *map, int i, int j, - int *cuts, int n, struct isl_tab **tabs, - int *eq_i, int *ineq_i, int *eq_j, int *ineq_j) -{ - int changed = 0; - isl_mat *wraps = NULL; - isl_set *set = NULL; - isl_vec *bound = NULL; - unsigned total = isl_basic_map_total_dim(map->p[i]); - int max_wrap; - int k; - struct isl_tab_undo *snap_i, *snap_j; - - if (isl_tab_extend_cons(tabs[j], 1) < 0) - goto error; - - max_wrap = 2 * (map->p[i]->n_eq + map->p[j]->n_eq) + - map->p[i]->n_ineq + map->p[j]->n_ineq; - max_wrap *= n; - - set = isl_set_union(set_from_updated_bmap(map->p[i], tabs[i]), - set_from_updated_bmap(map->p[j], tabs[j])); - wraps = isl_mat_alloc(map->ctx, max_wrap, 1 + total); - bound = isl_vec_alloc(map->ctx, 1 + total); - if (!set || !wraps || !bound) - goto error; - - snap_i = isl_tab_snap(tabs[i]); - snap_j = isl_tab_snap(tabs[j]); - - wraps->n_row = 0; - - for (k = 0; k < n; ++k) { - if (isl_tab_select_facet(tabs[i], map->p[i]->n_eq + cuts[k]) < 0) - goto error; - if (isl_tab_detect_redundant(tabs[i]) < 0) - goto error; - set_is_redundant(tabs[i], map->p[i]->n_eq, cuts, n, k, 1); - - isl_seq_neg(bound->el, map->p[i]->ineq[cuts[k]], 1 + total); - if (add_wraps(wraps, map->p[i], tabs[i], bound->el, set) < 0) - goto error; - - set_is_redundant(tabs[i], map->p[i]->n_eq, cuts, n, k, 0); - if (isl_tab_rollback(tabs[i], snap_i) < 0) - goto error; - - if (!wraps->n_row) - break; - - isl_seq_cpy(bound->el, map->p[i]->ineq[cuts[k]], 1 + total); - isl_int_add_ui(bound->el[0], bound->el[0], 1); - if (isl_tab_add_eq(tabs[j], bound->el) < 0) - goto error; - if (isl_tab_detect_redundant(tabs[j]) < 0) - goto error; - - if (!tabs[j]->empty && - add_wraps(wraps, map->p[j], tabs[j], bound->el, set) < 0) - goto error; - - if (isl_tab_rollback(tabs[j], snap_j) < 0) - goto error; - - if (!wraps->n_row) - break; - } - - if (k == n) - changed = fuse(map, i, j, tabs, - eq_i, ineq_i, eq_j, ineq_j, wraps); - - isl_vec_free(bound); - isl_mat_free(wraps); - isl_set_free(set); - - return changed; -error: - isl_vec_free(bound); - isl_mat_free(wraps); - isl_set_free(set); - return -1; -} - -/* Given two basic sets i and j such that i has no cut equalities, - * check if relaxing all the cut inequalities of i by one turns - * them into valid constraint for j and check if we can wrap in - * the bits that are sticking out. - * If so, replace the pair by their union. - * - * We first check if all relaxed cut inequalities of i are valid for j - * and then try to wrap in the intersections of the relaxed cut inequalities - * with j. - * - * During this wrapping, we consider the points of j that lie at a distance - * of exactly 1 from i. In particular, we ignore the points that lie in - * between this lower-dimensional space and the basic map i. - * We can therefore only apply this to integer maps. - * ____ _____ - * / ___|_ / \ - * / | | / | - * \ | | => \ | - * \|____| \ | - * \___| \____/ - * - * _____ ______ - * | ____|_ | \ - * | | | | | - * | | | => | | - * |_| | | | - * |_____| \______| - * - * _______ - * | | - * | |\ | - * | | \ | - * | | \ | - * | | \| - * | | \ - * | |_____\ - * | | - * |_______| - * - * Wrapping can fail if the result of wrapping one of the facets - * around its edges does not produce any new facet constraint. - * In particular, this happens when we try to wrap in unbounded sets. - * - * _______________________________________________________________________ - * | - * | ___ - * | | | - * |_| |_________________________________________________________________ - * |___| - * - * The following is not an acceptable result of coalescing the above two - * sets as it includes extra integer points. - * _______________________________________________________________________ - * | - * | - * | - * | - * \______________________________________________________________________ - */ -static int can_wrap_in_set(struct isl_map *map, int i, int j, - struct isl_tab **tabs, int *eq_i, int *ineq_i, int *eq_j, int *ineq_j) -{ - int changed = 0; - int k, m; - int n; - int *cuts = NULL; - - if (ISL_F_ISSET(map->p[i], ISL_BASIC_MAP_RATIONAL) || - ISL_F_ISSET(map->p[j], ISL_BASIC_MAP_RATIONAL)) - return 0; - - n = count(ineq_i, map->p[i]->n_ineq, STATUS_CUT); - if (n == 0) - return 0; - - cuts = isl_alloc_array(map->ctx, int, n); - if (!cuts) - return -1; - - for (k = 0, m = 0; m < n; ++k) { - enum isl_ineq_type type; - - if (ineq_i[k] != STATUS_CUT) - continue; - - isl_int_add_ui(map->p[i]->ineq[k][0], map->p[i]->ineq[k][0], 1); - type = isl_tab_ineq_type(tabs[j], map->p[i]->ineq[k]); - isl_int_sub_ui(map->p[i]->ineq[k][0], map->p[i]->ineq[k][0], 1); - if (type == isl_ineq_error) - goto error; - if (type != isl_ineq_redundant) - break; - cuts[m] = k; - ++m; - } - - if (m == n) - changed = wrap_in_facets(map, i, j, cuts, n, tabs, - eq_i, ineq_i, eq_j, ineq_j); - - free(cuts); - - return changed; -error: - free(cuts); - return -1; -} - -/* Check if either i or j has a single cut constraint that can - * be used to wrap in (a facet of) the other basic set. - * if so, replace the pair by their union. - */ -static int check_wrap(struct isl_map *map, int i, int j, - struct isl_tab **tabs, int *eq_i, int *ineq_i, int *eq_j, int *ineq_j) -{ - int changed = 0; - - if (!any(eq_i, 2 * map->p[i]->n_eq, STATUS_CUT)) - changed = can_wrap_in_set(map, i, j, tabs, - eq_i, ineq_i, eq_j, ineq_j); - if (changed) - return changed; - - if (!any(eq_j, 2 * map->p[j]->n_eq, STATUS_CUT)) - changed = can_wrap_in_set(map, j, i, tabs, - eq_j, ineq_j, eq_i, ineq_i); - return changed; -} - -/* At least one of the basic maps has an equality that is adjacent - * to inequality. Make sure that only one of the basic maps has - * such an equality and that the other basic map has exactly one - * inequality adjacent to an equality. - * We call the basic map that has the inequality "i" and the basic - * map that has the equality "j". - * If "i" has any "cut" (in)equality, then relaxing the inequality - * by one would not result in a basic map that contains the other - * basic map. - */ -static int check_adj_eq(struct isl_map *map, int i, int j, - struct isl_tab **tabs, int *eq_i, int *ineq_i, int *eq_j, int *ineq_j) -{ - int changed = 0; - int k; - - if (any(eq_i, 2 * map->p[i]->n_eq, STATUS_ADJ_INEQ) && - any(eq_j, 2 * map->p[j]->n_eq, STATUS_ADJ_INEQ)) - /* ADJ EQ TOO MANY */ - return 0; - - if (any(eq_i, 2 * map->p[i]->n_eq, STATUS_ADJ_INEQ)) - return check_adj_eq(map, j, i, tabs, - eq_j, ineq_j, eq_i, ineq_i); - - /* j has an equality adjacent to an inequality in i */ - - if (any(eq_i, 2 * map->p[i]->n_eq, STATUS_CUT)) - return 0; - if (any(ineq_i, map->p[i]->n_ineq, STATUS_CUT)) - /* ADJ EQ CUT */ - return 0; - if (count(ineq_i, map->p[i]->n_ineq, STATUS_ADJ_EQ) != 1 || - any(ineq_j, map->p[j]->n_ineq, STATUS_ADJ_EQ) || - any(ineq_i, map->p[i]->n_ineq, STATUS_ADJ_INEQ) || - any(ineq_j, map->p[j]->n_ineq, STATUS_ADJ_INEQ)) - /* ADJ EQ TOO MANY */ - return 0; - - for (k = 0; k < map->p[i]->n_ineq ; ++k) - if (ineq_i[k] == STATUS_ADJ_EQ) - break; - - changed = is_extension(map, i, j, k, tabs, eq_i, ineq_i, eq_j, ineq_j); - if (changed) - return changed; - - if (count(eq_j, 2 * map->p[j]->n_eq, STATUS_ADJ_INEQ) != 1) - return 0; - - changed = can_wrap_in_facet(map, i, j, k, tabs, eq_i, ineq_i, eq_j, ineq_j); - - return changed; -} - -/* The two basic maps lie on adjacent hyperplanes. In particular, - * basic map "i" has an equality that lies parallel to basic map "j". - * Check if we can wrap the facets around the parallel hyperplanes - * to include the other set. - * - * We perform basically the same operations as can_wrap_in_facet, - * except that we don't need to select a facet of one of the sets. - * _ - * \\ \\ - * \\ => \\ - * \ \| - * - * We only allow one equality of "i" to be adjacent to an equality of "j" - * to avoid coalescing - * - * [m, n] -> { [x, y] -> [x, 1 + y] : x >= 1 and y >= 1 and - * x <= 10 and y <= 10; - * [x, y] -> [1 + x, y] : x >= 1 and x <= 20 and - * y >= 5 and y <= 15 } - * - * to - * - * [m, n] -> { [x, y] -> [x2, y2] : x >= 1 and 10y2 <= 20 - x + 10y and - * 4y2 >= 5 + 3y and 5y2 <= 15 + 4y and - * y2 <= 1 + x + y - x2 and y2 >= y and - * y2 >= 1 + x + y - x2 } - */ -static int check_eq_adj_eq(struct isl_map *map, int i, int j, - struct isl_tab **tabs, int *eq_i, int *ineq_i, int *eq_j, int *ineq_j) -{ - int k; - int changed = 0; - struct isl_mat *wraps = NULL; - struct isl_set *set_i = NULL; - struct isl_set *set_j = NULL; - struct isl_vec *bound = NULL; - unsigned total = isl_basic_map_total_dim(map->p[i]); - - if (count(eq_i, 2 * map->p[i]->n_eq, STATUS_ADJ_EQ) != 1) - return 0; - - for (k = 0; k < 2 * map->p[i]->n_eq ; ++k) - if (eq_i[k] == STATUS_ADJ_EQ) - break; - - set_i = set_from_updated_bmap(map->p[i], tabs[i]); - set_j = set_from_updated_bmap(map->p[j], tabs[j]); - wraps = isl_mat_alloc(map->ctx, 2 * (map->p[i]->n_eq + map->p[j]->n_eq) + - map->p[i]->n_ineq + map->p[j]->n_ineq, - 1 + total); - bound = isl_vec_alloc(map->ctx, 1 + total); - if (!set_i || !set_j || !wraps || !bound) - goto error; - - if (k % 2 == 0) - isl_seq_neg(bound->el, map->p[i]->eq[k / 2], 1 + total); - else - isl_seq_cpy(bound->el, map->p[i]->eq[k / 2], 1 + total); - isl_int_add_ui(bound->el[0], bound->el[0], 1); - - isl_seq_cpy(wraps->row[0], bound->el, 1 + total); - wraps->n_row = 1; - - if (add_wraps(wraps, map->p[j], tabs[j], bound->el, set_i) < 0) - goto error; - if (!wraps->n_row) - goto unbounded; - - isl_int_sub_ui(bound->el[0], bound->el[0], 1); - isl_seq_neg(bound->el, bound->el, 1 + total); - - isl_seq_cpy(wraps->row[wraps->n_row], bound->el, 1 + total); - wraps->n_row++; - - if (add_wraps(wraps, map->p[i], tabs[i], bound->el, set_j) < 0) - goto error; - if (!wraps->n_row) - goto unbounded; - - changed = fuse(map, i, j, tabs, eq_i, ineq_i, eq_j, ineq_j, wraps); - - if (0) { -error: changed = -1; - } -unbounded: - - isl_mat_free(wraps); - isl_set_free(set_i); - isl_set_free(set_j); - isl_vec_free(bound); - - return changed; -} - -/* Check if the union of the given pair of basic maps - * can be represented by a single basic map. - * If so, replace the pair by the single basic map and return 1. - * Otherwise, return 0; - * - * We first check the effect of each constraint of one basic map - * on the other basic map. - * The constraint may be - * redundant the constraint is redundant in its own - * basic map and should be ignore and removed - * in the end - * valid all (integer) points of the other basic map - * satisfy the constraint - * separate no (integer) point of the other basic map - * satisfies the constraint - * cut some but not all points of the other basic map - * satisfy the constraint - * adj_eq the given constraint is adjacent (on the outside) - * to an equality of the other basic map - * adj_ineq the given constraint is adjacent (on the outside) - * to an inequality of the other basic map - * - * We consider seven cases in which we can replace the pair by a single - * basic map. We ignore all "redundant" constraints. - * - * 1. all constraints of one basic map are valid - * => the other basic map is a subset and can be removed - * - * 2. all constraints of both basic maps are either "valid" or "cut" - * and the facets corresponding to the "cut" constraints - * of one of the basic maps lies entirely inside the other basic map - * => the pair can be replaced by a basic map consisting - * of the valid constraints in both basic maps - * - * 3. there is a single pair of adjacent inequalities - * (all other constraints are "valid") - * => the pair can be replaced by a basic map consisting - * of the valid constraints in both basic maps - * - * 4. there is a single adjacent pair of an inequality and an equality, - * the other constraints of the basic map containing the inequality are - * "valid". Moreover, if the inequality the basic map is relaxed - * and then turned into an equality, then resulting facet lies - * entirely inside the other basic map - * => the pair can be replaced by the basic map containing - * the inequality, with the inequality relaxed. - * - * 5. there is a single adjacent pair of an inequality and an equality, - * the other constraints of the basic map containing the inequality are - * "valid". Moreover, the facets corresponding to both - * the inequality and the equality can be wrapped around their - * ridges to include the other basic map - * => the pair can be replaced by a basic map consisting - * of the valid constraints in both basic maps together - * with all wrapping constraints - * - * 6. one of the basic maps extends beyond the other by at most one. - * Moreover, the facets corresponding to the cut constraints and - * the pieces of the other basic map at offset one from these cut - * constraints can be wrapped around their ridges to include - * the union of the two basic maps - * => the pair can be replaced by a basic map consisting - * of the valid constraints in both basic maps together - * with all wrapping constraints - * - * 7. the two basic maps live in adjacent hyperplanes. In principle - * such sets can always be combined through wrapping, but we impose - * that there is only one such pair, to avoid overeager coalescing. - * - * Throughout the computation, we maintain a collection of tableaus - * corresponding to the basic maps. When the basic maps are dropped - * or combined, the tableaus are modified accordingly. - */ -static int coalesce_pair(struct isl_map *map, int i, int j, - struct isl_tab **tabs) -{ - int changed = 0; - int *eq_i = NULL; - int *eq_j = NULL; - int *ineq_i = NULL; - int *ineq_j = NULL; - - eq_i = eq_status_in(map, i, j, tabs); - if (!eq_i) - goto error; - if (any(eq_i, 2 * map->p[i]->n_eq, STATUS_ERROR)) - goto error; - if (any(eq_i, 2 * map->p[i]->n_eq, STATUS_SEPARATE)) - goto done; - - eq_j = eq_status_in(map, j, i, tabs); - if (!eq_j) - goto error; - if (any(eq_j, 2 * map->p[j]->n_eq, STATUS_ERROR)) - goto error; - if (any(eq_j, 2 * map->p[j]->n_eq, STATUS_SEPARATE)) - goto done; - - ineq_i = ineq_status_in(map, i, j, tabs); - if (!ineq_i) - goto error; - if (any(ineq_i, map->p[i]->n_ineq, STATUS_ERROR)) - goto error; - if (any(ineq_i, map->p[i]->n_ineq, STATUS_SEPARATE)) - goto done; - - ineq_j = ineq_status_in(map, j, i, tabs); - if (!ineq_j) - goto error; - if (any(ineq_j, map->p[j]->n_ineq, STATUS_ERROR)) - goto error; - if (any(ineq_j, map->p[j]->n_ineq, STATUS_SEPARATE)) - goto done; - - if (all(eq_i, 2 * map->p[i]->n_eq, STATUS_VALID) && - all(ineq_i, map->p[i]->n_ineq, STATUS_VALID)) { - drop(map, j, tabs); - changed = 1; - } else if (all(eq_j, 2 * map->p[j]->n_eq, STATUS_VALID) && - all(ineq_j, map->p[j]->n_ineq, STATUS_VALID)) { - drop(map, i, tabs); - changed = 1; - } else if (any(eq_i, 2 * map->p[i]->n_eq, STATUS_ADJ_EQ)) { - changed = check_eq_adj_eq(map, i, j, tabs, - eq_i, ineq_i, eq_j, ineq_j); - } else if (any(eq_j, 2 * map->p[j]->n_eq, STATUS_ADJ_EQ)) { - changed = check_eq_adj_eq(map, j, i, tabs, - eq_j, ineq_j, eq_i, ineq_i); - } else if (any(eq_i, 2 * map->p[i]->n_eq, STATUS_ADJ_INEQ) || - any(eq_j, 2 * map->p[j]->n_eq, STATUS_ADJ_INEQ)) { - changed = check_adj_eq(map, i, j, tabs, - eq_i, ineq_i, eq_j, ineq_j); - } else if (any(ineq_i, map->p[i]->n_ineq, STATUS_ADJ_EQ) || - any(ineq_j, map->p[j]->n_ineq, STATUS_ADJ_EQ)) { - /* Can't happen */ - /* BAD ADJ INEQ */ - } else if (any(ineq_i, map->p[i]->n_ineq, STATUS_ADJ_INEQ) || - any(ineq_j, map->p[j]->n_ineq, STATUS_ADJ_INEQ)) { - if (!any(eq_i, 2 * map->p[i]->n_eq, STATUS_CUT) && - !any(eq_j, 2 * map->p[j]->n_eq, STATUS_CUT)) - changed = check_adj_ineq(map, i, j, tabs, - ineq_i, ineq_j); - } else { - if (!any(eq_i, 2 * map->p[i]->n_eq, STATUS_CUT) && - !any(eq_j, 2 * map->p[j]->n_eq, STATUS_CUT)) - changed = check_facets(map, i, j, tabs, ineq_i, ineq_j); - if (!changed) - changed = check_wrap(map, i, j, tabs, - eq_i, ineq_i, eq_j, ineq_j); - } - -done: - free(eq_i); - free(eq_j); - free(ineq_i); - free(ineq_j); - return changed; -error: - free(eq_i); - free(eq_j); - free(ineq_i); - free(ineq_j); - return -1; -} - -static struct isl_map *coalesce(struct isl_map *map, struct isl_tab **tabs) -{ - int i, j; - - for (i = map->n - 2; i >= 0; --i) -restart: - for (j = i + 1; j < map->n; ++j) { - int changed; - changed = coalesce_pair(map, i, j, tabs); - if (changed < 0) - goto error; - if (changed) - goto restart; - } - return map; -error: - isl_map_free(map); - return NULL; -} - -/* For each pair of basic maps in the map, check if the union of the two - * can be represented by a single basic map. - * If so, replace the pair by the single basic map and start over. - */ -struct isl_map *isl_map_coalesce(struct isl_map *map) -{ - int i; - unsigned n; - struct isl_tab **tabs = NULL; - - if (!map) - return NULL; - - if (map->n <= 1) - return map; - - map = isl_map_align_divs(map); - - tabs = isl_calloc_array(map->ctx, struct isl_tab *, map->n); - if (!tabs) - goto error; - - n = map->n; - for (i = 0; i < map->n; ++i) { - tabs[i] = isl_tab_from_basic_map(map->p[i]); - if (!tabs[i]) - goto error; - if (!ISL_F_ISSET(map->p[i], ISL_BASIC_MAP_NO_IMPLICIT)) - if (isl_tab_detect_implicit_equalities(tabs[i]) < 0) - goto error; - if (!ISL_F_ISSET(map->p[i], ISL_BASIC_MAP_NO_REDUNDANT)) - if (isl_tab_detect_redundant(tabs[i]) < 0) - goto error; - } - for (i = map->n - 1; i >= 0; --i) - if (tabs[i]->empty) - drop(map, i, tabs); - - map = coalesce(map, tabs); - - if (map) - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_update_from_tab(map->p[i], - tabs[i]); - map->p[i] = isl_basic_map_finalize(map->p[i]); - if (!map->p[i]) - goto error; - ISL_F_SET(map->p[i], ISL_BASIC_MAP_NO_IMPLICIT); - ISL_F_SET(map->p[i], ISL_BASIC_MAP_NO_REDUNDANT); - } - - for (i = 0; i < n; ++i) - isl_tab_free(tabs[i]); - - free(tabs); - - return map; -error: - if (tabs) - for (i = 0; i < n; ++i) - isl_tab_free(tabs[i]); - free(tabs); - isl_map_free(map); - return NULL; -} - -/* For each pair of basic sets in the set, check if the union of the two - * can be represented by a single basic set. - * If so, replace the pair by the single basic set and start over. - */ -struct isl_set *isl_set_coalesce(struct isl_set *set) -{ - return (struct isl_set *)isl_map_coalesce((struct isl_map *)set); -} diff --git a/cloog-0.17.0/isl/isl_config.h.in b/cloog-0.17.0/isl/isl_config.h.in deleted file mode 100644 index 9184504..0000000 --- a/cloog-0.17.0/isl/isl_config.h.in +++ /dev/null @@ -1,118 +0,0 @@ -/* isl_config.h.in. Generated from configure.ac by autoheader. */ - -/* Clang installation prefix */ -#undef CLANG_PREFIX - -/* Define to Diagnostic for older versions of clang */ -#undef DiagnosticsEngine - -/* most gcc compilers know a function __attribute__((__warn_unused_result__)) - */ -#undef GCC_WARN_UNUSED_RESULT - -/* Define if Driver constructor takes CXXIsProduction argument */ -#undef HAVE_CXXISPRODUCTION - -/* Define to 1 if you have the declaration of `ffs', and to 0 if you don't. */ -#undef HAVE_DECL_FFS - -/* Define to 1 if you have the declaration of `mp_get_memory_functions', and - to 0 if you don't. */ -#undef HAVE_DECL_MP_GET_MEMORY_FUNCTIONS - -/* Define to 1 if you have the declaration of `__builtin_ffs', and to 0 if you - don't. */ -#undef HAVE_DECL___BUILTIN_FFS - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* define if your compiler has __attribute__ */ -#undef HAVE___ATTRIBUTE__ - -/* piplib is available */ -#undef ISL_PIPLIB - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#undef LT_OBJDIR - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* The size of `char', as computed by sizeof. */ -#undef SIZEOF_CHAR - -/* The size of `int', as computed by sizeof. */ -#undef SIZEOF_INT - -/* The size of `long', as computed by sizeof. */ -#undef SIZEOF_LONG - -/* The size of `short', as computed by sizeof. */ -#undef SIZEOF_SHORT - -/* The size of `void*', as computed by sizeof. */ -#undef SIZEOF_VOIDP - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define if Driver::BuildCompilation takes ArrayRef */ -#undef USE_ARRAYREF - -/* Version number of package */ -#undef VERSION - -/* Define to getHostTriple for older versions of clang */ -#undef getDefaultTargetTriple - -/* Define to getInstantiationLineNumber for older versions of clang */ -#undef getExpansionLineNumber - -#include diff --git a/cloog-0.17.0/isl/isl_config_post.h b/cloog-0.17.0/isl/isl_config_post.h deleted file mode 100644 index a9c23f4..0000000 --- a/cloog-0.17.0/isl/isl_config_post.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef HAVE___ATTRIBUTE__ -#define __attribute__(x) -#endif - -#if (HAVE_DECL_FFS==0) && (HAVE_DECL___BUILTIN_FFS==1) -# define ffs __builtin_ffs -#endif diff --git a/cloog-0.17.0/isl/isl_constraint.c b/cloog-0.17.0/isl/isl_constraint.c deleted file mode 100644 index 923cf59..0000000 --- a/cloog-0.17.0/isl/isl_constraint.c +++ /dev/null @@ -1,1170 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include - -isl_ctx *isl_constraint_get_ctx(__isl_keep isl_constraint *c) -{ - return c ? isl_local_space_get_ctx(c->ls) : NULL; -} - -static unsigned n(struct isl_constraint *c, enum isl_dim_type type) -{ - return isl_local_space_dim(c->ls, type); -} - -static unsigned offset(struct isl_constraint *c, enum isl_dim_type type) -{ - return isl_local_space_offset(c->ls, type); -} - -static unsigned basic_map_offset(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type) -{ - return type == isl_dim_div ? 1 + isl_space_dim(bmap->dim, isl_dim_all) - : 1 + isl_space_offset(bmap->dim, type); -} - -static unsigned basic_set_offset(struct isl_basic_set *bset, - enum isl_dim_type type) -{ - isl_space *dim = bset->dim; - switch (type) { - case isl_dim_param: return 1; - case isl_dim_in: return 1 + dim->nparam; - case isl_dim_out: return 1 + dim->nparam + dim->n_in; - case isl_dim_div: return 1 + dim->nparam + dim->n_in + dim->n_out; - default: return 0; - } -} - -__isl_give isl_constraint *isl_constraint_alloc_vec(int eq, - __isl_take isl_local_space *ls, __isl_take isl_vec *v) -{ - isl_constraint *constraint; - - if (!ls || !v) - goto error; - - constraint = isl_alloc_type(isl_vec_get_ctx(v), isl_constraint); - if (!constraint) - goto error; - - constraint->ref = 1; - constraint->eq = eq; - constraint->ls = ls; - constraint->v = v; - - return constraint; -error: - isl_local_space_free(ls); - isl_vec_free(v); - return NULL; -} - -__isl_give isl_constraint *isl_constraint_alloc(int eq, - __isl_take isl_local_space *ls) -{ - isl_ctx *ctx; - isl_vec *v; - - if (!ls) - return NULL; - - ctx = isl_local_space_get_ctx(ls); - v = isl_vec_alloc(ctx, 1 + isl_local_space_dim(ls, isl_dim_all)); - v = isl_vec_clr(v); - return isl_constraint_alloc_vec(eq, ls, v); -} - -struct isl_constraint *isl_basic_map_constraint(struct isl_basic_map *bmap, - isl_int **line) -{ - int eq; - isl_ctx *ctx; - isl_vec *v; - isl_local_space *ls = NULL; - isl_constraint *constraint; - - if (!bmap || !line) - goto error; - - eq = line >= bmap->eq; - - ctx = isl_basic_map_get_ctx(bmap); - ls = isl_basic_map_get_local_space(bmap); - v = isl_vec_alloc(ctx, 1 + isl_local_space_dim(ls, isl_dim_all)); - if (!v) - goto error; - isl_seq_cpy(v->el, line[0], v->size); - constraint = isl_constraint_alloc_vec(eq, ls, v); - - isl_basic_map_free(bmap); - return constraint; -error: - isl_local_space_free(ls); - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_constraint *isl_basic_set_constraint(struct isl_basic_set *bset, - isl_int **line) -{ - return isl_basic_map_constraint((struct isl_basic_map *)bset, line); -} - -__isl_give isl_constraint *isl_equality_alloc(__isl_take isl_local_space *ls) -{ - return isl_constraint_alloc(1, ls); -} - -__isl_give isl_constraint *isl_inequality_alloc(__isl_take isl_local_space *ls) -{ - return isl_constraint_alloc(0, ls); -} - -struct isl_constraint *isl_constraint_dup(struct isl_constraint *c) -{ - if (!c) - return NULL; - - return isl_constraint_alloc_vec(c->eq, isl_local_space_copy(c->ls), - isl_vec_copy(c->v)); -} - -struct isl_constraint *isl_constraint_cow(struct isl_constraint *c) -{ - if (!c) - return NULL; - - if (c->ref == 1) - return c; - c->ref--; - return isl_constraint_dup(c); -} - -struct isl_constraint *isl_constraint_copy(struct isl_constraint *constraint) -{ - if (!constraint) - return NULL; - - constraint->ref++; - return constraint; -} - -void *isl_constraint_free(struct isl_constraint *c) -{ - if (!c) - return NULL; - - if (--c->ref > 0) - return NULL; - - isl_local_space_free(c->ls); - isl_vec_free(c->v); - free(c); - - return NULL; -} - -int isl_basic_map_foreach_constraint(__isl_keep isl_basic_map *bmap, - int (*fn)(__isl_take isl_constraint *c, void *user), void *user) -{ - int i; - struct isl_constraint *c; - - if (!bmap) - return -1; - - isl_assert(bmap->ctx, ISL_F_ISSET(bmap, ISL_BASIC_MAP_FINAL), - return -1); - - for (i = 0; i < bmap->n_eq; ++i) { - c = isl_basic_map_constraint(isl_basic_map_copy(bmap), - &bmap->eq[i]); - if (!c) - return -1; - if (fn(c, user) < 0) - return -1; - } - - for (i = 0; i < bmap->n_ineq; ++i) { - c = isl_basic_map_constraint(isl_basic_map_copy(bmap), - &bmap->ineq[i]); - if (!c) - return -1; - if (fn(c, user) < 0) - return -1; - } - - return 0; -} - -int isl_basic_set_foreach_constraint(__isl_keep isl_basic_set *bset, - int (*fn)(__isl_take isl_constraint *c, void *user), void *user) -{ - return isl_basic_map_foreach_constraint((isl_basic_map *)bset, fn, user); -} - -int isl_constraint_is_equal(struct isl_constraint *constraint1, - struct isl_constraint *constraint2) -{ - int equal; - - if (!constraint1 || !constraint2) - return 0; - if (constraint1->eq != constraint2->eq) - return 0; - equal = isl_local_space_is_equal(constraint1->ls, constraint2->ls); - if (equal < 0 || !equal) - return equal; - return isl_vec_is_equal(constraint1->v, constraint2->v); -} - -struct isl_basic_map *isl_basic_map_add_constraint( - struct isl_basic_map *bmap, struct isl_constraint *constraint) -{ - isl_ctx *ctx; - isl_space *dim; - int equal_space; - - if (!bmap || !constraint) - goto error; - - ctx = isl_constraint_get_ctx(constraint); - dim = isl_constraint_get_space(constraint); - equal_space = isl_space_is_equal(bmap->dim, dim); - isl_space_free(dim); - isl_assert(ctx, equal_space, goto error); - - bmap = isl_basic_map_intersect(bmap, - isl_basic_map_from_constraint(constraint)); - return bmap; -error: - isl_basic_map_free(bmap); - isl_constraint_free(constraint); - return NULL; -} - -struct isl_basic_set *isl_basic_set_add_constraint( - struct isl_basic_set *bset, struct isl_constraint *constraint) -{ - return (struct isl_basic_set *) - isl_basic_map_add_constraint((struct isl_basic_map *)bset, - constraint); -} - -__isl_give isl_map *isl_map_add_constraint(__isl_take isl_map *map, - __isl_take isl_constraint *constraint) -{ - isl_basic_map *bmap; - - bmap = isl_basic_map_from_constraint(constraint); - map = isl_map_intersect(map, isl_map_from_basic_map(bmap)); - - return map; -} - -__isl_give isl_set *isl_set_add_constraint(__isl_take isl_set *set, - __isl_take isl_constraint *constraint) -{ - return isl_map_add_constraint(set, constraint); -} - -__isl_give isl_space *isl_constraint_get_space( - __isl_keep isl_constraint *constraint) -{ - return constraint ? isl_local_space_get_space(constraint->ls) : NULL; -} - -int isl_constraint_dim(struct isl_constraint *constraint, - enum isl_dim_type type) -{ - if (!constraint) - return -1; - return n(constraint, type); -} - -int isl_constraint_involves_dims(__isl_keep isl_constraint *constraint, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - isl_ctx *ctx; - int *active = NULL; - int involves = 0; - - if (!constraint) - return -1; - if (n == 0) - return 0; - - ctx = isl_constraint_get_ctx(constraint); - if (first + n > isl_constraint_dim(constraint, type)) - isl_die(ctx, isl_error_invalid, - "range out of bounds", return -1); - - active = isl_local_space_get_active(constraint->ls, - constraint->v->el + 1); - if (!active) - goto error; - - first += isl_local_space_offset(constraint->ls, type) - 1; - for (i = 0; i < n; ++i) - if (active[first + i]) { - involves = 1; - break; - } - - free(active); - - return involves; -error: - free(active); - return -1; -} - -const char *isl_constraint_get_dim_name(__isl_keep isl_constraint *constraint, - enum isl_dim_type type, unsigned pos) -{ - return constraint ? - isl_local_space_get_dim_name(constraint->ls, type, pos) : NULL; -} - -void isl_constraint_get_constant(struct isl_constraint *constraint, isl_int *v) -{ - if (!constraint) - return; - isl_int_set(*v, constraint->v->el[0]); -} - -void isl_constraint_get_coefficient(struct isl_constraint *constraint, - enum isl_dim_type type, int pos, isl_int *v) -{ - if (!constraint) - return; - - if (pos >= isl_local_space_dim(constraint->ls, type)) - isl_die(constraint->v->ctx, isl_error_invalid, - "position out of bounds", return); - - pos += isl_local_space_offset(constraint->ls, type); - isl_int_set(*v, constraint->v->el[pos]); -} - -__isl_give isl_aff *isl_constraint_get_div(__isl_keep isl_constraint *constraint, - int pos) -{ - if (!constraint) - return NULL; - - return isl_local_space_get_div(constraint->ls, pos); -} - -__isl_give isl_constraint *isl_constraint_set_constant( - __isl_take isl_constraint *constraint, isl_int v) -{ - constraint = isl_constraint_cow(constraint); - if (!constraint) - return NULL; - - constraint->v = isl_vec_cow(constraint->v); - if (!constraint->v) - return isl_constraint_free(constraint); - - isl_int_set(constraint->v->el[0], v); - return constraint; -} - -__isl_give isl_constraint *isl_constraint_set_constant_si( - __isl_take isl_constraint *constraint, int v) -{ - constraint = isl_constraint_cow(constraint); - if (!constraint) - return NULL; - - constraint->v = isl_vec_cow(constraint->v); - if (!constraint->v) - return isl_constraint_free(constraint); - - isl_int_set_si(constraint->v->el[0], v); - return constraint; -} - -__isl_give isl_constraint *isl_constraint_set_coefficient( - __isl_take isl_constraint *constraint, - enum isl_dim_type type, int pos, isl_int v) -{ - constraint = isl_constraint_cow(constraint); - if (!constraint) - return NULL; - - if (pos >= isl_local_space_dim(constraint->ls, type)) - isl_die(constraint->v->ctx, isl_error_invalid, - "position out of bounds", - return isl_constraint_free(constraint)); - - constraint = isl_constraint_cow(constraint); - if (!constraint) - return NULL; - - constraint->v = isl_vec_cow(constraint->v); - if (!constraint->v) - return isl_constraint_free(constraint); - - pos += isl_local_space_offset(constraint->ls, type); - isl_int_set(constraint->v->el[pos], v); - - return constraint; -} - -__isl_give isl_constraint *isl_constraint_set_coefficient_si( - __isl_take isl_constraint *constraint, - enum isl_dim_type type, int pos, int v) -{ - constraint = isl_constraint_cow(constraint); - if (!constraint) - return NULL; - - if (pos >= isl_local_space_dim(constraint->ls, type)) - isl_die(constraint->v->ctx, isl_error_invalid, - "position out of bounds", - return isl_constraint_free(constraint)); - - constraint = isl_constraint_cow(constraint); - if (!constraint) - return NULL; - - constraint->v = isl_vec_cow(constraint->v); - if (!constraint->v) - return isl_constraint_free(constraint); - - pos += isl_local_space_offset(constraint->ls, type); - isl_int_set_si(constraint->v->el[pos], v); - - return constraint; -} - -/* Drop any constraint from "bset" that is identical to "constraint". - * In particular, this means that the local spaces of "bset" and - * "constraint" need to be the same. - * - * Since the given constraint may actually be a pointer into the bset, - * we have to be careful not to reorder the constraints as the user - * may be holding on to other constraints from the same bset. - * This should be cleaned up when the internal representation of - * isl_constraint is changed to use isl_aff. - */ -__isl_give isl_basic_set *isl_basic_set_drop_constraint( - __isl_take isl_basic_set *bset, __isl_take isl_constraint *constraint) -{ - int i; - unsigned n; - isl_int **row; - unsigned total; - isl_local_space *ls1; - int equal; - - if (!bset || !constraint) - goto error; - - ls1 = isl_basic_set_get_local_space(bset); - equal = isl_local_space_is_equal(ls1, constraint->ls); - isl_local_space_free(ls1); - if (equal < 0) - goto error; - if (!equal) { - isl_constraint_free(constraint); - return bset; - } - - if (isl_constraint_is_equality(constraint)) { - n = bset->n_eq; - row = bset->eq; - } else { - n = bset->n_ineq; - row = bset->ineq; - } - - total = isl_constraint_dim(constraint, isl_dim_all); - for (i = 0; i < n; ++i) - if (isl_seq_eq(row[i], constraint->v->el, 1 + total)) - isl_seq_clr(row[i], 1 + total); - - isl_constraint_free(constraint); - return bset; -error: - isl_constraint_free(constraint); - isl_basic_set_free(bset); - return NULL; -} - -struct isl_constraint *isl_constraint_negate(struct isl_constraint *constraint) -{ - isl_ctx *ctx; - - constraint = isl_constraint_cow(constraint); - if (!constraint) - return NULL; - - ctx = isl_constraint_get_ctx(constraint); - if (isl_constraint_is_equality(constraint)) - isl_die(ctx, isl_error_invalid, "cannot negate equality", - return isl_constraint_free(constraint)); - constraint->v = isl_vec_neg(constraint->v); - constraint->v = isl_vec_cow(constraint->v); - if (!constraint->v) - return isl_constraint_free(constraint); - isl_int_sub_ui(constraint->v->el[0], constraint->v->el[0], 1); - return constraint; -} - -int isl_constraint_is_equality(struct isl_constraint *constraint) -{ - if (!constraint) - return -1; - return constraint->eq; -} - -int isl_constraint_is_div_constraint(__isl_keep isl_constraint *constraint) -{ - int i; - int n_div; - - if (!constraint) - return -1; - if (isl_constraint_is_equality(constraint)) - return 0; - n_div = isl_constraint_dim(constraint, isl_dim_div); - for (i = 0; i < n_div; ++i) { - if (isl_local_space_is_div_constraint(constraint->ls, - constraint->v->el, i)) - return 1; - } - - return 0; -} - -/* We manually set ISL_BASIC_SET_FINAL instead of calling - * isl_basic_map_finalize because we want to keep the position - * of the divs and we therefore do not want to throw away redundant divs. - * This is arguably a bit fragile. - */ -__isl_give isl_basic_map *isl_basic_map_from_constraint( - __isl_take isl_constraint *constraint) -{ - int k; - isl_local_space *ls; - struct isl_basic_map *bmap; - isl_int *c; - unsigned total; - - if (!constraint) - return NULL; - - ls = isl_local_space_copy(constraint->ls); - bmap = isl_basic_map_from_local_space(ls); - bmap = isl_basic_map_extend_constraints(bmap, 1, 1); - if (isl_constraint_is_equality(constraint)) { - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - c = bmap->eq[k]; - } - else { - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - c = bmap->ineq[k]; - } - total = isl_basic_map_total_dim(bmap); - isl_seq_cpy(c, constraint->v->el, 1 + total); - isl_constraint_free(constraint); - if (bmap) - ISL_F_SET(bmap, ISL_BASIC_SET_FINAL); - return bmap; -error: - isl_constraint_free(constraint); - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_from_constraint( - struct isl_constraint *constraint) -{ - if (!constraint) - return NULL; - - if (isl_constraint_dim(constraint, isl_dim_in) != 0) - isl_die(isl_constraint_get_ctx(constraint), isl_error_invalid, - "not a set constraint", - return isl_constraint_free(constraint)); - return (isl_basic_set *)isl_basic_map_from_constraint(constraint); -} - -int isl_basic_map_has_defining_equality( - __isl_keep isl_basic_map *bmap, enum isl_dim_type type, int pos, - __isl_give isl_constraint **c) -{ - int i; - unsigned offset; - unsigned total; - - if (!bmap) - return -1; - offset = basic_map_offset(bmap, type); - total = isl_basic_map_total_dim(bmap); - isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), return -1); - for (i = 0; i < bmap->n_eq; ++i) - if (!isl_int_is_zero(bmap->eq[i][offset + pos]) && - isl_seq_first_non_zero(bmap->eq[i]+offset+pos+1, - 1+total-offset-pos-1) == -1) { - *c = isl_basic_map_constraint(isl_basic_map_copy(bmap), - &bmap->eq[i]); - return 1; - } - return 0; -} - -int isl_basic_set_has_defining_equality( - __isl_keep isl_basic_set *bset, enum isl_dim_type type, int pos, - __isl_give isl_constraint **c) -{ - return isl_basic_map_has_defining_equality((isl_basic_map *)bset, - type, pos, c); -} - -int isl_basic_set_has_defining_inequalities( - struct isl_basic_set *bset, enum isl_dim_type type, int pos, - struct isl_constraint **lower, - struct isl_constraint **upper) -{ - int i, j; - unsigned offset; - unsigned total; - isl_int m; - isl_int **lower_line, **upper_line; - - if (!bset) - return -1; - offset = basic_set_offset(bset, type); - total = isl_basic_set_total_dim(bset); - isl_assert(bset->ctx, pos < isl_basic_set_dim(bset, type), return -1); - isl_int_init(m); - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_int_is_zero(bset->ineq[i][offset + pos])) - continue; - if (isl_int_is_one(bset->ineq[i][offset + pos])) - continue; - if (isl_int_is_negone(bset->ineq[i][offset + pos])) - continue; - if (isl_seq_first_non_zero(bset->ineq[i]+offset+pos+1, - 1+total-offset-pos-1) != -1) - continue; - for (j = i + 1; j < bset->n_ineq; ++j) { - if (!isl_seq_is_neg(bset->ineq[i]+1, bset->ineq[j]+1, - total)) - continue; - isl_int_add(m, bset->ineq[i][0], bset->ineq[j][0]); - if (isl_int_abs_ge(m, bset->ineq[i][offset+pos])) - continue; - - if (isl_int_is_pos(bset->ineq[i][offset+pos])) { - lower_line = &bset->ineq[i]; - upper_line = &bset->ineq[j]; - } else { - lower_line = &bset->ineq[j]; - upper_line = &bset->ineq[i]; - } - *lower = isl_basic_set_constraint( - isl_basic_set_copy(bset), lower_line); - *upper = isl_basic_set_constraint( - isl_basic_set_copy(bset), upper_line); - isl_int_clear(m); - return 1; - } - } - *lower = NULL; - *upper = NULL; - isl_int_clear(m); - return 0; -} - -/* Given two constraints "a" and "b" on the variable at position "abs_pos" - * (in "a" and "b"), add a constraint to "bset" that ensures that the - * bound implied by "a" is (strictly) larger than the bound implied by "b". - * - * If both constraints imply lower bounds, then this means that "a" is - * active in the result. - * If both constraints imply upper bounds, then this means that "b" is - * active in the result. - */ -static __isl_give isl_basic_set *add_larger_bound_constraint( - __isl_take isl_basic_set *bset, isl_int *a, isl_int *b, - unsigned abs_pos, int strict) -{ - int k; - isl_int t; - unsigned total; - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - - total = isl_basic_set_dim(bset, isl_dim_all); - - isl_int_init(t); - isl_int_neg(t, b[1 + abs_pos]); - - isl_seq_combine(bset->ineq[k], t, a, a[1 + abs_pos], b, 1 + abs_pos); - isl_seq_combine(bset->ineq[k] + 1 + abs_pos, - t, a + 1 + abs_pos + 1, a[1 + abs_pos], b + 1 + abs_pos + 1, - total - abs_pos); - - if (strict) - isl_int_sub_ui(bset->ineq[k][0], bset->ineq[k][0], 1); - - isl_int_clear(t); - - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Add constraints to "context" that ensure that "u" is the smallest - * (and therefore active) upper bound on "abs_pos" in "bset" and return - * the resulting basic set. - */ -static __isl_give isl_basic_set *set_smallest_upper_bound( - __isl_keep isl_basic_set *context, - __isl_keep isl_basic_set *bset, unsigned abs_pos, int n_upper, int u) -{ - int j; - - context = isl_basic_set_copy(context); - context = isl_basic_set_cow(context); - - context = isl_basic_set_extend_constraints(context, 0, n_upper - 1); - - for (j = 0; j < bset->n_ineq; ++j) { - if (j == u) - continue; - if (!isl_int_is_neg(bset->ineq[j][1 + abs_pos])) - continue; - context = add_larger_bound_constraint(context, - bset->ineq[j], bset->ineq[u], abs_pos, j > u); - } - - context = isl_basic_set_simplify(context); - context = isl_basic_set_finalize(context); - - return context; -} - -/* Add constraints to "context" that ensure that "u" is the largest - * (and therefore active) upper bound on "abs_pos" in "bset" and return - * the resulting basic set. - */ -static __isl_give isl_basic_set *set_largest_lower_bound( - __isl_keep isl_basic_set *context, - __isl_keep isl_basic_set *bset, unsigned abs_pos, int n_lower, int l) -{ - int j; - - context = isl_basic_set_copy(context); - context = isl_basic_set_cow(context); - - context = isl_basic_set_extend_constraints(context, 0, n_lower - 1); - - for (j = 0; j < bset->n_ineq; ++j) { - if (j == l) - continue; - if (!isl_int_is_pos(bset->ineq[j][1 + abs_pos])) - continue; - context = add_larger_bound_constraint(context, - bset->ineq[l], bset->ineq[j], abs_pos, j > l); - } - - context = isl_basic_set_simplify(context); - context = isl_basic_set_finalize(context); - - return context; -} - -static int foreach_upper_bound(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned abs_pos, - __isl_take isl_basic_set *context, int n_upper, - int (*fn)(__isl_take isl_constraint *lower, - __isl_take isl_constraint *upper, - __isl_take isl_basic_set *bset, void *user), void *user) -{ - isl_basic_set *context_i; - isl_constraint *upper = NULL; - int i; - - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_int_is_zero(bset->ineq[i][1 + abs_pos])) - continue; - - context_i = set_smallest_upper_bound(context, bset, - abs_pos, n_upper, i); - if (isl_basic_set_is_empty(context_i)) { - isl_basic_set_free(context_i); - continue; - } - upper = isl_basic_set_constraint(isl_basic_set_copy(bset), - &bset->ineq[i]); - if (!upper || !context_i) - goto error; - if (fn(NULL, upper, context_i, user) < 0) - break; - } - - isl_basic_set_free(context); - - if (i < bset->n_ineq) - return -1; - - return 0; -error: - isl_constraint_free(upper); - isl_basic_set_free(context_i); - isl_basic_set_free(context); - return -1; -} - -static int foreach_lower_bound(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned abs_pos, - __isl_take isl_basic_set *context, int n_lower, - int (*fn)(__isl_take isl_constraint *lower, - __isl_take isl_constraint *upper, - __isl_take isl_basic_set *bset, void *user), void *user) -{ - isl_basic_set *context_i; - isl_constraint *lower = NULL; - int i; - - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_int_is_zero(bset->ineq[i][1 + abs_pos])) - continue; - - context_i = set_largest_lower_bound(context, bset, - abs_pos, n_lower, i); - if (isl_basic_set_is_empty(context_i)) { - isl_basic_set_free(context_i); - continue; - } - lower = isl_basic_set_constraint(isl_basic_set_copy(bset), - &bset->ineq[i]); - if (!lower || !context_i) - goto error; - if (fn(lower, NULL, context_i, user) < 0) - break; - } - - isl_basic_set_free(context); - - if (i < bset->n_ineq) - return -1; - - return 0; -error: - isl_constraint_free(lower); - isl_basic_set_free(context_i); - isl_basic_set_free(context); - return -1; -} - -static int foreach_bound_pair(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned abs_pos, - __isl_take isl_basic_set *context, int n_lower, int n_upper, - int (*fn)(__isl_take isl_constraint *lower, - __isl_take isl_constraint *upper, - __isl_take isl_basic_set *bset, void *user), void *user) -{ - isl_basic_set *context_i, *context_j; - isl_constraint *lower = NULL; - isl_constraint *upper = NULL; - int i, j; - - for (i = 0; i < bset->n_ineq; ++i) { - if (!isl_int_is_pos(bset->ineq[i][1 + abs_pos])) - continue; - - context_i = set_largest_lower_bound(context, bset, - abs_pos, n_lower, i); - if (isl_basic_set_is_empty(context_i)) { - isl_basic_set_free(context_i); - continue; - } - - for (j = 0; j < bset->n_ineq; ++j) { - if (!isl_int_is_neg(bset->ineq[j][1 + abs_pos])) - continue; - - context_j = set_smallest_upper_bound(context_i, bset, - abs_pos, n_upper, j); - context_j = isl_basic_set_extend_constraints(context_j, - 0, 1); - context_j = add_larger_bound_constraint(context_j, - bset->ineq[i], bset->ineq[j], abs_pos, 0); - context_j = isl_basic_set_simplify(context_j); - context_j = isl_basic_set_finalize(context_j); - if (isl_basic_set_is_empty(context_j)) { - isl_basic_set_free(context_j); - continue; - } - lower = isl_basic_set_constraint(isl_basic_set_copy(bset), - &bset->ineq[i]); - upper = isl_basic_set_constraint(isl_basic_set_copy(bset), - &bset->ineq[j]); - if (!lower || !upper || !context_j) - goto error; - if (fn(lower, upper, context_j, user) < 0) - break; - } - - isl_basic_set_free(context_i); - - if (j < bset->n_ineq) - break; - } - - isl_basic_set_free(context); - - if (i < bset->n_ineq) - return -1; - - return 0; -error: - isl_constraint_free(lower); - isl_constraint_free(upper); - isl_basic_set_free(context_i); - isl_basic_set_free(context_j); - isl_basic_set_free(context); - return -1; -} - -/* For each pair of lower and upper bounds on the variable "pos" - * of type "type", call "fn" with these lower and upper bounds and the - * set of constraints on the remaining variables where these bounds - * are active, i.e., (stricly) larger/smaller than the other lower/upper bounds. - * - * If the designated variable is equal to an affine combination of the - * other variables then fn is called with both lower and upper - * set to the corresponding equality. - * - * If there is no lower (or upper) bound, then NULL is passed - * as the corresponding bound. - * - * We first check if the variable is involved in any equality. - * If not, we count the number of lower and upper bounds and - * act accordingly. - */ -int isl_basic_set_foreach_bound_pair(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, - int (*fn)(__isl_take isl_constraint *lower, - __isl_take isl_constraint *upper, - __isl_take isl_basic_set *bset, void *user), void *user) -{ - int i; - isl_constraint *lower = NULL; - isl_constraint *upper = NULL; - isl_basic_set *context = NULL; - unsigned abs_pos; - int n_lower, n_upper; - - if (!bset) - return -1; - isl_assert(bset->ctx, pos < isl_basic_set_dim(bset, type), return -1); - isl_assert(bset->ctx, type == isl_dim_param || type == isl_dim_set, - return -1); - - abs_pos = pos; - if (type == isl_dim_set) - abs_pos += isl_basic_set_dim(bset, isl_dim_param); - - for (i = 0; i < bset->n_eq; ++i) { - if (isl_int_is_zero(bset->eq[i][1 + abs_pos])) - continue; - - lower = isl_basic_set_constraint(isl_basic_set_copy(bset), - &bset->eq[i]); - upper = isl_constraint_copy(lower); - context = isl_basic_set_remove_dims(isl_basic_set_copy(bset), - type, pos, 1); - if (!lower || !upper || !context) - goto error; - return fn(lower, upper, context, user); - } - - n_lower = 0; - n_upper = 0; - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_int_is_pos(bset->ineq[i][1 + abs_pos])) - n_lower++; - else if (isl_int_is_neg(bset->ineq[i][1 + abs_pos])) - n_upper++; - } - - context = isl_basic_set_copy(bset); - context = isl_basic_set_cow(context); - if (!context) - goto error; - for (i = context->n_ineq - 1; i >= 0; --i) - if (!isl_int_is_zero(context->ineq[i][1 + abs_pos])) - isl_basic_set_drop_inequality(context, i); - - context = isl_basic_set_drop(context, type, pos, 1); - if (!n_lower && !n_upper) - return fn(NULL, NULL, context, user); - if (!n_lower) - return foreach_upper_bound(bset, type, abs_pos, context, n_upper, - fn, user); - if (!n_upper) - return foreach_lower_bound(bset, type, abs_pos, context, n_lower, - fn, user); - return foreach_bound_pair(bset, type, abs_pos, context, n_lower, n_upper, - fn, user); -error: - isl_constraint_free(lower); - isl_constraint_free(upper); - isl_basic_set_free(context); - return -1; -} - -__isl_give isl_aff *isl_constraint_get_bound( - __isl_keep isl_constraint *constraint, enum isl_dim_type type, int pos) -{ - isl_aff *aff; - isl_ctx *ctx; - - if (!constraint) - return NULL; - ctx = isl_constraint_get_ctx(constraint); - if (pos >= isl_constraint_dim(constraint, type)) - isl_die(ctx, isl_error_invalid, - "index out of bounds", return NULL); - if (isl_constraint_dim(constraint, isl_dim_in) != 0) - isl_die(ctx, isl_error_invalid, - "not a set constraint", return NULL); - - pos += offset(constraint, type); - if (isl_int_is_zero(constraint->v->el[pos])) - isl_die(ctx, isl_error_invalid, - "constraint does not define a bound on given dimension", - return NULL); - - aff = isl_aff_alloc(isl_local_space_copy(constraint->ls)); - if (!aff) - return NULL; - - if (isl_int_is_neg(constraint->v->el[pos])) - isl_seq_cpy(aff->v->el + 1, constraint->v->el, aff->v->size - 1); - else - isl_seq_neg(aff->v->el + 1, constraint->v->el, aff->v->size - 1); - isl_int_set_si(aff->v->el[1 + pos], 0); - isl_int_abs(aff->v->el[0], constraint->v->el[pos]); - - return aff; -} - -/* For an inequality constraint - * - * f >= 0 - * - * or an equality constraint - * - * f = 0 - * - * return the affine expression f. - */ -__isl_give isl_aff *isl_constraint_get_aff( - __isl_keep isl_constraint *constraint) -{ - isl_aff *aff; - - if (!constraint) - return NULL; - - aff = isl_aff_alloc(isl_local_space_copy(constraint->ls)); - if (!aff) - return NULL; - - isl_seq_cpy(aff->v->el + 1, constraint->v->el, aff->v->size - 1); - isl_int_set_si(aff->v->el[0], 1); - - return aff; -} - -/* Construct an equality constraint equating the given affine expression - * to zero. - */ -__isl_give isl_constraint *isl_equality_from_aff(__isl_take isl_aff *aff) -{ - int k; - isl_local_space *ls; - isl_basic_set *bset; - - if (!aff) - return NULL; - - ls = isl_aff_get_domain_local_space(aff); - bset = isl_basic_set_from_local_space(ls); - bset = isl_basic_set_extend_constraints(bset, 1, 0); - k = isl_basic_set_alloc_equality(bset); - if (k < 0) - goto error; - - isl_seq_cpy(bset->eq[k], aff->v->el + 1, aff->v->size - 1); - isl_aff_free(aff); - - return isl_basic_set_constraint(bset, &bset->eq[k]); -error: - isl_aff_free(aff); - isl_basic_set_free(bset); - return NULL; -} - -/* Construct an inequality constraint enforcing the given affine expression - * to be non-negative. - */ -__isl_give isl_constraint *isl_inequality_from_aff(__isl_take isl_aff *aff) -{ - int k; - isl_local_space *ls; - isl_basic_set *bset; - - if (!aff) - return NULL; - - ls = isl_aff_get_domain_local_space(aff); - bset = isl_basic_set_from_local_space(ls); - bset = isl_basic_set_extend_constraints(bset, 0, 1); - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - - isl_seq_cpy(bset->ineq[k], aff->v->el + 1, aff->v->size - 1); - isl_aff_free(aff); - - return isl_basic_set_constraint(bset, &bset->ineq[k]); -error: - isl_aff_free(aff); - isl_basic_set_free(bset); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_constraint_private.h b/cloog-0.17.0/isl/isl_constraint_private.h deleted file mode 100644 index 8314325..0000000 --- a/cloog-0.17.0/isl/isl_constraint_private.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef ISL_CONSTRAINT_PRIVATE_H -#define ISL_CONSTRAINT_PRIVATE_H - -#include -#include - -struct isl_constraint { - int ref; - - int eq; - isl_local_space *ls; - isl_vec *v; -}; - -struct isl_constraint *isl_basic_set_constraint(struct isl_basic_set *bset, - isl_int **line); - -#endif diff --git a/cloog-0.17.0/isl/isl_convex_hull.c b/cloog-0.17.0/isl/isl_convex_hull.c deleted file mode 100644 index a6e26b8..0000000 --- a/cloog-0.17.0/isl/isl_convex_hull.c +++ /dev/null @@ -1,2432 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "isl_equalities.h" -#include "isl_tab.h" - -static struct isl_basic_set *uset_convex_hull_wrap_bounded(struct isl_set *set); - -/* Return 1 if constraint c is redundant with respect to the constraints - * in bmap. If c is a lower [upper] bound in some variable and bmap - * does not have a lower [upper] bound in that variable, then c cannot - * be redundant and we do not need solve any lp. - */ -int isl_basic_map_constraint_is_redundant(struct isl_basic_map **bmap, - isl_int *c, isl_int *opt_n, isl_int *opt_d) -{ - enum isl_lp_result res; - unsigned total; - int i, j; - - if (!bmap) - return -1; - - total = isl_basic_map_total_dim(*bmap); - for (i = 0; i < total; ++i) { - int sign; - if (isl_int_is_zero(c[1+i])) - continue; - sign = isl_int_sgn(c[1+i]); - for (j = 0; j < (*bmap)->n_ineq; ++j) - if (sign == isl_int_sgn((*bmap)->ineq[j][1+i])) - break; - if (j == (*bmap)->n_ineq) - break; - } - if (i < total) - return 0; - - res = isl_basic_map_solve_lp(*bmap, 0, c, (*bmap)->ctx->one, - opt_n, opt_d, NULL); - if (res == isl_lp_unbounded) - return 0; - if (res == isl_lp_error) - return -1; - if (res == isl_lp_empty) { - *bmap = isl_basic_map_set_to_empty(*bmap); - return 0; - } - return !isl_int_is_neg(*opt_n); -} - -int isl_basic_set_constraint_is_redundant(struct isl_basic_set **bset, - isl_int *c, isl_int *opt_n, isl_int *opt_d) -{ - return isl_basic_map_constraint_is_redundant( - (struct isl_basic_map **)bset, c, opt_n, opt_d); -} - -/* Remove redundant - * constraints. If the minimal value along the normal of a constraint - * is the same if the constraint is removed, then the constraint is redundant. - * - * Alternatively, we could have intersected the basic map with the - * corresponding equality and the checked if the dimension was that - * of a facet. - */ -__isl_give isl_basic_map *isl_basic_map_remove_redundancies( - __isl_take isl_basic_map *bmap) -{ - struct isl_tab *tab; - - if (!bmap) - return NULL; - - bmap = isl_basic_map_gauss(bmap, NULL); - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) - return bmap; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_NO_REDUNDANT)) - return bmap; - if (bmap->n_ineq <= 1) - return bmap; - - tab = isl_tab_from_basic_map(bmap); - if (isl_tab_detect_implicit_equalities(tab) < 0) - goto error; - if (isl_tab_detect_redundant(tab) < 0) - goto error; - bmap = isl_basic_map_update_from_tab(bmap, tab); - isl_tab_free(tab); - ISL_F_SET(bmap, ISL_BASIC_MAP_NO_IMPLICIT); - ISL_F_SET(bmap, ISL_BASIC_MAP_NO_REDUNDANT); - return bmap; -error: - isl_tab_free(tab); - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_remove_redundancies( - __isl_take isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_remove_redundancies((struct isl_basic_map *)bset); -} - -/* Remove redundant constraints in each of the basic maps. - */ -__isl_give isl_map *isl_map_remove_redundancies(__isl_take isl_map *map) -{ - return isl_map_inline_foreach_basic_map(map, - &isl_basic_map_remove_redundancies); -} - -__isl_give isl_set *isl_set_remove_redundancies(__isl_take isl_set *set) -{ - return isl_map_remove_redundancies(set); -} - -/* Check if the set set is bound in the direction of the affine - * constraint c and if so, set the constant term such that the - * resulting constraint is a bounding constraint for the set. - */ -static int uset_is_bound(struct isl_set *set, isl_int *c, unsigned len) -{ - int first; - int j; - isl_int opt; - isl_int opt_denom; - - isl_int_init(opt); - isl_int_init(opt_denom); - first = 1; - for (j = 0; j < set->n; ++j) { - enum isl_lp_result res; - - if (ISL_F_ISSET(set->p[j], ISL_BASIC_SET_EMPTY)) - continue; - - res = isl_basic_set_solve_lp(set->p[j], - 0, c, set->ctx->one, &opt, &opt_denom, NULL); - if (res == isl_lp_unbounded) - break; - if (res == isl_lp_error) - goto error; - if (res == isl_lp_empty) { - set->p[j] = isl_basic_set_set_to_empty(set->p[j]); - if (!set->p[j]) - goto error; - continue; - } - if (first || isl_int_is_neg(opt)) { - if (!isl_int_is_one(opt_denom)) - isl_seq_scale(c, c, opt_denom, len); - isl_int_sub(c[0], c[0], opt); - } - first = 0; - } - isl_int_clear(opt); - isl_int_clear(opt_denom); - return j >= set->n; -error: - isl_int_clear(opt); - isl_int_clear(opt_denom); - return -1; -} - -__isl_give isl_basic_map *isl_basic_map_set_rational( - __isl_take isl_basic_set *bmap) -{ - if (!bmap) - return NULL; - - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL)) - return bmap; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - ISL_F_SET(bmap, ISL_BASIC_MAP_RATIONAL); - - return isl_basic_map_finalize(bmap); -} - -__isl_give isl_basic_set *isl_basic_set_set_rational( - __isl_take isl_basic_set *bset) -{ - return isl_basic_map_set_rational(bset); -} - -__isl_give isl_map *isl_map_set_rational(__isl_take isl_map *map) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_set_rational(map->p[i]); - if (!map->p[i]) - goto error; - } - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_set_rational(__isl_take isl_set *set) -{ - return isl_map_set_rational(set); -} - -static struct isl_basic_set *isl_basic_set_add_equality( - struct isl_basic_set *bset, isl_int *c) -{ - int i; - unsigned dim; - - if (!bset) - return NULL; - - if (ISL_F_ISSET(bset, ISL_BASIC_SET_EMPTY)) - return bset; - - isl_assert(bset->ctx, isl_basic_set_n_param(bset) == 0, goto error); - isl_assert(bset->ctx, bset->n_div == 0, goto error); - dim = isl_basic_set_n_dim(bset); - bset = isl_basic_set_cow(bset); - bset = isl_basic_set_extend(bset, 0, dim, 0, 1, 0); - i = isl_basic_set_alloc_equality(bset); - if (i < 0) - goto error; - isl_seq_cpy(bset->eq[i], c, 1 + dim); - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -static struct isl_set *isl_set_add_basic_set_equality(struct isl_set *set, isl_int *c) -{ - int i; - - set = isl_set_cow(set); - if (!set) - return NULL; - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_add_equality(set->p[i], c); - if (!set->p[i]) - goto error; - } - return set; -error: - isl_set_free(set); - return NULL; -} - -/* Given a union of basic sets, construct the constraints for wrapping - * a facet around one of its ridges. - * In particular, if each of n the d-dimensional basic sets i in "set" - * contains the origin, satisfies the constraints x_1 >= 0 and x_2 >= 0 - * and is defined by the constraints - * [ 1 ] - * A_i [ x ] >= 0 - * - * then the resulting set is of dimension n*(1+d) and has as constraints - * - * [ a_i ] - * A_i [ x_i ] >= 0 - * - * a_i >= 0 - * - * \sum_i x_{i,1} = 1 - */ -static struct isl_basic_set *wrap_constraints(struct isl_set *set) -{ - struct isl_basic_set *lp; - unsigned n_eq; - unsigned n_ineq; - int i, j, k; - unsigned dim, lp_dim; - - if (!set) - return NULL; - - dim = 1 + isl_set_n_dim(set); - n_eq = 1; - n_ineq = set->n; - for (i = 0; i < set->n; ++i) { - n_eq += set->p[i]->n_eq; - n_ineq += set->p[i]->n_ineq; - } - lp = isl_basic_set_alloc(set->ctx, 0, dim * set->n, 0, n_eq, n_ineq); - lp = isl_basic_set_set_rational(lp); - if (!lp) - return NULL; - lp_dim = isl_basic_set_n_dim(lp); - k = isl_basic_set_alloc_equality(lp); - isl_int_set_si(lp->eq[k][0], -1); - for (i = 0; i < set->n; ++i) { - isl_int_set_si(lp->eq[k][1+dim*i], 0); - isl_int_set_si(lp->eq[k][1+dim*i+1], 1); - isl_seq_clr(lp->eq[k]+1+dim*i+2, dim-2); - } - for (i = 0; i < set->n; ++i) { - k = isl_basic_set_alloc_inequality(lp); - isl_seq_clr(lp->ineq[k], 1+lp_dim); - isl_int_set_si(lp->ineq[k][1+dim*i], 1); - - for (j = 0; j < set->p[i]->n_eq; ++j) { - k = isl_basic_set_alloc_equality(lp); - isl_seq_clr(lp->eq[k], 1+dim*i); - isl_seq_cpy(lp->eq[k]+1+dim*i, set->p[i]->eq[j], dim); - isl_seq_clr(lp->eq[k]+1+dim*(i+1), dim*(set->n-i-1)); - } - - for (j = 0; j < set->p[i]->n_ineq; ++j) { - k = isl_basic_set_alloc_inequality(lp); - isl_seq_clr(lp->ineq[k], 1+dim*i); - isl_seq_cpy(lp->ineq[k]+1+dim*i, set->p[i]->ineq[j], dim); - isl_seq_clr(lp->ineq[k]+1+dim*(i+1), dim*(set->n-i-1)); - } - } - return lp; -} - -/* Given a facet "facet" of the convex hull of "set" and a facet "ridge" - * of that facet, compute the other facet of the convex hull that contains - * the ridge. - * - * We first transform the set such that the facet constraint becomes - * - * x_1 >= 0 - * - * I.e., the facet lies in - * - * x_1 = 0 - * - * and on that facet, the constraint that defines the ridge is - * - * x_2 >= 0 - * - * (This transformation is not strictly needed, all that is needed is - * that the ridge contains the origin.) - * - * Since the ridge contains the origin, the cone of the convex hull - * will be of the form - * - * x_1 >= 0 - * x_2 >= a x_1 - * - * with this second constraint defining the new facet. - * The constant a is obtained by settting x_1 in the cone of the - * convex hull to 1 and minimizing x_2. - * Now, each element in the cone of the convex hull is the sum - * of elements in the cones of the basic sets. - * If a_i is the dilation factor of basic set i, then the problem - * we need to solve is - * - * min \sum_i x_{i,2} - * st - * \sum_i x_{i,1} = 1 - * a_i >= 0 - * [ a_i ] - * A [ x_i ] >= 0 - * - * with - * [ 1 ] - * A_i [ x_i ] >= 0 - * - * the constraints of each (transformed) basic set. - * If a = n/d, then the constraint defining the new facet (in the transformed - * space) is - * - * -n x_1 + d x_2 >= 0 - * - * In the original space, we need to take the same combination of the - * corresponding constraints "facet" and "ridge". - * - * If a = -infty = "-1/0", then we just return the original facet constraint. - * This means that the facet is unbounded, but has a bounded intersection - * with the union of sets. - */ -isl_int *isl_set_wrap_facet(__isl_keep isl_set *set, - isl_int *facet, isl_int *ridge) -{ - int i; - isl_ctx *ctx; - struct isl_mat *T = NULL; - struct isl_basic_set *lp = NULL; - struct isl_vec *obj; - enum isl_lp_result res; - isl_int num, den; - unsigned dim; - - if (!set) - return NULL; - ctx = set->ctx; - set = isl_set_copy(set); - set = isl_set_set_rational(set); - - dim = 1 + isl_set_n_dim(set); - T = isl_mat_alloc(ctx, 3, dim); - if (!T) - goto error; - isl_int_set_si(T->row[0][0], 1); - isl_seq_clr(T->row[0]+1, dim - 1); - isl_seq_cpy(T->row[1], facet, dim); - isl_seq_cpy(T->row[2], ridge, dim); - T = isl_mat_right_inverse(T); - set = isl_set_preimage(set, T); - T = NULL; - if (!set) - goto error; - lp = wrap_constraints(set); - obj = isl_vec_alloc(ctx, 1 + dim*set->n); - if (!obj) - goto error; - isl_int_set_si(obj->block.data[0], 0); - for (i = 0; i < set->n; ++i) { - isl_seq_clr(obj->block.data + 1 + dim*i, 2); - isl_int_set_si(obj->block.data[1 + dim*i+2], 1); - isl_seq_clr(obj->block.data + 1 + dim*i+3, dim-3); - } - isl_int_init(num); - isl_int_init(den); - res = isl_basic_set_solve_lp(lp, 0, - obj->block.data, ctx->one, &num, &den, NULL); - if (res == isl_lp_ok) { - isl_int_neg(num, num); - isl_seq_combine(facet, num, facet, den, ridge, dim); - isl_seq_normalize(ctx, facet, dim); - } - isl_int_clear(num); - isl_int_clear(den); - isl_vec_free(obj); - isl_basic_set_free(lp); - isl_set_free(set); - if (res == isl_lp_error) - return NULL; - isl_assert(ctx, res == isl_lp_ok || res == isl_lp_unbounded, - return NULL); - return facet; -error: - isl_basic_set_free(lp); - isl_mat_free(T); - isl_set_free(set); - return NULL; -} - -/* Compute the constraint of a facet of "set". - * - * We first compute the intersection with a bounding constraint - * that is orthogonal to one of the coordinate axes. - * If the affine hull of this intersection has only one equality, - * we have found a facet. - * Otherwise, we wrap the current bounding constraint around - * one of the equalities of the face (one that is not equal to - * the current bounding constraint). - * This process continues until we have found a facet. - * The dimension of the intersection increases by at least - * one on each iteration, so termination is guaranteed. - */ -static __isl_give isl_mat *initial_facet_constraint(__isl_keep isl_set *set) -{ - struct isl_set *slice = NULL; - struct isl_basic_set *face = NULL; - int i; - unsigned dim = isl_set_n_dim(set); - int is_bound; - isl_mat *bounds; - - isl_assert(set->ctx, set->n > 0, goto error); - bounds = isl_mat_alloc(set->ctx, 1, 1 + dim); - if (!bounds) - return NULL; - - isl_seq_clr(bounds->row[0], dim); - isl_int_set_si(bounds->row[0][1 + dim - 1], 1); - is_bound = uset_is_bound(set, bounds->row[0], 1 + dim); - if (is_bound < 0) - goto error; - isl_assert(set->ctx, is_bound, goto error); - isl_seq_normalize(set->ctx, bounds->row[0], 1 + dim); - bounds->n_row = 1; - - for (;;) { - slice = isl_set_copy(set); - slice = isl_set_add_basic_set_equality(slice, bounds->row[0]); - face = isl_set_affine_hull(slice); - if (!face) - goto error; - if (face->n_eq == 1) { - isl_basic_set_free(face); - break; - } - for (i = 0; i < face->n_eq; ++i) - if (!isl_seq_eq(bounds->row[0], face->eq[i], 1 + dim) && - !isl_seq_is_neg(bounds->row[0], - face->eq[i], 1 + dim)) - break; - isl_assert(set->ctx, i < face->n_eq, goto error); - if (!isl_set_wrap_facet(set, bounds->row[0], face->eq[i])) - goto error; - isl_seq_normalize(set->ctx, bounds->row[0], bounds->n_col); - isl_basic_set_free(face); - } - - return bounds; -error: - isl_basic_set_free(face); - isl_mat_free(bounds); - return NULL; -} - -/* Given the bounding constraint "c" of a facet of the convex hull of "set", - * compute a hyperplane description of the facet, i.e., compute the facets - * of the facet. - * - * We compute an affine transformation that transforms the constraint - * - * [ 1 ] - * c [ x ] = 0 - * - * to the constraint - * - * z_1 = 0 - * - * by computing the right inverse U of a matrix that starts with the rows - * - * [ 1 0 ] - * [ c ] - * - * Then - * [ 1 ] [ 1 ] - * [ x ] = U [ z ] - * and - * [ 1 ] [ 1 ] - * [ z ] = Q [ x ] - * - * with Q = U^{-1} - * Since z_1 is zero, we can drop this variable as well as the corresponding - * column of U to obtain - * - * [ 1 ] [ 1 ] - * [ x ] = U' [ z' ] - * and - * [ 1 ] [ 1 ] - * [ z' ] = Q' [ x ] - * - * with Q' equal to Q, but without the corresponding row. - * After computing the facets of the facet in the z' space, - * we convert them back to the x space through Q. - */ -static struct isl_basic_set *compute_facet(struct isl_set *set, isl_int *c) -{ - struct isl_mat *m, *U, *Q; - struct isl_basic_set *facet = NULL; - struct isl_ctx *ctx; - unsigned dim; - - ctx = set->ctx; - set = isl_set_copy(set); - dim = isl_set_n_dim(set); - m = isl_mat_alloc(set->ctx, 2, 1 + dim); - if (!m) - goto error; - isl_int_set_si(m->row[0][0], 1); - isl_seq_clr(m->row[0]+1, dim); - isl_seq_cpy(m->row[1], c, 1+dim); - U = isl_mat_right_inverse(m); - Q = isl_mat_right_inverse(isl_mat_copy(U)); - U = isl_mat_drop_cols(U, 1, 1); - Q = isl_mat_drop_rows(Q, 1, 1); - set = isl_set_preimage(set, U); - facet = uset_convex_hull_wrap_bounded(set); - facet = isl_basic_set_preimage(facet, Q); - if (facet) - isl_assert(ctx, facet->n_eq == 0, goto error); - return facet; -error: - isl_basic_set_free(facet); - isl_set_free(set); - return NULL; -} - -/* Given an initial facet constraint, compute the remaining facets. - * We do this by running through all facets found so far and computing - * the adjacent facets through wrapping, adding those facets that we - * hadn't already found before. - * - * For each facet we have found so far, we first compute its facets - * in the resulting convex hull. That is, we compute the ridges - * of the resulting convex hull contained in the facet. - * We also compute the corresponding facet in the current approximation - * of the convex hull. There is no need to wrap around the ridges - * in this facet since that would result in a facet that is already - * present in the current approximation. - * - * This function can still be significantly optimized by checking which of - * the facets of the basic sets are also facets of the convex hull and - * using all the facets so far to help in constructing the facets of the - * facets - * and/or - * using the technique in section "3.1 Ridge Generation" of - * "Extended Convex Hull" by Fukuda et al. - */ -static struct isl_basic_set *extend(struct isl_basic_set *hull, - struct isl_set *set) -{ - int i, j, f; - int k; - struct isl_basic_set *facet = NULL; - struct isl_basic_set *hull_facet = NULL; - unsigned dim; - - if (!hull) - return NULL; - - isl_assert(set->ctx, set->n > 0, goto error); - - dim = isl_set_n_dim(set); - - for (i = 0; i < hull->n_ineq; ++i) { - facet = compute_facet(set, hull->ineq[i]); - facet = isl_basic_set_add_equality(facet, hull->ineq[i]); - facet = isl_basic_set_gauss(facet, NULL); - facet = isl_basic_set_normalize_constraints(facet); - hull_facet = isl_basic_set_copy(hull); - hull_facet = isl_basic_set_add_equality(hull_facet, hull->ineq[i]); - hull_facet = isl_basic_set_gauss(hull_facet, NULL); - hull_facet = isl_basic_set_normalize_constraints(hull_facet); - if (!facet || !hull_facet) - goto error; - hull = isl_basic_set_cow(hull); - hull = isl_basic_set_extend_space(hull, - isl_space_copy(hull->dim), 0, 0, facet->n_ineq); - if (!hull) - goto error; - for (j = 0; j < facet->n_ineq; ++j) { - for (f = 0; f < hull_facet->n_ineq; ++f) - if (isl_seq_eq(facet->ineq[j], - hull_facet->ineq[f], 1 + dim)) - break; - if (f < hull_facet->n_ineq) - continue; - k = isl_basic_set_alloc_inequality(hull); - if (k < 0) - goto error; - isl_seq_cpy(hull->ineq[k], hull->ineq[i], 1+dim); - if (!isl_set_wrap_facet(set, hull->ineq[k], facet->ineq[j])) - goto error; - } - isl_basic_set_free(hull_facet); - isl_basic_set_free(facet); - } - hull = isl_basic_set_simplify(hull); - hull = isl_basic_set_finalize(hull); - return hull; -error: - isl_basic_set_free(hull_facet); - isl_basic_set_free(facet); - isl_basic_set_free(hull); - return NULL; -} - -/* Special case for computing the convex hull of a one dimensional set. - * We simply collect the lower and upper bounds of each basic set - * and the biggest of those. - */ -static struct isl_basic_set *convex_hull_1d(struct isl_set *set) -{ - struct isl_mat *c = NULL; - isl_int *lower = NULL; - isl_int *upper = NULL; - int i, j, k; - isl_int a, b; - struct isl_basic_set *hull; - - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_simplify(set->p[i]); - if (!set->p[i]) - goto error; - } - set = isl_set_remove_empty_parts(set); - if (!set) - goto error; - isl_assert(set->ctx, set->n > 0, goto error); - c = isl_mat_alloc(set->ctx, 2, 2); - if (!c) - goto error; - - if (set->p[0]->n_eq > 0) { - isl_assert(set->ctx, set->p[0]->n_eq == 1, goto error); - lower = c->row[0]; - upper = c->row[1]; - if (isl_int_is_pos(set->p[0]->eq[0][1])) { - isl_seq_cpy(lower, set->p[0]->eq[0], 2); - isl_seq_neg(upper, set->p[0]->eq[0], 2); - } else { - isl_seq_neg(lower, set->p[0]->eq[0], 2); - isl_seq_cpy(upper, set->p[0]->eq[0], 2); - } - } else { - for (j = 0; j < set->p[0]->n_ineq; ++j) { - if (isl_int_is_pos(set->p[0]->ineq[j][1])) { - lower = c->row[0]; - isl_seq_cpy(lower, set->p[0]->ineq[j], 2); - } else { - upper = c->row[1]; - isl_seq_cpy(upper, set->p[0]->ineq[j], 2); - } - } - } - - isl_int_init(a); - isl_int_init(b); - for (i = 0; i < set->n; ++i) { - struct isl_basic_set *bset = set->p[i]; - int has_lower = 0; - int has_upper = 0; - - for (j = 0; j < bset->n_eq; ++j) { - has_lower = 1; - has_upper = 1; - if (lower) { - isl_int_mul(a, lower[0], bset->eq[j][1]); - isl_int_mul(b, lower[1], bset->eq[j][0]); - if (isl_int_lt(a, b) && isl_int_is_pos(bset->eq[j][1])) - isl_seq_cpy(lower, bset->eq[j], 2); - if (isl_int_gt(a, b) && isl_int_is_neg(bset->eq[j][1])) - isl_seq_neg(lower, bset->eq[j], 2); - } - if (upper) { - isl_int_mul(a, upper[0], bset->eq[j][1]); - isl_int_mul(b, upper[1], bset->eq[j][0]); - if (isl_int_lt(a, b) && isl_int_is_pos(bset->eq[j][1])) - isl_seq_neg(upper, bset->eq[j], 2); - if (isl_int_gt(a, b) && isl_int_is_neg(bset->eq[j][1])) - isl_seq_cpy(upper, bset->eq[j], 2); - } - } - for (j = 0; j < bset->n_ineq; ++j) { - if (isl_int_is_pos(bset->ineq[j][1])) - has_lower = 1; - if (isl_int_is_neg(bset->ineq[j][1])) - has_upper = 1; - if (lower && isl_int_is_pos(bset->ineq[j][1])) { - isl_int_mul(a, lower[0], bset->ineq[j][1]); - isl_int_mul(b, lower[1], bset->ineq[j][0]); - if (isl_int_lt(a, b)) - isl_seq_cpy(lower, bset->ineq[j], 2); - } - if (upper && isl_int_is_neg(bset->ineq[j][1])) { - isl_int_mul(a, upper[0], bset->ineq[j][1]); - isl_int_mul(b, upper[1], bset->ineq[j][0]); - if (isl_int_gt(a, b)) - isl_seq_cpy(upper, bset->ineq[j], 2); - } - } - if (!has_lower) - lower = NULL; - if (!has_upper) - upper = NULL; - } - isl_int_clear(a); - isl_int_clear(b); - - hull = isl_basic_set_alloc(set->ctx, 0, 1, 0, 0, 2); - hull = isl_basic_set_set_rational(hull); - if (!hull) - goto error; - if (lower) { - k = isl_basic_set_alloc_inequality(hull); - isl_seq_cpy(hull->ineq[k], lower, 2); - } - if (upper) { - k = isl_basic_set_alloc_inequality(hull); - isl_seq_cpy(hull->ineq[k], upper, 2); - } - hull = isl_basic_set_finalize(hull); - isl_set_free(set); - isl_mat_free(c); - return hull; -error: - isl_set_free(set); - isl_mat_free(c); - return NULL; -} - -static struct isl_basic_set *convex_hull_0d(struct isl_set *set) -{ - struct isl_basic_set *convex_hull; - - if (!set) - return NULL; - - if (isl_set_is_empty(set)) - convex_hull = isl_basic_set_empty(isl_space_copy(set->dim)); - else - convex_hull = isl_basic_set_universe(isl_space_copy(set->dim)); - isl_set_free(set); - return convex_hull; -} - -/* Compute the convex hull of a pair of basic sets without any parameters or - * integer divisions using Fourier-Motzkin elimination. - * The convex hull is the set of all points that can be written as - * the sum of points from both basic sets (in homogeneous coordinates). - * We set up the constraints in a space with dimensions for each of - * the three sets and then project out the dimensions corresponding - * to the two original basic sets, retaining only those corresponding - * to the convex hull. - */ -static struct isl_basic_set *convex_hull_pair_elim(struct isl_basic_set *bset1, - struct isl_basic_set *bset2) -{ - int i, j, k; - struct isl_basic_set *bset[2]; - struct isl_basic_set *hull = NULL; - unsigned dim; - - if (!bset1 || !bset2) - goto error; - - dim = isl_basic_set_n_dim(bset1); - hull = isl_basic_set_alloc(bset1->ctx, 0, 2 + 3 * dim, 0, - 1 + dim + bset1->n_eq + bset2->n_eq, - 2 + bset1->n_ineq + bset2->n_ineq); - bset[0] = bset1; - bset[1] = bset2; - for (i = 0; i < 2; ++i) { - for (j = 0; j < bset[i]->n_eq; ++j) { - k = isl_basic_set_alloc_equality(hull); - if (k < 0) - goto error; - isl_seq_clr(hull->eq[k], (i+1) * (1+dim)); - isl_seq_clr(hull->eq[k]+(i+2)*(1+dim), (1-i)*(1+dim)); - isl_seq_cpy(hull->eq[k]+(i+1)*(1+dim), bset[i]->eq[j], - 1+dim); - } - for (j = 0; j < bset[i]->n_ineq; ++j) { - k = isl_basic_set_alloc_inequality(hull); - if (k < 0) - goto error; - isl_seq_clr(hull->ineq[k], (i+1) * (1+dim)); - isl_seq_clr(hull->ineq[k]+(i+2)*(1+dim), (1-i)*(1+dim)); - isl_seq_cpy(hull->ineq[k]+(i+1)*(1+dim), - bset[i]->ineq[j], 1+dim); - } - k = isl_basic_set_alloc_inequality(hull); - if (k < 0) - goto error; - isl_seq_clr(hull->ineq[k], 1+2+3*dim); - isl_int_set_si(hull->ineq[k][(i+1)*(1+dim)], 1); - } - for (j = 0; j < 1+dim; ++j) { - k = isl_basic_set_alloc_equality(hull); - if (k < 0) - goto error; - isl_seq_clr(hull->eq[k], 1+2+3*dim); - isl_int_set_si(hull->eq[k][j], -1); - isl_int_set_si(hull->eq[k][1+dim+j], 1); - isl_int_set_si(hull->eq[k][2*(1+dim)+j], 1); - } - hull = isl_basic_set_set_rational(hull); - hull = isl_basic_set_remove_dims(hull, isl_dim_set, dim, 2*(1+dim)); - hull = isl_basic_set_remove_redundancies(hull); - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return hull; -error: - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - isl_basic_set_free(hull); - return NULL; -} - -/* Is the set bounded for each value of the parameters? - */ -int isl_basic_set_is_bounded(__isl_keep isl_basic_set *bset) -{ - struct isl_tab *tab; - int bounded; - - if (!bset) - return -1; - if (isl_basic_set_plain_is_empty(bset)) - return 1; - - tab = isl_tab_from_recession_cone(bset, 1); - bounded = isl_tab_cone_is_bounded(tab); - isl_tab_free(tab); - return bounded; -} - -/* Is the image bounded for each value of the parameters and - * the domain variables? - */ -int isl_basic_map_image_is_bounded(__isl_keep isl_basic_map *bmap) -{ - unsigned nparam = isl_basic_map_dim(bmap, isl_dim_param); - unsigned n_in = isl_basic_map_dim(bmap, isl_dim_in); - int bounded; - - bmap = isl_basic_map_copy(bmap); - bmap = isl_basic_map_cow(bmap); - bmap = isl_basic_map_move_dims(bmap, isl_dim_param, nparam, - isl_dim_in, 0, n_in); - bounded = isl_basic_set_is_bounded((isl_basic_set *)bmap); - isl_basic_map_free(bmap); - - return bounded; -} - -/* Is the set bounded for each value of the parameters? - */ -int isl_set_is_bounded(__isl_keep isl_set *set) -{ - int i; - - if (!set) - return -1; - - for (i = 0; i < set->n; ++i) { - int bounded = isl_basic_set_is_bounded(set->p[i]); - if (!bounded || bounded < 0) - return bounded; - } - return 1; -} - -/* Compute the lineality space of the convex hull of bset1 and bset2. - * - * We first compute the intersection of the recession cone of bset1 - * with the negative of the recession cone of bset2 and then compute - * the linear hull of the resulting cone. - */ -static struct isl_basic_set *induced_lineality_space( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - int i, k; - struct isl_basic_set *lin = NULL; - unsigned dim; - - if (!bset1 || !bset2) - goto error; - - dim = isl_basic_set_total_dim(bset1); - lin = isl_basic_set_alloc_space(isl_basic_set_get_space(bset1), 0, - bset1->n_eq + bset2->n_eq, - bset1->n_ineq + bset2->n_ineq); - lin = isl_basic_set_set_rational(lin); - if (!lin) - goto error; - for (i = 0; i < bset1->n_eq; ++i) { - k = isl_basic_set_alloc_equality(lin); - if (k < 0) - goto error; - isl_int_set_si(lin->eq[k][0], 0); - isl_seq_cpy(lin->eq[k] + 1, bset1->eq[i] + 1, dim); - } - for (i = 0; i < bset1->n_ineq; ++i) { - k = isl_basic_set_alloc_inequality(lin); - if (k < 0) - goto error; - isl_int_set_si(lin->ineq[k][0], 0); - isl_seq_cpy(lin->ineq[k] + 1, bset1->ineq[i] + 1, dim); - } - for (i = 0; i < bset2->n_eq; ++i) { - k = isl_basic_set_alloc_equality(lin); - if (k < 0) - goto error; - isl_int_set_si(lin->eq[k][0], 0); - isl_seq_neg(lin->eq[k] + 1, bset2->eq[i] + 1, dim); - } - for (i = 0; i < bset2->n_ineq; ++i) { - k = isl_basic_set_alloc_inequality(lin); - if (k < 0) - goto error; - isl_int_set_si(lin->ineq[k][0], 0); - isl_seq_neg(lin->ineq[k] + 1, bset2->ineq[i] + 1, dim); - } - - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return isl_basic_set_affine_hull(lin); -error: - isl_basic_set_free(lin); - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return NULL; -} - -static struct isl_basic_set *uset_convex_hull(struct isl_set *set); - -/* Given a set and a linear space "lin" of dimension n > 0, - * project the linear space from the set, compute the convex hull - * and then map the set back to the original space. - * - * Let - * - * M x = 0 - * - * describe the linear space. We first compute the Hermite normal - * form H = M U of M = H Q, to obtain - * - * H Q x = 0 - * - * The last n rows of H will be zero, so the last n variables of x' = Q x - * are the one we want to project out. We do this by transforming each - * basic set A x >= b to A U x' >= b and then removing the last n dimensions. - * After computing the convex hull in x'_1, i.e., A' x'_1 >= b', - * we transform the hull back to the original space as A' Q_1 x >= b', - * with Q_1 all but the last n rows of Q. - */ -static struct isl_basic_set *modulo_lineality(struct isl_set *set, - struct isl_basic_set *lin) -{ - unsigned total = isl_basic_set_total_dim(lin); - unsigned lin_dim; - struct isl_basic_set *hull; - struct isl_mat *M, *U, *Q; - - if (!set || !lin) - goto error; - lin_dim = total - lin->n_eq; - M = isl_mat_sub_alloc6(set->ctx, lin->eq, 0, lin->n_eq, 1, total); - M = isl_mat_left_hermite(M, 0, &U, &Q); - if (!M) - goto error; - isl_mat_free(M); - isl_basic_set_free(lin); - - Q = isl_mat_drop_rows(Q, Q->n_row - lin_dim, lin_dim); - - U = isl_mat_lin_to_aff(U); - Q = isl_mat_lin_to_aff(Q); - - set = isl_set_preimage(set, U); - set = isl_set_remove_dims(set, isl_dim_set, total - lin_dim, lin_dim); - hull = uset_convex_hull(set); - hull = isl_basic_set_preimage(hull, Q); - - return hull; -error: - isl_basic_set_free(lin); - isl_set_free(set); - return NULL; -} - -/* Given two polyhedra with as constraints h_{ij} x >= 0 in homegeneous space, - * set up an LP for solving - * - * \sum_j \alpha_{1j} h_{1j} = \sum_j \alpha_{2j} h_{2j} - * - * \alpha{i0} corresponds to the (implicit) positivity constraint 1 >= 0 - * The next \alpha{ij} correspond to the equalities and come in pairs. - * The final \alpha{ij} correspond to the inequalities. - */ -static struct isl_basic_set *valid_direction_lp( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - isl_space *dim; - struct isl_basic_set *lp; - unsigned d; - int n; - int i, j, k; - - if (!bset1 || !bset2) - goto error; - d = 1 + isl_basic_set_total_dim(bset1); - n = 2 + - 2 * bset1->n_eq + bset1->n_ineq + 2 * bset2->n_eq + bset2->n_ineq; - dim = isl_space_set_alloc(bset1->ctx, 0, n); - lp = isl_basic_set_alloc_space(dim, 0, d, n); - if (!lp) - goto error; - for (i = 0; i < n; ++i) { - k = isl_basic_set_alloc_inequality(lp); - if (k < 0) - goto error; - isl_seq_clr(lp->ineq[k] + 1, n); - isl_int_set_si(lp->ineq[k][0], -1); - isl_int_set_si(lp->ineq[k][1 + i], 1); - } - for (i = 0; i < d; ++i) { - k = isl_basic_set_alloc_equality(lp); - if (k < 0) - goto error; - n = 0; - isl_int_set_si(lp->eq[k][n], 0); n++; - /* positivity constraint 1 >= 0 */ - isl_int_set_si(lp->eq[k][n], i == 0); n++; - for (j = 0; j < bset1->n_eq; ++j) { - isl_int_set(lp->eq[k][n], bset1->eq[j][i]); n++; - isl_int_neg(lp->eq[k][n], bset1->eq[j][i]); n++; - } - for (j = 0; j < bset1->n_ineq; ++j) { - isl_int_set(lp->eq[k][n], bset1->ineq[j][i]); n++; - } - /* positivity constraint 1 >= 0 */ - isl_int_set_si(lp->eq[k][n], -(i == 0)); n++; - for (j = 0; j < bset2->n_eq; ++j) { - isl_int_neg(lp->eq[k][n], bset2->eq[j][i]); n++; - isl_int_set(lp->eq[k][n], bset2->eq[j][i]); n++; - } - for (j = 0; j < bset2->n_ineq; ++j) { - isl_int_neg(lp->eq[k][n], bset2->ineq[j][i]); n++; - } - } - lp = isl_basic_set_gauss(lp, NULL); - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return lp; -error: - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return NULL; -} - -/* Compute a vector s in the homogeneous space such that > 0 - * for all rays in the homogeneous space of the two cones that correspond - * to the input polyhedra bset1 and bset2. - * - * We compute s as a vector that satisfies - * - * s = \sum_j \alpha_{ij} h_{ij} for i = 1,2 (*) - * - * with h_{ij} the normals of the facets of polyhedron i - * (including the "positivity constraint" 1 >= 0) and \alpha_{ij} - * strictly positive numbers. For simplicity we impose \alpha_{ij} >= 1. - * We first set up an LP with as variables the \alpha{ij}. - * In this formulation, for each polyhedron i, - * the first constraint is the positivity constraint, followed by pairs - * of variables for the equalities, followed by variables for the inequalities. - * We then simply pick a feasible solution and compute s using (*). - * - * Note that we simply pick any valid direction and make no attempt - * to pick a "good" or even the "best" valid direction. - */ -static struct isl_vec *valid_direction( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - struct isl_basic_set *lp; - struct isl_tab *tab; - struct isl_vec *sample = NULL; - struct isl_vec *dir; - unsigned d; - int i; - int n; - - if (!bset1 || !bset2) - goto error; - lp = valid_direction_lp(isl_basic_set_copy(bset1), - isl_basic_set_copy(bset2)); - tab = isl_tab_from_basic_set(lp); - sample = isl_tab_get_sample_value(tab); - isl_tab_free(tab); - isl_basic_set_free(lp); - if (!sample) - goto error; - d = isl_basic_set_total_dim(bset1); - dir = isl_vec_alloc(bset1->ctx, 1 + d); - if (!dir) - goto error; - isl_seq_clr(dir->block.data + 1, dir->size - 1); - n = 1; - /* positivity constraint 1 >= 0 */ - isl_int_set(dir->block.data[0], sample->block.data[n]); n++; - for (i = 0; i < bset1->n_eq; ++i) { - isl_int_sub(sample->block.data[n], - sample->block.data[n], sample->block.data[n+1]); - isl_seq_combine(dir->block.data, - bset1->ctx->one, dir->block.data, - sample->block.data[n], bset1->eq[i], 1 + d); - - n += 2; - } - for (i = 0; i < bset1->n_ineq; ++i) - isl_seq_combine(dir->block.data, - bset1->ctx->one, dir->block.data, - sample->block.data[n++], bset1->ineq[i], 1 + d); - isl_vec_free(sample); - isl_seq_normalize(bset1->ctx, dir->el, dir->size); - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return dir; -error: - isl_vec_free(sample); - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return NULL; -} - -/* Given a polyhedron b_i + A_i x >= 0 and a map T = S^{-1}, - * compute b_i' + A_i' x' >= 0, with - * - * [ b_i A_i ] [ y' ] [ y' ] - * [ 1 0 ] S^{-1} [ x' ] >= 0 or [ b_i' A_i' ] [ x' ] >= 0 - * - * In particular, add the "positivity constraint" and then perform - * the mapping. - */ -static struct isl_basic_set *homogeneous_map(struct isl_basic_set *bset, - struct isl_mat *T) -{ - int k; - - if (!bset) - goto error; - bset = isl_basic_set_extend_constraints(bset, 0, 1); - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_clr(bset->ineq[k] + 1, isl_basic_set_total_dim(bset)); - isl_int_set_si(bset->ineq[k][0], 1); - bset = isl_basic_set_preimage(bset, T); - return bset; -error: - isl_mat_free(T); - isl_basic_set_free(bset); - return NULL; -} - -/* Compute the convex hull of a pair of basic sets without any parameters or - * integer divisions, where the convex hull is known to be pointed, - * but the basic sets may be unbounded. - * - * We turn this problem into the computation of a convex hull of a pair - * _bounded_ polyhedra by "changing the direction of the homogeneous - * dimension". This idea is due to Matthias Koeppe. - * - * Consider the cones in homogeneous space that correspond to the - * input polyhedra. The rays of these cones are also rays of the - * polyhedra if the coordinate that corresponds to the homogeneous - * dimension is zero. That is, if the inner product of the rays - * with the homogeneous direction is zero. - * The cones in the homogeneous space can also be considered to - * correspond to other pairs of polyhedra by chosing a different - * homogeneous direction. To ensure that both of these polyhedra - * are bounded, we need to make sure that all rays of the cones - * correspond to vertices and not to rays. - * Let s be a direction such that > 0 for all rays r of both cones. - * Then using s as a homogeneous direction, we obtain a pair of polytopes. - * The vector s is computed in valid_direction. - * - * Note that we need to consider _all_ rays of the cones and not just - * the rays that correspond to rays in the polyhedra. If we were to - * only consider those rays and turn them into vertices, then we - * may inadvertently turn some vertices into rays. - * - * The standard homogeneous direction is the unit vector in the 0th coordinate. - * We therefore transform the two polyhedra such that the selected - * direction is mapped onto this standard direction and then proceed - * with the normal computation. - * Let S be a non-singular square matrix with s as its first row, - * then we want to map the polyhedra to the space - * - * [ y' ] [ y ] [ y ] [ y' ] - * [ x' ] = S [ x ] i.e., [ x ] = S^{-1} [ x' ] - * - * We take S to be the unimodular completion of s to limit the growth - * of the coefficients in the following computations. - * - * Let b_i + A_i x >= 0 be the constraints of polyhedron i. - * We first move to the homogeneous dimension - * - * b_i y + A_i x >= 0 [ b_i A_i ] [ y ] [ 0 ] - * y >= 0 or [ 1 0 ] [ x ] >= [ 0 ] - * - * Then we change directoin - * - * [ b_i A_i ] [ y' ] [ y' ] - * [ 1 0 ] S^{-1} [ x' ] >= 0 or [ b_i' A_i' ] [ x' ] >= 0 - * - * Then we compute the convex hull of the polytopes b_i' + A_i' x' >= 0 - * resulting in b' + A' x' >= 0, which we then convert back - * - * [ y ] [ y ] - * [ b' A' ] S [ x ] >= 0 or [ b A ] [ x ] >= 0 - * - * The polyhedron b + A x >= 0 is then the convex hull of the input polyhedra. - */ -static struct isl_basic_set *convex_hull_pair_pointed( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - struct isl_ctx *ctx = NULL; - struct isl_vec *dir = NULL; - struct isl_mat *T = NULL; - struct isl_mat *T2 = NULL; - struct isl_basic_set *hull; - struct isl_set *set; - - if (!bset1 || !bset2) - goto error; - ctx = bset1->ctx; - dir = valid_direction(isl_basic_set_copy(bset1), - isl_basic_set_copy(bset2)); - if (!dir) - goto error; - T = isl_mat_alloc(bset1->ctx, dir->size, dir->size); - if (!T) - goto error; - isl_seq_cpy(T->row[0], dir->block.data, dir->size); - T = isl_mat_unimodular_complete(T, 1); - T2 = isl_mat_right_inverse(isl_mat_copy(T)); - - bset1 = homogeneous_map(bset1, isl_mat_copy(T2)); - bset2 = homogeneous_map(bset2, T2); - set = isl_set_alloc_space(isl_basic_set_get_space(bset1), 2, 0); - set = isl_set_add_basic_set(set, bset1); - set = isl_set_add_basic_set(set, bset2); - hull = uset_convex_hull(set); - hull = isl_basic_set_preimage(hull, T); - - isl_vec_free(dir); - - return hull; -error: - isl_vec_free(dir); - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return NULL; -} - -static struct isl_basic_set *uset_convex_hull_wrap(struct isl_set *set); -static struct isl_basic_set *modulo_affine_hull( - struct isl_set *set, struct isl_basic_set *affine_hull); - -/* Compute the convex hull of a pair of basic sets without any parameters or - * integer divisions. - * - * This function is called from uset_convex_hull_unbounded, which - * means that the complete convex hull is unbounded. Some pairs - * of basic sets may still be bounded, though. - * They may even lie inside a lower dimensional space, in which - * case they need to be handled inside their affine hull since - * the main algorithm assumes that the result is full-dimensional. - * - * If the convex hull of the two basic sets would have a non-trivial - * lineality space, we first project out this lineality space. - */ -static struct isl_basic_set *convex_hull_pair(struct isl_basic_set *bset1, - struct isl_basic_set *bset2) -{ - isl_basic_set *lin, *aff; - int bounded1, bounded2; - - if (bset1->ctx->opt->convex == ISL_CONVEX_HULL_FM) - return convex_hull_pair_elim(bset1, bset2); - - aff = isl_set_affine_hull(isl_basic_set_union(isl_basic_set_copy(bset1), - isl_basic_set_copy(bset2))); - if (!aff) - goto error; - if (aff->n_eq != 0) - return modulo_affine_hull(isl_basic_set_union(bset1, bset2), aff); - isl_basic_set_free(aff); - - bounded1 = isl_basic_set_is_bounded(bset1); - bounded2 = isl_basic_set_is_bounded(bset2); - - if (bounded1 < 0 || bounded2 < 0) - goto error; - - if (bounded1 && bounded2) - uset_convex_hull_wrap(isl_basic_set_union(bset1, bset2)); - - if (bounded1 || bounded2) - return convex_hull_pair_pointed(bset1, bset2); - - lin = induced_lineality_space(isl_basic_set_copy(bset1), - isl_basic_set_copy(bset2)); - if (!lin) - goto error; - if (isl_basic_set_is_universe(lin)) { - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return lin; - } - if (lin->n_eq < isl_basic_set_total_dim(lin)) { - struct isl_set *set; - set = isl_set_alloc_space(isl_basic_set_get_space(bset1), 2, 0); - set = isl_set_add_basic_set(set, bset1); - set = isl_set_add_basic_set(set, bset2); - return modulo_lineality(set, lin); - } - isl_basic_set_free(lin); - - return convex_hull_pair_pointed(bset1, bset2); -error: - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - return NULL; -} - -/* Compute the lineality space of a basic set. - * We currently do not allow the basic set to have any divs. - * We basically just drop the constants and turn every inequality - * into an equality. - */ -struct isl_basic_set *isl_basic_set_lineality_space(struct isl_basic_set *bset) -{ - int i, k; - struct isl_basic_set *lin = NULL; - unsigned dim; - - if (!bset) - goto error; - isl_assert(bset->ctx, bset->n_div == 0, goto error); - dim = isl_basic_set_total_dim(bset); - - lin = isl_basic_set_alloc_space(isl_basic_set_get_space(bset), 0, dim, 0); - if (!lin) - goto error; - for (i = 0; i < bset->n_eq; ++i) { - k = isl_basic_set_alloc_equality(lin); - if (k < 0) - goto error; - isl_int_set_si(lin->eq[k][0], 0); - isl_seq_cpy(lin->eq[k] + 1, bset->eq[i] + 1, dim); - } - lin = isl_basic_set_gauss(lin, NULL); - if (!lin) - goto error; - for (i = 0; i < bset->n_ineq && lin->n_eq < dim; ++i) { - k = isl_basic_set_alloc_equality(lin); - if (k < 0) - goto error; - isl_int_set_si(lin->eq[k][0], 0); - isl_seq_cpy(lin->eq[k] + 1, bset->ineq[i] + 1, dim); - lin = isl_basic_set_gauss(lin, NULL); - if (!lin) - goto error; - } - isl_basic_set_free(bset); - return lin; -error: - isl_basic_set_free(lin); - isl_basic_set_free(bset); - return NULL; -} - -/* Compute the (linear) hull of the lineality spaces of the basic sets in the - * "underlying" set "set". - */ -static struct isl_basic_set *uset_combined_lineality_space(struct isl_set *set) -{ - int i; - struct isl_set *lin = NULL; - - if (!set) - return NULL; - if (set->n == 0) { - isl_space *dim = isl_set_get_space(set); - isl_set_free(set); - return isl_basic_set_empty(dim); - } - - lin = isl_set_alloc_space(isl_set_get_space(set), set->n, 0); - for (i = 0; i < set->n; ++i) - lin = isl_set_add_basic_set(lin, - isl_basic_set_lineality_space(isl_basic_set_copy(set->p[i]))); - isl_set_free(set); - return isl_set_affine_hull(lin); -} - -/* Compute the convex hull of a set without any parameters or - * integer divisions. - * In each step, we combined two basic sets until only one - * basic set is left. - * The input basic sets are assumed not to have a non-trivial - * lineality space. If any of the intermediate results has - * a non-trivial lineality space, it is projected out. - */ -static struct isl_basic_set *uset_convex_hull_unbounded(struct isl_set *set) -{ - struct isl_basic_set *convex_hull = NULL; - - convex_hull = isl_set_copy_basic_set(set); - set = isl_set_drop_basic_set(set, convex_hull); - if (!set) - goto error; - while (set->n > 0) { - struct isl_basic_set *t; - t = isl_set_copy_basic_set(set); - if (!t) - goto error; - set = isl_set_drop_basic_set(set, t); - if (!set) - goto error; - convex_hull = convex_hull_pair(convex_hull, t); - if (set->n == 0) - break; - t = isl_basic_set_lineality_space(isl_basic_set_copy(convex_hull)); - if (!t) - goto error; - if (isl_basic_set_is_universe(t)) { - isl_basic_set_free(convex_hull); - convex_hull = t; - break; - } - if (t->n_eq < isl_basic_set_total_dim(t)) { - set = isl_set_add_basic_set(set, convex_hull); - return modulo_lineality(set, t); - } - isl_basic_set_free(t); - } - isl_set_free(set); - return convex_hull; -error: - isl_set_free(set); - isl_basic_set_free(convex_hull); - return NULL; -} - -/* Compute an initial hull for wrapping containing a single initial - * facet. - * This function assumes that the given set is bounded. - */ -static struct isl_basic_set *initial_hull(struct isl_basic_set *hull, - struct isl_set *set) -{ - struct isl_mat *bounds = NULL; - unsigned dim; - int k; - - if (!hull) - goto error; - bounds = initial_facet_constraint(set); - if (!bounds) - goto error; - k = isl_basic_set_alloc_inequality(hull); - if (k < 0) - goto error; - dim = isl_set_n_dim(set); - isl_assert(set->ctx, 1 + dim == bounds->n_col, goto error); - isl_seq_cpy(hull->ineq[k], bounds->row[0], bounds->n_col); - isl_mat_free(bounds); - - return hull; -error: - isl_basic_set_free(hull); - isl_mat_free(bounds); - return NULL; -} - -struct max_constraint { - struct isl_mat *c; - int count; - int ineq; -}; - -static int max_constraint_equal(const void *entry, const void *val) -{ - struct max_constraint *a = (struct max_constraint *)entry; - isl_int *b = (isl_int *)val; - - return isl_seq_eq(a->c->row[0] + 1, b, a->c->n_col - 1); -} - -static void update_constraint(struct isl_ctx *ctx, struct isl_hash_table *table, - isl_int *con, unsigned len, int n, int ineq) -{ - struct isl_hash_table_entry *entry; - struct max_constraint *c; - uint32_t c_hash; - - c_hash = isl_seq_get_hash(con + 1, len); - entry = isl_hash_table_find(ctx, table, c_hash, max_constraint_equal, - con + 1, 0); - if (!entry) - return; - c = entry->data; - if (c->count < n) { - isl_hash_table_remove(ctx, table, entry); - return; - } - c->count++; - if (isl_int_gt(c->c->row[0][0], con[0])) - return; - if (isl_int_eq(c->c->row[0][0], con[0])) { - if (ineq) - c->ineq = ineq; - return; - } - c->c = isl_mat_cow(c->c); - isl_int_set(c->c->row[0][0], con[0]); - c->ineq = ineq; -} - -/* Check whether the constraint hash table "table" constains the constraint - * "con". - */ -static int has_constraint(struct isl_ctx *ctx, struct isl_hash_table *table, - isl_int *con, unsigned len, int n) -{ - struct isl_hash_table_entry *entry; - struct max_constraint *c; - uint32_t c_hash; - - c_hash = isl_seq_get_hash(con + 1, len); - entry = isl_hash_table_find(ctx, table, c_hash, max_constraint_equal, - con + 1, 0); - if (!entry) - return 0; - c = entry->data; - if (c->count < n) - return 0; - return isl_int_eq(c->c->row[0][0], con[0]); -} - -/* Check for inequality constraints of a basic set without equalities - * such that the same or more stringent copies of the constraint appear - * in all of the basic sets. Such constraints are necessarily facet - * constraints of the convex hull. - * - * If the resulting basic set is by chance identical to one of - * the basic sets in "set", then we know that this basic set contains - * all other basic sets and is therefore the convex hull of set. - * In this case we set *is_hull to 1. - */ -static struct isl_basic_set *common_constraints(struct isl_basic_set *hull, - struct isl_set *set, int *is_hull) -{ - int i, j, s, n; - int min_constraints; - int best; - struct max_constraint *constraints = NULL; - struct isl_hash_table *table = NULL; - unsigned total; - - *is_hull = 0; - - for (i = 0; i < set->n; ++i) - if (set->p[i]->n_eq == 0) - break; - if (i >= set->n) - return hull; - min_constraints = set->p[i]->n_ineq; - best = i; - for (i = best + 1; i < set->n; ++i) { - if (set->p[i]->n_eq != 0) - continue; - if (set->p[i]->n_ineq >= min_constraints) - continue; - min_constraints = set->p[i]->n_ineq; - best = i; - } - constraints = isl_calloc_array(hull->ctx, struct max_constraint, - min_constraints); - if (!constraints) - return hull; - table = isl_alloc_type(hull->ctx, struct isl_hash_table); - if (isl_hash_table_init(hull->ctx, table, min_constraints)) - goto error; - - total = isl_space_dim(set->dim, isl_dim_all); - for (i = 0; i < set->p[best]->n_ineq; ++i) { - constraints[i].c = isl_mat_sub_alloc6(hull->ctx, - set->p[best]->ineq + i, 0, 1, 0, 1 + total); - if (!constraints[i].c) - goto error; - constraints[i].ineq = 1; - } - for (i = 0; i < min_constraints; ++i) { - struct isl_hash_table_entry *entry; - uint32_t c_hash; - c_hash = isl_seq_get_hash(constraints[i].c->row[0] + 1, total); - entry = isl_hash_table_find(hull->ctx, table, c_hash, - max_constraint_equal, constraints[i].c->row[0] + 1, 1); - if (!entry) - goto error; - isl_assert(hull->ctx, !entry->data, goto error); - entry->data = &constraints[i]; - } - - n = 0; - for (s = 0; s < set->n; ++s) { - if (s == best) - continue; - - for (i = 0; i < set->p[s]->n_eq; ++i) { - isl_int *eq = set->p[s]->eq[i]; - for (j = 0; j < 2; ++j) { - isl_seq_neg(eq, eq, 1 + total); - update_constraint(hull->ctx, table, - eq, total, n, 0); - } - } - for (i = 0; i < set->p[s]->n_ineq; ++i) { - isl_int *ineq = set->p[s]->ineq[i]; - update_constraint(hull->ctx, table, ineq, total, n, - set->p[s]->n_eq == 0); - } - ++n; - } - - for (i = 0; i < min_constraints; ++i) { - if (constraints[i].count < n) - continue; - if (!constraints[i].ineq) - continue; - j = isl_basic_set_alloc_inequality(hull); - if (j < 0) - goto error; - isl_seq_cpy(hull->ineq[j], constraints[i].c->row[0], 1 + total); - } - - for (s = 0; s < set->n; ++s) { - if (set->p[s]->n_eq) - continue; - if (set->p[s]->n_ineq != hull->n_ineq) - continue; - for (i = 0; i < set->p[s]->n_ineq; ++i) { - isl_int *ineq = set->p[s]->ineq[i]; - if (!has_constraint(hull->ctx, table, ineq, total, n)) - break; - } - if (i == set->p[s]->n_ineq) - *is_hull = 1; - } - - isl_hash_table_clear(table); - for (i = 0; i < min_constraints; ++i) - isl_mat_free(constraints[i].c); - free(constraints); - free(table); - return hull; -error: - isl_hash_table_clear(table); - free(table); - if (constraints) - for (i = 0; i < min_constraints; ++i) - isl_mat_free(constraints[i].c); - free(constraints); - return hull; -} - -/* Create a template for the convex hull of "set" and fill it up - * obvious facet constraints, if any. If the result happens to - * be the convex hull of "set" then *is_hull is set to 1. - */ -static struct isl_basic_set *proto_hull(struct isl_set *set, int *is_hull) -{ - struct isl_basic_set *hull; - unsigned n_ineq; - int i; - - n_ineq = 1; - for (i = 0; i < set->n; ++i) { - n_ineq += set->p[i]->n_eq; - n_ineq += set->p[i]->n_ineq; - } - hull = isl_basic_set_alloc_space(isl_space_copy(set->dim), 0, 0, n_ineq); - hull = isl_basic_set_set_rational(hull); - if (!hull) - return NULL; - return common_constraints(hull, set, is_hull); -} - -static struct isl_basic_set *uset_convex_hull_wrap(struct isl_set *set) -{ - struct isl_basic_set *hull; - int is_hull; - - hull = proto_hull(set, &is_hull); - if (hull && !is_hull) { - if (hull->n_ineq == 0) - hull = initial_hull(hull, set); - hull = extend(hull, set); - } - isl_set_free(set); - - return hull; -} - -/* Compute the convex hull of a set without any parameters or - * integer divisions. Depending on whether the set is bounded, - * we pass control to the wrapping based convex hull or - * the Fourier-Motzkin elimination based convex hull. - * We also handle a few special cases before checking the boundedness. - */ -static struct isl_basic_set *uset_convex_hull(struct isl_set *set) -{ - struct isl_basic_set *convex_hull = NULL; - struct isl_basic_set *lin; - - if (isl_set_n_dim(set) == 0) - return convex_hull_0d(set); - - set = isl_set_coalesce(set); - set = isl_set_set_rational(set); - - if (!set) - goto error; - if (!set) - return NULL; - if (set->n == 1) { - convex_hull = isl_basic_set_copy(set->p[0]); - isl_set_free(set); - return convex_hull; - } - if (isl_set_n_dim(set) == 1) - return convex_hull_1d(set); - - if (isl_set_is_bounded(set) && - set->ctx->opt->convex == ISL_CONVEX_HULL_WRAP) - return uset_convex_hull_wrap(set); - - lin = uset_combined_lineality_space(isl_set_copy(set)); - if (!lin) - goto error; - if (isl_basic_set_is_universe(lin)) { - isl_set_free(set); - return lin; - } - if (lin->n_eq < isl_basic_set_total_dim(lin)) - return modulo_lineality(set, lin); - isl_basic_set_free(lin); - - return uset_convex_hull_unbounded(set); -error: - isl_set_free(set); - isl_basic_set_free(convex_hull); - return NULL; -} - -/* This is the core procedure, where "set" is a "pure" set, i.e., - * without parameters or divs and where the convex hull of set is - * known to be full-dimensional. - */ -static struct isl_basic_set *uset_convex_hull_wrap_bounded(struct isl_set *set) -{ - struct isl_basic_set *convex_hull = NULL; - - if (!set) - goto error; - - if (isl_set_n_dim(set) == 0) { - convex_hull = isl_basic_set_universe(isl_space_copy(set->dim)); - isl_set_free(set); - convex_hull = isl_basic_set_set_rational(convex_hull); - return convex_hull; - } - - set = isl_set_set_rational(set); - set = isl_set_coalesce(set); - if (!set) - goto error; - if (set->n == 1) { - convex_hull = isl_basic_set_copy(set->p[0]); - isl_set_free(set); - return convex_hull; - } - if (isl_set_n_dim(set) == 1) - return convex_hull_1d(set); - - return uset_convex_hull_wrap(set); -error: - isl_set_free(set); - return NULL; -} - -/* Compute the convex hull of set "set" with affine hull "affine_hull", - * We first remove the equalities (transforming the set), compute the - * convex hull of the transformed set and then add the equalities back - * (after performing the inverse transformation. - */ -static struct isl_basic_set *modulo_affine_hull( - struct isl_set *set, struct isl_basic_set *affine_hull) -{ - struct isl_mat *T; - struct isl_mat *T2; - struct isl_basic_set *dummy; - struct isl_basic_set *convex_hull; - - dummy = isl_basic_set_remove_equalities( - isl_basic_set_copy(affine_hull), &T, &T2); - if (!dummy) - goto error; - isl_basic_set_free(dummy); - set = isl_set_preimage(set, T); - convex_hull = uset_convex_hull(set); - convex_hull = isl_basic_set_preimage(convex_hull, T2); - convex_hull = isl_basic_set_intersect(convex_hull, affine_hull); - return convex_hull; -error: - isl_basic_set_free(affine_hull); - isl_set_free(set); - return NULL; -} - -/* Compute the convex hull of a map. - * - * The implementation was inspired by "Extended Convex Hull" by Fukuda et al., - * specifically, the wrapping of facets to obtain new facets. - */ -struct isl_basic_map *isl_map_convex_hull(struct isl_map *map) -{ - struct isl_basic_set *bset; - struct isl_basic_map *model = NULL; - struct isl_basic_set *affine_hull = NULL; - struct isl_basic_map *convex_hull = NULL; - struct isl_set *set = NULL; - struct isl_ctx *ctx; - - if (!map) - goto error; - - ctx = map->ctx; - if (map->n == 0) { - convex_hull = isl_basic_map_empty_like_map(map); - isl_map_free(map); - return convex_hull; - } - - map = isl_map_detect_equalities(map); - map = isl_map_align_divs(map); - if (!map) - goto error; - model = isl_basic_map_copy(map->p[0]); - set = isl_map_underlying_set(map); - if (!set) - goto error; - - affine_hull = isl_set_affine_hull(isl_set_copy(set)); - if (!affine_hull) - goto error; - if (affine_hull->n_eq != 0) - bset = modulo_affine_hull(set, affine_hull); - else { - isl_basic_set_free(affine_hull); - bset = uset_convex_hull(set); - } - - convex_hull = isl_basic_map_overlying_set(bset, model); - if (!convex_hull) - return NULL; - - ISL_F_SET(convex_hull, ISL_BASIC_MAP_NO_IMPLICIT); - ISL_F_SET(convex_hull, ISL_BASIC_MAP_ALL_EQUALITIES); - ISL_F_CLR(convex_hull, ISL_BASIC_MAP_RATIONAL); - return convex_hull; -error: - isl_set_free(set); - isl_basic_map_free(model); - return NULL; -} - -struct isl_basic_set *isl_set_convex_hull(struct isl_set *set) -{ - return (struct isl_basic_set *) - isl_map_convex_hull((struct isl_map *)set); -} - -__isl_give isl_basic_map *isl_map_polyhedral_hull(__isl_take isl_map *map) -{ - isl_basic_map *hull; - - hull = isl_map_convex_hull(map); - return isl_basic_map_remove_divs(hull); -} - -__isl_give isl_basic_set *isl_set_polyhedral_hull(__isl_take isl_set *set) -{ - return (isl_basic_set *)isl_map_polyhedral_hull((isl_map *)set); -} - -struct sh_data_entry { - struct isl_hash_table *table; - struct isl_tab *tab; -}; - -/* Holds the data needed during the simple hull computation. - * In particular, - * n the number of basic sets in the original set - * hull_table a hash table of already computed constraints - * in the simple hull - * p for each basic set, - * table a hash table of the constraints - * tab the tableau corresponding to the basic set - */ -struct sh_data { - struct isl_ctx *ctx; - unsigned n; - struct isl_hash_table *hull_table; - struct sh_data_entry p[1]; -}; - -static void sh_data_free(struct sh_data *data) -{ - int i; - - if (!data) - return; - isl_hash_table_free(data->ctx, data->hull_table); - for (i = 0; i < data->n; ++i) { - isl_hash_table_free(data->ctx, data->p[i].table); - isl_tab_free(data->p[i].tab); - } - free(data); -} - -struct ineq_cmp_data { - unsigned len; - isl_int *p; -}; - -static int has_ineq(const void *entry, const void *val) -{ - isl_int *row = (isl_int *)entry; - struct ineq_cmp_data *v = (struct ineq_cmp_data *)val; - - return isl_seq_eq(row + 1, v->p + 1, v->len) || - isl_seq_is_neg(row + 1, v->p + 1, v->len); -} - -static int hash_ineq(struct isl_ctx *ctx, struct isl_hash_table *table, - isl_int *ineq, unsigned len) -{ - uint32_t c_hash; - struct ineq_cmp_data v; - struct isl_hash_table_entry *entry; - - v.len = len; - v.p = ineq; - c_hash = isl_seq_get_hash(ineq + 1, len); - entry = isl_hash_table_find(ctx, table, c_hash, has_ineq, &v, 1); - if (!entry) - return - 1; - entry->data = ineq; - return 0; -} - -/* Fill hash table "table" with the constraints of "bset". - * Equalities are added as two inequalities. - * The value in the hash table is a pointer to the (in)equality of "bset". - */ -static int hash_basic_set(struct isl_hash_table *table, - struct isl_basic_set *bset) -{ - int i, j; - unsigned dim = isl_basic_set_total_dim(bset); - - for (i = 0; i < bset->n_eq; ++i) { - for (j = 0; j < 2; ++j) { - isl_seq_neg(bset->eq[i], bset->eq[i], 1 + dim); - if (hash_ineq(bset->ctx, table, bset->eq[i], dim) < 0) - return -1; - } - } - for (i = 0; i < bset->n_ineq; ++i) { - if (hash_ineq(bset->ctx, table, bset->ineq[i], dim) < 0) - return -1; - } - return 0; -} - -static struct sh_data *sh_data_alloc(struct isl_set *set, unsigned n_ineq) -{ - struct sh_data *data; - int i; - - data = isl_calloc(set->ctx, struct sh_data, - sizeof(struct sh_data) + - (set->n - 1) * sizeof(struct sh_data_entry)); - if (!data) - return NULL; - data->ctx = set->ctx; - data->n = set->n; - data->hull_table = isl_hash_table_alloc(set->ctx, n_ineq); - if (!data->hull_table) - goto error; - for (i = 0; i < set->n; ++i) { - data->p[i].table = isl_hash_table_alloc(set->ctx, - 2 * set->p[i]->n_eq + set->p[i]->n_ineq); - if (!data->p[i].table) - goto error; - if (hash_basic_set(data->p[i].table, set->p[i]) < 0) - goto error; - } - return data; -error: - sh_data_free(data); - return NULL; -} - -/* Check if inequality "ineq" is a bound for basic set "j" or if - * it can be relaxed (by increasing the constant term) to become - * a bound for that basic set. In the latter case, the constant - * term is updated. - * Return 1 if "ineq" is a bound - * 0 if "ineq" may attain arbitrarily small values on basic set "j" - * -1 if some error occurred - */ -static int is_bound(struct sh_data *data, struct isl_set *set, int j, - isl_int *ineq) -{ - enum isl_lp_result res; - isl_int opt; - - if (!data->p[j].tab) { - data->p[j].tab = isl_tab_from_basic_set(set->p[j]); - if (!data->p[j].tab) - return -1; - } - - isl_int_init(opt); - - res = isl_tab_min(data->p[j].tab, ineq, data->ctx->one, - &opt, NULL, 0); - if (res == isl_lp_ok && isl_int_is_neg(opt)) - isl_int_sub(ineq[0], ineq[0], opt); - - isl_int_clear(opt); - - return (res == isl_lp_ok || res == isl_lp_empty) ? 1 : - res == isl_lp_unbounded ? 0 : -1; -} - -/* Check if inequality "ineq" from basic set "i" can be relaxed to - * become a bound on the whole set. If so, add the (relaxed) inequality - * to "hull". - * - * We first check if "hull" already contains a translate of the inequality. - * If so, we are done. - * Then, we check if any of the previous basic sets contains a translate - * of the inequality. If so, then we have already considered this - * inequality and we are done. - * Otherwise, for each basic set other than "i", we check if the inequality - * is a bound on the basic set. - * For previous basic sets, we know that they do not contain a translate - * of the inequality, so we directly call is_bound. - * For following basic sets, we first check if a translate of the - * inequality appears in its description and if so directly update - * the inequality accordingly. - */ -static struct isl_basic_set *add_bound(struct isl_basic_set *hull, - struct sh_data *data, struct isl_set *set, int i, isl_int *ineq) -{ - uint32_t c_hash; - struct ineq_cmp_data v; - struct isl_hash_table_entry *entry; - int j, k; - - if (!hull) - return NULL; - - v.len = isl_basic_set_total_dim(hull); - v.p = ineq; - c_hash = isl_seq_get_hash(ineq + 1, v.len); - - entry = isl_hash_table_find(hull->ctx, data->hull_table, c_hash, - has_ineq, &v, 0); - if (entry) - return hull; - - for (j = 0; j < i; ++j) { - entry = isl_hash_table_find(hull->ctx, data->p[j].table, - c_hash, has_ineq, &v, 0); - if (entry) - break; - } - if (j < i) - return hull; - - k = isl_basic_set_alloc_inequality(hull); - isl_seq_cpy(hull->ineq[k], ineq, 1 + v.len); - if (k < 0) - goto error; - - for (j = 0; j < i; ++j) { - int bound; - bound = is_bound(data, set, j, hull->ineq[k]); - if (bound < 0) - goto error; - if (!bound) - break; - } - if (j < i) { - isl_basic_set_free_inequality(hull, 1); - return hull; - } - - for (j = i + 1; j < set->n; ++j) { - int bound, neg; - isl_int *ineq_j; - entry = isl_hash_table_find(hull->ctx, data->p[j].table, - c_hash, has_ineq, &v, 0); - if (entry) { - ineq_j = entry->data; - neg = isl_seq_is_neg(ineq_j + 1, - hull->ineq[k] + 1, v.len); - if (neg) - isl_int_neg(ineq_j[0], ineq_j[0]); - if (isl_int_gt(ineq_j[0], hull->ineq[k][0])) - isl_int_set(hull->ineq[k][0], ineq_j[0]); - if (neg) - isl_int_neg(ineq_j[0], ineq_j[0]); - continue; - } - bound = is_bound(data, set, j, hull->ineq[k]); - if (bound < 0) - goto error; - if (!bound) - break; - } - if (j < set->n) { - isl_basic_set_free_inequality(hull, 1); - return hull; - } - - entry = isl_hash_table_find(hull->ctx, data->hull_table, c_hash, - has_ineq, &v, 1); - if (!entry) - goto error; - entry->data = hull->ineq[k]; - - return hull; -error: - isl_basic_set_free(hull); - return NULL; -} - -/* Check if any inequality from basic set "i" can be relaxed to - * become a bound on the whole set. If so, add the (relaxed) inequality - * to "hull". - */ -static struct isl_basic_set *add_bounds(struct isl_basic_set *bset, - struct sh_data *data, struct isl_set *set, int i) -{ - int j, k; - unsigned dim = isl_basic_set_total_dim(bset); - - for (j = 0; j < set->p[i]->n_eq; ++j) { - for (k = 0; k < 2; ++k) { - isl_seq_neg(set->p[i]->eq[j], set->p[i]->eq[j], 1+dim); - bset = add_bound(bset, data, set, i, set->p[i]->eq[j]); - } - } - for (j = 0; j < set->p[i]->n_ineq; ++j) - bset = add_bound(bset, data, set, i, set->p[i]->ineq[j]); - return bset; -} - -/* Compute a superset of the convex hull of set that is described - * by only translates of the constraints in the constituents of set. - */ -static struct isl_basic_set *uset_simple_hull(struct isl_set *set) -{ - struct sh_data *data = NULL; - struct isl_basic_set *hull = NULL; - unsigned n_ineq; - int i; - - if (!set) - return NULL; - - n_ineq = 0; - for (i = 0; i < set->n; ++i) { - if (!set->p[i]) - goto error; - n_ineq += 2 * set->p[i]->n_eq + set->p[i]->n_ineq; - } - - hull = isl_basic_set_alloc_space(isl_space_copy(set->dim), 0, 0, n_ineq); - if (!hull) - goto error; - - data = sh_data_alloc(set, n_ineq); - if (!data) - goto error; - - for (i = 0; i < set->n; ++i) - hull = add_bounds(hull, data, set, i); - - sh_data_free(data); - isl_set_free(set); - - return hull; -error: - sh_data_free(data); - isl_basic_set_free(hull); - isl_set_free(set); - return NULL; -} - -/* Compute a superset of the convex hull of map that is described - * by only translates of the constraints in the constituents of map. - */ -struct isl_basic_map *isl_map_simple_hull(struct isl_map *map) -{ - struct isl_set *set = NULL; - struct isl_basic_map *model = NULL; - struct isl_basic_map *hull; - struct isl_basic_map *affine_hull; - struct isl_basic_set *bset = NULL; - - if (!map) - return NULL; - if (map->n == 0) { - hull = isl_basic_map_empty_like_map(map); - isl_map_free(map); - return hull; - } - if (map->n == 1) { - hull = isl_basic_map_copy(map->p[0]); - isl_map_free(map); - return hull; - } - - map = isl_map_detect_equalities(map); - affine_hull = isl_map_affine_hull(isl_map_copy(map)); - map = isl_map_align_divs(map); - model = isl_basic_map_copy(map->p[0]); - - set = isl_map_underlying_set(map); - - bset = uset_simple_hull(set); - - hull = isl_basic_map_overlying_set(bset, model); - - hull = isl_basic_map_intersect(hull, affine_hull); - hull = isl_basic_map_remove_redundancies(hull); - ISL_F_SET(hull, ISL_BASIC_MAP_NO_IMPLICIT); - ISL_F_SET(hull, ISL_BASIC_MAP_ALL_EQUALITIES); - - return hull; -} - -struct isl_basic_set *isl_set_simple_hull(struct isl_set *set) -{ - return (struct isl_basic_set *) - isl_map_simple_hull((struct isl_map *)set); -} - -/* Given a set "set", return parametric bounds on the dimension "dim". - */ -static struct isl_basic_set *set_bounds(struct isl_set *set, int dim) -{ - unsigned set_dim = isl_set_dim(set, isl_dim_set); - set = isl_set_copy(set); - set = isl_set_eliminate_dims(set, dim + 1, set_dim - (dim + 1)); - set = isl_set_eliminate_dims(set, 0, dim); - return isl_set_convex_hull(set); -} - -/* Computes a "simple hull" and then check if each dimension in the - * resulting hull is bounded by a symbolic constant. If not, the - * hull is intersected with the corresponding bounds on the whole set. - */ -struct isl_basic_set *isl_set_bounded_simple_hull(struct isl_set *set) -{ - int i, j; - struct isl_basic_set *hull; - unsigned nparam, left; - int removed_divs = 0; - - hull = isl_set_simple_hull(isl_set_copy(set)); - if (!hull) - goto error; - - nparam = isl_basic_set_dim(hull, isl_dim_param); - for (i = 0; i < isl_basic_set_dim(hull, isl_dim_set); ++i) { - int lower = 0, upper = 0; - struct isl_basic_set *bounds; - - left = isl_basic_set_total_dim(hull) - nparam - i - 1; - for (j = 0; j < hull->n_eq; ++j) { - if (isl_int_is_zero(hull->eq[j][1 + nparam + i])) - continue; - if (isl_seq_first_non_zero(hull->eq[j]+1+nparam+i+1, - left) == -1) - break; - } - if (j < hull->n_eq) - continue; - - for (j = 0; j < hull->n_ineq; ++j) { - if (isl_int_is_zero(hull->ineq[j][1 + nparam + i])) - continue; - if (isl_seq_first_non_zero(hull->ineq[j]+1+nparam+i+1, - left) != -1 || - isl_seq_first_non_zero(hull->ineq[j]+1+nparam, - i) != -1) - continue; - if (isl_int_is_pos(hull->ineq[j][1 + nparam + i])) - lower = 1; - else - upper = 1; - if (lower && upper) - break; - } - - if (lower && upper) - continue; - - if (!removed_divs) { - set = isl_set_remove_divs(set); - if (!set) - goto error; - removed_divs = 1; - } - bounds = set_bounds(set, i); - hull = isl_basic_set_intersect(hull, bounds); - if (!hull) - goto error; - } - - isl_set_free(set); - return hull; -error: - isl_set_free(set); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_ctx.c b/cloog-0.17.0/isl/isl_ctx.c deleted file mode 100644 index 6f99950..0000000 --- a/cloog-0.17.0/isl/isl_ctx.c +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include - -void isl_handle_error(isl_ctx *ctx, int errno, const char *msg, - const char *file, int line) -{ - isl_ctx_set_error(ctx, errno); - - switch (isl_options_get_on_error(ctx)) { - case ISL_ON_ERROR_WARN: - fprintf(stderr, "%s:%d: %s\n", file, line, msg); - return; - case ISL_ON_ERROR_CONTINUE: - return; - case ISL_ON_ERROR_ABORT: - fprintf(stderr, "%s:%d: %s\n", file, line, msg); - abort(); - return; - } -} - -static struct isl_options *find_nested_options(struct isl_args *args, - void *opt, struct isl_args *wanted) -{ - int i; - struct isl_options *options; - - if (args == wanted) - return opt; - - for (i = 0; args->args[i].type != isl_arg_end; ++i) { - if (args->args[i].type != isl_arg_child) - continue; - options = find_nested_options(args->args[i].u.child.child, - *(void **)(((char *)opt) + args->args[i].offset), - wanted); - if (options) - return options; - } - - return NULL; -} - -static struct isl_options *find_nested_isl_options(struct isl_args *args, - void *opt) -{ - return find_nested_options(args, opt, &isl_options_args); -} - -void *isl_ctx_peek_options(isl_ctx *ctx, struct isl_args *args) -{ - if (!ctx) - return NULL; - return find_nested_options(ctx->user_args, ctx->user_opt, args); -} - -isl_ctx *isl_ctx_alloc_with_options(struct isl_args *args, void *user_opt) -{ - struct isl_ctx *ctx = NULL; - struct isl_options *opt = NULL; - int opt_allocated = 0; - - if (!user_opt) - return NULL; - - opt = find_nested_isl_options(args, user_opt); - if (!opt) { - opt = isl_options_new_with_defaults(); - if (!opt) - goto error; - opt_allocated = 1; - } - - ctx = isl_calloc_type(NULL, struct isl_ctx); - if (!ctx) - goto error; - - if (isl_hash_table_init(ctx, &ctx->id_table, 0)) - goto error; - - ctx->stats = isl_calloc_type(ctx, struct isl_stats); - if (!ctx->stats) - goto error; - - ctx->user_args = args; - ctx->user_opt = user_opt; - ctx->opt_allocated = opt_allocated; - ctx->opt = opt; - ctx->ref = 0; - - isl_int_init(ctx->zero); - isl_int_set_si(ctx->zero, 0); - - isl_int_init(ctx->one); - isl_int_set_si(ctx->one, 1); - - isl_int_init(ctx->two); - isl_int_set_si(ctx->two, 2); - - isl_int_init(ctx->negone); - isl_int_set_si(ctx->negone, -1); - - isl_int_init(ctx->normalize_gcd); - - ctx->n_cached = 0; - ctx->n_miss = 0; - - ctx->error = isl_error_none; - - return ctx; -error: - isl_args_free(args, user_opt); - if (opt_allocated) - isl_options_free(opt); - free(ctx); - return NULL; -} - -struct isl_ctx *isl_ctx_alloc() -{ - struct isl_options *opt; - - opt = isl_options_new_with_defaults(); - - return isl_ctx_alloc_with_options(&isl_options_args, opt); -} - -void isl_ctx_ref(struct isl_ctx *ctx) -{ - ctx->ref++; -} - -void isl_ctx_deref(struct isl_ctx *ctx) -{ - isl_assert(ctx, ctx->ref > 0, return); - ctx->ref--; -} - -void isl_ctx_free(struct isl_ctx *ctx) -{ - if (!ctx) - return; - if (ctx->ref != 0) - isl_die(ctx, isl_error_invalid, - "isl_ctx freed, but some objects still reference it", - return); - - isl_hash_table_clear(&ctx->id_table); - isl_blk_clear_cache(ctx); - isl_int_clear(ctx->zero); - isl_int_clear(ctx->one); - isl_int_clear(ctx->two); - isl_int_clear(ctx->negone); - isl_int_clear(ctx->normalize_gcd); - isl_args_free(ctx->user_args, ctx->user_opt); - if (ctx->opt_allocated) - free(ctx->opt); - free(ctx->stats); - free(ctx); -} - -struct isl_options *isl_ctx_options(isl_ctx *ctx) -{ - if (!ctx) - return NULL; - return ctx->opt; -} - -enum isl_error isl_ctx_last_error(isl_ctx *ctx) -{ - return ctx->error; -} - -void isl_ctx_reset_error(isl_ctx *ctx) -{ - ctx->error = isl_error_none; -} - -void isl_ctx_set_error(isl_ctx *ctx, enum isl_error error) -{ - if (ctx) - ctx->error = error; -} - -void isl_ctx_abort(isl_ctx *ctx) -{ - if (ctx) - ctx->abort = 1; -} - -void isl_ctx_resume(isl_ctx *ctx) -{ - if (ctx) - ctx->abort = 0; -} - -int isl_ctx_aborted(isl_ctx *ctx) -{ - return ctx ? ctx->abort : -1; -} - -int isl_ctx_parse_options(isl_ctx *ctx, int argc, char **argv, unsigned flags) -{ - if (!ctx) - return -1; - return isl_args_parse(ctx->user_args, argc, argv, ctx->user_opt, flags); -} diff --git a/cloog-0.17.0/isl/isl_ctx_private.h b/cloog-0.17.0/isl/isl_ctx_private.h deleted file mode 100644 index 65267f8..0000000 --- a/cloog-0.17.0/isl/isl_ctx_private.h +++ /dev/null @@ -1,28 +0,0 @@ -#include - -struct isl_ctx { - int ref; - - struct isl_stats *stats; - - int opt_allocated; - struct isl_options *opt; - void *user_opt; - struct isl_args *user_args; - - isl_int zero; - isl_int one; - isl_int two; - isl_int negone; - - isl_int normalize_gcd; - - int n_cached; - int n_miss; - struct isl_blk cache[ISL_BLK_CACHE_SIZE]; - struct isl_hash_table id_table; - - enum isl_error error; - - int abort; -}; diff --git a/cloog-0.17.0/isl/isl_dim.c b/cloog-0.17.0/isl/isl_dim.c deleted file mode 100644 index 914d666..0000000 --- a/cloog-0.17.0/isl/isl_dim.c +++ /dev/null @@ -1,258 +0,0 @@ -#include -#include -#include -#include -#include - -isl_ctx *isl_dim_get_ctx(__isl_keep isl_space *dim) -{ - return isl_space_get_ctx(dim); -} - -__isl_give isl_space *isl_dim_alloc(isl_ctx *ctx, - unsigned nparam, unsigned n_in, unsigned n_out) -{ - return isl_space_alloc(ctx, nparam, n_in, n_out); -} -__isl_give isl_space *isl_dim_set_alloc(isl_ctx *ctx, - unsigned nparam, unsigned dim) -{ - return isl_space_set_alloc(ctx, nparam, dim); -} -__isl_give isl_space *isl_dim_copy(__isl_keep isl_space *dim) -{ - return isl_space_copy(dim); -} -void isl_dim_free(__isl_take isl_space *dim) -{ - isl_space_free(dim); -} - -unsigned isl_dim_size(__isl_keep isl_space *dim, enum isl_dim_type type) -{ - return isl_space_dim(dim, type); -} - -__isl_give isl_space *isl_dim_set_dim_id(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id) -{ - return isl_space_set_dim_id(dim, type, pos, id); -} -int isl_dim_has_dim_id(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos) -{ - return isl_space_has_dim_id(dim, type, pos); -} -__isl_give isl_id *isl_dim_get_dim_id(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos) -{ - return isl_space_get_dim_id(dim, type, pos); -} - -int isl_dim_find_dim_by_id(__isl_keep isl_space *dim, - enum isl_dim_type type, __isl_keep isl_id *id) -{ - return isl_space_find_dim_by_id(dim, type, id); -} - -__isl_give isl_space *isl_dim_set_tuple_id(__isl_take isl_space *dim, - enum isl_dim_type type, __isl_take isl_id *id) -{ - return isl_space_set_tuple_id(dim, type, id); -} -__isl_give isl_space *isl_dim_reset_tuple_id(__isl_take isl_space *dim, - enum isl_dim_type type) -{ - return isl_space_reset_tuple_id(dim, type); -} -int isl_dim_has_tuple_id(__isl_keep isl_space *dim, enum isl_dim_type type) -{ - return isl_space_has_tuple_id(dim, type); -} -__isl_give isl_id *isl_dim_get_tuple_id(__isl_keep isl_space *dim, - enum isl_dim_type type) -{ - return isl_space_get_tuple_id(dim, type); -} - -__isl_give isl_space *isl_dim_set_name(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos, __isl_keep const char *name) -{ - return isl_space_set_dim_name(dim, type, pos, name); -} -__isl_keep const char *isl_dim_get_name(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos) -{ - return isl_space_get_dim_name(dim, type, pos); -} - -__isl_give isl_space *isl_dim_set_tuple_name(__isl_take isl_space *dim, - enum isl_dim_type type, const char *s) -{ - return isl_space_set_tuple_name(dim, type, s); -} -const char *isl_dim_get_tuple_name(__isl_keep isl_space *dim, - enum isl_dim_type type) -{ - return isl_space_get_tuple_name(dim, type); -} - -int isl_dim_is_wrapping(__isl_keep isl_space *dim) -{ - return isl_space_is_wrapping(dim); -} -__isl_give isl_space *isl_dim_wrap(__isl_take isl_space *dim) -{ - return isl_space_wrap(dim); -} -__isl_give isl_space *isl_dim_unwrap(__isl_take isl_space *dim) -{ - return isl_space_unwrap(dim); -} - -__isl_give isl_space *isl_dim_domain(__isl_take isl_space *dim) -{ - return isl_space_domain(dim); -} -__isl_give isl_space *isl_dim_from_domain(__isl_take isl_space *dim) -{ - return isl_space_from_domain(dim); -} -__isl_give isl_space *isl_dim_range(__isl_take isl_space *dim) -{ - return isl_space_range(dim); -} -__isl_give isl_space *isl_dim_from_range(__isl_take isl_space *dim) -{ - return isl_space_from_range(dim); -} -__isl_give isl_space *isl_dim_reverse(__isl_take isl_space *dim) -{ - return isl_space_reverse(dim); -} -__isl_give isl_space *isl_dim_join(__isl_take isl_space *left, - __isl_take isl_space *right) -{ - return isl_space_join(left, right); -} -__isl_give isl_space *isl_dim_align_params(__isl_take isl_space *dim1, - __isl_take isl_space *dim2) -{ - return isl_space_align_params(dim1, dim2); -} -__isl_give isl_space *isl_dim_insert(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos, unsigned n) -{ - return isl_space_insert_dims(dim, type, pos, n); -} -__isl_give isl_space *isl_dim_add(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned n) -{ - return isl_space_add_dims(dim, type, n); -} -__isl_give isl_space *isl_dim_drop(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return isl_space_drop_dims(dim, type, first, n); -} -__isl_give isl_space *isl_dim_move(__isl_take isl_space *dim, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - return isl_space_move_dims(dim, dst_type, dst_pos, src_type, src_pos, n); -} -__isl_give isl_space *isl_dim_map_from_set(__isl_take isl_space *dim) -{ - return isl_space_map_from_set(dim); -} -__isl_give isl_space *isl_dim_zip(__isl_take isl_space *dim) -{ - return isl_space_zip(dim); -} - -__isl_give isl_local_space *isl_local_space_from_dim( - __isl_take isl_space *dim) -{ - return isl_local_space_from_space(dim); -} -__isl_give isl_space *isl_local_space_get_dim( - __isl_keep isl_local_space *ls) -{ - return isl_local_space_get_space(ls); -} - -__isl_give isl_space *isl_aff_get_dim(__isl_keep isl_aff *aff) -{ - return isl_aff_get_space(aff); -} -__isl_give isl_space *isl_pw_aff_get_dim(__isl_keep isl_pw_aff *pwaff) -{ - return isl_pw_aff_get_space(pwaff); -} - -__isl_give isl_space *isl_constraint_get_dim( - __isl_keep isl_constraint *constraint) -{ - return isl_constraint_get_space(constraint); -} - -__isl_give isl_space *isl_basic_map_get_dim(__isl_keep isl_basic_map *bmap) -{ - return isl_basic_map_get_space(bmap); -} -__isl_give isl_space *isl_map_get_dim(__isl_keep isl_map *map) -{ - return isl_map_get_space(map); -} -__isl_give isl_space *isl_union_map_get_dim(__isl_keep isl_union_map *umap) -{ - return isl_union_map_get_space(umap); -} - -__isl_give isl_space *isl_basic_set_get_dim(__isl_keep isl_basic_set *bset) -{ - return isl_basic_set_get_space(bset); -} -__isl_give isl_space *isl_set_get_dim(__isl_keep isl_set *set) -{ - return isl_set_get_space(set); -} -__isl_give isl_space *isl_union_set_get_dim(__isl_keep isl_union_set *uset) -{ - return isl_union_set_get_space(uset); -} - -__isl_give isl_space *isl_point_get_dim(__isl_keep isl_point *pnt) -{ - return isl_point_get_space(pnt); -} - -__isl_give isl_space *isl_qpolynomial_get_dim(__isl_keep isl_qpolynomial *qp) -{ - return isl_qpolynomial_get_space(qp); -} -__isl_give isl_space *isl_pw_qpolynomial_get_dim( - __isl_keep isl_pw_qpolynomial *pwqp) -{ - return isl_pw_qpolynomial_get_space(pwqp); -} -__isl_give isl_space *isl_qpolynomial_fold_get_dim( - __isl_keep isl_qpolynomial_fold *fold) -{ - return isl_qpolynomial_fold_get_space(fold); -} -__isl_give isl_space *isl_pw_qpolynomial_fold_get_dim( - __isl_keep isl_pw_qpolynomial_fold *pwf) -{ - return isl_pw_qpolynomial_fold_get_space(pwf); -} -__isl_give isl_space *isl_union_pw_qpolynomial_get_dim( - __isl_keep isl_union_pw_qpolynomial *upwqp) -{ - return isl_union_pw_qpolynomial_get_space(upwqp); -} -__isl_give isl_space *isl_union_pw_qpolynomial_fold_get_dim( - __isl_keep isl_union_pw_qpolynomial_fold *upwf) -{ - return isl_union_pw_qpolynomial_fold_get_space(upwf); -} diff --git a/cloog-0.17.0/isl/isl_dim_map.c b/cloog-0.17.0/isl/isl_dim_map.c deleted file mode 100644 index 37da3d4..0000000 --- a/cloog-0.17.0/isl/isl_dim_map.c +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010-2011 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include - -struct isl_dim_map_entry { - int pos; - int sgn; -}; - -/* Maps dst positions to src positions */ -struct isl_dim_map { - unsigned len; - struct isl_dim_map_entry m[1]; -}; - -__isl_give isl_dim_map *isl_dim_map_alloc(isl_ctx *ctx, unsigned len) -{ - int i; - struct isl_dim_map *dim_map; - dim_map = isl_alloc(ctx, struct isl_dim_map, - sizeof(struct isl_dim_map) + len * sizeof(struct isl_dim_map_entry)); - if (!dim_map) - return NULL; - dim_map->len = 1 + len; - dim_map->m[0].pos = 0; - dim_map->m[0].sgn = 1; - for (i = 0; i < len; ++i) - dim_map->m[1 + i].sgn = 0; - return dim_map; -} - -void isl_dim_map_range(__isl_keep isl_dim_map *dim_map, - unsigned dst_pos, unsigned dst_stride, - unsigned src_pos, unsigned src_stride, - unsigned n, int sign) -{ - int i; - - if (!dim_map) - return; - - for (i = 0; i < n; ++i) { - unsigned d = 1 + dst_pos + dst_stride * i; - unsigned s = 1 + src_pos + src_stride * i; - dim_map->m[d].pos = s; - dim_map->m[d].sgn = sign; - } -} - -void isl_dim_map_dim_range(__isl_keep isl_dim_map *dim_map, - __isl_keep isl_space *dim, enum isl_dim_type type, - unsigned first, unsigned n, unsigned dst_pos) -{ - int i; - unsigned src_pos; - - if (!dim_map || !dim) - return; - - src_pos = 1 + isl_space_offset(dim, type); - for (i = 0; i < n; ++i) { - dim_map->m[1 + dst_pos + i].pos = src_pos + first + i; - dim_map->m[1 + dst_pos + i].sgn = 1; - } -} - -void isl_dim_map_dim(__isl_keep isl_dim_map *dim_map, __isl_keep isl_space *dim, - enum isl_dim_type type, unsigned dst_pos) -{ - isl_dim_map_dim_range(dim_map, dim, type, - 0, isl_space_dim(dim, type), dst_pos); -} - -void isl_dim_map_div(__isl_keep isl_dim_map *dim_map, - __isl_keep isl_basic_map *bmap, unsigned dst_pos) -{ - int i; - unsigned src_pos; - - if (!dim_map || !bmap) - return; - - src_pos = 1 + isl_space_dim(bmap->dim, isl_dim_all); - for (i = 0; i < bmap->n_div; ++i) { - dim_map->m[1 + dst_pos + i].pos = src_pos + i; - dim_map->m[1 + dst_pos + i].sgn = 1; - } -} - -void isl_dim_map_dump(struct isl_dim_map *dim_map) -{ - int i; - - for (i = 0; i < dim_map->len; ++i) - fprintf(stderr, "%d -> %d * %d; ", i, - dim_map->m[i].sgn, dim_map->m[i].pos); - fprintf(stderr, "\n"); -} - -static void copy_constraint_dim_map(isl_int *dst, isl_int *src, - struct isl_dim_map *dim_map) -{ - int i; - - for (i = 0; i < dim_map->len; ++i) { - if (dim_map->m[i].sgn == 0) - isl_int_set_si(dst[i], 0); - else if (dim_map->m[i].sgn > 0) - isl_int_set(dst[i], src[dim_map->m[i].pos]); - else - isl_int_neg(dst[i], src[dim_map->m[i].pos]); - } -} - -static void copy_div_dim_map(isl_int *dst, isl_int *src, - struct isl_dim_map *dim_map) -{ - isl_int_set(dst[0], src[0]); - copy_constraint_dim_map(dst+1, src+1, dim_map); -} - -__isl_give isl_basic_map *isl_basic_map_add_constraints_dim_map( - __isl_take isl_basic_map *dst, __isl_take isl_basic_map *src, - __isl_take isl_dim_map *dim_map) -{ - int i; - - if (!src || !dst || !dim_map) - goto error; - - for (i = 0; i < src->n_eq; ++i) { - int i1 = isl_basic_map_alloc_equality(dst); - if (i1 < 0) - goto error; - copy_constraint_dim_map(dst->eq[i1], src->eq[i], dim_map); - } - - for (i = 0; i < src->n_ineq; ++i) { - int i1 = isl_basic_map_alloc_inequality(dst); - if (i1 < 0) - goto error; - copy_constraint_dim_map(dst->ineq[i1], src->ineq[i], dim_map); - } - - for (i = 0; i < src->n_div; ++i) { - int i1 = isl_basic_map_alloc_div(dst); - if (i1 < 0) - goto error; - copy_div_dim_map(dst->div[i1], src->div[i], dim_map); - } - - free(dim_map); - isl_basic_map_free(src); - - return dst; -error: - free(dim_map); - isl_basic_map_free(src); - isl_basic_map_free(dst); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_add_constraints_dim_map( - __isl_take isl_basic_set *dst, __isl_take isl_basic_set *src, - __isl_take isl_dim_map *dim_map) -{ - return isl_basic_map_add_constraints_dim_map(dst, src, dim_map); -} - -/* Extend the given dim_map with mappings for the divs in bmap. - */ -__isl_give isl_dim_map *isl_dim_map_extend(__isl_keep isl_dim_map *dim_map, - __isl_keep isl_basic_map *bmap) -{ - int i; - struct isl_dim_map *res; - int offset; - - offset = isl_basic_map_offset(bmap, isl_dim_div); - - res = isl_dim_map_alloc(bmap->ctx, dim_map->len - 1 + bmap->n_div); - if (!res) - return NULL; - - for (i = 0; i < dim_map->len; ++i) - res->m[i] = dim_map->m[i]; - for (i = 0; i < bmap->n_div; ++i) { - res->m[dim_map->len + i].pos = offset + i; - res->m[dim_map->len + i].sgn = 1; - } - - return res; -} - -/* Extract a dim_map from a reordering. - * We essentially need to reverse the mapping, and add an offset - * of 1 for the constant term. - */ -__isl_give isl_dim_map *isl_dim_map_from_reordering( - __isl_keep isl_reordering *exp) -{ - int i; - isl_ctx *ctx; - struct isl_dim_map *dim_map; - - if (!exp) - return NULL; - - ctx = isl_space_get_ctx(exp->dim); - dim_map = isl_dim_map_alloc(ctx, isl_space_dim(exp->dim, isl_dim_all)); - if (!dim_map) - return NULL; - - for (i = 0; i < exp->len; ++i) { - dim_map->m[1 + exp->pos[i]].pos = 1 + i; - dim_map->m[1 + exp->pos[i]].sgn = 1; - } - - return dim_map; -} diff --git a/cloog-0.17.0/isl/isl_dim_map.h b/cloog-0.17.0/isl/isl_dim_map.h deleted file mode 100644 index 0f988c3..0000000 --- a/cloog-0.17.0/isl/isl_dim_map.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef ISL_DIM_MAP_H -#define ISL_DIM_MAP_H - -#include -#include -#include - -struct isl_dim_map; -typedef struct isl_dim_map isl_dim_map; - -__isl_give isl_dim_map *isl_dim_map_alloc(isl_ctx *ctx, unsigned len); -void isl_dim_map_range(__isl_keep isl_dim_map *dim_map, - unsigned dst_pos, unsigned dst_stride, - unsigned src_pos, unsigned src_stride, - unsigned n, int sign); -void isl_dim_map_dim_range(__isl_keep isl_dim_map *dim_map, - isl_space *dim, enum isl_dim_type type, - unsigned first, unsigned n, unsigned dst_pos); -void isl_dim_map_dim(__isl_keep isl_dim_map *dim_map, __isl_keep isl_space *dim, - enum isl_dim_type type, unsigned dst_pos); -void isl_dim_map_div(__isl_keep isl_dim_map *dim_map, - __isl_keep isl_basic_map *bmap, unsigned dst_pos); -__isl_give isl_basic_set *isl_basic_set_add_constraints_dim_map( - __isl_take isl_basic_set *dst, __isl_take isl_basic_set *src, - __isl_take isl_dim_map *dim_map); -__isl_give isl_basic_map *isl_basic_map_add_constraints_dim_map( - __isl_take isl_basic_map *dst, __isl_take isl_basic_map *src, - __isl_take isl_dim_map *dim_map); - -__isl_give isl_dim_map *isl_dim_map_extend(__isl_keep isl_dim_map *dim_map, - __isl_keep isl_basic_map *bmap); - -__isl_give isl_dim_map *isl_dim_map_from_reordering( - __isl_keep isl_reordering *exp); - -#endif diff --git a/cloog-0.17.0/isl/isl_equalities.c b/cloog-0.17.0/isl/isl_equalities.c deleted file mode 100644 index 68d2c89..0000000 --- a/cloog-0.17.0/isl/isl_equalities.c +++ /dev/null @@ -1,697 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include "isl_map_private.h" -#include "isl_equalities.h" - -/* Given a set of modulo constraints - * - * c + A y = 0 mod d - * - * this function computes a particular solution y_0 - * - * The input is given as a matrix B = [ c A ] and a vector d. - * - * The output is matrix containing the solution y_0 or - * a zero-column matrix if the constraints admit no integer solution. - * - * The given set of constrains is equivalent to - * - * c + A y = -D x - * - * with D = diag d and x a fresh set of variables. - * Reducing both c and A modulo d does not change the - * value of y in the solution and may lead to smaller coefficients. - * Let M = [ D A ] and [ H 0 ] = M U, the Hermite normal form of M. - * Then - * [ x ] - * M [ y ] = - c - * and so - * [ x ] - * [ H 0 ] U^{-1} [ y ] = - c - * Let - * [ A ] [ x ] - * [ B ] = U^{-1} [ y ] - * then - * H A + 0 B = -c - * - * so B may be chosen arbitrarily, e.g., B = 0, and then - * - * [ x ] = [ -c ] - * U^{-1} [ y ] = [ 0 ] - * or - * [ x ] [ -c ] - * [ y ] = U [ 0 ] - * specifically, - * - * y = U_{2,1} (-c) - * - * If any of the coordinates of this y are non-integer - * then the constraints admit no integer solution and - * a zero-column matrix is returned. - */ -static struct isl_mat *particular_solution(struct isl_mat *B, struct isl_vec *d) -{ - int i, j; - struct isl_mat *M = NULL; - struct isl_mat *C = NULL; - struct isl_mat *U = NULL; - struct isl_mat *H = NULL; - struct isl_mat *cst = NULL; - struct isl_mat *T = NULL; - - M = isl_mat_alloc(B->ctx, B->n_row, B->n_row + B->n_col - 1); - C = isl_mat_alloc(B->ctx, 1 + B->n_row, 1); - if (!M || !C) - goto error; - isl_int_set_si(C->row[0][0], 1); - for (i = 0; i < B->n_row; ++i) { - isl_seq_clr(M->row[i], B->n_row); - isl_int_set(M->row[i][i], d->block.data[i]); - isl_int_neg(C->row[1 + i][0], B->row[i][0]); - isl_int_fdiv_r(C->row[1+i][0], C->row[1+i][0], M->row[i][i]); - for (j = 0; j < B->n_col - 1; ++j) - isl_int_fdiv_r(M->row[i][B->n_row + j], - B->row[i][1 + j], M->row[i][i]); - } - M = isl_mat_left_hermite(M, 0, &U, NULL); - if (!M || !U) - goto error; - H = isl_mat_sub_alloc(M, 0, B->n_row, 0, B->n_row); - H = isl_mat_lin_to_aff(H); - C = isl_mat_inverse_product(H, C); - if (!C) - goto error; - for (i = 0; i < B->n_row; ++i) { - if (!isl_int_is_divisible_by(C->row[1+i][0], C->row[0][0])) - break; - isl_int_divexact(C->row[1+i][0], C->row[1+i][0], C->row[0][0]); - } - if (i < B->n_row) - cst = isl_mat_alloc(B->ctx, B->n_row, 0); - else - cst = isl_mat_sub_alloc(C, 1, B->n_row, 0, 1); - T = isl_mat_sub_alloc(U, B->n_row, B->n_col - 1, 0, B->n_row); - cst = isl_mat_product(T, cst); - isl_mat_free(M); - isl_mat_free(C); - isl_mat_free(U); - return cst; -error: - isl_mat_free(M); - isl_mat_free(C); - isl_mat_free(U); - return NULL; -} - -/* Compute and return the matrix - * - * U_1^{-1} diag(d_1, 1, ..., 1) - * - * with U_1 the unimodular completion of the first (and only) row of B. - * The columns of this matrix generate the lattice that satisfies - * the single (linear) modulo constraint. - */ -static struct isl_mat *parameter_compression_1( - struct isl_mat *B, struct isl_vec *d) -{ - struct isl_mat *U; - - U = isl_mat_alloc(B->ctx, B->n_col - 1, B->n_col - 1); - if (!U) - return NULL; - isl_seq_cpy(U->row[0], B->row[0] + 1, B->n_col - 1); - U = isl_mat_unimodular_complete(U, 1); - U = isl_mat_right_inverse(U); - if (!U) - return NULL; - isl_mat_col_mul(U, 0, d->block.data[0], 0); - U = isl_mat_lin_to_aff(U); - return U; -} - -/* Compute a common lattice of solutions to the linear modulo - * constraints specified by B and d. - * See also the documentation of isl_mat_parameter_compression. - * We put the matrix - * - * A = [ L_1^{-T} L_2^{-T} ... L_k^{-T} ] - * - * on a common denominator. This denominator D is the lcm of modulos d. - * Since L_i = U_i^{-1} diag(d_i, 1, ... 1), we have - * L_i^{-T} = U_i^T diag(d_i, 1, ... 1)^{-T} = U_i^T diag(1/d_i, 1, ..., 1). - * Putting this on the common denominator, we have - * D * L_i^{-T} = U_i^T diag(D/d_i, D, ..., D). - */ -static struct isl_mat *parameter_compression_multi( - struct isl_mat *B, struct isl_vec *d) -{ - int i, j, k; - isl_int D; - struct isl_mat *A = NULL, *U = NULL; - struct isl_mat *T; - unsigned size; - - isl_int_init(D); - - isl_vec_lcm(d, &D); - - size = B->n_col - 1; - A = isl_mat_alloc(B->ctx, size, B->n_row * size); - U = isl_mat_alloc(B->ctx, size, size); - if (!U || !A) - goto error; - for (i = 0; i < B->n_row; ++i) { - isl_seq_cpy(U->row[0], B->row[i] + 1, size); - U = isl_mat_unimodular_complete(U, 1); - if (!U) - goto error; - isl_int_divexact(D, D, d->block.data[i]); - for (k = 0; k < U->n_col; ++k) - isl_int_mul(A->row[k][i*size+0], D, U->row[0][k]); - isl_int_mul(D, D, d->block.data[i]); - for (j = 1; j < U->n_row; ++j) - for (k = 0; k < U->n_col; ++k) - isl_int_mul(A->row[k][i*size+j], - D, U->row[j][k]); - } - A = isl_mat_left_hermite(A, 0, NULL, NULL); - T = isl_mat_sub_alloc(A, 0, A->n_row, 0, A->n_row); - T = isl_mat_lin_to_aff(T); - if (!T) - goto error; - isl_int_set(T->row[0][0], D); - T = isl_mat_right_inverse(T); - if (!T) - goto error; - isl_assert(T->ctx, isl_int_is_one(T->row[0][0]), goto error); - T = isl_mat_transpose(T); - isl_mat_free(A); - isl_mat_free(U); - - isl_int_clear(D); - return T; -error: - isl_mat_free(A); - isl_mat_free(U); - isl_int_clear(D); - return NULL; -} - -/* Given a set of modulo constraints - * - * c + A y = 0 mod d - * - * this function returns an affine transformation T, - * - * y = T y' - * - * that bijectively maps the integer vectors y' to integer - * vectors y that satisfy the modulo constraints. - * - * This function is inspired by Section 2.5.3 - * of B. Meister, "Stating and Manipulating Periodicity in the Polytope - * Model. Applications to Program Analysis and Optimization". - * However, the implementation only follows the algorithm of that - * section for computing a particular solution and not for computing - * a general homogeneous solution. The latter is incomplete and - * may remove some valid solutions. - * Instead, we use an adaptation of the algorithm in Section 7 of - * B. Meister, S. Verdoolaege, "Polynomial Approximations in the Polytope - * Model: Bringing the Power of Quasi-Polynomials to the Masses". - * - * The input is given as a matrix B = [ c A ] and a vector d. - * Each element of the vector d corresponds to a row in B. - * The output is a lower triangular matrix. - * If no integer vector y satisfies the given constraints then - * a matrix with zero columns is returned. - * - * We first compute a particular solution y_0 to the given set of - * modulo constraints in particular_solution. If no such solution - * exists, then we return a zero-columned transformation matrix. - * Otherwise, we compute the generic solution to - * - * A y = 0 mod d - * - * That is we want to compute G such that - * - * y = G y'' - * - * with y'' integer, describes the set of solutions. - * - * We first remove the common factors of each row. - * In particular if gcd(A_i,d_i) != 1, then we divide the whole - * row i (including d_i) by this common factor. If afterwards gcd(A_i) != 1, - * then we divide this row of A by the common factor, unless gcd(A_i) = 0. - * In the later case, we simply drop the row (in both A and d). - * - * If there are no rows left in A, then G is the identity matrix. Otherwise, - * for each row i, we now determine the lattice of integer vectors - * that satisfies this row. Let U_i be the unimodular extension of the - * row A_i. This unimodular extension exists because gcd(A_i) = 1. - * The first component of - * - * y' = U_i y - * - * needs to be a multiple of d_i. Let y' = diag(d_i, 1, ..., 1) y''. - * Then, - * - * y = U_i^{-1} diag(d_i, 1, ..., 1) y'' - * - * for arbitrary integer vectors y''. That is, y belongs to the lattice - * generated by the columns of L_i = U_i^{-1} diag(d_i, 1, ..., 1). - * If there is only one row, then G = L_1. - * - * If there is more than one row left, we need to compute the intersection - * of the lattices. That is, we need to compute an L such that - * - * L = L_i L_i' for all i - * - * with L_i' some integer matrices. Let A be constructed as follows - * - * A = [ L_1^{-T} L_2^{-T} ... L_k^{-T} ] - * - * and computed the Hermite Normal Form of A = [ H 0 ] U - * Then, - * - * L_i^{-T} = H U_{1,i} - * - * or - * - * H^{-T} = L_i U_{1,i}^T - * - * In other words G = L = H^{-T}. - * To ensure that G is lower triangular, we compute and use its Hermite - * normal form. - * - * The affine transformation matrix returned is then - * - * [ 1 0 ] - * [ y_0 G ] - * - * as any y = y_0 + G y' with y' integer is a solution to the original - * modulo constraints. - */ -struct isl_mat *isl_mat_parameter_compression( - struct isl_mat *B, struct isl_vec *d) -{ - int i; - struct isl_mat *cst = NULL; - struct isl_mat *T = NULL; - isl_int D; - - if (!B || !d) - goto error; - isl_assert(B->ctx, B->n_row == d->size, goto error); - cst = particular_solution(B, d); - if (!cst) - goto error; - if (cst->n_col == 0) { - T = isl_mat_alloc(B->ctx, B->n_col, 0); - isl_mat_free(cst); - isl_mat_free(B); - isl_vec_free(d); - return T; - } - isl_int_init(D); - /* Replace a*g*row = 0 mod g*m by row = 0 mod m */ - for (i = 0; i < B->n_row; ++i) { - isl_seq_gcd(B->row[i] + 1, B->n_col - 1, &D); - if (isl_int_is_one(D)) - continue; - if (isl_int_is_zero(D)) { - B = isl_mat_drop_rows(B, i, 1); - d = isl_vec_cow(d); - if (!B || !d) - goto error2; - isl_seq_cpy(d->block.data+i, d->block.data+i+1, - d->size - (i+1)); - d->size--; - i--; - continue; - } - B = isl_mat_cow(B); - if (!B) - goto error2; - isl_seq_scale_down(B->row[i] + 1, B->row[i] + 1, D, B->n_col-1); - isl_int_gcd(D, D, d->block.data[i]); - d = isl_vec_cow(d); - if (!d) - goto error2; - isl_int_divexact(d->block.data[i], d->block.data[i], D); - } - isl_int_clear(D); - if (B->n_row == 0) - T = isl_mat_identity(B->ctx, B->n_col); - else if (B->n_row == 1) - T = parameter_compression_1(B, d); - else - T = parameter_compression_multi(B, d); - T = isl_mat_left_hermite(T, 0, NULL, NULL); - if (!T) - goto error; - isl_mat_sub_copy(T->ctx, T->row + 1, cst->row, cst->n_row, 0, 0, 1); - isl_mat_free(cst); - isl_mat_free(B); - isl_vec_free(d); - return T; -error2: - isl_int_clear(D); -error: - isl_mat_free(cst); - isl_mat_free(B); - isl_vec_free(d); - return NULL; -} - -/* Given a set of equalities - * - * M x - c = 0 - * - * this function computes a unimodular transformation from a lower-dimensional - * space to the original space that bijectively maps the integer points x' - * in the lower-dimensional space to the integer points x in the original - * space that satisfy the equalities. - * - * The input is given as a matrix B = [ -c M ] and the output is a - * matrix that maps [1 x'] to [1 x]. - * If T2 is not NULL, then *T2 is set to a matrix mapping [1 x] to [1 x']. - * - * First compute the (left) Hermite normal form of M, - * - * M [U1 U2] = M U = H = [H1 0] - * or - * M = H Q = [H1 0] [Q1] - * [Q2] - * - * with U, Q unimodular, Q = U^{-1} (and H lower triangular). - * Define the transformed variables as - * - * x = [U1 U2] [ x1' ] = [U1 U2] [Q1] x - * [ x2' ] [Q2] - * - * The equalities then become - * - * H1 x1' - c = 0 or x1' = H1^{-1} c = c' - * - * If any of the c' is non-integer, then the original set has no - * integer solutions (since the x' are a unimodular transformation - * of the x) and a zero-column matrix is returned. - * Otherwise, the transformation is given by - * - * x = U1 H1^{-1} c + U2 x2' - * - * The inverse transformation is simply - * - * x2' = Q2 x - */ -struct isl_mat *isl_mat_variable_compression(struct isl_mat *B, - struct isl_mat **T2) -{ - int i; - struct isl_mat *H = NULL, *C = NULL, *H1, *U = NULL, *U1, *U2, *TC; - unsigned dim; - - if (T2) - *T2 = NULL; - if (!B) - goto error; - - dim = B->n_col - 1; - H = isl_mat_sub_alloc(B, 0, B->n_row, 1, dim); - H = isl_mat_left_hermite(H, 0, &U, T2); - if (!H || !U || (T2 && !*T2)) - goto error; - if (T2) { - *T2 = isl_mat_drop_rows(*T2, 0, B->n_row); - *T2 = isl_mat_lin_to_aff(*T2); - if (!*T2) - goto error; - } - C = isl_mat_alloc(B->ctx, 1+B->n_row, 1); - if (!C) - goto error; - isl_int_set_si(C->row[0][0], 1); - isl_mat_sub_neg(C->ctx, C->row+1, B->row, B->n_row, 0, 0, 1); - H1 = isl_mat_sub_alloc(H, 0, H->n_row, 0, H->n_row); - H1 = isl_mat_lin_to_aff(H1); - TC = isl_mat_inverse_product(H1, C); - if (!TC) - goto error; - isl_mat_free(H); - if (!isl_int_is_one(TC->row[0][0])) { - for (i = 0; i < B->n_row; ++i) { - if (!isl_int_is_divisible_by(TC->row[1+i][0], TC->row[0][0])) { - struct isl_ctx *ctx = B->ctx; - isl_mat_free(B); - isl_mat_free(TC); - isl_mat_free(U); - if (T2) { - isl_mat_free(*T2); - *T2 = NULL; - } - return isl_mat_alloc(ctx, 1 + dim, 0); - } - isl_seq_scale_down(TC->row[1+i], TC->row[1+i], TC->row[0][0], 1); - } - isl_int_set_si(TC->row[0][0], 1); - } - U1 = isl_mat_sub_alloc(U, 0, U->n_row, 0, B->n_row); - U1 = isl_mat_lin_to_aff(U1); - U2 = isl_mat_sub_alloc(U, 0, U->n_row, B->n_row, U->n_row - B->n_row); - U2 = isl_mat_lin_to_aff(U2); - isl_mat_free(U); - TC = isl_mat_product(U1, TC); - TC = isl_mat_aff_direct_sum(TC, U2); - - isl_mat_free(B); - - return TC; -error: - isl_mat_free(B); - isl_mat_free(H); - isl_mat_free(U); - if (T2) { - isl_mat_free(*T2); - *T2 = NULL; - } - return NULL; -} - -/* Use the n equalities of bset to unimodularly transform the - * variables x such that n transformed variables x1' have a constant value - * and rewrite the constraints of bset in terms of the remaining - * transformed variables x2'. The matrix pointed to by T maps - * the new variables x2' back to the original variables x, while T2 - * maps the original variables to the new variables. - */ -static struct isl_basic_set *compress_variables( - struct isl_basic_set *bset, struct isl_mat **T, struct isl_mat **T2) -{ - struct isl_mat *B, *TC; - unsigned dim; - - if (T) - *T = NULL; - if (T2) - *T2 = NULL; - if (!bset) - goto error; - isl_assert(bset->ctx, isl_basic_set_n_param(bset) == 0, goto error); - isl_assert(bset->ctx, bset->n_div == 0, goto error); - dim = isl_basic_set_n_dim(bset); - isl_assert(bset->ctx, bset->n_eq <= dim, goto error); - if (bset->n_eq == 0) - return bset; - - B = isl_mat_sub_alloc6(bset->ctx, bset->eq, 0, bset->n_eq, 0, 1 + dim); - TC = isl_mat_variable_compression(B, T2); - if (!TC) - goto error; - if (TC->n_col == 0) { - isl_mat_free(TC); - if (T2) { - isl_mat_free(*T2); - *T2 = NULL; - } - return isl_basic_set_set_to_empty(bset); - } - - bset = isl_basic_set_preimage(bset, T ? isl_mat_copy(TC) : TC); - if (T) - *T = TC; - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -struct isl_basic_set *isl_basic_set_remove_equalities( - struct isl_basic_set *bset, struct isl_mat **T, struct isl_mat **T2) -{ - if (T) - *T = NULL; - if (T2) - *T2 = NULL; - if (!bset) - return NULL; - isl_assert(bset->ctx, isl_basic_set_n_param(bset) == 0, goto error); - bset = isl_basic_set_gauss(bset, NULL); - if (ISL_F_ISSET(bset, ISL_BASIC_SET_EMPTY)) - return bset; - bset = compress_variables(bset, T, T2); - return bset; -error: - isl_basic_set_free(bset); - *T = NULL; - return NULL; -} - -/* Check if dimension dim belongs to a residue class - * i_dim \equiv r mod m - * with m != 1 and if so return m in *modulo and r in *residue. - * As a special case, when i_dim has a fixed value v, then - * *modulo is set to 0 and *residue to v. - * - * If i_dim does not belong to such a residue class, then *modulo - * is set to 1 and *residue is set to 0. - */ -int isl_basic_set_dim_residue_class(struct isl_basic_set *bset, - int pos, isl_int *modulo, isl_int *residue) -{ - struct isl_ctx *ctx; - struct isl_mat *H = NULL, *U = NULL, *C, *H1, *U1; - unsigned total; - unsigned nparam; - - if (!bset || !modulo || !residue) - return -1; - - if (isl_basic_set_plain_dim_is_fixed(bset, pos, residue)) { - isl_int_set_si(*modulo, 0); - return 0; - } - - ctx = bset->ctx; - total = isl_basic_set_total_dim(bset); - nparam = isl_basic_set_n_param(bset); - H = isl_mat_sub_alloc6(bset->ctx, bset->eq, 0, bset->n_eq, 1, total); - H = isl_mat_left_hermite(H, 0, &U, NULL); - if (!H) - return -1; - - isl_seq_gcd(U->row[nparam + pos]+bset->n_eq, - total-bset->n_eq, modulo); - if (isl_int_is_zero(*modulo)) - isl_int_set_si(*modulo, 1); - if (isl_int_is_one(*modulo)) { - isl_int_set_si(*residue, 0); - isl_mat_free(H); - isl_mat_free(U); - return 0; - } - - C = isl_mat_alloc(bset->ctx, 1+bset->n_eq, 1); - if (!C) - goto error; - isl_int_set_si(C->row[0][0], 1); - isl_mat_sub_neg(C->ctx, C->row+1, bset->eq, bset->n_eq, 0, 0, 1); - H1 = isl_mat_sub_alloc(H, 0, H->n_row, 0, H->n_row); - H1 = isl_mat_lin_to_aff(H1); - C = isl_mat_inverse_product(H1, C); - isl_mat_free(H); - U1 = isl_mat_sub_alloc(U, nparam+pos, 1, 0, bset->n_eq); - U1 = isl_mat_lin_to_aff(U1); - isl_mat_free(U); - C = isl_mat_product(U1, C); - if (!C) - goto error; - if (!isl_int_is_divisible_by(C->row[1][0], C->row[0][0])) { - bset = isl_basic_set_copy(bset); - bset = isl_basic_set_set_to_empty(bset); - isl_basic_set_free(bset); - isl_int_set_si(*modulo, 1); - isl_int_set_si(*residue, 0); - return 0; - } - isl_int_divexact(*residue, C->row[1][0], C->row[0][0]); - isl_int_fdiv_r(*residue, *residue, *modulo); - isl_mat_free(C); - return 0; -error: - isl_mat_free(H); - isl_mat_free(U); - return -1; -} - -/* Check if dimension dim belongs to a residue class - * i_dim \equiv r mod m - * with m != 1 and if so return m in *modulo and r in *residue. - * As a special case, when i_dim has a fixed value v, then - * *modulo is set to 0 and *residue to v. - * - * If i_dim does not belong to such a residue class, then *modulo - * is set to 1 and *residue is set to 0. - */ -int isl_set_dim_residue_class(struct isl_set *set, - int pos, isl_int *modulo, isl_int *residue) -{ - isl_int m; - isl_int r; - int i; - - if (!set || !modulo || !residue) - return -1; - - if (set->n == 0) { - isl_int_set_si(*modulo, 0); - isl_int_set_si(*residue, 0); - return 0; - } - - if (isl_basic_set_dim_residue_class(set->p[0], pos, modulo, residue)<0) - return -1; - - if (set->n == 1) - return 0; - - if (isl_int_is_one(*modulo)) - return 0; - - isl_int_init(m); - isl_int_init(r); - - for (i = 1; i < set->n; ++i) { - if (isl_basic_set_dim_residue_class(set->p[0], pos, &m, &r) < 0) - goto error; - isl_int_gcd(*modulo, *modulo, m); - if (!isl_int_is_zero(*modulo)) - isl_int_fdiv_r(*residue, *residue, *modulo); - if (isl_int_is_one(*modulo)) - break; - if (!isl_int_is_zero(*modulo)) - isl_int_fdiv_r(r, r, *modulo); - if (isl_int_ne(*residue, r)) { - isl_int_set_si(*modulo, 1); - isl_int_set_si(*residue, 0); - break; - } - } - - isl_int_clear(m); - isl_int_clear(r); - - return 0; -error: - isl_int_clear(m); - isl_int_clear(r); - return -1; -} diff --git a/cloog-0.17.0/isl/isl_equalities.h b/cloog-0.17.0/isl/isl_equalities.h deleted file mode 100644 index ceb5544..0000000 --- a/cloog-0.17.0/isl/isl_equalities.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_EQUALITIES_H -#define ISL_EQUALITIES_H - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_mat *isl_mat_variable_compression( - struct isl_mat *B, struct isl_mat **T2); -struct isl_mat *isl_mat_parameter_compression( - struct isl_mat *B, struct isl_vec *d); -struct isl_basic_set *isl_basic_set_remove_equalities( - struct isl_basic_set *bset, struct isl_mat **T, struct isl_mat **T2); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/isl_factorization.c b/cloog-0.17.0/isl/isl_factorization.c deleted file mode 100644 index 64d6b30..0000000 --- a/cloog-0.17.0/isl/isl_factorization.c +++ /dev/null @@ -1,331 +0,0 @@ -/* - * Copyright 2005-2007 Universiteit Leiden - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, Leiden Institute of Advanced Computer Science, - * Universiteit Leiden, Niels Bohrweg 1, 2333 CA Leiden, The Netherlands - * and K.U.Leuven, Departement Computerwetenschappen, Celestijnenlaan 200A, - * B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include - -static __isl_give isl_factorizer *isl_factorizer_alloc( - __isl_take isl_morph *morph, int n_group) -{ - isl_factorizer *f = NULL; - int *len = NULL; - - if (!morph) - return NULL; - - if (n_group > 0) { - len = isl_alloc_array(morph->dom->ctx, int, n_group); - if (!len) - goto error; - } - - f = isl_alloc_type(morph->dom->ctx, struct isl_factorizer); - if (!f) - goto error; - - f->morph = morph; - f->n_group = n_group; - f->len = len; - - return f; -error: - free(len); - isl_morph_free(morph); - return NULL; -} - -void isl_factorizer_free(__isl_take isl_factorizer *f) -{ - if (!f) - return; - - isl_morph_free(f->morph); - free(f->len); - free(f); -} - -void isl_factorizer_dump(__isl_take isl_factorizer *f, FILE *out) -{ - int i; - - if (!f) - return; - - isl_morph_dump(f->morph, out); - fprintf(out, "["); - for (i = 0; i < f->n_group; ++i) { - if (i) - fprintf(out, ", "); - fprintf(out, "%d", f->len[i]); - } - fprintf(out, "]\n"); -} - -__isl_give isl_factorizer *isl_factorizer_identity(__isl_keep isl_basic_set *bset) -{ - return isl_factorizer_alloc(isl_morph_identity(bset), 0); -} - -__isl_give isl_factorizer *isl_factorizer_groups(__isl_keep isl_basic_set *bset, - __isl_take isl_mat *Q, __isl_take isl_mat *U, int n, int *len) -{ - int i; - unsigned nvar; - unsigned ovar; - isl_space *dim; - isl_basic_set *dom; - isl_basic_set *ran; - isl_morph *morph; - isl_factorizer *f; - isl_mat *id; - - if (!bset || !Q || !U) - goto error; - - ovar = 1 + isl_space_offset(bset->dim, isl_dim_set); - id = isl_mat_identity(bset->ctx, ovar); - Q = isl_mat_diagonal(isl_mat_copy(id), Q); - U = isl_mat_diagonal(id, U); - - nvar = isl_basic_set_dim(bset, isl_dim_set); - dim = isl_basic_set_get_space(bset); - dom = isl_basic_set_universe(isl_space_copy(dim)); - dim = isl_space_drop_dims(dim, isl_dim_set, 0, nvar); - dim = isl_space_add_dims(dim, isl_dim_set, nvar); - ran = isl_basic_set_universe(dim); - morph = isl_morph_alloc(dom, ran, Q, U); - f = isl_factorizer_alloc(morph, n); - if (!f) - return NULL; - for (i = 0; i < n; ++i) - f->len[i] = len[i]; - return f; -error: - isl_mat_free(Q); - isl_mat_free(U); - return NULL; -} - -struct isl_factor_groups { - int *pos; /* for each column: row position of pivot */ - int *group; /* group to which a column belongs */ - int *cnt; /* number of columns in the group */ - int *rowgroup; /* group to which a constraint belongs */ -}; - -/* Initialize isl_factor_groups structure: find pivot row positions, - * each column initially belongs to its own group and the groups - * of the constraints are still unknown. - */ -static int init_groups(struct isl_factor_groups *g, __isl_keep isl_mat *H) -{ - int i, j; - - if (!H) - return -1; - - g->pos = isl_alloc_array(H->ctx, int, H->n_col); - g->group = isl_alloc_array(H->ctx, int, H->n_col); - g->cnt = isl_alloc_array(H->ctx, int, H->n_col); - g->rowgroup = isl_alloc_array(H->ctx, int, H->n_row); - - if (!g->pos || !g->group || !g->cnt || !g->rowgroup) - return -1; - - for (i = 0; i < H->n_row; ++i) - g->rowgroup[i] = -1; - for (i = 0, j = 0; i < H->n_col; ++i) { - for ( ; j < H->n_row; ++j) - if (!isl_int_is_zero(H->row[j][i])) - break; - g->pos[i] = j; - } - for (i = 0; i < H->n_col; ++i) { - g->group[i] = i; - g->cnt[i] = 1; - } - - return 0; -} - -/* Update group[k] to the group column k belongs to. - * When merging two groups, only the group of the current - * group leader is changed. Here we change the group of - * the other members to also point to the group that the - * old group leader now points to. - */ -static void update_group(struct isl_factor_groups *g, int k) -{ - int p = g->group[k]; - while (g->cnt[p] == 0) - p = g->group[p]; - g->group[k] = p; -} - -/* Merge group i with all groups of the subsequent columns - * with non-zero coefficients in row j of H. - * (The previous columns are all zero; otherwise we would have handled - * the row before.) - */ -static int update_group_i_with_row_j(struct isl_factor_groups *g, int i, int j, - __isl_keep isl_mat *H) -{ - int k; - - g->rowgroup[j] = g->group[i]; - for (k = i + 1; k < H->n_col && j >= g->pos[k]; ++k) { - update_group(g, k); - update_group(g, i); - if (g->group[k] != g->group[i] && - !isl_int_is_zero(H->row[j][k])) { - isl_assert(H->ctx, g->cnt[g->group[k]] != 0, return -1); - isl_assert(H->ctx, g->cnt[g->group[i]] != 0, return -1); - if (g->group[i] < g->group[k]) { - g->cnt[g->group[i]] += g->cnt[g->group[k]]; - g->cnt[g->group[k]] = 0; - g->group[g->group[k]] = g->group[i]; - } else { - g->cnt[g->group[k]] += g->cnt[g->group[i]]; - g->cnt[g->group[i]] = 0; - g->group[g->group[i]] = g->group[k]; - } - } - } - - return 0; -} - -/* Update the group information based on the constraint matrix. - */ -static int update_groups(struct isl_factor_groups *g, __isl_keep isl_mat *H) -{ - int i, j; - - for (i = 0; i < H->n_col && g->cnt[0] < H->n_col; ++i) { - if (g->pos[i] == H->n_row) - continue; /* A line direction */ - if (g->rowgroup[g->pos[i]] == -1) - g->rowgroup[g->pos[i]] = i; - for (j = g->pos[i] + 1; j < H->n_row; ++j) { - if (isl_int_is_zero(H->row[j][i])) - continue; - if (g->rowgroup[j] != -1) - continue; - if (update_group_i_with_row_j(g, i, j, H) < 0) - return -1; - } - } - for (i = 1; i < H->n_col; ++i) - update_group(g, i); - - return 0; -} - -static void clear_groups(struct isl_factor_groups *g) -{ - if (!g) - return; - free(g->pos); - free(g->group); - free(g->cnt); - free(g->rowgroup); -} - -/* Determine if the set variables of the basic set can be factorized and - * return the results in an isl_factorizer. - * - * The algorithm works by first computing the Hermite normal form - * and then grouping columns linked by one or more constraints together, - * where a constraints "links" two or more columns if the constraint - * has nonzero coefficients in the columns. - */ -__isl_give isl_factorizer *isl_basic_set_factorizer( - __isl_keep isl_basic_set *bset) -{ - int i, j, n, done; - isl_mat *H, *U, *Q; - unsigned nvar; - struct isl_factor_groups g = { 0 }; - isl_factorizer *f; - - if (!bset) - return NULL; - - isl_assert(bset->ctx, isl_basic_set_dim(bset, isl_dim_div) == 0, - return NULL); - - nvar = isl_basic_set_dim(bset, isl_dim_set); - if (nvar <= 1) - return isl_factorizer_identity(bset); - - H = isl_mat_alloc(bset->ctx, bset->n_eq + bset->n_ineq, nvar); - if (!H) - return NULL; - isl_mat_sub_copy(bset->ctx, H->row, bset->eq, bset->n_eq, - 0, 1 + isl_space_offset(bset->dim, isl_dim_set), nvar); - isl_mat_sub_copy(bset->ctx, H->row + bset->n_eq, bset->ineq, bset->n_ineq, - 0, 1 + isl_space_offset(bset->dim, isl_dim_set), nvar); - H = isl_mat_left_hermite(H, 0, &U, &Q); - - if (init_groups(&g, H) < 0) - goto error; - if (update_groups(&g, H) < 0) - goto error; - - if (g.cnt[0] == nvar) { - isl_mat_free(H); - isl_mat_free(U); - isl_mat_free(Q); - clear_groups(&g); - - return isl_factorizer_identity(bset); - } - - done = 0; - n = 0; - while (done != nvar) { - int group = g.group[done]; - for (i = 1; i < g.cnt[group]; ++i) { - if (g.group[done + i] == group) - continue; - for (j = done + g.cnt[group]; j < nvar; ++j) - if (g.group[j] == group) - break; - if (j == nvar) - isl_die(bset->ctx, isl_error_internal, - "internal error", goto error); - g.group[j] = g.group[done + i]; - Q = isl_mat_swap_rows(Q, done + i, j); - U = isl_mat_swap_cols(U, done + i, j); - } - done += g.cnt[group]; - g.pos[n++] = g.cnt[group]; - } - - f = isl_factorizer_groups(bset, Q, U, n, g.pos); - - isl_mat_free(H); - clear_groups(&g); - - return f; -error: - isl_mat_free(H); - isl_mat_free(U); - isl_mat_free(Q); - clear_groups(&g); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_factorization.h b/cloog-0.17.0/isl/isl_factorization.h deleted file mode 100644 index f0d3518..0000000 --- a/cloog-0.17.0/isl/isl_factorization.h +++ /dev/null @@ -1,29 +0,0 @@ -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Data for factorizing a particular basic set. - * After applying "morph" to the basic set, there are "n_group" - * groups of consecutive set variables, each of length "len[i]", - * with 0 <= i < n_group. - * If no factorization is possible, then "n_group" is set to 0. - */ -struct isl_factorizer { - isl_morph *morph; - int n_group; - int *len; -}; -typedef struct isl_factorizer isl_factorizer; - -__isl_give isl_factorizer *isl_basic_set_factorizer( - __isl_keep isl_basic_set *bset); - -void isl_factorizer_free(__isl_take isl_factorizer *f); -void isl_factorizer_dump(__isl_take isl_factorizer *f, FILE *out); - -#if defined(__cplusplus) -} -#endif diff --git a/cloog-0.17.0/isl/isl_farkas.c b/cloog-0.17.0/isl/isl_farkas.c deleted file mode 100644 index 9f6a462..0000000 --- a/cloog-0.17.0/isl/isl_farkas.c +++ /dev/null @@ -1,385 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include - -/* - * Let C be a cone and define - * - * C' := { y | forall x in C : y x >= 0 } - * - * C' contains the coefficients of all linear constraints - * that are valid for C. - * Furthermore, C'' = C. - * - * If C is defined as { x | A x >= 0 } - * then any element in C' must be a non-negative combination - * of the rows of A, i.e., y = t A with t >= 0. That is, - * - * C' = { y | exists t >= 0 : y = t A } - * - * If any of the rows in A actually represents an equality, then - * also negative combinations of this row are allowed and so the - * non-negativity constraint on the corresponding element of t - * can be dropped. - * - * A polyhedron P = { x | b + A x >= 0 } can be represented - * in homogeneous coordinates by the cone - * C = { [z,x] | b z + A x >= and z >= 0 } - * The valid linear constraints on C correspond to the valid affine - * constraints on P. - * This is essentially Farkas' lemma. - * - * Let A' = [b A], then, since - * [ 1 0 ] - * [ w y ] = [t_0 t] [ b A ] - * - * we have - * - * C' = { w, y | exists t_0, t >= 0 : y = t A' and w = t_0 + t b } - * or - * - * C' = { w, y | exists t >= 0 : y = t A' and w - t b >= 0 } - * - * In practice, we introduce an extra variable (w), shifting all - * other variables to the right, and an extra inequality - * (w - t b >= 0) corresponding to the positivity constraint on - * the homogeneous coordinate. - * - * When going back from coefficients to solutions, we immediately - * plug in 1 for z, which corresponds to shifting all variables - * to the left, with the leftmost ending up in the constant position. - */ - -/* Add the given prefix to all named isl_dim_set dimensions in "dim". - */ -static __isl_give isl_space *isl_space_prefix(__isl_take isl_space *dim, - const char *prefix) -{ - int i; - isl_ctx *ctx; - unsigned nvar; - size_t prefix_len = strlen(prefix); - - if (!dim) - return NULL; - - ctx = isl_space_get_ctx(dim); - nvar = isl_space_dim(dim, isl_dim_set); - - for (i = 0; i < nvar; ++i) { - const char *name; - char *prefix_name; - - name = isl_space_get_dim_name(dim, isl_dim_set, i); - if (!name) - continue; - - prefix_name = isl_alloc_array(ctx, char, - prefix_len + strlen(name) + 1); - if (!prefix_name) - goto error; - memcpy(prefix_name, prefix, prefix_len); - strcpy(prefix_name + prefix_len, name); - - dim = isl_space_set_dim_name(dim, isl_dim_set, i, prefix_name); - free(prefix_name); - } - - return dim; -error: - isl_space_free(dim); - return NULL; -} - -/* Given a dimension specification of the solutions space, construct - * a dimension specification for the space of coefficients. - * - * In particular transform - * - * [params] -> { S } - * - * to - * - * { coefficients[[cst, params] -> S] } - * - * and prefix each dimension name with "c_". - */ -static __isl_give isl_space *isl_space_coefficients(__isl_take isl_space *dim) -{ - isl_space *dim_param; - unsigned nvar; - unsigned nparam; - - nvar = isl_space_dim(dim, isl_dim_set); - nparam = isl_space_dim(dim, isl_dim_param); - dim_param = isl_space_copy(dim); - dim_param = isl_space_drop_dims(dim_param, isl_dim_set, 0, nvar); - dim_param = isl_space_move_dims(dim_param, isl_dim_set, 0, - isl_dim_param, 0, nparam); - dim_param = isl_space_prefix(dim_param, "c_"); - dim_param = isl_space_insert_dims(dim_param, isl_dim_set, 0, 1); - dim_param = isl_space_set_dim_name(dim_param, isl_dim_set, 0, "c_cst"); - dim = isl_space_drop_dims(dim, isl_dim_param, 0, nparam); - dim = isl_space_prefix(dim, "c_"); - dim = isl_space_join(isl_space_from_domain(dim_param), - isl_space_from_range(dim)); - dim = isl_space_wrap(dim); - dim = isl_space_set_tuple_name(dim, isl_dim_set, "coefficients"); - - return dim; -} - -/* Drop the given prefix from all named dimensions of type "type" in "dim". - */ -static __isl_give isl_space *isl_space_unprefix(__isl_take isl_space *dim, - enum isl_dim_type type, const char *prefix) -{ - int i; - unsigned n; - size_t prefix_len = strlen(prefix); - - n = isl_space_dim(dim, type); - - for (i = 0; i < n; ++i) { - const char *name; - - name = isl_space_get_dim_name(dim, type, i); - if (!name) - continue; - if (strncmp(name, prefix, prefix_len)) - continue; - - dim = isl_space_set_dim_name(dim, type, i, name + prefix_len); - } - - return dim; -} - -/* Given a dimension specification of the space of coefficients, construct - * a dimension specification for the space of solutions. - * - * In particular transform - * - * { coefficients[[cst, params] -> S] } - * - * to - * - * [params] -> { S } - * - * and drop the "c_" prefix from the dimension names. - */ -static __isl_give isl_space *isl_space_solutions(__isl_take isl_space *dim) -{ - unsigned nparam; - - dim = isl_space_unwrap(dim); - dim = isl_space_drop_dims(dim, isl_dim_in, 0, 1); - dim = isl_space_unprefix(dim, isl_dim_in, "c_"); - dim = isl_space_unprefix(dim, isl_dim_out, "c_"); - nparam = isl_space_dim(dim, isl_dim_in); - dim = isl_space_move_dims(dim, isl_dim_param, 0, isl_dim_in, 0, nparam); - dim = isl_space_range(dim); - - return dim; -} - -/* Compute the dual of "bset" by applying Farkas' lemma. - * As explained above, we add an extra dimension to represent - * the coefficient of the constant term when going from solutions - * to coefficients (shift == 1) and we drop the extra dimension when going - * in the opposite direction (shift == -1). "dim" is the space in which - * the dual should be created. - */ -static __isl_give isl_basic_set *farkas(__isl_take isl_space *dim, - __isl_take isl_basic_set *bset, int shift) -{ - int i, j, k; - isl_basic_set *dual = NULL; - unsigned total; - - total = isl_basic_set_total_dim(bset); - - dual = isl_basic_set_alloc_space(dim, bset->n_eq + bset->n_ineq, - total, bset->n_ineq + (shift > 0)); - dual = isl_basic_set_set_rational(dual); - - for (i = 0; i < bset->n_eq + bset->n_ineq; ++i) { - k = isl_basic_set_alloc_div(dual); - if (k < 0) - goto error; - isl_int_set_si(dual->div[k][0], 0); - } - - for (i = 0; i < total; ++i) { - k = isl_basic_set_alloc_equality(dual); - if (k < 0) - goto error; - isl_seq_clr(dual->eq[k], 1 + shift + total); - isl_int_set_si(dual->eq[k][1 + shift + i], -1); - for (j = 0; j < bset->n_eq; ++j) - isl_int_set(dual->eq[k][1 + shift + total + j], - bset->eq[j][1 + i]); - for (j = 0; j < bset->n_ineq; ++j) - isl_int_set(dual->eq[k][1 + shift + total + bset->n_eq + j], - bset->ineq[j][1 + i]); - } - - for (i = 0; i < bset->n_ineq; ++i) { - k = isl_basic_set_alloc_inequality(dual); - if (k < 0) - goto error; - isl_seq_clr(dual->ineq[k], - 1 + shift + total + bset->n_eq + bset->n_ineq); - isl_int_set_si(dual->ineq[k][1 + shift + total + bset->n_eq + i], 1); - } - - if (shift > 0) { - k = isl_basic_set_alloc_inequality(dual); - if (k < 0) - goto error; - isl_seq_clr(dual->ineq[k], 2 + total); - isl_int_set_si(dual->ineq[k][1], 1); - for (j = 0; j < bset->n_eq; ++j) - isl_int_neg(dual->ineq[k][2 + total + j], - bset->eq[j][0]); - for (j = 0; j < bset->n_ineq; ++j) - isl_int_neg(dual->ineq[k][2 + total + bset->n_eq + j], - bset->ineq[j][0]); - } - - dual = isl_basic_set_remove_divs(dual); - isl_basic_set_simplify(dual); - isl_basic_set_finalize(dual); - - isl_basic_set_free(bset); - return dual; -error: - isl_basic_set_free(bset); - isl_basic_set_free(dual); - return NULL; -} - -/* Construct a basic set containing the tuples of coefficients of all - * valid affine constraints on the given basic set. - */ -__isl_give isl_basic_set *isl_basic_set_coefficients( - __isl_take isl_basic_set *bset) -{ - isl_space *dim; - - if (!bset) - return NULL; - if (bset->n_div) - isl_die(bset->ctx, isl_error_invalid, - "input set not allowed to have local variables", - goto error); - - dim = isl_basic_set_get_space(bset); - dim = isl_space_coefficients(dim); - - return farkas(dim, bset, 1); -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Construct a basic set containing the elements that satisfy all - * affine constraints whose coefficient tuples are - * contained in the given basic set. - */ -__isl_give isl_basic_set *isl_basic_set_solutions( - __isl_take isl_basic_set *bset) -{ - isl_space *dim; - - if (!bset) - return NULL; - if (bset->n_div) - isl_die(bset->ctx, isl_error_invalid, - "input set not allowed to have local variables", - goto error); - - dim = isl_basic_set_get_space(bset); - dim = isl_space_solutions(dim); - - return farkas(dim, bset, -1); -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Construct a basic set containing the tuples of coefficients of all - * valid affine constraints on the given set. - */ -__isl_give isl_basic_set *isl_set_coefficients(__isl_take isl_set *set) -{ - int i; - isl_basic_set *coeff; - - if (!set) - return NULL; - if (set->n == 0) { - isl_space *dim = isl_set_get_space(set); - dim = isl_space_coefficients(dim); - coeff = isl_basic_set_universe(dim); - coeff = isl_basic_set_set_rational(coeff); - isl_set_free(set); - return coeff; - } - - coeff = isl_basic_set_coefficients(isl_basic_set_copy(set->p[0])); - - for (i = 1; i < set->n; ++i) { - isl_basic_set *bset, *coeff_i; - bset = isl_basic_set_copy(set->p[i]); - coeff_i = isl_basic_set_coefficients(bset); - coeff = isl_basic_set_intersect(coeff, coeff_i); - } - - isl_set_free(set); - return coeff; -} - -/* Construct a basic set containing the elements that satisfy all - * affine constraints whose coefficient tuples are - * contained in the given set. - */ -__isl_give isl_basic_set *isl_set_solutions(__isl_take isl_set *set) -{ - int i; - isl_basic_set *sol; - - if (!set) - return NULL; - if (set->n == 0) { - isl_space *dim = isl_set_get_space(set); - dim = isl_space_solutions(dim); - sol = isl_basic_set_universe(dim); - sol = isl_basic_set_set_rational(sol); - isl_set_free(set); - return sol; - } - - sol = isl_basic_set_solutions(isl_basic_set_copy(set->p[0])); - - for (i = 1; i < set->n; ++i) { - isl_basic_set *bset, *sol_i; - bset = isl_basic_set_copy(set->p[i]); - sol_i = isl_basic_set_solutions(bset); - sol = isl_basic_set_intersect(sol, sol_i); - } - - isl_set_free(set); - return sol; -} diff --git a/cloog-0.17.0/isl/isl_flow.c b/cloog-0.17.0/isl/isl_flow.c deleted file mode 100644 index 1056ab2..0000000 --- a/cloog-0.17.0/isl/isl_flow.c +++ /dev/null @@ -1,1320 +0,0 @@ -/* - * Copyright 2005-2007 Universiteit Leiden - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, Leiden Institute of Advanced Computer Science, - * Universiteit Leiden, Niels Bohrweg 1, 2333 CA Leiden, The Netherlands - * and K.U.Leuven, Departement Computerwetenschappen, Celestijnenlaan 200A, - * B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include - -/* A private structure to keep track of a mapping together with - * a user-specified identifier and a boolean indicating whether - * the map represents a must or may access/dependence. - */ -struct isl_labeled_map { - struct isl_map *map; - void *data; - int must; -}; - -/* A structure containing the input for dependence analysis: - * - a sink - * - n_must + n_may (<= max_source) sources - * - a function for determining the relative order of sources and sink - * The must sources are placed before the may sources. - */ -struct isl_access_info { - struct isl_labeled_map sink; - isl_access_level_before level_before; - int max_source; - int n_must; - int n_may; - struct isl_labeled_map source[1]; -}; - -/* A structure containing the output of dependence analysis: - * - n_source dependences - * - a wrapped subset of the sink for which definitely no source could be found - * - a wrapped subset of the sink for which possibly no source could be found - */ -struct isl_flow { - isl_set *must_no_source; - isl_set *may_no_source; - int n_source; - struct isl_labeled_map *dep; -}; - -/* Construct an isl_access_info structure and fill it up with - * the given data. The number of sources is set to 0. - */ -__isl_give isl_access_info *isl_access_info_alloc(__isl_take isl_map *sink, - void *sink_user, isl_access_level_before fn, int max_source) -{ - isl_ctx *ctx; - struct isl_access_info *acc; - - if (!sink) - return NULL; - - ctx = isl_map_get_ctx(sink); - isl_assert(ctx, max_source >= 0, goto error); - - acc = isl_alloc(ctx, struct isl_access_info, - sizeof(struct isl_access_info) + - (max_source - 1) * sizeof(struct isl_labeled_map)); - if (!acc) - goto error; - - acc->sink.map = sink; - acc->sink.data = sink_user; - acc->level_before = fn; - acc->max_source = max_source; - acc->n_must = 0; - acc->n_may = 0; - - return acc; -error: - isl_map_free(sink); - return NULL; -} - -/* Free the given isl_access_info structure. - */ -void isl_access_info_free(__isl_take isl_access_info *acc) -{ - int i; - - if (!acc) - return; - isl_map_free(acc->sink.map); - for (i = 0; i < acc->n_must + acc->n_may; ++i) - isl_map_free(acc->source[i].map); - free(acc); -} - -isl_ctx *isl_access_info_get_ctx(__isl_keep isl_access_info *acc) -{ - return acc ? isl_map_get_ctx(acc->sink.map) : NULL; -} - -/* Add another source to an isl_access_info structure, making - * sure the "must" sources are placed before the "may" sources. - * This function may be called at most max_source times on a - * given isl_access_info structure, with max_source as specified - * in the call to isl_access_info_alloc that constructed the structure. - */ -__isl_give isl_access_info *isl_access_info_add_source( - __isl_take isl_access_info *acc, __isl_take isl_map *source, - int must, void *source_user) -{ - isl_ctx *ctx; - - if (!acc) - return NULL; - ctx = isl_map_get_ctx(acc->sink.map); - isl_assert(ctx, acc->n_must + acc->n_may < acc->max_source, goto error); - - if (must) { - if (acc->n_may) - acc->source[acc->n_must + acc->n_may] = - acc->source[acc->n_must]; - acc->source[acc->n_must].map = source; - acc->source[acc->n_must].data = source_user; - acc->source[acc->n_must].must = 1; - acc->n_must++; - } else { - acc->source[acc->n_must + acc->n_may].map = source; - acc->source[acc->n_must + acc->n_may].data = source_user; - acc->source[acc->n_must + acc->n_may].must = 0; - acc->n_may++; - } - - return acc; -error: - isl_map_free(source); - isl_access_info_free(acc); - return NULL; -} - -/* A temporary structure used while sorting the accesses in an isl_access_info. - */ -struct isl_access_sort_info { - struct isl_map *source_map; - void *source_data; - struct isl_access_info *acc; -}; - -/* Return -n, 0 or n (with n a positive value), depending on whether - * the source access identified by p1 should be sorted before, together - * or after that identified by p2. - * - * If p1 and p2 share a different number of levels with the sink, - * then the one with the lowest number of shared levels should be - * sorted first. - * If they both share no levels, then the order is irrelevant. - * Otherwise, if p1 appears before p2, then it should be sorted first. - * For more generic initial schedules, it is possible that neither - * p1 nor p2 appears before the other, or at least not in any obvious way. - * We therefore also check if p2 appears before p1, in which case p2 - * should be sorted first. - * If not, we try to order the two statements based on the description - * of the iteration domains. This results in an arbitrary, but fairly - * stable ordering. - */ -static int access_sort_cmp(const void *p1, const void *p2) -{ - const struct isl_access_sort_info *i1, *i2; - int level1, level2; - uint32_t h1, h2; - i1 = (const struct isl_access_sort_info *) p1; - i2 = (const struct isl_access_sort_info *) p2; - - level1 = i1->acc->level_before(i1->source_data, i1->acc->sink.data); - level2 = i2->acc->level_before(i2->source_data, i2->acc->sink.data); - - if (level1 != level2 || !level1) - return level1 - level2; - - level1 = i1->acc->level_before(i1->source_data, i2->source_data); - if (level1 % 2) - return -1; - - level2 = i1->acc->level_before(i2->source_data, i1->source_data); - if (level2 % 2) - return 1; - - h1 = isl_map_get_hash(i1->source_map); - h2 = isl_map_get_hash(i2->source_map); - return h1 > h2 ? 1 : h1 < h2 ? -1 : 0; -} - -/* Sort the must source accesses in order of increasing number of shared - * levels with the sink access. - * Source accesses with the same number of shared levels are sorted - * in their textual order. - */ -static __isl_give isl_access_info *isl_access_info_sort_sources( - __isl_take isl_access_info *acc) -{ - int i; - isl_ctx *ctx; - struct isl_access_sort_info *array; - - if (!acc) - return NULL; - if (acc->n_must <= 1) - return acc; - - ctx = isl_map_get_ctx(acc->sink.map); - array = isl_alloc_array(ctx, struct isl_access_sort_info, acc->n_must); - if (!array) - goto error; - - for (i = 0; i < acc->n_must; ++i) { - array[i].source_map = acc->source[i].map; - array[i].source_data = acc->source[i].data; - array[i].acc = acc; - } - - qsort(array, acc->n_must, sizeof(struct isl_access_sort_info), - access_sort_cmp); - - for (i = 0; i < acc->n_must; ++i) { - acc->source[i].map = array[i].source_map; - acc->source[i].data = array[i].source_data; - } - - free(array); - - return acc; -error: - isl_access_info_free(acc); - return NULL; -} - -/* Align the parameters of the two spaces if needed and then call - * isl_space_join. - */ -static __isl_give isl_space *space_align_and_join(__isl_take isl_space *left, - __isl_take isl_space *right) -{ - if (isl_space_match(left, isl_dim_param, right, isl_dim_param)) - return isl_space_join(left, right); - - left = isl_space_align_params(left, isl_space_copy(right)); - right = isl_space_align_params(right, isl_space_copy(left)); - return isl_space_join(left, right); -} - -/* Initialize an empty isl_flow structure corresponding to a given - * isl_access_info structure. - * For each must access, two dependences are created (initialized - * to the empty relation), one for the resulting must dependences - * and one for the resulting may dependences. May accesses can - * only lead to may dependences, so only one dependence is created - * for each of them. - * This function is private as isl_flow structures are only supposed - * to be created by isl_access_info_compute_flow. - */ -static __isl_give isl_flow *isl_flow_alloc(__isl_keep isl_access_info *acc) -{ - int i; - struct isl_ctx *ctx; - struct isl_flow *dep; - - if (!acc) - return NULL; - - ctx = isl_map_get_ctx(acc->sink.map); - dep = isl_calloc_type(ctx, struct isl_flow); - if (!dep) - return NULL; - - dep->dep = isl_calloc_array(ctx, struct isl_labeled_map, - 2 * acc->n_must + acc->n_may); - if (!dep->dep) - goto error; - - dep->n_source = 2 * acc->n_must + acc->n_may; - for (i = 0; i < acc->n_must; ++i) { - isl_space *dim; - dim = space_align_and_join( - isl_map_get_space(acc->source[i].map), - isl_space_reverse(isl_map_get_space(acc->sink.map))); - dep->dep[2 * i].map = isl_map_empty(dim); - dep->dep[2 * i + 1].map = isl_map_copy(dep->dep[2 * i].map); - dep->dep[2 * i].data = acc->source[i].data; - dep->dep[2 * i + 1].data = acc->source[i].data; - dep->dep[2 * i].must = 1; - dep->dep[2 * i + 1].must = 0; - if (!dep->dep[2 * i].map || !dep->dep[2 * i + 1].map) - goto error; - } - for (i = acc->n_must; i < acc->n_must + acc->n_may; ++i) { - isl_space *dim; - dim = space_align_and_join( - isl_map_get_space(acc->source[i].map), - isl_space_reverse(isl_map_get_space(acc->sink.map))); - dep->dep[acc->n_must + i].map = isl_map_empty(dim); - dep->dep[acc->n_must + i].data = acc->source[i].data; - dep->dep[acc->n_must + i].must = 0; - if (!dep->dep[acc->n_must + i].map) - goto error; - } - - return dep; -error: - isl_flow_free(dep); - return NULL; -} - -/* Iterate over all sources and for each resulting flow dependence - * that is not empty, call the user specfied function. - * The second argument in this function call identifies the source, - * while the third argument correspond to the final argument of - * the isl_flow_foreach call. - */ -int isl_flow_foreach(__isl_keep isl_flow *deps, - int (*fn)(__isl_take isl_map *dep, int must, void *dep_user, void *user), - void *user) -{ - int i; - - if (!deps) - return -1; - - for (i = 0; i < deps->n_source; ++i) { - if (isl_map_plain_is_empty(deps->dep[i].map)) - continue; - if (fn(isl_map_copy(deps->dep[i].map), deps->dep[i].must, - deps->dep[i].data, user) < 0) - return -1; - } - - return 0; -} - -/* Return a copy of the subset of the sink for which no source could be found. - */ -__isl_give isl_map *isl_flow_get_no_source(__isl_keep isl_flow *deps, int must) -{ - if (!deps) - return NULL; - - if (must) - return isl_set_unwrap(isl_set_copy(deps->must_no_source)); - else - return isl_set_unwrap(isl_set_copy(deps->may_no_source)); -} - -void isl_flow_free(__isl_take isl_flow *deps) -{ - int i; - - if (!deps) - return; - isl_set_free(deps->must_no_source); - isl_set_free(deps->may_no_source); - if (deps->dep) { - for (i = 0; i < deps->n_source; ++i) - isl_map_free(deps->dep[i].map); - free(deps->dep); - } - free(deps); -} - -isl_ctx *isl_flow_get_ctx(__isl_keep isl_flow *deps) -{ - return deps ? isl_set_get_ctx(deps->must_no_source) : NULL; -} - -/* Return a map that enforces that the domain iteration occurs after - * the range iteration at the given level. - * If level is odd, then the domain iteration should occur after - * the target iteration in their shared level/2 outermost loops. - * In this case we simply need to enforce that these outermost - * loop iterations are the same. - * If level is even, then the loop iterator of the domain should - * be greater than the loop iterator of the range at the last - * of the level/2 shared loops, i.e., loop level/2 - 1. - */ -static __isl_give isl_map *after_at_level(__isl_take isl_space *dim, int level) -{ - struct isl_basic_map *bmap; - - if (level % 2) - bmap = isl_basic_map_equal(dim, level/2); - else - bmap = isl_basic_map_more_at(dim, level/2 - 1); - - return isl_map_from_basic_map(bmap); -} - -/* Compute the last iteration of must source j that precedes the sink - * at the given level for sink iterations in set_C. - * The subset of set_C for which no such iteration can be found is returned - * in *empty. - */ -static struct isl_map *last_source(struct isl_access_info *acc, - struct isl_set *set_C, - int j, int level, struct isl_set **empty) -{ - struct isl_map *read_map; - struct isl_map *write_map; - struct isl_map *dep_map; - struct isl_map *after; - struct isl_map *result; - - read_map = isl_map_copy(acc->sink.map); - write_map = isl_map_copy(acc->source[j].map); - write_map = isl_map_reverse(write_map); - dep_map = isl_map_apply_range(read_map, write_map); - after = after_at_level(isl_map_get_space(dep_map), level); - dep_map = isl_map_intersect(dep_map, after); - result = isl_map_partial_lexmax(dep_map, set_C, empty); - result = isl_map_reverse(result); - - return result; -} - -/* For a given mapping between iterations of must source j and iterations - * of the sink, compute the last iteration of must source k preceding - * the sink at level before_level for any of the sink iterations, - * but following the corresponding iteration of must source j at level - * after_level. - */ -static struct isl_map *last_later_source(struct isl_access_info *acc, - struct isl_map *old_map, - int j, int before_level, - int k, int after_level, - struct isl_set **empty) -{ - isl_space *dim; - struct isl_set *set_C; - struct isl_map *read_map; - struct isl_map *write_map; - struct isl_map *dep_map; - struct isl_map *after_write; - struct isl_map *before_read; - struct isl_map *result; - - set_C = isl_map_range(isl_map_copy(old_map)); - read_map = isl_map_copy(acc->sink.map); - write_map = isl_map_copy(acc->source[k].map); - - write_map = isl_map_reverse(write_map); - dep_map = isl_map_apply_range(read_map, write_map); - dim = space_align_and_join(isl_map_get_space(acc->source[k].map), - isl_space_reverse(isl_map_get_space(acc->source[j].map))); - after_write = after_at_level(dim, after_level); - after_write = isl_map_apply_range(after_write, old_map); - after_write = isl_map_reverse(after_write); - dep_map = isl_map_intersect(dep_map, after_write); - before_read = after_at_level(isl_map_get_space(dep_map), before_level); - dep_map = isl_map_intersect(dep_map, before_read); - result = isl_map_partial_lexmax(dep_map, set_C, empty); - result = isl_map_reverse(result); - - return result; -} - -/* Given a shared_level between two accesses, return 1 if the - * the first can precede the second at the requested target_level. - * If the target level is odd, i.e., refers to a statement level - * dimension, then first needs to precede second at the requested - * level, i.e., shared_level must be equal to target_level. - * If the target level is odd, then the two loops should share - * at least the requested number of outer loops. - */ -static int can_precede_at_level(int shared_level, int target_level) -{ - if (shared_level < target_level) - return 0; - if ((target_level % 2) && shared_level > target_level) - return 0; - return 1; -} - -/* Given a possible flow dependence temp_rel[j] between source j and the sink - * at level sink_level, remove those elements for which - * there is an iteration of another source k < j that is closer to the sink. - * The flow dependences temp_rel[k] are updated with the improved sources. - * Any improved source needs to precede the sink at the same level - * and needs to follow source j at the same or a deeper level. - * The lower this level, the later the execution date of source k. - * We therefore consider lower levels first. - * - * If temp_rel[j] is empty, then there can be no improvement and - * we return immediately. - */ -static int intermediate_sources(__isl_keep isl_access_info *acc, - struct isl_map **temp_rel, int j, int sink_level) -{ - int k, level; - int depth = 2 * isl_map_dim(acc->source[j].map, isl_dim_in) + 1; - - if (isl_map_plain_is_empty(temp_rel[j])) - return 0; - - for (k = j - 1; k >= 0; --k) { - int plevel, plevel2; - plevel = acc->level_before(acc->source[k].data, acc->sink.data); - if (!can_precede_at_level(plevel, sink_level)) - continue; - - plevel2 = acc->level_before(acc->source[j].data, - acc->source[k].data); - - for (level = sink_level; level <= depth; ++level) { - struct isl_map *T; - struct isl_set *trest; - struct isl_map *copy; - - if (!can_precede_at_level(plevel2, level)) - continue; - - copy = isl_map_copy(temp_rel[j]); - T = last_later_source(acc, copy, j, sink_level, k, - level, &trest); - if (isl_map_plain_is_empty(T)) { - isl_set_free(trest); - isl_map_free(T); - continue; - } - temp_rel[j] = isl_map_intersect_range(temp_rel[j], trest); - temp_rel[k] = isl_map_union_disjoint(temp_rel[k], T); - } - } - - return 0; -} - -/* Compute all iterations of may source j that precedes the sink at the given - * level for sink iterations in set_C. - */ -static __isl_give isl_map *all_sources(__isl_keep isl_access_info *acc, - __isl_take isl_set *set_C, int j, int level) -{ - isl_map *read_map; - isl_map *write_map; - isl_map *dep_map; - isl_map *after; - - read_map = isl_map_copy(acc->sink.map); - read_map = isl_map_intersect_domain(read_map, set_C); - write_map = isl_map_copy(acc->source[acc->n_must + j].map); - write_map = isl_map_reverse(write_map); - dep_map = isl_map_apply_range(read_map, write_map); - after = after_at_level(isl_map_get_space(dep_map), level); - dep_map = isl_map_intersect(dep_map, after); - - return isl_map_reverse(dep_map); -} - -/* For a given mapping between iterations of must source k and iterations - * of the sink, compute the all iteration of may source j preceding - * the sink at level before_level for any of the sink iterations, - * but following the corresponding iteration of must source k at level - * after_level. - */ -static __isl_give isl_map *all_later_sources(__isl_keep isl_access_info *acc, - __isl_keep isl_map *old_map, - int j, int before_level, int k, int after_level) -{ - isl_space *dim; - isl_set *set_C; - isl_map *read_map; - isl_map *write_map; - isl_map *dep_map; - isl_map *after_write; - isl_map *before_read; - - set_C = isl_map_range(isl_map_copy(old_map)); - read_map = isl_map_copy(acc->sink.map); - read_map = isl_map_intersect_domain(read_map, set_C); - write_map = isl_map_copy(acc->source[acc->n_must + j].map); - - write_map = isl_map_reverse(write_map); - dep_map = isl_map_apply_range(read_map, write_map); - dim = isl_space_join(isl_map_get_space(acc->source[acc->n_must + j].map), - isl_space_reverse(isl_map_get_space(acc->source[k].map))); - after_write = after_at_level(dim, after_level); - after_write = isl_map_apply_range(after_write, old_map); - after_write = isl_map_reverse(after_write); - dep_map = isl_map_intersect(dep_map, after_write); - before_read = after_at_level(isl_map_get_space(dep_map), before_level); - dep_map = isl_map_intersect(dep_map, before_read); - return isl_map_reverse(dep_map); -} - -/* Given the must and may dependence relations for the must accesses - * for level sink_level, check if there are any accesses of may access j - * that occur in between and return their union. - * If some of these accesses are intermediate with respect to - * (previously thought to be) must dependences, then these - * must dependences are turned into may dependences. - */ -static __isl_give isl_map *all_intermediate_sources( - __isl_keep isl_access_info *acc, __isl_take isl_map *map, - struct isl_map **must_rel, struct isl_map **may_rel, - int j, int sink_level) -{ - int k, level; - int depth = 2 * isl_map_dim(acc->source[acc->n_must + j].map, - isl_dim_in) + 1; - - for (k = 0; k < acc->n_must; ++k) { - int plevel; - - if (isl_map_plain_is_empty(may_rel[k]) && - isl_map_plain_is_empty(must_rel[k])) - continue; - - plevel = acc->level_before(acc->source[k].data, - acc->source[acc->n_must + j].data); - - for (level = sink_level; level <= depth; ++level) { - isl_map *T; - isl_map *copy; - isl_set *ran; - - if (!can_precede_at_level(plevel, level)) - continue; - - copy = isl_map_copy(may_rel[k]); - T = all_later_sources(acc, copy, j, sink_level, k, level); - map = isl_map_union(map, T); - - copy = isl_map_copy(must_rel[k]); - T = all_later_sources(acc, copy, j, sink_level, k, level); - ran = isl_map_range(isl_map_copy(T)); - map = isl_map_union(map, T); - may_rel[k] = isl_map_union_disjoint(may_rel[k], - isl_map_intersect_range(isl_map_copy(must_rel[k]), - isl_set_copy(ran))); - T = isl_map_from_domain_and_range( - isl_set_universe( - isl_space_domain(isl_map_get_space(must_rel[k]))), - ran); - must_rel[k] = isl_map_subtract(must_rel[k], T); - } - } - - return map; -} - -/* Compute dependences for the case where all accesses are "may" - * accesses, which boils down to computing memory based dependences. - * The generic algorithm would also work in this case, but it would - * be overkill to use it. - */ -static __isl_give isl_flow *compute_mem_based_dependences( - __isl_take isl_access_info *acc) -{ - int i; - isl_set *mustdo; - isl_set *maydo; - isl_flow *res; - - res = isl_flow_alloc(acc); - if (!res) - goto error; - - mustdo = isl_map_domain(isl_map_copy(acc->sink.map)); - maydo = isl_set_copy(mustdo); - - for (i = 0; i < acc->n_may; ++i) { - int plevel; - int is_before; - isl_space *dim; - isl_map *before; - isl_map *dep; - - plevel = acc->level_before(acc->source[i].data, acc->sink.data); - is_before = plevel & 1; - plevel >>= 1; - - dim = isl_map_get_space(res->dep[i].map); - if (is_before) - before = isl_map_lex_le_first(dim, plevel); - else - before = isl_map_lex_lt_first(dim, plevel); - dep = isl_map_apply_range(isl_map_copy(acc->source[i].map), - isl_map_reverse(isl_map_copy(acc->sink.map))); - dep = isl_map_intersect(dep, before); - mustdo = isl_set_subtract(mustdo, - isl_map_range(isl_map_copy(dep))); - res->dep[i].map = isl_map_union(res->dep[i].map, dep); - } - - res->may_no_source = isl_set_subtract(maydo, isl_set_copy(mustdo)); - res->must_no_source = mustdo; - - isl_access_info_free(acc); - - return res; -error: - isl_access_info_free(acc); - return NULL; -} - -/* Compute dependences for the case where there is at least one - * "must" access. - * - * The core algorithm considers all levels in which a source may precede - * the sink, where a level may either be a statement level or a loop level. - * The outermost statement level is 1, the first loop level is 2, etc... - * The algorithm basically does the following: - * for all levels l of the read access from innermost to outermost - * for all sources w that may precede the sink access at that level - * compute the last iteration of the source that precedes the sink access - * at that level - * add result to possible last accesses at level l of source w - * for all sources w2 that we haven't considered yet at this level that may - * also precede the sink access - * for all levels l2 of w from l to innermost - * for all possible last accesses dep of w at l - * compute last iteration of w2 between the source and sink - * of dep - * add result to possible last accesses at level l of write w2 - * and replace possible last accesses dep by the remainder - * - * - * The above algorithm is applied to the must access. During the course - * of the algorithm, we keep track of sink iterations that still - * need to be considered. These iterations are split into those that - * haven't been matched to any source access (mustdo) and those that have only - * been matched to may accesses (maydo). - * At the end of each level, we also consider the may accesses. - * In particular, we consider may accesses that precede the remaining - * sink iterations, moving elements from mustdo to maydo when appropriate, - * and may accesses that occur between a must source and a sink of any - * dependences found at the current level, turning must dependences into - * may dependences when appropriate. - * - */ -static __isl_give isl_flow *compute_val_based_dependences( - __isl_take isl_access_info *acc) -{ - isl_ctx *ctx; - isl_flow *res; - isl_set *mustdo = NULL; - isl_set *maydo = NULL; - int level, j; - int depth; - isl_map **must_rel = NULL; - isl_map **may_rel = NULL; - - acc = isl_access_info_sort_sources(acc); - if (!acc) - return NULL; - - res = isl_flow_alloc(acc); - if (!res) - goto error; - ctx = isl_map_get_ctx(acc->sink.map); - - depth = 2 * isl_map_dim(acc->sink.map, isl_dim_in) + 1; - mustdo = isl_map_domain(isl_map_copy(acc->sink.map)); - maydo = isl_set_empty_like(mustdo); - if (!mustdo || !maydo) - goto error; - if (isl_set_plain_is_empty(mustdo)) - goto done; - - must_rel = isl_alloc_array(ctx, struct isl_map *, acc->n_must); - may_rel = isl_alloc_array(ctx, struct isl_map *, acc->n_must); - if (!must_rel || !may_rel) - goto error; - - for (level = depth; level >= 1; --level) { - for (j = acc->n_must-1; j >=0; --j) { - must_rel[j] = isl_map_empty_like(res->dep[j].map); - may_rel[j] = isl_map_copy(must_rel[j]); - } - - for (j = acc->n_must - 1; j >= 0; --j) { - struct isl_map *T; - struct isl_set *rest; - int plevel; - - plevel = acc->level_before(acc->source[j].data, - acc->sink.data); - if (!can_precede_at_level(plevel, level)) - continue; - - T = last_source(acc, mustdo, j, level, &rest); - must_rel[j] = isl_map_union_disjoint(must_rel[j], T); - mustdo = rest; - - intermediate_sources(acc, must_rel, j, level); - - T = last_source(acc, maydo, j, level, &rest); - may_rel[j] = isl_map_union_disjoint(may_rel[j], T); - maydo = rest; - - intermediate_sources(acc, may_rel, j, level); - - if (isl_set_plain_is_empty(mustdo) && - isl_set_plain_is_empty(maydo)) - break; - } - for (j = j - 1; j >= 0; --j) { - int plevel; - - plevel = acc->level_before(acc->source[j].data, - acc->sink.data); - if (!can_precede_at_level(plevel, level)) - continue; - - intermediate_sources(acc, must_rel, j, level); - intermediate_sources(acc, may_rel, j, level); - } - - for (j = 0; j < acc->n_may; ++j) { - int plevel; - isl_map *T; - isl_set *ran; - - plevel = acc->level_before(acc->source[acc->n_must + j].data, - acc->sink.data); - if (!can_precede_at_level(plevel, level)) - continue; - - T = all_sources(acc, isl_set_copy(maydo), j, level); - res->dep[2 * acc->n_must + j].map = - isl_map_union(res->dep[2 * acc->n_must + j].map, T); - T = all_sources(acc, isl_set_copy(mustdo), j, level); - ran = isl_map_range(isl_map_copy(T)); - res->dep[2 * acc->n_must + j].map = - isl_map_union(res->dep[2 * acc->n_must + j].map, T); - mustdo = isl_set_subtract(mustdo, isl_set_copy(ran)); - maydo = isl_set_union_disjoint(maydo, ran); - - T = res->dep[2 * acc->n_must + j].map; - T = all_intermediate_sources(acc, T, must_rel, may_rel, - j, level); - res->dep[2 * acc->n_must + j].map = T; - } - - for (j = acc->n_must - 1; j >= 0; --j) { - res->dep[2 * j].map = - isl_map_union_disjoint(res->dep[2 * j].map, - must_rel[j]); - res->dep[2 * j + 1].map = - isl_map_union_disjoint(res->dep[2 * j + 1].map, - may_rel[j]); - } - - if (isl_set_plain_is_empty(mustdo) && - isl_set_plain_is_empty(maydo)) - break; - } - - free(must_rel); - free(may_rel); -done: - res->must_no_source = mustdo; - res->may_no_source = maydo; - isl_access_info_free(acc); - return res; -error: - isl_access_info_free(acc); - isl_flow_free(res); - isl_set_free(mustdo); - isl_set_free(maydo); - free(must_rel); - free(may_rel); - return NULL; -} - -/* Given a "sink" access, a list of n "source" accesses, - * compute for each iteration of the sink access - * and for each element accessed by that iteration, - * the source access in the list that last accessed the - * element accessed by the sink access before this sink access. - * Each access is given as a map from the loop iterators - * to the array indices. - * The result is a list of n relations between source and sink - * iterations and a subset of the domain of the sink access, - * corresponding to those iterations that access an element - * not previously accessed. - * - * To deal with multi-valued sink access relations, the sink iteration - * domain is first extended with dimensions that correspond to the data - * space. After the computation is finished, these extra dimensions are - * projected out again. - */ -__isl_give isl_flow *isl_access_info_compute_flow(__isl_take isl_access_info *acc) -{ - int j; - struct isl_flow *res; - isl_map *domain_map = NULL; - - if (!acc) - return NULL; - - domain_map = isl_map_domain_map(isl_map_copy(acc->sink.map)); - acc->sink.map = isl_map_range_map(acc->sink.map); - if (!acc->sink.map) - goto error; - - if (acc->n_must == 0) - res = compute_mem_based_dependences(acc); - else - res = compute_val_based_dependences(acc); - if (!res) - goto error2; - - for (j = 0; j < res->n_source; ++j) { - res->dep[j].map = isl_map_apply_range(res->dep[j].map, - isl_map_copy(domain_map)); - if (!res->dep[j].map) - goto error2; - } - if (!res->must_no_source || !res->may_no_source) - goto error2; - - isl_map_free(domain_map); - return res; -error: - isl_map_free(domain_map); - isl_access_info_free(acc); - return NULL; -error2: - isl_map_free(domain_map); - isl_flow_free(res); - return NULL; -} - - -/* Keep track of some information about a schedule for a given - * access. In particular, keep track of which dimensions - * have a constant value and of the actual constant values. - */ -struct isl_sched_info { - int *is_cst; - isl_vec *cst; -}; - -static void sched_info_free(__isl_take struct isl_sched_info *info) -{ - if (!info) - return; - isl_vec_free(info->cst); - free(info->is_cst); - free(info); -} - -/* Extract information on the constant dimensions of the schedule - * for a given access. The "map" is of the form - * - * [S -> D] -> A - * - * with S the schedule domain, D the iteration domain and A the data domain. - */ -static __isl_give struct isl_sched_info *sched_info_alloc( - __isl_keep isl_map *map) -{ - isl_ctx *ctx; - isl_space *dim; - struct isl_sched_info *info; - int i, n; - - if (!map) - return NULL; - - dim = isl_space_unwrap(isl_space_domain(isl_map_get_space(map))); - if (!dim) - return NULL; - n = isl_space_dim(dim, isl_dim_in); - isl_space_free(dim); - - ctx = isl_map_get_ctx(map); - info = isl_alloc_type(ctx, struct isl_sched_info); - if (!info) - return NULL; - info->is_cst = isl_alloc_array(ctx, int, n); - info->cst = isl_vec_alloc(ctx, n); - if (!info->is_cst || !info->cst) - goto error; - - for (i = 0; i < n; ++i) - info->is_cst[i] = isl_map_plain_is_fixed(map, isl_dim_in, i, - &info->cst->el[i]); - - return info; -error: - sched_info_free(info); - return NULL; -} - -struct isl_compute_flow_data { - isl_union_map *must_source; - isl_union_map *may_source; - isl_union_map *must_dep; - isl_union_map *may_dep; - isl_union_map *must_no_source; - isl_union_map *may_no_source; - - int count; - int must; - isl_space *dim; - struct isl_sched_info *sink_info; - struct isl_sched_info **source_info; - isl_access_info *accesses; -}; - -static int count_matching_array(__isl_take isl_map *map, void *user) -{ - int eq; - isl_space *dim; - struct isl_compute_flow_data *data; - - data = (struct isl_compute_flow_data *)user; - - dim = isl_space_range(isl_map_get_space(map)); - - eq = isl_space_is_equal(dim, data->dim); - - isl_space_free(dim); - isl_map_free(map); - - if (eq < 0) - return -1; - if (eq) - data->count++; - - return 0; -} - -static int collect_matching_array(__isl_take isl_map *map, void *user) -{ - int eq; - isl_space *dim; - struct isl_sched_info *info; - struct isl_compute_flow_data *data; - - data = (struct isl_compute_flow_data *)user; - - dim = isl_space_range(isl_map_get_space(map)); - - eq = isl_space_is_equal(dim, data->dim); - - isl_space_free(dim); - - if (eq < 0) - goto error; - if (!eq) { - isl_map_free(map); - return 0; - } - - info = sched_info_alloc(map); - data->source_info[data->count] = info; - - data->accesses = isl_access_info_add_source(data->accesses, - map, data->must, info); - - data->count++; - - return 0; -error: - isl_map_free(map); - return -1; -} - -/* Determine the shared nesting level and the "textual order" of - * the given accesses. - * - * We first determine the minimal schedule dimension for both accesses. - * - * If among those dimensions, we can find one where both have a fixed - * value and if moreover those values are different, then the previous - * dimension is the last shared nesting level and the textual order - * is determined based on the order of the fixed values. - * If no such fixed values can be found, then we set the shared - * nesting level to the minimal schedule dimension, with no textual ordering. - */ -static int before(void *first, void *second) -{ - struct isl_sched_info *info1 = first; - struct isl_sched_info *info2 = second; - int n1, n2; - int i; - - n1 = info1->cst->size; - n2 = info2->cst->size; - - if (n2 < n1) - n1 = n2; - - for (i = 0; i < n1; ++i) { - if (!info1->is_cst[i]) - continue; - if (!info2->is_cst[i]) - continue; - if (isl_int_eq(info1->cst->el[i], info2->cst->el[i])) - continue; - return 2 * i + isl_int_lt(info1->cst->el[i], info2->cst->el[i]); - } - - return 2 * n1; -} - -/* Given a sink access, look for all the source accesses that access - * the same array and perform dataflow analysis on them using - * isl_access_info_compute_flow. - */ -static int compute_flow(__isl_take isl_map *map, void *user) -{ - int i; - isl_ctx *ctx; - struct isl_compute_flow_data *data; - isl_flow *flow; - - data = (struct isl_compute_flow_data *)user; - - ctx = isl_map_get_ctx(map); - - data->accesses = NULL; - data->sink_info = NULL; - data->source_info = NULL; - data->count = 0; - data->dim = isl_space_range(isl_map_get_space(map)); - - if (isl_union_map_foreach_map(data->must_source, - &count_matching_array, data) < 0) - goto error; - if (isl_union_map_foreach_map(data->may_source, - &count_matching_array, data) < 0) - goto error; - - data->sink_info = sched_info_alloc(map); - data->source_info = isl_calloc_array(ctx, struct isl_sched_info *, - data->count); - - data->accesses = isl_access_info_alloc(isl_map_copy(map), - data->sink_info, &before, data->count); - if (!data->sink_info || !data->source_info || !data->accesses) - goto error; - data->count = 0; - data->must = 1; - if (isl_union_map_foreach_map(data->must_source, - &collect_matching_array, data) < 0) - goto error; - data->must = 0; - if (isl_union_map_foreach_map(data->may_source, - &collect_matching_array, data) < 0) - goto error; - - flow = isl_access_info_compute_flow(data->accesses); - data->accesses = NULL; - - if (!flow) - goto error; - - data->must_no_source = isl_union_map_union(data->must_no_source, - isl_union_map_from_map(isl_flow_get_no_source(flow, 1))); - data->may_no_source = isl_union_map_union(data->may_no_source, - isl_union_map_from_map(isl_flow_get_no_source(flow, 0))); - - for (i = 0; i < flow->n_source; ++i) { - isl_union_map *dep; - dep = isl_union_map_from_map(isl_map_copy(flow->dep[i].map)); - if (flow->dep[i].must) - data->must_dep = isl_union_map_union(data->must_dep, dep); - else - data->may_dep = isl_union_map_union(data->may_dep, dep); - } - - isl_flow_free(flow); - - sched_info_free(data->sink_info); - if (data->source_info) { - for (i = 0; i < data->count; ++i) - sched_info_free(data->source_info[i]); - free(data->source_info); - } - isl_space_free(data->dim); - isl_map_free(map); - - return 0; -error: - isl_access_info_free(data->accesses); - sched_info_free(data->sink_info); - if (data->source_info) { - for (i = 0; i < data->count; ++i) - sched_info_free(data->source_info[i]); - free(data->source_info); - } - isl_space_free(data->dim); - isl_map_free(map); - - return -1; -} - -/* Given a collection of "sink" and "source" accesses, - * compute for each iteration of a sink access - * and for each element accessed by that iteration, - * the source access in the list that last accessed the - * element accessed by the sink access before this sink access. - * Each access is given as a map from the loop iterators - * to the array indices. - * The result is a relations between source and sink - * iterations and a subset of the domain of the sink accesses, - * corresponding to those iterations that access an element - * not previously accessed. - * - * We first prepend the schedule dimensions to the domain - * of the accesses so that we can easily compare their relative order. - * Then we consider each sink access individually in compute_flow. - */ -int isl_union_map_compute_flow(__isl_take isl_union_map *sink, - __isl_take isl_union_map *must_source, - __isl_take isl_union_map *may_source, - __isl_take isl_union_map *schedule, - __isl_give isl_union_map **must_dep, __isl_give isl_union_map **may_dep, - __isl_give isl_union_map **must_no_source, - __isl_give isl_union_map **may_no_source) -{ - isl_space *dim; - isl_union_map *range_map = NULL; - struct isl_compute_flow_data data; - - sink = isl_union_map_align_params(sink, - isl_union_map_get_space(must_source)); - sink = isl_union_map_align_params(sink, - isl_union_map_get_space(may_source)); - sink = isl_union_map_align_params(sink, - isl_union_map_get_space(schedule)); - dim = isl_union_map_get_space(sink); - must_source = isl_union_map_align_params(must_source, isl_space_copy(dim)); - may_source = isl_union_map_align_params(may_source, isl_space_copy(dim)); - schedule = isl_union_map_align_params(schedule, isl_space_copy(dim)); - - schedule = isl_union_map_reverse(schedule); - range_map = isl_union_map_range_map(schedule); - schedule = isl_union_map_reverse(isl_union_map_copy(range_map)); - sink = isl_union_map_apply_domain(sink, isl_union_map_copy(schedule)); - must_source = isl_union_map_apply_domain(must_source, - isl_union_map_copy(schedule)); - may_source = isl_union_map_apply_domain(may_source, schedule); - - data.must_source = must_source; - data.may_source = may_source; - data.must_dep = must_dep ? - isl_union_map_empty(isl_space_copy(dim)) : NULL; - data.may_dep = may_dep ? isl_union_map_empty(isl_space_copy(dim)) : NULL; - data.must_no_source = must_no_source ? - isl_union_map_empty(isl_space_copy(dim)) : NULL; - data.may_no_source = may_no_source ? - isl_union_map_empty(isl_space_copy(dim)) : NULL; - - isl_space_free(dim); - - if (isl_union_map_foreach_map(sink, &compute_flow, &data) < 0) - goto error; - - isl_union_map_free(sink); - isl_union_map_free(must_source); - isl_union_map_free(may_source); - - if (must_dep) { - data.must_dep = isl_union_map_apply_domain(data.must_dep, - isl_union_map_copy(range_map)); - data.must_dep = isl_union_map_apply_range(data.must_dep, - isl_union_map_copy(range_map)); - *must_dep = data.must_dep; - } - if (may_dep) { - data.may_dep = isl_union_map_apply_domain(data.may_dep, - isl_union_map_copy(range_map)); - data.may_dep = isl_union_map_apply_range(data.may_dep, - isl_union_map_copy(range_map)); - *may_dep = data.may_dep; - } - if (must_no_source) { - data.must_no_source = isl_union_map_apply_domain( - data.must_no_source, isl_union_map_copy(range_map)); - *must_no_source = data.must_no_source; - } - if (may_no_source) { - data.may_no_source = isl_union_map_apply_domain( - data.may_no_source, isl_union_map_copy(range_map)); - *may_no_source = data.may_no_source; - } - - isl_union_map_free(range_map); - - return 0; -error: - isl_union_map_free(range_map); - isl_union_map_free(sink); - isl_union_map_free(must_source); - isl_union_map_free(may_source); - isl_union_map_free(data.must_dep); - isl_union_map_free(data.may_dep); - isl_union_map_free(data.must_no_source); - isl_union_map_free(data.may_no_source); - - if (must_dep) - *must_dep = NULL; - if (may_dep) - *may_dep = NULL; - if (must_no_source) - *must_no_source = NULL; - if (may_no_source) - *may_no_source = NULL; - return -1; -} diff --git a/cloog-0.17.0/isl/isl_fold.c b/cloog-0.17.0/isl/isl_fold.c deleted file mode 100644 index b96c096..0000000 --- a/cloog-0.17.0/isl/isl_fold.c +++ /dev/null @@ -1,1629 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#define ISL_DIM_H -#include -#include -#include -#include -#include -#include -#include -#include -#include - -enum isl_fold isl_fold_type_negate(enum isl_fold type) -{ - switch (type) { - case isl_fold_min: - return isl_fold_max; - case isl_fold_max: - return isl_fold_min; - case isl_fold_list: - return isl_fold_list; - } - - isl_die(NULL, isl_error_internal, "unhandled isl_fold type", abort()); -} - -static __isl_give isl_qpolynomial_fold *qpolynomial_fold_alloc( - enum isl_fold type, __isl_take isl_space *dim, int n) -{ - isl_qpolynomial_fold *fold; - - if (!dim) - goto error; - - isl_assert(dim->ctx, n >= 0, goto error); - fold = isl_calloc(dim->ctx, struct isl_qpolynomial_fold, - sizeof(struct isl_qpolynomial_fold) + - (n - 1) * sizeof(struct isl_qpolynomial *)); - if (!fold) - goto error; - - fold->ref = 1; - fold->size = n; - fold->n = 0; - fold->type = type; - fold->dim = dim; - - return fold; -error: - isl_space_free(dim); - return NULL; -} - -isl_ctx *isl_qpolynomial_fold_get_ctx(__isl_keep isl_qpolynomial_fold *fold) -{ - return fold ? fold->dim->ctx : NULL; -} - -__isl_give isl_space *isl_qpolynomial_fold_get_domain_space( - __isl_keep isl_qpolynomial_fold *fold) -{ - return fold ? isl_space_copy(fold->dim) : NULL; -} - -__isl_give isl_space *isl_qpolynomial_fold_get_space( - __isl_keep isl_qpolynomial_fold *fold) -{ - isl_space *space; - if (!fold) - return NULL; - space = isl_space_copy(fold->dim); - space = isl_space_from_domain(space); - space = isl_space_add_dims(space, isl_dim_out, 1); - return space; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_reset_domain_space( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_space *dim) -{ - int i; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold || !dim) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_reset_domain_space(fold->qp[i], - isl_space_copy(dim)); - if (!fold->qp[i]) - goto error; - } - - isl_space_free(fold->dim); - fold->dim = dim; - - return fold; -error: - isl_qpolynomial_fold_free(fold); - isl_space_free(dim); - return NULL; -} - -/* Reset the space of "fold". This function is called from isl_pw_templ.c - * and doesn't know if the space of an element object is represented - * directly or through its domain. It therefore passes along both. - */ -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_reset_space_and_domain( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_space *space, - __isl_take isl_space *domain) -{ - isl_space_free(space); - return isl_qpolynomial_fold_reset_domain_space(fold, domain); -} - -int isl_qpolynomial_fold_involves_dims(__isl_keep isl_qpolynomial_fold *fold, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!fold) - return -1; - if (fold->n == 0 || n == 0) - return 0; - - for (i = 0; i < fold->n; ++i) { - int involves = isl_qpolynomial_involves_dims(fold->qp[i], - type, first, n); - if (involves < 0 || involves) - return involves; - } - return 0; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_set_dim_name( - __isl_take isl_qpolynomial_fold *fold, - enum isl_dim_type type, unsigned pos, const char *s) -{ - int i; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - fold->dim = isl_space_set_dim_name(fold->dim, type, pos, s); - if (!fold->dim) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_set_dim_name(fold->qp[i], - type, pos, s); - if (!fold->qp[i]) - goto error; - } - - return fold; -error: - isl_qpolynomial_fold_free(fold); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_drop_dims( - __isl_take isl_qpolynomial_fold *fold, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - enum isl_dim_type set_type; - - if (!fold) - return NULL; - if (n == 0) - return fold; - - set_type = type == isl_dim_in ? isl_dim_set : type; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - fold->dim = isl_space_drop_dims(fold->dim, set_type, first, n); - if (!fold->dim) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_drop_dims(fold->qp[i], - type, first, n); - if (!fold->qp[i]) - goto error; - } - - return fold; -error: - isl_qpolynomial_fold_free(fold); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_insert_dims( - __isl_take isl_qpolynomial_fold *fold, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!fold) - return NULL; - if (n == 0 && !isl_space_is_named_or_nested(fold->dim, type)) - return fold; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - fold->dim = isl_space_insert_dims(fold->dim, type, first, n); - if (!fold->dim) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_insert_dims(fold->qp[i], - type, first, n); - if (!fold->qp[i]) - goto error; - } - - return fold; -error: - isl_qpolynomial_fold_free(fold); - return NULL; -} - -static int isl_qpolynomial_cst_sign(__isl_keep isl_qpolynomial *qp) -{ - struct isl_upoly_cst *cst; - - cst = isl_upoly_as_cst(qp->upoly); - if (!cst) - return 0; - - return isl_int_sgn(cst->n) < 0 ? -1 : 1; -} - -static int isl_qpolynomial_aff_sign(__isl_keep isl_set *set, - __isl_keep isl_qpolynomial *qp) -{ - enum isl_lp_result res; - isl_vec *aff; - isl_int opt; - int sgn = 0; - - aff = isl_qpolynomial_extract_affine(qp); - if (!aff) - return 0; - - isl_int_init(opt); - - res = isl_set_solve_lp(set, 0, aff->el + 1, aff->el[0], - &opt, NULL, NULL); - if (res == isl_lp_error) - goto done; - if (res == isl_lp_empty || - (res == isl_lp_ok && !isl_int_is_neg(opt))) { - sgn = 1; - goto done; - } - - res = isl_set_solve_lp(set, 1, aff->el + 1, aff->el[0], - &opt, NULL, NULL); - if (res == isl_lp_ok && !isl_int_is_pos(opt)) - sgn = -1; - -done: - isl_int_clear(opt); - isl_vec_free(aff); - return sgn; -} - -/* Determine, if possible, the sign of the quasipolynomial "qp" on - * the domain "set". - * - * If qp is a constant, then the problem is trivial. - * If qp is linear, then we check if the minimum of the corresponding - * affine constraint is non-negative or if the maximum is non-positive. - * - * Otherwise, we check if the outermost variable "v" has a lower bound "l" - * in "set". If so, we write qp(v,v') as - * - * q(v,v') * (v - l) + r(v') - * - * if q(v,v') and r(v') have the same known sign, then the original - * quasipolynomial has the same sign as well. - * - * Return - * -1 if qp <= 0 - * 1 if qp >= 0 - * 0 if unknown - */ -static int isl_qpolynomial_sign(__isl_keep isl_set *set, - __isl_keep isl_qpolynomial *qp) -{ - int d; - int i; - int is; - struct isl_upoly_rec *rec; - isl_vec *v; - isl_int l; - enum isl_lp_result res; - int sgn = 0; - - is = isl_qpolynomial_is_cst(qp, NULL, NULL); - if (is < 0) - return 0; - if (is) - return isl_qpolynomial_cst_sign(qp); - - is = isl_qpolynomial_is_affine(qp); - if (is < 0) - return 0; - if (is) - return isl_qpolynomial_aff_sign(set, qp); - - if (qp->div->n_row > 0) - return 0; - - rec = isl_upoly_as_rec(qp->upoly); - if (!rec) - return 0; - - d = isl_space_dim(qp->dim, isl_dim_all); - v = isl_vec_alloc(set->ctx, 2 + d); - if (!v) - return 0; - - isl_seq_clr(v->el + 1, 1 + d); - isl_int_set_si(v->el[0], 1); - isl_int_set_si(v->el[2 + qp->upoly->var], 1); - - isl_int_init(l); - - res = isl_set_solve_lp(set, 0, v->el + 1, v->el[0], &l, NULL, NULL); - if (res == isl_lp_ok) { - isl_qpolynomial *min; - isl_qpolynomial *base; - isl_qpolynomial *r, *q; - isl_qpolynomial *t; - - min = isl_qpolynomial_cst_on_domain(isl_space_copy(qp->dim), l); - base = isl_qpolynomial_var_pow_on_domain(isl_space_copy(qp->dim), - qp->upoly->var, 1); - - r = isl_qpolynomial_alloc(isl_space_copy(qp->dim), 0, - isl_upoly_copy(rec->p[rec->n - 1])); - q = isl_qpolynomial_copy(r); - - for (i = rec->n - 2; i >= 0; --i) { - r = isl_qpolynomial_mul(r, isl_qpolynomial_copy(min)); - t = isl_qpolynomial_alloc(isl_space_copy(qp->dim), 0, - isl_upoly_copy(rec->p[i])); - r = isl_qpolynomial_add(r, t); - if (i == 0) - break; - q = isl_qpolynomial_mul(q, isl_qpolynomial_copy(base)); - q = isl_qpolynomial_add(q, isl_qpolynomial_copy(r)); - } - - if (isl_qpolynomial_is_zero(q)) - sgn = isl_qpolynomial_sign(set, r); - else if (isl_qpolynomial_is_zero(r)) - sgn = isl_qpolynomial_sign(set, q); - else { - int sgn_q, sgn_r; - sgn_r = isl_qpolynomial_sign(set, r); - sgn_q = isl_qpolynomial_sign(set, q); - if (sgn_r == sgn_q) - sgn = sgn_r; - } - - isl_qpolynomial_free(min); - isl_qpolynomial_free(base); - isl_qpolynomial_free(q); - isl_qpolynomial_free(r); - } - - isl_int_clear(l); - - isl_vec_free(v); - - return sgn; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_fold_on_domain( - __isl_keep isl_set *set, - __isl_take isl_qpolynomial_fold *fold1, - __isl_take isl_qpolynomial_fold *fold2) -{ - int i, j; - int n1; - struct isl_qpolynomial_fold *res = NULL; - int better; - - if (!fold1 || !fold2) - goto error; - - isl_assert(fold1->dim->ctx, fold1->type == fold2->type, goto error); - isl_assert(fold1->dim->ctx, isl_space_is_equal(fold1->dim, fold2->dim), - goto error); - - better = fold1->type == isl_fold_max ? -1 : 1; - - if (isl_qpolynomial_fold_is_empty(fold1)) { - isl_qpolynomial_fold_free(fold1); - return fold2; - } - - if (isl_qpolynomial_fold_is_empty(fold2)) { - isl_qpolynomial_fold_free(fold2); - return fold1; - } - - res = qpolynomial_fold_alloc(fold1->type, isl_space_copy(fold1->dim), - fold1->n + fold2->n); - if (!res) - goto error; - - for (i = 0; i < fold1->n; ++i) { - res->qp[res->n] = isl_qpolynomial_copy(fold1->qp[i]); - if (!res->qp[res->n]) - goto error; - res->n++; - } - n1 = res->n; - - for (i = 0; i < fold2->n; ++i) { - for (j = n1 - 1; j >= 0; --j) { - isl_qpolynomial *d; - int sgn; - d = isl_qpolynomial_sub( - isl_qpolynomial_copy(res->qp[j]), - isl_qpolynomial_copy(fold2->qp[i])); - sgn = isl_qpolynomial_sign(set, d); - isl_qpolynomial_free(d); - if (sgn == 0) - continue; - if (sgn != better) - break; - isl_qpolynomial_free(res->qp[j]); - if (j != n1 - 1) - res->qp[j] = res->qp[n1 - 1]; - n1--; - if (n1 != res->n - 1) - res->qp[n1] = res->qp[res->n - 1]; - res->n--; - } - if (j >= 0) - continue; - res->qp[res->n] = isl_qpolynomial_copy(fold2->qp[i]); - if (!res->qp[res->n]) - goto error; - res->n++; - } - - isl_qpolynomial_fold_free(fold1); - isl_qpolynomial_fold_free(fold2); - - return res; -error: - isl_qpolynomial_fold_free(res); - isl_qpolynomial_fold_free(fold1); - isl_qpolynomial_fold_free(fold2); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_add_qpolynomial( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_qpolynomial *qp) -{ - int i; - - if (!fold || !qp) - goto error; - - if (isl_qpolynomial_is_zero(qp)) { - isl_qpolynomial_free(qp); - return fold; - } - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_add(fold->qp[i], - isl_qpolynomial_copy(qp)); - if (!fold->qp[i]) - goto error; - } - - isl_qpolynomial_free(qp); - return fold; -error: - isl_qpolynomial_fold_free(fold); - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_add_on_domain( - __isl_keep isl_set *dom, - __isl_take isl_qpolynomial_fold *fold1, - __isl_take isl_qpolynomial_fold *fold2) -{ - int i; - isl_qpolynomial_fold *res = NULL; - - if (!fold1 || !fold2) - goto error; - - if (isl_qpolynomial_fold_is_empty(fold1)) { - isl_qpolynomial_fold_free(fold1); - return fold2; - } - - if (isl_qpolynomial_fold_is_empty(fold2)) { - isl_qpolynomial_fold_free(fold2); - return fold1; - } - - if (fold1->n == 1 && fold2->n != 1) - return isl_qpolynomial_fold_add_on_domain(dom, fold2, fold1); - - if (fold2->n == 1) { - res = isl_qpolynomial_fold_add_qpolynomial(fold1, - isl_qpolynomial_copy(fold2->qp[0])); - isl_qpolynomial_fold_free(fold2); - return res; - } - - res = isl_qpolynomial_fold_add_qpolynomial( - isl_qpolynomial_fold_copy(fold1), - isl_qpolynomial_copy(fold2->qp[0])); - - for (i = 1; i < fold2->n; ++i) { - isl_qpolynomial_fold *res_i; - res_i = isl_qpolynomial_fold_add_qpolynomial( - isl_qpolynomial_fold_copy(fold1), - isl_qpolynomial_copy(fold2->qp[i])); - res = isl_qpolynomial_fold_fold_on_domain(dom, res, res_i); - } - - isl_qpolynomial_fold_free(fold1); - isl_qpolynomial_fold_free(fold2); - return res; -error: - isl_qpolynomial_fold_free(res); - isl_qpolynomial_fold_free(fold1); - isl_qpolynomial_fold_free(fold2); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_substitute_equalities( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_basic_set *eq) -{ - int i; - - if (!fold || !eq) - goto error; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_substitute_equalities(fold->qp[i], - isl_basic_set_copy(eq)); - if (!fold->qp[i]) - goto error; - } - - isl_basic_set_free(eq); - return fold; -error: - isl_basic_set_free(eq); - isl_qpolynomial_fold_free(fold); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_gist( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *context) -{ - int i; - - if (!fold || !context) - goto error; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_gist(fold->qp[i], - isl_set_copy(context)); - if (!fold->qp[i]) - goto error; - } - - isl_set_free(context); - return fold; -error: - isl_set_free(context); - isl_qpolynomial_fold_free(fold); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_gist_params( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *context) -{ - isl_space *space = isl_qpolynomial_fold_get_domain_space(fold); - isl_set *dom_context = isl_set_universe(space); - dom_context = isl_set_intersect_params(dom_context, context); - return isl_qpolynomial_fold_gist(fold, dom_context); -} - -#define HAS_TYPE - -#undef PW -#define PW isl_pw_qpolynomial_fold -#undef EL -#define EL isl_qpolynomial_fold -#undef EL_IS_ZERO -#define EL_IS_ZERO is_empty -#undef ZERO -#define ZERO zero -#undef IS_ZERO -#define IS_ZERO is_zero -#undef FIELD -#define FIELD fold -#undef DEFAULT_IS_ZERO -#define DEFAULT_IS_ZERO 1 - -#define NO_NEG - -#include - -#undef UNION -#define UNION isl_union_pw_qpolynomial_fold -#undef PART -#define PART isl_pw_qpolynomial_fold -#undef PARTS -#define PARTS pw_qpolynomial_fold -#define ALIGN_DOMAIN - -#include - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_empty(enum isl_fold type, - __isl_take isl_space *dim) -{ - return qpolynomial_fold_alloc(type, dim, 0); -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_alloc( - enum isl_fold type, __isl_take isl_qpolynomial *qp) -{ - isl_qpolynomial_fold *fold; - - if (!qp) - return NULL; - - fold = qpolynomial_fold_alloc(type, isl_space_copy(qp->dim), 1); - if (!fold) - goto error; - - fold->qp[0] = qp; - fold->n++; - - return fold; -error: - isl_qpolynomial_fold_free(fold); - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_copy( - __isl_keep isl_qpolynomial_fold *fold) -{ - if (!fold) - return NULL; - - fold->ref++; - return fold; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_dup( - __isl_keep isl_qpolynomial_fold *fold) -{ - int i; - isl_qpolynomial_fold *dup; - - if (!fold) - return NULL; - dup = qpolynomial_fold_alloc(fold->type, - isl_space_copy(fold->dim), fold->n); - if (!dup) - return NULL; - - dup->n = fold->n; - for (i = 0; i < fold->n; ++i) { - dup->qp[i] = isl_qpolynomial_copy(fold->qp[i]); - if (!dup->qp[i]) - goto error; - } - - return dup; -error: - isl_qpolynomial_fold_free(dup); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_cow( - __isl_take isl_qpolynomial_fold *fold) -{ - if (!fold) - return NULL; - - if (fold->ref == 1) - return fold; - fold->ref--; - return isl_qpolynomial_fold_dup(fold); -} - -void isl_qpolynomial_fold_free(__isl_take isl_qpolynomial_fold *fold) -{ - int i; - - if (!fold) - return; - if (--fold->ref > 0) - return; - - for (i = 0; i < fold->n; ++i) - isl_qpolynomial_free(fold->qp[i]); - isl_space_free(fold->dim); - free(fold); -} - -int isl_qpolynomial_fold_is_empty(__isl_keep isl_qpolynomial_fold *fold) -{ - if (!fold) - return -1; - - return fold->n == 0; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_fold( - __isl_take isl_qpolynomial_fold *fold1, - __isl_take isl_qpolynomial_fold *fold2) -{ - int i; - struct isl_qpolynomial_fold *res = NULL; - - if (!fold1 || !fold2) - goto error; - - isl_assert(fold1->dim->ctx, fold1->type == fold2->type, goto error); - isl_assert(fold1->dim->ctx, isl_space_is_equal(fold1->dim, fold2->dim), - goto error); - - if (isl_qpolynomial_fold_is_empty(fold1)) { - isl_qpolynomial_fold_free(fold1); - return fold2; - } - - if (isl_qpolynomial_fold_is_empty(fold2)) { - isl_qpolynomial_fold_free(fold2); - return fold1; - } - - res = qpolynomial_fold_alloc(fold1->type, isl_space_copy(fold1->dim), - fold1->n + fold2->n); - if (!res) - goto error; - - for (i = 0; i < fold1->n; ++i) { - res->qp[res->n] = isl_qpolynomial_copy(fold1->qp[i]); - if (!res->qp[res->n]) - goto error; - res->n++; - } - - for (i = 0; i < fold2->n; ++i) { - res->qp[res->n] = isl_qpolynomial_copy(fold2->qp[i]); - if (!res->qp[res->n]) - goto error; - res->n++; - } - - isl_qpolynomial_fold_free(fold1); - isl_qpolynomial_fold_free(fold2); - - return res; -error: - isl_qpolynomial_fold_free(res); - isl_qpolynomial_fold_free(fold1); - isl_qpolynomial_fold_free(fold2); - return NULL; -} - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_fold( - __isl_take isl_pw_qpolynomial_fold *pw1, - __isl_take isl_pw_qpolynomial_fold *pw2) -{ - int i, j, n; - struct isl_pw_qpolynomial_fold *res; - isl_set *set; - - if (!pw1 || !pw2) - goto error; - - isl_assert(pw1->dim->ctx, isl_space_is_equal(pw1->dim, pw2->dim), goto error); - - if (isl_pw_qpolynomial_fold_is_zero(pw1)) { - isl_pw_qpolynomial_fold_free(pw1); - return pw2; - } - - if (isl_pw_qpolynomial_fold_is_zero(pw2)) { - isl_pw_qpolynomial_fold_free(pw2); - return pw1; - } - - if (pw1->type != pw2->type) - isl_die(pw1->dim->ctx, isl_error_invalid, - "fold types don't match", goto error); - - n = (pw1->n + 1) * (pw2->n + 1); - res = isl_pw_qpolynomial_fold_alloc_size(isl_space_copy(pw1->dim), - pw1->type, n); - - for (i = 0; i < pw1->n; ++i) { - set = isl_set_copy(pw1->p[i].set); - for (j = 0; j < pw2->n; ++j) { - struct isl_set *common; - isl_qpolynomial_fold *sum; - set = isl_set_subtract(set, - isl_set_copy(pw2->p[j].set)); - common = isl_set_intersect(isl_set_copy(pw1->p[i].set), - isl_set_copy(pw2->p[j].set)); - if (isl_set_plain_is_empty(common)) { - isl_set_free(common); - continue; - } - - sum = isl_qpolynomial_fold_fold_on_domain(common, - isl_qpolynomial_fold_copy(pw1->p[i].fold), - isl_qpolynomial_fold_copy(pw2->p[j].fold)); - - res = isl_pw_qpolynomial_fold_add_piece(res, common, sum); - } - res = isl_pw_qpolynomial_fold_add_piece(res, set, - isl_qpolynomial_fold_copy(pw1->p[i].fold)); - } - - for (j = 0; j < pw2->n; ++j) { - set = isl_set_copy(pw2->p[j].set); - for (i = 0; i < pw1->n; ++i) - set = isl_set_subtract(set, isl_set_copy(pw1->p[i].set)); - res = isl_pw_qpolynomial_fold_add_piece(res, set, - isl_qpolynomial_fold_copy(pw2->p[j].fold)); - } - - isl_pw_qpolynomial_fold_free(pw1); - isl_pw_qpolynomial_fold_free(pw2); - - return res; -error: - isl_pw_qpolynomial_fold_free(pw1); - isl_pw_qpolynomial_fold_free(pw2); - return NULL; -} - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold( - __isl_take isl_union_pw_qpolynomial_fold *u, - __isl_take isl_pw_qpolynomial_fold *part) -{ - uint32_t hash; - struct isl_hash_table_entry *entry; - - u = isl_union_pw_qpolynomial_fold_cow(u); - - if (!part || !u) - goto error; - - isl_assert(u->dim->ctx, isl_space_match(part->dim, isl_dim_param, u->dim, - isl_dim_param), goto error); - - hash = isl_space_get_hash(part->dim); - entry = isl_hash_table_find(u->dim->ctx, &u->table, hash, - &has_dim, part->dim, 1); - if (!entry) - goto error; - - if (!entry->data) - entry->data = part; - else { - entry->data = isl_pw_qpolynomial_fold_fold(entry->data, - isl_pw_qpolynomial_fold_copy(part)); - if (!entry->data) - goto error; - isl_pw_qpolynomial_fold_free(part); - } - - return u; -error: - isl_pw_qpolynomial_fold_free(part); - isl_union_pw_qpolynomial_fold_free(u); - return NULL; -} - -static int fold_part(__isl_take isl_pw_qpolynomial_fold *part, void *user) -{ - isl_union_pw_qpolynomial_fold **u; - u = (isl_union_pw_qpolynomial_fold **)user; - - *u = isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold(*u, part); - - return 0; -} - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_fold( - __isl_take isl_union_pw_qpolynomial_fold *u1, - __isl_take isl_union_pw_qpolynomial_fold *u2) -{ - u1 = isl_union_pw_qpolynomial_fold_cow(u1); - - if (!u1 || !u2) - goto error; - - if (isl_union_pw_qpolynomial_fold_foreach_pw_qpolynomial_fold(u2, - &fold_part, &u1) < 0) - goto error; - - isl_union_pw_qpolynomial_fold_free(u2); - - return u1; -error: - isl_union_pw_qpolynomial_fold_free(u1); - isl_union_pw_qpolynomial_fold_free(u2); - return NULL; -} - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_from_pw_qpolynomial( - enum isl_fold type, __isl_take isl_pw_qpolynomial *pwqp) -{ - int i; - isl_pw_qpolynomial_fold *pwf; - - if (!pwqp) - return NULL; - - pwf = isl_pw_qpolynomial_fold_alloc_size(isl_space_copy(pwqp->dim), - type, pwqp->n); - - for (i = 0; i < pwqp->n; ++i) - pwf = isl_pw_qpolynomial_fold_add_piece(pwf, - isl_set_copy(pwqp->p[i].set), - isl_qpolynomial_fold_alloc(type, - isl_qpolynomial_copy(pwqp->p[i].qp))); - - isl_pw_qpolynomial_free(pwqp); - - return pwf; -} - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_add( - __isl_take isl_pw_qpolynomial_fold *pwf1, - __isl_take isl_pw_qpolynomial_fold *pwf2) -{ - return isl_pw_qpolynomial_fold_union_add_(pwf1, pwf2); -} - -int isl_qpolynomial_fold_plain_is_equal(__isl_keep isl_qpolynomial_fold *fold1, - __isl_keep isl_qpolynomial_fold *fold2) -{ - int i; - - if (!fold1 || !fold2) - return -1; - - if (fold1->n != fold2->n) - return 0; - - /* We probably want to sort the qps first... */ - for (i = 0; i < fold1->n; ++i) { - int eq = isl_qpolynomial_plain_is_equal(fold1->qp[i], fold2->qp[i]); - if (eq < 0 || !eq) - return eq; - } - - return 1; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_fold_eval( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_point *pnt) -{ - isl_qpolynomial *qp; - - if (!fold || !pnt) - goto error; - isl_assert(pnt->dim->ctx, isl_space_is_equal(pnt->dim, fold->dim), goto error); - isl_assert(pnt->dim->ctx, - fold->type == isl_fold_max || fold->type == isl_fold_min, - goto error); - - if (fold->n == 0) - qp = isl_qpolynomial_zero_on_domain(isl_space_copy(fold->dim)); - else { - int i; - qp = isl_qpolynomial_eval(isl_qpolynomial_copy(fold->qp[0]), - isl_point_copy(pnt)); - for (i = 1; i < fold->n; ++i) { - isl_qpolynomial *qp_i; - qp_i = isl_qpolynomial_eval( - isl_qpolynomial_copy(fold->qp[i]), - isl_point_copy(pnt)); - if (fold->type == isl_fold_max) - qp = isl_qpolynomial_max_cst(qp, qp_i); - else - qp = isl_qpolynomial_min_cst(qp, qp_i); - } - } - isl_qpolynomial_fold_free(fold); - isl_point_free(pnt); - - return qp; -error: - isl_qpolynomial_fold_free(fold); - isl_point_free(pnt); - return NULL; -} - -size_t isl_pw_qpolynomial_fold_size(__isl_keep isl_pw_qpolynomial_fold *pwf) -{ - int i; - size_t n = 0; - - for (i = 0; i < pwf->n; ++i) - n += pwf->p[i].fold->n; - - return n; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_fold_opt_on_domain( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *set, int max) -{ - int i; - isl_qpolynomial *opt; - - if (!set || !fold) - goto error; - - if (fold->n == 0) { - isl_space *dim = isl_space_copy(fold->dim); - isl_set_free(set); - isl_qpolynomial_fold_free(fold); - return isl_qpolynomial_zero_on_domain(dim); - } - - opt = isl_qpolynomial_opt_on_domain(isl_qpolynomial_copy(fold->qp[0]), - isl_set_copy(set), max); - for (i = 1; i < fold->n; ++i) { - isl_qpolynomial *opt_i; - opt_i = isl_qpolynomial_opt_on_domain( - isl_qpolynomial_copy(fold->qp[i]), - isl_set_copy(set), max); - if (max) - opt = isl_qpolynomial_max_cst(opt, opt_i); - else - opt = isl_qpolynomial_min_cst(opt, opt_i); - } - - isl_set_free(set); - isl_qpolynomial_fold_free(fold); - - return opt; -error: - isl_set_free(set); - isl_qpolynomial_fold_free(fold); - return NULL; -} - -/* Check whether for each quasi-polynomial in "fold2" there is - * a quasi-polynomial in "fold1" that dominates it on "set". - */ -static int qpolynomial_fold_covers_on_domain(__isl_keep isl_set *set, - __isl_keep isl_qpolynomial_fold *fold1, - __isl_keep isl_qpolynomial_fold *fold2) -{ - int i, j; - int covers; - - if (!set || !fold1 || !fold2) - return -1; - - covers = fold1->type == isl_fold_max ? 1 : -1; - - for (i = 0; i < fold2->n; ++i) { - for (j = 0; j < fold1->n; ++j) { - isl_qpolynomial *d; - int sgn; - - d = isl_qpolynomial_sub( - isl_qpolynomial_copy(fold1->qp[j]), - isl_qpolynomial_copy(fold2->qp[i])); - sgn = isl_qpolynomial_sign(set, d); - isl_qpolynomial_free(d); - if (sgn == covers) - break; - } - if (j >= fold1->n) - return 0; - } - - return 1; -} - -/* Check whether "pwf1" dominated "pwf2", i.e., the domain of "pwf1" contains - * that of "pwf2" and on each cell, the corresponding fold from pwf1 dominates - * that of pwf2. - */ -int isl_pw_qpolynomial_fold_covers(__isl_keep isl_pw_qpolynomial_fold *pwf1, - __isl_keep isl_pw_qpolynomial_fold *pwf2) -{ - int i, j; - isl_set *dom1, *dom2; - int is_subset; - - if (!pwf1 || !pwf2) - return -1; - - if (pwf2->n == 0) - return 1; - if (pwf1->n == 0) - return 0; - - dom1 = isl_pw_qpolynomial_fold_domain(isl_pw_qpolynomial_fold_copy(pwf1)); - dom2 = isl_pw_qpolynomial_fold_domain(isl_pw_qpolynomial_fold_copy(pwf2)); - is_subset = isl_set_is_subset(dom2, dom1); - isl_set_free(dom1); - isl_set_free(dom2); - - if (is_subset < 0 || !is_subset) - return is_subset; - - for (i = 0; i < pwf2->n; ++i) { - for (j = 0; j < pwf1->n; ++j) { - int is_empty; - isl_set *common; - int covers; - - common = isl_set_intersect(isl_set_copy(pwf1->p[j].set), - isl_set_copy(pwf2->p[i].set)); - is_empty = isl_set_is_empty(common); - if (is_empty < 0 || is_empty) { - isl_set_free(common); - if (is_empty < 0) - return -1; - continue; - } - covers = qpolynomial_fold_covers_on_domain(common, - pwf1->p[j].fold, pwf2->p[i].fold); - isl_set_free(common); - if (covers < 0 || !covers) - return covers; - } - } - - return 1; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_morph_domain( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_morph *morph) -{ - int i; - isl_ctx *ctx; - - if (!fold || !morph) - goto error; - - ctx = fold->dim->ctx; - isl_assert(ctx, isl_space_is_equal(fold->dim, morph->dom->dim), goto error); - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - goto error; - - isl_space_free(fold->dim); - fold->dim = isl_space_copy(morph->ran->dim); - if (!fold->dim) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_morph_domain(fold->qp[i], - isl_morph_copy(morph)); - if (!fold->qp[i]) - goto error; - } - - isl_morph_free(morph); - - return fold; -error: - isl_qpolynomial_fold_free(fold); - isl_morph_free(morph); - return NULL; -} - -enum isl_fold isl_qpolynomial_fold_get_type(__isl_keep isl_qpolynomial_fold *fold) -{ - if (!fold) - return isl_fold_list; - return fold->type; -} - -enum isl_fold isl_union_pw_qpolynomial_fold_get_type( - __isl_keep isl_union_pw_qpolynomial_fold *upwf) -{ - if (!upwf) - return isl_fold_list; - return upwf->type; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_lift( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_space *dim) -{ - int i; - - if (!fold || !dim) - goto error; - - if (isl_space_is_equal(fold->dim, dim)) { - isl_space_free(dim); - return fold; - } - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - goto error; - - isl_space_free(fold->dim); - fold->dim = isl_space_copy(dim); - if (!fold->dim) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_lift(fold->qp[i], - isl_space_copy(dim)); - if (!fold->qp[i]) - goto error; - } - - isl_space_free(dim); - - return fold; -error: - isl_qpolynomial_fold_free(fold); - isl_space_free(dim); - return NULL; -} - -int isl_qpolynomial_fold_foreach_qpolynomial( - __isl_keep isl_qpolynomial_fold *fold, - int (*fn)(__isl_take isl_qpolynomial *qp, void *user), void *user) -{ - int i; - - if (!fold) - return -1; - - for (i = 0; i < fold->n; ++i) - if (fn(isl_qpolynomial_copy(fold->qp[i]), user) < 0) - return -1; - - return 0; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_move_dims( - __isl_take isl_qpolynomial_fold *fold, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - int i; - - if (n == 0) - return fold; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - - fold->dim = isl_space_move_dims(fold->dim, dst_type, dst_pos, - src_type, src_pos, n); - if (!fold->dim) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_move_dims(fold->qp[i], - dst_type, dst_pos, src_type, src_pos, n); - if (!fold->qp[i]) - goto error; - } - - return fold; -error: - isl_qpolynomial_fold_free(fold); - return NULL; -} - -/* For each 0 <= i < "n", replace variable "first" + i of type "type" - * in fold->qp[k] by subs[i]. - */ -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_substitute( - __isl_take isl_qpolynomial_fold *fold, - enum isl_dim_type type, unsigned first, unsigned n, - __isl_keep isl_qpolynomial **subs) -{ - int i; - - if (n == 0) - return fold; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_substitute(fold->qp[i], - type, first, n, subs); - if (!fold->qp[i]) - goto error; - } - - return fold; -error: - isl_qpolynomial_fold_free(fold); - return NULL; -} - -static int add_pwqp(__isl_take isl_pw_qpolynomial *pwqp, void *user) -{ - isl_ctx *ctx; - isl_pw_qpolynomial_fold *pwf; - isl_union_pw_qpolynomial_fold **upwf; - uint32_t hash; - struct isl_hash_table_entry *entry; - - upwf = (isl_union_pw_qpolynomial_fold **)user; - - ctx = pwqp->dim->ctx; - hash = isl_space_get_hash(pwqp->dim); - entry = isl_hash_table_find(ctx, &(*upwf)->table, - hash, &has_dim, pwqp->dim, 1); - if (!entry) - goto error; - - pwf = isl_pw_qpolynomial_fold_from_pw_qpolynomial((*upwf)->type, pwqp); - if (!entry->data) - entry->data = pwf; - else { - entry->data = isl_pw_qpolynomial_fold_add(entry->data, pwf); - if (!entry->data) - return -1; - if (isl_pw_qpolynomial_fold_is_zero(entry->data)) { - isl_pw_qpolynomial_fold_free(entry->data); - isl_hash_table_remove(ctx, &(*upwf)->table, entry); - } - } - - return 0; -error: - isl_pw_qpolynomial_free(pwqp); - return -1; -} - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_add_union_pw_qpolynomial( - __isl_take isl_union_pw_qpolynomial_fold *upwf, - __isl_take isl_union_pw_qpolynomial *upwqp) -{ - upwf = isl_union_pw_qpolynomial_fold_align_params(upwf, - isl_union_pw_qpolynomial_get_space(upwqp)); - upwqp = isl_union_pw_qpolynomial_align_params(upwqp, - isl_union_pw_qpolynomial_fold_get_space(upwf)); - - upwf = isl_union_pw_qpolynomial_fold_cow(upwf); - if (!upwf || !upwqp) - goto error; - - if (isl_union_pw_qpolynomial_foreach_pw_qpolynomial(upwqp, &add_pwqp, - &upwf) < 0) - goto error; - - isl_union_pw_qpolynomial_free(upwqp); - - return upwf; -error: - isl_union_pw_qpolynomial_fold_free(upwf); - isl_union_pw_qpolynomial_free(upwqp); - return NULL; -} - -static int join_compatible(__isl_keep isl_space *dim1, __isl_keep isl_space *dim2) -{ - int m; - m = isl_space_match(dim1, isl_dim_param, dim2, isl_dim_param); - if (m < 0 || !m) - return m; - return isl_space_tuple_match(dim1, isl_dim_out, dim2, isl_dim_in); -} - -/* Compute the intersection of the range of the map and the domain - * of the piecewise quasipolynomial reduction and then compute a bound - * on the associated quasipolynomial reduction over all elements - * in this intersection. - * - * We first introduce some unconstrained dimensions in the - * piecewise quasipolynomial, intersect the resulting domain - * with the wrapped map and the compute the sum. - */ -__isl_give isl_pw_qpolynomial_fold *isl_map_apply_pw_qpolynomial_fold( - __isl_take isl_map *map, __isl_take isl_pw_qpolynomial_fold *pwf, - int *tight) -{ - isl_ctx *ctx; - isl_set *dom; - isl_space *map_dim; - isl_space *pwf_dim; - unsigned n_in; - int ok; - - ctx = isl_map_get_ctx(map); - if (!ctx) - goto error; - - map_dim = isl_map_get_space(map); - pwf_dim = isl_pw_qpolynomial_fold_get_space(pwf); - ok = join_compatible(map_dim, pwf_dim); - isl_space_free(map_dim); - isl_space_free(pwf_dim); - if (!ok) - isl_die(ctx, isl_error_invalid, "incompatible dimensions", - goto error); - - n_in = isl_map_dim(map, isl_dim_in); - pwf = isl_pw_qpolynomial_fold_insert_dims(pwf, isl_dim_in, 0, n_in); - - dom = isl_map_wrap(map); - pwf = isl_pw_qpolynomial_fold_reset_domain_space(pwf, - isl_set_get_space(dom)); - - pwf = isl_pw_qpolynomial_fold_intersect_domain(pwf, dom); - pwf = isl_pw_qpolynomial_fold_bound(pwf, tight); - - return pwf; -error: - isl_map_free(map); - isl_pw_qpolynomial_fold_free(pwf); - return NULL; -} - -__isl_give isl_pw_qpolynomial_fold *isl_set_apply_pw_qpolynomial_fold( - __isl_take isl_set *set, __isl_take isl_pw_qpolynomial_fold *pwf, - int *tight) -{ - return isl_map_apply_pw_qpolynomial_fold(set, pwf, tight); -} - -struct isl_apply_fold_data { - isl_union_pw_qpolynomial_fold *upwf; - isl_union_pw_qpolynomial_fold *res; - isl_map *map; - int tight; -}; - -static int pw_qpolynomial_fold_apply(__isl_take isl_pw_qpolynomial_fold *pwf, - void *user) -{ - isl_space *map_dim; - isl_space *pwf_dim; - struct isl_apply_fold_data *data = user; - int ok; - - map_dim = isl_map_get_space(data->map); - pwf_dim = isl_pw_qpolynomial_fold_get_space(pwf); - ok = join_compatible(map_dim, pwf_dim); - isl_space_free(map_dim); - isl_space_free(pwf_dim); - - if (ok) { - pwf = isl_map_apply_pw_qpolynomial_fold(isl_map_copy(data->map), - pwf, data->tight ? &data->tight : NULL); - data->res = isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold( - data->res, pwf); - } else - isl_pw_qpolynomial_fold_free(pwf); - - return 0; -} - -static int map_apply(__isl_take isl_map *map, void *user) -{ - struct isl_apply_fold_data *data = user; - int r; - - data->map = map; - r = isl_union_pw_qpolynomial_fold_foreach_pw_qpolynomial_fold( - data->upwf, &pw_qpolynomial_fold_apply, data); - - isl_map_free(map); - return r; -} - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_map_apply_union_pw_qpolynomial_fold( - __isl_take isl_union_map *umap, - __isl_take isl_union_pw_qpolynomial_fold *upwf, int *tight) -{ - isl_space *dim; - enum isl_fold type; - struct isl_apply_fold_data data; - - upwf = isl_union_pw_qpolynomial_fold_align_params(upwf, - isl_union_map_get_space(umap)); - umap = isl_union_map_align_params(umap, - isl_union_pw_qpolynomial_fold_get_space(upwf)); - - data.upwf = upwf; - data.tight = tight ? 1 : 0; - dim = isl_union_pw_qpolynomial_fold_get_space(upwf); - type = isl_union_pw_qpolynomial_fold_get_type(upwf); - data.res = isl_union_pw_qpolynomial_fold_zero(dim, type); - if (isl_union_map_foreach_map(umap, &map_apply, &data) < 0) - goto error; - - isl_union_map_free(umap); - isl_union_pw_qpolynomial_fold_free(upwf); - - if (tight) - *tight = data.tight; - - return data.res; -error: - isl_union_map_free(umap); - isl_union_pw_qpolynomial_fold_free(upwf); - isl_union_pw_qpolynomial_fold_free(data.res); - return NULL; -} - -__isl_give isl_union_pw_qpolynomial_fold *isl_union_set_apply_union_pw_qpolynomial_fold( - __isl_take isl_union_set *uset, - __isl_take isl_union_pw_qpolynomial_fold *upwf, int *tight) -{ - return isl_union_map_apply_union_pw_qpolynomial_fold(uset, upwf, tight); -} - -/* Reorder the dimension of "fold" according to the given reordering. - */ -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_realign_domain( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_reordering *r) -{ - int i; - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold || !r) - goto error; - - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_realign_domain(fold->qp[i], - isl_reordering_copy(r)); - if (!fold->qp[i]) - goto error; - } - - fold = isl_qpolynomial_fold_reset_domain_space(fold, - isl_space_copy(r->dim)); - - isl_reordering_free(r); - - return fold; -error: - isl_qpolynomial_fold_free(fold); - isl_reordering_free(r); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_mul_isl_int( - __isl_take isl_qpolynomial_fold *fold, isl_int v) -{ - int i; - - if (isl_int_is_one(v)) - return fold; - if (fold && isl_int_is_zero(v)) { - isl_qpolynomial_fold *zero; - isl_space *dim = isl_space_copy(fold->dim); - zero = isl_qpolynomial_fold_empty(fold->type, dim); - isl_qpolynomial_fold_free(fold); - return zero; - } - - fold = isl_qpolynomial_fold_cow(fold); - if (!fold) - return NULL; - - if (isl_int_is_neg(v)) - fold->type = isl_fold_type_negate(fold->type); - for (i = 0; i < fold->n; ++i) { - fold->qp[i] = isl_qpolynomial_mul_isl_int(fold->qp[i], v); - if (!fold->qp[i]) - goto error; - } - - return fold; -error: - isl_qpolynomial_fold_free(fold); - return NULL; -} - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_scale( - __isl_take isl_qpolynomial_fold *fold, isl_int v) -{ - return isl_qpolynomial_fold_mul_isl_int(fold, v); -} diff --git a/cloog-0.17.0/isl/isl_gmp.c b/cloog-0.17.0/isl/isl_gmp.c deleted file mode 100644 index 0c8db59..0000000 --- a/cloog-0.17.0/isl/isl_gmp.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include - -uint32_t isl_gmp_hash(mpz_t v, uint32_t hash) -{ - int sa = v[0]._mp_size; - int abs_sa = sa < 0 ? -sa : sa; - unsigned char *data = (unsigned char *)v[0]._mp_d; - unsigned char *end = data + abs_sa * sizeof(v[0]._mp_d[0]); - - if (sa < 0) - isl_hash_byte(hash, 0xFF); - for (; data < end; ++data) - isl_hash_byte(hash, *data); - return hash; -} diff --git a/cloog-0.17.0/isl/isl_hash.c b/cloog-0.17.0/isl/isl_hash.c deleted file mode 100644 index 52e3135..0000000 --- a/cloog-0.17.0/isl/isl_hash.c +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include "isl_config.h" - -uint32_t isl_hash_string(uint32_t hash, const char *s) -{ - for (; *s; s++) - isl_hash_byte(hash, *s); - return hash; -} - -uint32_t isl_hash_mem(uint32_t hash, const void *p, size_t len) -{ - int i; - const char *s = p; - for (i = 0; i < len; ++i) - isl_hash_byte(hash, s[i]); - return hash; -} - -static unsigned int round_up(unsigned int v) -{ - int old_v = v; - - while (v) { - old_v = v; - v ^= v & -v; - } - return old_v << 1; -} - -int isl_hash_table_init(struct isl_ctx *ctx, struct isl_hash_table *table, - int min_size) -{ - size_t size; - - if (!table) - return -1; - - if (min_size < 2) - min_size = 2; - table->bits = ffs(round_up(4 * (min_size + 1) / 3 - 1)) - 1; - table->n = 0; - - size = 1 << table->bits; - table->entries = isl_calloc_array(ctx, struct isl_hash_table_entry, - size); - if (!table->entries) - return -1; - - return 0; -} - -static int grow_table(struct isl_ctx *ctx, struct isl_hash_table *table, - int (*eq)(const void *entry, const void *val)) -{ - size_t old_size, size; - struct isl_hash_table_entry *entries; - uint32_t h; - - entries = table->entries; - old_size = 1 << table->bits; - size = 2 * old_size; - table->entries = isl_calloc_array(ctx, struct isl_hash_table_entry, - size); - if (!table->entries) { - table->entries = entries; - return -1; - } - - table->bits++; - - for (h = 0; h < old_size; ++h) { - struct isl_hash_table_entry *entry; - - if (!entries[h].data) - continue; - - entry = isl_hash_table_find(ctx, table, entries[h].hash, - eq, entries[h].data, 1); - if (!entry) { - table->bits--; - free(table->entries); - table->entries = entries; - return -1; - } - - *entry = entries[h]; - } - - free(entries); - - return 0; -} - -struct isl_hash_table *isl_hash_table_alloc(struct isl_ctx *ctx, int min_size) -{ - struct isl_hash_table *table = NULL; - - table = isl_alloc_type(ctx, struct isl_hash_table); - if (isl_hash_table_init(ctx, table, min_size)) - goto error; - return table; -error: - isl_hash_table_free(ctx, table); - return NULL; -} - -void isl_hash_table_clear(struct isl_hash_table *table) -{ - if (!table) - return; - free(table->entries); -} - -void isl_hash_table_free(struct isl_ctx *ctx, struct isl_hash_table *table) -{ - if (!table) - return; - isl_hash_table_clear(table); - free(table); -} - -struct isl_hash_table_entry *isl_hash_table_find(struct isl_ctx *ctx, - struct isl_hash_table *table, - uint32_t key_hash, - int (*eq)(const void *entry, const void *val), - const void *val, int reserve) -{ - size_t size; - uint32_t h, key_bits; - - key_bits = isl_hash_bits(key_hash, table->bits); - size = 1 << table->bits; - for (h = key_bits; table->entries[h].data; h = (h+1) % size) - if (table->entries[h].hash == key_hash && - eq(table->entries[h].data, val)) - return &table->entries[h]; - - if (!reserve) - return NULL; - - if (4 * table->n >= 3 * size) { - if (grow_table(ctx, table, eq) < 0) - return NULL; - return isl_hash_table_find(ctx, table, key_hash, eq, val, 1); - } - - table->n++; - table->entries[h].hash = key_hash; - - return &table->entries[h]; -} - -int isl_hash_table_foreach(struct isl_ctx *ctx, - struct isl_hash_table *table, - int (*fn)(void **entry, void *user), void *user) -{ - size_t size; - uint32_t h; - - size = 1 << table->bits; - for (h = 0; h < size; ++ h) - if (table->entries[h].data && - fn(&table->entries[h].data, user) < 0) - return -1; - - return 0; -} - -void isl_hash_table_remove(struct isl_ctx *ctx, - struct isl_hash_table *table, - struct isl_hash_table_entry *entry) -{ - int h, h2; - size_t size; - - if (!table || !entry) - return; - - size = 1 << table->bits; - h = entry - table->entries; - isl_assert(ctx, h >= 0 && h < size, return); - - for (h2 = h+1; table->entries[h2 % size].data; h2++) { - uint32_t bits = isl_hash_bits(table->entries[h2 % size].hash, - table->bits); - uint32_t offset = (size + bits - (h+1)) % size; - if (offset <= h2 - (h+1)) - continue; - *entry = table->entries[h2 % size]; - h = h2; - entry = &table->entries[h % size]; - } - - entry->hash = 0; - entry->data = NULL; - table->n--; -} diff --git a/cloog-0.17.0/isl/isl_hmap_map_basic_set.c b/cloog-0.17.0/isl/isl_hmap_map_basic_set.c deleted file mode 100644 index b303516..0000000 --- a/cloog-0.17.0/isl/isl_hmap_map_basic_set.c +++ /dev/null @@ -1,102 +0,0 @@ -#include - -struct isl_map_basic_set_pair { - isl_map *key; - isl_basic_set *val; -}; - -__isl_give isl_hmap_map_basic_set *isl_hmap_map_basic_set_alloc(isl_ctx *ctx, - int min_size) -{ - return (isl_hmap_map_basic_set *) isl_hash_table_alloc(ctx, min_size); -} - -static int free_pair(void **entry, void *user) -{ - struct isl_map_basic_set_pair *pair = *entry; - isl_map_free(pair->key); - isl_basic_set_free(pair->val); - free(pair); - *entry = NULL; - return 0; -} - -void isl_hmap_map_basic_set_free(isl_ctx *ctx, - __isl_take isl_hmap_map_basic_set *hmap) -{ - if (!hmap) - return; - isl_hash_table_foreach(ctx, &hmap->table, &free_pair, NULL); - isl_hash_table_free(ctx, &hmap->table); -} - -static int has_key(const void *entry, const void *key) -{ - const struct isl_map_basic_set_pair *pair = entry; - isl_map *map = (isl_map *)key; - - return isl_map_plain_is_equal(pair->key, map); -} - -int isl_hmap_map_basic_set_has(isl_ctx *ctx, - __isl_keep isl_hmap_map_basic_set *hmap, __isl_keep isl_map *key) -{ - uint32_t hash; - - hash = isl_map_get_hash(key); - return !!isl_hash_table_find(ctx, &hmap->table, hash, &has_key, key, 0); -} - -__isl_give isl_basic_set *isl_hmap_map_basic_set_get(isl_ctx *ctx, - __isl_keep isl_hmap_map_basic_set *hmap, __isl_take isl_map *key) -{ - struct isl_hash_table_entry *entry; - struct isl_map_basic_set_pair *pair; - uint32_t hash; - - hash = isl_map_get_hash(key); - entry = isl_hash_table_find(ctx, &hmap->table, hash, &has_key, key, 0); - isl_map_free(key); - - if (!entry) - return NULL; - - pair = entry->data; - - return isl_basic_set_copy(pair->val); -} - -int isl_hmap_map_basic_set_set(isl_ctx *ctx, - __isl_keep isl_hmap_map_basic_set *hmap, __isl_take isl_map *key, - __isl_take isl_basic_set *val) -{ - struct isl_hash_table_entry *entry; - struct isl_map_basic_set_pair *pair; - uint32_t hash; - - hash = isl_map_get_hash(key); - entry = isl_hash_table_find(ctx, &hmap->table, hash, &has_key, key, 1); - - if (!entry) - return -1; - - if (entry->data) { - pair = entry->data; - isl_basic_set_free(pair->val); - pair->val = val; - isl_map_free(key); - return 0; - } - - pair = isl_alloc_type(ctx, struct isl_map_basic_set_pair); - if (!pair) { - isl_map_free(key); - isl_basic_set_free(val); - return -1; - } - - entry->data = pair; - pair->key = key; - pair->val = val; - return 0; -} diff --git a/cloog-0.17.0/isl/isl_hmap_map_basic_set.h b/cloog-0.17.0/isl/isl_hmap_map_basic_set.h deleted file mode 100644 index 905791d..0000000 --- a/cloog-0.17.0/isl/isl_hmap_map_basic_set.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef ISL_HMAP_MAP_BASIC_SET_H -#define ISL_HMAP_MAP_BASIC_SET_H - -#include -#include -#include - -struct isl_hmap_map_basic_set { - struct isl_hash_table table; -}; -typedef struct isl_hmap_map_basic_set isl_hmap_map_basic_set; - -__isl_give isl_hmap_map_basic_set *isl_hmap_map_basic_set_alloc( isl_ctx *ctx, - int min_size); -void isl_hmap_map_basic_set_free(isl_ctx *ctx, - __isl_take isl_hmap_map_basic_set *hmap); - -int isl_hmap_map_basic_set_has(isl_ctx *ctx, - __isl_keep isl_hmap_map_basic_set *hmap, __isl_keep isl_map *key); -__isl_give isl_basic_set *isl_hmap_map_basic_set_get(isl_ctx *ctx, - __isl_keep isl_hmap_map_basic_set *hmap, __isl_take isl_map *key); -int isl_hmap_map_basic_set_set(isl_ctx *ctx, - __isl_keep isl_hmap_map_basic_set *hmap, __isl_take isl_map *key, - __isl_take isl_basic_set *val); - -#endif diff --git a/cloog-0.17.0/isl/isl_id.c b/cloog-0.17.0/isl/isl_id.c deleted file mode 100644 index a3a2ea9..0000000 --- a/cloog-0.17.0/isl/isl_id.c +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include - -/* A special, static isl_id to use as domains (and ranges) - * of sets and parameters domains. - * The user should never get a hold on this isl_id. - */ -isl_id isl_id_none = { - .ref = -1, - .ctx = NULL, - .name = "#none", - .user = NULL -}; - -isl_ctx *isl_id_get_ctx(__isl_keep isl_id *id) -{ - return id ? id->ctx : NULL; -} - -void *isl_id_get_user(__isl_keep isl_id *id) -{ - return id ? id->user : NULL; -} - -const char *isl_id_get_name(__isl_keep isl_id *id) -{ - return id ? id->name : NULL; -} - -static __isl_give isl_id *id_alloc(isl_ctx *ctx, const char *name, void *user) -{ - const char *copy = name ? strdup(name) : NULL; - isl_id *id; - - if (name && !copy) - return NULL; - id = isl_alloc_type(ctx, struct isl_id); - if (!id) - goto error; - - id->ctx = ctx; - isl_ctx_ref(id->ctx); - id->ref = 1; - id->name = copy; - id->user = user; - - id->hash = isl_hash_init(); - if (name) - id->hash = isl_hash_string(id->hash, name); - else - id->hash = isl_hash_builtin(id->hash, user); - - return id; -error: - free((char *)copy); - return NULL; -} - -struct isl_name_and_user { - const char *name; - void *user; -}; - -static int isl_id_has_name_and_user(const void *entry, const void *val) -{ - isl_id *id = (isl_id *)entry; - struct isl_name_and_user *nu = (struct isl_name_and_user *) val; - - if (id->user != nu->user) - return 0; - if (!id->name && !nu->name) - return 1; - - return !strcmp(id->name, nu->name); -} - -__isl_give isl_id *isl_id_alloc(isl_ctx *ctx, const char *name, void *user) -{ - struct isl_hash_table_entry *entry; - uint32_t id_hash; - struct isl_name_and_user nu = { name, user }; - - id_hash = isl_hash_init(); - if (name) - id_hash = isl_hash_string(id_hash, name); - else - id_hash = isl_hash_builtin(id_hash, user); - entry = isl_hash_table_find(ctx, &ctx->id_table, id_hash, - isl_id_has_name_and_user, &nu, 1); - if (!entry) - return NULL; - if (entry->data) - return isl_id_copy(entry->data); - entry->data = id_alloc(ctx, name, user); - if (!entry->data) - ctx->id_table.n--; - return entry->data; -} - -/* If the id has a negative refcount, then it is a static isl_id - * which should not be changed. - */ -__isl_give isl_id *isl_id_copy(isl_id *id) -{ - if (!id) - return NULL; - - if (id->ref < 0) - return id; - - id->ref++; - return id; -} - -static int isl_id_eq(const void *entry, const void *name) -{ - return entry == name; -} - -uint32_t isl_hash_id(uint32_t hash, __isl_keep isl_id *id) -{ - if (id) - isl_hash_hash(hash, id->hash); - - return hash; -} - -/* If the id has a negative refcount, then it is a static isl_id - * and should not be freed. - */ -void *isl_id_free(__isl_take isl_id *id) -{ - struct isl_hash_table_entry *entry; - - if (!id) - return NULL; - - if (id->ref < 0) - return NULL; - - if (--id->ref > 0) - return NULL; - - entry = isl_hash_table_find(id->ctx, &id->ctx->id_table, id->hash, - isl_id_eq, id, 0); - if (!entry) - isl_die(id->ctx, isl_error_unknown, - "unable to find id", (void)0); - else - isl_hash_table_remove(id->ctx, &id->ctx->id_table, entry); - - free((char *)id->name); - isl_ctx_deref(id->ctx); - free(id); - - return NULL; -} - -__isl_give isl_printer *isl_printer_print_id(__isl_take isl_printer *p, - __isl_keep isl_id *id) -{ - if (!id) - goto error; - - if (id->name) - p = isl_printer_print_str(p, id->name); - if (id->user) { - char buffer[50]; - snprintf(buffer, sizeof(buffer), "@%p", id->user); - p = isl_printer_print_str(p, buffer); - } - return p; -error: - isl_printer_free(p); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_id_private.h b/cloog-0.17.0/isl/isl_id_private.h deleted file mode 100644 index a472d77..0000000 --- a/cloog-0.17.0/isl/isl_id_private.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_ID_PRIVATE_H -#define ISL_ID_PRIVATE_H - -#include - -struct isl_id { - int ref; - isl_ctx *ctx; - - const char *name; - void *user; - uint32_t hash; -}; - -uint32_t isl_hash_id(uint32_t hash, __isl_keep isl_id *id); - -extern isl_id isl_id_none; - -#endif diff --git a/cloog-0.17.0/isl/isl_ilp.c b/cloog-0.17.0/isl/isl_ilp.c deleted file mode 100644 index abfac26..0000000 --- a/cloog-0.17.0/isl/isl_ilp.c +++ /dev/null @@ -1,485 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include "isl_sample.h" -#include -#include "isl_equalities.h" -#include -#include -#include - -/* Given a basic set "bset", construct a basic set U such that for - * each element x in U, the whole unit box positioned at x is inside - * the given basic set. - * Note that U may not contain all points that satisfy this property. - * - * We simply add the sum of all negative coefficients to the constant - * term. This ensures that if x satisfies the resulting constraints, - * then x plus any sum of unit vectors satisfies the original constraints. - */ -static struct isl_basic_set *unit_box_base_points(struct isl_basic_set *bset) -{ - int i, j, k; - struct isl_basic_set *unit_box = NULL; - unsigned total; - - if (!bset) - goto error; - - if (bset->n_eq != 0) { - unit_box = isl_basic_set_empty_like(bset); - isl_basic_set_free(bset); - return unit_box; - } - - total = isl_basic_set_total_dim(bset); - unit_box = isl_basic_set_alloc_space(isl_basic_set_get_space(bset), - 0, 0, bset->n_ineq); - - for (i = 0; i < bset->n_ineq; ++i) { - k = isl_basic_set_alloc_inequality(unit_box); - if (k < 0) - goto error; - isl_seq_cpy(unit_box->ineq[k], bset->ineq[i], 1 + total); - for (j = 0; j < total; ++j) { - if (isl_int_is_nonneg(unit_box->ineq[k][1 + j])) - continue; - isl_int_add(unit_box->ineq[k][0], - unit_box->ineq[k][0], unit_box->ineq[k][1 + j]); - } - } - - isl_basic_set_free(bset); - return unit_box; -error: - isl_basic_set_free(bset); - isl_basic_set_free(unit_box); - return NULL; -} - -/* Find an integer point in "bset", preferably one that is - * close to minimizing "f". - * - * We first check if we can easily put unit boxes inside bset. - * If so, we take the best base point of any of the unit boxes we can find - * and round it up to the nearest integer. - * If not, we simply pick any integer point in "bset". - */ -static struct isl_vec *initial_solution(struct isl_basic_set *bset, isl_int *f) -{ - enum isl_lp_result res; - struct isl_basic_set *unit_box; - struct isl_vec *sol; - - unit_box = unit_box_base_points(isl_basic_set_copy(bset)); - - res = isl_basic_set_solve_lp(unit_box, 0, f, bset->ctx->one, - NULL, NULL, &sol); - if (res == isl_lp_ok) { - isl_basic_set_free(unit_box); - return isl_vec_ceil(sol); - } - - isl_basic_set_free(unit_box); - - return isl_basic_set_sample_vec(isl_basic_set_copy(bset)); -} - -/* Restrict "bset" to those points with values for f in the interval [l, u]. - */ -static struct isl_basic_set *add_bounds(struct isl_basic_set *bset, - isl_int *f, isl_int l, isl_int u) -{ - int k; - unsigned total; - - total = isl_basic_set_total_dim(bset); - bset = isl_basic_set_extend_constraints(bset, 0, 2); - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_cpy(bset->ineq[k], f, 1 + total); - isl_int_sub(bset->ineq[k][0], bset->ineq[k][0], l); - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_neg(bset->ineq[k], f, 1 + total); - isl_int_add(bset->ineq[k][0], bset->ineq[k][0], u); - - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Find an integer point in "bset" that minimizes f (in any) such that - * the value of f lies inside the interval [l, u]. - * Return this integer point if it can be found. - * Otherwise, return sol. - * - * We perform a number of steps until l > u. - * In each step, we look for an integer point with value in either - * the whole interval [l, u] or half of the interval [l, l+floor(u-l-1/2)]. - * The choice depends on whether we have found an integer point in the - * previous step. If so, we look for the next point in half of the remaining - * interval. - * If we find a point, the current solution is updated and u is set - * to its value minus 1. - * If no point can be found, we update l to the upper bound of the interval - * we checked (u or l+floor(u-l-1/2)) plus 1. - */ -static struct isl_vec *solve_ilp_search(struct isl_basic_set *bset, - isl_int *f, isl_int *opt, struct isl_vec *sol, isl_int l, isl_int u) -{ - isl_int tmp; - int divide = 1; - - isl_int_init(tmp); - - while (isl_int_le(l, u)) { - struct isl_basic_set *slice; - struct isl_vec *sample; - - if (!divide) - isl_int_set(tmp, u); - else { - isl_int_sub(tmp, u, l); - isl_int_fdiv_q_ui(tmp, tmp, 2); - isl_int_add(tmp, tmp, l); - } - slice = add_bounds(isl_basic_set_copy(bset), f, l, tmp); - sample = isl_basic_set_sample_vec(slice); - if (!sample) { - isl_vec_free(sol); - sol = NULL; - break; - } - if (sample->size > 0) { - isl_vec_free(sol); - sol = sample; - isl_seq_inner_product(f, sol->el, sol->size, opt); - isl_int_sub_ui(u, *opt, 1); - divide = 1; - } else { - isl_vec_free(sample); - if (!divide) - break; - isl_int_add_ui(l, tmp, 1); - divide = 0; - } - } - - isl_int_clear(tmp); - - return sol; -} - -/* Find an integer point in "bset" that minimizes f (if any). - * If sol_p is not NULL then the integer point is returned in *sol_p. - * The optimal value of f is returned in *opt. - * - * The algorithm maintains a currently best solution and an interval [l, u] - * of values of f for which integer solutions could potentially still be found. - * The initial value of the best solution so far is any solution. - * The initial value of l is minimal value of f over the rationals - * (rounded up to the nearest integer). - * The initial value of u is the value of f at the initial solution minus 1. - * - * We then call solve_ilp_search to perform a binary search on the interval. - */ -static enum isl_lp_result solve_ilp(struct isl_basic_set *bset, - isl_int *f, isl_int *opt, - struct isl_vec **sol_p) -{ - enum isl_lp_result res; - isl_int l, u; - struct isl_vec *sol; - - res = isl_basic_set_solve_lp(bset, 0, f, bset->ctx->one, - opt, NULL, &sol); - if (res == isl_lp_ok && isl_int_is_one(sol->el[0])) { - if (sol_p) - *sol_p = sol; - else - isl_vec_free(sol); - return isl_lp_ok; - } - isl_vec_free(sol); - if (res == isl_lp_error || res == isl_lp_empty) - return res; - - sol = initial_solution(bset, f); - if (!sol) - return isl_lp_error; - if (sol->size == 0) { - isl_vec_free(sol); - return isl_lp_empty; - } - if (res == isl_lp_unbounded) { - isl_vec_free(sol); - return isl_lp_unbounded; - } - - isl_int_init(l); - isl_int_init(u); - - isl_int_set(l, *opt); - - isl_seq_inner_product(f, sol->el, sol->size, opt); - isl_int_sub_ui(u, *opt, 1); - - sol = solve_ilp_search(bset, f, opt, sol, l, u); - if (!sol) - res = isl_lp_error; - - isl_int_clear(l); - isl_int_clear(u); - - if (sol_p) - *sol_p = sol; - else - isl_vec_free(sol); - - return res; -} - -static enum isl_lp_result solve_ilp_with_eq(struct isl_basic_set *bset, int max, - isl_int *f, isl_int *opt, - struct isl_vec **sol_p) -{ - unsigned dim; - enum isl_lp_result res; - struct isl_mat *T = NULL; - struct isl_vec *v; - - bset = isl_basic_set_copy(bset); - dim = isl_basic_set_total_dim(bset); - v = isl_vec_alloc(bset->ctx, 1 + dim); - if (!v) - goto error; - isl_seq_cpy(v->el, f, 1 + dim); - bset = isl_basic_set_remove_equalities(bset, &T, NULL); - v = isl_vec_mat_product(v, isl_mat_copy(T)); - if (!v) - goto error; - res = isl_basic_set_solve_ilp(bset, max, v->el, opt, sol_p); - isl_vec_free(v); - if (res == isl_lp_ok && sol_p) { - *sol_p = isl_mat_vec_product(T, *sol_p); - if (!*sol_p) - res = isl_lp_error; - } else - isl_mat_free(T); - isl_basic_set_free(bset); - return res; -error: - isl_mat_free(T); - isl_basic_set_free(bset); - return isl_lp_error; -} - -/* Find an integer point in "bset" that minimizes (or maximizes if max is set) - * f (if any). - * If sol_p is not NULL then the integer point is returned in *sol_p. - * The optimal value of f is returned in *opt. - * - * If there is any equality among the points in "bset", then we first - * project it out. Otherwise, we continue with solve_ilp above. - */ -enum isl_lp_result isl_basic_set_solve_ilp(struct isl_basic_set *bset, int max, - isl_int *f, isl_int *opt, - struct isl_vec **sol_p) -{ - unsigned dim; - enum isl_lp_result res; - - if (!bset) - return isl_lp_error; - if (sol_p) - *sol_p = NULL; - - isl_assert(bset->ctx, isl_basic_set_n_param(bset) == 0, goto error); - - if (isl_basic_set_plain_is_empty(bset)) - return isl_lp_empty; - - if (bset->n_eq) - return solve_ilp_with_eq(bset, max, f, opt, sol_p); - - dim = isl_basic_set_total_dim(bset); - - if (max) - isl_seq_neg(f, f, 1 + dim); - - res = solve_ilp(bset, f, opt, sol_p); - - if (max) { - isl_seq_neg(f, f, 1 + dim); - isl_int_neg(*opt, *opt); - } - - return res; -error: - isl_basic_set_free(bset); - return isl_lp_error; -} - -static enum isl_lp_result basic_set_opt(__isl_keep isl_basic_set *bset, int max, - __isl_keep isl_aff *obj, isl_int *opt) -{ - enum isl_lp_result res; - - if (!obj) - return isl_lp_error; - bset = isl_basic_set_copy(bset); - bset = isl_basic_set_underlying_set(bset); - res = isl_basic_set_solve_ilp(bset, max, obj->v->el + 1, opt, NULL); - isl_basic_set_free(bset); - return res; -} - -static __isl_give isl_mat *extract_divs(__isl_keep isl_basic_set *bset) -{ - int i; - isl_ctx *ctx = isl_basic_set_get_ctx(bset); - isl_mat *div; - - div = isl_mat_alloc(ctx, bset->n_div, - 1 + 1 + isl_basic_set_total_dim(bset)); - if (!div) - return NULL; - - for (i = 0; i < bset->n_div; ++i) - isl_seq_cpy(div->row[i], bset->div[i], div->n_col); - - return div; -} - -enum isl_lp_result isl_basic_set_opt(__isl_keep isl_basic_set *bset, int max, - __isl_keep isl_aff *obj, isl_int *opt) -{ - int *exp1 = NULL; - int *exp2 = NULL; - isl_ctx *ctx; - isl_mat *bset_div = NULL; - isl_mat *div = NULL; - enum isl_lp_result res; - - if (!bset || !obj) - return isl_lp_error; - - ctx = isl_aff_get_ctx(obj); - if (!isl_space_is_equal(bset->dim, obj->ls->dim)) - isl_die(ctx, isl_error_invalid, - "spaces don't match", return isl_lp_error); - if (!isl_int_is_one(obj->v->el[0])) - isl_die(ctx, isl_error_unsupported, - "expecting integer affine expression", - return isl_lp_error); - - if (bset->n_div == 0 && obj->ls->div->n_row == 0) - return basic_set_opt(bset, max, obj, opt); - - bset = isl_basic_set_copy(bset); - obj = isl_aff_copy(obj); - - bset_div = extract_divs(bset); - exp1 = isl_alloc_array(ctx, int, bset_div->n_row); - exp2 = isl_alloc_array(ctx, int, obj->ls->div->n_row); - if (!bset_div || !exp1 || !exp2) - goto error; - - div = isl_merge_divs(bset_div, obj->ls->div, exp1, exp2); - - bset = isl_basic_set_expand_divs(bset, isl_mat_copy(div), exp1); - obj = isl_aff_expand_divs(obj, isl_mat_copy(div), exp2); - - res = basic_set_opt(bset, max, obj, opt); - - isl_mat_free(bset_div); - isl_mat_free(div); - free(exp1); - free(exp2); - isl_basic_set_free(bset); - isl_aff_free(obj); - - return res; -error: - isl_mat_free(div); - isl_mat_free(bset_div); - free(exp1); - free(exp2); - isl_basic_set_free(bset); - isl_aff_free(obj); - return isl_lp_error; -} - -/* Compute the minimum (maximum if max is set) of the integer affine - * expression obj over the points in set and put the result in *opt. - */ -enum isl_lp_result isl_set_opt(__isl_keep isl_set *set, int max, - __isl_keep isl_aff *obj, isl_int *opt) -{ - int i; - enum isl_lp_result res; - int empty = 1; - isl_int opt_i; - - if (!set || !obj) - return isl_lp_error; - if (set->n == 0) - return isl_lp_empty; - - res = isl_basic_set_opt(set->p[0], max, obj, opt); - if (res == isl_lp_error || res == isl_lp_unbounded) - return res; - if (set->n == 1) - return res; - if (res == isl_lp_ok) - empty = 0; - - isl_int_init(opt_i); - for (i = 1; i < set->n; ++i) { - res = isl_basic_set_opt(set->p[i], max, obj, &opt_i); - if (res == isl_lp_error || res == isl_lp_unbounded) { - isl_int_clear(opt_i); - return res; - } - if (res == isl_lp_ok) - empty = 0; - if (isl_int_gt(opt_i, *opt)) - isl_int_set(*opt, opt_i); - } - isl_int_clear(opt_i); - - return empty ? isl_lp_empty : isl_lp_ok; -} - -enum isl_lp_result isl_basic_set_max(__isl_keep isl_basic_set *bset, - __isl_keep isl_aff *obj, isl_int *opt) -{ - return isl_basic_set_opt(bset, 1, obj, opt); -} - -enum isl_lp_result isl_set_max(__isl_keep isl_set *set, - __isl_keep isl_aff *obj, isl_int *opt) -{ - return isl_set_opt(set, 1, obj, opt); -} - -enum isl_lp_result isl_set_min(__isl_keep isl_set *set, - __isl_keep isl_aff *obj, isl_int *opt) -{ - return isl_set_opt(set, 0, obj, opt); -} diff --git a/cloog-0.17.0/isl/isl_input.c b/cloog-0.17.0/isl/isl_input.c deleted file mode 100644 index 320703a..0000000 --- a/cloog-0.17.0/isl/isl_input.c +++ /dev/null @@ -1,2685 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "isl_polynomial_private.h" -#include -#include -#include -#include - -struct variable { - char *name; - int pos; - struct variable *next; -}; - -struct vars { - struct isl_ctx *ctx; - int n; - struct variable *v; -}; - -static struct vars *vars_new(struct isl_ctx *ctx) -{ - struct vars *v; - v = isl_alloc_type(ctx, struct vars); - if (!v) - return NULL; - v->ctx = ctx; - v->n = 0; - v->v = NULL; - return v; -} - -static void variable_free(struct variable *var) -{ - while (var) { - struct variable *next = var->next; - free(var->name); - free(var); - var = next; - } -} - -static void vars_free(struct vars *v) -{ - if (!v) - return; - variable_free(v->v); - free(v); -} - -static void vars_drop(struct vars *v, int n) -{ - struct variable *var; - - if (!v || !v->v) - return; - - v->n -= n; - - var = v->v; - while (--n >= 0) { - struct variable *next = var->next; - free(var->name); - free(var); - var = next; - } - v->v = var; -} - -static struct variable *variable_new(struct vars *v, const char *name, int len, - int pos) -{ - struct variable *var; - var = isl_calloc_type(v->ctx, struct variable); - if (!var) - goto error; - var->name = strdup(name); - var->name[len] = '\0'; - var->pos = pos; - var->next = v->v; - return var; -error: - variable_free(v->v); - return NULL; -} - -static int vars_pos(struct vars *v, const char *s, int len) -{ - int pos; - struct variable *q; - - if (len == -1) - len = strlen(s); - for (q = v->v; q; q = q->next) { - if (strncmp(q->name, s, len) == 0 && q->name[len] == '\0') - break; - } - if (q) - pos = q->pos; - else { - pos = v->n; - v->v = variable_new(v, s, len, v->n); - if (!v->v) - return -1; - v->n++; - } - return pos; -} - -static int vars_add_anon(struct vars *v) -{ - v->v = variable_new(v, "", 0, v->n); - - if (!v->v) - return -1; - v->n++; - - return 0; -} - -static __isl_give isl_map *set_name(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, char *name) -{ - char *prime; - - if (!map) - return NULL; - if (!name) - return map; - - prime = strchr(name, '\''); - if (prime) - *prime = '\0'; - map = isl_map_set_dim_name(map, type, pos, name); - if (prime) - *prime = '\''; - - return map; -} - -/* Obtain next token, with some preprocessing. - * In particular, evaluate expressions of the form x^y, - * with x and y values. - */ -static struct isl_token *next_token(struct isl_stream *s) -{ - struct isl_token *tok, *tok2; - - tok = isl_stream_next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) - return tok; - if (!isl_stream_eat_if_available(s, '^')) - return tok; - tok2 = isl_stream_next_token(s); - if (!tok2 || tok2->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok2, "expecting constant value"); - goto error; - } - - isl_int_pow_ui(tok->u.v, tok->u.v, isl_int_get_ui(tok2->u.v)); - - isl_token_free(tok2); - return tok; -error: - isl_token_free(tok); - isl_token_free(tok2); - return NULL; -} - -static int accept_cst_factor(struct isl_stream *s, isl_int *f) -{ - struct isl_token *tok; - - tok = next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expecting constant value"); - goto error; - } - - isl_int_mul(*f, *f, tok->u.v); - - isl_token_free(tok); - - if (isl_stream_eat_if_available(s, '*')) - return accept_cst_factor(s, f); - - return 0; -error: - isl_token_free(tok); - return -1; -} - -/* Given an affine expression aff, return an affine expression - * for aff % d, with d the next token on the stream, which is - * assumed to be a constant. - * - * We introduce an integer division q = [aff/d] and the result - * is set to aff - d q. - */ -static __isl_give isl_pw_aff *affine_mod(struct isl_stream *s, - struct vars *v, __isl_take isl_pw_aff *aff) -{ - struct isl_token *tok; - isl_pw_aff *q; - - tok = next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expecting constant value"); - goto error; - } - - q = isl_pw_aff_copy(aff); - q = isl_pw_aff_scale_down(q, tok->u.v); - q = isl_pw_aff_floor(q); - q = isl_pw_aff_scale(q, tok->u.v); - - aff = isl_pw_aff_sub(aff, q); - - isl_token_free(tok); - return aff; -error: - isl_pw_aff_free(aff); - isl_token_free(tok); - return NULL; -} - -static __isl_give isl_pw_aff *accept_affine(struct isl_stream *s, - __isl_take isl_space *dim, struct vars *v); -static __isl_give isl_pw_aff_list *accept_affine_list(struct isl_stream *s, - __isl_take isl_space *dim, struct vars *v); - -static __isl_give isl_pw_aff *accept_minmax(struct isl_stream *s, - __isl_take isl_space *dim, struct vars *v) -{ - struct isl_token *tok; - isl_pw_aff_list *list = NULL; - int min; - - tok = isl_stream_next_token(s); - if (!tok) - goto error; - min = tok->type == ISL_TOKEN_MIN; - isl_token_free(tok); - - if (isl_stream_eat(s, '(')) - goto error; - - list = accept_affine_list(s, isl_space_copy(dim), v); - if (!list) - goto error; - - if (isl_stream_eat(s, ')')) - goto error; - - isl_space_free(dim); - return min ? isl_pw_aff_list_min(list) : isl_pw_aff_list_max(list); -error: - isl_space_free(dim); - isl_pw_aff_list_free(list); - return NULL; -} - -static __isl_give isl_pw_aff *accept_div(struct isl_stream *s, - __isl_take isl_space *dim, struct vars *v) -{ - struct isl_token *tok; - int seen_paren = 0; - int f = 0; - int c = 0; - isl_pw_aff *pwaff = NULL; - - if (isl_stream_eat_if_available(s, ISL_TOKEN_FLOORD)) - f = 1; - else if (isl_stream_eat_if_available(s, ISL_TOKEN_CEILD)) - c = 1; - if (f || c) { - if (isl_stream_eat(s, '(')) - goto error; - } else { - if (isl_stream_eat(s, '[')) - goto error; - if (isl_stream_eat_if_available(s, '(')) - seen_paren = 1; - } - - pwaff = accept_affine(s, isl_space_copy(dim), v); - - if (f || c) { - if (isl_stream_eat(s, ',')) - goto error; - } else { - if (seen_paren && isl_stream_eat(s, ')')) - goto error; - if (isl_stream_eat(s, '/')) - goto error; - } - - tok = next_token(s); - if (!tok) - goto error; - if (tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expected denominator"); - isl_stream_push_token(s, tok); - goto error; - } - isl_pw_aff_scale_down(pwaff, tok->u.v); - isl_token_free(tok); - - if (c) - pwaff = isl_pw_aff_ceil(pwaff); - else - pwaff = isl_pw_aff_floor(pwaff); - - if (f || c) { - if (isl_stream_eat(s, ')')) - goto error; - } else { - if (isl_stream_eat(s, ']')) - goto error; - } - - isl_space_free(dim); - return pwaff; -error: - isl_space_free(dim); - isl_pw_aff_free(pwaff); - return NULL; -} - -static __isl_give isl_pw_aff *accept_affine_factor(struct isl_stream *s, - __isl_take isl_space *dim, struct vars *v) -{ - struct isl_token *tok = NULL; - isl_pw_aff *res = NULL; - - tok = next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - goto error; - } - - if (tok->type == ISL_TOKEN_AFF) { - res = isl_pw_aff_copy(tok->u.pwaff); - isl_token_free(tok); - } else if (tok->type == ISL_TOKEN_IDENT) { - int n = v->n; - int pos = vars_pos(v, tok->u.s, -1); - isl_aff *aff; - - if (pos < 0) - goto error; - if (pos >= n) { - isl_stream_error(s, tok, "unknown identifier"); - goto error; - } - - aff = isl_aff_zero_on_domain(isl_local_space_from_space(isl_space_copy(dim))); - if (!aff) - goto error; - isl_int_set_si(aff->v->el[2 + pos], 1); - res = isl_pw_aff_from_aff(aff); - isl_token_free(tok); - } else if (tok->type == ISL_TOKEN_VALUE) { - if (isl_stream_eat_if_available(s, '*')) { - res = accept_affine_factor(s, isl_space_copy(dim), v); - res = isl_pw_aff_scale(res, tok->u.v); - } else { - isl_local_space *ls; - isl_aff *aff; - ls = isl_local_space_from_space(isl_space_copy(dim)); - aff = isl_aff_zero_on_domain(ls); - aff = isl_aff_add_constant(aff, tok->u.v); - res = isl_pw_aff_from_aff(aff); - } - isl_token_free(tok); - } else if (tok->type == '(') { - isl_token_free(tok); - tok = NULL; - res = accept_affine(s, isl_space_copy(dim), v); - if (!res) - goto error; - if (isl_stream_eat(s, ')')) - goto error; - } else if (tok->type == '[' || - tok->type == ISL_TOKEN_FLOORD || - tok->type == ISL_TOKEN_CEILD) { - isl_stream_push_token(s, tok); - tok = NULL; - res = accept_div(s, isl_space_copy(dim), v); - } else if (tok->type == ISL_TOKEN_MIN || tok->type == ISL_TOKEN_MAX) { - isl_stream_push_token(s, tok); - tok = NULL; - res = accept_minmax(s, isl_space_copy(dim), v); - } else { - isl_stream_error(s, tok, "expecting factor"); - goto error; - } - if (isl_stream_eat_if_available(s, '%') || - isl_stream_eat_if_available(s, ISL_TOKEN_MOD)) { - isl_space_free(dim); - return affine_mod(s, v, res); - } - if (isl_stream_eat_if_available(s, '*')) { - isl_int f; - isl_int_init(f); - isl_int_set_si(f, 1); - if (accept_cst_factor(s, &f) < 0) { - isl_int_clear(f); - goto error2; - } - res = isl_pw_aff_scale(res, f); - isl_int_clear(f); - } - - isl_space_free(dim); - return res; -error: - isl_token_free(tok); -error2: - isl_pw_aff_free(res); - isl_space_free(dim); - return NULL; -} - -static __isl_give isl_pw_aff *add_cst(__isl_take isl_pw_aff *pwaff, isl_int v) -{ - isl_aff *aff; - isl_space *space; - - space = isl_pw_aff_get_domain_space(pwaff); - aff = isl_aff_zero_on_domain(isl_local_space_from_space(space)); - aff = isl_aff_add_constant(aff, v); - - return isl_pw_aff_add(pwaff, isl_pw_aff_from_aff(aff)); -} - -static __isl_give isl_pw_aff *accept_affine(struct isl_stream *s, - __isl_take isl_space *dim, struct vars *v) -{ - struct isl_token *tok = NULL; - isl_local_space *ls; - isl_pw_aff *res; - int sign = 1; - - ls = isl_local_space_from_space(isl_space_copy(dim)); - res = isl_pw_aff_from_aff(isl_aff_zero_on_domain(ls)); - if (!res) - goto error; - - for (;;) { - tok = next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - goto error; - } - if (tok->type == '-') { - sign = -sign; - isl_token_free(tok); - continue; - } - if (tok->type == '(' || tok->type == '[' || - tok->type == ISL_TOKEN_MIN || tok->type == ISL_TOKEN_MAX || - tok->type == ISL_TOKEN_FLOORD || - tok->type == ISL_TOKEN_CEILD || - tok->type == ISL_TOKEN_IDENT || - tok->type == ISL_TOKEN_AFF) { - isl_pw_aff *term; - isl_stream_push_token(s, tok); - tok = NULL; - term = accept_affine_factor(s, isl_space_copy(dim), v); - if (sign < 0) - res = isl_pw_aff_sub(res, term); - else - res = isl_pw_aff_add(res, term); - if (!res) - goto error; - sign = 1; - } else if (tok->type == ISL_TOKEN_VALUE) { - if (sign < 0) - isl_int_neg(tok->u.v, tok->u.v); - if (isl_stream_eat_if_available(s, '*') || - isl_stream_next_token_is(s, ISL_TOKEN_IDENT)) { - isl_pw_aff *term; - term = accept_affine_factor(s, - isl_space_copy(dim), v); - term = isl_pw_aff_scale(term, tok->u.v); - res = isl_pw_aff_add(res, term); - if (!res) - goto error; - } else { - res = add_cst(res, tok->u.v); - } - sign = 1; - } else { - isl_stream_error(s, tok, "unexpected isl_token"); - isl_stream_push_token(s, tok); - isl_pw_aff_free(res); - isl_space_free(dim); - return NULL; - } - isl_token_free(tok); - - tok = next_token(s); - if (tok && tok->type == '-') { - sign = -sign; - isl_token_free(tok); - } else if (tok && tok->type == '+') { - /* nothing */ - isl_token_free(tok); - } else if (tok && tok->type == ISL_TOKEN_VALUE && - isl_int_is_neg(tok->u.v)) { - isl_stream_push_token(s, tok); - } else { - if (tok) - isl_stream_push_token(s, tok); - break; - } - } - - isl_space_free(dim); - return res; -error: - isl_space_free(dim); - isl_token_free(tok); - isl_pw_aff_free(res); - return NULL; -} - -static int is_comparator(struct isl_token *tok) -{ - if (!tok) - return 0; - - switch (tok->type) { - case ISL_TOKEN_LT: - case ISL_TOKEN_GT: - case ISL_TOKEN_LE: - case ISL_TOKEN_GE: - case ISL_TOKEN_NE: - case '=': - return 1; - default: - return 0; - } -} - -static struct isl_map *read_disjuncts(struct isl_stream *s, - struct vars *v, __isl_take isl_map *map); -static __isl_give isl_pw_aff *accept_extended_affine(struct isl_stream *s, - __isl_take isl_space *dim, struct vars *v); - -/* Accept a ternary operator, given the first argument. - */ -static __isl_give isl_pw_aff *accept_ternary(struct isl_stream *s, - __isl_take isl_map *cond, struct vars *v) -{ - isl_space *dim; - isl_pw_aff *pwaff1 = NULL, *pwaff2 = NULL; - - if (!cond) - return NULL; - - if (isl_stream_eat(s, '?')) - goto error; - - dim = isl_space_wrap(isl_map_get_space(cond)); - pwaff1 = accept_extended_affine(s, dim, v); - if (!pwaff1) - goto error; - - if (isl_stream_eat(s, ':')) - goto error; - - dim = isl_pw_aff_get_domain_space(pwaff1); - pwaff2 = accept_extended_affine(s, dim, v); - if (!pwaff1) - goto error; - - return isl_pw_aff_cond(isl_map_wrap(cond), pwaff1, pwaff2); -error: - isl_map_free(cond); - isl_pw_aff_free(pwaff1); - isl_pw_aff_free(pwaff2); - return NULL; -} - -/* Accept an affine expression that may involve ternary operators. - * We first read an affine expression. - * If it is not followed by a comparison operator, we simply return it. - * Otherwise, we assume the affine epxression is part of the first - * argument of a ternary operator and try to parse that. - */ -static __isl_give isl_pw_aff *accept_extended_affine(struct isl_stream *s, - __isl_take isl_space *dim, struct vars *v) -{ - isl_space *space; - isl_map *cond; - isl_pw_aff *pwaff; - struct isl_token *tok; - int line = -1, col = -1; - int is_comp; - - tok = isl_stream_next_token(s); - if (tok) { - line = tok->line; - col = tok->col; - isl_stream_push_token(s, tok); - } - - pwaff = accept_affine(s, dim, v); - if (!pwaff) - return NULL; - - tok = isl_stream_next_token(s); - if (!tok) - return isl_pw_aff_free(pwaff); - - is_comp = is_comparator(tok); - isl_stream_push_token(s, tok); - if (!is_comp) - return pwaff; - - tok = isl_token_new(s->ctx, line, col, 0); - if (!tok) - return isl_pw_aff_free(pwaff); - tok->type = ISL_TOKEN_AFF; - tok->u.pwaff = pwaff; - - space = isl_pw_aff_get_domain_space(pwaff); - cond = isl_map_universe(isl_space_unwrap(space)); - - isl_stream_push_token(s, tok); - - cond = read_disjuncts(s, v, cond); - - return accept_ternary(s, cond, v); -} - -static __isl_give isl_map *read_var_def(struct isl_stream *s, - __isl_take isl_map *map, enum isl_dim_type type, struct vars *v) -{ - isl_pw_aff *def; - int pos; - isl_map *def_map; - - if (type == isl_dim_param) - pos = isl_map_dim(map, isl_dim_param); - else { - pos = isl_map_dim(map, isl_dim_in); - if (type == isl_dim_out) - pos += isl_map_dim(map, isl_dim_out); - type = isl_dim_in; - } - --pos; - - def = accept_extended_affine(s, isl_space_wrap(isl_map_get_space(map)), v); - def_map = isl_map_from_pw_aff(def); - def_map = isl_map_equate(def_map, type, pos, isl_dim_out, 0); - def_map = isl_set_unwrap(isl_map_domain(def_map)); - - map = isl_map_intersect(map, def_map); - - return map; -} - -static __isl_give isl_map *read_var_list(struct isl_stream *s, - __isl_take isl_map *map, enum isl_dim_type type, struct vars *v) -{ - int i = 0; - struct isl_token *tok; - - if (isl_stream_next_token_is(s, ']')) - return isl_map_add_dims(map, type, 0); - - while ((tok = next_token(s)) != NULL) { - int new_name = 0; - - if (tok->type == ISL_TOKEN_IDENT) { - int n = v->n; - int p = vars_pos(v, tok->u.s, -1); - if (p < 0) - goto error; - new_name = p >= n; - } - - if (new_name) { - map = isl_map_add_dims(map, type, 1); - map = set_name(map, type, i, v->v->name); - isl_token_free(tok); - if (isl_stream_eat_if_available(s, '=')) - map = read_var_def(s, map, type, v); - } else { - if (type == isl_dim_param) { - isl_stream_error(s, tok, - "expecting unique identifier"); - goto error; - } - isl_stream_push_token(s, tok); - tok = NULL; - if (vars_add_anon(v) < 0) - goto error; - map = isl_map_add_dims(map, type, 1); - map = read_var_def(s, map, type, v); - } - - tok = isl_stream_next_token(s); - if (tok && tok->type == ']' && - isl_stream_next_token_is(s, '[')) { - isl_token_free(tok); - tok = isl_stream_next_token(s); - } else if (!tok || tok->type != ',') - break; - - isl_token_free(tok); - i++; - } - if (tok) - isl_stream_push_token(s, tok); - - return map; -error: - isl_token_free(tok); - isl_map_free(map); - return NULL; -} - -static __isl_give isl_pw_aff_list *accept_affine_list(struct isl_stream *s, - __isl_take isl_space *dim, struct vars *v) -{ - isl_pw_aff *pwaff; - isl_pw_aff_list *list; - struct isl_token *tok = NULL; - - pwaff = accept_affine(s, isl_space_copy(dim), v); - list = isl_pw_aff_list_from_pw_aff(pwaff); - if (!list) - goto error; - - for (;;) { - tok = isl_stream_next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - goto error; - } - if (tok->type != ',') { - isl_stream_push_token(s, tok); - break; - } - isl_token_free(tok); - - pwaff = accept_affine(s, isl_space_copy(dim), v); - list = isl_pw_aff_list_concat(list, - isl_pw_aff_list_from_pw_aff(pwaff)); - if (!list) - return NULL; - } - - isl_space_free(dim); - return list; -error: - isl_space_free(dim); - isl_pw_aff_list_free(list); - return NULL; -} - -static __isl_give isl_map *read_defined_var_list(struct isl_stream *s, - struct vars *v, __isl_take isl_map *map) -{ - struct isl_token *tok; - - while ((tok = isl_stream_next_token(s)) != NULL) { - int p; - int n = v->n; - - if (tok->type != ISL_TOKEN_IDENT) - break; - - p = vars_pos(v, tok->u.s, -1); - if (p < 0) - goto error; - if (p < n) { - isl_stream_error(s, tok, "expecting unique identifier"); - goto error; - } - - map = isl_map_add_dims(map, isl_dim_out, 1); - - isl_token_free(tok); - tok = isl_stream_next_token(s); - if (tok && tok->type == '=') { - isl_token_free(tok); - map = read_var_def(s, map, isl_dim_out, v); - tok = isl_stream_next_token(s); - } - - if (!tok || tok->type != ',') - break; - - isl_token_free(tok); - } - if (tok) - isl_stream_push_token(s, tok); - - return map; -error: - isl_token_free(tok); - isl_map_free(map); - return NULL; -} - -static int next_is_tuple(struct isl_stream *s) -{ - struct isl_token *tok; - int is_tuple; - - tok = isl_stream_next_token(s); - if (!tok) - return 0; - if (tok->type == '[') { - isl_stream_push_token(s, tok); - return 1; - } - if (tok->type != ISL_TOKEN_IDENT && !tok->is_keyword) { - isl_stream_push_token(s, tok); - return 0; - } - - is_tuple = isl_stream_next_token_is(s, '['); - - isl_stream_push_token(s, tok); - - return is_tuple; -} - -static __isl_give isl_map *read_tuple(struct isl_stream *s, - __isl_take isl_map *map, enum isl_dim_type type, struct vars *v); - -static __isl_give isl_set *read_nested_tuple(struct isl_stream *s, - __isl_take isl_map *map, struct vars *v) -{ - map = read_tuple(s, map, isl_dim_in, v); - if (isl_stream_eat(s, ISL_TOKEN_TO)) - goto error; - map = read_tuple(s, map, isl_dim_out, v); - return isl_map_wrap(map); -error: - isl_map_free(map); - return NULL; -} - -static __isl_give isl_map *read_tuple(struct isl_stream *s, - __isl_take isl_map *map, enum isl_dim_type type, struct vars *v) -{ - struct isl_token *tok; - char *name = NULL; - - tok = isl_stream_next_token(s); - if (tok && (tok->type == ISL_TOKEN_IDENT || tok->is_keyword)) { - name = strdup(tok->u.s); - if (!name) - goto error; - isl_token_free(tok); - tok = isl_stream_next_token(s); - } - if (!tok || tok->type != '[') { - isl_stream_error(s, tok, "expecting '['"); - goto error; - } - isl_token_free(tok); - if (type != isl_dim_param && next_is_tuple(s)) { - isl_space *dim = isl_map_get_space(map); - int nparam = isl_space_dim(dim, isl_dim_param); - int n_in = isl_space_dim(dim, isl_dim_in); - isl_set *nested; - if (type == isl_dim_out) { - dim = isl_space_move_dims(dim, isl_dim_param, nparam, - isl_dim_in, 0, n_in); - dim = isl_space_params(dim); - } - nested = read_nested_tuple(s, isl_map_universe(dim), v); - if (type == isl_dim_in) { - nested = isl_map_reverse(nested); - map = isl_map_intersect_params(nested, map); - } else { - isl_set *set; - dim = isl_set_get_space(nested); - dim = isl_space_drop_dims(dim, isl_dim_param, nparam, n_in); - dim = isl_space_join(isl_map_get_space(map), dim); - set = isl_map_domain(map); - nested = isl_map_reset_space(nested, dim); - map = isl_map_intersect_domain(nested, set); - } - } else - map = read_var_list(s, map, type, v); - tok = isl_stream_next_token(s); - if (!tok || tok->type != ']') { - isl_stream_error(s, tok, "expecting ']'"); - goto error; - } - isl_token_free(tok); - - if (name) { - map = isl_map_set_tuple_name(map, type, name); - free(name); - } - - return map; -error: - if (tok) - isl_token_free(tok); - isl_map_free(map); - return NULL; -} - -static __isl_give isl_set *construct_constraints( - __isl_take isl_set *set, enum isl_token_type type, - __isl_keep isl_pw_aff_list *left, __isl_keep isl_pw_aff_list *right) -{ - isl_set *cond; - - if (type == ISL_TOKEN_LE) - cond = isl_pw_aff_list_le_set(isl_pw_aff_list_copy(left), - isl_pw_aff_list_copy(right)); - else if (type == ISL_TOKEN_GE) - cond = isl_pw_aff_list_ge_set(isl_pw_aff_list_copy(left), - isl_pw_aff_list_copy(right)); - else if (type == ISL_TOKEN_LT) - cond = isl_pw_aff_list_lt_set(isl_pw_aff_list_copy(left), - isl_pw_aff_list_copy(right)); - else if (type == ISL_TOKEN_GT) - cond = isl_pw_aff_list_gt_set(isl_pw_aff_list_copy(left), - isl_pw_aff_list_copy(right)); - else if (type == ISL_TOKEN_NE) - cond = isl_pw_aff_list_ne_set(isl_pw_aff_list_copy(left), - isl_pw_aff_list_copy(right)); - else - cond = isl_pw_aff_list_eq_set(isl_pw_aff_list_copy(left), - isl_pw_aff_list_copy(right)); - - return isl_set_intersect(set, cond); -} - -static __isl_give isl_map *add_constraint(struct isl_stream *s, - struct vars *v, __isl_take isl_map *map) -{ - struct isl_token *tok = NULL; - isl_pw_aff_list *list1 = NULL, *list2 = NULL; - isl_set *set; - - set = isl_map_wrap(map); - list1 = accept_affine_list(s, isl_set_get_space(set), v); - if (!list1) - goto error; - tok = isl_stream_next_token(s); - if (!is_comparator(tok)) { - isl_stream_error(s, tok, "missing operator"); - if (tok) - isl_stream_push_token(s, tok); - tok = NULL; - goto error; - } - for (;;) { - list2 = accept_affine_list(s, isl_set_get_space(set), v); - if (!list2) - goto error; - - set = construct_constraints(set, tok->type, list1, list2); - isl_token_free(tok); - isl_pw_aff_list_free(list1); - list1 = list2; - - tok = isl_stream_next_token(s); - if (!is_comparator(tok)) { - if (tok) - isl_stream_push_token(s, tok); - break; - } - } - isl_pw_aff_list_free(list1); - - return isl_set_unwrap(set); -error: - if (tok) - isl_token_free(tok); - isl_pw_aff_list_free(list1); - isl_pw_aff_list_free(list2); - isl_set_free(set); - return NULL; -} - -static __isl_give isl_map *read_exists(struct isl_stream *s, - struct vars *v, __isl_take isl_map *map) -{ - int n = v->n; - int seen_paren = isl_stream_eat_if_available(s, '('); - - map = isl_map_from_domain(isl_map_wrap(map)); - map = read_defined_var_list(s, v, map); - - if (isl_stream_eat(s, ':')) - goto error; - - map = read_disjuncts(s, v, map); - map = isl_set_unwrap(isl_map_domain(map)); - - vars_drop(v, v->n - n); - if (seen_paren && isl_stream_eat(s, ')')) - goto error; - - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Parse an expression between parentheses and push the result - * back on the stream. - * - * The parsed expression may be either an affine expression - * or a condition. The first type is pushed onto the stream - * as an isl_pw_aff, while the second is pushed as an isl_map. - * - * If the initial token indicates the start of a condition, - * we parse it as such. - * Otherwise, we first parse an affine expression and push - * that onto the stream. If the affine expression covers the - * entire expression between parentheses, we return. - * Otherwise, we assume that the affine expression is the - * start of a condition and continue parsing. - */ -static int resolve_paren_expr(struct isl_stream *s, - struct vars *v, __isl_take isl_map *map) -{ - struct isl_token *tok, *tok2; - int line, col; - isl_pw_aff *pwaff; - - tok = isl_stream_next_token(s); - if (!tok || tok->type != '(') - goto error; - - if (isl_stream_next_token_is(s, '(')) - if (resolve_paren_expr(s, v, isl_map_copy(map))) - goto error; - - if (isl_stream_next_token_is(s, ISL_TOKEN_EXISTS) || - isl_stream_next_token_is(s, ISL_TOKEN_TRUE) || - isl_stream_next_token_is(s, ISL_TOKEN_FALSE) || - isl_stream_next_token_is(s, ISL_TOKEN_MAP)) { - map = read_disjuncts(s, v, map); - if (isl_stream_eat(s, ')')) - goto error; - tok->type = ISL_TOKEN_MAP; - tok->u.map = map; - isl_stream_push_token(s, tok); - return 0; - } - - tok2 = isl_stream_next_token(s); - if (!tok2) - goto error; - line = tok2->line; - col = tok2->col; - isl_stream_push_token(s, tok2); - - pwaff = accept_affine(s, isl_space_wrap(isl_map_get_space(map)), v); - if (!pwaff) - goto error; - - tok2 = isl_token_new(s->ctx, line, col, 0); - if (!tok2) - goto error2; - tok2->type = ISL_TOKEN_AFF; - tok2->u.pwaff = pwaff; - - if (isl_stream_eat_if_available(s, ')')) { - isl_stream_push_token(s, tok2); - isl_token_free(tok); - isl_map_free(map); - return 0; - } - - isl_stream_push_token(s, tok2); - - map = read_disjuncts(s, v, map); - if (isl_stream_eat(s, ')')) - goto error; - - tok->type = ISL_TOKEN_MAP; - tok->u.map = map; - isl_stream_push_token(s, tok); - - return 0; -error2: - isl_pw_aff_free(pwaff); -error: - isl_token_free(tok); - isl_map_free(map); - return -1; -} - -static __isl_give isl_map *read_conjunct(struct isl_stream *s, - struct vars *v, __isl_take isl_map *map) -{ - if (isl_stream_next_token_is(s, '(')) - if (resolve_paren_expr(s, v, isl_map_copy(map))) - goto error; - - if (isl_stream_next_token_is(s, ISL_TOKEN_MAP)) { - struct isl_token *tok; - tok = isl_stream_next_token(s); - if (!tok) - goto error; - isl_map_free(map); - map = isl_map_copy(tok->u.map); - isl_token_free(tok); - return map; - } - - if (isl_stream_eat_if_available(s, ISL_TOKEN_EXISTS)) - return read_exists(s, v, map); - - if (isl_stream_eat_if_available(s, ISL_TOKEN_TRUE)) - return map; - - if (isl_stream_eat_if_available(s, ISL_TOKEN_FALSE)) { - isl_space *dim = isl_map_get_space(map); - isl_map_free(map); - return isl_map_empty(dim); - } - - return add_constraint(s, v, map); -error: - isl_map_free(map); - return NULL; -} - -static __isl_give isl_map *read_conjuncts(struct isl_stream *s, - struct vars *v, __isl_take isl_map *map) -{ - isl_map *res; - int negate; - - negate = isl_stream_eat_if_available(s, ISL_TOKEN_NOT); - res = read_conjunct(s, v, isl_map_copy(map)); - if (negate) - res = isl_map_subtract(isl_map_copy(map), res); - - while (isl_stream_eat_if_available(s, ISL_TOKEN_AND)) { - isl_map *res_i; - - negate = isl_stream_eat_if_available(s, ISL_TOKEN_NOT); - res_i = read_conjunct(s, v, isl_map_copy(map)); - if (negate) - res = isl_map_subtract(res, res_i); - else - res = isl_map_intersect(res, res_i); - } - - isl_map_free(map); - return res; -} - -static struct isl_map *read_disjuncts(struct isl_stream *s, - struct vars *v, __isl_take isl_map *map) -{ - isl_map *res; - - if (isl_stream_next_token_is(s, '}')) { - isl_space *dim = isl_map_get_space(map); - isl_map_free(map); - return isl_map_universe(dim); - } - - res = read_conjuncts(s, v, isl_map_copy(map)); - while (isl_stream_eat_if_available(s, ISL_TOKEN_OR)) { - isl_map *res_i; - - res_i = read_conjuncts(s, v, isl_map_copy(map)); - res = isl_map_union(res, res_i); - } - - isl_map_free(map); - return res; -} - -static int polylib_pos_to_isl_pos(__isl_keep isl_basic_map *bmap, int pos) -{ - if (pos < isl_basic_map_dim(bmap, isl_dim_out)) - return 1 + isl_basic_map_dim(bmap, isl_dim_param) + - isl_basic_map_dim(bmap, isl_dim_in) + pos; - pos -= isl_basic_map_dim(bmap, isl_dim_out); - - if (pos < isl_basic_map_dim(bmap, isl_dim_in)) - return 1 + isl_basic_map_dim(bmap, isl_dim_param) + pos; - pos -= isl_basic_map_dim(bmap, isl_dim_in); - - if (pos < isl_basic_map_dim(bmap, isl_dim_div)) - return 1 + isl_basic_map_dim(bmap, isl_dim_param) + - isl_basic_map_dim(bmap, isl_dim_in) + - isl_basic_map_dim(bmap, isl_dim_out) + pos; - pos -= isl_basic_map_dim(bmap, isl_dim_div); - - if (pos < isl_basic_map_dim(bmap, isl_dim_param)) - return 1 + pos; - - return 0; -} - -static __isl_give isl_basic_map *basic_map_read_polylib_constraint( - struct isl_stream *s, __isl_take isl_basic_map *bmap) -{ - int j; - struct isl_token *tok; - int type; - int k; - isl_int *c; - unsigned nparam; - unsigned dim; - - if (!bmap) - return NULL; - - nparam = isl_basic_map_dim(bmap, isl_dim_param); - dim = isl_basic_map_dim(bmap, isl_dim_out); - - tok = isl_stream_next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expecting coefficient"); - if (tok) - isl_stream_push_token(s, tok); - goto error; - } - if (!tok->on_new_line) { - isl_stream_error(s, tok, "coefficient should appear on new line"); - isl_stream_push_token(s, tok); - goto error; - } - - type = isl_int_get_si(tok->u.v); - isl_token_free(tok); - - isl_assert(s->ctx, type == 0 || type == 1, goto error); - if (type == 0) { - k = isl_basic_map_alloc_equality(bmap); - c = bmap->eq[k]; - } else { - k = isl_basic_map_alloc_inequality(bmap); - c = bmap->ineq[k]; - } - if (k < 0) - goto error; - - for (j = 0; j < 1 + isl_basic_map_total_dim(bmap); ++j) { - int pos; - tok = isl_stream_next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expecting coefficient"); - if (tok) - isl_stream_push_token(s, tok); - goto error; - } - if (tok->on_new_line) { - isl_stream_error(s, tok, - "coefficient should not appear on new line"); - isl_stream_push_token(s, tok); - goto error; - } - pos = polylib_pos_to_isl_pos(bmap, j); - isl_int_set(c[pos], tok->u.v); - isl_token_free(tok); - } - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static __isl_give isl_basic_map *basic_map_read_polylib(struct isl_stream *s) -{ - int i; - struct isl_token *tok; - struct isl_token *tok2; - int n_row, n_col; - int on_new_line; - unsigned in = 0, out, local = 0; - struct isl_basic_map *bmap = NULL; - int nparam = 0; - - tok = isl_stream_next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - return NULL; - } - tok2 = isl_stream_next_token(s); - if (!tok2) { - isl_token_free(tok); - isl_stream_error(s, NULL, "unexpected EOF"); - return NULL; - } - if (tok->type != ISL_TOKEN_VALUE || tok2->type != ISL_TOKEN_VALUE) { - isl_stream_push_token(s, tok2); - isl_stream_push_token(s, tok); - isl_stream_error(s, NULL, - "expecting constraint matrix dimensions"); - return NULL; - } - n_row = isl_int_get_si(tok->u.v); - n_col = isl_int_get_si(tok2->u.v); - on_new_line = tok2->on_new_line; - isl_token_free(tok2); - isl_token_free(tok); - isl_assert(s->ctx, !on_new_line, return NULL); - isl_assert(s->ctx, n_row >= 0, return NULL); - isl_assert(s->ctx, n_col >= 2 + nparam, return NULL); - tok = isl_stream_next_token_on_same_line(s); - if (tok) { - if (tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, - "expecting number of output dimensions"); - isl_stream_push_token(s, tok); - goto error; - } - out = isl_int_get_si(tok->u.v); - isl_token_free(tok); - - tok = isl_stream_next_token_on_same_line(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, - "expecting number of input dimensions"); - if (tok) - isl_stream_push_token(s, tok); - goto error; - } - in = isl_int_get_si(tok->u.v); - isl_token_free(tok); - - tok = isl_stream_next_token_on_same_line(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, - "expecting number of existentials"); - if (tok) - isl_stream_push_token(s, tok); - goto error; - } - local = isl_int_get_si(tok->u.v); - isl_token_free(tok); - - tok = isl_stream_next_token_on_same_line(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, - "expecting number of parameters"); - if (tok) - isl_stream_push_token(s, tok); - goto error; - } - nparam = isl_int_get_si(tok->u.v); - isl_token_free(tok); - if (n_col != 1 + out + in + local + nparam + 1) { - isl_stream_error(s, NULL, - "dimensions don't match"); - goto error; - } - } else - out = n_col - 2 - nparam; - bmap = isl_basic_map_alloc(s->ctx, nparam, in, out, local, n_row, n_row); - if (!bmap) - return NULL; - - for (i = 0; i < local; ++i) { - int k = isl_basic_map_alloc_div(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->div[k], 1 + 1 + nparam + in + out + local); - } - - for (i = 0; i < n_row; ++i) - bmap = basic_map_read_polylib_constraint(s, bmap); - - tok = isl_stream_next_token_on_same_line(s); - if (tok) { - isl_stream_error(s, tok, "unexpected extra token on line"); - isl_stream_push_token(s, tok); - goto error; - } - - bmap = isl_basic_map_simplify(bmap); - bmap = isl_basic_map_finalize(bmap); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static struct isl_map *map_read_polylib(struct isl_stream *s) -{ - struct isl_token *tok; - struct isl_token *tok2; - int i, n; - struct isl_map *map; - - tok = isl_stream_next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - return NULL; - } - tok2 = isl_stream_next_token_on_same_line(s); - if (tok2 && tok2->type == ISL_TOKEN_VALUE) { - isl_stream_push_token(s, tok2); - isl_stream_push_token(s, tok); - return isl_map_from_basic_map(basic_map_read_polylib(s)); - } - if (tok2) { - isl_stream_error(s, tok2, "unexpected token"); - isl_stream_push_token(s, tok2); - isl_stream_push_token(s, tok); - return NULL; - } - n = isl_int_get_si(tok->u.v); - isl_token_free(tok); - - isl_assert(s->ctx, n >= 1, return NULL); - - map = isl_map_from_basic_map(basic_map_read_polylib(s)); - - for (i = 1; map && i < n; ++i) - map = isl_map_union(map, - isl_map_from_basic_map(basic_map_read_polylib(s))); - - return map; -} - -static int optional_power(struct isl_stream *s) -{ - int pow; - struct isl_token *tok; - - tok = isl_stream_next_token(s); - if (!tok) - return 1; - if (tok->type != '^') { - isl_stream_push_token(s, tok); - return 1; - } - isl_token_free(tok); - tok = isl_stream_next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expecting exponent"); - if (tok) - isl_stream_push_token(s, tok); - return 1; - } - pow = isl_int_get_si(tok->u.v); - isl_token_free(tok); - return pow; -} - -static __isl_give isl_pw_qpolynomial *read_term(struct isl_stream *s, - __isl_keep isl_map *map, struct vars *v); - -static __isl_give isl_pw_qpolynomial *read_factor(struct isl_stream *s, - __isl_keep isl_map *map, struct vars *v) -{ - isl_pw_qpolynomial *pwqp; - struct isl_token *tok; - - tok = next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - return NULL; - } - if (tok->type == '(') { - int pow; - - isl_token_free(tok); - pwqp = read_term(s, map, v); - if (!pwqp) - return NULL; - if (isl_stream_eat(s, ')')) - goto error; - pow = optional_power(s); - pwqp = isl_pw_qpolynomial_pow(pwqp, pow); - } else if (tok->type == ISL_TOKEN_VALUE) { - struct isl_token *tok2; - tok2 = isl_stream_next_token(s); - isl_qpolynomial *qp; - if (tok2 && tok2->type == '/') { - isl_token_free(tok2); - tok2 = next_token(s); - if (!tok2 || tok2->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok2, "expected denominator"); - isl_token_free(tok); - isl_token_free(tok2); - return NULL; - } - qp = isl_qpolynomial_rat_cst_on_domain(isl_map_get_space(map), - tok->u.v, tok2->u.v); - isl_token_free(tok2); - } else { - isl_stream_push_token(s, tok2); - qp = isl_qpolynomial_cst_on_domain(isl_map_get_space(map), - tok->u.v); - } - isl_token_free(tok); - pwqp = isl_pw_qpolynomial_from_qpolynomial(qp); - } else if (tok->type == ISL_TOKEN_INFTY) { - isl_qpolynomial *qp; - isl_token_free(tok); - qp = isl_qpolynomial_infty_on_domain(isl_map_get_space(map)); - pwqp = isl_pw_qpolynomial_from_qpolynomial(qp); - } else if (tok->type == ISL_TOKEN_NAN) { - isl_qpolynomial *qp; - isl_token_free(tok); - qp = isl_qpolynomial_nan_on_domain(isl_map_get_space(map)); - pwqp = isl_pw_qpolynomial_from_qpolynomial(qp); - } else if (tok->type == ISL_TOKEN_IDENT) { - int n = v->n; - int pos = vars_pos(v, tok->u.s, -1); - int pow; - isl_qpolynomial *qp; - if (pos < 0) { - isl_token_free(tok); - return NULL; - } - if (pos >= n) { - vars_drop(v, v->n - n); - isl_stream_error(s, tok, "unknown identifier"); - isl_token_free(tok); - return NULL; - } - isl_token_free(tok); - pow = optional_power(s); - qp = isl_qpolynomial_var_pow_on_domain(isl_map_get_space(map), pos, pow); - pwqp = isl_pw_qpolynomial_from_qpolynomial(qp); - } else if (tok->type == '[') { - isl_pw_aff *pwaff; - int pow; - - isl_stream_push_token(s, tok); - pwaff = accept_affine(s, isl_map_get_space(map), v); - pow = optional_power(s); - pwqp = isl_pw_qpolynomial_from_pw_aff(pwaff); - pwqp = isl_pw_qpolynomial_pow(pwqp, pow); - } else if (tok->type == '-') { - isl_token_free(tok); - pwqp = read_factor(s, map, v); - pwqp = isl_pw_qpolynomial_neg(pwqp); - } else { - isl_stream_error(s, tok, "unexpected isl_token"); - isl_stream_push_token(s, tok); - return NULL; - } - - if (isl_stream_eat_if_available(s, '*') || - isl_stream_next_token_is(s, ISL_TOKEN_IDENT)) { - isl_pw_qpolynomial *pwqp2; - - pwqp2 = read_factor(s, map, v); - pwqp = isl_pw_qpolynomial_mul(pwqp, pwqp2); - } - - return pwqp; -error: - isl_pw_qpolynomial_free(pwqp); - return NULL; -} - -static __isl_give isl_pw_qpolynomial *read_term(struct isl_stream *s, - __isl_keep isl_map *map, struct vars *v) -{ - struct isl_token *tok; - isl_pw_qpolynomial *pwqp; - - pwqp = read_factor(s, map, v); - - for (;;) { - tok = next_token(s); - if (!tok) - return pwqp; - - if (tok->type == '+') { - isl_pw_qpolynomial *pwqp2; - - isl_token_free(tok); - pwqp2 = read_factor(s, map, v); - pwqp = isl_pw_qpolynomial_add(pwqp, pwqp2); - } else if (tok->type == '-') { - isl_pw_qpolynomial *pwqp2; - - isl_token_free(tok); - pwqp2 = read_factor(s, map, v); - pwqp = isl_pw_qpolynomial_sub(pwqp, pwqp2); - } else if (tok->type == ISL_TOKEN_VALUE && - isl_int_is_neg(tok->u.v)) { - isl_pw_qpolynomial *pwqp2; - - isl_stream_push_token(s, tok); - pwqp2 = read_factor(s, map, v); - pwqp = isl_pw_qpolynomial_add(pwqp, pwqp2); - } else { - isl_stream_push_token(s, tok); - break; - } - } - - return pwqp; -} - -static __isl_give isl_map *read_optional_disjuncts(struct isl_stream *s, - __isl_take isl_map *map, struct vars *v) -{ - struct isl_token *tok; - - tok = isl_stream_next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - goto error; - } - if (tok->type == ':' || - (tok->type == ISL_TOKEN_OR && !strcmp(tok->u.s, "|"))) { - isl_token_free(tok); - map = read_disjuncts(s, v, map); - } else - isl_stream_push_token(s, tok); - - return map; -error: - isl_map_free(map); - return NULL; -} - -static struct isl_obj obj_read_poly(struct isl_stream *s, - __isl_take isl_map *map, struct vars *v, int n) -{ - struct isl_obj obj = { isl_obj_pw_qpolynomial, NULL }; - isl_pw_qpolynomial *pwqp; - struct isl_set *set; - - pwqp = read_term(s, map, v); - map = read_optional_disjuncts(s, map, v); - set = isl_map_range(map); - - pwqp = isl_pw_qpolynomial_intersect_domain(pwqp, set); - - vars_drop(v, v->n - n); - - obj.v = pwqp; - return obj; -} - -static struct isl_obj obj_read_poly_or_fold(struct isl_stream *s, - __isl_take isl_set *set, struct vars *v, int n) -{ - struct isl_obj obj = { isl_obj_pw_qpolynomial_fold, NULL }; - isl_pw_qpolynomial *pwqp; - isl_pw_qpolynomial_fold *pwf = NULL; - - if (!isl_stream_eat_if_available(s, ISL_TOKEN_MAX)) - return obj_read_poly(s, set, v, n); - - if (isl_stream_eat(s, '(')) - goto error; - - pwqp = read_term(s, set, v); - pwf = isl_pw_qpolynomial_fold_from_pw_qpolynomial(isl_fold_max, pwqp); - - while (isl_stream_eat_if_available(s, ',')) { - isl_pw_qpolynomial_fold *pwf_i; - pwqp = read_term(s, set, v); - pwf_i = isl_pw_qpolynomial_fold_from_pw_qpolynomial(isl_fold_max, - pwqp); - pwf = isl_pw_qpolynomial_fold_fold(pwf, pwf_i); - } - - if (isl_stream_eat(s, ')')) - goto error; - - set = read_optional_disjuncts(s, set, v); - pwf = isl_pw_qpolynomial_fold_intersect_domain(pwf, set); - - vars_drop(v, v->n - n); - - obj.v = pwf; - return obj; -error: - isl_set_free(set); - isl_pw_qpolynomial_fold_free(pwf); - obj.type = isl_obj_none; - return obj; -} - -static int is_rational(struct isl_stream *s) -{ - struct isl_token *tok; - - tok = isl_stream_next_token(s); - if (!tok) - return 0; - if (tok->type == ISL_TOKEN_RAT && isl_stream_next_token_is(s, ':')) { - isl_token_free(tok); - isl_stream_eat(s, ':'); - return 1; - } - - isl_stream_push_token(s, tok); - - return 0; -} - -static struct isl_obj obj_read_body(struct isl_stream *s, - __isl_take isl_map *map, struct vars *v) -{ - struct isl_token *tok; - struct isl_obj obj = { isl_obj_set, NULL }; - int n = v->n; - - if (is_rational(s)) - map = isl_map_set_rational(map); - - if (isl_stream_next_token_is(s, ':')) { - obj.type = isl_obj_set; - obj.v = read_optional_disjuncts(s, map, v); - return obj; - } - - if (!next_is_tuple(s)) - return obj_read_poly_or_fold(s, map, v, n); - - map = read_tuple(s, map, isl_dim_in, v); - if (!map) - goto error; - tok = isl_stream_next_token(s); - if (tok && tok->type == ISL_TOKEN_TO) { - obj.type = isl_obj_map; - isl_token_free(tok); - if (!next_is_tuple(s)) { - isl_set *set = isl_map_domain(map); - return obj_read_poly_or_fold(s, set, v, n); - } - map = read_tuple(s, map, isl_dim_out, v); - if (!map) - goto error; - } else { - map = isl_map_reverse(map); - if (tok) - isl_stream_push_token(s, tok); - } - - map = read_optional_disjuncts(s, map, v); - - vars_drop(v, v->n - n); - - obj.v = map; - return obj; -error: - isl_map_free(map); - obj.type = isl_obj_none; - return obj; -} - -static struct isl_obj to_union(isl_ctx *ctx, struct isl_obj obj) -{ - if (obj.type == isl_obj_map) { - obj.v = isl_union_map_from_map(obj.v); - obj.type = isl_obj_union_map; - } else if (obj.type == isl_obj_set) { - obj.v = isl_union_set_from_set(obj.v); - obj.type = isl_obj_union_set; - } else if (obj.type == isl_obj_pw_qpolynomial) { - obj.v = isl_union_pw_qpolynomial_from_pw_qpolynomial(obj.v); - obj.type = isl_obj_union_pw_qpolynomial; - } else if (obj.type == isl_obj_pw_qpolynomial_fold) { - obj.v = isl_union_pw_qpolynomial_fold_from_pw_qpolynomial_fold(obj.v); - obj.type = isl_obj_union_pw_qpolynomial_fold; - } else - isl_assert(ctx, 0, goto error); - return obj; -error: - obj.type->free(obj.v); - obj.type = isl_obj_none; - return obj; -} - -static struct isl_obj obj_add(struct isl_ctx *ctx, - struct isl_obj obj1, struct isl_obj obj2) -{ - if (obj1.type == isl_obj_set && obj2.type == isl_obj_union_set) - obj1 = to_union(ctx, obj1); - if (obj1.type == isl_obj_union_set && obj2.type == isl_obj_set) - obj2 = to_union(ctx, obj2); - if (obj1.type == isl_obj_map && obj2.type == isl_obj_union_map) - obj1 = to_union(ctx, obj1); - if (obj1.type == isl_obj_union_map && obj2.type == isl_obj_map) - obj2 = to_union(ctx, obj2); - if (obj1.type == isl_obj_pw_qpolynomial && - obj2.type == isl_obj_union_pw_qpolynomial) - obj1 = to_union(ctx, obj1); - if (obj1.type == isl_obj_union_pw_qpolynomial && - obj2.type == isl_obj_pw_qpolynomial) - obj2 = to_union(ctx, obj2); - if (obj1.type == isl_obj_pw_qpolynomial_fold && - obj2.type == isl_obj_union_pw_qpolynomial_fold) - obj1 = to_union(ctx, obj1); - if (obj1.type == isl_obj_union_pw_qpolynomial_fold && - obj2.type == isl_obj_pw_qpolynomial_fold) - obj2 = to_union(ctx, obj2); - isl_assert(ctx, obj1.type == obj2.type, goto error); - if (obj1.type == isl_obj_map && !isl_map_has_equal_space(obj1.v, obj2.v)) { - obj1 = to_union(ctx, obj1); - obj2 = to_union(ctx, obj2); - } - if (obj1.type == isl_obj_set && !isl_set_has_equal_space(obj1.v, obj2.v)) { - obj1 = to_union(ctx, obj1); - obj2 = to_union(ctx, obj2); - } - if (obj1.type == isl_obj_pw_qpolynomial && - !isl_pw_qpolynomial_has_equal_space(obj1.v, obj2.v)) { - obj1 = to_union(ctx, obj1); - obj2 = to_union(ctx, obj2); - } - if (obj1.type == isl_obj_pw_qpolynomial_fold && - !isl_pw_qpolynomial_fold_has_equal_space(obj1.v, obj2.v)) { - obj1 = to_union(ctx, obj1); - obj2 = to_union(ctx, obj2); - } - obj1.v = obj1.type->add(obj1.v, obj2.v); - return obj1; -error: - obj1.type->free(obj1.v); - obj2.type->free(obj2.v); - obj1.type = isl_obj_none; - obj1.v = NULL; - return obj1; -} - -static struct isl_obj obj_read(struct isl_stream *s) -{ - isl_map *map = NULL; - struct isl_token *tok; - struct vars *v = NULL; - struct isl_obj obj = { isl_obj_set, NULL }; - - tok = next_token(s); - if (!tok) { - isl_stream_error(s, NULL, "unexpected EOF"); - goto error; - } - if (tok->type == ISL_TOKEN_VALUE) { - struct isl_token *tok2; - struct isl_map *map; - - tok2 = isl_stream_next_token(s); - if (!tok2 || tok2->type != ISL_TOKEN_VALUE || - isl_int_is_neg(tok2->u.v)) { - if (tok2) - isl_stream_push_token(s, tok2); - obj.type = isl_obj_int; - obj.v = isl_int_obj_alloc(s->ctx, tok->u.v); - isl_token_free(tok); - return obj; - } - isl_stream_push_token(s, tok2); - isl_stream_push_token(s, tok); - map = map_read_polylib(s); - if (!map) - goto error; - if (isl_map_may_be_set(map)) - obj.v = isl_map_range(map); - else { - obj.type = isl_obj_map; - obj.v = map; - } - return obj; - } - v = vars_new(s->ctx); - if (!v) { - isl_stream_push_token(s, tok); - goto error; - } - map = isl_map_universe(isl_space_params_alloc(s->ctx, 0)); - if (tok->type == '[') { - isl_stream_push_token(s, tok); - map = read_tuple(s, map, isl_dim_param, v); - if (!map) - goto error; - tok = isl_stream_next_token(s); - if (!tok || tok->type != ISL_TOKEN_TO) { - isl_stream_error(s, tok, "expecting '->'"); - if (tok) - isl_stream_push_token(s, tok); - goto error; - } - isl_token_free(tok); - tok = isl_stream_next_token(s); - } - if (!tok || tok->type != '{') { - isl_stream_error(s, tok, "expecting '{'"); - if (tok) - isl_stream_push_token(s, tok); - goto error; - } - isl_token_free(tok); - - tok = isl_stream_next_token(s); - if (!tok) - ; - else if (tok->type == ISL_TOKEN_IDENT && !strcmp(tok->u.s, "Sym")) { - isl_token_free(tok); - if (isl_stream_eat(s, '=')) - goto error; - map = read_tuple(s, map, isl_dim_param, v); - if (!map) - goto error; - } else if (tok->type == '}') { - obj.type = isl_obj_union_set; - obj.v = isl_union_set_empty(isl_map_get_space(map)); - isl_token_free(tok); - goto done; - } else - isl_stream_push_token(s, tok); - - for (;;) { - struct isl_obj o; - tok = NULL; - o = obj_read_body(s, isl_map_copy(map), v); - if (o.type == isl_obj_none || !o.v) - goto error; - if (!obj.v) - obj = o; - else { - obj = obj_add(s->ctx, obj, o); - if (obj.type == isl_obj_none || !obj.v) - goto error; - } - tok = isl_stream_next_token(s); - if (!tok || tok->type != ';') - break; - isl_token_free(tok); - if (isl_stream_next_token_is(s, '}')) { - tok = isl_stream_next_token(s); - break; - } - } - - if (tok && tok->type == '}') { - isl_token_free(tok); - } else { - isl_stream_error(s, tok, "unexpected isl_token"); - if (tok) - isl_token_free(tok); - goto error; - } -done: - vars_free(v); - isl_map_free(map); - - return obj; -error: - isl_map_free(map); - obj.type->free(obj.v); - if (v) - vars_free(v); - obj.v = NULL; - return obj; -} - -struct isl_obj isl_stream_read_obj(struct isl_stream *s) -{ - return obj_read(s); -} - -__isl_give isl_map *isl_stream_read_map(struct isl_stream *s) -{ - struct isl_obj obj; - - obj = obj_read(s); - if (obj.v) - isl_assert(s->ctx, obj.type == isl_obj_map || - obj.type == isl_obj_set, goto error); - - return obj.v; -error: - obj.type->free(obj.v); - return NULL; -} - -__isl_give isl_set *isl_stream_read_set(struct isl_stream *s) -{ - struct isl_obj obj; - - obj = obj_read(s); - if (obj.v) { - if (obj.type == isl_obj_map && isl_map_may_be_set(obj.v)) { - obj.v = isl_map_range(obj.v); - obj.type = isl_obj_set; - } - isl_assert(s->ctx, obj.type == isl_obj_set, goto error); - } - - return obj.v; -error: - obj.type->free(obj.v); - return NULL; -} - -__isl_give isl_union_map *isl_stream_read_union_map(struct isl_stream *s) -{ - struct isl_obj obj; - - obj = obj_read(s); - if (obj.type == isl_obj_map) { - obj.type = isl_obj_union_map; - obj.v = isl_union_map_from_map(obj.v); - } - if (obj.type == isl_obj_set) { - obj.type = isl_obj_union_set; - obj.v = isl_union_set_from_set(obj.v); - } - if (obj.v) - isl_assert(s->ctx, obj.type == isl_obj_union_map || - obj.type == isl_obj_union_set, goto error); - - return obj.v; -error: - obj.type->free(obj.v); - return NULL; -} - -__isl_give isl_union_set *isl_stream_read_union_set(struct isl_stream *s) -{ - struct isl_obj obj; - - obj = obj_read(s); - if (obj.type == isl_obj_set) { - obj.type = isl_obj_union_set; - obj.v = isl_union_set_from_set(obj.v); - } - if (obj.v) - isl_assert(s->ctx, obj.type == isl_obj_union_set, goto error); - - return obj.v; -error: - obj.type->free(obj.v); - return NULL; -} - -static __isl_give isl_basic_map *basic_map_read(struct isl_stream *s) -{ - struct isl_obj obj; - struct isl_map *map; - struct isl_basic_map *bmap; - - obj = obj_read(s); - map = obj.v; - if (!map) - return NULL; - - isl_assert(map->ctx, map->n <= 1, goto error); - - if (map->n == 0) - bmap = isl_basic_map_empty_like_map(map); - else - bmap = isl_basic_map_copy(map->p[0]); - - isl_map_free(map); - - return bmap; -error: - isl_map_free(map); - return NULL; -} - -static __isl_give isl_basic_set *basic_set_read(struct isl_stream *s) -{ - isl_basic_map *bmap; - bmap = basic_map_read(s); - if (!bmap) - return NULL; - if (!isl_basic_map_may_be_set(bmap)) - isl_die(s->ctx, isl_error_invalid, - "input is not a set", goto error); - return isl_basic_map_range(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_read_from_file(isl_ctx *ctx, - FILE *input) -{ - struct isl_basic_map *bmap; - struct isl_stream *s = isl_stream_new_file(ctx, input); - if (!s) - return NULL; - bmap = basic_map_read(s); - isl_stream_free(s); - return bmap; -} - -__isl_give isl_basic_set *isl_basic_set_read_from_file(isl_ctx *ctx, - FILE *input) -{ - isl_basic_set *bset; - struct isl_stream *s = isl_stream_new_file(ctx, input); - if (!s) - return NULL; - bset = basic_set_read(s); - isl_stream_free(s); - return bset; -} - -struct isl_basic_map *isl_basic_map_read_from_str(struct isl_ctx *ctx, - const char *str) -{ - struct isl_basic_map *bmap; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - bmap = basic_map_read(s); - isl_stream_free(s); - return bmap; -} - -struct isl_basic_set *isl_basic_set_read_from_str(struct isl_ctx *ctx, - const char *str) -{ - isl_basic_set *bset; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - bset = basic_set_read(s); - isl_stream_free(s); - return bset; -} - -__isl_give isl_map *isl_map_read_from_file(struct isl_ctx *ctx, - FILE *input) -{ - struct isl_map *map; - struct isl_stream *s = isl_stream_new_file(ctx, input); - if (!s) - return NULL; - map = isl_stream_read_map(s); - isl_stream_free(s); - return map; -} - -__isl_give isl_map *isl_map_read_from_str(struct isl_ctx *ctx, - const char *str) -{ - struct isl_map *map; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - map = isl_stream_read_map(s); - isl_stream_free(s); - return map; -} - -__isl_give isl_set *isl_set_read_from_file(struct isl_ctx *ctx, - FILE *input) -{ - isl_set *set; - struct isl_stream *s = isl_stream_new_file(ctx, input); - if (!s) - return NULL; - set = isl_stream_read_set(s); - isl_stream_free(s); - return set; -} - -struct isl_set *isl_set_read_from_str(struct isl_ctx *ctx, - const char *str) -{ - isl_set *set; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - set = isl_stream_read_set(s); - isl_stream_free(s); - return set; -} - -__isl_give isl_union_map *isl_union_map_read_from_file(isl_ctx *ctx, - FILE *input) -{ - isl_union_map *umap; - struct isl_stream *s = isl_stream_new_file(ctx, input); - if (!s) - return NULL; - umap = isl_stream_read_union_map(s); - isl_stream_free(s); - return umap; -} - -__isl_give isl_union_map *isl_union_map_read_from_str(struct isl_ctx *ctx, - const char *str) -{ - isl_union_map *umap; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - umap = isl_stream_read_union_map(s); - isl_stream_free(s); - return umap; -} - -__isl_give isl_union_set *isl_union_set_read_from_file(isl_ctx *ctx, - FILE *input) -{ - isl_union_set *uset; - struct isl_stream *s = isl_stream_new_file(ctx, input); - if (!s) - return NULL; - uset = isl_stream_read_union_set(s); - isl_stream_free(s); - return uset; -} - -__isl_give isl_union_set *isl_union_set_read_from_str(struct isl_ctx *ctx, - const char *str) -{ - isl_union_set *uset; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - uset = isl_stream_read_union_set(s); - isl_stream_free(s); - return uset; -} - -static __isl_give isl_vec *isl_vec_read_polylib(struct isl_stream *s) -{ - struct isl_vec *vec = NULL; - struct isl_token *tok; - unsigned size; - int j; - - tok = isl_stream_next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expecting vector length"); - goto error; - } - - size = isl_int_get_si(tok->u.v); - isl_token_free(tok); - - vec = isl_vec_alloc(s->ctx, size); - - for (j = 0; j < size; ++j) { - tok = isl_stream_next_token(s); - if (!tok || tok->type != ISL_TOKEN_VALUE) { - isl_stream_error(s, tok, "expecting constant value"); - goto error; - } - isl_int_set(vec->el[j], tok->u.v); - isl_token_free(tok); - } - - return vec; -error: - isl_token_free(tok); - isl_vec_free(vec); - return NULL; -} - -static __isl_give isl_vec *vec_read(struct isl_stream *s) -{ - return isl_vec_read_polylib(s); -} - -__isl_give isl_vec *isl_vec_read_from_file(isl_ctx *ctx, FILE *input) -{ - isl_vec *v; - struct isl_stream *s = isl_stream_new_file(ctx, input); - if (!s) - return NULL; - v = vec_read(s); - isl_stream_free(s); - return v; -} - -__isl_give isl_pw_qpolynomial *isl_stream_read_pw_qpolynomial( - struct isl_stream *s) -{ - struct isl_obj obj; - - obj = obj_read(s); - if (obj.v) - isl_assert(s->ctx, obj.type == isl_obj_pw_qpolynomial, - goto error); - - return obj.v; -error: - obj.type->free(obj.v); - return NULL; -} - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_read_from_str(isl_ctx *ctx, - const char *str) -{ - isl_pw_qpolynomial *pwqp; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - pwqp = isl_stream_read_pw_qpolynomial(s); - isl_stream_free(s); - return pwqp; -} - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_read_from_file(isl_ctx *ctx, - FILE *input) -{ - isl_pw_qpolynomial *pwqp; - struct isl_stream *s = isl_stream_new_file(ctx, input); - if (!s) - return NULL; - pwqp = isl_stream_read_pw_qpolynomial(s); - isl_stream_free(s); - return pwqp; -} - -/* Read an affine expression from "s" with domain (space) "dom". - * We call accept_affine to parse a possibly piecewise affine expression - * and then check that the result is a single affine expression on - * a universe domain. - */ -static __isl_give isl_aff *read_aff_with_dom(struct isl_stream *s, - __isl_take isl_set *dom, struct vars *v) -{ - isl_aff *aff = NULL; - isl_pw_aff *pwaff = NULL; - - if (!isl_set_plain_is_universe(dom)) - isl_die(s->ctx, isl_error_invalid, - "expecting universe domain", goto error); - - if (!isl_set_is_params(dom) && isl_stream_eat(s, ISL_TOKEN_TO)) - goto error; - - if (isl_stream_eat(s, '[')) - goto error; - - pwaff = accept_affine(s, isl_set_get_space(dom), v); - - if (isl_stream_eat(s, ']')) - goto error; - if (isl_stream_eat(s, '}')) - goto error; - - if (!pwaff) - goto error; - - if (pwaff->n != 1) - isl_die(s->ctx, isl_error_invalid, - "expecting single affine expression", goto error); - if (!isl_set_plain_is_universe(pwaff->p[0].set)) - isl_die(s->ctx, isl_error_invalid, - "expecting universe domain", goto error); - - aff = isl_aff_copy(pwaff->p[0].aff); - - vars_free(v); - isl_pw_aff_free(pwaff); - isl_set_free(dom); - return aff; -error: - vars_free(v); - isl_pw_aff_free(pwaff); - isl_set_free(dom); - return NULL; -} - -/* Is the next token an identifer not in "v"? - */ -static int next_is_fresh_ident(struct isl_stream *s, struct vars *v) -{ - int n = v->n; - int fresh; - struct isl_token *tok; - - tok = isl_stream_next_token(s); - if (!tok) - return 0; - fresh = tok->type == ISL_TOKEN_IDENT && vars_pos(v, tok->u.s, -1) >= n; - isl_stream_push_token(s, tok); - - vars_drop(v, v->n - n); - - return fresh; -} - -/* First read the domain of the affine expression, which may be - * a parameter space or a set. - * The tricky part is that we don't know if the domain is a set or not, - * so when we are trying to read the domain, we may actually be reading - * the affine expression itself (defined on a parameter domains) - * If the tuple we are reading is named, we assume it's the domain. - * Also, if inside the tuple, the first thing we find is a nested tuple - * or a new identifier, we again assume it's the domain. - * Otherwise, we assume we are reading an affine expression. - */ -static __isl_give isl_set *read_aff_domain(struct isl_stream *s, - __isl_take isl_set *dom, struct vars *v) -{ - struct isl_token *tok; - - tok = isl_stream_next_token(s); - if (tok && (tok->type == ISL_TOKEN_IDENT || tok->is_keyword)) { - isl_stream_push_token(s, tok); - return read_tuple(s, dom, isl_dim_set, v); - } - if (!tok || tok->type != '[') { - isl_stream_error(s, tok, "expecting '['"); - goto error; - } - if (next_is_tuple(s) || next_is_fresh_ident(s, v)) { - isl_stream_push_token(s, tok); - dom = read_tuple(s, dom, isl_dim_set, v); - } else - isl_stream_push_token(s, tok); - - return dom; -error: - if (tok) - isl_stream_push_token(s, tok); - vars_free(v); - isl_set_free(dom); - return NULL; -} - -/* Read an affine expression from "s". - * We first read the domain of the affine expression, which may be - * a parameter space or a set, and then call read_aff_with_dom. - */ -__isl_give isl_aff *isl_stream_read_aff(struct isl_stream *s) -{ - struct vars *v; - isl_set *dom = NULL; - - v = vars_new(s->ctx); - if (!v) - return NULL; - - dom = isl_set_universe(isl_space_params_alloc(s->ctx, 0)); - if (next_is_tuple(s)) { - dom = read_tuple(s, dom, isl_dim_param, v); - if (isl_stream_eat(s, ISL_TOKEN_TO)) - goto error; - } - if (isl_stream_eat(s, '{')) - goto error; - - dom = read_aff_domain(s, dom, v); - return read_aff_with_dom(s, dom, v); -error: - vars_free(v); - isl_set_free(dom); - return NULL; -} - -/* Read a piecewise affine expression from "s" with domain (space) "dom". - */ -static __isl_give isl_pw_aff *read_pw_aff_with_dom(struct isl_stream *s, - __isl_take isl_set *dom, struct vars *v) -{ - isl_pw_aff *pwaff = NULL; - - if (!isl_set_is_params(dom) && isl_stream_eat(s, ISL_TOKEN_TO)) - goto error; - - if (isl_stream_eat(s, '[')) - goto error; - - pwaff = accept_affine(s, isl_set_get_space(dom), v); - - if (isl_stream_eat(s, ']')) - goto error; - - dom = read_optional_disjuncts(s, dom, v); - pwaff = isl_pw_aff_intersect_domain(pwaff, dom); - - return pwaff; -error: - isl_set_free(dom); - isl_pw_aff_free(pwaff); - return NULL; -} - -__isl_give isl_pw_aff *isl_stream_read_pw_aff(struct isl_stream *s) -{ - struct vars *v; - isl_set *dom = NULL; - isl_set *aff_dom; - isl_pw_aff *pa = NULL; - int n; - - v = vars_new(s->ctx); - if (!v) - return NULL; - - dom = isl_set_universe(isl_space_params_alloc(s->ctx, 0)); - if (next_is_tuple(s)) { - dom = read_tuple(s, dom, isl_dim_param, v); - if (isl_stream_eat(s, ISL_TOKEN_TO)) - goto error; - } - if (isl_stream_eat(s, '{')) - goto error; - - n = v->n; - aff_dom = read_aff_domain(s, isl_set_copy(dom), v); - pa = read_pw_aff_with_dom(s, aff_dom, v); - vars_drop(v, v->n - n); - - while (isl_stream_eat_if_available(s, ';')) { - isl_pw_aff *pa_i; - - n = v->n; - aff_dom = read_aff_domain(s, isl_set_copy(dom), v); - pa_i = read_pw_aff_with_dom(s, aff_dom, v); - vars_drop(v, v->n - n); - - pa = isl_pw_aff_add(pa, pa_i); - } - - if (isl_stream_eat(s, '}')) - goto error; - - vars_free(v); - isl_set_free(dom); - return pa; -error: - vars_free(v); - isl_set_free(dom); - isl_pw_aff_free(pa); - return NULL; -} - -__isl_give isl_aff *isl_aff_read_from_str(isl_ctx *ctx, const char *str) -{ - isl_aff *aff; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - aff = isl_stream_read_aff(s); - isl_stream_free(s); - return aff; -} - -__isl_give isl_pw_aff *isl_pw_aff_read_from_str(isl_ctx *ctx, const char *str) -{ - isl_pw_aff *pa; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - pa = isl_stream_read_pw_aff(s); - isl_stream_free(s); - return pa; -} - -/* Read an isl_pw_multi_aff from "s". - * We currently read a generic object and if it turns out to be a set or - * a map, we convert that to an isl_pw_multi_aff. - * It would be more efficient if we were to construct the isl_pw_multi_aff - * directly. - */ -__isl_give isl_pw_multi_aff *isl_stream_read_pw_multi_aff(struct isl_stream *s) -{ - struct isl_obj obj; - - obj = obj_read(s); - if (!obj.v) - return NULL; - - if (obj.type == isl_obj_map) - return isl_pw_multi_aff_from_map(obj.v); - if (obj.type == isl_obj_set) - return isl_pw_multi_aff_from_set(obj.v); - - obj.type->free(obj.v); - isl_die(s->ctx, isl_error_invalid, "unexpected object type", - return NULL); -} - -__isl_give isl_pw_multi_aff *isl_pw_multi_aff_read_from_str(isl_ctx *ctx, - const char *str) -{ - isl_pw_multi_aff *pma; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - pma = isl_stream_read_pw_multi_aff(s); - isl_stream_free(s); - return pma; -} - -/* Read a multi-affine expression from "s". - * We call isl_stream_read_pw_multi_aff to parse a possibly piecewise - * multi-affine expression and then check that the result is - * a single multi-affine expression on a universe domain. - */ -__isl_give isl_multi_aff *isl_stream_read_multi_aff(struct isl_stream *s) -{ - isl_pw_multi_aff *pma; - isl_multi_aff *maff; - - pma = isl_stream_read_pw_multi_aff(s); - if (!pma) - return NULL; - if (pma->n != 1) - isl_die(s->ctx, isl_error_invalid, - "expecting single list of affine expressions", - return isl_pw_multi_aff_free(pma)); - if (!isl_set_plain_is_universe(pma->p[0].set)) - isl_die(s->ctx, isl_error_invalid, "expecting universe domain", - return isl_pw_multi_aff_free(pma)); - maff = isl_multi_aff_copy(pma->p[0].maff); - isl_pw_multi_aff_free(pma); - return maff; -} - -__isl_give isl_multi_aff *isl_multi_aff_read_from_str(isl_ctx *ctx, - const char *str) -{ - isl_multi_aff *maff; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - maff = isl_stream_read_multi_aff(s); - isl_stream_free(s); - return maff; -} - -__isl_give isl_union_pw_qpolynomial *isl_stream_read_union_pw_qpolynomial( - struct isl_stream *s) -{ - struct isl_obj obj; - - obj = obj_read(s); - if (obj.type == isl_obj_pw_qpolynomial) { - obj.type = isl_obj_union_pw_qpolynomial; - obj.v = isl_union_pw_qpolynomial_from_pw_qpolynomial(obj.v); - } - if (obj.v) - isl_assert(s->ctx, obj.type == isl_obj_union_pw_qpolynomial, - goto error); - - return obj.v; -error: - obj.type->free(obj.v); - return NULL; -} - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_read_from_str( - isl_ctx *ctx, const char *str) -{ - isl_union_pw_qpolynomial *upwqp; - struct isl_stream *s = isl_stream_new_str(ctx, str); - if (!s) - return NULL; - upwqp = isl_stream_read_union_pw_qpolynomial(s); - isl_stream_free(s); - return upwqp; -} diff --git a/cloog-0.17.0/isl/isl_list.c b/cloog-0.17.0/isl/isl_list.c deleted file mode 100644 index 27baab1..0000000 --- a/cloog-0.17.0/isl/isl_list.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include - -#undef BASE -#define BASE basic_set - -#include - -#undef BASE -#define BASE set - -#include - -#undef BASE -#define BASE aff - -#include - -#undef BASE -#define BASE pw_aff - -#include - -#undef BASE -#define BASE band - -#include diff --git a/cloog-0.17.0/isl/isl_list_private.h b/cloog-0.17.0/isl/isl_list_private.h deleted file mode 100644 index da57f41..0000000 --- a/cloog-0.17.0/isl/isl_list_private.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef ISL_LIST_PRIVATE_H -#define ISL_LIST_PRIVATE_H - -#include - -#undef EL -#define EL isl_basic_set - -#include - -#undef EL -#define EL isl_set - -#include - -#undef EL -#define EL isl_aff - -#include - -#undef EL -#define EL isl_pw_aff - -#include - -#undef EL -#define EL isl_band - -#include - -#endif diff --git a/cloog-0.17.0/isl/isl_list_templ.c b/cloog-0.17.0/isl/isl_list_templ.c deleted file mode 100644 index 9aa4351..0000000 --- a/cloog-0.17.0/isl/isl_list_templ.c +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2011 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#define xCAT(A,B) A ## B -#define CAT(A,B) xCAT(A,B) -#undef EL -#define EL CAT(isl_,BASE) -#define xFN(TYPE,NAME) TYPE ## _ ## NAME -#define FN(TYPE,NAME) xFN(TYPE,NAME) -#define xLIST(EL) EL ## _list -#define LIST(EL) xLIST(EL) - -isl_ctx *FN(LIST(EL),get_ctx)(__isl_keep LIST(EL) *list) -{ - return list ? list->ctx : NULL; -} - -__isl_give LIST(EL) *FN(LIST(EL),alloc)(isl_ctx *ctx, int n) -{ - LIST(EL) *list; - - if (n < 0) - isl_die(ctx, isl_error_invalid, - "cannot create list of negative length", - return NULL); - list = isl_alloc(ctx, LIST(EL), - sizeof(LIST(EL)) + (n - 1) * sizeof(struct EL *)); - if (!list) - return NULL; - - list->ctx = ctx; - isl_ctx_ref(ctx); - list->ref = 1; - list->size = n; - list->n = 0; - return list; -} - -__isl_give LIST(EL) *FN(LIST(EL),copy)(__isl_keep LIST(EL) *list) -{ - if (!list) - return NULL; - - list->ref++; - return list; -} - -__isl_give LIST(EL) *FN(LIST(EL),dup)(__isl_keep LIST(EL) *list) -{ - int i; - LIST(EL) *dup; - - if (!list) - return NULL; - - dup = FN(LIST(EL),alloc)(FN(LIST(EL),get_ctx)(list), list->n); - if (!dup) - return NULL; - for (i = 0; i < list->n; ++i) - dup = FN(LIST(EL),add)(dup, FN(EL,copy)(list->p[i])); - return dup; -} - -__isl_give LIST(EL) *FN(LIST(EL),add)(__isl_take LIST(EL) *list, - __isl_take struct EL *el) -{ - if (!list || !el) - goto error; - isl_assert(list->ctx, list->n < list->size, goto error); - list->p[list->n] = el; - list->n++; - return list; -error: - FN(EL,free)(el); - FN(LIST(EL),free)(list); - return NULL; -} - -void *FN(LIST(EL),free)(__isl_take LIST(EL) *list) -{ - int i; - - if (!list) - return NULL; - - if (--list->ref > 0) - return NULL; - - isl_ctx_deref(list->ctx); - for (i = 0; i < list->n; ++i) - FN(EL,free)(list->p[i]); - free(list); - - return NULL; -} - -int FN(FN(LIST(EL),n),BASE)(__isl_keep LIST(EL) *list) -{ - return list ? list->n : 0; -} - -__isl_give EL *FN(FN(LIST(EL),get),BASE)(__isl_keep LIST(EL) *list, int index) -{ - if (!list) - return NULL; - if (index < 0 || index >= list->n) - isl_die(list->ctx, isl_error_invalid, - "index out of bounds", return NULL); - return FN(EL,copy)(list->p[index]); -} - -int FN(LIST(EL),foreach)(__isl_keep LIST(EL) *list, - int (*fn)(__isl_take EL *el, void *user), void *user) -{ - int i; - - if (!list) - return -1; - - for (i = 0; i < list->n; ++i) { - EL *el = FN(EL,copy(list->p[i])); - if (!el) - return -1; - if (fn(el, user) < 0) - return -1; - } - - return 0; -} - -__isl_give LIST(EL) *FN(FN(LIST(EL),from),BASE)(__isl_take EL *el) -{ - isl_ctx *ctx; - LIST(EL) *list; - - if (!el) - return NULL; - ctx = FN(EL,get_ctx)(el); - list = FN(LIST(EL),alloc)(ctx, 1); - if (!list) - goto error; - list = FN(LIST(EL),add)(list, el); - return list; -error: - FN(EL,free)(el); - return NULL; -} - -__isl_give LIST(EL) *FN(LIST(EL),concat)(__isl_take LIST(EL) *list1, - __isl_take LIST(EL) *list2) -{ - int i; - isl_ctx *ctx; - LIST(EL) *res; - - if (!list1 || !list2) - goto error; - - ctx = FN(LIST(EL),get_ctx)(list1); - res = FN(LIST(EL),alloc)(ctx, list1->n + list2->n); - for (i = 0; i < list1->n; ++i) - res = FN(LIST(EL),add)(res, FN(EL,copy)(list1->p[i])); - for (i = 0; i < list2->n; ++i) - res = FN(LIST(EL),add)(res, FN(EL,copy)(list2->p[i])); - - FN(LIST(EL),free)(list1); - FN(LIST(EL),free)(list2); - return res; -error: - FN(LIST(EL),free)(list1); - FN(LIST(EL),free)(list2); - return NULL; -} - -__isl_give isl_printer *CAT(isl_printer_print_,LIST(BASE))( - __isl_take isl_printer *p, __isl_keep LIST(EL) *list) -{ - int i; - - if (!p || !list) - goto error; - p = isl_printer_print_str(p, "("); - for (i = 0; i < list->n; ++i) { - if (i) - p = isl_printer_print_str(p, ","); - p = CAT(isl_printer_print_,BASE)(p, list->p[i]); - } - p = isl_printer_print_str(p, ")"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -void FN(LIST(EL),dump)(__isl_keep LIST(EL) *list) -{ - isl_printer *printer; - - if (!list) - return; - - printer = isl_printer_to_file(FN(LIST(EL),get_ctx)(list), stderr); - printer = CAT(isl_printer_print_,LIST(BASE))(printer, list); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} diff --git a/cloog-0.17.0/isl/isl_list_templ.h b/cloog-0.17.0/isl/isl_list_templ.h deleted file mode 100644 index 9c60f5a..0000000 --- a/cloog-0.17.0/isl/isl_list_templ.h +++ /dev/null @@ -1,24 +0,0 @@ -#define xFN(TYPE,NAME) TYPE ## _ ## NAME -#define FN(TYPE,NAME) xFN(TYPE,NAME) -#define xLIST(EL) EL ## _list -#define LIST(EL) xLIST(EL) - -struct LIST(EL) { - int ref; - isl_ctx *ctx; - - int n; - - size_t size; - struct EL *p[1]; -}; - -#define ISL_DECLARE_LIST_PRIVATE(EL) \ -__isl_give isl_##EL##_list *isl_##EL##_list_dup( \ - __isl_keep isl_##EL##_list *list); - -ISL_DECLARE_LIST_PRIVATE(basic_set) -ISL_DECLARE_LIST_PRIVATE(set) -ISL_DECLARE_LIST_PRIVATE(aff) -ISL_DECLARE_LIST_PRIVATE(pw_aff) -ISL_DECLARE_LIST_PRIVATE(band) diff --git a/cloog-0.17.0/isl/isl_local_space.c b/cloog-0.17.0/isl/isl_local_space.c deleted file mode 100644 index a57fff1..0000000 --- a/cloog-0.17.0/isl/isl_local_space.c +++ /dev/null @@ -1,897 +0,0 @@ -/* - * Copyright 2011 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include - -isl_ctx *isl_local_space_get_ctx(__isl_keep isl_local_space *ls) -{ - return ls ? ls->dim->ctx : NULL; -} - -__isl_give isl_local_space *isl_local_space_alloc_div(__isl_take isl_space *dim, - __isl_take isl_mat *div) -{ - isl_ctx *ctx; - isl_local_space *ls = NULL; - - if (!dim) - goto error; - - ctx = isl_space_get_ctx(dim); - ls = isl_calloc_type(ctx, struct isl_local_space); - if (!ls) - goto error; - - ls->ref = 1; - ls->dim = dim; - ls->div = div; - - return ls; -error: - isl_space_free(dim); - isl_local_space_free(ls); - return NULL; -} - -__isl_give isl_local_space *isl_local_space_alloc(__isl_take isl_space *dim, - unsigned n_div) -{ - isl_ctx *ctx; - isl_mat *div; - unsigned total; - - if (!dim) - return NULL; - - total = isl_space_dim(dim, isl_dim_all); - - ctx = isl_space_get_ctx(dim); - div = isl_mat_alloc(ctx, n_div, 1 + 1 + total + n_div); - return isl_local_space_alloc_div(dim, div); -} - -__isl_give isl_local_space *isl_local_space_from_space(__isl_take isl_space *dim) -{ - return isl_local_space_alloc(dim, 0); -} - -__isl_give isl_local_space *isl_local_space_copy(__isl_keep isl_local_space *ls) -{ - if (!ls) - return NULL; - - ls->ref++; - return ls; -} - -__isl_give isl_local_space *isl_local_space_dup(__isl_keep isl_local_space *ls) -{ - if (!ls) - return NULL; - - return isl_local_space_alloc_div(isl_space_copy(ls->dim), - isl_mat_copy(ls->div)); - -} - -__isl_give isl_local_space *isl_local_space_cow(__isl_take isl_local_space *ls) -{ - if (!ls) - return NULL; - - if (ls->ref == 1) - return ls; - ls->ref--; - return isl_local_space_dup(ls); -} - -void *isl_local_space_free(__isl_take isl_local_space *ls) -{ - if (!ls) - return NULL; - - if (--ls->ref > 0) - return NULL; - - isl_space_free(ls->dim); - isl_mat_free(ls->div); - - free(ls); - - return NULL; -} - -/* Is the local space that of a set? - */ -int isl_local_space_is_set(__isl_keep isl_local_space *ls) -{ - return ls ? isl_space_is_set(ls->dim) : -1; -} - -/* Return true if the two local spaces are identical, with identical - * expressions for the integer divisions. - */ -int isl_local_space_is_equal(__isl_keep isl_local_space *ls1, - __isl_keep isl_local_space *ls2) -{ - int equal; - - if (!ls1 || !ls2) - return -1; - - equal = isl_space_is_equal(ls1->dim, ls2->dim); - if (equal < 0 || !equal) - return equal; - - if (!isl_local_space_divs_known(ls1)) - return 0; - if (!isl_local_space_divs_known(ls2)) - return 0; - - return isl_mat_is_equal(ls1->div, ls2->div); -} - -int isl_local_space_dim(__isl_keep isl_local_space *ls, - enum isl_dim_type type) -{ - if (!ls) - return 0; - if (type == isl_dim_div) - return ls->div->n_row; - if (type == isl_dim_all) - return isl_space_dim(ls->dim, isl_dim_all) + ls->div->n_row; - return isl_space_dim(ls->dim, type); -} - -unsigned isl_local_space_offset(__isl_keep isl_local_space *ls, - enum isl_dim_type type) -{ - isl_space *dim; - - if (!ls) - return 0; - - dim = ls->dim; - switch (type) { - case isl_dim_cst: return 0; - case isl_dim_param: return 1; - case isl_dim_in: return 1 + dim->nparam; - case isl_dim_out: return 1 + dim->nparam + dim->n_in; - case isl_dim_div: return 1 + dim->nparam + dim->n_in + dim->n_out; - default: return 0; - } -} - -const char *isl_local_space_get_dim_name(__isl_keep isl_local_space *ls, - enum isl_dim_type type, unsigned pos) -{ - return ls ? isl_space_get_dim_name(ls->dim, type, pos) : NULL; -} - -__isl_give isl_aff *isl_local_space_get_div(__isl_keep isl_local_space *ls, - int pos) -{ - isl_aff *aff; - - if (!ls) - return NULL; - - if (pos < 0 || pos >= ls->div->n_row) - isl_die(isl_local_space_get_ctx(ls), isl_error_invalid, - "index out of bounds", return NULL); - - if (isl_int_is_zero(ls->div->row[pos][0])) - isl_die(isl_local_space_get_ctx(ls), isl_error_invalid, - "expression of div unknown", return NULL); - - aff = isl_aff_alloc(isl_local_space_copy(ls)); - if (!aff) - return NULL; - isl_seq_cpy(aff->v->el, ls->div->row[pos], aff->v->size); - return aff; -} - -__isl_give isl_space *isl_local_space_get_space(__isl_keep isl_local_space *ls) -{ - if (!ls) - return NULL; - - return isl_space_copy(ls->dim); -} - -__isl_give isl_local_space *isl_local_space_set_dim_name( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned pos, const char *s) -{ - ls = isl_local_space_cow(ls); - if (!ls) - return NULL; - ls->dim = isl_space_set_dim_name(ls->dim, type, pos, s); - if (!ls->dim) - return isl_local_space_free(ls); - - return ls; -} - -__isl_give isl_local_space *isl_local_space_set_dim_id( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id) -{ - ls = isl_local_space_cow(ls); - if (!ls) - return isl_id_free(id); - ls->dim = isl_space_set_dim_id(ls->dim, type, pos, id); - if (!ls->dim) - return isl_local_space_free(ls); - - return ls; -} - -__isl_give isl_local_space *isl_local_space_reset_space( - __isl_take isl_local_space *ls, __isl_take isl_space *dim) -{ - ls = isl_local_space_cow(ls); - if (!ls || !dim) - goto error; - - isl_space_free(ls->dim); - ls->dim = dim; - - return ls; -error: - isl_local_space_free(ls); - isl_space_free(dim); - return NULL; -} - -/* Reorder the columns of the given div definitions according to the - * given reordering. - * The order of the divs themselves is assumed not to change. - */ -static __isl_give isl_mat *reorder_divs(__isl_take isl_mat *div, - __isl_take isl_reordering *r) -{ - int i, j; - isl_mat *mat; - int extra; - - if (!div || !r) - goto error; - - extra = isl_space_dim(r->dim, isl_dim_all) + div->n_row - r->len; - mat = isl_mat_alloc(div->ctx, div->n_row, div->n_col + extra); - if (!mat) - goto error; - - for (i = 0; i < div->n_row; ++i) { - isl_seq_cpy(mat->row[i], div->row[i], 2); - isl_seq_clr(mat->row[i] + 2, mat->n_col - 2); - for (j = 0; j < r->len; ++j) - isl_int_set(mat->row[i][2 + r->pos[j]], - div->row[i][2 + j]); - } - - isl_reordering_free(r); - isl_mat_free(div); - return mat; -error: - isl_reordering_free(r); - isl_mat_free(div); - return NULL; -} - -/* Reorder the dimensions of "ls" according to the given reordering. - * The reordering r is assumed to have been extended with the local - * variables, leaving them in the same order. - */ -__isl_give isl_local_space *isl_local_space_realign( - __isl_take isl_local_space *ls, __isl_take isl_reordering *r) -{ - ls = isl_local_space_cow(ls); - if (!ls || !r) - goto error; - - ls->div = reorder_divs(ls->div, isl_reordering_copy(r)); - if (!ls->div) - goto error; - - ls = isl_local_space_reset_space(ls, isl_space_copy(r->dim)); - - isl_reordering_free(r); - return ls; -error: - isl_local_space_free(ls); - isl_reordering_free(r); - return NULL; -} - -__isl_give isl_local_space *isl_local_space_add_div( - __isl_take isl_local_space *ls, __isl_take isl_vec *div) -{ - ls = isl_local_space_cow(ls); - if (!ls || !div) - goto error; - - if (ls->div->n_col != div->size) - isl_die(isl_local_space_get_ctx(ls), isl_error_invalid, - "incompatible dimensions", goto error); - - ls->div = isl_mat_add_zero_cols(ls->div, 1); - ls->div = isl_mat_add_rows(ls->div, 1); - if (!ls->div) - goto error; - - isl_seq_cpy(ls->div->row[ls->div->n_row - 1], div->el, div->size); - isl_int_set_si(ls->div->row[ls->div->n_row - 1][div->size], 0); - - isl_vec_free(div); - return ls; -error: - isl_local_space_free(ls); - isl_vec_free(div); - return NULL; -} - -__isl_give isl_local_space *isl_local_space_replace_divs( - __isl_take isl_local_space *ls, __isl_take isl_mat *div) -{ - ls = isl_local_space_cow(ls); - - if (!ls || !div) - goto error; - - isl_mat_free(ls->div); - ls->div = div; - return ls; -error: - isl_mat_free(div); - isl_local_space_free(ls); - return NULL; -} - -/* Copy row "s" of "src" to row "d" of "dst", applying the expansion - * defined by "exp". - */ -static void expand_row(__isl_keep isl_mat *dst, int d, - __isl_keep isl_mat *src, int s, int *exp) -{ - int i; - unsigned c = src->n_col - src->n_row; - - isl_seq_cpy(dst->row[d], src->row[s], c); - isl_seq_clr(dst->row[d] + c, dst->n_col - c); - - for (i = 0; i < s; ++i) - isl_int_set(dst->row[d][c + exp[i]], src->row[s][c + i]); -} - -/* Compare (known) divs. - * Return non-zero if at least one of the two divs is unknown. - */ -static int cmp_row(__isl_keep isl_mat *div, int i, int j) -{ - int li, lj; - - if (isl_int_is_zero(div->row[j][0])) - return -1; - if (isl_int_is_zero(div->row[i][0])) - return 1; - - li = isl_seq_last_non_zero(div->row[i], div->n_col); - lj = isl_seq_last_non_zero(div->row[j], div->n_col); - - if (li != lj) - return li - lj; - - return isl_seq_cmp(div->row[i], div->row[j], div->n_col); -} - -/* Combine the two lists of divs into a single list. - * For each row i in div1, exp1[i] is set to the position of the corresponding - * row in the result. Similarly for div2 and exp2. - * This function guarantees - * exp1[i] >= i - * exp1[i+1] > exp1[i] - * For optimal merging, the two input list should have been sorted. - */ -__isl_give isl_mat *isl_merge_divs(__isl_keep isl_mat *div1, - __isl_keep isl_mat *div2, int *exp1, int *exp2) -{ - int i, j, k; - isl_mat *div = NULL; - unsigned d = div1->n_col - div1->n_row; - - div = isl_mat_alloc(div1->ctx, 1 + div1->n_row + div2->n_row, - d + div1->n_row + div2->n_row); - if (!div) - return NULL; - - for (i = 0, j = 0, k = 0; i < div1->n_row && j < div2->n_row; ++k) { - int cmp; - - expand_row(div, k, div1, i, exp1); - expand_row(div, k + 1, div2, j, exp2); - - cmp = cmp_row(div, k, k + 1); - if (cmp == 0) { - exp1[i++] = k; - exp2[j++] = k; - } else if (cmp < 0) { - exp1[i++] = k; - } else { - exp2[j++] = k; - isl_seq_cpy(div->row[k], div->row[k + 1], div->n_col); - } - } - for (; i < div1->n_row; ++i, ++k) { - expand_row(div, k, div1, i, exp1); - exp1[i] = k; - } - for (; j < div2->n_row; ++j, ++k) { - expand_row(div, k, div2, j, exp2); - exp2[j] = k; - } - - div->n_row = k; - div->n_col = d + k; - - return div; -} - -/* Construct a local space that contains all the divs in either - * "ls1" or "ls2". - */ -__isl_give isl_local_space *isl_local_space_intersect( - __isl_take isl_local_space *ls1, __isl_take isl_local_space *ls2) -{ - isl_ctx *ctx; - int *exp1 = NULL; - int *exp2 = NULL; - isl_mat *div; - - if (!ls1 || !ls2) - goto error; - - ctx = isl_local_space_get_ctx(ls1); - if (!isl_space_is_equal(ls1->dim, ls2->dim)) - isl_die(ctx, isl_error_invalid, - "spaces should be identical", goto error); - - if (ls2->div->n_row == 0) { - isl_local_space_free(ls2); - return ls1; - } - - if (ls1->div->n_row == 0) { - isl_local_space_free(ls1); - return ls2; - } - - exp1 = isl_alloc_array(ctx, int, ls1->div->n_row); - exp2 = isl_alloc_array(ctx, int, ls2->div->n_row); - if (!exp1 || !exp2) - goto error; - - div = isl_merge_divs(ls1->div, ls2->div, exp1, exp2); - if (!div) - goto error; - - free(exp1); - free(exp2); - isl_local_space_free(ls2); - isl_mat_free(ls1->div); - ls1->div = div; - - return ls1; -error: - free(exp1); - free(exp2); - isl_local_space_free(ls1); - isl_local_space_free(ls2); - return NULL; -} - -int isl_local_space_divs_known(__isl_keep isl_local_space *ls) -{ - int i; - - if (!ls) - return -1; - - for (i = 0; i < ls->div->n_row; ++i) - if (isl_int_is_zero(ls->div->row[i][0])) - return 0; - - return 1; -} - -__isl_give isl_local_space *isl_local_space_domain( - __isl_take isl_local_space *ls) -{ - ls = isl_local_space_drop_dims(ls, isl_dim_out, - 0, isl_local_space_dim(ls, isl_dim_out)); - ls = isl_local_space_cow(ls); - if (!ls) - return NULL; - ls->dim = isl_space_domain(ls->dim); - if (!ls->dim) - return isl_local_space_free(ls); - return ls; -} - -__isl_give isl_local_space *isl_local_space_range( - __isl_take isl_local_space *ls) -{ - ls = isl_local_space_drop_dims(ls, isl_dim_in, - 0, isl_local_space_dim(ls, isl_dim_in)); - ls = isl_local_space_cow(ls); - if (!ls) - return NULL; - - ls->dim = isl_space_range(ls->dim); - if (!ls->dim) - return isl_local_space_free(ls); - return ls; -} - -/* Construct a local space for a map that has the given local - * space as domain and that has a zero-dimensional range. - */ -__isl_give isl_local_space *isl_local_space_from_domain( - __isl_take isl_local_space *ls) -{ - ls = isl_local_space_cow(ls); - if (!ls) - return NULL; - ls->dim = isl_space_from_domain(ls->dim); - if (!ls->dim) - return isl_local_space_free(ls); - return ls; -} - -__isl_give isl_local_space *isl_local_space_add_dims( - __isl_take isl_local_space *ls, enum isl_dim_type type, unsigned n) -{ - int pos; - - if (!ls) - return NULL; - pos = isl_local_space_dim(ls, type); - return isl_local_space_insert_dims(ls, type, pos, n); -} - -/* Remove common factor of non-constant terms and denominator. - */ -static void normalize_div(__isl_keep isl_local_space *ls, int div) -{ - isl_ctx *ctx = ls->div->ctx; - unsigned total = ls->div->n_col - 2; - - isl_seq_gcd(ls->div->row[div] + 2, total, &ctx->normalize_gcd); - isl_int_gcd(ctx->normalize_gcd, - ctx->normalize_gcd, ls->div->row[div][0]); - if (isl_int_is_one(ctx->normalize_gcd)) - return; - - isl_seq_scale_down(ls->div->row[div] + 2, ls->div->row[div] + 2, - ctx->normalize_gcd, total); - isl_int_divexact(ls->div->row[div][0], ls->div->row[div][0], - ctx->normalize_gcd); - isl_int_fdiv_q(ls->div->row[div][1], ls->div->row[div][1], - ctx->normalize_gcd); -} - -/* Exploit the equalities in "eq" to simplify the expressions of - * the integer divisions in "ls". - * The integer divisions in "ls" are assumed to appear as regular - * dimensions in "eq". - */ -__isl_give isl_local_space *isl_local_space_substitute_equalities( - __isl_take isl_local_space *ls, __isl_take isl_basic_set *eq) -{ - int i, j, k; - unsigned total; - unsigned n_div; - - ls = isl_local_space_cow(ls); - if (!ls || !eq) - goto error; - - total = isl_space_dim(eq->dim, isl_dim_all); - if (isl_local_space_dim(ls, isl_dim_all) != total) - isl_die(isl_local_space_get_ctx(ls), isl_error_invalid, - "dimensions don't match", goto error); - total++; - n_div = eq->n_div; - for (i = 0; i < eq->n_eq; ++i) { - j = isl_seq_last_non_zero(eq->eq[i], total + n_div); - if (j < 0 || j == 0 || j >= total) - continue; - - for (k = 0; k < ls->div->n_row; ++k) { - if (isl_int_is_zero(ls->div->row[k][1 + j])) - continue; - isl_seq_elim(ls->div->row[k] + 1, eq->eq[i], j, total, - &ls->div->row[k][0]); - normalize_div(ls, k); - } - } - - isl_basic_set_free(eq); - return ls; -error: - isl_basic_set_free(eq); - isl_local_space_free(ls); - return NULL; -} - -/* Plug in "subs" for dimension "type", "pos" in the integer divisions - * of "ls". - * - * Let i be the dimension to replace and let "subs" be of the form - * - * f/d - * - * Any integer division with a non-zero coefficient for i, - * - * floor((a i + g)/m) - * - * is replaced by - * - * floor((a f + d g)/(m d)) - */ -__isl_give isl_local_space *isl_local_space_substitute( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned pos, __isl_keep isl_aff *subs) -{ - int i; - isl_int v; - - ls = isl_local_space_cow(ls); - if (!ls || !subs) - return isl_local_space_free(ls); - - if (!isl_space_is_equal(ls->dim, subs->ls->dim)) - isl_die(isl_local_space_get_ctx(ls), isl_error_invalid, - "spaces don't match", return isl_local_space_free(ls)); - if (isl_local_space_dim(subs->ls, isl_dim_div) != 0) - isl_die(isl_local_space_get_ctx(ls), isl_error_unsupported, - "cannot handle divs yet", - return isl_local_space_free(ls)); - - pos += isl_local_space_offset(ls, type); - - isl_int_init(v); - for (i = 0; i < ls->div->n_row; ++i) { - if (isl_int_is_zero(ls->div->row[i][1 + pos])) - continue; - isl_int_set(v, ls->div->row[i][1 + pos]); - isl_int_set_si(ls->div->row[i][1 + pos], 0); - isl_seq_combine(ls->div->row[i] + 1, - subs->v->el[0], ls->div->row[i] + 1, - v, subs->v->el + 1, subs->v->size - 1); - isl_int_mul(ls->div->row[i][0], - ls->div->row[i][0], subs->v->el[0]); - normalize_div(ls, i); - } - isl_int_clear(v); - - return ls; -} - -int isl_local_space_is_named_or_nested(__isl_keep isl_local_space *ls, - enum isl_dim_type type) -{ - if (!ls) - return -1; - return isl_space_is_named_or_nested(ls->dim, type); -} - -__isl_give isl_local_space *isl_local_space_drop_dims( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned first, unsigned n) -{ - isl_ctx *ctx; - - if (!ls) - return NULL; - if (n == 0 && !isl_local_space_is_named_or_nested(ls, type)) - return ls; - - ctx = isl_local_space_get_ctx(ls); - if (first + n > isl_local_space_dim(ls, type)) - isl_die(ctx, isl_error_invalid, "range out of bounds", - return isl_local_space_free(ls)); - - ls = isl_local_space_cow(ls); - if (!ls) - return NULL; - - if (type == isl_dim_div) { - ls->div = isl_mat_drop_rows(ls->div, first, n); - } else { - ls->dim = isl_space_drop_dims(ls->dim, type, first, n); - if (!ls->dim) - return isl_local_space_free(ls); - } - - first += 1 + isl_local_space_offset(ls, type); - ls->div = isl_mat_drop_cols(ls->div, first, n); - if (!ls->div) - return isl_local_space_free(ls); - - return ls; -} - -__isl_give isl_local_space *isl_local_space_insert_dims( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned first, unsigned n) -{ - isl_ctx *ctx; - - if (!ls) - return NULL; - if (n == 0 && !isl_local_space_is_named_or_nested(ls, type)) - return ls; - - ctx = isl_local_space_get_ctx(ls); - if (first > isl_local_space_dim(ls, type)) - isl_die(ctx, isl_error_invalid, "position out of bounds", - return isl_local_space_free(ls)); - - ls = isl_local_space_cow(ls); - if (!ls) - return NULL; - - if (type == isl_dim_div) { - ls->div = isl_mat_insert_zero_rows(ls->div, first, n); - } else { - ls->dim = isl_space_insert_dims(ls->dim, type, first, n); - if (!ls->dim) - return isl_local_space_free(ls); - } - - first += 1 + isl_local_space_offset(ls, type); - ls->div = isl_mat_insert_zero_cols(ls->div, first, n); - if (!ls->div) - return isl_local_space_free(ls); - - return ls; -} - -/* Check if the constraints pointed to by "constraint" is a div - * constraint corresponding to div "div" in "ls". - * - * That is, if div = floor(f/m), then check if the constraint is - * - * f - m d >= 0 - * or - * -(f-(m-1)) + m d >= 0 - */ -int isl_local_space_is_div_constraint(__isl_keep isl_local_space *ls, - isl_int *constraint, unsigned div) -{ - unsigned pos; - - if (!ls) - return -1; - - if (isl_int_is_zero(ls->div->row[div][0])) - return 0; - - pos = isl_local_space_offset(ls, isl_dim_div) + div; - - if (isl_int_eq(constraint[pos], ls->div->row[div][0])) { - int neg; - isl_int_sub(ls->div->row[div][1], - ls->div->row[div][1], ls->div->row[div][0]); - isl_int_add_ui(ls->div->row[div][1], ls->div->row[div][1], 1); - neg = isl_seq_is_neg(constraint, ls->div->row[div]+1, pos); - isl_int_sub_ui(ls->div->row[div][1], ls->div->row[div][1], 1); - isl_int_add(ls->div->row[div][1], - ls->div->row[div][1], ls->div->row[div][0]); - if (!neg) - return 0; - if (isl_seq_first_non_zero(constraint+pos+1, - ls->div->n_row-div-1) != -1) - return 0; - } else if (isl_int_abs_eq(constraint[pos], ls->div->row[div][0])) { - if (!isl_seq_eq(constraint, ls->div->row[div]+1, pos)) - return 0; - if (isl_seq_first_non_zero(constraint+pos+1, - ls->div->n_row-div-1) != -1) - return 0; - } else - return 0; - - return 1; -} - -/* - * Set active[i] to 1 if the dimension at position i is involved - * in the linear expression l. - */ -int *isl_local_space_get_active(__isl_keep isl_local_space *ls, isl_int *l) -{ - int i, j; - isl_ctx *ctx; - int *active = NULL; - unsigned total; - unsigned offset; - - ctx = isl_local_space_get_ctx(ls); - total = isl_local_space_dim(ls, isl_dim_all); - active = isl_calloc_array(ctx, int, total); - if (!active) - return NULL; - - for (i = 0; i < total; ++i) - active[i] = !isl_int_is_zero(l[i]); - - offset = isl_local_space_offset(ls, isl_dim_div) - 1; - for (i = ls->div->n_row - 1; i >= 0; --i) { - if (!active[offset + i]) - continue; - for (j = 0; j < total; ++j) - active[j] |= !isl_int_is_zero(ls->div->row[i][2 + j]); - } - - return active; -} - -/* Given a local space "ls" of a set, create a local space - * for the lift of the set. In particular, the result - * is of the form [dim -> local[..]], with ls->div->n_row variables in the - * range of the wrapped map. - */ -__isl_give isl_local_space *isl_local_space_lift( - __isl_take isl_local_space *ls) -{ - ls = isl_local_space_cow(ls); - if (!ls) - return NULL; - - ls->dim = isl_space_lift(ls->dim, ls->div->n_row); - ls->div = isl_mat_drop_rows(ls->div, 0, ls->div->n_row); - if (!ls->dim || !ls->div) - return isl_local_space_free(ls); - - return ls; -} - -/* Construct a basic map that maps a set living in local space "ls" - * to the corresponding lifted local space. - */ -__isl_give isl_basic_map *isl_local_space_lifting( - __isl_take isl_local_space *ls) -{ - isl_basic_map *lifting; - isl_basic_set *bset; - - if (!ls) - return NULL; - if (!isl_local_space_is_set(ls)) - isl_die(isl_local_space_get_ctx(ls), isl_error_invalid, - "lifting only defined on set spaces", - return isl_local_space_free(ls)); - - bset = isl_basic_set_from_local_space(ls); - lifting = isl_basic_set_unwrap(isl_basic_set_lift(bset)); - lifting = isl_basic_map_domain_map(lifting); - lifting = isl_basic_map_reverse(lifting); - - return lifting; -} diff --git a/cloog-0.17.0/isl/isl_local_space_private.h b/cloog-0.17.0/isl/isl_local_space_private.h deleted file mode 100644 index 8d106bd..0000000 --- a/cloog-0.17.0/isl/isl_local_space_private.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef ISL_LOCAL_SPACE_PRIVATE_H -#define ISL_LOCAL_SPACE_PRIVATE_H - -#include -#include -#include - -struct isl_local_space { - int ref; - - isl_space *dim; - isl_mat *div; -}; - -__isl_give isl_local_space *isl_local_space_alloc(__isl_take isl_space *dim, - unsigned n_div); -__isl_give isl_local_space *isl_local_space_alloc_div(__isl_take isl_space *dim, - __isl_take isl_mat *div); - -__isl_give isl_local_space *isl_local_space_add_div( - __isl_take isl_local_space *ls, __isl_take isl_vec *div); - -__isl_give isl_mat *isl_merge_divs(__isl_keep isl_mat *div1, - __isl_keep isl_mat *div2, int *exp1, int *exp2); - -unsigned isl_local_space_offset(__isl_keep isl_local_space *ls, - enum isl_dim_type type); - -__isl_give isl_local_space *isl_local_space_replace_divs( - __isl_take isl_local_space *ls, __isl_take isl_mat *div); -int isl_local_space_divs_known(__isl_keep isl_local_space *ls); - -__isl_give isl_local_space *isl_local_space_substitute_equalities( - __isl_take isl_local_space *ls, __isl_take isl_basic_set *eq); - -int isl_local_space_is_named_or_nested(__isl_keep isl_local_space *ls, - enum isl_dim_type type); - -__isl_give isl_local_space *isl_local_space_reset_space( - __isl_take isl_local_space *ls, __isl_take isl_space *dim); -__isl_give isl_local_space *isl_local_space_realign( - __isl_take isl_local_space *ls, __isl_take isl_reordering *r); - -int isl_local_space_is_div_constraint(__isl_keep isl_local_space *ls, - isl_int *constraint, unsigned div); - -int *isl_local_space_get_active(__isl_keep isl_local_space *ls, isl_int *l); - -__isl_give isl_local_space *isl_local_space_substitute( - __isl_take isl_local_space *ls, - enum isl_dim_type type, unsigned pos, __isl_keep isl_aff *subs); - -__isl_give isl_local_space *isl_local_space_lift( - __isl_take isl_local_space *ls); - -#endif diff --git a/cloog-0.17.0/isl/isl_lp.c b/cloog-0.17.0/isl/isl_lp.c deleted file mode 100644 index d2e35a5..0000000 --- a/cloog-0.17.0/isl/isl_lp.c +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include "isl_lp_piplib.h" -#include -#include "isl_tab.h" -#include - -enum isl_lp_result isl_tab_solve_lp(struct isl_basic_map *bmap, int maximize, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol) -{ - struct isl_tab *tab; - enum isl_lp_result res; - unsigned dim = isl_basic_map_total_dim(bmap); - - if (maximize) - isl_seq_neg(f, f, 1 + dim); - - bmap = isl_basic_map_gauss(bmap, NULL); - tab = isl_tab_from_basic_map(bmap); - res = isl_tab_min(tab, f, denom, opt, opt_denom, 0); - if (res == isl_lp_ok && sol) { - *sol = isl_tab_get_sample_value(tab); - if (!*sol) - res = isl_lp_error; - } - isl_tab_free(tab); - - if (maximize) - isl_seq_neg(f, f, 1 + dim); - if (maximize && opt) - isl_int_neg(*opt, *opt); - - return res; -} - -/* Given a basic map "bmap" and an affine combination of the variables "f" - * with denominator "denom", set *opt / *opt_denom to the minimal - * (or maximal if "maximize" is true) value attained by f/d over "bmap", - * assuming the basic map is not empty and the expression cannot attain - * arbitrarily small (or large) values. - * If opt_denom is NULL, then *opt is rounded up (or down) - * to the nearest integer. - * The return value reflects the nature of the result (empty, unbounded, - * minmimal or maximal value returned in *opt). - */ -enum isl_lp_result isl_basic_map_solve_lp(struct isl_basic_map *bmap, int max, - isl_int *f, isl_int d, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol) -{ - if (sol) - *sol = NULL; - - if (!bmap) - return isl_lp_error; - - switch (bmap->ctx->opt->lp_solver) { - case ISL_LP_PIP: - return isl_pip_solve_lp(bmap, max, f, d, opt, opt_denom, sol); - case ISL_LP_TAB: - return isl_tab_solve_lp(bmap, max, f, d, opt, opt_denom, sol); - default: - return isl_lp_error; - } -} - -enum isl_lp_result isl_basic_set_solve_lp(struct isl_basic_set *bset, int max, - isl_int *f, isl_int d, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol) -{ - return isl_basic_map_solve_lp((struct isl_basic_map *)bset, max, - f, d, opt, opt_denom, sol); -} - -enum isl_lp_result isl_map_solve_lp(__isl_keep isl_map *map, int max, - isl_int *f, isl_int d, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol) -{ - int i; - isl_int o; - isl_int t; - isl_int opt_i; - isl_int opt_denom_i; - enum isl_lp_result res; - int max_div; - isl_vec *v = NULL; - - if (!map) - return isl_lp_error; - if (map->n == 0) - return isl_lp_empty; - - max_div = 0; - for (i = 0; i < map->n; ++i) - if (map->p[i]->n_div > max_div) - max_div = map->p[i]->n_div; - if (max_div > 0) { - unsigned total = isl_space_dim(map->dim, isl_dim_all); - v = isl_vec_alloc(map->ctx, 1 + total + max_div); - if (!v) - return isl_lp_error; - isl_seq_cpy(v->el, f, 1 + total); - isl_seq_clr(v->el + 1 + total, max_div); - f = v->el; - } - - if (!opt && map->n > 1 && sol) { - isl_int_init(o); - opt = &o; - } - if (map->n > 0) - isl_int_init(opt_i); - if (map->n > 0 && opt_denom) { - isl_int_init(opt_denom_i); - isl_int_init(t); - } - - res = isl_basic_map_solve_lp(map->p[0], max, f, d, - opt, opt_denom, sol); - if (res == isl_lp_error || res == isl_lp_unbounded) - goto done; - - if (sol) - *sol = NULL; - - for (i = 1; i < map->n; ++i) { - isl_vec *sol_i = NULL; - enum isl_lp_result res_i; - int better; - - res_i = isl_basic_map_solve_lp(map->p[i], max, f, d, - &opt_i, - opt_denom ? &opt_denom_i : NULL, - sol ? &sol_i : NULL); - if (res_i == isl_lp_error || res_i == isl_lp_unbounded) { - res = res_i; - goto done; - } - if (res_i == isl_lp_empty) - continue; - if (res == isl_lp_empty) { - better = 1; - } else if (!opt_denom) { - if (max) - better = isl_int_gt(opt_i, *opt); - else - better = isl_int_lt(opt_i, *opt); - } else { - isl_int_mul(t, opt_i, *opt_denom); - isl_int_submul(t, *opt, opt_denom_i); - if (max) - better = isl_int_is_pos(t); - else - better = isl_int_is_neg(t); - } - if (better) { - res = res_i; - if (opt) - isl_int_set(*opt, opt_i); - if (opt_denom) - isl_int_set(*opt_denom, opt_denom_i); - if (sol) { - isl_vec_free(*sol); - *sol = sol_i; - } - } else - isl_vec_free(sol_i); - } - -done: - isl_vec_free(v); - if (map->n > 0 && opt_denom) { - isl_int_clear(opt_denom_i); - isl_int_clear(t); - } - if (map->n > 0) - isl_int_clear(opt_i); - if (opt == &o) - isl_int_clear(o); - return res; -} - -enum isl_lp_result isl_set_solve_lp(__isl_keep isl_set *set, int max, - isl_int *f, isl_int d, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol) -{ - return isl_map_solve_lp((struct isl_map *)set, max, - f, d, opt, opt_denom, sol); -} diff --git a/cloog-0.17.0/isl/isl_lp_no_piplib.c b/cloog-0.17.0/isl/isl_lp_no_piplib.c deleted file mode 100644 index 54c0135..0000000 --- a/cloog-0.17.0/isl/isl_lp_no_piplib.c +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include "isl_lp_piplib.h" - -enum isl_lp_result isl_pip_solve_lp(struct isl_basic_map *bmap, int maximize, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol) -{ - return isl_lp_error; -} diff --git a/cloog-0.17.0/isl/isl_lp_piplib.c b/cloog-0.17.0/isl/isl_lp_piplib.c deleted file mode 100644 index d4b92af..0000000 --- a/cloog-0.17.0/isl/isl_lp_piplib.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include "isl_piplib.h" -#include "isl_map_piplib.h" - -static void copy_solution(struct isl_vec *vec, int maximize, isl_int *opt, - isl_int *opt_denom, PipQuast *sol) -{ - int i; - PipList *list; - isl_int tmp; - - if (opt) { - if (opt_denom) { - isl_seq_cpy_from_pip(opt, - &sol->list->vector->the_vector[0], 1); - isl_seq_cpy_from_pip(opt_denom, - &sol->list->vector->the_deno[0], 1); - } else if (maximize) - mpz_fdiv_q(*opt, sol->list->vector->the_vector[0], - sol->list->vector->the_deno[0]); - else - mpz_cdiv_q(*opt, sol->list->vector->the_vector[0], - sol->list->vector->the_deno[0]); - } - - if (!vec) - return; - - isl_int_init(tmp); - isl_int_set_si(vec->el[0], 1); - for (i = 0, list = sol->list->next; list; ++i, list = list->next) { - isl_seq_cpy_from_pip(&vec->el[1 + i], - &list->vector->the_deno[0], 1); - isl_int_lcm(vec->el[0], vec->el[0], vec->el[1 + i]); - } - for (i = 0, list = sol->list->next; list; ++i, list = list->next) { - isl_seq_cpy_from_pip(&tmp, &list->vector->the_deno[0], 1); - isl_int_divexact(tmp, vec->el[0], tmp); - isl_seq_cpy_from_pip(&vec->el[1 + i], - &list->vector->the_vector[0], 1); - isl_int_mul(vec->el[1 + i], vec->el[1 + i], tmp); - } - isl_int_clear(tmp); -} - -enum isl_lp_result isl_pip_solve_lp(struct isl_basic_map *bmap, int maximize, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **vec) -{ - enum isl_lp_result res = isl_lp_ok; - PipMatrix *domain = NULL; - PipOptions *options; - PipQuast *sol; - unsigned total; - - total = isl_basic_map_total_dim(bmap); - domain = isl_basic_map_to_pip(bmap, 0, 1, 0); - if (!domain) - goto error; - entier_set_si(domain->p[0][1], -1); - isl_int_set(domain->p[0][domain->NbColumns - 1], f[0]); - isl_seq_cpy_to_pip(domain->p[0]+2, f+1, total); - - options = pip_options_init(); - if (!options) - goto error; - options->Urs_unknowns = -1; - options->Maximize = maximize; - options->Nq = 0; - sol = pip_solve(domain, NULL, -1, options); - pip_options_free(options); - if (!sol) - goto error; - - if (vec) { - isl_ctx *ctx = isl_basic_map_get_ctx(bmap); - *vec = isl_vec_alloc(ctx, 1 + total); - } - if (vec && !*vec) - res = isl_lp_error; - else if (!sol->list) - res = isl_lp_empty; - else if (entier_zero_p(sol->list->vector->the_deno[0])) - res = isl_lp_unbounded; - else - copy_solution(*vec, maximize, opt, opt_denom, sol); - pip_matrix_free(domain); - pip_quast_free(sol); - return res; -error: - if (domain) - pip_matrix_free(domain); - return isl_lp_error; -} diff --git a/cloog-0.17.0/isl/isl_lp_piplib.h b/cloog-0.17.0/isl/isl_lp_piplib.h deleted file mode 100644 index e69a3b4..0000000 --- a/cloog-0.17.0/isl/isl_lp_piplib.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_LP_PIPLIB_H -#define ISL_LP_PIPLIB_H - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -enum isl_lp_result isl_pip_solve_lp(struct isl_basic_map *bmap, int maximize, - isl_int *f, isl_int denom, isl_int *opt, - isl_int *opt_denom, - struct isl_vec **sol); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/isl_map.c b/cloog-0.17.0/isl/isl_map.c deleted file mode 100644 index 8b4aea3..0000000 --- a/cloog-0.17.0/isl/isl_map.c +++ /dev/null @@ -1,10008 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include -#include "isl_space_private.h" -#include "isl_equalities.h" -#include -#include -#include -#include -#include -#include "isl_map_piplib.h" -#include -#include "isl_sample.h" -#include "isl_tab.h" -#include -#include -#include -#include -#include -#include - -static unsigned n(__isl_keep isl_space *dim, enum isl_dim_type type) -{ - switch (type) { - case isl_dim_param: return dim->nparam; - case isl_dim_in: return dim->n_in; - case isl_dim_out: return dim->n_out; - case isl_dim_all: return dim->nparam + dim->n_in + dim->n_out; - default: return 0; - } -} - -static unsigned pos(__isl_keep isl_space *dim, enum isl_dim_type type) -{ - switch (type) { - case isl_dim_param: return 1; - case isl_dim_in: return 1 + dim->nparam; - case isl_dim_out: return 1 + dim->nparam + dim->n_in; - default: return 0; - } -} - -unsigned isl_basic_map_dim(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type) -{ - if (!bmap) - return 0; - switch (type) { - case isl_dim_cst: return 1; - case isl_dim_param: - case isl_dim_in: - case isl_dim_out: return isl_space_dim(bmap->dim, type); - case isl_dim_div: return bmap->n_div; - case isl_dim_all: return isl_basic_map_total_dim(bmap); - default: return 0; - } -} - -unsigned isl_map_dim(__isl_keep isl_map *map, enum isl_dim_type type) -{ - return map ? n(map->dim, type) : 0; -} - -unsigned isl_set_dim(__isl_keep isl_set *set, enum isl_dim_type type) -{ - return set ? n(set->dim, type) : 0; -} - -unsigned isl_basic_map_offset(struct isl_basic_map *bmap, - enum isl_dim_type type) -{ - isl_space *dim = bmap->dim; - switch (type) { - case isl_dim_cst: return 0; - case isl_dim_param: return 1; - case isl_dim_in: return 1 + dim->nparam; - case isl_dim_out: return 1 + dim->nparam + dim->n_in; - case isl_dim_div: return 1 + dim->nparam + dim->n_in + dim->n_out; - default: return 0; - } -} - -unsigned isl_basic_set_offset(struct isl_basic_set *bset, - enum isl_dim_type type) -{ - return isl_basic_map_offset(bset, type); -} - -static unsigned map_offset(struct isl_map *map, enum isl_dim_type type) -{ - return pos(map->dim, type); -} - -unsigned isl_basic_set_dim(__isl_keep isl_basic_set *bset, - enum isl_dim_type type) -{ - return isl_basic_map_dim(bset, type); -} - -unsigned isl_basic_set_n_dim(__isl_keep isl_basic_set *bset) -{ - return isl_basic_set_dim(bset, isl_dim_set); -} - -unsigned isl_basic_set_n_param(__isl_keep isl_basic_set *bset) -{ - return isl_basic_set_dim(bset, isl_dim_param); -} - -unsigned isl_basic_set_total_dim(const struct isl_basic_set *bset) -{ - return isl_space_dim(bset->dim, isl_dim_all) + bset->n_div; -} - -unsigned isl_set_n_dim(__isl_keep isl_set *set) -{ - return isl_set_dim(set, isl_dim_set); -} - -unsigned isl_set_n_param(__isl_keep isl_set *set) -{ - return isl_set_dim(set, isl_dim_param); -} - -unsigned isl_basic_map_n_in(const struct isl_basic_map *bmap) -{ - return bmap ? bmap->dim->n_in : 0; -} - -unsigned isl_basic_map_n_out(const struct isl_basic_map *bmap) -{ - return bmap ? bmap->dim->n_out : 0; -} - -unsigned isl_basic_map_n_param(const struct isl_basic_map *bmap) -{ - return bmap ? bmap->dim->nparam : 0; -} - -unsigned isl_basic_map_n_div(const struct isl_basic_map *bmap) -{ - return bmap ? bmap->n_div : 0; -} - -unsigned isl_basic_map_total_dim(const struct isl_basic_map *bmap) -{ - return bmap ? isl_space_dim(bmap->dim, isl_dim_all) + bmap->n_div : 0; -} - -unsigned isl_map_n_in(const struct isl_map *map) -{ - return map ? map->dim->n_in : 0; -} - -unsigned isl_map_n_out(const struct isl_map *map) -{ - return map ? map->dim->n_out : 0; -} - -unsigned isl_map_n_param(const struct isl_map *map) -{ - return map ? map->dim->nparam : 0; -} - -int isl_map_compatible_domain(struct isl_map *map, struct isl_set *set) -{ - int m; - if (!map || !set) - return -1; - m = isl_space_match(map->dim, isl_dim_param, set->dim, isl_dim_param); - if (m < 0 || !m) - return m; - return isl_space_tuple_match(map->dim, isl_dim_in, set->dim, isl_dim_set); -} - -int isl_basic_map_compatible_domain(struct isl_basic_map *bmap, - struct isl_basic_set *bset) -{ - int m; - if (!bmap || !bset) - return -1; - m = isl_space_match(bmap->dim, isl_dim_param, bset->dim, isl_dim_param); - if (m < 0 || !m) - return m; - return isl_space_tuple_match(bmap->dim, isl_dim_in, bset->dim, isl_dim_set); -} - -int isl_map_compatible_range(__isl_keep isl_map *map, __isl_keep isl_set *set) -{ - int m; - if (!map || !set) - return -1; - m = isl_space_match(map->dim, isl_dim_param, set->dim, isl_dim_param); - if (m < 0 || !m) - return m; - return isl_space_tuple_match(map->dim, isl_dim_out, set->dim, isl_dim_set); -} - -int isl_basic_map_compatible_range(struct isl_basic_map *bmap, - struct isl_basic_set *bset) -{ - int m; - if (!bmap || !bset) - return -1; - m = isl_space_match(bmap->dim, isl_dim_param, bset->dim, isl_dim_param); - if (m < 0 || !m) - return m; - return isl_space_tuple_match(bmap->dim, isl_dim_out, bset->dim, isl_dim_set); -} - -isl_ctx *isl_basic_map_get_ctx(__isl_keep isl_basic_map *bmap) -{ - return bmap ? bmap->ctx : NULL; -} - -isl_ctx *isl_basic_set_get_ctx(__isl_keep isl_basic_set *bset) -{ - return bset ? bset->ctx : NULL; -} - -isl_ctx *isl_map_get_ctx(__isl_keep isl_map *map) -{ - return map ? map->ctx : NULL; -} - -isl_ctx *isl_set_get_ctx(__isl_keep isl_set *set) -{ - return set ? set->ctx : NULL; -} - -__isl_give isl_space *isl_basic_map_get_space(__isl_keep isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - return isl_space_copy(bmap->dim); -} - -__isl_give isl_space *isl_basic_set_get_space(__isl_keep isl_basic_set *bset) -{ - if (!bset) - return NULL; - return isl_space_copy(bset->dim); -} - -__isl_give isl_local_space *isl_basic_map_get_local_space( - __isl_keep isl_basic_map *bmap) -{ - int i; - isl_local_space *ls; - unsigned total; - - if (!bmap) - return NULL; - - total = isl_basic_map_total_dim(bmap); - ls = isl_local_space_alloc(isl_space_copy(bmap->dim), bmap->n_div); - if (!ls) - return NULL; - - for (i = 0; i < bmap->n_div; ++i) - isl_seq_cpy(ls->div->row[i], bmap->div[i], 2 + total); - - return ls; -} - -__isl_give isl_local_space *isl_basic_set_get_local_space( - __isl_keep isl_basic_set *bset) -{ - return isl_basic_map_get_local_space(bset); -} - -__isl_give isl_basic_map *isl_basic_map_from_local_space( - __isl_take isl_local_space *ls) -{ - int i; - int n_div; - isl_basic_map *bmap; - - if (!ls) - return NULL; - - n_div = isl_local_space_dim(ls, isl_dim_div); - bmap = isl_basic_map_alloc_space(isl_local_space_get_space(ls), - n_div, 0, 2 * n_div); - - for (i = 0; i < n_div; ++i) - if (isl_basic_map_alloc_div(bmap) < 0) - goto error; - - for (i = 0; i < n_div; ++i) { - isl_seq_cpy(bmap->div[i], ls->div->row[i], ls->div->n_col); - if (isl_basic_map_add_div_constraints(bmap, i) < 0) - goto error; - } - - isl_local_space_free(ls); - return bmap; -error: - isl_local_space_free(ls); - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_from_local_space( - __isl_take isl_local_space *ls) -{ - return isl_basic_map_from_local_space(ls); -} - -__isl_give isl_space *isl_map_get_space(__isl_keep isl_map *map) -{ - if (!map) - return NULL; - return isl_space_copy(map->dim); -} - -__isl_give isl_space *isl_set_get_space(__isl_keep isl_set *set) -{ - if (!set) - return NULL; - return isl_space_copy(set->dim); -} - -__isl_give isl_basic_map *isl_basic_map_set_tuple_name( - __isl_take isl_basic_map *bmap, enum isl_dim_type type, const char *s) -{ - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - bmap->dim = isl_space_set_tuple_name(bmap->dim, type, s); - if (!bmap->dim) - goto error; - bmap = isl_basic_map_finalize(bmap); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_set_tuple_name( - __isl_take isl_basic_set *bset, const char *s) -{ - return isl_basic_map_set_tuple_name(bset, isl_dim_set, s); -} - -const char *isl_basic_map_get_tuple_name(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type) -{ - return bmap ? isl_space_get_tuple_name(bmap->dim, type) : NULL; -} - -__isl_give isl_map *isl_map_set_tuple_name(__isl_take isl_map *map, - enum isl_dim_type type, const char *s) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - map->dim = isl_space_set_tuple_name(map->dim, type, s); - if (!map->dim) - goto error; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_set_tuple_name(map->p[i], type, s); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -const char *isl_map_get_tuple_name(__isl_keep isl_map *map, - enum isl_dim_type type) -{ - return map ? isl_space_get_tuple_name(map->dim, type) : NULL; -} - -__isl_give isl_set *isl_set_set_tuple_name(__isl_take isl_set *set, - const char *s) -{ - return (isl_set *)isl_map_set_tuple_name((isl_map *)set, isl_dim_set, s); -} - -__isl_give isl_map *isl_map_set_tuple_id(__isl_take isl_map *map, - enum isl_dim_type type, __isl_take isl_id *id) -{ - map = isl_map_cow(map); - if (!map) - return isl_id_free(id); - - map->dim = isl_space_set_tuple_id(map->dim, type, id); - - return isl_map_reset_space(map, isl_space_copy(map->dim)); -} - -__isl_give isl_set *isl_set_set_tuple_id(__isl_take isl_set *set, - __isl_take isl_id *id) -{ - return isl_map_set_tuple_id(set, isl_dim_set, id); -} - -__isl_give isl_map *isl_map_reset_tuple_id(__isl_take isl_map *map, - enum isl_dim_type type) -{ - map = isl_map_cow(map); - if (!map) - return NULL; - - map->dim = isl_space_reset_tuple_id(map->dim, type); - - return isl_map_reset_space(map, isl_space_copy(map->dim)); -} - -__isl_give isl_set *isl_set_reset_tuple_id(__isl_take isl_set *set) -{ - return isl_map_reset_tuple_id(set, isl_dim_set); -} - -int isl_map_has_tuple_id(__isl_keep isl_map *map, enum isl_dim_type type) -{ - return map ? isl_space_has_tuple_id(map->dim, type) : -1; -} - -__isl_give isl_id *isl_map_get_tuple_id(__isl_keep isl_map *map, - enum isl_dim_type type) -{ - return map ? isl_space_get_tuple_id(map->dim, type) : NULL; -} - -int isl_set_has_tuple_id(__isl_keep isl_set *set) -{ - return isl_map_has_tuple_id(set, isl_dim_set); -} - -__isl_give isl_id *isl_set_get_tuple_id(__isl_keep isl_set *set) -{ - return isl_map_get_tuple_id(set, isl_dim_set); -} - -const char *isl_basic_set_get_tuple_name(__isl_keep isl_basic_set *bset) -{ - return bset ? isl_space_get_tuple_name(bset->dim, isl_dim_set) : NULL; -} - -const char *isl_set_get_tuple_name(__isl_keep isl_set *set) -{ - return set ? isl_space_get_tuple_name(set->dim, isl_dim_set) : NULL; -} - -const char *isl_basic_map_get_dim_name(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos) -{ - return bmap ? isl_space_get_dim_name(bmap->dim, type, pos) : NULL; -} - -const char *isl_basic_set_get_dim_name(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned pos) -{ - return bset ? isl_space_get_dim_name(bset->dim, type, pos) : NULL; -} - -const char *isl_map_get_dim_name(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos) -{ - return map ? isl_space_get_dim_name(map->dim, type, pos) : NULL; -} - -const char *isl_set_get_dim_name(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos) -{ - return set ? isl_space_get_dim_name(set->dim, type, pos) : NULL; -} - -__isl_give isl_basic_map *isl_basic_map_set_dim_name( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, const char *s) -{ - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - bmap->dim = isl_space_set_dim_name(bmap->dim, type, pos, s); - if (!bmap->dim) - goto error; - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_map *isl_map_set_dim_name(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, const char *s) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - map->dim = isl_space_set_dim_name(map->dim, type, pos, s); - if (!map->dim) - goto error; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_set_dim_name(map->p[i], type, pos, s); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_set_dim_name( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, const char *s) -{ - return (isl_basic_set *)isl_basic_map_set_dim_name( - (isl_basic_map *)bset, type, pos, s); -} - -__isl_give isl_set *isl_set_set_dim_name(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, const char *s) -{ - return (isl_set *)isl_map_set_dim_name((isl_map *)set, type, pos, s); -} - -int isl_basic_map_has_dim_id(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos) -{ - return bmap ? isl_space_has_dim_id(bmap->dim, type, pos) : -1; -} - -int isl_map_has_dim_id(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos) -{ - return map ? isl_space_has_dim_id(map->dim, type, pos) : -1; -} - -__isl_give isl_id *isl_map_get_dim_id(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos) -{ - return map ? isl_space_get_dim_id(map->dim, type, pos) : NULL; -} - -int isl_set_has_dim_id(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos) -{ - return isl_map_has_dim_id(set, type, pos); -} - -__isl_give isl_id *isl_set_get_dim_id(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos) -{ - return isl_map_get_dim_id(set, type, pos); -} - -__isl_give isl_map *isl_map_set_dim_id(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id) -{ - map = isl_map_cow(map); - if (!map) - return isl_id_free(id); - - map->dim = isl_space_set_dim_id(map->dim, type, pos, id); - - return isl_map_reset_space(map, isl_space_copy(map->dim)); -} - -__isl_give isl_set *isl_set_set_dim_id(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id) -{ - return isl_map_set_dim_id(set, type, pos, id); -} - -int isl_map_find_dim_by_id(__isl_keep isl_map *map, enum isl_dim_type type, - __isl_keep isl_id *id) -{ - if (!map) - return -1; - return isl_space_find_dim_by_id(map->dim, type, id); -} - -int isl_set_find_dim_by_id(__isl_keep isl_set *set, enum isl_dim_type type, - __isl_keep isl_id *id) -{ - return isl_map_find_dim_by_id(set, type, id); -} - -int isl_map_find_dim_by_name(__isl_keep isl_map *map, enum isl_dim_type type, - const char *name) -{ - if (!map) - return -1; - return isl_space_find_dim_by_name(map->dim, type, name); -} - -int isl_set_find_dim_by_name(__isl_keep isl_set *set, enum isl_dim_type type, - const char *name) -{ - return isl_map_find_dim_by_name(set, type, name); -} - -int isl_basic_map_is_rational(__isl_keep isl_basic_map *bmap) -{ - if (!bmap) - return -1; - return ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL); -} - -int isl_basic_set_is_rational(__isl_keep isl_basic_set *bset) -{ - return isl_basic_map_is_rational(bset); -} - -/* Is this basic set a parameter domain? - */ -int isl_basic_set_is_params(__isl_keep isl_basic_set *bset) -{ - if (!bset) - return -1; - return isl_space_is_params(bset->dim); -} - -/* Is this set a parameter domain? - */ -int isl_set_is_params(__isl_keep isl_set *set) -{ - if (!set) - return -1; - return isl_space_is_params(set->dim); -} - -/* Is this map actually a parameter domain? - * Users should never call this function. Outside of isl, - * a map can never be a parameter domain. - */ -int isl_map_is_params(__isl_keep isl_map *map) -{ - if (!map) - return -1; - return isl_space_is_params(map->dim); -} - -static struct isl_basic_map *basic_map_init(struct isl_ctx *ctx, - struct isl_basic_map *bmap, unsigned extra, - unsigned n_eq, unsigned n_ineq) -{ - int i; - size_t row_size = 1 + isl_space_dim(bmap->dim, isl_dim_all) + extra; - - bmap->ctx = ctx; - isl_ctx_ref(ctx); - - bmap->block = isl_blk_alloc(ctx, (n_ineq + n_eq) * row_size); - if (isl_blk_is_error(bmap->block)) - goto error; - - bmap->ineq = isl_alloc_array(ctx, isl_int *, n_ineq + n_eq); - if (!bmap->ineq) - goto error; - - if (extra == 0) { - bmap->block2 = isl_blk_empty(); - bmap->div = NULL; - } else { - bmap->block2 = isl_blk_alloc(ctx, extra * (1 + row_size)); - if (isl_blk_is_error(bmap->block2)) - goto error; - - bmap->div = isl_alloc_array(ctx, isl_int *, extra); - if (!bmap->div) - goto error; - } - - for (i = 0; i < n_ineq + n_eq; ++i) - bmap->ineq[i] = bmap->block.data + i * row_size; - - for (i = 0; i < extra; ++i) - bmap->div[i] = bmap->block2.data + i * (1 + row_size); - - bmap->ref = 1; - bmap->flags = 0; - bmap->c_size = n_eq + n_ineq; - bmap->eq = bmap->ineq + n_ineq; - bmap->extra = extra; - bmap->n_eq = 0; - bmap->n_ineq = 0; - bmap->n_div = 0; - bmap->sample = NULL; - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned dim, unsigned extra, - unsigned n_eq, unsigned n_ineq) -{ - struct isl_basic_map *bmap; - isl_space *space; - - space = isl_space_set_alloc(ctx, nparam, dim); - if (!space) - return NULL; - - bmap = isl_basic_map_alloc_space(space, extra, n_eq, n_ineq); - return (struct isl_basic_set *)bmap; -} - -struct isl_basic_set *isl_basic_set_alloc_space(__isl_take isl_space *dim, - unsigned extra, unsigned n_eq, unsigned n_ineq) -{ - struct isl_basic_map *bmap; - if (!dim) - return NULL; - isl_assert(dim->ctx, dim->n_in == 0, goto error); - bmap = isl_basic_map_alloc_space(dim, extra, n_eq, n_ineq); - return (struct isl_basic_set *)bmap; -error: - isl_space_free(dim); - return NULL; -} - -struct isl_basic_map *isl_basic_map_alloc_space(__isl_take isl_space *dim, - unsigned extra, unsigned n_eq, unsigned n_ineq) -{ - struct isl_basic_map *bmap; - - if (!dim) - return NULL; - bmap = isl_calloc_type(dim->ctx, struct isl_basic_map); - if (!bmap) - goto error; - bmap->dim = dim; - - return basic_map_init(dim->ctx, bmap, extra, n_eq, n_ineq); -error: - isl_space_free(dim); - return NULL; -} - -struct isl_basic_map *isl_basic_map_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned in, unsigned out, unsigned extra, - unsigned n_eq, unsigned n_ineq) -{ - struct isl_basic_map *bmap; - isl_space *dim; - - dim = isl_space_alloc(ctx, nparam, in, out); - if (!dim) - return NULL; - - bmap = isl_basic_map_alloc_space(dim, extra, n_eq, n_ineq); - return bmap; -} - -static void dup_constraints( - struct isl_basic_map *dst, struct isl_basic_map *src) -{ - int i; - unsigned total = isl_basic_map_total_dim(src); - - for (i = 0; i < src->n_eq; ++i) { - int j = isl_basic_map_alloc_equality(dst); - isl_seq_cpy(dst->eq[j], src->eq[i], 1+total); - } - - for (i = 0; i < src->n_ineq; ++i) { - int j = isl_basic_map_alloc_inequality(dst); - isl_seq_cpy(dst->ineq[j], src->ineq[i], 1+total); - } - - for (i = 0; i < src->n_div; ++i) { - int j = isl_basic_map_alloc_div(dst); - isl_seq_cpy(dst->div[j], src->div[i], 1+1+total); - } - ISL_F_SET(dst, ISL_BASIC_SET_FINAL); -} - -struct isl_basic_map *isl_basic_map_dup(struct isl_basic_map *bmap) -{ - struct isl_basic_map *dup; - - if (!bmap) - return NULL; - dup = isl_basic_map_alloc_space(isl_space_copy(bmap->dim), - bmap->n_div, bmap->n_eq, bmap->n_ineq); - if (!dup) - return NULL; - dup_constraints(dup, bmap); - dup->flags = bmap->flags; - dup->sample = isl_vec_copy(bmap->sample); - return dup; -} - -struct isl_basic_set *isl_basic_set_dup(struct isl_basic_set *bset) -{ - struct isl_basic_map *dup; - - dup = isl_basic_map_dup((struct isl_basic_map *)bset); - return (struct isl_basic_set *)dup; -} - -struct isl_basic_set *isl_basic_set_copy(struct isl_basic_set *bset) -{ - if (!bset) - return NULL; - - if (ISL_F_ISSET(bset, ISL_BASIC_SET_FINAL)) { - bset->ref++; - return bset; - } - return isl_basic_set_dup(bset); -} - -struct isl_set *isl_set_copy(struct isl_set *set) -{ - if (!set) - return NULL; - - set->ref++; - return set; -} - -struct isl_basic_map *isl_basic_map_copy(struct isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - - if (ISL_F_ISSET(bmap, ISL_BASIC_SET_FINAL)) { - bmap->ref++; - return bmap; - } - bmap = isl_basic_map_dup(bmap); - if (bmap) - ISL_F_SET(bmap, ISL_BASIC_SET_FINAL); - return bmap; -} - -struct isl_map *isl_map_copy(struct isl_map *map) -{ - if (!map) - return NULL; - - map->ref++; - return map; -} - -void isl_basic_map_free(struct isl_basic_map *bmap) -{ - if (!bmap) - return; - - if (--bmap->ref > 0) - return; - - isl_ctx_deref(bmap->ctx); - free(bmap->div); - isl_blk_free(bmap->ctx, bmap->block2); - free(bmap->ineq); - isl_blk_free(bmap->ctx, bmap->block); - isl_vec_free(bmap->sample); - isl_space_free(bmap->dim); - free(bmap); -} - -void isl_basic_set_free(struct isl_basic_set *bset) -{ - isl_basic_map_free((struct isl_basic_map *)bset); -} - -static int room_for_con(struct isl_basic_map *bmap, unsigned n) -{ - return bmap->n_eq + bmap->n_ineq + n <= bmap->c_size; -} - -__isl_give isl_map *isl_map_align_params_map_map_and( - __isl_take isl_map *map1, __isl_take isl_map *map2, - __isl_give isl_map *(*fn)(__isl_take isl_map *map1, - __isl_take isl_map *map2)) -{ - if (!map1 || !map2) - goto error; - if (isl_space_match(map1->dim, isl_dim_param, map2->dim, isl_dim_param)) - return fn(map1, map2); - if (!isl_space_has_named_params(map1->dim) || - !isl_space_has_named_params(map2->dim)) - isl_die(map1->ctx, isl_error_invalid, - "unaligned unnamed parameters", goto error); - map1 = isl_map_align_params(map1, isl_map_get_space(map2)); - map2 = isl_map_align_params(map2, isl_map_get_space(map1)); - return fn(map1, map2); -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -int isl_map_align_params_map_map_and_test(__isl_keep isl_map *map1, - __isl_keep isl_map *map2, - int (*fn)(__isl_keep isl_map *map1, __isl_keep isl_map *map2)) -{ - int r; - - if (!map1 || !map2) - return -1; - if (isl_space_match(map1->dim, isl_dim_param, map2->dim, isl_dim_param)) - return fn(map1, map2); - if (!isl_space_has_named_params(map1->dim) || - !isl_space_has_named_params(map2->dim)) - isl_die(map1->ctx, isl_error_invalid, - "unaligned unnamed parameters", return -1); - map1 = isl_map_copy(map1); - map2 = isl_map_copy(map2); - map1 = isl_map_align_params(map1, isl_map_get_space(map2)); - map2 = isl_map_align_params(map2, isl_map_get_space(map1)); - r = fn(map1, map2); - isl_map_free(map1); - isl_map_free(map2); - return r; -} - -int isl_basic_map_alloc_equality(struct isl_basic_map *bmap) -{ - struct isl_ctx *ctx; - if (!bmap) - return -1; - ctx = bmap->ctx; - isl_assert(ctx, room_for_con(bmap, 1), return -1); - isl_assert(ctx, (bmap->eq - bmap->ineq) + bmap->n_eq <= bmap->c_size, - return -1); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NO_REDUNDANT); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NO_IMPLICIT); - ISL_F_CLR(bmap, ISL_BASIC_MAP_ALL_EQUALITIES); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED_DIVS); - if ((bmap->eq - bmap->ineq) + bmap->n_eq == bmap->c_size) { - isl_int *t; - int j = isl_basic_map_alloc_inequality(bmap); - if (j < 0) - return -1; - t = bmap->ineq[j]; - bmap->ineq[j] = bmap->ineq[bmap->n_ineq - 1]; - bmap->ineq[bmap->n_ineq - 1] = bmap->eq[-1]; - bmap->eq[-1] = t; - bmap->n_eq++; - bmap->n_ineq--; - bmap->eq--; - return 0; - } - isl_seq_clr(bmap->eq[bmap->n_eq] + 1 + isl_basic_map_total_dim(bmap), - bmap->extra - bmap->n_div); - return bmap->n_eq++; -} - -int isl_basic_set_alloc_equality(struct isl_basic_set *bset) -{ - return isl_basic_map_alloc_equality((struct isl_basic_map *)bset); -} - -int isl_basic_map_free_equality(struct isl_basic_map *bmap, unsigned n) -{ - if (!bmap) - return -1; - isl_assert(bmap->ctx, n <= bmap->n_eq, return -1); - bmap->n_eq -= n; - return 0; -} - -int isl_basic_set_free_equality(struct isl_basic_set *bset, unsigned n) -{ - return isl_basic_map_free_equality((struct isl_basic_map *)bset, n); -} - -int isl_basic_map_drop_equality(struct isl_basic_map *bmap, unsigned pos) -{ - isl_int *t; - if (!bmap) - return -1; - isl_assert(bmap->ctx, pos < bmap->n_eq, return -1); - - if (pos != bmap->n_eq - 1) { - t = bmap->eq[pos]; - bmap->eq[pos] = bmap->eq[bmap->n_eq - 1]; - bmap->eq[bmap->n_eq - 1] = t; - } - bmap->n_eq--; - return 0; -} - -int isl_basic_set_drop_equality(struct isl_basic_set *bset, unsigned pos) -{ - return isl_basic_map_drop_equality((struct isl_basic_map *)bset, pos); -} - -void isl_basic_map_inequality_to_equality( - struct isl_basic_map *bmap, unsigned pos) -{ - isl_int *t; - - t = bmap->ineq[pos]; - bmap->ineq[pos] = bmap->ineq[bmap->n_ineq - 1]; - bmap->ineq[bmap->n_ineq - 1] = bmap->eq[-1]; - bmap->eq[-1] = t; - bmap->n_eq++; - bmap->n_ineq--; - bmap->eq--; - ISL_F_CLR(bmap, ISL_BASIC_MAP_NO_REDUNDANT); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED_DIVS); - ISL_F_CLR(bmap, ISL_BASIC_MAP_ALL_EQUALITIES); -} - -static int room_for_ineq(struct isl_basic_map *bmap, unsigned n) -{ - return bmap->n_ineq + n <= bmap->eq - bmap->ineq; -} - -int isl_basic_map_alloc_inequality(struct isl_basic_map *bmap) -{ - struct isl_ctx *ctx; - if (!bmap) - return -1; - ctx = bmap->ctx; - isl_assert(ctx, room_for_ineq(bmap, 1), return -1); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NO_IMPLICIT); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NO_REDUNDANT); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - ISL_F_CLR(bmap, ISL_BASIC_MAP_ALL_EQUALITIES); - isl_seq_clr(bmap->ineq[bmap->n_ineq] + - 1 + isl_basic_map_total_dim(bmap), - bmap->extra - bmap->n_div); - return bmap->n_ineq++; -} - -int isl_basic_set_alloc_inequality(struct isl_basic_set *bset) -{ - return isl_basic_map_alloc_inequality((struct isl_basic_map *)bset); -} - -int isl_basic_map_free_inequality(struct isl_basic_map *bmap, unsigned n) -{ - if (!bmap) - return -1; - isl_assert(bmap->ctx, n <= bmap->n_ineq, return -1); - bmap->n_ineq -= n; - return 0; -} - -int isl_basic_set_free_inequality(struct isl_basic_set *bset, unsigned n) -{ - return isl_basic_map_free_inequality((struct isl_basic_map *)bset, n); -} - -int isl_basic_map_drop_inequality(struct isl_basic_map *bmap, unsigned pos) -{ - isl_int *t; - if (!bmap) - return -1; - isl_assert(bmap->ctx, pos < bmap->n_ineq, return -1); - - if (pos != bmap->n_ineq - 1) { - t = bmap->ineq[pos]; - bmap->ineq[pos] = bmap->ineq[bmap->n_ineq - 1]; - bmap->ineq[bmap->n_ineq - 1] = t; - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - } - bmap->n_ineq--; - return 0; -} - -int isl_basic_set_drop_inequality(struct isl_basic_set *bset, unsigned pos) -{ - return isl_basic_map_drop_inequality((struct isl_basic_map *)bset, pos); -} - -__isl_give isl_basic_map *isl_basic_map_add_eq(__isl_take isl_basic_map *bmap, - isl_int *eq) -{ - int k; - - bmap = isl_basic_map_extend_constraints(bmap, 1, 0); - if (!bmap) - return NULL; - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->eq[k], eq, 1 + isl_basic_map_total_dim(bmap)); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_add_eq(__isl_take isl_basic_set *bset, - isl_int *eq) -{ - return (isl_basic_set *) - isl_basic_map_add_eq((isl_basic_map *)bset, eq); -} - -__isl_give isl_basic_map *isl_basic_map_add_ineq(__isl_take isl_basic_map *bmap, - isl_int *ineq) -{ - int k; - - bmap = isl_basic_map_extend_constraints(bmap, 0, 1); - if (!bmap) - return NULL; - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->ineq[k], ineq, 1 + isl_basic_map_total_dim(bmap)); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_add_ineq(__isl_take isl_basic_set *bset, - isl_int *ineq) -{ - return (isl_basic_set *) - isl_basic_map_add_ineq((isl_basic_map *)bset, ineq); -} - -int isl_basic_map_alloc_div(struct isl_basic_map *bmap) -{ - if (!bmap) - return -1; - isl_assert(bmap->ctx, bmap->n_div < bmap->extra, return -1); - isl_seq_clr(bmap->div[bmap->n_div] + - 1 + 1 + isl_basic_map_total_dim(bmap), - bmap->extra - bmap->n_div); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED_DIVS); - return bmap->n_div++; -} - -int isl_basic_set_alloc_div(struct isl_basic_set *bset) -{ - return isl_basic_map_alloc_div((struct isl_basic_map *)bset); -} - -int isl_basic_map_free_div(struct isl_basic_map *bmap, unsigned n) -{ - if (!bmap) - return -1; - isl_assert(bmap->ctx, n <= bmap->n_div, return -1); - bmap->n_div -= n; - return 0; -} - -int isl_basic_set_free_div(struct isl_basic_set *bset, unsigned n) -{ - return isl_basic_map_free_div((struct isl_basic_map *)bset, n); -} - -/* Copy constraint from src to dst, putting the vars of src at offset - * dim_off in dst and the divs of src at offset div_off in dst. - * If both sets are actually map, then dim_off applies to the input - * variables. - */ -static void copy_constraint(struct isl_basic_map *dst_map, isl_int *dst, - struct isl_basic_map *src_map, isl_int *src, - unsigned in_off, unsigned out_off, unsigned div_off) -{ - unsigned src_nparam = isl_basic_map_n_param(src_map); - unsigned dst_nparam = isl_basic_map_n_param(dst_map); - unsigned src_in = isl_basic_map_n_in(src_map); - unsigned dst_in = isl_basic_map_n_in(dst_map); - unsigned src_out = isl_basic_map_n_out(src_map); - unsigned dst_out = isl_basic_map_n_out(dst_map); - isl_int_set(dst[0], src[0]); - isl_seq_cpy(dst+1, src+1, isl_min(dst_nparam, src_nparam)); - if (dst_nparam > src_nparam) - isl_seq_clr(dst+1+src_nparam, - dst_nparam - src_nparam); - isl_seq_clr(dst+1+dst_nparam, in_off); - isl_seq_cpy(dst+1+dst_nparam+in_off, - src+1+src_nparam, - isl_min(dst_in-in_off, src_in)); - if (dst_in-in_off > src_in) - isl_seq_clr(dst+1+dst_nparam+in_off+src_in, - dst_in - in_off - src_in); - isl_seq_clr(dst+1+dst_nparam+dst_in, out_off); - isl_seq_cpy(dst+1+dst_nparam+dst_in+out_off, - src+1+src_nparam+src_in, - isl_min(dst_out-out_off, src_out)); - if (dst_out-out_off > src_out) - isl_seq_clr(dst+1+dst_nparam+dst_in+out_off+src_out, - dst_out - out_off - src_out); - isl_seq_clr(dst+1+dst_nparam+dst_in+dst_out, div_off); - isl_seq_cpy(dst+1+dst_nparam+dst_in+dst_out+div_off, - src+1+src_nparam+src_in+src_out, - isl_min(dst_map->extra-div_off, src_map->n_div)); - if (dst_map->n_div-div_off > src_map->n_div) - isl_seq_clr(dst+1+dst_nparam+dst_in+dst_out+ - div_off+src_map->n_div, - dst_map->n_div - div_off - src_map->n_div); -} - -static void copy_div(struct isl_basic_map *dst_map, isl_int *dst, - struct isl_basic_map *src_map, isl_int *src, - unsigned in_off, unsigned out_off, unsigned div_off) -{ - isl_int_set(dst[0], src[0]); - copy_constraint(dst_map, dst+1, src_map, src+1, in_off, out_off, div_off); -} - -static struct isl_basic_map *add_constraints(struct isl_basic_map *bmap1, - struct isl_basic_map *bmap2, unsigned i_pos, unsigned o_pos) -{ - int i; - unsigned div_off; - - if (!bmap1 || !bmap2) - goto error; - - div_off = bmap1->n_div; - - for (i = 0; i < bmap2->n_eq; ++i) { - int i1 = isl_basic_map_alloc_equality(bmap1); - if (i1 < 0) - goto error; - copy_constraint(bmap1, bmap1->eq[i1], bmap2, bmap2->eq[i], - i_pos, o_pos, div_off); - } - - for (i = 0; i < bmap2->n_ineq; ++i) { - int i1 = isl_basic_map_alloc_inequality(bmap1); - if (i1 < 0) - goto error; - copy_constraint(bmap1, bmap1->ineq[i1], bmap2, bmap2->ineq[i], - i_pos, o_pos, div_off); - } - - for (i = 0; i < bmap2->n_div; ++i) { - int i1 = isl_basic_map_alloc_div(bmap1); - if (i1 < 0) - goto error; - copy_div(bmap1, bmap1->div[i1], bmap2, bmap2->div[i], - i_pos, o_pos, div_off); - } - - isl_basic_map_free(bmap2); - - return bmap1; - -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -struct isl_basic_set *isl_basic_set_add_constraints(struct isl_basic_set *bset1, - struct isl_basic_set *bset2, unsigned pos) -{ - return (struct isl_basic_set *) - add_constraints((struct isl_basic_map *)bset1, - (struct isl_basic_map *)bset2, 0, pos); -} - -struct isl_basic_map *isl_basic_map_extend_space(struct isl_basic_map *base, - __isl_take isl_space *dim, unsigned extra, - unsigned n_eq, unsigned n_ineq) -{ - struct isl_basic_map *ext; - unsigned flags; - int dims_ok; - - if (!dim) - goto error; - - if (!base) - goto error; - - dims_ok = isl_space_is_equal(base->dim, dim) && - base->extra >= base->n_div + extra; - - if (dims_ok && room_for_con(base, n_eq + n_ineq) && - room_for_ineq(base, n_ineq)) { - isl_space_free(dim); - return base; - } - - isl_assert(base->ctx, base->dim->nparam <= dim->nparam, goto error); - isl_assert(base->ctx, base->dim->n_in <= dim->n_in, goto error); - isl_assert(base->ctx, base->dim->n_out <= dim->n_out, goto error); - extra += base->extra; - n_eq += base->n_eq; - n_ineq += base->n_ineq; - - ext = isl_basic_map_alloc_space(dim, extra, n_eq, n_ineq); - dim = NULL; - if (!ext) - goto error; - - if (dims_ok) - ext->sample = isl_vec_copy(base->sample); - flags = base->flags; - ext = add_constraints(ext, base, 0, 0); - if (ext) { - ext->flags = flags; - ISL_F_CLR(ext, ISL_BASIC_SET_FINAL); - } - - return ext; - -error: - isl_space_free(dim); - isl_basic_map_free(base); - return NULL; -} - -struct isl_basic_set *isl_basic_set_extend_space(struct isl_basic_set *base, - __isl_take isl_space *dim, unsigned extra, - unsigned n_eq, unsigned n_ineq) -{ - return (struct isl_basic_set *) - isl_basic_map_extend_space((struct isl_basic_map *)base, dim, - extra, n_eq, n_ineq); -} - -struct isl_basic_map *isl_basic_map_extend_constraints( - struct isl_basic_map *base, unsigned n_eq, unsigned n_ineq) -{ - if (!base) - return NULL; - return isl_basic_map_extend_space(base, isl_space_copy(base->dim), - 0, n_eq, n_ineq); -} - -struct isl_basic_map *isl_basic_map_extend(struct isl_basic_map *base, - unsigned nparam, unsigned n_in, unsigned n_out, unsigned extra, - unsigned n_eq, unsigned n_ineq) -{ - struct isl_basic_map *bmap; - isl_space *dim; - - if (!base) - return NULL; - dim = isl_space_alloc(base->ctx, nparam, n_in, n_out); - if (!dim) - goto error; - - bmap = isl_basic_map_extend_space(base, dim, extra, n_eq, n_ineq); - return bmap; -error: - isl_basic_map_free(base); - return NULL; -} - -struct isl_basic_set *isl_basic_set_extend(struct isl_basic_set *base, - unsigned nparam, unsigned dim, unsigned extra, - unsigned n_eq, unsigned n_ineq) -{ - return (struct isl_basic_set *) - isl_basic_map_extend((struct isl_basic_map *)base, - nparam, 0, dim, extra, n_eq, n_ineq); -} - -struct isl_basic_set *isl_basic_set_extend_constraints( - struct isl_basic_set *base, unsigned n_eq, unsigned n_ineq) -{ - return (struct isl_basic_set *) - isl_basic_map_extend_constraints((struct isl_basic_map *)base, - n_eq, n_ineq); -} - -struct isl_basic_set *isl_basic_set_cow(struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_cow((struct isl_basic_map *)bset); -} - -struct isl_basic_map *isl_basic_map_cow(struct isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - - if (bmap->ref > 1) { - bmap->ref--; - bmap = isl_basic_map_dup(bmap); - } - if (bmap) - ISL_F_CLR(bmap, ISL_BASIC_SET_FINAL); - return bmap; -} - -struct isl_set *isl_set_cow(struct isl_set *set) -{ - if (!set) - return NULL; - - if (set->ref == 1) - return set; - set->ref--; - return isl_set_dup(set); -} - -struct isl_map *isl_map_cow(struct isl_map *map) -{ - if (!map) - return NULL; - - if (map->ref == 1) - return map; - map->ref--; - return isl_map_dup(map); -} - -static void swap_vars(struct isl_blk blk, isl_int *a, - unsigned a_len, unsigned b_len) -{ - isl_seq_cpy(blk.data, a+a_len, b_len); - isl_seq_cpy(blk.data+b_len, a, a_len); - isl_seq_cpy(a, blk.data, b_len+a_len); -} - -static __isl_give isl_basic_map *isl_basic_map_swap_vars( - __isl_take isl_basic_map *bmap, unsigned pos, unsigned n1, unsigned n2) -{ - int i; - struct isl_blk blk; - - if (!bmap) - goto error; - - isl_assert(bmap->ctx, - pos + n1 + n2 <= 1 + isl_basic_map_total_dim(bmap), goto error); - - if (n1 == 0 || n2 == 0) - return bmap; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - blk = isl_blk_alloc(bmap->ctx, n1 + n2); - if (isl_blk_is_error(blk)) - goto error; - - for (i = 0; i < bmap->n_eq; ++i) - swap_vars(blk, - bmap->eq[i] + pos, n1, n2); - - for (i = 0; i < bmap->n_ineq; ++i) - swap_vars(blk, - bmap->ineq[i] + pos, n1, n2); - - for (i = 0; i < bmap->n_div; ++i) - swap_vars(blk, - bmap->div[i]+1 + pos, n1, n2); - - isl_blk_free(bmap->ctx, blk); - - ISL_F_CLR(bmap, ISL_BASIC_SET_NORMALIZED); - bmap = isl_basic_map_gauss(bmap, NULL); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -static __isl_give isl_basic_set *isl_basic_set_swap_vars( - __isl_take isl_basic_set *bset, unsigned n) -{ - unsigned dim; - unsigned nparam; - - nparam = isl_basic_set_n_param(bset); - dim = isl_basic_set_n_dim(bset); - isl_assert(bset->ctx, n <= dim, goto error); - - return isl_basic_map_swap_vars(bset, 1 + nparam, n, dim - n); -error: - isl_basic_set_free(bset); - return NULL; -} - -struct isl_basic_map *isl_basic_map_set_to_empty(struct isl_basic_map *bmap) -{ - int i = 0; - unsigned total; - if (!bmap) - goto error; - total = isl_basic_map_total_dim(bmap); - isl_basic_map_free_div(bmap, bmap->n_div); - isl_basic_map_free_inequality(bmap, bmap->n_ineq); - if (bmap->n_eq > 0) - isl_basic_map_free_equality(bmap, bmap->n_eq-1); - else { - i = isl_basic_map_alloc_equality(bmap); - if (i < 0) - goto error; - } - isl_int_set_si(bmap->eq[i][0], 1); - isl_seq_clr(bmap->eq[i]+1, total); - ISL_F_SET(bmap, ISL_BASIC_MAP_EMPTY); - isl_vec_free(bmap->sample); - bmap->sample = NULL; - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_set_to_empty(struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_set_to_empty((struct isl_basic_map *)bset); -} - -void isl_basic_map_swap_div(struct isl_basic_map *bmap, int a, int b) -{ - int i; - unsigned off = isl_space_dim(bmap->dim, isl_dim_all); - isl_int *t = bmap->div[a]; - bmap->div[a] = bmap->div[b]; - bmap->div[b] = t; - - for (i = 0; i < bmap->n_eq; ++i) - isl_int_swap(bmap->eq[i][1+off+a], bmap->eq[i][1+off+b]); - - for (i = 0; i < bmap->n_ineq; ++i) - isl_int_swap(bmap->ineq[i][1+off+a], bmap->ineq[i][1+off+b]); - - for (i = 0; i < bmap->n_div; ++i) - isl_int_swap(bmap->div[i][1+1+off+a], bmap->div[i][1+1+off+b]); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); -} - -/* Eliminate the specified n dimensions starting at first from the - * constraints using Fourier-Motzkin. The dimensions themselves - * are not removed. - */ -__isl_give isl_map *isl_map_eliminate(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!map) - return NULL; - if (n == 0) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_eliminate(map->p[i], type, first, n); - if (!map->p[i]) - goto error; - } - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Eliminate the specified n dimensions starting at first from the - * constraints using Fourier-Motzkin. The dimensions themselves - * are not removed. - */ -__isl_give isl_set *isl_set_eliminate(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_set *)isl_map_eliminate((isl_map *)set, type, first, n); -} - -/* Eliminate the specified n dimensions starting at first from the - * constraints using Fourier-Motzkin. The dimensions themselves - * are not removed. - */ -__isl_give isl_set *isl_set_eliminate_dims(__isl_take isl_set *set, - unsigned first, unsigned n) -{ - return isl_set_eliminate(set, isl_dim_set, first, n); -} - -__isl_give isl_basic_map *isl_basic_map_remove_divs( - __isl_take isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - bmap = isl_basic_map_eliminate_vars(bmap, - isl_space_dim(bmap->dim, isl_dim_all), bmap->n_div); - if (!bmap) - return NULL; - bmap->n_div = 0; - return isl_basic_map_finalize(bmap); -} - -__isl_give isl_basic_set *isl_basic_set_remove_divs( - __isl_take isl_basic_set *bset) -{ - return (struct isl_basic_set *)isl_basic_map_remove_divs( - (struct isl_basic_map *)bset); -} - -__isl_give isl_map *isl_map_remove_divs(__isl_take isl_map *map) -{ - int i; - - if (!map) - return NULL; - if (map->n == 0) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_remove_divs(map->p[i]); - if (!map->p[i]) - goto error; - } - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_remove_divs(__isl_take isl_set *set) -{ - return isl_map_remove_divs(set); -} - -struct isl_basic_map *isl_basic_map_remove_dims(struct isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n) -{ - if (!bmap) - return NULL; - isl_assert(bmap->ctx, first + n <= isl_basic_map_dim(bmap, type), - goto error); - if (n == 0 && !isl_space_is_named_or_nested(bmap->dim, type)) - return bmap; - bmap = isl_basic_map_eliminate_vars(bmap, - isl_basic_map_offset(bmap, type) - 1 + first, n); - if (!bmap) - return bmap; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY) && type == isl_dim_div) - return bmap; - bmap = isl_basic_map_drop(bmap, type, first, n); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Return true if the definition of the given div (recursively) involves - * any of the given variables. - */ -static int div_involves_vars(__isl_keep isl_basic_map *bmap, int div, - unsigned first, unsigned n) -{ - int i; - unsigned div_offset = isl_basic_map_offset(bmap, isl_dim_div); - - if (isl_int_is_zero(bmap->div[div][0])) - return 0; - if (isl_seq_first_non_zero(bmap->div[div] + 1 + first, n) >= 0) - return 1; - - for (i = bmap->n_div - 1; i >= 0; --i) { - if (isl_int_is_zero(bmap->div[div][1 + div_offset + i])) - continue; - if (div_involves_vars(bmap, i, first, n)) - return 1; - } - - return 0; -} - -/* Remove all divs (recursively) involving any of the given dimensions - * in their definitions. - */ -__isl_give isl_basic_map *isl_basic_map_remove_divs_involving_dims( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!bmap) - return NULL; - isl_assert(bmap->ctx, first + n <= isl_basic_map_dim(bmap, type), - goto error); - first += isl_basic_map_offset(bmap, type); - - for (i = bmap->n_div - 1; i >= 0; --i) { - if (!div_involves_vars(bmap, i, first, n)) - continue; - bmap = isl_basic_map_remove_dims(bmap, isl_dim_div, i, 1); - if (!bmap) - return NULL; - i = bmap->n_div; - } - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_map *isl_map_remove_divs_involving_dims(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!map) - return NULL; - if (map->n == 0) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_remove_divs_involving_dims(map->p[i], - type, first, n); - if (!map->p[i]) - goto error; - } - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_remove_divs_involving_dims(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_set *)isl_map_remove_divs_involving_dims((isl_map *)set, - type, first, n); -} - -/* Does the desciption of "bmap" depend on the specified dimensions? - * We also check whether the dimensions appear in any of the div definitions. - * In principle there is no need for this check. If the dimensions appear - * in a div definition, they also appear in the defining constraints of that - * div. - */ -int isl_basic_map_involves_dims(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!bmap) - return -1; - - if (first + n > isl_basic_map_dim(bmap, type)) - isl_die(bmap->ctx, isl_error_invalid, - "index out of bounds", return -1); - - first += isl_basic_map_offset(bmap, type); - for (i = 0; i < bmap->n_eq; ++i) - if (isl_seq_first_non_zero(bmap->eq[i] + first, n) >= 0) - return 1; - for (i = 0; i < bmap->n_ineq; ++i) - if (isl_seq_first_non_zero(bmap->ineq[i] + first, n) >= 0) - return 1; - for (i = 0; i < bmap->n_div; ++i) { - if (isl_int_is_zero(bmap->div[i][0])) - continue; - if (isl_seq_first_non_zero(bmap->div[i] + 1 + first, n) >= 0) - return 1; - } - - return 0; -} - -int isl_map_involves_dims(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!map) - return -1; - - if (first + n > isl_map_dim(map, type)) - isl_die(map->ctx, isl_error_invalid, - "index out of bounds", return -1); - - for (i = 0; i < map->n; ++i) { - int involves = isl_basic_map_involves_dims(map->p[i], - type, first, n); - if (involves < 0 || involves) - return involves; - } - - return 0; -} - -int isl_basic_set_involves_dims(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return isl_basic_map_involves_dims(bset, type, first, n); -} - -int isl_set_involves_dims(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return isl_map_involves_dims(set, type, first, n); -} - -/* Return true if the definition of the given div is unknown or depends - * on unknown divs. - */ -static int div_is_unknown(__isl_keep isl_basic_map *bmap, int div) -{ - int i; - unsigned div_offset = isl_basic_map_offset(bmap, isl_dim_div); - - if (isl_int_is_zero(bmap->div[div][0])) - return 1; - - for (i = bmap->n_div - 1; i >= 0; --i) { - if (isl_int_is_zero(bmap->div[div][1 + div_offset + i])) - continue; - if (div_is_unknown(bmap, i)) - return 1; - } - - return 0; -} - -/* Remove all divs that are unknown or defined in terms of unknown divs. - */ -__isl_give isl_basic_map *isl_basic_map_remove_unknown_divs( - __isl_take isl_basic_map *bmap) -{ - int i; - - if (!bmap) - return NULL; - - for (i = bmap->n_div - 1; i >= 0; --i) { - if (!div_is_unknown(bmap, i)) - continue; - bmap = isl_basic_map_remove_dims(bmap, isl_dim_div, i, 1); - } - - return bmap; -} - -__isl_give isl_map *isl_map_remove_unknown_divs(__isl_take isl_map *map) -{ - int i; - - if (!map) - return NULL; - if (map->n == 0) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_remove_unknown_divs(map->p[i]); - if (!map->p[i]) - goto error; - } - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_remove_unknown_divs(__isl_take isl_set *set) -{ - return (isl_set *)isl_map_remove_unknown_divs((isl_map *)set); -} - -__isl_give isl_basic_set *isl_basic_set_remove_dims( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_basic_set *) - isl_basic_map_remove_dims((isl_basic_map *)bset, type, first, n); -} - -struct isl_map *isl_map_remove_dims(struct isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (n == 0) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - isl_assert(map->ctx, first + n <= isl_map_dim(map, type), goto error); - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_eliminate_vars(map->p[i], - isl_basic_map_offset(map->p[i], type) - 1 + first, n); - if (!map->p[i]) - goto error; - } - map = isl_map_drop(map, type, first, n); - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_remove_dims(__isl_take isl_set *bset, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_set *)isl_map_remove_dims((isl_map *)bset, type, first, n); -} - -/* Project out n inputs starting at first using Fourier-Motzkin */ -struct isl_map *isl_map_remove_inputs(struct isl_map *map, - unsigned first, unsigned n) -{ - return isl_map_remove_dims(map, isl_dim_in, first, n); -} - -static void dump_term(struct isl_basic_map *bmap, - isl_int c, int pos, FILE *out) -{ - const char *name; - unsigned in = isl_basic_map_n_in(bmap); - unsigned dim = in + isl_basic_map_n_out(bmap); - unsigned nparam = isl_basic_map_n_param(bmap); - if (!pos) - isl_int_print(out, c, 0); - else { - if (!isl_int_is_one(c)) - isl_int_print(out, c, 0); - if (pos < 1 + nparam) { - name = isl_space_get_dim_name(bmap->dim, - isl_dim_param, pos - 1); - if (name) - fprintf(out, "%s", name); - else - fprintf(out, "p%d", pos - 1); - } else if (pos < 1 + nparam + in) - fprintf(out, "i%d", pos - 1 - nparam); - else if (pos < 1 + nparam + dim) - fprintf(out, "o%d", pos - 1 - nparam - in); - else - fprintf(out, "e%d", pos - 1 - nparam - dim); - } -} - -static void dump_constraint_sign(struct isl_basic_map *bmap, isl_int *c, - int sign, FILE *out) -{ - int i; - int first; - unsigned len = 1 + isl_basic_map_total_dim(bmap); - isl_int v; - - isl_int_init(v); - for (i = 0, first = 1; i < len; ++i) { - if (isl_int_sgn(c[i]) * sign <= 0) - continue; - if (!first) - fprintf(out, " + "); - first = 0; - isl_int_abs(v, c[i]); - dump_term(bmap, v, i, out); - } - isl_int_clear(v); - if (first) - fprintf(out, "0"); -} - -static void dump_constraint(struct isl_basic_map *bmap, isl_int *c, - const char *op, FILE *out, int indent) -{ - int i; - - fprintf(out, "%*s", indent, ""); - - dump_constraint_sign(bmap, c, 1, out); - fprintf(out, " %s ", op); - dump_constraint_sign(bmap, c, -1, out); - - fprintf(out, "\n"); - - for (i = bmap->n_div; i < bmap->extra; ++i) { - if (isl_int_is_zero(c[1+isl_space_dim(bmap->dim, isl_dim_all)+i])) - continue; - fprintf(out, "%*s", indent, ""); - fprintf(out, "ERROR: unused div coefficient not zero\n"); - abort(); - } -} - -static void dump_constraints(struct isl_basic_map *bmap, - isl_int **c, unsigned n, - const char *op, FILE *out, int indent) -{ - int i; - - for (i = 0; i < n; ++i) - dump_constraint(bmap, c[i], op, out, indent); -} - -static void dump_affine(struct isl_basic_map *bmap, isl_int *exp, FILE *out) -{ - int j; - int first = 1; - unsigned total = isl_basic_map_total_dim(bmap); - - for (j = 0; j < 1 + total; ++j) { - if (isl_int_is_zero(exp[j])) - continue; - if (!first && isl_int_is_pos(exp[j])) - fprintf(out, "+"); - dump_term(bmap, exp[j], j, out); - first = 0; - } -} - -static void dump(struct isl_basic_map *bmap, FILE *out, int indent) -{ - int i; - - dump_constraints(bmap, bmap->eq, bmap->n_eq, "=", out, indent); - dump_constraints(bmap, bmap->ineq, bmap->n_ineq, ">=", out, indent); - - for (i = 0; i < bmap->n_div; ++i) { - fprintf(out, "%*s", indent, ""); - fprintf(out, "e%d = [(", i); - dump_affine(bmap, bmap->div[i]+1, out); - fprintf(out, ")/"); - isl_int_print(out, bmap->div[i][0], 0); - fprintf(out, "]\n"); - } -} - -void isl_basic_set_print_internal(struct isl_basic_set *bset, - FILE *out, int indent) -{ - if (!bset) { - fprintf(out, "null basic set\n"); - return; - } - - fprintf(out, "%*s", indent, ""); - fprintf(out, "ref: %d, nparam: %d, dim: %d, extra: %d, flags: %x\n", - bset->ref, bset->dim->nparam, bset->dim->n_out, - bset->extra, bset->flags); - dump((struct isl_basic_map *)bset, out, indent); -} - -void isl_basic_map_print_internal(struct isl_basic_map *bmap, - FILE *out, int indent) -{ - if (!bmap) { - fprintf(out, "null basic map\n"); - return; - } - - fprintf(out, "%*s", indent, ""); - fprintf(out, "ref: %d, nparam: %d, in: %d, out: %d, extra: %d, " - "flags: %x, n_name: %d\n", - bmap->ref, - bmap->dim->nparam, bmap->dim->n_in, bmap->dim->n_out, - bmap->extra, bmap->flags, bmap->dim->n_id); - dump(bmap, out, indent); -} - -int isl_inequality_negate(struct isl_basic_map *bmap, unsigned pos) -{ - unsigned total; - if (!bmap) - return -1; - total = isl_basic_map_total_dim(bmap); - isl_assert(bmap->ctx, pos < bmap->n_ineq, return -1); - isl_seq_neg(bmap->ineq[pos], bmap->ineq[pos], 1 + total); - isl_int_sub_ui(bmap->ineq[pos][0], bmap->ineq[pos][0], 1); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - return 0; -} - -__isl_give isl_set *isl_set_alloc_space(__isl_take isl_space *dim, int n, - unsigned flags) -{ - struct isl_set *set; - - if (!dim) - return NULL; - isl_assert(dim->ctx, dim->n_in == 0, goto error); - isl_assert(dim->ctx, n >= 0, goto error); - set = isl_alloc(dim->ctx, struct isl_set, - sizeof(struct isl_set) + - (n - 1) * sizeof(struct isl_basic_set *)); - if (!set) - goto error; - - set->ctx = dim->ctx; - isl_ctx_ref(set->ctx); - set->ref = 1; - set->size = n; - set->n = 0; - set->dim = dim; - set->flags = flags; - return set; -error: - isl_space_free(dim); - return NULL; -} - -struct isl_set *isl_set_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned dim, int n, unsigned flags) -{ - struct isl_set *set; - isl_space *dims; - - dims = isl_space_alloc(ctx, nparam, 0, dim); - if (!dims) - return NULL; - - set = isl_set_alloc_space(dims, n, flags); - return set; -} - -/* Make sure "map" has room for at least "n" more basic maps. - */ -struct isl_map *isl_map_grow(struct isl_map *map, int n) -{ - int i; - struct isl_map *grown = NULL; - - if (!map) - return NULL; - isl_assert(map->ctx, n >= 0, goto error); - if (map->n + n <= map->size) - return map; - grown = isl_map_alloc_space(isl_map_get_space(map), map->n + n, map->flags); - if (!grown) - goto error; - for (i = 0; i < map->n; ++i) { - grown->p[i] = isl_basic_map_copy(map->p[i]); - if (!grown->p[i]) - goto error; - grown->n++; - } - isl_map_free(map); - return grown; -error: - isl_map_free(grown); - isl_map_free(map); - return NULL; -} - -/* Make sure "set" has room for at least "n" more basic sets. - */ -struct isl_set *isl_set_grow(struct isl_set *set, int n) -{ - return (struct isl_set *)isl_map_grow((struct isl_map *)set, n); -} - -struct isl_set *isl_set_dup(struct isl_set *set) -{ - int i; - struct isl_set *dup; - - if (!set) - return NULL; - - dup = isl_set_alloc_space(isl_space_copy(set->dim), set->n, set->flags); - if (!dup) - return NULL; - for (i = 0; i < set->n; ++i) - dup = isl_set_add_basic_set(dup, isl_basic_set_copy(set->p[i])); - return dup; -} - -struct isl_set *isl_set_from_basic_set(struct isl_basic_set *bset) -{ - return isl_map_from_basic_map(bset); -} - -struct isl_map *isl_map_from_basic_map(struct isl_basic_map *bmap) -{ - struct isl_map *map; - - if (!bmap) - return NULL; - - map = isl_map_alloc_space(isl_space_copy(bmap->dim), 1, ISL_MAP_DISJOINT); - return isl_map_add_basic_map(map, bmap); -} - -__isl_give isl_set *isl_set_add_basic_set(__isl_take isl_set *set, - __isl_take isl_basic_set *bset) -{ - return (struct isl_set *)isl_map_add_basic_map((struct isl_map *)set, - (struct isl_basic_map *)bset); -} - -void isl_set_free(struct isl_set *set) -{ - int i; - - if (!set) - return; - - if (--set->ref > 0) - return; - - isl_ctx_deref(set->ctx); - for (i = 0; i < set->n; ++i) - isl_basic_set_free(set->p[i]); - isl_space_free(set->dim); - free(set); -} - -void isl_set_print_internal(struct isl_set *set, FILE *out, int indent) -{ - int i; - - if (!set) { - fprintf(out, "null set\n"); - return; - } - - fprintf(out, "%*s", indent, ""); - fprintf(out, "ref: %d, n: %d, nparam: %d, dim: %d, flags: %x\n", - set->ref, set->n, set->dim->nparam, set->dim->n_out, - set->flags); - for (i = 0; i < set->n; ++i) { - fprintf(out, "%*s", indent, ""); - fprintf(out, "basic set %d:\n", i); - isl_basic_set_print_internal(set->p[i], out, indent+4); - } -} - -void isl_map_print_internal(struct isl_map *map, FILE *out, int indent) -{ - int i; - - if (!map) { - fprintf(out, "null map\n"); - return; - } - - fprintf(out, "%*s", indent, ""); - fprintf(out, "ref: %d, n: %d, nparam: %d, in: %d, out: %d, " - "flags: %x, n_name: %d\n", - map->ref, map->n, map->dim->nparam, map->dim->n_in, - map->dim->n_out, map->flags, map->dim->n_id); - for (i = 0; i < map->n; ++i) { - fprintf(out, "%*s", indent, ""); - fprintf(out, "basic map %d:\n", i); - isl_basic_map_print_internal(map->p[i], out, indent+4); - } -} - -struct isl_basic_map *isl_basic_map_intersect_domain( - struct isl_basic_map *bmap, struct isl_basic_set *bset) -{ - struct isl_basic_map *bmap_domain; - - if (!bmap || !bset) - goto error; - - isl_assert(bset->ctx, isl_space_match(bmap->dim, isl_dim_param, - bset->dim, isl_dim_param), goto error); - - if (isl_space_dim(bset->dim, isl_dim_set) != 0) - isl_assert(bset->ctx, - isl_basic_map_compatible_domain(bmap, bset), goto error); - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - goto error; - bmap = isl_basic_map_extend_space(bmap, isl_space_copy(bmap->dim), - bset->n_div, bset->n_eq, bset->n_ineq); - bmap_domain = isl_basic_map_from_domain(bset); - bmap = add_constraints(bmap, bmap_domain, 0, 0); - - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - isl_basic_set_free(bset); - return NULL; -} - -struct isl_basic_map *isl_basic_map_intersect_range( - struct isl_basic_map *bmap, struct isl_basic_set *bset) -{ - struct isl_basic_map *bmap_range; - - if (!bmap || !bset) - goto error; - - isl_assert(bset->ctx, isl_space_match(bmap->dim, isl_dim_param, - bset->dim, isl_dim_param), goto error); - - if (isl_space_dim(bset->dim, isl_dim_set) != 0) - isl_assert(bset->ctx, - isl_basic_map_compatible_range(bmap, bset), goto error); - - if (isl_basic_set_is_universe(bset)) { - isl_basic_set_free(bset); - return bmap; - } - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - goto error; - bmap = isl_basic_map_extend_space(bmap, isl_space_copy(bmap->dim), - bset->n_div, bset->n_eq, bset->n_ineq); - bmap_range = isl_basic_map_from_basic_set(bset, isl_space_copy(bset->dim)); - bmap = add_constraints(bmap, bmap_range, 0, 0); - - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - isl_basic_set_free(bset); - return NULL; -} - -int isl_basic_map_contains(struct isl_basic_map *bmap, struct isl_vec *vec) -{ - int i; - unsigned total; - isl_int s; - - total = 1 + isl_basic_map_total_dim(bmap); - if (total != vec->size) - return -1; - - isl_int_init(s); - - for (i = 0; i < bmap->n_eq; ++i) { - isl_seq_inner_product(vec->el, bmap->eq[i], total, &s); - if (!isl_int_is_zero(s)) { - isl_int_clear(s); - return 0; - } - } - - for (i = 0; i < bmap->n_ineq; ++i) { - isl_seq_inner_product(vec->el, bmap->ineq[i], total, &s); - if (isl_int_is_neg(s)) { - isl_int_clear(s); - return 0; - } - } - - isl_int_clear(s); - - return 1; -} - -int isl_basic_set_contains(struct isl_basic_set *bset, struct isl_vec *vec) -{ - return isl_basic_map_contains((struct isl_basic_map *)bset, vec); -} - -struct isl_basic_map *isl_basic_map_intersect( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - struct isl_vec *sample = NULL; - - if (!bmap1 || !bmap2) - goto error; - - isl_assert(bmap1->ctx, isl_space_match(bmap1->dim, isl_dim_param, - bmap2->dim, isl_dim_param), goto error); - if (isl_space_dim(bmap1->dim, isl_dim_all) == - isl_space_dim(bmap1->dim, isl_dim_param) && - isl_space_dim(bmap2->dim, isl_dim_all) != - isl_space_dim(bmap2->dim, isl_dim_param)) - return isl_basic_map_intersect(bmap2, bmap1); - - if (isl_space_dim(bmap2->dim, isl_dim_all) != - isl_space_dim(bmap2->dim, isl_dim_param)) - isl_assert(bmap1->ctx, - isl_space_is_equal(bmap1->dim, bmap2->dim), goto error); - - if (bmap1->sample && - isl_basic_map_contains(bmap1, bmap1->sample) > 0 && - isl_basic_map_contains(bmap2, bmap1->sample) > 0) - sample = isl_vec_copy(bmap1->sample); - else if (bmap2->sample && - isl_basic_map_contains(bmap1, bmap2->sample) > 0 && - isl_basic_map_contains(bmap2, bmap2->sample) > 0) - sample = isl_vec_copy(bmap2->sample); - - bmap1 = isl_basic_map_cow(bmap1); - if (!bmap1) - goto error; - bmap1 = isl_basic_map_extend_space(bmap1, isl_space_copy(bmap1->dim), - bmap2->n_div, bmap2->n_eq, bmap2->n_ineq); - bmap1 = add_constraints(bmap1, bmap2, 0, 0); - - if (!bmap1) - isl_vec_free(sample); - else if (sample) { - isl_vec_free(bmap1->sample); - bmap1->sample = sample; - } - - bmap1 = isl_basic_map_simplify(bmap1); - return isl_basic_map_finalize(bmap1); -error: - if (sample) - isl_vec_free(sample); - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -struct isl_basic_set *isl_basic_set_intersect( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - return (struct isl_basic_set *) - isl_basic_map_intersect( - (struct isl_basic_map *)bset1, - (struct isl_basic_map *)bset2); -} - -__isl_give isl_basic_set *isl_basic_set_intersect_params( - __isl_take isl_basic_set *bset1, __isl_take isl_basic_set *bset2) -{ - return isl_basic_set_intersect(bset1, bset2); -} - -/* Special case of isl_map_intersect, where both map1 and map2 - * are convex, without any divs and such that either map1 or map2 - * contains a single constraint. This constraint is then simply - * added to the other map. - */ -static __isl_give isl_map *map_intersect_add_constraint( - __isl_take isl_map *map1, __isl_take isl_map *map2) -{ - isl_assert(map1->ctx, map1->n == 1, goto error); - isl_assert(map2->ctx, map1->n == 1, goto error); - isl_assert(map1->ctx, map1->p[0]->n_div == 0, goto error); - isl_assert(map2->ctx, map1->p[0]->n_div == 0, goto error); - - if (map2->p[0]->n_eq + map2->p[0]->n_ineq != 1) - return isl_map_intersect(map2, map1); - - isl_assert(map2->ctx, - map2->p[0]->n_eq + map2->p[0]->n_ineq == 1, goto error); - - map1 = isl_map_cow(map1); - if (!map1) - goto error; - if (isl_map_plain_is_empty(map1)) { - isl_map_free(map2); - return map1; - } - map1->p[0] = isl_basic_map_cow(map1->p[0]); - if (map2->p[0]->n_eq == 1) - map1->p[0] = isl_basic_map_add_eq(map1->p[0], map2->p[0]->eq[0]); - else - map1->p[0] = isl_basic_map_add_ineq(map1->p[0], - map2->p[0]->ineq[0]); - - map1->p[0] = isl_basic_map_simplify(map1->p[0]); - map1->p[0] = isl_basic_map_finalize(map1->p[0]); - if (!map1->p[0]) - goto error; - - if (isl_basic_map_plain_is_empty(map1->p[0])) { - isl_basic_map_free(map1->p[0]); - map1->n = 0; - } - - isl_map_free(map2); - - return map1; -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -/* map2 may be either a parameter domain or a map living in the same - * space as map1. - */ -static __isl_give isl_map *map_intersect_internal(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - unsigned flags = 0; - struct isl_map *result; - int i, j; - - if (!map1 || !map2) - goto error; - - if (isl_map_plain_is_empty(map1) && - isl_space_is_equal(map1->dim, map2->dim)) { - isl_map_free(map2); - return map1; - } - if (isl_map_plain_is_empty(map2) && - isl_space_is_equal(map1->dim, map2->dim)) { - isl_map_free(map1); - return map2; - } - - if (map1->n == 1 && map2->n == 1 && - map1->p[0]->n_div == 0 && map2->p[0]->n_div == 0 && - isl_space_is_equal(map1->dim, map2->dim) && - (map1->p[0]->n_eq + map1->p[0]->n_ineq == 1 || - map2->p[0]->n_eq + map2->p[0]->n_ineq == 1)) - return map_intersect_add_constraint(map1, map2); - - if (isl_space_dim(map2->dim, isl_dim_all) != - isl_space_dim(map2->dim, isl_dim_param)) - isl_assert(map1->ctx, - isl_space_is_equal(map1->dim, map2->dim), goto error); - - if (ISL_F_ISSET(map1, ISL_MAP_DISJOINT) && - ISL_F_ISSET(map2, ISL_MAP_DISJOINT)) - ISL_FL_SET(flags, ISL_MAP_DISJOINT); - - result = isl_map_alloc_space(isl_space_copy(map1->dim), - map1->n * map2->n, flags); - if (!result) - goto error; - for (i = 0; i < map1->n; ++i) - for (j = 0; j < map2->n; ++j) { - struct isl_basic_map *part; - part = isl_basic_map_intersect( - isl_basic_map_copy(map1->p[i]), - isl_basic_map_copy(map2->p[j])); - if (isl_basic_map_is_empty(part)) - isl_basic_map_free(part); - else - result = isl_map_add_basic_map(result, part); - if (!result) - goto error; - } - isl_map_free(map1); - isl_map_free(map2); - return result; -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -static __isl_give isl_map *map_intersect(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - if (!map1 || !map2) - goto error; - if (!isl_space_is_equal(map1->dim, map2->dim)) - isl_die(isl_map_get_ctx(map1), isl_error_invalid, - "spaces don't match", goto error); - return map_intersect_internal(map1, map2); -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -__isl_give isl_map *isl_map_intersect(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - return isl_map_align_params_map_map_and(map1, map2, &map_intersect); -} - -struct isl_set *isl_set_intersect(struct isl_set *set1, struct isl_set *set2) -{ - return (struct isl_set *) - isl_map_intersect((struct isl_map *)set1, - (struct isl_map *)set2); -} - -/* map_intersect_internal accepts intersections - * with parameter domains, so we can just call that function. - */ -static __isl_give isl_map *map_intersect_params(__isl_take isl_map *map, - __isl_take isl_set *params) -{ - return map_intersect_internal(map, params); -} - -__isl_give isl_map *isl_map_intersect_params(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - return isl_map_align_params_map_map_and(map1, map2, &map_intersect_params); -} - -__isl_give isl_set *isl_set_intersect_params(__isl_take isl_set *set, - __isl_take isl_set *params) -{ - return isl_map_intersect_params(set, params); -} - -struct isl_basic_map *isl_basic_map_reverse(struct isl_basic_map *bmap) -{ - isl_space *dim; - struct isl_basic_set *bset; - unsigned in; - - if (!bmap) - return NULL; - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - dim = isl_space_reverse(isl_space_copy(bmap->dim)); - in = isl_basic_map_n_in(bmap); - bset = isl_basic_set_from_basic_map(bmap); - bset = isl_basic_set_swap_vars(bset, in); - return isl_basic_map_from_basic_set(bset, dim); -} - -static __isl_give isl_basic_map *basic_map_space_reset( - __isl_take isl_basic_map *bmap, enum isl_dim_type type) -{ - isl_space *space; - - if (!isl_space_is_named_or_nested(bmap->dim, type)) - return bmap; - - space = isl_basic_map_get_space(bmap); - space = isl_space_reset(space, type); - bmap = isl_basic_map_reset_space(bmap, space); - return bmap; -} - -__isl_give isl_basic_map *isl_basic_map_insert(__isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, unsigned n) -{ - isl_space *res_dim; - struct isl_basic_map *res; - struct isl_dim_map *dim_map; - unsigned total, off; - enum isl_dim_type t; - - if (n == 0) - return basic_map_space_reset(bmap, type); - - if (!bmap) - return NULL; - - res_dim = isl_space_insert_dims(isl_basic_map_get_space(bmap), type, pos, n); - - total = isl_basic_map_total_dim(bmap) + n; - dim_map = isl_dim_map_alloc(bmap->ctx, total); - off = 0; - for (t = isl_dim_param; t <= isl_dim_out; ++t) { - if (t != type) { - isl_dim_map_dim(dim_map, bmap->dim, t, off); - } else { - unsigned size = isl_basic_map_dim(bmap, t); - isl_dim_map_dim_range(dim_map, bmap->dim, t, - 0, pos, off); - isl_dim_map_dim_range(dim_map, bmap->dim, t, - pos, size - pos, off + pos + n); - } - off += isl_space_dim(res_dim, t); - } - isl_dim_map_div(dim_map, bmap, off); - - res = isl_basic_map_alloc_space(res_dim, - bmap->n_div, bmap->n_eq, bmap->n_ineq); - if (isl_basic_map_is_rational(bmap)) - res = isl_basic_map_set_rational(res); - res = isl_basic_map_add_constraints_dim_map(res, bmap, dim_map); - return isl_basic_map_finalize(res); -} - -__isl_give isl_basic_map *isl_basic_map_add(__isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned n) -{ - if (!bmap) - return NULL; - return isl_basic_map_insert(bmap, type, - isl_basic_map_dim(bmap, type), n); -} - -__isl_give isl_basic_set *isl_basic_set_add(__isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned n) -{ - if (!bset) - return NULL; - isl_assert(bset->ctx, type != isl_dim_in, goto error); - return (isl_basic_set *)isl_basic_map_add((isl_basic_map *)bset, type, n); -error: - isl_basic_set_free(bset); - return NULL; -} - -static __isl_give isl_map *map_space_reset(__isl_take isl_map *map, - enum isl_dim_type type) -{ - isl_space *space; - - if (!map || !isl_space_is_named_or_nested(map->dim, type)) - return map; - - space = isl_map_get_space(map); - space = isl_space_reset(space, type); - map = isl_map_reset_space(map, space); - return map; -} - -__isl_give isl_map *isl_map_insert_dims(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, unsigned n) -{ - int i; - - if (n == 0) - return map_space_reset(map, type); - - map = isl_map_cow(map); - if (!map) - return NULL; - - map->dim = isl_space_insert_dims(map->dim, type, pos, n); - if (!map->dim) - goto error; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_insert(map->p[i], type, pos, n); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_insert_dims(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, unsigned n) -{ - return isl_map_insert_dims(set, type, pos, n); -} - -__isl_give isl_map *isl_map_add_dims(__isl_take isl_map *map, - enum isl_dim_type type, unsigned n) -{ - if (!map) - return NULL; - return isl_map_insert_dims(map, type, isl_map_dim(map, type), n); -} - -__isl_give isl_set *isl_set_add_dims(__isl_take isl_set *set, - enum isl_dim_type type, unsigned n) -{ - if (!set) - return NULL; - isl_assert(set->ctx, type != isl_dim_in, goto error); - return (isl_set *)isl_map_add_dims((isl_map *)set, type, n); -error: - isl_set_free(set); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_move_dims( - __isl_take isl_basic_map *bmap, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - struct isl_dim_map *dim_map; - struct isl_basic_map *res; - enum isl_dim_type t; - unsigned total, off; - - if (!bmap) - return NULL; - if (n == 0) - return bmap; - - isl_assert(bmap->ctx, src_pos + n <= isl_basic_map_dim(bmap, src_type), - goto error); - - if (dst_type == src_type && dst_pos == src_pos) - return bmap; - - isl_assert(bmap->ctx, dst_type != src_type, goto error); - - if (pos(bmap->dim, dst_type) + dst_pos == - pos(bmap->dim, src_type) + src_pos + - ((src_type < dst_type) ? n : 0)) { - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - bmap->dim = isl_space_move_dims(bmap->dim, dst_type, dst_pos, - src_type, src_pos, n); - if (!bmap->dim) - goto error; - - bmap = isl_basic_map_finalize(bmap); - - return bmap; - } - - total = isl_basic_map_total_dim(bmap); - dim_map = isl_dim_map_alloc(bmap->ctx, total); - - off = 0; - for (t = isl_dim_param; t <= isl_dim_out; ++t) { - unsigned size = isl_space_dim(bmap->dim, t); - if (t == dst_type) { - isl_dim_map_dim_range(dim_map, bmap->dim, t, - 0, dst_pos, off); - off += dst_pos; - isl_dim_map_dim_range(dim_map, bmap->dim, src_type, - src_pos, n, off); - off += n; - isl_dim_map_dim_range(dim_map, bmap->dim, t, - dst_pos, size - dst_pos, off); - off += size - dst_pos; - } else if (t == src_type) { - isl_dim_map_dim_range(dim_map, bmap->dim, t, - 0, src_pos, off); - off += src_pos; - isl_dim_map_dim_range(dim_map, bmap->dim, t, - src_pos + n, size - src_pos - n, off); - off += size - src_pos - n; - } else { - isl_dim_map_dim(dim_map, bmap->dim, t, off); - off += size; - } - } - isl_dim_map_div(dim_map, bmap, off); - - res = isl_basic_map_alloc_space(isl_basic_map_get_space(bmap), - bmap->n_div, bmap->n_eq, bmap->n_ineq); - bmap = isl_basic_map_add_constraints_dim_map(res, bmap, dim_map); - - bmap->dim = isl_space_move_dims(bmap->dim, dst_type, dst_pos, - src_type, src_pos, n); - if (!bmap->dim) - goto error; - - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - bmap = isl_basic_map_gauss(bmap, NULL); - bmap = isl_basic_map_finalize(bmap); - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_move_dims(__isl_take isl_basic_set *bset, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - return (isl_basic_set *)isl_basic_map_move_dims( - (isl_basic_map *)bset, dst_type, dst_pos, src_type, src_pos, n); -} - -__isl_give isl_set *isl_set_move_dims(__isl_take isl_set *set, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - if (!set) - return NULL; - isl_assert(set->ctx, dst_type != isl_dim_in, goto error); - return (isl_set *)isl_map_move_dims((isl_map *)set, dst_type, dst_pos, - src_type, src_pos, n); -error: - isl_set_free(set); - return NULL; -} - -__isl_give isl_map *isl_map_move_dims(__isl_take isl_map *map, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - int i; - - if (!map) - return NULL; - if (n == 0) - return map; - - isl_assert(map->ctx, src_pos + n <= isl_map_dim(map, src_type), - goto error); - - if (dst_type == src_type && dst_pos == src_pos) - return map; - - isl_assert(map->ctx, dst_type != src_type, goto error); - - map = isl_map_cow(map); - if (!map) - return NULL; - - map->dim = isl_space_move_dims(map->dim, dst_type, dst_pos, src_type, src_pos, n); - if (!map->dim) - goto error; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_move_dims(map->p[i], - dst_type, dst_pos, - src_type, src_pos, n); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Move the specified dimensions to the last columns right before - * the divs. Don't change the dimension specification of bmap. - * That's the responsibility of the caller. - */ -static __isl_give isl_basic_map *move_last(__isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n) -{ - struct isl_dim_map *dim_map; - struct isl_basic_map *res; - enum isl_dim_type t; - unsigned total, off; - - if (!bmap) - return NULL; - if (pos(bmap->dim, type) + first + n == - 1 + isl_space_dim(bmap->dim, isl_dim_all)) - return bmap; - - total = isl_basic_map_total_dim(bmap); - dim_map = isl_dim_map_alloc(bmap->ctx, total); - - off = 0; - for (t = isl_dim_param; t <= isl_dim_out; ++t) { - unsigned size = isl_space_dim(bmap->dim, t); - if (t == type) { - isl_dim_map_dim_range(dim_map, bmap->dim, t, - 0, first, off); - off += first; - isl_dim_map_dim_range(dim_map, bmap->dim, t, - first, n, total - bmap->n_div - n); - isl_dim_map_dim_range(dim_map, bmap->dim, t, - first + n, size - (first + n), off); - off += size - (first + n); - } else { - isl_dim_map_dim(dim_map, bmap->dim, t, off); - off += size; - } - } - isl_dim_map_div(dim_map, bmap, off + n); - - res = isl_basic_map_alloc_space(isl_basic_map_get_space(bmap), - bmap->n_div, bmap->n_eq, bmap->n_ineq); - res = isl_basic_map_add_constraints_dim_map(res, bmap, dim_map); - return res; -} - -/* Turn the n dimensions of type type, starting at first - * into existentially quantified variables. - */ -__isl_give isl_basic_map *isl_basic_map_project_out( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - size_t row_size; - isl_int **new_div; - isl_int *old; - - if (n == 0) - return bmap; - - if (!bmap) - return NULL; - - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL)) - return isl_basic_map_remove_dims(bmap, type, first, n); - - isl_assert(bmap->ctx, first + n <= isl_basic_map_dim(bmap, type), - goto error); - - bmap = move_last(bmap, type, first, n); - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - row_size = 1 + isl_space_dim(bmap->dim, isl_dim_all) + bmap->extra; - old = bmap->block2.data; - bmap->block2 = isl_blk_extend(bmap->ctx, bmap->block2, - (bmap->extra + n) * (1 + row_size)); - if (!bmap->block2.data) - goto error; - new_div = isl_alloc_array(bmap->ctx, isl_int *, bmap->extra + n); - if (!new_div) - goto error; - for (i = 0; i < n; ++i) { - new_div[i] = bmap->block2.data + - (bmap->extra + i) * (1 + row_size); - isl_seq_clr(new_div[i], 1 + row_size); - } - for (i = 0; i < bmap->extra; ++i) - new_div[n + i] = bmap->block2.data + (bmap->div[i] - old); - free(bmap->div); - bmap->div = new_div; - bmap->n_div += n; - bmap->extra += n; - - bmap->dim = isl_space_drop_dims(bmap->dim, type, first, n); - if (!bmap->dim) - goto error; - bmap = isl_basic_map_simplify(bmap); - bmap = isl_basic_map_drop_redundant_divs(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Turn the n dimensions of type type, starting at first - * into existentially quantified variables. - */ -struct isl_basic_set *isl_basic_set_project_out(struct isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_basic_set *)isl_basic_map_project_out( - (isl_basic_map *)bset, type, first, n); -} - -/* Turn the n dimensions of type type, starting at first - * into existentially quantified variables. - */ -__isl_give isl_map *isl_map_project_out(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!map) - return NULL; - - if (n == 0) - return map; - - isl_assert(map->ctx, first + n <= isl_map_dim(map, type), goto error); - - map = isl_map_cow(map); - if (!map) - return NULL; - - map->dim = isl_space_drop_dims(map->dim, type, first, n); - if (!map->dim) - goto error; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_project_out(map->p[i], type, first, n); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Turn the n dimensions of type type, starting at first - * into existentially quantified variables. - */ -__isl_give isl_set *isl_set_project_out(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_set *)isl_map_project_out((isl_map *)set, type, first, n); -} - -static struct isl_basic_map *add_divs(struct isl_basic_map *bmap, unsigned n) -{ - int i, j; - - for (i = 0; i < n; ++i) { - j = isl_basic_map_alloc_div(bmap); - if (j < 0) - goto error; - isl_seq_clr(bmap->div[j], 1+1+isl_basic_map_total_dim(bmap)); - } - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_map *isl_basic_map_apply_range( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - isl_space *dim_result = NULL; - struct isl_basic_map *bmap; - unsigned n_in, n_out, n, nparam, total, pos; - struct isl_dim_map *dim_map1, *dim_map2; - - if (!bmap1 || !bmap2) - goto error; - - dim_result = isl_space_join(isl_space_copy(bmap1->dim), - isl_space_copy(bmap2->dim)); - - n_in = isl_basic_map_n_in(bmap1); - n_out = isl_basic_map_n_out(bmap2); - n = isl_basic_map_n_out(bmap1); - nparam = isl_basic_map_n_param(bmap1); - - total = nparam + n_in + n_out + bmap1->n_div + bmap2->n_div + n; - dim_map1 = isl_dim_map_alloc(bmap1->ctx, total); - dim_map2 = isl_dim_map_alloc(bmap1->ctx, total); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_in, pos += nparam); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_out, pos += n_in); - isl_dim_map_div(dim_map1, bmap1, pos += n_out); - isl_dim_map_div(dim_map2, bmap2, pos += bmap1->n_div); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_out, pos += bmap2->n_div); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_in, pos); - - bmap = isl_basic_map_alloc_space(dim_result, - bmap1->n_div + bmap2->n_div + n, - bmap1->n_eq + bmap2->n_eq, - bmap1->n_ineq + bmap2->n_ineq); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap1, dim_map1); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap2, dim_map2); - bmap = add_divs(bmap, n); - bmap = isl_basic_map_simplify(bmap); - bmap = isl_basic_map_drop_redundant_divs(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -struct isl_basic_set *isl_basic_set_apply( - struct isl_basic_set *bset, struct isl_basic_map *bmap) -{ - if (!bset || !bmap) - goto error; - - isl_assert(bset->ctx, isl_basic_map_compatible_domain(bmap, bset), - goto error); - - return (struct isl_basic_set *) - isl_basic_map_apply_range((struct isl_basic_map *)bset, bmap); -error: - isl_basic_set_free(bset); - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_map *isl_basic_map_apply_domain( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - if (!bmap1 || !bmap2) - goto error; - - isl_assert(bmap1->ctx, - isl_basic_map_n_in(bmap1) == isl_basic_map_n_in(bmap2), goto error); - isl_assert(bmap1->ctx, - isl_basic_map_n_param(bmap1) == isl_basic_map_n_param(bmap2), - goto error); - - bmap1 = isl_basic_map_reverse(bmap1); - bmap1 = isl_basic_map_apply_range(bmap1, bmap2); - return isl_basic_map_reverse(bmap1); -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -/* Given two basic maps A -> f(A) and B -> g(B), construct a basic map - * A \cap B -> f(A) + f(B) - */ -struct isl_basic_map *isl_basic_map_sum( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - unsigned n_in, n_out, nparam, total, pos; - struct isl_basic_map *bmap = NULL; - struct isl_dim_map *dim_map1, *dim_map2; - int i; - - if (!bmap1 || !bmap2) - goto error; - - isl_assert(bmap1->ctx, isl_space_is_equal(bmap1->dim, bmap2->dim), - goto error); - - nparam = isl_basic_map_n_param(bmap1); - n_in = isl_basic_map_n_in(bmap1); - n_out = isl_basic_map_n_out(bmap1); - - total = nparam + n_in + n_out + bmap1->n_div + bmap2->n_div + 2 * n_out; - dim_map1 = isl_dim_map_alloc(bmap1->ctx, total); - dim_map2 = isl_dim_map_alloc(bmap2->ctx, total); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_param, pos); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_in, pos += nparam); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_in, pos); - isl_dim_map_div(dim_map1, bmap1, pos += n_in + n_out); - isl_dim_map_div(dim_map2, bmap2, pos += bmap1->n_div); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_out, pos += bmap2->n_div); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_out, pos += n_out); - - bmap = isl_basic_map_alloc_space(isl_space_copy(bmap1->dim), - bmap1->n_div + bmap2->n_div + 2 * n_out, - bmap1->n_eq + bmap2->n_eq + n_out, - bmap1->n_ineq + bmap2->n_ineq); - for (i = 0; i < n_out; ++i) { - int j = isl_basic_map_alloc_equality(bmap); - if (j < 0) - goto error; - isl_seq_clr(bmap->eq[j], 1+total); - isl_int_set_si(bmap->eq[j][1+nparam+n_in+i], -1); - isl_int_set_si(bmap->eq[j][1+pos+i], 1); - isl_int_set_si(bmap->eq[j][1+pos-n_out+i], 1); - } - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap1, dim_map1); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap2, dim_map2); - bmap = add_divs(bmap, 2 * n_out); - - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -/* Given two maps A -> f(A) and B -> g(B), construct a map - * A \cap B -> f(A) + f(B) - */ -struct isl_map *isl_map_sum(struct isl_map *map1, struct isl_map *map2) -{ - struct isl_map *result; - int i, j; - - if (!map1 || !map2) - goto error; - - isl_assert(map1->ctx, isl_space_is_equal(map1->dim, map2->dim), goto error); - - result = isl_map_alloc_space(isl_space_copy(map1->dim), - map1->n * map2->n, 0); - if (!result) - goto error; - for (i = 0; i < map1->n; ++i) - for (j = 0; j < map2->n; ++j) { - struct isl_basic_map *part; - part = isl_basic_map_sum( - isl_basic_map_copy(map1->p[i]), - isl_basic_map_copy(map2->p[j])); - if (isl_basic_map_is_empty(part)) - isl_basic_map_free(part); - else - result = isl_map_add_basic_map(result, part); - if (!result) - goto error; - } - isl_map_free(map1); - isl_map_free(map2); - return result; -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -__isl_give isl_set *isl_set_sum(__isl_take isl_set *set1, - __isl_take isl_set *set2) -{ - return (isl_set *)isl_map_sum((isl_map *)set1, (isl_map *)set2); -} - -/* Given a basic map A -> f(A), construct A -> -f(A). - */ -struct isl_basic_map *isl_basic_map_neg(struct isl_basic_map *bmap) -{ - int i, j; - unsigned off, n; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - n = isl_basic_map_dim(bmap, isl_dim_out); - off = isl_basic_map_offset(bmap, isl_dim_out); - for (i = 0; i < bmap->n_eq; ++i) - for (j = 0; j < n; ++j) - isl_int_neg(bmap->eq[i][off+j], bmap->eq[i][off+j]); - for (i = 0; i < bmap->n_ineq; ++i) - for (j = 0; j < n; ++j) - isl_int_neg(bmap->ineq[i][off+j], bmap->ineq[i][off+j]); - for (i = 0; i < bmap->n_div; ++i) - for (j = 0; j < n; ++j) - isl_int_neg(bmap->div[i][1+off+j], bmap->div[i][1+off+j]); - bmap = isl_basic_map_gauss(bmap, NULL); - return isl_basic_map_finalize(bmap); -} - -__isl_give isl_basic_set *isl_basic_set_neg(__isl_take isl_basic_set *bset) -{ - return isl_basic_map_neg(bset); -} - -/* Given a map A -> f(A), construct A -> -f(A). - */ -struct isl_map *isl_map_neg(struct isl_map *map) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_neg(map->p[i]); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_neg(__isl_take isl_set *set) -{ - return (isl_set *)isl_map_neg((isl_map *)set); -} - -/* Given a basic map A -> f(A) and an integer d, construct a basic map - * A -> floor(f(A)/d). - */ -struct isl_basic_map *isl_basic_map_floordiv(struct isl_basic_map *bmap, - isl_int d) -{ - unsigned n_in, n_out, nparam, total, pos; - struct isl_basic_map *result = NULL; - struct isl_dim_map *dim_map; - int i; - - if (!bmap) - return NULL; - - nparam = isl_basic_map_n_param(bmap); - n_in = isl_basic_map_n_in(bmap); - n_out = isl_basic_map_n_out(bmap); - - total = nparam + n_in + n_out + bmap->n_div + n_out; - dim_map = isl_dim_map_alloc(bmap->ctx, total); - isl_dim_map_dim(dim_map, bmap->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map, bmap->dim, isl_dim_in, pos += nparam); - isl_dim_map_div(dim_map, bmap, pos += n_in + n_out); - isl_dim_map_dim(dim_map, bmap->dim, isl_dim_out, pos += bmap->n_div); - - result = isl_basic_map_alloc_space(isl_space_copy(bmap->dim), - bmap->n_div + n_out, - bmap->n_eq, bmap->n_ineq + 2 * n_out); - result = isl_basic_map_add_constraints_dim_map(result, bmap, dim_map); - result = add_divs(result, n_out); - for (i = 0; i < n_out; ++i) { - int j; - j = isl_basic_map_alloc_inequality(result); - if (j < 0) - goto error; - isl_seq_clr(result->ineq[j], 1+total); - isl_int_neg(result->ineq[j][1+nparam+n_in+i], d); - isl_int_set_si(result->ineq[j][1+pos+i], 1); - j = isl_basic_map_alloc_inequality(result); - if (j < 0) - goto error; - isl_seq_clr(result->ineq[j], 1+total); - isl_int_set(result->ineq[j][1+nparam+n_in+i], d); - isl_int_set_si(result->ineq[j][1+pos+i], -1); - isl_int_sub_ui(result->ineq[j][0], d, 1); - } - - result = isl_basic_map_simplify(result); - return isl_basic_map_finalize(result); -error: - isl_basic_map_free(result); - return NULL; -} - -/* Given a map A -> f(A) and an integer d, construct a map - * A -> floor(f(A)/d). - */ -struct isl_map *isl_map_floordiv(struct isl_map *map, isl_int d) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - ISL_F_CLR(map, ISL_MAP_DISJOINT); - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_floordiv(map->p[i], d); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -static struct isl_basic_map *var_equal(struct isl_basic_map *bmap, unsigned pos) -{ - int i; - unsigned nparam; - unsigned n_in; - - i = isl_basic_map_alloc_equality(bmap); - if (i < 0) - goto error; - nparam = isl_basic_map_n_param(bmap); - n_in = isl_basic_map_n_in(bmap); - isl_seq_clr(bmap->eq[i], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->eq[i][1+nparam+pos], -1); - isl_int_set_si(bmap->eq[i][1+nparam+n_in+pos], 1); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Add a constraints to "bmap" expressing i_pos < o_pos - */ -static struct isl_basic_map *var_less(struct isl_basic_map *bmap, unsigned pos) -{ - int i; - unsigned nparam; - unsigned n_in; - - i = isl_basic_map_alloc_inequality(bmap); - if (i < 0) - goto error; - nparam = isl_basic_map_n_param(bmap); - n_in = isl_basic_map_n_in(bmap); - isl_seq_clr(bmap->ineq[i], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->ineq[i][0], -1); - isl_int_set_si(bmap->ineq[i][1+nparam+pos], -1); - isl_int_set_si(bmap->ineq[i][1+nparam+n_in+pos], 1); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Add a constraint to "bmap" expressing i_pos <= o_pos - */ -static __isl_give isl_basic_map *var_less_or_equal( - __isl_take isl_basic_map *bmap, unsigned pos) -{ - int i; - unsigned nparam; - unsigned n_in; - - i = isl_basic_map_alloc_inequality(bmap); - if (i < 0) - goto error; - nparam = isl_basic_map_n_param(bmap); - n_in = isl_basic_map_n_in(bmap); - isl_seq_clr(bmap->ineq[i], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->ineq[i][1+nparam+pos], -1); - isl_int_set_si(bmap->ineq[i][1+nparam+n_in+pos], 1); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Add a constraints to "bmap" expressing i_pos > o_pos - */ -static struct isl_basic_map *var_more(struct isl_basic_map *bmap, unsigned pos) -{ - int i; - unsigned nparam; - unsigned n_in; - - i = isl_basic_map_alloc_inequality(bmap); - if (i < 0) - goto error; - nparam = isl_basic_map_n_param(bmap); - n_in = isl_basic_map_n_in(bmap); - isl_seq_clr(bmap->ineq[i], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->ineq[i][0], -1); - isl_int_set_si(bmap->ineq[i][1+nparam+pos], 1); - isl_int_set_si(bmap->ineq[i][1+nparam+n_in+pos], -1); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Add a constraint to "bmap" expressing i_pos >= o_pos - */ -static __isl_give isl_basic_map *var_more_or_equal( - __isl_take isl_basic_map *bmap, unsigned pos) -{ - int i; - unsigned nparam; - unsigned n_in; - - i = isl_basic_map_alloc_inequality(bmap); - if (i < 0) - goto error; - nparam = isl_basic_map_n_param(bmap); - n_in = isl_basic_map_n_in(bmap); - isl_seq_clr(bmap->ineq[i], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->ineq[i][1+nparam+pos], 1); - isl_int_set_si(bmap->ineq[i][1+nparam+n_in+pos], -1); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_equal( - __isl_take isl_space *dim, unsigned n_equal) -{ - int i; - struct isl_basic_map *bmap; - bmap = isl_basic_map_alloc_space(dim, 0, n_equal, 0); - if (!bmap) - return NULL; - for (i = 0; i < n_equal && bmap; ++i) - bmap = var_equal(bmap, i); - return isl_basic_map_finalize(bmap); -} - -/* Return a relation on of dimension "dim" expressing i_[0..pos] << o_[0..pos] - */ -__isl_give isl_basic_map *isl_basic_map_less_at(__isl_take isl_space *dim, - unsigned pos) -{ - int i; - struct isl_basic_map *bmap; - bmap = isl_basic_map_alloc_space(dim, 0, pos, 1); - if (!bmap) - return NULL; - for (i = 0; i < pos && bmap; ++i) - bmap = var_equal(bmap, i); - if (bmap) - bmap = var_less(bmap, pos); - return isl_basic_map_finalize(bmap); -} - -/* Return a relation on of dimension "dim" expressing i_[0..pos] <<= o_[0..pos] - */ -__isl_give isl_basic_map *isl_basic_map_less_or_equal_at( - __isl_take isl_space *dim, unsigned pos) -{ - int i; - isl_basic_map *bmap; - - bmap = isl_basic_map_alloc_space(dim, 0, pos, 1); - for (i = 0; i < pos; ++i) - bmap = var_equal(bmap, i); - bmap = var_less_or_equal(bmap, pos); - return isl_basic_map_finalize(bmap); -} - -/* Return a relation on pairs of sets of dimension "dim" expressing i_pos > o_pos - */ -__isl_give isl_basic_map *isl_basic_map_more_at(__isl_take isl_space *dim, - unsigned pos) -{ - int i; - struct isl_basic_map *bmap; - bmap = isl_basic_map_alloc_space(dim, 0, pos, 1); - if (!bmap) - return NULL; - for (i = 0; i < pos && bmap; ++i) - bmap = var_equal(bmap, i); - if (bmap) - bmap = var_more(bmap, pos); - return isl_basic_map_finalize(bmap); -} - -/* Return a relation on of dimension "dim" expressing i_[0..pos] >>= o_[0..pos] - */ -__isl_give isl_basic_map *isl_basic_map_more_or_equal_at( - __isl_take isl_space *dim, unsigned pos) -{ - int i; - isl_basic_map *bmap; - - bmap = isl_basic_map_alloc_space(dim, 0, pos, 1); - for (i = 0; i < pos; ++i) - bmap = var_equal(bmap, i); - bmap = var_more_or_equal(bmap, pos); - return isl_basic_map_finalize(bmap); -} - -static __isl_give isl_map *map_lex_lte_first(__isl_take isl_space *dims, - unsigned n, int equal) -{ - struct isl_map *map; - int i; - - if (n == 0 && equal) - return isl_map_universe(dims); - - map = isl_map_alloc_space(isl_space_copy(dims), n, ISL_MAP_DISJOINT); - - for (i = 0; i + 1 < n; ++i) - map = isl_map_add_basic_map(map, - isl_basic_map_less_at(isl_space_copy(dims), i)); - if (n > 0) { - if (equal) - map = isl_map_add_basic_map(map, - isl_basic_map_less_or_equal_at(dims, n - 1)); - else - map = isl_map_add_basic_map(map, - isl_basic_map_less_at(dims, n - 1)); - } else - isl_space_free(dims); - - return map; -} - -static __isl_give isl_map *map_lex_lte(__isl_take isl_space *dims, int equal) -{ - if (!dims) - return NULL; - return map_lex_lte_first(dims, dims->n_out, equal); -} - -__isl_give isl_map *isl_map_lex_lt_first(__isl_take isl_space *dim, unsigned n) -{ - return map_lex_lte_first(dim, n, 0); -} - -__isl_give isl_map *isl_map_lex_le_first(__isl_take isl_space *dim, unsigned n) -{ - return map_lex_lte_first(dim, n, 1); -} - -__isl_give isl_map *isl_map_lex_lt(__isl_take isl_space *set_dim) -{ - return map_lex_lte(isl_space_map_from_set(set_dim), 0); -} - -__isl_give isl_map *isl_map_lex_le(__isl_take isl_space *set_dim) -{ - return map_lex_lte(isl_space_map_from_set(set_dim), 1); -} - -static __isl_give isl_map *map_lex_gte_first(__isl_take isl_space *dims, - unsigned n, int equal) -{ - struct isl_map *map; - int i; - - if (n == 0 && equal) - return isl_map_universe(dims); - - map = isl_map_alloc_space(isl_space_copy(dims), n, ISL_MAP_DISJOINT); - - for (i = 0; i + 1 < n; ++i) - map = isl_map_add_basic_map(map, - isl_basic_map_more_at(isl_space_copy(dims), i)); - if (n > 0) { - if (equal) - map = isl_map_add_basic_map(map, - isl_basic_map_more_or_equal_at(dims, n - 1)); - else - map = isl_map_add_basic_map(map, - isl_basic_map_more_at(dims, n - 1)); - } else - isl_space_free(dims); - - return map; -} - -static __isl_give isl_map *map_lex_gte(__isl_take isl_space *dims, int equal) -{ - if (!dims) - return NULL; - return map_lex_gte_first(dims, dims->n_out, equal); -} - -__isl_give isl_map *isl_map_lex_gt_first(__isl_take isl_space *dim, unsigned n) -{ - return map_lex_gte_first(dim, n, 0); -} - -__isl_give isl_map *isl_map_lex_ge_first(__isl_take isl_space *dim, unsigned n) -{ - return map_lex_gte_first(dim, n, 1); -} - -__isl_give isl_map *isl_map_lex_gt(__isl_take isl_space *set_dim) -{ - return map_lex_gte(isl_space_map_from_set(set_dim), 0); -} - -__isl_give isl_map *isl_map_lex_ge(__isl_take isl_space *set_dim) -{ - return map_lex_gte(isl_space_map_from_set(set_dim), 1); -} - -__isl_give isl_map *isl_set_lex_le_set(__isl_take isl_set *set1, - __isl_take isl_set *set2) -{ - isl_map *map; - map = isl_map_lex_le(isl_set_get_space(set1)); - map = isl_map_intersect_domain(map, set1); - map = isl_map_intersect_range(map, set2); - return map; -} - -__isl_give isl_map *isl_set_lex_lt_set(__isl_take isl_set *set1, - __isl_take isl_set *set2) -{ - isl_map *map; - map = isl_map_lex_lt(isl_set_get_space(set1)); - map = isl_map_intersect_domain(map, set1); - map = isl_map_intersect_range(map, set2); - return map; -} - -__isl_give isl_map *isl_set_lex_ge_set(__isl_take isl_set *set1, - __isl_take isl_set *set2) -{ - isl_map *map; - map = isl_map_lex_ge(isl_set_get_space(set1)); - map = isl_map_intersect_domain(map, set1); - map = isl_map_intersect_range(map, set2); - return map; -} - -__isl_give isl_map *isl_set_lex_gt_set(__isl_take isl_set *set1, - __isl_take isl_set *set2) -{ - isl_map *map; - map = isl_map_lex_gt(isl_set_get_space(set1)); - map = isl_map_intersect_domain(map, set1); - map = isl_map_intersect_range(map, set2); - return map; -} - -__isl_give isl_map *isl_map_lex_le_map(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - isl_map *map; - map = isl_map_lex_le(isl_space_range(isl_map_get_space(map1))); - map = isl_map_apply_domain(map, isl_map_reverse(map1)); - map = isl_map_apply_range(map, isl_map_reverse(map2)); - return map; -} - -__isl_give isl_map *isl_map_lex_lt_map(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - isl_map *map; - map = isl_map_lex_lt(isl_space_range(isl_map_get_space(map1))); - map = isl_map_apply_domain(map, isl_map_reverse(map1)); - map = isl_map_apply_range(map, isl_map_reverse(map2)); - return map; -} - -__isl_give isl_map *isl_map_lex_ge_map(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - isl_map *map; - map = isl_map_lex_ge(isl_space_range(isl_map_get_space(map1))); - map = isl_map_apply_domain(map, isl_map_reverse(map1)); - map = isl_map_apply_range(map, isl_map_reverse(map2)); - return map; -} - -__isl_give isl_map *isl_map_lex_gt_map(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - isl_map *map; - map = isl_map_lex_gt(isl_space_range(isl_map_get_space(map1))); - map = isl_map_apply_domain(map, isl_map_reverse(map1)); - map = isl_map_apply_range(map, isl_map_reverse(map2)); - return map; -} - -__isl_give isl_basic_map *isl_basic_map_from_basic_set( - __isl_take isl_basic_set *bset, __isl_take isl_space *dim) -{ - struct isl_basic_map *bmap; - - bset = isl_basic_set_cow(bset); - if (!bset || !dim) - goto error; - - isl_assert(bset->ctx, isl_space_compatible(bset->dim, dim), goto error); - isl_space_free(bset->dim); - bmap = (struct isl_basic_map *) bset; - bmap->dim = dim; - return isl_basic_map_finalize(bmap); -error: - isl_basic_set_free(bset); - isl_space_free(dim); - return NULL; -} - -struct isl_basic_set *isl_basic_set_from_basic_map(struct isl_basic_map *bmap) -{ - if (!bmap) - goto error; - if (bmap->dim->n_in == 0) - return (struct isl_basic_set *)bmap; - bmap = isl_basic_map_cow(bmap); - if (!bmap) - goto error; - bmap->dim = isl_space_as_set_space(bmap->dim); - if (!bmap->dim) - goto error; - bmap = isl_basic_map_finalize(bmap); - return (struct isl_basic_set *)bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* For a div d = floor(f/m), add the constraints - * - * f - m d >= 0 - * -(f-(n-1)) + m d >= 0 - * - * Note that the second constraint is the negation of - * - * f - m d >= n - */ -int isl_basic_map_add_div_constraints_var(__isl_keep isl_basic_map *bmap, - unsigned pos, isl_int *div) -{ - int i, j; - unsigned total = isl_basic_map_total_dim(bmap); - - i = isl_basic_map_alloc_inequality(bmap); - if (i < 0) - return -1; - isl_seq_cpy(bmap->ineq[i], div + 1, 1 + total); - isl_int_neg(bmap->ineq[i][1 + pos], div[0]); - - j = isl_basic_map_alloc_inequality(bmap); - if (j < 0) - return -1; - isl_seq_neg(bmap->ineq[j], bmap->ineq[i], 1 + total); - isl_int_add(bmap->ineq[j][0], bmap->ineq[j][0], bmap->ineq[j][1 + pos]); - isl_int_sub_ui(bmap->ineq[j][0], bmap->ineq[j][0], 1); - return j; -} - -int isl_basic_set_add_div_constraints_var(__isl_keep isl_basic_set *bset, - unsigned pos, isl_int *div) -{ - return isl_basic_map_add_div_constraints_var((isl_basic_map *)bset, - pos, div); -} - -int isl_basic_map_add_div_constraints(struct isl_basic_map *bmap, unsigned div) -{ - unsigned total = isl_basic_map_total_dim(bmap); - unsigned div_pos = total - bmap->n_div + div; - - return isl_basic_map_add_div_constraints_var(bmap, div_pos, - bmap->div[div]); -} - -struct isl_basic_set *isl_basic_map_underlying_set( - struct isl_basic_map *bmap) -{ - if (!bmap) - goto error; - if (bmap->dim->nparam == 0 && bmap->dim->n_in == 0 && - bmap->n_div == 0 && - !isl_space_is_named_or_nested(bmap->dim, isl_dim_in) && - !isl_space_is_named_or_nested(bmap->dim, isl_dim_out)) - return (struct isl_basic_set *)bmap; - bmap = isl_basic_map_cow(bmap); - if (!bmap) - goto error; - bmap->dim = isl_space_underlying(bmap->dim, bmap->n_div); - if (!bmap->dim) - goto error; - bmap->extra -= bmap->n_div; - bmap->n_div = 0; - bmap = isl_basic_map_finalize(bmap); - return (struct isl_basic_set *)bmap; -error: - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_underlying_set( - __isl_take isl_basic_set *bset) -{ - return isl_basic_map_underlying_set((isl_basic_map *)bset); -} - -struct isl_basic_map *isl_basic_map_overlying_set( - struct isl_basic_set *bset, struct isl_basic_map *like) -{ - struct isl_basic_map *bmap; - struct isl_ctx *ctx; - unsigned total; - int i; - - if (!bset || !like) - goto error; - ctx = bset->ctx; - isl_assert(ctx, bset->n_div == 0, goto error); - isl_assert(ctx, isl_basic_set_n_param(bset) == 0, goto error); - isl_assert(ctx, bset->dim->n_out == isl_basic_map_total_dim(like), - goto error); - if (isl_space_is_equal(bset->dim, like->dim) && like->n_div == 0) { - isl_basic_map_free(like); - return (struct isl_basic_map *)bset; - } - bset = isl_basic_set_cow(bset); - if (!bset) - goto error; - total = bset->dim->n_out + bset->extra; - bmap = (struct isl_basic_map *)bset; - isl_space_free(bmap->dim); - bmap->dim = isl_space_copy(like->dim); - if (!bmap->dim) - goto error; - bmap->n_div = like->n_div; - bmap->extra += like->n_div; - if (bmap->extra) { - unsigned ltotal; - isl_int **div; - ltotal = total - bmap->extra + like->extra; - if (ltotal > total) - ltotal = total; - bmap->block2 = isl_blk_extend(ctx, bmap->block2, - bmap->extra * (1 + 1 + total)); - if (isl_blk_is_error(bmap->block2)) - goto error; - div = isl_realloc_array(ctx, bmap->div, isl_int *, bmap->extra); - if (!div) - goto error; - bmap->div = div; - for (i = 0; i < bmap->extra; ++i) - bmap->div[i] = bmap->block2.data + i * (1 + 1 + total); - for (i = 0; i < like->n_div; ++i) { - isl_seq_cpy(bmap->div[i], like->div[i], 1 + 1 + ltotal); - isl_seq_clr(bmap->div[i]+1+1+ltotal, total - ltotal); - } - bmap = isl_basic_map_extend_constraints(bmap, - 0, 2 * like->n_div); - for (i = 0; i < like->n_div; ++i) { - if (isl_int_is_zero(bmap->div[i][0])) - continue; - if (isl_basic_map_add_div_constraints(bmap, i) < 0) - goto error; - } - } - isl_basic_map_free(like); - bmap = isl_basic_map_simplify(bmap); - bmap = isl_basic_map_finalize(bmap); - return bmap; -error: - isl_basic_map_free(like); - isl_basic_set_free(bset); - return NULL; -} - -struct isl_basic_set *isl_basic_set_from_underlying_set( - struct isl_basic_set *bset, struct isl_basic_set *like) -{ - return (struct isl_basic_set *) - isl_basic_map_overlying_set(bset, (struct isl_basic_map *)like); -} - -struct isl_set *isl_set_from_underlying_set( - struct isl_set *set, struct isl_basic_set *like) -{ - int i; - - if (!set || !like) - goto error; - isl_assert(set->ctx, set->dim->n_out == isl_basic_set_total_dim(like), - goto error); - if (isl_space_is_equal(set->dim, like->dim) && like->n_div == 0) { - isl_basic_set_free(like); - return set; - } - set = isl_set_cow(set); - if (!set) - goto error; - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_from_underlying_set(set->p[i], - isl_basic_set_copy(like)); - if (!set->p[i]) - goto error; - } - isl_space_free(set->dim); - set->dim = isl_space_copy(like->dim); - if (!set->dim) - goto error; - isl_basic_set_free(like); - return set; -error: - isl_basic_set_free(like); - isl_set_free(set); - return NULL; -} - -struct isl_set *isl_map_underlying_set(struct isl_map *map) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - map->dim = isl_space_cow(map->dim); - if (!map->dim) - goto error; - - for (i = 1; i < map->n; ++i) - isl_assert(map->ctx, map->p[0]->n_div == map->p[i]->n_div, - goto error); - for (i = 0; i < map->n; ++i) { - map->p[i] = (struct isl_basic_map *) - isl_basic_map_underlying_set(map->p[i]); - if (!map->p[i]) - goto error; - } - if (map->n == 0) - map->dim = isl_space_underlying(map->dim, 0); - else { - isl_space_free(map->dim); - map->dim = isl_space_copy(map->p[0]->dim); - } - if (!map->dim) - goto error; - return (struct isl_set *)map; -error: - isl_map_free(map); - return NULL; -} - -struct isl_set *isl_set_to_underlying_set(struct isl_set *set) -{ - return (struct isl_set *)isl_map_underlying_set((struct isl_map *)set); -} - -__isl_give isl_basic_map *isl_basic_map_reset_space( - __isl_take isl_basic_map *bmap, __isl_take isl_space *dim) -{ - bmap = isl_basic_map_cow(bmap); - if (!bmap || !dim) - goto error; - - isl_space_free(bmap->dim); - bmap->dim = dim; - - bmap = isl_basic_map_finalize(bmap); - - return bmap; -error: - isl_basic_map_free(bmap); - isl_space_free(dim); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_reset_space( - __isl_take isl_basic_set *bset, __isl_take isl_space *dim) -{ - return (isl_basic_set *)isl_basic_map_reset_space((isl_basic_map *)bset, - dim); -} - -__isl_give isl_map *isl_map_reset_space(__isl_take isl_map *map, - __isl_take isl_space *dim) -{ - int i; - - map = isl_map_cow(map); - if (!map || !dim) - goto error; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_reset_space(map->p[i], - isl_space_copy(dim)); - if (!map->p[i]) - goto error; - } - isl_space_free(map->dim); - map->dim = dim; - - return map; -error: - isl_map_free(map); - isl_space_free(dim); - return NULL; -} - -__isl_give isl_set *isl_set_reset_space(__isl_take isl_set *set, - __isl_take isl_space *dim) -{ - return (struct isl_set *) isl_map_reset_space((struct isl_map *)set, dim); -} - -/* Compute the parameter domain of the given basic set. - */ -__isl_give isl_basic_set *isl_basic_set_params(__isl_take isl_basic_set *bset) -{ - isl_space *space; - unsigned n; - - if (isl_basic_set_is_params(bset)) - return bset; - - n = isl_basic_set_dim(bset, isl_dim_set); - bset = isl_basic_set_project_out(bset, isl_dim_set, 0, n); - space = isl_basic_set_get_space(bset); - space = isl_space_params(space); - bset = isl_basic_set_reset_space(bset, space); - return bset; -} - -/* Compute the parameter domain of the given set. - */ -__isl_give isl_set *isl_set_params(__isl_take isl_set *set) -{ - isl_space *space; - unsigned n; - - if (isl_set_is_params(set)) - return set; - - n = isl_set_dim(set, isl_dim_set); - set = isl_set_project_out(set, isl_dim_set, 0, n); - space = isl_set_get_space(set); - space = isl_space_params(space); - set = isl_set_reset_space(set, space); - return set; -} - -/* Construct a zero-dimensional set with the given parameter domain. - */ -__isl_give isl_set *isl_set_from_params(__isl_take isl_set *set) -{ - isl_space *space; - space = isl_set_get_space(set); - space = isl_space_set_from_params(space); - set = isl_set_reset_space(set, space); - return set; -} - -/* Compute the parameter domain of the given map. - */ -__isl_give isl_set *isl_map_params(__isl_take isl_map *map) -{ - isl_space *space; - unsigned n; - - n = isl_map_dim(map, isl_dim_in); - map = isl_map_project_out(map, isl_dim_in, 0, n); - n = isl_map_dim(map, isl_dim_out); - map = isl_map_project_out(map, isl_dim_out, 0, n); - space = isl_map_get_space(map); - space = isl_space_params(space); - map = isl_map_reset_space(map, space); - return map; -} - -struct isl_basic_set *isl_basic_map_domain(struct isl_basic_map *bmap) -{ - isl_space *dim; - struct isl_basic_set *domain; - unsigned n_in; - unsigned n_out; - - if (!bmap) - return NULL; - dim = isl_space_domain(isl_basic_map_get_space(bmap)); - - n_in = isl_basic_map_n_in(bmap); - n_out = isl_basic_map_n_out(bmap); - domain = isl_basic_set_from_basic_map(bmap); - domain = isl_basic_set_project_out(domain, isl_dim_set, n_in, n_out); - - domain = isl_basic_set_reset_space(domain, dim); - - return domain; -} - -int isl_basic_map_may_be_set(__isl_keep isl_basic_map *bmap) -{ - if (!bmap) - return -1; - return isl_space_may_be_set(bmap->dim); -} - -/* Is this basic map actually a set? - * Users should never call this function. Outside of isl, - * the type should indicate whether something is a set or a map. - */ -int isl_basic_map_is_set(__isl_keep isl_basic_map *bmap) -{ - if (!bmap) - return -1; - return isl_space_is_set(bmap->dim); -} - -struct isl_basic_set *isl_basic_map_range(struct isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - if (isl_basic_map_is_set(bmap)) - return bmap; - return isl_basic_map_domain(isl_basic_map_reverse(bmap)); -} - -__isl_give isl_basic_map *isl_basic_map_domain_map( - __isl_take isl_basic_map *bmap) -{ - int i, k; - isl_space *dim; - isl_basic_map *domain; - int nparam, n_in, n_out; - unsigned total; - - nparam = isl_basic_map_dim(bmap, isl_dim_param); - n_in = isl_basic_map_dim(bmap, isl_dim_in); - n_out = isl_basic_map_dim(bmap, isl_dim_out); - - dim = isl_space_from_range(isl_space_domain(isl_basic_map_get_space(bmap))); - domain = isl_basic_map_universe(dim); - - bmap = isl_basic_map_from_domain(isl_basic_map_wrap(bmap)); - bmap = isl_basic_map_apply_range(bmap, domain); - bmap = isl_basic_map_extend_constraints(bmap, n_in, 0); - - total = isl_basic_map_total_dim(bmap); - - for (i = 0; i < n_in; ++i) { - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->eq[k], 1 + total); - isl_int_set_si(bmap->eq[k][1 + nparam + i], -1); - isl_int_set_si(bmap->eq[k][1 + nparam + n_in + n_out + i], 1); - } - - bmap = isl_basic_map_gauss(bmap, NULL); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_range_map( - __isl_take isl_basic_map *bmap) -{ - int i, k; - isl_space *dim; - isl_basic_map *range; - int nparam, n_in, n_out; - unsigned total; - - nparam = isl_basic_map_dim(bmap, isl_dim_param); - n_in = isl_basic_map_dim(bmap, isl_dim_in); - n_out = isl_basic_map_dim(bmap, isl_dim_out); - - dim = isl_space_from_range(isl_space_range(isl_basic_map_get_space(bmap))); - range = isl_basic_map_universe(dim); - - bmap = isl_basic_map_from_domain(isl_basic_map_wrap(bmap)); - bmap = isl_basic_map_apply_range(bmap, range); - bmap = isl_basic_map_extend_constraints(bmap, n_out, 0); - - total = isl_basic_map_total_dim(bmap); - - for (i = 0; i < n_out; ++i) { - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->eq[k], 1 + total); - isl_int_set_si(bmap->eq[k][1 + nparam + n_in + i], -1); - isl_int_set_si(bmap->eq[k][1 + nparam + n_in + n_out + i], 1); - } - - bmap = isl_basic_map_gauss(bmap, NULL); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -int isl_map_may_be_set(__isl_keep isl_map *map) -{ - if (!map) - return -1; - return isl_space_may_be_set(map->dim); -} - -/* Is this map actually a set? - * Users should never call this function. Outside of isl, - * the type should indicate whether something is a set or a map. - */ -int isl_map_is_set(__isl_keep isl_map *map) -{ - if (!map) - return -1; - return isl_space_is_set(map->dim); -} - -struct isl_set *isl_map_range(struct isl_map *map) -{ - int i; - struct isl_set *set; - - if (!map) - goto error; - if (isl_map_is_set(map)) - return (isl_set *)map; - - map = isl_map_cow(map); - if (!map) - goto error; - - set = (struct isl_set *) map; - set->dim = isl_space_range(set->dim); - if (!set->dim) - goto error; - for (i = 0; i < map->n; ++i) { - set->p[i] = isl_basic_map_range(map->p[i]); - if (!set->p[i]) - goto error; - } - ISL_F_CLR(set, ISL_MAP_DISJOINT); - ISL_F_CLR(set, ISL_SET_NORMALIZED); - return set; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_map *isl_map_domain_map(__isl_take isl_map *map) -{ - int i; - isl_space *domain_dim; - - map = isl_map_cow(map); - if (!map) - return NULL; - - domain_dim = isl_space_from_range(isl_space_domain(isl_map_get_space(map))); - map->dim = isl_space_from_domain(isl_space_wrap(map->dim)); - map->dim = isl_space_join(map->dim, domain_dim); - if (!map->dim) - goto error; - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_domain_map(map->p[i]); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_DISJOINT); - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_map *isl_map_range_map(__isl_take isl_map *map) -{ - int i; - isl_space *range_dim; - - map = isl_map_cow(map); - if (!map) - return NULL; - - range_dim = isl_space_range(isl_map_get_space(map)); - range_dim = isl_space_from_range(range_dim); - map->dim = isl_space_from_domain(isl_space_wrap(map->dim)); - map->dim = isl_space_join(map->dim, range_dim); - if (!map->dim) - goto error; - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_range_map(map->p[i]); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_DISJOINT); - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_map *isl_map_from_set(__isl_take isl_set *set, - __isl_take isl_space *dim) -{ - int i; - struct isl_map *map = NULL; - - set = isl_set_cow(set); - if (!set || !dim) - goto error; - isl_assert(set->ctx, isl_space_compatible(set->dim, dim), goto error); - map = (struct isl_map *)set; - for (i = 0; i < set->n; ++i) { - map->p[i] = isl_basic_map_from_basic_set( - set->p[i], isl_space_copy(dim)); - if (!map->p[i]) - goto error; - } - isl_space_free(map->dim); - map->dim = dim; - return map; -error: - isl_space_free(dim); - isl_set_free(set); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_from_domain( - __isl_take isl_basic_set *bset) -{ - return isl_basic_map_reverse(isl_basic_map_from_range(bset)); -} - -__isl_give isl_basic_map *isl_basic_map_from_range( - __isl_take isl_basic_set *bset) -{ - isl_space *space; - space = isl_basic_set_get_space(bset); - space = isl_space_from_range(space); - bset = isl_basic_set_reset_space(bset, space); - return (isl_basic_map *)bset; -} - -struct isl_map *isl_map_from_range(struct isl_set *set) -{ - isl_space *space; - space = isl_set_get_space(set); - space = isl_space_from_range(space); - set = isl_set_reset_space(set, space); - return (struct isl_map *)set; -} - -__isl_give isl_map *isl_map_from_domain(__isl_take isl_set *set) -{ - return isl_map_reverse(isl_map_from_range(set)); -} - -__isl_give isl_basic_map *isl_basic_map_from_domain_and_range( - __isl_take isl_basic_set *domain, __isl_take isl_basic_set *range) -{ - return isl_basic_map_apply_range(isl_basic_map_reverse(domain), range); -} - -__isl_give isl_map *isl_map_from_domain_and_range(__isl_take isl_set *domain, - __isl_take isl_set *range) -{ - return isl_map_apply_range(isl_map_reverse(domain), range); -} - -struct isl_set *isl_set_from_map(struct isl_map *map) -{ - int i; - struct isl_set *set = NULL; - - if (!map) - return NULL; - map = isl_map_cow(map); - if (!map) - return NULL; - map->dim = isl_space_as_set_space(map->dim); - if (!map->dim) - goto error; - set = (struct isl_set *)map; - for (i = 0; i < map->n; ++i) { - set->p[i] = isl_basic_set_from_basic_map(map->p[i]); - if (!set->p[i]) - goto error; - } - return set; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_map *isl_map_alloc_space(__isl_take isl_space *dim, int n, - unsigned flags) -{ - struct isl_map *map; - - if (!dim) - return NULL; - if (n < 0) - isl_die(dim->ctx, isl_error_internal, - "negative number of basic maps", goto error); - map = isl_alloc(dim->ctx, struct isl_map, - sizeof(struct isl_map) + - (n - 1) * sizeof(struct isl_basic_map *)); - if (!map) - goto error; - - map->ctx = dim->ctx; - isl_ctx_ref(map->ctx); - map->ref = 1; - map->size = n; - map->n = 0; - map->dim = dim; - map->flags = flags; - return map; -error: - isl_space_free(dim); - return NULL; -} - -struct isl_map *isl_map_alloc(struct isl_ctx *ctx, - unsigned nparam, unsigned in, unsigned out, int n, - unsigned flags) -{ - struct isl_map *map; - isl_space *dims; - - dims = isl_space_alloc(ctx, nparam, in, out); - if (!dims) - return NULL; - - map = isl_map_alloc_space(dims, n, flags); - return map; -} - -__isl_give isl_basic_map *isl_basic_map_empty(__isl_take isl_space *dim) -{ - struct isl_basic_map *bmap; - bmap = isl_basic_map_alloc_space(dim, 0, 1, 0); - bmap = isl_basic_map_set_to_empty(bmap); - return bmap; -} - -__isl_give isl_basic_set *isl_basic_set_empty(__isl_take isl_space *dim) -{ - struct isl_basic_set *bset; - bset = isl_basic_set_alloc_space(dim, 0, 1, 0); - bset = isl_basic_set_set_to_empty(bset); - return bset; -} - -struct isl_basic_map *isl_basic_map_empty_like(struct isl_basic_map *model) -{ - struct isl_basic_map *bmap; - if (!model) - return NULL; - bmap = isl_basic_map_alloc_space(isl_space_copy(model->dim), 0, 1, 0); - bmap = isl_basic_map_set_to_empty(bmap); - return bmap; -} - -struct isl_basic_map *isl_basic_map_empty_like_map(struct isl_map *model) -{ - struct isl_basic_map *bmap; - if (!model) - return NULL; - bmap = isl_basic_map_alloc_space(isl_space_copy(model->dim), 0, 1, 0); - bmap = isl_basic_map_set_to_empty(bmap); - return bmap; -} - -struct isl_basic_set *isl_basic_set_empty_like(struct isl_basic_set *model) -{ - struct isl_basic_set *bset; - if (!model) - return NULL; - bset = isl_basic_set_alloc_space(isl_space_copy(model->dim), 0, 1, 0); - bset = isl_basic_set_set_to_empty(bset); - return bset; -} - -__isl_give isl_basic_map *isl_basic_map_universe(__isl_take isl_space *dim) -{ - struct isl_basic_map *bmap; - bmap = isl_basic_map_alloc_space(dim, 0, 0, 0); - bmap = isl_basic_map_finalize(bmap); - return bmap; -} - -__isl_give isl_basic_set *isl_basic_set_universe(__isl_take isl_space *dim) -{ - struct isl_basic_set *bset; - bset = isl_basic_set_alloc_space(dim, 0, 0, 0); - bset = isl_basic_set_finalize(bset); - return bset; -} - -__isl_give isl_basic_map *isl_basic_map_nat_universe(__isl_take isl_space *dim) -{ - int i; - unsigned total = isl_space_dim(dim, isl_dim_all); - isl_basic_map *bmap; - - bmap= isl_basic_map_alloc_space(dim, 0, 0, total); - for (i = 0; i < total; ++i) { - int k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->ineq[k], 1 + total); - isl_int_set_si(bmap->ineq[k][1 + i], 1); - } - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_nat_universe(__isl_take isl_space *dim) -{ - return isl_basic_map_nat_universe(dim); -} - -__isl_give isl_map *isl_map_nat_universe(__isl_take isl_space *dim) -{ - return isl_map_from_basic_map(isl_basic_map_nat_universe(dim)); -} - -__isl_give isl_set *isl_set_nat_universe(__isl_take isl_space *dim) -{ - return isl_map_nat_universe(dim); -} - -__isl_give isl_basic_map *isl_basic_map_universe_like( - __isl_keep isl_basic_map *model) -{ - if (!model) - return NULL; - return isl_basic_map_alloc_space(isl_space_copy(model->dim), 0, 0, 0); -} - -struct isl_basic_set *isl_basic_set_universe_like(struct isl_basic_set *model) -{ - if (!model) - return NULL; - return isl_basic_set_alloc_space(isl_space_copy(model->dim), 0, 0, 0); -} - -__isl_give isl_basic_set *isl_basic_set_universe_like_set( - __isl_keep isl_set *model) -{ - if (!model) - return NULL; - return isl_basic_set_alloc_space(isl_space_copy(model->dim), 0, 0, 0); -} - -__isl_give isl_map *isl_map_empty(__isl_take isl_space *dim) -{ - return isl_map_alloc_space(dim, 0, ISL_MAP_DISJOINT); -} - -struct isl_map *isl_map_empty_like(struct isl_map *model) -{ - if (!model) - return NULL; - return isl_map_alloc_space(isl_space_copy(model->dim), 0, ISL_MAP_DISJOINT); -} - -struct isl_map *isl_map_empty_like_basic_map(struct isl_basic_map *model) -{ - if (!model) - return NULL; - return isl_map_alloc_space(isl_space_copy(model->dim), 0, ISL_MAP_DISJOINT); -} - -__isl_give isl_set *isl_set_empty(__isl_take isl_space *dim) -{ - return isl_set_alloc_space(dim, 0, ISL_MAP_DISJOINT); -} - -struct isl_set *isl_set_empty_like(struct isl_set *model) -{ - if (!model) - return NULL; - return isl_set_empty(isl_space_copy(model->dim)); -} - -__isl_give isl_map *isl_map_universe(__isl_take isl_space *dim) -{ - struct isl_map *map; - if (!dim) - return NULL; - map = isl_map_alloc_space(isl_space_copy(dim), 1, ISL_MAP_DISJOINT); - map = isl_map_add_basic_map(map, isl_basic_map_universe(dim)); - return map; -} - -__isl_give isl_set *isl_set_universe(__isl_take isl_space *dim) -{ - struct isl_set *set; - if (!dim) - return NULL; - set = isl_set_alloc_space(isl_space_copy(dim), 1, ISL_MAP_DISJOINT); - set = isl_set_add_basic_set(set, isl_basic_set_universe(dim)); - return set; -} - -__isl_give isl_set *isl_set_universe_like(__isl_keep isl_set *model) -{ - if (!model) - return NULL; - return isl_set_universe(isl_space_copy(model->dim)); -} - -struct isl_map *isl_map_dup(struct isl_map *map) -{ - int i; - struct isl_map *dup; - - if (!map) - return NULL; - dup = isl_map_alloc_space(isl_space_copy(map->dim), map->n, map->flags); - for (i = 0; i < map->n; ++i) - dup = isl_map_add_basic_map(dup, isl_basic_map_copy(map->p[i])); - return dup; -} - -__isl_give isl_map *isl_map_add_basic_map(__isl_take isl_map *map, - __isl_take isl_basic_map *bmap) -{ - if (!bmap || !map) - goto error; - if (isl_basic_map_plain_is_empty(bmap)) { - isl_basic_map_free(bmap); - return map; - } - isl_assert(map->ctx, isl_space_is_equal(map->dim, bmap->dim), goto error); - isl_assert(map->ctx, map->n < map->size, goto error); - map->p[map->n] = bmap; - map->n++; - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - if (map) - isl_map_free(map); - if (bmap) - isl_basic_map_free(bmap); - return NULL; -} - -void isl_map_free(struct isl_map *map) -{ - int i; - - if (!map) - return; - - if (--map->ref > 0) - return; - - isl_ctx_deref(map->ctx); - for (i = 0; i < map->n; ++i) - isl_basic_map_free(map->p[i]); - isl_space_free(map->dim); - free(map); -} - -struct isl_map *isl_map_extend(struct isl_map *base, - unsigned nparam, unsigned n_in, unsigned n_out) -{ - int i; - - base = isl_map_cow(base); - if (!base) - return NULL; - - base->dim = isl_space_extend(base->dim, nparam, n_in, n_out); - if (!base->dim) - goto error; - for (i = 0; i < base->n; ++i) { - base->p[i] = isl_basic_map_extend_space(base->p[i], - isl_space_copy(base->dim), 0, 0, 0); - if (!base->p[i]) - goto error; - } - return base; -error: - isl_map_free(base); - return NULL; -} - -struct isl_set *isl_set_extend(struct isl_set *base, - unsigned nparam, unsigned dim) -{ - return (struct isl_set *)isl_map_extend((struct isl_map *)base, - nparam, 0, dim); -} - -static struct isl_basic_map *isl_basic_map_fix_pos_si( - struct isl_basic_map *bmap, unsigned pos, int value) -{ - int j; - - bmap = isl_basic_map_cow(bmap); - bmap = isl_basic_map_extend_constraints(bmap, 1, 0); - j = isl_basic_map_alloc_equality(bmap); - if (j < 0) - goto error; - isl_seq_clr(bmap->eq[j] + 1, isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->eq[j][pos], -1); - isl_int_set_si(bmap->eq[j][0], value); - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -static __isl_give isl_basic_map *isl_basic_map_fix_pos( - __isl_take isl_basic_map *bmap, unsigned pos, isl_int value) -{ - int j; - - bmap = isl_basic_map_cow(bmap); - bmap = isl_basic_map_extend_constraints(bmap, 1, 0); - j = isl_basic_map_alloc_equality(bmap); - if (j < 0) - goto error; - isl_seq_clr(bmap->eq[j] + 1, isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->eq[j][pos], -1); - isl_int_set(bmap->eq[j][0], value); - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_map *isl_basic_map_fix_si(struct isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, int value) -{ - if (!bmap) - return NULL; - isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), goto error); - return isl_basic_map_fix_pos_si(bmap, - isl_basic_map_offset(bmap, type) + pos, value); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_fix(__isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, isl_int value) -{ - if (!bmap) - return NULL; - isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), goto error); - return isl_basic_map_fix_pos(bmap, - isl_basic_map_offset(bmap, type) + pos, value); -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_fix_si(struct isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, int value) -{ - return (struct isl_basic_set *) - isl_basic_map_fix_si((struct isl_basic_map *)bset, - type, pos, value); -} - -__isl_give isl_basic_set *isl_basic_set_fix(__isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, isl_int value) -{ - return (struct isl_basic_set *) - isl_basic_map_fix((struct isl_basic_map *)bset, - type, pos, value); -} - -struct isl_basic_map *isl_basic_map_fix_input_si(struct isl_basic_map *bmap, - unsigned input, int value) -{ - return isl_basic_map_fix_si(bmap, isl_dim_in, input, value); -} - -struct isl_basic_set *isl_basic_set_fix_dim_si(struct isl_basic_set *bset, - unsigned dim, int value) -{ - return (struct isl_basic_set *) - isl_basic_map_fix_si((struct isl_basic_map *)bset, - isl_dim_set, dim, value); -} - -struct isl_map *isl_map_fix_si(struct isl_map *map, - enum isl_dim_type type, unsigned pos, int value) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - isl_assert(map->ctx, pos < isl_map_dim(map, type), goto error); - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_fix_si(map->p[i], type, pos, value); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_fix_si(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, int value) -{ - return (struct isl_set *) - isl_map_fix_si((struct isl_map *)set, type, pos, value); -} - -__isl_give isl_map *isl_map_fix(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, isl_int value) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - isl_assert(map->ctx, pos < isl_map_dim(map, type), goto error); - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_fix(map->p[i], type, pos, value); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_fix(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, isl_int value) -{ - return (struct isl_set *)isl_map_fix((isl_map *)set, type, pos, value); -} - -struct isl_map *isl_map_fix_input_si(struct isl_map *map, - unsigned input, int value) -{ - return isl_map_fix_si(map, isl_dim_in, input, value); -} - -struct isl_set *isl_set_fix_dim_si(struct isl_set *set, unsigned dim, int value) -{ - return (struct isl_set *) - isl_map_fix_si((struct isl_map *)set, isl_dim_set, dim, value); -} - -static __isl_give isl_basic_map *basic_map_bound_si( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, int value, int upper) -{ - int j; - - if (!bmap) - return NULL; - isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), goto error); - pos += isl_basic_map_offset(bmap, type); - bmap = isl_basic_map_cow(bmap); - bmap = isl_basic_map_extend_constraints(bmap, 0, 1); - j = isl_basic_map_alloc_inequality(bmap); - if (j < 0) - goto error; - isl_seq_clr(bmap->ineq[j], 1 + isl_basic_map_total_dim(bmap)); - if (upper) { - isl_int_set_si(bmap->ineq[j][pos], -1); - isl_int_set_si(bmap->ineq[j][0], value); - } else { - isl_int_set_si(bmap->ineq[j][pos], 1); - isl_int_set_si(bmap->ineq[j][0], -value); - } - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_lower_bound_si( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, int value) -{ - return basic_map_bound_si(bmap, type, pos, value, 0); -} - -struct isl_basic_set *isl_basic_set_lower_bound_dim(struct isl_basic_set *bset, - unsigned dim, isl_int value) -{ - int j; - - bset = isl_basic_set_cow(bset); - bset = isl_basic_set_extend_constraints(bset, 0, 1); - j = isl_basic_set_alloc_inequality(bset); - if (j < 0) - goto error; - isl_seq_clr(bset->ineq[j], 1 + isl_basic_set_total_dim(bset)); - isl_int_set_si(bset->ineq[j][1 + isl_basic_set_n_param(bset) + dim], 1); - isl_int_neg(bset->ineq[j][0], value); - bset = isl_basic_set_simplify(bset); - return isl_basic_set_finalize(bset); -error: - isl_basic_set_free(bset); - return NULL; -} - -static __isl_give isl_map *map_bound_si(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, int value, int upper) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - isl_assert(map->ctx, pos < isl_map_dim(map, type), goto error); - for (i = 0; i < map->n; ++i) { - map->p[i] = basic_map_bound_si(map->p[i], - type, pos, value, upper); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_map *isl_map_lower_bound_si(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, int value) -{ - return map_bound_si(map, type, pos, value, 0); -} - -__isl_give isl_map *isl_map_upper_bound_si(__isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, int value) -{ - return map_bound_si(map, type, pos, value, 1); -} - -__isl_give isl_set *isl_set_lower_bound_si(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, int value) -{ - return (struct isl_set *) - isl_map_lower_bound_si((struct isl_map *)set, type, pos, value); -} - -__isl_give isl_set *isl_set_upper_bound_si(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, int value) -{ - return isl_map_upper_bound_si(set, type, pos, value); -} - -struct isl_set *isl_set_lower_bound_dim(struct isl_set *set, unsigned dim, - isl_int value) -{ - int i; - - set = isl_set_cow(set); - if (!set) - return NULL; - - isl_assert(set->ctx, dim < isl_set_n_dim(set), goto error); - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_lower_bound_dim(set->p[i], dim, value); - if (!set->p[i]) - goto error; - } - return set; -error: - isl_set_free(set); - return NULL; -} - -struct isl_map *isl_map_reverse(struct isl_map *map) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - map->dim = isl_space_reverse(map->dim); - if (!map->dim) - goto error; - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_reverse(map->p[i]); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -static struct isl_map *isl_basic_map_partial_lexopt( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty, int max) -{ - if (!bmap) - goto error; - if (bmap->ctx->opt->pip == ISL_PIP_PIP) - return isl_pip_basic_map_lexopt(bmap, dom, empty, max); - else - return isl_tab_basic_map_partial_lexopt(bmap, dom, empty, max); -error: - isl_basic_map_free(bmap); - isl_basic_set_free(dom); - if (empty) - *empty = NULL; - return NULL; -} - -struct isl_map *isl_basic_map_partial_lexmax( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty) -{ - return isl_basic_map_partial_lexopt(bmap, dom, empty, 1); -} - -struct isl_map *isl_basic_map_partial_lexmin( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty) -{ - return isl_basic_map_partial_lexopt(bmap, dom, empty, 0); -} - -struct isl_set *isl_basic_set_partial_lexmin( - struct isl_basic_set *bset, struct isl_basic_set *dom, - struct isl_set **empty) -{ - return (struct isl_set *) - isl_basic_map_partial_lexmin((struct isl_basic_map *)bset, - dom, empty); -} - -struct isl_set *isl_basic_set_partial_lexmax( - struct isl_basic_set *bset, struct isl_basic_set *dom, - struct isl_set **empty) -{ - return (struct isl_set *) - isl_basic_map_partial_lexmax((struct isl_basic_map *)bset, - dom, empty); -} - -__isl_give isl_pw_multi_aff *isl_basic_map_partial_lexmin_pw_multi_aff( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty) -{ - return isl_basic_map_partial_lexopt_pw_multi_aff(bmap, dom, empty, 0); -} - -__isl_give isl_pw_multi_aff *isl_basic_map_partial_lexmax_pw_multi_aff( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty) -{ - return isl_basic_map_partial_lexopt_pw_multi_aff(bmap, dom, empty, 1); -} - -__isl_give isl_pw_multi_aff *isl_basic_set_partial_lexmin_pw_multi_aff( - __isl_take isl_basic_set *bset, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty) -{ - return isl_basic_map_partial_lexmin_pw_multi_aff(bset, dom, empty); -} - -__isl_give isl_pw_multi_aff *isl_basic_set_partial_lexmax_pw_multi_aff( - __isl_take isl_basic_set *bset, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty) -{ - return isl_basic_map_partial_lexmax_pw_multi_aff(bset, dom, empty); -} - -__isl_give isl_pw_multi_aff *isl_basic_map_lexopt_pw_multi_aff( - __isl_take isl_basic_map *bmap, int max) -{ - isl_basic_set *dom = NULL; - isl_space *dom_space; - - if (!bmap) - goto error; - dom_space = isl_space_domain(isl_space_copy(bmap->dim)); - dom = isl_basic_set_universe(dom_space); - return isl_basic_map_partial_lexopt_pw_multi_aff(bmap, dom, NULL, max); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_pw_multi_aff *isl_basic_map_lexmin_pw_multi_aff( - __isl_take isl_basic_map *bmap) -{ - return isl_basic_map_lexopt_pw_multi_aff(bmap, 0); -} - -/* Given a basic map "bmap", compute the lexicographically minimal - * (or maximal) image element for each domain element in dom. - * Set *empty to those elements in dom that do not have an image element. - * - * We first make sure the basic sets in dom are disjoint and then - * simply collect the results over each of the basic sets separately. - * We could probably improve the efficiency a bit by moving the union - * domain down into the parametric integer programming. - */ -static __isl_give isl_map *basic_map_partial_lexopt( - __isl_take isl_basic_map *bmap, __isl_take isl_set *dom, - __isl_give isl_set **empty, int max) -{ - int i; - struct isl_map *res; - - dom = isl_set_make_disjoint(dom); - if (!dom) - goto error; - - if (isl_set_plain_is_empty(dom)) { - res = isl_map_empty_like_basic_map(bmap); - *empty = isl_set_empty_like(dom); - isl_set_free(dom); - isl_basic_map_free(bmap); - return res; - } - - res = isl_basic_map_partial_lexopt(isl_basic_map_copy(bmap), - isl_basic_set_copy(dom->p[0]), empty, max); - - for (i = 1; i < dom->n; ++i) { - struct isl_map *res_i; - struct isl_set *empty_i; - - res_i = isl_basic_map_partial_lexopt(isl_basic_map_copy(bmap), - isl_basic_set_copy(dom->p[i]), &empty_i, max); - - res = isl_map_union_disjoint(res, res_i); - *empty = isl_set_union_disjoint(*empty, empty_i); - } - - isl_set_free(dom); - isl_basic_map_free(bmap); - return res; -error: - *empty = NULL; - isl_set_free(dom); - isl_basic_map_free(bmap); - return NULL; -} - -/* Given a map "map", compute the lexicographically minimal - * (or maximal) image element for each domain element in dom. - * Set *empty to those elements in dom that do not have an image element. - * - * We first compute the lexicographically minimal or maximal element - * in the first basic map. This results in a partial solution "res" - * and a subset "todo" of dom that still need to be handled. - * We then consider each of the remaining maps in "map" and successively - * improve both "res" and "todo". - * - * Let res^k and todo^k be the results after k steps and let i = k + 1. - * Assume we are computing the lexicographical maximum. - * We first compute the lexicographically maximal element in basic map i. - * This results in a partial solution res_i and a subset todo_i. - * Then we combine these results with those obtain for the first k basic maps - * to obtain a result that is valid for the first k+1 basic maps. - * In particular, the set where there is no solution is the set where - * there is no solution for the first k basic maps and also no solution - * for the ith basic map, i.e., - * - * todo^i = todo^k * todo_i - * - * On dom(res^k) * dom(res_i), we need to pick the larger of the two - * solutions, arbitrarily breaking ties in favor of res^k. - * That is, when res^k(a) >= res_i(a), we pick res^k and - * when res^k(a) < res_i(a), we pick res_i. (Here, ">=" and "<" denote - * the lexicographic order.) - * In practice, we compute - * - * res^k * (res_i . "<=") - * - * and - * - * res_i * (res^k . "<") - * - * Finally, we consider the symmetric difference of dom(res^k) and dom(res_i), - * where only one of res^k and res_i provides a solution and we simply pick - * that one, i.e., - * - * res^k * todo_i - * and - * res_i * todo^k - * - * Note that we only compute these intersections when dom(res^k) intersects - * dom(res_i). Otherwise, the only effect of these intersections is to - * potentially break up res^k and res_i into smaller pieces. - * We want to avoid such splintering as much as possible. - * In fact, an earlier implementation of this function would look for - * better results in the domain of res^k and for extra results in todo^k, - * but this would always result in a splintering according to todo^k, - * even when the domain of basic map i is disjoint from the domains of - * the previous basic maps. - */ -static __isl_give isl_map *isl_map_partial_lexopt_aligned( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty, int max) -{ - int i; - struct isl_map *res; - struct isl_set *todo; - - if (!map || !dom) - goto error; - - if (isl_map_plain_is_empty(map)) { - if (empty) - *empty = dom; - else - isl_set_free(dom); - return map; - } - - res = basic_map_partial_lexopt(isl_basic_map_copy(map->p[0]), - isl_set_copy(dom), &todo, max); - - for (i = 1; i < map->n; ++i) { - isl_map *lt, *le; - isl_map *res_i; - isl_set *todo_i; - isl_space *dim = isl_space_range(isl_map_get_space(res)); - - res_i = basic_map_partial_lexopt(isl_basic_map_copy(map->p[i]), - isl_set_copy(dom), &todo_i, max); - - if (max) { - lt = isl_map_lex_lt(isl_space_copy(dim)); - le = isl_map_lex_le(dim); - } else { - lt = isl_map_lex_gt(isl_space_copy(dim)); - le = isl_map_lex_ge(dim); - } - lt = isl_map_apply_range(isl_map_copy(res), lt); - lt = isl_map_intersect(lt, isl_map_copy(res_i)); - le = isl_map_apply_range(isl_map_copy(res_i), le); - le = isl_map_intersect(le, isl_map_copy(res)); - - if (!isl_map_is_empty(lt) || !isl_map_is_empty(le)) { - res = isl_map_intersect_domain(res, - isl_set_copy(todo_i)); - res_i = isl_map_intersect_domain(res_i, - isl_set_copy(todo)); - } - - res = isl_map_union_disjoint(res, res_i); - res = isl_map_union_disjoint(res, lt); - res = isl_map_union_disjoint(res, le); - - todo = isl_set_intersect(todo, todo_i); - } - - isl_set_free(dom); - isl_map_free(map); - - if (empty) - *empty = todo; - else - isl_set_free(todo); - - return res; -error: - if (empty) - *empty = NULL; - isl_set_free(dom); - isl_map_free(map); - return NULL; -} - -/* Given a map "map", compute the lexicographically minimal - * (or maximal) image element for each domain element in dom. - * Set *empty to those elements in dom that do not have an image element. - * - * Align parameters if needed and then call isl_map_partial_lexopt_aligned. - */ -static __isl_give isl_map *isl_map_partial_lexopt( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty, int max) -{ - if (!map || !dom) - goto error; - if (isl_space_match(map->dim, isl_dim_param, dom->dim, isl_dim_param)) - return isl_map_partial_lexopt_aligned(map, dom, empty, max); - if (!isl_space_has_named_params(map->dim) || - !isl_space_has_named_params(dom->dim)) - isl_die(map->ctx, isl_error_invalid, - "unaligned unnamed parameters", goto error); - map = isl_map_align_params(map, isl_map_get_space(dom)); - dom = isl_map_align_params(dom, isl_map_get_space(map)); - return isl_map_partial_lexopt_aligned(map, dom, empty, max); -error: - if (empty) - *empty = NULL; - isl_set_free(dom); - isl_map_free(map); - return NULL; -} - -__isl_give isl_map *isl_map_partial_lexmax( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty) -{ - return isl_map_partial_lexopt(map, dom, empty, 1); -} - -__isl_give isl_map *isl_map_partial_lexmin( - __isl_take isl_map *map, __isl_take isl_set *dom, - __isl_give isl_set **empty) -{ - return isl_map_partial_lexopt(map, dom, empty, 0); -} - -__isl_give isl_set *isl_set_partial_lexmin( - __isl_take isl_set *set, __isl_take isl_set *dom, - __isl_give isl_set **empty) -{ - return (struct isl_set *) - isl_map_partial_lexmin((struct isl_map *)set, - dom, empty); -} - -__isl_give isl_set *isl_set_partial_lexmax( - __isl_take isl_set *set, __isl_take isl_set *dom, - __isl_give isl_set **empty) -{ - return (struct isl_set *) - isl_map_partial_lexmax((struct isl_map *)set, - dom, empty); -} - -__isl_give isl_map *isl_basic_map_lexopt(__isl_take isl_basic_map *bmap, int max) -{ - struct isl_basic_set *dom = NULL; - isl_space *dom_dim; - - if (!bmap) - goto error; - dom_dim = isl_space_domain(isl_space_copy(bmap->dim)); - dom = isl_basic_set_universe(dom_dim); - return isl_basic_map_partial_lexopt(bmap, dom, NULL, max); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_map *isl_basic_map_lexmin(__isl_take isl_basic_map *bmap) -{ - return isl_basic_map_lexopt(bmap, 0); -} - -__isl_give isl_map *isl_basic_map_lexmax(__isl_take isl_basic_map *bmap) -{ - return isl_basic_map_lexopt(bmap, 1); -} - -__isl_give isl_set *isl_basic_set_lexmin(__isl_take isl_basic_set *bset) -{ - return (isl_set *)isl_basic_map_lexmin((isl_basic_map *)bset); -} - -__isl_give isl_set *isl_basic_set_lexmax(__isl_take isl_basic_set *bset) -{ - return (isl_set *)isl_basic_map_lexmax((isl_basic_map *)bset); -} - -__isl_give isl_map *isl_map_lexopt(__isl_take isl_map *map, int max) -{ - struct isl_set *dom = NULL; - isl_space *dom_dim; - - if (!map) - goto error; - dom_dim = isl_space_domain(isl_space_copy(map->dim)); - dom = isl_set_universe(dom_dim); - return isl_map_partial_lexopt(map, dom, NULL, max); -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_map *isl_map_lexmin(__isl_take isl_map *map) -{ - return isl_map_lexopt(map, 0); -} - -__isl_give isl_map *isl_map_lexmax(__isl_take isl_map *map) -{ - return isl_map_lexopt(map, 1); -} - -__isl_give isl_set *isl_set_lexmin(__isl_take isl_set *set) -{ - return (isl_set *)isl_map_lexmin((isl_map *)set); -} - -__isl_give isl_set *isl_set_lexmax(__isl_take isl_set *set) -{ - return (isl_set *)isl_map_lexmax((isl_map *)set); -} - -/* Extract the first and only affine expression from list - * and then add it to *pwaff with the given dom. - * This domain is known to be disjoint from other domains - * because of the way isl_basic_map_foreach_lexmax works. - */ -static int update_dim_opt(__isl_take isl_basic_set *dom, - __isl_take isl_aff_list *list, void *user) -{ - isl_ctx *ctx = isl_basic_set_get_ctx(dom); - isl_aff *aff; - isl_pw_aff **pwaff = user; - isl_pw_aff *pwaff_i; - - if (isl_aff_list_n_aff(list) != 1) - isl_die(ctx, isl_error_internal, - "expecting single element list", goto error); - - aff = isl_aff_list_get_aff(list, 0); - pwaff_i = isl_pw_aff_alloc(isl_set_from_basic_set(dom), aff); - - *pwaff = isl_pw_aff_add_disjoint(*pwaff, pwaff_i); - - isl_aff_list_free(list); - - return 0; -error: - isl_basic_set_free(dom); - isl_aff_list_free(list); - return -1; -} - -/* Given a basic map with one output dimension, compute the minimum or - * maximum of that dimension as an isl_pw_aff. - * - * The isl_pw_aff is constructed by having isl_basic_map_foreach_lexopt - * call update_dim_opt on each leaf of the result. - */ -static __isl_give isl_pw_aff *basic_map_dim_opt(__isl_keep isl_basic_map *bmap, - int max) -{ - isl_space *dim = isl_basic_map_get_space(bmap); - isl_pw_aff *pwaff; - int r; - - dim = isl_space_from_domain(isl_space_domain(dim)); - dim = isl_space_add_dims(dim, isl_dim_out, 1); - pwaff = isl_pw_aff_empty(dim); - - r = isl_basic_map_foreach_lexopt(bmap, max, &update_dim_opt, &pwaff); - if (r < 0) - return isl_pw_aff_free(pwaff); - - return pwaff; -} - -/* Compute the minimum or maximum of the given output dimension - * as a function of the parameters and the input dimensions, - * but independently of the other output dimensions. - * - * We first project out the other output dimension and then compute - * the "lexicographic" maximum in each basic map, combining the results - * using isl_pw_aff_union_max. - */ -static __isl_give isl_pw_aff *map_dim_opt(__isl_take isl_map *map, int pos, - int max) -{ - int i; - isl_pw_aff *pwaff; - unsigned n_out; - - n_out = isl_map_dim(map, isl_dim_out); - map = isl_map_project_out(map, isl_dim_out, pos + 1, n_out - (pos + 1)); - map = isl_map_project_out(map, isl_dim_out, 0, pos); - if (!map) - return NULL; - - if (map->n == 0) { - isl_space *dim = isl_map_get_space(map); - dim = isl_space_domain(isl_space_from_range(dim)); - isl_map_free(map); - return isl_pw_aff_empty(dim); - } - - pwaff = basic_map_dim_opt(map->p[0], max); - for (i = 1; i < map->n; ++i) { - isl_pw_aff *pwaff_i; - - pwaff_i = basic_map_dim_opt(map->p[i], max); - pwaff = isl_pw_aff_union_opt(pwaff, pwaff_i, max); - } - - isl_map_free(map); - - return pwaff; -} - -/* Compute the maximum of the given output dimension as a function of the - * parameters and input dimensions, but independently of - * the other output dimensions. - */ -__isl_give isl_pw_aff *isl_map_dim_max(__isl_take isl_map *map, int pos) -{ - return map_dim_opt(map, pos, 1); -} - -/* Compute the minimum or maximum of the given set dimension - * as a function of the parameters, - * but independently of the other set dimensions. - */ -static __isl_give isl_pw_aff *set_dim_opt(__isl_take isl_set *set, int pos, - int max) -{ - return map_dim_opt(set, pos, max); -} - -/* Compute the maximum of the given set dimension as a function of the - * parameters, but independently of the other set dimensions. - */ -__isl_give isl_pw_aff *isl_set_dim_max(__isl_take isl_set *set, int pos) -{ - return set_dim_opt(set, pos, 1); -} - -/* Compute the minimum of the given set dimension as a function of the - * parameters, but independently of the other set dimensions. - */ -__isl_give isl_pw_aff *isl_set_dim_min(__isl_take isl_set *set, int pos) -{ - return set_dim_opt(set, pos, 0); -} - -/* Apply a preimage specified by "mat" on the parameters of "bset". - * bset is assumed to have only parameters and divs. - */ -static struct isl_basic_set *basic_set_parameter_preimage( - struct isl_basic_set *bset, struct isl_mat *mat) -{ - unsigned nparam; - - if (!bset || !mat) - goto error; - - bset->dim = isl_space_cow(bset->dim); - if (!bset->dim) - goto error; - - nparam = isl_basic_set_dim(bset, isl_dim_param); - - isl_assert(bset->ctx, mat->n_row == 1 + nparam, goto error); - - bset->dim->nparam = 0; - bset->dim->n_out = nparam; - bset = isl_basic_set_preimage(bset, mat); - if (bset) { - bset->dim->nparam = bset->dim->n_out; - bset->dim->n_out = 0; - } - return bset; -error: - isl_mat_free(mat); - isl_basic_set_free(bset); - return NULL; -} - -/* Apply a preimage specified by "mat" on the parameters of "set". - * set is assumed to have only parameters and divs. - */ -static struct isl_set *set_parameter_preimage( - struct isl_set *set, struct isl_mat *mat) -{ - isl_space *dim = NULL; - unsigned nparam; - - if (!set || !mat) - goto error; - - dim = isl_space_copy(set->dim); - dim = isl_space_cow(dim); - if (!dim) - goto error; - - nparam = isl_set_dim(set, isl_dim_param); - - isl_assert(set->ctx, mat->n_row == 1 + nparam, goto error); - - dim->nparam = 0; - dim->n_out = nparam; - isl_set_reset_space(set, dim); - set = isl_set_preimage(set, mat); - if (!set) - goto error2; - dim = isl_space_copy(set->dim); - dim = isl_space_cow(dim); - if (!dim) - goto error2; - dim->nparam = dim->n_out; - dim->n_out = 0; - isl_set_reset_space(set, dim); - return set; -error: - isl_space_free(dim); - isl_mat_free(mat); -error2: - isl_set_free(set); - return NULL; -} - -/* Intersect the basic set "bset" with the affine space specified by the - * equalities in "eq". - */ -static struct isl_basic_set *basic_set_append_equalities( - struct isl_basic_set *bset, struct isl_mat *eq) -{ - int i, k; - unsigned len; - - if (!bset || !eq) - goto error; - - bset = isl_basic_set_extend_space(bset, isl_space_copy(bset->dim), 0, - eq->n_row, 0); - if (!bset) - goto error; - - len = 1 + isl_space_dim(bset->dim, isl_dim_all) + bset->extra; - for (i = 0; i < eq->n_row; ++i) { - k = isl_basic_set_alloc_equality(bset); - if (k < 0) - goto error; - isl_seq_cpy(bset->eq[k], eq->row[i], eq->n_col); - isl_seq_clr(bset->eq[k] + eq->n_col, len - eq->n_col); - } - isl_mat_free(eq); - - bset = isl_basic_set_gauss(bset, NULL); - bset = isl_basic_set_finalize(bset); - - return bset; -error: - isl_mat_free(eq); - isl_basic_set_free(bset); - return NULL; -} - -/* Intersect the set "set" with the affine space specified by the - * equalities in "eq". - */ -static struct isl_set *set_append_equalities(struct isl_set *set, - struct isl_mat *eq) -{ - int i; - - if (!set || !eq) - goto error; - - for (i = 0; i < set->n; ++i) { - set->p[i] = basic_set_append_equalities(set->p[i], - isl_mat_copy(eq)); - if (!set->p[i]) - goto error; - } - isl_mat_free(eq); - return set; -error: - isl_mat_free(eq); - isl_set_free(set); - return NULL; -} - -/* Project the given basic set onto its parameter domain, possibly introducing - * new, explicit, existential variables in the constraints. - * The input has parameters and (possibly implicit) existential variables. - * The output has the same parameters, but only - * explicit existentially quantified variables. - * - * The actual projection is performed by pip, but pip doesn't seem - * to like equalities very much, so we first remove the equalities - * among the parameters by performing a variable compression on - * the parameters. Afterward, an inverse transformation is performed - * and the equalities among the parameters are inserted back in. - */ -static struct isl_set *parameter_compute_divs(struct isl_basic_set *bset) -{ - int i, j; - struct isl_mat *eq; - struct isl_mat *T, *T2; - struct isl_set *set; - unsigned nparam, n_div; - - bset = isl_basic_set_cow(bset); - if (!bset) - return NULL; - - if (bset->n_eq == 0) - return isl_basic_set_lexmin(bset); - - isl_basic_set_gauss(bset, NULL); - - nparam = isl_basic_set_dim(bset, isl_dim_param); - n_div = isl_basic_set_dim(bset, isl_dim_div); - - for (i = 0, j = n_div - 1; i < bset->n_eq && j >= 0; --j) { - if (!isl_int_is_zero(bset->eq[i][1 + nparam + j])) - ++i; - } - if (i == bset->n_eq) - return isl_basic_set_lexmin(bset); - - eq = isl_mat_sub_alloc6(bset->ctx, bset->eq, i, bset->n_eq - i, - 0, 1 + nparam); - eq = isl_mat_cow(eq); - T = isl_mat_variable_compression(isl_mat_copy(eq), &T2); - if (T && T->n_col == 0) { - isl_mat_free(T); - isl_mat_free(T2); - isl_mat_free(eq); - bset = isl_basic_set_set_to_empty(bset); - return isl_set_from_basic_set(bset); - } - bset = basic_set_parameter_preimage(bset, T); - - set = isl_basic_set_lexmin(bset); - set = set_parameter_preimage(set, T2); - set = set_append_equalities(set, eq); - return set; -} - -/* Compute an explicit representation for all the existentially - * quantified variables. - * The input and output dimensions are first turned into parameters. - * compute_divs then returns a map with the same parameters and - * no input or output dimensions and the dimension specification - * is reset to that of the input. - */ -static struct isl_map *compute_divs(struct isl_basic_map *bmap) -{ - struct isl_basic_set *bset; - struct isl_set *set; - struct isl_map *map; - isl_space *dim, *orig_dim = NULL; - unsigned nparam; - unsigned n_in; - unsigned n_out; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - nparam = isl_basic_map_dim(bmap, isl_dim_param); - n_in = isl_basic_map_dim(bmap, isl_dim_in); - n_out = isl_basic_map_dim(bmap, isl_dim_out); - dim = isl_space_set_alloc(bmap->ctx, nparam + n_in + n_out, 0); - if (!dim) - goto error; - - orig_dim = bmap->dim; - bmap->dim = dim; - bset = (struct isl_basic_set *)bmap; - - set = parameter_compute_divs(bset); - map = (struct isl_map *)set; - map = isl_map_reset_space(map, orig_dim); - - return map; -error: - isl_basic_map_free(bmap); - return NULL; -} - -int isl_basic_map_divs_known(__isl_keep isl_basic_map *bmap) -{ - int i; - unsigned off; - - if (!bmap) - return -1; - - off = isl_space_dim(bmap->dim, isl_dim_all); - for (i = 0; i < bmap->n_div; ++i) { - if (isl_int_is_zero(bmap->div[i][0])) - return 0; - isl_assert(bmap->ctx, isl_int_is_zero(bmap->div[i][1+1+off+i]), - return -1); - } - return 1; -} - -static int map_divs_known(__isl_keep isl_map *map) -{ - int i; - - if (!map) - return -1; - - for (i = 0; i < map->n; ++i) { - int known = isl_basic_map_divs_known(map->p[i]); - if (known <= 0) - return known; - } - - return 1; -} - -/* If bmap contains any unknown divs, then compute explicit - * expressions for them. However, this computation may be - * quite expensive, so first try to remove divs that aren't - * strictly needed. - */ -struct isl_map *isl_basic_map_compute_divs(struct isl_basic_map *bmap) -{ - int known; - struct isl_map *map; - - known = isl_basic_map_divs_known(bmap); - if (known < 0) - goto error; - if (known) - return isl_map_from_basic_map(bmap); - - bmap = isl_basic_map_drop_redundant_divs(bmap); - - known = isl_basic_map_divs_known(bmap); - if (known < 0) - goto error; - if (known) - return isl_map_from_basic_map(bmap); - - map = compute_divs(bmap); - return map; -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_map *isl_map_compute_divs(struct isl_map *map) -{ - int i; - int known; - struct isl_map *res; - - if (!map) - return NULL; - if (map->n == 0) - return map; - - known = map_divs_known(map); - if (known < 0) { - isl_map_free(map); - return NULL; - } - if (known) - return map; - - res = isl_basic_map_compute_divs(isl_basic_map_copy(map->p[0])); - for (i = 1 ; i < map->n; ++i) { - struct isl_map *r2; - r2 = isl_basic_map_compute_divs(isl_basic_map_copy(map->p[i])); - if (ISL_F_ISSET(map, ISL_MAP_DISJOINT)) - res = isl_map_union_disjoint(res, r2); - else - res = isl_map_union(res, r2); - } - isl_map_free(map); - - return res; -} - -struct isl_set *isl_basic_set_compute_divs(struct isl_basic_set *bset) -{ - return (struct isl_set *) - isl_basic_map_compute_divs((struct isl_basic_map *)bset); -} - -struct isl_set *isl_set_compute_divs(struct isl_set *set) -{ - return (struct isl_set *) - isl_map_compute_divs((struct isl_map *)set); -} - -struct isl_set *isl_map_domain(struct isl_map *map) -{ - int i; - struct isl_set *set; - - if (!map) - goto error; - - map = isl_map_cow(map); - if (!map) - return NULL; - - set = (struct isl_set *)map; - set->dim = isl_space_domain(set->dim); - if (!set->dim) - goto error; - for (i = 0; i < map->n; ++i) { - set->p[i] = isl_basic_map_domain(map->p[i]); - if (!set->p[i]) - goto error; - } - ISL_F_CLR(set, ISL_MAP_DISJOINT); - ISL_F_CLR(set, ISL_SET_NORMALIZED); - return set; -error: - isl_map_free(map); - return NULL; -} - -static __isl_give isl_map *map_union_disjoint(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - int i; - unsigned flags = 0; - struct isl_map *map = NULL; - - if (!map1 || !map2) - goto error; - - if (map1->n == 0) { - isl_map_free(map1); - return map2; - } - if (map2->n == 0) { - isl_map_free(map2); - return map1; - } - - isl_assert(map1->ctx, isl_space_is_equal(map1->dim, map2->dim), goto error); - - if (ISL_F_ISSET(map1, ISL_MAP_DISJOINT) && - ISL_F_ISSET(map2, ISL_MAP_DISJOINT)) - ISL_FL_SET(flags, ISL_MAP_DISJOINT); - - map = isl_map_alloc_space(isl_space_copy(map1->dim), - map1->n + map2->n, flags); - if (!map) - goto error; - for (i = 0; i < map1->n; ++i) { - map = isl_map_add_basic_map(map, - isl_basic_map_copy(map1->p[i])); - if (!map) - goto error; - } - for (i = 0; i < map2->n; ++i) { - map = isl_map_add_basic_map(map, - isl_basic_map_copy(map2->p[i])); - if (!map) - goto error; - } - isl_map_free(map1); - isl_map_free(map2); - return map; -error: - isl_map_free(map); - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -__isl_give isl_map *isl_map_union_disjoint(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - return isl_map_align_params_map_map_and(map1, map2, &map_union_disjoint); -} - -struct isl_map *isl_map_union(struct isl_map *map1, struct isl_map *map2) -{ - map1 = isl_map_union_disjoint(map1, map2); - if (!map1) - return NULL; - if (map1->n > 1) - ISL_F_CLR(map1, ISL_MAP_DISJOINT); - return map1; -} - -struct isl_set *isl_set_union_disjoint( - struct isl_set *set1, struct isl_set *set2) -{ - return (struct isl_set *) - isl_map_union_disjoint( - (struct isl_map *)set1, (struct isl_map *)set2); -} - -struct isl_set *isl_set_union(struct isl_set *set1, struct isl_set *set2) -{ - return (struct isl_set *) - isl_map_union((struct isl_map *)set1, (struct isl_map *)set2); -} - -static __isl_give isl_map *map_intersect_range(__isl_take isl_map *map, - __isl_take isl_set *set) -{ - unsigned flags = 0; - struct isl_map *result; - int i, j; - - if (!map || !set) - goto error; - - if (!isl_space_match(map->dim, isl_dim_param, set->dim, isl_dim_param)) - isl_die(set->ctx, isl_error_invalid, - "parameters don't match", goto error); - - if (isl_space_dim(set->dim, isl_dim_set) != 0 && - !isl_map_compatible_range(map, set)) - isl_die(set->ctx, isl_error_invalid, - "incompatible spaces", goto error); - - if (isl_set_plain_is_universe(set)) { - isl_set_free(set); - return map; - } - - if (ISL_F_ISSET(map, ISL_MAP_DISJOINT) && - ISL_F_ISSET(set, ISL_MAP_DISJOINT)) - ISL_FL_SET(flags, ISL_MAP_DISJOINT); - - result = isl_map_alloc_space(isl_space_copy(map->dim), - map->n * set->n, flags); - if (!result) - goto error; - for (i = 0; i < map->n; ++i) - for (j = 0; j < set->n; ++j) { - result = isl_map_add_basic_map(result, - isl_basic_map_intersect_range( - isl_basic_map_copy(map->p[i]), - isl_basic_set_copy(set->p[j]))); - if (!result) - goto error; - } - isl_map_free(map); - isl_set_free(set); - return result; -error: - isl_map_free(map); - isl_set_free(set); - return NULL; -} - -__isl_give isl_map *isl_map_intersect_range(__isl_take isl_map *map, - __isl_take isl_set *set) -{ - return isl_map_align_params_map_map_and(map, set, &map_intersect_range); -} - -struct isl_map *isl_map_intersect_domain( - struct isl_map *map, struct isl_set *set) -{ - return isl_map_reverse( - isl_map_intersect_range(isl_map_reverse(map), set)); -} - -static __isl_give isl_map *map_apply_domain(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - if (!map1 || !map2) - goto error; - map1 = isl_map_reverse(map1); - map1 = isl_map_apply_range(map1, map2); - return isl_map_reverse(map1); -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -__isl_give isl_map *isl_map_apply_domain(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - return isl_map_align_params_map_map_and(map1, map2, &map_apply_domain); -} - -static __isl_give isl_map *map_apply_range(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - isl_space *dim_result; - struct isl_map *result; - int i, j; - - if (!map1 || !map2) - goto error; - - dim_result = isl_space_join(isl_space_copy(map1->dim), - isl_space_copy(map2->dim)); - - result = isl_map_alloc_space(dim_result, map1->n * map2->n, 0); - if (!result) - goto error; - for (i = 0; i < map1->n; ++i) - for (j = 0; j < map2->n; ++j) { - result = isl_map_add_basic_map(result, - isl_basic_map_apply_range( - isl_basic_map_copy(map1->p[i]), - isl_basic_map_copy(map2->p[j]))); - if (!result) - goto error; - } - isl_map_free(map1); - isl_map_free(map2); - if (result && result->n <= 1) - ISL_F_SET(result, ISL_MAP_DISJOINT); - return result; -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -__isl_give isl_map *isl_map_apply_range(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - return isl_map_align_params_map_map_and(map1, map2, &map_apply_range); -} - -/* - * returns range - domain - */ -struct isl_basic_set *isl_basic_map_deltas(struct isl_basic_map *bmap) -{ - isl_space *dims, *target_dim; - struct isl_basic_set *bset; - unsigned dim; - unsigned nparam; - int i; - - if (!bmap) - goto error; - isl_assert(bmap->ctx, isl_space_tuple_match(bmap->dim, isl_dim_in, - bmap->dim, isl_dim_out), - goto error); - target_dim = isl_space_domain(isl_basic_map_get_space(bmap)); - dim = isl_basic_map_n_in(bmap); - nparam = isl_basic_map_n_param(bmap); - bset = isl_basic_set_from_basic_map(bmap); - bset = isl_basic_set_cow(bset); - dims = isl_basic_set_get_space(bset); - dims = isl_space_add_dims(dims, isl_dim_set, dim); - bset = isl_basic_set_extend_space(bset, dims, 0, dim, 0); - bset = isl_basic_set_swap_vars(bset, 2*dim); - for (i = 0; i < dim; ++i) { - int j = isl_basic_map_alloc_equality( - (struct isl_basic_map *)bset); - if (j < 0) - goto error; - isl_seq_clr(bset->eq[j], 1 + isl_basic_set_total_dim(bset)); - isl_int_set_si(bset->eq[j][1+nparam+i], 1); - isl_int_set_si(bset->eq[j][1+nparam+dim+i], 1); - isl_int_set_si(bset->eq[j][1+nparam+2*dim+i], -1); - } - bset = isl_basic_set_project_out(bset, isl_dim_set, dim, 2*dim); - bset = isl_basic_set_reset_space(bset, target_dim); - return bset; -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* - * returns range - domain - */ -struct isl_set *isl_map_deltas(struct isl_map *map) -{ - int i; - isl_space *dim; - struct isl_set *result; - - if (!map) - return NULL; - - isl_assert(map->ctx, isl_space_tuple_match(map->dim, isl_dim_in, - map->dim, isl_dim_out), - goto error); - dim = isl_map_get_space(map); - dim = isl_space_domain(dim); - result = isl_set_alloc_space(dim, map->n, 0); - if (!result) - goto error; - for (i = 0; i < map->n; ++i) - result = isl_set_add_basic_set(result, - isl_basic_map_deltas(isl_basic_map_copy(map->p[i]))); - isl_map_free(map); - return result; -error: - isl_map_free(map); - return NULL; -} - -/* - * returns [domain -> range] -> range - domain - */ -__isl_give isl_basic_map *isl_basic_map_deltas_map( - __isl_take isl_basic_map *bmap) -{ - int i, k; - isl_space *dim; - isl_basic_map *domain; - int nparam, n; - unsigned total; - - if (!isl_space_tuple_match(bmap->dim, isl_dim_in, bmap->dim, isl_dim_out)) - isl_die(bmap->ctx, isl_error_invalid, - "domain and range don't match", goto error); - - nparam = isl_basic_map_dim(bmap, isl_dim_param); - n = isl_basic_map_dim(bmap, isl_dim_in); - - dim = isl_space_from_range(isl_space_domain(isl_basic_map_get_space(bmap))); - domain = isl_basic_map_universe(dim); - - bmap = isl_basic_map_from_domain(isl_basic_map_wrap(bmap)); - bmap = isl_basic_map_apply_range(bmap, domain); - bmap = isl_basic_map_extend_constraints(bmap, n, 0); - - total = isl_basic_map_total_dim(bmap); - - for (i = 0; i < n; ++i) { - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->eq[k], 1 + total); - isl_int_set_si(bmap->eq[k][1 + nparam + i], 1); - isl_int_set_si(bmap->eq[k][1 + nparam + n + i], -1); - isl_int_set_si(bmap->eq[k][1 + nparam + n + n + i], 1); - } - - bmap = isl_basic_map_gauss(bmap, NULL); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* - * returns [domain -> range] -> range - domain - */ -__isl_give isl_map *isl_map_deltas_map(__isl_take isl_map *map) -{ - int i; - isl_space *domain_dim; - - if (!map) - return NULL; - - if (!isl_space_tuple_match(map->dim, isl_dim_in, map->dim, isl_dim_out)) - isl_die(map->ctx, isl_error_invalid, - "domain and range don't match", goto error); - - map = isl_map_cow(map); - if (!map) - return NULL; - - domain_dim = isl_space_from_range(isl_space_domain(isl_map_get_space(map))); - map->dim = isl_space_from_domain(isl_space_wrap(map->dim)); - map->dim = isl_space_join(map->dim, domain_dim); - if (!map->dim) - goto error; - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_deltas_map(map->p[i]); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give struct isl_basic_map *basic_map_identity(__isl_take isl_space *dims) -{ - struct isl_basic_map *bmap; - unsigned nparam; - unsigned dim; - int i; - - if (!dims) - return NULL; - - nparam = dims->nparam; - dim = dims->n_out; - bmap = isl_basic_map_alloc_space(dims, 0, dim, 0); - if (!bmap) - goto error; - - for (i = 0; i < dim; ++i) { - int j = isl_basic_map_alloc_equality(bmap); - if (j < 0) - goto error; - isl_seq_clr(bmap->eq[j], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->eq[j][1+nparam+i], 1); - isl_int_set_si(bmap->eq[j][1+nparam+dim+i], -1); - } - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_identity(__isl_take isl_space *dim) -{ - if (!dim) - return NULL; - if (dim->n_in != dim->n_out) - isl_die(dim->ctx, isl_error_invalid, - "number of input and output dimensions needs to be " - "the same", goto error); - return basic_map_identity(dim); -error: - isl_space_free(dim); - return NULL; -} - -struct isl_basic_map *isl_basic_map_identity_like(struct isl_basic_map *model) -{ - if (!model || !model->dim) - return NULL; - return isl_basic_map_identity(isl_space_copy(model->dim)); -} - -__isl_give isl_map *isl_map_identity(__isl_take isl_space *dim) -{ - return isl_map_from_basic_map(isl_basic_map_identity(dim)); -} - -struct isl_map *isl_map_identity_like(struct isl_map *model) -{ - if (!model || !model->dim) - return NULL; - return isl_map_identity(isl_space_copy(model->dim)); -} - -struct isl_map *isl_map_identity_like_basic_map(struct isl_basic_map *model) -{ - if (!model || !model->dim) - return NULL; - return isl_map_identity(isl_space_copy(model->dim)); -} - -__isl_give isl_map *isl_set_identity(__isl_take isl_set *set) -{ - isl_space *dim = isl_set_get_space(set); - isl_map *id; - id = isl_map_identity(isl_space_map_from_set(dim)); - return isl_map_intersect_range(id, set); -} - -/* Construct a basic set with all set dimensions having only non-negative - * values. - */ -__isl_give isl_basic_set *isl_basic_set_positive_orthant( - __isl_take isl_space *space) -{ - int i; - unsigned nparam; - unsigned dim; - struct isl_basic_set *bset; - - if (!space) - return NULL; - nparam = space->nparam; - dim = space->n_out; - bset = isl_basic_set_alloc_space(space, 0, 0, dim); - if (!bset) - return NULL; - for (i = 0; i < dim; ++i) { - int k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_clr(bset->ineq[k], 1 + isl_basic_set_total_dim(bset)); - isl_int_set_si(bset->ineq[k][1 + nparam + i], 1); - } - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Construct the half-space x_pos >= 0. - */ -static __isl_give isl_basic_set *nonneg_halfspace(__isl_take isl_space *dim, - int pos) -{ - int k; - isl_basic_set *nonneg; - - nonneg = isl_basic_set_alloc_space(dim, 0, 0, 1); - k = isl_basic_set_alloc_inequality(nonneg); - if (k < 0) - goto error; - isl_seq_clr(nonneg->ineq[k], 1 + isl_basic_set_total_dim(nonneg)); - isl_int_set_si(nonneg->ineq[k][pos], 1); - - return isl_basic_set_finalize(nonneg); -error: - isl_basic_set_free(nonneg); - return NULL; -} - -/* Construct the half-space x_pos <= -1. - */ -static __isl_give isl_basic_set *neg_halfspace(__isl_take isl_space *dim, int pos) -{ - int k; - isl_basic_set *neg; - - neg = isl_basic_set_alloc_space(dim, 0, 0, 1); - k = isl_basic_set_alloc_inequality(neg); - if (k < 0) - goto error; - isl_seq_clr(neg->ineq[k], 1 + isl_basic_set_total_dim(neg)); - isl_int_set_si(neg->ineq[k][0], -1); - isl_int_set_si(neg->ineq[k][pos], -1); - - return isl_basic_set_finalize(neg); -error: - isl_basic_set_free(neg); - return NULL; -} - -__isl_give isl_set *isl_set_split_dims(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - isl_basic_set *nonneg; - isl_basic_set *neg; - - if (!set) - return NULL; - if (n == 0) - return set; - - isl_assert(set->ctx, first + n <= isl_set_dim(set, type), goto error); - - for (i = 0; i < n; ++i) { - nonneg = nonneg_halfspace(isl_set_get_space(set), - pos(set->dim, type) + first + i); - neg = neg_halfspace(isl_set_get_space(set), - pos(set->dim, type) + first + i); - - set = isl_set_intersect(set, isl_basic_set_union(nonneg, neg)); - } - - return set; -error: - isl_set_free(set); - return NULL; -} - -static int foreach_orthant(__isl_take isl_set *set, int *signs, int first, - int len, int (*fn)(__isl_take isl_set *orthant, int *signs, void *user), - void *user) -{ - isl_set *half; - - if (!set) - return -1; - if (isl_set_plain_is_empty(set)) { - isl_set_free(set); - return 0; - } - if (first == len) - return fn(set, signs, user); - - signs[first] = 1; - half = isl_set_from_basic_set(nonneg_halfspace(isl_set_get_space(set), - 1 + first)); - half = isl_set_intersect(half, isl_set_copy(set)); - if (foreach_orthant(half, signs, first + 1, len, fn, user) < 0) - goto error; - - signs[first] = -1; - half = isl_set_from_basic_set(neg_halfspace(isl_set_get_space(set), - 1 + first)); - half = isl_set_intersect(half, set); - return foreach_orthant(half, signs, first + 1, len, fn, user); -error: - isl_set_free(set); - return -1; -} - -/* Call "fn" on the intersections of "set" with each of the orthants - * (except for obviously empty intersections). The orthant is identified - * by the signs array, with each entry having value 1 or -1 according - * to the sign of the corresponding variable. - */ -int isl_set_foreach_orthant(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_set *orthant, int *signs, void *user), - void *user) -{ - unsigned nparam; - unsigned nvar; - int *signs; - int r; - - if (!set) - return -1; - if (isl_set_plain_is_empty(set)) - return 0; - - nparam = isl_set_dim(set, isl_dim_param); - nvar = isl_set_dim(set, isl_dim_set); - - signs = isl_alloc_array(set->ctx, int, nparam + nvar); - - r = foreach_orthant(isl_set_copy(set), signs, 0, nparam + nvar, - fn, user); - - free(signs); - - return r; -} - -int isl_set_is_equal(struct isl_set *set1, struct isl_set *set2) -{ - return isl_map_is_equal((struct isl_map *)set1, (struct isl_map *)set2); -} - -int isl_basic_map_is_subset( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - int is_subset; - struct isl_map *map1; - struct isl_map *map2; - - if (!bmap1 || !bmap2) - return -1; - - map1 = isl_map_from_basic_map(isl_basic_map_copy(bmap1)); - map2 = isl_map_from_basic_map(isl_basic_map_copy(bmap2)); - - is_subset = isl_map_is_subset(map1, map2); - - isl_map_free(map1); - isl_map_free(map2); - - return is_subset; -} - -int isl_basic_map_is_equal( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - int is_subset; - - if (!bmap1 || !bmap2) - return -1; - is_subset = isl_basic_map_is_subset(bmap1, bmap2); - if (is_subset != 1) - return is_subset; - is_subset = isl_basic_map_is_subset(bmap2, bmap1); - return is_subset; -} - -int isl_basic_set_is_equal( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - return isl_basic_map_is_equal( - (struct isl_basic_map *)bset1, (struct isl_basic_map *)bset2); -} - -int isl_map_is_empty(struct isl_map *map) -{ - int i; - int is_empty; - - if (!map) - return -1; - for (i = 0; i < map->n; ++i) { - is_empty = isl_basic_map_is_empty(map->p[i]); - if (is_empty < 0) - return -1; - if (!is_empty) - return 0; - } - return 1; -} - -int isl_map_plain_is_empty(__isl_keep isl_map *map) -{ - return map ? map->n == 0 : -1; -} - -int isl_map_fast_is_empty(__isl_keep isl_map *map) -{ - return isl_map_plain_is_empty(map); -} - -int isl_set_plain_is_empty(struct isl_set *set) -{ - return set ? set->n == 0 : -1; -} - -int isl_set_fast_is_empty(__isl_keep isl_set *set) -{ - return isl_set_plain_is_empty(set); -} - -int isl_set_is_empty(struct isl_set *set) -{ - return isl_map_is_empty((struct isl_map *)set); -} - -int isl_map_has_equal_space(__isl_keep isl_map *map1, __isl_keep isl_map *map2) -{ - if (!map1 || !map2) - return -1; - - return isl_space_is_equal(map1->dim, map2->dim); -} - -int isl_set_has_equal_space(__isl_keep isl_set *set1, __isl_keep isl_set *set2) -{ - if (!set1 || !set2) - return -1; - - return isl_space_is_equal(set1->dim, set2->dim); -} - -static int map_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2) -{ - int is_subset; - - if (!map1 || !map2) - return -1; - is_subset = isl_map_is_subset(map1, map2); - if (is_subset != 1) - return is_subset; - is_subset = isl_map_is_subset(map2, map1); - return is_subset; -} - -int isl_map_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2) -{ - return isl_map_align_params_map_map_and_test(map1, map2, &map_is_equal); -} - -int isl_basic_map_is_strict_subset( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - int is_subset; - - if (!bmap1 || !bmap2) - return -1; - is_subset = isl_basic_map_is_subset(bmap1, bmap2); - if (is_subset != 1) - return is_subset; - is_subset = isl_basic_map_is_subset(bmap2, bmap1); - if (is_subset == -1) - return is_subset; - return !is_subset; -} - -int isl_map_is_strict_subset(struct isl_map *map1, struct isl_map *map2) -{ - int is_subset; - - if (!map1 || !map2) - return -1; - is_subset = isl_map_is_subset(map1, map2); - if (is_subset != 1) - return is_subset; - is_subset = isl_map_is_subset(map2, map1); - if (is_subset == -1) - return is_subset; - return !is_subset; -} - -int isl_set_is_strict_subset(__isl_keep isl_set *set1, __isl_keep isl_set *set2) -{ - return isl_map_is_strict_subset((isl_map *)set1, (isl_map *)set2); -} - -int isl_basic_map_is_universe(struct isl_basic_map *bmap) -{ - if (!bmap) - return -1; - return bmap->n_eq == 0 && bmap->n_ineq == 0; -} - -int isl_basic_set_is_universe(struct isl_basic_set *bset) -{ - if (!bset) - return -1; - return bset->n_eq == 0 && bset->n_ineq == 0; -} - -int isl_map_plain_is_universe(__isl_keep isl_map *map) -{ - int i; - - if (!map) - return -1; - - for (i = 0; i < map->n; ++i) { - int r = isl_basic_map_is_universe(map->p[i]); - if (r < 0 || r) - return r; - } - - return 0; -} - -int isl_set_plain_is_universe(__isl_keep isl_set *set) -{ - return isl_map_plain_is_universe((isl_map *) set); -} - -int isl_set_fast_is_universe(__isl_keep isl_set *set) -{ - return isl_set_plain_is_universe(set); -} - -int isl_basic_map_is_empty(struct isl_basic_map *bmap) -{ - struct isl_basic_set *bset = NULL; - struct isl_vec *sample = NULL; - int empty; - unsigned total; - - if (!bmap) - return -1; - - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) - return 1; - - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL)) { - struct isl_basic_map *copy = isl_basic_map_copy(bmap); - copy = isl_basic_map_remove_redundancies(copy); - empty = ISL_F_ISSET(copy, ISL_BASIC_MAP_EMPTY); - isl_basic_map_free(copy); - return empty; - } - - total = 1 + isl_basic_map_total_dim(bmap); - if (bmap->sample && bmap->sample->size == total) { - int contains = isl_basic_map_contains(bmap, bmap->sample); - if (contains < 0) - return -1; - if (contains) - return 0; - } - isl_vec_free(bmap->sample); - bmap->sample = NULL; - bset = isl_basic_map_underlying_set(isl_basic_map_copy(bmap)); - if (!bset) - return -1; - sample = isl_basic_set_sample_vec(bset); - if (!sample) - return -1; - empty = sample->size == 0; - isl_vec_free(bmap->sample); - bmap->sample = sample; - if (empty) - ISL_F_SET(bmap, ISL_BASIC_MAP_EMPTY); - - return empty; -} - -int isl_basic_map_plain_is_empty(__isl_keep isl_basic_map *bmap) -{ - if (!bmap) - return -1; - return ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY); -} - -int isl_basic_map_fast_is_empty(__isl_keep isl_basic_map *bmap) -{ - return isl_basic_map_plain_is_empty(bmap); -} - -int isl_basic_set_plain_is_empty(__isl_keep isl_basic_set *bset) -{ - if (!bset) - return -1; - return ISL_F_ISSET(bset, ISL_BASIC_SET_EMPTY); -} - -int isl_basic_set_fast_is_empty(__isl_keep isl_basic_set *bset) -{ - return isl_basic_set_plain_is_empty(bset); -} - -int isl_basic_set_is_empty(struct isl_basic_set *bset) -{ - return isl_basic_map_is_empty((struct isl_basic_map *)bset); -} - -struct isl_map *isl_basic_map_union( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - struct isl_map *map; - if (!bmap1 || !bmap2) - return NULL; - - isl_assert(bmap1->ctx, isl_space_is_equal(bmap1->dim, bmap2->dim), goto error); - - map = isl_map_alloc_space(isl_space_copy(bmap1->dim), 2, 0); - if (!map) - goto error; - map = isl_map_add_basic_map(map, bmap1); - map = isl_map_add_basic_map(map, bmap2); - return map; -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -struct isl_set *isl_basic_set_union( - struct isl_basic_set *bset1, struct isl_basic_set *bset2) -{ - return (struct isl_set *)isl_basic_map_union( - (struct isl_basic_map *)bset1, - (struct isl_basic_map *)bset2); -} - -/* Order divs such that any div only depends on previous divs */ -struct isl_basic_map *isl_basic_map_order_divs(struct isl_basic_map *bmap) -{ - int i; - unsigned off; - - if (!bmap) - return NULL; - - off = isl_space_dim(bmap->dim, isl_dim_all); - - for (i = 0; i < bmap->n_div; ++i) { - int pos; - if (isl_int_is_zero(bmap->div[i][0])) - continue; - pos = isl_seq_first_non_zero(bmap->div[i]+1+1+off+i, - bmap->n_div-i); - if (pos == -1) - continue; - isl_basic_map_swap_div(bmap, i, i + pos); - --i; - } - return bmap; -} - -struct isl_basic_set *isl_basic_set_order_divs(struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_order_divs((struct isl_basic_map *)bset); -} - -__isl_give isl_map *isl_map_order_divs(__isl_take isl_map *map) -{ - int i; - - if (!map) - return 0; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_order_divs(map->p[i]); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Apply the expansion computed by isl_merge_divs. - * The expansion itself is given by "exp" while the resulting - * list of divs is given by "div". - */ -__isl_give isl_basic_set *isl_basic_set_expand_divs( - __isl_take isl_basic_set *bset, __isl_take isl_mat *div, int *exp) -{ - int i, j; - int n_div; - - bset = isl_basic_set_cow(bset); - if (!bset || !div) - goto error; - - if (div->n_row < bset->n_div) - isl_die(isl_mat_get_ctx(div), isl_error_invalid, - "not an expansion", goto error); - - bset = isl_basic_map_extend_space(bset, isl_space_copy(bset->dim), - div->n_row - bset->n_div, 0, - 2 * (div->n_row - bset->n_div)); - - n_div = bset->n_div; - for (i = n_div; i < div->n_row; ++i) - if (isl_basic_set_alloc_div(bset) < 0) - goto error; - - j = n_div - 1; - for (i = div->n_row - 1; i >= 0; --i) { - if (j >= 0 && exp[j] == i) { - if (i != j) - isl_basic_map_swap_div(bset, i, j); - j--; - } else { - isl_seq_cpy(bset->div[i], div->row[i], div->n_col); - if (isl_basic_map_add_div_constraints(bset, i) < 0) - goto error; - } - } - - isl_mat_free(div); - return bset; -error: - isl_basic_set_free(bset); - isl_mat_free(div); - return NULL; -} - -/* Look for a div in dst that corresponds to the div "div" in src. - * The divs before "div" in src and dst are assumed to be the same. - * - * Returns -1 if no corresponding div was found and the position - * of the corresponding div in dst otherwise. - */ -static int find_div(struct isl_basic_map *dst, - struct isl_basic_map *src, unsigned div) -{ - int i; - - unsigned total = isl_space_dim(src->dim, isl_dim_all); - - isl_assert(dst->ctx, div <= dst->n_div, return -1); - for (i = div; i < dst->n_div; ++i) - if (isl_seq_eq(dst->div[i], src->div[div], 1+1+total+div) && - isl_seq_first_non_zero(dst->div[i]+1+1+total+div, - dst->n_div - div) == -1) - return i; - return -1; -} - -struct isl_basic_map *isl_basic_map_align_divs( - struct isl_basic_map *dst, struct isl_basic_map *src) -{ - int i; - unsigned total = isl_space_dim(src->dim, isl_dim_all); - - if (!dst || !src) - goto error; - - if (src->n_div == 0) - return dst; - - for (i = 0; i < src->n_div; ++i) - isl_assert(src->ctx, !isl_int_is_zero(src->div[i][0]), goto error); - - src = isl_basic_map_order_divs(src); - dst = isl_basic_map_cow(dst); - dst = isl_basic_map_extend_space(dst, isl_space_copy(dst->dim), - src->n_div, 0, 2 * src->n_div); - if (!dst) - return NULL; - for (i = 0; i < src->n_div; ++i) { - int j = find_div(dst, src, i); - if (j < 0) { - j = isl_basic_map_alloc_div(dst); - if (j < 0) - goto error; - isl_seq_cpy(dst->div[j], src->div[i], 1+1+total+i); - isl_seq_clr(dst->div[j]+1+1+total+i, dst->n_div - i); - if (isl_basic_map_add_div_constraints(dst, j) < 0) - goto error; - } - if (j != i) - isl_basic_map_swap_div(dst, i, j); - } - return dst; -error: - isl_basic_map_free(dst); - return NULL; -} - -struct isl_basic_set *isl_basic_set_align_divs( - struct isl_basic_set *dst, struct isl_basic_set *src) -{ - return (struct isl_basic_set *)isl_basic_map_align_divs( - (struct isl_basic_map *)dst, (struct isl_basic_map *)src); -} - -struct isl_map *isl_map_align_divs(struct isl_map *map) -{ - int i; - - if (!map) - return NULL; - if (map->n == 0) - return map; - map = isl_map_compute_divs(map); - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 1; i < map->n; ++i) - map->p[0] = isl_basic_map_align_divs(map->p[0], map->p[i]); - for (i = 1; i < map->n; ++i) - map->p[i] = isl_basic_map_align_divs(map->p[i], map->p[0]); - - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -} - -struct isl_set *isl_set_align_divs(struct isl_set *set) -{ - return (struct isl_set *)isl_map_align_divs((struct isl_map *)set); -} - -static __isl_give isl_set *set_apply( __isl_take isl_set *set, - __isl_take isl_map *map) -{ - if (!set || !map) - goto error; - isl_assert(set->ctx, isl_map_compatible_domain(map, set), goto error); - map = isl_map_intersect_domain(map, set); - set = isl_map_range(map); - return set; -error: - isl_set_free(set); - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_apply( __isl_take isl_set *set, - __isl_take isl_map *map) -{ - return isl_map_align_params_map_map_and(set, map, &set_apply); -} - -/* There is no need to cow as removing empty parts doesn't change - * the meaning of the set. - */ -struct isl_map *isl_map_remove_empty_parts(struct isl_map *map) -{ - int i; - - if (!map) - return NULL; - - for (i = map->n-1; i >= 0; --i) { - if (!ISL_F_ISSET(map->p[i], ISL_BASIC_MAP_EMPTY)) - continue; - isl_basic_map_free(map->p[i]); - if (i != map->n-1) { - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - map->p[i] = map->p[map->n-1]; - } - map->n--; - } - - return map; -} - -struct isl_set *isl_set_remove_empty_parts(struct isl_set *set) -{ - return (struct isl_set *) - isl_map_remove_empty_parts((struct isl_map *)set); -} - -struct isl_basic_map *isl_map_copy_basic_map(struct isl_map *map) -{ - struct isl_basic_map *bmap; - if (!map || map->n == 0) - return NULL; - bmap = map->p[map->n-1]; - isl_assert(map->ctx, ISL_F_ISSET(bmap, ISL_BASIC_SET_FINAL), return NULL); - return isl_basic_map_copy(bmap); -} - -struct isl_basic_set *isl_set_copy_basic_set(struct isl_set *set) -{ - return (struct isl_basic_set *) - isl_map_copy_basic_map((struct isl_map *)set); -} - -__isl_give isl_map *isl_map_drop_basic_map(__isl_take isl_map *map, - __isl_keep isl_basic_map *bmap) -{ - int i; - - if (!map || !bmap) - goto error; - for (i = map->n-1; i >= 0; --i) { - if (map->p[i] != bmap) - continue; - map = isl_map_cow(map); - if (!map) - goto error; - isl_basic_map_free(map->p[i]); - if (i != map->n-1) { - ISL_F_CLR(map, ISL_SET_NORMALIZED); - map->p[i] = map->p[map->n-1]; - } - map->n--; - return map; - } - return map; -error: - isl_map_free(map); - return NULL; -} - -struct isl_set *isl_set_drop_basic_set(struct isl_set *set, - struct isl_basic_set *bset) -{ - return (struct isl_set *)isl_map_drop_basic_map((struct isl_map *)set, - (struct isl_basic_map *)bset); -} - -/* Given two basic sets bset1 and bset2, compute the maximal difference - * between the values of dimension pos in bset1 and those in bset2 - * for any common value of the parameters and dimensions preceding pos. - */ -static enum isl_lp_result basic_set_maximal_difference_at( - __isl_keep isl_basic_set *bset1, __isl_keep isl_basic_set *bset2, - int pos, isl_int *opt) -{ - isl_space *dims; - struct isl_basic_map *bmap1 = NULL; - struct isl_basic_map *bmap2 = NULL; - struct isl_ctx *ctx; - struct isl_vec *obj; - unsigned total; - unsigned nparam; - unsigned dim1, dim2; - enum isl_lp_result res; - - if (!bset1 || !bset2) - return isl_lp_error; - - nparam = isl_basic_set_n_param(bset1); - dim1 = isl_basic_set_n_dim(bset1); - dim2 = isl_basic_set_n_dim(bset2); - dims = isl_space_alloc(bset1->ctx, nparam, pos, dim1 - pos); - bmap1 = isl_basic_map_from_basic_set(isl_basic_set_copy(bset1), dims); - dims = isl_space_alloc(bset2->ctx, nparam, pos, dim2 - pos); - bmap2 = isl_basic_map_from_basic_set(isl_basic_set_copy(bset2), dims); - if (!bmap1 || !bmap2) - goto error; - bmap1 = isl_basic_map_cow(bmap1); - bmap1 = isl_basic_map_extend(bmap1, nparam, - pos, (dim1 - pos) + (dim2 - pos), - bmap2->n_div, bmap2->n_eq, bmap2->n_ineq); - bmap1 = add_constraints(bmap1, bmap2, 0, dim1 - pos); - if (!bmap1) - goto error; - total = isl_basic_map_total_dim(bmap1); - ctx = bmap1->ctx; - obj = isl_vec_alloc(ctx, 1 + total); - isl_seq_clr(obj->block.data, 1 + total); - isl_int_set_si(obj->block.data[1+nparam+pos], 1); - isl_int_set_si(obj->block.data[1+nparam+pos+(dim1-pos)], -1); - if (!obj) - goto error; - res = isl_basic_map_solve_lp(bmap1, 1, obj->block.data, ctx->one, - opt, NULL, NULL); - isl_basic_map_free(bmap1); - isl_vec_free(obj); - return res; -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return isl_lp_error; -} - -/* Given two _disjoint_ basic sets bset1 and bset2, check whether - * for any common value of the parameters and dimensions preceding pos - * in both basic sets, the values of dimension pos in bset1 are - * smaller or larger than those in bset2. - * - * Returns - * 1 if bset1 follows bset2 - * -1 if bset1 precedes bset2 - * 0 if bset1 and bset2 are incomparable - * -2 if some error occurred. - */ -int isl_basic_set_compare_at(struct isl_basic_set *bset1, - struct isl_basic_set *bset2, int pos) -{ - isl_int opt; - enum isl_lp_result res; - int cmp; - - isl_int_init(opt); - - res = basic_set_maximal_difference_at(bset1, bset2, pos, &opt); - - if (res == isl_lp_empty) - cmp = 0; - else if ((res == isl_lp_ok && isl_int_is_pos(opt)) || - res == isl_lp_unbounded) - cmp = 1; - else if (res == isl_lp_ok && isl_int_is_neg(opt)) - cmp = -1; - else - cmp = -2; - - isl_int_clear(opt); - return cmp; -} - -/* Given two basic sets bset1 and bset2, check whether - * for any common value of the parameters and dimensions preceding pos - * there is a value of dimension pos in bset1 that is larger - * than a value of the same dimension in bset2. - * - * Return - * 1 if there exists such a pair - * 0 if there is no such pair, but there is a pair of equal values - * -1 otherwise - * -2 if some error occurred. - */ -int isl_basic_set_follows_at(__isl_keep isl_basic_set *bset1, - __isl_keep isl_basic_set *bset2, int pos) -{ - isl_int opt; - enum isl_lp_result res; - int cmp; - - isl_int_init(opt); - - res = basic_set_maximal_difference_at(bset1, bset2, pos, &opt); - - if (res == isl_lp_empty) - cmp = -1; - else if ((res == isl_lp_ok && isl_int_is_pos(opt)) || - res == isl_lp_unbounded) - cmp = 1; - else if (res == isl_lp_ok && isl_int_is_neg(opt)) - cmp = -1; - else if (res == isl_lp_ok) - cmp = 0; - else - cmp = -2; - - isl_int_clear(opt); - return cmp; -} - -/* Given two sets set1 and set2, check whether - * for any common value of the parameters and dimensions preceding pos - * there is a value of dimension pos in set1 that is larger - * than a value of the same dimension in set2. - * - * Return - * 1 if there exists such a pair - * 0 if there is no such pair, but there is a pair of equal values - * -1 otherwise - * -2 if some error occurred. - */ -int isl_set_follows_at(__isl_keep isl_set *set1, - __isl_keep isl_set *set2, int pos) -{ - int i, j; - int follows = -1; - - if (!set1 || !set2) - return -2; - - for (i = 0; i < set1->n; ++i) - for (j = 0; j < set2->n; ++j) { - int f; - f = isl_basic_set_follows_at(set1->p[i], set2->p[j], pos); - if (f == 1 || f == -2) - return f; - if (f > follows) - follows = f; - } - - return follows; -} - -static int isl_basic_map_plain_has_fixed_var(__isl_keep isl_basic_map *bmap, - unsigned pos, isl_int *val) -{ - int i; - int d; - unsigned total; - - if (!bmap) - return -1; - total = isl_basic_map_total_dim(bmap); - for (i = 0, d = total-1; i < bmap->n_eq && d+1 > pos; ++i) { - for (; d+1 > pos; --d) - if (!isl_int_is_zero(bmap->eq[i][1+d])) - break; - if (d != pos) - continue; - if (isl_seq_first_non_zero(bmap->eq[i]+1, d) != -1) - return 0; - if (isl_seq_first_non_zero(bmap->eq[i]+1+d+1, total-d-1) != -1) - return 0; - if (!isl_int_is_one(bmap->eq[i][1+d])) - return 0; - if (val) - isl_int_neg(*val, bmap->eq[i][0]); - return 1; - } - return 0; -} - -static int isl_map_plain_has_fixed_var(__isl_keep isl_map *map, - unsigned pos, isl_int *val) -{ - int i; - isl_int v; - isl_int tmp; - int fixed; - - if (!map) - return -1; - if (map->n == 0) - return 0; - if (map->n == 1) - return isl_basic_map_plain_has_fixed_var(map->p[0], pos, val); - isl_int_init(v); - isl_int_init(tmp); - fixed = isl_basic_map_plain_has_fixed_var(map->p[0], pos, &v); - for (i = 1; fixed == 1 && i < map->n; ++i) { - fixed = isl_basic_map_plain_has_fixed_var(map->p[i], pos, &tmp); - if (fixed == 1 && isl_int_ne(tmp, v)) - fixed = 0; - } - if (val) - isl_int_set(*val, v); - isl_int_clear(tmp); - isl_int_clear(v); - return fixed; -} - -static int isl_basic_set_plain_has_fixed_var(__isl_keep isl_basic_set *bset, - unsigned pos, isl_int *val) -{ - return isl_basic_map_plain_has_fixed_var((struct isl_basic_map *)bset, - pos, val); -} - -static int isl_set_plain_has_fixed_var(__isl_keep isl_set *set, unsigned pos, - isl_int *val) -{ - return isl_map_plain_has_fixed_var((struct isl_map *)set, pos, val); -} - -int isl_basic_map_plain_is_fixed(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, isl_int *val) -{ - if (pos >= isl_basic_map_dim(bmap, type)) - return -1; - return isl_basic_map_plain_has_fixed_var(bmap, - isl_basic_map_offset(bmap, type) - 1 + pos, val); -} - -int isl_map_plain_is_fixed(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos, isl_int *val) -{ - if (pos >= isl_map_dim(map, type)) - return -1; - return isl_map_plain_has_fixed_var(map, - map_offset(map, type) - 1 + pos, val); -} - -int isl_set_plain_is_fixed(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos, isl_int *val) -{ - return isl_map_plain_is_fixed(set, type, pos, val); -} - -int isl_map_fast_is_fixed(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos, isl_int *val) -{ - return isl_map_plain_is_fixed(map, type, pos, val); -} - -/* Check if dimension dim has fixed value and if so and if val is not NULL, - * then return this fixed value in *val. - */ -int isl_basic_set_plain_dim_is_fixed(__isl_keep isl_basic_set *bset, - unsigned dim, isl_int *val) -{ - return isl_basic_set_plain_has_fixed_var(bset, - isl_basic_set_n_param(bset) + dim, val); -} - -/* Check if dimension dim has fixed value and if so and if val is not NULL, - * then return this fixed value in *val. - */ -int isl_set_plain_dim_is_fixed(__isl_keep isl_set *set, - unsigned dim, isl_int *val) -{ - return isl_set_plain_has_fixed_var(set, isl_set_n_param(set) + dim, val); -} - -int isl_set_fast_dim_is_fixed(__isl_keep isl_set *set, - unsigned dim, isl_int *val) -{ - return isl_set_plain_dim_is_fixed(set, dim, val); -} - -/* Check if input variable in has fixed value and if so and if val is not NULL, - * then return this fixed value in *val. - */ -int isl_map_plain_input_is_fixed(__isl_keep isl_map *map, - unsigned in, isl_int *val) -{ - return isl_map_plain_has_fixed_var(map, isl_map_n_param(map) + in, val); -} - -/* Check if dimension dim has an (obvious) fixed lower bound and if so - * and if val is not NULL, then return this lower bound in *val. - */ -int isl_basic_set_plain_dim_has_fixed_lower_bound( - __isl_keep isl_basic_set *bset, unsigned dim, isl_int *val) -{ - int i, i_eq = -1, i_ineq = -1; - isl_int *c; - unsigned total; - unsigned nparam; - - if (!bset) - return -1; - total = isl_basic_set_total_dim(bset); - nparam = isl_basic_set_n_param(bset); - for (i = 0; i < bset->n_eq; ++i) { - if (isl_int_is_zero(bset->eq[i][1+nparam+dim])) - continue; - if (i_eq != -1) - return 0; - i_eq = i; - } - for (i = 0; i < bset->n_ineq; ++i) { - if (!isl_int_is_pos(bset->ineq[i][1+nparam+dim])) - continue; - if (i_eq != -1 || i_ineq != -1) - return 0; - i_ineq = i; - } - if (i_eq == -1 && i_ineq == -1) - return 0; - c = i_eq != -1 ? bset->eq[i_eq] : bset->ineq[i_ineq]; - /* The coefficient should always be one due to normalization. */ - if (!isl_int_is_one(c[1+nparam+dim])) - return 0; - if (isl_seq_first_non_zero(c+1, nparam+dim) != -1) - return 0; - if (isl_seq_first_non_zero(c+1+nparam+dim+1, - total - nparam - dim - 1) != -1) - return 0; - if (val) - isl_int_neg(*val, c[0]); - return 1; -} - -int isl_set_plain_dim_has_fixed_lower_bound(__isl_keep isl_set *set, - unsigned dim, isl_int *val) -{ - int i; - isl_int v; - isl_int tmp; - int fixed; - - if (!set) - return -1; - if (set->n == 0) - return 0; - if (set->n == 1) - return isl_basic_set_plain_dim_has_fixed_lower_bound(set->p[0], - dim, val); - isl_int_init(v); - isl_int_init(tmp); - fixed = isl_basic_set_plain_dim_has_fixed_lower_bound(set->p[0], - dim, &v); - for (i = 1; fixed == 1 && i < set->n; ++i) { - fixed = isl_basic_set_plain_dim_has_fixed_lower_bound(set->p[i], - dim, &tmp); - if (fixed == 1 && isl_int_ne(tmp, v)) - fixed = 0; - } - if (val) - isl_int_set(*val, v); - isl_int_clear(tmp); - isl_int_clear(v); - return fixed; -} - -struct constraint { - unsigned size; - isl_int *c; -}; - -/* uset_gist depends on constraints without existentially quantified - * variables sorting first. - */ -static int qsort_constraint_cmp(const void *p1, const void *p2) -{ - const struct constraint *c1 = (const struct constraint *)p1; - const struct constraint *c2 = (const struct constraint *)p2; - int l1, l2; - unsigned size = isl_min(c1->size, c2->size); - - l1 = isl_seq_last_non_zero(c1->c, size); - l2 = isl_seq_last_non_zero(c2->c, size); - - if (l1 != l2) - return l1 - l2; - - return isl_seq_cmp(c1->c, c2->c, size); -} - -static struct isl_basic_map *isl_basic_map_sort_constraints( - struct isl_basic_map *bmap) -{ - int i; - struct constraint *c; - unsigned total; - - if (!bmap) - return NULL; - total = isl_basic_map_total_dim(bmap); - c = isl_alloc_array(bmap->ctx, struct constraint, bmap->n_ineq); - if (!c) - goto error; - for (i = 0; i < bmap->n_ineq; ++i) { - c[i].size = total; - c[i].c = bmap->ineq[i]; - } - qsort(c, bmap->n_ineq, sizeof(struct constraint), qsort_constraint_cmp); - for (i = 0; i < bmap->n_ineq; ++i) - bmap->ineq[i] = c[i].c; - free(c); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_sort_constraints( - __isl_take isl_basic_set *bset) -{ - return (struct isl_basic_set *)isl_basic_map_sort_constraints( - (struct isl_basic_map *)bset); -} - -struct isl_basic_map *isl_basic_map_normalize(struct isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_NORMALIZED)) - return bmap; - bmap = isl_basic_map_remove_redundancies(bmap); - bmap = isl_basic_map_sort_constraints(bmap); - ISL_F_SET(bmap, ISL_BASIC_MAP_NORMALIZED); - return bmap; -} - -struct isl_basic_set *isl_basic_set_normalize(struct isl_basic_set *bset) -{ - return (struct isl_basic_set *)isl_basic_map_normalize( - (struct isl_basic_map *)bset); -} - -int isl_basic_map_plain_cmp(const __isl_keep isl_basic_map *bmap1, - const __isl_keep isl_basic_map *bmap2) -{ - int i, cmp; - unsigned total; - - if (bmap1 == bmap2) - return 0; - if (ISL_F_ISSET(bmap1, ISL_BASIC_MAP_RATIONAL) != - ISL_F_ISSET(bmap2, ISL_BASIC_MAP_RATIONAL)) - return ISL_F_ISSET(bmap1, ISL_BASIC_MAP_RATIONAL) ? -1 : 1; - if (isl_basic_map_n_param(bmap1) != isl_basic_map_n_param(bmap2)) - return isl_basic_map_n_param(bmap1) - isl_basic_map_n_param(bmap2); - if (isl_basic_map_n_in(bmap1) != isl_basic_map_n_in(bmap2)) - return isl_basic_map_n_out(bmap1) - isl_basic_map_n_out(bmap2); - if (isl_basic_map_n_out(bmap1) != isl_basic_map_n_out(bmap2)) - return isl_basic_map_n_out(bmap1) - isl_basic_map_n_out(bmap2); - if (ISL_F_ISSET(bmap1, ISL_BASIC_MAP_EMPTY) && - ISL_F_ISSET(bmap2, ISL_BASIC_MAP_EMPTY)) - return 0; - if (ISL_F_ISSET(bmap1, ISL_BASIC_MAP_EMPTY)) - return 1; - if (ISL_F_ISSET(bmap2, ISL_BASIC_MAP_EMPTY)) - return -1; - if (bmap1->n_eq != bmap2->n_eq) - return bmap1->n_eq - bmap2->n_eq; - if (bmap1->n_ineq != bmap2->n_ineq) - return bmap1->n_ineq - bmap2->n_ineq; - if (bmap1->n_div != bmap2->n_div) - return bmap1->n_div - bmap2->n_div; - total = isl_basic_map_total_dim(bmap1); - for (i = 0; i < bmap1->n_eq; ++i) { - cmp = isl_seq_cmp(bmap1->eq[i], bmap2->eq[i], 1+total); - if (cmp) - return cmp; - } - for (i = 0; i < bmap1->n_ineq; ++i) { - cmp = isl_seq_cmp(bmap1->ineq[i], bmap2->ineq[i], 1+total); - if (cmp) - return cmp; - } - for (i = 0; i < bmap1->n_div; ++i) { - cmp = isl_seq_cmp(bmap1->div[i], bmap2->div[i], 1+1+total); - if (cmp) - return cmp; - } - return 0; -} - -int isl_basic_set_plain_cmp(const __isl_keep isl_basic_set *bset1, - const __isl_keep isl_basic_set *bset2) -{ - return isl_basic_map_plain_cmp(bset1, bset2); -} - -int isl_set_plain_cmp(const __isl_keep isl_set *set1, - const __isl_keep isl_set *set2) -{ - int i, cmp; - - if (set1 == set2) - return 0; - if (set1->n != set2->n) - return set1->n - set2->n; - - for (i = 0; i < set1->n; ++i) { - cmp = isl_basic_set_plain_cmp(set1->p[i], set2->p[i]); - if (cmp) - return cmp; - } - - return 0; -} - -int isl_basic_map_plain_is_equal(__isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2) -{ - return isl_basic_map_plain_cmp(bmap1, bmap2) == 0; -} - -int isl_basic_set_plain_is_equal(__isl_keep isl_basic_set *bset1, - __isl_keep isl_basic_set *bset2) -{ - return isl_basic_map_plain_is_equal((isl_basic_map *)bset1, - (isl_basic_map *)bset2); -} - -static int qsort_bmap_cmp(const void *p1, const void *p2) -{ - const struct isl_basic_map *bmap1 = *(const struct isl_basic_map **)p1; - const struct isl_basic_map *bmap2 = *(const struct isl_basic_map **)p2; - - return isl_basic_map_plain_cmp(bmap1, bmap2); -} - -/* We normalize in place, but if anything goes wrong we need - * to return NULL, so we need to make sure we don't change the - * meaning of any possible other copies of map. - */ -struct isl_map *isl_map_normalize(struct isl_map *map) -{ - int i, j; - struct isl_basic_map *bmap; - - if (!map) - return NULL; - if (ISL_F_ISSET(map, ISL_MAP_NORMALIZED)) - return map; - for (i = 0; i < map->n; ++i) { - bmap = isl_basic_map_normalize(isl_basic_map_copy(map->p[i])); - if (!bmap) - goto error; - isl_basic_map_free(map->p[i]); - map->p[i] = bmap; - } - qsort(map->p, map->n, sizeof(struct isl_basic_map *), qsort_bmap_cmp); - ISL_F_SET(map, ISL_MAP_NORMALIZED); - map = isl_map_remove_empty_parts(map); - if (!map) - return NULL; - for (i = map->n - 1; i >= 1; --i) { - if (!isl_basic_map_plain_is_equal(map->p[i-1], map->p[i])) - continue; - isl_basic_map_free(map->p[i-1]); - for (j = i; j < map->n; ++j) - map->p[j-1] = map->p[j]; - map->n--; - } - return map; -error: - isl_map_free(map); - return NULL; - -} - -struct isl_set *isl_set_normalize(struct isl_set *set) -{ - return (struct isl_set *)isl_map_normalize((struct isl_map *)set); -} - -int isl_map_plain_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2) -{ - int i; - int equal; - - if (!map1 || !map2) - return -1; - - if (map1 == map2) - return 1; - if (!isl_space_is_equal(map1->dim, map2->dim)) - return 0; - - map1 = isl_map_copy(map1); - map2 = isl_map_copy(map2); - map1 = isl_map_normalize(map1); - map2 = isl_map_normalize(map2); - if (!map1 || !map2) - goto error; - equal = map1->n == map2->n; - for (i = 0; equal && i < map1->n; ++i) { - equal = isl_basic_map_plain_is_equal(map1->p[i], map2->p[i]); - if (equal < 0) - goto error; - } - isl_map_free(map1); - isl_map_free(map2); - return equal; -error: - isl_map_free(map1); - isl_map_free(map2); - return -1; -} - -int isl_map_fast_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2) -{ - return isl_map_plain_is_equal(map1, map2); -} - -int isl_set_plain_is_equal(__isl_keep isl_set *set1, __isl_keep isl_set *set2) -{ - return isl_map_plain_is_equal((struct isl_map *)set1, - (struct isl_map *)set2); -} - -int isl_set_fast_is_equal(__isl_keep isl_set *set1, __isl_keep isl_set *set2) -{ - return isl_set_plain_is_equal(set1, set2); -} - -/* Return an interval that ranges from min to max (inclusive) - */ -struct isl_basic_set *isl_basic_set_interval(struct isl_ctx *ctx, - isl_int min, isl_int max) -{ - int k; - struct isl_basic_set *bset = NULL; - - bset = isl_basic_set_alloc(ctx, 0, 1, 0, 0, 2); - if (!bset) - goto error; - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_int_set_si(bset->ineq[k][1], 1); - isl_int_neg(bset->ineq[k][0], min); - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_int_set_si(bset->ineq[k][1], -1); - isl_int_set(bset->ineq[k][0], max); - - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Return the Cartesian product of the basic sets in list (in the given order). - */ -__isl_give isl_basic_set *isl_basic_set_list_product( - __isl_take struct isl_basic_set_list *list) -{ - int i; - unsigned dim; - unsigned nparam; - unsigned extra; - unsigned n_eq; - unsigned n_ineq; - struct isl_basic_set *product = NULL; - - if (!list) - goto error; - isl_assert(list->ctx, list->n > 0, goto error); - isl_assert(list->ctx, list->p[0], goto error); - nparam = isl_basic_set_n_param(list->p[0]); - dim = isl_basic_set_n_dim(list->p[0]); - extra = list->p[0]->n_div; - n_eq = list->p[0]->n_eq; - n_ineq = list->p[0]->n_ineq; - for (i = 1; i < list->n; ++i) { - isl_assert(list->ctx, list->p[i], goto error); - isl_assert(list->ctx, - nparam == isl_basic_set_n_param(list->p[i]), goto error); - dim += isl_basic_set_n_dim(list->p[i]); - extra += list->p[i]->n_div; - n_eq += list->p[i]->n_eq; - n_ineq += list->p[i]->n_ineq; - } - product = isl_basic_set_alloc(list->ctx, nparam, dim, extra, - n_eq, n_ineq); - if (!product) - goto error; - dim = 0; - for (i = 0; i < list->n; ++i) { - isl_basic_set_add_constraints(product, - isl_basic_set_copy(list->p[i]), dim); - dim += isl_basic_set_n_dim(list->p[i]); - } - isl_basic_set_list_free(list); - return product; -error: - isl_basic_set_free(product); - isl_basic_set_list_free(list); - return NULL; -} - -struct isl_basic_map *isl_basic_map_product( - struct isl_basic_map *bmap1, struct isl_basic_map *bmap2) -{ - isl_space *dim_result = NULL; - struct isl_basic_map *bmap; - unsigned in1, in2, out1, out2, nparam, total, pos; - struct isl_dim_map *dim_map1, *dim_map2; - - if (!bmap1 || !bmap2) - goto error; - - isl_assert(bmap1->ctx, isl_space_match(bmap1->dim, isl_dim_param, - bmap2->dim, isl_dim_param), goto error); - dim_result = isl_space_product(isl_space_copy(bmap1->dim), - isl_space_copy(bmap2->dim)); - - in1 = isl_basic_map_n_in(bmap1); - in2 = isl_basic_map_n_in(bmap2); - out1 = isl_basic_map_n_out(bmap1); - out2 = isl_basic_map_n_out(bmap2); - nparam = isl_basic_map_n_param(bmap1); - - total = nparam + in1 + in2 + out1 + out2 + bmap1->n_div + bmap2->n_div; - dim_map1 = isl_dim_map_alloc(bmap1->ctx, total); - dim_map2 = isl_dim_map_alloc(bmap1->ctx, total); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_in, pos += nparam); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_in, pos += in1); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_out, pos += in2); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_out, pos += out1); - isl_dim_map_div(dim_map1, bmap1, pos += out2); - isl_dim_map_div(dim_map2, bmap2, pos += bmap1->n_div); - - bmap = isl_basic_map_alloc_space(dim_result, - bmap1->n_div + bmap2->n_div, - bmap1->n_eq + bmap2->n_eq, - bmap1->n_ineq + bmap2->n_ineq); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap1, dim_map1); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap2, dim_map2); - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_flat_product( - __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2) -{ - isl_basic_map *prod; - - prod = isl_basic_map_product(bmap1, bmap2); - prod = isl_basic_map_flatten(prod); - return prod; -} - -__isl_give isl_basic_set *isl_basic_set_flat_product( - __isl_take isl_basic_set *bset1, __isl_take isl_basic_set *bset2) -{ - return isl_basic_map_flat_range_product(bset1, bset2); -} - -__isl_give isl_basic_map *isl_basic_map_domain_product( - __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2) -{ - isl_space *space_result = NULL; - isl_basic_map *bmap; - unsigned in1, in2, out, nparam, total, pos; - struct isl_dim_map *dim_map1, *dim_map2; - - if (!bmap1 || !bmap2) - goto error; - - space_result = isl_space_domain_product(isl_space_copy(bmap1->dim), - isl_space_copy(bmap2->dim)); - - in1 = isl_basic_map_dim(bmap1, isl_dim_in); - in2 = isl_basic_map_dim(bmap2, isl_dim_in); - out = isl_basic_map_dim(bmap1, isl_dim_out); - nparam = isl_basic_map_dim(bmap1, isl_dim_param); - - total = nparam + in1 + in2 + out + bmap1->n_div + bmap2->n_div; - dim_map1 = isl_dim_map_alloc(bmap1->ctx, total); - dim_map2 = isl_dim_map_alloc(bmap1->ctx, total); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_in, pos += nparam); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_in, pos += in1); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_out, pos += in2); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_out, pos); - isl_dim_map_div(dim_map1, bmap1, pos += out); - isl_dim_map_div(dim_map2, bmap2, pos += bmap1->n_div); - - bmap = isl_basic_map_alloc_space(space_result, - bmap1->n_div + bmap2->n_div, - bmap1->n_eq + bmap2->n_eq, - bmap1->n_ineq + bmap2->n_ineq); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap1, dim_map1); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap2, dim_map2); - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_range_product( - __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2) -{ - isl_space *dim_result = NULL; - isl_basic_map *bmap; - unsigned in, out1, out2, nparam, total, pos; - struct isl_dim_map *dim_map1, *dim_map2; - - if (!bmap1 || !bmap2) - goto error; - - dim_result = isl_space_range_product(isl_space_copy(bmap1->dim), - isl_space_copy(bmap2->dim)); - - in = isl_basic_map_dim(bmap1, isl_dim_in); - out1 = isl_basic_map_n_out(bmap1); - out2 = isl_basic_map_n_out(bmap2); - nparam = isl_basic_map_n_param(bmap1); - - total = nparam + in + out1 + out2 + bmap1->n_div + bmap2->n_div; - dim_map1 = isl_dim_map_alloc(bmap1->ctx, total); - dim_map2 = isl_dim_map_alloc(bmap1->ctx, total); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_param, pos = 0); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_in, pos += nparam); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_in, pos); - isl_dim_map_dim(dim_map1, bmap1->dim, isl_dim_out, pos += in); - isl_dim_map_dim(dim_map2, bmap2->dim, isl_dim_out, pos += out1); - isl_dim_map_div(dim_map1, bmap1, pos += out2); - isl_dim_map_div(dim_map2, bmap2, pos += bmap1->n_div); - - bmap = isl_basic_map_alloc_space(dim_result, - bmap1->n_div + bmap2->n_div, - bmap1->n_eq + bmap2->n_eq, - bmap1->n_ineq + bmap2->n_ineq); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap1, dim_map1); - bmap = isl_basic_map_add_constraints_dim_map(bmap, bmap2, dim_map2); - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap1); - isl_basic_map_free(bmap2); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_flat_range_product( - __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2) -{ - isl_basic_map *prod; - - prod = isl_basic_map_range_product(bmap1, bmap2); - prod = isl_basic_map_flatten_range(prod); - return prod; -} - -static __isl_give isl_map *map_product(__isl_take isl_map *map1, - __isl_take isl_map *map2, - __isl_give isl_space *(*dim_product)(__isl_take isl_space *left, - __isl_take isl_space *right), - __isl_give isl_basic_map *(*basic_map_product)( - __isl_take isl_basic_map *left, __isl_take isl_basic_map *right)) -{ - unsigned flags = 0; - struct isl_map *result; - int i, j; - - if (!map1 || !map2) - goto error; - - isl_assert(map1->ctx, isl_space_match(map1->dim, isl_dim_param, - map2->dim, isl_dim_param), goto error); - - if (ISL_F_ISSET(map1, ISL_MAP_DISJOINT) && - ISL_F_ISSET(map2, ISL_MAP_DISJOINT)) - ISL_FL_SET(flags, ISL_MAP_DISJOINT); - - result = isl_map_alloc_space(dim_product(isl_space_copy(map1->dim), - isl_space_copy(map2->dim)), - map1->n * map2->n, flags); - if (!result) - goto error; - for (i = 0; i < map1->n; ++i) - for (j = 0; j < map2->n; ++j) { - struct isl_basic_map *part; - part = basic_map_product(isl_basic_map_copy(map1->p[i]), - isl_basic_map_copy(map2->p[j])); - if (isl_basic_map_is_empty(part)) - isl_basic_map_free(part); - else - result = isl_map_add_basic_map(result, part); - if (!result) - goto error; - } - isl_map_free(map1); - isl_map_free(map2); - return result; -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -/* Given two maps A -> B and C -> D, construct a map [A -> C] -> [B -> D] - */ -static __isl_give isl_map *map_product_aligned(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - return map_product(map1, map2, &isl_space_product, &isl_basic_map_product); -} - -__isl_give isl_map *isl_map_product(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - return isl_map_align_params_map_map_and(map1, map2, &map_product_aligned); -} - -/* Given two maps A -> B and C -> D, construct a map (A, C) -> (B, D) - */ -__isl_give isl_map *isl_map_flat_product(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - isl_map *prod; - - prod = isl_map_product(map1, map2); - prod = isl_map_flatten(prod); - return prod; -} - -/* Given two set A and B, construct its Cartesian product A x B. - */ -struct isl_set *isl_set_product(struct isl_set *set1, struct isl_set *set2) -{ - return isl_map_range_product(set1, set2); -} - -__isl_give isl_set *isl_set_flat_product(__isl_take isl_set *set1, - __isl_take isl_set *set2) -{ - return isl_map_flat_range_product(set1, set2); -} - -/* Given two maps A -> B and C -> D, construct a map [A -> C] -> (B * D) - */ -static __isl_give isl_map *map_domain_product_aligned(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - return map_product(map1, map2, &isl_space_domain_product, - &isl_basic_map_domain_product); -} - -/* Given two maps A -> B and C -> D, construct a map (A * C) -> [B -> D] - */ -static __isl_give isl_map *map_range_product_aligned(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - return map_product(map1, map2, &isl_space_range_product, - &isl_basic_map_range_product); -} - -__isl_give isl_map *isl_map_domain_product(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - return isl_map_align_params_map_map_and(map1, map2, - &map_domain_product_aligned); -} - -__isl_give isl_map *isl_map_range_product(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - return isl_map_align_params_map_map_and(map1, map2, - &map_range_product_aligned); -} - -/* Given two maps A -> B and C -> D, construct a map (A, C) -> (B * D) - */ -__isl_give isl_map *isl_map_flat_domain_product(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - isl_map *prod; - - prod = isl_map_domain_product(map1, map2); - prod = isl_map_flatten_domain(prod); - return prod; -} - -/* Given two maps A -> B and C -> D, construct a map (A * C) -> (B, D) - */ -__isl_give isl_map *isl_map_flat_range_product(__isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - isl_map *prod; - - prod = isl_map_range_product(map1, map2); - prod = isl_map_flatten_range(prod); - return prod; -} - -uint32_t isl_basic_map_get_hash(__isl_keep isl_basic_map *bmap) -{ - int i; - uint32_t hash = isl_hash_init(); - unsigned total; - - if (!bmap) - return 0; - bmap = isl_basic_map_copy(bmap); - bmap = isl_basic_map_normalize(bmap); - if (!bmap) - return 0; - total = isl_basic_map_total_dim(bmap); - isl_hash_byte(hash, bmap->n_eq & 0xFF); - for (i = 0; i < bmap->n_eq; ++i) { - uint32_t c_hash; - c_hash = isl_seq_get_hash(bmap->eq[i], 1 + total); - isl_hash_hash(hash, c_hash); - } - isl_hash_byte(hash, bmap->n_ineq & 0xFF); - for (i = 0; i < bmap->n_ineq; ++i) { - uint32_t c_hash; - c_hash = isl_seq_get_hash(bmap->ineq[i], 1 + total); - isl_hash_hash(hash, c_hash); - } - isl_hash_byte(hash, bmap->n_div & 0xFF); - for (i = 0; i < bmap->n_div; ++i) { - uint32_t c_hash; - if (isl_int_is_zero(bmap->div[i][0])) - continue; - isl_hash_byte(hash, i & 0xFF); - c_hash = isl_seq_get_hash(bmap->div[i], 1 + 1 + total); - isl_hash_hash(hash, c_hash); - } - isl_basic_map_free(bmap); - return hash; -} - -uint32_t isl_basic_set_get_hash(__isl_keep isl_basic_set *bset) -{ - return isl_basic_map_get_hash((isl_basic_map *)bset); -} - -uint32_t isl_map_get_hash(__isl_keep isl_map *map) -{ - int i; - uint32_t hash; - - if (!map) - return 0; - map = isl_map_copy(map); - map = isl_map_normalize(map); - if (!map) - return 0; - - hash = isl_hash_init(); - for (i = 0; i < map->n; ++i) { - uint32_t bmap_hash; - bmap_hash = isl_basic_map_get_hash(map->p[i]); - isl_hash_hash(hash, bmap_hash); - } - - isl_map_free(map); - - return hash; -} - -uint32_t isl_set_get_hash(__isl_keep isl_set *set) -{ - return isl_map_get_hash((isl_map *)set); -} - -/* Check if the value for dimension dim is completely determined - * by the values of the other parameters and variables. - * That is, check if dimension dim is involved in an equality. - */ -int isl_basic_set_dim_is_unique(struct isl_basic_set *bset, unsigned dim) -{ - int i; - unsigned nparam; - - if (!bset) - return -1; - nparam = isl_basic_set_n_param(bset); - for (i = 0; i < bset->n_eq; ++i) - if (!isl_int_is_zero(bset->eq[i][1 + nparam + dim])) - return 1; - return 0; -} - -/* Check if the value for dimension dim is completely determined - * by the values of the other parameters and variables. - * That is, check if dimension dim is involved in an equality - * for each of the subsets. - */ -int isl_set_dim_is_unique(struct isl_set *set, unsigned dim) -{ - int i; - - if (!set) - return -1; - for (i = 0; i < set->n; ++i) { - int unique; - unique = isl_basic_set_dim_is_unique(set->p[i], dim); - if (unique != 1) - return unique; - } - return 1; -} - -int isl_set_n_basic_set(__isl_keep isl_set *set) -{ - return set ? set->n : 0; -} - -int isl_map_foreach_basic_map(__isl_keep isl_map *map, - int (*fn)(__isl_take isl_basic_map *bmap, void *user), void *user) -{ - int i; - - if (!map) - return -1; - - for (i = 0; i < map->n; ++i) - if (fn(isl_basic_map_copy(map->p[i]), user) < 0) - return -1; - - return 0; -} - -int isl_set_foreach_basic_set(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_basic_set *bset, void *user), void *user) -{ - int i; - - if (!set) - return -1; - - for (i = 0; i < set->n; ++i) - if (fn(isl_basic_set_copy(set->p[i]), user) < 0) - return -1; - - return 0; -} - -__isl_give isl_basic_set *isl_basic_set_lift(__isl_take isl_basic_set *bset) -{ - isl_space *dim; - - if (!bset) - return NULL; - - bset = isl_basic_set_cow(bset); - if (!bset) - return NULL; - - dim = isl_basic_set_get_space(bset); - dim = isl_space_lift(dim, bset->n_div); - if (!dim) - goto error; - isl_space_free(bset->dim); - bset->dim = dim; - bset->extra -= bset->n_div; - bset->n_div = 0; - - bset = isl_basic_set_finalize(bset); - - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -__isl_give isl_set *isl_set_lift(__isl_take isl_set *set) -{ - int i; - isl_space *dim; - unsigned n_div; - - set = isl_set_align_divs(set); - - if (!set) - return NULL; - - set = isl_set_cow(set); - if (!set) - return NULL; - - n_div = set->p[0]->n_div; - dim = isl_set_get_space(set); - dim = isl_space_lift(dim, n_div); - if (!dim) - goto error; - isl_space_free(set->dim); - set->dim = dim; - - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_lift(set->p[i]); - if (!set->p[i]) - goto error; - } - - return set; -error: - isl_set_free(set); - return NULL; -} - -__isl_give isl_map *isl_set_lifting(__isl_take isl_set *set) -{ - isl_space *dim; - struct isl_basic_map *bmap; - unsigned n_set; - unsigned n_div; - unsigned n_param; - unsigned total; - int i, k, l; - - set = isl_set_align_divs(set); - - if (!set) - return NULL; - - dim = isl_set_get_space(set); - if (set->n == 0 || set->p[0]->n_div == 0) { - isl_set_free(set); - return isl_map_identity(isl_space_map_from_set(dim)); - } - - n_div = set->p[0]->n_div; - dim = isl_space_map_from_set(dim); - n_param = isl_space_dim(dim, isl_dim_param); - n_set = isl_space_dim(dim, isl_dim_in); - dim = isl_space_extend(dim, n_param, n_set, n_set + n_div); - bmap = isl_basic_map_alloc_space(dim, 0, n_set, 2 * n_div); - for (i = 0; i < n_set; ++i) - bmap = var_equal(bmap, i); - - total = n_param + n_set + n_set + n_div; - for (i = 0; i < n_div; ++i) { - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->ineq[k], set->p[0]->div[i]+1, 1+n_param); - isl_seq_clr(bmap->ineq[k]+1+n_param, n_set); - isl_seq_cpy(bmap->ineq[k]+1+n_param+n_set, - set->p[0]->div[i]+1+1+n_param, n_set + n_div); - isl_int_neg(bmap->ineq[k][1+n_param+n_set+n_set+i], - set->p[0]->div[i][0]); - - l = isl_basic_map_alloc_inequality(bmap); - if (l < 0) - goto error; - isl_seq_neg(bmap->ineq[l], bmap->ineq[k], 1 + total); - isl_int_add(bmap->ineq[l][0], bmap->ineq[l][0], - set->p[0]->div[i][0]); - isl_int_sub_ui(bmap->ineq[l][0], bmap->ineq[l][0], 1); - } - - isl_set_free(set); - bmap = isl_basic_map_simplify(bmap); - bmap = isl_basic_map_finalize(bmap); - return isl_map_from_basic_map(bmap); -error: - isl_set_free(set); - isl_basic_map_free(bmap); - return NULL; -} - -int isl_basic_set_size(__isl_keep isl_basic_set *bset) -{ - unsigned dim; - int size = 0; - - if (!bset) - return -1; - - dim = isl_basic_set_total_dim(bset); - size += bset->n_eq * (1 + dim); - size += bset->n_ineq * (1 + dim); - size += bset->n_div * (2 + dim); - - return size; -} - -int isl_set_size(__isl_keep isl_set *set) -{ - int i; - int size = 0; - - if (!set) - return -1; - - for (i = 0; i < set->n; ++i) - size += isl_basic_set_size(set->p[i]); - - return size; -} - -/* Check if there is any lower bound (if lower == 0) and/or upper - * bound (if upper == 0) on the specified dim. - */ -static int basic_map_dim_is_bounded(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos, int lower, int upper) -{ - int i; - - if (!bmap) - return -1; - - isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), return -1); - - pos += isl_basic_map_offset(bmap, type); - - for (i = 0; i < bmap->n_div; ++i) { - if (isl_int_is_zero(bmap->div[i][0])) - continue; - if (!isl_int_is_zero(bmap->div[i][1 + pos])) - return 1; - } - - for (i = 0; i < bmap->n_eq; ++i) - if (!isl_int_is_zero(bmap->eq[i][pos])) - return 1; - - for (i = 0; i < bmap->n_ineq; ++i) { - int sgn = isl_int_sgn(bmap->ineq[i][pos]); - if (sgn > 0) - lower = 1; - if (sgn < 0) - upper = 1; - } - - return lower && upper; -} - -int isl_basic_map_dim_is_bounded(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos) -{ - return basic_map_dim_is_bounded(bmap, type, pos, 0, 0); -} - -int isl_basic_map_dim_has_lower_bound(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos) -{ - return basic_map_dim_is_bounded(bmap, type, pos, 0, 1); -} - -int isl_basic_map_dim_has_upper_bound(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos) -{ - return basic_map_dim_is_bounded(bmap, type, pos, 1, 0); -} - -int isl_map_dim_is_bounded(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos) -{ - int i; - - if (!map) - return -1; - - for (i = 0; i < map->n; ++i) { - int bounded; - bounded = isl_basic_map_dim_is_bounded(map->p[i], type, pos); - if (bounded < 0 || !bounded) - return bounded; - } - - return 1; -} - -/* Return 1 if the specified dim is involved in both an upper bound - * and a lower bound. - */ -int isl_set_dim_is_bounded(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos) -{ - return isl_map_dim_is_bounded((isl_map *)set, type, pos); -} - -static int has_bound(__isl_keep isl_map *map, - enum isl_dim_type type, unsigned pos, - int (*fn)(__isl_keep isl_basic_map *bmap, - enum isl_dim_type type, unsigned pos)) -{ - int i; - - if (!map) - return -1; - - for (i = 0; i < map->n; ++i) { - int bounded; - bounded = fn(map->p[i], type, pos); - if (bounded < 0 || bounded) - return bounded; - } - - return 0; -} - -/* Return 1 if the specified dim is involved in any lower bound. - */ -int isl_set_dim_has_lower_bound(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos) -{ - return has_bound(set, type, pos, &isl_basic_map_dim_has_lower_bound); -} - -/* Return 1 if the specified dim is involved in any upper bound. - */ -int isl_set_dim_has_upper_bound(__isl_keep isl_set *set, - enum isl_dim_type type, unsigned pos) -{ - return has_bound(set, type, pos, &isl_basic_map_dim_has_upper_bound); -} - -/* For each of the "n" variables starting at "first", determine - * the sign of the variable and put the results in the first "n" - * elements of the array "signs". - * Sign - * 1 means that the variable is non-negative - * -1 means that the variable is non-positive - * 0 means the variable attains both positive and negative values. - */ -int isl_basic_set_vars_get_sign(__isl_keep isl_basic_set *bset, - unsigned first, unsigned n, int *signs) -{ - isl_vec *bound = NULL; - struct isl_tab *tab = NULL; - struct isl_tab_undo *snap; - int i; - - if (!bset || !signs) - return -1; - - bound = isl_vec_alloc(bset->ctx, 1 + isl_basic_set_total_dim(bset)); - tab = isl_tab_from_basic_set(bset); - if (!bound || !tab) - goto error; - - isl_seq_clr(bound->el, bound->size); - isl_int_set_si(bound->el[0], -1); - - snap = isl_tab_snap(tab); - for (i = 0; i < n; ++i) { - int empty; - - isl_int_set_si(bound->el[1 + first + i], -1); - if (isl_tab_add_ineq(tab, bound->el) < 0) - goto error; - empty = tab->empty; - isl_int_set_si(bound->el[1 + first + i], 0); - if (isl_tab_rollback(tab, snap) < 0) - goto error; - - if (empty) { - signs[i] = 1; - continue; - } - - isl_int_set_si(bound->el[1 + first + i], 1); - if (isl_tab_add_ineq(tab, bound->el) < 0) - goto error; - empty = tab->empty; - isl_int_set_si(bound->el[1 + first + i], 0); - if (isl_tab_rollback(tab, snap) < 0) - goto error; - - signs[i] = empty ? -1 : 0; - } - - isl_tab_free(tab); - isl_vec_free(bound); - return 0; -error: - isl_tab_free(tab); - isl_vec_free(bound); - return -1; -} - -int isl_basic_set_dims_get_sign(__isl_keep isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n, int *signs) -{ - if (!bset || !signs) - return -1; - isl_assert(bset->ctx, first + n <= isl_basic_set_dim(bset, type), - return -1); - - first += pos(bset->dim, type) - 1; - return isl_basic_set_vars_get_sign(bset, first, n, signs); -} - -/* Check if the given basic map is obviously single-valued. - * In particular, for each output dimension, check that there is - * an equality that defines the output dimension in terms of - * earlier dimensions. - */ -int isl_basic_map_plain_is_single_valued(__isl_keep isl_basic_map *bmap) -{ - int i, j; - unsigned total; - unsigned n_out; - unsigned o_out; - - if (!bmap) - return -1; - - total = 1 + isl_basic_map_total_dim(bmap); - n_out = isl_basic_map_dim(bmap, isl_dim_out); - o_out = isl_basic_map_offset(bmap, isl_dim_out); - - for (i = 0; i < n_out; ++i) { - for (j = 0; j < bmap->n_eq; ++j) { - if (isl_int_is_zero(bmap->eq[j][o_out + i])) - continue; - if (isl_seq_first_non_zero(bmap->eq[j] + o_out + i + 1, - total - (o_out + i + 1)) == -1) - break; - } - if (j >= bmap->n_eq) - return 0; - } - - return 1; -} - -/* Check if the given map is obviously single-valued. - */ -int isl_map_plain_is_single_valued(__isl_keep isl_map *map) -{ - if (!map) - return -1; - if (map->n == 0) - return 1; - if (map->n >= 2) - return 0; - - return isl_basic_map_plain_is_single_valued(map->p[0]); -} - -/* Check if the given map is single-valued. - * We simply compute - * - * M \circ M^-1 - * - * and check if the result is a subset of the identity mapping. - */ -int isl_map_is_single_valued(__isl_keep isl_map *map) -{ - isl_space *dim; - isl_map *test; - isl_map *id; - int sv; - - sv = isl_map_plain_is_single_valued(map); - if (sv < 0 || sv) - return sv; - - test = isl_map_reverse(isl_map_copy(map)); - test = isl_map_apply_range(test, isl_map_copy(map)); - - dim = isl_space_map_from_set(isl_space_range(isl_map_get_space(map))); - id = isl_map_identity(dim); - - sv = isl_map_is_subset(test, id); - - isl_map_free(test); - isl_map_free(id); - - return sv; -} - -int isl_map_is_injective(__isl_keep isl_map *map) -{ - int in; - - map = isl_map_copy(map); - map = isl_map_reverse(map); - in = isl_map_is_single_valued(map); - isl_map_free(map); - - return in; -} - -/* Check if the given map is obviously injective. - */ -int isl_map_plain_is_injective(__isl_keep isl_map *map) -{ - int in; - - map = isl_map_copy(map); - map = isl_map_reverse(map); - in = isl_map_plain_is_single_valued(map); - isl_map_free(map); - - return in; -} - -int isl_map_is_bijective(__isl_keep isl_map *map) -{ - int sv; - - sv = isl_map_is_single_valued(map); - if (sv < 0 || !sv) - return sv; - - return isl_map_is_injective(map); -} - -int isl_set_is_singleton(__isl_keep isl_set *set) -{ - return isl_map_is_single_valued((isl_map *)set); -} - -int isl_map_is_translation(__isl_keep isl_map *map) -{ - int ok; - isl_set *delta; - - delta = isl_map_deltas(isl_map_copy(map)); - ok = isl_set_is_singleton(delta); - isl_set_free(delta); - - return ok; -} - -static int unique(isl_int *p, unsigned pos, unsigned len) -{ - if (isl_seq_first_non_zero(p, pos) != -1) - return 0; - if (isl_seq_first_non_zero(p + pos + 1, len - pos - 1) != -1) - return 0; - return 1; -} - -int isl_basic_set_is_box(__isl_keep isl_basic_set *bset) -{ - int i, j; - unsigned nvar; - unsigned ovar; - - if (!bset) - return -1; - - if (isl_basic_set_dim(bset, isl_dim_div) != 0) - return 0; - - nvar = isl_basic_set_dim(bset, isl_dim_set); - ovar = isl_space_offset(bset->dim, isl_dim_set); - for (j = 0; j < nvar; ++j) { - int lower = 0, upper = 0; - for (i = 0; i < bset->n_eq; ++i) { - if (isl_int_is_zero(bset->eq[i][1 + ovar + j])) - continue; - if (!unique(bset->eq[i] + 1 + ovar, j, nvar)) - return 0; - break; - } - if (i < bset->n_eq) - continue; - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_int_is_zero(bset->ineq[i][1 + ovar + j])) - continue; - if (!unique(bset->ineq[i] + 1 + ovar, j, nvar)) - return 0; - if (isl_int_is_pos(bset->ineq[i][1 + ovar + j])) - lower = 1; - else - upper = 1; - } - if (!lower || !upper) - return 0; - } - - return 1; -} - -int isl_set_is_box(__isl_keep isl_set *set) -{ - if (!set) - return -1; - if (set->n != 1) - return 0; - - return isl_basic_set_is_box(set->p[0]); -} - -int isl_basic_set_is_wrapping(__isl_keep isl_basic_set *bset) -{ - if (!bset) - return -1; - - return isl_space_is_wrapping(bset->dim); -} - -int isl_set_is_wrapping(__isl_keep isl_set *set) -{ - if (!set) - return -1; - - return isl_space_is_wrapping(set->dim); -} - -__isl_give isl_basic_set *isl_basic_map_wrap(__isl_take isl_basic_map *bmap) -{ - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - bmap->dim = isl_space_wrap(bmap->dim); - if (!bmap->dim) - goto error; - - bmap = isl_basic_map_finalize(bmap); - - return (isl_basic_set *)bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_set *isl_map_wrap(__isl_take isl_map *map) -{ - int i; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = (isl_basic_map *)isl_basic_map_wrap(map->p[i]); - if (!map->p[i]) - goto error; - } - map->dim = isl_space_wrap(map->dim); - if (!map->dim) - goto error; - - return (isl_set *)map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_set_unwrap(__isl_take isl_basic_set *bset) -{ - bset = isl_basic_set_cow(bset); - if (!bset) - return NULL; - - bset->dim = isl_space_unwrap(bset->dim); - if (!bset->dim) - goto error; - - bset = isl_basic_set_finalize(bset); - - return (isl_basic_map *)bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -__isl_give isl_map *isl_set_unwrap(__isl_take isl_set *set) -{ - int i; - - if (!set) - return NULL; - - if (!isl_set_is_wrapping(set)) - isl_die(set->ctx, isl_error_invalid, "not a wrapping set", - goto error); - - set = isl_set_cow(set); - if (!set) - return NULL; - - for (i = 0; i < set->n; ++i) { - set->p[i] = (isl_basic_set *)isl_basic_set_unwrap(set->p[i]); - if (!set->p[i]) - goto error; - } - - set->dim = isl_space_unwrap(set->dim); - if (!set->dim) - goto error; - - return (isl_map *)set; -error: - isl_set_free(set); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_reset(__isl_take isl_basic_map *bmap, - enum isl_dim_type type) -{ - if (!bmap) - return NULL; - - if (!isl_space_is_named_or_nested(bmap->dim, type)) - return bmap; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - bmap->dim = isl_space_reset(bmap->dim, type); - if (!bmap->dim) - goto error; - - bmap = isl_basic_map_finalize(bmap); - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_map *isl_map_reset(__isl_take isl_map *map, - enum isl_dim_type type) -{ - int i; - - if (!map) - return NULL; - - if (!isl_space_is_named_or_nested(map->dim, type)) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_reset(map->p[i], type); - if (!map->p[i]) - goto error; - } - map->dim = isl_space_reset(map->dim, type); - if (!map->dim) - goto error; - - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_flatten(__isl_take isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - - if (!bmap->dim->nested[0] && !bmap->dim->nested[1]) - return bmap; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - bmap->dim = isl_space_flatten(bmap->dim); - if (!bmap->dim) - goto error; - - bmap = isl_basic_map_finalize(bmap); - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_flatten(__isl_take isl_basic_set *bset) -{ - return (isl_basic_set *)isl_basic_map_flatten((isl_basic_map *)bset); -} - -__isl_give isl_basic_map *isl_basic_map_flatten_domain( - __isl_take isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - - if (!bmap->dim->nested[0]) - return bmap; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - bmap->dim = isl_space_flatten_domain(bmap->dim); - if (!bmap->dim) - goto error; - - bmap = isl_basic_map_finalize(bmap); - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_flatten_range( - __isl_take isl_basic_map *bmap) -{ - if (!bmap) - return NULL; - - if (!bmap->dim->nested[1]) - return bmap; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - bmap->dim = isl_space_flatten_range(bmap->dim); - if (!bmap->dim) - goto error; - - bmap = isl_basic_map_finalize(bmap); - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_map *isl_map_flatten(__isl_take isl_map *map) -{ - int i; - - if (!map) - return NULL; - - if (!map->dim->nested[0] && !map->dim->nested[1]) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_flatten(map->p[i]); - if (!map->p[i]) - goto error; - } - map->dim = isl_space_flatten(map->dim); - if (!map->dim) - goto error; - - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_flatten(__isl_take isl_set *set) -{ - return (isl_set *)isl_map_flatten((isl_map *)set); -} - -__isl_give isl_map *isl_set_flatten_map(__isl_take isl_set *set) -{ - isl_space *dim, *flat_dim; - isl_map *map; - - dim = isl_set_get_space(set); - flat_dim = isl_space_flatten(isl_space_copy(dim)); - map = isl_map_identity(isl_space_join(isl_space_reverse(dim), flat_dim)); - map = isl_map_intersect_domain(map, set); - - return map; -} - -__isl_give isl_map *isl_map_flatten_domain(__isl_take isl_map *map) -{ - int i; - - if (!map) - return NULL; - - if (!map->dim->nested[0]) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_flatten_domain(map->p[i]); - if (!map->p[i]) - goto error; - } - map->dim = isl_space_flatten_domain(map->dim); - if (!map->dim) - goto error; - - return map; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_map *isl_map_flatten_range(__isl_take isl_map *map) -{ - int i; - - if (!map) - return NULL; - - if (!map->dim->nested[1]) - return map; - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_flatten_range(map->p[i]); - if (!map->p[i]) - goto error; - } - map->dim = isl_space_flatten_range(map->dim); - if (!map->dim) - goto error; - - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Reorder the dimensions of "bmap" according to the given dim_map - * and set the dimension specification to "dim". - */ -__isl_give isl_basic_map *isl_basic_map_realign(__isl_take isl_basic_map *bmap, - __isl_take isl_space *dim, __isl_take struct isl_dim_map *dim_map) -{ - isl_basic_map *res; - - bmap = isl_basic_map_cow(bmap); - if (!bmap || !dim || !dim_map) - goto error; - - res = isl_basic_map_alloc_space(dim, - bmap->n_div, bmap->n_eq, bmap->n_ineq); - res = isl_basic_map_add_constraints_dim_map(res, bmap, dim_map); - res = isl_basic_map_finalize(res); - return res; -error: - free(dim_map); - isl_basic_map_free(bmap); - isl_space_free(dim); - return NULL; -} - -/* Reorder the dimensions of "map" according to given reordering. - */ -__isl_give isl_map *isl_map_realign(__isl_take isl_map *map, - __isl_take isl_reordering *r) -{ - int i; - struct isl_dim_map *dim_map; - - map = isl_map_cow(map); - dim_map = isl_dim_map_from_reordering(r); - if (!map || !r || !dim_map) - goto error; - - for (i = 0; i < map->n; ++i) { - struct isl_dim_map *dim_map_i; - - dim_map_i = isl_dim_map_extend(dim_map, map->p[i]); - - map->p[i] = isl_basic_map_realign(map->p[i], - isl_space_copy(r->dim), dim_map_i); - - if (!map->p[i]) - goto error; - } - - map = isl_map_reset_space(map, isl_space_copy(r->dim)); - - isl_reordering_free(r); - free(dim_map); - return map; -error: - free(dim_map); - isl_map_free(map); - isl_reordering_free(r); - return NULL; -} - -__isl_give isl_set *isl_set_realign(__isl_take isl_set *set, - __isl_take isl_reordering *r) -{ - return (isl_set *)isl_map_realign((isl_map *)set, r); -} - -__isl_give isl_map *isl_map_align_params(__isl_take isl_map *map, - __isl_take isl_space *model) -{ - isl_ctx *ctx; - - if (!map || !model) - goto error; - - ctx = isl_space_get_ctx(model); - if (!isl_space_has_named_params(model)) - isl_die(ctx, isl_error_invalid, - "model has unnamed parameters", goto error); - if (!isl_space_has_named_params(map->dim)) - isl_die(ctx, isl_error_invalid, - "relation has unnamed parameters", goto error); - if (!isl_space_match(map->dim, isl_dim_param, model, isl_dim_param)) { - isl_reordering *exp; - - model = isl_space_drop_dims(model, isl_dim_in, - 0, isl_space_dim(model, isl_dim_in)); - model = isl_space_drop_dims(model, isl_dim_out, - 0, isl_space_dim(model, isl_dim_out)); - exp = isl_parameter_alignment_reordering(map->dim, model); - exp = isl_reordering_extend_space(exp, isl_map_get_space(map)); - map = isl_map_realign(map, exp); - } - - isl_space_free(model); - return map; -error: - isl_space_free(model); - isl_map_free(map); - return NULL; -} - -__isl_give isl_set *isl_set_align_params(__isl_take isl_set *set, - __isl_take isl_space *model) -{ - return isl_map_align_params(set, model); -} - -__isl_give isl_mat *isl_basic_map_equalities_matrix( - __isl_keep isl_basic_map *bmap, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5) -{ - enum isl_dim_type c[5] = { c1, c2, c3, c4, c5 }; - struct isl_mat *mat; - int i, j, k; - int pos; - - if (!bmap) - return NULL; - mat = isl_mat_alloc(bmap->ctx, bmap->n_eq, - isl_basic_map_total_dim(bmap) + 1); - if (!mat) - return NULL; - for (i = 0; i < bmap->n_eq; ++i) - for (j = 0, pos = 0; j < 5; ++j) { - int off = isl_basic_map_offset(bmap, c[j]); - for (k = 0; k < isl_basic_map_dim(bmap, c[j]); ++k) { - isl_int_set(mat->row[i][pos], - bmap->eq[i][off + k]); - ++pos; - } - } - - return mat; -} - -__isl_give isl_mat *isl_basic_map_inequalities_matrix( - __isl_keep isl_basic_map *bmap, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5) -{ - enum isl_dim_type c[5] = { c1, c2, c3, c4, c5 }; - struct isl_mat *mat; - int i, j, k; - int pos; - - if (!bmap) - return NULL; - mat = isl_mat_alloc(bmap->ctx, bmap->n_ineq, - isl_basic_map_total_dim(bmap) + 1); - if (!mat) - return NULL; - for (i = 0; i < bmap->n_ineq; ++i) - for (j = 0, pos = 0; j < 5; ++j) { - int off = isl_basic_map_offset(bmap, c[j]); - for (k = 0; k < isl_basic_map_dim(bmap, c[j]); ++k) { - isl_int_set(mat->row[i][pos], - bmap->ineq[i][off + k]); - ++pos; - } - } - - return mat; -} - -__isl_give isl_basic_map *isl_basic_map_from_constraint_matrices( - __isl_take isl_space *dim, - __isl_take isl_mat *eq, __isl_take isl_mat *ineq, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, - enum isl_dim_type c4, enum isl_dim_type c5) -{ - enum isl_dim_type c[5] = { c1, c2, c3, c4, c5 }; - isl_basic_map *bmap; - unsigned total; - unsigned extra; - int i, j, k, l; - int pos; - - if (!dim || !eq || !ineq) - goto error; - - if (eq->n_col != ineq->n_col) - isl_die(dim->ctx, isl_error_invalid, - "equalities and inequalities matrices should have " - "same number of columns", goto error); - - total = 1 + isl_space_dim(dim, isl_dim_all); - - if (eq->n_col < total) - isl_die(dim->ctx, isl_error_invalid, - "number of columns too small", goto error); - - extra = eq->n_col - total; - - bmap = isl_basic_map_alloc_space(isl_space_copy(dim), extra, - eq->n_row, ineq->n_row); - if (!bmap) - goto error; - for (i = 0; i < extra; ++i) { - k = isl_basic_map_alloc_div(bmap); - if (k < 0) - goto error; - isl_int_set_si(bmap->div[k][0], 0); - } - for (i = 0; i < eq->n_row; ++i) { - l = isl_basic_map_alloc_equality(bmap); - if (l < 0) - goto error; - for (j = 0, pos = 0; j < 5; ++j) { - int off = isl_basic_map_offset(bmap, c[j]); - for (k = 0; k < isl_basic_map_dim(bmap, c[j]); ++k) { - isl_int_set(bmap->eq[l][off + k], - eq->row[i][pos]); - ++pos; - } - } - } - for (i = 0; i < ineq->n_row; ++i) { - l = isl_basic_map_alloc_inequality(bmap); - if (l < 0) - goto error; - for (j = 0, pos = 0; j < 5; ++j) { - int off = isl_basic_map_offset(bmap, c[j]); - for (k = 0; k < isl_basic_map_dim(bmap, c[j]); ++k) { - isl_int_set(bmap->ineq[l][off + k], - ineq->row[i][pos]); - ++pos; - } - } - } - - isl_space_free(dim); - isl_mat_free(eq); - isl_mat_free(ineq); - - return bmap; -error: - isl_space_free(dim); - isl_mat_free(eq); - isl_mat_free(ineq); - return NULL; -} - -__isl_give isl_mat *isl_basic_set_equalities_matrix( - __isl_keep isl_basic_set *bset, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, enum isl_dim_type c4) -{ - return isl_basic_map_equalities_matrix((isl_basic_map *)bset, - c1, c2, c3, c4, isl_dim_in); -} - -__isl_give isl_mat *isl_basic_set_inequalities_matrix( - __isl_keep isl_basic_set *bset, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, enum isl_dim_type c4) -{ - return isl_basic_map_inequalities_matrix((isl_basic_map *)bset, - c1, c2, c3, c4, isl_dim_in); -} - -__isl_give isl_basic_set *isl_basic_set_from_constraint_matrices( - __isl_take isl_space *dim, - __isl_take isl_mat *eq, __isl_take isl_mat *ineq, enum isl_dim_type c1, - enum isl_dim_type c2, enum isl_dim_type c3, enum isl_dim_type c4) -{ - return (isl_basic_set*) - isl_basic_map_from_constraint_matrices(dim, eq, ineq, - c1, c2, c3, c4, isl_dim_in); -} - -int isl_basic_map_can_zip(__isl_keep isl_basic_map *bmap) -{ - if (!bmap) - return -1; - - return isl_space_can_zip(bmap->dim); -} - -int isl_map_can_zip(__isl_keep isl_map *map) -{ - if (!map) - return -1; - - return isl_space_can_zip(map->dim); -} - -/* Given a basic map (A -> B) -> (C -> D), return the corresponding basic map - * (A -> C) -> (B -> D). - */ -__isl_give isl_basic_map *isl_basic_map_zip(__isl_take isl_basic_map *bmap) -{ - unsigned pos; - unsigned n1; - unsigned n2; - - if (!bmap) - return NULL; - - if (!isl_basic_map_can_zip(bmap)) - isl_die(bmap->ctx, isl_error_invalid, - "basic map cannot be zipped", goto error); - pos = isl_basic_map_offset(bmap, isl_dim_in) + - isl_space_dim(bmap->dim->nested[0], isl_dim_in); - n1 = isl_space_dim(bmap->dim->nested[0], isl_dim_out); - n2 = isl_space_dim(bmap->dim->nested[1], isl_dim_in); - bmap = isl_basic_map_swap_vars(bmap, pos, n1, n2); - if (!bmap) - return NULL; - bmap->dim = isl_space_zip(bmap->dim); - if (!bmap->dim) - goto error; - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Given a map (A -> B) -> (C -> D), return the corresponding map - * (A -> C) -> (B -> D). - */ -__isl_give isl_map *isl_map_zip(__isl_take isl_map *map) -{ - int i; - - if (!map) - return NULL; - - if (!isl_map_can_zip(map)) - isl_die(map->ctx, isl_error_invalid, "map cannot be zipped", - goto error); - - map = isl_map_cow(map); - if (!map) - return NULL; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_zip(map->p[i]); - if (!map->p[i]) - goto error; - } - - map->dim = isl_space_zip(map->dim); - if (!map->dim) - goto error; - - return map; -error: - isl_map_free(map); - return NULL; -} - -/* Construct a basic map mapping the domain of the affine expression - * to a one-dimensional range prescribed by the affine expression. - */ -__isl_give isl_basic_map *isl_basic_map_from_aff(__isl_take isl_aff *aff) -{ - int k; - int pos; - isl_local_space *ls; - isl_basic_map *bmap; - - if (!aff) - return NULL; - - ls = isl_aff_get_local_space(aff); - bmap = isl_basic_map_from_local_space(ls); - bmap = isl_basic_map_extend_constraints(bmap, 1, 0); - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - - pos = isl_basic_map_offset(bmap, isl_dim_out); - isl_seq_cpy(bmap->eq[k], aff->v->el + 1, pos); - isl_int_neg(bmap->eq[k][pos], aff->v->el[0]); - isl_seq_cpy(bmap->eq[k] + pos + 1, aff->v->el + 1 + pos, - aff->v->size - (pos + 1)); - - isl_aff_free(aff); - bmap = isl_basic_map_finalize(bmap); - return bmap; -error: - isl_aff_free(aff); - isl_basic_map_free(bmap); - return NULL; -} - -/* Construct a basic map mapping the domain the multi-affine expression - * to its range, with each dimension in the range equated to the - * corresponding affine expression. - */ -__isl_give isl_basic_map *isl_basic_map_from_multi_aff( - __isl_take isl_multi_aff *maff) -{ - int i; - isl_space *space; - isl_basic_map *bmap; - - if (!maff) - return NULL; - - if (isl_space_dim(maff->space, isl_dim_out) != maff->n) - isl_die(isl_multi_aff_get_ctx(maff), isl_error_internal, - "invalid space", return isl_multi_aff_free(maff)); - - space = isl_space_domain(isl_multi_aff_get_space(maff)); - bmap = isl_basic_map_universe(isl_space_from_domain(space)); - - for (i = 0; i < maff->n; ++i) { - isl_aff *aff; - isl_basic_map *bmap_i; - - aff = isl_aff_copy(maff->p[i]); - bmap_i = isl_basic_map_from_aff(aff); - - bmap = isl_basic_map_flat_range_product(bmap, bmap_i); - } - - bmap = isl_basic_map_reset_space(bmap, isl_multi_aff_get_space(maff)); - - isl_multi_aff_free(maff); - return bmap; -} - -/* Construct a basic map mapping a domain in the given space to - * to an n-dimensional range, with n the number of elements in the list, - * where each coordinate in the range is prescribed by the - * corresponding affine expression. - * The domains of all affine expressions in the list are assumed to match - * domain_dim. - */ -__isl_give isl_basic_map *isl_basic_map_from_aff_list( - __isl_take isl_space *domain_dim, __isl_take isl_aff_list *list) -{ - int i; - isl_space *dim; - isl_basic_map *bmap; - - if (!list) - return NULL; - - dim = isl_space_from_domain(domain_dim); - bmap = isl_basic_map_universe(dim); - - for (i = 0; i < list->n; ++i) { - isl_aff *aff; - isl_basic_map *bmap_i; - - aff = isl_aff_copy(list->p[i]); - bmap_i = isl_basic_map_from_aff(aff); - - bmap = isl_basic_map_flat_range_product(bmap, bmap_i); - } - - isl_aff_list_free(list); - return bmap; -} - -__isl_give isl_set *isl_set_equate(__isl_take isl_set *set, - enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2) -{ - return isl_map_equate(set, type1, pos1, type2, pos2); -} - -/* Add a constraint imposing that the given two dimensions are equal. - */ -__isl_give isl_map *isl_map_equate(__isl_take isl_map *map, - enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2) -{ - isl_basic_map *bmap = NULL; - int i; - - if (!map) - return NULL; - - if (pos1 >= isl_map_dim(map, type1)) - isl_die(map->ctx, isl_error_invalid, - "index out of bounds", goto error); - if (pos2 >= isl_map_dim(map, type2)) - isl_die(map->ctx, isl_error_invalid, - "index out of bounds", goto error); - - bmap = isl_basic_map_alloc_space(isl_map_get_space(map), 0, 1, 0); - i = isl_basic_map_alloc_equality(bmap); - if (i < 0) - goto error; - isl_seq_clr(bmap->eq[i], 1 + isl_basic_map_total_dim(bmap)); - pos1 += isl_basic_map_offset(bmap, type1); - pos2 += isl_basic_map_offset(bmap, type2); - isl_int_set_si(bmap->eq[i][pos1], -1); - isl_int_set_si(bmap->eq[i][pos2], 1); - bmap = isl_basic_map_finalize(bmap); - - map = isl_map_intersect(map, isl_map_from_basic_map(bmap)); - - return map; -error: - isl_basic_map_free(bmap); - isl_map_free(map); - return NULL; -} - -/* Add a constraint imposing that the given two dimensions have opposite values. - */ -__isl_give isl_map *isl_map_oppose(__isl_take isl_map *map, - enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2) -{ - isl_basic_map *bmap = NULL; - int i; - - if (!map) - return NULL; - - if (pos1 >= isl_map_dim(map, type1)) - isl_die(map->ctx, isl_error_invalid, - "index out of bounds", goto error); - if (pos2 >= isl_map_dim(map, type2)) - isl_die(map->ctx, isl_error_invalid, - "index out of bounds", goto error); - - bmap = isl_basic_map_alloc_space(isl_map_get_space(map), 0, 1, 0); - i = isl_basic_map_alloc_equality(bmap); - if (i < 0) - goto error; - isl_seq_clr(bmap->eq[i], 1 + isl_basic_map_total_dim(bmap)); - pos1 += isl_basic_map_offset(bmap, type1); - pos2 += isl_basic_map_offset(bmap, type2); - isl_int_set_si(bmap->eq[i][pos1], 1); - isl_int_set_si(bmap->eq[i][pos2], 1); - bmap = isl_basic_map_finalize(bmap); - - map = isl_map_intersect(map, isl_map_from_basic_map(bmap)); - - return map; -error: - isl_basic_map_free(bmap); - isl_map_free(map); - return NULL; -} - -__isl_give isl_aff *isl_basic_map_get_div(__isl_keep isl_basic_map *bmap, - int pos) -{ - isl_aff *div; - isl_local_space *ls; - - if (!bmap) - return NULL; - - if (!isl_basic_map_divs_known(bmap)) - isl_die(isl_basic_map_get_ctx(bmap), isl_error_invalid, - "some divs are unknown", return NULL); - - ls = isl_basic_map_get_local_space(bmap); - div = isl_local_space_get_div(ls, pos); - isl_local_space_free(ls); - - return div; -} - -__isl_give isl_aff *isl_basic_set_get_div(__isl_keep isl_basic_set *bset, - int pos) -{ - return isl_basic_map_get_div(bset, pos); -} - -/* Plug in "subs" for dimension "type", "pos" of "bset". - * - * Let i be the dimension to replace and let "subs" be of the form - * - * f/d - * - * Any integer division with a non-zero coefficient for i, - * - * floor((a i + g)/m) - * - * is replaced by - * - * floor((a f + d g)/(m d)) - * - * Constraints of the form - * - * a i + g - * - * are replaced by - * - * a f + d g - */ -__isl_give isl_basic_set *isl_basic_set_substitute( - __isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned pos, __isl_keep isl_aff *subs) -{ - int i; - isl_int v; - isl_ctx *ctx; - - if (bset && isl_basic_set_plain_is_empty(bset)) - return bset; - - bset = isl_basic_set_cow(bset); - if (!bset || !subs) - goto error; - - ctx = isl_basic_set_get_ctx(bset); - if (!isl_space_is_equal(bset->dim, subs->ls->dim)) - isl_die(ctx, isl_error_invalid, - "spaces don't match", goto error); - if (isl_local_space_dim(subs->ls, isl_dim_div) != 0) - isl_die(ctx, isl_error_unsupported, - "cannot handle divs yet", goto error); - - pos += isl_basic_set_offset(bset, type); - - isl_int_init(v); - - for (i = 0; i < bset->n_eq; ++i) { - if (isl_int_is_zero(bset->eq[i][pos])) - continue; - isl_int_set(v, bset->eq[i][pos]); - isl_int_set_si(bset->eq[i][pos], 0); - isl_seq_combine(bset->eq[i], subs->v->el[0], bset->eq[i], - v, subs->v->el + 1, subs->v->size - 1); - } - - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_int_is_zero(bset->ineq[i][pos])) - continue; - isl_int_set(v, bset->ineq[i][pos]); - isl_int_set_si(bset->ineq[i][pos], 0); - isl_seq_combine(bset->ineq[i], subs->v->el[0], bset->ineq[i], - v, subs->v->el + 1, subs->v->size - 1); - } - - for (i = 0; i < bset->n_div; ++i) { - if (isl_int_is_zero(bset->div[i][1 + pos])) - continue; - isl_int_set(v, bset->div[i][1 + pos]); - isl_int_set_si(bset->div[i][1 + pos], 0); - isl_seq_combine(bset->div[i] + 1, - subs->v->el[0], bset->div[i] + 1, - v, subs->v->el + 1, subs->v->size - 1); - isl_int_mul(bset->div[i][0], bset->div[i][0], subs->v->el[0]); - } - - isl_int_clear(v); - - bset = isl_basic_set_simplify(bset); - return isl_basic_set_finalize(bset); -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Plug in "subs" for dimension "type", "pos" of "set". - */ -__isl_give isl_set *isl_set_substitute(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, __isl_keep isl_aff *subs) -{ - int i; - - if (set && isl_set_plain_is_empty(set)) - return set; - - set = isl_set_cow(set); - if (!set || !subs) - goto error; - - for (i = set->n - 1; i >= 0; --i) { - set->p[i] = isl_basic_set_substitute(set->p[i], type, pos, subs); - if (!set->p[i]) - goto error; - if (isl_basic_set_plain_is_empty(set->p[i])) { - isl_basic_set_free(set->p[i]); - if (i != set->n - 1) - set->p[i] = set->p[set->n - 1]; - set->n--; - } - } - - return set; -error: - isl_set_free(set); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_map_no_piplib.c b/cloog-0.17.0/isl/isl_map_no_piplib.c deleted file mode 100644 index 8a28b07..0000000 --- a/cloog-0.17.0/isl/isl_map_no_piplib.c +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include "isl_map_piplib.h" -#include - -struct isl_map *isl_pip_basic_map_lexopt( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty, int max) -{ - isl_basic_map_free(bmap); - isl_basic_set_free(dom); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_map_piplib.c b/cloog-0.17.0/isl/isl_map_piplib.c deleted file mode 100644 index 1718153..0000000 --- a/cloog-0.17.0/isl/isl_map_piplib.c +++ /dev/null @@ -1,476 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include -#include -#include "isl_piplib.h" -#include "isl_map_piplib.h" - -static void copy_values_from(isl_int *dst, Entier *src, unsigned n) -{ - int i; - - for (i = 0; i < n; ++i) - entier_assign(dst[i], src[i]); -} - -static void add_value(isl_int *dst, Entier *src) -{ - mpz_add(*dst, *dst, *src); -} - -static void copy_constraint_from(isl_int *dst, PipVector *src, - unsigned nparam, unsigned n_in, unsigned n_out, - unsigned extra, int *pos) -{ - int i; - - copy_values_from(dst, src->the_vector+src->nb_elements-1, 1); - copy_values_from(dst+1, src->the_vector, nparam+n_in); - isl_seq_clr(dst+1+nparam+n_in, n_out); - isl_seq_clr(dst+1+nparam+n_in+n_out, extra); - for (i = 0; i + n_in + nparam < src->nb_elements-1; ++i) { - int p = pos[i]; - add_value(&dst[1+nparam+n_in+n_out+p], - &src->the_vector[n_in+nparam+i]); - } -} - -static int add_inequality(struct isl_ctx *ctx, - struct isl_basic_map *bmap, int *pos, PipVector *vec) -{ - unsigned nparam = isl_basic_map_n_param(bmap); - unsigned n_in = isl_basic_map_n_in(bmap); - unsigned n_out = isl_basic_map_n_out(bmap); - unsigned n_div = isl_basic_map_n_div(bmap); - int i = isl_basic_map_alloc_inequality(bmap); - if (i < 0) - return -1; - copy_constraint_from(bmap->ineq[i], vec, - nparam, n_in, n_out, n_div, pos); - - return i; -} - -/* For a div d = floor(f/m), add the constraints - * - * f - m d >= 0 - * -(f-(n-1)) + m d >= 0 - * - * Note that the second constraint is the negation of - * - * f - m d >= n - */ -static int add_div_constraints(struct isl_ctx *ctx, - struct isl_basic_map *bmap, int *pos, PipNewparm *p, unsigned div) -{ - int i, j; - unsigned total = isl_basic_map_total_dim(bmap); - unsigned div_pos = 1 + total - bmap->n_div + div; - - i = add_inequality(ctx, bmap, pos, p->vector); - if (i < 0) - return -1; - copy_values_from(&bmap->ineq[i][div_pos], &p->deno, 1); - isl_int_neg(bmap->ineq[i][div_pos], bmap->ineq[i][div_pos]); - - j = isl_basic_map_alloc_inequality(bmap); - if (j < 0) - return -1; - isl_seq_neg(bmap->ineq[j], bmap->ineq[i], 1 + total); - isl_int_add(bmap->ineq[j][0], bmap->ineq[j][0], bmap->ineq[j][div_pos]); - isl_int_sub_ui(bmap->ineq[j][0], bmap->ineq[j][0], 1); - return j; -} - -static int add_equality(struct isl_ctx *ctx, - struct isl_basic_map *bmap, int *pos, - unsigned var, PipVector *vec) -{ - int i; - unsigned nparam = isl_basic_map_n_param(bmap); - unsigned n_in = isl_basic_map_n_in(bmap); - unsigned n_out = isl_basic_map_n_out(bmap); - - isl_assert(ctx, var < n_out, return -1); - - i = isl_basic_map_alloc_equality(bmap); - if (i < 0) - return -1; - copy_constraint_from(bmap->eq[i], vec, - nparam, n_in, n_out, bmap->extra, pos); - isl_int_set_si(bmap->eq[i][1+nparam+n_in+var], -1); - - return i; -} - -static int find_div(struct isl_ctx *ctx, - struct isl_basic_map *bmap, int *pos, PipNewparm *p) -{ - int i, j; - unsigned nparam = isl_basic_map_n_param(bmap); - unsigned n_in = isl_basic_map_n_in(bmap); - unsigned n_out = isl_basic_map_n_out(bmap); - - i = isl_basic_map_alloc_div(bmap); - if (i < 0) - return -1; - - copy_constraint_from(bmap->div[i]+1, p->vector, - nparam, n_in, n_out, bmap->extra, pos); - - copy_values_from(bmap->div[i], &p->deno, 1); - for (j = 0; j < i; ++j) - if (isl_seq_eq(bmap->div[i], bmap->div[j], - 1+1+isl_basic_map_total_dim(bmap)+j)) { - isl_basic_map_free_div(bmap, 1); - return j; - } - - if (add_div_constraints(ctx, bmap, pos, p, i) < 0) - return -1; - - return i; -} - -/* Count some properties of a quast - * - maximal number of new parameters - * - maximal depth - * - total number of solutions - * - total number of empty branches - */ -static void quast_count(PipQuast *q, int *maxnew, int depth, int *maxdepth, - int *sol, int *nosol) -{ - PipNewparm *p; - - for (p = q->newparm; p; p = p->next) - if (p->rank > *maxnew) - *maxnew = p->rank; - if (q->condition) { - if (++depth > *maxdepth) - *maxdepth = depth; - quast_count(q->next_else, maxnew, depth, maxdepth, sol, nosol); - quast_count(q->next_then, maxnew, depth, maxdepth, sol, nosol); - } else { - if (q->list) - ++(*sol); - else - ++(*nosol); - } -} - -/* - * pos: array of length bmap->set.extra, mapping each of the existential - * variables PIP proposes to an existential variable in bmap - * bmap: collects the currently active constraints - * rest: collects the empty leaves of the quast (if not NULL) - */ -struct scan_data { - struct isl_ctx *ctx; - struct isl_basic_map *bmap; - struct isl_set **rest; - int *pos; -}; - -/* - * New existentially quantified variables are places after the existing ones. - */ -static struct isl_map *scan_quast_r(struct scan_data *data, PipQuast *q, - struct isl_map *map) -{ - PipNewparm *p; - struct isl_basic_map *bmap = data->bmap; - unsigned old_n_div = bmap->n_div; - unsigned nparam = isl_basic_map_n_param(bmap); - unsigned n_in = isl_basic_map_n_in(bmap); - unsigned n_out = isl_basic_map_n_out(bmap); - - if (!map) - goto error; - - for (p = q->newparm; p; p = p->next) { - int pos; - unsigned pip_param = nparam + n_in; - - pos = find_div(data->ctx, bmap, data->pos, p); - if (pos < 0) - goto error; - data->pos[p->rank - pip_param] = pos; - } - - if (q->condition) { - int pos = add_inequality(data->ctx, bmap, data->pos, - q->condition); - if (pos < 0) - goto error; - map = scan_quast_r(data, q->next_then, map); - - if (isl_inequality_negate(bmap, pos)) - goto error; - map = scan_quast_r(data, q->next_else, map); - - if (isl_basic_map_free_inequality(bmap, 1)) - goto error; - } else if (q->list) { - PipList *l; - int j; - /* if bmap->n_out is zero, we are only interested in the domains - * where a solution exists and not in the actual solution - */ - for (j = 0, l = q->list; j < n_out && l; ++j, l = l->next) - if (add_equality(data->ctx, bmap, data->pos, j, - l->vector) < 0) - goto error; - map = isl_map_add_basic_map(map, isl_basic_map_copy(bmap)); - if (isl_basic_map_free_equality(bmap, n_out)) - goto error; - } else if (data->rest) { - struct isl_basic_set *bset; - bset = isl_basic_set_from_basic_map(isl_basic_map_copy(bmap)); - bset = isl_basic_set_drop_dims(bset, n_in, n_out); - if (!bset) - goto error; - *data->rest = isl_set_add_basic_set(*data->rest, bset); - } - - if (isl_basic_map_free_inequality(bmap, 2*(bmap->n_div - old_n_div))) - goto error; - if (isl_basic_map_free_div(bmap, bmap->n_div - old_n_div)) - goto error; - return map; -error: - isl_map_free(map); - return NULL; -} - -/* - * Returns a map of dimension "keep_dim" with "context" as domain and - * as range the first "isl_space_dim(keep_dim, isl_dim_out)" variables - * in the quast lists. - */ -static struct isl_map *isl_map_from_quast(struct isl_ctx *ctx, PipQuast *q, - isl_space *keep_dim, - struct isl_basic_set *context, - struct isl_set **rest) -{ - int pip_param; - int nexist; - int max_depth; - int n_sol, n_nosol; - struct scan_data data; - struct isl_map *map = NULL; - isl_space *dims; - unsigned nparam; - unsigned dim; - unsigned keep; - - data.ctx = ctx; - data.rest = rest; - data.bmap = NULL; - data.pos = NULL; - - if (!context || !keep_dim) - goto error; - - dim = isl_basic_set_n_dim(context); - nparam = isl_basic_set_n_param(context); - keep = isl_space_dim(keep_dim, isl_dim_out); - pip_param = nparam + dim; - - max_depth = 0; - n_sol = 0; - n_nosol = 0; - nexist = pip_param-1; - quast_count(q, &nexist, 0, &max_depth, &n_sol, &n_nosol); - nexist -= pip_param-1; - - if (rest) { - *rest = isl_set_alloc_space(isl_space_copy(context->dim), n_nosol, - ISL_MAP_DISJOINT); - if (!*rest) - goto error; - } - map = isl_map_alloc_space(isl_space_copy(keep_dim), n_sol, - ISL_MAP_DISJOINT); - if (!map) - goto error; - - dims = isl_space_reverse(isl_space_copy(context->dim)); - data.bmap = isl_basic_map_from_basic_set(context, dims); - data.bmap = isl_basic_map_extend_space(data.bmap, - keep_dim, nexist, keep, max_depth+2*nexist); - if (!data.bmap) - goto error2; - - if (data.bmap->extra) { - int i; - data.pos = isl_alloc_array(ctx, int, data.bmap->extra); - if (!data.pos) - goto error; - for (i = 0; i < data.bmap->n_div; ++i) - data.pos[i] = i; - } - - map = scan_quast_r(&data, q, map); - map = isl_map_finalize(map); - if (!map) - goto error2; - if (rest) { - *rest = isl_set_finalize(*rest); - if (!*rest) - goto error2; - } - isl_basic_map_free(data.bmap); - if (data.pos) - free(data.pos); - return map; -error: - isl_basic_set_free(context); - isl_space_free(keep_dim); -error2: - if (data.pos) - free(data.pos); - isl_basic_map_free(data.bmap); - isl_map_free(map); - if (rest) { - isl_set_free(*rest); - *rest = NULL; - } - return NULL; -} - -static void copy_values_to(Entier *dst, isl_int *src, unsigned n) -{ - int i; - - for (i = 0; i < n; ++i) - entier_assign(dst[i], src[i]); -} - -static void copy_constraint_to(Entier *dst, isl_int *src, - unsigned pip_param, unsigned pip_var, - unsigned extra_front, unsigned extra_back) -{ - copy_values_to(dst+1+extra_front+pip_var+pip_param+extra_back, src, 1); - copy_values_to(dst+1+extra_front+pip_var, src+1, pip_param); - copy_values_to(dst+1+extra_front, src+1+pip_param, pip_var); -} - -PipMatrix *isl_basic_map_to_pip(struct isl_basic_map *bmap, unsigned pip_param, - unsigned extra_front, unsigned extra_back) -{ - int i; - unsigned nrow; - unsigned ncol; - PipMatrix *M; - unsigned off; - unsigned pip_var = isl_basic_map_total_dim(bmap) - pip_param; - - nrow = extra_front + bmap->n_eq + bmap->n_ineq; - ncol = 1 + extra_front + pip_var + pip_param + extra_back + 1; - M = pip_matrix_alloc(nrow, ncol); - if (!M) - return NULL; - - off = extra_front; - for (i = 0; i < bmap->n_eq; ++i) { - entier_set_si(M->p[off+i][0], 0); - copy_constraint_to(M->p[off+i], bmap->eq[i], - pip_param, pip_var, extra_front, extra_back); - } - off += bmap->n_eq; - for (i = 0; i < bmap->n_ineq; ++i) { - entier_set_si(M->p[off+i][0], 1); - copy_constraint_to(M->p[off+i], bmap->ineq[i], - pip_param, pip_var, extra_front, extra_back); - } - return M; -} - -PipMatrix *isl_basic_set_to_pip(struct isl_basic_set *bset, unsigned pip_param, - unsigned extra_front, unsigned extra_back) -{ - return isl_basic_map_to_pip((struct isl_basic_map *)bset, - pip_param, extra_front, extra_back); -} - -struct isl_map *isl_pip_basic_map_lexopt( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty, int max) -{ - PipOptions *options; - PipQuast *sol; - struct isl_map *map; - struct isl_ctx *ctx; - PipMatrix *domain = NULL, *context = NULL; - unsigned nparam, n_in, n_out; - - bmap = isl_basic_map_detect_equalities(bmap); - if (!bmap || !dom) - goto error; - - ctx = bmap->ctx; - isl_assert(ctx, isl_basic_map_compatible_domain(bmap, dom), goto error); - nparam = isl_basic_map_n_param(bmap); - n_in = isl_basic_map_n_in(bmap); - n_out = isl_basic_map_n_out(bmap); - - domain = isl_basic_map_to_pip(bmap, nparam + n_in, 0, dom->n_div); - if (!domain) - goto error; - context = isl_basic_map_to_pip((struct isl_basic_map *)dom, 0, 0, 0); - if (!context) - goto error; - - options = pip_options_init(); - options->Simplify = 1; - options->Maximize = max; - options->Urs_unknowns = -1; - options->Urs_parms = -1; - sol = pip_solve(domain, context, -1, options); - - if (sol) { - struct isl_basic_set *copy; - copy = isl_basic_set_copy(dom); - map = isl_map_from_quast(ctx, sol, - isl_space_copy(bmap->dim), copy, empty); - } else { - map = isl_map_empty_like_basic_map(bmap); - if (empty) - *empty = NULL; - } - if (!map) - goto error; - if (map->n == 0 && empty) { - isl_set_free(*empty); - *empty = isl_set_from_basic_set(dom); - } else - isl_basic_set_free(dom); - isl_basic_map_free(bmap); - - pip_quast_free(sol); - pip_options_free(options); - pip_matrix_free(domain); - pip_matrix_free(context); - - return map; -error: - if (domain) - pip_matrix_free(domain); - if (context) - pip_matrix_free(context); - isl_basic_map_free(bmap); - isl_basic_set_free(dom); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_map_piplib.h b/cloog-0.17.0/isl/isl_map_piplib.h deleted file mode 100644 index e796e4a..0000000 --- a/cloog-0.17.0/isl/isl_map_piplib.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_MAP_PIPLIB_H -#define ISL_MAP_PIPLIB_H - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_map *isl_pip_basic_map_lexopt( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty, int max); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/isl_map_private.h b/cloog-0.17.0/isl/isl_map_private.h deleted file mode 100644 index f3c6cd2..0000000 --- a/cloog-0.17.0/isl/isl_map_private.h +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_MAP_PRIVATE_H -#define ISL_MAP_PRIVATE_H - -#define isl_basic_set isl_basic_map -#define isl_set isl_map -#define isl_basic_set_list isl_basic_map_list -#include -#include -#include -#include - -/* A "basic map" is a relation between two sets of variables, - * called the "in" and "out" variables. - * A "basic set" is a basic map with a zero-dimensional - * domain. - * - * It is implemented as a set with two extra fields: - * n_in is the number of in variables - * n_out is the number of out variables - * n_in + n_out should be equal to set.dim - */ -struct isl_basic_map { - int ref; -#define ISL_BASIC_MAP_FINAL (1 << 0) -#define ISL_BASIC_MAP_EMPTY (1 << 1) -#define ISL_BASIC_MAP_NO_IMPLICIT (1 << 2) -#define ISL_BASIC_MAP_NO_REDUNDANT (1 << 3) -#define ISL_BASIC_MAP_RATIONAL (1 << 4) -#define ISL_BASIC_MAP_NORMALIZED (1 << 5) -#define ISL_BASIC_MAP_NORMALIZED_DIVS (1 << 6) -#define ISL_BASIC_MAP_ALL_EQUALITIES (1 << 7) -#define ISL_BASIC_SET_FINAL (1 << 0) -#define ISL_BASIC_SET_EMPTY (1 << 1) -#define ISL_BASIC_SET_NO_IMPLICIT (1 << 2) -#define ISL_BASIC_SET_NO_REDUNDANT (1 << 3) -#define ISL_BASIC_SET_RATIONAL (1 << 4) -#define ISL_BASIC_SET_NORMALIZED (1 << 5) -#define ISL_BASIC_SET_NORMALIZED_DIVS (1 << 6) -#define ISL_BASIC_SET_ALL_EQUALITIES (1 << 7) - unsigned flags; - - struct isl_ctx *ctx; - - isl_space *dim; - unsigned extra; - - unsigned n_eq; - unsigned n_ineq; - - size_t c_size; - isl_int **eq; - isl_int **ineq; - - unsigned n_div; - - isl_int **div; - - struct isl_vec *sample; - - struct isl_blk block; - struct isl_blk block2; -}; - -/* A "map" is a (possibly disjoint) union of basic maps. - * A "set" is a (possibly disjoint) union of basic sets. - * - * Currently, the isl_set structure is identical to the isl_map structure - * and the library depends on this correspondence internally. - * However, users should not depend on this correspondence. - */ -struct isl_map { - int ref; -#define ISL_MAP_DISJOINT (1 << 0) -#define ISL_MAP_NORMALIZED (1 << 1) -#define ISL_SET_DISJOINT (1 << 0) -#define ISL_SET_NORMALIZED (1 << 1) - unsigned flags; - - struct isl_ctx *ctx; - - isl_space *dim; - - int n; - - size_t size; - struct isl_basic_map *p[1]; -}; - -__isl_give isl_map *isl_map_realign(__isl_take isl_map *map, - __isl_take isl_reordering *r); -__isl_give isl_set *isl_set_realign(__isl_take isl_set *set, - __isl_take isl_reordering *r); - -__isl_give isl_map *isl_map_reset(__isl_take isl_map *map, - enum isl_dim_type type); - -__isl_give isl_basic_set *isl_basic_set_reset_space( - __isl_take isl_basic_set *bset, __isl_take isl_space *dim); -__isl_give isl_basic_map *isl_basic_map_reset_space( - __isl_take isl_basic_map *bmap, __isl_take isl_space *dim); -__isl_give isl_map *isl_map_reset_space(__isl_take isl_map *map, - __isl_take isl_space *dim); - -unsigned isl_basic_map_offset(struct isl_basic_map *bmap, - enum isl_dim_type type); -unsigned isl_basic_set_offset(struct isl_basic_set *bset, - enum isl_dim_type type); - -int isl_basic_map_may_be_set(__isl_keep isl_basic_map *bmap); -int isl_map_may_be_set(__isl_keep isl_map *map); -int isl_map_compatible_domain(struct isl_map *map, struct isl_set *set); -int isl_basic_map_compatible_domain(struct isl_basic_map *bmap, - struct isl_basic_set *bset); -int isl_basic_map_compatible_range(struct isl_basic_map *bmap, - struct isl_basic_set *bset); - -struct isl_basic_map *isl_basic_map_extend_space(struct isl_basic_map *base, - __isl_take isl_space *dim, unsigned extra, - unsigned n_eq, unsigned n_ineq); -struct isl_basic_set *isl_basic_set_extend_space(struct isl_basic_set *base, - __isl_take isl_space *dim, unsigned extra, - unsigned n_eq, unsigned n_ineq); -struct isl_basic_set *isl_basic_set_add_constraints(struct isl_basic_set *bset1, - struct isl_basic_set *bset2, unsigned pos); - -struct isl_map *isl_map_grow(struct isl_map *map, int n); -struct isl_set *isl_set_grow(struct isl_set *set, int n); - -int isl_basic_set_contains(struct isl_basic_set *bset, struct isl_vec *vec); -int isl_basic_map_contains(struct isl_basic_map *bmap, struct isl_vec *vec); - -__isl_give isl_basic_set *isl_basic_set_alloc_space(__isl_take isl_space *dim, - unsigned extra, unsigned n_eq, unsigned n_ineq); -__isl_give isl_set *isl_set_alloc_space(__isl_take isl_space *dim, int n, - unsigned flags); -__isl_give isl_basic_map *isl_basic_map_alloc_space(__isl_take isl_space *dim, - unsigned extra, unsigned n_eq, unsigned n_ineq); -__isl_give isl_map *isl_map_alloc_space(__isl_take isl_space *dim, int n, - unsigned flags); - -unsigned isl_basic_map_total_dim(const struct isl_basic_map *bmap); - -int isl_basic_map_alloc_equality(struct isl_basic_map *bmap); -int isl_basic_set_alloc_equality(struct isl_basic_set *bset); -int isl_basic_set_free_inequality(struct isl_basic_set *bset, unsigned n); -int isl_basic_map_free_equality(struct isl_basic_map *bmap, unsigned n); -int isl_basic_set_free_equality(struct isl_basic_set *bset, unsigned n); -int isl_basic_set_alloc_inequality(struct isl_basic_set *bset); -int isl_basic_map_alloc_inequality(struct isl_basic_map *bmap); -int isl_basic_map_free_inequality(struct isl_basic_map *bmap, unsigned n); -int isl_basic_map_alloc_div(struct isl_basic_map *bmap); -int isl_basic_set_alloc_div(struct isl_basic_set *bset); -int isl_basic_map_free_div(struct isl_basic_map *bmap, unsigned n); -int isl_basic_set_free_div(struct isl_basic_set *bset, unsigned n); -void isl_basic_map_inequality_to_equality( - struct isl_basic_map *bmap, unsigned pos); -int isl_basic_map_drop_equality(struct isl_basic_map *bmap, unsigned pos); -int isl_basic_set_drop_equality(struct isl_basic_set *bset, unsigned pos); -int isl_basic_set_drop_inequality(struct isl_basic_set *bset, unsigned pos); -int isl_basic_map_drop_inequality(struct isl_basic_map *bmap, unsigned pos); -__isl_give isl_basic_set *isl_basic_set_add_eq(__isl_take isl_basic_set *bset, - isl_int *eq); -__isl_give isl_basic_map *isl_basic_map_add_eq(__isl_take isl_basic_map *bmap, - isl_int *eq); -__isl_give isl_basic_set *isl_basic_set_add_ineq(__isl_take isl_basic_set *bset, - isl_int *ineq); -__isl_give isl_basic_map *isl_basic_map_add_ineq(__isl_take isl_basic_map *bmap, - isl_int *ineq); - -int isl_inequality_negate(struct isl_basic_map *bmap, unsigned pos); - -struct isl_basic_set *isl_basic_set_cow(struct isl_basic_set *bset); -struct isl_basic_map *isl_basic_map_cow(struct isl_basic_map *bmap); -struct isl_set *isl_set_cow(struct isl_set *set); -struct isl_map *isl_map_cow(struct isl_map *map); - -struct isl_basic_map *isl_basic_map_set_to_empty(struct isl_basic_map *bmap); -struct isl_basic_set *isl_basic_set_set_to_empty(struct isl_basic_set *bset); -struct isl_basic_set *isl_basic_set_order_divs(struct isl_basic_set *bset); -void isl_basic_map_swap_div(struct isl_basic_map *bmap, int a, int b); -struct isl_basic_map *isl_basic_map_order_divs(struct isl_basic_map *bmap); -__isl_give isl_map *isl_map_order_divs(__isl_take isl_map *map); -struct isl_basic_map *isl_basic_map_align_divs( - struct isl_basic_map *dst, struct isl_basic_map *src); -struct isl_basic_set *isl_basic_set_align_divs( - struct isl_basic_set *dst, struct isl_basic_set *src); -struct isl_basic_map *isl_basic_map_gauss( - struct isl_basic_map *bmap, int *progress); -struct isl_basic_set *isl_basic_set_gauss( - struct isl_basic_set *bset, int *progress); -__isl_give isl_basic_set *isl_basic_set_sort_constraints( - __isl_take isl_basic_set *bset); -int isl_basic_map_plain_cmp(const __isl_keep isl_basic_map *bmap1, - const __isl_keep isl_basic_map *bmap2); -int isl_set_plain_cmp(const __isl_keep isl_set *set1, - const __isl_keep isl_set *set2); -int isl_basic_set_plain_is_equal(__isl_keep isl_basic_set *bset1, - __isl_keep isl_basic_set *bset2); -int isl_basic_map_plain_is_equal(__isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2); -struct isl_basic_map *isl_basic_map_normalize_constraints( - struct isl_basic_map *bmap); -struct isl_basic_set *isl_basic_set_normalize_constraints( - struct isl_basic_set *bset); -struct isl_basic_map *isl_basic_map_implicit_equalities( - struct isl_basic_map *bmap); -struct isl_basic_set *isl_basic_map_underlying_set(struct isl_basic_map *bmap); -__isl_give isl_basic_set *isl_basic_set_underlying_set( - __isl_take isl_basic_set *bset); -struct isl_set *isl_map_underlying_set(struct isl_map *map); -struct isl_basic_map *isl_basic_map_overlying_set(struct isl_basic_set *bset, - struct isl_basic_map *like); -__isl_give isl_basic_set *isl_basic_set_drop_constraints_involving( - __isl_take isl_basic_set *bset, unsigned first, unsigned n); -__isl_give isl_basic_set *isl_basic_set_drop(__isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n); -struct isl_basic_map *isl_basic_map_drop(struct isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n); -struct isl_set *isl_set_drop(struct isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); -struct isl_basic_set *isl_basic_set_drop_dims( - struct isl_basic_set *bset, unsigned first, unsigned n); -struct isl_set *isl_set_drop_dims( - struct isl_set *set, unsigned first, unsigned n); -struct isl_map *isl_map_drop_inputs( - struct isl_map *map, unsigned first, unsigned n); -struct isl_map *isl_map_drop(struct isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n); - -struct isl_map *isl_map_remove_empty_parts(struct isl_map *map); -struct isl_set *isl_set_remove_empty_parts(struct isl_set *set); - -struct isl_set *isl_set_normalize(struct isl_set *set); - -struct isl_set *isl_set_drop_vars( - struct isl_set *set, unsigned first, unsigned n); - -struct isl_basic_map *isl_basic_map_eliminate_vars( - struct isl_basic_map *bmap, unsigned pos, unsigned n); -struct isl_basic_set *isl_basic_set_eliminate_vars( - struct isl_basic_set *bset, unsigned pos, unsigned n); - -__isl_give isl_map *isl_map_eliminate(__isl_take isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_set *isl_set_eliminate(__isl_take isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n); - -int isl_basic_set_constraint_is_redundant(struct isl_basic_set **bset, - isl_int *c, isl_int *opt_n, isl_int *opt_d); - -int isl_basic_map_add_div_constraints(struct isl_basic_map *bmap, unsigned div); -struct isl_basic_map *isl_basic_map_drop_redundant_divs( - struct isl_basic_map *bmap); -struct isl_basic_set *isl_basic_set_drop_redundant_divs( - struct isl_basic_set *bset); - -struct isl_basic_set *isl_basic_set_recession_cone(struct isl_basic_set *bset); -struct isl_basic_set *isl_basic_set_lineality_space(struct isl_basic_set *bset); - -struct isl_basic_set *isl_basic_set_set_rational(struct isl_basic_set *bset); -__isl_give isl_basic_map *isl_basic_map_set_rational( - __isl_take isl_basic_map *bmap); -__isl_give isl_map *isl_map_set_rational(__isl_take isl_map *map); - -struct isl_mat; - -struct isl_basic_set *isl_basic_set_preimage(struct isl_basic_set *bset, - struct isl_mat *mat); -struct isl_set *isl_set_preimage(struct isl_set *set, struct isl_mat *mat); - -__isl_give isl_basic_set *isl_basic_set_transform_dims( - __isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned first, - __isl_take isl_mat *trans); - -isl_int *isl_set_wrap_facet(__isl_keep isl_set *set, - isl_int *facet, isl_int *ridge); - -int isl_basic_map_contains_point(__isl_keep isl_basic_map *bmap, - __isl_keep isl_point *point); -int isl_set_contains_point(__isl_keep isl_set *set, __isl_keep isl_point *point); - -int isl_basic_set_vars_get_sign(__isl_keep isl_basic_set *bset, - unsigned first, unsigned n, int *signs); -int isl_set_foreach_orthant(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_set *orthant, int *signs, void *user), - void *user); - -int isl_basic_map_add_div_constraints_var(__isl_keep isl_basic_map *bmap, - unsigned pos, isl_int *div); -int isl_basic_set_add_div_constraints_var(__isl_keep isl_basic_set *bset, - unsigned pos, isl_int *div); -int isl_basic_map_is_div_constraint(__isl_keep isl_basic_map *bmap, - isl_int *constraint, unsigned div); - -__isl_give isl_basic_set *isl_basic_set_from_local_space( - __isl_take isl_local_space *ls); -__isl_give isl_basic_map *isl_basic_map_from_local_space( - __isl_take isl_local_space *ls); -__isl_give isl_basic_set *isl_basic_set_expand_divs( - __isl_take isl_basic_set *bset, __isl_take isl_mat *div, int *exp); - -int isl_basic_map_divs_known(__isl_keep isl_basic_map *bmap); - -__isl_give isl_map *isl_map_inline_foreach_basic_map(__isl_take isl_map *map, - __isl_give isl_basic_map *(*fn)(__isl_take isl_basic_map *bmap)); - -__isl_give isl_map *isl_map_align_params_map_map_and( - __isl_take isl_map *map1, __isl_take isl_map *map2, - __isl_give isl_map *(*fn)(__isl_take isl_map *map1, - __isl_take isl_map *map2)); -int isl_map_align_params_map_map_and_test(__isl_keep isl_map *map1, - __isl_keep isl_map *map2, - int (*fn)(__isl_keep isl_map *map1, __isl_keep isl_map *map2)); - -int isl_basic_map_foreach_lexopt(__isl_keep isl_basic_map *bmap, int max, - int (*fn)(__isl_take isl_basic_set *dom, __isl_take isl_aff_list *list, - void *user), - void *user); -int isl_basic_set_foreach_lexopt(__isl_keep isl_basic_set *bset, int max, - int (*fn)(__isl_take isl_basic_set *dom, __isl_take isl_aff_list *list, - void *user), - void *user); - -__isl_give isl_set *isl_set_substitute(__isl_take isl_set *set, - enum isl_dim_type type, unsigned pos, __isl_keep isl_aff *subs); - -__isl_give isl_set *isl_set_gist_params_basic_set(__isl_take isl_set *set, - __isl_take isl_basic_set *context); - -int isl_map_compatible_range(__isl_keep isl_map *map, __isl_keep isl_set *set); - -#endif diff --git a/cloog-0.17.0/isl/isl_map_simplify.c b/cloog-0.17.0/isl/isl_map_simplify.c deleted file mode 100644 index e568733..0000000 --- a/cloog-0.17.0/isl/isl_map_simplify.c +++ /dev/null @@ -1,2569 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include "isl_equalities.h" -#include -#include -#include "isl_tab.h" -#include -#include - -static void swap_equality(struct isl_basic_map *bmap, int a, int b) -{ - isl_int *t = bmap->eq[a]; - bmap->eq[a] = bmap->eq[b]; - bmap->eq[b] = t; -} - -static void swap_inequality(struct isl_basic_map *bmap, int a, int b) -{ - if (a != b) { - isl_int *t = bmap->ineq[a]; - bmap->ineq[a] = bmap->ineq[b]; - bmap->ineq[b] = t; - } -} - -static void constraint_drop_vars(isl_int *c, unsigned n, unsigned rem) -{ - isl_seq_cpy(c, c + n, rem); - isl_seq_clr(c + rem, n); -} - -/* Drop n dimensions starting at first. - * - * In principle, this frees up some extra variables as the number - * of columns remains constant, but we would have to extend - * the div array too as the number of rows in this array is assumed - * to be equal to extra. - */ -struct isl_basic_set *isl_basic_set_drop_dims( - struct isl_basic_set *bset, unsigned first, unsigned n) -{ - int i; - - if (!bset) - goto error; - - isl_assert(bset->ctx, first + n <= bset->dim->n_out, goto error); - - if (n == 0 && !isl_space_get_tuple_name(bset->dim, isl_dim_set)) - return bset; - - bset = isl_basic_set_cow(bset); - if (!bset) - return NULL; - - for (i = 0; i < bset->n_eq; ++i) - constraint_drop_vars(bset->eq[i]+1+bset->dim->nparam+first, n, - (bset->dim->n_out-first-n)+bset->extra); - - for (i = 0; i < bset->n_ineq; ++i) - constraint_drop_vars(bset->ineq[i]+1+bset->dim->nparam+first, n, - (bset->dim->n_out-first-n)+bset->extra); - - for (i = 0; i < bset->n_div; ++i) - constraint_drop_vars(bset->div[i]+1+1+bset->dim->nparam+first, n, - (bset->dim->n_out-first-n)+bset->extra); - - bset->dim = isl_space_drop_outputs(bset->dim, first, n); - if (!bset->dim) - goto error; - - ISL_F_CLR(bset, ISL_BASIC_SET_NORMALIZED); - bset = isl_basic_set_simplify(bset); - return isl_basic_set_finalize(bset); -error: - isl_basic_set_free(bset); - return NULL; -} - -struct isl_set *isl_set_drop_dims( - struct isl_set *set, unsigned first, unsigned n) -{ - int i; - - if (!set) - goto error; - - isl_assert(set->ctx, first + n <= set->dim->n_out, goto error); - - if (n == 0 && !isl_space_get_tuple_name(set->dim, isl_dim_set)) - return set; - set = isl_set_cow(set); - if (!set) - goto error; - set->dim = isl_space_drop_outputs(set->dim, first, n); - if (!set->dim) - goto error; - - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_drop_dims(set->p[i], first, n); - if (!set->p[i]) - goto error; - } - - ISL_F_CLR(set, ISL_SET_NORMALIZED); - return set; -error: - isl_set_free(set); - return NULL; -} - -/* Move "n" divs starting at "first" to the end of the list of divs. - */ -static struct isl_basic_map *move_divs_last(struct isl_basic_map *bmap, - unsigned first, unsigned n) -{ - isl_int **div; - int i; - - if (first + n == bmap->n_div) - return bmap; - - div = isl_alloc_array(bmap->ctx, isl_int *, n); - if (!div) - goto error; - for (i = 0; i < n; ++i) - div[i] = bmap->div[first + i]; - for (i = 0; i < bmap->n_div - first - n; ++i) - bmap->div[first + i] = bmap->div[first + n + i]; - for (i = 0; i < n; ++i) - bmap->div[bmap->n_div - n + i] = div[i]; - free(div); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Drop "n" dimensions of type "type" starting at "first". - * - * In principle, this frees up some extra variables as the number - * of columns remains constant, but we would have to extend - * the div array too as the number of rows in this array is assumed - * to be equal to extra. - */ -struct isl_basic_map *isl_basic_map_drop(struct isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - unsigned dim; - unsigned offset; - unsigned left; - - if (!bmap) - goto error; - - dim = isl_basic_map_dim(bmap, type); - isl_assert(bmap->ctx, first + n <= dim, goto error); - - if (n == 0 && !isl_space_is_named_or_nested(bmap->dim, type)) - return bmap; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - - offset = isl_basic_map_offset(bmap, type) + first; - left = isl_basic_map_total_dim(bmap) - (offset - 1) - n; - for (i = 0; i < bmap->n_eq; ++i) - constraint_drop_vars(bmap->eq[i]+offset, n, left); - - for (i = 0; i < bmap->n_ineq; ++i) - constraint_drop_vars(bmap->ineq[i]+offset, n, left); - - for (i = 0; i < bmap->n_div; ++i) - constraint_drop_vars(bmap->div[i]+1+offset, n, left); - - if (type == isl_dim_div) { - bmap = move_divs_last(bmap, first, n); - if (!bmap) - goto error; - isl_basic_map_free_div(bmap, n); - } else - bmap->dim = isl_space_drop_dims(bmap->dim, type, first, n); - if (!bmap->dim) - goto error; - - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - bmap = isl_basic_map_simplify(bmap); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_set *isl_basic_set_drop(__isl_take isl_basic_set *bset, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_basic_set *)isl_basic_map_drop((isl_basic_map *)bset, - type, first, n); -} - -struct isl_basic_map *isl_basic_map_drop_inputs( - struct isl_basic_map *bmap, unsigned first, unsigned n) -{ - return isl_basic_map_drop(bmap, isl_dim_in, first, n); -} - -struct isl_map *isl_map_drop(struct isl_map *map, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!map) - goto error; - - isl_assert(map->ctx, first + n <= isl_map_dim(map, type), goto error); - - if (n == 0 && !isl_space_get_tuple_name(map->dim, type)) - return map; - map = isl_map_cow(map); - if (!map) - goto error; - map->dim = isl_space_drop_dims(map->dim, type, first, n); - if (!map->dim) - goto error; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_drop(map->p[i], type, first, n); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - - return map; -error: - isl_map_free(map); - return NULL; -} - -struct isl_set *isl_set_drop(struct isl_set *set, - enum isl_dim_type type, unsigned first, unsigned n) -{ - return (isl_set *)isl_map_drop((isl_map *)set, type, first, n); -} - -struct isl_map *isl_map_drop_inputs( - struct isl_map *map, unsigned first, unsigned n) -{ - return isl_map_drop(map, isl_dim_in, first, n); -} - -/* - * We don't cow, as the div is assumed to be redundant. - */ -static struct isl_basic_map *isl_basic_map_drop_div( - struct isl_basic_map *bmap, unsigned div) -{ - int i; - unsigned pos; - - if (!bmap) - goto error; - - pos = 1 + isl_space_dim(bmap->dim, isl_dim_all) + div; - - isl_assert(bmap->ctx, div < bmap->n_div, goto error); - - for (i = 0; i < bmap->n_eq; ++i) - constraint_drop_vars(bmap->eq[i]+pos, 1, bmap->extra-div-1); - - for (i = 0; i < bmap->n_ineq; ++i) { - if (!isl_int_is_zero(bmap->ineq[i][pos])) { - isl_basic_map_drop_inequality(bmap, i); - --i; - continue; - } - constraint_drop_vars(bmap->ineq[i]+pos, 1, bmap->extra-div-1); - } - - for (i = 0; i < bmap->n_div; ++i) - constraint_drop_vars(bmap->div[i]+1+pos, 1, bmap->extra-div-1); - - if (div != bmap->n_div - 1) { - int j; - isl_int *t = bmap->div[div]; - - for (j = div; j < bmap->n_div - 1; ++j) - bmap->div[j] = bmap->div[j+1]; - - bmap->div[bmap->n_div - 1] = t; - } - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - isl_basic_map_free_div(bmap, 1); - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_map *isl_basic_map_normalize_constraints( - struct isl_basic_map *bmap) -{ - int i; - isl_int gcd; - unsigned total = isl_basic_map_total_dim(bmap); - - if (!bmap) - return NULL; - - isl_int_init(gcd); - for (i = bmap->n_eq - 1; i >= 0; --i) { - isl_seq_gcd(bmap->eq[i]+1, total, &gcd); - if (isl_int_is_zero(gcd)) { - if (!isl_int_is_zero(bmap->eq[i][0])) { - bmap = isl_basic_map_set_to_empty(bmap); - break; - } - isl_basic_map_drop_equality(bmap, i); - continue; - } - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL)) - isl_int_gcd(gcd, gcd, bmap->eq[i][0]); - if (isl_int_is_one(gcd)) - continue; - if (!isl_int_is_divisible_by(bmap->eq[i][0], gcd)) { - bmap = isl_basic_map_set_to_empty(bmap); - break; - } - isl_seq_scale_down(bmap->eq[i], bmap->eq[i], gcd, 1+total); - } - - for (i = bmap->n_ineq - 1; i >= 0; --i) { - isl_seq_gcd(bmap->ineq[i]+1, total, &gcd); - if (isl_int_is_zero(gcd)) { - if (isl_int_is_neg(bmap->ineq[i][0])) { - bmap = isl_basic_map_set_to_empty(bmap); - break; - } - isl_basic_map_drop_inequality(bmap, i); - continue; - } - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL)) - isl_int_gcd(gcd, gcd, bmap->ineq[i][0]); - if (isl_int_is_one(gcd)) - continue; - isl_int_fdiv_q(bmap->ineq[i][0], bmap->ineq[i][0], gcd); - isl_seq_scale_down(bmap->ineq[i]+1, bmap->ineq[i]+1, gcd, total); - } - isl_int_clear(gcd); - - return bmap; -} - -struct isl_basic_set *isl_basic_set_normalize_constraints( - struct isl_basic_set *bset) -{ - return (struct isl_basic_set *)isl_basic_map_normalize_constraints( - (struct isl_basic_map *)bset); -} - -/* Assumes divs have been ordered if keep_divs is set. - */ -static void eliminate_var_using_equality(struct isl_basic_map *bmap, - unsigned pos, isl_int *eq, int keep_divs, int *progress) -{ - unsigned total; - unsigned space_total; - int k; - int last_div; - - total = isl_basic_map_total_dim(bmap); - space_total = isl_space_dim(bmap->dim, isl_dim_all); - last_div = isl_seq_last_non_zero(eq + 1 + space_total, bmap->n_div); - for (k = 0; k < bmap->n_eq; ++k) { - if (bmap->eq[k] == eq) - continue; - if (isl_int_is_zero(bmap->eq[k][1+pos])) - continue; - if (progress) - *progress = 1; - isl_seq_elim(bmap->eq[k], eq, 1+pos, 1+total, NULL); - isl_seq_normalize(bmap->ctx, bmap->eq[k], 1 + total); - } - - for (k = 0; k < bmap->n_ineq; ++k) { - if (isl_int_is_zero(bmap->ineq[k][1+pos])) - continue; - if (progress) - *progress = 1; - isl_seq_elim(bmap->ineq[k], eq, 1+pos, 1+total, NULL); - isl_seq_normalize(bmap->ctx, bmap->ineq[k], 1 + total); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - } - - for (k = 0; k < bmap->n_div; ++k) { - if (isl_int_is_zero(bmap->div[k][0])) - continue; - if (isl_int_is_zero(bmap->div[k][1+1+pos])) - continue; - if (progress) - *progress = 1; - /* We need to be careful about circular definitions, - * so for now we just remove the definition of div k - * if the equality contains any divs. - * If keep_divs is set, then the divs have been ordered - * and we can keep the definition as long as the result - * is still ordered. - */ - if (last_div == -1 || (keep_divs && last_div < k)) - isl_seq_elim(bmap->div[k]+1, eq, - 1+pos, 1+total, &bmap->div[k][0]); - else - isl_seq_clr(bmap->div[k], 1 + total); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - } -} - -/* Assumes divs have been ordered if keep_divs is set. - */ -static void eliminate_div(struct isl_basic_map *bmap, isl_int *eq, - unsigned div, int keep_divs) -{ - unsigned pos = isl_space_dim(bmap->dim, isl_dim_all) + div; - - eliminate_var_using_equality(bmap, pos, eq, keep_divs, NULL); - - isl_basic_map_drop_div(bmap, div); -} - -/* Check if elimination of div "div" using equality "eq" would not - * result in a div depending on a later div. - */ -static int ok_to_eliminate_div(struct isl_basic_map *bmap, isl_int *eq, - unsigned div) -{ - int k; - int last_div; - unsigned space_total = isl_space_dim(bmap->dim, isl_dim_all); - unsigned pos = space_total + div; - - last_div = isl_seq_last_non_zero(eq + 1 + space_total, bmap->n_div); - if (last_div < 0 || last_div <= div) - return 1; - - for (k = 0; k <= last_div; ++k) { - if (isl_int_is_zero(bmap->div[k][0])) - return 1; - if (!isl_int_is_zero(bmap->div[k][1 + 1 + pos])) - return 0; - } - - return 1; -} - -/* Elimininate divs based on equalities - */ -static struct isl_basic_map *eliminate_divs_eq( - struct isl_basic_map *bmap, int *progress) -{ - int d; - int i; - int modified = 0; - unsigned off; - - bmap = isl_basic_map_order_divs(bmap); - - if (!bmap) - return NULL; - - off = 1 + isl_space_dim(bmap->dim, isl_dim_all); - - for (d = bmap->n_div - 1; d >= 0 ; --d) { - for (i = 0; i < bmap->n_eq; ++i) { - if (!isl_int_is_one(bmap->eq[i][off + d]) && - !isl_int_is_negone(bmap->eq[i][off + d])) - continue; - if (!ok_to_eliminate_div(bmap, bmap->eq[i], d)) - continue; - modified = 1; - *progress = 1; - eliminate_div(bmap, bmap->eq[i], d, 1); - isl_basic_map_drop_equality(bmap, i); - break; - } - } - if (modified) - return eliminate_divs_eq(bmap, progress); - return bmap; -} - -/* Elimininate divs based on inequalities - */ -static struct isl_basic_map *eliminate_divs_ineq( - struct isl_basic_map *bmap, int *progress) -{ - int d; - int i; - unsigned off; - struct isl_ctx *ctx; - - if (!bmap) - return NULL; - - ctx = bmap->ctx; - off = 1 + isl_space_dim(bmap->dim, isl_dim_all); - - for (d = bmap->n_div - 1; d >= 0 ; --d) { - for (i = 0; i < bmap->n_eq; ++i) - if (!isl_int_is_zero(bmap->eq[i][off + d])) - break; - if (i < bmap->n_eq) - continue; - for (i = 0; i < bmap->n_ineq; ++i) - if (isl_int_abs_gt(bmap->ineq[i][off + d], ctx->one)) - break; - if (i < bmap->n_ineq) - continue; - *progress = 1; - bmap = isl_basic_map_eliminate_vars(bmap, (off-1)+d, 1); - if (!bmap || ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) - break; - bmap = isl_basic_map_drop_div(bmap, d); - if (!bmap) - break; - } - return bmap; -} - -struct isl_basic_map *isl_basic_map_gauss( - struct isl_basic_map *bmap, int *progress) -{ - int k; - int done; - int last_var; - unsigned total_var; - unsigned total; - - bmap = isl_basic_map_order_divs(bmap); - - if (!bmap) - return NULL; - - total = isl_basic_map_total_dim(bmap); - total_var = total - bmap->n_div; - - last_var = total - 1; - for (done = 0; done < bmap->n_eq; ++done) { - for (; last_var >= 0; --last_var) { - for (k = done; k < bmap->n_eq; ++k) - if (!isl_int_is_zero(bmap->eq[k][1+last_var])) - break; - if (k < bmap->n_eq) - break; - } - if (last_var < 0) - break; - if (k != done) - swap_equality(bmap, k, done); - if (isl_int_is_neg(bmap->eq[done][1+last_var])) - isl_seq_neg(bmap->eq[done], bmap->eq[done], 1+total); - - eliminate_var_using_equality(bmap, last_var, bmap->eq[done], 1, - progress); - - if (last_var >= total_var && - isl_int_is_zero(bmap->div[last_var - total_var][0])) { - unsigned div = last_var - total_var; - isl_seq_neg(bmap->div[div]+1, bmap->eq[done], 1+total); - isl_int_set_si(bmap->div[div][1+1+last_var], 0); - isl_int_set(bmap->div[div][0], - bmap->eq[done][1+last_var]); - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - } - } - if (done == bmap->n_eq) - return bmap; - for (k = done; k < bmap->n_eq; ++k) { - if (isl_int_is_zero(bmap->eq[k][0])) - continue; - return isl_basic_map_set_to_empty(bmap); - } - isl_basic_map_free_equality(bmap, bmap->n_eq-done); - return bmap; -} - -struct isl_basic_set *isl_basic_set_gauss( - struct isl_basic_set *bset, int *progress) -{ - return (struct isl_basic_set*)isl_basic_map_gauss( - (struct isl_basic_map *)bset, progress); -} - - -static unsigned int round_up(unsigned int v) -{ - int old_v = v; - - while (v) { - old_v = v; - v ^= v & -v; - } - return old_v << 1; -} - -static int hash_index(isl_int ***index, unsigned int size, int bits, - struct isl_basic_map *bmap, int k) -{ - int h; - unsigned total = isl_basic_map_total_dim(bmap); - uint32_t hash = isl_seq_get_hash_bits(bmap->ineq[k]+1, total, bits); - for (h = hash; index[h]; h = (h+1) % size) - if (&bmap->ineq[k] != index[h] && - isl_seq_eq(bmap->ineq[k]+1, index[h][0]+1, total)) - break; - return h; -} - -static int set_hash_index(isl_int ***index, unsigned int size, int bits, - struct isl_basic_set *bset, int k) -{ - return hash_index(index, size, bits, (struct isl_basic_map *)bset, k); -} - -/* If we can eliminate more than one div, then we need to make - * sure we do it from last div to first div, in order not to - * change the position of the other divs that still need to - * be removed. - */ -static struct isl_basic_map *remove_duplicate_divs( - struct isl_basic_map *bmap, int *progress) -{ - unsigned int size; - int *index; - int *elim_for; - int k, l, h; - int bits; - struct isl_blk eq; - unsigned total_var; - unsigned total; - struct isl_ctx *ctx; - - if (!bmap || bmap->n_div <= 1) - return bmap; - - total_var = isl_space_dim(bmap->dim, isl_dim_all); - total = total_var + bmap->n_div; - - ctx = bmap->ctx; - for (k = bmap->n_div - 1; k >= 0; --k) - if (!isl_int_is_zero(bmap->div[k][0])) - break; - if (k <= 0) - return bmap; - - elim_for = isl_calloc_array(ctx, int, bmap->n_div); - size = round_up(4 * bmap->n_div / 3 - 1); - bits = ffs(size) - 1; - index = isl_calloc_array(ctx, int, size); - if (!index) - return bmap; - eq = isl_blk_alloc(ctx, 1+total); - if (isl_blk_is_error(eq)) - goto out; - - isl_seq_clr(eq.data, 1+total); - index[isl_seq_get_hash_bits(bmap->div[k], 2+total, bits)] = k + 1; - for (--k; k >= 0; --k) { - uint32_t hash; - - if (isl_int_is_zero(bmap->div[k][0])) - continue; - - hash = isl_seq_get_hash_bits(bmap->div[k], 2+total, bits); - for (h = hash; index[h]; h = (h+1) % size) - if (isl_seq_eq(bmap->div[k], - bmap->div[index[h]-1], 2+total)) - break; - if (index[h]) { - *progress = 1; - l = index[h] - 1; - elim_for[l] = k + 1; - } - index[h] = k+1; - } - for (l = bmap->n_div - 1; l >= 0; --l) { - if (!elim_for[l]) - continue; - k = elim_for[l] - 1; - isl_int_set_si(eq.data[1+total_var+k], -1); - isl_int_set_si(eq.data[1+total_var+l], 1); - eliminate_div(bmap, eq.data, l, 0); - isl_int_set_si(eq.data[1+total_var+k], 0); - isl_int_set_si(eq.data[1+total_var+l], 0); - } - - isl_blk_free(ctx, eq); -out: - free(index); - free(elim_for); - return bmap; -} - -static int n_pure_div_eq(struct isl_basic_map *bmap) -{ - int i, j; - unsigned total; - - total = isl_space_dim(bmap->dim, isl_dim_all); - for (i = 0, j = bmap->n_div-1; i < bmap->n_eq; ++i) { - while (j >= 0 && isl_int_is_zero(bmap->eq[i][1 + total + j])) - --j; - if (j < 0) - break; - if (isl_seq_first_non_zero(bmap->eq[i] + 1 + total, j) != -1) - return 0; - } - return i; -} - -/* Normalize divs that appear in equalities. - * - * In particular, we assume that bmap contains some equalities - * of the form - * - * a x = m * e_i - * - * and we want to replace the set of e_i by a minimal set and - * such that the new e_i have a canonical representation in terms - * of the vector x. - * If any of the equalities involves more than one divs, then - * we currently simply bail out. - * - * Let us first additionally assume that all equalities involve - * a div. The equalities then express modulo constraints on the - * remaining variables and we can use "parameter compression" - * to find a minimal set of constraints. The result is a transformation - * - * x = T(x') = x_0 + G x' - * - * with G a lower-triangular matrix with all elements below the diagonal - * non-negative and smaller than the diagonal element on the same row. - * We first normalize x_0 by making the same property hold in the affine - * T matrix. - * The rows i of G with a 1 on the diagonal do not impose any modulo - * constraint and simply express x_i = x'_i. - * For each of the remaining rows i, we introduce a div and a corresponding - * equality. In particular - * - * g_ii e_j = x_i - g_i(x') - * - * where each x'_k is replaced either by x_k (if g_kk = 1) or the - * corresponding div (if g_kk != 1). - * - * If there are any equalities not involving any div, then we - * first apply a variable compression on the variables x: - * - * x = C x'' x'' = C_2 x - * - * and perform the above parameter compression on A C instead of on A. - * The resulting compression is then of the form - * - * x'' = T(x') = x_0 + G x' - * - * and in constructing the new divs and the corresponding equalities, - * we have to replace each x'', i.e., the x'_k with (g_kk = 1), - * by the corresponding row from C_2. - */ -static struct isl_basic_map *normalize_divs( - struct isl_basic_map *bmap, int *progress) -{ - int i, j, k; - int total; - int div_eq; - struct isl_mat *B; - struct isl_vec *d; - struct isl_mat *T = NULL; - struct isl_mat *C = NULL; - struct isl_mat *C2 = NULL; - isl_int v; - int *pos; - int dropped, needed; - - if (!bmap) - return NULL; - - if (bmap->n_div == 0) - return bmap; - - if (bmap->n_eq == 0) - return bmap; - - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_NORMALIZED_DIVS)) - return bmap; - - total = isl_space_dim(bmap->dim, isl_dim_all); - div_eq = n_pure_div_eq(bmap); - if (div_eq == 0) - return bmap; - - if (div_eq < bmap->n_eq) { - B = isl_mat_sub_alloc6(bmap->ctx, bmap->eq, div_eq, - bmap->n_eq - div_eq, 0, 1 + total); - C = isl_mat_variable_compression(B, &C2); - if (!C || !C2) - goto error; - if (C->n_col == 0) { - bmap = isl_basic_map_set_to_empty(bmap); - isl_mat_free(C); - isl_mat_free(C2); - goto done; - } - } - - d = isl_vec_alloc(bmap->ctx, div_eq); - if (!d) - goto error; - for (i = 0, j = bmap->n_div-1; i < div_eq; ++i) { - while (j >= 0 && isl_int_is_zero(bmap->eq[i][1 + total + j])) - --j; - isl_int_set(d->block.data[i], bmap->eq[i][1 + total + j]); - } - B = isl_mat_sub_alloc6(bmap->ctx, bmap->eq, 0, div_eq, 0, 1 + total); - - if (C) { - B = isl_mat_product(B, C); - C = NULL; - } - - T = isl_mat_parameter_compression(B, d); - if (!T) - goto error; - if (T->n_col == 0) { - bmap = isl_basic_map_set_to_empty(bmap); - isl_mat_free(C2); - isl_mat_free(T); - goto done; - } - isl_int_init(v); - for (i = 0; i < T->n_row - 1; ++i) { - isl_int_fdiv_q(v, T->row[1 + i][0], T->row[1 + i][1 + i]); - if (isl_int_is_zero(v)) - continue; - isl_mat_col_submul(T, 0, v, 1 + i); - } - isl_int_clear(v); - pos = isl_alloc_array(bmap->ctx, int, T->n_row); - if (!pos) - goto error; - /* We have to be careful because dropping equalities may reorder them */ - dropped = 0; - for (j = bmap->n_div - 1; j >= 0; --j) { - for (i = 0; i < bmap->n_eq; ++i) - if (!isl_int_is_zero(bmap->eq[i][1 + total + j])) - break; - if (i < bmap->n_eq) { - bmap = isl_basic_map_drop_div(bmap, j); - isl_basic_map_drop_equality(bmap, i); - ++dropped; - } - } - pos[0] = 0; - needed = 0; - for (i = 1; i < T->n_row; ++i) { - if (isl_int_is_one(T->row[i][i])) - pos[i] = i; - else - needed++; - } - if (needed > dropped) { - bmap = isl_basic_map_extend_space(bmap, isl_space_copy(bmap->dim), - needed, needed, 0); - if (!bmap) - goto error; - } - for (i = 1; i < T->n_row; ++i) { - if (isl_int_is_one(T->row[i][i])) - continue; - k = isl_basic_map_alloc_div(bmap); - pos[i] = 1 + total + k; - isl_seq_clr(bmap->div[k] + 1, 1 + total + bmap->n_div); - isl_int_set(bmap->div[k][0], T->row[i][i]); - if (C2) - isl_seq_cpy(bmap->div[k] + 1, C2->row[i], 1 + total); - else - isl_int_set_si(bmap->div[k][1 + i], 1); - for (j = 0; j < i; ++j) { - if (isl_int_is_zero(T->row[i][j])) - continue; - if (pos[j] < T->n_row && C2) - isl_seq_submul(bmap->div[k] + 1, T->row[i][j], - C2->row[pos[j]], 1 + total); - else - isl_int_neg(bmap->div[k][1 + pos[j]], - T->row[i][j]); - } - j = isl_basic_map_alloc_equality(bmap); - isl_seq_neg(bmap->eq[j], bmap->div[k]+1, 1+total+bmap->n_div); - isl_int_set(bmap->eq[j][pos[i]], bmap->div[k][0]); - } - free(pos); - isl_mat_free(C2); - isl_mat_free(T); - - if (progress) - *progress = 1; -done: - ISL_F_SET(bmap, ISL_BASIC_MAP_NORMALIZED_DIVS); - - return bmap; -error: - isl_mat_free(C); - isl_mat_free(C2); - isl_mat_free(T); - return bmap; -} - -static struct isl_basic_map *set_div_from_lower_bound( - struct isl_basic_map *bmap, int div, int ineq) -{ - unsigned total = 1 + isl_space_dim(bmap->dim, isl_dim_all); - - isl_seq_neg(bmap->div[div] + 1, bmap->ineq[ineq], total + bmap->n_div); - isl_int_set(bmap->div[div][0], bmap->ineq[ineq][total + div]); - isl_int_add(bmap->div[div][1], bmap->div[div][1], bmap->div[div][0]); - isl_int_sub_ui(bmap->div[div][1], bmap->div[div][1], 1); - isl_int_set_si(bmap->div[div][1 + total + div], 0); - - return bmap; -} - -/* Check whether it is ok to define a div based on an inequality. - * To avoid the introduction of circular definitions of divs, we - * do not allow such a definition if the resulting expression would refer to - * any other undefined divs or if any known div is defined in - * terms of the unknown div. - */ -static int ok_to_set_div_from_bound(struct isl_basic_map *bmap, - int div, int ineq) -{ - int j; - unsigned total = 1 + isl_space_dim(bmap->dim, isl_dim_all); - - /* Not defined in terms of unknown divs */ - for (j = 0; j < bmap->n_div; ++j) { - if (div == j) - continue; - if (isl_int_is_zero(bmap->ineq[ineq][total + j])) - continue; - if (isl_int_is_zero(bmap->div[j][0])) - return 0; - } - - /* No other div defined in terms of this one => avoid loops */ - for (j = 0; j < bmap->n_div; ++j) { - if (div == j) - continue; - if (isl_int_is_zero(bmap->div[j][0])) - continue; - if (!isl_int_is_zero(bmap->div[j][1 + total + div])) - return 0; - } - - return 1; -} - -/* Given two constraints "k" and "l" that are opposite to each other, - * except for the constant term, check if we can use them - * to obtain an expression for one of the hitherto unknown divs. - * "sum" is the sum of the constant terms of the constraints. - * If this sum is strictly smaller than the coefficient of one - * of the divs, then this pair can be used define the div. - * To avoid the introduction of circular definitions of divs, we - * do not use the pair if the resulting expression would refer to - * any other undefined divs or if any known div is defined in - * terms of the unknown div. - */ -static struct isl_basic_map *check_for_div_constraints( - struct isl_basic_map *bmap, int k, int l, isl_int sum, int *progress) -{ - int i; - unsigned total = 1 + isl_space_dim(bmap->dim, isl_dim_all); - - for (i = 0; i < bmap->n_div; ++i) { - if (!isl_int_is_zero(bmap->div[i][0])) - continue; - if (isl_int_is_zero(bmap->ineq[k][total + i])) - continue; - if (isl_int_abs_ge(sum, bmap->ineq[k][total + i])) - continue; - if (!ok_to_set_div_from_bound(bmap, i, k)) - break; - if (isl_int_is_pos(bmap->ineq[k][total + i])) - bmap = set_div_from_lower_bound(bmap, i, k); - else - bmap = set_div_from_lower_bound(bmap, i, l); - if (progress) - *progress = 1; - break; - } - return bmap; -} - -static struct isl_basic_map *remove_duplicate_constraints( - struct isl_basic_map *bmap, int *progress, int detect_divs) -{ - unsigned int size; - isl_int ***index; - int k, l, h; - int bits; - unsigned total = isl_basic_map_total_dim(bmap); - isl_int sum; - isl_ctx *ctx; - - if (!bmap || bmap->n_ineq <= 1) - return bmap; - - size = round_up(4 * (bmap->n_ineq+1) / 3 - 1); - bits = ffs(size) - 1; - ctx = isl_basic_map_get_ctx(bmap); - index = isl_calloc_array(ctx, isl_int **, size); - if (!index) - return bmap; - - index[isl_seq_get_hash_bits(bmap->ineq[0]+1, total, bits)] = &bmap->ineq[0]; - for (k = 1; k < bmap->n_ineq; ++k) { - h = hash_index(index, size, bits, bmap, k); - if (!index[h]) { - index[h] = &bmap->ineq[k]; - continue; - } - if (progress) - *progress = 1; - l = index[h] - &bmap->ineq[0]; - if (isl_int_lt(bmap->ineq[k][0], bmap->ineq[l][0])) - swap_inequality(bmap, k, l); - isl_basic_map_drop_inequality(bmap, k); - --k; - } - isl_int_init(sum); - for (k = 0; k < bmap->n_ineq-1; ++k) { - isl_seq_neg(bmap->ineq[k]+1, bmap->ineq[k]+1, total); - h = hash_index(index, size, bits, bmap, k); - isl_seq_neg(bmap->ineq[k]+1, bmap->ineq[k]+1, total); - if (!index[h]) - continue; - l = index[h] - &bmap->ineq[0]; - isl_int_add(sum, bmap->ineq[k][0], bmap->ineq[l][0]); - if (isl_int_is_pos(sum)) { - if (detect_divs) - bmap = check_for_div_constraints(bmap, k, l, - sum, progress); - continue; - } - if (isl_int_is_zero(sum)) { - /* We need to break out of the loop after these - * changes since the contents of the hash - * will no longer be valid. - * Plus, we probably we want to regauss first. - */ - if (progress) - *progress = 1; - isl_basic_map_drop_inequality(bmap, l); - isl_basic_map_inequality_to_equality(bmap, k); - } else - bmap = isl_basic_map_set_to_empty(bmap); - break; - } - isl_int_clear(sum); - - free(index); - return bmap; -} - - -struct isl_basic_map *isl_basic_map_simplify(struct isl_basic_map *bmap) -{ - int progress = 1; - if (!bmap) - return NULL; - while (progress) { - progress = 0; - bmap = isl_basic_map_normalize_constraints(bmap); - bmap = remove_duplicate_divs(bmap, &progress); - bmap = eliminate_divs_eq(bmap, &progress); - bmap = eliminate_divs_ineq(bmap, &progress); - bmap = isl_basic_map_gauss(bmap, &progress); - /* requires equalities in normal form */ - bmap = normalize_divs(bmap, &progress); - bmap = remove_duplicate_constraints(bmap, &progress, 1); - } - return bmap; -} - -struct isl_basic_set *isl_basic_set_simplify(struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_simplify((struct isl_basic_map *)bset); -} - - -int isl_basic_map_is_div_constraint(__isl_keep isl_basic_map *bmap, - isl_int *constraint, unsigned div) -{ - unsigned pos; - - if (!bmap) - return -1; - - pos = 1 + isl_space_dim(bmap->dim, isl_dim_all) + div; - - if (isl_int_eq(constraint[pos], bmap->div[div][0])) { - int neg; - isl_int_sub(bmap->div[div][1], - bmap->div[div][1], bmap->div[div][0]); - isl_int_add_ui(bmap->div[div][1], bmap->div[div][1], 1); - neg = isl_seq_is_neg(constraint, bmap->div[div]+1, pos); - isl_int_sub_ui(bmap->div[div][1], bmap->div[div][1], 1); - isl_int_add(bmap->div[div][1], - bmap->div[div][1], bmap->div[div][0]); - if (!neg) - return 0; - if (isl_seq_first_non_zero(constraint+pos+1, - bmap->n_div-div-1) != -1) - return 0; - } else if (isl_int_abs_eq(constraint[pos], bmap->div[div][0])) { - if (!isl_seq_eq(constraint, bmap->div[div]+1, pos)) - return 0; - if (isl_seq_first_non_zero(constraint+pos+1, - bmap->n_div-div-1) != -1) - return 0; - } else - return 0; - - return 1; -} - - -/* If the only constraints a div d=floor(f/m) - * appears in are its two defining constraints - * - * f - m d >=0 - * -(f - (m - 1)) + m d >= 0 - * - * then it can safely be removed. - */ -static int div_is_redundant(struct isl_basic_map *bmap, int div) -{ - int i; - unsigned pos = 1 + isl_space_dim(bmap->dim, isl_dim_all) + div; - - for (i = 0; i < bmap->n_eq; ++i) - if (!isl_int_is_zero(bmap->eq[i][pos])) - return 0; - - for (i = 0; i < bmap->n_ineq; ++i) { - if (isl_int_is_zero(bmap->ineq[i][pos])) - continue; - if (!isl_basic_map_is_div_constraint(bmap, bmap->ineq[i], div)) - return 0; - } - - for (i = 0; i < bmap->n_div; ++i) - if (!isl_int_is_zero(bmap->div[i][1+pos])) - return 0; - - return 1; -} - -/* - * Remove divs that don't occur in any of the constraints or other divs. - * These can arise when dropping some of the variables in a quast - * returned by piplib. - */ -static struct isl_basic_map *remove_redundant_divs(struct isl_basic_map *bmap) -{ - int i; - - if (!bmap) - return NULL; - - for (i = bmap->n_div-1; i >= 0; --i) { - if (!div_is_redundant(bmap, i)) - continue; - bmap = isl_basic_map_drop_div(bmap, i); - } - return bmap; -} - -struct isl_basic_map *isl_basic_map_finalize(struct isl_basic_map *bmap) -{ - bmap = remove_redundant_divs(bmap); - if (!bmap) - return NULL; - ISL_F_SET(bmap, ISL_BASIC_SET_FINAL); - return bmap; -} - -struct isl_basic_set *isl_basic_set_finalize(struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_finalize((struct isl_basic_map *)bset); -} - -struct isl_set *isl_set_finalize(struct isl_set *set) -{ - int i; - - if (!set) - return NULL; - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_finalize(set->p[i]); - if (!set->p[i]) - goto error; - } - return set; -error: - isl_set_free(set); - return NULL; -} - -struct isl_map *isl_map_finalize(struct isl_map *map) -{ - int i; - - if (!map) - return NULL; - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_finalize(map->p[i]); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - - -/* Remove definition of any div that is defined in terms of the given variable. - * The div itself is not removed. Functions such as - * eliminate_divs_ineq depend on the other divs remaining in place. - */ -static struct isl_basic_map *remove_dependent_vars(struct isl_basic_map *bmap, - int pos) -{ - int i; - - for (i = 0; i < bmap->n_div; ++i) { - if (isl_int_is_zero(bmap->div[i][0])) - continue; - if (isl_int_is_zero(bmap->div[i][1+1+pos])) - continue; - isl_int_set_si(bmap->div[i][0], 0); - } - return bmap; -} - -/* Eliminate the specified variables from the constraints using - * Fourier-Motzkin. The variables themselves are not removed. - */ -struct isl_basic_map *isl_basic_map_eliminate_vars( - struct isl_basic_map *bmap, unsigned pos, unsigned n) -{ - int d; - int i, j, k; - unsigned total; - int need_gauss = 0; - - if (n == 0) - return bmap; - if (!bmap) - return NULL; - total = isl_basic_map_total_dim(bmap); - - bmap = isl_basic_map_cow(bmap); - for (d = pos + n - 1; d >= 0 && d >= pos; --d) - bmap = remove_dependent_vars(bmap, d); - - for (d = pos + n - 1; - d >= 0 && d >= total - bmap->n_div && d >= pos; --d) - isl_seq_clr(bmap->div[d-(total-bmap->n_div)], 2+total); - for (d = pos + n - 1; d >= 0 && d >= pos; --d) { - int n_lower, n_upper; - if (!bmap) - return NULL; - for (i = 0; i < bmap->n_eq; ++i) { - if (isl_int_is_zero(bmap->eq[i][1+d])) - continue; - eliminate_var_using_equality(bmap, d, bmap->eq[i], 0, NULL); - isl_basic_map_drop_equality(bmap, i); - need_gauss = 1; - break; - } - if (i < bmap->n_eq) - continue; - n_lower = 0; - n_upper = 0; - for (i = 0; i < bmap->n_ineq; ++i) { - if (isl_int_is_pos(bmap->ineq[i][1+d])) - n_lower++; - else if (isl_int_is_neg(bmap->ineq[i][1+d])) - n_upper++; - } - bmap = isl_basic_map_extend_constraints(bmap, - 0, n_lower * n_upper); - if (!bmap) - goto error; - for (i = bmap->n_ineq - 1; i >= 0; --i) { - int last; - if (isl_int_is_zero(bmap->ineq[i][1+d])) - continue; - last = -1; - for (j = 0; j < i; ++j) { - if (isl_int_is_zero(bmap->ineq[j][1+d])) - continue; - last = j; - if (isl_int_sgn(bmap->ineq[i][1+d]) == - isl_int_sgn(bmap->ineq[j][1+d])) - continue; - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->ineq[k], bmap->ineq[i], - 1+total); - isl_seq_elim(bmap->ineq[k], bmap->ineq[j], - 1+d, 1+total, NULL); - } - isl_basic_map_drop_inequality(bmap, i); - i = last + 1; - } - if (n_lower > 0 && n_upper > 0) { - bmap = isl_basic_map_normalize_constraints(bmap); - bmap = remove_duplicate_constraints(bmap, NULL, 0); - bmap = isl_basic_map_gauss(bmap, NULL); - bmap = isl_basic_map_remove_redundancies(bmap); - need_gauss = 0; - if (!bmap) - goto error; - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) - break; - } - } - ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED); - if (need_gauss) - bmap = isl_basic_map_gauss(bmap, NULL); - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_eliminate_vars( - struct isl_basic_set *bset, unsigned pos, unsigned n) -{ - return (struct isl_basic_set *)isl_basic_map_eliminate_vars( - (struct isl_basic_map *)bset, pos, n); -} - -/* Eliminate the specified n dimensions starting at first from the - * constraints using Fourier-Motzkin. The dimensions themselves - * are not removed. - */ -__isl_give isl_basic_map *isl_basic_map_eliminate( - __isl_take isl_basic_map *bmap, - enum isl_dim_type type, unsigned first, unsigned n) -{ - if (!bmap) - return NULL; - if (n == 0) - return bmap; - - if (first + n > isl_basic_map_dim(bmap, type)) - isl_die(bmap->ctx, isl_error_invalid, - "index out of bounds", goto error); - - first += isl_basic_map_offset(bmap, type) - 1; - bmap = isl_basic_map_eliminate_vars(bmap, first, n); - return isl_basic_map_finalize(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Don't assume equalities are in order, because align_divs - * may have changed the order of the divs. - */ -static void compute_elimination_index(struct isl_basic_map *bmap, int *elim) -{ - int d, i; - unsigned total; - - total = isl_space_dim(bmap->dim, isl_dim_all); - for (d = 0; d < total; ++d) - elim[d] = -1; - for (i = 0; i < bmap->n_eq; ++i) { - for (d = total - 1; d >= 0; --d) { - if (isl_int_is_zero(bmap->eq[i][1+d])) - continue; - elim[d] = i; - break; - } - } -} - -static void set_compute_elimination_index(struct isl_basic_set *bset, int *elim) -{ - compute_elimination_index((struct isl_basic_map *)bset, elim); -} - -static int reduced_using_equalities(isl_int *dst, isl_int *src, - struct isl_basic_map *bmap, int *elim) -{ - int d; - int copied = 0; - unsigned total; - - total = isl_space_dim(bmap->dim, isl_dim_all); - for (d = total - 1; d >= 0; --d) { - if (isl_int_is_zero(src[1+d])) - continue; - if (elim[d] == -1) - continue; - if (!copied) { - isl_seq_cpy(dst, src, 1 + total); - copied = 1; - } - isl_seq_elim(dst, bmap->eq[elim[d]], 1 + d, 1 + total, NULL); - } - return copied; -} - -static int set_reduced_using_equalities(isl_int *dst, isl_int *src, - struct isl_basic_set *bset, int *elim) -{ - return reduced_using_equalities(dst, src, - (struct isl_basic_map *)bset, elim); -} - -static struct isl_basic_set *isl_basic_set_reduce_using_equalities( - struct isl_basic_set *bset, struct isl_basic_set *context) -{ - int i; - int *elim; - - if (!bset || !context) - goto error; - - if (context->n_eq == 0) { - isl_basic_set_free(context); - return bset; - } - - bset = isl_basic_set_cow(bset); - if (!bset) - goto error; - - elim = isl_alloc_array(bset->ctx, int, isl_basic_set_n_dim(bset)); - if (!elim) - goto error; - set_compute_elimination_index(context, elim); - for (i = 0; i < bset->n_eq; ++i) - set_reduced_using_equalities(bset->eq[i], bset->eq[i], - context, elim); - for (i = 0; i < bset->n_ineq; ++i) - set_reduced_using_equalities(bset->ineq[i], bset->ineq[i], - context, elim); - isl_basic_set_free(context); - free(elim); - bset = isl_basic_set_simplify(bset); - bset = isl_basic_set_finalize(bset); - return bset; -error: - isl_basic_set_free(bset); - isl_basic_set_free(context); - return NULL; -} - -static struct isl_basic_set *remove_shifted_constraints( - struct isl_basic_set *bset, struct isl_basic_set *context) -{ - unsigned int size; - isl_int ***index; - int bits; - int k, h, l; - isl_ctx *ctx; - - if (!bset) - return NULL; - - size = round_up(4 * (context->n_ineq+1) / 3 - 1); - bits = ffs(size) - 1; - ctx = isl_basic_set_get_ctx(bset); - index = isl_calloc_array(ctx, isl_int **, size); - if (!index) - return bset; - - for (k = 0; k < context->n_ineq; ++k) { - h = set_hash_index(index, size, bits, context, k); - index[h] = &context->ineq[k]; - } - for (k = 0; k < bset->n_ineq; ++k) { - h = set_hash_index(index, size, bits, bset, k); - if (!index[h]) - continue; - l = index[h] - &context->ineq[0]; - if (isl_int_lt(bset->ineq[k][0], context->ineq[l][0])) - continue; - bset = isl_basic_set_cow(bset); - if (!bset) - goto error; - isl_basic_set_drop_inequality(bset, k); - --k; - } - free(index); - return bset; -error: - free(index); - return bset; -} - -/* Remove all information from bset that is redundant in the context - * of context. Both bset and context are assumed to be full-dimensional. - * - * We first * remove the inequalities from "bset" - * that are obviously redundant with respect to some inequality in "context". - * - * If there are any inequalities left, we construct a tableau for - * the context and then add the inequalities of "bset". - * Before adding these inequalities, we freeze all constraints such that - * they won't be considered redundant in terms of the constraints of "bset". - * Then we detect all redundant constraints (among the - * constraints that weren't frozen), first by checking for redundancy in the - * the tableau and then by checking if replacing a constraint by its negation - * would lead to an empty set. This last step is fairly expensive - * and could be optimized by more reuse of the tableau. - * Finally, we update bset according to the results. - */ -static __isl_give isl_basic_set *uset_gist_full(__isl_take isl_basic_set *bset, - __isl_take isl_basic_set *context) -{ - int i, k; - isl_basic_set *combined = NULL; - struct isl_tab *tab = NULL; - unsigned context_ineq; - unsigned total; - - if (!bset || !context) - goto error; - - if (isl_basic_set_is_universe(bset)) { - isl_basic_set_free(context); - return bset; - } - - if (isl_basic_set_is_universe(context)) { - isl_basic_set_free(context); - return bset; - } - - bset = remove_shifted_constraints(bset, context); - if (!bset) - goto error; - if (bset->n_ineq == 0) - goto done; - - context_ineq = context->n_ineq; - combined = isl_basic_set_cow(isl_basic_set_copy(context)); - combined = isl_basic_set_extend_constraints(combined, 0, bset->n_ineq); - tab = isl_tab_from_basic_set(combined); - for (i = 0; i < context_ineq; ++i) - if (isl_tab_freeze_constraint(tab, i) < 0) - goto error; - tab = isl_tab_extend(tab, bset->n_ineq); - for (i = 0; i < bset->n_ineq; ++i) - if (isl_tab_add_ineq(tab, bset->ineq[i]) < 0) - goto error; - bset = isl_basic_set_add_constraints(combined, bset, 0); - combined = NULL; - if (!bset) - goto error; - if (isl_tab_detect_redundant(tab) < 0) - goto error; - total = isl_basic_set_total_dim(bset); - for (i = context_ineq; i < bset->n_ineq; ++i) { - int is_empty; - if (tab->con[i].is_redundant) - continue; - tab->con[i].is_redundant = 1; - combined = isl_basic_set_dup(bset); - combined = isl_basic_set_update_from_tab(combined, tab); - combined = isl_basic_set_extend_constraints(combined, 0, 1); - k = isl_basic_set_alloc_inequality(combined); - if (k < 0) - goto error; - isl_seq_neg(combined->ineq[k], bset->ineq[i], 1 + total); - isl_int_sub_ui(combined->ineq[k][0], combined->ineq[k][0], 1); - is_empty = isl_basic_set_is_empty(combined); - if (is_empty < 0) - goto error; - isl_basic_set_free(combined); - combined = NULL; - if (!is_empty) - tab->con[i].is_redundant = 0; - } - for (i = 0; i < context_ineq; ++i) - tab->con[i].is_redundant = 1; - bset = isl_basic_set_update_from_tab(bset, tab); - if (bset) { - ISL_F_SET(bset, ISL_BASIC_SET_NO_IMPLICIT); - ISL_F_SET(bset, ISL_BASIC_SET_NO_REDUNDANT); - } - - isl_tab_free(tab); -done: - bset = isl_basic_set_simplify(bset); - bset = isl_basic_set_finalize(bset); - isl_basic_set_free(context); - return bset; -error: - isl_tab_free(tab); - isl_basic_set_free(combined); - isl_basic_set_free(context); - isl_basic_set_free(bset); - return NULL; -} - -/* Remove all information from bset that is redundant in the context - * of context. In particular, equalities that are linear combinations - * of those in context are removed. Then the inequalities that are - * redundant in the context of the equalities and inequalities of - * context are removed. - * - * We first compute the integer affine hull of the intersection, - * compute the gist inside this affine hull and then add back - * those equalities that are not implied by the context. - * - * If two constraints are mutually redundant, then uset_gist_full - * will remove the second of those constraints. We therefore first - * sort the constraints so that constraints not involving existentially - * quantified variables are given precedence over those that do. - * We have to perform this sorting before the variable compression, - * because that may effect the order of the variables. - */ -static __isl_give isl_basic_set *uset_gist(__isl_take isl_basic_set *bset, - __isl_take isl_basic_set *context) -{ - isl_mat *eq; - isl_mat *T, *T2; - isl_basic_set *aff; - isl_basic_set *aff_context; - unsigned total; - - if (!bset || !context) - goto error; - - bset = isl_basic_set_intersect(bset, isl_basic_set_copy(context)); - if (isl_basic_set_plain_is_empty(bset)) { - isl_basic_set_free(context); - return bset; - } - bset = isl_basic_set_sort_constraints(bset); - aff = isl_basic_set_affine_hull(isl_basic_set_copy(bset)); - if (!aff) - goto error; - if (isl_basic_set_plain_is_empty(aff)) { - isl_basic_set_free(aff); - isl_basic_set_free(context); - return bset; - } - if (aff->n_eq == 0) { - isl_basic_set_free(aff); - return uset_gist_full(bset, context); - } - total = isl_basic_set_total_dim(bset); - eq = isl_mat_sub_alloc6(bset->ctx, aff->eq, 0, aff->n_eq, 0, 1 + total); - eq = isl_mat_cow(eq); - T = isl_mat_variable_compression(eq, &T2); - if (T && T->n_col == 0) { - isl_mat_free(T); - isl_mat_free(T2); - isl_basic_set_free(context); - isl_basic_set_free(aff); - return isl_basic_set_set_to_empty(bset); - } - - aff_context = isl_basic_set_affine_hull(isl_basic_set_copy(context)); - - bset = isl_basic_set_preimage(bset, isl_mat_copy(T)); - context = isl_basic_set_preimage(context, T); - - bset = uset_gist_full(bset, context); - bset = isl_basic_set_preimage(bset, T2); - bset = isl_basic_set_intersect(bset, aff); - bset = isl_basic_set_reduce_using_equalities(bset, aff_context); - - if (bset) { - ISL_F_SET(bset, ISL_BASIC_SET_NO_IMPLICIT); - ISL_F_SET(bset, ISL_BASIC_SET_NO_REDUNDANT); - } - - return bset; -error: - isl_basic_set_free(bset); - isl_basic_set_free(context); - return NULL; -} - -/* Normalize the divs in "bmap" in the context of the equalities in "context". - * We simply add the equalities in context to bmap and then do a regular - * div normalizations. Better results can be obtained by normalizing - * only the divs in bmap than do not also appear in context. - * We need to be careful to reduce the divs using the equalities - * so that later calls to isl_basic_map_overlying_set wouldn't introduce - * spurious constraints. - */ -static struct isl_basic_map *normalize_divs_in_context( - struct isl_basic_map *bmap, struct isl_basic_map *context) -{ - int i; - unsigned total_context; - int div_eq; - - div_eq = n_pure_div_eq(bmap); - if (div_eq == 0) - return bmap; - - if (context->n_div > 0) - bmap = isl_basic_map_align_divs(bmap, context); - - total_context = isl_basic_map_total_dim(context); - bmap = isl_basic_map_extend_constraints(bmap, context->n_eq, 0); - for (i = 0; i < context->n_eq; ++i) { - int k; - k = isl_basic_map_alloc_equality(bmap); - isl_seq_cpy(bmap->eq[k], context->eq[i], 1 + total_context); - isl_seq_clr(bmap->eq[k] + 1 + total_context, - isl_basic_map_total_dim(bmap) - total_context); - } - bmap = isl_basic_map_gauss(bmap, NULL); - bmap = normalize_divs(bmap, NULL); - bmap = isl_basic_map_gauss(bmap, NULL); - return bmap; -} - -struct isl_basic_map *isl_basic_map_gist(struct isl_basic_map *bmap, - struct isl_basic_map *context) -{ - struct isl_basic_set *bset; - - if (!bmap || !context) - goto error; - - if (isl_basic_map_is_universe(bmap)) { - isl_basic_map_free(context); - return bmap; - } - if (isl_basic_map_plain_is_empty(context)) { - isl_basic_map_free(bmap); - return context; - } - if (isl_basic_map_plain_is_empty(bmap)) { - isl_basic_map_free(context); - return bmap; - } - - bmap = isl_basic_map_remove_redundancies(bmap); - context = isl_basic_map_remove_redundancies(context); - - if (context->n_eq) - bmap = normalize_divs_in_context(bmap, context); - - context = isl_basic_map_align_divs(context, bmap); - bmap = isl_basic_map_align_divs(bmap, context); - - bset = uset_gist(isl_basic_map_underlying_set(isl_basic_map_copy(bmap)), - isl_basic_map_underlying_set(context)); - - return isl_basic_map_overlying_set(bset, bmap); -error: - isl_basic_map_free(bmap); - isl_basic_map_free(context); - return NULL; -} - -/* - * Assumes context has no implicit divs. - */ -__isl_give isl_map *isl_map_gist_basic_map(__isl_take isl_map *map, - __isl_take isl_basic_map *context) -{ - int i; - - if (!map || !context) - goto error;; - - if (isl_basic_map_plain_is_empty(context)) { - isl_map_free(map); - return isl_map_from_basic_map(context); - } - - context = isl_basic_map_remove_redundancies(context); - map = isl_map_cow(map); - if (!map || !context) - goto error;; - isl_assert(map->ctx, isl_space_is_equal(map->dim, context->dim), goto error); - map = isl_map_compute_divs(map); - for (i = 0; i < map->n; ++i) - context = isl_basic_map_align_divs(context, map->p[i]); - for (i = map->n - 1; i >= 0; --i) { - map->p[i] = isl_basic_map_gist(map->p[i], - isl_basic_map_copy(context)); - if (!map->p[i]) - goto error; - if (isl_basic_map_plain_is_empty(map->p[i])) { - isl_basic_map_free(map->p[i]); - if (i != map->n - 1) - map->p[i] = map->p[map->n - 1]; - map->n--; - } - } - isl_basic_map_free(context); - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - isl_basic_map_free(context); - return NULL; -} - -static __isl_give isl_map *map_gist(__isl_take isl_map *map, - __isl_take isl_map *context) -{ - context = isl_map_compute_divs(context); - return isl_map_gist_basic_map(map, isl_map_simple_hull(context)); -} - -__isl_give isl_map *isl_map_gist(__isl_take isl_map *map, - __isl_take isl_map *context) -{ - return isl_map_align_params_map_map_and(map, context, &map_gist); -} - -struct isl_basic_set *isl_basic_set_gist(struct isl_basic_set *bset, - struct isl_basic_set *context) -{ - return (struct isl_basic_set *)isl_basic_map_gist( - (struct isl_basic_map *)bset, (struct isl_basic_map *)context); -} - -__isl_give isl_set *isl_set_gist_basic_set(__isl_take isl_set *set, - __isl_take isl_basic_set *context) -{ - return (struct isl_set *)isl_map_gist_basic_map((struct isl_map *)set, - (struct isl_basic_map *)context); -} - -__isl_give isl_set *isl_set_gist_params_basic_set(__isl_take isl_set *set, - __isl_take isl_basic_set *context) -{ - isl_space *space = isl_set_get_space(set); - isl_basic_set *dom_context = isl_basic_set_universe(space); - dom_context = isl_basic_set_intersect_params(dom_context, context); - return isl_set_gist_basic_set(set, dom_context); -} - -__isl_give isl_set *isl_set_gist(__isl_take isl_set *set, - __isl_take isl_set *context) -{ - return (struct isl_set *)isl_map_gist((struct isl_map *)set, - (struct isl_map *)context); -} - -__isl_give isl_map *isl_map_gist_domain(__isl_take isl_map *map, - __isl_take isl_set *context) -{ - isl_map *map_context = isl_map_universe(isl_map_get_space(map)); - map_context = isl_map_intersect_domain(map_context, context); - return isl_map_gist(map, map_context); -} - -__isl_give isl_map *isl_map_gist_range(__isl_take isl_map *map, - __isl_take isl_set *context) -{ - isl_map *map_context = isl_map_universe(isl_map_get_space(map)); - map_context = isl_map_intersect_range(map_context, context); - return isl_map_gist(map, map_context); -} - -__isl_give isl_map *isl_map_gist_params(__isl_take isl_map *map, - __isl_take isl_set *context) -{ - isl_map *map_context = isl_map_universe(isl_map_get_space(map)); - map_context = isl_map_intersect_params(map_context, context); - return isl_map_gist(map, map_context); -} - -__isl_give isl_set *isl_set_gist_params(__isl_take isl_set *set, - __isl_take isl_set *context) -{ - return isl_map_gist_params(set, context); -} - -/* Quick check to see if two basic maps are disjoint. - * In particular, we reduce the equalities and inequalities of - * one basic map in the context of the equalities of the other - * basic map and check if we get a contradiction. - */ -int isl_basic_map_plain_is_disjoint(__isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2) -{ - struct isl_vec *v = NULL; - int *elim = NULL; - unsigned total; - int i; - - if (!bmap1 || !bmap2) - return -1; - isl_assert(bmap1->ctx, isl_space_is_equal(bmap1->dim, bmap2->dim), - return -1); - if (bmap1->n_div || bmap2->n_div) - return 0; - if (!bmap1->n_eq && !bmap2->n_eq) - return 0; - - total = isl_space_dim(bmap1->dim, isl_dim_all); - if (total == 0) - return 0; - v = isl_vec_alloc(bmap1->ctx, 1 + total); - if (!v) - goto error; - elim = isl_alloc_array(bmap1->ctx, int, total); - if (!elim) - goto error; - compute_elimination_index(bmap1, elim); - for (i = 0; i < bmap2->n_eq; ++i) { - int reduced; - reduced = reduced_using_equalities(v->block.data, bmap2->eq[i], - bmap1, elim); - if (reduced && !isl_int_is_zero(v->block.data[0]) && - isl_seq_first_non_zero(v->block.data + 1, total) == -1) - goto disjoint; - } - for (i = 0; i < bmap2->n_ineq; ++i) { - int reduced; - reduced = reduced_using_equalities(v->block.data, - bmap2->ineq[i], bmap1, elim); - if (reduced && isl_int_is_neg(v->block.data[0]) && - isl_seq_first_non_zero(v->block.data + 1, total) == -1) - goto disjoint; - } - compute_elimination_index(bmap2, elim); - for (i = 0; i < bmap1->n_ineq; ++i) { - int reduced; - reduced = reduced_using_equalities(v->block.data, - bmap1->ineq[i], bmap2, elim); - if (reduced && isl_int_is_neg(v->block.data[0]) && - isl_seq_first_non_zero(v->block.data + 1, total) == -1) - goto disjoint; - } - isl_vec_free(v); - free(elim); - return 0; -disjoint: - isl_vec_free(v); - free(elim); - return 1; -error: - isl_vec_free(v); - free(elim); - return -1; -} - -int isl_basic_set_plain_is_disjoint(__isl_keep isl_basic_set *bset1, - __isl_keep isl_basic_set *bset2) -{ - return isl_basic_map_plain_is_disjoint((struct isl_basic_map *)bset1, - (struct isl_basic_map *)bset2); -} - -int isl_map_plain_is_disjoint(__isl_keep isl_map *map1, - __isl_keep isl_map *map2) -{ - int i, j; - - if (!map1 || !map2) - return -1; - - if (isl_map_plain_is_equal(map1, map2)) - return 0; - - for (i = 0; i < map1->n; ++i) { - for (j = 0; j < map2->n; ++j) { - int d = isl_basic_map_plain_is_disjoint(map1->p[i], - map2->p[j]); - if (d != 1) - return d; - } - } - return 1; -} - -int isl_set_plain_is_disjoint(__isl_keep isl_set *set1, - __isl_keep isl_set *set2) -{ - return isl_map_plain_is_disjoint((struct isl_map *)set1, - (struct isl_map *)set2); -} - -int isl_set_fast_is_disjoint(__isl_keep isl_set *set1, __isl_keep isl_set *set2) -{ - return isl_set_plain_is_disjoint(set1, set2); -} - -/* Check if we can combine a given div with lower bound l and upper - * bound u with some other div and if so return that other div. - * Otherwise return -1. - * - * We first check that - * - the bounds are opposites of each other (except for the constant - * term) - * - the bounds do not reference any other div - * - no div is defined in terms of this div - * - * Let m be the size of the range allowed on the div by the bounds. - * That is, the bounds are of the form - * - * e <= a <= e + m - 1 - * - * with e some expression in the other variables. - * We look for another div b such that no third div is defined in terms - * of this second div b and such that in any constraint that contains - * a (except for the given lower and upper bound), also contains b - * with a coefficient that is m times that of b. - * That is, all constraints (execpt for the lower and upper bound) - * are of the form - * - * e + f (a + m b) >= 0 - * - * If so, we return b so that "a + m b" can be replaced by - * a single div "c = a + m b". - */ -static int div_find_coalesce(struct isl_basic_map *bmap, int *pairs, - unsigned div, unsigned l, unsigned u) -{ - int i, j; - unsigned dim; - int coalesce = -1; - - if (bmap->n_div <= 1) - return -1; - dim = isl_space_dim(bmap->dim, isl_dim_all); - if (isl_seq_first_non_zero(bmap->ineq[l] + 1 + dim, div) != -1) - return -1; - if (isl_seq_first_non_zero(bmap->ineq[l] + 1 + dim + div + 1, - bmap->n_div - div - 1) != -1) - return -1; - if (!isl_seq_is_neg(bmap->ineq[l] + 1, bmap->ineq[u] + 1, - dim + bmap->n_div)) - return -1; - - for (i = 0; i < bmap->n_div; ++i) { - if (isl_int_is_zero(bmap->div[i][0])) - continue; - if (!isl_int_is_zero(bmap->div[i][1 + 1 + dim + div])) - return -1; - } - - isl_int_add(bmap->ineq[l][0], bmap->ineq[l][0], bmap->ineq[u][0]); - if (isl_int_is_neg(bmap->ineq[l][0])) { - isl_int_sub(bmap->ineq[l][0], - bmap->ineq[l][0], bmap->ineq[u][0]); - bmap = isl_basic_map_copy(bmap); - bmap = isl_basic_map_set_to_empty(bmap); - isl_basic_map_free(bmap); - return -1; - } - isl_int_add_ui(bmap->ineq[l][0], bmap->ineq[l][0], 1); - for (i = 0; i < bmap->n_div; ++i) { - if (i == div) - continue; - if (!pairs[i]) - continue; - for (j = 0; j < bmap->n_div; ++j) { - if (isl_int_is_zero(bmap->div[j][0])) - continue; - if (!isl_int_is_zero(bmap->div[j][1 + 1 + dim + i])) - break; - } - if (j < bmap->n_div) - continue; - for (j = 0; j < bmap->n_ineq; ++j) { - int valid; - if (j == l || j == u) - continue; - if (isl_int_is_zero(bmap->ineq[j][1 + dim + div])) - continue; - if (isl_int_is_zero(bmap->ineq[j][1 + dim + i])) - break; - isl_int_mul(bmap->ineq[j][1 + dim + div], - bmap->ineq[j][1 + dim + div], - bmap->ineq[l][0]); - valid = isl_int_eq(bmap->ineq[j][1 + dim + div], - bmap->ineq[j][1 + dim + i]); - isl_int_divexact(bmap->ineq[j][1 + dim + div], - bmap->ineq[j][1 + dim + div], - bmap->ineq[l][0]); - if (!valid) - break; - } - if (j < bmap->n_ineq) - continue; - coalesce = i; - break; - } - isl_int_sub_ui(bmap->ineq[l][0], bmap->ineq[l][0], 1); - isl_int_sub(bmap->ineq[l][0], bmap->ineq[l][0], bmap->ineq[u][0]); - return coalesce; -} - -/* Given a lower and an upper bound on div i, construct an inequality - * that when nonnegative ensures that this pair of bounds always allows - * for an integer value of the given div. - * The lower bound is inequality l, while the upper bound is inequality u. - * The constructed inequality is stored in ineq. - * g, fl, fu are temporary scalars. - * - * Let the upper bound be - * - * -n_u a + e_u >= 0 - * - * and the lower bound - * - * n_l a + e_l >= 0 - * - * Let n_u = f_u g and n_l = f_l g, with g = gcd(n_u, n_l). - * We have - * - * - f_u e_l <= f_u f_l g a <= f_l e_u - * - * Since all variables are integer valued, this is equivalent to - * - * - f_u e_l - (f_u - 1) <= f_u f_l g a <= f_l e_u + (f_l - 1) - * - * If this interval is at least f_u f_l g, then it contains at least - * one integer value for a. - * That is, the test constraint is - * - * f_l e_u + f_u e_l + f_l - 1 + f_u - 1 + 1 >= f_u f_l g - */ -static void construct_test_ineq(struct isl_basic_map *bmap, int i, - int l, int u, isl_int *ineq, isl_int g, isl_int fl, isl_int fu) -{ - unsigned dim; - dim = isl_space_dim(bmap->dim, isl_dim_all); - - isl_int_gcd(g, bmap->ineq[l][1 + dim + i], bmap->ineq[u][1 + dim + i]); - isl_int_divexact(fl, bmap->ineq[l][1 + dim + i], g); - isl_int_divexact(fu, bmap->ineq[u][1 + dim + i], g); - isl_int_neg(fu, fu); - isl_seq_combine(ineq, fl, bmap->ineq[u], fu, bmap->ineq[l], - 1 + dim + bmap->n_div); - isl_int_add(ineq[0], ineq[0], fl); - isl_int_add(ineq[0], ineq[0], fu); - isl_int_sub_ui(ineq[0], ineq[0], 1); - isl_int_mul(g, g, fl); - isl_int_mul(g, g, fu); - isl_int_sub(ineq[0], ineq[0], g); -} - -/* Remove more kinds of divs that are not strictly needed. - * In particular, if all pairs of lower and upper bounds on a div - * are such that they allow at least one integer value of the div, - * the we can eliminate the div using Fourier-Motzkin without - * introducing any spurious solutions. - */ -static struct isl_basic_map *drop_more_redundant_divs( - struct isl_basic_map *bmap, int *pairs, int n) -{ - struct isl_tab *tab = NULL; - struct isl_vec *vec = NULL; - unsigned dim; - int remove = -1; - isl_int g, fl, fu; - - isl_int_init(g); - isl_int_init(fl); - isl_int_init(fu); - - if (!bmap) - goto error; - - dim = isl_space_dim(bmap->dim, isl_dim_all); - vec = isl_vec_alloc(bmap->ctx, 1 + dim + bmap->n_div); - if (!vec) - goto error; - - tab = isl_tab_from_basic_map(bmap); - - while (n > 0) { - int i, l, u; - int best = -1; - enum isl_lp_result res; - - for (i = 0; i < bmap->n_div; ++i) { - if (!pairs[i]) - continue; - if (best >= 0 && pairs[best] <= pairs[i]) - continue; - best = i; - } - - i = best; - for (l = 0; l < bmap->n_ineq; ++l) { - if (!isl_int_is_pos(bmap->ineq[l][1 + dim + i])) - continue; - for (u = 0; u < bmap->n_ineq; ++u) { - if (!isl_int_is_neg(bmap->ineq[u][1 + dim + i])) - continue; - construct_test_ineq(bmap, i, l, u, - vec->el, g, fl, fu); - res = isl_tab_min(tab, vec->el, - bmap->ctx->one, &g, NULL, 0); - if (res == isl_lp_error) - goto error; - if (res == isl_lp_empty) { - bmap = isl_basic_map_set_to_empty(bmap); - break; - } - if (res != isl_lp_ok || isl_int_is_neg(g)) - break; - } - if (u < bmap->n_ineq) - break; - } - if (l == bmap->n_ineq) { - remove = i; - break; - } - pairs[i] = 0; - --n; - } - - isl_tab_free(tab); - isl_vec_free(vec); - - isl_int_clear(g); - isl_int_clear(fl); - isl_int_clear(fu); - - free(pairs); - - if (remove < 0) - return bmap; - - bmap = isl_basic_map_remove_dims(bmap, isl_dim_div, remove, 1); - return isl_basic_map_drop_redundant_divs(bmap); -error: - free(pairs); - isl_basic_map_free(bmap); - isl_tab_free(tab); - isl_vec_free(vec); - isl_int_clear(g); - isl_int_clear(fl); - isl_int_clear(fu); - return NULL; -} - -/* Given a pair of divs div1 and div2 such that, expect for the lower bound l - * and the upper bound u, div1 always occurs together with div2 in the form - * (div1 + m div2), where m is the constant range on the variable div1 - * allowed by l and u, replace the pair div1 and div2 by a single - * div that is equal to div1 + m div2. - * - * The new div will appear in the location that contains div2. - * We need to modify all constraints that contain - * div2 = (div - div1) / m - * (If a constraint does not contain div2, it will also not contain div1.) - * If the constraint also contains div1, then we know they appear - * as f (div1 + m div2) and we can simply replace (div1 + m div2) by div, - * i.e., the coefficient of div is f. - * - * Otherwise, we first need to introduce div1 into the constraint. - * Let the l be - * - * div1 + f >=0 - * - * and u - * - * -div1 + f' >= 0 - * - * A lower bound on div2 - * - * n div2 + t >= 0 - * - * can be replaced by - * - * (n * (m div 2 + div1) + m t + n f)/g >= 0 - * - * with g = gcd(m,n). - * An upper bound - * - * -n div2 + t >= 0 - * - * can be replaced by - * - * (-n * (m div2 + div1) + m t + n f')/g >= 0 - * - * These constraint are those that we would obtain from eliminating - * div1 using Fourier-Motzkin. - * - * After all constraints have been modified, we drop the lower and upper - * bound and then drop div1. - */ -static struct isl_basic_map *coalesce_divs(struct isl_basic_map *bmap, - unsigned div1, unsigned div2, unsigned l, unsigned u) -{ - isl_int a; - isl_int b; - isl_int m; - unsigned dim, total; - int i; - - dim = isl_space_dim(bmap->dim, isl_dim_all); - total = 1 + dim + bmap->n_div; - - isl_int_init(a); - isl_int_init(b); - isl_int_init(m); - isl_int_add(m, bmap->ineq[l][0], bmap->ineq[u][0]); - isl_int_add_ui(m, m, 1); - - for (i = 0; i < bmap->n_ineq; ++i) { - if (i == l || i == u) - continue; - if (isl_int_is_zero(bmap->ineq[i][1 + dim + div2])) - continue; - if (isl_int_is_zero(bmap->ineq[i][1 + dim + div1])) { - isl_int_gcd(b, m, bmap->ineq[i][1 + dim + div2]); - isl_int_divexact(a, m, b); - isl_int_divexact(b, bmap->ineq[i][1 + dim + div2], b); - if (isl_int_is_pos(b)) { - isl_seq_combine(bmap->ineq[i], a, bmap->ineq[i], - b, bmap->ineq[l], total); - } else { - isl_int_neg(b, b); - isl_seq_combine(bmap->ineq[i], a, bmap->ineq[i], - b, bmap->ineq[u], total); - } - } - isl_int_set(bmap->ineq[i][1 + dim + div2], - bmap->ineq[i][1 + dim + div1]); - isl_int_set_si(bmap->ineq[i][1 + dim + div1], 0); - } - - isl_int_clear(a); - isl_int_clear(b); - isl_int_clear(m); - if (l > u) { - isl_basic_map_drop_inequality(bmap, l); - isl_basic_map_drop_inequality(bmap, u); - } else { - isl_basic_map_drop_inequality(bmap, u); - isl_basic_map_drop_inequality(bmap, l); - } - bmap = isl_basic_map_drop_div(bmap, div1); - return bmap; -} - -/* First check if we can coalesce any pair of divs and - * then continue with dropping more redundant divs. - * - * We loop over all pairs of lower and upper bounds on a div - * with coefficient 1 and -1, respectively, check if there - * is any other div "c" with which we can coalesce the div - * and if so, perform the coalescing. - */ -static struct isl_basic_map *coalesce_or_drop_more_redundant_divs( - struct isl_basic_map *bmap, int *pairs, int n) -{ - int i, l, u; - unsigned dim; - - dim = isl_space_dim(bmap->dim, isl_dim_all); - - for (i = 0; i < bmap->n_div; ++i) { - if (!pairs[i]) - continue; - for (l = 0; l < bmap->n_ineq; ++l) { - if (!isl_int_is_one(bmap->ineq[l][1 + dim + i])) - continue; - for (u = 0; u < bmap->n_ineq; ++u) { - int c; - - if (!isl_int_is_negone(bmap->ineq[u][1+dim+i])) - continue; - c = div_find_coalesce(bmap, pairs, i, l, u); - if (c < 0) - continue; - free(pairs); - bmap = coalesce_divs(bmap, i, c, l, u); - return isl_basic_map_drop_redundant_divs(bmap); - } - } - } - - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) - return bmap; - - return drop_more_redundant_divs(bmap, pairs, n); -} - -/* Remove divs that are not strictly needed. - * In particular, if a div only occurs positively (or negatively) - * in constraints, then it can simply be dropped. - * Also, if a div occurs only occurs in two constraints and if moreover - * those two constraints are opposite to each other, except for the constant - * term and if the sum of the constant terms is such that for any value - * of the other values, there is always at least one integer value of the - * div, i.e., if one plus this sum is greater than or equal to - * the (absolute value) of the coefficent of the div in the constraints, - * then we can also simply drop the div. - * - * If any divs are left after these simple checks then we move on - * to more complicated cases in drop_more_redundant_divs. - */ -struct isl_basic_map *isl_basic_map_drop_redundant_divs( - struct isl_basic_map *bmap) -{ - int i, j; - unsigned off; - int *pairs = NULL; - int n = 0; - - if (!bmap) - goto error; - - off = isl_space_dim(bmap->dim, isl_dim_all); - pairs = isl_calloc_array(bmap->ctx, int, bmap->n_div); - if (!pairs) - goto error; - - for (i = 0; i < bmap->n_div; ++i) { - int pos, neg; - int last_pos, last_neg; - int redundant; - int defined; - - defined = !isl_int_is_zero(bmap->div[i][0]); - for (j = 0; j < bmap->n_eq; ++j) - if (!isl_int_is_zero(bmap->eq[j][1 + off + i])) - break; - if (j < bmap->n_eq) - continue; - ++n; - pos = neg = 0; - for (j = 0; j < bmap->n_ineq; ++j) { - if (isl_int_is_pos(bmap->ineq[j][1 + off + i])) { - last_pos = j; - ++pos; - } - if (isl_int_is_neg(bmap->ineq[j][1 + off + i])) { - last_neg = j; - ++neg; - } - } - pairs[i] = pos * neg; - if (pairs[i] == 0) { - for (j = bmap->n_ineq - 1; j >= 0; --j) - if (!isl_int_is_zero(bmap->ineq[j][1+off+i])) - isl_basic_map_drop_inequality(bmap, j); - bmap = isl_basic_map_drop_div(bmap, i); - free(pairs); - return isl_basic_map_drop_redundant_divs(bmap); - } - if (pairs[i] != 1) - continue; - if (!isl_seq_is_neg(bmap->ineq[last_pos] + 1, - bmap->ineq[last_neg] + 1, - off + bmap->n_div)) - continue; - - isl_int_add(bmap->ineq[last_pos][0], - bmap->ineq[last_pos][0], bmap->ineq[last_neg][0]); - isl_int_add_ui(bmap->ineq[last_pos][0], - bmap->ineq[last_pos][0], 1); - redundant = isl_int_ge(bmap->ineq[last_pos][0], - bmap->ineq[last_pos][1+off+i]); - isl_int_sub_ui(bmap->ineq[last_pos][0], - bmap->ineq[last_pos][0], 1); - isl_int_sub(bmap->ineq[last_pos][0], - bmap->ineq[last_pos][0], bmap->ineq[last_neg][0]); - if (!redundant) { - if (defined || - !ok_to_set_div_from_bound(bmap, i, last_pos)) { - pairs[i] = 0; - --n; - continue; - } - bmap = set_div_from_lower_bound(bmap, i, last_pos); - bmap = isl_basic_map_simplify(bmap); - free(pairs); - return isl_basic_map_drop_redundant_divs(bmap); - } - if (last_pos > last_neg) { - isl_basic_map_drop_inequality(bmap, last_pos); - isl_basic_map_drop_inequality(bmap, last_neg); - } else { - isl_basic_map_drop_inequality(bmap, last_neg); - isl_basic_map_drop_inequality(bmap, last_pos); - } - bmap = isl_basic_map_drop_div(bmap, i); - free(pairs); - return isl_basic_map_drop_redundant_divs(bmap); - } - - if (n > 0) - return coalesce_or_drop_more_redundant_divs(bmap, pairs, n); - - free(pairs); - return bmap; -error: - free(pairs); - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_basic_set *isl_basic_set_drop_redundant_divs( - struct isl_basic_set *bset) -{ - return (struct isl_basic_set *) - isl_basic_map_drop_redundant_divs((struct isl_basic_map *)bset); -} - -struct isl_map *isl_map_drop_redundant_divs(struct isl_map *map) -{ - int i; - - if (!map) - return NULL; - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_drop_redundant_divs(map->p[i]); - if (!map->p[i]) - goto error; - } - ISL_F_CLR(map, ISL_MAP_NORMALIZED); - return map; -error: - isl_map_free(map); - return NULL; -} - -struct isl_set *isl_set_drop_redundant_divs(struct isl_set *set) -{ - return (struct isl_set *) - isl_map_drop_redundant_divs((struct isl_map *)set); -} diff --git a/cloog-0.17.0/isl/isl_map_subtract.c b/cloog-0.17.0/isl/isl_map_subtract.c deleted file mode 100644 index 1fd4086..0000000 --- a/cloog-0.17.0/isl/isl_map_subtract.c +++ /dev/null @@ -1,858 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include "isl_tab.h" -#include - -static void expand_constraint(isl_vec *v, unsigned dim, - isl_int *c, int *div_map, unsigned n_div) -{ - int i; - - isl_seq_cpy(v->el, c, 1 + dim); - isl_seq_clr(v->el + 1 + dim, v->size - (1 + dim)); - - for (i = 0; i < n_div; ++i) - isl_int_set(v->el[1 + dim + div_map[i]], c[1 + dim + i]); -} - -/* Add all constraints of bmap to tab. The equalities of bmap - * are added as a pair of inequalities. - */ -static int tab_add_constraints(struct isl_tab *tab, - __isl_keep isl_basic_map *bmap, int *div_map) -{ - int i; - unsigned dim; - unsigned tab_total; - unsigned bmap_total; - isl_vec *v; - - if (!tab || !bmap) - return -1; - - tab_total = isl_basic_map_total_dim(tab->bmap); - bmap_total = isl_basic_map_total_dim(bmap); - dim = isl_space_dim(tab->bmap->dim, isl_dim_all); - - if (isl_tab_extend_cons(tab, 2 * bmap->n_eq + bmap->n_ineq) < 0) - return -1; - - v = isl_vec_alloc(bmap->ctx, 1 + tab_total); - if (!v) - return -1; - - for (i = 0; i < bmap->n_eq; ++i) { - expand_constraint(v, dim, bmap->eq[i], div_map, bmap->n_div); - if (isl_tab_add_ineq(tab, v->el) < 0) - goto error; - isl_seq_neg(bmap->eq[i], bmap->eq[i], 1 + bmap_total); - expand_constraint(v, dim, bmap->eq[i], div_map, bmap->n_div); - if (isl_tab_add_ineq(tab, v->el) < 0) - goto error; - isl_seq_neg(bmap->eq[i], bmap->eq[i], 1 + bmap_total); - if (tab->empty) - break; - } - - for (i = 0; i < bmap->n_ineq; ++i) { - expand_constraint(v, dim, bmap->ineq[i], div_map, bmap->n_div); - if (isl_tab_add_ineq(tab, v->el) < 0) - goto error; - if (tab->empty) - break; - } - - isl_vec_free(v); - return 0; -error: - isl_vec_free(v); - return -1; -} - -/* Add a specific constraint of bmap (or its opposite) to tab. - * The position of the constraint is specified by "c", where - * the equalities of bmap are counted twice, once for the inequality - * that is equal to the equality, and once for its negation. - */ -static int tab_add_constraint(struct isl_tab *tab, - __isl_keep isl_basic_map *bmap, int *div_map, int c, int oppose) -{ - unsigned dim; - unsigned tab_total; - unsigned bmap_total; - isl_vec *v; - int r; - - if (!tab || !bmap) - return -1; - - tab_total = isl_basic_map_total_dim(tab->bmap); - bmap_total = isl_basic_map_total_dim(bmap); - dim = isl_space_dim(tab->bmap->dim, isl_dim_all); - - v = isl_vec_alloc(bmap->ctx, 1 + tab_total); - if (!v) - return -1; - - if (c < 2 * bmap->n_eq) { - if ((c % 2) != oppose) - isl_seq_neg(bmap->eq[c/2], bmap->eq[c/2], - 1 + bmap_total); - if (oppose) - isl_int_sub_ui(bmap->eq[c/2][0], bmap->eq[c/2][0], 1); - expand_constraint(v, dim, bmap->eq[c/2], div_map, bmap->n_div); - r = isl_tab_add_ineq(tab, v->el); - if (oppose) - isl_int_add_ui(bmap->eq[c/2][0], bmap->eq[c/2][0], 1); - if ((c % 2) != oppose) - isl_seq_neg(bmap->eq[c/2], bmap->eq[c/2], - 1 + bmap_total); - } else { - c -= 2 * bmap->n_eq; - if (oppose) { - isl_seq_neg(bmap->ineq[c], bmap->ineq[c], - 1 + bmap_total); - isl_int_sub_ui(bmap->ineq[c][0], bmap->ineq[c][0], 1); - } - expand_constraint(v, dim, bmap->ineq[c], div_map, bmap->n_div); - r = isl_tab_add_ineq(tab, v->el); - if (oppose) { - isl_int_add_ui(bmap->ineq[c][0], bmap->ineq[c][0], 1); - isl_seq_neg(bmap->ineq[c], bmap->ineq[c], - 1 + bmap_total); - } - } - - isl_vec_free(v); - return r; -} - -static int tab_add_divs(struct isl_tab *tab, __isl_keep isl_basic_map *bmap, - int **div_map) -{ - int i, j; - struct isl_vec *vec; - unsigned total; - unsigned dim; - - if (!bmap) - return -1; - if (!bmap->n_div) - return 0; - - if (!*div_map) - *div_map = isl_alloc_array(bmap->ctx, int, bmap->n_div); - if (!*div_map) - return -1; - - total = isl_basic_map_total_dim(tab->bmap); - dim = total - tab->bmap->n_div; - vec = isl_vec_alloc(bmap->ctx, 2 + total + bmap->n_div); - if (!vec) - return -1; - - for (i = 0; i < bmap->n_div; ++i) { - isl_seq_cpy(vec->el, bmap->div[i], 2 + dim); - isl_seq_clr(vec->el + 2 + dim, tab->bmap->n_div); - for (j = 0; j < i; ++j) - isl_int_set(vec->el[2 + dim + (*div_map)[j]], - bmap->div[i][2 + dim + j]); - for (j = 0; j < tab->bmap->n_div; ++j) - if (isl_seq_eq(tab->bmap->div[j], - vec->el, 2 + dim + tab->bmap->n_div)) - break; - (*div_map)[i] = j; - if (j == tab->bmap->n_div) { - vec->size = 2 + dim + tab->bmap->n_div; - if (isl_tab_add_div(tab, vec, NULL, NULL) < 0) - goto error; - } - } - - isl_vec_free(vec); - - return 0; -error: - isl_vec_free(vec); - - return -1; -} - -/* Freeze all constraints of tableau tab. - */ -static int tab_freeze_constraints(struct isl_tab *tab) -{ - int i; - - for (i = 0; i < tab->n_con; ++i) - if (isl_tab_freeze_constraint(tab, i) < 0) - return -1; - - return 0; -} - -/* Check for redundant constraints starting at offset. - * Put the indices of the redundant constraints in index - * and return the number of redundant constraints. - */ -static int n_non_redundant(isl_ctx *ctx, struct isl_tab *tab, - int offset, int **index) -{ - int i, n; - int n_test = tab->n_con - offset; - - if (isl_tab_detect_redundant(tab) < 0) - return -1; - - if (!*index) - *index = isl_alloc_array(ctx, int, n_test); - if (!*index) - return -1; - - for (n = 0, i = 0; i < n_test; ++i) { - int r; - r = isl_tab_is_redundant(tab, offset + i); - if (r < 0) - return -1; - if (r) - continue; - (*index)[n++] = i; - } - - return n; -} - -/* basic_map_collect_diff calls add on each of the pieces of - * the set difference between bmap and map until the add method - * return a negative value. - */ -struct isl_diff_collector { - int (*add)(struct isl_diff_collector *dc, - __isl_take isl_basic_map *bmap); -}; - -/* Compute the set difference between bmap and map and call - * dc->add on each of the piece until this function returns - * a negative value. - * Return 0 on success and -1 on error. dc->add returning - * a negative value is treated as an error, but the calling - * function can interpret the results based on the state of dc. - * - * Assumes that map has known divs. - * - * The difference is computed by a backtracking algorithm. - * Each level corresponds to a basic map in "map". - * When a node in entered for the first time, we check - * if the corresonding basic map intersects the current piece - * of "bmap". If not, we move to the next level. - * Otherwise, we split the current piece into as many - * pieces as there are non-redundant constraints of the current - * basic map in the intersection. Each of these pieces is - * handled by a child of the current node. - * In particular, if there are n non-redundant constraints, - * then for each 0 <= i < n, a piece is cut off by adding - * constraints 0 <= j < i and adding the opposite of constraint i. - * If there are no non-redundant constraints, meaning that the current - * piece is a subset of the current basic map, then we simply backtrack. - * - * In the leaves, we check if the remaining piece has any integer points - * and if so, pass it along to dc->add. As a special case, if nothing - * has been removed when we end up in a leaf, we simply pass along - * the original basic map. - */ -static int basic_map_collect_diff(__isl_take isl_basic_map *bmap, - __isl_take isl_map *map, struct isl_diff_collector *dc) -{ - int i; - int modified; - int level; - int init; - int empty; - isl_ctx *ctx; - struct isl_tab *tab = NULL; - struct isl_tab_undo **snap = NULL; - int *k = NULL; - int *n = NULL; - int **index = NULL; - int **div_map = NULL; - - empty = isl_basic_map_is_empty(bmap); - if (empty) { - isl_basic_map_free(bmap); - isl_map_free(map); - return empty < 0 ? -1 : 0; - } - - bmap = isl_basic_map_cow(bmap); - map = isl_map_cow(map); - - if (!bmap || !map) - goto error; - - ctx = map->ctx; - snap = isl_alloc_array(map->ctx, struct isl_tab_undo *, map->n); - k = isl_alloc_array(map->ctx, int, map->n); - n = isl_alloc_array(map->ctx, int, map->n); - index = isl_calloc_array(map->ctx, int *, map->n); - div_map = isl_calloc_array(map->ctx, int *, map->n); - if (!snap || !k || !n || !index || !div_map) - goto error; - - bmap = isl_basic_map_order_divs(bmap); - map = isl_map_order_divs(map); - - tab = isl_tab_from_basic_map(bmap); - if (isl_tab_track_bmap(tab, isl_basic_map_copy(bmap)) < 0) - goto error; - - modified = 0; - level = 0; - init = 1; - - while (level >= 0) { - if (level >= map->n) { - int empty; - struct isl_basic_map *bm; - if (!modified) { - if (dc->add(dc, isl_basic_map_copy(bmap)) < 0) - goto error; - break; - } - bm = isl_basic_map_copy(tab->bmap); - bm = isl_basic_map_cow(bm); - bm = isl_basic_map_update_from_tab(bm, tab); - bm = isl_basic_map_simplify(bm); - bm = isl_basic_map_finalize(bm); - empty = isl_basic_map_is_empty(bm); - if (empty) - isl_basic_map_free(bm); - else if (dc->add(dc, bm) < 0) - goto error; - if (empty < 0) - goto error; - level--; - init = 0; - continue; - } - if (init) { - int offset; - struct isl_tab_undo *snap2; - snap2 = isl_tab_snap(tab); - if (tab_add_divs(tab, map->p[level], - &div_map[level]) < 0) - goto error; - offset = tab->n_con; - snap[level] = isl_tab_snap(tab); - if (tab_freeze_constraints(tab) < 0) - goto error; - if (tab_add_constraints(tab, map->p[level], - div_map[level]) < 0) - goto error; - k[level] = 0; - n[level] = 0; - if (tab->empty) { - if (isl_tab_rollback(tab, snap2) < 0) - goto error; - level++; - continue; - } - modified = 1; - n[level] = n_non_redundant(ctx, tab, offset, - &index[level]); - if (n[level] < 0) - goto error; - if (n[level] == 0) { - level--; - init = 0; - continue; - } - if (isl_tab_rollback(tab, snap[level]) < 0) - goto error; - if (tab_add_constraint(tab, map->p[level], - div_map[level], index[level][0], 1) < 0) - goto error; - level++; - continue; - } else { - if (k[level] + 1 >= n[level]) { - level--; - continue; - } - if (isl_tab_rollback(tab, snap[level]) < 0) - goto error; - if (tab_add_constraint(tab, map->p[level], - div_map[level], - index[level][k[level]], 0) < 0) - goto error; - snap[level] = isl_tab_snap(tab); - k[level]++; - if (tab_add_constraint(tab, map->p[level], - div_map[level], - index[level][k[level]], 1) < 0) - goto error; - level++; - init = 1; - continue; - } - } - - isl_tab_free(tab); - free(snap); - free(n); - free(k); - for (i = 0; index && i < map->n; ++i) - free(index[i]); - free(index); - for (i = 0; div_map && i < map->n; ++i) - free(div_map[i]); - free(div_map); - - isl_basic_map_free(bmap); - isl_map_free(map); - - return 0; -error: - isl_tab_free(tab); - free(snap); - free(n); - free(k); - for (i = 0; index && i < map->n; ++i) - free(index[i]); - free(index); - for (i = 0; div_map && i < map->n; ++i) - free(div_map[i]); - free(div_map); - isl_basic_map_free(bmap); - isl_map_free(map); - return -1; -} - -/* A diff collector that actually collects all parts of the - * set difference in the field diff. - */ -struct isl_subtract_diff_collector { - struct isl_diff_collector dc; - struct isl_map *diff; -}; - -/* isl_subtract_diff_collector callback. - */ -static int basic_map_subtract_add(struct isl_diff_collector *dc, - __isl_take isl_basic_map *bmap) -{ - struct isl_subtract_diff_collector *sdc; - sdc = (struct isl_subtract_diff_collector *)dc; - - sdc->diff = isl_map_union_disjoint(sdc->diff, - isl_map_from_basic_map(bmap)); - - return sdc->diff ? 0 : -1; -} - -/* Return the set difference between bmap and map. - */ -static __isl_give isl_map *basic_map_subtract(__isl_take isl_basic_map *bmap, - __isl_take isl_map *map) -{ - struct isl_subtract_diff_collector sdc; - sdc.dc.add = &basic_map_subtract_add; - sdc.diff = isl_map_empty_like_basic_map(bmap); - if (basic_map_collect_diff(bmap, map, &sdc.dc) < 0) { - isl_map_free(sdc.diff); - sdc.diff = NULL; - } - return sdc.diff; -} - -/* Return the set difference between map1 and map2. - * (U_i A_i) \ (U_j B_j) is computed as U_i (A_i \ (U_j B_j)) - */ -static __isl_give isl_map *map_subtract( __isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - int i; - struct isl_map *diff; - - if (!map1 || !map2) - goto error; - - isl_assert(map1->ctx, isl_space_is_equal(map1->dim, map2->dim), goto error); - - if (isl_map_is_empty(map2)) { - isl_map_free(map2); - return map1; - } - - map1 = isl_map_compute_divs(map1); - map2 = isl_map_compute_divs(map2); - if (!map1 || !map2) - goto error; - - map1 = isl_map_remove_empty_parts(map1); - map2 = isl_map_remove_empty_parts(map2); - - diff = isl_map_empty_like(map1); - for (i = 0; i < map1->n; ++i) { - struct isl_map *d; - d = basic_map_subtract(isl_basic_map_copy(map1->p[i]), - isl_map_copy(map2)); - if (ISL_F_ISSET(map1, ISL_MAP_DISJOINT)) - diff = isl_map_union_disjoint(diff, d); - else - diff = isl_map_union(diff, d); - } - - isl_map_free(map1); - isl_map_free(map2); - - return diff; -error: - isl_map_free(map1); - isl_map_free(map2); - return NULL; -} - -__isl_give isl_map *isl_map_subtract( __isl_take isl_map *map1, - __isl_take isl_map *map2) -{ - return isl_map_align_params_map_map_and(map1, map2, &map_subtract); -} - -struct isl_set *isl_set_subtract(struct isl_set *set1, struct isl_set *set2) -{ - return (struct isl_set *) - isl_map_subtract( - (struct isl_map *)set1, (struct isl_map *)set2); -} - -/* Remove the elements of "dom" from the domain of "map". - */ -static __isl_give isl_map *map_subtract_domain(__isl_take isl_map *map, - __isl_take isl_set *dom) -{ - isl_map *ext_dom; - - if (!isl_map_compatible_domain(map, dom)) - isl_die(isl_set_get_ctx(dom), isl_error_invalid, - "incompatible spaces", goto error); - - ext_dom = isl_map_universe(isl_map_get_space(map)); - ext_dom = isl_map_intersect_domain(ext_dom, dom); - return isl_map_subtract(map, ext_dom); -error: - isl_map_free(map); - isl_set_free(dom); - return NULL; -} - -__isl_give isl_map *isl_map_subtract_domain(__isl_take isl_map *map, - __isl_take isl_set *dom) -{ - return isl_map_align_params_map_map_and(map, dom, &map_subtract_domain); -} - -/* Remove the elements of "dom" from the range of "map". - */ -static __isl_give isl_map *map_subtract_range(__isl_take isl_map *map, - __isl_take isl_set *dom) -{ - isl_map *ext_dom; - - if (!isl_map_compatible_range(map, dom)) - isl_die(isl_set_get_ctx(dom), isl_error_invalid, - "incompatible spaces", goto error); - - ext_dom = isl_map_universe(isl_map_get_space(map)); - ext_dom = isl_map_intersect_range(ext_dom, dom); - return isl_map_subtract(map, ext_dom); -error: - isl_map_free(map); - isl_set_free(dom); - return NULL; -} - -__isl_give isl_map *isl_map_subtract_range(__isl_take isl_map *map, - __isl_take isl_set *dom) -{ - return isl_map_align_params_map_map_and(map, dom, &map_subtract_range); -} - -/* A diff collector that aborts as soon as its add function is called, - * setting empty to 0. - */ -struct isl_is_empty_diff_collector { - struct isl_diff_collector dc; - int empty; -}; - -/* isl_is_empty_diff_collector callback. - */ -static int basic_map_is_empty_add(struct isl_diff_collector *dc, - __isl_take isl_basic_map *bmap) -{ - struct isl_is_empty_diff_collector *edc; - edc = (struct isl_is_empty_diff_collector *)dc; - - edc->empty = 0; - - isl_basic_map_free(bmap); - return -1; -} - -/* Check if bmap \ map is empty by computing this set difference - * and breaking off as soon as the difference is known to be non-empty. - */ -static int basic_map_diff_is_empty(__isl_keep isl_basic_map *bmap, - __isl_keep isl_map *map) -{ - int r; - struct isl_is_empty_diff_collector edc; - - r = isl_basic_map_plain_is_empty(bmap); - if (r) - return r; - - edc.dc.add = &basic_map_is_empty_add; - edc.empty = 1; - r = basic_map_collect_diff(isl_basic_map_copy(bmap), - isl_map_copy(map), &edc.dc); - if (!edc.empty) - return 0; - - return r < 0 ? -1 : 1; -} - -/* Check if map1 \ map2 is empty by checking if the set difference is empty - * for each of the basic maps in map1. - */ -static int map_diff_is_empty(__isl_keep isl_map *map1, __isl_keep isl_map *map2) -{ - int i; - int is_empty = 1; - - if (!map1 || !map2) - return -1; - - for (i = 0; i < map1->n; ++i) { - is_empty = basic_map_diff_is_empty(map1->p[i], map2); - if (is_empty < 0 || !is_empty) - break; - } - - return is_empty; -} - -/* Return 1 if "bmap" contains a single element. - */ -int isl_basic_map_plain_is_singleton(__isl_keep isl_basic_map *bmap) -{ - if (!bmap) - return -1; - if (bmap->n_div) - return 0; - if (bmap->n_ineq) - return 0; - return bmap->n_eq == isl_basic_map_total_dim(bmap); -} - -/* Return 1 if "map" contains a single element. - */ -int isl_map_plain_is_singleton(__isl_keep isl_map *map) -{ - if (!map) - return -1; - if (map->n != 1) - return 0; - - return isl_basic_map_plain_is_singleton(map->p[0]); -} - -/* Given a singleton basic map, extract the single element - * as an isl_point. - */ -static __isl_give isl_point *singleton_extract_point( - __isl_keep isl_basic_map *bmap) -{ - int j; - unsigned dim; - struct isl_vec *point; - isl_int m; - - if (!bmap) - return NULL; - - dim = isl_basic_map_total_dim(bmap); - isl_assert(bmap->ctx, bmap->n_eq == dim, return NULL); - point = isl_vec_alloc(bmap->ctx, 1 + dim); - if (!point) - return NULL; - - isl_int_init(m); - - isl_int_set_si(point->el[0], 1); - for (j = 0; j < bmap->n_eq; ++j) { - int i = dim - 1 - j; - isl_assert(bmap->ctx, - isl_seq_first_non_zero(bmap->eq[j] + 1, i) == -1, - goto error); - isl_assert(bmap->ctx, - isl_int_is_one(bmap->eq[j][1 + i]) || - isl_int_is_negone(bmap->eq[j][1 + i]), - goto error); - isl_assert(bmap->ctx, - isl_seq_first_non_zero(bmap->eq[j]+1+i+1, dim-i-1) == -1, - goto error); - - isl_int_gcd(m, point->el[0], bmap->eq[j][1 + i]); - isl_int_divexact(m, bmap->eq[j][1 + i], m); - isl_int_abs(m, m); - isl_seq_scale(point->el, point->el, m, 1 + i); - isl_int_divexact(m, point->el[0], bmap->eq[j][1 + i]); - isl_int_neg(m, m); - isl_int_mul(point->el[1 + i], m, bmap->eq[j][0]); - } - - isl_int_clear(m); - return isl_point_alloc(isl_basic_map_get_space(bmap), point); -error: - isl_int_clear(m); - isl_vec_free(point); - return NULL; -} - -/* Return 1 is the singleton map "map1" is a subset of "map2", - * i.e., if the single element of "map1" is also an element of "map2". - * Assumes "map2" has known divs. - */ -static int map_is_singleton_subset(__isl_keep isl_map *map1, - __isl_keep isl_map *map2) -{ - int i; - int is_subset = 0; - struct isl_point *point; - - if (!map1 || !map2) - return -1; - if (map1->n != 1) - return -1; - - point = singleton_extract_point(map1->p[0]); - if (!point) - return -1; - - for (i = 0; i < map2->n; ++i) { - is_subset = isl_basic_map_contains_point(map2->p[i], point); - if (is_subset) - break; - } - - isl_point_free(point); - return is_subset; -} - -static int map_is_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2) -{ - int is_subset = 0; - - if (!map1 || !map2) - return -1; - - if (!isl_map_has_equal_space(map1, map2)) - return 0; - - if (isl_map_is_empty(map1)) - return 1; - - if (isl_map_is_empty(map2)) - return 0; - - if (isl_map_plain_is_universe(map2)) - return 1; - - map2 = isl_map_compute_divs(isl_map_copy(map2)); - if (isl_map_plain_is_singleton(map1)) { - is_subset = map_is_singleton_subset(map1, map2); - isl_map_free(map2); - return is_subset; - } - is_subset = map_diff_is_empty(map1, map2); - isl_map_free(map2); - - return is_subset; -} - -int isl_map_is_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2) -{ - return isl_map_align_params_map_map_and_test(map1, map2, - &map_is_subset); -} - -int isl_set_is_subset(struct isl_set *set1, struct isl_set *set2) -{ - return isl_map_is_subset( - (struct isl_map *)set1, (struct isl_map *)set2); -} - -__isl_give isl_map *isl_map_make_disjoint(__isl_take isl_map *map) -{ - int i; - struct isl_subtract_diff_collector sdc; - sdc.dc.add = &basic_map_subtract_add; - - if (!map) - return NULL; - if (ISL_F_ISSET(map, ISL_MAP_DISJOINT)) - return map; - if (map->n <= 1) - return map; - - map = isl_map_compute_divs(map); - map = isl_map_remove_empty_parts(map); - - if (!map || map->n <= 1) - return map; - - sdc.diff = isl_map_from_basic_map(isl_basic_map_copy(map->p[0])); - - for (i = 1; i < map->n; ++i) { - struct isl_basic_map *bmap = isl_basic_map_copy(map->p[i]); - struct isl_map *copy = isl_map_copy(sdc.diff); - if (basic_map_collect_diff(bmap, copy, &sdc.dc) < 0) { - isl_map_free(sdc.diff); - sdc.diff = NULL; - break; - } - } - - isl_map_free(map); - - return sdc.diff; -} - -__isl_give isl_set *isl_set_make_disjoint(__isl_take isl_set *set) -{ - return (struct isl_set *)isl_map_make_disjoint((struct isl_map *)set); -} - -__isl_give isl_set *isl_set_complement(__isl_take isl_set *set) -{ - isl_set *universe; - - if (!set) - return NULL; - - universe = isl_set_universe(isl_set_get_space(set)); - - return isl_set_subtract(universe, set); -} diff --git a/cloog-0.17.0/isl/isl_mat.c b/cloog-0.17.0/isl/isl_mat.c deleted file mode 100644 index 9724900..0000000 --- a/cloog-0.17.0/isl/isl_mat.c +++ /dev/null @@ -1,1632 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include "isl_map_private.h" -#include - -isl_ctx *isl_mat_get_ctx(__isl_keep isl_mat *mat) -{ - return mat ? mat->ctx : NULL; -} - -struct isl_mat *isl_mat_alloc(struct isl_ctx *ctx, - unsigned n_row, unsigned n_col) -{ - int i; - struct isl_mat *mat; - - mat = isl_alloc_type(ctx, struct isl_mat); - if (!mat) - return NULL; - - mat->row = NULL; - mat->block = isl_blk_alloc(ctx, n_row * n_col); - if (isl_blk_is_error(mat->block)) - goto error; - mat->row = isl_alloc_array(ctx, isl_int *, n_row); - if (!mat->row) - goto error; - - for (i = 0; i < n_row; ++i) - mat->row[i] = mat->block.data + i * n_col; - - mat->ctx = ctx; - isl_ctx_ref(ctx); - mat->ref = 1; - mat->n_row = n_row; - mat->n_col = n_col; - mat->max_col = n_col; - mat->flags = 0; - - return mat; -error: - isl_blk_free(ctx, mat->block); - free(mat); - return NULL; -} - -struct isl_mat *isl_mat_extend(struct isl_mat *mat, - unsigned n_row, unsigned n_col) -{ - int i; - isl_int *old; - isl_int **row; - - if (!mat) - return NULL; - - if (mat->max_col >= n_col && mat->n_row >= n_row) { - if (mat->n_col < n_col) - mat->n_col = n_col; - return mat; - } - - if (mat->max_col < n_col) { - struct isl_mat *new_mat; - - if (n_row < mat->n_row) - n_row = mat->n_row; - new_mat = isl_mat_alloc(mat->ctx, n_row, n_col); - if (!new_mat) - goto error; - for (i = 0; i < mat->n_row; ++i) - isl_seq_cpy(new_mat->row[i], mat->row[i], mat->n_col); - isl_mat_free(mat); - return new_mat; - } - - mat = isl_mat_cow(mat); - if (!mat) - goto error; - - old = mat->block.data; - mat->block = isl_blk_extend(mat->ctx, mat->block, n_row * mat->max_col); - if (isl_blk_is_error(mat->block)) - goto error; - row = isl_realloc_array(mat->ctx, mat->row, isl_int *, n_row); - if (!row) - goto error; - mat->row = row; - - for (i = 0; i < mat->n_row; ++i) - mat->row[i] = mat->block.data + (mat->row[i] - old); - for (i = mat->n_row; i < n_row; ++i) - mat->row[i] = mat->block.data + i * mat->max_col; - mat->n_row = n_row; - if (mat->n_col < n_col) - mat->n_col = n_col; - - return mat; -error: - isl_mat_free(mat); - return NULL; -} - -__isl_give isl_mat *isl_mat_sub_alloc6(isl_ctx *ctx, isl_int **row, - unsigned first_row, unsigned n_row, unsigned first_col, unsigned n_col) -{ - int i; - struct isl_mat *mat; - - mat = isl_alloc_type(ctx, struct isl_mat); - if (!mat) - return NULL; - mat->row = isl_alloc_array(ctx, isl_int *, n_row); - if (!mat->row) - goto error; - for (i = 0; i < n_row; ++i) - mat->row[i] = row[first_row+i] + first_col; - mat->ctx = ctx; - isl_ctx_ref(ctx); - mat->ref = 1; - mat->n_row = n_row; - mat->n_col = n_col; - mat->block = isl_blk_empty(); - mat->flags = ISL_MAT_BORROWED; - return mat; -error: - free(mat); - return NULL; -} - -__isl_give isl_mat *isl_mat_sub_alloc(__isl_keep isl_mat *mat, - unsigned first_row, unsigned n_row, unsigned first_col, unsigned n_col) -{ - if (!mat) - return NULL; - return isl_mat_sub_alloc6(mat->ctx, mat->row, first_row, n_row, - first_col, n_col); -} - -void isl_mat_sub_copy(struct isl_ctx *ctx, isl_int **dst, isl_int **src, - unsigned n_row, unsigned dst_col, unsigned src_col, unsigned n_col) -{ - int i; - - for (i = 0; i < n_row; ++i) - isl_seq_cpy(dst[i]+dst_col, src[i]+src_col, n_col); -} - -void isl_mat_sub_neg(struct isl_ctx *ctx, isl_int **dst, isl_int **src, - unsigned n_row, unsigned dst_col, unsigned src_col, unsigned n_col) -{ - int i; - - for (i = 0; i < n_row; ++i) - isl_seq_neg(dst[i]+dst_col, src[i]+src_col, n_col); -} - -struct isl_mat *isl_mat_copy(struct isl_mat *mat) -{ - if (!mat) - return NULL; - - mat->ref++; - return mat; -} - -struct isl_mat *isl_mat_dup(struct isl_mat *mat) -{ - int i; - struct isl_mat *mat2; - - if (!mat) - return NULL; - mat2 = isl_mat_alloc(mat->ctx, mat->n_row, mat->n_col); - if (!mat2) - return NULL; - for (i = 0; i < mat->n_row; ++i) - isl_seq_cpy(mat2->row[i], mat->row[i], mat->n_col); - return mat2; -} - -struct isl_mat *isl_mat_cow(struct isl_mat *mat) -{ - struct isl_mat *mat2; - if (!mat) - return NULL; - - if (mat->ref == 1 && !ISL_F_ISSET(mat, ISL_MAT_BORROWED)) - return mat; - - mat2 = isl_mat_dup(mat); - isl_mat_free(mat); - return mat2; -} - -void isl_mat_free(struct isl_mat *mat) -{ - if (!mat) - return; - - if (--mat->ref > 0) - return; - - if (!ISL_F_ISSET(mat, ISL_MAT_BORROWED)) - isl_blk_free(mat->ctx, mat->block); - isl_ctx_deref(mat->ctx); - free(mat->row); - free(mat); -} - -int isl_mat_rows(__isl_keep isl_mat *mat) -{ - return mat ? mat->n_row : -1; -} - -int isl_mat_cols(__isl_keep isl_mat *mat) -{ - return mat ? mat->n_col : -1; -} - -int isl_mat_get_element(__isl_keep isl_mat *mat, int row, int col, isl_int *v) -{ - if (!mat) - return -1; - if (row < 0 || row >= mat->n_row) - isl_die(mat->ctx, isl_error_invalid, "row out of range", - return -1); - if (col < 0 || col >= mat->n_col) - isl_die(mat->ctx, isl_error_invalid, "column out of range", - return -1); - isl_int_set(*v, mat->row[row][col]); - return 0; -} - -__isl_give isl_mat *isl_mat_set_element(__isl_take isl_mat *mat, - int row, int col, isl_int v) -{ - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - if (row < 0 || row >= mat->n_row) - isl_die(mat->ctx, isl_error_invalid, "row out of range", - goto error); - if (col < 0 || col >= mat->n_col) - isl_die(mat->ctx, isl_error_invalid, "column out of range", - goto error); - isl_int_set(mat->row[row][col], v); - return mat; -error: - isl_mat_free(mat); - return NULL; -} - -__isl_give isl_mat *isl_mat_set_element_si(__isl_take isl_mat *mat, - int row, int col, int v) -{ - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - if (row < 0 || row >= mat->n_row) - isl_die(mat->ctx, isl_error_invalid, "row out of range", - goto error); - if (col < 0 || col >= mat->n_col) - isl_die(mat->ctx, isl_error_invalid, "column out of range", - goto error); - isl_int_set_si(mat->row[row][col], v); - return mat; -error: - isl_mat_free(mat); - return NULL; -} - -__isl_give isl_mat *isl_mat_diag(isl_ctx *ctx, unsigned n_row, isl_int d) -{ - int i; - struct isl_mat *mat; - - mat = isl_mat_alloc(ctx, n_row, n_row); - if (!mat) - return NULL; - for (i = 0; i < n_row; ++i) { - isl_seq_clr(mat->row[i], i); - isl_int_set(mat->row[i][i], d); - isl_seq_clr(mat->row[i]+i+1, n_row-(i+1)); - } - - return mat; -} - -__isl_give isl_mat *isl_mat_identity(isl_ctx *ctx, unsigned n_row) -{ - if (!ctx) - return NULL; - return isl_mat_diag(ctx, n_row, ctx->one); -} - -struct isl_vec *isl_mat_vec_product(struct isl_mat *mat, struct isl_vec *vec) -{ - int i; - struct isl_vec *prod; - - if (!mat || !vec) - goto error; - - isl_assert(mat->ctx, mat->n_col == vec->size, goto error); - - prod = isl_vec_alloc(mat->ctx, mat->n_row); - if (!prod) - goto error; - - for (i = 0; i < prod->size; ++i) - isl_seq_inner_product(mat->row[i], vec->el, vec->size, - &prod->block.data[i]); - isl_mat_free(mat); - isl_vec_free(vec); - return prod; -error: - isl_mat_free(mat); - isl_vec_free(vec); - return NULL; -} - -__isl_give isl_vec *isl_mat_vec_inverse_product(__isl_take isl_mat *mat, - __isl_take isl_vec *vec) -{ - struct isl_mat *vec_mat; - int i; - - if (!mat || !vec) - goto error; - vec_mat = isl_mat_alloc(vec->ctx, vec->size, 1); - if (!vec_mat) - goto error; - for (i = 0; i < vec->size; ++i) - isl_int_set(vec_mat->row[i][0], vec->el[i]); - vec_mat = isl_mat_inverse_product(mat, vec_mat); - isl_vec_free(vec); - if (!vec_mat) - return NULL; - vec = isl_vec_alloc(vec_mat->ctx, vec_mat->n_row); - if (vec) - for (i = 0; i < vec->size; ++i) - isl_int_set(vec->el[i], vec_mat->row[i][0]); - isl_mat_free(vec_mat); - return vec; -error: - isl_mat_free(mat); - isl_vec_free(vec); - return NULL; -} - -struct isl_vec *isl_vec_mat_product(struct isl_vec *vec, struct isl_mat *mat) -{ - int i, j; - struct isl_vec *prod; - - if (!mat || !vec) - goto error; - - isl_assert(mat->ctx, mat->n_row == vec->size, goto error); - - prod = isl_vec_alloc(mat->ctx, mat->n_col); - if (!prod) - goto error; - - for (i = 0; i < prod->size; ++i) { - isl_int_set_si(prod->el[i], 0); - for (j = 0; j < vec->size; ++j) - isl_int_addmul(prod->el[i], vec->el[j], mat->row[j][i]); - } - isl_mat_free(mat); - isl_vec_free(vec); - return prod; -error: - isl_mat_free(mat); - isl_vec_free(vec); - return NULL; -} - -struct isl_mat *isl_mat_aff_direct_sum(struct isl_mat *left, - struct isl_mat *right) -{ - int i; - struct isl_mat *sum; - - if (!left || !right) - goto error; - - isl_assert(left->ctx, left->n_row == right->n_row, goto error); - isl_assert(left->ctx, left->n_row >= 1, goto error); - isl_assert(left->ctx, left->n_col >= 1, goto error); - isl_assert(left->ctx, right->n_col >= 1, goto error); - isl_assert(left->ctx, - isl_seq_first_non_zero(left->row[0]+1, left->n_col-1) == -1, - goto error); - isl_assert(left->ctx, - isl_seq_first_non_zero(right->row[0]+1, right->n_col-1) == -1, - goto error); - - sum = isl_mat_alloc(left->ctx, left->n_row, left->n_col + right->n_col - 1); - if (!sum) - goto error; - isl_int_lcm(sum->row[0][0], left->row[0][0], right->row[0][0]); - isl_int_divexact(left->row[0][0], sum->row[0][0], left->row[0][0]); - isl_int_divexact(right->row[0][0], sum->row[0][0], right->row[0][0]); - - isl_seq_clr(sum->row[0]+1, sum->n_col-1); - for (i = 1; i < sum->n_row; ++i) { - isl_int_mul(sum->row[i][0], left->row[0][0], left->row[i][0]); - isl_int_addmul(sum->row[i][0], - right->row[0][0], right->row[i][0]); - isl_seq_scale(sum->row[i]+1, left->row[i]+1, left->row[0][0], - left->n_col-1); - isl_seq_scale(sum->row[i]+left->n_col, - right->row[i]+1, right->row[0][0], - right->n_col-1); - } - - isl_int_divexact(left->row[0][0], sum->row[0][0], left->row[0][0]); - isl_int_divexact(right->row[0][0], sum->row[0][0], right->row[0][0]); - isl_mat_free(left); - isl_mat_free(right); - return sum; -error: - isl_mat_free(left); - isl_mat_free(right); - return NULL; -} - -static void exchange(struct isl_mat *M, struct isl_mat **U, - struct isl_mat **Q, unsigned row, unsigned i, unsigned j) -{ - int r; - for (r = row; r < M->n_row; ++r) - isl_int_swap(M->row[r][i], M->row[r][j]); - if (U) { - for (r = 0; r < (*U)->n_row; ++r) - isl_int_swap((*U)->row[r][i], (*U)->row[r][j]); - } - if (Q) - isl_mat_swap_rows(*Q, i, j); -} - -static void subtract(struct isl_mat *M, struct isl_mat **U, - struct isl_mat **Q, unsigned row, unsigned i, unsigned j, isl_int m) -{ - int r; - for (r = row; r < M->n_row; ++r) - isl_int_submul(M->row[r][j], m, M->row[r][i]); - if (U) { - for (r = 0; r < (*U)->n_row; ++r) - isl_int_submul((*U)->row[r][j], m, (*U)->row[r][i]); - } - if (Q) { - for (r = 0; r < (*Q)->n_col; ++r) - isl_int_addmul((*Q)->row[i][r], m, (*Q)->row[j][r]); - } -} - -static void oppose(struct isl_mat *M, struct isl_mat **U, - struct isl_mat **Q, unsigned row, unsigned col) -{ - int r; - for (r = row; r < M->n_row; ++r) - isl_int_neg(M->row[r][col], M->row[r][col]); - if (U) { - for (r = 0; r < (*U)->n_row; ++r) - isl_int_neg((*U)->row[r][col], (*U)->row[r][col]); - } - if (Q) - isl_seq_neg((*Q)->row[col], (*Q)->row[col], (*Q)->n_col); -} - -/* Given matrix M, compute - * - * M U = H - * M = H Q - * - * with U and Q unimodular matrices and H a matrix in column echelon form - * such that on each echelon row the entries in the non-echelon column - * are non-negative (if neg == 0) or non-positive (if neg == 1) - * and stricly smaller (in absolute value) than the entries in the echelon - * column. - * If U or Q are NULL, then these matrices are not computed. - */ -struct isl_mat *isl_mat_left_hermite(struct isl_mat *M, int neg, - struct isl_mat **U, struct isl_mat **Q) -{ - isl_int c; - int row, col; - - if (U) - *U = NULL; - if (Q) - *Q = NULL; - if (!M) - goto error; - M = isl_mat_cow(M); - if (!M) - goto error; - if (U) { - *U = isl_mat_identity(M->ctx, M->n_col); - if (!*U) - goto error; - } - if (Q) { - *Q = isl_mat_identity(M->ctx, M->n_col); - if (!*Q) - goto error; - } - - col = 0; - isl_int_init(c); - for (row = 0; row < M->n_row; ++row) { - int first, i, off; - first = isl_seq_abs_min_non_zero(M->row[row]+col, M->n_col-col); - if (first == -1) - continue; - first += col; - if (first != col) - exchange(M, U, Q, row, first, col); - if (isl_int_is_neg(M->row[row][col])) - oppose(M, U, Q, row, col); - first = col+1; - while ((off = isl_seq_first_non_zero(M->row[row]+first, - M->n_col-first)) != -1) { - first += off; - isl_int_fdiv_q(c, M->row[row][first], M->row[row][col]); - subtract(M, U, Q, row, col, first, c); - if (!isl_int_is_zero(M->row[row][first])) - exchange(M, U, Q, row, first, col); - else - ++first; - } - for (i = 0; i < col; ++i) { - if (isl_int_is_zero(M->row[row][i])) - continue; - if (neg) - isl_int_cdiv_q(c, M->row[row][i], M->row[row][col]); - else - isl_int_fdiv_q(c, M->row[row][i], M->row[row][col]); - if (isl_int_is_zero(c)) - continue; - subtract(M, U, Q, row, col, i, c); - } - ++col; - } - isl_int_clear(c); - - return M; -error: - if (Q) { - isl_mat_free(*Q); - *Q = NULL; - } - if (U) { - isl_mat_free(*U); - *U = NULL; - } - isl_mat_free(M); - return NULL; -} - -struct isl_mat *isl_mat_right_kernel(struct isl_mat *mat) -{ - int i, rank; - struct isl_mat *U = NULL; - struct isl_mat *K; - - mat = isl_mat_left_hermite(mat, 0, &U, NULL); - if (!mat || !U) - goto error; - - for (i = 0, rank = 0; rank < mat->n_col; ++rank) { - while (i < mat->n_row && isl_int_is_zero(mat->row[i][rank])) - ++i; - if (i >= mat->n_row) - break; - } - K = isl_mat_alloc(U->ctx, U->n_row, U->n_col - rank); - if (!K) - goto error; - isl_mat_sub_copy(K->ctx, K->row, U->row, U->n_row, 0, rank, U->n_col-rank); - isl_mat_free(mat); - isl_mat_free(U); - return K; -error: - isl_mat_free(mat); - isl_mat_free(U); - return NULL; -} - -struct isl_mat *isl_mat_lin_to_aff(struct isl_mat *mat) -{ - int i; - struct isl_mat *mat2; - - if (!mat) - return NULL; - mat2 = isl_mat_alloc(mat->ctx, 1+mat->n_row, 1+mat->n_col); - if (!mat2) - goto error; - isl_int_set_si(mat2->row[0][0], 1); - isl_seq_clr(mat2->row[0]+1, mat->n_col); - for (i = 0; i < mat->n_row; ++i) { - isl_int_set_si(mat2->row[1+i][0], 0); - isl_seq_cpy(mat2->row[1+i]+1, mat->row[i], mat->n_col); - } - isl_mat_free(mat); - return mat2; -error: - isl_mat_free(mat); - return NULL; -} - -/* Given two matrices M1 and M2, return the block matrix - * - * [ M1 0 ] - * [ 0 M2 ] - */ -__isl_give isl_mat *isl_mat_diagonal(__isl_take isl_mat *mat1, - __isl_take isl_mat *mat2) -{ - int i; - isl_mat *mat; - - if (!mat1 || !mat2) - goto error; - - mat = isl_mat_alloc(mat1->ctx, mat1->n_row + mat2->n_row, - mat1->n_col + mat2->n_col); - if (!mat) - goto error; - for (i = 0; i < mat1->n_row; ++i) { - isl_seq_cpy(mat->row[i], mat1->row[i], mat1->n_col); - isl_seq_clr(mat->row[i] + mat1->n_col, mat2->n_col); - } - for (i = 0; i < mat2->n_row; ++i) { - isl_seq_clr(mat->row[mat1->n_row + i], mat1->n_col); - isl_seq_cpy(mat->row[mat1->n_row + i] + mat1->n_col, - mat2->row[i], mat2->n_col); - } - isl_mat_free(mat1); - isl_mat_free(mat2); - return mat; -error: - isl_mat_free(mat1); - isl_mat_free(mat2); - return NULL; -} - -static int row_first_non_zero(isl_int **row, unsigned n_row, unsigned col) -{ - int i; - - for (i = 0; i < n_row; ++i) - if (!isl_int_is_zero(row[i][col])) - return i; - return -1; -} - -static int row_abs_min_non_zero(isl_int **row, unsigned n_row, unsigned col) -{ - int i, min = row_first_non_zero(row, n_row, col); - if (min < 0) - return -1; - for (i = min + 1; i < n_row; ++i) { - if (isl_int_is_zero(row[i][col])) - continue; - if (isl_int_abs_lt(row[i][col], row[min][col])) - min = i; - } - return min; -} - -static void inv_exchange(struct isl_mat *left, struct isl_mat *right, - unsigned i, unsigned j) -{ - left = isl_mat_swap_rows(left, i, j); - right = isl_mat_swap_rows(right, i, j); -} - -static void inv_oppose( - struct isl_mat *left, struct isl_mat *right, unsigned row) -{ - isl_seq_neg(left->row[row]+row, left->row[row]+row, left->n_col-row); - isl_seq_neg(right->row[row], right->row[row], right->n_col); -} - -static void inv_subtract(struct isl_mat *left, struct isl_mat *right, - unsigned row, unsigned i, isl_int m) -{ - isl_int_neg(m, m); - isl_seq_combine(left->row[i]+row, - left->ctx->one, left->row[i]+row, - m, left->row[row]+row, - left->n_col-row); - isl_seq_combine(right->row[i], right->ctx->one, right->row[i], - m, right->row[row], right->n_col); -} - -/* Compute inv(left)*right - */ -struct isl_mat *isl_mat_inverse_product(struct isl_mat *left, - struct isl_mat *right) -{ - int row; - isl_int a, b; - - if (!left || !right) - goto error; - - isl_assert(left->ctx, left->n_row == left->n_col, goto error); - isl_assert(left->ctx, left->n_row == right->n_row, goto error); - - if (left->n_row == 0) { - isl_mat_free(left); - return right; - } - - left = isl_mat_cow(left); - right = isl_mat_cow(right); - if (!left || !right) - goto error; - - isl_int_init(a); - isl_int_init(b); - for (row = 0; row < left->n_row; ++row) { - int pivot, first, i, off; - pivot = row_abs_min_non_zero(left->row+row, left->n_row-row, row); - if (pivot < 0) { - isl_int_clear(a); - isl_int_clear(b); - isl_assert(left->ctx, pivot >= 0, goto error); - } - pivot += row; - if (pivot != row) - inv_exchange(left, right, pivot, row); - if (isl_int_is_neg(left->row[row][row])) - inv_oppose(left, right, row); - first = row+1; - while ((off = row_first_non_zero(left->row+first, - left->n_row-first, row)) != -1) { - first += off; - isl_int_fdiv_q(a, left->row[first][row], - left->row[row][row]); - inv_subtract(left, right, row, first, a); - if (!isl_int_is_zero(left->row[first][row])) - inv_exchange(left, right, row, first); - else - ++first; - } - for (i = 0; i < row; ++i) { - if (isl_int_is_zero(left->row[i][row])) - continue; - isl_int_gcd(a, left->row[row][row], left->row[i][row]); - isl_int_divexact(b, left->row[i][row], a); - isl_int_divexact(a, left->row[row][row], a); - isl_int_neg(b, b); - isl_seq_combine(left->row[i] + i, - a, left->row[i] + i, - b, left->row[row] + i, - left->n_col - i); - isl_seq_combine(right->row[i], a, right->row[i], - b, right->row[row], right->n_col); - } - } - isl_int_clear(b); - - isl_int_set(a, left->row[0][0]); - for (row = 1; row < left->n_row; ++row) - isl_int_lcm(a, a, left->row[row][row]); - if (isl_int_is_zero(a)){ - isl_int_clear(a); - isl_assert(left->ctx, 0, goto error); - } - for (row = 0; row < left->n_row; ++row) { - isl_int_divexact(left->row[row][row], a, left->row[row][row]); - if (isl_int_is_one(left->row[row][row])) - continue; - isl_seq_scale(right->row[row], right->row[row], - left->row[row][row], right->n_col); - } - isl_int_clear(a); - - isl_mat_free(left); - return right; -error: - isl_mat_free(left); - isl_mat_free(right); - return NULL; -} - -void isl_mat_col_scale(struct isl_mat *mat, unsigned col, isl_int m) -{ - int i; - - for (i = 0; i < mat->n_row; ++i) - isl_int_mul(mat->row[i][col], mat->row[i][col], m); -} - -void isl_mat_col_combine(struct isl_mat *mat, unsigned dst, - isl_int m1, unsigned src1, isl_int m2, unsigned src2) -{ - int i; - isl_int tmp; - - isl_int_init(tmp); - for (i = 0; i < mat->n_row; ++i) { - isl_int_mul(tmp, m1, mat->row[i][src1]); - isl_int_addmul(tmp, m2, mat->row[i][src2]); - isl_int_set(mat->row[i][dst], tmp); - } - isl_int_clear(tmp); -} - -struct isl_mat *isl_mat_right_inverse(struct isl_mat *mat) -{ - struct isl_mat *inv; - int row; - isl_int a, b; - - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - - inv = isl_mat_identity(mat->ctx, mat->n_col); - inv = isl_mat_cow(inv); - if (!inv) - goto error; - - isl_int_init(a); - isl_int_init(b); - for (row = 0; row < mat->n_row; ++row) { - int pivot, first, i, off; - pivot = isl_seq_abs_min_non_zero(mat->row[row]+row, mat->n_col-row); - if (pivot < 0) { - isl_int_clear(a); - isl_int_clear(b); - isl_assert(mat->ctx, pivot >= 0, goto error); - } - pivot += row; - if (pivot != row) - exchange(mat, &inv, NULL, row, pivot, row); - if (isl_int_is_neg(mat->row[row][row])) - oppose(mat, &inv, NULL, row, row); - first = row+1; - while ((off = isl_seq_first_non_zero(mat->row[row]+first, - mat->n_col-first)) != -1) { - first += off; - isl_int_fdiv_q(a, mat->row[row][first], - mat->row[row][row]); - subtract(mat, &inv, NULL, row, row, first, a); - if (!isl_int_is_zero(mat->row[row][first])) - exchange(mat, &inv, NULL, row, row, first); - else - ++first; - } - for (i = 0; i < row; ++i) { - if (isl_int_is_zero(mat->row[row][i])) - continue; - isl_int_gcd(a, mat->row[row][row], mat->row[row][i]); - isl_int_divexact(b, mat->row[row][i], a); - isl_int_divexact(a, mat->row[row][row], a); - isl_int_neg(a, a); - isl_mat_col_combine(mat, i, a, i, b, row); - isl_mat_col_combine(inv, i, a, i, b, row); - } - } - isl_int_clear(b); - - isl_int_set(a, mat->row[0][0]); - for (row = 1; row < mat->n_row; ++row) - isl_int_lcm(a, a, mat->row[row][row]); - if (isl_int_is_zero(a)){ - isl_int_clear(a); - goto error; - } - for (row = 0; row < mat->n_row; ++row) { - isl_int_divexact(mat->row[row][row], a, mat->row[row][row]); - if (isl_int_is_one(mat->row[row][row])) - continue; - isl_mat_col_scale(inv, row, mat->row[row][row]); - } - isl_int_clear(a); - - isl_mat_free(mat); - - return inv; -error: - isl_mat_free(mat); - isl_mat_free(inv); - return NULL; -} - -struct isl_mat *isl_mat_transpose(struct isl_mat *mat) -{ - struct isl_mat *transpose = NULL; - int i, j; - - if (mat->n_col == mat->n_row) { - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - for (i = 0; i < mat->n_row; ++i) - for (j = i + 1; j < mat->n_col; ++j) - isl_int_swap(mat->row[i][j], mat->row[j][i]); - return mat; - } - transpose = isl_mat_alloc(mat->ctx, mat->n_col, mat->n_row); - if (!transpose) - goto error; - for (i = 0; i < mat->n_row; ++i) - for (j = 0; j < mat->n_col; ++j) - isl_int_set(transpose->row[j][i], mat->row[i][j]); - isl_mat_free(mat); - return transpose; -error: - isl_mat_free(mat); - return NULL; -} - -struct isl_mat *isl_mat_swap_cols(struct isl_mat *mat, unsigned i, unsigned j) -{ - int r; - - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - isl_assert(mat->ctx, i < mat->n_col, goto error); - isl_assert(mat->ctx, j < mat->n_col, goto error); - - for (r = 0; r < mat->n_row; ++r) - isl_int_swap(mat->row[r][i], mat->row[r][j]); - return mat; -error: - isl_mat_free(mat); - return NULL; -} - -struct isl_mat *isl_mat_swap_rows(struct isl_mat *mat, unsigned i, unsigned j) -{ - isl_int *t; - - if (!mat) - return NULL; - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - t = mat->row[i]; - mat->row[i] = mat->row[j]; - mat->row[j] = t; - return mat; -} - -struct isl_mat *isl_mat_product(struct isl_mat *left, struct isl_mat *right) -{ - int i, j, k; - struct isl_mat *prod; - - if (!left || !right) - goto error; - isl_assert(left->ctx, left->n_col == right->n_row, goto error); - prod = isl_mat_alloc(left->ctx, left->n_row, right->n_col); - if (!prod) - goto error; - if (left->n_col == 0) { - for (i = 0; i < prod->n_row; ++i) - isl_seq_clr(prod->row[i], prod->n_col); - isl_mat_free(left); - isl_mat_free(right); - return prod; - } - for (i = 0; i < prod->n_row; ++i) { - for (j = 0; j < prod->n_col; ++j) { - isl_int_mul(prod->row[i][j], - left->row[i][0], right->row[0][j]); - for (k = 1; k < left->n_col; ++k) - isl_int_addmul(prod->row[i][j], - left->row[i][k], right->row[k][j]); - } - } - isl_mat_free(left); - isl_mat_free(right); - return prod; -error: - isl_mat_free(left); - isl_mat_free(right); - return NULL; -} - -/* Replace the variables x in the rows q by x' given by x = M x', - * with M the matrix mat. - * - * If the number of new variables is greater than the original - * number of variables, then the rows q have already been - * preextended. If the new number is smaller, then the coefficients - * of the divs, which are not changed, need to be shifted down. - * The row q may be the equalities, the inequalities or the - * div expressions. In the latter case, has_div is true and - * we need to take into account the extra denominator column. - */ -static int preimage(struct isl_ctx *ctx, isl_int **q, unsigned n, - unsigned n_div, int has_div, struct isl_mat *mat) -{ - int i; - struct isl_mat *t; - int e; - - if (mat->n_col >= mat->n_row) - e = 0; - else - e = mat->n_row - mat->n_col; - if (has_div) - for (i = 0; i < n; ++i) - isl_int_mul(q[i][0], q[i][0], mat->row[0][0]); - t = isl_mat_sub_alloc6(mat->ctx, q, 0, n, has_div, mat->n_row); - t = isl_mat_product(t, mat); - if (!t) - return -1; - for (i = 0; i < n; ++i) { - isl_seq_swp_or_cpy(q[i] + has_div, t->row[i], t->n_col); - isl_seq_cpy(q[i] + has_div + t->n_col, - q[i] + has_div + t->n_col + e, n_div); - isl_seq_clr(q[i] + has_div + t->n_col + n_div, e); - } - isl_mat_free(t); - return 0; -} - -/* Replace the variables x in bset by x' given by x = M x', with - * M the matrix mat. - * - * If there are fewer variables x' then there are x, then we perform - * the transformation in place, which that, in principle, - * this frees up some extra variables as the number - * of columns remains constant, but we would have to extend - * the div array too as the number of rows in this array is assumed - * to be equal to extra. - */ -struct isl_basic_set *isl_basic_set_preimage(struct isl_basic_set *bset, - struct isl_mat *mat) -{ - struct isl_ctx *ctx; - - if (!bset || !mat) - goto error; - - ctx = bset->ctx; - bset = isl_basic_set_cow(bset); - if (!bset) - goto error; - - isl_assert(ctx, bset->dim->nparam == 0, goto error); - isl_assert(ctx, 1+bset->dim->n_out == mat->n_row, goto error); - isl_assert(ctx, mat->n_col > 0, goto error); - - if (mat->n_col > mat->n_row) { - bset = isl_basic_set_extend(bset, 0, mat->n_col-1, 0, 0, 0); - if (!bset) - goto error; - } else if (mat->n_col < mat->n_row) { - bset->dim = isl_space_cow(bset->dim); - if (!bset->dim) - goto error; - bset->dim->n_out -= mat->n_row - mat->n_col; - } - - if (preimage(ctx, bset->eq, bset->n_eq, bset->n_div, 0, - isl_mat_copy(mat)) < 0) - goto error; - - if (preimage(ctx, bset->ineq, bset->n_ineq, bset->n_div, 0, - isl_mat_copy(mat)) < 0) - goto error; - - if (preimage(ctx, bset->div, bset->n_div, bset->n_div, 1, mat) < 0) - goto error2; - - ISL_F_CLR(bset, ISL_BASIC_SET_NO_IMPLICIT); - ISL_F_CLR(bset, ISL_BASIC_SET_NO_REDUNDANT); - ISL_F_CLR(bset, ISL_BASIC_SET_NORMALIZED); - ISL_F_CLR(bset, ISL_BASIC_SET_NORMALIZED_DIVS); - ISL_F_CLR(bset, ISL_BASIC_SET_ALL_EQUALITIES); - - bset = isl_basic_set_simplify(bset); - bset = isl_basic_set_finalize(bset); - - return bset; -error: - isl_mat_free(mat); -error2: - isl_basic_set_free(bset); - return NULL; -} - -struct isl_set *isl_set_preimage(struct isl_set *set, struct isl_mat *mat) -{ - struct isl_ctx *ctx; - int i; - - set = isl_set_cow(set); - if (!set) - return NULL; - - ctx = set->ctx; - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_basic_set_preimage(set->p[i], - isl_mat_copy(mat)); - if (!set->p[i]) - goto error; - } - if (mat->n_col != mat->n_row) { - set->dim = isl_space_cow(set->dim); - if (!set->dim) - goto error; - set->dim->n_out += mat->n_col; - set->dim->n_out -= mat->n_row; - } - isl_mat_free(mat); - ISL_F_CLR(set, ISL_SET_NORMALIZED); - return set; -error: - isl_set_free(set); - isl_mat_free(mat); - return NULL; -} - -/* Replace the variables x starting at pos in the rows q - * by x' with x = M x' with M the matrix mat. - * That is, replace the corresponding coefficients c by c M. - */ -static int transform(isl_ctx *ctx, isl_int **q, unsigned n, - unsigned pos, __isl_take isl_mat *mat) -{ - int i; - isl_mat *t; - - t = isl_mat_sub_alloc6(ctx, q, 0, n, pos, mat->n_row); - t = isl_mat_product(t, mat); - if (!t) - return -1; - for (i = 0; i < n; ++i) - isl_seq_swp_or_cpy(q[i] + pos, t->row[i], t->n_col); - isl_mat_free(t); - return 0; -} - -/* Replace the variables x of type "type" starting at "first" in "bset" - * by x' with x = M x' with M the matrix trans. - * That is, replace the corresponding coefficients c by c M. - * - * The transformation matrix should be a square matrix. - */ -__isl_give isl_basic_set *isl_basic_set_transform_dims( - __isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned first, - __isl_take isl_mat *trans) -{ - isl_ctx *ctx; - unsigned pos; - - bset = isl_basic_set_cow(bset); - if (!bset || !trans) - goto error; - - ctx = isl_basic_set_get_ctx(bset); - if (trans->n_row != trans->n_col) - isl_die(trans->ctx, isl_error_invalid, - "expecting square transformation matrix", goto error); - if (first + trans->n_row > isl_basic_set_dim(bset, type)) - isl_die(trans->ctx, isl_error_invalid, - "oversized transformation matrix", goto error); - - pos = isl_basic_set_offset(bset, type) + first; - - if (transform(ctx, bset->eq, bset->n_eq, pos, isl_mat_copy(trans)) < 0) - goto error; - if (transform(ctx, bset->ineq, bset->n_ineq, pos, - isl_mat_copy(trans)) < 0) - goto error; - if (transform(ctx, bset->div, bset->n_div, 1 + pos, - isl_mat_copy(trans)) < 0) - goto error; - - ISL_F_CLR(bset, ISL_BASIC_SET_NORMALIZED); - ISL_F_CLR(bset, ISL_BASIC_SET_NORMALIZED_DIVS); - - isl_mat_free(trans); - return bset; -error: - isl_mat_free(trans); - isl_basic_set_free(bset); - return NULL; -} - -void isl_mat_print_internal(__isl_keep isl_mat *mat, FILE *out, int indent) -{ - int i, j; - - if (!mat) { - fprintf(out, "%*snull mat\n", indent, ""); - return; - } - - if (mat->n_row == 0) - fprintf(out, "%*s[]\n", indent, ""); - - for (i = 0; i < mat->n_row; ++i) { - if (!i) - fprintf(out, "%*s[[", indent, ""); - else - fprintf(out, "%*s[", indent+1, ""); - for (j = 0; j < mat->n_col; ++j) { - if (j) - fprintf(out, ","); - isl_int_print(out, mat->row[i][j], 0); - } - if (i == mat->n_row-1) - fprintf(out, "]]\n"); - else - fprintf(out, "]\n"); - } -} - -void isl_mat_dump(__isl_keep isl_mat *mat) -{ - isl_mat_print_internal(mat, stderr, 0); -} - -struct isl_mat *isl_mat_drop_cols(struct isl_mat *mat, unsigned col, unsigned n) -{ - int r; - - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - - if (col != mat->n_col-n) { - for (r = 0; r < mat->n_row; ++r) - isl_seq_cpy(mat->row[r]+col, mat->row[r]+col+n, - mat->n_col - col - n); - } - mat->n_col -= n; - return mat; -} - -struct isl_mat *isl_mat_drop_rows(struct isl_mat *mat, unsigned row, unsigned n) -{ - int r; - - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - - for (r = row; r+n < mat->n_row; ++r) - mat->row[r] = mat->row[r+n]; - - mat->n_row -= n; - return mat; -} - -__isl_give isl_mat *isl_mat_insert_cols(__isl_take isl_mat *mat, - unsigned col, unsigned n) -{ - isl_mat *ext; - - if (!mat) - return NULL; - if (n == 0) - return mat; - - ext = isl_mat_alloc(mat->ctx, mat->n_row, mat->n_col + n); - if (!ext) - goto error; - - isl_mat_sub_copy(mat->ctx, ext->row, mat->row, mat->n_row, 0, 0, col); - isl_mat_sub_copy(mat->ctx, ext->row, mat->row, mat->n_row, - col + n, col, mat->n_col - col); - - isl_mat_free(mat); - return ext; -error: - isl_mat_free(mat); - return NULL; -} - -__isl_give isl_mat *isl_mat_insert_zero_cols(__isl_take isl_mat *mat, - unsigned first, unsigned n) -{ - int i; - - if (!mat) - return NULL; - mat = isl_mat_insert_cols(mat, first, n); - if (!mat) - return NULL; - - for (i = 0; i < mat->n_row; ++i) - isl_seq_clr(mat->row[i] + first, n); - - return mat; -} - -__isl_give isl_mat *isl_mat_add_zero_cols(__isl_take isl_mat *mat, unsigned n) -{ - if (!mat) - return NULL; - - return isl_mat_insert_zero_cols(mat, mat->n_col, n); -} - -__isl_give isl_mat *isl_mat_insert_rows(__isl_take isl_mat *mat, - unsigned row, unsigned n) -{ - isl_mat *ext; - - if (!mat) - return NULL; - if (n == 0) - return mat; - - ext = isl_mat_alloc(mat->ctx, mat->n_row + n, mat->n_col); - if (!ext) - goto error; - - isl_mat_sub_copy(mat->ctx, ext->row, mat->row, row, 0, 0, mat->n_col); - isl_mat_sub_copy(mat->ctx, ext->row + row + n, mat->row + row, - mat->n_row - row, 0, 0, mat->n_col); - - isl_mat_free(mat); - return ext; -error: - isl_mat_free(mat); - return NULL; -} - -__isl_give isl_mat *isl_mat_add_rows(__isl_take isl_mat *mat, unsigned n) -{ - if (!mat) - return NULL; - - return isl_mat_insert_rows(mat, mat->n_row, n); -} - -__isl_give isl_mat *isl_mat_insert_zero_rows(__isl_take isl_mat *mat, - unsigned row, unsigned n) -{ - int i; - - mat = isl_mat_insert_rows(mat, row, n); - if (!mat) - return NULL; - - for (i = 0; i < n; ++i) - isl_seq_clr(mat->row[row + i], mat->n_col); - - return mat; -} - -__isl_give isl_mat *isl_mat_add_zero_rows(__isl_take isl_mat *mat, unsigned n) -{ - if (!mat) - return NULL; - - return isl_mat_insert_zero_rows(mat, mat->n_row, n); -} - -void isl_mat_col_submul(struct isl_mat *mat, - int dst_col, isl_int f, int src_col) -{ - int i; - - for (i = 0; i < mat->n_row; ++i) - isl_int_submul(mat->row[i][dst_col], f, mat->row[i][src_col]); -} - -void isl_mat_col_add(__isl_keep isl_mat *mat, int dst_col, int src_col) -{ - int i; - - if (!mat) - return; - - for (i = 0; i < mat->n_row; ++i) - isl_int_add(mat->row[i][dst_col], - mat->row[i][dst_col], mat->row[i][src_col]); -} - -void isl_mat_col_mul(struct isl_mat *mat, int dst_col, isl_int f, int src_col) -{ - int i; - - for (i = 0; i < mat->n_row; ++i) - isl_int_mul(mat->row[i][dst_col], f, mat->row[i][src_col]); -} - -struct isl_mat *isl_mat_unimodular_complete(struct isl_mat *M, int row) -{ - int r; - struct isl_mat *H = NULL, *Q = NULL; - - if (!M) - return NULL; - - isl_assert(M->ctx, M->n_row == M->n_col, goto error); - M->n_row = row; - H = isl_mat_left_hermite(isl_mat_copy(M), 0, NULL, &Q); - M->n_row = M->n_col; - if (!H) - goto error; - for (r = 0; r < row; ++r) - isl_assert(M->ctx, isl_int_is_one(H->row[r][r]), goto error); - for (r = row; r < M->n_row; ++r) - isl_seq_cpy(M->row[r], Q->row[r], M->n_col); - isl_mat_free(H); - isl_mat_free(Q); - return M; -error: - isl_mat_free(H); - isl_mat_free(Q); - isl_mat_free(M); - return NULL; -} - -__isl_give isl_mat *isl_mat_concat(__isl_take isl_mat *top, - __isl_take isl_mat *bot) -{ - struct isl_mat *mat; - - if (!top || !bot) - goto error; - - isl_assert(top->ctx, top->n_col == bot->n_col, goto error); - if (top->n_row == 0) { - isl_mat_free(top); - return bot; - } - if (bot->n_row == 0) { - isl_mat_free(bot); - return top; - } - - mat = isl_mat_alloc(top->ctx, top->n_row + bot->n_row, top->n_col); - if (!mat) - goto error; - isl_mat_sub_copy(mat->ctx, mat->row, top->row, top->n_row, - 0, 0, mat->n_col); - isl_mat_sub_copy(mat->ctx, mat->row + top->n_row, bot->row, bot->n_row, - 0, 0, mat->n_col); - isl_mat_free(top); - isl_mat_free(bot); - return mat; -error: - isl_mat_free(top); - isl_mat_free(bot); - return NULL; -} - -int isl_mat_is_equal(__isl_keep isl_mat *mat1, __isl_keep isl_mat *mat2) -{ - int i; - - if (!mat1 || !mat2) - return -1; - - if (mat1->n_row != mat2->n_row) - return 0; - - if (mat1->n_col != mat2->n_col) - return 0; - - for (i = 0; i < mat1->n_row; ++i) - if (!isl_seq_eq(mat1->row[i], mat2->row[i], mat1->n_col)) - return 0; - - return 1; -} - -__isl_give isl_mat *isl_mat_from_row_vec(__isl_take isl_vec *vec) -{ - struct isl_mat *mat; - - if (!vec) - return NULL; - mat = isl_mat_alloc(vec->ctx, 1, vec->size); - if (!mat) - goto error; - - isl_seq_cpy(mat->row[0], vec->el, vec->size); - - isl_vec_free(vec); - return mat; -error: - isl_vec_free(vec); - return NULL; -} - -__isl_give isl_mat *isl_mat_vec_concat(__isl_take isl_mat *top, - __isl_take isl_vec *bot) -{ - return isl_mat_concat(top, isl_mat_from_row_vec(bot)); -} - -__isl_give isl_mat *isl_mat_move_cols(__isl_take isl_mat *mat, - unsigned dst_col, unsigned src_col, unsigned n) -{ - isl_mat *res; - - if (!mat) - return NULL; - if (n == 0 || dst_col == src_col) - return mat; - - res = isl_mat_alloc(mat->ctx, mat->n_row, mat->n_col); - if (!res) - goto error; - - if (dst_col < src_col) { - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - 0, 0, dst_col); - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - dst_col, src_col, n); - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - dst_col + n, dst_col, src_col - dst_col); - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - src_col + n, src_col + n, - res->n_col - src_col - n); - } else { - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - 0, 0, src_col); - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - src_col, src_col + n, dst_col - src_col); - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - dst_col, src_col, n); - isl_mat_sub_copy(res->ctx, res->row, mat->row, mat->n_row, - dst_col + n, dst_col + n, - res->n_col - dst_col - n); - } - isl_mat_free(mat); - - return res; -error: - isl_mat_free(mat); - return NULL; -} - -void isl_mat_gcd(__isl_keep isl_mat *mat, isl_int *gcd) -{ - int i; - isl_int g; - - isl_int_set_si(*gcd, 0); - if (!mat) - return; - - isl_int_init(g); - for (i = 0; i < mat->n_row; ++i) { - isl_seq_gcd(mat->row[i], mat->n_col, &g); - isl_int_gcd(*gcd, *gcd, g); - } - isl_int_clear(g); -} - -__isl_give isl_mat *isl_mat_scale_down(__isl_take isl_mat *mat, isl_int m) -{ - int i; - - if (isl_int_is_one(m)) - return mat; - - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - - for (i = 0; i < mat->n_row; ++i) - isl_seq_scale_down(mat->row[i], mat->row[i], m, mat->n_col); - - return mat; -} - -__isl_give isl_mat *isl_mat_normalize(__isl_take isl_mat *mat) -{ - isl_int gcd; - - if (!mat) - return NULL; - - isl_int_init(gcd); - isl_mat_gcd(mat, &gcd); - mat = isl_mat_scale_down(mat, gcd); - isl_int_clear(gcd); - - return mat; -} - -__isl_give isl_mat *isl_mat_normalize_row(__isl_take isl_mat *mat, int row) -{ - mat = isl_mat_cow(mat); - if (!mat) - return NULL; - - isl_seq_normalize(mat->ctx, mat->row[row], mat->n_col); - - return mat; -} - -/* Number of initial non-zero columns. - */ -int isl_mat_initial_non_zero_cols(__isl_keep isl_mat *mat) -{ - int i; - - if (!mat) - return -1; - - for (i = 0; i < mat->n_col; ++i) - if (row_first_non_zero(mat->row, mat->n_row, i) < 0) - break; - - return i; -} diff --git a/cloog-0.17.0/isl/isl_mat_private.h b/cloog-0.17.0/isl/isl_mat_private.h deleted file mode 100644 index f27f29a..0000000 --- a/cloog-0.17.0/isl/isl_mat_private.h +++ /dev/null @@ -1,30 +0,0 @@ -#include - -struct isl_mat { - int ref; - - struct isl_ctx *ctx; - -#define ISL_MAT_BORROWED (1 << 0) - unsigned flags; - - unsigned n_row; - unsigned n_col; - - isl_int **row; - - /* actual size of the rows in memory; n_col <= max_col */ - unsigned max_col; - - struct isl_blk block; -}; - -__isl_give isl_mat *isl_mat_sub_alloc(__isl_keep isl_mat *mat, - unsigned first_row, unsigned n_row, unsigned first_col, unsigned n_col); -__isl_give isl_mat *isl_mat_sub_alloc6(isl_ctx *ctx, isl_int **row, - unsigned first_row, unsigned n_row, unsigned first_col, unsigned n_col); -void isl_mat_sub_copy(struct isl_ctx *ctx, isl_int **dst, isl_int **src, - unsigned n_row, unsigned dst_col, unsigned src_col, unsigned n_col); -void isl_mat_sub_neg(struct isl_ctx *ctx, isl_int **dst, isl_int **src, - unsigned n_row, unsigned dst_col, unsigned src_col, unsigned n_col); -__isl_give isl_mat *isl_mat_diag(isl_ctx *ctx, unsigned n_row, isl_int d); diff --git a/cloog-0.17.0/isl/isl_morph.c b/cloog-0.17.0/isl/isl_morph.c deleted file mode 100644 index 69aabab..0000000 --- a/cloog-0.17.0/isl/isl_morph.c +++ /dev/null @@ -1,817 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include - -__isl_give isl_morph *isl_morph_alloc( - __isl_take isl_basic_set *dom, __isl_take isl_basic_set *ran, - __isl_take isl_mat *map, __isl_take isl_mat *inv) -{ - isl_morph *morph; - - if (!dom || !ran || !map || !inv) - goto error; - - morph = isl_alloc_type(dom->ctx, struct isl_morph); - if (!morph) - goto error; - - morph->ref = 1; - morph->dom = dom; - morph->ran = ran; - morph->map = map; - morph->inv = inv; - - return morph; -error: - isl_basic_set_free(dom); - isl_basic_set_free(ran); - isl_mat_free(map); - isl_mat_free(inv); - return NULL; -} - -__isl_give isl_morph *isl_morph_copy(__isl_keep isl_morph *morph) -{ - if (!morph) - return NULL; - - morph->ref++; - return morph; -} - -__isl_give isl_morph *isl_morph_dup(__isl_keep isl_morph *morph) -{ - if (!morph) - return NULL; - - return isl_morph_alloc(isl_basic_set_copy(morph->dom), - isl_basic_set_copy(morph->ran), - isl_mat_copy(morph->map), isl_mat_copy(morph->inv)); -} - -__isl_give isl_morph *isl_morph_cow(__isl_take isl_morph *morph) -{ - if (!morph) - return NULL; - - if (morph->ref == 1) - return morph; - morph->ref--; - return isl_morph_dup(morph); -} - -void isl_morph_free(__isl_take isl_morph *morph) -{ - if (!morph) - return; - - if (--morph->ref > 0) - return; - - isl_basic_set_free(morph->dom); - isl_basic_set_free(morph->ran); - isl_mat_free(morph->map); - isl_mat_free(morph->inv); - free(morph); -} - -__isl_give isl_space *isl_morph_get_ran_space(__isl_keep isl_morph *morph) -{ - if (!morph) - return NULL; - - return isl_space_copy(morph->ran->dim); -} - -unsigned isl_morph_dom_dim(__isl_keep isl_morph *morph, enum isl_dim_type type) -{ - if (!morph) - return 0; - - return isl_basic_set_dim(morph->dom, type); -} - -unsigned isl_morph_ran_dim(__isl_keep isl_morph *morph, enum isl_dim_type type) -{ - if (!morph) - return 0; - - return isl_basic_set_dim(morph->ran, type); -} - -__isl_give isl_morph *isl_morph_remove_dom_dims(__isl_take isl_morph *morph, - enum isl_dim_type type, unsigned first, unsigned n) -{ - unsigned dom_offset; - - if (n == 0) - return morph; - - morph = isl_morph_cow(morph); - if (!morph) - return NULL; - - dom_offset = 1 + isl_space_offset(morph->dom->dim, type); - - morph->dom = isl_basic_set_remove_dims(morph->dom, type, first, n); - - morph->map = isl_mat_drop_cols(morph->map, dom_offset + first, n); - - morph->inv = isl_mat_drop_rows(morph->inv, dom_offset + first, n); - - if (morph->dom && morph->ran && morph->map && morph->inv) - return morph; - - isl_morph_free(morph); - return NULL; -} - -__isl_give isl_morph *isl_morph_remove_ran_dims(__isl_take isl_morph *morph, - enum isl_dim_type type, unsigned first, unsigned n) -{ - unsigned ran_offset; - - if (n == 0) - return morph; - - morph = isl_morph_cow(morph); - if (!morph) - return NULL; - - ran_offset = 1 + isl_space_offset(morph->ran->dim, type); - - morph->ran = isl_basic_set_remove_dims(morph->ran, type, first, n); - - morph->map = isl_mat_drop_rows(morph->map, ran_offset + first, n); - - morph->inv = isl_mat_drop_cols(morph->inv, ran_offset + first, n); - - if (morph->dom && morph->ran && morph->map && morph->inv) - return morph; - - isl_morph_free(morph); - return NULL; -} - -/* Project domain of morph onto its parameter domain. - */ -__isl_give isl_morph *isl_morph_dom_params(__isl_take isl_morph *morph) -{ - unsigned n; - - if (!morph) - return NULL; - n = isl_basic_set_dim(morph->dom, isl_dim_set); - morph = isl_morph_remove_dom_dims(morph, isl_dim_set, 0, n); - if (!morph) - return NULL; - morph->dom = isl_basic_set_params(morph->dom); - if (morph->dom) - return morph; - - isl_morph_free(morph); - return NULL; -} - -/* Project range of morph onto its parameter domain. - */ -__isl_give isl_morph *isl_morph_ran_params(__isl_take isl_morph *morph) -{ - unsigned n; - - if (!morph) - return NULL; - n = isl_basic_set_dim(morph->ran, isl_dim_set); - morph = isl_morph_remove_ran_dims(morph, isl_dim_set, 0, n); - if (!morph) - return NULL; - morph->ran = isl_basic_set_params(morph->ran); - if (morph->ran) - return morph; - - isl_morph_free(morph); - return NULL; -} - -void isl_morph_dump(__isl_take isl_morph *morph, FILE *out) -{ - if (!morph) - return; - - isl_basic_set_print(morph->dom, out, 0, "", "", ISL_FORMAT_ISL); - isl_basic_set_print(morph->ran, out, 0, "", "", ISL_FORMAT_ISL); - isl_mat_print_internal(morph->map, out, 4); - isl_mat_print_internal(morph->inv, out, 4); -} - -__isl_give isl_morph *isl_morph_identity(__isl_keep isl_basic_set *bset) -{ - isl_mat *id; - isl_basic_set *universe; - unsigned total; - - if (!bset) - return NULL; - - total = isl_basic_set_total_dim(bset); - id = isl_mat_identity(bset->ctx, 1 + total); - universe = isl_basic_set_universe(isl_space_copy(bset->dim)); - - return isl_morph_alloc(universe, isl_basic_set_copy(universe), - id, isl_mat_copy(id)); -} - -/* Create a(n identity) morphism between empty sets of the same dimension - * a "bset". - */ -__isl_give isl_morph *isl_morph_empty(__isl_keep isl_basic_set *bset) -{ - isl_mat *id; - isl_basic_set *empty; - unsigned total; - - if (!bset) - return NULL; - - total = isl_basic_set_total_dim(bset); - id = isl_mat_identity(bset->ctx, 1 + total); - empty = isl_basic_set_empty(isl_space_copy(bset->dim)); - - return isl_morph_alloc(empty, isl_basic_set_copy(empty), - id, isl_mat_copy(id)); -} - -/* Given a matrix that maps a (possibly) parametric domain to - * a parametric domain, add in rows that map the "nparam" parameters onto - * themselves. - */ -static __isl_give isl_mat *insert_parameter_rows(__isl_take isl_mat *mat, - unsigned nparam) -{ - int i; - - if (nparam == 0) - return mat; - if (!mat) - return NULL; - - mat = isl_mat_insert_rows(mat, 1, nparam); - if (!mat) - return NULL; - - for (i = 0; i < nparam; ++i) { - isl_seq_clr(mat->row[1 + i], mat->n_col); - isl_int_set(mat->row[1 + i][1 + i], mat->row[0][0]); - } - - return mat; -} - -/* Construct a basic set described by the "n" equalities of "bset" starting - * at "first". - */ -static __isl_give isl_basic_set *copy_equalities(__isl_keep isl_basic_set *bset, - unsigned first, unsigned n) -{ - int i, k; - isl_basic_set *eq; - unsigned total; - - isl_assert(bset->ctx, bset->n_div == 0, return NULL); - - total = isl_basic_set_total_dim(bset); - eq = isl_basic_set_alloc_space(isl_space_copy(bset->dim), 0, n, 0); - if (!eq) - return NULL; - for (i = 0; i < n; ++i) { - k = isl_basic_set_alloc_equality(eq); - if (k < 0) - goto error; - isl_seq_cpy(eq->eq[k], bset->eq[first + k], 1 + total); - } - - return eq; -error: - isl_basic_set_free(eq); - return NULL; -} - -/* Given a basic set, exploit the equalties in the a basic set to construct - * a morphishm that maps the basic set to a lower-dimensional space. - * Specifically, the morphism reduces the number of dimensions of type "type". - * - * This function is a slight generalization of isl_mat_variable_compression - * in that it allows the input to be parametric and that it allows for the - * compression of either parameters or set variables. - * - * We first select the equalities of interest, that is those that involve - * variables of type "type" and no later variables. - * Denote those equalities as - * - * -C(p) + M x = 0 - * - * where C(p) depends on the parameters if type == isl_dim_set and - * is a constant if type == isl_dim_param. - * - * First compute the (left) Hermite normal form of M, - * - * M [U1 U2] = M U = H = [H1 0] - * or - * M = H Q = [H1 0] [Q1] - * [Q2] - * - * with U, Q unimodular, Q = U^{-1} (and H lower triangular). - * Define the transformed variables as - * - * x = [U1 U2] [ x1' ] = [U1 U2] [Q1] x - * [ x2' ] [Q2] - * - * The equalities then become - * - * -C(p) + H1 x1' = 0 or x1' = H1^{-1} C(p) = C'(p) - * - * If the denominator of the constant term does not divide the - * the common denominator of the parametric terms, then every - * integer point is mapped to a non-integer point and then the original set has no - * integer solutions (since the x' are a unimodular transformation - * of the x). In this case, an empty morphism is returned. - * Otherwise, the transformation is given by - * - * x = U1 H1^{-1} C(p) + U2 x2' - * - * The inverse transformation is simply - * - * x2' = Q2 x - * - * Both matrices are extended to map the full original space to the full - * compressed space. - */ -__isl_give isl_morph *isl_basic_set_variable_compression( - __isl_keep isl_basic_set *bset, enum isl_dim_type type) -{ - unsigned otype; - unsigned ntype; - unsigned orest; - unsigned nrest; - int f_eq, n_eq; - isl_space *dim; - isl_mat *H, *U, *Q, *C = NULL, *H1, *U1, *U2; - isl_basic_set *dom, *ran; - - if (!bset) - return NULL; - - if (isl_basic_set_plain_is_empty(bset)) - return isl_morph_empty(bset); - - isl_assert(bset->ctx, bset->n_div == 0, return NULL); - - otype = 1 + isl_space_offset(bset->dim, type); - ntype = isl_basic_set_dim(bset, type); - orest = otype + ntype; - nrest = isl_basic_set_total_dim(bset) - (orest - 1); - - for (f_eq = 0; f_eq < bset->n_eq; ++f_eq) - if (isl_seq_first_non_zero(bset->eq[f_eq] + orest, nrest) == -1) - break; - for (n_eq = 0; f_eq + n_eq < bset->n_eq; ++n_eq) - if (isl_seq_first_non_zero(bset->eq[f_eq + n_eq] + otype, ntype) == -1) - break; - if (n_eq == 0) - return isl_morph_identity(bset); - - H = isl_mat_sub_alloc6(bset->ctx, bset->eq, f_eq, n_eq, otype, ntype); - H = isl_mat_left_hermite(H, 0, &U, &Q); - if (!H || !U || !Q) - goto error; - Q = isl_mat_drop_rows(Q, 0, n_eq); - Q = isl_mat_diagonal(isl_mat_identity(bset->ctx, otype), Q); - Q = isl_mat_diagonal(Q, isl_mat_identity(bset->ctx, nrest)); - C = isl_mat_alloc(bset->ctx, 1 + n_eq, otype); - if (!C) - goto error; - isl_int_set_si(C->row[0][0], 1); - isl_seq_clr(C->row[0] + 1, otype - 1); - isl_mat_sub_neg(C->ctx, C->row + 1, bset->eq + f_eq, n_eq, 0, 0, otype); - H1 = isl_mat_sub_alloc(H, 0, H->n_row, 0, H->n_row); - H1 = isl_mat_lin_to_aff(H1); - C = isl_mat_inverse_product(H1, C); - if (!C) - goto error; - isl_mat_free(H); - - if (!isl_int_is_one(C->row[0][0])) { - int i; - isl_int g; - - isl_int_init(g); - for (i = 0; i < n_eq; ++i) { - isl_seq_gcd(C->row[1 + i] + 1, otype - 1, &g); - isl_int_gcd(g, g, C->row[0][0]); - if (!isl_int_is_divisible_by(C->row[1 + i][0], g)) - break; - } - isl_int_clear(g); - - if (i < n_eq) { - isl_mat_free(C); - isl_mat_free(U); - isl_mat_free(Q); - return isl_morph_empty(bset); - } - - C = isl_mat_normalize(C); - } - - U1 = isl_mat_sub_alloc(U, 0, U->n_row, 0, n_eq); - U1 = isl_mat_lin_to_aff(U1); - U2 = isl_mat_sub_alloc(U, 0, U->n_row, n_eq, U->n_row - n_eq); - U2 = isl_mat_lin_to_aff(U2); - isl_mat_free(U); - - C = isl_mat_product(U1, C); - C = isl_mat_aff_direct_sum(C, U2); - C = insert_parameter_rows(C, otype - 1); - C = isl_mat_diagonal(C, isl_mat_identity(bset->ctx, nrest)); - - dim = isl_space_copy(bset->dim); - dim = isl_space_drop_dims(dim, type, 0, ntype); - dim = isl_space_add_dims(dim, type, ntype - n_eq); - ran = isl_basic_set_universe(dim); - dom = copy_equalities(bset, f_eq, n_eq); - - return isl_morph_alloc(dom, ran, Q, C); -error: - isl_mat_free(C); - isl_mat_free(H); - isl_mat_free(U); - isl_mat_free(Q); - return NULL; -} - -/* Construct a parameter compression for "bset". - * We basically just call isl_mat_parameter_compression with the right input - * and then extend the resulting matrix to include the variables. - * - * Let the equalities be given as - * - * B(p) + A x = 0 - * - * and let [H 0] be the Hermite Normal Form of A, then - * - * H^-1 B(p) - * - * needs to be integer, so we impose that each row is divisible by - * the denominator. - */ -__isl_give isl_morph *isl_basic_set_parameter_compression( - __isl_keep isl_basic_set *bset) -{ - unsigned nparam; - unsigned nvar; - int n_eq; - isl_mat *H, *B; - isl_vec *d; - isl_mat *map, *inv; - isl_basic_set *dom, *ran; - - if (!bset) - return NULL; - - if (isl_basic_set_plain_is_empty(bset)) - return isl_morph_empty(bset); - if (bset->n_eq == 0) - return isl_morph_identity(bset); - - isl_assert(bset->ctx, bset->n_div == 0, return NULL); - - n_eq = bset->n_eq; - nparam = isl_basic_set_dim(bset, isl_dim_param); - nvar = isl_basic_set_dim(bset, isl_dim_set); - - isl_assert(bset->ctx, n_eq <= nvar, return NULL); - - d = isl_vec_alloc(bset->ctx, n_eq); - B = isl_mat_sub_alloc6(bset->ctx, bset->eq, 0, n_eq, 0, 1 + nparam); - H = isl_mat_sub_alloc6(bset->ctx, bset->eq, 0, n_eq, 1 + nparam, nvar); - H = isl_mat_left_hermite(H, 0, NULL, NULL); - H = isl_mat_drop_cols(H, n_eq, nvar - n_eq); - H = isl_mat_lin_to_aff(H); - H = isl_mat_right_inverse(H); - if (!H || !d) - goto error; - isl_seq_set(d->el, H->row[0][0], d->size); - H = isl_mat_drop_rows(H, 0, 1); - H = isl_mat_drop_cols(H, 0, 1); - B = isl_mat_product(H, B); - inv = isl_mat_parameter_compression(B, d); - inv = isl_mat_diagonal(inv, isl_mat_identity(bset->ctx, nvar)); - map = isl_mat_right_inverse(isl_mat_copy(inv)); - - dom = isl_basic_set_universe(isl_space_copy(bset->dim)); - ran = isl_basic_set_universe(isl_space_copy(bset->dim)); - - return isl_morph_alloc(dom, ran, map, inv); -error: - isl_mat_free(H); - isl_mat_free(B); - isl_vec_free(d); - return NULL; -} - -/* Add stride constraints to "bset" based on the inverse mapping - * that was plugged in. In particular, if morph maps x' to x, - * the the constraints of the original input - * - * A x' + b >= 0 - * - * have been rewritten to - * - * A inv x + b >= 0 - * - * However, this substitution may loose information on the integrality of x', - * so we need to impose that - * - * inv x - * - * is integral. If inv = B/d, this means that we need to impose that - * - * B x = 0 mod d - * - * or - * - * exists alpha in Z^m: B x = d alpha - * - */ -static __isl_give isl_basic_set *add_strides(__isl_take isl_basic_set *bset, - __isl_keep isl_morph *morph) -{ - int i, div, k; - isl_int gcd; - - if (isl_int_is_one(morph->inv->row[0][0])) - return bset; - - isl_int_init(gcd); - - for (i = 0; 1 + i < morph->inv->n_row; ++i) { - isl_seq_gcd(morph->inv->row[1 + i], morph->inv->n_col, &gcd); - if (isl_int_is_divisible_by(gcd, morph->inv->row[0][0])) - continue; - div = isl_basic_set_alloc_div(bset); - if (div < 0) - goto error; - k = isl_basic_set_alloc_equality(bset); - if (k < 0) - goto error; - isl_seq_cpy(bset->eq[k], morph->inv->row[1 + i], - morph->inv->n_col); - isl_seq_clr(bset->eq[k] + morph->inv->n_col, bset->n_div); - isl_int_set(bset->eq[k][morph->inv->n_col + div], - morph->inv->row[0][0]); - } - - isl_int_clear(gcd); - - return bset; -error: - isl_int_clear(gcd); - isl_basic_set_free(bset); - return NULL; -} - -/* Apply the morphism to the basic set. - * We basically just compute the preimage of "bset" under the inverse mapping - * in morph, add in stride constraints and intersect with the range - * of the morphism. - */ -__isl_give isl_basic_set *isl_morph_basic_set(__isl_take isl_morph *morph, - __isl_take isl_basic_set *bset) -{ - isl_basic_set *res = NULL; - isl_mat *mat = NULL; - int i, k; - int max_stride; - - if (!morph || !bset) - goto error; - - isl_assert(bset->ctx, isl_space_is_equal(bset->dim, morph->dom->dim), - goto error); - - max_stride = morph->inv->n_row - 1; - if (isl_int_is_one(morph->inv->row[0][0])) - max_stride = 0; - res = isl_basic_set_alloc_space(isl_space_copy(morph->ran->dim), - bset->n_div + max_stride, bset->n_eq + max_stride, bset->n_ineq); - - for (i = 0; i < bset->n_div; ++i) - if (isl_basic_set_alloc_div(res) < 0) - goto error; - - mat = isl_mat_sub_alloc6(bset->ctx, bset->eq, 0, bset->n_eq, - 0, morph->inv->n_row); - mat = isl_mat_product(mat, isl_mat_copy(morph->inv)); - if (!mat) - goto error; - for (i = 0; i < bset->n_eq; ++i) { - k = isl_basic_set_alloc_equality(res); - if (k < 0) - goto error; - isl_seq_cpy(res->eq[k], mat->row[i], mat->n_col); - isl_seq_scale(res->eq[k] + mat->n_col, bset->eq[i] + mat->n_col, - morph->inv->row[0][0], bset->n_div); - } - isl_mat_free(mat); - - mat = isl_mat_sub_alloc6(bset->ctx, bset->ineq, 0, bset->n_ineq, - 0, morph->inv->n_row); - mat = isl_mat_product(mat, isl_mat_copy(morph->inv)); - if (!mat) - goto error; - for (i = 0; i < bset->n_ineq; ++i) { - k = isl_basic_set_alloc_inequality(res); - if (k < 0) - goto error; - isl_seq_cpy(res->ineq[k], mat->row[i], mat->n_col); - isl_seq_scale(res->ineq[k] + mat->n_col, - bset->ineq[i] + mat->n_col, - morph->inv->row[0][0], bset->n_div); - } - isl_mat_free(mat); - - mat = isl_mat_sub_alloc6(bset->ctx, bset->div, 0, bset->n_div, - 1, morph->inv->n_row); - mat = isl_mat_product(mat, isl_mat_copy(morph->inv)); - if (!mat) - goto error; - for (i = 0; i < bset->n_div; ++i) { - isl_int_mul(res->div[i][0], - morph->inv->row[0][0], bset->div[i][0]); - isl_seq_cpy(res->div[i] + 1, mat->row[i], mat->n_col); - isl_seq_scale(res->div[i] + 1 + mat->n_col, - bset->div[i] + 1 + mat->n_col, - morph->inv->row[0][0], bset->n_div); - } - isl_mat_free(mat); - - res = add_strides(res, morph); - - if (isl_basic_set_is_rational(bset)) - res = isl_basic_set_set_rational(res); - - res = isl_basic_set_simplify(res); - res = isl_basic_set_finalize(res); - - res = isl_basic_set_intersect(res, isl_basic_set_copy(morph->ran)); - - isl_morph_free(morph); - isl_basic_set_free(bset); - return res; -error: - isl_mat_free(mat); - isl_morph_free(morph); - isl_basic_set_free(bset); - isl_basic_set_free(res); - return NULL; -} - -/* Apply the morphism to the set. - */ -__isl_give isl_set *isl_morph_set(__isl_take isl_morph *morph, - __isl_take isl_set *set) -{ - int i; - - if (!morph || !set) - goto error; - - isl_assert(set->ctx, isl_space_is_equal(set->dim, morph->dom->dim), goto error); - - set = isl_set_cow(set); - if (!set) - goto error; - - isl_space_free(set->dim); - set->dim = isl_space_copy(morph->ran->dim); - if (!set->dim) - goto error; - - for (i = 0; i < set->n; ++i) { - set->p[i] = isl_morph_basic_set(isl_morph_copy(morph), set->p[i]); - if (!set->p[i]) - goto error; - } - - isl_morph_free(morph); - - ISL_F_CLR(set, ISL_SET_NORMALIZED); - - return set; -error: - isl_set_free(set); - isl_morph_free(morph); - return NULL; -} - -/* Construct a morphism that first does morph2 and then morph1. - */ -__isl_give isl_morph *isl_morph_compose(__isl_take isl_morph *morph1, - __isl_take isl_morph *morph2) -{ - isl_mat *map, *inv; - isl_basic_set *dom, *ran; - - if (!morph1 || !morph2) - goto error; - - map = isl_mat_product(isl_mat_copy(morph1->map), isl_mat_copy(morph2->map)); - inv = isl_mat_product(isl_mat_copy(morph2->inv), isl_mat_copy(morph1->inv)); - dom = isl_morph_basic_set(isl_morph_inverse(isl_morph_copy(morph2)), - isl_basic_set_copy(morph1->dom)); - dom = isl_basic_set_intersect(dom, isl_basic_set_copy(morph2->dom)); - ran = isl_morph_basic_set(isl_morph_copy(morph1), - isl_basic_set_copy(morph2->ran)); - ran = isl_basic_set_intersect(ran, isl_basic_set_copy(morph1->ran)); - - isl_morph_free(morph1); - isl_morph_free(morph2); - - return isl_morph_alloc(dom, ran, map, inv); -error: - isl_morph_free(morph1); - isl_morph_free(morph2); - return NULL; -} - -__isl_give isl_morph *isl_morph_inverse(__isl_take isl_morph *morph) -{ - isl_basic_set *bset; - isl_mat *mat; - - morph = isl_morph_cow(morph); - if (!morph) - return NULL; - - bset = morph->dom; - morph->dom = morph->ran; - morph->ran = bset; - - mat = morph->map; - morph->map = morph->inv; - morph->inv = mat; - - return morph; -} - -__isl_give isl_morph *isl_basic_set_full_compression( - __isl_keep isl_basic_set *bset) -{ - isl_morph *morph, *morph2; - - bset = isl_basic_set_copy(bset); - - morph = isl_basic_set_variable_compression(bset, isl_dim_param); - bset = isl_morph_basic_set(isl_morph_copy(morph), bset); - - morph2 = isl_basic_set_parameter_compression(bset); - bset = isl_morph_basic_set(isl_morph_copy(morph2), bset); - - morph = isl_morph_compose(morph2, morph); - - morph2 = isl_basic_set_variable_compression(bset, isl_dim_set); - isl_basic_set_free(bset); - - morph = isl_morph_compose(morph2, morph); - - return morph; -} - -__isl_give isl_vec *isl_morph_vec(__isl_take isl_morph *morph, - __isl_take isl_vec *vec) -{ - if (!morph) - goto error; - - vec = isl_mat_vec_product(isl_mat_copy(morph->map), vec); - - isl_morph_free(morph); - return vec; -error: - isl_morph_free(morph); - isl_vec_free(vec); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_morph.h b/cloog-0.17.0/isl/isl_morph.h deleted file mode 100644 index 3723448..0000000 --- a/cloog-0.17.0/isl/isl_morph.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#ifndef ISL_MORHP_H -#define ISL_MORHP_H - -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -/* An isl_morph is a "morphism" on (basic) sets. - * "map" is an affine mapping from "dom" to "ran" - * and "inv" is the inverse mapping. - */ -struct isl_morph { - int ref; - - isl_basic_set *dom; - isl_basic_set *ran; - - isl_mat *map; - isl_mat *inv; -}; -typedef struct isl_morph isl_morph; - -__isl_give isl_morph *isl_morph_alloc( - __isl_take isl_basic_set *dom, __isl_take isl_basic_set *ran, - __isl_take isl_mat *map, __isl_take isl_mat *inv); -__isl_give isl_morph *isl_morph_copy(__isl_keep isl_morph *morph); -__isl_give isl_morph *isl_morph_identity(__isl_keep isl_basic_set *bset); -void isl_morph_free(__isl_take isl_morph *morph); - -__isl_give isl_space *isl_morph_get_ran_space(__isl_keep isl_morph *morph); -unsigned isl_morph_dom_dim(__isl_keep isl_morph *morph, enum isl_dim_type type); -unsigned isl_morph_ran_dim(__isl_keep isl_morph *morph, enum isl_dim_type type); - -__isl_give isl_morph *isl_morph_remove_dom_dims(__isl_take isl_morph *morph, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_morph *isl_morph_remove_ran_dims(__isl_take isl_morph *morph, - enum isl_dim_type type, unsigned first, unsigned n); -__isl_give isl_morph *isl_morph_dom_params(__isl_take isl_morph *morph); -__isl_give isl_morph *isl_morph_ran_params(__isl_take isl_morph *morph); - -__isl_give isl_morph *isl_morph_compose(__isl_take isl_morph *morph1, - __isl_take isl_morph *morph2); -__isl_give isl_morph *isl_morph_inverse(__isl_take isl_morph *morph); - -void isl_morph_dump(__isl_take isl_morph *morph, FILE *out); - -__isl_give isl_morph *isl_basic_set_variable_compression( - __isl_keep isl_basic_set *bset, enum isl_dim_type type); -__isl_give isl_morph *isl_basic_set_parameter_compression( - __isl_keep isl_basic_set *bset); -__isl_give isl_morph *isl_basic_set_full_compression( - __isl_keep isl_basic_set *bset); - -__isl_give isl_basic_set *isl_morph_basic_set(__isl_take isl_morph *morph, - __isl_take isl_basic_set *bset); -__isl_give isl_set *isl_morph_set(__isl_take isl_morph *morph, - __isl_take isl_set *set); -__isl_give isl_vec *isl_morph_vec(__isl_take isl_morph *morph, - __isl_take isl_vec *vec); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/isl_multi_templ.c b/cloog-0.17.0/isl/isl_multi_templ.c deleted file mode 100644 index a60b7d4..0000000 --- a/cloog-0.17.0/isl/isl_multi_templ.c +++ /dev/null @@ -1,361 +0,0 @@ -/* - * Copyright 2011 Sven Verdoolaege - * - * Use of this software is governed by the GNU LGPLv2.1 license - */ - -#define xCAT(A,B) A ## B -#define CAT(A,B) xCAT(A,B) -#undef EL -#define EL CAT(isl_,BASE) -#define xFN(TYPE,NAME) TYPE ## _ ## NAME -#define FN(TYPE,NAME) xFN(TYPE,NAME) -#define xMULTI(BASE) isl_multi_ ## BASE -#define MULTI(BASE) xMULTI(BASE) -#define MULTI_NAME(BASE) "isl_multi_" #BASE -#define xLIST(EL) EL ## _list -#define LIST(EL) xLIST(EL) - -isl_ctx *FN(MULTI(BASE),get_ctx)(__isl_keep MULTI(BASE) *multi) -{ - return multi ? isl_space_get_ctx(multi->space) : NULL; -} - -__isl_give isl_space *FN(MULTI(BASE),get_space)(__isl_keep MULTI(BASE) *multi) -{ - return multi ? isl_space_copy(multi->space) : NULL; -} - -__isl_give isl_space *FN(MULTI(BASE),get_domain_space)( - __isl_keep MULTI(BASE) *multi) -{ - return multi ? isl_space_domain(isl_space_copy(multi->space)) : NULL; -} - -__isl_give MULTI(BASE) *FN(MULTI(BASE),alloc)(__isl_take isl_space *space) -{ - isl_ctx *ctx; - int n; - MULTI(BASE) *multi; - - if (!space) - return NULL; - - ctx = isl_space_get_ctx(space); - n = isl_space_dim(space, isl_dim_out); - multi = isl_calloc(ctx, MULTI(BASE), - sizeof(MULTI(BASE)) + (n - 1) * sizeof(struct EL *)); - if (!multi) - goto error; - - multi->space = space; - multi->n = n; - multi->ref = 1; - return multi; -error: - isl_space_free(space); - return NULL; -} - -__isl_give MULTI(BASE) *FN(MULTI(BASE),dup)(__isl_keep MULTI(BASE) *multi) -{ - int i; - MULTI(BASE) *dup; - - if (!multi) - return NULL; - - dup = FN(MULTI(BASE),alloc)(isl_space_copy(multi->space)); - if (!dup) - return NULL; - - for (i = 0; i < multi->n; ++i) - dup = FN(FN(MULTI(BASE),set),BASE)(dup, i, - FN(EL,copy)(multi->p[i])); - - return dup; -} - -__isl_give MULTI(BASE) *FN(MULTI(BASE),cow)(__isl_take MULTI(BASE) *multi) -{ - if (!multi) - return NULL; - - if (multi->ref == 1) - return multi; - - multi->ref--; - return FN(MULTI(BASE),dup)(multi); -} - -__isl_give MULTI(BASE) *FN(MULTI(BASE),copy)(__isl_keep MULTI(BASE) *multi) -{ - if (!multi) - return NULL; - - multi->ref++; - return multi; -} - -void *FN(MULTI(BASE),free)(__isl_take MULTI(BASE) *multi) -{ - int i; - - if (!multi) - return NULL; - - if (--multi->ref > 0) - return NULL; - - isl_space_free(multi->space); - for (i = 0; i < multi->n; ++i) - FN(EL,free)(multi->p[i]); - free(multi); - - return NULL; -} - -unsigned FN(MULTI(BASE),dim)(__isl_keep MULTI(BASE) *multi, - enum isl_dim_type type) -{ - return multi ? isl_space_dim(multi->space, type) : 0; -} - -const char *FN(MULTI(BASE),get_tuple_name)(__isl_keep MULTI(BASE) *multi, - enum isl_dim_type type) -{ - return multi ? isl_space_get_tuple_name(multi->space, type) : NULL; -} - -__isl_give EL *FN(FN(MULTI(BASE),get),BASE)(__isl_keep MULTI(BASE) *multi, - int pos) -{ - isl_ctx *ctx; - - if (!multi) - return NULL; - ctx = FN(MULTI(BASE),get_ctx)(multi); - if (pos < 0 || pos >= multi->n) - isl_die(ctx, isl_error_invalid, - "index out of bounds", return NULL); - return FN(EL,copy)(multi->p[pos]); -} - -__isl_give MULTI(BASE) *FN(FN(MULTI(BASE),set),BASE)( - __isl_take MULTI(BASE) *multi, int pos, __isl_take EL *el) -{ - if (!multi || !el) - goto error; - - FN(EL,free)(multi->p[pos]); - multi->p[pos] = el; - - return multi; -error: - FN(MULTI(BASE),free)(multi); - FN(EL,free)(el); - return NULL; -} - -/* Reset the space of "multi". This function is called from isl_pw_templ.c - * and doesn't know if the space of an element object is represented - * directly or through its domain. It therefore passes along both, - * which we pass along to the element function since we don't how - * that is represented either. - */ -__isl_give MULTI(BASE) *FN(MULTI(BASE),reset_space_and_domain)( - __isl_take MULTI(BASE) *multi, __isl_take isl_space *space, - __isl_take isl_space *domain) -{ - int i; - - multi = FN(MULTI(BASE),cow)(multi); - if (!multi || !space || !domain) - goto error; - - for (i = 0; i < multi->n; ++i) { - multi->p[i] = FN(EL,reset_space_and_domain)(multi->p[i], - isl_space_copy(space), isl_space_copy(domain)); - if (!multi->p[i]) - goto error; - } - isl_space_free(domain); - isl_space_free(multi->space); - multi->space = space; - - return multi; -error: - isl_space_free(domain); - isl_space_free(space); - FN(MULTI(BASE),free)(multi); - return NULL; -} - -__isl_give MULTI(BASE) *FN(MULTI(BASE),reset_domain_space)( - __isl_take MULTI(BASE) *multi, __isl_take isl_space *domain) -{ - isl_space *space; - - space = isl_space_extend_domain_with_range(isl_space_copy(domain), - isl_space_copy(multi->space)); - return FN(MULTI(BASE),reset_space_and_domain)(multi, space, domain); -} - -__isl_give MULTI(BASE) *FN(MULTI(BASE),realign_domain)( - __isl_take MULTI(BASE) *multi, __isl_take isl_reordering *exp) -{ - int i; - - multi = FN(MULTI(BASE),cow)(multi); - if (!multi || !exp) - return NULL; - - for (i = 0; i < multi->n; ++i) { - multi->p[i] = FN(EL,realign_domain)(multi->p[i], - isl_reordering_copy(exp)); - if (!multi->p[i]) - goto error; - } - - multi = FN(MULTI(BASE),reset_domain_space)(multi, - isl_space_copy(exp->dim)); - - isl_reordering_free(exp); - return multi; -error: - isl_reordering_free(exp); - FN(MULTI(BASE),free)(multi); - return NULL; -} - -/* Align the parameters of "multi" to those of "model". - */ -__isl_give MULTI(BASE) *FN(MULTI(BASE),align_params)( - __isl_take MULTI(BASE) *multi, __isl_take isl_space *model) -{ - isl_ctx *ctx; - - if (!multi || !model) - goto error; - - ctx = isl_space_get_ctx(model); - if (!isl_space_has_named_params(model)) - isl_die(ctx, isl_error_invalid, - "model has unnamed parameters", goto error); - if (!isl_space_has_named_params(multi->space)) - isl_die(ctx, isl_error_invalid, - "input has unnamed parameters", goto error); - if (!isl_space_match(multi->space, isl_dim_param, - model, isl_dim_param)) { - isl_reordering *exp; - - model = isl_space_params(model); - exp = isl_parameter_alignment_reordering(multi->space, model); - exp = isl_reordering_extend_space(exp, - FN(MULTI(BASE),get_domain_space)(multi)); - multi = FN(MULTI(BASE),realign_domain)(multi, exp); - } - - isl_space_free(model); - return multi; -error: - isl_space_free(model); - FN(MULTI(BASE),free)(multi); - return NULL; -} - -static __isl_give MULTI(BASE) *align_params_multi_set_and( - __isl_take MULTI(BASE) *multi, __isl_take isl_set *set, - __isl_give MULTI(BASE) *(*fn)(__isl_take MULTI(BASE) *multi, - __isl_take isl_set *set)) -{ - isl_ctx *ctx; - - if (!multi || !set) - goto error; - if (isl_space_match(multi->space, isl_dim_param, - set->dim, isl_dim_param)) - return fn(multi, set); - ctx = FN(MULTI(BASE),get_ctx)(multi); - if (!isl_space_has_named_params(multi->space) || - !isl_space_has_named_params(set->dim)) - isl_die(ctx, isl_error_invalid, - "unaligned unnamed parameters", goto error); - multi = FN(MULTI(BASE),align_params)(multi, isl_set_get_space(set)); - set = isl_set_align_params(set, FN(MULTI(BASE),get_space)(multi)); - return fn(multi, set); -error: - FN(MULTI(BASE),free)(multi); - isl_set_free(set); - return NULL; -} - -__isl_give MULTI(BASE) *FN(MULTI(BASE),gist_aligned)( - __isl_take MULTI(BASE) *multi, __isl_take isl_set *context) -{ - int i; - - if (!multi || !context) - goto error; - - for (i = 0; i < multi->n; ++i) { - multi->p[i] = FN(EL,gist)(multi->p[i], isl_set_copy(context)); - if (!multi->p[i]) - goto error; - } - - isl_set_free(context); - return multi; -error: - isl_set_free(context); - FN(MULTI(BASE),free)(multi); - return NULL; -} - -__isl_give MULTI(BASE) *FN(MULTI(BASE),gist)(__isl_take MULTI(BASE) *multi, - __isl_take isl_set *context) -{ - return align_params_multi_set_and(multi, context, - &FN(MULTI(BASE),gist_aligned)); -} - -__isl_give MULTI(BASE) *FN(MULTI(BASE),gist_params)( - __isl_take MULTI(BASE) *multi, __isl_take isl_set *context) -{ - isl_space *space = FN(MULTI(BASE),get_domain_space)(multi); - isl_set *dom_context = isl_set_universe(space); - dom_context = isl_set_intersect_params(dom_context, context); - return FN(MULTI(BASE),gist)(multi, dom_context); -} - -__isl_give MULTI(BASE) *FN(FN(MULTI(BASE),from),LIST(BASE))( - __isl_take isl_space *space, __isl_take LIST(EL) *list) -{ - int i; - int n; - isl_ctx *ctx; - MULTI(BASE) *multi; - - if (!space || !list) - goto error; - - ctx = isl_space_get_ctx(space); - n = FN(FN(LIST(EL),n),BASE)(list); - if (n != isl_space_dim(space, isl_dim_out)) - isl_die(ctx, isl_error_invalid, - "invalid number of elements in list", goto error); - - multi = FN(MULTI(BASE),alloc)(isl_space_copy(space)); - for (i = 0; i < n; ++i) { - multi = FN(FN(MULTI(BASE),set),BASE)(multi, i, - FN(FN(LIST(EL),get),BASE)(list, i)); - } - - isl_space_free(space); - FN(LIST(EL),free)(list); - return multi; -error: - isl_space_free(space); - FN(LIST(EL),free)(list); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_multi_templ.h b/cloog-0.17.0/isl/isl_multi_templ.h deleted file mode 100644 index 329985e..0000000 --- a/cloog-0.17.0/isl/isl_multi_templ.h +++ /dev/null @@ -1,22 +0,0 @@ -#define xCAT(A,B) A ## B -#define CAT(A,B) xCAT(A,B) -#undef EL -#define EL CAT(isl_,BASE) -#define xMULTI(BASE) isl_multi_ ## BASE -#define MULTI(BASE) xMULTI(BASE) - -struct MULTI(BASE) { - int ref; - isl_space *space; - - int n; - EL *p[1]; -}; - -#define ISL_DECLARE_MULTI_PRIVATE(BASE) \ -__isl_give isl_multi_##BASE *isl_multi_##BASE##_alloc( \ - __isl_take isl_space *space); \ -__isl_give isl_multi_##BASE *isl_multi_##BASE##_set_##BASE( \ - __isl_take isl_multi_##BASE *multi, int pos, __isl_take EL *el); - -ISL_DECLARE_MULTI_PRIVATE(aff) diff --git a/cloog-0.17.0/isl/isl_obj.c b/cloog-0.17.0/isl/isl_obj.c deleted file mode 100644 index dc63454..0000000 --- a/cloog-0.17.0/isl/isl_obj.c +++ /dev/null @@ -1,426 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include - -struct isl_int_obj { - int ref; - isl_ctx *ctx; - isl_int v; -}; - -__isl_give isl_int_obj *isl_int_obj_alloc(isl_ctx *ctx, isl_int v) -{ - isl_int_obj *i; - - i = isl_alloc_type(ctx, isl_int_obj); - if (!i) - return NULL; - - i->ctx = ctx; - isl_ctx_ref(ctx); - i->ref = 1; - isl_int_init(i->v); - isl_int_set(i->v, v); - - return i; -} - -__isl_give isl_int_obj *isl_int_obj_copy(__isl_keep isl_int_obj *i) -{ - if (!i) - return NULL; - - i->ref++; - return i; -} - -__isl_give isl_int_obj *isl_int_obj_dup(__isl_keep isl_int_obj *i) -{ - if (!i) - return NULL; - - return isl_int_obj_alloc(i->ctx, i->v); -} - -__isl_give isl_int_obj *isl_int_obj_cow(__isl_take isl_int_obj *i) -{ - if (!i) - return NULL; - - if (i->ref == 1) - return i; - i->ref--; - return isl_int_obj_dup(i); -} - -void isl_int_obj_free(__isl_take isl_int_obj *i) -{ - if (!i) - return; - - if (--i->ref > 0) - return; - - isl_ctx_deref(i->ctx); - isl_int_clear(i->v); - free(i); -} - -__isl_give isl_int_obj *isl_int_obj_add(__isl_take isl_int_obj *i1, - __isl_take isl_int_obj *i2) -{ - i1 = isl_int_obj_cow(i1); - if (!i1 || !i2) - goto error; - - isl_int_add(i1->v, i1->v, i2->v); - - isl_int_obj_free(i2); - return i1; -error: - isl_int_obj_free(i1); - isl_int_obj_free(i2); - return NULL; -} - -__isl_give isl_int_obj *isl_int_obj_sub(__isl_take isl_int_obj *i1, - __isl_take isl_int_obj *i2) -{ - i1 = isl_int_obj_cow(i1); - if (!i1 || !i2) - goto error; - - isl_int_sub(i1->v, i1->v, i2->v); - - isl_int_obj_free(i2); - return i1; -error: - isl_int_obj_free(i1); - isl_int_obj_free(i2); - return NULL; -} - -__isl_give isl_int_obj *isl_int_obj_mul(__isl_take isl_int_obj *i1, - __isl_take isl_int_obj *i2) -{ - i1 = isl_int_obj_cow(i1); - if (!i1 || !i2) - goto error; - - isl_int_mul(i1->v, i1->v, i2->v); - - isl_int_obj_free(i2); - return i1; -error: - isl_int_obj_free(i1); - isl_int_obj_free(i2); - return NULL; -} - -void isl_int_obj_get_int(__isl_keep isl_int_obj *i, isl_int *v) -{ - if (!i) - return; - isl_int_set(*v, i->v); -} - -static void *isl_obj_int_copy(void *v) -{ - return isl_int_obj_copy((isl_int_obj *)v); -} - -static void isl_obj_int_free(void *v) -{ - isl_int_obj_free((isl_int_obj *)v); -} - -static __isl_give isl_printer *isl_obj_int_print(__isl_take isl_printer *p, - void *v) -{ - isl_int_obj *i = v; - return isl_printer_print_isl_int(p, i->v); -} - -static void *isl_obj_int_add(void *v1, void *v2) -{ - return isl_int_obj_add((isl_int_obj *)v1, (isl_int_obj *)v2); -} - -struct isl_obj_vtable isl_obj_int_vtable = { - isl_obj_int_copy, - isl_obj_int_add, - isl_obj_int_print, - isl_obj_int_free -}; - -static void *isl_obj_map_copy(void *v) -{ - return isl_map_copy((struct isl_map *)v); -} - -static void isl_obj_map_free(void *v) -{ - isl_map_free((struct isl_map *)v); -} - -static __isl_give isl_printer *isl_obj_map_print(__isl_take isl_printer *p, - void *v) -{ - return isl_printer_print_map(p, (struct isl_map *)v); -} - -static void *isl_obj_map_add(void *v1, void *v2) -{ - return isl_map_union((struct isl_map *)v1, (struct isl_map *)v2); -} - -struct isl_obj_vtable isl_obj_map_vtable = { - isl_obj_map_copy, - isl_obj_map_add, - isl_obj_map_print, - isl_obj_map_free -}; - -static void *isl_obj_union_map_copy(void *v) -{ - return isl_union_map_copy((isl_union_map *)v); -} - -static void isl_obj_union_map_free(void *v) -{ - isl_union_map_free((isl_union_map *)v); -} - -static __isl_give isl_printer *isl_obj_union_map_print(__isl_take isl_printer *p, - void *v) -{ - return isl_printer_print_union_map(p, (isl_union_map *)v); -} - -static void *isl_obj_union_map_add(void *v1, void *v2) -{ - return isl_union_map_union((isl_union_map *)v1, (isl_union_map *)v2); -} - -struct isl_obj_vtable isl_obj_union_map_vtable = { - isl_obj_union_map_copy, - isl_obj_union_map_add, - isl_obj_union_map_print, - isl_obj_union_map_free -}; - -static void *isl_obj_set_copy(void *v) -{ - return isl_set_copy((struct isl_set *)v); -} - -static void isl_obj_set_free(void *v) -{ - isl_set_free((struct isl_set *)v); -} - -static __isl_give isl_printer *isl_obj_set_print(__isl_take isl_printer *p, - void *v) -{ - return isl_printer_print_set(p, (struct isl_set *)v); -} - -static void *isl_obj_set_add(void *v1, void *v2) -{ - return isl_set_union((struct isl_set *)v1, (struct isl_set *)v2); -} - -struct isl_obj_vtable isl_obj_set_vtable = { - isl_obj_set_copy, - isl_obj_set_add, - isl_obj_set_print, - isl_obj_set_free -}; - -static void *isl_obj_union_set_copy(void *v) -{ - return isl_union_set_copy((isl_union_set *)v); -} - -static void isl_obj_union_set_free(void *v) -{ - isl_union_set_free((isl_union_set *)v); -} - -static __isl_give isl_printer *isl_obj_union_set_print(__isl_take isl_printer *p, - void *v) -{ - return isl_printer_print_union_set(p, (isl_union_set *)v); -} - -static void *isl_obj_union_set_add(void *v1, void *v2) -{ - return isl_union_set_union((isl_union_set *)v1, (isl_union_set *)v2); -} - -struct isl_obj_vtable isl_obj_union_set_vtable = { - isl_obj_union_set_copy, - isl_obj_union_set_add, - isl_obj_union_set_print, - isl_obj_union_set_free -}; - -static void *isl_obj_none_copy(void *v) -{ - return v; -} - -static void isl_obj_none_free(void *v) -{ -} - -static __isl_give isl_printer *isl_obj_none_print(__isl_take isl_printer *p, - void *v) -{ - return p; -} - -static void *isl_obj_none_add(void *v1, void *v2) -{ - return NULL; -} - -struct isl_obj_vtable isl_obj_none_vtable = { - isl_obj_none_copy, - isl_obj_none_add, - isl_obj_none_print, - isl_obj_none_free -}; - -static void *isl_obj_pw_qp_copy(void *v) -{ - return isl_pw_qpolynomial_copy((struct isl_pw_qpolynomial *)v); -} - -static void isl_obj_pw_qp_free(void *v) -{ - isl_pw_qpolynomial_free((struct isl_pw_qpolynomial *)v); -} - -static __isl_give isl_printer *isl_obj_pw_qp_print(__isl_take isl_printer *p, - void *v) -{ - return isl_printer_print_pw_qpolynomial(p, - (struct isl_pw_qpolynomial *)v); -} - -static void *isl_obj_pw_qp_add(void *v1, void *v2) -{ - return isl_pw_qpolynomial_add((struct isl_pw_qpolynomial *)v1, - (struct isl_pw_qpolynomial *)v2); -} - -struct isl_obj_vtable isl_obj_pw_qpolynomial_vtable = { - isl_obj_pw_qp_copy, - isl_obj_pw_qp_add, - isl_obj_pw_qp_print, - isl_obj_pw_qp_free -}; - -static void *isl_obj_union_pw_qp_copy(void *v) -{ - return isl_union_pw_qpolynomial_copy((struct isl_union_pw_qpolynomial *)v); -} - -static void isl_obj_union_pw_qp_free(void *v) -{ - isl_union_pw_qpolynomial_free((struct isl_union_pw_qpolynomial *)v); -} - -static __isl_give isl_printer *isl_obj_union_pw_qp_print( - __isl_take isl_printer *p, void *v) -{ - return isl_printer_print_union_pw_qpolynomial(p, - (struct isl_union_pw_qpolynomial *)v); -} - -static void *isl_obj_union_pw_qp_add(void *v1, void *v2) -{ - return isl_union_pw_qpolynomial_add( - (struct isl_union_pw_qpolynomial *)v1, - (struct isl_union_pw_qpolynomial *)v2); -} - -struct isl_obj_vtable isl_obj_union_pw_qpolynomial_vtable = { - isl_obj_union_pw_qp_copy, - isl_obj_union_pw_qp_add, - isl_obj_union_pw_qp_print, - isl_obj_union_pw_qp_free -}; - -static void *isl_obj_pw_qpf_copy(void *v) -{ - return isl_pw_qpolynomial_fold_copy((struct isl_pw_qpolynomial_fold *)v); -} - -static void isl_obj_pw_qpf_free(void *v) -{ - isl_pw_qpolynomial_fold_free((struct isl_pw_qpolynomial_fold *)v); -} - -static __isl_give isl_printer *isl_obj_pw_qpf_print(__isl_take isl_printer *p, - void *v) -{ - return isl_printer_print_pw_qpolynomial_fold(p, - (struct isl_pw_qpolynomial_fold *)v); -} - -static void *isl_obj_pw_qpf_add(void *v1, void *v2) -{ - return isl_pw_qpolynomial_fold_fold((struct isl_pw_qpolynomial_fold *)v1, - (struct isl_pw_qpolynomial_fold *)v2); -} - -struct isl_obj_vtable isl_obj_pw_qpolynomial_fold_vtable = { - isl_obj_pw_qpf_copy, - isl_obj_pw_qpf_add, - isl_obj_pw_qpf_print, - isl_obj_pw_qpf_free -}; - -static void *isl_obj_union_pw_qpf_copy(void *v) -{ - return isl_union_pw_qpolynomial_fold_copy((struct isl_union_pw_qpolynomial_fold *)v); -} - -static void isl_obj_union_pw_qpf_free(void *v) -{ - isl_union_pw_qpolynomial_fold_free((struct isl_union_pw_qpolynomial_fold *)v); -} - -static __isl_give isl_printer *isl_obj_union_pw_qpf_print( - __isl_take isl_printer *p, void *v) -{ - return isl_printer_print_union_pw_qpolynomial_fold(p, - (struct isl_union_pw_qpolynomial_fold *)v); -} - -static void *isl_obj_union_pw_qpf_add(void *v1, void *v2) -{ - return isl_union_pw_qpolynomial_fold_fold( - (struct isl_union_pw_qpolynomial_fold *)v1, - (struct isl_union_pw_qpolynomial_fold *)v2); -} - -struct isl_obj_vtable isl_obj_union_pw_qpolynomial_fold_vtable = { - isl_obj_union_pw_qpf_copy, - isl_obj_union_pw_qpf_add, - isl_obj_union_pw_qpf_print, - isl_obj_union_pw_qpf_free -}; diff --git a/cloog-0.17.0/isl/isl_options.c b/cloog-0.17.0/isl/isl_options.c deleted file mode 100644 index 35d8a46..0000000 --- a/cloog-0.17.0/isl/isl_options.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include - -#include -#include -#include - -struct isl_arg_choice isl_lp_solver_choice[] = { - {"tab", ISL_LP_TAB}, -#ifdef ISL_PIPLIB - {"pip", ISL_LP_PIP}, -#endif - {0} -}; - -struct isl_arg_choice isl_ilp_solver_choice[] = { - {"gbr", ISL_ILP_GBR}, -#ifdef ISL_PIPLIB - {"pip", ISL_ILP_PIP}, -#endif - {0} -}; - -struct isl_arg_choice isl_pip_solver_choice[] = { - {"tab", ISL_PIP_TAB}, -#ifdef ISL_PIPLIB - {"pip", ISL_PIP_PIP}, -#endif - {0} -}; - -struct isl_arg_choice isl_pip_context_choice[] = { - {"gbr", ISL_CONTEXT_GBR}, - {"lexmin", ISL_CONTEXT_LEXMIN}, - {0} -}; - -struct isl_arg_choice isl_gbr_choice[] = { - {"never", ISL_GBR_NEVER}, - {"once", ISL_GBR_ONCE}, - {"always", ISL_GBR_ALWAYS}, - {0} -}; - -struct isl_arg_choice isl_closure_choice[] = { - {"isl", ISL_CLOSURE_ISL}, - {"box", ISL_CLOSURE_BOX}, - {0} -}; - -static struct isl_arg_choice bound[] = { - {"bernstein", ISL_BOUND_BERNSTEIN}, - {"range", ISL_BOUND_RANGE}, - {0} -}; - -static struct isl_arg_choice on_error[] = { - {"warn", ISL_ON_ERROR_WARN}, - {"continue", ISL_ON_ERROR_CONTINUE}, - {"abort", ISL_ON_ERROR_ABORT}, - {0} -}; - -static struct isl_arg_flags bernstein_recurse[] = { - {"none", ISL_BERNSTEIN_FACTORS | ISL_BERNSTEIN_INTERVALS, 0}, - {"factors", ISL_BERNSTEIN_FACTORS | ISL_BERNSTEIN_INTERVALS, - ISL_BERNSTEIN_FACTORS}, - {"intervals", ISL_BERNSTEIN_FACTORS | ISL_BERNSTEIN_INTERVALS, - ISL_BERNSTEIN_INTERVALS}, - {"full", ISL_BERNSTEIN_FACTORS | ISL_BERNSTEIN_INTERVALS, - ISL_BERNSTEIN_FACTORS | ISL_BERNSTEIN_INTERVALS}, - {0} -}; - -static struct isl_arg_choice convex[] = { - {"wrap", ISL_CONVEX_HULL_WRAP}, - {"fm", ISL_CONVEX_HULL_FM}, - {0} -}; - -static void print_version(void) -{ - printf("%s", isl_version()); -} - -ISL_ARGS_START(struct isl_options, isl_options_args) -ISL_ARG_CHOICE(struct isl_options, lp_solver, 0, "lp-solver", \ - isl_lp_solver_choice, ISL_LP_TAB, "lp solver to use") -ISL_ARG_CHOICE(struct isl_options, ilp_solver, 0, "ilp-solver", \ - isl_ilp_solver_choice, ISL_ILP_GBR, "ilp solver to use") -ISL_ARG_CHOICE(struct isl_options, pip, 0, "pip", \ - isl_pip_solver_choice, ISL_PIP_TAB, "pip solver to use") -ISL_ARG_CHOICE(struct isl_options, context, 0, "context", \ - isl_pip_context_choice, ISL_CONTEXT_GBR, - "how to handle the pip context tableau") -ISL_ARG_CHOICE(struct isl_options, gbr, 0, "gbr", \ - isl_gbr_choice, ISL_GBR_ONCE, - "how often to use generalized basis reduction") -ISL_ARG_CHOICE(struct isl_options, closure, 0, "closure", \ - isl_closure_choice, ISL_CLOSURE_ISL, - "closure operation to use") -ISL_ARG_BOOL(struct isl_options, gbr_only_first, 0, "gbr-only-first", 0, - "only perform basis reduction in first direction") -ISL_ARG_CHOICE(struct isl_options, bound, 0, "bound", bound, - ISL_BOUND_BERNSTEIN, "algorithm to use for computing bounds") -ISL_ARG_CHOICE(struct isl_options, on_error, 0, "on-error", on_error, - ISL_ON_ERROR_WARN, "how to react if an error is detected") -ISL_ARG_FLAGS(struct isl_options, bernstein_recurse, 0, - "bernstein-recurse", bernstein_recurse, ISL_BERNSTEIN_FACTORS, NULL) -ISL_ARG_BOOL(struct isl_options, bernstein_triangulate, 0, - "bernstein-triangulate", 1, - "triangulate domains during Bernstein expansion") -ISL_ARG_BOOL(struct isl_options, pip_symmetry, 0, "pip-symmetry", 1, - "detect simple symmetries in PIP input") -ISL_ARG_CHOICE(struct isl_options, convex, 0, "convex-hull", \ - convex, ISL_CONVEX_HULL_WRAP, "convex hull algorithm to use") -ISL_ARG_INT(struct isl_options, schedule_max_constant_term, 0, - "schedule-max-constant-term", "limit", -1, "Only consider schedules " - "where the coefficients of the constant dimension do not exceed " - ". A value of -1 allows arbitrary coefficients.") -ISL_ARG_BOOL(struct isl_options, schedule_parametric, 0, - "schedule-parametric", 1, "construct possibly parametric schedules") -ISL_ARG_BOOL(struct isl_options, schedule_outer_zero_distance, 0, - "schedule-outer-zero-distance", 0, - "try to construct schedules with outer zero distances over " - "proximity dependences") -ISL_ARG_BOOL(struct isl_options, schedule_maximize_band_depth, 0, - "schedule-maximize-band-depth", 1, - "maximize the number of scheduling dimensions in a band") -ISL_ARG_BOOL(struct isl_options, schedule_split_parallel, 0, - "schedule-split-parallel", 1, - "split non-tilable bands with parallel schedules") -ISL_ARG_VERSION(print_version) -ISL_ARGS_END - -ISL_ARG_DEF(isl_options, struct isl_options, isl_options_args) - -ISL_ARG_CTX_DEF(isl_options, struct isl_options, isl_options_args) - -ISL_CTX_SET_CHOICE_DEF(isl_options, struct isl_options, isl_options_args, bound) -ISL_CTX_GET_CHOICE_DEF(isl_options, struct isl_options, isl_options_args, bound) - -ISL_CTX_SET_CHOICE_DEF(isl_options, struct isl_options, isl_options_args, - on_error) -ISL_CTX_GET_CHOICE_DEF(isl_options, struct isl_options, isl_options_args, - on_error) - -ISL_CTX_SET_BOOL_DEF(isl_options, struct isl_options, isl_options_args, - gbr_only_first) -ISL_CTX_GET_BOOL_DEF(isl_options, struct isl_options, isl_options_args, - gbr_only_first) - -ISL_CTX_SET_INT_DEF(isl_options, struct isl_options, isl_options_args, - schedule_max_constant_term) -ISL_CTX_GET_INT_DEF(isl_options, struct isl_options, isl_options_args, - schedule_max_constant_term) - -ISL_CTX_SET_BOOL_DEF(isl_options, struct isl_options, isl_options_args, - schedule_maximize_band_depth) -ISL_CTX_GET_BOOL_DEF(isl_options, struct isl_options, isl_options_args, - schedule_maximize_band_depth) - -ISL_CTX_SET_BOOL_DEF(isl_options, struct isl_options, isl_options_args, - schedule_outer_zero_distance) -ISL_CTX_GET_BOOL_DEF(isl_options, struct isl_options, isl_options_args, - schedule_outer_zero_distance) diff --git a/cloog-0.17.0/isl/isl_options_private.h b/cloog-0.17.0/isl/isl_options_private.h deleted file mode 100644 index 6cbd882..0000000 --- a/cloog-0.17.0/isl/isl_options_private.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef ISL_OPTIONS_PRIVATE_H -#define ISL_OPTIONS_PRIVATE_H - -#include - -struct isl_options { - #define ISL_LP_TAB 0 - #define ISL_LP_PIP 1 - unsigned lp_solver; - - #define ISL_ILP_GBR 0 - #define ISL_ILP_PIP 1 - unsigned ilp_solver; - - #define ISL_PIP_TAB 0 - #define ISL_PIP_PIP 1 - unsigned pip; - - #define ISL_CONTEXT_GBR 0 - #define ISL_CONTEXT_LEXMIN 1 - unsigned context; - - #define ISL_GBR_NEVER 0 - #define ISL_GBR_ONCE 1 - #define ISL_GBR_ALWAYS 2 - unsigned gbr; - unsigned gbr_only_first; - - #define ISL_CLOSURE_ISL 0 - #define ISL_CLOSURE_BOX 1 - unsigned closure; - - int bound; - unsigned on_error; - - #define ISL_BERNSTEIN_FACTORS 1 - #define ISL_BERNSTEIN_INTERVALS 2 - int bernstein_recurse; - - int bernstein_triangulate; - - int pip_symmetry; - - #define ISL_CONVEX_HULL_WRAP 0 - #define ISL_CONVEX_HULL_FM 1 - int convex; - - int schedule_max_constant_term; - int schedule_parametric; - int schedule_outer_zero_distance; - int schedule_maximize_band_depth; - int schedule_split_parallel; -}; - -#endif diff --git a/cloog-0.17.0/isl/isl_output.c b/cloog-0.17.0/isl/isl_output.c deleted file mode 100644 index 6883e7f..0000000 --- a/cloog-0.17.0/isl/isl_output.c +++ /dev/null @@ -1,2389 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static const char *s_to[2] = { " -> ", " \\to " }; -static const char *s_and[2] = { " and ", " \\wedge " }; -static const char *s_or[2] = { " or ", " \\vee " }; -static const char *s_le[2] = { "<=", "\\le" }; -static const char *s_ge[2] = { ">=", "\\ge" }; -static const char *s_open_set[2] = { "{ ", "\\{\\, " }; -static const char *s_close_set[2] = { " }", " \\,\\}" }; -static const char *s_open_list[2] = { "[", "(" }; -static const char *s_close_list[2] = { "]", ")" }; -static const char *s_such_that[2] = { " : ", " \\mid " }; -static const char *s_open_exists[2] = { "exists (", "\\exists \\, " }; -static const char *s_close_exists[2] = { ")", "" }; -static const char *s_div_prefix[2] = { "e", "\\alpha_" }; -static const char *s_param_prefix[2] = { "p", "p_" }; -static const char *s_input_prefix[2] = { "i", "i_" }; -static const char *s_output_prefix[2] = { "o", "o_" }; - -static __isl_give isl_printer *print_constraint_polylib( - struct isl_basic_map *bmap, int ineq, int n, __isl_take isl_printer *p) -{ - int i; - unsigned n_in = isl_basic_map_dim(bmap, isl_dim_in); - unsigned n_out = isl_basic_map_dim(bmap, isl_dim_out); - unsigned nparam = isl_basic_map_dim(bmap, isl_dim_param); - isl_int *c = ineq ? bmap->ineq[n] : bmap->eq[n]; - - p = isl_printer_start_line(p); - p = isl_printer_print_int(p, ineq); - for (i = 0; i < n_out; ++i) { - p = isl_printer_print_str(p, " "); - p = isl_printer_print_isl_int(p, c[1+nparam+n_in+i]); - } - for (i = 0; i < n_in; ++i) { - p = isl_printer_print_str(p, " "); - p = isl_printer_print_isl_int(p, c[1+nparam+i]); - } - for (i = 0; i < bmap->n_div; ++i) { - p = isl_printer_print_str(p, " "); - p = isl_printer_print_isl_int(p, c[1+nparam+n_in+n_out+i]); - } - for (i = 0; i < nparam; ++i) { - p = isl_printer_print_str(p, " "); - p = isl_printer_print_isl_int(p, c[1+i]); - } - p = isl_printer_print_str(p, " "); - p = isl_printer_print_isl_int(p, c[0]); - p = isl_printer_end_line(p); - return p; -} - -static __isl_give isl_printer *print_constraints_polylib( - struct isl_basic_map *bmap, __isl_take isl_printer *p) -{ - int i; - - p = isl_printer_set_isl_int_width(p, 5); - - for (i = 0; i < bmap->n_eq; ++i) - p = print_constraint_polylib(bmap, 0, i, p); - for (i = 0; i < bmap->n_ineq; ++i) - p = print_constraint_polylib(bmap, 1, i, p); - - return p; -} - -static __isl_give isl_printer *bset_print_constraints_polylib( - struct isl_basic_set *bset, __isl_take isl_printer *p) -{ - return print_constraints_polylib((struct isl_basic_map *)bset, p); -} - -static __isl_give isl_printer *isl_basic_map_print_polylib( - __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p, int ext) -{ - unsigned total = isl_basic_map_total_dim(bmap); - p = isl_printer_start_line(p); - p = isl_printer_print_int(p, bmap->n_eq + bmap->n_ineq); - p = isl_printer_print_str(p, " "); - p = isl_printer_print_int(p, 1 + total + 1); - if (ext) { - p = isl_printer_print_str(p, " "); - p = isl_printer_print_int(p, - isl_basic_map_dim(bmap, isl_dim_out)); - p = isl_printer_print_str(p, " "); - p = isl_printer_print_int(p, - isl_basic_map_dim(bmap, isl_dim_in)); - p = isl_printer_print_str(p, " "); - p = isl_printer_print_int(p, - isl_basic_map_dim(bmap, isl_dim_div)); - p = isl_printer_print_str(p, " "); - p = isl_printer_print_int(p, - isl_basic_map_dim(bmap, isl_dim_param)); - } - p = isl_printer_end_line(p); - return print_constraints_polylib(bmap, p); -} - -static __isl_give isl_printer *isl_basic_set_print_polylib( - __isl_keep isl_basic_set *bset, __isl_take isl_printer *p, int ext) -{ - return isl_basic_map_print_polylib((struct isl_basic_map *)bset, p, ext); -} - -static __isl_give isl_printer *isl_map_print_polylib(__isl_keep isl_map *map, - __isl_take isl_printer *p, int ext) -{ - int i; - - p = isl_printer_start_line(p); - p = isl_printer_print_int(p, map->n); - p = isl_printer_end_line(p); - for (i = 0; i < map->n; ++i) { - p = isl_printer_start_line(p); - p = isl_printer_end_line(p); - p = isl_basic_map_print_polylib(map->p[i], p, ext); - } - return p; -} - -static __isl_give isl_printer *isl_set_print_polylib(__isl_keep isl_set *set, - __isl_take isl_printer *p, int ext) -{ - return isl_map_print_polylib((struct isl_map *)set, p, ext); -} - -static int count_same_name(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos, const char *name) -{ - enum isl_dim_type t; - unsigned p, s; - int count = 0; - - for (t = isl_dim_param; t <= type && t <= isl_dim_out; ++t) { - s = t == type ? pos : isl_space_dim(dim, t); - for (p = 0; p < s; ++p) { - const char *n = isl_space_get_dim_name(dim, t, p); - if (n && !strcmp(n, name)) - count++; - } - } - return count; -} - -static __isl_give isl_printer *print_name(__isl_keep isl_space *dim, - __isl_take isl_printer *p, enum isl_dim_type type, unsigned pos, - int latex) -{ - const char *name; - char buffer[20]; - int primes; - - name = type == isl_dim_div ? NULL : isl_space_get_dim_name(dim, type, pos); - - if (!name) { - const char *prefix; - if (type == isl_dim_param) - prefix = s_param_prefix[latex]; - else if (type == isl_dim_div) - prefix = s_div_prefix[latex]; - else if (isl_space_is_set(dim) || type == isl_dim_in) - prefix = s_input_prefix[latex]; - else - prefix = s_output_prefix[latex]; - snprintf(buffer, sizeof(buffer), "%s%d", prefix, pos); - name = buffer; - } - primes = count_same_name(dim, name == buffer ? isl_dim_div : type, - pos, name); - p = isl_printer_print_str(p, name); - while (primes-- > 0) - p = isl_printer_print_str(p, "'"); - return p; -} - -static enum isl_dim_type pos2type(__isl_keep isl_space *dim, unsigned *pos) -{ - enum isl_dim_type type; - unsigned n_in = isl_space_dim(dim, isl_dim_in); - unsigned n_out = isl_space_dim(dim, isl_dim_out); - unsigned nparam = isl_space_dim(dim, isl_dim_param); - - if (*pos < 1 + nparam) { - type = isl_dim_param; - *pos -= 1; - } else if (*pos < 1 + nparam + n_in) { - type = isl_dim_in; - *pos -= 1 + nparam; - } else if (*pos < 1 + nparam + n_in + n_out) { - type = isl_dim_out; - *pos -= 1 + nparam + n_in; - } else { - type = isl_dim_div; - *pos -= 1 + nparam + n_in + n_out; - } - - return type; -} - -static __isl_give isl_printer *print_div(__isl_keep isl_space *dim, - __isl_keep isl_mat *div, int pos, __isl_take isl_printer *p); - -static __isl_give isl_printer *print_term(__isl_keep isl_space *dim, - __isl_keep isl_mat *div, - isl_int c, unsigned pos, __isl_take isl_printer *p, int latex) -{ - enum isl_dim_type type; - int print_div_def; - - if (pos == 0) - return isl_printer_print_isl_int(p, c); - - type = pos2type(dim, &pos); - print_div_def = type == isl_dim_div && div && - !isl_int_is_zero(div->row[pos][0]); - - if (isl_int_is_one(c)) - ; - else if (isl_int_is_negone(c)) - p = isl_printer_print_str(p, "-"); - else { - p = isl_printer_print_isl_int(p, c); - if (p->output_format == ISL_FORMAT_C || print_div_def) - p = isl_printer_print_str(p, "*"); - } - if (print_div_def) - p = print_div(dim, div, pos, p); - else - p = print_name(dim, p, type, pos, latex); - return p; -} - -static __isl_give isl_printer *print_affine_of_len(__isl_keep isl_space *dim, - __isl_keep isl_mat *div, - __isl_take isl_printer *p, isl_int *c, int len) -{ - int i; - int first; - - for (i = 0, first = 1; i < len; ++i) { - int flip = 0; - if (isl_int_is_zero(c[i])) - continue; - if (!first) { - if (isl_int_is_neg(c[i])) { - flip = 1; - isl_int_neg(c[i], c[i]); - p = isl_printer_print_str(p, " - "); - } else - p = isl_printer_print_str(p, " + "); - } - first = 0; - p = print_term(dim, div, c[i], i, p, 0); - if (flip) - isl_int_neg(c[i], c[i]); - } - if (first) - p = isl_printer_print_str(p, "0"); - return p; -} - -static __isl_give isl_printer *print_affine(__isl_keep isl_basic_map *bmap, - __isl_keep isl_space *dim, __isl_take isl_printer *p, isl_int *c) -{ - unsigned len = 1 + isl_basic_map_total_dim(bmap); - return print_affine_of_len(dim, NULL, p, c, len); -} - -static int defining_equality(__isl_keep isl_basic_map *eq, - __isl_keep isl_space *dim, enum isl_dim_type type, int pos) -{ - int i; - unsigned total; - - if (!eq) - return -1; - - pos += isl_space_offset(dim, type); - total = isl_basic_map_total_dim(eq); - - for (i = 0; i < eq->n_eq; ++i) { - if (isl_seq_last_non_zero(eq->eq[i] + 1, total) != pos) - continue; - if (isl_int_is_one(eq->eq[i][1 + pos])) - isl_seq_neg(eq->eq[i], eq->eq[i], 1 + total); - return i; - } - - return -1; -} - -static __isl_give isl_printer *print_aff_body(__isl_take isl_printer *p, - __isl_keep isl_aff *aff); - -/* offset is the offset of local_dim inside global_type of global_dim. - */ -static __isl_give isl_printer *print_nested_var_list(__isl_take isl_printer *p, - __isl_keep isl_space *global_dim, enum isl_dim_type global_type, - __isl_keep isl_space *local_dim, enum isl_dim_type local_type, - int latex, __isl_keep isl_basic_map *eq, - __isl_keep isl_multi_aff *maff, int offset) -{ - int i, j; - - if (global_dim != local_dim && local_type == isl_dim_out) - offset += local_dim->n_in; - - for (i = 0; i < isl_space_dim(local_dim, local_type); ++i) { - if (i) - p = isl_printer_print_str(p, ", "); - if (maff && global_type == isl_dim_out) { - p = print_aff_body(p, maff->p[offset + i]); - continue; - } - j = defining_equality(eq, global_dim, global_type, offset + i); - if (j >= 0) { - int pos = 1 + isl_space_offset(global_dim, global_type) - + offset + i; - p = print_affine_of_len(eq->dim, NULL, - p, eq->eq[j], pos); - } else { - p = print_name(global_dim, p, global_type, offset + i, - latex); - } - } - return p; -} - -static __isl_give isl_printer *print_var_list(__isl_keep isl_space *dim, - __isl_take isl_printer *p, enum isl_dim_type type, - int latex, __isl_keep isl_basic_map *eq, __isl_keep isl_multi_aff *maff) -{ - return print_nested_var_list(p, dim, type, dim, type, latex, - eq, maff, 0); -} - -static __isl_give isl_printer *print_nested_map_dim(__isl_take isl_printer *p, - __isl_keep isl_space *global_dim, enum isl_dim_type global_type, - __isl_keep isl_space *local_dim, - int latex, __isl_keep isl_basic_map *eq, - __isl_keep isl_multi_aff *maff, int offset); - -static __isl_give isl_printer *print_nested_tuple(__isl_take isl_printer *p, - __isl_keep isl_space *global_dim, enum isl_dim_type global_type, - __isl_keep isl_space *local_dim, enum isl_dim_type local_type, - int latex, __isl_keep isl_basic_map *eq, - __isl_keep isl_multi_aff *maff, int offset) -{ - const char *name = NULL; - unsigned n = isl_space_dim(local_dim, local_type); - if ((local_type == isl_dim_in || local_type == isl_dim_out)) { - name = isl_space_get_tuple_name(local_dim, local_type); - if (name) { - if (latex) - p = isl_printer_print_str(p, "\\mathrm{"); - p = isl_printer_print_str(p, name); - if (latex) - p = isl_printer_print_str(p, "}"); - } - } - if (!latex || n != 1 || name) - p = isl_printer_print_str(p, s_open_list[latex]); - if ((local_type == isl_dim_in || local_type == isl_dim_out) && - local_dim->nested[local_type - isl_dim_in]) { - if (global_dim != local_dim && local_type == isl_dim_out) - offset += local_dim->n_in; - p = print_nested_map_dim(p, global_dim, global_type, - local_dim->nested[local_type - isl_dim_in], - latex, eq, maff, offset); - } else - p = print_nested_var_list(p, global_dim, global_type, - local_dim, local_type, latex, - eq, maff, offset); - if (!latex || n != 1 || name) - p = isl_printer_print_str(p, s_close_list[latex]); - return p; -} - -static __isl_give isl_printer *print_tuple(__isl_keep isl_space *dim, - __isl_take isl_printer *p, enum isl_dim_type type, - int latex, __isl_keep isl_basic_map *eq, __isl_keep isl_multi_aff *maff) -{ - return print_nested_tuple(p, dim, type, dim, type, latex, eq, maff, 0); -} - -static __isl_give isl_printer *print_nested_map_dim(__isl_take isl_printer *p, - __isl_keep isl_space *global_dim, enum isl_dim_type global_type, - __isl_keep isl_space *local_dim, - int latex, __isl_keep isl_basic_map *eq, - __isl_keep isl_multi_aff *maff, int offset) -{ - p = print_nested_tuple(p, global_dim, global_type, - local_dim, isl_dim_in, latex, eq, maff, offset); - p = isl_printer_print_str(p, s_to[latex]); - p = print_nested_tuple(p, global_dim, global_type, - local_dim, isl_dim_out, latex, eq, maff, offset); - - return p; -} - -static __isl_give isl_printer *print_space(__isl_keep isl_space *dim, - __isl_take isl_printer *p, int latex, int rational, - __isl_keep isl_basic_map *eq, __isl_keep isl_multi_aff *maff) -{ - if (rational && !latex) - p = isl_printer_print_str(p, "rat: "); - if (isl_space_is_params(dim)) - ; - else if (isl_space_is_set(dim)) - p = print_tuple(dim, p, isl_dim_set, latex, eq, maff); - else { - p = print_tuple(dim, p, isl_dim_in, latex, eq, maff); - p = isl_printer_print_str(p, s_to[latex]); - p = print_tuple(dim, p, isl_dim_out, latex, eq, maff); - } - - return p; -} - -static __isl_give isl_printer *print_omega_parameters(__isl_keep isl_space *dim, - __isl_take isl_printer *p) -{ - if (isl_space_dim(dim, isl_dim_param) == 0) - return p; - - p = isl_printer_start_line(p); - p = isl_printer_print_str(p, "symbolic "); - p = print_var_list(dim, p, isl_dim_param, 0, NULL, NULL); - p = isl_printer_print_str(p, ";"); - p = isl_printer_end_line(p); - return p; -} - -static __isl_give isl_printer *print_constraint(struct isl_basic_map *bmap, - __isl_keep isl_space *dim, __isl_take isl_printer *p, - isl_int *c, int last, const char *op, int first_constraint, int latex) -{ - if (!first_constraint) - p = isl_printer_print_str(p, s_and[latex]); - - isl_int_abs(c[last], c[last]); - - p = print_term(dim, NULL, c[last], last, p, latex); - - p = isl_printer_print_str(p, " "); - p = isl_printer_print_str(p, op); - p = isl_printer_print_str(p, " "); - - isl_int_set_si(c[last], 0); - p = print_affine(bmap, dim, p, c); - - return p; -} - -static __isl_give isl_printer *print_constraints(__isl_keep isl_basic_map *bmap, - __isl_keep isl_space *dim, __isl_take isl_printer *p, int latex) -{ - int i; - struct isl_vec *c; - unsigned total = isl_basic_map_total_dim(bmap); - - c = isl_vec_alloc(bmap->ctx, 1 + total); - if (!c) - goto error; - - for (i = bmap->n_eq - 1; i >= 0; --i) { - int l = isl_seq_last_non_zero(bmap->eq[i], 1 + total); - if (l < 0) { - if (i != bmap->n_eq - 1) - p = isl_printer_print_str(p, s_and[latex]); - p = isl_printer_print_str(p, "0 = 0"); - continue; - } - if (isl_int_is_neg(bmap->eq[i][l])) - isl_seq_cpy(c->el, bmap->eq[i], 1 + total); - else - isl_seq_neg(c->el, bmap->eq[i], 1 + total); - p = print_constraint(bmap, dim, p, c->el, l, - "=", i == bmap->n_eq - 1, latex); - } - for (i = 0; i < bmap->n_ineq; ++i) { - int l = isl_seq_last_non_zero(bmap->ineq[i], 1 + total); - int s; - const char *op; - if (l < 0) - continue; - s = isl_int_sgn(bmap->ineq[i][l]); - if (s < 0) - isl_seq_cpy(c->el, bmap->ineq[i], 1 + total); - else - isl_seq_neg(c->el, bmap->ineq[i], 1 + total); - op = s < 0 ? s_le[latex] : s_ge[latex]; - p = print_constraint(bmap, dim, p, c->el, l, - op, !bmap->n_eq && !i, latex); - } - - isl_vec_free(c); - - return p; -error: - isl_vec_free(c); - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_omega_constraints( - __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p) -{ - if (bmap->n_eq + bmap->n_ineq == 0) - return p; - - p = isl_printer_print_str(p, ": "); - if (bmap->n_div > 0) { - int i; - p = isl_printer_print_str(p, "exists ("); - for (i = 0; i < bmap->n_div; ++i) { - if (i) - p = isl_printer_print_str(p, ", "); - p = print_name(bmap->dim, p, isl_dim_div, i, 0); - } - p = isl_printer_print_str(p, ": "); - } - p = print_constraints(bmap, bmap->dim, p, 0); - if (bmap->n_div > 0) - p = isl_printer_print_str(p, ")"); - return p; -} - -static __isl_give isl_printer *basic_map_print_omega( - __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p) -{ - p = isl_printer_print_str(p, "{ ["); - p = print_var_list(bmap->dim, p, isl_dim_in, 0, NULL, NULL); - p = isl_printer_print_str(p, "] -> ["); - p = print_var_list(bmap->dim, p, isl_dim_out, 0, NULL, NULL); - p = isl_printer_print_str(p, "] "); - p = print_omega_constraints(bmap, p); - p = isl_printer_print_str(p, " }"); - return p; -} - -static __isl_give isl_printer *isl_basic_map_print_omega( - __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p) -{ - p = print_omega_parameters(bmap->dim, p); - - p = isl_printer_start_line(p); - p = basic_map_print_omega(bmap, p); - p = isl_printer_end_line(p); - return p; -} - -static __isl_give isl_printer *basic_set_print_omega( - __isl_keep isl_basic_set *bset, __isl_take isl_printer *p) -{ - p = isl_printer_print_str(p, "{ ["); - p = print_var_list(bset->dim, p, isl_dim_set, 0, NULL, NULL); - p = isl_printer_print_str(p, "] "); - p = print_omega_constraints((isl_basic_map *)bset, p); - p = isl_printer_print_str(p, " }"); - return p; -} - -static __isl_give isl_printer *isl_basic_set_print_omega( - __isl_keep isl_basic_set *bset, __isl_take isl_printer *p) -{ - p = print_omega_parameters(bset->dim, p); - - p = isl_printer_start_line(p); - p = basic_set_print_omega(bset, p); - p = isl_printer_end_line(p); - return p; -} - -static __isl_give isl_printer *isl_map_print_omega(__isl_keep isl_map *map, - __isl_take isl_printer *p) -{ - int i; - - p = print_omega_parameters(map->dim, p); - - p = isl_printer_start_line(p); - for (i = 0; i < map->n; ++i) { - if (i) - p = isl_printer_print_str(p, " union "); - p = basic_map_print_omega(map->p[i], p); - } - p = isl_printer_end_line(p); - return p; -} - -static __isl_give isl_printer *isl_set_print_omega(__isl_keep isl_set *set, - __isl_take isl_printer *p) -{ - int i; - - p = print_omega_parameters(set->dim, p); - - p = isl_printer_start_line(p); - for (i = 0; i < set->n; ++i) { - if (i) - p = isl_printer_print_str(p, " union "); - p = basic_set_print_omega(set->p[i], p); - } - p = isl_printer_end_line(p); - return p; -} - -static __isl_give isl_printer *print_disjunct(__isl_keep isl_basic_map *bmap, - __isl_keep isl_space *dim, __isl_take isl_printer *p, int latex) -{ - if (bmap->n_div > 0) { - int i; - p = isl_printer_print_str(p, s_open_exists[latex]); - for (i = 0; i < bmap->n_div; ++i) { - if (i) - p = isl_printer_print_str(p, ", "); - p = print_name(dim, p, isl_dim_div, i, latex); - if (latex || isl_int_is_zero(bmap->div[i][0])) - continue; - p = isl_printer_print_str(p, " = [("); - p = print_affine(bmap, dim, p, bmap->div[i] + 1); - p = isl_printer_print_str(p, ")/"); - p = isl_printer_print_isl_int(p, bmap->div[i][0]); - p = isl_printer_print_str(p, "]"); - } - p = isl_printer_print_str(p, ": "); - } - - p = print_constraints(bmap, dim, p, latex); - - if (bmap->n_div > 0) - p = isl_printer_print_str(p, s_close_exists[latex]); - return p; -} - -static __isl_give isl_printer *isl_basic_map_print_isl( - __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p, - int latex) -{ - int rational = ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL); - if (isl_basic_map_dim(bmap, isl_dim_param) > 0) { - p = print_tuple(bmap->dim, p, isl_dim_param, latex, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - p = print_space(bmap->dim, p, latex, rational, NULL, NULL); - p = isl_printer_print_str(p, " : "); - p = print_disjunct(bmap, bmap->dim, p, latex); - p = isl_printer_print_str(p, " }"); - return p; -} - -static __isl_give isl_printer *print_disjuncts(__isl_keep isl_map *map, - __isl_take isl_printer *p, int latex) -{ - int i; - - if (isl_map_plain_is_universe(map)) - return p; - - p = isl_printer_print_str(p, s_such_that[latex]); - if (map->n == 0) - p = isl_printer_print_str(p, "1 = 0"); - for (i = 0; i < map->n; ++i) { - if (i) - p = isl_printer_print_str(p, s_or[latex]); - if (map->n > 1 && map->p[i]->n_eq + map->p[i]->n_ineq > 1) - p = isl_printer_print_str(p, "("); - p = print_disjunct(map->p[i], map->dim, p, latex); - if (map->n > 1 && map->p[i]->n_eq + map->p[i]->n_ineq > 1) - p = isl_printer_print_str(p, ")"); - } - return p; -} - -/* Print the disjuncts of a map (or set). - * If the map turns out to be a universal parameter domain, then - * we need to print the colon. Otherwise, the output looks identical - * to the empty set. - */ -static __isl_give isl_printer *print_disjuncts_map(__isl_keep isl_map *map, - __isl_take isl_printer *p, int latex) -{ - if (isl_map_plain_is_universe(map) && isl_space_is_params(map->dim)) - return isl_printer_print_str(p, s_such_that[latex]); - else - return print_disjuncts(map, p, latex); -} - -struct isl_aff_split { - isl_basic_map *aff; - isl_map *map; -}; - -static void free_split(__isl_take struct isl_aff_split *split, int n) -{ - int i; - - if (!split) - return; - - for (i = 0; i < n; ++i) { - isl_basic_map_free(split[i].aff); - isl_map_free(split[i].map); - } - - free(split); -} - -static __isl_give isl_basic_map *get_aff(__isl_take isl_basic_map *bmap) -{ - int i, j; - unsigned nparam, n_in, n_out, total; - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - return NULL; - if (isl_basic_map_free_inequality(bmap, bmap->n_ineq) < 0) - goto error; - - nparam = isl_basic_map_dim(bmap, isl_dim_param); - n_in = isl_basic_map_dim(bmap, isl_dim_in); - n_out = isl_basic_map_dim(bmap, isl_dim_out); - total = isl_basic_map_dim(bmap, isl_dim_all); - for (i = bmap->n_eq - 1; i >= 0; --i) { - j = isl_seq_last_non_zero(bmap->eq[i] + 1, total); - if (j >= nparam && j < nparam + n_in + n_out && - (isl_int_is_one(bmap->eq[i][1 + j]) || - isl_int_is_negone(bmap->eq[i][1 + j]))) - continue; - if (isl_basic_map_drop_equality(bmap, i) < 0) - goto error; - } - - bmap = isl_basic_map_finalize(bmap); - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static int aff_split_cmp(const void *p1, const void *p2) -{ - const struct isl_aff_split *s1, *s2; - s1 = (const struct isl_aff_split *) p1; - s2 = (const struct isl_aff_split *) p2; - - return isl_basic_map_plain_cmp(s1->aff, s2->aff); -} - -static __isl_give isl_basic_map *drop_aff(__isl_take isl_basic_map *bmap, - __isl_keep isl_basic_map *aff) -{ - int i, j; - unsigned total; - - if (!bmap || !aff) - goto error; - - total = isl_space_dim(bmap->dim, isl_dim_all); - - for (i = bmap->n_eq - 1; i >= 0; --i) { - if (isl_seq_first_non_zero(bmap->eq[i] + 1 + total, - bmap->n_div) != -1) - continue; - for (j = 0; j < aff->n_eq; ++j) { - if (!isl_seq_eq(bmap->eq[i], aff->eq[j], 1 + total) && - !isl_seq_is_neg(bmap->eq[i], aff->eq[j], 1 + total)) - continue; - if (isl_basic_map_drop_equality(bmap, i) < 0) - goto error; - break; - } - } - - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -static __isl_give struct isl_aff_split *split_aff(__isl_keep isl_map *map) -{ - int i, n; - struct isl_aff_split *split; - isl_ctx *ctx; - - ctx = isl_map_get_ctx(map); - split = isl_calloc_array(ctx, struct isl_aff_split, map->n); - if (!split) - return NULL; - - for (i = 0; i < map->n; ++i) { - isl_basic_map *bmap; - split[i].aff = get_aff(isl_basic_map_copy(map->p[i])); - bmap = isl_basic_map_copy(map->p[i]); - bmap = isl_basic_map_cow(bmap); - bmap = drop_aff(bmap, split[i].aff); - split[i].map = isl_map_from_basic_map(bmap); - if (!split[i].aff || !split[i].map) - goto error; - } - - qsort(split, map->n, sizeof(struct isl_aff_split), &aff_split_cmp); - - n = map->n; - for (i = n - 1; i >= 1; --i) { - if (!isl_basic_map_plain_is_equal(split[i - 1].aff, - split[i].aff)) - continue; - isl_basic_map_free(split[i].aff); - split[i - 1].map = isl_map_union(split[i - 1].map, - split[i].map); - if (i != n - 1) - split[i] = split[n - 1]; - split[n - 1].aff = NULL; - split[n - 1].map = NULL; - --n; - } - - return split; -error: - free_split(split, map->n); - return NULL; -} - -static __isl_give isl_printer *print_split_map(__isl_take isl_printer *p, - struct isl_aff_split *split, int n) -{ - int i; - int rational; - - for (i = 0; i < n; ++i) { - isl_space *dim; - - if (!split[i].map) - break; - dim = split[i].map->dim; - rational = split[i].map->n > 0 && - ISL_F_ISSET(split[i].map->p[0], ISL_BASIC_MAP_RATIONAL); - if (i) - p = isl_printer_print_str(p, "; "); - p = print_space(dim, p, 0, rational, split[i].aff, NULL); - p = print_disjuncts_map(split[i].map, p, 0); - } - - return p; -} - -static __isl_give isl_printer *isl_map_print_isl_body(__isl_keep isl_map *map, - __isl_take isl_printer *p) -{ - struct isl_aff_split *split = NULL; - int rational; - - if (map->n > 0) - split = split_aff(map); - if (split) { - p = print_split_map(p, split, map->n); - } else { - rational = map->n > 0 && - ISL_F_ISSET(map->p[0], ISL_BASIC_MAP_RATIONAL); - p = print_space(map->dim, p, 0, rational, NULL, NULL); - p = print_disjuncts_map(map, p, 0); - } - free_split(split, map->n); - return p; -} - -static __isl_give isl_printer *isl_map_print_isl(__isl_keep isl_map *map, - __isl_take isl_printer *p) -{ - if (isl_map_dim(map, isl_dim_param) > 0) { - p = print_tuple(map->dim, p, isl_dim_param, 0, NULL, NULL); - p = isl_printer_print_str(p, s_to[0]); - } - p = isl_printer_print_str(p, s_open_set[0]); - p = isl_map_print_isl_body(map, p); - p = isl_printer_print_str(p, s_close_set[0]); - return p; -} - -static __isl_give isl_printer *print_latex_map(__isl_keep isl_map *map, - __isl_take isl_printer *p, __isl_keep isl_basic_map *aff) -{ - if (isl_map_dim(map, isl_dim_param) > 0) { - p = print_tuple(map->dim, p, isl_dim_param, 1, NULL, NULL); - p = isl_printer_print_str(p, s_to[1]); - } - p = isl_printer_print_str(p, s_open_set[1]); - p = print_space(map->dim, p, 1, 0, aff, NULL); - p = print_disjuncts_map(map, p, 1); - p = isl_printer_print_str(p, s_close_set[1]); - - return p; -} - -static __isl_give isl_printer *isl_map_print_latex(__isl_keep isl_map *map, - __isl_take isl_printer *p) -{ - int i; - struct isl_aff_split *split = NULL; - - if (map->n > 0) - split = split_aff(map); - - if (!split) - return print_latex_map(map, p, NULL); - - for (i = 0; i < map->n; ++i) { - if (!split[i].map) - break; - if (i) - p = isl_printer_print_str(p, " \\cup "); - p = print_latex_map(split[i].map, p, split[i].aff); - } - - free_split(split, map->n); - return p; -} - -__isl_give isl_printer *isl_printer_print_basic_map(__isl_take isl_printer *p, - __isl_keep isl_basic_map *bmap) -{ - if (!p || !bmap) - goto error; - if (p->output_format == ISL_FORMAT_ISL) - return isl_basic_map_print_isl(bmap, p, 0); - else if (p->output_format == ISL_FORMAT_OMEGA) - return isl_basic_map_print_omega(bmap, p); - isl_assert(bmap->ctx, 0, goto error); -error: - isl_printer_free(p); - return NULL; -} - -void isl_basic_map_print(__isl_keep isl_basic_map *bmap, FILE *out, int indent, - const char *prefix, const char *suffix, unsigned output_format) -{ - isl_printer *printer; - - if (!bmap) - return; - - printer = isl_printer_to_file(bmap->ctx, out); - printer = isl_printer_set_indent(printer, indent); - printer = isl_printer_set_prefix(printer, prefix); - printer = isl_printer_set_suffix(printer, suffix); - printer = isl_printer_set_output_format(printer, output_format); - isl_printer_print_basic_map(printer, bmap); - - isl_printer_free(printer); -} - -__isl_give isl_printer *isl_printer_print_basic_set(__isl_take isl_printer *p, - __isl_keep isl_basic_set *bset) -{ - if (!p || !bset) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return isl_basic_map_print_isl(bset, p, 0); - else if (p->output_format == ISL_FORMAT_POLYLIB) - return isl_basic_set_print_polylib(bset, p, 0); - else if (p->output_format == ISL_FORMAT_EXT_POLYLIB) - return isl_basic_set_print_polylib(bset, p, 1); - else if (p->output_format == ISL_FORMAT_POLYLIB_CONSTRAINTS) - return bset_print_constraints_polylib(bset, p); - else if (p->output_format == ISL_FORMAT_OMEGA) - return isl_basic_set_print_omega(bset, p); - isl_assert(p->ctx, 0, goto error); -error: - isl_printer_free(p); - return NULL; -} - -void isl_basic_set_print(struct isl_basic_set *bset, FILE *out, int indent, - const char *prefix, const char *suffix, unsigned output_format) -{ - isl_printer *printer; - - if (!bset) - return; - - printer = isl_printer_to_file(bset->ctx, out); - printer = isl_printer_set_indent(printer, indent); - printer = isl_printer_set_prefix(printer, prefix); - printer = isl_printer_set_suffix(printer, suffix); - printer = isl_printer_set_output_format(printer, output_format); - isl_printer_print_basic_set(printer, bset); - - isl_printer_free(printer); -} - -__isl_give isl_printer *isl_printer_print_set(__isl_take isl_printer *p, - __isl_keep isl_set *set) -{ - if (!p || !set) - goto error; - if (p->output_format == ISL_FORMAT_ISL) - return isl_map_print_isl((isl_map *)set, p); - else if (p->output_format == ISL_FORMAT_POLYLIB) - return isl_set_print_polylib(set, p, 0); - else if (p->output_format == ISL_FORMAT_EXT_POLYLIB) - return isl_set_print_polylib(set, p, 1); - else if (p->output_format == ISL_FORMAT_OMEGA) - return isl_set_print_omega(set, p); - else if (p->output_format == ISL_FORMAT_LATEX) - return isl_map_print_latex((isl_map *)set, p); - isl_assert(set->ctx, 0, goto error); -error: - isl_printer_free(p); - return NULL; -} - -void isl_set_print(struct isl_set *set, FILE *out, int indent, - unsigned output_format) -{ - isl_printer *printer; - - if (!set) - return; - - printer = isl_printer_to_file(set->ctx, out); - printer = isl_printer_set_indent(printer, indent); - printer = isl_printer_set_output_format(printer, output_format); - printer = isl_printer_print_set(printer, set); - - isl_printer_free(printer); -} - -__isl_give isl_printer *isl_printer_print_map(__isl_take isl_printer *p, - __isl_keep isl_map *map) -{ - if (!p || !map) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return isl_map_print_isl(map, p); - else if (p->output_format == ISL_FORMAT_POLYLIB) - return isl_map_print_polylib(map, p, 0); - else if (p->output_format == ISL_FORMAT_EXT_POLYLIB) - return isl_map_print_polylib(map, p, 1); - else if (p->output_format == ISL_FORMAT_OMEGA) - return isl_map_print_omega(map, p); - else if (p->output_format == ISL_FORMAT_LATEX) - return isl_map_print_latex(map, p); - isl_assert(map->ctx, 0, goto error); -error: - isl_printer_free(p); - return NULL; -} - -struct isl_union_print_data { - isl_printer *p; - int first; -}; - -static int print_map_body(__isl_take isl_map *map, void *user) -{ - struct isl_union_print_data *data; - data = (struct isl_union_print_data *)user; - - if (!data->first) - data->p = isl_printer_print_str(data->p, "; "); - data->first = 0; - - data->p = isl_map_print_isl_body(map, data->p); - isl_map_free(map); - - return 0; -} - -static __isl_give isl_printer *isl_union_map_print_isl( - __isl_keep isl_union_map *umap, __isl_take isl_printer *p) -{ - struct isl_union_print_data data = { p, 1 }; - isl_space *dim; - dim = isl_union_map_get_space(umap); - if (isl_space_dim(dim, isl_dim_param) > 0) { - p = print_tuple(dim, p, isl_dim_param, 0, NULL, NULL); - p = isl_printer_print_str(p, s_to[0]); - } - isl_space_free(dim); - p = isl_printer_print_str(p, s_open_set[0]); - isl_union_map_foreach_map(umap, &print_map_body, &data); - p = data.p; - p = isl_printer_print_str(p, s_close_set[0]); - return p; -} - -static int print_latex_map_body(__isl_take isl_map *map, void *user) -{ - struct isl_union_print_data *data; - data = (struct isl_union_print_data *)user; - - if (!data->first) - data->p = isl_printer_print_str(data->p, " \\cup "); - data->first = 0; - - data->p = isl_map_print_latex(map, data->p); - isl_map_free(map); - - return 0; -} - -static __isl_give isl_printer *isl_union_map_print_latex( - __isl_keep isl_union_map *umap, __isl_take isl_printer *p) -{ - struct isl_union_print_data data = { p, 1 }; - isl_union_map_foreach_map(umap, &print_latex_map_body, &data); - p = data.p; - return p; -} - -__isl_give isl_printer *isl_printer_print_union_map(__isl_take isl_printer *p, - __isl_keep isl_union_map *umap) -{ - if (!p || !umap) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return isl_union_map_print_isl(umap, p); - if (p->output_format == ISL_FORMAT_LATEX) - return isl_union_map_print_latex(umap, p); - - isl_die(p->ctx, isl_error_invalid, - "invalid output format for isl_union_map", goto error); -error: - isl_printer_free(p); - return NULL; -} - -__isl_give isl_printer *isl_printer_print_union_set(__isl_take isl_printer *p, - __isl_keep isl_union_set *uset) -{ - if (!p || !uset) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return isl_union_map_print_isl((isl_union_map *)uset, p); - if (p->output_format == ISL_FORMAT_LATEX) - return isl_union_map_print_latex((isl_union_map *)uset, p); - - isl_die(p->ctx, isl_error_invalid, - "invalid output format for isl_union_set", goto error); -error: - isl_printer_free(p); - return NULL; -} - -void isl_map_print(__isl_keep isl_map *map, FILE *out, int indent, - unsigned output_format) -{ - isl_printer *printer; - - if (!map) - return; - - printer = isl_printer_to_file(map->ctx, out); - printer = isl_printer_set_indent(printer, indent); - printer = isl_printer_set_output_format(printer, output_format); - printer = isl_printer_print_map(printer, map); - - isl_printer_free(printer); -} - -static int upoly_rec_n_non_zero(__isl_keep struct isl_upoly_rec *rec) -{ - int i; - int n; - - for (i = 0, n = 0; i < rec->n; ++i) - if (!isl_upoly_is_zero(rec->p[i])) - ++n; - - return n; -} - -static __isl_give isl_printer *print_div(__isl_keep isl_space *dim, - __isl_keep isl_mat *div, int pos, __isl_take isl_printer *p) -{ - int c = p->output_format == ISL_FORMAT_C; - p = isl_printer_print_str(p, c ? "floord(" : "[("); - p = print_affine_of_len(dim, div, p, - div->row[pos] + 1, div->n_col - 1); - p = isl_printer_print_str(p, c ? ", " : ")/"); - p = isl_printer_print_isl_int(p, div->row[pos][0]); - p = isl_printer_print_str(p, c ? ")" : "]"); - return p; -} - -static __isl_give isl_printer *upoly_print_cst(__isl_keep struct isl_upoly *up, - __isl_take isl_printer *p, int first) -{ - struct isl_upoly_cst *cst; - int neg; - - cst = isl_upoly_as_cst(up); - if (!cst) - goto error; - neg = !first && isl_int_is_neg(cst->n); - if (!first) - p = isl_printer_print_str(p, neg ? " - " : " + "); - if (neg) - isl_int_neg(cst->n, cst->n); - if (isl_int_is_zero(cst->d)) { - int sgn = isl_int_sgn(cst->n); - p = isl_printer_print_str(p, sgn < 0 ? "-infty" : - sgn == 0 ? "NaN" : "infty"); - } else - p = isl_printer_print_isl_int(p, cst->n); - if (neg) - isl_int_neg(cst->n, cst->n); - if (!isl_int_is_zero(cst->d) && !isl_int_is_one(cst->d)) { - p = isl_printer_print_str(p, "/"); - p = isl_printer_print_isl_int(p, cst->d); - } - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_base(__isl_take isl_printer *p, - __isl_keep isl_space *dim, __isl_keep isl_mat *div, int var) -{ - unsigned total; - - total = isl_space_dim(dim, isl_dim_all); - if (var < total) - p = print_term(dim, NULL, dim->ctx->one, 1 + var, p, 0); - else - p = print_div(dim, div, var - total, p); - return p; -} - -static __isl_give isl_printer *print_pow(__isl_take isl_printer *p, - __isl_keep isl_space *dim, __isl_keep isl_mat *div, int var, int exp) -{ - p = print_base(p, dim, div, var); - if (exp == 1) - return p; - if (p->output_format == ISL_FORMAT_C) { - int i; - for (i = 1; i < exp; ++i) { - p = isl_printer_print_str(p, "*"); - p = print_base(p, dim, div, var); - } - } else { - p = isl_printer_print_str(p, "^"); - p = isl_printer_print_int(p, exp); - } - return p; -} - -static __isl_give isl_printer *upoly_print(__isl_keep struct isl_upoly *up, - __isl_keep isl_space *dim, __isl_keep isl_mat *div, - __isl_take isl_printer *p, int outer) -{ - int i, n, first, print_parens; - struct isl_upoly_rec *rec; - - if (!p || !up || !dim || !div) - goto error; - - if (isl_upoly_is_cst(up)) - return upoly_print_cst(up, p, 1); - - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - n = upoly_rec_n_non_zero(rec); - print_parens = n > 1 || - (outer && rec->up.var >= isl_space_dim(dim, isl_dim_all)); - if (print_parens) - p = isl_printer_print_str(p, "("); - for (i = 0, first = 1; i < rec->n; ++i) { - if (isl_upoly_is_zero(rec->p[i])) - continue; - if (isl_upoly_is_negone(rec->p[i])) { - if (!i) - p = isl_printer_print_str(p, "-1"); - else if (first) - p = isl_printer_print_str(p, "-"); - else - p = isl_printer_print_str(p, " - "); - } else if (isl_upoly_is_cst(rec->p[i]) && - !isl_upoly_is_one(rec->p[i])) - p = upoly_print_cst(rec->p[i], p, first); - else { - if (!first) - p = isl_printer_print_str(p, " + "); - if (i == 0 || !isl_upoly_is_one(rec->p[i])) - p = upoly_print(rec->p[i], dim, div, p, 0); - } - first = 0; - if (i == 0) - continue; - if (!isl_upoly_is_one(rec->p[i]) && - !isl_upoly_is_negone(rec->p[i])) - p = isl_printer_print_str(p, " * "); - p = print_pow(p, dim, div, rec->up.var, i); - } - if (print_parens) - p = isl_printer_print_str(p, ")"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_qpolynomial(__isl_take isl_printer *p, - __isl_keep isl_qpolynomial *qp) -{ - if (!p || !qp) - goto error; - p = upoly_print(qp->upoly, qp->dim, qp->div, p, 1); - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_qpolynomial_isl(__isl_take isl_printer *p, - __isl_keep isl_qpolynomial *qp) -{ - if (!p || !qp) - goto error; - - if (isl_space_dim(qp->dim, isl_dim_param) > 0) { - p = print_tuple(qp->dim, p, isl_dim_param, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - if (!isl_space_is_params(qp->dim)) { - p = print_space(qp->dim, p, 0, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = print_qpolynomial(p, qp); - p = isl_printer_print_str(p, " }"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_qpolynomial_c(__isl_take isl_printer *p, - __isl_keep isl_space *dim, __isl_keep isl_qpolynomial *qp) -{ - isl_int den; - - isl_int_init(den); - isl_qpolynomial_get_den(qp, &den); - if (!isl_int_is_one(den)) { - isl_qpolynomial *f; - p = isl_printer_print_str(p, "("); - qp = isl_qpolynomial_copy(qp); - f = isl_qpolynomial_rat_cst_on_domain(isl_space_copy(qp->dim), - den, qp->dim->ctx->one); - qp = isl_qpolynomial_mul(qp, f); - } - if (qp) - p = upoly_print(qp->upoly, dim, qp->div, p, 0); - if (!isl_int_is_one(den)) { - p = isl_printer_print_str(p, ")/"); - p = isl_printer_print_isl_int(p, den); - isl_qpolynomial_free(qp); - } - isl_int_clear(den); - return p; -} - -__isl_give isl_printer *isl_printer_print_qpolynomial( - __isl_take isl_printer *p, __isl_keep isl_qpolynomial *qp) -{ - if (!p || !qp) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_qpolynomial_isl(p, qp); - else if (p->output_format == ISL_FORMAT_C) - return print_qpolynomial_c(p, qp->dim, qp); - else - isl_die(qp->dim->ctx, isl_error_unsupported, - "output format not supported for isl_qpolynomials", - goto error); -error: - isl_printer_free(p); - return NULL; -} - -void isl_qpolynomial_print(__isl_keep isl_qpolynomial *qp, FILE *out, - unsigned output_format) -{ - isl_printer *p; - - if (!qp) - return; - - isl_assert(qp->dim->ctx, output_format == ISL_FORMAT_ISL, return); - p = isl_printer_to_file(qp->dim->ctx, out); - p = isl_printer_print_qpolynomial(p, qp); - isl_printer_free(p); -} - -static __isl_give isl_printer *qpolynomial_fold_print( - __isl_keep isl_qpolynomial_fold *fold, __isl_take isl_printer *p) -{ - int i; - - if (fold->type == isl_fold_min) - p = isl_printer_print_str(p, "min"); - else if (fold->type == isl_fold_max) - p = isl_printer_print_str(p, "max"); - p = isl_printer_print_str(p, "("); - for (i = 0; i < fold->n; ++i) { - if (i) - p = isl_printer_print_str(p, ", "); - p = print_qpolynomial(p, fold->qp[i]); - } - p = isl_printer_print_str(p, ")"); - return p; -} - -void isl_qpolynomial_fold_print(__isl_keep isl_qpolynomial_fold *fold, - FILE *out, unsigned output_format) -{ - isl_printer *p; - - if (!fold) - return; - - isl_assert(fold->dim->ctx, output_format == ISL_FORMAT_ISL, return); - - p = isl_printer_to_file(fold->dim->ctx, out); - p = isl_printer_print_qpolynomial_fold(p, fold); - - isl_printer_free(p); -} - -static __isl_give isl_printer *isl_pwqp_print_isl_body( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial *pwqp) -{ - int i = 0; - - for (i = 0; i < pwqp->n; ++i) { - if (i) - p = isl_printer_print_str(p, "; "); - if (!isl_space_is_params(pwqp->p[i].set->dim)) { - p = print_space(pwqp->p[i].set->dim, p, 0, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = print_qpolynomial(p, pwqp->p[i].qp); - p = print_disjuncts((isl_map *)pwqp->p[i].set, p, 0); - } - - return p; -} - -static __isl_give isl_printer *print_pw_qpolynomial_isl( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial *pwqp) -{ - if (!p || !pwqp) - goto error; - - if (isl_space_dim(pwqp->dim, isl_dim_param) > 0) { - p = print_tuple(pwqp->dim, p, isl_dim_param, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - if (pwqp->n == 0) { - if (!isl_space_is_set(pwqp->dim)) { - p = print_tuple(pwqp->dim, p, isl_dim_in, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "0"); - } - p = isl_pwqp_print_isl_body(p, pwqp); - p = isl_printer_print_str(p, " }"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -void isl_pw_qpolynomial_print(__isl_keep isl_pw_qpolynomial *pwqp, FILE *out, - unsigned output_format) -{ - isl_printer *p; - - if (!pwqp) - return; - - p = isl_printer_to_file(pwqp->dim->ctx, out); - p = isl_printer_set_output_format(p, output_format); - p = isl_printer_print_pw_qpolynomial(p, pwqp); - - isl_printer_free(p); -} - -static __isl_give isl_printer *isl_pwf_print_isl_body( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial_fold *pwf) -{ - int i = 0; - - for (i = 0; i < pwf->n; ++i) { - if (i) - p = isl_printer_print_str(p, "; "); - if (!isl_space_is_params(pwf->p[i].set->dim)) { - p = print_space(pwf->p[i].set->dim, p, 0, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = qpolynomial_fold_print(pwf->p[i].fold, p); - p = print_disjuncts((isl_map *)pwf->p[i].set, p, 0); - } - - return p; -} - -static __isl_give isl_printer *print_pw_qpolynomial_fold_isl( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial_fold *pwf) -{ - if (isl_space_dim(pwf->dim, isl_dim_param) > 0) { - p = print_tuple(pwf->dim, p, isl_dim_param, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - if (pwf->n == 0) { - if (!isl_space_is_set(pwf->dim)) { - p = print_tuple(pwf->dim, p, isl_dim_in, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "0"); - } - p = isl_pwf_print_isl_body(p, pwf); - p = isl_printer_print_str(p, " }"); - return p; -} - -static __isl_give isl_printer *print_affine_c(__isl_take isl_printer *p, - __isl_keep isl_space *dim, __isl_keep isl_basic_set *bset, isl_int *c); - -static __isl_give isl_printer *print_name_c(__isl_take isl_printer *p, - __isl_keep isl_space *dim, - __isl_keep isl_basic_set *bset, enum isl_dim_type type, unsigned pos) -{ - if (type == isl_dim_div) { - p = isl_printer_print_str(p, "floord("); - p = print_affine_c(p, dim, bset, bset->div[pos] + 1); - p = isl_printer_print_str(p, ", "); - p = isl_printer_print_isl_int(p, bset->div[pos][0]); - p = isl_printer_print_str(p, ")"); - } else { - const char *name; - - name = isl_space_get_dim_name(dim, type, pos); - if (!name) - name = "UNNAMED"; - p = isl_printer_print_str(p, name); - } - return p; -} - -static __isl_give isl_printer *print_term_c(__isl_take isl_printer *p, - __isl_keep isl_space *dim, - __isl_keep isl_basic_set *bset, isl_int c, unsigned pos) -{ - enum isl_dim_type type; - - if (pos == 0) - return isl_printer_print_isl_int(p, c); - - if (isl_int_is_one(c)) - ; - else if (isl_int_is_negone(c)) - p = isl_printer_print_str(p, "-"); - else { - p = isl_printer_print_isl_int(p, c); - p = isl_printer_print_str(p, "*"); - } - type = pos2type(dim, &pos); - p = print_name_c(p, dim, bset, type, pos); - return p; -} - -static __isl_give isl_printer *print_partial_affine_c(__isl_take isl_printer *p, - __isl_keep isl_space *dim, - __isl_keep isl_basic_set *bset, isl_int *c, unsigned len) -{ - int i; - int first; - - for (i = 0, first = 1; i < len; ++i) { - int flip = 0; - if (isl_int_is_zero(c[i])) - continue; - if (!first) { - if (isl_int_is_neg(c[i])) { - flip = 1; - isl_int_neg(c[i], c[i]); - p = isl_printer_print_str(p, " - "); - } else - p = isl_printer_print_str(p, " + "); - } - first = 0; - p = print_term_c(p, dim, bset, c[i], i); - if (flip) - isl_int_neg(c[i], c[i]); - } - if (first) - p = isl_printer_print_str(p, "0"); - return p; -} - -static __isl_give isl_printer *print_affine_c(__isl_take isl_printer *p, - __isl_keep isl_space *dim, __isl_keep isl_basic_set *bset, isl_int *c) -{ - unsigned len = 1 + isl_basic_set_total_dim(bset); - return print_partial_affine_c(p, dim, bset, c, len); -} - -static __isl_give isl_printer *print_constraint_c(__isl_take isl_printer *p, - __isl_keep isl_space *dim, - __isl_keep isl_basic_set *bset, isl_int *c, const char *op, int first) -{ - if (!first) - p = isl_printer_print_str(p, " && "); - - p = print_affine_c(p, dim, bset, c); - p = isl_printer_print_str(p, " "); - p = isl_printer_print_str(p, op); - p = isl_printer_print_str(p, " 0"); - return p; -} - -static __isl_give isl_printer *print_basic_set_c(__isl_take isl_printer *p, - __isl_keep isl_space *dim, __isl_keep isl_basic_set *bset) -{ - int i, j; - unsigned n_div = isl_basic_set_dim(bset, isl_dim_div); - unsigned total = isl_basic_set_total_dim(bset) - n_div; - - for (i = 0; i < bset->n_eq; ++i) { - j = isl_seq_last_non_zero(bset->eq[i] + 1 + total, n_div); - if (j < 0) - p = print_constraint_c(p, dim, bset, - bset->eq[i], "==", !i); - else { - if (i) - p = isl_printer_print_str(p, " && "); - p = isl_printer_print_str(p, "("); - p = print_partial_affine_c(p, dim, bset, bset->eq[i], - 1 + total + j); - p = isl_printer_print_str(p, ") % "); - p = isl_printer_print_isl_int(p, - bset->eq[i][1 + total + j]); - p = isl_printer_print_str(p, " == 0"); - } - } - for (i = 0; i < bset->n_ineq; ++i) - p = print_constraint_c(p, dim, bset, bset->ineq[i], ">=", - !bset->n_eq && !i); - return p; -} - -static __isl_give isl_printer *print_set_c(__isl_take isl_printer *p, - __isl_keep isl_space *dim, __isl_keep isl_set *set) -{ - int i; - - if (set->n == 0) - p = isl_printer_print_str(p, "0"); - - for (i = 0; i < set->n; ++i) { - if (i) - p = isl_printer_print_str(p, " || "); - if (set->n > 1) - p = isl_printer_print_str(p, "("); - p = print_basic_set_c(p, dim, set->p[i]); - if (set->n > 1) - p = isl_printer_print_str(p, ")"); - } - return p; -} - -static __isl_give isl_printer *print_pw_qpolynomial_c( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial *pwqp) -{ - int i; - - if (pwqp->n == 1 && isl_set_plain_is_universe(pwqp->p[0].set)) - return print_qpolynomial_c(p, pwqp->dim, pwqp->p[0].qp); - - for (i = 0; i < pwqp->n; ++i) { - p = isl_printer_print_str(p, "("); - p = print_set_c(p, pwqp->dim, pwqp->p[i].set); - p = isl_printer_print_str(p, ") ? ("); - p = print_qpolynomial_c(p, pwqp->dim, pwqp->p[i].qp); - p = isl_printer_print_str(p, ") : "); - } - - p = isl_printer_print_str(p, "0"); - return p; -} - -__isl_give isl_printer *isl_printer_print_pw_qpolynomial( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial *pwqp) -{ - if (!p || !pwqp) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_pw_qpolynomial_isl(p, pwqp); - else if (p->output_format == ISL_FORMAT_C) - return print_pw_qpolynomial_c(p, pwqp); - isl_assert(p->ctx, 0, goto error); -error: - isl_printer_free(p); - return NULL; -} - -static int print_pwqp_body(__isl_take isl_pw_qpolynomial *pwqp, void *user) -{ - struct isl_union_print_data *data; - data = (struct isl_union_print_data *)user; - - if (!data->first) - data->p = isl_printer_print_str(data->p, "; "); - data->first = 0; - - data->p = isl_pwqp_print_isl_body(data->p, pwqp); - isl_pw_qpolynomial_free(pwqp); - - return 0; -} - -static __isl_give isl_printer *print_union_pw_qpolynomial_isl( - __isl_take isl_printer *p, __isl_keep isl_union_pw_qpolynomial *upwqp) -{ - struct isl_union_print_data data = { p, 1 }; - isl_space *dim; - dim = isl_union_pw_qpolynomial_get_space(upwqp); - if (isl_space_dim(dim, isl_dim_param) > 0) { - p = print_tuple(dim, p, isl_dim_param, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - isl_space_free(dim); - p = isl_printer_print_str(p, "{ "); - isl_union_pw_qpolynomial_foreach_pw_qpolynomial(upwqp, &print_pwqp_body, - &data); - p = data.p; - p = isl_printer_print_str(p, " }"); - return p; -} - -__isl_give isl_printer *isl_printer_print_union_pw_qpolynomial( - __isl_take isl_printer *p, __isl_keep isl_union_pw_qpolynomial *upwqp) -{ - if (!p || !upwqp) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_union_pw_qpolynomial_isl(p, upwqp); - isl_die(p->ctx, isl_error_invalid, - "invalid output format for isl_union_pw_qpolynomial", - goto error); -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_qpolynomial_fold_c( - __isl_take isl_printer *p, __isl_keep isl_space *dim, - __isl_keep isl_qpolynomial_fold *fold) -{ - int i; - - for (i = 0; i < fold->n - 1; ++i) - if (fold->type == isl_fold_min) - p = isl_printer_print_str(p, "min("); - else if (fold->type == isl_fold_max) - p = isl_printer_print_str(p, "max("); - - for (i = 0; i < fold->n; ++i) { - if (i) - p = isl_printer_print_str(p, ", "); - p = print_qpolynomial_c(p, dim, fold->qp[i]); - if (i) - p = isl_printer_print_str(p, ")"); - } - return p; -} - -__isl_give isl_printer *isl_printer_print_qpolynomial_fold( - __isl_take isl_printer *p, __isl_keep isl_qpolynomial_fold *fold) -{ - if (!p || !fold) - goto error; - if (p->output_format == ISL_FORMAT_ISL) - return qpolynomial_fold_print(fold, p); - else if (p->output_format == ISL_FORMAT_C) - return print_qpolynomial_fold_c(p, fold->dim, fold); - isl_die(p->ctx, isl_error_unsupported, "unsupported output format", - goto error); -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_pw_qpolynomial_fold_c( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial_fold *pwf) -{ - int i; - - if (pwf->n == 1 && isl_set_plain_is_universe(pwf->p[0].set)) - return print_qpolynomial_fold_c(p, pwf->dim, pwf->p[0].fold); - - for (i = 0; i < pwf->n; ++i) { - p = isl_printer_print_str(p, "("); - p = print_set_c(p, pwf->dim, pwf->p[i].set); - p = isl_printer_print_str(p, ") ? ("); - p = print_qpolynomial_fold_c(p, pwf->dim, pwf->p[i].fold); - p = isl_printer_print_str(p, ") : "); - } - - p = isl_printer_print_str(p, "0"); - return p; -} - -__isl_give isl_printer *isl_printer_print_pw_qpolynomial_fold( - __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial_fold *pwf) -{ - if (!p || !pwf) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_pw_qpolynomial_fold_isl(p, pwf); - else if (p->output_format == ISL_FORMAT_C) - return print_pw_qpolynomial_fold_c(p, pwf); - isl_assert(p->ctx, 0, goto error); -error: - isl_printer_free(p); - return NULL; -} - -void isl_pw_qpolynomial_fold_print(__isl_keep isl_pw_qpolynomial_fold *pwf, - FILE *out, unsigned output_format) -{ - isl_printer *p; - - if (!pwf) - return; - - p = isl_printer_to_file(pwf->dim->ctx, out); - p = isl_printer_set_output_format(p, output_format); - p = isl_printer_print_pw_qpolynomial_fold(p, pwf); - - isl_printer_free(p); -} - -static int print_pwf_body(__isl_take isl_pw_qpolynomial_fold *pwf, void *user) -{ - struct isl_union_print_data *data; - data = (struct isl_union_print_data *)user; - - if (!data->first) - data->p = isl_printer_print_str(data->p, "; "); - data->first = 0; - - data->p = isl_pwf_print_isl_body(data->p, pwf); - isl_pw_qpolynomial_fold_free(pwf); - - return 0; -} - -static __isl_give isl_printer *print_union_pw_qpolynomial_fold_isl( - __isl_take isl_printer *p, - __isl_keep isl_union_pw_qpolynomial_fold *upwf) -{ - struct isl_union_print_data data = { p, 1 }; - isl_space *dim; - dim = isl_union_pw_qpolynomial_fold_get_space(upwf); - if (isl_space_dim(dim, isl_dim_param) > 0) { - p = print_tuple(dim, p, isl_dim_param, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - isl_space_free(dim); - p = isl_printer_print_str(p, "{ "); - isl_union_pw_qpolynomial_fold_foreach_pw_qpolynomial_fold(upwf, - &print_pwf_body, &data); - p = data.p; - p = isl_printer_print_str(p, " }"); - return p; -} - -__isl_give isl_printer *isl_printer_print_union_pw_qpolynomial_fold( - __isl_take isl_printer *p, - __isl_keep isl_union_pw_qpolynomial_fold *upwf) -{ - if (!p || !upwf) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_union_pw_qpolynomial_fold_isl(p, upwf); - isl_die(p->ctx, isl_error_invalid, - "invalid output format for isl_union_pw_qpolynomial_fold", - goto error); -error: - isl_printer_free(p); - return NULL; -} - -__isl_give isl_printer *isl_printer_print_constraint(__isl_take isl_printer *p, - __isl_keep isl_constraint *c) -{ - isl_basic_map *bmap; - - if (!p || !c) - goto error; - - bmap = isl_basic_map_from_constraint(isl_constraint_copy(c)); - p = isl_printer_print_basic_map(p, bmap); - isl_basic_map_free(bmap); - return p; -error: - isl_printer_free(p); - return NULL; -} - -__isl_give isl_printer *isl_printer_print_space(__isl_take isl_printer *p, - __isl_keep isl_space *dim) -{ - if (!dim) - goto error; - - if (isl_space_dim(dim, isl_dim_param) > 0) { - p = print_tuple(dim, p, isl_dim_param, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - - p = isl_printer_print_str(p, "{ "); - if (isl_space_is_params(dim)) - p = isl_printer_print_str(p, s_such_that[0]); - else - p = print_space(dim, p, 0, 0, NULL, NULL); - p = isl_printer_print_str(p, " }"); - - return p; -error: - isl_printer_free(p); - return NULL; -} - -__isl_give isl_printer *isl_printer_print_local_space(__isl_take isl_printer *p, - __isl_keep isl_local_space *ls) -{ - unsigned total; - unsigned n_div; - - if (!ls) - goto error; - - total = isl_local_space_dim(ls, isl_dim_all); - if (isl_local_space_dim(ls, isl_dim_param) > 0) { - p = print_tuple(ls->dim, p, isl_dim_param, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - p = print_space(ls->dim, p, 0, 0, NULL, NULL); - n_div = isl_local_space_dim(ls, isl_dim_div); - if (n_div > 0) { - int i; - p = isl_printer_print_str(p, " : "); - p = isl_printer_print_str(p, s_open_exists[0]); - for (i = 0; i < n_div; ++i) { - if (i) - p = isl_printer_print_str(p, ", "); - p = print_name(ls->dim, p, isl_dim_div, i, 0); - if (isl_int_is_zero(ls->div->row[i][0])) - continue; - p = isl_printer_print_str(p, " = [("); - p = print_affine_of_len(ls->dim, ls->div, p, - ls->div->row[i] + 1, 1 + total); - p = isl_printer_print_str(p, ")/"); - p = isl_printer_print_isl_int(p, ls->div->row[i][0]); - p = isl_printer_print_str(p, "]"); - } - } else if (isl_space_is_params(ls->dim)) - p = isl_printer_print_str(p, s_such_that[0]); - p = isl_printer_print_str(p, " }"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_aff_body(__isl_take isl_printer *p, - __isl_keep isl_aff *aff) -{ - unsigned total; - - total = isl_local_space_dim(aff->ls, isl_dim_all); - p = isl_printer_print_str(p, "("); - p = print_affine_of_len(aff->ls->dim, aff->ls->div, p, - aff->v->el + 1, 1 + total); - if (isl_int_is_one(aff->v->el[0])) - p = isl_printer_print_str(p, ")"); - else { - p = isl_printer_print_str(p, ")/"); - p = isl_printer_print_isl_int(p, aff->v->el[0]); - } - - return p; -} - -static __isl_give isl_printer *print_aff(__isl_take isl_printer *p, - __isl_keep isl_aff *aff) -{ - if (isl_space_is_params(aff->ls->dim)) - ; - else { - p = print_tuple(aff->ls->dim, p, isl_dim_set, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "["); - p = print_aff_body(p, aff); - p = isl_printer_print_str(p, "]"); - - return p; -} - -static __isl_give isl_printer *print_aff_isl(__isl_take isl_printer *p, - __isl_keep isl_aff *aff) -{ - if (!aff) - goto error; - - if (isl_local_space_dim(aff->ls, isl_dim_param) > 0) { - p = print_tuple(aff->ls->dim, p, isl_dim_param, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - p = print_aff(p, aff); - p = isl_printer_print_str(p, " }"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_pw_aff_isl(__isl_take isl_printer *p, - __isl_keep isl_pw_aff *pwaff) -{ - int i; - - if (!pwaff) - goto error; - - if (isl_space_dim(pwaff->dim, isl_dim_param) > 0) { - p = print_tuple(pwaff->dim, p, isl_dim_param, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - for (i = 0; i < pwaff->n; ++i) { - if (i) - p = isl_printer_print_str(p, "; "); - p = print_aff(p, pwaff->p[i].aff); - p = print_disjuncts((isl_map *)pwaff->p[i].set, p, 0); - } - p = isl_printer_print_str(p, " }"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_ls_affine_c(__isl_take isl_printer *p, - __isl_keep isl_local_space *ls, isl_int *c); - -static __isl_give isl_printer *print_ls_name_c(__isl_take isl_printer *p, - __isl_keep isl_local_space *ls, enum isl_dim_type type, unsigned pos) -{ - if (type == isl_dim_div) { - p = isl_printer_print_str(p, "floord("); - p = print_ls_affine_c(p, ls, ls->div->row[pos] + 1); - p = isl_printer_print_str(p, ", "); - p = isl_printer_print_isl_int(p, ls->div->row[pos][0]); - p = isl_printer_print_str(p, ")"); - } else { - const char *name; - - name = isl_space_get_dim_name(ls->dim, type, pos); - if (!name) - name = "UNNAMED"; - p = isl_printer_print_str(p, name); - } - return p; -} - -static __isl_give isl_printer *print_ls_term_c(__isl_take isl_printer *p, - __isl_keep isl_local_space *ls, isl_int c, unsigned pos) -{ - enum isl_dim_type type; - - if (pos == 0) - return isl_printer_print_isl_int(p, c); - - if (isl_int_is_one(c)) - ; - else if (isl_int_is_negone(c)) - p = isl_printer_print_str(p, "-"); - else { - p = isl_printer_print_isl_int(p, c); - p = isl_printer_print_str(p, "*"); - } - type = pos2type(ls->dim, &pos); - p = print_ls_name_c(p, ls, type, pos); - return p; -} - -static __isl_give isl_printer *print_ls_partial_affine_c( - __isl_take isl_printer *p, __isl_keep isl_local_space *ls, - isl_int *c, unsigned len) -{ - int i; - int first; - - for (i = 0, first = 1; i < len; ++i) { - int flip = 0; - if (isl_int_is_zero(c[i])) - continue; - if (!first) { - if (isl_int_is_neg(c[i])) { - flip = 1; - isl_int_neg(c[i], c[i]); - p = isl_printer_print_str(p, " - "); - } else - p = isl_printer_print_str(p, " + "); - } - first = 0; - p = print_ls_term_c(p, ls, c[i], i); - if (flip) - isl_int_neg(c[i], c[i]); - } - if (first) - p = isl_printer_print_str(p, "0"); - return p; -} - -static __isl_give isl_printer *print_ls_affine_c(__isl_take isl_printer *p, - __isl_keep isl_local_space *ls, isl_int *c) -{ - unsigned len = 1 + isl_local_space_dim(ls, isl_dim_all); - return print_ls_partial_affine_c(p, ls, c, len); -} - -static __isl_give isl_printer *print_aff_c(__isl_take isl_printer *p, - __isl_keep isl_aff *aff) -{ - unsigned total; - - total = isl_local_space_dim(aff->ls, isl_dim_all); - p = isl_printer_print_str(p, "("); - p = print_ls_partial_affine_c(p, aff->ls, aff->v->el + 1, 1 + total); - if (isl_int_is_one(aff->v->el[0])) - p = isl_printer_print_str(p, ")"); - else { - p = isl_printer_print_str(p, ")/"); - p = isl_printer_print_isl_int(p, aff->v->el[0]); - } - return p; -} - -static __isl_give isl_printer *print_pw_aff_c(__isl_take isl_printer *p, - __isl_keep isl_pw_aff *pwaff) -{ - int i; - - if (pwaff->n < 1) - isl_die(p->ctx, isl_error_unsupported, - "cannot print empty isl_pw_aff in C format", goto error); - - for (i = 0; i < pwaff->n - 1; ++i) { - p = isl_printer_print_str(p, "("); - p = print_set_c(p, pwaff->dim, pwaff->p[i].set); - p = isl_printer_print_str(p, ") ? ("); - p = print_aff_c(p, pwaff->p[i].aff); - p = isl_printer_print_str(p, ") : "); - } - - return print_aff_c(p, pwaff->p[pwaff->n - 1].aff); -error: - isl_printer_free(p); - return NULL; -} - -__isl_give isl_printer *isl_printer_print_aff(__isl_take isl_printer *p, - __isl_keep isl_aff *aff) -{ - if (!p || !aff) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_aff_isl(p, aff); - else if (p->output_format == ISL_FORMAT_C) - return print_aff_c(p, aff); - isl_die(p->ctx, isl_error_unsupported, "unsupported output format", - goto error); -error: - isl_printer_free(p); - return NULL; -} - -__isl_give isl_printer *isl_printer_print_pw_aff(__isl_take isl_printer *p, - __isl_keep isl_pw_aff *pwaff) -{ - if (!p || !pwaff) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_pw_aff_isl(p, pwaff); - else if (p->output_format == ISL_FORMAT_C) - return print_pw_aff_c(p, pwaff); - isl_die(p->ctx, isl_error_unsupported, "unsupported output format", - goto error); -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_multi_aff(__isl_take isl_printer *p, - __isl_keep isl_multi_aff *maff) -{ - return print_space(maff->space, p, 0, 0, NULL, maff); -} - -static __isl_give isl_printer *print_multi_aff_isl(__isl_take isl_printer *p, - __isl_keep isl_multi_aff *maff) -{ - if (!maff) - goto error; - - if (isl_space_dim(maff->space, isl_dim_param) > 0) { - p = print_tuple(maff->space, p, isl_dim_param, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - p = print_multi_aff(p, maff); - p = isl_printer_print_str(p, " }"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -__isl_give isl_printer *isl_printer_print_multi_aff(__isl_take isl_printer *p, - __isl_keep isl_multi_aff *maff) -{ - if (!p || !maff) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_multi_aff_isl(p, maff); - isl_die(p->ctx, isl_error_unsupported, "unsupported output format", - goto error); -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_pw_multi_aff_isl(__isl_take isl_printer *p, - __isl_keep isl_pw_multi_aff *pma) -{ - int i; - - if (!pma) - goto error; - - if (isl_space_dim(pma->dim, isl_dim_param) > 0) { - p = print_tuple(pma->dim, p, isl_dim_param, 0, NULL, NULL); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "{ "); - for (i = 0; i < pma->n; ++i) { - if (i) - p = isl_printer_print_str(p, "; "); - p = print_multi_aff(p, pma->p[i].maff); - p = print_disjuncts((isl_map *)pma->p[i].set, p, 0); - } - p = isl_printer_print_str(p, " }"); - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *print_unnamed_pw_multi_aff_c( - __isl_take isl_printer *p, __isl_keep isl_pw_multi_aff *pma) -{ - int i; - - for (i = 0; i < pma->n - 1; ++i) { - p = isl_printer_print_str(p, "("); - p = print_set_c(p, pma->dim, pma->p[i].set); - p = isl_printer_print_str(p, ") ? ("); - p = print_aff_c(p, pma->p[i].maff->p[0]); - p = isl_printer_print_str(p, ") : "); - } - - return print_aff_c(p, pma->p[pma->n - 1].maff->p[0]); -} - -static __isl_give isl_printer *print_pw_multi_aff_c(__isl_take isl_printer *p, - __isl_keep isl_pw_multi_aff *pma) -{ - int n; - const char *name; - - if (!pma) - goto error; - if (pma->n < 1) - isl_die(p->ctx, isl_error_unsupported, - "cannot print empty isl_pw_multi_aff in C format", - goto error); - name = isl_pw_multi_aff_get_tuple_name(pma, isl_dim_out); - if (!name && isl_pw_multi_aff_dim(pma, isl_dim_out) == 1) - return print_unnamed_pw_multi_aff_c(p, pma); - if (!name) - isl_die(p->ctx, isl_error_unsupported, - "cannot print unnamed isl_pw_multi_aff in C format", - goto error); - - p = isl_printer_print_str(p, name); - n = isl_pw_multi_aff_dim(pma, isl_dim_out); - if (n != 0) - isl_die(p->ctx, isl_error_unsupported, - "not supported yet", goto error); - - return p; -error: - isl_printer_free(p); - return NULL; -} - -__isl_give isl_printer *isl_printer_print_pw_multi_aff( - __isl_take isl_printer *p, __isl_keep isl_pw_multi_aff *pma) -{ - if (!p || !pma) - goto error; - - if (p->output_format == ISL_FORMAT_ISL) - return print_pw_multi_aff_isl(p, pma); - if (p->output_format == ISL_FORMAT_C) - return print_pw_multi_aff_c(p, pma); - isl_die(p->ctx, isl_error_unsupported, "unsupported output format", - goto error); -error: - isl_printer_free(p); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_piplib.c b/cloog-0.17.0/isl/isl_piplib.c deleted file mode 100644 index e33b981..0000000 --- a/cloog-0.17.0/isl/isl_piplib.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include "isl_piplib.h" - -void isl_seq_cpy_to_pip(Entier *dst, isl_int *src, unsigned len) -{ - int i; - - for (i = 0; i < len; ++i) - entier_assign(dst[i], src[i]); -} - -void isl_seq_cpy_from_pip(isl_int *dst, Entier *src, unsigned len) -{ - int i; - - for (i = 0; i < len; ++i) - entier_assign(dst[i], src[i]); -} diff --git a/cloog-0.17.0/isl/isl_piplib.h b/cloog-0.17.0/isl/isl_piplib.h deleted file mode 100644 index 8408770..0000000 --- a/cloog-0.17.0/isl/isl_piplib.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_PIPLIB_H -#define ISL_PIPLIB_H - -#include -#include -#include -#ifndef ISL_PIPLIB -#error "no piplib" -#endif - -#include - -void isl_seq_cpy_to_pip(Entier *dst, isl_int *src, unsigned len); -void isl_seq_cpy_from_pip(isl_int *dst, Entier *src, unsigned len); - -PipMatrix *isl_basic_map_to_pip(struct isl_basic_map *bmap, unsigned pip_param, - unsigned extra_front, unsigned extra_back); - -#endif diff --git a/cloog-0.17.0/isl/isl_point.c b/cloog-0.17.0/isl/isl_point.c deleted file mode 100644 index 00514a9..0000000 --- a/cloog-0.17.0/isl/isl_point.c +++ /dev/null @@ -1,500 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -isl_ctx *isl_point_get_ctx(__isl_keep isl_point *pnt) -{ - return pnt ? isl_space_get_ctx(pnt->dim) : NULL; -} - -__isl_give isl_space *isl_point_get_space(__isl_keep isl_point *pnt) -{ - return pnt ? isl_space_copy(pnt->dim) : NULL; -} - -__isl_give isl_point *isl_point_alloc(__isl_take isl_space *dim, - __isl_take isl_vec *vec) -{ - struct isl_point *pnt; - - if (!dim || !vec) - goto error; - - if (vec->size > 1 + isl_space_dim(dim, isl_dim_all)) { - vec = isl_vec_cow(vec); - if (!vec) - goto error; - vec->size = 1 + isl_space_dim(dim, isl_dim_all); - } - - pnt = isl_alloc_type(dim->ctx, struct isl_point); - if (!pnt) - goto error; - - pnt->ref = 1; - pnt->dim = dim; - pnt->vec = vec; - - return pnt; -error: - isl_space_free(dim); - isl_vec_free(vec); - return NULL; -} - -__isl_give isl_point *isl_point_zero(__isl_take isl_space *dim) -{ - isl_vec *vec; - - if (!dim) - return NULL; - vec = isl_vec_alloc(dim->ctx, 1 + isl_space_dim(dim, isl_dim_all)); - if (!vec) - goto error; - isl_int_set_si(vec->el[0], 1); - isl_seq_clr(vec->el + 1, vec->size - 1); - return isl_point_alloc(dim, vec); -error: - isl_space_free(dim); - return NULL; -} - -__isl_give isl_point *isl_point_dup(__isl_keep isl_point *pnt) -{ - struct isl_point *pnt2; - - if (!pnt) - return NULL; - pnt2 = isl_point_alloc(isl_space_copy(pnt->dim), isl_vec_copy(pnt->vec)); - return pnt2; -} - -__isl_give isl_point *isl_point_cow(__isl_take isl_point *pnt) -{ - struct isl_point *pnt2; - if (!pnt) - return NULL; - - if (pnt->ref == 1) - return pnt; - - pnt2 = isl_point_dup(pnt); - isl_point_free(pnt); - return pnt2; -} - -__isl_give isl_point *isl_point_copy(__isl_keep isl_point *pnt) -{ - if (!pnt) - return NULL; - - pnt->ref++; - return pnt; -} - -void isl_point_free(__isl_take isl_point *pnt) -{ - if (!pnt) - return; - - if (--pnt->ref > 0) - return; - - isl_space_free(pnt->dim); - isl_vec_free(pnt->vec); - free(pnt); -} - -__isl_give isl_point *isl_point_void(__isl_take isl_space *dim) -{ - if (!dim) - return NULL; - - return isl_point_alloc(dim, isl_vec_alloc(dim->ctx, 0)); -} - -int isl_point_is_void(__isl_keep isl_point *pnt) -{ - if (!pnt) - return -1; - - return pnt->vec->size == 0; -} - -int isl_point_get_coordinate(__isl_keep isl_point *pnt, - enum isl_dim_type type, int pos, isl_int *v) -{ - if (!pnt || isl_point_is_void(pnt)) - return -1; - - if (pos < 0 || pos >= isl_space_dim(pnt->dim, type)) - isl_die(isl_point_get_ctx(pnt), isl_error_invalid, - "position out of bounds", return -1); - - if (type == isl_dim_set) - pos += isl_space_dim(pnt->dim, isl_dim_param); - isl_int_set(*v, pnt->vec->el[1 + pos]); - - return 0; -} - -__isl_give isl_point *isl_point_set_coordinate(__isl_take isl_point *pnt, - enum isl_dim_type type, int pos, isl_int v) -{ - if (!pnt || isl_point_is_void(pnt)) - return pnt; - - pnt = isl_point_cow(pnt); - if (!pnt) - return NULL; - pnt->vec = isl_vec_cow(pnt->vec); - if (!pnt->vec) - goto error; - - if (type == isl_dim_set) - pos += isl_space_dim(pnt->dim, isl_dim_param); - - isl_int_set(pnt->vec->el[1 + pos], v); - - return pnt; -error: - isl_point_free(pnt); - return NULL; -} - -__isl_give isl_point *isl_point_add_ui(__isl_take isl_point *pnt, - enum isl_dim_type type, int pos, unsigned val) -{ - if (!pnt || isl_point_is_void(pnt)) - return pnt; - - pnt = isl_point_cow(pnt); - if (!pnt) - return NULL; - pnt->vec = isl_vec_cow(pnt->vec); - if (!pnt->vec) - goto error; - - if (type == isl_dim_set) - pos += isl_space_dim(pnt->dim, isl_dim_param); - - isl_int_add_ui(pnt->vec->el[1 + pos], pnt->vec->el[1 + pos], val); - - return pnt; -error: - isl_point_free(pnt); - return NULL; -} - -__isl_give isl_point *isl_point_sub_ui(__isl_take isl_point *pnt, - enum isl_dim_type type, int pos, unsigned val) -{ - if (!pnt || isl_point_is_void(pnt)) - return pnt; - - pnt = isl_point_cow(pnt); - if (!pnt) - return NULL; - pnt->vec = isl_vec_cow(pnt->vec); - if (!pnt->vec) - goto error; - - if (type == isl_dim_set) - pos += isl_space_dim(pnt->dim, isl_dim_param); - - isl_int_sub_ui(pnt->vec->el[1 + pos], pnt->vec->el[1 + pos], val); - - return pnt; -error: - isl_point_free(pnt); - return NULL; -} - -struct isl_foreach_point { - struct isl_scan_callback callback; - int (*fn)(__isl_take isl_point *pnt, void *user); - void *user; - isl_space *dim; -}; - -static int foreach_point(struct isl_scan_callback *cb, __isl_take isl_vec *sample) -{ - struct isl_foreach_point *fp = (struct isl_foreach_point *)cb; - isl_point *pnt; - - pnt = isl_point_alloc(isl_space_copy(fp->dim), sample); - - return fp->fn(pnt, fp->user); -} - -int isl_set_foreach_point(__isl_keep isl_set *set, - int (*fn)(__isl_take isl_point *pnt, void *user), void *user) -{ - struct isl_foreach_point fp = { { &foreach_point }, fn, user }; - int i; - - if (!set) - return -1; - - fp.dim = isl_set_get_space(set); - if (!fp.dim) - return -1; - - set = isl_set_copy(set); - set = isl_set_cow(set); - set = isl_set_make_disjoint(set); - set = isl_set_compute_divs(set); - if (!set) - goto error; - - for (i = 0; i < set->n; ++i) - if (isl_basic_set_scan(isl_basic_set_copy(set->p[i]), - &fp.callback) < 0) - goto error; - - isl_set_free(set); - isl_space_free(fp.dim); - - return 0; -error: - isl_set_free(set); - isl_space_free(fp.dim); - return -1; -} - -/* Return 1 if "bmap" contains the point "point". - * "bmap" is assumed to have known divs. - * The point is first extended with the divs and then passed - * to basic_map_contains. - */ -int isl_basic_map_contains_point(__isl_keep isl_basic_map *bmap, - __isl_keep isl_point *point) -{ - int i; - struct isl_vec *vec; - unsigned dim; - int contains; - - if (!bmap || !point) - return -1; - isl_assert(bmap->ctx, isl_space_is_equal(bmap->dim, point->dim), return -1); - if (bmap->n_div == 0) - return isl_basic_map_contains(bmap, point->vec); - - dim = isl_basic_map_total_dim(bmap) - bmap->n_div; - vec = isl_vec_alloc(bmap->ctx, 1 + dim + bmap->n_div); - if (!vec) - return -1; - - isl_seq_cpy(vec->el, point->vec->el, point->vec->size); - for (i = 0; i < bmap->n_div; ++i) { - isl_seq_inner_product(bmap->div[i] + 1, vec->el, - 1 + dim + i, &vec->el[1+dim+i]); - isl_int_fdiv_q(vec->el[1+dim+i], vec->el[1+dim+i], - bmap->div[i][0]); - } - - contains = isl_basic_map_contains(bmap, vec); - - isl_vec_free(vec); - return contains; -} - -int isl_map_contains_point(__isl_keep isl_map *map, __isl_keep isl_point *point) -{ - int i; - int found = 0; - - if (!map || !point) - return -1; - - map = isl_map_copy(map); - map = isl_map_compute_divs(map); - if (!map) - return -1; - - for (i = 0; i < map->n; ++i) { - found = isl_basic_map_contains_point(map->p[i], point); - if (found < 0) - goto error; - if (found) - break; - } - isl_map_free(map); - - return found; -error: - isl_map_free(map); - return -1; -} - -int isl_set_contains_point(__isl_keep isl_set *set, __isl_keep isl_point *point) -{ - return isl_map_contains_point((isl_map *)set, point); -} - -__isl_give isl_basic_set *isl_basic_set_from_point(__isl_take isl_point *pnt) -{ - isl_basic_set *bset; - isl_basic_set *model; - - model = isl_basic_set_empty(isl_space_copy(pnt->dim)); - bset = isl_basic_set_from_vec(isl_vec_copy(pnt->vec)); - bset = isl_basic_set_from_underlying_set(bset, model); - isl_point_free(pnt); - - return bset; -} - -__isl_give isl_set *isl_set_from_point(__isl_take isl_point *pnt) -{ - isl_basic_set *bset; - bset = isl_basic_set_from_point(pnt); - return isl_set_from_basic_set(bset); -} - -__isl_give isl_basic_set *isl_basic_set_box_from_points( - __isl_take isl_point *pnt1, __isl_take isl_point *pnt2) -{ - isl_basic_set *bset; - unsigned total; - int i; - int k; - isl_int t; - - isl_int_init(t); - - if (!pnt1 || !pnt2) - goto error; - - isl_assert(pnt1->dim->ctx, - isl_space_is_equal(pnt1->dim, pnt2->dim), goto error); - - if (isl_point_is_void(pnt1) && isl_point_is_void(pnt2)) { - isl_space *dim = isl_space_copy(pnt1->dim); - isl_point_free(pnt1); - isl_point_free(pnt2); - isl_int_clear(t); - return isl_basic_set_empty(dim); - } - if (isl_point_is_void(pnt1)) { - isl_point_free(pnt1); - isl_int_clear(t); - return isl_basic_set_from_point(pnt2); - } - if (isl_point_is_void(pnt2)) { - isl_point_free(pnt2); - isl_int_clear(t); - return isl_basic_set_from_point(pnt1); - } - - total = isl_space_dim(pnt1->dim, isl_dim_all); - bset = isl_basic_set_alloc_space(isl_space_copy(pnt1->dim), 0, 0, 2 * total); - - for (i = 0; i < total; ++i) { - isl_int_mul(t, pnt1->vec->el[1 + i], pnt2->vec->el[0]); - isl_int_submul(t, pnt2->vec->el[1 + i], pnt1->vec->el[0]); - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_clr(bset->ineq[k] + 1, total); - if (isl_int_is_pos(t)) { - isl_int_set_si(bset->ineq[k][1 + i], -1); - isl_int_set(bset->ineq[k][0], pnt1->vec->el[1 + i]); - } else { - isl_int_set_si(bset->ineq[k][1 + i], 1); - isl_int_neg(bset->ineq[k][0], pnt1->vec->el[1 + i]); - } - isl_int_fdiv_q(bset->ineq[k][0], bset->ineq[k][0], pnt1->vec->el[0]); - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_clr(bset->ineq[k] + 1, total); - if (isl_int_is_pos(t)) { - isl_int_set_si(bset->ineq[k][1 + i], 1); - isl_int_neg(bset->ineq[k][0], pnt2->vec->el[1 + i]); - } else { - isl_int_set_si(bset->ineq[k][1 + i], -1); - isl_int_set(bset->ineq[k][0], pnt2->vec->el[1 + i]); - } - isl_int_fdiv_q(bset->ineq[k][0], bset->ineq[k][0], pnt2->vec->el[0]); - } - - bset = isl_basic_set_finalize(bset); - - isl_point_free(pnt1); - isl_point_free(pnt2); - - isl_int_clear(t); - - return bset; -error: - isl_point_free(pnt1); - isl_point_free(pnt2); - isl_int_clear(t); - return NULL; -} - -__isl_give isl_set *isl_set_box_from_points(__isl_take isl_point *pnt1, - __isl_take isl_point *pnt2) -{ - isl_basic_set *bset; - bset = isl_basic_set_box_from_points(pnt1, pnt2); - return isl_set_from_basic_set(bset); -} - -__isl_give isl_printer *isl_printer_print_point( - __isl_take isl_printer *p, __isl_keep isl_point *pnt) -{ - int i; - unsigned nparam; - unsigned dim; - - if (!pnt) - return p; - if (isl_point_is_void(pnt)) { - p = isl_printer_print_str(p, "void"); - return p; - } - - nparam = isl_space_dim(pnt->dim, isl_dim_param); - dim = isl_space_dim(pnt->dim, isl_dim_set); - if (nparam > 0) { - p = isl_printer_print_str(p, "["); - for (i = 0; i < nparam; ++i) { - const char *name; - if (i) - p = isl_printer_print_str(p, ", "); - name = isl_space_get_dim_name(pnt->dim, isl_dim_param, i); - if (name) { - p = isl_printer_print_str(p, name); - p = isl_printer_print_str(p, " = "); - } - p = isl_printer_print_isl_int(p, pnt->vec->el[1 + i]); - if (!isl_int_is_one(pnt->vec->el[0])) { - p = isl_printer_print_str(p, "/"); - p = isl_printer_print_isl_int(p, pnt->vec->el[0]); - } - } - p = isl_printer_print_str(p, "]"); - p = isl_printer_print_str(p, " -> "); - } - p = isl_printer_print_str(p, "["); - for (i = 0; i < dim; ++i) { - if (i) - p = isl_printer_print_str(p, ", "); - p = isl_printer_print_isl_int(p, pnt->vec->el[1 + nparam + i]); - if (!isl_int_is_one(pnt->vec->el[0])) { - p = isl_printer_print_str(p, "/"); - p = isl_printer_print_isl_int(p, pnt->vec->el[0]); - } - } - p = isl_printer_print_str(p, "]"); - return p; -} diff --git a/cloog-0.17.0/isl/isl_point_private.h b/cloog-0.17.0/isl/isl_point_private.h deleted file mode 100644 index 305b81e..0000000 --- a/cloog-0.17.0/isl/isl_point_private.h +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include -#include - -struct isl_point { - int ref; - isl_space *dim; - struct isl_vec *vec; -}; - -__isl_give isl_point *isl_point_alloc(__isl_take isl_space *dim, - __isl_take isl_vec *vec); diff --git a/cloog-0.17.0/isl/isl_polynomial.c b/cloog-0.17.0/isl/isl_polynomial.c deleted file mode 100644 index 132986e..0000000 --- a/cloog-0.17.0/isl/isl_polynomial.c +++ /dev/null @@ -1,4781 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#define ISL_DIM_H -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static unsigned pos(__isl_keep isl_space *dim, enum isl_dim_type type) -{ - switch (type) { - case isl_dim_param: return 0; - case isl_dim_in: return dim->nparam; - case isl_dim_out: return dim->nparam + dim->n_in; - default: return 0; - } -} - -int isl_upoly_is_cst(__isl_keep struct isl_upoly *up) -{ - if (!up) - return -1; - - return up->var < 0; -} - -__isl_keep struct isl_upoly_cst *isl_upoly_as_cst(__isl_keep struct isl_upoly *up) -{ - if (!up) - return NULL; - - isl_assert(up->ctx, up->var < 0, return NULL); - - return (struct isl_upoly_cst *)up; -} - -__isl_keep struct isl_upoly_rec *isl_upoly_as_rec(__isl_keep struct isl_upoly *up) -{ - if (!up) - return NULL; - - isl_assert(up->ctx, up->var >= 0, return NULL); - - return (struct isl_upoly_rec *)up; -} - -int isl_upoly_is_equal(__isl_keep struct isl_upoly *up1, - __isl_keep struct isl_upoly *up2) -{ - int i; - struct isl_upoly_rec *rec1, *rec2; - - if (!up1 || !up2) - return -1; - if (up1 == up2) - return 1; - if (up1->var != up2->var) - return 0; - if (isl_upoly_is_cst(up1)) { - struct isl_upoly_cst *cst1, *cst2; - cst1 = isl_upoly_as_cst(up1); - cst2 = isl_upoly_as_cst(up2); - if (!cst1 || !cst2) - return -1; - return isl_int_eq(cst1->n, cst2->n) && - isl_int_eq(cst1->d, cst2->d); - } - - rec1 = isl_upoly_as_rec(up1); - rec2 = isl_upoly_as_rec(up2); - if (!rec1 || !rec2) - return -1; - - if (rec1->n != rec2->n) - return 0; - - for (i = 0; i < rec1->n; ++i) { - int eq = isl_upoly_is_equal(rec1->p[i], rec2->p[i]); - if (eq < 0 || !eq) - return eq; - } - - return 1; -} - -int isl_upoly_is_zero(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - - if (!up) - return -1; - if (!isl_upoly_is_cst(up)) - return 0; - - cst = isl_upoly_as_cst(up); - if (!cst) - return -1; - - return isl_int_is_zero(cst->n) && isl_int_is_pos(cst->d); -} - -int isl_upoly_sgn(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - - if (!up) - return 0; - if (!isl_upoly_is_cst(up)) - return 0; - - cst = isl_upoly_as_cst(up); - if (!cst) - return 0; - - return isl_int_sgn(cst->n); -} - -int isl_upoly_is_nan(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - - if (!up) - return -1; - if (!isl_upoly_is_cst(up)) - return 0; - - cst = isl_upoly_as_cst(up); - if (!cst) - return -1; - - return isl_int_is_zero(cst->n) && isl_int_is_zero(cst->d); -} - -int isl_upoly_is_infty(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - - if (!up) - return -1; - if (!isl_upoly_is_cst(up)) - return 0; - - cst = isl_upoly_as_cst(up); - if (!cst) - return -1; - - return isl_int_is_pos(cst->n) && isl_int_is_zero(cst->d); -} - -int isl_upoly_is_neginfty(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - - if (!up) - return -1; - if (!isl_upoly_is_cst(up)) - return 0; - - cst = isl_upoly_as_cst(up); - if (!cst) - return -1; - - return isl_int_is_neg(cst->n) && isl_int_is_zero(cst->d); -} - -int isl_upoly_is_one(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - - if (!up) - return -1; - if (!isl_upoly_is_cst(up)) - return 0; - - cst = isl_upoly_as_cst(up); - if (!cst) - return -1; - - return isl_int_eq(cst->n, cst->d) && isl_int_is_pos(cst->d); -} - -int isl_upoly_is_negone(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - - if (!up) - return -1; - if (!isl_upoly_is_cst(up)) - return 0; - - cst = isl_upoly_as_cst(up); - if (!cst) - return -1; - - return isl_int_is_negone(cst->n) && isl_int_is_one(cst->d); -} - -__isl_give struct isl_upoly_cst *isl_upoly_cst_alloc(struct isl_ctx *ctx) -{ - struct isl_upoly_cst *cst; - - cst = isl_alloc_type(ctx, struct isl_upoly_cst); - if (!cst) - return NULL; - - cst->up.ref = 1; - cst->up.ctx = ctx; - isl_ctx_ref(ctx); - cst->up.var = -1; - - isl_int_init(cst->n); - isl_int_init(cst->d); - - return cst; -} - -__isl_give struct isl_upoly *isl_upoly_zero(struct isl_ctx *ctx) -{ - struct isl_upoly_cst *cst; - - cst = isl_upoly_cst_alloc(ctx); - if (!cst) - return NULL; - - isl_int_set_si(cst->n, 0); - isl_int_set_si(cst->d, 1); - - return &cst->up; -} - -__isl_give struct isl_upoly *isl_upoly_one(struct isl_ctx *ctx) -{ - struct isl_upoly_cst *cst; - - cst = isl_upoly_cst_alloc(ctx); - if (!cst) - return NULL; - - isl_int_set_si(cst->n, 1); - isl_int_set_si(cst->d, 1); - - return &cst->up; -} - -__isl_give struct isl_upoly *isl_upoly_infty(struct isl_ctx *ctx) -{ - struct isl_upoly_cst *cst; - - cst = isl_upoly_cst_alloc(ctx); - if (!cst) - return NULL; - - isl_int_set_si(cst->n, 1); - isl_int_set_si(cst->d, 0); - - return &cst->up; -} - -__isl_give struct isl_upoly *isl_upoly_neginfty(struct isl_ctx *ctx) -{ - struct isl_upoly_cst *cst; - - cst = isl_upoly_cst_alloc(ctx); - if (!cst) - return NULL; - - isl_int_set_si(cst->n, -1); - isl_int_set_si(cst->d, 0); - - return &cst->up; -} - -__isl_give struct isl_upoly *isl_upoly_nan(struct isl_ctx *ctx) -{ - struct isl_upoly_cst *cst; - - cst = isl_upoly_cst_alloc(ctx); - if (!cst) - return NULL; - - isl_int_set_si(cst->n, 0); - isl_int_set_si(cst->d, 0); - - return &cst->up; -} - -__isl_give struct isl_upoly *isl_upoly_rat_cst(struct isl_ctx *ctx, - isl_int n, isl_int d) -{ - struct isl_upoly_cst *cst; - - cst = isl_upoly_cst_alloc(ctx); - if (!cst) - return NULL; - - isl_int_set(cst->n, n); - isl_int_set(cst->d, d); - - return &cst->up; -} - -__isl_give struct isl_upoly_rec *isl_upoly_alloc_rec(struct isl_ctx *ctx, - int var, int size) -{ - struct isl_upoly_rec *rec; - - isl_assert(ctx, var >= 0, return NULL); - isl_assert(ctx, size >= 0, return NULL); - rec = isl_calloc(ctx, struct isl_upoly_rec, - sizeof(struct isl_upoly_rec) + - size * sizeof(struct isl_upoly *)); - if (!rec) - return NULL; - - rec->up.ref = 1; - rec->up.ctx = ctx; - isl_ctx_ref(ctx); - rec->up.var = var; - - rec->n = 0; - rec->size = size; - - return rec; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_reset_domain_space( - __isl_take isl_qpolynomial *qp, __isl_take isl_space *dim) -{ - qp = isl_qpolynomial_cow(qp); - if (!qp || !dim) - goto error; - - isl_space_free(qp->dim); - qp->dim = dim; - - return qp; -error: - isl_qpolynomial_free(qp); - isl_space_free(dim); - return NULL; -} - -/* Reset the space of "qp". This function is called from isl_pw_templ.c - * and doesn't know if the space of an element object is represented - * directly or through its domain. It therefore passes along both. - */ -__isl_give isl_qpolynomial *isl_qpolynomial_reset_space_and_domain( - __isl_take isl_qpolynomial *qp, __isl_take isl_space *space, - __isl_take isl_space *domain) -{ - isl_space_free(space); - return isl_qpolynomial_reset_domain_space(qp, domain); -} - -isl_ctx *isl_qpolynomial_get_ctx(__isl_keep isl_qpolynomial *qp) -{ - return qp ? qp->dim->ctx : NULL; -} - -__isl_give isl_space *isl_qpolynomial_get_domain_space( - __isl_keep isl_qpolynomial *qp) -{ - return qp ? isl_space_copy(qp->dim) : NULL; -} - -__isl_give isl_space *isl_qpolynomial_get_space(__isl_keep isl_qpolynomial *qp) -{ - isl_space *space; - if (!qp) - return NULL; - space = isl_space_copy(qp->dim); - space = isl_space_from_domain(space); - space = isl_space_add_dims(space, isl_dim_out, 1); - return space; -} - -/* Externally, an isl_qpolynomial has a map space, but internally, the - * ls field corresponds to the domain of that space. - */ -unsigned isl_qpolynomial_dim(__isl_keep isl_qpolynomial *qp, - enum isl_dim_type type) -{ - if (!qp) - return 0; - if (type == isl_dim_out) - return 1; - if (type == isl_dim_in) - type = isl_dim_set; - return isl_space_dim(qp->dim, type); -} - -int isl_qpolynomial_is_zero(__isl_keep isl_qpolynomial *qp) -{ - return qp ? isl_upoly_is_zero(qp->upoly) : -1; -} - -int isl_qpolynomial_is_one(__isl_keep isl_qpolynomial *qp) -{ - return qp ? isl_upoly_is_one(qp->upoly) : -1; -} - -int isl_qpolynomial_is_nan(__isl_keep isl_qpolynomial *qp) -{ - return qp ? isl_upoly_is_nan(qp->upoly) : -1; -} - -int isl_qpolynomial_is_infty(__isl_keep isl_qpolynomial *qp) -{ - return qp ? isl_upoly_is_infty(qp->upoly) : -1; -} - -int isl_qpolynomial_is_neginfty(__isl_keep isl_qpolynomial *qp) -{ - return qp ? isl_upoly_is_neginfty(qp->upoly) : -1; -} - -int isl_qpolynomial_sgn(__isl_keep isl_qpolynomial *qp) -{ - return qp ? isl_upoly_sgn(qp->upoly) : 0; -} - -static void upoly_free_cst(__isl_take struct isl_upoly_cst *cst) -{ - isl_int_clear(cst->n); - isl_int_clear(cst->d); -} - -static void upoly_free_rec(__isl_take struct isl_upoly_rec *rec) -{ - int i; - - for (i = 0; i < rec->n; ++i) - isl_upoly_free(rec->p[i]); -} - -__isl_give struct isl_upoly *isl_upoly_copy(__isl_keep struct isl_upoly *up) -{ - if (!up) - return NULL; - - up->ref++; - return up; -} - -__isl_give struct isl_upoly *isl_upoly_dup_cst(__isl_keep struct isl_upoly *up) -{ - struct isl_upoly_cst *cst; - struct isl_upoly_cst *dup; - - cst = isl_upoly_as_cst(up); - if (!cst) - return NULL; - - dup = isl_upoly_as_cst(isl_upoly_zero(up->ctx)); - if (!dup) - return NULL; - isl_int_set(dup->n, cst->n); - isl_int_set(dup->d, cst->d); - - return &dup->up; -} - -__isl_give struct isl_upoly *isl_upoly_dup_rec(__isl_keep struct isl_upoly *up) -{ - int i; - struct isl_upoly_rec *rec; - struct isl_upoly_rec *dup; - - rec = isl_upoly_as_rec(up); - if (!rec) - return NULL; - - dup = isl_upoly_alloc_rec(up->ctx, up->var, rec->n); - if (!dup) - return NULL; - - for (i = 0; i < rec->n; ++i) { - dup->p[i] = isl_upoly_copy(rec->p[i]); - if (!dup->p[i]) - goto error; - dup->n++; - } - - return &dup->up; -error: - isl_upoly_free(&dup->up); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_dup(__isl_keep struct isl_upoly *up) -{ - if (!up) - return NULL; - - if (isl_upoly_is_cst(up)) - return isl_upoly_dup_cst(up); - else - return isl_upoly_dup_rec(up); -} - -__isl_give struct isl_upoly *isl_upoly_cow(__isl_take struct isl_upoly *up) -{ - if (!up) - return NULL; - - if (up->ref == 1) - return up; - up->ref--; - return isl_upoly_dup(up); -} - -void isl_upoly_free(__isl_take struct isl_upoly *up) -{ - if (!up) - return; - - if (--up->ref > 0) - return; - - if (up->var < 0) - upoly_free_cst((struct isl_upoly_cst *)up); - else - upoly_free_rec((struct isl_upoly_rec *)up); - - isl_ctx_deref(up->ctx); - free(up); -} - -static void isl_upoly_cst_reduce(__isl_keep struct isl_upoly_cst *cst) -{ - isl_int gcd; - - isl_int_init(gcd); - isl_int_gcd(gcd, cst->n, cst->d); - if (!isl_int_is_zero(gcd) && !isl_int_is_one(gcd)) { - isl_int_divexact(cst->n, cst->n, gcd); - isl_int_divexact(cst->d, cst->d, gcd); - } - isl_int_clear(gcd); -} - -__isl_give struct isl_upoly *isl_upoly_sum_cst(__isl_take struct isl_upoly *up1, - __isl_take struct isl_upoly *up2) -{ - struct isl_upoly_cst *cst1; - struct isl_upoly_cst *cst2; - - up1 = isl_upoly_cow(up1); - if (!up1 || !up2) - goto error; - - cst1 = isl_upoly_as_cst(up1); - cst2 = isl_upoly_as_cst(up2); - - if (isl_int_eq(cst1->d, cst2->d)) - isl_int_add(cst1->n, cst1->n, cst2->n); - else { - isl_int_mul(cst1->n, cst1->n, cst2->d); - isl_int_addmul(cst1->n, cst2->n, cst1->d); - isl_int_mul(cst1->d, cst1->d, cst2->d); - } - - isl_upoly_cst_reduce(cst1); - - isl_upoly_free(up2); - return up1; -error: - isl_upoly_free(up1); - isl_upoly_free(up2); - return NULL; -} - -static __isl_give struct isl_upoly *replace_by_zero( - __isl_take struct isl_upoly *up) -{ - struct isl_ctx *ctx; - - if (!up) - return NULL; - ctx = up->ctx; - isl_upoly_free(up); - return isl_upoly_zero(ctx); -} - -static __isl_give struct isl_upoly *replace_by_constant_term( - __isl_take struct isl_upoly *up) -{ - struct isl_upoly_rec *rec; - struct isl_upoly *cst; - - if (!up) - return NULL; - - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - cst = isl_upoly_copy(rec->p[0]); - isl_upoly_free(up); - return cst; -error: - isl_upoly_free(up); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_sum(__isl_take struct isl_upoly *up1, - __isl_take struct isl_upoly *up2) -{ - int i; - struct isl_upoly_rec *rec1, *rec2; - - if (!up1 || !up2) - goto error; - - if (isl_upoly_is_nan(up1)) { - isl_upoly_free(up2); - return up1; - } - - if (isl_upoly_is_nan(up2)) { - isl_upoly_free(up1); - return up2; - } - - if (isl_upoly_is_zero(up1)) { - isl_upoly_free(up1); - return up2; - } - - if (isl_upoly_is_zero(up2)) { - isl_upoly_free(up2); - return up1; - } - - if (up1->var < up2->var) - return isl_upoly_sum(up2, up1); - - if (up2->var < up1->var) { - struct isl_upoly_rec *rec; - if (isl_upoly_is_infty(up2) || isl_upoly_is_neginfty(up2)) { - isl_upoly_free(up1); - return up2; - } - up1 = isl_upoly_cow(up1); - rec = isl_upoly_as_rec(up1); - if (!rec) - goto error; - rec->p[0] = isl_upoly_sum(rec->p[0], up2); - if (rec->n == 1) - up1 = replace_by_constant_term(up1); - return up1; - } - - if (isl_upoly_is_cst(up1)) - return isl_upoly_sum_cst(up1, up2); - - rec1 = isl_upoly_as_rec(up1); - rec2 = isl_upoly_as_rec(up2); - if (!rec1 || !rec2) - goto error; - - if (rec1->n < rec2->n) - return isl_upoly_sum(up2, up1); - - up1 = isl_upoly_cow(up1); - rec1 = isl_upoly_as_rec(up1); - if (!rec1) - goto error; - - for (i = rec2->n - 1; i >= 0; --i) { - rec1->p[i] = isl_upoly_sum(rec1->p[i], - isl_upoly_copy(rec2->p[i])); - if (!rec1->p[i]) - goto error; - if (i == rec1->n - 1 && isl_upoly_is_zero(rec1->p[i])) { - isl_upoly_free(rec1->p[i]); - rec1->n--; - } - } - - if (rec1->n == 0) - up1 = replace_by_zero(up1); - else if (rec1->n == 1) - up1 = replace_by_constant_term(up1); - - isl_upoly_free(up2); - - return up1; -error: - isl_upoly_free(up1); - isl_upoly_free(up2); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_cst_add_isl_int( - __isl_take struct isl_upoly *up, isl_int v) -{ - struct isl_upoly_cst *cst; - - up = isl_upoly_cow(up); - if (!up) - return NULL; - - cst = isl_upoly_as_cst(up); - - isl_int_addmul(cst->n, cst->d, v); - - return up; -} - -__isl_give struct isl_upoly *isl_upoly_add_isl_int( - __isl_take struct isl_upoly *up, isl_int v) -{ - struct isl_upoly_rec *rec; - - if (!up) - return NULL; - - if (isl_upoly_is_cst(up)) - return isl_upoly_cst_add_isl_int(up, v); - - up = isl_upoly_cow(up); - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - rec->p[0] = isl_upoly_add_isl_int(rec->p[0], v); - if (!rec->p[0]) - goto error; - - return up; -error: - isl_upoly_free(up); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_cst_mul_isl_int( - __isl_take struct isl_upoly *up, isl_int v) -{ - struct isl_upoly_cst *cst; - - if (isl_upoly_is_zero(up)) - return up; - - up = isl_upoly_cow(up); - if (!up) - return NULL; - - cst = isl_upoly_as_cst(up); - - isl_int_mul(cst->n, cst->n, v); - - return up; -} - -__isl_give struct isl_upoly *isl_upoly_mul_isl_int( - __isl_take struct isl_upoly *up, isl_int v) -{ - int i; - struct isl_upoly_rec *rec; - - if (!up) - return NULL; - - if (isl_upoly_is_cst(up)) - return isl_upoly_cst_mul_isl_int(up, v); - - up = isl_upoly_cow(up); - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - for (i = 0; i < rec->n; ++i) { - rec->p[i] = isl_upoly_mul_isl_int(rec->p[i], v); - if (!rec->p[i]) - goto error; - } - - return up; -error: - isl_upoly_free(up); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_mul_cst(__isl_take struct isl_upoly *up1, - __isl_take struct isl_upoly *up2) -{ - struct isl_upoly_cst *cst1; - struct isl_upoly_cst *cst2; - - up1 = isl_upoly_cow(up1); - if (!up1 || !up2) - goto error; - - cst1 = isl_upoly_as_cst(up1); - cst2 = isl_upoly_as_cst(up2); - - isl_int_mul(cst1->n, cst1->n, cst2->n); - isl_int_mul(cst1->d, cst1->d, cst2->d); - - isl_upoly_cst_reduce(cst1); - - isl_upoly_free(up2); - return up1; -error: - isl_upoly_free(up1); - isl_upoly_free(up2); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_mul_rec(__isl_take struct isl_upoly *up1, - __isl_take struct isl_upoly *up2) -{ - struct isl_upoly_rec *rec1; - struct isl_upoly_rec *rec2; - struct isl_upoly_rec *res = NULL; - int i, j; - int size; - - rec1 = isl_upoly_as_rec(up1); - rec2 = isl_upoly_as_rec(up2); - if (!rec1 || !rec2) - goto error; - size = rec1->n + rec2->n - 1; - res = isl_upoly_alloc_rec(up1->ctx, up1->var, size); - if (!res) - goto error; - - for (i = 0; i < rec1->n; ++i) { - res->p[i] = isl_upoly_mul(isl_upoly_copy(rec2->p[0]), - isl_upoly_copy(rec1->p[i])); - if (!res->p[i]) - goto error; - res->n++; - } - for (; i < size; ++i) { - res->p[i] = isl_upoly_zero(up1->ctx); - if (!res->p[i]) - goto error; - res->n++; - } - for (i = 0; i < rec1->n; ++i) { - for (j = 1; j < rec2->n; ++j) { - struct isl_upoly *up; - up = isl_upoly_mul(isl_upoly_copy(rec2->p[j]), - isl_upoly_copy(rec1->p[i])); - res->p[i + j] = isl_upoly_sum(res->p[i + j], up); - if (!res->p[i + j]) - goto error; - } - } - - isl_upoly_free(up1); - isl_upoly_free(up2); - - return &res->up; -error: - isl_upoly_free(up1); - isl_upoly_free(up2); - isl_upoly_free(&res->up); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_mul(__isl_take struct isl_upoly *up1, - __isl_take struct isl_upoly *up2) -{ - if (!up1 || !up2) - goto error; - - if (isl_upoly_is_nan(up1)) { - isl_upoly_free(up2); - return up1; - } - - if (isl_upoly_is_nan(up2)) { - isl_upoly_free(up1); - return up2; - } - - if (isl_upoly_is_zero(up1)) { - isl_upoly_free(up2); - return up1; - } - - if (isl_upoly_is_zero(up2)) { - isl_upoly_free(up1); - return up2; - } - - if (isl_upoly_is_one(up1)) { - isl_upoly_free(up1); - return up2; - } - - if (isl_upoly_is_one(up2)) { - isl_upoly_free(up2); - return up1; - } - - if (up1->var < up2->var) - return isl_upoly_mul(up2, up1); - - if (up2->var < up1->var) { - int i; - struct isl_upoly_rec *rec; - if (isl_upoly_is_infty(up2) || isl_upoly_is_neginfty(up2)) { - isl_ctx *ctx = up1->ctx; - isl_upoly_free(up1); - isl_upoly_free(up2); - return isl_upoly_nan(ctx); - } - up1 = isl_upoly_cow(up1); - rec = isl_upoly_as_rec(up1); - if (!rec) - goto error; - - for (i = 0; i < rec->n; ++i) { - rec->p[i] = isl_upoly_mul(rec->p[i], - isl_upoly_copy(up2)); - if (!rec->p[i]) - goto error; - } - isl_upoly_free(up2); - return up1; - } - - if (isl_upoly_is_cst(up1)) - return isl_upoly_mul_cst(up1, up2); - - return isl_upoly_mul_rec(up1, up2); -error: - isl_upoly_free(up1); - isl_upoly_free(up2); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_pow(__isl_take struct isl_upoly *up, - unsigned power) -{ - struct isl_upoly *res; - - if (!up) - return NULL; - if (power == 1) - return up; - - if (power % 2) - res = isl_upoly_copy(up); - else - res = isl_upoly_one(up->ctx); - - while (power >>= 1) { - up = isl_upoly_mul(up, isl_upoly_copy(up)); - if (power % 2) - res = isl_upoly_mul(res, isl_upoly_copy(up)); - } - - isl_upoly_free(up); - return res; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_alloc(__isl_take isl_space *dim, - unsigned n_div, __isl_take struct isl_upoly *up) -{ - struct isl_qpolynomial *qp = NULL; - unsigned total; - - if (!dim || !up) - goto error; - - if (!isl_space_is_set(dim)) - isl_die(isl_space_get_ctx(dim), isl_error_invalid, - "domain of polynomial should be a set", goto error); - - total = isl_space_dim(dim, isl_dim_all); - - qp = isl_calloc_type(dim->ctx, struct isl_qpolynomial); - if (!qp) - goto error; - - qp->ref = 1; - qp->div = isl_mat_alloc(dim->ctx, n_div, 1 + 1 + total + n_div); - if (!qp->div) - goto error; - - qp->dim = dim; - qp->upoly = up; - - return qp; -error: - isl_space_free(dim); - isl_upoly_free(up); - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_copy(__isl_keep isl_qpolynomial *qp) -{ - if (!qp) - return NULL; - - qp->ref++; - return qp; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_dup(__isl_keep isl_qpolynomial *qp) -{ - struct isl_qpolynomial *dup; - - if (!qp) - return NULL; - - dup = isl_qpolynomial_alloc(isl_space_copy(qp->dim), qp->div->n_row, - isl_upoly_copy(qp->upoly)); - if (!dup) - return NULL; - isl_mat_free(dup->div); - dup->div = isl_mat_copy(qp->div); - if (!dup->div) - goto error; - - return dup; -error: - isl_qpolynomial_free(dup); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_cow(__isl_take isl_qpolynomial *qp) -{ - if (!qp) - return NULL; - - if (qp->ref == 1) - return qp; - qp->ref--; - return isl_qpolynomial_dup(qp); -} - -void *isl_qpolynomial_free(__isl_take isl_qpolynomial *qp) -{ - if (!qp) - return NULL; - - if (--qp->ref > 0) - return NULL; - - isl_space_free(qp->dim); - isl_mat_free(qp->div); - isl_upoly_free(qp->upoly); - - free(qp); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_var_pow(isl_ctx *ctx, int pos, int power) -{ - int i; - struct isl_upoly_rec *rec; - struct isl_upoly_cst *cst; - - rec = isl_upoly_alloc_rec(ctx, pos, 1 + power); - if (!rec) - return NULL; - for (i = 0; i < 1 + power; ++i) { - rec->p[i] = isl_upoly_zero(ctx); - if (!rec->p[i]) - goto error; - rec->n++; - } - cst = isl_upoly_as_cst(rec->p[power]); - isl_int_set_si(cst->n, 1); - - return &rec->up; -error: - isl_upoly_free(&rec->up); - return NULL; -} - -/* r array maps original positions to new positions. - */ -static __isl_give struct isl_upoly *reorder(__isl_take struct isl_upoly *up, - int *r) -{ - int i; - struct isl_upoly_rec *rec; - struct isl_upoly *base; - struct isl_upoly *res; - - if (isl_upoly_is_cst(up)) - return up; - - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - isl_assert(up->ctx, rec->n >= 1, goto error); - - base = isl_upoly_var_pow(up->ctx, r[up->var], 1); - res = reorder(isl_upoly_copy(rec->p[rec->n - 1]), r); - - for (i = rec->n - 2; i >= 0; --i) { - res = isl_upoly_mul(res, isl_upoly_copy(base)); - res = isl_upoly_sum(res, reorder(isl_upoly_copy(rec->p[i]), r)); - } - - isl_upoly_free(base); - isl_upoly_free(up); - - return res; -error: - isl_upoly_free(up); - return NULL; -} - -static int compatible_divs(__isl_keep isl_mat *div1, __isl_keep isl_mat *div2) -{ - int n_row, n_col; - int equal; - - isl_assert(div1->ctx, div1->n_row >= div2->n_row && - div1->n_col >= div2->n_col, return -1); - - if (div1->n_row == div2->n_row) - return isl_mat_is_equal(div1, div2); - - n_row = div1->n_row; - n_col = div1->n_col; - div1->n_row = div2->n_row; - div1->n_col = div2->n_col; - - equal = isl_mat_is_equal(div1, div2); - - div1->n_row = n_row; - div1->n_col = n_col; - - return equal; -} - -static int cmp_row(__isl_keep isl_mat *div, int i, int j) -{ - int li, lj; - - li = isl_seq_last_non_zero(div->row[i], div->n_col); - lj = isl_seq_last_non_zero(div->row[j], div->n_col); - - if (li != lj) - return li - lj; - - return isl_seq_cmp(div->row[i], div->row[j], div->n_col); -} - -struct isl_div_sort_info { - isl_mat *div; - int row; -}; - -static int div_sort_cmp(const void *p1, const void *p2) -{ - const struct isl_div_sort_info *i1, *i2; - i1 = (const struct isl_div_sort_info *) p1; - i2 = (const struct isl_div_sort_info *) p2; - - return cmp_row(i1->div, i1->row, i2->row); -} - -/* Sort divs and remove duplicates. - */ -static __isl_give isl_qpolynomial *sort_divs(__isl_take isl_qpolynomial *qp) -{ - int i; - int skip; - int len; - struct isl_div_sort_info *array = NULL; - int *pos = NULL, *at = NULL; - int *reordering = NULL; - unsigned div_pos; - - if (!qp) - return NULL; - if (qp->div->n_row <= 1) - return qp; - - div_pos = isl_space_dim(qp->dim, isl_dim_all); - - array = isl_alloc_array(qp->div->ctx, struct isl_div_sort_info, - qp->div->n_row); - pos = isl_alloc_array(qp->div->ctx, int, qp->div->n_row); - at = isl_alloc_array(qp->div->ctx, int, qp->div->n_row); - len = qp->div->n_col - 2; - reordering = isl_alloc_array(qp->div->ctx, int, len); - if (!array || !pos || !at || !reordering) - goto error; - - for (i = 0; i < qp->div->n_row; ++i) { - array[i].div = qp->div; - array[i].row = i; - pos[i] = i; - at[i] = i; - } - - qsort(array, qp->div->n_row, sizeof(struct isl_div_sort_info), - div_sort_cmp); - - for (i = 0; i < div_pos; ++i) - reordering[i] = i; - - for (i = 0; i < qp->div->n_row; ++i) { - if (pos[array[i].row] == i) - continue; - qp->div = isl_mat_swap_rows(qp->div, i, pos[array[i].row]); - pos[at[i]] = pos[array[i].row]; - at[pos[array[i].row]] = at[i]; - at[i] = array[i].row; - pos[array[i].row] = i; - } - - skip = 0; - for (i = 0; i < len - div_pos; ++i) { - if (i > 0 && - isl_seq_eq(qp->div->row[i - skip - 1], - qp->div->row[i - skip], qp->div->n_col)) { - qp->div = isl_mat_drop_rows(qp->div, i - skip, 1); - isl_mat_col_add(qp->div, 2 + div_pos + i - skip - 1, - 2 + div_pos + i - skip); - qp->div = isl_mat_drop_cols(qp->div, - 2 + div_pos + i - skip, 1); - skip++; - } - reordering[div_pos + array[i].row] = div_pos + i - skip; - } - - qp->upoly = reorder(qp->upoly, reordering); - - if (!qp->upoly || !qp->div) - goto error; - - free(at); - free(pos); - free(array); - free(reordering); - - return qp; -error: - free(at); - free(pos); - free(array); - free(reordering); - isl_qpolynomial_free(qp); - return NULL; -} - -static __isl_give struct isl_upoly *expand(__isl_take struct isl_upoly *up, - int *exp, int first) -{ - int i; - struct isl_upoly_rec *rec; - - if (isl_upoly_is_cst(up)) - return up; - - if (up->var < first) - return up; - - if (exp[up->var - first] == up->var - first) - return up; - - up = isl_upoly_cow(up); - if (!up) - goto error; - - up->var = exp[up->var - first] + first; - - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - for (i = 0; i < rec->n; ++i) { - rec->p[i] = expand(rec->p[i], exp, first); - if (!rec->p[i]) - goto error; - } - - return up; -error: - isl_upoly_free(up); - return NULL; -} - -static __isl_give isl_qpolynomial *with_merged_divs( - __isl_give isl_qpolynomial *(*fn)(__isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2), - __isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2) -{ - int *exp1 = NULL; - int *exp2 = NULL; - isl_mat *div = NULL; - - qp1 = isl_qpolynomial_cow(qp1); - qp2 = isl_qpolynomial_cow(qp2); - - if (!qp1 || !qp2) - goto error; - - isl_assert(qp1->div->ctx, qp1->div->n_row >= qp2->div->n_row && - qp1->div->n_col >= qp2->div->n_col, goto error); - - exp1 = isl_alloc_array(qp1->div->ctx, int, qp1->div->n_row); - exp2 = isl_alloc_array(qp2->div->ctx, int, qp2->div->n_row); - if (!exp1 || !exp2) - goto error; - - div = isl_merge_divs(qp1->div, qp2->div, exp1, exp2); - if (!div) - goto error; - - isl_mat_free(qp1->div); - qp1->div = isl_mat_copy(div); - isl_mat_free(qp2->div); - qp2->div = isl_mat_copy(div); - - qp1->upoly = expand(qp1->upoly, exp1, div->n_col - div->n_row - 2); - qp2->upoly = expand(qp2->upoly, exp2, div->n_col - div->n_row - 2); - - if (!qp1->upoly || !qp2->upoly) - goto error; - - isl_mat_free(div); - free(exp1); - free(exp2); - - return fn(qp1, qp2); -error: - isl_mat_free(div); - free(exp1); - free(exp2); - isl_qpolynomial_free(qp1); - isl_qpolynomial_free(qp2); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_add(__isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2) -{ - qp1 = isl_qpolynomial_cow(qp1); - - if (!qp1 || !qp2) - goto error; - - if (qp1->div->n_row < qp2->div->n_row) - return isl_qpolynomial_add(qp2, qp1); - - isl_assert(qp1->dim->ctx, isl_space_is_equal(qp1->dim, qp2->dim), goto error); - if (!compatible_divs(qp1->div, qp2->div)) - return with_merged_divs(isl_qpolynomial_add, qp1, qp2); - - qp1->upoly = isl_upoly_sum(qp1->upoly, isl_upoly_copy(qp2->upoly)); - if (!qp1->upoly) - goto error; - - isl_qpolynomial_free(qp2); - - return qp1; -error: - isl_qpolynomial_free(qp1); - isl_qpolynomial_free(qp2); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_add_on_domain( - __isl_keep isl_set *dom, - __isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2) -{ - qp1 = isl_qpolynomial_add(qp1, qp2); - qp1 = isl_qpolynomial_gist(qp1, isl_set_copy(dom)); - return qp1; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_sub(__isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2) -{ - return isl_qpolynomial_add(qp1, isl_qpolynomial_neg(qp2)); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_add_isl_int( - __isl_take isl_qpolynomial *qp, isl_int v) -{ - if (isl_int_is_zero(v)) - return qp; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - - qp->upoly = isl_upoly_add_isl_int(qp->upoly, v); - if (!qp->upoly) - goto error; - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; - -} - -__isl_give isl_qpolynomial *isl_qpolynomial_neg(__isl_take isl_qpolynomial *qp) -{ - if (!qp) - return NULL; - - return isl_qpolynomial_mul_isl_int(qp, qp->dim->ctx->negone); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_mul_isl_int( - __isl_take isl_qpolynomial *qp, isl_int v) -{ - if (isl_int_is_one(v)) - return qp; - - if (qp && isl_int_is_zero(v)) { - isl_qpolynomial *zero; - zero = isl_qpolynomial_zero_on_domain(isl_space_copy(qp->dim)); - isl_qpolynomial_free(qp); - return zero; - } - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - - qp->upoly = isl_upoly_mul_isl_int(qp->upoly, v); - if (!qp->upoly) - goto error; - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_scale( - __isl_take isl_qpolynomial *qp, isl_int v) -{ - return isl_qpolynomial_mul_isl_int(qp, v); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_mul(__isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2) -{ - qp1 = isl_qpolynomial_cow(qp1); - - if (!qp1 || !qp2) - goto error; - - if (qp1->div->n_row < qp2->div->n_row) - return isl_qpolynomial_mul(qp2, qp1); - - isl_assert(qp1->dim->ctx, isl_space_is_equal(qp1->dim, qp2->dim), goto error); - if (!compatible_divs(qp1->div, qp2->div)) - return with_merged_divs(isl_qpolynomial_mul, qp1, qp2); - - qp1->upoly = isl_upoly_mul(qp1->upoly, isl_upoly_copy(qp2->upoly)); - if (!qp1->upoly) - goto error; - - isl_qpolynomial_free(qp2); - - return qp1; -error: - isl_qpolynomial_free(qp1); - isl_qpolynomial_free(qp2); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_pow(__isl_take isl_qpolynomial *qp, - unsigned power) -{ - qp = isl_qpolynomial_cow(qp); - - if (!qp) - return NULL; - - qp->upoly = isl_upoly_pow(qp->upoly, power); - if (!qp->upoly) - goto error; - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_pow( - __isl_take isl_pw_qpolynomial *pwqp, unsigned power) -{ - int i; - - if (power == 1) - return pwqp; - - pwqp = isl_pw_qpolynomial_cow(pwqp); - if (!pwqp) - return NULL; - - for (i = 0; i < pwqp->n; ++i) { - pwqp->p[i].qp = isl_qpolynomial_pow(pwqp->p[i].qp, power); - if (!pwqp->p[i].qp) - return isl_pw_qpolynomial_free(pwqp); - } - - return pwqp; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_zero_on_domain( - __isl_take isl_space *dim) -{ - if (!dim) - return NULL; - return isl_qpolynomial_alloc(dim, 0, isl_upoly_zero(dim->ctx)); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_one_on_domain( - __isl_take isl_space *dim) -{ - if (!dim) - return NULL; - return isl_qpolynomial_alloc(dim, 0, isl_upoly_one(dim->ctx)); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_infty_on_domain( - __isl_take isl_space *dim) -{ - if (!dim) - return NULL; - return isl_qpolynomial_alloc(dim, 0, isl_upoly_infty(dim->ctx)); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_neginfty_on_domain( - __isl_take isl_space *dim) -{ - if (!dim) - return NULL; - return isl_qpolynomial_alloc(dim, 0, isl_upoly_neginfty(dim->ctx)); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_nan_on_domain( - __isl_take isl_space *dim) -{ - if (!dim) - return NULL; - return isl_qpolynomial_alloc(dim, 0, isl_upoly_nan(dim->ctx)); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_cst_on_domain( - __isl_take isl_space *dim, - isl_int v) -{ - struct isl_qpolynomial *qp; - struct isl_upoly_cst *cst; - - if (!dim) - return NULL; - - qp = isl_qpolynomial_alloc(dim, 0, isl_upoly_zero(dim->ctx)); - if (!qp) - return NULL; - - cst = isl_upoly_as_cst(qp->upoly); - isl_int_set(cst->n, v); - - return qp; -} - -int isl_qpolynomial_is_cst(__isl_keep isl_qpolynomial *qp, - isl_int *n, isl_int *d) -{ - struct isl_upoly_cst *cst; - - if (!qp) - return -1; - - if (!isl_upoly_is_cst(qp->upoly)) - return 0; - - cst = isl_upoly_as_cst(qp->upoly); - if (!cst) - return -1; - - if (n) - isl_int_set(*n, cst->n); - if (d) - isl_int_set(*d, cst->d); - - return 1; -} - -int isl_upoly_is_affine(__isl_keep struct isl_upoly *up) -{ - int is_cst; - struct isl_upoly_rec *rec; - - if (!up) - return -1; - - if (up->var < 0) - return 1; - - rec = isl_upoly_as_rec(up); - if (!rec) - return -1; - - if (rec->n > 2) - return 0; - - isl_assert(up->ctx, rec->n > 1, return -1); - - is_cst = isl_upoly_is_cst(rec->p[1]); - if (is_cst < 0) - return -1; - if (!is_cst) - return 0; - - return isl_upoly_is_affine(rec->p[0]); -} - -int isl_qpolynomial_is_affine(__isl_keep isl_qpolynomial *qp) -{ - if (!qp) - return -1; - - if (qp->div->n_row > 0) - return 0; - - return isl_upoly_is_affine(qp->upoly); -} - -static void update_coeff(__isl_keep isl_vec *aff, - __isl_keep struct isl_upoly_cst *cst, int pos) -{ - isl_int gcd; - isl_int f; - - if (isl_int_is_zero(cst->n)) - return; - - isl_int_init(gcd); - isl_int_init(f); - isl_int_gcd(gcd, cst->d, aff->el[0]); - isl_int_divexact(f, cst->d, gcd); - isl_int_divexact(gcd, aff->el[0], gcd); - isl_seq_scale(aff->el, aff->el, f, aff->size); - isl_int_mul(aff->el[1 + pos], gcd, cst->n); - isl_int_clear(gcd); - isl_int_clear(f); -} - -int isl_upoly_update_affine(__isl_keep struct isl_upoly *up, - __isl_keep isl_vec *aff) -{ - struct isl_upoly_cst *cst; - struct isl_upoly_rec *rec; - - if (!up || !aff) - return -1; - - if (up->var < 0) { - struct isl_upoly_cst *cst; - - cst = isl_upoly_as_cst(up); - if (!cst) - return -1; - update_coeff(aff, cst, 0); - return 0; - } - - rec = isl_upoly_as_rec(up); - if (!rec) - return -1; - isl_assert(up->ctx, rec->n == 2, return -1); - - cst = isl_upoly_as_cst(rec->p[1]); - if (!cst) - return -1; - update_coeff(aff, cst, 1 + up->var); - - return isl_upoly_update_affine(rec->p[0], aff); -} - -__isl_give isl_vec *isl_qpolynomial_extract_affine( - __isl_keep isl_qpolynomial *qp) -{ - isl_vec *aff; - unsigned d; - - if (!qp) - return NULL; - - d = isl_space_dim(qp->dim, isl_dim_all); - aff = isl_vec_alloc(qp->div->ctx, 2 + d + qp->div->n_row); - if (!aff) - return NULL; - - isl_seq_clr(aff->el + 1, 1 + d + qp->div->n_row); - isl_int_set_si(aff->el[0], 1); - - if (isl_upoly_update_affine(qp->upoly, aff) < 0) - goto error; - - return aff; -error: - isl_vec_free(aff); - return NULL; -} - -int isl_qpolynomial_plain_is_equal(__isl_keep isl_qpolynomial *qp1, - __isl_keep isl_qpolynomial *qp2) -{ - int equal; - - if (!qp1 || !qp2) - return -1; - - equal = isl_space_is_equal(qp1->dim, qp2->dim); - if (equal < 0 || !equal) - return equal; - - equal = isl_mat_is_equal(qp1->div, qp2->div); - if (equal < 0 || !equal) - return equal; - - return isl_upoly_is_equal(qp1->upoly, qp2->upoly); -} - -static void upoly_update_den(__isl_keep struct isl_upoly *up, isl_int *d) -{ - int i; - struct isl_upoly_rec *rec; - - if (isl_upoly_is_cst(up)) { - struct isl_upoly_cst *cst; - cst = isl_upoly_as_cst(up); - if (!cst) - return; - isl_int_lcm(*d, *d, cst->d); - return; - } - - rec = isl_upoly_as_rec(up); - if (!rec) - return; - - for (i = 0; i < rec->n; ++i) - upoly_update_den(rec->p[i], d); -} - -void isl_qpolynomial_get_den(__isl_keep isl_qpolynomial *qp, isl_int *d) -{ - isl_int_set_si(*d, 1); - if (!qp) - return; - upoly_update_den(qp->upoly, d); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_var_pow_on_domain( - __isl_take isl_space *dim, int pos, int power) -{ - struct isl_ctx *ctx; - - if (!dim) - return NULL; - - ctx = dim->ctx; - - return isl_qpolynomial_alloc(dim, 0, isl_upoly_var_pow(ctx, pos, power)); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_var_on_domain(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos) -{ - if (!dim) - return NULL; - - isl_assert(dim->ctx, isl_space_dim(dim, isl_dim_in) == 0, goto error); - isl_assert(dim->ctx, pos < isl_space_dim(dim, type), goto error); - - if (type == isl_dim_set) - pos += isl_space_dim(dim, isl_dim_param); - - return isl_qpolynomial_var_pow_on_domain(dim, pos, 1); -error: - isl_space_free(dim); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_subs(__isl_take struct isl_upoly *up, - unsigned first, unsigned n, __isl_keep struct isl_upoly **subs) -{ - int i; - struct isl_upoly_rec *rec; - struct isl_upoly *base, *res; - - if (!up) - return NULL; - - if (isl_upoly_is_cst(up)) - return up; - - if (up->var < first) - return up; - - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - isl_assert(up->ctx, rec->n >= 1, goto error); - - if (up->var >= first + n) - base = isl_upoly_var_pow(up->ctx, up->var, 1); - else - base = isl_upoly_copy(subs[up->var - first]); - - res = isl_upoly_subs(isl_upoly_copy(rec->p[rec->n - 1]), first, n, subs); - for (i = rec->n - 2; i >= 0; --i) { - struct isl_upoly *t; - t = isl_upoly_subs(isl_upoly_copy(rec->p[i]), first, n, subs); - res = isl_upoly_mul(res, isl_upoly_copy(base)); - res = isl_upoly_sum(res, t); - } - - isl_upoly_free(base); - isl_upoly_free(up); - - return res; -error: - isl_upoly_free(up); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_from_affine(isl_ctx *ctx, isl_int *f, - isl_int denom, unsigned len) -{ - int i; - struct isl_upoly *up; - - isl_assert(ctx, len >= 1, return NULL); - - up = isl_upoly_rat_cst(ctx, f[0], denom); - for (i = 0; i < len - 1; ++i) { - struct isl_upoly *t; - struct isl_upoly *c; - - if (isl_int_is_zero(f[1 + i])) - continue; - - c = isl_upoly_rat_cst(ctx, f[1 + i], denom); - t = isl_upoly_var_pow(ctx, i, 1); - t = isl_upoly_mul(c, t); - up = isl_upoly_sum(up, t); - } - - return up; -} - -/* Remove common factor of non-constant terms and denominator. - */ -static void normalize_div(__isl_keep isl_qpolynomial *qp, int div) -{ - isl_ctx *ctx = qp->div->ctx; - unsigned total = qp->div->n_col - 2; - - isl_seq_gcd(qp->div->row[div] + 2, total, &ctx->normalize_gcd); - isl_int_gcd(ctx->normalize_gcd, - ctx->normalize_gcd, qp->div->row[div][0]); - if (isl_int_is_one(ctx->normalize_gcd)) - return; - - isl_seq_scale_down(qp->div->row[div] + 2, qp->div->row[div] + 2, - ctx->normalize_gcd, total); - isl_int_divexact(qp->div->row[div][0], qp->div->row[div][0], - ctx->normalize_gcd); - isl_int_fdiv_q(qp->div->row[div][1], qp->div->row[div][1], - ctx->normalize_gcd); -} - -/* Replace the integer division identified by "div" by the polynomial "s". - * The integer division is assumed not to appear in the definition - * of any other integer divisions. - */ -static __isl_give isl_qpolynomial *substitute_div( - __isl_take isl_qpolynomial *qp, - int div, __isl_take struct isl_upoly *s) -{ - int i; - int total; - int *reordering; - - if (!qp || !s) - goto error; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - goto error; - - total = isl_space_dim(qp->dim, isl_dim_all); - qp->upoly = isl_upoly_subs(qp->upoly, total + div, 1, &s); - if (!qp->upoly) - goto error; - - reordering = isl_alloc_array(qp->dim->ctx, int, total + qp->div->n_row); - if (!reordering) - goto error; - for (i = 0; i < total + div; ++i) - reordering[i] = i; - for (i = total + div + 1; i < total + qp->div->n_row; ++i) - reordering[i] = i - 1; - qp->div = isl_mat_drop_rows(qp->div, div, 1); - qp->div = isl_mat_drop_cols(qp->div, 2 + total + div, 1); - qp->upoly = reorder(qp->upoly, reordering); - free(reordering); - - if (!qp->upoly || !qp->div) - goto error; - - isl_upoly_free(s); - return qp; -error: - isl_qpolynomial_free(qp); - isl_upoly_free(s); - return NULL; -} - -/* Replace all integer divisions [e/d] that turn out to not actually be integer - * divisions because d is equal to 1 by their definition, i.e., e. - */ -static __isl_give isl_qpolynomial *substitute_non_divs( - __isl_take isl_qpolynomial *qp) -{ - int i, j; - int total; - struct isl_upoly *s; - - if (!qp) - return NULL; - - total = isl_space_dim(qp->dim, isl_dim_all); - for (i = 0; qp && i < qp->div->n_row; ++i) { - if (!isl_int_is_one(qp->div->row[i][0])) - continue; - for (j = i + 1; j < qp->div->n_row; ++j) { - if (isl_int_is_zero(qp->div->row[j][2 + total + i])) - continue; - isl_seq_combine(qp->div->row[j] + 1, - qp->div->ctx->one, qp->div->row[j] + 1, - qp->div->row[j][2 + total + i], - qp->div->row[i] + 1, 1 + total + i); - isl_int_set_si(qp->div->row[j][2 + total + i], 0); - normalize_div(qp, j); - } - s = isl_upoly_from_affine(qp->dim->ctx, qp->div->row[i] + 1, - qp->div->row[i][0], qp->div->n_col - 1); - qp = substitute_div(qp, i, s); - --i; - } - - return qp; -} - -/* Reduce the coefficients of div "div" to lie in the interval [0, d-1], - * with d the denominator. When replacing the coefficient e of x by - * d * frac(e/d) = e - d * floor(e/d), we are subtracting d * floor(e/d) * x - * inside the division, so we need to add floor(e/d) * x outside. - * That is, we replace q by q' + floor(e/d) * x and we therefore need - * to adjust the coefficient of x in each later div that depends on the - * current div "div" and also in the affine expression "aff" - * (if it too depends on "div"). - */ -static void reduce_div(__isl_keep isl_qpolynomial *qp, int div, - __isl_keep isl_vec *aff) -{ - int i, j; - isl_int v; - unsigned total = qp->div->n_col - qp->div->n_row - 2; - - isl_int_init(v); - for (i = 0; i < 1 + total + div; ++i) { - if (isl_int_is_nonneg(qp->div->row[div][1 + i]) && - isl_int_lt(qp->div->row[div][1 + i], qp->div->row[div][0])) - continue; - isl_int_fdiv_q(v, qp->div->row[div][1 + i], qp->div->row[div][0]); - isl_int_fdiv_r(qp->div->row[div][1 + i], - qp->div->row[div][1 + i], qp->div->row[div][0]); - if (!isl_int_is_zero(aff->el[1 + total + div])) - isl_int_addmul(aff->el[i], v, aff->el[1 + total + div]); - for (j = div + 1; j < qp->div->n_row; ++j) { - if (isl_int_is_zero(qp->div->row[j][2 + total + div])) - continue; - isl_int_addmul(qp->div->row[j][1 + i], - v, qp->div->row[j][2 + total + div]); - } - } - isl_int_clear(v); -} - -/* Check if the last non-zero coefficient is bigger that half of the - * denominator. If so, we will invert the div to further reduce the number - * of distinct divs that may appear. - * If the last non-zero coefficient is exactly half the denominator, - * then we continue looking for earlier coefficients that are bigger - * than half the denominator. - */ -static int needs_invert(__isl_keep isl_mat *div, int row) -{ - int i; - int cmp; - - for (i = div->n_col - 1; i >= 1; --i) { - if (isl_int_is_zero(div->row[row][i])) - continue; - isl_int_mul_ui(div->row[row][i], div->row[row][i], 2); - cmp = isl_int_cmp(div->row[row][i], div->row[row][0]); - isl_int_divexact_ui(div->row[row][i], div->row[row][i], 2); - if (cmp) - return cmp > 0; - if (i == 1) - return 1; - } - - return 0; -} - -/* Replace div "div" q = [e/d] by -[(-e+(d-1))/d]. - * We only invert the coefficients of e (and the coefficient of q in - * later divs and in "aff"). After calling this function, the - * coefficients of e should be reduced again. - */ -static void invert_div(__isl_keep isl_qpolynomial *qp, int div, - __isl_keep isl_vec *aff) -{ - unsigned total = qp->div->n_col - qp->div->n_row - 2; - - isl_seq_neg(qp->div->row[div] + 1, - qp->div->row[div] + 1, qp->div->n_col - 1); - isl_int_sub_ui(qp->div->row[div][1], qp->div->row[div][1], 1); - isl_int_add(qp->div->row[div][1], - qp->div->row[div][1], qp->div->row[div][0]); - if (!isl_int_is_zero(aff->el[1 + total + div])) - isl_int_neg(aff->el[1 + total + div], aff->el[1 + total + div]); - isl_mat_col_mul(qp->div, 2 + total + div, - qp->div->ctx->negone, 2 + total + div); -} - -/* Assuming "qp" is a monomial, reduce all its divs to have coefficients - * in the interval [0, d-1], with d the denominator and such that the - * last non-zero coefficient that is not equal to d/2 is smaller than d/2. - * - * After the reduction, some divs may have become redundant or identical, - * so we call substitute_non_divs and sort_divs. If these functions - * eliminate divs or merge two or more divs into one, the coefficients - * of the enclosing divs may have to be reduced again, so we call - * ourselves recursively if the number of divs decreases. - */ -static __isl_give isl_qpolynomial *reduce_divs(__isl_take isl_qpolynomial *qp) -{ - int i; - isl_vec *aff = NULL; - struct isl_upoly *s; - unsigned n_div; - - if (!qp) - return NULL; - - aff = isl_vec_alloc(qp->div->ctx, qp->div->n_col - 1); - aff = isl_vec_clr(aff); - if (!aff) - goto error; - - isl_int_set_si(aff->el[1 + qp->upoly->var], 1); - - for (i = 0; i < qp->div->n_row; ++i) { - normalize_div(qp, i); - reduce_div(qp, i, aff); - if (needs_invert(qp->div, i)) { - invert_div(qp, i, aff); - reduce_div(qp, i, aff); - } - } - - s = isl_upoly_from_affine(qp->div->ctx, aff->el, - qp->div->ctx->one, aff->size); - qp->upoly = isl_upoly_subs(qp->upoly, qp->upoly->var, 1, &s); - isl_upoly_free(s); - if (!qp->upoly) - goto error; - - isl_vec_free(aff); - - n_div = qp->div->n_row; - qp = substitute_non_divs(qp); - qp = sort_divs(qp); - if (qp && qp->div->n_row < n_div) - return reduce_divs(qp); - - return qp; -error: - isl_qpolynomial_free(qp); - isl_vec_free(aff); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_rat_cst_on_domain( - __isl_take isl_space *dim, const isl_int n, const isl_int d) -{ - struct isl_qpolynomial *qp; - struct isl_upoly_cst *cst; - - if (!dim) - return NULL; - - qp = isl_qpolynomial_alloc(dim, 0, isl_upoly_zero(dim->ctx)); - if (!qp) - return NULL; - - cst = isl_upoly_as_cst(qp->upoly); - isl_int_set(cst->n, n); - isl_int_set(cst->d, d); - - return qp; -} - -static int up_set_active(__isl_keep struct isl_upoly *up, int *active, int d) -{ - struct isl_upoly_rec *rec; - int i; - - if (!up) - return -1; - - if (isl_upoly_is_cst(up)) - return 0; - - if (up->var < d) - active[up->var] = 1; - - rec = isl_upoly_as_rec(up); - for (i = 0; i < rec->n; ++i) - if (up_set_active(rec->p[i], active, d) < 0) - return -1; - - return 0; -} - -static int set_active(__isl_keep isl_qpolynomial *qp, int *active) -{ - int i, j; - int d = isl_space_dim(qp->dim, isl_dim_all); - - if (!qp || !active) - return -1; - - for (i = 0; i < d; ++i) - for (j = 0; j < qp->div->n_row; ++j) { - if (isl_int_is_zero(qp->div->row[j][2 + i])) - continue; - active[i] = 1; - break; - } - - return up_set_active(qp->upoly, active, d); -} - -int isl_qpolynomial_involves_dims(__isl_keep isl_qpolynomial *qp, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - int *active = NULL; - int involves = 0; - - if (!qp) - return -1; - if (n == 0) - return 0; - - isl_assert(qp->dim->ctx, - first + n <= isl_qpolynomial_dim(qp, type), return -1); - isl_assert(qp->dim->ctx, type == isl_dim_param || - type == isl_dim_in, return -1); - - active = isl_calloc_array(qp->dim->ctx, int, - isl_space_dim(qp->dim, isl_dim_all)); - if (set_active(qp, active) < 0) - goto error; - - if (type == isl_dim_in) - first += isl_space_dim(qp->dim, isl_dim_param); - for (i = 0; i < n; ++i) - if (active[first + i]) { - involves = 1; - break; - } - - free(active); - - return involves; -error: - free(active); - return -1; -} - -/* Remove divs that do not appear in the quasi-polynomial, nor in any - * of the divs that do appear in the quasi-polynomial. - */ -static __isl_give isl_qpolynomial *remove_redundant_divs( - __isl_take isl_qpolynomial *qp) -{ - int i, j; - int d; - int len; - int skip; - int *active = NULL; - int *reordering = NULL; - int redundant = 0; - int n_div; - isl_ctx *ctx; - - if (!qp) - return NULL; - if (qp->div->n_row == 0) - return qp; - - d = isl_space_dim(qp->dim, isl_dim_all); - len = qp->div->n_col - 2; - ctx = isl_qpolynomial_get_ctx(qp); - active = isl_calloc_array(ctx, int, len); - if (!active) - goto error; - - if (up_set_active(qp->upoly, active, len) < 0) - goto error; - - for (i = qp->div->n_row - 1; i >= 0; --i) { - if (!active[d + i]) { - redundant = 1; - continue; - } - for (j = 0; j < i; ++j) { - if (isl_int_is_zero(qp->div->row[i][2 + d + j])) - continue; - active[d + j] = 1; - break; - } - } - - if (!redundant) { - free(active); - return qp; - } - - reordering = isl_alloc_array(qp->div->ctx, int, len); - if (!reordering) - goto error; - - for (i = 0; i < d; ++i) - reordering[i] = i; - - skip = 0; - n_div = qp->div->n_row; - for (i = 0; i < n_div; ++i) { - if (!active[d + i]) { - qp->div = isl_mat_drop_rows(qp->div, i - skip, 1); - qp->div = isl_mat_drop_cols(qp->div, - 2 + d + i - skip, 1); - skip++; - } - reordering[d + i] = d + i - skip; - } - - qp->upoly = reorder(qp->upoly, reordering); - - if (!qp->upoly || !qp->div) - goto error; - - free(active); - free(reordering); - - return qp; -error: - free(active); - free(reordering); - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_drop(__isl_take struct isl_upoly *up, - unsigned first, unsigned n) -{ - int i; - struct isl_upoly_rec *rec; - - if (!up) - return NULL; - if (n == 0 || up->var < 0 || up->var < first) - return up; - if (up->var < first + n) { - up = replace_by_constant_term(up); - return isl_upoly_drop(up, first, n); - } - up = isl_upoly_cow(up); - if (!up) - return NULL; - up->var -= n; - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - for (i = 0; i < rec->n; ++i) { - rec->p[i] = isl_upoly_drop(rec->p[i], first, n); - if (!rec->p[i]) - goto error; - } - - return up; -error: - isl_upoly_free(up); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_set_dim_name( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type type, unsigned pos, const char *s) -{ - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - qp->dim = isl_space_set_dim_name(qp->dim, type, pos, s); - if (!qp->dim) - goto error; - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_drop_dims( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type type, unsigned first, unsigned n) -{ - if (!qp) - return NULL; - if (type == isl_dim_out) - isl_die(qp->dim->ctx, isl_error_invalid, - "cannot drop output/set dimension", - goto error); - if (type == isl_dim_in) - type = isl_dim_set; - if (n == 0 && !isl_space_is_named_or_nested(qp->dim, type)) - return qp; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - - isl_assert(qp->dim->ctx, first + n <= isl_space_dim(qp->dim, type), - goto error); - isl_assert(qp->dim->ctx, type == isl_dim_param || - type == isl_dim_set, goto error); - - qp->dim = isl_space_drop_dims(qp->dim, type, first, n); - if (!qp->dim) - goto error; - - if (type == isl_dim_set) - first += isl_space_dim(qp->dim, isl_dim_param); - - qp->div = isl_mat_drop_cols(qp->div, 2 + first, n); - if (!qp->div) - goto error; - - qp->upoly = isl_upoly_drop(qp->upoly, first, n); - if (!qp->upoly) - goto error; - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -/* Project the domain of the quasi-polynomial onto its parameter space. - * The quasi-polynomial may not involve any of the domain dimensions. - */ -__isl_give isl_qpolynomial *isl_qpolynomial_project_domain_on_params( - __isl_take isl_qpolynomial *qp) -{ - isl_space *space; - unsigned n; - int involves; - - n = isl_qpolynomial_dim(qp, isl_dim_in); - involves = isl_qpolynomial_involves_dims(qp, isl_dim_in, 0, n); - if (involves < 0) - return isl_qpolynomial_free(qp); - if (involves) - isl_die(isl_qpolynomial_get_ctx(qp), isl_error_invalid, - "polynomial involves some of the domain dimensions", - return isl_qpolynomial_free(qp)); - qp = isl_qpolynomial_drop_dims(qp, isl_dim_in, 0, n); - space = isl_qpolynomial_get_domain_space(qp); - space = isl_space_params(space); - qp = isl_qpolynomial_reset_domain_space(qp, space); - return qp; -} - -static __isl_give isl_qpolynomial *isl_qpolynomial_substitute_equalities_lifted( - __isl_take isl_qpolynomial *qp, __isl_take isl_basic_set *eq) -{ - int i, j, k; - isl_int denom; - unsigned total; - unsigned n_div; - struct isl_upoly *up; - - if (!eq) - goto error; - if (eq->n_eq == 0) { - isl_basic_set_free(eq); - return qp; - } - - qp = isl_qpolynomial_cow(qp); - if (!qp) - goto error; - qp->div = isl_mat_cow(qp->div); - if (!qp->div) - goto error; - - total = 1 + isl_space_dim(eq->dim, isl_dim_all); - n_div = eq->n_div; - isl_int_init(denom); - for (i = 0; i < eq->n_eq; ++i) { - j = isl_seq_last_non_zero(eq->eq[i], total + n_div); - if (j < 0 || j == 0 || j >= total) - continue; - - for (k = 0; k < qp->div->n_row; ++k) { - if (isl_int_is_zero(qp->div->row[k][1 + j])) - continue; - isl_seq_elim(qp->div->row[k] + 1, eq->eq[i], j, total, - &qp->div->row[k][0]); - normalize_div(qp, k); - } - - if (isl_int_is_pos(eq->eq[i][j])) - isl_seq_neg(eq->eq[i], eq->eq[i], total); - isl_int_abs(denom, eq->eq[i][j]); - isl_int_set_si(eq->eq[i][j], 0); - - up = isl_upoly_from_affine(qp->dim->ctx, - eq->eq[i], denom, total); - qp->upoly = isl_upoly_subs(qp->upoly, j - 1, 1, &up); - isl_upoly_free(up); - } - isl_int_clear(denom); - - if (!qp->upoly) - goto error; - - isl_basic_set_free(eq); - - qp = substitute_non_divs(qp); - qp = sort_divs(qp); - - return qp; -error: - isl_basic_set_free(eq); - isl_qpolynomial_free(qp); - return NULL; -} - -/* Exploit the equalities in "eq" to simplify the quasi-polynomial. - */ -__isl_give isl_qpolynomial *isl_qpolynomial_substitute_equalities( - __isl_take isl_qpolynomial *qp, __isl_take isl_basic_set *eq) -{ - if (!qp || !eq) - goto error; - if (qp->div->n_row > 0) - eq = isl_basic_set_add(eq, isl_dim_set, qp->div->n_row); - return isl_qpolynomial_substitute_equalities_lifted(qp, eq); -error: - isl_basic_set_free(eq); - isl_qpolynomial_free(qp); - return NULL; -} - -static __isl_give isl_basic_set *add_div_constraints( - __isl_take isl_basic_set *bset, __isl_take isl_mat *div) -{ - int i; - unsigned total; - - if (!bset || !div) - goto error; - - bset = isl_basic_set_extend_constraints(bset, 0, 2 * div->n_row); - if (!bset) - goto error; - total = isl_basic_set_total_dim(bset); - for (i = 0; i < div->n_row; ++i) - if (isl_basic_set_add_div_constraints_var(bset, - total - div->n_row + i, div->row[i]) < 0) - goto error; - - isl_mat_free(div); - return bset; -error: - isl_mat_free(div); - isl_basic_set_free(bset); - return NULL; -} - -/* Look for equalities among the variables shared by context and qp - * and the integer divisions of qp, if any. - * The equalities are then used to eliminate variables and/or integer - * divisions from qp. - */ -__isl_give isl_qpolynomial *isl_qpolynomial_gist( - __isl_take isl_qpolynomial *qp, __isl_take isl_set *context) -{ - isl_basic_set *aff; - - if (!qp) - goto error; - if (qp->div->n_row > 0) { - isl_basic_set *bset; - context = isl_set_add_dims(context, isl_dim_set, - qp->div->n_row); - bset = isl_basic_set_universe(isl_set_get_space(context)); - bset = add_div_constraints(bset, isl_mat_copy(qp->div)); - context = isl_set_intersect(context, - isl_set_from_basic_set(bset)); - } - - aff = isl_set_affine_hull(context); - return isl_qpolynomial_substitute_equalities_lifted(qp, aff); -error: - isl_qpolynomial_free(qp); - isl_set_free(context); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_gist_params( - __isl_take isl_qpolynomial *qp, __isl_take isl_set *context) -{ - isl_space *space = isl_qpolynomial_get_domain_space(qp); - isl_set *dom_context = isl_set_universe(space); - dom_context = isl_set_intersect_params(dom_context, context); - return isl_qpolynomial_gist(qp, dom_context); -} - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_from_qpolynomial( - __isl_take isl_qpolynomial *qp) -{ - isl_set *dom; - - if (!qp) - return NULL; - if (isl_qpolynomial_is_zero(qp)) { - isl_space *dim = isl_qpolynomial_get_space(qp); - isl_qpolynomial_free(qp); - return isl_pw_qpolynomial_zero(dim); - } - - dom = isl_set_universe(isl_qpolynomial_get_domain_space(qp)); - return isl_pw_qpolynomial_alloc(dom, qp); -} - -#undef PW -#define PW isl_pw_qpolynomial -#undef EL -#define EL isl_qpolynomial -#undef EL_IS_ZERO -#define EL_IS_ZERO is_zero -#undef ZERO -#define ZERO zero -#undef IS_ZERO -#define IS_ZERO is_zero -#undef FIELD -#define FIELD qp -#undef DEFAULT_IS_ZERO -#define DEFAULT_IS_ZERO 1 - -#include - -#undef UNION -#define UNION isl_union_pw_qpolynomial -#undef PART -#define PART isl_pw_qpolynomial -#undef PARTS -#define PARTS pw_qpolynomial -#define ALIGN_DOMAIN - -#include - -int isl_pw_qpolynomial_is_one(__isl_keep isl_pw_qpolynomial *pwqp) -{ - if (!pwqp) - return -1; - - if (pwqp->n != -1) - return 0; - - if (!isl_set_plain_is_universe(pwqp->p[0].set)) - return 0; - - return isl_qpolynomial_is_one(pwqp->p[0].qp); -} - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2) -{ - return isl_pw_qpolynomial_union_add_(pwqp1, pwqp2); -} - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_mul( - __isl_take isl_pw_qpolynomial *pwqp1, - __isl_take isl_pw_qpolynomial *pwqp2) -{ - int i, j, n; - struct isl_pw_qpolynomial *res; - - if (!pwqp1 || !pwqp2) - goto error; - - isl_assert(pwqp1->dim->ctx, isl_space_is_equal(pwqp1->dim, pwqp2->dim), - goto error); - - if (isl_pw_qpolynomial_is_zero(pwqp1)) { - isl_pw_qpolynomial_free(pwqp2); - return pwqp1; - } - - if (isl_pw_qpolynomial_is_zero(pwqp2)) { - isl_pw_qpolynomial_free(pwqp1); - return pwqp2; - } - - if (isl_pw_qpolynomial_is_one(pwqp1)) { - isl_pw_qpolynomial_free(pwqp1); - return pwqp2; - } - - if (isl_pw_qpolynomial_is_one(pwqp2)) { - isl_pw_qpolynomial_free(pwqp2); - return pwqp1; - } - - n = pwqp1->n * pwqp2->n; - res = isl_pw_qpolynomial_alloc_size(isl_space_copy(pwqp1->dim), n); - - for (i = 0; i < pwqp1->n; ++i) { - for (j = 0; j < pwqp2->n; ++j) { - struct isl_set *common; - struct isl_qpolynomial *prod; - common = isl_set_intersect(isl_set_copy(pwqp1->p[i].set), - isl_set_copy(pwqp2->p[j].set)); - if (isl_set_plain_is_empty(common)) { - isl_set_free(common); - continue; - } - - prod = isl_qpolynomial_mul( - isl_qpolynomial_copy(pwqp1->p[i].qp), - isl_qpolynomial_copy(pwqp2->p[j].qp)); - - res = isl_pw_qpolynomial_add_piece(res, common, prod); - } - } - - isl_pw_qpolynomial_free(pwqp1); - isl_pw_qpolynomial_free(pwqp2); - - return res; -error: - isl_pw_qpolynomial_free(pwqp1); - isl_pw_qpolynomial_free(pwqp2); - return NULL; -} - -__isl_give struct isl_upoly *isl_upoly_eval( - __isl_take struct isl_upoly *up, __isl_take isl_vec *vec) -{ - int i; - struct isl_upoly_rec *rec; - struct isl_upoly *res; - struct isl_upoly *base; - - if (isl_upoly_is_cst(up)) { - isl_vec_free(vec); - return up; - } - - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - isl_assert(up->ctx, rec->n >= 1, goto error); - - base = isl_upoly_rat_cst(up->ctx, vec->el[1 + up->var], vec->el[0]); - - res = isl_upoly_eval(isl_upoly_copy(rec->p[rec->n - 1]), - isl_vec_copy(vec)); - - for (i = rec->n - 2; i >= 0; --i) { - res = isl_upoly_mul(res, isl_upoly_copy(base)); - res = isl_upoly_sum(res, - isl_upoly_eval(isl_upoly_copy(rec->p[i]), - isl_vec_copy(vec))); - } - - isl_upoly_free(base); - isl_upoly_free(up); - isl_vec_free(vec); - return res; -error: - isl_upoly_free(up); - isl_vec_free(vec); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_eval( - __isl_take isl_qpolynomial *qp, __isl_take isl_point *pnt) -{ - isl_vec *ext; - struct isl_upoly *up; - isl_space *dim; - - if (!qp || !pnt) - goto error; - isl_assert(pnt->dim->ctx, isl_space_is_equal(pnt->dim, qp->dim), goto error); - - if (qp->div->n_row == 0) - ext = isl_vec_copy(pnt->vec); - else { - int i; - unsigned dim = isl_space_dim(qp->dim, isl_dim_all); - ext = isl_vec_alloc(qp->dim->ctx, 1 + dim + qp->div->n_row); - if (!ext) - goto error; - - isl_seq_cpy(ext->el, pnt->vec->el, pnt->vec->size); - for (i = 0; i < qp->div->n_row; ++i) { - isl_seq_inner_product(qp->div->row[i] + 1, ext->el, - 1 + dim + i, &ext->el[1+dim+i]); - isl_int_fdiv_q(ext->el[1+dim+i], ext->el[1+dim+i], - qp->div->row[i][0]); - } - } - - up = isl_upoly_eval(isl_upoly_copy(qp->upoly), ext); - if (!up) - goto error; - - dim = isl_space_copy(qp->dim); - isl_qpolynomial_free(qp); - isl_point_free(pnt); - - return isl_qpolynomial_alloc(dim, 0, up); -error: - isl_qpolynomial_free(qp); - isl_point_free(pnt); - return NULL; -} - -int isl_upoly_cmp(__isl_keep struct isl_upoly_cst *cst1, - __isl_keep struct isl_upoly_cst *cst2) -{ - int cmp; - isl_int t; - isl_int_init(t); - isl_int_mul(t, cst1->n, cst2->d); - isl_int_submul(t, cst2->n, cst1->d); - cmp = isl_int_sgn(t); - isl_int_clear(t); - return cmp; -} - -int isl_qpolynomial_le_cst(__isl_keep isl_qpolynomial *qp1, - __isl_keep isl_qpolynomial *qp2) -{ - struct isl_upoly_cst *cst1, *cst2; - - if (!qp1 || !qp2) - return -1; - isl_assert(qp1->dim->ctx, isl_upoly_is_cst(qp1->upoly), return -1); - isl_assert(qp2->dim->ctx, isl_upoly_is_cst(qp2->upoly), return -1); - if (isl_qpolynomial_is_nan(qp1)) - return -1; - if (isl_qpolynomial_is_nan(qp2)) - return -1; - cst1 = isl_upoly_as_cst(qp1->upoly); - cst2 = isl_upoly_as_cst(qp2->upoly); - - return isl_upoly_cmp(cst1, cst2) <= 0; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_min_cst( - __isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2) -{ - struct isl_upoly_cst *cst1, *cst2; - int cmp; - - if (!qp1 || !qp2) - goto error; - isl_assert(qp1->dim->ctx, isl_upoly_is_cst(qp1->upoly), goto error); - isl_assert(qp2->dim->ctx, isl_upoly_is_cst(qp2->upoly), goto error); - cst1 = isl_upoly_as_cst(qp1->upoly); - cst2 = isl_upoly_as_cst(qp2->upoly); - cmp = isl_upoly_cmp(cst1, cst2); - - if (cmp <= 0) { - isl_qpolynomial_free(qp2); - } else { - isl_qpolynomial_free(qp1); - qp1 = qp2; - } - return qp1; -error: - isl_qpolynomial_free(qp1); - isl_qpolynomial_free(qp2); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_max_cst( - __isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2) -{ - struct isl_upoly_cst *cst1, *cst2; - int cmp; - - if (!qp1 || !qp2) - goto error; - isl_assert(qp1->dim->ctx, isl_upoly_is_cst(qp1->upoly), goto error); - isl_assert(qp2->dim->ctx, isl_upoly_is_cst(qp2->upoly), goto error); - cst1 = isl_upoly_as_cst(qp1->upoly); - cst2 = isl_upoly_as_cst(qp2->upoly); - cmp = isl_upoly_cmp(cst1, cst2); - - if (cmp >= 0) { - isl_qpolynomial_free(qp2); - } else { - isl_qpolynomial_free(qp1); - qp1 = qp2; - } - return qp1; -error: - isl_qpolynomial_free(qp1); - isl_qpolynomial_free(qp2); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_insert_dims( - __isl_take isl_qpolynomial *qp, enum isl_dim_type type, - unsigned first, unsigned n) -{ - unsigned total; - unsigned g_pos; - int *exp; - - if (!qp) - return NULL; - if (type == isl_dim_out) - isl_die(qp->div->ctx, isl_error_invalid, - "cannot insert output/set dimensions", - goto error); - if (type == isl_dim_in) - type = isl_dim_set; - if (n == 0 && !isl_space_is_named_or_nested(qp->dim, type)) - return qp; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - - isl_assert(qp->div->ctx, first <= isl_space_dim(qp->dim, type), - goto error); - - g_pos = pos(qp->dim, type) + first; - - qp->div = isl_mat_insert_zero_cols(qp->div, 2 + g_pos, n); - if (!qp->div) - goto error; - - total = qp->div->n_col - 2; - if (total > g_pos) { - int i; - exp = isl_alloc_array(qp->div->ctx, int, total - g_pos); - if (!exp) - goto error; - for (i = 0; i < total - g_pos; ++i) - exp[i] = i + n; - qp->upoly = expand(qp->upoly, exp, g_pos); - free(exp); - if (!qp->upoly) - goto error; - } - - qp->dim = isl_space_insert_dims(qp->dim, type, first, n); - if (!qp->dim) - goto error; - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_add_dims( - __isl_take isl_qpolynomial *qp, enum isl_dim_type type, unsigned n) -{ - unsigned pos; - - pos = isl_qpolynomial_dim(qp, type); - - return isl_qpolynomial_insert_dims(qp, type, pos, n); -} - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add_dims( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned n) -{ - unsigned pos; - - pos = isl_pw_qpolynomial_dim(pwqp, type); - - return isl_pw_qpolynomial_insert_dims(pwqp, type, pos, n); -} - -static int *reordering_move(isl_ctx *ctx, - unsigned len, unsigned dst, unsigned src, unsigned n) -{ - int i; - int *reordering; - - reordering = isl_alloc_array(ctx, int, len); - if (!reordering) - return NULL; - - if (dst <= src) { - for (i = 0; i < dst; ++i) - reordering[i] = i; - for (i = 0; i < n; ++i) - reordering[src + i] = dst + i; - for (i = 0; i < src - dst; ++i) - reordering[dst + i] = dst + n + i; - for (i = 0; i < len - src - n; ++i) - reordering[src + n + i] = src + n + i; - } else { - for (i = 0; i < src; ++i) - reordering[i] = i; - for (i = 0; i < n; ++i) - reordering[src + i] = dst + i; - for (i = 0; i < dst - src; ++i) - reordering[src + n + i] = src + i; - for (i = 0; i < len - dst - n; ++i) - reordering[dst + n + i] = dst + n + i; - } - - return reordering; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_move_dims( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - unsigned g_dst_pos; - unsigned g_src_pos; - int *reordering; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - - if (dst_type == isl_dim_out || src_type == isl_dim_out) - isl_die(qp->dim->ctx, isl_error_invalid, - "cannot move output/set dimension", - goto error); - if (dst_type == isl_dim_in) - dst_type = isl_dim_set; - if (src_type == isl_dim_in) - src_type = isl_dim_set; - - isl_assert(qp->dim->ctx, src_pos + n <= isl_space_dim(qp->dim, src_type), - goto error); - - g_dst_pos = pos(qp->dim, dst_type) + dst_pos; - g_src_pos = pos(qp->dim, src_type) + src_pos; - if (dst_type > src_type) - g_dst_pos -= n; - - qp->div = isl_mat_move_cols(qp->div, 2 + g_dst_pos, 2 + g_src_pos, n); - if (!qp->div) - goto error; - qp = sort_divs(qp); - if (!qp) - goto error; - - reordering = reordering_move(qp->dim->ctx, - qp->div->n_col - 2, g_dst_pos, g_src_pos, n); - if (!reordering) - goto error; - - qp->upoly = reorder(qp->upoly, reordering); - free(reordering); - if (!qp->upoly) - goto error; - - qp->dim = isl_space_move_dims(qp->dim, dst_type, dst_pos, src_type, src_pos, n); - if (!qp->dim) - goto error; - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_from_affine(__isl_take isl_space *dim, - isl_int *f, isl_int denom) -{ - struct isl_upoly *up; - - dim = isl_space_domain(dim); - if (!dim) - return NULL; - - up = isl_upoly_from_affine(dim->ctx, f, denom, - 1 + isl_space_dim(dim, isl_dim_all)); - - return isl_qpolynomial_alloc(dim, 0, up); -} - -__isl_give isl_qpolynomial *isl_qpolynomial_from_aff(__isl_take isl_aff *aff) -{ - isl_ctx *ctx; - struct isl_upoly *up; - isl_qpolynomial *qp; - - if (!aff) - return NULL; - - ctx = isl_aff_get_ctx(aff); - up = isl_upoly_from_affine(ctx, aff->v->el + 1, aff->v->el[0], - aff->v->size - 1); - - qp = isl_qpolynomial_alloc(isl_aff_get_domain_space(aff), - aff->ls->div->n_row, up); - if (!qp) - goto error; - - isl_mat_free(qp->div); - qp->div = isl_mat_copy(aff->ls->div); - qp->div = isl_mat_cow(qp->div); - if (!qp->div) - goto error; - - isl_aff_free(aff); - qp = reduce_divs(qp); - qp = remove_redundant_divs(qp); - return qp; -error: - isl_aff_free(aff); - return NULL; -} - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_from_pw_aff( - __isl_take isl_pw_aff *pwaff) -{ - int i; - isl_pw_qpolynomial *pwqp; - - if (!pwaff) - return NULL; - - pwqp = isl_pw_qpolynomial_alloc_size(isl_pw_aff_get_space(pwaff), - pwaff->n); - - for (i = 0; i < pwaff->n; ++i) { - isl_set *dom; - isl_qpolynomial *qp; - - dom = isl_set_copy(pwaff->p[i].set); - qp = isl_qpolynomial_from_aff(isl_aff_copy(pwaff->p[i].aff)); - pwqp = isl_pw_qpolynomial_add_piece(pwqp, dom, qp); - } - - isl_pw_aff_free(pwaff); - return pwqp; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_from_constraint( - __isl_take isl_constraint *c, enum isl_dim_type type, unsigned pos) -{ - isl_aff *aff; - - aff = isl_constraint_get_bound(c, type, pos); - isl_constraint_free(c); - return isl_qpolynomial_from_aff(aff); -} - -/* For each 0 <= i < "n", replace variable "first" + i of type "type" - * in "qp" by subs[i]. - */ -__isl_give isl_qpolynomial *isl_qpolynomial_substitute( - __isl_take isl_qpolynomial *qp, - enum isl_dim_type type, unsigned first, unsigned n, - __isl_keep isl_qpolynomial **subs) -{ - int i; - struct isl_upoly **ups; - - if (n == 0) - return qp; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - - if (type == isl_dim_out) - isl_die(qp->dim->ctx, isl_error_invalid, - "cannot substitute output/set dimension", - goto error); - if (type == isl_dim_in) - type = isl_dim_set; - - for (i = 0; i < n; ++i) - if (!subs[i]) - goto error; - - isl_assert(qp->dim->ctx, first + n <= isl_space_dim(qp->dim, type), - goto error); - - for (i = 0; i < n; ++i) - isl_assert(qp->dim->ctx, isl_space_is_equal(qp->dim, subs[i]->dim), - goto error); - - isl_assert(qp->dim->ctx, qp->div->n_row == 0, goto error); - for (i = 0; i < n; ++i) - isl_assert(qp->dim->ctx, subs[i]->div->n_row == 0, goto error); - - first += pos(qp->dim, type); - - ups = isl_alloc_array(qp->dim->ctx, struct isl_upoly *, n); - if (!ups) - goto error; - for (i = 0; i < n; ++i) - ups[i] = subs[i]->upoly; - - qp->upoly = isl_upoly_subs(qp->upoly, first, n, ups); - - free(ups); - - if (!qp->upoly) - goto error; - - return qp; -error: - isl_qpolynomial_free(qp); - return NULL; -} - -/* Extend "bset" with extra set dimensions for each integer division - * in "qp" and then call "fn" with the extended bset and the polynomial - * that results from replacing each of the integer divisions by the - * corresponding extra set dimension. - */ -int isl_qpolynomial_as_polynomial_on_domain(__isl_keep isl_qpolynomial *qp, - __isl_keep isl_basic_set *bset, - int (*fn)(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, void *user), void *user) -{ - isl_space *dim; - isl_mat *div; - isl_qpolynomial *poly; - - if (!qp || !bset) - goto error; - if (qp->div->n_row == 0) - return fn(isl_basic_set_copy(bset), isl_qpolynomial_copy(qp), - user); - - div = isl_mat_copy(qp->div); - dim = isl_space_copy(qp->dim); - dim = isl_space_add_dims(dim, isl_dim_set, qp->div->n_row); - poly = isl_qpolynomial_alloc(dim, 0, isl_upoly_copy(qp->upoly)); - bset = isl_basic_set_copy(bset); - bset = isl_basic_set_add(bset, isl_dim_set, qp->div->n_row); - bset = add_div_constraints(bset, div); - - return fn(bset, poly, user); -error: - return -1; -} - -/* Return total degree in variables first (inclusive) up to last (exclusive). - */ -int isl_upoly_degree(__isl_keep struct isl_upoly *up, int first, int last) -{ - int deg = -1; - int i; - struct isl_upoly_rec *rec; - - if (!up) - return -2; - if (isl_upoly_is_zero(up)) - return -1; - if (isl_upoly_is_cst(up) || up->var < first) - return 0; - - rec = isl_upoly_as_rec(up); - if (!rec) - return -2; - - for (i = 0; i < rec->n; ++i) { - int d; - - if (isl_upoly_is_zero(rec->p[i])) - continue; - d = isl_upoly_degree(rec->p[i], first, last); - if (up->var < last) - d += i; - if (d > deg) - deg = d; - } - - return deg; -} - -/* Return total degree in set variables. - */ -int isl_qpolynomial_degree(__isl_keep isl_qpolynomial *poly) -{ - unsigned ovar; - unsigned nvar; - - if (!poly) - return -2; - - ovar = isl_space_offset(poly->dim, isl_dim_set); - nvar = isl_space_dim(poly->dim, isl_dim_set); - return isl_upoly_degree(poly->upoly, ovar, ovar + nvar); -} - -__isl_give struct isl_upoly *isl_upoly_coeff(__isl_keep struct isl_upoly *up, - unsigned pos, int deg) -{ - int i; - struct isl_upoly_rec *rec; - - if (!up) - return NULL; - - if (isl_upoly_is_cst(up) || up->var < pos) { - if (deg == 0) - return isl_upoly_copy(up); - else - return isl_upoly_zero(up->ctx); - } - - rec = isl_upoly_as_rec(up); - if (!rec) - return NULL; - - if (up->var == pos) { - if (deg < rec->n) - return isl_upoly_copy(rec->p[deg]); - else - return isl_upoly_zero(up->ctx); - } - - up = isl_upoly_copy(up); - up = isl_upoly_cow(up); - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - for (i = 0; i < rec->n; ++i) { - struct isl_upoly *t; - t = isl_upoly_coeff(rec->p[i], pos, deg); - if (!t) - goto error; - isl_upoly_free(rec->p[i]); - rec->p[i] = t; - } - - return up; -error: - isl_upoly_free(up); - return NULL; -} - -/* Return coefficient of power "deg" of variable "t_pos" of type "type". - */ -__isl_give isl_qpolynomial *isl_qpolynomial_coeff( - __isl_keep isl_qpolynomial *qp, - enum isl_dim_type type, unsigned t_pos, int deg) -{ - unsigned g_pos; - struct isl_upoly *up; - isl_qpolynomial *c; - - if (!qp) - return NULL; - - if (type == isl_dim_out) - isl_die(qp->div->ctx, isl_error_invalid, - "output/set dimension does not have a coefficient", - return NULL); - if (type == isl_dim_in) - type = isl_dim_set; - - isl_assert(qp->div->ctx, t_pos < isl_space_dim(qp->dim, type), - return NULL); - - g_pos = pos(qp->dim, type) + t_pos; - up = isl_upoly_coeff(qp->upoly, g_pos, deg); - - c = isl_qpolynomial_alloc(isl_space_copy(qp->dim), qp->div->n_row, up); - if (!c) - return NULL; - isl_mat_free(c->div); - c->div = isl_mat_copy(qp->div); - if (!c->div) - goto error; - return c; -error: - isl_qpolynomial_free(c); - return NULL; -} - -/* Homogenize the polynomial in the variables first (inclusive) up to - * last (exclusive) by inserting powers of variable first. - * Variable first is assumed not to appear in the input. - */ -__isl_give struct isl_upoly *isl_upoly_homogenize( - __isl_take struct isl_upoly *up, int deg, int target, - int first, int last) -{ - int i; - struct isl_upoly_rec *rec; - - if (!up) - return NULL; - if (isl_upoly_is_zero(up)) - return up; - if (deg == target) - return up; - if (isl_upoly_is_cst(up) || up->var < first) { - struct isl_upoly *hom; - - hom = isl_upoly_var_pow(up->ctx, first, target - deg); - if (!hom) - goto error; - rec = isl_upoly_as_rec(hom); - rec->p[target - deg] = isl_upoly_mul(rec->p[target - deg], up); - - return hom; - } - - up = isl_upoly_cow(up); - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - for (i = 0; i < rec->n; ++i) { - if (isl_upoly_is_zero(rec->p[i])) - continue; - rec->p[i] = isl_upoly_homogenize(rec->p[i], - up->var < last ? deg + i : i, target, - first, last); - if (!rec->p[i]) - goto error; - } - - return up; -error: - isl_upoly_free(up); - return NULL; -} - -/* Homogenize the polynomial in the set variables by introducing - * powers of an extra set variable at position 0. - */ -__isl_give isl_qpolynomial *isl_qpolynomial_homogenize( - __isl_take isl_qpolynomial *poly) -{ - unsigned ovar; - unsigned nvar; - int deg = isl_qpolynomial_degree(poly); - - if (deg < -1) - goto error; - - poly = isl_qpolynomial_insert_dims(poly, isl_dim_in, 0, 1); - poly = isl_qpolynomial_cow(poly); - if (!poly) - goto error; - - ovar = isl_space_offset(poly->dim, isl_dim_set); - nvar = isl_space_dim(poly->dim, isl_dim_set); - poly->upoly = isl_upoly_homogenize(poly->upoly, 0, deg, - ovar, ovar + nvar); - if (!poly->upoly) - goto error; - - return poly; -error: - isl_qpolynomial_free(poly); - return NULL; -} - -__isl_give isl_term *isl_term_alloc(__isl_take isl_space *dim, - __isl_take isl_mat *div) -{ - isl_term *term; - int n; - - if (!dim || !div) - goto error; - - n = isl_space_dim(dim, isl_dim_all) + div->n_row; - - term = isl_calloc(dim->ctx, struct isl_term, - sizeof(struct isl_term) + (n - 1) * sizeof(int)); - if (!term) - goto error; - - term->ref = 1; - term->dim = dim; - term->div = div; - isl_int_init(term->n); - isl_int_init(term->d); - - return term; -error: - isl_space_free(dim); - isl_mat_free(div); - return NULL; -} - -__isl_give isl_term *isl_term_copy(__isl_keep isl_term *term) -{ - if (!term) - return NULL; - - term->ref++; - return term; -} - -__isl_give isl_term *isl_term_dup(__isl_keep isl_term *term) -{ - int i; - isl_term *dup; - unsigned total; - - if (term) - return NULL; - - total = isl_space_dim(term->dim, isl_dim_all) + term->div->n_row; - - dup = isl_term_alloc(isl_space_copy(term->dim), isl_mat_copy(term->div)); - if (!dup) - return NULL; - - isl_int_set(dup->n, term->n); - isl_int_set(dup->d, term->d); - - for (i = 0; i < total; ++i) - dup->pow[i] = term->pow[i]; - - return dup; -} - -__isl_give isl_term *isl_term_cow(__isl_take isl_term *term) -{ - if (!term) - return NULL; - - if (term->ref == 1) - return term; - term->ref--; - return isl_term_dup(term); -} - -void isl_term_free(__isl_take isl_term *term) -{ - if (!term) - return; - - if (--term->ref > 0) - return; - - isl_space_free(term->dim); - isl_mat_free(term->div); - isl_int_clear(term->n); - isl_int_clear(term->d); - free(term); -} - -unsigned isl_term_dim(__isl_keep isl_term *term, enum isl_dim_type type) -{ - if (!term) - return 0; - - switch (type) { - case isl_dim_param: - case isl_dim_in: - case isl_dim_out: return isl_space_dim(term->dim, type); - case isl_dim_div: return term->div->n_row; - case isl_dim_all: return isl_space_dim(term->dim, isl_dim_all) + - term->div->n_row; - default: return 0; - } -} - -isl_ctx *isl_term_get_ctx(__isl_keep isl_term *term) -{ - return term ? term->dim->ctx : NULL; -} - -void isl_term_get_num(__isl_keep isl_term *term, isl_int *n) -{ - if (!term) - return; - isl_int_set(*n, term->n); -} - -void isl_term_get_den(__isl_keep isl_term *term, isl_int *d) -{ - if (!term) - return; - isl_int_set(*d, term->d); -} - -int isl_term_get_exp(__isl_keep isl_term *term, - enum isl_dim_type type, unsigned pos) -{ - if (!term) - return -1; - - isl_assert(term->dim->ctx, pos < isl_term_dim(term, type), return -1); - - if (type >= isl_dim_set) - pos += isl_space_dim(term->dim, isl_dim_param); - if (type >= isl_dim_div) - pos += isl_space_dim(term->dim, isl_dim_set); - - return term->pow[pos]; -} - -__isl_give isl_aff *isl_term_get_div(__isl_keep isl_term *term, unsigned pos) -{ - isl_local_space *ls; - isl_aff *aff; - unsigned total; - - if (!term) - return NULL; - - isl_assert(term->dim->ctx, pos < isl_term_dim(term, isl_dim_div), - return NULL); - - total = term->div->n_col - term->div->n_row - 2; - /* No nested divs for now */ - isl_assert(term->dim->ctx, - isl_seq_first_non_zero(term->div->row[pos] + 2 + total, - term->div->n_row) == -1, - return NULL); - - ls = isl_local_space_alloc_div(isl_space_copy(term->dim), - isl_mat_copy(term->div)); - aff = isl_aff_alloc(ls); - if (!aff) - return NULL; - - isl_seq_cpy(aff->v->el, term->div->row[pos], aff->v->size); - - return aff; -} - -__isl_give isl_term *isl_upoly_foreach_term(__isl_keep struct isl_upoly *up, - int (*fn)(__isl_take isl_term *term, void *user), - __isl_take isl_term *term, void *user) -{ - int i; - struct isl_upoly_rec *rec; - - if (!up || !term) - goto error; - - if (isl_upoly_is_zero(up)) - return term; - - isl_assert(up->ctx, !isl_upoly_is_nan(up), goto error); - isl_assert(up->ctx, !isl_upoly_is_infty(up), goto error); - isl_assert(up->ctx, !isl_upoly_is_neginfty(up), goto error); - - if (isl_upoly_is_cst(up)) { - struct isl_upoly_cst *cst; - cst = isl_upoly_as_cst(up); - if (!cst) - goto error; - term = isl_term_cow(term); - if (!term) - goto error; - isl_int_set(term->n, cst->n); - isl_int_set(term->d, cst->d); - if (fn(isl_term_copy(term), user) < 0) - goto error; - return term; - } - - rec = isl_upoly_as_rec(up); - if (!rec) - goto error; - - for (i = 0; i < rec->n; ++i) { - term = isl_term_cow(term); - if (!term) - goto error; - term->pow[up->var] = i; - term = isl_upoly_foreach_term(rec->p[i], fn, term, user); - if (!term) - goto error; - } - term->pow[up->var] = 0; - - return term; -error: - isl_term_free(term); - return NULL; -} - -int isl_qpolynomial_foreach_term(__isl_keep isl_qpolynomial *qp, - int (*fn)(__isl_take isl_term *term, void *user), void *user) -{ - isl_term *term; - - if (!qp) - return -1; - - term = isl_term_alloc(isl_space_copy(qp->dim), isl_mat_copy(qp->div)); - if (!term) - return -1; - - term = isl_upoly_foreach_term(qp->upoly, fn, term, user); - - isl_term_free(term); - - return term ? 0 : -1; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_from_term(__isl_take isl_term *term) -{ - struct isl_upoly *up; - isl_qpolynomial *qp; - int i, n; - - if (!term) - return NULL; - - n = isl_space_dim(term->dim, isl_dim_all) + term->div->n_row; - - up = isl_upoly_rat_cst(term->dim->ctx, term->n, term->d); - for (i = 0; i < n; ++i) { - if (!term->pow[i]) - continue; - up = isl_upoly_mul(up, - isl_upoly_var_pow(term->dim->ctx, i, term->pow[i])); - } - - qp = isl_qpolynomial_alloc(isl_space_copy(term->dim), term->div->n_row, up); - if (!qp) - goto error; - isl_mat_free(qp->div); - qp->div = isl_mat_copy(term->div); - if (!qp->div) - goto error; - - isl_term_free(term); - return qp; -error: - isl_qpolynomial_free(qp); - isl_term_free(term); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_lift(__isl_take isl_qpolynomial *qp, - __isl_take isl_space *dim) -{ - int i; - int extra; - unsigned total; - - if (!qp || !dim) - goto error; - - if (isl_space_is_equal(qp->dim, dim)) { - isl_space_free(dim); - return qp; - } - - qp = isl_qpolynomial_cow(qp); - if (!qp) - goto error; - - extra = isl_space_dim(dim, isl_dim_set) - - isl_space_dim(qp->dim, isl_dim_set); - total = isl_space_dim(qp->dim, isl_dim_all); - if (qp->div->n_row) { - int *exp; - - exp = isl_alloc_array(qp->div->ctx, int, qp->div->n_row); - if (!exp) - goto error; - for (i = 0; i < qp->div->n_row; ++i) - exp[i] = extra + i; - qp->upoly = expand(qp->upoly, exp, total); - free(exp); - if (!qp->upoly) - goto error; - } - qp->div = isl_mat_insert_cols(qp->div, 2 + total, extra); - if (!qp->div) - goto error; - for (i = 0; i < qp->div->n_row; ++i) - isl_seq_clr(qp->div->row[i] + 2 + total, extra); - - isl_space_free(qp->dim); - qp->dim = dim; - - return qp; -error: - isl_space_free(dim); - isl_qpolynomial_free(qp); - return NULL; -} - -/* For each parameter or variable that does not appear in qp, - * first eliminate the variable from all constraints and then set it to zero. - */ -static __isl_give isl_set *fix_inactive(__isl_take isl_set *set, - __isl_keep isl_qpolynomial *qp) -{ - int *active = NULL; - int i; - int d; - unsigned nparam; - unsigned nvar; - - if (!set || !qp) - goto error; - - d = isl_space_dim(set->dim, isl_dim_all); - active = isl_calloc_array(set->ctx, int, d); - if (set_active(qp, active) < 0) - goto error; - - for (i = 0; i < d; ++i) - if (!active[i]) - break; - - if (i == d) { - free(active); - return set; - } - - nparam = isl_space_dim(set->dim, isl_dim_param); - nvar = isl_space_dim(set->dim, isl_dim_set); - for (i = 0; i < nparam; ++i) { - if (active[i]) - continue; - set = isl_set_eliminate(set, isl_dim_param, i, 1); - set = isl_set_fix_si(set, isl_dim_param, i, 0); - } - for (i = 0; i < nvar; ++i) { - if (active[nparam + i]) - continue; - set = isl_set_eliminate(set, isl_dim_set, i, 1); - set = isl_set_fix_si(set, isl_dim_set, i, 0); - } - - free(active); - - return set; -error: - free(active); - isl_set_free(set); - return NULL; -} - -struct isl_opt_data { - isl_qpolynomial *qp; - int first; - isl_qpolynomial *opt; - int max; -}; - -static int opt_fn(__isl_take isl_point *pnt, void *user) -{ - struct isl_opt_data *data = (struct isl_opt_data *)user; - isl_qpolynomial *val; - - val = isl_qpolynomial_eval(isl_qpolynomial_copy(data->qp), pnt); - if (data->first) { - data->first = 0; - data->opt = val; - } else if (data->max) { - data->opt = isl_qpolynomial_max_cst(data->opt, val); - } else { - data->opt = isl_qpolynomial_min_cst(data->opt, val); - } - - return 0; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_opt_on_domain( - __isl_take isl_qpolynomial *qp, __isl_take isl_set *set, int max) -{ - struct isl_opt_data data = { NULL, 1, NULL, max }; - - if (!set || !qp) - goto error; - - if (isl_upoly_is_cst(qp->upoly)) { - isl_set_free(set); - return qp; - } - - set = fix_inactive(set, qp); - - data.qp = qp; - if (isl_set_foreach_point(set, opt_fn, &data) < 0) - goto error; - - if (data.first) { - isl_space *space = isl_qpolynomial_get_domain_space(qp); - data.opt = isl_qpolynomial_zero_on_domain(space); - } - - isl_set_free(set); - isl_qpolynomial_free(qp); - return data.opt; -error: - isl_set_free(set); - isl_qpolynomial_free(qp); - isl_qpolynomial_free(data.opt); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_morph_domain( - __isl_take isl_qpolynomial *qp, __isl_take isl_morph *morph) -{ - int i; - int n_sub; - isl_ctx *ctx; - struct isl_upoly **subs; - isl_mat *mat, *diag; - - qp = isl_qpolynomial_cow(qp); - if (!qp || !morph) - goto error; - - ctx = qp->dim->ctx; - isl_assert(ctx, isl_space_is_equal(qp->dim, morph->dom->dim), goto error); - - n_sub = morph->inv->n_row - 1; - if (morph->inv->n_row != morph->inv->n_col) - n_sub += qp->div->n_row; - subs = isl_calloc_array(ctx, struct isl_upoly *, n_sub); - if (!subs) - goto error; - - for (i = 0; 1 + i < morph->inv->n_row; ++i) - subs[i] = isl_upoly_from_affine(ctx, morph->inv->row[1 + i], - morph->inv->row[0][0], morph->inv->n_col); - if (morph->inv->n_row != morph->inv->n_col) - for (i = 0; i < qp->div->n_row; ++i) - subs[morph->inv->n_row - 1 + i] = - isl_upoly_var_pow(ctx, morph->inv->n_col - 1 + i, 1); - - qp->upoly = isl_upoly_subs(qp->upoly, 0, n_sub, subs); - - for (i = 0; i < n_sub; ++i) - isl_upoly_free(subs[i]); - free(subs); - - diag = isl_mat_diag(ctx, 1, morph->inv->row[0][0]); - mat = isl_mat_diagonal(diag, isl_mat_copy(morph->inv)); - diag = isl_mat_diag(ctx, qp->div->n_row, morph->inv->row[0][0]); - mat = isl_mat_diagonal(mat, diag); - qp->div = isl_mat_product(qp->div, mat); - isl_space_free(qp->dim); - qp->dim = isl_space_copy(morph->ran->dim); - - if (!qp->upoly || !qp->div || !qp->dim) - goto error; - - isl_morph_free(morph); - - return qp; -error: - isl_qpolynomial_free(qp); - isl_morph_free(morph); - return NULL; -} - -static int neg_entry(void **entry, void *user) -{ - isl_pw_qpolynomial **pwqp = (isl_pw_qpolynomial **)entry; - - *pwqp = isl_pw_qpolynomial_neg(*pwqp); - - return *pwqp ? 0 : -1; -} - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_neg( - __isl_take isl_union_pw_qpolynomial *upwqp) -{ - upwqp = isl_union_pw_qpolynomial_cow(upwqp); - if (!upwqp) - return NULL; - - if (isl_hash_table_foreach(upwqp->dim->ctx, &upwqp->table, - &neg_entry, NULL) < 0) - goto error; - - return upwqp; -error: - isl_union_pw_qpolynomial_free(upwqp); - return NULL; -} - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_sub( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2) -{ - return isl_union_pw_qpolynomial_add(upwqp1, - isl_union_pw_qpolynomial_neg(upwqp2)); -} - -static int mul_entry(void **entry, void *user) -{ - struct isl_union_pw_qpolynomial_match_bin_data *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - isl_pw_qpolynomial *pwpq = *entry; - int empty; - - hash = isl_space_get_hash(pwpq->dim); - entry2 = isl_hash_table_find(data->u2->dim->ctx, &data->u2->table, - hash, &has_dim, pwpq->dim, 0); - if (!entry2) - return 0; - - pwpq = isl_pw_qpolynomial_copy(pwpq); - pwpq = isl_pw_qpolynomial_mul(pwpq, - isl_pw_qpolynomial_copy(entry2->data)); - - empty = isl_pw_qpolynomial_is_zero(pwpq); - if (empty < 0) { - isl_pw_qpolynomial_free(pwpq); - return -1; - } - if (empty) { - isl_pw_qpolynomial_free(pwpq); - return 0; - } - - data->res = isl_union_pw_qpolynomial_add_pw_qpolynomial(data->res, pwpq); - - return 0; -} - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_mul( - __isl_take isl_union_pw_qpolynomial *upwqp1, - __isl_take isl_union_pw_qpolynomial *upwqp2) -{ - return match_bin_op(upwqp1, upwqp2, &mul_entry); -} - -/* Reorder the columns of the given div definitions according to the - * given reordering. - */ -static __isl_give isl_mat *reorder_divs(__isl_take isl_mat *div, - __isl_take isl_reordering *r) -{ - int i, j; - isl_mat *mat; - int extra; - - if (!div || !r) - goto error; - - extra = isl_space_dim(r->dim, isl_dim_all) + div->n_row - r->len; - mat = isl_mat_alloc(div->ctx, div->n_row, div->n_col + extra); - if (!mat) - goto error; - - for (i = 0; i < div->n_row; ++i) { - isl_seq_cpy(mat->row[i], div->row[i], 2); - isl_seq_clr(mat->row[i] + 2, mat->n_col - 2); - for (j = 0; j < r->len; ++j) - isl_int_set(mat->row[i][2 + r->pos[j]], - div->row[i][2 + j]); - } - - isl_reordering_free(r); - isl_mat_free(div); - return mat; -error: - isl_reordering_free(r); - isl_mat_free(div); - return NULL; -} - -/* Reorder the dimension of "qp" according to the given reordering. - */ -__isl_give isl_qpolynomial *isl_qpolynomial_realign_domain( - __isl_take isl_qpolynomial *qp, __isl_take isl_reordering *r) -{ - qp = isl_qpolynomial_cow(qp); - if (!qp) - goto error; - - r = isl_reordering_extend(r, qp->div->n_row); - if (!r) - goto error; - - qp->div = reorder_divs(qp->div, isl_reordering_copy(r)); - if (!qp->div) - goto error; - - qp->upoly = reorder(qp->upoly, r->pos); - if (!qp->upoly) - goto error; - - qp = isl_qpolynomial_reset_domain_space(qp, isl_space_copy(r->dim)); - - isl_reordering_free(r); - return qp; -error: - isl_qpolynomial_free(qp); - isl_reordering_free(r); - return NULL; -} - -__isl_give isl_qpolynomial *isl_qpolynomial_align_params( - __isl_take isl_qpolynomial *qp, __isl_take isl_space *model) -{ - if (!qp || !model) - goto error; - - if (!isl_space_match(qp->dim, isl_dim_param, model, isl_dim_param)) { - isl_reordering *exp; - - model = isl_space_drop_dims(model, isl_dim_in, - 0, isl_space_dim(model, isl_dim_in)); - model = isl_space_drop_dims(model, isl_dim_out, - 0, isl_space_dim(model, isl_dim_out)); - exp = isl_parameter_alignment_reordering(qp->dim, model); - exp = isl_reordering_extend_space(exp, - isl_qpolynomial_get_domain_space(qp)); - qp = isl_qpolynomial_realign_domain(qp, exp); - } - - isl_space_free(model); - return qp; -error: - isl_space_free(model); - isl_qpolynomial_free(qp); - return NULL; -} - -struct isl_split_periods_data { - int max_periods; - isl_pw_qpolynomial *res; -}; - -/* Create a slice where the integer division "div" has the fixed value "v". - * In particular, if "div" refers to floor(f/m), then create a slice - * - * m v <= f <= m v + (m - 1) - * - * or - * - * f - m v >= 0 - * -f + m v + (m - 1) >= 0 - */ -static __isl_give isl_set *set_div_slice(__isl_take isl_space *dim, - __isl_keep isl_qpolynomial *qp, int div, isl_int v) -{ - int total; - isl_basic_set *bset = NULL; - int k; - - if (!dim || !qp) - goto error; - - total = isl_space_dim(dim, isl_dim_all); - bset = isl_basic_set_alloc_space(isl_space_copy(dim), 0, 0, 2); - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_cpy(bset->ineq[k], qp->div->row[div] + 1, 1 + total); - isl_int_submul(bset->ineq[k][0], v, qp->div->row[div][0]); - - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_neg(bset->ineq[k], qp->div->row[div] + 1, 1 + total); - isl_int_addmul(bset->ineq[k][0], v, qp->div->row[div][0]); - isl_int_add(bset->ineq[k][0], bset->ineq[k][0], qp->div->row[div][0]); - isl_int_sub_ui(bset->ineq[k][0], bset->ineq[k][0], 1); - - isl_space_free(dim); - return isl_set_from_basic_set(bset); -error: - isl_basic_set_free(bset); - isl_space_free(dim); - return NULL; -} - -static int split_periods(__isl_take isl_set *set, - __isl_take isl_qpolynomial *qp, void *user); - -/* Create a slice of the domain "set" such that integer division "div" - * has the fixed value "v" and add the results to data->res, - * replacing the integer division by "v" in "qp". - */ -static int set_div(__isl_take isl_set *set, - __isl_take isl_qpolynomial *qp, int div, isl_int v, - struct isl_split_periods_data *data) -{ - int i; - int total; - isl_set *slice; - struct isl_upoly *cst; - - slice = set_div_slice(isl_set_get_space(set), qp, div, v); - set = isl_set_intersect(set, slice); - - if (!qp) - goto error; - - total = isl_space_dim(qp->dim, isl_dim_all); - - for (i = div + 1; i < qp->div->n_row; ++i) { - if (isl_int_is_zero(qp->div->row[i][2 + total + div])) - continue; - isl_int_addmul(qp->div->row[i][1], - qp->div->row[i][2 + total + div], v); - isl_int_set_si(qp->div->row[i][2 + total + div], 0); - } - - cst = isl_upoly_rat_cst(qp->dim->ctx, v, qp->dim->ctx->one); - qp = substitute_div(qp, div, cst); - - return split_periods(set, qp, data); -error: - isl_set_free(set); - isl_qpolynomial_free(qp); - return -1; -} - -/* Split the domain "set" such that integer division "div" - * has a fixed value (ranging from "min" to "max") on each slice - * and add the results to data->res. - */ -static int split_div(__isl_take isl_set *set, - __isl_take isl_qpolynomial *qp, int div, isl_int min, isl_int max, - struct isl_split_periods_data *data) -{ - for (; isl_int_le(min, max); isl_int_add_ui(min, min, 1)) { - isl_set *set_i = isl_set_copy(set); - isl_qpolynomial *qp_i = isl_qpolynomial_copy(qp); - - if (set_div(set_i, qp_i, div, min, data) < 0) - goto error; - } - isl_set_free(set); - isl_qpolynomial_free(qp); - return 0; -error: - isl_set_free(set); - isl_qpolynomial_free(qp); - return -1; -} - -/* If "qp" refers to any integer division - * that can only attain "max_periods" distinct values on "set" - * then split the domain along those distinct values. - * Add the results (or the original if no splitting occurs) - * to data->res. - */ -static int split_periods(__isl_take isl_set *set, - __isl_take isl_qpolynomial *qp, void *user) -{ - int i; - isl_pw_qpolynomial *pwqp; - struct isl_split_periods_data *data; - isl_int min, max; - int total; - int r = 0; - - data = (struct isl_split_periods_data *)user; - - if (!set || !qp) - goto error; - - if (qp->div->n_row == 0) { - pwqp = isl_pw_qpolynomial_alloc(set, qp); - data->res = isl_pw_qpolynomial_add_disjoint(data->res, pwqp); - return 0; - } - - isl_int_init(min); - isl_int_init(max); - total = isl_space_dim(qp->dim, isl_dim_all); - for (i = 0; i < qp->div->n_row; ++i) { - enum isl_lp_result lp_res; - - if (isl_seq_first_non_zero(qp->div->row[i] + 2 + total, - qp->div->n_row) != -1) - continue; - - lp_res = isl_set_solve_lp(set, 0, qp->div->row[i] + 1, - set->ctx->one, &min, NULL, NULL); - if (lp_res == isl_lp_error) - goto error2; - if (lp_res == isl_lp_unbounded || lp_res == isl_lp_empty) - continue; - isl_int_fdiv_q(min, min, qp->div->row[i][0]); - - lp_res = isl_set_solve_lp(set, 1, qp->div->row[i] + 1, - set->ctx->one, &max, NULL, NULL); - if (lp_res == isl_lp_error) - goto error2; - if (lp_res == isl_lp_unbounded || lp_res == isl_lp_empty) - continue; - isl_int_fdiv_q(max, max, qp->div->row[i][0]); - - isl_int_sub(max, max, min); - if (isl_int_cmp_si(max, data->max_periods) < 0) { - isl_int_add(max, max, min); - break; - } - } - - if (i < qp->div->n_row) { - r = split_div(set, qp, i, min, max, data); - } else { - pwqp = isl_pw_qpolynomial_alloc(set, qp); - data->res = isl_pw_qpolynomial_add_disjoint(data->res, pwqp); - } - - isl_int_clear(max); - isl_int_clear(min); - - return r; -error2: - isl_int_clear(max); - isl_int_clear(min); -error: - isl_set_free(set); - isl_qpolynomial_free(qp); - return -1; -} - -/* If any quasi-polynomial in pwqp refers to any integer division - * that can only attain "max_periods" distinct values on its domain - * then split the domain along those distinct values. - */ -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_split_periods( - __isl_take isl_pw_qpolynomial *pwqp, int max_periods) -{ - struct isl_split_periods_data data; - - data.max_periods = max_periods; - data.res = isl_pw_qpolynomial_zero(isl_pw_qpolynomial_get_space(pwqp)); - - if (isl_pw_qpolynomial_foreach_piece(pwqp, &split_periods, &data) < 0) - goto error; - - isl_pw_qpolynomial_free(pwqp); - - return data.res; -error: - isl_pw_qpolynomial_free(data.res); - isl_pw_qpolynomial_free(pwqp); - return NULL; -} - -/* Construct a piecewise quasipolynomial that is constant on the given - * domain. In particular, it is - * 0 if cst == 0 - * 1 if cst == 1 - * infinity if cst == -1 - */ -static __isl_give isl_pw_qpolynomial *constant_on_domain( - __isl_take isl_basic_set *bset, int cst) -{ - isl_space *dim; - isl_qpolynomial *qp; - - if (!bset) - return NULL; - - bset = isl_basic_set_params(bset); - dim = isl_basic_set_get_space(bset); - if (cst < 0) - qp = isl_qpolynomial_infty_on_domain(dim); - else if (cst == 0) - qp = isl_qpolynomial_zero_on_domain(dim); - else - qp = isl_qpolynomial_one_on_domain(dim); - return isl_pw_qpolynomial_alloc(isl_set_from_basic_set(bset), qp); -} - -/* Factor bset, call fn on each of the factors and return the product. - * - * If no factors can be found, simply call fn on the input. - * Otherwise, construct the factors based on the factorizer, - * call fn on each factor and compute the product. - */ -static __isl_give isl_pw_qpolynomial *compressed_multiplicative_call( - __isl_take isl_basic_set *bset, - __isl_give isl_pw_qpolynomial *(*fn)(__isl_take isl_basic_set *bset)) -{ - int i, n; - isl_space *dim; - isl_set *set; - isl_factorizer *f; - isl_qpolynomial *qp; - isl_pw_qpolynomial *pwqp; - unsigned nparam; - unsigned nvar; - - f = isl_basic_set_factorizer(bset); - if (!f) - goto error; - if (f->n_group == 0) { - isl_factorizer_free(f); - return fn(bset); - } - - nparam = isl_basic_set_dim(bset, isl_dim_param); - nvar = isl_basic_set_dim(bset, isl_dim_set); - - dim = isl_basic_set_get_space(bset); - dim = isl_space_domain(dim); - set = isl_set_universe(isl_space_copy(dim)); - qp = isl_qpolynomial_one_on_domain(dim); - pwqp = isl_pw_qpolynomial_alloc(set, qp); - - bset = isl_morph_basic_set(isl_morph_copy(f->morph), bset); - - for (i = 0, n = 0; i < f->n_group; ++i) { - isl_basic_set *bset_i; - isl_pw_qpolynomial *pwqp_i; - - bset_i = isl_basic_set_copy(bset); - bset_i = isl_basic_set_drop_constraints_involving(bset_i, - nparam + n + f->len[i], nvar - n - f->len[i]); - bset_i = isl_basic_set_drop_constraints_involving(bset_i, - nparam, n); - bset_i = isl_basic_set_drop(bset_i, isl_dim_set, - n + f->len[i], nvar - n - f->len[i]); - bset_i = isl_basic_set_drop(bset_i, isl_dim_set, 0, n); - - pwqp_i = fn(bset_i); - pwqp = isl_pw_qpolynomial_mul(pwqp, pwqp_i); - - n += f->len[i]; - } - - isl_basic_set_free(bset); - isl_factorizer_free(f); - - return pwqp; -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Factor bset, call fn on each of the factors and return the product. - * The function is assumed to evaluate to zero on empty domains, - * to one on zero-dimensional domains and to infinity on unbounded domains - * and will not be called explicitly on zero-dimensional or unbounded domains. - * - * We first check for some special cases and remove all equalities. - * Then we hand over control to compressed_multiplicative_call. - */ -__isl_give isl_pw_qpolynomial *isl_basic_set_multiplicative_call( - __isl_take isl_basic_set *bset, - __isl_give isl_pw_qpolynomial *(*fn)(__isl_take isl_basic_set *bset)) -{ - int bounded; - isl_morph *morph; - isl_pw_qpolynomial *pwqp; - - if (!bset) - return NULL; - - if (isl_basic_set_plain_is_empty(bset)) - return constant_on_domain(bset, 0); - - if (isl_basic_set_dim(bset, isl_dim_set) == 0) - return constant_on_domain(bset, 1); - - bounded = isl_basic_set_is_bounded(bset); - if (bounded < 0) - goto error; - if (!bounded) - return constant_on_domain(bset, -1); - - if (bset->n_eq == 0) - return compressed_multiplicative_call(bset, fn); - - morph = isl_basic_set_full_compression(bset); - bset = isl_morph_basic_set(isl_morph_copy(morph), bset); - - pwqp = compressed_multiplicative_call(bset, fn); - - morph = isl_morph_dom_params(morph); - morph = isl_morph_ran_params(morph); - morph = isl_morph_inverse(morph); - - pwqp = isl_pw_qpolynomial_morph_domain(pwqp, morph); - - return pwqp; -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Drop all floors in "qp", turning each integer division [a/m] into - * a rational division a/m. If "down" is set, then the integer division - * is replaces by (a-(m-1))/m instead. - */ -static __isl_give isl_qpolynomial *qp_drop_floors( - __isl_take isl_qpolynomial *qp, int down) -{ - int i; - struct isl_upoly *s; - - if (!qp) - return NULL; - if (qp->div->n_row == 0) - return qp; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - - for (i = qp->div->n_row - 1; i >= 0; --i) { - if (down) { - isl_int_sub(qp->div->row[i][1], - qp->div->row[i][1], qp->div->row[i][0]); - isl_int_add_ui(qp->div->row[i][1], - qp->div->row[i][1], 1); - } - s = isl_upoly_from_affine(qp->dim->ctx, qp->div->row[i] + 1, - qp->div->row[i][0], qp->div->n_col - 1); - qp = substitute_div(qp, i, s); - if (!qp) - return NULL; - } - - return qp; -} - -/* Drop all floors in "pwqp", turning each integer division [a/m] into - * a rational division a/m. - */ -static __isl_give isl_pw_qpolynomial *pwqp_drop_floors( - __isl_take isl_pw_qpolynomial *pwqp) -{ - int i; - - if (!pwqp) - return NULL; - - if (isl_pw_qpolynomial_is_zero(pwqp)) - return pwqp; - - pwqp = isl_pw_qpolynomial_cow(pwqp); - if (!pwqp) - return NULL; - - for (i = 0; i < pwqp->n; ++i) { - pwqp->p[i].qp = qp_drop_floors(pwqp->p[i].qp, 0); - if (!pwqp->p[i].qp) - goto error; - } - - return pwqp; -error: - isl_pw_qpolynomial_free(pwqp); - return NULL; -} - -/* Adjust all the integer divisions in "qp" such that they are at least - * one over the given orthant (identified by "signs"). This ensures - * that they will still be non-negative even after subtracting (m-1)/m. - * - * In particular, f is replaced by f' + v, changing f = [a/m] - * to f' = [(a - m v)/m]. - * If the constant term k in a is smaller than m, - * the constant term of v is set to floor(k/m) - 1. - * For any other term, if the coefficient c and the variable x have - * the same sign, then no changes are needed. - * Otherwise, if the variable is positive (and c is negative), - * then the coefficient of x in v is set to floor(c/m). - * If the variable is negative (and c is positive), - * then the coefficient of x in v is set to ceil(c/m). - */ -static __isl_give isl_qpolynomial *make_divs_pos(__isl_take isl_qpolynomial *qp, - int *signs) -{ - int i, j; - int total; - isl_vec *v = NULL; - struct isl_upoly *s; - - qp = isl_qpolynomial_cow(qp); - if (!qp) - return NULL; - qp->div = isl_mat_cow(qp->div); - if (!qp->div) - goto error; - - total = isl_space_dim(qp->dim, isl_dim_all); - v = isl_vec_alloc(qp->div->ctx, qp->div->n_col - 1); - - for (i = 0; i < qp->div->n_row; ++i) { - isl_int *row = qp->div->row[i]; - v = isl_vec_clr(v); - if (!v) - goto error; - if (isl_int_lt(row[1], row[0])) { - isl_int_fdiv_q(v->el[0], row[1], row[0]); - isl_int_sub_ui(v->el[0], v->el[0], 1); - isl_int_submul(row[1], row[0], v->el[0]); - } - for (j = 0; j < total; ++j) { - if (isl_int_sgn(row[2 + j]) * signs[j] >= 0) - continue; - if (signs[j] < 0) - isl_int_cdiv_q(v->el[1 + j], row[2 + j], row[0]); - else - isl_int_fdiv_q(v->el[1 + j], row[2 + j], row[0]); - isl_int_submul(row[2 + j], row[0], v->el[1 + j]); - } - for (j = 0; j < i; ++j) { - if (isl_int_sgn(row[2 + total + j]) >= 0) - continue; - isl_int_fdiv_q(v->el[1 + total + j], - row[2 + total + j], row[0]); - isl_int_submul(row[2 + total + j], - row[0], v->el[1 + total + j]); - } - for (j = i + 1; j < qp->div->n_row; ++j) { - if (isl_int_is_zero(qp->div->row[j][2 + total + i])) - continue; - isl_seq_combine(qp->div->row[j] + 1, - qp->div->ctx->one, qp->div->row[j] + 1, - qp->div->row[j][2 + total + i], v->el, v->size); - } - isl_int_set_si(v->el[1 + total + i], 1); - s = isl_upoly_from_affine(qp->dim->ctx, v->el, - qp->div->ctx->one, v->size); - qp->upoly = isl_upoly_subs(qp->upoly, total + i, 1, &s); - isl_upoly_free(s); - if (!qp->upoly) - goto error; - } - - isl_vec_free(v); - return qp; -error: - isl_vec_free(v); - isl_qpolynomial_free(qp); - return NULL; -} - -struct isl_to_poly_data { - int sign; - isl_pw_qpolynomial *res; - isl_qpolynomial *qp; -}; - -/* Appoximate data->qp by a polynomial on the orthant identified by "signs". - * We first make all integer divisions positive and then split the - * quasipolynomials into terms with sign data->sign (the direction - * of the requested approximation) and terms with the opposite sign. - * In the first set of terms, each integer division [a/m] is - * overapproximated by a/m, while in the second it is underapproximated - * by (a-(m-1))/m. - */ -static int to_polynomial_on_orthant(__isl_take isl_set *orthant, int *signs, - void *user) -{ - struct isl_to_poly_data *data = user; - isl_pw_qpolynomial *t; - isl_qpolynomial *qp, *up, *down; - - qp = isl_qpolynomial_copy(data->qp); - qp = make_divs_pos(qp, signs); - - up = isl_qpolynomial_terms_of_sign(qp, signs, data->sign); - up = qp_drop_floors(up, 0); - down = isl_qpolynomial_terms_of_sign(qp, signs, -data->sign); - down = qp_drop_floors(down, 1); - - isl_qpolynomial_free(qp); - qp = isl_qpolynomial_add(up, down); - - t = isl_pw_qpolynomial_alloc(orthant, qp); - data->res = isl_pw_qpolynomial_add_disjoint(data->res, t); - - return 0; -} - -/* Approximate each quasipolynomial by a polynomial. If "sign" is positive, - * the polynomial will be an overapproximation. If "sign" is negative, - * it will be an underapproximation. If "sign" is zero, the approximation - * will lie somewhere in between. - * - * In particular, is sign == 0, we simply drop the floors, turning - * the integer divisions into rational divisions. - * Otherwise, we split the domains into orthants, make all integer divisions - * positive and then approximate each [a/m] by either a/m or (a-(m-1))/m, - * depending on the requested sign and the sign of the term in which - * the integer division appears. - */ -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_to_polynomial( - __isl_take isl_pw_qpolynomial *pwqp, int sign) -{ - int i; - struct isl_to_poly_data data; - - if (sign == 0) - return pwqp_drop_floors(pwqp); - - if (!pwqp) - return NULL; - - data.sign = sign; - data.res = isl_pw_qpolynomial_zero(isl_pw_qpolynomial_get_space(pwqp)); - - for (i = 0; i < pwqp->n; ++i) { - if (pwqp->p[i].qp->div->n_row == 0) { - isl_pw_qpolynomial *t; - t = isl_pw_qpolynomial_alloc( - isl_set_copy(pwqp->p[i].set), - isl_qpolynomial_copy(pwqp->p[i].qp)); - data.res = isl_pw_qpolynomial_add_disjoint(data.res, t); - continue; - } - data.qp = pwqp->p[i].qp; - if (isl_set_foreach_orthant(pwqp->p[i].set, - &to_polynomial_on_orthant, &data) < 0) - goto error; - } - - isl_pw_qpolynomial_free(pwqp); - - return data.res; -error: - isl_pw_qpolynomial_free(pwqp); - isl_pw_qpolynomial_free(data.res); - return NULL; -} - -static int poly_entry(void **entry, void *user) -{ - int *sign = user; - isl_pw_qpolynomial **pwqp = (isl_pw_qpolynomial **)entry; - - *pwqp = isl_pw_qpolynomial_to_polynomial(*pwqp, *sign); - - return *pwqp ? 0 : -1; -} - -__isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_to_polynomial( - __isl_take isl_union_pw_qpolynomial *upwqp, int sign) -{ - upwqp = isl_union_pw_qpolynomial_cow(upwqp); - if (!upwqp) - return NULL; - - if (isl_hash_table_foreach(upwqp->dim->ctx, &upwqp->table, - &poly_entry, &sign) < 0) - goto error; - - return upwqp; -error: - isl_union_pw_qpolynomial_free(upwqp); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_from_qpolynomial( - __isl_take isl_qpolynomial *qp) -{ - int i, k; - isl_space *dim; - isl_vec *aff = NULL; - isl_basic_map *bmap = NULL; - unsigned pos; - unsigned n_div; - - if (!qp) - return NULL; - if (!isl_upoly_is_affine(qp->upoly)) - isl_die(qp->dim->ctx, isl_error_invalid, - "input quasi-polynomial not affine", goto error); - aff = isl_qpolynomial_extract_affine(qp); - if (!aff) - goto error; - dim = isl_qpolynomial_get_space(qp); - pos = 1 + isl_space_offset(dim, isl_dim_out); - n_div = qp->div->n_row; - bmap = isl_basic_map_alloc_space(dim, n_div, 1, 2 * n_div); - - for (i = 0; i < n_div; ++i) { - k = isl_basic_map_alloc_div(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->div[k], qp->div->row[i], qp->div->n_col); - isl_int_set_si(bmap->div[k][qp->div->n_col], 0); - if (isl_basic_map_add_div_constraints(bmap, k) < 0) - goto error; - } - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_int_neg(bmap->eq[k][pos], aff->el[0]); - isl_seq_cpy(bmap->eq[k], aff->el + 1, pos); - isl_seq_cpy(bmap->eq[k] + pos + 1, aff->el + 1 + pos, n_div); - - isl_vec_free(aff); - isl_qpolynomial_free(qp); - bmap = isl_basic_map_finalize(bmap); - return bmap; -error: - isl_vec_free(aff); - isl_qpolynomial_free(qp); - isl_basic_map_free(bmap); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_polynomial_private.h b/cloog-0.17.0/isl/isl_polynomial_private.h deleted file mode 100644 index 7370731..0000000 --- a/cloog-0.17.0/isl/isl_polynomial_private.h +++ /dev/null @@ -1,233 +0,0 @@ -#include -#include -#include -#include -#include -#include - -struct isl_upoly { - int ref; - struct isl_ctx *ctx; - - int var; -}; - -struct isl_upoly_cst { - struct isl_upoly up; - isl_int n; - isl_int d; -}; - -struct isl_upoly_rec { - struct isl_upoly up; - int n; - - size_t size; - struct isl_upoly *p[]; -}; - -/* dim represents the domain space. - */ -struct isl_qpolynomial { - int ref; - - isl_space *dim; - struct isl_mat *div; - struct isl_upoly *upoly; -}; - -struct isl_term { - int ref; - - isl_int n; - isl_int d; - - isl_space *dim; - struct isl_mat *div; - - int pow[1]; -}; - -struct isl_pw_qpolynomial_piece { - struct isl_set *set; - struct isl_qpolynomial *qp; -}; - -struct isl_pw_qpolynomial { - int ref; - - isl_space *dim; - - int n; - - size_t size; - struct isl_pw_qpolynomial_piece p[1]; -}; - -/* dim represents the domain space. - */ -struct isl_qpolynomial_fold { - int ref; - - enum isl_fold type; - isl_space *dim; - - int n; - - size_t size; - struct isl_qpolynomial *qp[1]; -}; - -struct isl_pw_qpolynomial_fold_piece { - struct isl_set *set; - struct isl_qpolynomial_fold *fold; -}; - -struct isl_pw_qpolynomial_fold { - int ref; - - enum isl_fold type; - isl_space *dim; - - int n; - - size_t size; - struct isl_pw_qpolynomial_fold_piece p[1]; -}; - -__isl_give struct isl_upoly *isl_upoly_zero(struct isl_ctx *ctx); -__isl_give struct isl_upoly *isl_upoly_copy(__isl_keep struct isl_upoly *up); -__isl_give struct isl_upoly *isl_upoly_cow(__isl_take struct isl_upoly *up); -__isl_give struct isl_upoly *isl_upoly_dup(__isl_keep struct isl_upoly *up); -void isl_upoly_free(__isl_take struct isl_upoly *up); -__isl_give struct isl_upoly *isl_upoly_mul(__isl_take struct isl_upoly *up1, - __isl_take struct isl_upoly *up2); - -int isl_upoly_is_cst(__isl_keep struct isl_upoly *up); -int isl_upoly_is_zero(__isl_keep struct isl_upoly *up); -int isl_upoly_is_one(__isl_keep struct isl_upoly *up); -int isl_upoly_is_negone(__isl_keep struct isl_upoly *up); -__isl_keep struct isl_upoly_cst *isl_upoly_as_cst(__isl_keep struct isl_upoly *up); -__isl_keep struct isl_upoly_rec *isl_upoly_as_rec(__isl_keep struct isl_upoly *up); - -__isl_give struct isl_upoly *isl_upoly_sum(__isl_take struct isl_upoly *up1, - __isl_take struct isl_upoly *up2); -__isl_give struct isl_upoly *isl_upoly_mul_isl_int( - __isl_take struct isl_upoly *up, isl_int v); - -__isl_give isl_qpolynomial *isl_qpolynomial_alloc(__isl_take isl_space *dim, - unsigned n_div, __isl_take struct isl_upoly *up); -__isl_give isl_qpolynomial *isl_qpolynomial_cow(__isl_take isl_qpolynomial *qp); -__isl_give isl_qpolynomial *isl_qpolynomial_dup(__isl_keep isl_qpolynomial *qp); - -__isl_give isl_qpolynomial *isl_qpolynomial_cst_on_domain(__isl_take isl_space *dim, - isl_int v); -__isl_give isl_qpolynomial *isl_qpolynomial_var_pow_on_domain(__isl_take isl_space *dim, - int pos, int power); -int isl_qpolynomial_is_one(__isl_keep isl_qpolynomial *qp); -int isl_qpolynomial_is_affine(__isl_keep isl_qpolynomial *qp); - -__isl_give isl_qpolynomial *isl_qpolynomial_add_on_domain( - __isl_keep isl_set *dom, - __isl_take isl_qpolynomial *qp1, - __isl_take isl_qpolynomial *qp2); - -int isl_qpolynomial_le_cst(__isl_keep isl_qpolynomial *qp1, - __isl_keep isl_qpolynomial *qp2); -__isl_give isl_qpolynomial *isl_qpolynomial_max_cst( - __isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2); -__isl_give isl_qpolynomial *isl_qpolynomial_min_cst( - __isl_take isl_qpolynomial *qp1, __isl_take isl_qpolynomial *qp2); - -int isl_qpolynomial_degree(__isl_keep isl_qpolynomial *poly); -__isl_give isl_qpolynomial *isl_qpolynomial_coeff( - __isl_keep isl_qpolynomial *poly, - enum isl_dim_type type, unsigned pos, int deg); - -__isl_give isl_vec *isl_qpolynomial_extract_affine( - __isl_keep isl_qpolynomial *qp); -__isl_give isl_qpolynomial *isl_qpolynomial_from_affine(__isl_take isl_space *dim, - isl_int *f, isl_int denom); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_cow( - __isl_take isl_pw_qpolynomial *pwqp); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add_piece( - __isl_take isl_pw_qpolynomial *pwqp, - __isl_take isl_set *set, __isl_take isl_qpolynomial *qp); -int isl_pw_qpolynomial_is_one(__isl_keep isl_pw_qpolynomial *pwqp); - -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_project_out( - __isl_take isl_pw_qpolynomial *pwqp, - enum isl_dim_type type, unsigned first, unsigned n); - -__isl_give isl_qpolynomial *isl_qpolynomial_opt_on_domain( - __isl_take isl_qpolynomial *qp, __isl_take isl_set *set, int max); - -enum isl_fold isl_fold_type_negate(enum isl_fold type); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_cow( - __isl_take isl_qpolynomial_fold *fold); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_dup( - __isl_keep isl_qpolynomial_fold *fold); - -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_cow( - __isl_take isl_pw_qpolynomial_fold *pwf); - -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_add_on_domain( - __isl_keep isl_set *set, - __isl_take isl_qpolynomial_fold *fold1, - __isl_take isl_qpolynomial_fold *fold2); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_fold_on_domain( - __isl_keep isl_set *set, - __isl_take isl_qpolynomial_fold *fold1, - __isl_take isl_qpolynomial_fold *fold2); - -__isl_give isl_qpolynomial *isl_qpolynomial_fold_opt_on_domain( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *set, int max); - -int isl_pw_qpolynomial_fold_covers(__isl_keep isl_pw_qpolynomial_fold *pwf1, - __isl_keep isl_pw_qpolynomial_fold *pwf2); - -__isl_give isl_qpolynomial *isl_qpolynomial_morph_domain( - __isl_take isl_qpolynomial *qp, __isl_take isl_morph *morph); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_morph_domain( - __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_morph *morph); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_morph_domain( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_morph *morph); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_morph_domain( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_morph *morph); - -__isl_give isl_qpolynomial *isl_qpolynomial_lift(__isl_take isl_qpolynomial *qp, - __isl_take isl_space *dim); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_lift( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_space *dim); - -__isl_give isl_qpolynomial *isl_qpolynomial_substitute_equalities( - __isl_take isl_qpolynomial *qp, __isl_take isl_basic_set *eq); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_substitute_equalities( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_basic_set *eq); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_gist( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *context); - -__isl_give isl_qpolynomial *isl_qpolynomial_realign_domain( - __isl_take isl_qpolynomial *qp, __isl_take isl_reordering *r); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_realign_domain( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_reordering *r); -__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_realign_domain( - __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_reordering *r); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_realign_domain( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_reordering *r); - -__isl_give isl_qpolynomial *isl_qpolynomial_reset_domain_space( - __isl_take isl_qpolynomial *qp, __isl_take isl_space *dim); -__isl_give isl_qpolynomial *isl_qpolynomial_reset_space_and_domain( - __isl_take isl_qpolynomial *qp, __isl_take isl_space *space, - __isl_take isl_space *domain); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_reset_domain_space( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_space *dim); -__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_reset_space_and_domain( - __isl_take isl_qpolynomial_fold *fold, __isl_take isl_space *space, - __isl_take isl_space *domain); -__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_reset_domain_space( - __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_space *dim); diff --git a/cloog-0.17.0/isl/isl_printer.c b/cloog-0.17.0/isl/isl_printer.c deleted file mode 100644 index ae7596d..0000000 --- a/cloog-0.17.0/isl/isl_printer.c +++ /dev/null @@ -1,367 +0,0 @@ -#include -#include - -static __isl_give isl_printer *file_start_line(__isl_take isl_printer *p) -{ - fprintf(p->file, "%*s%s", p->indent, "", p->prefix ? p->prefix : ""); - return p; -} - -static __isl_give isl_printer *file_end_line(__isl_take isl_printer *p) -{ - fprintf(p->file, "%s\n", p->suffix ? p->suffix : ""); - return p; -} - -static __isl_give isl_printer *file_flush(__isl_take isl_printer *p) -{ - fflush(p->file); - return p; -} - -static __isl_give isl_printer *file_print_str(__isl_take isl_printer *p, - const char *s) -{ - fprintf(p->file, "%s", s); - return p; -} - -static __isl_give isl_printer *file_print_int(__isl_take isl_printer *p, int i) -{ - fprintf(p->file, "%d", i); - return p; -} - -static __isl_give isl_printer *file_print_isl_int(__isl_take isl_printer *p, isl_int i) -{ - isl_int_print(p->file, i, p->width); - return p; -} - -static int grow_buf(__isl_keep isl_printer *p, int extra) -{ - int new_size; - char *new_buf; - - if (p->buf_size == 0) - return -1; - - new_size = ((p->buf_n + extra + 1) * 3) / 2; - new_buf = isl_realloc_array(p->ctx, p->buf, char, new_size); - if (!new_buf) { - p->buf_size = 0; - return -1; - } - p->buf = new_buf; - p->buf_size = new_size; - - return 0; -} - -static __isl_give isl_printer *str_print(__isl_take isl_printer *p, - const char *s, int len) -{ - if (p->buf_n + len + 1 >= p->buf_size && grow_buf(p, len)) - goto error; - memcpy(p->buf + p->buf_n, s, len); - p->buf_n += len; - - p->buf[p->buf_n] = '\0'; - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *str_print_indent(__isl_take isl_printer *p, - int indent) -{ - int i; - - if (p->buf_n + indent + 1 >= p->buf_size && grow_buf(p, indent)) - goto error; - for (i = 0; i < indent; ++i) - p->buf[p->buf_n++] = ' '; - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *str_start_line(__isl_take isl_printer *p) -{ - p = str_print_indent(p, p->indent); - if (p->prefix) - p = str_print(p, p->prefix, strlen(p->prefix)); - return p; -} - -static __isl_give isl_printer *str_end_line(__isl_take isl_printer *p) -{ - if (p->suffix) - p = str_print(p, p->suffix, strlen(p->suffix)); - p = str_print(p, "\n", strlen("\n")); - return p; -} - -static __isl_give isl_printer *str_flush(__isl_take isl_printer *p) -{ - p->buf_n = 0; - return p; -} - -static __isl_give isl_printer *str_print_str(__isl_take isl_printer *p, - const char *s) -{ - return str_print(p, s, strlen(s)); -} - -static __isl_give isl_printer *str_print_int(__isl_take isl_printer *p, int i) -{ - int left = p->buf_size - p->buf_n; - int need = snprintf(p->buf + p->buf_n, left, "%d", i); - if (need >= left) { - if (grow_buf(p, need)) - goto error; - left = p->buf_size - p->buf_n; - need = snprintf(p->buf + p->buf_n, left, "%d", i); - } - p->buf_n += need; - return p; -error: - isl_printer_free(p); - return NULL; -} - -static __isl_give isl_printer *str_print_isl_int(__isl_take isl_printer *p, - isl_int i) -{ - char *s; - int len; - isl_int_print_gmp_free_t gmp_free; - - s = isl_int_get_str(i); - len = strlen(s); - if (len < p->width) - p = str_print_indent(p, p->width - len); - p = str_print(p, s, len); - mp_get_memory_functions(NULL, NULL, &gmp_free); - (*gmp_free)(s, len + 1); - return p; -} - -struct isl_printer_ops { - __isl_give isl_printer *(*start_line)(__isl_take isl_printer *p); - __isl_give isl_printer *(*end_line)(__isl_take isl_printer *p); - __isl_give isl_printer *(*print_int)(__isl_take isl_printer *p, int i); - __isl_give isl_printer *(*print_isl_int)(__isl_take isl_printer *p, - isl_int i); - __isl_give isl_printer *(*print_str)(__isl_take isl_printer *p, - const char *s); - __isl_give isl_printer *(*flush)(__isl_take isl_printer *p); -}; - -static struct isl_printer_ops file_ops = { - file_start_line, - file_end_line, - file_print_int, - file_print_isl_int, - file_print_str, - file_flush -}; - -static struct isl_printer_ops str_ops = { - str_start_line, - str_end_line, - str_print_int, - str_print_isl_int, - str_print_str, - str_flush -}; - -__isl_give isl_printer *isl_printer_to_file(isl_ctx *ctx, FILE *file) -{ - struct isl_printer *p = isl_alloc_type(ctx, struct isl_printer); - if (!p) - return NULL; - p->ctx = ctx; - isl_ctx_ref(p->ctx); - p->ops = &file_ops; - p->file = file; - p->buf = NULL; - p->buf_n = 0; - p->buf_size = 0; - p->indent = 0; - p->output_format = ISL_FORMAT_ISL; - p->prefix = NULL; - p->suffix = NULL; - p->width = 0; - - return p; -} - -__isl_give isl_printer *isl_printer_to_str(isl_ctx *ctx) -{ - struct isl_printer *p = isl_alloc_type(ctx, struct isl_printer); - if (!p) - return NULL; - p->ctx = ctx; - isl_ctx_ref(p->ctx); - p->ops = &str_ops; - p->file = NULL; - p->buf = isl_alloc_array(ctx, char, 256); - if (!p->buf) - goto error; - p->buf_n = 0; - p->buf[0] = '\0'; - p->buf_size = 256; - p->indent = 0; - p->output_format = ISL_FORMAT_ISL; - p->prefix = NULL; - p->suffix = NULL; - p->width = 0; - - return p; -error: - isl_printer_free(p); - return NULL; -} - -void isl_printer_free(__isl_take isl_printer *p) -{ - if (!p) - return; - free(p->buf); - isl_ctx_deref(p->ctx); - free(p); -} - -isl_ctx *isl_printer_get_ctx(__isl_keep isl_printer *printer) -{ - return printer ? printer->ctx : NULL; -} - -__isl_give isl_printer *isl_printer_set_isl_int_width(__isl_take isl_printer *p, - int width) -{ - if (!p) - return NULL; - - p->width = width; - - return p; -} - -__isl_give isl_printer *isl_printer_set_indent(__isl_take isl_printer *p, - int indent) -{ - if (!p) - return NULL; - - p->indent = indent; - - return p; -} - -__isl_give isl_printer *isl_printer_indent(__isl_take isl_printer *p, - int indent) -{ - if (!p) - return NULL; - - p->indent += indent; - if (p->indent < 0) - p->indent = 0; - - return p; -} - -__isl_give isl_printer *isl_printer_set_prefix(__isl_take isl_printer *p, - const char *prefix) -{ - if (!p) - return NULL; - - p->prefix = prefix; - - return p; -} - -__isl_give isl_printer *isl_printer_set_suffix(__isl_take isl_printer *p, - const char *suffix) -{ - if (!p) - return NULL; - - p->suffix = suffix; - - return p; -} - -__isl_give isl_printer *isl_printer_set_output_format(__isl_take isl_printer *p, - int output_format) -{ - if (!p) - return NULL; - - p->output_format = output_format; - - return p; -} - -__isl_give isl_printer *isl_printer_print_str(__isl_take isl_printer *p, - const char *s) -{ - if (!p) - return NULL; - - return p->ops->print_str(p, s); -} - -__isl_give isl_printer *isl_printer_print_int(__isl_take isl_printer *p, int i) -{ - if (!p) - return NULL; - - return p->ops->print_int(p, i); -} - -__isl_give isl_printer *isl_printer_print_isl_int(__isl_take isl_printer *p, - isl_int i) -{ - if (!p) - return NULL; - - return p->ops->print_isl_int(p, i); -} - -__isl_give isl_printer *isl_printer_start_line(__isl_take isl_printer *p) -{ - if (!p) - return NULL; - - return p->ops->start_line(p); -} - -__isl_give isl_printer *isl_printer_end_line(__isl_take isl_printer *p) -{ - if (!p) - return NULL; - - return p->ops->end_line(p); -} - -char *isl_printer_get_str(__isl_keep isl_printer *printer) -{ - if (!printer || !printer->buf) - return NULL; - return strdup(printer->buf); -} - -__isl_give isl_printer *isl_printer_flush(__isl_take isl_printer *p) -{ - if (!p) - return NULL; - - return p->ops->flush(p); -} diff --git a/cloog-0.17.0/isl/isl_printer_private.h b/cloog-0.17.0/isl/isl_printer_private.h deleted file mode 100644 index 9d76808..0000000 --- a/cloog-0.17.0/isl/isl_printer_private.h +++ /dev/null @@ -1,17 +0,0 @@ -#include - -struct isl_printer_ops; - -struct isl_printer { - struct isl_ctx *ctx; - struct isl_printer_ops *ops; - FILE *file; - int buf_n; - int buf_size; - char *buf; - int indent; - int output_format; - const char *prefix; - const char *suffix; - int width; -}; diff --git a/cloog-0.17.0/isl/isl_pw_templ.c b/cloog-0.17.0/isl/isl_pw_templ.c deleted file mode 100644 index 65bdf46..0000000 --- a/cloog-0.17.0/isl/isl_pw_templ.c +++ /dev/null @@ -1,1570 +0,0 @@ -#define xFN(TYPE,NAME) TYPE ## _ ## NAME -#define FN(TYPE,NAME) xFN(TYPE,NAME) -#define xS(TYPE,NAME) struct TYPE ## _ ## NAME -#define S(TYPE,NAME) xS(TYPE,NAME) - -#ifdef HAS_TYPE -__isl_give PW *FN(PW,alloc_size)(__isl_take isl_space *dim, - enum isl_fold type, int n) -#else -__isl_give PW *FN(PW,alloc_size)(__isl_take isl_space *dim, int n) -#endif -{ - isl_ctx *ctx; - struct PW *pw; - - if (!dim) - return NULL; - ctx = isl_space_get_ctx(dim); - isl_assert(ctx, n >= 0, goto error); - pw = isl_alloc(ctx, struct PW, - sizeof(struct PW) + (n - 1) * sizeof(S(PW,piece))); - if (!pw) - goto error; - - pw->ref = 1; -#ifdef HAS_TYPE - pw->type = type; -#endif - pw->size = n; - pw->n = 0; - pw->dim = dim; - return pw; -error: - isl_space_free(dim); - return NULL; -} - -#ifdef HAS_TYPE -__isl_give PW *FN(PW,ZERO)(__isl_take isl_space *dim, enum isl_fold type) -{ - return FN(PW,alloc_size)(dim, type, 0); -} -#else -__isl_give PW *FN(PW,ZERO)(__isl_take isl_space *dim) -{ - return FN(PW,alloc_size)(dim, 0); -} -#endif - -__isl_give PW *FN(PW,add_piece)(__isl_take PW *pw, - __isl_take isl_set *set, __isl_take EL *el) -{ - isl_ctx *ctx; - isl_space *el_dim = NULL; - - if (!pw || !set || !el) - goto error; - - if (isl_set_plain_is_empty(set) || FN(EL,EL_IS_ZERO)(el)) { - isl_set_free(set); - FN(EL,free)(el); - return pw; - } - - ctx = isl_set_get_ctx(set); -#ifdef HAS_TYPE - if (pw->type != el->type) - isl_die(ctx, isl_error_invalid, "fold types don't match", - goto error); -#endif - el_dim = FN(EL,get_space(el)); - isl_assert(ctx, isl_space_is_equal(pw->dim, el_dim), goto error); - isl_assert(ctx, pw->n < pw->size, goto error); - - pw->p[pw->n].set = set; - pw->p[pw->n].FIELD = el; - pw->n++; - - isl_space_free(el_dim); - return pw; -error: - isl_space_free(el_dim); - FN(PW,free)(pw); - isl_set_free(set); - FN(EL,free)(el); - return NULL; -} - -#ifdef HAS_TYPE -__isl_give PW *FN(PW,alloc)(enum isl_fold type, - __isl_take isl_set *set, __isl_take EL *el) -#else -__isl_give PW *FN(PW,alloc)(__isl_take isl_set *set, __isl_take EL *el) -#endif -{ - PW *pw; - - if (!set || !el) - goto error; - -#ifdef HAS_TYPE - pw = FN(PW,alloc_size)(FN(EL,get_space)(el), type, 1); -#else - pw = FN(PW,alloc_size)(FN(EL,get_space)(el), 1); -#endif - - return FN(PW,add_piece)(pw, set, el); -error: - isl_set_free(set); - FN(EL,free)(el); - return NULL; -} - -__isl_give PW *FN(PW,dup)(__isl_keep PW *pw) -{ - int i; - PW *dup; - - if (!pw) - return NULL; - -#ifdef HAS_TYPE - dup = FN(PW,alloc_size)(isl_space_copy(pw->dim), pw->type, pw->n); -#else - dup = FN(PW,alloc_size)(isl_space_copy(pw->dim), pw->n); -#endif - if (!dup) - return NULL; - - for (i = 0; i < pw->n; ++i) - dup = FN(PW,add_piece)(dup, isl_set_copy(pw->p[i].set), - FN(EL,copy)(pw->p[i].FIELD)); - - return dup; -} - -__isl_give PW *FN(PW,cow)(__isl_take PW *pw) -{ - if (!pw) - return NULL; - - if (pw->ref == 1) - return pw; - pw->ref--; - return FN(PW,dup)(pw); -} - -__isl_give PW *FN(PW,copy)(__isl_keep PW *pw) -{ - if (!pw) - return NULL; - - pw->ref++; - return pw; -} - -void *FN(PW,free)(__isl_take PW *pw) -{ - int i; - - if (!pw) - return NULL; - if (--pw->ref > 0) - return NULL; - - for (i = 0; i < pw->n; ++i) { - isl_set_free(pw->p[i].set); - FN(EL,free)(pw->p[i].FIELD); - } - isl_space_free(pw->dim); - free(pw); - - return NULL; -} - -const char *FN(PW,get_dim_name)(__isl_keep PW *pw, enum isl_dim_type type, - unsigned pos) -{ - return pw ? isl_space_get_dim_name(pw->dim, type, pos) : NULL; -} - -int FN(PW,has_dim_id)(__isl_keep PW *pw, enum isl_dim_type type, unsigned pos) -{ - return pw ? isl_space_has_dim_id(pw->dim, type, pos) : -1; -} - -__isl_give isl_id *FN(PW,get_dim_id)(__isl_keep PW *pw, enum isl_dim_type type, - unsigned pos) -{ - return pw ? isl_space_get_dim_id(pw->dim, type, pos) : NULL; -} - -const char *FN(PW,get_tuple_name)(__isl_keep PW *pw, enum isl_dim_type type) -{ - return pw ? isl_space_get_tuple_name(pw->dim, type) : NULL; -} - -int FN(PW,has_tuple_id)(__isl_keep PW *pw, enum isl_dim_type type) -{ - return pw ? isl_space_has_tuple_id(pw->dim, type) : -1; -} - -__isl_give isl_id *FN(PW,get_tuple_id)(__isl_keep PW *pw, enum isl_dim_type type) -{ - return pw ? isl_space_get_tuple_id(pw->dim, type) : NULL; -} - -int FN(PW,IS_ZERO)(__isl_keep PW *pw) -{ - if (!pw) - return -1; - - return pw->n == 0; -} - -#ifndef NO_REALIGN -__isl_give PW *FN(PW,realign_domain)(__isl_take PW *pw, - __isl_take isl_reordering *exp) -{ - int i; - - pw = FN(PW,cow)(pw); - if (!pw || !exp) - return NULL; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_realign(pw->p[i].set, - isl_reordering_copy(exp)); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,realign_domain)(pw->p[i].FIELD, - isl_reordering_copy(exp)); - if (!pw->p[i].FIELD) - goto error; - } - - pw = FN(PW,reset_domain_space)(pw, isl_space_copy(exp->dim)); - - isl_reordering_free(exp); - return pw; -error: - isl_reordering_free(exp); - FN(PW,free)(pw); - return NULL; -} - -/* Align the parameters of "pw" to those of "model". - */ -__isl_give PW *FN(PW,align_params)(__isl_take PW *pw, __isl_take isl_space *model) -{ - isl_ctx *ctx; - - if (!pw || !model) - goto error; - - ctx = isl_space_get_ctx(model); - if (!isl_space_has_named_params(model)) - isl_die(ctx, isl_error_invalid, - "model has unnamed parameters", goto error); - if (!isl_space_has_named_params(pw->dim)) - isl_die(ctx, isl_error_invalid, - "input has unnamed parameters", goto error); - if (!isl_space_match(pw->dim, isl_dim_param, model, isl_dim_param)) { - isl_reordering *exp; - - model = isl_space_drop_dims(model, isl_dim_in, - 0, isl_space_dim(model, isl_dim_in)); - model = isl_space_drop_dims(model, isl_dim_out, - 0, isl_space_dim(model, isl_dim_out)); - exp = isl_parameter_alignment_reordering(pw->dim, model); - exp = isl_reordering_extend_space(exp, - FN(PW,get_domain_space)(pw)); - pw = FN(PW,realign_domain)(pw, exp); - } - - isl_space_free(model); - return pw; -error: - isl_space_free(model); - FN(PW,free)(pw); - return NULL; -} - -static __isl_give PW *FN(PW,align_params_pw_pw_and)(__isl_take PW *pw1, - __isl_take PW *pw2, - __isl_give PW *(*fn)(__isl_take PW *pw1, __isl_take PW *pw2)) -{ - isl_ctx *ctx; - - if (!pw1 || !pw2) - goto error; - if (isl_space_match(pw1->dim, isl_dim_param, pw2->dim, isl_dim_param)) - return fn(pw1, pw2); - ctx = FN(PW,get_ctx)(pw1); - if (!isl_space_has_named_params(pw1->dim) || - !isl_space_has_named_params(pw2->dim)) - isl_die(ctx, isl_error_invalid, - "unaligned unnamed parameters", goto error); - pw1 = FN(PW,align_params)(pw1, FN(PW,get_space)(pw2)); - pw2 = FN(PW,align_params)(pw2, FN(PW,get_space)(pw1)); - return fn(pw1, pw2); -error: - FN(PW,free)(pw1); - FN(PW,free)(pw2); - return NULL; -} - -static __isl_give PW *FN(PW,align_params_pw_set_and)(__isl_take PW *pw, - __isl_take isl_set *set, - __isl_give PW *(*fn)(__isl_take PW *pw, __isl_take isl_set *set)) -{ - isl_ctx *ctx; - - if (!pw || !set) - goto error; - if (isl_space_match(pw->dim, isl_dim_param, set->dim, isl_dim_param)) - return fn(pw, set); - ctx = FN(PW,get_ctx)(pw); - if (!isl_space_has_named_params(pw->dim) || - !isl_space_has_named_params(set->dim)) - isl_die(ctx, isl_error_invalid, - "unaligned unnamed parameters", goto error); - pw = FN(PW,align_params)(pw, isl_set_get_space(set)); - set = isl_set_align_params(set, FN(PW,get_space)(pw)); - return fn(pw, set); -error: - FN(PW,free)(pw); - isl_set_free(set); - return NULL; -} -#endif - -static __isl_give PW *FN(PW,union_add_aligned)(__isl_take PW *pw1, - __isl_take PW *pw2) -{ - int i, j, n; - struct PW *res; - isl_ctx *ctx; - isl_set *set; - - if (!pw1 || !pw2) - goto error; - - ctx = isl_space_get_ctx(pw1->dim); -#ifdef HAS_TYPE - if (pw1->type != pw2->type) - isl_die(ctx, isl_error_invalid, - "fold types don't match", goto error); -#endif - isl_assert(ctx, isl_space_is_equal(pw1->dim, pw2->dim), goto error); - - if (FN(PW,IS_ZERO)(pw1)) { - FN(PW,free)(pw1); - return pw2; - } - - if (FN(PW,IS_ZERO)(pw2)) { - FN(PW,free)(pw2); - return pw1; - } - - n = (pw1->n + 1) * (pw2->n + 1); -#ifdef HAS_TYPE - res = FN(PW,alloc_size)(isl_space_copy(pw1->dim), pw1->type, n); -#else - res = FN(PW,alloc_size)(isl_space_copy(pw1->dim), n); -#endif - - for (i = 0; i < pw1->n; ++i) { - set = isl_set_copy(pw1->p[i].set); - for (j = 0; j < pw2->n; ++j) { - struct isl_set *common; - EL *sum; - set = isl_set_subtract(set, - isl_set_copy(pw2->p[j].set)); - common = isl_set_intersect(isl_set_copy(pw1->p[i].set), - isl_set_copy(pw2->p[j].set)); - if (isl_set_plain_is_empty(common)) { - isl_set_free(common); - continue; - } - - sum = FN(EL,add_on_domain)(common, - FN(EL,copy)(pw1->p[i].FIELD), - FN(EL,copy)(pw2->p[j].FIELD)); - - res = FN(PW,add_piece)(res, common, sum); - } - res = FN(PW,add_piece)(res, set, FN(EL,copy)(pw1->p[i].FIELD)); - } - - for (j = 0; j < pw2->n; ++j) { - set = isl_set_copy(pw2->p[j].set); - for (i = 0; i < pw1->n; ++i) - set = isl_set_subtract(set, - isl_set_copy(pw1->p[i].set)); - res = FN(PW,add_piece)(res, set, FN(EL,copy)(pw2->p[j].FIELD)); - } - - FN(PW,free)(pw1); - FN(PW,free)(pw2); - - return res; -error: - FN(PW,free)(pw1); - FN(PW,free)(pw2); - return NULL; -} - -/* Private version of "union_add". For isl_pw_qpolynomial and - * isl_pw_qpolynomial_fold, we prefer to simply call it "add". - */ -static __isl_give PW *FN(PW,union_add_)(__isl_take PW *pw1, __isl_take PW *pw2) -{ - return FN(PW,align_params_pw_pw_and)(pw1, pw2, - &FN(PW,union_add_aligned)); -} - -/* Make sure "pw" has room for at least "n" more pieces. - * - * If there is only one reference to pw, we extend it in place. - * Otherwise, we create a new PW and copy the pieces. - */ -static __isl_give PW *FN(PW,grow)(__isl_take PW *pw, int n) -{ - int i; - isl_ctx *ctx; - PW *res; - - if (!pw) - return NULL; - if (pw->n + n <= pw->size) - return pw; - ctx = FN(PW,get_ctx)(pw); - n += pw->n; - if (pw->ref == 1) { - res = isl_realloc(ctx, pw, struct PW, - sizeof(struct PW) + (n - 1) * sizeof(S(PW,piece))); - if (!res) - return FN(PW,free)(pw); - res->size = n; - return res; - } -#ifdef HAS_TYPE - res = FN(PW,alloc_size)(isl_space_copy(pw->dim), pw->type, n); -#else - res = FN(PW,alloc_size)(isl_space_copy(pw->dim), n); -#endif - if (!res) - return FN(PW,free)(pw); - for (i = 0; i < pw->n; ++i) - res = FN(PW,add_piece)(res, isl_set_copy(pw->p[i].set), - FN(EL,copy)(pw->p[i].FIELD)); - FN(PW,free)(pw); - return res; -} - -static __isl_give PW *FN(PW,add_disjoint_aligned)(__isl_take PW *pw1, - __isl_take PW *pw2) -{ - int i; - isl_ctx *ctx; - - if (!pw1 || !pw2) - goto error; - - if (pw1->size < pw1->n + pw2->n && pw1->n < pw2->n) - return FN(PW,add_disjoint_aligned)(pw2, pw1); - - ctx = isl_space_get_ctx(pw1->dim); -#ifdef HAS_TYPE - if (pw1->type != pw2->type) - isl_die(ctx, isl_error_invalid, - "fold types don't match", goto error); -#endif - isl_assert(ctx, isl_space_is_equal(pw1->dim, pw2->dim), goto error); - - if (FN(PW,IS_ZERO)(pw1)) { - FN(PW,free)(pw1); - return pw2; - } - - if (FN(PW,IS_ZERO)(pw2)) { - FN(PW,free)(pw2); - return pw1; - } - - pw1 = FN(PW,grow)(pw1, pw2->n); - if (!pw1) - goto error; - - for (i = 0; i < pw2->n; ++i) - pw1 = FN(PW,add_piece)(pw1, - isl_set_copy(pw2->p[i].set), - FN(EL,copy)(pw2->p[i].FIELD)); - - FN(PW,free)(pw2); - - return pw1; -error: - FN(PW,free)(pw1); - FN(PW,free)(pw2); - return NULL; -} - -__isl_give PW *FN(PW,add_disjoint)(__isl_take PW *pw1, __isl_take PW *pw2) -{ - return FN(PW,align_params_pw_pw_and)(pw1, pw2, - &FN(PW,add_disjoint_aligned)); -} - -/* This function is currently only used from isl_aff.c - */ -static __isl_give PW *FN(PW,on_shared_domain)(__isl_take PW *pw1, - __isl_take PW *pw2, - __isl_give EL *(*fn)(__isl_take EL *el1, __isl_take EL *el2)) - __attribute__ ((unused)); - -/* Apply "fn" to pairs of elements from pw1 and pw2 on shared domains. - */ -static __isl_give PW *FN(PW,on_shared_domain)(__isl_take PW *pw1, - __isl_take PW *pw2, - __isl_give EL *(*fn)(__isl_take EL *el1, __isl_take EL *el2)) -{ - int i, j, n; - PW *res; - - if (!pw1 || !pw2) - goto error; - - n = pw1->n * pw2->n; -#ifdef HAS_TYPE - res = FN(PW,alloc_size)(isl_space_copy(pw1->dim), pw1->type, n); -#else - res = FN(PW,alloc_size)(isl_space_copy(pw1->dim), n); -#endif - - for (i = 0; i < pw1->n; ++i) { - for (j = 0; j < pw2->n; ++j) { - isl_set *common; - EL *res_ij; - common = isl_set_intersect( - isl_set_copy(pw1->p[i].set), - isl_set_copy(pw2->p[j].set)); - if (isl_set_plain_is_empty(common)) { - isl_set_free(common); - continue; - } - - res_ij = fn(FN(EL,copy)(pw1->p[i].FIELD), - FN(EL,copy)(pw2->p[j].FIELD)); - - res = FN(PW,add_piece)(res, common, res_ij); - } - } - - FN(PW,free)(pw1); - FN(PW,free)(pw2); - return res; -error: - FN(PW,free)(pw1); - FN(PW,free)(pw2); - return NULL; -} - -#ifndef NO_NEG -__isl_give PW *FN(PW,neg)(__isl_take PW *pw) -{ - int i; - - if (!pw) - return NULL; - - if (FN(PW,IS_ZERO)(pw)) - return pw; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].FIELD = FN(EL,neg)(pw->p[i].FIELD); - if (!pw->p[i].FIELD) - return FN(PW,free)(pw); - } - - return pw; -} - -__isl_give PW *FN(PW,sub)(__isl_take PW *pw1, __isl_take PW *pw2) -{ - return FN(PW,add)(pw1, FN(PW,neg)(pw2)); -} -#endif - -#ifndef NO_EVAL -__isl_give isl_qpolynomial *FN(PW,eval)(__isl_take PW *pw, - __isl_take isl_point *pnt) -{ - int i; - int found = 0; - isl_ctx *ctx; - isl_space *pnt_dim = NULL; - isl_qpolynomial *qp; - - if (!pw || !pnt) - goto error; - ctx = isl_point_get_ctx(pnt); - pnt_dim = isl_point_get_space(pnt); - isl_assert(ctx, isl_space_is_domain(pnt_dim, pw->dim), goto error); - - for (i = 0; i < pw->n; ++i) { - found = isl_set_contains_point(pw->p[i].set, pnt); - if (found < 0) - goto error; - if (found) - break; - } - if (found) - qp = FN(EL,eval)(FN(EL,copy)(pw->p[i].FIELD), - isl_point_copy(pnt)); - else - qp = isl_qpolynomial_zero_on_domain(FN(PW,get_domain_space)(pw)); - FN(PW,free)(pw); - isl_space_free(pnt_dim); - isl_point_free(pnt); - return qp; -error: - FN(PW,free)(pw); - isl_space_free(pnt_dim); - isl_point_free(pnt); - return NULL; -} -#endif - -__isl_give isl_set *FN(PW,domain)(__isl_take PW *pw) -{ - int i; - isl_set *dom; - - if (!pw) - return NULL; - - dom = isl_set_empty(FN(PW,get_domain_space)(pw)); - for (i = 0; i < pw->n; ++i) - dom = isl_set_union_disjoint(dom, isl_set_copy(pw->p[i].set)); - - FN(PW,free)(pw); - - return dom; -} - -/* Restrict the domain of "pw" by combining each cell - * with "set" through a call to "fn", where "fn" may be - * isl_set_intersect or isl_set_intersect_params. - */ -static __isl_give PW *FN(PW,intersect_aligned)(__isl_take PW *pw, - __isl_take isl_set *set, - __isl_give isl_set *(*fn)(__isl_take isl_set *set1, - __isl_take isl_set *set2)) -{ - int i; - - if (!pw || !set) - goto error; - - if (pw->n == 0) { - isl_set_free(set); - return pw; - } - - pw = FN(PW,cow)(pw); - if (!pw) - goto error; - - for (i = pw->n - 1; i >= 0; --i) { - isl_basic_set *aff; - pw->p[i].set = fn(pw->p[i].set, isl_set_copy(set)); - if (!pw->p[i].set) - goto error; - aff = isl_set_affine_hull(isl_set_copy(pw->p[i].set)); - pw->p[i].FIELD = FN(EL,substitute_equalities)(pw->p[i].FIELD, - aff); - if (!pw->p[i].FIELD) - goto error; - if (isl_set_plain_is_empty(pw->p[i].set)) { - isl_set_free(pw->p[i].set); - FN(EL,free)(pw->p[i].FIELD); - if (i != pw->n - 1) - pw->p[i] = pw->p[pw->n - 1]; - pw->n--; - } - } - - isl_set_free(set); - return pw; -error: - isl_set_free(set); - FN(PW,free)(pw); - return NULL; -} - -static __isl_give PW *FN(PW,intersect_domain_aligned)(__isl_take PW *pw, - __isl_take isl_set *set) -{ - return FN(PW,intersect_aligned)(pw, set, &isl_set_intersect); -} - -__isl_give PW *FN(PW,intersect_domain)(__isl_take PW *pw, - __isl_take isl_set *context) -{ - return FN(PW,align_params_pw_set_and)(pw, context, - &FN(PW,intersect_domain_aligned)); -} - -static __isl_give PW *FN(PW,intersect_params_aligned)(__isl_take PW *pw, - __isl_take isl_set *set) -{ - return FN(PW,intersect_aligned)(pw, set, &isl_set_intersect_params); -} - -/* Intersect the domain of "pw" with the parameter domain "context". - */ -__isl_give PW *FN(PW,intersect_params)(__isl_take PW *pw, - __isl_take isl_set *context) -{ - return FN(PW,align_params_pw_set_and)(pw, context, - &FN(PW,intersect_params_aligned)); -} - -static __isl_give PW *FN(PW,gist_aligned)(__isl_take PW *pw, - __isl_take isl_set *context, - __isl_give EL *(*fn_el)(__isl_take EL *el, - __isl_take isl_set *set), - __isl_give isl_set *(*fn_dom)(__isl_take isl_set *set, - __isl_take isl_basic_set *bset)) -{ - int i; - isl_basic_set *hull = NULL; - - if (!pw || !context) - goto error; - - if (pw->n == 0) { - isl_set_free(context); - return pw; - } - - if (!isl_space_match(pw->dim, isl_dim_param, - context->dim, isl_dim_param)) { - pw = FN(PW,align_params)(pw, isl_set_get_space(context)); - context = isl_set_align_params(context, FN(PW,get_space)(pw)); - } - - context = isl_set_compute_divs(context); - hull = isl_set_simple_hull(isl_set_copy(context)); - - pw = FN(PW,cow)(pw); - if (!pw) - goto error; - - for (i = pw->n - 1; i >= 0; --i) { - pw->p[i].set = isl_set_intersect(pw->p[i].set, - isl_set_copy(context)); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = fn_el(pw->p[i].FIELD, - isl_set_copy(pw->p[i].set)); - pw->p[i].set = fn_dom(pw->p[i].set, isl_basic_set_copy(hull)); - if (!pw->p[i].set) - goto error; - if (isl_set_plain_is_empty(pw->p[i].set)) { - isl_set_free(pw->p[i].set); - FN(EL,free)(pw->p[i].FIELD); - if (i != pw->n - 1) - pw->p[i] = pw->p[pw->n - 1]; - pw->n--; - } - } - - isl_basic_set_free(hull); - isl_set_free(context); - - return pw; -error: - FN(PW,free)(pw); - isl_basic_set_free(hull); - isl_set_free(context); - return NULL; -} - -static __isl_give PW *FN(PW,gist_domain_aligned)(__isl_take PW *pw, - __isl_take isl_set *set) -{ - return FN(PW,gist_aligned)(pw, set, &FN(EL,gist), - &isl_set_gist_basic_set); -} - -__isl_give PW *FN(PW,gist)(__isl_take PW *pw, __isl_take isl_set *context) -{ - return FN(PW,align_params_pw_set_and)(pw, context, - &FN(PW,gist_domain_aligned)); -} - -static __isl_give PW *FN(PW,gist_params_aligned)(__isl_take PW *pw, - __isl_take isl_set *set) -{ - return FN(PW,gist_aligned)(pw, set, &FN(EL,gist_params), - &isl_set_gist_params_basic_set); -} - -__isl_give PW *FN(PW,gist_params)(__isl_take PW *pw, - __isl_take isl_set *context) -{ - return FN(PW,align_params_pw_set_and)(pw, context, - &FN(PW,gist_params_aligned)); -} - -__isl_give PW *FN(PW,coalesce)(__isl_take PW *pw) -{ - int i, j; - - if (!pw) - return NULL; - if (pw->n == 0) - return pw; - - for (i = pw->n - 1; i >= 0; --i) { - for (j = i - 1; j >= 0; --j) { - if (!FN(EL,plain_is_equal)(pw->p[i].FIELD, - pw->p[j].FIELD)) - continue; - pw->p[j].set = isl_set_union(pw->p[j].set, - pw->p[i].set); - FN(EL,free)(pw->p[i].FIELD); - if (i != pw->n - 1) - pw->p[i] = pw->p[pw->n - 1]; - pw->n--; - break; - } - if (j >= 0) - continue; - pw->p[i].set = isl_set_coalesce(pw->p[i].set); - if (!pw->p[i].set) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} - -isl_ctx *FN(PW,get_ctx)(__isl_keep PW *pw) -{ - return pw ? isl_space_get_ctx(pw->dim) : NULL; -} - -#ifndef NO_INVOLVES_DIMS -int FN(PW,involves_dims)(__isl_keep PW *pw, enum isl_dim_type type, - unsigned first, unsigned n) -{ - int i; - enum isl_dim_type set_type; - - if (!pw) - return -1; - if (pw->n == 0 || n == 0) - return 0; - - set_type = type == isl_dim_in ? isl_dim_set : type; - - for (i = 0; i < pw->n; ++i) { - int involves = FN(EL,involves_dims)(pw->p[i].FIELD, - type, first, n); - if (involves < 0 || involves) - return involves; - involves = isl_set_involves_dims(pw->p[i].set, - set_type, first, n); - if (involves < 0 || involves) - return involves; - } - return 0; -} -#endif - -__isl_give PW *FN(PW,set_dim_name)(__isl_take PW *pw, - enum isl_dim_type type, unsigned pos, const char *s) -{ - int i; - enum isl_dim_type set_type; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - - set_type = type == isl_dim_in ? isl_dim_set : type; - - pw->dim = isl_space_set_dim_name(pw->dim, type, pos, s); - if (!pw->dim) - goto error; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_set_dim_name(pw->p[i].set, - set_type, pos, s); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,set_dim_name)(pw->p[i].FIELD, type, pos, s); - if (!pw->p[i].FIELD) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} - -#ifndef NO_DROP_DIMS -__isl_give PW *FN(PW,drop_dims)(__isl_take PW *pw, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - enum isl_dim_type set_type; - - if (!pw) - return NULL; - if (n == 0 && !isl_space_get_tuple_name(pw->dim, type)) - return pw; - - set_type = type == isl_dim_in ? isl_dim_set : type; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - pw->dim = isl_space_drop_dims(pw->dim, type, first, n); - if (!pw->dim) - goto error; - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_drop(pw->p[i].set, set_type, first, n); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,drop_dims)(pw->p[i].FIELD, type, first, n); - if (!pw->p[i].FIELD) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} - -/* This function is very similar to drop_dims. - * The only difference is that the cells may still involve - * the specified dimensions. They are removed using - * isl_set_project_out instead of isl_set_drop. - */ -__isl_give PW *FN(PW,project_out)(__isl_take PW *pw, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - enum isl_dim_type set_type; - - if (!pw) - return NULL; - if (n == 0 && !isl_space_get_tuple_name(pw->dim, type)) - return pw; - - set_type = type == isl_dim_in ? isl_dim_set : type; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - pw->dim = isl_space_drop_dims(pw->dim, type, first, n); - if (!pw->dim) - goto error; - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_project_out(pw->p[i].set, - set_type, first, n); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,drop_dims)(pw->p[i].FIELD, type, first, n); - if (!pw->p[i].FIELD) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} - -/* Project the domain of pw onto its parameter space. - */ -__isl_give PW *FN(PW,project_domain_on_params)(__isl_take PW *pw) -{ - isl_space *space; - unsigned n; - - n = FN(PW,dim)(pw, isl_dim_in); - pw = FN(PW,project_out)(pw, isl_dim_in, 0, n); - space = FN(PW,get_domain_space)(pw); - space = isl_space_params(space); - pw = FN(PW,reset_domain_space)(pw, space); - return pw; -} -#endif - -#ifndef NO_INSERT_DIMS -__isl_give PW *FN(PW,insert_dims)(__isl_take PW *pw, enum isl_dim_type type, - unsigned first, unsigned n) -{ - int i; - enum isl_dim_type set_type; - - if (!pw) - return NULL; - if (n == 0 && !isl_space_is_named_or_nested(pw->dim, type)) - return pw; - - set_type = type == isl_dim_in ? isl_dim_set : type; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - - pw->dim = isl_space_insert_dims(pw->dim, type, first, n); - if (!pw->dim) - goto error; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_insert_dims(pw->p[i].set, - set_type, first, n); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,insert_dims)(pw->p[i].FIELD, - type, first, n); - if (!pw->p[i].FIELD) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} -#endif - -__isl_give PW *FN(PW,fix_dim)(__isl_take PW *pw, - enum isl_dim_type type, unsigned pos, isl_int v) -{ - int i; - - if (!pw) - return NULL; - - if (type == isl_dim_in) - type = isl_dim_set; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_fix(pw->p[i].set, type, pos, v); - if (!pw->p[i].set) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} - -unsigned FN(PW,dim)(__isl_keep PW *pw, enum isl_dim_type type) -{ - return pw ? isl_space_dim(pw->dim, type) : 0; -} - -__isl_give PW *FN(PW,split_dims)(__isl_take PW *pw, - enum isl_dim_type type, unsigned first, unsigned n) -{ - int i; - - if (!pw) - return NULL; - if (n == 0) - return pw; - - if (type == isl_dim_in) - type = isl_dim_set; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - if (!pw->dim) - goto error; - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_split_dims(pw->p[i].set, type, first, n); - if (!pw->p[i].set) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} - -#ifndef NO_OPT -/* Compute the maximal value attained by the piecewise quasipolynomial - * on its domain or zero if the domain is empty. - * In the worst case, the domain is scanned completely, - * so the domain is assumed to be bounded. - */ -__isl_give isl_qpolynomial *FN(PW,opt)(__isl_take PW *pw, int max) -{ - int i; - isl_qpolynomial *opt; - - if (!pw) - return NULL; - - if (pw->n == 0) { - isl_space *dim = isl_space_copy(pw->dim); - FN(PW,free)(pw); - return isl_qpolynomial_zero_on_domain(isl_space_domain(dim)); - } - - opt = FN(EL,opt_on_domain)(FN(EL,copy)(pw->p[0].FIELD), - isl_set_copy(pw->p[0].set), max); - for (i = 1; i < pw->n; ++i) { - isl_qpolynomial *opt_i; - opt_i = FN(EL,opt_on_domain)(FN(EL,copy)(pw->p[i].FIELD), - isl_set_copy(pw->p[i].set), max); - if (max) - opt = isl_qpolynomial_max_cst(opt, opt_i); - else - opt = isl_qpolynomial_min_cst(opt, opt_i); - } - - FN(PW,free)(pw); - return opt; -} - -__isl_give isl_qpolynomial *FN(PW,max)(__isl_take PW *pw) -{ - return FN(PW,opt)(pw, 1); -} - -__isl_give isl_qpolynomial *FN(PW,min)(__isl_take PW *pw) -{ - return FN(PW,opt)(pw, 0); -} -#endif - -__isl_give isl_space *FN(PW,get_space)(__isl_keep PW *pw) -{ - return pw ? isl_space_copy(pw->dim) : NULL; -} - -__isl_give isl_space *FN(PW,get_domain_space)(__isl_keep PW *pw) -{ - return pw ? isl_space_domain(isl_space_copy(pw->dim)) : NULL; -} - -#ifndef NO_RESET_DIM -/* Reset the space of "pw". Since we don't know if the elements - * represent the spaces themselves or their domains, we pass along - * both when we call their reset_space_and_domain. - */ -static __isl_give PW *FN(PW,reset_space_and_domain)(__isl_take PW *pw, - __isl_take isl_space *space, __isl_take isl_space *domain) -{ - int i; - - pw = FN(PW,cow)(pw); - if (!pw || !space || !domain) - goto error; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_reset_space(pw->p[i].set, - isl_space_copy(domain)); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,reset_space_and_domain)(pw->p[i].FIELD, - isl_space_copy(space), isl_space_copy(domain)); - if (!pw->p[i].FIELD) - goto error; - } - - isl_space_free(domain); - - isl_space_free(pw->dim); - pw->dim = space; - - return pw; -error: - isl_space_free(domain); - isl_space_free(space); - FN(PW,free)(pw); - return NULL; -} - -__isl_give PW *FN(PW,reset_domain_space)(__isl_take PW *pw, - __isl_take isl_space *domain) -{ - isl_space *space; - - space = isl_space_extend_domain_with_range(isl_space_copy(domain), - FN(PW,get_space)(pw)); - return FN(PW,reset_space_and_domain)(pw, space, domain); -} - -__isl_give PW *FN(PW,reset_space)(__isl_take PW *pw, __isl_take isl_space *dim) -{ - isl_space *domain; - - domain = isl_space_domain(isl_space_copy(dim)); - return FN(PW,reset_space_and_domain)(pw, dim, domain); -} - -__isl_give PW *FN(PW,set_tuple_id)(__isl_keep PW *pw, enum isl_dim_type type, - __isl_take isl_id *id) -{ - isl_space *space; - - pw = FN(PW,cow)(pw); - if (!pw) - return isl_id_free(id); - - space = FN(PW,get_space)(pw); - space = isl_space_set_tuple_id(space, type, id); - - return FN(PW,reset_space)(pw, space); -} - -__isl_give PW *FN(PW,set_dim_id)(__isl_take PW *pw, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id) -{ - pw = FN(PW,cow)(pw); - if (!pw) - return isl_id_free(id); - pw->dim = isl_space_set_dim_id(pw->dim, type, pos, id); - return FN(PW,reset_space)(pw, isl_space_copy(pw->dim)); -} -#endif - -int FN(PW,has_equal_space)(__isl_keep PW *pw1, __isl_keep PW *pw2) -{ - if (!pw1 || !pw2) - return -1; - - return isl_space_is_equal(pw1->dim, pw2->dim); -} - -#ifndef NO_MORPH -__isl_give PW *FN(PW,morph_domain)(__isl_take PW *pw, - __isl_take isl_morph *morph) -{ - int i; - isl_ctx *ctx; - - if (!pw || !morph) - goto error; - - ctx = isl_space_get_ctx(pw->dim); - isl_assert(ctx, isl_space_is_domain(morph->dom->dim, pw->dim), - goto error); - - pw = FN(PW,cow)(pw); - if (!pw) - goto error; - pw->dim = isl_space_extend_domain_with_range( - isl_space_copy(morph->ran->dim), pw->dim); - if (!pw->dim) - goto error; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_morph_set(isl_morph_copy(morph), pw->p[i].set); - if (!pw->p[i].set) - goto error; - pw->p[i].FIELD = FN(EL,morph_domain)(pw->p[i].FIELD, - isl_morph_copy(morph)); - if (!pw->p[i].FIELD) - goto error; - } - - isl_morph_free(morph); - - return pw; -error: - FN(PW,free)(pw); - isl_morph_free(morph); - return NULL; -} -#endif - -int FN(PW,foreach_piece)(__isl_keep PW *pw, - int (*fn)(__isl_take isl_set *set, __isl_take EL *el, void *user), - void *user) -{ - int i; - - if (!pw) - return -1; - - for (i = 0; i < pw->n; ++i) - if (fn(isl_set_copy(pw->p[i].set), - FN(EL,copy)(pw->p[i].FIELD), user) < 0) - return -1; - - return 0; -} - -#ifndef NO_LIFT -static int any_divs(__isl_keep isl_set *set) -{ - int i; - - if (!set) - return -1; - - for (i = 0; i < set->n; ++i) - if (set->p[i]->n_div > 0) - return 1; - - return 0; -} - -static int foreach_lifted_subset(__isl_take isl_set *set, __isl_take EL *el, - int (*fn)(__isl_take isl_set *set, __isl_take EL *el, - void *user), void *user) -{ - int i; - - if (!set || !el) - goto error; - - for (i = 0; i < set->n; ++i) { - isl_set *lift; - EL *copy; - - lift = isl_set_from_basic_set(isl_basic_set_copy(set->p[i])); - lift = isl_set_lift(lift); - - copy = FN(EL,copy)(el); - copy = FN(EL,lift)(copy, isl_set_get_space(lift)); - - if (fn(lift, copy, user) < 0) - goto error; - } - - isl_set_free(set); - FN(EL,free)(el); - - return 0; -error: - isl_set_free(set); - FN(EL,free)(el); - return -1; -} - -int FN(PW,foreach_lifted_piece)(__isl_keep PW *pw, - int (*fn)(__isl_take isl_set *set, __isl_take EL *el, - void *user), void *user) -{ - int i; - - if (!pw) - return -1; - - for (i = 0; i < pw->n; ++i) { - isl_set *set; - EL *el; - - set = isl_set_copy(pw->p[i].set); - el = FN(EL,copy)(pw->p[i].FIELD); - if (!any_divs(set)) { - if (fn(set, el, user) < 0) - return -1; - continue; - } - if (foreach_lifted_subset(set, el, fn, user) < 0) - return -1; - } - - return 0; -} -#endif - -#ifndef NO_MOVE_DIMS -__isl_give PW *FN(PW,move_dims)(__isl_take PW *pw, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - int i; - - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - - pw->dim = isl_space_move_dims(pw->dim, dst_type, dst_pos, src_type, src_pos, n); - if (!pw->dim) - goto error; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].FIELD = FN(EL,move_dims)(pw->p[i].FIELD, - dst_type, dst_pos, src_type, src_pos, n); - if (!pw->p[i].FIELD) - goto error; - } - - if (dst_type == isl_dim_in) - dst_type = isl_dim_set; - if (src_type == isl_dim_in) - src_type = isl_dim_set; - - for (i = 0; i < pw->n; ++i) { - pw->p[i].set = isl_set_move_dims(pw->p[i].set, - dst_type, dst_pos, - src_type, src_pos, n); - if (!pw->p[i].set) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} -#endif - -__isl_give PW *FN(PW,mul_isl_int)(__isl_take PW *pw, isl_int v) -{ - int i; - - if (isl_int_is_one(v)) - return pw; - if (pw && DEFAULT_IS_ZERO && isl_int_is_zero(v)) { - PW *zero; - isl_space *dim = FN(PW,get_space)(pw); -#ifdef HAS_TYPE - zero = FN(PW,ZERO)(dim, pw->type); -#else - zero = FN(PW,ZERO)(dim); -#endif - FN(PW,free)(pw); - return zero; - } - pw = FN(PW,cow)(pw); - if (!pw) - return NULL; - if (pw->n == 0) - return pw; - -#ifdef HAS_TYPE - if (isl_int_is_neg(v)) - pw->type = isl_fold_type_negate(pw->type); -#endif - for (i = 0; i < pw->n; ++i) { - pw->p[i].FIELD = FN(EL,scale)(pw->p[i].FIELD, v); - if (!pw->p[i].FIELD) - goto error; - } - - return pw; -error: - FN(PW,free)(pw); - return NULL; -} - -__isl_give PW *FN(PW,scale)(__isl_take PW *pw, isl_int v) -{ - return FN(PW,mul_isl_int)(pw, v); -} - -static int FN(PW,qsort_set_cmp)(const void *p1, const void *p2) -{ - const isl_set *set1 = *(const isl_set **)p1; - const isl_set *set2 = *(const isl_set **)p2; - - return isl_set_plain_cmp(set1, set2); -} - -/* We normalize in place, but if anything goes wrong we need - * to return NULL, so we need to make sure we don't change the - * meaning of any possible other copies of map. - */ -__isl_give PW *FN(PW,normalize)(__isl_take PW *pw) -{ - int i, j; - isl_set *set; - - if (!pw) - return NULL; - for (i = 0; i < pw->n; ++i) { - set = isl_set_normalize(isl_set_copy(pw->p[i].set)); - if (!set) - return FN(PW,free)(pw); - isl_set_free(pw->p[i].set); - pw->p[i].set = set; - } - qsort(pw->p, pw->n, sizeof(pw->p[0]), &FN(PW,qsort_set_cmp)); - for (i = pw->n - 1; i >= 1; --i) { - if (!isl_set_plain_is_equal(pw->p[i - 1].set, pw->p[i].set)) - continue; - if (!FN(EL,plain_is_equal)(pw->p[i - 1].FIELD, pw->p[i].FIELD)) - continue; - set = isl_set_union(isl_set_copy(pw->p[i - 1].set), - isl_set_copy(pw->p[i].set)); - if (!set) - return FN(PW,free)(pw); - isl_set_free(pw->p[i].set); - FN(EL,free)(pw->p[i].FIELD); - isl_set_free(pw->p[i - 1].set); - pw->p[i - 1].set = set; - for (j = i + 1; j < pw->n; ++j) - pw->p[j - 1] = pw->p[j]; - pw->n--; - } - - return pw; -} - -/* Is pw1 obviously equal to pw2? - * That is, do they have obviously identical cells and obviously identical - * elements on each cell? - */ -int FN(PW,plain_is_equal)(__isl_keep PW *pw1, __isl_keep PW *pw2) -{ - int i; - int equal; - - if (!pw1 || !pw2) - return -1; - - if (pw1 == pw2) - return 1; - if (!isl_space_is_equal(pw1->dim, pw2->dim)) - return 0; - - pw1 = FN(PW,copy)(pw1); - pw2 = FN(PW,copy)(pw2); - pw1 = FN(PW,normalize)(pw1); - pw2 = FN(PW,normalize)(pw2); - if (!pw1 || !pw2) - goto error; - - equal = pw1->n == pw2->n; - for (i = 0; equal && i < pw1->n; ++i) { - equal = isl_set_plain_is_equal(pw1->p[i].set, pw2->p[i].set); - if (equal < 0) - goto error; - if (!equal) - break; - equal = FN(EL,plain_is_equal)(pw1->p[i].FIELD, pw2->p[i].FIELD); - if (equal < 0) - goto error; - } - - FN(PW,free)(pw1); - FN(PW,free)(pw2); - return equal; -error: - FN(PW,free)(pw1); - FN(PW,free)(pw2); - return -1; -} diff --git a/cloog-0.17.0/isl/isl_qsort.c b/cloog-0.17.0/isl/isl_qsort.c deleted file mode 100644 index 3183048..0000000 --- a/cloog-0.17.0/isl/isl_qsort.c +++ /dev/null @@ -1,249 +0,0 @@ -/* Copyright (C) 1991,1992,1996,1997,1999,2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Written by Douglas C. Schmidt (schmidt@ics.uci.edu). - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -/* If you consider tuning this algorithm, you should consult first: - Engineering a sort function; Jon Bentley and M. Douglas McIlroy; - Software - Practice and Experience; Vol. 23 (11), 1249-1265, 1993. */ - -#include -#include -#include -#include - -/* Byte-wise swap two items of size SIZE. */ -#define SWAP(a, b, size) \ - do \ - { \ - register size_t __size = (size); \ - register char *__a = (a), *__b = (b); \ - do \ - { \ - char __tmp = *__a; \ - *__a++ = *__b; \ - *__b++ = __tmp; \ - } while (--__size > 0); \ - } while (0) - -/* Discontinue quicksort algorithm when partition gets below this size. - This particular magic number was chosen to work best on a Sun 4/260. */ -#define MAX_THRESH 4 - -/* Stack node declarations used to store unfulfilled partition obligations. */ -typedef struct - { - char *lo; - char *hi; - } stack_node; - -/* The next 4 #defines implement a very fast in-line stack abstraction. */ -/* The stack needs log (total_elements) entries (we could even subtract - log(MAX_THRESH)). Since total_elements has type size_t, we get as - upper bound for log (total_elements): - bits per byte (CHAR_BIT) * sizeof(size_t). */ -#define STACK_SIZE (CHAR_BIT * sizeof(size_t)) -#define PUSH(low, high) ((void) ((top->lo = (low)), (top->hi = (high)), ++top)) -#define POP(low, high) ((void) (--top, (low = top->lo), (high = top->hi))) -#define STACK_NOT_EMPTY (stack < top) - - -/* Order size using quicksort. This implementation incorporates - four optimizations discussed in Sedgewick: - - 1. Non-recursive, using an explicit stack of pointer that store the - next array partition to sort. To save time, this maximum amount - of space required to store an array of SIZE_MAX is allocated on the - stack. Assuming a 32-bit (64 bit) integer for size_t, this needs - only 32 * sizeof(stack_node) == 256 bytes (for 64 bit: 1024 bytes). - Pretty cheap, actually. - - 2. Chose the pivot element using a median-of-three decision tree. - This reduces the probability of selecting a bad pivot value and - eliminates certain extraneous comparisons. - - 3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving - insertion sort to order the MAX_THRESH items within each partition. - This is a big win, since insertion sort is faster for small, mostly - sorted array segments. - - 4. The larger of the two sub-partitions is always pushed onto the - stack first, with the algorithm then concentrating on the - smaller partition. This *guarantees* no more than log (total_elems) - stack size is needed (actually O(1) in this case)! */ - -void isl_quicksort (void *const pbase, size_t total_elems, size_t size, - int (*cmp)(const void *, const void *, void *arg), void *arg) -{ - register char *base_ptr = (char *) pbase; - - const size_t max_thresh = MAX_THRESH * size; - - if (total_elems == 0) - /* Avoid lossage with unsigned arithmetic below. */ - return; - - if (total_elems > MAX_THRESH) - { - char *lo = base_ptr; - char *hi = &lo[size * (total_elems - 1)]; - stack_node stack[STACK_SIZE]; - stack_node *top = stack; - - PUSH (NULL, NULL); - - while (STACK_NOT_EMPTY) - { - char *left_ptr; - char *right_ptr; - - /* Select median value from among LO, MID, and HI. Rearrange - LO and HI so the three values are sorted. This lowers the - probability of picking a pathological pivot value and - skips a comparison for both the LEFT_PTR and RIGHT_PTR in - the while loops. */ - - char *mid = lo + size * ((hi - lo) / size >> 1); - - if ((*cmp) ((void *) mid, (void *) lo, arg) < 0) - SWAP (mid, lo, size); - if ((*cmp) ((void *) hi, (void *) mid, arg) < 0) - SWAP (mid, hi, size); - else - goto jump_over; - if ((*cmp) ((void *) mid, (void *) lo, arg) < 0) - SWAP (mid, lo, size); - jump_over:; - - left_ptr = lo + size; - right_ptr = hi - size; - - /* Here's the famous ``collapse the walls'' section of quicksort. - Gotta like those tight inner loops! They are the main reason - that this algorithm runs much faster than others. */ - do - { - while ((*cmp) ((void *) left_ptr, (void *) mid, arg) < 0) - left_ptr += size; - - while ((*cmp) ((void *) mid, (void *) right_ptr, arg) < 0) - right_ptr -= size; - - if (left_ptr < right_ptr) - { - SWAP (left_ptr, right_ptr, size); - if (mid == left_ptr) - mid = right_ptr; - else if (mid == right_ptr) - mid = left_ptr; - left_ptr += size; - right_ptr -= size; - } - else if (left_ptr == right_ptr) - { - left_ptr += size; - right_ptr -= size; - break; - } - } - while (left_ptr <= right_ptr); - - /* Set up pointers for next iteration. First determine whether - left and right partitions are below the threshold size. If so, - ignore one or both. Otherwise, push the larger partition's - bounds on the stack and continue sorting the smaller one. */ - - if ((size_t) (right_ptr - lo) <= max_thresh) - { - if ((size_t) (hi - left_ptr) <= max_thresh) - /* Ignore both small partitions. */ - POP (lo, hi); - else - /* Ignore small left partition. */ - lo = left_ptr; - } - else if ((size_t) (hi - left_ptr) <= max_thresh) - /* Ignore small right partition. */ - hi = right_ptr; - else if ((right_ptr - lo) > (hi - left_ptr)) - { - /* Push larger left partition indices. */ - PUSH (lo, right_ptr); - lo = left_ptr; - } - else - { - /* Push larger right partition indices. */ - PUSH (left_ptr, hi); - hi = right_ptr; - } - } - } - - /* Once the BASE_PTR array is partially sorted by quicksort the rest - is completely sorted using insertion sort, since this is efficient - for partitions below MAX_THRESH size. BASE_PTR points to the beginning - of the array to sort, and END_PTR points at the very last element in - the array (*not* one beyond it!). */ - -#define min(x, y) ((x) < (y) ? (x) : (y)) - - { - char *const end_ptr = &base_ptr[size * (total_elems - 1)]; - char *tmp_ptr = base_ptr; - char *thresh = min(end_ptr, base_ptr + max_thresh); - register char *run_ptr; - - /* Find smallest element in first threshold and place it at the - array's beginning. This is the smallest array element, - and the operation speeds up insertion sort's inner loop. */ - - for (run_ptr = tmp_ptr + size; run_ptr <= thresh; run_ptr += size) - if ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, arg) < 0) - tmp_ptr = run_ptr; - - if (tmp_ptr != base_ptr) - SWAP (tmp_ptr, base_ptr, size); - - /* Insertion sort, running from left-hand-side up to right-hand-side. */ - - run_ptr = base_ptr + size; - while ((run_ptr += size) <= end_ptr) - { - tmp_ptr = run_ptr - size; - while ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, arg) < 0) - tmp_ptr -= size; - - tmp_ptr += size; - if (tmp_ptr != run_ptr) - { - char *trav; - - trav = run_ptr + size; - while (--trav >= run_ptr) - { - char c = *trav; - char *hi, *lo; - - for (hi = lo = trav; (lo -= size) >= tmp_ptr; hi = lo) - *hi = *lo; - *hi = c; - } - } - } - } -} diff --git a/cloog-0.17.0/isl/isl_qsort.h b/cloog-0.17.0/isl/isl_qsort.h deleted file mode 100644 index 5ca1634..0000000 --- a/cloog-0.17.0/isl/isl_qsort.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef ISL_QSORT_H -#define ISL_QSORT_H - -void isl_quicksort (void *const pbase, size_t total_elems, size_t size, - int (*cmp)(const void *, const void *, void *arg), void *arg); - -#endif diff --git a/cloog-0.17.0/isl/isl_range.c b/cloog-0.17.0/isl/isl_range.c deleted file mode 100644 index 2653fc4..0000000 --- a/cloog-0.17.0/isl/isl_range.c +++ /dev/null @@ -1,491 +0,0 @@ -#include -#include -#include -#include -#include -#include - -struct range_data { - struct isl_bound *bound; - int *signs; - int sign; - int test_monotonicity; - int monotonicity; - int tight; - isl_qpolynomial *poly; - isl_pw_qpolynomial_fold *pwf; - isl_pw_qpolynomial_fold *pwf_tight; -}; - -static int propagate_on_domain(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct range_data *data); - -/* Check whether the polynomial "poly" has sign "sign" over "bset", - * i.e., if sign == 1, check that the lower bound on the polynomial - * is non-negative and if sign == -1, check that the upper bound on - * the polynomial is non-positive. - */ -static int has_sign(__isl_keep isl_basic_set *bset, - __isl_keep isl_qpolynomial *poly, int sign, int *signs) -{ - struct range_data data_m; - unsigned nvar; - unsigned nparam; - isl_space *dim; - isl_qpolynomial *opt; - int r; - enum isl_fold type; - - nparam = isl_basic_set_dim(bset, isl_dim_param); - nvar = isl_basic_set_dim(bset, isl_dim_set); - - bset = isl_basic_set_copy(bset); - poly = isl_qpolynomial_copy(poly); - - bset = isl_basic_set_move_dims(bset, isl_dim_set, 0, - isl_dim_param, 0, nparam); - poly = isl_qpolynomial_move_dims(poly, isl_dim_in, 0, - isl_dim_param, 0, nparam); - - dim = isl_qpolynomial_get_space(poly); - dim = isl_space_params(dim); - dim = isl_space_from_domain(dim); - dim = isl_space_add_dims(dim, isl_dim_out, 1); - - data_m.test_monotonicity = 0; - data_m.signs = signs; - data_m.sign = -sign; - type = data_m.sign < 0 ? isl_fold_min : isl_fold_max; - data_m.pwf = isl_pw_qpolynomial_fold_zero(dim, type); - data_m.tight = 0; - data_m.pwf_tight = NULL; - - if (propagate_on_domain(bset, poly, &data_m) < 0) - goto error; - - if (sign > 0) - opt = isl_pw_qpolynomial_fold_min(data_m.pwf); - else - opt = isl_pw_qpolynomial_fold_max(data_m.pwf); - - if (!opt) - r = -1; - else if (isl_qpolynomial_is_nan(opt) || - isl_qpolynomial_is_infty(opt) || - isl_qpolynomial_is_neginfty(opt)) - r = 0; - else - r = sign * isl_qpolynomial_sgn(opt) >= 0; - - isl_qpolynomial_free(opt); - - return r; -error: - isl_pw_qpolynomial_fold_free(data_m.pwf); - return -1; -} - -/* Return 1 if poly is monotonically increasing in the last set variable, - * -1 if poly is monotonically decreasing in the last set variable, - * 0 if no conclusion, - * -2 on error. - * - * We simply check the sign of p(x+1)-p(x) - */ -static int monotonicity(__isl_keep isl_basic_set *bset, - __isl_keep isl_qpolynomial *poly, struct range_data *data) -{ - isl_ctx *ctx; - isl_space *dim; - isl_qpolynomial *sub = NULL; - isl_qpolynomial *diff = NULL; - int result = 0; - int s; - unsigned nvar; - - ctx = isl_qpolynomial_get_ctx(poly); - dim = isl_qpolynomial_get_domain_space(poly); - - nvar = isl_basic_set_dim(bset, isl_dim_set); - - sub = isl_qpolynomial_var_on_domain(isl_space_copy(dim), isl_dim_set, nvar - 1); - sub = isl_qpolynomial_add(sub, - isl_qpolynomial_rat_cst_on_domain(dim, ctx->one, ctx->one)); - - diff = isl_qpolynomial_substitute(isl_qpolynomial_copy(poly), - isl_dim_in, nvar - 1, 1, &sub); - diff = isl_qpolynomial_sub(diff, isl_qpolynomial_copy(poly)); - - s = has_sign(bset, diff, 1, data->signs); - if (s < 0) - goto error; - if (s) - result = 1; - else { - s = has_sign(bset, diff, -1, data->signs); - if (s < 0) - goto error; - if (s) - result = -1; - } - - isl_qpolynomial_free(diff); - isl_qpolynomial_free(sub); - - return result; -error: - isl_qpolynomial_free(diff); - isl_qpolynomial_free(sub); - return -2; -} - -static __isl_give isl_qpolynomial *bound2poly(__isl_take isl_constraint *bound, - __isl_take isl_space *dim, unsigned pos, int sign) -{ - if (!bound) { - if (sign > 0) - return isl_qpolynomial_infty_on_domain(dim); - else - return isl_qpolynomial_neginfty_on_domain(dim); - } - isl_space_free(dim); - return isl_qpolynomial_from_constraint(bound, isl_dim_set, pos); -} - -static int bound_is_integer(__isl_take isl_constraint *bound, unsigned pos) -{ - isl_int c; - int is_int; - - if (!bound) - return 1; - - isl_int_init(c); - isl_constraint_get_coefficient(bound, isl_dim_set, pos, &c); - is_int = isl_int_is_one(c) || isl_int_is_negone(c); - isl_int_clear(c); - - return is_int; -} - -struct isl_fixed_sign_data { - int *signs; - int sign; - isl_qpolynomial *poly; -}; - -/* Add term "term" to data->poly if it has sign data->sign. - * The sign is determined based on the signs of the parameters - * and variables in data->signs. The integer divisions, if - * any, are assumed to be non-negative. - */ -static int collect_fixed_sign_terms(__isl_take isl_term *term, void *user) -{ - struct isl_fixed_sign_data *data = (struct isl_fixed_sign_data *)user; - isl_int n; - int i; - int sign; - unsigned nparam; - unsigned nvar; - - if (!term) - return -1; - - nparam = isl_term_dim(term, isl_dim_param); - nvar = isl_term_dim(term, isl_dim_set); - - isl_int_init(n); - - isl_term_get_num(term, &n); - - sign = isl_int_sgn(n); - for (i = 0; i < nparam; ++i) { - if (data->signs[i] > 0) - continue; - if (isl_term_get_exp(term, isl_dim_param, i) % 2) - sign = -sign; - } - for (i = 0; i < nvar; ++i) { - if (data->signs[nparam + i] > 0) - continue; - if (isl_term_get_exp(term, isl_dim_set, i) % 2) - sign = -sign; - } - - if (sign == data->sign) { - isl_qpolynomial *t = isl_qpolynomial_from_term(term); - - data->poly = isl_qpolynomial_add(data->poly, t); - } else - isl_term_free(term); - - isl_int_clear(n); - - return 0; -} - -/* Construct and return a polynomial that consists of the terms - * in "poly" that have sign "sign". The integer divisions, if - * any, are assumed to be non-negative. - */ -__isl_give isl_qpolynomial *isl_qpolynomial_terms_of_sign( - __isl_keep isl_qpolynomial *poly, int *signs, int sign) -{ - isl_space *space; - struct isl_fixed_sign_data data = { signs, sign }; - - space = isl_qpolynomial_get_domain_space(poly); - data.poly = isl_qpolynomial_zero_on_domain(space); - - if (isl_qpolynomial_foreach_term(poly, collect_fixed_sign_terms, &data) < 0) - goto error; - - return data.poly; -error: - isl_qpolynomial_free(data.poly); - return NULL; -} - -/* Helper function to add a guarded polynomial to either pwf_tight or pwf, - * depending on whether the result has been determined to be tight. - */ -static int add_guarded_poly(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct range_data *data) -{ - enum isl_fold type = data->sign < 0 ? isl_fold_min : isl_fold_max; - isl_set *set; - isl_qpolynomial_fold *fold; - isl_pw_qpolynomial_fold *pwf; - - bset = isl_basic_set_params(bset); - poly = isl_qpolynomial_project_domain_on_params(poly); - - fold = isl_qpolynomial_fold_alloc(type, poly); - set = isl_set_from_basic_set(bset); - pwf = isl_pw_qpolynomial_fold_alloc(type, set, fold); - if (data->tight) - data->pwf_tight = isl_pw_qpolynomial_fold_fold( - data->pwf_tight, pwf); - else - data->pwf = isl_pw_qpolynomial_fold_fold(data->pwf, pwf); - - return 0; -} - -/* Given a lower and upper bound on the final variable and constraints - * on the remaining variables where these bounds are active, - * eliminate the variable from data->poly based on these bounds. - * If the polynomial has been determined to be monotonic - * in the variable, then simply plug in the appropriate bound. - * If the current polynomial is tight and if this bound is integer, - * then the result is still tight. In all other cases, the results - * may not be tight. - * Otherwise, plug in the largest bound (in absolute value) in - * the positive terms (if an upper bound is wanted) or the negative terms - * (if a lower bounded is wanted) and the other bound in the other terms. - * - * If all variables have been eliminated, then record the result. - * Ohterwise, recurse on the next variable. - */ -static int propagate_on_bound_pair(__isl_take isl_constraint *lower, - __isl_take isl_constraint *upper, __isl_take isl_basic_set *bset, - void *user) -{ - struct range_data *data = (struct range_data *)user; - int save_tight = data->tight; - isl_qpolynomial *poly; - int r; - unsigned nvar; - - nvar = isl_basic_set_dim(bset, isl_dim_set); - - if (data->monotonicity) { - isl_qpolynomial *sub; - isl_space *dim = isl_qpolynomial_get_domain_space(data->poly); - if (data->monotonicity * data->sign > 0) { - if (data->tight) - data->tight = bound_is_integer(upper, nvar); - sub = bound2poly(upper, dim, nvar, 1); - isl_constraint_free(lower); - } else { - if (data->tight) - data->tight = bound_is_integer(lower, nvar); - sub = bound2poly(lower, dim, nvar, -1); - isl_constraint_free(upper); - } - poly = isl_qpolynomial_copy(data->poly); - poly = isl_qpolynomial_substitute(poly, isl_dim_in, nvar, 1, &sub); - poly = isl_qpolynomial_drop_dims(poly, isl_dim_in, nvar, 1); - - isl_qpolynomial_free(sub); - } else { - isl_qpolynomial *l, *u; - isl_qpolynomial *pos, *neg; - isl_space *dim = isl_qpolynomial_get_domain_space(data->poly); - unsigned nparam = isl_basic_set_dim(bset, isl_dim_param); - int sign = data->sign * data->signs[nparam + nvar]; - - data->tight = 0; - - u = bound2poly(upper, isl_space_copy(dim), nvar, 1); - l = bound2poly(lower, dim, nvar, -1); - - pos = isl_qpolynomial_terms_of_sign(data->poly, data->signs, sign); - neg = isl_qpolynomial_terms_of_sign(data->poly, data->signs, -sign); - - pos = isl_qpolynomial_substitute(pos, isl_dim_in, nvar, 1, &u); - neg = isl_qpolynomial_substitute(neg, isl_dim_in, nvar, 1, &l); - - poly = isl_qpolynomial_add(pos, neg); - poly = isl_qpolynomial_drop_dims(poly, isl_dim_in, nvar, 1); - - isl_qpolynomial_free(u); - isl_qpolynomial_free(l); - } - - if (isl_basic_set_dim(bset, isl_dim_set) == 0) - r = add_guarded_poly(bset, poly, data); - else - r = propagate_on_domain(bset, poly, data); - - data->tight = save_tight; - - return r; -} - -/* Recursively perform range propagation on the polynomial "poly" - * defined over the basic set "bset" and collect the results in "data". - */ -static int propagate_on_domain(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct range_data *data) -{ - isl_ctx *ctx; - isl_qpolynomial *save_poly = data->poly; - int save_monotonicity = data->monotonicity; - unsigned d; - - if (!bset || !poly) - goto error; - - ctx = isl_basic_set_get_ctx(bset); - d = isl_basic_set_dim(bset, isl_dim_set); - isl_assert(ctx, d >= 1, goto error); - - if (isl_qpolynomial_is_cst(poly, NULL, NULL)) { - bset = isl_basic_set_project_out(bset, isl_dim_set, 0, d); - poly = isl_qpolynomial_drop_dims(poly, isl_dim_in, 0, d); - return add_guarded_poly(bset, poly, data); - } - - if (data->test_monotonicity) - data->monotonicity = monotonicity(bset, poly, data); - else - data->monotonicity = 0; - if (data->monotonicity < -1) - goto error; - - data->poly = poly; - if (isl_basic_set_foreach_bound_pair(bset, isl_dim_set, d - 1, - &propagate_on_bound_pair, data) < 0) - goto error; - - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - data->monotonicity = save_monotonicity; - data->poly = save_poly; - - return 0; -error: - isl_basic_set_free(bset); - isl_qpolynomial_free(poly); - data->monotonicity = save_monotonicity; - data->poly = save_poly; - return -1; -} - -static int basic_guarded_poly_bound(__isl_take isl_basic_set *bset, void *user) -{ - struct range_data *data = (struct range_data *)user; - isl_ctx *ctx; - unsigned nparam = isl_basic_set_dim(bset, isl_dim_param); - unsigned dim = isl_basic_set_dim(bset, isl_dim_set); - int r; - - data->signs = NULL; - - ctx = isl_basic_set_get_ctx(bset); - data->signs = isl_alloc_array(ctx, int, - isl_basic_set_dim(bset, isl_dim_all)); - - if (isl_basic_set_dims_get_sign(bset, isl_dim_set, 0, dim, - data->signs + nparam) < 0) - goto error; - if (isl_basic_set_dims_get_sign(bset, isl_dim_param, 0, nparam, - data->signs) < 0) - goto error; - - r = propagate_on_domain(bset, isl_qpolynomial_copy(data->poly), data); - - free(data->signs); - - return r; -error: - free(data->signs); - isl_basic_set_free(bset); - return -1; -} - -static int qpolynomial_bound_on_domain_range(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct range_data *data) -{ - unsigned nparam = isl_basic_set_dim(bset, isl_dim_param); - unsigned nvar = isl_basic_set_dim(bset, isl_dim_set); - isl_set *set; - - if (!bset) - goto error; - - if (nvar == 0) - return add_guarded_poly(bset, poly, data); - - set = isl_set_from_basic_set(bset); - set = isl_set_split_dims(set, isl_dim_param, 0, nparam); - set = isl_set_split_dims(set, isl_dim_set, 0, nvar); - - data->poly = poly; - - data->test_monotonicity = 1; - if (isl_set_foreach_basic_set(set, &basic_guarded_poly_bound, data) < 0) - goto error; - - isl_set_free(set); - isl_qpolynomial_free(poly); - - return 0; -error: - isl_set_free(set); - isl_qpolynomial_free(poly); - return -1; -} - -int isl_qpolynomial_bound_on_domain_range(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct isl_bound *bound) -{ - struct range_data data; - int r; - - data.pwf = bound->pwf; - data.pwf_tight = bound->pwf_tight; - data.tight = bound->check_tight; - if (bound->type == isl_fold_min) - data.sign = -1; - else - data.sign = 1; - - r = qpolynomial_bound_on_domain_range(bset, poly, &data); - - bound->pwf = data.pwf; - bound->pwf_tight = data.pwf_tight; - - return r; -} diff --git a/cloog-0.17.0/isl/isl_range.h b/cloog-0.17.0/isl/isl_range.h deleted file mode 100644 index c097079..0000000 --- a/cloog-0.17.0/isl/isl_range.h +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int isl_qpolynomial_bound_on_domain_range(__isl_take isl_basic_set *bset, - __isl_take isl_qpolynomial *poly, struct isl_bound *bound); -__isl_give isl_qpolynomial *isl_qpolynomial_terms_of_sign( - __isl_keep isl_qpolynomial *poly, int *signs, int sign); diff --git a/cloog-0.17.0/isl/isl_reordering.c b/cloog-0.17.0/isl/isl_reordering.c deleted file mode 100644 index d99d7ac..0000000 --- a/cloog-0.17.0/isl/isl_reordering.c +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include - -__isl_give isl_reordering *isl_reordering_alloc(isl_ctx *ctx, int len) -{ - isl_reordering *exp; - - exp = isl_alloc(ctx, struct isl_reordering, - sizeof(struct isl_reordering) + (len - 1) * sizeof(int)); - if (!exp) - return NULL; - - exp->ref = 1; - exp->len = len; - exp->dim = NULL; - - return exp; -} - -__isl_give isl_reordering *isl_reordering_copy(__isl_keep isl_reordering *exp) -{ - if (!exp) - return NULL; - - exp->ref++; - return exp; -} - -__isl_give isl_reordering *isl_reordering_dup(__isl_keep isl_reordering *r) -{ - int i; - isl_reordering *dup; - - if (!r) - return NULL; - - dup = isl_reordering_alloc(r->dim->ctx, r->len); - if (!dup) - return NULL; - - dup->dim = isl_space_copy(r->dim); - if (!dup->dim) - return isl_reordering_free(dup); - for (i = 0; i < dup->len; ++i) - dup->pos[i] = r->pos[i]; - - return dup; -} - -__isl_give isl_reordering *isl_reordering_cow(__isl_take isl_reordering *r) -{ - if (!r) - return NULL; - - if (r->ref == 1) - return r; - r->ref--; - return isl_reordering_dup(r); -} - -void *isl_reordering_free(__isl_take isl_reordering *exp) -{ - if (!exp) - return NULL; - - if (--exp->ref > 0) - return NULL; - - isl_space_free(exp->dim); - free(exp); - return NULL; -} - -/* Construct a reordering that maps the parameters of "alignee" - * to the corresponding parameters in a new dimension specification - * that has the parameters of "aligner" first, followed by - * any remaining parameters of "alignee" that do not occur in "aligner". - */ -__isl_give isl_reordering *isl_parameter_alignment_reordering( - __isl_keep isl_space *alignee, __isl_keep isl_space *aligner) -{ - int i, j; - isl_reordering *exp; - - if (!alignee || !aligner) - return NULL; - - exp = isl_reordering_alloc(alignee->ctx, alignee->nparam); - if (!exp) - return NULL; - - exp->dim = isl_space_copy(aligner); - - for (i = 0; i < alignee->nparam; ++i) { - isl_id *id_i; - id_i = isl_space_get_dim_id(alignee, isl_dim_param, i); - if (!id_i) - isl_die(alignee->ctx, isl_error_invalid, - "cannot align unnamed parameters", goto error); - for (j = 0; j < aligner->nparam; ++j) { - isl_id *id_j; - id_j = isl_space_get_dim_id(aligner, isl_dim_param, j); - isl_id_free(id_j); - if (id_i == id_j) - break; - } - if (j < aligner->nparam) { - exp->pos[i] = j; - isl_id_free(id_i); - } else { - int pos; - pos = isl_space_dim(exp->dim, isl_dim_param); - exp->dim = isl_space_add_dims(exp->dim, isl_dim_param, 1); - exp->dim = isl_space_set_dim_id(exp->dim, - isl_dim_param, pos, id_i); - exp->pos[i] = pos; - } - } - - return exp; -error: - isl_reordering_free(exp); - return NULL; -} - -__isl_give isl_reordering *isl_reordering_extend(__isl_take isl_reordering *exp, - unsigned extra) -{ - int i; - isl_reordering *res; - int offset; - - if (!exp) - return NULL; - if (extra == 0) - return exp; - - offset = isl_space_dim(exp->dim, isl_dim_all) - exp->len; - res = isl_reordering_alloc(exp->dim->ctx, exp->len + extra); - if (!res) - goto error; - res->dim = isl_space_copy(exp->dim); - for (i = 0; i < exp->len; ++i) - res->pos[i] = exp->pos[i]; - for (i = exp->len; i < res->len; ++i) - res->pos[i] = offset + i; - - isl_reordering_free(exp); - - return res; -error: - isl_reordering_free(exp); - return NULL; -} - -__isl_give isl_reordering *isl_reordering_extend_space( - __isl_take isl_reordering *exp, __isl_take isl_space *dim) -{ - isl_reordering *res; - - if (!exp || !dim) - goto error; - - res = isl_reordering_extend(isl_reordering_copy(exp), - isl_space_dim(dim, isl_dim_all) - exp->len); - res = isl_reordering_cow(res); - if (!res) - goto error; - isl_space_free(res->dim); - res->dim = isl_space_replace(dim, isl_dim_param, exp->dim); - - isl_reordering_free(exp); - - return res; -error: - isl_reordering_free(exp); - isl_space_free(dim); - return NULL; -} - -void isl_reordering_dump(__isl_keep isl_reordering *exp) -{ - int i; - - for (i = 0; i < exp->len; ++i) - fprintf(stderr, "%d -> %d; ", i, exp->pos[i]); - fprintf(stderr, "\n"); -} diff --git a/cloog-0.17.0/isl/isl_reordering.h b/cloog-0.17.0/isl/isl_reordering.h deleted file mode 100644 index ac5b6fa..0000000 --- a/cloog-0.17.0/isl/isl_reordering.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef ISL_REORDERING_H -#define ISL_REORDERING_H - -#include - -/* pos maps original dimensions to new dimensions. - * The final dimension is given by dim. - * The number of dimensions (i.e., the range of values) in the result - * may be larger than the number of dimensions in the input. - * In particular, the possible values of the entries in pos ranges from 0 to - * the total dimension of dim - 1, unless isl_reordering_extend - * has been called. - */ -struct isl_reordering { - int ref; - isl_space *dim; - unsigned len; - int pos[1]; -}; -typedef struct isl_reordering isl_reordering; - -__isl_give isl_reordering *isl_parameter_alignment_reordering( - __isl_keep isl_space *alignee, __isl_keep isl_space *aligner); -__isl_give isl_reordering *isl_reordering_copy(__isl_keep isl_reordering *exp); -void *isl_reordering_free(__isl_take isl_reordering *exp); -__isl_give isl_reordering *isl_reordering_extend_space( - __isl_take isl_reordering *exp, __isl_take isl_space *dim); -__isl_give isl_reordering *isl_reordering_extend(__isl_take isl_reordering *exp, - unsigned extra); - -#endif diff --git a/cloog-0.17.0/isl/isl_sample.c b/cloog-0.17.0/isl/isl_sample.c deleted file mode 100644 index ec63745..0000000 --- a/cloog-0.17.0/isl/isl_sample.c +++ /dev/null @@ -1,1358 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include "isl_sample.h" -#include "isl_sample_piplib.h" -#include -#include -#include -#include "isl_equalities.h" -#include "isl_tab.h" -#include "isl_basis_reduction.h" -#include -#include -#include - -static struct isl_vec *empty_sample(struct isl_basic_set *bset) -{ - struct isl_vec *vec; - - vec = isl_vec_alloc(bset->ctx, 0); - isl_basic_set_free(bset); - return vec; -} - -/* Construct a zero sample of the same dimension as bset. - * As a special case, if bset is zero-dimensional, this - * function creates a zero-dimensional sample point. - */ -static struct isl_vec *zero_sample(struct isl_basic_set *bset) -{ - unsigned dim; - struct isl_vec *sample; - - dim = isl_basic_set_total_dim(bset); - sample = isl_vec_alloc(bset->ctx, 1 + dim); - if (sample) { - isl_int_set_si(sample->el[0], 1); - isl_seq_clr(sample->el + 1, dim); - } - isl_basic_set_free(bset); - return sample; -} - -static struct isl_vec *interval_sample(struct isl_basic_set *bset) -{ - int i; - isl_int t; - struct isl_vec *sample; - - bset = isl_basic_set_simplify(bset); - if (!bset) - return NULL; - if (isl_basic_set_plain_is_empty(bset)) - return empty_sample(bset); - if (bset->n_eq == 0 && bset->n_ineq == 0) - return zero_sample(bset); - - sample = isl_vec_alloc(bset->ctx, 2); - if (!sample) - goto error; - if (!bset) - return NULL; - isl_int_set_si(sample->block.data[0], 1); - - if (bset->n_eq > 0) { - isl_assert(bset->ctx, bset->n_eq == 1, goto error); - isl_assert(bset->ctx, bset->n_ineq == 0, goto error); - if (isl_int_is_one(bset->eq[0][1])) - isl_int_neg(sample->el[1], bset->eq[0][0]); - else { - isl_assert(bset->ctx, isl_int_is_negone(bset->eq[0][1]), - goto error); - isl_int_set(sample->el[1], bset->eq[0][0]); - } - isl_basic_set_free(bset); - return sample; - } - - isl_int_init(t); - if (isl_int_is_one(bset->ineq[0][1])) - isl_int_neg(sample->block.data[1], bset->ineq[0][0]); - else - isl_int_set(sample->block.data[1], bset->ineq[0][0]); - for (i = 1; i < bset->n_ineq; ++i) { - isl_seq_inner_product(sample->block.data, - bset->ineq[i], 2, &t); - if (isl_int_is_neg(t)) - break; - } - isl_int_clear(t); - if (i < bset->n_ineq) { - isl_vec_free(sample); - return empty_sample(bset); - } - - isl_basic_set_free(bset); - return sample; -error: - isl_basic_set_free(bset); - isl_vec_free(sample); - return NULL; -} - -static struct isl_mat *independent_bounds(struct isl_basic_set *bset) -{ - int i, j, n; - struct isl_mat *dirs = NULL; - struct isl_mat *bounds = NULL; - unsigned dim; - - if (!bset) - return NULL; - - dim = isl_basic_set_n_dim(bset); - bounds = isl_mat_alloc(bset->ctx, 1+dim, 1+dim); - if (!bounds) - return NULL; - - isl_int_set_si(bounds->row[0][0], 1); - isl_seq_clr(bounds->row[0]+1, dim); - bounds->n_row = 1; - - if (bset->n_ineq == 0) - return bounds; - - dirs = isl_mat_alloc(bset->ctx, dim, dim); - if (!dirs) { - isl_mat_free(bounds); - return NULL; - } - isl_seq_cpy(dirs->row[0], bset->ineq[0]+1, dirs->n_col); - isl_seq_cpy(bounds->row[1], bset->ineq[0], bounds->n_col); - for (j = 1, n = 1; n < dim && j < bset->n_ineq; ++j) { - int pos; - - isl_seq_cpy(dirs->row[n], bset->ineq[j]+1, dirs->n_col); - - pos = isl_seq_first_non_zero(dirs->row[n], dirs->n_col); - if (pos < 0) - continue; - for (i = 0; i < n; ++i) { - int pos_i; - pos_i = isl_seq_first_non_zero(dirs->row[i], dirs->n_col); - if (pos_i < pos) - continue; - if (pos_i > pos) - break; - isl_seq_elim(dirs->row[n], dirs->row[i], pos, - dirs->n_col, NULL); - pos = isl_seq_first_non_zero(dirs->row[n], dirs->n_col); - if (pos < 0) - break; - } - if (pos < 0) - continue; - if (i < n) { - int k; - isl_int *t = dirs->row[n]; - for (k = n; k > i; --k) - dirs->row[k] = dirs->row[k-1]; - dirs->row[i] = t; - } - ++n; - isl_seq_cpy(bounds->row[n], bset->ineq[j], bounds->n_col); - } - isl_mat_free(dirs); - bounds->n_row = 1+n; - return bounds; -} - -static void swap_inequality(struct isl_basic_set *bset, int a, int b) -{ - isl_int *t = bset->ineq[a]; - bset->ineq[a] = bset->ineq[b]; - bset->ineq[b] = t; -} - -/* Skew into positive orthant and project out lineality space. - * - * We perform a unimodular transformation that turns a selected - * maximal set of linearly independent bounds into constraints - * on the first dimensions that impose that these first dimensions - * are non-negative. In particular, the constraint matrix is lower - * triangular with positive entries on the diagonal and negative - * entries below. - * If "bset" has a lineality space then these constraints (and therefore - * all constraints in bset) only involve the first dimensions. - * The remaining dimensions then do not appear in any constraints and - * we can select any value for them, say zero. We therefore project - * out this final dimensions and plug in the value zero later. This - * is accomplished by simply dropping the final columns of - * the unimodular transformation. - */ -static struct isl_basic_set *isl_basic_set_skew_to_positive_orthant( - struct isl_basic_set *bset, struct isl_mat **T) -{ - struct isl_mat *U = NULL; - struct isl_mat *bounds = NULL; - int i, j; - unsigned old_dim, new_dim; - - *T = NULL; - if (!bset) - return NULL; - - isl_assert(bset->ctx, isl_basic_set_n_param(bset) == 0, goto error); - isl_assert(bset->ctx, bset->n_div == 0, goto error); - isl_assert(bset->ctx, bset->n_eq == 0, goto error); - - old_dim = isl_basic_set_n_dim(bset); - /* Try to move (multiples of) unit rows up. */ - for (i = 0, j = 0; i < bset->n_ineq; ++i) { - int pos = isl_seq_first_non_zero(bset->ineq[i]+1, old_dim); - if (pos < 0) - continue; - if (isl_seq_first_non_zero(bset->ineq[i]+1+pos+1, - old_dim-pos-1) >= 0) - continue; - if (i != j) - swap_inequality(bset, i, j); - ++j; - } - bounds = independent_bounds(bset); - if (!bounds) - goto error; - new_dim = bounds->n_row - 1; - bounds = isl_mat_left_hermite(bounds, 1, &U, NULL); - if (!bounds) - goto error; - U = isl_mat_drop_cols(U, 1 + new_dim, old_dim - new_dim); - bset = isl_basic_set_preimage(bset, isl_mat_copy(U)); - if (!bset) - goto error; - *T = U; - isl_mat_free(bounds); - return bset; -error: - isl_mat_free(bounds); - isl_mat_free(U); - isl_basic_set_free(bset); - return NULL; -} - -/* Find a sample integer point, if any, in bset, which is known - * to have equalities. If bset contains no integer points, then - * return a zero-length vector. - * We simply remove the known equalities, compute a sample - * in the resulting bset, using the specified recurse function, - * and then transform the sample back to the original space. - */ -static struct isl_vec *sample_eq(struct isl_basic_set *bset, - struct isl_vec *(*recurse)(struct isl_basic_set *)) -{ - struct isl_mat *T; - struct isl_vec *sample; - - if (!bset) - return NULL; - - bset = isl_basic_set_remove_equalities(bset, &T, NULL); - sample = recurse(bset); - if (!sample || sample->size == 0) - isl_mat_free(T); - else - sample = isl_mat_vec_product(T, sample); - return sample; -} - -/* Return a matrix containing the equalities of the tableau - * in constraint form. The tableau is assumed to have - * an associated bset that has been kept up-to-date. - */ -static struct isl_mat *tab_equalities(struct isl_tab *tab) -{ - int i, j; - int n_eq; - struct isl_mat *eq; - struct isl_basic_set *bset; - - if (!tab) - return NULL; - - bset = isl_tab_peek_bset(tab); - isl_assert(tab->mat->ctx, bset, return NULL); - - n_eq = tab->n_var - tab->n_col + tab->n_dead; - if (tab->empty || n_eq == 0) - return isl_mat_alloc(tab->mat->ctx, 0, tab->n_var); - if (n_eq == tab->n_var) - return isl_mat_identity(tab->mat->ctx, tab->n_var); - - eq = isl_mat_alloc(tab->mat->ctx, n_eq, tab->n_var); - if (!eq) - return NULL; - for (i = 0, j = 0; i < tab->n_con; ++i) { - if (tab->con[i].is_row) - continue; - if (tab->con[i].index >= 0 && tab->con[i].index >= tab->n_dead) - continue; - if (i < bset->n_eq) - isl_seq_cpy(eq->row[j], bset->eq[i] + 1, tab->n_var); - else - isl_seq_cpy(eq->row[j], - bset->ineq[i - bset->n_eq] + 1, tab->n_var); - ++j; - } - isl_assert(bset->ctx, j == n_eq, goto error); - return eq; -error: - isl_mat_free(eq); - return NULL; -} - -/* Compute and return an initial basis for the bounded tableau "tab". - * - * If the tableau is either full-dimensional or zero-dimensional, - * the we simply return an identity matrix. - * Otherwise, we construct a basis whose first directions correspond - * to equalities. - */ -static struct isl_mat *initial_basis(struct isl_tab *tab) -{ - int n_eq; - struct isl_mat *eq; - struct isl_mat *Q; - - tab->n_unbounded = 0; - tab->n_zero = n_eq = tab->n_var - tab->n_col + tab->n_dead; - if (tab->empty || n_eq == 0 || n_eq == tab->n_var) - return isl_mat_identity(tab->mat->ctx, 1 + tab->n_var); - - eq = tab_equalities(tab); - eq = isl_mat_left_hermite(eq, 0, NULL, &Q); - if (!eq) - return NULL; - isl_mat_free(eq); - - Q = isl_mat_lin_to_aff(Q); - return Q; -} - -/* Given a tableau representing a set, find and return - * an integer point in the set, if there is any. - * - * We perform a depth first search - * for an integer point, by scanning all possible values in the range - * attained by a basis vector, where an initial basis may have been set - * by the calling function. Otherwise an initial basis that exploits - * the equalities in the tableau is created. - * tab->n_zero is currently ignored and is clobbered by this function. - * - * The tableau is allowed to have unbounded direction, but then - * the calling function needs to set an initial basis, with the - * unbounded directions last and with tab->n_unbounded set - * to the number of unbounded directions. - * Furthermore, the calling functions needs to add shifted copies - * of all constraints involving unbounded directions to ensure - * that any feasible rational value in these directions can be rounded - * up to yield a feasible integer value. - * In particular, let B define the given basis x' = B x - * and let T be the inverse of B, i.e., X = T x'. - * Let a x + c >= 0 be a constraint of the set represented by the tableau, - * or a T x' + c >= 0 in terms of the given basis. Assume that - * the bounded directions have an integer value, then we can safely - * round up the values for the unbounded directions if we make sure - * that x' not only satisfies the original constraint, but also - * the constraint "a T x' + c + s >= 0" with s the sum of all - * negative values in the last n_unbounded entries of "a T". - * The calling function therefore needs to add the constraint - * a x + c + s >= 0. The current function then scans the first - * directions for an integer value and once those have been found, - * it can compute "T ceil(B x)" to yield an integer point in the set. - * Note that during the search, the first rows of B may be changed - * by a basis reduction, but the last n_unbounded rows of B remain - * unaltered and are also not mixed into the first rows. - * - * The search is implemented iteratively. "level" identifies the current - * basis vector. "init" is true if we want the first value at the current - * level and false if we want the next value. - * - * The initial basis is the identity matrix. If the range in some direction - * contains more than one integer value, we perform basis reduction based - * on the value of ctx->opt->gbr - * - ISL_GBR_NEVER: never perform basis reduction - * - ISL_GBR_ONCE: only perform basis reduction the first - * time such a range is encountered - * - ISL_GBR_ALWAYS: always perform basis reduction when - * such a range is encountered - * - * When ctx->opt->gbr is set to ISL_GBR_ALWAYS, then we allow the basis - * reduction computation to return early. That is, as soon as it - * finds a reasonable first direction. - */ -struct isl_vec *isl_tab_sample(struct isl_tab *tab) -{ - unsigned dim; - unsigned gbr; - struct isl_ctx *ctx; - struct isl_vec *sample; - struct isl_vec *min; - struct isl_vec *max; - enum isl_lp_result res; - int level; - int init; - int reduced; - struct isl_tab_undo **snap; - - if (!tab) - return NULL; - if (tab->empty) - return isl_vec_alloc(tab->mat->ctx, 0); - - if (!tab->basis) - tab->basis = initial_basis(tab); - if (!tab->basis) - return NULL; - isl_assert(tab->mat->ctx, tab->basis->n_row == tab->n_var + 1, - return NULL); - isl_assert(tab->mat->ctx, tab->basis->n_col == tab->n_var + 1, - return NULL); - - ctx = tab->mat->ctx; - dim = tab->n_var; - gbr = ctx->opt->gbr; - - if (tab->n_unbounded == tab->n_var) { - sample = isl_tab_get_sample_value(tab); - sample = isl_mat_vec_product(isl_mat_copy(tab->basis), sample); - sample = isl_vec_ceil(sample); - sample = isl_mat_vec_inverse_product(isl_mat_copy(tab->basis), - sample); - return sample; - } - - if (isl_tab_extend_cons(tab, dim + 1) < 0) - return NULL; - - min = isl_vec_alloc(ctx, dim); - max = isl_vec_alloc(ctx, dim); - snap = isl_alloc_array(ctx, struct isl_tab_undo *, dim); - - if (!min || !max || !snap) - goto error; - - level = 0; - init = 1; - reduced = 0; - - while (level >= 0) { - int empty = 0; - if (init) { - res = isl_tab_min(tab, tab->basis->row[1 + level], - ctx->one, &min->el[level], NULL, 0); - if (res == isl_lp_empty) - empty = 1; - isl_assert(ctx, res != isl_lp_unbounded, goto error); - if (res == isl_lp_error) - goto error; - if (!empty && isl_tab_sample_is_integer(tab)) - break; - isl_seq_neg(tab->basis->row[1 + level] + 1, - tab->basis->row[1 + level] + 1, dim); - res = isl_tab_min(tab, tab->basis->row[1 + level], - ctx->one, &max->el[level], NULL, 0); - isl_seq_neg(tab->basis->row[1 + level] + 1, - tab->basis->row[1 + level] + 1, dim); - isl_int_neg(max->el[level], max->el[level]); - if (res == isl_lp_empty) - empty = 1; - isl_assert(ctx, res != isl_lp_unbounded, goto error); - if (res == isl_lp_error) - goto error; - if (!empty && isl_tab_sample_is_integer(tab)) - break; - if (!empty && !reduced && - ctx->opt->gbr != ISL_GBR_NEVER && - isl_int_lt(min->el[level], max->el[level])) { - unsigned gbr_only_first; - if (ctx->opt->gbr == ISL_GBR_ONCE) - ctx->opt->gbr = ISL_GBR_NEVER; - tab->n_zero = level; - gbr_only_first = ctx->opt->gbr_only_first; - ctx->opt->gbr_only_first = - ctx->opt->gbr == ISL_GBR_ALWAYS; - tab = isl_tab_compute_reduced_basis(tab); - ctx->opt->gbr_only_first = gbr_only_first; - if (!tab || !tab->basis) - goto error; - reduced = 1; - continue; - } - reduced = 0; - snap[level] = isl_tab_snap(tab); - } else - isl_int_add_ui(min->el[level], min->el[level], 1); - - if (empty || isl_int_gt(min->el[level], max->el[level])) { - level--; - init = 0; - if (level >= 0) - if (isl_tab_rollback(tab, snap[level]) < 0) - goto error; - continue; - } - isl_int_neg(tab->basis->row[1 + level][0], min->el[level]); - if (isl_tab_add_valid_eq(tab, tab->basis->row[1 + level]) < 0) - goto error; - isl_int_set_si(tab->basis->row[1 + level][0], 0); - if (level + tab->n_unbounded < dim - 1) { - ++level; - init = 1; - continue; - } - break; - } - - if (level >= 0) { - sample = isl_tab_get_sample_value(tab); - if (!sample) - goto error; - if (tab->n_unbounded && !isl_int_is_one(sample->el[0])) { - sample = isl_mat_vec_product(isl_mat_copy(tab->basis), - sample); - sample = isl_vec_ceil(sample); - sample = isl_mat_vec_inverse_product( - isl_mat_copy(tab->basis), sample); - } - } else - sample = isl_vec_alloc(ctx, 0); - - ctx->opt->gbr = gbr; - isl_vec_free(min); - isl_vec_free(max); - free(snap); - return sample; -error: - ctx->opt->gbr = gbr; - isl_vec_free(min); - isl_vec_free(max); - free(snap); - return NULL; -} - -static struct isl_vec *sample_bounded(struct isl_basic_set *bset); - -/* Compute a sample point of the given basic set, based on the given, - * non-trivial factorization. - */ -static __isl_give isl_vec *factored_sample(__isl_take isl_basic_set *bset, - __isl_take isl_factorizer *f) -{ - int i, n; - isl_vec *sample = NULL; - isl_ctx *ctx; - unsigned nparam; - unsigned nvar; - - ctx = isl_basic_set_get_ctx(bset); - if (!ctx) - goto error; - - nparam = isl_basic_set_dim(bset, isl_dim_param); - nvar = isl_basic_set_dim(bset, isl_dim_set); - - sample = isl_vec_alloc(ctx, 1 + isl_basic_set_total_dim(bset)); - if (!sample) - goto error; - isl_int_set_si(sample->el[0], 1); - - bset = isl_morph_basic_set(isl_morph_copy(f->morph), bset); - - for (i = 0, n = 0; i < f->n_group; ++i) { - isl_basic_set *bset_i; - isl_vec *sample_i; - - bset_i = isl_basic_set_copy(bset); - bset_i = isl_basic_set_drop_constraints_involving(bset_i, - nparam + n + f->len[i], nvar - n - f->len[i]); - bset_i = isl_basic_set_drop_constraints_involving(bset_i, - nparam, n); - bset_i = isl_basic_set_drop(bset_i, isl_dim_set, - n + f->len[i], nvar - n - f->len[i]); - bset_i = isl_basic_set_drop(bset_i, isl_dim_set, 0, n); - - sample_i = sample_bounded(bset_i); - if (!sample_i) - goto error; - if (sample_i->size == 0) { - isl_basic_set_free(bset); - isl_factorizer_free(f); - isl_vec_free(sample); - return sample_i; - } - isl_seq_cpy(sample->el + 1 + nparam + n, - sample_i->el + 1, f->len[i]); - isl_vec_free(sample_i); - - n += f->len[i]; - } - - f->morph = isl_morph_inverse(f->morph); - sample = isl_morph_vec(isl_morph_copy(f->morph), sample); - - isl_basic_set_free(bset); - isl_factorizer_free(f); - return sample; -error: - isl_basic_set_free(bset); - isl_factorizer_free(f); - isl_vec_free(sample); - return NULL; -} - -/* Given a basic set that is known to be bounded, find and return - * an integer point in the basic set, if there is any. - * - * After handling some trivial cases, we construct a tableau - * and then use isl_tab_sample to find a sample, passing it - * the identity matrix as initial basis. - */ -static struct isl_vec *sample_bounded(struct isl_basic_set *bset) -{ - unsigned dim; - struct isl_ctx *ctx; - struct isl_vec *sample; - struct isl_tab *tab = NULL; - isl_factorizer *f; - - if (!bset) - return NULL; - - if (isl_basic_set_plain_is_empty(bset)) - return empty_sample(bset); - - dim = isl_basic_set_total_dim(bset); - if (dim == 0) - return zero_sample(bset); - if (dim == 1) - return interval_sample(bset); - if (bset->n_eq > 0) - return sample_eq(bset, sample_bounded); - - f = isl_basic_set_factorizer(bset); - if (!f) - goto error; - if (f->n_group != 0) - return factored_sample(bset, f); - isl_factorizer_free(f); - - ctx = bset->ctx; - - tab = isl_tab_from_basic_set(bset); - if (tab && tab->empty) { - isl_tab_free(tab); - ISL_F_SET(bset, ISL_BASIC_SET_EMPTY); - sample = isl_vec_alloc(bset->ctx, 0); - isl_basic_set_free(bset); - return sample; - } - - if (isl_tab_track_bset(tab, isl_basic_set_copy(bset)) < 0) - goto error; - if (!ISL_F_ISSET(bset, ISL_BASIC_SET_NO_IMPLICIT)) - if (isl_tab_detect_implicit_equalities(tab) < 0) - goto error; - - sample = isl_tab_sample(tab); - if (!sample) - goto error; - - if (sample->size > 0) { - isl_vec_free(bset->sample); - bset->sample = isl_vec_copy(sample); - } - - isl_basic_set_free(bset); - isl_tab_free(tab); - return sample; -error: - isl_basic_set_free(bset); - isl_tab_free(tab); - return NULL; -} - -/* Given a basic set "bset" and a value "sample" for the first coordinates - * of bset, plug in these values and drop the corresponding coordinates. - * - * We do this by computing the preimage of the transformation - * - * [ 1 0 ] - * x = [ s 0 ] x' - * [ 0 I ] - * - * where [1 s] is the sample value and I is the identity matrix of the - * appropriate dimension. - */ -static struct isl_basic_set *plug_in(struct isl_basic_set *bset, - struct isl_vec *sample) -{ - int i; - unsigned total; - struct isl_mat *T; - - if (!bset || !sample) - goto error; - - total = isl_basic_set_total_dim(bset); - T = isl_mat_alloc(bset->ctx, 1 + total, 1 + total - (sample->size - 1)); - if (!T) - goto error; - - for (i = 0; i < sample->size; ++i) { - isl_int_set(T->row[i][0], sample->el[i]); - isl_seq_clr(T->row[i] + 1, T->n_col - 1); - } - for (i = 0; i < T->n_col - 1; ++i) { - isl_seq_clr(T->row[sample->size + i], T->n_col); - isl_int_set_si(T->row[sample->size + i][1 + i], 1); - } - isl_vec_free(sample); - - bset = isl_basic_set_preimage(bset, T); - return bset; -error: - isl_basic_set_free(bset); - isl_vec_free(sample); - return NULL; -} - -/* Given a basic set "bset", return any (possibly non-integer) point - * in the basic set. - */ -static struct isl_vec *rational_sample(struct isl_basic_set *bset) -{ - struct isl_tab *tab; - struct isl_vec *sample; - - if (!bset) - return NULL; - - tab = isl_tab_from_basic_set(bset); - sample = isl_tab_get_sample_value(tab); - isl_tab_free(tab); - - isl_basic_set_free(bset); - - return sample; -} - -/* Given a linear cone "cone" and a rational point "vec", - * construct a polyhedron with shifted copies of the constraints in "cone", - * i.e., a polyhedron with "cone" as its recession cone, such that each - * point x in this polyhedron is such that the unit box positioned at x - * lies entirely inside the affine cone 'vec + cone'. - * Any rational point in this polyhedron may therefore be rounded up - * to yield an integer point that lies inside said affine cone. - * - * Denote the constraints of cone by " >= 0" and the rational - * point "vec" by v/d. - * Let b_i = . Then the affine cone 'vec + cone' is given - * by - b/d >= 0. - * The polyhedron - ceil{b/d} >= 0 is a subset of this affine cone. - * We prefer this polyhedron over the actual affine cone because it doesn't - * require a scaling of the constraints. - * If each of the vertices of the unit cube positioned at x lies inside - * this polyhedron, then the whole unit cube at x lies inside the affine cone. - * We therefore impose that x' = x + \sum e_i, for any selection of unit - * vectors lies inside the polyhedron, i.e., - * - * - ceil{b/d} = + sum a_i - ceil{b/d} >= 0 - * - * The most stringent of these constraints is the one that selects - * all negative a_i, so the polyhedron we are looking for has constraints - * - * + sum_{a_i < 0} a_i - ceil{b/d} >= 0 - * - * Note that if cone were known to have only non-negative rays - * (which can be accomplished by a unimodular transformation), - * then we would only have to check the points x' = x + e_i - * and we only have to add the smallest negative a_i (if any) - * instead of the sum of all negative a_i. - */ -static struct isl_basic_set *shift_cone(struct isl_basic_set *cone, - struct isl_vec *vec) -{ - int i, j, k; - unsigned total; - - struct isl_basic_set *shift = NULL; - - if (!cone || !vec) - goto error; - - isl_assert(cone->ctx, cone->n_eq == 0, goto error); - - total = isl_basic_set_total_dim(cone); - - shift = isl_basic_set_alloc_space(isl_basic_set_get_space(cone), - 0, 0, cone->n_ineq); - - for (i = 0; i < cone->n_ineq; ++i) { - k = isl_basic_set_alloc_inequality(shift); - if (k < 0) - goto error; - isl_seq_cpy(shift->ineq[k] + 1, cone->ineq[i] + 1, total); - isl_seq_inner_product(shift->ineq[k] + 1, vec->el + 1, total, - &shift->ineq[k][0]); - isl_int_cdiv_q(shift->ineq[k][0], - shift->ineq[k][0], vec->el[0]); - isl_int_neg(shift->ineq[k][0], shift->ineq[k][0]); - for (j = 0; j < total; ++j) { - if (isl_int_is_nonneg(shift->ineq[k][1 + j])) - continue; - isl_int_add(shift->ineq[k][0], - shift->ineq[k][0], shift->ineq[k][1 + j]); - } - } - - isl_basic_set_free(cone); - isl_vec_free(vec); - - return isl_basic_set_finalize(shift); -error: - isl_basic_set_free(shift); - isl_basic_set_free(cone); - isl_vec_free(vec); - return NULL; -} - -/* Given a rational point vec in a (transformed) basic set, - * such that cone is the recession cone of the original basic set, - * "round up" the rational point to an integer point. - * - * We first check if the rational point just happens to be integer. - * If not, we transform the cone in the same way as the basic set, - * pick a point x in this cone shifted to the rational point such that - * the whole unit cube at x is also inside this affine cone. - * Then we simply round up the coordinates of x and return the - * resulting integer point. - */ -static struct isl_vec *round_up_in_cone(struct isl_vec *vec, - struct isl_basic_set *cone, struct isl_mat *U) -{ - unsigned total; - - if (!vec || !cone || !U) - goto error; - - isl_assert(vec->ctx, vec->size != 0, goto error); - if (isl_int_is_one(vec->el[0])) { - isl_mat_free(U); - isl_basic_set_free(cone); - return vec; - } - - total = isl_basic_set_total_dim(cone); - cone = isl_basic_set_preimage(cone, U); - cone = isl_basic_set_remove_dims(cone, isl_dim_set, - 0, total - (vec->size - 1)); - - cone = shift_cone(cone, vec); - - vec = rational_sample(cone); - vec = isl_vec_ceil(vec); - return vec; -error: - isl_mat_free(U); - isl_vec_free(vec); - isl_basic_set_free(cone); - return NULL; -} - -/* Concatenate two integer vectors, i.e., two vectors with denominator - * (stored in element 0) equal to 1. - */ -static struct isl_vec *vec_concat(struct isl_vec *vec1, struct isl_vec *vec2) -{ - struct isl_vec *vec; - - if (!vec1 || !vec2) - goto error; - isl_assert(vec1->ctx, vec1->size > 0, goto error); - isl_assert(vec2->ctx, vec2->size > 0, goto error); - isl_assert(vec1->ctx, isl_int_is_one(vec1->el[0]), goto error); - isl_assert(vec2->ctx, isl_int_is_one(vec2->el[0]), goto error); - - vec = isl_vec_alloc(vec1->ctx, vec1->size + vec2->size - 1); - if (!vec) - goto error; - - isl_seq_cpy(vec->el, vec1->el, vec1->size); - isl_seq_cpy(vec->el + vec1->size, vec2->el + 1, vec2->size - 1); - - isl_vec_free(vec1); - isl_vec_free(vec2); - - return vec; -error: - isl_vec_free(vec1); - isl_vec_free(vec2); - return NULL; -} - -/* Give a basic set "bset" with recession cone "cone", compute and - * return an integer point in bset, if any. - * - * If the recession cone is full-dimensional, then we know that - * bset contains an infinite number of integer points and it is - * fairly easy to pick one of them. - * If the recession cone is not full-dimensional, then we first - * transform bset such that the bounded directions appear as - * the first dimensions of the transformed basic set. - * We do this by using a unimodular transformation that transforms - * the equalities in the recession cone to equalities on the first - * dimensions. - * - * The transformed set is then projected onto its bounded dimensions. - * Note that to compute this projection, we can simply drop all constraints - * involving any of the unbounded dimensions since these constraints - * cannot be combined to produce a constraint on the bounded dimensions. - * To see this, assume that there is such a combination of constraints - * that produces a constraint on the bounded dimensions. This means - * that some combination of the unbounded dimensions has both an upper - * bound and a lower bound in terms of the bounded dimensions, but then - * this combination would be a bounded direction too and would have been - * transformed into a bounded dimensions. - * - * We then compute a sample value in the bounded dimensions. - * If no such value can be found, then the original set did not contain - * any integer points and we are done. - * Otherwise, we plug in the value we found in the bounded dimensions, - * project out these bounded dimensions and end up with a set with - * a full-dimensional recession cone. - * A sample point in this set is computed by "rounding up" any - * rational point in the set. - * - * The sample points in the bounded and unbounded dimensions are - * then combined into a single sample point and transformed back - * to the original space. - */ -__isl_give isl_vec *isl_basic_set_sample_with_cone( - __isl_take isl_basic_set *bset, __isl_take isl_basic_set *cone) -{ - unsigned total; - unsigned cone_dim; - struct isl_mat *M, *U; - struct isl_vec *sample; - struct isl_vec *cone_sample; - struct isl_ctx *ctx; - struct isl_basic_set *bounded; - - if (!bset || !cone) - goto error; - - ctx = bset->ctx; - total = isl_basic_set_total_dim(cone); - cone_dim = total - cone->n_eq; - - M = isl_mat_sub_alloc6(bset->ctx, cone->eq, 0, cone->n_eq, 1, total); - M = isl_mat_left_hermite(M, 0, &U, NULL); - if (!M) - goto error; - isl_mat_free(M); - - U = isl_mat_lin_to_aff(U); - bset = isl_basic_set_preimage(bset, isl_mat_copy(U)); - - bounded = isl_basic_set_copy(bset); - bounded = isl_basic_set_drop_constraints_involving(bounded, - total - cone_dim, cone_dim); - bounded = isl_basic_set_drop_dims(bounded, total - cone_dim, cone_dim); - sample = sample_bounded(bounded); - if (!sample || sample->size == 0) { - isl_basic_set_free(bset); - isl_basic_set_free(cone); - isl_mat_free(U); - return sample; - } - bset = plug_in(bset, isl_vec_copy(sample)); - cone_sample = rational_sample(bset); - cone_sample = round_up_in_cone(cone_sample, cone, isl_mat_copy(U)); - sample = vec_concat(sample, cone_sample); - sample = isl_mat_vec_product(U, sample); - return sample; -error: - isl_basic_set_free(cone); - isl_basic_set_free(bset); - return NULL; -} - -static void vec_sum_of_neg(struct isl_vec *v, isl_int *s) -{ - int i; - - isl_int_set_si(*s, 0); - - for (i = 0; i < v->size; ++i) - if (isl_int_is_neg(v->el[i])) - isl_int_add(*s, *s, v->el[i]); -} - -/* Given a tableau "tab", a tableau "tab_cone" that corresponds - * to the recession cone and the inverse of a new basis U = inv(B), - * with the unbounded directions in B last, - * add constraints to "tab" that ensure any rational value - * in the unbounded directions can be rounded up to an integer value. - * - * The new basis is given by x' = B x, i.e., x = U x'. - * For any rational value of the last tab->n_unbounded coordinates - * in the update tableau, the value that is obtained by rounding - * up this value should be contained in the original tableau. - * For any constraint "a x + c >= 0", we therefore need to add - * a constraint "a x + c + s >= 0", with s the sum of all negative - * entries in the last elements of "a U". - * - * Since we are not interested in the first entries of any of the "a U", - * we first drop the columns of U that correpond to bounded directions. - */ -static int tab_shift_cone(struct isl_tab *tab, - struct isl_tab *tab_cone, struct isl_mat *U) -{ - int i; - isl_int v; - struct isl_basic_set *bset = NULL; - - if (tab && tab->n_unbounded == 0) { - isl_mat_free(U); - return 0; - } - isl_int_init(v); - if (!tab || !tab_cone || !U) - goto error; - bset = isl_tab_peek_bset(tab_cone); - U = isl_mat_drop_cols(U, 0, tab->n_var - tab->n_unbounded); - for (i = 0; i < bset->n_ineq; ++i) { - int ok; - struct isl_vec *row = NULL; - if (isl_tab_is_equality(tab_cone, tab_cone->n_eq + i)) - continue; - row = isl_vec_alloc(bset->ctx, tab_cone->n_var); - if (!row) - goto error; - isl_seq_cpy(row->el, bset->ineq[i] + 1, tab_cone->n_var); - row = isl_vec_mat_product(row, isl_mat_copy(U)); - if (!row) - goto error; - vec_sum_of_neg(row, &v); - isl_vec_free(row); - if (isl_int_is_zero(v)) - continue; - tab = isl_tab_extend(tab, 1); - isl_int_add(bset->ineq[i][0], bset->ineq[i][0], v); - ok = isl_tab_add_ineq(tab, bset->ineq[i]) >= 0; - isl_int_sub(bset->ineq[i][0], bset->ineq[i][0], v); - if (!ok) - goto error; - } - - isl_mat_free(U); - isl_int_clear(v); - return 0; -error: - isl_mat_free(U); - isl_int_clear(v); - return -1; -} - -/* Compute and return an initial basis for the possibly - * unbounded tableau "tab". "tab_cone" is a tableau - * for the corresponding recession cone. - * Additionally, add constraints to "tab" that ensure - * that any rational value for the unbounded directions - * can be rounded up to an integer value. - * - * If the tableau is bounded, i.e., if the recession cone - * is zero-dimensional, then we just use inital_basis. - * Otherwise, we construct a basis whose first directions - * correspond to equalities, followed by bounded directions, - * i.e., equalities in the recession cone. - * The remaining directions are then unbounded. - */ -int isl_tab_set_initial_basis_with_cone(struct isl_tab *tab, - struct isl_tab *tab_cone) -{ - struct isl_mat *eq; - struct isl_mat *cone_eq; - struct isl_mat *U, *Q; - - if (!tab || !tab_cone) - return -1; - - if (tab_cone->n_col == tab_cone->n_dead) { - tab->basis = initial_basis(tab); - return tab->basis ? 0 : -1; - } - - eq = tab_equalities(tab); - if (!eq) - return -1; - tab->n_zero = eq->n_row; - cone_eq = tab_equalities(tab_cone); - eq = isl_mat_concat(eq, cone_eq); - if (!eq) - return -1; - tab->n_unbounded = tab->n_var - (eq->n_row - tab->n_zero); - eq = isl_mat_left_hermite(eq, 0, &U, &Q); - if (!eq) - return -1; - isl_mat_free(eq); - tab->basis = isl_mat_lin_to_aff(Q); - if (tab_shift_cone(tab, tab_cone, U) < 0) - return -1; - if (!tab->basis) - return -1; - return 0; -} - -/* Compute and return a sample point in bset using generalized basis - * reduction. We first check if the input set has a non-trivial - * recession cone. If so, we perform some extra preprocessing in - * sample_with_cone. Otherwise, we directly perform generalized basis - * reduction. - */ -static struct isl_vec *gbr_sample(struct isl_basic_set *bset) -{ - unsigned dim; - struct isl_basic_set *cone; - - dim = isl_basic_set_total_dim(bset); - - cone = isl_basic_set_recession_cone(isl_basic_set_copy(bset)); - if (!cone) - goto error; - - if (cone->n_eq < dim) - return isl_basic_set_sample_with_cone(bset, cone); - - isl_basic_set_free(cone); - return sample_bounded(bset); -error: - isl_basic_set_free(bset); - return NULL; -} - -static struct isl_vec *pip_sample(struct isl_basic_set *bset) -{ - struct isl_mat *T; - struct isl_ctx *ctx; - struct isl_vec *sample; - - bset = isl_basic_set_skew_to_positive_orthant(bset, &T); - if (!bset) - return NULL; - - ctx = bset->ctx; - sample = isl_pip_basic_set_sample(bset); - - if (sample && sample->size != 0) - sample = isl_mat_vec_product(T, sample); - else - isl_mat_free(T); - - return sample; -} - -static struct isl_vec *basic_set_sample(struct isl_basic_set *bset, int bounded) -{ - struct isl_ctx *ctx; - unsigned dim; - if (!bset) - return NULL; - - ctx = bset->ctx; - if (isl_basic_set_plain_is_empty(bset)) - return empty_sample(bset); - - dim = isl_basic_set_n_dim(bset); - isl_assert(ctx, isl_basic_set_n_param(bset) == 0, goto error); - isl_assert(ctx, bset->n_div == 0, goto error); - - if (bset->sample && bset->sample->size == 1 + dim) { - int contains = isl_basic_set_contains(bset, bset->sample); - if (contains < 0) - goto error; - if (contains) { - struct isl_vec *sample = isl_vec_copy(bset->sample); - isl_basic_set_free(bset); - return sample; - } - } - isl_vec_free(bset->sample); - bset->sample = NULL; - - if (bset->n_eq > 0) - return sample_eq(bset, bounded ? isl_basic_set_sample_bounded - : isl_basic_set_sample_vec); - if (dim == 0) - return zero_sample(bset); - if (dim == 1) - return interval_sample(bset); - - switch (bset->ctx->opt->ilp_solver) { - case ISL_ILP_PIP: - return pip_sample(bset); - case ISL_ILP_GBR: - return bounded ? sample_bounded(bset) : gbr_sample(bset); - } - isl_assert(bset->ctx, 0, ); -error: - isl_basic_set_free(bset); - return NULL; -} - -__isl_give isl_vec *isl_basic_set_sample_vec(__isl_take isl_basic_set *bset) -{ - return basic_set_sample(bset, 0); -} - -/* Compute an integer sample in "bset", where the caller guarantees - * that "bset" is bounded. - */ -struct isl_vec *isl_basic_set_sample_bounded(struct isl_basic_set *bset) -{ - return basic_set_sample(bset, 1); -} - -__isl_give isl_basic_set *isl_basic_set_from_vec(__isl_take isl_vec *vec) -{ - int i; - int k; - struct isl_basic_set *bset = NULL; - struct isl_ctx *ctx; - unsigned dim; - - if (!vec) - return NULL; - ctx = vec->ctx; - isl_assert(ctx, vec->size != 0, goto error); - - bset = isl_basic_set_alloc(ctx, 0, vec->size - 1, 0, vec->size - 1, 0); - if (!bset) - goto error; - dim = isl_basic_set_n_dim(bset); - for (i = dim - 1; i >= 0; --i) { - k = isl_basic_set_alloc_equality(bset); - if (k < 0) - goto error; - isl_seq_clr(bset->eq[k], 1 + dim); - isl_int_neg(bset->eq[k][0], vec->el[1 + i]); - isl_int_set(bset->eq[k][1 + i], vec->el[0]); - } - bset->sample = vec; - - return bset; -error: - isl_basic_set_free(bset); - isl_vec_free(vec); - return NULL; -} - -__isl_give isl_basic_map *isl_basic_map_sample(__isl_take isl_basic_map *bmap) -{ - struct isl_basic_set *bset; - struct isl_vec *sample_vec; - - bset = isl_basic_map_underlying_set(isl_basic_map_copy(bmap)); - sample_vec = isl_basic_set_sample_vec(bset); - if (!sample_vec) - goto error; - if (sample_vec->size == 0) { - struct isl_basic_map *sample; - sample = isl_basic_map_empty_like(bmap); - isl_vec_free(sample_vec); - isl_basic_map_free(bmap); - return sample; - } - bset = isl_basic_set_from_vec(sample_vec); - return isl_basic_map_overlying_set(bset, bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -__isl_give isl_basic_map *isl_map_sample(__isl_take isl_map *map) -{ - int i; - isl_basic_map *sample = NULL; - - if (!map) - goto error; - - for (i = 0; i < map->n; ++i) { - sample = isl_basic_map_sample(isl_basic_map_copy(map->p[i])); - if (!sample) - goto error; - if (!ISL_F_ISSET(sample, ISL_BASIC_MAP_EMPTY)) - break; - isl_basic_map_free(sample); - } - if (i == map->n) - sample = isl_basic_map_empty_like_map(map); - isl_map_free(map); - return sample; -error: - isl_map_free(map); - return NULL; -} - -__isl_give isl_basic_set *isl_set_sample(__isl_take isl_set *set) -{ - return (isl_basic_set *) isl_map_sample((isl_map *)set); -} - -__isl_give isl_point *isl_basic_set_sample_point(__isl_take isl_basic_set *bset) -{ - isl_vec *vec; - isl_space *dim; - - dim = isl_basic_set_get_space(bset); - bset = isl_basic_set_underlying_set(bset); - vec = isl_basic_set_sample_vec(bset); - - return isl_point_alloc(dim, vec); -} - -__isl_give isl_point *isl_set_sample_point(__isl_take isl_set *set) -{ - int i; - isl_point *pnt; - - if (!set) - return NULL; - - for (i = 0; i < set->n; ++i) { - pnt = isl_basic_set_sample_point(isl_basic_set_copy(set->p[i])); - if (!pnt) - goto error; - if (!isl_point_is_void(pnt)) - break; - isl_point_free(pnt); - } - if (i == set->n) - pnt = isl_point_void(isl_set_get_space(set)); - - isl_set_free(set); - return pnt; -error: - isl_set_free(set); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_sample.h b/cloog-0.17.0/isl/isl_sample.h deleted file mode 100644 index b657e6e..0000000 --- a/cloog-0.17.0/isl/isl_sample.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_SAMPLE_H -#define ISL_SAMPLE - -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -__isl_give isl_vec *isl_basic_set_sample_vec(__isl_take isl_basic_set *bset); -struct isl_vec *isl_basic_set_sample_bounded(struct isl_basic_set *bset); -__isl_give isl_vec *isl_basic_set_sample_with_cone( - __isl_take isl_basic_set *bset, __isl_take isl_basic_set *cone); - -__isl_give isl_basic_set *isl_basic_set_from_vec(__isl_take isl_vec *vec); - -int isl_tab_set_initial_basis_with_cone(struct isl_tab *tab, - struct isl_tab *tab_cone); -struct isl_vec *isl_tab_sample(struct isl_tab *tab); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/isl_sample_no_piplib.c b/cloog-0.17.0/isl/isl_sample_no_piplib.c deleted file mode 100644 index e2c7ea4..0000000 --- a/cloog-0.17.0/isl/isl_sample_no_piplib.c +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include "isl_sample_piplib.h" - -struct isl_vec *isl_pip_basic_set_sample(struct isl_basic_set *bset) -{ - isl_basic_set_free(bset); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_sample_piplib.c b/cloog-0.17.0/isl/isl_sample_piplib.c deleted file mode 100644 index 3755008..0000000 --- a/cloog-0.17.0/isl/isl_sample_piplib.c +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include "isl_piplib.h" -#include "isl_sample_piplib.h" - -struct isl_vec *isl_pip_basic_set_sample(struct isl_basic_set *bset) -{ - PipOptions *options = NULL; - PipMatrix *domain = NULL; - PipQuast *sol = NULL; - struct isl_vec *vec = NULL; - unsigned dim; - struct isl_ctx *ctx; - - if (!bset) - goto error; - ctx = isl_basic_set_get_ctx(bset); - isl_assert(ctx, isl_basic_set_n_param(bset) == 0, goto error); - isl_assert(ctx, isl_basic_set_dim(bset, isl_dim_div) == 0, goto error); - dim = isl_basic_set_n_dim(bset); - domain = isl_basic_map_to_pip((struct isl_basic_map *)bset, 0, 0, 0); - if (!domain) - goto error; - - options = pip_options_init(); - if (!options) - goto error; - sol = pip_solve(domain, NULL, -1, options); - if (!sol) - goto error; - if (!sol->list) - vec = isl_vec_alloc(ctx, 0); - else { - PipList *l; - int i; - vec = isl_vec_alloc(ctx, 1 + dim); - if (!vec) - goto error; - isl_int_set_si(vec->block.data[0], 1); - for (i = 0, l = sol->list; l && i < dim; ++i, l = l->next) { - isl_seq_cpy_from_pip(&vec->block.data[1+i], - &l->vector->the_vector[0], 1); - isl_assert(ctx, !entier_zero_p(l->vector->the_deno[0]), - goto error); - } - isl_assert(ctx, i == dim, goto error); - } - - pip_quast_free(sol); - pip_options_free(options); - pip_matrix_free(domain); - - isl_basic_set_free(bset); - return vec; -error: - isl_vec_free(vec); - isl_basic_set_free(bset); - if (sol) - pip_quast_free(sol); - if (domain) - pip_matrix_free(domain); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_sample_piplib.h b/cloog-0.17.0/isl/isl_sample_piplib.h deleted file mode 100644 index 52f2156..0000000 --- a/cloog-0.17.0/isl/isl_sample_piplib.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_SAMPLE_PIP_H -#define ISL_SAMPLE_PIP - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_vec *isl_pip_basic_set_sample(struct isl_basic_set *bset); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/cloog-0.17.0/isl/isl_scan.c b/cloog-0.17.0/isl/isl_scan.c deleted file mode 100644 index 64654be..0000000 --- a/cloog-0.17.0/isl/isl_scan.c +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include "isl_basis_reduction.h" -#include "isl_scan.h" -#include -#include "isl_tab.h" - -struct isl_counter { - struct isl_scan_callback callback; - isl_int count; - isl_int max; -}; - -static int increment_counter(struct isl_scan_callback *cb, - __isl_take isl_vec *sample) -{ - struct isl_counter *cnt = (struct isl_counter *)cb; - - isl_int_add_ui(cnt->count, cnt->count, 1); - - isl_vec_free(sample); - - if (isl_int_is_zero(cnt->max) || isl_int_lt(cnt->count, cnt->max)) - return 0; - return -1; -} - -static int increment_range(struct isl_scan_callback *cb, isl_int min, isl_int max) -{ - struct isl_counter *cnt = (struct isl_counter *)cb; - - isl_int_add(cnt->count, cnt->count, max); - isl_int_sub(cnt->count, cnt->count, min); - isl_int_add_ui(cnt->count, cnt->count, 1); - - if (isl_int_is_zero(cnt->max) || isl_int_lt(cnt->count, cnt->max)) - return 0; - isl_int_set(cnt->count, cnt->max); - return -1; -} - -/* Call callback->add with the current sample value of the tableau "tab". - */ -static int add_solution(struct isl_tab *tab, struct isl_scan_callback *callback) -{ - struct isl_vec *sample; - - if (!tab) - return -1; - sample = isl_tab_get_sample_value(tab); - if (!sample) - return -1; - - return callback->add(callback, sample); -} - -static int scan_0D(struct isl_basic_set *bset, - struct isl_scan_callback *callback) -{ - struct isl_vec *sample; - - sample = isl_vec_alloc(bset->ctx, 1); - isl_basic_set_free(bset); - - if (!sample) - return -1; - - isl_int_set_si(sample->el[0], 1); - - return callback->add(callback, sample); -} - -/* Look for all integer points in "bset", which is assumed to be bounded, - * and call callback->add on each of them. - * - * We first compute a reduced basis for the set and then scan - * the set in the directions of this basis. - * We basically perform a depth first search, where in each level i - * we compute the range in the i-th basis vector direction, given - * fixed values in the directions of the previous basis vector. - * We then add an equality to the tableau fixing the value in the - * direction of the current basis vector to each value in the range - * in turn and then continue to the next level. - * - * The search is implemented iteratively. "level" identifies the current - * basis vector. "init" is true if we want the first value at the current - * level and false if we want the next value. - * Solutions are added in the leaves of the search tree, i.e., after - * we have fixed a value in each direction of the basis. - */ -int isl_basic_set_scan(struct isl_basic_set *bset, - struct isl_scan_callback *callback) -{ - unsigned dim; - struct isl_mat *B = NULL; - struct isl_tab *tab = NULL; - struct isl_vec *min; - struct isl_vec *max; - struct isl_tab_undo **snap; - int level; - int init; - enum isl_lp_result res; - - if (!bset) - return -1; - - dim = isl_basic_set_total_dim(bset); - if (dim == 0) - return scan_0D(bset, callback); - - min = isl_vec_alloc(bset->ctx, dim); - max = isl_vec_alloc(bset->ctx, dim); - snap = isl_alloc_array(bset->ctx, struct isl_tab_undo *, dim); - - if (!min || !max || !snap) - goto error; - - tab = isl_tab_from_basic_set(bset); - if (!tab) - goto error; - if (isl_tab_extend_cons(tab, dim + 1) < 0) - goto error; - - tab->basis = isl_mat_identity(bset->ctx, 1 + dim); - if (1) - tab = isl_tab_compute_reduced_basis(tab); - if (!tab) - goto error; - B = isl_mat_copy(tab->basis); - if (!B) - goto error; - - level = 0; - init = 1; - - while (level >= 0) { - int empty = 0; - if (init) { - res = isl_tab_min(tab, B->row[1 + level], - bset->ctx->one, &min->el[level], NULL, 0); - if (res == isl_lp_empty) - empty = 1; - if (res == isl_lp_error || res == isl_lp_unbounded) - goto error; - isl_seq_neg(B->row[1 + level] + 1, - B->row[1 + level] + 1, dim); - res = isl_tab_min(tab, B->row[1 + level], - bset->ctx->one, &max->el[level], NULL, 0); - isl_seq_neg(B->row[1 + level] + 1, - B->row[1 + level] + 1, dim); - isl_int_neg(max->el[level], max->el[level]); - if (res == isl_lp_empty) - empty = 1; - if (res == isl_lp_error || res == isl_lp_unbounded) - goto error; - snap[level] = isl_tab_snap(tab); - } else - isl_int_add_ui(min->el[level], min->el[level], 1); - - if (empty || isl_int_gt(min->el[level], max->el[level])) { - level--; - init = 0; - if (level >= 0) - if (isl_tab_rollback(tab, snap[level]) < 0) - goto error; - continue; - } - if (level == dim - 1 && callback->add == increment_counter) { - if (increment_range(callback, - min->el[level], max->el[level])) - goto error; - level--; - init = 0; - if (level >= 0) - if (isl_tab_rollback(tab, snap[level]) < 0) - goto error; - continue; - } - isl_int_neg(B->row[1 + level][0], min->el[level]); - if (isl_tab_add_valid_eq(tab, B->row[1 + level]) < 0) - goto error; - isl_int_set_si(B->row[1 + level][0], 0); - if (level < dim - 1) { - ++level; - init = 1; - continue; - } - if (add_solution(tab, callback) < 0) - goto error; - init = 0; - if (isl_tab_rollback(tab, snap[level]) < 0) - goto error; - } - - isl_tab_free(tab); - free(snap); - isl_vec_free(min); - isl_vec_free(max); - isl_basic_set_free(bset); - isl_mat_free(B); - return 0; -error: - isl_tab_free(tab); - free(snap); - isl_vec_free(min); - isl_vec_free(max); - isl_basic_set_free(bset); - isl_mat_free(B); - return -1; -} - -int isl_set_scan(__isl_take isl_set *set, struct isl_scan_callback *callback) -{ - int i; - - if (!set || !callback) - goto error; - - set = isl_set_cow(set); - set = isl_set_make_disjoint(set); - set = isl_set_compute_divs(set); - if (!set) - goto error; - - for (i = 0; i < set->n; ++i) - if (isl_basic_set_scan(isl_basic_set_copy(set->p[i]), - callback) < 0) - goto error; - - isl_set_free(set); - return 0; -error: - isl_set_free(set); - return -1; -} - -int isl_basic_set_count_upto(__isl_keep isl_basic_set *bset, - isl_int max, isl_int *count) -{ - struct isl_counter cnt = { { &increment_counter } }; - - if (!bset) - return -1; - - isl_int_init(cnt.count); - isl_int_init(cnt.max); - - isl_int_set_si(cnt.count, 0); - isl_int_set(cnt.max, max); - if (isl_basic_set_scan(isl_basic_set_copy(bset), &cnt.callback) < 0 && - isl_int_lt(cnt.count, cnt.max)) - goto error; - - isl_int_set(*count, cnt.count); - isl_int_clear(cnt.max); - isl_int_clear(cnt.count); - - return 0; -error: - isl_int_clear(cnt.count); - return -1; -} - -int isl_set_count_upto(__isl_keep isl_set *set, isl_int max, isl_int *count) -{ - struct isl_counter cnt = { { &increment_counter } }; - - if (!set) - return -1; - - isl_int_init(cnt.count); - isl_int_init(cnt.max); - - isl_int_set_si(cnt.count, 0); - isl_int_set(cnt.max, max); - if (isl_set_scan(isl_set_copy(set), &cnt.callback) < 0 && - isl_int_lt(cnt.count, cnt.max)) - goto error; - - isl_int_set(*count, cnt.count); - isl_int_clear(cnt.max); - isl_int_clear(cnt.count); - - return 0; -error: - isl_int_clear(cnt.count); - return -1; -} - -int isl_set_count(__isl_keep isl_set *set, isl_int *count) -{ - if (!set) - return -1; - return isl_set_count_upto(set, set->ctx->zero, count); -} diff --git a/cloog-0.17.0/isl/isl_scan.h b/cloog-0.17.0/isl/isl_scan.h deleted file mode 100644 index 8e5ad74..0000000 --- a/cloog-0.17.0/isl/isl_scan.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_SCAN_H -#define ISL_SCAN_H - -#include -#include - -struct isl_scan_callback { - int (*add)(struct isl_scan_callback *cb, __isl_take isl_vec *sample); -}; - -int isl_basic_set_scan(struct isl_basic_set *bset, - struct isl_scan_callback *callback); -int isl_set_scan(__isl_take isl_set *set, struct isl_scan_callback *callback); - -#endif diff --git a/cloog-0.17.0/isl/isl_schedule.c b/cloog-0.17.0/isl/isl_schedule.c deleted file mode 100644 index cc7adc8..0000000 --- a/cloog-0.17.0/isl/isl_schedule.c +++ /dev/null @@ -1,2842 +0,0 @@ -/* - * Copyright 2011 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* - * The scheduling algorithm implemented in this file was inspired by - * Bondhugula et al., "Automatic Transformations for Communication-Minimized - * Parallelization and Locality Optimization in the Polyhedral Model". - */ - - -/* Internal information about a node that is used during the construction - * of a schedule. - * dim represents the space in which the domain lives - * sched is a matrix representation of the schedule being constructed - * for this node - * sched_map is an isl_map representation of the same (partial) schedule - * sched_map may be NULL - * rank is the number of linearly independent rows in the linear part - * of sched - * the columns of cmap represent a change of basis for the schedule - * coefficients; the first rank columns span the linear part of - * the schedule rows - * start is the first variable in the LP problem in the sequences that - * represents the schedule coefficients of this node - * nvar is the dimension of the domain - * nparam is the number of parameters or 0 if we are not constructing - * a parametric schedule - * - * scc is the index of SCC (or WCC) this node belongs to - * - * band contains the band index for each of the rows of the schedule. - * band_id is used to differentiate between separate bands at the same - * level within the same parent band, i.e., bands that are separated - * by the parent band or bands that are independent of each other. - * zero contains a boolean for each of the rows of the schedule, - * indicating whether the corresponding scheduling dimension results - * in zero dependence distances within its band and with respect - * to the proximity edges. - * - * index, min_index and on_stack are used during the SCC detection - * index represents the order in which nodes are visited. - * min_index is the index of the root of a (sub)component. - * on_stack indicates whether the node is currently on the stack. - */ -struct isl_sched_node { - isl_space *dim; - isl_mat *sched; - isl_map *sched_map; - int rank; - isl_mat *cmap; - int start; - int nvar; - int nparam; - - int scc; - - int *band; - int *band_id; - int *zero; - - /* scc detection */ - int index; - int min_index; - int on_stack; -}; - -static int node_has_dim(const void *entry, const void *val) -{ - struct isl_sched_node *node = (struct isl_sched_node *)entry; - isl_space *dim = (isl_space *)val; - - return isl_space_is_equal(node->dim, dim); -} - -/* An edge in the dependence graph. An edge may be used to - * ensure validity of the generated schedule, to minimize the dependence - * distance or both - * - * map is the dependence relation - * src is the source node - * dst is the sink node - * validity is set if the edge is used to ensure correctness - * proximity is set if the edge is used to minimize dependence distances - * - * For validity edges, start and end mark the sequence of inequality - * constraints in the LP problem that encode the validity constraint - * corresponding to this edge. - */ -struct isl_sched_edge { - isl_map *map; - - struct isl_sched_node *src; - struct isl_sched_node *dst; - - int validity; - int proximity; - - int start; - int end; -}; - -/* Internal information about the dependence graph used during - * the construction of the schedule. - * - * intra_hmap is a cache, mapping dependence relations to their dual, - * for dependences from a node to itself - * inter_hmap is a cache, mapping dependence relations to their dual, - * for dependences between distinct nodes - * - * n is the number of nodes - * node is the list of nodes - * maxvar is the maximal number of variables over all nodes - * n_row is the current (maximal) number of linearly independent - * rows in the node schedules - * n_total_row is the current number of rows in the node schedules - * n_band is the current number of completed bands - * band_start is the starting row in the node schedules of the current band - * root is set if this graph is the original dependence graph, - * without any splitting - * - * sorted contains a list of node indices sorted according to the - * SCC to which a node belongs - * - * n_edge is the number of edges - * edge is the list of edges - * edge_table contains pointers into the edge array, hashed on the source - * and sink spaces; the table only contains edges that represent - * validity constraints (and that may or may not also represent proximity - * constraints) - * - * node_table contains pointers into the node array, hashed on the space - * - * region contains a list of variable sequences that should be non-trivial - * - * lp contains the (I)LP problem used to obtain new schedule rows - * - * src_scc and dst_scc are the source and sink SCCs of an edge with - * conflicting constraints - * - * scc, sp, index and stack are used during the detection of SCCs - * scc is the number of the next SCC - * stack contains the nodes on the path from the root to the current node - * sp is the stack pointer - * index is the index of the last node visited - */ -struct isl_sched_graph { - isl_hmap_map_basic_set *intra_hmap; - isl_hmap_map_basic_set *inter_hmap; - - struct isl_sched_node *node; - int n; - int maxvar; - int n_row; - - int *sorted; - - int n_band; - int n_total_row; - int band_start; - - int root; - - struct isl_sched_edge *edge; - int n_edge; - struct isl_hash_table *edge_table; - - struct isl_hash_table *node_table; - struct isl_region *region; - - isl_basic_set *lp; - - int src_scc; - int dst_scc; - - /* scc detection */ - int scc; - int sp; - int index; - int *stack; -}; - -/* Initialize node_table based on the list of nodes. - */ -static int graph_init_table(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i; - - graph->node_table = isl_hash_table_alloc(ctx, graph->n); - if (!graph->node_table) - return -1; - - for (i = 0; i < graph->n; ++i) { - struct isl_hash_table_entry *entry; - uint32_t hash; - - hash = isl_space_get_hash(graph->node[i].dim); - entry = isl_hash_table_find(ctx, graph->node_table, hash, - &node_has_dim, - graph->node[i].dim, 1); - if (!entry) - return -1; - entry->data = &graph->node[i]; - } - - return 0; -} - -/* Return a pointer to the node that lives within the given space, - * or NULL if there is no such node. - */ -static struct isl_sched_node *graph_find_node(isl_ctx *ctx, - struct isl_sched_graph *graph, __isl_keep isl_space *dim) -{ - struct isl_hash_table_entry *entry; - uint32_t hash; - - hash = isl_space_get_hash(dim); - entry = isl_hash_table_find(ctx, graph->node_table, hash, - &node_has_dim, dim, 0); - - return entry ? entry->data : NULL; -} - -static int edge_has_src_and_dst(const void *entry, const void *val) -{ - const struct isl_sched_edge *edge = entry; - const struct isl_sched_edge *temp = val; - - return edge->src == temp->src && edge->dst == temp->dst; -} - -/* Initialize edge_table based on the list of edges. - * Only edges with validity set are added to the table. - */ -static int graph_init_edge_table(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i; - - graph->edge_table = isl_hash_table_alloc(ctx, graph->n_edge); - if (!graph->edge_table) - return -1; - - for (i = 0; i < graph->n_edge; ++i) { - struct isl_hash_table_entry *entry; - uint32_t hash; - - if (!graph->edge[i].validity) - continue; - - hash = isl_hash_init(); - hash = isl_hash_builtin(hash, graph->edge[i].src); - hash = isl_hash_builtin(hash, graph->edge[i].dst); - entry = isl_hash_table_find(ctx, graph->edge_table, hash, - &edge_has_src_and_dst, - &graph->edge[i], 1); - if (!entry) - return -1; - entry->data = &graph->edge[i]; - } - - return 0; -} - -/* Check whether the dependence graph has a (validity) edge - * between the given two nodes. - */ -static int graph_has_edge(struct isl_sched_graph *graph, - struct isl_sched_node *src, struct isl_sched_node *dst) -{ - isl_ctx *ctx = isl_space_get_ctx(src->dim); - struct isl_hash_table_entry *entry; - uint32_t hash; - struct isl_sched_edge temp = { .src = src, .dst = dst }; - struct isl_sched_edge *edge; - int empty; - - hash = isl_hash_init(); - hash = isl_hash_builtin(hash, temp.src); - hash = isl_hash_builtin(hash, temp.dst); - entry = isl_hash_table_find(ctx, graph->edge_table, hash, - &edge_has_src_and_dst, &temp, 0); - if (!entry) - return 0; - - edge = entry->data; - empty = isl_map_plain_is_empty(edge->map); - if (empty < 0) - return -1; - - return !empty; -} - -static int graph_alloc(isl_ctx *ctx, struct isl_sched_graph *graph, - int n_node, int n_edge) -{ - int i; - - graph->n = n_node; - graph->n_edge = n_edge; - graph->node = isl_calloc_array(ctx, struct isl_sched_node, graph->n); - graph->sorted = isl_calloc_array(ctx, int, graph->n); - graph->region = isl_alloc_array(ctx, struct isl_region, graph->n); - graph->stack = isl_alloc_array(ctx, int, graph->n); - graph->edge = isl_calloc_array(ctx, - struct isl_sched_edge, graph->n_edge); - - graph->intra_hmap = isl_hmap_map_basic_set_alloc(ctx, 2 * n_edge); - graph->inter_hmap = isl_hmap_map_basic_set_alloc(ctx, 2 * n_edge); - - if (!graph->node || !graph->region || !graph->stack || !graph->edge || - !graph->sorted) - return -1; - - for(i = 0; i < graph->n; ++i) - graph->sorted[i] = i; - - return 0; -} - -static void graph_free(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i; - - isl_hmap_map_basic_set_free(ctx, graph->intra_hmap); - isl_hmap_map_basic_set_free(ctx, graph->inter_hmap); - - for (i = 0; i < graph->n; ++i) { - isl_space_free(graph->node[i].dim); - isl_mat_free(graph->node[i].sched); - isl_map_free(graph->node[i].sched_map); - isl_mat_free(graph->node[i].cmap); - if (graph->root) { - free(graph->node[i].band); - free(graph->node[i].band_id); - free(graph->node[i].zero); - } - } - free(graph->node); - free(graph->sorted); - for (i = 0; i < graph->n_edge; ++i) - isl_map_free(graph->edge[i].map); - free(graph->edge); - free(graph->region); - free(graph->stack); - isl_hash_table_free(ctx, graph->edge_table); - isl_hash_table_free(ctx, graph->node_table); - isl_basic_set_free(graph->lp); -} - -/* Add a new node to the graph representing the given set. - */ -static int extract_node(__isl_take isl_set *set, void *user) -{ - int nvar, nparam; - isl_ctx *ctx; - isl_space *dim; - isl_mat *sched; - struct isl_sched_graph *graph = user; - int *band, *band_id, *zero; - - ctx = isl_set_get_ctx(set); - dim = isl_set_get_space(set); - isl_set_free(set); - nvar = isl_space_dim(dim, isl_dim_set); - nparam = isl_space_dim(dim, isl_dim_param); - if (!ctx->opt->schedule_parametric) - nparam = 0; - sched = isl_mat_alloc(ctx, 0, 1 + nparam + nvar); - graph->node[graph->n].dim = dim; - graph->node[graph->n].nvar = nvar; - graph->node[graph->n].nparam = nparam; - graph->node[graph->n].sched = sched; - graph->node[graph->n].sched_map = NULL; - band = isl_alloc_array(ctx, int, graph->n_edge + nvar); - graph->node[graph->n].band = band; - band_id = isl_calloc_array(ctx, int, graph->n_edge + nvar); - graph->node[graph->n].band_id = band_id; - zero = isl_calloc_array(ctx, int, graph->n_edge + nvar); - graph->node[graph->n].zero = zero; - graph->n++; - - if (!sched || !band || !band_id || !zero) - return -1; - - return 0; -} - -/* Add a new edge to the graph based on the given map. - * Edges are first extracted from the validity dependences, - * from which the edge_table is constructed. - * Afterwards, the proximity dependences are added. If a proximity - * dependence relation happens to be identical to one of the - * validity dependence relations added before, then we don't create - * a new edge, but instead mark the original edge as also representing - * a proximity dependence. - */ -static int extract_edge(__isl_take isl_map *map, void *user) -{ - isl_ctx *ctx = isl_map_get_ctx(map); - struct isl_sched_graph *graph = user; - struct isl_sched_node *src, *dst; - isl_space *dim; - - dim = isl_space_domain(isl_map_get_space(map)); - src = graph_find_node(ctx, graph, dim); - isl_space_free(dim); - dim = isl_space_range(isl_map_get_space(map)); - dst = graph_find_node(ctx, graph, dim); - isl_space_free(dim); - - if (!src || !dst) { - isl_map_free(map); - return 0; - } - - graph->edge[graph->n_edge].src = src; - graph->edge[graph->n_edge].dst = dst; - graph->edge[graph->n_edge].map = map; - graph->edge[graph->n_edge].validity = !graph->edge_table; - graph->edge[graph->n_edge].proximity = !!graph->edge_table; - graph->n_edge++; - - if (graph->edge_table) { - uint32_t hash; - struct isl_hash_table_entry *entry; - struct isl_sched_edge *edge; - int is_equal; - - hash = isl_hash_init(); - hash = isl_hash_builtin(hash, src); - hash = isl_hash_builtin(hash, dst); - entry = isl_hash_table_find(ctx, graph->edge_table, hash, - &edge_has_src_and_dst, - &graph->edge[graph->n_edge - 1], 0); - if (!entry) - return 0; - edge = entry->data; - is_equal = isl_map_plain_is_equal(map, edge->map); - if (is_equal < 0) - return -1; - if (!is_equal) - return 0; - - graph->n_edge--; - edge->proximity = 1; - isl_map_free(map); - } - - return 0; -} - -/* Check whether there is a validity dependence from src to dst, - * forcing dst to follow src. - */ -static int node_follows(struct isl_sched_graph *graph, - struct isl_sched_node *dst, struct isl_sched_node *src) -{ - return graph_has_edge(graph, src, dst); -} - -/* Perform Tarjan's algorithm for computing the strongly connected components - * in the dependence graph (only validity edges). - * If directed is not set, we consider the graph to be undirected and - * we effectively compute the (weakly) connected components. - */ -static int detect_sccs_tarjan(struct isl_sched_graph *g, int i, int directed) -{ - int j; - - g->node[i].index = g->index; - g->node[i].min_index = g->index; - g->node[i].on_stack = 1; - g->index++; - g->stack[g->sp++] = i; - - for (j = g->n - 1; j >= 0; --j) { - int f; - - if (j == i) - continue; - if (g->node[j].index >= 0 && - (!g->node[j].on_stack || - g->node[j].index > g->node[i].min_index)) - continue; - - f = node_follows(g, &g->node[i], &g->node[j]); - if (f < 0) - return -1; - if (!f && !directed) { - f = node_follows(g, &g->node[j], &g->node[i]); - if (f < 0) - return -1; - } - if (!f) - continue; - if (g->node[j].index < 0) { - detect_sccs_tarjan(g, j, directed); - if (g->node[j].min_index < g->node[i].min_index) - g->node[i].min_index = g->node[j].min_index; - } else if (g->node[j].index < g->node[i].min_index) - g->node[i].min_index = g->node[j].index; - } - - if (g->node[i].index != g->node[i].min_index) - return 0; - - do { - j = g->stack[--g->sp]; - g->node[j].on_stack = 0; - g->node[j].scc = g->scc; - } while (j != i); - g->scc++; - - return 0; -} - -static int detect_ccs(struct isl_sched_graph *graph, int directed) -{ - int i; - - graph->index = 0; - graph->sp = 0; - graph->scc = 0; - for (i = graph->n - 1; i >= 0; --i) - graph->node[i].index = -1; - - for (i = graph->n - 1; i >= 0; --i) { - if (graph->node[i].index >= 0) - continue; - if (detect_sccs_tarjan(graph, i, directed) < 0) - return -1; - } - - return 0; -} - -/* Apply Tarjan's algorithm to detect the strongly connected components - * in the dependence graph. - */ -static int detect_sccs(struct isl_sched_graph *graph) -{ - return detect_ccs(graph, 1); -} - -/* Apply Tarjan's algorithm to detect the (weakly) connected components - * in the dependence graph. - */ -static int detect_wccs(struct isl_sched_graph *graph) -{ - return detect_ccs(graph, 0); -} - -static int cmp_scc(const void *a, const void *b, void *data) -{ - struct isl_sched_graph *graph = data; - const int *i1 = a; - const int *i2 = b; - - return graph->node[*i1].scc - graph->node[*i2].scc; -} - -/* Sort the elements of graph->sorted according to the corresponding SCCs. - */ -static void sort_sccs(struct isl_sched_graph *graph) -{ - isl_quicksort(graph->sorted, graph->n, sizeof(int), &cmp_scc, graph); -} - -/* Given a dependence relation R from a node to itself, - * construct the set of coefficients of valid constraints for elements - * in that dependence relation. - * In particular, the result contains tuples of coefficients - * c_0, c_n, c_x such that - * - * c_0 + c_n n + c_x y - c_x x >= 0 for each (x,y) in R - * - * or, equivalently, - * - * c_0 + c_n n + c_x d >= 0 for each d in delta R = { y - x | (x,y) in R } - * - * We choose here to compute the dual of delta R. - * Alternatively, we could have computed the dual of R, resulting - * in a set of tuples c_0, c_n, c_x, c_y, and then - * plugged in (c_0, c_n, c_x, -c_x). - */ -static __isl_give isl_basic_set *intra_coefficients( - struct isl_sched_graph *graph, __isl_take isl_map *map) -{ - isl_ctx *ctx = isl_map_get_ctx(map); - isl_set *delta; - isl_basic_set *coef; - - if (isl_hmap_map_basic_set_has(ctx, graph->intra_hmap, map)) - return isl_hmap_map_basic_set_get(ctx, graph->intra_hmap, map); - - delta = isl_set_remove_divs(isl_map_deltas(isl_map_copy(map))); - coef = isl_set_coefficients(delta); - isl_hmap_map_basic_set_set(ctx, graph->intra_hmap, map, - isl_basic_set_copy(coef)); - - return coef; -} - -/* Given a dependence relation R, * construct the set of coefficients - * of valid constraints for elements in that dependence relation. - * In particular, the result contains tuples of coefficients - * c_0, c_n, c_x, c_y such that - * - * c_0 + c_n n + c_x x + c_y y >= 0 for each (x,y) in R - * - */ -static __isl_give isl_basic_set *inter_coefficients( - struct isl_sched_graph *graph, __isl_take isl_map *map) -{ - isl_ctx *ctx = isl_map_get_ctx(map); - isl_set *set; - isl_basic_set *coef; - - if (isl_hmap_map_basic_set_has(ctx, graph->inter_hmap, map)) - return isl_hmap_map_basic_set_get(ctx, graph->inter_hmap, map); - - set = isl_map_wrap(isl_map_remove_divs(isl_map_copy(map))); - coef = isl_set_coefficients(set); - isl_hmap_map_basic_set_set(ctx, graph->inter_hmap, map, - isl_basic_set_copy(coef)); - - return coef; -} - -/* Add constraints to graph->lp that force validity for the given - * dependence from a node i to itself. - * That is, add constraints that enforce - * - * (c_i_0 + c_i_n n + c_i_x y) - (c_i_0 + c_i_n n + c_i_x x) - * = c_i_x (y - x) >= 0 - * - * for each (x,y) in R. - * We obtain general constraints on coefficients (c_0, c_n, c_x) - * of valid constraints for (y - x) and then plug in (0, 0, c_i_x^+ - c_i_x^-), - * where c_i_x = c_i_x^+ - c_i_x^-, with c_i_x^+ and c_i_x^- non-negative. - * In graph->lp, the c_i_x^- appear before their c_i_x^+ counterpart. - * - * Actually, we do not construct constraints for the c_i_x themselves, - * but for the coefficients of c_i_x written as a linear combination - * of the columns in node->cmap. - */ -static int add_intra_validity_constraints(struct isl_sched_graph *graph, - struct isl_sched_edge *edge) -{ - unsigned total; - isl_map *map = isl_map_copy(edge->map); - isl_ctx *ctx = isl_map_get_ctx(map); - isl_space *dim; - isl_dim_map *dim_map; - isl_basic_set *coef; - struct isl_sched_node *node = edge->src; - - coef = intra_coefficients(graph, map); - - dim = isl_space_domain(isl_space_unwrap(isl_basic_set_get_space(coef))); - - coef = isl_basic_set_transform_dims(coef, isl_dim_set, - isl_space_dim(dim, isl_dim_set), isl_mat_copy(node->cmap)); - - total = isl_basic_set_total_dim(graph->lp); - dim_map = isl_dim_map_alloc(ctx, total); - isl_dim_map_range(dim_map, node->start + 2 * node->nparam + 1, 2, - isl_space_dim(dim, isl_dim_set), 1, - node->nvar, -1); - isl_dim_map_range(dim_map, node->start + 2 * node->nparam + 2, 2, - isl_space_dim(dim, isl_dim_set), 1, - node->nvar, 1); - graph->lp = isl_basic_set_extend_constraints(graph->lp, - coef->n_eq, coef->n_ineq); - graph->lp = isl_basic_set_add_constraints_dim_map(graph->lp, - coef, dim_map); - isl_space_free(dim); - - return 0; -} - -/* Add constraints to graph->lp that force validity for the given - * dependence from node i to node j. - * That is, add constraints that enforce - * - * (c_j_0 + c_j_n n + c_j_x y) - (c_i_0 + c_i_n n + c_i_x x) >= 0 - * - * for each (x,y) in R. - * We obtain general constraints on coefficients (c_0, c_n, c_x, c_y) - * of valid constraints for R and then plug in - * (c_j_0 - c_i_0, c_j_n^+ - c_j_n^- - (c_i_n^+ - c_i_n^-), - * c_j_x^+ - c_j_x^- - (c_i_x^+ - c_i_x^-)), - * where c_* = c_*^+ - c_*^-, with c_*^+ and c_*^- non-negative. - * In graph->lp, the c_*^- appear before their c_*^+ counterpart. - * - * Actually, we do not construct constraints for the c_*_x themselves, - * but for the coefficients of c_*_x written as a linear combination - * of the columns in node->cmap. - */ -static int add_inter_validity_constraints(struct isl_sched_graph *graph, - struct isl_sched_edge *edge) -{ - unsigned total; - isl_map *map = isl_map_copy(edge->map); - isl_ctx *ctx = isl_map_get_ctx(map); - isl_space *dim; - isl_dim_map *dim_map; - isl_basic_set *coef; - struct isl_sched_node *src = edge->src; - struct isl_sched_node *dst = edge->dst; - - coef = inter_coefficients(graph, map); - - dim = isl_space_domain(isl_space_unwrap(isl_basic_set_get_space(coef))); - - coef = isl_basic_set_transform_dims(coef, isl_dim_set, - isl_space_dim(dim, isl_dim_set), isl_mat_copy(src->cmap)); - coef = isl_basic_set_transform_dims(coef, isl_dim_set, - isl_space_dim(dim, isl_dim_set) + src->nvar, - isl_mat_copy(dst->cmap)); - - total = isl_basic_set_total_dim(graph->lp); - dim_map = isl_dim_map_alloc(ctx, total); - - isl_dim_map_range(dim_map, dst->start, 0, 0, 0, 1, 1); - isl_dim_map_range(dim_map, dst->start + 1, 2, 1, 1, dst->nparam, -1); - isl_dim_map_range(dim_map, dst->start + 2, 2, 1, 1, dst->nparam, 1); - isl_dim_map_range(dim_map, dst->start + 2 * dst->nparam + 1, 2, - isl_space_dim(dim, isl_dim_set) + src->nvar, 1, - dst->nvar, -1); - isl_dim_map_range(dim_map, dst->start + 2 * dst->nparam + 2, 2, - isl_space_dim(dim, isl_dim_set) + src->nvar, 1, - dst->nvar, 1); - - isl_dim_map_range(dim_map, src->start, 0, 0, 0, 1, -1); - isl_dim_map_range(dim_map, src->start + 1, 2, 1, 1, src->nparam, 1); - isl_dim_map_range(dim_map, src->start + 2, 2, 1, 1, src->nparam, -1); - isl_dim_map_range(dim_map, src->start + 2 * src->nparam + 1, 2, - isl_space_dim(dim, isl_dim_set), 1, - src->nvar, 1); - isl_dim_map_range(dim_map, src->start + 2 * src->nparam + 2, 2, - isl_space_dim(dim, isl_dim_set), 1, - src->nvar, -1); - - edge->start = graph->lp->n_ineq; - graph->lp = isl_basic_set_extend_constraints(graph->lp, - coef->n_eq, coef->n_ineq); - graph->lp = isl_basic_set_add_constraints_dim_map(graph->lp, - coef, dim_map); - isl_space_free(dim); - edge->end = graph->lp->n_ineq; - - return 0; -} - -/* Add constraints to graph->lp that bound the dependence distance for the given - * dependence from a node i to itself. - * If s = 1, we add the constraint - * - * c_i_x (y - x) <= m_0 + m_n n - * - * or - * - * -c_i_x (y - x) + m_0 + m_n n >= 0 - * - * for each (x,y) in R. - * If s = -1, we add the constraint - * - * -c_i_x (y - x) <= m_0 + m_n n - * - * or - * - * c_i_x (y - x) + m_0 + m_n n >= 0 - * - * for each (x,y) in R. - * We obtain general constraints on coefficients (c_0, c_n, c_x) - * of valid constraints for (y - x) and then plug in (m_0, m_n, -s * c_i_x), - * with each coefficient (except m_0) represented as a pair of non-negative - * coefficients. - * - * Actually, we do not construct constraints for the c_i_x themselves, - * but for the coefficients of c_i_x written as a linear combination - * of the columns in node->cmap. - */ -static int add_intra_proximity_constraints(struct isl_sched_graph *graph, - struct isl_sched_edge *edge, int s) -{ - unsigned total; - unsigned nparam; - isl_map *map = isl_map_copy(edge->map); - isl_ctx *ctx = isl_map_get_ctx(map); - isl_space *dim; - isl_dim_map *dim_map; - isl_basic_set *coef; - struct isl_sched_node *node = edge->src; - - coef = intra_coefficients(graph, map); - - dim = isl_space_domain(isl_space_unwrap(isl_basic_set_get_space(coef))); - - coef = isl_basic_set_transform_dims(coef, isl_dim_set, - isl_space_dim(dim, isl_dim_set), isl_mat_copy(node->cmap)); - - nparam = isl_space_dim(node->dim, isl_dim_param); - total = isl_basic_set_total_dim(graph->lp); - dim_map = isl_dim_map_alloc(ctx, total); - isl_dim_map_range(dim_map, 1, 0, 0, 0, 1, 1); - isl_dim_map_range(dim_map, 4, 2, 1, 1, nparam, -1); - isl_dim_map_range(dim_map, 5, 2, 1, 1, nparam, 1); - isl_dim_map_range(dim_map, node->start + 2 * node->nparam + 1, 2, - isl_space_dim(dim, isl_dim_set), 1, - node->nvar, s); - isl_dim_map_range(dim_map, node->start + 2 * node->nparam + 2, 2, - isl_space_dim(dim, isl_dim_set), 1, - node->nvar, -s); - graph->lp = isl_basic_set_extend_constraints(graph->lp, - coef->n_eq, coef->n_ineq); - graph->lp = isl_basic_set_add_constraints_dim_map(graph->lp, - coef, dim_map); - isl_space_free(dim); - - return 0; -} - -/* Add constraints to graph->lp that bound the dependence distance for the given - * dependence from node i to node j. - * If s = 1, we add the constraint - * - * (c_j_0 + c_j_n n + c_j_x y) - (c_i_0 + c_i_n n + c_i_x x) - * <= m_0 + m_n n - * - * or - * - * -(c_j_0 + c_j_n n + c_j_x y) + (c_i_0 + c_i_n n + c_i_x x) + - * m_0 + m_n n >= 0 - * - * for each (x,y) in R. - * If s = -1, we add the constraint - * - * -((c_j_0 + c_j_n n + c_j_x y) - (c_i_0 + c_i_n n + c_i_x x)) - * <= m_0 + m_n n - * - * or - * - * (c_j_0 + c_j_n n + c_j_x y) - (c_i_0 + c_i_n n + c_i_x x) + - * m_0 + m_n n >= 0 - * - * for each (x,y) in R. - * We obtain general constraints on coefficients (c_0, c_n, c_x, c_y) - * of valid constraints for R and then plug in - * (m_0 - s*c_j_0 + s*c_i_0, m_n - s*c_j_n + s*c_i_n, - * -s*c_j_x+s*c_i_x) - * with each coefficient (except m_0, c_j_0 and c_i_0) - * represented as a pair of non-negative coefficients. - * - * Actually, we do not construct constraints for the c_*_x themselves, - * but for the coefficients of c_*_x written as a linear combination - * of the columns in node->cmap. - */ -static int add_inter_proximity_constraints(struct isl_sched_graph *graph, - struct isl_sched_edge *edge, int s) -{ - unsigned total; - unsigned nparam; - isl_map *map = isl_map_copy(edge->map); - isl_ctx *ctx = isl_map_get_ctx(map); - isl_space *dim; - isl_dim_map *dim_map; - isl_basic_set *coef; - struct isl_sched_node *src = edge->src; - struct isl_sched_node *dst = edge->dst; - - coef = inter_coefficients(graph, map); - - dim = isl_space_domain(isl_space_unwrap(isl_basic_set_get_space(coef))); - - coef = isl_basic_set_transform_dims(coef, isl_dim_set, - isl_space_dim(dim, isl_dim_set), isl_mat_copy(src->cmap)); - coef = isl_basic_set_transform_dims(coef, isl_dim_set, - isl_space_dim(dim, isl_dim_set) + src->nvar, - isl_mat_copy(dst->cmap)); - - nparam = isl_space_dim(src->dim, isl_dim_param); - total = isl_basic_set_total_dim(graph->lp); - dim_map = isl_dim_map_alloc(ctx, total); - - isl_dim_map_range(dim_map, 1, 0, 0, 0, 1, 1); - isl_dim_map_range(dim_map, 4, 2, 1, 1, nparam, -1); - isl_dim_map_range(dim_map, 5, 2, 1, 1, nparam, 1); - - isl_dim_map_range(dim_map, dst->start, 0, 0, 0, 1, -s); - isl_dim_map_range(dim_map, dst->start + 1, 2, 1, 1, dst->nparam, s); - isl_dim_map_range(dim_map, dst->start + 2, 2, 1, 1, dst->nparam, -s); - isl_dim_map_range(dim_map, dst->start + 2 * dst->nparam + 1, 2, - isl_space_dim(dim, isl_dim_set) + src->nvar, 1, - dst->nvar, s); - isl_dim_map_range(dim_map, dst->start + 2 * dst->nparam + 2, 2, - isl_space_dim(dim, isl_dim_set) + src->nvar, 1, - dst->nvar, -s); - - isl_dim_map_range(dim_map, src->start, 0, 0, 0, 1, s); - isl_dim_map_range(dim_map, src->start + 1, 2, 1, 1, src->nparam, -s); - isl_dim_map_range(dim_map, src->start + 2, 2, 1, 1, src->nparam, s); - isl_dim_map_range(dim_map, src->start + 2 * src->nparam + 1, 2, - isl_space_dim(dim, isl_dim_set), 1, - src->nvar, -s); - isl_dim_map_range(dim_map, src->start + 2 * src->nparam + 2, 2, - isl_space_dim(dim, isl_dim_set), 1, - src->nvar, s); - - graph->lp = isl_basic_set_extend_constraints(graph->lp, - coef->n_eq, coef->n_ineq); - graph->lp = isl_basic_set_add_constraints_dim_map(graph->lp, - coef, dim_map); - isl_space_free(dim); - - return 0; -} - -static int add_all_validity_constraints(struct isl_sched_graph *graph) -{ - int i; - - for (i = 0; i < graph->n_edge; ++i) { - struct isl_sched_edge *edge= &graph->edge[i]; - if (!edge->validity) - continue; - if (edge->src != edge->dst) - continue; - if (add_intra_validity_constraints(graph, edge) < 0) - return -1; - } - - for (i = 0; i < graph->n_edge; ++i) { - struct isl_sched_edge *edge = &graph->edge[i]; - if (!edge->validity) - continue; - if (edge->src == edge->dst) - continue; - if (add_inter_validity_constraints(graph, edge) < 0) - return -1; - } - - return 0; -} - -/* Add constraints to graph->lp that bound the dependence distance - * for all dependence relations. - * If a given proximity dependence is identical to a validity - * dependence, then the dependence distance is already bounded - * from below (by zero), so we only need to bound the distance - * from above. - * Otherwise, we need to bound the distance both from above and from below. - */ -static int add_all_proximity_constraints(struct isl_sched_graph *graph) -{ - int i; - - for (i = 0; i < graph->n_edge; ++i) { - struct isl_sched_edge *edge= &graph->edge[i]; - if (!edge->proximity) - continue; - if (edge->src == edge->dst && - add_intra_proximity_constraints(graph, edge, 1) < 0) - return -1; - if (edge->src != edge->dst && - add_inter_proximity_constraints(graph, edge, 1) < 0) - return -1; - if (edge->validity) - continue; - if (edge->src == edge->dst && - add_intra_proximity_constraints(graph, edge, -1) < 0) - return -1; - if (edge->src != edge->dst && - add_inter_proximity_constraints(graph, edge, -1) < 0) - return -1; - } - - return 0; -} - -/* Compute a basis for the rows in the linear part of the schedule - * and extend this basis to a full basis. The remaining rows - * can then be used to force linear independence from the rows - * in the schedule. - * - * In particular, given the schedule rows S, we compute - * - * S = H Q - * - * with H the Hermite normal form of S. That is, all but the - * first rank columns of Q are zero and so each row in S is - * a linear combination of the first rank rows of Q. - * The matrix Q is then transposed because we will write the - * coefficients of the next schedule row as a column vector s - * and express this s as a linear combination s = Q c of the - * computed basis. - */ -static int node_update_cmap(struct isl_sched_node *node) -{ - isl_mat *H, *Q; - int n_row = isl_mat_rows(node->sched); - - H = isl_mat_sub_alloc(node->sched, 0, n_row, - 1 + node->nparam, node->nvar); - - H = isl_mat_left_hermite(H, 0, NULL, &Q); - isl_mat_free(node->cmap); - node->cmap = isl_mat_transpose(Q); - node->rank = isl_mat_initial_non_zero_cols(H); - isl_mat_free(H); - - if (!node->cmap || node->rank < 0) - return -1; - return 0; -} - -/* Count the number of equality and inequality constraints - * that will be added for the given map. - * If once is set, then we count - * each edge exactly once. Otherwise, we count as follows - * validity -> 1 (>= 0) - * validity+proximity -> 2 (>= 0 and upper bound) - * proximity -> 2 (lower and upper bound) - */ -static int count_map_constraints(struct isl_sched_graph *graph, - struct isl_sched_edge *edge, __isl_take isl_map *map, - int *n_eq, int *n_ineq, int once) -{ - isl_basic_set *coef; - int f = once ? 1 : edge->proximity ? 2 : 1; - - if (edge->src == edge->dst) - coef = intra_coefficients(graph, map); - else - coef = inter_coefficients(graph, map); - if (!coef) - return -1; - *n_eq += f * coef->n_eq; - *n_ineq += f * coef->n_ineq; - isl_basic_set_free(coef); - - return 0; -} - -/* Count the number of equality and inequality constraints - * that will be added to the main lp problem. - * If once is set, then we count - * each edge exactly once. Otherwise, we count as follows - * validity -> 1 (>= 0) - * validity+proximity -> 2 (>= 0 and upper bound) - * proximity -> 2 (lower and upper bound) - */ -static int count_constraints(struct isl_sched_graph *graph, - int *n_eq, int *n_ineq, int once) -{ - int i; - - *n_eq = *n_ineq = 0; - for (i = 0; i < graph->n_edge; ++i) { - struct isl_sched_edge *edge= &graph->edge[i]; - isl_map *map = isl_map_copy(edge->map); - - if (count_map_constraints(graph, edge, map, - n_eq, n_ineq, once) < 0) - return -1; - } - - return 0; -} - -/* Construct an ILP problem for finding schedule coefficients - * that result in non-negative, but small dependence distances - * over all dependences. - * In particular, the dependence distances over proximity edges - * are bounded by m_0 + m_n n and we compute schedule coefficients - * with small values (preferably zero) of m_n and m_0. - * - * All variables of the ILP are non-negative. The actual coefficients - * may be negative, so each coefficient is represented as the difference - * of two non-negative variables. The negative part always appears - * immediately before the positive part. - * Other than that, the variables have the following order - * - * - sum of positive and negative parts of m_n coefficients - * - m_0 - * - sum of positive and negative parts of all c_n coefficients - * (unconstrained when computing non-parametric schedules) - * - sum of positive and negative parts of all c_x coefficients - * - positive and negative parts of m_n coefficients - * - for each node - * - c_i_0 - * - positive and negative parts of c_i_n (if parametric) - * - positive and negative parts of c_i_x - * - * The c_i_x are not represented directly, but through the columns of - * node->cmap. That is, the computed values are for variable t_i_x - * such that c_i_x = Q t_i_x with Q equal to node->cmap. - * - * The constraints are those from the edges plus two or three equalities - * to express the sums. - * - * If force_zero is set, then we add equalities to ensure that - * the sum of the m_n coefficients and m_0 are both zero. - */ -static int setup_lp(isl_ctx *ctx, struct isl_sched_graph *graph, - int force_zero, int max_constant_term) -{ - int i, j; - int k; - unsigned nparam; - unsigned total; - isl_space *dim; - int parametric; - int param_pos; - int n_eq, n_ineq; - - parametric = ctx->opt->schedule_parametric; - nparam = isl_space_dim(graph->node[0].dim, isl_dim_param); - param_pos = 4; - total = param_pos + 2 * nparam; - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[graph->sorted[i]]; - if (node_update_cmap(node) < 0) - return -1; - node->start = total; - total += 1 + 2 * (node->nparam + node->nvar); - } - - if (count_constraints(graph, &n_eq, &n_ineq, 0) < 0) - return -1; - - dim = isl_space_set_alloc(ctx, 0, total); - isl_basic_set_free(graph->lp); - n_eq += 2 + parametric + force_zero; - if (max_constant_term != -1) - n_ineq += graph->n; - - graph->lp = isl_basic_set_alloc_space(dim, 0, n_eq, n_ineq); - - k = isl_basic_set_alloc_equality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->eq[k], 1 + total); - if (!force_zero) - isl_int_set_si(graph->lp->eq[k][1], -1); - for (i = 0; i < 2 * nparam; ++i) - isl_int_set_si(graph->lp->eq[k][1 + param_pos + i], 1); - - if (force_zero) { - k = isl_basic_set_alloc_equality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->eq[k], 1 + total); - isl_int_set_si(graph->lp->eq[k][2], -1); - } - - if (parametric) { - k = isl_basic_set_alloc_equality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->eq[k], 1 + total); - isl_int_set_si(graph->lp->eq[k][3], -1); - for (i = 0; i < graph->n; ++i) { - int pos = 1 + graph->node[i].start + 1; - - for (j = 0; j < 2 * graph->node[i].nparam; ++j) - isl_int_set_si(graph->lp->eq[k][pos + j], 1); - } - } - - k = isl_basic_set_alloc_equality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->eq[k], 1 + total); - isl_int_set_si(graph->lp->eq[k][4], -1); - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int pos = 1 + node->start + 1 + 2 * node->nparam; - - for (j = 0; j < 2 * node->nvar; ++j) - isl_int_set_si(graph->lp->eq[k][pos + j], 1); - } - - if (max_constant_term != -1) - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - k = isl_basic_set_alloc_inequality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->ineq[k], 1 + total); - isl_int_set_si(graph->lp->ineq[k][1 + node->start], -1); - isl_int_set_si(graph->lp->ineq[k][0], max_constant_term); - } - - if (add_all_validity_constraints(graph) < 0) - return -1; - if (add_all_proximity_constraints(graph) < 0) - return -1; - - return 0; -} - -/* Analyze the conflicting constraint found by - * isl_tab_basic_set_non_trivial_lexmin. If it corresponds to the validity - * constraint of one of the edges between distinct nodes, living, moreover - * in distinct SCCs, then record the source and sink SCC as this may - * be a good place to cut between SCCs. - */ -static int check_conflict(int con, void *user) -{ - int i; - struct isl_sched_graph *graph = user; - - if (graph->src_scc >= 0) - return 0; - - con -= graph->lp->n_eq; - - if (con >= graph->lp->n_ineq) - return 0; - - for (i = 0; i < graph->n_edge; ++i) { - if (!graph->edge[i].validity) - continue; - if (graph->edge[i].src == graph->edge[i].dst) - continue; - if (graph->edge[i].src->scc == graph->edge[i].dst->scc) - continue; - if (graph->edge[i].start > con) - continue; - if (graph->edge[i].end <= con) - continue; - graph->src_scc = graph->edge[i].src->scc; - graph->dst_scc = graph->edge[i].dst->scc; - } - - return 0; -} - -/* Check whether the next schedule row of the given node needs to be - * non-trivial. Lower-dimensional domains may have some trivial rows, - * but as soon as the number of remaining required non-trivial rows - * is as large as the number or remaining rows to be computed, - * all remaining rows need to be non-trivial. - */ -static int needs_row(struct isl_sched_graph *graph, struct isl_sched_node *node) -{ - return node->nvar - node->rank >= graph->maxvar - graph->n_row; -} - -/* Solve the ILP problem constructed in setup_lp. - * For each node such that all the remaining rows of its schedule - * need to be non-trivial, we construct a non-triviality region. - * This region imposes that the next row is independent of previous rows. - * In particular the coefficients c_i_x are represented by t_i_x - * variables with c_i_x = Q t_i_x and Q a unimodular matrix such that - * its first columns span the rows of the previously computed part - * of the schedule. The non-triviality region enforces that at least - * one of the remaining components of t_i_x is non-zero, i.e., - * that the new schedule row depends on at least one of the remaining - * columns of Q. - */ -static __isl_give isl_vec *solve_lp(struct isl_sched_graph *graph) -{ - int i; - isl_vec *sol; - isl_basic_set *lp; - - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int skip = node->rank; - graph->region[i].pos = node->start + 1 + 2*(node->nparam+skip); - if (needs_row(graph, node)) - graph->region[i].len = 2 * (node->nvar - skip); - else - graph->region[i].len = 0; - } - lp = isl_basic_set_copy(graph->lp); - sol = isl_tab_basic_set_non_trivial_lexmin(lp, 2, graph->n, - graph->region, &check_conflict, graph); - return sol; -} - -/* Update the schedules of all nodes based on the given solution - * of the LP problem. - * The new row is added to the current band. - * All possibly negative coefficients are encoded as a difference - * of two non-negative variables, so we need to perform the subtraction - * here. Moreover, if use_cmap is set, then the solution does - * not refer to the actual coefficients c_i_x, but instead to variables - * t_i_x such that c_i_x = Q t_i_x and Q is equal to node->cmap. - * In this case, we then also need to perform this multiplication - * to obtain the values of c_i_x. - * - * If check_zero is set, then the first two coordinates of sol are - * assumed to correspond to the dependence distance. If these two - * coordinates are zero, then the corresponding scheduling dimension - * is marked as being zero distance. - */ -static int update_schedule(struct isl_sched_graph *graph, - __isl_take isl_vec *sol, int use_cmap, int check_zero) -{ - int i, j; - int zero = 0; - isl_vec *csol = NULL; - - if (!sol) - goto error; - if (sol->size == 0) - isl_die(sol->ctx, isl_error_internal, - "no solution found", goto error); - - if (check_zero) - zero = isl_int_is_zero(sol->el[1]) && - isl_int_is_zero(sol->el[2]); - - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int pos = node->start; - int row = isl_mat_rows(node->sched); - - isl_vec_free(csol); - csol = isl_vec_alloc(sol->ctx, node->nvar); - if (!csol) - goto error; - - isl_map_free(node->sched_map); - node->sched_map = NULL; - node->sched = isl_mat_add_rows(node->sched, 1); - if (!node->sched) - goto error; - node->sched = isl_mat_set_element(node->sched, row, 0, - sol->el[1 + pos]); - for (j = 0; j < node->nparam + node->nvar; ++j) - isl_int_sub(sol->el[1 + pos + 1 + 2 * j + 1], - sol->el[1 + pos + 1 + 2 * j + 1], - sol->el[1 + pos + 1 + 2 * j]); - for (j = 0; j < node->nparam; ++j) - node->sched = isl_mat_set_element(node->sched, - row, 1 + j, sol->el[1+pos+1+2*j+1]); - for (j = 0; j < node->nvar; ++j) - isl_int_set(csol->el[j], - sol->el[1+pos+1+2*(node->nparam+j)+1]); - if (use_cmap) - csol = isl_mat_vec_product(isl_mat_copy(node->cmap), - csol); - if (!csol) - goto error; - for (j = 0; j < node->nvar; ++j) - node->sched = isl_mat_set_element(node->sched, - row, 1 + node->nparam + j, csol->el[j]); - node->band[graph->n_total_row] = graph->n_band; - node->zero[graph->n_total_row] = zero; - } - isl_vec_free(sol); - isl_vec_free(csol); - - graph->n_row++; - graph->n_total_row++; - - return 0; -error: - isl_vec_free(sol); - isl_vec_free(csol); - return -1; -} - -/* Convert node->sched into a map and return this map. - * We simply add equality constraints that express each output variable - * as the affine combination of parameters and input variables specified - * by the schedule matrix. - * - * The result is cached in node->sched_map, which needs to be released - * whenever node->sched is updated. - */ -static __isl_give isl_map *node_extract_schedule(struct isl_sched_node *node) -{ - int i, j; - isl_space *dim; - isl_local_space *ls; - isl_basic_map *bmap; - isl_constraint *c; - int nrow, ncol; - isl_int v; - - if (node->sched_map) - return isl_map_copy(node->sched_map); - - nrow = isl_mat_rows(node->sched); - ncol = isl_mat_cols(node->sched) - 1; - dim = isl_space_from_domain(isl_space_copy(node->dim)); - dim = isl_space_add_dims(dim, isl_dim_out, nrow); - bmap = isl_basic_map_universe(isl_space_copy(dim)); - ls = isl_local_space_from_space(dim); - - isl_int_init(v); - - for (i = 0; i < nrow; ++i) { - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_constraint_set_coefficient_si(c, isl_dim_out, i, -1); - isl_mat_get_element(node->sched, i, 0, &v); - isl_constraint_set_constant(c, v); - for (j = 0; j < node->nparam; ++j) { - isl_mat_get_element(node->sched, i, 1 + j, &v); - isl_constraint_set_coefficient(c, isl_dim_param, j, v); - } - for (j = 0; j < node->nvar; ++j) { - isl_mat_get_element(node->sched, - i, 1 + node->nparam + j, &v); - isl_constraint_set_coefficient(c, isl_dim_in, j, v); - } - bmap = isl_basic_map_add_constraint(bmap, c); - } - - isl_int_clear(v); - - isl_local_space_free(ls); - - node->sched_map = isl_map_from_basic_map(bmap); - return isl_map_copy(node->sched_map); -} - -/* Update the given dependence relation based on the current schedule. - * That is, intersect the dependence relation with a map expressing - * that source and sink are executed within the same iteration of - * the current schedule. - * This is not the most efficient way, but this shouldn't be a critical - * operation. - */ -static __isl_give isl_map *specialize(__isl_take isl_map *map, - struct isl_sched_node *src, struct isl_sched_node *dst) -{ - isl_map *src_sched, *dst_sched, *id; - - src_sched = node_extract_schedule(src); - dst_sched = node_extract_schedule(dst); - id = isl_map_apply_range(src_sched, isl_map_reverse(dst_sched)); - return isl_map_intersect(map, id); -} - -/* Update the dependence relations of all edges based on the current schedule. - * If a dependence is carried completely by the current schedule, then - * it is removed and edge_table is updated accordingly. - */ -static int update_edges(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i; - int reset_table = 0; - - for (i = graph->n_edge - 1; i >= 0; --i) { - struct isl_sched_edge *edge = &graph->edge[i]; - edge->map = specialize(edge->map, edge->src, edge->dst); - if (!edge->map) - return -1; - - if (isl_map_plain_is_empty(edge->map)) { - reset_table = 1; - isl_map_free(edge->map); - if (i != graph->n_edge - 1) - graph->edge[i] = graph->edge[graph->n_edge - 1]; - graph->n_edge--; - } - } - - if (reset_table) { - isl_hash_table_free(ctx, graph->edge_table); - graph->edge_table = NULL; - return graph_init_edge_table(ctx, graph); - } - - return 0; -} - -static void next_band(struct isl_sched_graph *graph) -{ - graph->band_start = graph->n_total_row; - graph->n_band++; -} - -/* Topologically sort statements mapped to same schedule iteration - * and add a row to the schedule corresponding to this order. - */ -static int sort_statements(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i, j; - - if (graph->n <= 1) - return 0; - - if (update_edges(ctx, graph) < 0) - return -1; - - if (graph->n_edge == 0) - return 0; - - if (detect_sccs(graph) < 0) - return -1; - - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int row = isl_mat_rows(node->sched); - int cols = isl_mat_cols(node->sched); - - isl_map_free(node->sched_map); - node->sched_map = NULL; - node->sched = isl_mat_add_rows(node->sched, 1); - if (!node->sched) - return -1; - node->sched = isl_mat_set_element_si(node->sched, row, 0, - node->scc); - for (j = 1; j < cols; ++j) - node->sched = isl_mat_set_element_si(node->sched, - row, j, 0); - node->band[graph->n_total_row] = graph->n_band; - } - - graph->n_total_row++; - next_band(graph); - - return 0; -} - -/* Construct an isl_schedule based on the computed schedule stored - * in graph and with parameters specified by dim. - */ -static __isl_give isl_schedule *extract_schedule(struct isl_sched_graph *graph, - __isl_take isl_space *dim) -{ - int i; - isl_ctx *ctx; - isl_schedule *sched = NULL; - - if (!dim) - return NULL; - - ctx = isl_space_get_ctx(dim); - sched = isl_calloc(ctx, struct isl_schedule, - sizeof(struct isl_schedule) + - (graph->n - 1) * sizeof(struct isl_schedule_node)); - if (!sched) - goto error; - - sched->ref = 1; - sched->n = graph->n; - sched->n_band = graph->n_band; - sched->n_total_row = graph->n_total_row; - - for (i = 0; i < sched->n; ++i) { - int r, b; - int *band_end, *band_id, *zero; - - band_end = isl_alloc_array(ctx, int, graph->n_band); - band_id = isl_alloc_array(ctx, int, graph->n_band); - zero = isl_alloc_array(ctx, int, graph->n_total_row); - sched->node[i].sched = node_extract_schedule(&graph->node[i]); - sched->node[i].band_end = band_end; - sched->node[i].band_id = band_id; - sched->node[i].zero = zero; - if (!band_end || !band_id || !zero) - goto error; - - for (r = 0; r < graph->n_total_row; ++r) - zero[r] = graph->node[i].zero[r]; - for (r = b = 0; r < graph->n_total_row; ++r) { - if (graph->node[i].band[r] == b) - continue; - band_end[b++] = r; - if (graph->node[i].band[r] == -1) - break; - } - if (r == graph->n_total_row) - band_end[b++] = r; - sched->node[i].n_band = b; - for (--b; b >= 0; --b) - band_id[b] = graph->node[i].band_id[b]; - } - - sched->dim = dim; - - return sched; -error: - isl_space_free(dim); - isl_schedule_free(sched); - return NULL; -} - -/* Copy nodes that satisfy node_pred from the src dependence graph - * to the dst dependence graph. - */ -static int copy_nodes(struct isl_sched_graph *dst, struct isl_sched_graph *src, - int (*node_pred)(struct isl_sched_node *node, int data), int data) -{ - int i; - - dst->n = 0; - for (i = 0; i < src->n; ++i) { - if (!node_pred(&src->node[i], data)) - continue; - dst->node[dst->n].dim = isl_space_copy(src->node[i].dim); - dst->node[dst->n].nvar = src->node[i].nvar; - dst->node[dst->n].nparam = src->node[i].nparam; - dst->node[dst->n].sched = isl_mat_copy(src->node[i].sched); - dst->node[dst->n].sched_map = - isl_map_copy(src->node[i].sched_map); - dst->node[dst->n].band = src->node[i].band; - dst->node[dst->n].band_id = src->node[i].band_id; - dst->node[dst->n].zero = src->node[i].zero; - dst->n++; - } - - return 0; -} - -/* Copy non-empty edges that satisfy edge_pred from the src dependence graph - * to the dst dependence graph. - */ -static int copy_edges(isl_ctx *ctx, struct isl_sched_graph *dst, - struct isl_sched_graph *src, - int (*edge_pred)(struct isl_sched_edge *edge, int data), int data) -{ - int i; - - dst->n_edge = 0; - for (i = 0; i < src->n_edge; ++i) { - struct isl_sched_edge *edge = &src->edge[i]; - isl_map *map; - - if (!edge_pred(edge, data)) - continue; - - if (isl_map_plain_is_empty(edge->map)) - continue; - - map = isl_map_copy(edge->map); - - dst->edge[dst->n_edge].src = - graph_find_node(ctx, dst, edge->src->dim); - dst->edge[dst->n_edge].dst = - graph_find_node(ctx, dst, edge->dst->dim); - dst->edge[dst->n_edge].map = map; - dst->edge[dst->n_edge].validity = edge->validity; - dst->edge[dst->n_edge].proximity = edge->proximity; - dst->n_edge++; - } - - return 0; -} - -/* Given a "src" dependence graph that contains the nodes from "dst" - * that satisfy node_pred, copy the schedule computed in "src" - * for those nodes back to "dst". - */ -static int copy_schedule(struct isl_sched_graph *dst, - struct isl_sched_graph *src, - int (*node_pred)(struct isl_sched_node *node, int data), int data) -{ - int i; - - src->n = 0; - for (i = 0; i < dst->n; ++i) { - if (!node_pred(&dst->node[i], data)) - continue; - isl_mat_free(dst->node[i].sched); - isl_map_free(dst->node[i].sched_map); - dst->node[i].sched = isl_mat_copy(src->node[src->n].sched); - dst->node[i].sched_map = - isl_map_copy(src->node[src->n].sched_map); - src->n++; - } - - dst->n_total_row = src->n_total_row; - dst->n_band = src->n_band; - - return 0; -} - -/* Compute the maximal number of variables over all nodes. - * This is the maximal number of linearly independent schedule - * rows that we need to compute. - * Just in case we end up in a part of the dependence graph - * with only lower-dimensional domains, we make sure we will - * compute the required amount of extra linearly independent rows. - */ -static int compute_maxvar(struct isl_sched_graph *graph) -{ - int i; - - graph->maxvar = 0; - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int nvar; - - if (node_update_cmap(node) < 0) - return -1; - nvar = node->nvar + graph->n_row - node->rank; - if (nvar > graph->maxvar) - graph->maxvar = nvar; - } - - return 0; -} - -static int compute_schedule(isl_ctx *ctx, struct isl_sched_graph *graph); -static int compute_schedule_wcc(isl_ctx *ctx, struct isl_sched_graph *graph); - -/* Compute a schedule for a subgraph of "graph". In particular, for - * the graph composed of nodes that satisfy node_pred and edges that - * that satisfy edge_pred. The caller should precompute the number - * of nodes and edges that satisfy these predicates and pass them along - * as "n" and "n_edge". - * If the subgraph is known to consist of a single component, then wcc should - * be set and then we call compute_schedule_wcc on the constructed subgraph. - * Otherwise, we call compute_schedule, which will check whether the subgraph - * is connected. - */ -static int compute_sub_schedule(isl_ctx *ctx, - struct isl_sched_graph *graph, int n, int n_edge, - int (*node_pred)(struct isl_sched_node *node, int data), - int (*edge_pred)(struct isl_sched_edge *edge, int data), - int data, int wcc) -{ - struct isl_sched_graph split = { 0 }; - - if (graph_alloc(ctx, &split, n, n_edge) < 0) - goto error; - if (copy_nodes(&split, graph, node_pred, data) < 0) - goto error; - if (graph_init_table(ctx, &split) < 0) - goto error; - if (copy_edges(ctx, &split, graph, edge_pred, data) < 0) - goto error; - if (graph_init_edge_table(ctx, &split) < 0) - goto error; - split.n_row = graph->n_row; - split.n_total_row = graph->n_total_row; - split.n_band = graph->n_band; - split.band_start = graph->band_start; - - if (wcc && compute_schedule_wcc(ctx, &split) < 0) - goto error; - if (!wcc && compute_schedule(ctx, &split) < 0) - goto error; - - copy_schedule(graph, &split, node_pred, data); - - graph_free(ctx, &split); - return 0; -error: - graph_free(ctx, &split); - return -1; -} - -static int node_scc_exactly(struct isl_sched_node *node, int scc) -{ - return node->scc == scc; -} - -static int node_scc_at_most(struct isl_sched_node *node, int scc) -{ - return node->scc <= scc; -} - -static int node_scc_at_least(struct isl_sched_node *node, int scc) -{ - return node->scc >= scc; -} - -static int edge_src_scc_exactly(struct isl_sched_edge *edge, int scc) -{ - return edge->src->scc == scc; -} - -static int edge_dst_scc_at_most(struct isl_sched_edge *edge, int scc) -{ - return edge->dst->scc <= scc; -} - -static int edge_src_scc_at_least(struct isl_sched_edge *edge, int scc) -{ - return edge->src->scc >= scc; -} - -/* Pad the schedules of all nodes with zero rows such that in the end - * they all have graph->n_total_row rows. - * The extra rows don't belong to any band, so they get assigned band number -1. - */ -static int pad_schedule(struct isl_sched_graph *graph) -{ - int i, j; - - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int row = isl_mat_rows(node->sched); - if (graph->n_total_row > row) { - isl_map_free(node->sched_map); - node->sched_map = NULL; - } - node->sched = isl_mat_add_zero_rows(node->sched, - graph->n_total_row - row); - if (!node->sched) - return -1; - for (j = row; j < graph->n_total_row; ++j) - node->band[j] = -1; - } - - return 0; -} - -/* Split the current graph into two parts and compute a schedule for each - * part individually. In particular, one part consists of all SCCs up - * to and including graph->src_scc, while the other part contains the other - * SCCS. - * - * The split is enforced in the schedule by constant rows with two different - * values (0 and 1). These constant rows replace the previously computed rows - * in the current band. - * It would be possible to reuse them as the first rows in the next - * band, but recomputing them may result in better rows as we are looking - * at a smaller part of the dependence graph. - * - * The band_id of the second group is set to n, where n is the number - * of nodes in the first group. This ensures that the band_ids over - * the two groups remain disjoint, even if either or both of the two - * groups contain independent components. - */ -static int compute_split_schedule(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i, j, n, e1, e2; - int n_total_row, orig_total_row; - int n_band, orig_band; - int drop; - - drop = graph->n_total_row - graph->band_start; - graph->n_total_row -= drop; - graph->n_row -= drop; - - n = 0; - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int row = isl_mat_rows(node->sched) - drop; - int cols = isl_mat_cols(node->sched); - int before = node->scc <= graph->src_scc; - - if (before) - n++; - - isl_map_free(node->sched_map); - node->sched_map = NULL; - node->sched = isl_mat_drop_rows(node->sched, - graph->band_start, drop); - node->sched = isl_mat_add_rows(node->sched, 1); - if (!node->sched) - return -1; - node->sched = isl_mat_set_element_si(node->sched, row, 0, - !before); - for (j = 1; j < cols; ++j) - node->sched = isl_mat_set_element_si(node->sched, - row, j, 0); - node->band[graph->n_total_row] = graph->n_band; - } - - e1 = e2 = 0; - for (i = 0; i < graph->n_edge; ++i) { - if (graph->edge[i].dst->scc <= graph->src_scc) - e1++; - if (graph->edge[i].src->scc > graph->src_scc) - e2++; - } - - graph->n_total_row++; - next_band(graph); - - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - if (node->scc > graph->src_scc) - node->band_id[graph->n_band] = n; - } - - orig_total_row = graph->n_total_row; - orig_band = graph->n_band; - if (compute_sub_schedule(ctx, graph, n, e1, - &node_scc_at_most, &edge_dst_scc_at_most, - graph->src_scc, 0) < 0) - return -1; - n_total_row = graph->n_total_row; - graph->n_total_row = orig_total_row; - n_band = graph->n_band; - graph->n_band = orig_band; - if (compute_sub_schedule(ctx, graph, graph->n - n, e2, - &node_scc_at_least, &edge_src_scc_at_least, - graph->src_scc + 1, 0) < 0) - return -1; - if (n_total_row > graph->n_total_row) - graph->n_total_row = n_total_row; - if (n_band > graph->n_band) - graph->n_band = n_band; - - return pad_schedule(graph); -} - -/* Compute the next band of the schedule after updating the dependence - * relations based on the the current schedule. - */ -static int compute_next_band(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - if (update_edges(ctx, graph) < 0) - return -1; - next_band(graph); - - return compute_schedule(ctx, graph); -} - -/* Add constraints to graph->lp that force the dependence "map" (which - * is part of the dependence relation of "edge") - * to be respected and attempt to carry it, where the edge is one from - * a node j to itself. "pos" is the sequence number of the given map. - * That is, add constraints that enforce - * - * (c_j_0 + c_j_n n + c_j_x y) - (c_j_0 + c_j_n n + c_j_x x) - * = c_j_x (y - x) >= e_i - * - * for each (x,y) in R. - * We obtain general constraints on coefficients (c_0, c_n, c_x) - * of valid constraints for (y - x) and then plug in (-e_i, 0, c_j_x), - * with each coefficient in c_j_x represented as a pair of non-negative - * coefficients. - */ -static int add_intra_constraints(struct isl_sched_graph *graph, - struct isl_sched_edge *edge, __isl_take isl_map *map, int pos) -{ - unsigned total; - isl_ctx *ctx = isl_map_get_ctx(map); - isl_space *dim; - isl_dim_map *dim_map; - isl_basic_set *coef; - struct isl_sched_node *node = edge->src; - - coef = intra_coefficients(graph, map); - - dim = isl_space_domain(isl_space_unwrap(isl_basic_set_get_space(coef))); - - total = isl_basic_set_total_dim(graph->lp); - dim_map = isl_dim_map_alloc(ctx, total); - isl_dim_map_range(dim_map, 3 + pos, 0, 0, 0, 1, -1); - isl_dim_map_range(dim_map, node->start + 2 * node->nparam + 1, 2, - isl_space_dim(dim, isl_dim_set), 1, - node->nvar, -1); - isl_dim_map_range(dim_map, node->start + 2 * node->nparam + 2, 2, - isl_space_dim(dim, isl_dim_set), 1, - node->nvar, 1); - graph->lp = isl_basic_set_extend_constraints(graph->lp, - coef->n_eq, coef->n_ineq); - graph->lp = isl_basic_set_add_constraints_dim_map(graph->lp, - coef, dim_map); - isl_space_free(dim); - - return 0; -} - -/* Add constraints to graph->lp that force the dependence "map" (which - * is part of the dependence relation of "edge") - * to be respected and attempt to carry it, where the edge is one from - * node j to node k. "pos" is the sequence number of the given map. - * That is, add constraints that enforce - * - * (c_k_0 + c_k_n n + c_k_x y) - (c_j_0 + c_j_n n + c_j_x x) >= e_i - * - * for each (x,y) in R. - * We obtain general constraints on coefficients (c_0, c_n, c_x) - * of valid constraints for R and then plug in - * (-e_i + c_k_0 - c_j_0, c_k_n - c_j_n, c_k_x - c_j_x) - * with each coefficient (except e_i, c_k_0 and c_j_0) - * represented as a pair of non-negative coefficients. - */ -static int add_inter_constraints(struct isl_sched_graph *graph, - struct isl_sched_edge *edge, __isl_take isl_map *map, int pos) -{ - unsigned total; - isl_ctx *ctx = isl_map_get_ctx(map); - isl_space *dim; - isl_dim_map *dim_map; - isl_basic_set *coef; - struct isl_sched_node *src = edge->src; - struct isl_sched_node *dst = edge->dst; - - coef = inter_coefficients(graph, map); - - dim = isl_space_domain(isl_space_unwrap(isl_basic_set_get_space(coef))); - - total = isl_basic_set_total_dim(graph->lp); - dim_map = isl_dim_map_alloc(ctx, total); - - isl_dim_map_range(dim_map, 3 + pos, 0, 0, 0, 1, -1); - - isl_dim_map_range(dim_map, dst->start, 0, 0, 0, 1, 1); - isl_dim_map_range(dim_map, dst->start + 1, 2, 1, 1, dst->nparam, -1); - isl_dim_map_range(dim_map, dst->start + 2, 2, 1, 1, dst->nparam, 1); - isl_dim_map_range(dim_map, dst->start + 2 * dst->nparam + 1, 2, - isl_space_dim(dim, isl_dim_set) + src->nvar, 1, - dst->nvar, -1); - isl_dim_map_range(dim_map, dst->start + 2 * dst->nparam + 2, 2, - isl_space_dim(dim, isl_dim_set) + src->nvar, 1, - dst->nvar, 1); - - isl_dim_map_range(dim_map, src->start, 0, 0, 0, 1, -1); - isl_dim_map_range(dim_map, src->start + 1, 2, 1, 1, src->nparam, 1); - isl_dim_map_range(dim_map, src->start + 2, 2, 1, 1, src->nparam, -1); - isl_dim_map_range(dim_map, src->start + 2 * src->nparam + 1, 2, - isl_space_dim(dim, isl_dim_set), 1, - src->nvar, 1); - isl_dim_map_range(dim_map, src->start + 2 * src->nparam + 2, 2, - isl_space_dim(dim, isl_dim_set), 1, - src->nvar, -1); - - graph->lp = isl_basic_set_extend_constraints(graph->lp, - coef->n_eq, coef->n_ineq); - graph->lp = isl_basic_set_add_constraints_dim_map(graph->lp, - coef, dim_map); - isl_space_free(dim); - - return 0; -} - -/* Add constraints to graph->lp that force all dependence - * to be respected and attempt to carry it. - */ -static int add_all_constraints(struct isl_sched_graph *graph) -{ - int i, j; - int pos; - - pos = 0; - for (i = 0; i < graph->n_edge; ++i) { - struct isl_sched_edge *edge= &graph->edge[i]; - for (j = 0; j < edge->map->n; ++j) { - isl_basic_map *bmap; - isl_map *map; - - bmap = isl_basic_map_copy(edge->map->p[j]); - map = isl_map_from_basic_map(bmap); - - if (edge->src == edge->dst && - add_intra_constraints(graph, edge, map, pos) < 0) - return -1; - if (edge->src != edge->dst && - add_inter_constraints(graph, edge, map, pos) < 0) - return -1; - ++pos; - } - } - - return 0; -} - -/* Count the number of equality and inequality constraints - * that will be added to the carry_lp problem. - * If once is set, then we count - * each edge exactly once. Otherwise, we count as follows - * validity -> 1 (>= 0) - * validity+proximity -> 2 (>= 0 and upper bound) - * proximity -> 2 (lower and upper bound) - */ -static int count_all_constraints(struct isl_sched_graph *graph, - int *n_eq, int *n_ineq, int once) -{ - int i, j; - - *n_eq = *n_ineq = 0; - for (i = 0; i < graph->n_edge; ++i) { - struct isl_sched_edge *edge= &graph->edge[i]; - for (j = 0; j < edge->map->n; ++j) { - isl_basic_map *bmap; - isl_map *map; - - bmap = isl_basic_map_copy(edge->map->p[j]); - map = isl_map_from_basic_map(bmap); - - if (count_map_constraints(graph, edge, map, - n_eq, n_ineq, once) < 0) - return -1; - } - } - - return 0; -} - -/* Construct an LP problem for finding schedule coefficients - * such that the schedule carries as many dependences as possible. - * In particular, for each dependence i, we bound the dependence distance - * from below by e_i, with 0 <= e_i <= 1 and then maximize the sum - * of all e_i's. Dependence with e_i = 0 in the solution are simply - * respected, while those with e_i > 0 (in practice e_i = 1) are carried. - * Note that if the dependence relation is a union of basic maps, - * then we have to consider each basic map individually as it may only - * be possible to carry the dependences expressed by some of those - * basic maps and not all off them. - * Below, we consider each of those basic maps as a separate "edge". - * - * All variables of the LP are non-negative. The actual coefficients - * may be negative, so each coefficient is represented as the difference - * of two non-negative variables. The negative part always appears - * immediately before the positive part. - * Other than that, the variables have the following order - * - * - sum of (1 - e_i) over all edges - * - sum of positive and negative parts of all c_n coefficients - * (unconstrained when computing non-parametric schedules) - * - sum of positive and negative parts of all c_x coefficients - * - for each edge - * - e_i - * - for each node - * - c_i_0 - * - positive and negative parts of c_i_n (if parametric) - * - positive and negative parts of c_i_x - * - * The constraints are those from the edges plus three equalities - * to express the sums and n_edge inequalities to express e_i <= 1. - */ -static int setup_carry_lp(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i, j; - int k; - isl_space *dim; - unsigned total; - int n_eq, n_ineq; - int n_edge; - - n_edge = 0; - for (i = 0; i < graph->n_edge; ++i) - n_edge += graph->edge[i].map->n; - - total = 3 + n_edge; - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[graph->sorted[i]]; - node->start = total; - total += 1 + 2 * (node->nparam + node->nvar); - } - - if (count_all_constraints(graph, &n_eq, &n_ineq, 1) < 0) - return -1; - - dim = isl_space_set_alloc(ctx, 0, total); - isl_basic_set_free(graph->lp); - n_eq += 3; - n_ineq += n_edge; - graph->lp = isl_basic_set_alloc_space(dim, 0, n_eq, n_ineq); - graph->lp = isl_basic_set_set_rational(graph->lp); - - k = isl_basic_set_alloc_equality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->eq[k], 1 + total); - isl_int_set_si(graph->lp->eq[k][0], -n_edge); - isl_int_set_si(graph->lp->eq[k][1], 1); - for (i = 0; i < n_edge; ++i) - isl_int_set_si(graph->lp->eq[k][4 + i], 1); - - k = isl_basic_set_alloc_equality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->eq[k], 1 + total); - isl_int_set_si(graph->lp->eq[k][2], -1); - for (i = 0; i < graph->n; ++i) { - int pos = 1 + graph->node[i].start + 1; - - for (j = 0; j < 2 * graph->node[i].nparam; ++j) - isl_int_set_si(graph->lp->eq[k][pos + j], 1); - } - - k = isl_basic_set_alloc_equality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->eq[k], 1 + total); - isl_int_set_si(graph->lp->eq[k][3], -1); - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - int pos = 1 + node->start + 1 + 2 * node->nparam; - - for (j = 0; j < 2 * node->nvar; ++j) - isl_int_set_si(graph->lp->eq[k][pos + j], 1); - } - - for (i = 0; i < n_edge; ++i) { - k = isl_basic_set_alloc_inequality(graph->lp); - if (k < 0) - return -1; - isl_seq_clr(graph->lp->ineq[k], 1 + total); - isl_int_set_si(graph->lp->ineq[k][4 + i], -1); - isl_int_set_si(graph->lp->ineq[k][0], 1); - } - - if (add_all_constraints(graph) < 0) - return -1; - - return 0; -} - -/* If the schedule_split_parallel option is set and if the linear - * parts of the scheduling rows for all nodes in the graphs are the same, - * then split off the constant term from the linear part. - * The constant term is then placed in a separate band and - * the linear part is simplified. - */ -static int split_parallel(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i; - int equal = 1; - int row, cols; - struct isl_sched_node *node0; - - if (!ctx->opt->schedule_split_parallel) - return 0; - if (graph->n <= 1) - return 0; - - node0 = &graph->node[0]; - row = isl_mat_rows(node0->sched) - 1; - cols = isl_mat_cols(node0->sched); - for (i = 1; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - - if (!isl_seq_eq(node0->sched->row[row] + 1, - node->sched->row[row] + 1, cols - 1)) - return 0; - if (equal && - isl_int_ne(node0->sched->row[row][0], - node->sched->row[row][0])) - equal = 0; - } - if (equal) - return 0; - - next_band(graph); - - for (i = 0; i < graph->n; ++i) { - struct isl_sched_node *node = &graph->node[i]; - - isl_map_free(node->sched_map); - node->sched_map = NULL; - node->sched = isl_mat_add_zero_rows(node->sched, 1); - if (!node->sched) - return -1; - isl_int_set(node->sched->row[row + 1][0], - node->sched->row[row][0]); - isl_int_set_si(node->sched->row[row][0], 0); - node->sched = isl_mat_normalize_row(node->sched, row); - if (!node->sched) - return -1; - node->band[graph->n_total_row] = graph->n_band; - } - - graph->n_total_row++; - - return 0; -} - -/* Construct a schedule row for each node such that as many dependences - * as possible are carried and then continue with the next band. - */ -static int carry_dependences(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int i; - int n_edge; - isl_vec *sol; - isl_basic_set *lp; - - n_edge = 0; - for (i = 0; i < graph->n_edge; ++i) - n_edge += graph->edge[i].map->n; - - if (setup_carry_lp(ctx, graph) < 0) - return -1; - - lp = isl_basic_set_copy(graph->lp); - sol = isl_tab_basic_set_non_neg_lexmin(lp); - if (!sol) - return -1; - - if (sol->size == 0) { - isl_vec_free(sol); - isl_die(ctx, isl_error_internal, - "error in schedule construction", return -1); - } - - if (isl_int_cmp_si(sol->el[1], n_edge) >= 0) { - isl_vec_free(sol); - isl_die(ctx, isl_error_unknown, - "unable to carry dependences", return -1); - } - - if (update_schedule(graph, sol, 0, 0) < 0) - return -1; - - if (split_parallel(ctx, graph) < 0) - return -1; - - return compute_next_band(ctx, graph); -} - -/* Compute a schedule for a connected dependence graph. - * We try to find a sequence of as many schedule rows as possible that result - * in non-negative dependence distances (independent of the previous rows - * in the sequence, i.e., such that the sequence is tilable). - * If we can't find any more rows we either - * - split between SCCs and start over (assuming we found an interesting - * pair of SCCs between which to split) - * - continue with the next band (assuming the current band has at least - * one row) - * - try to carry as many dependences as possible and continue with the next - * band - * - * If we manage to complete the schedule, we finish off by topologically - * sorting the statements based on the remaining dependences. - * - * If ctx->opt->schedule_outer_zero_distance is set, then we force the - * outermost dimension in the current band to be zero distance. If this - * turns out to be impossible, we fall back on the general scheme above - * and try to carry as many dependences as possible. - */ -static int compute_schedule_wcc(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - int force_zero = 0; - int max_constant_term; - - if (detect_sccs(graph) < 0) - return -1; - sort_sccs(graph); - - if (compute_maxvar(graph) < 0) - return -1; - - if (ctx->opt->schedule_outer_zero_distance) - force_zero = 1; - - max_constant_term = ctx->opt->schedule_max_constant_term; - - while (graph->n_row < graph->maxvar) { - isl_vec *sol; - - graph->src_scc = -1; - graph->dst_scc = -1; - - if (setup_lp(ctx, graph, force_zero, max_constant_term) < 0) - return -1; - sol = solve_lp(graph); - if (!sol) - return -1; - if (sol->size == 0) { - isl_vec_free(sol); - if (!ctx->opt->schedule_maximize_band_depth && - graph->n_total_row > graph->band_start) - return compute_next_band(ctx, graph); - if (graph->src_scc >= 0) - return compute_split_schedule(ctx, graph); - if (graph->n_total_row > graph->band_start) - return compute_next_band(ctx, graph); - return carry_dependences(ctx, graph); - } - if (update_schedule(graph, sol, 1, 1) < 0) - return -1; - force_zero = 0; - } - - if (graph->n_total_row > graph->band_start) - next_band(graph); - return sort_statements(ctx, graph); -} - -/* Compute a schedule for each component (identified by node->scc) - * of the dependence graph separately and then combine the results. - * - * The band_id is adjusted such that each component has a separate id. - * Note that the band_id may have already been set to a value different - * from zero by compute_split_schedule. - */ -static int compute_component_schedule(isl_ctx *ctx, - struct isl_sched_graph *graph) -{ - int wcc, i; - int n, n_edge; - int n_total_row, orig_total_row; - int n_band, orig_band; - - n_total_row = 0; - orig_total_row = graph->n_total_row; - n_band = 0; - orig_band = graph->n_band; - for (i = 0; i < graph->n; ++i) - graph->node[i].band_id[graph->n_band] += graph->node[i].scc; - for (wcc = 0; wcc < graph->scc; ++wcc) { - n = 0; - for (i = 0; i < graph->n; ++i) - if (graph->node[i].scc == wcc) - n++; - n_edge = 0; - for (i = 0; i < graph->n_edge; ++i) - if (graph->edge[i].src->scc == wcc) - n_edge++; - - if (compute_sub_schedule(ctx, graph, n, n_edge, - &node_scc_exactly, - &edge_src_scc_exactly, wcc, 1) < 0) - return -1; - if (graph->n_total_row > n_total_row) - n_total_row = graph->n_total_row; - graph->n_total_row = orig_total_row; - if (graph->n_band > n_band) - n_band = graph->n_band; - graph->n_band = orig_band; - } - - graph->n_total_row = n_total_row; - graph->n_band = n_band; - - return pad_schedule(graph); -} - -/* Compute a schedule for the given dependence graph. - * We first check if the graph is connected (through validity dependences) - * and, if not, compute a schedule for each component separately. - */ -static int compute_schedule(isl_ctx *ctx, struct isl_sched_graph *graph) -{ - if (detect_wccs(graph) < 0) - return -1; - - if (graph->scc > 1) - return compute_component_schedule(ctx, graph); - - return compute_schedule_wcc(ctx, graph); -} - -/* Compute a schedule for the given union of domains that respects - * all the validity dependences and tries to minimize the dependence - * distances over the proximity dependences. - */ -__isl_give isl_schedule *isl_union_set_compute_schedule( - __isl_take isl_union_set *domain, - __isl_take isl_union_map *validity, - __isl_take isl_union_map *proximity) -{ - isl_ctx *ctx = isl_union_set_get_ctx(domain); - isl_space *dim; - struct isl_sched_graph graph = { 0 }; - isl_schedule *sched; - - domain = isl_union_set_align_params(domain, - isl_union_map_get_space(validity)); - domain = isl_union_set_align_params(domain, - isl_union_map_get_space(proximity)); - dim = isl_union_set_get_space(domain); - validity = isl_union_map_align_params(validity, isl_space_copy(dim)); - proximity = isl_union_map_align_params(proximity, dim); - - if (!domain) - goto error; - - graph.n = isl_union_set_n_set(domain); - if (graph.n == 0) - goto empty; - if (graph_alloc(ctx, &graph, graph.n, - isl_union_map_n_map(validity) + isl_union_map_n_map(proximity)) < 0) - goto error; - graph.root = 1; - graph.n = 0; - if (isl_union_set_foreach_set(domain, &extract_node, &graph) < 0) - goto error; - if (graph_init_table(ctx, &graph) < 0) - goto error; - graph.n_edge = 0; - if (isl_union_map_foreach_map(validity, &extract_edge, &graph) < 0) - goto error; - if (graph_init_edge_table(ctx, &graph) < 0) - goto error; - if (isl_union_map_foreach_map(proximity, &extract_edge, &graph) < 0) - goto error; - - if (compute_schedule(ctx, &graph) < 0) - goto error; - -empty: - sched = extract_schedule(&graph, isl_union_set_get_space(domain)); - - graph_free(ctx, &graph); - isl_union_set_free(domain); - isl_union_map_free(validity); - isl_union_map_free(proximity); - - return sched; -error: - graph_free(ctx, &graph); - isl_union_set_free(domain); - isl_union_map_free(validity); - isl_union_map_free(proximity); - return NULL; -} - -void *isl_schedule_free(__isl_take isl_schedule *sched) -{ - int i; - if (!sched) - return NULL; - - if (--sched->ref > 0) - return NULL; - - for (i = 0; i < sched->n; ++i) { - isl_map_free(sched->node[i].sched); - free(sched->node[i].band_end); - free(sched->node[i].band_id); - free(sched->node[i].zero); - } - isl_space_free(sched->dim); - isl_band_list_free(sched->band_forest); - free(sched); - return NULL; -} - -isl_ctx *isl_schedule_get_ctx(__isl_keep isl_schedule *schedule) -{ - return schedule ? isl_space_get_ctx(schedule->dim) : NULL; -} - -__isl_give isl_union_map *isl_schedule_get_map(__isl_keep isl_schedule *sched) -{ - int i; - isl_union_map *umap; - - if (!sched) - return NULL; - - umap = isl_union_map_empty(isl_space_copy(sched->dim)); - for (i = 0; i < sched->n; ++i) - umap = isl_union_map_add_map(umap, - isl_map_copy(sched->node[i].sched)); - - return umap; -} - -static __isl_give isl_band_list *construct_band_list( - __isl_keep isl_schedule *schedule, __isl_keep isl_band *parent, - int band_nr, int *parent_active, int n_active); - -/* Construct an isl_band structure for the band in the given schedule - * with sequence number band_nr for the n_active nodes marked by active. - * If the nodes don't have a band with the given sequence number, - * then a band without members is created. - * - * Because of the way the schedule is constructed, we know that - * the position of the band inside the schedule of a node is the same - * for all active nodes. - */ -static __isl_give isl_band *construct_band(__isl_keep isl_schedule *schedule, - __isl_keep isl_band *parent, - int band_nr, int *active, int n_active) -{ - int i, j; - isl_ctx *ctx = isl_schedule_get_ctx(schedule); - isl_band *band; - unsigned start, end; - - band = isl_calloc_type(ctx, isl_band); - if (!band) - return NULL; - - band->ref = 1; - band->schedule = schedule; - band->parent = parent; - - for (i = 0; i < schedule->n; ++i) - if (active[i] && schedule->node[i].n_band > band_nr + 1) - break; - - if (i < schedule->n) { - band->children = construct_band_list(schedule, band, - band_nr + 1, active, n_active); - if (!band->children) - goto error; - } - - for (i = 0; i < schedule->n; ++i) - if (active[i]) - break; - - if (i >= schedule->n) - isl_die(ctx, isl_error_internal, - "band without active statements", goto error); - - start = band_nr ? schedule->node[i].band_end[band_nr - 1] : 0; - end = band_nr < schedule->node[i].n_band ? - schedule->node[i].band_end[band_nr] : start; - band->n = end - start; - - band->zero = isl_alloc_array(ctx, int, band->n); - if (!band->zero) - goto error; - - for (j = 0; j < band->n; ++j) - band->zero[j] = schedule->node[i].zero[start + j]; - - band->map = isl_union_map_empty(isl_space_copy(schedule->dim)); - for (i = 0; i < schedule->n; ++i) { - isl_map *map; - unsigned n_out; - - if (!active[i]) - continue; - - map = isl_map_copy(schedule->node[i].sched); - n_out = isl_map_dim(map, isl_dim_out); - map = isl_map_project_out(map, isl_dim_out, end, n_out - end); - map = isl_map_project_out(map, isl_dim_out, 0, start); - band->map = isl_union_map_union(band->map, - isl_union_map_from_map(map)); - } - if (!band->map) - goto error; - - return band; -error: - isl_band_free(band); - return NULL; -} - -/* Construct a list of bands that start at the same position (with - * sequence number band_nr) in the schedules of the nodes that - * were active in the parent band. - * - * A separate isl_band structure is created for each band_id - * and for each node that does not have a band with sequence - * number band_nr. In the latter case, a band without members - * is created. - * This ensures that if a band has any children, then each node - * that was active in the band is active in exactly one of the children. - */ -static __isl_give isl_band_list *construct_band_list( - __isl_keep isl_schedule *schedule, __isl_keep isl_band *parent, - int band_nr, int *parent_active, int n_active) -{ - int i, j; - isl_ctx *ctx = isl_schedule_get_ctx(schedule); - int *active; - int n_band; - isl_band_list *list; - - n_band = 0; - for (i = 0; i < n_active; ++i) { - for (j = 0; j < schedule->n; ++j) { - if (!parent_active[j]) - continue; - if (schedule->node[j].n_band <= band_nr) - continue; - if (schedule->node[j].band_id[band_nr] == i) { - n_band++; - break; - } - } - } - for (j = 0; j < schedule->n; ++j) - if (schedule->node[j].n_band <= band_nr) - n_band++; - - if (n_band == 1) { - isl_band *band; - list = isl_band_list_alloc(ctx, n_band); - band = construct_band(schedule, parent, band_nr, - parent_active, n_active); - return isl_band_list_add(list, band); - } - - active = isl_alloc_array(ctx, int, schedule->n); - if (!active) - return NULL; - - list = isl_band_list_alloc(ctx, n_band); - - for (i = 0; i < n_active; ++i) { - int n = 0; - isl_band *band; - - for (j = 0; j < schedule->n; ++j) { - active[j] = parent_active[j] && - schedule->node[j].n_band > band_nr && - schedule->node[j].band_id[band_nr] == i; - if (active[j]) - n++; - } - if (n == 0) - continue; - - band = construct_band(schedule, parent, band_nr, active, n); - - list = isl_band_list_add(list, band); - } - for (i = 0; i < schedule->n; ++i) { - isl_band *band; - if (!parent_active[i]) - continue; - if (schedule->node[i].n_band > band_nr) - continue; - for (j = 0; j < schedule->n; ++j) - active[j] = j == i; - band = construct_band(schedule, parent, band_nr, active, 1); - list = isl_band_list_add(list, band); - } - - free(active); - - return list; -} - -/* Construct a band forest representation of the schedule and - * return the list of roots. - */ -static __isl_give isl_band_list *construct_forest( - __isl_keep isl_schedule *schedule) -{ - int i; - isl_ctx *ctx = isl_schedule_get_ctx(schedule); - isl_band_list *forest; - int *active; - - active = isl_alloc_array(ctx, int, schedule->n); - if (!active) - return NULL; - - for (i = 0; i < schedule->n; ++i) - active[i] = 1; - - forest = construct_band_list(schedule, NULL, 0, active, schedule->n); - - free(active); - - return forest; -} - -/* Return the roots of a band forest representation of the schedule. - */ -__isl_give isl_band_list *isl_schedule_get_band_forest( - __isl_keep isl_schedule *schedule) -{ - if (!schedule) - return NULL; - if (!schedule->band_forest) - schedule->band_forest = construct_forest(schedule); - return isl_band_list_dup(schedule->band_forest); -} - -static __isl_give isl_printer *print_band_list(__isl_take isl_printer *p, - __isl_keep isl_band_list *list); - -static __isl_give isl_printer *print_band(__isl_take isl_printer *p, - __isl_keep isl_band *band) -{ - isl_band_list *children; - - p = isl_printer_start_line(p); - p = isl_printer_print_union_map(p, band->map); - p = isl_printer_end_line(p); - - if (!isl_band_has_children(band)) - return p; - - children = isl_band_get_children(band); - - p = isl_printer_indent(p, 4); - p = print_band_list(p, children); - p = isl_printer_indent(p, -4); - - isl_band_list_free(children); - - return p; -} - -static __isl_give isl_printer *print_band_list(__isl_take isl_printer *p, - __isl_keep isl_band_list *list) -{ - int i, n; - - n = isl_band_list_n_band(list); - for (i = 0; i < n; ++i) { - isl_band *band; - band = isl_band_list_get_band(list, i); - p = print_band(p, band); - isl_band_free(band); - } - - return p; -} - -__isl_give isl_printer *isl_printer_print_schedule(__isl_take isl_printer *p, - __isl_keep isl_schedule *schedule) -{ - isl_band_list *forest; - - forest = isl_schedule_get_band_forest(schedule); - - p = print_band_list(p, forest); - - isl_band_list_free(forest); - - return p; -} - -void isl_schedule_dump(__isl_keep isl_schedule *schedule) -{ - isl_printer *printer; - - if (!schedule) - return; - - printer = isl_printer_to_file(isl_schedule_get_ctx(schedule), stderr); - printer = isl_printer_print_schedule(printer, schedule); - - isl_printer_free(printer); -} diff --git a/cloog-0.17.0/isl/isl_schedule_private.h b/cloog-0.17.0/isl/isl_schedule_private.h deleted file mode 100644 index cbf1f9c..0000000 --- a/cloog-0.17.0/isl/isl_schedule_private.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef ISL_SCHEDLUE_PRIVATE_H -#define ISL_SCHEDLUE_PRIVATE_H - -#include - -/* The schedule for an individual domain, plus information about the bands - * and scheduling dimensions. - * In particular, we keep track of the number of bands and for each - * band, the starting position of the next band. The first band starts at - * position 0. - * For each scheduling dimension, we keep track of whether it result - * in zero dependence distances (within its band) with respect - * to the proximity edges. - */ -struct isl_schedule_node { - isl_map *sched; - int n_band; - int *band_end; - int *band_id; - int *zero; -}; - -/* Information about the computed schedule. - * n is the number of nodes/domains/statements. - * n_band is the maximal number of bands. - * n_total_row is the number of coordinates of the schedule. - * dim contains a description of the parameters. - * band_forest points to a band forest representation of the schedule - * and may be NULL if the forest hasn't been created yet. - */ -struct isl_schedule { - int ref; - - int n; - int n_band; - int n_total_row; - isl_space *dim; - - isl_band_list *band_forest; - - struct isl_schedule_node node[1]; -}; - -#endif diff --git a/cloog-0.17.0/isl/isl_seq.c b/cloog-0.17.0/isl/isl_seq.c deleted file mode 100644 index dd80c19..0000000 --- a/cloog-0.17.0/isl/isl_seq.c +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include - -void isl_seq_clr(isl_int *p, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_set_si(p[i], 0); -} - -void isl_seq_set(isl_int *p, isl_int v, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_set(p[i], v); -} - -void isl_seq_neg(isl_int *dst, isl_int *src, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_neg(dst[i], src[i]); -} - -void isl_seq_cpy(isl_int *dst, isl_int *src, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_set(dst[i], src[i]); -} - -void isl_seq_submul(isl_int *dst, isl_int f, isl_int *src, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_submul(dst[i], f, src[i]); -} - -void isl_seq_addmul(isl_int *dst, isl_int f, isl_int *src, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_addmul(dst[i], f, src[i]); -} - -void isl_seq_swp_or_cpy(isl_int *dst, isl_int *src, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_swap_or_set(dst[i], src[i]); -} - -void isl_seq_scale(isl_int *dst, isl_int *src, isl_int m, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_mul(dst[i], src[i], m); -} - -void isl_seq_scale_down(isl_int *dst, isl_int *src, isl_int m, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_divexact(dst[i], src[i], m); -} - -void isl_seq_cdiv_q(isl_int *dst, isl_int *src, isl_int m, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_cdiv_q(dst[i], src[i], m); -} - -void isl_seq_fdiv_q(isl_int *dst, isl_int *src, isl_int m, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_fdiv_q(dst[i], src[i], m); -} - -void isl_seq_fdiv_r(isl_int *dst, isl_int *src, isl_int m, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - isl_int_fdiv_r(dst[i], src[i], m); -} - -void isl_seq_combine(isl_int *dst, isl_int m1, isl_int *src1, - isl_int m2, isl_int *src2, unsigned len) -{ - int i; - isl_int tmp; - - isl_int_init(tmp); - for (i = 0; i < len; ++i) { - isl_int_mul(tmp, m1, src1[i]); - isl_int_addmul(tmp, m2, src2[i]); - isl_int_set(dst[i], tmp); - } - isl_int_clear(tmp); -} - -/* - * Let d = dst[pos] and s = src[pos] - * dst is replaced by |s| dst - sgn(s)d src - */ -void isl_seq_elim(isl_int *dst, isl_int *src, unsigned pos, unsigned len, - isl_int *m) -{ - isl_int a; - isl_int b; - - if (isl_int_is_zero(dst[pos])) - return; - - isl_int_init(a); - isl_int_init(b); - - isl_int_gcd(a, src[pos], dst[pos]); - isl_int_divexact(b, dst[pos], a); - if (isl_int_is_pos(src[pos])) - isl_int_neg(b, b); - isl_int_divexact(a, src[pos], a); - isl_int_abs(a, a); - isl_seq_combine(dst, a, dst, b, src, len); - - if (m) - isl_int_mul(*m, *m, a); - - isl_int_clear(a); - isl_int_clear(b); -} - -int isl_seq_eq(isl_int *p1, isl_int *p2, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - if (isl_int_ne(p1[i], p2[i])) - return 0; - return 1; -} - -int isl_seq_cmp(isl_int *p1, isl_int *p2, unsigned len) -{ - int i; - int cmp; - for (i = 0; i < len; ++i) - if ((cmp = isl_int_cmp(p1[i], p2[i])) != 0) - return cmp; - return 0; -} - -int isl_seq_is_neg(isl_int *p1, isl_int *p2, unsigned len) -{ - int i; - - for (i = 0; i < len; ++i) { - if (isl_int_abs_ne(p1[i], p2[i])) - return 0; - if (isl_int_is_zero(p1[i])) - continue; - if (isl_int_eq(p1[i], p2[i])) - return 0; - } - return 1; -} - -int isl_seq_first_non_zero(isl_int *p, unsigned len) -{ - int i; - - for (i = 0; i < len; ++i) - if (!isl_int_is_zero(p[i])) - return i; - return -1; -} - -int isl_seq_last_non_zero(isl_int *p, unsigned len) -{ - int i; - - for (i = len - 1; i >= 0; --i) - if (!isl_int_is_zero(p[i])) - return i; - return -1; -} - -int isl_seq_abs_min_non_zero(isl_int *p, unsigned len) -{ - int i, min = isl_seq_first_non_zero(p, len); - if (min < 0) - return -1; - for (i = min + 1; i < len; ++i) { - if (isl_int_is_zero(p[i])) - continue; - if (isl_int_abs_lt(p[i], p[min])) - min = i; - } - return min; -} - -void isl_seq_gcd(isl_int *p, unsigned len, isl_int *gcd) -{ - int i, min = isl_seq_abs_min_non_zero(p, len); - - if (min < 0) { - isl_int_set_si(*gcd, 0); - return; - } - isl_int_abs(*gcd, p[min]); - for (i = 0; isl_int_cmp_si(*gcd, 1) > 0 && i < len; ++i) { - if (i == min) - continue; - if (isl_int_is_zero(p[i])) - continue; - isl_int_gcd(*gcd, *gcd, p[i]); - } -} - -void isl_seq_normalize(struct isl_ctx *ctx, isl_int *p, unsigned len) -{ - if (len == 0) - return; - isl_seq_gcd(p, len, &ctx->normalize_gcd); - if (!isl_int_is_zero(ctx->normalize_gcd) && - !isl_int_is_one(ctx->normalize_gcd)) - isl_seq_scale_down(p, p, ctx->normalize_gcd, len); -} - -void isl_seq_lcm(isl_int *p, unsigned len, isl_int *lcm) -{ - int i; - - if (len == 0) { - isl_int_set_si(*lcm, 1); - return; - } - isl_int_set(*lcm, p[0]); - for (i = 1; i < len; ++i) - isl_int_lcm(*lcm, *lcm, p[i]); -} - -void isl_seq_inner_product(isl_int *p1, isl_int *p2, unsigned len, - isl_int *prod) -{ - int i; - if (len == 0) { - isl_int_set_si(*prod, 0); - return; - } - isl_int_mul(*prod, p1[0], p2[0]); - for (i = 1; i < len; ++i) - isl_int_addmul(*prod, p1[i], p2[i]); -} - -uint32_t isl_seq_hash(isl_int *p, unsigned len, uint32_t hash) -{ - int i; - for (i = 0; i < len; ++i) { - if (isl_int_is_zero(p[i])) - continue; - hash *= 16777619; - hash ^= (i & 0xFF); - hash = isl_int_hash(p[i], hash); - } - return hash; -} - -uint32_t isl_seq_get_hash(isl_int *p, unsigned len) -{ - uint32_t hash = isl_hash_init(); - - return isl_seq_hash(p, len, hash); -} - -uint32_t isl_seq_get_hash_bits(isl_int *p, unsigned len, unsigned bits) -{ - uint32_t hash; - - hash = isl_seq_get_hash(p, len); - return isl_hash_bits(hash, bits); -} diff --git a/cloog-0.17.0/isl/isl_space.c b/cloog-0.17.0/isl/isl_space.c deleted file mode 100644 index ae68013..0000000 --- a/cloog-0.17.0/isl/isl_space.c +++ /dev/null @@ -1,1682 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include -#include -#include - -isl_ctx *isl_space_get_ctx(__isl_keep isl_space *dim) -{ - return dim ? dim->ctx : NULL; -} - -__isl_give isl_space *isl_space_alloc(isl_ctx *ctx, - unsigned nparam, unsigned n_in, unsigned n_out) -{ - isl_space *dim; - - dim = isl_alloc_type(ctx, struct isl_space); - if (!dim) - return NULL; - - dim->ctx = ctx; - isl_ctx_ref(ctx); - dim->ref = 1; - dim->nparam = nparam; - dim->n_in = n_in; - dim->n_out = n_out; - - dim->tuple_id[0] = NULL; - dim->tuple_id[1] = NULL; - - dim->nested[0] = NULL; - dim->nested[1] = NULL; - - dim->n_id = 0; - dim->ids = NULL; - - return dim; -} - -/* Mark the space as being that of a set, by setting the domain tuple - * to isl_id_none. - */ -static __isl_give isl_space *mark_as_set(__isl_take isl_space *space) -{ - space = isl_space_cow(space); - if (!space) - return NULL; - space = isl_space_set_tuple_id(space, isl_dim_in, &isl_id_none); - return space; -} - -/* Is the space that of a set? - */ -int isl_space_is_set(__isl_keep isl_space *space) -{ - if (!space) - return -1; - if (space->n_in != 0 || space->nested[0]) - return 0; - if (space->tuple_id[0] != &isl_id_none) - return 0; - return 1; -} - -__isl_give isl_space *isl_space_set_alloc(isl_ctx *ctx, - unsigned nparam, unsigned dim) -{ - isl_space *space; - space = isl_space_alloc(ctx, nparam, 0, dim); - space = mark_as_set(space); - return space; -} - -/* Mark the space as being that of a parameter domain, by setting - * both tuples to isl_id_none. - */ -static __isl_give isl_space *mark_as_params(isl_space *space) -{ - if (!space) - return NULL; - space = isl_space_set_tuple_id(space, isl_dim_in, &isl_id_none); - space = isl_space_set_tuple_id(space, isl_dim_out, &isl_id_none); - return space; -} - -/* Is the space that of a parameter domain? - */ -int isl_space_is_params(__isl_keep isl_space *space) -{ - if (!space) - return -1; - if (space->n_in != 0 || space->nested[0] || - space->n_out != 0 || space->nested[1]) - return 0; - if (space->tuple_id[0] != &isl_id_none) - return 0; - if (space->tuple_id[1] != &isl_id_none) - return 0; - return 1; -} - -/* Create a space for a parameter domain. - */ -__isl_give isl_space *isl_space_params_alloc(isl_ctx *ctx, unsigned nparam) -{ - isl_space *space; - space = isl_space_alloc(ctx, nparam, 0, 0); - space = mark_as_params(space); - return space; -} - -static unsigned global_pos(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos) -{ - struct isl_ctx *ctx = dim->ctx; - - switch (type) { - case isl_dim_param: - isl_assert(ctx, pos < dim->nparam, - return isl_space_dim(dim, isl_dim_all)); - return pos; - case isl_dim_in: - isl_assert(ctx, pos < dim->n_in, - return isl_space_dim(dim, isl_dim_all)); - return pos + dim->nparam; - case isl_dim_out: - isl_assert(ctx, pos < dim->n_out, - return isl_space_dim(dim, isl_dim_all)); - return pos + dim->nparam + dim->n_in; - default: - isl_assert(ctx, 0, return isl_space_dim(dim, isl_dim_all)); - } - return isl_space_dim(dim, isl_dim_all); -} - -/* Extend length of ids array to the total number of dimensions. - */ -static __isl_give isl_space *extend_ids(__isl_take isl_space *dim) -{ - isl_id **ids; - int i; - - if (isl_space_dim(dim, isl_dim_all) <= dim->n_id) - return dim; - - if (!dim->ids) { - dim->ids = isl_calloc_array(dim->ctx, - isl_id *, isl_space_dim(dim, isl_dim_all)); - if (!dim->ids) - goto error; - } else { - ids = isl_realloc_array(dim->ctx, dim->ids, - isl_id *, isl_space_dim(dim, isl_dim_all)); - if (!ids) - goto error; - dim->ids = ids; - for (i = dim->n_id; i < isl_space_dim(dim, isl_dim_all); ++i) - dim->ids[i] = NULL; - } - - dim->n_id = isl_space_dim(dim, isl_dim_all); - - return dim; -error: - isl_space_free(dim); - return NULL; -} - -static __isl_give isl_space *set_id(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id) -{ - dim = isl_space_cow(dim); - - if (!dim) - goto error; - - pos = global_pos(dim, type, pos); - if (pos == isl_space_dim(dim, isl_dim_all)) - goto error; - - if (pos >= dim->n_id) { - if (!id) - return dim; - dim = extend_ids(dim); - if (!dim) - goto error; - } - - dim->ids[pos] = id; - - return dim; -error: - isl_id_free(id); - isl_space_free(dim); - return NULL; -} - -static __isl_keep isl_id *get_id(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos) -{ - if (!dim) - return NULL; - - pos = global_pos(dim, type, pos); - if (pos == isl_space_dim(dim, isl_dim_all)) - return NULL; - if (pos >= dim->n_id) - return NULL; - return dim->ids[pos]; -} - -static unsigned offset(__isl_keep isl_space *dim, enum isl_dim_type type) -{ - switch (type) { - case isl_dim_param: return 0; - case isl_dim_in: return dim->nparam; - case isl_dim_out: return dim->nparam + dim->n_in; - default: return 0; - } -} - -static unsigned n(__isl_keep isl_space *dim, enum isl_dim_type type) -{ - switch (type) { - case isl_dim_param: return dim->nparam; - case isl_dim_in: return dim->n_in; - case isl_dim_out: return dim->n_out; - case isl_dim_all: return dim->nparam + dim->n_in + dim->n_out; - default: return 0; - } -} - -unsigned isl_space_dim(__isl_keep isl_space *dim, enum isl_dim_type type) -{ - if (!dim) - return 0; - return n(dim, type); -} - -unsigned isl_space_offset(__isl_keep isl_space *dim, enum isl_dim_type type) -{ - if (!dim) - return 0; - return offset(dim, type); -} - -static __isl_give isl_space *copy_ids(__isl_take isl_space *dst, - enum isl_dim_type dst_type, unsigned offset, __isl_keep isl_space *src, - enum isl_dim_type src_type) -{ - int i; - isl_id *id; - - if (!dst) - return NULL; - - for (i = 0; i < n(src, src_type); ++i) { - id = get_id(src, src_type, i); - if (!id) - continue; - dst = set_id(dst, dst_type, offset + i, isl_id_copy(id)); - if (!dst) - return NULL; - } - return dst; -} - -__isl_take isl_space *isl_space_dup(__isl_keep isl_space *dim) -{ - isl_space *dup; - if (!dim) - return NULL; - dup = isl_space_alloc(dim->ctx, dim->nparam, dim->n_in, dim->n_out); - if (dim->tuple_id[0] && - !(dup->tuple_id[0] = isl_id_copy(dim->tuple_id[0]))) - goto error; - if (dim->tuple_id[1] && - !(dup->tuple_id[1] = isl_id_copy(dim->tuple_id[1]))) - goto error; - if (dim->nested[0] && !(dup->nested[0] = isl_space_copy(dim->nested[0]))) - goto error; - if (dim->nested[1] && !(dup->nested[1] = isl_space_copy(dim->nested[1]))) - goto error; - if (!dim->ids) - return dup; - dup = copy_ids(dup, isl_dim_param, 0, dim, isl_dim_param); - dup = copy_ids(dup, isl_dim_in, 0, dim, isl_dim_in); - dup = copy_ids(dup, isl_dim_out, 0, dim, isl_dim_out); - return dup; -error: - isl_space_free(dup); - return NULL; -} - -__isl_give isl_space *isl_space_cow(__isl_take isl_space *dim) -{ - if (!dim) - return NULL; - - if (dim->ref == 1) - return dim; - dim->ref--; - return isl_space_dup(dim); -} - -__isl_give isl_space *isl_space_copy(__isl_keep isl_space *dim) -{ - if (!dim) - return NULL; - - dim->ref++; - return dim; -} - -void isl_space_free(__isl_take isl_space *dim) -{ - int i; - - if (!dim) - return; - - if (--dim->ref > 0) - return; - - isl_id_free(dim->tuple_id[0]); - isl_id_free(dim->tuple_id[1]); - - isl_space_free(dim->nested[0]); - isl_space_free(dim->nested[1]); - - for (i = 0; i < dim->n_id; ++i) - isl_id_free(dim->ids[i]); - free(dim->ids); - isl_ctx_deref(dim->ctx); - - free(dim); -} - -static int name_ok(isl_ctx *ctx, const char *s) -{ - char *p; - long dummy; - - dummy = strtol(s, &p, 0); - if (p != s) - isl_die(ctx, isl_error_invalid, "name looks like a number", - return 0); - - return 1; -} - -int isl_space_has_tuple_id(__isl_keep isl_space *dim, enum isl_dim_type type) -{ - if (!dim) - return -1; - if (isl_space_is_params(dim)) - isl_die(dim->ctx, isl_error_invalid, - "parameter spaces don't have tuple ids", return -1); - if (isl_space_is_set(dim) && type != isl_dim_set) - isl_die(dim->ctx, isl_error_invalid, - "set spaces can only have a set id", return -1); - if (type != isl_dim_in && type != isl_dim_out) - isl_die(dim->ctx, isl_error_invalid, - "only input, output and set tuples can have ids", - return -1); - return dim->tuple_id[type - isl_dim_in] != NULL; -} - -__isl_give isl_id *isl_space_get_tuple_id(__isl_keep isl_space *dim, - enum isl_dim_type type) -{ - int has_id; - - if (!dim) - return NULL; - has_id = isl_space_has_tuple_id(dim, type); - if (has_id < 0) - return NULL; - if (!has_id) - isl_die(dim->ctx, isl_error_invalid, - "tuple has no id", return NULL); - return isl_id_copy(dim->tuple_id[type - isl_dim_in]); -} - -__isl_give isl_space *isl_space_set_tuple_id(__isl_take isl_space *dim, - enum isl_dim_type type, __isl_take isl_id *id) -{ - dim = isl_space_cow(dim); - if (!dim || !id) - goto error; - if (type != isl_dim_in && type != isl_dim_out) - isl_die(dim->ctx, isl_error_invalid, - "only input, output and set tuples can have names", - goto error); - - isl_id_free(dim->tuple_id[type - isl_dim_in]); - dim->tuple_id[type - isl_dim_in] = id; - - return dim; -error: - isl_id_free(id); - isl_space_free(dim); - return NULL; -} - -__isl_give isl_space *isl_space_reset_tuple_id(__isl_take isl_space *dim, - enum isl_dim_type type) -{ - dim = isl_space_cow(dim); - if (!dim) - return NULL; - if (type != isl_dim_in && type != isl_dim_out) - isl_die(dim->ctx, isl_error_invalid, - "only input, output and set tuples can have names", - goto error); - - isl_id_free(dim->tuple_id[type - isl_dim_in]); - dim->tuple_id[type - isl_dim_in] = NULL; - - return dim; -error: - isl_space_free(dim); - return NULL; -} - -__isl_give isl_space *isl_space_set_dim_id(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos, __isl_take isl_id *id) -{ - dim = isl_space_cow(dim); - if (!dim || !id) - goto error; - isl_id_free(get_id(dim, type, pos)); - return set_id(dim, type, pos, id); -error: - isl_id_free(id); - isl_space_free(dim); - return NULL; -} - -int isl_space_has_dim_id(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos) -{ - if (!dim) - return -1; - return get_id(dim, type, pos) != NULL; -} - -__isl_give isl_id *isl_space_get_dim_id(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos) -{ - if (!dim) - return NULL; - if (!get_id(dim, type, pos)) - isl_die(dim->ctx, isl_error_invalid, - "dim has no id", return NULL); - return isl_id_copy(get_id(dim, type, pos)); -} - -__isl_give isl_space *isl_space_set_tuple_name(__isl_take isl_space *dim, - enum isl_dim_type type, const char *s) -{ - isl_id *id; - - if (!dim) - return NULL; - - if (!s) - return isl_space_reset_tuple_id(dim, type); - - if (!name_ok(dim->ctx, s)) - goto error; - - id = isl_id_alloc(dim->ctx, s, NULL); - return isl_space_set_tuple_id(dim, type, id); -error: - isl_space_free(dim); - return NULL; -} - -const char *isl_space_get_tuple_name(__isl_keep isl_space *dim, - enum isl_dim_type type) -{ - isl_id *id; - if (!dim) - return NULL; - if (type != isl_dim_in && type != isl_dim_out) - return NULL; - id = dim->tuple_id[type - isl_dim_in]; - return id ? id->name : NULL; -} - -__isl_give isl_space *isl_space_set_dim_name(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos, - const char *s) -{ - isl_id *id; - - if (!dim) - return NULL; - if (!name_ok(dim->ctx, s)) - goto error; - id = isl_id_alloc(dim->ctx, s, NULL); - return isl_space_set_dim_id(dim, type, pos, id); -error: - isl_space_free(dim); - return NULL; -} - -__isl_keep const char *isl_space_get_dim_name(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos) -{ - isl_id *id = get_id(dim, type, pos); - return id ? id->name : NULL; -} - -int isl_space_find_dim_by_id(__isl_keep isl_space *dim, enum isl_dim_type type, - __isl_keep isl_id *id) -{ - int i; - int offset; - int n; - - if (!dim || !id) - return -1; - - offset = isl_space_offset(dim, type); - n = isl_space_dim(dim, type); - for (i = 0; i < n && offset + i < dim->n_id; ++i) - if (dim->ids[offset + i] == id) - return i; - - return -1; -} - -int isl_space_find_dim_by_name(__isl_keep isl_space *space, - enum isl_dim_type type, const char *name) -{ - int i; - int offset; - int n; - - if (!space || !name) - return -1; - - offset = isl_space_offset(space, type); - n = isl_space_dim(space, type); - for (i = 0; i < n && offset + i < space->n_id; ++i) - if (space->ids[offset + i]->name && - !strcmp(space->ids[offset + i]->name, name)) - return i; - - return -1; -} - -static __isl_keep isl_id *tuple_id(__isl_keep isl_space *dim, - enum isl_dim_type type) -{ - if (!dim) - return NULL; - if (type == isl_dim_in) - return dim->tuple_id[0]; - if (type == isl_dim_out) - return dim->tuple_id[1]; - return NULL; -} - -static __isl_keep isl_space *nested(__isl_keep isl_space *dim, - enum isl_dim_type type) -{ - if (!dim) - return NULL; - if (type == isl_dim_in) - return dim->nested[0]; - if (type == isl_dim_out) - return dim->nested[1]; - return NULL; -} - -int isl_space_tuple_match(__isl_keep isl_space *dim1, enum isl_dim_type dim1_type, - __isl_keep isl_space *dim2, enum isl_dim_type dim2_type) -{ - isl_id *id1, *id2; - isl_space *nested1, *nested2; - - if (!dim1 || !dim2) - return -1; - - if (dim1 == dim2 && dim1_type == dim2_type) - return 1; - - if (n(dim1, dim1_type) != n(dim2, dim2_type)) - return 0; - id1 = tuple_id(dim1, dim1_type); - id2 = tuple_id(dim2, dim2_type); - if (!id1 ^ !id2) - return 0; - if (id1 && id1 != id2) - return 0; - nested1 = nested(dim1, dim1_type); - nested2 = nested(dim2, dim2_type); - if (!nested1 ^ !nested2) - return 0; - if (nested1 && !isl_space_is_equal(nested1, nested2)) - return 0; - return 1; -} - -static int match(__isl_keep isl_space *dim1, enum isl_dim_type dim1_type, - __isl_keep isl_space *dim2, enum isl_dim_type dim2_type) -{ - int i; - - if (dim1 == dim2 && dim1_type == dim2_type) - return 1; - - if (!isl_space_tuple_match(dim1, dim1_type, dim2, dim2_type)) - return 0; - - if (!dim1->ids && !dim2->ids) - return 1; - - for (i = 0; i < n(dim1, dim1_type); ++i) { - if (get_id(dim1, dim1_type, i) != get_id(dim2, dim2_type, i)) - return 0; - } - return 1; -} - -int isl_space_match(__isl_keep isl_space *dim1, enum isl_dim_type dim1_type, - __isl_keep isl_space *dim2, enum isl_dim_type dim2_type) -{ - if (!dim1 || !dim2) - return -1; - - return match(dim1, dim1_type, dim2, dim2_type); -} - -static void get_ids(__isl_keep isl_space *dim, enum isl_dim_type type, - unsigned first, unsigned n, __isl_keep isl_id **ids) -{ - int i; - - for (i = 0; i < n ; ++i) - ids[i] = get_id(dim, type, first + i); -} - -__isl_give isl_space *isl_space_extend(__isl_take isl_space *dim, - unsigned nparam, unsigned n_in, unsigned n_out) -{ - isl_id **ids = NULL; - - if (!dim) - return NULL; - if (dim->nparam == nparam && dim->n_in == n_in && dim->n_out == n_out) - return dim; - - isl_assert(dim->ctx, dim->nparam <= nparam, goto error); - isl_assert(dim->ctx, dim->n_in <= n_in, goto error); - isl_assert(dim->ctx, dim->n_out <= n_out, goto error); - - dim = isl_space_cow(dim); - - if (dim->ids) { - ids = isl_calloc_array(dim->ctx, isl_id *, - nparam + n_in + n_out); - if (!ids) - goto error; - get_ids(dim, isl_dim_param, 0, dim->nparam, ids); - get_ids(dim, isl_dim_in, 0, dim->n_in, ids + nparam); - get_ids(dim, isl_dim_out, 0, dim->n_out, ids + nparam + n_in); - free(dim->ids); - dim->ids = ids; - dim->n_id = nparam + n_in + n_out; - } - dim->nparam = nparam; - dim->n_in = n_in; - dim->n_out = n_out; - - return dim; -error: - free(ids); - isl_space_free(dim); - return NULL; -} - -__isl_give isl_space *isl_space_add_dims(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned n) -{ - if (!dim) - return NULL; - dim = isl_space_reset(dim, type); - switch (type) { - case isl_dim_param: - dim = isl_space_extend(dim, - dim->nparam + n, dim->n_in, dim->n_out); - if (dim && dim->nested[0] && - !(dim->nested[0] = isl_space_add_dims(dim->nested[0], - isl_dim_param, n))) - goto error; - if (dim && dim->nested[1] && - !(dim->nested[1] = isl_space_add_dims(dim->nested[1], - isl_dim_param, n))) - goto error; - return dim; - case isl_dim_in: - return isl_space_extend(dim, - dim->nparam, dim->n_in + n, dim->n_out); - case isl_dim_out: - return isl_space_extend(dim, - dim->nparam, dim->n_in, dim->n_out + n); - default: - isl_die(dim->ctx, isl_error_invalid, - "cannot add dimensions of specified type", goto error); - } -error: - isl_space_free(dim); - return NULL; -} - -static int valid_dim_type(enum isl_dim_type type) -{ - switch (type) { - case isl_dim_param: - case isl_dim_in: - case isl_dim_out: - return 1; - default: - return 0; - } -} - -__isl_give isl_space *isl_space_insert_dims(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned pos, unsigned n) -{ - isl_id **ids = NULL; - - if (!dim) - return NULL; - if (n == 0) - return isl_space_reset(dim, type); - - if (!valid_dim_type(type)) - isl_die(dim->ctx, isl_error_invalid, - "cannot insert dimensions of specified type", - goto error); - - isl_assert(dim->ctx, pos <= isl_space_dim(dim, type), goto error); - - dim = isl_space_cow(dim); - if (!dim) - return NULL; - - if (dim->ids) { - enum isl_dim_type t; - int off; - int s[3]; - int *size = s - isl_dim_param; - ids = isl_calloc_array(dim->ctx, isl_id *, - dim->nparam + dim->n_in + dim->n_out + n); - if (!ids) - goto error; - off = 0; - size[isl_dim_param] = dim->nparam; - size[isl_dim_in] = dim->n_in; - size[isl_dim_out] = dim->n_out; - for (t = isl_dim_param; t <= isl_dim_out; ++t) { - if (t != type) { - get_ids(dim, t, 0, size[t], ids + off); - off += size[t]; - } else { - get_ids(dim, t, 0, pos, ids + off); - off += pos + n; - get_ids(dim, t, pos, size[t] - pos, ids + off); - off += size[t] - pos; - } - } - free(dim->ids); - dim->ids = ids; - dim->n_id = dim->nparam + dim->n_in + dim->n_out + n; - } - switch (type) { - case isl_dim_param: dim->nparam += n; break; - case isl_dim_in: dim->n_in += n; break; - case isl_dim_out: dim->n_out += n; break; - default: ; - } - dim = isl_space_reset(dim, type); - - return dim; -error: - isl_space_free(dim); - return NULL; -} - -__isl_give isl_space *isl_space_move_dims(__isl_take isl_space *dim, - enum isl_dim_type dst_type, unsigned dst_pos, - enum isl_dim_type src_type, unsigned src_pos, unsigned n) -{ - int i; - - if (!dim) - return NULL; - if (n == 0) - return dim; - - isl_assert(dim->ctx, src_pos + n <= isl_space_dim(dim, src_type), - goto error); - - if (dst_type == src_type && dst_pos == src_pos) - return dim; - - isl_assert(dim->ctx, dst_type != src_type, goto error); - - dim = isl_space_reset(dim, src_type); - dim = isl_space_reset(dim, dst_type); - - dim = isl_space_cow(dim); - if (!dim) - return NULL; - - if (dim->ids) { - isl_id **ids; - enum isl_dim_type t; - int off; - int s[3]; - int *size = s - isl_dim_param; - ids = isl_calloc_array(dim->ctx, isl_id *, - dim->nparam + dim->n_in + dim->n_out); - if (!ids) - goto error; - off = 0; - size[isl_dim_param] = dim->nparam; - size[isl_dim_in] = dim->n_in; - size[isl_dim_out] = dim->n_out; - for (t = isl_dim_param; t <= isl_dim_out; ++t) { - if (t == dst_type) { - get_ids(dim, t, 0, dst_pos, ids + off); - off += dst_pos; - get_ids(dim, src_type, src_pos, n, ids + off); - off += n; - get_ids(dim, t, dst_pos, size[t] - dst_pos, - ids + off); - off += size[t] - dst_pos; - } else if (t == src_type) { - get_ids(dim, t, 0, src_pos, ids + off); - off += src_pos; - get_ids(dim, t, src_pos + n, - size[t] - src_pos - n, ids + off); - off += size[t] - src_pos - n; - } else { - get_ids(dim, t, 0, size[t], ids + off); - off += size[t]; - } - } - free(dim->ids); - dim->ids = ids; - dim->n_id = dim->nparam + dim->n_in + dim->n_out; - } - - switch (dst_type) { - case isl_dim_param: dim->nparam += n; break; - case isl_dim_in: dim->n_in += n; break; - case isl_dim_out: dim->n_out += n; break; - default: ; - } - - switch (src_type) { - case isl_dim_param: dim->nparam -= n; break; - case isl_dim_in: dim->n_in -= n; break; - case isl_dim_out: dim->n_out -= n; break; - default: ; - } - - if (dst_type != isl_dim_param && src_type != isl_dim_param) - return dim; - - for (i = 0; i < 2; ++i) { - if (!dim->nested[i]) - continue; - dim->nested[i] = isl_space_replace(dim->nested[i], - isl_dim_param, dim); - if (!dim->nested[i]) - goto error; - } - - return dim; -error: - isl_space_free(dim); - return NULL; -} - -__isl_give isl_space *isl_space_join(__isl_take isl_space *left, - __isl_take isl_space *right) -{ - isl_space *dim; - - if (!left || !right) - goto error; - - isl_assert(left->ctx, match(left, isl_dim_param, right, isl_dim_param), - goto error); - isl_assert(left->ctx, - isl_space_tuple_match(left, isl_dim_out, right, isl_dim_in), - goto error); - - dim = isl_space_alloc(left->ctx, left->nparam, left->n_in, right->n_out); - if (!dim) - goto error; - - dim = copy_ids(dim, isl_dim_param, 0, left, isl_dim_param); - dim = copy_ids(dim, isl_dim_in, 0, left, isl_dim_in); - dim = copy_ids(dim, isl_dim_out, 0, right, isl_dim_out); - - if (dim && left->tuple_id[0] && - !(dim->tuple_id[0] = isl_id_copy(left->tuple_id[0]))) - goto error; - if (dim && right->tuple_id[1] && - !(dim->tuple_id[1] = isl_id_copy(right->tuple_id[1]))) - goto error; - if (dim && left->nested[0] && - !(dim->nested[0] = isl_space_copy(left->nested[0]))) - goto error; - if (dim && right->nested[1] && - !(dim->nested[1] = isl_space_copy(right->nested[1]))) - goto error; - - isl_space_free(left); - isl_space_free(right); - - return dim; -error: - isl_space_free(left); - isl_space_free(right); - return NULL; -} - -__isl_give isl_space *isl_space_product(__isl_take isl_space *left, - __isl_take isl_space *right) -{ - isl_space *dom1, *dom2, *nest1, *nest2; - - if (!left || !right) - goto error; - - isl_assert(left->ctx, match(left, isl_dim_param, right, isl_dim_param), - goto error); - - dom1 = isl_space_domain(isl_space_copy(left)); - dom2 = isl_space_domain(isl_space_copy(right)); - nest1 = isl_space_wrap(isl_space_join(isl_space_reverse(dom1), dom2)); - - dom1 = isl_space_range(left); - dom2 = isl_space_range(right); - nest2 = isl_space_wrap(isl_space_join(isl_space_reverse(dom1), dom2)); - - return isl_space_join(isl_space_reverse(nest1), nest2); -error: - isl_space_free(left); - isl_space_free(right); - return NULL; -} - -/* Given two spaces { A -> C } and { B -> C }, construct the space - * { [A -> B] -> C } - */ -__isl_give isl_space *isl_space_domain_product(__isl_take isl_space *left, - __isl_take isl_space *right) -{ - isl_space *ran, *dom1, *dom2, *nest; - - if (!left || !right) - goto error; - - if (!match(left, isl_dim_param, right, isl_dim_param)) - isl_die(left->ctx, isl_error_invalid, - "parameters need to match", goto error); - if (!isl_space_tuple_match(left, isl_dim_out, right, isl_dim_out)) - isl_die(left->ctx, isl_error_invalid, - "ranges need to match", goto error); - - ran = isl_space_range(isl_space_copy(left)); - - dom1 = isl_space_domain(left); - dom2 = isl_space_domain(right); - nest = isl_space_wrap(isl_space_join(isl_space_reverse(dom1), dom2)); - - return isl_space_join(isl_space_reverse(nest), ran); -error: - isl_space_free(left); - isl_space_free(right); - return NULL; -} - -__isl_give isl_space *isl_space_range_product(__isl_take isl_space *left, - __isl_take isl_space *right) -{ - isl_space *dom, *ran1, *ran2, *nest; - - if (!left || !right) - goto error; - - isl_assert(left->ctx, match(left, isl_dim_param, right, isl_dim_param), - goto error); - if (!isl_space_tuple_match(left, isl_dim_in, right, isl_dim_in)) - isl_die(left->ctx, isl_error_invalid, - "domains need to match", goto error); - - dom = isl_space_domain(isl_space_copy(left)); - - ran1 = isl_space_range(left); - ran2 = isl_space_range(right); - nest = isl_space_wrap(isl_space_join(isl_space_reverse(ran1), ran2)); - - return isl_space_join(isl_space_reverse(dom), nest); -error: - isl_space_free(left); - isl_space_free(right); - return NULL; -} - -__isl_give isl_space *isl_space_map_from_set(__isl_take isl_space *dim) -{ - isl_ctx *ctx; - isl_id **ids = NULL; - - if (!dim) - return NULL; - ctx = isl_space_get_ctx(dim); - if (!isl_space_is_set(dim)) - isl_die(ctx, isl_error_invalid, "not a set space", goto error); - dim = isl_space_cow(dim); - if (!dim) - return NULL; - if (dim->ids) { - ids = isl_calloc_array(dim->ctx, isl_id *, - dim->nparam + dim->n_out + dim->n_out); - if (!ids) - goto error; - get_ids(dim, isl_dim_param, 0, dim->nparam, ids); - get_ids(dim, isl_dim_out, 0, dim->n_out, ids + dim->nparam); - } - dim->n_in = dim->n_out; - if (ids) { - free(dim->ids); - dim->ids = ids; - dim->n_id = dim->nparam + dim->n_out + dim->n_out; - dim = copy_ids(dim, isl_dim_out, 0, dim, isl_dim_in); - } - isl_id_free(dim->tuple_id[0]); - dim->tuple_id[0] = isl_id_copy(dim->tuple_id[1]); - isl_space_free(dim->nested[0]); - dim->nested[0] = isl_space_copy(dim->nested[1]); - return dim; -error: - isl_space_free(dim); - return NULL; -} - -static __isl_give isl_space *set_ids(__isl_take isl_space *dim, - enum isl_dim_type type, - unsigned first, unsigned n, __isl_take isl_id **ids) -{ - int i; - - for (i = 0; i < n ; ++i) - dim = set_id(dim, type, first + i, ids[i]); - - return dim; -} - -__isl_give isl_space *isl_space_reverse(__isl_take isl_space *dim) -{ - unsigned t; - isl_space *nested; - isl_id **ids = NULL; - isl_id *id; - - if (!dim) - return NULL; - if (match(dim, isl_dim_in, dim, isl_dim_out)) - return dim; - - dim = isl_space_cow(dim); - if (!dim) - return NULL; - - id = dim->tuple_id[0]; - dim->tuple_id[0] = dim->tuple_id[1]; - dim->tuple_id[1] = id; - - nested = dim->nested[0]; - dim->nested[0] = dim->nested[1]; - dim->nested[1] = nested; - - if (dim->ids) { - ids = isl_alloc_array(dim->ctx, isl_id *, - dim->n_in + dim->n_out); - if (!ids) - goto error; - get_ids(dim, isl_dim_in, 0, dim->n_in, ids); - get_ids(dim, isl_dim_out, 0, dim->n_out, ids + dim->n_in); - } - - t = dim->n_in; - dim->n_in = dim->n_out; - dim->n_out = t; - - if (dim->ids) { - dim = set_ids(dim, isl_dim_out, 0, dim->n_out, ids); - dim = set_ids(dim, isl_dim_in, 0, dim->n_in, ids + dim->n_out); - free(ids); - } - - return dim; -error: - free(ids); - isl_space_free(dim); - return NULL; -} - -__isl_give isl_space *isl_space_drop_dims(__isl_take isl_space *dim, - enum isl_dim_type type, unsigned first, unsigned num) -{ - int i; - - if (!dim) - return NULL; - - if (num == 0) - return isl_space_reset(dim, type); - - if (!valid_dim_type(type)) - isl_die(dim->ctx, isl_error_invalid, - "cannot drop dimensions of specified type", goto error); - - isl_assert(dim->ctx, first + num <= n(dim, type), goto error); - dim = isl_space_cow(dim); - if (!dim) - goto error; - if (dim->ids) { - dim = extend_ids(dim); - if (!dim) - goto error; - for (i = 0; i < num; ++i) - isl_id_free(get_id(dim, type, first + i)); - for (i = first+num; i < n(dim, type); ++i) - set_id(dim, type, i - num, get_id(dim, type, i)); - switch (type) { - case isl_dim_param: - get_ids(dim, isl_dim_in, 0, dim->n_in, - dim->ids + offset(dim, isl_dim_in) - num); - case isl_dim_in: - get_ids(dim, isl_dim_out, 0, dim->n_out, - dim->ids + offset(dim, isl_dim_out) - num); - default: - ; - } - dim->n_id -= num; - } - switch (type) { - case isl_dim_param: dim->nparam -= num; break; - case isl_dim_in: dim->n_in -= num; break; - case isl_dim_out: dim->n_out -= num; break; - default: ; - } - dim = isl_space_reset(dim, type); - if (type == isl_dim_param) { - if (dim && dim->nested[0] && - !(dim->nested[0] = isl_space_drop_dims(dim->nested[0], - isl_dim_param, first, num))) - goto error; - if (dim && dim->nested[1] && - !(dim->nested[1] = isl_space_drop_dims(dim->nested[1], - isl_dim_param, first, num))) - goto error; - } - return dim; -error: - isl_space_free(dim); - return NULL; -} - -__isl_give isl_space *isl_space_drop_inputs(__isl_take isl_space *dim, - unsigned first, unsigned n) -{ - if (!dim) - return NULL; - return isl_space_drop_dims(dim, isl_dim_in, first, n); -} - -__isl_give isl_space *isl_space_drop_outputs(__isl_take isl_space *dim, - unsigned first, unsigned n) -{ - if (!dim) - return NULL; - return isl_space_drop_dims(dim, isl_dim_out, first, n); -} - -__isl_give isl_space *isl_space_domain(__isl_take isl_space *dim) -{ - if (!dim) - return NULL; - dim = isl_space_drop_outputs(dim, 0, dim->n_out); - dim = isl_space_reverse(dim); - dim = mark_as_set(dim); - return dim; -} - -__isl_give isl_space *isl_space_from_domain(__isl_take isl_space *dim) -{ - if (!dim) - return NULL; - if (!isl_space_is_set(dim)) - isl_die(isl_space_get_ctx(dim), isl_error_invalid, - "not a set space", goto error); - dim = isl_space_reverse(dim); - dim = isl_space_reset(dim, isl_dim_out); - return dim; -error: - isl_space_free(dim); - return NULL; -} - -__isl_give isl_space *isl_space_range(__isl_take isl_space *dim) -{ - if (!dim) - return NULL; - dim = isl_space_drop_inputs(dim, 0, dim->n_in); - dim = mark_as_set(dim); - return dim; -} - -__isl_give isl_space *isl_space_from_range(__isl_take isl_space *dim) -{ - if (!dim) - return NULL; - if (!isl_space_is_set(dim)) - isl_die(isl_space_get_ctx(dim), isl_error_invalid, - "not a set space", goto error); - return isl_space_reset(dim, isl_dim_in); -error: - isl_space_free(dim); - return NULL; -} - -__isl_give isl_space *isl_space_params(__isl_take isl_space *space) -{ - if (isl_space_is_params(space)) - return space; - space = isl_space_drop_dims(space, - isl_dim_in, 0, isl_space_dim(space, isl_dim_in)); - space = isl_space_drop_dims(space, - isl_dim_out, 0, isl_space_dim(space, isl_dim_out)); - space = mark_as_params(space); - return space; -} - -__isl_give isl_space *isl_space_set_from_params(__isl_take isl_space *space) -{ - if (!space) - return NULL; - if (!isl_space_is_params(space)) - isl_die(isl_space_get_ctx(space), isl_error_invalid, - "not a parameter space", goto error); - return isl_space_reset(space, isl_dim_set); -error: - isl_space_free(space); - return NULL; -} - -__isl_give isl_space *isl_space_as_set_space(__isl_take isl_space *dim) -{ - dim = isl_space_cow(dim); - if (!dim) - return NULL; - - dim->n_out += dim->n_in; - dim->n_in = 0; - dim = isl_space_reset(dim, isl_dim_in); - dim = isl_space_reset(dim, isl_dim_out); - - return dim; -} - -__isl_give isl_space *isl_space_underlying(__isl_take isl_space *dim, - unsigned n_div) -{ - int i; - - if (!dim) - return NULL; - if (n_div == 0 && - dim->nparam == 0 && dim->n_in == 0 && dim->n_id == 0) - return isl_space_reset(isl_space_reset(dim, isl_dim_in), isl_dim_out); - dim = isl_space_cow(dim); - if (!dim) - return NULL; - dim->n_out += dim->nparam + dim->n_in + n_div; - dim->nparam = 0; - dim->n_in = 0; - - for (i = 0; i < dim->n_id; ++i) - isl_id_free(get_id(dim, isl_dim_out, i)); - dim->n_id = 0; - dim = isl_space_reset(dim, isl_dim_in); - dim = isl_space_reset(dim, isl_dim_out); - - return dim; -} - -int isl_space_is_equal(__isl_keep isl_space *dim1, __isl_keep isl_space *dim2) -{ - if (!dim1 || !dim2) - return -1; - if (dim1 == dim2) - return 1; - return match(dim1, isl_dim_param, dim2, isl_dim_param) && - isl_space_tuple_match(dim1, isl_dim_in, dim2, isl_dim_in) && - isl_space_tuple_match(dim1, isl_dim_out, dim2, isl_dim_out); -} - -/* Is space1 equal to the domain of space2? - */ -int isl_space_is_domain(__isl_keep isl_space *space1, - __isl_keep isl_space *space2) -{ - if (!space1 || !space2) - return -1; - if (!isl_space_is_set(space1)) - return 0; - return match(space1, isl_dim_param, space2, isl_dim_param) && - isl_space_tuple_match(space1, isl_dim_set, space2, isl_dim_in); -} - -int isl_space_compatible(__isl_keep isl_space *dim1, - __isl_keep isl_space *dim2) -{ - return dim1->nparam == dim2->nparam && - dim1->n_in + dim1->n_out == dim2->n_in + dim2->n_out; -} - -static uint32_t isl_hash_dim(uint32_t hash, __isl_keep isl_space *dim) -{ - int i; - isl_id *id; - - if (!dim) - return hash; - - hash = isl_hash_builtin(hash, dim->nparam); - hash = isl_hash_builtin(hash, dim->n_in); - hash = isl_hash_builtin(hash, dim->n_out); - - for (i = 0; i < dim->nparam; ++i) { - id = get_id(dim, isl_dim_param, i); - hash = isl_hash_id(hash, id); - } - - id = tuple_id(dim, isl_dim_in); - hash = isl_hash_id(hash, id); - id = tuple_id(dim, isl_dim_out); - hash = isl_hash_id(hash, id); - - hash = isl_hash_dim(hash, dim->nested[0]); - hash = isl_hash_dim(hash, dim->nested[1]); - - return hash; -} - -uint32_t isl_space_get_hash(__isl_keep isl_space *dim) -{ - uint32_t hash; - - if (!dim) - return 0; - - hash = isl_hash_init(); - hash = isl_hash_dim(hash, dim); - - return hash; -} - -int isl_space_is_wrapping(__isl_keep isl_space *dim) -{ - if (!dim) - return -1; - - if (!isl_space_is_set(dim)) - return 0; - - return dim->nested[1] != NULL; -} - -__isl_give isl_space *isl_space_wrap(__isl_take isl_space *dim) -{ - isl_space *wrap; - - if (!dim) - return NULL; - - wrap = isl_space_set_alloc(dim->ctx, - dim->nparam, dim->n_in + dim->n_out); - - wrap = copy_ids(wrap, isl_dim_param, 0, dim, isl_dim_param); - wrap = copy_ids(wrap, isl_dim_set, 0, dim, isl_dim_in); - wrap = copy_ids(wrap, isl_dim_set, dim->n_in, dim, isl_dim_out); - - if (!wrap) - goto error; - - wrap->nested[1] = dim; - - return wrap; -error: - isl_space_free(dim); - return NULL; -} - -__isl_give isl_space *isl_space_unwrap(__isl_take isl_space *dim) -{ - isl_space *unwrap; - - if (!dim) - return NULL; - - if (!isl_space_is_wrapping(dim)) - isl_die(dim->ctx, isl_error_invalid, "not a wrapping dim", - goto error); - - unwrap = isl_space_copy(dim->nested[1]); - isl_space_free(dim); - - return unwrap; -error: - isl_space_free(dim); - return NULL; -} - -int isl_space_is_named_or_nested(__isl_keep isl_space *dim, enum isl_dim_type type) -{ - if (type != isl_dim_in && type != isl_dim_out) - return 0; - if (!dim) - return -1; - if (dim->tuple_id[type - isl_dim_in]) - return 1; - if (dim->nested[type - isl_dim_in]) - return 1; - return 0; -} - -int isl_space_may_be_set(__isl_keep isl_space *dim) -{ - if (!dim) - return -1; - if (isl_space_is_set(dim)) - return 1; - if (isl_space_dim(dim, isl_dim_in) != 0) - return 0; - if (isl_space_is_named_or_nested(dim, isl_dim_in)) - return 0; - return 1; -} - -__isl_give isl_space *isl_space_reset(__isl_take isl_space *dim, - enum isl_dim_type type) -{ - if (!isl_space_is_named_or_nested(dim, type)) - return dim; - - dim = isl_space_cow(dim); - if (!dim) - return NULL; - - isl_id_free(dim->tuple_id[type - isl_dim_in]); - dim->tuple_id[type - isl_dim_in] = NULL; - isl_space_free(dim->nested[type - isl_dim_in]); - dim->nested[type - isl_dim_in] = NULL; - - return dim; -} - -__isl_give isl_space *isl_space_flatten(__isl_take isl_space *dim) -{ - if (!dim) - return NULL; - if (!dim->nested[0] && !dim->nested[1]) - return dim; - - if (dim->nested[0]) - dim = isl_space_reset(dim, isl_dim_in); - if (dim && dim->nested[1]) - dim = isl_space_reset(dim, isl_dim_out); - - return dim; -} - -__isl_give isl_space *isl_space_flatten_domain(__isl_take isl_space *dim) -{ - if (!dim) - return NULL; - if (!dim->nested[0]) - return dim; - - return isl_space_reset(dim, isl_dim_in); -} - -__isl_give isl_space *isl_space_flatten_range(__isl_take isl_space *dim) -{ - if (!dim) - return NULL; - if (!dim->nested[1]) - return dim; - - return isl_space_reset(dim, isl_dim_out); -} - -/* Replace the dimensions of the given type of dst by those of src. - */ -__isl_give isl_space *isl_space_replace(__isl_take isl_space *dst, - enum isl_dim_type type, __isl_keep isl_space *src) -{ - dst = isl_space_cow(dst); - - if (!dst || !src) - goto error; - - dst = isl_space_drop_dims(dst, type, 0, isl_space_dim(dst, type)); - dst = isl_space_add_dims(dst, type, isl_space_dim(src, type)); - dst = copy_ids(dst, type, 0, src, type); - - if (dst && type == isl_dim_param) { - int i; - for (i = 0; i <= 1; ++i) { - if (!dst->nested[i]) - continue; - dst->nested[i] = isl_space_replace(dst->nested[i], - type, src); - if (!dst->nested[i]) - goto error; - } - } - - return dst; -error: - isl_space_free(dst); - return NULL; -} - -/* Given a dimension specification "dim" of a set, create a dimension - * specification for the lift of the set. In particular, the result - * is of the form [dim -> local[..]], with n_local variables in the - * range of the wrapped map. - */ -__isl_give isl_space *isl_space_lift(__isl_take isl_space *dim, unsigned n_local) -{ - isl_space *local_dim; - - if (!dim) - return NULL; - - local_dim = isl_space_dup(dim); - local_dim = isl_space_drop_dims(local_dim, isl_dim_set, 0, dim->n_out); - local_dim = isl_space_add_dims(local_dim, isl_dim_set, n_local); - local_dim = isl_space_set_tuple_name(local_dim, isl_dim_set, "local"); - dim = isl_space_join(isl_space_from_domain(dim), - isl_space_from_range(local_dim)); - dim = isl_space_wrap(dim); - dim = isl_space_set_tuple_name(dim, isl_dim_set, "lifted"); - - return dim; -} - -int isl_space_can_zip(__isl_keep isl_space *dim) -{ - if (!dim) - return -1; - - return dim->nested[0] && dim->nested[1]; -} - -__isl_give isl_space *isl_space_zip(__isl_take isl_space *dim) -{ - isl_space *dom, *ran; - isl_space *dom_dom, *dom_ran, *ran_dom, *ran_ran; - - if (!isl_space_can_zip(dim)) - isl_die(dim->ctx, isl_error_invalid, "dim cannot be zipped", - goto error); - - if (!dim) - return 0; - dom = isl_space_unwrap(isl_space_domain(isl_space_copy(dim))); - ran = isl_space_unwrap(isl_space_range(dim)); - dom_dom = isl_space_domain(isl_space_copy(dom)); - dom_ran = isl_space_range(dom); - ran_dom = isl_space_domain(isl_space_copy(ran)); - ran_ran = isl_space_range(ran); - dom = isl_space_join(isl_space_from_domain(dom_dom), - isl_space_from_range(ran_dom)); - ran = isl_space_join(isl_space_from_domain(dom_ran), - isl_space_from_range(ran_ran)); - return isl_space_join(isl_space_from_domain(isl_space_wrap(dom)), - isl_space_from_range(isl_space_wrap(ran))); -error: - isl_space_free(dim); - return NULL; -} - -int isl_space_has_named_params(__isl_keep isl_space *dim) -{ - int i; - unsigned off; - - if (!dim) - return -1; - if (dim->nparam == 0) - return 1; - off = isl_space_offset(dim, isl_dim_param); - if (off + dim->nparam > dim->n_id) - return 0; - for (i = 0; i < dim->nparam; ++i) - if (!dim->ids[off + i]) - return 0; - return 1; -} - -/* Align the initial parameters of dim1 to match the order in dim2. - */ -__isl_give isl_space *isl_space_align_params(__isl_take isl_space *dim1, - __isl_take isl_space *dim2) -{ - isl_reordering *exp; - - if (!isl_space_has_named_params(dim1) || !isl_space_has_named_params(dim2)) - isl_die(isl_space_get_ctx(dim1), isl_error_invalid, - "parameter alignment requires named parameters", - goto error); - - dim2 = isl_space_params(dim2); - exp = isl_parameter_alignment_reordering(dim1, dim2); - exp = isl_reordering_extend_space(exp, dim1); - isl_space_free(dim2); - if (!exp) - return NULL; - dim1 = isl_space_copy(exp->dim); - isl_reordering_free(exp); - return dim1; -error: - isl_space_free(dim1); - isl_space_free(dim2); - return NULL; -} - -/* Given the space of set (domain), construct a space for a map - * with as domain the given space and as range the range of "model". - */ -__isl_give isl_space *isl_space_extend_domain_with_range( - __isl_take isl_space *domain, __isl_take isl_space *model) -{ - isl_space *space; - - space = isl_space_from_domain(domain); - space = isl_space_add_dims(space, isl_dim_out, - isl_space_dim(model, isl_dim_out)); - if (isl_space_has_tuple_id(model, isl_dim_out)) - space = isl_space_set_tuple_id(space, isl_dim_out, - isl_space_get_tuple_id(model, isl_dim_out)); - isl_space_free(model); - return space; -} diff --git a/cloog-0.17.0/isl/isl_space_private.h b/cloog-0.17.0/isl/isl_space_private.h deleted file mode 100644 index 73762de..0000000 --- a/cloog-0.17.0/isl/isl_space_private.h +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include -#include - -struct isl_name; -struct isl_space { - int ref; - - struct isl_ctx *ctx; - - unsigned nparam; - unsigned n_in; /* zero for sets */ - unsigned n_out; /* dim for sets */ - - isl_id *tuple_id[2]; - isl_space *nested[2]; - - unsigned n_id; - isl_id **ids; -}; - -__isl_give isl_space *isl_space_cow(__isl_take isl_space *dim); - -__isl_give isl_space *isl_space_underlying(__isl_take isl_space *dim, - unsigned n_div); - -uint32_t isl_space_get_hash(__isl_keep isl_space *dim); - -int isl_space_is_domain(__isl_keep isl_space *space1, - __isl_keep isl_space *space2); - -__isl_give isl_space *isl_space_as_set_space(__isl_take isl_space *dim); - -unsigned isl_space_offset(__isl_keep isl_space *dim, enum isl_dim_type type); - -int isl_space_may_be_set(__isl_keep isl_space *dim); -int isl_space_is_named_or_nested(__isl_keep isl_space *dim, enum isl_dim_type type); -int isl_space_has_named_params(__isl_keep isl_space *dim); -__isl_give isl_space *isl_space_reset(__isl_take isl_space *dim, - enum isl_dim_type type); -__isl_give isl_space *isl_space_flatten(__isl_take isl_space *dim); -__isl_give isl_space *isl_space_flatten_domain(__isl_take isl_space *dim); -__isl_give isl_space *isl_space_flatten_range(__isl_take isl_space *dim); - -__isl_give isl_space *isl_space_replace(__isl_take isl_space *dst, - enum isl_dim_type type, __isl_keep isl_space *src); - -__isl_give isl_space *isl_space_lift(__isl_take isl_space *dim, unsigned n_local); - -__isl_give isl_space *isl_space_extend_domain_with_range( - __isl_take isl_space *domain, __isl_take isl_space *model); diff --git a/cloog-0.17.0/isl/isl_stream.c b/cloog-0.17.0/isl/isl_stream.c deleted file mode 100644 index db59468..0000000 --- a/cloog-0.17.0/isl/isl_stream.c +++ /dev/null @@ -1,735 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include -#include -#include - -struct isl_keyword { - char *name; - enum isl_token_type type; -}; - -static int same_name(const void *entry, const void *val) -{ - const struct isl_keyword *keyword = (const struct isl_keyword *)entry; - - return !strcmp(keyword->name, val); -} - -enum isl_token_type isl_stream_register_keyword(struct isl_stream *s, - const char *name) -{ - struct isl_hash_table_entry *entry; - struct isl_keyword *keyword; - uint32_t name_hash; - - if (!s->keywords) { - s->keywords = isl_hash_table_alloc(s->ctx, 10); - if (!s->keywords) - return ISL_TOKEN_ERROR; - s->next_type = ISL_TOKEN_LAST; - } - - name_hash = isl_hash_string(isl_hash_init(), name); - - entry = isl_hash_table_find(s->ctx, s->keywords, name_hash, - same_name, name, 1); - if (!entry) - return ISL_TOKEN_ERROR; - if (entry->data) { - keyword = entry->data; - return keyword->type; - } - - keyword = isl_calloc_type(s->ctx, struct isl_keyword); - if (!keyword) - return ISL_TOKEN_ERROR; - keyword->type = s->next_type++; - keyword->name = strdup(name); - if (!keyword->name) { - free(keyword); - return ISL_TOKEN_ERROR; - } - entry->data = keyword; - - return keyword->type; -} - -struct isl_token *isl_token_new(isl_ctx *ctx, - int line, int col, unsigned on_new_line) -{ - struct isl_token *tok = isl_alloc_type(ctx, struct isl_token); - if (!tok) - return NULL; - tok->line = line; - tok->col = col; - tok->on_new_line = on_new_line; - tok->is_keyword = 0; - tok->u.s = NULL; - return tok; -} - -void isl_token_free(struct isl_token *tok) -{ - if (!tok) - return; - if (tok->type == ISL_TOKEN_VALUE) - isl_int_clear(tok->u.v); - else if (tok->type == ISL_TOKEN_MAP) - isl_map_free(tok->u.map); - else if (tok->type == ISL_TOKEN_AFF) - isl_pw_aff_free(tok->u.pwaff); - else - free(tok->u.s); - free(tok); -} - -void isl_stream_error(struct isl_stream *s, struct isl_token *tok, char *msg) -{ - int line = tok ? tok->line : s->line; - int col = tok ? tok->col : s->col; - fprintf(stderr, "syntax error (%d, %d): %s\n", line, col, msg); - if (tok) { - if (tok->type < 256) - fprintf(stderr, "got '%c'\n", tok->type); - else if (tok->type == ISL_TOKEN_IDENT) - fprintf(stderr, "got ident '%s'\n", tok->u.s); - else if (tok->is_keyword) - fprintf(stderr, "got keyword '%s'\n", tok->u.s); - else if (tok->type == ISL_TOKEN_VALUE) { - fprintf(stderr, "got value '"); - isl_int_print(stderr, tok->u.v, 0); - fprintf(stderr, "'\n"); - } else if (tok->type == ISL_TOKEN_MAP) { - isl_printer *p; - fprintf(stderr, "got map '"); - p = isl_printer_to_file(s->ctx, stderr); - p = isl_printer_print_map(p, tok->u.map); - isl_printer_free(p); - fprintf(stderr, "'\n"); - } else if (tok->type == ISL_TOKEN_AFF) { - isl_printer *p; - fprintf(stderr, "got affine expression '"); - p = isl_printer_to_file(s->ctx, stderr); - p = isl_printer_print_pw_aff(p, tok->u.pwaff); - isl_printer_free(p); - fprintf(stderr, "'\n"); - } else if (tok->u.s) - fprintf(stderr, "got token '%s'\n", tok->u.s); - else - fprintf(stderr, "got token type %d\n", tok->type); - } -} - -static struct isl_stream* isl_stream_new(struct isl_ctx *ctx) -{ - int i; - struct isl_stream *s = isl_alloc_type(ctx, struct isl_stream); - if (!s) - return NULL; - s->ctx = ctx; - isl_ctx_ref(s->ctx); - s->file = NULL; - s->str = NULL; - s->len = 0; - s->line = 1; - s->col = 0; - s->eof = 0; - s->c = -1; - s->n_un = 0; - for (i = 0; i < 5; ++i) - s->tokens[i] = NULL; - s->n_token = 0; - s->keywords = NULL; - s->size = 256; - s->buffer = isl_alloc_array(ctx, char, s->size); - if (!s->buffer) - goto error; - return s; -error: - isl_stream_free(s); - return NULL; -} - -struct isl_stream* isl_stream_new_file(struct isl_ctx *ctx, FILE *file) -{ - struct isl_stream *s = isl_stream_new(ctx); - if (!s) - return NULL; - s->file = file; - return s; -} - -struct isl_stream* isl_stream_new_str(struct isl_ctx *ctx, const char *str) -{ - struct isl_stream *s = isl_stream_new(ctx); - if (!s) - return NULL; - s->str = str; - return s; -} - -static int stream_getc(struct isl_stream *s) -{ - int c; - if (s->eof) - return -1; - if (s->n_un) - return s->c = s->un[--s->n_un]; - if (s->file) - c = fgetc(s->file); - else { - c = *s->str++; - if (c == '\0') - c = -1; - } - if (c == -1) - s->eof = 1; - if (!s->eof) { - if (s->c == '\n') { - s->line++; - s->col = 0; - } else - s->col++; - } - s->c = c; - return c; -} - -static void isl_stream_ungetc(struct isl_stream *s, int c) -{ - isl_assert(s->ctx, s->n_un < 5, return); - s->un[s->n_un++] = c; - s->c = -1; -} - -static int isl_stream_getc(struct isl_stream *s) -{ - int c; - - do { - c = stream_getc(s); - if (c != '\\') - return c; - c = stream_getc(s); - } while (c == '\n'); - - isl_stream_ungetc(s, c); - - return '\\'; -} - -static int isl_stream_push_char(struct isl_stream *s, int c) -{ - if (s->len >= s->size) { - char *buffer; - s->size = (3*s->size)/2; - buffer = isl_realloc_array(s->ctx, s->buffer, char, s->size); - if (!buffer) - return -1; - s->buffer = buffer; - } - s->buffer[s->len++] = c; - return 0; -} - -void isl_stream_push_token(struct isl_stream *s, struct isl_token *tok) -{ - isl_assert(s->ctx, s->n_token < 5, return); - s->tokens[s->n_token++] = tok; -} - -static enum isl_token_type check_keywords(struct isl_stream *s) -{ - struct isl_hash_table_entry *entry; - struct isl_keyword *keyword; - uint32_t name_hash; - - if (!strcasecmp(s->buffer, "exists")) - return ISL_TOKEN_EXISTS; - if (!strcasecmp(s->buffer, "and")) - return ISL_TOKEN_AND; - if (!strcasecmp(s->buffer, "or")) - return ISL_TOKEN_OR; - if (!strcasecmp(s->buffer, "not")) - return ISL_TOKEN_NOT; - if (!strcasecmp(s->buffer, "infty")) - return ISL_TOKEN_INFTY; - if (!strcasecmp(s->buffer, "infinity")) - return ISL_TOKEN_INFTY; - if (!strcasecmp(s->buffer, "NaN")) - return ISL_TOKEN_NAN; - if (!strcasecmp(s->buffer, "min")) - return ISL_TOKEN_MIN; - if (!strcasecmp(s->buffer, "max")) - return ISL_TOKEN_MAX; - if (!strcasecmp(s->buffer, "rat")) - return ISL_TOKEN_RAT; - if (!strcasecmp(s->buffer, "true")) - return ISL_TOKEN_TRUE; - if (!strcasecmp(s->buffer, "false")) - return ISL_TOKEN_FALSE; - if (!strcasecmp(s->buffer, "ceild")) - return ISL_TOKEN_CEILD; - if (!strcasecmp(s->buffer, "floord")) - return ISL_TOKEN_FLOORD; - if (!strcasecmp(s->buffer, "mod")) - return ISL_TOKEN_MOD; - - if (!s->keywords) - return ISL_TOKEN_IDENT; - - name_hash = isl_hash_string(isl_hash_init(), s->buffer); - entry = isl_hash_table_find(s->ctx, s->keywords, name_hash, same_name, - s->buffer, 0); - if (entry) { - keyword = entry->data; - return keyword->type; - } - - return ISL_TOKEN_IDENT; -} - -int isl_stream_skip_line(struct isl_stream *s) -{ - int c; - - while ((c = isl_stream_getc(s)) != -1 && c != '\n') - /* nothing */ - ; - - return c == -1 ? -1 : 0; -} - -static struct isl_token *next_token(struct isl_stream *s, int same_line) -{ - int c; - struct isl_token *tok = NULL; - int line, col; - int old_line = s->line; - - if (s->n_token) { - if (same_line && s->tokens[s->n_token - 1]->on_new_line) - return NULL; - return s->tokens[--s->n_token]; - } - - if (same_line && s->c == '\n') - return NULL; - - s->len = 0; - - /* skip spaces and comment lines */ - while ((c = isl_stream_getc(s)) != -1) { - if (c == '#') { - if (isl_stream_skip_line(s) < 0) - break; - c = '\n'; - if (same_line) - break; - } else if (!isspace(c) || (same_line && c == '\n')) - break; - } - - line = s->line; - col = s->col; - - if (c == -1 || (same_line && c == '\n')) - return NULL; - if (c == '(' || - c == ')' || - c == '+' || - c == '*' || - c == '%' || - c == '?' || - c == '^' || - c == '@' || - c == '$' || - c == ',' || - c == '.' || - c == ';' || - c == '[' || - c == ']' || - c == '{' || - c == '}') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = (enum isl_token_type)c; - return tok; - } - if (c == '-') { - int c; - if ((c = isl_stream_getc(s)) == '>') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->u.s = strdup("->"); - tok->type = ISL_TOKEN_TO; - return tok; - } - if (c != -1) - isl_stream_ungetc(s, c); - if (!isdigit(c)) { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = (enum isl_token_type) '-'; - return tok; - } - } - if (c == '-' || isdigit(c)) { - int minus = c == '-'; - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = ISL_TOKEN_VALUE; - isl_int_init(tok->u.v); - if (isl_stream_push_char(s, c)) - goto error; - while ((c = isl_stream_getc(s)) != -1 && isdigit(c)) - if (isl_stream_push_char(s, c)) - goto error; - if (c != -1) - isl_stream_ungetc(s, c); - isl_stream_push_char(s, '\0'); - isl_int_read(tok->u.v, s->buffer); - if (minus && isl_int_is_zero(tok->u.v)) { - tok->col++; - tok->on_new_line = 0; - isl_stream_push_token(s, tok); - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = (enum isl_token_type) '-'; - } - return tok; - } - if (isalpha(c) || c == '_') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - isl_stream_push_char(s, c); - while ((c = isl_stream_getc(s)) != -1 && - (isalnum(c) || c == '_')) - isl_stream_push_char(s, c); - if (c != -1) - isl_stream_ungetc(s, c); - while ((c = isl_stream_getc(s)) != -1 && c == '\'') - isl_stream_push_char(s, c); - if (c != -1) - isl_stream_ungetc(s, c); - isl_stream_push_char(s, '\0'); - tok->type = check_keywords(s); - if (tok->type != ISL_TOKEN_IDENT) - tok->is_keyword = 1; - tok->u.s = strdup(s->buffer); - if (!tok->u.s) - goto error; - return tok; - } - if (c == '"') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = ISL_TOKEN_STRING; - tok->u.s = NULL; - while ((c = isl_stream_getc(s)) != -1 && c != '"' && c != '\n') - isl_stream_push_char(s, c); - if (c != '"') { - isl_stream_error(s, NULL, "unterminated string"); - goto error; - } - isl_stream_push_char(s, '\0'); - tok->u.s = strdup(s->buffer); - return tok; - } - if (c == '=') { - int c; - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - if ((c = isl_stream_getc(s)) == '=') { - tok->u.s = strdup("=="); - tok->type = ISL_TOKEN_EQ_EQ; - return tok; - } - if (c != -1) - isl_stream_ungetc(s, c); - tok->type = (enum isl_token_type) '='; - return tok; - } - if (c == ':') { - int c; - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - if ((c = isl_stream_getc(s)) == '=') { - tok->u.s = strdup(":="); - tok->type = ISL_TOKEN_DEF; - return tok; - } - if (c != -1) - isl_stream_ungetc(s, c); - tok->type = (enum isl_token_type) ':'; - return tok; - } - if (c == '>') { - int c; - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - if ((c = isl_stream_getc(s)) == '=') { - tok->u.s = strdup(">="); - tok->type = ISL_TOKEN_GE; - return tok; - } else if (c == '>') { - if ((c = isl_stream_getc(s)) == '=') { - tok->u.s = strdup(">>="); - tok->type = ISL_TOKEN_LEX_GE; - return tok; - } - tok->u.s = strdup(">>"); - tok->type = ISL_TOKEN_LEX_GT; - } else { - tok->u.s = strdup(">"); - tok->type = ISL_TOKEN_GT; - } - if (c != -1) - isl_stream_ungetc(s, c); - return tok; - } - if (c == '<') { - int c; - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - if ((c = isl_stream_getc(s)) == '=') { - tok->u.s = strdup("<="); - tok->type = ISL_TOKEN_LE; - return tok; - } else if (c == '<') { - if ((c = isl_stream_getc(s)) == '=') { - tok->u.s = strdup("<<="); - tok->type = ISL_TOKEN_LEX_LE; - return tok; - } - tok->u.s = strdup("<<"); - tok->type = ISL_TOKEN_LEX_LT; - } else { - tok->u.s = strdup("<"); - tok->type = ISL_TOKEN_LT; - } - if (c != -1) - isl_stream_ungetc(s, c); - return tok; - } - if (c == '&') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = ISL_TOKEN_AND; - if ((c = isl_stream_getc(s)) != '&' && c != -1) { - tok->u.s = strdup("&"); - isl_stream_ungetc(s, c); - } else - tok->u.s = strdup("&&"); - return tok; - } - if (c == '|') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = ISL_TOKEN_OR; - if ((c = isl_stream_getc(s)) != '|' && c != -1) { - tok->u.s = strdup("|"); - isl_stream_ungetc(s, c); - } else - tok->u.s = strdup("||"); - return tok; - } - if (c == '/') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - if ((c = isl_stream_getc(s)) != '\\' && c != -1) { - tok->type = (enum isl_token_type) '/'; - isl_stream_ungetc(s, c); - } else { - tok->u.s = strdup("/\\"); - tok->type = ISL_TOKEN_AND; - } - return tok; - } - if (c == '\\') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - if ((c = isl_stream_getc(s)) != '/' && c != -1) { - tok->type = (enum isl_token_type) '\\'; - isl_stream_ungetc(s, c); - } else { - tok->u.s = strdup("\\/"); - tok->type = ISL_TOKEN_OR; - } - return tok; - } - if (c == '!') { - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - if ((c = isl_stream_getc(s)) == '=') { - tok->u.s = strdup("!="); - tok->type = ISL_TOKEN_NE; - return tok; - } else { - tok->type = ISL_TOKEN_NOT; - tok->u.s = strdup("!"); - } - if (c != -1) - isl_stream_ungetc(s, c); - return tok; - } - - tok = isl_token_new(s->ctx, line, col, old_line != line); - if (!tok) - return NULL; - tok->type = ISL_TOKEN_UNKNOWN; - return tok; -error: - isl_token_free(tok); - return NULL; -} - -struct isl_token *isl_stream_next_token(struct isl_stream *s) -{ - return next_token(s, 0); -} - -struct isl_token *isl_stream_next_token_on_same_line(struct isl_stream *s) -{ - return next_token(s, 1); -} - -int isl_stream_eat_if_available(struct isl_stream *s, int type) -{ - struct isl_token *tok; - - tok = isl_stream_next_token(s); - if (!tok) - return 0; - if (tok->type == type) { - isl_token_free(tok); - return 1; - } - isl_stream_push_token(s, tok); - return 0; -} - -int isl_stream_next_token_is(struct isl_stream *s, int type) -{ - struct isl_token *tok; - int r; - - tok = isl_stream_next_token(s); - if (!tok) - return 0; - r = tok->type == type; - isl_stream_push_token(s, tok); - return r; -} - -char *isl_stream_read_ident_if_available(struct isl_stream *s) -{ - struct isl_token *tok; - - tok = isl_stream_next_token(s); - if (!tok) - return NULL; - if (tok->type == ISL_TOKEN_IDENT) { - char *ident = strdup(tok->u.s); - isl_token_free(tok); - return ident; - } - isl_stream_push_token(s, tok); - return NULL; -} - -int isl_stream_eat(struct isl_stream *s, int type) -{ - struct isl_token *tok; - - tok = isl_stream_next_token(s); - if (!tok) - return -1; - if (tok->type == type) { - isl_token_free(tok); - return 0; - } - isl_stream_error(s, tok, "expecting other token"); - isl_stream_push_token(s, tok); - return -1; -} - -int isl_stream_is_empty(struct isl_stream *s) -{ - struct isl_token *tok; - - tok = isl_stream_next_token(s); - - if (!tok) - return 1; - - isl_stream_push_token(s, tok); - return 0; -} - -static int free_keyword(void **p, void *user) -{ - struct isl_keyword *keyword = *p; - - free(keyword->name); - free(keyword); - - return 0; -} - -void isl_stream_flush_tokens(struct isl_stream *s) -{ - int i; - - if (!s) - return; - for (i = 0; i < s->n_token; ++i) - isl_token_free(s->tokens[i]); - s->n_token = 0; -} - -void isl_stream_free(struct isl_stream *s) -{ - if (!s) - return; - free(s->buffer); - if (s->n_token != 0) { - struct isl_token *tok = isl_stream_next_token(s); - isl_stream_error(s, tok, "unexpected token"); - isl_token_free(tok); - } - if (s->keywords) { - isl_hash_table_foreach(s->ctx, s->keywords, &free_keyword, NULL); - isl_hash_table_free(s->ctx, s->keywords); - } - isl_ctx_deref(s->ctx); - free(s); -} diff --git a/cloog-0.17.0/isl/isl_stream_private.h b/cloog-0.17.0/isl/isl_stream_private.h deleted file mode 100644 index 5623251..0000000 --- a/cloog-0.17.0/isl/isl_stream_private.h +++ /dev/null @@ -1,4 +0,0 @@ -#include - -struct isl_token *isl_token_new(isl_ctx *ctx, - int line, int col, unsigned on_new_line); diff --git a/cloog-0.17.0/isl/isl_tab.c b/cloog-0.17.0/isl/isl_tab.c deleted file mode 100644 index 220f0b0..0000000 --- a/cloog-0.17.0/isl/isl_tab.c +++ /dev/null @@ -1,3342 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include "isl_map_private.h" -#include "isl_tab.h" -#include -#include - -/* - * The implementation of tableaus in this file was inspired by Section 8 - * of David Detlefs, Greg Nelson and James B. Saxe, "Simplify: a theorem - * prover for program checking". - */ - -struct isl_tab *isl_tab_alloc(struct isl_ctx *ctx, - unsigned n_row, unsigned n_var, unsigned M) -{ - int i; - struct isl_tab *tab; - unsigned off = 2 + M; - - tab = isl_calloc_type(ctx, struct isl_tab); - if (!tab) - return NULL; - tab->mat = isl_mat_alloc(ctx, n_row, off + n_var); - if (!tab->mat) - goto error; - tab->var = isl_alloc_array(ctx, struct isl_tab_var, n_var); - if (!tab->var) - goto error; - tab->con = isl_alloc_array(ctx, struct isl_tab_var, n_row); - if (!tab->con) - goto error; - tab->col_var = isl_alloc_array(ctx, int, n_var); - if (!tab->col_var) - goto error; - tab->row_var = isl_alloc_array(ctx, int, n_row); - if (!tab->row_var) - goto error; - for (i = 0; i < n_var; ++i) { - tab->var[i].index = i; - tab->var[i].is_row = 0; - tab->var[i].is_nonneg = 0; - tab->var[i].is_zero = 0; - tab->var[i].is_redundant = 0; - tab->var[i].frozen = 0; - tab->var[i].negated = 0; - tab->col_var[i] = i; - } - tab->n_row = 0; - tab->n_con = 0; - tab->n_eq = 0; - tab->max_con = n_row; - tab->n_col = n_var; - tab->n_var = n_var; - tab->max_var = n_var; - tab->n_param = 0; - tab->n_div = 0; - tab->n_dead = 0; - tab->n_redundant = 0; - tab->strict_redundant = 0; - tab->need_undo = 0; - tab->rational = 0; - tab->empty = 0; - tab->in_undo = 0; - tab->M = M; - tab->cone = 0; - tab->bottom.type = isl_tab_undo_bottom; - tab->bottom.next = NULL; - tab->top = &tab->bottom; - - tab->n_zero = 0; - tab->n_unbounded = 0; - tab->basis = NULL; - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -int isl_tab_extend_cons(struct isl_tab *tab, unsigned n_new) -{ - unsigned off; - - if (!tab) - return -1; - - off = 2 + tab->M; - - if (tab->max_con < tab->n_con + n_new) { - struct isl_tab_var *con; - - con = isl_realloc_array(tab->mat->ctx, tab->con, - struct isl_tab_var, tab->max_con + n_new); - if (!con) - return -1; - tab->con = con; - tab->max_con += n_new; - } - if (tab->mat->n_row < tab->n_row + n_new) { - int *row_var; - - tab->mat = isl_mat_extend(tab->mat, - tab->n_row + n_new, off + tab->n_col); - if (!tab->mat) - return -1; - row_var = isl_realloc_array(tab->mat->ctx, tab->row_var, - int, tab->mat->n_row); - if (!row_var) - return -1; - tab->row_var = row_var; - if (tab->row_sign) { - enum isl_tab_row_sign *s; - s = isl_realloc_array(tab->mat->ctx, tab->row_sign, - enum isl_tab_row_sign, tab->mat->n_row); - if (!s) - return -1; - tab->row_sign = s; - } - } - return 0; -} - -/* Make room for at least n_new extra variables. - * Return -1 if anything went wrong. - */ -int isl_tab_extend_vars(struct isl_tab *tab, unsigned n_new) -{ - struct isl_tab_var *var; - unsigned off = 2 + tab->M; - - if (tab->max_var < tab->n_var + n_new) { - var = isl_realloc_array(tab->mat->ctx, tab->var, - struct isl_tab_var, tab->n_var + n_new); - if (!var) - return -1; - tab->var = var; - tab->max_var += n_new; - } - - if (tab->mat->n_col < off + tab->n_col + n_new) { - int *p; - - tab->mat = isl_mat_extend(tab->mat, - tab->mat->n_row, off + tab->n_col + n_new); - if (!tab->mat) - return -1; - p = isl_realloc_array(tab->mat->ctx, tab->col_var, - int, tab->n_col + n_new); - if (!p) - return -1; - tab->col_var = p; - } - - return 0; -} - -struct isl_tab *isl_tab_extend(struct isl_tab *tab, unsigned n_new) -{ - if (isl_tab_extend_cons(tab, n_new) >= 0) - return tab; - - isl_tab_free(tab); - return NULL; -} - -static void free_undo_record(struct isl_tab_undo *undo) -{ - switch (undo->type) { - case isl_tab_undo_saved_basis: - free(undo->u.col_var); - break; - default:; - } - free(undo); -} - -static void free_undo(struct isl_tab *tab) -{ - struct isl_tab_undo *undo, *next; - - for (undo = tab->top; undo && undo != &tab->bottom; undo = next) { - next = undo->next; - free_undo_record(undo); - } - tab->top = undo; -} - -void isl_tab_free(struct isl_tab *tab) -{ - if (!tab) - return; - free_undo(tab); - isl_mat_free(tab->mat); - isl_vec_free(tab->dual); - isl_basic_map_free(tab->bmap); - free(tab->var); - free(tab->con); - free(tab->row_var); - free(tab->col_var); - free(tab->row_sign); - isl_mat_free(tab->samples); - free(tab->sample_index); - isl_mat_free(tab->basis); - free(tab); -} - -struct isl_tab *isl_tab_dup(struct isl_tab *tab) -{ - int i; - struct isl_tab *dup; - unsigned off; - - if (!tab) - return NULL; - - off = 2 + tab->M; - dup = isl_calloc_type(tab->mat->ctx, struct isl_tab); - if (!dup) - return NULL; - dup->mat = isl_mat_dup(tab->mat); - if (!dup->mat) - goto error; - dup->var = isl_alloc_array(tab->mat->ctx, struct isl_tab_var, tab->max_var); - if (!dup->var) - goto error; - for (i = 0; i < tab->n_var; ++i) - dup->var[i] = tab->var[i]; - dup->con = isl_alloc_array(tab->mat->ctx, struct isl_tab_var, tab->max_con); - if (!dup->con) - goto error; - for (i = 0; i < tab->n_con; ++i) - dup->con[i] = tab->con[i]; - dup->col_var = isl_alloc_array(tab->mat->ctx, int, tab->mat->n_col - off); - if (!dup->col_var) - goto error; - for (i = 0; i < tab->n_col; ++i) - dup->col_var[i] = tab->col_var[i]; - dup->row_var = isl_alloc_array(tab->mat->ctx, int, tab->mat->n_row); - if (!dup->row_var) - goto error; - for (i = 0; i < tab->n_row; ++i) - dup->row_var[i] = tab->row_var[i]; - if (tab->row_sign) { - dup->row_sign = isl_alloc_array(tab->mat->ctx, enum isl_tab_row_sign, - tab->mat->n_row); - if (!dup->row_sign) - goto error; - for (i = 0; i < tab->n_row; ++i) - dup->row_sign[i] = tab->row_sign[i]; - } - if (tab->samples) { - dup->samples = isl_mat_dup(tab->samples); - if (!dup->samples) - goto error; - dup->sample_index = isl_alloc_array(tab->mat->ctx, int, - tab->samples->n_row); - if (!dup->sample_index) - goto error; - dup->n_sample = tab->n_sample; - dup->n_outside = tab->n_outside; - } - dup->n_row = tab->n_row; - dup->n_con = tab->n_con; - dup->n_eq = tab->n_eq; - dup->max_con = tab->max_con; - dup->n_col = tab->n_col; - dup->n_var = tab->n_var; - dup->max_var = tab->max_var; - dup->n_param = tab->n_param; - dup->n_div = tab->n_div; - dup->n_dead = tab->n_dead; - dup->n_redundant = tab->n_redundant; - dup->rational = tab->rational; - dup->empty = tab->empty; - dup->strict_redundant = 0; - dup->need_undo = 0; - dup->in_undo = 0; - dup->M = tab->M; - tab->cone = tab->cone; - dup->bottom.type = isl_tab_undo_bottom; - dup->bottom.next = NULL; - dup->top = &dup->bottom; - - dup->n_zero = tab->n_zero; - dup->n_unbounded = tab->n_unbounded; - dup->basis = isl_mat_dup(tab->basis); - - return dup; -error: - isl_tab_free(dup); - return NULL; -} - -/* Construct the coefficient matrix of the product tableau - * of two tableaus. - * mat{1,2} is the coefficient matrix of tableau {1,2} - * row{1,2} is the number of rows in tableau {1,2} - * col{1,2} is the number of columns in tableau {1,2} - * off is the offset to the coefficient column (skipping the - * denominator, the constant term and the big parameter if any) - * r{1,2} is the number of redundant rows in tableau {1,2} - * d{1,2} is the number of dead columns in tableau {1,2} - * - * The order of the rows and columns in the result is as explained - * in isl_tab_product. - */ -static struct isl_mat *tab_mat_product(struct isl_mat *mat1, - struct isl_mat *mat2, unsigned row1, unsigned row2, - unsigned col1, unsigned col2, - unsigned off, unsigned r1, unsigned r2, unsigned d1, unsigned d2) -{ - int i; - struct isl_mat *prod; - unsigned n; - - prod = isl_mat_alloc(mat1->ctx, mat1->n_row + mat2->n_row, - off + col1 + col2); - if (!prod) - return NULL; - - n = 0; - for (i = 0; i < r1; ++i) { - isl_seq_cpy(prod->row[n + i], mat1->row[i], off + d1); - isl_seq_clr(prod->row[n + i] + off + d1, d2); - isl_seq_cpy(prod->row[n + i] + off + d1 + d2, - mat1->row[i] + off + d1, col1 - d1); - isl_seq_clr(prod->row[n + i] + off + col1 + d1, col2 - d2); - } - - n += r1; - for (i = 0; i < r2; ++i) { - isl_seq_cpy(prod->row[n + i], mat2->row[i], off); - isl_seq_clr(prod->row[n + i] + off, d1); - isl_seq_cpy(prod->row[n + i] + off + d1, - mat2->row[i] + off, d2); - isl_seq_clr(prod->row[n + i] + off + d1 + d2, col1 - d1); - isl_seq_cpy(prod->row[n + i] + off + col1 + d1, - mat2->row[i] + off + d2, col2 - d2); - } - - n += r2; - for (i = 0; i < row1 - r1; ++i) { - isl_seq_cpy(prod->row[n + i], mat1->row[r1 + i], off + d1); - isl_seq_clr(prod->row[n + i] + off + d1, d2); - isl_seq_cpy(prod->row[n + i] + off + d1 + d2, - mat1->row[r1 + i] + off + d1, col1 - d1); - isl_seq_clr(prod->row[n + i] + off + col1 + d1, col2 - d2); - } - - n += row1 - r1; - for (i = 0; i < row2 - r2; ++i) { - isl_seq_cpy(prod->row[n + i], mat2->row[r2 + i], off); - isl_seq_clr(prod->row[n + i] + off, d1); - isl_seq_cpy(prod->row[n + i] + off + d1, - mat2->row[r2 + i] + off, d2); - isl_seq_clr(prod->row[n + i] + off + d1 + d2, col1 - d1); - isl_seq_cpy(prod->row[n + i] + off + col1 + d1, - mat2->row[r2 + i] + off + d2, col2 - d2); - } - - return prod; -} - -/* Update the row or column index of a variable that corresponds - * to a variable in the first input tableau. - */ -static void update_index1(struct isl_tab_var *var, - unsigned r1, unsigned r2, unsigned d1, unsigned d2) -{ - if (var->index == -1) - return; - if (var->is_row && var->index >= r1) - var->index += r2; - if (!var->is_row && var->index >= d1) - var->index += d2; -} - -/* Update the row or column index of a variable that corresponds - * to a variable in the second input tableau. - */ -static void update_index2(struct isl_tab_var *var, - unsigned row1, unsigned col1, - unsigned r1, unsigned r2, unsigned d1, unsigned d2) -{ - if (var->index == -1) - return; - if (var->is_row) { - if (var->index < r2) - var->index += r1; - else - var->index += row1; - } else { - if (var->index < d2) - var->index += d1; - else - var->index += col1; - } -} - -/* Create a tableau that represents the Cartesian product of the sets - * represented by tableaus tab1 and tab2. - * The order of the rows in the product is - * - redundant rows of tab1 - * - redundant rows of tab2 - * - non-redundant rows of tab1 - * - non-redundant rows of tab2 - * The order of the columns is - * - denominator - * - constant term - * - coefficient of big parameter, if any - * - dead columns of tab1 - * - dead columns of tab2 - * - live columns of tab1 - * - live columns of tab2 - * The order of the variables and the constraints is a concatenation - * of order in the two input tableaus. - */ -struct isl_tab *isl_tab_product(struct isl_tab *tab1, struct isl_tab *tab2) -{ - int i; - struct isl_tab *prod; - unsigned off; - unsigned r1, r2, d1, d2; - - if (!tab1 || !tab2) - return NULL; - - isl_assert(tab1->mat->ctx, tab1->M == tab2->M, return NULL); - isl_assert(tab1->mat->ctx, tab1->rational == tab2->rational, return NULL); - isl_assert(tab1->mat->ctx, tab1->cone == tab2->cone, return NULL); - isl_assert(tab1->mat->ctx, !tab1->row_sign, return NULL); - isl_assert(tab1->mat->ctx, !tab2->row_sign, return NULL); - isl_assert(tab1->mat->ctx, tab1->n_param == 0, return NULL); - isl_assert(tab1->mat->ctx, tab2->n_param == 0, return NULL); - isl_assert(tab1->mat->ctx, tab1->n_div == 0, return NULL); - isl_assert(tab1->mat->ctx, tab2->n_div == 0, return NULL); - - off = 2 + tab1->M; - r1 = tab1->n_redundant; - r2 = tab2->n_redundant; - d1 = tab1->n_dead; - d2 = tab2->n_dead; - prod = isl_calloc_type(tab1->mat->ctx, struct isl_tab); - if (!prod) - return NULL; - prod->mat = tab_mat_product(tab1->mat, tab2->mat, - tab1->n_row, tab2->n_row, - tab1->n_col, tab2->n_col, off, r1, r2, d1, d2); - if (!prod->mat) - goto error; - prod->var = isl_alloc_array(tab1->mat->ctx, struct isl_tab_var, - tab1->max_var + tab2->max_var); - if (!prod->var) - goto error; - for (i = 0; i < tab1->n_var; ++i) { - prod->var[i] = tab1->var[i]; - update_index1(&prod->var[i], r1, r2, d1, d2); - } - for (i = 0; i < tab2->n_var; ++i) { - prod->var[tab1->n_var + i] = tab2->var[i]; - update_index2(&prod->var[tab1->n_var + i], - tab1->n_row, tab1->n_col, - r1, r2, d1, d2); - } - prod->con = isl_alloc_array(tab1->mat->ctx, struct isl_tab_var, - tab1->max_con + tab2->max_con); - if (!prod->con) - goto error; - for (i = 0; i < tab1->n_con; ++i) { - prod->con[i] = tab1->con[i]; - update_index1(&prod->con[i], r1, r2, d1, d2); - } - for (i = 0; i < tab2->n_con; ++i) { - prod->con[tab1->n_con + i] = tab2->con[i]; - update_index2(&prod->con[tab1->n_con + i], - tab1->n_row, tab1->n_col, - r1, r2, d1, d2); - } - prod->col_var = isl_alloc_array(tab1->mat->ctx, int, - tab1->n_col + tab2->n_col); - if (!prod->col_var) - goto error; - for (i = 0; i < tab1->n_col; ++i) { - int pos = i < d1 ? i : i + d2; - prod->col_var[pos] = tab1->col_var[i]; - } - for (i = 0; i < tab2->n_col; ++i) { - int pos = i < d2 ? d1 + i : tab1->n_col + i; - int t = tab2->col_var[i]; - if (t >= 0) - t += tab1->n_var; - else - t -= tab1->n_con; - prod->col_var[pos] = t; - } - prod->row_var = isl_alloc_array(tab1->mat->ctx, int, - tab1->mat->n_row + tab2->mat->n_row); - if (!prod->row_var) - goto error; - for (i = 0; i < tab1->n_row; ++i) { - int pos = i < r1 ? i : i + r2; - prod->row_var[pos] = tab1->row_var[i]; - } - for (i = 0; i < tab2->n_row; ++i) { - int pos = i < r2 ? r1 + i : tab1->n_row + i; - int t = tab2->row_var[i]; - if (t >= 0) - t += tab1->n_var; - else - t -= tab1->n_con; - prod->row_var[pos] = t; - } - prod->samples = NULL; - prod->sample_index = NULL; - prod->n_row = tab1->n_row + tab2->n_row; - prod->n_con = tab1->n_con + tab2->n_con; - prod->n_eq = 0; - prod->max_con = tab1->max_con + tab2->max_con; - prod->n_col = tab1->n_col + tab2->n_col; - prod->n_var = tab1->n_var + tab2->n_var; - prod->max_var = tab1->max_var + tab2->max_var; - prod->n_param = 0; - prod->n_div = 0; - prod->n_dead = tab1->n_dead + tab2->n_dead; - prod->n_redundant = tab1->n_redundant + tab2->n_redundant; - prod->rational = tab1->rational; - prod->empty = tab1->empty || tab2->empty; - prod->strict_redundant = tab1->strict_redundant || tab2->strict_redundant; - prod->need_undo = 0; - prod->in_undo = 0; - prod->M = tab1->M; - prod->cone = tab1->cone; - prod->bottom.type = isl_tab_undo_bottom; - prod->bottom.next = NULL; - prod->top = &prod->bottom; - - prod->n_zero = 0; - prod->n_unbounded = 0; - prod->basis = NULL; - - return prod; -error: - isl_tab_free(prod); - return NULL; -} - -static struct isl_tab_var *var_from_index(struct isl_tab *tab, int i) -{ - if (i >= 0) - return &tab->var[i]; - else - return &tab->con[~i]; -} - -struct isl_tab_var *isl_tab_var_from_row(struct isl_tab *tab, int i) -{ - return var_from_index(tab, tab->row_var[i]); -} - -static struct isl_tab_var *var_from_col(struct isl_tab *tab, int i) -{ - return var_from_index(tab, tab->col_var[i]); -} - -/* Check if there are any upper bounds on column variable "var", - * i.e., non-negative rows where var appears with a negative coefficient. - * Return 1 if there are no such bounds. - */ -static int max_is_manifestly_unbounded(struct isl_tab *tab, - struct isl_tab_var *var) -{ - int i; - unsigned off = 2 + tab->M; - - if (var->is_row) - return 0; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - if (!isl_int_is_neg(tab->mat->row[i][off + var->index])) - continue; - if (isl_tab_var_from_row(tab, i)->is_nonneg) - return 0; - } - return 1; -} - -/* Check if there are any lower bounds on column variable "var", - * i.e., non-negative rows where var appears with a positive coefficient. - * Return 1 if there are no such bounds. - */ -static int min_is_manifestly_unbounded(struct isl_tab *tab, - struct isl_tab_var *var) -{ - int i; - unsigned off = 2 + tab->M; - - if (var->is_row) - return 0; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - if (!isl_int_is_pos(tab->mat->row[i][off + var->index])) - continue; - if (isl_tab_var_from_row(tab, i)->is_nonneg) - return 0; - } - return 1; -} - -static int row_cmp(struct isl_tab *tab, int r1, int r2, int c, isl_int t) -{ - unsigned off = 2 + tab->M; - - if (tab->M) { - int s; - isl_int_mul(t, tab->mat->row[r1][2], tab->mat->row[r2][off+c]); - isl_int_submul(t, tab->mat->row[r2][2], tab->mat->row[r1][off+c]); - s = isl_int_sgn(t); - if (s) - return s; - } - isl_int_mul(t, tab->mat->row[r1][1], tab->mat->row[r2][off + c]); - isl_int_submul(t, tab->mat->row[r2][1], tab->mat->row[r1][off + c]); - return isl_int_sgn(t); -} - -/* Given the index of a column "c", return the index of a row - * that can be used to pivot the column in, with either an increase - * (sgn > 0) or a decrease (sgn < 0) of the corresponding variable. - * If "var" is not NULL, then the row returned will be different from - * the one associated with "var". - * - * Each row in the tableau is of the form - * - * x_r = a_r0 + \sum_i a_ri x_i - * - * Only rows with x_r >= 0 and with the sign of a_ri opposite to "sgn" - * impose any limit on the increase or decrease in the value of x_c - * and this bound is equal to a_r0 / |a_rc|. We are therefore looking - * for the row with the smallest (most stringent) such bound. - * Note that the common denominator of each row drops out of the fraction. - * To check if row j has a smaller bound than row r, i.e., - * a_j0 / |a_jc| < a_r0 / |a_rc| or a_j0 |a_rc| < a_r0 |a_jc|, - * we check if -sign(a_jc) (a_j0 a_rc - a_r0 a_jc) < 0, - * where -sign(a_jc) is equal to "sgn". - */ -static int pivot_row(struct isl_tab *tab, - struct isl_tab_var *var, int sgn, int c) -{ - int j, r, tsgn; - isl_int t; - unsigned off = 2 + tab->M; - - isl_int_init(t); - r = -1; - for (j = tab->n_redundant; j < tab->n_row; ++j) { - if (var && j == var->index) - continue; - if (!isl_tab_var_from_row(tab, j)->is_nonneg) - continue; - if (sgn * isl_int_sgn(tab->mat->row[j][off + c]) >= 0) - continue; - if (r < 0) { - r = j; - continue; - } - tsgn = sgn * row_cmp(tab, r, j, c, t); - if (tsgn < 0 || (tsgn == 0 && - tab->row_var[j] < tab->row_var[r])) - r = j; - } - isl_int_clear(t); - return r; -} - -/* Find a pivot (row and col) that will increase (sgn > 0) or decrease - * (sgn < 0) the value of row variable var. - * If not NULL, then skip_var is a row variable that should be ignored - * while looking for a pivot row. It is usually equal to var. - * - * As the given row in the tableau is of the form - * - * x_r = a_r0 + \sum_i a_ri x_i - * - * we need to find a column such that the sign of a_ri is equal to "sgn" - * (such that an increase in x_i will have the desired effect) or a - * column with a variable that may attain negative values. - * If a_ri is positive, then we need to move x_i in the same direction - * to obtain the desired effect. Otherwise, x_i has to move in the - * opposite direction. - */ -static void find_pivot(struct isl_tab *tab, - struct isl_tab_var *var, struct isl_tab_var *skip_var, - int sgn, int *row, int *col) -{ - int j, r, c; - isl_int *tr; - - *row = *col = -1; - - isl_assert(tab->mat->ctx, var->is_row, return); - tr = tab->mat->row[var->index] + 2 + tab->M; - - c = -1; - for (j = tab->n_dead; j < tab->n_col; ++j) { - if (isl_int_is_zero(tr[j])) - continue; - if (isl_int_sgn(tr[j]) != sgn && - var_from_col(tab, j)->is_nonneg) - continue; - if (c < 0 || tab->col_var[j] < tab->col_var[c]) - c = j; - } - if (c < 0) - return; - - sgn *= isl_int_sgn(tr[c]); - r = pivot_row(tab, skip_var, sgn, c); - *row = r < 0 ? var->index : r; - *col = c; -} - -/* Return 1 if row "row" represents an obviously redundant inequality. - * This means - * - it represents an inequality or a variable - * - that is the sum of a non-negative sample value and a positive - * combination of zero or more non-negative constraints. - */ -int isl_tab_row_is_redundant(struct isl_tab *tab, int row) -{ - int i; - unsigned off = 2 + tab->M; - - if (tab->row_var[row] < 0 && !isl_tab_var_from_row(tab, row)->is_nonneg) - return 0; - - if (isl_int_is_neg(tab->mat->row[row][1])) - return 0; - if (tab->strict_redundant && isl_int_is_zero(tab->mat->row[row][1])) - return 0; - if (tab->M && isl_int_is_neg(tab->mat->row[row][2])) - return 0; - - for (i = tab->n_dead; i < tab->n_col; ++i) { - if (isl_int_is_zero(tab->mat->row[row][off + i])) - continue; - if (tab->col_var[i] >= 0) - return 0; - if (isl_int_is_neg(tab->mat->row[row][off + i])) - return 0; - if (!var_from_col(tab, i)->is_nonneg) - return 0; - } - return 1; -} - -static void swap_rows(struct isl_tab *tab, int row1, int row2) -{ - int t; - enum isl_tab_row_sign s; - - t = tab->row_var[row1]; - tab->row_var[row1] = tab->row_var[row2]; - tab->row_var[row2] = t; - isl_tab_var_from_row(tab, row1)->index = row1; - isl_tab_var_from_row(tab, row2)->index = row2; - tab->mat = isl_mat_swap_rows(tab->mat, row1, row2); - - if (!tab->row_sign) - return; - s = tab->row_sign[row1]; - tab->row_sign[row1] = tab->row_sign[row2]; - tab->row_sign[row2] = s; -} - -static int push_union(struct isl_tab *tab, - enum isl_tab_undo_type type, union isl_tab_undo_val u) WARN_UNUSED; -static int push_union(struct isl_tab *tab, - enum isl_tab_undo_type type, union isl_tab_undo_val u) -{ - struct isl_tab_undo *undo; - - if (!tab->need_undo) - return 0; - - undo = isl_alloc_type(tab->mat->ctx, struct isl_tab_undo); - if (!undo) - return -1; - undo->type = type; - undo->u = u; - undo->next = tab->top; - tab->top = undo; - - return 0; -} - -int isl_tab_push_var(struct isl_tab *tab, - enum isl_tab_undo_type type, struct isl_tab_var *var) -{ - union isl_tab_undo_val u; - if (var->is_row) - u.var_index = tab->row_var[var->index]; - else - u.var_index = tab->col_var[var->index]; - return push_union(tab, type, u); -} - -int isl_tab_push(struct isl_tab *tab, enum isl_tab_undo_type type) -{ - union isl_tab_undo_val u = { 0 }; - return push_union(tab, type, u); -} - -/* Push a record on the undo stack describing the current basic - * variables, so that the this state can be restored during rollback. - */ -int isl_tab_push_basis(struct isl_tab *tab) -{ - int i; - union isl_tab_undo_val u; - - u.col_var = isl_alloc_array(tab->mat->ctx, int, tab->n_col); - if (!u.col_var) - return -1; - for (i = 0; i < tab->n_col; ++i) - u.col_var[i] = tab->col_var[i]; - return push_union(tab, isl_tab_undo_saved_basis, u); -} - -int isl_tab_push_callback(struct isl_tab *tab, struct isl_tab_callback *callback) -{ - union isl_tab_undo_val u; - u.callback = callback; - return push_union(tab, isl_tab_undo_callback, u); -} - -struct isl_tab *isl_tab_init_samples(struct isl_tab *tab) -{ - if (!tab) - return NULL; - - tab->n_sample = 0; - tab->n_outside = 0; - tab->samples = isl_mat_alloc(tab->mat->ctx, 1, 1 + tab->n_var); - if (!tab->samples) - goto error; - tab->sample_index = isl_alloc_array(tab->mat->ctx, int, 1); - if (!tab->sample_index) - goto error; - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -struct isl_tab *isl_tab_add_sample(struct isl_tab *tab, - __isl_take isl_vec *sample) -{ - if (!tab || !sample) - goto error; - - if (tab->n_sample + 1 > tab->samples->n_row) { - int *t = isl_realloc_array(tab->mat->ctx, - tab->sample_index, int, tab->n_sample + 1); - if (!t) - goto error; - tab->sample_index = t; - } - - tab->samples = isl_mat_extend(tab->samples, - tab->n_sample + 1, tab->samples->n_col); - if (!tab->samples) - goto error; - - isl_seq_cpy(tab->samples->row[tab->n_sample], sample->el, sample->size); - isl_vec_free(sample); - tab->sample_index[tab->n_sample] = tab->n_sample; - tab->n_sample++; - - return tab; -error: - isl_vec_free(sample); - isl_tab_free(tab); - return NULL; -} - -struct isl_tab *isl_tab_drop_sample(struct isl_tab *tab, int s) -{ - if (s != tab->n_outside) { - int t = tab->sample_index[tab->n_outside]; - tab->sample_index[tab->n_outside] = tab->sample_index[s]; - tab->sample_index[s] = t; - isl_mat_swap_rows(tab->samples, tab->n_outside, s); - } - tab->n_outside++; - if (isl_tab_push(tab, isl_tab_undo_drop_sample) < 0) { - isl_tab_free(tab); - return NULL; - } - - return tab; -} - -/* Record the current number of samples so that we can remove newer - * samples during a rollback. - */ -int isl_tab_save_samples(struct isl_tab *tab) -{ - union isl_tab_undo_val u; - - if (!tab) - return -1; - - u.n = tab->n_sample; - return push_union(tab, isl_tab_undo_saved_samples, u); -} - -/* Mark row with index "row" as being redundant. - * If we may need to undo the operation or if the row represents - * a variable of the original problem, the row is kept, - * but no longer considered when looking for a pivot row. - * Otherwise, the row is simply removed. - * - * The row may be interchanged with some other row. If it - * is interchanged with a later row, return 1. Otherwise return 0. - * If the rows are checked in order in the calling function, - * then a return value of 1 means that the row with the given - * row number may now contain a different row that hasn't been checked yet. - */ -int isl_tab_mark_redundant(struct isl_tab *tab, int row) -{ - struct isl_tab_var *var = isl_tab_var_from_row(tab, row); - var->is_redundant = 1; - isl_assert(tab->mat->ctx, row >= tab->n_redundant, return -1); - if (tab->need_undo || tab->row_var[row] >= 0) { - if (tab->row_var[row] >= 0 && !var->is_nonneg) { - var->is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, var) < 0) - return -1; - } - if (row != tab->n_redundant) - swap_rows(tab, row, tab->n_redundant); - tab->n_redundant++; - return isl_tab_push_var(tab, isl_tab_undo_redundant, var); - } else { - if (row != tab->n_row - 1) - swap_rows(tab, row, tab->n_row - 1); - isl_tab_var_from_row(tab, tab->n_row - 1)->index = -1; - tab->n_row--; - return 1; - } -} - -int isl_tab_mark_empty(struct isl_tab *tab) -{ - if (!tab) - return -1; - if (!tab->empty && tab->need_undo) - if (isl_tab_push(tab, isl_tab_undo_empty) < 0) - return -1; - tab->empty = 1; - return 0; -} - -int isl_tab_freeze_constraint(struct isl_tab *tab, int con) -{ - struct isl_tab_var *var; - - if (!tab) - return -1; - - var = &tab->con[con]; - if (var->frozen) - return 0; - if (var->index < 0) - return 0; - var->frozen = 1; - - if (tab->need_undo) - return isl_tab_push_var(tab, isl_tab_undo_freeze, var); - - return 0; -} - -/* Update the rows signs after a pivot of "row" and "col", with "row_sgn" - * the original sign of the pivot element. - * We only keep track of row signs during PILP solving and in this case - * we only pivot a row with negative sign (meaning the value is always - * non-positive) using a positive pivot element. - * - * For each row j, the new value of the parametric constant is equal to - * - * a_j0 - a_jc a_r0/a_rc - * - * where a_j0 is the original parametric constant, a_rc is the pivot element, - * a_r0 is the parametric constant of the pivot row and a_jc is the - * pivot column entry of the row j. - * Since a_r0 is non-positive and a_rc is positive, the sign of row j - * remains the same if a_jc has the same sign as the row j or if - * a_jc is zero. In all other cases, we reset the sign to "unknown". - */ -static void update_row_sign(struct isl_tab *tab, int row, int col, int row_sgn) -{ - int i; - struct isl_mat *mat = tab->mat; - unsigned off = 2 + tab->M; - - if (!tab->row_sign) - return; - - if (tab->row_sign[row] == 0) - return; - isl_assert(mat->ctx, row_sgn > 0, return); - isl_assert(mat->ctx, tab->row_sign[row] == isl_tab_row_neg, return); - tab->row_sign[row] = isl_tab_row_pos; - for (i = 0; i < tab->n_row; ++i) { - int s; - if (i == row) - continue; - s = isl_int_sgn(mat->row[i][off + col]); - if (!s) - continue; - if (!tab->row_sign[i]) - continue; - if (s < 0 && tab->row_sign[i] == isl_tab_row_neg) - continue; - if (s > 0 && tab->row_sign[i] == isl_tab_row_pos) - continue; - tab->row_sign[i] = isl_tab_row_unknown; - } -} - -/* Given a row number "row" and a column number "col", pivot the tableau - * such that the associated variables are interchanged. - * The given row in the tableau expresses - * - * x_r = a_r0 + \sum_i a_ri x_i - * - * or - * - * x_c = 1/a_rc x_r - a_r0/a_rc + sum_{i \ne r} -a_ri/a_rc - * - * Substituting this equality into the other rows - * - * x_j = a_j0 + \sum_i a_ji x_i - * - * with a_jc \ne 0, we obtain - * - * x_j = a_jc/a_rc x_r + a_j0 - a_jc a_r0/a_rc + sum a_ji - a_jc a_ri/a_rc - * - * The tableau - * - * n_rc/d_r n_ri/d_r - * n_jc/d_j n_ji/d_j - * - * where i is any other column and j is any other row, - * is therefore transformed into - * - * s(n_rc)d_r/|n_rc| -s(n_rc)n_ri/|n_rc| - * s(n_rc)d_r n_jc/(|n_rc| d_j) (n_ji |n_rc| - s(n_rc)n_jc n_ri)/(|n_rc| d_j) - * - * The transformation is performed along the following steps - * - * d_r/n_rc n_ri/n_rc - * n_jc/d_j n_ji/d_j - * - * s(n_rc)d_r/|n_rc| -s(n_rc)n_ri/|n_rc| - * n_jc/d_j n_ji/d_j - * - * s(n_rc)d_r/|n_rc| -s(n_rc)n_ri/|n_rc| - * n_jc/(|n_rc| d_j) n_ji/(|n_rc| d_j) - * - * s(n_rc)d_r/|n_rc| -s(n_rc)n_ri/|n_rc| - * n_jc/(|n_rc| d_j) (n_ji |n_rc|)/(|n_rc| d_j) - * - * s(n_rc)d_r/|n_rc| -s(n_rc)n_ri/|n_rc| - * n_jc/(|n_rc| d_j) (n_ji |n_rc| - s(n_rc)n_jc n_ri)/(|n_rc| d_j) - * - * s(n_rc)d_r/|n_rc| -s(n_rc)n_ri/|n_rc| - * s(n_rc)d_r n_jc/(|n_rc| d_j) (n_ji |n_rc| - s(n_rc)n_jc n_ri)/(|n_rc| d_j) - * - */ -int isl_tab_pivot(struct isl_tab *tab, int row, int col) -{ - int i, j; - int sgn; - int t; - struct isl_mat *mat = tab->mat; - struct isl_tab_var *var; - unsigned off = 2 + tab->M; - - if (tab->mat->ctx->abort) { - isl_ctx_set_error(tab->mat->ctx, isl_error_abort); - return -1; - } - - isl_int_swap(mat->row[row][0], mat->row[row][off + col]); - sgn = isl_int_sgn(mat->row[row][0]); - if (sgn < 0) { - isl_int_neg(mat->row[row][0], mat->row[row][0]); - isl_int_neg(mat->row[row][off + col], mat->row[row][off + col]); - } else - for (j = 0; j < off - 1 + tab->n_col; ++j) { - if (j == off - 1 + col) - continue; - isl_int_neg(mat->row[row][1 + j], mat->row[row][1 + j]); - } - if (!isl_int_is_one(mat->row[row][0])) - isl_seq_normalize(mat->ctx, mat->row[row], off + tab->n_col); - for (i = 0; i < tab->n_row; ++i) { - if (i == row) - continue; - if (isl_int_is_zero(mat->row[i][off + col])) - continue; - isl_int_mul(mat->row[i][0], mat->row[i][0], mat->row[row][0]); - for (j = 0; j < off - 1 + tab->n_col; ++j) { - if (j == off - 1 + col) - continue; - isl_int_mul(mat->row[i][1 + j], - mat->row[i][1 + j], mat->row[row][0]); - isl_int_addmul(mat->row[i][1 + j], - mat->row[i][off + col], mat->row[row][1 + j]); - } - isl_int_mul(mat->row[i][off + col], - mat->row[i][off + col], mat->row[row][off + col]); - if (!isl_int_is_one(mat->row[i][0])) - isl_seq_normalize(mat->ctx, mat->row[i], off + tab->n_col); - } - t = tab->row_var[row]; - tab->row_var[row] = tab->col_var[col]; - tab->col_var[col] = t; - var = isl_tab_var_from_row(tab, row); - var->is_row = 1; - var->index = row; - var = var_from_col(tab, col); - var->is_row = 0; - var->index = col; - update_row_sign(tab, row, col, sgn); - if (tab->in_undo) - return 0; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - if (isl_int_is_zero(mat->row[i][off + col])) - continue; - if (!isl_tab_var_from_row(tab, i)->frozen && - isl_tab_row_is_redundant(tab, i)) { - int redo = isl_tab_mark_redundant(tab, i); - if (redo < 0) - return -1; - if (redo) - --i; - } - } - return 0; -} - -/* If "var" represents a column variable, then pivot is up (sgn > 0) - * or down (sgn < 0) to a row. The variable is assumed not to be - * unbounded in the specified direction. - * If sgn = 0, then the variable is unbounded in both directions, - * and we pivot with any row we can find. - */ -static int to_row(struct isl_tab *tab, struct isl_tab_var *var, int sign) WARN_UNUSED; -static int to_row(struct isl_tab *tab, struct isl_tab_var *var, int sign) -{ - int r; - unsigned off = 2 + tab->M; - - if (var->is_row) - return 0; - - if (sign == 0) { - for (r = tab->n_redundant; r < tab->n_row; ++r) - if (!isl_int_is_zero(tab->mat->row[r][off+var->index])) - break; - isl_assert(tab->mat->ctx, r < tab->n_row, return -1); - } else { - r = pivot_row(tab, NULL, sign, var->index); - isl_assert(tab->mat->ctx, r >= 0, return -1); - } - - return isl_tab_pivot(tab, r, var->index); -} - -/* Check whether all variables that are marked as non-negative - * also have a non-negative sample value. This function is not - * called from the current code but is useful during debugging. - */ -static void check_table(struct isl_tab *tab) __attribute__ ((unused)); -static void check_table(struct isl_tab *tab) -{ - int i; - - if (tab->empty) - return; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - struct isl_tab_var *var; - var = isl_tab_var_from_row(tab, i); - if (!var->is_nonneg) - continue; - if (tab->M) { - isl_assert(tab->mat->ctx, - !isl_int_is_neg(tab->mat->row[i][2]), abort()); - if (isl_int_is_pos(tab->mat->row[i][2])) - continue; - } - isl_assert(tab->mat->ctx, !isl_int_is_neg(tab->mat->row[i][1]), - abort()); - } -} - -/* Return the sign of the maximal value of "var". - * If the sign is not negative, then on return from this function, - * the sample value will also be non-negative. - * - * If "var" is manifestly unbounded wrt positive values, we are done. - * Otherwise, we pivot the variable up to a row if needed - * Then we continue pivoting down until either - * - no more down pivots can be performed - * - the sample value is positive - * - the variable is pivoted into a manifestly unbounded column - */ -static int sign_of_max(struct isl_tab *tab, struct isl_tab_var *var) -{ - int row, col; - - if (max_is_manifestly_unbounded(tab, var)) - return 1; - if (to_row(tab, var, 1) < 0) - return -2; - while (!isl_int_is_pos(tab->mat->row[var->index][1])) { - find_pivot(tab, var, var, 1, &row, &col); - if (row == -1) - return isl_int_sgn(tab->mat->row[var->index][1]); - if (isl_tab_pivot(tab, row, col) < 0) - return -2; - if (!var->is_row) /* manifestly unbounded */ - return 1; - } - return 1; -} - -int isl_tab_sign_of_max(struct isl_tab *tab, int con) -{ - struct isl_tab_var *var; - - if (!tab) - return -2; - - var = &tab->con[con]; - isl_assert(tab->mat->ctx, !var->is_redundant, return -2); - isl_assert(tab->mat->ctx, !var->is_zero, return -2); - - return sign_of_max(tab, var); -} - -static int row_is_neg(struct isl_tab *tab, int row) -{ - if (!tab->M) - return isl_int_is_neg(tab->mat->row[row][1]); - if (isl_int_is_pos(tab->mat->row[row][2])) - return 0; - if (isl_int_is_neg(tab->mat->row[row][2])) - return 1; - return isl_int_is_neg(tab->mat->row[row][1]); -} - -static int row_sgn(struct isl_tab *tab, int row) -{ - if (!tab->M) - return isl_int_sgn(tab->mat->row[row][1]); - if (!isl_int_is_zero(tab->mat->row[row][2])) - return isl_int_sgn(tab->mat->row[row][2]); - else - return isl_int_sgn(tab->mat->row[row][1]); -} - -/* Perform pivots until the row variable "var" has a non-negative - * sample value or until no more upward pivots can be performed. - * Return the sign of the sample value after the pivots have been - * performed. - */ -static int restore_row(struct isl_tab *tab, struct isl_tab_var *var) -{ - int row, col; - - while (row_is_neg(tab, var->index)) { - find_pivot(tab, var, var, 1, &row, &col); - if (row == -1) - break; - if (isl_tab_pivot(tab, row, col) < 0) - return -2; - if (!var->is_row) /* manifestly unbounded */ - return 1; - } - return row_sgn(tab, var->index); -} - -/* Perform pivots until we are sure that the row variable "var" - * can attain non-negative values. After return from this - * function, "var" is still a row variable, but its sample - * value may not be non-negative, even if the function returns 1. - */ -static int at_least_zero(struct isl_tab *tab, struct isl_tab_var *var) -{ - int row, col; - - while (isl_int_is_neg(tab->mat->row[var->index][1])) { - find_pivot(tab, var, var, 1, &row, &col); - if (row == -1) - break; - if (row == var->index) /* manifestly unbounded */ - return 1; - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - } - return !isl_int_is_neg(tab->mat->row[var->index][1]); -} - -/* Return a negative value if "var" can attain negative values. - * Return a non-negative value otherwise. - * - * If "var" is manifestly unbounded wrt negative values, we are done. - * Otherwise, if var is in a column, we can pivot it down to a row. - * Then we continue pivoting down until either - * - the pivot would result in a manifestly unbounded column - * => we don't perform the pivot, but simply return -1 - * - no more down pivots can be performed - * - the sample value is negative - * If the sample value becomes negative and the variable is supposed - * to be nonnegative, then we undo the last pivot. - * However, if the last pivot has made the pivoting variable - * obviously redundant, then it may have moved to another row. - * In that case we look for upward pivots until we reach a non-negative - * value again. - */ -static int sign_of_min(struct isl_tab *tab, struct isl_tab_var *var) -{ - int row, col; - struct isl_tab_var *pivot_var = NULL; - - if (min_is_manifestly_unbounded(tab, var)) - return -1; - if (!var->is_row) { - col = var->index; - row = pivot_row(tab, NULL, -1, col); - pivot_var = var_from_col(tab, col); - if (isl_tab_pivot(tab, row, col) < 0) - return -2; - if (var->is_redundant) - return 0; - if (isl_int_is_neg(tab->mat->row[var->index][1])) { - if (var->is_nonneg) { - if (!pivot_var->is_redundant && - pivot_var->index == row) { - if (isl_tab_pivot(tab, row, col) < 0) - return -2; - } else - if (restore_row(tab, var) < -1) - return -2; - } - return -1; - } - } - if (var->is_redundant) - return 0; - while (!isl_int_is_neg(tab->mat->row[var->index][1])) { - find_pivot(tab, var, var, -1, &row, &col); - if (row == var->index) - return -1; - if (row == -1) - return isl_int_sgn(tab->mat->row[var->index][1]); - pivot_var = var_from_col(tab, col); - if (isl_tab_pivot(tab, row, col) < 0) - return -2; - if (var->is_redundant) - return 0; - } - if (pivot_var && var->is_nonneg) { - /* pivot back to non-negative value */ - if (!pivot_var->is_redundant && pivot_var->index == row) { - if (isl_tab_pivot(tab, row, col) < 0) - return -2; - } else - if (restore_row(tab, var) < -1) - return -2; - } - return -1; -} - -static int row_at_most_neg_one(struct isl_tab *tab, int row) -{ - if (tab->M) { - if (isl_int_is_pos(tab->mat->row[row][2])) - return 0; - if (isl_int_is_neg(tab->mat->row[row][2])) - return 1; - } - return isl_int_is_neg(tab->mat->row[row][1]) && - isl_int_abs_ge(tab->mat->row[row][1], - tab->mat->row[row][0]); -} - -/* Return 1 if "var" can attain values <= -1. - * Return 0 otherwise. - * - * The sample value of "var" is assumed to be non-negative when the - * the function is called. If 1 is returned then the constraint - * is not redundant and the sample value is made non-negative again before - * the function returns. - */ -int isl_tab_min_at_most_neg_one(struct isl_tab *tab, struct isl_tab_var *var) -{ - int row, col; - struct isl_tab_var *pivot_var; - - if (min_is_manifestly_unbounded(tab, var)) - return 1; - if (!var->is_row) { - col = var->index; - row = pivot_row(tab, NULL, -1, col); - pivot_var = var_from_col(tab, col); - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - if (var->is_redundant) - return 0; - if (row_at_most_neg_one(tab, var->index)) { - if (var->is_nonneg) { - if (!pivot_var->is_redundant && - pivot_var->index == row) { - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - } else - if (restore_row(tab, var) < -1) - return -1; - } - return 1; - } - } - if (var->is_redundant) - return 0; - do { - find_pivot(tab, var, var, -1, &row, &col); - if (row == var->index) { - if (restore_row(tab, var) < -1) - return -1; - return 1; - } - if (row == -1) - return 0; - pivot_var = var_from_col(tab, col); - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - if (var->is_redundant) - return 0; - } while (!row_at_most_neg_one(tab, var->index)); - if (var->is_nonneg) { - /* pivot back to non-negative value */ - if (!pivot_var->is_redundant && pivot_var->index == row) - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - if (restore_row(tab, var) < -1) - return -1; - } - return 1; -} - -/* Return 1 if "var" can attain values >= 1. - * Return 0 otherwise. - */ -static int at_least_one(struct isl_tab *tab, struct isl_tab_var *var) -{ - int row, col; - isl_int *r; - - if (max_is_manifestly_unbounded(tab, var)) - return 1; - if (to_row(tab, var, 1) < 0) - return -1; - r = tab->mat->row[var->index]; - while (isl_int_lt(r[1], r[0])) { - find_pivot(tab, var, var, 1, &row, &col); - if (row == -1) - return isl_int_ge(r[1], r[0]); - if (row == var->index) /* manifestly unbounded */ - return 1; - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - } - return 1; -} - -static void swap_cols(struct isl_tab *tab, int col1, int col2) -{ - int t; - unsigned off = 2 + tab->M; - t = tab->col_var[col1]; - tab->col_var[col1] = tab->col_var[col2]; - tab->col_var[col2] = t; - var_from_col(tab, col1)->index = col1; - var_from_col(tab, col2)->index = col2; - tab->mat = isl_mat_swap_cols(tab->mat, off + col1, off + col2); -} - -/* Mark column with index "col" as representing a zero variable. - * If we may need to undo the operation the column is kept, - * but no longer considered. - * Otherwise, the column is simply removed. - * - * The column may be interchanged with some other column. If it - * is interchanged with a later column, return 1. Otherwise return 0. - * If the columns are checked in order in the calling function, - * then a return value of 1 means that the column with the given - * column number may now contain a different column that - * hasn't been checked yet. - */ -int isl_tab_kill_col(struct isl_tab *tab, int col) -{ - var_from_col(tab, col)->is_zero = 1; - if (tab->need_undo) { - if (isl_tab_push_var(tab, isl_tab_undo_zero, - var_from_col(tab, col)) < 0) - return -1; - if (col != tab->n_dead) - swap_cols(tab, col, tab->n_dead); - tab->n_dead++; - return 0; - } else { - if (col != tab->n_col - 1) - swap_cols(tab, col, tab->n_col - 1); - var_from_col(tab, tab->n_col - 1)->index = -1; - tab->n_col--; - return 1; - } -} - -static int row_is_manifestly_non_integral(struct isl_tab *tab, int row) -{ - unsigned off = 2 + tab->M; - - if (tab->M && !isl_int_eq(tab->mat->row[row][2], - tab->mat->row[row][0])) - return 0; - if (isl_seq_first_non_zero(tab->mat->row[row] + off + tab->n_dead, - tab->n_col - tab->n_dead) != -1) - return 0; - - return !isl_int_is_divisible_by(tab->mat->row[row][1], - tab->mat->row[row][0]); -} - -/* For integer tableaus, check if any of the coordinates are stuck - * at a non-integral value. - */ -static int tab_is_manifestly_empty(struct isl_tab *tab) -{ - int i; - - if (tab->empty) - return 1; - if (tab->rational) - return 0; - - for (i = 0; i < tab->n_var; ++i) { - if (!tab->var[i].is_row) - continue; - if (row_is_manifestly_non_integral(tab, tab->var[i].index)) - return 1; - } - - return 0; -} - -/* Row variable "var" is non-negative and cannot attain any values - * larger than zero. This means that the coefficients of the unrestricted - * column variables are zero and that the coefficients of the non-negative - * column variables are zero or negative. - * Each of the non-negative variables with a negative coefficient can - * then also be written as the negative sum of non-negative variables - * and must therefore also be zero. - */ -static int close_row(struct isl_tab *tab, struct isl_tab_var *var) WARN_UNUSED; -static int close_row(struct isl_tab *tab, struct isl_tab_var *var) -{ - int j; - struct isl_mat *mat = tab->mat; - unsigned off = 2 + tab->M; - - isl_assert(tab->mat->ctx, var->is_nonneg, return -1); - var->is_zero = 1; - if (tab->need_undo) - if (isl_tab_push_var(tab, isl_tab_undo_zero, var) < 0) - return -1; - for (j = tab->n_dead; j < tab->n_col; ++j) { - int recheck; - if (isl_int_is_zero(mat->row[var->index][off + j])) - continue; - isl_assert(tab->mat->ctx, - isl_int_is_neg(mat->row[var->index][off + j]), return -1); - recheck = isl_tab_kill_col(tab, j); - if (recheck < 0) - return -1; - if (recheck) - --j; - } - if (isl_tab_mark_redundant(tab, var->index) < 0) - return -1; - if (tab_is_manifestly_empty(tab) && isl_tab_mark_empty(tab) < 0) - return -1; - return 0; -} - -/* Add a constraint to the tableau and allocate a row for it. - * Return the index into the constraint array "con". - */ -int isl_tab_allocate_con(struct isl_tab *tab) -{ - int r; - - isl_assert(tab->mat->ctx, tab->n_row < tab->mat->n_row, return -1); - isl_assert(tab->mat->ctx, tab->n_con < tab->max_con, return -1); - - r = tab->n_con; - tab->con[r].index = tab->n_row; - tab->con[r].is_row = 1; - tab->con[r].is_nonneg = 0; - tab->con[r].is_zero = 0; - tab->con[r].is_redundant = 0; - tab->con[r].frozen = 0; - tab->con[r].negated = 0; - tab->row_var[tab->n_row] = ~r; - - tab->n_row++; - tab->n_con++; - if (isl_tab_push_var(tab, isl_tab_undo_allocate, &tab->con[r]) < 0) - return -1; - - return r; -} - -/* Add a variable to the tableau and allocate a column for it. - * Return the index into the variable array "var". - */ -int isl_tab_allocate_var(struct isl_tab *tab) -{ - int r; - int i; - unsigned off = 2 + tab->M; - - isl_assert(tab->mat->ctx, tab->n_col < tab->mat->n_col, return -1); - isl_assert(tab->mat->ctx, tab->n_var < tab->max_var, return -1); - - r = tab->n_var; - tab->var[r].index = tab->n_col; - tab->var[r].is_row = 0; - tab->var[r].is_nonneg = 0; - tab->var[r].is_zero = 0; - tab->var[r].is_redundant = 0; - tab->var[r].frozen = 0; - tab->var[r].negated = 0; - tab->col_var[tab->n_col] = r; - - for (i = 0; i < tab->n_row; ++i) - isl_int_set_si(tab->mat->row[i][off + tab->n_col], 0); - - tab->n_var++; - tab->n_col++; - if (isl_tab_push_var(tab, isl_tab_undo_allocate, &tab->var[r]) < 0) - return -1; - - return r; -} - -/* Add a row to the tableau. The row is given as an affine combination - * of the original variables and needs to be expressed in terms of the - * column variables. - * - * We add each term in turn. - * If r = n/d_r is the current sum and we need to add k x, then - * if x is a column variable, we increase the numerator of - * this column by k d_r - * if x = f/d_x is a row variable, then the new representation of r is - * - * n k f d_x/g n + d_r/g k f m/d_r n + m/d_g k f - * --- + --- = ------------------- = ------------------- - * d_r d_r d_r d_x/g m - * - * with g the gcd of d_r and d_x and m the lcm of d_r and d_x. - * - * If tab->M is set, then, internally, each variable x is represented - * as x' - M. We then also need no subtract k d_r from the coefficient of M. - */ -int isl_tab_add_row(struct isl_tab *tab, isl_int *line) -{ - int i; - int r; - isl_int *row; - isl_int a, b; - unsigned off = 2 + tab->M; - - r = isl_tab_allocate_con(tab); - if (r < 0) - return -1; - - isl_int_init(a); - isl_int_init(b); - row = tab->mat->row[tab->con[r].index]; - isl_int_set_si(row[0], 1); - isl_int_set(row[1], line[0]); - isl_seq_clr(row + 2, tab->M + tab->n_col); - for (i = 0; i < tab->n_var; ++i) { - if (tab->var[i].is_zero) - continue; - if (tab->var[i].is_row) { - isl_int_lcm(a, - row[0], tab->mat->row[tab->var[i].index][0]); - isl_int_swap(a, row[0]); - isl_int_divexact(a, row[0], a); - isl_int_divexact(b, - row[0], tab->mat->row[tab->var[i].index][0]); - isl_int_mul(b, b, line[1 + i]); - isl_seq_combine(row + 1, a, row + 1, - b, tab->mat->row[tab->var[i].index] + 1, - 1 + tab->M + tab->n_col); - } else - isl_int_addmul(row[off + tab->var[i].index], - line[1 + i], row[0]); - if (tab->M && i >= tab->n_param && i < tab->n_var - tab->n_div) - isl_int_submul(row[2], line[1 + i], row[0]); - } - isl_seq_normalize(tab->mat->ctx, row, off + tab->n_col); - isl_int_clear(a); - isl_int_clear(b); - - if (tab->row_sign) - tab->row_sign[tab->con[r].index] = isl_tab_row_unknown; - - return r; -} - -static int drop_row(struct isl_tab *tab, int row) -{ - isl_assert(tab->mat->ctx, ~tab->row_var[row] == tab->n_con - 1, return -1); - if (row != tab->n_row - 1) - swap_rows(tab, row, tab->n_row - 1); - tab->n_row--; - tab->n_con--; - return 0; -} - -static int drop_col(struct isl_tab *tab, int col) -{ - isl_assert(tab->mat->ctx, tab->col_var[col] == tab->n_var - 1, return -1); - if (col != tab->n_col - 1) - swap_cols(tab, col, tab->n_col - 1); - tab->n_col--; - tab->n_var--; - return 0; -} - -/* Add inequality "ineq" and check if it conflicts with the - * previously added constraints or if it is obviously redundant. - */ -int isl_tab_add_ineq(struct isl_tab *tab, isl_int *ineq) -{ - int r; - int sgn; - isl_int cst; - - if (!tab) - return -1; - if (tab->bmap) { - struct isl_basic_map *bmap = tab->bmap; - - isl_assert(tab->mat->ctx, tab->n_eq == bmap->n_eq, return -1); - isl_assert(tab->mat->ctx, - tab->n_con == bmap->n_eq + bmap->n_ineq, return -1); - tab->bmap = isl_basic_map_add_ineq(tab->bmap, ineq); - if (isl_tab_push(tab, isl_tab_undo_bmap_ineq) < 0) - return -1; - if (!tab->bmap) - return -1; - } - if (tab->cone) { - isl_int_init(cst); - isl_int_swap(ineq[0], cst); - } - r = isl_tab_add_row(tab, ineq); - if (tab->cone) { - isl_int_swap(ineq[0], cst); - isl_int_clear(cst); - } - if (r < 0) - return -1; - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - return -1; - if (isl_tab_row_is_redundant(tab, tab->con[r].index)) { - if (isl_tab_mark_redundant(tab, tab->con[r].index) < 0) - return -1; - return 0; - } - - sgn = restore_row(tab, &tab->con[r]); - if (sgn < -1) - return -1; - if (sgn < 0) - return isl_tab_mark_empty(tab); - if (tab->con[r].is_row && isl_tab_row_is_redundant(tab, tab->con[r].index)) - if (isl_tab_mark_redundant(tab, tab->con[r].index) < 0) - return -1; - return 0; -} - -/* Pivot a non-negative variable down until it reaches the value zero - * and then pivot the variable into a column position. - */ -static int to_col(struct isl_tab *tab, struct isl_tab_var *var) WARN_UNUSED; -static int to_col(struct isl_tab *tab, struct isl_tab_var *var) -{ - int i; - int row, col; - unsigned off = 2 + tab->M; - - if (!var->is_row) - return 0; - - while (isl_int_is_pos(tab->mat->row[var->index][1])) { - find_pivot(tab, var, NULL, -1, &row, &col); - isl_assert(tab->mat->ctx, row != -1, return -1); - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - if (!var->is_row) - return 0; - } - - for (i = tab->n_dead; i < tab->n_col; ++i) - if (!isl_int_is_zero(tab->mat->row[var->index][off + i])) - break; - - isl_assert(tab->mat->ctx, i < tab->n_col, return -1); - if (isl_tab_pivot(tab, var->index, i) < 0) - return -1; - - return 0; -} - -/* We assume Gaussian elimination has been performed on the equalities. - * The equalities can therefore never conflict. - * Adding the equalities is currently only really useful for a later call - * to isl_tab_ineq_type. - */ -static struct isl_tab *add_eq(struct isl_tab *tab, isl_int *eq) -{ - int i; - int r; - - if (!tab) - return NULL; - r = isl_tab_add_row(tab, eq); - if (r < 0) - goto error; - - r = tab->con[r].index; - i = isl_seq_first_non_zero(tab->mat->row[r] + 2 + tab->M + tab->n_dead, - tab->n_col - tab->n_dead); - isl_assert(tab->mat->ctx, i >= 0, goto error); - i += tab->n_dead; - if (isl_tab_pivot(tab, r, i) < 0) - goto error; - if (isl_tab_kill_col(tab, i) < 0) - goto error; - tab->n_eq++; - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -static int row_is_manifestly_zero(struct isl_tab *tab, int row) -{ - unsigned off = 2 + tab->M; - - if (!isl_int_is_zero(tab->mat->row[row][1])) - return 0; - if (tab->M && !isl_int_is_zero(tab->mat->row[row][2])) - return 0; - return isl_seq_first_non_zero(tab->mat->row[row] + off + tab->n_dead, - tab->n_col - tab->n_dead) == -1; -} - -/* Add an equality that is known to be valid for the given tableau. - */ -int isl_tab_add_valid_eq(struct isl_tab *tab, isl_int *eq) -{ - struct isl_tab_var *var; - int r; - - if (!tab) - return -1; - r = isl_tab_add_row(tab, eq); - if (r < 0) - return -1; - - var = &tab->con[r]; - r = var->index; - if (row_is_manifestly_zero(tab, r)) { - var->is_zero = 1; - if (isl_tab_mark_redundant(tab, r) < 0) - return -1; - return 0; - } - - if (isl_int_is_neg(tab->mat->row[r][1])) { - isl_seq_neg(tab->mat->row[r] + 1, tab->mat->row[r] + 1, - 1 + tab->n_col); - var->negated = 1; - } - var->is_nonneg = 1; - if (to_col(tab, var) < 0) - return -1; - var->is_nonneg = 0; - if (isl_tab_kill_col(tab, var->index) < 0) - return -1; - - return 0; -} - -static int add_zero_row(struct isl_tab *tab) -{ - int r; - isl_int *row; - - r = isl_tab_allocate_con(tab); - if (r < 0) - return -1; - - row = tab->mat->row[tab->con[r].index]; - isl_seq_clr(row + 1, 1 + tab->M + tab->n_col); - isl_int_set_si(row[0], 1); - - return r; -} - -/* Add equality "eq" and check if it conflicts with the - * previously added constraints or if it is obviously redundant. - */ -int isl_tab_add_eq(struct isl_tab *tab, isl_int *eq) -{ - struct isl_tab_undo *snap = NULL; - struct isl_tab_var *var; - int r; - int row; - int sgn; - isl_int cst; - - if (!tab) - return -1; - isl_assert(tab->mat->ctx, !tab->M, return -1); - - if (tab->need_undo) - snap = isl_tab_snap(tab); - - if (tab->cone) { - isl_int_init(cst); - isl_int_swap(eq[0], cst); - } - r = isl_tab_add_row(tab, eq); - if (tab->cone) { - isl_int_swap(eq[0], cst); - isl_int_clear(cst); - } - if (r < 0) - return -1; - - var = &tab->con[r]; - row = var->index; - if (row_is_manifestly_zero(tab, row)) { - if (snap) { - if (isl_tab_rollback(tab, snap) < 0) - return -1; - } else - drop_row(tab, row); - return 0; - } - - if (tab->bmap) { - tab->bmap = isl_basic_map_add_ineq(tab->bmap, eq); - if (isl_tab_push(tab, isl_tab_undo_bmap_ineq) < 0) - return -1; - isl_seq_neg(eq, eq, 1 + tab->n_var); - tab->bmap = isl_basic_map_add_ineq(tab->bmap, eq); - isl_seq_neg(eq, eq, 1 + tab->n_var); - if (isl_tab_push(tab, isl_tab_undo_bmap_ineq) < 0) - return -1; - if (!tab->bmap) - return -1; - if (add_zero_row(tab) < 0) - return -1; - } - - sgn = isl_int_sgn(tab->mat->row[row][1]); - - if (sgn > 0) { - isl_seq_neg(tab->mat->row[row] + 1, tab->mat->row[row] + 1, - 1 + tab->n_col); - var->negated = 1; - sgn = -1; - } - - if (sgn < 0) { - sgn = sign_of_max(tab, var); - if (sgn < -1) - return -1; - if (sgn < 0) { - if (isl_tab_mark_empty(tab) < 0) - return -1; - return 0; - } - } - - var->is_nonneg = 1; - if (to_col(tab, var) < 0) - return -1; - var->is_nonneg = 0; - if (isl_tab_kill_col(tab, var->index) < 0) - return -1; - - return 0; -} - -/* Construct and return an inequality that expresses an upper bound - * on the given div. - * In particular, if the div is given by - * - * d = floor(e/m) - * - * then the inequality expresses - * - * m d <= e - */ -static struct isl_vec *ineq_for_div(struct isl_basic_map *bmap, unsigned div) -{ - unsigned total; - unsigned div_pos; - struct isl_vec *ineq; - - if (!bmap) - return NULL; - - total = isl_basic_map_total_dim(bmap); - div_pos = 1 + total - bmap->n_div + div; - - ineq = isl_vec_alloc(bmap->ctx, 1 + total); - if (!ineq) - return NULL; - - isl_seq_cpy(ineq->el, bmap->div[div] + 1, 1 + total); - isl_int_neg(ineq->el[div_pos], bmap->div[div][0]); - return ineq; -} - -/* For a div d = floor(f/m), add the constraints - * - * f - m d >= 0 - * -(f-(m-1)) + m d >= 0 - * - * Note that the second constraint is the negation of - * - * f - m d >= m - * - * If add_ineq is not NULL, then this function is used - * instead of isl_tab_add_ineq to effectively add the inequalities. - */ -static int add_div_constraints(struct isl_tab *tab, unsigned div, - int (*add_ineq)(void *user, isl_int *), void *user) -{ - unsigned total; - unsigned div_pos; - struct isl_vec *ineq; - - total = isl_basic_map_total_dim(tab->bmap); - div_pos = 1 + total - tab->bmap->n_div + div; - - ineq = ineq_for_div(tab->bmap, div); - if (!ineq) - goto error; - - if (add_ineq) { - if (add_ineq(user, ineq->el) < 0) - goto error; - } else { - if (isl_tab_add_ineq(tab, ineq->el) < 0) - goto error; - } - - isl_seq_neg(ineq->el, tab->bmap->div[div] + 1, 1 + total); - isl_int_set(ineq->el[div_pos], tab->bmap->div[div][0]); - isl_int_add(ineq->el[0], ineq->el[0], ineq->el[div_pos]); - isl_int_sub_ui(ineq->el[0], ineq->el[0], 1); - - if (add_ineq) { - if (add_ineq(user, ineq->el) < 0) - goto error; - } else { - if (isl_tab_add_ineq(tab, ineq->el) < 0) - goto error; - } - - isl_vec_free(ineq); - - return 0; -error: - isl_vec_free(ineq); - return -1; -} - -/* Check whether the div described by "div" is obviously non-negative. - * If we are using a big parameter, then we will encode the div - * as div' = M + div, which is always non-negative. - * Otherwise, we check whether div is a non-negative affine combination - * of non-negative variables. - */ -static int div_is_nonneg(struct isl_tab *tab, __isl_keep isl_vec *div) -{ - int i; - - if (tab->M) - return 1; - - if (isl_int_is_neg(div->el[1])) - return 0; - - for (i = 0; i < tab->n_var; ++i) { - if (isl_int_is_neg(div->el[2 + i])) - return 0; - if (isl_int_is_zero(div->el[2 + i])) - continue; - if (!tab->var[i].is_nonneg) - return 0; - } - - return 1; -} - -/* Add an extra div, prescribed by "div" to the tableau and - * the associated bmap (which is assumed to be non-NULL). - * - * If add_ineq is not NULL, then this function is used instead - * of isl_tab_add_ineq to add the div constraints. - * This complication is needed because the code in isl_tab_pip - * wants to perform some extra processing when an inequality - * is added to the tableau. - */ -int isl_tab_add_div(struct isl_tab *tab, __isl_keep isl_vec *div, - int (*add_ineq)(void *user, isl_int *), void *user) -{ - int r; - int k; - int nonneg; - - if (!tab || !div) - return -1; - - isl_assert(tab->mat->ctx, tab->bmap, return -1); - - nonneg = div_is_nonneg(tab, div); - - if (isl_tab_extend_cons(tab, 3) < 0) - return -1; - if (isl_tab_extend_vars(tab, 1) < 0) - return -1; - r = isl_tab_allocate_var(tab); - if (r < 0) - return -1; - - if (nonneg) - tab->var[r].is_nonneg = 1; - - tab->bmap = isl_basic_map_extend_space(tab->bmap, - isl_basic_map_get_space(tab->bmap), 1, 0, 2); - k = isl_basic_map_alloc_div(tab->bmap); - if (k < 0) - return -1; - isl_seq_cpy(tab->bmap->div[k], div->el, div->size); - if (isl_tab_push(tab, isl_tab_undo_bmap_div) < 0) - return -1; - - if (add_div_constraints(tab, k, add_ineq, user) < 0) - return -1; - - return r; -} - -struct isl_tab *isl_tab_from_basic_map(struct isl_basic_map *bmap) -{ - int i; - struct isl_tab *tab; - - if (!bmap) - return NULL; - tab = isl_tab_alloc(bmap->ctx, - isl_basic_map_total_dim(bmap) + bmap->n_ineq + 1, - isl_basic_map_total_dim(bmap), 0); - if (!tab) - return NULL; - tab->rational = ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL); - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) { - if (isl_tab_mark_empty(tab) < 0) - goto error; - return tab; - } - for (i = 0; i < bmap->n_eq; ++i) { - tab = add_eq(tab, bmap->eq[i]); - if (!tab) - return tab; - } - for (i = 0; i < bmap->n_ineq; ++i) { - if (isl_tab_add_ineq(tab, bmap->ineq[i]) < 0) - goto error; - if (tab->empty) - return tab; - } - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -struct isl_tab *isl_tab_from_basic_set(struct isl_basic_set *bset) -{ - return isl_tab_from_basic_map((struct isl_basic_map *)bset); -} - -/* Construct a tableau corresponding to the recession cone of "bset". - */ -struct isl_tab *isl_tab_from_recession_cone(__isl_keep isl_basic_set *bset, - int parametric) -{ - isl_int cst; - int i; - struct isl_tab *tab; - unsigned offset = 0; - - if (!bset) - return NULL; - if (parametric) - offset = isl_basic_set_dim(bset, isl_dim_param); - tab = isl_tab_alloc(bset->ctx, bset->n_eq + bset->n_ineq, - isl_basic_set_total_dim(bset) - offset, 0); - if (!tab) - return NULL; - tab->rational = ISL_F_ISSET(bset, ISL_BASIC_SET_RATIONAL); - tab->cone = 1; - - isl_int_init(cst); - for (i = 0; i < bset->n_eq; ++i) { - isl_int_swap(bset->eq[i][offset], cst); - if (offset > 0) { - if (isl_tab_add_eq(tab, bset->eq[i] + offset) < 0) - goto error; - } else - tab = add_eq(tab, bset->eq[i]); - isl_int_swap(bset->eq[i][offset], cst); - if (!tab) - goto done; - } - for (i = 0; i < bset->n_ineq; ++i) { - int r; - isl_int_swap(bset->ineq[i][offset], cst); - r = isl_tab_add_row(tab, bset->ineq[i] + offset); - isl_int_swap(bset->ineq[i][offset], cst); - if (r < 0) - goto error; - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - goto error; - } -done: - isl_int_clear(cst); - return tab; -error: - isl_int_clear(cst); - isl_tab_free(tab); - return NULL; -} - -/* Assuming "tab" is the tableau of a cone, check if the cone is - * bounded, i.e., if it is empty or only contains the origin. - */ -int isl_tab_cone_is_bounded(struct isl_tab *tab) -{ - int i; - - if (!tab) - return -1; - if (tab->empty) - return 1; - if (tab->n_dead == tab->n_col) - return 1; - - for (;;) { - for (i = tab->n_redundant; i < tab->n_row; ++i) { - struct isl_tab_var *var; - int sgn; - var = isl_tab_var_from_row(tab, i); - if (!var->is_nonneg) - continue; - sgn = sign_of_max(tab, var); - if (sgn < -1) - return -1; - if (sgn != 0) - return 0; - if (close_row(tab, var) < 0) - return -1; - break; - } - if (tab->n_dead == tab->n_col) - return 1; - if (i == tab->n_row) - return 0; - } -} - -int isl_tab_sample_is_integer(struct isl_tab *tab) -{ - int i; - - if (!tab) - return -1; - - for (i = 0; i < tab->n_var; ++i) { - int row; - if (!tab->var[i].is_row) - continue; - row = tab->var[i].index; - if (!isl_int_is_divisible_by(tab->mat->row[row][1], - tab->mat->row[row][0])) - return 0; - } - return 1; -} - -static struct isl_vec *extract_integer_sample(struct isl_tab *tab) -{ - int i; - struct isl_vec *vec; - - vec = isl_vec_alloc(tab->mat->ctx, 1 + tab->n_var); - if (!vec) - return NULL; - - isl_int_set_si(vec->block.data[0], 1); - for (i = 0; i < tab->n_var; ++i) { - if (!tab->var[i].is_row) - isl_int_set_si(vec->block.data[1 + i], 0); - else { - int row = tab->var[i].index; - isl_int_divexact(vec->block.data[1 + i], - tab->mat->row[row][1], tab->mat->row[row][0]); - } - } - - return vec; -} - -struct isl_vec *isl_tab_get_sample_value(struct isl_tab *tab) -{ - int i; - struct isl_vec *vec; - isl_int m; - - if (!tab) - return NULL; - - vec = isl_vec_alloc(tab->mat->ctx, 1 + tab->n_var); - if (!vec) - return NULL; - - isl_int_init(m); - - isl_int_set_si(vec->block.data[0], 1); - for (i = 0; i < tab->n_var; ++i) { - int row; - if (!tab->var[i].is_row) { - isl_int_set_si(vec->block.data[1 + i], 0); - continue; - } - row = tab->var[i].index; - isl_int_gcd(m, vec->block.data[0], tab->mat->row[row][0]); - isl_int_divexact(m, tab->mat->row[row][0], m); - isl_seq_scale(vec->block.data, vec->block.data, m, 1 + i); - isl_int_divexact(m, vec->block.data[0], tab->mat->row[row][0]); - isl_int_mul(vec->block.data[1 + i], m, tab->mat->row[row][1]); - } - vec = isl_vec_normalize(vec); - - isl_int_clear(m); - return vec; -} - -/* Update "bmap" based on the results of the tableau "tab". - * In particular, implicit equalities are made explicit, redundant constraints - * are removed and if the sample value happens to be integer, it is stored - * in "bmap" (unless "bmap" already had an integer sample). - * - * The tableau is assumed to have been created from "bmap" using - * isl_tab_from_basic_map. - */ -struct isl_basic_map *isl_basic_map_update_from_tab(struct isl_basic_map *bmap, - struct isl_tab *tab) -{ - int i; - unsigned n_eq; - - if (!bmap) - return NULL; - if (!tab) - return bmap; - - n_eq = tab->n_eq; - if (tab->empty) - bmap = isl_basic_map_set_to_empty(bmap); - else - for (i = bmap->n_ineq - 1; i >= 0; --i) { - if (isl_tab_is_equality(tab, n_eq + i)) - isl_basic_map_inequality_to_equality(bmap, i); - else if (isl_tab_is_redundant(tab, n_eq + i)) - isl_basic_map_drop_inequality(bmap, i); - } - if (bmap->n_eq != n_eq) - isl_basic_map_gauss(bmap, NULL); - if (!tab->rational && - !bmap->sample && isl_tab_sample_is_integer(tab)) - bmap->sample = extract_integer_sample(tab); - return bmap; -} - -struct isl_basic_set *isl_basic_set_update_from_tab(struct isl_basic_set *bset, - struct isl_tab *tab) -{ - return (struct isl_basic_set *)isl_basic_map_update_from_tab( - (struct isl_basic_map *)bset, tab); -} - -/* Given a non-negative variable "var", add a new non-negative variable - * that is the opposite of "var", ensuring that var can only attain the - * value zero. - * If var = n/d is a row variable, then the new variable = -n/d. - * If var is a column variables, then the new variable = -var. - * If the new variable cannot attain non-negative values, then - * the resulting tableau is empty. - * Otherwise, we know the value will be zero and we close the row. - */ -static int cut_to_hyperplane(struct isl_tab *tab, struct isl_tab_var *var) -{ - unsigned r; - isl_int *row; - int sgn; - unsigned off = 2 + tab->M; - - if (var->is_zero) - return 0; - isl_assert(tab->mat->ctx, !var->is_redundant, return -1); - isl_assert(tab->mat->ctx, var->is_nonneg, return -1); - - if (isl_tab_extend_cons(tab, 1) < 0) - return -1; - - r = tab->n_con; - tab->con[r].index = tab->n_row; - tab->con[r].is_row = 1; - tab->con[r].is_nonneg = 0; - tab->con[r].is_zero = 0; - tab->con[r].is_redundant = 0; - tab->con[r].frozen = 0; - tab->con[r].negated = 0; - tab->row_var[tab->n_row] = ~r; - row = tab->mat->row[tab->n_row]; - - if (var->is_row) { - isl_int_set(row[0], tab->mat->row[var->index][0]); - isl_seq_neg(row + 1, - tab->mat->row[var->index] + 1, 1 + tab->n_col); - } else { - isl_int_set_si(row[0], 1); - isl_seq_clr(row + 1, 1 + tab->n_col); - isl_int_set_si(row[off + var->index], -1); - } - - tab->n_row++; - tab->n_con++; - if (isl_tab_push_var(tab, isl_tab_undo_allocate, &tab->con[r]) < 0) - return -1; - - sgn = sign_of_max(tab, &tab->con[r]); - if (sgn < -1) - return -1; - if (sgn < 0) { - if (isl_tab_mark_empty(tab) < 0) - return -1; - return 0; - } - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - return -1; - /* sgn == 0 */ - if (close_row(tab, &tab->con[r]) < 0) - return -1; - - return 0; -} - -/* Given a tableau "tab" and an inequality constraint "con" of the tableau, - * relax the inequality by one. That is, the inequality r >= 0 is replaced - * by r' = r + 1 >= 0. - * If r is a row variable, we simply increase the constant term by one - * (taking into account the denominator). - * If r is a column variable, then we need to modify each row that - * refers to r = r' - 1 by substituting this equality, effectively - * subtracting the coefficient of the column from the constant. - * We should only do this if the minimum is manifestly unbounded, - * however. Otherwise, we may end up with negative sample values - * for non-negative variables. - * So, if r is a column variable with a minimum that is not - * manifestly unbounded, then we need to move it to a row. - * However, the sample value of this row may be negative, - * even after the relaxation, so we need to restore it. - * We therefore prefer to pivot a column up to a row, if possible. - */ -struct isl_tab *isl_tab_relax(struct isl_tab *tab, int con) -{ - struct isl_tab_var *var; - unsigned off = 2 + tab->M; - - if (!tab) - return NULL; - - var = &tab->con[con]; - - if (!var->is_row && !max_is_manifestly_unbounded(tab, var)) - if (to_row(tab, var, 1) < 0) - goto error; - if (!var->is_row && !min_is_manifestly_unbounded(tab, var)) - if (to_row(tab, var, -1) < 0) - goto error; - - if (var->is_row) { - isl_int_add(tab->mat->row[var->index][1], - tab->mat->row[var->index][1], tab->mat->row[var->index][0]); - if (restore_row(tab, var) < 0) - goto error; - } else { - int i; - - for (i = 0; i < tab->n_row; ++i) { - if (isl_int_is_zero(tab->mat->row[i][off + var->index])) - continue; - isl_int_sub(tab->mat->row[i][1], tab->mat->row[i][1], - tab->mat->row[i][off + var->index]); - } - - } - - if (isl_tab_push_var(tab, isl_tab_undo_relax, var) < 0) - goto error; - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -int isl_tab_select_facet(struct isl_tab *tab, int con) -{ - if (!tab) - return -1; - - return cut_to_hyperplane(tab, &tab->con[con]); -} - -static int may_be_equality(struct isl_tab *tab, int row) -{ - return tab->rational ? isl_int_is_zero(tab->mat->row[row][1]) - : isl_int_lt(tab->mat->row[row][1], - tab->mat->row[row][0]); -} - -/* Check for (near) equalities among the constraints. - * A constraint is an equality if it is non-negative and if - * its maximal value is either - * - zero (in case of rational tableaus), or - * - strictly less than 1 (in case of integer tableaus) - * - * We first mark all non-redundant and non-dead variables that - * are not frozen and not obviously not an equality. - * Then we iterate over all marked variables if they can attain - * any values larger than zero or at least one. - * If the maximal value is zero, we mark any column variables - * that appear in the row as being zero and mark the row as being redundant. - * Otherwise, if the maximal value is strictly less than one (and the - * tableau is integer), then we restrict the value to being zero - * by adding an opposite non-negative variable. - */ -int isl_tab_detect_implicit_equalities(struct isl_tab *tab) -{ - int i; - unsigned n_marked; - - if (!tab) - return -1; - if (tab->empty) - return 0; - if (tab->n_dead == tab->n_col) - return 0; - - n_marked = 0; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - struct isl_tab_var *var = isl_tab_var_from_row(tab, i); - var->marked = !var->frozen && var->is_nonneg && - may_be_equality(tab, i); - if (var->marked) - n_marked++; - } - for (i = tab->n_dead; i < tab->n_col; ++i) { - struct isl_tab_var *var = var_from_col(tab, i); - var->marked = !var->frozen && var->is_nonneg; - if (var->marked) - n_marked++; - } - while (n_marked) { - struct isl_tab_var *var; - int sgn; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - var = isl_tab_var_from_row(tab, i); - if (var->marked) - break; - } - if (i == tab->n_row) { - for (i = tab->n_dead; i < tab->n_col; ++i) { - var = var_from_col(tab, i); - if (var->marked) - break; - } - if (i == tab->n_col) - break; - } - var->marked = 0; - n_marked--; - sgn = sign_of_max(tab, var); - if (sgn < 0) - return -1; - if (sgn == 0) { - if (close_row(tab, var) < 0) - return -1; - } else if (!tab->rational && !at_least_one(tab, var)) { - if (cut_to_hyperplane(tab, var) < 0) - return -1; - return isl_tab_detect_implicit_equalities(tab); - } - for (i = tab->n_redundant; i < tab->n_row; ++i) { - var = isl_tab_var_from_row(tab, i); - if (!var->marked) - continue; - if (may_be_equality(tab, i)) - continue; - var->marked = 0; - n_marked--; - } - } - - return 0; -} - -static int con_is_redundant(struct isl_tab *tab, struct isl_tab_var *var) -{ - if (!tab) - return -1; - if (tab->rational) { - int sgn = sign_of_min(tab, var); - if (sgn < -1) - return -1; - return sgn >= 0; - } else { - int irred = isl_tab_min_at_most_neg_one(tab, var); - if (irred < 0) - return -1; - return !irred; - } -} - -/* Check for (near) redundant constraints. - * A constraint is redundant if it is non-negative and if - * its minimal value (temporarily ignoring the non-negativity) is either - * - zero (in case of rational tableaus), or - * - strictly larger than -1 (in case of integer tableaus) - * - * We first mark all non-redundant and non-dead variables that - * are not frozen and not obviously negatively unbounded. - * Then we iterate over all marked variables if they can attain - * any values smaller than zero or at most negative one. - * If not, we mark the row as being redundant (assuming it hasn't - * been detected as being obviously redundant in the mean time). - */ -int isl_tab_detect_redundant(struct isl_tab *tab) -{ - int i; - unsigned n_marked; - - if (!tab) - return -1; - if (tab->empty) - return 0; - if (tab->n_redundant == tab->n_row) - return 0; - - n_marked = 0; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - struct isl_tab_var *var = isl_tab_var_from_row(tab, i); - var->marked = !var->frozen && var->is_nonneg; - if (var->marked) - n_marked++; - } - for (i = tab->n_dead; i < tab->n_col; ++i) { - struct isl_tab_var *var = var_from_col(tab, i); - var->marked = !var->frozen && var->is_nonneg && - !min_is_manifestly_unbounded(tab, var); - if (var->marked) - n_marked++; - } - while (n_marked) { - struct isl_tab_var *var; - int red; - for (i = tab->n_redundant; i < tab->n_row; ++i) { - var = isl_tab_var_from_row(tab, i); - if (var->marked) - break; - } - if (i == tab->n_row) { - for (i = tab->n_dead; i < tab->n_col; ++i) { - var = var_from_col(tab, i); - if (var->marked) - break; - } - if (i == tab->n_col) - break; - } - var->marked = 0; - n_marked--; - red = con_is_redundant(tab, var); - if (red < 0) - return -1; - if (red && !var->is_redundant) - if (isl_tab_mark_redundant(tab, var->index) < 0) - return -1; - for (i = tab->n_dead; i < tab->n_col; ++i) { - var = var_from_col(tab, i); - if (!var->marked) - continue; - if (!min_is_manifestly_unbounded(tab, var)) - continue; - var->marked = 0; - n_marked--; - } - } - - return 0; -} - -int isl_tab_is_equality(struct isl_tab *tab, int con) -{ - int row; - unsigned off; - - if (!tab) - return -1; - if (tab->con[con].is_zero) - return 1; - if (tab->con[con].is_redundant) - return 0; - if (!tab->con[con].is_row) - return tab->con[con].index < tab->n_dead; - - row = tab->con[con].index; - - off = 2 + tab->M; - return isl_int_is_zero(tab->mat->row[row][1]) && - (!tab->M || isl_int_is_zero(tab->mat->row[row][2])) && - isl_seq_first_non_zero(tab->mat->row[row] + off + tab->n_dead, - tab->n_col - tab->n_dead) == -1; -} - -/* Return the minimal value of the affine expression "f" with denominator - * "denom" in *opt, *opt_denom, assuming the tableau is not empty and - * the expression cannot attain arbitrarily small values. - * If opt_denom is NULL, then *opt is rounded up to the nearest integer. - * The return value reflects the nature of the result (empty, unbounded, - * minimal value returned in *opt). - */ -enum isl_lp_result isl_tab_min(struct isl_tab *tab, - isl_int *f, isl_int denom, isl_int *opt, isl_int *opt_denom, - unsigned flags) -{ - int r; - enum isl_lp_result res = isl_lp_ok; - struct isl_tab_var *var; - struct isl_tab_undo *snap; - - if (!tab) - return isl_lp_error; - - if (tab->empty) - return isl_lp_empty; - - snap = isl_tab_snap(tab); - r = isl_tab_add_row(tab, f); - if (r < 0) - return isl_lp_error; - var = &tab->con[r]; - for (;;) { - int row, col; - find_pivot(tab, var, var, -1, &row, &col); - if (row == var->index) { - res = isl_lp_unbounded; - break; - } - if (row == -1) - break; - if (isl_tab_pivot(tab, row, col) < 0) - return isl_lp_error; - } - isl_int_mul(tab->mat->row[var->index][0], - tab->mat->row[var->index][0], denom); - if (ISL_FL_ISSET(flags, ISL_TAB_SAVE_DUAL)) { - int i; - - isl_vec_free(tab->dual); - tab->dual = isl_vec_alloc(tab->mat->ctx, 1 + tab->n_con); - if (!tab->dual) - return isl_lp_error; - isl_int_set(tab->dual->el[0], tab->mat->row[var->index][0]); - for (i = 0; i < tab->n_con; ++i) { - int pos; - if (tab->con[i].is_row) { - isl_int_set_si(tab->dual->el[1 + i], 0); - continue; - } - pos = 2 + tab->M + tab->con[i].index; - if (tab->con[i].negated) - isl_int_neg(tab->dual->el[1 + i], - tab->mat->row[var->index][pos]); - else - isl_int_set(tab->dual->el[1 + i], - tab->mat->row[var->index][pos]); - } - } - if (opt && res == isl_lp_ok) { - if (opt_denom) { - isl_int_set(*opt, tab->mat->row[var->index][1]); - isl_int_set(*opt_denom, tab->mat->row[var->index][0]); - } else - isl_int_cdiv_q(*opt, tab->mat->row[var->index][1], - tab->mat->row[var->index][0]); - } - if (isl_tab_rollback(tab, snap) < 0) - return isl_lp_error; - return res; -} - -int isl_tab_is_redundant(struct isl_tab *tab, int con) -{ - if (!tab) - return -1; - if (tab->con[con].is_zero) - return 0; - if (tab->con[con].is_redundant) - return 1; - return tab->con[con].is_row && tab->con[con].index < tab->n_redundant; -} - -/* Take a snapshot of the tableau that can be restored by s call to - * isl_tab_rollback. - */ -struct isl_tab_undo *isl_tab_snap(struct isl_tab *tab) -{ - if (!tab) - return NULL; - tab->need_undo = 1; - return tab->top; -} - -/* Undo the operation performed by isl_tab_relax. - */ -static int unrelax(struct isl_tab *tab, struct isl_tab_var *var) WARN_UNUSED; -static int unrelax(struct isl_tab *tab, struct isl_tab_var *var) -{ - unsigned off = 2 + tab->M; - - if (!var->is_row && !max_is_manifestly_unbounded(tab, var)) - if (to_row(tab, var, 1) < 0) - return -1; - - if (var->is_row) { - isl_int_sub(tab->mat->row[var->index][1], - tab->mat->row[var->index][1], tab->mat->row[var->index][0]); - if (var->is_nonneg) { - int sgn = restore_row(tab, var); - isl_assert(tab->mat->ctx, sgn >= 0, return -1); - } - } else { - int i; - - for (i = 0; i < tab->n_row; ++i) { - if (isl_int_is_zero(tab->mat->row[i][off + var->index])) - continue; - isl_int_add(tab->mat->row[i][1], tab->mat->row[i][1], - tab->mat->row[i][off + var->index]); - } - - } - - return 0; -} - -static int perform_undo_var(struct isl_tab *tab, struct isl_tab_undo *undo) WARN_UNUSED; -static int perform_undo_var(struct isl_tab *tab, struct isl_tab_undo *undo) -{ - struct isl_tab_var *var = var_from_index(tab, undo->u.var_index); - switch (undo->type) { - case isl_tab_undo_nonneg: - var->is_nonneg = 0; - break; - case isl_tab_undo_redundant: - var->is_redundant = 0; - tab->n_redundant--; - restore_row(tab, isl_tab_var_from_row(tab, tab->n_redundant)); - break; - case isl_tab_undo_freeze: - var->frozen = 0; - break; - case isl_tab_undo_zero: - var->is_zero = 0; - if (!var->is_row) - tab->n_dead--; - break; - case isl_tab_undo_allocate: - if (undo->u.var_index >= 0) { - isl_assert(tab->mat->ctx, !var->is_row, return -1); - drop_col(tab, var->index); - break; - } - if (!var->is_row) { - if (!max_is_manifestly_unbounded(tab, var)) { - if (to_row(tab, var, 1) < 0) - return -1; - } else if (!min_is_manifestly_unbounded(tab, var)) { - if (to_row(tab, var, -1) < 0) - return -1; - } else - if (to_row(tab, var, 0) < 0) - return -1; - } - drop_row(tab, var->index); - break; - case isl_tab_undo_relax: - return unrelax(tab, var); - default: - isl_die(tab->mat->ctx, isl_error_internal, - "perform_undo_var called on invalid undo record", - return -1); - } - - return 0; -} - -/* Restore the tableau to the state where the basic variables - * are those in "col_var". - * We first construct a list of variables that are currently in - * the basis, but shouldn't. Then we iterate over all variables - * that should be in the basis and for each one that is currently - * not in the basis, we exchange it with one of the elements of the - * list constructed before. - * We can always find an appropriate variable to pivot with because - * the current basis is mapped to the old basis by a non-singular - * matrix and so we can never end up with a zero row. - */ -static int restore_basis(struct isl_tab *tab, int *col_var) -{ - int i, j; - int n_extra = 0; - int *extra = NULL; /* current columns that contain bad stuff */ - unsigned off = 2 + tab->M; - - extra = isl_alloc_array(tab->mat->ctx, int, tab->n_col); - if (!extra) - goto error; - for (i = 0; i < tab->n_col; ++i) { - for (j = 0; j < tab->n_col; ++j) - if (tab->col_var[i] == col_var[j]) - break; - if (j < tab->n_col) - continue; - extra[n_extra++] = i; - } - for (i = 0; i < tab->n_col && n_extra > 0; ++i) { - struct isl_tab_var *var; - int row; - - for (j = 0; j < tab->n_col; ++j) - if (col_var[i] == tab->col_var[j]) - break; - if (j < tab->n_col) - continue; - var = var_from_index(tab, col_var[i]); - row = var->index; - for (j = 0; j < n_extra; ++j) - if (!isl_int_is_zero(tab->mat->row[row][off+extra[j]])) - break; - isl_assert(tab->mat->ctx, j < n_extra, goto error); - if (isl_tab_pivot(tab, row, extra[j]) < 0) - goto error; - extra[j] = extra[--n_extra]; - } - - free(extra); - return 0; -error: - free(extra); - return -1; -} - -/* Remove all samples with index n or greater, i.e., those samples - * that were added since we saved this number of samples in - * isl_tab_save_samples. - */ -static void drop_samples_since(struct isl_tab *tab, int n) -{ - int i; - - for (i = tab->n_sample - 1; i >= 0 && tab->n_sample > n; --i) { - if (tab->sample_index[i] < n) - continue; - - if (i != tab->n_sample - 1) { - int t = tab->sample_index[tab->n_sample-1]; - tab->sample_index[tab->n_sample-1] = tab->sample_index[i]; - tab->sample_index[i] = t; - isl_mat_swap_rows(tab->samples, tab->n_sample-1, i); - } - tab->n_sample--; - } -} - -static int perform_undo(struct isl_tab *tab, struct isl_tab_undo *undo) WARN_UNUSED; -static int perform_undo(struct isl_tab *tab, struct isl_tab_undo *undo) -{ - switch (undo->type) { - case isl_tab_undo_empty: - tab->empty = 0; - break; - case isl_tab_undo_nonneg: - case isl_tab_undo_redundant: - case isl_tab_undo_freeze: - case isl_tab_undo_zero: - case isl_tab_undo_allocate: - case isl_tab_undo_relax: - return perform_undo_var(tab, undo); - case isl_tab_undo_bmap_eq: - return isl_basic_map_free_equality(tab->bmap, 1); - case isl_tab_undo_bmap_ineq: - return isl_basic_map_free_inequality(tab->bmap, 1); - case isl_tab_undo_bmap_div: - if (isl_basic_map_free_div(tab->bmap, 1) < 0) - return -1; - if (tab->samples) - tab->samples->n_col--; - break; - case isl_tab_undo_saved_basis: - if (restore_basis(tab, undo->u.col_var) < 0) - return -1; - break; - case isl_tab_undo_drop_sample: - tab->n_outside--; - break; - case isl_tab_undo_saved_samples: - drop_samples_since(tab, undo->u.n); - break; - case isl_tab_undo_callback: - return undo->u.callback->run(undo->u.callback); - default: - isl_assert(tab->mat->ctx, 0, return -1); - } - return 0; -} - -/* Return the tableau to the state it was in when the snapshot "snap" - * was taken. - */ -int isl_tab_rollback(struct isl_tab *tab, struct isl_tab_undo *snap) -{ - struct isl_tab_undo *undo, *next; - - if (!tab) - return -1; - - tab->in_undo = 1; - for (undo = tab->top; undo && undo != &tab->bottom; undo = next) { - next = undo->next; - if (undo == snap) - break; - if (perform_undo(tab, undo) < 0) { - tab->top = undo; - free_undo(tab); - tab->in_undo = 0; - return -1; - } - free_undo_record(undo); - } - tab->in_undo = 0; - tab->top = undo; - if (!undo) - return -1; - return 0; -} - -/* The given row "row" represents an inequality violated by all - * points in the tableau. Check for some special cases of such - * separating constraints. - * In particular, if the row has been reduced to the constant -1, - * then we know the inequality is adjacent (but opposite) to - * an equality in the tableau. - * If the row has been reduced to r = c*(-1 -r'), with r' an inequality - * of the tableau and c a positive constant, then the inequality - * is adjacent (but opposite) to the inequality r'. - */ -static enum isl_ineq_type separation_type(struct isl_tab *tab, unsigned row) -{ - int pos; - unsigned off = 2 + tab->M; - - if (tab->rational) - return isl_ineq_separate; - - if (!isl_int_is_one(tab->mat->row[row][0])) - return isl_ineq_separate; - - pos = isl_seq_first_non_zero(tab->mat->row[row] + off + tab->n_dead, - tab->n_col - tab->n_dead); - if (pos == -1) { - if (isl_int_is_negone(tab->mat->row[row][1])) - return isl_ineq_adj_eq; - else - return isl_ineq_separate; - } - - if (!isl_int_eq(tab->mat->row[row][1], - tab->mat->row[row][off + tab->n_dead + pos])) - return isl_ineq_separate; - - pos = isl_seq_first_non_zero( - tab->mat->row[row] + off + tab->n_dead + pos + 1, - tab->n_col - tab->n_dead - pos - 1); - - return pos == -1 ? isl_ineq_adj_ineq : isl_ineq_separate; -} - -/* Check the effect of inequality "ineq" on the tableau "tab". - * The result may be - * isl_ineq_redundant: satisfied by all points in the tableau - * isl_ineq_separate: satisfied by no point in the tableau - * isl_ineq_cut: satisfied by some by not all points - * isl_ineq_adj_eq: adjacent to an equality - * isl_ineq_adj_ineq: adjacent to an inequality. - */ -enum isl_ineq_type isl_tab_ineq_type(struct isl_tab *tab, isl_int *ineq) -{ - enum isl_ineq_type type = isl_ineq_error; - struct isl_tab_undo *snap = NULL; - int con; - int row; - - if (!tab) - return isl_ineq_error; - - if (isl_tab_extend_cons(tab, 1) < 0) - return isl_ineq_error; - - snap = isl_tab_snap(tab); - - con = isl_tab_add_row(tab, ineq); - if (con < 0) - goto error; - - row = tab->con[con].index; - if (isl_tab_row_is_redundant(tab, row)) - type = isl_ineq_redundant; - else if (isl_int_is_neg(tab->mat->row[row][1]) && - (tab->rational || - isl_int_abs_ge(tab->mat->row[row][1], - tab->mat->row[row][0]))) { - int nonneg = at_least_zero(tab, &tab->con[con]); - if (nonneg < 0) - goto error; - if (nonneg) - type = isl_ineq_cut; - else - type = separation_type(tab, row); - } else { - int red = con_is_redundant(tab, &tab->con[con]); - if (red < 0) - goto error; - if (!red) - type = isl_ineq_cut; - else - type = isl_ineq_redundant; - } - - if (isl_tab_rollback(tab, snap)) - return isl_ineq_error; - return type; -error: - return isl_ineq_error; -} - -int isl_tab_track_bmap(struct isl_tab *tab, __isl_take isl_basic_map *bmap) -{ - if (!tab || !bmap) - goto error; - - isl_assert(tab->mat->ctx, tab->n_eq == bmap->n_eq, return -1); - isl_assert(tab->mat->ctx, - tab->n_con == bmap->n_eq + bmap->n_ineq, return -1); - - tab->bmap = bmap; - - return 0; -error: - isl_basic_map_free(bmap); - return -1; -} - -int isl_tab_track_bset(struct isl_tab *tab, __isl_take isl_basic_set *bset) -{ - return isl_tab_track_bmap(tab, (isl_basic_map *)bset); -} - -__isl_keep isl_basic_set *isl_tab_peek_bset(struct isl_tab *tab) -{ - if (!tab) - return NULL; - - return (isl_basic_set *)tab->bmap; -} - -static void isl_tab_print_internal(__isl_keep struct isl_tab *tab, - FILE *out, int indent) -{ - unsigned r, c; - int i; - - if (!tab) { - fprintf(out, "%*snull tab\n", indent, ""); - return; - } - fprintf(out, "%*sn_redundant: %d, n_dead: %d", indent, "", - tab->n_redundant, tab->n_dead); - if (tab->rational) - fprintf(out, ", rational"); - if (tab->empty) - fprintf(out, ", empty"); - fprintf(out, "\n"); - fprintf(out, "%*s[", indent, ""); - for (i = 0; i < tab->n_var; ++i) { - if (i) - fprintf(out, (i == tab->n_param || - i == tab->n_var - tab->n_div) ? "; " - : ", "); - fprintf(out, "%c%d%s", tab->var[i].is_row ? 'r' : 'c', - tab->var[i].index, - tab->var[i].is_zero ? " [=0]" : - tab->var[i].is_redundant ? " [R]" : ""); - } - fprintf(out, "]\n"); - fprintf(out, "%*s[", indent, ""); - for (i = 0; i < tab->n_con; ++i) { - if (i) - fprintf(out, ", "); - fprintf(out, "%c%d%s", tab->con[i].is_row ? 'r' : 'c', - tab->con[i].index, - tab->con[i].is_zero ? " [=0]" : - tab->con[i].is_redundant ? " [R]" : ""); - } - fprintf(out, "]\n"); - fprintf(out, "%*s[", indent, ""); - for (i = 0; i < tab->n_row; ++i) { - const char *sign = ""; - if (i) - fprintf(out, ", "); - if (tab->row_sign) { - if (tab->row_sign[i] == isl_tab_row_unknown) - sign = "?"; - else if (tab->row_sign[i] == isl_tab_row_neg) - sign = "-"; - else if (tab->row_sign[i] == isl_tab_row_pos) - sign = "+"; - else - sign = "+-"; - } - fprintf(out, "r%d: %d%s%s", i, tab->row_var[i], - isl_tab_var_from_row(tab, i)->is_nonneg ? " [>=0]" : "", sign); - } - fprintf(out, "]\n"); - fprintf(out, "%*s[", indent, ""); - for (i = 0; i < tab->n_col; ++i) { - if (i) - fprintf(out, ", "); - fprintf(out, "c%d: %d%s", i, tab->col_var[i], - var_from_col(tab, i)->is_nonneg ? " [>=0]" : ""); - } - fprintf(out, "]\n"); - r = tab->mat->n_row; - tab->mat->n_row = tab->n_row; - c = tab->mat->n_col; - tab->mat->n_col = 2 + tab->M + tab->n_col; - isl_mat_print_internal(tab->mat, out, indent); - tab->mat->n_row = r; - tab->mat->n_col = c; - if (tab->bmap) - isl_basic_map_print_internal(tab->bmap, out, indent); -} - -void isl_tab_dump(__isl_keep struct isl_tab *tab) -{ - isl_tab_print_internal(tab, stderr, 0); -} diff --git a/cloog-0.17.0/isl/isl_tab.h b/cloog-0.17.0/isl/isl_tab.h deleted file mode 100644 index 3f68d85..0000000 --- a/cloog-0.17.0/isl/isl_tab.h +++ /dev/null @@ -1,292 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#ifndef ISL_TAB_H -#define ISL_TAB_H - -#include -#include -#include -#include - -struct isl_tab_var { - int index; - unsigned is_row : 1; - unsigned is_nonneg : 1; - unsigned is_zero : 1; - unsigned is_redundant : 1; - unsigned marked : 1; - unsigned frozen : 1; - unsigned negated : 1; -}; - -enum isl_tab_undo_type { - isl_tab_undo_bottom, - isl_tab_undo_empty, - isl_tab_undo_nonneg, - isl_tab_undo_redundant, - isl_tab_undo_freeze, - isl_tab_undo_zero, - isl_tab_undo_allocate, - isl_tab_undo_relax, - isl_tab_undo_bmap_ineq, - isl_tab_undo_bmap_eq, - isl_tab_undo_bmap_div, - isl_tab_undo_saved_basis, - isl_tab_undo_drop_sample, - isl_tab_undo_saved_samples, - isl_tab_undo_callback, -}; - -struct isl_tab_callback { - int (*run)(struct isl_tab_callback *cb); -}; - -union isl_tab_undo_val { - int var_index; - int *col_var; - int n; - struct isl_tab_callback *callback; -}; - -struct isl_tab_undo { - enum isl_tab_undo_type type; - union isl_tab_undo_val u; - struct isl_tab_undo *next; -}; - -/* The tableau maintains equality relations. - * Each column and each row is associated to a variable or a constraint. - * The "value" of an inequality constraint is the value of the corresponding - * slack variable. - * The "row_var" and "col_var" arrays map column and row indices - * to indices in the "var" and "con" arrays. The elements of these - * arrays maintain extra information about the variables and the constraints. - * Each row expresses the corresponding row variable as an affine expression - * of the column variables. - * The first two columns in the matrix contain the common denominator of - * the row and the numerator of the constant term. - * If "M" is set, then the third column represents the "big parameter". - * The third (M = 0) or fourth (M = 1) column - * in the matrix is called column 0 with respect to the col_var array. - * The sample value of the tableau is the value that assigns zero - * to all the column variables and the constant term of each affine - * expression to the corresponding row variable. - * The operations on the tableau maintain the property that the sample - * value satisfies the non-negativity constraints (usually on the slack - * variables). - * - * The big parameter represents an arbitrarily big (and divisible) - * positive number. If present, then the sign of a row is determined - * lexicographically, with the sign of the big parameter coefficient - * considered first. The big parameter is only used while - * solving PILP problems. - * - * The first n_dead column variables have their values fixed to zero. - * The corresponding tab_vars are flagged "is_zero". - * Some of the rows that have have zero coefficients in all but - * the dead columns are also flagged "is_zero". - * - * The first n_redundant rows correspond to inequality constraints - * that are always satisfied for any value satisfying the non-redundant - * rows. The corresponding tab_vars are flagged "is_redundant". - * A row variable that is flagged "is_zero" is also flagged "is_redundant" - * since the constraint has been reduced to 0 = 0 and is therefore always - * satisfied. - * - * There are "n_var" variables in total. The first "n_param" of these - * are called parameters and the last "n_div" of these are called divs. - * The basic tableau operations makes no distinction between different - * kinds of variables. These special variables are only used while - * solving PILP problems. - * - * Dead columns and redundant rows are detected on the fly. - * However, the basic operations do not ensure that all dead columns - * or all redundant rows are detected. - * isl_tab_detect_implicit_equalities and isl_tab_detect_redundant can be used - * to perform and exhaustive search for dead columns and redundant rows. - * - * The samples matrix contains "n_sample" integer points that have at some - * point been elements satisfying the tableau. The first "n_outside" - * of them no longer satisfy the tableau. They are kept because they - * can be reinstated during rollback when the constraint that cut them - * out is removed. These samples are only maintained for the context - * tableau while solving PILP problems. - */ -enum isl_tab_row_sign { - isl_tab_row_unknown = 0, - isl_tab_row_pos, - isl_tab_row_neg, - isl_tab_row_any, -}; -struct isl_tab { - struct isl_mat *mat; - - unsigned n_row; - unsigned n_col; - unsigned n_dead; - unsigned n_redundant; - - unsigned n_var; - unsigned n_param; - unsigned n_div; - unsigned max_var; - unsigned n_con; - unsigned n_eq; - unsigned max_con; - struct isl_tab_var *var; - struct isl_tab_var *con; - int *row_var; /* v >= 0 -> var v; v < 0 -> con ~v */ - int *col_var; /* v >= 0 -> var v; v < 0 -> con ~v */ - enum isl_tab_row_sign *row_sign; - - struct isl_tab_undo bottom; - struct isl_tab_undo *top; - - struct isl_vec *dual; - struct isl_basic_map *bmap; - - unsigned n_sample; - unsigned n_outside; - int *sample_index; - struct isl_mat *samples; - - int n_zero; - int n_unbounded; - struct isl_mat *basis; - - int (*conflict)(int con, void *user); - void *conflict_user; - - unsigned strict_redundant : 1; - unsigned need_undo : 1; - unsigned rational : 1; - unsigned empty : 1; - unsigned in_undo : 1; - unsigned M : 1; - unsigned cone : 1; -}; - -struct isl_tab *isl_tab_alloc(struct isl_ctx *ctx, - unsigned n_row, unsigned n_var, unsigned M); -void isl_tab_free(struct isl_tab *tab); - -struct isl_tab *isl_tab_from_basic_map(struct isl_basic_map *bmap); -struct isl_tab *isl_tab_from_basic_set(struct isl_basic_set *bset); -struct isl_tab *isl_tab_from_recession_cone(struct isl_basic_set *bset, - int parametric); -int isl_tab_cone_is_bounded(struct isl_tab *tab); -struct isl_basic_map *isl_basic_map_update_from_tab(struct isl_basic_map *bmap, - struct isl_tab *tab); -struct isl_basic_set *isl_basic_set_update_from_tab(struct isl_basic_set *bset, - struct isl_tab *tab); -int isl_tab_detect_implicit_equalities(struct isl_tab *tab) WARN_UNUSED; -int isl_tab_detect_redundant(struct isl_tab *tab) WARN_UNUSED; -#define ISL_TAB_SAVE_DUAL (1 << 0) -enum isl_lp_result isl_tab_min(struct isl_tab *tab, - isl_int *f, isl_int denom, isl_int *opt, isl_int *opt_denom, - unsigned flags) WARN_UNUSED; - -struct isl_tab *isl_tab_extend(struct isl_tab *tab, unsigned n_new) WARN_UNUSED; -int isl_tab_add_ineq(struct isl_tab *tab, isl_int *ineq) WARN_UNUSED; -int isl_tab_add_eq(struct isl_tab *tab, isl_int *eq) WARN_UNUSED; -int isl_tab_add_valid_eq(struct isl_tab *tab, isl_int *eq) WARN_UNUSED; - -int isl_tab_freeze_constraint(struct isl_tab *tab, int con) WARN_UNUSED; - -int isl_tab_track_bmap(struct isl_tab *tab, __isl_take isl_basic_map *bmap) WARN_UNUSED; -int isl_tab_track_bset(struct isl_tab *tab, __isl_take isl_basic_set *bset) WARN_UNUSED; -__isl_keep isl_basic_set *isl_tab_peek_bset(struct isl_tab *tab); - -int isl_tab_is_equality(struct isl_tab *tab, int con); -int isl_tab_is_redundant(struct isl_tab *tab, int con); - -int isl_tab_sample_is_integer(struct isl_tab *tab); -struct isl_vec *isl_tab_get_sample_value(struct isl_tab *tab); - -enum isl_ineq_type { - isl_ineq_error = -1, - isl_ineq_redundant, - isl_ineq_separate, - isl_ineq_cut, - isl_ineq_adj_eq, - isl_ineq_adj_ineq, -}; - -enum isl_ineq_type isl_tab_ineq_type(struct isl_tab *tab, isl_int *ineq); - -struct isl_tab_undo *isl_tab_snap(struct isl_tab *tab); -int isl_tab_rollback(struct isl_tab *tab, struct isl_tab_undo *snap) WARN_UNUSED; - -struct isl_tab *isl_tab_relax(struct isl_tab *tab, int con) WARN_UNUSED; -int isl_tab_select_facet(struct isl_tab *tab, int con) WARN_UNUSED; - -void isl_tab_dump(__isl_keep struct isl_tab *tab); - -struct isl_map *isl_tab_basic_map_partial_lexopt( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty, int max); -__isl_give isl_pw_multi_aff *isl_basic_map_partial_lexopt_pw_multi_aff( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max); - -/* An isl_region represents a sequence of consecutive variables. - * pos is the location (starting at 0) of the first variable in the sequence. - */ -struct isl_region { - int pos; - int len; -}; - -__isl_give isl_vec *isl_tab_basic_set_non_trivial_lexmin( - __isl_take isl_basic_set *bset, int n_op, int n_region, - struct isl_region *region, - int (*conflict)(int con, void *user), void *user); -__isl_give isl_vec *isl_tab_basic_set_non_neg_lexmin( - __isl_take isl_basic_set *bset); - -/* private */ - -struct isl_tab_var *isl_tab_var_from_row(struct isl_tab *tab, int i); -int isl_tab_mark_redundant(struct isl_tab *tab, int row) WARN_UNUSED; -int isl_tab_mark_empty(struct isl_tab *tab) WARN_UNUSED; -struct isl_tab *isl_tab_dup(struct isl_tab *tab); -struct isl_tab *isl_tab_product(struct isl_tab *tab1, struct isl_tab *tab2); -int isl_tab_extend_cons(struct isl_tab *tab, unsigned n_new) WARN_UNUSED; -int isl_tab_allocate_con(struct isl_tab *tab) WARN_UNUSED; -int isl_tab_extend_vars(struct isl_tab *tab, unsigned n_new) WARN_UNUSED; -int isl_tab_allocate_var(struct isl_tab *tab) WARN_UNUSED; -int isl_tab_pivot(struct isl_tab *tab, int row, int col) WARN_UNUSED; -int isl_tab_add_row(struct isl_tab *tab, isl_int *line) WARN_UNUSED; -int isl_tab_row_is_redundant(struct isl_tab *tab, int row); -int isl_tab_min_at_most_neg_one(struct isl_tab *tab, struct isl_tab_var *var); -int isl_tab_sign_of_max(struct isl_tab *tab, int con); -int isl_tab_kill_col(struct isl_tab *tab, int col) WARN_UNUSED; - -int isl_tab_push(struct isl_tab *tab, enum isl_tab_undo_type type) WARN_UNUSED; -int isl_tab_push_var(struct isl_tab *tab, - enum isl_tab_undo_type type, struct isl_tab_var *var) WARN_UNUSED; -int isl_tab_push_basis(struct isl_tab *tab) WARN_UNUSED; - -struct isl_tab *isl_tab_init_samples(struct isl_tab *tab) WARN_UNUSED; -struct isl_tab *isl_tab_add_sample(struct isl_tab *tab, - __isl_take isl_vec *sample) WARN_UNUSED; -struct isl_tab *isl_tab_drop_sample(struct isl_tab *tab, int s); -int isl_tab_save_samples(struct isl_tab *tab) WARN_UNUSED; - -struct isl_tab *isl_tab_detect_equalities(struct isl_tab *tab, - struct isl_tab *tab_cone) WARN_UNUSED; - -int isl_tab_push_callback(struct isl_tab *tab, - struct isl_tab_callback *callback) WARN_UNUSED; - -int isl_tab_add_div(struct isl_tab *tab, __isl_keep isl_vec *div, - int (*add_ineq)(void *user, isl_int *), void *user); - -#endif diff --git a/cloog-0.17.0/isl/isl_tab_pip.c b/cloog-0.17.0/isl/isl_tab_pip.c deleted file mode 100644 index 9759dcf..0000000 --- a/cloog-0.17.0/isl/isl_tab_pip.c +++ /dev/null @@ -1,5516 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - * and INRIA Saclay - Ile-de-France, Parc Club Orsay Universite, - * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France - */ - -#include -#include "isl_map_private.h" -#include -#include "isl_tab.h" -#include "isl_sample.h" -#include -#include -#include -#include - -/* - * The implementation of parametric integer linear programming in this file - * was inspired by the paper "Parametric Integer Programming" and the - * report "Solving systems of affine (in)equalities" by Paul Feautrier - * (and others). - * - * The strategy used for obtaining a feasible solution is different - * from the one used in isl_tab.c. In particular, in isl_tab.c, - * upon finding a constraint that is not yet satisfied, we pivot - * in a row that increases the constant term of the row holding the - * constraint, making sure the sample solution remains feasible - * for all the constraints it already satisfied. - * Here, we always pivot in the row holding the constraint, - * choosing a column that induces the lexicographically smallest - * increment to the sample solution. - * - * By starting out from a sample value that is lexicographically - * smaller than any integer point in the problem space, the first - * feasible integer sample point we find will also be the lexicographically - * smallest. If all variables can be assumed to be non-negative, - * then the initial sample value may be chosen equal to zero. - * However, we will not make this assumption. Instead, we apply - * the "big parameter" trick. Any variable x is then not directly - * used in the tableau, but instead it is represented by another - * variable x' = M + x, where M is an arbitrarily large (positive) - * value. x' is therefore always non-negative, whatever the value of x. - * Taking as initial sample value x' = 0 corresponds to x = -M, - * which is always smaller than any possible value of x. - * - * The big parameter trick is used in the main tableau and - * also in the context tableau if isl_context_lex is used. - * In this case, each tableaus has its own big parameter. - * Before doing any real work, we check if all the parameters - * happen to be non-negative. If so, we drop the column corresponding - * to M from the initial context tableau. - * If isl_context_gbr is used, then the big parameter trick is only - * used in the main tableau. - */ - -struct isl_context; -struct isl_context_op { - /* detect nonnegative parameters in context and mark them in tab */ - struct isl_tab *(*detect_nonnegative_parameters)( - struct isl_context *context, struct isl_tab *tab); - /* return temporary reference to basic set representation of context */ - struct isl_basic_set *(*peek_basic_set)(struct isl_context *context); - /* return temporary reference to tableau representation of context */ - struct isl_tab *(*peek_tab)(struct isl_context *context); - /* add equality; check is 1 if eq may not be valid; - * update is 1 if we may want to call ineq_sign on context later. - */ - void (*add_eq)(struct isl_context *context, isl_int *eq, - int check, int update); - /* add inequality; check is 1 if ineq may not be valid; - * update is 1 if we may want to call ineq_sign on context later. - */ - void (*add_ineq)(struct isl_context *context, isl_int *ineq, - int check, int update); - /* check sign of ineq based on previous information. - * strict is 1 if saturation should be treated as a positive sign. - */ - enum isl_tab_row_sign (*ineq_sign)(struct isl_context *context, - isl_int *ineq, int strict); - /* check if inequality maintains feasibility */ - int (*test_ineq)(struct isl_context *context, isl_int *ineq); - /* return index of a div that corresponds to "div" */ - int (*get_div)(struct isl_context *context, struct isl_tab *tab, - struct isl_vec *div); - /* add div "div" to context and return non-negativity */ - int (*add_div)(struct isl_context *context, struct isl_vec *div); - int (*detect_equalities)(struct isl_context *context, - struct isl_tab *tab); - /* return row index of "best" split */ - int (*best_split)(struct isl_context *context, struct isl_tab *tab); - /* check if context has already been determined to be empty */ - int (*is_empty)(struct isl_context *context); - /* check if context is still usable */ - int (*is_ok)(struct isl_context *context); - /* save a copy/snapshot of context */ - void *(*save)(struct isl_context *context); - /* restore saved context */ - void (*restore)(struct isl_context *context, void *); - /* invalidate context */ - void (*invalidate)(struct isl_context *context); - /* free context */ - void (*free)(struct isl_context *context); -}; - -struct isl_context { - struct isl_context_op *op; -}; - -struct isl_context_lex { - struct isl_context context; - struct isl_tab *tab; -}; - -struct isl_partial_sol { - int level; - struct isl_basic_set *dom; - struct isl_mat *M; - - struct isl_partial_sol *next; -}; - -struct isl_sol; -struct isl_sol_callback { - struct isl_tab_callback callback; - struct isl_sol *sol; -}; - -/* isl_sol is an interface for constructing a solution to - * a parametric integer linear programming problem. - * Every time the algorithm reaches a state where a solution - * can be read off from the tableau (including cases where the tableau - * is empty), the function "add" is called on the isl_sol passed - * to find_solutions_main. - * - * The context tableau is owned by isl_sol and is updated incrementally. - * - * There are currently two implementations of this interface, - * isl_sol_map, which simply collects the solutions in an isl_map - * and (optionally) the parts of the context where there is no solution - * in an isl_set, and - * isl_sol_for, which calls a user-defined function for each part of - * the solution. - */ -struct isl_sol { - int error; - int rational; - int level; - int max; - int n_out; - struct isl_context *context; - struct isl_partial_sol *partial; - void (*add)(struct isl_sol *sol, - struct isl_basic_set *dom, struct isl_mat *M); - void (*add_empty)(struct isl_sol *sol, struct isl_basic_set *bset); - void (*free)(struct isl_sol *sol); - struct isl_sol_callback dec_level; -}; - -static void sol_free(struct isl_sol *sol) -{ - struct isl_partial_sol *partial, *next; - if (!sol) - return; - for (partial = sol->partial; partial; partial = next) { - next = partial->next; - isl_basic_set_free(partial->dom); - isl_mat_free(partial->M); - free(partial); - } - sol->free(sol); -} - -/* Push a partial solution represented by a domain and mapping M - * onto the stack of partial solutions. - */ -static void sol_push_sol(struct isl_sol *sol, - struct isl_basic_set *dom, struct isl_mat *M) -{ - struct isl_partial_sol *partial; - - if (sol->error || !dom) - goto error; - - partial = isl_alloc_type(dom->ctx, struct isl_partial_sol); - if (!partial) - goto error; - - partial->level = sol->level; - partial->dom = dom; - partial->M = M; - partial->next = sol->partial; - - sol->partial = partial; - - return; -error: - isl_basic_set_free(dom); - sol->error = 1; -} - -/* Pop one partial solution from the partial solution stack and - * pass it on to sol->add or sol->add_empty. - */ -static void sol_pop_one(struct isl_sol *sol) -{ - struct isl_partial_sol *partial; - - partial = sol->partial; - sol->partial = partial->next; - - if (partial->M) - sol->add(sol, partial->dom, partial->M); - else - sol->add_empty(sol, partial->dom); - free(partial); -} - -/* Return a fresh copy of the domain represented by the context tableau. - */ -static struct isl_basic_set *sol_domain(struct isl_sol *sol) -{ - struct isl_basic_set *bset; - - if (sol->error) - return NULL; - - bset = isl_basic_set_dup(sol->context->op->peek_basic_set(sol->context)); - bset = isl_basic_set_update_from_tab(bset, - sol->context->op->peek_tab(sol->context)); - - return bset; -} - -/* Check whether two partial solutions have the same mapping, where n_div - * is the number of divs that the two partial solutions have in common. - */ -static int same_solution(struct isl_partial_sol *s1, struct isl_partial_sol *s2, - unsigned n_div) -{ - int i; - unsigned dim; - - if (!s1->M != !s2->M) - return 0; - if (!s1->M) - return 1; - - dim = isl_basic_set_total_dim(s1->dom) - s1->dom->n_div; - - for (i = 0; i < s1->M->n_row; ++i) { - if (isl_seq_first_non_zero(s1->M->row[i]+1+dim+n_div, - s1->M->n_col-1-dim-n_div) != -1) - return 0; - if (isl_seq_first_non_zero(s2->M->row[i]+1+dim+n_div, - s2->M->n_col-1-dim-n_div) != -1) - return 0; - if (!isl_seq_eq(s1->M->row[i], s2->M->row[i], 1+dim+n_div)) - return 0; - } - return 1; -} - -/* Pop all solutions from the partial solution stack that were pushed onto - * the stack at levels that are deeper than the current level. - * If the two topmost elements on the stack have the same level - * and represent the same solution, then their domains are combined. - * This combined domain is the same as the current context domain - * as sol_pop is called each time we move back to a higher level. - */ -static void sol_pop(struct isl_sol *sol) -{ - struct isl_partial_sol *partial; - unsigned n_div; - - if (sol->error) - return; - - if (sol->level == 0) { - for (partial = sol->partial; partial; partial = sol->partial) - sol_pop_one(sol); - return; - } - - partial = sol->partial; - if (!partial) - return; - - if (partial->level <= sol->level) - return; - - if (partial->next && partial->next->level == partial->level) { - n_div = isl_basic_set_dim( - sol->context->op->peek_basic_set(sol->context), - isl_dim_div); - - if (!same_solution(partial, partial->next, n_div)) { - sol_pop_one(sol); - sol_pop_one(sol); - } else { - struct isl_basic_set *bset; - - bset = sol_domain(sol); - - isl_basic_set_free(partial->next->dom); - partial->next->dom = bset; - partial->next->level = sol->level; - - sol->partial = partial->next; - isl_basic_set_free(partial->dom); - isl_mat_free(partial->M); - free(partial); - } - } else - sol_pop_one(sol); -} - -static void sol_dec_level(struct isl_sol *sol) -{ - if (sol->error) - return; - - sol->level--; - - sol_pop(sol); -} - -static int sol_dec_level_wrap(struct isl_tab_callback *cb) -{ - struct isl_sol_callback *callback = (struct isl_sol_callback *)cb; - - sol_dec_level(callback->sol); - - return callback->sol->error ? -1 : 0; -} - -/* Move down to next level and push callback onto context tableau - * to decrease the level again when it gets rolled back across - * the current state. That is, dec_level will be called with - * the context tableau in the same state as it is when inc_level - * is called. - */ -static void sol_inc_level(struct isl_sol *sol) -{ - struct isl_tab *tab; - - if (sol->error) - return; - - sol->level++; - tab = sol->context->op->peek_tab(sol->context); - if (isl_tab_push_callback(tab, &sol->dec_level.callback) < 0) - sol->error = 1; -} - -static void scale_rows(struct isl_mat *mat, isl_int m, int n_row) -{ - int i; - - if (isl_int_is_one(m)) - return; - - for (i = 0; i < n_row; ++i) - isl_seq_scale(mat->row[i], mat->row[i], m, mat->n_col); -} - -/* Add the solution identified by the tableau and the context tableau. - * - * The layout of the variables is as follows. - * tab->n_var is equal to the total number of variables in the input - * map (including divs that were copied from the context) - * + the number of extra divs constructed - * Of these, the first tab->n_param and the last tab->n_div variables - * correspond to the variables in the context, i.e., - * tab->n_param + tab->n_div = context_tab->n_var - * tab->n_param is equal to the number of parameters and input - * dimensions in the input map - * tab->n_div is equal to the number of divs in the context - * - * If there is no solution, then call add_empty with a basic set - * that corresponds to the context tableau. (If add_empty is NULL, - * then do nothing). - * - * If there is a solution, then first construct a matrix that maps - * all dimensions of the context to the output variables, i.e., - * the output dimensions in the input map. - * The divs in the input map (if any) that do not correspond to any - * div in the context do not appear in the solution. - * The algorithm will make sure that they have an integer value, - * but these values themselves are of no interest. - * We have to be careful not to drop or rearrange any divs in the - * context because that would change the meaning of the matrix. - * - * To extract the value of the output variables, it should be noted - * that we always use a big parameter M in the main tableau and so - * the variable stored in this tableau is not an output variable x itself, but - * x' = M + x (in case of minimization) - * or - * x' = M - x (in case of maximization) - * If x' appears in a column, then its optimal value is zero, - * which means that the optimal value of x is an unbounded number - * (-M for minimization and M for maximization). - * We currently assume that the output dimensions in the original map - * are bounded, so this cannot occur. - * Similarly, when x' appears in a row, then the coefficient of M in that - * row is necessarily 1. - * If the row in the tableau represents - * d x' = c + d M + e(y) - * then, in case of minimization, the corresponding row in the matrix - * will be - * a c + a e(y) - * with a d = m, the (updated) common denominator of the matrix. - * In case of maximization, the row will be - * -a c - a e(y) - */ -static void sol_add(struct isl_sol *sol, struct isl_tab *tab) -{ - struct isl_basic_set *bset = NULL; - struct isl_mat *mat = NULL; - unsigned off; - int row; - isl_int m; - - if (sol->error || !tab) - goto error; - - if (tab->empty && !sol->add_empty) - return; - - bset = sol_domain(sol); - - if (tab->empty) { - sol_push_sol(sol, bset, NULL); - return; - } - - off = 2 + tab->M; - - mat = isl_mat_alloc(tab->mat->ctx, 1 + sol->n_out, - 1 + tab->n_param + tab->n_div); - if (!mat) - goto error; - - isl_int_init(m); - - isl_seq_clr(mat->row[0] + 1, mat->n_col - 1); - isl_int_set_si(mat->row[0][0], 1); - for (row = 0; row < sol->n_out; ++row) { - int i = tab->n_param + row; - int r, j; - - isl_seq_clr(mat->row[1 + row], mat->n_col); - if (!tab->var[i].is_row) { - if (tab->M) - isl_die(mat->ctx, isl_error_invalid, - "unbounded optimum", goto error2); - continue; - } - - r = tab->var[i].index; - if (tab->M && - isl_int_ne(tab->mat->row[r][2], tab->mat->row[r][0])) - isl_die(mat->ctx, isl_error_invalid, - "unbounded optimum", goto error2); - isl_int_gcd(m, mat->row[0][0], tab->mat->row[r][0]); - isl_int_divexact(m, tab->mat->row[r][0], m); - scale_rows(mat, m, 1 + row); - isl_int_divexact(m, mat->row[0][0], tab->mat->row[r][0]); - isl_int_mul(mat->row[1 + row][0], m, tab->mat->row[r][1]); - for (j = 0; j < tab->n_param; ++j) { - int col; - if (tab->var[j].is_row) - continue; - col = tab->var[j].index; - isl_int_mul(mat->row[1 + row][1 + j], m, - tab->mat->row[r][off + col]); - } - for (j = 0; j < tab->n_div; ++j) { - int col; - if (tab->var[tab->n_var - tab->n_div+j].is_row) - continue; - col = tab->var[tab->n_var - tab->n_div+j].index; - isl_int_mul(mat->row[1 + row][1 + tab->n_param + j], m, - tab->mat->row[r][off + col]); - } - if (sol->max) - isl_seq_neg(mat->row[1 + row], mat->row[1 + row], - mat->n_col); - } - - isl_int_clear(m); - - sol_push_sol(sol, bset, mat); - return; -error2: - isl_int_clear(m); -error: - isl_basic_set_free(bset); - isl_mat_free(mat); - sol->error = 1; -} - -struct isl_sol_map { - struct isl_sol sol; - struct isl_map *map; - struct isl_set *empty; -}; - -static void sol_map_free(struct isl_sol_map *sol_map) -{ - if (!sol_map) - return; - if (sol_map->sol.context) - sol_map->sol.context->op->free(sol_map->sol.context); - isl_map_free(sol_map->map); - isl_set_free(sol_map->empty); - free(sol_map); -} - -static void sol_map_free_wrap(struct isl_sol *sol) -{ - sol_map_free((struct isl_sol_map *)sol); -} - -/* This function is called for parts of the context where there is - * no solution, with "bset" corresponding to the context tableau. - * Simply add the basic set to the set "empty". - */ -static void sol_map_add_empty(struct isl_sol_map *sol, - struct isl_basic_set *bset) -{ - if (!bset) - goto error; - isl_assert(bset->ctx, sol->empty, goto error); - - sol->empty = isl_set_grow(sol->empty, 1); - bset = isl_basic_set_simplify(bset); - bset = isl_basic_set_finalize(bset); - sol->empty = isl_set_add_basic_set(sol->empty, isl_basic_set_copy(bset)); - if (!sol->empty) - goto error; - isl_basic_set_free(bset); - return; -error: - isl_basic_set_free(bset); - sol->sol.error = 1; -} - -static void sol_map_add_empty_wrap(struct isl_sol *sol, - struct isl_basic_set *bset) -{ - sol_map_add_empty((struct isl_sol_map *)sol, bset); -} - -/* Given a basic map "dom" that represents the context and an affine - * matrix "M" that maps the dimensions of the context to the - * output variables, construct a basic map with the same parameters - * and divs as the context, the dimensions of the context as input - * dimensions and a number of output dimensions that is equal to - * the number of output dimensions in the input map. - * - * The constraints and divs of the context are simply copied - * from "dom". For each row - * x = c + e(y) - * an equality - * c + e(y) - d x = 0 - * is added, with d the common denominator of M. - */ -static void sol_map_add(struct isl_sol_map *sol, - struct isl_basic_set *dom, struct isl_mat *M) -{ - int i; - struct isl_basic_map *bmap = NULL; - unsigned n_eq; - unsigned n_ineq; - unsigned nparam; - unsigned total; - unsigned n_div; - unsigned n_out; - - if (sol->sol.error || !dom || !M) - goto error; - - n_out = sol->sol.n_out; - n_eq = dom->n_eq + n_out; - n_ineq = dom->n_ineq; - n_div = dom->n_div; - nparam = isl_basic_set_total_dim(dom) - n_div; - total = isl_map_dim(sol->map, isl_dim_all); - bmap = isl_basic_map_alloc_space(isl_map_get_space(sol->map), - n_div, n_eq, 2 * n_div + n_ineq); - if (!bmap) - goto error; - if (sol->sol.rational) - ISL_F_SET(bmap, ISL_BASIC_MAP_RATIONAL); - for (i = 0; i < dom->n_div; ++i) { - int k = isl_basic_map_alloc_div(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->div[k], dom->div[i], 1 + 1 + nparam); - isl_seq_clr(bmap->div[k] + 1 + 1 + nparam, total - nparam); - isl_seq_cpy(bmap->div[k] + 1 + 1 + total, - dom->div[i] + 1 + 1 + nparam, i); - } - for (i = 0; i < dom->n_eq; ++i) { - int k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->eq[k], dom->eq[i], 1 + nparam); - isl_seq_clr(bmap->eq[k] + 1 + nparam, total - nparam); - isl_seq_cpy(bmap->eq[k] + 1 + total, - dom->eq[i] + 1 + nparam, n_div); - } - for (i = 0; i < dom->n_ineq; ++i) { - int k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->ineq[k], dom->ineq[i], 1 + nparam); - isl_seq_clr(bmap->ineq[k] + 1 + nparam, total - nparam); - isl_seq_cpy(bmap->ineq[k] + 1 + total, - dom->ineq[i] + 1 + nparam, n_div); - } - for (i = 0; i < M->n_row - 1; ++i) { - int k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_cpy(bmap->eq[k], M->row[1 + i], 1 + nparam); - isl_seq_clr(bmap->eq[k] + 1 + nparam, n_out); - isl_int_neg(bmap->eq[k][1 + nparam + i], M->row[0][0]); - isl_seq_cpy(bmap->eq[k] + 1 + nparam + n_out, - M->row[1 + i] + 1 + nparam, n_div); - } - bmap = isl_basic_map_simplify(bmap); - bmap = isl_basic_map_finalize(bmap); - sol->map = isl_map_grow(sol->map, 1); - sol->map = isl_map_add_basic_map(sol->map, bmap); - isl_basic_set_free(dom); - isl_mat_free(M); - if (!sol->map) - sol->sol.error = 1; - return; -error: - isl_basic_set_free(dom); - isl_mat_free(M); - isl_basic_map_free(bmap); - sol->sol.error = 1; -} - -static void sol_map_add_wrap(struct isl_sol *sol, - struct isl_basic_set *dom, struct isl_mat *M) -{ - sol_map_add((struct isl_sol_map *)sol, dom, M); -} - - -/* Store the "parametric constant" of row "row" of tableau "tab" in "line", - * i.e., the constant term and the coefficients of all variables that - * appear in the context tableau. - * Note that the coefficient of the big parameter M is NOT copied. - * The context tableau may not have a big parameter and even when it - * does, it is a different big parameter. - */ -static void get_row_parameter_line(struct isl_tab *tab, int row, isl_int *line) -{ - int i; - unsigned off = 2 + tab->M; - - isl_int_set(line[0], tab->mat->row[row][1]); - for (i = 0; i < tab->n_param; ++i) { - if (tab->var[i].is_row) - isl_int_set_si(line[1 + i], 0); - else { - int col = tab->var[i].index; - isl_int_set(line[1 + i], tab->mat->row[row][off + col]); - } - } - for (i = 0; i < tab->n_div; ++i) { - if (tab->var[tab->n_var - tab->n_div + i].is_row) - isl_int_set_si(line[1 + tab->n_param + i], 0); - else { - int col = tab->var[tab->n_var - tab->n_div + i].index; - isl_int_set(line[1 + tab->n_param + i], - tab->mat->row[row][off + col]); - } - } -} - -/* Check if rows "row1" and "row2" have identical "parametric constants", - * as explained above. - * In this case, we also insist that the coefficients of the big parameter - * be the same as the values of the constants will only be the same - * if these coefficients are also the same. - */ -static int identical_parameter_line(struct isl_tab *tab, int row1, int row2) -{ - int i; - unsigned off = 2 + tab->M; - - if (isl_int_ne(tab->mat->row[row1][1], tab->mat->row[row2][1])) - return 0; - - if (tab->M && isl_int_ne(tab->mat->row[row1][2], - tab->mat->row[row2][2])) - return 0; - - for (i = 0; i < tab->n_param + tab->n_div; ++i) { - int pos = i < tab->n_param ? i : - tab->n_var - tab->n_div + i - tab->n_param; - int col; - - if (tab->var[pos].is_row) - continue; - col = tab->var[pos].index; - if (isl_int_ne(tab->mat->row[row1][off + col], - tab->mat->row[row2][off + col])) - return 0; - } - return 1; -} - -/* Return an inequality that expresses that the "parametric constant" - * should be non-negative. - * This function is only called when the coefficient of the big parameter - * is equal to zero. - */ -static struct isl_vec *get_row_parameter_ineq(struct isl_tab *tab, int row) -{ - struct isl_vec *ineq; - - ineq = isl_vec_alloc(tab->mat->ctx, 1 + tab->n_param + tab->n_div); - if (!ineq) - return NULL; - - get_row_parameter_line(tab, row, ineq->el); - if (ineq) - ineq = isl_vec_normalize(ineq); - - return ineq; -} - -/* Return a integer division for use in a parametric cut based on the given row. - * In particular, let the parametric constant of the row be - * - * \sum_i a_i y_i - * - * where y_0 = 1, but none of the y_i corresponds to the big parameter M. - * The div returned is equal to - * - * floor(\sum_i {-a_i} y_i) = floor((\sum_i (-a_i mod d) y_i)/d) - */ -static struct isl_vec *get_row_parameter_div(struct isl_tab *tab, int row) -{ - struct isl_vec *div; - - div = isl_vec_alloc(tab->mat->ctx, 1 + 1 + tab->n_param + tab->n_div); - if (!div) - return NULL; - - isl_int_set(div->el[0], tab->mat->row[row][0]); - get_row_parameter_line(tab, row, div->el + 1); - div = isl_vec_normalize(div); - isl_seq_neg(div->el + 1, div->el + 1, div->size - 1); - isl_seq_fdiv_r(div->el + 1, div->el + 1, div->el[0], div->size - 1); - - return div; -} - -/* Return a integer division for use in transferring an integrality constraint - * to the context. - * In particular, let the parametric constant of the row be - * - * \sum_i a_i y_i - * - * where y_0 = 1, but none of the y_i corresponds to the big parameter M. - * The the returned div is equal to - * - * floor(\sum_i {a_i} y_i) = floor((\sum_i (a_i mod d) y_i)/d) - */ -static struct isl_vec *get_row_split_div(struct isl_tab *tab, int row) -{ - struct isl_vec *div; - - div = isl_vec_alloc(tab->mat->ctx, 1 + 1 + tab->n_param + tab->n_div); - if (!div) - return NULL; - - isl_int_set(div->el[0], tab->mat->row[row][0]); - get_row_parameter_line(tab, row, div->el + 1); - div = isl_vec_normalize(div); - isl_seq_fdiv_r(div->el + 1, div->el + 1, div->el[0], div->size - 1); - - return div; -} - -/* Construct and return an inequality that expresses an upper bound - * on the given div. - * In particular, if the div is given by - * - * d = floor(e/m) - * - * then the inequality expresses - * - * m d <= e - */ -static struct isl_vec *ineq_for_div(struct isl_basic_set *bset, unsigned div) -{ - unsigned total; - unsigned div_pos; - struct isl_vec *ineq; - - if (!bset) - return NULL; - - total = isl_basic_set_total_dim(bset); - div_pos = 1 + total - bset->n_div + div; - - ineq = isl_vec_alloc(bset->ctx, 1 + total); - if (!ineq) - return NULL; - - isl_seq_cpy(ineq->el, bset->div[div] + 1, 1 + total); - isl_int_neg(ineq->el[div_pos], bset->div[div][0]); - return ineq; -} - -/* Given a row in the tableau and a div that was created - * using get_row_split_div and that has been constrained to equality, i.e., - * - * d = floor(\sum_i {a_i} y_i) = \sum_i {a_i} y_i - * - * replace the expression "\sum_i {a_i} y_i" in the row by d, - * i.e., we subtract "\sum_i {a_i} y_i" and add 1 d. - * The coefficients of the non-parameters in the tableau have been - * verified to be integral. We can therefore simply replace coefficient b - * by floor(b). For the coefficients of the parameters we have - * floor(a_i) = a_i - {a_i}, while for the other coefficients, we have - * floor(b) = b. - */ -static struct isl_tab *set_row_cst_to_div(struct isl_tab *tab, int row, int div) -{ - isl_seq_fdiv_q(tab->mat->row[row] + 1, tab->mat->row[row] + 1, - tab->mat->row[row][0], 1 + tab->M + tab->n_col); - - isl_int_set_si(tab->mat->row[row][0], 1); - - if (tab->var[tab->n_var - tab->n_div + div].is_row) { - int drow = tab->var[tab->n_var - tab->n_div + div].index; - - isl_assert(tab->mat->ctx, - isl_int_is_one(tab->mat->row[drow][0]), goto error); - isl_seq_combine(tab->mat->row[row] + 1, - tab->mat->ctx->one, tab->mat->row[row] + 1, - tab->mat->ctx->one, tab->mat->row[drow] + 1, - 1 + tab->M + tab->n_col); - } else { - int dcol = tab->var[tab->n_var - tab->n_div + div].index; - - isl_int_add_ui(tab->mat->row[row][2 + tab->M + dcol], - tab->mat->row[row][2 + tab->M + dcol], 1); - } - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Check if the (parametric) constant of the given row is obviously - * negative, meaning that we don't need to consult the context tableau. - * If there is a big parameter and its coefficient is non-zero, - * then this coefficient determines the outcome. - * Otherwise, we check whether the constant is negative and - * all non-zero coefficients of parameters are negative and - * belong to non-negative parameters. - */ -static int is_obviously_neg(struct isl_tab *tab, int row) -{ - int i; - int col; - unsigned off = 2 + tab->M; - - if (tab->M) { - if (isl_int_is_pos(tab->mat->row[row][2])) - return 0; - if (isl_int_is_neg(tab->mat->row[row][2])) - return 1; - } - - if (isl_int_is_nonneg(tab->mat->row[row][1])) - return 0; - for (i = 0; i < tab->n_param; ++i) { - /* Eliminated parameter */ - if (tab->var[i].is_row) - continue; - col = tab->var[i].index; - if (isl_int_is_zero(tab->mat->row[row][off + col])) - continue; - if (!tab->var[i].is_nonneg) - return 0; - if (isl_int_is_pos(tab->mat->row[row][off + col])) - return 0; - } - for (i = 0; i < tab->n_div; ++i) { - if (tab->var[tab->n_var - tab->n_div + i].is_row) - continue; - col = tab->var[tab->n_var - tab->n_div + i].index; - if (isl_int_is_zero(tab->mat->row[row][off + col])) - continue; - if (!tab->var[tab->n_var - tab->n_div + i].is_nonneg) - return 0; - if (isl_int_is_pos(tab->mat->row[row][off + col])) - return 0; - } - return 1; -} - -/* Check if the (parametric) constant of the given row is obviously - * non-negative, meaning that we don't need to consult the context tableau. - * If there is a big parameter and its coefficient is non-zero, - * then this coefficient determines the outcome. - * Otherwise, we check whether the constant is non-negative and - * all non-zero coefficients of parameters are positive and - * belong to non-negative parameters. - */ -static int is_obviously_nonneg(struct isl_tab *tab, int row) -{ - int i; - int col; - unsigned off = 2 + tab->M; - - if (tab->M) { - if (isl_int_is_pos(tab->mat->row[row][2])) - return 1; - if (isl_int_is_neg(tab->mat->row[row][2])) - return 0; - } - - if (isl_int_is_neg(tab->mat->row[row][1])) - return 0; - for (i = 0; i < tab->n_param; ++i) { - /* Eliminated parameter */ - if (tab->var[i].is_row) - continue; - col = tab->var[i].index; - if (isl_int_is_zero(tab->mat->row[row][off + col])) - continue; - if (!tab->var[i].is_nonneg) - return 0; - if (isl_int_is_neg(tab->mat->row[row][off + col])) - return 0; - } - for (i = 0; i < tab->n_div; ++i) { - if (tab->var[tab->n_var - tab->n_div + i].is_row) - continue; - col = tab->var[tab->n_var - tab->n_div + i].index; - if (isl_int_is_zero(tab->mat->row[row][off + col])) - continue; - if (!tab->var[tab->n_var - tab->n_div + i].is_nonneg) - return 0; - if (isl_int_is_neg(tab->mat->row[row][off + col])) - return 0; - } - return 1; -} - -/* Given a row r and two columns, return the column that would - * lead to the lexicographically smallest increment in the sample - * solution when leaving the basis in favor of the row. - * Pivoting with column c will increment the sample value by a non-negative - * constant times a_{V,c}/a_{r,c}, with a_{V,c} the elements of column c - * corresponding to the non-parametric variables. - * If variable v appears in a column c_v, the a_{v,c} = 1 iff c = c_v, - * with all other entries in this virtual row equal to zero. - * If variable v appears in a row, then a_{v,c} is the element in column c - * of that row. - * - * Let v be the first variable with a_{v,c1}/a_{r,c1} != a_{v,c2}/a_{r,c2}. - * Then if a_{v,c1}/a_{r,c1} < a_{v,c2}/a_{r,c2}, i.e., - * a_{v,c2} a_{r,c1} - a_{v,c1} a_{r,c2} > 0, c1 results in the minimal - * increment. Otherwise, it's c2. - */ -static int lexmin_col_pair(struct isl_tab *tab, - int row, int col1, int col2, isl_int tmp) -{ - int i; - isl_int *tr; - - tr = tab->mat->row[row] + 2 + tab->M; - - for (i = tab->n_param; i < tab->n_var - tab->n_div; ++i) { - int s1, s2; - isl_int *r; - - if (!tab->var[i].is_row) { - if (tab->var[i].index == col1) - return col2; - if (tab->var[i].index == col2) - return col1; - continue; - } - - if (tab->var[i].index == row) - continue; - - r = tab->mat->row[tab->var[i].index] + 2 + tab->M; - s1 = isl_int_sgn(r[col1]); - s2 = isl_int_sgn(r[col2]); - if (s1 == 0 && s2 == 0) - continue; - if (s1 < s2) - return col1; - if (s2 < s1) - return col2; - - isl_int_mul(tmp, r[col2], tr[col1]); - isl_int_submul(tmp, r[col1], tr[col2]); - if (isl_int_is_pos(tmp)) - return col1; - if (isl_int_is_neg(tmp)) - return col2; - } - return -1; -} - -/* Given a row in the tableau, find and return the column that would - * result in the lexicographically smallest, but positive, increment - * in the sample point. - * If there is no such column, then return tab->n_col. - * If anything goes wrong, return -1. - */ -static int lexmin_pivot_col(struct isl_tab *tab, int row) -{ - int j; - int col = tab->n_col; - isl_int *tr; - isl_int tmp; - - tr = tab->mat->row[row] + 2 + tab->M; - - isl_int_init(tmp); - - for (j = tab->n_dead; j < tab->n_col; ++j) { - if (tab->col_var[j] >= 0 && - (tab->col_var[j] < tab->n_param || - tab->col_var[j] >= tab->n_var - tab->n_div)) - continue; - - if (!isl_int_is_pos(tr[j])) - continue; - - if (col == tab->n_col) - col = j; - else - col = lexmin_col_pair(tab, row, col, j, tmp); - isl_assert(tab->mat->ctx, col >= 0, goto error); - } - - isl_int_clear(tmp); - return col; -error: - isl_int_clear(tmp); - return -1; -} - -/* Return the first known violated constraint, i.e., a non-negative - * constraint that currently has an either obviously negative value - * or a previously determined to be negative value. - * - * If any constraint has a negative coefficient for the big parameter, - * if any, then we return one of these first. - */ -static int first_neg(struct isl_tab *tab) -{ - int row; - - if (tab->M) - for (row = tab->n_redundant; row < tab->n_row; ++row) { - if (!isl_tab_var_from_row(tab, row)->is_nonneg) - continue; - if (!isl_int_is_neg(tab->mat->row[row][2])) - continue; - if (tab->row_sign) - tab->row_sign[row] = isl_tab_row_neg; - return row; - } - for (row = tab->n_redundant; row < tab->n_row; ++row) { - if (!isl_tab_var_from_row(tab, row)->is_nonneg) - continue; - if (tab->row_sign) { - if (tab->row_sign[row] == 0 && - is_obviously_neg(tab, row)) - tab->row_sign[row] = isl_tab_row_neg; - if (tab->row_sign[row] != isl_tab_row_neg) - continue; - } else if (!is_obviously_neg(tab, row)) - continue; - return row; - } - return -1; -} - -/* Check whether the invariant that all columns are lexico-positive - * is satisfied. This function is not called from the current code - * but is useful during debugging. - */ -static void check_lexpos(struct isl_tab *tab) __attribute__ ((unused)); -static void check_lexpos(struct isl_tab *tab) -{ - unsigned off = 2 + tab->M; - int col; - int var; - int row; - - for (col = tab->n_dead; col < tab->n_col; ++col) { - if (tab->col_var[col] >= 0 && - (tab->col_var[col] < tab->n_param || - tab->col_var[col] >= tab->n_var - tab->n_div)) - continue; - for (var = tab->n_param; var < tab->n_var - tab->n_div; ++var) { - if (!tab->var[var].is_row) { - if (tab->var[var].index == col) - break; - else - continue; - } - row = tab->var[var].index; - if (isl_int_is_zero(tab->mat->row[row][off + col])) - continue; - if (isl_int_is_pos(tab->mat->row[row][off + col])) - break; - fprintf(stderr, "lexneg column %d (row %d)\n", - col, row); - } - if (var >= tab->n_var - tab->n_div) - fprintf(stderr, "zero column %d\n", col); - } -} - -/* Report to the caller that the given constraint is part of an encountered - * conflict. - */ -static int report_conflicting_constraint(struct isl_tab *tab, int con) -{ - return tab->conflict(con, tab->conflict_user); -} - -/* Given a conflicting row in the tableau, report all constraints - * involved in the row to the caller. That is, the row itself - * (if represents a constraint) and all constraint columns with - * non-zero (and therefore negative) coefficient. - */ -static int report_conflict(struct isl_tab *tab, int row) -{ - int j; - isl_int *tr; - - if (!tab->conflict) - return 0; - - if (tab->row_var[row] < 0 && - report_conflicting_constraint(tab, ~tab->row_var[row]) < 0) - return -1; - - tr = tab->mat->row[row] + 2 + tab->M; - - for (j = tab->n_dead; j < tab->n_col; ++j) { - if (tab->col_var[j] >= 0 && - (tab->col_var[j] < tab->n_param || - tab->col_var[j] >= tab->n_var - tab->n_div)) - continue; - - if (!isl_int_is_neg(tr[j])) - continue; - - if (tab->col_var[j] < 0 && - report_conflicting_constraint(tab, ~tab->col_var[j]) < 0) - return -1; - } - - return 0; -} - -/* Resolve all known or obviously violated constraints through pivoting. - * In particular, as long as we can find any violated constraint, we - * look for a pivoting column that would result in the lexicographically - * smallest increment in the sample point. If there is no such column - * then the tableau is infeasible. - */ -static int restore_lexmin(struct isl_tab *tab) WARN_UNUSED; -static int restore_lexmin(struct isl_tab *tab) -{ - int row, col; - - if (!tab) - return -1; - if (tab->empty) - return 0; - while ((row = first_neg(tab)) != -1) { - col = lexmin_pivot_col(tab, row); - if (col >= tab->n_col) { - if (report_conflict(tab, row) < 0) - return -1; - if (isl_tab_mark_empty(tab) < 0) - return -1; - return 0; - } - if (col < 0) - return -1; - if (isl_tab_pivot(tab, row, col) < 0) - return -1; - } - return 0; -} - -/* Given a row that represents an equality, look for an appropriate - * pivoting column. - * In particular, if there are any non-zero coefficients among - * the non-parameter variables, then we take the last of these - * variables. Eliminating this variable in terms of the other - * variables and/or parameters does not influence the property - * that all column in the initial tableau are lexicographically - * positive. The row corresponding to the eliminated variable - * will only have non-zero entries below the diagonal of the - * initial tableau. That is, we transform - * - * I I - * 1 into a - * I I - * - * If there is no such non-parameter variable, then we are dealing with - * pure parameter equality and we pick any parameter with coefficient 1 or -1 - * for elimination. This will ensure that the eliminated parameter - * always has an integer value whenever all the other parameters are integral. - * If there is no such parameter then we return -1. - */ -static int last_var_col_or_int_par_col(struct isl_tab *tab, int row) -{ - unsigned off = 2 + tab->M; - int i; - - for (i = tab->n_var - tab->n_div - 1; i >= 0 && i >= tab->n_param; --i) { - int col; - if (tab->var[i].is_row) - continue; - col = tab->var[i].index; - if (col <= tab->n_dead) - continue; - if (!isl_int_is_zero(tab->mat->row[row][off + col])) - return col; - } - for (i = tab->n_dead; i < tab->n_col; ++i) { - if (isl_int_is_one(tab->mat->row[row][off + i])) - return i; - if (isl_int_is_negone(tab->mat->row[row][off + i])) - return i; - } - return -1; -} - -/* Add an equality that is known to be valid to the tableau. - * We first check if we can eliminate a variable or a parameter. - * If not, we add the equality as two inequalities. - * In this case, the equality was a pure parameter equality and there - * is no need to resolve any constraint violations. - */ -static struct isl_tab *add_lexmin_valid_eq(struct isl_tab *tab, isl_int *eq) -{ - int i; - int r; - - if (!tab) - return NULL; - r = isl_tab_add_row(tab, eq); - if (r < 0) - goto error; - - r = tab->con[r].index; - i = last_var_col_or_int_par_col(tab, r); - if (i < 0) { - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - goto error; - isl_seq_neg(eq, eq, 1 + tab->n_var); - r = isl_tab_add_row(tab, eq); - if (r < 0) - goto error; - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - goto error; - } else { - if (isl_tab_pivot(tab, r, i) < 0) - goto error; - if (isl_tab_kill_col(tab, i) < 0) - goto error; - tab->n_eq++; - } - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Check if the given row is a pure constant. - */ -static int is_constant(struct isl_tab *tab, int row) -{ - unsigned off = 2 + tab->M; - - return isl_seq_first_non_zero(tab->mat->row[row] + off + tab->n_dead, - tab->n_col - tab->n_dead) == -1; -} - -/* Add an equality that may or may not be valid to the tableau. - * If the resulting row is a pure constant, then it must be zero. - * Otherwise, the resulting tableau is empty. - * - * If the row is not a pure constant, then we add two inequalities, - * each time checking that they can be satisfied. - * In the end we try to use one of the two constraints to eliminate - * a column. - */ -static int add_lexmin_eq(struct isl_tab *tab, isl_int *eq) WARN_UNUSED; -static int add_lexmin_eq(struct isl_tab *tab, isl_int *eq) -{ - int r1, r2; - int row; - struct isl_tab_undo *snap; - - if (!tab) - return -1; - snap = isl_tab_snap(tab); - r1 = isl_tab_add_row(tab, eq); - if (r1 < 0) - return -1; - tab->con[r1].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r1]) < 0) - return -1; - - row = tab->con[r1].index; - if (is_constant(tab, row)) { - if (!isl_int_is_zero(tab->mat->row[row][1]) || - (tab->M && !isl_int_is_zero(tab->mat->row[row][2]))) { - if (isl_tab_mark_empty(tab) < 0) - return -1; - return 0; - } - if (isl_tab_rollback(tab, snap) < 0) - return -1; - return 0; - } - - if (restore_lexmin(tab) < 0) - return -1; - if (tab->empty) - return 0; - - isl_seq_neg(eq, eq, 1 + tab->n_var); - - r2 = isl_tab_add_row(tab, eq); - if (r2 < 0) - return -1; - tab->con[r2].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r2]) < 0) - return -1; - - if (restore_lexmin(tab) < 0) - return -1; - if (tab->empty) - return 0; - - if (!tab->con[r1].is_row) { - if (isl_tab_kill_col(tab, tab->con[r1].index) < 0) - return -1; - } else if (!tab->con[r2].is_row) { - if (isl_tab_kill_col(tab, tab->con[r2].index) < 0) - return -1; - } - - if (tab->bmap) { - tab->bmap = isl_basic_map_add_ineq(tab->bmap, eq); - if (isl_tab_push(tab, isl_tab_undo_bmap_ineq) < 0) - return -1; - isl_seq_neg(eq, eq, 1 + tab->n_var); - tab->bmap = isl_basic_map_add_ineq(tab->bmap, eq); - isl_seq_neg(eq, eq, 1 + tab->n_var); - if (isl_tab_push(tab, isl_tab_undo_bmap_ineq) < 0) - return -1; - if (!tab->bmap) - return -1; - } - - return 0; -} - -/* Add an inequality to the tableau, resolving violations using - * restore_lexmin. - */ -static struct isl_tab *add_lexmin_ineq(struct isl_tab *tab, isl_int *ineq) -{ - int r; - - if (!tab) - return NULL; - if (tab->bmap) { - tab->bmap = isl_basic_map_add_ineq(tab->bmap, ineq); - if (isl_tab_push(tab, isl_tab_undo_bmap_ineq) < 0) - goto error; - if (!tab->bmap) - goto error; - } - r = isl_tab_add_row(tab, ineq); - if (r < 0) - goto error; - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - goto error; - if (isl_tab_row_is_redundant(tab, tab->con[r].index)) { - if (isl_tab_mark_redundant(tab, tab->con[r].index) < 0) - goto error; - return tab; - } - - if (restore_lexmin(tab) < 0) - goto error; - if (!tab->empty && tab->con[r].is_row && - isl_tab_row_is_redundant(tab, tab->con[r].index)) - if (isl_tab_mark_redundant(tab, tab->con[r].index) < 0) - goto error; - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Check if the coefficients of the parameters are all integral. - */ -static int integer_parameter(struct isl_tab *tab, int row) -{ - int i; - int col; - unsigned off = 2 + tab->M; - - for (i = 0; i < tab->n_param; ++i) { - /* Eliminated parameter */ - if (tab->var[i].is_row) - continue; - col = tab->var[i].index; - if (!isl_int_is_divisible_by(tab->mat->row[row][off + col], - tab->mat->row[row][0])) - return 0; - } - for (i = 0; i < tab->n_div; ++i) { - if (tab->var[tab->n_var - tab->n_div + i].is_row) - continue; - col = tab->var[tab->n_var - tab->n_div + i].index; - if (!isl_int_is_divisible_by(tab->mat->row[row][off + col], - tab->mat->row[row][0])) - return 0; - } - return 1; -} - -/* Check if the coefficients of the non-parameter variables are all integral. - */ -static int integer_variable(struct isl_tab *tab, int row) -{ - int i; - unsigned off = 2 + tab->M; - - for (i = tab->n_dead; i < tab->n_col; ++i) { - if (tab->col_var[i] >= 0 && - (tab->col_var[i] < tab->n_param || - tab->col_var[i] >= tab->n_var - tab->n_div)) - continue; - if (!isl_int_is_divisible_by(tab->mat->row[row][off + i], - tab->mat->row[row][0])) - return 0; - } - return 1; -} - -/* Check if the constant term is integral. - */ -static int integer_constant(struct isl_tab *tab, int row) -{ - return isl_int_is_divisible_by(tab->mat->row[row][1], - tab->mat->row[row][0]); -} - -#define I_CST 1 << 0 -#define I_PAR 1 << 1 -#define I_VAR 1 << 2 - -/* Check for next (non-parameter) variable after "var" (first if var == -1) - * that is non-integer and therefore requires a cut and return - * the index of the variable. - * For parametric tableaus, there are three parts in a row, - * the constant, the coefficients of the parameters and the rest. - * For each part, we check whether the coefficients in that part - * are all integral and if so, set the corresponding flag in *f. - * If the constant and the parameter part are integral, then the - * current sample value is integral and no cut is required - * (irrespective of whether the variable part is integral). - */ -static int next_non_integer_var(struct isl_tab *tab, int var, int *f) -{ - var = var < 0 ? tab->n_param : var + 1; - - for (; var < tab->n_var - tab->n_div; ++var) { - int flags = 0; - int row; - if (!tab->var[var].is_row) - continue; - row = tab->var[var].index; - if (integer_constant(tab, row)) - ISL_FL_SET(flags, I_CST); - if (integer_parameter(tab, row)) - ISL_FL_SET(flags, I_PAR); - if (ISL_FL_ISSET(flags, I_CST) && ISL_FL_ISSET(flags, I_PAR)) - continue; - if (integer_variable(tab, row)) - ISL_FL_SET(flags, I_VAR); - *f = flags; - return var; - } - return -1; -} - -/* Check for first (non-parameter) variable that is non-integer and - * therefore requires a cut and return the corresponding row. - * For parametric tableaus, there are three parts in a row, - * the constant, the coefficients of the parameters and the rest. - * For each part, we check whether the coefficients in that part - * are all integral and if so, set the corresponding flag in *f. - * If the constant and the parameter part are integral, then the - * current sample value is integral and no cut is required - * (irrespective of whether the variable part is integral). - */ -static int first_non_integer_row(struct isl_tab *tab, int *f) -{ - int var = next_non_integer_var(tab, -1, f); - - return var < 0 ? -1 : tab->var[var].index; -} - -/* Add a (non-parametric) cut to cut away the non-integral sample - * value of the given row. - * - * If the row is given by - * - * m r = f + \sum_i a_i y_i - * - * then the cut is - * - * c = - {-f/m} + \sum_i {a_i/m} y_i >= 0 - * - * The big parameter, if any, is ignored, since it is assumed to be big - * enough to be divisible by any integer. - * If the tableau is actually a parametric tableau, then this function - * is only called when all coefficients of the parameters are integral. - * The cut therefore has zero coefficients for the parameters. - * - * The current value is known to be negative, so row_sign, if it - * exists, is set accordingly. - * - * Return the row of the cut or -1. - */ -static int add_cut(struct isl_tab *tab, int row) -{ - int i; - int r; - isl_int *r_row; - unsigned off = 2 + tab->M; - - if (isl_tab_extend_cons(tab, 1) < 0) - return -1; - r = isl_tab_allocate_con(tab); - if (r < 0) - return -1; - - r_row = tab->mat->row[tab->con[r].index]; - isl_int_set(r_row[0], tab->mat->row[row][0]); - isl_int_neg(r_row[1], tab->mat->row[row][1]); - isl_int_fdiv_r(r_row[1], r_row[1], tab->mat->row[row][0]); - isl_int_neg(r_row[1], r_row[1]); - if (tab->M) - isl_int_set_si(r_row[2], 0); - for (i = 0; i < tab->n_col; ++i) - isl_int_fdiv_r(r_row[off + i], - tab->mat->row[row][off + i], tab->mat->row[row][0]); - - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - return -1; - if (tab->row_sign) - tab->row_sign[tab->con[r].index] = isl_tab_row_neg; - - return tab->con[r].index; -} - -/* Given a non-parametric tableau, add cuts until an integer - * sample point is obtained or until the tableau is determined - * to be integer infeasible. - * As long as there is any non-integer value in the sample point, - * we add appropriate cuts, if possible, for each of these - * non-integer values and then resolve the violated - * cut constraints using restore_lexmin. - * If one of the corresponding rows is equal to an integral - * combination of variables/constraints plus a non-integral constant, - * then there is no way to obtain an integer point and we return - * a tableau that is marked empty. - */ -static struct isl_tab *cut_to_integer_lexmin(struct isl_tab *tab) -{ - int var; - int row; - int flags; - - if (!tab) - return NULL; - if (tab->empty) - return tab; - - while ((var = next_non_integer_var(tab, -1, &flags)) != -1) { - do { - if (ISL_FL_ISSET(flags, I_VAR)) { - if (isl_tab_mark_empty(tab) < 0) - goto error; - return tab; - } - row = tab->var[var].index; - row = add_cut(tab, row); - if (row < 0) - goto error; - } while ((var = next_non_integer_var(tab, var, &flags)) != -1); - if (restore_lexmin(tab) < 0) - goto error; - if (tab->empty) - break; - } - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Check whether all the currently active samples also satisfy the inequality - * "ineq" (treated as an equality if eq is set). - * Remove those samples that do not. - */ -static struct isl_tab *check_samples(struct isl_tab *tab, isl_int *ineq, int eq) -{ - int i; - isl_int v; - - if (!tab) - return NULL; - - isl_assert(tab->mat->ctx, tab->bmap, goto error); - isl_assert(tab->mat->ctx, tab->samples, goto error); - isl_assert(tab->mat->ctx, tab->samples->n_col == 1 + tab->n_var, goto error); - - isl_int_init(v); - for (i = tab->n_outside; i < tab->n_sample; ++i) { - int sgn; - isl_seq_inner_product(ineq, tab->samples->row[i], - 1 + tab->n_var, &v); - sgn = isl_int_sgn(v); - if (eq ? (sgn == 0) : (sgn >= 0)) - continue; - tab = isl_tab_drop_sample(tab, i); - if (!tab) - break; - } - isl_int_clear(v); - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Check whether the sample value of the tableau is finite, - * i.e., either the tableau does not use a big parameter, or - * all values of the variables are equal to the big parameter plus - * some constant. This constant is the actual sample value. - */ -static int sample_is_finite(struct isl_tab *tab) -{ - int i; - - if (!tab->M) - return 1; - - for (i = 0; i < tab->n_var; ++i) { - int row; - if (!tab->var[i].is_row) - return 0; - row = tab->var[i].index; - if (isl_int_ne(tab->mat->row[row][0], tab->mat->row[row][2])) - return 0; - } - return 1; -} - -/* Check if the context tableau of sol has any integer points. - * Leave tab in empty state if no integer point can be found. - * If an integer point can be found and if moreover it is finite, - * then it is added to the list of sample values. - * - * This function is only called when none of the currently active sample - * values satisfies the most recently added constraint. - */ -static struct isl_tab *check_integer_feasible(struct isl_tab *tab) -{ - struct isl_tab_undo *snap; - - if (!tab) - return NULL; - - snap = isl_tab_snap(tab); - if (isl_tab_push_basis(tab) < 0) - goto error; - - tab = cut_to_integer_lexmin(tab); - if (!tab) - goto error; - - if (!tab->empty && sample_is_finite(tab)) { - struct isl_vec *sample; - - sample = isl_tab_get_sample_value(tab); - - tab = isl_tab_add_sample(tab, sample); - } - - if (!tab->empty && isl_tab_rollback(tab, snap) < 0) - goto error; - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Check if any of the currently active sample values satisfies - * the inequality "ineq" (an equality if eq is set). - */ -static int tab_has_valid_sample(struct isl_tab *tab, isl_int *ineq, int eq) -{ - int i; - isl_int v; - - if (!tab) - return -1; - - isl_assert(tab->mat->ctx, tab->bmap, return -1); - isl_assert(tab->mat->ctx, tab->samples, return -1); - isl_assert(tab->mat->ctx, tab->samples->n_col == 1 + tab->n_var, return -1); - - isl_int_init(v); - for (i = tab->n_outside; i < tab->n_sample; ++i) { - int sgn; - isl_seq_inner_product(ineq, tab->samples->row[i], - 1 + tab->n_var, &v); - sgn = isl_int_sgn(v); - if (eq ? (sgn == 0) : (sgn >= 0)) - break; - } - isl_int_clear(v); - - return i < tab->n_sample; -} - -/* Add a div specified by "div" to the tableau "tab" and return - * 1 if the div is obviously non-negative. - */ -static int context_tab_add_div(struct isl_tab *tab, struct isl_vec *div, - int (*add_ineq)(void *user, isl_int *), void *user) -{ - int i; - int r; - struct isl_mat *samples; - int nonneg; - - r = isl_tab_add_div(tab, div, add_ineq, user); - if (r < 0) - return -1; - nonneg = tab->var[r].is_nonneg; - tab->var[r].frozen = 1; - - samples = isl_mat_extend(tab->samples, - tab->n_sample, 1 + tab->n_var); - tab->samples = samples; - if (!samples) - return -1; - for (i = tab->n_outside; i < samples->n_row; ++i) { - isl_seq_inner_product(div->el + 1, samples->row[i], - div->size - 1, &samples->row[i][samples->n_col - 1]); - isl_int_fdiv_q(samples->row[i][samples->n_col - 1], - samples->row[i][samples->n_col - 1], div->el[0]); - } - - return nonneg; -} - -/* Add a div specified by "div" to both the main tableau and - * the context tableau. In case of the main tableau, we only - * need to add an extra div. In the context tableau, we also - * need to express the meaning of the div. - * Return the index of the div or -1 if anything went wrong. - */ -static int add_div(struct isl_tab *tab, struct isl_context *context, - struct isl_vec *div) -{ - int r; - int nonneg; - - if ((nonneg = context->op->add_div(context, div)) < 0) - goto error; - - if (!context->op->is_ok(context)) - goto error; - - if (isl_tab_extend_vars(tab, 1) < 0) - goto error; - r = isl_tab_allocate_var(tab); - if (r < 0) - goto error; - if (nonneg) - tab->var[r].is_nonneg = 1; - tab->var[r].frozen = 1; - tab->n_div++; - - return tab->n_div - 1; -error: - context->op->invalidate(context); - return -1; -} - -static int find_div(struct isl_tab *tab, isl_int *div, isl_int denom) -{ - int i; - unsigned total = isl_basic_map_total_dim(tab->bmap); - - for (i = 0; i < tab->bmap->n_div; ++i) { - if (isl_int_ne(tab->bmap->div[i][0], denom)) - continue; - if (!isl_seq_eq(tab->bmap->div[i] + 1, div, 1 + total)) - continue; - return i; - } - return -1; -} - -/* Return the index of a div that corresponds to "div". - * We first check if we already have such a div and if not, we create one. - */ -static int get_div(struct isl_tab *tab, struct isl_context *context, - struct isl_vec *div) -{ - int d; - struct isl_tab *context_tab = context->op->peek_tab(context); - - if (!context_tab) - return -1; - - d = find_div(context_tab, div->el + 1, div->el[0]); - if (d != -1) - return d; - - return add_div(tab, context, div); -} - -/* Add a parametric cut to cut away the non-integral sample value - * of the give row. - * Let a_i be the coefficients of the constant term and the parameters - * and let b_i be the coefficients of the variables or constraints - * in basis of the tableau. - * Let q be the div q = floor(\sum_i {-a_i} y_i). - * - * The cut is expressed as - * - * c = \sum_i -{-a_i} y_i + \sum_i {b_i} x_i + q >= 0 - * - * If q did not already exist in the context tableau, then it is added first. - * If q is in a column of the main tableau then the "+ q" can be accomplished - * by setting the corresponding entry to the denominator of the constraint. - * If q happens to be in a row of the main tableau, then the corresponding - * row needs to be added instead (taking care of the denominators). - * Note that this is very unlikely, but perhaps not entirely impossible. - * - * The current value of the cut is known to be negative (or at least - * non-positive), so row_sign is set accordingly. - * - * Return the row of the cut or -1. - */ -static int add_parametric_cut(struct isl_tab *tab, int row, - struct isl_context *context) -{ - struct isl_vec *div; - int d; - int i; - int r; - isl_int *r_row; - int col; - int n; - unsigned off = 2 + tab->M; - - if (!context) - return -1; - - div = get_row_parameter_div(tab, row); - if (!div) - return -1; - - n = tab->n_div; - d = context->op->get_div(context, tab, div); - if (d < 0) - return -1; - - if (isl_tab_extend_cons(tab, 1) < 0) - return -1; - r = isl_tab_allocate_con(tab); - if (r < 0) - return -1; - - r_row = tab->mat->row[tab->con[r].index]; - isl_int_set(r_row[0], tab->mat->row[row][0]); - isl_int_neg(r_row[1], tab->mat->row[row][1]); - isl_int_fdiv_r(r_row[1], r_row[1], tab->mat->row[row][0]); - isl_int_neg(r_row[1], r_row[1]); - if (tab->M) - isl_int_set_si(r_row[2], 0); - for (i = 0; i < tab->n_param; ++i) { - if (tab->var[i].is_row) - continue; - col = tab->var[i].index; - isl_int_neg(r_row[off + col], tab->mat->row[row][off + col]); - isl_int_fdiv_r(r_row[off + col], r_row[off + col], - tab->mat->row[row][0]); - isl_int_neg(r_row[off + col], r_row[off + col]); - } - for (i = 0; i < tab->n_div; ++i) { - if (tab->var[tab->n_var - tab->n_div + i].is_row) - continue; - col = tab->var[tab->n_var - tab->n_div + i].index; - isl_int_neg(r_row[off + col], tab->mat->row[row][off + col]); - isl_int_fdiv_r(r_row[off + col], r_row[off + col], - tab->mat->row[row][0]); - isl_int_neg(r_row[off + col], r_row[off + col]); - } - for (i = 0; i < tab->n_col; ++i) { - if (tab->col_var[i] >= 0 && - (tab->col_var[i] < tab->n_param || - tab->col_var[i] >= tab->n_var - tab->n_div)) - continue; - isl_int_fdiv_r(r_row[off + i], - tab->mat->row[row][off + i], tab->mat->row[row][0]); - } - if (tab->var[tab->n_var - tab->n_div + d].is_row) { - isl_int gcd; - int d_row = tab->var[tab->n_var - tab->n_div + d].index; - isl_int_init(gcd); - isl_int_gcd(gcd, tab->mat->row[d_row][0], r_row[0]); - isl_int_divexact(r_row[0], r_row[0], gcd); - isl_int_divexact(gcd, tab->mat->row[d_row][0], gcd); - isl_seq_combine(r_row + 1, gcd, r_row + 1, - r_row[0], tab->mat->row[d_row] + 1, - off - 1 + tab->n_col); - isl_int_mul(r_row[0], r_row[0], tab->mat->row[d_row][0]); - isl_int_clear(gcd); - } else { - col = tab->var[tab->n_var - tab->n_div + d].index; - isl_int_set(r_row[off + col], tab->mat->row[row][0]); - } - - tab->con[r].is_nonneg = 1; - if (isl_tab_push_var(tab, isl_tab_undo_nonneg, &tab->con[r]) < 0) - return -1; - if (tab->row_sign) - tab->row_sign[tab->con[r].index] = isl_tab_row_neg; - - isl_vec_free(div); - - row = tab->con[r].index; - - if (d >= n && context->op->detect_equalities(context, tab) < 0) - return -1; - - return row; -} - -/* Construct a tableau for bmap that can be used for computing - * the lexicographic minimum (or maximum) of bmap. - * If not NULL, then dom is the domain where the minimum - * should be computed. In this case, we set up a parametric - * tableau with row signs (initialized to "unknown"). - * If M is set, then the tableau will use a big parameter. - * If max is set, then a maximum should be computed instead of a minimum. - * This means that for each variable x, the tableau will contain the variable - * x' = M - x, rather than x' = M + x. This in turn means that the coefficient - * of the variables in all constraints are negated prior to adding them - * to the tableau. - */ -static struct isl_tab *tab_for_lexmin(struct isl_basic_map *bmap, - struct isl_basic_set *dom, unsigned M, int max) -{ - int i; - struct isl_tab *tab; - - tab = isl_tab_alloc(bmap->ctx, 2 * bmap->n_eq + bmap->n_ineq + 1, - isl_basic_map_total_dim(bmap), M); - if (!tab) - return NULL; - - tab->rational = ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL); - if (dom) { - tab->n_param = isl_basic_set_total_dim(dom) - dom->n_div; - tab->n_div = dom->n_div; - tab->row_sign = isl_calloc_array(bmap->ctx, - enum isl_tab_row_sign, tab->mat->n_row); - if (!tab->row_sign) - goto error; - } - if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_EMPTY)) { - if (isl_tab_mark_empty(tab) < 0) - goto error; - return tab; - } - - for (i = tab->n_param; i < tab->n_var - tab->n_div; ++i) { - tab->var[i].is_nonneg = 1; - tab->var[i].frozen = 1; - } - for (i = 0; i < bmap->n_eq; ++i) { - if (max) - isl_seq_neg(bmap->eq[i] + 1 + tab->n_param, - bmap->eq[i] + 1 + tab->n_param, - tab->n_var - tab->n_param - tab->n_div); - tab = add_lexmin_valid_eq(tab, bmap->eq[i]); - if (max) - isl_seq_neg(bmap->eq[i] + 1 + tab->n_param, - bmap->eq[i] + 1 + tab->n_param, - tab->n_var - tab->n_param - tab->n_div); - if (!tab || tab->empty) - return tab; - } - if (bmap->n_eq && restore_lexmin(tab) < 0) - goto error; - for (i = 0; i < bmap->n_ineq; ++i) { - if (max) - isl_seq_neg(bmap->ineq[i] + 1 + tab->n_param, - bmap->ineq[i] + 1 + tab->n_param, - tab->n_var - tab->n_param - tab->n_div); - tab = add_lexmin_ineq(tab, bmap->ineq[i]); - if (max) - isl_seq_neg(bmap->ineq[i] + 1 + tab->n_param, - bmap->ineq[i] + 1 + tab->n_param, - tab->n_var - tab->n_param - tab->n_div); - if (!tab || tab->empty) - return tab; - } - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -/* Given a main tableau where more than one row requires a split, - * determine and return the "best" row to split on. - * - * Given two rows in the main tableau, if the inequality corresponding - * to the first row is redundant with respect to that of the second row - * in the current tableau, then it is better to split on the second row, - * since in the positive part, both row will be positive. - * (In the negative part a pivot will have to be performed and just about - * anything can happen to the sign of the other row.) - * - * As a simple heuristic, we therefore select the row that makes the most - * of the other rows redundant. - * - * Perhaps it would also be useful to look at the number of constraints - * that conflict with any given constraint. - */ -static int best_split(struct isl_tab *tab, struct isl_tab *context_tab) -{ - struct isl_tab_undo *snap; - int split; - int row; - int best = -1; - int best_r; - - if (isl_tab_extend_cons(context_tab, 2) < 0) - return -1; - - snap = isl_tab_snap(context_tab); - - for (split = tab->n_redundant; split < tab->n_row; ++split) { - struct isl_tab_undo *snap2; - struct isl_vec *ineq = NULL; - int r = 0; - int ok; - - if (!isl_tab_var_from_row(tab, split)->is_nonneg) - continue; - if (tab->row_sign[split] != isl_tab_row_any) - continue; - - ineq = get_row_parameter_ineq(tab, split); - if (!ineq) - return -1; - ok = isl_tab_add_ineq(context_tab, ineq->el) >= 0; - isl_vec_free(ineq); - if (!ok) - return -1; - - snap2 = isl_tab_snap(context_tab); - - for (row = tab->n_redundant; row < tab->n_row; ++row) { - struct isl_tab_var *var; - - if (row == split) - continue; - if (!isl_tab_var_from_row(tab, row)->is_nonneg) - continue; - if (tab->row_sign[row] != isl_tab_row_any) - continue; - - ineq = get_row_parameter_ineq(tab, row); - if (!ineq) - return -1; - ok = isl_tab_add_ineq(context_tab, ineq->el) >= 0; - isl_vec_free(ineq); - if (!ok) - return -1; - var = &context_tab->con[context_tab->n_con - 1]; - if (!context_tab->empty && - !isl_tab_min_at_most_neg_one(context_tab, var)) - r++; - if (isl_tab_rollback(context_tab, snap2) < 0) - return -1; - } - if (best == -1 || r > best_r) { - best = split; - best_r = r; - } - if (isl_tab_rollback(context_tab, snap) < 0) - return -1; - } - - return best; -} - -static struct isl_basic_set *context_lex_peek_basic_set( - struct isl_context *context) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - if (!clex->tab) - return NULL; - return isl_tab_peek_bset(clex->tab); -} - -static struct isl_tab *context_lex_peek_tab(struct isl_context *context) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - return clex->tab; -} - -static void context_lex_add_eq(struct isl_context *context, isl_int *eq, - int check, int update) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - if (isl_tab_extend_cons(clex->tab, 2) < 0) - goto error; - if (add_lexmin_eq(clex->tab, eq) < 0) - goto error; - if (check) { - int v = tab_has_valid_sample(clex->tab, eq, 1); - if (v < 0) - goto error; - if (!v) - clex->tab = check_integer_feasible(clex->tab); - } - if (update) - clex->tab = check_samples(clex->tab, eq, 1); - return; -error: - isl_tab_free(clex->tab); - clex->tab = NULL; -} - -static void context_lex_add_ineq(struct isl_context *context, isl_int *ineq, - int check, int update) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - if (isl_tab_extend_cons(clex->tab, 1) < 0) - goto error; - clex->tab = add_lexmin_ineq(clex->tab, ineq); - if (check) { - int v = tab_has_valid_sample(clex->tab, ineq, 0); - if (v < 0) - goto error; - if (!v) - clex->tab = check_integer_feasible(clex->tab); - } - if (update) - clex->tab = check_samples(clex->tab, ineq, 0); - return; -error: - isl_tab_free(clex->tab); - clex->tab = NULL; -} - -static int context_lex_add_ineq_wrap(void *user, isl_int *ineq) -{ - struct isl_context *context = (struct isl_context *)user; - context_lex_add_ineq(context, ineq, 0, 0); - return context->op->is_ok(context) ? 0 : -1; -} - -/* Check which signs can be obtained by "ineq" on all the currently - * active sample values. See row_sign for more information. - */ -static enum isl_tab_row_sign tab_ineq_sign(struct isl_tab *tab, isl_int *ineq, - int strict) -{ - int i; - int sgn; - isl_int tmp; - enum isl_tab_row_sign res = isl_tab_row_unknown; - - isl_assert(tab->mat->ctx, tab->samples, return isl_tab_row_unknown); - isl_assert(tab->mat->ctx, tab->samples->n_col == 1 + tab->n_var, - return isl_tab_row_unknown); - - isl_int_init(tmp); - for (i = tab->n_outside; i < tab->n_sample; ++i) { - isl_seq_inner_product(tab->samples->row[i], ineq, - 1 + tab->n_var, &tmp); - sgn = isl_int_sgn(tmp); - if (sgn > 0 || (sgn == 0 && strict)) { - if (res == isl_tab_row_unknown) - res = isl_tab_row_pos; - if (res == isl_tab_row_neg) - res = isl_tab_row_any; - } - if (sgn < 0) { - if (res == isl_tab_row_unknown) - res = isl_tab_row_neg; - if (res == isl_tab_row_pos) - res = isl_tab_row_any; - } - if (res == isl_tab_row_any) - break; - } - isl_int_clear(tmp); - - return res; -} - -static enum isl_tab_row_sign context_lex_ineq_sign(struct isl_context *context, - isl_int *ineq, int strict) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - return tab_ineq_sign(clex->tab, ineq, strict); -} - -/* Check whether "ineq" can be added to the tableau without rendering - * it infeasible. - */ -static int context_lex_test_ineq(struct isl_context *context, isl_int *ineq) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - struct isl_tab_undo *snap; - int feasible; - - if (!clex->tab) - return -1; - - if (isl_tab_extend_cons(clex->tab, 1) < 0) - return -1; - - snap = isl_tab_snap(clex->tab); - if (isl_tab_push_basis(clex->tab) < 0) - return -1; - clex->tab = add_lexmin_ineq(clex->tab, ineq); - clex->tab = check_integer_feasible(clex->tab); - if (!clex->tab) - return -1; - feasible = !clex->tab->empty; - if (isl_tab_rollback(clex->tab, snap) < 0) - return -1; - - return feasible; -} - -static int context_lex_get_div(struct isl_context *context, struct isl_tab *tab, - struct isl_vec *div) -{ - return get_div(tab, context, div); -} - -/* Add a div specified by "div" to the context tableau and return - * 1 if the div is obviously non-negative. - * context_tab_add_div will always return 1, because all variables - * in a isl_context_lex tableau are non-negative. - * However, if we are using a big parameter in the context, then this only - * reflects the non-negativity of the variable used to _encode_ the - * div, i.e., div' = M + div, so we can't draw any conclusions. - */ -static int context_lex_add_div(struct isl_context *context, struct isl_vec *div) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - int nonneg; - nonneg = context_tab_add_div(clex->tab, div, - context_lex_add_ineq_wrap, context); - if (nonneg < 0) - return -1; - if (clex->tab->M) - return 0; - return nonneg; -} - -static int context_lex_detect_equalities(struct isl_context *context, - struct isl_tab *tab) -{ - return 0; -} - -static int context_lex_best_split(struct isl_context *context, - struct isl_tab *tab) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - struct isl_tab_undo *snap; - int r; - - snap = isl_tab_snap(clex->tab); - if (isl_tab_push_basis(clex->tab) < 0) - return -1; - r = best_split(tab, clex->tab); - - if (r >= 0 && isl_tab_rollback(clex->tab, snap) < 0) - return -1; - - return r; -} - -static int context_lex_is_empty(struct isl_context *context) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - if (!clex->tab) - return -1; - return clex->tab->empty; -} - -static void *context_lex_save(struct isl_context *context) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - struct isl_tab_undo *snap; - - snap = isl_tab_snap(clex->tab); - if (isl_tab_push_basis(clex->tab) < 0) - return NULL; - if (isl_tab_save_samples(clex->tab) < 0) - return NULL; - - return snap; -} - -static void context_lex_restore(struct isl_context *context, void *save) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - if (isl_tab_rollback(clex->tab, (struct isl_tab_undo *)save) < 0) { - isl_tab_free(clex->tab); - clex->tab = NULL; - } -} - -static int context_lex_is_ok(struct isl_context *context) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - return !!clex->tab; -} - -/* For each variable in the context tableau, check if the variable can - * only attain non-negative values. If so, mark the parameter as non-negative - * in the main tableau. This allows for a more direct identification of some - * cases of violated constraints. - */ -static struct isl_tab *tab_detect_nonnegative_parameters(struct isl_tab *tab, - struct isl_tab *context_tab) -{ - int i; - struct isl_tab_undo *snap; - struct isl_vec *ineq = NULL; - struct isl_tab_var *var; - int n; - - if (context_tab->n_var == 0) - return tab; - - ineq = isl_vec_alloc(tab->mat->ctx, 1 + context_tab->n_var); - if (!ineq) - goto error; - - if (isl_tab_extend_cons(context_tab, 1) < 0) - goto error; - - snap = isl_tab_snap(context_tab); - - n = 0; - isl_seq_clr(ineq->el, ineq->size); - for (i = 0; i < context_tab->n_var; ++i) { - isl_int_set_si(ineq->el[1 + i], 1); - if (isl_tab_add_ineq(context_tab, ineq->el) < 0) - goto error; - var = &context_tab->con[context_tab->n_con - 1]; - if (!context_tab->empty && - !isl_tab_min_at_most_neg_one(context_tab, var)) { - int j = i; - if (i >= tab->n_param) - j = i - tab->n_param + tab->n_var - tab->n_div; - tab->var[j].is_nonneg = 1; - n++; - } - isl_int_set_si(ineq->el[1 + i], 0); - if (isl_tab_rollback(context_tab, snap) < 0) - goto error; - } - - if (context_tab->M && n == context_tab->n_var) { - context_tab->mat = isl_mat_drop_cols(context_tab->mat, 2, 1); - context_tab->M = 0; - } - - isl_vec_free(ineq); - return tab; -error: - isl_vec_free(ineq); - isl_tab_free(tab); - return NULL; -} - -static struct isl_tab *context_lex_detect_nonnegative_parameters( - struct isl_context *context, struct isl_tab *tab) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - struct isl_tab_undo *snap; - - if (!tab) - return NULL; - - snap = isl_tab_snap(clex->tab); - if (isl_tab_push_basis(clex->tab) < 0) - goto error; - - tab = tab_detect_nonnegative_parameters(tab, clex->tab); - - if (isl_tab_rollback(clex->tab, snap) < 0) - goto error; - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -static void context_lex_invalidate(struct isl_context *context) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - isl_tab_free(clex->tab); - clex->tab = NULL; -} - -static void context_lex_free(struct isl_context *context) -{ - struct isl_context_lex *clex = (struct isl_context_lex *)context; - isl_tab_free(clex->tab); - free(clex); -} - -struct isl_context_op isl_context_lex_op = { - context_lex_detect_nonnegative_parameters, - context_lex_peek_basic_set, - context_lex_peek_tab, - context_lex_add_eq, - context_lex_add_ineq, - context_lex_ineq_sign, - context_lex_test_ineq, - context_lex_get_div, - context_lex_add_div, - context_lex_detect_equalities, - context_lex_best_split, - context_lex_is_empty, - context_lex_is_ok, - context_lex_save, - context_lex_restore, - context_lex_invalidate, - context_lex_free, -}; - -static struct isl_tab *context_tab_for_lexmin(struct isl_basic_set *bset) -{ - struct isl_tab *tab; - - bset = isl_basic_set_cow(bset); - if (!bset) - return NULL; - tab = tab_for_lexmin((struct isl_basic_map *)bset, NULL, 1, 0); - if (!tab) - goto error; - if (isl_tab_track_bset(tab, bset) < 0) - goto error; - tab = isl_tab_init_samples(tab); - return tab; -error: - isl_basic_set_free(bset); - return NULL; -} - -static struct isl_context *isl_context_lex_alloc(struct isl_basic_set *dom) -{ - struct isl_context_lex *clex; - - if (!dom) - return NULL; - - clex = isl_alloc_type(dom->ctx, struct isl_context_lex); - if (!clex) - return NULL; - - clex->context.op = &isl_context_lex_op; - - clex->tab = context_tab_for_lexmin(isl_basic_set_copy(dom)); - if (restore_lexmin(clex->tab) < 0) - goto error; - clex->tab = check_integer_feasible(clex->tab); - if (!clex->tab) - goto error; - - return &clex->context; -error: - clex->context.op->free(&clex->context); - return NULL; -} - -struct isl_context_gbr { - struct isl_context context; - struct isl_tab *tab; - struct isl_tab *shifted; - struct isl_tab *cone; -}; - -static struct isl_tab *context_gbr_detect_nonnegative_parameters( - struct isl_context *context, struct isl_tab *tab) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - if (!tab) - return NULL; - return tab_detect_nonnegative_parameters(tab, cgbr->tab); -} - -static struct isl_basic_set *context_gbr_peek_basic_set( - struct isl_context *context) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - if (!cgbr->tab) - return NULL; - return isl_tab_peek_bset(cgbr->tab); -} - -static struct isl_tab *context_gbr_peek_tab(struct isl_context *context) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - return cgbr->tab; -} - -/* Initialize the "shifted" tableau of the context, which - * contains the constraints of the original tableau shifted - * by the sum of all negative coefficients. This ensures - * that any rational point in the shifted tableau can - * be rounded up to yield an integer point in the original tableau. - */ -static void gbr_init_shifted(struct isl_context_gbr *cgbr) -{ - int i, j; - struct isl_vec *cst; - struct isl_basic_set *bset = isl_tab_peek_bset(cgbr->tab); - unsigned dim = isl_basic_set_total_dim(bset); - - cst = isl_vec_alloc(cgbr->tab->mat->ctx, bset->n_ineq); - if (!cst) - return; - - for (i = 0; i < bset->n_ineq; ++i) { - isl_int_set(cst->el[i], bset->ineq[i][0]); - for (j = 0; j < dim; ++j) { - if (!isl_int_is_neg(bset->ineq[i][1 + j])) - continue; - isl_int_add(bset->ineq[i][0], bset->ineq[i][0], - bset->ineq[i][1 + j]); - } - } - - cgbr->shifted = isl_tab_from_basic_set(bset); - - for (i = 0; i < bset->n_ineq; ++i) - isl_int_set(bset->ineq[i][0], cst->el[i]); - - isl_vec_free(cst); -} - -/* Check if the shifted tableau is non-empty, and if so - * use the sample point to construct an integer point - * of the context tableau. - */ -static struct isl_vec *gbr_get_shifted_sample(struct isl_context_gbr *cgbr) -{ - struct isl_vec *sample; - - if (!cgbr->shifted) - gbr_init_shifted(cgbr); - if (!cgbr->shifted) - return NULL; - if (cgbr->shifted->empty) - return isl_vec_alloc(cgbr->tab->mat->ctx, 0); - - sample = isl_tab_get_sample_value(cgbr->shifted); - sample = isl_vec_ceil(sample); - - return sample; -} - -static struct isl_basic_set *drop_constant_terms(struct isl_basic_set *bset) -{ - int i; - - if (!bset) - return NULL; - - for (i = 0; i < bset->n_eq; ++i) - isl_int_set_si(bset->eq[i][0], 0); - - for (i = 0; i < bset->n_ineq; ++i) - isl_int_set_si(bset->ineq[i][0], 0); - - return bset; -} - -static int use_shifted(struct isl_context_gbr *cgbr) -{ - return cgbr->tab->bmap->n_eq == 0 && cgbr->tab->bmap->n_div == 0; -} - -static struct isl_vec *gbr_get_sample(struct isl_context_gbr *cgbr) -{ - struct isl_basic_set *bset; - struct isl_basic_set *cone; - - if (isl_tab_sample_is_integer(cgbr->tab)) - return isl_tab_get_sample_value(cgbr->tab); - - if (use_shifted(cgbr)) { - struct isl_vec *sample; - - sample = gbr_get_shifted_sample(cgbr); - if (!sample || sample->size > 0) - return sample; - - isl_vec_free(sample); - } - - if (!cgbr->cone) { - bset = isl_tab_peek_bset(cgbr->tab); - cgbr->cone = isl_tab_from_recession_cone(bset, 0); - if (!cgbr->cone) - return NULL; - if (isl_tab_track_bset(cgbr->cone, isl_basic_set_dup(bset)) < 0) - return NULL; - } - if (isl_tab_detect_implicit_equalities(cgbr->cone) < 0) - return NULL; - - if (cgbr->cone->n_dead == cgbr->cone->n_col) { - struct isl_vec *sample; - struct isl_tab_undo *snap; - - if (cgbr->tab->basis) { - if (cgbr->tab->basis->n_col != 1 + cgbr->tab->n_var) { - isl_mat_free(cgbr->tab->basis); - cgbr->tab->basis = NULL; - } - cgbr->tab->n_zero = 0; - cgbr->tab->n_unbounded = 0; - } - - snap = isl_tab_snap(cgbr->tab); - - sample = isl_tab_sample(cgbr->tab); - - if (isl_tab_rollback(cgbr->tab, snap) < 0) { - isl_vec_free(sample); - return NULL; - } - - return sample; - } - - cone = isl_basic_set_dup(isl_tab_peek_bset(cgbr->cone)); - cone = drop_constant_terms(cone); - cone = isl_basic_set_update_from_tab(cone, cgbr->cone); - cone = isl_basic_set_underlying_set(cone); - cone = isl_basic_set_gauss(cone, NULL); - - bset = isl_basic_set_dup(isl_tab_peek_bset(cgbr->tab)); - bset = isl_basic_set_update_from_tab(bset, cgbr->tab); - bset = isl_basic_set_underlying_set(bset); - bset = isl_basic_set_gauss(bset, NULL); - - return isl_basic_set_sample_with_cone(bset, cone); -} - -static void check_gbr_integer_feasible(struct isl_context_gbr *cgbr) -{ - struct isl_vec *sample; - - if (!cgbr->tab) - return; - - if (cgbr->tab->empty) - return; - - sample = gbr_get_sample(cgbr); - if (!sample) - goto error; - - if (sample->size == 0) { - isl_vec_free(sample); - if (isl_tab_mark_empty(cgbr->tab) < 0) - goto error; - return; - } - - cgbr->tab = isl_tab_add_sample(cgbr->tab, sample); - - return; -error: - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; -} - -static struct isl_tab *add_gbr_eq(struct isl_tab *tab, isl_int *eq) -{ - if (!tab) - return NULL; - - if (isl_tab_extend_cons(tab, 2) < 0) - goto error; - - if (isl_tab_add_eq(tab, eq) < 0) - goto error; - - return tab; -error: - isl_tab_free(tab); - return NULL; -} - -static void context_gbr_add_eq(struct isl_context *context, isl_int *eq, - int check, int update) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - - cgbr->tab = add_gbr_eq(cgbr->tab, eq); - - if (cgbr->cone && cgbr->cone->n_col != cgbr->cone->n_dead) { - if (isl_tab_extend_cons(cgbr->cone, 2) < 0) - goto error; - if (isl_tab_add_eq(cgbr->cone, eq) < 0) - goto error; - } - - if (check) { - int v = tab_has_valid_sample(cgbr->tab, eq, 1); - if (v < 0) - goto error; - if (!v) - check_gbr_integer_feasible(cgbr); - } - if (update) - cgbr->tab = check_samples(cgbr->tab, eq, 1); - return; -error: - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; -} - -static void add_gbr_ineq(struct isl_context_gbr *cgbr, isl_int *ineq) -{ - if (!cgbr->tab) - return; - - if (isl_tab_extend_cons(cgbr->tab, 1) < 0) - goto error; - - if (isl_tab_add_ineq(cgbr->tab, ineq) < 0) - goto error; - - if (cgbr->shifted && !cgbr->shifted->empty && use_shifted(cgbr)) { - int i; - unsigned dim; - dim = isl_basic_map_total_dim(cgbr->tab->bmap); - - if (isl_tab_extend_cons(cgbr->shifted, 1) < 0) - goto error; - - for (i = 0; i < dim; ++i) { - if (!isl_int_is_neg(ineq[1 + i])) - continue; - isl_int_add(ineq[0], ineq[0], ineq[1 + i]); - } - - if (isl_tab_add_ineq(cgbr->shifted, ineq) < 0) - goto error; - - for (i = 0; i < dim; ++i) { - if (!isl_int_is_neg(ineq[1 + i])) - continue; - isl_int_sub(ineq[0], ineq[0], ineq[1 + i]); - } - } - - if (cgbr->cone && cgbr->cone->n_col != cgbr->cone->n_dead) { - if (isl_tab_extend_cons(cgbr->cone, 1) < 0) - goto error; - if (isl_tab_add_ineq(cgbr->cone, ineq) < 0) - goto error; - } - - return; -error: - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; -} - -static void context_gbr_add_ineq(struct isl_context *context, isl_int *ineq, - int check, int update) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - - add_gbr_ineq(cgbr, ineq); - if (!cgbr->tab) - return; - - if (check) { - int v = tab_has_valid_sample(cgbr->tab, ineq, 0); - if (v < 0) - goto error; - if (!v) - check_gbr_integer_feasible(cgbr); - } - if (update) - cgbr->tab = check_samples(cgbr->tab, ineq, 0); - return; -error: - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; -} - -static int context_gbr_add_ineq_wrap(void *user, isl_int *ineq) -{ - struct isl_context *context = (struct isl_context *)user; - context_gbr_add_ineq(context, ineq, 0, 0); - return context->op->is_ok(context) ? 0 : -1; -} - -static enum isl_tab_row_sign context_gbr_ineq_sign(struct isl_context *context, - isl_int *ineq, int strict) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - return tab_ineq_sign(cgbr->tab, ineq, strict); -} - -/* Check whether "ineq" can be added to the tableau without rendering - * it infeasible. - */ -static int context_gbr_test_ineq(struct isl_context *context, isl_int *ineq) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - struct isl_tab_undo *snap; - struct isl_tab_undo *shifted_snap = NULL; - struct isl_tab_undo *cone_snap = NULL; - int feasible; - - if (!cgbr->tab) - return -1; - - if (isl_tab_extend_cons(cgbr->tab, 1) < 0) - return -1; - - snap = isl_tab_snap(cgbr->tab); - if (cgbr->shifted) - shifted_snap = isl_tab_snap(cgbr->shifted); - if (cgbr->cone) - cone_snap = isl_tab_snap(cgbr->cone); - add_gbr_ineq(cgbr, ineq); - check_gbr_integer_feasible(cgbr); - if (!cgbr->tab) - return -1; - feasible = !cgbr->tab->empty; - if (isl_tab_rollback(cgbr->tab, snap) < 0) - return -1; - if (shifted_snap) { - if (isl_tab_rollback(cgbr->shifted, shifted_snap)) - return -1; - } else if (cgbr->shifted) { - isl_tab_free(cgbr->shifted); - cgbr->shifted = NULL; - } - if (cone_snap) { - if (isl_tab_rollback(cgbr->cone, cone_snap)) - return -1; - } else if (cgbr->cone) { - isl_tab_free(cgbr->cone); - cgbr->cone = NULL; - } - - return feasible; -} - -/* Return the column of the last of the variables associated to - * a column that has a non-zero coefficient. - * This function is called in a context where only coefficients - * of parameters or divs can be non-zero. - */ -static int last_non_zero_var_col(struct isl_tab *tab, isl_int *p) -{ - int i; - int col; - - if (tab->n_var == 0) - return -1; - - for (i = tab->n_var - 1; i >= 0; --i) { - if (i >= tab->n_param && i < tab->n_var - tab->n_div) - continue; - if (tab->var[i].is_row) - continue; - col = tab->var[i].index; - if (!isl_int_is_zero(p[col])) - return col; - } - - return -1; -} - -/* Look through all the recently added equalities in the context - * to see if we can propagate any of them to the main tableau. - * - * The newly added equalities in the context are encoded as pairs - * of inequalities starting at inequality "first". - * - * We tentatively add each of these equalities to the main tableau - * and if this happens to result in a row with a final coefficient - * that is one or negative one, we use it to kill a column - * in the main tableau. Otherwise, we discard the tentatively - * added row. - */ -static void propagate_equalities(struct isl_context_gbr *cgbr, - struct isl_tab *tab, unsigned first) -{ - int i; - struct isl_vec *eq = NULL; - - eq = isl_vec_alloc(tab->mat->ctx, 1 + tab->n_var); - if (!eq) - goto error; - - if (isl_tab_extend_cons(tab, (cgbr->tab->bmap->n_ineq - first)/2) < 0) - goto error; - - isl_seq_clr(eq->el + 1 + tab->n_param, - tab->n_var - tab->n_param - tab->n_div); - for (i = first; i < cgbr->tab->bmap->n_ineq; i += 2) { - int j; - int r; - struct isl_tab_undo *snap; - snap = isl_tab_snap(tab); - - isl_seq_cpy(eq->el, cgbr->tab->bmap->ineq[i], 1 + tab->n_param); - isl_seq_cpy(eq->el + 1 + tab->n_var - tab->n_div, - cgbr->tab->bmap->ineq[i] + 1 + tab->n_param, - tab->n_div); - - r = isl_tab_add_row(tab, eq->el); - if (r < 0) - goto error; - r = tab->con[r].index; - j = last_non_zero_var_col(tab, tab->mat->row[r] + 2 + tab->M); - if (j < 0 || j < tab->n_dead || - !isl_int_is_one(tab->mat->row[r][0]) || - (!isl_int_is_one(tab->mat->row[r][2 + tab->M + j]) && - !isl_int_is_negone(tab->mat->row[r][2 + tab->M + j]))) { - if (isl_tab_rollback(tab, snap) < 0) - goto error; - continue; - } - if (isl_tab_pivot(tab, r, j) < 0) - goto error; - if (isl_tab_kill_col(tab, j) < 0) - goto error; - - if (restore_lexmin(tab) < 0) - goto error; - } - - isl_vec_free(eq); - - return; -error: - isl_vec_free(eq); - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; -} - -static int context_gbr_detect_equalities(struct isl_context *context, - struct isl_tab *tab) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - struct isl_ctx *ctx; - unsigned n_ineq; - - ctx = cgbr->tab->mat->ctx; - - if (!cgbr->cone) { - struct isl_basic_set *bset = isl_tab_peek_bset(cgbr->tab); - cgbr->cone = isl_tab_from_recession_cone(bset, 0); - if (!cgbr->cone) - goto error; - if (isl_tab_track_bset(cgbr->cone, isl_basic_set_dup(bset)) < 0) - goto error; - } - if (isl_tab_detect_implicit_equalities(cgbr->cone) < 0) - goto error; - - n_ineq = cgbr->tab->bmap->n_ineq; - cgbr->tab = isl_tab_detect_equalities(cgbr->tab, cgbr->cone); - if (cgbr->tab && cgbr->tab->bmap->n_ineq > n_ineq) - propagate_equalities(cgbr, tab, n_ineq); - - return 0; -error: - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; - return -1; -} - -static int context_gbr_get_div(struct isl_context *context, struct isl_tab *tab, - struct isl_vec *div) -{ - return get_div(tab, context, div); -} - -static int context_gbr_add_div(struct isl_context *context, struct isl_vec *div) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - if (cgbr->cone) { - int k; - - if (isl_tab_extend_cons(cgbr->cone, 3) < 0) - return -1; - if (isl_tab_extend_vars(cgbr->cone, 1) < 0) - return -1; - if (isl_tab_allocate_var(cgbr->cone) <0) - return -1; - - cgbr->cone->bmap = isl_basic_map_extend_space(cgbr->cone->bmap, - isl_basic_map_get_space(cgbr->cone->bmap), 1, 0, 2); - k = isl_basic_map_alloc_div(cgbr->cone->bmap); - if (k < 0) - return -1; - isl_seq_cpy(cgbr->cone->bmap->div[k], div->el, div->size); - if (isl_tab_push(cgbr->cone, isl_tab_undo_bmap_div) < 0) - return -1; - } - return context_tab_add_div(cgbr->tab, div, - context_gbr_add_ineq_wrap, context); -} - -static int context_gbr_best_split(struct isl_context *context, - struct isl_tab *tab) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - struct isl_tab_undo *snap; - int r; - - snap = isl_tab_snap(cgbr->tab); - r = best_split(tab, cgbr->tab); - - if (r >= 0 && isl_tab_rollback(cgbr->tab, snap) < 0) - return -1; - - return r; -} - -static int context_gbr_is_empty(struct isl_context *context) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - if (!cgbr->tab) - return -1; - return cgbr->tab->empty; -} - -struct isl_gbr_tab_undo { - struct isl_tab_undo *tab_snap; - struct isl_tab_undo *shifted_snap; - struct isl_tab_undo *cone_snap; -}; - -static void *context_gbr_save(struct isl_context *context) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - struct isl_gbr_tab_undo *snap; - - snap = isl_alloc_type(cgbr->tab->mat->ctx, struct isl_gbr_tab_undo); - if (!snap) - return NULL; - - snap->tab_snap = isl_tab_snap(cgbr->tab); - if (isl_tab_save_samples(cgbr->tab) < 0) - goto error; - - if (cgbr->shifted) - snap->shifted_snap = isl_tab_snap(cgbr->shifted); - else - snap->shifted_snap = NULL; - - if (cgbr->cone) - snap->cone_snap = isl_tab_snap(cgbr->cone); - else - snap->cone_snap = NULL; - - return snap; -error: - free(snap); - return NULL; -} - -static void context_gbr_restore(struct isl_context *context, void *save) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - struct isl_gbr_tab_undo *snap = (struct isl_gbr_tab_undo *)save; - if (!snap) - goto error; - if (isl_tab_rollback(cgbr->tab, snap->tab_snap) < 0) { - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; - } - - if (snap->shifted_snap) { - if (isl_tab_rollback(cgbr->shifted, snap->shifted_snap) < 0) - goto error; - } else if (cgbr->shifted) { - isl_tab_free(cgbr->shifted); - cgbr->shifted = NULL; - } - - if (snap->cone_snap) { - if (isl_tab_rollback(cgbr->cone, snap->cone_snap) < 0) - goto error; - } else if (cgbr->cone) { - isl_tab_free(cgbr->cone); - cgbr->cone = NULL; - } - - free(snap); - - return; -error: - free(snap); - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; -} - -static int context_gbr_is_ok(struct isl_context *context) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - return !!cgbr->tab; -} - -static void context_gbr_invalidate(struct isl_context *context) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - isl_tab_free(cgbr->tab); - cgbr->tab = NULL; -} - -static void context_gbr_free(struct isl_context *context) -{ - struct isl_context_gbr *cgbr = (struct isl_context_gbr *)context; - isl_tab_free(cgbr->tab); - isl_tab_free(cgbr->shifted); - isl_tab_free(cgbr->cone); - free(cgbr); -} - -struct isl_context_op isl_context_gbr_op = { - context_gbr_detect_nonnegative_parameters, - context_gbr_peek_basic_set, - context_gbr_peek_tab, - context_gbr_add_eq, - context_gbr_add_ineq, - context_gbr_ineq_sign, - context_gbr_test_ineq, - context_gbr_get_div, - context_gbr_add_div, - context_gbr_detect_equalities, - context_gbr_best_split, - context_gbr_is_empty, - context_gbr_is_ok, - context_gbr_save, - context_gbr_restore, - context_gbr_invalidate, - context_gbr_free, -}; - -static struct isl_context *isl_context_gbr_alloc(struct isl_basic_set *dom) -{ - struct isl_context_gbr *cgbr; - - if (!dom) - return NULL; - - cgbr = isl_calloc_type(dom->ctx, struct isl_context_gbr); - if (!cgbr) - return NULL; - - cgbr->context.op = &isl_context_gbr_op; - - cgbr->shifted = NULL; - cgbr->cone = NULL; - cgbr->tab = isl_tab_from_basic_set(dom); - cgbr->tab = isl_tab_init_samples(cgbr->tab); - if (!cgbr->tab) - goto error; - if (isl_tab_track_bset(cgbr->tab, - isl_basic_set_cow(isl_basic_set_copy(dom))) < 0) - goto error; - check_gbr_integer_feasible(cgbr); - - return &cgbr->context; -error: - cgbr->context.op->free(&cgbr->context); - return NULL; -} - -static struct isl_context *isl_context_alloc(struct isl_basic_set *dom) -{ - if (!dom) - return NULL; - - if (dom->ctx->opt->context == ISL_CONTEXT_LEXMIN) - return isl_context_lex_alloc(dom); - else - return isl_context_gbr_alloc(dom); -} - -/* Construct an isl_sol_map structure for accumulating the solution. - * If track_empty is set, then we also keep track of the parts - * of the context where there is no solution. - * If max is set, then we are solving a maximization, rather than - * a minimization problem, which means that the variables in the - * tableau have value "M - x" rather than "M + x". - */ -static struct isl_sol *sol_map_init(struct isl_basic_map *bmap, - struct isl_basic_set *dom, int track_empty, int max) -{ - struct isl_sol_map *sol_map = NULL; - - if (!bmap) - goto error; - - sol_map = isl_calloc_type(bmap->ctx, struct isl_sol_map); - if (!sol_map) - goto error; - - sol_map->sol.rational = ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL); - sol_map->sol.dec_level.callback.run = &sol_dec_level_wrap; - sol_map->sol.dec_level.sol = &sol_map->sol; - sol_map->sol.max = max; - sol_map->sol.n_out = isl_basic_map_dim(bmap, isl_dim_out); - sol_map->sol.add = &sol_map_add_wrap; - sol_map->sol.add_empty = track_empty ? &sol_map_add_empty_wrap : NULL; - sol_map->sol.free = &sol_map_free_wrap; - sol_map->map = isl_map_alloc_space(isl_basic_map_get_space(bmap), 1, - ISL_MAP_DISJOINT); - if (!sol_map->map) - goto error; - - sol_map->sol.context = isl_context_alloc(dom); - if (!sol_map->sol.context) - goto error; - - if (track_empty) { - sol_map->empty = isl_set_alloc_space(isl_basic_set_get_space(dom), - 1, ISL_SET_DISJOINT); - if (!sol_map->empty) - goto error; - } - - isl_basic_set_free(dom); - return &sol_map->sol; -error: - isl_basic_set_free(dom); - sol_map_free(sol_map); - return NULL; -} - -/* Check whether all coefficients of (non-parameter) variables - * are non-positive, meaning that no pivots can be performed on the row. - */ -static int is_critical(struct isl_tab *tab, int row) -{ - int j; - unsigned off = 2 + tab->M; - - for (j = tab->n_dead; j < tab->n_col; ++j) { - if (tab->col_var[j] >= 0 && - (tab->col_var[j] < tab->n_param || - tab->col_var[j] >= tab->n_var - tab->n_div)) - continue; - - if (isl_int_is_pos(tab->mat->row[row][off + j])) - return 0; - } - - return 1; -} - -/* Check whether the inequality represented by vec is strict over the integers, - * i.e., there are no integer values satisfying the constraint with - * equality. This happens if the gcd of the coefficients is not a divisor - * of the constant term. If so, scale the constraint down by the gcd - * of the coefficients. - */ -static int is_strict(struct isl_vec *vec) -{ - isl_int gcd; - int strict = 0; - - isl_int_init(gcd); - isl_seq_gcd(vec->el + 1, vec->size - 1, &gcd); - if (!isl_int_is_one(gcd)) { - strict = !isl_int_is_divisible_by(vec->el[0], gcd); - isl_int_fdiv_q(vec->el[0], vec->el[0], gcd); - isl_seq_scale_down(vec->el + 1, vec->el + 1, gcd, vec->size-1); - } - isl_int_clear(gcd); - - return strict; -} - -/* Determine the sign of the given row of the main tableau. - * The result is one of - * isl_tab_row_pos: always non-negative; no pivot needed - * isl_tab_row_neg: always non-positive; pivot - * isl_tab_row_any: can be both positive and negative; split - * - * We first handle some simple cases - * - the row sign may be known already - * - the row may be obviously non-negative - * - the parametric constant may be equal to that of another row - * for which we know the sign. This sign will be either "pos" or - * "any". If it had been "neg" then we would have pivoted before. - * - * If none of these cases hold, we check the value of the row for each - * of the currently active samples. Based on the signs of these values - * we make an initial determination of the sign of the row. - * - * all zero -> unk(nown) - * all non-negative -> pos - * all non-positive -> neg - * both negative and positive -> all - * - * If we end up with "all", we are done. - * Otherwise, we perform a check for positive and/or negative - * values as follows. - * - * samples neg unk pos - * <0 ? Y N Y N - * pos any pos - * >0 ? Y N Y N - * any neg any neg - * - * There is no special sign for "zero", because we can usually treat zero - * as either non-negative or non-positive, whatever works out best. - * However, if the row is "critical", meaning that pivoting is impossible - * then we don't want to limp zero with the non-positive case, because - * then we we would lose the solution for those values of the parameters - * where the value of the row is zero. Instead, we treat 0 as non-negative - * ensuring a split if the row can attain both zero and negative values. - * The same happens when the original constraint was one that could not - * be satisfied with equality by any integer values of the parameters. - * In this case, we normalize the constraint, but then a value of zero - * for the normalized constraint is actually a positive value for the - * original constraint, so again we need to treat zero as non-negative. - * In both these cases, we have the following decision tree instead: - * - * all non-negative -> pos - * all negative -> neg - * both negative and non-negative -> all - * - * samples neg pos - * <0 ? Y N - * any pos - * >=0 ? Y N - * any neg - */ -static enum isl_tab_row_sign row_sign(struct isl_tab *tab, - struct isl_sol *sol, int row) -{ - struct isl_vec *ineq = NULL; - enum isl_tab_row_sign res = isl_tab_row_unknown; - int critical; - int strict; - int row2; - - if (tab->row_sign[row] != isl_tab_row_unknown) - return tab->row_sign[row]; - if (is_obviously_nonneg(tab, row)) - return isl_tab_row_pos; - for (row2 = tab->n_redundant; row2 < tab->n_row; ++row2) { - if (tab->row_sign[row2] == isl_tab_row_unknown) - continue; - if (identical_parameter_line(tab, row, row2)) - return tab->row_sign[row2]; - } - - critical = is_critical(tab, row); - - ineq = get_row_parameter_ineq(tab, row); - if (!ineq) - goto error; - - strict = is_strict(ineq); - - res = sol->context->op->ineq_sign(sol->context, ineq->el, - critical || strict); - - if (res == isl_tab_row_unknown || res == isl_tab_row_pos) { - /* test for negative values */ - int feasible; - isl_seq_neg(ineq->el, ineq->el, ineq->size); - isl_int_sub_ui(ineq->el[0], ineq->el[0], 1); - - feasible = sol->context->op->test_ineq(sol->context, ineq->el); - if (feasible < 0) - goto error; - if (!feasible) - res = isl_tab_row_pos; - else - res = (res == isl_tab_row_unknown) ? isl_tab_row_neg - : isl_tab_row_any; - if (res == isl_tab_row_neg) { - isl_seq_neg(ineq->el, ineq->el, ineq->size); - isl_int_sub_ui(ineq->el[0], ineq->el[0], 1); - } - } - - if (res == isl_tab_row_neg) { - /* test for positive values */ - int feasible; - if (!critical && !strict) - isl_int_sub_ui(ineq->el[0], ineq->el[0], 1); - - feasible = sol->context->op->test_ineq(sol->context, ineq->el); - if (feasible < 0) - goto error; - if (feasible) - res = isl_tab_row_any; - } - - isl_vec_free(ineq); - return res; -error: - isl_vec_free(ineq); - return isl_tab_row_unknown; -} - -static void find_solutions(struct isl_sol *sol, struct isl_tab *tab); - -/* Find solutions for values of the parameters that satisfy the given - * inequality. - * - * We currently take a snapshot of the context tableau that is reset - * when we return from this function, while we make a copy of the main - * tableau, leaving the original main tableau untouched. - * These are fairly arbitrary choices. Making a copy also of the context - * tableau would obviate the need to undo any changes made to it later, - * while taking a snapshot of the main tableau could reduce memory usage. - * If we were to switch to taking a snapshot of the main tableau, - * we would have to keep in mind that we need to save the row signs - * and that we need to do this before saving the current basis - * such that the basis has been restore before we restore the row signs. - */ -static void find_in_pos(struct isl_sol *sol, struct isl_tab *tab, isl_int *ineq) -{ - void *saved; - - if (!sol->context) - goto error; - saved = sol->context->op->save(sol->context); - - tab = isl_tab_dup(tab); - if (!tab) - goto error; - - sol->context->op->add_ineq(sol->context, ineq, 0, 1); - - find_solutions(sol, tab); - - if (!sol->error) - sol->context->op->restore(sol->context, saved); - return; -error: - sol->error = 1; -} - -/* Record the absence of solutions for those values of the parameters - * that do not satisfy the given inequality with equality. - */ -static void no_sol_in_strict(struct isl_sol *sol, - struct isl_tab *tab, struct isl_vec *ineq) -{ - int empty; - void *saved; - - if (!sol->context || sol->error) - goto error; - saved = sol->context->op->save(sol->context); - - isl_int_sub_ui(ineq->el[0], ineq->el[0], 1); - - sol->context->op->add_ineq(sol->context, ineq->el, 1, 0); - if (!sol->context) - goto error; - - empty = tab->empty; - tab->empty = 1; - sol_add(sol, tab); - tab->empty = empty; - - isl_int_add_ui(ineq->el[0], ineq->el[0], 1); - - sol->context->op->restore(sol->context, saved); - return; -error: - sol->error = 1; -} - -/* Compute the lexicographic minimum of the set represented by the main - * tableau "tab" within the context "sol->context_tab". - * On entry the sample value of the main tableau is lexicographically - * less than or equal to this lexicographic minimum. - * Pivots are performed until a feasible point is found, which is then - * necessarily equal to the minimum, or until the tableau is found to - * be infeasible. Some pivots may need to be performed for only some - * feasible values of the context tableau. If so, the context tableau - * is split into a part where the pivot is needed and a part where it is not. - * - * Whenever we enter the main loop, the main tableau is such that no - * "obvious" pivots need to be performed on it, where "obvious" means - * that the given row can be seen to be negative without looking at - * the context tableau. In particular, for non-parametric problems, - * no pivots need to be performed on the main tableau. - * The caller of find_solutions is responsible for making this property - * hold prior to the first iteration of the loop, while restore_lexmin - * is called before every other iteration. - * - * Inside the main loop, we first examine the signs of the rows of - * the main tableau within the context of the context tableau. - * If we find a row that is always non-positive for all values of - * the parameters satisfying the context tableau and negative for at - * least one value of the parameters, we perform the appropriate pivot - * and start over. An exception is the case where no pivot can be - * performed on the row. In this case, we require that the sign of - * the row is negative for all values of the parameters (rather than just - * non-positive). This special case is handled inside row_sign, which - * will say that the row can have any sign if it determines that it can - * attain both negative and zero values. - * - * If we can't find a row that always requires a pivot, but we can find - * one or more rows that require a pivot for some values of the parameters - * (i.e., the row can attain both positive and negative signs), then we split - * the context tableau into two parts, one where we force the sign to be - * non-negative and one where we force is to be negative. - * The non-negative part is handled by a recursive call (through find_in_pos). - * Upon returning from this call, we continue with the negative part and - * perform the required pivot. - * - * If no such rows can be found, all rows are non-negative and we have - * found a (rational) feasible point. If we only wanted a rational point - * then we are done. - * Otherwise, we check if all values of the sample point of the tableau - * are integral for the variables. If so, we have found the minimal - * integral point and we are done. - * If the sample point is not integral, then we need to make a distinction - * based on whether the constant term is non-integral or the coefficients - * of the parameters. Furthermore, in order to decide how to handle - * the non-integrality, we also need to know whether the coefficients - * of the other columns in the tableau are integral. This leads - * to the following table. The first two rows do not correspond - * to a non-integral sample point and are only mentioned for completeness. - * - * constant parameters other - * - * int int int | - * int int rat | -> no problem - * - * rat int int -> fail - * - * rat int rat -> cut - * - * int rat rat | - * rat rat rat | -> parametric cut - * - * int rat int | - * rat rat int | -> split context - * - * If the parametric constant is completely integral, then there is nothing - * to be done. If the constant term is non-integral, but all the other - * coefficient are integral, then there is nothing that can be done - * and the tableau has no integral solution. - * If, on the other hand, one or more of the other columns have rational - * coefficients, but the parameter coefficients are all integral, then - * we can perform a regular (non-parametric) cut. - * Finally, if there is any parameter coefficient that is non-integral, - * then we need to involve the context tableau. There are two cases here. - * If at least one other column has a rational coefficient, then we - * can perform a parametric cut in the main tableau by adding a new - * integer division in the context tableau. - * If all other columns have integral coefficients, then we need to - * enforce that the rational combination of parameters (c + \sum a_i y_i)/m - * is always integral. We do this by introducing an integer division - * q = floor((c + \sum a_i y_i)/m) and stipulating that its argument should - * always be integral in the context tableau, i.e., m q = c + \sum a_i y_i. - * Since q is expressed in the tableau as - * c + \sum a_i y_i - m q >= 0 - * -c - \sum a_i y_i + m q + m - 1 >= 0 - * it is sufficient to add the inequality - * -c - \sum a_i y_i + m q >= 0 - * In the part of the context where this inequality does not hold, the - * main tableau is marked as being empty. - */ -static void find_solutions(struct isl_sol *sol, struct isl_tab *tab) -{ - struct isl_context *context; - int r; - - if (!tab || sol->error) - goto error; - - context = sol->context; - - if (tab->empty) - goto done; - if (context->op->is_empty(context)) - goto done; - - for (r = 0; r >= 0 && tab && !tab->empty; r = restore_lexmin(tab)) { - int flags; - int row; - enum isl_tab_row_sign sgn; - int split = -1; - int n_split = 0; - - for (row = tab->n_redundant; row < tab->n_row; ++row) { - if (!isl_tab_var_from_row(tab, row)->is_nonneg) - continue; - sgn = row_sign(tab, sol, row); - if (!sgn) - goto error; - tab->row_sign[row] = sgn; - if (sgn == isl_tab_row_any) - n_split++; - if (sgn == isl_tab_row_any && split == -1) - split = row; - if (sgn == isl_tab_row_neg) - break; - } - if (row < tab->n_row) - continue; - if (split != -1) { - struct isl_vec *ineq; - if (n_split != 1) - split = context->op->best_split(context, tab); - if (split < 0) - goto error; - ineq = get_row_parameter_ineq(tab, split); - if (!ineq) - goto error; - is_strict(ineq); - for (row = tab->n_redundant; row < tab->n_row; ++row) { - if (!isl_tab_var_from_row(tab, row)->is_nonneg) - continue; - if (tab->row_sign[row] == isl_tab_row_any) - tab->row_sign[row] = isl_tab_row_unknown; - } - tab->row_sign[split] = isl_tab_row_pos; - sol_inc_level(sol); - find_in_pos(sol, tab, ineq->el); - tab->row_sign[split] = isl_tab_row_neg; - row = split; - isl_seq_neg(ineq->el, ineq->el, ineq->size); - isl_int_sub_ui(ineq->el[0], ineq->el[0], 1); - if (!sol->error) - context->op->add_ineq(context, ineq->el, 0, 1); - isl_vec_free(ineq); - if (sol->error) - goto error; - continue; - } - if (tab->rational) - break; - row = first_non_integer_row(tab, &flags); - if (row < 0) - break; - if (ISL_FL_ISSET(flags, I_PAR)) { - if (ISL_FL_ISSET(flags, I_VAR)) { - if (isl_tab_mark_empty(tab) < 0) - goto error; - break; - } - row = add_cut(tab, row); - } else if (ISL_FL_ISSET(flags, I_VAR)) { - struct isl_vec *div; - struct isl_vec *ineq; - int d; - div = get_row_split_div(tab, row); - if (!div) - goto error; - d = context->op->get_div(context, tab, div); - isl_vec_free(div); - if (d < 0) - goto error; - ineq = ineq_for_div(context->op->peek_basic_set(context), d); - if (!ineq) - goto error; - sol_inc_level(sol); - no_sol_in_strict(sol, tab, ineq); - isl_seq_neg(ineq->el, ineq->el, ineq->size); - context->op->add_ineq(context, ineq->el, 1, 1); - isl_vec_free(ineq); - if (sol->error || !context->op->is_ok(context)) - goto error; - tab = set_row_cst_to_div(tab, row, d); - if (context->op->is_empty(context)) - break; - } else - row = add_parametric_cut(tab, row, context); - if (row < 0) - goto error; - } - if (r < 0) - goto error; -done: - sol_add(sol, tab); - isl_tab_free(tab); - return; -error: - isl_tab_free(tab); - sol->error = 1; -} - -/* Compute the lexicographic minimum of the set represented by the main - * tableau "tab" within the context "sol->context_tab". - * - * As a preprocessing step, we first transfer all the purely parametric - * equalities from the main tableau to the context tableau, i.e., - * parameters that have been pivoted to a row. - * These equalities are ignored by the main algorithm, because the - * corresponding rows may not be marked as being non-negative. - * In parts of the context where the added equality does not hold, - * the main tableau is marked as being empty. - */ -static void find_solutions_main(struct isl_sol *sol, struct isl_tab *tab) -{ - int row; - - if (!tab) - goto error; - - sol->level = 0; - - for (row = tab->n_redundant; row < tab->n_row; ++row) { - int p; - struct isl_vec *eq; - - if (tab->row_var[row] < 0) - continue; - if (tab->row_var[row] >= tab->n_param && - tab->row_var[row] < tab->n_var - tab->n_div) - continue; - if (tab->row_var[row] < tab->n_param) - p = tab->row_var[row]; - else - p = tab->row_var[row] - + tab->n_param - (tab->n_var - tab->n_div); - - eq = isl_vec_alloc(tab->mat->ctx, 1+tab->n_param+tab->n_div); - if (!eq) - goto error; - get_row_parameter_line(tab, row, eq->el); - isl_int_neg(eq->el[1 + p], tab->mat->row[row][0]); - eq = isl_vec_normalize(eq); - - sol_inc_level(sol); - no_sol_in_strict(sol, tab, eq); - - isl_seq_neg(eq->el, eq->el, eq->size); - sol_inc_level(sol); - no_sol_in_strict(sol, tab, eq); - isl_seq_neg(eq->el, eq->el, eq->size); - - sol->context->op->add_eq(sol->context, eq->el, 1, 1); - - isl_vec_free(eq); - - if (isl_tab_mark_redundant(tab, row) < 0) - goto error; - - if (sol->context->op->is_empty(sol->context)) - break; - - row = tab->n_redundant - 1; - } - - find_solutions(sol, tab); - - sol->level = 0; - sol_pop(sol); - - return; -error: - isl_tab_free(tab); - sol->error = 1; -} - -/* Check if integer division "div" of "dom" also occurs in "bmap". - * If so, return its position within the divs. - * If not, return -1. - */ -static int find_context_div(struct isl_basic_map *bmap, - struct isl_basic_set *dom, unsigned div) -{ - int i; - unsigned b_dim = isl_space_dim(bmap->dim, isl_dim_all); - unsigned d_dim = isl_space_dim(dom->dim, isl_dim_all); - - if (isl_int_is_zero(dom->div[div][0])) - return -1; - if (isl_seq_first_non_zero(dom->div[div] + 2 + d_dim, dom->n_div) != -1) - return -1; - - for (i = 0; i < bmap->n_div; ++i) { - if (isl_int_is_zero(bmap->div[i][0])) - continue; - if (isl_seq_first_non_zero(bmap->div[i] + 2 + d_dim, - (b_dim - d_dim) + bmap->n_div) != -1) - continue; - if (isl_seq_eq(bmap->div[i], dom->div[div], 2 + d_dim)) - return i; - } - return -1; -} - -/* The correspondence between the variables in the main tableau, - * the context tableau, and the input map and domain is as follows. - * The first n_param and the last n_div variables of the main tableau - * form the variables of the context tableau. - * In the basic map, these n_param variables correspond to the - * parameters and the input dimensions. In the domain, they correspond - * to the parameters and the set dimensions. - * The n_div variables correspond to the integer divisions in the domain. - * To ensure that everything lines up, we may need to copy some of the - * integer divisions of the domain to the map. These have to be placed - * in the same order as those in the context and they have to be placed - * after any other integer divisions that the map may have. - * This function performs the required reordering. - */ -static struct isl_basic_map *align_context_divs(struct isl_basic_map *bmap, - struct isl_basic_set *dom) -{ - int i; - int common = 0; - int other; - - for (i = 0; i < dom->n_div; ++i) - if (find_context_div(bmap, dom, i) != -1) - common++; - other = bmap->n_div - common; - if (dom->n_div - common > 0) { - bmap = isl_basic_map_extend_space(bmap, isl_space_copy(bmap->dim), - dom->n_div - common, 0, 0); - if (!bmap) - return NULL; - } - for (i = 0; i < dom->n_div; ++i) { - int pos = find_context_div(bmap, dom, i); - if (pos < 0) { - pos = isl_basic_map_alloc_div(bmap); - if (pos < 0) - goto error; - isl_int_set_si(bmap->div[pos][0], 0); - } - if (pos != other + i) - isl_basic_map_swap_div(bmap, pos, other + i); - } - return bmap; -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Base case of isl_tab_basic_map_partial_lexopt, after removing - * some obvious symmetries. - * - * We make sure the divs in the domain are properly ordered, - * because they will be added one by one in the given order - * during the construction of the solution map. - */ -static struct isl_sol *basic_map_partial_lexopt_base( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max, - struct isl_sol *(*init)(__isl_keep isl_basic_map *bmap, - __isl_take isl_basic_set *dom, int track_empty, int max)) -{ - struct isl_tab *tab; - struct isl_sol *sol = NULL; - struct isl_context *context; - - if (dom->n_div) { - dom = isl_basic_set_order_divs(dom); - bmap = align_context_divs(bmap, dom); - } - sol = init(bmap, dom, !!empty, max); - if (!sol) - goto error; - - context = sol->context; - if (isl_basic_set_plain_is_empty(context->op->peek_basic_set(context))) - /* nothing */; - else if (isl_basic_map_plain_is_empty(bmap)) { - if (sol->add_empty) - sol->add_empty(sol, - isl_basic_set_copy(context->op->peek_basic_set(context))); - } else { - tab = tab_for_lexmin(bmap, - context->op->peek_basic_set(context), 1, max); - tab = context->op->detect_nonnegative_parameters(context, tab); - find_solutions_main(sol, tab); - } - if (sol->error) - goto error; - - isl_basic_map_free(bmap); - return sol; -error: - sol_free(sol); - isl_basic_map_free(bmap); - return NULL; -} - -/* Base case of isl_tab_basic_map_partial_lexopt, after removing - * some obvious symmetries. - * - * We call basic_map_partial_lexopt_base and extract the results. - */ -static __isl_give isl_map *basic_map_partial_lexopt_base_map( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max) -{ - isl_map *result = NULL; - struct isl_sol *sol; - struct isl_sol_map *sol_map; - - sol = basic_map_partial_lexopt_base(bmap, dom, empty, max, - &sol_map_init); - if (!sol) - return NULL; - sol_map = (struct isl_sol_map *) sol; - - result = isl_map_copy(sol_map->map); - if (empty) - *empty = isl_set_copy(sol_map->empty); - sol_free(&sol_map->sol); - return result; -} - -/* Structure used during detection of parallel constraints. - * n_in: number of "input" variables: isl_dim_param + isl_dim_in - * n_out: number of "output" variables: isl_dim_out + isl_dim_div - * val: the coefficients of the output variables - */ -struct isl_constraint_equal_info { - isl_basic_map *bmap; - unsigned n_in; - unsigned n_out; - isl_int *val; -}; - -/* Check whether the coefficients of the output variables - * of the constraint in "entry" are equal to info->val. - */ -static int constraint_equal(const void *entry, const void *val) -{ - isl_int **row = (isl_int **)entry; - const struct isl_constraint_equal_info *info = val; - - return isl_seq_eq((*row) + 1 + info->n_in, info->val, info->n_out); -} - -/* Check whether "bmap" has a pair of constraints that have - * the same coefficients for the output variables. - * Note that the coefficients of the existentially quantified - * variables need to be zero since the existentially quantified - * of the result are usually not the same as those of the input. - * the isl_dim_out and isl_dim_div dimensions. - * If so, return 1 and return the row indices of the two constraints - * in *first and *second. - */ -static int parallel_constraints(__isl_keep isl_basic_map *bmap, - int *first, int *second) -{ - int i; - isl_ctx *ctx = isl_basic_map_get_ctx(bmap); - struct isl_hash_table *table = NULL; - struct isl_hash_table_entry *entry; - struct isl_constraint_equal_info info; - unsigned n_out; - unsigned n_div; - - ctx = isl_basic_map_get_ctx(bmap); - table = isl_hash_table_alloc(ctx, bmap->n_ineq); - if (!table) - goto error; - - info.n_in = isl_basic_map_dim(bmap, isl_dim_param) + - isl_basic_map_dim(bmap, isl_dim_in); - info.bmap = bmap; - n_out = isl_basic_map_dim(bmap, isl_dim_out); - n_div = isl_basic_map_dim(bmap, isl_dim_div); - info.n_out = n_out + n_div; - for (i = 0; i < bmap->n_ineq; ++i) { - uint32_t hash; - - info.val = bmap->ineq[i] + 1 + info.n_in; - if (isl_seq_first_non_zero(info.val, n_out) < 0) - continue; - if (isl_seq_first_non_zero(info.val + n_out, n_div) >= 0) - continue; - hash = isl_seq_get_hash(info.val, info.n_out); - entry = isl_hash_table_find(ctx, table, hash, - constraint_equal, &info, 1); - if (!entry) - goto error; - if (entry->data) - break; - entry->data = &bmap->ineq[i]; - } - - if (i < bmap->n_ineq) { - *first = ((isl_int **)entry->data) - bmap->ineq; - *second = i; - } - - isl_hash_table_free(ctx, table); - - return i < bmap->n_ineq; -error: - isl_hash_table_free(ctx, table); - return -1; -} - -/* Given a set of upper bounds in "var", add constraints to "bset" - * that make the i-th bound smallest. - * - * In particular, if there are n bounds b_i, then add the constraints - * - * b_i <= b_j for j > i - * b_i < b_j for j < i - */ -static __isl_give isl_basic_set *select_minimum(__isl_take isl_basic_set *bset, - __isl_keep isl_mat *var, int i) -{ - isl_ctx *ctx; - int j, k; - - ctx = isl_mat_get_ctx(var); - - for (j = 0; j < var->n_row; ++j) { - if (j == i) - continue; - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_combine(bset->ineq[k], ctx->one, var->row[j], - ctx->negone, var->row[i], var->n_col); - isl_int_set_si(bset->ineq[k][var->n_col], 0); - if (j < i) - isl_int_sub_ui(bset->ineq[k][0], bset->ineq[k][0], 1); - } - - bset = isl_basic_set_finalize(bset); - - return bset; -error: - isl_basic_set_free(bset); - return NULL; -} - -/* Given a set of upper bounds on the last "input" variable m, - * construct a set that assigns the minimal upper bound to m, i.e., - * construct a set that divides the space into cells where one - * of the upper bounds is smaller than all the others and assign - * this upper bound to m. - * - * In particular, if there are n bounds b_i, then the result - * consists of n basic sets, each one of the form - * - * m = b_i - * b_i <= b_j for j > i - * b_i < b_j for j < i - */ -static __isl_give isl_set *set_minimum(__isl_take isl_space *dim, - __isl_take isl_mat *var) -{ - int i, k; - isl_basic_set *bset = NULL; - isl_ctx *ctx; - isl_set *set = NULL; - - if (!dim || !var) - goto error; - - ctx = isl_space_get_ctx(dim); - set = isl_set_alloc_space(isl_space_copy(dim), - var->n_row, ISL_SET_DISJOINT); - - for (i = 0; i < var->n_row; ++i) { - bset = isl_basic_set_alloc_space(isl_space_copy(dim), 0, - 1, var->n_row - 1); - k = isl_basic_set_alloc_equality(bset); - if (k < 0) - goto error; - isl_seq_cpy(bset->eq[k], var->row[i], var->n_col); - isl_int_set_si(bset->eq[k][var->n_col], -1); - bset = select_minimum(bset, var, i); - set = isl_set_add_basic_set(set, bset); - } - - isl_space_free(dim); - isl_mat_free(var); - return set; -error: - isl_basic_set_free(bset); - isl_set_free(set); - isl_space_free(dim); - isl_mat_free(var); - return NULL; -} - -/* Given that the last input variable of "bmap" represents the minimum - * of the bounds in "cst", check whether we need to split the domain - * based on which bound attains the minimum. - * - * A split is needed when the minimum appears in an integer division - * or in an equality. Otherwise, it is only needed if it appears in - * an upper bound that is different from the upper bounds on which it - * is defined. - */ -static int need_split_basic_map(__isl_keep isl_basic_map *bmap, - __isl_keep isl_mat *cst) -{ - int i, j; - unsigned total; - unsigned pos; - - pos = cst->n_col - 1; - total = isl_basic_map_dim(bmap, isl_dim_all); - - for (i = 0; i < bmap->n_div; ++i) - if (!isl_int_is_zero(bmap->div[i][2 + pos])) - return 1; - - for (i = 0; i < bmap->n_eq; ++i) - if (!isl_int_is_zero(bmap->eq[i][1 + pos])) - return 1; - - for (i = 0; i < bmap->n_ineq; ++i) { - if (isl_int_is_nonneg(bmap->ineq[i][1 + pos])) - continue; - if (!isl_int_is_negone(bmap->ineq[i][1 + pos])) - return 1; - if (isl_seq_first_non_zero(bmap->ineq[i] + 1 + pos + 1, - total - pos - 1) >= 0) - return 1; - - for (j = 0; j < cst->n_row; ++j) - if (isl_seq_eq(bmap->ineq[i], cst->row[j], cst->n_col)) - break; - if (j >= cst->n_row) - return 1; - } - - return 0; -} - -/* Given that the last set variable of "bset" represents the minimum - * of the bounds in "cst", check whether we need to split the domain - * based on which bound attains the minimum. - * - * We simply call need_split_basic_map here. This is safe because - * the position of the minimum is computed from "cst" and not - * from "bmap". - */ -static int need_split_basic_set(__isl_keep isl_basic_set *bset, - __isl_keep isl_mat *cst) -{ - return need_split_basic_map((isl_basic_map *)bset, cst); -} - -/* Given that the last set variable of "set" represents the minimum - * of the bounds in "cst", check whether we need to split the domain - * based on which bound attains the minimum. - */ -static int need_split_set(__isl_keep isl_set *set, __isl_keep isl_mat *cst) -{ - int i; - - for (i = 0; i < set->n; ++i) - if (need_split_basic_set(set->p[i], cst)) - return 1; - - return 0; -} - -/* Given a set of which the last set variable is the minimum - * of the bounds in "cst", split each basic set in the set - * in pieces where one of the bounds is (strictly) smaller than the others. - * This subdivision is given in "min_expr". - * The variable is subsequently projected out. - * - * We only do the split when it is needed. - * For example if the last input variable m = min(a,b) and the only - * constraints in the given basic set are lower bounds on m, - * i.e., l <= m = min(a,b), then we can simply project out m - * to obtain l <= a and l <= b, without having to split on whether - * m is equal to a or b. - */ -static __isl_give isl_set *split(__isl_take isl_set *empty, - __isl_take isl_set *min_expr, __isl_take isl_mat *cst) -{ - int n_in; - int i; - isl_space *dim; - isl_set *res; - - if (!empty || !min_expr || !cst) - goto error; - - n_in = isl_set_dim(empty, isl_dim_set); - dim = isl_set_get_space(empty); - dim = isl_space_drop_dims(dim, isl_dim_set, n_in - 1, 1); - res = isl_set_empty(dim); - - for (i = 0; i < empty->n; ++i) { - isl_set *set; - - set = isl_set_from_basic_set(isl_basic_set_copy(empty->p[i])); - if (need_split_basic_set(empty->p[i], cst)) - set = isl_set_intersect(set, isl_set_copy(min_expr)); - set = isl_set_remove_dims(set, isl_dim_set, n_in - 1, 1); - - res = isl_set_union_disjoint(res, set); - } - - isl_set_free(empty); - isl_set_free(min_expr); - isl_mat_free(cst); - return res; -error: - isl_set_free(empty); - isl_set_free(min_expr); - isl_mat_free(cst); - return NULL; -} - -/* Given a map of which the last input variable is the minimum - * of the bounds in "cst", split each basic set in the set - * in pieces where one of the bounds is (strictly) smaller than the others. - * This subdivision is given in "min_expr". - * The variable is subsequently projected out. - * - * The implementation is essentially the same as that of "split". - */ -static __isl_give isl_map *split_domain(__isl_take isl_map *opt, - __isl_take isl_set *min_expr, __isl_take isl_mat *cst) -{ - int n_in; - int i; - isl_space *dim; - isl_map *res; - - if (!opt || !min_expr || !cst) - goto error; - - n_in = isl_map_dim(opt, isl_dim_in); - dim = isl_map_get_space(opt); - dim = isl_space_drop_dims(dim, isl_dim_in, n_in - 1, 1); - res = isl_map_empty(dim); - - for (i = 0; i < opt->n; ++i) { - isl_map *map; - - map = isl_map_from_basic_map(isl_basic_map_copy(opt->p[i])); - if (need_split_basic_map(opt->p[i], cst)) - map = isl_map_intersect_domain(map, - isl_set_copy(min_expr)); - map = isl_map_remove_dims(map, isl_dim_in, n_in - 1, 1); - - res = isl_map_union_disjoint(res, map); - } - - isl_map_free(opt); - isl_set_free(min_expr); - isl_mat_free(cst); - return res; -error: - isl_map_free(opt); - isl_set_free(min_expr); - isl_mat_free(cst); - return NULL; -} - -static __isl_give isl_map *basic_map_partial_lexopt( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max); - -union isl_lex_res { - void *p; - isl_map *map; - isl_pw_multi_aff *pma; -}; - -/* This function is called from basic_map_partial_lexopt_symm. - * The last variable of "bmap" and "dom" corresponds to the minimum - * of the bounds in "cst". "map_space" is the space of the original - * input relation (of basic_map_partial_lexopt_symm) and "set_space" - * is the space of the original domain. - * - * We recursively call basic_map_partial_lexopt and then plug in - * the definition of the minimum in the result. - */ -static __isl_give union isl_lex_res basic_map_partial_lexopt_symm_map_core( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max, __isl_take isl_mat *cst, - __isl_take isl_space *map_space, __isl_take isl_space *set_space) -{ - isl_map *opt; - isl_set *min_expr; - union isl_lex_res res; - - min_expr = set_minimum(isl_basic_set_get_space(dom), isl_mat_copy(cst)); - - opt = basic_map_partial_lexopt(bmap, dom, empty, max); - - if (empty) { - *empty = split(*empty, - isl_set_copy(min_expr), isl_mat_copy(cst)); - *empty = isl_set_reset_space(*empty, set_space); - } - - opt = split_domain(opt, min_expr, cst); - opt = isl_map_reset_space(opt, map_space); - - res.map = opt; - return res; -} - -/* Given a basic map with at least two parallel constraints (as found - * by the function parallel_constraints), first look for more constraints - * parallel to the two constraint and replace the found list of parallel - * constraints by a single constraint with as "input" part the minimum - * of the input parts of the list of constraints. Then, recursively call - * basic_map_partial_lexopt (possibly finding more parallel constraints) - * and plug in the definition of the minimum in the result. - * - * More specifically, given a set of constraints - * - * a x + b_i(p) >= 0 - * - * Replace this set by a single constraint - * - * a x + u >= 0 - * - * with u a new parameter with constraints - * - * u <= b_i(p) - * - * Any solution to the new system is also a solution for the original system - * since - * - * a x >= -u >= -b_i(p) - * - * Moreover, m = min_i(b_i(p)) satisfies the constraints on u and can - * therefore be plugged into the solution. - */ -static union isl_lex_res basic_map_partial_lexopt_symm( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max, int first, int second, - __isl_give union isl_lex_res (*core)(__isl_take isl_basic_map *bmap, - __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, - int max, __isl_take isl_mat *cst, - __isl_take isl_space *map_space, - __isl_take isl_space *set_space)) -{ - int i, n, k; - int *list = NULL; - unsigned n_in, n_out, n_div; - isl_ctx *ctx; - isl_vec *var = NULL; - isl_mat *cst = NULL; - isl_space *map_space, *set_space; - union isl_lex_res res; - - map_space = isl_basic_map_get_space(bmap); - set_space = empty ? isl_basic_set_get_space(dom) : NULL; - - n_in = isl_basic_map_dim(bmap, isl_dim_param) + - isl_basic_map_dim(bmap, isl_dim_in); - n_out = isl_basic_map_dim(bmap, isl_dim_all) - n_in; - - ctx = isl_basic_map_get_ctx(bmap); - list = isl_alloc_array(ctx, int, bmap->n_ineq); - var = isl_vec_alloc(ctx, n_out); - if (!list || !var) - goto error; - - list[0] = first; - list[1] = second; - isl_seq_cpy(var->el, bmap->ineq[first] + 1 + n_in, n_out); - for (i = second + 1, n = 2; i < bmap->n_ineq; ++i) { - if (isl_seq_eq(var->el, bmap->ineq[i] + 1 + n_in, n_out)) - list[n++] = i; - } - - cst = isl_mat_alloc(ctx, n, 1 + n_in); - if (!cst) - goto error; - - for (i = 0; i < n; ++i) - isl_seq_cpy(cst->row[i], bmap->ineq[list[i]], 1 + n_in); - - bmap = isl_basic_map_cow(bmap); - if (!bmap) - goto error; - for (i = n - 1; i >= 0; --i) - if (isl_basic_map_drop_inequality(bmap, list[i]) < 0) - goto error; - - bmap = isl_basic_map_add(bmap, isl_dim_in, 1); - bmap = isl_basic_map_extend_constraints(bmap, 0, 1); - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->ineq[k], 1 + n_in); - isl_int_set_si(bmap->ineq[k][1 + n_in], 1); - isl_seq_cpy(bmap->ineq[k] + 1 + n_in + 1, var->el, n_out); - bmap = isl_basic_map_finalize(bmap); - - n_div = isl_basic_set_dim(dom, isl_dim_div); - dom = isl_basic_set_add(dom, isl_dim_set, 1); - dom = isl_basic_set_extend_constraints(dom, 0, n); - for (i = 0; i < n; ++i) { - k = isl_basic_set_alloc_inequality(dom); - if (k < 0) - goto error; - isl_seq_cpy(dom->ineq[k], cst->row[i], 1 + n_in); - isl_int_set_si(dom->ineq[k][1 + n_in], -1); - isl_seq_clr(dom->ineq[k] + 1 + n_in + 1, n_div); - } - - isl_vec_free(var); - free(list); - - return core(bmap, dom, empty, max, cst, map_space, set_space); -error: - isl_space_free(map_space); - isl_space_free(set_space); - isl_mat_free(cst); - isl_vec_free(var); - free(list); - isl_basic_set_free(dom); - isl_basic_map_free(bmap); - res.p = NULL; - return res; -} - -static __isl_give isl_map *basic_map_partial_lexopt_symm_map( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max, int first, int second) -{ - return basic_map_partial_lexopt_symm(bmap, dom, empty, max, - first, second, &basic_map_partial_lexopt_symm_map_core).map; -} - -/* Recursive part of isl_tab_basic_map_partial_lexopt, after detecting - * equalities and removing redundant constraints. - * - * We first check if there are any parallel constraints (left). - * If not, we are in the base case. - * If there are parallel constraints, we replace them by a single - * constraint in basic_map_partial_lexopt_symm and then call - * this function recursively to look for more parallel constraints. - */ -static __isl_give isl_map *basic_map_partial_lexopt( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max) -{ - int par = 0; - int first, second; - - if (!bmap) - goto error; - - if (bmap->ctx->opt->pip_symmetry) - par = parallel_constraints(bmap, &first, &second); - if (par < 0) - goto error; - if (!par) - return basic_map_partial_lexopt_base_map(bmap, dom, empty, max); - - return basic_map_partial_lexopt_symm_map(bmap, dom, empty, max, - first, second); -error: - isl_basic_set_free(dom); - isl_basic_map_free(bmap); - return NULL; -} - -/* Compute the lexicographic minimum (or maximum if "max" is set) - * of "bmap" over the domain "dom" and return the result as a map. - * If "empty" is not NULL, then *empty is assigned a set that - * contains those parts of the domain where there is no solution. - * If "bmap" is marked as rational (ISL_BASIC_MAP_RATIONAL), - * then we compute the rational optimum. Otherwise, we compute - * the integral optimum. - * - * We perform some preprocessing. As the PILP solver does not - * handle implicit equalities very well, we first make sure all - * the equalities are explicitly available. - * - * We also add context constraints to the basic map and remove - * redundant constraints. This is only needed because of the - * way we handle simple symmetries. In particular, we currently look - * for symmetries on the constraints, before we set up the main tableau. - * It is then no good to look for symmetries on possibly redundant constraints. - */ -struct isl_map *isl_tab_basic_map_partial_lexopt( - struct isl_basic_map *bmap, struct isl_basic_set *dom, - struct isl_set **empty, int max) -{ - if (empty) - *empty = NULL; - if (!bmap || !dom) - goto error; - - isl_assert(bmap->ctx, - isl_basic_map_compatible_domain(bmap, dom), goto error); - - if (isl_basic_set_dim(dom, isl_dim_all) == 0) - return basic_map_partial_lexopt(bmap, dom, empty, max); - - bmap = isl_basic_map_intersect_domain(bmap, isl_basic_set_copy(dom)); - bmap = isl_basic_map_detect_equalities(bmap); - bmap = isl_basic_map_remove_redundancies(bmap); - - return basic_map_partial_lexopt(bmap, dom, empty, max); -error: - isl_basic_set_free(dom); - isl_basic_map_free(bmap); - return NULL; -} - -struct isl_sol_for { - struct isl_sol sol; - int (*fn)(__isl_take isl_basic_set *dom, - __isl_take isl_aff_list *list, void *user); - void *user; -}; - -static void sol_for_free(struct isl_sol_for *sol_for) -{ - if (sol_for->sol.context) - sol_for->sol.context->op->free(sol_for->sol.context); - free(sol_for); -} - -static void sol_for_free_wrap(struct isl_sol *sol) -{ - sol_for_free((struct isl_sol_for *)sol); -} - -/* Add the solution identified by the tableau and the context tableau. - * - * See documentation of sol_add for more details. - * - * Instead of constructing a basic map, this function calls a user - * defined function with the current context as a basic set and - * a list of affine expressions representing the relation between - * the input and output. The space over which the affine expressions - * are defined is the same as that of the domain. The number of - * affine expressions in the list is equal to the number of output variables. - */ -static void sol_for_add(struct isl_sol_for *sol, - struct isl_basic_set *dom, struct isl_mat *M) -{ - int i; - isl_ctx *ctx; - isl_local_space *ls; - isl_aff *aff; - isl_aff_list *list; - - if (sol->sol.error || !dom || !M) - goto error; - - ctx = isl_basic_set_get_ctx(dom); - ls = isl_basic_set_get_local_space(dom); - list = isl_aff_list_alloc(ctx, M->n_row - 1); - for (i = 1; i < M->n_row; ++i) { - aff = isl_aff_alloc(isl_local_space_copy(ls)); - if (aff) { - isl_int_set(aff->v->el[0], M->row[0][0]); - isl_seq_cpy(aff->v->el + 1, M->row[i], M->n_col); - } - list = isl_aff_list_add(list, aff); - } - isl_local_space_free(ls); - - dom = isl_basic_set_finalize(dom); - - if (sol->fn(isl_basic_set_copy(dom), list, sol->user) < 0) - goto error; - - isl_basic_set_free(dom); - isl_mat_free(M); - return; -error: - isl_basic_set_free(dom); - isl_mat_free(M); - sol->sol.error = 1; -} - -static void sol_for_add_wrap(struct isl_sol *sol, - struct isl_basic_set *dom, struct isl_mat *M) -{ - sol_for_add((struct isl_sol_for *)sol, dom, M); -} - -static struct isl_sol_for *sol_for_init(struct isl_basic_map *bmap, int max, - int (*fn)(__isl_take isl_basic_set *dom, __isl_take isl_aff_list *list, - void *user), - void *user) -{ - struct isl_sol_for *sol_for = NULL; - isl_space *dom_dim; - struct isl_basic_set *dom = NULL; - - sol_for = isl_calloc_type(bmap->ctx, struct isl_sol_for); - if (!sol_for) - goto error; - - dom_dim = isl_space_domain(isl_space_copy(bmap->dim)); - dom = isl_basic_set_universe(dom_dim); - - sol_for->sol.rational = ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL); - sol_for->sol.dec_level.callback.run = &sol_dec_level_wrap; - sol_for->sol.dec_level.sol = &sol_for->sol; - sol_for->fn = fn; - sol_for->user = user; - sol_for->sol.max = max; - sol_for->sol.n_out = isl_basic_map_dim(bmap, isl_dim_out); - sol_for->sol.add = &sol_for_add_wrap; - sol_for->sol.add_empty = NULL; - sol_for->sol.free = &sol_for_free_wrap; - - sol_for->sol.context = isl_context_alloc(dom); - if (!sol_for->sol.context) - goto error; - - isl_basic_set_free(dom); - return sol_for; -error: - isl_basic_set_free(dom); - sol_for_free(sol_for); - return NULL; -} - -static void sol_for_find_solutions(struct isl_sol_for *sol_for, - struct isl_tab *tab) -{ - find_solutions_main(&sol_for->sol, tab); -} - -int isl_basic_map_foreach_lexopt(__isl_keep isl_basic_map *bmap, int max, - int (*fn)(__isl_take isl_basic_set *dom, __isl_take isl_aff_list *list, - void *user), - void *user) -{ - struct isl_sol_for *sol_for = NULL; - - bmap = isl_basic_map_copy(bmap); - if (!bmap) - return -1; - - bmap = isl_basic_map_detect_equalities(bmap); - sol_for = sol_for_init(bmap, max, fn, user); - - if (isl_basic_map_plain_is_empty(bmap)) - /* nothing */; - else { - struct isl_tab *tab; - struct isl_context *context = sol_for->sol.context; - tab = tab_for_lexmin(bmap, - context->op->peek_basic_set(context), 1, max); - tab = context->op->detect_nonnegative_parameters(context, tab); - sol_for_find_solutions(sol_for, tab); - if (sol_for->sol.error) - goto error; - } - - sol_free(&sol_for->sol); - isl_basic_map_free(bmap); - return 0; -error: - sol_free(&sol_for->sol); - isl_basic_map_free(bmap); - return -1; -} - -int isl_basic_set_foreach_lexopt(__isl_keep isl_basic_set *bset, int max, - int (*fn)(__isl_take isl_basic_set *dom, __isl_take isl_aff_list *list, - void *user), - void *user) -{ - return isl_basic_map_foreach_lexopt(bset, max, fn, user); -} - -/* Check if the given sequence of len variables starting at pos - * represents a trivial (i.e., zero) solution. - * The variables are assumed to be non-negative and to come in pairs, - * with each pair representing a variable of unrestricted sign. - * The solution is trivial if each such pair in the sequence consists - * of two identical values, meaning that the variable being represented - * has value zero. - */ -static int region_is_trivial(struct isl_tab *tab, int pos, int len) -{ - int i; - - if (len == 0) - return 0; - - for (i = 0; i < len; i += 2) { - int neg_row; - int pos_row; - - neg_row = tab->var[pos + i].is_row ? - tab->var[pos + i].index : -1; - pos_row = tab->var[pos + i + 1].is_row ? - tab->var[pos + i + 1].index : -1; - - if ((neg_row < 0 || - isl_int_is_zero(tab->mat->row[neg_row][1])) && - (pos_row < 0 || - isl_int_is_zero(tab->mat->row[pos_row][1]))) - continue; - - if (neg_row < 0 || pos_row < 0) - return 0; - if (isl_int_ne(tab->mat->row[neg_row][1], - tab->mat->row[pos_row][1])) - return 0; - } - - return 1; -} - -/* Return the index of the first trivial region or -1 if all regions - * are non-trivial. - */ -static int first_trivial_region(struct isl_tab *tab, - int n_region, struct isl_region *region) -{ - int i; - - for (i = 0; i < n_region; ++i) { - if (region_is_trivial(tab, region[i].pos, region[i].len)) - return i; - } - - return -1; -} - -/* Check if the solution is optimal, i.e., whether the first - * n_op entries are zero. - */ -static int is_optimal(__isl_keep isl_vec *sol, int n_op) -{ - int i; - - for (i = 0; i < n_op; ++i) - if (!isl_int_is_zero(sol->el[1 + i])) - return 0; - return 1; -} - -/* Add constraints to "tab" that ensure that any solution is significantly - * better that that represented by "sol". That is, find the first - * relevant (within first n_op) non-zero coefficient and force it (along - * with all previous coefficients) to be zero. - * If the solution is already optimal (all relevant coefficients are zero), - * then just mark the table as empty. - */ -static int force_better_solution(struct isl_tab *tab, - __isl_keep isl_vec *sol, int n_op) -{ - int i; - isl_ctx *ctx; - isl_vec *v = NULL; - - if (!sol) - return -1; - - for (i = 0; i < n_op; ++i) - if (!isl_int_is_zero(sol->el[1 + i])) - break; - - if (i == n_op) { - if (isl_tab_mark_empty(tab) < 0) - return -1; - return 0; - } - - ctx = isl_vec_get_ctx(sol); - v = isl_vec_alloc(ctx, 1 + tab->n_var); - if (!v) - return -1; - - for (; i >= 0; --i) { - v = isl_vec_clr(v); - isl_int_set_si(v->el[1 + i], -1); - if (add_lexmin_eq(tab, v->el) < 0) - goto error; - } - - isl_vec_free(v); - return 0; -error: - isl_vec_free(v); - return -1; -} - -struct isl_trivial { - int update; - int region; - int side; - struct isl_tab_undo *snap; -}; - -/* Return the lexicographically smallest non-trivial solution of the - * given ILP problem. - * - * All variables are assumed to be non-negative. - * - * n_op is the number of initial coordinates to optimize. - * That is, once a solution has been found, we will only continue looking - * for solution that result in significantly better values for those - * initial coordinates. That is, we only continue looking for solutions - * that increase the number of initial zeros in this sequence. - * - * A solution is non-trivial, if it is non-trivial on each of the - * specified regions. Each region represents a sequence of pairs - * of variables. A solution is non-trivial on such a region if - * at least one of these pairs consists of different values, i.e., - * such that the non-negative variable represented by the pair is non-zero. - * - * Whenever a conflict is encountered, all constraints involved are - * reported to the caller through a call to "conflict". - * - * We perform a simple branch-and-bound backtracking search. - * Each level in the search represents initially trivial region that is forced - * to be non-trivial. - * At each level we consider n cases, where n is the length of the region. - * In terms of the n/2 variables of unrestricted signs being encoded by - * the region, we consider the cases - * x_0 >= 1 - * x_0 <= -1 - * x_0 = 0 and x_1 >= 1 - * x_0 = 0 and x_1 <= -1 - * x_0 = 0 and x_1 = 0 and x_2 >= 1 - * x_0 = 0 and x_1 = 0 and x_2 <= -1 - * ... - * The cases are considered in this order, assuming that each pair - * x_i_a x_i_b represents the value x_i_b - x_i_a. - * That is, x_0 >= 1 is enforced by adding the constraint - * x_0_b - x_0_a >= 1 - */ -__isl_give isl_vec *isl_tab_basic_set_non_trivial_lexmin( - __isl_take isl_basic_set *bset, int n_op, int n_region, - struct isl_region *region, - int (*conflict)(int con, void *user), void *user) -{ - int i, j; - int r; - isl_ctx *ctx = isl_basic_set_get_ctx(bset); - isl_vec *v = NULL; - isl_vec *sol = isl_vec_alloc(ctx, 0); - struct isl_tab *tab; - struct isl_trivial *triv = NULL; - int level, init; - - tab = tab_for_lexmin(bset, NULL, 0, 0); - if (!tab) - goto error; - tab->conflict = conflict; - tab->conflict_user = user; - - v = isl_vec_alloc(ctx, 1 + tab->n_var); - triv = isl_calloc_array(ctx, struct isl_trivial, n_region); - if (!v || !triv) - goto error; - - level = 0; - init = 1; - - while (level >= 0) { - int side, base; - - if (init) { - tab = cut_to_integer_lexmin(tab); - if (!tab) - goto error; - if (tab->empty) - goto backtrack; - r = first_trivial_region(tab, n_region, region); - if (r < 0) { - for (i = 0; i < level; ++i) - triv[i].update = 1; - isl_vec_free(sol); - sol = isl_tab_get_sample_value(tab); - if (!sol) - goto error; - if (is_optimal(sol, n_op)) - break; - goto backtrack; - } - if (level >= n_region) - isl_die(ctx, isl_error_internal, - "nesting level too deep", goto error); - if (isl_tab_extend_cons(tab, - 2 * region[r].len + 2 * n_op) < 0) - goto error; - triv[level].region = r; - triv[level].side = 0; - } - - r = triv[level].region; - side = triv[level].side; - base = 2 * (side/2); - - if (side >= region[r].len) { -backtrack: - level--; - init = 0; - if (level >= 0) - if (isl_tab_rollback(tab, triv[level].snap) < 0) - goto error; - continue; - } - - if (triv[level].update) { - if (force_better_solution(tab, sol, n_op) < 0) - goto error; - triv[level].update = 0; - } - - if (side == base && base >= 2) { - for (j = base - 2; j < base; ++j) { - v = isl_vec_clr(v); - isl_int_set_si(v->el[1 + region[r].pos + j], 1); - if (add_lexmin_eq(tab, v->el) < 0) - goto error; - } - } - - triv[level].snap = isl_tab_snap(tab); - if (isl_tab_push_basis(tab) < 0) - goto error; - - v = isl_vec_clr(v); - isl_int_set_si(v->el[0], -1); - isl_int_set_si(v->el[1 + region[r].pos + side], -1); - isl_int_set_si(v->el[1 + region[r].pos + (side ^ 1)], 1); - tab = add_lexmin_ineq(tab, v->el); - - triv[level].side++; - level++; - init = 1; - } - - free(triv); - isl_vec_free(v); - isl_tab_free(tab); - isl_basic_set_free(bset); - - return sol; -error: - free(triv); - isl_vec_free(v); - isl_tab_free(tab); - isl_basic_set_free(bset); - isl_vec_free(sol); - return NULL; -} - -/* Return the lexicographically smallest rational point in "bset", - * assuming that all variables are non-negative. - * If "bset" is empty, then return a zero-length vector. - */ -__isl_give isl_vec *isl_tab_basic_set_non_neg_lexmin( - __isl_take isl_basic_set *bset) -{ - struct isl_tab *tab; - isl_ctx *ctx = isl_basic_set_get_ctx(bset); - isl_vec *sol; - - tab = tab_for_lexmin(bset, NULL, 0, 0); - if (!tab) - goto error; - if (tab->empty) - sol = isl_vec_alloc(ctx, 0); - else - sol = isl_tab_get_sample_value(tab); - isl_tab_free(tab); - isl_basic_set_free(bset); - return sol; -error: - isl_tab_free(tab); - isl_basic_set_free(bset); - return NULL; -} - -struct isl_sol_pma { - struct isl_sol sol; - isl_pw_multi_aff *pma; - isl_set *empty; -}; - -static void sol_pma_free(struct isl_sol_pma *sol_pma) -{ - if (!sol_pma) - return; - if (sol_pma->sol.context) - sol_pma->sol.context->op->free(sol_pma->sol.context); - isl_pw_multi_aff_free(sol_pma->pma); - isl_set_free(sol_pma->empty); - free(sol_pma); -} - -/* This function is called for parts of the context where there is - * no solution, with "bset" corresponding to the context tableau. - * Simply add the basic set to the set "empty". - */ -static void sol_pma_add_empty(struct isl_sol_pma *sol, - __isl_take isl_basic_set *bset) -{ - if (!bset) - goto error; - isl_assert(bset->ctx, sol->empty, goto error); - - sol->empty = isl_set_grow(sol->empty, 1); - bset = isl_basic_set_simplify(bset); - bset = isl_basic_set_finalize(bset); - sol->empty = isl_set_add_basic_set(sol->empty, bset); - if (!sol->empty) - sol->sol.error = 1; - return; -error: - isl_basic_set_free(bset); - sol->sol.error = 1; -} - -/* Given a basic map "dom" that represents the context and an affine - * matrix "M" that maps the dimensions of the context to the - * output variables, construct an isl_pw_multi_aff with a single - * cell corresponding to "dom" and affine expressions copied from "M". - */ -static void sol_pma_add(struct isl_sol_pma *sol, - __isl_take isl_basic_set *dom, __isl_take isl_mat *M) -{ - int i; - isl_local_space *ls; - isl_aff *aff; - isl_multi_aff *maff; - isl_pw_multi_aff *pma; - - maff = isl_multi_aff_alloc(isl_pw_multi_aff_get_space(sol->pma)); - ls = isl_basic_set_get_local_space(dom); - for (i = 1; i < M->n_row; ++i) { - aff = isl_aff_alloc(isl_local_space_copy(ls)); - if (aff) { - isl_int_set(aff->v->el[0], M->row[0][0]); - isl_seq_cpy(aff->v->el + 1, M->row[i], M->n_col); - } - aff = isl_aff_normalize(aff); - maff = isl_multi_aff_set_aff(maff, i - 1, aff); - } - isl_local_space_free(ls); - isl_mat_free(M); - dom = isl_basic_set_simplify(dom); - dom = isl_basic_set_finalize(dom); - pma = isl_pw_multi_aff_alloc(isl_set_from_basic_set(dom), maff); - sol->pma = isl_pw_multi_aff_add_disjoint(sol->pma, pma); - if (!sol->pma) - sol->sol.error = 1; -} - -static void sol_pma_free_wrap(struct isl_sol *sol) -{ - sol_pma_free((struct isl_sol_pma *)sol); -} - -static void sol_pma_add_empty_wrap(struct isl_sol *sol, - __isl_take isl_basic_set *bset) -{ - sol_pma_add_empty((struct isl_sol_pma *)sol, bset); -} - -static void sol_pma_add_wrap(struct isl_sol *sol, - __isl_take isl_basic_set *dom, __isl_take isl_mat *M) -{ - sol_pma_add((struct isl_sol_pma *)sol, dom, M); -} - -/* Construct an isl_sol_pma structure for accumulating the solution. - * If track_empty is set, then we also keep track of the parts - * of the context where there is no solution. - * If max is set, then we are solving a maximization, rather than - * a minimization problem, which means that the variables in the - * tableau have value "M - x" rather than "M + x". - */ -static struct isl_sol *sol_pma_init(__isl_keep isl_basic_map *bmap, - __isl_take isl_basic_set *dom, int track_empty, int max) -{ - struct isl_sol_pma *sol_pma = NULL; - - if (!bmap) - goto error; - - sol_pma = isl_calloc_type(bmap->ctx, struct isl_sol_pma); - if (!sol_pma) - goto error; - - sol_pma->sol.rational = ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL); - sol_pma->sol.dec_level.callback.run = &sol_dec_level_wrap; - sol_pma->sol.dec_level.sol = &sol_pma->sol; - sol_pma->sol.max = max; - sol_pma->sol.n_out = isl_basic_map_dim(bmap, isl_dim_out); - sol_pma->sol.add = &sol_pma_add_wrap; - sol_pma->sol.add_empty = track_empty ? &sol_pma_add_empty_wrap : NULL; - sol_pma->sol.free = &sol_pma_free_wrap; - sol_pma->pma = isl_pw_multi_aff_empty(isl_basic_map_get_space(bmap)); - if (!sol_pma->pma) - goto error; - - sol_pma->sol.context = isl_context_alloc(dom); - if (!sol_pma->sol.context) - goto error; - - if (track_empty) { - sol_pma->empty = isl_set_alloc_space(isl_basic_set_get_space(dom), - 1, ISL_SET_DISJOINT); - if (!sol_pma->empty) - goto error; - } - - isl_basic_set_free(dom); - return &sol_pma->sol; -error: - isl_basic_set_free(dom); - sol_pma_free(sol_pma); - return NULL; -} - -/* Base case of isl_tab_basic_map_partial_lexopt, after removing - * some obvious symmetries. - * - * We call basic_map_partial_lexopt_base and extract the results. - */ -static __isl_give isl_pw_multi_aff *basic_map_partial_lexopt_base_pma( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max) -{ - isl_pw_multi_aff *result = NULL; - struct isl_sol *sol; - struct isl_sol_pma *sol_pma; - - sol = basic_map_partial_lexopt_base(bmap, dom, empty, max, - &sol_pma_init); - if (!sol) - return NULL; - sol_pma = (struct isl_sol_pma *) sol; - - result = isl_pw_multi_aff_copy(sol_pma->pma); - if (empty) - *empty = isl_set_copy(sol_pma->empty); - sol_free(&sol_pma->sol); - return result; -} - -/* Given that the last input variable of "maff" represents the minimum - * of some bounds, check whether we need to plug in the expression - * of the minimum. - * - * In particular, check if the last input variable appears in any - * of the expressions in "maff". - */ -static int need_substitution(__isl_keep isl_multi_aff *maff) -{ - int i; - unsigned pos; - - pos = isl_multi_aff_dim(maff, isl_dim_in) - 1; - - for (i = 0; i < maff->n; ++i) - if (isl_aff_involves_dims(maff->p[i], isl_dim_in, pos, 1)) - return 1; - - return 0; -} - -/* Given a set of upper bounds on the last "input" variable m, - * construct a piecewise affine expression that selects - * the minimal upper bound to m, i.e., - * divide the space into cells where one - * of the upper bounds is smaller than all the others and select - * this upper bound on that cell. - * - * In particular, if there are n bounds b_i, then the result - * consists of n cell, each one of the form - * - * b_i <= b_j for j > i - * b_i < b_j for j < i - * - * The affine expression on this cell is - * - * b_i - */ -static __isl_give isl_pw_aff *set_minimum_pa(__isl_take isl_space *space, - __isl_take isl_mat *var) -{ - int i; - isl_aff *aff = NULL; - isl_basic_set *bset = NULL; - isl_ctx *ctx; - isl_pw_aff *paff = NULL; - isl_space *pw_space; - isl_local_space *ls = NULL; - - if (!space || !var) - goto error; - - ctx = isl_space_get_ctx(space); - ls = isl_local_space_from_space(isl_space_copy(space)); - pw_space = isl_space_copy(space); - pw_space = isl_space_from_domain(pw_space); - pw_space = isl_space_add_dims(pw_space, isl_dim_out, 1); - paff = isl_pw_aff_alloc_size(pw_space, var->n_row); - - for (i = 0; i < var->n_row; ++i) { - isl_pw_aff *paff_i; - - aff = isl_aff_alloc(isl_local_space_copy(ls)); - bset = isl_basic_set_alloc_space(isl_space_copy(space), 0, - 0, var->n_row - 1); - if (!aff || !bset) - goto error; - isl_int_set_si(aff->v->el[0], 1); - isl_seq_cpy(aff->v->el + 1, var->row[i], var->n_col); - isl_int_set_si(aff->v->el[1 + var->n_col], 0); - bset = select_minimum(bset, var, i); - paff_i = isl_pw_aff_alloc(isl_set_from_basic_set(bset), aff); - paff = isl_pw_aff_add_disjoint(paff, paff_i); - } - - isl_local_space_free(ls); - isl_space_free(space); - isl_mat_free(var); - return paff; -error: - isl_aff_free(aff); - isl_basic_set_free(bset); - isl_pw_aff_free(paff); - isl_local_space_free(ls); - isl_space_free(space); - isl_mat_free(var); - return NULL; -} - -/* Given a piecewise multi-affine expression of which the last input variable - * is the minimum of the bounds in "cst", plug in the value of the minimum. - * This minimum expression is given in "min_expr_pa". - * The set "min_expr" contains the same information, but in the form of a set. - * The variable is subsequently projected out. - * - * The implementation is similar to those of "split" and "split_domain". - * If the variable appears in a given expression, then minimum expression - * is plugged in. Otherwise, if the variable appears in the constraints - * and a split is required, then the domain is split. Otherwise, no split - * is performed. - */ -static __isl_give isl_pw_multi_aff *split_domain_pma( - __isl_take isl_pw_multi_aff *opt, __isl_take isl_pw_aff *min_expr_pa, - __isl_take isl_set *min_expr, __isl_take isl_mat *cst) -{ - int n_in; - int i; - isl_space *space; - isl_pw_multi_aff *res; - - if (!opt || !min_expr || !cst) - goto error; - - n_in = isl_pw_multi_aff_dim(opt, isl_dim_in); - space = isl_pw_multi_aff_get_space(opt); - space = isl_space_drop_dims(space, isl_dim_in, n_in - 1, 1); - res = isl_pw_multi_aff_empty(space); - - for (i = 0; i < opt->n; ++i) { - isl_pw_multi_aff *pma; - - pma = isl_pw_multi_aff_alloc(isl_set_copy(opt->p[i].set), - isl_multi_aff_copy(opt->p[i].maff)); - if (need_substitution(opt->p[i].maff)) - pma = isl_pw_multi_aff_substitute(pma, - isl_dim_in, n_in - 1, min_expr_pa); - else if (need_split_set(opt->p[i].set, cst)) - pma = isl_pw_multi_aff_intersect_domain(pma, - isl_set_copy(min_expr)); - pma = isl_pw_multi_aff_project_out(pma, - isl_dim_in, n_in - 1, 1); - - res = isl_pw_multi_aff_add_disjoint(res, pma); - } - - isl_pw_multi_aff_free(opt); - isl_pw_aff_free(min_expr_pa); - isl_set_free(min_expr); - isl_mat_free(cst); - return res; -error: - isl_pw_multi_aff_free(opt); - isl_pw_aff_free(min_expr_pa); - isl_set_free(min_expr); - isl_mat_free(cst); - return NULL; -} - -static __isl_give isl_pw_multi_aff *basic_map_partial_lexopt_pma( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max); - -/* This function is called from basic_map_partial_lexopt_symm. - * The last variable of "bmap" and "dom" corresponds to the minimum - * of the bounds in "cst". "map_space" is the space of the original - * input relation (of basic_map_partial_lexopt_symm) and "set_space" - * is the space of the original domain. - * - * We recursively call basic_map_partial_lexopt and then plug in - * the definition of the minimum in the result. - */ -static __isl_give union isl_lex_res basic_map_partial_lexopt_symm_pma_core( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max, __isl_take isl_mat *cst, - __isl_take isl_space *map_space, __isl_take isl_space *set_space) -{ - isl_pw_multi_aff *opt; - isl_pw_aff *min_expr_pa; - isl_set *min_expr; - union isl_lex_res res; - - min_expr = set_minimum(isl_basic_set_get_space(dom), isl_mat_copy(cst)); - min_expr_pa = set_minimum_pa(isl_basic_set_get_space(dom), - isl_mat_copy(cst)); - - opt = basic_map_partial_lexopt_pma(bmap, dom, empty, max); - - if (empty) { - *empty = split(*empty, - isl_set_copy(min_expr), isl_mat_copy(cst)); - *empty = isl_set_reset_space(*empty, set_space); - } - - opt = split_domain_pma(opt, min_expr_pa, min_expr, cst); - opt = isl_pw_multi_aff_reset_space(opt, map_space); - - res.pma = opt; - return res; -} - -static __isl_give isl_pw_multi_aff *basic_map_partial_lexopt_symm_pma( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max, int first, int second) -{ - return basic_map_partial_lexopt_symm(bmap, dom, empty, max, - first, second, &basic_map_partial_lexopt_symm_pma_core).pma; -} - -/* Recursive part of isl_basic_map_partial_lexopt_pw_multi_aff, after detecting - * equalities and removing redundant constraints. - * - * We first check if there are any parallel constraints (left). - * If not, we are in the base case. - * If there are parallel constraints, we replace them by a single - * constraint in basic_map_partial_lexopt_symm_pma and then call - * this function recursively to look for more parallel constraints. - */ -static __isl_give isl_pw_multi_aff *basic_map_partial_lexopt_pma( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max) -{ - int par = 0; - int first, second; - - if (!bmap) - goto error; - - if (bmap->ctx->opt->pip_symmetry) - par = parallel_constraints(bmap, &first, &second); - if (par < 0) - goto error; - if (!par) - return basic_map_partial_lexopt_base_pma(bmap, dom, empty, max); - - return basic_map_partial_lexopt_symm_pma(bmap, dom, empty, max, - first, second); -error: - isl_basic_set_free(dom); - isl_basic_map_free(bmap); - return NULL; -} - -/* Compute the lexicographic minimum (or maximum if "max" is set) - * of "bmap" over the domain "dom" and return the result as a piecewise - * multi-affine expression. - * If "empty" is not NULL, then *empty is assigned a set that - * contains those parts of the domain where there is no solution. - * If "bmap" is marked as rational (ISL_BASIC_MAP_RATIONAL), - * then we compute the rational optimum. Otherwise, we compute - * the integral optimum. - * - * We perform some preprocessing. As the PILP solver does not - * handle implicit equalities very well, we first make sure all - * the equalities are explicitly available. - * - * We also add context constraints to the basic map and remove - * redundant constraints. This is only needed because of the - * way we handle simple symmetries. In particular, we currently look - * for symmetries on the constraints, before we set up the main tableau. - * It is then no good to look for symmetries on possibly redundant constraints. - */ -__isl_give isl_pw_multi_aff *isl_basic_map_partial_lexopt_pw_multi_aff( - __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, - __isl_give isl_set **empty, int max) -{ - if (empty) - *empty = NULL; - if (!bmap || !dom) - goto error; - - isl_assert(bmap->ctx, - isl_basic_map_compatible_domain(bmap, dom), goto error); - - if (isl_basic_set_dim(dom, isl_dim_all) == 0) - return basic_map_partial_lexopt_pma(bmap, dom, empty, max); - - bmap = isl_basic_map_intersect_domain(bmap, isl_basic_set_copy(dom)); - bmap = isl_basic_map_detect_equalities(bmap); - bmap = isl_basic_map_remove_redundancies(bmap); - - return basic_map_partial_lexopt_pma(bmap, dom, empty, max); -error: - isl_basic_set_free(dom); - isl_basic_map_free(bmap); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_test.c b/cloog-0.17.0/isl/isl_test.c deleted file mode 100644 index 2b21331..0000000 --- a/cloog-0.17.0/isl/isl_test.c +++ /dev/null @@ -1,2579 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static char *srcdir; - -static char *get_filename(isl_ctx *ctx, const char *name, const char *suffix) { - char *filename; - int length; - char *pattern = "%s/test_inputs/%s.%s"; - - length = strlen(pattern) - 6 + strlen(srcdir) + strlen(name) - + strlen(suffix) + 1; - filename = isl_alloc_array(ctx, char, length); - - if (!filename) - return NULL; - - sprintf(filename, pattern, srcdir, name, suffix); - - return filename; -} - -void test_parse_map(isl_ctx *ctx, const char *str) -{ - isl_map *map; - - map = isl_map_read_from_str(ctx, str); - assert(map); - isl_map_free(map); -} - -void test_parse_map_equal(isl_ctx *ctx, const char *str, const char *str2) -{ - isl_map *map, *map2; - - map = isl_map_read_from_str(ctx, str); - map2 = isl_map_read_from_str(ctx, str2); - assert(map && map2 && isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); -} - -void test_parse_pwqp(isl_ctx *ctx, const char *str) -{ - isl_pw_qpolynomial *pwqp; - - pwqp = isl_pw_qpolynomial_read_from_str(ctx, str); - assert(pwqp); - isl_pw_qpolynomial_free(pwqp); -} - -static void test_parse_pwaff(isl_ctx *ctx, const char *str) -{ - isl_pw_aff *pwaff; - - pwaff = isl_pw_aff_read_from_str(ctx, str); - assert(pwaff); - isl_pw_aff_free(pwaff); -} - -void test_parse(struct isl_ctx *ctx) -{ - isl_map *map, *map2; - const char *str, *str2; - - str = "{ [i] -> [-i] }"; - map = isl_map_read_from_str(ctx, str); - assert(map); - isl_map_free(map); - - str = "{ A[i] -> L[([i/3])] }"; - map = isl_map_read_from_str(ctx, str); - assert(map); - isl_map_free(map); - - test_parse_map(ctx, "{[[s] -> A[i]] -> [[s+1] -> A[i]]}"); - test_parse_map(ctx, "{ [p1, y1, y2] -> [2, y1, y2] : " - "p1 = 1 && (y1 <= y2 || y2 = 0) }"); - - str = "{ [x,y] : [([x/2]+y)/3] >= 1 }"; - str2 = "{ [x, y] : 2y >= 6 - x }"; - test_parse_map_equal(ctx, str, str2); - - test_parse_map_equal(ctx, "{ [x,y] : x <= min(y, 2*y+3) }", - "{ [x,y] : x <= y, 2*y + 3 }"); - str = "{ [x, y] : (y <= x and y >= -3) or (2y <= -3 + x and y <= -4) }"; - test_parse_map_equal(ctx, "{ [x,y] : x >= min(y, 2*y+3) }", str); - - str = "{[new,old] -> [new+1-2*[(new+1)/2],old+1-2*[(old+1)/2]]}"; - map = isl_map_read_from_str(ctx, str); - str = "{ [new, old] -> [o0, o1] : " - "exists (e0 = [(-1 - new + o0)/2], e1 = [(-1 - old + o1)/2]: " - "2e0 = -1 - new + o0 and 2e1 = -1 - old + o1 and o0 >= 0 and " - "o0 <= 1 and o1 >= 0 and o1 <= 1) }"; - map2 = isl_map_read_from_str(ctx, str); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "{[new,old] -> [new+1-2*[(new+1)/2],old+1-2*[(old+1)/2]]}"; - map = isl_map_read_from_str(ctx, str); - str = "{[new,old] -> [(new+1)%2,(old+1)%2]}"; - map2 = isl_map_read_from_str(ctx, str); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "[n] -> { [c1] : c1>=0 and c1<=floord(n-4,3) }"; - str2 = "[n] -> { [c1] : c1 >= 0 and 3c1 <= -4 + n }"; - test_parse_map_equal(ctx, str, str2); - - str = "{ [i,j] -> [i] : i < j; [i,j] -> [j] : j <= i }"; - str2 = "{ [i,j] -> [min(i,j)] }"; - test_parse_map_equal(ctx, str, str2); - - str = "{ [i,j] : i != j }"; - str2 = "{ [i,j] : i < j or i > j }"; - test_parse_map_equal(ctx, str, str2); - - str = "{ [i,j] : (i+1)*2 >= j }"; - str2 = "{ [i, j] : j <= 2 + 2i }"; - test_parse_map_equal(ctx, str, str2); - - str = "{ [i] -> [i > 0 ? 4 : 5] }"; - str2 = "{ [i] -> [5] : i <= 0; [i] -> [4] : i >= 1 }"; - test_parse_map_equal(ctx, str, str2); - - str = "[N=2,M] -> { [i=[(M+N)/4]] }"; - str2 = "[N, M] -> { [i] : N = 2 and 4i <= 2 + M and 4i >= -1 + M }"; - test_parse_map_equal(ctx, str, str2); - - str = "{ [x] : x >= 0 }"; - str2 = "{ [x] : x-0 >= 0 }"; - test_parse_map_equal(ctx, str, str2); - - str = "{ [i] : ((i > 10)) }"; - str2 = "{ [i] : i >= 11 }"; - test_parse_map_equal(ctx, str, str2); - - str = "{ [i] -> [0] }"; - str2 = "{ [i] -> [0 * i] }"; - test_parse_map_equal(ctx, str, str2); - - test_parse_pwqp(ctx, "{ [i] -> i + [ (i + [i/3])/2 ] }"); - test_parse_map(ctx, "{ S1[i] -> [([i/10]),i%10] : 0 <= i <= 45 }"); - test_parse_pwaff(ctx, "{ [i] -> [i + 1] : i > 0; [a] -> [a] : a < 0 }"); -} - -void test_read(struct isl_ctx *ctx) -{ - char *filename; - FILE *input; - struct isl_basic_set *bset1, *bset2; - const char *str = "{[y]: Exists ( alpha : 2alpha = y)}"; - - filename = get_filename(ctx, "set", "omega"); - assert(filename); - input = fopen(filename, "r"); - assert(input); - - bset1 = isl_basic_set_read_from_file(ctx, input); - bset2 = isl_basic_set_read_from_str(ctx, str); - - assert(isl_basic_set_is_equal(bset1, bset2) == 1); - - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - free(filename); - - fclose(input); -} - -void test_bounded(struct isl_ctx *ctx) -{ - isl_set *set; - int bounded; - - set = isl_set_read_from_str(ctx, "[n] -> {[i] : 0 <= i <= n }"); - bounded = isl_set_is_bounded(set); - assert(bounded); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, "{[n, i] : 0 <= i <= n }"); - bounded = isl_set_is_bounded(set); - assert(!bounded); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, "[n] -> {[i] : i <= n }"); - bounded = isl_set_is_bounded(set); - assert(!bounded); - isl_set_free(set); -} - -/* Construct the basic set { [i] : 5 <= i <= N } */ -void test_construction(struct isl_ctx *ctx) -{ - isl_int v; - isl_space *dim; - isl_local_space *ls; - struct isl_basic_set *bset; - struct isl_constraint *c; - - isl_int_init(v); - - dim = isl_space_set_alloc(ctx, 1, 1); - bset = isl_basic_set_universe(isl_space_copy(dim)); - ls = isl_local_space_from_space(dim); - - c = isl_inequality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_param, 0, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_inequality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, -5); - isl_constraint_set_constant(c, v); - bset = isl_basic_set_add_constraint(bset, c); - - isl_local_space_free(ls); - isl_basic_set_free(bset); - - isl_int_clear(v); -} - -void test_dim(struct isl_ctx *ctx) -{ - const char *str; - isl_map *map1, *map2; - - map1 = isl_map_read_from_str(ctx, - "[n] -> { [i] -> [j] : exists (a = [i/10] : i - 10a <= n ) }"); - map1 = isl_map_add_dims(map1, isl_dim_in, 1); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [i,k] -> [j] : exists (a = [i/10] : i - 10a <= n ) }"); - assert(isl_map_is_equal(map1, map2)); - isl_map_free(map2); - - map1 = isl_map_project_out(map1, isl_dim_in, 0, 1); - map2 = isl_map_read_from_str(ctx, "[n] -> { [i] -> [j] : n >= 0 }"); - assert(isl_map_is_equal(map1, map2)); - - isl_map_free(map1); - isl_map_free(map2); - - str = "[n] -> { [i] -> [] : exists a : 0 <= i <= n and i = 2 a }"; - map1 = isl_map_read_from_str(ctx, str); - str = "{ [i] -> [j] : exists a : 0 <= i <= j and i = 2 a }"; - map2 = isl_map_read_from_str(ctx, str); - map1 = isl_map_move_dims(map1, isl_dim_out, 0, isl_dim_param, 0, 1); - assert(isl_map_is_equal(map1, map2)); - - isl_map_free(map1); - isl_map_free(map2); -} - -void test_div(struct isl_ctx *ctx) -{ - isl_int v; - isl_space *dim; - isl_local_space *ls; - struct isl_basic_set *bset; - struct isl_constraint *c; - - isl_int_init(v); - - /* test 1 */ - dim = isl_space_set_alloc(ctx, 0, 3); - bset = isl_basic_set_universe(isl_space_copy(dim)); - ls = isl_local_space_from_space(dim); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, -1); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, 1); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 1, 2); - - assert(bset && bset->n_div == 1); - isl_local_space_free(ls); - isl_basic_set_free(bset); - - /* test 2 */ - dim = isl_space_set_alloc(ctx, 0, 3); - bset = isl_basic_set_universe(isl_space_copy(dim)); - ls = isl_local_space_from_space(dim); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, 1); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, -1); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 1, 2); - - assert(bset && bset->n_div == 1); - isl_local_space_free(ls); - isl_basic_set_free(bset); - - /* test 3 */ - dim = isl_space_set_alloc(ctx, 0, 3); - bset = isl_basic_set_universe(isl_space_copy(dim)); - ls = isl_local_space_from_space(dim); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, 1); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, -3); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 4); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 1, 2); - - assert(bset && bset->n_div == 1); - isl_local_space_free(ls); - isl_basic_set_free(bset); - - /* test 4 */ - dim = isl_space_set_alloc(ctx, 0, 3); - bset = isl_basic_set_universe(isl_space_copy(dim)); - ls = isl_local_space_from_space(dim); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, 2); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, -1); - isl_constraint_set_constant(c, v); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 6); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 1, 2); - - assert(isl_basic_set_is_empty(bset)); - isl_local_space_free(ls); - isl_basic_set_free(bset); - - /* test 5 */ - dim = isl_space_set_alloc(ctx, 0, 3); - bset = isl_basic_set_universe(isl_space_copy(dim)); - ls = isl_local_space_from_space(dim); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, -3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 2, 1); - - assert(bset && bset->n_div == 0); - isl_basic_set_free(bset); - isl_local_space_free(ls); - - /* test 6 */ - dim = isl_space_set_alloc(ctx, 0, 3); - bset = isl_basic_set_universe(isl_space_copy(dim)); - ls = isl_local_space_from_space(dim); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 6); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, -3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 2, 1); - - assert(bset && bset->n_div == 1); - isl_basic_set_free(bset); - isl_local_space_free(ls); - - /* test 7 */ - /* This test is a bit tricky. We set up an equality - * a + 3b + 3c = 6 e0 - * Normalization of divs creates _two_ divs - * a = 3 e0 - * c - b - e0 = 2 e1 - * Afterwards e0 is removed again because it has coefficient -1 - * and we end up with the original equality and div again. - * Perhaps we can avoid the introduction of this temporary div. - */ - dim = isl_space_set_alloc(ctx, 0, 4); - bset = isl_basic_set_universe(isl_space_copy(dim)); - ls = isl_local_space_from_space(dim); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, -3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - isl_int_set_si(v, -3); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - isl_int_set_si(v, 6); - isl_constraint_set_coefficient(c, isl_dim_set, 3, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 3, 1); - - /* Test disabled for now */ - /* - assert(bset && bset->n_div == 1); - */ - isl_local_space_free(ls); - isl_basic_set_free(bset); - - /* test 8 */ - dim = isl_space_set_alloc(ctx, 0, 5); - bset = isl_basic_set_universe(isl_space_copy(dim)); - ls = isl_local_space_from_space(dim); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, -3); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - isl_int_set_si(v, -3); - isl_constraint_set_coefficient(c, isl_dim_set, 3, v); - isl_int_set_si(v, 6); - isl_constraint_set_coefficient(c, isl_dim_set, 4, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - isl_int_set_si(v, 1); - isl_constraint_set_constant(c, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 4, 1); - - /* Test disabled for now */ - /* - assert(bset && bset->n_div == 1); - */ - isl_local_space_free(ls); - isl_basic_set_free(bset); - - /* test 9 */ - dim = isl_space_set_alloc(ctx, 0, 4); - bset = isl_basic_set_universe(isl_space_copy(dim)); - ls = isl_local_space_from_space(dim); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 1, v); - isl_int_set_si(v, -2); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, -1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, 3); - isl_constraint_set_coefficient(c, isl_dim_set, 3, v); - isl_int_set_si(v, 2); - isl_constraint_set_constant(c, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 2, 2); - - bset = isl_basic_set_fix_si(bset, isl_dim_set, 0, 2); - - assert(!isl_basic_set_is_empty(bset)); - - isl_local_space_free(ls); - isl_basic_set_free(bset); - - /* test 10 */ - dim = isl_space_set_alloc(ctx, 0, 3); - bset = isl_basic_set_universe(isl_space_copy(dim)); - ls = isl_local_space_from_space(dim); - - c = isl_equality_alloc(isl_local_space_copy(ls)); - isl_int_set_si(v, 1); - isl_constraint_set_coefficient(c, isl_dim_set, 0, v); - isl_int_set_si(v, -2); - isl_constraint_set_coefficient(c, isl_dim_set, 2, v); - bset = isl_basic_set_add_constraint(bset, c); - - bset = isl_basic_set_project_out(bset, isl_dim_set, 2, 1); - - bset = isl_basic_set_fix_si(bset, isl_dim_set, 0, 2); - - isl_local_space_free(ls); - isl_basic_set_free(bset); - - isl_int_clear(v); -} - -void test_application_case(struct isl_ctx *ctx, const char *name) -{ - char *filename; - FILE *input; - struct isl_basic_set *bset1, *bset2; - struct isl_basic_map *bmap; - - filename = get_filename(ctx, name, "omega"); - assert(filename); - input = fopen(filename, "r"); - assert(input); - - bset1 = isl_basic_set_read_from_file(ctx, input); - bmap = isl_basic_map_read_from_file(ctx, input); - - bset1 = isl_basic_set_apply(bset1, bmap); - - bset2 = isl_basic_set_read_from_file(ctx, input); - - assert(isl_basic_set_is_equal(bset1, bset2) == 1); - - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - free(filename); - - fclose(input); -} - -void test_application(struct isl_ctx *ctx) -{ - test_application_case(ctx, "application"); - test_application_case(ctx, "application2"); -} - -void test_affine_hull_case(struct isl_ctx *ctx, const char *name) -{ - char *filename; - FILE *input; - struct isl_basic_set *bset1, *bset2; - - filename = get_filename(ctx, name, "polylib"); - assert(filename); - input = fopen(filename, "r"); - assert(input); - - bset1 = isl_basic_set_read_from_file(ctx, input); - bset2 = isl_basic_set_read_from_file(ctx, input); - - bset1 = isl_basic_set_affine_hull(bset1); - - assert(isl_basic_set_is_equal(bset1, bset2) == 1); - - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - free(filename); - - fclose(input); -} - -void test_affine_hull(struct isl_ctx *ctx) -{ - test_affine_hull_case(ctx, "affine2"); - test_affine_hull_case(ctx, "affine"); - test_affine_hull_case(ctx, "affine3"); -} - -void test_convex_hull_case(struct isl_ctx *ctx, const char *name) -{ - char *filename; - FILE *input; - struct isl_basic_set *bset1, *bset2; - struct isl_set *set; - - filename = get_filename(ctx, name, "polylib"); - assert(filename); - input = fopen(filename, "r"); - assert(input); - - bset1 = isl_basic_set_read_from_file(ctx, input); - bset2 = isl_basic_set_read_from_file(ctx, input); - - set = isl_basic_set_union(bset1, bset2); - bset1 = isl_set_convex_hull(set); - - bset2 = isl_basic_set_read_from_file(ctx, input); - - assert(isl_basic_set_is_equal(bset1, bset2) == 1); - - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - free(filename); - - fclose(input); -} - -void test_convex_hull_algo(struct isl_ctx *ctx, int convex) -{ - const char *str1, *str2; - isl_set *set1, *set2; - int orig_convex = ctx->opt->convex; - ctx->opt->convex = convex; - - test_convex_hull_case(ctx, "convex0"); - test_convex_hull_case(ctx, "convex1"); - test_convex_hull_case(ctx, "convex2"); - test_convex_hull_case(ctx, "convex3"); - test_convex_hull_case(ctx, "convex4"); - test_convex_hull_case(ctx, "convex5"); - test_convex_hull_case(ctx, "convex6"); - test_convex_hull_case(ctx, "convex7"); - test_convex_hull_case(ctx, "convex8"); - test_convex_hull_case(ctx, "convex9"); - test_convex_hull_case(ctx, "convex10"); - test_convex_hull_case(ctx, "convex11"); - test_convex_hull_case(ctx, "convex12"); - test_convex_hull_case(ctx, "convex13"); - test_convex_hull_case(ctx, "convex14"); - test_convex_hull_case(ctx, "convex15"); - - str1 = "{ [i0, i1, i2] : (i2 = 1 and i0 = 0 and i1 >= 0) or " - "(i0 = 1 and i1 = 0 and i2 = 1) or " - "(i0 = 0 and i1 = 0 and i2 = 0) }"; - str2 = "{ [i0, i1, i2] : i0 >= 0 and i2 >= i0 and i2 <= 1 and i1 >= 0 }"; - set1 = isl_set_read_from_str(ctx, str1); - set2 = isl_set_read_from_str(ctx, str2); - set1 = isl_set_from_basic_set(isl_set_convex_hull(set1)); - assert(isl_set_is_equal(set1, set2)); - isl_set_free(set1); - isl_set_free(set2); - - ctx->opt->convex = orig_convex; -} - -void test_convex_hull(struct isl_ctx *ctx) -{ - test_convex_hull_algo(ctx, ISL_CONVEX_HULL_FM); - test_convex_hull_algo(ctx, ISL_CONVEX_HULL_WRAP); -} - -void test_gist_case(struct isl_ctx *ctx, const char *name) -{ - char *filename; - FILE *input; - struct isl_basic_set *bset1, *bset2; - - filename = get_filename(ctx, name, "polylib"); - assert(filename); - input = fopen(filename, "r"); - assert(input); - - bset1 = isl_basic_set_read_from_file(ctx, input); - bset2 = isl_basic_set_read_from_file(ctx, input); - - bset1 = isl_basic_set_gist(bset1, bset2); - - bset2 = isl_basic_set_read_from_file(ctx, input); - - assert(isl_basic_set_is_equal(bset1, bset2) == 1); - - isl_basic_set_free(bset1); - isl_basic_set_free(bset2); - free(filename); - - fclose(input); -} - -void test_gist(struct isl_ctx *ctx) -{ - const char *str; - isl_basic_set *bset1, *bset2; - - test_gist_case(ctx, "gist1"); - - str = "[p0, p2, p3, p5, p6, p10] -> { [] : " - "exists (e0 = [(15 + p0 + 15p6 + 15p10)/16], e1 = [(p5)/8], " - "e2 = [(p6)/128], e3 = [(8p2 - p5)/128], " - "e4 = [(128p3 - p6)/4096]: 8e1 = p5 and 128e2 = p6 and " - "128e3 = 8p2 - p5 and 4096e4 = 128p3 - p6 and p2 >= 0 and " - "16e0 >= 16 + 16p6 + 15p10 and p2 <= 15 and p3 >= 0 and " - "p3 <= 31 and p6 >= 128p3 and p5 >= 8p2 and p10 >= 0 and " - "16e0 <= 15 + p0 + 15p6 + 15p10 and 16e0 >= p0 + 15p6 + 15p10 and " - "p10 <= 15 and p10 <= -1 + p0 - p6) }"; - bset1 = isl_basic_set_read_from_str(ctx, str); - str = "[p0, p2, p3, p5, p6, p10] -> { [] : exists (e0 = [(p5)/8], " - "e1 = [(p6)/128], e2 = [(8p2 - p5)/128], " - "e3 = [(128p3 - p6)/4096]: 8e0 = p5 and 128e1 = p6 and " - "128e2 = 8p2 - p5 and 4096e3 = 128p3 - p6 and p5 >= -7 and " - "p2 >= 0 and 8p2 <= -1 + p0 and p2 <= 15 and p3 >= 0 and " - "p3 <= 31 and 128p3 <= -1 + p0 and p6 >= -127 and " - "p5 <= -1 + p0 and p6 <= -1 + p0 and p6 >= 128p3 and " - "p0 >= 1 and p5 >= 8p2 and p10 >= 0 and p10 <= 15 ) }"; - bset2 = isl_basic_set_read_from_str(ctx, str); - bset1 = isl_basic_set_gist(bset1, bset2); - assert(bset1 && bset1->n_div == 0); - isl_basic_set_free(bset1); -} - -void test_coalesce_set(isl_ctx *ctx, const char *str, int check_one) -{ - isl_set *set, *set2; - - set = isl_set_read_from_str(ctx, str); - set = isl_set_coalesce(set); - set2 = isl_set_read_from_str(ctx, str); - assert(isl_set_is_equal(set, set2)); - if (check_one) - assert(set && set->n == 1); - isl_set_free(set); - isl_set_free(set2); -} - -void test_coalesce(struct isl_ctx *ctx) -{ - const char *str; - struct isl_set *set, *set2; - struct isl_map *map, *map2; - - set = isl_set_read_from_str(ctx, - "{[x,y]: x >= 0 & x <= 10 & y >= 0 & y <= 10 or " - "y >= x & x >= 2 & 5 >= y }"); - set = isl_set_coalesce(set); - assert(set && set->n == 1); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & 2x + y <= 30 & y <= 10 & x >= 0 or " - "x + y >= 10 & y <= x & x + y <= 20 & y >= 0}"); - set = isl_set_coalesce(set); - assert(set && set->n == 1); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & 2x + y <= 30 & y <= 10 & x >= 0 or " - "x + y >= 10 & y <= x & x + y <= 19 & y >= 0}"); - set = isl_set_coalesce(set); - assert(set && set->n == 2); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x >= 6 & x <= 10 & y <= x}"); - set = isl_set_coalesce(set); - assert(set && set->n == 1); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x >= 7 & x <= 10 & y <= x}"); - set = isl_set_coalesce(set); - assert(set && set->n == 2); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x >= 6 & x <= 10 & y + 1 <= x}"); - set = isl_set_coalesce(set); - assert(set && set->n == 2); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x = 6 & y <= 6}"); - set = isl_set_coalesce(set); - assert(set && set->n == 1); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x = 7 & y <= 6}"); - set = isl_set_coalesce(set); - assert(set && set->n == 2); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x = 6 & y <= 5}"); - set = isl_set_coalesce(set); - assert(set && set->n == 1); - set2 = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x = 6 & y <= 5}"); - assert(isl_set_is_equal(set, set2)); - isl_set_free(set); - isl_set_free(set2); - - set = isl_set_read_from_str(ctx, - "{[x,y]: y >= 0 & x <= 5 & y <= x or " - "y >= 0 & x = 6 & y <= 7}"); - set = isl_set_coalesce(set); - assert(set && set->n == 2); - isl_set_free(set); - - set = isl_set_read_from_str(ctx, - "[n] -> { [i] : i = 1 and n >= 2 or 2 <= i and i <= n }"); - set = isl_set_coalesce(set); - assert(set && set->n == 1); - set2 = isl_set_read_from_str(ctx, - "[n] -> { [i] : i = 1 and n >= 2 or 2 <= i and i <= n }"); - assert(isl_set_is_equal(set, set2)); - isl_set_free(set); - isl_set_free(set2); - - set = isl_set_read_from_str(ctx, - "{[x,y] : x >= 0 and y >= 0 or 0 <= y and y <= 5 and x = -1}"); - set = isl_set_coalesce(set); - set2 = isl_set_read_from_str(ctx, - "{[x,y] : x >= 0 and y >= 0 or 0 <= y and y <= 5 and x = -1}"); - assert(isl_set_is_equal(set, set2)); - isl_set_free(set); - isl_set_free(set2); - - set = isl_set_read_from_str(ctx, - "[n] -> { [i] : 1 <= i and i <= n - 1 or " - "2 <= i and i <= n }"); - set = isl_set_coalesce(set); - assert(set && set->n == 1); - set2 = isl_set_read_from_str(ctx, - "[n] -> { [i] : 1 <= i and i <= n - 1 or " - "2 <= i and i <= n }"); - assert(isl_set_is_equal(set, set2)); - isl_set_free(set); - isl_set_free(set2); - - map = isl_map_read_from_str(ctx, - "[n] -> { [i0] -> [o0] : exists (e0 = [(i0)/4], e1 = [(o0)/4], " - "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], " - "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and " - "4e4 = -2 + o0 and i0 >= 8 + 2n and o0 >= 2 + i0 and " - "o0 <= 56 + 2n and o0 <= -12 + 4n and i0 <= 57 + 2n and " - "i0 <= -11 + 4n and o0 >= 6 + 2n and 4e0 <= i0 and " - "4e0 >= -3 + i0 and 4e1 <= o0 and 4e1 >= -3 + o0 and " - "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0);" - "[i0] -> [o0] : exists (e0 = [(i0)/4], e1 = [(o0)/4], " - "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], " - "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and " - "4e4 = -2 + o0 and 2e0 >= 3 + n and e0 <= -4 + n and " - "2e0 <= 27 + n and e1 <= -4 + n and 2e1 <= 27 + n and " - "2e1 >= 2 + n and e1 >= 1 + e0 and i0 >= 7 + 2n and " - "i0 <= -11 + 4n and i0 <= 57 + 2n and 4e0 <= -2 + i0 and " - "4e0 >= -3 + i0 and o0 >= 6 + 2n and o0 <= -11 + 4n and " - "o0 <= 57 + 2n and 4e1 <= -2 + o0 and 4e1 >= -3 + o0 and " - "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0 ) }"); - map = isl_map_coalesce(map); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [i0] -> [o0] : exists (e0 = [(i0)/4], e1 = [(o0)/4], " - "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], " - "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and " - "4e4 = -2 + o0 and i0 >= 8 + 2n and o0 >= 2 + i0 and " - "o0 <= 56 + 2n and o0 <= -12 + 4n and i0 <= 57 + 2n and " - "i0 <= -11 + 4n and o0 >= 6 + 2n and 4e0 <= i0 and " - "4e0 >= -3 + i0 and 4e1 <= o0 and 4e1 >= -3 + o0 and " - "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0);" - "[i0] -> [o0] : exists (e0 = [(i0)/4], e1 = [(o0)/4], " - "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], " - "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and " - "4e4 = -2 + o0 and 2e0 >= 3 + n and e0 <= -4 + n and " - "2e0 <= 27 + n and e1 <= -4 + n and 2e1 <= 27 + n and " - "2e1 >= 2 + n and e1 >= 1 + e0 and i0 >= 7 + 2n and " - "i0 <= -11 + 4n and i0 <= 57 + 2n and 4e0 <= -2 + i0 and " - "4e0 >= -3 + i0 and o0 >= 6 + 2n and o0 <= -11 + 4n and " - "o0 <= 57 + 2n and 4e1 <= -2 + o0 and 4e1 >= -3 + o0 and " - "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0 ) }"); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "[n, m] -> { [] -> [o0, o2, o3] : (o3 = 1 and o0 >= 1 + m and " - "o0 <= n + m and o2 <= m and o0 >= 2 + n and o2 >= 3) or " - "(o0 >= 2 + n and o0 >= 1 + m and o0 <= n + m and n >= 1 and " - "o3 <= -1 + o2 and o3 >= 1 - m + o2 and o3 >= 2 and o3 <= n) }"; - map = isl_map_read_from_str(ctx, str); - map = isl_map_coalesce(map); - map2 = isl_map_read_from_str(ctx, str); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "[M, N] -> { [i0, i1, i2, i3, i4, i5, i6] -> " - "[o0, o1, o2, o3, o4, o5, o6] : " - "(o6 <= -4 + 2M - 2N + i0 + i1 - i2 + i6 - o0 - o1 + o2 and " - "o3 <= -2 + i3 and o6 >= 2 + i0 + i3 + i6 - o0 - o3 and " - "o6 >= 2 - M + N + i3 + i4 + i6 - o3 - o4 and o0 <= -1 + i0 and " - "o4 >= 4 - 3M + 3N - i0 - i1 + i2 + 2i3 + i4 + o0 + o1 - o2 - 2o3 " - "and o6 <= -3 + 2M - 2N + i3 + i4 - i5 + i6 - o3 - o4 + o5 and " - "2o6 <= -5 + 5M - 5N + 2i0 + i1 - i2 - i5 + 2i6 - 2o0 - o1 + o2 + o5 " - "and o6 >= 2i0 + i1 + i6 - 2o0 - o1 and " - "3o6 <= -5 + 4M - 4N + 2i0 + i1 - i2 + 2i3 + i4 - i5 + 3i6 " - "- 2o0 - o1 + o2 - 2o3 - o4 + o5) or " - "(N >= 2 and o3 <= -1 + i3 and o0 <= -1 + i0 and " - "o6 >= i3 + i6 - o3 and M >= 0 and " - "2o6 >= 1 + i0 + i3 + 2i6 - o0 - o3 and " - "o6 >= 1 - M + i0 + i6 - o0 and N >= 2M and o6 >= i0 + i6 - o0) }"; - map = isl_map_read_from_str(ctx, str); - map = isl_map_coalesce(map); - map2 = isl_map_read_from_str(ctx, str); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "[M, N] -> { [] -> [o0] : (o0 = 0 and M >= 1 and N >= 2) or " - "(o0 = 0 and M >= 1 and N >= 2M and N >= 2 + M) or " - "(o0 = 0 and M >= 2 and N >= 3) or " - "(M = 0 and o0 = 0 and N >= 3) }"; - map = isl_map_read_from_str(ctx, str); - map = isl_map_coalesce(map); - map2 = isl_map_read_from_str(ctx, str); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "{ [i0, i1, i2, i3] : (i1 = 10i0 and i0 >= 1 and 10i0 <= 100 and " - "i3 <= 9 + 10 i2 and i3 >= 1 + 10i2 and i3 >= 0) or " - "(i1 <= 9 + 10i0 and i1 >= 1 + 10i0 and i2 >= 0 and " - "i0 >= 0 and i1 <= 100 and i3 <= 9 + 10i2 and i3 >= 1 + 10i2) }"; - map = isl_map_read_from_str(ctx, str); - map = isl_map_coalesce(map); - map2 = isl_map_read_from_str(ctx, str); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - test_coalesce_set(ctx, - "[M] -> { [i1] : (i1 >= 2 and i1 <= M) or " - "(i1 = M and M >= 1) }", 0); - test_coalesce_set(ctx, - "{[x,y] : x,y >= 0; [x,y] : 10 <= x <= 20 and y >= -1 }", 0); - test_coalesce_set(ctx, - "{ [x, y] : (x >= 1 and y >= 1 and x <= 2 and y <= 2) or " - "(y = 3 and x = 1) }", 1); - test_coalesce_set(ctx, - "[M] -> { [i0, i1, i2, i3, i4] : (i1 >= 3 and i4 >= 2 + i2 and " - "i2 >= 2 and i0 >= 2 and i3 >= 1 + i2 and i0 <= M and " - "i1 <= M and i3 <= M and i4 <= M) or " - "(i1 >= 2 and i4 >= 1 + i2 and i2 >= 2 and i0 >= 2 and " - "i3 >= 1 + i2 and i0 <= M and i1 <= -1 + M and i3 <= M and " - "i4 <= -1 + M) }", 1); - test_coalesce_set(ctx, - "{ [x, y] : (x >= 0 and y >= 0 and x <= 10 and y <= 10) or " - "(x >= 1 and y >= 1 and x <= 11 and y <= 11) }", 1); - test_coalesce_set(ctx, - "{[x,y,z] : y + 2 >= 0 and x - y + 1 >= 0 and " - "-x - y + 1 >= 0 and -3 <= z <= 3;" - "[x,y,z] : -x+z + 20 >= 0 and -x-z + 20 >= 0 and " - "x-z + 20 >= 0 and x+z + 20 >= 0 and -10 <= y <= 0}", 1); - test_coalesce_set(ctx, - "{[x,y] : 0 <= x,y <= 10; [5,y]: 4 <=y <= 11}", 1); - test_coalesce_set(ctx, "{[x,0] : x >= 0; [x,1] : x <= 20}", 0); - test_coalesce_set(ctx, - "{[x,0,0] : -5 <= x <= 5; [0,y,1] : -5 <= y <= 5 }", 1); - test_coalesce_set(ctx, "{ [x, 1 - x] : 0 <= x <= 1; [0,0] }", 1); - test_coalesce_set(ctx, "{ [0,0]; [i,i] : 1 <= i <= 10 }", 1); - test_coalesce_set(ctx, "{ [0,0]; [i,j] : 1 <= i,j <= 10 }", 0); - test_coalesce_set(ctx, "{ [0,0]; [i,2i] : 1 <= i <= 10 }", 1); - test_coalesce_set(ctx, "{ [0,0]; [i,2i] : 2 <= i <= 10 }", 0); - test_coalesce_set(ctx, "{ [1,0]; [i,2i] : 1 <= i <= 10 }", 0); - test_coalesce_set(ctx, "{ [0,1]; [i,2i] : 1 <= i <= 10 }", 0); -} - -void test_closure(struct isl_ctx *ctx) -{ - const char *str; - isl_set *dom; - isl_map *up, *right; - isl_map *map, *map2; - int exact; - - /* COCOA example 1 */ - map = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : i2 = i + 1 and j2 = j + 1 and " - "1 <= i and i < n and 1 <= j and j < n or " - "i2 = i + 1 and j2 = j - 1 and " - "1 <= i and i < n and 2 <= j and j <= n }"); - map = isl_map_power(map, &exact); - assert(exact); - isl_map_free(map); - - /* COCOA example 1 */ - map = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : i2 = i + 1 and j2 = j + 1 and " - "1 <= i and i < n and 1 <= j and j < n or " - "i2 = i + 1 and j2 = j - 1 and " - "1 <= i and i < n and 2 <= j and j <= n }"); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k : " - "1 <= i and i < n and 1 <= j and j <= n and " - "2 <= i2 and i2 <= n and 1 <= j2 and j2 <= n and " - "i2 = i + k1 + k2 and j2 = j + k1 - k2 and " - "k1 >= 0 and k2 >= 0 and k1 + k2 = k and k >= 1 )}"); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map2); - isl_map_free(map); - - map = isl_map_read_from_str(ctx, - "[n] -> { [x] -> [y] : y = x + 1 and 0 <= x and x <= n and " - " 0 <= y and y <= n }"); - map = isl_map_transitive_closure(map, &exact); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [x] -> [y] : y > x and 0 <= x and x <= n and " - " 0 <= y and y <= n }"); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map2); - isl_map_free(map); - - /* COCOA example 2 */ - map = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : i2 = i + 2 and j2 = j + 2 and " - "1 <= i and i < n - 1 and 1 <= j and j < n - 1 or " - "i2 = i + 2 and j2 = j - 2 and " - "1 <= i and i < n - 1 and 3 <= j and j <= n }"); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k : " - "1 <= i and i < n - 1 and 1 <= j and j <= n and " - "3 <= i2 and i2 <= n and 1 <= j2 and j2 <= n and " - "i2 = i + 2 k1 + 2 k2 and j2 = j + 2 k1 - 2 k2 and " - "k1 >= 0 and k2 >= 0 and k1 + k2 = k and k >= 1) }"); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - /* COCOA Fig.2 left */ - map = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : i2 = i + 2 and j2 = j and " - "i <= 2 j - 3 and i <= n - 2 and j <= 2 i - 1 and " - "j <= n or " - "i2 = i and j2 = j + 2 and i <= 2 j - 1 and i <= n and " - "j <= 2 i - 3 and j <= n - 2 or " - "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and " - "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }"); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - isl_map_free(map); - - /* COCOA Fig.2 right */ - map = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : i2 = i + 3 and j2 = j and " - "i <= 2 j - 4 and i <= n - 3 and j <= 2 i - 1 and " - "j <= n or " - "i2 = i and j2 = j + 3 and i <= 2 j - 1 and i <= n and " - "j <= 2 i - 4 and j <= n - 3 or " - "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and " - "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }"); - map = isl_map_power(map, &exact); - assert(exact); - isl_map_free(map); - - /* COCOA Fig.2 right */ - map = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : i2 = i + 3 and j2 = j and " - "i <= 2 j - 4 and i <= n - 3 and j <= 2 i - 1 and " - "j <= n or " - "i2 = i and j2 = j + 3 and i <= 2 j - 1 and i <= n and " - "j <= 2 i - 4 and j <= n - 3 or " - "i2 = i + 1 and j2 = j + 1 and i <= 2 j - 1 and " - "i <= n - 1 and j <= 2 i - 1 and j <= n - 1 }"); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : exists (k1,k2,k3,k : " - "i <= 2 j - 1 and i <= n and j <= 2 i - 1 and " - "j <= n and 3 + i + 2 j <= 3 n and " - "3 + 2 i + j <= 3n and i2 <= 2 j2 -1 and i2 <= n and " - "i2 <= 3 j2 - 4 and j2 <= 2 i2 -1 and j2 <= n and " - "13 + 4 j2 <= 11 i2 and i2 = i + 3 k1 + k3 and " - "j2 = j + 3 k2 + k3 and k1 >= 0 and k2 >= 0 and " - "k3 >= 0 and k1 + k2 + k3 = k and k > 0) }"); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map2); - isl_map_free(map); - - /* COCOA Fig.1 right */ - dom = isl_set_read_from_str(ctx, - "{ [x,y] : x >= 0 and -2 x + 3 y >= 0 and x <= 3 and " - "2 x - 3 y + 3 >= 0 }"); - right = isl_map_read_from_str(ctx, - "{ [x,y] -> [x2,y2] : x2 = x + 1 and y2 = y }"); - up = isl_map_read_from_str(ctx, - "{ [x,y] -> [x2,y2] : x2 = x and y2 = y + 1 }"); - right = isl_map_intersect_domain(right, isl_set_copy(dom)); - right = isl_map_intersect_range(right, isl_set_copy(dom)); - up = isl_map_intersect_domain(up, isl_set_copy(dom)); - up = isl_map_intersect_range(up, dom); - map = isl_map_union(up, right); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - map2 = isl_map_read_from_str(ctx, - "{ [0,0] -> [0,1]; [0,0] -> [1,1]; [0,1] -> [1,1]; " - " [2,2] -> [3,2]; [2,2] -> [3,3]; [3,2] -> [3,3] }"); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map2); - isl_map_free(map); - - /* COCOA Theorem 1 counter example */ - map = isl_map_read_from_str(ctx, - "{ [i,j] -> [i2,j2] : i = 0 and 0 <= j and j <= 1 and " - "i2 = 1 and j2 = j or " - "i = 0 and j = 0 and i2 = 0 and j2 = 1 }"); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - isl_map_free(map); - - map = isl_map_read_from_str(ctx, - "[m,n] -> { [i,j] -> [i2,j2] : i2 = i and j2 = j + 2 and " - "1 <= i,i2 <= n and 1 <= j,j2 <= m or " - "i2 = i + 1 and 3 <= j2 - j <= 4 and " - "1 <= i,i2 <= n and 1 <= j,j2 <= m }"); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - isl_map_free(map); - - /* Kelly et al 1996, fig 12 */ - map = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : i2 = i and j2 = j + 1 and " - "1 <= i,j,j+1 <= n or " - "j = n and j2 = 1 and i2 = i + 1 and " - "1 <= i,i+1 <= n }"); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [i,j] -> [i2,j2] : 1 <= j < j2 <= n and " - "1 <= i <= n and i = i2 or " - "1 <= i < i2 <= n and 1 <= j <= n and " - "1 <= j2 <= n }"); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map2); - isl_map_free(map); - - /* Omega's closure4 */ - map = isl_map_read_from_str(ctx, - "[m,n] -> { [x,y] -> [x2,y2] : x2 = x and y2 = y + 1 and " - "1 <= x,y <= 10 or " - "x2 = x + 1 and y2 = y and " - "1 <= x <= 20 && 5 <= y <= 15 }"); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - isl_map_free(map); - - map = isl_map_read_from_str(ctx, - "[n] -> { [x] -> [y]: 1 <= n <= y - x <= 10 }"); - map = isl_map_transitive_closure(map, &exact); - assert(!exact); - map2 = isl_map_read_from_str(ctx, - "[n] -> { [x] -> [y] : 1 <= n <= 10 and y >= n + x }"); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "[n, m] -> { [i0, i1, i2, i3] -> [o0, o1, o2, o3] : " - "i3 = 1 and o0 = i0 and o1 = -1 + i1 and o2 = -1 + i2 and " - "o3 = -2 + i2 and i1 <= -1 + i0 and i1 >= 1 - m + i0 and " - "i1 >= 2 and i1 <= n and i2 >= 3 and i2 <= 1 + n and i2 <= m }"; - map = isl_map_read_from_str(ctx, str); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - map2 = isl_map_read_from_str(ctx, str); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "{[0] -> [1]; [2] -> [3]}"; - map = isl_map_read_from_str(ctx, str); - map = isl_map_transitive_closure(map, &exact); - assert(exact); - map2 = isl_map_read_from_str(ctx, str); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "[n] -> { [[i0, i1, 1, 0, i0] -> [i5, 1]] -> " - "[[i0, -1 + i1, 2, 0, i0] -> [-1 + i5, 2]] : " - "exists (e0 = [(3 - n)/3]: i5 >= 2 and i1 >= 2 and " - "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and " - "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); " - "[[i0, i1, 2, 0, i0] -> [i5, 1]] -> " - "[[i0, i1, 1, 0, i0] -> [-1 + i5, 2]] : " - "exists (e0 = [(3 - n)/3]: i5 >= 2 and i1 >= 1 and " - "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and " - "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); " - "[[i0, i1, 1, 0, i0] -> [i5, 2]] -> " - "[[i0, -1 + i1, 2, 0, i0] -> [i5, 1]] : " - "exists (e0 = [(3 - n)/3]: i1 >= 2 and i5 >= 1 and " - "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and " - "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n); " - "[[i0, i1, 2, 0, i0] -> [i5, 2]] -> " - "[[i0, i1, 1, 0, i0] -> [i5, 1]] : " - "exists (e0 = [(3 - n)/3]: i5 >= 1 and i1 >= 1 and " - "3i0 <= -1 + n and i1 <= -1 + n and i5 <= -1 + n and " - "3e0 >= 1 - n and 3e0 <= 2 - n and 3i0 >= -2 + n) }"; - map = isl_map_read_from_str(ctx, str); - map = isl_map_transitive_closure(map, NULL); - assert(map); - isl_map_free(map); -} - -void test_lex(struct isl_ctx *ctx) -{ - isl_space *dim; - isl_map *map; - - dim = isl_space_set_alloc(ctx, 0, 0); - map = isl_map_lex_le(dim); - assert(!isl_map_is_empty(map)); - isl_map_free(map); -} - -void test_lexmin(struct isl_ctx *ctx) -{ - const char *str; - isl_basic_map *bmap; - isl_map *map, *map2; - isl_set *set; - isl_set *set2; - isl_pw_multi_aff *pma; - - str = "[p0, p1] -> { [] -> [] : " - "exists (e0 = [(2p1)/3], e1, e2, e3 = [(3 - p1 + 3e0)/3], " - "e4 = [(p1)/3], e5 = [(p1 + 3e4)/3]: " - "3e0 >= -2 + 2p1 and 3e0 >= p1 and 3e3 >= 1 - p1 + 3e0 and " - "3e0 <= 2p1 and 3e3 >= -2 + p1 and 3e3 <= -1 + p1 and p1 >= 3 and " - "3e5 >= -2 + 2p1 and 3e5 >= p1 and 3e5 <= -1 + p1 + 3e4 and " - "3e4 <= p1 and 3e4 >= -2 + p1 and e3 <= -1 + e0 and " - "3e4 >= 6 - p1 + 3e1 and 3e1 >= p1 and 3e5 >= -2 + p1 + 3e4 and " - "2e4 >= 3 - p1 + 2e1 and e4 <= e1 and 3e3 <= 2 - p1 + 3e0 and " - "e5 >= 1 + e1 and 3e4 >= 6 - 2p1 + 3e1 and " - "p0 >= 2 and p1 >= p0 and 3e2 >= p1 and 3e4 >= 6 - p1 + 3e2 and " - "e2 <= e1 and e3 >= 1 and e4 <= e2) }"; - map = isl_map_read_from_str(ctx, str); - map = isl_map_lexmin(map); - isl_map_free(map); - - str = "[C] -> { [obj,a,b,c] : obj <= 38 a + 7 b + 10 c and " - "a + b <= 1 and c <= 10 b and c <= C and a,b,c,C >= 0 }"; - set = isl_set_read_from_str(ctx, str); - set = isl_set_lexmax(set); - str = "[C] -> { [obj,a,b,c] : C = 8 }"; - set2 = isl_set_read_from_str(ctx, str); - set = isl_set_intersect(set, set2); - assert(!isl_set_is_empty(set)); - isl_set_free(set); - - str = "{ [x] -> [y] : x <= y <= 10; [x] -> [5] : -8 <= x <= 8 }"; - map = isl_map_read_from_str(ctx, str); - map = isl_map_lexmin(map); - str = "{ [x] -> [5] : 6 <= x <= 8; " - "[x] -> [x] : x <= 5 or (9 <= x <= 10) }"; - map2 = isl_map_read_from_str(ctx, str); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "{ [x] -> [y] : 4y = x or 4y = -1 + x or 4y = -2 + x }"; - map = isl_map_read_from_str(ctx, str); - map2 = isl_map_copy(map); - map = isl_map_lexmin(map); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "{ [x] -> [y] : x = 4y; [x] -> [y] : x = 2y }"; - map = isl_map_read_from_str(ctx, str); - map = isl_map_lexmin(map); - str = "{ [x] -> [y] : (4y = x and x >= 0) or " - "(exists (e0 = [(x)/4], e1 = [(-2 + x)/4]: 2y = x and " - "4e1 = -2 + x and 4e0 <= -1 + x and 4e0 >= -3 + x)) or " - "(exists (e0 = [(x)/4]: 2y = x and 4e0 = x and x <= -4)) }"; - map2 = isl_map_read_from_str(ctx, str); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "{ [i] -> [i', j] : j = i - 8i' and i' >= 0 and i' <= 7 and " - " 8i' <= i and 8i' >= -7 + i }"; - bmap = isl_basic_map_read_from_str(ctx, str); - pma = isl_basic_map_lexmin_pw_multi_aff(isl_basic_map_copy(bmap)); - map2 = isl_map_from_pw_multi_aff(pma); - map = isl_map_from_basic_map(bmap); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); - - str = "{ T[a] -> S[b, c] : a = 4b-2c and c >= b }"; - map = isl_map_read_from_str(ctx, str); - map = isl_map_lexmin(map); - str = "{ T[a] -> S[b, c] : 2b = a and 2c = a }"; - map2 = isl_map_read_from_str(ctx, str); - assert(isl_map_is_equal(map, map2)); - isl_map_free(map); - isl_map_free(map2); -} - -struct must_may { - isl_map *must; - isl_map *may; -}; - -static int collect_must_may(__isl_take isl_map *dep, int must, - void *dep_user, void *user) -{ - struct must_may *mm = (struct must_may *)user; - - if (must) - mm->must = isl_map_union(mm->must, dep); - else - mm->may = isl_map_union(mm->may, dep); - - return 0; -} - -static int common_space(void *first, void *second) -{ - int depth = *(int *)first; - return 2 * depth; -} - -static int map_is_equal(__isl_keep isl_map *map, const char *str) -{ - isl_map *map2; - int equal; - - if (!map) - return -1; - - map2 = isl_map_read_from_str(map->ctx, str); - equal = isl_map_is_equal(map, map2); - isl_map_free(map2); - - return equal; -} - -void test_dep(struct isl_ctx *ctx) -{ - const char *str; - isl_space *dim; - isl_map *map; - isl_access_info *ai; - isl_flow *flow; - int depth; - struct must_may mm; - - depth = 3; - - str = "{ [2,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_alloc(map, &depth, &common_space, 2); - - str = "{ [0,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_add_source(ai, map, 1, &depth); - - str = "{ [1,i,0] -> [5] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_add_source(ai, map, 1, &depth); - - flow = isl_access_info_compute_flow(ai); - dim = isl_space_alloc(ctx, 0, 3, 3); - mm.must = isl_map_empty(isl_space_copy(dim)); - mm.may = isl_map_empty(dim); - - isl_flow_foreach(flow, collect_must_may, &mm); - - str = "{ [0,i,0] -> [2,i,0] : (0 <= i <= 4) or (6 <= i <= 10); " - " [1,10,0] -> [2,5,0] }"; - assert(map_is_equal(mm.must, str)); - str = "{ [i,j,k] -> [l,m,n] : 1 = 0 }"; - assert(map_is_equal(mm.may, str)); - - isl_map_free(mm.must); - isl_map_free(mm.may); - isl_flow_free(flow); - - - str = "{ [2,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_alloc(map, &depth, &common_space, 2); - - str = "{ [0,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_add_source(ai, map, 1, &depth); - - str = "{ [1,i,0] -> [5] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_add_source(ai, map, 0, &depth); - - flow = isl_access_info_compute_flow(ai); - dim = isl_space_alloc(ctx, 0, 3, 3); - mm.must = isl_map_empty(isl_space_copy(dim)); - mm.may = isl_map_empty(dim); - - isl_flow_foreach(flow, collect_must_may, &mm); - - str = "{ [0,i,0] -> [2,i,0] : (0 <= i <= 4) or (6 <= i <= 10) }"; - assert(map_is_equal(mm.must, str)); - str = "{ [0,5,0] -> [2,5,0]; [1,i,0] -> [2,5,0] : 0 <= i <= 10 }"; - assert(map_is_equal(mm.may, str)); - - isl_map_free(mm.must); - isl_map_free(mm.may); - isl_flow_free(flow); - - - str = "{ [2,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_alloc(map, &depth, &common_space, 2); - - str = "{ [0,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_add_source(ai, map, 0, &depth); - - str = "{ [1,i,0] -> [5] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_add_source(ai, map, 0, &depth); - - flow = isl_access_info_compute_flow(ai); - dim = isl_space_alloc(ctx, 0, 3, 3); - mm.must = isl_map_empty(isl_space_copy(dim)); - mm.may = isl_map_empty(dim); - - isl_flow_foreach(flow, collect_must_may, &mm); - - str = "{ [0,i,0] -> [2,i,0] : 0 <= i <= 10; " - " [1,i,0] -> [2,5,0] : 0 <= i <= 10 }"; - assert(map_is_equal(mm.may, str)); - str = "{ [i,j,k] -> [l,m,n] : 1 = 0 }"; - assert(map_is_equal(mm.must, str)); - - isl_map_free(mm.must); - isl_map_free(mm.may); - isl_flow_free(flow); - - - str = "{ [0,i,2] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_alloc(map, &depth, &common_space, 2); - - str = "{ [0,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_add_source(ai, map, 0, &depth); - - str = "{ [0,i,1] -> [5] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_add_source(ai, map, 0, &depth); - - flow = isl_access_info_compute_flow(ai); - dim = isl_space_alloc(ctx, 0, 3, 3); - mm.must = isl_map_empty(isl_space_copy(dim)); - mm.may = isl_map_empty(dim); - - isl_flow_foreach(flow, collect_must_may, &mm); - - str = "{ [0,i,0] -> [0,i,2] : 0 <= i <= 10; " - " [0,i,1] -> [0,5,2] : 0 <= i <= 5 }"; - assert(map_is_equal(mm.may, str)); - str = "{ [i,j,k] -> [l,m,n] : 1 = 0 }"; - assert(map_is_equal(mm.must, str)); - - isl_map_free(mm.must); - isl_map_free(mm.may); - isl_flow_free(flow); - - - str = "{ [0,i,1] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_alloc(map, &depth, &common_space, 2); - - str = "{ [0,i,0] -> [i] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_add_source(ai, map, 0, &depth); - - str = "{ [0,i,2] -> [5] : 0 <= i <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_add_source(ai, map, 0, &depth); - - flow = isl_access_info_compute_flow(ai); - dim = isl_space_alloc(ctx, 0, 3, 3); - mm.must = isl_map_empty(isl_space_copy(dim)); - mm.may = isl_map_empty(dim); - - isl_flow_foreach(flow, collect_must_may, &mm); - - str = "{ [0,i,0] -> [0,i,1] : 0 <= i <= 10; " - " [0,i,2] -> [0,5,1] : 0 <= i <= 4 }"; - assert(map_is_equal(mm.may, str)); - str = "{ [i,j,k] -> [l,m,n] : 1 = 0 }"; - assert(map_is_equal(mm.must, str)); - - isl_map_free(mm.must); - isl_map_free(mm.may); - isl_flow_free(flow); - - - depth = 5; - - str = "{ [1,i,0,0,0] -> [i,j] : 0 <= i <= 10 and 0 <= j <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_alloc(map, &depth, &common_space, 1); - - str = "{ [0,i,0,j,0] -> [i,j] : 0 <= i <= 10 and 0 <= j <= 10 }"; - map = isl_map_read_from_str(ctx, str); - ai = isl_access_info_add_source(ai, map, 1, &depth); - - flow = isl_access_info_compute_flow(ai); - dim = isl_space_alloc(ctx, 0, 5, 5); - mm.must = isl_map_empty(isl_space_copy(dim)); - mm.may = isl_map_empty(dim); - - isl_flow_foreach(flow, collect_must_may, &mm); - - str = "{ [0,i,0,j,0] -> [1,i,0,0,0] : 0 <= i,j <= 10 }"; - assert(map_is_equal(mm.must, str)); - str = "{ [0,0,0,0,0] -> [0,0,0,0,0] : 1 = 0 }"; - assert(map_is_equal(mm.may, str)); - - isl_map_free(mm.must); - isl_map_free(mm.may); - isl_flow_free(flow); -} - -int test_sv(isl_ctx *ctx) -{ - const char *str; - isl_map *map; - isl_union_map *umap; - int sv; - - str = "[N] -> { [i] -> [f] : 0 <= i <= N and 0 <= i - 10 f <= 9 }"; - map = isl_map_read_from_str(ctx, str); - sv = isl_map_is_single_valued(map); - isl_map_free(map); - if (sv < 0) - return -1; - if (!sv) - isl_die(ctx, isl_error_internal, - "map not detected as single valued", return -1); - - str = "[N] -> { [i] -> [f] : 0 <= i <= N and 0 <= i - 10 f <= 10 }"; - map = isl_map_read_from_str(ctx, str); - sv = isl_map_is_single_valued(map); - isl_map_free(map); - if (sv < 0) - return -1; - if (sv) - isl_die(ctx, isl_error_internal, - "map detected as single valued", return -1); - - str = "{ S1[i] -> [i] : 0 <= i <= 9; S2[i] -> [i] : 0 <= i <= 9 }"; - umap = isl_union_map_read_from_str(ctx, str); - sv = isl_union_map_is_single_valued(umap); - isl_union_map_free(umap); - if (sv < 0) - return -1; - if (!sv) - isl_die(ctx, isl_error_internal, - "map not detected as single valued", return -1); - - str = "{ [i] -> S1[i] : 0 <= i <= 9; [i] -> S2[i] : 0 <= i <= 9 }"; - umap = isl_union_map_read_from_str(ctx, str); - sv = isl_union_map_is_single_valued(umap); - isl_union_map_free(umap); - if (sv < 0) - return -1; - if (sv) - isl_die(ctx, isl_error_internal, - "map detected as single valued", return -1); - - return 0; -} - -void test_bijective_case(struct isl_ctx *ctx, const char *str, int bijective) -{ - isl_map *map; - - map = isl_map_read_from_str(ctx, str); - if (bijective) - assert(isl_map_is_bijective(map)); - else - assert(!isl_map_is_bijective(map)); - isl_map_free(map); -} - -void test_bijective(struct isl_ctx *ctx) -{ - test_bijective_case(ctx, "[N,M]->{[i,j] -> [i]}", 0); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [i] : j=i}", 1); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [i] : j=0}", 1); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [i] : j=N}", 1); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [j,i]}", 1); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [i+j]}", 0); - test_bijective_case(ctx, "[N,M]->{[i,j] -> []}", 0); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [i,j,N]}", 1); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [2i]}", 0); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [i,i]}", 0); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [2i,i]}", 0); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [2i,j]}", 1); - test_bijective_case(ctx, "[N,M]->{[i,j] -> [x,y] : 2x=i & y =j}", 1); -} - -void test_pwqp(struct isl_ctx *ctx) -{ - const char *str; - isl_set *set; - isl_pw_qpolynomial *pwqp1, *pwqp2; - - str = "{ [i,j,k] -> 1 + 9 * [i/5] + 7 * [j/11] + 4 * [k/13] }"; - pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp1 = isl_pw_qpolynomial_move_dims(pwqp1, isl_dim_param, 0, - isl_dim_in, 1, 1); - - str = "[j] -> { [i,k] -> 1 + 9 * [i/5] + 7 * [j/11] + 4 * [k/13] }"; - pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2); - - assert(isl_pw_qpolynomial_is_zero(pwqp1)); - - isl_pw_qpolynomial_free(pwqp1); - - str = "{ [i] -> i }"; - pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str); - str = "{ [k] : exists a : k = 2a }"; - set = isl_set_read_from_str(ctx, str); - pwqp1 = isl_pw_qpolynomial_gist(pwqp1, set); - str = "{ [i] -> i }"; - pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2); - - assert(isl_pw_qpolynomial_is_zero(pwqp1)); - - isl_pw_qpolynomial_free(pwqp1); - - str = "{ [i] -> i + [ (i + [i/3])/2 ] }"; - pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str); - str = "{ [10] }"; - set = isl_set_read_from_str(ctx, str); - pwqp1 = isl_pw_qpolynomial_gist(pwqp1, set); - str = "{ [i] -> 16 }"; - pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2); - - assert(isl_pw_qpolynomial_is_zero(pwqp1)); - - isl_pw_qpolynomial_free(pwqp1); - - str = "{ [i] -> ([(i)/2]) }"; - pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str); - str = "{ [k] : exists a : k = 2a+1 }"; - set = isl_set_read_from_str(ctx, str); - pwqp1 = isl_pw_qpolynomial_gist(pwqp1, set); - str = "{ [i] -> -1/2 + 1/2 * i }"; - pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2); - - assert(isl_pw_qpolynomial_is_zero(pwqp1)); - - isl_pw_qpolynomial_free(pwqp1); - - str = "{ [i] -> ([([i/2] + [i/2])/5]) }"; - pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str); - str = "{ [i] -> ([(2 * [i/2])/5]) }"; - pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2); - - assert(isl_pw_qpolynomial_is_zero(pwqp1)); - - isl_pw_qpolynomial_free(pwqp1); - - str = "{ [x] -> ([x/2] + [(x+1)/2]) }"; - pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str); - str = "{ [x] -> x }"; - pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2); - - assert(isl_pw_qpolynomial_is_zero(pwqp1)); - - isl_pw_qpolynomial_free(pwqp1); - - str = "{ [i] -> ([i/2]) : i >= 0; [i] -> ([i/3]) : i < 0 }"; - pwqp1 = isl_pw_qpolynomial_read_from_str(ctx, str); - pwqp2 = isl_pw_qpolynomial_read_from_str(ctx, str); - pwqp1 = isl_pw_qpolynomial_coalesce(pwqp1); - pwqp1 = isl_pw_qpolynomial_sub(pwqp1, pwqp2); - assert(isl_pw_qpolynomial_is_zero(pwqp1)); - isl_pw_qpolynomial_free(pwqp1); -} - -void test_split_periods(isl_ctx *ctx) -{ - const char *str; - isl_pw_qpolynomial *pwqp; - - str = "{ [U,V] -> 1/3 * U + 2/3 * V - [(U + 2V)/3] + [U/2] : " - "U + 2V + 3 >= 0 and - U -2V >= 0 and - U + 10 >= 0 and " - "U >= 0; [U,V] -> U^2 : U >= 100 }"; - pwqp = isl_pw_qpolynomial_read_from_str(ctx, str); - - pwqp = isl_pw_qpolynomial_split_periods(pwqp, 2); - assert(pwqp); - - isl_pw_qpolynomial_free(pwqp); -} - -void test_union(isl_ctx *ctx) -{ - const char *str; - isl_union_set *uset1, *uset2; - isl_union_map *umap1, *umap2; - - str = "{ [i] : 0 <= i <= 1 }"; - uset1 = isl_union_set_read_from_str(ctx, str); - str = "{ [1] -> [0] }"; - umap1 = isl_union_map_read_from_str(ctx, str); - - umap2 = isl_union_set_lex_gt_union_set(isl_union_set_copy(uset1), uset1); - assert(isl_union_map_is_equal(umap1, umap2)); - - isl_union_map_free(umap1); - isl_union_map_free(umap2); - - str = "{ A[i] -> B[i]; B[i] -> C[i]; A[0] -> C[1] }"; - umap1 = isl_union_map_read_from_str(ctx, str); - str = "{ A[i]; B[i] }"; - uset1 = isl_union_set_read_from_str(ctx, str); - - uset2 = isl_union_map_domain(umap1); - - assert(isl_union_set_is_equal(uset1, uset2)); - - isl_union_set_free(uset1); - isl_union_set_free(uset2); -} - -void test_bound(isl_ctx *ctx) -{ - const char *str; - isl_pw_qpolynomial *pwqp; - isl_pw_qpolynomial_fold *pwf; - - str = "{ [[a, b, c, d] -> [e]] -> 0 }"; - pwqp = isl_pw_qpolynomial_read_from_str(ctx, str); - pwf = isl_pw_qpolynomial_bound(pwqp, isl_fold_max, NULL); - assert(isl_pw_qpolynomial_fold_dim(pwf, isl_dim_in) == 4); - isl_pw_qpolynomial_fold_free(pwf); - - str = "{ [[x]->[x]] -> 1 : exists a : x = 2 a }"; - pwqp = isl_pw_qpolynomial_read_from_str(ctx, str); - pwf = isl_pw_qpolynomial_bound(pwqp, isl_fold_max, NULL); - assert(isl_pw_qpolynomial_fold_dim(pwf, isl_dim_in) == 1); - isl_pw_qpolynomial_fold_free(pwf); -} - -void test_lift(isl_ctx *ctx) -{ - const char *str; - isl_basic_map *bmap; - isl_basic_set *bset; - - str = "{ [i0] : exists e0 : i0 = 4e0 }"; - bset = isl_basic_set_read_from_str(ctx, str); - bset = isl_basic_set_lift(bset); - bmap = isl_basic_map_from_range(bset); - bset = isl_basic_map_domain(bmap); - isl_basic_set_free(bset); -} - -void test_subset(isl_ctx *ctx) -{ - const char *str; - isl_set *set1, *set2; - - str = "{ [112, 0] }"; - set1 = isl_set_read_from_str(ctx, str); - str = "{ [i0, i1] : exists (e0 = [(i0 - i1)/16], e1: " - "16e0 <= i0 - i1 and 16e0 >= -15 + i0 - i1 and " - "16e1 <= i1 and 16e0 >= -i1 and 16e1 >= -i0 + i1) }"; - set2 = isl_set_read_from_str(ctx, str); - assert(isl_set_is_subset(set1, set2)); - isl_set_free(set1); - isl_set_free(set2); -} - -void test_factorize(isl_ctx *ctx) -{ - const char *str; - isl_basic_set *bset; - isl_factorizer *f; - - str = "{ [i0, i1, i2, i3, i4, i5, i6, i7] : 3i5 <= 2 - 2i0 and " - "i0 >= -2 and i6 >= 1 + i3 and i7 >= 0 and 3i5 >= -2i0 and " - "2i4 <= i2 and i6 >= 1 + 2i0 + 3i1 and i4 <= -1 and " - "i6 >= 1 + 2i0 + 3i5 and i6 <= 2 + 2i0 + 3i5 and " - "3i5 <= 2 - 2i0 - i2 + 3i4 and i6 <= 2 + 2i0 + 3i1 and " - "i0 <= -1 and i7 <= i2 + i3 - 3i4 - i6 and " - "3i5 >= -2i0 - i2 + 3i4 }"; - bset = isl_basic_set_read_from_str(ctx, str); - f = isl_basic_set_factorizer(bset); - assert(f); - isl_basic_set_free(bset); - isl_factorizer_free(f); - - str = "{ [i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12] : " - "i12 <= 2 + i0 - i11 and 2i8 >= -i4 and i11 >= i1 and " - "3i5 <= -i2 and 2i11 >= -i4 - 2i7 and i11 <= 3 + i0 + 3i9 and " - "i11 <= -i4 - 2i7 and i12 >= -i10 and i2 >= -2 and " - "i11 >= i1 + 3i10 and i11 >= 1 + i0 + 3i9 and " - "i11 <= 1 - i4 - 2i8 and 6i6 <= 6 - i2 and 3i6 >= 1 - i2 and " - "i11 <= 2 + i1 and i12 <= i4 + i11 and i12 >= i0 - i11 and " - "3i5 >= -2 - i2 and i12 >= -1 + i4 + i11 and 3i3 <= 3 - i2 and " - "9i6 <= 11 - i2 + 6i5 and 3i3 >= 1 - i2 and " - "9i6 <= 5 - i2 + 6i3 and i12 <= -1 and i2 <= 0 }"; - bset = isl_basic_set_read_from_str(ctx, str); - f = isl_basic_set_factorizer(bset); - assert(f); - isl_basic_set_free(bset); - isl_factorizer_free(f); -} - -static int check_injective(__isl_take isl_map *map, void *user) -{ - int *injective = user; - - *injective = isl_map_is_injective(map); - isl_map_free(map); - - if (*injective < 0 || !*injective) - return -1; - - return 0; -} - -int test_one_schedule(isl_ctx *ctx, const char *d, const char *w, - const char *r, const char *s, int tilable, int parallel) -{ - int i; - isl_union_set *D; - isl_union_map *W, *R, *S; - isl_union_map *empty; - isl_union_map *dep_raw, *dep_war, *dep_waw, *dep; - isl_union_map *validity, *proximity; - isl_union_map *schedule; - isl_union_map *test; - isl_union_set *delta; - isl_union_set *domain; - isl_set *delta_set; - isl_set *slice; - isl_set *origin; - isl_schedule *sched; - int is_nonneg, is_parallel, is_tilable, is_injection, is_complete; - - D = isl_union_set_read_from_str(ctx, d); - W = isl_union_map_read_from_str(ctx, w); - R = isl_union_map_read_from_str(ctx, r); - S = isl_union_map_read_from_str(ctx, s); - - W = isl_union_map_intersect_domain(W, isl_union_set_copy(D)); - R = isl_union_map_intersect_domain(R, isl_union_set_copy(D)); - - empty = isl_union_map_empty(isl_union_map_get_space(S)); - isl_union_map_compute_flow(isl_union_map_copy(R), - isl_union_map_copy(W), empty, - isl_union_map_copy(S), - &dep_raw, NULL, NULL, NULL); - isl_union_map_compute_flow(isl_union_map_copy(W), - isl_union_map_copy(W), - isl_union_map_copy(R), - isl_union_map_copy(S), - &dep_waw, &dep_war, NULL, NULL); - - dep = isl_union_map_union(dep_waw, dep_war); - dep = isl_union_map_union(dep, dep_raw); - validity = isl_union_map_copy(dep); - proximity = isl_union_map_copy(dep); - - sched = isl_union_set_compute_schedule(isl_union_set_copy(D), - validity, proximity); - schedule = isl_schedule_get_map(sched); - isl_schedule_free(sched); - isl_union_map_free(W); - isl_union_map_free(R); - isl_union_map_free(S); - - is_injection = 1; - isl_union_map_foreach_map(schedule, &check_injective, &is_injection); - - domain = isl_union_map_domain(isl_union_map_copy(schedule)); - is_complete = isl_union_set_is_subset(D, domain); - isl_union_set_free(D); - isl_union_set_free(domain); - - test = isl_union_map_reverse(isl_union_map_copy(schedule)); - test = isl_union_map_apply_range(test, dep); - test = isl_union_map_apply_range(test, schedule); - - delta = isl_union_map_deltas(test); - if (isl_union_set_n_set(delta) == 0) { - is_tilable = 1; - is_parallel = 1; - is_nonneg = 1; - isl_union_set_free(delta); - } else { - delta_set = isl_set_from_union_set(delta); - - slice = isl_set_universe(isl_set_get_space(delta_set)); - for (i = 0; i < tilable; ++i) - slice = isl_set_lower_bound_si(slice, isl_dim_set, i, 0); - is_tilable = isl_set_is_subset(delta_set, slice); - isl_set_free(slice); - - slice = isl_set_universe(isl_set_get_space(delta_set)); - for (i = 0; i < parallel; ++i) - slice = isl_set_fix_si(slice, isl_dim_set, i, 0); - is_parallel = isl_set_is_subset(delta_set, slice); - isl_set_free(slice); - - origin = isl_set_universe(isl_set_get_space(delta_set)); - for (i = 0; i < isl_set_dim(origin, isl_dim_set); ++i) - origin = isl_set_fix_si(origin, isl_dim_set, i, 0); - - delta_set = isl_set_union(delta_set, isl_set_copy(origin)); - delta_set = isl_set_lexmin(delta_set); - - is_nonneg = isl_set_is_equal(delta_set, origin); - - isl_set_free(origin); - isl_set_free(delta_set); - } - - if (is_nonneg < 0 || is_parallel < 0 || is_tilable < 0 || - is_injection < 0 || is_complete < 0) - return -1; - if (!is_complete) - isl_die(ctx, isl_error_unknown, - "generated schedule incomplete", return -1); - if (!is_injection) - isl_die(ctx, isl_error_unknown, - "generated schedule not injective on each statement", - return -1); - if (!is_nonneg) - isl_die(ctx, isl_error_unknown, - "negative dependences in generated schedule", - return -1); - if (!is_tilable) - isl_die(ctx, isl_error_unknown, - "generated schedule not as tilable as expected", - return -1); - if (!is_parallel) - isl_die(ctx, isl_error_unknown, - "generated schedule not as parallel as expected", - return -1); - - return 0; -} - -int test_special_schedule(isl_ctx *ctx) -{ - const char *str; - isl_union_set *dom; - isl_union_map *empty; - isl_union_map *dep; - isl_union_map *sched1, *sched2; - isl_schedule *schedule; - int equal; - - str = "{ S[i,j] : 0 <= i <= 10 }"; - dom = isl_union_set_read_from_str(ctx, str); - str = "{ S[i,j] -> S[i+1,j] : 0 <= i,j <= 10 }"; - dep = isl_union_map_read_from_str(ctx, str); - empty = isl_union_map_read_from_str(ctx, "{}"); - schedule = isl_union_set_compute_schedule(dom, empty, dep); - sched1 = isl_schedule_get_map(schedule); - isl_schedule_free(schedule); - - str = "{ S[i, j] -> [j, i] }"; - sched2 = isl_union_map_read_from_str(ctx, str); - - equal = isl_union_map_is_equal(sched1, sched2); - isl_union_map_free(sched1); - isl_union_map_free(sched2); - - if (equal < 0) - return -1; - if (!equal) - isl_die(ctx, isl_error_unknown, "unexpected schedule", - return -1); - - return 0; -} - -int test_schedule(isl_ctx *ctx) -{ - const char *D, *W, *R, *S; - - /* Jacobi */ - D = "[T,N] -> { S1[t,i] : 1 <= t <= T and 2 <= i <= N - 1 }"; - W = "{ S1[t,i] -> a[t,i] }"; - R = "{ S1[t,i] -> a[t-1,i]; S1[t,i] -> a[t-1,i-1]; " - "S1[t,i] -> a[t-1,i+1] }"; - S = "{ S1[t,i] -> [t,i] }"; - if (test_one_schedule(ctx, D, W, R, S, 2, 0) < 0) - return -1; - - /* Fig. 5 of CC2008 */ - D = "[N] -> { S_0[i, j] : i >= 0 and i <= -1 + N and j >= 2 and " - "j <= -1 + N }"; - W = "[N] -> { S_0[i, j] -> a[i, j] : i >= 0 and i <= -1 + N and " - "j >= 2 and j <= -1 + N }"; - R = "[N] -> { S_0[i, j] -> a[j, i] : i >= 0 and i <= -1 + N and " - "j >= 2 and j <= -1 + N; " - "S_0[i, j] -> a[i, -1 + j] : i >= 0 and i <= -1 + N and " - "j >= 2 and j <= -1 + N }"; - S = "[N] -> { S_0[i, j] -> [0, i, 0, j, 0] }"; - if (test_one_schedule(ctx, D, W, R, S, 2, 0) < 0) - return -1; - - D = "{ S1[i] : 0 <= i <= 10; S2[i] : 0 <= i <= 9 }"; - W = "{ S1[i] -> a[i] }"; - R = "{ S2[i] -> a[i+1] }"; - S = "{ S1[i] -> [0,i]; S2[i] -> [1,i] }"; - if (test_one_schedule(ctx, D, W, R, S, 1, 1) < 0) - return -1; - - D = "{ S1[i] : 0 <= i < 10; S2[i] : 0 <= i < 10 }"; - W = "{ S1[i] -> a[i] }"; - R = "{ S2[i] -> a[9-i] }"; - S = "{ S1[i] -> [0,i]; S2[i] -> [1,i] }"; - if (test_one_schedule(ctx, D, W, R, S, 1, 1) < 0) - return -1; - - D = "[N] -> { S1[i] : 0 <= i < N; S2[i] : 0 <= i < N }"; - W = "{ S1[i] -> a[i] }"; - R = "[N] -> { S2[i] -> a[N-1-i] }"; - S = "{ S1[i] -> [0,i]; S2[i] -> [1,i] }"; - if (test_one_schedule(ctx, D, W, R, S, 1, 1) < 0) - return -1; - - D = "{ S1[i] : 0 < i < 10; S2[i] : 0 <= i < 10 }"; - W = "{ S1[i] -> a[i]; S2[i] -> b[i] }"; - R = "{ S2[i] -> a[i]; S1[i] -> b[i-1] }"; - S = "{ S1[i] -> [i,0]; S2[i] -> [i,1] }"; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - - D = "[N] -> { S1[i] : 1 <= i <= N; S2[i,j] : 1 <= i,j <= N }"; - W = "{ S1[i] -> a[0,i]; S2[i,j] -> a[i,j] }"; - R = "{ S2[i,j] -> a[i-1,j] }"; - S = "{ S1[i] -> [0,i,0]; S2[i,j] -> [1,i,j] }"; - if (test_one_schedule(ctx, D, W, R, S, 2, 1) < 0) - return -1; - - D = "[N] -> { S1[i] : 1 <= i <= N; S2[i,j] : 1 <= i,j <= N }"; - W = "{ S1[i] -> a[i,0]; S2[i,j] -> a[i,j] }"; - R = "{ S2[i,j] -> a[i,j-1] }"; - S = "{ S1[i] -> [0,i,0]; S2[i,j] -> [1,i,j] }"; - if (test_one_schedule(ctx, D, W, R, S, 2, 1) < 0) - return -1; - - D = "[N] -> { S_0[]; S_1[i] : i >= 0 and i <= -1 + N; S_2[] }"; - W = "[N] -> { S_0[] -> a[0]; S_2[] -> b[0]; " - "S_1[i] -> a[1 + i] : i >= 0 and i <= -1 + N }"; - R = "[N] -> { S_2[] -> a[N]; S_1[i] -> a[i] : i >= 0 and i <= -1 + N }"; - S = "[N] -> { S_1[i] -> [1, i, 0]; S_2[] -> [2, 0, 1]; " - "S_0[] -> [0, 0, 0] }"; - if (test_one_schedule(ctx, D, W, R, S, 1, 0) < 0) - return -1; - ctx->opt->schedule_parametric = 0; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - ctx->opt->schedule_parametric = 1; - - D = "[N] -> { S1[i] : 1 <= i <= N; S2[i] : 1 <= i <= N; " - "S3[i,j] : 1 <= i,j <= N; S4[i] : 1 <= i <= N }"; - W = "{ S1[i] -> a[i,0]; S2[i] -> a[0,i]; S3[i,j] -> a[i,j] }"; - R = "[N] -> { S3[i,j] -> a[i-1,j]; S3[i,j] -> a[i,j-1]; " - "S4[i] -> a[i,N] }"; - S = "{ S1[i] -> [0,i,0]; S2[i] -> [1,i,0]; S3[i,j] -> [2,i,j]; " - "S4[i] -> [4,i,0] }"; - if (test_one_schedule(ctx, D, W, R, S, 2, 0) < 0) - return -1; - - D = "[N] -> { S_0[i, j] : i >= 1 and i <= N and j >= 1 and j <= N }"; - W = "[N] -> { S_0[i, j] -> s[0] : i >= 1 and i <= N and j >= 1 and " - "j <= N }"; - R = "[N] -> { S_0[i, j] -> s[0] : i >= 1 and i <= N and j >= 1 and " - "j <= N; " - "S_0[i, j] -> a[i, j] : i >= 1 and i <= N and j >= 1 and " - "j <= N }"; - S = "[N] -> { S_0[i, j] -> [0, i, 0, j, 0] }"; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - - D = "[N] -> { S_0[t] : t >= 0 and t <= -1 + N; " - " S_2[t] : t >= 0 and t <= -1 + N; " - " S_1[t, i] : t >= 0 and t <= -1 + N and i >= 0 and " - "i <= -1 + N }"; - W = "[N] -> { S_0[t] -> a[t, 0] : t >= 0 and t <= -1 + N; " - " S_2[t] -> b[t] : t >= 0 and t <= -1 + N; " - " S_1[t, i] -> a[t, 1 + i] : t >= 0 and t <= -1 + N and " - "i >= 0 and i <= -1 + N }"; - R = "[N] -> { S_1[t, i] -> a[t, i] : t >= 0 and t <= -1 + N and " - "i >= 0 and i <= -1 + N; " - " S_2[t] -> a[t, N] : t >= 0 and t <= -1 + N }"; - S = "[N] -> { S_2[t] -> [0, t, 2]; S_1[t, i] -> [0, t, 1, i, 0]; " - " S_0[t] -> [0, t, 0] }"; - - if (test_one_schedule(ctx, D, W, R, S, 2, 1) < 0) - return -1; - ctx->opt->schedule_parametric = 0; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - ctx->opt->schedule_parametric = 1; - - D = "[N] -> { S1[i,j] : 0 <= i,j < N; S2[i,j] : 0 <= i,j < N }"; - S = "{ S1[i,j] -> [0,i,j]; S2[i,j] -> [1,i,j] }"; - if (test_one_schedule(ctx, D, "{}", "{}", S, 2, 2) < 0) - return -1; - - D = "[M, N] -> { S_1[i] : i >= 0 and i <= -1 + M; " - "S_0[i, j] : i >= 0 and i <= -1 + M and j >= 0 and j <= -1 + N }"; - W = "[M, N] -> { S_0[i, j] -> a[j] : i >= 0 and i <= -1 + M and " - "j >= 0 and j <= -1 + N; " - "S_1[i] -> b[0] : i >= 0 and i <= -1 + M }"; - R = "[M, N] -> { S_0[i, j] -> a[0] : i >= 0 and i <= -1 + M and " - "j >= 0 and j <= -1 + N; " - "S_1[i] -> b[0] : i >= 0 and i <= -1 + M }"; - S = "[M, N] -> { S_1[i] -> [1, i, 0]; S_0[i, j] -> [0, i, 0, j, 0] }"; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - - D = "{ S_0[i] : i >= 0 }"; - W = "{ S_0[i] -> a[i] : i >= 0 }"; - R = "{ S_0[i] -> a[0] : i >= 0 }"; - S = "{ S_0[i] -> [0, i, 0] }"; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - - D = "{ S_0[i] : i >= 0; S_1[i] : i >= 0 }"; - W = "{ S_0[i] -> a[i] : i >= 0; S_1[i] -> b[i] : i >= 0 }"; - R = "{ S_0[i] -> b[0] : i >= 0; S_1[i] -> a[i] : i >= 0 }"; - S = "{ S_1[i] -> [0, i, 1]; S_0[i] -> [0, i, 0] }"; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - - D = "[n] -> { S_0[j, k] : j <= -1 + n and j >= 0 and " - "k <= -1 + n and k >= 0 }"; - W = "[n] -> { S_0[j, k] -> B[j] : j <= -1 + n and j >= 0 and " "k <= -1 + n and k >= 0 }"; - R = "[n] -> { S_0[j, k] -> B[j] : j <= -1 + n and j >= 0 and " - "k <= -1 + n and k >= 0; " - "S_0[j, k] -> B[k] : j <= -1 + n and j >= 0 and " - "k <= -1 + n and k >= 0; " - "S_0[j, k] -> A[k] : j <= -1 + n and j >= 0 and " - "k <= -1 + n and k >= 0 }"; - S = "[n] -> { S_0[j, k] -> [2, j, k] }"; - ctx->opt->schedule_outer_zero_distance = 1; - if (test_one_schedule(ctx, D, W, R, S, 0, 0) < 0) - return -1; - ctx->opt->schedule_outer_zero_distance = 0; - - return test_special_schedule(ctx); -} - -int test_plain_injective(isl_ctx *ctx, const char *str, int injective) -{ - isl_union_map *umap; - int test; - - umap = isl_union_map_read_from_str(ctx, str); - test = isl_union_map_plain_is_injective(umap); - isl_union_map_free(umap); - if (test < 0) - return -1; - if (test == injective) - return 0; - if (injective) - isl_die(ctx, isl_error_unknown, - "map not detected as injective", return -1); - else - isl_die(ctx, isl_error_unknown, - "map detected as injective", return -1); -} - -int test_injective(isl_ctx *ctx) -{ - const char *str; - - if (test_plain_injective(ctx, "{S[i,j] -> A[0]; T[i,j] -> B[1]}", 0)) - return -1; - if (test_plain_injective(ctx, "{S[] -> A[0]; T[] -> B[0]}", 1)) - return -1; - if (test_plain_injective(ctx, "{S[] -> A[0]; T[] -> A[1]}", 1)) - return -1; - if (test_plain_injective(ctx, "{S[] -> A[0]; T[] -> A[0]}", 0)) - return -1; - if (test_plain_injective(ctx, "{S[i] -> A[i,0]; T[i] -> A[i,1]}", 1)) - return -1; - if (test_plain_injective(ctx, "{S[i] -> A[i]; T[i] -> A[i]}", 0)) - return -1; - if (test_plain_injective(ctx, "{S[] -> A[0,0]; T[] -> A[0,1]}", 1)) - return -1; - if (test_plain_injective(ctx, "{S[] -> A[0,0]; T[] -> A[1,0]}", 1)) - return -1; - - str = "{S[] -> A[0,0]; T[] -> A[0,1]; U[] -> A[1,0]}"; - if (test_plain_injective(ctx, str, 1)) - return -1; - str = "{S[] -> A[0,0]; T[] -> A[0,1]; U[] -> A[0,0]}"; - if (test_plain_injective(ctx, str, 0)) - return -1; - - return 0; -} - -int test_aff(isl_ctx *ctx) -{ - const char *str; - isl_set *set; - isl_space *dim; - isl_local_space *ls; - isl_aff *aff; - int zero; - - dim = isl_space_set_alloc(ctx, 0, 1); - ls = isl_local_space_from_space(dim); - aff = isl_aff_zero_on_domain(ls); - - aff = isl_aff_add_coefficient_si(aff, isl_dim_in, 0, 1); - aff = isl_aff_scale_down_ui(aff, 3); - aff = isl_aff_floor(aff); - aff = isl_aff_add_coefficient_si(aff, isl_dim_in, 0, 1); - aff = isl_aff_scale_down_ui(aff, 2); - aff = isl_aff_floor(aff); - aff = isl_aff_add_coefficient_si(aff, isl_dim_in, 0, 1); - - str = "{ [10] }"; - set = isl_set_read_from_str(ctx, str); - aff = isl_aff_gist(aff, set); - - aff = isl_aff_add_constant_si(aff, -16); - zero = isl_aff_plain_is_zero(aff); - isl_aff_free(aff); - - if (zero < 0) - return -1; - if (!zero) - isl_die(ctx, isl_error_unknown, "unexpected result", return -1); - - return 0; -} - -int test_dim_max(isl_ctx *ctx) -{ - int equal; - const char *str; - isl_set *set1, *set2; - isl_set *set; - isl_map *map; - isl_pw_aff *pwaff; - - str = "[N] -> { [i] : 0 <= i <= min(N,10) }"; - set = isl_set_read_from_str(ctx, str); - pwaff = isl_set_dim_max(set, 0); - set1 = isl_set_from_pw_aff(pwaff); - str = "[N] -> { [10] : N >= 10; [N] : N <= 9 and N >= 0 }"; - set2 = isl_set_read_from_str(ctx, str); - equal = isl_set_is_equal(set1, set2); - isl_set_free(set1); - isl_set_free(set2); - if (equal < 0) - return -1; - if (!equal) - isl_die(ctx, isl_error_unknown, "unexpected result", return -1); - - str = "[N] -> { [i] : 0 <= i <= max(2N,N+6) }"; - set = isl_set_read_from_str(ctx, str); - pwaff = isl_set_dim_max(set, 0); - set1 = isl_set_from_pw_aff(pwaff); - str = "[N] -> { [6 + N] : -6 <= N <= 5; [2N] : N >= 6 }"; - set2 = isl_set_read_from_str(ctx, str); - equal = isl_set_is_equal(set1, set2); - isl_set_free(set1); - isl_set_free(set2); - if (equal < 0) - return -1; - if (!equal) - isl_die(ctx, isl_error_unknown, "unexpected result", return -1); - - str = "[N] -> { [i] : 0 <= i <= 2N or 0 <= i <= N+6 }"; - set = isl_set_read_from_str(ctx, str); - pwaff = isl_set_dim_max(set, 0); - set1 = isl_set_from_pw_aff(pwaff); - str = "[N] -> { [6 + N] : -6 <= N <= 5; [2N] : N >= 6 }"; - set2 = isl_set_read_from_str(ctx, str); - equal = isl_set_is_equal(set1, set2); - isl_set_free(set1); - isl_set_free(set2); - if (equal < 0) - return -1; - if (!equal) - isl_die(ctx, isl_error_unknown, "unexpected result", return -1); - - str = "[N,M] -> { [i,j] -> [([i/16]), i%16, ([j/16]), j%16] : " - "0 <= i < N and 0 <= j < M }"; - map = isl_map_read_from_str(ctx, str); - set = isl_map_range(map); - - pwaff = isl_set_dim_max(isl_set_copy(set), 0); - set1 = isl_set_from_pw_aff(pwaff); - str = "[N,M] -> { [([(N-1)/16])] : M,N > 0 }"; - set2 = isl_set_read_from_str(ctx, str); - equal = isl_set_is_equal(set1, set2); - isl_set_free(set1); - isl_set_free(set2); - - pwaff = isl_set_dim_max(isl_set_copy(set), 3); - set1 = isl_set_from_pw_aff(pwaff); - str = "[N,M] -> { [t] : t = min(M-1,15) and M,N > 0 }"; - set2 = isl_set_read_from_str(ctx, str); - if (equal >= 0 && equal) - equal = isl_set_is_equal(set1, set2); - isl_set_free(set1); - isl_set_free(set2); - - isl_set_free(set); - - if (equal < 0) - return -1; - if (!equal) - isl_die(ctx, isl_error_unknown, "unexpected result", return -1); - - return 0; -} - -int test_product(isl_ctx *ctx) -{ - const char *str; - isl_set *set; - int ok; - - str = "{ A[i] }"; - set = isl_set_read_from_str(ctx, str); - set = isl_set_product(set, isl_set_copy(set)); - ok = isl_set_is_wrapping(set); - isl_set_free(set); - if (ok < 0) - return -1; - if (!ok) - isl_die(ctx, isl_error_unknown, "unexpected result", return -1); - - return 0; -} - -int test_equal(isl_ctx *ctx) -{ - const char *str; - isl_set *set, *set2; - int equal; - - str = "{ S_6[i] }"; - set = isl_set_read_from_str(ctx, str); - str = "{ S_7[i] }"; - set2 = isl_set_read_from_str(ctx, str); - equal = isl_set_is_equal(set, set2); - isl_set_free(set); - isl_set_free(set2); - if (equal < 0) - return -1; - if (equal) - isl_die(ctx, isl_error_unknown, "unexpected result", return -1); - - return 0; -} - -static int test_plain_fixed(isl_ctx *ctx, __isl_take isl_map *map, - enum isl_dim_type type, unsigned pos, int fixed) -{ - int test; - - test = isl_map_plain_is_fixed(map, type, pos, NULL); - isl_map_free(map); - if (test < 0) - return -1; - if (test == fixed) - return 0; - if (fixed) - isl_die(ctx, isl_error_unknown, - "map not detected as fixed", return -1); - else - isl_die(ctx, isl_error_unknown, - "map detected as fixed", return -1); -} - -int test_fixed(isl_ctx *ctx) -{ - const char *str; - isl_map *map; - - str = "{ [i] -> [i] }"; - map = isl_map_read_from_str(ctx, str); - if (test_plain_fixed(ctx, map, isl_dim_out, 0, 0)) - return -1; - str = "{ [i] -> [1] }"; - map = isl_map_read_from_str(ctx, str); - if (test_plain_fixed(ctx, map, isl_dim_out, 0, 1)) - return -1; - str = "{ S_1[p1] -> [o0] : o0 = -2 and p1 >= 1 and p1 <= 7 }"; - map = isl_map_read_from_str(ctx, str); - if (test_plain_fixed(ctx, map, isl_dim_out, 0, 1)) - return -1; - map = isl_map_read_from_str(ctx, str); - map = isl_map_neg(map); - if (test_plain_fixed(ctx, map, isl_dim_out, 0, 1)) - return -1; - - return 0; -} - -int test_union_pw(isl_ctx *ctx) -{ - int equal; - const char *str; - isl_union_set *uset; - isl_union_pw_qpolynomial *upwqp1, *upwqp2; - - str = "{ [x] -> x^2 }"; - upwqp1 = isl_union_pw_qpolynomial_read_from_str(ctx, str); - upwqp2 = isl_union_pw_qpolynomial_copy(upwqp1); - uset = isl_union_pw_qpolynomial_domain(upwqp1); - upwqp1 = isl_union_pw_qpolynomial_copy(upwqp2); - upwqp1 = isl_union_pw_qpolynomial_intersect_domain(upwqp1, uset); - equal = isl_union_pw_qpolynomial_plain_is_equal(upwqp1, upwqp2); - isl_union_pw_qpolynomial_free(upwqp1); - isl_union_pw_qpolynomial_free(upwqp2); - if (equal < 0) - return -1; - if (!equal) - isl_die(ctx, isl_error_unknown, "unexpected result", return -1); - - return 0; -} - -int main() -{ - struct isl_ctx *ctx; - - srcdir = getenv("srcdir"); - assert(srcdir); - - ctx = isl_ctx_alloc(); - if (test_fixed(ctx) < 0) - goto error; - if (test_equal(ctx) < 0) - goto error; - if (test_product(ctx) < 0) - goto error; - if (test_dim_max(ctx) < 0) - goto error; - if (test_aff(ctx) < 0) - goto error; - if (test_injective(ctx) < 0) - goto error; - if (test_schedule(ctx) < 0) - goto error; - if (test_union_pw(ctx) < 0) - goto error; - test_factorize(ctx); - test_subset(ctx); - test_lift(ctx); - test_bound(ctx); - test_union(ctx); - test_split_periods(ctx); - test_parse(ctx); - test_pwqp(ctx); - test_lex(ctx); - if (test_sv(ctx) < 0) - goto error; - test_bijective(ctx); - test_dep(ctx); - test_read(ctx); - test_bounded(ctx); - test_construction(ctx); - test_dim(ctx); - test_div(ctx); - test_application(ctx); - test_affine_hull(ctx); - test_convex_hull(ctx); - test_gist(ctx); - test_coalesce(ctx); - test_closure(ctx); - test_lexmin(ctx); - isl_ctx_free(ctx); - return 0; -error: - isl_ctx_free(ctx); - return -1; -} diff --git a/cloog-0.17.0/isl/isl_transitive_closure.c b/cloog-0.17.0/isl/isl_transitive_closure.c deleted file mode 100644 index 20e020e..0000000 --- a/cloog-0.17.0/isl/isl_transitive_closure.c +++ /dev/null @@ -1,3104 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -int isl_map_is_transitively_closed(__isl_keep isl_map *map) -{ - isl_map *map2; - int closed; - - map2 = isl_map_apply_range(isl_map_copy(map), isl_map_copy(map)); - closed = isl_map_is_subset(map2, map); - isl_map_free(map2); - - return closed; -} - -int isl_union_map_is_transitively_closed(__isl_keep isl_union_map *umap) -{ - isl_union_map *umap2; - int closed; - - umap2 = isl_union_map_apply_range(isl_union_map_copy(umap), - isl_union_map_copy(umap)); - closed = isl_union_map_is_subset(umap2, umap); - isl_union_map_free(umap2); - - return closed; -} - -/* Given a map that represents a path with the length of the path - * encoded as the difference between the last output coordindate - * and the last input coordinate, set this length to either - * exactly "length" (if "exactly" is set) or at least "length" - * (if "exactly" is not set). - */ -static __isl_give isl_map *set_path_length(__isl_take isl_map *map, - int exactly, int length) -{ - isl_space *dim; - struct isl_basic_map *bmap; - unsigned d; - unsigned nparam; - int k; - isl_int *c; - - if (!map) - return NULL; - - dim = isl_map_get_space(map); - d = isl_space_dim(dim, isl_dim_in); - nparam = isl_space_dim(dim, isl_dim_param); - bmap = isl_basic_map_alloc_space(dim, 0, 1, 1); - if (exactly) { - k = isl_basic_map_alloc_equality(bmap); - c = bmap->eq[k]; - } else { - k = isl_basic_map_alloc_inequality(bmap); - c = bmap->ineq[k]; - } - if (k < 0) - goto error; - isl_seq_clr(c, 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(c[0], -length); - isl_int_set_si(c[1 + nparam + d - 1], -1); - isl_int_set_si(c[1 + nparam + d + d - 1], 1); - - bmap = isl_basic_map_finalize(bmap); - map = isl_map_intersect(map, isl_map_from_basic_map(bmap)); - - return map; -error: - isl_basic_map_free(bmap); - isl_map_free(map); - return NULL; -} - -/* Check whether the overapproximation of the power of "map" is exactly - * the power of "map". Let R be "map" and A_k the overapproximation. - * The approximation is exact if - * - * A_1 = R - * A_k = A_{k-1} \circ R k >= 2 - * - * Since A_k is known to be an overapproximation, we only need to check - * - * A_1 \subset R - * A_k \subset A_{k-1} \circ R k >= 2 - * - * In practice, "app" has an extra input and output coordinate - * to encode the length of the path. So, we first need to add - * this coordinate to "map" and set the length of the path to - * one. - */ -static int check_power_exactness(__isl_take isl_map *map, - __isl_take isl_map *app) -{ - int exact; - isl_map *app_1; - isl_map *app_2; - - map = isl_map_add_dims(map, isl_dim_in, 1); - map = isl_map_add_dims(map, isl_dim_out, 1); - map = set_path_length(map, 1, 1); - - app_1 = set_path_length(isl_map_copy(app), 1, 1); - - exact = isl_map_is_subset(app_1, map); - isl_map_free(app_1); - - if (!exact || exact < 0) { - isl_map_free(app); - isl_map_free(map); - return exact; - } - - app_1 = set_path_length(isl_map_copy(app), 0, 1); - app_2 = set_path_length(app, 0, 2); - app_1 = isl_map_apply_range(map, app_1); - - exact = isl_map_is_subset(app_2, app_1); - - isl_map_free(app_1); - isl_map_free(app_2); - - return exact; -} - -/* Check whether the overapproximation of the power of "map" is exactly - * the power of "map", possibly after projecting out the power (if "project" - * is set). - * - * If "project" is set and if "steps" can only result in acyclic paths, - * then we check - * - * A = R \cup (A \circ R) - * - * where A is the overapproximation with the power projected out, i.e., - * an overapproximation of the transitive closure. - * More specifically, since A is known to be an overapproximation, we check - * - * A \subset R \cup (A \circ R) - * - * Otherwise, we check if the power is exact. - * - * Note that "app" has an extra input and output coordinate to encode - * the length of the part. If we are only interested in the transitive - * closure, then we can simply project out these coordinates first. - */ -static int check_exactness(__isl_take isl_map *map, __isl_take isl_map *app, - int project) -{ - isl_map *test; - int exact; - unsigned d; - - if (!project) - return check_power_exactness(map, app); - - d = isl_map_dim(map, isl_dim_in); - app = set_path_length(app, 0, 1); - app = isl_map_project_out(app, isl_dim_in, d, 1); - app = isl_map_project_out(app, isl_dim_out, d, 1); - - app = isl_map_reset_space(app, isl_map_get_space(map)); - - test = isl_map_apply_range(isl_map_copy(map), isl_map_copy(app)); - test = isl_map_union(test, isl_map_copy(map)); - - exact = isl_map_is_subset(app, test); - - isl_map_free(app); - isl_map_free(test); - - isl_map_free(map); - - return exact; -} - -/* - * The transitive closure implementation is based on the paper - * "Computing the Transitive Closure of a Union of Affine Integer - * Tuple Relations" by Anna Beletska, Denis Barthou, Wlodzimierz Bielecki and - * Albert Cohen. - */ - -/* Given a set of n offsets v_i (the rows of "steps"), construct a relation - * of the given dimension specification (Z^{n+1} -> Z^{n+1}) - * that maps an element x to any element that can be reached - * by taking a non-negative number of steps along any of - * the extended offsets v'_i = [v_i 1]. - * That is, construct - * - * { [x] -> [y] : exists k_i >= 0, y = x + \sum_i k_i v'_i } - * - * For any element in this relation, the number of steps taken - * is equal to the difference in the final coordinates. - */ -static __isl_give isl_map *path_along_steps(__isl_take isl_space *dim, - __isl_keep isl_mat *steps) -{ - int i, j, k; - struct isl_basic_map *path = NULL; - unsigned d; - unsigned n; - unsigned nparam; - - if (!dim || !steps) - goto error; - - d = isl_space_dim(dim, isl_dim_in); - n = steps->n_row; - nparam = isl_space_dim(dim, isl_dim_param); - - path = isl_basic_map_alloc_space(isl_space_copy(dim), n, d, n); - - for (i = 0; i < n; ++i) { - k = isl_basic_map_alloc_div(path); - if (k < 0) - goto error; - isl_assert(steps->ctx, i == k, goto error); - isl_int_set_si(path->div[k][0], 0); - } - - for (i = 0; i < d; ++i) { - k = isl_basic_map_alloc_equality(path); - if (k < 0) - goto error; - isl_seq_clr(path->eq[k], 1 + isl_basic_map_total_dim(path)); - isl_int_set_si(path->eq[k][1 + nparam + i], 1); - isl_int_set_si(path->eq[k][1 + nparam + d + i], -1); - if (i == d - 1) - for (j = 0; j < n; ++j) - isl_int_set_si(path->eq[k][1 + nparam + 2 * d + j], 1); - else - for (j = 0; j < n; ++j) - isl_int_set(path->eq[k][1 + nparam + 2 * d + j], - steps->row[j][i]); - } - - for (i = 0; i < n; ++i) { - k = isl_basic_map_alloc_inequality(path); - if (k < 0) - goto error; - isl_seq_clr(path->ineq[k], 1 + isl_basic_map_total_dim(path)); - isl_int_set_si(path->ineq[k][1 + nparam + 2 * d + i], 1); - } - - isl_space_free(dim); - - path = isl_basic_map_simplify(path); - path = isl_basic_map_finalize(path); - return isl_map_from_basic_map(path); -error: - isl_space_free(dim); - isl_basic_map_free(path); - return NULL; -} - -#define IMPURE 0 -#define PURE_PARAM 1 -#define PURE_VAR 2 -#define MIXED 3 - -/* Check whether the parametric constant term of constraint c is never - * positive in "bset". - */ -static int parametric_constant_never_positive(__isl_keep isl_basic_set *bset, - isl_int *c, int *div_purity) -{ - unsigned d; - unsigned n_div; - unsigned nparam; - int i; - int k; - int empty; - - n_div = isl_basic_set_dim(bset, isl_dim_div); - d = isl_basic_set_dim(bset, isl_dim_set); - nparam = isl_basic_set_dim(bset, isl_dim_param); - - bset = isl_basic_set_copy(bset); - bset = isl_basic_set_cow(bset); - bset = isl_basic_set_extend_constraints(bset, 0, 1); - k = isl_basic_set_alloc_inequality(bset); - if (k < 0) - goto error; - isl_seq_clr(bset->ineq[k], 1 + isl_basic_set_total_dim(bset)); - isl_seq_cpy(bset->ineq[k], c, 1 + nparam); - for (i = 0; i < n_div; ++i) { - if (div_purity[i] != PURE_PARAM) - continue; - isl_int_set(bset->ineq[k][1 + nparam + d + i], - c[1 + nparam + d + i]); - } - isl_int_sub_ui(bset->ineq[k][0], bset->ineq[k][0], 1); - empty = isl_basic_set_is_empty(bset); - isl_basic_set_free(bset); - - return empty; -error: - isl_basic_set_free(bset); - return -1; -} - -/* Return PURE_PARAM if only the coefficients of the parameters are non-zero. - * Return PURE_VAR if only the coefficients of the set variables are non-zero. - * Return MIXED if only the coefficients of the parameters and the set - * variables are non-zero and if moreover the parametric constant - * can never attain positive values. - * Return IMPURE otherwise. - * - * If div_purity is NULL then we are dealing with a non-parametric set - * and so the constraint is obviously PURE_VAR. - */ -static int purity(__isl_keep isl_basic_set *bset, isl_int *c, int *div_purity, - int eq) -{ - unsigned d; - unsigned n_div; - unsigned nparam; - int empty; - int i; - int p = 0, v = 0; - - if (!div_purity) - return PURE_VAR; - - n_div = isl_basic_set_dim(bset, isl_dim_div); - d = isl_basic_set_dim(bset, isl_dim_set); - nparam = isl_basic_set_dim(bset, isl_dim_param); - - for (i = 0; i < n_div; ++i) { - if (isl_int_is_zero(c[1 + nparam + d + i])) - continue; - switch (div_purity[i]) { - case PURE_PARAM: p = 1; break; - case PURE_VAR: v = 1; break; - default: return IMPURE; - } - } - if (!p && isl_seq_first_non_zero(c + 1, nparam) == -1) - return PURE_VAR; - if (!v && isl_seq_first_non_zero(c + 1 + nparam, d) == -1) - return PURE_PARAM; - - empty = parametric_constant_never_positive(bset, c, div_purity); - if (eq && empty >= 0 && !empty) { - isl_seq_neg(c, c, 1 + nparam + d + n_div); - empty = parametric_constant_never_positive(bset, c, div_purity); - } - - return empty < 0 ? -1 : empty ? MIXED : IMPURE; -} - -/* Return an array of integers indicating the type of each div in bset. - * If the div is (recursively) defined in terms of only the parameters, - * then the type is PURE_PARAM. - * If the div is (recursively) defined in terms of only the set variables, - * then the type is PURE_VAR. - * Otherwise, the type is IMPURE. - */ -static __isl_give int *get_div_purity(__isl_keep isl_basic_set *bset) -{ - int i, j; - int *div_purity; - unsigned d; - unsigned n_div; - unsigned nparam; - - if (!bset) - return NULL; - - n_div = isl_basic_set_dim(bset, isl_dim_div); - d = isl_basic_set_dim(bset, isl_dim_set); - nparam = isl_basic_set_dim(bset, isl_dim_param); - - div_purity = isl_alloc_array(bset->ctx, int, n_div); - if (!div_purity) - return NULL; - - for (i = 0; i < bset->n_div; ++i) { - int p = 0, v = 0; - if (isl_int_is_zero(bset->div[i][0])) { - div_purity[i] = IMPURE; - continue; - } - if (isl_seq_first_non_zero(bset->div[i] + 2, nparam) != -1) - p = 1; - if (isl_seq_first_non_zero(bset->div[i] + 2 + nparam, d) != -1) - v = 1; - for (j = 0; j < i; ++j) { - if (isl_int_is_zero(bset->div[i][2 + nparam + d + j])) - continue; - switch (div_purity[j]) { - case PURE_PARAM: p = 1; break; - case PURE_VAR: v = 1; break; - default: p = v = 1; break; - } - } - div_purity[i] = v ? p ? IMPURE : PURE_VAR : PURE_PARAM; - } - - return div_purity; -} - -/* Given a path with the as yet unconstrained length at position "pos", - * check if setting the length to zero results in only the identity - * mapping. - */ -static int empty_path_is_identity(__isl_keep isl_basic_map *path, unsigned pos) -{ - isl_basic_map *test = NULL; - isl_basic_map *id = NULL; - int k; - int is_id; - - test = isl_basic_map_copy(path); - test = isl_basic_map_extend_constraints(test, 1, 0); - k = isl_basic_map_alloc_equality(test); - if (k < 0) - goto error; - isl_seq_clr(test->eq[k], 1 + isl_basic_map_total_dim(test)); - isl_int_set_si(test->eq[k][pos], 1); - id = isl_basic_map_identity(isl_basic_map_get_space(path)); - is_id = isl_basic_map_is_equal(test, id); - isl_basic_map_free(test); - isl_basic_map_free(id); - return is_id; -error: - isl_basic_map_free(test); - return -1; -} - -/* If any of the constraints is found to be impure then this function - * sets *impurity to 1. - */ -static __isl_give isl_basic_map *add_delta_constraints( - __isl_take isl_basic_map *path, - __isl_keep isl_basic_set *delta, unsigned off, unsigned nparam, - unsigned d, int *div_purity, int eq, int *impurity) -{ - int i, k; - int n = eq ? delta->n_eq : delta->n_ineq; - isl_int **delta_c = eq ? delta->eq : delta->ineq; - unsigned n_div; - - n_div = isl_basic_set_dim(delta, isl_dim_div); - - for (i = 0; i < n; ++i) { - isl_int *path_c; - int p = purity(delta, delta_c[i], div_purity, eq); - if (p < 0) - goto error; - if (p != PURE_VAR && p != PURE_PARAM && !*impurity) - *impurity = 1; - if (p == IMPURE) - continue; - if (eq && p != MIXED) { - k = isl_basic_map_alloc_equality(path); - path_c = path->eq[k]; - } else { - k = isl_basic_map_alloc_inequality(path); - path_c = path->ineq[k]; - } - if (k < 0) - goto error; - isl_seq_clr(path_c, 1 + isl_basic_map_total_dim(path)); - if (p == PURE_VAR) { - isl_seq_cpy(path_c + off, - delta_c[i] + 1 + nparam, d); - isl_int_set(path_c[off + d], delta_c[i][0]); - } else if (p == PURE_PARAM) { - isl_seq_cpy(path_c, delta_c[i], 1 + nparam); - } else { - isl_seq_cpy(path_c + off, - delta_c[i] + 1 + nparam, d); - isl_seq_cpy(path_c, delta_c[i], 1 + nparam); - } - isl_seq_cpy(path_c + off - n_div, - delta_c[i] + 1 + nparam + d, n_div); - } - - return path; -error: - isl_basic_map_free(path); - return NULL; -} - -/* Given a set of offsets "delta", construct a relation of the - * given dimension specification (Z^{n+1} -> Z^{n+1}) that - * is an overapproximation of the relations that - * maps an element x to any element that can be reached - * by taking a non-negative number of steps along any of - * the elements in "delta". - * That is, construct an approximation of - * - * { [x] -> [y] : exists f \in \delta, k \in Z : - * y = x + k [f, 1] and k >= 0 } - * - * For any element in this relation, the number of steps taken - * is equal to the difference in the final coordinates. - * - * In particular, let delta be defined as - * - * \delta = [p] -> { [x] : A x + a >= 0 and B p + b >= 0 and - * C x + C'p + c >= 0 and - * D x + D'p + d >= 0 } - * - * where the constraints C x + C'p + c >= 0 are such that the parametric - * constant term of each constraint j, "C_j x + C'_j p + c_j", - * can never attain positive values, then the relation is constructed as - * - * { [x] -> [y] : exists [f, k] \in Z^{n+1} : y = x + f and - * A f + k a >= 0 and B p + b >= 0 and - * C f + C'p + c >= 0 and k >= 1 } - * union { [x] -> [x] } - * - * If the zero-length paths happen to correspond exactly to the identity - * mapping, then we return - * - * { [x] -> [y] : exists [f, k] \in Z^{n+1} : y = x + f and - * A f + k a >= 0 and B p + b >= 0 and - * C f + C'p + c >= 0 and k >= 0 } - * - * instead. - * - * Existentially quantified variables in \delta are handled by - * classifying them as independent of the parameters, purely - * parameter dependent and others. Constraints containing - * any of the other existentially quantified variables are removed. - * This is safe, but leads to an additional overapproximation. - * - * If there are any impure constraints, then we also eliminate - * the parameters from \delta, resulting in a set - * - * \delta' = { [x] : E x + e >= 0 } - * - * and add the constraints - * - * E f + k e >= 0 - * - * to the constructed relation. - */ -static __isl_give isl_map *path_along_delta(__isl_take isl_space *dim, - __isl_take isl_basic_set *delta) -{ - isl_basic_map *path = NULL; - unsigned d; - unsigned n_div; - unsigned nparam; - unsigned off; - int i, k; - int is_id; - int *div_purity = NULL; - int impurity = 0; - - if (!delta) - goto error; - n_div = isl_basic_set_dim(delta, isl_dim_div); - d = isl_basic_set_dim(delta, isl_dim_set); - nparam = isl_basic_set_dim(delta, isl_dim_param); - path = isl_basic_map_alloc_space(isl_space_copy(dim), n_div + d + 1, - d + 1 + delta->n_eq, delta->n_eq + delta->n_ineq + 1); - off = 1 + nparam + 2 * (d + 1) + n_div; - - for (i = 0; i < n_div + d + 1; ++i) { - k = isl_basic_map_alloc_div(path); - if (k < 0) - goto error; - isl_int_set_si(path->div[k][0], 0); - } - - for (i = 0; i < d + 1; ++i) { - k = isl_basic_map_alloc_equality(path); - if (k < 0) - goto error; - isl_seq_clr(path->eq[k], 1 + isl_basic_map_total_dim(path)); - isl_int_set_si(path->eq[k][1 + nparam + i], 1); - isl_int_set_si(path->eq[k][1 + nparam + d + 1 + i], -1); - isl_int_set_si(path->eq[k][off + i], 1); - } - - div_purity = get_div_purity(delta); - if (!div_purity) - goto error; - - path = add_delta_constraints(path, delta, off, nparam, d, - div_purity, 1, &impurity); - path = add_delta_constraints(path, delta, off, nparam, d, - div_purity, 0, &impurity); - if (impurity) { - isl_space *dim = isl_basic_set_get_space(delta); - delta = isl_basic_set_project_out(delta, - isl_dim_param, 0, nparam); - delta = isl_basic_set_add(delta, isl_dim_param, nparam); - delta = isl_basic_set_reset_space(delta, dim); - if (!delta) - goto error; - path = isl_basic_map_extend_constraints(path, delta->n_eq, - delta->n_ineq + 1); - path = add_delta_constraints(path, delta, off, nparam, d, - NULL, 1, &impurity); - path = add_delta_constraints(path, delta, off, nparam, d, - NULL, 0, &impurity); - path = isl_basic_map_gauss(path, NULL); - } - - is_id = empty_path_is_identity(path, off + d); - if (is_id < 0) - goto error; - - k = isl_basic_map_alloc_inequality(path); - if (k < 0) - goto error; - isl_seq_clr(path->ineq[k], 1 + isl_basic_map_total_dim(path)); - if (!is_id) - isl_int_set_si(path->ineq[k][0], -1); - isl_int_set_si(path->ineq[k][off + d], 1); - - free(div_purity); - isl_basic_set_free(delta); - path = isl_basic_map_finalize(path); - if (is_id) { - isl_space_free(dim); - return isl_map_from_basic_map(path); - } - return isl_basic_map_union(path, isl_basic_map_identity(dim)); -error: - free(div_purity); - isl_space_free(dim); - isl_basic_set_free(delta); - isl_basic_map_free(path); - return NULL; -} - -/* Given a dimension specification Z^{n+1} -> Z^{n+1} and a parameter "param", - * construct a map that equates the parameter to the difference - * in the final coordinates and imposes that this difference is positive. - * That is, construct - * - * { [x,x_s] -> [y,y_s] : k = y_s - x_s > 0 } - */ -static __isl_give isl_map *equate_parameter_to_length(__isl_take isl_space *dim, - unsigned param) -{ - struct isl_basic_map *bmap; - unsigned d; - unsigned nparam; - int k; - - d = isl_space_dim(dim, isl_dim_in); - nparam = isl_space_dim(dim, isl_dim_param); - bmap = isl_basic_map_alloc_space(dim, 0, 1, 1); - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->eq[k], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->eq[k][1 + param], -1); - isl_int_set_si(bmap->eq[k][1 + nparam + d - 1], -1); - isl_int_set_si(bmap->eq[k][1 + nparam + d + d - 1], 1); - - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->ineq[k], 1 + isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->ineq[k][1 + param], 1); - isl_int_set_si(bmap->ineq[k][0], -1); - - bmap = isl_basic_map_finalize(bmap); - return isl_map_from_basic_map(bmap); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Check whether "path" is acyclic, where the last coordinates of domain - * and range of path encode the number of steps taken. - * That is, check whether - * - * { d | d = y - x and (x,y) in path } - * - * does not contain any element with positive last coordinate (positive length) - * and zero remaining coordinates (cycle). - */ -static int is_acyclic(__isl_take isl_map *path) -{ - int i; - int acyclic; - unsigned dim; - struct isl_set *delta; - - delta = isl_map_deltas(path); - dim = isl_set_dim(delta, isl_dim_set); - for (i = 0; i < dim; ++i) { - if (i == dim -1) - delta = isl_set_lower_bound_si(delta, isl_dim_set, i, 1); - else - delta = isl_set_fix_si(delta, isl_dim_set, i, 0); - } - - acyclic = isl_set_is_empty(delta); - isl_set_free(delta); - - return acyclic; -} - -/* Given a union of basic maps R = \cup_i R_i \subseteq D \times D - * and a dimension specification (Z^{n+1} -> Z^{n+1}), - * construct a map that is an overapproximation of the map - * that takes an element from the space D \times Z to another - * element from the same space, such that the first n coordinates of the - * difference between them is a sum of differences between images - * and pre-images in one of the R_i and such that the last coordinate - * is equal to the number of steps taken. - * That is, let - * - * \Delta_i = { y - x | (x, y) in R_i } - * - * then the constructed map is an overapproximation of - * - * { (x) -> (x + d) | \exists k_i >= 0, \delta_i \in \Delta_i : - * d = (\sum_i k_i \delta_i, \sum_i k_i) } - * - * The elements of the singleton \Delta_i's are collected as the - * rows of the steps matrix. For all these \Delta_i's together, - * a single path is constructed. - * For each of the other \Delta_i's, we compute an overapproximation - * of the paths along elements of \Delta_i. - * Since each of these paths performs an addition, composition is - * symmetric and we can simply compose all resulting paths in any order. - */ -static __isl_give isl_map *construct_extended_path(__isl_take isl_space *dim, - __isl_keep isl_map *map, int *project) -{ - struct isl_mat *steps = NULL; - struct isl_map *path = NULL; - unsigned d; - int i, j, n; - - d = isl_map_dim(map, isl_dim_in); - - path = isl_map_identity(isl_space_copy(dim)); - - steps = isl_mat_alloc(map->ctx, map->n, d); - if (!steps) - goto error; - - n = 0; - for (i = 0; i < map->n; ++i) { - struct isl_basic_set *delta; - - delta = isl_basic_map_deltas(isl_basic_map_copy(map->p[i])); - - for (j = 0; j < d; ++j) { - int fixed; - - fixed = isl_basic_set_plain_dim_is_fixed(delta, j, - &steps->row[n][j]); - if (fixed < 0) { - isl_basic_set_free(delta); - goto error; - } - if (!fixed) - break; - } - - - if (j < d) { - path = isl_map_apply_range(path, - path_along_delta(isl_space_copy(dim), delta)); - path = isl_map_coalesce(path); - } else { - isl_basic_set_free(delta); - ++n; - } - } - - if (n > 0) { - steps->n_row = n; - path = isl_map_apply_range(path, - path_along_steps(isl_space_copy(dim), steps)); - } - - if (project && *project) { - *project = is_acyclic(isl_map_copy(path)); - if (*project < 0) - goto error; - } - - isl_space_free(dim); - isl_mat_free(steps); - return path; -error: - isl_space_free(dim); - isl_mat_free(steps); - isl_map_free(path); - return NULL; -} - -static int isl_set_overlaps(__isl_keep isl_set *set1, __isl_keep isl_set *set2) -{ - isl_set *i; - int no_overlap; - - if (!isl_space_tuple_match(set1->dim, isl_dim_set, set2->dim, isl_dim_set)) - return 0; - - i = isl_set_intersect(isl_set_copy(set1), isl_set_copy(set2)); - no_overlap = isl_set_is_empty(i); - isl_set_free(i); - - return no_overlap < 0 ? -1 : !no_overlap; -} - -/* Given a union of basic maps R = \cup_i R_i \subseteq D \times D - * and a dimension specification (Z^{n+1} -> Z^{n+1}), - * construct a map that is an overapproximation of the map - * that takes an element from the dom R \times Z to an - * element from ran R \times Z, such that the first n coordinates of the - * difference between them is a sum of differences between images - * and pre-images in one of the R_i and such that the last coordinate - * is equal to the number of steps taken. - * That is, let - * - * \Delta_i = { y - x | (x, y) in R_i } - * - * then the constructed map is an overapproximation of - * - * { (x) -> (x + d) | \exists k_i >= 0, \delta_i \in \Delta_i : - * d = (\sum_i k_i \delta_i, \sum_i k_i) and - * x in dom R and x + d in ran R and - * \sum_i k_i >= 1 } - */ -static __isl_give isl_map *construct_component(__isl_take isl_space *dim, - __isl_keep isl_map *map, int *exact, int project) -{ - struct isl_set *domain = NULL; - struct isl_set *range = NULL; - struct isl_map *app = NULL; - struct isl_map *path = NULL; - - domain = isl_map_domain(isl_map_copy(map)); - domain = isl_set_coalesce(domain); - range = isl_map_range(isl_map_copy(map)); - range = isl_set_coalesce(range); - if (!isl_set_overlaps(domain, range)) { - isl_set_free(domain); - isl_set_free(range); - isl_space_free(dim); - - map = isl_map_copy(map); - map = isl_map_add_dims(map, isl_dim_in, 1); - map = isl_map_add_dims(map, isl_dim_out, 1); - map = set_path_length(map, 1, 1); - return map; - } - app = isl_map_from_domain_and_range(domain, range); - app = isl_map_add_dims(app, isl_dim_in, 1); - app = isl_map_add_dims(app, isl_dim_out, 1); - - path = construct_extended_path(isl_space_copy(dim), map, - exact && *exact ? &project : NULL); - app = isl_map_intersect(app, path); - - if (exact && *exact && - (*exact = check_exactness(isl_map_copy(map), isl_map_copy(app), - project)) < 0) - goto error; - - isl_space_free(dim); - app = set_path_length(app, 0, 1); - return app; -error: - isl_space_free(dim); - isl_map_free(app); - return NULL; -} - -/* Call construct_component and, if "project" is set, project out - * the final coordinates. - */ -static __isl_give isl_map *construct_projected_component( - __isl_take isl_space *dim, - __isl_keep isl_map *map, int *exact, int project) -{ - isl_map *app; - unsigned d; - - if (!dim) - return NULL; - d = isl_space_dim(dim, isl_dim_in); - - app = construct_component(dim, map, exact, project); - if (project) { - app = isl_map_project_out(app, isl_dim_in, d - 1, 1); - app = isl_map_project_out(app, isl_dim_out, d - 1, 1); - } - return app; -} - -/* Compute an extended version, i.e., with path lengths, of - * an overapproximation of the transitive closure of "bmap" - * with path lengths greater than or equal to zero and with - * domain and range equal to "dom". - */ -static __isl_give isl_map *q_closure(__isl_take isl_space *dim, - __isl_take isl_set *dom, __isl_keep isl_basic_map *bmap, int *exact) -{ - int project = 1; - isl_map *path; - isl_map *map; - isl_map *app; - - dom = isl_set_add_dims(dom, isl_dim_set, 1); - app = isl_map_from_domain_and_range(dom, isl_set_copy(dom)); - map = isl_map_from_basic_map(isl_basic_map_copy(bmap)); - path = construct_extended_path(dim, map, &project); - app = isl_map_intersect(app, path); - - if ((*exact = check_exactness(map, isl_map_copy(app), project)) < 0) - goto error; - - return app; -error: - isl_map_free(app); - return NULL; -} - -/* Check whether qc has any elements of length at least one - * with domain and/or range outside of dom and ran. - */ -static int has_spurious_elements(__isl_keep isl_map *qc, - __isl_keep isl_set *dom, __isl_keep isl_set *ran) -{ - isl_set *s; - int subset; - unsigned d; - - if (!qc || !dom || !ran) - return -1; - - d = isl_map_dim(qc, isl_dim_in); - - qc = isl_map_copy(qc); - qc = set_path_length(qc, 0, 1); - qc = isl_map_project_out(qc, isl_dim_in, d - 1, 1); - qc = isl_map_project_out(qc, isl_dim_out, d - 1, 1); - - s = isl_map_domain(isl_map_copy(qc)); - subset = isl_set_is_subset(s, dom); - isl_set_free(s); - if (subset < 0) - goto error; - if (!subset) { - isl_map_free(qc); - return 1; - } - - s = isl_map_range(qc); - subset = isl_set_is_subset(s, ran); - isl_set_free(s); - - return subset < 0 ? -1 : !subset; -error: - isl_map_free(qc); - return -1; -} - -#define LEFT 2 -#define RIGHT 1 - -/* For each basic map in "map", except i, check whether it combines - * with the transitive closure that is reflexive on C combines - * to the left and to the right. - * - * In particular, if - * - * dom map_j \subseteq C - * - * then right[j] is set to 1. Otherwise, if - * - * ran map_i \cap dom map_j = \emptyset - * - * then right[j] is set to 0. Otherwise, composing to the right - * is impossible. - * - * Similar, for composing to the left, we have if - * - * ran map_j \subseteq C - * - * then left[j] is set to 1. Otherwise, if - * - * dom map_i \cap ran map_j = \emptyset - * - * then left[j] is set to 0. Otherwise, composing to the left - * is impossible. - * - * The return value is or'd with LEFT if composing to the left - * is possible and with RIGHT if composing to the right is possible. - */ -static int composability(__isl_keep isl_set *C, int i, - isl_set **dom, isl_set **ran, int *left, int *right, - __isl_keep isl_map *map) -{ - int j; - int ok; - - ok = LEFT | RIGHT; - for (j = 0; j < map->n && ok; ++j) { - int overlaps, subset; - if (j == i) - continue; - - if (ok & RIGHT) { - if (!dom[j]) - dom[j] = isl_set_from_basic_set( - isl_basic_map_domain( - isl_basic_map_copy(map->p[j]))); - if (!dom[j]) - return -1; - overlaps = isl_set_overlaps(ran[i], dom[j]); - if (overlaps < 0) - return -1; - if (!overlaps) - right[j] = 0; - else { - subset = isl_set_is_subset(dom[j], C); - if (subset < 0) - return -1; - if (subset) - right[j] = 1; - else - ok &= ~RIGHT; - } - } - - if (ok & LEFT) { - if (!ran[j]) - ran[j] = isl_set_from_basic_set( - isl_basic_map_range( - isl_basic_map_copy(map->p[j]))); - if (!ran[j]) - return -1; - overlaps = isl_set_overlaps(dom[i], ran[j]); - if (overlaps < 0) - return -1; - if (!overlaps) - left[j] = 0; - else { - subset = isl_set_is_subset(ran[j], C); - if (subset < 0) - return -1; - if (subset) - left[j] = 1; - else - ok &= ~LEFT; - } - } - } - - return ok; -} - -static __isl_give isl_map *anonymize(__isl_take isl_map *map) -{ - map = isl_map_reset(map, isl_dim_in); - map = isl_map_reset(map, isl_dim_out); - return map; -} - -/* Return a map that is a union of the basic maps in "map", except i, - * composed to left and right with qc based on the entries of "left" - * and "right". - */ -static __isl_give isl_map *compose(__isl_keep isl_map *map, int i, - __isl_take isl_map *qc, int *left, int *right) -{ - int j; - isl_map *comp; - - comp = isl_map_empty(isl_map_get_space(map)); - for (j = 0; j < map->n; ++j) { - isl_map *map_j; - - if (j == i) - continue; - - map_j = isl_map_from_basic_map(isl_basic_map_copy(map->p[j])); - map_j = anonymize(map_j); - if (left && left[j]) - map_j = isl_map_apply_range(map_j, isl_map_copy(qc)); - if (right && right[j]) - map_j = isl_map_apply_range(isl_map_copy(qc), map_j); - comp = isl_map_union(comp, map_j); - } - - comp = isl_map_compute_divs(comp); - comp = isl_map_coalesce(comp); - - isl_map_free(qc); - - return comp; -} - -/* Compute the transitive closure of "map" incrementally by - * computing - * - * map_i^+ \cup qc^+ - * - * or - * - * map_i^+ \cup ((id \cup map_i^) \circ qc^+) - * - * or - * - * map_i^+ \cup (qc^+ \circ (id \cup map_i^)) - * - * depending on whether left or right are NULL. - */ -static __isl_give isl_map *compute_incremental( - __isl_take isl_space *dim, __isl_keep isl_map *map, - int i, __isl_take isl_map *qc, int *left, int *right, int *exact) -{ - isl_map *map_i; - isl_map *tc; - isl_map *rtc = NULL; - - if (!map) - goto error; - isl_assert(map->ctx, left || right, goto error); - - map_i = isl_map_from_basic_map(isl_basic_map_copy(map->p[i])); - tc = construct_projected_component(isl_space_copy(dim), map_i, - exact, 1); - isl_map_free(map_i); - - if (*exact) - qc = isl_map_transitive_closure(qc, exact); - - if (!*exact) { - isl_space_free(dim); - isl_map_free(tc); - isl_map_free(qc); - return isl_map_universe(isl_map_get_space(map)); - } - - if (!left || !right) - rtc = isl_map_union(isl_map_copy(tc), - isl_map_identity(isl_map_get_space(tc))); - if (!right) - qc = isl_map_apply_range(rtc, qc); - if (!left) - qc = isl_map_apply_range(qc, rtc); - qc = isl_map_union(tc, qc); - - isl_space_free(dim); - - return qc; -error: - isl_space_free(dim); - isl_map_free(qc); - return NULL; -} - -/* Given a map "map", try to find a basic map such that - * map^+ can be computed as - * - * map^+ = map_i^+ \cup - * \bigcup_j ((map_i^+ \cup Id_C)^+ \circ map_j \circ (map_i^+ \cup Id_C))^+ - * - * with C the simple hull of the domain and range of the input map. - * map_i^ \cup Id_C is computed by allowing the path lengths to be zero - * and by intersecting domain and range with C. - * Of course, we need to check that this is actually equal to map_i^ \cup Id_C. - * Also, we only use the incremental computation if all the transitive - * closures are exact and if the number of basic maps in the union, - * after computing the integer divisions, is smaller than the number - * of basic maps in the input map. - */ -static int incemental_on_entire_domain(__isl_keep isl_space *dim, - __isl_keep isl_map *map, - isl_set **dom, isl_set **ran, int *left, int *right, - __isl_give isl_map **res) -{ - int i; - isl_set *C; - unsigned d; - - *res = NULL; - - C = isl_set_union(isl_map_domain(isl_map_copy(map)), - isl_map_range(isl_map_copy(map))); - C = isl_set_from_basic_set(isl_set_simple_hull(C)); - if (!C) - return -1; - if (C->n != 1) { - isl_set_free(C); - return 0; - } - - d = isl_map_dim(map, isl_dim_in); - - for (i = 0; i < map->n; ++i) { - isl_map *qc; - int exact_i, spurious; - int j; - dom[i] = isl_set_from_basic_set(isl_basic_map_domain( - isl_basic_map_copy(map->p[i]))); - ran[i] = isl_set_from_basic_set(isl_basic_map_range( - isl_basic_map_copy(map->p[i]))); - qc = q_closure(isl_space_copy(dim), isl_set_copy(C), - map->p[i], &exact_i); - if (!qc) - goto error; - if (!exact_i) { - isl_map_free(qc); - continue; - } - spurious = has_spurious_elements(qc, dom[i], ran[i]); - if (spurious) { - isl_map_free(qc); - if (spurious < 0) - goto error; - continue; - } - qc = isl_map_project_out(qc, isl_dim_in, d, 1); - qc = isl_map_project_out(qc, isl_dim_out, d, 1); - qc = isl_map_compute_divs(qc); - for (j = 0; j < map->n; ++j) - left[j] = right[j] = 1; - qc = compose(map, i, qc, left, right); - if (!qc) - goto error; - if (qc->n >= map->n) { - isl_map_free(qc); - continue; - } - *res = compute_incremental(isl_space_copy(dim), map, i, qc, - left, right, &exact_i); - if (!*res) - goto error; - if (exact_i) - break; - isl_map_free(*res); - *res = NULL; - } - - isl_set_free(C); - - return *res != NULL; -error: - isl_set_free(C); - return -1; -} - -/* Try and compute the transitive closure of "map" as - * - * map^+ = map_i^+ \cup - * \bigcup_j ((map_i^+ \cup Id_C)^+ \circ map_j \circ (map_i^+ \cup Id_C))^+ - * - * with C either the simple hull of the domain and range of the entire - * map or the simple hull of domain and range of map_i. - */ -static __isl_give isl_map *incremental_closure(__isl_take isl_space *dim, - __isl_keep isl_map *map, int *exact, int project) -{ - int i; - isl_set **dom = NULL; - isl_set **ran = NULL; - int *left = NULL; - int *right = NULL; - isl_set *C; - unsigned d; - isl_map *res = NULL; - - if (!project) - return construct_projected_component(dim, map, exact, project); - - if (!map) - goto error; - if (map->n <= 1) - return construct_projected_component(dim, map, exact, project); - - d = isl_map_dim(map, isl_dim_in); - - dom = isl_calloc_array(map->ctx, isl_set *, map->n); - ran = isl_calloc_array(map->ctx, isl_set *, map->n); - left = isl_calloc_array(map->ctx, int, map->n); - right = isl_calloc_array(map->ctx, int, map->n); - if (!ran || !dom || !left || !right) - goto error; - - if (incemental_on_entire_domain(dim, map, dom, ran, left, right, &res) < 0) - goto error; - - for (i = 0; !res && i < map->n; ++i) { - isl_map *qc; - int exact_i, spurious, comp; - if (!dom[i]) - dom[i] = isl_set_from_basic_set( - isl_basic_map_domain( - isl_basic_map_copy(map->p[i]))); - if (!dom[i]) - goto error; - if (!ran[i]) - ran[i] = isl_set_from_basic_set( - isl_basic_map_range( - isl_basic_map_copy(map->p[i]))); - if (!ran[i]) - goto error; - C = isl_set_union(isl_set_copy(dom[i]), - isl_set_copy(ran[i])); - C = isl_set_from_basic_set(isl_set_simple_hull(C)); - if (!C) - goto error; - if (C->n != 1) { - isl_set_free(C); - continue; - } - comp = composability(C, i, dom, ran, left, right, map); - if (!comp || comp < 0) { - isl_set_free(C); - if (comp < 0) - goto error; - continue; - } - qc = q_closure(isl_space_copy(dim), C, map->p[i], &exact_i); - if (!qc) - goto error; - if (!exact_i) { - isl_map_free(qc); - continue; - } - spurious = has_spurious_elements(qc, dom[i], ran[i]); - if (spurious) { - isl_map_free(qc); - if (spurious < 0) - goto error; - continue; - } - qc = isl_map_project_out(qc, isl_dim_in, d, 1); - qc = isl_map_project_out(qc, isl_dim_out, d, 1); - qc = isl_map_compute_divs(qc); - qc = compose(map, i, qc, (comp & LEFT) ? left : NULL, - (comp & RIGHT) ? right : NULL); - if (!qc) - goto error; - if (qc->n >= map->n) { - isl_map_free(qc); - continue; - } - res = compute_incremental(isl_space_copy(dim), map, i, qc, - (comp & LEFT) ? left : NULL, - (comp & RIGHT) ? right : NULL, &exact_i); - if (!res) - goto error; - if (exact_i) - break; - isl_map_free(res); - res = NULL; - } - - for (i = 0; i < map->n; ++i) { - isl_set_free(dom[i]); - isl_set_free(ran[i]); - } - free(dom); - free(ran); - free(left); - free(right); - - if (res) { - isl_space_free(dim); - return res; - } - - return construct_projected_component(dim, map, exact, project); -error: - if (dom) - for (i = 0; i < map->n; ++i) - isl_set_free(dom[i]); - free(dom); - if (ran) - for (i = 0; i < map->n; ++i) - isl_set_free(ran[i]); - free(ran); - free(left); - free(right); - isl_space_free(dim); - return NULL; -} - -/* Given an array of sets "set", add "dom" at position "pos" - * and search for elements at earlier positions that overlap with "dom". - * If any can be found, then merge all of them, together with "dom", into - * a single set and assign the union to the first in the array, - * which becomes the new group leader for all groups involved in the merge. - * During the search, we only consider group leaders, i.e., those with - * group[i] = i, as the other sets have already been combined - * with one of the group leaders. - */ -static int merge(isl_set **set, int *group, __isl_take isl_set *dom, int pos) -{ - int i; - - group[pos] = pos; - set[pos] = isl_set_copy(dom); - - for (i = pos - 1; i >= 0; --i) { - int o; - - if (group[i] != i) - continue; - - o = isl_set_overlaps(set[i], dom); - if (o < 0) - goto error; - if (!o) - continue; - - set[i] = isl_set_union(set[i], set[group[pos]]); - set[group[pos]] = NULL; - if (!set[i]) - goto error; - group[group[pos]] = i; - group[pos] = i; - } - - isl_set_free(dom); - return 0; -error: - isl_set_free(dom); - return -1; -} - -/* Replace each entry in the n by n grid of maps by the cross product - * with the relation { [i] -> [i + 1] }. - */ -static int add_length(__isl_keep isl_map *map, isl_map ***grid, int n) -{ - int i, j, k; - isl_space *dim; - isl_basic_map *bstep; - isl_map *step; - unsigned nparam; - - if (!map) - return -1; - - dim = isl_map_get_space(map); - nparam = isl_space_dim(dim, isl_dim_param); - dim = isl_space_drop_dims(dim, isl_dim_in, 0, isl_space_dim(dim, isl_dim_in)); - dim = isl_space_drop_dims(dim, isl_dim_out, 0, isl_space_dim(dim, isl_dim_out)); - dim = isl_space_add_dims(dim, isl_dim_in, 1); - dim = isl_space_add_dims(dim, isl_dim_out, 1); - bstep = isl_basic_map_alloc_space(dim, 0, 1, 0); - k = isl_basic_map_alloc_equality(bstep); - if (k < 0) { - isl_basic_map_free(bstep); - return -1; - } - isl_seq_clr(bstep->eq[k], 1 + isl_basic_map_total_dim(bstep)); - isl_int_set_si(bstep->eq[k][0], 1); - isl_int_set_si(bstep->eq[k][1 + nparam], 1); - isl_int_set_si(bstep->eq[k][1 + nparam + 1], -1); - bstep = isl_basic_map_finalize(bstep); - step = isl_map_from_basic_map(bstep); - - for (i = 0; i < n; ++i) - for (j = 0; j < n; ++j) - grid[i][j] = isl_map_product(grid[i][j], - isl_map_copy(step)); - - isl_map_free(step); - - return 0; -} - -/* The core of the Floyd-Warshall algorithm. - * Updates the given n x x matrix of relations in place. - * - * The algorithm iterates over all vertices. In each step, the whole - * matrix is updated to include all paths that go to the current vertex, - * possibly stay there a while (including passing through earlier vertices) - * and then come back. At the start of each iteration, the diagonal - * element corresponding to the current vertex is replaced by its - * transitive closure to account for all indirect paths that stay - * in the current vertex. - */ -static void floyd_warshall_iterate(isl_map ***grid, int n, int *exact) -{ - int r, p, q; - - for (r = 0; r < n; ++r) { - int r_exact; - grid[r][r] = isl_map_transitive_closure(grid[r][r], - (exact && *exact) ? &r_exact : NULL); - if (exact && *exact && !r_exact) - *exact = 0; - - for (p = 0; p < n; ++p) - for (q = 0; q < n; ++q) { - isl_map *loop; - if (p == r && q == r) - continue; - loop = isl_map_apply_range( - isl_map_copy(grid[p][r]), - isl_map_copy(grid[r][q])); - grid[p][q] = isl_map_union(grid[p][q], loop); - loop = isl_map_apply_range( - isl_map_copy(grid[p][r]), - isl_map_apply_range( - isl_map_copy(grid[r][r]), - isl_map_copy(grid[r][q]))); - grid[p][q] = isl_map_union(grid[p][q], loop); - grid[p][q] = isl_map_coalesce(grid[p][q]); - } - } -} - -/* Given a partition of the domains and ranges of the basic maps in "map", - * apply the Floyd-Warshall algorithm with the elements in the partition - * as vertices. - * - * In particular, there are "n" elements in the partition and "group" is - * an array of length 2 * map->n with entries in [0,n-1]. - * - * We first construct a matrix of relations based on the partition information, - * apply Floyd-Warshall on this matrix of relations and then take the - * union of all entries in the matrix as the final result. - * - * If we are actually computing the power instead of the transitive closure, - * i.e., when "project" is not set, then the result should have the - * path lengths encoded as the difference between an extra pair of - * coordinates. We therefore apply the nested transitive closures - * to relations that include these lengths. In particular, we replace - * the input relation by the cross product with the unit length relation - * { [i] -> [i + 1] }. - */ -static __isl_give isl_map *floyd_warshall_with_groups(__isl_take isl_space *dim, - __isl_keep isl_map *map, int *exact, int project, int *group, int n) -{ - int i, j, k; - isl_map ***grid = NULL; - isl_map *app; - - if (!map) - goto error; - - if (n == 1) { - free(group); - return incremental_closure(dim, map, exact, project); - } - - grid = isl_calloc_array(map->ctx, isl_map **, n); - if (!grid) - goto error; - for (i = 0; i < n; ++i) { - grid[i] = isl_calloc_array(map->ctx, isl_map *, n); - if (!grid[i]) - goto error; - for (j = 0; j < n; ++j) - grid[i][j] = isl_map_empty(isl_map_get_space(map)); - } - - for (k = 0; k < map->n; ++k) { - i = group[2 * k]; - j = group[2 * k + 1]; - grid[i][j] = isl_map_union(grid[i][j], - isl_map_from_basic_map( - isl_basic_map_copy(map->p[k]))); - } - - if (!project && add_length(map, grid, n) < 0) - goto error; - - floyd_warshall_iterate(grid, n, exact); - - app = isl_map_empty(isl_map_get_space(map)); - - for (i = 0; i < n; ++i) { - for (j = 0; j < n; ++j) - app = isl_map_union(app, grid[i][j]); - free(grid[i]); - } - free(grid); - - free(group); - isl_space_free(dim); - - return app; -error: - if (grid) - for (i = 0; i < n; ++i) { - if (!grid[i]) - continue; - for (j = 0; j < n; ++j) - isl_map_free(grid[i][j]); - free(grid[i]); - } - free(grid); - free(group); - isl_space_free(dim); - return NULL; -} - -/* Partition the domains and ranges of the n basic relations in list - * into disjoint cells. - * - * To find the partition, we simply consider all of the domains - * and ranges in turn and combine those that overlap. - * "set" contains the partition elements and "group" indicates - * to which partition element a given domain or range belongs. - * The domain of basic map i corresponds to element 2 * i in these arrays, - * while the domain corresponds to element 2 * i + 1. - * During the construction group[k] is either equal to k, - * in which case set[k] contains the union of all the domains and - * ranges in the corresponding group, or is equal to some l < k, - * with l another domain or range in the same group. - */ -static int *setup_groups(isl_ctx *ctx, __isl_keep isl_basic_map **list, int n, - isl_set ***set, int *n_group) -{ - int i; - int *group = NULL; - int g; - - *set = isl_calloc_array(ctx, isl_set *, 2 * n); - group = isl_alloc_array(ctx, int, 2 * n); - - if (!*set || !group) - goto error; - - for (i = 0; i < n; ++i) { - isl_set *dom; - dom = isl_set_from_basic_set(isl_basic_map_domain( - isl_basic_map_copy(list[i]))); - if (merge(*set, group, dom, 2 * i) < 0) - goto error; - dom = isl_set_from_basic_set(isl_basic_map_range( - isl_basic_map_copy(list[i]))); - if (merge(*set, group, dom, 2 * i + 1) < 0) - goto error; - } - - g = 0; - for (i = 0; i < 2 * n; ++i) - if (group[i] == i) { - if (g != i) { - (*set)[g] = (*set)[i]; - (*set)[i] = NULL; - } - group[i] = g++; - } else - group[i] = group[group[i]]; - - *n_group = g; - - return group; -error: - if (*set) { - for (i = 0; i < 2 * n; ++i) - isl_set_free((*set)[i]); - free(*set); - *set = NULL; - } - free(group); - return NULL; -} - -/* Check if the domains and ranges of the basic maps in "map" can - * be partitioned, and if so, apply Floyd-Warshall on the elements - * of the partition. Note that we also apply this algorithm - * if we want to compute the power, i.e., when "project" is not set. - * However, the results are unlikely to be exact since the recursive - * calls inside the Floyd-Warshall algorithm typically result in - * non-linear path lengths quite quickly. - */ -static __isl_give isl_map *floyd_warshall(__isl_take isl_space *dim, - __isl_keep isl_map *map, int *exact, int project) -{ - int i; - isl_set **set = NULL; - int *group = NULL; - int n; - - if (!map) - goto error; - if (map->n <= 1) - return incremental_closure(dim, map, exact, project); - - group = setup_groups(map->ctx, map->p, map->n, &set, &n); - if (!group) - goto error; - - for (i = 0; i < 2 * map->n; ++i) - isl_set_free(set[i]); - - free(set); - - return floyd_warshall_with_groups(dim, map, exact, project, group, n); -error: - isl_space_free(dim); - return NULL; -} - -/* Structure for representing the nodes in the graph being traversed - * using Tarjan's algorithm. - * index represents the order in which nodes are visited. - * min_index is the index of the root of a (sub)component. - * on_stack indicates whether the node is currently on the stack. - */ -struct basic_map_sort_node { - int index; - int min_index; - int on_stack; -}; -/* Structure for representing the graph being traversed - * using Tarjan's algorithm. - * len is the number of nodes - * node is an array of nodes - * stack contains the nodes on the path from the root to the current node - * sp is the stack pointer - * index is the index of the last node visited - * order contains the elements of the components separated by -1 - * op represents the current position in order - * - * check_closed is set if we may have used the fact that - * a pair of basic maps can be interchanged - */ -struct basic_map_sort { - int len; - struct basic_map_sort_node *node; - int *stack; - int sp; - int index; - int *order; - int op; - int check_closed; -}; - -static void basic_map_sort_free(struct basic_map_sort *s) -{ - if (!s) - return; - free(s->node); - free(s->stack); - free(s->order); - free(s); -} - -static struct basic_map_sort *basic_map_sort_alloc(struct isl_ctx *ctx, int len) -{ - struct basic_map_sort *s; - int i; - - s = isl_calloc_type(ctx, struct basic_map_sort); - if (!s) - return NULL; - s->len = len; - s->node = isl_alloc_array(ctx, struct basic_map_sort_node, len); - if (!s->node) - goto error; - for (i = 0; i < len; ++i) - s->node[i].index = -1; - s->stack = isl_alloc_array(ctx, int, len); - if (!s->stack) - goto error; - s->order = isl_alloc_array(ctx, int, 2 * len); - if (!s->order) - goto error; - - s->sp = 0; - s->index = 0; - s->op = 0; - - s->check_closed = 0; - - return s; -error: - basic_map_sort_free(s); - return NULL; -} - -/* Check whether in the computation of the transitive closure - * "bmap1" (R_1) should follow (or be part of the same component as) - * "bmap2" (R_2). - * - * That is check whether - * - * R_1 \circ R_2 - * - * is a subset of - * - * R_2 \circ R_1 - * - * If so, then there is no reason for R_1 to immediately follow R_2 - * in any path. - * - * *check_closed is set if the subset relation holds while - * R_1 \circ R_2 is not empty. - */ -static int basic_map_follows(__isl_keep isl_basic_map *bmap1, - __isl_keep isl_basic_map *bmap2, int *check_closed) -{ - struct isl_map *map12 = NULL; - struct isl_map *map21 = NULL; - int subset; - - if (!isl_space_tuple_match(bmap1->dim, isl_dim_in, bmap2->dim, isl_dim_out)) - return 0; - - map21 = isl_map_from_basic_map( - isl_basic_map_apply_range( - isl_basic_map_copy(bmap2), - isl_basic_map_copy(bmap1))); - subset = isl_map_is_empty(map21); - if (subset < 0) - goto error; - if (subset) { - isl_map_free(map21); - return 0; - } - - if (!isl_space_tuple_match(bmap1->dim, isl_dim_in, bmap1->dim, isl_dim_out) || - !isl_space_tuple_match(bmap2->dim, isl_dim_in, bmap2->dim, isl_dim_out)) { - isl_map_free(map21); - return 1; - } - - map12 = isl_map_from_basic_map( - isl_basic_map_apply_range( - isl_basic_map_copy(bmap1), - isl_basic_map_copy(bmap2))); - - subset = isl_map_is_subset(map21, map12); - - isl_map_free(map12); - isl_map_free(map21); - - if (subset) - *check_closed = 1; - - return subset < 0 ? -1 : !subset; -error: - isl_map_free(map21); - return -1; -} - -/* Perform Tarjan's algorithm for computing the strongly connected components - * in the graph with the disjuncts of "map" as vertices and with an - * edge between any pair of disjuncts such that the first has - * to be applied after the second. - */ -static int power_components_tarjan(struct basic_map_sort *s, - __isl_keep isl_basic_map **list, int i) -{ - int j; - - s->node[i].index = s->index; - s->node[i].min_index = s->index; - s->node[i].on_stack = 1; - s->index++; - s->stack[s->sp++] = i; - - for (j = s->len - 1; j >= 0; --j) { - int f; - - if (j == i) - continue; - if (s->node[j].index >= 0 && - (!s->node[j].on_stack || - s->node[j].index > s->node[i].min_index)) - continue; - - f = basic_map_follows(list[i], list[j], &s->check_closed); - if (f < 0) - return -1; - if (!f) - continue; - - if (s->node[j].index < 0) { - power_components_tarjan(s, list, j); - if (s->node[j].min_index < s->node[i].min_index) - s->node[i].min_index = s->node[j].min_index; - } else if (s->node[j].index < s->node[i].min_index) - s->node[i].min_index = s->node[j].index; - } - - if (s->node[i].index != s->node[i].min_index) - return 0; - - do { - j = s->stack[--s->sp]; - s->node[j].on_stack = 0; - s->order[s->op++] = j; - } while (j != i); - s->order[s->op++] = -1; - - return 0; -} - -/* Decompose the "len" basic relations in "list" into strongly connected - * components. - */ -static struct basic_map_sort *basic_map_sort_init(isl_ctx *ctx, int len, - __isl_keep isl_basic_map **list) -{ - int i; - struct basic_map_sort *s = NULL; - - s = basic_map_sort_alloc(ctx, len); - if (!s) - return NULL; - for (i = len - 1; i >= 0; --i) { - if (s->node[i].index >= 0) - continue; - if (power_components_tarjan(s, list, i) < 0) - goto error; - } - - return s; -error: - basic_map_sort_free(s); - return NULL; -} - -/* Given a union of basic maps R = \cup_i R_i \subseteq D \times D - * and a dimension specification (Z^{n+1} -> Z^{n+1}), - * construct a map that is an overapproximation of the map - * that takes an element from the dom R \times Z to an - * element from ran R \times Z, such that the first n coordinates of the - * difference between them is a sum of differences between images - * and pre-images in one of the R_i and such that the last coordinate - * is equal to the number of steps taken. - * If "project" is set, then these final coordinates are not included, - * i.e., a relation of type Z^n -> Z^n is returned. - * That is, let - * - * \Delta_i = { y - x | (x, y) in R_i } - * - * then the constructed map is an overapproximation of - * - * { (x) -> (x + d) | \exists k_i >= 0, \delta_i \in \Delta_i : - * d = (\sum_i k_i \delta_i, \sum_i k_i) and - * x in dom R and x + d in ran R } - * - * or - * - * { (x) -> (x + d) | \exists k_i >= 0, \delta_i \in \Delta_i : - * d = (\sum_i k_i \delta_i) and - * x in dom R and x + d in ran R } - * - * if "project" is set. - * - * We first split the map into strongly connected components, perform - * the above on each component and then join the results in the correct - * order, at each join also taking in the union of both arguments - * to allow for paths that do not go through one of the two arguments. - */ -static __isl_give isl_map *construct_power_components(__isl_take isl_space *dim, - __isl_keep isl_map *map, int *exact, int project) -{ - int i, n, c; - struct isl_map *path = NULL; - struct basic_map_sort *s = NULL; - int *orig_exact; - int local_exact; - - if (!map) - goto error; - if (map->n <= 1) - return floyd_warshall(dim, map, exact, project); - - s = basic_map_sort_init(map->ctx, map->n, map->p); - if (!s) - goto error; - - orig_exact = exact; - if (s->check_closed && !exact) - exact = &local_exact; - - c = 0; - i = 0; - n = map->n; - if (project) - path = isl_map_empty(isl_map_get_space(map)); - else - path = isl_map_empty(isl_space_copy(dim)); - path = anonymize(path); - while (n) { - struct isl_map *comp; - isl_map *path_comp, *path_comb; - comp = isl_map_alloc_space(isl_map_get_space(map), n, 0); - while (s->order[i] != -1) { - comp = isl_map_add_basic_map(comp, - isl_basic_map_copy(map->p[s->order[i]])); - --n; - ++i; - } - path_comp = floyd_warshall(isl_space_copy(dim), - comp, exact, project); - path_comp = anonymize(path_comp); - path_comb = isl_map_apply_range(isl_map_copy(path), - isl_map_copy(path_comp)); - path = isl_map_union(path, path_comp); - path = isl_map_union(path, path_comb); - isl_map_free(comp); - ++i; - ++c; - } - - if (c > 1 && s->check_closed && !*exact) { - int closed; - - closed = isl_map_is_transitively_closed(path); - if (closed < 0) - goto error; - if (!closed) { - basic_map_sort_free(s); - isl_map_free(path); - return floyd_warshall(dim, map, orig_exact, project); - } - } - - basic_map_sort_free(s); - isl_space_free(dim); - - return path; -error: - basic_map_sort_free(s); - isl_space_free(dim); - isl_map_free(path); - return NULL; -} - -/* Given a union of basic maps R = \cup_i R_i \subseteq D \times D, - * construct a map that is an overapproximation of the map - * that takes an element from the space D to another - * element from the same space, such that the difference between - * them is a strictly positive sum of differences between images - * and pre-images in one of the R_i. - * The number of differences in the sum is equated to parameter "param". - * That is, let - * - * \Delta_i = { y - x | (x, y) in R_i } - * - * then the constructed map is an overapproximation of - * - * { (x) -> (x + d) | \exists k_i >= 0, \delta_i \in \Delta_i : - * d = \sum_i k_i \delta_i and k = \sum_i k_i > 0 } - * or - * - * { (x) -> (x + d) | \exists k_i >= 0, \delta_i \in \Delta_i : - * d = \sum_i k_i \delta_i and \sum_i k_i > 0 } - * - * if "project" is set. - * - * If "project" is not set, then - * we construct an extended mapping with an extra coordinate - * that indicates the number of steps taken. In particular, - * the difference in the last coordinate is equal to the number - * of steps taken to move from a domain element to the corresponding - * image element(s). - */ -static __isl_give isl_map *construct_power(__isl_keep isl_map *map, - int *exact, int project) -{ - struct isl_map *app = NULL; - isl_space *dim = NULL; - unsigned d; - - if (!map) - return NULL; - - dim = isl_map_get_space(map); - - d = isl_space_dim(dim, isl_dim_in); - dim = isl_space_add_dims(dim, isl_dim_in, 1); - dim = isl_space_add_dims(dim, isl_dim_out, 1); - - app = construct_power_components(isl_space_copy(dim), map, - exact, project); - - isl_space_free(dim); - - return app; -} - -/* Compute the positive powers of "map", or an overapproximation. - * If the result is exact, then *exact is set to 1. - * - * If project is set, then we are actually interested in the transitive - * closure, so we can use a more relaxed exactness check. - * The lengths of the paths are also projected out instead of being - * encoded as the difference between an extra pair of final coordinates. - */ -static __isl_give isl_map *map_power(__isl_take isl_map *map, - int *exact, int project) -{ - struct isl_map *app = NULL; - - if (exact) - *exact = 1; - - if (!map) - return NULL; - - isl_assert(map->ctx, - isl_map_dim(map, isl_dim_in) == isl_map_dim(map, isl_dim_out), - goto error); - - app = construct_power(map, exact, project); - - isl_map_free(map); - return app; -error: - isl_map_free(map); - isl_map_free(app); - return NULL; -} - -/* Compute the positive powers of "map", or an overapproximation. - * The result maps the exponent to a nested copy of the corresponding power. - * If the result is exact, then *exact is set to 1. - * map_power constructs an extended relation with the path lengths - * encoded as the difference between the final coordinates. - * In the final step, this difference is equated to an extra parameter - * and made positive. The extra coordinates are subsequently projected out - * and the parameter is turned into the domain of the result. - */ -__isl_give isl_map *isl_map_power(__isl_take isl_map *map, int *exact) -{ - isl_space *target_dim; - isl_space *dim; - isl_map *diff; - unsigned d; - unsigned param; - - if (!map) - return NULL; - - d = isl_map_dim(map, isl_dim_in); - param = isl_map_dim(map, isl_dim_param); - - map = isl_map_compute_divs(map); - map = isl_map_coalesce(map); - - if (isl_map_plain_is_empty(map)) { - map = isl_map_from_range(isl_map_wrap(map)); - map = isl_map_add_dims(map, isl_dim_in, 1); - map = isl_map_set_dim_name(map, isl_dim_in, 0, "k"); - return map; - } - - target_dim = isl_map_get_space(map); - target_dim = isl_space_from_range(isl_space_wrap(target_dim)); - target_dim = isl_space_add_dims(target_dim, isl_dim_in, 1); - target_dim = isl_space_set_dim_name(target_dim, isl_dim_in, 0, "k"); - - map = map_power(map, exact, 0); - - map = isl_map_add_dims(map, isl_dim_param, 1); - dim = isl_map_get_space(map); - diff = equate_parameter_to_length(dim, param); - map = isl_map_intersect(map, diff); - map = isl_map_project_out(map, isl_dim_in, d, 1); - map = isl_map_project_out(map, isl_dim_out, d, 1); - map = isl_map_from_range(isl_map_wrap(map)); - map = isl_map_move_dims(map, isl_dim_in, 0, isl_dim_param, param, 1); - - map = isl_map_reset_space(map, target_dim); - - return map; -} - -/* Compute a relation that maps each element in the range of the input - * relation to the lengths of all paths composed of edges in the input - * relation that end up in the given range element. - * The result may be an overapproximation, in which case *exact is set to 0. - * The resulting relation is very similar to the power relation. - * The difference are that the domain has been projected out, the - * range has become the domain and the exponent is the range instead - * of a parameter. - */ -__isl_give isl_map *isl_map_reaching_path_lengths(__isl_take isl_map *map, - int *exact) -{ - isl_space *dim; - isl_map *diff; - unsigned d; - unsigned param; - - if (!map) - return NULL; - - d = isl_map_dim(map, isl_dim_in); - param = isl_map_dim(map, isl_dim_param); - - map = isl_map_compute_divs(map); - map = isl_map_coalesce(map); - - if (isl_map_plain_is_empty(map)) { - if (exact) - *exact = 1; - map = isl_map_project_out(map, isl_dim_out, 0, d); - map = isl_map_add_dims(map, isl_dim_out, 1); - return map; - } - - map = map_power(map, exact, 0); - - map = isl_map_add_dims(map, isl_dim_param, 1); - dim = isl_map_get_space(map); - diff = equate_parameter_to_length(dim, param); - map = isl_map_intersect(map, diff); - map = isl_map_project_out(map, isl_dim_in, 0, d + 1); - map = isl_map_project_out(map, isl_dim_out, d, 1); - map = isl_map_reverse(map); - map = isl_map_move_dims(map, isl_dim_out, 0, isl_dim_param, param, 1); - - return map; -} - -/* Check whether equality i of bset is a pure stride constraint - * on a single dimensions, i.e., of the form - * - * v = k e - * - * with k a constant and e an existentially quantified variable. - */ -static int is_eq_stride(__isl_keep isl_basic_set *bset, int i) -{ - unsigned nparam; - unsigned d; - unsigned n_div; - int pos1; - int pos2; - - if (!bset) - return -1; - - if (!isl_int_is_zero(bset->eq[i][0])) - return 0; - - nparam = isl_basic_set_dim(bset, isl_dim_param); - d = isl_basic_set_dim(bset, isl_dim_set); - n_div = isl_basic_set_dim(bset, isl_dim_div); - - if (isl_seq_first_non_zero(bset->eq[i] + 1, nparam) != -1) - return 0; - pos1 = isl_seq_first_non_zero(bset->eq[i] + 1 + nparam, d); - if (pos1 == -1) - return 0; - if (isl_seq_first_non_zero(bset->eq[i] + 1 + nparam + pos1 + 1, - d - pos1 - 1) != -1) - return 0; - - pos2 = isl_seq_first_non_zero(bset->eq[i] + 1 + nparam + d, n_div); - if (pos2 == -1) - return 0; - if (isl_seq_first_non_zero(bset->eq[i] + 1 + nparam + d + pos2 + 1, - n_div - pos2 - 1) != -1) - return 0; - if (!isl_int_is_one(bset->eq[i][1 + nparam + pos1]) && - !isl_int_is_negone(bset->eq[i][1 + nparam + pos1])) - return 0; - - return 1; -} - -/* Given a map, compute the smallest superset of this map that is of the form - * - * { i -> j : L <= j - i <= U and exists a_p: j_p - i_p = M_p a_p } - * - * (where p ranges over the (non-parametric) dimensions), - * compute the transitive closure of this map, i.e., - * - * { i -> j : exists k > 0: - * k L <= j - i <= k U and exists a: j_p - i_p = M_p a_p } - * - * and intersect domain and range of this transitive closure with - * the given domain and range. - * - * If with_id is set, then try to include as much of the identity mapping - * as possible, by computing - * - * { i -> j : exists k >= 0: - * k L <= j - i <= k U and exists a: j_p - i_p = M_p a_p } - * - * instead (i.e., allow k = 0). - * - * In practice, we compute the difference set - * - * delta = { j - i | i -> j in map }, - * - * look for stride constraint on the individual dimensions and compute - * (constant) lower and upper bounds for each individual dimension, - * adding a constraint for each bound not equal to infinity. - */ -static __isl_give isl_map *box_closure_on_domain(__isl_take isl_map *map, - __isl_take isl_set *dom, __isl_take isl_set *ran, int with_id) -{ - int i; - int k; - unsigned d; - unsigned nparam; - unsigned total; - isl_space *dim; - isl_set *delta; - isl_map *app = NULL; - isl_basic_set *aff = NULL; - isl_basic_map *bmap = NULL; - isl_vec *obj = NULL; - isl_int opt; - - isl_int_init(opt); - - delta = isl_map_deltas(isl_map_copy(map)); - - aff = isl_set_affine_hull(isl_set_copy(delta)); - if (!aff) - goto error; - dim = isl_map_get_space(map); - d = isl_space_dim(dim, isl_dim_in); - nparam = isl_space_dim(dim, isl_dim_param); - total = isl_space_dim(dim, isl_dim_all); - bmap = isl_basic_map_alloc_space(dim, - aff->n_div + 1, aff->n_div, 2 * d + 1); - for (i = 0; i < aff->n_div + 1; ++i) { - k = isl_basic_map_alloc_div(bmap); - if (k < 0) - goto error; - isl_int_set_si(bmap->div[k][0], 0); - } - for (i = 0; i < aff->n_eq; ++i) { - if (!is_eq_stride(aff, i)) - continue; - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->eq[k], 1 + nparam); - isl_seq_cpy(bmap->eq[k] + 1 + nparam + d, - aff->eq[i] + 1 + nparam, d); - isl_seq_neg(bmap->eq[k] + 1 + nparam, - aff->eq[i] + 1 + nparam, d); - isl_seq_cpy(bmap->eq[k] + 1 + nparam + 2 * d, - aff->eq[i] + 1 + nparam + d, aff->n_div); - isl_int_set_si(bmap->eq[k][1 + total + aff->n_div], 0); - } - obj = isl_vec_alloc(map->ctx, 1 + nparam + d); - if (!obj) - goto error; - isl_seq_clr(obj->el, 1 + nparam + d); - for (i = 0; i < d; ++ i) { - enum isl_lp_result res; - - isl_int_set_si(obj->el[1 + nparam + i], 1); - - res = isl_set_solve_lp(delta, 0, obj->el, map->ctx->one, &opt, - NULL, NULL); - if (res == isl_lp_error) - goto error; - if (res == isl_lp_ok) { - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->ineq[k], - 1 + nparam + 2 * d + bmap->n_div); - isl_int_set_si(bmap->ineq[k][1 + nparam + i], -1); - isl_int_set_si(bmap->ineq[k][1 + nparam + d + i], 1); - isl_int_neg(bmap->ineq[k][1 + nparam + 2 * d + aff->n_div], opt); - } - - res = isl_set_solve_lp(delta, 1, obj->el, map->ctx->one, &opt, - NULL, NULL); - if (res == isl_lp_error) - goto error; - if (res == isl_lp_ok) { - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->ineq[k], - 1 + nparam + 2 * d + bmap->n_div); - isl_int_set_si(bmap->ineq[k][1 + nparam + i], 1); - isl_int_set_si(bmap->ineq[k][1 + nparam + d + i], -1); - isl_int_set(bmap->ineq[k][1 + nparam + 2 * d + aff->n_div], opt); - } - - isl_int_set_si(obj->el[1 + nparam + i], 0); - } - k = isl_basic_map_alloc_inequality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->ineq[k], - 1 + nparam + 2 * d + bmap->n_div); - if (!with_id) - isl_int_set_si(bmap->ineq[k][0], -1); - isl_int_set_si(bmap->ineq[k][1 + nparam + 2 * d + aff->n_div], 1); - - app = isl_map_from_domain_and_range(dom, ran); - - isl_vec_free(obj); - isl_basic_set_free(aff); - isl_map_free(map); - bmap = isl_basic_map_finalize(bmap); - isl_set_free(delta); - isl_int_clear(opt); - - map = isl_map_from_basic_map(bmap); - map = isl_map_intersect(map, app); - - return map; -error: - isl_vec_free(obj); - isl_basic_map_free(bmap); - isl_basic_set_free(aff); - isl_set_free(dom); - isl_set_free(ran); - isl_map_free(map); - isl_set_free(delta); - isl_int_clear(opt); - return NULL; -} - -/* Given a map, compute the smallest superset of this map that is of the form - * - * { i -> j : L <= j - i <= U and exists a_p: j_p - i_p = M_p a_p } - * - * (where p ranges over the (non-parametric) dimensions), - * compute the transitive closure of this map, i.e., - * - * { i -> j : exists k > 0: - * k L <= j - i <= k U and exists a: j_p - i_p = M_p a_p } - * - * and intersect domain and range of this transitive closure with - * domain and range of the original map. - */ -static __isl_give isl_map *box_closure(__isl_take isl_map *map) -{ - isl_set *domain; - isl_set *range; - - domain = isl_map_domain(isl_map_copy(map)); - domain = isl_set_coalesce(domain); - range = isl_map_range(isl_map_copy(map)); - range = isl_set_coalesce(range); - - return box_closure_on_domain(map, domain, range, 0); -} - -/* Given a map, compute the smallest superset of this map that is of the form - * - * { i -> j : L <= j - i <= U and exists a_p: j_p - i_p = M_p a_p } - * - * (where p ranges over the (non-parametric) dimensions), - * compute the transitive and partially reflexive closure of this map, i.e., - * - * { i -> j : exists k >= 0: - * k L <= j - i <= k U and exists a: j_p - i_p = M_p a_p } - * - * and intersect domain and range of this transitive closure with - * the given domain. - */ -static __isl_give isl_map *box_closure_with_identity(__isl_take isl_map *map, - __isl_take isl_set *dom) -{ - return box_closure_on_domain(map, dom, isl_set_copy(dom), 1); -} - -/* Check whether app is the transitive closure of map. - * In particular, check that app is acyclic and, if so, - * check that - * - * app \subset (map \cup (map \circ app)) - */ -static int check_exactness_omega(__isl_keep isl_map *map, - __isl_keep isl_map *app) -{ - isl_set *delta; - int i; - int is_empty, is_exact; - unsigned d; - isl_map *test; - - delta = isl_map_deltas(isl_map_copy(app)); - d = isl_set_dim(delta, isl_dim_set); - for (i = 0; i < d; ++i) - delta = isl_set_fix_si(delta, isl_dim_set, i, 0); - is_empty = isl_set_is_empty(delta); - isl_set_free(delta); - if (is_empty < 0) - return -1; - if (!is_empty) - return 0; - - test = isl_map_apply_range(isl_map_copy(app), isl_map_copy(map)); - test = isl_map_union(test, isl_map_copy(map)); - is_exact = isl_map_is_subset(app, test); - isl_map_free(test); - - return is_exact; -} - -/* Check if basic map M_i can be combined with all the other - * basic maps such that - * - * (\cup_j M_j)^+ - * - * can be computed as - * - * M_i \cup (\cup_{j \ne i} M_i^* \circ M_j \circ M_i^*)^+ - * - * In particular, check if we can compute a compact representation - * of - * - * M_i^* \circ M_j \circ M_i^* - * - * for each j != i. - * Let M_i^? be an extension of M_i^+ that allows paths - * of length zero, i.e., the result of box_closure(., 1). - * The criterion, as proposed by Kelly et al., is that - * id = M_i^? - M_i^+ can be represented as a basic map - * and that - * - * id \circ M_j \circ id = M_j - * - * for each j != i. - * - * If this function returns 1, then tc and qc are set to - * M_i^+ and M_i^?, respectively. - */ -static int can_be_split_off(__isl_keep isl_map *map, int i, - __isl_give isl_map **tc, __isl_give isl_map **qc) -{ - isl_map *map_i, *id = NULL; - int j = -1; - isl_set *C; - - *tc = NULL; - *qc = NULL; - - C = isl_set_union(isl_map_domain(isl_map_copy(map)), - isl_map_range(isl_map_copy(map))); - C = isl_set_from_basic_set(isl_set_simple_hull(C)); - if (!C) - goto error; - - map_i = isl_map_from_basic_map(isl_basic_map_copy(map->p[i])); - *tc = box_closure(isl_map_copy(map_i)); - *qc = box_closure_with_identity(map_i, C); - id = isl_map_subtract(isl_map_copy(*qc), isl_map_copy(*tc)); - - if (!id || !*qc) - goto error; - if (id->n != 1 || (*qc)->n != 1) - goto done; - - for (j = 0; j < map->n; ++j) { - isl_map *map_j, *test; - int is_ok; - - if (i == j) - continue; - map_j = isl_map_from_basic_map( - isl_basic_map_copy(map->p[j])); - test = isl_map_apply_range(isl_map_copy(id), - isl_map_copy(map_j)); - test = isl_map_apply_range(test, isl_map_copy(id)); - is_ok = isl_map_is_equal(test, map_j); - isl_map_free(map_j); - isl_map_free(test); - if (is_ok < 0) - goto error; - if (!is_ok) - break; - } - -done: - isl_map_free(id); - if (j == map->n) - return 1; - - isl_map_free(*qc); - isl_map_free(*tc); - *qc = NULL; - *tc = NULL; - - return 0; -error: - isl_map_free(id); - isl_map_free(*qc); - isl_map_free(*tc); - *qc = NULL; - *tc = NULL; - return -1; -} - -static __isl_give isl_map *box_closure_with_check(__isl_take isl_map *map, - int *exact) -{ - isl_map *app; - - app = box_closure(isl_map_copy(map)); - if (exact) - *exact = check_exactness_omega(map, app); - - isl_map_free(map); - return app; -} - -/* Compute an overapproximation of the transitive closure of "map" - * using a variation of the algorithm from - * "Transitive Closure of Infinite Graphs and its Applications" - * by Kelly et al. - * - * We first check whether we can can split of any basic map M_i and - * compute - * - * (\cup_j M_j)^+ - * - * as - * - * M_i \cup (\cup_{j \ne i} M_i^* \circ M_j \circ M_i^*)^+ - * - * using a recursive call on the remaining map. - * - * If not, we simply call box_closure on the whole map. - */ -static __isl_give isl_map *transitive_closure_omega(__isl_take isl_map *map, - int *exact) -{ - int i, j; - int exact_i; - isl_map *app; - - if (!map) - return NULL; - if (map->n == 1) - return box_closure_with_check(map, exact); - - for (i = 0; i < map->n; ++i) { - int ok; - isl_map *qc, *tc; - ok = can_be_split_off(map, i, &tc, &qc); - if (ok < 0) - goto error; - if (!ok) - continue; - - app = isl_map_alloc_space(isl_map_get_space(map), map->n - 1, 0); - - for (j = 0; j < map->n; ++j) { - if (j == i) - continue; - app = isl_map_add_basic_map(app, - isl_basic_map_copy(map->p[j])); - } - - app = isl_map_apply_range(isl_map_copy(qc), app); - app = isl_map_apply_range(app, qc); - - app = isl_map_union(tc, transitive_closure_omega(app, NULL)); - exact_i = check_exactness_omega(map, app); - if (exact_i == 1) { - if (exact) - *exact = exact_i; - isl_map_free(map); - return app; - } - isl_map_free(app); - if (exact_i < 0) - goto error; - } - - return box_closure_with_check(map, exact); -error: - isl_map_free(map); - return NULL; -} - -/* Compute the transitive closure of "map", or an overapproximation. - * If the result is exact, then *exact is set to 1. - * Simply use map_power to compute the powers of map, but tell - * it to project out the lengths of the paths instead of equating - * the length to a parameter. - */ -__isl_give isl_map *isl_map_transitive_closure(__isl_take isl_map *map, - int *exact) -{ - isl_space *target_dim; - int closed; - - if (!map) - goto error; - - if (map->ctx->opt->closure == ISL_CLOSURE_BOX) - return transitive_closure_omega(map, exact); - - map = isl_map_compute_divs(map); - map = isl_map_coalesce(map); - closed = isl_map_is_transitively_closed(map); - if (closed < 0) - goto error; - if (closed) { - if (exact) - *exact = 1; - return map; - } - - target_dim = isl_map_get_space(map); - map = map_power(map, exact, 1); - map = isl_map_reset_space(map, target_dim); - - return map; -error: - isl_map_free(map); - return NULL; -} - -static int inc_count(__isl_take isl_map *map, void *user) -{ - int *n = user; - - *n += map->n; - - isl_map_free(map); - - return 0; -} - -static int collect_basic_map(__isl_take isl_map *map, void *user) -{ - int i; - isl_basic_map ***next = user; - - for (i = 0; i < map->n; ++i) { - **next = isl_basic_map_copy(map->p[i]); - if (!**next) - goto error; - (*next)++; - } - - isl_map_free(map); - return 0; -error: - isl_map_free(map); - return -1; -} - -/* Perform Floyd-Warshall on the given list of basic relations. - * The basic relations may live in different dimensions, - * but basic relations that get assigned to the diagonal of the - * grid have domains and ranges of the same dimension and so - * the standard algorithm can be used because the nested transitive - * closures are only applied to diagonal elements and because all - * compositions are peformed on relations with compatible domains and ranges. - */ -static __isl_give isl_union_map *union_floyd_warshall_on_list(isl_ctx *ctx, - __isl_keep isl_basic_map **list, int n, int *exact) -{ - int i, j, k; - int n_group; - int *group = NULL; - isl_set **set = NULL; - isl_map ***grid = NULL; - isl_union_map *app; - - group = setup_groups(ctx, list, n, &set, &n_group); - if (!group) - goto error; - - grid = isl_calloc_array(ctx, isl_map **, n_group); - if (!grid) - goto error; - for (i = 0; i < n_group; ++i) { - grid[i] = isl_calloc_array(ctx, isl_map *, n_group); - if (!grid[i]) - goto error; - for (j = 0; j < n_group; ++j) { - isl_space *dim1, *dim2, *dim; - dim1 = isl_space_reverse(isl_set_get_space(set[i])); - dim2 = isl_set_get_space(set[j]); - dim = isl_space_join(dim1, dim2); - grid[i][j] = isl_map_empty(dim); - } - } - - for (k = 0; k < n; ++k) { - i = group[2 * k]; - j = group[2 * k + 1]; - grid[i][j] = isl_map_union(grid[i][j], - isl_map_from_basic_map( - isl_basic_map_copy(list[k]))); - } - - floyd_warshall_iterate(grid, n_group, exact); - - app = isl_union_map_empty(isl_map_get_space(grid[0][0])); - - for (i = 0; i < n_group; ++i) { - for (j = 0; j < n_group; ++j) - app = isl_union_map_add_map(app, grid[i][j]); - free(grid[i]); - } - free(grid); - - for (i = 0; i < 2 * n; ++i) - isl_set_free(set[i]); - free(set); - - free(group); - return app; -error: - if (grid) - for (i = 0; i < n_group; ++i) { - if (!grid[i]) - continue; - for (j = 0; j < n_group; ++j) - isl_map_free(grid[i][j]); - free(grid[i]); - } - free(grid); - if (set) { - for (i = 0; i < 2 * n; ++i) - isl_set_free(set[i]); - free(set); - } - free(group); - return NULL; -} - -/* Perform Floyd-Warshall on the given union relation. - * The implementation is very similar to that for non-unions. - * The main difference is that it is applied unconditionally. - * We first extract a list of basic maps from the union map - * and then perform the algorithm on this list. - */ -static __isl_give isl_union_map *union_floyd_warshall( - __isl_take isl_union_map *umap, int *exact) -{ - int i, n; - isl_ctx *ctx; - isl_basic_map **list = NULL; - isl_basic_map **next; - isl_union_map *res; - - n = 0; - if (isl_union_map_foreach_map(umap, inc_count, &n) < 0) - goto error; - - ctx = isl_union_map_get_ctx(umap); - list = isl_calloc_array(ctx, isl_basic_map *, n); - if (!list) - goto error; - - next = list; - if (isl_union_map_foreach_map(umap, collect_basic_map, &next) < 0) - goto error; - - res = union_floyd_warshall_on_list(ctx, list, n, exact); - - if (list) { - for (i = 0; i < n; ++i) - isl_basic_map_free(list[i]); - free(list); - } - - isl_union_map_free(umap); - return res; -error: - if (list) { - for (i = 0; i < n; ++i) - isl_basic_map_free(list[i]); - free(list); - } - isl_union_map_free(umap); - return NULL; -} - -/* Decompose the give union relation into strongly connected components. - * The implementation is essentially the same as that of - * construct_power_components with the major difference that all - * operations are performed on union maps. - */ -static __isl_give isl_union_map *union_components( - __isl_take isl_union_map *umap, int *exact) -{ - int i; - int n; - isl_ctx *ctx; - isl_basic_map **list; - isl_basic_map **next; - isl_union_map *path = NULL; - struct basic_map_sort *s = NULL; - int c, l; - int recheck = 0; - - n = 0; - if (isl_union_map_foreach_map(umap, inc_count, &n) < 0) - goto error; - - if (n <= 1) - return union_floyd_warshall(umap, exact); - - ctx = isl_union_map_get_ctx(umap); - list = isl_calloc_array(ctx, isl_basic_map *, n); - if (!list) - goto error; - - next = list; - if (isl_union_map_foreach_map(umap, collect_basic_map, &next) < 0) - goto error; - - s = basic_map_sort_init(ctx, n, list); - if (!s) - goto error; - - c = 0; - i = 0; - l = n; - path = isl_union_map_empty(isl_union_map_get_space(umap)); - while (l) { - isl_union_map *comp; - isl_union_map *path_comp, *path_comb; - comp = isl_union_map_empty(isl_union_map_get_space(umap)); - while (s->order[i] != -1) { - comp = isl_union_map_add_map(comp, - isl_map_from_basic_map( - isl_basic_map_copy(list[s->order[i]]))); - --l; - ++i; - } - path_comp = union_floyd_warshall(comp, exact); - path_comb = isl_union_map_apply_range(isl_union_map_copy(path), - isl_union_map_copy(path_comp)); - path = isl_union_map_union(path, path_comp); - path = isl_union_map_union(path, path_comb); - ++i; - ++c; - } - - if (c > 1 && s->check_closed && !*exact) { - int closed; - - closed = isl_union_map_is_transitively_closed(path); - if (closed < 0) - goto error; - recheck = !closed; - } - - basic_map_sort_free(s); - - for (i = 0; i < n; ++i) - isl_basic_map_free(list[i]); - free(list); - - if (recheck) { - isl_union_map_free(path); - return union_floyd_warshall(umap, exact); - } - - isl_union_map_free(umap); - - return path; -error: - basic_map_sort_free(s); - if (list) { - for (i = 0; i < n; ++i) - isl_basic_map_free(list[i]); - free(list); - } - isl_union_map_free(umap); - isl_union_map_free(path); - return NULL; -} - -/* Compute the transitive closure of "umap", or an overapproximation. - * If the result is exact, then *exact is set to 1. - */ -__isl_give isl_union_map *isl_union_map_transitive_closure( - __isl_take isl_union_map *umap, int *exact) -{ - int closed; - - if (!umap) - return NULL; - - if (exact) - *exact = 1; - - umap = isl_union_map_compute_divs(umap); - umap = isl_union_map_coalesce(umap); - closed = isl_union_map_is_transitively_closed(umap); - if (closed < 0) - goto error; - if (closed) - return umap; - umap = union_components(umap, exact); - return umap; -error: - isl_union_map_free(umap); - return NULL; -} - -struct isl_union_power { - isl_union_map *pow; - int *exact; -}; - -static int power(__isl_take isl_map *map, void *user) -{ - struct isl_union_power *up = user; - - map = isl_map_power(map, up->exact); - up->pow = isl_union_map_from_map(map); - - return -1; -} - -/* Construct a map [x] -> [x+1], with parameters prescribed by "dim". - */ -static __isl_give isl_union_map *increment(__isl_take isl_space *dim) -{ - int k; - isl_basic_map *bmap; - - dim = isl_space_add_dims(dim, isl_dim_in, 1); - dim = isl_space_add_dims(dim, isl_dim_out, 1); - bmap = isl_basic_map_alloc_space(dim, 0, 1, 0); - k = isl_basic_map_alloc_equality(bmap); - if (k < 0) - goto error; - isl_seq_clr(bmap->eq[k], isl_basic_map_total_dim(bmap)); - isl_int_set_si(bmap->eq[k][0], 1); - isl_int_set_si(bmap->eq[k][isl_basic_map_offset(bmap, isl_dim_in)], 1); - isl_int_set_si(bmap->eq[k][isl_basic_map_offset(bmap, isl_dim_out)], -1); - return isl_union_map_from_map(isl_map_from_basic_map(bmap)); -error: - isl_basic_map_free(bmap); - return NULL; -} - -/* Construct a map [[x]->[y]] -> [y-x], with parameters prescribed by "dim". - */ -static __isl_give isl_union_map *deltas_map(__isl_take isl_space *dim) -{ - isl_basic_map *bmap; - - dim = isl_space_add_dims(dim, isl_dim_in, 1); - dim = isl_space_add_dims(dim, isl_dim_out, 1); - bmap = isl_basic_map_universe(dim); - bmap = isl_basic_map_deltas_map(bmap); - - return isl_union_map_from_map(isl_map_from_basic_map(bmap)); -} - -/* Compute the positive powers of "map", or an overapproximation. - * The result maps the exponent to a nested copy of the corresponding power. - * If the result is exact, then *exact is set to 1. - */ -__isl_give isl_union_map *isl_union_map_power(__isl_take isl_union_map *umap, - int *exact) -{ - int n; - isl_union_map *inc; - isl_union_map *dm; - - if (!umap) - return NULL; - n = isl_union_map_n_map(umap); - if (n == 0) - return umap; - if (n == 1) { - struct isl_union_power up = { NULL, exact }; - isl_union_map_foreach_map(umap, &power, &up); - isl_union_map_free(umap); - return up.pow; - } - inc = increment(isl_union_map_get_space(umap)); - umap = isl_union_map_product(inc, umap); - umap = isl_union_map_transitive_closure(umap, exact); - umap = isl_union_map_zip(umap); - dm = deltas_map(isl_union_map_get_space(umap)); - umap = isl_union_map_apply_domain(umap, dm); - - return umap; -} diff --git a/cloog-0.17.0/isl/isl_union_map.c b/cloog-0.17.0/isl/isl_union_map.c deleted file mode 100644 index 445d4fe..0000000 --- a/cloog-0.17.0/isl/isl_union_map.c +++ /dev/null @@ -1,2289 +0,0 @@ -/* - * Copyright 2010-2011 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#define ISL_DIM_H -#include -#include -#include -#include -#include -#include -#include -#include - -/* Is this union set a parameter domain? - */ -int isl_union_set_is_params(__isl_keep isl_union_set *uset) -{ - isl_set *set; - int params; - - if (!uset) - return -1; - if (uset->table.n != 1) - return 0; - - set = isl_set_from_union_set(isl_union_set_copy(uset)); - params = isl_set_is_params(set); - isl_set_free(set); - return params; -} - -static __isl_give isl_union_map *isl_union_map_alloc(__isl_take isl_space *dim, - int size) -{ - isl_union_map *umap; - - if (!dim) - return NULL; - - umap = isl_calloc_type(dim->ctx, isl_union_map); - if (!umap) - return NULL; - - umap->ref = 1; - umap->dim = dim; - if (isl_hash_table_init(dim->ctx, &umap->table, size) < 0) - goto error; - - return umap; -error: - isl_space_free(dim); - isl_union_map_free(umap); - return NULL; -} - -__isl_give isl_union_map *isl_union_map_empty(__isl_take isl_space *dim) -{ - return isl_union_map_alloc(dim, 16); -} - -__isl_give isl_union_set *isl_union_set_empty(__isl_take isl_space *dim) -{ - return isl_union_map_empty(dim); -} - -isl_ctx *isl_union_map_get_ctx(__isl_keep isl_union_map *umap) -{ - return umap ? umap->dim->ctx : NULL; -} - -isl_ctx *isl_union_set_get_ctx(__isl_keep isl_union_set *uset) -{ - return uset ? uset->dim->ctx : NULL; -} - -__isl_give isl_space *isl_union_map_get_space(__isl_keep isl_union_map *umap) -{ - if (!umap) - return NULL; - return isl_space_copy(umap->dim); -} - -__isl_give isl_space *isl_union_set_get_space(__isl_keep isl_union_set *uset) -{ - return isl_union_map_get_space(uset); -} - -static int free_umap_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_map_free(map); - return 0; -} - -static int add_map(__isl_take isl_map *map, void *user) -{ - isl_union_map **umap = (isl_union_map **)user; - - *umap = isl_union_map_add_map(*umap, map); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_dup(__isl_keep isl_union_map *umap) -{ - isl_union_map *dup; - - if (!umap) - return NULL; - - dup = isl_union_map_empty(isl_space_copy(umap->dim)); - if (isl_union_map_foreach_map(umap, &add_map, &dup) < 0) - goto error; - return dup; -error: - isl_union_map_free(dup); - return NULL; -} - -__isl_give isl_union_map *isl_union_map_cow(__isl_take isl_union_map *umap) -{ - if (!umap) - return NULL; - - if (umap->ref == 1) - return umap; - umap->ref--; - return isl_union_map_dup(umap); -} - -struct isl_union_align { - isl_reordering *exp; - isl_union_map *res; -}; - -static int align_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_reordering *exp; - struct isl_union_align *data = user; - - exp = isl_reordering_extend_space(isl_reordering_copy(data->exp), - isl_map_get_space(map)); - - data->res = isl_union_map_add_map(data->res, - isl_map_realign(isl_map_copy(map), exp)); - - return 0; -} - -/* Align the parameters of umap along those of model. - * The result has the parameters of model first, in the same order - * as they appear in model, followed by any remaining parameters of - * umap that do not appear in model. - */ -__isl_give isl_union_map *isl_union_map_align_params( - __isl_take isl_union_map *umap, __isl_take isl_space *model) -{ - struct isl_union_align data = { NULL, NULL }; - - if (!umap || !model) - goto error; - - if (isl_space_match(umap->dim, isl_dim_param, model, isl_dim_param)) { - isl_space_free(model); - return umap; - } - - model = isl_space_params(model); - data.exp = isl_parameter_alignment_reordering(umap->dim, model); - if (!data.exp) - goto error; - - data.res = isl_union_map_alloc(isl_space_copy(data.exp->dim), - umap->table.n); - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, - &align_entry, &data) < 0) - goto error; - - isl_reordering_free(data.exp); - isl_union_map_free(umap); - isl_space_free(model); - return data.res; -error: - isl_reordering_free(data.exp); - isl_union_map_free(umap); - isl_union_map_free(data.res); - isl_space_free(model); - return NULL; -} - -__isl_give isl_union_set *isl_union_set_align_params( - __isl_take isl_union_set *uset, __isl_take isl_space *model) -{ - return isl_union_map_align_params(uset, model); -} - -__isl_give isl_union_map *isl_union_map_union(__isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2) -{ - umap1 = isl_union_map_align_params(umap1, isl_union_map_get_space(umap2)); - umap2 = isl_union_map_align_params(umap2, isl_union_map_get_space(umap1)); - - umap1 = isl_union_map_cow(umap1); - - if (!umap1 || !umap2) - goto error; - - if (isl_union_map_foreach_map(umap2, &add_map, &umap1) < 0) - goto error; - - isl_union_map_free(umap2); - - return umap1; -error: - isl_union_map_free(umap1); - isl_union_map_free(umap2); - return NULL; -} - -__isl_give isl_union_set *isl_union_set_union(__isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2) -{ - return isl_union_map_union(uset1, uset2); -} - -__isl_give isl_union_map *isl_union_map_copy(__isl_keep isl_union_map *umap) -{ - if (!umap) - return NULL; - - umap->ref++; - return umap; -} - -__isl_give isl_union_set *isl_union_set_copy(__isl_keep isl_union_set *uset) -{ - return isl_union_map_copy(uset); -} - -void *isl_union_map_free(__isl_take isl_union_map *umap) -{ - if (!umap) - return NULL; - - if (--umap->ref > 0) - return NULL; - - isl_hash_table_foreach(umap->dim->ctx, &umap->table, - &free_umap_entry, NULL); - isl_hash_table_clear(&umap->table); - isl_space_free(umap->dim); - free(umap); - return NULL; -} - -void *isl_union_set_free(__isl_take isl_union_set *uset) -{ - return isl_union_map_free(uset); -} - -static int has_dim(const void *entry, const void *val) -{ - isl_map *map = (isl_map *)entry; - isl_space *dim = (isl_space *)val; - - return isl_space_is_equal(map->dim, dim); -} - -__isl_give isl_union_map *isl_union_map_add_map(__isl_take isl_union_map *umap, - __isl_take isl_map *map) -{ - uint32_t hash; - struct isl_hash_table_entry *entry; - - if (!map || !umap) - goto error; - - if (isl_map_plain_is_empty(map)) { - isl_map_free(map); - return umap; - } - - if (!isl_space_match(map->dim, isl_dim_param, umap->dim, isl_dim_param)) { - umap = isl_union_map_align_params(umap, isl_map_get_space(map)); - map = isl_map_align_params(map, isl_union_map_get_space(umap)); - } - - umap = isl_union_map_cow(umap); - - if (!map || !umap) - goto error; - - hash = isl_space_get_hash(map->dim); - entry = isl_hash_table_find(umap->dim->ctx, &umap->table, hash, - &has_dim, map->dim, 1); - if (!entry) - goto error; - - if (!entry->data) - entry->data = map; - else { - entry->data = isl_map_union(entry->data, isl_map_copy(map)); - if (!entry->data) - goto error; - isl_map_free(map); - } - - return umap; -error: - isl_map_free(map); - isl_union_map_free(umap); - return NULL; -} - -__isl_give isl_union_set *isl_union_set_add_set(__isl_take isl_union_set *uset, - __isl_take isl_set *set) -{ - return isl_union_map_add_map(uset, (isl_map *)set); -} - -__isl_give isl_union_map *isl_union_map_from_map(__isl_take isl_map *map) -{ - isl_space *dim; - isl_union_map *umap; - - if (!map) - return NULL; - - dim = isl_map_get_space(map); - dim = isl_space_params(dim); - umap = isl_union_map_empty(dim); - umap = isl_union_map_add_map(umap, map); - - return umap; -} - -__isl_give isl_union_set *isl_union_set_from_set(__isl_take isl_set *set) -{ - return isl_union_map_from_map((isl_map *)set); -} - -struct isl_union_map_foreach_data -{ - int (*fn)(__isl_take isl_map *map, void *user); - void *user; -}; - -static int call_on_copy(void **entry, void *user) -{ - isl_map *map = *entry; - struct isl_union_map_foreach_data *data; - data = (struct isl_union_map_foreach_data *)user; - - return data->fn(isl_map_copy(map), data->user); -} - -int isl_union_map_n_map(__isl_keep isl_union_map *umap) -{ - return umap ? umap->table.n : 0; -} - -int isl_union_set_n_set(__isl_keep isl_union_set *uset) -{ - return uset ? uset->table.n : 0; -} - -int isl_union_map_foreach_map(__isl_keep isl_union_map *umap, - int (*fn)(__isl_take isl_map *map, void *user), void *user) -{ - struct isl_union_map_foreach_data data = { fn, user }; - - if (!umap) - return -1; - - return isl_hash_table_foreach(umap->dim->ctx, &umap->table, - &call_on_copy, &data); -} - -static int copy_map(void **entry, void *user) -{ - isl_map *map = *entry; - isl_map **map_p = user; - - *map_p = isl_map_copy(map); - - return -1; -} - -__isl_give isl_map *isl_map_from_union_map(__isl_take isl_union_map *umap) -{ - isl_ctx *ctx; - isl_map *map = NULL; - - if (!umap) - return NULL; - ctx = isl_union_map_get_ctx(umap); - if (umap->table.n != 1) - isl_die(ctx, isl_error_invalid, - "union map needs to contain elements in exactly " - "one space", return isl_union_map_free(umap)); - - isl_hash_table_foreach(ctx, &umap->table, ©_map, &map); - - isl_union_map_free(umap); - - return map; -} - -__isl_give isl_set *isl_set_from_union_set(__isl_take isl_union_set *uset) -{ - return isl_map_from_union_map(uset); -} - -__isl_give isl_map *isl_union_map_extract_map(__isl_keep isl_union_map *umap, - __isl_take isl_space *dim) -{ - uint32_t hash; - struct isl_hash_table_entry *entry; - - if (!umap || !dim) - goto error; - - hash = isl_space_get_hash(dim); - entry = isl_hash_table_find(umap->dim->ctx, &umap->table, hash, - &has_dim, dim, 0); - if (!entry) - return isl_map_empty(dim); - isl_space_free(dim); - return isl_map_copy(entry->data); -error: - isl_space_free(dim); - return NULL; -} - -__isl_give isl_set *isl_union_set_extract_set(__isl_keep isl_union_set *uset, - __isl_take isl_space *dim) -{ - return (isl_set *)isl_union_map_extract_map(uset, dim); -} - -/* Check if umap contains a map in the given space. - */ -__isl_give int isl_union_map_contains(__isl_keep isl_union_map *umap, - __isl_keep isl_space *dim) -{ - uint32_t hash; - struct isl_hash_table_entry *entry; - - if (!umap || !dim) - return -1; - - hash = isl_space_get_hash(dim); - entry = isl_hash_table_find(umap->dim->ctx, &umap->table, hash, - &has_dim, dim, 0); - return !!entry; -} - -__isl_give int isl_union_set_contains(__isl_keep isl_union_set *uset, - __isl_keep isl_space *dim) -{ - return isl_union_map_contains(uset, dim); -} - -int isl_union_set_foreach_set(__isl_keep isl_union_set *uset, - int (*fn)(__isl_take isl_set *set, void *user), void *user) -{ - return isl_union_map_foreach_map(uset, - (int(*)(__isl_take isl_map *, void*))fn, user); -} - -struct isl_union_set_foreach_point_data { - int (*fn)(__isl_take isl_point *pnt, void *user); - void *user; -}; - -static int foreach_point(__isl_take isl_set *set, void *user) -{ - struct isl_union_set_foreach_point_data *data = user; - int r; - - r = isl_set_foreach_point(set, data->fn, data->user); - isl_set_free(set); - - return r; -} - -int isl_union_set_foreach_point(__isl_keep isl_union_set *uset, - int (*fn)(__isl_take isl_point *pnt, void *user), void *user) -{ - struct isl_union_set_foreach_point_data data = { fn, user }; - return isl_union_set_foreach_set(uset, &foreach_point, &data); -} - -struct isl_union_map_gen_bin_data { - isl_union_map *umap2; - isl_union_map *res; -}; - -static int subtract_entry(void **entry, void *user) -{ - struct isl_union_map_gen_bin_data *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - isl_map *map = *entry; - - hash = isl_space_get_hash(map->dim); - entry2 = isl_hash_table_find(data->umap2->dim->ctx, &data->umap2->table, - hash, &has_dim, map->dim, 0); - map = isl_map_copy(map); - if (entry2) { - int empty; - map = isl_map_subtract(map, isl_map_copy(entry2->data)); - - empty = isl_map_is_empty(map); - if (empty < 0) { - isl_map_free(map); - return -1; - } - if (empty) { - isl_map_free(map); - return 0; - } - } - data->res = isl_union_map_add_map(data->res, map); - - return 0; -} - -static __isl_give isl_union_map *gen_bin_op(__isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2, int (*fn)(void **, void *)) -{ - struct isl_union_map_gen_bin_data data = { NULL, NULL }; - - umap1 = isl_union_map_align_params(umap1, isl_union_map_get_space(umap2)); - umap2 = isl_union_map_align_params(umap2, isl_union_map_get_space(umap1)); - - if (!umap1 || !umap2) - goto error; - - data.umap2 = umap2; - data.res = isl_union_map_alloc(isl_space_copy(umap1->dim), - umap1->table.n); - if (isl_hash_table_foreach(umap1->dim->ctx, &umap1->table, - fn, &data) < 0) - goto error; - - isl_union_map_free(umap1); - isl_union_map_free(umap2); - return data.res; -error: - isl_union_map_free(umap1); - isl_union_map_free(umap2); - isl_union_map_free(data.res); - return NULL; -} - -__isl_give isl_union_map *isl_union_map_subtract( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return gen_bin_op(umap1, umap2, &subtract_entry); -} - -__isl_give isl_union_set *isl_union_set_subtract( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) -{ - return isl_union_map_subtract(uset1, uset2); -} - -struct isl_union_map_gen_bin_set_data { - isl_set *set; - isl_union_map *res; -}; - -static int intersect_params_entry(void **entry, void *user) -{ - struct isl_union_map_gen_bin_set_data *data = user; - isl_map *map = *entry; - int empty; - - map = isl_map_copy(map); - map = isl_map_intersect_params(map, isl_set_copy(data->set)); - - empty = isl_map_is_empty(map); - if (empty < 0) { - isl_map_free(map); - return -1; - } - - data->res = isl_union_map_add_map(data->res, map); - - return 0; -} - -static __isl_give isl_union_map *gen_bin_set_op(__isl_take isl_union_map *umap, - __isl_take isl_set *set, int (*fn)(void **, void *)) -{ - struct isl_union_map_gen_bin_set_data data = { NULL, NULL }; - - umap = isl_union_map_align_params(umap, isl_set_get_space(set)); - set = isl_set_align_params(set, isl_union_map_get_space(umap)); - - if (!umap || !set) - goto error; - - data.set = set; - data.res = isl_union_map_alloc(isl_space_copy(umap->dim), - umap->table.n); - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, - fn, &data) < 0) - goto error; - - isl_union_map_free(umap); - isl_set_free(set); - return data.res; -error: - isl_union_map_free(umap); - isl_set_free(set); - isl_union_map_free(data.res); - return NULL; -} - -__isl_give isl_union_map *isl_union_map_intersect_params( - __isl_take isl_union_map *umap, __isl_take isl_set *set) -{ - return gen_bin_set_op(umap, set, &intersect_params_entry); -} - -__isl_give isl_union_set *isl_union_set_intersect_params( - __isl_take isl_union_set *uset, __isl_take isl_set *set) -{ - return isl_union_map_intersect_params(uset, set); -} - -static __isl_give isl_union_map *union_map_intersect_params( - __isl_take isl_union_map *umap, __isl_take isl_union_set *uset) -{ - return isl_union_map_intersect_params(umap, - isl_set_from_union_set(uset)); -} - -static __isl_give isl_union_map *union_map_gist_params( - __isl_take isl_union_map *umap, __isl_take isl_union_set *uset) -{ - return isl_union_map_gist_params(umap, isl_set_from_union_set(uset)); -} - -struct isl_union_map_match_bin_data { - isl_union_map *umap2; - isl_union_map *res; - __isl_give isl_map *(*fn)(__isl_take isl_map*, __isl_take isl_map*); -}; - -static int match_bin_entry(void **entry, void *user) -{ - struct isl_union_map_match_bin_data *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - isl_map *map = *entry; - int empty; - - hash = isl_space_get_hash(map->dim); - entry2 = isl_hash_table_find(data->umap2->dim->ctx, &data->umap2->table, - hash, &has_dim, map->dim, 0); - if (!entry2) - return 0; - - map = isl_map_copy(map); - map = data->fn(map, isl_map_copy(entry2->data)); - - empty = isl_map_is_empty(map); - if (empty < 0) { - isl_map_free(map); - return -1; - } - if (empty) { - isl_map_free(map); - return 0; - } - - data->res = isl_union_map_add_map(data->res, map); - - return 0; -} - -static __isl_give isl_union_map *match_bin_op(__isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2, - __isl_give isl_map *(*fn)(__isl_take isl_map*, __isl_take isl_map*)) -{ - struct isl_union_map_match_bin_data data = { NULL, NULL, fn }; - - umap1 = isl_union_map_align_params(umap1, isl_union_map_get_space(umap2)); - umap2 = isl_union_map_align_params(umap2, isl_union_map_get_space(umap1)); - - if (!umap1 || !umap2) - goto error; - - data.umap2 = umap2; - data.res = isl_union_map_alloc(isl_space_copy(umap1->dim), - umap1->table.n); - if (isl_hash_table_foreach(umap1->dim->ctx, &umap1->table, - &match_bin_entry, &data) < 0) - goto error; - - isl_union_map_free(umap1); - isl_union_map_free(umap2); - return data.res; -error: - isl_union_map_free(umap1); - isl_union_map_free(umap2); - isl_union_map_free(data.res); - return NULL; -} - -__isl_give isl_union_map *isl_union_map_intersect( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return match_bin_op(umap1, umap2, &isl_map_intersect); -} - -/* Compute the intersection of the two union_sets. - * As a special case, if exactly one of the two union_sets - * is a parameter domain, then intersect the parameter domain - * of the other one with this set. - */ -__isl_give isl_union_set *isl_union_set_intersect( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) -{ - int p1, p2; - - p1 = isl_union_set_is_params(uset1); - p2 = isl_union_set_is_params(uset2); - if (p1 < 0 || p2 < 0) - goto error; - if (!p1 && p2) - return union_map_intersect_params(uset1, uset2); - if (p1 && !p2) - return union_map_intersect_params(uset2, uset1); - return isl_union_map_intersect(uset1, uset2); -error: - isl_union_set_free(uset1); - isl_union_set_free(uset2); - return NULL; -} - -static int gist_params_entry(void **entry, void *user) -{ - struct isl_union_map_gen_bin_set_data *data = user; - isl_map *map = *entry; - int empty; - - map = isl_map_copy(map); - map = isl_map_gist_params(map, isl_set_copy(data->set)); - - empty = isl_map_is_empty(map); - if (empty < 0) { - isl_map_free(map); - return -1; - } - - data->res = isl_union_map_add_map(data->res, map); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_gist_params( - __isl_take isl_union_map *umap, __isl_take isl_set *set) -{ - return gen_bin_set_op(umap, set, &gist_params_entry); -} - -__isl_give isl_union_set *isl_union_set_gist_params( - __isl_take isl_union_set *uset, __isl_take isl_set *set) -{ - return isl_union_map_gist_params(uset, set); -} - -__isl_give isl_union_map *isl_union_map_gist(__isl_take isl_union_map *umap, - __isl_take isl_union_map *context) -{ - return match_bin_op(umap, context, &isl_map_gist); -} - -__isl_give isl_union_set *isl_union_set_gist(__isl_take isl_union_set *uset, - __isl_take isl_union_set *context) -{ - if (isl_union_set_is_params(context)) - return union_map_gist_params(uset, context); - return isl_union_map_gist(uset, context); -} - -static __isl_give isl_map *lex_le_set(__isl_take isl_map *set1, - __isl_take isl_map *set2) -{ - return isl_set_lex_le_set((isl_set *)set1, (isl_set *)set2); -} - -static __isl_give isl_map *lex_lt_set(__isl_take isl_map *set1, - __isl_take isl_map *set2) -{ - return isl_set_lex_lt_set((isl_set *)set1, (isl_set *)set2); -} - -__isl_give isl_union_map *isl_union_set_lex_lt_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) -{ - return match_bin_op(uset1, uset2, &lex_lt_set); -} - -__isl_give isl_union_map *isl_union_set_lex_le_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) -{ - return match_bin_op(uset1, uset2, &lex_le_set); -} - -__isl_give isl_union_map *isl_union_set_lex_gt_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) -{ - return isl_union_map_reverse(isl_union_set_lex_lt_union_set(uset2, uset1)); -} - -__isl_give isl_union_map *isl_union_set_lex_ge_union_set( - __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) -{ - return isl_union_map_reverse(isl_union_set_lex_le_union_set(uset2, uset1)); -} - -__isl_give isl_union_map *isl_union_map_lex_gt_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return isl_union_map_reverse(isl_union_map_lex_lt_union_map(umap2, umap1)); -} - -__isl_give isl_union_map *isl_union_map_lex_ge_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return isl_union_map_reverse(isl_union_map_lex_le_union_map(umap2, umap1)); -} - -static int intersect_domain_entry(void **entry, void *user) -{ - struct isl_union_map_gen_bin_data *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - isl_space *dim; - isl_map *map = *entry; - int empty; - - dim = isl_map_get_space(map); - dim = isl_space_domain(dim); - hash = isl_space_get_hash(dim); - entry2 = isl_hash_table_find(data->umap2->dim->ctx, &data->umap2->table, - hash, &has_dim, dim, 0); - isl_space_free(dim); - if (!entry2) - return 0; - - map = isl_map_copy(map); - map = isl_map_intersect_domain(map, isl_set_copy(entry2->data)); - - empty = isl_map_is_empty(map); - if (empty < 0) { - isl_map_free(map); - return -1; - } - if (empty) { - isl_map_free(map); - return 0; - } - - data->res = isl_union_map_add_map(data->res, map); - - return 0; -} - -/* Intersect the domain of "umap" with "uset". - * If "uset" is a parameters domain, then intersect the parameter - * domain of "umap" with this set. - */ -__isl_give isl_union_map *isl_union_map_intersect_domain( - __isl_take isl_union_map *umap, __isl_take isl_union_set *uset) -{ - if (isl_union_set_is_params(uset)) - return union_map_intersect_params(umap, uset); - return gen_bin_op(umap, uset, &intersect_domain_entry); -} - -static int gist_domain_entry(void **entry, void *user) -{ - struct isl_union_map_gen_bin_data *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - isl_space *dim; - isl_map *map = *entry; - int empty; - - dim = isl_map_get_space(map); - dim = isl_space_domain(dim); - hash = isl_space_get_hash(dim); - entry2 = isl_hash_table_find(data->umap2->dim->ctx, &data->umap2->table, - hash, &has_dim, dim, 0); - isl_space_free(dim); - if (!entry2) - return 0; - - map = isl_map_copy(map); - map = isl_map_gist_domain(map, isl_set_copy(entry2->data)); - - empty = isl_map_is_empty(map); - if (empty < 0) { - isl_map_free(map); - return -1; - } - - data->res = isl_union_map_add_map(data->res, map); - - return 0; -} - -/* Compute the gist of "umap" with respect to the domain "uset". - * If "uset" is a parameters domain, then compute the gist - * with respect to this parameter domain. - */ -__isl_give isl_union_map *isl_union_map_gist_domain( - __isl_take isl_union_map *umap, __isl_take isl_union_set *uset) -{ - if (isl_union_set_is_params(uset)) - return union_map_gist_params(umap, uset); - return gen_bin_op(umap, uset, &gist_domain_entry); -} - -static int intersect_range_entry(void **entry, void *user) -{ - struct isl_union_map_gen_bin_data *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - isl_space *dim; - isl_map *map = *entry; - int empty; - - dim = isl_map_get_space(map); - dim = isl_space_range(dim); - hash = isl_space_get_hash(dim); - entry2 = isl_hash_table_find(data->umap2->dim->ctx, &data->umap2->table, - hash, &has_dim, dim, 0); - isl_space_free(dim); - if (!entry2) - return 0; - - map = isl_map_copy(map); - map = isl_map_intersect_range(map, isl_set_copy(entry2->data)); - - empty = isl_map_is_empty(map); - if (empty < 0) { - isl_map_free(map); - return -1; - } - if (empty) { - isl_map_free(map); - return 0; - } - - data->res = isl_union_map_add_map(data->res, map); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_intersect_range( - __isl_take isl_union_map *umap, __isl_take isl_union_set *uset) -{ - return gen_bin_op(umap, uset, &intersect_range_entry); -} - -struct isl_union_map_bin_data { - isl_union_map *umap2; - isl_union_map *res; - isl_map *map; - int (*fn)(void **entry, void *user); -}; - -static int apply_range_entry(void **entry, void *user) -{ - struct isl_union_map_bin_data *data = user; - isl_map *map2 = *entry; - int empty; - - if (!isl_space_tuple_match(data->map->dim, isl_dim_out, - map2->dim, isl_dim_in)) - return 0; - - map2 = isl_map_apply_range(isl_map_copy(data->map), isl_map_copy(map2)); - - empty = isl_map_is_empty(map2); - if (empty < 0) { - isl_map_free(map2); - return -1; - } - if (empty) { - isl_map_free(map2); - return 0; - } - - data->res = isl_union_map_add_map(data->res, map2); - - return 0; -} - -static int bin_entry(void **entry, void *user) -{ - struct isl_union_map_bin_data *data = user; - isl_map *map = *entry; - - data->map = map; - if (isl_hash_table_foreach(data->umap2->dim->ctx, &data->umap2->table, - data->fn, data) < 0) - return -1; - - return 0; -} - -static __isl_give isl_union_map *bin_op(__isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2, int (*fn)(void **entry, void *user)) -{ - struct isl_union_map_bin_data data = { NULL, NULL, NULL, fn }; - - umap1 = isl_union_map_align_params(umap1, isl_union_map_get_space(umap2)); - umap2 = isl_union_map_align_params(umap2, isl_union_map_get_space(umap1)); - - if (!umap1 || !umap2) - goto error; - - data.umap2 = umap2; - data.res = isl_union_map_alloc(isl_space_copy(umap1->dim), - umap1->table.n); - if (isl_hash_table_foreach(umap1->dim->ctx, &umap1->table, - &bin_entry, &data) < 0) - goto error; - - isl_union_map_free(umap1); - isl_union_map_free(umap2); - return data.res; -error: - isl_union_map_free(umap1); - isl_union_map_free(umap2); - isl_union_map_free(data.res); - return NULL; -} - -__isl_give isl_union_map *isl_union_map_apply_range( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return bin_op(umap1, umap2, &apply_range_entry); -} - -__isl_give isl_union_map *isl_union_map_apply_domain( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - umap1 = isl_union_map_reverse(umap1); - umap1 = isl_union_map_apply_range(umap1, umap2); - return isl_union_map_reverse(umap1); -} - -__isl_give isl_union_set *isl_union_set_apply( - __isl_take isl_union_set *uset, __isl_take isl_union_map *umap) -{ - return isl_union_map_apply_range(uset, umap); -} - -static int map_lex_lt_entry(void **entry, void *user) -{ - struct isl_union_map_bin_data *data = user; - isl_map *map2 = *entry; - - if (!isl_space_tuple_match(data->map->dim, isl_dim_out, - map2->dim, isl_dim_out)) - return 0; - - map2 = isl_map_lex_lt_map(isl_map_copy(data->map), isl_map_copy(map2)); - - data->res = isl_union_map_add_map(data->res, map2); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_lex_lt_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return bin_op(umap1, umap2, &map_lex_lt_entry); -} - -static int map_lex_le_entry(void **entry, void *user) -{ - struct isl_union_map_bin_data *data = user; - isl_map *map2 = *entry; - - if (!isl_space_tuple_match(data->map->dim, isl_dim_out, - map2->dim, isl_dim_out)) - return 0; - - map2 = isl_map_lex_le_map(isl_map_copy(data->map), isl_map_copy(map2)); - - data->res = isl_union_map_add_map(data->res, map2); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_lex_le_union_map( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return bin_op(umap1, umap2, &map_lex_le_entry); -} - -static int product_entry(void **entry, void *user) -{ - struct isl_union_map_bin_data *data = user; - isl_map *map2 = *entry; - - map2 = isl_map_product(isl_map_copy(data->map), isl_map_copy(map2)); - - data->res = isl_union_map_add_map(data->res, map2); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_product(__isl_take isl_union_map *umap1, - __isl_take isl_union_map *umap2) -{ - return bin_op(umap1, umap2, &product_entry); -} - -__isl_give isl_union_set *isl_union_set_product(__isl_take isl_union_set *uset1, - __isl_take isl_union_set *uset2) -{ - return isl_union_map_product(uset1, uset2); -} - -static int range_product_entry(void **entry, void *user) -{ - struct isl_union_map_bin_data *data = user; - isl_map *map2 = *entry; - - if (!isl_space_tuple_match(data->map->dim, isl_dim_in, - map2->dim, isl_dim_in)) - return 0; - - map2 = isl_map_range_product(isl_map_copy(data->map), - isl_map_copy(map2)); - - data->res = isl_union_map_add_map(data->res, map2); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_range_product( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return bin_op(umap1, umap2, &range_product_entry); -} - -static int flat_range_product_entry(void **entry, void *user) -{ - struct isl_union_map_bin_data *data = user; - isl_map *map2 = *entry; - - if (!isl_space_tuple_match(data->map->dim, isl_dim_in, - map2->dim, isl_dim_in)) - return 0; - - map2 = isl_map_flat_range_product(isl_map_copy(data->map), - isl_map_copy(map2)); - - data->res = isl_union_map_add_map(data->res, map2); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_flat_range_product( - __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) -{ - return bin_op(umap1, umap2, &flat_range_product_entry); -} - -static __isl_give isl_union_set *cond_un_op(__isl_take isl_union_map *umap, - int (*fn)(void **, void *)) -{ - isl_union_set *res; - - if (!umap) - return NULL; - - res = isl_union_map_alloc(isl_space_copy(umap->dim), umap->table.n); - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, fn, &res) < 0) - goto error; - - isl_union_map_free(umap); - return res; -error: - isl_union_map_free(umap); - isl_union_set_free(res); - return NULL; -} - -static int from_range_entry(void **entry, void *user) -{ - isl_map *set = *entry; - isl_union_set **res = user; - - *res = isl_union_map_add_map(*res, - isl_map_from_range(isl_set_copy(set))); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_from_range( - __isl_take isl_union_set *uset) -{ - return cond_un_op(uset, &from_range_entry); -} - -__isl_give isl_union_map *isl_union_map_from_domain( - __isl_take isl_union_set *uset) -{ - return isl_union_map_reverse(isl_union_map_from_range(uset)); -} - -__isl_give isl_union_map *isl_union_map_from_domain_and_range( - __isl_take isl_union_set *domain, __isl_take isl_union_set *range) -{ - return isl_union_map_apply_range(isl_union_map_from_domain(domain), - isl_union_map_from_range(range)); -} - -static __isl_give isl_union_map *un_op(__isl_take isl_union_map *umap, - int (*fn)(void **, void *)) -{ - umap = isl_union_map_cow(umap); - if (!umap) - return NULL; - - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, fn, NULL) < 0) - goto error; - - return umap; -error: - isl_union_map_free(umap); - return NULL; -} - -static int affine_entry(void **entry, void *user) -{ - isl_map **map = (isl_map **)entry; - - *map = isl_map_from_basic_map(isl_map_affine_hull(*map)); - - return *map ? 0 : -1; -} - -__isl_give isl_union_map *isl_union_map_affine_hull( - __isl_take isl_union_map *umap) -{ - return un_op(umap, &affine_entry); -} - -__isl_give isl_union_set *isl_union_set_affine_hull( - __isl_take isl_union_set *uset) -{ - return isl_union_map_affine_hull(uset); -} - -static int polyhedral_entry(void **entry, void *user) -{ - isl_map **map = (isl_map **)entry; - - *map = isl_map_from_basic_map(isl_map_polyhedral_hull(*map)); - - return *map ? 0 : -1; -} - -__isl_give isl_union_map *isl_union_map_polyhedral_hull( - __isl_take isl_union_map *umap) -{ - return un_op(umap, &polyhedral_entry); -} - -__isl_give isl_union_set *isl_union_set_polyhedral_hull( - __isl_take isl_union_set *uset) -{ - return isl_union_map_polyhedral_hull(uset); -} - -static int simple_entry(void **entry, void *user) -{ - isl_map **map = (isl_map **)entry; - - *map = isl_map_from_basic_map(isl_map_simple_hull(*map)); - - return *map ? 0 : -1; -} - -__isl_give isl_union_map *isl_union_map_simple_hull( - __isl_take isl_union_map *umap) -{ - return un_op(umap, &simple_entry); -} - -__isl_give isl_union_set *isl_union_set_simple_hull( - __isl_take isl_union_set *uset) -{ - return isl_union_map_simple_hull(uset); -} - -static int inplace_entry(void **entry, void *user) -{ - __isl_give isl_map *(*fn)(__isl_take isl_map *); - isl_map **map = (isl_map **)entry; - isl_map *copy; - - fn = *(__isl_give isl_map *(**)(__isl_take isl_map *)) user; - copy = fn(isl_map_copy(*map)); - if (!copy) - return -1; - - isl_map_free(*map); - *map = copy; - - return 0; -} - -static __isl_give isl_union_map *inplace(__isl_take isl_union_map *umap, - __isl_give isl_map *(*fn)(__isl_take isl_map *)) -{ - if (!umap) - return NULL; - - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, - &inplace_entry, &fn) < 0) - goto error; - - return umap; -error: - isl_union_map_free(umap); - return NULL; -} - -__isl_give isl_union_map *isl_union_map_coalesce( - __isl_take isl_union_map *umap) -{ - return inplace(umap, &isl_map_coalesce); -} - -__isl_give isl_union_set *isl_union_set_coalesce( - __isl_take isl_union_set *uset) -{ - return isl_union_map_coalesce(uset); -} - -__isl_give isl_union_map *isl_union_map_detect_equalities( - __isl_take isl_union_map *umap) -{ - return inplace(umap, &isl_map_detect_equalities); -} - -__isl_give isl_union_set *isl_union_set_detect_equalities( - __isl_take isl_union_set *uset) -{ - return isl_union_map_detect_equalities(uset); -} - -__isl_give isl_union_map *isl_union_map_compute_divs( - __isl_take isl_union_map *umap) -{ - return inplace(umap, &isl_map_compute_divs); -} - -__isl_give isl_union_set *isl_union_set_compute_divs( - __isl_take isl_union_set *uset) -{ - return isl_union_map_compute_divs(uset); -} - -static int lexmin_entry(void **entry, void *user) -{ - isl_map **map = (isl_map **)entry; - - *map = isl_map_lexmin(*map); - - return *map ? 0 : -1; -} - -__isl_give isl_union_map *isl_union_map_lexmin( - __isl_take isl_union_map *umap) -{ - return un_op(umap, &lexmin_entry); -} - -__isl_give isl_union_set *isl_union_set_lexmin( - __isl_take isl_union_set *uset) -{ - return isl_union_map_lexmin(uset); -} - -static int lexmax_entry(void **entry, void *user) -{ - isl_map **map = (isl_map **)entry; - - *map = isl_map_lexmax(*map); - - return *map ? 0 : -1; -} - -__isl_give isl_union_map *isl_union_map_lexmax( - __isl_take isl_union_map *umap) -{ - return un_op(umap, &lexmax_entry); -} - -__isl_give isl_union_set *isl_union_set_lexmax( - __isl_take isl_union_set *uset) -{ - return isl_union_map_lexmax(uset); -} - -static int universe_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_map **res = user; - - map = isl_map_universe(isl_map_get_space(map)); - *res = isl_union_map_add_map(*res, map); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_universe(__isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &universe_entry); -} - -__isl_give isl_union_set *isl_union_set_universe(__isl_take isl_union_set *uset) -{ - return isl_union_map_universe(uset); -} - -static int reverse_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_map **res = user; - - *res = isl_union_map_add_map(*res, isl_map_reverse(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_reverse(__isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &reverse_entry); -} - -static int params_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_set **res = user; - - *res = isl_union_set_add_set(*res, isl_map_params(isl_map_copy(map))); - - return 0; -} - -/* Compute the parameter domain of the given union map. - */ -__isl_give isl_set *isl_union_map_params(__isl_take isl_union_map *umap) -{ - int empty; - - empty = isl_union_map_is_empty(umap); - if (empty < 0) - return isl_union_map_free(umap); - if (empty) - return isl_set_empty(isl_union_map_get_space(umap)); - return isl_set_from_union_set(cond_un_op(umap, ¶ms_entry)); -} - -/* Compute the parameter domain of the given union set. - */ -__isl_give isl_set *isl_union_set_params(__isl_take isl_union_set *uset) -{ - return isl_union_map_params(uset); -} - -static int domain_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_set **res = user; - - *res = isl_union_set_add_set(*res, isl_map_domain(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_set *isl_union_map_domain(__isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &domain_entry); -} - -static int range_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_set **res = user; - - *res = isl_union_set_add_set(*res, isl_map_range(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_set *isl_union_map_range(__isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &range_entry); -} - -static int domain_map_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_set **res = user; - - *res = isl_union_map_add_map(*res, - isl_map_domain_map(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_domain_map( - __isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &domain_map_entry); -} - -static int range_map_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_set **res = user; - - *res = isl_union_map_add_map(*res, - isl_map_range_map(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_range_map( - __isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &range_map_entry); -} - -static int deltas_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_set **res = user; - - if (!isl_space_tuple_match(map->dim, isl_dim_in, map->dim, isl_dim_out)) - return 0; - - *res = isl_union_set_add_set(*res, isl_map_deltas(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_set *isl_union_map_deltas(__isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &deltas_entry); -} - -static int deltas_map_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_map **res = user; - - if (!isl_space_tuple_match(map->dim, isl_dim_in, map->dim, isl_dim_out)) - return 0; - - *res = isl_union_map_add_map(*res, - isl_map_deltas_map(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_deltas_map( - __isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &deltas_map_entry); -} - -static int identity_entry(void **entry, void *user) -{ - isl_set *set = *entry; - isl_union_map **res = user; - - *res = isl_union_map_add_map(*res, isl_set_identity(isl_set_copy(set))); - - return 0; -} - -__isl_give isl_union_map *isl_union_set_identity(__isl_take isl_union_set *uset) -{ - return cond_un_op(uset, &identity_entry); -} - -static int unwrap_entry(void **entry, void *user) -{ - isl_set *set = *entry; - isl_union_set **res = user; - - if (!isl_set_is_wrapping(set)) - return 0; - - *res = isl_union_map_add_map(*res, isl_set_unwrap(isl_set_copy(set))); - - return 0; -} - -__isl_give isl_union_map *isl_union_set_unwrap(__isl_take isl_union_set *uset) -{ - return cond_un_op(uset, &unwrap_entry); -} - -static int wrap_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_set **res = user; - - *res = isl_union_set_add_set(*res, isl_map_wrap(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_set *isl_union_map_wrap(__isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &wrap_entry); -} - -struct isl_union_map_is_subset_data { - isl_union_map *umap2; - int is_subset; -}; - -static int is_subset_entry(void **entry, void *user) -{ - struct isl_union_map_is_subset_data *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - isl_map *map = *entry; - - hash = isl_space_get_hash(map->dim); - entry2 = isl_hash_table_find(data->umap2->dim->ctx, &data->umap2->table, - hash, &has_dim, map->dim, 0); - if (!entry2) { - data->is_subset = 0; - return -1; - } - - data->is_subset = isl_map_is_subset(map, entry2->data); - if (data->is_subset < 0 || !data->is_subset) - return -1; - - return 0; -} - -int isl_union_map_is_subset(__isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2) -{ - struct isl_union_map_is_subset_data data = { NULL, 1 }; - - umap1 = isl_union_map_copy(umap1); - umap2 = isl_union_map_copy(umap2); - umap1 = isl_union_map_align_params(umap1, isl_union_map_get_space(umap2)); - umap2 = isl_union_map_align_params(umap2, isl_union_map_get_space(umap1)); - - if (!umap1 || !umap2) - goto error; - - data.umap2 = umap2; - if (isl_hash_table_foreach(umap1->dim->ctx, &umap1->table, - &is_subset_entry, &data) < 0 && - data.is_subset) - goto error; - - isl_union_map_free(umap1); - isl_union_map_free(umap2); - - return data.is_subset; -error: - isl_union_map_free(umap1); - isl_union_map_free(umap2); - return -1; -} - -int isl_union_set_is_subset(__isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2) -{ - return isl_union_map_is_subset(uset1, uset2); -} - -int isl_union_map_is_equal(__isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2) -{ - int is_subset; - - if (!umap1 || !umap2) - return -1; - is_subset = isl_union_map_is_subset(umap1, umap2); - if (is_subset != 1) - return is_subset; - is_subset = isl_union_map_is_subset(umap2, umap1); - return is_subset; -} - -int isl_union_set_is_equal(__isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2) -{ - return isl_union_map_is_equal(uset1, uset2); -} - -int isl_union_map_is_strict_subset(__isl_keep isl_union_map *umap1, - __isl_keep isl_union_map *umap2) -{ - int is_subset; - - if (!umap1 || !umap2) - return -1; - is_subset = isl_union_map_is_subset(umap1, umap2); - if (is_subset != 1) - return is_subset; - is_subset = isl_union_map_is_subset(umap2, umap1); - if (is_subset == -1) - return is_subset; - return !is_subset; -} - -int isl_union_set_is_strict_subset(__isl_keep isl_union_set *uset1, - __isl_keep isl_union_set *uset2) -{ - return isl_union_map_is_strict_subset(uset1, uset2); -} - -static int sample_entry(void **entry, void *user) -{ - isl_basic_map **sample = (isl_basic_map **)user; - isl_map *map = *entry; - - *sample = isl_map_sample(isl_map_copy(map)); - if (!*sample) - return -1; - if (!isl_basic_map_plain_is_empty(*sample)) - return -1; - return 0; -} - -__isl_give isl_basic_map *isl_union_map_sample(__isl_take isl_union_map *umap) -{ - isl_basic_map *sample = NULL; - - if (!umap) - return NULL; - - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, - &sample_entry, &sample) < 0 && - !sample) - goto error; - - if (!sample) - sample = isl_basic_map_empty(isl_union_map_get_space(umap)); - - isl_union_map_free(umap); - - return sample; -error: - isl_union_map_free(umap); - return NULL; -} - -__isl_give isl_basic_set *isl_union_set_sample(__isl_take isl_union_set *uset) -{ - return (isl_basic_set *)isl_union_map_sample(uset); -} - -struct isl_forall_data { - int res; - int (*fn)(__isl_keep isl_map *map); -}; - -static int forall_entry(void **entry, void *user) -{ - struct isl_forall_data *data = user; - isl_map *map = *entry; - - data->res = data->fn(map); - if (data->res < 0) - return -1; - - if (!data->res) - return -1; - - return 0; -} - -static int union_map_forall(__isl_keep isl_union_map *umap, - int (*fn)(__isl_keep isl_map *map)) -{ - struct isl_forall_data data = { 1, fn }; - - if (!umap) - return -1; - - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, - &forall_entry, &data) < 0 && data.res) - return -1; - - return data.res; -} - -struct isl_forall_user_data { - int res; - int (*fn)(__isl_keep isl_map *map, void *user); - void *user; -}; - -static int forall_user_entry(void **entry, void *user) -{ - struct isl_forall_user_data *data = user; - isl_map *map = *entry; - - data->res = data->fn(map, data->user); - if (data->res < 0) - return -1; - - if (!data->res) - return -1; - - return 0; -} - -/* Check if fn(map, user) returns true for all maps "map" in umap. - */ -static int union_map_forall_user(__isl_keep isl_union_map *umap, - int (*fn)(__isl_keep isl_map *map, void *user), void *user) -{ - struct isl_forall_user_data data = { 1, fn, user }; - - if (!umap) - return -1; - - if (isl_hash_table_foreach(umap->dim->ctx, &umap->table, - &forall_user_entry, &data) < 0 && data.res) - return -1; - - return data.res; -} - -int isl_union_map_is_empty(__isl_keep isl_union_map *umap) -{ - return union_map_forall(umap, &isl_map_is_empty); -} - -int isl_union_set_is_empty(__isl_keep isl_union_set *uset) -{ - return isl_union_map_is_empty(uset); -} - -static int is_subset_of_identity(__isl_keep isl_map *map) -{ - int is_subset; - isl_space *dim; - isl_map *id; - - if (!map) - return -1; - - if (!isl_space_tuple_match(map->dim, isl_dim_in, map->dim, isl_dim_out)) - return 0; - - dim = isl_map_get_space(map); - id = isl_map_identity(dim); - - is_subset = isl_map_is_subset(map, id); - - isl_map_free(id); - - return is_subset; -} - -/* Check if the given map is single-valued. - * We simply compute - * - * M \circ M^-1 - * - * and check if the result is a subset of the identity mapping. - */ -int isl_union_map_is_single_valued(__isl_keep isl_union_map *umap) -{ - isl_union_map *test; - int sv; - - if (isl_union_map_n_map(umap) == 1) { - isl_map *map; - umap = isl_union_map_copy(umap); - map = isl_map_from_union_map(umap); - sv = isl_map_is_single_valued(map); - isl_map_free(map); - return sv; - } - - test = isl_union_map_reverse(isl_union_map_copy(umap)); - test = isl_union_map_apply_range(test, isl_union_map_copy(umap)); - - sv = union_map_forall(test, &is_subset_of_identity); - - isl_union_map_free(test); - - return sv; -} - -int isl_union_map_is_injective(__isl_keep isl_union_map *umap) -{ - int in; - - umap = isl_union_map_copy(umap); - umap = isl_union_map_reverse(umap); - in = isl_union_map_is_single_valued(umap); - isl_union_map_free(umap); - - return in; -} - -/* Represents a map that has a fixed value (v) for one of its - * range dimensions. - * The map in this structure is not reference counted, so it - * is only valid while the isl_union_map from which it was - * obtained is still alive. - */ -struct isl_fixed_map { - isl_int v; - isl_map *map; -}; - -static struct isl_fixed_map *alloc_isl_fixed_map_array(isl_ctx *ctx, - int n) -{ - int i; - struct isl_fixed_map *v; - - v = isl_calloc_array(ctx, struct isl_fixed_map, n); - if (!v) - return NULL; - for (i = 0; i < n; ++i) - isl_int_init(v[i].v); - return v; -} - -static void free_isl_fixed_map_array(struct isl_fixed_map *v, int n) -{ - int i; - - if (!v) - return; - for (i = 0; i < n; ++i) - isl_int_clear(v[i].v); - free(v); -} - -/* Compare the "v" field of two isl_fixed_map structs. - */ -static int qsort_fixed_map_cmp(const void *p1, const void *p2) -{ - const struct isl_fixed_map *e1 = (const struct isl_fixed_map *) p1; - const struct isl_fixed_map *e2 = (const struct isl_fixed_map *) p2; - - return isl_int_cmp(e1->v, e2->v); -} - -/* Internal data structure used while checking whether all maps - * in a union_map have a fixed value for a given output dimension. - * v is the list of maps, with the fixed value for the dimension - * n is the number of maps considered so far - * pos is the output dimension under investigation - */ -struct isl_fixed_dim_data { - struct isl_fixed_map *v; - int n; - int pos; -}; - -static int fixed_at_pos(__isl_keep isl_map *map, void *user) -{ - struct isl_fixed_dim_data *data = user; - - data->v[data->n].map = map; - return isl_map_plain_is_fixed(map, isl_dim_out, data->pos, - &data->v[data->n++].v); -} - -static int plain_injective_on_range(__isl_take isl_union_map *umap, - int first, int n_range); - -/* Given a list of the maps, with their fixed values at output dimension "pos", - * check whether the ranges of the maps form an obvious partition. - * - * We first sort the maps according to their fixed values. - * If all maps have a different value, then we know the ranges form - * a partition. - * Otherwise, we collect the maps with the same fixed value and - * check whether each such collection is obviously injective - * based on later dimensions. - */ -static int separates(struct isl_fixed_map *v, int n, - __isl_take isl_space *dim, int pos, int n_range) -{ - int i; - - if (!v) - goto error; - - qsort(v, n, sizeof(*v), &qsort_fixed_map_cmp); - - for (i = 0; i + 1 < n; ++i) { - int j, k; - isl_union_map *part; - int injective; - - for (j = i + 1; j < n; ++j) - if (isl_int_ne(v[i].v, v[j].v)) - break; - - if (j == i + 1) - continue; - - part = isl_union_map_alloc(isl_space_copy(dim), j - i); - for (k = i; k < j; ++k) - part = isl_union_map_add_map(part, - isl_map_copy(v[k].map)); - - injective = plain_injective_on_range(part, pos + 1, n_range); - if (injective < 0) - goto error; - if (!injective) - break; - - i = j - 1; - } - - isl_space_free(dim); - free_isl_fixed_map_array(v, n); - return i + 1 >= n; -error: - isl_space_free(dim); - free_isl_fixed_map_array(v, n); - return -1; -} - -/* Check whether the maps in umap have obviously distinct ranges. - * In particular, check for an output dimension in the range - * [first,n_range) for which all maps have a fixed value - * and then check if these values, possibly along with fixed values - * at later dimensions, entail distinct ranges. - */ -static int plain_injective_on_range(__isl_take isl_union_map *umap, - int first, int n_range) -{ - isl_ctx *ctx; - int n; - struct isl_fixed_dim_data data = { NULL }; - - ctx = isl_union_map_get_ctx(umap); - - if (!umap) - goto error; - - n = isl_union_map_n_map(umap); - if (n <= 1) { - isl_union_map_free(umap); - return 1; - } - - if (first >= n_range) { - isl_union_map_free(umap); - return 0; - } - - data.v = alloc_isl_fixed_map_array(ctx, n); - if (!data.v) - goto error; - - for (data.pos = first; data.pos < n_range; ++data.pos) { - int fixed; - int injective; - isl_space *dim; - - data.n = 0; - fixed = union_map_forall_user(umap, &fixed_at_pos, &data); - if (fixed < 0) - goto error; - if (!fixed) - continue; - dim = isl_union_map_get_space(umap); - injective = separates(data.v, n, dim, data.pos, n_range); - isl_union_map_free(umap); - return injective; - } - - free_isl_fixed_map_array(data.v, n); - isl_union_map_free(umap); - - return 0; -error: - free_isl_fixed_map_array(data.v, n); - isl_union_map_free(umap); - return -1; -} - -/* Check whether the maps in umap that map to subsets of "ran" - * have obviously distinct ranges. - */ -static int plain_injective_on_range_wrap(__isl_keep isl_set *ran, void *user) -{ - isl_union_map *umap = user; - - umap = isl_union_map_copy(umap); - umap = isl_union_map_intersect_range(umap, - isl_union_set_from_set(isl_set_copy(ran))); - return plain_injective_on_range(umap, 0, isl_set_dim(ran, isl_dim_set)); -} - -/* Check if the given union_map is obviously injective. - * - * In particular, we first check if all individual maps are obviously - * injective and then check if all the ranges of these maps are - * obviously disjoint. - */ -int isl_union_map_plain_is_injective(__isl_keep isl_union_map *umap) -{ - int in; - isl_union_map *univ; - isl_union_set *ran; - - in = union_map_forall(umap, &isl_map_plain_is_injective); - if (in < 0) - return -1; - if (!in) - return 0; - - univ = isl_union_map_universe(isl_union_map_copy(umap)); - ran = isl_union_map_range(univ); - - in = union_map_forall_user(ran, &plain_injective_on_range_wrap, umap); - - isl_union_set_free(ran); - - return in; -} - -int isl_union_map_is_bijective(__isl_keep isl_union_map *umap) -{ - int sv; - - sv = isl_union_map_is_single_valued(umap); - if (sv < 0 || !sv) - return sv; - - return isl_union_map_is_injective(umap); -} - -static int zip_entry(void **entry, void *user) -{ - isl_map *map = *entry; - isl_union_map **res = user; - - if (!isl_map_can_zip(map)) - return 0; - - *res = isl_union_map_add_map(*res, isl_map_zip(isl_map_copy(map))); - - return 0; -} - -__isl_give isl_union_map *isl_union_map_zip(__isl_take isl_union_map *umap) -{ - return cond_un_op(umap, &zip_entry); -} - -static int lift_entry(void **entry, void *user) -{ - isl_set *set = *entry; - isl_union_set **res = user; - - *res = isl_union_set_add_set(*res, isl_set_lift(isl_set_copy(set))); - - return 0; -} - -__isl_give isl_union_set *isl_union_set_lift(__isl_take isl_union_set *uset) -{ - return cond_un_op(uset, &lift_entry); -} - -static int coefficients_entry(void **entry, void *user) -{ - isl_set *set = *entry; - isl_union_set **res = user; - - set = isl_set_copy(set); - set = isl_set_from_basic_set(isl_set_coefficients(set)); - *res = isl_union_set_add_set(*res, set); - - return 0; -} - -__isl_give isl_union_set *isl_union_set_coefficients( - __isl_take isl_union_set *uset) -{ - isl_ctx *ctx; - isl_space *dim; - isl_union_set *res; - - if (!uset) - return NULL; - - ctx = isl_union_set_get_ctx(uset); - dim = isl_space_set_alloc(ctx, 0, 0); - res = isl_union_map_alloc(dim, uset->table.n); - if (isl_hash_table_foreach(uset->dim->ctx, &uset->table, - &coefficients_entry, &res) < 0) - goto error; - - isl_union_set_free(uset); - return res; -error: - isl_union_set_free(uset); - isl_union_set_free(res); - return NULL; -} - -static int solutions_entry(void **entry, void *user) -{ - isl_set *set = *entry; - isl_union_set **res = user; - - set = isl_set_copy(set); - set = isl_set_from_basic_set(isl_set_solutions(set)); - if (!*res) - *res = isl_union_set_from_set(set); - else - *res = isl_union_set_add_set(*res, set); - - if (!*res) - return -1; - - return 0; -} - -__isl_give isl_union_set *isl_union_set_solutions( - __isl_take isl_union_set *uset) -{ - isl_union_set *res = NULL; - - if (!uset) - return NULL; - - if (uset->table.n == 0) { - res = isl_union_set_empty(isl_union_set_get_space(uset)); - isl_union_set_free(uset); - return res; - } - - if (isl_hash_table_foreach(uset->dim->ctx, &uset->table, - &solutions_entry, &res) < 0) - goto error; - - isl_union_set_free(uset); - return res; -error: - isl_union_set_free(uset); - isl_union_set_free(res); - return NULL; -} diff --git a/cloog-0.17.0/isl/isl_union_map_private.h b/cloog-0.17.0/isl/isl_union_map_private.h deleted file mode 100644 index c0266c0..0000000 --- a/cloog-0.17.0/isl/isl_union_map_private.h +++ /dev/null @@ -1,9 +0,0 @@ -#define isl_union_set isl_union_map -#include - -struct isl_union_map { - int ref; - isl_space *dim; - - struct isl_hash_table table; -}; diff --git a/cloog-0.17.0/isl/isl_union_templ.c b/cloog-0.17.0/isl/isl_union_templ.c deleted file mode 100644 index 498badf..0000000 --- a/cloog-0.17.0/isl/isl_union_templ.c +++ /dev/null @@ -1,801 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#define xFN(TYPE,NAME) TYPE ## _ ## NAME -#define FN(TYPE,NAME) xFN(TYPE,NAME) -#define xS(TYPE,NAME) struct TYPE ## _ ## NAME -#define S(TYPE,NAME) xS(TYPE,NAME) - -struct UNION { - int ref; -#ifdef HAS_TYPE - enum isl_fold type; -#endif - isl_space *dim; - - struct isl_hash_table table; -}; - -__isl_give UNION *FN(UNION,cow)(__isl_take UNION *u); - -isl_ctx *FN(UNION,get_ctx)(__isl_keep UNION *u) -{ - return u ? u->dim->ctx : NULL; -} - -__isl_give isl_space *FN(UNION,get_space)(__isl_keep UNION *u) -{ - if (!u) - return NULL; - return isl_space_copy(u->dim); -} - -#ifdef HAS_TYPE -static __isl_give UNION *FN(UNION,alloc)(__isl_take isl_space *dim, - enum isl_fold type, int size) -#else -static __isl_give UNION *FN(UNION,alloc)(__isl_take isl_space *dim, int size) -#endif -{ - UNION *u; - - dim = isl_space_params(dim); - if (!dim) - return NULL; - - u = isl_calloc_type(dim->ctx, UNION); - if (!u) - return NULL; - - u->ref = 1; -#ifdef HAS_TYPE - u->type = type; -#endif - u->dim = dim; - if (isl_hash_table_init(dim->ctx, &u->table, size) < 0) - goto error; - - return u; -error: - isl_space_free(dim); - FN(UNION,free)(u); - return NULL; -} - -#ifdef HAS_TYPE -__isl_give UNION *FN(UNION,zero)(__isl_take isl_space *dim, enum isl_fold type) -{ - return FN(UNION,alloc)(dim, type, 16); -} -#else -__isl_give UNION *FN(UNION,zero)(__isl_take isl_space *dim) -{ - return FN(UNION,alloc)(dim, 16); -} -#endif - -__isl_give UNION *FN(UNION,copy)(__isl_keep UNION *u) -{ - if (!u) - return NULL; - - u->ref++; - return u; -} - -S(UNION,foreach_data) -{ - int (*fn)(__isl_take PART *part, void *user); - void *user; -}; - -static int call_on_copy(void **entry, void *user) -{ - PART *part = *entry; - S(UNION,foreach_data) *data = (S(UNION,foreach_data) *)user; - - return data->fn(FN(PART,copy)(part), data->user); -} - -int FN(FN(UNION,foreach),PARTS)(__isl_keep UNION *u, - int (*fn)(__isl_take PART *part, void *user), void *user) -{ - S(UNION,foreach_data) data = { fn, user }; - - if (!u) - return -1; - - return isl_hash_table_foreach(u->dim->ctx, &u->table, - &call_on_copy, &data); -} - -static int has_dim(const void *entry, const void *val) -{ - PART *part = (PART *)entry; - isl_space *dim = (isl_space *)val; - - return isl_space_is_equal(part->dim, dim); -} - -__isl_give PART *FN(FN(UNION,extract),PARTS)(__isl_keep UNION *u, - __isl_take isl_space *dim) -{ - uint32_t hash; - struct isl_hash_table_entry *entry; - - if (!u || !dim) - goto error; - - hash = isl_space_get_hash(dim); - entry = isl_hash_table_find(u->dim->ctx, &u->table, hash, - &has_dim, dim, 0); - if (!entry) -#ifdef HAS_TYPE - return FN(PART,zero)(dim, u->type); -#else - return FN(PART,zero)(dim); -#endif - isl_space_free(dim); - return FN(PART,copy)(entry->data); -error: - isl_space_free(dim); - return NULL; -} - -__isl_give UNION *FN(FN(UNION,add),PARTS)(__isl_take UNION *u, - __isl_take PART *part) -{ - uint32_t hash; - struct isl_hash_table_entry *entry; - - if (!part) - goto error; - - if (FN(PART,is_zero)(part)) { - FN(PART,free)(part); - return u; - } - - u = FN(UNION,cow)(u); - - if (!u) - goto error; - - isl_assert(u->dim->ctx, isl_space_match(part->dim, isl_dim_param, u->dim, - isl_dim_param), goto error); - - hash = isl_space_get_hash(part->dim); - entry = isl_hash_table_find(u->dim->ctx, &u->table, hash, - &has_dim, part->dim, 1); - if (!entry) - goto error; - - if (!entry->data) - entry->data = part; - else { - entry->data = FN(PART,add)(entry->data, FN(PART,copy)(part)); - if (!entry->data) - goto error; - FN(PART,free)(part); - if (FN(PART,is_zero)(entry->data)) { - FN(PART,free)(entry->data); - isl_hash_table_remove(u->dim->ctx, &u->table, entry); - } - } - - return u; -error: - FN(PART,free)(part); - FN(UNION,free)(u); - return NULL; -} - -static int add_part(__isl_take PART *part, void *user) -{ - UNION **u = (UNION **)user; - - *u = FN(FN(UNION,add),PARTS)(*u, part); - - return 0; -} - -__isl_give UNION *FN(UNION,dup)(__isl_keep UNION *u) -{ - UNION *dup; - - if (!u) - return NULL; - -#ifdef HAS_TYPE - dup = FN(UNION,zero)(isl_space_copy(u->dim), u->type); -#else - dup = FN(UNION,zero)(isl_space_copy(u->dim)); -#endif - if (FN(FN(UNION,foreach),PARTS)(u, &add_part, &dup) < 0) - goto error; - return dup; -error: - FN(UNION,free)(dup); - return NULL; -} - -__isl_give UNION *FN(UNION,cow)(__isl_take UNION *u) -{ - if (!u) - return NULL; - - if (u->ref == 1) - return u; - u->ref--; - return FN(UNION,dup)(u); -} - -static int free_u_entry(void **entry, void *user) -{ - PART *part = *entry; - FN(PART,free)(part); - return 0; -} - -void FN(UNION,free)(__isl_take UNION *u) -{ - if (!u) - return; - - if (--u->ref > 0) - return; - - isl_hash_table_foreach(u->dim->ctx, &u->table, &free_u_entry, NULL); - isl_hash_table_clear(&u->table); - isl_space_free(u->dim); - free(u); -} - -S(UNION,align) { - isl_reordering *exp; - UNION *res; -}; - -#ifdef ALIGN_DOMAIN -static int align_entry(__isl_take PART *part, void *user) -{ - isl_reordering *exp; - S(UNION,align) *data = user; - - exp = isl_reordering_extend_space(isl_reordering_copy(data->exp), - FN(PART,get_domain_space)(part)); - - data->res = FN(FN(UNION,add),PARTS)(data->res, - FN(PART,realign_domain)(part, exp)); - - return 0; -} -#else -static int align_entry(__isl_take PART *part, void *user) -{ - isl_reordering *exp; - S(UNION,align) *data = user; - - exp = isl_reordering_extend_space(isl_reordering_copy(data->exp), - FN(PART,get_space)(part)); - - data->res = FN(FN(UNION,add),PARTS)(data->res, - FN(PART,realign)(part, exp)); - - return 0; -} -#endif - -__isl_give UNION *FN(UNION,align_params)(__isl_take UNION *u, - __isl_take isl_space *model) -{ - S(UNION,align) data = { NULL, NULL }; - - if (!u || !model) - goto error; - - if (isl_space_match(u->dim, isl_dim_param, model, isl_dim_param)) { - isl_space_free(model); - return u; - } - - data.exp = isl_parameter_alignment_reordering(u->dim, model); - if (!data.exp) - goto error; - -#ifdef HAS_TYPE - data.res = FN(UNION,alloc)(isl_space_copy(data.exp->dim), - u->type, u->table.n); -#else - data.res = FN(UNION,alloc)(isl_space_copy(data.exp->dim), u->table.n); -#endif - if (FN(FN(UNION,foreach),PARTS)(u, &align_entry, &data) < 0) - goto error; - - isl_reordering_free(data.exp); - FN(UNION,free)(u); - isl_space_free(model); - return data.res; -error: - isl_reordering_free(data.exp); - FN(UNION,free)(u); - FN(UNION,free)(data.res); - isl_space_free(model); - return NULL; -} - -__isl_give UNION *FN(UNION,add)(__isl_take UNION *u1, __isl_take UNION *u2) -{ - u1 = FN(UNION,align_params)(u1, FN(UNION,get_space)(u2)); - u2 = FN(UNION,align_params)(u2, FN(UNION,get_space)(u1)); - - u1 = FN(UNION,cow)(u1); - - if (!u1 || !u2) - goto error; - - if (FN(FN(UNION,foreach),PARTS)(u2, &add_part, &u1) < 0) - goto error; - - FN(UNION,free)(u2); - - return u1; -error: - FN(UNION,free)(u1); - FN(UNION,free)(u2); - return NULL; -} - -__isl_give UNION *FN(FN(UNION,from),PARTS)(__isl_take PART *part) -{ - isl_space *dim; - UNION *u; - - if (!part) - return NULL; - - dim = FN(PART,get_space)(part); - dim = isl_space_drop_dims(dim, isl_dim_in, 0, isl_space_dim(dim, isl_dim_in)); - dim = isl_space_drop_dims(dim, isl_dim_out, 0, isl_space_dim(dim, isl_dim_out)); -#ifdef HAS_TYPE - u = FN(UNION,zero)(dim, part->type); -#else - u = FN(UNION,zero)(dim); -#endif - u = FN(FN(UNION,add),PARTS)(u, part); - - return u; -} - -S(UNION,match_bin_data) { - UNION *u2; - UNION *res; -}; - -/* This function is currently only used from isl_polynomial.c - * and not from isl_fold.c. - */ -static __isl_give UNION *match_bin_op(__isl_take UNION *u1, - __isl_take UNION *u2, - int (*fn)(void **, void *)) __attribute__ ((unused)); -static __isl_give UNION *match_bin_op(__isl_take UNION *u1, - __isl_take UNION *u2, int (*fn)(void **, void *)) -{ - S(UNION,match_bin_data) data = { NULL, NULL }; - - u1 = FN(UNION,align_params)(u1, FN(UNION,get_space)(u2)); - u2 = FN(UNION,align_params)(u2, FN(UNION,get_space)(u1)); - - if (!u1 || !u2) - goto error; - - data.u2 = u2; -#ifdef HAS_TYPE - data.res = FN(UNION,alloc)(isl_space_copy(u1->dim), u1->type, u1->table.n); -#else - data.res = FN(UNION,alloc)(isl_space_copy(u1->dim), u1->table.n); -#endif - if (isl_hash_table_foreach(u1->dim->ctx, &u1->table, fn, &data) < 0) - goto error; - - FN(UNION,free)(u1); - FN(UNION,free)(u2); - return data.res; -error: - FN(UNION,free)(u1); - FN(UNION,free)(u2); - FN(UNION,free)(data.res); - return NULL; -} - -S(UNION,any_set_data) { - isl_set *set; - UNION *res; - __isl_give PW *(*fn)(__isl_take PW*, __isl_take isl_set*); -}; - -static int any_set_entry(void **entry, void *user) -{ - S(UNION,any_set_data) *data = user; - PW *pw = *entry; - int empty; - - pw = FN(PW,copy)(pw); - pw = data->fn(pw, isl_set_copy(data->set)); - - empty = FN(PW,is_zero)(pw); - if (empty < 0) { - FN(PW,free)(pw); - return -1; - } - if (empty) { - FN(PW,free)(pw); - return 0; - } - - data->res = FN(FN(UNION,add),PARTS)(data->res, pw); - - return 0; -} - -/* Update each element of "u" by calling "fn" on the element and "set". - */ -static __isl_give UNION *any_set_op(__isl_take UNION *u, - __isl_take isl_set *set, - __isl_give PW *(*fn)(__isl_take PW*, __isl_take isl_set*)) -{ - S(UNION,any_set_data) data = { NULL, NULL, fn }; - - u = FN(UNION,align_params)(u, isl_set_get_space(set)); - set = isl_set_align_params(set, FN(UNION,get_space)(u)); - - if (!u || !set) - goto error; - - data.set = set; -#ifdef HAS_TYPE - data.res = FN(UNION,alloc)(isl_space_copy(u->dim), u->type, u->table.n); -#else - data.res = FN(UNION,alloc)(isl_space_copy(u->dim), u->table.n); -#endif - if (isl_hash_table_foreach(u->dim->ctx, &u->table, - &any_set_entry, &data) < 0) - goto error; - - FN(UNION,free)(u); - isl_set_free(set); - return data.res; -error: - FN(UNION,free)(u); - isl_set_free(set); - FN(UNION,free)(data.res); - return NULL; -} - -/* Intersect the domain of "u" with the parameter domain "context". - */ -__isl_give UNION *FN(UNION,intersect_params)(__isl_take UNION *u, - __isl_take isl_set *set) -{ - return any_set_op(u, set, &FN(PW,intersect_params)); -} - -/* Compute the gist of the domain of "u" with respect to - * the parameter domain "context". - */ -__isl_give UNION *FN(UNION,gist_params)(__isl_take UNION *u, - __isl_take isl_set *set) -{ - return any_set_op(u, set, &FN(PW,gist_params)); -} - -S(UNION,match_domain_data) { - isl_union_set *uset; - UNION *res; - __isl_give PW *(*fn)(__isl_take PW*, __isl_take isl_set*); -}; - -static int set_has_dim(const void *entry, const void *val) -{ - isl_set *set = (isl_set *)entry; - isl_space *dim = (isl_space *)val; - - return isl_space_is_equal(set->dim, dim); -} - -/* Find the set in data->uset that live in the same space as the domain - * of *entry, apply data->fn to *entry and this set (if any), and add - * the result to data->res. - */ -static int match_domain_entry(void **entry, void *user) -{ - S(UNION,match_domain_data) *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - PW *pw = *entry; - isl_space *space; - int empty; - - space = FN(PW,get_domain_space)(pw); - hash = isl_space_get_hash(space); - entry2 = isl_hash_table_find(data->uset->dim->ctx, &data->uset->table, - hash, &set_has_dim, space, 0); - isl_space_free(space); - if (!entry2) - return 0; - - pw = FN(PW,copy)(pw); - pw = data->fn(pw, isl_set_copy(entry2->data)); - - empty = FN(PW,is_zero)(pw); - if (empty < 0) { - FN(PW,free)(pw); - return -1; - } - if (empty) { - FN(PW,free)(pw); - return 0; - } - - data->res = FN(FN(UNION,add),PARTS)(data->res, pw); - - return 0; -} - -/* Apply fn to each pair of PW in u and set in uset such that - * the set lives in the same space as the domain of PW - * and collect the results. - */ -static __isl_give UNION *match_domain_op(__isl_take UNION *u, - __isl_take isl_union_set *uset, - __isl_give PW *(*fn)(__isl_take PW*, __isl_take isl_set*)) -{ - S(UNION,match_domain_data) data = { NULL, NULL, fn }; - - u = FN(UNION,align_params)(u, isl_union_set_get_space(uset)); - uset = isl_union_set_align_params(uset, FN(UNION,get_space)(u)); - - if (!u || !uset) - goto error; - - data.uset = uset; -#ifdef HAS_TYPE - data.res = FN(UNION,alloc)(isl_space_copy(u->dim), u->type, u->table.n); -#else - data.res = FN(UNION,alloc)(isl_space_copy(u->dim), u->table.n); -#endif - if (isl_hash_table_foreach(u->dim->ctx, &u->table, - &match_domain_entry, &data) < 0) - goto error; - - FN(UNION,free)(u); - isl_union_set_free(uset); - return data.res; -error: - FN(UNION,free)(u); - isl_union_set_free(uset); - FN(UNION,free)(data.res); - return NULL; -} - -/* Intersect the domain of "u" with "uset". - * If "uset" is a parameters domain, then intersect the parameter - * domain of "u" with this set. - */ -__isl_give UNION *FN(UNION,intersect_domain)(__isl_take UNION *u, - __isl_take isl_union_set *uset) -{ - if (isl_union_set_is_params(uset)) - return FN(UNION,intersect_params)(u, - isl_set_from_union_set(uset)); - return match_domain_op(u, uset, &FN(PW,intersect_domain)); -} - -__isl_give UNION *FN(UNION,gist)(__isl_take UNION *u, - __isl_take isl_union_set *uset) -{ - if (isl_union_set_is_params(uset)) - return FN(UNION,gist_params)(u, isl_set_from_union_set(uset)); - return match_domain_op(u, uset, &FN(PW,gist)); -} - -__isl_give isl_qpolynomial *FN(UNION,eval)(__isl_take UNION *u, - __isl_take isl_point *pnt) -{ - uint32_t hash; - struct isl_hash_table_entry *entry; - isl_space *space; - isl_qpolynomial *qp; - - if (!u || !pnt) - goto error; - - space = isl_space_copy(pnt->dim); - space = isl_space_from_domain(space); - space = isl_space_add_dims(space, isl_dim_out, 1); - if (!space) - goto error; - hash = isl_space_get_hash(space); - entry = isl_hash_table_find(u->dim->ctx, &u->table, - hash, &has_dim, space, 0); - isl_space_free(space); - if (!entry) { - qp = isl_qpolynomial_zero_on_domain(isl_space_copy(pnt->dim)); - isl_point_free(pnt); - } else { - qp = FN(PART,eval)(FN(PART,copy)(entry->data), pnt); - } - FN(UNION,free)(u); - return qp; -error: - FN(UNION,free)(u); - isl_point_free(pnt); - return NULL; -} - -static int coalesce_entry(void **entry, void *user) -{ - PW **pw = (PW **)entry; - - *pw = FN(PW,coalesce)(*pw); - if (!*pw) - return -1; - - return 0; -} - -__isl_give UNION *FN(UNION,coalesce)(__isl_take UNION *u) -{ - if (!u) - return NULL; - - if (isl_hash_table_foreach(u->dim->ctx, &u->table, - &coalesce_entry, NULL) < 0) - goto error; - - return u; -error: - FN(UNION,free)(u); - return NULL; -} - -static int domain(__isl_take PART *part, void *user) -{ - isl_union_set **uset = (isl_union_set **)user; - - *uset = isl_union_set_add_set(*uset, FN(PART,domain)(part)); - - return 0; -} - -__isl_give isl_union_set *FN(UNION,domain)(__isl_take UNION *u) -{ - isl_union_set *uset; - - uset = isl_union_set_empty(FN(UNION,get_space)(u)); - if (FN(FN(UNION,foreach),PARTS)(u, &domain, &uset) < 0) - goto error; - - FN(UNION,free)(u); - - return uset; -error: - isl_union_set_free(uset); - FN(UNION,free)(u); - return NULL; -} - -static int mul_isl_int(void **entry, void *user) -{ - PW **pw = (PW **)entry; - isl_int *v = user; - - *pw = FN(PW,mul_isl_int)(*pw, *v); - if (!*pw) - return -1; - - return 0; -} - -__isl_give UNION *FN(UNION,mul_isl_int)(__isl_take UNION *u, isl_int v) -{ - if (isl_int_is_one(v)) - return u; - - if (u && isl_int_is_zero(v)) { - UNION *zero; - isl_space *dim = FN(UNION,get_space)(u); -#ifdef HAS_TYPE - zero = FN(UNION,zero)(dim, u->type); -#else - zero = FN(UNION,zero)(dim); -#endif - FN(UNION,free)(u); - return zero; - } - - u = FN(UNION,cow)(u); - if (!u) - return NULL; - -#ifdef HAS_TYPE - if (isl_int_is_neg(v)) - u->type = isl_fold_type_negate(u->type); -#endif - if (isl_hash_table_foreach(u->dim->ctx, &u->table, &mul_isl_int, v) < 0) - goto error; - - return u; -error: - FN(UNION,free)(u); - return NULL; -} - -S(UNION,plain_is_equal_data) -{ - UNION *u2; - int is_equal; -}; - -static int plain_is_equal_entry(void **entry, void *user) -{ - S(UNION,plain_is_equal_data) *data = user; - uint32_t hash; - struct isl_hash_table_entry *entry2; - PW *pw = *entry; - - hash = isl_space_get_hash(pw->dim); - entry2 = isl_hash_table_find(data->u2->dim->ctx, &data->u2->table, - hash, &has_dim, pw->dim, 0); - if (!entry2) { - data->is_equal = 0; - return -1; - } - - data->is_equal = FN(PW,plain_is_equal)(pw, entry2->data); - if (data->is_equal < 0 || !data->is_equal) - return -1; - - return 0; -} - -int FN(UNION,plain_is_equal)(__isl_keep UNION *u1, __isl_keep UNION *u2) -{ - S(UNION,plain_is_equal_data) data = { NULL, 1 }; - - if (!u1 || !u2) - return -1; - if (u1 == u2) - return 1; - if (u1->table.n != u2->table.n) - return 0; - - u1 = FN(UNION,copy)(u1); - u2 = FN(UNION,copy)(u2); - u1 = FN(UNION,align_params)(u1, FN(UNION,get_space)(u2)); - u2 = FN(UNION,align_params)(u2, FN(UNION,get_space)(u1)); - if (!u1 || !u2) - goto error; - - data.u2 = u2; - if (isl_hash_table_foreach(u1->dim->ctx, &u1->table, - &plain_is_equal_entry, &data) < 0 && - data.is_equal) - goto error; - - FN(UNION,free)(u1); - FN(UNION,free)(u2); - - return data.is_equal; -error: - FN(UNION,free)(u1); - FN(UNION,free)(u2); - return -1; -} diff --git a/cloog-0.17.0/isl/isl_vec.c b/cloog-0.17.0/isl/isl_vec.c deleted file mode 100644 index 61bd57f..0000000 --- a/cloog-0.17.0/isl/isl_vec.c +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include - -isl_ctx *isl_vec_get_ctx(__isl_keep isl_vec *vec) -{ - return vec ? vec->ctx : NULL; -} - -struct isl_vec *isl_vec_alloc(struct isl_ctx *ctx, unsigned size) -{ - struct isl_vec *vec; - - vec = isl_alloc_type(ctx, struct isl_vec); - if (!vec) - return NULL; - - vec->block = isl_blk_alloc(ctx, size); - if (isl_blk_is_error(vec->block)) - goto error; - - vec->ctx = ctx; - isl_ctx_ref(ctx); - vec->ref = 1; - vec->size = size; - vec->el = vec->block.data; - - return vec; -error: - isl_blk_free(ctx, vec->block); - return NULL; -} - -__isl_give isl_vec *isl_vec_extend(__isl_take isl_vec *vec, unsigned size) -{ - if (!vec) - return NULL; - if (size <= vec->size) - return vec; - - vec = isl_vec_cow(vec); - if (!vec) - return NULL; - - vec->block = isl_blk_extend(vec->ctx, vec->block, size); - if (!vec->block.data) - goto error; - - vec->size = size; - vec->el = vec->block.data; - - return vec; -error: - isl_vec_free(vec); - return NULL; -} - -__isl_give isl_vec *isl_vec_zero_extend(__isl_take isl_vec *vec, unsigned size) -{ - int extra; - - if (!vec) - return NULL; - if (size <= vec->size) - return vec; - - vec = isl_vec_cow(vec); - if (!vec) - return NULL; - - extra = size - vec->size; - vec = isl_vec_extend(vec, size); - if (!vec) - return NULL; - - isl_seq_clr(vec->el + size - extra, extra); - - return vec; -} - -struct isl_vec *isl_vec_copy(struct isl_vec *vec) -{ - if (!vec) - return NULL; - - vec->ref++; - return vec; -} - -struct isl_vec *isl_vec_dup(struct isl_vec *vec) -{ - struct isl_vec *vec2; - - if (!vec) - return NULL; - vec2 = isl_vec_alloc(vec->ctx, vec->size); - isl_seq_cpy(vec2->el, vec->el, vec->size); - return vec2; -} - -struct isl_vec *isl_vec_cow(struct isl_vec *vec) -{ - struct isl_vec *vec2; - if (!vec) - return NULL; - - if (vec->ref == 1) - return vec; - - vec2 = isl_vec_dup(vec); - isl_vec_free(vec); - return vec2; -} - -void isl_vec_free(struct isl_vec *vec) -{ - if (!vec) - return; - - if (--vec->ref > 0) - return; - - isl_ctx_deref(vec->ctx); - isl_blk_free(vec->ctx, vec->block); - free(vec); -} - -int isl_vec_is_equal(__isl_keep isl_vec *vec1, __isl_keep isl_vec *vec2) -{ - if (!vec1 || !vec2) - return -1; - - if (vec1->size != vec2->size) - return 0; - - return isl_seq_eq(vec1->el, vec2->el, vec1->size); -} - -__isl_give isl_printer *isl_printer_print_vec(__isl_take isl_printer *printer, - __isl_keep isl_vec *vec) -{ - int i; - - if (!printer || !vec) - goto error; - - printer = isl_printer_print_str(printer, "["); - for (i = 0; i < vec->size; ++i) { - if (i) - printer = isl_printer_print_str(printer, ","); - printer = isl_printer_print_isl_int(printer, vec->el[i]); - } - printer = isl_printer_print_str(printer, "]"); - - return printer; -error: - isl_printer_free(printer); - return NULL; -} - -void isl_vec_dump(struct isl_vec *vec) -{ - isl_printer *printer; - - if (!vec) - return; - - printer = isl_printer_to_file(vec->ctx, stderr); - printer = isl_printer_print_vec(printer, vec); - printer = isl_printer_end_line(printer); - - isl_printer_free(printer); -} - -__isl_give isl_vec *isl_vec_clr(__isl_take isl_vec *vec) -{ - vec = isl_vec_cow(vec); - if (!vec) - return NULL; - isl_seq_clr(vec->el, vec->size); - return vec; -} - -void isl_vec_lcm(struct isl_vec *vec, isl_int *lcm) -{ - isl_seq_lcm(vec->block.data, vec->size, lcm); -} - -/* Given a rational vector, with the denominator in the first element - * of the vector, round up all coordinates. - */ -struct isl_vec *isl_vec_ceil(struct isl_vec *vec) -{ - vec = isl_vec_cow(vec); - if (!vec) - return NULL; - - isl_seq_cdiv_q(vec->el + 1, vec->el + 1, vec->el[0], vec->size - 1); - - isl_int_set_si(vec->el[0], 1); - - return vec; -} - -struct isl_vec *isl_vec_normalize(struct isl_vec *vec) -{ - if (!vec) - return NULL; - isl_seq_normalize(vec->ctx, vec->el, vec->size); - return vec; -} - -__isl_give isl_vec *isl_vec_neg(__isl_take isl_vec *vec) -{ - vec = isl_vec_cow(vec); - if (!vec) - return NULL; - isl_seq_neg(vec->el, vec->el, vec->size); - return vec; -} - -__isl_give isl_vec *isl_vec_scale(__isl_take isl_vec *vec, isl_int m) -{ - if (isl_int_is_one(m)) - return vec; - vec = isl_vec_cow(vec); - if (!vec) - return NULL; - isl_seq_scale(vec->el, vec->el, m, vec->size); - return vec; -} - -__isl_give isl_vec *isl_vec_add(__isl_take isl_vec *vec1, - __isl_take isl_vec *vec2) -{ - vec1 = isl_vec_cow(vec1); - if (!vec1 || !vec2) - goto error; - - isl_assert(vec1->ctx, vec1->size == vec2->size, goto error); - - isl_seq_combine(vec1->el, vec1->ctx->one, vec1->el, - vec1->ctx->one, vec2->el, vec1->size); - - isl_vec_free(vec2); - return vec1; -error: - isl_vec_free(vec1); - isl_vec_free(vec2); - return NULL; -} - -static int qsort_int_cmp(const void *p1, const void *p2) -{ - const isl_int *i1 = (const isl_int *) p1; - const isl_int *i2 = (const isl_int *) p2; - - return isl_int_cmp(*i1, *i2); -} - -__isl_give isl_vec *isl_vec_sort(__isl_take isl_vec *vec) -{ - if (!vec) - return NULL; - - qsort(vec->el, vec->size, sizeof(*vec->el), &qsort_int_cmp); - - return vec; -} - -__isl_give isl_vec *isl_vec_drop_els(__isl_take isl_vec *vec, - unsigned pos, unsigned n) -{ - if (n == 0) - return vec; - vec = isl_vec_cow(vec); - if (!vec) - return NULL; - - if (pos + n > vec->size) - isl_die(vec->ctx, isl_error_invalid, - "range out of bounds", goto error); - - if (pos + n != vec->size) - isl_seq_cpy(vec->el + pos, vec->el + pos + n, - vec->size - pos - n); - - vec->size -= n; - - return vec; -error: - isl_vec_free(vec); - return NULL; -} - -__isl_give isl_vec *isl_vec_insert_els(__isl_take isl_vec *vec, - unsigned pos, unsigned n) -{ - isl_vec *ext = NULL; - - if (n == 0) - return vec; - if (!vec) - return NULL; - - if (pos > vec->size) - isl_die(vec->ctx, isl_error_invalid, - "position out of bounds", goto error); - - ext = isl_vec_alloc(vec->ctx, vec->size + n); - if (!ext) - goto error; - - isl_seq_cpy(ext->el, vec->el, pos); - isl_seq_cpy(ext->el + pos + n, vec->el + pos, vec->size - pos); - - isl_vec_free(vec); - return ext; -error: - isl_vec_free(vec); - isl_vec_free(ext); - return NULL; -} - -__isl_give isl_vec *isl_vec_insert_zero_els(__isl_take isl_vec *vec, - unsigned pos, unsigned n) -{ - vec = isl_vec_insert_els(vec, pos, n); - if (!vec) - return NULL; - - isl_seq_clr(vec->el + pos, n); - - return vec; -} diff --git a/cloog-0.17.0/isl/isl_version.c b/cloog-0.17.0/isl/isl_version.c deleted file mode 100644 index 1a59f55..0000000 --- a/cloog-0.17.0/isl/isl_version.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "gitversion.h" - -const char *isl_version(void) -{ - return GIT_HEAD_ID"\n"; -} diff --git a/cloog-0.17.0/isl/isl_vertices.c b/cloog-0.17.0/isl/isl_vertices.c deleted file mode 100644 index e7d849e..0000000 --- a/cloog-0.17.0/isl/isl_vertices.c +++ /dev/null @@ -1,1569 +0,0 @@ -/* - * Copyright 2010 INRIA Saclay - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, - * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, - * 91893 Orsay, France - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#define SELECTED 1 -#define DESELECTED -1 -#define UNSELECTED 0 - -static __isl_give isl_vertices *compute_chambers(__isl_take isl_basic_set *bset, - __isl_take isl_vertices *vertices); - -__isl_give isl_vertices *isl_vertices_copy(__isl_keep isl_vertices *vertices) -{ - if (!vertices) - return NULL; - - vertices->ref++; - return vertices; -} - -void isl_vertices_free(__isl_take isl_vertices *vertices) -{ - int i; - - if (!vertices) - return; - - if (--vertices->ref > 0) - return; - - for (i = 0; i < vertices->n_vertices; ++i) { - isl_basic_set_free(vertices->v[i].vertex); - isl_basic_set_free(vertices->v[i].dom); - } - free(vertices->v); - - for (i = 0; i < vertices->n_chambers; ++i) { - free(vertices->c[i].vertices); - isl_basic_set_free(vertices->c[i].dom); - } - free(vertices->c); - - isl_basic_set_free(vertices->bset); - free(vertices); -} - -struct isl_vertex_list { - struct isl_vertex v; - struct isl_vertex_list *next; -}; - -static void free_vertex_list(struct isl_vertex_list *list) -{ - struct isl_vertex_list *next; - - for (; list; list = next) { - next = list->next; - isl_basic_set_free(list->v.vertex); - isl_basic_set_free(list->v.dom); - free(list); - } -} - -static __isl_give isl_vertices *vertices_from_list(__isl_keep isl_basic_set *bset, - int n_vertices, struct isl_vertex_list *list) -{ - int i; - struct isl_vertex_list *next; - isl_vertices *vertices; - - vertices = isl_calloc_type(bset->ctx, isl_vertices); - if (!vertices) - goto error; - vertices->ref = 1; - vertices->bset = isl_basic_set_copy(bset); - vertices->v = isl_alloc_array(bset->ctx, struct isl_vertex, n_vertices); - if (!vertices->v) - goto error; - vertices->n_vertices = n_vertices; - - for (i = 0; list; list = next, i++) { - next = list->next; - vertices->v[i] = list->v; - free(list); - } - - return vertices; -error: - free(vertices); - free_vertex_list(list); - return NULL; -} - -/* Prepend a vertex to the linked list "list" based on the equalities in "tab". - */ -static int add_vertex(struct isl_vertex_list **list, - __isl_keep isl_basic_set *bset, struct isl_tab *tab) -{ - unsigned nvar; - unsigned nparam; - struct isl_vertex_list *v = NULL; - - if (isl_tab_detect_implicit_equalities(tab) < 0) - return -1; - - nvar = isl_basic_set_dim(bset, isl_dim_set); - nparam = isl_basic_set_dim(bset, isl_dim_param); - - v = isl_calloc_type(tab->mat->ctx, struct isl_vertex_list); - if (!v) - goto error; - - v->v.vertex = isl_basic_set_copy(bset); - v->v.vertex = isl_basic_set_cow(v->v.vertex); - v->v.vertex = isl_basic_set_update_from_tab(v->v.vertex, tab); - v->v.vertex = isl_basic_set_simplify(v->v.vertex); - v->v.vertex = isl_basic_set_finalize(v->v.vertex); - if (!v->v.vertex) - goto error; - isl_assert(bset->ctx, v->v.vertex->n_eq >= nvar, goto error); - v->v.dom = isl_basic_set_copy(v->v.vertex); - v->v.dom = isl_basic_set_project_out(v->v.dom, isl_dim_set, 0, nvar); - if (!v->v.dom) - goto error; - - v->next = *list; - *list = v; - - return 0; -error: - free_vertex_list(v); - return -1; -} - -/* Compute the parametric vertices and the chamber decomposition - * of an empty parametric polytope. - */ -static __isl_give isl_vertices *vertices_empty(__isl_keep isl_basic_set *bset) -{ - isl_vertices *vertices; - unsigned nparam; - - if (!bset) - return NULL; - - nparam = isl_basic_set_dim(bset, isl_dim_param); - - vertices = isl_calloc_type(bset->ctx, isl_vertices); - if (!vertices) - return NULL; - vertices->bset = isl_basic_set_copy(bset); - vertices->ref = 1; - - vertices->n_vertices = 0; - vertices->n_chambers = 0; - - return vertices; -} - -/* Compute the parametric vertices and the chamber decomposition - * of the parametric polytope defined using the same constraints - * as "bset" in the 0D case. - * There is exactly one 0D vertex and a single chamber containing - * the vertex. - */ -static __isl_give isl_vertices *vertices_0D(__isl_keep isl_basic_set *bset) -{ - isl_vertices *vertices; - unsigned nparam; - - if (!bset) - return NULL; - - nparam = isl_basic_set_dim(bset, isl_dim_param); - - vertices = isl_calloc_type(bset->ctx, isl_vertices); - if (!vertices) - return NULL; - vertices->ref = 1; - vertices->bset = isl_basic_set_copy(bset); - - vertices->v = isl_calloc_array(bset->ctx, struct isl_vertex, 1); - if (!vertices->v) - goto error; - vertices->n_vertices = 1; - vertices->v[0].vertex = isl_basic_set_copy(bset); - if (!vertices->v[0].vertex) - goto error; - - vertices->c = isl_calloc_array(bset->ctx, struct isl_chamber, 1); - if (!vertices->c) - goto error; - vertices->n_chambers = 1; - vertices->c[0].n_vertices = 1; - vertices->c[0].vertices = isl_calloc_array(bset->ctx, int, 1); - if (!vertices->c[0].vertices) - goto error; - vertices->c[0].dom = isl_basic_set_params(isl_basic_set_copy(bset)); - if (!vertices->c[0].dom) - goto error; - - return vertices; -error: - isl_vertices_free(vertices); - return NULL; -} - -static int isl_mat_rank(__isl_keep isl_mat *mat) -{ - int row, col; - isl_mat *H; - - H = isl_mat_left_hermite(isl_mat_copy(mat), 0, NULL, NULL); - if (!H) - return -1; - - for (col = 0; col < H->n_col; ++col) { - for (row = 0; row < H->n_row; ++row) - if (!isl_int_is_zero(H->row[row][col])) - break; - if (row == H->n_row) - break; - } - - isl_mat_free(H); - - return col; -} - -/* Is the row pointed to by "f" linearly independent of the "n" first - * rows in "facets"? - */ -static int is_independent(__isl_keep isl_mat *facets, int n, isl_int *f) -{ - int rank; - - if (isl_seq_first_non_zero(f, facets->n_col) < 0) - return 0; - - isl_seq_cpy(facets->row[n], f, facets->n_col); - facets->n_row = n + 1; - rank = isl_mat_rank(facets); - if (rank < 0) - return -1; - - return rank == n + 1; -} - -/* Check whether we can select constraint "level", given the current selection - * reflected by facets in "tab", the rows of "facets" and the earlier - * "selected" elements of "selection". - * - * If the constraint is (strictly) redundant in the tableau, selecting it would - * result in an empty tableau, so it can't be selected. - * If the set variable part of the constraint is not linearly indepedent - * of the set variable parts of the already selected constraints, - * the constraint cannot be selected. - * If selecting the constraint results in an empty tableau, the constraint - * cannot be selected. - * Finally, if selecting the constraint results in some explicitly - * deselected constraints turning into equalities, then the corresponding - * vertices have already been generated, so the constraint cannot be selected. - */ -static int can_select(__isl_keep isl_basic_set *bset, int level, - struct isl_tab *tab, __isl_keep isl_mat *facets, int selected, - int *selection) -{ - int i; - int indep; - unsigned ovar; - struct isl_tab_undo *snap; - - if (isl_tab_is_redundant(tab, level)) - return 0; - - ovar = isl_space_offset(bset->dim, isl_dim_set); - - indep = is_independent(facets, selected, bset->ineq[level] + 1 + ovar); - if (indep < 0) - return -1; - if (!indep) - return 0; - - snap = isl_tab_snap(tab); - if (isl_tab_select_facet(tab, level) < 0) - return -1; - - if (tab->empty) { - if (isl_tab_rollback(tab, snap) < 0) - return -1; - return 0; - } - - for (i = 0; i < level; ++i) { - int sgn; - - if (selection[i] != DESELECTED) - continue; - - if (isl_tab_is_equality(tab, i)) - sgn = 0; - else if (isl_tab_is_redundant(tab, i)) - sgn = 1; - else - sgn = isl_tab_sign_of_max(tab, i); - if (sgn < -1) - return -1; - if (sgn <= 0) { - if (isl_tab_rollback(tab, snap) < 0) - return -1; - return 0; - } - } - - return 1; -} - -/* Compute the parametric vertices and the chamber decomposition - * of a parametric polytope that is not full-dimensional. - * - * Simply map the parametric polytope to a lower dimensional space - * and map the resulting vertices back. - */ -static __isl_give isl_vertices *lower_dim_vertices( - __isl_keep isl_basic_set *bset) -{ - isl_morph *morph; - isl_vertices *vertices; - - bset = isl_basic_set_copy(bset); - morph = isl_basic_set_full_compression(bset); - bset = isl_morph_basic_set(isl_morph_copy(morph), bset); - - vertices = isl_basic_set_compute_vertices(bset); - isl_basic_set_free(bset); - - morph = isl_morph_inverse(morph); - - vertices = isl_morph_vertices(morph, vertices); - - return vertices; -} - -/* Compute the parametric vertices and the chamber decomposition - * of the parametric polytope defined using the same constraints - * as "bset". "bset" is assumed to have no existentially quantified - * variables. - * - * The vertices themselves are computed in a fairly simplistic way. - * We simply run through all combinations of d constraints, - * with d the number of set variables, and check if those d constraints - * define a vertex. To avoid the generation of duplicate vertices, - * which we may happen if a vertex is defined by more that d constraints, - * we make sure we only generate the vertex for the d constraints with - * smallest index. - * - * We set up a tableau and keep track of which facets have been - * selected. The tableau is marked strict_redundant so that we can be - * sure that any constraint that is marked redundant (and that is not - * also marked zero) is not an equality. - * If a constraint is marked DESELECTED, it means the constraint was - * SELECTED before (in combination with the same selection of earlier - * constraints). If such a deselected constraint turns out to be an - * equality, then any vertex that may still be found with the current - * selection has already been generated when the constraint was selected. - * A constraint is marked UNSELECTED when there is no way selecting - * the constraint could lead to a vertex (in combination with the current - * selection of earlier constraints). - * - * The set variable coefficients of the selected constraints are stored - * in the facets matrix. - */ -__isl_give isl_vertices *isl_basic_set_compute_vertices( - __isl_keep isl_basic_set *bset) -{ - struct isl_tab *tab; - int level; - int init; - unsigned nvar; - int *selection = NULL; - int selected; - struct isl_tab_undo **snap = NULL; - isl_mat *facets = NULL; - struct isl_vertex_list *list = NULL; - int n_vertices = 0; - isl_vertices *vertices; - - if (!bset) - return NULL; - - if (isl_basic_set_plain_is_empty(bset)) - return vertices_empty(bset); - - if (bset->n_eq != 0) - return lower_dim_vertices(bset); - - isl_assert(bset->ctx, isl_basic_set_dim(bset, isl_dim_div) == 0, - return NULL); - - if (isl_basic_set_dim(bset, isl_dim_set) == 0) - return vertices_0D(bset); - - nvar = isl_basic_set_dim(bset, isl_dim_set); - - bset = isl_basic_set_copy(bset); - bset = isl_basic_set_set_rational(bset); - if (!bset) - return NULL; - - tab = isl_tab_from_basic_set(bset); - if (!tab) - goto error; - tab->strict_redundant = 1; - - if (tab->empty) { - vertices = vertices_empty(bset); - isl_basic_set_free(bset); - isl_tab_free(tab); - return vertices; - } - - selection = isl_alloc_array(bset->ctx, int, bset->n_ineq); - snap = isl_alloc_array(bset->ctx, struct isl_tab_undo *, bset->n_ineq); - facets = isl_mat_alloc(bset->ctx, nvar, nvar); - if (!selection || !snap || !facets) - goto error; - - level = 0; - init = 1; - selected = 0; - - while (level >= 0) { - if (level >= bset->n_ineq || - (!init && selection[level] != SELECTED)) { - --level; - init = 0; - continue; - } - if (init) { - int ok; - snap[level] = isl_tab_snap(tab); - ok = can_select(bset, level, tab, facets, selected, - selection); - if (ok < 0) - goto error; - if (ok) { - selection[level] = SELECTED; - selected++; - } else - selection[level] = UNSELECTED; - } else { - selection[level] = DESELECTED; - selected--; - if (isl_tab_rollback(tab, snap[level]) < 0) - goto error; - } - if (selected == nvar) { - if (tab->n_dead == nvar) { - if (add_vertex(&list, bset, tab) < 0) - goto error; - n_vertices++; - } - init = 0; - continue; - } - ++level; - init = 1; - } - - isl_mat_free(facets); - free(selection); - free(snap); - - isl_tab_free(tab); - - vertices = vertices_from_list(bset, n_vertices, list); - - vertices = compute_chambers(bset, vertices); - - return vertices; -error: - isl_mat_free(facets); - free(selection); - free(snap); - isl_tab_free(tab); - isl_basic_set_free(bset); - return NULL; -} - -struct isl_chamber_list { - struct isl_chamber c; - struct isl_chamber_list *next; -}; - -static void free_chamber_list(struct isl_chamber_list *list) -{ - struct isl_chamber_list *next; - - for (; list; list = next) { - next = list->next; - isl_basic_set_free(list->c.dom); - free(list->c.vertices); - free(list); - } -} - -/* Check whether the basic set "bset" is a superset of the basic set described - * by "tab", i.e., check whether all constraints of "bset" are redundant. - */ -static int bset_covers_tab(__isl_keep isl_basic_set *bset, struct isl_tab *tab) -{ - int i; - - if (!bset || !tab) - return -1; - - for (i = 0; i < bset->n_ineq; ++i) { - enum isl_ineq_type type = isl_tab_ineq_type(tab, bset->ineq[i]); - switch (type) { - case isl_ineq_error: return -1; - case isl_ineq_redundant: continue; - default: return 0; - } - } - - return 1; -} - -static __isl_give isl_vertices *vertices_add_chambers( - __isl_take isl_vertices *vertices, int n_chambers, - struct isl_chamber_list *list) -{ - int i; - isl_ctx *ctx; - struct isl_chamber_list *next; - - ctx = isl_vertices_get_ctx(vertices); - vertices->c = isl_alloc_array(ctx, struct isl_chamber, n_chambers); - if (!vertices->c) - goto error; - vertices->n_chambers = n_chambers; - - for (i = 0; list; list = next, i++) { - next = list->next; - vertices->c[i] = list->c; - free(list); - } - - return vertices; -error: - isl_vertices_free(vertices); - free_chamber_list(list); - return NULL; -} - -/* Can "tab" be intersected with "bset" without resulting in - * a lower-dimensional set. - */ -static int can_intersect(struct isl_tab *tab, __isl_keep isl_basic_set *bset) -{ - int i; - struct isl_tab_undo *snap; - - if (isl_tab_extend_cons(tab, bset->n_ineq) < 0) - return -1; - - snap = isl_tab_snap(tab); - - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_tab_ineq_type(tab, bset->ineq[i]) == isl_ineq_redundant) - continue; - if (isl_tab_add_ineq(tab, bset->ineq[i]) < 0) - return -1; - } - - if (isl_tab_detect_implicit_equalities(tab) < 0) - return -1; - if (tab->n_dead) { - if (isl_tab_rollback(tab, snap) < 0) - return -1; - return 0; - } - - return 1; -} - -static int add_chamber(struct isl_chamber_list **list, - __isl_keep isl_vertices *vertices, struct isl_tab *tab, int *selection) -{ - int n_frozen; - int i, j; - int n_vertices = 0; - struct isl_tab_undo *snap; - struct isl_chamber_list *c = NULL; - - for (i = 0; i < vertices->n_vertices; ++i) - if (selection[i]) - n_vertices++; - - snap = isl_tab_snap(tab); - - for (i = 0; i < tab->n_con && tab->con[i].frozen; ++i) - tab->con[i].frozen = 0; - n_frozen = i; - - if (isl_tab_detect_redundant(tab) < 0) - return -1; - - c = isl_calloc_type(tab->mat->ctx, struct isl_chamber_list); - if (!c) - goto error; - c->c.vertices = isl_alloc_array(tab->mat->ctx, int, n_vertices); - if (!c->c.vertices) - goto error; - c->c.dom = isl_basic_set_from_basic_map(isl_basic_map_copy(tab->bmap)); - c->c.dom = isl_basic_set_set_rational(c->c.dom); - c->c.dom = isl_basic_set_cow(c->c.dom); - c->c.dom = isl_basic_set_update_from_tab(c->c.dom, tab); - c->c.dom = isl_basic_set_simplify(c->c.dom); - c->c.dom = isl_basic_set_finalize(c->c.dom); - if (!c->c.dom) - goto error; - - c->c.n_vertices = n_vertices; - - for (i = 0, j = 0; i < vertices->n_vertices; ++i) - if (selection[i]) { - c->c.vertices[j] = i; - j++; - } - - c->next = *list; - *list = c; - - for (i = 0; i < n_frozen; ++i) - tab->con[i].frozen = 1; - - if (isl_tab_rollback(tab, snap) < 0) - return -1; - - return 0; -error: - free_chamber_list(c); - return -1; -} - -struct isl_facet_todo { - struct isl_tab *tab; /* A tableau representation of the facet */ - isl_basic_set *bset; /* A normalized basic set representation */ - isl_vec *constraint; /* Constraint pointing to the other side */ - struct isl_facet_todo *next; -}; - -static void free_todo(struct isl_facet_todo *todo) -{ - while (todo) { - struct isl_facet_todo *next = todo->next; - - isl_tab_free(todo->tab); - isl_basic_set_free(todo->bset); - isl_vec_free(todo->constraint); - free(todo); - - todo = next; - } -} - -static struct isl_facet_todo *create_todo(struct isl_tab *tab, int con) -{ - int i; - int n_frozen; - struct isl_tab_undo *snap; - struct isl_facet_todo *todo; - - snap = isl_tab_snap(tab); - - for (i = 0; i < tab->n_con && tab->con[i].frozen; ++i) - tab->con[i].frozen = 0; - n_frozen = i; - - if (isl_tab_detect_redundant(tab) < 0) - return NULL; - - todo = isl_calloc_type(tab->mat->ctx, struct isl_facet_todo); - if (!todo) - return NULL; - - todo->constraint = isl_vec_alloc(tab->mat->ctx, 1 + tab->n_var); - if (!todo->constraint) - goto error; - isl_seq_neg(todo->constraint->el, tab->bmap->ineq[con], 1 + tab->n_var); - todo->bset = isl_basic_set_from_basic_map(isl_basic_map_copy(tab->bmap)); - todo->bset = isl_basic_set_set_rational(todo->bset); - todo->bset = isl_basic_set_cow(todo->bset); - todo->bset = isl_basic_set_update_from_tab(todo->bset, tab); - todo->bset = isl_basic_set_simplify(todo->bset); - todo->bset = isl_basic_set_sort_constraints(todo->bset); - if (!todo->bset) - goto error; - ISL_F_SET(todo->bset, ISL_BASIC_SET_NORMALIZED); - todo->tab = isl_tab_dup(tab); - if (!todo->tab) - goto error; - - for (i = 0; i < n_frozen; ++i) - tab->con[i].frozen = 1; - - if (isl_tab_rollback(tab, snap) < 0) - goto error; - - return todo; -error: - free_todo(todo); - return NULL; -} - -/* Create todo items for all interior facets of the chamber represented - * by "tab" and collect them in "next". - */ -static int init_todo(struct isl_facet_todo **next, struct isl_tab *tab) -{ - int i; - struct isl_tab_undo *snap; - struct isl_facet_todo *todo; - - snap = isl_tab_snap(tab); - - for (i = 0; i < tab->n_con; ++i) { - if (tab->con[i].frozen) - continue; - if (tab->con[i].is_redundant) - continue; - - if (isl_tab_select_facet(tab, i) < 0) - return -1; - - todo = create_todo(tab, i); - if (!todo) - return -1; - - todo->next = *next; - *next = todo; - - if (isl_tab_rollback(tab, snap) < 0) - return -1; - } - - return 0; -} - -/* Does the linked list contain a todo item that is the opposite of "todo". - * If so, return 1 and remove the opposite todo item. - */ -static int has_opposite(struct isl_facet_todo *todo, - struct isl_facet_todo **list) -{ - for (; *list; list = &(*list)->next) { - int eq; - eq = isl_basic_set_plain_is_equal(todo->bset, (*list)->bset); - if (eq < 0) - return -1; - if (!eq) - continue; - todo = *list; - *list = todo->next; - todo->next = NULL; - free_todo(todo); - return 1; - } - - return 0; -} - -/* Create todo items for all interior facets of the chamber represented - * by "tab" and collect them in first->next, taking care to cancel - * opposite todo items. - */ -static int update_todo(struct isl_facet_todo *first, struct isl_tab *tab) -{ - int i; - struct isl_tab_undo *snap; - struct isl_facet_todo *todo; - - snap = isl_tab_snap(tab); - - for (i = 0; i < tab->n_con; ++i) { - int drop; - - if (tab->con[i].frozen) - continue; - if (tab->con[i].is_redundant) - continue; - - if (isl_tab_select_facet(tab, i) < 0) - return -1; - - todo = create_todo(tab, i); - if (!todo) - return -1; - - drop = has_opposite(todo, &first->next); - if (drop < 0) - return -1; - - if (drop) - free_todo(todo); - else { - todo->next = first->next; - first->next = todo; - } - - if (isl_tab_rollback(tab, snap) < 0) - return -1; - } - - return 0; -} - -/* Compute the chamber decomposition of the parametric polytope respresented - * by "bset" given the parametric vertices and their activity domains. - * - * We are only interested in full-dimensional chambers. - * Each of these chambers is the intersection of the activity domains of - * one or more vertices and the union of all chambers is equal to the - * projection of the entire parametric polytope onto the parameter space. - * - * We first create an initial chamber by intersecting as many activity - * domains as possible without ending up with an empty or lower-dimensional - * set. As a minor optimization, we only consider those activity domains - * that contain some arbitrary point. - * - * For each of interior facets of the chamber, we construct a todo item, - * containing the facet and a constraint containing the other side of the facet, - * for constructing the chamber on the other side. - * While their are any todo items left, we pick a todo item and - * create the required chamber by intersecting all activity domains - * that contain the facet and have a full-dimensional intersection with - * the other side of the facet. For each of the interior facets, we - * again create todo items, taking care to cancel opposite todo items. - */ -static __isl_give isl_vertices *compute_chambers(__isl_take isl_basic_set *bset, - __isl_take isl_vertices *vertices) -{ - int i; - isl_ctx *ctx; - isl_vec *sample = NULL; - struct isl_tab *tab = NULL; - struct isl_tab_undo *snap; - int *selection = NULL; - int n_chambers = 0; - struct isl_chamber_list *list = NULL; - struct isl_facet_todo *todo = NULL; - - if (!bset || !vertices) - goto error; - - ctx = isl_vertices_get_ctx(vertices); - selection = isl_alloc_array(ctx, int, vertices->n_vertices); - if (!selection) - goto error; - - bset = isl_basic_set_params(bset); - - tab = isl_tab_from_basic_set(bset); - for (i = 0; i < bset->n_ineq; ++i) - if (isl_tab_freeze_constraint(tab, i) < 0) - goto error; - if (isl_tab_track_bset(tab, bset) < 0) - goto error; - - snap = isl_tab_snap(tab); - - sample = isl_tab_get_sample_value(tab); - - for (i = 0; i < vertices->n_vertices; ++i) { - selection[i] = isl_basic_set_contains(vertices->v[i].dom, sample); - if (selection[i] < 0) - goto error; - if (!selection[i]) - continue; - selection[i] = can_intersect(tab, vertices->v[i].dom); - if (selection[i] < 0) - goto error; - } - - if (isl_tab_detect_redundant(tab) < 0) - goto error; - - if (add_chamber(&list, vertices, tab, selection) < 0) - goto error; - n_chambers++; - - if (init_todo(&todo, tab) < 0) - goto error; - - while (todo) { - struct isl_facet_todo *next; - - if (isl_tab_rollback(tab, snap) < 0) - goto error; - - if (isl_tab_add_ineq(tab, todo->constraint->el) < 0) - goto error; - if (isl_tab_freeze_constraint(tab, tab->n_con - 1) < 0) - goto error; - - for (i = 0; i < vertices->n_vertices; ++i) { - selection[i] = bset_covers_tab(vertices->v[i].dom, - todo->tab); - if (selection[i] < 0) - goto error; - if (!selection[i]) - continue; - selection[i] = can_intersect(tab, vertices->v[i].dom); - if (selection[i] < 0) - goto error; - } - - if (isl_tab_detect_redundant(tab) < 0) - goto error; - - if (add_chamber(&list, vertices, tab, selection) < 0) - goto error; - n_chambers++; - - if (update_todo(todo, tab) < 0) - goto error; - - next = todo->next; - todo->next = NULL; - free_todo(todo); - todo = next; - } - - isl_vec_free(sample); - - isl_tab_free(tab); - free(selection); - - vertices = vertices_add_chambers(vertices, n_chambers, list); - - for (i = 0; vertices && i < vertices->n_vertices; ++i) { - isl_basic_set_free(vertices->v[i].dom); - vertices->v[i].dom = NULL; - } - - return vertices; -error: - free_chamber_list(list); - free_todo(todo); - isl_vec_free(sample); - isl_tab_free(tab); - free(selection); - if (!tab) - isl_basic_set_free(bset); - isl_vertices_free(vertices); - return NULL; -} - -isl_ctx *isl_vertex_get_ctx(__isl_keep isl_vertex *vertex) -{ - return vertex ? isl_vertices_get_ctx(vertex->vertices) : NULL; -} - -int isl_vertex_get_id(__isl_keep isl_vertex *vertex) -{ - return vertex ? vertex->id : -1; -} - -__isl_give isl_basic_set *isl_vertex_get_domain(__isl_keep isl_vertex *vertex) -{ - struct isl_vertex *v; - - if (!vertex) - return NULL; - - v = &vertex->vertices->v[vertex->id]; - if (!v->dom) { - unsigned nvar; - nvar = isl_basic_set_dim(v->vertex, isl_dim_set); - v->dom = isl_basic_set_copy(v->vertex); - v->dom = isl_basic_set_project_out(v->dom, isl_dim_set, 0, nvar); - } - - return isl_basic_set_copy(v->dom); -} - -__isl_give isl_basic_set *isl_vertex_get_expr(__isl_keep isl_vertex *vertex) -{ - struct isl_vertex *v; - - if (!vertex) - return NULL; - - v = &vertex->vertices->v[vertex->id]; - - return isl_basic_set_copy(v->vertex); -} - -static __isl_give isl_vertex *isl_vertex_alloc(__isl_take isl_vertices *vertices, - int id) -{ - isl_ctx *ctx; - isl_vertex *vertex; - - if (!vertices) - return NULL; - - ctx = isl_vertices_get_ctx(vertices); - vertex = isl_alloc_type(ctx, isl_vertex); - if (!vertex) - goto error; - - vertex->vertices = vertices; - vertex->id = id; - - return vertex; -error: - isl_vertices_free(vertices); - return NULL; -} - -void isl_vertex_free(__isl_take isl_vertex *vertex) -{ - if (!vertex) - return; - isl_vertices_free(vertex->vertices); - free(vertex); -} - -__isl_give isl_basic_set *isl_basic_set_set_integral(__isl_take isl_basic_set *bset) -{ - if (!bset) - return NULL; - - if (!ISL_F_ISSET(bset, ISL_BASIC_MAP_RATIONAL)) - return bset; - - bset = isl_basic_set_cow(bset); - if (!bset) - return NULL; - - ISL_F_CLR(bset, ISL_BASIC_MAP_RATIONAL); - - return isl_basic_set_finalize(bset); -} - -isl_ctx *isl_cell_get_ctx(__isl_keep isl_cell *cell) -{ - return cell ? cell->dom->ctx : NULL; -} - -__isl_give isl_basic_set *isl_cell_get_domain(__isl_keep isl_cell *cell) -{ - return cell ? isl_basic_set_copy(cell->dom) : NULL; -} - -static __isl_give isl_cell *isl_cell_alloc(__isl_take isl_vertices *vertices, - __isl_take isl_basic_set *dom, int id) -{ - int i; - isl_cell *cell = NULL; - - if (!vertices || !dom) - goto error; - - cell = isl_calloc_type(dom->ctx, isl_cell); - if (!cell) - goto error; - - cell->n_vertices = vertices->c[id].n_vertices; - cell->ids = isl_alloc_array(dom->ctx, int, cell->n_vertices); - if (!cell->ids) - goto error; - for (i = 0; i < cell->n_vertices; ++i) - cell->ids[i] = vertices->c[id].vertices[i]; - cell->vertices = vertices; - cell->dom = dom; - - return cell; -error: - isl_cell_free(cell); - isl_vertices_free(vertices); - isl_basic_set_free(dom); - return NULL; -} - -void isl_cell_free(__isl_take isl_cell *cell) -{ - if (!cell) - return; - - isl_vertices_free(cell->vertices); - free(cell->ids); - isl_basic_set_free(cell->dom); - free(cell); -} - -/* Create a tableau of the cone obtained by first homogenizing the given - * polytope and then making all inequalities strict by setting the - * constant term to -1. - */ -static struct isl_tab *tab_for_shifted_cone(__isl_keep isl_basic_set *bset) -{ - int i; - isl_vec *c = NULL; - struct isl_tab *tab; - - if (!bset) - return NULL; - tab = isl_tab_alloc(bset->ctx, bset->n_ineq + 1, - 1 + isl_basic_set_total_dim(bset), 0); - if (!tab) - return NULL; - tab->rational = ISL_F_ISSET(bset, ISL_BASIC_SET_RATIONAL); - if (ISL_F_ISSET(bset, ISL_BASIC_MAP_EMPTY)) { - if (isl_tab_mark_empty(tab) < 0) - goto error; - return tab; - } - - c = isl_vec_alloc(bset->ctx, 1 + 1 + isl_basic_set_total_dim(bset)); - if (!c) - goto error; - - isl_int_set_si(c->el[0], 0); - for (i = 0; i < bset->n_eq; ++i) { - isl_seq_cpy(c->el + 1, bset->eq[i], c->size - 1); - if (isl_tab_add_eq(tab, c->el) < 0) - goto error; - } - - isl_int_set_si(c->el[0], -1); - for (i = 0; i < bset->n_ineq; ++i) { - isl_seq_cpy(c->el + 1, bset->ineq[i], c->size - 1); - if (isl_tab_add_ineq(tab, c->el) < 0) - goto error; - if (tab->empty) { - isl_vec_free(c); - return tab; - } - } - - isl_seq_clr(c->el + 1, c->size - 1); - isl_int_set_si(c->el[1], 1); - if (isl_tab_add_ineq(tab, c->el) < 0) - goto error; - - isl_vec_free(c); - return tab; -error: - isl_vec_free(c); - isl_tab_free(tab); - return NULL; -} - -/* Compute an interior point of "bset" by selecting an interior - * point in homogeneous space and projecting the point back down. - */ -static __isl_give isl_vec *isl_basic_set_interior_point( - __isl_keep isl_basic_set *bset) -{ - isl_vec *vec; - struct isl_tab *tab; - - tab = tab_for_shifted_cone(bset); - vec = isl_tab_get_sample_value(tab); - isl_tab_free(tab); - if (!vec) - return NULL; - - isl_seq_cpy(vec->el, vec->el + 1, vec->size - 1); - vec->size--; - - return vec; -} - -/* Call "fn" on all chambers of the parametric polytope with the shared - * facets of neighboring chambers only appearing in one of the chambers. - * - * We pick an interior point from one of the chambers and then make - * all constraints that do not satisfy this point strict. - */ -int isl_vertices_foreach_disjoint_cell(__isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_cell *cell, void *user), void *user) -{ - int i, j; - isl_vec *vec; - isl_int v; - isl_cell *cell; - - if (!vertices) - return -1; - - if (vertices->n_chambers == 0) - return 0; - - if (vertices->n_chambers == 1) { - isl_basic_set *dom = isl_basic_set_copy(vertices->c[0].dom); - dom = isl_basic_set_set_integral(dom); - cell = isl_cell_alloc(isl_vertices_copy(vertices), dom, 0); - if (!cell) - return -1; - return fn(cell, user); - } - - vec = isl_basic_set_interior_point(vertices->c[0].dom); - if (!vec) - return -1; - - isl_int_init(v); - - for (i = 0; i < vertices->n_chambers; ++i) { - int r; - isl_basic_set *dom = isl_basic_set_copy(vertices->c[i].dom); - dom = isl_basic_set_cow(dom); - if (!dom) - goto error; - for (j = 0; i && j < dom->n_ineq; ++j) { - isl_seq_inner_product(vec->el, dom->ineq[j], vec->size, - &v); - if (!isl_int_is_neg(v)) - continue; - isl_int_sub_ui(dom->ineq[j][0], dom->ineq[j][0], 1); - } - dom = isl_basic_set_set_integral(dom); - cell = isl_cell_alloc(isl_vertices_copy(vertices), dom, i); - if (!cell) - goto error; - r = fn(cell, user); - if (r < 0) - goto error; - } - - isl_int_clear(v); - isl_vec_free(vec); - - return 0; -error: - isl_int_clear(v); - isl_vec_free(vec); - return -1; -} - -int isl_vertices_foreach_cell(__isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_cell *cell, void *user), void *user) -{ - int i; - isl_cell *cell; - - if (!vertices) - return -1; - - if (vertices->n_chambers == 0) - return 0; - - for (i = 0; i < vertices->n_chambers; ++i) { - int r; - isl_basic_set *dom = isl_basic_set_copy(vertices->c[i].dom); - - cell = isl_cell_alloc(isl_vertices_copy(vertices), dom, i); - if (!cell) - return -1; - - r = fn(cell, user); - if (r < 0) - return -1; - } - - return 0; -} - -int isl_vertices_foreach_vertex(__isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_vertex *vertex, void *user), void *user) -{ - int i; - isl_vertex *vertex; - - if (!vertices) - return -1; - - if (vertices->n_vertices == 0) - return 0; - - for (i = 0; i < vertices->n_vertices; ++i) { - int r; - - vertex = isl_vertex_alloc(isl_vertices_copy(vertices), i); - if (!vertex) - return -1; - - r = fn(vertex, user); - if (r < 0) - return -1; - } - - return 0; -} - -int isl_cell_foreach_vertex(__isl_keep isl_cell *cell, - int (*fn)(__isl_take isl_vertex *vertex, void *user), void *user) -{ - int i; - isl_vertex *vertex; - - if (!cell) - return -1; - - if (cell->n_vertices == 0) - return 0; - - for (i = 0; i < cell->n_vertices; ++i) { - int r; - - vertex = isl_vertex_alloc(isl_vertices_copy(cell->vertices), - cell->ids[i]); - if (!vertex) - return -1; - - r = fn(vertex, user); - if (r < 0) - return -1; - } - - return 0; -} - -isl_ctx *isl_vertices_get_ctx(__isl_keep isl_vertices *vertices) -{ - return vertices ? vertices->bset->ctx : NULL; -} - -int isl_vertices_get_n_vertices(__isl_keep isl_vertices *vertices) -{ - return vertices ? vertices->n_vertices : -1; -} - -__isl_give isl_vertices *isl_morph_vertices(__isl_take isl_morph *morph, - __isl_take isl_vertices *vertices) -{ - int i; - isl_morph *param_morph = NULL; - - if (!morph || !vertices) - goto error; - - isl_assert(vertices->bset->ctx, vertices->ref == 1, goto error); - - param_morph = isl_morph_copy(morph); - param_morph = isl_morph_remove_dom_dims(param_morph, isl_dim_set, - 0, isl_morph_dom_dim(morph, isl_dim_set)); - param_morph = isl_morph_remove_ran_dims(param_morph, isl_dim_set, - 0, isl_morph_ran_dim(morph, isl_dim_set)); - - for (i = 0; i < vertices->n_vertices; ++i) { - vertices->v[i].dom = isl_morph_basic_set( - isl_morph_copy(param_morph), vertices->v[i].dom); - vertices->v[i].vertex = isl_morph_basic_set( - isl_morph_copy(morph), vertices->v[i].vertex); - if (!vertices->v[i].vertex) - goto error; - } - - for (i = 0; i < vertices->n_chambers; ++i) { - vertices->c[i].dom = isl_morph_basic_set( - isl_morph_copy(param_morph), vertices->c[i].dom); - if (!vertices->c[i].dom) - goto error; - } - - isl_morph_free(param_morph); - isl_morph_free(morph); - return vertices; -error: - isl_morph_free(param_morph); - isl_morph_free(morph); - isl_vertices_free(vertices); - return NULL; -} - -/* Construct a simplex isl_cell spanned by the vertices with indices in - * "simplex_ids" and "other_ids" and call "fn" on this isl_cell. - */ -static int call_on_simplex(__isl_keep isl_cell *cell, - int *simplex_ids, int n_simplex, int *other_ids, int n_other, - int (*fn)(__isl_take isl_cell *simplex, void *user), void *user) -{ - int i; - isl_ctx *ctx; - struct isl_cell *simplex; - - ctx = isl_cell_get_ctx(cell); - - simplex = isl_calloc_type(ctx, struct isl_cell); - if (!simplex) - return -1; - simplex->vertices = isl_vertices_copy(cell->vertices); - if (!simplex->vertices) - goto error; - simplex->dom = isl_basic_set_copy(cell->dom); - if (!simplex->dom) - goto error; - simplex->n_vertices = n_simplex + n_other; - simplex->ids = isl_alloc_array(ctx, int, simplex->n_vertices); - if (!simplex->ids) - goto error; - - for (i = 0; i < n_simplex; ++i) - simplex->ids[i] = simplex_ids[i]; - for (i = 0; i < n_other; ++i) - simplex->ids[n_simplex + i] = other_ids[i]; - - return fn(simplex, user); -error: - isl_cell_free(simplex); - return -1; -} - -/* Check whether the parametric vertex described by "vertex" - * lies on the facet corresponding to constraint "facet" of "bset". - * The isl_vec "v" is a temporary vector than can be used by this function. - * - * We eliminate the variables from the facet constraint using the - * equalities defining the vertex and check if the result is identical - * to zero. - * - * It would probably be better to keep track of the constraints defining - * a vertex during the vertex construction so that we could simply look - * it up here. - */ -static int vertex_on_facet(__isl_keep isl_basic_set *vertex, - __isl_keep isl_basic_set *bset, int facet, __isl_keep isl_vec *v) -{ - int i; - isl_int m; - - isl_seq_cpy(v->el, bset->ineq[facet], v->size); - - isl_int_init(m); - for (i = 0; i < vertex->n_eq; ++i) { - int k = isl_seq_last_non_zero(vertex->eq[i], v->size); - isl_seq_elim(v->el, vertex->eq[i], k, v->size, &m); - } - isl_int_clear(m); - - return isl_seq_first_non_zero(v->el, v->size) == -1; -} - -/* Triangulate the polytope spanned by the vertices with ids - * in "simplex_ids" and "other_ids" and call "fn" on each of - * the resulting simplices. - * If the input polytope is already a simplex, we simply call "fn". - * Otherwise, we pick a point from "other_ids" and add it to "simplex_ids". - * Then we consider each facet of "bset" that does not contain the point - * we just picked, but does contain some of the other points in "other_ids" - * and call ourselves recursively on the polytope spanned by the new - * "simplex_ids" and those points in "other_ids" that lie on the facet. - */ -static int triangulate(__isl_keep isl_cell *cell, __isl_keep isl_vec *v, - int *simplex_ids, int n_simplex, int *other_ids, int n_other, - int (*fn)(__isl_take isl_cell *simplex, void *user), void *user) -{ - int i, j, k; - int d, nparam; - int *ids; - isl_ctx *ctx; - isl_basic_set *vertex; - isl_basic_set *bset; - - ctx = isl_cell_get_ctx(cell); - d = isl_basic_set_dim(cell->vertices->bset, isl_dim_set); - nparam = isl_basic_set_dim(cell->vertices->bset, isl_dim_param); - - if (n_simplex + n_other == d + 1) - return call_on_simplex(cell, simplex_ids, n_simplex, - other_ids, n_other, fn, user); - - simplex_ids[n_simplex] = other_ids[0]; - vertex = cell->vertices->v[other_ids[0]].vertex; - bset = cell->vertices->bset; - - ids = isl_alloc_array(ctx, int, n_other - 1); - for (i = 0; i < bset->n_ineq; ++i) { - if (isl_seq_first_non_zero(bset->ineq[i] + 1 + nparam, d) == -1) - continue; - if (vertex_on_facet(vertex, bset, i, v)) - continue; - - for (j = 1, k = 0; j < n_other; ++j) { - isl_basic_set *ov; - ov = cell->vertices->v[other_ids[j]].vertex; - if (vertex_on_facet(ov, bset, i, v)) - ids[k++] = other_ids[j]; - } - if (k == 0) - continue; - - if (triangulate(cell, v, simplex_ids, n_simplex + 1, - ids, k, fn, user) < 0) - goto error; - } - free(ids); - - return 0; -error: - free(ids); - return -1; -} - -/* Triangulate the given cell and call "fn" on each of the resulting - * simplices. - */ -int isl_cell_foreach_simplex(__isl_take isl_cell *cell, - int (*fn)(__isl_take isl_cell *simplex, void *user), void *user) -{ - int d, total; - int r; - isl_ctx *ctx; - isl_vec *v = NULL; - int *simplex_ids = NULL; - - if (!cell) - return -1; - - d = isl_basic_set_dim(cell->vertices->bset, isl_dim_set); - total = isl_basic_set_total_dim(cell->vertices->bset); - - if (cell->n_vertices == d + 1) - return fn(cell, user); - - ctx = isl_cell_get_ctx(cell); - simplex_ids = isl_alloc_array(ctx, int, d + 1); - if (!simplex_ids) - goto error; - - v = isl_vec_alloc(ctx, 1 + total); - if (!v) - goto error; - - r = triangulate(cell, v, simplex_ids, 0, - cell->ids, cell->n_vertices, fn, user); - - isl_vec_free(v); - free(simplex_ids); - - isl_cell_free(cell); - - return r; -error: - free(simplex_ids); - isl_vec_free(v); - isl_cell_free(cell); - return -1; -} diff --git a/cloog-0.17.0/isl/isl_vertices_private.h b/cloog-0.17.0/isl/isl_vertices_private.h deleted file mode 100644 index 7c707fd..0000000 --- a/cloog-0.17.0/isl/isl_vertices_private.h +++ /dev/null @@ -1,64 +0,0 @@ -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -struct isl_morph; - -/* A parametric vertex. "vertex" contains the actual description - * of the vertex as a singleton parametric set. "dom" is the projection - * of "vertex" onto the parameter space, i.e., the activity domain - * of the vertex. - */ -struct isl_vertex { - isl_basic_set *dom; - isl_basic_set *vertex; -}; - -/* A chamber in the chamber decomposition. The indices of the "n_vertices" - * active vertices are stored in "vertices". - */ -struct isl_chamber { - int n_vertices; - int *vertices; - isl_basic_set *dom; -}; - -struct isl_vertices { - int ref; - - /* The rational basic set spanned by the vertices. */ - isl_basic_set *bset; - - int n_vertices; - struct isl_vertex *v; - - int n_chambers; - struct isl_chamber *c; -}; - -struct isl_cell { - int n_vertices; - int *ids; - isl_vertices *vertices; - isl_basic_set *dom; -}; - -struct isl_external_vertex { - isl_vertices *vertices; - int id; -}; - -int isl_vertices_foreach_disjoint_cell(__isl_keep isl_vertices *vertices, - int (*fn)(__isl_take isl_cell *cell, void *user), void *user); -int isl_cell_foreach_simplex(__isl_take isl_cell *cell, - int (*fn)(__isl_take isl_cell *simplex, void *user), void *user); - -__isl_give isl_vertices *isl_morph_vertices(__isl_take struct isl_morph *morph, - __isl_take isl_vertices *vertices); - -#if defined(__cplusplus) -} -#endif diff --git a/cloog-0.17.0/isl/ltmain.sh b/cloog-0.17.0/isl/ltmain.sh deleted file mode 100755 index fa4b1e1..0000000 --- a/cloog-0.17.0/isl/ltmain.sh +++ /dev/null @@ -1,8413 +0,0 @@ -# Generated from ltmain.m4sh. - -# ltmain.sh (GNU libtool) 2.2.6b -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print informational messages (default) -# --version print version information -# -h, --help print short or long help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu3 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . - -PROGRAM=ltmain.sh -PACKAGE=libtool -VERSION="2.2.6b Debian-2.2.6b-2ubuntu3" -TIMESTAMP="" -package_revision=1.3017 - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# NLS nuisances: We save the old values to restore during execute mode. -# Only set LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" - fi" -done - -$lt_unset CDPATH - - - - - -: ${CP="cp -f"} -: ${ECHO="echo"} -: ${EGREP="/bin/grep -E"} -: ${FGREP="/bin/grep -F"} -: ${GREP="/bin/grep"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SED="/bin/sed"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" - -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - -# Generated shell functions inserted here. - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - -# The name of this program: -# In the unlikely event $progname began with a '-', it would play havoc with -# func_echo (imagine progname=-n), so we prepend ./ in that case: -func_dirname_and_basename "$progpath" -progname=$func_basename_result -case $progname in - -*) progname=./$progname ;; -esac - -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=: - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname${mode+: }$mode: $*" -} - -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 - - # bash bug again: - : -} - -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` - done - my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "X$my_tmpdir" | $Xsed -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () -{ - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac - - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac -} - - -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "X$1" | $Xsed \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac - - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac - - func_quote_for_expand_result="$my_arg" -} - - -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - - - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} - -# func_usage -# Echo short help message to standard output and exit. -func_usage () -{ - $SED -n '/^# Usage:/,/# -h/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - $ECHO - $ECHO "run \`$progname --help | more' for full usage" - exit $? -} - -# func_help -# Echo long help message to standard output and exit. -func_help () -{ - $SED -n '/^# Usage:/,/# Report bugs to/ { - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ - p - }' < "$progpath" - exit $? -} - -# func_missing_arg argname -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - func_error "missing argument for $1" - exit_cmd=exit -} - -exit_cmd=: - - - - - -# Check that we have a working $ECHO. -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell, and then maybe $ECHO will work. - exec $SHELL "$progpath" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - -# Parse options once, thoroughly. This comes as soon as possible in -# the script to make things like `libtool --version' happen quickly. -{ - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - esac - - # Parse non-mode specific arguments: - while test "$#" -gt 0; do - opt="$1" - shift - - case $opt in - --config) func_config ;; - - --debug) preserve_args="$preserve_args $opt" - func_echo "enabling shell trace mode" - opt_debug='set -x' - $opt_debug - ;; - - -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break - execute_dlfiles="$execute_dlfiles $1" - shift - ;; - - --dry-run | -n) opt_dry_run=: ;; - --features) func_features ;; - --finish) mode="finish" ;; - - --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break - case $1 in - # Valid mode arguments: - clean) ;; - compile) ;; - execute) ;; - finish) ;; - install) ;; - link) ;; - relink) ;; - uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; - esac - - mode="$1" - shift - ;; - - --preserve-dup-deps) - opt_duplicate_deps=: ;; - - --quiet|--silent) preserve_args="$preserve_args $opt" - opt_silent=: - ;; - - --verbose| -v) preserve_args="$preserve_args $opt" - opt_silent=false - ;; - - --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break - preserve_args="$preserve_args $opt $1" - func_enable_tag "$1" # tagname is set here - shift - ;; - - # Separate optargs to long options: - -dlopen=*|--mode=*|--tag=*) - func_opt_split "$opt" - set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} - shift - ;; - - -\?|-h) func_usage ;; - --help) opt_help=: ;; - --version) func_version ;; - - -*) func_fatal_help "unrecognized option \`$opt'" ;; - - *) nonopt="$opt" - break - ;; - esac - done - - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_duplicate_deps - ;; - esac - - # Having warned about all mis-specified options, bail out if - # anything was wrong. - $exit_cmd $EXIT_FAILURE -} - -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -## ----------- ## -## Main. ## -## ----------- ## - -$opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - test -z "$mode" && func_fatal_error "error: you must specify a MODE." - - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$mode' for more information." -} - - -# func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case "$lalib_p_line" in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test "$lalib_p" = yes -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - func_lalib_p "$1" -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_ltwrapper_scriptname_result="" - if func_ltwrapper_executable_p "$1"; then - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" - fi -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $opt_debug - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$save_ifs - eval cmd=\"$cmd\" - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. -func_source () -{ - $opt_debug - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $opt_debug - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - case "$@ " in - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi - - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T <?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - removelist="$removelist $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - removelist="$removelist $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - command="$command -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test "$compiler_c_o" = yes; then - command="$command -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { -test "$mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to building PIC objects only - -prefer-non-pic try to building non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode \`$mode'" - ;; - esac - - $ECHO - $ECHO "Try \`$progname --help' for more information about other modes." - - exit $? -} - - # Now that we've collected a possible --mode arg, show help if necessary - $opt_help && func_mode_help - - -# func_mode_execute arg... -func_mode_execute () -{ - $opt_debug - # The first argument is the command name. - cmd="$nonopt" - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir="$func_dirname_result" - - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir="$func_dirname_result" - ;; - - *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -*) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file="$progdir/$program" - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_quote_for_eval "$file" - args="$args $func_quote_for_eval_result" - done - - if test "X$opt_dry_run" = Xfalse; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - $ECHO "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - fi -} - -test "$mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libdirs="$nonopt" - admincmds= - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done - - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || admincmds="$admincmds - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - $ECHO "X----------------------------------------------------------------------" | $Xsed - $ECHO "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - $ECHO - $ECHO "If you ever happen to want to link against installed libraries" - $ECHO "in a given directory, LIBDIR, you must either use libtool, and" - $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" - $ECHO "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" - $ECHO " during execution" - fi - if test -n "$runpath_var"; then - $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" - $ECHO " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - $ECHO - - $ECHO "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" - $ECHO "pages." - ;; - *) - $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - $ECHO "X----------------------------------------------------------------------" | $Xsed - exit $EXIT_SUCCESS -} - -test "$mode" = finish && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $opt_debug - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - $ECHO "X$nonopt" | $GREP shtool >/dev/null; then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - install_prog="$install_prog$func_quote_for_eval_result" - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - for arg - do - if test -n "$dest"; then - files="$files $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - case " $install_prog " in - *[\\\ /]cp\ *) ;; - *) prev=$arg ;; - esac - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - install_prog="$install_prog $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "\`$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - staticlibs="$staticlibs $file" - ;; - - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - dir="$dir$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking \`$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname="$1" - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme="$stripme" - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme="" - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - $opt_dry_run || { - if test "$finalize" = yes; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_silent || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink \`$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file="$outputname" - else - func_warning "cannot relink \`$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name="$func_basename_result" - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test "$mode" = install && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_verbose "extracting global C symbols from \`$progfile'" - $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $opt_dry_run || { - $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" - func_basename "$dlprefile" - name="$func_basename_result" - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - $ECHO >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -" - case $host in - *cygwin* | *mingw* | *cegcc* ) - $ECHO >> "$output_objdir/$my_dlsyms" "\ -/* DATA imports from DLLs on WIN32 con't be const, because - runtime relocations are performed -- see ld's documentation - on pseudo-relocs. */" - lt_dlsym_const= ;; - *osf5*) - echo >> "$output_objdir/$my_dlsyms" "\ -/* This system does not cope well with relocations in const data */" - lt_dlsym_const= ;; - *) - lt_dlsym_const=const ;; - esac - - $ECHO >> "$output_objdir/$my_dlsyms" "\ -extern $lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; -$lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - $ECHO >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) symtab_cflags="$symtab_cflags $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - - # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -func_win32_libid () -{ - $opt_debug - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then - win32_nmres=`eval $NM -f posix -A $1 | - $SED -n -e ' - 1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $opt_debug - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib="$func_basename_result" - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` - done - - func_extract_archives_result="$my_oldobjs" -} - - - -# func_emit_wrapper_part1 [arg=no] -# -# Emit the first part of a libtool wrapper script on stdout. -# For more information, see the description associated with -# func_emit_wrapper(), below. -func_emit_wrapper_part1 () -{ - func_emit_wrapper_part1_arg1=no - if test -n "$1" ; then - func_emit_wrapper_part1_arg1=$1 - fi - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='${SED} -e 1s/^X//' -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - ECHO=\"$qecho\" - file=\"\$0\" - # Make sure echo works. - if test \"X\$1\" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then - # Yippee, \$ECHO works! - : - else - # Restart under the correct shell, and then maybe \$ECHO will work. - exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} - fi - fi\ -" - $ECHO "\ - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` - done -" -} -# end: func_emit_wrapper_part1 - -# func_emit_wrapper_part2 [arg=no] -# -# Emit the second part of a libtool wrapper script on stdout. -# For more information, see the description associated with -# func_emit_wrapper(), below. -func_emit_wrapper_part2 () -{ - func_emit_wrapper_part2_arg1=no - if test -n "$1" ; then - func_emit_wrapper_part2_arg1=$1 - fi - - $ECHO "\ - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` - - export $shlibpath_var -" - fi - - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} -# end: func_emit_wrapper_part2 - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=no - if test -n "$1" ; then - func_emit_wrapper_arg1=$1 - fi - - # split this up so that func_emit_cwrapperexe_src - # can call each part independently. - func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" - func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" -} - - -# func_to_host_path arg -# -# Convert paths to host format when used with build tools. -# Intended for use with "native" mingw (where libtool itself -# is running under the msys shell), or in the following cross- -# build environments: -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# where wine is equipped with the `winepath' executable. -# In the native mingw case, the (msys) shell automatically -# converts paths for any non-msys applications it launches, -# but that facility isn't available from inside the cwrapper. -# Similar accommodations are necessary for $host mingw and -# $build cygwin. Calling this function does no harm for other -# $host/$build combinations not listed above. -# -# ARG is the path (on $build) that should be converted to -# the proper representation for $host. The result is stored -# in $func_to_host_path_result. -func_to_host_path () -{ - func_to_host_path_result="$1" - if test -n "$1" ; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - case $build in - *mingw* ) # actually, msys - # awkward: cmd appends spaces to result - lt_sed_strip_trailing_spaces="s/[ ]*\$//" - func_to_host_path_tmp1=`( cmd //c echo "$1" |\ - $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_path_tmp1=`cygpath -w "$1"` - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # Unfortunately, winepath does not exit with a non-zero - # error code, so we are forced to check the contents of - # stdout. On the other hand, if the command is not - # found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both - # error code of zero AND non-empty stdout, which explains - # the odd construction: - func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - else - # Allow warning below. - func_to_host_path_result="" - fi - ;; - esac - if test -z "$func_to_host_path_result" ; then - func_error "Could not determine host path corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_path_result="$1" - fi - ;; - esac - fi -} -# end: func_to_host_path - -# func_to_host_pathlist arg -# -# Convert pathlists to host format when used with build tools. -# See func_to_host_path(), above. This function supports the -# following $build/$host combinations (but does no harm for -# combinations not listed here): -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# -# Path separators are also converted from $build format to -# $host format. If ARG begins or ends with a path separator -# character, it is preserved (but converted to $host format) -# on output. -# -# ARG is a pathlist (on $build) that should be converted to -# the proper representation on $host. The result is stored -# in $func_to_host_pathlist_result. -func_to_host_pathlist () -{ - func_to_host_pathlist_result="$1" - if test -n "$1" ; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_to_host_pathlist_tmp2="$1" - # Once set for this call, this variable should not be - # reassigned. It is used in tha fallback case. - func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e 's|^:*||' -e 's|:*$||'` - case $build in - *mingw* ) # Actually, msys. - # Awkward: cmd appends spaces to result. - lt_sed_strip_trailing_spaces="s/[ ]*\$//" - func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # unfortunately, winepath doesn't convert pathlists - func_to_host_pathlist_result="" - func_to_host_pathlist_oldIFS=$IFS - IFS=: - for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do - IFS=$func_to_host_pathlist_oldIFS - if test -n "$func_to_host_pathlist_f" ; then - func_to_host_path "$func_to_host_pathlist_f" - if test -n "$func_to_host_path_result" ; then - if test -z "$func_to_host_pathlist_result" ; then - func_to_host_pathlist_result="$func_to_host_path_result" - else - func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" - fi - fi - fi - IFS=: - done - IFS=$func_to_host_pathlist_oldIFS - ;; - esac - if test -z "$func_to_host_pathlist_result" ; then - func_error "Could not determine the host path(s) corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This may break if $1 contains DOS-style drive - # specifications. The fix is not to complicate the expression - # below, but for the user to provide a working wine installation - # with winepath so that path translation in the cross-to-mingw - # case works properly. - lt_replace_pathsep_nix_to_dos="s|:|;|g" - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_replace_pathsep_nix_to_dos"` - fi - # Now, add the leading and trailing path separators back - case "$1" in - :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" - ;; - esac - case "$1" in - *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" - ;; - esac - ;; - esac - fi -} -# end: func_to_host_pathlist - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -# define setmode _setmode -#else -# include -# include -# ifdef __CYGWIN__ -# include -# define HAVE_SETENV -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -#ifdef _MSC_VER -# define S_IXUSR _S_IEXEC -# define stat _stat -# ifndef _INTPTR_T_DEFINED -# define intptr_t int -# endif -#endif - -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifdef __CYGWIN__ -# define FOPEN_WB "wb" -#endif - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -#undef LTWRAPPER_DEBUGPRINTF -#if defined DEBUGWRAPPER -# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args -static void -ltwrapper_debugprintf (const char *fmt, ...) -{ - va_list args; - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); -} -#else -# define LTWRAPPER_DEBUGPRINTF(args) -#endif - -const char *program_name = NULL; - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_fatal (const char *message, ...); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_opt_process_env_set (const char *arg); -void lt_opt_process_env_prepend (const char *arg); -void lt_opt_process_env_append (const char *arg); -int lt_split_name_value (const char *arg, char** name, char** value); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); - -static const char *script_text_part1 = -EOF - - func_emit_wrapper_part1 yes | - $SED -e 's/\([\\"]\)/\\\1/g' \ - -e 's/^/ "/' -e 's/$/\\n"/' - echo ";" - cat <"))); - for (i = 0; i < newargc; i++) - { - LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); - } - -EOF - - case $host_os in - mingw*) - cat <<"EOF" - /* execv doesn't actually work on mingw as expected on unix */ - rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); - if (rval == -1) - { - /* failed to start process */ - LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); - return 127; - } - return rval; -EOF - ;; - *) - cat <<"EOF" - execv (lt_argv_zero, newargz); - return rval; /* =127, but avoids unused variable warning */ -EOF - ;; - esac - - cat <<"EOF" -} - -void * -xmalloc (size_t num) -{ - void *p = (void *) malloc (num); - if (!p) - lt_fatal ("Memory exhausted"); - - return p; -} - -char * -xstrdup (const char *string) -{ - return string ? strcpy ((char *) xmalloc (strlen (string) + 1), - string) : NULL; -} - -const char * -base_name (const char *name) -{ - const char *base; - -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - /* Skip over the disk name in MSDOS pathnames. */ - if (isalpha ((unsigned char) name[0]) && name[1] == ':') - name += 2; -#endif - - for (base = name; *name; name++) - if (IS_DIR_SEPARATOR (*name)) - base = name + 1; - return base; -} - -int -check_executable (const char *path) -{ - struct stat st; - - LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", - path ? (*path ? path : "EMPTY!") : "NULL!")); - if ((!path) || (!*path)) - return 0; - - if ((stat (path, &st) >= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", - path ? (*path ? path : "EMPTY!") : "NULL!")); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char *concat_name; - - LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", - wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", - tmp_pathspec)); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - char *errstr = strerror (errno); - lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal ("Could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp (str, pat) == 0) - *str = '\0'; - } - return str; -} - -static void -lt_error_core (int exit_status, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s: %s: ", program_name, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, "FATAL", message, ap); - va_end (ap); -} - -void -lt_setenv (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", - (name ? name : ""), - (value ? value : ""))); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - int len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -int -lt_split_name_value (const char *arg, char** name, char** value) -{ - const char *p; - int len; - if (!arg || !*arg) - return 1; - - p = strchr (arg, (int)'='); - - if (!p) - return 1; - - *value = xstrdup (++p); - - len = strlen (arg) - strlen (*value); - *name = XMALLOC (char, len); - strncpy (*name, arg, len-1); - (*name)[len - 1] = '\0'; - - return 0; -} - -void -lt_opt_process_env_set (const char *arg) -{ - char *name = NULL; - char *value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); - } - - lt_setenv (name, value); - XFREE (name); - XFREE (value); -} - -void -lt_opt_process_env_prepend (const char *arg) -{ - char *name = NULL; - char *value = NULL; - char *new_value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); - } - - new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - XFREE (name); - XFREE (value); -} - -void -lt_opt_process_env_append (const char *arg) -{ - char *name = NULL; - char *value = NULL; - char *new_value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); - } - - new_value = lt_extend_str (getenv (name), value, 1); - lt_setenv (name, new_value); - XFREE (new_value); - XFREE (name); - XFREE (value); -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - (name ? name : ""), - (value ? value : ""))); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[len-1] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - (name ? name : ""), - (value ? value : ""))); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - - -EOF -} -# end: func_emit_cwrapperexe_src - -# func_mode_link arg... -func_mode_link () -{ - $opt_debug - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module="${wl}-single_module" - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) deplibs="$deplibs $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# moreargs="$moreargs $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file \`$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - weak_libs="$weak_libs $arg" - prev= - continue - ;; - xcclinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname '-L' '' "$arg" - dir=$func_stripname_result - if test -z "$dir"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" - else - func_fatal_error "need path for \`-L' option" - fi - fi - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - deplibs="$deplibs System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; - esac - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" - linker_flags="$linker_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - # -64, -mips[0-9] enable 64-bit mode on the SGI compiler - # -r[0-9][0-9]* specifies the processor on the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler - # +DA*, +DD* enable 64-bit mode on the HP compiler - # -q* pass through compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* pass through architecture-specific - # compiler args for GCC - # -F/path gives path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC - # @file GCC response files - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - compiler_flags="$compiler_flags $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_duplicate_deps ; then - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - libs="$libs $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; - esac - pre_post_deps="$pre_post_deps $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs="$tmp_deplibs" - fi - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" - ;; - esac - fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - case $lib in - *.la) func_source "$lib" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` - case " $weak_libs " in - *" $deplib_base "*) ;; - *) deplibs="$deplibs $deplib" ;; - esac - done - done - libs="$dlprefiles" - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - compiler_flags="$compiler_flags $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - dir=$func_stripname_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - $ECHO - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because the file extensions .$libext of this argument makes me believe" - $ECHO "*** that it is just a static archive that I should not use here." - else - $ECHO - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - ;; - esac - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" - fi - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - dlprefiles="$dlprefiles $lib $dependency_libs" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" - fi - ;; - esac - func_basename "$lib" - laname="$func_basename_result" - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" - fi - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - newdlprefiles="$newdlprefiles $dir/$dlname" - else - newdlprefiles="$newdlprefiles $dir/$linklib" - fi - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in - *"$absdir:"*) ;; - *) temp_rpath="$temp_rpath$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc*) - # No point in relinking DLLs because paths are not encoded - notinst_deplibs="$notinst_deplibs $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" - break - fi - done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then - $ECHO - if test "$linkmode" = prog; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname="$1" - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc*) - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - func_basename "$soroot" - soname="$func_basename_result" - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from \`$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - $ECHO - $ECHO "*** And there doesn't seem to be a static archive available" - $ECHO "*** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - elif test -n "$old_library"; then - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - $ECHO - $ECHO "*** Warning: This system can not link to static lib archive $lib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - $ECHO "*** But as you try to build a module library, libtool will still create " - $ECHO "*** a static module, that should work as long as the dlopening application" - $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - $ECHO - $ECHO "*** However, this would only work if libtool was able to extract symbol" - $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" - $ECHO "*** not find such a program. So, this module is probably useless." - $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - *) temp_deplibs="$temp_deplibs $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - newlib_search_path="$newlib_search_path $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path="$deplib" ;; - *.la) - func_dirname "$deplib" "" "." - dir="$func_dirname_result" - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" - path= - fi - fi - ;; - *) - path="-L$absdir/$objdir" - ;; - esac - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" - - path="-L$absdir" - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - tmp_libs="$tmp_libs $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "\`-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - objs="$objs$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" - - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" - else - $ECHO - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - libobjs="$libobjs $objs" - fi - fi - - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" - - install_libdir="$1" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - shift - IFS="$save_ifs" - - test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$1" - number_minor="$2" - number_revision="$3" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - darwin|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - *) - func_fatal_configuration "$modename: unknown library version type \`$version_type'" - ;; - esac - ;; - no) - current="$1" - revision="$2" - age="$3" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current" - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; - - qnx) - major=".$current" - versuffix=".$current" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - - *) - func_fatal_configuration "unknown library version type \`$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - fi - - func_generate_dlsyms "$libname" "$libname" "yes" - libobjs="$libobjs $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - removelist="$removelist $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - oldlibs="$oldlibs $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` - # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` - # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) dlfiles="$dlfiles $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) dlprefiles="$dlprefiles $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - deplibs="$deplibs System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - deplibs="$deplibs -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $ECHO - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $ECHO - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ - -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` - done - fi - if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | - $GREP . >/dev/null; then - $ECHO - if test "X$deplibs_check_method" = "Xnone"; then - $ECHO "*** Warning: inter-library dependencies are not supported in this platform." - else - $ECHO "*** Warning: inter-library dependencies are not known to be supported." - fi - $ECHO "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - fi - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - $ECHO - $ECHO "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - $ECHO "*** a static module, that should work as long as the dlopening" - $ECHO "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - $ECHO - $ECHO "*** However, this would only work if libtool was able to extract symbol" - $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" - $ECHO "*** not find such a program. So, this module is probably useless." - $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - $ECHO "*** The inter-library dependencies that have been dropped here will be" - $ECHO "*** automatically added whenever a program is linked with this library" - $ECHO "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - $ECHO - $ECHO "*** Since this library must not contain undefined symbols," - $ECHO "*** because either the platform does not support them or" - $ECHO "*** it was explicitly requested with -no-undefined," - $ECHO "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - deplibs="$new_libs" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - if test -n "$hardcode_libdir_flag_spec_ld"; then - eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" - else - eval dep_rpath=\"$hardcode_libdir_flag_spec\" - fi - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname="$1" - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - linknames="$linknames $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" - delfiles="$delfiles $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols="$export_symbols" - export_symbols= - always_export_symbols=yes - fi - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - func_len " $cmd" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' - fi - - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - tmp_deplibs="$tmp_deplibs $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - linker_flags="$linker_flags $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - output_la=`$ECHO "X$output" | $Xsed -e "$basename"` - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript - func_verbose "creating GNU ld script: $output" - $ECHO 'INPUT (' > $output - for obj in $save_libobjs - do - $ECHO "$obj" >> $output - done - $ECHO ')' >> $output - delfiles="$delfiles $output" - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test "$compiler_needs_object" = yes; then - firstobj="$1 " - shift - fi - for obj - do - $ECHO "$obj" >> $output - done - delfiles="$delfiles $output" - output=$firstobj\"$file_list_spec$output\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test "X$objlist" = X || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - eval concat_cmds=\"$reload_cmds $objlist $last_robj\" - else - # All subsequent reloadable object files will link in - # the last one created. - eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext - objlist=$obj - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" - if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" - fi - delfiles="$delfiles $output" - - else - output= - fi - - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - fi - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - if ${skipped_export-false}; then - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - fi - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "\`-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "\`-release' is ignored for programs" - - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - compile_command="$compile_command ${wl}-bind_at_load" - finalize_command="$finalize_command ${wl}-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) dllsearchpath="$dllsearchpath:$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=yes - case $host in - *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - *cegcc) - # Disable wrappers for cegcc, we are cross compiling anyway. - wrappers_required=no - ;; - *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - esac - if test "$wrappers_required" = no; then - # Replace the output file specification. - compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' - fi - - exit $exit_status - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - - # Quote $ECHO for shipping. - if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then - case $progpath in - [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; - *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; - esac - qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` - else - qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - oldobjs="$oldobjs $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $addlibs - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - $ECHO "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase="$func_basename_result" - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - oldobjs="$oldobjs $gentop/$newobj" - ;; - *) oldobjs="$oldobjs $obj" ;; - esac - done - fi - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - newdependency_libs="$newdependency_libs $libdir/$name" - ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlfiles="$newdlfiles $libdir/$name" - ;; - *) newdlfiles="$newdlfiles $lib" ;; - esac - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlprefiles="$newdlprefiles $libdir/$name" - ;; - esac - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlfiles="$newdlfiles $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlprefiles="$newdlprefiles $abs" - done - dlprefiles="$newdlprefiles" - fi - $RM $output - # place dlname in correct position for cygwin - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -{ test "$mode" = link || test "$mode" = relink; } && - func_mode_link ${1+"$@"} - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $opt_debug - RM="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) RM="$RM $arg"; rmforce=yes ;; - -*) RM="$RM $arg" ;; - *) files="$files $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - origobjdir="$objdir" - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - objdir="$origobjdir" - else - objdir="$dir/$origobjdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$mode" = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates - if test "$mode" = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" - - case "$mode" in - clean) - case " $library_names " in - # " " in the beginning catches empty $dlname - *" $dlname "*) ;; - *) rmfiles="$rmfiles $objdir/$dlname" ;; - esac - test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then - rmfiles="$rmfiles $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then - rmfiles="$rmfiles $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$mode" = clean ; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - rmfiles="$rmfiles $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - rmfiles="$rmfiles $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - rmfiles="$rmfiles $objdir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - objdir="$origobjdir" - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -{ test "$mode" = uninstall || test "$mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: -# vi:sw=2 - diff --git a/cloog-0.17.0/isl/m4/ax_c___attribute__.m4 b/cloog-0.17.0/isl/m4/ax_c___attribute__.m4 deleted file mode 100644 index cf3d62b..0000000 --- a/cloog-0.17.0/isl/m4/ax_c___attribute__.m4 +++ /dev/null @@ -1,66 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_c___attribute__.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_C___ATTRIBUTE__ -# -# DESCRIPTION -# -# Provides a test for the compiler support of __attribute__ extensions. -# Defines HAVE___ATTRIBUTE__ if it is found. -# -# LICENSE -# -# Copyright (c) 2008 Stepan Kasal -# Copyright (c) 2008 Christian Haggstrom -# Copyright (c) 2008 Ryan McCabe -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 8 - -AC_DEFUN([AX_C___ATTRIBUTE__], [ - AC_CACHE_CHECK([for __attribute__], [ax_cv___attribute__], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - static void foo(void) __attribute__ ((unused)); - static void - foo(void) { - exit(1); - } - ]], [])], - [ax_cv___attribute__=yes], - [ax_cv___attribute__=no] - ) - ]) - if test "$ax_cv___attribute__" = "yes"; then - AC_DEFINE([HAVE___ATTRIBUTE__], 1, [define if your compiler has __attribute__]) - fi -]) diff --git a/cloog-0.17.0/isl/m4/ax_cc_maxopt.m4 b/cloog-0.17.0/isl/m4/ax_cc_maxopt.m4 deleted file mode 100644 index 92d522d..0000000 --- a/cloog-0.17.0/isl/m4/ax_cc_maxopt.m4 +++ /dev/null @@ -1,188 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_cc_maxopt.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CC_MAXOPT -# -# DESCRIPTION -# -# Try to turn on "good" C optimization flags for various compilers and -# architectures, for some definition of "good". (In our case, good for -# FFTW and hopefully for other scientific codes. Modify as needed.) -# -# The user can override the flags by setting the CFLAGS environment -# variable. The user can also specify --enable-portable-binary in order to -# disable any optimization flags that might result in a binary that only -# runs on the host architecture. -# -# Note also that the flags assume that ANSI C aliasing rules are followed -# by the code (e.g. for gcc's -fstrict-aliasing), and that floating-point -# computations can be re-ordered as needed. -# -# Requires macros: AX_CHECK_COMPILER_FLAGS, AX_COMPILER_VENDOR, -# AX_GCC_ARCHFLAG, AX_GCC_X86_CPUID. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CC_MAXOPT], -[ -AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AX_COMPILER_VENDOR]) -AC_REQUIRE([AC_CANONICAL_HOST]) - -AC_ARG_ENABLE(portable-binary, [AC_HELP_STRING([--enable-portable-binary], [disable compiler optimizations that would produce unportable binaries])], - acx_maxopt_portable=$withval, acx_maxopt_portable=no) - -# Try to determine "good" native compiler flags if none specified via CFLAGS -if test "$ac_test_CFLAGS" != "set"; then - CFLAGS="" - case $ax_cv_c_compiler_vendor in - dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" - if test "x$acx_maxopt_portable" = xno; then - CFLAGS="$CFLAGS -arch host" - fi;; - - sun) CFLAGS="-native -fast -xO5 -dalign" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS -xarch=generic" - fi;; - - hp) CFLAGS="+Oall +Optrs_ansi +DSnative" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS +DAportable" - fi;; - - ibm) if test "x$acx_maxopt_portable" = xno; then - xlc_opt="-qarch=auto -qtune=auto" - else - xlc_opt="-qtune=auto" - fi - AX_CHECK_COMPILER_FLAGS($xlc_opt, - CFLAGS="-O3 -qansialias -w $xlc_opt", - [CFLAGS="-O3 -qansialias -w" - echo "******************************************************" - echo "* You seem to have the IBM C compiler. It is *" - echo "* recommended for best performance that you use: *" - echo "* *" - echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" - echo "* ^^^ ^^^ *" - echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" - echo "* CPU you have. (Set the CFLAGS environment var. *" - echo "* and re-run configure.) For more info, man cc. *" - echo "******************************************************"]) - ;; - - intel) CFLAGS="-O3 -ansi_alias" - if test "x$acx_maxopt_portable" = xno; then - icc_archflag=unknown - icc_flags="" - case $host_cpu in - i686*|x86_64*) - # icc accepts gcc assembly syntax, so these should work: - AX_GCC_X86_CPUID(0) - AX_GCC_X86_CPUID(1) - case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *6a?:*[[234]]:*:*|*6[[789b]]?:*:*:*) icc_flags="-xK";; - *f3[[347]]:*:*:*|*f4[1347]:*:*:*) icc_flags="-xP -xN -xW -xK";; - *f??:*:*:*) icc_flags="-xN -xW -xK";; - esac ;; - esac ;; - esac - if test "x$icc_flags" != x; then - for flag in $icc_flags; do - AX_CHECK_COMPILER_FLAGS($flag, [icc_archflag=$flag; break]) - done - fi - AC_MSG_CHECKING([for icc architecture flag]) - AC_MSG_RESULT($icc_archflag) - if test "x$icc_archflag" != xunknown; then - CFLAGS="$CFLAGS $icc_archflag" - fi - fi - ;; - - gnu) - # default optimization flags for gcc on all systems - CFLAGS="-O3 -fomit-frame-pointer" - - # -malign-double for x86 systems - AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double") - - # -fstrict-aliasing for gcc-2.95+ - AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing, - CFLAGS="$CFLAGS -fstrict-aliasing") - - # note that we enable "unsafe" fp optimization with other compilers, too - AX_CHECK_COMPILER_FLAGS(-ffast-math, CFLAGS="$CFLAGS -ffast-math") - - AX_GCC_ARCHFLAG($acx_maxopt_portable) - - # drop to -O1 for gcc 4.2 - $CC --version | - sed -e 's/.* \(@<:@0-9@:>@@<:@0-9@:>@*\)\.\(@<:@0-9@:>@@<:@0-9@:>@*\).*/\1 \2/' | - (read major minor - if test $major -eq 4 -a $minor -eq 2; then - exit 0 - fi - exit 1 - ) && CFLAGS="-O1" - ;; - esac - - if test -z "$CFLAGS"; then - echo "" - echo "********************************************************" - echo "* WARNING: Don't know the best CFLAGS for this system *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" - echo "********************************************************" - echo "" - CFLAGS="-O3" - fi - - AX_CHECK_COMPILER_FLAGS($CFLAGS, [], [ - echo "" - echo "********************************************************" - echo "* WARNING: The guessed CFLAGS don't seem to work with *" - echo "* your compiler. *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "********************************************************" - echo "" - CFLAGS="" - ]) - -fi -]) diff --git a/cloog-0.17.0/isl/m4/ax_check_compiler_flags.m4 b/cloog-0.17.0/isl/m4/ax_check_compiler_flags.m4 deleted file mode 100644 index 7da8324..0000000 --- a/cloog-0.17.0/isl/m4/ax_check_compiler_flags.m4 +++ /dev/null @@ -1,74 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_check_compiler_flags.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CHECK_COMPILER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE]) -# -# DESCRIPTION -# -# Check whether the given compiler FLAGS work with the current language's -# compiler, or whether they give an error. (Warnings, however, are -# ignored.) -# -# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on -# success/failure. -# -# LICENSE -# -# Copyright (c) 2009 Steven G. Johnson -# Copyright (c) 2009 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CHECK_COMPILER_FLAGS], -[AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX -AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1]) -dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname: -AS_LITERAL_IF([$1], - [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1]), [ - ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=yes, - AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=no) - _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])], - [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=yes, - eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=no) - _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS]) -eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1]) -AC_MSG_RESULT($ax_check_compiler_flags) -if test "x$ax_check_compiler_flags" = xyes; then - m4_default([$2], :) -else - m4_default([$3], :) -fi -])dnl AX_CHECK_COMPILER_FLAGS diff --git a/cloog-0.17.0/isl/m4/ax_compiler_vendor.m4 b/cloog-0.17.0/isl/m4/ax_compiler_vendor.m4 deleted file mode 100644 index 3214706..0000000 --- a/cloog-0.17.0/isl/m4/ax_compiler_vendor.m4 +++ /dev/null @@ -1,63 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_compiler_vendor.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_COMPILER_VENDOR -# -# DESCRIPTION -# -# Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, sun, -# hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft, -# watcom, etc. The vendor is returned in the cache variable -# $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 9 - -AC_DEFUN([AX_COMPILER_VENDOR], -[ -AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, - [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown - # note: don't check for gcc first since some other compilers define __GNUC__ - for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ clang:__clang__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do - vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ -#if !($vencpp) - thisisanerror; -#endif -])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break]) - done - ]) -]) diff --git a/cloog-0.17.0/isl/m4/ax_create_pkgconfig_info.m4 b/cloog-0.17.0/isl/m4/ax_create_pkgconfig_info.m4 deleted file mode 100644 index 60ac548..0000000 --- a/cloog-0.17.0/isl/m4/ax_create_pkgconfig_info.m4 +++ /dev/null @@ -1,349 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_create_pkgconfig_info.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CREATE_PKGCONFIG_INFO [(outputfile, [requires [,libs [,summary [,cflags [, ldflags]]]]])] -# -# DESCRIPTION -# -# Defaults: -# -# $1 = $PACKAGE_NAME.pc -# $2 = (empty) -# $3 = $PACKAGE_LIBS $LIBS (as set at that point in configure.ac) -# $4 = $PACKAGE_SUMMARY (or $1 Library) -# $5 = $CPPFLAGS $PACKAGE_CFLAGS (as set at the point in configure.ac) -# $6 = $LDFLAGS $PACKAGE_LDFLAGS (as set at the point in configure.ac) -# -# PACKAGE_NAME defaults to $PACKAGE if not set. -# PACKAGE_LIBS defaults to -l$PACKAGE_NAME if not set. -# -# The resulting file is called $PACKAGE.pc.in / $PACKAGE.pc -# -# You will find this macro most useful in conjunction with -# ax_spec_defaults that can read good initializers from the .spec file. In -# consequencd, most of the generatable installable stuff can be made from -# information being updated in a single place for the whole project. -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# Copyright (c) 2008 Sven Verdoolaege -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CREATE_PKGCONFIG_INFO],[dnl -AS_VAR_PUSHDEF([PKGCONFIG_suffix],[ax_create_pkgconfig_suffix])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libdir],[ax_create_pkgconfig_libdir])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libfile],[ax_create_pkgconfig_libfile])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libname],[ax_create_pkgconfig_libname])dnl -AS_VAR_PUSHDEF([PKGCONFIG_version],[ax_create_pkgconfig_version])dnl -AS_VAR_PUSHDEF([PKGCONFIG_description],[ax_create_pkgconfig_description])dnl -AS_VAR_PUSHDEF([PKGCONFIG_requires],[ax_create_pkgconfig_requires])dnl -AS_VAR_PUSHDEF([PKGCONFIG_pkglibs],[ax_create_pkgconfig_pkglibs])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libs],[ax_create_pkgconfig_libs])dnl -AS_VAR_PUSHDEF([PKGCONFIG_ldflags],[ax_create_pkgconfig_ldflags])dnl -AS_VAR_PUSHDEF([PKGCONFIG_cppflags],[ax_create_pkgconfig_cppflags])dnl -AS_VAR_PUSHDEF([PKGCONFIG_generate],[ax_create_pkgconfig_generate])dnl -AS_VAR_PUSHDEF([PKGCONFIG_src_libdir],[ax_create_pkgconfig_src_libdir])dnl -AS_VAR_PUSHDEF([PKGCONFIG_src_headers],[ax_create_pkgconfig_src_headers])dnl - -# we need the expanded forms... -test "x$prefix" = xNONE && prefix=$ac_default_prefix -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -AC_MSG_CHECKING(our pkgconfig libname) -test ".$PKGCONFIG_libname" != "." || \ -PKGCONFIG_libname="ifelse($1,,${PACKAGE_NAME},`basename $1 .pc`)" -test ".$PKGCONFIG_libname" != "." || \ -PKGCONFIG_libname="$PACKAGE" -PKGCONFIG_libname=`eval echo "$PKGCONFIG_libname"` -PKGCONFIG_libname=`eval echo "$PKGCONFIG_libname"` -AC_MSG_RESULT($PKGCONFIG_libname) - -AC_MSG_CHECKING(our pkgconfig version) -test ".$PKGCONFIG_version" != "." || \ -PKGCONFIG_version="${PACKAGE_VERSION}" -test ".$PKGCONFIG_version" != "." || \ -PKGCONFIG_version="$VERSION" -PKGCONFIG_version=`eval echo "$PKGCONFIG_version"` -PKGCONFIG_version=`eval echo "$PKGCONFIG_version"` -AC_MSG_RESULT($PKGCONFIG_version) - -AC_MSG_CHECKING(our pkgconfig_libdir) -test ".$pkgconfig_libdir" = "." && \ -pkgconfig_libdir='${libdir}/pkgconfig' -PKGCONFIG_libdir=`eval echo "$pkgconfig_libdir"` -PKGCONFIG_libdir=`eval echo "$PKGCONFIG_libdir"` -PKGCONFIG_libdir=`eval echo "$PKGCONFIG_libdir"` -AC_MSG_RESULT($pkgconfig_libdir) -test "$pkgconfig_libdir" != "$PKGCONFIG_libdir" && ( -AC_MSG_RESULT(expanded our pkgconfig_libdir... $PKGCONFIG_libdir)) -AC_SUBST([pkgconfig_libdir]) - -AC_MSG_CHECKING(our pkgconfig_libfile) -test ".$pkgconfig_libfile" != "." || \ -pkgconfig_libfile="ifelse($1,,$PKGCONFIG_libname.pc,`basename $1`)" -PKGCONFIG_libfile=`eval echo "$pkgconfig_libfile"` -PKGCONFIG_libfile=`eval echo "$PKGCONFIG_libfile"` -AC_MSG_RESULT($pkgconfig_libfile) -test "$pkgconfig_libfile" != "$PKGCONFIG_libfile" && ( -AC_MSG_RESULT(expanded our pkgconfig_libfile... $PKGCONFIG_libfile)) -AC_SUBST([pkgconfig_libfile]) - -AC_MSG_CHECKING(our package / suffix) -PKGCONFIG_suffix="$program_suffix" -test ".$PKGCONFIG_suffix" != .NONE || PKGCONFIG_suffix="" -AC_MSG_RESULT(${PACKAGE_NAME} / ${PKGCONFIG_suffix}) - -AC_MSG_CHECKING(our pkgconfig description) -PKGCONFIG_description="ifelse($4,,$PACKAGE_SUMMARY,$4)" -test ".$PKGCONFIG_description" != "." || \ -PKGCONFIG_description="$PKGCONFIG_libname Library" -PKGCONFIG_description=`eval echo "$PKGCONFIG_description"` -PKGCONFIG_description=`eval echo "$PKGCONFIG_description"` -AC_MSG_RESULT($PKGCONFIG_description) - -AC_MSG_CHECKING(our pkgconfig requires) -PKGCONFIG_requires="ifelse($2,,$PACKAGE_REQUIRES,$2)" -PKGCONFIG_requires=`eval echo "$PKGCONFIG_requires"` -PKGCONFIG_requires=`eval echo "$PKGCONFIG_requires"` -AC_MSG_RESULT($PKGCONFIG_requires) - -AC_MSG_CHECKING(our pkgconfig ext libs) -PKGCONFIG_pkglibs="$PACKAGE_LIBS" -test ".$PKGCONFIG_pkglibs" != "." || PKGCONFIG_pkglibs="-l$PKGCONFIG_libname" -PKGCONFIG_libs="ifelse($3,,$PKGCONFIG_pkglibs $LIBS,$3)" -PKGCONFIG_libs=`eval echo "$PKGCONFIG_libs"` -PKGCONFIG_libs=`eval echo "$PKGCONFIG_libs"` -AC_MSG_RESULT($PKGCONFIG_libs) - -AC_MSG_CHECKING(our pkgconfig cppflags) -PKGCONFIG_cppflags="ifelse($5,,$CPPFLAGS $PACKAGE_CFLAGS,$5)" -PKGCONFIG_cppflags=`eval echo "$PKGCONFIG_cppflags"` -PKGCONFIG_cppflags=`eval echo "$PKGCONFIG_cppflags"` -AC_MSG_RESULT($PKGCONFIG_cppflags) - -AC_MSG_CHECKING(our pkgconfig ldflags) -PKGCONFIG_ldflags="ifelse($6,,$LDFLAGS $PACKAGE_LDFLAGS,$5)" -PKGCONFIG_ldflags=`eval echo "$PKGCONFIG_ldflags"` -PKGCONFIG_ldflags=`eval echo "$PKGCONFIG_ldflags"` -AC_MSG_RESULT($PKGCONFIG_ldflags) - -test ".$PKGCONFIG_generate" != "." || \ -PKGCONFIG_generate="ifelse($1,,$PKGCONFIG_libname.pc,$1)" -PKGCONFIG_generate=`eval echo "$PKGCONFIG_generate"` -PKGCONFIG_generate=`eval echo "$PKGCONFIG_generate"` -test "$pkgconfig_libfile" != "$PKGCONFIG_generate" && ( -AC_MSG_RESULT(generate the pkgconfig later... $PKGCONFIG_generate)) - -if test ".$PKGCONFIG_src_libdir" = "." ; then -PKGCONFIG_src_libdir=`pwd` -PKGCONFIG_src_libdir=`AS_DIRNAME("$PKGCONFIG_src_libdir/$PKGCONFIG_generate")` -test ! -d $PKGCONFIG_src_libdir/src || \ -PKGCONFIG_src_libdir="$PKGCONFIG_src_libdir/src" -case ".$objdir" in -*libs) PKGCONFIG_src_libdir="$PKGCONFIG_src_libdir/$objdir" ;; esac -AC_MSG_RESULT(noninstalled pkgconfig -L $PKGCONFIG_src_libdir) -fi - -if test ".$PKGCONFIG_src_headers" = "." ; then -PKGCONFIG_src_headers=`pwd` -v="$ac_top_srcdir" ; -test ".$v" != "." || v="$ax_spec_dir" -test ".$v" != "." || v="$srcdir" -case "$v" in /*) PKGCONFIG_src_headers="" ;; esac -PKGCONFIG_src_headers=`AS_DIRNAME("$PKGCONFIG_src_headers/$v/x")` -test ! -d $PKGCONFIG_src_headers/incl[]ude || \ -PKGCONFIG_src_headers="$PKGCONFIG_src_headers/incl[]ude" -AC_MSG_RESULT(noninstalled pkgconfig -I $PKGCONFIG_src_headers) -fi - - -dnl AC_CONFIG_COMMANDS crap disallows to use $PKGCONFIG_libfile here... -AC_CONFIG_COMMANDS([$ax_create_pkgconfig_generate],[ -pkgconfig_generate="$ax_create_pkgconfig_generate" -if test ! -f "$pkgconfig_generate.in" -then generate="true" -elif grep ' generated by configure ' $pkgconfig_generate.in >/dev/null -then generate="true" -else generate="false"; -fi -if $generate ; then -AC_MSG_NOTICE(creating $pkgconfig_generate.in) -cat > $pkgconfig_generate.in <conftest.sed < $pkgconfig_generate -if test ! -s $pkgconfig_generate ; then - AC_MSG_ERROR([$pkgconfig_generate is empty]) -fi ; rm conftest.sed # DONE generate $pkgconfig_generate -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.pc/'` -AC_MSG_NOTICE(creating $pkgconfig_uninstalled) -cat >conftest.sed < $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - AC_MSG_ERROR([$pkgconfig_uninstalled is empty]) -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled - pkgconfig_requires_add=`echo ${pkgconfig_requires}` -if test ".$pkgconfig_requires_add" != "." ; then - pkgconfig_requires_add="pkg-config $pkgconfig_requires_add" - else pkgconfig_requires_add=":" ; fi -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.sh/'` -AC_MSG_NOTICE(creating $pkgconfig_uninstalled) -cat >conftest.sed <Name:>for option\\; do case \"\$option\" in --list-all|--name) echo > -s>Description: *>\\;\\; --help) pkg-config --help \\; echo Buildscript Of > -s>Version: *>\\;\\; --modversion|--version) echo > -s>Requires:>\\;\\; --requires) echo $pkgconfig_requires_add> -s>Libs: *>\\;\\; --libs) echo > -s>Cflags: *>\\;\\; --cflags) echo > -/--libs)/a\\ - $pkgconfig_requires_add -/--cflags)/a\\ - $pkgconfig_requires_add\\ -;; --variable=*) eval echo '\$'\`echo \$option | sed -e 's/.*=//'\`\\ -;; --uninstalled) exit 0 \\ -;; *) ;; esac done -AXEOF -sed -f conftest.sed $pkgconfig_generate.in > $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - AC_MSG_ERROR([$pkgconfig_uninstalled is empty]) -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled -],[ -dnl AC_CONFIG_COMMANDS crap, the AS_PUSHVAR defines are invalid here... -ax_create_pkgconfig_generate="$ax_create_pkgconfig_generate" -pkgconfig_prefix='$prefix' -pkgconfig_execprefix='$exec_prefix' -pkgconfig_bindir='$bindir' -pkgconfig_libdir='$libdir' -pkgconfig_includedir='$includedir' -pkgconfig_datarootdir='$datarootdir' -pkgconfig_datadir='$datadir' -pkgconfig_sysconfdir='$sysconfdir' -pkgconfig_suffix='$ax_create_pkgconfig_suffix' -pkgconfig_package='$PACKAGE_NAME' -pkgconfig_libname='$ax_create_pkgconfig_libname' -pkgconfig_description='$ax_create_pkgconfig_description' -pkgconfig_version='$ax_create_pkgconfig_version' -pkgconfig_requires='$ax_create_pkgconfig_requires' -pkgconfig_libs='$ax_create_pkgconfig_libs' -pkgconfig_ldflags='$ax_create_pkgconfig_ldflags' -pkgconfig_cppflags='$ax_create_pkgconfig_cppflags' -pkgconfig_src_libdir='$ax_create_pkgconfig_src_libdir' -pkgconfig_src_headers='$ax_create_pkgconfig_src_headers' -])dnl -AS_VAR_POPDEF([PKGCONFIG_suffix])dnl -AS_VAR_POPDEF([PKGCONFIG_libdir])dnl -AS_VAR_POPDEF([PKGCONFIG_libfile])dnl -AS_VAR_POPDEF([PKGCONFIG_libname])dnl -AS_VAR_POPDEF([PKGCONFIG_version])dnl -AS_VAR_POPDEF([PKGCONFIG_description])dnl -AS_VAR_POPDEF([PKGCONFIG_requires])dnl -AS_VAR_POPDEF([PKGCONFIG_pkglibs])dnl -AS_VAR_POPDEF([PKGCONFIG_libs])dnl -AS_VAR_POPDEF([PKGCONFIG_ldflags])dnl -AS_VAR_POPDEF([PKGCONFIG_cppflags])dnl -AS_VAR_POPDEF([PKGCONFIG_generate])dnl -AS_VAR_POPDEF([PKGCONFIG_src_libdir])dnl -AS_VAR_POPDEF([PKGCONFIG_src_headers])dnl -]) diff --git a/cloog-0.17.0/isl/m4/ax_create_stdint_h.m4 b/cloog-0.17.0/isl/m4/ax_create_stdint_h.m4 deleted file mode 100644 index 7b82165..0000000 --- a/cloog-0.17.0/isl/m4/ax_create_stdint_h.m4 +++ /dev/null @@ -1,739 +0,0 @@ -# =========================================================================== -# http://autoconf-archive.cryp.to/ax_create_stdint_h.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CREATE_STDINT_H [( HEADER-TO-GENERATE [, HEDERS-TO-CHECK])] -# -# DESCRIPTION -# -# the "ISO C9X: 7.18 Integer types " section requires the -# existence of an include file that defines a set of typedefs, -# especially uint8_t,int32_t,uintptr_t. Many older installations will not -# provide this file, but some will have the very same definitions in -# . In other enviroments we can use the inet-types in -# which would define the typedefs int8_t and u_int8_t -# respectivly. -# -# This macros will create a local "_stdint.h" or the headerfile given as -# an argument. In many cases that file will just "#include " or -# "#include ", while in other environments it will provide the -# set of basic 'stdint's definitions/typedefs: -# -# int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,intptr_t,uintptr_t -# int_least32_t.. int_fast32_t.. intmax_t -# -# which may or may not rely on the definitions of other files, or using -# the AC_CHECK_SIZEOF macro to determine the actual sizeof each type. -# -# if your header files require the stdint-types you will want to create an -# installable file mylib-int.h that all your other installable header may -# include. So if you have a library package named "mylib", just use -# -# AX_CREATE_STDINT_H(mylib-int.h) -# -# in configure.ac and go to install that very header file in Makefile.am -# along with the other headers (mylib.h) - and the mylib-specific headers -# can simply use "#include " to obtain the stdint-types. -# -# Remember, if the system already had a valid , the generated -# file will include it directly. No need for fuzzy HAVE_STDINT_H things... -# (oops, GCC 4.2.x has deliberatly disabled its stdint.h for non-c99 -# compilation and the c99-mode is not the default. Therefore this macro -# will not use the compiler's stdint.h - please complain to the GCC -# developers). -# -# LAST MODIFICATION -# -# 2008-04-12 -# -# COPYLEFT -# -# Copyright (c) 2008 Guido U. Draheim -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Macro Archive. When you make and -# distribute a modified version of the Autoconf Macro, you may extend this -# special exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CHECK_DATA_MODEL],[ - AC_CHECK_SIZEOF(char) - AC_CHECK_SIZEOF(short) - AC_CHECK_SIZEOF(int) - AC_CHECK_SIZEOF(long) - AC_CHECK_SIZEOF(void*) - ac_cv_char_data_model="" - ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_char" - ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_short" - ac_cv_char_data_model="$ac_cv_char_data_model$ac_cv_sizeof_int" - ac_cv_long_data_model="" - ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_int" - ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_long" - ac_cv_long_data_model="$ac_cv_long_data_model$ac_cv_sizeof_voidp" - AC_MSG_CHECKING([data model]) - case "$ac_cv_char_data_model/$ac_cv_long_data_model" in - 122/242) ac_cv_data_model="IP16" ; n="standard 16bit machine" ;; - 122/244) ac_cv_data_model="LP32" ; n="standard 32bit machine" ;; - 122/*) ac_cv_data_model="i16" ; n="unusual int16 model" ;; - 124/444) ac_cv_data_model="ILP32" ; n="standard 32bit unixish" ;; - 124/488) ac_cv_data_model="LP64" ; n="standard 64bit unixish" ;; - 124/448) ac_cv_data_model="LLP64" ; n="unusual 64bit unixish" ;; - 124/*) ac_cv_data_model="i32" ; n="unusual int32 model" ;; - 128/888) ac_cv_data_model="ILP64" ; n="unusual 64bit numeric" ;; - 128/*) ac_cv_data_model="i64" ; n="unusual int64 model" ;; - 222/*2) ac_cv_data_model="DSP16" ; n="strict 16bit dsptype" ;; - 333/*3) ac_cv_data_model="DSP24" ; n="strict 24bit dsptype" ;; - 444/*4) ac_cv_data_model="DSP32" ; n="strict 32bit dsptype" ;; - 666/*6) ac_cv_data_model="DSP48" ; n="strict 48bit dsptype" ;; - 888/*8) ac_cv_data_model="DSP64" ; n="strict 64bit dsptype" ;; - 222/*|333/*|444/*|666/*|888/*) : - ac_cv_data_model="iDSP" ; n="unusual dsptype" ;; - *) ac_cv_data_model="none" ; n="very unusual model" ;; - esac - AC_MSG_RESULT([$ac_cv_data_model ($ac_cv_long_data_model, $n)]) -]) - -dnl AX_CHECK_HEADER_STDINT_X([HEADERLIST][,ACTION-IF]) -AC_DEFUN([AX_CHECK_HEADER_STDINT_X],[ -AC_CACHE_CHECK([for stdint uintptr_t], [ac_cv_header_stdint_x],[ - ac_cv_header_stdint_x="" # the 1997 typedefs (inttypes.h) - AC_MSG_RESULT([(..)]) - for i in m4_ifval([$1],[$1],[stdint.h inttypes.h sys/inttypes.h sys/types.h]) - do - unset ac_cv_type_uintptr_t - unset ac_cv_type_uint64_t - AC_CHECK_TYPE(uintptr_t,[ac_cv_header_stdint_x=$i],continue,[#include <$i>]) - AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>]) - m4_ifvaln([$2],[$2]) break - done - AC_MSG_CHECKING([for stdint uintptr_t]) - ]) -]) - -AC_DEFUN([AX_CHECK_HEADER_STDINT_O],[ -AC_CACHE_CHECK([for stdint uint32_t], [ac_cv_header_stdint_o],[ - ac_cv_header_stdint_o="" # the 1995 typedefs (sys/inttypes.h) - AC_MSG_RESULT([(..)]) - for i in m4_ifval([$1],[$1],[inttypes.h sys/inttypes.h sys/types.h stdint.h]) - do - unset ac_cv_type_uint32_t - unset ac_cv_type_uint64_t - AC_CHECK_TYPE(uint32_t,[ac_cv_header_stdint_o=$i],continue,[#include <$i>]) - AC_CHECK_TYPE(uint64_t,[and64="/uint64_t"],[and64=""],[#include<$i>]) - m4_ifvaln([$2],[$2]) break - break; - done - AC_MSG_CHECKING([for stdint uint32_t]) - ]) -]) - -AC_DEFUN([AX_CHECK_HEADER_STDINT_U],[ -AC_CACHE_CHECK([for stdint u_int32_t], [ac_cv_header_stdint_u],[ - ac_cv_header_stdint_u="" # the BSD typedefs (sys/types.h) - AC_MSG_RESULT([(..)]) - for i in m4_ifval([$1],[$1],[sys/types.h inttypes.h sys/inttypes.h]) ; do - unset ac_cv_type_u_int32_t - unset ac_cv_type_u_int64_t - AC_CHECK_TYPE(u_int32_t,[ac_cv_header_stdint_u=$i],continue,[#include <$i>]) - AC_CHECK_TYPE(u_int64_t,[and64="/u_int64_t"],[and64=""],[#include<$i>]) - m4_ifvaln([$2],[$2]) break - break; - done - AC_MSG_CHECKING([for stdint u_int32_t]) - ]) -]) - -AC_DEFUN([AX_CREATE_STDINT_H], -[# ------ AX CREATE STDINT H ------------------------------------- -AC_MSG_CHECKING([for stdint types]) -ac_stdint_h=`echo ifelse($1, , _stdint.h, $1)` -# try to shortcircuit - if the default include path of the compiler -# can find a "stdint.h" header then we assume that all compilers can. -AC_CACHE_VAL([ac_cv_header_stdint_t],[ -old_CXXFLAGS="$CXXFLAGS" ; CXXFLAGS="" -old_CPPFLAGS="$CPPFLAGS" ; CPPFLAGS="" -old_CFLAGS="$CFLAGS" ; CFLAGS="" -AC_TRY_COMPILE([#include ],[int_least32_t v = 0;], -[ac_cv_stdint_result="(assuming C99 compatible system)" - ac_cv_header_stdint_t="stdint.h"; ], -[ac_cv_header_stdint_t=""]) -if test "$GCC" = "yes" && test ".$ac_cv_header_stdint_t" = "."; then -CFLAGS="-std=c99" -AC_TRY_COMPILE([#include ],[int_least32_t v = 0;], -[AC_MSG_WARN(your GCC compiler has a defunct stdint.h for its default-mode)]) -fi -CXXFLAGS="$old_CXXFLAGS" -CPPFLAGS="$old_CPPFLAGS" -CFLAGS="$old_CFLAGS" ]) - -v="... $ac_cv_header_stdint_h" -if test "$ac_stdint_h" = "stdint.h" ; then - AC_MSG_RESULT([(are you sure you want them in ./stdint.h?)]) -elif test "$ac_stdint_h" = "inttypes.h" ; then - AC_MSG_RESULT([(are you sure you want them in ./inttypes.h?)]) -elif test "_$ac_cv_header_stdint_t" = "_" ; then - AC_MSG_RESULT([(putting them into $ac_stdint_h)$v]) -else - ac_cv_header_stdint="$ac_cv_header_stdint_t" - AC_MSG_RESULT([$ac_cv_header_stdint (shortcircuit)]) -fi - -if test "_$ac_cv_header_stdint_t" = "_" ; then # can not shortcircuit.. - -dnl .....intro message done, now do a few system checks..... -dnl btw, all old CHECK_TYPE macros do automatically "DEFINE" a type, -dnl therefore we use the autoconf implementation detail CHECK_TYPE_NEW -dnl instead that is triggered with 3 or more arguments (see types.m4) - -inttype_headers=`echo $2 | sed -e 's/,/ /g'` - -ac_cv_stdint_result="(no helpful system typedefs seen)" -AX_CHECK_HEADER_STDINT_X(dnl - stdint.h inttypes.h sys/inttypes.h $inttype_headers, - ac_cv_stdint_result="(seen uintptr_t$and64 in $i)") - -if test "_$ac_cv_header_stdint_x" = "_" ; then -AX_CHECK_HEADER_STDINT_O(dnl, - inttypes.h sys/inttypes.h stdint.h $inttype_headers, - ac_cv_stdint_result="(seen uint32_t$and64 in $i)") -fi - -if test "_$ac_cv_header_stdint_x" = "_" ; then -if test "_$ac_cv_header_stdint_o" = "_" ; then -AX_CHECK_HEADER_STDINT_U(dnl, - sys/types.h inttypes.h sys/inttypes.h $inttype_headers, - ac_cv_stdint_result="(seen u_int32_t$and64 in $i)") -fi fi - -dnl if there was no good C99 header file, do some typedef checks... -if test "_$ac_cv_header_stdint_x" = "_" ; then - AC_MSG_CHECKING([for stdint datatype model]) - AC_MSG_RESULT([(..)]) - AX_CHECK_DATA_MODEL -fi - -if test "_$ac_cv_header_stdint_x" != "_" ; then - ac_cv_header_stdint="$ac_cv_header_stdint_x" -elif test "_$ac_cv_header_stdint_o" != "_" ; then - ac_cv_header_stdint="$ac_cv_header_stdint_o" -elif test "_$ac_cv_header_stdint_u" != "_" ; then - ac_cv_header_stdint="$ac_cv_header_stdint_u" -else - ac_cv_header_stdint="stddef.h" -fi - -AC_MSG_CHECKING([for extra inttypes in chosen header]) -AC_MSG_RESULT([($ac_cv_header_stdint)]) -dnl see if int_least and int_fast types are present in _this_ header. -unset ac_cv_type_int_least32_t -unset ac_cv_type_int_fast32_t -AC_CHECK_TYPE(int_least32_t,,,[#include <$ac_cv_header_stdint>]) -AC_CHECK_TYPE(int_fast32_t,,,[#include<$ac_cv_header_stdint>]) -AC_CHECK_TYPE(intmax_t,,,[#include <$ac_cv_header_stdint>]) - -fi # shortcircut to system "stdint.h" -# ------------------ PREPARE VARIABLES ------------------------------ -if test "$GCC" = "yes" ; then -ac_cv_stdint_message="using gnu compiler "`$CC --version | head -1` -else -ac_cv_stdint_message="using $CC" -fi - -AC_MSG_RESULT([make use of $ac_cv_header_stdint in $ac_stdint_h dnl -$ac_cv_stdint_result]) - -dnl ----------------------------------------------------------------- -# ----------------- DONE inttypes.h checks START header ------------- -AC_CONFIG_COMMANDS([$ac_stdint_h],[ -AC_MSG_NOTICE(creating $ac_stdint_h : $_ac_stdint_h) -ac_stdint=$tmp/_stdint.h - -echo "#ifndef" $_ac_stdint_h >$ac_stdint -echo "#define" $_ac_stdint_h "1" >>$ac_stdint -echo "#ifndef" _GENERATED_STDINT_H >>$ac_stdint -echo "#define" _GENERATED_STDINT_H '"'$PACKAGE $VERSION'"' >>$ac_stdint -echo "/* generated $ac_cv_stdint_message */" >>$ac_stdint -if test "_$ac_cv_header_stdint_t" != "_" ; then -echo "#define _STDINT_HAVE_STDINT_H" "1" >>$ac_stdint -echo "#include " >>$ac_stdint -echo "#endif" >>$ac_stdint -echo "#endif" >>$ac_stdint -else - -cat >>$ac_stdint < -#else -#include - -/* .................... configured part ............................ */ - -STDINT_EOF - -echo "/* whether we have a C99 compatible stdint header file */" >>$ac_stdint -if test "_$ac_cv_header_stdint_x" != "_" ; then - ac_header="$ac_cv_header_stdint_x" - echo "#define _STDINT_HEADER_INTPTR" '"'"$ac_header"'"' >>$ac_stdint -else - echo "/* #undef _STDINT_HEADER_INTPTR */" >>$ac_stdint -fi - -echo "/* whether we have a C96 compatible inttypes header file */" >>$ac_stdint -if test "_$ac_cv_header_stdint_o" != "_" ; then - ac_header="$ac_cv_header_stdint_o" - echo "#define _STDINT_HEADER_UINT32" '"'"$ac_header"'"' >>$ac_stdint -else - echo "/* #undef _STDINT_HEADER_UINT32 */" >>$ac_stdint -fi - -echo "/* whether we have a BSD compatible inet types header */" >>$ac_stdint -if test "_$ac_cv_header_stdint_u" != "_" ; then - ac_header="$ac_cv_header_stdint_u" - echo "#define _STDINT_HEADER_U_INT32" '"'"$ac_header"'"' >>$ac_stdint -else - echo "/* #undef _STDINT_HEADER_U_INT32 */" >>$ac_stdint -fi - -echo "" >>$ac_stdint - -if test "_$ac_header" != "_" ; then if test "$ac_header" != "stddef.h" ; then - echo "#include <$ac_header>" >>$ac_stdint - echo "" >>$ac_stdint -fi fi - -echo "/* which 64bit typedef has been found */" >>$ac_stdint -if test "$ac_cv_type_uint64_t" = "yes" ; then -echo "#define _STDINT_HAVE_UINT64_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_UINT64_T */" >>$ac_stdint -fi -if test "$ac_cv_type_u_int64_t" = "yes" ; then -echo "#define _STDINT_HAVE_U_INT64_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_U_INT64_T */" >>$ac_stdint -fi -echo "" >>$ac_stdint - -echo "/* which type model has been detected */" >>$ac_stdint -if test "_$ac_cv_char_data_model" != "_" ; then -echo "#define _STDINT_CHAR_MODEL" "$ac_cv_char_data_model" >>$ac_stdint -echo "#define _STDINT_LONG_MODEL" "$ac_cv_long_data_model" >>$ac_stdint -else -echo "/* #undef _STDINT_CHAR_MODEL // skipped */" >>$ac_stdint -echo "/* #undef _STDINT_LONG_MODEL // skipped */" >>$ac_stdint -fi -echo "" >>$ac_stdint - -echo "/* whether int_least types were detected */" >>$ac_stdint -if test "$ac_cv_type_int_least32_t" = "yes"; then -echo "#define _STDINT_HAVE_INT_LEAST32_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_INT_LEAST32_T */" >>$ac_stdint -fi -echo "/* whether int_fast types were detected */" >>$ac_stdint -if test "$ac_cv_type_int_fast32_t" = "yes"; then -echo "#define _STDINT_HAVE_INT_FAST32_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_INT_FAST32_T */" >>$ac_stdint -fi -echo "/* whether intmax_t type was detected */" >>$ac_stdint -if test "$ac_cv_type_intmax_t" = "yes"; then -echo "#define _STDINT_HAVE_INTMAX_T" "1" >>$ac_stdint -else -echo "/* #undef _STDINT_HAVE_INTMAX_T */" >>$ac_stdint -fi -echo "" >>$ac_stdint - - cat >>$ac_stdint <= 199901L -#define _HAVE_UINT64_T -#define _HAVE_LONGLONG_UINT64_T -typedef long long int64_t; -typedef unsigned long long uint64_t; - -#elif !defined __STRICT_ANSI__ -#if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__ -#define _HAVE_UINT64_T -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; - -#elif defined __GNUC__ || defined __MWERKS__ || defined __ELF__ -/* note: all ELF-systems seem to have loff-support which needs 64-bit */ -#if !defined _NO_LONGLONG -#define _HAVE_UINT64_T -#define _HAVE_LONGLONG_UINT64_T -typedef long long int64_t; -typedef unsigned long long uint64_t; -#endif - -#elif defined __alpha || (defined __mips && defined _ABIN32) -#if !defined _NO_LONGLONG -typedef long int64_t; -typedef unsigned long uint64_t; -#endif - /* compiler/cpu type to define int64_t */ -#endif -#endif -#endif - -#if defined _STDINT_HAVE_U_INT_TYPES -/* int8_t int16_t int32_t defined by inet code, redeclare the u_intXX types */ -typedef u_int8_t uint8_t; -typedef u_int16_t uint16_t; -typedef u_int32_t uint32_t; - -/* glibc compatibility */ -#ifndef __int8_t_defined -#define __int8_t_defined -#endif -#endif - -#ifdef _STDINT_NEED_INT_MODEL_T -/* we must guess all the basic types. Apart from byte-adressable system, */ -/* there a few 32-bit-only dsp-systems that we guard with BYTE_MODEL 8-} */ -/* (btw, those nibble-addressable systems are way off, or so we assume) */ - -dnl /* have a look at "64bit and data size neutrality" at */ -dnl /* http://unix.org/version2/whatsnew/login_64bit.html */ -dnl /* (the shorthand "ILP" types always have a "P" part) */ - -#if defined _STDINT_BYTE_MODEL -#if _STDINT_LONG_MODEL+0 == 242 -/* 2:4:2 = IP16 = a normal 16-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned long uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef long int32_t; -#endif -#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL == 444 -/* 2:4:4 = LP32 = a 32-bit system derived from a 16-bit */ -/* 4:4:4 = ILP32 = a normal 32-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef int int32_t; -#endif -#elif _STDINT_LONG_MODEL+0 == 484 || _STDINT_LONG_MODEL+0 == 488 -/* 4:8:4 = IP32 = a 32-bit system prepared for 64-bit */ -/* 4:8:8 = LP64 = a normal 64-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef int int32_t; -#endif -/* this system has a "long" of 64bit */ -#ifndef _HAVE_UINT64_T -#define _HAVE_UINT64_T -typedef unsigned long uint64_t; -typedef long int64_t; -#endif -#elif _STDINT_LONG_MODEL+0 == 448 -/* LLP64 a 64-bit system derived from a 32-bit system */ -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -#ifndef __int8_t_defined -#define __int8_t_defined -typedef char int8_t; -typedef short int16_t; -typedef int int32_t; -#endif -/* assuming the system has a "long long" */ -#ifndef _HAVE_UINT64_T -#define _HAVE_UINT64_T -#define _HAVE_LONGLONG_UINT64_T -typedef unsigned long long uint64_t; -typedef long long int64_t; -#endif -#else -#define _STDINT_NO_INT32_T -#endif -#else -#define _STDINT_NO_INT8_T -#define _STDINT_NO_INT32_T -#endif -#endif - -/* - * quote from SunOS-5.8 sys/inttypes.h: - * Use at your own risk. As of February 1996, the committee is squarely - * behind the fixed sized types; the "least" and "fast" types are still being - * discussed. The probability that the "fast" types may be removed before - * the standard is finalized is high enough that they are not currently - * implemented. - */ - -#if defined _STDINT_NEED_INT_LEAST_T -typedef int8_t int_least8_t; -typedef int16_t int_least16_t; -typedef int32_t int_least32_t; -#ifdef _HAVE_UINT64_T -typedef int64_t int_least64_t; -#endif - -typedef uint8_t uint_least8_t; -typedef uint16_t uint_least16_t; -typedef uint32_t uint_least32_t; -#ifdef _HAVE_UINT64_T -typedef uint64_t uint_least64_t; -#endif - /* least types */ -#endif - -#if defined _STDINT_NEED_INT_FAST_T -typedef int8_t int_fast8_t; -typedef int int_fast16_t; -typedef int32_t int_fast32_t; -#ifdef _HAVE_UINT64_T -typedef int64_t int_fast64_t; -#endif - -typedef uint8_t uint_fast8_t; -typedef unsigned uint_fast16_t; -typedef uint32_t uint_fast32_t; -#ifdef _HAVE_UINT64_T -typedef uint64_t uint_fast64_t; -#endif - /* fast types */ -#endif - -#ifdef _STDINT_NEED_INTMAX_T -#ifdef _HAVE_UINT64_T -typedef int64_t intmax_t; -typedef uint64_t uintmax_t; -#else -typedef long intmax_t; -typedef unsigned long uintmax_t; -#endif -#endif - -#ifdef _STDINT_NEED_INTPTR_T -#ifndef __intptr_t_defined -#define __intptr_t_defined -/* we encourage using "long" to store pointer values, never use "int" ! */ -#if _STDINT_LONG_MODEL+0 == 242 || _STDINT_LONG_MODEL+0 == 484 -typedef unsigned int uintptr_t; -typedef int intptr_t; -#elif _STDINT_LONG_MODEL+0 == 244 || _STDINT_LONG_MODEL+0 == 444 -typedef unsigned long uintptr_t; -typedef long intptr_t; -#elif _STDINT_LONG_MODEL+0 == 448 && defined _HAVE_UINT64_T -typedef uint64_t uintptr_t; -typedef int64_t intptr_t; -#else /* matches typical system types ILP32 and LP64 - but not IP16 or LLP64 */ -typedef unsigned long uintptr_t; -typedef long intptr_t; -#endif -#endif -#endif - -/* The ISO C99 standard specifies that in C++ implementations these - should only be defined if explicitly requested. */ -#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS -#ifndef UINT32_C - -/* Signed. */ -# define INT8_C(c) c -# define INT16_C(c) c -# define INT32_C(c) c -# ifdef _HAVE_LONGLONG_UINT64_T -# define INT64_C(c) c ## L -# else -# define INT64_C(c) c ## LL -# endif - -/* Unsigned. */ -# define UINT8_C(c) c ## U -# define UINT16_C(c) c ## U -# define UINT32_C(c) c ## U -# ifdef _HAVE_LONGLONG_UINT64_T -# define UINT64_C(c) c ## UL -# else -# define UINT64_C(c) c ## ULL -# endif - -/* Maximal type. */ -# ifdef _HAVE_LONGLONG_UINT64_T -# define INTMAX_C(c) c ## L -# define UINTMAX_C(c) c ## UL -# else -# define INTMAX_C(c) c ## LL -# define UINTMAX_C(c) c ## ULL -# endif - - /* literalnumbers */ -#endif -#endif - -/* These limits are merily those of a two complement byte-oriented system */ - -/* Minimum of signed integral types. */ -# define INT8_MIN (-128) -# define INT16_MIN (-32767-1) -# define INT32_MIN (-2147483647-1) -#ifndef INT64_MIN -# define INT64_MIN (-__INT64_C(9223372036854775807)-1) -#endif -/* Maximum of signed integral types. */ -# define INT8_MAX (127) -# define INT16_MAX (32767) -# define INT32_MAX (2147483647) -#ifndef INT64_MAX -# define INT64_MAX (__INT64_C(9223372036854775807)) -#endif - -/* Maximum of unsigned integral types. */ -#ifndef UINT8_MAX -# define UINT8_MAX (255) -#endif -#ifndef UINT16_MAX -# define UINT16_MAX (65535) -#endif -# define UINT32_MAX (4294967295U) -#ifndef UINT64_MAX -# define UINT64_MAX (__UINT64_C(18446744073709551615)) -#endif - -/* Minimum of signed integral types having a minimum size. */ -# define INT_LEAST8_MIN INT8_MIN -# define INT_LEAST16_MIN INT16_MIN -# define INT_LEAST32_MIN INT32_MIN -# define INT_LEAST64_MIN INT64_MIN -/* Maximum of signed integral types having a minimum size. */ -# define INT_LEAST8_MAX INT8_MAX -# define INT_LEAST16_MAX INT16_MAX -# define INT_LEAST32_MAX INT32_MAX -# define INT_LEAST64_MAX INT64_MAX - -/* Maximum of unsigned integral types having a minimum size. */ -# define UINT_LEAST8_MAX UINT8_MAX -# define UINT_LEAST16_MAX UINT16_MAX -# define UINT_LEAST32_MAX UINT32_MAX -# define UINT_LEAST64_MAX UINT64_MAX - - /* shortcircuit*/ -#endif - /* once */ -#endif -#endif -STDINT_EOF -fi - if cmp -s $ac_stdint_h $ac_stdint 2>/dev/null; then - AC_MSG_NOTICE([$ac_stdint_h is unchanged]) - else - ac_dir=`AS_DIRNAME(["$ac_stdint_h"])` - AS_MKDIR_P(["$ac_dir"]) - rm -f $ac_stdint_h - mv $ac_stdint $ac_stdint_h - fi -],[# variables for create stdint.h replacement -PACKAGE="$PACKAGE" -VERSION="$VERSION" -ac_stdint_h="$ac_stdint_h" -_ac_stdint_h=AS_TR_CPP(_$PACKAGE-$ac_stdint_h) -ac_cv_stdint_message="$ac_cv_stdint_message" -ac_cv_header_stdint_t="$ac_cv_header_stdint_t" -ac_cv_header_stdint_x="$ac_cv_header_stdint_x" -ac_cv_header_stdint_o="$ac_cv_header_stdint_o" -ac_cv_header_stdint_u="$ac_cv_header_stdint_u" -ac_cv_type_uint64_t="$ac_cv_type_uint64_t" -ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t" -ac_cv_char_data_model="$ac_cv_char_data_model" -ac_cv_long_data_model="$ac_cv_long_data_model" -ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t" -ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t" -ac_cv_type_intmax_t="$ac_cv_type_intmax_t" -]) -]) diff --git a/cloog-0.17.0/isl/m4/ax_detect_git_head.m4 b/cloog-0.17.0/isl/m4/ax_detect_git_head.m4 deleted file mode 100644 index d585983..0000000 --- a/cloog-0.17.0/isl/m4/ax_detect_git_head.m4 +++ /dev/null @@ -1,27 +0,0 @@ -AC_DEFUN([AX_DETECT_GIT_HEAD], [ - AC_SUBST(GIT_HEAD_ID) - AC_SUBST(GIT_HEAD) - AC_SUBST(GIT_HEAD_VERSION) - if test -f $srcdir/.git/HEAD; then - GIT_HEAD="$srcdir/.git/index" - GIT_REPO="$srcdir/.git" - GIT_HEAD_ID=`GIT_DIR=$GIT_REPO git describe` - elif test -f $srcdir/GIT_HEAD_ID; then - GIT_HEAD_ID=`cat $srcdir/GIT_HEAD_ID` - else - mysrcdir=`(cd $srcdir; pwd)` - head=`basename $mysrcdir | sed -e 's/.*-//'` - head2=`echo $head | sed -e 's/[^0-9a-f]//'` - head3=`echo $head2 | sed -e 's/........................................//'` - if test "x$head3" = "x" -a "x$head" = "x$head2"; then - GIT_HEAD_ID="$head" - else - GIT_HEAD_ID="UNKNOWN" - fi - fi - if test -z "$GIT_REPO" ; then - GIT_HEAD_VERSION="$GIT_HEAD_ID" - else - GIT_HEAD_VERSION="\`GIT_DIR=$GIT_REPO git describe\`" - fi -]) diff --git a/cloog-0.17.0/isl/m4/ax_gcc_archflag.m4 b/cloog-0.17.0/isl/m4/ax_gcc_archflag.m4 deleted file mode 100644 index dedeef4..0000000 --- a/cloog-0.17.0/isl/m4/ax_gcc_archflag.m4 +++ /dev/null @@ -1,213 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_gcc_archflag.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_GCC_ARCHFLAG([PORTABLE?], [ACTION-SUCCESS], [ACTION-FAILURE]) -# -# DESCRIPTION -# -# This macro tries to guess the "native" arch corresponding to the target -# architecture for use with gcc's -march=arch or -mtune=arch flags. If -# found, the cache variable $ax_cv_gcc_archflag is set to this flag and -# ACTION-SUCCESS is executed; otherwise $ax_cv_gcc_archflag is is set to -# "unknown" and ACTION-FAILURE is executed. The default ACTION-SUCCESS is -# to add $ax_cv_gcc_archflag to the end of $CFLAGS. -# -# PORTABLE? should be either [yes] (default) or [no]. In the former case, -# the flag is set to -mtune (or equivalent) so that the architecture is -# only used for tuning, but the instruction set used is still portable. In -# the latter case, the flag is set to -march (or equivalent) so that -# architecture-specific instructions are enabled. -# -# The user can specify --with-gcc-arch= in order to override the -# macro's choice of architecture, or --without-gcc-arch to disable this. -# -# When cross-compiling, or if $CC is not gcc, then ACTION-FAILURE is -# called unless the user specified --with-gcc-arch manually. -# -# Requires macros: AX_CHECK_COMPILER_FLAGS, AX_GCC_X86_CPUID -# -# (The main emphasis here is on recent CPUs, on the principle that doing -# high-performance computing on old hardware is uncommon.) -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_GCC_ARCHFLAG], -[AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AC_CANONICAL_HOST]) - -AC_ARG_WITH(gcc-arch, [AC_HELP_STRING([--with-gcc-arch=], [use architecture for gcc -march/-mtune, instead of guessing])], - ax_gcc_arch=$withval, ax_gcc_arch=yes) - -AC_MSG_CHECKING([for gcc architecture flag]) -AC_MSG_RESULT([]) -AC_CACHE_VAL(ax_cv_gcc_archflag, -[ -ax_cv_gcc_archflag="unknown" - -if test "$GCC" = yes; then - -if test "x$ax_gcc_arch" = xyes; then -ax_gcc_arch="" -if test "$cross_compiling" = no; then -case $host_cpu in - i[[3456]]86*|x86_64*) # use cpuid codes, in part from x86info-1.7 by D. Jones - AX_GCC_X86_CPUID(0) - AX_GCC_X86_CPUID(1) - case $ax_cv_gcc_x86_cpuid_0 in - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *5[[48]]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; - *5??:*:*:*) ax_gcc_arch=pentium ;; - *6[[3456]]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[[01]]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[[234]]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6[[9d]]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; - *6[[78b]]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6??:*:*:*) ax_gcc_arch=pentiumpro ;; - *f3[[347]]:*:*:*|*f4[1347]:*:*:*) - case $host_cpu in - x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; - *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; - esac ;; - *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; - esac ;; - *:68747541:*:*) # AMD - case $ax_cv_gcc_x86_cpuid_1 in - *5[[67]]?:*:*:*) ax_gcc_arch=k6 ;; - *5[[8d]]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; - *5[[9]]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; - *60?:*:*:*) ax_gcc_arch=k7 ;; - *6[[12]]?:*:*:*) ax_gcc_arch="athlon k7" ;; - *6[[34]]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; - *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; - *6[[68a]]?:*:*:*) - AX_GCC_X86_CPUID(0x80000006) # L2 cache size - case $ax_cv_gcc_x86_cpuid_0x80000006 in - *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256 - ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; - *) ax_gcc_arch="athlon-4 athlon k7" ;; - esac ;; - *f[[4cef8b]]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; - *f5?:*:*:*) ax_gcc_arch="opteron k8" ;; - *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; - *f??:*:*:*) ax_gcc_arch="k8" ;; - esac ;; - *:746e6543:*:*) # IDT - case $ax_cv_gcc_x86_cpuid_1 in - *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; - *58?:*:*:*) ax_gcc_arch=winchip2 ;; - *6[[78]]?:*:*:*) ax_gcc_arch=c3 ;; - *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; - esac ;; - esac - if test x"$ax_gcc_arch" = x; then # fallback - case $host_cpu in - i586*) ax_gcc_arch=pentium ;; - i686*) ax_gcc_arch=pentiumpro ;; - esac - fi - ;; - - sparc*) - AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag], [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/]) - cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` - cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters` - case $cputype in - *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; - *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; - *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; - *supersparc*|*tms390z5[[05]]*) ax_gcc_arch="supersparc v8" ;; - *hypersparc*|*rt62[[056]]*) ax_gcc_arch="hypersparc v8" ;; - *cypress*) ax_gcc_arch=cypress ;; - esac ;; - - alphaev5) ax_gcc_arch=ev5 ;; - alphaev56) ax_gcc_arch=ev56 ;; - alphapca56) ax_gcc_arch="pca56 ev56" ;; - alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; - alphaev6) ax_gcc_arch=ev6 ;; - alphaev67) ax_gcc_arch=ev67 ;; - alphaev68) ax_gcc_arch="ev68 ev67" ;; - alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; - alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; - alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; - - powerpc*) - cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` - cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'` - case $cputype in - *750*) ax_gcc_arch="750 G3" ;; - *740[[0-9]]*) ax_gcc_arch="$cputype 7400 G4" ;; - *74[[4-5]][[0-9]]*) ax_gcc_arch="$cputype 7450 G4" ;; - *74[[0-9]][[0-9]]*) ax_gcc_arch="$cputype G4" ;; - *970*) ax_gcc_arch="970 G5 power4";; - *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; - *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; - 603ev|8240) ax_gcc_arch="$cputype 603e 603";; - *) ax_gcc_arch=$cputype ;; - esac - ax_gcc_arch="$ax_gcc_arch powerpc" - ;; -esac -fi # not cross-compiling -fi # guess arch - -if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then -for arch in $ax_gcc_arch; do - if test "x[]m4_default([$1],yes)" = xyes; then # if we require portable code - flags="-mtune=$arch" - # -mcpu=$arch and m$arch generate nonportable code on every arch except - # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. - case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac - else - flags="-march=$arch -mcpu=$arch -m$arch" - fi - for flag in $flags; do - AX_CHECK_COMPILER_FLAGS($flag, [ax_cv_gcc_archflag=$flag; break]) - done - test "x$ax_cv_gcc_archflag" = xunknown || break -done -fi - -fi # $GCC=yes -]) -AC_MSG_CHECKING([for gcc architecture flag]) -AC_MSG_RESULT($ax_cv_gcc_archflag) -if test "x$ax_cv_gcc_archflag" = xunknown; then - m4_default([$3],:) -else - m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_gcc_archflag"]) -fi -]) diff --git a/cloog-0.17.0/isl/m4/ax_gcc_warn_unused_result.m4 b/cloog-0.17.0/isl/m4/ax_gcc_warn_unused_result.m4 deleted file mode 100644 index a957f8f..0000000 --- a/cloog-0.17.0/isl/m4/ax_gcc_warn_unused_result.m4 +++ /dev/null @@ -1,56 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_gcc_warn_unused_result.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_GCC_WARN_UNUSED_RESULT -# -# DESCRIPTION -# -# The macro will compile a test program to see whether the compiler does -# understand the per-function postfix pragma. -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_GCC_WARN_UNUSED_RESULT],[dnl -AC_CACHE_CHECK( - [whether the compiler supports function __attribute__((__warn_unused_result__))], - ax_cv_gcc_warn_unused_result,[ - AC_TRY_COMPILE([__attribute__((__warn_unused_result__)) - int f(int i) { return i; }], - [], - ax_cv_gcc_warn_unused_result=yes, ax_cv_gcc_warn_unused_result=no)]) - if test "$ax_cv_gcc_warn_unused_result" = yes; then - AC_DEFINE([GCC_WARN_UNUSED_RESULT],[__attribute__((__warn_unused_result__))], - [most gcc compilers know a function __attribute__((__warn_unused_result__))]) - fi -]) diff --git a/cloog-0.17.0/isl/m4/ax_gcc_x86_cpuid.m4 b/cloog-0.17.0/isl/m4/ax_gcc_x86_cpuid.m4 deleted file mode 100644 index 5420b09..0000000 --- a/cloog-0.17.0/isl/m4/ax_gcc_x86_cpuid.m4 +++ /dev/null @@ -1,77 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_gcc_x86_cpuid.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_GCC_X86_CPUID(OP) -# -# DESCRIPTION -# -# On Pentium and later x86 processors, with gcc or a compiler that has a -# compatible syntax for inline assembly instructions, run a small program -# that executes the cpuid instruction with input OP. This can be used to -# detect the CPU type. -# -# On output, the values of the eax, ebx, ecx, and edx registers are stored -# as hexadecimal strings as "eax:ebx:ecx:edx" in the cache variable -# ax_cv_gcc_x86_cpuid_OP. -# -# If the cpuid instruction fails (because you are running a -# cross-compiler, or because you are not using gcc, or because you are on -# a processor that doesn't have this instruction), ax_cv_gcc_x86_cpuid_OP -# is set to the string "unknown". -# -# This macro mainly exists to be used in AX_GCC_ARCHFLAG. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_GCC_X86_CPUID], -[AC_REQUIRE([AC_PROG_CC]) -AC_LANG_PUSH([C]) -AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1, - [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], [ - int op = $1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; -])], - [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid], - [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid], - [ax_cv_gcc_x86_cpuid_$1=unknown])]) -AC_LANG_POP([C]) -]) diff --git a/cloog-0.17.0/isl/m4/ax_set_warning_flags.m4 b/cloog-0.17.0/isl/m4/ax_set_warning_flags.m4 deleted file mode 100644 index c64ad7d..0000000 --- a/cloog-0.17.0/isl/m4/ax_set_warning_flags.m4 +++ /dev/null @@ -1,17 +0,0 @@ -dnl Add a set of flags to WARNING_FLAGS, that enable compiler warnings for -dnl isl. The warnings that are enabled vary with the compiler and only include -dnl warnings that did not trigger at the time of adding these flags. -AC_DEFUN([AX_SET_WARNING_FLAGS],[dnl - AX_COMPILER_VENDOR - - WARNING_FLAGS="" - - if test "${ax_cv_c_compiler_vendor}" = "clang"; then - dnl isl is at the moment clean of -Wall warnings. If clang adds - dnl new warnings to -Wall which cause false positives, the - dnl specific warning types will be disabled explicitally (by - dnl adding for example -Wno-return-type). To temporarily disable - dnl all warnings run configure with CFLAGS=-Wno-all. - WARNING_FLAGS="-Wall" - fi -]) diff --git a/cloog-0.17.0/isl/m4/ax_submodule.m4 b/cloog-0.17.0/isl/m4/ax_submodule.m4 deleted file mode 100644 index 7cf8995..0000000 --- a/cloog-0.17.0/isl/m4/ax_submodule.m4 +++ /dev/null @@ -1,71 +0,0 @@ -AC_DEFUN([AX_SUBMODULE], -[ - -m4_if(m4_bregexp($2,|,choice),choice, - [AC_ARG_WITH($1, - [AS_HELP_STRING([--with-$1=$2], - [Which $1 to use [default=$3]])])]) -case "system" in -$2) - AC_ARG_WITH($1_prefix, - [AS_HELP_STRING([--with-$1-prefix=DIR], - [Prefix of $1 installation])]) - AC_ARG_WITH($1_exec_prefix, - [AS_HELP_STRING([--with-$1-exec-prefix=DIR], - [Exec prefix of $1 installation])]) -esac -m4_if(m4_bregexp($2,build,build),build, - [AC_ARG_WITH($1_builddir, - [AS_HELP_STRING([--with-$1-builddir=DIR], - [Location of $1 builddir])])]) -if test "x$with_$1_prefix" != "x" -a "x$with_$1_exec_prefix" = "x"; then - with_$1_exec_prefix=$with_$1_prefix -fi -if test "x$with_$1_prefix" != "x" -o "x$with_$1_exec_prefix" != "x"; then - if test "x$with_$1" != "x" -a "x$with_$1" != "xyes" -a "x$with_$1" != "xsystem"; then - AC_MSG_ERROR([Setting $with_$1_prefix implies use of system $1]) - fi - with_$1="system" -fi -if test "x$with_$1_builddir" != "x"; then - if test "x$with_$1" != "x" -a "x$with_$1" != "xyes" -a "x$with_$1" != "xbuild"; then - AC_MSG_ERROR([Setting $with_$1_builddir implies use of build $1]) - fi - with_$1="build" - $1_srcdir=`echo @abs_srcdir@ | $with_$1_builddir/config.status --file=-` - AC_MSG_NOTICE($1 sources in $$1_srcdir) -fi -if test "x$with_$1_exec_prefix" != "x"; then - export PKG_CONFIG_PATH="$with_$1_exec_prefix/lib/pkgconfig${PKG_CONFIG_PATH+:$PKG_CONFIG_PATH}" -fi -case "$with_$1" in -$2) - ;; -*) - case "$3" in - bundled) - if test -d $srcdir/.git -a \ - -d $srcdir/$1 -a \ - ! -d $srcdir/$1/.git; then - AC_MSG_WARN([git repo detected, but submodule $1 not initialized]) - AC_MSG_WARN([You may want to run]) - AC_MSG_WARN([ git submodule init]) - AC_MSG_WARN([ git submodule update]) - AC_MSG_WARN([ sh autogen.sh]) - fi - if test -f $srcdir/$1/configure; then - with_$1="bundled" - else - with_$1="no" - fi - ;; - *) - with_$1="$3" - ;; - esac - ;; -esac -AC_MSG_CHECKING([which $1 to use]) -AC_MSG_RESULT($with_$1) - -]) diff --git a/cloog-0.17.0/isl/m4/libtool.m4 b/cloog-0.17.0/isl/m4/libtool.m4 deleted file mode 100644 index a3fee53..0000000 --- a/cloog-0.17.0/isl/m4/libtool.m4 +++ /dev/null @@ -1,7377 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -]) - -# serial 56 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl -_LT_PROG_ECHO_BACKSLASH - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from `configure', and `config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" -])# _LT_PROG_LTMAIN - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case \$lt_ECHO in -*'\\\[$]0 --fallback-echo"')dnl " - lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` - ;; -esac - -_LT_OUTPUT_LIBTOOL_INIT -]) - - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -cat >"$CONFIG_LT" <<_LTEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate a libtool stub with the current configuration. - -lt_cl_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AS_SHELL_SANITIZE -_AS_PREPARE - -exec AS_MESSAGE_FD>&1 -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to ." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2008 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -if test "$no_create" != yes; then - lt_cl_success=: - test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" - exec AS_MESSAGE_LOG_FD>/dev/null - $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false - exec AS_MESSAGE_LOG_FD>>config.log - $lt_cl_success || AS_EXIT(1) -fi -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -_LT_COPYING -_LT_LIBTOOL_TAGS - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_XSI_SHELLFNS - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES -# -------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX -# ----------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[ifdef([AC_DIVERSION_NOTICE], - [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], - [AC_DIVERT_PUSH(NOTICE)]) -$1 -AC_DIVERT_POP -])# _LT_SHELL_INIT - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[_LT_SHELL_INIT([ -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$lt_ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` - ;; -esac - -ECHO=${lt_ECHO-echo} -if test "X[$]1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X[$]1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell. - exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} -fi - -if test "X[$]1" = X--fallback-echo; then - # used as fallback echo - shift - cat <<_LT_EOF -[$]* -_LT_EOF - exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$lt_ECHO"; then - if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if { echo_test_string=`eval $cmd`; } 2>/dev/null && - { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null - then - break - fi - done - fi - - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : - else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$ECHO" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - ECHO='print -r' - elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} - else - # Try using printf. - ECHO='printf %s\n' - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - ECHO="$CONFIG_SHELL [$]0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$CONFIG_SHELL [$]0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do - if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "[$]0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} - else - # Oops. We lost completely, so just stick with echo. - ECHO=echo - fi - fi - fi - fi - fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -lt_ECHO=$ECHO -if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then - lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" -fi - -AC_SUBST(lt_ECHO) -]) -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], - [An echo program that does not interpret backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" -])# _LT_ENABLE_LOCK - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[AC_CHECK_TOOL(AR, ar, false) -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1]) - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line __oline__ "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[[3-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program which can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program which can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method == "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC*) - # IBM XL 8.0 on PPC - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl*) - # IBM XL C 8.0/Fortran 10.1 on PPC - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac -AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - ;; - linux* | k*bsd*-gnu) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - _LT_TAGVAR(link_all_deplibs, $1)=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE(int foo(void) {}, - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - ) - LDFLAGS="$save_LDFLAGS" - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_MSG_CHECKING([whether -lc should be explicitly linked in]) - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], - [[If ld is used when linking, flag to hardcode $libdir into a binary - during linking. This must work even if $libdir does not exist]]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [fix_srcfile_path], [1], - [Fix the shell variable $srcfile for the compiler]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report which library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC="$lt_save_CC" -])# _LT_LANG_C_CONFIG - - -# _LT_PROG_CXX -# ------------ -# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ -# compiler, we have our own version here. -m4_defun([_LT_PROG_CXX], -[ -pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) -AC_PROG_CXX -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_CXX - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_CXX], []) - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[AC_REQUIRE([_LT_PROG_CXX])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - gnu*) - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 will use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - xl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=echo - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -]) -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_PROG_F77 -# ------------ -# Since AC_PROG_F77 is broken, in that it returns the empty string -# if there is no fortran compiler, we have our own version here. -m4_defun([_LT_PROG_F77], -[ -pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) -AC_PROG_F77 -if test -z "$F77" || test "X$F77" = "Xno"; then - _lt_disable_F77=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_F77 - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_F77], []) - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_REQUIRE([_LT_PROG_F77])dnl -AC_LANG_PUSH(Fortran 77) - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${F77-"f77"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_F77" != yes - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_PROG_FC -# ----------- -# Since AC_PROG_FC is broken, in that it returns the empty string -# if there is no fortran compiler, we have our own version here. -m4_defun([_LT_PROG_FC], -[ -pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) -AC_PROG_FC -if test -z "$FC" || test "X$FC" = "Xno"; then - _lt_disable_FC=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_FC - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_FC], []) - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_REQUIRE([_LT_PROG_FC])dnl -AC_LANG_PUSH(Fortran) - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${FC-"f95"} - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_FC" != yes - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC="$lt_save_CC" -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC="$lt_save_CC" -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PROG_XSI_SHELLFNS -# --------------------- -# Bourne and XSI compatible variants of some useful shell functions. -m4_defun([_LT_PROG_XSI_SHELLFNS], -[case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $[*] )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - -dnl func_dirname_and_basename -dnl A portable version of this function is already defined in general.m4sh -dnl so there is no need for it here. - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[[^=]]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$[@]"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]+=\$[2]" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]=\$$[1]\$[2]" -} - -_LT_EOF - ;; - esac -]) diff --git a/cloog-0.17.0/isl/m4/ltoptions.m4 b/cloog-0.17.0/isl/m4/ltoptions.m4 deleted file mode 100644 index 34151a3..0000000 --- a/cloog-0.17.0/isl/m4/ltoptions.m4 +++ /dev/null @@ -1,368 +0,0 @@ -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - ]) -])# _LT_SET_OPTIONS - - -## --------------------------------- ## -## Macros to handle LT_INIT options. ## -## --------------------------------- ## - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [0], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' -# LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/cloog-0.17.0/isl/m4/ltsugar.m4 b/cloog-0.17.0/isl/m4/ltsugar.m4 deleted file mode 100644 index 9000a05..0000000 --- a/cloog-0.17.0/isl/m4/ltsugar.m4 +++ /dev/null @@ -1,123 +0,0 @@ -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltsugar.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) - - -# lt_join(SEP, ARG1, [ARG2...]) -# ----------------------------- -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their -# associated separator. -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier -# versions in m4sugar had bugs. -m4_define([lt_join], -[m4_if([$#], [1], [], - [$#], [2], [[$2]], - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) -m4_define([_lt_join], -[m4_if([$#$2], [2], [], - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) - - -# lt_car(LIST) -# lt_cdr(LIST) -# ------------ -# Manipulate m4 lists. -# These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. -m4_define([lt_car], [[$1]]) -m4_define([lt_cdr], -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], - [$#], 1, [], - [m4_dquote(m4_shift($@))])]) -m4_define([lt_unquote], $1) - - -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) -# ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. -# Note that neither SEPARATOR nor STRING are expanded; they are appended -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). -# No SEPARATOR is output if MACRO-NAME was previously undefined (different -# than defined and empty). -# -# This macro is needed until we can rely on Autoconf 2.62, since earlier -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. -m4_define([lt_append], -[m4_define([$1], - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) - - - -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) -# ---------------------------------------------------------- -# Produce a SEP delimited list of all paired combinations of elements of -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list -# has the form PREFIXmINFIXSUFFIXn. -# Needed until we can rely on m4_combine added in Autoconf 2.62. -m4_define([lt_combine], -[m4_if(m4_eval([$# > 3]), [1], - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl -[[m4_foreach([_Lt_prefix], [$2], - [m4_foreach([_Lt_suffix], - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) - - -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) -# ----------------------------------------------------------------------- -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. -m4_define([lt_if_append_uniq], -[m4_ifdef([$1], - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], - [lt_append([$1], [$2], [$3])$4], - [$5])], - [lt_append([$1], [$2], [$3])$4])]) - - -# lt_dict_add(DICT, KEY, VALUE) -# ----------------------------- -m4_define([lt_dict_add], -[m4_define([$1($2)], [$3])]) - - -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) -# -------------------------------------------- -m4_define([lt_dict_add_subkey], -[m4_define([$1($2:$3)], [$4])]) - - -# lt_dict_fetch(DICT, KEY, [SUBKEY]) -# ---------------------------------- -m4_define([lt_dict_fetch], -[m4_ifval([$3], - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) - - -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) -# ----------------------------------------------------------------- -m4_define([lt_if_dict_fetch], -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], - [$5], - [$6])]) - - -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) -# -------------------------------------------------------------- -m4_define([lt_dict_filter], -[m4_if([$5], [], [], - [lt_join(m4_quote(m4_default([$4], [[, ]])), - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl -]) diff --git a/cloog-0.17.0/isl/m4/ltversion.m4 b/cloog-0.17.0/isl/m4/ltversion.m4 deleted file mode 100644 index f3c5309..0000000 --- a/cloog-0.17.0/isl/m4/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# Generated from ltversion.in. - -# serial 3017 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.2.6b]) -m4_define([LT_PACKAGE_REVISION], [1.3017]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.2.6b' -macro_revision='1.3017' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) diff --git a/cloog-0.17.0/isl/m4/lt~obsolete.m4 b/cloog-0.17.0/isl/m4/lt~obsolete.m4 deleted file mode 100644 index 637bb20..0000000 --- a/cloog-0.17.0/isl/m4/lt~obsolete.m4 +++ /dev/null @@ -1,92 +0,0 @@ -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004. -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 4 lt~obsolete.m4 - -# These exist entirely to fool aclocal when bootstrapping libtool. -# -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) -# which have later been changed to m4_define as they aren't part of the -# exported API, or moved to Autoconf or Automake where they belong. -# -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -# using a macro with the same name in our local m4/libtool.m4 it'll -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -# and doesn't know about Autoconf macros at all.) -# -# So we provide this file, which has a silly filename so it's always -# included after everything else. This provides aclocal with the -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -# because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -# -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -# Yes, that means every name once taken will need to remain here until -# we give up compatibility with versions before 1.7, at which point -# we need to keep only those names which we still refer to. - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) - -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) diff --git a/cloog-0.17.0/isl/missing b/cloog-0.17.0/isl/missing deleted file mode 100755 index 28055d2..0000000 --- a/cloog-0.17.0/isl/missing +++ /dev/null @@ -1,376 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2009-04-28.21; # UTC - -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, -# 2008, 2009 Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -run=: -sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' -sed_minuso='s/.* -o \([^ ]*\).*/\1/p' - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -msg="missing on your system" - -case $1 in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - autom4te touch the output file, or create a stub one - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch] - -Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and -\`g' are ignored when checking the name. - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - -esac - -# normalize program name to check for. -program=`echo "$1" | sed ' - s/^gnu-//; t - s/^gnu//; t - s/^g//; t'` - -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). This is about non-GNU programs, so use $1 not -# $program. -case $1 in - lex*|yacc*) - # Not GNU programs, they don't have --version. - ;; - - tar*) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; - - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running `$TOOL --version' or `$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case $program in - aclocal*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case $f in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te*) - echo 1>&2 "\ -WARNING: \`$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison*|yacc*) - echo 1>&2 "\ -WARNING: \`$1' $msg. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if test ! -f y.tab.h; then - echo >y.tab.h - fi - if test ! -f y.tab.c; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex*|flex*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if test ! -f lex.yy.c; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit $? - fi - ;; - - makeinfo*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -z "$file"; then - # ... or it is the one specified with @setfilename ... - infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n ' - /^@setfilename/{ - s/.* \([^ ]*\) *$/\1/ - p - q - }' $infile` - # ... or it is derived from the source name (dir/f.texi becomes f.info) - test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info - fi - # If the file does not exist, the user really needs makeinfo; - # let's fail without touching anything. - test -f $file || exit 1 - touch $file - ;; - - tar*) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case $firstarg in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case $firstarg in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/cloog-0.17.0/isl/mp_get_memory_functions.c b/cloog-0.17.0/isl/mp_get_memory_functions.c deleted file mode 100644 index e14e336..0000000 --- a/cloog-0.17.0/isl/mp_get_memory_functions.c +++ /dev/null @@ -1,14 +0,0 @@ -#include - -void mp_get_memory_functions( - void *(**alloc_func_ptr) (size_t), - void *(**realloc_func_ptr) (void *, size_t, size_t), - void (**free_func_ptr) (void *, size_t)) -{ - if (alloc_func_ptr) - *alloc_func_ptr = __gmp_allocate_func; - if (realloc_func_ptr) - *realloc_func_ptr = __gmp_reallocate_func; - if (free_func_ptr) - *free_func_ptr = __gmp_free_func; -} diff --git a/cloog-0.17.0/isl/pip.c b/cloog-0.17.0/isl/pip.c deleted file mode 100644 index 2baf9e2..0000000 --- a/cloog-0.17.0/isl/pip.c +++ /dev/null @@ -1,381 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include -#include -#include "isl_tab.h" -#include "isl_sample.h" -#include "isl_scan.h" -#include -#include -#include -#include -#include - -/* The input of this program is the same as that of the "example" program - * from the PipLib distribution, except that the "big parameter column" - * should always be -1. - * - * Context constraints in PolyLib format - * -1 - * Problem constraints in PolyLib format - * Optional list of options - * - * The options are - * Maximize compute maximum instead of minimum - * Rational compute rational optimum instead of integer optimum - * Urs_parms don't assume parameters are non-negative - * Urs_unknowns don't assume unknowns are non-negative - */ - -struct options { - struct isl_options *isl; - unsigned verify; - unsigned format; -}; - -#define FORMAT_SET 0 -#define FORMAT_AFF 1 - -struct isl_arg_choice pip_format[] = { - {"set", FORMAT_SET}, - {"affine", FORMAT_AFF}, - {0} -}; - -ISL_ARGS_START(struct options, options_args) -ISL_ARG_CHILD(struct options, isl, "isl", &isl_options_args, "isl options") -ISL_ARG_BOOL(struct options, verify, 'T', "verify", 0, NULL) -ISL_ARG_CHOICE(struct options, format, 0, "format", - pip_format, FORMAT_SET, "output format") -ISL_ARGS_END - -ISL_ARG_DEF(options, struct options, options_args) - -static __isl_give isl_basic_set *set_bounds(__isl_take isl_basic_set *bset) -{ - unsigned nparam; - int i, r; - isl_point *pt, *pt2; - isl_basic_set *box; - - nparam = isl_basic_set_dim(bset, isl_dim_param); - r = nparam >= 8 ? 4 : nparam >= 5 ? 6 : 30; - - pt = isl_basic_set_sample_point(isl_basic_set_copy(bset)); - pt2 = isl_point_copy(pt); - - for (i = 0; i < nparam; ++i) { - pt = isl_point_add_ui(pt, isl_dim_param, i, r); - pt2 = isl_point_sub_ui(pt2, isl_dim_param, i, r); - } - - box = isl_basic_set_box_from_points(pt, pt2); - - return isl_basic_set_intersect(bset, box); -} - -static struct isl_basic_set *to_parameter_domain(struct isl_basic_set *context) -{ - context = isl_basic_set_move_dims(context, isl_dim_param, 0, - isl_dim_set, 0, isl_basic_set_dim(context, isl_dim_set)); - context = isl_basic_set_params(context); - return context; -} - -isl_basic_set *plug_in_parameters(isl_basic_set *bset, struct isl_vec *params) -{ - int i; - - for (i = 0; i < params->size - 1; ++i) - bset = isl_basic_set_fix(bset, - isl_dim_param, i, params->el[1 + i]); - - bset = isl_basic_set_remove_dims(bset, - isl_dim_param, 0, params->size - 1); - - isl_vec_free(params); - - return bset; -} - -isl_set *set_plug_in_parameters(isl_set *set, struct isl_vec *params) -{ - int i; - - for (i = 0; i < params->size - 1; ++i) - set = isl_set_fix(set, isl_dim_param, i, params->el[1 + i]); - - set = isl_set_remove_dims(set, isl_dim_param, 0, params->size - 1); - - isl_vec_free(params); - - return set; -} - -/* Compute the lexicographically minimal (or maximal if max is set) - * element of bset for the given values of the parameters, by - * successively solving an ilp problem in each direction. - */ -struct isl_vec *opt_at(struct isl_basic_set *bset, - struct isl_vec *params, int max) -{ - unsigned dim; - struct isl_vec *opt; - struct isl_vec *obj; - int i; - - dim = isl_basic_set_dim(bset, isl_dim_set); - - bset = plug_in_parameters(bset, params); - - if (isl_basic_set_plain_is_empty(bset)) { - opt = isl_vec_alloc(bset->ctx, 0); - isl_basic_set_free(bset); - return opt; - } - - opt = isl_vec_alloc(bset->ctx, 1 + dim); - assert(opt); - - obj = isl_vec_alloc(bset->ctx, 1 + dim); - assert(obj); - - isl_int_set_si(opt->el[0], 1); - isl_int_set_si(obj->el[0], 0); - - for (i = 0; i < dim; ++i) { - enum isl_lp_result res; - - isl_seq_clr(obj->el + 1, dim); - isl_int_set_si(obj->el[1 + i], 1); - res = isl_basic_set_solve_ilp(bset, max, obj->el, - &opt->el[1 + i], NULL); - if (res == isl_lp_empty) - goto empty; - assert(res == isl_lp_ok); - bset = isl_basic_set_fix(bset, isl_dim_set, i, opt->el[1 + i]); - } - - isl_basic_set_free(bset); - isl_vec_free(obj); - - return opt; -empty: - isl_vec_free(opt); - opt = isl_vec_alloc(bset->ctx, 0); - isl_basic_set_free(bset); - isl_vec_free(obj); - - return opt; -} - -struct isl_scan_pip { - struct isl_scan_callback callback; - isl_basic_set *bset; - isl_set *sol; - isl_set *empty; - int stride; - int n; - int max; -}; - -/* Check if the "manually" computed optimum of bset at the "sample" - * values of the parameters agrees with the solution of pilp problem - * represented by the pair (sol, empty). - * In particular, if there is no solution for this value of the parameters, - * then it should be an element of the parameter domain "empty". - * Otherwise, the optimal solution, should be equal to the result of - * plugging in the value of the parameters in "sol". - */ -static int scan_one(struct isl_scan_callback *callback, - __isl_take isl_vec *sample) -{ - struct isl_scan_pip *sp = (struct isl_scan_pip *)callback; - struct isl_vec *opt; - - sp->n--; - - opt = opt_at(isl_basic_set_copy(sp->bset), isl_vec_copy(sample), sp->max); - assert(opt); - - if (opt->size == 0) { - isl_point *sample_pnt; - sample_pnt = isl_point_alloc(isl_set_get_space(sp->empty), sample); - assert(isl_set_contains_point(sp->empty, sample_pnt)); - isl_point_free(sample_pnt); - isl_vec_free(opt); - } else { - isl_set *sol; - isl_set *opt_set; - opt_set = isl_set_from_basic_set(isl_basic_set_from_vec(opt)); - sol = set_plug_in_parameters(isl_set_copy(sp->sol), sample); - assert(isl_set_is_equal(opt_set, sol)); - isl_set_free(sol); - isl_set_free(opt_set); - } - - if (!(sp->n % sp->stride)) { - printf("o"); - fflush(stdout); - } - - return sp->n >= 1 ? 0 : -1; -} - -static void check_solution(isl_basic_set *bset, isl_basic_set *context, - isl_set *sol, isl_set *empty, int max) -{ - struct isl_scan_pip sp; - isl_int count, count_max; - int i, n; - int r; - - context = set_bounds(context); - context = isl_basic_set_underlying_set(context); - - isl_int_init(count); - isl_int_init(count_max); - - isl_int_set_si(count_max, 2000); - r = isl_basic_set_count_upto(context, count_max, &count); - assert(r >= 0); - n = isl_int_get_si(count); - - isl_int_clear(count_max); - isl_int_clear(count); - - sp.callback.add = scan_one; - sp.bset = bset; - sp.sol = sol; - sp.empty = empty; - sp.n = n; - sp.stride = n > 70 ? 1 + (n + 1)/70 : 1; - sp.max = max; - - for (i = 0; i < n; i += sp.stride) - printf("."); - printf("\r"); - fflush(stdout); - - isl_basic_set_scan(context, &sp.callback); - - printf("\n"); - - isl_basic_set_free(bset); -} - -int main(int argc, char **argv) -{ - struct isl_ctx *ctx; - struct isl_basic_set *context, *bset, *copy, *context_copy; - struct isl_set *set = NULL; - struct isl_set *empty; - isl_pw_multi_aff *pma = NULL; - int neg_one; - char s[1024]; - int urs_parms = 0; - int urs_unknowns = 0; - int max = 0; - int rational = 0; - int n; - int nparam; - struct options *options; - - options = options_new_with_defaults(); - assert(options); - argc = options_parse(options, argc, argv, ISL_ARG_ALL); - - ctx = isl_ctx_alloc_with_options(&options_args, options); - - context = isl_basic_set_read_from_file(ctx, stdin); - assert(context); - n = fscanf(stdin, "%d", &neg_one); - assert(n == 1); - assert(neg_one == -1); - bset = isl_basic_set_read_from_file(ctx, stdin); - - while (fgets(s, sizeof(s), stdin)) { - if (strncasecmp(s, "Maximize", 8) == 0) - max = 1; - if (strncasecmp(s, "Rational", 8) == 0) { - rational = 1; - bset = isl_basic_set_set_rational(bset); - } - if (strncasecmp(s, "Urs_parms", 9) == 0) - urs_parms = 1; - if (strncasecmp(s, "Urs_unknowns", 12) == 0) - urs_unknowns = 1; - } - if (!urs_parms) - context = isl_basic_set_intersect(context, - isl_basic_set_positive_orthant(isl_basic_set_get_space(context))); - context = to_parameter_domain(context); - nparam = isl_basic_set_dim(context, isl_dim_param); - if (nparam != isl_basic_set_dim(bset, isl_dim_param)) { - int dim = isl_basic_set_dim(bset, isl_dim_set); - bset = isl_basic_set_move_dims(bset, isl_dim_param, 0, - isl_dim_set, dim - nparam, nparam); - } - if (!urs_unknowns) - bset = isl_basic_set_intersect(bset, - isl_basic_set_positive_orthant(isl_basic_set_get_space(bset))); - - if (options->verify) { - copy = isl_basic_set_copy(bset); - context_copy = isl_basic_set_copy(context); - } - - if (options->format == FORMAT_AFF) { - if (max) - pma = isl_basic_set_partial_lexmax_pw_multi_aff(bset, - context, &empty); - else - pma = isl_basic_set_partial_lexmin_pw_multi_aff(bset, - context, &empty); - } else { - if (max) - set = isl_basic_set_partial_lexmax(bset, - context, &empty); - else - set = isl_basic_set_partial_lexmin(bset, - context, &empty); - } - - if (options->verify) { - assert(!rational); - if (options->format == FORMAT_AFF) - set = isl_set_from_pw_multi_aff(pma); - check_solution(copy, context_copy, set, empty, max); - isl_set_free(set); - } else { - isl_printer *p; - p = isl_printer_to_file(ctx, stdout); - if (options->format == FORMAT_AFF) - p = isl_printer_print_pw_multi_aff(p, pma); - else - p = isl_printer_print_set(p, set); - p = isl_printer_end_line(p); - p = isl_printer_print_str(p, "no solution: "); - p = isl_printer_print_set(p, empty); - p = isl_printer_end_line(p); - isl_printer_free(p); - isl_set_free(set); - isl_pw_multi_aff_free(pma); - } - - isl_set_free(empty); - isl_ctx_free(ctx); - - return 0; -} diff --git a/cloog-0.17.0/isl/pip_test.sh.in b/cloog-0.17.0/isl/pip_test.sh.in deleted file mode 100755 index 28ad1ef..0000000 --- a/cloog-0.17.0/isl/pip_test.sh.in +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -EXEEXT=@EXEEXT@ - -PIP_TESTS="\ - boulet.pip \ - brisebarre.pip \ - cg1.pip \ - esced.pip \ - ex2.pip \ - ex.pip \ - fimmel.pip \ - max.pip \ - negative.pip \ - seghir-vd.pip \ - small.pip \ - sor1d.pip \ - square.pip \ - sven.pip \ - tobi.pip" - -for i in $PIP_TESTS; do - echo $i; - ./isl_pip$EXEEXT --format=set --context=gbr -T < $srcdir/test_inputs/$i || exit - ./isl_pip$EXEEXT --format=set --context=lexmin -T < $srcdir/test_inputs/$i || exit - ./isl_pip$EXEEXT --format=affine --context=gbr -T < $srcdir/test_inputs/$i || exit - ./isl_pip$EXEEXT --format=affine --context=lexmin -T < $srcdir/test_inputs/$i || exit -done diff --git a/cloog-0.17.0/isl/polyhedron_detect_equalities.c b/cloog-0.17.0/isl/polyhedron_detect_equalities.c deleted file mode 100644 index f66d08f..0000000 --- a/cloog-0.17.0/isl/polyhedron_detect_equalities.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include - -int main(int argc, char **argv) -{ - struct isl_ctx *ctx = isl_ctx_alloc(); - struct isl_basic_set *bset; - - bset = isl_basic_set_read_from_file(ctx, stdin); - bset = isl_basic_set_detect_equalities(bset); - isl_basic_set_print(bset, stdout, 0, "", "", ISL_FORMAT_POLYLIB); - isl_basic_set_free(bset); - isl_ctx_free(ctx); - - return 0; -} diff --git a/cloog-0.17.0/isl/polyhedron_minimize.c b/cloog-0.17.0/isl/polyhedron_minimize.c deleted file mode 100644 index 99c3f98..0000000 --- a/cloog-0.17.0/isl/polyhedron_minimize.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include -#include -#include - -/* The input of this program is the same as that of the "polytope_minimize" - * program from the barvinok distribution. - * - * Constraints of set is PolyLib format. - * Linear or affine objective function in PolyLib format. - */ - -static struct isl_vec *isl_vec_lin_to_aff(struct isl_vec *vec) -{ - struct isl_vec *aff; - - if (!vec) - return NULL; - aff = isl_vec_alloc(vec->ctx, 1 + vec->size); - if (!aff) - goto error; - isl_int_set_si(aff->el[0], 0); - isl_seq_cpy(aff->el + 1, vec->el, vec->size); - isl_vec_free(vec); - return aff; -error: - isl_vec_free(vec); - return NULL; -} - -/* Rotate elements of vector right. - * In particular, move the constant term from the end of the - * vector to the start of the vector. - */ -static struct isl_vec *vec_ror(struct isl_vec *vec) -{ - int i; - - if (!vec) - return NULL; - for (i = vec->size - 2; i >= 0; --i) - isl_int_swap(vec->el[i], vec->el[i + 1]); - return vec; -} - -int main(int argc, char **argv) -{ - struct isl_ctx *ctx = isl_ctx_alloc(); - struct isl_basic_set *bset; - struct isl_vec *obj; - struct isl_vec *sol; - isl_int opt; - unsigned dim; - enum isl_lp_result res; - isl_printer *p; - - isl_int_init(opt); - bset = isl_basic_set_read_from_file(ctx, stdin); - assert(bset); - obj = isl_vec_read_from_file(ctx, stdin); - assert(obj); - dim = isl_basic_set_total_dim(bset); - assert(obj->size >= dim && obj->size <= dim + 1); - if (obj->size != dim + 1) - obj = isl_vec_lin_to_aff(obj); - else - obj = vec_ror(obj); - res = isl_basic_set_solve_ilp(bset, 0, obj->el, &opt, &sol); - switch (res) { - case isl_lp_error: - fprintf(stderr, "error\n"); - return -1; - case isl_lp_empty: - fprintf(stdout, "empty\n"); - break; - case isl_lp_unbounded: - fprintf(stdout, "unbounded\n"); - break; - case isl_lp_ok: - p = isl_printer_to_file(ctx, stdout); - p = isl_printer_print_vec(p, sol); - p = isl_printer_end_line(p); - p = isl_printer_print_isl_int(p, opt); - p = isl_printer_end_line(p); - isl_printer_free(p); - } - isl_basic_set_free(bset); - isl_vec_free(obj); - isl_vec_free(sol); - isl_ctx_free(ctx); - isl_int_clear(opt); - - return 0; -} diff --git a/cloog-0.17.0/isl/polyhedron_sample.c b/cloog-0.17.0/isl/polyhedron_sample.c deleted file mode 100644 index f0e1af7..0000000 --- a/cloog-0.17.0/isl/polyhedron_sample.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include "isl_sample.h" -#include - -int main(int argc, char **argv) -{ - struct isl_ctx *ctx = isl_ctx_alloc(); - struct isl_basic_set *bset; - struct isl_vec *sample; - isl_printer *p; - - bset = isl_basic_set_read_from_file(ctx, stdin); - sample = isl_basic_set_sample_vec(isl_basic_set_copy(bset)); - p = isl_printer_to_file(ctx, stdout); - p = isl_printer_print_vec(p, sample); - p = isl_printer_end_line(p); - isl_printer_free(p); - assert(sample); - if (sample->size > 0) - assert(isl_basic_set_contains(bset, sample)); - isl_basic_set_free(bset); - isl_vec_free(sample); - isl_ctx_free(ctx); - - return 0; -} diff --git a/cloog-0.17.0/isl/polytope_scan.c b/cloog-0.17.0/isl/polytope_scan.c deleted file mode 100644 index 2e7adc6..0000000 --- a/cloog-0.17.0/isl/polytope_scan.c +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright 2008-2009 Katholieke Universiteit Leuven - * - * Use of this software is governed by the GNU LGPLv2.1 license - * - * Written by Sven Verdoolaege, K.U.Leuven, Departement - * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium - */ - -#include -#include -#include "isl_equalities.h" -#include -#include "isl_scan.h" -#include - -/* The input of this program is the same as that of the "polytope_scan" - * program from the barvinok distribution. - * - * Constraints of set is PolyLib format. - * - * The input set is assumed to be bounded. - */ - -struct scan_samples { - struct isl_scan_callback callback; - struct isl_mat *samples; -}; - -static int scan_samples_add_sample(struct isl_scan_callback *cb, - __isl_take isl_vec *sample) -{ - struct scan_samples *ss = (struct scan_samples *)cb; - - ss->samples = isl_mat_extend(ss->samples, ss->samples->n_row + 1, - ss->samples->n_col); - if (!ss->samples) - goto error; - - isl_seq_cpy(ss->samples->row[ss->samples->n_row - 1], - sample->el, sample->size); - - isl_vec_free(sample); - return 0; -error: - isl_vec_free(sample); - return -1; -} - -static struct isl_mat *isl_basic_set_scan_samples(struct isl_basic_set *bset) -{ - isl_ctx *ctx; - unsigned dim; - struct scan_samples ss; - - ctx = isl_basic_set_get_ctx(bset); - dim = isl_basic_set_total_dim(bset); - ss.callback.add = scan_samples_add_sample; - ss.samples = isl_mat_alloc(ctx, 0, 1 + dim); - if (!ss.samples) - goto error; - - if (isl_basic_set_scan(bset, &ss.callback) < 0) { - isl_mat_free(ss.samples); - return NULL; - } - - return ss.samples; -error: - isl_basic_set_free(bset); - return NULL; -} - -static struct isl_mat *isl_basic_set_samples(struct isl_basic_set *bset) -{ - struct isl_mat *T; - struct isl_mat *samples; - - if (!bset) - return NULL; - - if (bset->n_eq == 0) - return isl_basic_set_scan_samples(bset); - - bset = isl_basic_set_remove_equalities(bset, &T, NULL); - samples = isl_basic_set_scan_samples(bset); - return isl_mat_product(samples, isl_mat_transpose(T)); -} - -int main(int argc, char **argv) -{ - struct isl_ctx *ctx = isl_ctx_alloc(); - struct isl_basic_set *bset; - struct isl_mat *samples; - - bset = isl_basic_set_read_from_file(ctx, stdin); - samples = isl_basic_set_samples(bset); - isl_mat_print_internal(samples, stdout, 0); - isl_mat_free(samples); - isl_ctx_free(ctx); - - return 0; -} diff --git a/cloog-0.17.0/isl/print.c b/cloog-0.17.0/isl/print.c deleted file mode 100644 index 4e0aecd..0000000 --- a/cloog-0.17.0/isl/print.c +++ /dev/null @@ -1,77 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#undef BASE -#define BASE id -#include -#undef BASE -#define BASE space -#include -#undef BASE -#define BASE local_space -#include -#undef BASE -#define BASE basic_set -#include -#undef BASE -#define BASE basic_map -#include -#undef BASE -#define BASE set -#include -#undef BASE -#define BASE map -#include -#undef BASE -#define BASE union_set -#include -#undef BASE -#define BASE union_map -#include -#undef BASE -#define BASE qpolynomial -#include -#undef BASE -#define BASE qpolynomial_fold -#include -#undef BASE -#define BASE pw_qpolynomial -#include -#undef BASE -#define BASE pw_qpolynomial_fold -#include -#undef BASE -#define BASE union_pw_qpolynomial -#include -#undef BASE -#define BASE union_pw_qpolynomial_fold -#include -#undef BASE -#define BASE band -#include -#undef BASE -#define BASE constraint -#include -#undef BASE -#define BASE aff -#include -#undef BASE -#define BASE pw_aff -#include -#undef BASE -#define BASE multi_aff -#include -#undef BASE -#define BASE pw_multi_aff -#include diff --git a/cloog-0.17.0/isl/print_templ.c b/cloog-0.17.0/isl/print_templ.c deleted file mode 100644 index f147fdc..0000000 --- a/cloog-0.17.0/isl/print_templ.c +++ /dev/null @@ -1,33 +0,0 @@ -#define xCAT(A,B) A ## B -#define CAT(A,B) xCAT(A,B) -#undef TYPE -#define TYPE CAT(isl_,BASE) -#define xFN(TYPE,NAME) TYPE ## _ ## NAME -#define FN(TYPE,NAME) xFN(TYPE,NAME) - -void FN(TYPE,dump)(__isl_keep TYPE *obj) -{ - isl_printer *p; - - if (!obj) - return; - p = isl_printer_to_file(FN(TYPE,get_ctx)(obj), stderr); - p = FN(isl_printer_print,BASE)(p, obj); - p = isl_printer_end_line(p); - isl_printer_free(p); -} - -__isl_give char *FN(TYPE,to_str)(__isl_keep TYPE *obj) -{ - isl_printer *p; - char *s; - - if (!obj) - return NULL; - p = isl_printer_to_str(FN(TYPE,get_ctx)(obj)); - p = FN(isl_printer_print,BASE)(p, obj); - s = isl_printer_get_str(p); - isl_printer_free(p); - - return s; -} diff --git a/cloog-0.17.0/isl/test_inputs/affine.polylib b/cloog-0.17.0/isl/test_inputs/affine.polylib deleted file mode 100644 index f14720c..0000000 --- a/cloog-0.17.0/isl/test_inputs/affine.polylib +++ /dev/null @@ -1,9 +0,0 @@ -# the affine hull of {[a,b] : a=b && 1 <= a <= 163} ... -3 4 -0 1 -1 0 -1 1 0 -1 -1 -1 0 163 - -# ... is {[a,b] : a=b} (and not {[In_1,In_2]}, as Omega 1.2 claims) -1 4 -0 1 -1 0 diff --git a/cloog-0.17.0/isl/test_inputs/affine2.polylib b/cloog-0.17.0/isl/test_inputs/affine2.polylib deleted file mode 100644 index c67db77..0000000 --- a/cloog-0.17.0/isl/test_inputs/affine2.polylib +++ /dev/null @@ -1,9 +0,0 @@ -5 5 -1 -2 0 1 0 -1 2 0 -1 1 -1 0 -2 1 0 -1 0 2 -1 1 -1 0 0 1 -1 - -1 5 -0 1 -1 0 0 diff --git a/cloog-0.17.0/isl/test_inputs/affine3.polylib b/cloog-0.17.0/isl/test_inputs/affine3.polylib deleted file mode 100644 index f2bc9a2..0000000 --- a/cloog-0.17.0/isl/test_inputs/affine3.polylib +++ /dev/null @@ -1,7 +0,0 @@ -3 4 -1 1 0 0 -1 -7 4 2 -1 5 -4 2 - -1 4 -0 3 -2 0 diff --git a/cloog-0.17.0/isl/test_inputs/application.omega b/cloog-0.17.0/isl/test_inputs/application.omega deleted file mode 100644 index 8f4fd1d..0000000 --- a/cloog-0.17.0/isl/test_inputs/application.omega +++ /dev/null @@ -1,3 +0,0 @@ -{[x]} -{[x] -> [y] : y = 2x} -{[y]: Exists ( alpha : 2alpha = y)} diff --git a/cloog-0.17.0/isl/test_inputs/application2.omega b/cloog-0.17.0/isl/test_inputs/application2.omega deleted file mode 100644 index f2af1e8..0000000 --- a/cloog-0.17.0/isl/test_inputs/application2.omega +++ /dev/null @@ -1,3 +0,0 @@ -{[x] : x >= 0 && x <= 20 } -{[x] -> [y] : y = 2x} -{[y]: Exists ( alpha : 2alpha = y && 0 <= y && y <= 40)} diff --git a/cloog-0.17.0/isl/test_inputs/basicLinear.pwqp b/cloog-0.17.0/isl/test_inputs/basicLinear.pwqp deleted file mode 100644 index 0af7fab..0000000 --- a/cloog-0.17.0/isl/test_inputs/basicLinear.pwqp +++ /dev/null @@ -1 +0,0 @@ -[P, Q] -> { [n, m] -> n : n >= 1 and m >= n and m <= P and m <= Q } diff --git a/cloog-0.17.0/isl/test_inputs/basicLinear2.pwqp b/cloog-0.17.0/isl/test_inputs/basicLinear2.pwqp deleted file mode 100644 index d411a36..0000000 --- a/cloog-0.17.0/isl/test_inputs/basicLinear2.pwqp +++ /dev/null @@ -1 +0,0 @@ -[P, Q] -> { [n, m] -> n : n >= 1 and m >= n and m <= P and n >= -1 + Q } diff --git a/cloog-0.17.0/isl/test_inputs/basicTest.pwqp b/cloog-0.17.0/isl/test_inputs/basicTest.pwqp deleted file mode 100644 index 52e7fc8..0000000 --- a/cloog-0.17.0/isl/test_inputs/basicTest.pwqp +++ /dev/null @@ -1 +0,0 @@ -[p] -> { [n, m] -> (n + n^2) : n >= 1 and m >= n and m <= p } diff --git a/cloog-0.17.0/isl/test_inputs/basicTestParameterPosNeg.pwqp b/cloog-0.17.0/isl/test_inputs/basicTestParameterPosNeg.pwqp deleted file mode 100644 index 6cb4490..0000000 --- a/cloog-0.17.0/isl/test_inputs/basicTestParameterPosNeg.pwqp +++ /dev/null @@ -1 +0,0 @@ -[p] -> { [n, m] -> (n + n^3) : n >= -1 and m >= n and m <= p } diff --git a/cloog-0.17.0/isl/test_inputs/boulet.pip b/cloog-0.17.0/isl/test_inputs/boulet.pip deleted file mode 100644 index 78e90dd..0000000 --- a/cloog-0.17.0/isl/test_inputs/boulet.pip +++ /dev/null @@ -1,13 +0,0 @@ -0 3 - --1 - -5 6 -1 1 -1 2 0 0 -1 0 1 1 4 20 -1 0 -1 -1 0 0 -1 0 1 -1 2 10 -1 0 -1 1 2 10 - -Urs_parms -Urs_unknowns diff --git a/cloog-0.17.0/isl/test_inputs/brisebarre.pip b/cloog-0.17.0/isl/test_inputs/brisebarre.pip deleted file mode 100644 index 5d25dae..0000000 --- a/cloog-0.17.0/isl/test_inputs/brisebarre.pip +++ /dev/null @@ -1,34 +0,0 @@ -# ---------------------- CONTEXT ---------------------- -1 2 -1 0 - --1 - -# ----------------------- DOMAIN ---------------------- -26 6 -1 3 0 0 0 -98300 -1 -3 0 0 0 98308 -1 432 36 6 1 -14757611 -1 -432 -36 -6 -1 14758510 -1 54 9 3 1 -1923190 -1 -54 -9 -3 -1 1923303 -1 48 12 6 3 -1782238 -1 -48 -12 -6 -3 1782339 -1 27 9 6 4 -1045164 -1 -27 -9 -6 -4 1045221 -1 432 180 150 125 -17434139 -1 -432 -180 -150 -125 17435038 -1 6 3 3 3 -252443 -1 -6 -3 -3 -3 252456 -1 432 252 294 343 -18949275 -1 -432 -252 -294 -343 18950174 -1 27 18 24 32 -1234720 -1 -27 -18 -24 -32 1234777 -1 48 36 54 81 -2288453 -1 -48 -36 -54 -81 2288554 -1 54 45 75 125 -2684050 -1 -54 -45 -75 -125 2684163 -1 432 396 726 1331 -22386005 -1 -432 -396 -726 -1331 22386904 -1 3 3 6 12 -162072 -1 -3 -3 -6 -12 162080 diff --git a/cloog-0.17.0/isl/test_inputs/cg1.pip b/cloog-0.17.0/isl/test_inputs/cg1.pip deleted file mode 100644 index 78e31f1..0000000 --- a/cloog-0.17.0/isl/test_inputs/cg1.pip +++ /dev/null @@ -1,15 +0,0 @@ -2 4 - 1 1 0 -1 - 1 -1 1 0 - --1 - -8 7 - 1 0 1 0 -1 0 0 - 1 0 -1 0 1 0 0 - 1 1 0 0 0 -1 0 - 1 -1 0 0 0 1 0 - 1 0 1 0 0 0 -1 - 1 0 -1 0 0 1 0 - 1 0 -1 1 0 0 -1 - 1 0 0 -1 0 1 0 diff --git a/cloog-0.17.0/isl/test_inputs/convex0.polylib b/cloog-0.17.0/isl/test_inputs/convex0.polylib deleted file mode 100644 index cbc4d3b..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex0.polylib +++ /dev/null @@ -1,11 +0,0 @@ -2 3 -1 1 0 -1 -1 1 - -2 3 -1 1 -1 -1 -1 2 - -2 3 -1 1 0 -1 -1 2 diff --git a/cloog-0.17.0/isl/test_inputs/convex1.polylib b/cloog-0.17.0/isl/test_inputs/convex1.polylib deleted file mode 100644 index b563d8d..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex1.polylib +++ /dev/null @@ -1,17 +0,0 @@ -# {j,N | 0<=j<=N-1; 2<=N} -4 4 -1 1 0 0 -1 -1 1 -1 -1 0 1 -2 -1 0 0 1 -# {j, N | 1<=j<=N; 1<=N} -4 4 -1 1 0 -1 -1 -1 1 0 -1 0 1 -1 -1 0 0 1 -# {j,N | 0<=j<=N; 2<=j+N} -3 4 - 1 1 1 -2 - 1 1 0 0 - 1 -1 1 0 diff --git a/cloog-0.17.0/isl/test_inputs/convex10.polylib b/cloog-0.17.0/isl/test_inputs/convex10.polylib deleted file mode 100644 index 3d58cbf..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex10.polylib +++ /dev/null @@ -1,17 +0,0 @@ -3 4 -1 54 1 -4 -1 2 -1 58 -1 0 -1 6 - -4 4 -1 54 1 -4 -1 2 -1 58 -1 0 1 -7 -1 -4 1 0 - -4 4 -1 54 1 -4 -1 2 -1 58 -1 0 -1 116 -1 0 0 1 - diff --git a/cloog-0.17.0/isl/test_inputs/convex11.polylib b/cloog-0.17.0/isl/test_inputs/convex11.polylib deleted file mode 100644 index f664114..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex11.polylib +++ /dev/null @@ -1,14 +0,0 @@ -3 4 -1 0 -1 6 -1 -1 1 1 -1 1 1 -10 - -3 4 -1 1 0 -4 -1 -1 -1 8 -1 -1 1 1 - -3 4 -1 0 -1 6 -1 1 0 -4 -1 -1 1 1 diff --git a/cloog-0.17.0/isl/test_inputs/convex12.polylib b/cloog-0.17.0/isl/test_inputs/convex12.polylib deleted file mode 100644 index e476630..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex12.polylib +++ /dev/null @@ -1,12 +0,0 @@ -3 5 -1 0 0 1 1 -1 0 1 0 1 -1 -1 -1 0 -2 - -3 5 -1 0 0 1 2 -1 1 -1 0 0 -1 1 0 0 -1 - -1 5 -1 0 0 1 2 diff --git a/cloog-0.17.0/isl/test_inputs/convex13.polylib b/cloog-0.17.0/isl/test_inputs/convex13.polylib deleted file mode 100644 index 1b35912..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex13.polylib +++ /dev/null @@ -1,17 +0,0 @@ -3 5 -1 0 0 -1 3 -1 0 -1 0 2 -1 1 1 1 -4 - -3 5 -1 0 0 1 0 -1 1 0 0 -1 -1 1 2 0 1 - -6 5 -1 3 2 0 -1 -1 3 0 2 -3 -1 1 0 1 -1 -1 1 1 1 0 -1 1 1 0 0 -1 1 0 0 1 diff --git a/cloog-0.17.0/isl/test_inputs/convex14.polylib b/cloog-0.17.0/isl/test_inputs/convex14.polylib deleted file mode 100644 index caaa8f5..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex14.polylib +++ /dev/null @@ -1,14 +0,0 @@ -3 4 -0 1 0 2 -1 0 1 0 -1 0 -1 2 - -3 4 -1 1 0 0 -1 0 1 0 -1 0 -1 2 - -3 4 -1 1 0 2 -1 0 1 0 -1 0 -1 2 diff --git a/cloog-0.17.0/isl/test_inputs/convex15.polylib b/cloog-0.17.0/isl/test_inputs/convex15.polylib deleted file mode 100644 index 0118fa8..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex15.polylib +++ /dev/null @@ -1,66 +0,0 @@ -17 8 -1 -1 -8 0 16 0 0 37 -1 1 0 -48 0 2 0 -3 -1 0 -16 -32 16 1 0 14 -1 -1 24 0 0 1 0 18 -1 -1 8 16 0 0 1 21 -1 0 0 -16 0 1 1 -2 -1 1 32 16 -32 0 0 -1 -1 -1 16 16 0 0 0 28 -1 1 -8 -32 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 16 16 -16 0 1 -1 -1 1 8 0 -16 0 0 0 -1 0 3 2 -2 0 0 0 -1 0 1 2 -1 0 0 0 -1 0 -1 -1 1 0 0 0 -1 -1 8 0 0 1 2 4 -1 -1 -24 -32 32 1 0 36 - -13 8 -1 -1 0 0 0 1 3 -4 -1 1 0 -48 0 2 0 -2 -1 0 0 0 0 1 0 -1 -1 0 -8 0 0 0 1 -1 -1 0 3 2 -2 0 0 0 -1 1 -16 -16 0 0 0 0 -1 1 -24 0 0 0 0 0 -1 0 1 0 0 0 0 0 -1 0 -3 -2 2 0 0 1 -1 -1 0 16 0 0 2 13 -1 -1 24 0 0 1 0 20 -1 -1 16 16 0 0 0 29 -1 -1 0 48 0 0 0 45 - -31 8 - 1 0 1 0 0 0 0 0 - 1 0 0 -16 0 1 1 -2 - 1 0 0 0 0 1 0 -1 - 1 -1 8 0 0 1 2 4 - 1 0 3 2 -2 0 0 0 - 1 -1 24 0 0 1 0 20 - 1 1 0 -48 0 2 0 -2 - 1 -1 -24 -32 32 1 0 36 - 1 0 0 0 0 0 1 -1 - 1 -1 24 64 -16 0 0 45 - 1 -15 120 112 0 15 38 52 - 1 1 24 32 -32 0 0 0 - 1 0 -2 -2 2 0 0 1 - 1 -1 8 16 0 0 1 21 - 1 -15 120 352 0 0 23 307 - 1 1 -8 -32 0 1 0 -1 - 1 1 -8 0 0 0 0 0 - 1 1 -8 -16 0 0 0 0 - 1 0 16 16 -16 0 1 -1 - 1 -1 16 16 0 0 0 29 - 1 -1 -8 0 16 0 0 37 - 1 -1 8 32 0 0 0 37 - 1 1 8 0 -16 0 0 0 - 1 -15 360 592 -240 0 23 307 - 1 -1 -6 2 14 0 2 20 - 1 -15 360 352 -240 15 38 52 - 1 -1 8 48 0 0 0 45 - 1 0 -16 -32 16 1 0 14 - 1 -1 -6 -14 14 1 3 3 - 1 1 -38 -78 30 2 0 13 - 1 1 -3 -50 2 2 0 -1 diff --git a/cloog-0.17.0/isl/test_inputs/convex2.polylib b/cloog-0.17.0/isl/test_inputs/convex2.polylib deleted file mode 100644 index 0bfd737..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex2.polylib +++ /dev/null @@ -1,24 +0,0 @@ -# {i,j,N | 1<=i<=N; 0<=j<=N-1; 2<=N} -6 5 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 0 -1 0 -1 1 -1 -1 0 0 1 -2 -1 0 0 0 1 -# {i,j,N | 1<=i<=N; 1<=j<=N; 2<=N} -6 5 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 -1 -1 0 -1 1 0 -1 0 0 1 -2 -1 0 0 0 1 -# {i,j,N | 1<=i<=N; 0<=j<=N; 2<=N} -6 5 - 1 0 0 1 -2 - 1 -1 0 1 0 - 1 0 -1 1 0 - 1 1 0 0 -1 - 1 0 1 0 0 - 1 0 0 0 1 diff --git a/cloog-0.17.0/isl/test_inputs/convex3.polylib b/cloog-0.17.0/isl/test_inputs/convex3.polylib deleted file mode 100644 index ea612c6..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex3.polylib +++ /dev/null @@ -1,10 +0,0 @@ -1 4 -1 1 1 -6 - -3 4 -1 1 1 -3 -1 1 0 -5 -1 -1 0 10 - -1 4 -1 1 1 -3 diff --git a/cloog-0.17.0/isl/test_inputs/convex4.polylib b/cloog-0.17.0/isl/test_inputs/convex4.polylib deleted file mode 100644 index 0c08653..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex4.polylib +++ /dev/null @@ -1,9 +0,0 @@ -1 4 -1 1 1 -6 - -2 4 -0 1 0 -1 -0 0 1 -4 - -1 4 -1 1 1 -5 diff --git a/cloog-0.17.0/isl/test_inputs/convex5.polylib b/cloog-0.17.0/isl/test_inputs/convex5.polylib deleted file mode 100644 index 3aae7c2..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex5.polylib +++ /dev/null @@ -1,12 +0,0 @@ -2 4 -0 1 0 -2 -0 0 1 -6 - -2 4 -0 1 0 -1 -0 0 1 -4 - -3 4 -0 -2 1 -2 -1 1 0 -1 -1 -1 0 2 diff --git a/cloog-0.17.0/isl/test_inputs/convex6.polylib b/cloog-0.17.0/isl/test_inputs/convex6.polylib deleted file mode 100644 index 1bdb4e1..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex6.polylib +++ /dev/null @@ -1,17 +0,0 @@ -3 4 -1 1 1 -2 -1 -1 1 2 -1 0 -1 2 - -3 4 -1 0 1 -1 -1 1 -1 1 -1 -1 -1 5 - -6 4 -1 -1 0 4 -1 1 0 0 -1 1 2 -2 -1 -1 2 2 -1 1 -2 4 -1 -1 -2 8 diff --git a/cloog-0.17.0/isl/test_inputs/convex7.polylib b/cloog-0.17.0/isl/test_inputs/convex7.polylib deleted file mode 100644 index 70eb483..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex7.polylib +++ /dev/null @@ -1,9 +0,0 @@ -1 4 -0 0 1 0 - -2 4 -1 1 -1 1 -1 -1 -1 1 - -1 4 -1 0 -1 1 diff --git a/cloog-0.17.0/isl/test_inputs/convex8.polylib b/cloog-0.17.0/isl/test_inputs/convex8.polylib deleted file mode 100644 index ea1b757..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex8.polylib +++ /dev/null @@ -1,24 +0,0 @@ -4 5 -1 1 1 1 0 -1 0 -1 0 0 -1 -1 0 0 2 -1 1 1 -1 0 - -4 5 -1 -1 1 0 2 -1 1 -2 -2 -1 -1 -1 0 2 3 -1 1 0 0 -1 - -10 5 -1 1 0 1 0 -1 1 1 0 0 -1 0 1 1 2 -1 -3 1 -1 8 -1 -3 1 1 8 -1 0 1 -1 2 -1 1 0 -1 0 -1 1 -2 -1 0 -1 -1 -3 2 6 -1 1 -5 -2 2 - diff --git a/cloog-0.17.0/isl/test_inputs/convex9.polylib b/cloog-0.17.0/isl/test_inputs/convex9.polylib deleted file mode 100644 index f68fca0..0000000 --- a/cloog-0.17.0/isl/test_inputs/convex9.polylib +++ /dev/null @@ -1,14 +0,0 @@ -4 4 -1 1 0 0 -1 -1 0 1 -1 0 1 0 -1 0 -1 10 - -2 4 -1 1 0 -10 -0 0 -1 5 - -3 4 -1 1 0 0 -1 0 1 0 -1 0 -1 10 diff --git a/cloog-0.17.0/isl/test_inputs/devos.pwqp b/cloog-0.17.0/isl/test_inputs/devos.pwqp deleted file mode 100644 index b452544..0000000 --- a/cloog-0.17.0/isl/test_inputs/devos.pwqp +++ /dev/null @@ -1 +0,0 @@ -[U] -> { [i0] -> ((1/3 * U + 2/3 * i0) - [(U + 2i0)/3]) : 2i0 >= -3 - U and 2i0 <= -U and U >= 0 and U <= 10 } diff --git a/cloog-0.17.0/isl/test_inputs/equality1.pwqp b/cloog-0.17.0/isl/test_inputs/equality1.pwqp deleted file mode 100644 index eb16a4b..0000000 --- a/cloog-0.17.0/isl/test_inputs/equality1.pwqp +++ /dev/null @@ -1 +0,0 @@ -[n] -> { [x] -> 1 + [(x+1)/3] : exists a : x = 3a +1 && 0 <= x <= n } diff --git a/cloog-0.17.0/isl/test_inputs/equality2.pwqp b/cloog-0.17.0/isl/test_inputs/equality2.pwqp deleted file mode 100644 index 1629a65..0000000 --- a/cloog-0.17.0/isl/test_inputs/equality2.pwqp +++ /dev/null @@ -1 +0,0 @@ -[n] -> { [x,y] -> x^2 * y : n = 2x + 4y and 0 <= x,y <= 10 } diff --git a/cloog-0.17.0/isl/test_inputs/equality3.pwqp b/cloog-0.17.0/isl/test_inputs/equality3.pwqp deleted file mode 100644 index c6f8c3a..0000000 --- a/cloog-0.17.0/isl/test_inputs/equality3.pwqp +++ /dev/null @@ -1 +0,0 @@ -[m,n] -> { [x,y] -> x^2 * y : n = 2x + 4y and 0 <= x,y <= 10 and 3 n = 5 m } diff --git a/cloog-0.17.0/isl/test_inputs/equality4.pwqp b/cloog-0.17.0/isl/test_inputs/equality4.pwqp deleted file mode 100644 index 49da2e7..0000000 --- a/cloog-0.17.0/isl/test_inputs/equality4.pwqp +++ /dev/null @@ -1 +0,0 @@ -[m,n] -> { [x,y] -> x^2 * y + m + 13 * n: n = 2x + 4y and 0 <= x,y <= 10 and 3 n = 5 m } diff --git a/cloog-0.17.0/isl/test_inputs/equality5.pwqp b/cloog-0.17.0/isl/test_inputs/equality5.pwqp deleted file mode 100644 index 09cb752..0000000 --- a/cloog-0.17.0/isl/test_inputs/equality5.pwqp +++ /dev/null @@ -1 +0,0 @@ -[m,n] -> { [x,y,z] -> x^2 * y + z + m + 13 * n: n = 2x + 4y and 0 <= x,y <= 10 and 3 n = 5 m and z = x + y } diff --git a/cloog-0.17.0/isl/test_inputs/esced.pip b/cloog-0.17.0/isl/test_inputs/esced.pip deleted file mode 100644 index dbf56ff..0000000 --- a/cloog-0.17.0/isl/test_inputs/esced.pip +++ /dev/null @@ -1,27 +0,0 @@ -0 2 - --1 - -16 18 -1 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 - - -0 0 0 0 -1 0 0 0 0 1 -1 0 0 0 0 0 0 0 -0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 - -0 -1 0 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 - -0 0 0 0 0 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 -0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 -0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 0 0 0 -0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 0 - -1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 diff --git a/cloog-0.17.0/isl/test_inputs/ex.pip b/cloog-0.17.0/isl/test_inputs/ex.pip deleted file mode 100644 index a405450..0000000 --- a/cloog-0.17.0/isl/test_inputs/ex.pip +++ /dev/null @@ -1,9 +0,0 @@ -1 5 -1 -1 1 1 0 - --1 - -3 7 -1 0 -1 0 1 0 0 -1 -1 0 0 0 1 0 -1 1 1 -1 0 0 0 diff --git a/cloog-0.17.0/isl/test_inputs/ex2.pip b/cloog-0.17.0/isl/test_inputs/ex2.pip deleted file mode 100644 index bb59848..0000000 --- a/cloog-0.17.0/isl/test_inputs/ex2.pip +++ /dev/null @@ -1,9 +0,0 @@ -1 5 -1 -1 1 1 0 - --1 - -3 7 -1 0 -1 0 1 0 0 -1 -1 0 0 0 1 0 -1 1 1 -1 0 0 0 diff --git a/cloog-0.17.0/isl/test_inputs/faddeev.pwqp b/cloog-0.17.0/isl/test_inputs/faddeev.pwqp deleted file mode 100644 index e7db61d..0000000 --- a/cloog-0.17.0/isl/test_inputs/faddeev.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N] -> { [i, j, k] -> (((4 + 6 * N + 2 * N^2) + (-2 - 2 * N) * j) + ((-2 - N) + j) * k) : j = 1 + i and k = 1 + i and i >= 3 and N <= 100 and i <= N and N >= 10 } diff --git a/cloog-0.17.0/isl/test_inputs/fimmel.pip b/cloog-0.17.0/isl/test_inputs/fimmel.pip deleted file mode 100644 index a6dee41..0000000 --- a/cloog-0.17.0/isl/test_inputs/fimmel.pip +++ /dev/null @@ -1,12 +0,0 @@ -0 4 - --1 - -7 6 -1 2 6 0 0 -9 -1 5 -3 0 0 0 -1 2 -10 0 0 15 -1 -2 6 0 0 -3 -1 -2 -6 0 0 17 -1 0 1 -1 0 0 -1 1 0 0 -1 0 diff --git a/cloog-0.17.0/isl/test_inputs/gist1.polylib b/cloog-0.17.0/isl/test_inputs/gist1.polylib deleted file mode 100644 index 802a4eb..0000000 --- a/cloog-0.17.0/isl/test_inputs/gist1.polylib +++ /dev/null @@ -1,14 +0,0 @@ -4 5 -0 1 0 0 -1 -0 0 1 0 1 -0 0 0 1 -3 -1 0 0 0 1 - -4 5 -0 1 0 0 -1 -0 0 1 1 -2 -1 0 0 1 0 -1 0 0 -1 3 - -1 5 -0 0 1 0 1 diff --git a/cloog-0.17.0/isl/test_inputs/linearExample.pwqp b/cloog-0.17.0/isl/test_inputs/linearExample.pwqp deleted file mode 100644 index 24c5394..0000000 --- a/cloog-0.17.0/isl/test_inputs/linearExample.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N, M, L] -> { [i, j, k] -> ((1/2 * i + 5 * j) + 1/7 * k) : i >= 0 and k >= -N + i and k >= -M - j and j <= L + i and L >= 0 and L >= -M } diff --git a/cloog-0.17.0/isl/test_inputs/max.pip b/cloog-0.17.0/isl/test_inputs/max.pip deleted file mode 100644 index e8af57b..0000000 --- a/cloog-0.17.0/isl/test_inputs/max.pip +++ /dev/null @@ -1,9 +0,0 @@ -0 3 - --1 - -4 5 -1 -1 0 1 0 -1 0 -1 1 0 -1 -1 3 -2 12 -1 2 -1 -1 3 diff --git a/cloog-0.17.0/isl/test_inputs/neg.pwqp b/cloog-0.17.0/isl/test_inputs/neg.pwqp deleted file mode 100644 index 596a7d7..0000000 --- a/cloog-0.17.0/isl/test_inputs/neg.pwqp +++ /dev/null @@ -1 +0,0 @@ -[n] -> { [i0] -> i0^2 : i0 >= -20 - n and i0 <= n and i0 <= -1 and n >= 0 } diff --git a/cloog-0.17.0/isl/test_inputs/negative.pip b/cloog-0.17.0/isl/test_inputs/negative.pip deleted file mode 100644 index 45090a5..0000000 --- a/cloog-0.17.0/isl/test_inputs/negative.pip +++ /dev/null @@ -1,9 +0,0 @@ -1 3 -# n 1 -1 1 -1 # n >= 1 --1 - -2 4 -# i n 1 -1 1 0 1 # i >= -1 -1 -1 1 0 # i <= n diff --git a/cloog-0.17.0/isl/test_inputs/philippe.pwqp b/cloog-0.17.0/isl/test_inputs/philippe.pwqp deleted file mode 100644 index 1c56e7a..0000000 --- a/cloog-0.17.0/isl/test_inputs/philippe.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N] -> { [i, j] -> ((1/2 * i + 1/2 * i^2) + j) : i <= N and j >= 0 and j <= i } diff --git a/cloog-0.17.0/isl/test_inputs/philippe3vars.pwqp b/cloog-0.17.0/isl/test_inputs/philippe3vars.pwqp deleted file mode 100644 index 8d07496..0000000 --- a/cloog-0.17.0/isl/test_inputs/philippe3vars.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N] -> { [i, j, k] -> (((1/2 * i + 1/2 * i^2) + j) + k^3) : i >= 0 and k >= -N + i and k >= -j and j <= i } diff --git a/cloog-0.17.0/isl/test_inputs/philippe3vars3pars.pwqp b/cloog-0.17.0/isl/test_inputs/philippe3vars3pars.pwqp deleted file mode 100644 index f81b8cc..0000000 --- a/cloog-0.17.0/isl/test_inputs/philippe3vars3pars.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N, M, L] -> { [i, j, k] -> (((1/2 * i + 1/2 * i^2) + j) + k^3) : i >= 0 and k >= -N + i and k >= -M - j and j <= L + i and L >= 0 and L >= -M } diff --git a/cloog-0.17.0/isl/test_inputs/philippeNeg.pwqp b/cloog-0.17.0/isl/test_inputs/philippeNeg.pwqp deleted file mode 100644 index 24dc805..0000000 --- a/cloog-0.17.0/isl/test_inputs/philippeNeg.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N] -> { [i, j] -> ((1/2 * i + 1/2 * i^2) + j) : i <= N and j >= -1 and j <= i } diff --git a/cloog-0.17.0/isl/test_inputs/philippePolynomialCoeff.pwqp b/cloog-0.17.0/isl/test_inputs/philippePolynomialCoeff.pwqp deleted file mode 100644 index e6327c7..0000000 --- a/cloog-0.17.0/isl/test_inputs/philippePolynomialCoeff.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N, M] -> { [i, j] -> ((N * i + (1/5 * N + N^2) * i^2) + 5 * j) : i <= N and j >= 0 and j <= i and M >= 0 } diff --git a/cloog-0.17.0/isl/test_inputs/philippePolynomialCoeff1P.pwqp b/cloog-0.17.0/isl/test_inputs/philippePolynomialCoeff1P.pwqp deleted file mode 100644 index ae01d2f..0000000 --- a/cloog-0.17.0/isl/test_inputs/philippePolynomialCoeff1P.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N] -> { [i, j] -> ((N * i + (1/5 * N + N^2) * i^2) + 5 * j) : i <= N and j >= 0 and j <= i } diff --git a/cloog-0.17.0/isl/test_inputs/product.pwqp b/cloog-0.17.0/isl/test_inputs/product.pwqp deleted file mode 100644 index ee48b85..0000000 --- a/cloog-0.17.0/isl/test_inputs/product.pwqp +++ /dev/null @@ -1 +0,0 @@ -[N] -> { [i0, i1, i2] -> (i0^3 * i1^2 + N * i1 * i2) : i0 >= 0 and i0 <= N and i1 >= 0 and i1 <= N and i2 >= 0 and i2 <= N } diff --git a/cloog-0.17.0/isl/test_inputs/seghir-vd.pip b/cloog-0.17.0/isl/test_inputs/seghir-vd.pip deleted file mode 100644 index b5395fb..0000000 --- a/cloog-0.17.0/isl/test_inputs/seghir-vd.pip +++ /dev/null @@ -1,17 +0,0 @@ -0 6 - --1 - -9 8 - 0 0 0 1 1 0 0 2 - 1 2 1 0 0 1 0 0 - 1 0 1 0 -1 0 0 -1 - 1 -2 -1 0 0 0 0 -1 - 1 7 3 0 0 0 0 -1 - 1 -6 -4 0 1 0 3 1 - 1 -7 -3 0 0 1 6 4 - 1 0 0 0 0 0 1 0 - 1 0 0 0 0 0 0 1 - -Urs_parms -Urs_unknowns diff --git a/cloog-0.17.0/isl/test_inputs/set.omega b/cloog-0.17.0/isl/test_inputs/set.omega deleted file mode 100644 index ac8485f..0000000 --- a/cloog-0.17.0/isl/test_inputs/set.omega +++ /dev/null @@ -1 +0,0 @@ -{[y]: Exists ( alpha : 2alpha = y)} diff --git a/cloog-0.17.0/isl/test_inputs/small.pip b/cloog-0.17.0/isl/test_inputs/small.pip deleted file mode 100644 index 59557d2..0000000 --- a/cloog-0.17.0/isl/test_inputs/small.pip +++ /dev/null @@ -1,9 +0,0 @@ -0 2 - --1 - -4 4 -1 1 0 0 -1 0 1 0 -1 1 -3 12 -1 -2 1 3 diff --git a/cloog-0.17.0/isl/test_inputs/sor1d.pip b/cloog-0.17.0/isl/test_inputs/sor1d.pip deleted file mode 100644 index 1bef89e..0000000 --- a/cloog-0.17.0/isl/test_inputs/sor1d.pip +++ /dev/null @@ -1,28 +0,0 @@ -2 4 - 1 1 0 0 - 1 0 1 0 - --1 - -20 8 - - 0 -1 0 0 0 0 0 2 - 0 0 -1 0 0 0 0 1 - 0 0 0 -1 0 0 0 2 - 0 0 0 0 -1 0 0 4 - 1 0 0 0 1 0 0 -2 - 1 -2 0 2 1 0 0 -4 - 1 0 0 0 -1 0 1 -1 - 1 2 0 -2 -1 0 0 5 - 1 0 0 1 0 0 0 -1 - 1 0 -2 1 0 0 0 0 - 1 -2 0 2 0 0 1 -5 - 1 0 0 -1 0 1 0 0 - 1 0 2 -1 0 0 0 1 - 1 2 0 -2 0 0 0 3 - 1 0 1 0 0 0 0 0 - 1 -2 4 0 0 0 1 -3 - 1 0 -2 0 0 1 0 0 - 1 2 -4 0 0 0 0 3 - 1 2 0 0 0 0 0 1 - 1 -2 0 0 0 2 1 -5 diff --git a/cloog-0.17.0/isl/test_inputs/split.pwqp b/cloog-0.17.0/isl/test_inputs/split.pwqp deleted file mode 100644 index 1804563..0000000 --- a/cloog-0.17.0/isl/test_inputs/split.pwqp +++ /dev/null @@ -1 +0,0 @@ -[n] -> { [x] -> -1 + [(x+5)/7] : -n - 20 <= x <= n } diff --git a/cloog-0.17.0/isl/test_inputs/square.pip b/cloog-0.17.0/isl/test_inputs/square.pip deleted file mode 100644 index 7bb3f0c..0000000 --- a/cloog-0.17.0/isl/test_inputs/square.pip +++ /dev/null @@ -1,9 +0,0 @@ -0 3 - --1 - -4 5 -1 1 0 0 0 -1 -1 0 1 0 -1 0 1 0 0 -1 0 -1 1 0 diff --git a/cloog-0.17.0/isl/test_inputs/sven.pip b/cloog-0.17.0/isl/test_inputs/sven.pip deleted file mode 100644 index 8602769..0000000 --- a/cloog-0.17.0/isl/test_inputs/sven.pip +++ /dev/null @@ -1,7 +0,0 @@ -0 3 - --1 - -2 3 -1 1 -4 -1 -1 10 diff --git a/cloog-0.17.0/isl/test_inputs/test3Deg3Var.pwqp b/cloog-0.17.0/isl/test_inputs/test3Deg3Var.pwqp deleted file mode 100644 index d9a9ea9..0000000 --- a/cloog-0.17.0/isl/test_inputs/test3Deg3Var.pwqp +++ /dev/null @@ -1 +0,0 @@ -[p] -> { [n, m] -> (n + n^3) : n >= 1 and m >= n and m <= p } diff --git a/cloog-0.17.0/isl/test_inputs/tobi.pip b/cloog-0.17.0/isl/test_inputs/tobi.pip deleted file mode 100644 index c31beae..0000000 --- a/cloog-0.17.0/isl/test_inputs/tobi.pip +++ /dev/null @@ -1,15 +0,0 @@ -2 3 -1 1 -281 -1 -1 14000 - --1 - -6 6 -0 -392 0 8 -1 0 -0 392 8 0 1 0 -1 -1 0 0 0 0 -1 1 0 0 0 35 -1 392 0 0 1 0 -1 -392 0 0 -1 280 - -Urs_unknowns diff --git a/cloog-0.17.0/isl/test_inputs/toplas.pwqp b/cloog-0.17.0/isl/test_inputs/toplas.pwqp deleted file mode 100644 index 9c09995..0000000 --- a/cloog-0.17.0/isl/test_inputs/toplas.pwqp +++ /dev/null @@ -1 +0,0 @@ -[n] -> { [i0, i1] -> (((4 * n - n^2) + (-3/2 + 2 * n) * i0 - 1/2 * i0^2) - i1) : i1 >= -1 + 3n - i0 and i1 >= -1 + 2n - i0 and i0 >= 0 and i1 <= -2 + 4n - i0 and i0 <= -2 + 4n and i0 <= -1 + 3n and i1 >= 0 and i1 <= -1 + n } diff --git a/cloog-0.17.0/isl/test_inputs/unexpanded.pwqp b/cloog-0.17.0/isl/test_inputs/unexpanded.pwqp deleted file mode 100644 index 5626d3b..0000000 --- a/cloog-0.17.0/isl/test_inputs/unexpanded.pwqp +++ /dev/null @@ -1 +0,0 @@ -{ [x, y] -> ((x - x^2) * y + (-x + x^2) * y^2) : x >= 0 and x <= 2 and y >= 0 and y <= 2 } diff --git a/cloog-0.17.0/m4/ax_cc_maxopt.m4 b/cloog-0.17.0/m4/ax_cc_maxopt.m4 deleted file mode 100644 index da415be..0000000 --- a/cloog-0.17.0/m4/ax_cc_maxopt.m4 +++ /dev/null @@ -1,178 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_cc_maxopt.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CC_MAXOPT -# -# DESCRIPTION -# -# Try to turn on "good" C optimization flags for various compilers and -# architectures, for some definition of "good". (In our case, good for -# FFTW and hopefully for other scientific codes. Modify as needed.) -# -# The user can override the flags by setting the CFLAGS environment -# variable. The user can also specify --enable-portable-binary in order to -# disable any optimization flags that might result in a binary that only -# runs on the host architecture. -# -# Note also that the flags assume that ANSI C aliasing rules are followed -# by the code (e.g. for gcc's -fstrict-aliasing), and that floating-point -# computations can be re-ordered as needed. -# -# Requires macros: AX_CHECK_COMPILER_FLAGS, AX_COMPILER_VENDOR, -# AX_GCC_ARCHFLAG, AX_GCC_X86_CPUID. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CC_MAXOPT], -[ -AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AX_COMPILER_VENDOR]) -AC_REQUIRE([AC_CANONICAL_HOST]) - -AC_ARG_ENABLE(portable-binary, [AC_HELP_STRING([--enable-portable-binary], [disable compiler optimizations that would produce unportable binaries])], - acx_maxopt_portable=$withval, acx_maxopt_portable=no) - -# Try to determine "good" native compiler flags if none specified via CFLAGS -if test "$ac_test_CFLAGS" != "set"; then - CFLAGS="" - case $ax_cv_c_compiler_vendor in - dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host" - if test "x$acx_maxopt_portable" = xno; then - CFLAGS="$CFLAGS -arch host" - fi;; - - sun) CFLAGS="-native -fast -xO5 -dalign" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS -xarch=generic" - fi;; - - hp) CFLAGS="+Oall +Optrs_ansi +DSnative" - if test "x$acx_maxopt_portable" = xyes; then - CFLAGS="$CFLAGS +DAportable" - fi;; - - ibm) if test "x$acx_maxopt_portable" = xno; then - xlc_opt="-qarch=auto -qtune=auto" - else - xlc_opt="-qtune=auto" - fi - AX_CHECK_COMPILER_FLAGS($xlc_opt, - CFLAGS="-O3 -qansialias -w $xlc_opt", - [CFLAGS="-O3 -qansialias -w" - echo "******************************************************" - echo "* You seem to have the IBM C compiler. It is *" - echo "* recommended for best performance that you use: *" - echo "* *" - echo "* CFLAGS=-O3 -qarch=xxx -qtune=xxx -qansialias -w *" - echo "* ^^^ ^^^ *" - echo "* where xxx is pwr2, pwr3, 604, or whatever kind of *" - echo "* CPU you have. (Set the CFLAGS environment var. *" - echo "* and re-run configure.) For more info, man cc. *" - echo "******************************************************"]) - ;; - - intel) CFLAGS="-O3 -ansi_alias" - if test "x$acx_maxopt_portable" = xno; then - icc_archflag=unknown - icc_flags="" - case $host_cpu in - i686*|x86_64*) - # icc accepts gcc assembly syntax, so these should work: - AX_GCC_X86_CPUID(0) - AX_GCC_X86_CPUID(1) - case $ax_cv_gcc_x86_cpuid_0 in # see AX_GCC_ARCHFLAG - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *6a?:*[[234]]:*:*|*6[[789b]]?:*:*:*) icc_flags="-xK";; - *f3[[347]]:*:*:*|*f4[1347]:*:*:*) icc_flags="-xP -xN -xW -xK";; - *f??:*:*:*) icc_flags="-xN -xW -xK";; - esac ;; - esac ;; - esac - if test "x$icc_flags" != x; then - for flag in $icc_flags; do - AX_CHECK_COMPILER_FLAGS($flag, [icc_archflag=$flag; break]) - done - fi - AC_MSG_CHECKING([for icc architecture flag]) - AC_MSG_RESULT($icc_archflag) - if test "x$icc_archflag" != xunknown; then - CFLAGS="$CFLAGS $icc_archflag" - fi - fi - ;; - - gnu) - # default optimization flags for gcc on all systems - CFLAGS="-O3 -fomit-frame-pointer" - - # -malign-double for x86 systems - AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double") - - # -fstrict-aliasing for gcc-2.95+ - AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing, - CFLAGS="$CFLAGS -fstrict-aliasing") - - # note that we enable "unsafe" fp optimization with other compilers, too - AX_CHECK_COMPILER_FLAGS(-ffast-math, CFLAGS="$CFLAGS -ffast-math") - - AX_GCC_ARCHFLAG($acx_maxopt_portable) - ;; - esac - - if test -z "$CFLAGS"; then - echo "" - echo "********************************************************" - echo "* WARNING: Don't know the best CFLAGS for this system *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "* (otherwise, a default of CFLAGS=-O3 will be used) *" - echo "********************************************************" - echo "" - CFLAGS="-O3" - fi - - AX_CHECK_COMPILER_FLAGS($CFLAGS, [], [ - echo "" - echo "********************************************************" - echo "* WARNING: The guessed CFLAGS don't seem to work with *" - echo "* your compiler. *" - echo "* Use ./configure CFLAGS=... to specify your own flags *" - echo "********************************************************" - echo "" - CFLAGS="" - ]) - -fi -]) diff --git a/cloog-0.17.0/m4/ax_cflags_warn_all.m4 b/cloog-0.17.0/m4/ax_cflags_warn_all.m4 deleted file mode 100644 index 026c6e9..0000000 --- a/cloog-0.17.0/m4/ax_cflags_warn_all.m4 +++ /dev/null @@ -1,149 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_cflags_warn_all.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] -# -# DESCRIPTION -# -# Try to find a compiler option that enables most reasonable warnings. -# -# For the GNU CC compiler it will be -Wall (and -ansi -pedantic) The -# result is added to the shellvar being CFLAGS by default. -# -# Currently this macro knows about GCC, Solaris C compiler, Digital Unix C -# compiler, C for AIX Compiler, HP-UX C compiler, IRIX C compiler, NEC -# SX-5 (Super-UX 10) C compiler, and Cray J90 (Unicos 10.0.0.8) C -# compiler. -# -# - $1 shell-variable-to-add-to : CFLAGS -# - $2 add-value-if-not-found : nothing -# - $3 action-if-found : add value to shellvariable -# - $4 action-if-not-found : nothing -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CFLAGS_WARN_ALL],[dnl -AS_VAR_PUSHDEF([FLAGS],[CFLAGS])dnl -AS_VAR_PUSHDEF([VAR],[ac_cv_cflags_warn_all])dnl -AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings], -VAR,[VAR="no, unknown" - AC_LANG_SAVE - AC_LANG_C - ac_save_[]FLAGS="$[]FLAGS" -for ac_arg dnl -in "-pedantic % -Wall" dnl GCC - "-xstrconst % -v" dnl Solaris C - "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix - "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX - "-ansi -ansiE % -fullwarn" dnl IRIX - "+ESlit % +w1" dnl HP-UX C - "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10) - "-h conform % -h msglevel 2" dnl Cray C (Unicos) - # -do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - AC_TRY_COMPILE([],[return 0;], - [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) -done - FLAGS="$ac_save_[]FLAGS" - AC_LANG_RESTORE -]) -case ".$VAR" in - .ok|.ok,*) m4_ifvaln($3,$3) ;; - .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[ - AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;; - *) m4_ifvaln($3,$3,[ - if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null - then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR]) - else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR" - fi ]) ;; -esac -AS_VAR_POPDEF([VAR])dnl -AS_VAR_POPDEF([FLAGS])dnl -]) - -dnl the only difference - the LANG selection... and the default FLAGS - -AC_DEFUN([AX_CXXFLAGS_WARN_ALL],[dnl -AS_VAR_PUSHDEF([FLAGS],[CXXFLAGS])dnl -AS_VAR_PUSHDEF([VAR],[ax_cv_cxxflags_warn_all])dnl -AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings], -VAR,[VAR="no, unknown" - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - ac_save_[]FLAGS="$[]FLAGS" -for ac_arg dnl -in "-pedantic % -Wall" dnl GCC - "-xstrconst % -v" dnl Solaris C - "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix - "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX - "-ansi -ansiE % -fullwarn" dnl IRIX - "+ESlit % +w1" dnl HP-UX C - "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10) - "-h conform % -h msglevel 2" dnl Cray C (Unicos) - # -do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - AC_TRY_COMPILE([],[return 0;], - [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) -done - FLAGS="$ac_save_[]FLAGS" - AC_LANG_RESTORE -]) -case ".$VAR" in - .ok|.ok,*) m4_ifvaln($3,$3) ;; - .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[ - AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;; - *) m4_ifvaln($3,$3,[ - if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null - then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR]) - else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR" - fi ]) ;; -esac -AS_VAR_POPDEF([VAR])dnl -AS_VAR_POPDEF([FLAGS])dnl -]) - -dnl implementation tactics: -dnl the for-argument contains a list of options. The first part of -dnl these does only exist to detect the compiler - usually it is -dnl a global option to enable -ansi or -extrawarnings. All other -dnl compilers will fail about it. That was needed since a lot of -dnl compilers will give false positives for some option-syntax -dnl like -Woption or -Xoption as they think of it is a pass-through -dnl to later compile stages or something. The "%" is used as a -dnl delimimiter. A non-option comment can be given after "%%" marks -dnl which will be shown but not added to the respective C/CXXFLAGS. diff --git a/cloog-0.17.0/m4/ax_check_compiler_flags.m4 b/cloog-0.17.0/m4/ax_check_compiler_flags.m4 deleted file mode 100644 index 7da8324..0000000 --- a/cloog-0.17.0/m4/ax_check_compiler_flags.m4 +++ /dev/null @@ -1,74 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_check_compiler_flags.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CHECK_COMPILER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE]) -# -# DESCRIPTION -# -# Check whether the given compiler FLAGS work with the current language's -# compiler, or whether they give an error. (Warnings, however, are -# ignored.) -# -# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on -# success/failure. -# -# LICENSE -# -# Copyright (c) 2009 Steven G. Johnson -# Copyright (c) 2009 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CHECK_COMPILER_FLAGS], -[AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX -AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1]) -dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname: -AS_LITERAL_IF([$1], - [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1]), [ - ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=yes, - AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=no) - _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])], - [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=yes, - eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1])=no) - _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS]) -eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_[$1]) -AC_MSG_RESULT($ax_check_compiler_flags) -if test "x$ax_check_compiler_flags" = xyes; then - m4_default([$2], :) -else - m4_default([$3], :) -fi -])dnl AX_CHECK_COMPILER_FLAGS diff --git a/cloog-0.17.0/m4/ax_compiler_vendor.m4 b/cloog-0.17.0/m4/ax_compiler_vendor.m4 deleted file mode 100644 index b074260..0000000 --- a/cloog-0.17.0/m4/ax_compiler_vendor.m4 +++ /dev/null @@ -1,61 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_compiler_vendor.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_COMPILER_VENDOR -# -# DESCRIPTION -# -# Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, sun, -# hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft, -# watcom, etc. The vendor is returned in the cache variable -# $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_COMPILER_VENDOR], -[ -AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, - [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown - # note: don't check for gcc first since some other compilers define __GNUC__ - for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do - vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ -#if !($vencpp) - thisisanerror; -#endif -])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break]) - done - ]) -]) diff --git a/cloog-0.17.0/m4/ax_create_pkgconfig_info.m4 b/cloog-0.17.0/m4/ax_create_pkgconfig_info.m4 deleted file mode 100644 index 60ac548..0000000 --- a/cloog-0.17.0/m4/ax_create_pkgconfig_info.m4 +++ /dev/null @@ -1,349 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_create_pkgconfig_info.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CREATE_PKGCONFIG_INFO [(outputfile, [requires [,libs [,summary [,cflags [, ldflags]]]]])] -# -# DESCRIPTION -# -# Defaults: -# -# $1 = $PACKAGE_NAME.pc -# $2 = (empty) -# $3 = $PACKAGE_LIBS $LIBS (as set at that point in configure.ac) -# $4 = $PACKAGE_SUMMARY (or $1 Library) -# $5 = $CPPFLAGS $PACKAGE_CFLAGS (as set at the point in configure.ac) -# $6 = $LDFLAGS $PACKAGE_LDFLAGS (as set at the point in configure.ac) -# -# PACKAGE_NAME defaults to $PACKAGE if not set. -# PACKAGE_LIBS defaults to -l$PACKAGE_NAME if not set. -# -# The resulting file is called $PACKAGE.pc.in / $PACKAGE.pc -# -# You will find this macro most useful in conjunction with -# ax_spec_defaults that can read good initializers from the .spec file. In -# consequencd, most of the generatable installable stuff can be made from -# information being updated in a single place for the whole project. -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# Copyright (c) 2008 Sven Verdoolaege -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_CREATE_PKGCONFIG_INFO],[dnl -AS_VAR_PUSHDEF([PKGCONFIG_suffix],[ax_create_pkgconfig_suffix])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libdir],[ax_create_pkgconfig_libdir])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libfile],[ax_create_pkgconfig_libfile])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libname],[ax_create_pkgconfig_libname])dnl -AS_VAR_PUSHDEF([PKGCONFIG_version],[ax_create_pkgconfig_version])dnl -AS_VAR_PUSHDEF([PKGCONFIG_description],[ax_create_pkgconfig_description])dnl -AS_VAR_PUSHDEF([PKGCONFIG_requires],[ax_create_pkgconfig_requires])dnl -AS_VAR_PUSHDEF([PKGCONFIG_pkglibs],[ax_create_pkgconfig_pkglibs])dnl -AS_VAR_PUSHDEF([PKGCONFIG_libs],[ax_create_pkgconfig_libs])dnl -AS_VAR_PUSHDEF([PKGCONFIG_ldflags],[ax_create_pkgconfig_ldflags])dnl -AS_VAR_PUSHDEF([PKGCONFIG_cppflags],[ax_create_pkgconfig_cppflags])dnl -AS_VAR_PUSHDEF([PKGCONFIG_generate],[ax_create_pkgconfig_generate])dnl -AS_VAR_PUSHDEF([PKGCONFIG_src_libdir],[ax_create_pkgconfig_src_libdir])dnl -AS_VAR_PUSHDEF([PKGCONFIG_src_headers],[ax_create_pkgconfig_src_headers])dnl - -# we need the expanded forms... -test "x$prefix" = xNONE && prefix=$ac_default_prefix -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -AC_MSG_CHECKING(our pkgconfig libname) -test ".$PKGCONFIG_libname" != "." || \ -PKGCONFIG_libname="ifelse($1,,${PACKAGE_NAME},`basename $1 .pc`)" -test ".$PKGCONFIG_libname" != "." || \ -PKGCONFIG_libname="$PACKAGE" -PKGCONFIG_libname=`eval echo "$PKGCONFIG_libname"` -PKGCONFIG_libname=`eval echo "$PKGCONFIG_libname"` -AC_MSG_RESULT($PKGCONFIG_libname) - -AC_MSG_CHECKING(our pkgconfig version) -test ".$PKGCONFIG_version" != "." || \ -PKGCONFIG_version="${PACKAGE_VERSION}" -test ".$PKGCONFIG_version" != "." || \ -PKGCONFIG_version="$VERSION" -PKGCONFIG_version=`eval echo "$PKGCONFIG_version"` -PKGCONFIG_version=`eval echo "$PKGCONFIG_version"` -AC_MSG_RESULT($PKGCONFIG_version) - -AC_MSG_CHECKING(our pkgconfig_libdir) -test ".$pkgconfig_libdir" = "." && \ -pkgconfig_libdir='${libdir}/pkgconfig' -PKGCONFIG_libdir=`eval echo "$pkgconfig_libdir"` -PKGCONFIG_libdir=`eval echo "$PKGCONFIG_libdir"` -PKGCONFIG_libdir=`eval echo "$PKGCONFIG_libdir"` -AC_MSG_RESULT($pkgconfig_libdir) -test "$pkgconfig_libdir" != "$PKGCONFIG_libdir" && ( -AC_MSG_RESULT(expanded our pkgconfig_libdir... $PKGCONFIG_libdir)) -AC_SUBST([pkgconfig_libdir]) - -AC_MSG_CHECKING(our pkgconfig_libfile) -test ".$pkgconfig_libfile" != "." || \ -pkgconfig_libfile="ifelse($1,,$PKGCONFIG_libname.pc,`basename $1`)" -PKGCONFIG_libfile=`eval echo "$pkgconfig_libfile"` -PKGCONFIG_libfile=`eval echo "$PKGCONFIG_libfile"` -AC_MSG_RESULT($pkgconfig_libfile) -test "$pkgconfig_libfile" != "$PKGCONFIG_libfile" && ( -AC_MSG_RESULT(expanded our pkgconfig_libfile... $PKGCONFIG_libfile)) -AC_SUBST([pkgconfig_libfile]) - -AC_MSG_CHECKING(our package / suffix) -PKGCONFIG_suffix="$program_suffix" -test ".$PKGCONFIG_suffix" != .NONE || PKGCONFIG_suffix="" -AC_MSG_RESULT(${PACKAGE_NAME} / ${PKGCONFIG_suffix}) - -AC_MSG_CHECKING(our pkgconfig description) -PKGCONFIG_description="ifelse($4,,$PACKAGE_SUMMARY,$4)" -test ".$PKGCONFIG_description" != "." || \ -PKGCONFIG_description="$PKGCONFIG_libname Library" -PKGCONFIG_description=`eval echo "$PKGCONFIG_description"` -PKGCONFIG_description=`eval echo "$PKGCONFIG_description"` -AC_MSG_RESULT($PKGCONFIG_description) - -AC_MSG_CHECKING(our pkgconfig requires) -PKGCONFIG_requires="ifelse($2,,$PACKAGE_REQUIRES,$2)" -PKGCONFIG_requires=`eval echo "$PKGCONFIG_requires"` -PKGCONFIG_requires=`eval echo "$PKGCONFIG_requires"` -AC_MSG_RESULT($PKGCONFIG_requires) - -AC_MSG_CHECKING(our pkgconfig ext libs) -PKGCONFIG_pkglibs="$PACKAGE_LIBS" -test ".$PKGCONFIG_pkglibs" != "." || PKGCONFIG_pkglibs="-l$PKGCONFIG_libname" -PKGCONFIG_libs="ifelse($3,,$PKGCONFIG_pkglibs $LIBS,$3)" -PKGCONFIG_libs=`eval echo "$PKGCONFIG_libs"` -PKGCONFIG_libs=`eval echo "$PKGCONFIG_libs"` -AC_MSG_RESULT($PKGCONFIG_libs) - -AC_MSG_CHECKING(our pkgconfig cppflags) -PKGCONFIG_cppflags="ifelse($5,,$CPPFLAGS $PACKAGE_CFLAGS,$5)" -PKGCONFIG_cppflags=`eval echo "$PKGCONFIG_cppflags"` -PKGCONFIG_cppflags=`eval echo "$PKGCONFIG_cppflags"` -AC_MSG_RESULT($PKGCONFIG_cppflags) - -AC_MSG_CHECKING(our pkgconfig ldflags) -PKGCONFIG_ldflags="ifelse($6,,$LDFLAGS $PACKAGE_LDFLAGS,$5)" -PKGCONFIG_ldflags=`eval echo "$PKGCONFIG_ldflags"` -PKGCONFIG_ldflags=`eval echo "$PKGCONFIG_ldflags"` -AC_MSG_RESULT($PKGCONFIG_ldflags) - -test ".$PKGCONFIG_generate" != "." || \ -PKGCONFIG_generate="ifelse($1,,$PKGCONFIG_libname.pc,$1)" -PKGCONFIG_generate=`eval echo "$PKGCONFIG_generate"` -PKGCONFIG_generate=`eval echo "$PKGCONFIG_generate"` -test "$pkgconfig_libfile" != "$PKGCONFIG_generate" && ( -AC_MSG_RESULT(generate the pkgconfig later... $PKGCONFIG_generate)) - -if test ".$PKGCONFIG_src_libdir" = "." ; then -PKGCONFIG_src_libdir=`pwd` -PKGCONFIG_src_libdir=`AS_DIRNAME("$PKGCONFIG_src_libdir/$PKGCONFIG_generate")` -test ! -d $PKGCONFIG_src_libdir/src || \ -PKGCONFIG_src_libdir="$PKGCONFIG_src_libdir/src" -case ".$objdir" in -*libs) PKGCONFIG_src_libdir="$PKGCONFIG_src_libdir/$objdir" ;; esac -AC_MSG_RESULT(noninstalled pkgconfig -L $PKGCONFIG_src_libdir) -fi - -if test ".$PKGCONFIG_src_headers" = "." ; then -PKGCONFIG_src_headers=`pwd` -v="$ac_top_srcdir" ; -test ".$v" != "." || v="$ax_spec_dir" -test ".$v" != "." || v="$srcdir" -case "$v" in /*) PKGCONFIG_src_headers="" ;; esac -PKGCONFIG_src_headers=`AS_DIRNAME("$PKGCONFIG_src_headers/$v/x")` -test ! -d $PKGCONFIG_src_headers/incl[]ude || \ -PKGCONFIG_src_headers="$PKGCONFIG_src_headers/incl[]ude" -AC_MSG_RESULT(noninstalled pkgconfig -I $PKGCONFIG_src_headers) -fi - - -dnl AC_CONFIG_COMMANDS crap disallows to use $PKGCONFIG_libfile here... -AC_CONFIG_COMMANDS([$ax_create_pkgconfig_generate],[ -pkgconfig_generate="$ax_create_pkgconfig_generate" -if test ! -f "$pkgconfig_generate.in" -then generate="true" -elif grep ' generated by configure ' $pkgconfig_generate.in >/dev/null -then generate="true" -else generate="false"; -fi -if $generate ; then -AC_MSG_NOTICE(creating $pkgconfig_generate.in) -cat > $pkgconfig_generate.in <conftest.sed < $pkgconfig_generate -if test ! -s $pkgconfig_generate ; then - AC_MSG_ERROR([$pkgconfig_generate is empty]) -fi ; rm conftest.sed # DONE generate $pkgconfig_generate -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.pc/'` -AC_MSG_NOTICE(creating $pkgconfig_uninstalled) -cat >conftest.sed < $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - AC_MSG_ERROR([$pkgconfig_uninstalled is empty]) -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled - pkgconfig_requires_add=`echo ${pkgconfig_requires}` -if test ".$pkgconfig_requires_add" != "." ; then - pkgconfig_requires_add="pkg-config $pkgconfig_requires_add" - else pkgconfig_requires_add=":" ; fi -pkgconfig_uninstalled=`echo $pkgconfig_generate |sed 's/.pc$/-uninstalled.sh/'` -AC_MSG_NOTICE(creating $pkgconfig_uninstalled) -cat >conftest.sed <Name:>for option\\; do case \"\$option\" in --list-all|--name) echo > -s>Description: *>\\;\\; --help) pkg-config --help \\; echo Buildscript Of > -s>Version: *>\\;\\; --modversion|--version) echo > -s>Requires:>\\;\\; --requires) echo $pkgconfig_requires_add> -s>Libs: *>\\;\\; --libs) echo > -s>Cflags: *>\\;\\; --cflags) echo > -/--libs)/a\\ - $pkgconfig_requires_add -/--cflags)/a\\ - $pkgconfig_requires_add\\ -;; --variable=*) eval echo '\$'\`echo \$option | sed -e 's/.*=//'\`\\ -;; --uninstalled) exit 0 \\ -;; *) ;; esac done -AXEOF -sed -f conftest.sed $pkgconfig_generate.in > $pkgconfig_uninstalled -if test ! -s $pkgconfig_uninstalled ; then - AC_MSG_ERROR([$pkgconfig_uninstalled is empty]) -fi ; rm conftest.sed # DONE generate $pkgconfig_uninstalled -],[ -dnl AC_CONFIG_COMMANDS crap, the AS_PUSHVAR defines are invalid here... -ax_create_pkgconfig_generate="$ax_create_pkgconfig_generate" -pkgconfig_prefix='$prefix' -pkgconfig_execprefix='$exec_prefix' -pkgconfig_bindir='$bindir' -pkgconfig_libdir='$libdir' -pkgconfig_includedir='$includedir' -pkgconfig_datarootdir='$datarootdir' -pkgconfig_datadir='$datadir' -pkgconfig_sysconfdir='$sysconfdir' -pkgconfig_suffix='$ax_create_pkgconfig_suffix' -pkgconfig_package='$PACKAGE_NAME' -pkgconfig_libname='$ax_create_pkgconfig_libname' -pkgconfig_description='$ax_create_pkgconfig_description' -pkgconfig_version='$ax_create_pkgconfig_version' -pkgconfig_requires='$ax_create_pkgconfig_requires' -pkgconfig_libs='$ax_create_pkgconfig_libs' -pkgconfig_ldflags='$ax_create_pkgconfig_ldflags' -pkgconfig_cppflags='$ax_create_pkgconfig_cppflags' -pkgconfig_src_libdir='$ax_create_pkgconfig_src_libdir' -pkgconfig_src_headers='$ax_create_pkgconfig_src_headers' -])dnl -AS_VAR_POPDEF([PKGCONFIG_suffix])dnl -AS_VAR_POPDEF([PKGCONFIG_libdir])dnl -AS_VAR_POPDEF([PKGCONFIG_libfile])dnl -AS_VAR_POPDEF([PKGCONFIG_libname])dnl -AS_VAR_POPDEF([PKGCONFIG_version])dnl -AS_VAR_POPDEF([PKGCONFIG_description])dnl -AS_VAR_POPDEF([PKGCONFIG_requires])dnl -AS_VAR_POPDEF([PKGCONFIG_pkglibs])dnl -AS_VAR_POPDEF([PKGCONFIG_libs])dnl -AS_VAR_POPDEF([PKGCONFIG_ldflags])dnl -AS_VAR_POPDEF([PKGCONFIG_cppflags])dnl -AS_VAR_POPDEF([PKGCONFIG_generate])dnl -AS_VAR_POPDEF([PKGCONFIG_src_libdir])dnl -AS_VAR_POPDEF([PKGCONFIG_src_headers])dnl -]) diff --git a/cloog-0.17.0/m4/ax_gcc_archflag.m4 b/cloog-0.17.0/m4/ax_gcc_archflag.m4 deleted file mode 100644 index dedeef4..0000000 --- a/cloog-0.17.0/m4/ax_gcc_archflag.m4 +++ /dev/null @@ -1,213 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_gcc_archflag.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_GCC_ARCHFLAG([PORTABLE?], [ACTION-SUCCESS], [ACTION-FAILURE]) -# -# DESCRIPTION -# -# This macro tries to guess the "native" arch corresponding to the target -# architecture for use with gcc's -march=arch or -mtune=arch flags. If -# found, the cache variable $ax_cv_gcc_archflag is set to this flag and -# ACTION-SUCCESS is executed; otherwise $ax_cv_gcc_archflag is is set to -# "unknown" and ACTION-FAILURE is executed. The default ACTION-SUCCESS is -# to add $ax_cv_gcc_archflag to the end of $CFLAGS. -# -# PORTABLE? should be either [yes] (default) or [no]. In the former case, -# the flag is set to -mtune (or equivalent) so that the architecture is -# only used for tuning, but the instruction set used is still portable. In -# the latter case, the flag is set to -march (or equivalent) so that -# architecture-specific instructions are enabled. -# -# The user can specify --with-gcc-arch= in order to override the -# macro's choice of architecture, or --without-gcc-arch to disable this. -# -# When cross-compiling, or if $CC is not gcc, then ACTION-FAILURE is -# called unless the user specified --with-gcc-arch manually. -# -# Requires macros: AX_CHECK_COMPILER_FLAGS, AX_GCC_X86_CPUID -# -# (The main emphasis here is on recent CPUs, on the principle that doing -# high-performance computing on old hardware is uncommon.) -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_GCC_ARCHFLAG], -[AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AC_CANONICAL_HOST]) - -AC_ARG_WITH(gcc-arch, [AC_HELP_STRING([--with-gcc-arch=], [use architecture for gcc -march/-mtune, instead of guessing])], - ax_gcc_arch=$withval, ax_gcc_arch=yes) - -AC_MSG_CHECKING([for gcc architecture flag]) -AC_MSG_RESULT([]) -AC_CACHE_VAL(ax_cv_gcc_archflag, -[ -ax_cv_gcc_archflag="unknown" - -if test "$GCC" = yes; then - -if test "x$ax_gcc_arch" = xyes; then -ax_gcc_arch="" -if test "$cross_compiling" = no; then -case $host_cpu in - i[[3456]]86*|x86_64*) # use cpuid codes, in part from x86info-1.7 by D. Jones - AX_GCC_X86_CPUID(0) - AX_GCC_X86_CPUID(1) - case $ax_cv_gcc_x86_cpuid_0 in - *:756e6547:*:*) # Intel - case $ax_cv_gcc_x86_cpuid_1 in - *5[[48]]?:*:*:*) ax_gcc_arch="pentium-mmx pentium" ;; - *5??:*:*:*) ax_gcc_arch=pentium ;; - *6[[3456]]?:*:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[[01]]:*:*) ax_gcc_arch="pentium2 pentiumpro" ;; - *6a?:*[[234]]:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6[[9d]]?:*:*:*) ax_gcc_arch="pentium-m pentium3 pentiumpro" ;; - *6[[78b]]?:*:*:*) ax_gcc_arch="pentium3 pentiumpro" ;; - *6??:*:*:*) ax_gcc_arch=pentiumpro ;; - *f3[[347]]:*:*:*|*f4[1347]:*:*:*) - case $host_cpu in - x86_64*) ax_gcc_arch="nocona pentium4 pentiumpro" ;; - *) ax_gcc_arch="prescott pentium4 pentiumpro" ;; - esac ;; - *f??:*:*:*) ax_gcc_arch="pentium4 pentiumpro";; - esac ;; - *:68747541:*:*) # AMD - case $ax_cv_gcc_x86_cpuid_1 in - *5[[67]]?:*:*:*) ax_gcc_arch=k6 ;; - *5[[8d]]?:*:*:*) ax_gcc_arch="k6-2 k6" ;; - *5[[9]]?:*:*:*) ax_gcc_arch="k6-3 k6" ;; - *60?:*:*:*) ax_gcc_arch=k7 ;; - *6[[12]]?:*:*:*) ax_gcc_arch="athlon k7" ;; - *6[[34]]?:*:*:*) ax_gcc_arch="athlon-tbird k7" ;; - *67?:*:*:*) ax_gcc_arch="athlon-4 athlon k7" ;; - *6[[68a]]?:*:*:*) - AX_GCC_X86_CPUID(0x80000006) # L2 cache size - case $ax_cv_gcc_x86_cpuid_0x80000006 in - *:*:*[[1-9a-f]]??????:*) # (L2 = ecx >> 16) >= 256 - ax_gcc_arch="athlon-xp athlon-4 athlon k7" ;; - *) ax_gcc_arch="athlon-4 athlon k7" ;; - esac ;; - *f[[4cef8b]]?:*:*:*) ax_gcc_arch="athlon64 k8" ;; - *f5?:*:*:*) ax_gcc_arch="opteron k8" ;; - *f7?:*:*:*) ax_gcc_arch="athlon-fx opteron k8" ;; - *f??:*:*:*) ax_gcc_arch="k8" ;; - esac ;; - *:746e6543:*:*) # IDT - case $ax_cv_gcc_x86_cpuid_1 in - *54?:*:*:*) ax_gcc_arch=winchip-c6 ;; - *58?:*:*:*) ax_gcc_arch=winchip2 ;; - *6[[78]]?:*:*:*) ax_gcc_arch=c3 ;; - *69?:*:*:*) ax_gcc_arch="c3-2 c3" ;; - esac ;; - esac - if test x"$ax_gcc_arch" = x; then # fallback - case $host_cpu in - i586*) ax_gcc_arch=pentium ;; - i686*) ax_gcc_arch=pentiumpro ;; - esac - fi - ;; - - sparc*) - AC_PATH_PROG([PRTDIAG], [prtdiag], [prtdiag], [$PATH:/usr/platform/`uname -i`/sbin/:/usr/platform/`uname -m`/sbin/]) - cputype=`(((grep cpu /proc/cpuinfo | cut -d: -f2) ; ($PRTDIAG -v |grep -i sparc) ; grep -i cpu /var/run/dmesg.boot ) | head -n 1) 2> /dev/null` - cputype=`echo "$cputype" | tr -d ' -' |tr $as_cr_LETTERS $as_cr_letters` - case $cputype in - *ultrasparciv*) ax_gcc_arch="ultrasparc4 ultrasparc3 ultrasparc v9" ;; - *ultrasparciii*) ax_gcc_arch="ultrasparc3 ultrasparc v9" ;; - *ultrasparc*) ax_gcc_arch="ultrasparc v9" ;; - *supersparc*|*tms390z5[[05]]*) ax_gcc_arch="supersparc v8" ;; - *hypersparc*|*rt62[[056]]*) ax_gcc_arch="hypersparc v8" ;; - *cypress*) ax_gcc_arch=cypress ;; - esac ;; - - alphaev5) ax_gcc_arch=ev5 ;; - alphaev56) ax_gcc_arch=ev56 ;; - alphapca56) ax_gcc_arch="pca56 ev56" ;; - alphapca57) ax_gcc_arch="pca57 pca56 ev56" ;; - alphaev6) ax_gcc_arch=ev6 ;; - alphaev67) ax_gcc_arch=ev67 ;; - alphaev68) ax_gcc_arch="ev68 ev67" ;; - alphaev69) ax_gcc_arch="ev69 ev68 ev67" ;; - alphaev7) ax_gcc_arch="ev7 ev69 ev68 ev67" ;; - alphaev79) ax_gcc_arch="ev79 ev7 ev69 ev68 ev67" ;; - - powerpc*) - cputype=`((grep cpu /proc/cpuinfo | head -n 1 | cut -d: -f2 | cut -d, -f1 | sed 's/ //g') ; /usr/bin/machine ; /bin/machine; grep CPU /var/run/dmesg.boot | head -n 1 | cut -d" " -f2) 2> /dev/null` - cputype=`echo $cputype | sed -e 's/ppc//g;s/ *//g'` - case $cputype in - *750*) ax_gcc_arch="750 G3" ;; - *740[[0-9]]*) ax_gcc_arch="$cputype 7400 G4" ;; - *74[[4-5]][[0-9]]*) ax_gcc_arch="$cputype 7450 G4" ;; - *74[[0-9]][[0-9]]*) ax_gcc_arch="$cputype G4" ;; - *970*) ax_gcc_arch="970 G5 power4";; - *POWER4*|*power4*|*gq*) ax_gcc_arch="power4 970";; - *POWER5*|*power5*|*gr*|*gs*) ax_gcc_arch="power5 power4 970";; - 603ev|8240) ax_gcc_arch="$cputype 603e 603";; - *) ax_gcc_arch=$cputype ;; - esac - ax_gcc_arch="$ax_gcc_arch powerpc" - ;; -esac -fi # not cross-compiling -fi # guess arch - -if test "x$ax_gcc_arch" != x -a "x$ax_gcc_arch" != xno; then -for arch in $ax_gcc_arch; do - if test "x[]m4_default([$1],yes)" = xyes; then # if we require portable code - flags="-mtune=$arch" - # -mcpu=$arch and m$arch generate nonportable code on every arch except - # x86. And some other arches (e.g. Alpha) don't accept -mtune. Grrr. - case $host_cpu in i*86|x86_64*) flags="$flags -mcpu=$arch -m$arch";; esac - else - flags="-march=$arch -mcpu=$arch -m$arch" - fi - for flag in $flags; do - AX_CHECK_COMPILER_FLAGS($flag, [ax_cv_gcc_archflag=$flag; break]) - done - test "x$ax_cv_gcc_archflag" = xunknown || break -done -fi - -fi # $GCC=yes -]) -AC_MSG_CHECKING([for gcc architecture flag]) -AC_MSG_RESULT($ax_cv_gcc_archflag) -if test "x$ax_cv_gcc_archflag" = xunknown; then - m4_default([$3],:) -else - m4_default([$2], [CFLAGS="$CFLAGS $ax_cv_gcc_archflag"]) -fi -]) diff --git a/cloog-0.17.0/m4/ax_gcc_x86_cpuid.m4 b/cloog-0.17.0/m4/ax_gcc_x86_cpuid.m4 deleted file mode 100644 index 5420b09..0000000 --- a/cloog-0.17.0/m4/ax_gcc_x86_cpuid.m4 +++ /dev/null @@ -1,77 +0,0 @@ -# =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_gcc_x86_cpuid.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_GCC_X86_CPUID(OP) -# -# DESCRIPTION -# -# On Pentium and later x86 processors, with gcc or a compiler that has a -# compatible syntax for inline assembly instructions, run a small program -# that executes the cpuid instruction with input OP. This can be used to -# detect the CPU type. -# -# On output, the values of the eax, ebx, ecx, and edx registers are stored -# as hexadecimal strings as "eax:ebx:ecx:edx" in the cache variable -# ax_cv_gcc_x86_cpuid_OP. -# -# If the cpuid instruction fails (because you are running a -# cross-compiler, or because you are not using gcc, or because you are on -# a processor that doesn't have this instruction), ax_cv_gcc_x86_cpuid_OP -# is set to the string "unknown". -# -# This macro mainly exists to be used in AX_GCC_ARCHFLAG. -# -# LICENSE -# -# Copyright (c) 2008 Steven G. Johnson -# Copyright (c) 2008 Matteo Frigo -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -AC_DEFUN([AX_GCC_X86_CPUID], -[AC_REQUIRE([AC_PROG_CC]) -AC_LANG_PUSH([C]) -AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1, - [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], [ - int op = $1, eax, ebx, ecx, edx; - FILE *f; - __asm__("cpuid" - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) - : "a" (op)); - f = fopen("conftest_cpuid", "w"); if (!f) return 1; - fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); - fclose(f); - return 0; -])], - [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid], - [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid], - [ax_cv_gcc_x86_cpuid_$1=unknown])]) -AC_LANG_POP([C]) -]) diff --git a/cloog-0.17.0/m4/ax_submodule.m4 b/cloog-0.17.0/m4/ax_submodule.m4 deleted file mode 100644 index 57e3a56..0000000 --- a/cloog-0.17.0/m4/ax_submodule.m4 +++ /dev/null @@ -1,63 +0,0 @@ -AC_DEFUN([AX_SUBMODULE], -[ - -AC_ARG_WITH($1, - [AS_HELP_STRING([--with-$1=$2], - [Which $1 to use])]) -case "system" in -$2) - AC_ARG_WITH($1_prefix, - [AS_HELP_STRING([--with-$1-prefix=DIR], - [Prefix of $1 installation])]) - AC_ARG_WITH($1_exec_prefix, - [AS_HELP_STRING([--with-$1-exec-prefix=DIR], - [Exec prefix of $1 installation])]) -esac -case "build" in -$2) - AC_ARG_WITH($1_builddir, - [AS_HELP_STRING([--with-$1-builddir=DIR], - [Location of $1 builddir])]) -esac -if test "x$with_$1_prefix" != "x" -a "x$with_$1_exec_prefix" = "x"; then - with_$1_exec_prefix=$with_$1_prefix -fi -if test "x$with_$1_prefix" != "x" -o "x$with_$1_exec_prefix" != "x"; then - if test "x$with_$1" != "x" -a "x$with_$1" != "xsystem"; then - AC_MSG_ERROR([Setting $with_$1_prefix implies use of system $1]) - fi - with_$1="system" -fi -if test "x$with_$1_builddir" != "x"; then - if test "x$with_$1" != "x" -a "x$with_$1" != "xbuild"; then - AC_MSG_ERROR([Setting $with_$1_builddir implies use of build $1]) - fi - with_$1="build" - $1_srcdir=`echo @abs_srcdir@ | $with_$1_builddir/config.status --file=-` - AC_MSG_NOTICE($1 sources in $$1_srcdir) -fi -case "$with_$1" in -$2) - ;; -*) - if test -d $srcdir/.git -a \ - -d $srcdir/$1 -a \ - ! -d $srcdir/$1/.git; then - AC_MSG_WARN( -[git repo detected, but submodule $1 not initialized]) - AC_MSG_WARN([You may want to run]) - AC_MSG_WARN([ git submodule init]) - AC_MSG_WARN([ git submodule update]) - AC_MSG_WARN([ sh autogen.sh]) - fi - if test -f $srcdir/$1/configure -a "$3" != "no"; then - with_$1="bundled" - else - with_$1="$3" - fi - ;; -esac -AC_MSG_CHECKING([which $1 to use]) -AC_MSG_RESULT($with_$1) - -]) diff --git a/cloog-0.17.0/m4/libtool.m4 b/cloog-0.17.0/m4/libtool.m4 deleted file mode 100644 index a3fee53..0000000 --- a/cloog-0.17.0/m4/libtool.m4 +++ /dev/null @@ -1,7377 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -]) - -# serial 56 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl -_LT_PROG_ECHO_BACKSLASH - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from `configure', and `config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" -])# _LT_PROG_LTMAIN - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case \$lt_ECHO in -*'\\\[$]0 --fallback-echo"')dnl " - lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` - ;; -esac - -_LT_OUTPUT_LIBTOOL_INIT -]) - - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -cat >"$CONFIG_LT" <<_LTEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate a libtool stub with the current configuration. - -lt_cl_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AS_SHELL_SANITIZE -_AS_PREPARE - -exec AS_MESSAGE_FD>&1 -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to ." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2008 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -if test "$no_create" != yes; then - lt_cl_success=: - test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" - exec AS_MESSAGE_LOG_FD>/dev/null - $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false - exec AS_MESSAGE_LOG_FD>>config.log - $lt_cl_success || AS_EXIT(1) -fi -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -_LT_COPYING -_LT_LIBTOOL_TAGS - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_XSI_SHELLFNS - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES -# -------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX -# ----------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[ifdef([AC_DIVERSION_NOTICE], - [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], - [AC_DIVERT_PUSH(NOTICE)]) -$1 -AC_DIVERT_POP -])# _LT_SHELL_INIT - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[_LT_SHELL_INIT([ -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$lt_ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` - ;; -esac - -ECHO=${lt_ECHO-echo} -if test "X[$]1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X[$]1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell. - exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} -fi - -if test "X[$]1" = X--fallback-echo; then - # used as fallback echo - shift - cat <<_LT_EOF -[$]* -_LT_EOF - exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$lt_ECHO"; then - if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if { echo_test_string=`eval $cmd`; } 2>/dev/null && - { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null - then - break - fi - done - fi - - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : - else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$ECHO" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - ECHO='print -r' - elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} - else - # Try using printf. - ECHO='printf %s\n' - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - ECHO="$CONFIG_SHELL [$]0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$CONFIG_SHELL [$]0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do - if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "[$]0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} - else - # Oops. We lost completely, so just stick with echo. - ECHO=echo - fi - fi - fi - fi - fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -lt_ECHO=$ECHO -if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then - lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" -fi - -AC_SUBST(lt_ECHO) -]) -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], - [An echo program that does not interpret backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" -])# _LT_ENABLE_LOCK - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[AC_CHECK_TOOL(AR, ar, false) -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1]) - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line __oline__ "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[[3-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program which can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program which can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method == "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC*) - # IBM XL 8.0 on PPC - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl*) - # IBM XL C 8.0/Fortran 10.1 on PPC - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac -AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - ;; - linux* | k*bsd*-gnu) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - _LT_TAGVAR(link_all_deplibs, $1)=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE(int foo(void) {}, - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - ) - LDFLAGS="$save_LDFLAGS" - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_MSG_CHECKING([whether -lc should be explicitly linked in]) - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], - [[If ld is used when linking, flag to hardcode $libdir into a binary - during linking. This must work even if $libdir does not exist]]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [fix_srcfile_path], [1], - [Fix the shell variable $srcfile for the compiler]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report which library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC="$lt_save_CC" -])# _LT_LANG_C_CONFIG - - -# _LT_PROG_CXX -# ------------ -# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ -# compiler, we have our own version here. -m4_defun([_LT_PROG_CXX], -[ -pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) -AC_PROG_CXX -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_CXX - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_CXX], []) - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[AC_REQUIRE([_LT_PROG_CXX])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - gnu*) - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 will use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - xl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=echo - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -]) -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_PROG_F77 -# ------------ -# Since AC_PROG_F77 is broken, in that it returns the empty string -# if there is no fortran compiler, we have our own version here. -m4_defun([_LT_PROG_F77], -[ -pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) -AC_PROG_F77 -if test -z "$F77" || test "X$F77" = "Xno"; then - _lt_disable_F77=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_F77 - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_F77], []) - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_REQUIRE([_LT_PROG_F77])dnl -AC_LANG_PUSH(Fortran 77) - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${F77-"f77"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_F77" != yes - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_PROG_FC -# ----------- -# Since AC_PROG_FC is broken, in that it returns the empty string -# if there is no fortran compiler, we have our own version here. -m4_defun([_LT_PROG_FC], -[ -pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) -AC_PROG_FC -if test -z "$FC" || test "X$FC" = "Xno"; then - _lt_disable_FC=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_FC - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_FC], []) - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_REQUIRE([_LT_PROG_FC])dnl -AC_LANG_PUSH(Fortran) - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${FC-"f95"} - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_FC" != yes - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC="$lt_save_CC" -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC="$lt_save_CC" -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PROG_XSI_SHELLFNS -# --------------------- -# Bourne and XSI compatible variants of some useful shell functions. -m4_defun([_LT_PROG_XSI_SHELLFNS], -[case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $[*] )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - -dnl func_dirname_and_basename -dnl A portable version of this function is already defined in general.m4sh -dnl so there is no need for it here. - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[[^=]]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$[@]"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]+=\$[2]" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]=\$$[1]\$[2]" -} - -_LT_EOF - ;; - esac -]) diff --git a/cloog-0.17.0/m4/ltoptions.m4 b/cloog-0.17.0/m4/ltoptions.m4 deleted file mode 100644 index 34151a3..0000000 --- a/cloog-0.17.0/m4/ltoptions.m4 +++ /dev/null @@ -1,368 +0,0 @@ -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - ]) -])# _LT_SET_OPTIONS - - -## --------------------------------- ## -## Macros to handle LT_INIT options. ## -## --------------------------------- ## - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [0], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' -# LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/cloog-0.17.0/m4/ltsugar.m4 b/cloog-0.17.0/m4/ltsugar.m4 deleted file mode 100644 index 9000a05..0000000 --- a/cloog-0.17.0/m4/ltsugar.m4 +++ /dev/null @@ -1,123 +0,0 @@ -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltsugar.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) - - -# lt_join(SEP, ARG1, [ARG2...]) -# ----------------------------- -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their -# associated separator. -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier -# versions in m4sugar had bugs. -m4_define([lt_join], -[m4_if([$#], [1], [], - [$#], [2], [[$2]], - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) -m4_define([_lt_join], -[m4_if([$#$2], [2], [], - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) - - -# lt_car(LIST) -# lt_cdr(LIST) -# ------------ -# Manipulate m4 lists. -# These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. -m4_define([lt_car], [[$1]]) -m4_define([lt_cdr], -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], - [$#], 1, [], - [m4_dquote(m4_shift($@))])]) -m4_define([lt_unquote], $1) - - -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) -# ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. -# Note that neither SEPARATOR nor STRING are expanded; they are appended -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). -# No SEPARATOR is output if MACRO-NAME was previously undefined (different -# than defined and empty). -# -# This macro is needed until we can rely on Autoconf 2.62, since earlier -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. -m4_define([lt_append], -[m4_define([$1], - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) - - - -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) -# ---------------------------------------------------------- -# Produce a SEP delimited list of all paired combinations of elements of -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list -# has the form PREFIXmINFIXSUFFIXn. -# Needed until we can rely on m4_combine added in Autoconf 2.62. -m4_define([lt_combine], -[m4_if(m4_eval([$# > 3]), [1], - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl -[[m4_foreach([_Lt_prefix], [$2], - [m4_foreach([_Lt_suffix], - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) - - -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) -# ----------------------------------------------------------------------- -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. -m4_define([lt_if_append_uniq], -[m4_ifdef([$1], - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], - [lt_append([$1], [$2], [$3])$4], - [$5])], - [lt_append([$1], [$2], [$3])$4])]) - - -# lt_dict_add(DICT, KEY, VALUE) -# ----------------------------- -m4_define([lt_dict_add], -[m4_define([$1($2)], [$3])]) - - -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) -# -------------------------------------------- -m4_define([lt_dict_add_subkey], -[m4_define([$1($2:$3)], [$4])]) - - -# lt_dict_fetch(DICT, KEY, [SUBKEY]) -# ---------------------------------- -m4_define([lt_dict_fetch], -[m4_ifval([$3], - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) - - -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) -# ----------------------------------------------------------------- -m4_define([lt_if_dict_fetch], -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], - [$5], - [$6])]) - - -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) -# -------------------------------------------------------------- -m4_define([lt_dict_filter], -[m4_if([$5], [], [], - [lt_join(m4_quote(m4_default([$4], [[, ]])), - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl -]) diff --git a/cloog-0.17.0/m4/ltversion.m4 b/cloog-0.17.0/m4/ltversion.m4 deleted file mode 100644 index f3c5309..0000000 --- a/cloog-0.17.0/m4/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# Generated from ltversion.in. - -# serial 3017 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.2.6b]) -m4_define([LT_PACKAGE_REVISION], [1.3017]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.2.6b' -macro_revision='1.3017' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) diff --git a/cloog-0.17.0/m4/lt~obsolete.m4 b/cloog-0.17.0/m4/lt~obsolete.m4 deleted file mode 100644 index 637bb20..0000000 --- a/cloog-0.17.0/m4/lt~obsolete.m4 +++ /dev/null @@ -1,92 +0,0 @@ -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004. -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 4 lt~obsolete.m4 - -# These exist entirely to fool aclocal when bootstrapping libtool. -# -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) -# which have later been changed to m4_define as they aren't part of the -# exported API, or moved to Autoconf or Automake where they belong. -# -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -# using a macro with the same name in our local m4/libtool.m4 it'll -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -# and doesn't know about Autoconf macros at all.) -# -# So we provide this file, which has a silly filename so it's always -# included after everything else. This provides aclocal with the -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -# because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -# -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -# Yes, that means every name once taken will need to remain here until -# we give up compatibility with versions before 1.7, at which point -# we need to keep only those names which we still refer to. - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) - -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) diff --git a/cloog-0.17.0/osl/AUTHORS b/cloog-0.17.0/osl/AUTHORS deleted file mode 100644 index 863a338..0000000 --- a/cloog-0.17.0/osl/AUTHORS +++ /dev/null @@ -1,12 +0,0 @@ -* * * * * * * * * * * * * * -* OpenScop Library 0.5.0 * -* * * * * * * * * * * * * * - -Version 0.5.0 - -Current maintainer: -* Cedric Bastoul - -Authors of the OpenScop Library: -* Cedric Bastoul -* Louis-Noel Pouchet diff --git a/cloog-0.17.0/osl/ChangeLog b/cloog-0.17.0/osl/ChangeLog deleted file mode 100644 index b2fa4f1..0000000 --- a/cloog-0.17.0/osl/ChangeLog +++ /dev/null @@ -1,107 +0,0 @@ -2010-03-08 Louis-Noel Pouchet - - * configure.in: Bump to ScopLib 0.2.0. - * README: Update with build information. - -2010-02-05 Louis-Noel Pouchet - - * include/scoplib/matrix.h, - * source/matrix.c: Add function scoplib_matrix_equal. - -2010-01-26 Louis-Noel Pouchet - - * include/macros.h: Add SCOPVAL_multo macro. - -2009-09-21 Louis-Noel Pouchet - - * source/vector.c, - * source/matrix.c, - * source/scop.c, - * source/statement.c, - * source/Makefile.am, - * include/Makefile.am, - * include/scoplib/scop.h.in, - * include/scoplib/vector.h, - * include/scoplib/macros.h, - * include/scoplib/matrix.h, - * include/scoplib/statement.h, - * COPYING.LESSER, - * configure.in, - * Makefile.am, - * README: Downgrade license from LGPL3+ to LGPL2.1+, to be - compatible with CLooG's license. - -2009-06-24 Louis-Noel Pouchet - - * source/scop.c, - * source/statement.c, - * include/scoplib/statement.h: Add support for control and exit - predicates as statement attributes. Needed for non-static control - code support. - -2009-05-02 Louis-Noel Pouchet - - * source/matrix.c, - * include/scoplib/macros.h, - * include/scoplib/matrix.h, - * configure.in: Fix a few minor problems. - -2009-05-02 Louis-Noel Pouchet - This is the initial checkin of ScopLib, a fork of Clan which - contains only the functions related to the .scop format, and the - main scop/statement/matrix/vector functions. - - clan_*_p types have been renamed scoplib_*_p, similarely for - function calls. - - * AUTHORS, - * autoconf, - * autogen.sh, - * configure.in, - * COPYING.LESSER, - * doc, - * doc/ascii-art.txt, - * doc/clan.texi, - * doc/Doxyfile.in, - * doc/images, - * doc/images/basic.eps, - * doc/images/basic.fig, - * doc/images/basic.jpg, - * doc/images/basic.pdf, - * doc/images/basic.txt, - * doc/images/basic1.eps, - * doc/images/basic1.fig, - * doc/images/basic1.jpg, - * doc/images/basic1.pdf, - * doc/images/basic1.txt, - * doc/images/basic2.eps, - * doc/images/basic2.fig, - * doc/images/basic2.jpg, - * doc/images/basic2.pdf, - * doc/images/basic2.txt, - * doc/images/tree.eps, - * doc/images/tree.fig, - * doc/images/tree.jpg, - * doc/images/tree.pdf, - * doc/images/tree.txt, - * doc/Makefile.am, - * doc/S4.cloog, - * include, - * include/Makefile.am, - * include/scoplib, - * include/scoplib/macros.h, - * include/scoplib/matrix.h, - * include/scoplib/scop.h.in, - * include/scoplib/statement.h, - * include/scoplib/vector.h, - * Makefile.am, - * NEWS, - * README, - * source, - * source/Makefile.am, - * source/matrix.c, - * source/scop.c, - * source/statement.c, - * source/vector.c, - * THANKS: Initial checkin of the project. - diff --git a/cloog-0.17.0/osl/Makefile.am b/cloog-0.17.0/osl/Makefile.am deleted file mode 100644 index 5a7b87f..0000000 --- a/cloog-0.17.0/osl/Makefile.am +++ /dev/null @@ -1,92 +0,0 @@ -# -# /*+------------------------------------------------------------------** -# ** OpenScop Library ** -# **------------------------------------------------------------------** -# ** makefile.am ** -# **------------------------------------------------------------------** -# ** First version: 30/04/2008 ** -# **------------------------------------------------------------------** -# -# -# *************************************************************************** -# * OpenScop: Structures and formats for polyhedral tools to talk together * -# *************************************************************************** -# * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * -# * / / / // // // // / / / // // / / // / /|,_, * -# * / / / // // // // / / / // // / / // / / / /\ * -# * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * -# * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * -# * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * -# * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * -# * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * -# * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * -# * | I | | | | e | | | | | | | | | | | | | \ \ \ * -# * | T | | | | | | | | | | | | | | | | | \ \ \ * -# * | E | | | | | | | | | | | | | | | | | \ \ \ * -# * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * -# * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * -# * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * -# * * -# * Copyright (C) 2008 University Paris-Sud 11 and INRIA * -# * * -# * (3-clause BSD license) * -# * Redistribution and use in source and binary forms, with or without * -# * modification, are permitted provided that the following conditions * -# * are met: * -# * * -# * 1. Redistributions of source code must retain the above copyright * -# * notice, this list of conditions and the following disclaimer. * -# * 2. Redistributions in binary form must reproduce the above copyright * -# * notice, this list of conditions and the following disclaimer in the * -# * documentation and/or other materials provided with the distribution. * -# * 3. The name of the author may not be used to endorse or promote * -# * products derived from this software without specific prior written * -# * permission. * -# * * -# * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * -# * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * -# * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * -# * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * -# * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * -# * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * -# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * -# * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * -# * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * -# * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * -# * POSSIBILITY OF SUCH DAMAGE. * -# * * -# * OpenScop Library, a library to manipulate OpenScop formats and data * -# * structures. Written by: * -# * Cedric Bastoul and * -# * Louis-Noel Pouchet * -# * * -# ***************************************************************************/ -# -# Makefile.am (or makefile if generated) of the OpenScop Library. -# Makefile.am is not a makefile, you must run the 'autogen.sh' THEN the -# configure shellscript to generate the Makefile thanks to this file. - - -############################################################################# -SUBDIRS = doc source include tests - - -############################################################################# -ACLOCAL_AMFLAGS = -I autoconf - -m4datadir = $(datadir)/aclocal - - -MAINTAINERCLEANFILES = \ - autoconf/texinfo.tex \ - Makefile.in \ - aclocal.m4 \ - configure \ - source/stamp-h.in \ - $(AUX_DIST) - - -############################################################################# -ctags: - ctags -R --c++-kinds=+p --fields=+iaS --extra=+q -f$(HOME)/.ctags . -############################################################################# diff --git a/cloog-0.17.0/osl/Makefile.in b/cloog-0.17.0/osl/Makefile.in deleted file mode 100644 index c422be3..0000000 --- a/cloog-0.17.0/osl/Makefile.in +++ /dev/null @@ -1,793 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# /*+------------------------------------------------------------------** -# ** OpenScop Library ** -# **------------------------------------------------------------------** -# ** makefile.am ** -# **------------------------------------------------------------------** -# ** First version: 30/04/2008 ** -# **------------------------------------------------------------------** -# -# -# *************************************************************************** -# * OpenScop: Structures and formats for polyhedral tools to talk together * -# *************************************************************************** -# * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * -# * / / / // // // // / / / // // / / // / /|,_, * -# * / / / // // // // / / / // // / / // / / / /\ * -# * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * -# * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * -# * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * -# * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * -# * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * -# * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * -# * | I | | | | e | | | | | | | | | | | | | \ \ \ * -# * | T | | | | | | | | | | | | | | | | | \ \ \ * -# * | E | | | | | | | | | | | | | | | | | \ \ \ * -# * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * -# * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * -# * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * -# * * -# * Copyright (C) 2008 University Paris-Sud 11 and INRIA * -# * * -# * (3-clause BSD license) * -# * Redistribution and use in source and binary forms, with or without * -# * modification, are permitted provided that the following conditions * -# * are met: * -# * * -# * 1. Redistributions of source code must retain the above copyright * -# * notice, this list of conditions and the following disclaimer. * -# * 2. Redistributions in binary form must reproduce the above copyright * -# * notice, this list of conditions and the following disclaimer in the * -# * documentation and/or other materials provided with the distribution. * -# * 3. The name of the author may not be used to endorse or promote * -# * products derived from this software without specific prior written * -# * permission. * -# * * -# * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * -# * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * -# * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * -# * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * -# * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * -# * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * -# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * -# * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * -# * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * -# * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * -# * POSSIBILITY OF SUCH DAMAGE. * -# * * -# * OpenScop Library, a library to manipulate OpenScop formats and data * -# * structures. Written by: * -# * Cedric Bastoul and * -# * Louis-Noel Pouchet * -# * * -# ***************************************************************************/ -# -# Makefile.am (or makefile if generated) of the OpenScop Library. -# Makefile.am is not a makefile, you must run the 'autogen.sh' THEN the -# configure shellscript to generate the Makefile thanks to this file. -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = . -DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/configure \ - $(top_srcdir)/include/osl/scop.h.in AUTHORS ChangeLog NEWS \ - THANKS autoconf/config.guess autoconf/config.sub \ - autoconf/depcomp autoconf/install-sh autoconf/ltmain.sh \ - autoconf/missing autoconf/texinfo.tex -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/autoconf/libtool.m4 \ - $(top_srcdir)/autoconf/ltoptions.m4 \ - $(top_srcdir)/autoconf/ltsugar.m4 \ - $(top_srcdir)/autoconf/ltversion.m4 \ - $(top_srcdir)/autoconf/lt~obsolete.m4 \ - $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_CLEAN_FILES = include/osl/scop.h -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir dist dist-all distcheck -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CD = @CD@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOXYGEN = @DOXYGEN@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_aux_dir = @ac_aux_dir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ - -############################################################################# -SUBDIRS = doc source include tests - -############################################################################# -ACLOCAL_AMFLAGS = -I autoconf -m4datadir = $(datadir)/aclocal -MAINTAINERCLEANFILES = \ - autoconf/texinfo.tex \ - Makefile.in \ - aclocal.m4 \ - configure \ - source/stamp-h.in \ - $(AUX_DIST) - -all: all-recursive - -.SUFFIXES: -am--refresh: - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): -include/osl/scop.h: $(top_builddir)/config.status $(top_srcdir)/include/osl/scop.h.in - cd $(top_builddir) && $(SHELL) ./config.status $@ - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: check-recursive -all-am: Makefile -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-recursive - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ - install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-generic \ - clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ - dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ - distcheck distclean distclean-generic distclean-libtool \ - distclean-tags distcleancheck distdir distuninstallcheck dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am - - -############################################################################# -ctags: - ctags -R --c++-kinds=+p --fields=+iaS --extra=+q -f$(HOME)/.ctags . -############################################################################# - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.17.0/osl/NEWS b/cloog-0.17.0/osl/NEWS deleted file mode 100644 index 75daa9c..0000000 --- a/cloog-0.17.0/osl/NEWS +++ /dev/null @@ -1,2 +0,0 @@ -Some news... - diff --git a/cloog-0.17.0/osl/README b/cloog-0.17.0/osl/README deleted file mode 100644 index c1a58d0..0000000 --- a/cloog-0.17.0/osl/README +++ /dev/null @@ -1,18 +0,0 @@ -* * * * * * * * * * * * * * -* OpenScop Library 0.5.0 * -* * * * * * * * * * * * * * - -Install -------- - -$> ./autogen.sh -$> ./configure -$> make -$> make install - -Support -------- - -Please contact: -openscop-development@googlegroups.com - diff --git a/cloog-0.17.0/osl/THANKS b/cloog-0.17.0/osl/THANKS deleted file mode 100644 index d12c4ad..0000000 --- a/cloog-0.17.0/osl/THANKS +++ /dev/null @@ -1,12 +0,0 @@ -THANKS -====== - -The authors would like to gratefully thank the people that have -been involved in the (lively) discussions for the definition of -the OpenScop formats and data structures, in particular: - -Uday Bondhugula -Albert Cohen -Tobias Grosser -Sebastian Pop -Sven Verdoolaege diff --git a/cloog-0.17.0/osl/aclocal.m4 b/cloog-0.17.0/osl/aclocal.m4 deleted file mode 100644 index 4cc55dc..0000000 --- a/cloog-0.17.0/osl/aclocal.m4 +++ /dev/null @@ -1,973 +0,0 @@ -# generated automatically by aclocal 1.11.1 -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],, -[m4_warning([this file was generated for autoconf 2.67. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically `autoreconf'.])]) - -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.11' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 9 - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 10 - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -#serial 5 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 16 - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) - -dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST(install_sh)]) - -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 6 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_MKDIR_P -# --------------- -# Check for `mkdir -p'. -AC_DEFUN([AM_PROG_MKDIR_P], -[AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_RUN_LOG(COMMAND) -# ------------------- -# Run COMMAND, save the exit status in ac_status, and log it. -# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) -AC_DEFUN([AM_RUN_LOG], -[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD - ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - (exit $ac_status); }]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 5 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([autoconf/libtool.m4]) -m4_include([autoconf/ltoptions.m4]) -m4_include([autoconf/ltsugar.m4]) -m4_include([autoconf/ltversion.m4]) -m4_include([autoconf/lt~obsolete.m4]) diff --git a/cloog-0.17.0/osl/autoconf/config.guess b/cloog-0.17.0/osl/autoconf/config.guess deleted file mode 100755 index c2246a4..0000000 --- a/cloog-0.17.0/osl/autoconf/config.guess +++ /dev/null @@ -1,1502 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -# Free Software Foundation, Inc. - -timestamp='2009-12-30' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/cloog-0.17.0/osl/autoconf/config.sub b/cloog-0.17.0/osl/autoconf/config.sub deleted file mode 100755 index c2d1257..0000000 --- a/cloog-0.17.0/osl/autoconf/config.sub +++ /dev/null @@ -1,1714 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -# Free Software Foundation, Inc. - -timestamp='2010-01-22' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nios | nios2 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12 | picochip) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile-* | tilegx-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze) - basic_machine=microblaze-xilinx - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - # This must be matched before tile*. - tilegx*) - basic_machine=tilegx-unknown - os=-linux-gnu - ;; - tile*) - basic_machine=tile-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -nacl*) - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/cloog-0.17.0/osl/autoconf/depcomp b/cloog-0.17.0/osl/autoconf/depcomp deleted file mode 100755 index df8eea7..0000000 --- a/cloog-0.17.0/osl/autoconf/depcomp +++ /dev/null @@ -1,630 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2009-04-28.21; # UTC - -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free -# Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by `PROGRAMS ARGS'. - object Object file output by `PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputing dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -cygpath_u="cygpath -u -f -" -if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u="sed s,\\\\\\\\,/,g" - depmode=msvisualcpp -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory -## that the space means something, we add a space to the output as -## well. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the - # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> "$depfile" - echo >> "$depfile" - - # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # 'foo.d', which lands next to the object file, wherever that - # happens to be. - # Much of this is similar to the tru64 case; see comments there. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" - # Add `dependent.h:' lines. - sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" "$tmpdepfile2" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mechanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. - "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no eat=no - for arg - do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - if test $eat = yes; then - eat=no - continue - fi - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -arch) - eat=yes ;; - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix=`echo "$object" | sed 's/^.*\././'` - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - IFS=" " - for arg - do - case "$arg" in - -o) - shift - ;; - $object) - shift - ;; - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E 2>/dev/null | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvcmsys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/cloog-0.17.0/osl/autoconf/install-sh b/cloog-0.17.0/osl/autoconf/install-sh deleted file mode 100755 index 6781b98..0000000 --- a/cloog-0.17.0/osl/autoconf/install-sh +++ /dev/null @@ -1,520 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2009-04-28.21; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -no_target_directory= - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writeable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - -*) prefix='./';; - *) prefix='';; - esac - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob set +f - IFS=$oIFS - - prefixes= - - for d - do - test -z "$d" && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/cloog-0.17.0/osl/autoconf/libtool.m4 b/cloog-0.17.0/osl/autoconf/libtool.m4 deleted file mode 100644 index a3fee53..0000000 --- a/cloog-0.17.0/osl/autoconf/libtool.m4 +++ /dev/null @@ -1,7377 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -]) - -# serial 56 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl -_LT_PROG_ECHO_BACKSLASH - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from `configure', and `config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" -])# _LT_PROG_LTMAIN - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case \$lt_ECHO in -*'\\\[$]0 --fallback-echo"')dnl " - lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` - ;; -esac - -_LT_OUTPUT_LIBTOOL_INIT -]) - - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -cat >"$CONFIG_LT" <<_LTEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate a libtool stub with the current configuration. - -lt_cl_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AS_SHELL_SANITIZE -_AS_PREPARE - -exec AS_MESSAGE_FD>&1 -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to ." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2008 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -if test "$no_create" != yes; then - lt_cl_success=: - test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" - exec AS_MESSAGE_LOG_FD>/dev/null - $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false - exec AS_MESSAGE_LOG_FD>>config.log - $lt_cl_success || AS_EXIT(1) -fi -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -_LT_COPYING -_LT_LIBTOOL_TAGS - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_XSI_SHELLFNS - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES -# -------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX -# ----------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[ifdef([AC_DIVERSION_NOTICE], - [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], - [AC_DIVERT_PUSH(NOTICE)]) -$1 -AC_DIVERT_POP -])# _LT_SHELL_INIT - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[_LT_SHELL_INIT([ -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$lt_ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` - ;; -esac - -ECHO=${lt_ECHO-echo} -if test "X[$]1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X[$]1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell. - exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} -fi - -if test "X[$]1" = X--fallback-echo; then - # used as fallback echo - shift - cat <<_LT_EOF -[$]* -_LT_EOF - exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$lt_ECHO"; then - if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if { echo_test_string=`eval $cmd`; } 2>/dev/null && - { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null - then - break - fi - done - fi - - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : - else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$ECHO" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - ECHO='print -r' - elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} - else - # Try using printf. - ECHO='printf %s\n' - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - ECHO="$CONFIG_SHELL [$]0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$CONFIG_SHELL [$]0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do - if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "[$]0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} - else - # Oops. We lost completely, so just stick with echo. - ECHO=echo - fi - fi - fi - fi - fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -lt_ECHO=$ECHO -if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then - lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" -fi - -AC_SUBST(lt_ECHO) -]) -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], - [An echo program that does not interpret backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" -])# _LT_ENABLE_LOCK - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[AC_CHECK_TOOL(AR, ar, false) -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1]) - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line __oline__ "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[[3-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program which can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program which can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method == "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC*) - # IBM XL 8.0 on PPC - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl*) - # IBM XL C 8.0/Fortran 10.1 on PPC - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac -AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - ;; - linux* | k*bsd*-gnu) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - _LT_TAGVAR(link_all_deplibs, $1)=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE(int foo(void) {}, - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - ) - LDFLAGS="$save_LDFLAGS" - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_MSG_CHECKING([whether -lc should be explicitly linked in]) - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], - [[If ld is used when linking, flag to hardcode $libdir into a binary - during linking. This must work even if $libdir does not exist]]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [fix_srcfile_path], [1], - [Fix the shell variable $srcfile for the compiler]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report which library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC="$lt_save_CC" -])# _LT_LANG_C_CONFIG - - -# _LT_PROG_CXX -# ------------ -# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ -# compiler, we have our own version here. -m4_defun([_LT_PROG_CXX], -[ -pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) -AC_PROG_CXX -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_CXX - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_CXX], []) - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[AC_REQUIRE([_LT_PROG_CXX])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - gnu*) - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 will use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - xl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=echo - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -]) -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_PROG_F77 -# ------------ -# Since AC_PROG_F77 is broken, in that it returns the empty string -# if there is no fortran compiler, we have our own version here. -m4_defun([_LT_PROG_F77], -[ -pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) -AC_PROG_F77 -if test -z "$F77" || test "X$F77" = "Xno"; then - _lt_disable_F77=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_F77 - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_F77], []) - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_REQUIRE([_LT_PROG_F77])dnl -AC_LANG_PUSH(Fortran 77) - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${F77-"f77"} - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_F77" != yes - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_PROG_FC -# ----------- -# Since AC_PROG_FC is broken, in that it returns the empty string -# if there is no fortran compiler, we have our own version here. -m4_defun([_LT_PROG_FC], -[ -pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) -AC_PROG_FC -if test -z "$FC" || test "X$FC" = "Xno"; then - _lt_disable_FC=yes -fi -popdef([AC_MSG_ERROR]) -])# _LT_PROG_FC - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([_LT_PROG_FC], []) - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_REQUIRE([_LT_PROG_FC])dnl -AC_LANG_PUSH(Fortran) - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - CC=${FC-"f95"} - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" -fi # test "$_lt_disable_FC" != yes - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC="$lt_save_CC" -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC="$lt_save_CC" -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PROG_XSI_SHELLFNS -# --------------------- -# Bourne and XSI compatible variants of some useful shell functions. -m4_defun([_LT_PROG_XSI_SHELLFNS], -[case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $[*] )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - -dnl func_dirname_and_basename -dnl A portable version of this function is already defined in general.m4sh -dnl so there is no need for it here. - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[[^=]]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$[@]"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]+=\$[2]" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]=\$$[1]\$[2]" -} - -_LT_EOF - ;; - esac -]) diff --git a/cloog-0.17.0/osl/autoconf/ltmain.sh b/cloog-0.17.0/osl/autoconf/ltmain.sh deleted file mode 100755 index fa4b1e1..0000000 --- a/cloog-0.17.0/osl/autoconf/ltmain.sh +++ /dev/null @@ -1,8413 +0,0 @@ -# Generated from ltmain.m4sh. - -# ltmain.sh (GNU libtool) 2.2.6b -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print informational messages (default) -# --version print version information -# -h, --help print short or long help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu3 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . - -PROGRAM=ltmain.sh -PACKAGE=libtool -VERSION="2.2.6b Debian-2.2.6b-2ubuntu3" -TIMESTAMP="" -package_revision=1.3017 - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# NLS nuisances: We save the old values to restore during execute mode. -# Only set LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" - fi" -done - -$lt_unset CDPATH - - - - - -: ${CP="cp -f"} -: ${ECHO="echo"} -: ${EGREP="/bin/grep -E"} -: ${FGREP="/bin/grep -F"} -: ${GREP="/bin/grep"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SED="/bin/sed"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" - -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - -# Generated shell functions inserted here. - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - -# The name of this program: -# In the unlikely event $progname began with a '-', it would play havoc with -# func_echo (imagine progname=-n), so we prepend ./ in that case: -func_dirname_and_basename "$progpath" -progname=$func_basename_result -case $progname in - -*) progname=./$progname ;; -esac - -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=: - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname${mode+: }$mode: $*" -} - -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 - - # bash bug again: - : -} - -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` - done - my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "X$my_tmpdir" | $Xsed -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () -{ - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac - - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac -} - - -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "X$1" | $Xsed \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac - - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac - - func_quote_for_expand_result="$my_arg" -} - - -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - - - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} - -# func_usage -# Echo short help message to standard output and exit. -func_usage () -{ - $SED -n '/^# Usage:/,/# -h/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - $ECHO - $ECHO "run \`$progname --help | more' for full usage" - exit $? -} - -# func_help -# Echo long help message to standard output and exit. -func_help () -{ - $SED -n '/^# Usage:/,/# Report bugs to/ { - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ - p - }' < "$progpath" - exit $? -} - -# func_missing_arg argname -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - func_error "missing argument for $1" - exit_cmd=exit -} - -exit_cmd=: - - - - - -# Check that we have a working $ECHO. -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell, and then maybe $ECHO will work. - exec $SHELL "$progpath" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - -# Parse options once, thoroughly. This comes as soon as possible in -# the script to make things like `libtool --version' happen quickly. -{ - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - esac - - # Parse non-mode specific arguments: - while test "$#" -gt 0; do - opt="$1" - shift - - case $opt in - --config) func_config ;; - - --debug) preserve_args="$preserve_args $opt" - func_echo "enabling shell trace mode" - opt_debug='set -x' - $opt_debug - ;; - - -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break - execute_dlfiles="$execute_dlfiles $1" - shift - ;; - - --dry-run | -n) opt_dry_run=: ;; - --features) func_features ;; - --finish) mode="finish" ;; - - --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break - case $1 in - # Valid mode arguments: - clean) ;; - compile) ;; - execute) ;; - finish) ;; - install) ;; - link) ;; - relink) ;; - uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; - esac - - mode="$1" - shift - ;; - - --preserve-dup-deps) - opt_duplicate_deps=: ;; - - --quiet|--silent) preserve_args="$preserve_args $opt" - opt_silent=: - ;; - - --verbose| -v) preserve_args="$preserve_args $opt" - opt_silent=false - ;; - - --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break - preserve_args="$preserve_args $opt $1" - func_enable_tag "$1" # tagname is set here - shift - ;; - - # Separate optargs to long options: - -dlopen=*|--mode=*|--tag=*) - func_opt_split "$opt" - set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} - shift - ;; - - -\?|-h) func_usage ;; - --help) opt_help=: ;; - --version) func_version ;; - - -*) func_fatal_help "unrecognized option \`$opt'" ;; - - *) nonopt="$opt" - break - ;; - esac - done - - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_duplicate_deps - ;; - esac - - # Having warned about all mis-specified options, bail out if - # anything was wrong. - $exit_cmd $EXIT_FAILURE -} - -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -## ----------- ## -## Main. ## -## ----------- ## - -$opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - test -z "$mode" && func_fatal_error "error: you must specify a MODE." - - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$mode' for more information." -} - - -# func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case "$lalib_p_line" in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test "$lalib_p" = yes -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - func_lalib_p "$1" -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_ltwrapper_scriptname_result="" - if func_ltwrapper_executable_p "$1"; then - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" - fi -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $opt_debug - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$save_ifs - eval cmd=\"$cmd\" - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. -func_source () -{ - $opt_debug - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $opt_debug - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" - done - case "$@ " in - " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi - - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T <?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - removelist="$removelist $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - removelist="$removelist $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - command="$command -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test "$compiler_c_o" = yes; then - command="$command -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { -test "$mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to building PIC objects only - -prefer-non-pic try to building non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode \`$mode'" - ;; - esac - - $ECHO - $ECHO "Try \`$progname --help' for more information about other modes." - - exit $? -} - - # Now that we've collected a possible --mode arg, show help if necessary - $opt_help && func_mode_help - - -# func_mode_execute arg... -func_mode_execute () -{ - $opt_debug - # The first argument is the command name. - cmd="$nonopt" - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir="$func_dirname_result" - - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir="$func_dirname_result" - ;; - - *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -*) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file="$progdir/$program" - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_quote_for_eval "$file" - args="$args $func_quote_for_eval_result" - done - - if test "X$opt_dry_run" = Xfalse; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - $ECHO "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - fi -} - -test "$mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libdirs="$nonopt" - admincmds= - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done - - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || admincmds="$admincmds - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - $ECHO "X----------------------------------------------------------------------" | $Xsed - $ECHO "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - $ECHO - $ECHO "If you ever happen to want to link against installed libraries" - $ECHO "in a given directory, LIBDIR, you must either use libtool, and" - $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" - $ECHO "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" - $ECHO " during execution" - fi - if test -n "$runpath_var"; then - $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" - $ECHO " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - $ECHO - - $ECHO "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" - $ECHO "pages." - ;; - *) - $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - $ECHO "X----------------------------------------------------------------------" | $Xsed - exit $EXIT_SUCCESS -} - -test "$mode" = finish && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $opt_debug - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - $ECHO "X$nonopt" | $GREP shtool >/dev/null; then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - install_prog="$install_prog$func_quote_for_eval_result" - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - for arg - do - if test -n "$dest"; then - files="$files $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - case " $install_prog " in - *[\\\ /]cp\ *) ;; - *) prev=$arg ;; - esac - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - install_prog="$install_prog $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "\`$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - staticlibs="$staticlibs $file" - ;; - - *.la) - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - dir="$dir$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking \`$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname="$1" - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme="$stripme" - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme="" - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - $opt_dry_run || { - if test "$finalize" = yes; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_silent || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink \`$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file="$outputname" - else - func_warning "cannot relink \`$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name="$func_basename_result" - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test "$mode" = install && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_verbose "extracting global C symbols from \`$progfile'" - $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $opt_dry_run || { - $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" - func_basename "$dlprefile" - name="$func_basename_result" - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - $ECHO >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -" - case $host in - *cygwin* | *mingw* | *cegcc* ) - $ECHO >> "$output_objdir/$my_dlsyms" "\ -/* DATA imports from DLLs on WIN32 con't be const, because - runtime relocations are performed -- see ld's documentation - on pseudo-relocs. */" - lt_dlsym_const= ;; - *osf5*) - echo >> "$output_objdir/$my_dlsyms" "\ -/* This system does not cope well with relocations in const data */" - lt_dlsym_const= ;; - *) - lt_dlsym_const=const ;; - esac - - $ECHO >> "$output_objdir/$my_dlsyms" "\ -extern $lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; -$lt_dlsym_const lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - $ECHO >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) symtab_cflags="$symtab_cflags $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - - # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -func_win32_libid () -{ - $opt_debug - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then - win32_nmres=`eval $NM -f posix -A $1 | - $SED -n -e ' - 1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $opt_debug - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib="$func_basename_result" - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` - done - - func_extract_archives_result="$my_oldobjs" -} - - - -# func_emit_wrapper_part1 [arg=no] -# -# Emit the first part of a libtool wrapper script on stdout. -# For more information, see the description associated with -# func_emit_wrapper(), below. -func_emit_wrapper_part1 () -{ - func_emit_wrapper_part1_arg1=no - if test -n "$1" ; then - func_emit_wrapper_part1_arg1=$1 - fi - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='${SED} -e 1s/^X//' -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - ECHO=\"$qecho\" - file=\"\$0\" - # Make sure echo works. - if test \"X\$1\" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then - # Yippee, \$ECHO works! - : - else - # Restart under the correct shell, and then maybe \$ECHO will work. - exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} - fi - fi\ -" - $ECHO "\ - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` - done -" -} -# end: func_emit_wrapper_part1 - -# func_emit_wrapper_part2 [arg=no] -# -# Emit the second part of a libtool wrapper script on stdout. -# For more information, see the description associated with -# func_emit_wrapper(), below. -func_emit_wrapper_part2 () -{ - func_emit_wrapper_part2_arg1=no - if test -n "$1" ; then - func_emit_wrapper_part2_arg1=$1 - fi - - $ECHO "\ - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` - - export $shlibpath_var -" - fi - - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} -# end: func_emit_wrapper_part2 - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=no - if test -n "$1" ; then - func_emit_wrapper_arg1=$1 - fi - - # split this up so that func_emit_cwrapperexe_src - # can call each part independently. - func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" - func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" -} - - -# func_to_host_path arg -# -# Convert paths to host format when used with build tools. -# Intended for use with "native" mingw (where libtool itself -# is running under the msys shell), or in the following cross- -# build environments: -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# where wine is equipped with the `winepath' executable. -# In the native mingw case, the (msys) shell automatically -# converts paths for any non-msys applications it launches, -# but that facility isn't available from inside the cwrapper. -# Similar accommodations are necessary for $host mingw and -# $build cygwin. Calling this function does no harm for other -# $host/$build combinations not listed above. -# -# ARG is the path (on $build) that should be converted to -# the proper representation for $host. The result is stored -# in $func_to_host_path_result. -func_to_host_path () -{ - func_to_host_path_result="$1" - if test -n "$1" ; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - case $build in - *mingw* ) # actually, msys - # awkward: cmd appends spaces to result - lt_sed_strip_trailing_spaces="s/[ ]*\$//" - func_to_host_path_tmp1=`( cmd //c echo "$1" |\ - $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_path_tmp1=`cygpath -w "$1"` - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # Unfortunately, winepath does not exit with a non-zero - # error code, so we are forced to check the contents of - # stdout. On the other hand, if the command is not - # found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both - # error code of zero AND non-empty stdout, which explains - # the odd construction: - func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then - func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ - $SED -e "$lt_sed_naive_backslashify"` - else - # Allow warning below. - func_to_host_path_result="" - fi - ;; - esac - if test -z "$func_to_host_path_result" ; then - func_error "Could not determine host path corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_path_result="$1" - fi - ;; - esac - fi -} -# end: func_to_host_path - -# func_to_host_pathlist arg -# -# Convert pathlists to host format when used with build tools. -# See func_to_host_path(), above. This function supports the -# following $build/$host combinations (but does no harm for -# combinations not listed here): -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# -# Path separators are also converted from $build format to -# $host format. If ARG begins or ends with a path separator -# character, it is preserved (but converted to $host format) -# on output. -# -# ARG is a pathlist (on $build) that should be converted to -# the proper representation on $host. The result is stored -# in $func_to_host_pathlist_result. -func_to_host_pathlist () -{ - func_to_host_pathlist_result="$1" - if test -n "$1" ; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_to_host_pathlist_tmp2="$1" - # Once set for this call, this variable should not be - # reassigned. It is used in tha fallback case. - func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e 's|^:*||' -e 's|:*$||'` - case $build in - *mingw* ) # Actually, msys. - # Awkward: cmd appends spaces to result. - lt_sed_strip_trailing_spaces="s/[ ]*\$//" - func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # unfortunately, winepath doesn't convert pathlists - func_to_host_pathlist_result="" - func_to_host_pathlist_oldIFS=$IFS - IFS=: - for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do - IFS=$func_to_host_pathlist_oldIFS - if test -n "$func_to_host_pathlist_f" ; then - func_to_host_path "$func_to_host_pathlist_f" - if test -n "$func_to_host_path_result" ; then - if test -z "$func_to_host_pathlist_result" ; then - func_to_host_pathlist_result="$func_to_host_path_result" - else - func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" - fi - fi - fi - IFS=: - done - IFS=$func_to_host_pathlist_oldIFS - ;; - esac - if test -z "$func_to_host_pathlist_result" ; then - func_error "Could not determine the host path(s) corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This may break if $1 contains DOS-style drive - # specifications. The fix is not to complicate the expression - # below, but for the user to provide a working wine installation - # with winepath so that path translation in the cross-to-mingw - # case works properly. - lt_replace_pathsep_nix_to_dos="s|:|;|g" - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_replace_pathsep_nix_to_dos"` - fi - # Now, add the leading and trailing path separators back - case "$1" in - :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" - ;; - esac - case "$1" in - *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" - ;; - esac - ;; - esac - fi -} -# end: func_to_host_pathlist - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -# define setmode _setmode -#else -# include -# include -# ifdef __CYGWIN__ -# include -# define HAVE_SETENV -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -#ifdef _MSC_VER -# define S_IXUSR _S_IEXEC -# define stat _stat -# ifndef _INTPTR_T_DEFINED -# define intptr_t int -# endif -#endif - -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifdef __CYGWIN__ -# define FOPEN_WB "wb" -#endif - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -#undef LTWRAPPER_DEBUGPRINTF -#if defined DEBUGWRAPPER -# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args -static void -ltwrapper_debugprintf (const char *fmt, ...) -{ - va_list args; - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); -} -#else -# define LTWRAPPER_DEBUGPRINTF(args) -#endif - -const char *program_name = NULL; - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_fatal (const char *message, ...); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_opt_process_env_set (const char *arg); -void lt_opt_process_env_prepend (const char *arg); -void lt_opt_process_env_append (const char *arg); -int lt_split_name_value (const char *arg, char** name, char** value); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); - -static const char *script_text_part1 = -EOF - - func_emit_wrapper_part1 yes | - $SED -e 's/\([\\"]\)/\\\1/g' \ - -e 's/^/ "/' -e 's/$/\\n"/' - echo ";" - cat <"))); - for (i = 0; i < newargc; i++) - { - LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); - } - -EOF - - case $host_os in - mingw*) - cat <<"EOF" - /* execv doesn't actually work on mingw as expected on unix */ - rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); - if (rval == -1) - { - /* failed to start process */ - LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); - return 127; - } - return rval; -EOF - ;; - *) - cat <<"EOF" - execv (lt_argv_zero, newargz); - return rval; /* =127, but avoids unused variable warning */ -EOF - ;; - esac - - cat <<"EOF" -} - -void * -xmalloc (size_t num) -{ - void *p = (void *) malloc (num); - if (!p) - lt_fatal ("Memory exhausted"); - - return p; -} - -char * -xstrdup (const char *string) -{ - return string ? strcpy ((char *) xmalloc (strlen (string) + 1), - string) : NULL; -} - -const char * -base_name (const char *name) -{ - const char *base; - -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - /* Skip over the disk name in MSDOS pathnames. */ - if (isalpha ((unsigned char) name[0]) && name[1] == ':') - name += 2; -#endif - - for (base = name; *name; name++) - if (IS_DIR_SEPARATOR (*name)) - base = name + 1; - return base; -} - -int -check_executable (const char *path) -{ - struct stat st; - - LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", - path ? (*path ? path : "EMPTY!") : "NULL!")); - if ((!path) || (!*path)) - return 0; - - if ((stat (path, &st) >= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", - path ? (*path ? path : "EMPTY!") : "NULL!")); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char *concat_name; - - LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", - wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", - tmp_pathspec)); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - char *errstr = strerror (errno); - lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal ("Could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp (str, pat) == 0) - *str = '\0'; - } - return str; -} - -static void -lt_error_core (int exit_status, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s: %s: ", program_name, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, "FATAL", message, ap); - va_end (ap); -} - -void -lt_setenv (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", - (name ? name : ""), - (value ? value : ""))); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - int len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -int -lt_split_name_value (const char *arg, char** name, char** value) -{ - const char *p; - int len; - if (!arg || !*arg) - return 1; - - p = strchr (arg, (int)'='); - - if (!p) - return 1; - - *value = xstrdup (++p); - - len = strlen (arg) - strlen (*value); - *name = XMALLOC (char, len); - strncpy (*name, arg, len-1); - (*name)[len - 1] = '\0'; - - return 0; -} - -void -lt_opt_process_env_set (const char *arg) -{ - char *name = NULL; - char *value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); - } - - lt_setenv (name, value); - XFREE (name); - XFREE (value); -} - -void -lt_opt_process_env_prepend (const char *arg) -{ - char *name = NULL; - char *value = NULL; - char *new_value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); - } - - new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - XFREE (name); - XFREE (value); -} - -void -lt_opt_process_env_append (const char *arg) -{ - char *name = NULL; - char *value = NULL; - char *new_value = NULL; - - if (lt_split_name_value (arg, &name, &value) != 0) - { - XFREE (name); - XFREE (value); - lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); - } - - new_value = lt_extend_str (getenv (name), value, 1); - lt_setenv (name, new_value); - XFREE (new_value); - XFREE (name); - XFREE (value); -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - (name ? name : ""), - (value ? value : ""))); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[len-1] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - (name ? name : ""), - (value ? value : ""))); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - - -EOF -} -# end: func_emit_cwrapperexe_src - -# func_mode_link arg... -func_mode_link () -{ - $opt_debug - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module="${wl}-single_module" - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) deplibs="$deplibs $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# moreargs="$moreargs $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file \`$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - weak_libs="$weak_libs $arg" - prev= - continue - ;; - xcclinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname '-L' '' "$arg" - dir=$func_stripname_result - if test -z "$dir"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" - else - func_fatal_error "need path for \`-L' option" - fi - fi - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - deplibs="$deplibs System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; - esac - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - arg="$arg $wl$func_quote_for_eval_result" - compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" - linker_flags="$linker_flags $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - # -64, -mips[0-9] enable 64-bit mode on the SGI compiler - # -r[0-9][0-9]* specifies the processor on the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler - # +DA*, +DD* enable 64-bit mode on the HP compiler - # -q* pass through compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* pass through architecture-specific - # compiler args for GCC - # -F/path gives path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC - # @file GCC response files - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - compiler_flags="$compiler_flags $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_duplicate_deps ; then - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - libs="$libs $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; - esac - pre_post_deps="$pre_post_deps $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs="$tmp_deplibs" - fi - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" - ;; - esac - fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - case $lib in - *.la) func_source "$lib" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` - case " $weak_libs " in - *" $deplib_base "*) ;; - *) deplibs="$deplibs $deplib" ;; - esac - done - done - libs="$dlprefiles" - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - compiler_flags="$compiler_flags $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - dir=$func_stripname_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - $ECHO - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because the file extensions .$libext of this argument makes me believe" - $ECHO "*** that it is just a static archive that I should not use here." - else - $ECHO - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - ;; - esac - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" - fi - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - dlprefiles="$dlprefiles $lib $dependency_libs" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" - fi - ;; - esac - func_basename "$lib" - laname="$func_basename_result" - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" - fi - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - newdlprefiles="$newdlprefiles $dir/$dlname" - else - newdlprefiles="$newdlprefiles $dir/$linklib" - fi - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - newlib_search_path="$newlib_search_path $func_stripname_result" - ;; - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in - *"$absdir:"*) ;; - *) temp_rpath="$temp_rpath$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc*) - # No point in relinking DLLs because paths are not encoded - notinst_deplibs="$notinst_deplibs $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" - break - fi - done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then - $ECHO - if test "$linkmode" = prog; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname="$1" - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc*) - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - func_basename "$soroot" - soname="$func_basename_result" - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from \`$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - $ECHO - $ECHO "*** And there doesn't seem to be a static archive available" - $ECHO "*** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - elif test -n "$old_library"; then - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - $ECHO - $ECHO "*** Warning: This system can not link to static lib archive $lib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - $ECHO "*** But as you try to build a module library, libtool will still create " - $ECHO "*** a static module, that should work as long as the dlopening application" - $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - $ECHO - $ECHO "*** However, this would only work if libtool was able to extract symbol" - $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" - $ECHO "*** not find such a program. So, this module is probably useless." - $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - *) temp_deplibs="$temp_deplibs $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - newlib_search_path="$newlib_search_path $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - if $opt_duplicate_deps ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path="$deplib" ;; - *.la) - func_dirname "$deplib" "" "." - dir="$func_dirname_result" - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" - path= - fi - fi - ;; - *) - path="-L$absdir/$objdir" - ;; - esac - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" - - path="-L$absdir" - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - tmp_libs="$tmp_libs $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "\`-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - objs="$objs$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" - - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" - else - $ECHO - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - libobjs="$libobjs $objs" - fi - fi - - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" - - install_libdir="$1" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - shift - IFS="$save_ifs" - - test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$1" - number_minor="$2" - number_revision="$3" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - darwin|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - *) - func_fatal_configuration "$modename: unknown library version type \`$version_type'" - ;; - esac - ;; - no) - current="$1" - revision="$2" - age="$3" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current" - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; - - qnx) - major=".$current" - versuffix=".$current" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - - *) - func_fatal_configuration "unknown library version type \`$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - fi - - func_generate_dlsyms "$libname" "$libname" "yes" - libobjs="$libobjs $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - removelist="$removelist $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - oldlibs="$oldlibs $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` - # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` - # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) dlfiles="$dlfiles $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) dlprefiles="$dlprefiles $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - deplibs="$deplibs System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - deplibs="$deplibs -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $ECHO - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $ECHO - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - $ECHO "*** I have the capability to make that library automatically link in when" - $ECHO "*** you link to this library. But I can only do this if you have a" - $ECHO "*** shared version of the library, which you do not appear to have" - $ECHO "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ - -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` - done - fi - if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | - $GREP . >/dev/null; then - $ECHO - if test "X$deplibs_check_method" = "Xnone"; then - $ECHO "*** Warning: inter-library dependencies are not supported in this platform." - else - $ECHO "*** Warning: inter-library dependencies are not known to be supported." - fi - $ECHO "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - fi - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - $ECHO - $ECHO "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - $ECHO "*** a static module, that should work as long as the dlopening" - $ECHO "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - $ECHO - $ECHO "*** However, this would only work if libtool was able to extract symbol" - $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" - $ECHO "*** not find such a program. So, this module is probably useless." - $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - $ECHO "*** The inter-library dependencies that have been dropped here will be" - $ECHO "*** automatically added whenever a program is linked with this library" - $ECHO "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - $ECHO - $ECHO "*** Since this library must not contain undefined symbols," - $ECHO "*** because either the platform does not support them or" - $ECHO "*** it was explicitly requested with -no-undefined," - $ECHO "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - deplibs="$new_libs" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - if test -n "$hardcode_libdir_flag_spec_ld"; then - eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" - else - eval dep_rpath=\"$hardcode_libdir_flag_spec\" - fi - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname="$1" - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - linknames="$linknames $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" - delfiles="$delfiles $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols="$export_symbols" - export_symbols= - always_export_symbols=yes - fi - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - func_len " $cmd" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' - fi - - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - tmp_deplibs="$tmp_deplibs $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - linker_flags="$linker_flags $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - output_la=`$ECHO "X$output" | $Xsed -e "$basename"` - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript - func_verbose "creating GNU ld script: $output" - $ECHO 'INPUT (' > $output - for obj in $save_libobjs - do - $ECHO "$obj" >> $output - done - $ECHO ')' >> $output - delfiles="$delfiles $output" - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test "$compiler_needs_object" = yes; then - firstobj="$1 " - shift - fi - for obj - do - $ECHO "$obj" >> $output - done - delfiles="$delfiles $output" - output=$firstobj\"$file_list_spec$output\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test "X$objlist" = X || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - eval concat_cmds=\"$reload_cmds $objlist $last_robj\" - else - # All subsequent reloadable object files will link in - # the last one created. - eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext - objlist=$obj - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" - if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" - fi - delfiles="$delfiles $output" - - else - output= - fi - - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - fi - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - if ${skipped_export-false}; then - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - fi - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - libobjs="$libobjs $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "\`-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - generated="$generated $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "\`-release' is ignored for programs" - - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - compile_command="$compile_command ${wl}-bind_at_load" - finalize_command="$finalize_command ${wl}-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) dllsearchpath="$dllsearchpath:$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=yes - case $host in - *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - *cegcc) - # Disable wrappers for cegcc, we are cross compiling anyway. - wrappers_required=no - ;; - *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - esac - if test "$wrappers_required" = no; then - # Replace the output file specification. - compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' - fi - - exit $exit_status - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - - # Quote $ECHO for shipping. - if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then - case $progpath in - [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; - *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; - esac - qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` - else - qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - oldobjs="$oldobjs $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $addlibs - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - - func_extract_archives $gentop $dlprefiles - oldobjs="$oldobjs $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - $ECHO "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase="$func_basename_result" - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - oldobjs="$oldobjs $gentop/$newobj" - ;; - *) oldobjs="$oldobjs $obj" ;; - esac - done - fi - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - newdependency_libs="$newdependency_libs $libdir/$name" - ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlfiles="$newdlfiles $libdir/$name" - ;; - *) newdlfiles="$newdlfiles $lib" ;; - esac - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - newdlprefiles="$newdlprefiles $libdir/$name" - ;; - esac - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlfiles="$newdlfiles $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlprefiles="$newdlprefiles $abs" - done - dlprefiles="$newdlprefiles" - fi - $RM $output - # place dlname in correct position for cygwin - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -{ test "$mode" = link || test "$mode" = relink; } && - func_mode_link ${1+"$@"} - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $opt_debug - RM="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) RM="$RM $arg"; rmforce=yes ;; - -*) RM="$RM $arg" ;; - *) files="$files $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - origobjdir="$objdir" - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - objdir="$origobjdir" - else - objdir="$dir/$origobjdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$mode" = uninstall && objdir="$dir" - - # Remember objdir for removal later, being careful to avoid duplicates - if test "$mode" = clean; then - case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" - - case "$mode" in - clean) - case " $library_names " in - # " " in the beginning catches empty $dlname - *" $dlname "*) ;; - *) rmfiles="$rmfiles $objdir/$dlname" ;; - esac - test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then - rmfiles="$rmfiles $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then - rmfiles="$rmfiles $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$mode" = clean ; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - rmfiles="$rmfiles $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - rmfiles="$rmfiles $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - rmfiles="$rmfiles $objdir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - objdir="$origobjdir" - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -{ test "$mode" = uninstall || test "$mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: -# vi:sw=2 - diff --git a/cloog-0.17.0/osl/autoconf/ltoptions.m4 b/cloog-0.17.0/osl/autoconf/ltoptions.m4 deleted file mode 100644 index 34151a3..0000000 --- a/cloog-0.17.0/osl/autoconf/ltoptions.m4 +++ /dev/null @@ -1,368 +0,0 @@ -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - ]) -])# _LT_SET_OPTIONS - - -## --------------------------------- ## -## Macros to handle LT_INIT options. ## -## --------------------------------- ## - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [0], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' -# LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/cloog-0.17.0/osl/autoconf/ltsugar.m4 b/cloog-0.17.0/osl/autoconf/ltsugar.m4 deleted file mode 100644 index 9000a05..0000000 --- a/cloog-0.17.0/osl/autoconf/ltsugar.m4 +++ /dev/null @@ -1,123 +0,0 @@ -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltsugar.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) - - -# lt_join(SEP, ARG1, [ARG2...]) -# ----------------------------- -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their -# associated separator. -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier -# versions in m4sugar had bugs. -m4_define([lt_join], -[m4_if([$#], [1], [], - [$#], [2], [[$2]], - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) -m4_define([_lt_join], -[m4_if([$#$2], [2], [], - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) - - -# lt_car(LIST) -# lt_cdr(LIST) -# ------------ -# Manipulate m4 lists. -# These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. -m4_define([lt_car], [[$1]]) -m4_define([lt_cdr], -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], - [$#], 1, [], - [m4_dquote(m4_shift($@))])]) -m4_define([lt_unquote], $1) - - -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) -# ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. -# Note that neither SEPARATOR nor STRING are expanded; they are appended -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). -# No SEPARATOR is output if MACRO-NAME was previously undefined (different -# than defined and empty). -# -# This macro is needed until we can rely on Autoconf 2.62, since earlier -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. -m4_define([lt_append], -[m4_define([$1], - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) - - - -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) -# ---------------------------------------------------------- -# Produce a SEP delimited list of all paired combinations of elements of -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list -# has the form PREFIXmINFIXSUFFIXn. -# Needed until we can rely on m4_combine added in Autoconf 2.62. -m4_define([lt_combine], -[m4_if(m4_eval([$# > 3]), [1], - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl -[[m4_foreach([_Lt_prefix], [$2], - [m4_foreach([_Lt_suffix], - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) - - -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) -# ----------------------------------------------------------------------- -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. -m4_define([lt_if_append_uniq], -[m4_ifdef([$1], - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], - [lt_append([$1], [$2], [$3])$4], - [$5])], - [lt_append([$1], [$2], [$3])$4])]) - - -# lt_dict_add(DICT, KEY, VALUE) -# ----------------------------- -m4_define([lt_dict_add], -[m4_define([$1($2)], [$3])]) - - -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) -# -------------------------------------------- -m4_define([lt_dict_add_subkey], -[m4_define([$1($2:$3)], [$4])]) - - -# lt_dict_fetch(DICT, KEY, [SUBKEY]) -# ---------------------------------- -m4_define([lt_dict_fetch], -[m4_ifval([$3], - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) - - -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) -# ----------------------------------------------------------------- -m4_define([lt_if_dict_fetch], -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], - [$5], - [$6])]) - - -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) -# -------------------------------------------------------------- -m4_define([lt_dict_filter], -[m4_if([$5], [], [], - [lt_join(m4_quote(m4_default([$4], [[, ]])), - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl -]) diff --git a/cloog-0.17.0/osl/autoconf/ltversion.m4 b/cloog-0.17.0/osl/autoconf/ltversion.m4 deleted file mode 100644 index f3c5309..0000000 --- a/cloog-0.17.0/osl/autoconf/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# Generated from ltversion.in. - -# serial 3017 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.2.6b]) -m4_define([LT_PACKAGE_REVISION], [1.3017]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.2.6b' -macro_revision='1.3017' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) diff --git a/cloog-0.17.0/osl/autoconf/lt~obsolete.m4 b/cloog-0.17.0/osl/autoconf/lt~obsolete.m4 deleted file mode 100644 index 637bb20..0000000 --- a/cloog-0.17.0/osl/autoconf/lt~obsolete.m4 +++ /dev/null @@ -1,92 +0,0 @@ -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004. -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 4 lt~obsolete.m4 - -# These exist entirely to fool aclocal when bootstrapping libtool. -# -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) -# which have later been changed to m4_define as they aren't part of the -# exported API, or moved to Autoconf or Automake where they belong. -# -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -# using a macro with the same name in our local m4/libtool.m4 it'll -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -# and doesn't know about Autoconf macros at all.) -# -# So we provide this file, which has a silly filename so it's always -# included after everything else. This provides aclocal with the -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -# because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -# -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -# Yes, that means every name once taken will need to remain here until -# we give up compatibility with versions before 1.7, at which point -# we need to keep only those names which we still refer to. - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) - -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) diff --git a/cloog-0.17.0/osl/autoconf/missing b/cloog-0.17.0/osl/autoconf/missing deleted file mode 100755 index 28055d2..0000000 --- a/cloog-0.17.0/osl/autoconf/missing +++ /dev/null @@ -1,376 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2009-04-28.21; # UTC - -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, -# 2008, 2009 Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -run=: -sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' -sed_minuso='s/.* -o \([^ ]*\).*/\1/p' - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -msg="missing on your system" - -case $1 in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - autom4te touch the output file, or create a stub one - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch] - -Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and -\`g' are ignored when checking the name. - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - -esac - -# normalize program name to check for. -program=`echo "$1" | sed ' - s/^gnu-//; t - s/^gnu//; t - s/^g//; t'` - -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). This is about non-GNU programs, so use $1 not -# $program. -case $1 in - lex*|yacc*) - # Not GNU programs, they don't have --version. - ;; - - tar*) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; - - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running `$TOOL --version' or `$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case $program in - aclocal*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case $f in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te*) - echo 1>&2 "\ -WARNING: \`$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison*|yacc*) - echo 1>&2 "\ -WARNING: \`$1' $msg. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if test ! -f y.tab.h; then - echo >y.tab.h - fi - if test ! -f y.tab.c; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex*|flex*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if test ! -f lex.yy.c; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit $? - fi - ;; - - makeinfo*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -z "$file"; then - # ... or it is the one specified with @setfilename ... - infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n ' - /^@setfilename/{ - s/.* \([^ ]*\) *$/\1/ - p - q - }' $infile` - # ... or it is derived from the source name (dir/f.texi becomes f.info) - test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info - fi - # If the file does not exist, the user really needs makeinfo; - # let's fail without touching anything. - test -f $file || exit 1 - touch $file - ;; - - tar*) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case $firstarg in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case $firstarg in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/cloog-0.17.0/osl/autoconf/texinfo.tex b/cloog-0.17.0/osl/autoconf/texinfo.tex deleted file mode 100644 index 9140826..0000000 --- a/cloog-0.17.0/osl/autoconf/texinfo.tex +++ /dev/null @@ -1,9291 +0,0 @@ -% texinfo.tex -- TeX macros to handle Texinfo files. -% -% Load plain if necessary, i.e., if running under initex. -\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi -% -\def\texinfoversion{2009-08-14.15} -% -% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, -% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, -% 2007, 2008, 2009 Free Software Foundation, Inc. -% -% This texinfo.tex file is free software: you can redistribute it and/or -% modify it under the terms of the GNU General Public License as -% published by the Free Software Foundation, either version 3 of the -% License, or (at your option) any later version. -% -% This texinfo.tex file is distributed in the hope that it will be -% useful, but WITHOUT ANY WARRANTY; without even the implied warranty -% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -% General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program. If not, see . -% -% As a special exception, when this file is read by TeX when processing -% a Texinfo source document, you may use the result without -% restriction. (This has been our intent since Texinfo was invented.) -% -% Please try the latest version of texinfo.tex before submitting bug -% reports; you can get the latest version from: -% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or -% ftp://tug.org/tex/texinfo.tex -% (and all CTAN mirrors, see http://www.ctan.org). -% The texinfo.tex in any given distribution could well be out -% of date, so if that's what you're using, please check. -% -% Send bug reports to bug-texinfo@gnu.org. Please include including a -% complete document in each bug report with which we can reproduce the -% problem. Patches are, of course, greatly appreciated. -% -% To process a Texinfo manual with TeX, it's most reliable to use the -% texi2dvi shell script that comes with the distribution. For a simple -% manual foo.texi, however, you can get away with this: -% tex foo.texi -% texindex foo.?? -% tex foo.texi -% tex foo.texi -% dvips foo.dvi -o # or whatever; this makes foo.ps. -% The extra TeX runs get the cross-reference information correct. -% Sometimes one run after texindex suffices, and sometimes you need more -% than two; texi2dvi does it as many times as necessary. -% -% It is possible to adapt texinfo.tex for other languages, to some -% extent. You can get the existing language-specific files from the -% full Texinfo distribution. -% -% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. - - -\message{Loading texinfo [version \texinfoversion]:} - -% If in a .fmt file, print the version number -% and turn on active characters that we couldn't do earlier because -% they might have appeared in the input file name. -\everyjob{\message{[Texinfo version \texinfoversion]}% - \catcode`+=\active \catcode`\_=\active} - - -\chardef\other=12 - -% We never want plain's \outer definition of \+ in Texinfo. -% For @tex, we can use \tabalign. -\let\+ = \relax - -% Save some plain tex macros whose names we will redefine. -\let\ptexb=\b -\let\ptexbullet=\bullet -\let\ptexc=\c -\let\ptexcomma=\, -\let\ptexdot=\. -\let\ptexdots=\dots -\let\ptexend=\end -\let\ptexequiv=\equiv -\let\ptexexclam=\! -\let\ptexfootnote=\footnote -\let\ptexgtr=> -\let\ptexhat=^ -\let\ptexi=\i -\let\ptexindent=\indent -\let\ptexinsert=\insert -\let\ptexlbrace=\{ -\let\ptexless=< -\let\ptexnewwrite\newwrite -\let\ptexnoindent=\noindent -\let\ptexplus=+ -\let\ptexrbrace=\} -\let\ptexslash=\/ -\let\ptexstar=\* -\let\ptext=\t -\let\ptextop=\top -{\catcode`\'=\active -\global\let\ptexquoteright'}% Math-mode def from plain.tex. -\let\ptexraggedright=\raggedright - -% If this character appears in an error message or help string, it -% starts a new line in the output. -\newlinechar = `^^J - -% Use TeX 3.0's \inputlineno to get the line number, for better error -% messages, but if we're using an old version of TeX, don't do anything. -% -\ifx\inputlineno\thisisundefined - \let\linenumber = \empty % Pre-3.0. -\else - \def\linenumber{l.\the\inputlineno:\space} -\fi - -% Set up fixed words for English if not already set. -\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi -\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi -\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi -\ifx\putwordin\undefined \gdef\putwordin{in}\fi -\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi -\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi -\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi -\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi -\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi -\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi -\ifx\putwordof\undefined \gdef\putwordof{of}\fi -\ifx\putwordon\undefined \gdef\putwordon{on}\fi -\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi -\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi -\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi -\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi -\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi -\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi -\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi -% -\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi -\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi -\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi -\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi -\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi -\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi -\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi -\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi -\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi -\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi -\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi -\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi -% -\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi -\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi -\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi -\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi -\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi - -% Since the category of space is not known, we have to be careful. -\chardef\spacecat = 10 -\def\spaceisspace{\catcode`\ =\spacecat} - -% sometimes characters are active, so we need control sequences. -\chardef\colonChar = `\: -\chardef\commaChar = `\, -\chardef\dashChar = `\- -\chardef\dotChar = `\. -\chardef\exclamChar= `\! -\chardef\lquoteChar= `\` -\chardef\questChar = `\? -\chardef\rquoteChar= `\' -\chardef\semiChar = `\; -\chardef\underChar = `\_ - -% Ignore a token. -% -\def\gobble#1{} - -% The following is used inside several \edef's. -\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} - -% Hyphenation fixes. -\hyphenation{ - Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script - ap-pen-dix bit-map bit-maps - data-base data-bases eshell fall-ing half-way long-est man-u-script - man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm - par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces - spell-ing spell-ings - stand-alone strong-est time-stamp time-stamps which-ever white-space - wide-spread wrap-around -} - -% Margin to add to right of even pages, to left of odd pages. -\newdimen\bindingoffset -\newdimen\normaloffset -\newdimen\pagewidth \newdimen\pageheight - -% For a final copy, take out the rectangles -% that mark overfull boxes (in case you have decided -% that the text looks ok even though it passes the margin). -% -\def\finalout{\overfullrule=0pt} - -% @| inserts a changebar to the left of the current line. It should -% surround any changed text. This approach does *not* work if the -% change spans more than two lines of output. To handle that, we would -% have adopt a much more difficult approach (putting marks into the main -% vertical list for the beginning and end of each change). -% -\def\|{% - % \vadjust can only be used in horizontal mode. - \leavevmode - % - % Append this vertical mode material after the current line in the output. - \vadjust{% - % We want to insert a rule with the height and depth of the current - % leading; that is exactly what \strutbox is supposed to record. - \vskip-\baselineskip - % - % \vadjust-items are inserted at the left edge of the type. So - % the \llap here moves out into the left-hand margin. - \llap{% - % - % For a thicker or thinner bar, change the `1pt'. - \vrule height\baselineskip width1pt - % - % This is the space between the bar and the text. - \hskip 12pt - }% - }% -} - -% Sometimes it is convenient to have everything in the transcript file -% and nothing on the terminal. We don't just call \tracingall here, -% since that produces some useless output on the terminal. We also make -% some effort to order the tracing commands to reduce output in the log -% file; cf. trace.sty in LaTeX. -% -\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% -\def\loggingall{% - \tracingstats2 - \tracingpages1 - \tracinglostchars2 % 2 gives us more in etex - \tracingparagraphs1 - \tracingoutput1 - \tracingmacros2 - \tracingrestores1 - \showboxbreadth\maxdimen \showboxdepth\maxdimen - \ifx\eTeXversion\undefined\else % etex gives us more logging - \tracingscantokens1 - \tracingifs1 - \tracinggroups1 - \tracingnesting2 - \tracingassigns1 - \fi - \tracingcommands3 % 3 gives us more in etex - \errorcontextlines16 -}% - -% add check for \lastpenalty to plain's definitions. If the last thing -% we did was a \nobreak, we don't want to insert more space. -% -\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount - \removelastskip\penalty-50\smallskip\fi\fi} -\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount - \removelastskip\penalty-100\medskip\fi\fi} -\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount - \removelastskip\penalty-200\bigskip\fi\fi} - -% For @cropmarks command. -% Do @cropmarks to get crop marks. -% -\newif\ifcropmarks -\let\cropmarks = \cropmarkstrue -% -% Dimensions to add cropmarks at corners. -% Added by P. A. MacKay, 12 Nov. 1986 -% -\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines -\newdimen\cornerlong \cornerlong=1pc -\newdimen\cornerthick \cornerthick=.3pt -\newdimen\topandbottommargin \topandbottommargin=.75in - -% Output a mark which sets \thischapter, \thissection and \thiscolor. -% We dump everything together because we only have one kind of mark. -% This works because we only use \botmark / \topmark, not \firstmark. -% -% A mark contains a subexpression of the \ifcase ... \fi construct. -% \get*marks macros below extract the needed part using \ifcase. -% -% Another complication is to let the user choose whether \thischapter -% (\thissection) refers to the chapter (section) in effect at the top -% of a page, or that at the bottom of a page. The solution is -% described on page 260 of The TeXbook. It involves outputting two -% marks for the sectioning macros, one before the section break, and -% one after. I won't pretend I can describe this better than DEK... -\def\domark{% - \toks0=\expandafter{\lastchapterdefs}% - \toks2=\expandafter{\lastsectiondefs}% - \toks4=\expandafter{\prevchapterdefs}% - \toks6=\expandafter{\prevsectiondefs}% - \toks8=\expandafter{\lastcolordefs}% - \mark{% - \the\toks0 \the\toks2 - \noexpand\or \the\toks4 \the\toks6 - \noexpand\else \the\toks8 - }% -} -% \topmark doesn't work for the very first chapter (after the title -% page or the contents), so we use \firstmark there -- this gets us -% the mark with the chapter defs, unless the user sneaks in, e.g., -% @setcolor (or @url, or @link, etc.) between @contents and the very -% first @chapter. -\def\gettopheadingmarks{% - \ifcase0\topmark\fi - \ifx\thischapter\empty \ifcase0\firstmark\fi \fi -} -\def\getbottomheadingmarks{\ifcase1\botmark\fi} -\def\getcolormarks{\ifcase2\topmark\fi} - -% Avoid "undefined control sequence" errors. -\def\lastchapterdefs{} -\def\lastsectiondefs{} -\def\prevchapterdefs{} -\def\prevsectiondefs{} -\def\lastcolordefs{} - -% Main output routine. -\chardef\PAGE = 255 -\output = {\onepageout{\pagecontents\PAGE}} - -\newbox\headlinebox -\newbox\footlinebox - -% \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions, but you have to call it yourself. -\def\onepageout#1{% - \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi - % - \ifodd\pageno \advance\hoffset by \bindingoffset - \else \advance\hoffset by -\bindingoffset\fi - % - % Do this outside of the \shipout so @code etc. will be expanded in - % the headline as they should be, not taken literally (outputting ''code). - \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi - \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% - \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi - \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% - % - {% - % Have to do this stuff outside the \shipout because we want it to - % take effect in \write's, yet the group defined by the \vbox ends - % before the \shipout runs. - % - \indexdummies % don't expand commands in the output. - \normalturnoffactive % \ in index entries must not stay \, e.g., if - % the page break happens to be in the middle of an example. - % We don't want .vr (or whatever) entries like this: - % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} - % "\acronym" won't work when it's read back in; - % it needs to be - % {\code {{\tt \backslashcurfont }acronym} - \shipout\vbox{% - % Do this early so pdf references go to the beginning of the page. - \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi - % - \ifcropmarks \vbox to \outervsize\bgroup - \hsize = \outerhsize - \vskip-\topandbottommargin - \vtop to0pt{% - \line{\ewtop\hfil\ewtop}% - \nointerlineskip - \line{% - \vbox{\moveleft\cornerthick\nstop}% - \hfill - \vbox{\moveright\cornerthick\nstop}% - }% - \vss}% - \vskip\topandbottommargin - \line\bgroup - \hfil % center the page within the outer (page) hsize. - \ifodd\pageno\hskip\bindingoffset\fi - \vbox\bgroup - \fi - % - \unvbox\headlinebox - \pagebody{#1}% - \ifdim\ht\footlinebox > 0pt - % Only leave this space if the footline is nonempty. - % (We lessened \vsize for it in \oddfootingyyy.) - % The \baselineskip=24pt in plain's \makefootline has no effect. - \vskip 24pt - \unvbox\footlinebox - \fi - % - \ifcropmarks - \egroup % end of \vbox\bgroup - \hfil\egroup % end of (centering) \line\bgroup - \vskip\topandbottommargin plus1fill minus1fill - \boxmaxdepth = \cornerthick - \vbox to0pt{\vss - \line{% - \vbox{\moveleft\cornerthick\nsbot}% - \hfill - \vbox{\moveright\cornerthick\nsbot}% - }% - \nointerlineskip - \line{\ewbot\hfil\ewbot}% - }% - \egroup % \vbox from first cropmarks clause - \fi - }% end of \shipout\vbox - }% end of group with \indexdummies - \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi -} - -\newinsert\margin \dimen\margin=\maxdimen - -\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} -{\catcode`\@ =11 -\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi -% marginal hacks, juha@viisa.uucp (Juha Takala) -\ifvoid\margin\else % marginal info is present - \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi -\dimen@=\dp#1\relax \unvbox#1\relax -\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi -\ifr@ggedbottom \kern-\dimen@ \vfil \fi} -} - -% Here are the rules for the cropmarks. Note that they are -% offset so that the space between them is truly \outerhsize or \outervsize -% (P. A. MacKay, 12 November, 1986) -% -\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} -\def\nstop{\vbox - {\hrule height\cornerthick depth\cornerlong width\cornerthick}} -\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} -\def\nsbot{\vbox - {\hrule height\cornerlong depth\cornerthick width\cornerthick}} - -% Parse an argument, then pass it to #1. The argument is the rest of -% the input line (except we remove a trailing comment). #1 should be a -% macro which expects an ordinary undelimited TeX argument. -% -\def\parsearg{\parseargusing{}} -\def\parseargusing#1#2{% - \def\argtorun{#2}% - \begingroup - \obeylines - \spaceisspace - #1% - \parseargline\empty% Insert the \empty token, see \finishparsearg below. -} - -{\obeylines % - \gdef\parseargline#1^^M{% - \endgroup % End of the group started in \parsearg. - \argremovecomment #1\comment\ArgTerm% - }% -} - -% First remove any @comment, then any @c comment. -\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} -\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} - -% Each occurrence of `\^^M' or `\^^M' is replaced by a single space. -% -% \argremovec might leave us with trailing space, e.g., -% @end itemize @c foo -% This space token undergoes the same procedure and is eventually removed -% by \finishparsearg. -% -\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} -\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} -\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% - \def\temp{#3}% - \ifx\temp\empty - % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: - \let\temp\finishparsearg - \else - \let\temp\argcheckspaces - \fi - % Put the space token in: - \temp#1 #3\ArgTerm -} - -% If a _delimited_ argument is enclosed in braces, they get stripped; so -% to get _exactly_ the rest of the line, we had to prevent such situation. -% We prepended an \empty token at the very beginning and we expand it now, -% just before passing the control to \argtorun. -% (Similarly, we have to think about #3 of \argcheckspacesY above: it is -% either the null string, or it ends with \^^M---thus there is no danger -% that a pair of braces would be stripped. -% -% But first, we have to remove the trailing space token. -% -\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} - -% \parseargdef\foo{...} -% is roughly equivalent to -% \def\foo{\parsearg\Xfoo} -% \def\Xfoo#1{...} -% -% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my -% favourite TeX trick. --kasal, 16nov03 - -\def\parseargdef#1{% - \expandafter \doparseargdef \csname\string#1\endcsname #1% -} -\def\doparseargdef#1#2{% - \def#2{\parsearg#1}% - \def#1##1% -} - -% Several utility definitions with active space: -{ - \obeyspaces - \gdef\obeyedspace{ } - - % Make each space character in the input produce a normal interword - % space in the output. Don't allow a line break at this space, as this - % is used only in environments like @example, where each line of input - % should produce a line of output anyway. - % - \gdef\sepspaces{\obeyspaces\let =\tie} - - % If an index command is used in an @example environment, any spaces - % therein should become regular spaces in the raw index file, not the - % expansion of \tie (\leavevmode \penalty \@M \ ). - \gdef\unsepspaces{\let =\space} -} - - -\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} - -% Define the framework for environments in texinfo.tex. It's used like this: -% -% \envdef\foo{...} -% \def\Efoo{...} -% -% It's the responsibility of \envdef to insert \begingroup before the -% actual body; @end closes the group after calling \Efoo. \envdef also -% defines \thisenv, so the current environment is known; @end checks -% whether the environment name matches. The \checkenv macro can also be -% used to check whether the current environment is the one expected. -% -% Non-false conditionals (@iftex, @ifset) don't fit into this, so they -% are not treated as environments; they don't open a group. (The -% implementation of @end takes care not to call \endgroup in this -% special case.) - - -% At run-time, environments start with this: -\def\startenvironment#1{\begingroup\def\thisenv{#1}} -% initialize -\let\thisenv\empty - -% ... but they get defined via ``\envdef\foo{...}'': -\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} -\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} - -% Check whether we're in the right environment: -\def\checkenv#1{% - \def\temp{#1}% - \ifx\thisenv\temp - \else - \badenverr - \fi -} - -% Environment mismatch, #1 expected: -\def\badenverr{% - \errhelp = \EMsimple - \errmessage{This command can appear only \inenvironment\temp, - not \inenvironment\thisenv}% -} -\def\inenvironment#1{% - \ifx#1\empty - out of any environment% - \else - in environment \expandafter\string#1% - \fi -} - -% @end foo executes the definition of \Efoo. -% But first, it executes a specialized version of \checkenv -% -\parseargdef\end{% - \if 1\csname iscond.#1\endcsname - \else - % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 - \expandafter\checkenv\csname#1\endcsname - \csname E#1\endcsname - \endgroup - \fi -} - -\newhelp\EMsimple{Press RETURN to continue.} - - -%% Simple single-character @ commands - -% @@ prints an @ -% Kludge this until the fonts are right (grr). -\def\@{{\tt\char64}} - -% This is turned off because it was never documented -% and you can use @w{...} around a quote to suppress ligatures. -%% Define @` and @' to be the same as ` and ' -%% but suppressing ligatures. -%\def\`{{`}} -%\def\'{{'}} - -% Used to generate quoted braces. -\def\mylbrace {{\tt\char123}} -\def\myrbrace {{\tt\char125}} -\let\{=\mylbrace -\let\}=\myrbrace -\begingroup - % Definitions to produce \{ and \} commands for indices, - % and @{ and @} for the aux/toc files. - \catcode`\{ = \other \catcode`\} = \other - \catcode`\[ = 1 \catcode`\] = 2 - \catcode`\! = 0 \catcode`\\ = \other - !gdef!lbracecmd[\{]% - !gdef!rbracecmd[\}]% - !gdef!lbraceatcmd[@{]% - !gdef!rbraceatcmd[@}]% -!endgroup - -% @comma{} to avoid , parsing problems. -\let\comma = , - -% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent -% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. -\let\, = \c -\let\dotaccent = \. -\def\ringaccent#1{{\accent23 #1}} -\let\tieaccent = \t -\let\ubaraccent = \b -\let\udotaccent = \d - -% Other special characters: @questiondown @exclamdown @ordf @ordm -% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. -\def\questiondown{?`} -\def\exclamdown{!`} -\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} -\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} - -% Dotless i and dotless j, used for accents. -\def\imacro{i} -\def\jmacro{j} -\def\dotless#1{% - \def\temp{#1}% - \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi - \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi - \else \errmessage{@dotless can be used only with i or j}% - \fi\fi -} - -% The \TeX{} logo, as in plain, but resetting the spacing so that a -% period following counts as ending a sentence. (Idea found in latex.) -% -\edef\TeX{\TeX \spacefactor=1000 } - -% @LaTeX{} logo. Not quite the same results as the definition in -% latex.ltx, since we use a different font for the raised A; it's most -% convenient for us to use an explicitly smaller font, rather than using -% the \scriptstyle font (since we don't reset \scriptstyle and -% \scriptscriptstyle). -% -\def\LaTeX{% - L\kern-.36em - {\setbox0=\hbox{T}% - \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% - \kern-.15em - \TeX -} - -% Be sure we're in horizontal mode when doing a tie, since we make space -% equivalent to this in @example-like environments. Otherwise, a space -% at the beginning of a line will start with \penalty -- and -% since \penalty is valid in vertical mode, we'd end up putting the -% penalty on the vertical list instead of in the new paragraph. -{\catcode`@ = 11 - % Avoid using \@M directly, because that causes trouble - % if the definition is written into an index file. - \global\let\tiepenalty = \@M - \gdef\tie{\leavevmode\penalty\tiepenalty\ } -} - -% @: forces normal size whitespace following. -\def\:{\spacefactor=1000 } - -% @* forces a line break. -\def\*{\hfil\break\hbox{}\ignorespaces} - -% @/ allows a line break. -\let\/=\allowbreak - -% @. is an end-of-sentence period. -\def\.{.\spacefactor=\endofsentencespacefactor\space} - -% @! is an end-of-sentence bang. -\def\!{!\spacefactor=\endofsentencespacefactor\space} - -% @? is an end-of-sentence query. -\def\?{?\spacefactor=\endofsentencespacefactor\space} - -% @frenchspacing on|off says whether to put extra space after punctuation. -% -\def\onword{on} -\def\offword{off} -% -\parseargdef\frenchspacing{% - \def\temp{#1}% - \ifx\temp\onword \plainfrenchspacing - \else\ifx\temp\offword \plainnonfrenchspacing - \else - \errhelp = \EMsimple - \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% - \fi\fi -} - -% @w prevents a word break. Without the \leavevmode, @w at the -% beginning of a paragraph, when TeX is still in vertical mode, would -% produce a whole line of output instead of starting the paragraph. -\def\w#1{\leavevmode\hbox{#1}} - -% @group ... @end group forces ... to be all on one page, by enclosing -% it in a TeX vbox. We use \vtop instead of \vbox to construct the box -% to keep its height that of a normal line. According to the rules for -% \topskip (p.114 of the TeXbook), the glue inserted is -% max (\topskip - \ht (first item), 0). If that height is large, -% therefore, no glue is inserted, and the space between the headline and -% the text is small, which looks bad. -% -% Another complication is that the group might be very large. This can -% cause the glue on the previous page to be unduly stretched, because it -% does not have much material. In this case, it's better to add an -% explicit \vfill so that the extra space is at the bottom. The -% threshold for doing this is if the group is more than \vfilllimit -% percent of a page (\vfilllimit can be changed inside of @tex). -% -\newbox\groupbox -\def\vfilllimit{0.7} -% -\envdef\group{% - \ifnum\catcode`\^^M=\active \else - \errhelp = \groupinvalidhelp - \errmessage{@group invalid in context where filling is enabled}% - \fi - \startsavinginserts - % - \setbox\groupbox = \vtop\bgroup - % Do @comment since we are called inside an environment such as - % @example, where each end-of-line in the input causes an - % end-of-line in the output. We don't want the end-of-line after - % the `@group' to put extra space in the output. Since @group - % should appear on a line by itself (according to the Texinfo - % manual), we don't worry about eating any user text. - \comment -} -% -% The \vtop produces a box with normal height and large depth; thus, TeX puts -% \baselineskip glue before it, and (when the next line of text is done) -% \lineskip glue after it. Thus, space below is not quite equal to space -% above. But it's pretty close. -\def\Egroup{% - % To get correct interline space between the last line of the group - % and the first line afterwards, we have to propagate \prevdepth. - \endgraf % Not \par, as it may have been set to \lisppar. - \global\dimen1 = \prevdepth - \egroup % End the \vtop. - % \dimen0 is the vertical size of the group's box. - \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox - % \dimen2 is how much space is left on the page (more or less). - \dimen2 = \pageheight \advance\dimen2 by -\pagetotal - % if the group doesn't fit on the current page, and it's a big big - % group, force a page break. - \ifdim \dimen0 > \dimen2 - \ifdim \pagetotal < \vfilllimit\pageheight - \page - \fi - \fi - \box\groupbox - \prevdepth = \dimen1 - \checkinserts -} -% -% TeX puts in an \escapechar (i.e., `@') at the beginning of the help -% message, so this ends up printing `@group can only ...'. -% -\newhelp\groupinvalidhelp{% -group can only be used in environments such as @example,^^J% -where each line of input produces a line of output.} - -% @need space-in-mils -% forces a page break if there is not space-in-mils remaining. - -\newdimen\mil \mil=0.001in - -% Old definition--didn't work. -%\parseargdef\need{\par % -%% This method tries to make TeX break the page naturally -%% if the depth of the box does not fit. -%{\baselineskip=0pt% -%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak -%\prevdepth=-1000pt -%}} - -\parseargdef\need{% - % Ensure vertical mode, so we don't make a big box in the middle of a - % paragraph. - \par - % - % If the @need value is less than one line space, it's useless. - \dimen0 = #1\mil - \dimen2 = \ht\strutbox - \advance\dimen2 by \dp\strutbox - \ifdim\dimen0 > \dimen2 - % - % Do a \strut just to make the height of this box be normal, so the - % normal leading is inserted relative to the preceding line. - % And a page break here is fine. - \vtop to #1\mil{\strut\vfil}% - % - % TeX does not even consider page breaks if a penalty added to the - % main vertical list is 10000 or more. But in order to see if the - % empty box we just added fits on the page, we must make it consider - % page breaks. On the other hand, we don't want to actually break the - % page after the empty box. So we use a penalty of 9999. - % - % There is an extremely small chance that TeX will actually break the - % page at this \penalty, if there are no other feasible breakpoints in - % sight. (If the user is using lots of big @group commands, which - % almost-but-not-quite fill up a page, TeX will have a hard time doing - % good page breaking, for example.) However, I could not construct an - % example where a page broke at this \penalty; if it happens in a real - % document, then we can reconsider our strategy. - \penalty9999 - % - % Back up by the size of the box, whether we did a page break or not. - \kern -#1\mil - % - % Do not allow a page break right after this kern. - \nobreak - \fi -} - -% @br forces paragraph break (and is undocumented). - -\let\br = \par - -% @page forces the start of a new page. -% -\def\page{\par\vfill\supereject} - -% @exdent text.... -% outputs text on separate line in roman font, starting at standard page margin - -% This records the amount of indent in the innermost environment. -% That's how much \exdent should take out. -\newskip\exdentamount - -% This defn is used inside fill environments such as @defun. -\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} - -% This defn is used inside nofill environments such as @example. -\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount - \leftline{\hskip\leftskip{\rm#1}}}} - -% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current -% paragraph. For more general purposes, use the \margin insertion -% class. WHICH is `l' or `r'. -% -\newskip\inmarginspacing \inmarginspacing=1cm -\def\strutdepth{\dp\strutbox} -% -\def\doinmargin#1#2{\strut\vadjust{% - \nobreak - \kern-\strutdepth - \vtop to \strutdepth{% - \baselineskip=\strutdepth - \vss - % if you have multiple lines of stuff to put here, you'll need to - % make the vbox yourself of the appropriate size. - \ifx#1l% - \llap{\ignorespaces #2\hskip\inmarginspacing}% - \else - \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% - \fi - \null - }% -}} -\def\inleftmargin{\doinmargin l} -\def\inrightmargin{\doinmargin r} -% -% @inmargin{TEXT [, RIGHT-TEXT]} -% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; -% else use TEXT for both). -% -\def\inmargin#1{\parseinmargin #1,,\finish} -\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \def\lefttext{#1}% have both texts - \def\righttext{#2}% - \else - \def\lefttext{#1}% have only one text - \def\righttext{#1}% - \fi - % - \ifodd\pageno - \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin - \else - \def\temp{\inleftmargin\lefttext}% - \fi - \temp -} - -% @include FILE -- \input text of FILE. -% -\def\include{\parseargusing\filenamecatcodes\includezzz} -\def\includezzz#1{% - \pushthisfilestack - \def\thisfile{#1}% - {% - \makevalueexpandable % we want to expand any @value in FILE. - \turnoffactive % and allow special characters in the expansion - \indexnofonts % Allow `@@' and other weird things in file names. - \edef\temp{\noexpand\input #1 }% - % - % This trickery is to read FILE outside of a group, in case it makes - % definitions, etc. - \expandafter - }\temp - \popthisfilestack -} -\def\filenamecatcodes{% - \catcode`\\=\other - \catcode`~=\other - \catcode`^=\other - \catcode`_=\other - \catcode`|=\other - \catcode`<=\other - \catcode`>=\other - \catcode`+=\other - \catcode`-=\other - \catcode`\`=\other - \catcode`\'=\other -} - -\def\pushthisfilestack{% - \expandafter\pushthisfilestackX\popthisfilestack\StackTerm -} -\def\pushthisfilestackX{% - \expandafter\pushthisfilestackY\thisfile\StackTerm -} -\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% - \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% -} - -\def\popthisfilestack{\errthisfilestackempty} -\def\errthisfilestackempty{\errmessage{Internal error: - the stack of filenames is empty.}} - -\def\thisfile{} - -% @center line -% outputs that line, centered. -% -\parseargdef\center{% - \ifhmode - \let\next\centerH - \else - \let\next\centerV - \fi - \next{\hfil \ignorespaces#1\unskip \hfil}% -} -\def\centerH#1{% - {% - \hfil\break - \advance\hsize by -\leftskip - \advance\hsize by -\rightskip - \line{#1}% - \break - }% -} -\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} - -% @sp n outputs n lines of vertical space - -\parseargdef\sp{\vskip #1\baselineskip} - -% @comment ...line which is ignored... -% @c is the same as @comment -% @ignore ... @end ignore is another way to write a comment - -\def\comment{\begingroup \catcode`\^^M=\other% -\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% -\commentxxx} -{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} - -\let\c=\comment - -% @paragraphindent NCHARS -% We'll use ems for NCHARS, close enough. -% NCHARS can also be the word `asis' or `none'. -% We cannot feasibly implement @paragraphindent asis, though. -% -\def\asisword{asis} % no translation, these are keywords -\def\noneword{none} -% -\parseargdef\paragraphindent{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \defaultparindent = 0pt - \else - \defaultparindent = #1em - \fi - \fi - \parindent = \defaultparindent -} - -% @exampleindent NCHARS -% We'll use ems for NCHARS like @paragraphindent. -% It seems @exampleindent asis isn't necessary, but -% I preserve it to make it similar to @paragraphindent. -\parseargdef\exampleindent{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \lispnarrowing = 0pt - \else - \lispnarrowing = #1em - \fi - \fi -} - -% @firstparagraphindent WORD -% If WORD is `none', then suppress indentation of the first paragraph -% after a section heading. If WORD is `insert', then do indent at such -% paragraphs. -% -% The paragraph indentation is suppressed or not by calling -% \suppressfirstparagraphindent, which the sectioning commands do. -% We switch the definition of this back and forth according to WORD. -% By default, we suppress indentation. -% -\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} -\def\insertword{insert} -% -\parseargdef\firstparagraphindent{% - \def\temp{#1}% - \ifx\temp\noneword - \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent - \else\ifx\temp\insertword - \let\suppressfirstparagraphindent = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @firstparagraphindent option `\temp'}% - \fi\fi -} - -% Here is how we actually suppress indentation. Redefine \everypar to -% \kern backwards by \parindent, and then reset itself to empty. -% -% We also make \indent itself not actually do anything until the next -% paragraph. -% -\gdef\dosuppressfirstparagraphindent{% - \gdef\indent{% - \restorefirstparagraphindent - \indent - }% - \gdef\noindent{% - \restorefirstparagraphindent - \noindent - }% - \global\everypar = {% - \kern -\parindent - \restorefirstparagraphindent - }% -} - -\gdef\restorefirstparagraphindent{% - \global \let \indent = \ptexindent - \global \let \noindent = \ptexnoindent - \global \everypar = {}% -} - - -% @asis just yields its argument. Used with @table, for example. -% -\def\asis#1{#1} - -% @math outputs its argument in math mode. -% -% One complication: _ usually means subscripts, but it could also mean -% an actual _ character, as in @math{@var{some_variable} + 1}. So make -% _ active, and distinguish by seeing if the current family is \slfam, -% which is what @var uses. -{ - \catcode`\_ = \active - \gdef\mathunderscore{% - \catcode`\_=\active - \def_{\ifnum\fam=\slfam \_\else\sb\fi}% - } -} -% Another complication: we want \\ (and @\) to output a \ character. -% FYI, plain.tex uses \\ as a temporary control sequence (why?), but -% this is not advertised and we don't care. Texinfo does not -% otherwise define @\. -% -% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. -\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} -% -\def\math{% - \tex - \mathunderscore - \let\\ = \mathbackslash - \mathactive - % make the texinfo accent commands work in math mode - \let\"=\ddot - \let\'=\acute - \let\==\bar - \let\^=\hat - \let\`=\grave - \let\u=\breve - \let\v=\check - \let\~=\tilde - \let\dotaccent=\dot - $\finishmath -} -\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. - -% Some active characters (such as <) are spaced differently in math. -% We have to reset their definitions in case the @math was an argument -% to a command which sets the catcodes (such as @item or @section). -% -{ - \catcode`^ = \active - \catcode`< = \active - \catcode`> = \active - \catcode`+ = \active - \catcode`' = \active - \gdef\mathactive{% - \let^ = \ptexhat - \let< = \ptexless - \let> = \ptexgtr - \let+ = \ptexplus - \let' = \ptexquoteright - } -} - -% Some math mode symbols. -\def\bullet{$\ptexbullet$} -\def\geq{\ifmmode \ge\else $\ge$\fi} -\def\leq{\ifmmode \le\else $\le$\fi} -\def\minus{\ifmmode -\else $-$\fi} - -% @dots{} outputs an ellipsis using the current font. -% We do .5em per period so that it has the same spacing in the cm -% typewriter fonts as three actual period characters; on the other hand, -% in other typewriter fonts three periods are wider than 1.5em. So do -% whichever is larger. -% -\def\dots{% - \leavevmode - \setbox0=\hbox{...}% get width of three periods - \ifdim\wd0 > 1.5em - \dimen0 = \wd0 - \else - \dimen0 = 1.5em - \fi - \hbox to \dimen0{% - \hskip 0pt plus.25fil - .\hskip 0pt plus1fil - .\hskip 0pt plus1fil - .\hskip 0pt plus.5fil - }% -} - -% @enddots{} is an end-of-sentence ellipsis. -% -\def\enddots{% - \dots - \spacefactor=\endofsentencespacefactor -} - -% @comma{} is so commas can be inserted into text without messing up -% Texinfo's parsing. -% -\let\comma = , - -% @refill is a no-op. -\let\refill=\relax - -% If working on a large document in chapters, it is convenient to -% be able to disable indexing, cross-referencing, and contents, for test runs. -% This is done with @novalidate (before @setfilename). -% -\newif\iflinks \linkstrue % by default we want the aux files. -\let\novalidate = \linksfalse - -% @setfilename is done at the beginning of every texinfo file. -% So open here the files we need to have open while reading the input. -% This makes it possible to make a .fmt file for texinfo. -\def\setfilename{% - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \iflinks - \tryauxfile - % Open the new aux file. TeX will close it automatically at exit. - \immediate\openout\auxfile=\jobname.aux - \fi % \openindices needs to do some work in any case. - \openindices - \let\setfilename=\comment % Ignore extra @setfilename cmds. - % - % If texinfo.cnf is present on the system, read it. - % Useful for site-wide @afourpaper, etc. - \openin 1 texinfo.cnf - \ifeof 1 \else \input texinfo.cnf \fi - \closein 1 - % - \comment % Ignore the actual filename. -} - -% Called from \setfilename. -% -\def\openindices{% - \newindex{cp}% - \newcodeindex{fn}% - \newcodeindex{vr}% - \newcodeindex{tp}% - \newcodeindex{ky}% - \newcodeindex{pg}% -} - -% @bye. -\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} - - -\message{pdf,} -% adobe `portable' document format -\newcount\tempnum -\newcount\lnkcount -\newtoks\filename -\newcount\filenamelength -\newcount\pgn -\newtoks\toksA -\newtoks\toksB -\newtoks\toksC -\newtoks\toksD -\newbox\boxA -\newcount\countA -\newif\ifpdf -\newif\ifpdfmakepagedest - -% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 -% can be set). So we test for \relax and 0 as well as \undefined, -% borrowed from ifpdf.sty. -\ifx\pdfoutput\undefined -\else - \ifx\pdfoutput\relax - \else - \ifcase\pdfoutput - \else - \pdftrue - \fi - \fi -\fi - -% PDF uses PostScript string constants for the names of xref targets, -% for display in the outlines, and in other places. Thus, we have to -% double any backslashes. Otherwise, a name like "\node" will be -% interpreted as a newline (\n), followed by o, d, e. Not good. -% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html -% (and related messages, the final outcome is that it is up to the TeX -% user to double the backslashes and otherwise make the string valid, so -% that's what we do). - -% double active backslashes. -% -{\catcode`\@=0 \catcode`\\=\active - @gdef@activebackslashdouble{% - @catcode`@\=@active - @let\=@doublebackslash} -} - -% To handle parens, we must adopt a different approach, since parens are -% not active characters. hyperref.dtx (which has the same problem as -% us) handles it with this amazing macro to replace tokens, with minor -% changes for Texinfo. It is included here under the GPL by permission -% from the author, Heiko Oberdiek. -% -% #1 is the tokens to replace. -% #2 is the replacement. -% #3 is the control sequence with the string. -% -\def\HyPsdSubst#1#2#3{% - \def\HyPsdReplace##1#1##2\END{% - ##1% - \ifx\\##2\\% - \else - #2% - \HyReturnAfterFi{% - \HyPsdReplace##2\END - }% - \fi - }% - \xdef#3{\expandafter\HyPsdReplace#3#1\END}% -} -\long\def\HyReturnAfterFi#1\fi{\fi#1} - -% #1 is a control sequence in which to do the replacements. -\def\backslashparens#1{% - \xdef#1{#1}% redefine it as its expansion; the definition is simply - % \lastnode when called from \setref -> \pdfmkdest. - \HyPsdSubst{(}{\realbackslash(}{#1}% - \HyPsdSubst{)}{\realbackslash)}{#1}% -} - -\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images -with PDF output, and none of those formats could be found. (.eps cannot -be supported due to the design of the PDF format; use regular TeX (DVI -output) for that.)} - -\ifpdf - % - % Color manipulation macros based on pdfcolor.tex, - % except using rgb instead of cmyk; the latter is said to render as a - % very dark gray on-screen and a very dark halftone in print, instead - % of actual black. - \def\rgbDarkRed{0.50 0.09 0.12} - \def\rgbBlack{0 0 0} - % - % k sets the color for filling (usual text, etc.); - % K sets the color for stroking (thin rules, e.g., normal _'s). - \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} - % - % Set color, and create a mark which defines \thiscolor accordingly, - % so that \makeheadline knows which color to restore. - \def\setcolor#1{% - \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% - \domark - \pdfsetcolor{#1}% - } - % - \def\maincolor{\rgbBlack} - \pdfsetcolor{\maincolor} - \edef\thiscolor{\maincolor} - \def\lastcolordefs{} - % - \def\makefootline{% - \baselineskip24pt - \line{\pdfsetcolor{\maincolor}\the\footline}% - } - % - \def\makeheadline{% - \vbox to 0pt{% - \vskip-22.5pt - \line{% - \vbox to8.5pt{}% - % Extract \thiscolor definition from the marks. - \getcolormarks - % Typeset the headline with \maincolor, then restore the color. - \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% - }% - \vss - }% - \nointerlineskip - } - % - % - \pdfcatalog{/PageMode /UseOutlines} - % - % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). - \def\dopdfimage#1#2#3{% - \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% - \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% - % - % pdftex (and the PDF format) support .png, .jpg, .pdf (among - % others). Let's try in that order. - \let\pdfimgext=\empty - \begingroup - \openin 1 #1.png \ifeof 1 - \openin 1 #1.jpg \ifeof 1 - \openin 1 #1.jpeg \ifeof 1 - \openin 1 #1.JPG \ifeof 1 - \openin 1 #1.pdf \ifeof 1 - \openin 1 #1.PDF \ifeof 1 - \errhelp = \nopdfimagehelp - \errmessage{Could not find image file #1 for pdf}% - \else \gdef\pdfimgext{PDF}% - \fi - \else \gdef\pdfimgext{pdf}% - \fi - \else \gdef\pdfimgext{JPG}% - \fi - \else \gdef\pdfimgext{jpeg}% - \fi - \else \gdef\pdfimgext{jpg}% - \fi - \else \gdef\pdfimgext{png}% - \fi - \closein 1 - \endgroup - % - % without \immediate, ancient pdftex seg faults when the same image is - % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) - \ifnum\pdftexversion < 14 - \immediate\pdfimage - \else - \immediate\pdfximage - \fi - \ifdim \wd0 >0pt width \imagewidth \fi - \ifdim \wd2 >0pt height \imageheight \fi - \ifnum\pdftexversion<13 - #1.\pdfimgext - \else - {#1.\pdfimgext}% - \fi - \ifnum\pdftexversion < 14 \else - \pdfrefximage \pdflastximage - \fi} - % - \def\pdfmkdest#1{{% - % We have to set dummies so commands such as @code, and characters - % such as \, aren't expanded when present in a section title. - \indexnofonts - \turnoffactive - \activebackslashdouble - \makevalueexpandable - \def\pdfdestname{#1}% - \backslashparens\pdfdestname - \safewhatsit{\pdfdest name{\pdfdestname} xyz}% - }} - % - % used to mark target names; must be expandable. - \def\pdfmkpgn#1{#1} - % - % by default, use a color that is dark enough to print on paper as - % nearly black, but still distinguishable for online viewing. - \def\urlcolor{\rgbDarkRed} - \def\linkcolor{\rgbDarkRed} - \def\endlink{\setcolor{\maincolor}\pdfendlink} - % - % Adding outlines to PDF; macros for calculating structure of outlines - % come from Petr Olsak - \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% - \else \csname#1\endcsname \fi} - \def\advancenumber#1{\tempnum=\expnumber{#1}\relax - \advance\tempnum by 1 - \expandafter\xdef\csname#1\endcsname{\the\tempnum}} - % - % #1 is the section text, which is what will be displayed in the - % outline by the pdf viewer. #2 is the pdf expression for the number - % of subentries (or empty, for subsubsections). #3 is the node text, - % which might be empty if this toc entry had no corresponding node. - % #4 is the page number - % - \def\dopdfoutline#1#2#3#4{% - % Generate a link to the node text if that exists; else, use the - % page number. We could generate a destination for the section - % text in the case where a section has no node, but it doesn't - % seem worth the trouble, since most documents are normally structured. - \def\pdfoutlinedest{#3}% - \ifx\pdfoutlinedest\empty - \def\pdfoutlinedest{#4}% - \else - % Doubled backslashes in the name. - {\activebackslashdouble \xdef\pdfoutlinedest{#3}% - \backslashparens\pdfoutlinedest}% - \fi - % - % Also double the backslashes in the display string. - {\activebackslashdouble \xdef\pdfoutlinetext{#1}% - \backslashparens\pdfoutlinetext}% - % - \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% - } - % - \def\pdfmakeoutlines{% - \begingroup - % Thanh's hack / proper braces in bookmarks - \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace - \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace - % - % Read toc silently, to get counts of subentries for \pdfoutline. - \def\numchapentry##1##2##3##4{% - \def\thischapnum{##2}% - \def\thissecnum{0}% - \def\thissubsecnum{0}% - }% - \def\numsecentry##1##2##3##4{% - \advancenumber{chap\thischapnum}% - \def\thissecnum{##2}% - \def\thissubsecnum{0}% - }% - \def\numsubsecentry##1##2##3##4{% - \advancenumber{sec\thissecnum}% - \def\thissubsecnum{##2}% - }% - \def\numsubsubsecentry##1##2##3##4{% - \advancenumber{subsec\thissubsecnum}% - }% - \def\thischapnum{0}% - \def\thissecnum{0}% - \def\thissubsecnum{0}% - % - % use \def rather than \let here because we redefine \chapentry et - % al. a second time, below. - \def\appentry{\numchapentry}% - \def\appsecentry{\numsecentry}% - \def\appsubsecentry{\numsubsecentry}% - \def\appsubsubsecentry{\numsubsubsecentry}% - \def\unnchapentry{\numchapentry}% - \def\unnsecentry{\numsecentry}% - \def\unnsubsecentry{\numsubsecentry}% - \def\unnsubsubsecentry{\numsubsubsecentry}% - \readdatafile{toc}% - % - % Read toc second time, this time actually producing the outlines. - % The `-' means take the \expnumber as the absolute number of - % subentries, which we calculated on our first read of the .toc above. - % - % We use the node names as the destinations. - \def\numchapentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% - \def\numsecentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% - \def\numsubsecentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% - \def\numsubsubsecentry##1##2##3##4{% count is always zero - \dopdfoutline{##1}{}{##3}{##4}}% - % - % PDF outlines are displayed using system fonts, instead of - % document fonts. Therefore we cannot use special characters, - % since the encoding is unknown. For example, the eogonek from - % Latin 2 (0xea) gets translated to a | character. Info from - % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. - % - % xx to do this right, we have to translate 8-bit characters to - % their "best" equivalent, based on the @documentencoding. Right - % now, I guess we'll just let the pdf reader have its way. - \indexnofonts - \setupdatafile - \catcode`\\=\active \otherbackslash - \input \tocreadfilename - \endgroup - } - % - \def\skipspaces#1{\def\PP{#1}\def\D{|}% - \ifx\PP\D\let\nextsp\relax - \else\let\nextsp\skipspaces - \ifx\p\space\else\addtokens{\filename}{\PP}% - \advance\filenamelength by 1 - \fi - \fi - \nextsp} - \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} - \ifnum\pdftexversion < 14 - \let \startlink \pdfannotlink - \else - \let \startlink \pdfstartlink - \fi - % make a live url in pdf output. - \def\pdfurl#1{% - \begingroup - % it seems we really need yet another set of dummies; have not - % tried to figure out what each command should do in the context - % of @url. for now, just make @/ a no-op, that's the only one - % people have actually reported a problem with. - % - \normalturnoffactive - \def\@{@}% - \let\/=\empty - \makevalueexpandable - % do we want to go so far as to use \indexnofonts instead of just - % special-casing \var here? - \def\var##1{##1}% - % - \leavevmode\setcolor{\urlcolor}% - \startlink attr{/Border [0 0 0]}% - user{/Subtype /Link /A << /S /URI /URI (#1) >>}% - \endgroup} - \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} - \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} - \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} - \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} - \def\maketoks{% - \expandafter\poptoks\the\toksA|ENDTOKS|\relax - \ifx\first0\adn0 - \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 - \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 - \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 - \else - \ifnum0=\countA\else\makelink\fi - \ifx\first.\let\next=\done\else - \let\next=\maketoks - \addtokens{\toksB}{\the\toksD} - \ifx\first,\addtokens{\toksB}{\space}\fi - \fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \next} - \def\makelink{\addtokens{\toksB}% - {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} - \def\pdflink#1{% - \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} - \setcolor{\linkcolor}#1\endlink} - \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} -\else - % non-pdf mode - \let\pdfmkdest = \gobble - \let\pdfurl = \gobble - \let\endlink = \relax - \let\setcolor = \gobble - \let\pdfsetcolor = \gobble - \let\pdfmakeoutlines = \relax -\fi % \ifx\pdfoutput - - -\message{fonts,} - -% Change the current font style to #1, remembering it in \curfontstyle. -% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in -% italics, not bold italics. -% -\def\setfontstyle#1{% - \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. - \csname ten#1\endcsname % change the current font -} - -% Select #1 fonts with the current style. -% -\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} - -\def\rm{\fam=0 \setfontstyle{rm}} -\def\it{\fam=\itfam \setfontstyle{it}} -\def\sl{\fam=\slfam \setfontstyle{sl}} -\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} -\def\tt{\fam=\ttfam \setfontstyle{tt}} - -% Unfortunately, we have to override this for titles and the like, since -% in those cases "rm" is bold. Sigh. -\def\rmisbold{\rm\def\curfontstyle{bf}} - -% Texinfo sort of supports the sans serif font style, which plain TeX does not. -% So we set up a \sf. -\newfam\sffam -\def\sf{\fam=\sffam \setfontstyle{sf}} -\let\li = \sf % Sometimes we call it \li, not \sf. - -% We don't need math for this font style. -\def\ttsl{\setfontstyle{ttsl}} - - -% Default leading. -\newdimen\textleading \textleading = 13.2pt - -% Set the baselineskip to #1, and the lineskip and strut size -% correspondingly. There is no deep meaning behind these magic numbers -% used as factors; they just match (closely enough) what Knuth defined. -% -\def\lineskipfactor{.08333} -\def\strutheightpercent{.70833} -\def\strutdepthpercent {.29167} -% -% can get a sort of poor man's double spacing by redefining this. -\def\baselinefactor{1} -% -\def\setleading#1{% - \dimen0 = #1\relax - \normalbaselineskip = \baselinefactor\dimen0 - \normallineskip = \lineskipfactor\normalbaselineskip - \normalbaselines - \setbox\strutbox =\hbox{% - \vrule width0pt height\strutheightpercent\baselineskip - depth \strutdepthpercent \baselineskip - }% -} - -% PDF CMaps. See also LaTeX's t1.cmap. -% -% do nothing with this by default. -\expandafter\let\csname cmapOT1\endcsname\gobble -\expandafter\let\csname cmapOT1IT\endcsname\gobble -\expandafter\let\csname cmapOT1TT\endcsname\gobble - -% if we are producing pdf, and we have \pdffontattr, then define cmaps. -% (\pdffontattr was introduced many years ago, but people still run -% older pdftex's; it's easy to conditionalize, so we do.) -\ifpdf \ifx\pdffontattr\undefined \else - \begingroup - \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. - \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-OT1-0) -%%Title: (TeX-OT1-0 TeX OT1 0) -%%Version: 1.000 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (TeX) -/Ordering (OT1) -/Supplement 0 ->> def -/CMapName /TeX-OT1-0 def -/CMapType 2 def -1 begincodespacerange -<00> <7F> -endcodespacerange -8 beginbfrange -<00> <01> <0393> -<09> <0A> <03A8> -<23> <26> <0023> -<28> <3B> <0028> -<3F> <5B> <003F> -<5D> <5E> <005D> -<61> <7A> <0061> -<7B> <7C> <2013> -endbfrange -40 beginbfchar -<02> <0398> -<03> <039B> -<04> <039E> -<05> <03A0> -<06> <03A3> -<07> <03D2> -<08> <03A6> -<0B> <00660066> -<0C> <00660069> -<0D> <0066006C> -<0E> <006600660069> -<0F> <00660066006C> -<10> <0131> -<11> <0237> -<12> <0060> -<13> <00B4> -<14> <02C7> -<15> <02D8> -<16> <00AF> -<17> <02DA> -<18> <00B8> -<19> <00DF> -<1A> <00E6> -<1B> <0153> -<1C> <00F8> -<1D> <00C6> -<1E> <0152> -<1F> <00D8> -<21> <0021> -<22> <201D> -<27> <2019> -<3C> <00A1> -<3D> <003D> -<3E> <00BF> -<5C> <201C> -<5F> <02D9> -<60> <2018> -<7D> <02DD> -<7E> <007E> -<7F> <00A8> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF - }\endgroup - \expandafter\edef\csname cmapOT1\endcsname#1{% - \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% - }% -% -% \cmapOT1IT - \begingroup - \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. - \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-OT1IT-0) -%%Title: (TeX-OT1IT-0 TeX OT1IT 0) -%%Version: 1.000 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (TeX) -/Ordering (OT1IT) -/Supplement 0 ->> def -/CMapName /TeX-OT1IT-0 def -/CMapType 2 def -1 begincodespacerange -<00> <7F> -endcodespacerange -8 beginbfrange -<00> <01> <0393> -<09> <0A> <03A8> -<25> <26> <0025> -<28> <3B> <0028> -<3F> <5B> <003F> -<5D> <5E> <005D> -<61> <7A> <0061> -<7B> <7C> <2013> -endbfrange -42 beginbfchar -<02> <0398> -<03> <039B> -<04> <039E> -<05> <03A0> -<06> <03A3> -<07> <03D2> -<08> <03A6> -<0B> <00660066> -<0C> <00660069> -<0D> <0066006C> -<0E> <006600660069> -<0F> <00660066006C> -<10> <0131> -<11> <0237> -<12> <0060> -<13> <00B4> -<14> <02C7> -<15> <02D8> -<16> <00AF> -<17> <02DA> -<18> <00B8> -<19> <00DF> -<1A> <00E6> -<1B> <0153> -<1C> <00F8> -<1D> <00C6> -<1E> <0152> -<1F> <00D8> -<21> <0021> -<22> <201D> -<23> <0023> -<24> <00A3> -<27> <2019> -<3C> <00A1> -<3D> <003D> -<3E> <00BF> -<5C> <201C> -<5F> <02D9> -<60> <2018> -<7D> <02DD> -<7E> <007E> -<7F> <00A8> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF - }\endgroup - \expandafter\edef\csname cmapOT1IT\endcsname#1{% - \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% - }% -% -% \cmapOT1TT - \begingroup - \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. - \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap -%%DocumentNeededResources: ProcSet (CIDInit) -%%IncludeResource: ProcSet (CIDInit) -%%BeginResource: CMap (TeX-OT1TT-0) -%%Title: (TeX-OT1TT-0 TeX OT1TT 0) -%%Version: 1.000 -%%EndComments -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo -<< /Registry (TeX) -/Ordering (OT1TT) -/Supplement 0 ->> def -/CMapName /TeX-OT1TT-0 def -/CMapType 2 def -1 begincodespacerange -<00> <7F> -endcodespacerange -5 beginbfrange -<00> <01> <0393> -<09> <0A> <03A8> -<21> <26> <0021> -<28> <5F> <0028> -<61> <7E> <0061> -endbfrange -32 beginbfchar -<02> <0398> -<03> <039B> -<04> <039E> -<05> <03A0> -<06> <03A3> -<07> <03D2> -<08> <03A6> -<0B> <2191> -<0C> <2193> -<0D> <0027> -<0E> <00A1> -<0F> <00BF> -<10> <0131> -<11> <0237> -<12> <0060> -<13> <00B4> -<14> <02C7> -<15> <02D8> -<16> <00AF> -<17> <02DA> -<18> <00B8> -<19> <00DF> -<1A> <00E6> -<1B> <0153> -<1C> <00F8> -<1D> <00C6> -<1E> <0152> -<1F> <00D8> -<20> <2423> -<27> <2019> -<60> <2018> -<7F> <00A8> -endbfchar -endcmap -CMapName currentdict /CMap defineresource pop -end -end -%%EndResource -%%EOF - }\endgroup - \expandafter\edef\csname cmapOT1TT\endcsname#1{% - \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% - }% -\fi\fi - - -% Set the font macro #1 to the font named #2, adding on the -% specified font prefix (normally `cm'). -% #3 is the font's design size, #4 is a scale factor, #5 is the CMap -% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass -% empty to omit). -\def\setfont#1#2#3#4#5{% - \font#1=\fontprefix#2#3 scaled #4 - \csname cmap#5\endcsname#1% -} -% This is what gets called when #5 of \setfont is empty. -\let\cmap\gobble -% emacs-page end of cmaps - -% Use cm as the default font prefix. -% To specify the font prefix, you must define \fontprefix -% before you read in texinfo.tex. -\ifx\fontprefix\undefined -\def\fontprefix{cm} -\fi -% Support font families that don't use the same naming scheme as CM. -\def\rmshape{r} -\def\rmbshape{bx} %where the normal face is bold -\def\bfshape{b} -\def\bxshape{bx} -\def\ttshape{tt} -\def\ttbshape{tt} -\def\ttslshape{sltt} -\def\itshape{ti} -\def\itbshape{bxti} -\def\slshape{sl} -\def\slbshape{bxsl} -\def\sfshape{ss} -\def\sfbshape{ss} -\def\scshape{csc} -\def\scbshape{csc} - -% Definitions for a main text size of 11pt. This is the default in -% Texinfo. -% -\def\definetextfontsizexi{% -% Text fonts (11.2pt, magstep1). -\def\textnominalsize{11pt} -\edef\mainmagstep{\magstephalf} -\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} -\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} -\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} -\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} -\setfont\textsl\slshape{10}{\mainmagstep}{OT1} -\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} -\setfont\textsc\scshape{10}{\mainmagstep}{OT1} -\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} -\font\texti=cmmi10 scaled \mainmagstep -\font\textsy=cmsy10 scaled \mainmagstep -\def\textecsize{1095} - -% A few fonts for @defun names and args. -\setfont\defbf\bfshape{10}{\magstep1}{OT1} -\setfont\deftt\ttshape{10}{\magstep1}{OT1TT} -\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} - -% Fonts for indices, footnotes, small examples (9pt). -\def\smallnominalsize{9pt} -\setfont\smallrm\rmshape{9}{1000}{OT1} -\setfont\smalltt\ttshape{9}{1000}{OT1TT} -\setfont\smallbf\bfshape{10}{900}{OT1} -\setfont\smallit\itshape{9}{1000}{OT1IT} -\setfont\smallsl\slshape{9}{1000}{OT1} -\setfont\smallsf\sfshape{9}{1000}{OT1} -\setfont\smallsc\scshape{10}{900}{OT1} -\setfont\smallttsl\ttslshape{10}{900}{OT1TT} -\font\smalli=cmmi9 -\font\smallsy=cmsy9 -\def\smallecsize{0900} - -% Fonts for small examples (8pt). -\def\smallernominalsize{8pt} -\setfont\smallerrm\rmshape{8}{1000}{OT1} -\setfont\smallertt\ttshape{8}{1000}{OT1TT} -\setfont\smallerbf\bfshape{10}{800}{OT1} -\setfont\smallerit\itshape{8}{1000}{OT1IT} -\setfont\smallersl\slshape{8}{1000}{OT1} -\setfont\smallersf\sfshape{8}{1000}{OT1} -\setfont\smallersc\scshape{10}{800}{OT1} -\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} -\font\smalleri=cmmi8 -\font\smallersy=cmsy8 -\def\smallerecsize{0800} - -% Fonts for title page (20.4pt): -\def\titlenominalsize{20pt} -\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} -\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} -\setfont\titlesl\slbshape{10}{\magstep4}{OT1} -\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} -\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} -\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} -\let\titlebf=\titlerm -\setfont\titlesc\scbshape{10}{\magstep4}{OT1} -\font\titlei=cmmi12 scaled \magstep3 -\font\titlesy=cmsy10 scaled \magstep4 -\def\titleecsize{2074} - -% Chapter (and unnumbered) fonts (17.28pt). -\def\chapnominalsize{17pt} -\setfont\chaprm\rmbshape{12}{\magstep2}{OT1} -\setfont\chapit\itbshape{10}{\magstep3}{OT1IT} -\setfont\chapsl\slbshape{10}{\magstep3}{OT1} -\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} -\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} -\setfont\chapsf\sfbshape{17}{1000}{OT1} -\let\chapbf=\chaprm -\setfont\chapsc\scbshape{10}{\magstep3}{OT1} -\font\chapi=cmmi12 scaled \magstep2 -\font\chapsy=cmsy10 scaled \magstep3 -\def\chapecsize{1728} - -% Section fonts (14.4pt). -\def\secnominalsize{14pt} -\setfont\secrm\rmbshape{12}{\magstep1}{OT1} -\setfont\secit\itbshape{10}{\magstep2}{OT1IT} -\setfont\secsl\slbshape{10}{\magstep2}{OT1} -\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} -\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} -\setfont\secsf\sfbshape{12}{\magstep1}{OT1} -\let\secbf\secrm -\setfont\secsc\scbshape{10}{\magstep2}{OT1} -\font\seci=cmmi12 scaled \magstep1 -\font\secsy=cmsy10 scaled \magstep2 -\def\sececsize{1440} - -% Subsection fonts (13.15pt). -\def\ssecnominalsize{13pt} -\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} -\setfont\ssecit\itbshape{10}{1315}{OT1IT} -\setfont\ssecsl\slbshape{10}{1315}{OT1} -\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} -\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} -\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} -\let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{1315}{OT1} -\font\sseci=cmmi12 scaled \magstephalf -\font\ssecsy=cmsy10 scaled 1315 -\def\ssececsize{1200} - -% Reduced fonts for @acro in text (10pt). -\def\reducednominalsize{10pt} -\setfont\reducedrm\rmshape{10}{1000}{OT1} -\setfont\reducedtt\ttshape{10}{1000}{OT1TT} -\setfont\reducedbf\bfshape{10}{1000}{OT1} -\setfont\reducedit\itshape{10}{1000}{OT1IT} -\setfont\reducedsl\slshape{10}{1000}{OT1} -\setfont\reducedsf\sfshape{10}{1000}{OT1} -\setfont\reducedsc\scshape{10}{1000}{OT1} -\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} -\font\reducedi=cmmi10 -\font\reducedsy=cmsy10 -\def\reducedecsize{1000} - -% reset the current fonts -\textfonts -\rm -} % end of 11pt text font size definitions - - -% Definitions to make the main text be 10pt Computer Modern, with -% section, chapter, etc., sizes following suit. This is for the GNU -% Press printing of the Emacs 22 manual. Maybe other manuals in the -% future. Used with @smallbook, which sets the leading to 12pt. -% -\def\definetextfontsizex{% -% Text fonts (10pt). -\def\textnominalsize{10pt} -\edef\mainmagstep{1000} -\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} -\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} -\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} -\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} -\setfont\textsl\slshape{10}{\mainmagstep}{OT1} -\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} -\setfont\textsc\scshape{10}{\mainmagstep}{OT1} -\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} -\font\texti=cmmi10 scaled \mainmagstep -\font\textsy=cmsy10 scaled \mainmagstep -\def\textecsize{1000} - -% A few fonts for @defun names and args. -\setfont\defbf\bfshape{10}{\magstephalf}{OT1} -\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} -\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} - -% Fonts for indices, footnotes, small examples (9pt). -\def\smallnominalsize{9pt} -\setfont\smallrm\rmshape{9}{1000}{OT1} -\setfont\smalltt\ttshape{9}{1000}{OT1TT} -\setfont\smallbf\bfshape{10}{900}{OT1} -\setfont\smallit\itshape{9}{1000}{OT1IT} -\setfont\smallsl\slshape{9}{1000}{OT1} -\setfont\smallsf\sfshape{9}{1000}{OT1} -\setfont\smallsc\scshape{10}{900}{OT1} -\setfont\smallttsl\ttslshape{10}{900}{OT1TT} -\font\smalli=cmmi9 -\font\smallsy=cmsy9 -\def\smallecsize{0900} - -% Fonts for small examples (8pt). -\def\smallernominalsize{8pt} -\setfont\smallerrm\rmshape{8}{1000}{OT1} -\setfont\smallertt\ttshape{8}{1000}{OT1TT} -\setfont\smallerbf\bfshape{10}{800}{OT1} -\setfont\smallerit\itshape{8}{1000}{OT1IT} -\setfont\smallersl\slshape{8}{1000}{OT1} -\setfont\smallersf\sfshape{8}{1000}{OT1} -\setfont\smallersc\scshape{10}{800}{OT1} -\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} -\font\smalleri=cmmi8 -\font\smallersy=cmsy8 -\def\smallerecsize{0800} - -% Fonts for title page (20.4pt): -\def\titlenominalsize{20pt} -\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} -\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} -\setfont\titlesl\slbshape{10}{\magstep4}{OT1} -\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} -\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} -\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} -\let\titlebf=\titlerm -\setfont\titlesc\scbshape{10}{\magstep4}{OT1} -\font\titlei=cmmi12 scaled \magstep3 -\font\titlesy=cmsy10 scaled \magstep4 -\def\titleecsize{2074} - -% Chapter fonts (14.4pt). -\def\chapnominalsize{14pt} -\setfont\chaprm\rmbshape{12}{\magstep1}{OT1} -\setfont\chapit\itbshape{10}{\magstep2}{OT1IT} -\setfont\chapsl\slbshape{10}{\magstep2}{OT1} -\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} -\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} -\setfont\chapsf\sfbshape{12}{\magstep1}{OT1} -\let\chapbf\chaprm -\setfont\chapsc\scbshape{10}{\magstep2}{OT1} -\font\chapi=cmmi12 scaled \magstep1 -\font\chapsy=cmsy10 scaled \magstep2 -\def\chapecsize{1440} - -% Section fonts (12pt). -\def\secnominalsize{12pt} -\setfont\secrm\rmbshape{12}{1000}{OT1} -\setfont\secit\itbshape{10}{\magstep1}{OT1IT} -\setfont\secsl\slbshape{10}{\magstep1}{OT1} -\setfont\sectt\ttbshape{12}{1000}{OT1TT} -\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} -\setfont\secsf\sfbshape{12}{1000}{OT1} -\let\secbf\secrm -\setfont\secsc\scbshape{10}{\magstep1}{OT1} -\font\seci=cmmi12 -\font\secsy=cmsy10 scaled \magstep1 -\def\sececsize{1200} - -% Subsection fonts (10pt). -\def\ssecnominalsize{10pt} -\setfont\ssecrm\rmbshape{10}{1000}{OT1} -\setfont\ssecit\itbshape{10}{1000}{OT1IT} -\setfont\ssecsl\slbshape{10}{1000}{OT1} -\setfont\ssectt\ttbshape{10}{1000}{OT1TT} -\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} -\setfont\ssecsf\sfbshape{10}{1000}{OT1} -\let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{1000}{OT1} -\font\sseci=cmmi10 -\font\ssecsy=cmsy10 -\def\ssececsize{1000} - -% Reduced fonts for @acro in text (9pt). -\def\reducednominalsize{9pt} -\setfont\reducedrm\rmshape{9}{1000}{OT1} -\setfont\reducedtt\ttshape{9}{1000}{OT1TT} -\setfont\reducedbf\bfshape{10}{900}{OT1} -\setfont\reducedit\itshape{9}{1000}{OT1IT} -\setfont\reducedsl\slshape{9}{1000}{OT1} -\setfont\reducedsf\sfshape{9}{1000}{OT1} -\setfont\reducedsc\scshape{10}{900}{OT1} -\setfont\reducedttsl\ttslshape{10}{900}{OT1TT} -\font\reducedi=cmmi9 -\font\reducedsy=cmsy9 -\def\reducedecsize{0900} - -% reduce space between paragraphs -\divide\parskip by 2 - -% reset the current fonts -\textfonts -\rm -} % end of 10pt text font size definitions - - -% We provide the user-level command -% @fonttextsize 10 -% (or 11) to redefine the text font size. pt is assumed. -% -\def\xword{10} -\def\xiword{11} -% -\parseargdef\fonttextsize{% - \def\textsizearg{#1}% - \wlog{doing @fonttextsize \textsizearg}% - % - % Set \globaldefs so that documents can use this inside @tex, since - % makeinfo 4.8 does not support it, but we need it nonetheless. - % - \begingroup \globaldefs=1 - \ifx\textsizearg\xword \definetextfontsizex - \else \ifx\textsizearg\xiword \definetextfontsizexi - \else - \errhelp=\EMsimple - \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} - \fi\fi - \endgroup -} - - -% In order for the font changes to affect most math symbols and letters, -% we have to define the \textfont of the standard families. Since -% texinfo doesn't allow for producing subscripts and superscripts except -% in the main text, we don't bother to reset \scriptfont and -% \scriptscriptfont (which would also require loading a lot more fonts). -% -\def\resetmathfonts{% - \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy - \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf - \textfont\ttfam=\tentt \textfont\sffam=\tensf -} - -% The font-changing commands redefine the meanings of \tenSTYLE, instead -% of just \STYLE. We do this because \STYLE needs to also set the -% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire -% \tenSTYLE to set the current font. -% -% Each font-changing command also sets the names \lsize (one size lower) -% and \lllsize (three sizes lower). These relative commands are used in -% the LaTeX logo and acronyms. -% -% This all needs generalizing, badly. -% -\def\textfonts{% - \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl - \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc - \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy - \let\tenttsl=\textttsl - \def\curfontsize{text}% - \def\lsize{reduced}\def\lllsize{smaller}% - \resetmathfonts \setleading{\textleading}} -\def\titlefonts{% - \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl - \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc - \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy - \let\tenttsl=\titlettsl - \def\curfontsize{title}% - \def\lsize{chap}\def\lllsize{subsec}% - \resetmathfonts \setleading{25pt}} -\def\titlefont#1{{\titlefonts\rmisbold #1}} -\def\chapfonts{% - \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl - \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc - \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy - \let\tenttsl=\chapttsl - \def\curfontsize{chap}% - \def\lsize{sec}\def\lllsize{text}% - \resetmathfonts \setleading{19pt}} -\def\secfonts{% - \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl - \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc - \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy - \let\tenttsl=\secttsl - \def\curfontsize{sec}% - \def\lsize{subsec}\def\lllsize{reduced}% - \resetmathfonts \setleading{16pt}} -\def\subsecfonts{% - \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl - \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc - \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy - \let\tenttsl=\ssecttsl - \def\curfontsize{ssec}% - \def\lsize{text}\def\lllsize{small}% - \resetmathfonts \setleading{15pt}} -\let\subsubsecfonts = \subsecfonts -\def\reducedfonts{% - \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl - \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc - \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy - \let\tenttsl=\reducedttsl - \def\curfontsize{reduced}% - \def\lsize{small}\def\lllsize{smaller}% - \resetmathfonts \setleading{10.5pt}} -\def\smallfonts{% - \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl - \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc - \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy - \let\tenttsl=\smallttsl - \def\curfontsize{small}% - \def\lsize{smaller}\def\lllsize{smaller}% - \resetmathfonts \setleading{10.5pt}} -\def\smallerfonts{% - \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl - \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc - \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy - \let\tenttsl=\smallerttsl - \def\curfontsize{smaller}% - \def\lsize{smaller}\def\lllsize{smaller}% - \resetmathfonts \setleading{9.5pt}} - -% Fonts for short table of contents. -\setfont\shortcontrm\rmshape{12}{1000}{OT1} -\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 -\setfont\shortcontsl\slshape{12}{1000}{OT1} -\setfont\shortconttt\ttshape{12}{1000}{OT1TT} - -% Define these just so they can be easily changed for other fonts. -\def\angleleft{$\langle$} -\def\angleright{$\rangle$} - -% Set the fonts to use with the @small... environments. -\let\smallexamplefonts = \smallfonts - -% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample -% can fit this many characters: -% 8.5x11=86 smallbook=72 a4=90 a5=69 -% If we use \scriptfonts (8pt), then we can fit this many characters: -% 8.5x11=90+ smallbook=80 a4=90+ a5=77 -% For me, subjectively, the few extra characters that fit aren't worth -% the additional smallness of 8pt. So I'm making the default 9pt. -% -% By the way, for comparison, here's what fits with @example (10pt): -% 8.5x11=71 smallbook=60 a4=75 a5=58 -% --karl, 24jan03. - -% Set up the default fonts, so we can use them for creating boxes. -% -\definetextfontsizexi - - -\message{markup,} - -% Check if we are currently using a typewriter font. Since all the -% Computer Modern typewriter fonts have zero interword stretch (and -% shrink), and it is reasonable to expect all typewriter fonts to have -% this property, we can check that font parameter. -% -\def\ifmonospace{\ifdim\fontdimen3\font=0pt } - -% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will -% define and register \INITMACRO to be called on markup style changes. -% \INITMACRO can check \currentmarkupstyle for the innermost -% style and the set of \ifmarkupSTYLE switches for all styles -% currently in effect. -\newif\ifmarkupvar -\newif\ifmarkupsamp -\newif\ifmarkupkey -%\newif\ifmarkupfile % @file == @samp. -%\newif\ifmarkupoption % @option == @samp. -\newif\ifmarkupcode -\newif\ifmarkupkbd -%\newif\ifmarkupenv % @env == @code. -%\newif\ifmarkupcommand % @command == @code. -\newif\ifmarkuptex % @tex (and part of @math, for now). -\newif\ifmarkupexample -\newif\ifmarkupverb -\newif\ifmarkupverbatim - -\let\currentmarkupstyle\empty - -\def\setupmarkupstyle#1{% - \csname markup#1true\endcsname - \def\currentmarkupstyle{#1}% - \markupstylesetup -} - -\let\markupstylesetup\empty - -\def\defmarkupstylesetup#1{% - \expandafter\def\expandafter\markupstylesetup - \expandafter{\markupstylesetup #1}% - \def#1% -} - -% Markup style setup for left and right quotes. -\defmarkupstylesetup\markupsetuplq{% - \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname - \ifx\temp\relax \markupsetuplqdefault \else \temp \fi -} - -\defmarkupstylesetup\markupsetuprq{% - \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname - \ifx\temp\relax \markupsetuprqdefault \else \temp \fi -} - -{ -\catcode`\'=\active -\catcode`\`=\active - -\gdef\markupsetuplqdefault{\let`\lq} -\gdef\markupsetuprqdefault{\let'\rq} - -\gdef\markupsetcodequoteleft{\let`\codequoteleft} -\gdef\markupsetcodequoteright{\let'\codequoteright} - -\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft} -} - -\let\markupsetuplqcode \markupsetcodequoteleft -\let\markupsetuprqcode \markupsetcodequoteright -\let\markupsetuplqexample \markupsetcodequoteleft -\let\markupsetuprqexample \markupsetcodequoteright -\let\markupsetuplqverb \markupsetcodequoteleft -\let\markupsetuprqverb \markupsetcodequoteright -\let\markupsetuplqverbatim \markupsetcodequoteleft -\let\markupsetuprqverbatim \markupsetcodequoteright - -\let\markupsetuplqsamp \markupsetnoligaturesquoteleft -\let\markupsetuplqkbd \markupsetnoligaturesquoteleft - -% Allow an option to not replace quotes with a regular directed right -% quote/apostrophe (char 0x27), but instead use the undirected quote -% from cmtt (char 0x0d). The undirected quote is ugly, so don't make it -% the default, but it works for pasting with more pdf viewers (at least -% evince), the lilypond developers report. xpdf does work with the -% regular 0x27. -% -\def\codequoteright{% - \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax - \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax - '% - \else \char'15 \fi - \else \char'15 \fi -} -% -% and a similar option for the left quote char vs. a grave accent. -% Modern fonts display ASCII 0x60 as a grave accent, so some people like -% the code environments to do likewise. -% -\def\codequoteleft{% - \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax - \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax - % [Knuth] pp. 380,381,391 - % \relax disables Spanish ligatures ?` and !` of \tt font. - \relax`% - \else \char'22 \fi - \else \char'22 \fi -} - -% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. -\def\noligaturesquoteleft{\relax\lq} - -% Count depth in font-changes, for error checks -\newcount\fontdepth \fontdepth=0 - -%% Add scribe-like font environments, plus @l for inline lisp (usually sans -%% serif) and @ii for TeX italic - -% \smartitalic{ARG} outputs arg in italics, followed by an italic correction -% unless the following character is such as not to need one. -\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else - \ptexslash\fi\fi\fi} -\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} -\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} - -% like \smartslanted except unconditionally uses \ttsl. -% @var is set to this for defun arguments. -\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} - -% @cite is like \smartslanted except unconditionally use \sl. We never want -% ttsl for book titles, do we? -\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} - -\let\i=\smartitalic -\let\slanted=\smartslanted -\def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}} -\let\dfn=\smartslanted -\let\emph=\smartitalic - -% Explicit font changes: @r, @sc, undocumented @ii. -\def\r#1{{\rm #1}} % roman font -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font - -% @b, explicit bold. Also @strong. -\def\b#1{{\bf #1}} -\let\strong=\b - -% @sansserif, explicit sans. -\def\sansserif#1{{\sf #1}} - -% We can't just use \exhyphenpenalty, because that only has effect at -% the end of a paragraph. Restore normal hyphenation at the end of the -% group within which \nohyphenation is presumably called. -% -\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} -\def\restorehyphenation{\hyphenchar\font = `- } - -% Set sfcode to normal for the chars that usually have another value. -% Can't use plain's \frenchspacing because it uses the `\x notation, and -% sometimes \x has an active definition that messes things up. -% -\catcode`@=11 - \def\plainfrenchspacing{% - \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m - \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m - \def\endofsentencespacefactor{1000}% for @. and friends - } - \def\plainnonfrenchspacing{% - \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 - \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 - \def\endofsentencespacefactor{3000}% for @. and friends - } -\catcode`@=\other -\def\endofsentencespacefactor{3000}% default - -% @t, explicit typewriter. -\def\t#1{% - {\tt \rawbackslash \plainfrenchspacing #1}% - \null -} - -% @samp. -\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} - -% definition of @key that produces a lozenge. Doesn't adjust to text size. -%\setfont\keyrm\rmshape{8}{1000}{OT1} -%\font\keysy=cmsy9 -%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% -% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% -% \vbox{\hrule\kern-0.4pt -% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% -% \kern-0.4pt\hrule}% -% \kern-.06em\raise0.4pt\hbox{\angleright}}}} - -% definition of @key with no lozenge. If the current font is already -% monospace, don't change it; that way, we respect @kbdinputstyle. But -% if it isn't monospace, then use \tt. -% -\def\key#1{{\setupmarkupstyle{key}% - \nohyphenation - \ifmonospace\else\tt\fi - #1}\null} - -% ctrl is no longer a Texinfo command. -\def\ctrl #1{{\tt \rawbackslash \hat}#1} - -% @file, @option are the same as @samp. -\let\file=\samp -\let\option=\samp - -% @code is a modification of @t, -% which makes spaces the same size as normal in the surrounding text. -\def\tclose#1{% - {% - % Change normal interword space to be same as for the current font. - \spaceskip = \fontdimen2\font - % - % Switch to typewriter. - \tt - % - % But `\ ' produces the large typewriter interword space. - \def\ {{\spaceskip = 0pt{} }}% - % - % Turn off hyphenation. - \nohyphenation - % - \rawbackslash - \plainfrenchspacing - #1% - }% - \null -} - -% We *must* turn on hyphenation at `-' and `_' in @code. -% Otherwise, it is too hard to avoid overfull hboxes -% in the Emacs manual, the Library manual, etc. - -% Unfortunately, TeX uses one parameter (\hyphenchar) to control -% both hyphenation at - and hyphenation within words. -% We must therefore turn them both off (\tclose does that) -% and arrange explicitly to hyphenate at a dash. -% -- rms. -{ - \catcode`\-=\active \catcode`\_=\active - \catcode`\'=\active \catcode`\`=\active - \global\let'=\rq \global\let`=\lq % default definitions - % - \global\def\code{\begingroup - \setupmarkupstyle{code}% - % The following should really be moved into \setupmarkupstyle handlers. - \catcode\dashChar=\active \catcode\underChar=\active - \ifallowcodebreaks - \let-\codedash - \let_\codeunder - \else - \let-\realdash - \let_\realunder - \fi - \codex - } -} - -\def\realdash{-} -\def\codedash{-\discretionary{}{}{}} -\def\codeunder{% - % this is all so @math{@code{var_name}+1} can work. In math mode, _ - % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) - % will therefore expand the active definition of _, which is us - % (inside @code that is), therefore an endless loop. - \ifusingtt{\ifmmode - \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. - \else\normalunderscore \fi - \discretionary{}{}{}}% - {\_}% -} -\def\codex #1{\tclose{#1}\endgroup} - -% An additional complication: the above will allow breaks after, e.g., -% each of the four underscores in __typeof__. This is undesirable in -% some manuals, especially if they don't have long identifiers in -% general. @allowcodebreaks provides a way to control this. -% -\newif\ifallowcodebreaks \allowcodebreakstrue - -\def\keywordtrue{true} -\def\keywordfalse{false} - -\parseargdef\allowcodebreaks{% - \def\txiarg{#1}% - \ifx\txiarg\keywordtrue - \allowcodebreakstrue - \else\ifx\txiarg\keywordfalse - \allowcodebreaksfalse - \else - \errhelp = \EMsimple - \errmessage{Unknown @allowcodebreaks option `\txiarg'}% - \fi\fi -} - -% @kbd is like @code, except that if the argument is just one @key command, -% then @kbd has no effect. -\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} - -% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), -% `example' (@kbd uses ttsl only inside of @example and friends), -% or `code' (@kbd uses normal tty font always). -\parseargdef\kbdinputstyle{% - \def\txiarg{#1}% - \ifx\txiarg\worddistinct - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% - \else\ifx\txiarg\wordexample - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% - \else\ifx\txiarg\wordcode - \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% - \else - \errhelp = \EMsimple - \errmessage{Unknown @kbdinputstyle option `\txiarg'}% - \fi\fi\fi -} -\def\worddistinct{distinct} -\def\wordexample{example} -\def\wordcode{code} - -% Default is `distinct'. -\kbdinputstyle distinct - -\def\xkey{\key} -\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% -\ifx\one\xkey\ifx\threex\three \key{#2}% -\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi -\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi} - -% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. -\let\indicateurl=\code -\let\env=\code -\let\command=\code - -% @clicksequence{File @click{} Open ...} -\def\clicksequence#1{\begingroup #1\endgroup} - -% @clickstyle @arrow (by default) -\parseargdef\clickstyle{\def\click{#1}} -\def\click{\arrow} - -% @uref (abbreviation for `urlref') takes an optional (comma-separated) -% second argument specifying the text to display and an optional third -% arg as text to display instead of (rather than in addition to) the url -% itself. First (mandatory) arg is the url. Perhaps eventually put in -% a hypertex \special here. -% -\def\uref#1{\douref #1,,,\finish} -\def\douref#1,#2,#3,#4\finish{\begingroup - \unsepspaces - \pdfurl{#1}% - \setbox0 = \hbox{\ignorespaces #3}% - \ifdim\wd0 > 0pt - \unhbox0 % third arg given, show only that - \else - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \ifpdf - \unhbox0 % PDF: 2nd arg given, show only it - \else - \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url - \fi - \else - \code{#1}% only url given, so show it - \fi - \fi - \endlink -\endgroup} - -% @url synonym for @uref, since that's how everyone uses it. -% -\let\url=\uref - -% rms does not like angle brackets --karl, 17may97. -% So now @email is just like @uref, unless we are pdf. -% -%\def\email#1{\angleleft{\tt #1}\angleright} -\ifpdf - \def\email#1{\doemail#1,,\finish} - \def\doemail#1,#2,#3\finish{\begingroup - \unsepspaces - \pdfurl{mailto:#1}% - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi - \endlink - \endgroup} -\else - \let\email=\uref -\fi - -% Typeset a dimension, e.g., `in' or `pt'. The only reason for the -% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. -% -\def\dmn#1{\thinspace #1} - -% @l was never documented to mean ``switch to the Lisp font'', -% and it is not used as such in any manual I can find. We need it for -% Polish suppressed-l. --karl, 22sep96. -%\def\l#1{{\li #1}\null} - -% @acronym for "FBI", "NATO", and the like. -% We print this one point size smaller, since it's intended for -% all-uppercase. -% -\def\acronym#1{\doacronym #1,,\finish} -\def\doacronym#1,#2,#3\finish{% - {\selectfonts\lsize #1}% - \def\temp{#2}% - \ifx\temp\empty \else - \space ({\unsepspaces \ignorespaces \temp \unskip})% - \fi -} - -% @abbr for "Comput. J." and the like. -% No font change, but don't do end-of-sentence spacing. -% -\def\abbr#1{\doabbr #1,,\finish} -\def\doabbr#1,#2,#3\finish{% - {\plainfrenchspacing #1}% - \def\temp{#2}% - \ifx\temp\empty \else - \space ({\unsepspaces \ignorespaces \temp \unskip})% - \fi -} - - -\message{glyphs,} - -% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. -% -% Since these characters are used in examples, they should be an even number of -% \tt widths. Each \tt character is 1en, so two makes it 1em. -% -\def\point{$\star$} -\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} -\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} -\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} -\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} -\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} - -% The @error{} command. -% Adapted from the TeXbook's \boxit. -% -\newbox\errorbox -% -{\tentt \global\dimen0 = 3em}% Width of the box. -\dimen2 = .55pt % Thickness of rules -% The text. (`r' is open on the right, `e' somewhat less so on the left.) -\setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt} -% -\setbox\errorbox=\hbox to \dimen0{\hfil - \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. - \advance\hsize by -2\dimen2 % Rules. - \vbox{% - \hrule height\dimen2 - \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. - \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. - \kern3pt\vrule width\dimen2}% Space to right. - \hrule height\dimen2} - \hfil} -% -\def\error{\leavevmode\lower.7ex\copy\errorbox} - -% @pounds{} is a sterling sign, which Knuth put in the CM italic font. -% -\def\pounds{{\it\$}} - -% @euro{} comes from a separate font, depending on the current style. -% We use the free feym* fonts from the eurosym package by Henrik -% Theiling, which support regular, slanted, bold and bold slanted (and -% "outlined" (blackboard board, sort of) versions, which we don't need). -% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. -% -% Although only regular is the truly official Euro symbol, we ignore -% that. The Euro is designed to be slightly taller than the regular -% font height. -% -% feymr - regular -% feymo - slanted -% feybr - bold -% feybo - bold slanted -% -% There is no good (free) typewriter version, to my knowledge. -% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. -% Hmm. -% -% Also doesn't work in math. Do we need to do math with euro symbols? -% Hope not. -% -% -\def\euro{{\eurofont e}} -\def\eurofont{% - % We set the font at each command, rather than predefining it in - % \textfonts and the other font-switching commands, so that - % installations which never need the symbol don't have to have the - % font installed. - % - % There is only one designed size (nominal 10pt), so we always scale - % that to the current nominal size. - % - % By the way, simply using "at 1em" works for cmr10 and the like, but - % does not work for cmbx10 and other extended/shrunken fonts. - % - \def\eurosize{\csname\curfontsize nominalsize\endcsname}% - % - \ifx\curfontstyle\bfstylename - % bold: - \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize - \else - % regular: - \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize - \fi - \thiseurofont -} - -% Glyphs from the EC fonts. We don't use \let for the aliases, because -% sometimes we redefine the original macro, and the alias should reflect -% the redefinition. -% -% Use LaTeX names for the Icelandic letters. -\def\DH{{\ecfont \char"D0}} % Eth -\def\dh{{\ecfont \char"F0}} % eth -\def\TH{{\ecfont \char"DE}} % Thorn -\def\th{{\ecfont \char"FE}} % thorn -% -\def\guillemetleft{{\ecfont \char"13}} -\def\guillemotleft{\guillemetleft} -\def\guillemetright{{\ecfont \char"14}} -\def\guillemotright{\guillemetright} -\def\guilsinglleft{{\ecfont \char"0E}} -\def\guilsinglright{{\ecfont \char"0F}} -\def\quotedblbase{{\ecfont \char"12}} -\def\quotesinglbase{{\ecfont \char"0D}} -% -% This positioning is not perfect (see the ogonek LaTeX package), but -% we have the precomposed glyphs for the most common cases. We put the -% tests to use those glyphs in the single \ogonek macro so we have fewer -% dummy definitions to worry about for index entries, etc. -% -% ogonek is also used with other letters in Lithuanian (IOU), but using -% the precomposed glyphs for those is not so easy since they aren't in -% the same EC font. -\def\ogonek#1{{% - \def\temp{#1}% - \ifx\temp\macrocharA\Aogonek - \else\ifx\temp\macrochara\aogonek - \else\ifx\temp\macrocharE\Eogonek - \else\ifx\temp\macrochare\eogonek - \else - \ecfont \setbox0=\hbox{#1}% - \ifdim\ht0=1ex\accent"0C #1% - \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% - \fi - \fi\fi\fi\fi - }% -} -\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} -\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} -\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} -\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} -% -% Use the ec* fonts (cm-super in outline format) for non-CM glyphs. -\def\ecfont{% - % We can't distinguish serif/sans and italic/slanted, but this - % is used for crude hacks anyway (like adding French and German - % quotes to documents typeset with CM, where we lose kerning), so - % hopefully nobody will notice/care. - \edef\ecsize{\csname\curfontsize ecsize\endcsname}% - \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% - \ifx\curfontstyle\bfstylename - % bold: - \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize - \else - % regular: - \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize - \fi - \thisecfont -} - -% @registeredsymbol - R in a circle. The font for the R should really -% be smaller yet, but lllsize is the best we can do for now. -% Adapted from the plain.tex definition of \copyright. -% -\def\registeredsymbol{% - $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% - \hfil\crcr\Orb}}% - }$% -} - -% @textdegree - the normal degrees sign. -% -\def\textdegree{$^\circ$} - -% Laurent Siebenmann reports \Orb undefined with: -% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 -% so we'll define it if necessary. -% -\ifx\Orb\undefined -\def\Orb{\mathhexbox20D} -\fi - -% Quotes. -\chardef\quotedblleft="5C -\chardef\quotedblright=`\" -\chardef\quoteleft=`\` -\chardef\quoteright=`\' - - -\message{page headings,} - -\newskip\titlepagetopglue \titlepagetopglue = 1.5in -\newskip\titlepagebottomglue \titlepagebottomglue = 2pc - -% First the title page. Must do @settitle before @titlepage. -\newif\ifseenauthor -\newif\iffinishedtitlepage - -% Do an implicit @contents or @shortcontents after @end titlepage if the -% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. -% -\newif\ifsetcontentsaftertitlepage - \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue -\newif\ifsetshortcontentsaftertitlepage - \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue - -\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% - \endgroup\page\hbox{}\page} - -\envdef\titlepage{% - % Open one extra group, as we want to close it in the middle of \Etitlepage. - \begingroup - \parindent=0pt \textfonts - % Leave some space at the very top of the page. - \vglue\titlepagetopglue - % No rule at page bottom unless we print one at the top with @title. - \finishedtitlepagetrue - % - % Most title ``pages'' are actually two pages long, with space - % at the top of the second. We don't want the ragged left on the second. - \let\oldpage = \page - \def\page{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - \let\page = \oldpage - \page - \null - }% -} - -\def\Etitlepage{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - % It is important to do the page break before ending the group, - % because the headline and footline are only empty inside the group. - % If we use the new definition of \page, we always get a blank page - % after the title page, which we certainly don't want. - \oldpage - \endgroup - % - % Need this before the \...aftertitlepage checks so that if they are - % in effect the toc pages will come out with page numbers. - \HEADINGSon - % - % If they want short, they certainly want long too. - \ifsetshortcontentsaftertitlepage - \shortcontents - \contents - \global\let\shortcontents = \relax - \global\let\contents = \relax - \fi - % - \ifsetcontentsaftertitlepage - \contents - \global\let\contents = \relax - \global\let\shortcontents = \relax - \fi -} - -\def\finishtitlepage{% - \vskip4pt \hrule height 2pt width \hsize - \vskip\titlepagebottomglue - \finishedtitlepagetrue -} - -%%% Macros to be used within @titlepage: - -\let\subtitlerm=\tenrm -\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} - -\parseargdef\title{% - \checkenv\titlepage - \leftline{\titlefonts\rmisbold #1} - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt width \hsize \vskip4pt -} - -\parseargdef\subtitle{% - \checkenv\titlepage - {\subtitlefont \rightline{#1}}% -} - -% @author should come last, but may come many times. -% It can also be used inside @quotation. -% -\parseargdef\author{% - \def\temp{\quotation}% - \ifx\thisenv\temp - \def\quotationauthor{#1}% printed in \Equotation. - \else - \checkenv\titlepage - \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi - {\secfonts\rmisbold \leftline{#1}}% - \fi -} - - -%%% Set up page headings and footings. - -\let\thispage=\folio - -\newtoks\evenheadline % headline on even pages -\newtoks\oddheadline % headline on odd pages -\newtoks\evenfootline % footline on even pages -\newtoks\oddfootline % footline on odd pages - -% Now make TeX use those variables -\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline - \else \the\evenheadline \fi}} -\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline - \else \the\evenfootline \fi}\HEADINGShook} -\let\HEADINGShook=\relax - -% Commands to set those variables. -% For example, this is what @headings on does -% @evenheading @thistitle|@thispage|@thischapter -% @oddheading @thischapter|@thispage|@thistitle -% @evenfooting @thisfile|| -% @oddfooting ||@thisfile - - -\def\evenheading{\parsearg\evenheadingxxx} -\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} -\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\def\oddheading{\parsearg\oddheadingxxx} -\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} -\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% - -\def\evenfooting{\parsearg\evenfootingxxx} -\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} -\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\def\oddfooting{\parsearg\oddfootingxxx} -\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} -\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% - \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% - % - % Leave some space for the footline. Hopefully ok to assume - % @evenfooting will not be used by itself. - \global\advance\pageheight by -12pt - \global\advance\vsize by -12pt -} - -\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} - -% @evenheadingmarks top \thischapter <- chapter at the top of a page -% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page -% -% The same set of arguments for: -% -% @oddheadingmarks -% @evenfootingmarks -% @oddfootingmarks -% @everyheadingmarks -% @everyfootingmarks - -\def\evenheadingmarks{\headingmarks{even}{heading}} -\def\oddheadingmarks{\headingmarks{odd}{heading}} -\def\evenfootingmarks{\headingmarks{even}{footing}} -\def\oddfootingmarks{\headingmarks{odd}{footing}} -\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} - \headingmarks{odd}{heading}{#1} } -\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} - \headingmarks{odd}{footing}{#1} } -% #1 = even/odd, #2 = heading/footing, #3 = top/bottom. -\def\headingmarks#1#2#3 {% - \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname - \global\expandafter\let\csname get#1#2marks\endcsname \temp -} - -\everyheadingmarks bottom -\everyfootingmarks bottom - -% @headings double turns headings on for double-sided printing. -% @headings single turns headings on for single-sided printing. -% @headings off turns them off. -% @headings on same as @headings double, retained for compatibility. -% @headings after turns on double-sided headings after this page. -% @headings doubleafter turns on double-sided headings after this page. -% @headings singleafter turns on single-sided headings after this page. -% By default, they are off at the start of a document, -% and turned `on' after @end titlepage. - -\def\headings #1 {\csname HEADINGS#1\endcsname} - -\def\HEADINGSoff{% -\global\evenheadline={\hfil} \global\evenfootline={\hfil} -\global\oddheadline={\hfil} \global\oddfootline={\hfil}} -\HEADINGSoff -% When we turn headings on, set the page number to 1. -% For double-sided printing, put current file name in lower left corner, -% chapter name on inside top of right hand pages, document -% title on inside top of left hand pages, and page numbers on outside top -% edge of all pages. -\def\HEADINGSdouble{% -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} -\let\contentsalignmacro = \chappager - -% For single-sided printing, chapter title goes across top left of page, -% page number on top right. -\def\HEADINGSsingle{% -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} -\def\HEADINGSon{\HEADINGSdouble} - -\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} -\let\HEADINGSdoubleafter=\HEADINGSafter -\def\HEADINGSdoublex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} - -\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} -\def\HEADINGSsinglex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} - -% Subroutines used in generating headings -% This produces Day Month Year style of output. -% Only define if not already defined, in case a txi-??.tex file has set -% up a different format (e.g., txi-cs.tex does this). -\ifx\today\undefined -\def\today{% - \number\day\space - \ifcase\month - \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr - \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug - \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec - \fi - \space\number\year} -\fi - -% @settitle line... specifies the title of the document, for headings. -% It generates no output of its own. -\def\thistitle{\putwordNoTitle} -\def\settitle{\parsearg{\gdef\thistitle}} - - -\message{tables,} -% Tables -- @table, @ftable, @vtable, @item(x). - -% default indentation of table text -\newdimen\tableindent \tableindent=.8in -% default indentation of @itemize and @enumerate text -\newdimen\itemindent \itemindent=.3in -% margin between end of table item and start of table text. -\newdimen\itemmargin \itemmargin=.1in - -% used internally for \itemindent minus \itemmargin -\newdimen\itemmax - -% Note @table, @ftable, and @vtable define @item, @itemx, etc., with -% these defs. -% They also define \itemindex -% to index the item name in whatever manner is desired (perhaps none). - -\newif\ifitemxneedsnegativevskip - -\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} - -\def\internalBitem{\smallbreak \parsearg\itemzzz} -\def\internalBitemx{\itemxpar \parsearg\itemzzz} - -\def\itemzzz #1{\begingroup % - \advance\hsize by -\rightskip - \advance\hsize by -\tableindent - \setbox0=\hbox{\itemindicate{#1}}% - \itemindex{#1}% - \nobreak % This prevents a break before @itemx. - % - % If the item text does not fit in the space we have, put it on a line - % by itself, and do not allow a page break either before or after that - % line. We do not start a paragraph here because then if the next - % command is, e.g., @kindex, the whatsit would get put into the - % horizontal list on a line by itself, resulting in extra blank space. - \ifdim \wd0>\itemmax - % - % Make this a paragraph so we get the \parskip glue and wrapping, - % but leave it ragged-right. - \begingroup - \advance\leftskip by-\tableindent - \advance\hsize by\tableindent - \advance\rightskip by0pt plus1fil - \leavevmode\unhbox0\par - \endgroup - % - % We're going to be starting a paragraph, but we don't want the - % \parskip glue -- logically it's part of the @item we just started. - \nobreak \vskip-\parskip - % - % Stop a page break at the \parskip glue coming up. However, if - % what follows is an environment such as @example, there will be no - % \parskip glue; then the negative vskip we just inserted would - % cause the example and the item to crash together. So we use this - % bizarre value of 10001 as a signal to \aboveenvbreak to insert - % \parskip glue after all. Section titles are handled this way also. - % - \penalty 10001 - \endgroup - \itemxneedsnegativevskipfalse - \else - % The item text fits into the space. Start a paragraph, so that the - % following text (if any) will end up on the same line. - \noindent - % Do this with kerns and \unhbox so that if there is a footnote in - % the item text, it can migrate to the main vertical list and - % eventually be printed. - \nobreak\kern-\tableindent - \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 - \unhbox0 - \nobreak\kern\dimen0 - \endgroup - \itemxneedsnegativevskiptrue - \fi -} - -\def\item{\errmessage{@item while not in a list environment}} -\def\itemx{\errmessage{@itemx while not in a list environment}} - -% @table, @ftable, @vtable. -\envdef\table{% - \let\itemindex\gobble - \tablecheck{table}% -} -\envdef\ftable{% - \def\itemindex ##1{\doind {fn}{\code{##1}}}% - \tablecheck{ftable}% -} -\envdef\vtable{% - \def\itemindex ##1{\doind {vr}{\code{##1}}}% - \tablecheck{vtable}% -} -\def\tablecheck#1{% - \ifnum \the\catcode`\^^M=\active - \endgroup - \errmessage{This command won't work in this context; perhaps the problem is - that we are \inenvironment\thisenv}% - \def\next{\doignore{#1}}% - \else - \let\next\tablex - \fi - \next -} -\def\tablex#1{% - \def\itemindicate{#1}% - \parsearg\tabley -} -\def\tabley#1{% - {% - \makevalueexpandable - \edef\temp{\noexpand\tablez #1\space\space\space}% - \expandafter - }\temp \endtablez -} -\def\tablez #1 #2 #3 #4\endtablez{% - \aboveenvbreak - \ifnum 0#1>0 \advance \leftskip by #1\mil \fi - \ifnum 0#2>0 \tableindent=#2\mil \fi - \ifnum 0#3>0 \advance \rightskip by #3\mil \fi - \itemmax=\tableindent - \advance \itemmax by -\itemmargin - \advance \leftskip by \tableindent - \exdentamount=\tableindent - \parindent = 0pt - \parskip = \smallskipamount - \ifdim \parskip=0pt \parskip=2pt \fi - \let\item = \internalBitem - \let\itemx = \internalBitemx -} -\def\Etable{\endgraf\afterenvbreak} -\let\Eftable\Etable -\let\Evtable\Etable -\let\Eitemize\Etable -\let\Eenumerate\Etable - -% This is the counter used by @enumerate, which is really @itemize - -\newcount \itemno - -\envdef\itemize{\parsearg\doitemize} - -\def\doitemize#1{% - \aboveenvbreak - \itemmax=\itemindent - \advance\itemmax by -\itemmargin - \advance\leftskip by \itemindent - \exdentamount=\itemindent - \parindent=0pt - \parskip=\smallskipamount - \ifdim\parskip=0pt \parskip=2pt \fi - % - % Try typesetting the item mark that if the document erroneously says - % something like @itemize @samp (intending @table), there's an error - % right away at the @itemize. It's not the best error message in the - % world, but it's better than leaving it to the @item. This means if - % the user wants an empty mark, they have to say @w{} not just @w. - \def\itemcontents{#1}% - \setbox0 = \hbox{\itemcontents}% - % - % @itemize with no arg is equivalent to @itemize @bullet. - \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi - % - \let\item=\itemizeitem -} - -% Definition of @item while inside @itemize and @enumerate. -% -\def\itemizeitem{% - \advance\itemno by 1 % for enumerations - {\let\par=\endgraf \smallbreak}% reasonable place to break - {% - % If the document has an @itemize directly after a section title, a - % \nobreak will be last on the list, and \sectionheading will have - % done a \vskip-\parskip. In that case, we don't want to zero - % parskip, or the item text will crash with the heading. On the - % other hand, when there is normal text preceding the item (as there - % usually is), we do want to zero parskip, or there would be too much - % space. In that case, we won't have a \nobreak before. At least - % that's the theory. - \ifnum\lastpenalty<10000 \parskip=0in \fi - \noindent - \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% - % - \vadjust{\penalty 1200}}% not good to break after first line of item. - \flushcr -} - -% \splitoff TOKENS\endmark defines \first to be the first token in -% TOKENS, and \rest to be the remainder. -% -\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% - -% Allow an optional argument of an uppercase letter, lowercase letter, -% or number, to specify the first label in the enumerated list. No -% argument is the same as `1'. -% -\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} -\def\enumeratey #1 #2\endenumeratey{% - % If we were given no argument, pretend we were given `1'. - \def\thearg{#1}% - \ifx\thearg\empty \def\thearg{1}\fi - % - % Detect if the argument is a single token. If so, it might be a - % letter. Otherwise, the only valid thing it can be is a number. - % (We will always have one token, because of the test we just made. - % This is a good thing, since \splitoff doesn't work given nothing at - % all -- the first parameter is undelimited.) - \expandafter\splitoff\thearg\endmark - \ifx\rest\empty - % Only one token in the argument. It could still be anything. - % A ``lowercase letter'' is one whose \lccode is nonzero. - % An ``uppercase letter'' is one whose \lccode is both nonzero, and - % not equal to itself. - % Otherwise, we assume it's a number. - % - % We need the \relax at the end of the \ifnum lines to stop TeX from - % continuing to look for a . - % - \ifnum\lccode\expandafter`\thearg=0\relax - \numericenumerate % a number (we hope) - \else - % It's a letter. - \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax - \lowercaseenumerate % lowercase letter - \else - \uppercaseenumerate % uppercase letter - \fi - \fi - \else - % Multiple tokens in the argument. We hope it's a number. - \numericenumerate - \fi -} - -% An @enumerate whose labels are integers. The starting integer is -% given in \thearg. -% -\def\numericenumerate{% - \itemno = \thearg - \startenumeration{\the\itemno}% -} - -% The starting (lowercase) letter is in \thearg. -\def\lowercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more lowercase letters in @enumerate; get a bigger - alphabet}% - \fi - \char\lccode\itemno - }% -} - -% The starting (uppercase) letter is in \thearg. -\def\uppercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more uppercase letters in @enumerate; get a bigger - alphabet} - \fi - \char\uccode\itemno - }% -} - -% Call \doitemize, adding a period to the first argument and supplying the -% common last two arguments. Also subtract one from the initial value in -% \itemno, since @item increments \itemno. -% -\def\startenumeration#1{% - \advance\itemno by -1 - \doitemize{#1.}\flushcr -} - -% @alphaenumerate and @capsenumerate are abbreviations for giving an arg -% to @enumerate. -% -\def\alphaenumerate{\enumerate{a}} -\def\capsenumerate{\enumerate{A}} -\def\Ealphaenumerate{\Eenumerate} -\def\Ecapsenumerate{\Eenumerate} - - -% @multitable macros -% Amy Hendrickson, 8/18/94, 3/6/96 -% -% @multitable ... @end multitable will make as many columns as desired. -% Contents of each column will wrap at width given in preamble. Width -% can be specified either with sample text given in a template line, -% or in percent of \hsize, the current width of text on page. - -% Table can continue over pages but will only break between lines. - -% To make preamble: -% -% Either define widths of columns in terms of percent of \hsize: -% @multitable @columnfractions .25 .3 .45 -% @item ... -% -% Numbers following @columnfractions are the percent of the total -% current hsize to be used for each column. You may use as many -% columns as desired. - - -% Or use a template: -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item ... -% using the widest term desired in each column. - -% Each new table line starts with @item, each subsequent new column -% starts with @tab. Empty columns may be produced by supplying @tab's -% with nothing between them for as many times as empty columns are needed, -% ie, @tab@tab@tab will produce two empty columns. - -% @item, @tab do not need to be on their own lines, but it will not hurt -% if they are. - -% Sample multitable: - -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item first col stuff @tab second col stuff @tab third col -% @item -% first col stuff -% @tab -% second col stuff -% @tab -% third col -% @item first col stuff @tab second col stuff -% @tab Many paragraphs of text may be used in any column. -% -% They will wrap at the width determined by the template. -% @item@tab@tab This will be in third column. -% @end multitable - -% Default dimensions may be reset by user. -% @multitableparskip is vertical space between paragraphs in table. -% @multitableparindent is paragraph indent in table. -% @multitablecolmargin is horizontal space to be left between columns. -% @multitablelinespace is space to leave between table items, baseline -% to baseline. -% 0pt means it depends on current normal line spacing. -% -\newskip\multitableparskip -\newskip\multitableparindent -\newdimen\multitablecolspace -\newskip\multitablelinespace -\multitableparskip=0pt -\multitableparindent=6pt -\multitablecolspace=12pt -\multitablelinespace=0pt - -% Macros used to set up halign preamble: -% -\let\endsetuptable\relax -\def\xendsetuptable{\endsetuptable} -\let\columnfractions\relax -\def\xcolumnfractions{\columnfractions} -\newif\ifsetpercent - -% #1 is the @columnfraction, usually a decimal number like .5, but might -% be just 1. We just use it, whatever it is. -% -\def\pickupwholefraction#1 {% - \global\advance\colcount by 1 - \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% - \setuptable -} - -\newcount\colcount -\def\setuptable#1{% - \def\firstarg{#1}% - \ifx\firstarg\xendsetuptable - \let\go = \relax - \else - \ifx\firstarg\xcolumnfractions - \global\setpercenttrue - \else - \ifsetpercent - \let\go\pickupwholefraction - \else - \global\advance\colcount by 1 - \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a - % separator; typically that is always in the input, anyway. - \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% - \fi - \fi - \ifx\go\pickupwholefraction - % Put the argument back for the \pickupwholefraction call, so - % we'll always have a period there to be parsed. - \def\go{\pickupwholefraction#1}% - \else - \let\go = \setuptable - \fi% - \fi - \go -} - -% multitable-only commands. -% -% @headitem starts a heading row, which we typeset in bold. -% Assignments have to be global since we are inside the implicit group -% of an alignment entry. \everycr resets \everytab so we don't have to -% undo it ourselves. -\def\headitemfont{\b}% for people to use in the template row; not changeable -\def\headitem{% - \checkenv\multitable - \crcr - \global\everytab={\bf}% can't use \headitemfont since the parsing differs - \the\everytab % for the first item -}% -% -% A \tab used to include \hskip1sp. But then the space in a template -% line is not enough. That is bad. So let's go back to just `&' until -% we again encounter the problem the 1sp was intended to solve. -% --karl, nathan@acm.org, 20apr99. -\def\tab{\checkenv\multitable &\the\everytab}% - -% @multitable ... @end multitable definitions: -% -\newtoks\everytab % insert after every tab. -% -\envdef\multitable{% - \vskip\parskip - \startsavinginserts - % - % @item within a multitable starts a normal row. - % We use \def instead of \let so that if one of the multitable entries - % contains an @itemize, we don't choke on the \item (seen as \crcr aka - % \endtemplate) expanding \doitemize. - \def\item{\crcr}% - % - \tolerance=9500 - \hbadness=9500 - \setmultitablespacing - \parskip=\multitableparskip - \parindent=\multitableparindent - \overfullrule=0pt - \global\colcount=0 - % - \everycr = {% - \noalign{% - \global\everytab={}% - \global\colcount=0 % Reset the column counter. - % Check for saved footnotes, etc. - \checkinserts - % Keeps underfull box messages off when table breaks over pages. - %\filbreak - % Maybe so, but it also creates really weird page breaks when the - % table breaks over pages. Wouldn't \vfil be better? Wait until the - % problem manifests itself, so it can be fixed for real --karl. - }% - }% - % - \parsearg\domultitable -} -\def\domultitable#1{% - % To parse everything between @multitable and @item: - \setuptable#1 \endsetuptable - % - % This preamble sets up a generic column definition, which will - % be used as many times as user calls for columns. - % \vtop will set a single line and will also let text wrap and - % continue for many paragraphs if desired. - \halign\bgroup &% - \global\advance\colcount by 1 - \multistrut - \vtop{% - % Use the current \colcount to find the correct column width: - \hsize=\expandafter\csname col\the\colcount\endcsname - % - % In order to keep entries from bumping into each other - % we will add a \leftskip of \multitablecolspace to all columns after - % the first one. - % - % If a template has been used, we will add \multitablecolspace - % to the width of each template entry. - % - % If the user has set preamble in terms of percent of \hsize we will - % use that dimension as the width of the column, and the \leftskip - % will keep entries from bumping into each other. Table will start at - % left margin and final column will justify at right margin. - % - % Make sure we don't inherit \rightskip from the outer environment. - \rightskip=0pt - \ifnum\colcount=1 - % The first column will be indented with the surrounding text. - \advance\hsize by\leftskip - \else - \ifsetpercent \else - % If user has not set preamble in terms of percent of \hsize - % we will advance \hsize by \multitablecolspace. - \advance\hsize by \multitablecolspace - \fi - % In either case we will make \leftskip=\multitablecolspace: - \leftskip=\multitablecolspace - \fi - % Ignoring space at the beginning and end avoids an occasional spurious - % blank line, when TeX decides to break the line at the space before the - % box from the multistrut, so the strut ends up on a line by itself. - % For example: - % @multitable @columnfractions .11 .89 - % @item @code{#} - % @tab Legal holiday which is valid in major parts of the whole country. - % Is automatically provided with highlighting sequences respectively - % marking characters. - \noindent\ignorespaces##\unskip\multistrut - }\cr -} -\def\Emultitable{% - \crcr - \egroup % end the \halign - \global\setpercentfalse -} - -\def\setmultitablespacing{% - \def\multistrut{\strut}% just use the standard line spacing - % - % Compute \multitablelinespace (if not defined by user) for use in - % \multitableparskip calculation. We used define \multistrut based on - % this, but (ironically) that caused the spacing to be off. - % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. -\ifdim\multitablelinespace=0pt -\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip -\global\advance\multitablelinespace by-\ht0 -\fi -%% Test to see if parskip is larger than space between lines of -%% table. If not, do nothing. -%% If so, set to same dimension as multitablelinespace. -\ifdim\multitableparskip>\multitablelinespace -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi% -\ifdim\multitableparskip=0pt -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi} - - -\message{conditionals,} - -% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, -% @ifnotxml always succeed. They currently do nothing; we don't -% attempt to check whether the conditionals are properly nested. But we -% have to remember that they are conditionals, so that @end doesn't -% attempt to close an environment group. -% -\def\makecond#1{% - \expandafter\let\csname #1\endcsname = \relax - \expandafter\let\csname iscond.#1\endcsname = 1 -} -\makecond{iftex} -\makecond{ifnotdocbook} -\makecond{ifnothtml} -\makecond{ifnotinfo} -\makecond{ifnotplaintext} -\makecond{ifnotxml} - -% Ignore @ignore, @ifhtml, @ifinfo, and the like. -% -\def\direntry{\doignore{direntry}} -\def\documentdescription{\doignore{documentdescription}} -\def\docbook{\doignore{docbook}} -\def\html{\doignore{html}} -\def\ifdocbook{\doignore{ifdocbook}} -\def\ifhtml{\doignore{ifhtml}} -\def\ifinfo{\doignore{ifinfo}} -\def\ifnottex{\doignore{ifnottex}} -\def\ifplaintext{\doignore{ifplaintext}} -\def\ifxml{\doignore{ifxml}} -\def\ignore{\doignore{ignore}} -\def\menu{\doignore{menu}} -\def\xml{\doignore{xml}} - -% Ignore text until a line `@end #1', keeping track of nested conditionals. -% -% A count to remember the depth of nesting. -\newcount\doignorecount - -\def\doignore#1{\begingroup - % Scan in ``verbatim'' mode: - \obeylines - \catcode`\@ = \other - \catcode`\{ = \other - \catcode`\} = \other - % - % Make sure that spaces turn into tokens that match what \doignoretext wants. - \spaceisspace - % - % Count number of #1's that we've seen. - \doignorecount = 0 - % - % Swallow text until we reach the matching `@end #1'. - \dodoignore{#1}% -} - -{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. - \obeylines % - % - \gdef\dodoignore#1{% - % #1 contains the command name as a string, e.g., `ifinfo'. - % - % Define a command to find the next `@end #1'. - \long\def\doignoretext##1^^M@end #1{% - \doignoretextyyy##1^^M@#1\_STOP_}% - % - % And this command to find another #1 command, at the beginning of a - % line. (Otherwise, we would consider a line `@c @ifset', for - % example, to count as an @ifset for nesting.) - \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% - % - % And now expand that command. - \doignoretext ^^M% - }% -} - -\def\doignoreyyy#1{% - \def\temp{#1}% - \ifx\temp\empty % Nothing found. - \let\next\doignoretextzzz - \else % Found a nested condition, ... - \advance\doignorecount by 1 - \let\next\doignoretextyyy % ..., look for another. - % If we're here, #1 ends with ^^M\ifinfo (for example). - \fi - \next #1% the token \_STOP_ is present just after this macro. -} - -% We have to swallow the remaining "\_STOP_". -% -\def\doignoretextzzz#1{% - \ifnum\doignorecount = 0 % We have just found the outermost @end. - \let\next\enddoignore - \else % Still inside a nested condition. - \advance\doignorecount by -1 - \let\next\doignoretext % Look for the next @end. - \fi - \next -} - -% Finish off ignored text. -{ \obeylines% - % Ignore anything after the last `@end #1'; this matters in verbatim - % environments, where otherwise the newline after an ignored conditional - % would result in a blank line in the output. - \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% -} - - -% @set VAR sets the variable VAR to an empty value. -% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. -% -% Since we want to separate VAR from REST-OF-LINE (which might be -% empty), we can't just use \parsearg; we have to insert a space of our -% own to delimit the rest of the line, and then take it out again if we -% didn't need it. -% We rely on the fact that \parsearg sets \catcode`\ =10. -% -\parseargdef\set{\setyyy#1 \endsetyyy} -\def\setyyy#1 #2\endsetyyy{% - {% - \makevalueexpandable - \def\temp{#2}% - \edef\next{\gdef\makecsname{SET#1}}% - \ifx\temp\empty - \next{}% - \else - \setzzz#2\endsetzzz - \fi - }% -} -% Remove the trailing space \setxxx inserted. -\def\setzzz#1 \endsetzzz{\next{#1}} - -% @clear VAR clears (i.e., unsets) the variable VAR. -% -\parseargdef\clear{% - {% - \makevalueexpandable - \global\expandafter\let\csname SET#1\endcsname=\relax - }% -} - -% @value{foo} gets the text saved in variable foo. -\def\value{\begingroup\makevalueexpandable\valuexxx} -\def\valuexxx#1{\expandablevalue{#1}\endgroup} -{ - \catcode`\- = \active \catcode`\_ = \active - % - \gdef\makevalueexpandable{% - \let\value = \expandablevalue - % We don't want these characters active, ... - \catcode`\-=\other \catcode`\_=\other - % ..., but we might end up with active ones in the argument if - % we're called from @code, as @code{@value{foo-bar_}}, though. - % So \let them to their normal equivalents. - \let-\realdash \let_\normalunderscore - } -} - -% We have this subroutine so that we can handle at least some @value's -% properly in indexes (we call \makevalueexpandable in \indexdummies). -% The command has to be fully expandable (if the variable is set), since -% the result winds up in the index file. This means that if the -% variable's value contains other Texinfo commands, it's almost certain -% it will fail (although perhaps we could fix that with sufficient work -% to do a one-level expansion on the result, instead of complete). -% -\def\expandablevalue#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - {[No value for ``#1'']}% - \message{Variable `#1', used in @value, is not set.}% - \else - \csname SET#1\endcsname - \fi -} - -% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined -% with @set. -% -% To get special treatment of `@end ifset,' call \makeond and the redefine. -% -\makecond{ifset} -\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} -\def\doifset#1#2{% - {% - \makevalueexpandable - \let\next=\empty - \expandafter\ifx\csname SET#2\endcsname\relax - #1% If not set, redefine \next. - \fi - \expandafter - }\next -} -\def\ifsetfail{\doignore{ifset}} - -% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been -% defined with @set, or has been undefined with @clear. -% -% The `\else' inside the `\doifset' parameter is a trick to reuse the -% above code: if the variable is not set, do nothing, if it is set, -% then redefine \next to \ifclearfail. -% -\makecond{ifclear} -\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} -\def\ifclearfail{\doignore{ifclear}} - -% @dircategory CATEGORY -- specify a category of the dir file -% which this file should belong to. Ignore this in TeX. -\let\dircategory=\comment - -% @defininfoenclose. -\let\definfoenclose=\comment - - -\message{indexing,} -% Index generation facilities - -% Define \newwrite to be identical to plain tex's \newwrite -% except not \outer, so it can be used within macros and \if's. -\edef\newwrite{\makecsname{ptexnewwrite}} - -% \newindex {foo} defines an index named foo. -% It automatically defines \fooindex such that -% \fooindex ...rest of line... puts an entry in the index foo. -% It also defines \fooindfile to be the number of the output channel for -% the file that accumulates this index. The file's extension is foo. -% The name of an index should be no more than 2 characters long -% for the sake of vms. -% -\def\newindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 % Open the file - \fi - \expandafter\xdef\csname#1index\endcsname{% % Define @#1index - \noexpand\doindex{#1}} -} - -% @defindex foo == \newindex{foo} -% -\def\defindex{\parsearg\newindex} - -% Define @defcodeindex, like @defindex except put all entries in @code. -% -\def\defcodeindex{\parsearg\newcodeindex} -% -\def\newcodeindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 - \fi - \expandafter\xdef\csname#1index\endcsname{% - \noexpand\docodeindex{#1}}% -} - - -% @synindex foo bar makes index foo feed into index bar. -% Do this instead of @defindex foo if you don't want it as a separate index. -% -% @syncodeindex foo bar similar, but put all entries made for index foo -% inside @code. -% -\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} -\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} - -% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), -% #3 the target index (bar). -\def\dosynindex#1#2#3{% - % Only do \closeout if we haven't already done it, else we'll end up - % closing the target index. - \expandafter \ifx\csname donesynindex#2\endcsname \relax - % The \closeout helps reduce unnecessary open files; the limit on the - % Acorn RISC OS is a mere 16 files. - \expandafter\closeout\csname#2indfile\endcsname - \expandafter\let\csname donesynindex#2\endcsname = 1 - \fi - % redefine \fooindfile: - \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname - \expandafter\let\csname#2indfile\endcsname=\temp - % redefine \fooindex: - \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% -} - -% Define \doindex, the driver for all \fooindex macros. -% Argument #1 is generated by the calling \fooindex macro, -% and it is "foo", the name of the index. - -% \doindex just uses \parsearg; it calls \doind for the actual work. -% This is because \doind is more useful to call from other macros. - -% There is also \dosubind {index}{topic}{subtopic} -% which makes an entry in a two-level index such as the operation index. - -\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} -\def\singleindexer #1{\doind{\indexname}{#1}} - -% like the previous two, but they put @code around the argument. -\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} -\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} - -% Take care of Texinfo commands that can appear in an index entry. -% Since there are some commands we want to expand, and others we don't, -% we have to laboriously prevent expansion for those that we don't. -% -\def\indexdummies{% - \escapechar = `\\ % use backslash in output files. - \def\@{@}% change to @@ when we switch to @ as escape char in index files. - \def\ {\realbackslash\space }% - % - % Need these in case \tex is in effect and \{ is a \delimiter again. - % But can't use \lbracecmd and \rbracecmd because texindex assumes - % braces and backslashes are used only as delimiters. - \let\{ = \mylbrace - \let\} = \myrbrace - % - % I don't entirely understand this, but when an index entry is - % generated from a macro call, the \endinput which \scanmacro inserts - % causes processing to be prematurely terminated. This is, - % apparently, because \indexsorttmp is fully expanded, and \endinput - % is an expandable command. The redefinition below makes \endinput - % disappear altogether for that purpose -- although logging shows that - % processing continues to some further point. On the other hand, it - % seems \endinput does not hurt in the printed index arg, since that - % is still getting written without apparent harm. - % - % Sample source (mac-idx3.tex, reported by Graham Percival to - % help-texinfo, 22may06): - % @macro funindex {WORD} - % @findex xyz - % @end macro - % ... - % @funindex commtest - % - % The above is not enough to reproduce the bug, but it gives the flavor. - % - % Sample whatsit resulting: - % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} - % - % So: - \let\endinput = \empty - % - % Do the redefinitions. - \commondummies -} - -% For the aux and toc files, @ is the escape character. So we want to -% redefine everything using @ as the escape character (instead of -% \realbackslash, still used for index files). When everything uses @, -% this will be simpler. -% -\def\atdummies{% - \def\@{@@}% - \def\ {@ }% - \let\{ = \lbraceatcmd - \let\} = \rbraceatcmd - % - % Do the redefinitions. - \commondummies - \otherbackslash -} - -% Called from \indexdummies and \atdummies. -% -\def\commondummies{% - % - % \definedummyword defines \#1 as \string\#1\space, thus effectively - % preventing its expansion. This is used only for control% words, - % not control letters, because the \space would be incorrect for - % control characters, but is needed to separate the control word - % from whatever follows. - % - % For control letters, we have \definedummyletter, which omits the - % space. - % - % These can be used both for control words that take an argument and - % those that do not. If it is followed by {arg} in the input, then - % that will dutifully get written to the index (or wherever). - % - \def\definedummyword ##1{\def##1{\string##1\space}}% - \def\definedummyletter##1{\def##1{\string##1}}% - \let\definedummyaccent\definedummyletter - % - \commondummiesnofonts - % - \definedummyletter\_% - % - % Non-English letters. - \definedummyword\AA - \definedummyword\AE - \definedummyword\DH - \definedummyword\L - \definedummyword\O - \definedummyword\OE - \definedummyword\TH - \definedummyword\aa - \definedummyword\ae - \definedummyword\dh - \definedummyword\exclamdown - \definedummyword\l - \definedummyword\o - \definedummyword\oe - \definedummyword\ordf - \definedummyword\ordm - \definedummyword\questiondown - \definedummyword\ss - \definedummyword\th - % - % Although these internal commands shouldn't show up, sometimes they do. - \definedummyword\bf - \definedummyword\gtr - \definedummyword\hat - \definedummyword\less - \definedummyword\sf - \definedummyword\sl - \definedummyword\tclose - \definedummyword\tt - % - \definedummyword\LaTeX - \definedummyword\TeX - % - % Assorted special characters. - \definedummyword\bullet - \definedummyword\comma - \definedummyword\copyright - \definedummyword\registeredsymbol - \definedummyword\dots - \definedummyword\enddots - \definedummyword\equiv - \definedummyword\error - \definedummyword\euro - \definedummyword\guillemetleft - \definedummyword\guillemetright - \definedummyword\guilsinglleft - \definedummyword\guilsinglright - \definedummyword\expansion - \definedummyword\minus - \definedummyword\ogonek - \definedummyword\pounds - \definedummyword\point - \definedummyword\print - \definedummyword\quotedblbase - \definedummyword\quotedblleft - \definedummyword\quotedblright - \definedummyword\quoteleft - \definedummyword\quoteright - \definedummyword\quotesinglbase - \definedummyword\result - \definedummyword\textdegree - % - % We want to disable all macros so that they are not expanded by \write. - \macrolist - % - \normalturnoffactive - % - % Handle some cases of @value -- where it does not contain any - % (non-fully-expandable) commands. - \makevalueexpandable -} - -% \commondummiesnofonts: common to \commondummies and \indexnofonts. -% -\def\commondummiesnofonts{% - % Control letters and accents. - \definedummyletter\!% - \definedummyaccent\"% - \definedummyaccent\'% - \definedummyletter\*% - \definedummyaccent\,% - \definedummyletter\.% - \definedummyletter\/% - \definedummyletter\:% - \definedummyaccent\=% - \definedummyletter\?% - \definedummyaccent\^% - \definedummyaccent\`% - \definedummyaccent\~% - \definedummyword\u - \definedummyword\v - \definedummyword\H - \definedummyword\dotaccent - \definedummyword\ogonek - \definedummyword\ringaccent - \definedummyword\tieaccent - \definedummyword\ubaraccent - \definedummyword\udotaccent - \definedummyword\dotless - % - % Texinfo font commands. - \definedummyword\b - \definedummyword\i - \definedummyword\r - \definedummyword\sc - \definedummyword\t - % - % Commands that take arguments. - \definedummyword\acronym - \definedummyword\cite - \definedummyword\code - \definedummyword\command - \definedummyword\dfn - \definedummyword\email - \definedummyword\emph - \definedummyword\env - \definedummyword\file - \definedummyword\kbd - \definedummyword\key - \definedummyword\math - \definedummyword\option - \definedummyword\pxref - \definedummyword\ref - \definedummyword\samp - \definedummyword\strong - \definedummyword\tie - \definedummyword\uref - \definedummyword\url - \definedummyword\var - \definedummyword\verb - \definedummyword\w - \definedummyword\xref -} - -% \indexnofonts is used when outputting the strings to sort the index -% by, and when constructing control sequence names. It eliminates all -% control sequences and just writes whatever the best ASCII sort string -% would be for a given command (usually its argument). -% -\def\indexnofonts{% - % Accent commands should become @asis. - \def\definedummyaccent##1{\let##1\asis}% - % We can just ignore other control letters. - \def\definedummyletter##1{\let##1\empty}% - % Hopefully, all control words can become @asis. - \let\definedummyword\definedummyaccent - % - \commondummiesnofonts - % - % Don't no-op \tt, since it isn't a user-level command - % and is used in the definitions of the active chars like <, >, |, etc. - % Likewise with the other plain tex font commands. - %\let\tt=\asis - % - \def\ { }% - \def\@{@}% - % how to handle braces? - \def\_{\normalunderscore}% - % - % Non-English letters. - \def\AA{AA}% - \def\AE{AE}% - \def\DH{DZZ}% - \def\L{L}% - \def\OE{OE}% - \def\O{O}% - \def\TH{ZZZ}% - \def\aa{aa}% - \def\ae{ae}% - \def\dh{dzz}% - \def\exclamdown{!}% - \def\l{l}% - \def\oe{oe}% - \def\ordf{a}% - \def\ordm{o}% - \def\o{o}% - \def\questiondown{?}% - \def\ss{ss}% - \def\th{zzz}% - % - \def\LaTeX{LaTeX}% - \def\TeX{TeX}% - % - % Assorted special characters. - % (The following {} will end up in the sort string, but that's ok.) - \def\bullet{bullet}% - \def\comma{,}% - \def\copyright{copyright}% - \def\dots{...}% - \def\enddots{...}% - \def\equiv{==}% - \def\error{error}% - \def\euro{euro}% - \def\expansion{==>}% - \def\guillemetleft{<<}% - \def\guillemetright{>>}% - \def\guilsinglleft{<}% - \def\guilsinglright{>}% - \def\minus{-}% - \def\point{.}% - \def\pounds{pounds}% - \def\print{-|}% - \def\quotedblbase{"}% - \def\quotedblleft{"}% - \def\quotedblright{"}% - \def\quoteleft{`}% - \def\quoteright{'}% - \def\quotesinglbase{,}% - \def\registeredsymbol{R}% - \def\result{=>}% - \def\textdegree{o}% - % - % We need to get rid of all macros, leaving only the arguments (if present). - % Of course this is not nearly correct, but it is the best we can do for now. - % makeinfo does not expand macros in the argument to @deffn, which ends up - % writing an index entry, and texindex isn't prepared for an index sort entry - % that starts with \. - % - % Since macro invocations are followed by braces, we can just redefine them - % to take a single TeX argument. The case of a macro invocation that - % goes to end-of-line is not handled. - % - \macrolist -} - -\let\indexbackslash=0 %overridden during \printindex. -\let\SETmarginindex=\relax % put index entries in margin (undocumented)? - -% Most index entries go through here, but \dosubind is the general case. -% #1 is the index name, #2 is the entry text. -\def\doind#1#2{\dosubind{#1}{#2}{}} - -% Workhorse for all \fooindexes. -% #1 is name of index, #2 is stuff to put there, #3 is subentry -- -% empty if called from \doind, as we usually are (the main exception -% is with most defuns, which call us directly). -% -\def\dosubind#1#2#3{% - \iflinks - {% - % Store the main index entry text (including the third arg). - \toks0 = {#2}% - % If third arg is present, precede it with a space. - \def\thirdarg{#3}% - \ifx\thirdarg\empty \else - \toks0 = \expandafter{\the\toks0 \space #3}% - \fi - % - \edef\writeto{\csname#1indfile\endcsname}% - % - \safewhatsit\dosubindwrite - }% - \fi -} - -% Write the entry in \toks0 to the index file: -% -\def\dosubindwrite{% - % Put the index entry in the margin if desired. - \ifx\SETmarginindex\relax\else - \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% - \fi - % - % Remember, we are within a group. - \indexdummies % Must do this here, since \bf, etc expand at this stage - \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now - % so it will be output as is; and it will print as backslash. - % - % Process the index entry with all font commands turned off, to - % get the string to sort by. - {\indexnofonts - \edef\temp{\the\toks0}% need full expansion - \xdef\indexsorttmp{\temp}% - }% - % - % Set up the complete index entry, with both the sort key and - % the original text, including any font commands. We write - % three arguments to \entry to the .?? file (four in the - % subentry case), texindex reduces to two when writing the .??s - % sorted result. - \edef\temp{% - \write\writeto{% - \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% - }% - \temp -} - -% Take care of unwanted page breaks/skips around a whatsit: -% -% If a skip is the last thing on the list now, preserve it -% by backing up by \lastskip, doing the \write, then inserting -% the skip again. Otherwise, the whatsit generated by the -% \write or \pdfdest will make \lastskip zero. The result is that -% sequences like this: -% @end defun -% @tindex whatever -% @defun ... -% will have extra space inserted, because the \medbreak in the -% start of the @defun won't see the skip inserted by the @end of -% the previous defun. -% -% But don't do any of this if we're not in vertical mode. We -% don't want to do a \vskip and prematurely end a paragraph. -% -% Avoid page breaks due to these extra skips, too. -% -% But wait, there is a catch there: -% We'll have to check whether \lastskip is zero skip. \ifdim is not -% sufficient for this purpose, as it ignores stretch and shrink parts -% of the skip. The only way seems to be to check the textual -% representation of the skip. -% -% The following is almost like \def\zeroskipmacro{0.0pt} except that -% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). -% -\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} -% -\newskip\whatsitskip -\newcount\whatsitpenalty -% -% ..., ready, GO: -% -\def\safewhatsit#1{% -\ifhmode - #1% -\else - % \lastskip and \lastpenalty cannot both be nonzero simultaneously. - \whatsitskip = \lastskip - \edef\lastskipmacro{\the\lastskip}% - \whatsitpenalty = \lastpenalty - % - % If \lastskip is nonzero, that means the last item was a - % skip. And since a skip is discardable, that means this - % -\whatsitskip glue we're inserting is preceded by a - % non-discardable item, therefore it is not a potential - % breakpoint, therefore no \nobreak needed. - \ifx\lastskipmacro\zeroskipmacro - \else - \vskip-\whatsitskip - \fi - % - #1% - % - \ifx\lastskipmacro\zeroskipmacro - % If \lastskip was zero, perhaps the last item was a penalty, and - % perhaps it was >=10000, e.g., a \nobreak. In that case, we want - % to re-insert the same penalty (values >10000 are used for various - % signals); since we just inserted a non-discardable item, any - % following glue (such as a \parskip) would be a breakpoint. For example: - % - % @deffn deffn-whatever - % @vindex index-whatever - % Description. - % would allow a break between the index-whatever whatsit - % and the "Description." paragraph. - \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi - \else - % On the other hand, if we had a nonzero \lastskip, - % this make-up glue would be preceded by a non-discardable item - % (the whatsit from the \write), so we must insert a \nobreak. - \nobreak\vskip\whatsitskip - \fi -\fi -} - -% The index entry written in the file actually looks like -% \entry {sortstring}{page}{topic} -% or -% \entry {sortstring}{page}{topic}{subtopic} -% The texindex program reads in these files and writes files -% containing these kinds of lines: -% \initial {c} -% before the first topic whose initial is c -% \entry {topic}{pagelist} -% for a topic that is used without subtopics -% \primary {topic} -% for the beginning of a topic that is used with subtopics -% \secondary {subtopic}{pagelist} -% for each subtopic. - -% Define the user-accessible indexing commands -% @findex, @vindex, @kindex, @cindex. - -\def\findex {\fnindex} -\def\kindex {\kyindex} -\def\cindex {\cpindex} -\def\vindex {\vrindex} -\def\tindex {\tpindex} -\def\pindex {\pgindex} - -\def\cindexsub {\begingroup\obeylines\cindexsub} -{\obeylines % -\gdef\cindexsub "#1" #2^^M{\endgroup % -\dosubind{cp}{#2}{#1}}} - -% Define the macros used in formatting output of the sorted index material. - -% @printindex causes a particular index (the ??s file) to get printed. -% It does not print any chapter heading (usually an @unnumbered). -% -\parseargdef\printindex{\begingroup - \dobreak \chapheadingskip{10000}% - % - \smallfonts \rm - \tolerance = 9500 - \plainfrenchspacing - \everypar = {}% don't want the \kern\-parindent from indentation suppression. - % - % See if the index file exists and is nonempty. - % Change catcode of @ here so that if the index file contains - % \initial {@} - % as its first line, TeX doesn't complain about mismatched braces - % (because it thinks @} is a control sequence). - \catcode`\@ = 11 - \openin 1 \jobname.#1s - \ifeof 1 - % \enddoublecolumns gets confused if there is no text in the index, - % and it loses the chapter title and the aux file entries for the - % index. The easiest way to prevent this problem is to make sure - % there is some text. - \putwordIndexNonexistent - \else - % - % If the index file exists but is empty, then \openin leaves \ifeof - % false. We have to make TeX try to read something from the file, so - % it can discover if there is anything in it. - \read 1 to \temp - \ifeof 1 - \putwordIndexIsEmpty - \else - % Index files are almost Texinfo source, but we use \ as the escape - % character. It would be better to use @, but that's too big a change - % to make right now. - \def\indexbackslash{\backslashcurfont}% - \catcode`\\ = 0 - \escapechar = `\\ - \begindoublecolumns - \input \jobname.#1s - \enddoublecolumns - \fi - \fi - \closein 1 -\endgroup} - -% These macros are used by the sorted index file itself. -% Change them to control the appearance of the index. - -\def\initial#1{{% - % Some minor font changes for the special characters. - \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt - % - % Remove any glue we may have, we'll be inserting our own. - \removelastskip - % - % We like breaks before the index initials, so insert a bonus. - \nobreak - \vskip 0pt plus 3\baselineskip - \penalty 0 - \vskip 0pt plus -3\baselineskip - % - % Typeset the initial. Making this add up to a whole number of - % baselineskips increases the chance of the dots lining up from column - % to column. It still won't often be perfect, because of the stretch - % we need before each entry, but it's better. - % - % No shrink because it confuses \balancecolumns. - \vskip 1.67\baselineskip plus .5\baselineskip - \leftline{\secbf #1}% - % Do our best not to break after the initial. - \nobreak - \vskip .33\baselineskip plus .1\baselineskip -}} - -% \entry typesets a paragraph consisting of the text (#1), dot leaders, and -% then page number (#2) flushed to the right margin. It is used for index -% and table of contents entries. The paragraph is indented by \leftskip. -% -% A straightforward implementation would start like this: -% \def\entry#1#2{... -% But this freezes the catcodes in the argument, and can cause problems to -% @code, which sets - active. This problem was fixed by a kludge--- -% ``-'' was active throughout whole index, but this isn't really right. -% -% The right solution is to prevent \entry from swallowing the whole text. -% --kasal, 21nov03 -\def\entry{% - \begingroup - % - % Start a new paragraph if necessary, so our assignments below can't - % affect previous text. - \par - % - % Do not fill out the last line with white space. - \parfillskip = 0in - % - % No extra space above this paragraph. - \parskip = 0in - % - % Do not prefer a separate line ending with a hyphen to fewer lines. - \finalhyphendemerits = 0 - % - % \hangindent is only relevant when the entry text and page number - % don't both fit on one line. In that case, bob suggests starting the - % dots pretty far over on the line. Unfortunately, a large - % indentation looks wrong when the entry text itself is broken across - % lines. So we use a small indentation and put up with long leaders. - % - % \hangafter is reset to 1 (which is the value we want) at the start - % of each paragraph, so we need not do anything with that. - \hangindent = 2em - % - % When the entry text needs to be broken, just fill out the first line - % with blank space. - \rightskip = 0pt plus1fil - % - % A bit of stretch before each entry for the benefit of balancing - % columns. - \vskip 0pt plus1pt - % - % Swallow the left brace of the text (first parameter): - \afterassignment\doentry - \let\temp = -} -\def\doentry{% - \bgroup % Instead of the swallowed brace. - \noindent - \aftergroup\finishentry - % And now comes the text of the entry. -} -\def\finishentry#1{% - % #1 is the page number. - % - % The following is kludged to not output a line of dots in the index if - % there are no page numbers. The next person who breaks this will be - % cursed by a Unix daemon. - \setbox\boxA = \hbox{#1}% - \ifdim\wd\boxA = 0pt - \ % - \else - % - % If we must, put the page number on a line of its own, and fill out - % this line with blank space. (The \hfil is overwhelmed with the - % fill leaders glue in \indexdotfill if the page number does fit.) - \hfil\penalty50 - \null\nobreak\indexdotfill % Have leaders before the page number. - % - % The `\ ' here is removed by the implicit \unskip that TeX does as - % part of (the primitive) \par. Without it, a spurious underfull - % \hbox ensues. - \ifpdf - \pdfgettoks#1.% - \ \the\toksA - \else - \ #1% - \fi - \fi - \par - \endgroup -} - -% Like plain.tex's \dotfill, except uses up at least 1 em. -\def\indexdotfill{\cleaders - \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} - -\def\primary #1{\line{#1\hfil}} - -\newskip\secondaryindent \secondaryindent=0.5cm -\def\secondary#1#2{{% - \parfillskip=0in - \parskip=0in - \hangindent=1in - \hangafter=1 - \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill - \ifpdf - \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. - \else - #2 - \fi - \par -}} - -% Define two-column mode, which we use to typeset indexes. -% Adapted from the TeXbook, page 416, which is to say, -% the manmac.tex format used to print the TeXbook itself. -\catcode`\@=11 - -\newbox\partialpage -\newdimen\doublecolumnhsize - -\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns - % Grab any single-column material above us. - \output = {% - % - % Here is a possibility not foreseen in manmac: if we accumulate a - % whole lot of material, we might end up calling this \output - % routine twice in a row (see the doublecol-lose test, which is - % essentially a couple of indexes with @setchapternewpage off). In - % that case we just ship out what is in \partialpage with the normal - % output routine. Generally, \partialpage will be empty when this - % runs and this will be a no-op. See the indexspread.tex test case. - \ifvoid\partialpage \else - \onepageout{\pagecontents\partialpage}% - \fi - % - \global\setbox\partialpage = \vbox{% - % Unvbox the main output page. - \unvbox\PAGE - \kern-\topskip \kern\baselineskip - }% - }% - \eject % run that output routine to set \partialpage - % - % Use the double-column output routine for subsequent pages. - \output = {\doublecolumnout}% - % - % Change the page size parameters. We could do this once outside this - % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 - % format, but then we repeat the same computation. Repeating a couple - % of assignments once per index is clearly meaningless for the - % execution time, so we may as well do it in one place. - % - % First we halve the line length, less a little for the gutter between - % the columns. We compute the gutter based on the line length, so it - % changes automatically with the paper format. The magic constant - % below is chosen so that the gutter has the same value (well, +-<1pt) - % as it did when we hard-coded it. - % - % We put the result in a separate register, \doublecolumhsize, so we - % can restore it in \pagesofar, after \hsize itself has (potentially) - % been clobbered. - % - \doublecolumnhsize = \hsize - \advance\doublecolumnhsize by -.04154\hsize - \divide\doublecolumnhsize by 2 - \hsize = \doublecolumnhsize - % - % Double the \vsize as well. (We don't need a separate register here, - % since nobody clobbers \vsize.) - \vsize = 2\vsize -} - -% The double-column output routine for all double-column pages except -% the last. -% -\def\doublecolumnout{% - \splittopskip=\topskip \splitmaxdepth=\maxdepth - % Get the available space for the double columns -- the normal - % (undoubled) page height minus any material left over from the - % previous page. - \dimen@ = \vsize - \divide\dimen@ by 2 - \advance\dimen@ by -\ht\partialpage - % - % box0 will be the left-hand column, box2 the right. - \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ - \onepageout\pagesofar - \unvbox255 - \penalty\outputpenalty -} -% -% Re-output the contents of the output page -- any previous material, -% followed by the two boxes we just split, in box0 and box2. -\def\pagesofar{% - \unvbox\partialpage - % - \hsize = \doublecolumnhsize - \wd0=\hsize \wd2=\hsize - \hbox to\pagewidth{\box0\hfil\box2}% -} -% -% All done with double columns. -\def\enddoublecolumns{% - % The following penalty ensures that the page builder is exercised - % _before_ we change the output routine. This is necessary in the - % following situation: - % - % The last section of the index consists only of a single entry. - % Before this section, \pagetotal is less than \pagegoal, so no - % break occurs before the last section starts. However, the last - % section, consisting of \initial and the single \entry, does not - % fit on the page and has to be broken off. Without the following - % penalty the page builder will not be exercised until \eject - % below, and by that time we'll already have changed the output - % routine to the \balancecolumns version, so the next-to-last - % double-column page will be processed with \balancecolumns, which - % is wrong: The two columns will go to the main vertical list, with - % the broken-off section in the recent contributions. As soon as - % the output routine finishes, TeX starts reconsidering the page - % break. The two columns and the broken-off section both fit on the - % page, because the two columns now take up only half of the page - % goal. When TeX sees \eject from below which follows the final - % section, it invokes the new output routine that we've set after - % \balancecolumns below; \onepageout will try to fit the two columns - % and the final section into the vbox of \pageheight (see - % \pagebody), causing an overfull box. - % - % Note that glue won't work here, because glue does not exercise the - % page builder, unlike penalties (see The TeXbook, pp. 280-281). - \penalty0 - % - \output = {% - % Split the last of the double-column material. Leave it on the - % current page, no automatic page break. - \balancecolumns - % - % If we end up splitting too much material for the current page, - % though, there will be another page break right after this \output - % invocation ends. Having called \balancecolumns once, we do not - % want to call it again. Therefore, reset \output to its normal - % definition right away. (We hope \balancecolumns will never be - % called on to balance too much material, but if it is, this makes - % the output somewhat more palatable.) - \global\output = {\onepageout{\pagecontents\PAGE}}% - }% - \eject - \endgroup % started in \begindoublecolumns - % - % \pagegoal was set to the doubled \vsize above, since we restarted - % the current page. We're now back to normal single-column - % typesetting, so reset \pagegoal to the normal \vsize (after the - % \endgroup where \vsize got restored). - \pagegoal = \vsize -} -% -% Called at the end of the double column material. -\def\balancecolumns{% - \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. - \dimen@ = \ht0 - \advance\dimen@ by \topskip - \advance\dimen@ by-\baselineskip - \divide\dimen@ by 2 % target to split to - %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% - \splittopskip = \topskip - % Loop until we get a decent breakpoint. - {% - \vbadness = 10000 - \loop - \global\setbox3 = \copy0 - \global\setbox1 = \vsplit3 to \dimen@ - \ifdim\ht3>\dimen@ - \global\advance\dimen@ by 1pt - \repeat - }% - %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% - \setbox0=\vbox to\dimen@{\unvbox1}% - \setbox2=\vbox to\dimen@{\unvbox3}% - % - \pagesofar -} -\catcode`\@ = \other - - -\message{sectioning,} -% Chapters, sections, etc. - -% \unnumberedno is an oxymoron, of course. But we count the unnumbered -% sections so that we can refer to them unambiguously in the pdf -% outlines by their "section number". We avoid collisions with chapter -% numbers by starting them at 10000. (If a document ever has 10000 -% chapters, we're in trouble anyway, I'm sure.) -\newcount\unnumberedno \unnumberedno = 10000 -\newcount\chapno -\newcount\secno \secno=0 -\newcount\subsecno \subsecno=0 -\newcount\subsubsecno \subsubsecno=0 - -% This counter is funny since it counts through charcodes of letters A, B, ... -\newcount\appendixno \appendixno = `\@ -% -% \def\appendixletter{\char\the\appendixno} -% We do the following ugly conditional instead of the above simple -% construct for the sake of pdftex, which needs the actual -% letter in the expansion, not just typeset. -% -\def\appendixletter{% - \ifnum\appendixno=`A A% - \else\ifnum\appendixno=`B B% - \else\ifnum\appendixno=`C C% - \else\ifnum\appendixno=`D D% - \else\ifnum\appendixno=`E E% - \else\ifnum\appendixno=`F F% - \else\ifnum\appendixno=`G G% - \else\ifnum\appendixno=`H H% - \else\ifnum\appendixno=`I I% - \else\ifnum\appendixno=`J J% - \else\ifnum\appendixno=`K K% - \else\ifnum\appendixno=`L L% - \else\ifnum\appendixno=`M M% - \else\ifnum\appendixno=`N N% - \else\ifnum\appendixno=`O O% - \else\ifnum\appendixno=`P P% - \else\ifnum\appendixno=`Q Q% - \else\ifnum\appendixno=`R R% - \else\ifnum\appendixno=`S S% - \else\ifnum\appendixno=`T T% - \else\ifnum\appendixno=`U U% - \else\ifnum\appendixno=`V V% - \else\ifnum\appendixno=`W W% - \else\ifnum\appendixno=`X X% - \else\ifnum\appendixno=`Y Y% - \else\ifnum\appendixno=`Z Z% - % The \the is necessary, despite appearances, because \appendixletter is - % expanded while writing the .toc file. \char\appendixno is not - % expandable, thus it is written literally, thus all appendixes come out - % with the same letter (or @) in the toc without it. - \else\char\the\appendixno - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} - -% Each @chapter defines these (using marks) as the number+name, number -% and name of the chapter. Page headings and footings can use -% these. @section does likewise. -\def\thischapter{} -\def\thischapternum{} -\def\thischaptername{} -\def\thissection{} -\def\thissectionnum{} -\def\thissectionname{} - -\newcount\absseclevel % used to calculate proper heading level -\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count - -% @raisesections: treat @section as chapter, @subsection as section, etc. -\def\raisesections{\global\advance\secbase by -1} -\let\up=\raisesections % original BFox name - -% @lowersections: treat @chapter as section, @section as subsection, etc. -\def\lowersections{\global\advance\secbase by 1} -\let\down=\lowersections % original BFox name - -% we only have subsub. -\chardef\maxseclevel = 3 -% -% A numbered section within an unnumbered changes to unnumbered too. -% To achive this, remember the "biggest" unnum. sec. we are currently in: -\chardef\unmlevel = \maxseclevel -% -% Trace whether the current chapter is an appendix or not: -% \chapheadtype is "N" or "A", unnumbered chapters are ignored. -\def\chapheadtype{N} - -% Choose a heading macro -% #1 is heading type -% #2 is heading level -% #3 is text for heading -\def\genhead#1#2#3{% - % Compute the abs. sec. level: - \absseclevel=#2 - \advance\absseclevel by \secbase - % Make sure \absseclevel doesn't fall outside the range: - \ifnum \absseclevel < 0 - \absseclevel = 0 - \else - \ifnum \absseclevel > 3 - \absseclevel = 3 - \fi - \fi - % The heading type: - \def\headtype{#1}% - \if \headtype U% - \ifnum \absseclevel < \unmlevel - \chardef\unmlevel = \absseclevel - \fi - \else - % Check for appendix sections: - \ifnum \absseclevel = 0 - \edef\chapheadtype{\headtype}% - \else - \if \headtype A\if \chapheadtype N% - \errmessage{@appendix... within a non-appendix chapter}% - \fi\fi - \fi - % Check for numbered within unnumbered: - \ifnum \absseclevel > \unmlevel - \def\headtype{U}% - \else - \chardef\unmlevel = 3 - \fi - \fi - % Now print the heading: - \if \headtype U% - \ifcase\absseclevel - \unnumberedzzz{#3}% - \or \unnumberedseczzz{#3}% - \or \unnumberedsubseczzz{#3}% - \or \unnumberedsubsubseczzz{#3}% - \fi - \else - \if \headtype A% - \ifcase\absseclevel - \appendixzzz{#3}% - \or \appendixsectionzzz{#3}% - \or \appendixsubseczzz{#3}% - \or \appendixsubsubseczzz{#3}% - \fi - \else - \ifcase\absseclevel - \chapterzzz{#3}% - \or \seczzz{#3}% - \or \numberedsubseczzz{#3}% - \or \numberedsubsubseczzz{#3}% - \fi - \fi - \fi - \suppressfirstparagraphindent -} - -% an interface: -\def\numhead{\genhead N} -\def\apphead{\genhead A} -\def\unnmhead{\genhead U} - -% @chapter, @appendix, @unnumbered. Increment top-level counter, reset -% all lower-level sectioning counters to zero. -% -% Also set \chaplevelprefix, which we prepend to @float sequence numbers -% (e.g., figures), q.v. By default (before any chapter), that is empty. -\let\chaplevelprefix = \empty -% -\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz -\def\chapterzzz#1{% - % section resetting is \global in case the chapter is in a group, such - % as an @include file. - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\chapno by 1 - % - % Used for \float. - \gdef\chaplevelprefix{\the\chapno.}% - \resetallfloatnos - % - % \putwordChapter can contain complex things in translations. - \toks0=\expandafter{\putwordChapter}% - \message{\the\toks0 \space \the\chapno}% - % - % Write the actual heading. - \chapmacro{#1}{Ynumbered}{\the\chapno}% - % - % So @section and the like are numbered underneath this chapter. - \global\let\section = \numberedsec - \global\let\subsection = \numberedsubsec - \global\let\subsubsection = \numberedsubsubsec -} - -\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz -% -\def\appendixzzz#1{% - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\appendixno by 1 - \gdef\chaplevelprefix{\appendixletter.}% - \resetallfloatnos - % - % \putwordAppendix can contain complex things in translations. - \toks0=\expandafter{\putwordAppendix}% - \message{\the\toks0 \space \appendixletter}% - % - \chapmacro{#1}{Yappendix}{\appendixletter}% - % - \global\let\section = \appendixsec - \global\let\subsection = \appendixsubsec - \global\let\subsubsection = \appendixsubsubsec -} - -\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz -\def\unnumberedzzz#1{% - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\unnumberedno by 1 - % - % Since an unnumbered has no number, no prefix for figures. - \global\let\chaplevelprefix = \empty - \resetallfloatnos - % - % This used to be simply \message{#1}, but TeX fully expands the - % argument to \message. Therefore, if #1 contained @-commands, TeX - % expanded them. For example, in `@unnumbered The @cite{Book}', TeX - % expanded @cite (which turns out to cause errors because \cite is meant - % to be executed, not expanded). - % - % Anyway, we don't want the fully-expanded definition of @cite to appear - % as a result of the \message, we just want `@cite' itself. We use - % \the to achieve this: TeX expands \the only once, - % simply yielding the contents of . (We also do this for - % the toc entries.) - \toks0 = {#1}% - \message{(\the\toks0)}% - % - \chapmacro{#1}{Ynothing}{\the\unnumberedno}% - % - \global\let\section = \unnumberedsec - \global\let\subsection = \unnumberedsubsec - \global\let\subsubsection = \unnumberedsubsubsec -} - -% @centerchap is like @unnumbered, but the heading is centered. -\outer\parseargdef\centerchap{% - % Well, we could do the following in a group, but that would break - % an assumption that \chapmacro is called at the outermost level. - % Thus we are safer this way: --kasal, 24feb04 - \let\centerparametersmaybe = \centerparameters - \unnmhead0{#1}% - \let\centerparametersmaybe = \relax -} - -% @top is like @unnumbered. -\let\top\unnumbered - -% Sections. -\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz -\def\seczzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% -} - -\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz -\def\appendixsectionzzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% -} -\let\appendixsec\appendixsection - -\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz -\def\unnumberedseczzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% -} - -% Subsections. -\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz -\def\numberedsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% -} - -\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz -\def\appendixsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Yappendix}% - {\appendixletter.\the\secno.\the\subsecno}% -} - -\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz -\def\unnumberedsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Ynothing}% - {\the\unnumberedno.\the\secno.\the\subsecno}% -} - -% Subsubsections. -\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz -\def\numberedsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Ynumbered}% - {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz -\def\appendixsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Yappendix}% - {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz -\def\unnumberedsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Ynothing}% - {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -% These macros control what the section commands do, according -% to what kind of chapter we are in (ordinary, appendix, or unnumbered). -% Define them by default for a numbered chapter. -\let\section = \numberedsec -\let\subsection = \numberedsubsec -\let\subsubsection = \numberedsubsubsec - -% Define @majorheading, @heading and @subheading - -% NOTE on use of \vbox for chapter headings, section headings, and such: -% 1) We use \vbox rather than the earlier \line to permit -% overlong headings to fold. -% 2) \hyphenpenalty is set to 10000 because hyphenation in a -% heading is obnoxious; this forbids it. -% 3) Likewise, headings look best if no \parindent is used, and -% if justification is not attempted. Hence \raggedright. - -\def\majorheading{% - {\advance\chapheadingskip by 10pt \chapbreak }% - \parsearg\chapheadingzzz -} - -\def\chapheading{\chapbreak \parsearg\chapheadingzzz} -\def\chapheadingzzz#1{% - {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\ptexraggedright - \rmisbold #1\hfill}}% - \bigskip \par\penalty 200\relax - \suppressfirstparagraphindent -} - -% @heading, @subheading, @subsubheading. -\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} -\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} -\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} - -% These macros generate a chapter, section, etc. heading only -% (including whitespace, linebreaking, etc. around it), -% given all the information in convenient, parsed form. - -%%% Args are the skip and penalty (usually negative) -\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} - -%%% Define plain chapter starts, and page on/off switching for it -% Parameter controlling skip before chapter headings (if needed) - -\newskip\chapheadingskip - -\def\chapbreak{\dobreak \chapheadingskip {-4000}} -\def\chappager{\par\vfill\supereject} -% Because \domark is called before \chapoddpage, the filler page will -% get the headings for the next chapter, which is wrong. But we don't -% care -- we just disable all headings on the filler page. -\def\chapoddpage{% - \chappager - \ifodd\pageno \else - \begingroup - \evenheadline={\hfil}\evenfootline={\hfil}% - \oddheadline={\hfil}\oddfootline={\hfil}% - \hbox to 0pt{}% - \chappager - \endgroup - \fi -} - -\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} - -\def\CHAPPAGoff{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chapbreak -\global\let\pagealignmacro=\chappager} - -\def\CHAPPAGon{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chappager -\global\let\pagealignmacro=\chappager -\global\def\HEADINGSon{\HEADINGSsingle}} - -\def\CHAPPAGodd{% -\global\let\contentsalignmacro = \chapoddpage -\global\let\pchapsepmacro=\chapoddpage -\global\let\pagealignmacro=\chapoddpage -\global\def\HEADINGSon{\HEADINGSdouble}} - -\CHAPPAGon - -% Chapter opening. -% -% #1 is the text, #2 is the section type (Ynumbered, Ynothing, -% Yappendix, Yomitfromtoc), #3 the chapter number. -% -% To test against our argument. -\def\Ynothingkeyword{Ynothing} -\def\Yomitfromtockeyword{Yomitfromtoc} -\def\Yappendixkeyword{Yappendix} -% -\def\chapmacro#1#2#3{% - % Insert the first mark before the heading break (see notes for \domark). - \let\prevchapterdefs=\lastchapterdefs - \let\prevsectiondefs=\lastsectiondefs - \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% - \gdef\thissection{}}% - % - \def\temptype{#2}% - \ifx\temptype\Ynothingkeyword - \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% - \gdef\thischapter{\thischaptername}}% - \else\ifx\temptype\Yomitfromtockeyword - \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% - \gdef\thischapter{}}% - \else\ifx\temptype\Yappendixkeyword - \toks0={#1}% - \xdef\lastchapterdefs{% - \gdef\noexpand\thischaptername{\the\toks0}% - \gdef\noexpand\thischapternum{\appendixletter}% - % \noexpand\putwordAppendix avoids expanding indigestible - % commands in some of the translations. - \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} - \noexpand\thischapternum: - \noexpand\thischaptername}% - }% - \else - \toks0={#1}% - \xdef\lastchapterdefs{% - \gdef\noexpand\thischaptername{\the\toks0}% - \gdef\noexpand\thischapternum{\the\chapno}% - % \noexpand\putwordChapter avoids expanding indigestible - % commands in some of the translations. - \gdef\noexpand\thischapter{\noexpand\putwordChapter{} - \noexpand\thischapternum: - \noexpand\thischaptername}% - }% - \fi\fi\fi - % - % Output the mark. Pass it through \safewhatsit, to take care of - % the preceding space. - \safewhatsit\domark - % - % Insert the chapter heading break. - \pchapsepmacro - % - % Now the second mark, after the heading break. No break points - % between here and the heading. - \let\prevchapterdefs=\lastchapterdefs - \let\prevsectiondefs=\lastsectiondefs - \domark - % - {% - \chapfonts \rmisbold - % - % Have to define \lastsection before calling \donoderef, because the - % xref code eventually uses it. On the other hand, it has to be called - % after \pchapsepmacro, or the headline will change too soon. - \gdef\lastsection{#1}% - % - % Only insert the separating space if we have a chapter/appendix - % number, and don't print the unnumbered ``number''. - \ifx\temptype\Ynothingkeyword - \setbox0 = \hbox{}% - \def\toctype{unnchap}% - \else\ifx\temptype\Yomitfromtockeyword - \setbox0 = \hbox{}% contents like unnumbered, but no toc entry - \def\toctype{omit}% - \else\ifx\temptype\Yappendixkeyword - \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% - \def\toctype{app}% - \else - \setbox0 = \hbox{#3\enspace}% - \def\toctype{numchap}% - \fi\fi\fi - % - % Write the toc entry for this chapter. Must come before the - % \donoderef, because we include the current node name in the toc - % entry, and \donoderef resets it to empty. - \writetocentry{\toctype}{#1}{#3}% - % - % For pdftex, we have to write out the node definition (aka, make - % the pdfdest) after any page break, but before the actual text has - % been typeset. If the destination for the pdf outline is after the - % text, then jumping from the outline may wind up with the text not - % being visible, for instance under high magnification. - \donoderef{#2}% - % - % Typeset the actual heading. - \nobreak % Avoid page breaks at the interline glue. - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright - \hangindent=\wd0 \centerparametersmaybe - \unhbox0 #1\par}% - }% - \nobreak\bigskip % no page break after a chapter title - \nobreak -} - -% @centerchap -- centered and unnumbered. -\let\centerparametersmaybe = \relax -\def\centerparameters{% - \advance\rightskip by 3\rightskip - \leftskip = \rightskip - \parfillskip = 0pt -} - - -% I don't think this chapter style is supported any more, so I'm not -% updating it with the new noderef stuff. We'll see. --karl, 11aug03. -% -\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} -% -\def\unnchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\ptexraggedright - \rmisbold #1\hfill}}\bigskip \par\nobreak -} -\def\chfopen #1#2{\chapoddpage {\chapfonts -\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% -\par\penalty 5000 % -} -\def\centerchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt - \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak -} -\def\CHAPFopen{% - \global\let\chapmacro=\chfopen - \global\let\centerchapmacro=\centerchfopen} - - -% Section titles. These macros combine the section number parts and -% call the generic \sectionheading to do the printing. -% -\newskip\secheadingskip -\def\secheadingbreak{\dobreak \secheadingskip{-1000}} - -% Subsection titles. -\newskip\subsecheadingskip -\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} - -% Subsubsection titles. -\def\subsubsecheadingskip{\subsecheadingskip} -\def\subsubsecheadingbreak{\subsecheadingbreak} - - -% Print any size, any type, section title. -% -% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is -% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the -% section number. -% -\def\seckeyword{sec} -% -\def\sectionheading#1#2#3#4{% - {% - % Switch to the right set of fonts. - \csname #2fonts\endcsname \rmisbold - % - \def\sectionlevel{#2}% - \def\temptype{#3}% - % - % Insert first mark before the heading break (see notes for \domark). - \let\prevsectiondefs=\lastsectiondefs - \ifx\temptype\Ynothingkeyword - \ifx\sectionlevel\seckeyword - \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% - \gdef\thissection{\thissectionname}}% - \fi - \else\ifx\temptype\Yomitfromtockeyword - % Don't redefine \thissection. - \else\ifx\temptype\Yappendixkeyword - \ifx\sectionlevel\seckeyword - \toks0={#1}% - \xdef\lastsectiondefs{% - \gdef\noexpand\thissectionname{\the\toks0}% - \gdef\noexpand\thissectionnum{#4}% - % \noexpand\putwordSection avoids expanding indigestible - % commands in some of the translations. - \gdef\noexpand\thissection{\noexpand\putwordSection{} - \noexpand\thissectionnum: - \noexpand\thissectionname}% - }% - \fi - \else - \ifx\sectionlevel\seckeyword - \toks0={#1}% - \xdef\lastsectiondefs{% - \gdef\noexpand\thissectionname{\the\toks0}% - \gdef\noexpand\thissectionnum{#4}% - % \noexpand\putwordSection avoids expanding indigestible - % commands in some of the translations. - \gdef\noexpand\thissection{\noexpand\putwordSection{} - \noexpand\thissectionnum: - \noexpand\thissectionname}% - }% - \fi - \fi\fi\fi - % - % Go into vertical mode. Usually we'll already be there, but we - % don't want the following whatsit to end up in a preceding paragraph - % if the document didn't happen to have a blank line. - \par - % - % Output the mark. Pass it through \safewhatsit, to take care of - % the preceding space. - \safewhatsit\domark - % - % Insert space above the heading. - \csname #2headingbreak\endcsname - % - % Now the second mark, after the heading break. No break points - % between here and the heading. - \let\prevsectiondefs=\lastsectiondefs - \domark - % - % Only insert the space after the number if we have a section number. - \ifx\temptype\Ynothingkeyword - \setbox0 = \hbox{}% - \def\toctype{unn}% - \gdef\lastsection{#1}% - \else\ifx\temptype\Yomitfromtockeyword - % for @headings -- no section number, don't include in toc, - % and don't redefine \lastsection. - \setbox0 = \hbox{}% - \def\toctype{omit}% - \let\sectionlevel=\empty - \else\ifx\temptype\Yappendixkeyword - \setbox0 = \hbox{#4\enspace}% - \def\toctype{app}% - \gdef\lastsection{#1}% - \else - \setbox0 = \hbox{#4\enspace}% - \def\toctype{num}% - \gdef\lastsection{#1}% - \fi\fi\fi - % - % Write the toc entry (before \donoderef). See comments in \chapmacro. - \writetocentry{\toctype\sectionlevel}{#1}{#4}% - % - % Write the node reference (= pdf destination for pdftex). - % Again, see comments in \chapmacro. - \donoderef{#3}% - % - % Interline glue will be inserted when the vbox is completed. - % That glue will be a valid breakpoint for the page, since it'll be - % preceded by a whatsit (usually from the \donoderef, or from the - % \writetocentry if there was no node). We don't want to allow that - % break, since then the whatsits could end up on page n while the - % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. - \nobreak - % - % Output the actual section heading. - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright - \hangindent=\wd0 % zero if no section number - \unhbox0 #1}% - }% - % Add extra space after the heading -- half of whatever came above it. - % Don't allow stretch, though. - \kern .5 \csname #2headingskip\endcsname - % - % Do not let the kern be a potential breakpoint, as it would be if it - % was followed by glue. - \nobreak - % - % We'll almost certainly start a paragraph next, so don't let that - % glue accumulate. (Not a breakpoint because it's preceded by a - % discardable item.) - \vskip-\parskip - % - % This is purely so the last item on the list is a known \penalty > - % 10000. This is so \startdefun can avoid allowing breakpoints after - % section headings. Otherwise, it would insert a valid breakpoint between: - % - % @section sec-whatever - % @deffn def-whatever - \penalty 10001 -} - - -\message{toc,} -% Table of contents. -\newwrite\tocfile - -% Write an entry to the toc file, opening it if necessary. -% Called from @chapter, etc. -% -% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} -% We append the current node name (if any) and page number as additional -% arguments for the \{chap,sec,...}entry macros which will eventually -% read this. The node name is used in the pdf outlines as the -% destination to jump to. -% -% We open the .toc file for writing here instead of at @setfilename (or -% any other fixed time) so that @contents can be anywhere in the document. -% But if #1 is `omit', then we don't do anything. This is used for the -% table of contents chapter openings themselves. -% -\newif\iftocfileopened -\def\omitkeyword{omit}% -% -\def\writetocentry#1#2#3{% - \edef\writetoctype{#1}% - \ifx\writetoctype\omitkeyword \else - \iftocfileopened\else - \immediate\openout\tocfile = \jobname.toc - \global\tocfileopenedtrue - \fi - % - \iflinks - {\atdummies - \edef\temp{% - \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% - \temp - }% - \fi - \fi - % - % Tell \shipout to create a pdf destination on each page, if we're - % writing pdf. These are used in the table of contents. We can't - % just write one on every page because the title pages are numbered - % 1 and 2 (the page numbers aren't printed), and so are the first - % two pages of the document. Thus, we'd have two destinations named - % `1', and two named `2'. - \ifpdf \global\pdfmakepagedesttrue \fi -} - - -% These characters do not print properly in the Computer Modern roman -% fonts, so we must take special care. This is more or less redundant -% with the Texinfo input format setup at the end of this file. -% -\def\activecatcodes{% - \catcode`\"=\active - \catcode`\$=\active - \catcode`\<=\active - \catcode`\>=\active - \catcode`\\=\active - \catcode`\^=\active - \catcode`\_=\active - \catcode`\|=\active - \catcode`\~=\active -} - - -% Read the toc file, which is essentially Texinfo input. -\def\readtocfile{% - \setupdatafile - \activecatcodes - \input \tocreadfilename -} - -\newskip\contentsrightmargin \contentsrightmargin=1in -\newcount\savepageno -\newcount\lastnegativepageno \lastnegativepageno = -1 - -% Prepare to read what we've written to \tocfile. -% -\def\startcontents#1{% - % If @setchapternewpage on, and @headings double, the contents should - % start on an odd page, unlike chapters. Thus, we maintain - % \contentsalignmacro in parallel with \pagealignmacro. - % From: Torbjorn Granlund - \contentsalignmacro - \immediate\closeout\tocfile - % - % Don't need to put `Contents' or `Short Contents' in the headline. - % It is abundantly clear what they are. - \chapmacro{#1}{Yomitfromtoc}{}% - % - \savepageno = \pageno - \begingroup % Set up to handle contents files properly. - \raggedbottom % Worry more about breakpoints than the bottom. - \advance\hsize by -\contentsrightmargin % Don't use the full line length. - % - % Roman numerals for page numbers. - \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi -} - -% redefined for the two-volume lispref. We always output on -% \jobname.toc even if this is redefined. -% -\def\tocreadfilename{\jobname.toc} - -% Normal (long) toc. -% -\def\contents{% - \startcontents{\putwordTOC}% - \openin 1 \tocreadfilename\space - \ifeof 1 \else - \readtocfile - \fi - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \ifeof 1 \else - \pdfmakeoutlines - \fi - \closein 1 - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} - -% And just the chapters. -\def\summarycontents{% - \startcontents{\putwordShortTOC}% - % - \let\numchapentry = \shortchapentry - \let\appentry = \shortchapentry - \let\unnchapentry = \shortunnchapentry - % We want a true roman here for the page numbers. - \secfonts - \let\rm=\shortcontrm \let\bf=\shortcontbf - \let\sl=\shortcontsl \let\tt=\shortconttt - \rm - \hyphenpenalty = 10000 - \advance\baselineskip by 1pt % Open it up a little. - \def\numsecentry##1##2##3##4{} - \let\appsecentry = \numsecentry - \let\unnsecentry = \numsecentry - \let\numsubsecentry = \numsecentry - \let\appsubsecentry = \numsecentry - \let\unnsubsecentry = \numsecentry - \let\numsubsubsecentry = \numsecentry - \let\appsubsubsecentry = \numsecentry - \let\unnsubsubsecentry = \numsecentry - \openin 1 \tocreadfilename\space - \ifeof 1 \else - \readtocfile - \fi - \closein 1 - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} -\let\shortcontents = \summarycontents - -% Typeset the label for a chapter or appendix for the short contents. -% The arg is, e.g., `A' for an appendix, or `3' for a chapter. -% -\def\shortchaplabel#1{% - % This space should be enough, since a single number is .5em, and the - % widest letter (M) is 1em, at least in the Computer Modern fonts. - % But use \hss just in case. - % (This space doesn't include the extra space that gets added after - % the label; that gets put in by \shortchapentry above.) - % - % We'd like to right-justify chapter numbers, but that looks strange - % with appendix letters. And right-justifying numbers and - % left-justifying letters looks strange when there is less than 10 - % chapters. Have to read the whole toc once to know how many chapters - % there are before deciding ... - \hbox to 1em{#1\hss}% -} - -% These macros generate individual entries in the table of contents. -% The first argument is the chapter or section name. -% The last argument is the page number. -% The arguments in between are the chapter number, section number, ... - -% Chapters, in the main contents. -\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} -% -% Chapters, in the short toc. -% See comments in \dochapentry re vbox and related settings. -\def\shortchapentry#1#2#3#4{% - \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% -} - -% Appendices, in the main contents. -% Need the word Appendix, and a fixed-size box. -% -\def\appendixbox#1{% - % We use M since it's probably the widest letter. - \setbox0 = \hbox{\putwordAppendix{} M}% - \hbox to \wd0{\putwordAppendix{} #1\hss}} -% -\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} - -% Unnumbered chapters. -\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} -\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} - -% Sections. -\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} -\let\appsecentry=\numsecentry -\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} - -% Subsections. -\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} -\let\appsubsecentry=\numsubsecentry -\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} - -% And subsubsections. -\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} -\let\appsubsubsecentry=\numsubsubsecentry -\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} - -% This parameter controls the indentation of the various levels. -% Same as \defaultparindent. -\newdimen\tocindent \tocindent = 15pt - -% Now for the actual typesetting. In all these, #1 is the text and #2 is the -% page number. -% -% If the toc has to be broken over pages, we want it to be at chapters -% if at all possible; hence the \penalty. -\def\dochapentry#1#2{% - \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip - \begingroup - \chapentryfonts - \tocentry{#1}{\dopageno\bgroup#2\egroup}% - \endgroup - \nobreak\vskip .25\baselineskip plus.1\baselineskip -} - -\def\dosecentry#1#2{\begingroup - \secentryfonts \leftskip=\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsecentry#1#2{\begingroup - \subsecentryfonts \leftskip=2\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsubsecentry#1#2{\begingroup - \subsubsecentryfonts \leftskip=3\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -% We use the same \entry macro as for the index entries. -\let\tocentry = \entry - -% Space between chapter (or whatever) number and the title. -\def\labelspace{\hskip1em \relax} - -\def\dopageno#1{{\rm #1}} -\def\doshortpageno#1{{\rm #1}} - -\def\chapentryfonts{\secfonts \rm} -\def\secentryfonts{\textfonts} -\def\subsecentryfonts{\textfonts} -\def\subsubsecentryfonts{\textfonts} - - -\message{environments,} -% @foo ... @end foo. - -% @tex ... @end tex escapes into raw Tex temporarily. -% One exception: @ is still an escape character, so that @end tex works. -% But \@ or @@ will get a plain tex @ character. - -\envdef\tex{% - \setupmarkupstyle{tex}% - \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 - \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 - \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie - \catcode `\%=14 - \catcode `\+=\other - \catcode `\"=\other - \catcode `\|=\other - \catcode `\<=\other - \catcode `\>=\other - \catcode`\`=\other - \catcode`\'=\other - \escapechar=`\\ - % - \let\b=\ptexb - \let\bullet=\ptexbullet - \let\c=\ptexc - \let\,=\ptexcomma - \let\.=\ptexdot - \let\dots=\ptexdots - \let\equiv=\ptexequiv - \let\!=\ptexexclam - \let\i=\ptexi - \let\indent=\ptexindent - \let\noindent=\ptexnoindent - \let\{=\ptexlbrace - \let\+=\tabalign - \let\}=\ptexrbrace - \let\/=\ptexslash - \let\*=\ptexstar - \let\t=\ptext - \expandafter \let\csname top\endcsname=\ptextop % outer - \let\frenchspacing=\plainfrenchspacing - % - \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% - \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% - \def\@{@}% -} -% There is no need to define \Etex. - -% Define @lisp ... @end lisp. -% @lisp environment forms a group so it can rebind things, -% including the definition of @end lisp (which normally is erroneous). - -% Amount to narrow the margins by for @lisp. -\newskip\lispnarrowing \lispnarrowing=0.4in - -% This is the definition that ^^M gets inside @lisp, @example, and other -% such environments. \null is better than a space, since it doesn't -% have any width. -\def\lisppar{\null\endgraf} - -% This space is always present above and below environments. -\newskip\envskipamount \envskipamount = 0pt - -% Make spacing and below environment symmetrical. We use \parskip here -% to help in doing that, since in @example-like environments \parskip -% is reset to zero; thus the \afterenvbreak inserts no space -- but the -% start of the next paragraph will insert \parskip. -% -\def\aboveenvbreak{{% - % =10000 instead of <10000 because of a special case in \itemzzz and - % \sectionheading, q.v. - \ifnum \lastpenalty=10000 \else - \advance\envskipamount by \parskip - \endgraf - \ifdim\lastskip<\envskipamount - \removelastskip - % it's not a good place to break if the last penalty was \nobreak - % or better ... - \ifnum\lastpenalty<10000 \penalty-50 \fi - \vskip\envskipamount - \fi - \fi -}} - -\let\afterenvbreak = \aboveenvbreak - -% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will -% also clear it, so that its embedded environments do the narrowing again. -\let\nonarrowing=\relax - -% @cartouche ... @end cartouche: draw rectangle w/rounded corners around -% environment contents. -\font\circle=lcircle10 -\newdimen\circthick -\newdimen\cartouter\newdimen\cartinner -\newskip\normbskip\newskip\normpskip\newskip\normlskip -\circthick=\fontdimen8\circle -% -\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth -\def\ctr{{\hskip 6pt\circle\char'010}} -\def\cbl{{\circle\char'012\hskip -6pt}} -\def\cbr{{\hskip 6pt\circle\char'011}} -\def\carttop{\hbox to \cartouter{\hskip\lskip - \ctl\leaders\hrule height\circthick\hfil\ctr - \hskip\rskip}} -\def\cartbot{\hbox to \cartouter{\hskip\lskip - \cbl\leaders\hrule height\circthick\hfil\cbr - \hskip\rskip}} -% -\newskip\lskip\newskip\rskip - -\envdef\cartouche{% - \ifhmode\par\fi % can't be in the midst of a paragraph. - \startsavinginserts - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt % we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18.4pt % allow for 3pt kerns on either - % side, and for 6pt waste from - % each corner char, and rule thickness - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing = t% - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \kern3pt - \hsize=\cartinner - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip - \comment % For explanation, see the end of \def\group. -} -\def\Ecartouche{% - \ifhmode\par\fi - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup - \checkinserts -} - - -% This macro is called at the beginning of all the @example variants, -% inside a group. -\newdimen\nonfillparindent -\def\nonfillstart{% - \aboveenvbreak - \hfuzz = 12pt % Don't be fussy - \sepspaces % Make spaces be word-separators rather than space tokens. - \let\par = \lisppar % don't ignore blank lines - \obeylines % each line of input is a line of output - \parskip = 0pt - % Turn off paragraph indentation but redefine \indent to emulate - % the normal \indent. - \nonfillparindent=\parindent - \parindent = 0pt - \let\indent\nonfillindent - % - \emergencystretch = 0pt % don't try to avoid overfull boxes - \ifx\nonarrowing\relax - \advance \leftskip by \lispnarrowing - \exdentamount=\lispnarrowing - \else - \let\nonarrowing = \relax - \fi - \let\exdent=\nofillexdent -} - -\begingroup -\obeyspaces -% We want to swallow spaces (but not other tokens) after the fake -% @indent in our nonfill-environments, where spaces are normally -% active and set to @tie, resulting in them not being ignored after -% @indent. -\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% -\gdef\nonfillindentcheck{% -\ifx\temp % -\expandafter\nonfillindentgobble% -\else% -\leavevmode\nonfillindentbox% -\fi% -}% -\endgroup -\def\nonfillindentgobble#1{\nonfillindent} -\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} - -% If you want all examples etc. small: @set dispenvsize small. -% If you want even small examples the full size: @set dispenvsize nosmall. -% This affects the following displayed environments: -% @example, @display, @format, @lisp -% -\def\smallword{small} -\def\nosmallword{nosmall} -\let\SETdispenvsize\relax -\def\setnormaldispenv{% - \ifx\SETdispenvsize\smallword - % end paragraph for sake of leading, in case document has no blank - % line. This is redundant with what happens in \aboveenvbreak, but - % we need to do it before changing the fonts, and it's inconvenient - % to change the fonts afterward. - \ifnum \lastpenalty=10000 \else \endgraf \fi - \smallexamplefonts \rm - \fi -} -\def\setsmalldispenv{% - \ifx\SETdispenvsize\nosmallword - \else - \ifnum \lastpenalty=10000 \else \endgraf \fi - \smallexamplefonts \rm - \fi -} - -% We often define two environments, @foo and @smallfoo. -% Let's do it by one command: -\def\makedispenv #1#2{ - \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} - \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} - \expandafter\let\csname E#1\endcsname \afterenvbreak - \expandafter\let\csname Esmall#1\endcsname \afterenvbreak -} - -% Define two synonyms: -\def\maketwodispenvs #1#2#3{ - \makedispenv{#1}{#3} - \makedispenv{#2}{#3} -} - -% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. -% -% @smallexample and @smalllisp: use smaller fonts. -% Originally contributed by Pavel@xerox. -% -\maketwodispenvs {lisp}{example}{% - \nonfillstart - \tt\setupmarkupstyle{example}% - \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. - \gobble % eat return -} -% @display/@smalldisplay: same as @lisp except keep current font. -% -\makedispenv {display}{% - \nonfillstart - \gobble -} - -% @format/@smallformat: same as @display except don't narrow margins. -% -\makedispenv{format}{% - \let\nonarrowing = t% - \nonfillstart - \gobble -} - -% @flushleft: same as @format, but doesn't obey \SETdispenvsize. -\envdef\flushleft{% - \let\nonarrowing = t% - \nonfillstart - \gobble -} -\let\Eflushleft = \afterenvbreak - -% @flushright. -% -\envdef\flushright{% - \let\nonarrowing = t% - \nonfillstart - \advance\leftskip by 0pt plus 1fill - \gobble -} -\let\Eflushright = \afterenvbreak - - -% @raggedright does more-or-less normal line breaking but no right -% justification. From plain.tex. -\envdef\raggedright{% - \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax -} -\let\Eraggedright\par - -\envdef\raggedleft{% - \parindent=0pt \leftskip0pt plus2em - \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt - \hbadness=10000 % Last line will usually be underfull, so turn off - % badness reporting. -} -\let\Eraggedleft\par - -\envdef\raggedcenter{% - \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em - \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt - \hbadness=10000 % Last line will usually be underfull, so turn off - % badness reporting. -} -\let\Eraggedcenter\par - - -% @quotation does normal linebreaking (hence we can't use \nonfillstart) -% and narrows the margins. We keep \parskip nonzero in general, since -% we're doing normal filling. So, when using \aboveenvbreak and -% \afterenvbreak, temporarily make \parskip 0. -% -\def\quotationstart{% - {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip - \parindent=0pt - % - % @cartouche defines \nonarrowing to inhibit narrowing at next level down. - \ifx\nonarrowing\relax - \advance\leftskip by \lispnarrowing - \advance\rightskip by \lispnarrowing - \exdentamount = \lispnarrowing - \else - \let\nonarrowing = \relax - \fi - \parsearg\quotationlabel -} - -\envdef\quotation{% - \setnormaldispenv - \quotationstart -} - -\envdef\smallquotation{% - \setsmalldispenv - \quotationstart -} -\let\Esmallquotation = \Equotation - -% We have retained a nonzero parskip for the environment, since we're -% doing normal filling. -% -\def\Equotation{% - \par - \ifx\quotationauthor\undefined\else - % indent a bit. - \leftline{\kern 2\leftskip \sl ---\quotationauthor}% - \fi - {\parskip=0pt \afterenvbreak}% -} - -% If we're given an argument, typeset it in bold with a colon after. -\def\quotationlabel#1{% - \def\temp{#1}% - \ifx\temp\empty \else - {\bf #1: }% - \fi -} - - -% LaTeX-like @verbatim...@end verbatim and @verb{...} -% If we want to allow any as delimiter, -% we need the curly braces so that makeinfo sees the @verb command, eg: -% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org -% -% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. -% -% [Knuth] p.344; only we need to do the other characters Texinfo sets -% active too. Otherwise, they get lost as the first character on a -% verbatim line. -\def\dospecials{% - \do\ \do\\\do\{\do\}\do\$\do\&% - \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% - \do\<\do\>\do\|\do\@\do+\do\"% - % Don't do the quotes -- if we do, @set txicodequoteundirected and - % @set txicodequotebacktick will not have effect on @verb and - % @verbatim, and ?` and !` ligatures won't get disabled. - %\do\`\do\'% -} -% -% [Knuth] p. 380 -\def\uncatcodespecials{% - \def\do##1{\catcode`##1=\other}\dospecials} -% -% Setup for the @verb command. -% -% Eight spaces for a tab -\begingroup - \catcode`\^^I=\active - \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} -\endgroup -% -\def\setupverb{% - \tt % easiest (and conventionally used) font for verbatim - \def\par{\leavevmode\endgraf}% - \setupmarkupstyle{verb}% - \tabeightspaces - % Respect line breaks, - % print special symbols as themselves, and - % make each space count - % must do in this order: - \obeylines \uncatcodespecials \sepspaces -} - -% Setup for the @verbatim environment -% -% Real tab expansion -\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount -% -\def\starttabbox{\setbox0=\hbox\bgroup} -% -\begingroup - \catcode`\^^I=\active - \gdef\tabexpand{% - \catcode`\^^I=\active - \def^^I{\leavevmode\egroup - \dimen0=\wd0 % the width so far, or since the previous tab - \divide\dimen0 by\tabw - \multiply\dimen0 by\tabw % compute previous multiple of \tabw - \advance\dimen0 by\tabw % advance to next multiple of \tabw - \wd0=\dimen0 \box0 \starttabbox - }% - } -\endgroup - -% start the verbatim environment. -\def\setupverbatim{% - \let\nonarrowing = t% - \nonfillstart - % Easiest (and conventionally used) font for verbatim - \tt - \def\par{\leavevmode\egroup\box0\endgraf}% - \tabexpand - \setupmarkupstyle{verbatim}% - % Respect line breaks, - % print special symbols as themselves, and - % make each space count - % must do in this order: - \obeylines \uncatcodespecials \sepspaces - \everypar{\starttabbox}% -} - -% Do the @verb magic: verbatim text is quoted by unique -% delimiter characters. Before first delimiter expect a -% right brace, after last delimiter expect closing brace: -% -% \def\doverb'{'#1'}'{#1} -% -% [Knuth] p. 382; only eat outer {} -\begingroup - \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other - \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] -\endgroup -% -\def\verb{\begingroup\setupverb\doverb} -% -% -% Do the @verbatim magic: define the macro \doverbatim so that -% the (first) argument ends when '@end verbatim' is reached, ie: -% -% \def\doverbatim#1@end verbatim{#1} -% -% For Texinfo it's a lot easier than for LaTeX, -% because texinfo's \verbatim doesn't stop at '\end{verbatim}': -% we need not redefine '\', '{' and '}'. -% -% Inspired by LaTeX's verbatim command set [latex.ltx] -% -\begingroup - \catcode`\ =\active - \obeylines % - % ignore everything up to the first ^^M, that's the newline at the end - % of the @verbatim input line itself. Otherwise we get an extra blank - % line in the output. - \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% - % We really want {...\end verbatim} in the body of the macro, but - % without the active space; thus we have to use \xdef and \gobble. -\endgroup -% -\envdef\verbatim{% - \setupverbatim\doverbatim -} -\let\Everbatim = \afterenvbreak - - -% @verbatiminclude FILE - insert text of file in verbatim environment. -% -\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} -% -\def\doverbatiminclude#1{% - {% - \makevalueexpandable - \setupverbatim - \indexnofonts % Allow `@@' and other weird things in file names. - \input #1 - \afterenvbreak - }% -} - -% @copying ... @end copying. -% Save the text away for @insertcopying later. -% -% We save the uninterpreted tokens, rather than creating a box. -% Saving the text in a box would be much easier, but then all the -% typesetting commands (@smallbook, font changes, etc.) have to be done -% beforehand -- and a) we want @copying to be done first in the source -% file; b) letting users define the frontmatter in as flexible order as -% possible is very desirable. -% -\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} -\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} -% -\def\insertcopying{% - \begingroup - \parindent = 0pt % paragraph indentation looks wrong on title page - \scanexp\copyingtext - \endgroup -} - - -\message{defuns,} -% @defun etc. - -\newskip\defbodyindent \defbodyindent=.4in -\newskip\defargsindent \defargsindent=50pt -\newskip\deflastargmargin \deflastargmargin=18pt -\newcount\defunpenalty - -% Start the processing of @deffn: -\def\startdefun{% - \ifnum\lastpenalty<10000 - \medbreak - \defunpenalty=10003 % Will keep this @deffn together with the - % following @def command, see below. - \else - % If there are two @def commands in a row, we'll have a \nobreak, - % which is there to keep the function description together with its - % header. But if there's nothing but headers, we need to allow a - % break somewhere. Check specifically for penalty 10002, inserted - % by \printdefunline, instead of 10000, since the sectioning - % commands also insert a nobreak penalty, and we don't want to allow - % a break between a section heading and a defun. - % - % As a minor refinement, we avoid "club" headers by signalling - % with penalty of 10003 after the very first @deffn in the - % sequence (see above), and penalty of 10002 after any following - % @def command. - \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi - % - % Similarly, after a section heading, do not allow a break. - % But do insert the glue. - \medskip % preceded by discardable penalty, so not a breakpoint - \fi - % - \parindent=0in - \advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent -} - -\def\dodefunx#1{% - % First, check whether we are in the right environment: - \checkenv#1% - % - % As above, allow line break if we have multiple x headers in a row. - % It's not a great place, though. - \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi - % - % And now, it's time to reuse the body of the original defun: - \expandafter\gobbledefun#1% -} -\def\gobbledefun#1\startdefun{} - -% \printdefunline \deffnheader{text} -% -\def\printdefunline#1#2{% - \begingroup - % call \deffnheader: - #1#2 \endheader - % common ending: - \interlinepenalty = 10000 - \advance\rightskip by 0pt plus 1fil - \endgraf - \nobreak\vskip -\parskip - \penalty\defunpenalty % signal to \startdefun and \dodefunx - % Some of the @defun-type tags do not enable magic parentheses, - % rendering the following check redundant. But we don't optimize. - \checkparencounts - \endgroup -} - -\def\Edefun{\endgraf\medbreak} - -% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; -% the only thing remaining is to define \deffnheader. -% -\def\makedefun#1{% - \expandafter\let\csname E#1\endcsname = \Edefun - \edef\temp{\noexpand\domakedefun - \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% - \temp -} - -% \domakedefun \deffn \deffnx \deffnheader -% -% Define \deffn and \deffnx, without parameters. -% \deffnheader has to be defined explicitly. -% -\def\domakedefun#1#2#3{% - \envdef#1{% - \startdefun - \parseargusing\activeparens{\printdefunline#3}% - }% - \def#2{\dodefunx#1}% - \def#3% -} - -%%% Untyped functions: - -% @deffn category name args -\makedefun{deffn}{\deffngeneral{}} - -% @deffn category class name args -\makedefun{defop}#1 {\defopon{#1\ \putwordon}} - -% \defopon {category on}class name args -\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } - -% \deffngeneral {subind}category name args -% -\def\deffngeneral#1#2 #3 #4\endheader{% - % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. - \dosubind{fn}{\code{#3}}{#1}% - \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% -} - -%%% Typed functions: - -% @deftypefn category type name args -\makedefun{deftypefn}{\deftypefngeneral{}} - -% @deftypeop category class type name args -\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} - -% \deftypeopon {category on}class type name args -\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } - -% \deftypefngeneral {subind}category type name args -% -\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% - \dosubind{fn}{\code{#4}}{#1}% - \defname{#2}{#3}{#4}\defunargs{#5\unskip}% -} - -%%% Typed variables: - -% @deftypevr category type var args -\makedefun{deftypevr}{\deftypecvgeneral{}} - -% @deftypecv category class type var args -\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} - -% \deftypecvof {category of}class type var args -\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } - -% \deftypecvgeneral {subind}category type var args -% -\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% - \dosubind{vr}{\code{#4}}{#1}% - \defname{#2}{#3}{#4}\defunargs{#5\unskip}% -} - -%%% Untyped variables: - -% @defvr category var args -\makedefun{defvr}#1 {\deftypevrheader{#1} {} } - -% @defcv category class var args -\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} - -% \defcvof {category of}class var args -\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } - -%%% Type: -% @deftp category name args -\makedefun{deftp}#1 #2 #3\endheader{% - \doind{tp}{\code{#2}}% - \defname{#1}{}{#2}\defunargs{#3\unskip}% -} - -% Remaining @defun-like shortcuts: -\makedefun{defun}{\deffnheader{\putwordDeffunc} } -\makedefun{defmac}{\deffnheader{\putwordDefmac} } -\makedefun{defspec}{\deffnheader{\putwordDefspec} } -\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } -\makedefun{defvar}{\defvrheader{\putwordDefvar} } -\makedefun{defopt}{\defvrheader{\putwordDefopt} } -\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } -\makedefun{defmethod}{\defopon\putwordMethodon} -\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} -\makedefun{defivar}{\defcvof\putwordInstanceVariableof} -\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} - -% \defname, which formats the name of the @def (not the args). -% #1 is the category, such as "Function". -% #2 is the return type, if any. -% #3 is the function name. -% -% We are followed by (but not passed) the arguments, if any. -% -\def\defname#1#2#3{% - % Get the values of \leftskip and \rightskip as they were outside the @def... - \advance\leftskip by -\defbodyindent - % - % How we'll format the type name. Putting it in brackets helps - % distinguish it from the body text that may end up on the next line - % just below it. - \def\temp{#1}% - \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} - % - % Figure out line sizes for the paragraph shape. - % The first line needs space for \box0; but if \rightskip is nonzero, - % we need only space for the part of \box0 which exceeds it: - \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip - % The continuations: - \dimen2=\hsize \advance\dimen2 by -\defargsindent - % (plain.tex says that \dimen1 should be used only as global.) - \parshape 2 0in \dimen0 \defargsindent \dimen2 - % - % Put the type name to the right margin. - \noindent - \hbox to 0pt{% - \hfil\box0 \kern-\hsize - % \hsize has to be shortened this way: - \kern\leftskip - % Intentionally do not respect \rightskip, since we need the space. - }% - % - % Allow all lines to be underfull without complaint: - \tolerance=10000 \hbadness=10000 - \exdentamount=\defbodyindent - {% - % defun fonts. We use typewriter by default (used to be bold) because: - % . we're printing identifiers, they should be in tt in principle. - % . in languages with many accents, such as Czech or French, it's - % common to leave accents off identifiers. The result looks ok in - % tt, but exceedingly strange in rm. - % . we don't want -- and --- to be treated as ligatures. - % . this still does not fix the ?` and !` ligatures, but so far no - % one has made identifiers using them :). - \df \tt - \def\temp{#2}% return value type - \ifx\temp\empty\else \tclose{\temp} \fi - #3% output function name - }% - {\rm\enskip}% hskip 0.5 em of \tenrm - % - \boldbrax - % arguments will be output next, if any. -} - -% Print arguments in slanted roman (not ttsl), inconsistently with using -% tt for the name. This is because literal text is sometimes needed in -% the argument list (groff manual), and ttsl and tt are not very -% distinguishable. Prevent hyphenation at `-' chars. -% -\def\defunargs#1{% - % use sl by default (not ttsl), - % tt for the names. - \df \sl \hyphenchar\font=0 - % - % On the other hand, if an argument has two dashes (for instance), we - % want a way to get ttsl. Let's try @var for that. - \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% - #1% - \sl\hyphenchar\font=45 -} - -% We want ()&[] to print specially on the defun line. -% -\def\activeparens{% - \catcode`\(=\active \catcode`\)=\active - \catcode`\[=\active \catcode`\]=\active - \catcode`\&=\active -} - -% Make control sequences which act like normal parenthesis chars. -\let\lparen = ( \let\rparen = ) - -% Be sure that we always have a definition for `(', etc. For example, -% if the fn name has parens in it, \boldbrax will not be in effect yet, -% so TeX would otherwise complain about undefined control sequence. -{ - \activeparens - \global\let(=\lparen \global\let)=\rparen - \global\let[=\lbrack \global\let]=\rbrack - \global\let& = \& - - \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} - \gdef\magicamp{\let&=\amprm} -} - -\newcount\parencount - -% If we encounter &foo, then turn on ()-hacking afterwards -\newif\ifampseen -\def\amprm#1 {\ampseentrue{\bf\ }} - -\def\parenfont{% - \ifampseen - % At the first level, print parens in roman, - % otherwise use the default font. - \ifnum \parencount=1 \rm \fi - \else - % The \sf parens (in \boldbrax) actually are a little bolder than - % the contained text. This is especially needed for [ and ] . - \sf - \fi -} -\def\infirstlevel#1{% - \ifampseen - \ifnum\parencount=1 - #1% - \fi - \fi -} -\def\bfafterword#1 {#1 \bf} - -\def\opnr{% - \global\advance\parencount by 1 - {\parenfont(}% - \infirstlevel \bfafterword -} -\def\clnr{% - {\parenfont)}% - \infirstlevel \sl - \global\advance\parencount by -1 -} - -\newcount\brackcount -\def\lbrb{% - \global\advance\brackcount by 1 - {\bf[}% -} -\def\rbrb{% - {\bf]}% - \global\advance\brackcount by -1 -} - -\def\checkparencounts{% - \ifnum\parencount=0 \else \badparencount \fi - \ifnum\brackcount=0 \else \badbrackcount \fi -} -% these should not use \errmessage; the glibc manual, at least, actually -% has such constructs (when documenting function pointers). -\def\badparencount{% - \message{Warning: unbalanced parentheses in @def...}% - \global\parencount=0 -} -\def\badbrackcount{% - \message{Warning: unbalanced square brackets in @def...}% - \global\brackcount=0 -} - - -\message{macros,} -% @macro. - -% To do this right we need a feature of e-TeX, \scantokens, -% which we arrange to emulate with a temporary file in ordinary TeX. -\ifx\eTeXversion\undefined - \newwrite\macscribble - \def\scantokens#1{% - \toks0={#1}% - \immediate\openout\macscribble=\jobname.tmp - \immediate\write\macscribble{\the\toks0}% - \immediate\closeout\macscribble - \input \jobname.tmp - } -\fi - -\def\scanmacro#1{% - \begingroup - \newlinechar`\^^M - \let\xeatspaces\eatspaces - % Undo catcode changes of \startcontents and \doprintindex - % When called from @insertcopying or (short)caption, we need active - % backslash to get it printed correctly. Previously, we had - % \catcode`\\=\other instead. We'll see whether a problem appears - % with macro expansion. --kasal, 19aug04 - \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ - % ... and \example - \spaceisspace - % - % Append \endinput to make sure that TeX does not see the ending newline. - % I've verified that it is necessary both for e-TeX and for ordinary TeX - % --kasal, 29nov03 - \scantokens{#1\endinput}% - \endgroup -} - -\def\scanexp#1{% - \edef\temp{\noexpand\scanmacro{#1}}% - \temp -} - -\newcount\paramno % Count of parameters -\newtoks\macname % Macro name -\newif\ifrecursive % Is it recursive? - -% List of all defined macros in the form -% \definedummyword\macro1\definedummyword\macro2... -% Currently is also contains all @aliases; the list can be split -% if there is a need. -\def\macrolist{} - -% Add the macro to \macrolist -\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} -\def\addtomacrolistxxx#1{% - \toks0 = \expandafter{\macrolist\definedummyword#1}% - \xdef\macrolist{\the\toks0}% -} - -% Utility routines. -% This does \let #1 = #2, with \csnames; that is, -% \let \csname#1\endcsname = \csname#2\endcsname -% (except of course we have to play expansion games). -% -\def\cslet#1#2{% - \expandafter\let - \csname#1\expandafter\endcsname - \csname#2\endcsname -} - -% Trim leading and trailing spaces off a string. -% Concepts from aro-bend problem 15 (see CTAN). -{\catcode`\@=11 -\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} -\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} -\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} -\def\unbrace#1{#1} -\unbrace{\gdef\trim@@@ #1 } #2@{#1} -} - -% Trim a single trailing ^^M off a string. -{\catcode`\^^M=\other \catcode`\Q=3% -\gdef\eatcr #1{\eatcra #1Q^^MQ}% -\gdef\eatcra#1^^MQ{\eatcrb#1Q}% -\gdef\eatcrb#1Q#2Q{#1}% -} - -% Macro bodies are absorbed as an argument in a context where -% all characters are catcode 10, 11 or 12, except \ which is active -% (as in normal texinfo). It is necessary to change the definition of \. - -% Non-ASCII encodings make 8-bit characters active, so un-activate -% them to avoid their expansion. Must do this non-globally, to -% confine the change to the current group. - -% It's necessary to have hard CRs when the macro is executed. This is -% done by making ^^M (\endlinechar) catcode 12 when reading the macro -% body, and then making it the \newlinechar in \scanmacro. - -\def\scanctxt{% - \catcode`\"=\other - \catcode`\+=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\@=\other - \catcode`\^=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\~=\other - \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi -} - -\def\scanargctxt{% - \scanctxt - \catcode`\\=\other - \catcode`\^^M=\other -} - -\def\macrobodyctxt{% - \scanctxt - \catcode`\{=\other - \catcode`\}=\other - \catcode`\^^M=\other - \usembodybackslash -} - -\def\macroargctxt{% - \scanctxt - \catcode`\\=\other -} - -% \mbodybackslash is the definition of \ in @macro bodies. -% It maps \foo\ => \csname macarg.foo\endcsname => #N -% where N is the macro parameter number. -% We define \csname macarg.\endcsname to be \realbackslash, so -% \\ in macro replacement text gets you a backslash. - -{\catcode`@=0 @catcode`@\=@active - @gdef@usembodybackslash{@let\=@mbodybackslash} - @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} -} -\expandafter\def\csname macarg.\endcsname{\realbackslash} - -\def\macro{\recursivefalse\parsearg\macroxxx} -\def\rmacro{\recursivetrue\parsearg\macroxxx} - -\def\macroxxx#1{% - \getargs{#1}% now \macname is the macname and \argl the arglist - \ifx\argl\empty % no arguments - \paramno=0% - \else - \expandafter\parsemargdef \argl;% - \fi - \if1\csname ismacro.\the\macname\endcsname - \message{Warning: redefining \the\macname}% - \else - \expandafter\ifx\csname \the\macname\endcsname \relax - \else \errmessage{Macro name \the\macname\space already defined}\fi - \global\cslet{macsave.\the\macname}{\the\macname}% - \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% - \addtomacrolist{\the\macname}% - \fi - \begingroup \macrobodyctxt - \ifrecursive \expandafter\parsermacbody - \else \expandafter\parsemacbody - \fi} - -\parseargdef\unmacro{% - \if1\csname ismacro.#1\endcsname - \global\cslet{#1}{macsave.#1}% - \global\expandafter\let \csname ismacro.#1\endcsname=0% - % Remove the macro name from \macrolist: - \begingroup - \expandafter\let\csname#1\endcsname \relax - \let\definedummyword\unmacrodo - \xdef\macrolist{\macrolist}% - \endgroup - \else - \errmessage{Macro #1 not defined}% - \fi -} - -% Called by \do from \dounmacro on each macro. The idea is to omit any -% macro definitions that have been changed to \relax. -% -\def\unmacrodo#1{% - \ifx #1\relax - % remove this - \else - \noexpand\definedummyword \noexpand#1% - \fi -} - -% This makes use of the obscure feature that if the last token of a -% is #, then the preceding argument is delimited by -% an opening brace, and that opening brace is not consumed. -\def\getargs#1{\getargsxxx#1{}} -\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} -\def\getmacname #1 #2\relax{\macname={#1}} -\def\getmacargs#1{\def\argl{#1}} - -% Parse the optional {params} list. Set up \paramno and \paramlist -% so \defmacro knows what to do. Define \macarg.blah for each blah -% in the params list, to be ##N where N is the position in that list. -% That gets used by \mbodybackslash (above). - -% We need to get `macro parameter char #' into several definitions. -% The technique used is stolen from LaTeX: let \hash be something -% unexpandable, insert that wherever you need a #, and then redefine -% it to # just before using the token list produced. -% -% The same technique is used to protect \eatspaces till just before -% the macro is used. - -\def\parsemargdef#1;{\paramno=0\def\paramlist{}% - \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} -\def\parsemargdefxxx#1,{% - \if#1;\let\next=\relax - \else \let\next=\parsemargdefxxx - \advance\paramno by 1% - \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname - {\xeatspaces{\hash\the\paramno}}% - \edef\paramlist{\paramlist\hash\the\paramno,}% - \fi\next} - -% These two commands read recursive and nonrecursive macro bodies. -% (They're different since rec and nonrec macros end differently.) - -\long\def\parsemacbody#1@end macro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% -\long\def\parsermacbody#1@end rmacro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% - -% This defines the macro itself. There are six cases: recursive and -% nonrecursive macros of zero, one, and many arguments. -% Much magic with \expandafter here. -% \xdef is used so that macro definitions will survive the file -% they're defined in; @include reads the file inside a group. -\def\defmacro{% - \let\hash=##% convert placeholders to macro parameter chars - \ifrecursive - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\scanmacro{\temp}}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup\noexpand\scanmacro{\temp}}% - \else % many - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{\egroup\noexpand\scanmacro{\temp}}% - \fi - \else - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \else % many - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \expandafter\noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \fi - \fi} - -\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} - -% \braceorline decides whether the next nonwhitespace character is a -% {. If so it reads up to the closing }, if not, it reads the whole -% line. Whatever was read is then fed to the next control sequence -% as an argument (by \parsebrace or \parsearg) -\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} -\def\braceorlinexxx{% - \ifx\nchar\bgroup\else - \expandafter\parsearg - \fi \macnamexxx} - - -% @alias. -% We need some trickery to remove the optional spaces around the equal -% sign. Just make them active and then expand them all to nothing. -\def\alias{\parseargusing\obeyspaces\aliasxxx} -\def\aliasxxx #1{\aliasyyy#1\relax} -\def\aliasyyy #1=#2\relax{% - {% - \expandafter\let\obeyedspace=\empty - \addtomacrolist{#1}% - \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% - }% - \next -} - - -\message{cross references,} - -\newwrite\auxfile -\newif\ifhavexrefs % True if xref values are known. -\newif\ifwarnedxrefs % True if we warned once that they aren't known. - -% @inforef is relatively simple. -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} - -% @node's only job in TeX is to define \lastnode, which is used in -% cross-references. The @node line might or might not have commas, and -% might or might not have spaces before the first comma, like: -% @node foo , bar , ... -% We don't want such trailing spaces in the node name. -% -\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} -% -% also remove a trailing comma, in case of something like this: -% @node Help-Cross, , , Cross-refs -\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} -\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} - -\let\nwnode=\node -\let\lastnode=\empty - -% Write a cross-reference definition for the current node. #1 is the -% type (Ynumbered, Yappendix, Ynothing). -% -\def\donoderef#1{% - \ifx\lastnode\empty\else - \setref{\lastnode}{#1}% - \global\let\lastnode=\empty - \fi -} - -% @anchor{NAME} -- define xref target at arbitrary point. -% -\newcount\savesfregister -% -\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} -\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} -\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} - -% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an -% anchor), which consists of three parts: -% 1) NAME-title - the current sectioning name taken from \lastsection, -% or the anchor name. -% 2) NAME-snt - section number and type, passed as the SNT arg, or -% empty for anchors. -% 3) NAME-pg - the page number. -% -% This is called from \donoderef, \anchor, and \dofloat. In the case of -% floats, there is an additional part, which is not written here: -% 4) NAME-lof - the text as it should appear in a @listoffloats. -% -\def\setref#1#2{% - \pdfmkdest{#1}% - \iflinks - {% - \atdummies % preserve commands, but don't expand them - \edef\writexrdef##1##2{% - \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef - ##1}{##2}}% these are parameters of \writexrdef - }% - \toks0 = \expandafter{\lastsection}% - \immediate \writexrdef{title}{\the\toks0 }% - \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. - \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout - }% - \fi -} - -% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is -% the node name, #2 the name of the Info cross-reference, #3 the printed -% node name, #4 the name of the Info file, #5 the name of the printed -% manual. All but the node name can be omitted. -% -\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} -\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} -\def\ref#1{\xrefX[#1,,,,,,,]} -\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup - \unsepspaces - \def\printedmanual{\ignorespaces #5}% - \def\printedrefname{\ignorespaces #3}% - \setbox1=\hbox{\printedmanual\unskip}% - \setbox0=\hbox{\printedrefname\unskip}% - \ifdim \wd0 = 0pt - % No printed node name was explicitly given. - \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax - % Use the node name inside the square brackets. - \def\printedrefname{\ignorespaces #1}% - \else - % Use the actual chapter/section title appear inside - % the square brackets. Use the real section title if we have it. - \ifdim \wd1 > 0pt - % It is in another manual, so we don't have it. - \def\printedrefname{\ignorespaces #1}% - \else - \ifhavexrefs - % We know the real title if we have the xref values. - \def\printedrefname{\refx{#1-title}{}}% - \else - % Otherwise just copy the Info node name. - \def\printedrefname{\ignorespaces #1}% - \fi% - \fi - \fi - \fi - % - % Make link in pdf output. - \ifpdf - {\indexnofonts - \turnoffactive - % This expands tokens, so do it after making catcode changes, so _ - % etc. don't get their TeX definitions. - \getfilename{#4}% - % - % See comments at \activebackslashdouble. - {\activebackslashdouble \xdef\pdfxrefdest{#1}% - \backslashparens\pdfxrefdest}% - % - \leavevmode - \startlink attr{/Border [0 0 0]}% - \ifnum\filenamelength>0 - goto file{\the\filename.pdf} name{\pdfxrefdest}% - \else - goto name{\pdfmkpgn{\pdfxrefdest}}% - \fi - }% - \setcolor{\linkcolor}% - \fi - % - % Float references are printed completely differently: "Figure 1.2" - % instead of "[somenode], p.3". We distinguish them by the - % LABEL-title being set to a magic string. - {% - % Have to otherify everything special to allow the \csname to - % include an _ in the xref name, etc. - \indexnofonts - \turnoffactive - \expandafter\global\expandafter\let\expandafter\Xthisreftitle - \csname XR#1-title\endcsname - }% - \iffloat\Xthisreftitle - % If the user specified the print name (third arg) to the ref, - % print it instead of our usual "Figure 1.2". - \ifdim\wd0 = 0pt - \refx{#1-snt}{}% - \else - \printedrefname - \fi - % - % if the user also gave the printed manual name (fifth arg), append - % "in MANUALNAME". - \ifdim \wd1 > 0pt - \space \putwordin{} \cite{\printedmanual}% - \fi - \else - % node/anchor (non-float) references. - % - % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not - % insert empty discretionaries after hyphens, which means that it will - % not find a line break at a hyphen in a node names. Since some manuals - % are best written with fairly long node names, containing hyphens, this - % is a loss. Therefore, we give the text of the node name again, so it - % is as if TeX is seeing it for the first time. - \ifdim \wd1 > 0pt - \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% - \else - % _ (for example) has to be the character _ for the purposes of the - % control sequence corresponding to the node, but it has to expand - % into the usual \leavevmode...\vrule stuff for purposes of - % printing. So we \turnoffactive for the \refx-snt, back on for the - % printing, back off for the \refx-pg. - {\turnoffactive - % Only output a following space if the -snt ref is nonempty; for - % @unnumbered and @anchor, it won't be. - \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% - \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi - }% - % output the `[mynode]' via a macro so it can be overridden. - \xrefprintnodename\printedrefname - % - % But we always want a comma and a space: - ,\space - % - % output the `page 3'. - \turnoffactive \putwordpage\tie\refx{#1-pg}{}% - \fi - \fi - \endlink -\endgroup} - -% This macro is called from \xrefX for the `[nodename]' part of xref -% output. It's a separate macro only so it can be changed more easily, -% since square brackets don't work well in some documents. Particularly -% one that Bob is working on :). -% -\def\xrefprintnodename#1{[#1]} - -% Things referred to by \setref. -% -\def\Ynothing{} -\def\Yomitfromtoc{} -\def\Ynumbered{% - \ifnum\secno=0 - \putwordChapter@tie \the\chapno - \else \ifnum\subsecno=0 - \putwordSection@tie \the\chapno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno - \else - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} -\def\Yappendix{% - \ifnum\secno=0 - \putwordAppendix@tie @char\the\appendixno{}% - \else \ifnum\subsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno - \else - \putwordSection@tie - @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} - -% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. -% If its value is nonempty, SUFFIX is output afterward. -% -\def\refx#1#2{% - {% - \indexnofonts - \otherbackslash - \expandafter\global\expandafter\let\expandafter\thisrefX - \csname XR#1\endcsname - }% - \ifx\thisrefX\relax - % If not defined, say something at least. - \angleleft un\-de\-fined\angleright - \iflinks - \ifhavexrefs - \message{\linenumber Undefined cross reference `#1'.}% - \else - \ifwarnedxrefs\else - \global\warnedxrefstrue - \message{Cross reference values unknown; you must run TeX again.}% - \fi - \fi - \fi - \else - % It's defined, so just use it. - \thisrefX - \fi - #2% Output the suffix in any case. -} - -% This is the macro invoked by entries in the aux file. Usually it's -% just a \def (we prepend XR to the control sequence name to avoid -% collisions). But if this is a float type, we have more work to do. -% -\def\xrdef#1#2{% - {% The node name might contain 8-bit characters, which in our current - % implementation are changed to commands like @'e. Don't let these - % mess up the control sequence name. - \indexnofonts - \turnoffactive - \xdef\safexrefname{#1}% - }% - % - \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref - % - % Was that xref control sequence that we just defined for a float? - \expandafter\iffloat\csname XR\safexrefname\endcsname - % it was a float, and we have the (safe) float type in \iffloattype. - \expandafter\let\expandafter\floatlist - \csname floatlist\iffloattype\endcsname - % - % Is this the first time we've seen this float type? - \expandafter\ifx\floatlist\relax - \toks0 = {\do}% yes, so just \do - \else - % had it before, so preserve previous elements in list. - \toks0 = \expandafter{\floatlist\do}% - \fi - % - % Remember this xref in the control sequence \floatlistFLOATTYPE, - % for later use in \listoffloats. - \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 - {\safexrefname}}% - \fi -} - -% Read the last existing aux file, if any. No error if none exists. -% -\def\tryauxfile{% - \openin 1 \jobname.aux - \ifeof 1 \else - \readdatafile{aux}% - \global\havexrefstrue - \fi - \closein 1 -} - -\def\setupdatafile{% - \catcode`\^^@=\other - \catcode`\^^A=\other - \catcode`\^^B=\other - \catcode`\^^C=\other - \catcode`\^^D=\other - \catcode`\^^E=\other - \catcode`\^^F=\other - \catcode`\^^G=\other - \catcode`\^^H=\other - \catcode`\^^K=\other - \catcode`\^^L=\other - \catcode`\^^N=\other - \catcode`\^^P=\other - \catcode`\^^Q=\other - \catcode`\^^R=\other - \catcode`\^^S=\other - \catcode`\^^T=\other - \catcode`\^^U=\other - \catcode`\^^V=\other - \catcode`\^^W=\other - \catcode`\^^X=\other - \catcode`\^^Z=\other - \catcode`\^^[=\other - \catcode`\^^\=\other - \catcode`\^^]=\other - \catcode`\^^^=\other - \catcode`\^^_=\other - % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. - % in xref tags, i.e., node names. But since ^^e4 notation isn't - % supported in the main text, it doesn't seem desirable. Furthermore, - % that is not enough: for node names that actually contain a ^ - % character, we would end up writing a line like this: 'xrdef {'hat - % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first - % argument, and \hat is not an expandable control sequence. It could - % all be worked out, but why? Either we support ^^ or we don't. - % - % The other change necessary for this was to define \auxhat: - % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter - % and then to call \auxhat in \setq. - % - \catcode`\^=\other - % - % Special characters. Should be turned off anyway, but... - \catcode`\~=\other - \catcode`\[=\other - \catcode`\]=\other - \catcode`\"=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\$=\other - \catcode`\#=\other - \catcode`\&=\other - \catcode`\%=\other - \catcode`+=\other % avoid \+ for paranoia even though we've turned it off - % - % This is to support \ in node names and titles, since the \ - % characters end up in a \csname. It's easier than - % leaving it active and making its active definition an actual \ - % character. What I don't understand is why it works in the *value* - % of the xrdef. Seems like it should be a catcode12 \, and that - % should not typeset properly. But it works, so I'm moving on for - % now. --karl, 15jan04. - \catcode`\\=\other - % - % Make the characters 128-255 be printing characters. - {% - \count1=128 - \def\loop{% - \catcode\count1=\other - \advance\count1 by 1 - \ifnum \count1<256 \loop \fi - }% - }% - % - % @ is our escape character in .aux files, and we need braces. - \catcode`\{=1 - \catcode`\}=2 - \catcode`\@=0 -} - -\def\readdatafile#1{% -\begingroup - \setupdatafile - \input\jobname.#1 -\endgroup} - - -\message{insertions,} -% including footnotes. - -\newcount \footnoteno - -% The trailing space in the following definition for supereject is -% vital for proper filling; pages come out unaligned when you do a -% pagealignmacro call if that space before the closing brace is -% removed. (Generally, numeric constants should always be followed by a -% space to prevent strange expansion errors.) -\def\supereject{\par\penalty -20000\footnoteno =0 } - -% @footnotestyle is meaningful for info output only. -\let\footnotestyle=\comment - -{\catcode `\@=11 -% -% Auto-number footnotes. Otherwise like plain. -\gdef\footnote{% - \let\indent=\ptexindent - \let\noindent=\ptexnoindent - \global\advance\footnoteno by \@ne - \edef\thisfootno{$^{\the\footnoteno}$}% - % - % In case the footnote comes at the end of a sentence, preserve the - % extra spacing after we do the footnote number. - \let\@sf\empty - \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi - % - % Remove inadvertent blank space before typesetting the footnote number. - \unskip - \thisfootno\@sf - \dofootnote -}% - -% Don't bother with the trickery in plain.tex to not require the -% footnote text as a parameter. Our footnotes don't need to be so general. -% -% Oh yes, they do; otherwise, @ifset (and anything else that uses -% \parseargline) fails inside footnotes because the tokens are fixed when -% the footnote is read. --karl, 16nov96. -% -\gdef\dofootnote{% - \insert\footins\bgroup - % We want to typeset this text as a normal paragraph, even if the - % footnote reference occurs in (for example) a display environment. - % So reset some parameters. - \hsize=\pagewidth - \interlinepenalty\interfootnotelinepenalty - \splittopskip\ht\strutbox % top baseline for broken footnotes - \splitmaxdepth\dp\strutbox - \floatingpenalty\@MM - \leftskip\z@skip - \rightskip\z@skip - \spaceskip\z@skip - \xspaceskip\z@skip - \parindent\defaultparindent - % - \smallfonts \rm - % - % Because we use hanging indentation in footnotes, a @noindent appears - % to exdent this text, so make it be a no-op. makeinfo does not use - % hanging indentation so @noindent can still be needed within footnote - % text after an @example or the like (not that this is good style). - \let\noindent = \relax - % - % Hang the footnote text off the number. Use \everypar in case the - % footnote extends for more than one paragraph. - \everypar = {\hang}% - \textindent{\thisfootno}% - % - % Don't crash into the line above the footnote text. Since this - % expands into a box, it must come within the paragraph, lest it - % provide a place where TeX can split the footnote. - \footstrut - \futurelet\next\fo@t -} -}%end \catcode `\@=11 - -% In case a @footnote appears in a vbox, save the footnote text and create -% the real \insert just after the vbox finished. Otherwise, the insertion -% would be lost. -% Similarly, if a @footnote appears inside an alignment, save the footnote -% text to a box and make the \insert when a row of the table is finished. -% And the same can be done for other insert classes. --kasal, 16nov03. - -% Replace the \insert primitive by a cheating macro. -% Deeper inside, just make sure that the saved insertions are not spilled -% out prematurely. -% -\def\startsavinginserts{% - \ifx \insert\ptexinsert - \let\insert\saveinsert - \else - \let\checkinserts\relax - \fi -} - -% This \insert replacement works for both \insert\footins{foo} and -% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. -% -\def\saveinsert#1{% - \edef\next{\noexpand\savetobox \makeSAVEname#1}% - \afterassignment\next - % swallow the left brace - \let\temp = -} -\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} -\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} - -\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} - -\def\placesaveins#1{% - \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname - {\box#1}% -} - -% eat @SAVE -- beware, all of them have catcode \other: -{ - \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) - \gdef\gobblesave @SAVE{} -} - -% initialization: -\def\newsaveins #1{% - \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% - \next -} -\def\newsaveinsX #1{% - \csname newbox\endcsname #1% - \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts - \checksaveins #1}% -} - -% initialize: -\let\checkinserts\empty -\newsaveins\footins -\newsaveins\margin - - -% @image. We use the macros from epsf.tex to support this. -% If epsf.tex is not installed and @image is used, we complain. -% -% Check for and read epsf.tex up front. If we read it only at @image -% time, we might be inside a group, and then its definitions would get -% undone and the next image would fail. -\openin 1 = epsf.tex -\ifeof 1 \else - % Do not bother showing banner with epsf.tex v2.7k (available in - % doc/epsf.tex and on ctan). - \def\epsfannounce{\toks0 = }% - \input epsf.tex -\fi -\closein 1 -% -% We will only complain once about lack of epsf.tex. -\newif\ifwarnednoepsf -\newhelp\noepsfhelp{epsf.tex must be installed for images to - work. It is also included in the Texinfo distribution, or you can get - it from ftp://tug.org/tex/epsf.tex.} -% -\def\image#1{% - \ifx\epsfbox\undefined - \ifwarnednoepsf \else - \errhelp = \noepsfhelp - \errmessage{epsf.tex not found, images will be ignored}% - \global\warnednoepsftrue - \fi - \else - \imagexxx #1,,,,,\finish - \fi -} -% -% Arguments to @image: -% #1 is (mandatory) image filename; we tack on .eps extension. -% #2 is (optional) width, #3 is (optional) height. -% #4 is (ignored optional) html alt text. -% #5 is (ignored optional) extension. -% #6 is just the usual extra ignored arg for parsing this stuff. -\newif\ifimagevmode -\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup - \catcode`\^^M = 5 % in case we're inside an example - \normalturnoffactive % allow _ et al. in names - % If the image is by itself, center it. - \ifvmode - \imagevmodetrue - \nobreak\medskip - % Usually we'll have text after the image which will insert - % \parskip glue, so insert it here too to equalize the space - % above and below. - \nobreak\vskip\parskip - \nobreak - \fi - % - % Leave vertical mode so that indentation from an enclosing - % environment such as @quotation is respected. On the other hand, if - % it's at the top level, we don't want the normal paragraph indentation. - \noindent - % - % Output the image. - \ifpdf - \dopdfimage{#1}{#2}{#3}% - \else - % \epsfbox itself resets \epsf?size at each figure. - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi - \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi - \epsfbox{#1.eps}% - \fi - % - \ifimagevmode \medskip \fi % space after the standalone image -\endgroup} - - -% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, -% etc. We don't actually implement floating yet, we always include the -% float "here". But it seemed the best name for the future. -% -\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} - -% There may be a space before second and/or third parameter; delete it. -\def\eatcommaspace#1, {#1,} - -% #1 is the optional FLOATTYPE, the text label for this float, typically -% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, -% this float will not be numbered and cannot be referred to. -% -% #2 is the optional xref label. Also must be present for the float to -% be referable. -% -% #3 is the optional positioning argument; for now, it is ignored. It -% will somehow specify the positions allowed to float to (here, top, bottom). -% -% We keep a separate counter for each FLOATTYPE, which we reset at each -% chapter-level command. -\let\resetallfloatnos=\empty -% -\def\dofloat#1,#2,#3,#4\finish{% - \let\thiscaption=\empty - \let\thisshortcaption=\empty - % - % don't lose footnotes inside @float. - % - % BEWARE: when the floats start float, we have to issue warning whenever an - % insert appears inside a float which could possibly float. --kasal, 26may04 - % - \startsavinginserts - % - % We can't be used inside a paragraph. - \par - % - \vtop\bgroup - \def\floattype{#1}% - \def\floatlabel{#2}% - \def\floatloc{#3}% we do nothing with this yet. - % - \ifx\floattype\empty - \let\safefloattype=\empty - \else - {% - % the floattype might have accents or other special characters, - % but we need to use it in a control sequence name. - \indexnofonts - \turnoffactive - \xdef\safefloattype{\floattype}% - }% - \fi - % - % If label is given but no type, we handle that as the empty type. - \ifx\floatlabel\empty \else - % We want each FLOATTYPE to be numbered separately (Figure 1, - % Table 1, Figure 2, ...). (And if no label, no number.) - % - \expandafter\getfloatno\csname\safefloattype floatno\endcsname - \global\advance\floatno by 1 - % - {% - % This magic value for \lastsection is output by \setref as the - % XREFLABEL-title value. \xrefX uses it to distinguish float - % labels (which have a completely different output format) from - % node and anchor labels. And \xrdef uses it to construct the - % lists of floats. - % - \edef\lastsection{\floatmagic=\safefloattype}% - \setref{\floatlabel}{Yfloat}% - }% - \fi - % - % start with \parskip glue, I guess. - \vskip\parskip - % - % Don't suppress indentation if a float happens to start a section. - \restorefirstparagraphindent -} - -% we have these possibilities: -% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap -% @float Foo,lbl & no caption: Foo 1.1 -% @float Foo & @caption{Cap}: Foo: Cap -% @float Foo & no caption: Foo -% @float ,lbl & Caption{Cap}: 1.1: Cap -% @float ,lbl & no caption: 1.1 -% @float & @caption{Cap}: Cap -% @float & no caption: -% -\def\Efloat{% - \let\floatident = \empty - % - % In all cases, if we have a float type, it comes first. - \ifx\floattype\empty \else \def\floatident{\floattype}\fi - % - % If we have an xref label, the number comes next. - \ifx\floatlabel\empty \else - \ifx\floattype\empty \else % if also had float type, need tie first. - \appendtomacro\floatident{\tie}% - \fi - % the number. - \appendtomacro\floatident{\chaplevelprefix\the\floatno}% - \fi - % - % Start the printed caption with what we've constructed in - % \floatident, but keep it separate; we need \floatident again. - \let\captionline = \floatident - % - \ifx\thiscaption\empty \else - \ifx\floatident\empty \else - \appendtomacro\captionline{: }% had ident, so need a colon between - \fi - % - % caption text. - \appendtomacro\captionline{\scanexp\thiscaption}% - \fi - % - % If we have anything to print, print it, with space before. - % Eventually this needs to become an \insert. - \ifx\captionline\empty \else - \vskip.5\parskip - \captionline - % - % Space below caption. - \vskip\parskip - \fi - % - % If have an xref label, write the list of floats info. Do this - % after the caption, to avoid chance of it being a breakpoint. - \ifx\floatlabel\empty \else - % Write the text that goes in the lof to the aux file as - % \floatlabel-lof. Besides \floatident, we include the short - % caption if specified, else the full caption if specified, else nothing. - {% - \atdummies - % - % since we read the caption text in the macro world, where ^^M - % is turned into a normal character, we have to scan it back, so - % we don't write the literal three characters "^^M" into the aux file. - \scanexp{% - \xdef\noexpand\gtemp{% - \ifx\thisshortcaption\empty - \thiscaption - \else - \thisshortcaption - \fi - }% - }% - \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident - \ifx\gtemp\empty \else : \gtemp \fi}}% - }% - \fi - \egroup % end of \vtop - % - % place the captured inserts - % - % BEWARE: when the floats start floating, we have to issue warning - % whenever an insert appears inside a float which could possibly - % float. --kasal, 26may04 - % - \checkinserts -} - -% Append the tokens #2 to the definition of macro #1, not expanding either. -% -\def\appendtomacro#1#2{% - \expandafter\def\expandafter#1\expandafter{#1#2}% -} - -% @caption, @shortcaption -% -\def\caption{\docaption\thiscaption} -\def\shortcaption{\docaption\thisshortcaption} -\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} -\def\defcaption#1#2{\egroup \def#1{#2}} - -% The parameter is the control sequence identifying the counter we are -% going to use. Create it if it doesn't exist and assign it to \floatno. -\def\getfloatno#1{% - \ifx#1\relax - % Haven't seen this figure type before. - \csname newcount\endcsname #1% - % - % Remember to reset this floatno at the next chap. - \expandafter\gdef\expandafter\resetallfloatnos - \expandafter{\resetallfloatnos #1=0 }% - \fi - \let\floatno#1% -} - -% \setref calls this to get the XREFLABEL-snt value. We want an @xref -% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we -% first read the @float command. -% -\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% - -% Magic string used for the XREFLABEL-title value, so \xrefX can -% distinguish floats from other xref types. -\def\floatmagic{!!float!!} - -% #1 is the control sequence we are passed; we expand into a conditional -% which is true if #1 represents a float ref. That is, the magic -% \lastsection value which we \setref above. -% -\def\iffloat#1{\expandafter\doiffloat#1==\finish} -% -% #1 is (maybe) the \floatmagic string. If so, #2 will be the -% (safe) float type for this float. We set \iffloattype to #2. -% -\def\doiffloat#1=#2=#3\finish{% - \def\temp{#1}% - \def\iffloattype{#2}% - \ifx\temp\floatmagic -} - -% @listoffloats FLOATTYPE - print a list of floats like a table of contents. -% -\parseargdef\listoffloats{% - \def\floattype{#1}% floattype - {% - % the floattype might have accents or other special characters, - % but we need to use it in a control sequence name. - \indexnofonts - \turnoffactive - \xdef\safefloattype{\floattype}% - }% - % - % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. - \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax - \ifhavexrefs - % if the user said @listoffloats foo but never @float foo. - \message{\linenumber No `\safefloattype' floats to list.}% - \fi - \else - \begingroup - \leftskip=\tocindent % indent these entries like a toc - \let\do=\listoffloatsdo - \csname floatlist\safefloattype\endcsname - \endgroup - \fi -} - -% This is called on each entry in a list of floats. We're passed the -% xref label, in the form LABEL-title, which is how we save it in the -% aux file. We strip off the -title and look up \XRLABEL-lof, which -% has the text we're supposed to typeset here. -% -% Figures without xref labels will not be included in the list (since -% they won't appear in the aux file). -% -\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} -\def\listoffloatsdoentry#1-title\finish{{% - % Can't fully expand XR#1-lof because it can contain anything. Just - % pass the control sequence. On the other hand, XR#1-pg is just the - % page number, and we want to fully expand that so we can get a link - % in pdf output. - \toksA = \expandafter{\csname XR#1-lof\endcsname}% - % - % use the same \entry macro we use to generate the TOC and index. - \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% - \writeentry -}} - - -\message{localization,} - -% For single-language documents, @documentlanguage is usually given very -% early, just after @documentencoding. Single argument is the language -% (de) or locale (de_DE) abbreviation. -% -{ - \catcode`\_ = \active - \globaldefs=1 -\parseargdef\documentlanguage{\begingroup - \let_=\normalunderscore % normal _ character for filenames - \tex % read txi-??.tex file in plain TeX. - % Read the file by the name they passed if it exists. - \openin 1 txi-#1.tex - \ifeof 1 - \documentlanguagetrywithoutunderscore{#1_\finish}% - \else - \globaldefs = 1 % everything in the txi-LL files needs to persist - \input txi-#1.tex - \fi - \closein 1 - \endgroup % end raw TeX -\endgroup} -% -% If they passed de_DE, and txi-de_DE.tex doesn't exist, -% try txi-de.tex. -% -\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% - \openin 1 txi-#1.tex - \ifeof 1 - \errhelp = \nolanghelp - \errmessage{Cannot read language file txi-#1.tex}% - \else - \globaldefs = 1 % everything in the txi-LL files needs to persist - \input txi-#1.tex - \fi - \closein 1 -} -}% end of special _ catcode -% -\newhelp\nolanghelp{The given language definition file cannot be found or -is empty. Maybe you need to install it? Putting it in the current -directory should work if nowhere else does.} - -% This macro is called from txi-??.tex files; the first argument is the -% \language name to set (without the "\lang@" prefix), the second and -% third args are \{left,right}hyphenmin. -% -% The language names to pass are determined when the format is built. -% See the etex.log file created at that time, e.g., -% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. -% -% With TeX Live 2008, etex now includes hyphenation patterns for all -% available languages. This means we can support hyphenation in -% Texinfo, at least to some extent. (This still doesn't solve the -% accented characters problem.) -% -\catcode`@=11 -\def\txisetlanguage#1#2#3{% - % do not set the language if the name is undefined in the current TeX. - \expandafter\ifx\csname lang@#1\endcsname \relax - \message{no patterns for #1}% - \else - \global\language = \csname lang@#1\endcsname - \fi - % but there is no harm in adjusting the hyphenmin values regardless. - \global\lefthyphenmin = #2\relax - \global\righthyphenmin = #3\relax -} - -% Helpers for encodings. -% Set the catcode of characters 128 through 255 to the specified number. -% -\def\setnonasciicharscatcode#1{% - \count255=128 - \loop\ifnum\count255<256 - \global\catcode\count255=#1\relax - \advance\count255 by 1 - \repeat -} - -\def\setnonasciicharscatcodenonglobal#1{% - \count255=128 - \loop\ifnum\count255<256 - \catcode\count255=#1\relax - \advance\count255 by 1 - \repeat -} - -% @documentencoding sets the definition of non-ASCII characters -% according to the specified encoding. -% -\parseargdef\documentencoding{% - % Encoding being declared for the document. - \def\declaredencoding{\csname #1.enc\endcsname}% - % - % Supported encodings: names converted to tokens in order to be able - % to compare them with \ifx. - \def\ascii{\csname US-ASCII.enc\endcsname}% - \def\latnine{\csname ISO-8859-15.enc\endcsname}% - \def\latone{\csname ISO-8859-1.enc\endcsname}% - \def\lattwo{\csname ISO-8859-2.enc\endcsname}% - \def\utfeight{\csname UTF-8.enc\endcsname}% - % - \ifx \declaredencoding \ascii - \asciichardefs - % - \else \ifx \declaredencoding \lattwo - \setnonasciicharscatcode\active - \lattwochardefs - % - \else \ifx \declaredencoding \latone - \setnonasciicharscatcode\active - \latonechardefs - % - \else \ifx \declaredencoding \latnine - \setnonasciicharscatcode\active - \latninechardefs - % - \else \ifx \declaredencoding \utfeight - \setnonasciicharscatcode\active - \utfeightchardefs - % - \else - \message{Unknown document encoding #1, ignoring.}% - % - \fi % utfeight - \fi % latnine - \fi % latone - \fi % lattwo - \fi % ascii -} - -% A message to be logged when using a character that isn't available -% the default font encoding (OT1). -% -\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} - -% Take account of \c (plain) vs. \, (Texinfo) difference. -\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} - -% First, make active non-ASCII characters in order for them to be -% correctly categorized when TeX reads the replacement text of -% macros containing the character definitions. -\setnonasciicharscatcode\active -% -% Latin1 (ISO-8859-1) character definitions. -\def\latonechardefs{% - \gdef^^a0{~} - \gdef^^a1{\exclamdown} - \gdef^^a2{\missingcharmsg{CENT SIGN}} - \gdef^^a3{{\pounds}} - \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} - \gdef^^a5{\missingcharmsg{YEN SIGN}} - \gdef^^a6{\missingcharmsg{BROKEN BAR}} - \gdef^^a7{\S} - \gdef^^a8{\"{}} - \gdef^^a9{\copyright} - \gdef^^aa{\ordf} - \gdef^^ab{\guillemetleft} - \gdef^^ac{$\lnot$} - \gdef^^ad{\-} - \gdef^^ae{\registeredsymbol} - \gdef^^af{\={}} - % - \gdef^^b0{\textdegree} - \gdef^^b1{$\pm$} - \gdef^^b2{$^2$} - \gdef^^b3{$^3$} - \gdef^^b4{\'{}} - \gdef^^b5{$\mu$} - \gdef^^b6{\P} - % - \gdef^^b7{$^.$} - \gdef^^b8{\cedilla\ } - \gdef^^b9{$^1$} - \gdef^^ba{\ordm} - % - \gdef^^bb{\guilletright} - \gdef^^bc{$1\over4$} - \gdef^^bd{$1\over2$} - \gdef^^be{$3\over4$} - \gdef^^bf{\questiondown} - % - \gdef^^c0{\`A} - \gdef^^c1{\'A} - \gdef^^c2{\^A} - \gdef^^c3{\~A} - \gdef^^c4{\"A} - \gdef^^c5{\ringaccent A} - \gdef^^c6{\AE} - \gdef^^c7{\cedilla C} - \gdef^^c8{\`E} - \gdef^^c9{\'E} - \gdef^^ca{\^E} - \gdef^^cb{\"E} - \gdef^^cc{\`I} - \gdef^^cd{\'I} - \gdef^^ce{\^I} - \gdef^^cf{\"I} - % - \gdef^^d0{\DH} - \gdef^^d1{\~N} - \gdef^^d2{\`O} - \gdef^^d3{\'O} - \gdef^^d4{\^O} - \gdef^^d5{\~O} - \gdef^^d6{\"O} - \gdef^^d7{$\times$} - \gdef^^d8{\O} - \gdef^^d9{\`U} - \gdef^^da{\'U} - \gdef^^db{\^U} - \gdef^^dc{\"U} - \gdef^^dd{\'Y} - \gdef^^de{\TH} - \gdef^^df{\ss} - % - \gdef^^e0{\`a} - \gdef^^e1{\'a} - \gdef^^e2{\^a} - \gdef^^e3{\~a} - \gdef^^e4{\"a} - \gdef^^e5{\ringaccent a} - \gdef^^e6{\ae} - \gdef^^e7{\cedilla c} - \gdef^^e8{\`e} - \gdef^^e9{\'e} - \gdef^^ea{\^e} - \gdef^^eb{\"e} - \gdef^^ec{\`{\dotless i}} - \gdef^^ed{\'{\dotless i}} - \gdef^^ee{\^{\dotless i}} - \gdef^^ef{\"{\dotless i}} - % - \gdef^^f0{\dh} - \gdef^^f1{\~n} - \gdef^^f2{\`o} - \gdef^^f3{\'o} - \gdef^^f4{\^o} - \gdef^^f5{\~o} - \gdef^^f6{\"o} - \gdef^^f7{$\div$} - \gdef^^f8{\o} - \gdef^^f9{\`u} - \gdef^^fa{\'u} - \gdef^^fb{\^u} - \gdef^^fc{\"u} - \gdef^^fd{\'y} - \gdef^^fe{\th} - \gdef^^ff{\"y} -} - -% Latin9 (ISO-8859-15) encoding character definitions. -\def\latninechardefs{% - % Encoding is almost identical to Latin1. - \latonechardefs - % - \gdef^^a4{\euro} - \gdef^^a6{\v S} - \gdef^^a8{\v s} - \gdef^^b4{\v Z} - \gdef^^b8{\v z} - \gdef^^bc{\OE} - \gdef^^bd{\oe} - \gdef^^be{\"Y} -} - -% Latin2 (ISO-8859-2) character definitions. -\def\lattwochardefs{% - \gdef^^a0{~} - \gdef^^a1{\ogonek{A}} - \gdef^^a2{\u{}} - \gdef^^a3{\L} - \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} - \gdef^^a5{\v L} - \gdef^^a6{\'S} - \gdef^^a7{\S} - \gdef^^a8{\"{}} - \gdef^^a9{\v S} - \gdef^^aa{\cedilla S} - \gdef^^ab{\v T} - \gdef^^ac{\'Z} - \gdef^^ad{\-} - \gdef^^ae{\v Z} - \gdef^^af{\dotaccent Z} - % - \gdef^^b0{\textdegree} - \gdef^^b1{\ogonek{a}} - \gdef^^b2{\ogonek{ }} - \gdef^^b3{\l} - \gdef^^b4{\'{}} - \gdef^^b5{\v l} - \gdef^^b6{\'s} - \gdef^^b7{\v{}} - \gdef^^b8{\cedilla\ } - \gdef^^b9{\v s} - \gdef^^ba{\cedilla s} - \gdef^^bb{\v t} - \gdef^^bc{\'z} - \gdef^^bd{\H{}} - \gdef^^be{\v z} - \gdef^^bf{\dotaccent z} - % - \gdef^^c0{\'R} - \gdef^^c1{\'A} - \gdef^^c2{\^A} - \gdef^^c3{\u A} - \gdef^^c4{\"A} - \gdef^^c5{\'L} - \gdef^^c6{\'C} - \gdef^^c7{\cedilla C} - \gdef^^c8{\v C} - \gdef^^c9{\'E} - \gdef^^ca{\ogonek{E}} - \gdef^^cb{\"E} - \gdef^^cc{\v E} - \gdef^^cd{\'I} - \gdef^^ce{\^I} - \gdef^^cf{\v D} - % - \gdef^^d0{\DH} - \gdef^^d1{\'N} - \gdef^^d2{\v N} - \gdef^^d3{\'O} - \gdef^^d4{\^O} - \gdef^^d5{\H O} - \gdef^^d6{\"O} - \gdef^^d7{$\times$} - \gdef^^d8{\v R} - \gdef^^d9{\ringaccent U} - \gdef^^da{\'U} - \gdef^^db{\H U} - \gdef^^dc{\"U} - \gdef^^dd{\'Y} - \gdef^^de{\cedilla T} - \gdef^^df{\ss} - % - \gdef^^e0{\'r} - \gdef^^e1{\'a} - \gdef^^e2{\^a} - \gdef^^e3{\u a} - \gdef^^e4{\"a} - \gdef^^e5{\'l} - \gdef^^e6{\'c} - \gdef^^e7{\cedilla c} - \gdef^^e8{\v c} - \gdef^^e9{\'e} - \gdef^^ea{\ogonek{e}} - \gdef^^eb{\"e} - \gdef^^ec{\v e} - \gdef^^ed{\'\i} - \gdef^^ee{\^\i} - \gdef^^ef{\v d} - % - \gdef^^f0{\dh} - \gdef^^f1{\'n} - \gdef^^f2{\v n} - \gdef^^f3{\'o} - \gdef^^f4{\^o} - \gdef^^f5{\H o} - \gdef^^f6{\"o} - \gdef^^f7{$\div$} - \gdef^^f8{\v r} - \gdef^^f9{\ringaccent u} - \gdef^^fa{\'u} - \gdef^^fb{\H u} - \gdef^^fc{\"u} - \gdef^^fd{\'y} - \gdef^^fe{\cedilla t} - \gdef^^ff{\dotaccent{}} -} - -% UTF-8 character definitions. -% -% This code to support UTF-8 is based on LaTeX's utf8.def, with some -% changes for Texinfo conventions. It is included here under the GPL by -% permission from Frank Mittelbach and the LaTeX team. -% -\newcount\countUTFx -\newcount\countUTFy -\newcount\countUTFz - -\gdef\UTFviiiTwoOctets#1#2{\expandafter - \UTFviiiDefined\csname u8:#1\string #2\endcsname} -% -\gdef\UTFviiiThreeOctets#1#2#3{\expandafter - \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} -% -\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter - \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} - -\gdef\UTFviiiDefined#1{% - \ifx #1\relax - \message{\linenumber Unicode char \string #1 not defined for Texinfo}% - \else - \expandafter #1% - \fi -} - -\begingroup - \catcode`\~13 - \catcode`\"12 - - \def\UTFviiiLoop{% - \global\catcode\countUTFx\active - \uccode`\~\countUTFx - \uppercase\expandafter{\UTFviiiTmp}% - \advance\countUTFx by 1 - \ifnum\countUTFx < \countUTFy - \expandafter\UTFviiiLoop - \fi} - - \countUTFx = "C2 - \countUTFy = "E0 - \def\UTFviiiTmp{% - \xdef~{\noexpand\UTFviiiTwoOctets\string~}} - \UTFviiiLoop - - \countUTFx = "E0 - \countUTFy = "F0 - \def\UTFviiiTmp{% - \xdef~{\noexpand\UTFviiiThreeOctets\string~}} - \UTFviiiLoop - - \countUTFx = "F0 - \countUTFy = "F4 - \def\UTFviiiTmp{% - \xdef~{\noexpand\UTFviiiFourOctets\string~}} - \UTFviiiLoop -\endgroup - -\begingroup - \catcode`\"=12 - \catcode`\<=12 - \catcode`\.=12 - \catcode`\,=12 - \catcode`\;=12 - \catcode`\!=12 - \catcode`\~=13 - - \gdef\DeclareUnicodeCharacter#1#2{% - \countUTFz = "#1\relax - \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% - \begingroup - \parseXMLCharref - \def\UTFviiiTwoOctets##1##2{% - \csname u8:##1\string ##2\endcsname}% - \def\UTFviiiThreeOctets##1##2##3{% - \csname u8:##1\string ##2\string ##3\endcsname}% - \def\UTFviiiFourOctets##1##2##3##4{% - \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% - \expandafter\expandafter\expandafter\expandafter - \expandafter\expandafter\expandafter - \gdef\UTFviiiTmp{#2}% - \endgroup} - - \gdef\parseXMLCharref{% - \ifnum\countUTFz < "A0\relax - \errhelp = \EMsimple - \errmessage{Cannot define Unicode char value < 00A0}% - \else\ifnum\countUTFz < "800\relax - \parseUTFviiiA,% - \parseUTFviiiB C\UTFviiiTwoOctets.,% - \else\ifnum\countUTFz < "10000\relax - \parseUTFviiiA;% - \parseUTFviiiA,% - \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% - \else - \parseUTFviiiA;% - \parseUTFviiiA,% - \parseUTFviiiA!% - \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% - \fi\fi\fi - } - - \gdef\parseUTFviiiA#1{% - \countUTFx = \countUTFz - \divide\countUTFz by 64 - \countUTFy = \countUTFz - \multiply\countUTFz by 64 - \advance\countUTFx by -\countUTFz - \advance\countUTFx by 128 - \uccode `#1\countUTFx - \countUTFz = \countUTFy} - - \gdef\parseUTFviiiB#1#2#3#4{% - \advance\countUTFz by "#10\relax - \uccode `#3\countUTFz - \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} -\endgroup - -\def\utfeightchardefs{% - \DeclareUnicodeCharacter{00A0}{\tie} - \DeclareUnicodeCharacter{00A1}{\exclamdown} - \DeclareUnicodeCharacter{00A3}{\pounds} - \DeclareUnicodeCharacter{00A8}{\"{ }} - \DeclareUnicodeCharacter{00A9}{\copyright} - \DeclareUnicodeCharacter{00AA}{\ordf} - \DeclareUnicodeCharacter{00AB}{\guillemetleft} - \DeclareUnicodeCharacter{00AD}{\-} - \DeclareUnicodeCharacter{00AE}{\registeredsymbol} - \DeclareUnicodeCharacter{00AF}{\={ }} - - \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} - \DeclareUnicodeCharacter{00B4}{\'{ }} - \DeclareUnicodeCharacter{00B8}{\cedilla{ }} - \DeclareUnicodeCharacter{00BA}{\ordm} - \DeclareUnicodeCharacter{00BB}{\guillemetright} - \DeclareUnicodeCharacter{00BF}{\questiondown} - - \DeclareUnicodeCharacter{00C0}{\`A} - \DeclareUnicodeCharacter{00C1}{\'A} - \DeclareUnicodeCharacter{00C2}{\^A} - \DeclareUnicodeCharacter{00C3}{\~A} - \DeclareUnicodeCharacter{00C4}{\"A} - \DeclareUnicodeCharacter{00C5}{\AA} - \DeclareUnicodeCharacter{00C6}{\AE} - \DeclareUnicodeCharacter{00C7}{\cedilla{C}} - \DeclareUnicodeCharacter{00C8}{\`E} - \DeclareUnicodeCharacter{00C9}{\'E} - \DeclareUnicodeCharacter{00CA}{\^E} - \DeclareUnicodeCharacter{00CB}{\"E} - \DeclareUnicodeCharacter{00CC}{\`I} - \DeclareUnicodeCharacter{00CD}{\'I} - \DeclareUnicodeCharacter{00CE}{\^I} - \DeclareUnicodeCharacter{00CF}{\"I} - - \DeclareUnicodeCharacter{00D0}{\DH} - \DeclareUnicodeCharacter{00D1}{\~N} - \DeclareUnicodeCharacter{00D2}{\`O} - \DeclareUnicodeCharacter{00D3}{\'O} - \DeclareUnicodeCharacter{00D4}{\^O} - \DeclareUnicodeCharacter{00D5}{\~O} - \DeclareUnicodeCharacter{00D6}{\"O} - \DeclareUnicodeCharacter{00D8}{\O} - \DeclareUnicodeCharacter{00D9}{\`U} - \DeclareUnicodeCharacter{00DA}{\'U} - \DeclareUnicodeCharacter{00DB}{\^U} - \DeclareUnicodeCharacter{00DC}{\"U} - \DeclareUnicodeCharacter{00DD}{\'Y} - \DeclareUnicodeCharacter{00DE}{\TH} - \DeclareUnicodeCharacter{00DF}{\ss} - - \DeclareUnicodeCharacter{00E0}{\`a} - \DeclareUnicodeCharacter{00E1}{\'a} - \DeclareUnicodeCharacter{00E2}{\^a} - \DeclareUnicodeCharacter{00E3}{\~a} - \DeclareUnicodeCharacter{00E4}{\"a} - \DeclareUnicodeCharacter{00E5}{\aa} - \DeclareUnicodeCharacter{00E6}{\ae} - \DeclareUnicodeCharacter{00E7}{\cedilla{c}} - \DeclareUnicodeCharacter{00E8}{\`e} - \DeclareUnicodeCharacter{00E9}{\'e} - \DeclareUnicodeCharacter{00EA}{\^e} - \DeclareUnicodeCharacter{00EB}{\"e} - \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} - \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} - \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} - \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} - - \DeclareUnicodeCharacter{00F0}{\dh} - \DeclareUnicodeCharacter{00F1}{\~n} - \DeclareUnicodeCharacter{00F2}{\`o} - \DeclareUnicodeCharacter{00F3}{\'o} - \DeclareUnicodeCharacter{00F4}{\^o} - \DeclareUnicodeCharacter{00F5}{\~o} - \DeclareUnicodeCharacter{00F6}{\"o} - \DeclareUnicodeCharacter{00F8}{\o} - \DeclareUnicodeCharacter{00F9}{\`u} - \DeclareUnicodeCharacter{00FA}{\'u} - \DeclareUnicodeCharacter{00FB}{\^u} - \DeclareUnicodeCharacter{00FC}{\"u} - \DeclareUnicodeCharacter{00FD}{\'y} - \DeclareUnicodeCharacter{00FE}{\th} - \DeclareUnicodeCharacter{00FF}{\"y} - - \DeclareUnicodeCharacter{0100}{\=A} - \DeclareUnicodeCharacter{0101}{\=a} - \DeclareUnicodeCharacter{0102}{\u{A}} - \DeclareUnicodeCharacter{0103}{\u{a}} - \DeclareUnicodeCharacter{0104}{\ogonek{A}} - \DeclareUnicodeCharacter{0105}{\ogonek{a}} - \DeclareUnicodeCharacter{0106}{\'C} - \DeclareUnicodeCharacter{0107}{\'c} - \DeclareUnicodeCharacter{0108}{\^C} - \DeclareUnicodeCharacter{0109}{\^c} - \DeclareUnicodeCharacter{0118}{\ogonek{E}} - \DeclareUnicodeCharacter{0119}{\ogonek{e}} - \DeclareUnicodeCharacter{010A}{\dotaccent{C}} - \DeclareUnicodeCharacter{010B}{\dotaccent{c}} - \DeclareUnicodeCharacter{010C}{\v{C}} - \DeclareUnicodeCharacter{010D}{\v{c}} - \DeclareUnicodeCharacter{010E}{\v{D}} - - \DeclareUnicodeCharacter{0112}{\=E} - \DeclareUnicodeCharacter{0113}{\=e} - \DeclareUnicodeCharacter{0114}{\u{E}} - \DeclareUnicodeCharacter{0115}{\u{e}} - \DeclareUnicodeCharacter{0116}{\dotaccent{E}} - \DeclareUnicodeCharacter{0117}{\dotaccent{e}} - \DeclareUnicodeCharacter{011A}{\v{E}} - \DeclareUnicodeCharacter{011B}{\v{e}} - \DeclareUnicodeCharacter{011C}{\^G} - \DeclareUnicodeCharacter{011D}{\^g} - \DeclareUnicodeCharacter{011E}{\u{G}} - \DeclareUnicodeCharacter{011F}{\u{g}} - - \DeclareUnicodeCharacter{0120}{\dotaccent{G}} - \DeclareUnicodeCharacter{0121}{\dotaccent{g}} - \DeclareUnicodeCharacter{0124}{\^H} - \DeclareUnicodeCharacter{0125}{\^h} - \DeclareUnicodeCharacter{0128}{\~I} - \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} - \DeclareUnicodeCharacter{012A}{\=I} - \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} - \DeclareUnicodeCharacter{012C}{\u{I}} - \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} - - \DeclareUnicodeCharacter{0130}{\dotaccent{I}} - \DeclareUnicodeCharacter{0131}{\dotless{i}} - \DeclareUnicodeCharacter{0132}{IJ} - \DeclareUnicodeCharacter{0133}{ij} - \DeclareUnicodeCharacter{0134}{\^J} - \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} - \DeclareUnicodeCharacter{0139}{\'L} - \DeclareUnicodeCharacter{013A}{\'l} - - \DeclareUnicodeCharacter{0141}{\L} - \DeclareUnicodeCharacter{0142}{\l} - \DeclareUnicodeCharacter{0143}{\'N} - \DeclareUnicodeCharacter{0144}{\'n} - \DeclareUnicodeCharacter{0147}{\v{N}} - \DeclareUnicodeCharacter{0148}{\v{n}} - \DeclareUnicodeCharacter{014C}{\=O} - \DeclareUnicodeCharacter{014D}{\=o} - \DeclareUnicodeCharacter{014E}{\u{O}} - \DeclareUnicodeCharacter{014F}{\u{o}} - - \DeclareUnicodeCharacter{0150}{\H{O}} - \DeclareUnicodeCharacter{0151}{\H{o}} - \DeclareUnicodeCharacter{0152}{\OE} - \DeclareUnicodeCharacter{0153}{\oe} - \DeclareUnicodeCharacter{0154}{\'R} - \DeclareUnicodeCharacter{0155}{\'r} - \DeclareUnicodeCharacter{0158}{\v{R}} - \DeclareUnicodeCharacter{0159}{\v{r}} - \DeclareUnicodeCharacter{015A}{\'S} - \DeclareUnicodeCharacter{015B}{\'s} - \DeclareUnicodeCharacter{015C}{\^S} - \DeclareUnicodeCharacter{015D}{\^s} - \DeclareUnicodeCharacter{015E}{\cedilla{S}} - \DeclareUnicodeCharacter{015F}{\cedilla{s}} - - \DeclareUnicodeCharacter{0160}{\v{S}} - \DeclareUnicodeCharacter{0161}{\v{s}} - \DeclareUnicodeCharacter{0162}{\cedilla{t}} - \DeclareUnicodeCharacter{0163}{\cedilla{T}} - \DeclareUnicodeCharacter{0164}{\v{T}} - - \DeclareUnicodeCharacter{0168}{\~U} - \DeclareUnicodeCharacter{0169}{\~u} - \DeclareUnicodeCharacter{016A}{\=U} - \DeclareUnicodeCharacter{016B}{\=u} - \DeclareUnicodeCharacter{016C}{\u{U}} - \DeclareUnicodeCharacter{016D}{\u{u}} - \DeclareUnicodeCharacter{016E}{\ringaccent{U}} - \DeclareUnicodeCharacter{016F}{\ringaccent{u}} - - \DeclareUnicodeCharacter{0170}{\H{U}} - \DeclareUnicodeCharacter{0171}{\H{u}} - \DeclareUnicodeCharacter{0174}{\^W} - \DeclareUnicodeCharacter{0175}{\^w} - \DeclareUnicodeCharacter{0176}{\^Y} - \DeclareUnicodeCharacter{0177}{\^y} - \DeclareUnicodeCharacter{0178}{\"Y} - \DeclareUnicodeCharacter{0179}{\'Z} - \DeclareUnicodeCharacter{017A}{\'z} - \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} - \DeclareUnicodeCharacter{017C}{\dotaccent{z}} - \DeclareUnicodeCharacter{017D}{\v{Z}} - \DeclareUnicodeCharacter{017E}{\v{z}} - - \DeclareUnicodeCharacter{01C4}{D\v{Z}} - \DeclareUnicodeCharacter{01C5}{D\v{z}} - \DeclareUnicodeCharacter{01C6}{d\v{z}} - \DeclareUnicodeCharacter{01C7}{LJ} - \DeclareUnicodeCharacter{01C8}{Lj} - \DeclareUnicodeCharacter{01C9}{lj} - \DeclareUnicodeCharacter{01CA}{NJ} - \DeclareUnicodeCharacter{01CB}{Nj} - \DeclareUnicodeCharacter{01CC}{nj} - \DeclareUnicodeCharacter{01CD}{\v{A}} - \DeclareUnicodeCharacter{01CE}{\v{a}} - \DeclareUnicodeCharacter{01CF}{\v{I}} - - \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} - \DeclareUnicodeCharacter{01D1}{\v{O}} - \DeclareUnicodeCharacter{01D2}{\v{o}} - \DeclareUnicodeCharacter{01D3}{\v{U}} - \DeclareUnicodeCharacter{01D4}{\v{u}} - - \DeclareUnicodeCharacter{01E2}{\={\AE}} - \DeclareUnicodeCharacter{01E3}{\={\ae}} - \DeclareUnicodeCharacter{01E6}{\v{G}} - \DeclareUnicodeCharacter{01E7}{\v{g}} - \DeclareUnicodeCharacter{01E8}{\v{K}} - \DeclareUnicodeCharacter{01E9}{\v{k}} - - \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} - \DeclareUnicodeCharacter{01F1}{DZ} - \DeclareUnicodeCharacter{01F2}{Dz} - \DeclareUnicodeCharacter{01F3}{dz} - \DeclareUnicodeCharacter{01F4}{\'G} - \DeclareUnicodeCharacter{01F5}{\'g} - \DeclareUnicodeCharacter{01F8}{\`N} - \DeclareUnicodeCharacter{01F9}{\`n} - \DeclareUnicodeCharacter{01FC}{\'{\AE}} - \DeclareUnicodeCharacter{01FD}{\'{\ae}} - \DeclareUnicodeCharacter{01FE}{\'{\O}} - \DeclareUnicodeCharacter{01FF}{\'{\o}} - - \DeclareUnicodeCharacter{021E}{\v{H}} - \DeclareUnicodeCharacter{021F}{\v{h}} - - \DeclareUnicodeCharacter{0226}{\dotaccent{A}} - \DeclareUnicodeCharacter{0227}{\dotaccent{a}} - \DeclareUnicodeCharacter{0228}{\cedilla{E}} - \DeclareUnicodeCharacter{0229}{\cedilla{e}} - \DeclareUnicodeCharacter{022E}{\dotaccent{O}} - \DeclareUnicodeCharacter{022F}{\dotaccent{o}} - - \DeclareUnicodeCharacter{0232}{\=Y} - \DeclareUnicodeCharacter{0233}{\=y} - \DeclareUnicodeCharacter{0237}{\dotless{j}} - - \DeclareUnicodeCharacter{02DB}{\ogonek{ }} - - \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} - \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} - \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} - \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} - \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} - \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} - \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} - \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} - \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} - \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} - \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} - \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} - - \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} - \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} - - \DeclareUnicodeCharacter{1E20}{\=G} - \DeclareUnicodeCharacter{1E21}{\=g} - \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} - \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} - \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} - \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} - \DeclareUnicodeCharacter{1E26}{\"H} - \DeclareUnicodeCharacter{1E27}{\"h} - - \DeclareUnicodeCharacter{1E30}{\'K} - \DeclareUnicodeCharacter{1E31}{\'k} - \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} - \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} - \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} - \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} - \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} - \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} - \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} - \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} - \DeclareUnicodeCharacter{1E3E}{\'M} - \DeclareUnicodeCharacter{1E3F}{\'m} - - \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} - \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} - \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} - \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} - \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} - \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} - \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} - \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} - \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} - \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} - - \DeclareUnicodeCharacter{1E54}{\'P} - \DeclareUnicodeCharacter{1E55}{\'p} - \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} - \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} - \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} - \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} - \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} - \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} - \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} - \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} - - \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} - \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} - \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} - \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} - \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} - \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} - \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} - \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} - \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} - \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} - - \DeclareUnicodeCharacter{1E7C}{\~V} - \DeclareUnicodeCharacter{1E7D}{\~v} - \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} - \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} - - \DeclareUnicodeCharacter{1E80}{\`W} - \DeclareUnicodeCharacter{1E81}{\`w} - \DeclareUnicodeCharacter{1E82}{\'W} - \DeclareUnicodeCharacter{1E83}{\'w} - \DeclareUnicodeCharacter{1E84}{\"W} - \DeclareUnicodeCharacter{1E85}{\"w} - \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} - \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} - \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} - \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} - \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} - \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} - \DeclareUnicodeCharacter{1E8C}{\"X} - \DeclareUnicodeCharacter{1E8D}{\"x} - \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} - \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} - - \DeclareUnicodeCharacter{1E90}{\^Z} - \DeclareUnicodeCharacter{1E91}{\^z} - \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} - \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} - \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} - \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} - \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} - \DeclareUnicodeCharacter{1E97}{\"t} - \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} - \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} - - \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} - \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} - - \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} - \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} - \DeclareUnicodeCharacter{1EBC}{\~E} - \DeclareUnicodeCharacter{1EBD}{\~e} - - \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} - \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} - \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} - \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} - - \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} - \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} - - \DeclareUnicodeCharacter{1EF2}{\`Y} - \DeclareUnicodeCharacter{1EF3}{\`y} - \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} - - \DeclareUnicodeCharacter{1EF8}{\~Y} - \DeclareUnicodeCharacter{1EF9}{\~y} - - \DeclareUnicodeCharacter{2013}{--} - \DeclareUnicodeCharacter{2014}{---} - \DeclareUnicodeCharacter{2018}{\quoteleft} - \DeclareUnicodeCharacter{2019}{\quoteright} - \DeclareUnicodeCharacter{201A}{\quotesinglbase} - \DeclareUnicodeCharacter{201C}{\quotedblleft} - \DeclareUnicodeCharacter{201D}{\quotedblright} - \DeclareUnicodeCharacter{201E}{\quotedblbase} - \DeclareUnicodeCharacter{2022}{\bullet} - \DeclareUnicodeCharacter{2026}{\dots} - \DeclareUnicodeCharacter{2039}{\guilsinglleft} - \DeclareUnicodeCharacter{203A}{\guilsinglright} - \DeclareUnicodeCharacter{20AC}{\euro} - - \DeclareUnicodeCharacter{2192}{\expansion} - \DeclareUnicodeCharacter{21D2}{\result} - - \DeclareUnicodeCharacter{2212}{\minus} - \DeclareUnicodeCharacter{2217}{\point} - \DeclareUnicodeCharacter{2261}{\equiv} -}% end of \utfeightchardefs - - -% US-ASCII character definitions. -\def\asciichardefs{% nothing need be done - \relax -} - -% Make non-ASCII characters printable again for compatibility with -% existing Texinfo documents that may use them, even without declaring a -% document encoding. -% -\setnonasciicharscatcode \other - - -\message{formatting,} - -\newdimen\defaultparindent \defaultparindent = 15pt - -\chapheadingskip = 15pt plus 4pt minus 2pt -\secheadingskip = 12pt plus 3pt minus 2pt -\subsecheadingskip = 9pt plus 2pt minus 2pt - -% Prevent underfull vbox error messages. -\vbadness = 10000 - -% Don't be so finicky about underfull hboxes, either. -\hbadness = 2000 - -% Following George Bush, get rid of widows and orphans. -\widowpenalty=10000 -\clubpenalty=10000 - -% Use TeX 3.0's \emergencystretch to help line breaking, but if we're -% using an old version of TeX, don't do anything. We want the amount of -% stretch added to depend on the line length, hence the dependence on -% \hsize. We call this whenever the paper size is set. -% -\def\setemergencystretch{% - \ifx\emergencystretch\thisisundefined - % Allow us to assign to \emergencystretch anyway. - \def\emergencystretch{\dimen0}% - \else - \emergencystretch = .15\hsize - \fi -} - -% Parameters in order: 1) textheight; 2) textwidth; -% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; -% 7) physical page height; 8) physical page width. -% -% We also call \setleading{\textleading}, so the caller should define -% \textleading. The caller should also set \parskip. -% -\def\internalpagesizes#1#2#3#4#5#6#7#8{% - \voffset = #3\relax - \topskip = #6\relax - \splittopskip = \topskip - % - \vsize = #1\relax - \advance\vsize by \topskip - \outervsize = \vsize - \advance\outervsize by 2\topandbottommargin - \pageheight = \vsize - % - \hsize = #2\relax - \outerhsize = \hsize - \advance\outerhsize by 0.5in - \pagewidth = \hsize - % - \normaloffset = #4\relax - \bindingoffset = #5\relax - % - \ifpdf - \pdfpageheight #7\relax - \pdfpagewidth #8\relax - % if we don't reset these, they will remain at "1 true in" of - % whatever layout pdftex was dumped with. - \pdfhorigin = 1 true in - \pdfvorigin = 1 true in - \fi - % - \setleading{\textleading} - % - \parindent = \defaultparindent - \setemergencystretch -} - -% @letterpaper (the default). -\def\letterpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % If page is nothing but text, make it come out even. - \internalpagesizes{607.2pt}{6in}% that's 46 lines - {\voffset}{.25in}% - {\bindingoffset}{36pt}% - {11in}{8.5in}% -}} - -% Use @smallbook to reset parameters for 7x9.25 trim size. -\def\smallbook{{\globaldefs = 1 - \parskip = 2pt plus 1pt - \textleading = 12pt - % - \internalpagesizes{7.5in}{5in}% - {-.2in}{0in}% - {\bindingoffset}{16pt}% - {9.25in}{7in}% - % - \lispnarrowing = 0.3in - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = .5cm -}} - -% Use @smallerbook to reset parameters for 6x9 trim size. -% (Just testing, parameters still in flux.) -\def\smallerbook{{\globaldefs = 1 - \parskip = 1.5pt plus 1pt - \textleading = 12pt - % - \internalpagesizes{7.4in}{4.8in}% - {-.2in}{-.4in}% - {0pt}{14pt}% - {9in}{6in}% - % - \lispnarrowing = 0.25in - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = .4cm -}} - -% Use @afourpaper to print on European A4 paper. -\def\afourpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % Double-side printing via postscript on Laserjet 4050 - % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. - % To change the settings for a different printer or situation, adjust - % \normaloffset until the front-side and back-side texts align. Then - % do the same for \bindingoffset. You can set these for testing in - % your texinfo source file like this: - % @tex - % \global\normaloffset = -6mm - % \global\bindingoffset = 10mm - % @end tex - \internalpagesizes{673.2pt}{160mm}% that's 51 lines - {\voffset}{\hoffset}% - {\bindingoffset}{44pt}% - {297mm}{210mm}% - % - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = 5mm -}} - -% Use @afivepaper to print on European A5 paper. -% From romildo@urano.iceb.ufop.br, 2 July 2000. -% He also recommends making @example and @lisp be small. -\def\afivepaper{{\globaldefs = 1 - \parskip = 2pt plus 1pt minus 0.1pt - \textleading = 12.5pt - % - \internalpagesizes{160mm}{120mm}% - {\voffset}{\hoffset}% - {\bindingoffset}{8pt}% - {210mm}{148mm}% - % - \lispnarrowing = 0.2in - \tolerance = 800 - \hfuzz = 1.2pt - \contentsrightmargin = 0pt - \defbodyindent = 2mm - \tableindent = 12mm -}} - -% A specific text layout, 24x15cm overall, intended for A4 paper. -\def\afourlatex{{\globaldefs = 1 - \afourpaper - \internalpagesizes{237mm}{150mm}% - {\voffset}{4.6mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - % - % Must explicitly reset to 0 because we call \afourpaper. - \globaldefs = 0 -}} - -% Use @afourwide to print on A4 paper in landscape format. -\def\afourwide{{\globaldefs = 1 - \afourpaper - \internalpagesizes{241mm}{165mm}% - {\voffset}{-2.95mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - \globaldefs = 0 -}} - -% @pagesizes TEXTHEIGHT[,TEXTWIDTH] -% Perhaps we should allow setting the margins, \topskip, \parskip, -% and/or leading, also. Or perhaps we should compute them somehow. -% -\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} -\def\pagesizesyyy#1,#2,#3\finish{{% - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi - \globaldefs = 1 - % - \parskip = 3pt plus 2pt minus 1pt - \setleading{\textleading}% - % - \dimen0 = #1\relax - \advance\dimen0 by \voffset - % - \dimen2 = \hsize - \advance\dimen2 by \normaloffset - % - \internalpagesizes{#1}{\hsize}% - {\voffset}{\normaloffset}% - {\bindingoffset}{44pt}% - {\dimen0}{\dimen2}% -}} - -% Set default to letter. -% -\letterpaper - - -\message{and turning on texinfo input format.} - -% DEL is a comment character, in case @c does not suffice. -\catcode`\^^? = 14 - -% Define macros to output various characters with catcode for normal text. -\catcode`\"=\other -\catcode`\~=\other -\catcode`\^=\other -\catcode`\_=\other -\catcode`\|=\other -\catcode`\<=\other -\catcode`\>=\other -\catcode`\+=\other -\catcode`\$=\other -\def\normaldoublequote{"} -\def\normaltilde{~} -\def\normalcaret{^} -\def\normalunderscore{_} -\def\normalverticalbar{|} -\def\normalless{<} -\def\normalgreater{>} -\def\normalplus{+} -\def\normaldollar{$}%$ font-lock fix - -% This macro is used to make a character print one way in \tt -% (where it can probably be output as-is), and another way in other fonts, -% where something hairier probably needs to be done. -% -% #1 is what to print if we are indeed using \tt; #2 is what to print -% otherwise. Since all the Computer Modern typewriter fonts have zero -% interword stretch (and shrink), and it is reasonable to expect all -% typewriter fonts to have this, we can check that font parameter. -% -\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} - -% Same as above, but check for italic font. Actually this also catches -% non-italic slanted fonts since it is impossible to distinguish them from -% italic fonts. But since this is only used by $ and it uses \sl anyway -% this is not a problem. -\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} - -% Turn off all special characters except @ -% (and those which the user can use as if they were ordinary). -% Most of these we simply print from the \tt font, but for some, we can -% use math or other variants that look better in normal text. - -\catcode`\"=\active -\def\activedoublequote{{\tt\char34}} -\let"=\activedoublequote -\catcode`\~=\active -\def~{{\tt\char126}} -\chardef\hat=`\^ -\catcode`\^=\active -\def^{{\tt \hat}} - -\catcode`\_=\active -\def_{\ifusingtt\normalunderscore\_} -\let\realunder=_ -% Subroutine for the previous macro. -\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } - -\catcode`\|=\active -\def|{{\tt\char124}} -\chardef \less=`\< -\catcode`\<=\active -\def<{{\tt \less}} -\chardef \gtr=`\> -\catcode`\>=\active -\def>{{\tt \gtr}} -\catcode`\+=\active -\def+{{\tt \char 43}} -\catcode`\$=\active -\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix - -% If a .fmt file is being used, characters that might appear in a file -% name cannot be active until we have parsed the command line. -% So turn them off again, and have \everyjob (or @setfilename) turn them on. -% \otherifyactive is called near the end of this file. -\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} - -% Used sometimes to turn off (effectively) the active characters even after -% parsing them. -\def\turnoffactive{% - \normalturnoffactive - \otherbackslash -} - -\catcode`\@=0 - -% \backslashcurfont outputs one backslash character in current font, -% as in \char`\\. -\global\chardef\backslashcurfont=`\\ -\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work - -% \realbackslash is an actual character `\' with catcode other, and -% \doublebackslash is two of them (for the pdf outlines). -{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} - -% In texinfo, backslash is an active character; it prints the backslash -% in fixed width font. -\catcode`\\=\active -@def@normalbackslash{{@tt@backslashcurfont}} -% On startup, @fixbackslash assigns: -% @let \ = @normalbackslash - -% \rawbackslash defines an active \ to do \backslashcurfont. -% \otherbackslash defines an active \ to be a literal `\' character with -% catcode other. -@gdef@rawbackslash{@let\=@backslashcurfont} -@gdef@otherbackslash{@let\=@realbackslash} - -% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of -% the literal character `\'. -% -@def@normalturnoffactive{% - @let\=@normalbackslash - @let"=@normaldoublequote - @let~=@normaltilde - @let^=@normalcaret - @let_=@normalunderscore - @let|=@normalverticalbar - @let<=@normalless - @let>=@normalgreater - @let+=@normalplus - @let$=@normaldollar %$ font-lock fix - @markupsetuplqdefault - @markupsetuprqdefault - @unsepspaces -} - -% Make _ and + \other characters, temporarily. -% This is canceled by @fixbackslash. -@otherifyactive - -% If a .fmt file is being used, we don't want the `\input texinfo' to show up. -% That is what \eatinput is for; after that, the `\' should revert to printing -% a backslash. -% -@gdef@eatinput input texinfo{@fixbackslash} -@global@let\ = @eatinput - -% On the other hand, perhaps the file did not have a `\input texinfo'. Then -% the first `\' in the file would cause an error. This macro tries to fix -% that, assuming it is called before the first `\' could plausibly occur. -% Also turn back on active characters that might appear in the input -% file name, in case not using a pre-dumped format. -% -@gdef@fixbackslash{% - @ifx\@eatinput @let\ = @normalbackslash @fi - @catcode`+=@active - @catcode`@_=@active -} - -% Say @foo, not \foo, in error messages. -@escapechar = `@@ - -% These look ok in all fonts, so just make them not special. -@catcode`@& = @other -@catcode`@# = @other -@catcode`@% = @other - -@c Finally, make ` and ' active, so that txicodequoteundirected and -@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we -@c don't make ` and ' active, @code will not get them as active chars. -@c Do this last of all since we use ` in the previous @catcode assignments. -@catcode`@'=@active -@catcode`@`=@active -@markupsetuplqdefault -@markupsetuprqdefault - -@c Local variables: -@c eval: (add-hook 'write-file-hooks 'time-stamp) -@c page-delimiter: "^\\\\message" -@c time-stamp-start: "def\\\\texinfoversion{" -@c time-stamp-format: "%:y-%02m-%02d.%02H" -@c time-stamp-end: "}" -@c End: - -@c vim:sw=2: - -@ignore - arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 -@end ignore diff --git a/cloog-0.17.0/osl/configure b/cloog-0.17.0/osl/configure deleted file mode 100755 index 9cde815..0000000 --- a/cloog-0.17.0/osl/configure +++ /dev/null @@ -1,13290 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.67 for osl 0.8.1. -# -# Report bugs to . -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: cedric.bastoul@u-psud.fr,pouchet@cse.ohio-state.edu -$0: about your system, including any error possibly output -$0: before this message. Then install a modern shell, or -$0: manually run the script under such a shell if you do -$0: have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$lt_ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` - ;; -esac - -ECHO=${lt_ECHO-echo} -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then - # Yippee, $ECHO works! - : -else - # Restart under the correct shell. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat <<_LT_EOF -$* -_LT_EOF - exit 0 -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test -z "$lt_ECHO"; then - if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if { echo_test_string=`eval $cmd`; } 2>/dev/null && - { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null - then - break - fi - done - fi - - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : - else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$ECHO" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - ECHO='print -r' - elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - ECHO='printf %s\n' - if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && - echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - ECHO="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - ECHO="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - ECHO=echo - fi - fi - fi - fi - fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -lt_ECHO=$ECHO -if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" -fi - - - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='osl' -PACKAGE_TARNAME='osl' -PACKAGE_VERSION='0.8.1' -PACKAGE_STRING='osl 0.8.1' -PACKAGE_BUGREPORT='cedric.bastoul@u-psud.fr,pouchet@cse.ohio-state.edu' -PACKAGE_URL='' - -ac_unique_file="include/osl/macros.h" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -ac_aux_dir -DOXYGEN -CPP -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -lt_ECHO -RANLIB -AR -OBJDUMP -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -LIBTOOL -CD -LN_S -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_dependency_tracking -enable_shared -enable_static -with_pic -enable_fast_install -with_gnu_ld -enable_libtool_lock -with_gmp -with_gmp_include -with_gmp_library -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures osl 0.8.1 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/osl] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of osl 0.8.1:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-gmp=DIR DIR where the gmp package is installed - --with-gmp-include=DIR DIR where gmp.h is installed - --with-gmp-library=DIR DIR where the gmp library is installed - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -osl configure 0.8.1 -generated by GNU Autoconf 2.67 - -Copyright (C) 2010 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_func - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_type - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval "test \"\${$3+set}\"" = set; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ppppppppppppppppppppppppppppppppppppppp ## -## Report this to cedric.bastoul@u-psud.fr ## -## ppppppppppppppppppppppppppppppppppppppp ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_mongrel -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by osl $as_me 0.8.1, which was -generated by GNU Autoconf 2.67. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5 ; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_aux_dir= -for ac_dir in autoconf "$srcdir"/autoconf; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in autoconf \"$srcdir\"/autoconf" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -am__api_version='1.11' - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error $? "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='osl' - VERSION='0.8.1' - - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 -$as_echo_n "checking how to create a ustar tar archive... " >&6; } -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar plaintar pax cpio none' -_am_tools=${am_cv_prog_tar_ustar-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - { echo "$as_me:$LINENO: $_am_tar --version" >&5 - ($_am_tar --version) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && break - done - am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x ustar -w "$$tardir"' - am__tar_='pax -L -x ustar -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H ustar -L' - am__tar_='find "$tardir" -print | cpio -o -H ustar -L' - am__untar='cpio -i -H ustar -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_ustar}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 - (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - rm -rf conftest.dir - if test -s conftest.tar; then - { echo "$as_me:$LINENO: $am__untar &5 - ($am__untar &5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - grep GrepMe conftest.dir/file >/dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -if test "${am_cv_prog_tar_ustar+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - am_cv_prog_tar_ustar=$_am_tool -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 -$as_echo "$am_cv_prog_tar_ustar" >&6; } - - - - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5 ; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5 ; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5 ; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5 ; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5 ; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -# Extract the first word of "cd", so it can be a program name with args. -set dummy cd; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CD"; then - ac_cv_prog_CD="$CD" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CD="" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CD=$ac_cv_prog_CD -if test -n "$CD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CD" >&5 -$as_echo "$CD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.2.6b' -macro_revision='1.3017' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test "${lt_cv_path_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$ac_tool_prefix"; then - for ac_prog in "dumpbin -symbols" "link -dump -symbols" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in "dumpbin -symbols" "link -dump -symbols" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if test "${lt_cv_nm_interface+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:4689: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:4692: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:4695: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ - = "XX$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - - - - - - - - - - - - - - - - - - - - - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 5890 "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if test "${lt_cv_apple_cc_single_mod+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5 ; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if test "${lt_cv_objdir+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - - - - - - - - - - - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag=' -fno-builtin' - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7419: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:7423: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl*) - # IBM XL C 8.0/Fortran 10.1 on PPC - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 -$as_echo "$lt_prog_compiler_pic" >&6; } - - - - - - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7758: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:7762: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test "${lt_cv_prog_compiler_static_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7863: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:7867: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7918: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:7922: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - linux* | k*bsd*-gnu) - link_all_deplibs=no - ;; - esac - - ld_shlibs=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag= - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld='-rpath $libdir' - archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - link_all_deplibs=no - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - whole_archive_flag_spec='' - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=echo - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo(void) {} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - archive_cmds_need_lc=no - else - archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 -$as_echo "$archive_cmds_need_lc" >&6; } - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # Some binutils ld are patched to set DT_RUNPATH - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line 10302 "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line 10398 "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - -for ac_prog in doxygen -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DOXYGEN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DOXYGEN"; then - ac_cv_prog_DOXYGEN="$DOXYGEN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DOXYGEN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DOXYGEN=$ac_cv_prog_DOXYGEN -if test -n "$DOXYGEN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5 -$as_echo "$DOXYGEN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DOXYGEN" && break -done -test -n "$DOXYGEN" || DOXYGEN="doxygen" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if test "${ac_cv_c_const+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset cs; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_const=yes -else - ac_cv_c_const=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then - -$as_echo "#define const /**/" >>confdefs.h - -fi - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = x""yes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -for ac_header in errno.h stddef.h stdlib.h string.h strings.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_func in strtol -do : - ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol" -if test "x$ac_cv_func_strtol" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STRTOL 1 -_ACEOF - -fi -done - - - - -gmp_package="yes" -gmp_include_package="yes" -gmp_library_package="yes" -gmp_flag="OSL_GMP_IS_HERE" - -ASKED_FOR_GMP="no" - - -# Check whether --with-gmp was given. -if test "${with_gmp+set}" = set; then : - withval=$with_gmp; echo "Package gmp : $withval" && - gmp_package=$withval && - GMP_INC=$gmp_package/include && - GMP_LIB=$gmp_package/lib && - ASKED_FOR_GMP="yes" -fi - - - -# Check whether --with-gmp-include was given. -if test "${with_gmp_include+set}" = set; then : - withval=$with_gmp_include; echo "Package gmp-include : $withval" && - gmp_include_package=$withval && - GMP_INC=$gmp_include_package && - ASKED_FOR_GMP="yes" -fi - - - -# Check whether --with-gmp-library was given. -if test "${with_gmp_library+set}" = set; then : - withval=$with_gmp_library; echo "Package gmp-library : $withval" && - gmp_library_package=$withval && - GMP_LIB=$gmp_library_package && - ASKED_FOR_GMP="yes" -fi - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gmp works" >&5 -$as_echo_n "checking whether gmp works... " >&6; } -if test "$gmp_package" = "no"; then - echo "GMP package not defined" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -else - if test "$ASKED_FOR_GMP" = "no"; then - echo "Mode normal GMP" - ac_fn_c_check_header_mongrel "$LINENO" "gmp.h" "ac_cv_header_gmp_h" "$ac_includes_default" -if test "x$ac_cv_header_gmp_h" = x""yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __gmpz_init in -lgmp" >&5 -$as_echo_n "checking for __gmpz_init in -lgmp... " >&6; } -if test "${ac_cv_lib_gmp___gmpz_init+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgmp $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char __gmpz_init (); -int -main () -{ -return __gmpz_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_gmp___gmpz_init=yes -else - ac_cv_lib_gmp___gmpz_init=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gmp___gmpz_init" >&5 -$as_echo "$ac_cv_lib_gmp___gmpz_init" >&6; } -if test "x$ac_cv_lib_gmp___gmpz_init" = x""yes; then : - LIBS="$LIBS -lgmp" && - CPPFLAGS="-D$gmp_flag $CPPFLAGS" -else - echo "Cannot find gmp library." && - echo "MP precision will not be supported." -fi - -else - echo "Can't find gmp headers." && - echo "MP precision will not be supported." -fi - - - else - - if test "$gmp_package" != "yes" ; then - echo "(GMP path has been set by user)" - GMP_DIR=$gmp_package - CPPFLAGS="-I$GMP_DIR/include $CPPFLAGS" - LDFLAGS="-L$GMP_DIR/lib $LDFLAGS" - fi - - if test "$gmp_include_package" != "yes" ; then - CPPFLAGS="-I$GMP_INC $CPPFLAGS" - fi - - if test "$gmp_library_package" != "yes" ; then - LDFLAGS="-L$GMP_LIB $LDFLAGS" - fi - - ac_fn_c_check_header_mongrel "$LINENO" "gmp.h" "ac_cv_header_gmp_h" "$ac_includes_default" -if test "x$ac_cv_header_gmp_h" = x""yes; then : - -else - as_fn_error $? "\"Cannot find gmp headers.\"" "$LINENO" 5 -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __gmpz_init in -lgmp" >&5 -$as_echo_n "checking for __gmpz_init in -lgmp... " >&6; } -if test "${ac_cv_lib_gmp___gmpz_init+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgmp $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char __gmpz_init (); -int -main () -{ -return __gmpz_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_gmp___gmpz_init=yes -else - ac_cv_lib_gmp___gmpz_init=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gmp___gmpz_init" >&5 -$as_echo "$ac_cv_lib_gmp___gmpz_init" >&6; } -if test "x$ac_cv_lib_gmp___gmpz_init" = x""yes; then : - LIBS="$LIBS -lgmp" && - CPPFLAGS="-D$gmp_flag $CPPFLAGS" -else - as_fn_error $? "\"Cannot find gmp library.\"" "$LINENO" 5 -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi -fi - - - - - - -ac_config_files="$ac_config_files Makefile doc/Makefile doc/Doxyfile include/Makefile include/osl/scop.h source/Makefile tests/Makefile" - - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -:mline -/\\$/{ - N - s,\\\n,, - b mline -} -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by osl $as_me 0.8.1, which was -generated by GNU Autoconf 2.67. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Configuration commands: -$config_commands - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -osl config.status 0.8.1 -configured by $0, generated by GNU Autoconf 2.67, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' -macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' -enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' -pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' -host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' -host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' -host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' -build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' -build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' -build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' -SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' -Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' -GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' -EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' -FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' -LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' -NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' -LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' -ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' -exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' -lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' -reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' -AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' -STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' -RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' -compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' -GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' -SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' -ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' -need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' -LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' -libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' -fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' -need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' -version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' -runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' -libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' -soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' -finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' -old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' -striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# Quote evaled strings. -for var in SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -AR \ -AR_FLAGS \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -SHELL \ -ECHO \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_wl \ -lt_prog_compiler_pic \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ -hardcode_libdir_separator \ -fix_srcfile_path \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -finish_eval \ -old_striplib \ -striplib; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec; do - case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Fix-up fallback echo if it was mangled by the above quoting rules. -case \$lt_ECHO in -*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` - ;; -esac - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "doc/Doxyfile") CONFIG_FILES="$CONFIG_FILES doc/Doxyfile" ;; - "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; - "include/osl/scop.h") CONFIG_FILES="$CONFIG_FILES include/osl/scop.h" ;; - "source/Makefile") CONFIG_FILES="$CONFIG_FILES source/Makefile" ;; - "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008 Free Software Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="" - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that does not interpret backslashes. -ECHO=$lt_ECHO - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` -} - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "X${3}" \ - | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac - - - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - ;; - "Makefile":F) test -z "$CONFIG_HEADERS" || echo timestamp > source/stamp-h.in ;; - "doc/Makefile":F) test -z "$CONFIG_HEADERS" || echo timestamp > source/stamp-h.in ;; - "doc/Doxyfile":F) test -z "$CONFIG_HEADERS" || echo timestamp > source/stamp-h.in ;; - "include/Makefile":F) test -z "$CONFIG_HEADERS" || echo timestamp > source/stamp-h.in ;; - "include/osl/scop.h":F) test -z "$CONFIG_HEADERS" || echo timestamp > source/stamp-h.in ;; - "source/Makefile":F) test -z "$CONFIG_HEADERS" || echo timestamp > source/stamp-h.in ;; - "tests/Makefile":F) test -z "$CONFIG_HEADERS" || echo timestamp > source/stamp-h.in ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - - -echo " /*-----------------------------------------------*" -echo " * OpenScop Library configuration is OK *" -echo " *-----------------------------------------------*/" -echo "It appears that your system is OK to start the OpenScop Library compilation." -echo "You need now to type \"make\". Then type \"make install\" to install it on your" -echo "system (log as root if necessary)." diff --git a/cloog-0.17.0/osl/configure.in b/cloog-0.17.0/osl/configure.in deleted file mode 100644 index 9440bbb..0000000 --- a/cloog-0.17.0/osl/configure.in +++ /dev/null @@ -1,227 +0,0 @@ -dnl -dnl /*+------------------------------------------------------------------** -dnl ** OpenScop Library ** -dnl **------------------------------------------------------------------** -dnl ** configure.in ** -dnl **------------------------------------------------------------------** -dnl ** First version: 30/04/2008 ** -dnl **------------------------------------------------------------------** -dnl -dnl -dnl ************************************************************************** -dnl * OpenScop: Structures and formats for polyhedral tools to talk together * -dnl ************************************************************************** -dnl * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * -dnl * / / / // // // // / / / // // / / // / /|,_, * -dnl * / / / // // // // / / / // // / / // / / / /\ * -dnl * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * -dnl * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * -dnl * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * -dnl * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * -dnl * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * -dnl * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * -dnl * | I | | | | e | | | | | | | | | | | | | \ \ \ * -dnl * | T | | | | | | | | | | | | | | | | | \ \ \ * -dnl * | E | | | | | | | | | | | | | | | | | \ \ \ * -dnl * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * -dnl * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * -dnl * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * -dnl * * -dnl * Copyright (C) 2008 University Paris-Sud 11 and INRIA * -dnl * * -dnl * (3-clause BSD license) * -dnl * Redistribution and use in source and binary forms, with or without * -dnl * modification, are permitted provided that the following conditions * -dnl * are met: * -dnl * * -dnl * 1. Redistributions of source code must retain the above copyright * -dnl * notice, this list of conditions and the following disclaimer. * -dnl * 2. Redistributions in binary form must reproduce the above copyright * -dnl * notice, this list of conditions and the following disclaimer in the * -dnl * documentation and/or other materials provided with the distribution.* -dnl * 3. The name of the author may not be used to endorse or promote * -dnl * products derived from this software without specific prior written * -dnl * permission. * -dnl * * -dnl * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * -dnl * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * -dnl * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * -dnl * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * -dnl * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * -dnl * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * -dnl * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * -dnl * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * -dnl * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * -dnl * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * -dnl * POSSIBILITY OF SUCH DAMAGE. * -dnl * * -dnl * OpenScop Library, a library to manipulate OpenScop formats and data * -dnl * structures. Written by: * -dnl * Cedric Bastoul and * -dnl * Louis-Noel Pouchet * -dnl * * -dnl **************************************************************************/ -dnl -dnl Input file for autoconf to build a configuration shellscript. - - -AC_PREREQ(2.13) -dnl Fill here the @bug email adress. -AC_INIT([osl], [0.8.1], [cedric.bastoul@u-psud.fr,pouchet@cse.ohio-state.edu]) -dnl A common file, which serve as a test. -AC_CONFIG_SRCDIR([include/osl/macros.h]) -dnl Put as most as possible configuration files to an auxialiry -dnl directory. -AC_CONFIG_AUX_DIR([autoconf]) -dnl Initialize automake. Here, a special tar version that enables -dnl (very) long filenames. -AM_INIT_AUTOMAKE([1.9 tar-ustar no-define foreign dist-bzip2]) - - -dnl /************************************************************************** -dnl * Checking * -dnl **************************************************************************/ - - -dnl Checks for programs. -AC_PROG_CC -AC_PROG_LN_S -AC_PROG_MAKE_SET -AC_CHECK_PROG(CD, cd) -AC_PROG_LIBTOOL -AC_CHECK_PROGS(DOXYGEN,doxygen,doxygen) - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_SIZE_T - -dnl Checks for header files. -AC_HEADER_STDC -AC_CHECK_HEADERS([errno.h stddef.h stdlib.h string.h strings.h unistd.h]) - -dnl Checks for library functions. -AC_CHECK_FUNCS(strtol) - - -dnl /************************************************************************** -dnl * Option setting * -dnl **************************************************************************/ - -dnl Some default values cause I'm not sure whether autoconf set them, while -dnl documentation says it does... -gmp_package="yes" -gmp_include_package="yes" -gmp_library_package="yes" -gmp_flag="OSL_GMP_IS_HERE" - -ASKED_FOR_GMP="no" - -dnl --with-gmp=gmp-path -AC_ARG_WITH(gmp, - [ --with-gmp=DIR DIR where the gmp package is installed], - [ echo "Package gmp : $withval" && - gmp_package=$withval && - GMP_INC=$gmp_package/include && - GMP_LIB=$gmp_package/lib && - ASKED_FOR_GMP="yes"]) - -AC_ARG_WITH(gmp-include, - [ --with-gmp-include=DIR DIR where gmp.h is installed], - [ echo "Package gmp-include : $withval" && - gmp_include_package=$withval && - GMP_INC=$gmp_include_package && - ASKED_FOR_GMP="yes"]) - -AC_ARG_WITH(gmp-library, - [ --with-gmp-library=DIR DIR where the gmp library is installed], - [ echo "Package gmp-library : $withval" && - gmp_library_package=$withval && - GMP_LIB=$gmp_library_package && - ASKED_FOR_GMP="yes"]) - - -dnl /************************************************************************** -dnl * Where is GMP? * -dnl **************************************************************************/ - - -dnl Checking for gmp -AC_MSG_CHECKING(whether gmp works) -if test "$gmp_package" = "no"; then - echo "GMP package not defined" - AC_MSG_RESULT(no) -else - if test "$ASKED_FOR_GMP" = "no"; then - echo "Mode normal GMP" - AC_CHECK_HEADER(gmp.h, - [AC_CHECK_LIB(gmp, - __gmpz_init, - [LIBS="$LIBS -lgmp" && - CPPFLAGS="-D$gmp_flag $CPPFLAGS"], - [echo "Cannot find gmp library." && - echo "MP precision will not be supported."])], - [echo "Can't find gmp headers." && - echo "MP precision will not be supported."]) - else - dnl Default given by --with-X is "yes", --without-X is "no". We also - dnl initialized manually all gmp_package* variables to "yes" (thus they are - dnl supposed to be "yes" except if the user set them himself). - - if test "$gmp_package" != "yes" ; then - echo "(GMP path has been set by user)" - GMP_DIR=$gmp_package - CPPFLAGS="-I$GMP_DIR/include $CPPFLAGS" - LDFLAGS="-L$GMP_DIR/lib $LDFLAGS" - fi - - if test "$gmp_include_package" != "yes" ; then - CPPFLAGS="-I$GMP_INC $CPPFLAGS" - fi - - if test "$gmp_library_package" != "yes" ; then - LDFLAGS="-L$GMP_LIB $LDFLAGS" - fi - - AC_CHECK_HEADER(gmp.h, - [], - [AC_MSG_ERROR("Cannot find gmp headers.")]) - AC_CHECK_LIB(gmp, - __gmpz_init, - [LIBS="$LIBS -lgmp" && - CPPFLAGS="-D$gmp_flag $CPPFLAGS"], - [AC_MSG_ERROR("Cannot find gmp library.")]) - - AC_MSG_RESULT(yes) - fi -fi - - -dnl /************************************************************************** -dnl * Substitutions * -dnl **************************************************************************/ - - -dnl Substitutions to do. -AC_SUBST(ac_aux_dir) - -dnl Configure Makefiles. -AC_CONFIG_FILES([ - Makefile - doc/Makefile - doc/Doxyfile - include/Makefile - include/osl/scop.h - source/Makefile - tests/Makefile - ], - [test -z "$CONFIG_HEADERS" || echo timestamp > source/stamp-h.in]) - -AC_OUTPUT - - -echo " /*-----------------------------------------------*" -echo " * OpenScop Library configuration is OK *" -echo " *-----------------------------------------------*/" -echo "It appears that your system is OK to start the OpenScop Library compilation." -echo "You need now to type \"make\". Then type \"make install\" to install it on your" -echo "system (log as root if necessary)." diff --git a/cloog-0.17.0/osl/doc/Doxyfile.in b/cloog-0.17.0/osl/doc/Doxyfile.in deleted file mode 100644 index 6f33f6c..0000000 --- a/cloog-0.17.0/osl/doc/Doxyfile.in +++ /dev/null @@ -1,1294 +0,0 @@ -# Doxyfile 1.5.3 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file that -# follow. The default is UTF-8 which is also the encoding used for all text before -# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into -# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of -# possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = OpenScop - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = @PACKAGE_VERSION@ - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = htmldoc - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, -# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, -# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, -# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = YES - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = YES - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = YES - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to -# include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be extracted -# and appear in the documentation as a namespace called 'anonymous_namespace{file}', -# where file will be replaced with the base name of the file that contains the anonymous -# namespace. By default anonymous namespace are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = YES - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text " - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = @top_srcdir@/source @top_srcdir@/include/osl - -# This tag can be used to specify the character encoding of the source files that -# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default -# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. -# See http://www.gnu.org/software/libiconv for the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the output. -# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, -# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH -# then you must also enable this option. If you don't then doxygen will produce -# a warning and turn it on anyway - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentstion. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 1 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = osl_ - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = YES - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to -# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to -# specify the directory where the mscgen tool resides. If left empty the tool is assumed to -# be found in the default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will -# generate a caller dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = /usr/bin/ - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the number -# of direct children of the root node in a graph is already larger than -# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/cloog-0.17.0/osl/doc/Makefile.am b/cloog-0.17.0/osl/doc/Makefile.am deleted file mode 100644 index 68dfe67..0000000 --- a/cloog-0.17.0/osl/doc/Makefile.am +++ /dev/null @@ -1,119 +0,0 @@ -# -# /*+------------------------------------------------------------------** -# ** OpenScop Library ** -# **------------------------------------------------------------------** -# ** makefile.am ** -# **------------------------------------------------------------------** -# ** First version: 30/04/2008 ** -# **------------------------------------------------------------------** -# -# -# *************************************************************************** -# * OpenScop: Structures and formats for polyhedral tools to talk together * -# *************************************************************************** -# * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * -# * / / / // // // // / / / // // / / // / /|,_, * -# * / / / // // // // / / / // // / / // / / / /\ * -# * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * -# * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * -# * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * -# * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * -# * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * -# * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * -# * | I | | | | e | | | | | | | | | | | | | \ \ \ * -# * | T | | | | e | | | | | | | | | | | | | \ \ \ * -# * | E | | | | | | | | | | | | | | | | | \ \ \ * -# * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * -# * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * -# * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * -# * * -# * Copyright (C) 2008 University Paris-Sud and INRIA * -# * * -# * (3-clause BSD license) * -# * * -# * Redistribution and use in source and binary forms, with or without * -# * modification, are permitted provided that the following conditions * -# * are met: * -# * * -# * 1. Redistributions of source code must retain the above copyright * -# * notice, this list of conditions and the following disclaimer. * -# * 2. Redistributions in binary form must reproduce the above copyright * -# * notice, this list of conditions and the following disclaimer in the * -# * documentation and/or other materials provided with the distribution. * -# * 3. The name of the author may not be used to endorse or promote * -# * products derived from this software without specific prior written * -# * permission. * -# * * -# * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * -# * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * -# * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * -# * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * -# * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * -# * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * -# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * -# * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * -# * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * -# * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * -# * POSSIBILITY OF SUCH DAMAGE. * -# * * -# * OpenScop Library, a library to manipulate OpenScop formats and data * -# * structures. Written by: * -# * Cedric Bastoul and * -# * Louis-Noel Pouchet * -# * * -# ***************************************************************************/ -# -# Makefile.am (or makefile if generated) of the OpenScop Library. -# Makefile.am is not a makefile, you must run the 'autogen.sh' THEN the -# configure shellscript to generate the Makefile thanks to this file. - - -############################################################################# -SUBDIRS = - -############################################################################# - -MAINTAINERCLEANFILES = Makefile.in - -EXTRA_DIST = \ - htmldoc.tar.gz \ - openscop.pdf \ - S4.cloog \ - ascii-art.txt \ - images/basic.eps \ - images/basic.fig \ - images/basic.jpg \ - images/basic.pdf \ - images/basic.txt \ - images/basic1.eps \ - images/basic1.fig \ - images/basic1.jpg \ - images/basic1.pdf \ - images/basic1.txt \ - images/basic2.eps \ - images/basic2.fig \ - images/basic2.jpg \ - images/basic2.pdf \ - images/basic2.txt \ - images/tree.eps \ - images/tree.fig \ - images/tree.jpg \ - images/tree.pdf \ - images/tree.txt - - -info_TEXINFOS = openscop.texi - -DOCDIR = htmldoc -DOXYFILE = Doxyfile -DOXYGEN = @DOXYGEN@ - -# The following requires a fixed version of the Emacs 19.30 etags. -ETAGS_ARGS = --lang=none \ - --regex='/^@node[ \t]+\([^,]+\)/\1/' $(srcdir)/doc/openscop.texi -TAGS_DEPENDENCIES = openscop.texi $(DOXYFILE).in - -htmldoc.tar.gz: - mkdir -p $(top_srcdir)/doc/htmldoc - $(DOXYGEN) $(DOXYFILE) - tar czf htmldoc.tar.gz htmldoc diff --git a/cloog-0.17.0/osl/doc/Makefile.in b/cloog-0.17.0/osl/doc/Makefile.in deleted file mode 100644 index 769469e..0000000 --- a/cloog-0.17.0/osl/doc/Makefile.in +++ /dev/null @@ -1,947 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# /*+------------------------------------------------------------------** -# ** OpenScop Library ** -# **------------------------------------------------------------------** -# ** makefile.am ** -# **------------------------------------------------------------------** -# ** First version: 30/04/2008 ** -# **------------------------------------------------------------------** -# -# -# *************************************************************************** -# * OpenScop: Structures and formats for polyhedral tools to talk together * -# *************************************************************************** -# * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * -# * / / / // // // // / / / // // / / // / /|,_, * -# * / / / // // // // / / / // // / / // / / / /\ * -# * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * -# * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * -# * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * -# * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * -# * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * -# * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * -# * | I | | | | e | | | | | | | | | | | | | \ \ \ * -# * | T | | | | e | | | | | | | | | | | | | \ \ \ * -# * | E | | | | | | | | | | | | | | | | | \ \ \ * -# * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * -# * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * -# * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * -# * * -# * Copyright (C) 2008 University Paris-Sud and INRIA * -# * * -# * (3-clause BSD license) * -# * * -# * Redistribution and use in source and binary forms, with or without * -# * modification, are permitted provided that the following conditions * -# * are met: * -# * * -# * 1. Redistributions of source code must retain the above copyright * -# * notice, this list of conditions and the following disclaimer. * -# * 2. Redistributions in binary form must reproduce the above copyright * -# * notice, this list of conditions and the following disclaimer in the * -# * documentation and/or other materials provided with the distribution. * -# * 3. The name of the author may not be used to endorse or promote * -# * products derived from this software without specific prior written * -# * permission. * -# * * -# * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * -# * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * -# * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * -# * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * -# * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * -# * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * -# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * -# * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * -# * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * -# * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * -# * POSSIBILITY OF SUCH DAMAGE. * -# * * -# * OpenScop Library, a library to manipulate OpenScop formats and data * -# * structures. Written by: * -# * Cedric Bastoul and * -# * Louis-Noel Pouchet * -# * * -# ***************************************************************************/ -# -# Makefile.am (or makefile if generated) of the OpenScop Library. -# Makefile.am is not a makefile, you must run the 'autogen.sh' THEN the -# configure shellscript to generate the Makefile thanks to this file. -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = doc -DIST_COMMON = $(srcdir)/Doxyfile.in $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/autoconf/libtool.m4 \ - $(top_srcdir)/autoconf/ltoptions.m4 \ - $(top_srcdir)/autoconf/ltsugar.m4 \ - $(top_srcdir)/autoconf/ltversion.m4 \ - $(top_srcdir)/autoconf/lt~obsolete.m4 \ - $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_CLEAN_FILES = Doxyfile -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -INFO_DEPS = $(srcdir)/openscop.info -TEXINFO_TEX = $(top_srcdir)/autoconf/texinfo.tex -am__TEXINFO_TEX_DIR = $(top_srcdir)/autoconf -DVIS = openscop.dvi -PDFS = openscop.pdf -PSS = openscop.ps -HTMLS = openscop.html -TEXINFOS = openscop.texi -TEXI2DVI = texi2dvi -TEXI2PDF = $(TEXI2DVI) --pdf --batch -MAKEINFOHTML = $(MAKEINFO) --html -AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) -DVIPS = dvips -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -am__installdirs = "$(DESTDIR)$(infodir)" -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CD = @CD@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOXYGEN = @DOXYGEN@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_aux_dir = @ac_aux_dir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ - -############################################################################# -SUBDIRS = - -############################################################################# -MAINTAINERCLEANFILES = Makefile.in -EXTRA_DIST = \ - htmldoc.tar.gz \ - openscop.pdf \ - S4.cloog \ - ascii-art.txt \ - images/basic.eps \ - images/basic.fig \ - images/basic.jpg \ - images/basic.pdf \ - images/basic.txt \ - images/basic1.eps \ - images/basic1.fig \ - images/basic1.jpg \ - images/basic1.pdf \ - images/basic1.txt \ - images/basic2.eps \ - images/basic2.fig \ - images/basic2.jpg \ - images/basic2.pdf \ - images/basic2.txt \ - images/tree.eps \ - images/tree.fig \ - images/tree.jpg \ - images/tree.pdf \ - images/tree.txt - -info_TEXINFOS = openscop.texi -DOCDIR = htmldoc -DOXYFILE = Doxyfile - -# The following requires a fixed version of the Emacs 19.30 etags. -ETAGS_ARGS = --lang=none \ - --regex='/^@node[ \t]+\([^,]+\)/\1/' $(srcdir)/doc/openscop.texi - -TAGS_DEPENDENCIES = openscop.texi $(DOXYFILE).in -all: all-recursive - -.SUFFIXES: -.SUFFIXES: .dvi .html .info .pdf .ps .texi -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign doc/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -.texi.info: - restore=: && backupdir="$(am__leading_dot)am$$$$" && \ - am__cwd=`pwd` && $(am__cd) $(srcdir) && \ - rm -rf $$backupdir && mkdir $$backupdir && \ - if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ - for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ - if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ - done; \ - else :; fi && \ - cd "$$am__cwd"; \ - if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ - -o $@ $<; \ - then \ - rc=0; \ - $(am__cd) $(srcdir); \ - else \ - rc=$$?; \ - $(am__cd) $(srcdir) && \ - $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ - fi; \ - rm -rf $$backupdir; exit $$rc - -.texi.dvi: - TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ - MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ - $(TEXI2DVI) $< - -.texi.pdf: - TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ - MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ - $(TEXI2PDF) $< - -.texi.html: - rm -rf $(@:.html=.htp) - if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ - -o $(@:.html=.htp) $<; \ - then \ - rm -rf $@; \ - if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ - mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ - else \ - if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ - rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ - exit 1; \ - fi -$(srcdir)/openscop.info: openscop.texi -openscop.dvi: openscop.texi -openscop.pdf: openscop.texi -openscop.html: openscop.texi -.dvi.ps: - TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ - $(DVIPS) -o $@ $< - -uninstall-dvi-am: - @$(NORMAL_UNINSTALL) - @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ - rm -f "$(DESTDIR)$(dvidir)/$$f"; \ - done - -uninstall-html-am: - @$(NORMAL_UNINSTALL) - @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ - rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ - done - -uninstall-info-am: - @$(PRE_UNINSTALL) - @if test -d '$(DESTDIR)$(infodir)' && \ - (install-info --version && \ - install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ - if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ - then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ - done; \ - else :; fi - @$(NORMAL_UNINSTALL) - @list='$(INFO_DEPS)'; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ - (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ - echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ - rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ - else :; fi); \ - done - -uninstall-pdf-am: - @$(NORMAL_UNINSTALL) - @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ - rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ - done - -uninstall-ps-am: - @$(NORMAL_UNINSTALL) - @list='$(PSS)'; test -n "$(psdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ - rm -f "$(DESTDIR)$(psdir)/$$f"; \ - done - -dist-info: $(INFO_DEPS) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; \ - for base in $$list; do \ - case $$base in \ - $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ - if test -f $$base; then d=.; else d=$(srcdir); fi; \ - base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ - for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ - if test -f $$file; then \ - relfile=`expr "$$file" : "$$d/\(.*\)"`; \ - test -f "$(distdir)/$$relfile" || \ - cp -p $$file "$(distdir)/$$relfile"; \ - else :; fi; \ - done; \ - done - -mostlyclean-aminfo: - -rm -rf openscop.aux openscop.cp openscop.cps openscop.fn openscop.fns \ - openscop.ky openscop.kys openscop.log openscop.pg \ - openscop.pgs openscop.tmp openscop.toc openscop.tp \ - openscop.tps openscop.vr openscop.vrs - -clean-aminfo: - -test -z "openscop.dvi openscop.pdf openscop.ps openscop.html" \ - || rm -rf openscop.dvi openscop.pdf openscop.ps openscop.html - -maintainer-clean-aminfo: - @list='$(INFO_DEPS)'; for i in $$list; do \ - i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ - echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ - rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ - done - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-info -check-am: all-am -check: check-recursive -all-am: Makefile $(INFO_DEPS) -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(infodir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-recursive - -clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-tags - -dvi: dvi-recursive - -dvi-am: $(DVIS) - -html: html-recursive - -html-am: $(HTMLS) - -info: info-recursive - -info-am: $(INFO_DEPS) - -install-data-am: install-info-am - -install-dvi: install-dvi-recursive - -install-dvi-am: $(DVIS) - @$(NORMAL_INSTALL) - test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" - @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ - done -install-exec-am: - -install-html: install-html-recursive - -install-html-am: $(HTMLS) - @$(NORMAL_INSTALL) - test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" - @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ - for p in $$list; do \ - if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ - $(am__strip_dir) \ - if test -d "$$d$$p"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ - $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ - echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ - else \ - list2="$$list2 $$d$$p"; \ - fi; \ - done; \ - test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ - done; } -install-info: install-info-recursive - -install-info-am: $(INFO_DEPS) - @$(NORMAL_INSTALL) - test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ - for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ - file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ - for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ - $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ - if test -f $$ifile; then \ - echo "$$ifile"; \ - else : ; fi; \ - done; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done - @$(POST_INSTALL) - @if (install-info --version && \ - install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ - install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ - done; \ - else : ; fi -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: $(PDFS) - @$(NORMAL_INSTALL) - test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" - @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done -install-ps: install-ps-recursive - -install-ps-am: $(PSS) - @$(NORMAL_INSTALL) - test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" - @list='$(PSS)'; test -n "$(psdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-aminfo \ - maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: $(PDFS) - -ps: ps-recursive - -ps-am: $(PSS) - -uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ - uninstall-pdf-am uninstall-ps-am - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ - install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am check check-am clean clean-aminfo clean-generic \ - clean-libtool ctags ctags-recursive dist-info distclean \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-aminfo \ - maintainer-clean-generic mostlyclean mostlyclean-aminfo \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-dvi-am \ - uninstall-html-am uninstall-info-am uninstall-pdf-am \ - uninstall-ps-am - - -htmldoc.tar.gz: - mkdir -p $(top_srcdir)/doc/htmldoc - $(DOXYGEN) $(DOXYFILE) - tar czf htmldoc.tar.gz htmldoc - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.17.0/osl/doc/S4.cloog b/cloog-0.17.0/osl/doc/S4.cloog deleted file mode 100644 index 1524381..0000000 --- a/cloog-0.17.0/osl/doc/S4.cloog +++ /dev/null @@ -1,44 +0,0 @@ -# language: C -c - -# no parameters -0 2 -0 - -1 # One statement - -1 -# D = {i, j | 2<=i<=4 2<=j<=4} -4 4 -# i j 1 -1 1 0 -2 -1 -1 0 4 -1 0 1 -2 -1 0 -1 4 -0 0 0 -0 - -1 # Scattering function - -# T = (j+2,3i+j) -2 6 -# t1 t2 i j 1 -0 1 0 0 -1 0 -0 0 1 -1 0 0 - -1 -t1 t2 - -############################# - - -# T = (j,i) -2 6 -# t1 t2 i j 1 -0 1 0 0 -1 0 -0 0 1 -1 0 0 - -2 6 -# t1 t2 i j 1 -0 1 0 0 -1 -2 -0 0 1 -3 -1 0 diff --git a/cloog-0.17.0/osl/doc/ascii-art.txt b/cloog-0.17.0/osl/doc/ascii-art.txt deleted file mode 100644 index dd56019..0000000 --- a/cloog-0.17.0/osl/doc/ascii-art.txt +++ /dev/null @@ -1,25 +0,0 @@ - <| - A - /.\ - <| [""M# - A | # - /.\ [""M# - [""M# | # U"U#U - | # | # \ .:/ - | # | #___| # - | "--' .-" - |"-"-"-"-"-#-#-## - | # ## ###### - \ .::::'/ - \ ::::'/ - :8a| # # ## - ::88a ### - ::::888a 8a ##::. - ::::::888a88a[]:::: - :::::::::SUNDOGa8a::::. .. - :::::8::::888:Y8888:::::::::... -::':::88::::888::Y88a______________________________________________________ -:: ::::88a::::88a:Y88a __---__-- __ -' .: ::Y88a:::::8a:Y88a __----_-- -------_-__ - :' ::::8P::::::::::88aa. _ _- -- --_ --- __ --- __-- -.:: :::::::::::::::::::Y88as88a...s88aa. diff --git a/cloog-0.17.0/osl/doc/htmldoc.tar.gz b/cloog-0.17.0/osl/doc/htmldoc.tar.gz deleted file mode 100644 index 390f99e29bd7b2f30778949cb055d6a928426ac1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1271149 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 z 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 z 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

KnO<(w9Pe)E?frZ)fWgKIg+UAu+9DhG{|!pF~y$ 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

p@Qbc5Yf({= zR{x#(cRy}ZzOEo@an>RF*woL@l}jble%^P#Z}WDa+U2)j)dXKn(kL&z{-)#<*X6rf zMM>+|tjfNy`%6HwfMB$%U;WQdsTbb92wd5%d$PUgqV%RKOy{@N2i@7W_QtwLPQRCH zCrvlG_+K>n5BK5taF6J?jOK(>Kc{_pFPQeTE??`f<2O#3THjA~=VNakOc67Zh>?^# zcWy&?eoDONUx(1`ugvP}|MxR9@49tMSwG)+{q$$NC*yMtCKwbgOqMC+)yvCUznaPR z?VBY#w@#Wg$!=?U=jWrJj=D+bg*QJuJ;^L6^&01~tDhH#DqdEe@9s7sT7Sm$DOV4P zzq{(DVrbvg_IvZ!V(Y`tmRkng;##(FA$M2g!nx-okDs~p=lX$$hLV#ET`$*Zew`RU z<@($=**Q5ZjtY8ubw@54shWlc#C%)pR^{}qbKl9EA3uJ)c<~~yO-MpOda<>!v7n;j z*&N|tk5Av5Z(Z!W{(~AH%efk>+&$V)uU`tK9+qG?GT&i?FEMFp%WM?b%&LEU~ z)$Z``FE1_LaO$Y>RXsk{5Bt`?d&ztLi2NJg%WrCb9C^IEyW#n!^(tT2zK^|VI`84x zY>VwO9Vha)tlm-H;dBT(ZMcQSRJGa`4xpUOzpQ@gF7rJHh_VTKjUq8BTl<^g{2ERYC{<=6_O#*Nm#4&T z9;z-szI4rsua-ZTD(M|{;#_#&Kl9ig9`Q|PJ0Hj|O^$nda{8s0Pd3=z3i|(ITlshO z+=sdgGCxixDUD;=WXxs1=>sxYT3g?9Y8`E~gpCB_Cd8H=Ajt zuf~@1yEaQ4KXh}MiK2dS`NHdBL3aYg{r6tX)!kCf=xkV)JU`3e<*MM?@)<$VK2M(O zO3%Gh^*Qd;f47J~XS)@jUNSw@qpwq06$%6ht2 z$a-F#3BA;zPuC8XGy^+7@&!0aR zgxc>b{$pg^)%EoKkxxElTefYJ+xu8e=Khqqb8UYtSbKKI9~1trYTefpggUl6wo8`t znnes z&n7Q@>gnN-b^Gf-9xr?P)7Wvr+4uSX@2ql5<13iEWsAu!(ZzB%pUrxn7WL=LiKQZZ zSH3P<^rbQ)6X8SAK%DgHg zY;?7gULN^$>5=ENwgz{{KjQa3RaF1u**#bIOYAMHmw!z3Qg0ury%#j`{Jcr;#m)P} za;p6=hzl#aEDCU%7#oqGj`_f4tsWJ z@}7fcnX5KVx2(VNbp>;iMgPKQx$z%simU_YeBv^^zWGg#{Ebtdd8YC0YtB|WTFd=i z7u*!wX#D+=a^oE1?|ierepoHq(Z(X>mA`lT`5n*Hh5n^oJGw4Y<*Qy)e8cR|ou12d zpKUlh_u?;?W6}b(Hm}&zRvC(aK7aDvV_}h&TkliM%Ihl^+h?jh-23s`#+w!&m#N%4 ze_V66sMPwbEi7rjzfG~35m6Rw8N0J4H^u){^11C>ovOS#cYW;aG!nd&zOCo^wzR73 zEtXU4YQLH_&%Q3mS#EiBw=Lhgbv2J){d@E=VR`bkPpSKLLqk2pKdiVX*>V5Fg5!t& zopx4M4qqR4H~W`Mz16X0K4m+e6z<5L7NZ@kAhnd&?cEd=nKf~SPtV6oIqt2lP&uk* zb8nsf^Dob9CBAljR9M{m(YKJv=-_-Krrr5B+I_yrAGuzuwKCev-%srJmX%61g?idG z=bp~A$=?#2tMNd2?d~;QX~(2k+S}Xbm&|@TtM<>2jW-sm{kR<^%KEKc62fLT6r+j$a&mHVU+OjM@^@>Z=S*95XZ4a2x9JOW;x*eQi9deqZ)Rd9 z_Tc$>)6?=Yo;OQfTtcp-eP6n3SI2_~3AKNND^E)BB~E$$@}bt;U(&mu`(Cf!x9jq) zD=y4Fa;;V0bgZm?ea*JE+_^@4`hf7pp@D&d3tn57S?Hguo&DzupJ(%`g+K3Z;(lJo z%gei8#(;0_%NDj}Jw0b8mj)jUymiov?>L{D+L?D#bL+o)X(j)XeywojUP?h>K=#a= zlICmYUOD;b(aOJn|8{@Ae}1C!+_#?`3b_u120eB+HZo2PH4X`ynbNto*{UcbKD7c5{{ zy=vu3Ns&EuzrUF~+*#U@Cv=uc=ym+Np8s#eb5c^CywK<``tnJrsGMcX&Ewb0yPKE{ z7A@Vn_4Dbs{F2YNh$cOLq~su)xO~#B3+17pA|IB z^6%ArS$EuSeqG!Yn-3ZsTr5YzJ9ej)J>dFL?03+zG;zn0bvFA}u3X8wGcvBv-+0gC zi1R0pF0An6@A^AUG-CS=z4;Hj4nJgapU3U(B{xa@mENYEGbTOyzwhIhOP4NPnIdnd zTe4`ss->mmhsY1n2WCEhuEDP9d3L=xtD{1b3X|7U{-e)Z=YRdu!opfuTpYif^+Zih z&YJ~`KIJi9^||U(_;uCN{O?T*pS^cmnH=+Q(SCzgJ^nVU>Z+`YuUS$OM{cjIkh8Zl zH;*Y=a$?q-BrU0zX`jv}EO^+{Q=QxL{>{a9L%x%^+@6ctL1UAi7qcru!wris_cG${L1lT znwQiM1?``Hzjkr{L++!o(<1gQ)l!+LQn0u1{VW&V{PpwHKR&HE+Nbe&^6tMiQav2$ z&$jEH`tl)1WM}TQBXGi+x?~VIPSeWJGtlSDGABKOQ*&1 z1TTnrzLd3*a4;;qSFr5aspC3-{p40;A8)F-dS+h3rXstn+Qmlo(aNvw{G6UMt@wWF z>$OW;zi@S3zy9Rx*)t+H!%O2$osC!f`@9QVcf9{0bH|>C$Nswrr_o~v!(v(e`kw7{lEABmp;z_ z_dgP{|GnwUf0MocUs>Jy@BXX)Tgm1Bx~lK*FXdeAm0?>y`9jsd)h*MucAczS%gojg zC1<^%Nr>e;|4F`y9)})qi10WqOlDZA7^ooO=pmsc_v?1o+jl8i2_pZOIs8;p#z6R*-GjS3?d=M^DFeH;f(Oy;>Ap3rG<=GKWiR-0AJ?JG7iGe1tSnd{Q7 zz{9xca-oTqQ)>d3n6uO5l@UU`dzE^&ovZV7p zTwD`u8aI7eAR1#b$MU%b7DtkZStCADq-`sYNMGAAArBWBPVeTMO-cC-j#DOGP+?+pKJ?f#gG=(@;{+wP#uWxLeU4nr z)OOlgal!VcS7C|-_Z=SY%bp=DN*kuVcZ}$c+!z*~q`Fwt@t<08s{Zk{+lsDr893(n zI;~L`ZCD-nat*tv0*_QvqL%CdrshCTkw;w;YeG-{n^kq@CYPd3pVK12P6IJ#)quhh zrW5y51hz;R@%bvRo3!cwMh2GEueq8wNrs=UJX1lll+P6A~dDHZXVfX8&*}k4>y6;@*edzc5AD;9J$UUv&qx8-8B6ajxw^fQeM2D&z9U1}0J`c3Q~HYisrp z;c9GY*VKMA)92yTko_ab zcJDutqu0-~e~f?G*m>XDdC9_qUpsY9n$2umy!fC@&ryK`OFR^q^IQHMx;Onm@YUM- z>?NLFo|hlDb?}tSo!NXQ)uXkx?c8f>-AgJ>%Yd{-}>F|`3CughB8}1OfQ&+-A}R6EHp9c zYGBNfUnF>7I;X;yrWEFOwMCv12lUmH{mwf0M`j0gvdJE)5R&B)ZsvRC9^Ap;ctXP< zhDE9*Q@+~nx96;RpVGX8opqDToY@|W3T`kwaAt#t4VSx1Q({s>1m^{2fwBo58~CTp zXOUW^z1nwG;e~&-Z1da_7|f3e7BWoVSaM;vh*0CXgg-5}>L#TwS(THs#_nbUTZKBa zw?d+31Ghlt0_{Q`F3A9M8OBbfp!%j`^HpZOSiLekLC9A`wVx}25@edJ-| zOX<*%;+o)+5fP~J?clS?2R!>_#afp#-{Q2e5j4m*6@QM7jhmjS zGci5UlHT;0Rpg`bW5zYJ{1|!~7=Lig^I|$8UZJ!>Oy|K(jTembQ`FTrJy&6o+Hm-| z{-+BpGE%%9{GA=FeY~Zr1_}oxJ$ZyURfK2EKh=DxMmcobp#%fBhn^k}9#yE!^J8V> z`oYKS&l|OF8(p){+%JSmcnB0^1<9$9WZ+sK|D^jbA&q82=_kjck)q|5?mS_p3n3R~bIk+n? zOz-#;vr6wn$NXr%XQwyMkt|^=>Evy8JGSVf!ix!>7F-N6M)NolWOyUGbWIe$1sA@N z{t+p~+N;<+hqF~NnbBJDaiGQrMLv~94DJ_Mj6S7bia0xK&%+50ubPxEc3N09Xd5tQRG0eLjbM7bQ;SuW=FKa&=%1X7F9IU}D4E z1{sl*@Psc6@0~XC*XTsfdi6^|&nN5Ggf4fdVrCN)K9$P{9y@d>Jn&$#;ca#f%(Q># ztdqE3Bw4aSwD}L4N|4Ket_>0iQVOhWGdNes%Xz2!UyOXDCYyLMLP_pK!UY2rnOQB1 z8Naz6R9JX=m!S#Mq}or%CVk2NC|YG_#Z{1;pi#lo+Hfp*qlgS^g~bm?l_a%`n@*}P zQ(-#sa%G8;*rSaVGQ6!z9xTxA-Wa07*}cU7kdvBi!iB4?AqgKXq?6Dga#KLsV#!7EP)*iclXWmHE4BNDY0VXYz^0XK79)v1+|83!9tN2 zk1E)tc5zAXS|r9)DX|e<*nTChk1u^ ztJ9IknH4%yZq--moNGC>kLCQyBfeU^+>+AF?oNgp5;g_dHiG;N%)CYBHj-5b1b^?~ z@#|DoPHUn)H}g#C zPOpY#0v}ko<{mhdV8z8^Y9s6IvhZWTBe%4*CYuFMd`j8&$Zob$M<0*LgGVYhLQzr- z9~kFI?P)Mj;#d;@j?a3dfkw+rjn|uYXZ`rRVqxF`o|QaWtxOx3pL{OS5pqpqm~f=A zEpXw>^o+#~+Bd(oAG&kW@0-J9&x1BB{uNqMGc4HL6)!Ca<+GaE=3>kc7N|b!>aX`l zkNmff_xbbopT7F0$7SBpRxhMyO_AmO-k!4I{(sh=cgw%mA5Aj&fA{~_`4%2LT&)f+ z#up^mI9(SxF}pH~2(+s{{!k({_s9OV_v`!jSJ#yPwU_%Vzwe)XGt)J*bN@H8FmV3= z`v3odkAJ`Z5B}_Ub86||{Wm_y#P!L?{O^D8qvY>@h5}bOdJHy}b3Z z_$rzAvQ>q)&OFY-p&14NG9SMyR84DZdD8mjy^eHL$DGxtf`VBW>YmmTId#0t$zD+C zalKmn{9_BZnC@TT(C}hK$mWL+Rz7&JY0g~d>EY)d1Uw3xG=Ed}^_j-$N+M<3wr=St z)41DfRUdcq%9Sl?%&NU!i&Z^$WzM048}BtR2bS5IPE80`zO#|-kMC`r zzTKNY{gZw5-fPo|lGmB1&X>HtaP9j3>6*Jd9~DX*(+as|bUgio?y*&0?)wV;<9}^5 zM_IJ2F2hE_p!ir%dgQ!4yp`uwt3{gD#qF&sTD!98y+QrqRUanFOuzQ&xBB&YlT3=M z{}x=`laU4qn6!ldwaj$f17r;{(0BK+D_Xf&u|GEsCA3$%jsDd#4B7h+P-hk zo4(pD{NAN9=fLsf;pzcFL6;6oN=Q`v{`Pj)v{kEC$@#?v z)|#$Mc9n16R=C_fcBj%cQ}*`5t#j@E+U!^&VU@OO;q5f0*)zFw+TAm5ZQ1+%efH}Y zFL=baY>ni9@8?}z-y2n+Vo=b?RTk+~_RVWQhw70#>Xm(I`SR-@>@w&MXX!p}zVubj zy*-i9zw4qyYYvtg9ErJXccSP+%p!XZTlM$7;zGAp%T9fK_4>DOSDE|&JeQTVcHHjb z?#|A_a-w>FyWZ`6iudO_h6n93y>WZfv{DvsjcegyzqIS#g!+_Ur2CG&MDyxs>DSr@u2~+w-^c)mPP*EpYv~Sgh&z@#F081N6hcpZ95B zZfa^Ir@5v(XkF#^+vo3eFSm6CGuCBLl-#%-WpBKXNc+Ik9WntH1;|or``4-iFXH{3%nYqrH*O&V~)R^;W z7dOwg9Xl+(+ZWB=ma}r@If3ZWt}KoL>L`>gxBeUUi+-^?LH8 z%lcl2jP@(DnS2hM6?b)C?yQV1ep|Zr=+^`FwJRkKhZTN&R+RTvIp%Wr>Y!-*FOhP5 zEB4EzUb^$g!YOg-%D~n(j`d4Y;>)JB%-QqgX7Qq}rl+5|y_tXb;@oYwvtO-C?mObU zZ=aY**R-y#YsY%mv9V2bbWFc=+1f`pT_Ub?m9O-~7Y|Nczi##AQ}3P2%jdlaTs3jx z%DsDA_wKzrO?UNo+5LOp&gK2wm1nW|t>|9C8dd%CcdlG{^lVC|%=G0=>tN`qhgi?(X;PHvPM>{Tp6%P4lZs^gI-h-LsOkLuawoBgL3F1Z>~le>Fk=gNCGZ!GPOyZ7bfiJt!a+PSxP zv&iRd`S|f>!R8MIn}Y?T4=d?%OKm?pXXnwwdFF}HId5hikYizY|1@V?W!M)sfj<&vA&wQt{(O{vP$-F}`^m6DF{ z+aI;(aHeEx+yyqP-ula8+Z`B>Zb|72{g?8;T<>yBtTXdhqsbSit^4fV-KE8~z4~HC zT=aIk-D^~fXY`jO?4O?8m{`8S?RQk?YBq;8el;KeT2#;W-hTddvCgdMlfP{qCWeOo zxcIgD&e|T|%SVs&HLk1vZMO4w?x)>(OICJzZl1r=dGG0Kv)_MPA(FejUypb3vWl;w zyRW}Dxbwrmtor+h1^?sDd5eju{(8PGVEb{ed$$hk-{O33r{#N_q?01|znq>PSX3ll zT;#^bku%3mS$W0!UmqSmWh!dD`1)eu$F1ASJ}>j_zWMxpp_)%W`^F3Pwg!O-bM~da zcKGewH7hJ^+cqQpm|ZHLRFb&de_q-5^0m2SH@9ZbuDqL0-#;zV);|4S{q^haE7zB6 zYAm^V+xXV46%UPqKmY4BoDnRR`M_|-n(UM zUlA%+sjvRj%zMG1x^CaT>^s_g&n(tOsn&cy8ZbSpabuNoVQb3;RTF~;zuv5Nbo{?# z_xF22R$pHoG#0$uZX+`Dsm^8XhXFW>1G*IgEDT%yptB7E+*v$@wUhOgrgd(F@@`<@y1#rtP_;!dnC{i^E^82N#fO6@pPyR` zb4WW`Z?pH^sI4bBckU%2 z5s{5^5;Ee~b5|Wa%W8dV?)Q-ASI#c5n=Km_7Q6I$k?0=txbh7)Raf*?ozJqo@Q(So zO!I$UxZkox&PPrx_Kw{wl0K6myQJ`9d12w_PhGe6{{H*%s%Y@?qZL(o^K=#RUcGs< zZoNH!#Hy`ddnVsvZ!`0;+$F@b`}y2AIrlscuAErNZ7*fBf15S;iy0XUg-cd=lssH` zd%N|@GWYrS^?T-8+e@%akoenT5Hj!E0bTcls~7dnHV?nLY^Czydmp;;bgZ?@+Ey$U zzIXG%^IMC~GlU6Atl0B!Mc?E7?0tIc?uVIgS$I6!Ia*!DQoOl_W6#&SyI=R^{gAZ| zSih#vt3X4N`P<~2dhNu_X%nR;ihR3sBIVoE88g;pc`sJsmen+T7HP8gk8}LqO+}BU z=~mwhwGei+G3OBCc=y_S>es28Wxw56uwLQkwd_}`PNl0dAKu%#apSVLSMSC0G94<9 zQk^q5x245ETwg8UFqvsXXy`=lsU>{sc@>M~cdl}`f0gp$*z(ZOkJGPCy3ARg!`GfD z^rd9^{!06)i>t*9wj7pY_xT|f`l(1XEcEPDF{Vb}UW@w|u9q*-id(&Z^1bWx7p>B= zKm6~-+AFX1>fXyOooDfI%Y(mt?^ZBkwi545PbNO$fBFZu9nIeS=l&a$3*Hq)!pj$xo>;nbMzB{` zRn+et@xgmE`nl%DUAmExl^lCm_dxE%;N{otel_Grv?{u{e9SGGj+^Yusv(}a8f@;7X6@7T9k#r#5u z;@RHK^7%WA|KCcETNkRNSbP4CyzWG?nI~szDs1*Jh&m!)aj@~{IVUGkiIO{CLna3c zCDw4ymWrOa`cO(CL;dcz{cE|VcU?QY=huq;z0J;6VI|iW>74I6Xg=G#!67sE?aMcF zNXPI90G3j5d>G!b1C6j+-Y}UX`8K^yI_)*W@1Dv~7jT%WDO${;M@pmv*j= z4O=B@Y|-|;%GY*>!V-_@{3Q?LbKi;W7nwYJ=EGu-<+Hf#d2D&bGB%#zv8_IIqw4n0 zocj|upWl9V|K5!)^@$anC({?)*HBA3*3W9IF z%k%%QkUuRL7Zg(S^-)#H^Udty+HLc$imqO9YW}2>XKyQZge-h-yKDRQz1CId3XFMW zzy12TO__z8|NL3T@UXLwCFWc-pUZyq?9T-{n(rH=dei=_2%YX#JME#&{`<%p?uLTgwco#9S@mwtPTS9XAK#zKpY++PaK?srUtiy7 z(cK}g{MRsTHs7-ZxB1Irc*4$j_H=%%`Txuz>Q>#sw*Hty(->;E$Df~g&N6 zX*<|F=1lu6r5U>*wKAupyDRJUt4ER7+%|D>m1I_4x|zB)rSRKZpRb>a3Li8ZuTQ%j z-D&4F^VG%?t{1aJ)!(nbJpIzesUP0#toZxsX>wMR(WZwBvKg{7*~9ABPI+j&)cu<5 z-ki#`ux)o2ES+>d)L@>x`)_wX{fD-yZ|zL1w(MK}#HQ%zRIhu|t*!6>xZP?F3U*&F zar4ey0nrLm_2)+ydq<|de7ZS(JF8sb!^uS--%gr-?TQPlZe8ljmoIrTEPkwC7}^N~{m$~-*2 z{rqtwExp{pYtm`?e4d*sHV;xS2B~R1-z)gL;@Dlu*S%Ul{(bb_Te$f7!&S}<0{y{H z%0C}by9=kd^ET_*KkEpY=;ZPC(VX{748ExSy0!J(a!s?J%TBs)$^YgXZaL%r z7N?K$&&_9d&Hkj_6qd73KvcC(=;WfnhyRGx&YV~&^#`?#sIVw*WISiw>9eMg>hiv>tfuj%Ymbzbg z@b;we>t$XFODx{7ayjs9zO%F9tg$QKVUrqxOghpyN_pkBWj;tTzom}_*dQuvB9%< z>@>|;Ut$PHoD)1CO{X2W=(i>Oz zK8ip7*L)4%$N4=^A4e8tr)Zp9t9|@j)UuCfFaKQac}6^D%M1=x`@LVS=V`~~p`FLNktg>#v%=?(U0)_2;5CJZ8(t_{zh&cgBt#PbLV2 z*s{HqnOilh-_H5vub&+J`7+m1x40KO?#j8RyOf=mSGwj|gzQBlgN%X`OINQ>Wt6f` zF-|=`$+@=Q@Q?Dn_pcdDkKZnn|19)i3SYNy>6b4htPk}*Kg&M*V9vC4>r7?)78@Sm z$$!6f?%rRQ&d&bKVl=JEVS`G_-@XD({@{OZdye+bPVd@gSx{WCRn}{MxrMyK+;6)~ z9S>ew>KcA!r%~RVyj?00;qKX!3?uj7dq1_Ta@+T3bFJ6Ay^Iieb6@uMmh!5kBBQd#whbdzs9e!0nZ^J~f1yqmV6<+btz!beFTTJml1>)$-S`-P*rB_MY<2`6`c;E=TVwYBbsKo$Wrmd|P$) z-8*rcJISR`!}HBcPrjeO^7k1_i{~{tIzJs>M0uV}?~>nqL~#3-BY}5UeZQ5yclEq| z5g#9SEewjRJv#Aq+wtnd%<3u^Zfy!W_215R_MAI^&K-UJC{gmjWuE0JjxyhH2~f zM`YL?dm!rf>8DtWn>)LVUCq;w(kH8Hg|5!?+IQ;H>PZehy9ysay1SdZR!{EE$3+2- z2XhndZA!Uxu$ZB(DlSBm&w8KyD=q8Zt5%PvzkX|)bua5~(5~#IZ$hH-_T9X;E%M*% zy?aj!>2gf`l>K_$(^?+G8C8@c; zxqCYwhsJ+RnET=AWOdP^TY1Nhyz%z9@ir*eD)-x#ZISa{SZ8r7DgC%GQ>5ga-lKhw zzm}Fxx)_jg!{h+Nza$;IqVEBs9<8UJzcnu~GON(j2)TG)l66ku7T1X}^EMQ1NMJgY zv-Qfh-tX5w*Ir$Dy?61~wxB3Y`IwR!s^UAu8ztVC*r~QQ_*dVHDtvyVbNj-D-zH7! z)|EbDGi}n^qx`RRcNA8iJGeyGf}3~ZU!yv%-t+nS=BB=!f~K_}7Bs5VFtoJZC^Tlc zwJAODw%UW!ZI^yu`F`@;hYz2k)*58T?LD2#-9I&bN#5MBN%2!91p?~L?X6#Yh?)?x z|K%p5+jp!?R*0*;uG?>slN=*cmG1E)mSLHU`quqRel)f8<$c~hn_>5l4~fF++h;xP zU2MZWyUOjC{({>3#rAbyGV&wcZfxWYQ5B#eRlu#+_;NQ#GhPx0w# zdl?uvuQ%Vb@~GFB#(PYUbU5tS#pS+!*LPhsQ~vaeQV0H)kP6?o@;3tc-zg?X$?2^0ohgfXv^x&X%iqBm*`q#+rV(7WY?vXViBxaUGs34om z%;+f$91|x`UQr#^bXafKh4YmY)=%30r@`^@q^D`i{qwElGFNKunGjfIyG14D-GR8w zmiOGe*;aoYpNdX=+QOfp^KN?5YQCsgYnGz&{Rgk^`ZdSDJBD#a#aFlQaa?|9z8OhY zmS%k~+H<^l-M@v))Ov5OZoTlLrKjiC@&1W7ycBbm_AO1Vbe(kV&LeMQwuawfNu2Lk z%j3JcTDaER&75}c{Q3R086IUlwVa-x?OsiDdeQyC?2XCZ8}DvSo-*mty`U`4J&V<1 zt70D=S9ZPUV4~WZ5?WQh#QOcD^!KwL)R#%+Tzwy1`u63`M@b)Vu8zNw?tLP~e99D$ z1ns%=7jgbvJooFNR`f&)xe{l5x*a z}cF%I}UswOR$*W@B(X*Pbzb#ww{HW=HO0Fh;k-agUEoU&H%Ss<~r#?JzyKN&EKs_YaGY<|M38Qqq4>cy-$`F|nH(S9liO zd#D=NVAtDM6u(2@;hjHAE+{@Z`Euvnn%++LG<)Ha8DiR1)9aLfJxF+es?WT5ahRR; zU5n=ry1BC6US9gme;&6eM4+h#%GwHB3Gr*tBG zjl{%-dIcx?%(%66%htKOoG-h&T~ly+ICI-Ew}UU6F8}_+|1N`bhp1k~lMe4+ae%{yr`QgZ;6?-~ z?vpGFzL`F~cjrgR$xz14x6^E+l-~-7XuSOV@0C={tDBRaNt^pkpEr4F`7C}zZ5O#M zudb$@wUnrHs}JsKJ2R*G;5Amq)4#1>zW+U!J5&7o+tvG*%v>q|^0nEUkI&BS3p%@C z^|9T%rcCqT{LOPy*J{rF9iM+#J(QMAJYQ5Cx;@9@hHGA$pXbV3L&9E}=hQ?-2cEv@onT-V_tq}Z&^T9=@41v{DpN<- z`uC@p_wM}0y=F~?udm^6mOJ{#=Jh{_WGqUm)!fg2eRs2H`tjqrf>&#A+?DPt>p0=( zWflG=Z0U>QU#`kG>uy*6wEm&u-BfvP)(x8`a<*qn@((-?i^{8s36Cvs zkLqtryLOt_*1|PHUHkKkpQm^-R%R}LcB$uV+tc;YzuXhS}s+44^BMmvuxtJb?eu?ds}gN)yv?i%_djQ=I>i<@+8IW*S$Mz zkG{X{|887ty4@-qP*XVLkg+7lca`-mLxm=n%7e zzf@(4-plx1A1=I{5Z7+txmi-$ca`0h>f<``Wx`9QmM+@7?7n8O&n(;Z?^#l3FGvfi zToM!5xNPs%(mP*X9{Kxw?~bLfiX7ibD*gH>HYsg=gHTRa$*H{T-mey_OBbt76S@Cy zPxJccxt}^GO}-O6E#%X$EoG6Kzj{wSxNM=*-FxPYmy}csXOKZ9aQHSH|v6&+HA4 zew#iG)a@5uC#{ht?%BrtYT~>&p&fVLeEKx`h^W!~UE1p-Qs+JiwOp|zCAYTzIA6Z) zUDvy3D}R4~{d>XgO`GzvT6cW#w94IEc6{gA8Q14OKX9+7XRc`Ju2(U~yRL+-*Rwy8 z{rKR{qTE}ne7?S0dj07W)xY;Y#8!MsocLXGp0?b~+|AFPO?8u6V{Y_lo^V{qH#>t1 zhZH8gzh`SFV0$Xsond>m-}n6`FK=}nX!tCe_^_hex&8XRpB)hgzWzG5Z=Yq&F75w! zO$+{~xZaa>d&tav@F$au4EO2?p>Y2-J>U8?(I{kJG1+_(%Y+lxvs8t=gvGHTor%pSeeD%(-Cs_uaxu` z*KNAdshpczF@O5Sl`B*F8;{O4zRI%vi7m?;>-2`Aw`W%_?0z-lBw=@H{V%qY3-iB%SvC$qR2+u)+}lF*`;$2+t!-r zh5Y`ti}UA_{VVb#ciqX^n^^gVbxQ5>o!gt6B^Nm7v;Rs8_W$&8r|a=!a;N`an7!q} zgjwCz3;*B!x_IS*m8;~lzkHjZwYuQ{u{Wk)C05+F+~QvG@}w{4v^v|hqQSL2v-96n z>`Xr&r@sD7d*8-m=FO+|T0UL1n8nrn%)YojVD1(9S37ba+Meob~w zTH0D%ZgFO^A-jX8f0Uc>f_L}2ySJVF6feG1UAtC&=9#16>va5l-+u70pE1eETk+aX zqm56`&NhD4-pp_!BP*`!%jet`_q9@`ihOQ5y8pZJ(wF=HN86RMQ#WNEeRZ`>TCR3Z zd2;K;smcoN{Q(ocNc!xXC2(Rv42xv*#Vsqf<0@+_gaib3Rjjq^dtmp!?St0VugjLj z{S`ZCAe4cwL z$M~H|9*uV2_ z@{>8U+4WbPW4H5jme{e*DbQq zBJZZFym;v)W2F*SVegmnP=_b^@`DL)+7%-Um+Ix~uMf`+mAAHfac4cVX~XlFciHF9 z$)>~@&N~%-FYvb3YrCrZyXzhL8&x7mZ_%FyVah@_| zn#b+xEo($lv$#GpzT?`HQE}z=y|cbW-}TnL4BkEORY!}6c=w67dotbj)t4W-Gz_!w~Zq5F6>)vH-nfFqS^BwbydjI=Lw~p+udb#;p zY(`%6?l&I{%KulJWa%B?&+}81(_?MjV(Fc7>fFgy@zF-<55B6-zBBQHc46VO*Rt2m z>umO4G_n0JH-FCaj}O|^#n-DXEg#TN`&N85y14v-g}yN^54! ztJfQ^i^hDovTcjz{-)}uZ<7DI{+b?d{l(XQ`TeiIz6NrIP4KBsPyL#*p*-yHIn|%N z&-0`0)~vF!%%7*7@zSC3(QJw4FR32lOOM?9{PE+xy*hM?#oC zowbz`7CE9@?6+!4y<5Hi!Oq}I+2R~>vEdO;&KD%@2v(ndlCLWyD5n0{0^b}|J ztXt+U^7p;GG;Oo-&8Y>Y!Rz0thIpKaio3`Dpg!$c(7Mp3<1*6kc_feC`QGK@@8i?c zefwziz5nlIJ&%c}&x<~`P}u8^rN{lPN*CT+w0CxP9^HIr?#zuFZ+CMgJ34Lki`RO& z>g}cNFV+3l?5_Wx8uad3YR!+mULA*K9rZGPF8a-Ei)>b2-o9e@)|K0$ZePD%z93D` zVAFy;zd2{v*b;Ka6{I;K746am$|s`0YEaS+-U2AeY}nBel#p)z!{xc358T zGCch*T3r10J=c9N^Umz3m$%)t&>WS=Exm9{B@M&iL(<_hG z%a}eD*?oE6>!+u;PfF|5%X{Cv%UnX5>(u)@O(xUt%TCh#{(jkJi`fgBnqKW}_GAcp z)p2s+LdL?vlZA!Hot+Qv zQhol=rF(1c9OwGj`OWD#pW5#yVPCgRc`IGQDw!X4ZHuIFTESYb$uqxYWw}&6ekyVK zK>MbDpC8-&dXyq?p8MCWr{CX13a-r$s`34O?$hS5-?zT)E&5|_R`&4C)$~tN{WI*} zz4sTKu;1S3&g#0FZTAjs&%dpr68m$>U4s*s*?pf!MejE-v+O*2FFCJ2w)phB!u0fF z%k7_P_Z+HH#l_EWIo)XXVj%wpVB2n+yFHu3q;)Q=p>m zE%CuiLbt2)Mqcg3e=CLEj1KOK-uUsTJ44p)a>eKG6h6tHn?7mF=eNCPvxKs~UOFjy z{o=GYFMhnAB&{wkE)>sQsP(bDqO!zbl!jKt@L+L`t zIY)bMjNz1-H?{QFYZt%EbZt!&k+L-Z$94I|rt2YmebF)L=kCF=6n6VOxxG9yKYVqFq+%!oO$>6cd3T_S0~Qh+rFzl zU3yF7yA@}i+tyrPRr#{y*O!&Sc3R)EuN8CM{d7BEyTk8$dOPz%jkeEUw`|Xcp3T8*f^5{5hcZcj;K+LFWKOFq4;pnny>a>msT#z*ZU}%Uj4n@YgT8;n#d~$p5D~S zzgTcQBQUa1G5zK7TJ7+?*?OG$>;0-OEZv>G(BsCf*ne!>`n4*<3y!O(u()}3y_)}3 z;)R<0>8`oEdCc!GTw3_{H*c}afkp?7t2q&qH$TYT`2FmhTElFmLw#rMe;4+x;R=5; zbJi)Zl2%K+qWKd zb$>kb>7m0?&8}D%w$yUX{hbNR?=+nD z5<0$b)1&99N_>nqTFT1GGvCElsC-H+Ep^_uefRwNN!Qb~wM_MeMQ>gzG$~$sUa(|G z|AwD08qe^5KID{VZDW&l?Cs5sL0JV-;XAGh`YN2gQ^Oip5UFr)-#fNrt3>hWdRke$T1^I z)7kZ77u~vjJO6If|8-lP3SaO(^S!=ihWqVWlY;Z+x`(E|)xG?+x1zH;X3sm{69=7x zX6)^HczIH_+b`(`&5-c0eK~piW=_2LQRnhsH-neTtAERu2YwY%vYkGE&cCpY>rO5F z@FwQ|-ruk1aB+T-)~^=Vni44Nnw^#HKhNT!^_^gbL;BwvyVB2lNodZK*wx!>o>KST zSNQDoxDE{+&6DaWySBBzyFLBC&H3t*8C&Mt6c}1-X?d-1SaQO9X#k((vfUpp+?_k) z+^-yIYwMrSSHG|1oilHq3*+6JrYgVxoY^<+f>M<5^VQS!W8Lg_l(|`4x$AK8NjPs( znfs};vLPH+#ovB@e*XUcZr;Tq*Ve>Zr)RufwI)GUcJ4xcc_t>NZOPMHr?arKi@U`6 zd!GFAZn{)1`!pMewcp>1uDCUI`@*1iAD(j5DYt#7UhA52%*WnFy|?Or%Z)vipV{JU zDmP`GoD|&4b@uSYm#gOHZ4YqVaqw}t>)&pBt69(16}j=BiGKDaA@p$PvB#-a%tZ$! zcdlBtj73v(<<-@Vx9_c8r?w#A_%+_^ucB|?h?p_^e!!H8Q+fYQpHQ0dPOCn!>ie0- zSNy?C!q0xx4>L7-#H;V=?YHl7xvj3Qp4Je@xV^ zyDy!c8+6Rgw`ZMmy`ABe_`h$uzI@((JF8dG>)&-Bekd1tF6&NZ%khH8ZkmQ0&;HN5 zJ$I(%msbZ@%3b{N;|EWp=)HRv^3T2d?Q*vK=)DLR9c4MrIGySTMddR-#kGFOJf@~r zmA;{UO2d2q@1K8j6l7F<*yf=BDyAx~efHyRPXgo<#iyCiW4d=j_+`QT?2~)eYMq^T zbf=V|=n~OiCQ`f}H|+C&Udg=7@T@{;0*g~*VBlkok82k;yU(}p-!VgiYxA5*SsNbS zWKL9{`t0`hythHZCWdBp>m;gPUHSC%^z+|(a#OyqwBDss)s;~baU+Ob-Js!j?Unhj zoPLBvJh8O7usQwMoJOmo#lNOq*Z4X2yixF^$zRW(d=s2d~KHc_jA(m0}q+EEZg1wYS+4TF*}2Nd~z0)uTL@#J@(LH z?UFCSv8}B}@}G6wzS(P3`B_A`E%+@zPjm08@O3w{`-PHzeR+AHnm@yR;o*|-^>Msa z)fPfGrk(o6zHkzQOA`~*n%vylhNi{J&a?cpl9g(==iHHy5;UCk#60P8;N(-Ki~?fi z;nySmvisIA`&<0zNM~>7vu0aXre)IRX4|*?_!>HM(#a>KyLT%8&AR+1D|ihL!)|k9 z=GIMf4nBK&INh0F+WA;rN$dZr)guk>Q=DBZtq1zHkr0^1`!8i8@+eaH(v-bcpCCY z-6P`T1zD-bPrJjbxW7&AJsLazZpq%t&uSNboGe{7vC(nn;)c%?*Tro=lzzv%d%pMz zliQN|IxGbXEnd|uSCz^A7iN1W>($<_59$k)&2p>mUQ((m?5^5*>(QNu&yF3uC-&gB zR_8LumpdCO+1GU5RbXc_3D~U^rGH-k^vz@0oPh869oTQA* zlo`3px?ZJuYIB`GS-rph`@g+YB5z$?vEt9CqU96$Yag<-2W>NmyqI$`?%oh zm3g)oIAy>2oDH?^FA{q@Y4-U}u}Aj0VZ0N_zvxX^+>7&lsBS!`8?e^W_ahdK}sAOH~_rWww z)IN-ndv!zV`a|)rS!LERz1v>JXtl3JecN#ttp|ysAO3sqb!Z4x_*0~xVK8@2tb@FT zB{TaZ$Ak%&Jl2>1*cLWXrqDbb{>7qccmp72MgQ&%Z61C45tiVNLT|WA3z* z+sqy;7nOamRybRrehnLs=L$~6m-ZK=4RjW&wWv;0_K1jz^74rA+Hh}wooA1I{?D&F z-^V;Uo^{|t%PfIe5m_Fa;~vERx_!O;`Tjp_dw+ZMTuxy!O{j44z{d8Tjp5}^&AnrM=WgB0+`(bO{7IwudYoFePyZEVycmx^dz#m z^+(CSZmHyJEK|=4#=kaflrrdAr0y2DB5JKZliljZA6_btR$u?|J^#xL2VM!+i*Ew1 zuqXbRyW`}lkG*ojD;O7R%#!W;rEsM_zIXjsgpxf!J2v0jU)TBn!5{PIOOCf4iutn{ zs$92AiATV$FWD@SKhEuetLqPo9||&pc9W7N4zlQT9XfuJ-7#%1bMdr)ZxoU(%r=7D zb93Q}4uLimZjReG&ga+9e(`+$AKuyb6JGo-`E~jx=PVXwqgk>_|2IB9o|TZ`a%_WR zN+`R#zk0?dj*V`iJO>}WQv2p3)>{72WsSPE;at_;m`n}_FU7j$OY>JO{o|c=pra?T z{Y3q4bFkhgrV^e7*RIa&3os0FzG1Yoq&j`q4fzmew-g>}7qcaoXI!xL)?Bw{CdZ1$ zigRat>)3d+j^(vTYbO8GTLMqZra9~|j@_or@Vc$eYR9e(;Sg=xiWeA4`eo)LHX;>m-(p3JP%-=>IPd&7D7;I(T9=Vs=!o_%vE;_~rx_AhxQCK~1l zNDAe+mrwkey^T@Xs7-hM-{9jcU^h3P&{$dc>>J-@T{ zERrzO==!(M++p?pPd(@NGQOGmjH~K}yX+x1UY(vr5oLSCJ}wQfUmh+n-z_W2G(qI( zCijc^&kY&_G8;Jg*5pX5JS$OGlT>*WKW93t)S8v&*Y65|s&fqN5jiArh4b&-8#-Dq ziozSbCUDIQa97kQ;kb}-p@-q_yk`$s4)D%0C@9)cT(D62*s)VbE1kerJl?v%+@bky zgACh>%AAxrvJ!gl1QyjC^GtWQ5_Pgvn96x@xo}JVw`7m!Z)~o~f>Y$Qzi$r29|gPF zOe1TL-)WA-lm&@7t8!NKF+Ba+#wNY>%9X1ETC)$fzv4(0eq74d){%RAO7DT=I+Ki# zl}!11^+2|5mLEdar3ofSH#r9D?)|ze%3+6Q$?3}4WZhC_P6xe^Qr|0E zzL=^CXsI3JsAW!WSvPIoG{YaWHa4<&pM3v6N68eTm6^9?-mZnOtOBNQ>YBE0+Q+o8 zV$&@>Ul%URYS^Zwd`(+gDto2V_fq#Y=7ur(2`pCJUlz`qHgVOuP1EM>l9KLkyeM*- z&3Ee;$85n@(pSIs3c9_XQd+uSPEfS;0`DoUU9XZ~HB1b+Y!ni1+Gh2p_+`2o(_+nO zytA4Z8N?WOIfXMNZi$Nx<iylM};A2_$n+B9#Innbhd zm~~)m$ocxY?L~!(0hf~JZt4D z>61z&yb8is9cD0G{W$vn*5#3V9*P3i*u zwutluE;s&?exnJik8M(9uDurFYolQy;aiwm2v zuVU$5Xq3Wo!S-`#@BV*M0XJ?OxG-aF?t=uAqZ=KAD>?*!y_&TvYSyb?t6oiDVD=CU z)>SSwd>|U-c0qj0u~~Vmc&?Zw_DZIlTadoskxSNrjIQM7W%m!vU^$&C5GBQty0ted z;CQ_dYt0pp*OTox>$sKPRga$ft8+Qng8A8hS1;&m4iq`g=6YOz592hx9mj7-$#kqO zOQ~MAc(rcF?+@no=Px+dw78WiZVqR53zU%-DgC#JL!s5+uZV-@y#3BM)IsI1jI>DT z(#vxk6v7p)cU$bZwds}c#?pzh*1BI`Zke=t$>Po0zFiMhlAbD^e$^Hq!gef3Mq1}; zX#wlX&HI?|ifz1iaO$qP?+yjA+37yDD2wXM4cx~W`mW0JzP-@K|g^y6LQUw;2NTU^-F zqhFpsuQ4-1=Z$a0CH+v|BGG6wQQ?I13JUcrlhnSn%N~gL*U~Ecx4a3#ra60C zK3?-~SUcU|UKQttuR>~Eb1yy0{=eY+--y~9w>b9;TkY3Tb-uY`v95=xwjkSweYDMw0>;a>el4z-0-+AuU+?UZ=QDBhkx6$Jq^?*OyD^3WYwl= zvf-RO3`;)l-s!P{eewlij)WUlJD3@J&VOAmnJtkt)yC<*OZfNdrHSX&6C=v(8{55= zAFRzu7LHyMH{sX9(n$$t6cYEZ|0*5JnEGeY8dE2^#wo55n*(xv7=GlwjoMgv^>Bp4 zq1vMGw#C9P!j4HzA`t1S|fYI9Rm%=8eN>gMt&LqbH-d8uK53Qwm` zO2C3S?3Wlaayc!#R67(x)J$F;DVk{*FB$AVNz}CNnVD0H%uJ_aLKiipwn;4K#CM&!fA7(ec38JJ}QsC&+YnAxxQ=W?alAqEFMhuxW9{^>*rB>$B*T` zL3K{6T@FecI(}Rqp~`jdeCMw%^FNETu36Um`at|v2B~>$J`B#u2?Z7}4t@(^YHVEM zVEyG{g-mwC+?jD-f;KT5h|0K)Gm6shzPPSVf1%yzTB`n;9|hnyyUA<{o9!3VWXOiPU>Dxg1e=_4{OEozaaC&#VIe)NOd^o4>%~ zoY2F$84FJ2u`GP*T_DCIdwJf!#}k{kPi}l9-yi!y&oJPR^$8V~Aw;LZ{jF`%anvD@pqkYtgzrph4+&z%To= zZ};~t6XJMM5#3-O*zl+#x?#In!=oJ^+rCRTJo<4y!G3;$@PYgDzc?M7%@DAE8>d5m z-tz}fIu&l;vg&!eVbZdT598J5{hH;#E75x+hv~=U%uEcjAHXs*Z6NgG0p=03e?acD;R|2A{qL%tp=9iI|4 zGY*`;V8X_0VcY7YJ~6}OMBoC}MeDP-Ci7~a4pcLJ_@&j=uV@{&($)Kx_Ipy;x^m|J zPv2p5Zsx#Ap3w&zGs(mj0VUmo- zCWf!;Q!+a?p1kuhxACIj|7IK3xF+VK_s<4D*lHE<$CK-?edz-GdAI!fIy=2L@QAfs z^*qCuAgN*0*?0U>0gqIl&$7n`ENmN`rKC9R4qWd1@a8}|Kik>gNj>+iRe9=v#CzVD zk$hyn<+KeO|L`9C)A#Lg_p}8TKP3ft8rzf?p3q>Dbx}}abzdyN$-*_$MR|cniPFQ> zk^;+Yg-xdLnSQ(7_HXM=u4nulihJ6)y6*pG+{4G!l~aAA^WCFYDgSp)u9sN`Xw1+08@lb2^Ebzqi9HsAlYGxqH>}=} zDf((N>m?5nws{8^1O=3^>^+GKjF5+Na!jroXFg*{_9Rj=NcO*1phtJT2^4w2Gjc zuhK_xpLh9_j;^nneD&nx(6)&k9#Z)?K6t5X^clxhFbbR2F$%lRvf)2Iapi$F4~+|Y zO03@Mh9^{X#9Y%FTBMr~P7KsJtS0y`r;S%hSd2wmWop-AqYV{YvYrQ=7qmNF{!n7l z_suumXwHi-hR*+rJx%vGv?=+fXxJ~^|3OM3>yMO#R2;LjvU=3we@9hQO!mBM{kP@a zSMIIwc4-pBtZOl9U>|E=*+#nXMOdpYW7{%GFi@!|O6htj<3?=?Q!Vb>IX(xLEA`UZaA zir;mIhQp&b+TBlp^$_OU82kczlODA89V4K#o{Nl?BrFmRMmNp_i zj&OZ2HTsK zM$^{3PvYCd(d6boYk5=8Gwm!kUE$u(H5G4}Me2*+o$Y-0ChK?XQG>Lecyq_YuhkY< z+~oK_)8a&Z-$^^W{ZilR6X$h`&byfOI7y?X)k4Fs><|<4BI!v!X$~wCjx3m5SfMk? zA#K8h1HU*lv@&xJHNAWCMXN8z~a7%TX@&&N6YgX-zBl!)e$@-U$#0n z02zA&1BoPsz7M6dK8HL1s*p`IIpQFkx#sKH_|S*qZqY)GQtKIenrD2p;D~SG z?Q+;{_&a?*=f9IYukE)S=i-fj%G>py-yr5kQ9-~Qlif=vIp{2U*idft!NsVzOU+4< z!F$m}PnToYKL;+5TQ>FYkAo7@fA$-Sex0wh^TRFeU+UTG( zxG$U9_pJJ$WvtPc{^)~|u}0r@Cby6`KYX5je%dp6rXov5pR3SD6P4aBl>|)_nGwtE=n93I`7&J|MPw4wlML8hDlfB^2Rs9o(F>@EkxQJ7cAh+P!V-^?0ufM-~U#? z{+&k||H_s(ufM`_^!}Vq$HUhnn;yN_o1AnkoGaO;&)}Y3g3Zy5^E3XmEn9dj(B#YY z{r!^}oca5{XxcN0{%Pgd&$WU5OFYNSWZyYkj_u!d?T2^P|5tUt3Lgr`y3=DV-*eo36KWYfI{^ITZ`C7T_r?yJbC9eNLYbPID za)0^K5AWCmWZs`F&`8Pk`(gjaHoN$-*`%K~`2IDrca_TY zS#z&Eef27f%Rf>)@>0;1ia+nyGfq-+^%T>zUvhJ+wq&5vO$T$SzfR^CDz9!``|p(r z+m4*u!KGD9G25yGvezw>Qz~3abvxSZHQycfcVg(SPY9&*a37 z=e>^jE!p_(>5MS1g^x|jIszyCs`bgv@=$bZ`U7r6p2YE>>g{V9oO z%Rz>DRswSl7`drCEp1a%C|DwNZwXUHYvq@SopwH#C0NWKg%$Qn3TtlU`w{Hrl5lJ7 z^0iNkSd0(+E7o)jxo=w#xG`7yqE&k1qH~@n+#_NR>(+X{ZsF?cTcPjm^`cW|_cePz(>XrWnMM>3K+8Uh*4 zJ>?WsI;vBe5TFvmF6sC^QmB{1gJ8n#mIBS?>x+U&F`{_8F#weRW{qL8{dM(z5zkm2?%ij7Zb>Ra~<+@BP zb~J}=-k5wtLNUh4VcM)Ihfg%N2zPqT&3M;nymh(oXUkps_vPkCJ=vsnrP|>9wMo;r zs^-V4@=xcVFtyaxHfGz@%DrE0VzyZaa0gv8`|3LEdbr_Yy9HuRSZTUL6FnfJHAmUq{()L*VDyA}1ka*E&FLI>enrcc&P z{HAKrb}-@cji|QRHFNql`k8pIUGdd(M(|^Gxp(S59JO2vqJ^b0=lU^D&n;WE)wSq< zUeIr0sm#5T_^0P?4OoBf@`m%@1w3j)=ghum-?|b_BS*uzWl4$aMR=$=fC>&(iTsbKQoVU#0r!(xka@WSJn|NiZNsx&=Pq}KRUT6gQ& zGP~{X|Aqf5|Jh#t|L5Q1|NlK*KT-bui|O(IA0PjI-@SSB!w>skd_VkfcmMlE_y7I- zxLm&Rbl?}m$(LO{-c6qT@WXn0{zcEO>{^-_R{O``&!fb||3#IR)6DPLnD6{3tY`A$ zX_`^&p1VxPUN3s|_QRT~Y<77$e8p1pY&ZXp>9gN2TVp@_S=p@lwO`o!?4{4vS6iQW zJAF^Z&-1^c(zs{u|NHgv{c{#RH^Zm@w3vTm^{+i2<+;}Fmk~3Mi}gEp`M&qbiQZc+ zu6G}0IP&O-yX1SdvclY4yN*4+q1&FwORU=;;n{ocJ)gIT_r#Cwn>VkRR{Kh?Dx5)Q z>Dil-Hq1t*Qqm2^v-xMm+e#U2zVx4i!zX9S+Z3itvHi;zZ)Y~)xc}TPaPyD4uUfm# zbhkZJ>UIiG3|MnN`;$`FmfCCa#h>&-Ylk_R@=2_!jOCw?FxD%Zq>dMJeHPS@x%K=;t*H zGM%qux&C0!O;6N+-k-x-Y8m6l6_lqg8mTP$ z(sT7&Tg`$$g7>Ugb_YqWb&U1B%51QNJ>kas^7@%Ry9`{Hrq)V+vO2qJ*Au&dF5?KP zfIS)}*S<16njfDY`1;so=E%;qg0sG*ELBU~&s+Rq@|r5u-w#;acru*=MMbU(bLBc+ z6cxEE>~*IlNn2y?5)WptOD&JIG~O|OUTyZxYsF%&S1Z!*y9l4!(PZ?F)75<8njagl zA7Rp1#`$zvQ_*GNu3V>?VFAl*7w%A-63Lo+jo)k6vD1;Ps;@ayd#8(wPKn#Zv|xkU zls!#F{ZsC9rRKWnXltCF7jP}@$aAh!&-Es){`KKe_S4nu+(m{F|8GWTWf@)G&%f?p zp0RYV_`{Grk6hwD{CcIUdf@N$n>S{w7G!d1{!-hNaPNS-#fI%7=Z`w>yq6Rc5?#%% z`)d6=rBwCJFFEpJrp#p#o?-TAdC{u%=?@lGt&H}McKD_v<(i)0bLg;KxWB1xU+MX}8*(>5m@?sgL z4{njuXS8tmS~&U{&u`g#?}4pFNXkXdzCx#^kNY@PlHbXA=e)`gGVb%eq;{H5Chc_Q zy<8cg#?C&&G&5Hx2{G<@OX`GO?QMcK=kfl^ow|GL@vR=gYiFpn9KDp)xAriTX0qi| zq20{KY!%ho`jow8Q)gT>`B=GpipIhj0(r?2+ZGFmUEKXpVNHkU8o{j_8_HJrwJy}$ zc%Z0-yFMwWUS@^Q8q*t|>Z(Pat2m#=Xt$~aPg;~`(XzJIYGH%P#8Z!^FxLtkJy34A zwdppCa_i1e_5}x9Jq3#V5WxryZ5~a#T7 zF7;T$$t3B-;*)bVP%<^F%*1KNd>I)}X=!dY<_y~|8BduaHMh3hE!Pu|1a~K=8(v_} zSP(p6MT3hE!wNx@jk|6eREXG>ZgWnk@m-VHX3d;+M`dA_z%Ttur33Rk_#`;p65Wn> zMdv(@V9Ytnz^J|9{wL*y(!y2NQr&-@HzwT=QEHv=Xo}Wb0nyH>hQbDq|1OJZk#BJ3 znbl#iL1*cNTLR}pWNvUAWcBe`w)^3P@|U*acVdJMod;i$}$sI^B(@|J+;zv)7P6H*W6ybDT4to1^9rZm&fF@ZgyK%#=5v-|DSJa zO`bt>B!1oH4E8+UR-`lKu#Kokb^IZ%`Yug>i$g){lYiWBsbV=*A#L*O^5hF`N3JcC zI_~0~7gUR1nX?}4dZlG9&z=!P8+HTQ1lbC{_9Skz@}vgS1pb*<3MGbC4lY15&jj)>(A+Raon|<%{ z&#C|PUHB5WKARM*xy5AGM~UTi<{{|~=X-))|6Q>%aP!sue7Y+2w!u`yP z(^*I@WzsUeYhF#~4$blixX1Q!+Tzf!FD`Dm)>*(VQONnQ^KqM%i{>?xuc`ky+1@LP z9$NQ3Iizj&>@|k$3m)sYKDG#*zwPY&P=Rk&(rn>-i;gcYH{SatJ*D;Yi{|`)S=C<2 z?5#pg>~i0c8 zA)#khPkY=M*&=gqQG(f|iww_N_wYFNu{ZUPgmQ&D$aXRD>CR6dmwni5c=VL_f!o+#zH#g@A-;f`*S-lE%@8@PW7byuLpPCu78dc;V6|eRjX}&ptvEI>7hE~%vDR9 zvYNTJ^FPeyHoTu=$fFpvW9i?|Of`&m`x7)mIla3lo~d=(dN)&G?QxC$yww4!&Dv4( zlGuH#+}A#S-E6h*{e3(B~F0ag)`Hdy|H_hA{1h*WXruiUrNp%0y{P07+AFtax zbp!voFslmvA71R{&c(}@_t!coWj+2Oz#6^ac6eshCzjryYPZ&kzIWC*@cZsP-gV!y zZ(ZKNyKV1o{@ZI$yxpcNcmD*(oj^%Zab0QUBa59m1E!u1iW2bUsC1Ux|1a2-b&snZ z^Ka#h4cCvR%semFy>Zr^gWPG`&g{3|))@F9;sZ zw)l5h{Y^uOxXYdbQ!nhiDKcg1@-JBur{*kjFa0&cep$oRbZ(jJFRQ(_zn$`DZNY~> zr|xUL_WSi}!r#|ge@i>!YgTSK9{0n#sj1?yuA=)@O*^yQjZZq;|9sfr{N8C_-1emp z7RJ8XCh$K&E8ROl)Afno{<*na)d8!PuHDbD$z{E_{_{6wdp6wP+c{^BPL4_Q@0tIf zzK9apzGrIA#P^}o_%r&}Xy4Ex7a!LOZ0v{E_2x4{d?8E zc@}EPynCbGO}t>ubh5&lX(!vu3c(Y9EiLz&?(@I1QsiIUhvmDub_kY!shGQ?&;HV; zxCLkQ&OXf-W89u#-Tp|6!Q}M2uET4>A6-8Yv+neR$G^*~lOsONXGs>QvFm?sd~{t0 zgC^g9o9!a?dDGoG+Fs~xD|@-SsU`SQjN>bol;(ReQ%-4Zo-AOkyG{MWvH4u9;qW6ua+L2$(tMdCuE^XRA`xb)gKMN)X7_=&Wb<1y6h1Sp%Y@)zOwxFz#hNz*3DohyyE zhE1HEH({Il{H?`e{qlQm#vi_VzhiaPW-rDY*WFT2%uQ)|wr|s}4DEaEk|nA7^9HY6-_;<4g>|)FaHNDFpu!nJl)|2<_?D+>GbI)Do7r4!E z<>+el*>Sd6&Q^OmmY=%1N-ci-p=obd|CF{=`TJ1dV$SrTep%S1 z?#C!u+W9|dUG+-;yx*RBzb_X2lb^XDyZXW$gZ-h+@1JVBCo%qOJndgTt-et1=l$3_ zM-o~&#lNSo`X_Z}R`u^QmC0f(^BzwyP5)}F__}=FMTgk`oetlWmpdO>cW#@i@E660 z#Xnasc1(C2RlaGTsmWsot~*x_9jTinU*Yu8Y4$GR&vQC%rFNND+|oHw(DnaY@VpO8 zB+kWq)%(X+nW`J*m(_o1YOg=LY37w5vsUZL+5fT;udr%=$bQ+9=fD5_bAo@9E|mD? z-QH(-|JI>hKlho4A3PJIBlA7MIbAD5u!mQ7ONnpEnVzigLJZS@$HN27^c;lH_Vj0 zYIE%A`#sORdcql}|9`IOzuAv<-v;)tXS{x>wV$cEJL~!(HQTf5;hERG3@&RQ{NS$> z%;eaXGUtVX$p(`xo30;{J@UAx{{PY&`s){-yDa<5^zya!jGuP)JIu77;9uBr?&g8@ z+)o3PMAd83uKzpmGyP%B!PKo{MK0T@N3$yf6M$F>xJk1*ROthw)$>C zPy6IgZOaTMNc{hkT*j}q%Anxq%gv`Nm$KAOKlxHzxom%3T-PzbnbTjrc)XCS&?+px z)zJQy%r7?Yw6r^VLbl3}e?>Dliq#wyvOfFgN7(!KbJ9J}$}e2LqyG7-`mA$bZ`=&o zzma*yhj`lq$vrdl4TL4XKTfRd60Ue=Qq8CSfhA67%Jp)qB^rXCBN)<;%~p~z*=}}G z`tI2Ro@E`nPS2nEowb;GXQJUBm9lBIci7n%3VjK-QOM%C(xJe*cK6E%1r^*4n`I_@ z{&>>WX0~+81!XJIV^ukcc2#WOcU&}VeIXgcI>FE86wA8B{Gsd@P5HLjAC*6tnwR@k zH99q?z;9E?vM>3EKJqfezyCZtPV4-kb%AU*>aKUbf#CljhU^=fr-N zjxFPdV;-%#G0_Uf&?P5B4_INMbs*EWKAFgGzFNkyYm*3@_ z+o9L~S98Bxqa3@zu8w|I#@+(Ey1Zc9GfmqVQu88>7RhcBHE4Zk!0cVj#F%gS`unqAf6R3)Vnyuz+QZp9uRgwh z_{F0D8>>ATwQJ<`x%v+&Z?v+Xz0dyX?`e{s`VSV&eifmUAzggRUdlN3-_L**_MiSM zcNtXNa8d6y;g;F7dV#orPxJQw3%>k!nA!Q?WxctqZDLbh;!C+F{hg(&eoICElQ{ZIVuDWaY64gZI3;Vk>FQz9NSopXV z&7Kr{;&=GAS=FKJ32)QIU3V0$y%;UlZ_hdX#@^D`%nSlCdcT@85+*tXJ8NzJ<&^Z-z24bhPG#R)=L`Q+-G2} z`&~!zOyi&RJo8)yW{TVTl}!@n+*eVb&7%3`Q2s{ikFu&#VU91>tw>|3b)DHYYu47@ zM+LbXDytO!FYLJD@j>#qp{J2VyYuha$`dC}eE9I;$|b$-Rn^s^F27Y)mmN;fyL(&7 zBX-x_J9mDuv3+W_nc?^A2g?n;)`RmD^t>iIPAy&+ahBum`hvF`l!65L>wk&w*!@Iy z>Yp#HdvB}`w|w|v?OyK#>gQA%?7Y7mR2Sb~ed!4oBcJvofAa$mYBV)9k3GF!o4eA{ zv~t0$wQ1|Pev9izspMQ=clUba@iS*+8ZMm5tInP|=kaDcpA*}@rWzeg-y4xQS9R$Q zrx`E)xhSV{cYm9u<1fRfo>FDDyllmKyBt>Ca*kUIHfWt)cu}j>o7v!OGUtL0tJiPT zSl^d2eKdQoy~6C|eLtU+vef10xSttM=YRMhw-uD_yT^D{&=Yy1c-F zz5DmC_TZ7#h<>~DMBTZoS540@Z1=qJF3p97n`^7Po!FNqX)pVrpfw#LV3>h$UFO=38kH|pQKzDH)8Z06MkFRH9oBptEV*U(t8es$f^ zg3Q9g!pfa1Vy*A^?%}`iec#enwnB#+%TnXFhG$k*1|%eWovRxYa4}k!MJtKD-)mx( zpl3xVM}p-|EwwnFwBMJO_uieZzxiTC+ST&A@)@F!_#`xhq%$jL-ub#tVaK9Hk21b^ zRb5$ndiv(>?r>vmP0hL7oRP`JCcF5V5`8;e|@JVh(gqaQJ`V|4& zpEE!DS~gQeA>i{YuQdyj^M5Zha4)nt`rtvr&)&bgZ=Ace&Bi`t^2>RXlssHZul@Nq zVZY98w(#fstfE3guj)o8nZNt=oU>++t1@Q{|J5{Rzttg?jfolO7x^B)=EffUB*G;q zHnZ-(v%i0XZcIy4)1gIr=kq^u&2o1VF}RT_vj6KNe|%3C~xD zZeMg)uVWP4b$nvU$$bmsVk%4B=1k$gHmzZss!BwJao4Ol`zJtItAag(S^A zwa%+#((zA`k+!$C`O5v#O-=iBF(_zKUr=Dr$L`KfX~~LQ_qwL@Pxfq2-^Z$}E7f=- z=eDz?$ddGWCZ3gMMi)*SH~1{9)_9_8QT$`}KD{XqSoh?y=*AxQO};vrk+Ci>Ql!~x zc4*%7&!WrnKiK~KxLD-J<%^uLQty28l=b&t^p92ZQZ+W7dY|dt{^rv8$8Js8{d{$D zO;hvTAePisWs?uZOmjNqEB8yNNp=yd zSD#+7(zQzbUp2S*>}jW-KKWv&;u7{OsGn*5rlOgT-6vnoOAiT|zjyV~wW(R6g&tOd zqEDyIoA*zH-Q9g=;48hC_0~Hkdu}e(W?P(ZE%fB|X`P;JCT7#j3?G(R8~+JYyK_6* z>!V5D{ht}~^1-aFvYq8ZI-J*UWzVn>eyks7qjyrNE<-eDwSB;a*Un8%r;Lp~+2plX zuDrVIPio17hOW(>)id2?&;Mr5o2tI^^uEs} zH9T7aqM~M9(BArYy-xKGdy}bC+gb{O0+&io%eYif9(^m}etv$uRNTUI50=-ZOy;ny zoigW6wLyzn?k(**6-(MUw|$it_cU_nDlI*DHAMTC`=?J5MPG&TAIdnz?MqC^2-sWb z`T1R@@7FH#v&XhHWLEH(Ja|xW>chPkSI_M|bCZ?Tl-J+U{1TIGx6#*KR#~4_kC@6@ z#mU)9m3&H>zG>5(8y;G7OpVQ=7Ov3HyXl!>tezf~_3HAWL(NaG&u2=k{C@6b*0tV< zV9TAlMn%zwzURbEQ5DjZ<#}TJ^xY}p1}kw@hI?KPKTl~YJSi(W_3lZ{oa2%CH@7>^ za(uX_ELYd>gpP`!jrjZ}kFCz1&nx=;RX3}4YJA+TzNVF?zP~+6-c-xYybwF_#Fu-s z&MjnYOn8%YnJa5uOx2S7|1;TkytZ3+EkH13%OSPvkK5UIe}CsJ@vvHUr^}^?oA**H z*Dk%ksdeMl(&oCxr>y&wmY2P~p=BOsQN8-iy0Z-teCJl@3A5;ZKdGs;=i!aYPA4A) z@AI3MJ{6h$#S54#>@7dtrriN~ay+hl)utX|srv{ET6Sx7=s^Kx753V((L?;g*a z?PM`A{5InOOP_`de=Q7*PM!bk`S>ftk?dLX%uB09<0l=Gk|>YZDRRB+E*Iy{%U7jE zWg8Y5FXUap#w@_&Y-~Ksm~GAPMjbD&&U?SzeWK2F-?zDP@ZCGv1>D7l_ms{vpSHug z=8VnOdwaCg|E_ziEj|10%cKa_>22nwKgBz%toW91GdV7KWYzUhwj-AfD{l5%)Yrs! zCJ5EW1f6kmQwtFZIqvZBnP{O`r4m!FG&dd70; z^QBAE)UN;JIWNO}N>5?In`M0qE^~W4`f^V#CRjIe-=P_WbJx81@Y#3G%%V$dx9lPs zo^OA%dy(IoSDPyL?-6WIYCG;V$uRxeV;-)^x$bRA|L;~cP4U_CBQm(T)ftw`dD(pu5|T5$2v)$ ziE>ICKhKTXcjH9#Yi{45SLrKX-`C=;4bau&;Jflf?6Gcd&$I{XnK^enJR|e?eaiPuOx8Alm_pjUaVdB4kDh5s|Pj~*!ma;5utC7Cv;v#Z;OH57N z&S`-Pahj?^if2qNMFJ@vMFn_-N}w&t>f{vx$6E(ZPlCEN09Rscibzkg3$>=>S| z^Voa;#^MDJj?Ct*VYpF#C(~-y@34t`H%>ofz4Lv^m33Qs+E;4-_mk<+wS2b^H1<>z4wr_SXKkXFGK&JIhIGZ(@0d05kh< zWxjhsooY38XN_*n3)y{_|I5OORi#(6+;%ihy7=hA^h5t;CUp6|_&4FjiwvQy=a;!0 zyI{b~!SVInVLqo8u6qq--P=+_)FKOa@UvG*uisbpjYq7uRbH}8_~xRA>nrE`7HArq zRV1un=RB5?7!kc|?N8DAsb)v)R-JhAWTBIrva0IW!|lmV&iCgodd|n6&Q#Eu6tsHV zhVIK%+YTLOJi$<;+F*4wHz9&6W@lpB{nO11{>jN#?n;|KF_F=`Ctqo@=X8%#jclbf zga7e0sunS~W}VG(n7=kATJFvZJrQB))L(OyKKP`2&Dis5(=#*AP4n(KAHEs4WxKH9 zy&kEjXH$LF>}H%Up?`y4_S*D`l3DBR)D-_sVmp|Ulkwxpe2X&8-mMufGR+Zf(oVdL z7q;`A7p$Jb{;Y^=MncteAz{zQljJ3;r%XM0C2jTB8G&-?T|0|5?6=gLRkhs8;N-8h z3T&lUX2tz_@RiY|=1+cn!hddS>s4FtYGf^{VO%L{knyBx=S{P9hP91{Hf*@_|NnnG-`uOq=iXW3cbuU@}bN@|kIRIex}6A{JV z%AOiQT3*hZyuQW#J^!0;=E>)aKmPr@n_s^6&hLHei{sXRwpw3!?zPQ%yZo2iFP3in z`0;US>3Pk4RbS4xmaN_2Gsg+jMMM=KMeQ`{&f-d+u!6@`d}*tbpau zGcvcnz4esSM}LCF+acUvnewsl^poCXLIl)d++FXJH?_R z7mCh(zO~`y5-|xjwa?#Lia)=KS$i+$>v#PX|84H7nSVLf`}+XDXkO2RS+DEvFVw4; zwl6w2*!RW1iDixNpEE5s-2CSBgxIGCf^W6{c>C3M_g>MKE-fuTKflMZS1qO~J)Q5P z<A3cE`8n&}pCT{H z-rT!*b^5nmvQb~PRz2(4U2SJ@e8RprWdiT6Ug+k!+&pQrE;G}to38D%y`G((HDkp& z8-x5WM%|^yjxC-V#?Ly9Z(;qGloH1P&WH|5XEx+R}OBXfk>CHCSn0Wkb{XDzv zw-(84zj>8ePY640*{IU!S^M$ALWa}+l1Gnn`i5%u%dej=QTqNxW$o4O z>08C5TicVLKK+}gWGlBm-rTr4X>Qts-^JJ0ZB&!7DEN0ccKyx+J9K3^MN&U4X%CB= zCmolj`Y13m`FNq$>qFVEl)bdWwjGs_o_f#l{CV4rDj7eEy!VSPU;6dQoP_ATx>wdM zy{D^UH!D%*&7XhwX58Go_*l2SLW-_1Q{kppjHiz5Y_AQxa_if+jb#&8hwWLLbt@^| zyz2hOol3bI3-`4?^-2ojzxkEN>0ROUw%k{XpNO;OnYdTRH^>G^nWyh4NWU^+!QQOJ z76}>8nT?f|ogMD(5-2n}z@Pl@U)=8Z&lg!d*kV!}E?ZJ>a{hCIZ(vAs?6q50F3z&L zzJ2;O8>N-S79EY2R>e z^U{NhidEzT|DWGIx6yp!%#T64xZma`)JAZA5)-gI+`O5Wr!U~r*-b{TGnYFbHb_3U zVO92_wB&cIujqH|*{%F<)}-3MUVggK$D(gq#%1mQS+Mzf*~friYGr5lxXua^l?zvX zJ1x>jY~|X3$?Snsdf#6Awra{r$83Z3Yv5mD|jd z+$B%>apzLr>Fn!-D{b?(^!7)!IPf0HM6$IY8F(Vo@#Ml*lriM*mQ55 zeVcqTBtNuH{=Py~{Vk_p9{c2L3%_RNzI9U#+{UVPGW(lLzi0ck=S+Lk&5Pf~UB7FU zx8(2fH@xBI<~MKV`MSQhDqCZDN2PeOS=f|_nWeW+^k4h3O-=o~4-eHD z8N(LXKc7_`=l3DYGxTxVyhVBn(?dI=R(@>AtVsO!#@|<0ZY%FZ-qMHu^X+W&&I)FA zYie>`lH$E|e38=C$wsBZ$F42dc>HzGRn9b%&Ea9^@9oh%xii#bx%uL`ucXZESQ^U< z*=!E>WKO@CYPoRU=eyjlCcF|q+Ez7P3tqnNWORJsjMqF#YcETDJ+pa9uJSznS$e_q zW)(KKwO!wO=4?6R)7s7MzOqcrE8Yd#-Z}drx%1(y&24h8bN*c8&(_f?(LWc$_UzP^ z8$WFRU1Vyt`MvvaY4QFue`7XH{#mx}>GRz0i*?IiyJcnVREgXF(VX+l8{gR<6@Q)c z`eeA~QO{+CPu^4KPfqR7&B{L6o1%8(ieB9Er>5zCGn-C&PF}kE+p)f%Z}v-Bc)oo7 zsGF%jb=i&`H?=j^X#Cu=gun-|wR#54L}M^R@KBvXlQF zZt=)fyqTeVY^#UYChiRx+k*4O8x7Wf)7-u8oXJAnBtygW)jVF#s)bzP+l6l}6I|eI zs>o?{^SqhtnxKy?d2K(hWnL0lFRX4JoH70B%J1IW+SYpHhZq#y<6feqqbFWt_~^+$ zpVdwe5&Efm+EWmdfC*mLg2KTkqqPXE=G zexd2U#Bha<{#?o9*S4?f{baYUcJ>;rcdM2i5V{|?w3K1V?1Y>HEfHI*%nB~}ns!Zp zZ_`&@|8$pq$MoEJ6?1QYG|G?J^l0~92Zn`{%VlP<^W2XrUvqV<@9X}owf3(>z1Pn) zGJN@LMW^+-lXF+BF=e{9YsIbtu8u|?iJ+O^^^R_>O`H2cu_x)-*&Ww*czpZ8WT0aa zv!gh)=wV~$ue3_zJn784A%*c7r3qKRHn)dW%A8D)i0jyCocHL*u3(Ag!>Qf3{O8sE z{8U-?%`iQ`=)}3`@^@<5?`~}T8F2a3LhtLkyPvpEj(HRuuwee2m=#ZU=>GO)JDs%5 zrz5rDN4HEb3wzMRyS4I8&fy(h`&OBx>)DG2$ItjDcxJWE;lm0i3rha{N&J>L{c-nZ zp@TJMwW~7^9;?y(5D~EVT7{#RCW|bPT>DURmml( z-*^{3e7HDeTjJSGdUvIo*HtnVxTX zZsktTl=;%>tMxZ~;q@sm@2%F43)^NbC$WJ^;;P}}*VpFrwXX8AIDdJs`P;^#OPABr zj~0kCOiS64CsR}~<@Lnx2M-?e+o~Eom+SwxvmCtQnyUipK3)51WYAh2=W|3@$#KGi z3rCE$ZTP^;d2#d3%LOq?$vjqhJ-`1R`=0lbSM+Gl^ywQLZyoMme4yj*tx3x>{4d(9 z*EHF;Zlj67PX8n8d?ugG`#AMH+e;3E?5?iQzc+EE`DGA*ry{Y)uxAyb% zY<_A-7Os4K$-6GPNFq&V8taCpggeXs&9%)F`!;`yh~yDJsTtMIruMcsT^8yvC!IPu z)3~nY>qgf6V}6?}IoC}6`b$4<`F6kAA*OeqPh8aOyYh5K&DWL#Qy$+~bL6_=z1)+R z_a5)x{Z?^NbV!m$SYqDu@|Qs`KfgYDIhDCj{`@?RRW2g?)1$uryLNJNa)6Z3YQ+u4&5jSyj8|+?%3&=;~L&PW??={KaE6=5;io1TfMhfyYi~p_tv^++di1cMwglz zbUWmIf8?5y_wG#X?;Lptztz+KPmbTI{P5VWtKLFe&)xS3W0`qM;)_t{vAL)9&Z;M* zi!v}*KKG03azDG=e|_8jg3Qb_6Yoq|nxFPfr)%$|153iqpB}lj=&MDPPG+W{eAB*I z1eR)}xMW_CXPXeXu)}AbpGY!h)+jyz?)ARnS#h3lU_V_JV?!59lI_BHW zv^mEv$SddMzlmLxpY_YY?AngfIpVXqx{Clw6aG(eP=Ime3pFy;lbJ6T zt@NMwXY#yr-J9ij1gCS?{&{k8$;*4X?}aWiU*CClR_v~Vg?HcG6`rPhdCn#S_fMwp zvQG3_2vsMFUTC!xo^xAv+W9@)GO^CS5v=JKEBOUkXY2Rt-z%K^sdCYYZQi?YbU%t$ zdAE1!g{a)zxkX3+Ui1~8etzLQsbdGiuhie0Fm>w6;>F)e=ln?(KKu3dcIgWrqZiG& zrIcU%>Cx@BQ?Kmmzr7LZjIB;6Zn@&oFB0jwTcTA^eOu_>c)LUCHW&V8cB~1ydF(<6 zH}_4=;A5L^gqt4Ge;XOTDPvvutD|52S6Q_xPLp}VKJlfNQ&->Zy!Sq5K1D6D$z@kI z(>nDr^T4ZBt0p`?JI6PAyO>FsrhLeSifL;tFJ5g&zF(g@PTX%0kZ3e~ z9rk4JNsGk^ulM|W5&XQY=iJ0UyK-lnUA6gSd3VQq2K@#1tDYDB`uqF!{Rj_^;>q*3 zah=;I{QFz$d5M{8Dje%yF8vu$@uO6Fnt1-)PPqjuo6W>;KVdDf;0r{CUQfBeYh@14yWAwFwjgQm?C*F3Fp-r4lm zIkh)C_WV1kBAOrhJYnVXCC)KSiybXGbY80nEA?2-naj_cJpS}NWV$18ox7U-`vT0PP|`6(Asj}JI9xo zFUCvF*}U!a3-he5N~M?Wlh?mKr#GjnsaV^5z0yJEj5)5mot@|GeKozTvf82e*gwy8 zhh1In#KyRU-JEM-?V>3+qp-9zRqe8Z)-mUdoUj-#F|pqK&8>~$x*HO^Ln>z+ELva}KdVbI`gYTC@$Y&ur>(ku&z?GSC1zUSshiH{ zIE_8@JUk6D?59o(JECW|?Z=O|zqM!OONYKL-okf0f<5-?Po;}1wqCn?;ebQ+-(LnA zf6MMJcNO~5-gRD1e{0(Qst|$WcGW(Q=dHNBlErOZ@7qu5i$uIKSd>rQ@OgP|sG&R@!Yh^Hjz=~J&pc{$r%FW-lrE&R4KE2(qlOs^X`SKHggm`&%Ztu8rj zpv~TqprxCe`%e9>&3fV4MxV4BH(D4SU-8D)O5b*F=(eLO8NXMbNy;j?dUXGjvem51 zdL*-*mTuDa^jY|@{C$K?{MLhJn)`+FrE)(X^(_8eoW51|ZRVZQ|KC@+7+k)*_xjrP zE?3{nOUed)RAaLL^k+KH(rZrnYk!1=6}(y6FRULIa{X4t3A1mffAqVXzVn@)``tR` z$D6;MlPlV9t%+uNW_D>#@q3f@ck617mh7$$za4Q~-=@Y+?)}t!r$n$`#MSqXG+g+BCi9LNPEO2GvQva{ZJVVbNT-rOE-Q6eb?eEF=yLYD8M_XoJ zV_)mA^w+9r^)>P`x3)J)In;TU!^=dwNuXOa?m7halIK`^9se5WLAGWb947| z9gb=K61(ErZl2w@QBHrJ`-ToK=l@0X9qp?Ae4Dak#-s*m^LL+{jyq_szp&?paIkvl zOMyMl{eS(rxz|SjyHwQHvsX%b9Sw_jw48Xiv^SUcr0LOb{2Y@Uzg?YP{_OtJE=~Ef z=dMkd==tfhvd+0p6$?#^m;LV+Xg0rCx^cVB>C_qe4{=Ag{>ZSrerC$q>srP6f#2;Te?QgV z`Yd*G?ZG=*cI)$lql=Uj72i#%yVUdd-@n4bAT9-yu)EgjZYOv9s~tVidNyVIwQF*# z*L;yO54!&BaE(d!+dkRSlX*h_{ym;LMd{P$`vFbu|M$+b`d_LxIWsBf&DNjmX50u^ zeLmSn@vYh8LnddA?3BN!?;&gU$tyANH)~ghQdyW##ic+)y|lR&7w&FjGb`{`*C|`{ zz1n;Eo$kHKhV!F7RYVpQ&3*s(L~~a8>7tc>xzohIw@ir@-E{dJw{g`g{zEmhZ=CoX zCvU%M<*HxDZmRE%E-vzU{Ojbt@9*APRu~)z*E%m>BK1^6%2u@76s(FZZc{ z&8?}Sx-9No(Ct6V!V?zMZ@t`FeX`Yj+a~{IB0X36Kkr_+a_wT{`cE%rEz*dz-D$pZ zZ#?suf#zvQkP# zMX17ga%$h5+B4thYz%zaY~uO+TSTjB_(A`inmxaRj!au?{N815U#Fe2R(!pxMMZY< z)E_D5&rDf(*kw+X?vyDrl&|IU*u^)^2`q~>PjNqUGWF49?f+6r&pIu({yjET`{~T6DEMdWo&6z~orbXZw8p z(zaOp)TCWja^F|#9vpmsR&nu{0>6ug6FApyZdH;Nl1pj35vC+{>T8dAzTC#@=@&lO zPBr^|{*2dN@5&A3Q`UWRdcKl%=BeN{+K-BRJ6?Hztyv$lKQDS-dQPrw*|QZ4TNJ$lZ^;9~YHI?A$m zF}G=c_oGXvguYiz_L!Y^_Lqcw{?n} z_;`&m`O}LY?W#v#Cp>syoSVx#ZO-f!g^rGsXUXvCyPB9iUH4UUmQGL2q_w&WT_xT| z?El*Q`_0S)F;AX$W^Mm{Bz||>q=}gs`Li#dI<#PWAHQd;f{w{-gG*nw-nnI7fAu&^ zrltL<8Ev-;DmipEUDW;hdr7%Q#=GqtTsz9&>uq3Z&ncffbL!O1PrV;hPTgkq)kM>? zrKEMoogEYF0t2Jvf6cw|_?6YIl?v7;Sa;l5G>cdN%XDVmc}7cfmtLRa`g+YXjs2V# ztjd*l^JZ3C&Vgv4)CJm&SNvdH)LX`j9r@4Oou ztH0lCp3m{eX==07qx7kdayG5kI2tP%{^{l9&O}}Bm%kP|Gm5c(mFo4jSUK6&XzKa+ zo!onSb{BknbacY@>hs#Gsx`JwV>|Za)RXBuGdjY}B*oTx7S6vL7GC~H_UY9lo2MT2 zfAUq^*Vos*N22jtfPeJnG~cC9C+_4j+qqu6*J8qwHwnopZ^h?-%X&1cl~+D!ud0fI z*9{r*hi9$t&9U0d%Nz7j{9JhcogIQgL4q1rKJ8nzVAr;3skyfCVb{1_ZEJp)eN&n0 z-al_|+=KTwtV%xTE#NkCMjuHzy>DM|=}W)Ii>E(K zJM5<#pbVcg0@)hTC&&dk>}i1iyyDvbSH3i z*z2s0_np(CGyOI@&5rNji`Ws`y?4sdU0)fV*ln3>eZTg{gt?KS^;(BknH;*}Ym-sq z)$Cn!XsLIp=kMdsU83LFwRnEBx#P5|#yZKj>eia6kES14Hs8B$mGyRLHSWwpGm z)YIZsPqG3Y?Y^uvf7W8Xe3Oj4q6w3_?=5{aEB^AAx+%(;=Vos|7d3I2ol&^FdH0;} z7rL#Ja|ATB{^Y5%u3dKYUg@Ww0+}x_D7$}izoI{NpWMqo9~Y-wJ-FIX*J&HO0Gpcr ztmzr^=B$@nb9lywhh7yGmmYuB^q+5cvbZ8(=K5a(CU1=k)jqE1`}R?wZ`0Sj-h}m& z-aPl8aw{wH*fBT#Iq%z+oSkh`_2a_s6V*qryfsoZ&%f8v7iX6=>+@gFb$SP`t1hoN zD<~*wUstp6M9ZX?t2gMY@p=Ydym;`z>-AYt%`R%C2YZe$y4AfY?a_4+^_q*;b&rlb zues9u`rXcaBaIU>f)h7ApY8t6mnCxP%9jtTwEx_5F<$04?cuCK&&-#b&2^uIz0|$R zSX=eI;oFngN828pm{VEsa`N5y_NLuopK5agxc3x2eGqhHxBlg5Rhf|ETX${ij7cf5 z>x-&P_3f?QwsHBlR@I_uTHChyYA!k#q-mCQ);fCDqjT%|>N*QUj`chANm~~#(g<6; z?acL$NgMJzCZxY@J7CfK;^t-VC^dzet6i_{_A>B2Kf>;BZM{2Oa9Lbt-Xw9USCjdk zSlJkFUUQ;*Yijx&)lm7smBqTIC+cI(b@D5(?)1z*8$7jGt#Qr2nfx?fHT_iSU4 zEBIES98zleY}M9}2X_}=oxkRZiIqj*%DP8##ZN3$KlbTPU#;J(*_pjsVCbmbm@vJoddV`t#%d&!b_R+2gE`}b(K^SgHsx92s^_>kLU8XWd?vtP`~6@M0;xV?RS?oL}yNw^NGO{(EQlx`%`W=gm0S@tV7}mErlbXU~j9a`RBxKAs%uXg#rF8Ze@UMy%gVTv@@()%jvz0&q} zlO|T1-@mie(JwsQy#C57>wNyFhH(#?Gmm~YpP?2}XC*13A~^r^z51=?k&!n~hp)f4 zZH+@t!o2zgAD6kh*xdKxGq0IA`K!C+wJ>(cOq1Ks<7KTltkb!oY{qLr0Z{^A>pzs%H{y4!@)xt&+qI_-?1 zzJ4&9a?{UmzL`5Va2->4Tr}-rw{(@K;cOX+mAI$7(|rmk>Yg?@$7TuZ~d;=W7}?C%em>rh6@)S@_vpD z2?=dvxIQiuf{(M>a;BPfsv*P!kPgZXJdN|zdzv)sxO*^5m zd^3rbusvOg*OorL5jlTz^OhF9J_+l$8y~*a>^8Y?%d~gN!d&jleht%?FJFGaHKFfz zl++W?CA^L|9rCuX(DW-kUs9ChV!}LM&q8L+($%tccFX>J*=W<5-PrZ{@H78Uwyz0KF3p-Z-YU3vB6hYc)!Yxc)(UeFVuI#2v&(&ZP& zG8h+E1clYNPZMjKSS+mZX={mb=c~0<`H!W;Izmrp-}$@ebI{(1(4Onf>;b+ZWsOk@ z0T;Y%_nPI`sw*3BUNlSXfrjX_b-R4@UfO879mc5%wtswfxN?YAt9vcK)E zU7fl9kJ_Zh`Dbn9#KJb`zxncT*GIF^>2fPpUcdcbFyA@E+RC6?eqOjA2ba{`2YPe9 zeR#O{+xbI3*MEC^TirCbbIqFew1i&YoUZnaM$-#se_7N8pFbhPDfM1OUwQJ!H<1-Sm%hE)c2@qyr-$2_YEuti zVbbPPvFT6{;ILcn?|yfu@{=oK_aFT0kDBxN_s^wIZI>=tdilKzoQ*qS8wey-JW;(EFIJOHiuI?@sK8 zce0mu)l?@rJZCU@bm#-Jo^mW@CTh_Di zUqSniWbfDgn-@uV-78xg@nA_;_8+}itKw&8p1r<(;QBgN7M(Nlr4?+iYB$~fVteZ3 zrbl_*Wt_2hHmAS1v2n6bjC9bUUh}l27H1C_r|npEbF1m&Tf90td919GdoSGluxy3H z+0LY|MXR?=nbQ47De`8i{4|eCrF>Q$YSHNpnjAZ(o>@QN^4-6Ag2~DfJCFO#-?mow z=7m+3sa@A6t4l|(HOsHF3*0H1xcGyb{ksRNmi~_NTQ1(UlZBoAw(ouGWe-2BbGw-= z9?IWS7{$z1eQ}X1EAO=~{{HSYm+}sdY6Nro|VFa7rt|9drFUP*-&t^<=O@9a4~Q1*<$HG^lsMVuAH!bPO5=K z(4naFuf4ujFJ3&`v1c96og*8Qk2|oP@5x`ZTrPUS#`irrA|E!Lxqi{Y#_rLzwX6Ot zVa}J8c6oGNH}ae)UwYH2BumTPzc$@Dnf83L=Jq1V7nk|Vl^h=}e7z|y{QFhm|5rKR zo>k-Hdz(1Z%X^y6&n;2WA+A4zGhfsk&8PR&+=`uQYKP1>TclKraI@6iGpZ_^`hFT?|1Z73 zi-rGezpAfa+rMj%mhRn&Yriwz-BY{Cxc2K)RV(vtFJ4tGtz+1=&nb4U)#JK-JDZyi zpZK^r=7jN{%kkI`dHzNr{ZD(FjG`uKR>D!n--^+$UmH_tiX;o&Q-y(?4d?8C3G zC$Ht-9&WQkp-Uz`DQA!Ftl+AWd9M=7%OAKi>^Fa0xF~MfVtsS5ot|%hx$~B5EOl@> z_{?xdnU&Qw`OVFnHf?h2lhIV06`h{yds}N?%j<|-vAbtHn>3 z6B!E&3k^Ms_vAFVY_C!)dK90>8^%wEBN*j6U@B9&hmH`!l9YX*rniTGI^sC4NfyV7D8?Qc-zP)&jUH)VH&0j8U;LpCc z&h)I!@{IWSXPLbX=XY|<@0Gjt_=M;B^dPlpo7*Xwl5t@LUoKcmsvg<-s_N?Y6_>OB zoPCskoxfd+Z%cp9>FVl(2lC3bau3Nos`8v~D`}GN1i??$^X)&bDTZ5fBxb1 zt)kubJ~?r1`wQ&SW;_c1slM96OMXUu?y7S$bk5lJ3ESNHAJCe z3w=1aNKt!w_Nu!9H+QCg=rj0R`L{hh|M~yA_Rs%c*gyYYf2!NbO)x`*hga!hhlLfZ zXFG=qmzcY9;)M_uIrm>z|Nj2`YvX#k&+;do7f7Em+h_YfutJ3Ga^}Cq2mc&j7*K!i z|Nkk|57}%jU3Dw^y1x5?#eEU`JyXwmg|^JtvStmRTWDCAZ#3^lSLf=tQY>CHjlWMNA==0yguBl^)vtPzck11{*;A<83xA~wmV7(w@F5C z6gSck>OAt>?0aMf&*POdon(xd>cXTpZ7|ssBoh4e;Rmnm!zY2`VQG8%1|+XORjNjEdmSWH`m3BJW#LwUY`21=JUbH2@Pk~ zYXpcyw@CFX$d|8VJ|}dn_<_OMqgMYpH#?>|ru^`=`zLoK;edFB)J#c@F2$oe>Ss^R zH2HVmD_MX`Cho9-j(pSYP=g?W9!`z+0}s#UJ~>)ZP-k+m{m*)DV+E@U7R}~npUU$J zR#r*plBAqN`1m*Z8*tRfcwLa*tjAyY@XygH6O3FWr!?vO*(fA$&#maN|4H-v#(EZx z;8;dAYtvk}ZApe}1Cy9?v@2v-cQjAy@q2&BqBs7cour$W?1#v?g`0NV4UO_PGkRQF zZ+nyB)e9BLKkWN{Ol@nhxjKo}q+9vhRJEIDdN`erUEXyeRJr(s&8{e>JN9Mwuj~(M z-uUZAtj59c?O*?evPOEd$*&DVaI_)9PI<43*U zi*`3ve|+9pys`j!kqEmDC?NoK0b>`uQo`l|(+3p-s zYTBjp^YyOm{5&gLG0^M2S;~XP{L*Rp)(<%^igrx@U#b46=0QxcDy!CHHqEo|diL++*O_;!ldYANzc1Oi@%42LAHMd?Tjnc_?U&5+U)I1ez3bot1tU)H z#fl$O?&S(q7)|v!a^b@P^UDm@HpZXhZ@$=Uyu**g4!P(MHr=^^(V(-^(iYO30k6wAfkeRH0<;ob&m)6pl?${T=%EYo@|K)1(ij^7ACK z?wC6mtYF)?Qb)P?#=C;&j^f(v$ES#}P0nK4mvPS3?cI^;>C)OaWYj(!pQ{(#uw0y{ z^|7z*77A9XyU!|kzht6~PUJk^r<$x1DeLYsdoo-V za{I4ZF7@YL;g8?j?Q0)@DF3#h=)(uj1K)qEo?^fM|7v-o_qTMxeaG#-PjEVZJGQC`!hERt1e>qX5KH)DRr0GTe{n^eBy)ecb%?I=Hv5x<<)*LWmd#2{y+Eh zO}cJ8y|@1T&XUFKf(aL_1rr_F4oq>-sZA(SG&YmiEMGbKhWWx()fZeRdfa_E>;GwK z+h66c?q_;hu`b&)@4NR;a|8ANYTI7j|Mf-x@;y~^3$={Yc70a26SGblJ^cCept-w5 zLf^jki;l?W^j&DuW?@Zh@p&!o|L?e@DUaCwseE%;zg9N}>EBfp+C9loW%F0_+?bpC zOXKwZE0%^o@niZm?deNTZrvRTAGOz>6IbLp^687bfBo{Ojfe9ZFTR}qB0r(zUux86 z*+l>UN^cc+$P0Zt(84PC_mY{_wp8yZYMgre@x(zwxR2%{BA2M-DvN zbuX7?4(Gv0^|i%(M`8s~Am&`Vry*&KRl>Ta6ku~`xY6gziKHPQK5OqTH!0VlV zu0Cvh&7Pk)W4p$m=Y9S5pFLmuG3Dxa|Aqg(`TxJ?`uxB32fx-E zwQ*D||8oA`|M`3WAH4Tl{*LX(ecGIL^Y{M0SAFPlA@7fC-%p%sIJjhjWbDcnpYQ$t zDE%o-K)Pp=$^KUj`_=DPmN=-e+;B{`J{tSEa<}58Jte~bgucJGlWSXU^W)I<iyb9HFu}Jw~1y;O`kXaEblWj-Bq8vbmL#uzIFPp+W2nsJaxu{SL8*`{hXF+VEO#` z&(9|_L|6|6z6{}FRZ8Bd!qeiq=tPOm#6IVRA49a}mj8XZtXKQ%*6H~d?`_FBd)=#1 zZ@;e2Oqt4k9F_GvE*-XO6vMmXeIG68n0TLK(fp-b_Dy-z-Z8)JP~Zy_ofhTA9wAbl zJ_;8#On5}w+uxhGUkZ$^T6lkPz=P==Nd?}jRxXXolQ|@WW_BEP%uo0@)OV3IoY zDAU8pZ$r4cK?H|%PYB%)n3<;(Geom>vB|~(}SnWL4DDS3?;E{#fOS2 zT;3{*3)d|&TogI$li6Ic^$|PMES)yJXWe_REnk;q%y>RhkueEoA=&UT$wunlw>FhOb}c(Ml7gE~YfW#;&6R z7eja&dtROrn7#Y+>B%SbCmuN<{Z}#Q@S{Qzp1Dp-ls1N#$o97@@JMm<=nGod3yCU~ zPnN3LZS0@1XX2DU`;|Gh*d!#4_?(>{DT>HRB$-TgP))pOp)|2$`Qyyk-ygral^uC> z|EAZ44=gr~Ez2i%2#B_;JlJ4iur9-<)9+AlfQZmm?eGuJj?TAiRC12s=vJH%z#=8r zd;FrJ)kF^mWla+%J}1FlkzrcRncuWq+0NYP|EQnQ(W7>uFoS6WuLYNAvwPr277MpF z4-JvMw`(5c&Ho#%`9~@J%j)cw{cYwFA}oO(EFC=$&G>Wp`ka0k`Wi|FdQNmY;lUA9w1nZ3p+q+|UzjmLU z-n%3zmAd1Pp6pvIv55V5$2zIwxgME?`uSY5jMO)uSoYz_kABND<|{t$Z1$OIr6&BN z-cjKcfBWvzpZlk4d=u$?aAJc@y|(LuEh65^Y`tf7E0Y~%yv1rtI2F@8(hho0dbTa8 z<7k=>-=o(n)qnVMzFVlWS&#X^L)pGp7L$*zZwXmoI7K8wMwPYeQdNYEz=DI*f+s9J zaNF}iu2k=K`TLReJBnW4c=m3Va)JF~$&E**l=PnYvg`QgxhnS*bN4NHSY-WqUF+;W z?pAY^H?!HN81wyM2+uO=@N=wEe_3oUn|UWNp`cQvq(R-uknyy1rO?|`?>D{s`+!%V zeDdn)ekVWNdSq(qF#Cq_F6YOFNnQ`GmrEX97ymy?WM!?(tT%R=iB%!KiwackiSZ^( zNxSK9b(32@qb8r*`hM`io3j@mC{Oa~TRaxOw=(|T`QNHm%-L@THd=#P$m;Q@A{QlvYs^59_ zcfOs9xqq(U!(OFu>t97(cYN8*&Rcxe(yIDe5iff@$@AZCp%34LYs#i)M~ENZzqDcR z^Lb3$SmPHM>RJlzzh(ZZWXt5_CuP@e2}GFxV|=>4eIf73oE!du3iARKqRi)8?2y~F z-1}eH?b;uY|G!ZQlz1@v!20=bRI1BZJYT)DOxXHYJZ|xQ(}#@JyzdSbw%>lyU$_3} zvG-4Gdmd=so4fbE_51~k|Ji>qF8T6*UH8M60r7Tj6LJ?OFmQcf{K2@Vn5B~8w#*`_ z#`VDp&YPwR_K03FwNEH=G#2P)eSc6**iP7mHI7Tdr{jzn6JL9p%kx>Xe(GDe?wPZ4 zh#DAvSRlx2lj6eq`A_(7wGi|3N0N%G{JYqWavuD3b)}^l%OBgd_rI~J3%c;;WwkpB z9i4Juz5JuCb&01g{}21oFjss}{Jo83x8;A{&tJR7eHHWP&(+qejXI{vu>98% z+0OjI(3x=pWB99%qj&0enCw*V*`@Twps_iram{k>_BZkKYX8VbO8)+y`#GIwf2!}h z!mu0phmYqS^axf^V5nQIaCgchHZOshStokA>wJ|%G*5rU*K^tw(ZTnw7;u@=0T# zw}8!`s~Leab;ORCrO!Ip{%-ek%?S)O8@w%>0-y6vX3X94{T{2_89)8Ce4mPVY@Qxi zKR;*bg(LH>3ElS;C@6nOC?Ko%o$(zdmMGZh7tKQP7f@P!eGKqC`eXT4Lcl zhy0?Vc>gXQmb!KFCw4GSwRo_5ZtWw!TL)eiTxYFb55K z3Paws3%vrre=CGm3n`VZ{_$LH_p5$C`J)f^&WV$o;kLLs|uA z>4KlXirBTKaBkeW;fq4U!xF92Z?^6EU3ziW?GO8TCRqiu-es#gyz%W?6QOrX`*$z+ z{o(RmYnv6NT^mZ-_t(|VRho9d_}JXXjrUjWDY)>crLO2m76YyW-f-Y<@6%PwwQr<2}2MY+i6T?$o*+u917(ZnVW5<`hqv{Log_ zxJ{SI&f@Y~&Udw*d&LU=zUt~dclgf9eNr=LMwd-_|8e`Q83*hb1549g*fyS=bFBBr z&myz*O+VQtp4&Z%i-Y0b^hFK=`CsbJaW0FCaanIG=~B$cKK;S<_2>Ej%}M^X?e;Hb zt^e#Hbr<4oKi&_t7ymEY>XLjg-S)%%!uk*Q>yN$W|7U$@QZkFp4fzk>?H|0aKXCtl z!+w6TYgO`LPuUsQ8uw`2Z{K3a5KyM|J?Q@XC0x&A?)QJq^IFDK{_F4g;?|$W2@fk5 zn@P<0uw)b(iK z2>~hoiv=bslHIK<45UP7_BlQJ_(xabUBm|8o-Cen<2Yj*=bcnp;4oY%EitPa+Y%Khl33zj5<4xBypIi^tm0FXl4A*_uS9!vgX6@ z5*Al+?O3|#Vg?s$=W$0Btw~->7M{$|n%UH1;9)Y+ZBeOQTE#}!{md#mpYPxkT5cb( z+%tn|rW3=Rqyz^cslJwli%(kcu=P3yofO!{zFB6|!T)-jOH3L)lrAb7wXp9I%1klg zbrR&LFcMUHVCdmfo~C=&@=U$~kKM1mKaVOKvS>|Xn|Q%PX_A-vB+n3?J~x%eCqj(m zyj!ati&yN)-@r5bYxJjVIIYWnZq zv|%)rODU_Lk?1zbv&4qgcgY0>l|C1>haMG1eO!qK5j?#v$Aqn=(~M-B#Qj!2(L3XH z>BbyB{UeKt_~$69@UHc(PiE$=SbX7QiPhAmrWX}PlAZ?=K8A2?i*?bG>U?#?G-gWL zxuz9vIeLB%-gCL$OI&cmMXS^4-~-JRDK_WU3=J+J)`fPIbi9zoHMi;syfx^OW<$;Ex4hJ+TcvocdQYapkK3a|g+ zB!w7t%?}$yUbqQ(-|twtM=UqA8GU8>4P(0_TLhY8Qr zrlUa~6L`P}(C(fMe zIBL=?%6W!snqc^eKg}j>37Z^p_#XY=ST0-O8yjmA`g%ds0YQyG0~RElQ1bFxAF)6ymYMhGlyeTV zjZ7-%zfJeO&T@7`Hb( zPBA7|v9`U>D7I^|oTg~d@yPiL6h#G&Tvk7^ovA5iD{H8Ww0N%K6t&d1A76KxKbY9G zh{b57i&W6WwYBr|B$(!(IX$8C@Wh22Ep?v`e0s9}!{5W|@)Ec!w$se9(i zK9?yTov&Xtp1HzNn39;Iq+sWzw7zUw#jnfDgeR^1x8c$a(--{gdu^_!?szWR_c*a2 zdi^IaRW{SL4sY)Tg@?*Ea$Q{^bIliO4MmN6g!vc5e+c^Nu+N8O+3F7C z^9|gc?_^eZR5cj3yBuX;iq$S%)i7~W&q5a7_ikrB)@!Z4H~&E6%awdvlL2I=#GHZXBKbR89C?z8osv3K9!r#{|6Hq}wAp##e9j(Xa3P`-9=P+}=MsV^tVqtA6+Mzc}WycU55N zCiM-SKAe+V4UZeE?-bTmpQe2{P*3qHv&L`ME1VwRQmSuN7uk5e-1flVI)Z7>mEK5a zLs7lSEejN5mTvHx8^s*VvAfC2y}>E*$I5>P!&Gk?zL30l;(4Po3y*{EfyGjD7&ID| zFE483JtX{KX_f7is?E=RKg`-WaoZ$-D`{sGU}C6w0<$hNp>qP{-U!>=;ykp zH*RT7kN3E~{>`C_`)%{AJ{j+`O=tRK9OBLOOH%jE{)Y-iS9s=6c%W_`s9P>9DRb*- zx!B76$&>Ou`dT#{UwerPR65468|XMCYH_GFDhO1vAIJ|(@@d_@Fm&mHSe^iWrDUtH z%h$LQbhsqB4lPzFT^AK1aHa3&>3E?7DlT4yu?8Hc#F^%>Z&i8McB9X8lG}<|Y=8J> zPhPbyMrZ0|$&C(oKYBIXa$T4dID_jz7Yjq`rU@YlYMy&!92F90eG~jJyQyHuYk}rf z4vXS4C$ubJTy$&ZQeTmtZq6eYC)ENRjYnay!0cS zp=HHmoorPmm%|&TSut*HTQjj(g;gT>uK{vqy30XcS+Myf!ubc=gxXe|OsJk_I)xWT4jY*fiy(+dX*>aa#`i8q% zNXYtQ-}-qgwksC*KfJHu=b*&p$`bRWjHhHr^0r4AjUJ9h#S^(BlOA&AGj6uov-(yh z-)Wm?tnR)pTPNs72n253Y<$u~VllJx;;v=QX3Pfn%8!<*Tgb#&ZdzrUTV9#S=-z&Au5&2M+dC&uA76If@XQ9bpJAueUHofI z&WFa=l%yOzG_mrEqM*tH&2)*4^Jb)or@x)?l?XxFDNZhan1A%anros(bZVBcqgZppH7nI5d)F%fZ5V6r4RDhvRG%Bx>;zkDC+pU z5qNaKsY#}}Q07#k;BMswU!6M(I93Qsu3qA}pZDuxmIM0Nxqf(TNikjQUhB2TyrRX( zUZtYt=|aV*ryQ3=Z=`+*nk|^})&0(uAcj*{zj_yXUJz%pu1liVg4@!&b)EDV&5fs=mVatV=9$aw=+ZGlmT|D46p;Mgom670% zM4_cl3L<@{J6|)rG2pzxdPX%MyD7r0WwpR_>w~uzyj7Sg*#4l8tuu@Hf#NJapU|mW zCpz(@L@oT{x2S5`9cJfW4yLPw+5@aDtu$O@js1I8oI0Wsli|Dbsm+@mlMFiLbmv&G zRh-CLu+j9~iZH=s@6B7>xD9eL6>Xz^O}5Nmv!?SP_k_N6Wzsjfq9UelKfEGQ_wb#@ zt2J9ZWL7TV(K|ikuXKaEqoKsQZ!rq}>@(9{UNMF5)ad=P*kneA&!tl?ei}EX=qMF) zP0`|NO-v|amDBvc{!0pane96vVg=7i&Fo5H$@Dp%O0pMHr$|jrcprPG z&SkLru&GCiX%;ny9;FMtHDOw1r5vyx^@MJwCG2S`QJrM${#<>DCoRU zGVz?>tv78hwk!J#y4p(F#rmC(GAo90u5B~s6$}qtHsvF;w~ynoU*!y;8aE>%+hj{k zb>5wDaJB#W#;!|4#d&Z4Ii14~mis8Lvw1Y9a^n<(<0)$dH@!Jfw6NU5(!sNcNA!tD zs_a6^89z*fK1m2#m_#T|o_xV!>UC%5sa`uRA|%&Me8FrV^uTCi*P~vmzf(K%ob+4+ zDr3Z$8+mt$-fcUzAYm=nxkme@mDVl>nX{~%qeAmnY>I4SF0l4-aNc z%}IAJ;?F#!y=d7lEfrNS7p_Z>r+a+L@tQ34yn9P4Gb4jjlFo#8Cr&jV-*R9{T#C5x z#e`SqoRvK{&(37#vgA6MyzgmM)V@RQL{@gIT z=IOCBYMZ@Z9}qH6&y@(w0LrjJ9vKICJ2eQwDe@6;y7L*ffQxd(3RbIsj( zkkdy%&iQD~qFno~ZQ+OI4t*2q5D_V6HF`Izy1e6T%bb^mlDfS&!rU>arb9|(&#cqWkc^TdPD&q31GEYgPl2vSrS+8l8tmVGg7Zh_V^r~A3_e!bn z%sX=eB2+7W9+-Jx>ZH|+(*@V4y;2uH_+M5#@sEO~@EVr4D=bA@*Bkzv)#ms+WS7*I zgk_=c4sYHZn6~iS+KJhPUo`d}@0~b}b3=lGcsrA~d-N0mww{;@0YUDho+&358Oe1h zNK_^9aj!8D4K!HR*yXZu;qsq1R#?P`%3H3oD?Y%+CjCpwc3!Ki%efWI@vEu>Gj;y5 zL@ZVaJt1(jO%4ID*y)^#iLES3?7cPH|isfS$k}{uKqa9fcN%Ok<6_fH88m;O`kZE5&*Se}?dBBWk>~eRX1|;|Y+rVNX z-QXv|=#+&bA)XTR?C*=ihe8-X8vGS5n>8#2XPJ%Dry^s(Ueag^l zaN!o?^i~TcJBv*R&tBO0dX|;I@(scF9gc5UJo(y5?H311FKm}#-^a|)BkPn{(78fj zjj4<82ia*46OaAi|9?P=iMt`|RR`a?@zDoJd3*oJ8c~_Y zzHEFiKJ!-C^Ze76zQ(xT-t%tDgSGn#0{+|elz+J2wg39LbOW93d~YsiyL@@iKUr0I zR^QGN4*wSwJBnpHy$>a=WR2e#YP9^x@2irJmVK@I`ti@V&Hsc_=Xd-l-1Fn#x>%`m zy}u04r~baOa@}s5pPKP`)-eIkpX@5Ety^7xan-#;e)eX&D)wJl{^iRZJF(Y$!oTZ% z?U=Lu%Kwm;TaTPfH}5@h-!?U-`-AuZJ!mn{w2f3JB6hxYu2-^*LY#o zSNi3}#VMhy=k?4=nmS>EfUU-DrGu$gUR+$<&VT;y+L{kHtme(0KYxGn@xB+lH?MK( zUEAB-WEJ=KRQlO(Z~gU`bUrxxX#Gp2jW=r_OaGl{)}Y&w`}4uKjYqA^-^EPl*k|`L zwQ%|GCb!M0Yt8=rOuu(?vvPU;^VhS>e{TAJ`-bV;ey@nky5spS{|b5TNPhhgwEU#) zC!Hg2ikGgRe|>HA_r%1+n3y>;B{SZ1s$V!GPe*nMT;YrH*IPCk_-JY!16y?0kv zhwmqte}CHD;5YNEu4ccvk^1`j`tUa#CuUqQ zP1yeE!J28Gg_Zywl3pPkX%Ra^b_ z+1bd)=gSgP($kHt*h{j$3D;j-XGqcw{AJ|5$BoOS6@%#7h?_WMt^pwpjyn23-T>8n6j~+dms(su4 z+qL+M+obQQER-ubcYo&0d-v{b|FrM* zZF9zwgYoq{Mcz7`Q`^<7X_Z0i$Tjw(KGG|u*tMLf9uy%L(dohtC%Wp6HlK1sM&5;hl z(pQJ(t6$UXt^b;Jf5qqZ>@zLD`u#5bb2j+#%tM><{eOQA?`Ay{_vTo{ior^DTT{H3D?L6DpH)h`4;rVWpT;;!+`ev%C zhHEVJ^z>eTHQx69R~oprlyo7w+KecxGWH9Hgb=T>tg)nc}vtS>Y# zXW#zf`03?-cem?Z3E%OcEB@}TnQ@)@??v}*G@SqV#bu3MKd#MPu}FO9&gZqu*5Azk z9eztc*IU@nH2&GFYekp)H*WOI%={OVH(ke7$_usMmcFwnML;Zg? zb*Z=dnvz>{A{DAnKDyEAey8i!*NJE9zP*~c{C?}i#_MYiotyvV)yGFC&$|10-ecw~ zx4L|AUuU_*>d*hX`t>F4Yj#{&fA8mIPyb8bT~aj6??lSn2uqQ?aUy+%M#A^Yi<+9e zfB$~qwX}M_;+g~7#r@UV-`?G>s;&3+?B@yRg7-;DH$QgOf3I`*>xWM-w&k&IR*5T& z{QsnA*^@uTUsgzNo*O^AB{%odFN66k`{t?(E|cLd5`Px0&M#~9+|3K?p|H?ET4S~cU1h92)ig0cVdmh|9G>$hjXn$OLAU^{r>Z3&kBZ2 zuhqP(!$fWOCH}veF71}@_3E4Rk@!!`U(4ml6xV;4yZmJIZ$5#i8y>&=rQ=n->ErXZ z`Rq0JItrCH^UI&ES7+(53O6r4{&m;ebnW~5H0K&VzW?&Ft;lX}n?9Eg7i(v~-fde- zUf&X}uhHB0?q84F&-8i6rtLd5J3{FDnlF`}B@w6Df^D|f>nEx4+ZH}~bZg4Jc6HbJ z+iuJ_H|O=MS6b&+ZhrOaYx;v_Woz3?9z9W;H(}rI?bBxOd|dGQ$Fy%{D|eT@d(yc2 z-rQv;*?4b#?>`@Pf9s{<^r_d)zuwI${Cq29enZXcveWn98rxSsKezhD2GyRP6}s!W z_x;%XW$WTdTeS&E`?kAAOgK>UY4^kjm&GbS#Z9Y@wy{XQerA`-Z|)CI)@`=czqxUd zV*0dAFJApWH|J)V`IpL7$q%PI3txY0y`}Vd6Yj*bvIRC4wHFpGKmR@E-eu$Wk4`7{ z%e|HV{d0r$N1w9C7nR@UrTkL+aPI8(%8E}Z9tVB*1Rjz*F0Q*)>{j%7nSXa%clG^U zGyA4x&bLo;zrX)|esul5|KFd?oBgeKe@59Qf1P`i53?}`sD0++)j#uV;n_bea{aG+ zKEAxM@p0Q1jp({xKhnQHx7UB9tv2OG>}lbdu6NI!pIfb9VcWh}sr<+ev4xYaoNcUr zCzpRyFL>vs`%lUx&m}qs2e-%Xv-$Y{O)O`P&-H)vmv0OSeH#?IY_Y1)$vd?dI~0Vx zC$tE(e7RG7e(ILVK4*NI!ZHG_{Y_U~(wcZUVvj6^^Z~g8+ocHdHop%bu|x9T#hw6 zdc|t%(<%P{UE}OFUyrlinBy4|@%w{WsTv>u8-ea<}=-E^m}ctZ&b>c{RIo7 z&b{f2f2wC)U*}!+zbews_*$KvexCoE>dCuP>&(RG+oZl*xka(AfBG5w8yn;IZ$2w8 ze^ShCO@!Rk%D=0lTW_=FRhaL5_hXmo(y5k~%bgN0`^wKbd;i1PS&|t-h9568ygK&w z#y-Q{n$zYMZqJXp^|12Ijb88Vp)0+;RlJC`|X3MVs!m`Sr`J?N4SNS{HLRMQpA9|qK`+fVjdds5*31_ZH z%TTub;MrNB=PG|Kj<-?L=qi{!+tFOD*d%lpbDQaBRk{v-|FDe*aYe zHt(8s@=tVMe7zX>^`5WKoI54Vs}?OZKXL9pf8O*93GQb$y!I)OUDC$LJWX7rrX=gj z*9Rqaf$!({^ZfsNp^N`m-^E&{YkDW;r%bzMk$CE@et$e`^R3r!*?A<)|Htom z|M<1~-*qv&w^d#3yIjn4y#N2_kXsvU)i3Xh+4$(sBUST1$>wfHdgJa@mwkVCcX~zh zoZH{yGOw=syJ*EVZt=V?_dQK{Y~{BXA6_-(^#1hktJVh9?x^|sOFP``?aaB?wk>G$ zpRC1u{M(wlJ3fBj{%QSsxj&E3Jo!6$_p{@BKVJ5GyP#Y>|HH2zhx_DhYp$%?@LhcJ z>c2JH!}hxR`>;;g`5}FMtlplf@yB2HUVO{@Rh&Il*M56x=7F~N`?PC5ESP>?`w{o; z{}J;m<}Bhr_S9tFR|DsmnNzQBx)ovb{Etc9Ga!1&yA$+cvu& zo4tPjzh8HD7MmZF)A(f9aK10o_|?I?tMBpd&3=34-)0ijLmA_wSad+HYsJdsM!kAAaqvI)~HJPp@|iot-ktZ|B$7S8tbnJNBs3&dx6T+8WD( z4+{2Q&g>Vnmx!OfU62tJtdjX&&^GK_w-u8 z)s+uL?-`Z9zV=|p4%VANzU#Fvtu;<(*}`-q<;?qQ-oeN(wOafv3xRid+e=uKX`Ps*ZF*3{BE&u)_UV-uh*}a?~|_m zbYkM&PrE|3!xvfBYy9O8Ey{Y;n)2?&#l^ebonyn-T$}TyB-rcJmPY;akBZ*Czcsy= z#bsC3@#->Z{i%BI+kK_YHe|%D{PpSixDXK^rP^K@?y)1j%UJ}TYC4`=jG+ySjzg= zo&Q{?q@>98oyBQkVOyP6g|3dhy{+_)&Z1q1vwS%(dK}+9tE6q^`qorYUekG&wZ9Vb z-f`cJuhpC#xxqfi_`mm=wSWFzUmwFMd1pu9Vn$~6Z5b6V<>i@2zP-I2929h{Pj>as zl$WQbZdEh0hPA7GoV7w6;e|Nip!_vJO~Z|M&t7>m^ZO<{A79UzB8v>AdY^~Y{`trk^6n_JwU2pP#-CLJ z<^O&jU2gyX&cnqI)*D52Sk9Uw=eulc%yur_gbO))k4cpFGDf>CmF!Ikx$t69`^1vQ zmw&fxk)IfHdD+*B|9`gyy7$S>j>+zO<(v|=EBU@!OyuOvy4lYji+{cOoY%TVdh?%O z3sZS#E#dF#brsM5RcltBw_DJ>{O@FrKM(SLoV}Ovu20NzMde)Q$Nz6?yI)V`>#@01 z*;}&m=k2vz+}smC3P@g-(-km$FP0em>C>mWpG$8)x{)lL%-r^N=3DuDpRV<8-W|0) z?{4bDTU(uXm)F01_U!EJ+uL$9<0FlY_uPH_%SU-V-^!IMPxQ>XHgAKyz4<(+UpCVl zPp#tW>sawQ^V_}J-5PopBFA%(9+tH;+%aWuzudW4?8WF+V1#$_t)3Uug$8yZ20{}^K9?s z)p`GwH~*GV@oRkf@9?4M6|)-37fZ!y|5|tI=iBXt3dfcoJSS`Y>-doc*K9U@_%rA3 z*836{KRV>SyZPsjs`s=7sS{uJ|9{<3^?K#>=$iV1Ll5FU28)~I#@Xv+ha9Z=s-WU| zex7Z#%=~+0;gg+hH?7Q-F#6x#FSm4t&-VQLetWBWmaQ;17u8$)|Ll&!xMnuqRq_8X zfBC{zwbxEpmv`-+S678gc1>L!7Q44fRPujwYj%fh?6w-oiRy1d&sWK8N{xKa$gK81 zPJ316>ffc(;(spuIuckj>7Z->>I!+gMN*OB8SD3L`gF#8v7J?ORZAFe4gc2I?SXr3 zpPid)ZO*U%#-h{xub;DZ4lA!o@45N^ z^OXPnicCU|MN5Cp@cRB=^IiU}ga6xS|E+I1{{MSSkix1QV`aHzhLi12wLbdkw*CKZ z+57WS{QTb5clhZu%r*2&tbDxTVNa`N)iaw@8UJ-o8~JakpXRvP%KvvgpXP_&32}3O zed&L(CTvxdtl(Y4J=yA8kHxQk>t1##%lTK!isW5iUJ9-|#%xe3&+M^DW)DkARPOV6 zQd^Z>&3jBX7uPP@a#&O+rt)Uh%lx7WV+SKoFZtwi1r>|*PTn}j%5(1Xo~OB=Hw$Ro zDN-_F-1=#az09mh6K?rkKIzo)`+K00Y0j4l>t0Si^T@cm=+1ivPQklh*e(1w$F1Ap zOuHM)&5YyQUKw;>WzW)$zru4xRb_8_s)DbB0b7S#@t)=D<{rzCTG)K7g2Pv8tB_36 zS&MyW?ICr^uQ~I~{K<_fk@oCYL)d5ONNO)+$=bYPMNq<_2^GQ7re{_7>!Xu9 z>nG&IN5y}??kH*7#CpNt;-{Wn5ff6H|HW#|(pku6RvUddae|4bAOBK~jiIv?bQ-u1 zFmF9|-7)N2WN!E0jmKmb*qhZ|v)pi0@wLi?tPA{yP0i9GR=P(oaO*nvaNVZgTWl-5 zrVE7l*jaBnlUCSV)zG5S{X;N;Lq|+#!T%So;Svg(p7}=qKV278XPME!x_tY|2}-kq zcrHX3&GLVNmwovGr!6;WkSs|p$5 zd__R|%7iY5k9`50W-D5{94uGvy`ePk=9Ra?UfLy-c&%141#R*(&D!87sm1g(WU-s{ zlxW@)Y_670Gjjr#eyLY=zStL_X|`fYmxEznz)G_fS3YgY6E|FZEpnRCyeQ^v7yk6{ z6v<}fuFsm%z2D07ZGW28i$qmn*ECfr-)khLbC$S)j_O6DgAZ7^ zGZng&bOVI6Pdg|Te(~JKVkV{ASYhh@Q*~$PaRy-xHx%kt>7l%OXrUXwK49xXU> zVnzmYk2!PHl&3m-r%aj=v+KjQJuYn1Ie1PmX`gD+F`mN_;iHfl)xhMrX-aY2QjYw~ zZ5{tOO*{p+9GJ+&prX3q(Sv{^g(dMnU7Hr0#c=9NCs>-E=bCaRkcU5_uYH07r^;rR z2TaF3RGc+-8}3|L$tGZ-|3RjaQ>kB1bB=gw(=>$xnX?wY*ko#d#L8Q5{x?fWcBM->Pa z+l@M!A15Sm&SMp7F4oyp)6`<)++n1UaxeE~q$j7TXaVQ(%Fe_Tjz$Kr5WKol39{2wCs zHQ6uq&p+nl8Q(g;oxiZA{ePw2$;1CEe#rCxfBdlC=1>1>pg>~O8cK_$=I_vr8$tMY3J;mM68F?*uiY&NQ znP%$xcAB_#8$G$PX|v%}b?I44HK#pEi4=?MbTIV_F!|-vZE@1E@3>9N!~gHXEdEbk zsq$a{TUns|1a`?eZuGeTkYUzf(2QdM;4#qaR!91K5jf+wyPMce#^|r@DTP{Jh!_&l(qaj6gVxmM-62tiu4Qvk6IMsc3 zOpwtHX;@d|mEORz;7ov$^9i0OhLVR}<{d8(67`(6@X5MMij0zOM?6%tJ3q=eF0eL= z>U_NB1gFvYX-mHt)m}Sl`Ef=AbJrx7d7`PD&Of;X1eWM9bE#J}7KFcS(K%`3?+}z= z5w}c1Z{s8frJ6ayE{)=+f~s!*i>vuGsm-ju1l3l{F)G+lVT%T4d% zklV%+Q~j1ndZuIwC8_8MGel|}UeMOfIBW9hGe?U0GAcJ6;+!LpIdP$;n^Hhxf#h-3 zF4t0)%4w{NcCYoinbq9PGfAGIM}?zHxuQu~lB-lufN9m5u+$Rgvc9Df9zqPIX$``v zGsPm>rm?c|Dsu6w?$EaO=9J)6RNrL8X302NvGbQ`Q=^RI=_M?urrh0hxwi6*5YrXg zO-3%JXP9R(3Avv((syoKrpnlx{BD-2fJ>)BVO!v={R$U%cof-e@}H$1(0U>@$|v)P zTcMiKv5hi{7fsxqqbwVFzD@~PRw)x|^{SIPd@%%y|#TJ%aPU9vw7oXvn-!qJfLYbSJv5Ox_v{^ zOJUuHsCfJT>Aw5+UHetx#BxcGDbnd%+R2*QtLuV4E-|!mG+;Q~AtYz)yhE&UQ@6uZ zy+iTKSa0bu#VYD*oV0V8I?YR{abx#^KfX~3ZDehP)6;DgV1{Z@+{0CZT&@)}DD1#Zz70GOb;; zbK$o0C*CkGyqTJ3x&B^8oR`|`QsqYrQy8qS9DG$OcHi>C-u8cdjVtz>&d|QNRpOf- zr~XFoD!yAA%DpQ(?@rpOxaFsL^>wDJN4Bn;xN2=&wdmHk>9-#1tn83b{Ose#!Yg1X zC8y@7n|1l*85c{oCeFaX8tt{`ziruOo3+($Rl@qPwOhj+bnOKEx4ylYyf)%v=U>Az@Q1*6dupnY;GDu8V77#g0C_!PPM_7s2B#v`R2l8BweCGJL zKO;Ztsa#-bkJ~0UE`_X@&TMQ;v_kq;?J@B2n5N8K7$$bS`EFpS%46v^hSHP;EbaLc z5-N5+(|))}SZ%a$Pc4*8_#PrU^O{jd_OM1JNVuJc=ft8J zHr-q|rB-pTXllHoA+&O%cmLLc69*b}x->Uth$XEIj&V-Ba!8Sxd6UMnBa0$C{=H1R zas>Y^%H(+OeAHHqiI;QICo#-g9#H0S>5`|mZk4%xu~RKu}i&)Q?WcKs!QTfdWuqKkM_~Kx8FPz z5SYUCajxRMlnb_kJSR@<5K^|!&UJ7*CMsbm@t!xxHczh8=(s|k$Ta`r&$iNnY$+)* zjT3!srYrq9w(acWzlk{uDj0*kq#nt>cR!*M?KSJdbup*B?We5WSzYcPT7G%*LLO!# zqjd*Ptn|}6I`2@|VMVQv$B$mF4A1gvGuSZmT~VL^!-|LQ_h$0EpCYmR@WVL)KeIp0 zv1oX+&RrVpelae;r^df*jBhve^k^U3+Pn4S0T9c;NJ`6)f4f0YXr}m@$;`VxHTdo5 zKA+IAmqYaMjX957y+ixvJv+nDwsul8qoibbQpyo)t1#2etK8;x2QSZ(WNF~ujL4_KDpxXmV8d~fQZhQ5lepSzYQ^3`4oNL*pVb7D~oQ}?5V9js3@YtCDD zafQ5NT%+P}LPVtXMn&TVi$s?O|HpIm9P$n|G@hRM>dXVd{MghTsfi9^s#6|CE#Ou7 zP!Z54`{d19$?cct89F9R(VADX{PUUvMGLNoG}^^7?O$3s^W58StDM=`QUaYSOCHSp z#KssoB_JX2v_rF`p*qh7p35`8a9H@8sPdQ|d67I}#r1=(wu`(s@%R`h=I>i++v$R)>ob4ox$u(Qns zv5Wjyk4Fo9c9?rHVzb+#FAluBG#20EX20Unb8t!jHV&@UR;$muDa;n)%Hh&th+qk5 z4Q!nu{PiN+Ll^rP{weE>_pTGlva?dWw?=*vOCFQ>M2XlrdSX``H!OLTk}zR{uP3Y7 z)G(V3S6--0w)4Bdx5A(}Xv)o`4JwgeJaU|zdNL-Y?af@F7?scG-ox3{$>%WXOw~@c zzLp#>tqqwy=N1X4vOQ&PW~k(zIx)qpV_9Oy_7}d(mbi2)D(+J^GDwtIVY@(1R>RzF z%fgn5jq9Fhw}N$QZfIe-{JP1bNwmXkl~WtYpRxTCcUyL*>s!o`ev#f@z?U4`iuwtR;B72Mr+m|Jc!+PQyu`L5fCTW`fW zE;c^oYHFh>aboEbrs-01x%e{i_y0UBG1O1+%DTK6~x@@j;B%6;)}id!J>g5!s* zY!+1@7i%O$CXIM<6`MRM0)VHeNYy6GiffAo#&Uphg| zf1MZCU5b)8o$gn#Ye(M1KQ0O}SEDxF+R1Tu*_MlaA_dHkUx-PXoO{gD^Z4(FUXEQ| zY^;2ykwubG8`y%cF~6`}dZTtaqi<}p{YKG@1;!a1o~D`F7Y}=$J2b)hZ05OFt13+& z-FDSR5)mfL5cw59y+z8-FFO+#IIqQLi>Cq2TO$u8@ z4rgt(a5s$mFe8HNk?=kP{teMjD$=>aQ$-a$7K`YZoOIfGX_|wQ_PvBi%Sp>Q`Vvj0 z`cgQj9Wy+awt1n5|3;P7Pczo9shGOvljJ1RRSR$3Ui@W1=hB2J8wC0;C5fDzY@_(a@yH*MtnGq5n;oA8*k3Ynu(i9&7%i^b>BBia zX6dV7u`pIg@9ej8*q%$y+weGRUdZM$o~uDDuE7>r&e~I5HGdR7)$*MG=0?S@5EEbd z_)S$;)h>1~J6M&tB}-)c=0jG-yr*tT&P(H*quQ`UYE}~G>~Q^A^}FMyym`afvU26l zlK5H8zT3lYm1HMgUb|HFdd7`^mx?}SMtH1u=t}v+m?TIcGKR6q1tl{X8ZbnHt|rD?76yv)8V6; z-|DT2d!o)JZ++_DzDQ!c^a)kFc&pwm*JTnvtr13T9*Ka!9sapb}gV}Zcam!x>J zl_PkRJ=)T@YUI0TZtZ=%b;mTvw_9C9rfuLW^LS_SlV=07_^~Y-%MNOaZQhtQC($D; z=6>5nsY%-eg{%rXqw)+YZZI#@)RaE(k9F6o{WXHC_;!Z+ORo3I5o?|N;o!^3-kuN2L^@VI4VUGW80JZjeZR9N7CojNi1+NXPY&&Dy7$A-T?5_bi#Lu%}?jI=$Bk zZAZGijwJ_L9G9Qtwcb%^!rY4g>=wpzD*CS(e~ioX{?fPgDi7NouI;A}G+bF`@Nu7^ z`TcV|>Gzs1tAA&i=Hxl$kmT-beit5bTfAX8n*GMYRVZr8;wzr zInRl=)SSU2=~$Q<^l0BB>6TYb>-rNFJiVTOFz@0K zIo7EpAH^nTv1ZkaHt^b z@YCeh?KdXttk9hGOrq&YRjPW4Z$x> zJsK{({Q3WoGQWu5cK4;1-`4W|Q$8W$$u{BZ65*%Pe>j+0FW(7#Y4ZJ-yyJp`GApgQ zbM+b(lvc>uPtMe+v9ov1+7Kgg!t~Paiik~UUr5`QLi2Wtq{- z-l(>y*z@oIKT7HSzCYp6`~O)5Uw;0M|JSire?`v6qx>81YOOR1OK3Eh@aInOf97pg z|JMJlfAs&=^MC){bI$+$Z(qIo_5UcvBiUDsru>y>mGxNF_h0yY{r{)@H=n5;JHGGE zrpXUp=}WU6n{goB@P@7a&*sN(Om4B+&AQEY{Me7bdVkj5nfZC&{P+Vp&OPUhK0eky ztRkd!9_X(W~vdH*H(q{U=i!bpM_F?Hm%4_;2Qc zeTs+uOnwI!DG3+s3BPjxx#B-h#-E?9*lI*$WTuN<70V2sQ}ukVaK3Ji(QE1CfbQAf z(|fn=-Zy*C>qo7rUw*ew+fuDL`{n(5tFKXxo6Qc|rsY?9+B)A|=ov73QQm!%qh5dQ zWhc$Kqp6T^?AtWyrqETj%6~R@Z_j;sdHMOP!9Q>RuhChOaL()Ti;IhG(lzI z;yF8ue;(nkd;0Y0-{a<=uk%Wo=*QnsYo7eiqhNiUy1DViutQ+Mt>dc5D?!{1-$ z$A@|G{jvS;V(s_a)Hun{IycAUW$zvy=X*_aTKu)%-TiH)@Bc$_*J9^cuJdDm96T<+ z{gd{;ce@!Mn@5&U|M%nZ+}ZcPTL*-gTuGArS^DedCg0urZ*9}fyP$A;+C#Qx#j?QZ zsv)l~&FHPqyt*oMdR=h6UD1iwDW(}%gaxo4Z_zx(&~LT7GrfBD>R8#?d%-<}(`ci+uJjCtFuUx&xr#;w`f za_3)Vd-U?lzOzg?@4PYp`|HspP%jOl@5+wC!PL%pXhGG z9kr)bx>fb{-`@>h9ky0W-2C5d{`L3kCF~x)a(M1OTijf>Wo!9ciIZ=2b$eA#=4M}8 zb91ZqB!vz++qg4!vu8`++4a@>O{1&eu~AoraxipVt%UKcvoxo|9AKQ zt5@Wsi(dTsdSPPx@1Lb_ZfxxR{A;eZdjFn^1bRb9J3-UA}J7qNMvbrff`(&$;zwtDG&9edZ_e zx0jZBJI-ZcVVUzsOZ51LCvzv;Bp-X?cg8*Ni^q+lGH-X+{#bycT z)^1qW9RA?1(QW&<1@3m4%ISN4z0_S*tNLU14#T-(X|v<1HFtYn-cike>DI5(%_%u@ z>o(2NJ{G%DD?pdqIy-Ftroy##+5bAOY_5K{?f2{3_H+DB?6Ex&X<^)}qU@a0cjby= zG4pou`}ZWT*8OF3KYI1g&DmFPFZZus8k?7K`%r4g_ubnsEw_DPYn|1Rccn`@M>Y z{hwhUFH-h0Oh1(U%cI4n2c@@9dACo@Zllfnx$paHF1&v9%HHW$R@21RYx$N4U-WzjuRmQz0=egGNZtl0=ni27BRp{fL z{_g72W3um-hF{#Uvo?I1cxy{d*#?V>e|skR7Z*LtdtdPE)nm)g`(taLoq5pFA%3I3 z?cdJ7Cm;4%*Kr?zZ(mjNXX=x4theRrrp(@bA^+F2v$0&y=0qmEj`?e9{%IDSZ6ie7=+wD>zt} zO|bd($lk5iB=xAOlp=aT35HrJf5ocI2-&G$La zMc&F!$;>r7W%gozZ=nCF)Bkop+iz^Wr?t)NREeqSA@|2;W?cN<>%2}Z&(FS0=hxxW zla~KHsUN=fQg{E!xNjQCt}ah58SnXc{ostLVt2Ro^+#S$c|PG%(~f6Wb+?=Se2q=t zPM&(<=$ku-9JS(3+b*83cJS@(^Pg9*;mfI_Iw+6zx5XL zhkN!P`@hAk`@Zamh268F-&4QrUVnbIexy---C~f5xTz3|I!ylor`*4r*dLb@Aan(4r}*VSE{|%yD4qezG`hPZ^znQ zyRNUiHuLxGin&XtPCHh%&+tmVMqQTUr_=6EVyi8Ze!N~I=EljX6nxe%F89u6;duS) zCZ?%z-*olDAX>%68ot0s_d-vYMjUAHjz2sbO z@7cF|6Z;J3=4E;FO(MA+6V_A*d;LEfZ1zPg^+?yR)Ma;!ENhdkb|iMldS_?d+db9S z)=bS-_y3%)uU1*;+1S-}em+(`b7rm(Ltwy)x!0>It(%w@Za=ax&~E19?fl1gxyux2 zX#1W19(J|j&UVw!m!Drf%DVj1=NRR4I;>9j!<2I) z2+x;G&Is39zvnfxE3!yPJtjE$<&MdYPF1@;-<#0)d+j~3c|VN=%Q-MH+^^fQk}oPhQI%t`?R=FX`QmfY5PCE{QJx|Eh1vw`q#SV&Bc<1!G2r3GFqL2 zkH_4+8JQd6`0TiUm2=7WTW11J-@Kh>(;Y7*wsqq9=bM9bl9H-!-}*Kyv$gU|kafkQ zmYa+AUOAgQ&z`@yAmY*M)pBCr%3h=t{`vCqZt-WX{Zn@H=WhLTsAaS4?EJ!noIq94 z3mWqyWvi-Y>%3pKJGU$K`Q$%5k6pD5`wiw!x??DR@99)S$=|nJ^^7ilF_r%Uoz)C?iOagXLtVm{rU$7Do%Hwm1mQj zGF`rU`u9cOH?-dK^q+61DQ#VrGoSIZ+w;1QCGnCXB2#9a(z|Ptweq6Ct=An_r>7~M zIJjTUhR-Cb>egc!^N{QHr>7NO_$hjR-pZM?^-W&yzgh9bW_Bsxg%@|0MyuVBnIpAN zbA|YZSU)jyzy8m=j{DPZ-n==pdd0y#aXIN-_YJ4&-rk;H z|Nqgw8?!lY%Y-;3C(USP+xk(y=*o)LirD?oEj6itl7Hx+0oV4*WF~0{DkAa`$E8(|sAsFEq0s?~}1C`t#!>o2-?YI){>`z)XW&sYQz~S6wtS z=1P5j_QLJ+4YE8sksIqSoV8gSlCQu1_4W0y`Q+x@Pc@B8zU?;L#Zx~kI_i_2fkG`y%;;y8ga(~}4k%r1ecfH;`{>o5syiaz)<=p?@Z&aVi{MK|m@ z*|}qJ{7U~@UkVeV-t8-R$h1Ma*8Tp@^85y`*Df=h1?sHJB+i*!xg<5y?yf^^)5=Vb zh=^?SXBQS`K0jZ)WBQr1XVc5yU#oihqG$gRzd5B@#cLdH>)+Y8_b1o)J=br03 z|948x!rb1@!i^hWRvsz)^+ovG$ywE!^PZb+OEQuOo2;(>#A3a{F&P=QvU$-HvLzD-HYCy_my|~vxV9E`)zms5B9j%)iUS0YIha8?<@NV zt4_Q{npm*dZrW!}pb{f@DTnDOt!!qS3x`(lGCJ*S6)4|08H7_74G zK6=ULh5O98lJCO;0wzq_;Mgh}@Jjgl{r^$dx2kIQPBPwIdS^*@H{>9^6R&@CcE|JlpQHM#$#%_ zwec|DM)UiBijr!(1*N~gspQG|-TLlb9@{JJUUlEuW?9#i)6G&N-R8W0o9_DZ<;$Z- zk2>6ukN@;>o|si&^|dvT2i6Lw%;n?fz8oL1<^J*I%&k@x1r-@D=J-19^ZjP?{r;6! zqdDjMIe2`yU2VRVElPR*)TYo=t-Tc4u*^_5YneinN>?Nli?jE;c*2`@gTu{;t33Dyda&{#9Edry6HO9ocr^z)AKsGP3bYmY;vK zZ&k|0Oas+M^J``cSF(r3|9|-N^D$-jNBn&P)2pSX>&2I~a^G3`+#&Vbo1IlhxzZmz zIC~}HQt`&gzkT+6Idok2jqQ0;rd@CLrY+DrVexX(116hE`_$Rr8NA-db>`2eOFjt5|glH zcWL~)=QBRmvT=TkS^jJ4%sD%aZeA+-d3W2iy=*m7E0%v$w|CFKkMp%Y+S{4kKezAT;rh~J|6lU#y7ZIZ=f(M-=k1>d zJO5eF`Qvt&(ErP|W^?wqM+?2p{-pKzL%c}T?KEXS$H3>yWIpFFzIA+K_^z&<20EKM zpYy%mq(7y*>Dg*;>u2l}`D_1A`SbZ_=lraX^-se0|6lC==)b`0{y+bF&d>i||9`*z z)$9Kk*#G=1-)ob)<<@WeXY)VLuRFDz?O!~@zjYHo{GX?*zAZSb;{Ww)(ck{%?@qY$ zWRF~WxmmU8%F9c8&qlllcZ( z-WC5pr*CAfGIrdOlF)v^siaVQeS+8Y)>+SU&!=s@@b+S+m9z1wdq*m7|4%!{<;*90 zDU`D_Dp}gRe#6_7x|5?Gp8Vy=+Ap-Xk=bo_uAGsT8OPseU0L+=IpZtMu-(&j^|thH^sD-F>`lqf(=TST ze&;ujwpnws@^H$(!tXaXr$67vP29fieLJ6$8{C!6Q+~z?OkiIO`P?I#ZD)4zUP4_ckekr-=6*7Xa7@gZ~LA* zr@7oe!+qn8bMLn3%FH%d7kSyQxPN(OW+v~|>*vq!khM}YG5K=zcWc$ZLht=LA8n@F z+OJDJJ#AanKkvyOL$_Zl`LoV#`ct_@5z*1lX9t(Lx*u+4lkMr)v2mwLK*27~)bx|8 zZpYvLluQwN; zJ);*Fc6PVig&w2e^Y))Z9S`=d4!=LmC_$nw_ScPyFSn(w+jv_QPJdXr{jrge(Y1B4 zx6fLCy!vM@Ti&#Z-$Oz}&+plvz4=4PvrDp5CbF%$+V5QQ`)f7R0{yy~m8WDUPDxPe z^7Xg1@SRYW^JiYl1Ic|g62%5uS<0on1rrW(tXgZ{eR{`7mmTUBJ51jDit~wFxVwJE zpW=r%CW!PdUHUog{5?@=>&5?{`JJ_%*<(4q;7i=+esguVd)-^ClUFQXeto%rUpo8Y z6)$%ssb{~IOEzO<|NHm%_wu~;<(65~uZvnd-YmA?|Lpng{Uv=N=PN!i#7_C<^5Xe> zc`2bu6%UHv*I{Z;K?wO0u^8Oi9CGGwiq+jd~yL~&ZSwo(?KkoF!g`0L)M@K|#(f?9XdSm;P zO+M=_xMNI=jGQhquut_nufC=3P3^C3AKt4(dmWd(El{!XYiG8^(_4oYtFJGyx$ZuB zFVmmsguQR)_-*o9xis)wjrYHX@5!e%0?(`c@Z&7Icr#|xZR5#b6IWQ|e1E;0b8SR6 z_ZQaeO}uGOs?y8P1elh2O0N(~Ei*ZLrS+%H<6{k*KCl1w>VD0%h2`Hf+IMIB>5JZd z#C==W_X)T0IfLEqI(N$Uxo>*=>wo4xTY(#ECa*tfqIDMIr7A}3=C_Q=O&)43QeQlyy#E(gE1a1y~?ee1TyUKje^4(u9&CM%4 zQn2rz*6rVt-!IP!+_z-^&rfpCx{KfEL~G0JnsTxJVG>vGPA{9B(}>((dy8$mi>`yiaw{`D?xHs_n)^_w{df%dOQaSsb!)^#-)yuqHJxfy_~^*Z9y#{Ihcs?la;^^biBCP^ zdpS&#J!r|}?|(Y?$5#H6oBy=2zu06~rTG71$?m#<36-Y=xn`^^Kc9bL%bVE~=bdfa zz5Dpn*mIuRSxhb`tZG)fKAUUpKDYQ>x_#`2!mp1$u$-?}du#qRHtJj5tm7Xvem{9& zySV0-G^hT$;M)tgMip4wo-6g3ZzuQa^J0t6wby5tessE8x_fU?f$Gn ztGDy_rCHC9H6_|wHSX`X4yj2M*c|`#(Nv@UvwYj$YOed8wzceS^Zk9r>fa9v6(8&9 zV`OB^zxQHS_PP97MepZj-|Jl<^KYeMYySPcpXGBlzk2acd;0vC&*s1W7+I+sMc39& z{T21|sr1zPD^gY^D^5;jU(1%N8r?3={N~o~vb}cJNB&jZia93uC$Q#pxBeu?d{%b$ z<41mc-Mgvw_c!-`i`l=pF8RNiw_!$YiWGaJ%dl`bxQZBX*Cv!L+i@9IkPa=H2k zPu5zgd|uMMIO5C#8QU@+SY~ zcAmI&?AXL>cU_Es$}fAYwE0QkGeymQ{ht!LnzkFWuW$114}O2=<-U74-;cZu3p=YR zw(z35f1TC-O}wgJKc2k$;c(67TiGk#y8ES(Cv|UsKc%nJV^hL$X8oap*^if>?#ks` z_9|!Jr*Cg>^GdlbpFX8F>d(#!w;xyZlf~9v`nJ2OAnM7aPm}hj`_JQ%He2(eYWEBF zrRSZ>?{P@|diXDKPyGJ6LpLrxv0dC1Gv7KUnSsqP>Oe~|JP0V9%MLo;qBbu`(nQCJu)*lq$=3y?TmPv z>%^`+bzSWJDO2w4EMETo!q1QL@|D4D`M0w7{QkFbr;~$X;19T=2&H4)7iM= z#j5)Y)J~V>w5)k=<8RAx!|=XoN=dxF{`zxkXYD`d+*S4MO=Zl4rRx?J8o!TKdhQ#f z@aUx6uF21C?9K>3-YWdx{pIcb^&i{$&9`6te&qOhn}pKu=jQ&n{`_{vuUq>or$qdF zmwfw4`Xj^SV8Dr?_RlQ#79cz-DUn;#=u& zi>v3pH4NPSV(C%8!-?68?*C;~m$$3g5xm^bAy%gNU(mjYyXk&knoItDEd1;G%kf{; zw)u8;-*)blt<8B-T>Q9GSUsvN;QsFX_{$G3FY{#<;d*hUQ`BPJ|7Y5FPW;#&$7%V^ z&(D=ndgWRrZ(E;h&Bxw%_nR-cY#n$&ce9fHnG2F>yEk1feLZcp@VYxY0{{I$l<6YERZ^@BG5@u3O=_|GX{tCg+_0u{`qhx1UM1 zMGGgpzIfI$=lA-qMz&=am?j^YyH{B8wW{0XQ+MNz-Z?FLEULxNZbnw+f)`Z`K79q{ z*5b?8TwdPPET6g~%~tT(B8^=|PfzVj=DL);`0$}aO3JL}+ZHP-D%Kvane~C=p0sG` z>-Q3$_s!*BHjm}mi-#|BHBX*Anea@IrLg+`54~*PbwBw(n)4g-3r?FpP2zpsTsdu{ zn(vi&)fcSPmpo!y^@XEHU*e?R+50tBf-mR(=%{*ptl^AVyaOwDTWyz&q~)sS*IQT1 zmdyS2tZc{DcQ+P4nKI?v`L}Iv^F(LYt9=Ojbn`=6=oEo~;OF-F?>2v4cK+Abw;u#& z&#s(z+w|*$6-R4JdwWdo9Lu?v_3G~0*sw)+RW?6k<*IsnNc@yzc>7oNTl2Rm?VV}w zc>Gu0s`>wY@^>`PPo2O1_kSO$LoHMO)T{mY+W-H*v0eSS`emoSmAra5sd@g&X)OH$ zLN$NR3tp)2Yxq~pvgO5hTc%&L{hP#go|)Utc~^wL_?nV%HqSio3B>|ugpDg_@n+sS zv1&%BX3R&Mm$yW{ZTqH&?eJN}-Zz<{oF!vIB{$Dj5n;9NBQfgieKx_Ho>VjUO}L_B zdhfNuk89B79*`IH}V~_Cp-LEU(+H;}Q-sxH7v&re}I@(UKFKJ6( zdizT@WAsC#>%H-Y-N#O3JrZ)5T6plpuE6IUhUwKO?f!HfyuLoM!BKOQVVG3XoCn_9 z|4zRBLG|}L&)Ge$lk;{z=V)1w)_JH*P_WoA-5@aa>y3?tH@DTCtgFfFeX`s3rMKM=A@IlZx)_9d~UUuQe;{-YoW?}m6Hx$tfH-z#y^XgB< z8y5mPjy4CdO+L10^9&uc*(ce`#P|~zYcwBM=HDIsX2uGo^=hHNrz-{hKUL3B#iJ+P zXu$Ez=myK&(}{{UGa5fzNX%~Cw9}*`z{!7J?SxgjvVpSf`!=7h=ir-i+Ch-7?V^N6 z_wj|oER1)Gq?)IgvOIeDW!2jiKGN=2^Ul0#b}ZPz(d@T;@~URPW(75g46$Pm9ZT4p z9&7M!vN?W7o^j$F*@g!;9cPy*GwAT7DjV=FDlF_dQ^aZ*IbqVPwI1`obsuE5de^?- z;L!@5o^xr7I1Vn|%-O+hq9>ky@r4cBq102sKBucgCr*F+`@({H`AkRqqEEG|OJDIb z%A`G(QES{7k+LnDW1+G`ilJ1WvjzKN-F)ZqKq)t)?(?;qBB{|xc5 zU^nsFeQHDaiQcr-3Co3Q*&FtyZC!oNsWBqpyOvVP4@(gpPt)wP~b!TPaSiah~UYq z<0cx(RB`waxKHJuN1Ac`I`D}a?Pir7@0XcE)`#GX}RI*G4H3>RhDC% z;YC;0sD;k9`6;s4id*H7;!cYRUk(}6O=T4D?oVB95$xNqReENJ-+|qt%<4A^lsMTL zPYE!#Pj%ik;epX~ZQf6s=j1u_L^p0;#pUry_Bx}*1~a~z=+xAO4Hc}nj24_+9Q(9( z!p^CiqP1@O)G0c8_peg;$+g1UNh^l)m*1p)C$*#)O)m{~kor;r`3q{oW_SGHrNNn3G9L8&_Wc)E~yPD@xUojWI7q_^Y z6Q3S>@#JGg$~;#F`|w$5o7?KV7Cri!p~!XBN&k}Dsq7U}qAO=wzWSE%`mD^7+1l!T zR^8Ku+ZVat`Qg#>g<-|1+CS!N6yE05n%Z*qyPSO;lpX#w{`G_$YR(uKIQGp6{7-Gf>*li%C{#X5KWHpzM^rUY{;po7l}DDI&~pZi+@^?#c}o z+%8J&eUqgt8nhYo{;z-L{!%7X!QC@C_ATeaFIy_v_kB4LD#TUo<5DEnKB38}VCs*J ziIKb9qNauX$=&j2{mw~zj7ALhb!OpV*&R>*tjhX$``2XmyK(7zPdY!Eb?WBgbDy#c ztzTTVVEMK5i{r6Pt4lXcv=;sHpWlV~?>-sjxz1ZB_S|{Ow5m_x^3ut(!ry4ESjXHL zt`>YoiGe#b+Rd{$R@UW+L#!5mu@GZ8Q;ojL`afAkis`AMS%O_hOsg$;4=V*sedWU9 z&>o#$%lr81#gmDLUkcSTx9_v_+OkUdO2a+bN*nzj7kBL4ee7xARoN@+%{3=YthZFZ z7FqL{_h{(nMJMV^i=_UzZZzdI+NxRp$$KTUqO}0G&-a~|9&bAFReI}gA$#ZA*G%e9 z+>e|;;rCy~T2|?8$&2T=U+&+0ZFTitkG)&xH76;oJojn8<%A_Wwk!$EbZ)nITsnWr z$@*0P)%zI#EnDXO?A80%D=lhFWz?)4qplPP8WiyFI4oMsY|8jlpKaAd?SA8(A9gmp zK5}4%+U|w!vdYU&g~fVFIp|H9wl{xj7RRb>A%PQ8y`~vVdb)$Fr7t9$edFFMZ^Qyu ze+&4sdhe3|4jk`(ub#@;y(WnJWK_+hBPVT{6DC-)yx6^FGv6P}T|(WR2MVe?Cw`dB z!{hm<_w2v*x5Xz_EH8@r6Mb*---zI)@0Ln`H4lBVcH(U9(rb$5;Zo0Ub*x{rY~i&V z@826or>yloXo+1g)4^#r&$CvI-gx4am0GI3?ZhWON*&CQRz zXIAaKv3@7#l4GkjUSsR~J3)!P?oW>H(RIs~228u;!&2q7Z{BydmxYtv1hYJOQ;yE-pSLFeV7 z>6+7$-?;fn*x$QyXw^Sssa0l+wZC&*S+BCA%Jb9LPo*~$O-0;Rhs}6X@}TOr_tiFr zG_BX_yDeEZ%;J!H_DE%$uu!oK1NV-r_aCjS{#vtFSMKGV3A3$B!!GPNJ2yX?OY7~Y z_en2LL`Bb@soXE){rJSD7aNbbuTpN)5tI;ARC_B`v|Yw=-KQxQhc{Jvty@~A*dWX! zW0!ECLv&ib*3nAs#n&fw?Z501q$6q~eMWj?G;iOsC7qj|H9ebLu5G@2|Gu_YaNWII;ip=P-bSah_I{tL zuru1XJ!)@u{XMR0OD?D0_;X-t>m}RIA-OA`sqUC`Ks_?y=)*Tp-W8oZCG5%ZF}&TX z{)pB7D&Yw{CPKwL25gez0WLm5GXE@Be^iZQ{c-U|N=otl0*bn4nO`!_yTc=>mKqKTxy*QJ`A1@`losO()^o2caWj%&4}=jWED zol|*O_LY|v1$S(`=H%cdeP&gK#DaTLU)D~2!Ykp>_DW~Dme!8TM`vmmx~5#U37b3bI~crt&|c`4N(zhC>jSwzBSwp}eVf_6O- zl9_J#b$Ru!FPTmnA{^2^Z|iUSR&T0*)A}i^f{AfvS|-N>6}@ne4i~R@38{_~6OGsS z>|j^>QBh=U*% z+jHOYRk;(E)laflJo#Vck!E+I!RGT!0d#cU`tBd&W&lHNh-n2GBycvUT&c3WEMfFcD z?DaE$!nxC06Mw$g`ka6DT4&zQS!V(-9NJ+carnjq_CraRGC6#d6(p1@cw`=4s_@~9 z*(zD~=+=b4I|EE|_MPK0kg#ZR$eGe6z`#AD^O8i2nw#(Hs3dp z&SN!`=-V*UMuf4$AYqF4^G`2IK7C-9IT)#9)w{gKcWcRxc+VN(mo;vm6l1V5@i=!- zzK!eLvX25&S{IgxG%Cz+J*?Q{5TG~vY|0}G{?Jz;%?+0{itmLf9BM9@b2w>{M4LgR z#VO~+ISCsA%;xqQ?BI!sTqwXj=VV8F%(`sfZO zjs{Y02?Feg8Y>oBbRRqzDbV-OV8^lM9bUF#mfmrXZ&`BBxid$`;y&-K@HDyThl-pH z`wwq%j?@vG?ATsu!`6NLae;-6!QB9>*^JMW+7+fOpUZRXKKDNPWk(}8X5`tZ@h&~c zW7U1ut?&c)T*l3j4i7&kOfzEQy75>0>A(0x0>=|O93LCZVCiLzU`#h^eD?T4Vbk%% zq66lqI7~QN?2YE;yxsaw;7@{8vzxMnkDT!HLdl$#zM>sIW<13KW`~YF$>$UKu-fCh z?(y}BKCQ=^*iRiSw3>U)Wv0g5gn}0Wb6G!f%sASRsCLYCis&pOng5C^1tN0B~{SJPXpvqe@-Bq?vvs?W}8!XD|T>bVs=7|NIp&SY9NDLJGB zn6z3r|{Kq zs`XteWaB$ApV=Yh!cG>q_QYvM_NN-2SR~fCTQ5BDb^7Za@@zblJ)ajP@T5IFu=!Bq z`BsAfvu0oQ1eRxoir=m`9Ax#=E8cG(aQ(%`gB%?PpIxjJV0Yfh!Bm(aWw7dH$&BuT z#^&`t?G6|J3htE(aLJTmX)>77xY>}0vB-V#M*}mK!y3%2eO*Nw=UP8YFTN3xBj_M1 z(DJ~h#V`G!i5|~m89pB4iWm_`OM~#6Vv6Cj>V;ozWx6pVUE$oLf`WttMwv2t-Oa`d zX6KqXB+?Gc^f*|YvhvI8f55cQL+8i|*%W&vgFn*RZhB3M0_T$d$XACm-Ei5uRr`dJ zowx`itK34pEf)^0Il1IS(1JH2H$&%Lxp|50(vp-*(-w6|>+!RQ3No?=3IsOBUr|@+ zSkbXSM@vs<5l2TugVHIb)AjG?o=Gv9Y~nrH?BEyM zgp^L-)Myj5jM^gPrDeDGf=6$9fMSlCE7#^pI_)}Vv?&0XcVxKCYV zzo*r-&P{=jrkwSOG-xvJHdDC7==Fs2RMJwI8H!SjCxacn^l6sI=eQ#pQo!`%Sy4!LHM;TXuLV^k&FCmk3@?zGqg=)PEKT7dUd#cGDVX|nd zaN(>?feznQE!q6U+BPOuxt`Gz-C(2db#eWCmpJVNV?$vP&tw&D0WtSvoAaDZo!v}& z7n)YEN4FZ@3G~U;`dun`(uUE;T+Dp7B*UQumw7i21uSW}tdl6la%O?I!YZGI2SQ&t zemrk@dkT+b&E9*L1($r_eOo6zr_@ncaKhvJF;j~bLte(6Yn_!6xnfm($?Ob;lWRjC z+jSUBnqwls#dLDwJu73`h4Lyf8ZI9`--hbrp{rDpL%`H6)n;eJj$ZO-O%D8C$wO7;X^-e?{)1* zy&gxqaLy`LS#j0=(mXA9o|DrHS!9{iqxVg8@K)6LyHdepSx?f$(nTr)xyHV0PX6vN ze`g@u`YvXqDRZFxAg$1|#%bfM8@b6(+ zEtUOi7qZ;Rx;jO{(;>KTkATx*!#*FrNwy)1CaEcN7j3;{sJ@)#O+%S#pYEpZ&M)u# z%}8a~ZO(j? zJ_n<|tS@9{?zYaL8VCzja-6+23`mxq{yXq>r} z7pPTwr9z2yN12I$=ey!Jy&5g?x|2BA;yJ>6=X{v<>(Z0P_L}RTmT;Mg_q>n)JTIB^ zoIq0JbryriDlMF94W%a&^cuLe=1rTUAaQF&r7PbJ1LvMh&lziOw=L3Op1||qx;*Pl z^Ot9zgrD2BaH)+6N6(!j!kj!jXDviod0O^_aDCv8Y-IW)64%PYRCCPOaZ2Sft{J}X zQkF2d`q}^EXGn_j_AfeQxPQ;r#ATB&MK^DGxg=zF|0I7d&kZ~kXPa&+saQW>!Qjua zF37+4cH5K6SF#aD9JHVB-C+IniW0}Ajb5870_UGmI_9Q1Uv$+8)t{z^LXJ#Zm?IOj zVcC(FF`UX88~!$X_eysg+(|fdQRTzhU29J`y|A5LYREn@TE~gK!$ombfJCR#YNu-x zSlqZ?^k=t>tYCiR7r_#GOaFj=n+oIm}5-D|DQ+zHYjH)|_oHh8Q& z$R4RC{hGmgEBC7JPs>(D30ePD4y};cryTnHTQ%o09(|LOZTSkur(1sR@0ZYe{^5&k zoUntXzl}V%nnR+-(ul?c{k}yu*$tl(Hf6X^c^b(yMctjzC0wD8UE{*`K$V%TM_#BU z8P2ZFQ%byHwy5Au$CWOJSEqxSPAj$5w~!9#C+yhvPm;aP^I3nH6{DM@mTiG2!&C*6IqOC8C3mMS zm^RJJ^1j8f6Cc_xwrw`?^!xbW>?A46E1a@|GNM;59^qXb*tal?E3JO@%Lf~^s@Z<> zx^pofO?rED6@VZl$apWf-JpKGyR`CZX~VUh63pr0>RUWjY^RH=Pz**!U4 zzDBvzT{4p{&-{HZzK9oyTYA@4oX}MEl{C?;dgcV`fab_jJnBS&tG^ zbU1G63Go>%MCla(a4GZ9Xhmej+YHWs!#Za?UNzx-4bqo^BJr zHTOaO3yV37c@B9zMFt`jSI*v2o$)<#WAoJ?j?o7`>)n-Rik-}^mUe(uSI)QfV7%R$ zJGz@{0_R-ly4I-cF8wQgPVv5FN3VUHeSmYplf&6e2~(&1G)mp)Bg4MFg7uc*ET<(K znBFpdIsE9YyP@^AUwckZIyocTWPg;1RDMcbsgpied+i*Ke<`*JMa)kPik2#swDoFC z;hNFzymTo?s3TL`XUV^36Z$84$_9LNENywd@E~Vf)5GaTY;N8n%Ocx_Pdr^WA#sHw zoB!8cULFPFZY{EJ3Qb#&KQ?(3vFNZ$WS9Q8l`i{SQx-C6c+F1;o%~!QtS?YSQboN< zMoQN8$ZWaOC){&4ybNSnb#Y1B>i%^-1xHvwPWZ9Whc1T`FaKWJ%j{ z8@F@TVwz{e1@>*o3Yx7f7`gB>kBj1_EjKwtW{PfF#Bzm+*U{xx-_k7y6c(MxpWx(n z%E48jvW{`;`Ij4Sze%{g#k%(r$I@bhgAXsuoja`Dv+(EL&sAT}oqx@@*z%3sO#Z{k zPWkd$k!2ey4jz{*o2h&C+;ppm?dDd;br%Jf?!K)ncBucL8+V!MRENXTB~h1)bVFj) z-?Uu{elcg6^!XheI~5({=FDHm?K1nmbl2LF%}QO>**j#uYx-_eW44!Q-NdbRBtd%P z;R$aiWTp93xG|fwU2s|0BYbyVha*Sh%l4zwOVmC+jyUtmwl6f?OG!A(g*Tq#%mJ0> z^XI4)=}4qClrD)|rLxq2%k$FkKAFVUbJv7*4+XXR`W_QnwaQDz-8to(r%v*o`tOrD zJFjk7obhCdw$=Z+DsP!)tjrVB@Hly!xg7rb3=I3ng9{&B@T3nzBFAAmU%E*M!XrV@fOp4lWMAdx@{LETi$6a%bv-%Y3?z ziyW46Hm`Nv%H(_QrTeRl9p=jB`*;7@cHlqz7gp!xmm5^K{>|HX4_2cY1fD za+lJnAG6XItqJL#_V>tLo%a`glq-wepIFLi{qOXfS2cUm`d<@%KU;pQC*t~g!M3(n zSKmJh-|IF>a@BXs<3CvKj;z*{nwXNo^-J&H+7F$g`P{#>cX!skWnXRY*T=MJ6We;u zgg8&jOW_wM+PS@ZA6g*oer?x+wntKC2OdbMmFJw0-TqYcN!jaZ<`o4`++@0!_2e;s zYJYOqPUVx6gsr|jaXxv<|VBMO}y;V zQobL=?&TcY_(CV7O!s&02`R1g{cC@oNL$Q#YTly*f0s*~Rm$DXtWnpeVkUe;JN3Qj zo1o6-wG)y&ZfMK@n8v)L`%b4#o@Ifw;N@vdxtDprSuJOOxW^d^a2Qacc^ zE2BgpnW1UX#FjPsftJ&lGL(+RE%Q6_nC;zDM!&QY`Gj38hkt$A>$T40Y1;0?jQpz= z=Cth#o-}=OpbYmmm5iO?9~Y~+*0#m^Ir7i^>~e4RU*|NT?{}x(JZEB49#HrG&pfuJ zhgDBK_y1&=uwnDDBmM>J)wX@-TV`9<(sk<0m5|qKUA_uTy{|51`{mzW^N`>tid_QD z*G205ZsdFl47lQQR6!v4(9Bth{5pJ@w|x>rR2>)p%)nj4!nJ(-OkI2;j3W>M(e{1{VJ<&hQtewb({>ks~EVGd?!0gUu?YkNc@S6-5XrC;a z!K-|L|M-VRlIFrH&KoPHsGR-R!n}%AF(mY1s;76t%QtTeyv)>n;-88KKeqkLKHGPS zsUTO|k2k7@ru{#rRQP(JmBqN?$egJBk|U6K8_?XJyU;cz}YHsyJDie850&*gKP zxB8UaN|XwdpK5r;=Jw1YS-!1S_DnhXvisCRt`;p8iGL%sVEf_+YZWsmOf&K_JQ8&( zi9ckuxq0iH)lOe#XF9z(m!iB`BXe1e=|a0Bye#WE8-4|`EuG@1$;J@2VS`xH_CSn* zkd_EjhSf#UD_6QXg_a98L~Om>$(Qoq^Je{Io_%p5ZYFPoINIVFYbJ25_;1ApVQ)1eiOj5TN8aZZ`aTltAmfa!u>!`@pj_Bs5xp`R+PqU*k}yv*~Tm{NMc zJl}OT%tEspXB#D+iTZb;?(e2Q-K_JiT%=j9aozCYn9|AaRwcFTg2Z#fi>fi#l%o8; z?Asr)OR6o?D&%&cu7HrBW!{kZbPT#vYT0GIx^vJ=6^rWh{2- zN!2jck1%W#H@xKb!9+8H^P*QcE5q;2E85nqGzThi9)Ytp6VW@z{YZ(}NQ>Tym1+)!wcyskY9>N;U7q4k5WjiTO*O zIJ4}Uq`|USsLwuN+U$^6_BR3N4riY=<~-iDL2jZlyYj_#dQm^M6!fF+*X&*IBN9`Z zHtA5t!L-d6WRA~Z?K$2t&8D zf#C6J4M(-OSdA7s2$eg?cTc+$d$H}WYPtWGk2Rh>4S&s-EcmJTVEd$=!U+4E8GRY& z6C^fhEOFM$n;z|Wbkb^xW%H)B`y>iCtK5>D^uqCm_)oiv{nLNmI*|NtOX^Xj*I&YT z0_Hw&;$!~gY{1X@gV#V)-+pdqN>QcYYeR>Km0Ok^dAiu1`9o|;)t^a~$#M7cCzq>4 zSeFR09^h+_w-7XylDMBF^5RVAqRT1`+s{|8V&^~3!o7IjQJ$Vx+amJsHXlt2m_3*M zmk@ic{{@>M>B)*ax)`sV{4{CX_U!9=#^2svd_Uvfw5OWJYbQ;4Q<&LPcAop5*v)FS zbG{ezq7Ke}v|C&6&xcoD!R7L2XHDL8pegwCiR05mu5TA9npFO8T0l(Il*EfCWP}?(Yqp#>bNpTSz;)uhgD0#Vjm4PXyDTVDPCA%e zc`8ZR@ZzaX3*Va>XO2yhIlMvUsDYWzt|z^(fkpBkD;T=bPTqnAk?Frl6 zB_!V1zhqLB+y6V(Ty6ZXY*q9>B^CG@Hh(Ho7QZgBP}A{p$E?YlKDO7JP7l(o$#4|@ zwONZr_rMnR*$z(v<}CZNX8$A~)?>T76eU)Coa3*Qr&bWQz*W$gn`L4*E0>#JWNX%*?w)frCye`e(VEC7k%Gz+V#{-PWNf@?F-st)sc!P8;+H0! z$(0+AJYKrOb!PCMS##tz{;b!uI{hYZy6`*iWk%O>-Lp?V4a?KnBreuD>G+Xp8_U># zo%_Bb-Y%F?iSMmt%cXEnk`iXCq>X}&(I+<0Zs1c_ehCEZ80zkA!3u}`{aWp%bA zgD-;HnL{N}RaeCGqltT9n)ER)28NlEn^mo5F{{5XuymbzPa#CK)5|O*HBhHMN&7d} zc4yC3&jN$vKd(_awf56@7vB@X1*tk;&+WM7TxbzzXr1$Q{k?vZgA+LX?{fsR{gK*f zvVm{Cy^GnquMHmIacniEFMkDpzA?kT=<8!ubMO0kH$UF6*!yJV(-8IP=Qjr`wg$|+ zncAPSGp6+05drN8!w%6k5w8}QmtLs;DF5YJ4M*%3!+g(DgR~dsi3a8ib&ZQ|$VHv* zV%j$S$L&_9YYVq?$Fg+nUE;RJc^2pF773fwTdM+X7ad8sed@!_+9&UgzFy(^;B4x| zGv!TD_=%T=0#B0W9{g;0@N9^X;-2;^{AGfxG&;mX1#)v%9$u`rOP0x4;I^&QT~~Io zscsxaXHD1gXIxtlrWoLUsoRcM!L)2u!=}DNVH_z_xp|Xxq8I9QHt=4YxTE#r3=0kE z3xa!g90^_+*!Mu@%Q<&X7q3bGdt8jgwHB@knE19Zb-I^hT-uu}TrEWpOqYf&xzg3` zvzB9lgogTN4?_W#a*4d=V?i8j-={K7k7JBD%R0&S)1)gexx6R6dF(P>mrLL6)S@Mt zVSSp9UYXCh^NKh3n)QSxSuu|mhcC(xf2%%d`DYT#cj?=@V-~Hi-308i4R@TC5`OFw zr?d9HLCKMgfnTiO%y`uCqM%^!ZI3NqOi%ELA8?bKE8I5qn)SkI4iDvbuFKuF!6tLD zp|)Glj+u#TY<@5=_c)fbIVvZmWZ@ar6K7olw>pOjYOOZ>Bdt1ZT_U@`a%<0>i>oxQ zto(A!v#>^d%le*W>+e}g`MO_Rd~(h5)7*+PxVdi3v6Du@p%x{6@q$g{7S`*h^{3)b(VcCNv6HH$e z27QwEIPmT|LsikvESZ3ip9-p;g-lhCwe(JSe80KiV$cbbWB)f?@b?gIdDPAnqsPJ| z!jn**_Nt~UWcR9RRg97!{%RVgtX?%oJY~(^9a}6WEYIwH%wbVzsuZ%!lc6a%r8`+| zYSc2n^I|!eBHPfgnZ1zRt$i%v**A7gP zG+24Ip>XqlM`ocNDh+>ouPr~=aV;<9X@%SZw_9G(g%ckYFqsRRO*9Es@!Z_h+T*n& z51$jwk9_o%_OuFWFeg(^oS zW44h{hoseN&A zi8EyK?qoN7Jhvrl(}5G7W)DqEZ_Mnej1$&X1Qqh3WcHZ0V2!;j^mypf@smW6(OpSS4nNtbd1|EHmQJrYtoj;zvJ#M8p~ zw_)k`c&Un&r?*M1FImaiAgOJC{F9>l`;0@4%`cOaS?(V?S^g?~^TbdcKL;ZZhT5-> z-J9BuOnETtQ2)se`R1r^n$6n6&e^Gx6bsC!IUbm}<Ie)L|%gNhb?O8c_6LVDl>m{MwCA0kk7R9)@w@NInG5?*-lF+WRncG2N zqsBc~Ntq?AEG+-KvL^iKkb8Dk)OOdqE*^jCWZCrX@%XI;m+U}cObKsv@n+=-hobuDy#M=Sfr?Sp86&)@pVy1hUOk={WVJL4^&KD9F0|GoDDjv_Cjw% ztCH1c2RFC%_WQy%9Nw?EaF^J=j04`i&+i8}u)m3p2nx`MiYx#CvZ z)=z0&kI%B4|D^Kcj2lNNqtPkrK>k{%t5f$hxV_Bcy0N68SF`MZ+uX3L`~@kGGBy~l z^yOeJ3Fx!_sV9-sX|%5KIzwn7tM1lmn|zLzrLTOloM-umz(tRh=W6eMw&jHR-#rQD zWe!{?s|q|>emfts{2wD?_OD(ic-qC@E|X}JnD9iyxoQj#%qy%Oa)nRR*`1qbsIqZt z;ltTqH(%WC!}a8@Mi-N$?OU;|IFVQGYraa}a+vxc)Nar3swb+GrtDk)X+>*J%#kdg zL#!Pwr;BC!;*LZao^ujdGxd?=w5SuhE+BahfkD@^9^*;@XwwdC}{F%{jwG4#G0|i!B>BMr6*~^g%>9At@w7j8n*z z!7_yR;l*1j=C`NnL)#fGxV9-Xj-US}e859VLQ*lpbmOKozxO)I7poavJpHTbm)zYQH5txF%+igS z*Y5K?# z{bMny%m3OAT=5A?k?Lc%@S3n?=8?+_Z09On@`>$|q)CvH6NuZjOS|Ga;^$M3f(`&-|JnN?<8IIvD~y6^kPc_sxnC+*SP zeNTILWl6X7Kdn0-{B9l)oWA#_ZSt?v%IoIFUHN9U{rLs6S$}5z`gY*t*Vm^{x6EOV z^ydGd`@inpk2AXL|JL026nAu4=-mFfHh11KzlopTz$Q{slUbR2_u(){{wc=_K?%e61Ri%&Xx@@Ia#_szHOr|QS0|p}nRk~QIzKU|-%boGU{iSo$tA4!T&(@n`{qu0f?!ONn9{wH@QX*6TZ06ST z`**+0mbJdMCHMBjdHd^Xzh328eYI-K?O*-&a@Kiw79MWrm$#|-b!Fwr>yvHm>wkaW|G)2>(*VKvaWdDN9XMKYH4*ppH81Qr_cOuN#^R@2lMr}>?=OfQC0f7 zsckLe*V^4r*0u3U$3Yv__wKIFzrR<1f79b1E93U>D?A>}Z};Ot z{l)V?gR7UzS(#+rn*}i8%4cUz(mUK{ zn)lSQI*Z41Qf1}qZ}n!6S1X-*T6FhAOXQs!D{6m#tA4i4=k+JYzsveh(G2a`qOKWCbQBPCnLKe{b{hs~7b$GrwNnH;YsJrt{?2%TIbs{rRP^{rJ)c*RS#~ z;;-NH`@B`Ay=m5;>%UL?@BM$y+JCJ@?Ehb{jgQ+z{ce63-XQwxvTyEhzklzK`8_Uf zd-|+ybK#Xg>Sn1ua(_RG>tCOJWnt{C-?sB|ejNC7aq-XWSNgv*y{_Mu-k!ZL{rtQ} zR{J@&U#mA~izVL3kGBcfojBj_UE<+aelrhQ%S@KvnN>0Q)5*;5Y0bQkHm%?P#_H=w z-hTg^cXpQ_ee^TreQfos^D|6eFZG<9<~OUP_Imj9^Ybt5J?ralI^#q6w;lP@P4>NB zcj@Bde4E{B-xs>cZ$IH*IK{mI9d&#(FPa(XjYo9VkPJEy(OyKwnk zdGhxB8ymhXoj&dD-<1cK|8DcFH<@!K<;ZjWk`wRm?@wHv%WQtX*LGXN!D9=Z|Nk!H z-?ie!+fB@|GS9+f-8}Z+`F897se83=?Os0Bf95S@`?K@#<>m5kEcV@<6#74MAu`w-YU7_u-*F4Efde%+pY-zRrU%d|I$u~M zYu#11cdzSp#<}Z!yiczztv!5vU2RM3mJ?6!{H@#{m%Kgy?yH37vOhYFr_0CQTNQox z(&xLbmV( ztM#7wTg#3dX!PdOUw0y>d|&40x^%uXUzgZ_y*;sfzO3b>FBQl9EGn0T7k)b{dwy$0 z&52_Ff7^0yZfd-{EBD5ZkIV)kv*)UBJNJ6W=UrQV&*r@ATRPiL>6X;RDN9&s-14hb$Wa5t&+0WdpcK_UyIw6a%xBM#CxOsoq3w`<$|t-1GZ zZYeuoe)@P#$m(w&CU2j!W5c2^AHGetkD2hT?$hT*2gB#wstdh-{1bQe7mNSjx3f;) zS;j9}_*?(zefdL6!mH$~mvB#T*qNbXjh^!J8{H<<{@{^iLx5+rGU|cKg~@t@zyf z?Ek*9TU*k-raNfpMTDu)ah4Go;|xK^THm> z;<|aR^`?J%|5sNX>uIi!v#kDhF7@=Uf}wTFK(AOEwj?#S-qZ#H$&_xIht-pTLxD@VuWX8twpii|5OdfeClO8oj`f4I+_ z9l!tVJe~jYddc@CasK|=C-f}pKYfwU<=lkLuQLd;9w3|DCJ9#=qpfEI-e*I{n`r z&FS&iPUZc-T(~Tr{a|gyr?0k~H~U>#W%|bdc_^#)d&{5B|8K@l@B1V7*k1FLZPD8g z*6(vJeX;yL(YjdfMbYn1ljhr1E_!ojW@LK5?e3S8A0IdWcdl-4!2$mF`fyBPh#7xhNayF=-v02+%Kz257Z?3u zoI8DaZYiTo>9?h~yXIBBI`l5oINeWv*1cV&$3HFhnXHzw`6lz-cUS+vw0gcX`1tm7 z)%yDDpKkZQ|F`buF3ae7zg|4X32h|5=g&DdXD8u#YUfhWHni>-|)WXV~v|IeqI^DC8qE=w~w_4H}b z`L922)=dwc6Zh@u_Gu-*&a2=1_4vy7_p%lxAHMUI*KN<0K3Lzhz4q@)=Go%!C%4_d z_3_?wKAANcu9acy|VaC7>;c8U7)ep~sqzus;?G@EVftSxzb=l1`-CZ8O=UGC1x z=TjHEr{62Te{v~n^t{7G{&gQ5=3Z5vXTNiSYrCrX{XM(l=Ram{kK3M~^KAF*wDRAt zPTw`(Zdc~}?wSAgm>s`fsn0gA>C&tEbohE(U1|35qr$ez{U$$3&RqKY{d&><8$uq( zrwX%o-%R^_$Bz5g`E7rTuH5vjdb)}GxZTpc8^2$F^Hz@$@bVTHxnsU;&71pg`pU+L$X#1T<+AQbL%g2|u<>lUe zKkZ`to-5Kh^K6&p>`wbW@9FgVUH_k_ug}QZwdb7O79rdI9D%6&d!$ZW*9^Wb-YexA z9rcbedVBWwPh0u-et)$oKg!}veeTPeg2aDTo1d=UwD|mf(^uKACY71*l<70S|H`0C zo!|HEpEs$CpKYtCxs=ZOe#^;(eUr`X|37P=D|LPLjjx|hzqc&Oc{gEU{QKV@-=!Yi zEFZNo>D>R=(&rEIr0ryH8~@$qf6ZLdXo}qB2bbSk&z^eU@Y|{_ykFPl|G3TGJ~uwii|ZpVSeelIqE(nj)KaOt1Q8=aNZjn^PoDD?~@RaCizi z1%2~K)fG{is@k$i)ayjprqrMF%L7VYm+jtOo&Wb=`Mc+R&tlJ2pDUjC+2;Q9J?9rO zOk=F}(c3vOw0T;a+tTl+HkdpvzivFkoZoG4@S}CLm&Lan@2D)=bNb)MwjPZQhmup2 zX5R4CTejp&dGwRr{qtitg>*`EKIiM?GQF|kUV*gwje`7|1I@CtGch!>UJ2f@w{dFHY?W5ndv)0+uL*N1|PxcT_QK~RVz+e z>T+kU3YJwjUwlv{uX?#@{DePEZ+2@lu5l93u$aHtuBUX`Y&#WY4Gs2^9gjY4o3-TR zktGrO`8PvN=FE&VjSXF~tZCZu@@;ePcuvqsy0>&^^YvE`4j%uy`_R%}oA^uvnX5be z_w{lfE45ItRNb_~V%gJg6|c5tXLWUnmG{48e;n@`&C|E(Yw#>?O~%BgNS!uU-!Si zcl7JKMNu1-!mR(duAkko%4?-`Imf?*Pam&pMqON)yEkj~iD~%<_z!c!4ZBl%b z>)o8_iMIrkxY{LL9()KZ%Ut%s;BZs3f7{I^J}d8PT-tn2Hu`_ewW%`}Zr*in`?_@* zn}0pI60)#)E=RLs?q`M7PoGS9wJ&z}sm5RH{7>Jhzx=1CvgUQdU1QVp6R&)>-p+XX zW#q&|S+jn7ub6I-erCxMVJ;iH9WP#6zrFRe`uDfR+(HqLYx~!%30*0>Sf;Tr#_Qc;KK3YNIlLC&~X@>Xe z?vztmc;nddCgpRzbAlgTzEEI(sdmncX==}A>~Seue{iC-pm*Hqd-j%F^}fu!e5QnH z{?j5ph3gFktT)WcuFCo8D=Y|Yj$(W+dxSS!Cia(~xRFJLE zU8l5dQAo=*`wc}kSyyz8Hy1CsP+9Tg*{+3?&z@xa#1Nf(v*g76s{4Zf@n62YLzn+kX8Yl61`qbtKIKPN?h1%|>U%R?;`^9mmXdn zoHOay^!tpbSEN@ZJPV4MbGVInx!Z50)^n`szkjaWQQL8QhvAXpQ-67`R3kzo5kC{_9z2UbLWzyC~g%VQx|rOUy=-?Ou= zZT3BhX2~>-I(4t{(1cYPXE!fgD6D^d{q?I|lItt)pT2Xe>(P@lmsnQU&*w1Yo$&wb z!rE1;UKAg(GvFqH+-(@SZ zP4e^NC;HcgSl90{zx(>4^0~QNH}2*2&05bekHtZ$_`UNM*GU(4@Lcs&nJ7iY<^@d{mQn>5?N`pS8`ov1mii&CAQpr<8sSUs`d^j@kRkyVy8A(a*e>*8f!b zGyliW)1h%M-Z61Wo|r0=Q+}&zA$wrptv8#tpN+Tk$l|wA+)}w&*&sDd&6$POq@Dfz z{bRqMn+ILobu4YJwXm%$hs%p^&Tel0!pX^n6@M7Bv*$=^`M)R-xN2CG7OVZ?z~c}n zhtQKd_S{{%^y#hpIqDi2T`tFRt2TD~H2-$~y?56wmN!#Rt4Bx6axHuH^-buh*3A37 zUDC6*>^$$oo|v|3_0AAxZ;cf~UZ?Ib7(IP)-!_fm+}F2-R~LF~b)2&4*we*A`ct=Sn9%}wfkw<4d>(mE|v5wtc^X_ zx^iWEb@@-04d2$L)&*M5J5#F{nUDQI7d8TXU(R-{(?;r2{!vF5>=QWz@>7U-*Tr^9{Gxcdq zJlk=_{|6S$(LQmxWcf?~H3CkID~=qKS}7a-cZJhb`5Rs>VIO6;*YNG!A;Ns@XwsXX ztoQo)W^l;wTWb<&__^`ITh~|}#qz(I$rm}#uko36-f|f9qUoUp4o(NpJC6{&Pz5UIM*?QH2fd5}I4_Kuu?c_5sj#Rp~(Z@h^{x{9nYdYTCPN~+t zCb`Dl=3SZ7TA9b0?2p*=_yUbKNl1vFoz=pA{?pweXJ_UOskRMa`c{RL!k#M^iCFjD zJ3Ql#Rr>X~MLW*fU*5E^a3MpLHmFLz8jov}ap81Kbvul3*Z%imjbfx{;M~RpEG&w$1KQJ;| z@#ay{o&^s=FLL^v`g&=h9P^)Pj6WAHOl|ODVhaDB7H-AZ`F?i!!SBxQ0e&aM$}EKK ze+vD2DssSrDT)2TqO&#E7N2k0=`u}6^LhO7Qx8oqhpqkmurS8EdciMQwOg@XUSA)- zFI)27{Kn_P%PG(HIC{pnzdC4p{@XfFp=WRF9&N6Ada$`}>&G*1Zw5V=%M_1)V&!Z9 zZ`=KdV9(6E|7x|`+H`ewf8YCYN%Gyj-Vby5rq8}<{&&*zuZIneH8nk0qT*C+{Qbv` z#TSmLw`FFg6$I9IuAHl-l~t|8$7`q0v}kY3)XZmZtu0rlXMcb3T0D7~n{-HG$v3`v zY;A4X8`!(<@s`)`NIZ7o;>JfI3{z)&x2{bNN&Y$Q#2lIO(yyA4*Qcfj^_k?i_KTv?K)C+5_gMkb+krtfXnZo59umY;?7_T}}{A`(|p{`z%%`Ly_t8;k|QEh@h= z%$^b)J$ugkZMjl+Cdw!IX^Hmk&pv(D^8Id6Py6(XM*Yj(UAFu-e8*Jvu;9mu%HE0R zJ{=0xnf}sDOd~rh?)knSbw6)i-usW?b8fMV$A^!ej4Wx%!tuk*l!Wmyi*#=Z)-@*6vRxGBVRaJg&#&aAxr1V{hU*=(awUx_blfP>xD(bPM|2`McvT4(i zX}Vh(J|4+de8I7E*Tw2@WxvS1%Pddpc3nGj$=?sJ zYYb|Al)fqi)SMFR+Z~yzwmuJfxrv9BAud|M)SeE1p2ps6H zFfX`kkh;3+$HHCqJbc%yKOCs5vQmw+exu{-wXg5uEv*)B+B_ls(4iL}%|FjCx7hQ#vM6}PSssmuxO>s^t5*Jc^!R*dg8QZ=FD#o| z-|Bs3KE1>K+yuRFl|Q|AzIaNC|Ja#(dzNrnPSoPk#4{`Z_*g!hqE^3HbpM(+XP*3c zYM%e#j-vV&?ssnk(kpIuDw~++Y4M+y5APLb)UFix%hC{i?g8@*spG0bAMU8D&V8LJ z+8_MMufP1@-8&n;*y$R-V>)wC>f<$C9l__vuNB;Jk$*pXUew1kyME1#3P@O*pP=e) z&@1@=gyypyD^?h3c7B)`kmVHq^x4aad$U(xW48SGVB_32KT~gmtHNKezF8j=qbaL3 zedA|8-l>u&eYsXoUahv9Q^6?L+Ux4|RU2moO04*~H}AN`SM$}pfkoWAc5Ij(=Ha(r zhGEHu?dvl=HrG8)ka#gIAi%)xN~6?k?wTJ9+`GiL&C^}=c&T#fMuYSZf+fktdF}$Y z|74+%(vt2q=zt`U}_0lenDgK$B&mX*1+UlFF7r#>}W7B;e?Nw$qSEk>~F;DtD zHQUqkRP}c~VJ@++C%S$8_KAdqUc9ZKrT4&ga-pM9@Z(&kr+rsmO8hEG{<^JZCAa8O zOFN0#&yJ-zJpZ|NO||Aqp&&=*e=*Zb^`$WtD>b{kYCg|l&ta3`n7Q?1 z@a`||FD<8-t?j%n&}b$g^4R8bmdNzih671KGs-TUdgc0h<=ffo zY;EOlmdx}ny&HB<_Uo}}!f}_yU(C#Wy*M?FLA%X6^Y-gQw>CdNx3NRR=d0<)6DLA+ zq7Rn{X0xf&4UCQ7Us}q7 z{)WQ#b*4ejzP-DC;zWkO<35Jmd$-Nke*C(t_<85Fus^EtrWQ;ySyR@n&)@le<;e|t zr)Ej1`ktM>C~dcil5gVMUg65nf}W*Imo9o#xXj|$WSOpe2J4?pIq@qbYx+X(<#tO7 ze#GqBl3$)&qfmauV@2?ztJ;~n-xgiI)Km8MllJjc8{3_=mtSA+Y+R$UdY4O+7en{d zsbBJ(5ASHni7)=Jaa-Dz>XbL)4<=?VtNnIqsrkmP_iNT1Q@i7JSL9M{@r@tbrrj?J ztG$}~^kfdrz92zkJ2q57TO^7H7v^)j0L~%gwC^MVCHrNxD^C zJ^$+U&(p!Mipc2{ZLiQe+ahdbV~S1aBB&ZQW5v#<1+;KaMLX65)D z+|(c5xp7Z*UHE)4=>zln3gmY;>)E~bxS}p}ej00s-O81j=BtxZQqG(?WAm(BdEwr> zb*gLY9{Q|qDhzQAKQ&ix<(ccg<)=?s{0yFN-?!S(=l=S2|F0}B(rBwY+9k?4%UXG2 zt@(#&Ev+_h?};YrQPR?{Ur*WLw2PT3uPXT6&65|xr$2f6{QH4L(=62HUW<$l|K8T# zU0qzqe=d7#`g>jV#=hf)yhWEEu~p}vU9-<}P3ke9{zKC)UAq6+#9cw)^fX=L)sN=Q zDO>#YS;xDx+glIseRtn~t%^v&-WRLat**BI(R4y0YO7zu=V`jy1+jvHf;TQrj(z*C zOtSypzB`uN8o$qz{(0u^WY(NzQ_Y+I$eWp%?9nRN9kR(SzU#ENvvYDzQSf1(^ziAQ zH+;KsMcY%nUT@dahS?e2@-{C{o|oUTEBc9Rv*(T9)1vE4yjMqUKlUqp$IpzJx{D8- z-1+MI9vgRW&7*%`x$sn>^P<&iY`#wx&TKrn zc5`vM@7BI~jf|6TlCuKE-n`B`ev!^Sn1>^Ru$~(~i&k;C=Gs+ns!` zOiWBzrGM$!r)}D1rz&z-Q)SE5_jZyuw{>sPHsmoC1mp<{oVojOHBQ~Q2)?$oJMdR|z`M>WNST{ZZ! z;mgqz0qt5A8&fn@&tzM=UhEWo?ccauSzw-V@ZtmpBcq@0(}TX6r>@Tvo<5~S_tPS_ z&y{nsN;9K_b{x|#I8|+09Tjw`qPtj{sdG=rQLSEwly%o@4HGrDKDxGc;=47~&bf-d zGkf0p-zfJs34}nW*mElBZpd+b7!D+wcGUd}f~forJPGnO|q`v)gbZ zJ3Bl4(j_b2E!)1lk2{x`md3_k{(i0aj=ynQFIHWdu=)I_bnmY9dut@rRQ2j^=Y|Nh zX02GgIy>V;-ot{@xe1@{?Wr{0pzL;h&yzzQ^Vf;Kwr%&ezdv+w@u%%MHMNts2?*b4`Mx~) zFq2H2$Xo`IIU<1u@7L{YYWDu{LFf64nvYKNtWz{Ce+9X!-S^l0ykw9& z|4)%YV)En1jAs_z(YW%$_W#%C=jKi>dZ#~8^~R@GyVV{wVo&EA-<=okEwSCe*;;y0 zKG&7+xlcUjNT~?!SatRON6+aTYp1*}NJ@DU=U^c{yKX`7T=po|b=%EK=iJIoQaW<< zsez^0lefN|Jy&|J-aNbi+)U9Ai$A_~K4`vd-HLY4Y4gvVJu7SMy7=O{b?ekFW>i=2 zFrQU_w`-fM)70zNv_sb`c}cBa`SWU)&@HYt{4y)vEuTE`F`s>}E;+o>S>vrzkxqN&1ik!-vEUo|2 z=cl>`CyP$haBxwa+;qCi^Uv!l`Qt15I9IZ5XxO=J-W#^2GM?N1mIV>}{k==)FQ5DI zMBGia#mB^$)w1j3Rm9Ie)x9|_dhzG$-_^nsXHHmmc)h$$K=Ju)n>QPqnm&DVcKXc@ z0|SE#A;H0yujN(zu~0THF8)xqw9Hs@1DC6-tF_wE+*!q2+ccIW1ukg9PebX&tqz_)0^**hv zVA0z3@y?F}4o{xo{_*^A)wxkezy5T3FSj9g^}V!|BQ{g@<{v)ywDs^~#^tj@T~9|` ziTM_%~P09{gPg`&V6o%;Xj9*tmP|a&c1Q)bZAUm z-M@b!tIe|xyqFd&)7^de)ho99_a_I3rKaZg?*Ay_n&Io~Z@%+s$<_PucMm(KO_}8V z^vd5)pTsBkS|6L+#?5Xr?YNkzri65U$-Sy=7uPwGSef1AIu zFH~nrSoY+PHy-F*NxhfA6k#)cE4Pm1ONDs_XLl#O%DbIA#ZKjo*{5U6_8S;~_AD$c z44!=D+S7~-#wzk`M)V}cR$khGN!NY%^^$W|RzSFO7Y)p1&+GX`2c2~Mu>HmMVb&FqH zC}>ZaIvUfEe?GB!n|4*K-dncq&kY|wJEXl4V+{d0LV|sr&^I9*p_v*a7FMk((?dffF*romS z3)_K%)yY8#nPwN#mt>x``64d;THw;R-R+%|N^Cf$oDEtPDxPv@PQi}TA3xp+WomtQ z_RFrREA@}5^4p8r9|^r{JLmO7yH-z1K`u1r@NBZ>(N2dk`-8_mYHDd=QFvI~H(B0suixyZ zn0Y>oWgjBX>b>0r`1{}g z027W!=KuZ|O#J`n|NqW@lNmWdYgTEgYrdEK!mqJ|Mdsh>jjI1^>;9e3zh>_=MP$zx z<@q0fzn0gjPTa`)TAuHkJ=32*`G5Zl%V+Yb=DOA@%ce@0yf%jGVo(mRCEq> zRa8{1RlV`GxpiuI@Tz%tz(;zP|&qUExJ8T#bT9eNQ z1_M!zzE8juNg4@I7-{N3jIxS)7{YG%TvBRAQd5AHMw3O}gwQ1{H4&PfI= zm%dF9d7ksaAn)IkJ8zl7DuN3-Hz+XW+g9_wNp{b9%gN5THodw0`Ad6oExxMc%`cRK zd^PsXer=&eLc6Q3v&`S8%a*jttbLZWaKDGv z52c`k`zMFRzdQLx!t_9FeM?wc7z@v>tU~Qon~(oH(Xmh92me})j^)qXt;=s5ym(70 z_x&Nw-P>wr5KeKK|^S_UBMaliRarpEtie(&W5kLWzdU91-C@ zwWmks^Ku>+cvBc4B%v@{R`vr!5A(b^rybS%=5|Y{w|1Sk6JYwd`9v;rF^r$Df2&gA zr|QDHe?$6V2M4`RBj=@ko??tLNr~n~vdir=ER?Jj79Oologr6my1LhlyC) zg34--(85D=p4CkXQJSJ#=$JO?{^dZHuKfeCiyKh!oLEl>sPmRQ| z3iUmr@6Y=v1+Fn*YZg7eP(?t}$Cx*sI9?OAS%z8l=&$(; zdn}~%x>}Qux(ZYj3Yv)ZIeK<*Ej|(;VdBNp==Mmw^l|Z_KMG!da=qF6+q)lbcyuU2 zhbddD?Z|`HKo6T4#ex=mo$bm6-E8csb@OCz{r~-xDc2}L<-(&RiIx=>Z0dc-ySg74 z9r@n00)Dn%f||nD5h=)MW5EA zE)O*(y1wLCIHh;L!ovS%hMH}nt_cSO3vJwFw3XD<8k-*bx*BGfL`mqet=O62;Id_A zXDjc$bAmRlFFvj3KC{19W7(sILZ8BdU``gVGa}872@{l(GEA75-4zNf1V7#vc)DEi zivi=FZ`@1my!kxH|l+tt2(+pIZ zt_iOCZZQ3!)SO>g2e;+FIvS%BTf0qMt#Gcqap!(9`G)^fGGq4J zC3mmKsC@g;S?lt@ zsaL*oY-Htpe6Xd~IPp*Z{CnQAm4P((TVGj;DV!(e;)W;s@wejM%wHaum3e!;tY%zk{>127^bIBe#Lk8@ibSD zRIvjNUb$wjwqN$NdVRa^!~eh4$xdPm^NR=KtDpY)`TWf0M^0Zp7GCl&QLibVI8UC_ zHpkxY`I`@%4W4#~4&0pgFF}S$^c8dbehWUwPTfO_^{alJoxkGnXZd+Q?QA~3E#G&) zGkwALL!UjK&F(#~JhOHEg#8U!b$!2jx!Hb%C!Bl}u|GW7dCSl16OY+vMQgtL68t@Ue{6f3BI@4I+OGg13lH=wVsGHgj_;^S}7JoBugRU#aho)L@!; zDRZ0M4B;9GzXwerP1`)4NkY#YcVO)9h4$x)|?_5b-YT%^2zahlbm&AT2n59Frsa^fme#hsn21QTOgm<6EpR92e~Ba1eSV^UQ3COm2aLvvA`MRo&2Z?nRb6SdFf(S#Z61 ziFIMc9$k?;7XRynCh>h->HO)w5DP>0zfF&MUE+IoTGg-H4uKWt@G_;(*xX6A$mVN&lDr-B-U)y7+bO zI`OC_6*U~!9V(d**d%{gAYSaxDr0zBui}89%AGI#iF%jTE#7ftKkrVvCK-+*$C#W? zg8H@pyFCLpvi|6Gx%dCW?d@g z0mW;H`xg3te~>#z=MAUXg{ceVzlo`YDc962+SxkO@?Il{v-LvVH6G9H?q(%&m5K$N zXme;e#>8U#?ta+E%{iML&fluJQZ!-nRMr`Lj)pW9+>iXu3vWfbKhSSyU&;ND=zn=;g8I? zxG{)dWKKhztr~NNhWp| z?OTj#*6VB2O!ZFAn)!9t*0!3=+_gGs7d5LIi=W;9Q}x+9P2t7gnEIG~k7b`&C-qU(cEvBqLcXpfpuUz>5%n9M7`Sw!|vc`C9aZj#4r=oXF%xu4t*mPEtKNmY= z#QgZr-(hi>cvp$3c=7-0k59L6-p%pn#~Zx~WlZt=%R)?rwld7D3)%2LH|XyQ-&Og` zlm7Vq*k};@*oN=tGv_+d{r_5{s7;o4ejC(r9)0 zz6qOKp6F%x9*CUb6fJ1Myd(;gyCcP|9RfDj z>ud@a5#oIC`ua7kf*(xz+w8Yp{rKNSzQ#KKO}?JI&0(phw`-k zSpV;{{ilytF9yYW9%fp5aH{n-?U#-FS3dYZ`Se1g_wRELT{kr>CGz84_pxKx4(w-cdp~jtaB`p;g5v1>>h8*@q2o} z_I+j+OZ!_%-%Y&itlGWZ>#XgbYD*Qpyp6+B0`Ez2i*PK00PPcAvzg@L4z%DPZ?7u-$ z?zE!Zue(ktf3&phWu4@+s;sO`;>^;#jT&!v8RykS=C#jCxubsRh1`5s`To@xyhWpf z4sG_VW4Av4>`>q8bCt8*uWyO%#Gb9sWmw|+IL)dvA4|5SH`4`|xH(M4?hz>JeE}*`KQ%H=2DSR3#sKr-yePwl3^-J$pyYfx;IILTpeE-F{ zeiMuLeKRhkE#EZR%xdPr<9*L|9En~NWSJ5C;Yxy%?TShECv(3?w@&Hh`kfo^7IWsr zh1QFq_EV-#omy0tyjpp`x_&K9@xzGmdR#znsN;zVNs|E)jYXeP&I zzB^Y_^6k}Z@t!ZzU!rvnWrc~|k4f!_+4Pu4TKe{fuelqJm=y~e)=B`vM4 zyU7+6(m6j@g|3afHnDnL(4@Jx<$kaCe7HMJOww@UL!tP#rOUW@^(7=FcZT>qy-^x) z>T+v)yME-Rl&UJJKg~|_I(IkRSi5|oqx8246Q3RV(9o0IZ+CMWGke1NXfp%bk8OAT zZ_Ny->e{*E_1)du^Mk{44-{WqFL66cRKQf^@YMP>g_f55w@)wM?(}X;Ky5{MrPW8T zUp?*zc7}zl{$HhNuX^rI?dlU1KYsl2n|tYbKo0<hE-EgT zZ{w`&+hcg?%9OkI&5h_wQHU zqt&0qA3xsvo&CqpwIBDJ=j5k+3CVg;Hs{XUmX>wmN9`Up?me<+-n{0Na;sBKOiJ%m zl>X{XoG2+FA#hSXXZEVD?Rno)tq8t&hPKX`}&>x{Nq7Nw)Kz11s9654i)MurCJzHJpR?S@`PAx zgjJ;#*U#{&fxe}s)3BMxpSv}J?vcA8CZ1SU#N-6la%Z8`o7o)s~lbt z^CiH2;}Uk(%+)JbN=i$=zbQP?Uop~&am9iCdaBCG75lgDw4A$MD1OELWkm|{au3$6 zPjUV9{`AF%e4PB9bN20>(^TW7S2$nc)Zdh*xJ&D{)HbY)ar+&urhfOTvAn%W?}~}? zVi|_}V*>*pZtgmJ{{DW=^M*^0>Yolc`uo;pb5&JU(TN%&Odpr*`}e`6+^Mqi=cnX; zr9kGhJNXuv>oDFEUB5;a+#`{EdUvEr*?#EVEc7CJdmyoEEFUJ@}4cuz& znqzlgn;5&NRD07`m*Y1kriV55u9G^P^Pc&T+0^~-b3HsfBF>+XkP;Isdl$p+tXTVp z)9>FT_s9gE@bAyVf;FAWXVva;&9HXf2{ejID~{+PP|d^=l9%gUdh)cpO=CvT{DJL6Q}!fU_zg(kA+ z+&pn_M`qY*&Xn0M(y!I#EDR5nPmtv>w$w?yzD{Jpq7~8YS;fzzyqnwG7oWer|3Tu3 ziRZdL8ajKjWuA}OTF%!Ql^s(0>%&&@lbt~`Tc!E@MAr#uy^@eO;8sYBeNb_Hag>rG{1&-bfbzQ^bLJKlvA z_GN!V>i=}QeM;)hie}FDvD%%|b@E_!tLy4%?_B3EyjQ2Qa{~WUyCYrCBQkHSEZsKQ zb;lehhjSC{D(l&6+7AfJzKiN+{>Lt1^59eOxo_$B_e)*y@v#xlT=R7YvtEqX!_s51 z`JbopZ||;MfB)qTs~sQp%!R+rh-~&e-(sz*dUIQ|XPW<_J#VHz{~q4iEG(>feL1&F z(oUhXQs35lrDa+iI}_{srZ?|(BY*7mNtMkz_8keSitau7P5bbB>1pl)dH$>3)xX%h zZ;iF|vEU;cR;7O36k7J&HE;ed_4(^lj1wQ|oc1bHNS91Is{A>0L+ELx6DLeh_7%x1 zGGBP$ptSW%(8mbtqh)gG^`byxoS-wSYXPIW-xUon{`R={%5;Jm-ey~k4 zI<&TQs>*DybLY;b?NC4CbkpIWtbTcl`O(6&%riQd>P-BY(yqiGvv}L~?fYwgo3S+; zuI-w(F%{xjw5zss__^B&efg>QiQo0M@Mw)lM#z{VwAg5^`c|n z#=;N}k9MI$B6W$D(Oz2$?^o|URXU?oB|yz*n*Q(lH-Ae*=K0Uo>)3ZtcG3es4~2tw z?=}nHxqJ8SU0s%PC}{uu#qctzAl}rCFI`C!^_W{ z`RRl9+k4`Qe-iv^^4GnJQ8~8sX(|)na$aMTg1d8598*(M?|*ui-#`5?i^HDO=RcX! zkE_Pp`!5sMRR4YMrAqE~uGgp6UR!PE9BaK)>BpOSyC1Lkwz{I}jrxkkPTe;-d;(X@ zcoJ>>^U}>{B3oW8-2FdT&q~o_zQ*#;DSK|KPhB~2%0cVuBx8>oA+ye}>c9DU>VMyr z1;4JB|L~dcK#`$(skNG24SzvXin;z|BPQW*dA}6yy_UOKckwj;%~$rtr{$W@yq2|3 z^m+7^OOSDy?(S8!vn%%7{}cErc%OOlaqAs_mIrQlU zu4}usKawV`Fx_1}Va1%YA5U>D-ptg_rP;gTkl!Jx{{aiPzrOvZ z({Wv=lF3o7spjkpgI|{Hyjtxnep6pfD{ATP>F(zpHmc~I{j&0s_T7_JPb&>)Gu!xt z{yt~CVU3Q*<41K0&9^JX{w^0O^?W^dnaHh|u}jY@>LfOGv-tPSTcqUn`sB;ZET0~~ z{~aw0CkFKtGDWO%HN*;-s|5xXYB&df$9+Gh81_4UiHCGEBs6A=*+{=72C)7SH5;zfhntyjPP zdsy_l)6wKQ+lPn!^7fOwmUeb`ZrpuGg7IoaMM0xkoZR|@zMEcOXZ%pL@n&p9#EbXu z_wU-3rI2zc;G0+wdoy3})tt`)GpsA~`u6+`xp_)H?fc3_AFJ!v)E&;7ZeO$asMZ7D z(^GdfK2mv5tMbmv)XgX>E6d4=ktv>yoh@R{`XYu3h8404oVkuJRaJcy6eLmbZ|2OI z$BUOfdGh3lfnDVN$1c_8YqxFNe)PzZuyD6oX7&I6aAusib#dd}wDK4HOJALSt!;0= zf6baT&u=eYXl)j>;O$8#)rOpT^78WY=O1)jQSh(doBdT%y@r|o+;!iNFLdOb)w!zT zW2dMNGk3<_jUf+T>UOK<#sJH`o(@qso%PFsj20((%;w9&z?T~^uU3JnvG2^O0oH;x&kEB z^h%X3lzntUrPab`{c0rE}Yn6)LYxN69E(u9;^>lZ4 zdz?9O*Ay9<9Sb^-9-ZIC|6e)7hVP#bm#Nuz zZhqqglg^J8Q+DyHZV~q|_$yekaN)u~8u2e*uAiRe`|wXKN20(kO|O|e?m}zw`BIu# zmx+l$Z#%t`?8qg>vo_Y`5r6(|(n` z`1tF~XV3bEg$_K$9A9)@wqb?a(;auk`&wIAxeP^ZlmndI9yEJmi zaRJrXGtKjSU;O0?W<4!nynmm$P0C$a>np1a?W5Dm^B>xByOmt}P_-}4W7-Xtlp5bI z`SOGRl|TIpI6i;=&!=m(i@v_*yTfGB$k?~uETZmLk~GtM|F*WaKe6qV-;zI+|9$Y~ zS@oftFS)|btS`Hd_p_O=Yw!M8v-DthcV5Pko01+$ zt_Rglt&`=et1G)?8u)eVbM^_74ofVY{`ySeoewJ#ELWHCFKhpQ$Soq`#>N?IXUyAY zXLfa6U*AX7eZ0r&H@(}RT6v-Q`K1S+T0SgT^!fhAx$~PQF{Rc-+5KPrasGdUf5#6w zq^>*uqyDAD<^NTG_%(P;{vZA!|Mvbzd$p=r|KZO@_vrjTf8zgt+yCF=gI+W& zS-;--xRdvBr^V?EOX{VVWy7LmW0~C?oPBPs`M>-2_xn%(-}_|$+g_LVZ2iYS_Qtxp zx_|4>{P+3)_Wys;r}pRmH&1MKkWcwP^MCo2_-QPE)j$7lSx|rW|NJ#pyK3*%vd6v& zSA8n!?>>3Wu2Xz}_qDWyxVg8s2w&VT^5&sz-HBTg`>*g{Y^gbu^`qhFavhBdby6p+o?Tu#?5|jU2`LwUm%yiE#|I+gl_igg>XLdf)%yh6jXpU|( z`zOVgnL?*sJ}9?*oXB=voh9zu;eUL7ERUTn7B5}WYiw;@z1KeOzUYHT$6r=G7njiJ zW`9|n?6xl8)8F6UdCYdCs9oMU>0SU&q>baHNg40&FWUX@gGB8^i{I7NZ2uN_i*!CJ zKmPRXqIi4J#?NjK=ii^Jclc*|#EF4HL9gWHEY_{GU6UmgF84H~Zin6GZC~eeyFDrO{HZuQecQE36<_Z9=-ICe zIof`^bwkCE?|-6d5@zI9JX%zlpM{HU=gXfPPW~+TxHBVWN7r@s9G9fk zjoxeHD=O?-%5U~Q`t;HM)a;d~Z=YEF)W=a^Mu$xTlhAg_l=%AU`tv`E3rw~~cZZf< z@ln6bW_G^0_qgy8ZnhT!OiVACJtn>1ZqCJ$n-v|HsQfd1%lk4l$H^vfdmQgbE$~+e zIKH-#N9v-$d6|zFdXDV1{%QNa^SEw>Kz#&D05eYjtI&y#$w%$4t|_^z^CGRl+ z9oM_KwL#)Z=#ImoX-y0Ik9RWYSt_58I3Qbk`jWxV)h8BSm(`i@W#ZLVww4u3ukhIC zZZY6HZFSz&@t&P{n$^Y!e2<$YciG-xdhOVn{{E4O^9Gscx$8}=degrwzIE+V&#FBW zzf5rroS9!U zwzU6+_=H`{D}u@|3-9#~ou2M|`5$xA<40BrbARwWPEJYt7W(fYL@ofLBLz4xmrON$=UqM=Xv)>=W|QBfOC&${hc-mEe6_*c{4zkf5I+B135qzjr;tiG*}kB>`AN_ukQf`hbj=a*~OuBG|B ziQoTf@BY2Zrv2QSvBfg>)rSuyEsqVZub6TBMu=yfzhe7b>p>#Xg-g zbe3n}Q`*vftM1LpXQ|wCH-FhyWss@<)acK<(Ccr$l_alOxiWHP3q#UI>j`24AA%Qe zV%fDW*ltmXOz6IzdrK4|GX5R(`RQ)5@vLH7tJaf+v6EelgjHBtCU>8XFeJ={89Q?ax?bL}A3-7*_y13mqDhkp)2d%oVE?J?G$=kc-h)dY&UcTRtcRJ^-$`DlT+NpCez^JGw zB}Po(#LH(6X%_45YsMsllFb~?TdlA{?vc>9{qb0aOaeKtNxqJhZaI%+~04c%*(9WT~Xc={nb0f zD{J1ZHB5Oc&)zkidwOo)ym<|WJCD6fP*PWa?w43uGP{29qlHfs7pA1XuJRVLtlrKM zT{?l?+Qz}?en7nauh>V={Ua)VoIl9)NM+k!!3wLXoGk{eMT)n1xBOnj#-`H$nw6E+ z)AL67_WtX?&wqdZ^gXZE(&WX93!AHS1ZS<)%TUP7%+!@CSYzN~ClSzmTRB$w#m7%Q z46}rLrugpl=T3RoarC>at%$+SwQJWlibhCk*olk93cr1AxoPfWtN)uK4?j)1&3N(9 zUA+~LdKw!W@9z)H-4h&C5bs-CK6}z{=Hispsp;ZvSEOgnx>4}^=g*()_nH6veJUz4 zOG^6c?K^VMy+UnmY&NwXnr#zz^APV7tA?Bn!d9kVPhYwuv~V^XWBcvHZ=at};Me(b zVaJyeCMKr5#hpE$zkT2K=+uj%a&vP551aRarBcUx3gQwaTMEKLV`^fS+Q)>(u60lko2O9^KV}}rMBkhV}aF2(lat%xRu98L_}y!U0YUt&9QjLO_}vhQE}5{ zyq{RVy7KVswQ1)6FU?m%*;e<~8JJzKJrHw~myO zv!;ILR&!apQRnQe?Rr~uqFo;&a`zqMpM8DO&#9ZJlQ;Xqs)RLF3!0`$7tUGKki3X1QX_oI zEnyNCbqlg<{B+ux9F#~?d_LF zlFQabY7cYirw zpL(2rVnJGXQlpBnTBDXj)y9Zr0VztddPinz2gMlp?>?|#;=%oQ`j*t3SeN`xG`H@% zV3T-a7mwS{5D&%KE832AE&L<0COCZV{3VRlA3radWfCHK*?&p<-INVc9Y39BT#?9R z6OQoWm>~b%^7`a_x4Q-34DDFfTl6Pwz0y(acxT(G?LLtrZ;rn`GmExm=b7JmK(X zzH)J=VcE}VAs@`;NBO_lpglA&yFWrtvwsYaAE7FZFYBrb29|^iZ~w~ zEQq`#dU)&QK81tV9!KQw432R=blTe3!C-sa%0$0_5ZT7O!)y$?k@@oZgj@c2#P{NIauc-HFK z-`H8o?V6fY@cNjjP8GAYvkRMG&%!s;RbFWCH1iSI6u&R(FjuIie&Uj=;al}P{~TQ@ zv}R+@r{()+a>ZO&c+a+qsZ#RlN*?DjuLTjSQ>_9|3hz6zGOj)G;`%jf0%}-(-kFg5 zz4dawvcs%s<9#0Se#=8U7o=|1Qj>A){J+9^li(z4(^oS>cUX8odDHdc?fd=qvGe2) zC4NbJ^Vz=dMe*&o|70H+D^HpAq;(PNuRFY8@1&@Z^hl_=?l$US3H^eBaB7DGW2!N zeU%fpzd!!iy{<7hDE4CD=a8=kHXL3nrZRlKq<*1tH``24)@>`6uXHt&i4^<2dJm_W z#m2eI9|;~l>brUSE|%?FOL|Jp#5}B~xtQIM+xvnu=7rYVsUIG!`YF9sXZH8srsV?v zU$*%YwqLeNr}_CVhQZa{ssPXJJL$_vgQS`$Yfq9g)6r zKJg#MTi={nd+*t=7A09l3q$?O4|jg{ocsEthrjuso4brQ^^3VU@RnK|&iK4XA;2Mh zdhWF*qZ_3Tnrz>8UO09%@Scc}>CtCL*RWg3bcjDSJ}hU+@a~EJ=f5q#90jVr?YVht z>Qe*XFFQ7DRJPHu*^%$>G<)G|C-IxgCK4CtOfBTFR4d;7QcQV`)|I8jQ9OytbCwF9 z;+EZ=t)i+cu4-`C#GoZ!yXMIQUJgea2HQi&s&4OZ{%m^P$mzy{c!3y)I@hPpp7R1u zR~v0>psDAW-ev4yymdn{_Vo&?p!?$=bSR6w)MJyn`bt6;pZ1?vpLUPx>uZI z#%k?pJiW(m&2$yb&1-mm`bTatNj$hZe_A20(yw*}kq+neGW)`#?M`lWT&VEwG#Bd= z<$0you7*9;Tg~%U+J7>C&4r8(?^#_h*!Q!}cz$-q*?o=m3`=)t*Ou{INt?0a^q&it zB~$)SYu~Y?NYU+2s48nyYD;aY;#Ac+4_VglO`0FPl%H|hv4h*3f&{KlEv?UfIk_lP zeva9JdH-9sm8iuT^z;NxrI)$gg;C!}N92>8buzMz8<+Sh|U*hAX`I|6IoWNVJ+HkIxQ6 zt@)~VqBo>IRz5uG@6|uYKL)p4`uO7e6pd)-qZX|B{4Poo9vim!p8H;=z3u$6^Ox(b z%=Q+U@`yd$#r^i<5i_kmrLteYF7iyVUCI->kt<{AqW5nOCofK0fA7K{Gn4v#Pp5{- zSe(*Xzu91d#vPUKQQvA9E+*Wc%Tl&ag0nhval_tCk75-9^1E&<)n2YyT-^0fMlj`` z>&M?q81D((7Mtc6|Fiw)-5YsFrWVZG(Y-io+bmYCx3Ar&F}}Onvg?yw*OO+?&F>$4 z$~M%L(!8Sn_gz2JOZN6m9`D;pjl64W+GfpP$^5XMbJle013^qjj%j=~;xu0L%(3=z z6Gx}mwX+i*oS$v&sc@a|(J#gF{lcH(=1Mc_pW0Y{tj%KM_jKzQDtb5ib=2Pq%ShNr zHhq*VUd1S${jq04YkbaGZl=|bo{8;CR0*D0-|l-^{D?BK)UsO;oCtb-(?JMXcHSLILl-Hh#uq%b#uA zueT&ss_>3%?fV7&k8dvVZJf@&=4Inw#*aUEp7nck2ESD7oxV-BqwUbSF7WBB!ZmczDf@#%N9oKHHR zW|9`;@#yZq!N$PgUcIF7#Kbd+t8YB2KH2=5sWRkn*THY=CG@_1GcNSd5ocHUAZydJ zfg|pYT1VGfTZ?}t(U(83W;%MtTx;v`+qN6aSA9tF+P?fN{}h%Dp_=WFpKn;0*K9s_ zzw@ys!A~3x3)V+Xe{SV=_n`vYuJae_4ry3!IyUQb6^op?a;0p;Up}jKA9MqDC;zc{ z>CRJ{a*xmBKq~i-2HyL*ORg|BI|_BkZ*M#*A!pet^GD=w@wdspRI;Bgcvr1!GvlMK z`SK}sxtDtER1#KQ`*8lZe8=<2Uqc`09<@sr@$TzuSDP$nuwH!g?|-rtK`)%Qm6uF- zzUSJ7D7B0ZCRL5B_B(N= z@4wv(78loXzRfR~&wB2)>EXxzISZ@bU-=k(SZF`%))GdSl=pMr`p92=t)6InZr_Sj z(?tviUkhC|yjk?**J_cTiGph$uiP@}PLRl^Twq=O zK;dcPYt3i8`%Ja{IUASge@NyHY7iu+#ARv zwds=n6xk=w+rv2>XY!m_t$FfM(U+OubsAqxlxa)|f3`C1@21^BTmF!Rg-RT4%Mk%@16$MB4gy7PEE6$tcU0;eOensVC!R z-DS9GHDTA=SN8JD4n25Q`}9+D!EK$kM1@S-weNQ8@|^d7|LT$R3cD80`!*8A)~n}b z6ujHD(PXN;t^xaOq1iSb7rcya?tWtQ<7DrpqglJtukI)c<8$ZU?Da(}C)anj-cjwe z+}W0qHzWU99NNec`}@%Apt%Wu)2!mt>f+YFw5!N%-KGl=V--F$?*Iyb{n?Xl%ilkF^5o{tn?-XicT{$KHk$MOv~#`&n}tL~ zc=>j%P_H1N*fcN& zhsFhK`&6e!WfyK^jbb>#p&PNl#CLX{~PmU*d6phMta&j)jTP(eLlM zr|$a8aF+Sh@6W%i?Y193eKM)kX6v&XKYsi^T&A+yP4nL?_JRw?E=J8V?`T{Qc5Y(h zi=FANygilCsV2K8zAxK$`0KQx|pFQs>$YziJhw=Ghdpey_H(X0dRoY;fSwIfV*r zQ!G{Io~+>vc>dvnfUND`Z{Ny(9}Zi=^rt~?u0}+uZ{tU99qav^d*dD&-07>$)_(MT zWmeqk>u*-A{d(_wOvm(!Xoh*aUgpkhdpuPu)FAbM8$aurA1=~~aXK_(kF_%4o`n4jx*Z~e_vE@2r#%*$*)HF0>veVqMw z*Mv_8=2)066Q6P?GWyWz52EE{6~{>4;~~K1y_VbMgF!{5UkBHntJ(yxPxAx&*j(y3s1fo z*P2gj<`jz^xYx}uRP#ibS^PuuUc1~$`?~lqReZ23>t4FDu)Fd2-!u=8AIBGc6H)5x zba~Kfo6~f&c#iU95%~_03OR{^M^%{H#n?RV^jr$4`LRrS6YG7huD}|O=QS?_4p?owf2W-H;&*mm ziKoA6Ib3zNx-L9%?}~R1%ax7(4_glCU;g_uq3-DWPSMjfkBlD&^IP1^`n6=4^o_SO z)LhMu?c1^Ueen&q)EO6#U)=p#!_4RCnqREdGp-#_c2-WRzVNmvatUAh?_=$UcNsl7 zp_R4v&APWLa%bl^`g)W*R`2-7xjj&IfyVAL4Fbmwt>Jlk&P*kDt#tM83VEw;Ue(I{ zX8pfz6H@Ii+&g%4H{&zuiSl=KvpEuuO^{h^vHn(z)785ibw^w7%3CP%l`c3DaiaT} zsKAnStCmV8lubRB*EDF$}0$^vCE$38ne?LEYA|JG{9I-@ri zo&O1+)|@&?mwQ5R{O4ct#eTJw^S$lwCeK|X@$aPgnP;vi1K&KeRAkrwv^F7dGDGFm z%I1t62lO{bG6XF-)4+95dh4@Nt0@nhERIO1B>Gzv`$XD**5?RZp0#rY=fUhYIk}pd zx{tkBXGKJC?6R@eovX6@g5CKQ)eVdXf-fIWIFtCxe&ajdnDwW%7#J)XH9k)}p?hPS zF8>1Oi<%$1@_ttQ`L$1F_Nz|WychZH6JK^4_J6EXcbRfBe*Igg+Qn>zFM1nFlzB=9amwjo;u-V}Dlno+lVwB=$3Yoe~eAZgG?D#8GdhptWs#X2*@iMyczRPApAdoFI~3 zTNb&%!Q$y&Hvb;;rGC2fB=>jDlqx5&#!ow z8CQS8EGbNk-|czv#p<56NpGfq%Dm8%=vlGssc`t)kUtm8jqOf5$|>_Z8AhiZ-;nZ1 zJoxCX=`VI}Nb=(9l9P(&{pnI(FBp34_ng0`Tsxl3-7OgYzIh3o7mt6&?r%#Z9ZnS$ z)om9LOjmBp?kFqglg!b$seQKZvB>Mx!j7!;#nY>@wT6f1uzq)bNUSN~3ZTZ%%y{mZUZN2PMs}cJ8&!0a+U!F!^y>d0YP$zne zdy-Gn=^Y`~%I4a0UgvCS<=xtO|Kp-r7Ps}>P8 zwf}cad$>g)tAFe5e-W=f-_0ycOf1M)k+qcX$>R1kZ?>#T&5jAWG{JG}!;DLBml!xc zT_ovLe*1CUr~#0Zm%!>`E!3Qd;Fr_wC*RIHgX*fEj>Nk*M84FeE9I~>3-7= zv@_0NW9Pqr_pWWk3*YVod0Q_k`aIBEz9J%j_U3f6MHbub3u1b+`cpq& zmY=PkF^SDZAyg}Kg>2$MllyPY9F}FusGH0@=)w8!-?ts--xX}S@TMYe;oaJ8_wMDD z|9Jh%v@fPGFE4NH#jqJ#`~GHi)a2yo%seT>v*cRBR?BIp^kh2M$1OFtnB>7Pl47$> zYWwlkzf7lJh?|=qzn^LSB&NSC7aHE)>nQ4;T>3FXYk|fAlV8doLT10=OWxPHc8%XA zfg&e|oR=qp7 zzhO~gyW`aN8@rAue10Lc_I7HQe$&C%3ms=D)D-eM3RKQqCn+KGu0?6bx}f7y-;ZqC z@#_EX?$b3p*9Dl#^IW-f>r~FpV-J5m3tRQzSHVU}v9^NL0zTgdVTlG^zU=>czq~&- z<6}zN>4P)!j~6f9#>Xe+P`NLzeEarJN6Fsa-p$og^VWas z>iXP&{r8nuzD4o&sY)++4+p$rwfy;L(h|?Wsh&r~)NUrS)mT_Q|NY?XSE<(DCrbYJ zB+SX?|H}FHch>imt}|zjeD7Afs*>7&FxpkX^g|D(J9{je+!K{1?A@F`wd((k$iaQZS9%N=rO0S@7=T7k{li`mdEFhPg}KcncBT&I_let z_x$dg$!kDYimd$PXJj!t9iLJ$-_PNpU~7Ww+lxyx^@Zxf6nG|Fe^R8a zT29c>6N4+0Det3H8q3B~P;w`t%J@jF%qUWW8TDxmcc5M?Z ze*M1G>1W-P=eq5C9D8JnGBwXTDBBl(F`RYO=UWNl!`jeRJRKNOJOn zCnfAPd@M?xwR@zN>4mQ}jm$6Jo>>!F8sq=8r1XUTzfhZQS-A_VKP%_G_`CD3tc=Q} z->;EuT}Ki9Fd~*2KBz#)Un;#s`#F*PSxaU*%`xq9(pNt+GIB&U^khJ~n}i zdiGA8cY2!rVD%o67G+_~Jc#Ewp!vh&{9ZRJHHkIp#e^ zW@^h;ukL=Gc-Z{z;Z)Vrf(9vidU~4YZcEzVIIr@EQ&euf|D>+n?(Y80OI|8x&UurP zl5&54{qm(tpFWCueQS^Vj6#XDIrFn?H{C7!l3#0ZK61L*nnRDI^PVr}nRG`Y-En!n z=_c!j75<*~ZquZMYx7RcUi+`;PAoU$r&mu7N3dTtar`T^nW^$;+b(au)vH$)zTkCX zWpT)?jAnT}HT=yp)8D*l_f`wFslIi+ExxC8-^P^(S9`V1ohOr@&~Kq2bw@pTI*_D+?GZSBmBM zU)k*#9J^b^NA=E4o0~6vq106K_rmK9%^_k+H*a&iGB^I&arSfg z&u4F6o~^r^^>5YTm(N@hwmdnyUhKs6u9lbE_?*r{u7oKwDhY-#R% zYM(CdmMA3?y80j2mM2RrUryykDuX+NF%I%I2{(c5`T zH!jTbgId1_cELKQ=zFSno2ks%7AXjAaU&?I%n-?|SXQTD7Ek%i5K?yT0Ym z7W(&1Y-Ixrw~o<)&;M)^pS*w1|A}eSBp}&3JUta%~&0neP{lAx%u<%y_=?+pP&Ez_+`)ETWkG;XS7_} zqVZ5SHs*%ZZiYJr^%lNf{`GfXa-Ws&P*K$KGS7e8dPpSv$TB$rV^^1@4-Qr=T=={3 zjWXB$L$8AKnYQJ8Q+eR0swxux*1qn~g=^RT3CWtQDBl)v(!cSaWRr&96{+bnSz_)V zP=ybrq}e}y4!D0M zGIF1C?LE20O8FTT7RxWY9*f>RPw&*B85`g6y@|PcG|<*gEG)@~NB-*k8#i*!U%i;C z%NH2xbfF7QaoL!V7{;Bi;y~Y~E|zetdQ8)vE5}$B!4}99z8ncJjjA6BkUF zpg(K>|38I=rM++O^(s8bJAG0x!#%=<`Ow_sE^P02J>UKNzN+HM;;zZo>q9k5-&lzY z_xk#VtSS|G^Jdk1+iV#V;qMu@W>1UH;ka3yS@VS1+Gj{);!uT-|XxhKg<4gf>CDq&)o0sUA2Ej^scOR zKi;J+x&A=jzL4T-8+m#0@8yEw_4}Wv>K_v>f9u)d!D8n*=Y_)e1#wfCy!&`#hI4D0 z=H#6{dy@I)$u@PqX6)$?>b`+x>Z!Hs6LgCeOmG2WbzE z*D_3Gs(2yRuvWjJy{*0dc<{>Id-mVsXKQ%;H!pxAc(Y}6=8;4rX^CIaAyTCO)Pir9bkCeh=YDjgMfbV;?71yFUIjL>=6pY%r?02??%lt%7K@Adb>hqykIbAo zQ{)9hi~TIkDQj1R>FU)gcZ)eL4`M!(mS4R2QqIJ6fw^aoSx>#Yk+Y-W{Q2kISC?$r zV$`DH_TOyJmPG+R?VZUbl}x$YPfK0>nRTf`V&aa|TDgk9xMn=cId}eP>Vdtw&rV;7 zpP#q9S0Z3nL&l>gucWj-r0)Lx=KK0d;mxhrwSqfCeSiKw^7pv?w}^iIyCM@h{!S0N zvz~{CXaDc*)xUpVzWJto*>d~j%`?+|CaIM?3!iXwBIB)>@A=={|L5i;bZK>Rx46W{ zU)PGZzS$|IAD%HUxjcD+!4YARyHCy}=5I3HroX=P#*-Hrk*|5`&P>%#+SS(9*Y@nq zlaR;zqJDh&5|V8-|45IfTm8SEib_+jPHUMQ{I@oCyS-9W*6lgh4Tb(3-nsmhsX*tP z&xLLV0i`z%1g}oiD9%u~Z2z$EnRU&o!y9*`*FCr*bl#bJf?CSC>(=4x`U+}7WtM#k zvp*ES;q3oNX+t9;rijzOUClT3^qjdr_ZmZ?rC$E@Ez`{umIOt_PMo-LYSJaouWv3o z>%Dr$Drx&ztYBr_IzRcijZ@2>O?$TW-;GIvjgLgk(;g<+_APPw{BY8oZ#^sC?3wAe z+WYUenmM}@dN;1!z$I7rNl@(Jx8?U=`quYKOu3?{#20+}?35Wf^L{)%+8We-IdxjX z3;8Tx&);*du4aBeeQL_Vy5_x2D%M&2GCIGm-dMa~#kX5(lQcJVe<}(5q+YsL*6oT~ zg>$dXo{!JJ&YZe^Qasnush5ggSczV>oGYdH%H4|NVY+;xV1E6qsl}78OtVPt`RiG7 zVDF?9pThK<``NR9y0~mvH8-*4`Kev|-MiGDG_Lor$bEDw(0iF$xC7&n@4T5`U4N!5 zm+;ooC^LLBIY!x>=kAP*bNVx9#vEL}{jcQqsn)jJML8@Sf(=@ERl z;JLxYrRwWe-TPQmA2;12&FM($My4Dg1NY65hEZl_IX=%)lMVOQ>8kC@orCxSAQmyS~%@#(#+byb;5ef-s%}&cDn7&4L|v6yXMqK3p&62 z^t5lPb1OOByEJptiWuZ=WVi+M)H&Tj|G@FJCI8(l?ixhlIXRo#5@c^pclI*X{Y|XDL5(|F(Xm z>Fp!eD|~!?y1cyiuQlFW!pXGu%4d=7g&Ss_c%*hQarwc%AdQf)Y$ZSWmg`M@Tke;w z%!yd6QS5Te9Gh8VDXyWF5oL|mHTcn!o>Mpx@;zR86 zgA7le@bc-3^v$jI`}p~t_@Vocw|ZTXN{&+C+xjX+_~`GlTsFym)8ycXGX7#};bBo{ z#8!X09Mk7E^Sa~YgrGsA{RXX8%;5m6_@#3M*ec4dC4#ZnjLO*8KDR zDPKH`(>rTtf9H>7JmC4se2=QrHapcG_j5n|3{Njpmy`DM759DNc~g!%;?Bjqb@LV$ zJ#%{-pVg4Ou^#5HSlx=o)*%f8tCw%`x5+Ct_j+;2AvD|S{mFPWQV{%-OO?X4^M zCS87G+^D%{`MI*|@0ZT!xoI?etm4U%cavh{oqoE$hbayG!qBYvyQvtb6%+ z*Tp6k@%JsAbNwU}l?oKpm6V*qS1!A<$ui@yzvyBv!{zMyq3gs>O%d~7aymEr@vmQ7 z-CuZy8%@KtT{xdDZDs@i>%gyXj2dQZ+L;-+a7Zn+Wt4)NG4Pa{_EnY3BwzT>RmHTH8E*2E zqLY@a+_GtY@FHQ*!r452262hwwc_FFFe>6g%6@oSr& z(B_#6wKAWkFa&1!maskE{Onu%!Om%6YM&vvpdS8Y_;^{s z@zwb<)u-1RIMi)2_G!KNa-*utgB5d6-S4`i9re%Tjy-SP#Iui9S7twq;hVR%TVMF% zy+uNy;rF&XzGMmH{N_=!YXwJsk=>g=Y1_8c$vbu5EnoTF?cNQUolf7xmTvt}IsfGD z-!1>el$;cnjmg&iFw&nA$dnJ8n%F=S1#1@J0c=ofdmW$or%#|-U)jeBU zKl#nq(n}xK$dp{*o&BKBzy997iSvT5ryaBtuhFwz+q=c!Oxi(Pi?AcBI(1prTv}@I zH$|>QHlDBY_Z=^-$F{Gh%M3Ed%b z9`CiDpIFex>?FSF>tFfbVq%dohi1O~>3aXrf>ldb`=44Q(v$6S^ic6~yJXesakywcalv)7#YICCkV)u!j4+cXVSj@cXj+P{BI1cd0~U7_ zdY)-6dX#aIo9laDo9%V6t9#SuiAY%If2?lx zxEL*M9Og5<^pim6LJ^+FdAm>De8>McD?RDC?);j-r+z8D2OqB&Uii}}W2XAOiHTnO zFZZrv>ipruvR9wO%Xin6%Ljd)FS@hdH1pHf`?tLJ?S8wqN#fO~gh1tNmCHSRY&OP+ zYL+}aP=6+=F89P`-dX|UWWI<4b=CVTFT0*Ro;mAW zYMO2R)n{s{7M)8?PcLlyFtvd#)koig;;Hod2HmS7OdDipN`^Q%r^-lZZ?^JqZmVa8!y8OfaeGExb`%OYb z|II)D&VRC-l;qvk{&RhNpV}{+Q{T-$c}Lv6+Q$1Q3l}7;J=Z=t<>7jZ`H^!3jcv>- zzHbx!b864*Lj{))y77u7^KEQW+vUd5m;E3wh5LcH&Y^FzOiEYIUA`-QFK=7aw-*vI z2iB}HYCZbCBB^*|agW-)bs-hM-!Yo}liAs2oizFDH{0U*>KxjJXRDuyA1_O|T(ql3 zDR74u?APKn&y=?nDwHf zWaYU}x22CxYZIQcwKHx7Ph~@~->sj;J1$My$9j>|t=hurRpX&l1(u{$;k|o&pFQ-t zIK6P`ANe~@-bI_f-FUFhfAxau)zVT0Q3Wh-L{7>r{#JH#eaQZO58dXx^<~+%XnLi+ z>*<9Y9)D+a1v|f#-zlJArdpzrc}(c1Ve9*or}iZ7aqDNc>-zTd{U#Hc-M`n}J9*`} zaAI6T|AFc{pFiKqlT-X`e9JZeR;gW8dBa^k_fPpjri~8Idkmu_WStr8<_I5QTOD%k z^%7R2^7VHa*KMp9P@Lk!EZ3(!RpNQoEAQvt@varq>y@JJHhtL@o~XUhzm3;_PmJrE zO~<>s54h}P?Tm?KT7K3_Gl%i>-pW&FeLOyWDedKR_As0A=4<3qjonS2z5kbPDtlcQ z_942aKW2abrTH>j11qHZ?#oSMoWDxr;RgT7dO6uXnK#}}wGO`e)cZ59R_k(~Jk#0T zY4#7#R%v^_+;*{c_Z7J>=YPMvwe+)OkluxG&x2-$oR1sWJ901lYO&ZmJ!+D6hL3v1 z>kAiHR-V$l(rS8r^8Bkch4u|9`z*Jp?$%&`v|MfJ`}(WD+oWq+w_lknZhU0bq<5XR zT2|+GEEP`oy1|m##1SI$V6Vc3%D;T;Pb4_~6-~amF@9fK4-`~v%&zpycRp$lz1wZzqN?&CV~a!M z-Rb4!Dvyuto5i&5^`z6cIsSj%pj)2or*8cF-AS{=mmy8*dv{KG{qUdL^8B>4w5X`4 z%Ga?%@oE|lB1%csJMS48X`DE9ka2$4^5-Qx|1qzKSQxVOXy>+%!UqD))}Fg|TUT1X z=jdC3bcwsB?}B1DoTDzu>TR#uyJt_q4Bae^rGdMmV&DI+s*;kDI<(=1r-bCiUE2RF z^7Q^{{xn`~RMXva+GygG_vJGd+9w#DmNmRpQ2g)Y_2RGgd3C?5zV3?1mFPSk7as6o z?!0;PI$yr~S~pij%CPhFUeC^?wf815ObLvPoH=pg!u^Y*@)Z@8KFys~Rg=Q9V4<|{ zx8p7UKa1I@?eDr-BR(ggQE#qSiI=ElYU=aeKK=!LIS)Np`umr^d-H7K)kiAZ!os-E z_DvHKV)$6}`r4w4i@o2Z@bT|^aVDqg?y|)NO@@a{wskUC9XtEiE_~IhwQKh#?+H>b z*mOz5yJOPi$;!)D%sBVb>iT_t-c7q~C%L=1t!ql&e(M2a75n4hg<;0$U61|CxwOqX zJ<=}W<({j;GX6{Dj8~-d*Z8~FXNRwD4xA(5P~zj`!}jd^@yqA0-`@GZ{bEpZi)!f#{V+c{A*23> zY)3wJ9o^j9+gsAf@pt;suBV2Ff~6&Hi3_>0>nvo7_ehd1{XJ1@>XE=dPfk>=4L6(g zn?+3M6nmJ-!n4}KLQPf)S9#L!E%M;~f3wa*M~0D+x7YcjpvLQY@7Lzcc8l64$%gYzEeu)fT@dQC`I2b0&!1;K`(7>2EAo!?*W}fZkdmx#`&Ap&wY#i^ z-ODFY(s4mf?Ths?A)UPOOXlaN_NL1gdtc{SEk5z1WltV23#+1|O>2?i`^C!2Rad(; zY82#px4wNDs;e>gRmtMFjc-pkR=;cKE!Y;qd$d~Yglg)Fm5ryr-k4yPv-@*lvB|b5 z$)D4mZq_X1h&fPr@9#sye|x`kCtu6GcDvTR{qjmp%}hD}_6D~B#)G_7ut$Wi#0|j#@PnlHp|M>?0eP=XI*6{H3 z+$iQT*>ZgO@)<>sXLYQd``X>Z!<_|kwpoz|)IrcRwY=~9hNZ?U@MD%oS#g?jeK?+kb+eB|j@ zi}Do?Vfh+uAyVz1uKP#iT~4?lTUj`3T1?EBuFaMU^IAXb`WM(^px~63mnSugb8Uiz z#g2uIjhyG#zj<>qZ_BRQ#QC18g_f~z%Gee)Dr9bGxpUV2)&=Wdkw@QccD}Jdy1o08 zk%W|5+Cl64>;eh1r`&O?Y7Tz-y1tpy_0=_=yICav|t&tqxpiI+Jya zwwjuozq@!t%k`Aa+FiHr%l8%Um-G-&`p`OSSB+Kts@-=de`tuFZ`uB_Bks*EUi)JQ zFHS1_wARe4b5Z}Zl(@^rc@@`7);(d?P&XHU{q*#u&4-2dCB9ql*qo&>Lo*|5-+8U9 zFuhq%{~7I@U~#N9_^T1`qjl4_TgN!n7H|J)T|8mpM#E{R_U+s`^GuGUfWoch8Sng> zn3OqBgob_lwPTO%f%E!W;hObQVoW;0zY?z&#@>8n^XkkAIrZ~*s#jh!v9qn+d$CMj zT6(tEVpd^p?Fj3KzG4M)5+`4}seXN){H=#)_b0hL4%y@*uk2FXXi!*MxwG=6h>Xmd z;F%AW{rq}4L+f`eJbg~T+ThZau3QkA+*ZERrB7f_x~3jk^X!? zm3gzIug;m{=hyozR8Ti(-f{1M`H^j|GJ-~xm-fo?Khy3%chpYn`wF2l6(+rykSpso z47i?3E#*2obLM=b<@~R8u7A9E@q1aB#2vXc>zpoKW$QkDyN{1=pL=)Dme*_>ukkFL zad@#?&hly-NomR2{x|%+Jx{jT|C&2L-$EzUd!ZF;n`C^XG-qHnV1micat5y_f8rldO5uDezMrLt1iZ z^voF|TenwltKP%+XS0%}^`zGxlkTL<{5|`$ACr$j{`B@I-@{)v-url_bo*J!f|-_@ zd7E}DYHMpxJze%yZTBIIX9c?_pYuyhbGLlsrp?^ES0wEA%9WZSJMINt{bhRn^R@h> zdZAZgmvdaE`W#VI;5(bSp?T6#xApRkJ-Sm*l|@^xZ#?|+(1*9o4>J>mRg-=-9`zGX zXf?VYnELq$_vzCU6BDOq_o%HeYge77yCh=2?~2V|SPFQK9$77!X#aQNysv6JOjm4# zS6DvU7|Bz7Zgtp_XiekIkL-Qf4ljtZ>i*^S&HKzMjoE4`+OuBHV%HDeV9Rne^j2JH zM*5-iQ60jMG`1#8NVhj@Srsej$F{O-vB;ah7GE-U-#Yf?&9&D7i5Hm|pTwG2Y>)pT zx%k49H|dEj{IU-G=g)C{zTx!2xKAm~$MIvW`rMnsS~q$k++^pUb1rb3xs%)YOJDTE zq@R~ZqoFVYY(fMm}*_w=)kQPpywAk+giKvRHJ*VM_ozBiHyC!C!0pE zj1y4JeX{+WbEmsannNw~x|Tlk_Y;1xv_8(!cQjNGH<@%``)mgN>`*%k{$#$WAlIEu zGTU_6&l%1OT&9x0^Ww6vU*-LGCGFibjX&}AkD6~f#`k1%+m4njbbnjrs`5&F#u?WK zQ;+S>{yjm+e1_bU%b}N_{#zmad?IT`O|h5dx`*>!7I979yKj|Kl*z54J2RH}a$RSb ze^&C(*OOrv_H!thI|{8ZuTGf}xuQxSRbm-?%B;3o3zaXjonci!!4oyL%T4!u;lrKV zyH_S2W8|FhdEs{b_p#@d!&QCnXSqk-&fNHW+lwtC%5x_A9XO70X1-U&;?_Z^mskUz!xsrXQhfyO=ed8?+yDfYd7{c^L*zl*!B zJU;M#UG%O0$2T*3{`~M`^*#MP_s)AIn@9Y$(lgifW($yascfFI)b#wz!rra=zu#?W z@iS2~5bgev>9F%Rt^0{@g z&d;ldKcuU>#=nW`zIf5F?nD+((54CUSIZBir_U1l#_=WT3)`d@(u+lHF17|p2`p2y z-LovObynA|6?MXiuKmw%J$}a$v6j(MvHW%U+4zQ^b&BO>tC)HwJm$CkxNPd3W95Ht z`a1b7-RQaEd&a73;;p;9H+xG(#Vmfi>%h#d6{V`7o8P`|IeLe?NA#@vs`#I_^^%hv z_uKrv(w|TyW9V&eT9bCReVv(h(4xiXI#@h+Hcfh{;drU%f&Rl^XQ#+-TwlL^dq&QJ z{)#!F-jf|}H(xhcs^)rf_Nt$HT5BS|2p#d^_4e5MIOFH+`jq0Li5EBc)_Cn<|NJ)o zisJTDhBaG4MfY5tWA)_S^kc%ESNP^W|0$(;$$o{Vj+0sT3QtX4GeH*X>*-S$p83ng z^!AQg?%L@_b1t@4fA5P~a_8ituA=Tc^8dtMgiO2Xxb?RIbL8|t<>&d|a|SpDPKvGW zZko7qoxNby^m`?1Ul^w6R~$O|?BvF$2m2h6nG@cw zKYuXfc%_2^@A`N5S&p2O=VLmV$7$a)IqAsy@SGos?|&Q>Nq8DicHXHZ-Rbm0O@~i? z3O)K7PA9(lm!;|jJGo^F zqlWGewbH|--&&?E*tK4zkk3XfsQ00ijYF(=*^g!VQzsUF2;EZRvHAt~l+~eEnJxBR zyf=OI`Be^PM`t^ks-$j6_b_8mOjY=CQ+3_tBhu_?EB8O}>f;aZrS_u8HoP_Fukq-Mh>o-YEa<(YmDG z{YLe*xp}J=nu#{Z?236NpLoZ&H1|fF##<5bW#=1>`)<$95*HSbnPt;{&PCkxgEzDK zt=W^No~oP4r+)W-cd+rPr0%HZ^Viti%coW-zuc6=anvYe^LFDe+?!S7)V2xlYuO^F zl%JBkWb1d9DSM`CpFZ8T`PF&*OAjyT7ceju-Vggy969mcst5#Tb>3UD zps4Y}e~tphe+(?ii+QAtw_RD%*zTn@S1Tj%U1;v5e}=yra&_*0I6eLHzWeqmGj*;X zc^hcyZd6fwQ?9GkX-E6NGt&PI7GB>S%GcSXt32=gwzBD&8Jj*dl{~yGiUx7?9kAMgFXTFA9r$dL< z>FJ4ehyHq>zkcrAxiUZMpC9iuRP)JVXJ`Luw3IV&-=s;iuIXi#v)3?e-LgezW!f35 zp5+_rjvaVmzT(;Q$GffL1Oa6RZeDUi& zr?9eH>_YQSCLMiQvF^*GM@gBUN1t7lX`T>ysOjhF>G};3tB&uC;V*t{D_8!Q)%l|8 zq?vB)?A$l!U%q!mvsTqlz?NK#FN2{G_Z{fdc zsZ;OP<=vTb!Rps5owF=g1RIavyLwl)qvd1skDq8{2#mw0{YKAt=^lwZ)?jg!;0fS zGUUI>i%2M~7oI<1LffsIUYqpyzk3^arrV!iOeyR63m2Q^uJd0%;Z6&+yLN7tO!kcF zT}NC0Xii$MqRjo1@1kh45qqHM*Ii}j&zmjoJ(&Jc^R2CX>Yk7Pmdm?8uDfNo?!L?H z-^Q}CcTb-_EuQq~<;s<-R%wa;mz4aF``p=jTSuob7oAqw~Sqa$HBpRYrw?|4BLf7#O&hp>+P2?#kHNBa%7pO$aiPYsay8M zYG`P3O5eMBkmo`igA6xQ&vuKhvo76>WhTs7vSdlCYh>lmo$_y<8})`=JTu!kI;AfA zECb8a$w!moC&W+LshBw9Jb!TYyKB?ijONYf6Onzvda-8yye)P2d}WTTG_C#i+1J^pZC}(~pJ%Pg6%9R^WYkkMT_Jtm0o{g^f0%!3X=t1{del`cebddS|35$XPfve- zj0@o;kZa0+|~e>;F{;&6BzL;>C-Vjqm5b))nio@4L4%%1BqBf9+@5HXKq-3)jz(k(DvS5x5xKho5m!}7kbXUeoYY3(|; zkF>h%J|$cKJ+t%kpKGQ{7p%6G3;9~#Y?!o7T19EUl=O#p3GyOSvzU*3`B?V*v1J3x zmDjv=T>p1(7UouTFezW@Bt6H!MQdL5)*=Zm{fT!kG9?r{yk`8hX4y8T8<{sOEVE8X z@GUb_v*J5fY;N?uK`wS>Q^Y?Lxp`)6jWfO(i1AEpNbY;0%*uUN<>$Zb&`qlrTsHn6 zd%SDKj2nw)HmjB~)iyQ%o$oM9c3YpxGnH$$#l7o}Hns&TaoiILk3YXTQ1p&&$iZzkaci@%8@V{lyn9T`DRl5D*d)5)=#!oGa_L!dRB) zi*QBXi;Jo0sS`a^3}@(uT)A?kqOvkF|9hnQI+ujvHS5-`-OG5#!zrlf{Uy(>=X$O_ zR9QH6^N|xD+GlQSxqq{KTk7h|nHQ}O{X3Xqu;=J(qi?OVnwy(jSygXFemH%6dS@r+ zVfBNHwG5whxZVxTbA9+ZW$L1D<)xkHyhQC|HEd4$NNRZLzWcrDb7rw{)B6vC#X|gU z3iZPClO1oHy$dp3S=7aNeVVSS@w?;96MhH8@7&%s|46OV;&iur=Zi!xAMA(|KJ$0i zDpzCQv!%yN%Z~=JCfSQ;PCaS0F=={-)nENrFY+XRY`!>SUB!Q$(62AAo;-Vg{qqo) zxQu!4v~Mn{N#45glVb1ZdnKNhbIKG~2cMbwZX%QS zU#w+i%3t>7(4$8$gVsv0{`#3!yeHrrf5?v9J%>4#Xx8?)e6-V@Wq)N>$clm!KV%#= zT$e6=_D#8gY0moZPo6$$@Oq`F6zJmWvWV?#%zM9zM2-JDPrfZ#E86bC_u~EePsd-^ zZoISd(>L>+MUoDe&gnn)&+R$GE|%7+%3Ex_d$PAvu#xhWxBB5vp6c$ua@E~@t@bUiXGphEO|O zTg8VP4GoOW*?H8OD$G$?VO6yCr>f?}(i#c&wZ&;&uYy?PPX1Wc-*qH#&Xkt7w>z7< zv%fk0{<``=`IX&0v(_Z8x^n-ZDLbq5&9-mxjRrxhgeGVI`?}?QO8$Dk<>p6@KhJ;E z=Vt${hUfA|&V=5hpTp-po#a-2Ic5Lh%Xi#dFFfl0dN#v|+hbl*i-t@dzxbW^{Xte%Rwouc z$!WJz{mpLq$nxX_mWp$gQd54rFAI3qw#xq1p^d-v%iABHHjSFkwy4u^g{ei(_ajG3 zR#%5#x_F7}QDFDwCGR?J1{Sa!H@mdIwnjC{z4!Z->QA+c^P^;IkNpx^Q*JS}yT5GH(5v z^eHS_xaivbNB?Tr9i$#diOM^jH0e7SJ3D`V-M!b>{+eXCozb3Yr~F|_na(_i8}?rH zLXW51TQB%_9dCd2LWv%sD;HvKPqs|BbYn|Q(aDO_efIv>IIh>|WK^y^UmbAX=VVT( zXWS9LEkU^~JZUB~cm8`)bLe7nWYj~m3u}dMhI5~3Jy0#m-Kw7vtnl^Vt=BP{_pV6v zel%3EkX`gLvvU3F^W90^i@$$!3)yfj@r8ezdz1T>^S>_qJ=(54!q?T;o!XR@wiY zqgttK()r`3GM=3|{?BM##^RtWP26Iu%g+8i$2LRHW$y`<7V{~gjq)1GCMEleHMp%8 z?Bc(EBX}Q|@_NJnJa$%nWlORq{uPa`n-FUd^h0S?^|$oC$P2EH1(jD)CwJLoR{AZv zC;EL?Yqj%C@mCs?1pb805fSLodw6v2>jn1(!*3*Xw;p}Iy{)b5X2iKiYl54@R@ZL1 zczOSQugv0S&o;g(QD<4|`R9+a`ea+{g66p=qVH|h?!T+CX-(L=S8k@FHoB7Ta@i;9 z`lZs(tJ&Cv+pSdDQ8P6*#^+y3XPK18gNYMn?W&r#v*gu&mGTbXd0)!2EtL3zCDh(d z&%gg=dRC8S^mMPuy6+;bUi|yI zZ^vCcnir59E*{Zr*?l^H)~0PMlUs!X-2YE9x8B~ zwY;gncYtSKLBnL1IKQdBUna{%&#DcH_w6Pny?0xg+S= zR=v$j1A2?UM`fSwNGY7WxGFvUxxZ!%XW4f)@0rq3F>Ifc40i5%YQtTwzP7q**4Miy zlQh`A-rTZA$o1uvExSLc)t>Ob-F3_}d_zd-Q=v*9W+tD-5}zgG(hhv-2&)JvkzWq@veRFu+37ZvnRSk+5 znu=9e{s*jiu`J=r-`2 zWJ^x6dlY(OVUn{fTaZg-cRx${;U#^xd;QvPL@hEZKH>7%vnsEs|LiWa8(fQ5I#hhl zE&lbyTy^uL#)@xS15Ph-k?U$JY%6ejVi%_`us&bMv}^}^;aTtJ8%)hY=1jZ%yWPgk zip@UgfJ6;*reuDCxJT%Rhf+I?<4taDXMFhap4j}!-jP|(>*L?gSj>GrJ$mJoQ{Sx* zpF8d=mK=L%P6_Yi_xpolYfmrEKP!EaPp8qMk*&S$^COFQ?&r^MU-~6U`te1z=m#>( z3}5|9xfed+Lf7V5j@e7tO_v6@ip|R|>O6j{H+0Lpugn*=Xfd74eSEz%xy(*vZ_l>B z^L$czh5w4R=wwD^lz4H6&S1#Bbe`qRin()or7m_I)6^-m;N5>#M=dBeuQ@y5xxuT1 zMSI-$wC{N*ev~QvPitqKjcnh)Q6SRJsZp+nYnYTfe~ z=V{z^?j3vQHOI$mPvhiLO#Se7+g7g`Up!QDuCyAii;#_ac`q^gf`D~OOo;Q#I~ziC zG9~L9(w7^*Dz}ur{`*PB%jrQe-8)iRE^g6%w=G&j&Br7B?X|C671#2A?_BzEl0vEE zGi5ic_{zgQ%GW29z6&~|ZgpvWW)q)?^p#5|m{bxDHL&e??ex}-nQhRY_RPBWPl_()F^6SyZP=TajO9@yhh0d+->{PS2R|iR#b;SBFnZOI(;F$P@Wx@qzsmfM zRV_k>H$K+h6z)pj9&m5<)V(5#+wQ;IbbEC|`O}s4Ca0Y5JX%DjVno)uei zW43+{TTpKHUM2mN(@&P7!G)sG#sAPEM0?)$0B=>DXx)=Zb zzJ76<=I7phPZ}laScMKdRtRm$u$;JL-UpQw2HVBlQU@9;VkgJbGPdf zPs_%LX{GEXD_SRtCrOK(JjL#Rh0A2o|2>+sZ?fbGE3A;&uzt1 z=eDaU%Z_e8-pF|9vzh9Vm)lP{1=%&)oLRrzF}F9d{D5`6QBU%-Uvp9)rcFGTm0e&k zv9i4U`03N!y)CDih5L^8`E4owwM*V)dqgfrK}?Lz9=ENVZ91Q*F6(sOJ>S0mklG;d^E0~b)ui`VWs}fPp7Br%gmW`=9zbywCp|W?FUaNTsS^;e>S6)RfUM?^Y_`ULYOX)y*)b!)>Kx%w)j zbN;&mv-k11%zwD^-s%+`lV;WbWtpwD^WLMFzvYpgQlU0{P7Ze8d6l=dY%5cXSL0Q4 zve~*!fJf@WH^m+Qr#w6O!)L~oX^)Z<5-j{CPM-8m{$F6n_if6L=O3<1mWyAWGhe81 z!HWybmmXS|ojy?V{#WGRzXeA$W=;-etde~gI8Xf8D=}O9XzO$5ZbnAsTX*GB}lCN zu|ubO%CxWi;--yfz8>5!d2`ja)d#Mn9MiG8v((5#{M1Glfr9E4wVio8qm7oDOLPkT zjOy}Tc+KJSk>C5zLn?9nXhlAeltG$slYVe?d|MKq8Cs2 zX0P-Y%qtYMi=W+kW#3<>$y@gsa|GM_ZQCR;(=v{Ek;2#L&+jKIZ02XYHFfILJNn}L z9;sYb+gg^hdh+zg&l*=0OsG-1IoWNiR=~cQ`?+SG5!(}x)K&wHBg$wGxxVX$ceE8_6 z2Ms4@>Rz(6vQkoZUo=s>reFB0;+zjQ`?v4T^vDbK)YV%Xbv$iJ@%5aA^7^+v3PxQ0 zEy3IMwN#Pid7kY!v@7w*7xwtMdj%%!FEE#1@=tZb#=wea-S0wN zd#pQ5LRx3ZE&q0-PV}hJ_l7?~uO_{}THARi_l4B5CADlb+a(W8|~9 zqBSRe2-w{+efZ`1y;B#q%*~KhKeEJRc8Tb3nO8+IZ(PovXx^om7@Yg+@|yj%?TB1 z@@t#P#=k9ZcGx5^+eilS6c{(PStw3A!)mcz>SFS(%coo}d+}VDv3qXy;q5ioSW+<80dhtKn7tXBSTVmlb#-yDFycdE}3&zVk2j2nVTJ>+9>Y@&8#M z%Vv}9xt;s@tD~1pbeEpklrwMdBL$}Uov}sYvDq@|TbAyP)o7HleCXg2pXoGld01X- zMA(KCNdDlsg+xJVquRWi+{Bd{3jWgV=Z>qZ)F2)FdDN;$8`+l0w*@&yA zMJu;@J`Ss#bl6~OV5_@;px|P;88IK{I86H6({J~G;!fGt$WStAGOxa@_RM0ogug*wXNjiYn$j(1^u7C&3fzbM)N=8wl>N4qA_lh_rI9#a_qwX z{%emL^TR}RuWEeyGwadj#2UB1Un`~jtJyE|v1RC*2^79ReDTqxA!mp~iE0GM2btwfhM3?PJ<35w7yzGncR1 zJEm!C;-OgQ!HX-K(mS+Z< zsCjdgKi&21?Yk)My1lORvb21IZQoejsF)cqYvr}MM$<)i`Nx;b|2xk;cd+1;`zJ9k z;bJA-Qm2CV=5|R{Gd?AT98-N;w7Rh)=Cbmn@c&gCmna_d^5wYAuq|WH#uApPYd3CI z%E-8U^eo5ubY1=HT<4DV%l9qZkl;|KvA>Rq<$6MV`}SG;#n#=vA1I>UyKryYAM<(N zj^}O7KNWnKrJg1F_=k577VvWHxmF{n;80_*T02EAjJJ3l@5blbLKt}L8yo-qIsQSf zF+3-As?2}ACHMBXG^IPcC}01zY1_fs;o9Oa)`)Y(Pi}ng>Tr6h*BjS{9Yuv(bDt&8 zI2^ZwIp&h-8?e$$Cr~$0z$dDWu3ra8@Rzt;57Uw^i2 zIb(a6=e79{Z7YR$>ZUIZuJcc~=r%H+k{c~2e$s7nyUU-Cev^0HuXj(Vc)9t+p-QoW z`*KHx{Ds%>iXLgXCZSLh=EUxFh4-}tuja(=IPr=Ohp-RnmzHp^-?L8otwC?##_9QH z%38B7yy&>AQOx#h!*`qWwzJ~D*>c*|y;85vzEhLd+LQk8?3o$^ffm75hjyk{FAh$b zqu6wnLsoo>h~t&2C?%&Ab0=P&Cf)h&Sz~5P8vkdGz5CZcQ!h+DVX>;ZGD47T%g16L zXV=sd3!)A^`+ek38@r;0v)3<&mk0bFHXYo!dHeaVJ6}ZWOUlUEA9;4*@$AfBPDkxy7dB=i&96y!3({e`c-UzO#K%uv+1+dtX~0FF44_C2gb-`|qwzp~ckS z>$^|PR(-y{^TmS;4=(rZIM>S(cWlXJ`##f}gwj>jw}n=pYZusFSbNCn#lP!%t$uS) zt$g{iV5RczWpn1N_h`Jmdw1df`sY6KUdxJm^WvZV`E{_|K)`p++O@i~vWqtba5|@C zR`%WRH(+Ar;E&DUdG5}=d;4xa3<>dBbMs$?-mHjG4TP{(qvdCjb8Dmj?07vm zc2cy_ja3pdTLkK#DCMpDTcmRIZ`Ss^;&sKvn>Q~O*Ll#q=}Joc8Rr`h{?$y^7JL7( z%DVr|*9BY6CwX{#XIsUGMMbROFvb-Y0m!3|ACCj!=^2o0!y3`Vx6=ZL7?(e-v-zug~oOto# z#f_UcGhca?p}ytp>VQ?7s%v^ae|&u3^zm1j?sck{E^sM*Exvv3`r91Fg9J$L7v~2O>#Y>i`sJE-HGK^m*+`XJhBxYGqc2TjxOz}^aj8X;MT>tB* zz4`wAyS;$>H*sIuYVc% zMBNVDo#xx`8*sj$ygvV>%~T;Z~A4zwfWIFvFI^KkFU&d7p<(n7%&7gj@X6-G9~Mq6!^r-@YxqUVP4N>sI&I zOE0fId)Cux*1f;4Kjf^wyyYbO()TNFuoQ7|>G}C_>hI+{SaWQByDi(*g$oyMuxl}> zNh!Q>=(L0Oi^{>P8MfB*iwckgoUsSp0&EV=n@zSEb!8Ggpb z0!JN$7Hck8u>E-9`IU!f&)=wW-^1gD!Qs09|MuQ`V_|Rp{mX}hZ2=GORxbEl@#?~# zsVz$~zHt=HiW2o}pWJFuUVCBvhvzD#q z$q%JZ{(WXL>xhQ3ax>TR{nsAlTE8^aY;!nzUb2S{Ipr4+!vALEgrr15`4V8PR&eC44k-P$B&a5b%|j` zp)V9}{CpO%bXC90Rr5n!7TPWx0*N`3dzL5G9d@n1?3Q@)=}+VTmlrBcFxXmkGvvcL zq0?JJ*5u|)$|!ABnk{=d`$?Ss8jbtGf6lQ4X?Jks?^`JU@{i(*1ePF|R=?K@%=5Oc zUHiIj)#4q;on#yCr9ol9~Bta ztYeYyKPCo~i;GPyia1A(G>TB{h*Js?isR6BV4eV$1SKDas zk(zz&+O2F^XG7(yXDWXOyr@@iHe{-ua!%W^@nUqW`ikinzB)Y=-gskI-QJnge!1M; zF@M{mS;y?2^|0LbW&XH*?)?_gH+FyiwhG9ketNI}X+eL*0shPr^}i>(%T>hRdip-^ z)qMNZH+3%p1q46(aWy%ZdoYzPP&dkY_4)A2KN~l06j-IOdFD>bl8`I!eOD;x^WIlb z(Pt4WD?5Eu>)^>dD+;dv-h93Ie0k(C^ttJ^y?zwbyvi zn=kwOdISe!WRko?3y&lFg2s3I+XHe-YAOc(dHQ_XCw8kj>z5uoc8kg7+x(~N_cx~R-xJfnc;Uj(Fs3`-j^-q5g}+(&uVm}a zeQSEUdf#eJIFOu>({s9v|KZz@AFJlyOnRD-+#GPys7{tk<*)Drmk@;ul2T_38vF%* z&0V|oQO&O-(=~e!vDXBxyr!~l!-fr8zKE>YvTGIBgD*cKB91Lvwrtm~tGDhlCbviT zW{Fu@MJr}J3Fx>{wQSk>_Ma~c*gl;KtvYz}iTqF=#AR?)!uXL{*~|k zcRMCLJScPtzyFP`HIO%QxA(YCf$<^Dgh z(gyqTie_$3PR1)g7s|>qAKvJD%E`OCU1i&j6)zUaDSW7{t>s^q^2vP1+P~8tEMRKc zU&Vj!yn3(flMfY@Hza#nRc08iV!SnT?)2^K1?wOG{8TnOHc)$Y_t|$28|zQ~y}4@D z8l8enr1|@bcx$k1;D(E`9p< z>C&Rfclq}0tS=k8bcFm^6h6@IYNp|MVR?G0yUJH_ve1$GTa3qErEk^g_C zgym_;yVt*dAD5KozBfPl$bYvPGxhE3w*29hofG`BO8?+lS&NymR>rd>*&ijoUD5J* z;XI2uwl*R*Hg8;y{Xcskq`V~M(UV;@B`M9T{932}<+f^7-F5csyh)QT#d&eH&;C6# zOnmxlM{YH~b05WAJXkdpPJ~B$Ccmw4JLf9WH`!$Wl5Jt-&BtY`uT)v-U+Qq2F=x(= z{6{GlKYF}-Aw192J2!dps}C0fOQ*IqCe}y=Y|q=jw}oZ#qD2y>TURY#ZotTBt(@!; zrlE6!Q|iT(1Iu{WD-D^eKcBt*`r2ggxaiqT{nx+9pUUL(`#d?gQ-1&Z?R97QczJnv zCC>&j^etcWCeP{ENr~qlQ?7si_9`OUdiSoVU%$GJpUm91Dah#t%QUL#JZhcyie`?IRX&Ufs`oT1UqvXF8|wHntFH$(d5}@^bR=QW6of4QveE+~&zNs*6dzTD8Qg z=cJwcm!+@wNk{(GzBcV|^VJJ?U)n4%Q@O+9&8;_YLXZ!idi8GUpqqa>X6T+iJbQ6d z6HA(RPQUo;-7}rKXNX7KKc_bR_Q40|+xz>cr9Bg>UVJ@s&gsLpOi%ybNt^cDx|*x1 z?PH~-@RyQBIy*883oris>EL{3tC^lv?Lya78wZ<-Es+lj_ePm6S#sy^8{XZ&-@0tH z-`pxtt=m0ocBrrK`~82E&!pY{)7yRa{`v0dbTHg8D;;;_Y+Tw2m+N&Yb)5<>RakKgDkB7HwPV z{h@I3-3l+3YnK)*+cv4;^3nT&w_d($F|-Yel+3=Q(WIDJy-Z@_noy9NZLOK(P&NDUcY?n1rF^)e!b;GPzDVA|LKWbFk zgsQoZ9FC4$=l}lgVx-tyzO3gf=r*37)T z%i2TI%fDYT^>(??rgmzH`OM3yV$!J?|%s?(H+y4uN3^XcI(Sx zOV9STpZWTxrFk&V6rHQ6DZOF;r%%^587=%|<}yKi!KYY-$p3ypKj*4wsZO)CcW!RT zxG$bK->~zx{Kr#ul2*;Vi?ycO9eZ>tWX@z`_9N{PE2rCV-hTP=<>Z?cY{zZ|@s>0R@1c06#Uafpkw@zI^VHcV8!uh;G$6p^_0_i26@72l?8sib?(yyDAKAPYk1k!h z<(oU}gb(^zSt6GAkDfhyl!vE|X=3-+z<>Y&8$Xfx+fKWm`1b7H$7k!#&0ol-!t}Y- zca}?B+@X&$vV2;Vp9_9I`pdcb`mPNh(h?bW-J3MqqRhbf^O~(+t=ld;vocFYI{Y_d z$H7{5YaM)qUo z{|6TO9(i}RmgP-z^Iyiu)hlEkK0a?L$kBPivD%VxVR4agK5J6xF?)lY8E=BlT-jnj z(Qe}=p`Q<)dF+<<3dqp%zf@QCuO@VYY0{qikKY#Ntrh)tnBDXGZw8q+3s?R9A(&*g zujx+A_je3GPM`KjN_t$%U-onHii5SW3hapiFZbHNJFQgm`^T#KpO3D|C)OL-aGmy^ z785-A>h^Nues%BHTmI@Wo7{yd{nvDK6BFl0J$Pz+uRvfIqi396_>!fDs;V-#s z@9)?-_l0eYL(@LTx+A~Wsc4+YFBY{@K7Pzq>e7!FqJJVQ4rw?!FFtqRL8o7EY;^Uu zPyY|!o6g|0v+jSkzV0Gl>Es=%k!ftkY!h{-C`B(_5;?O+@+?nscbK=9;!2f^Y1)xq z-@Kf-r|P(R1y0j(U3lbwW%`7#Uib61|Nd>h-TLv}bD!sYp7XrsoaOmXLP};wR$N%a z`Ahw2z=!CgKYuQ?Tl?j^*H=l|I*#M~md`ZvOKxaJv+mPlsO{`ZyDl1;{X3?h+&@p} z;r@cKlKh$<>c2~0y?W_;T-a7UI_FdsUsmD&I`1g0sY=uT{@Z$dS#Oi2i>BPil?T{* zFS^98U%7dnMO{?v#!{1tJnxxq?h!X1AJ=#MzoXQ9=8+xA2~&0&iuFy)Ra`WRB4MFB4Dq`ZcoeS^K&9^{c+*2`8(L-Ado+=XahVxc~nu$?Zm* zJIs5IKdm%3&ksxEei#1#i`}*RX+euhW?eq+Z@JHZUHtb8%JnPH^m+@;U%vUAsn~ka z+Mh-hQ{MlA^$b7EN?m`OZdJRp_fUD!?Y}|X+gIJn(%zeJG%Da? z@IjT|pJF%vIs7?p&yB+7^qbSW3bk|7?Sg_uGb%E(E+QRDQ!X#5)A(JQ99jMGU11!t=2HG3m=A72UAzeU~*8 znC--du?Yog_do)bENO%YpHDgkM^QESHEmYdK2-zU*CnbLhI*) zF82wd#u*VhFE1@UD)p{O__#I$i--UJlIQ2nu{*k^^UD-`kH3{s__yO^+nd|d+Jcw8 z;aCw~QT$1zpqz90RAsM8DJu^M&w4NQ{sZHTFH3)wGpE)RtO(lvZPj)2ypRREtgKmQ zPv7ynMYHK0i^=ixpDwq=9&hBWk&^R`U8}xw`?o!+KW|K4lx=xxZFbGN{FgRc3|9KC z{(J0Q`q}(ju~tdK{IZ{R?SJ^yWy)J(UxOs3AcTWCSv6oCj#}`kzV8$L4 zVfwmN-L;ze!?yMHX(5eEjPF})xwf^vA!+Bic|{K;F7$?fX3A@AlC#;Ny)o?i#qTp- z+Wo!KW&Y&vPr*=Lla($e^&XX{SL^g2I>de;D_o4FcGl~OKbL;?774hy=dp)?_Qc}z zy5${$;@s7`dsUZjzUccbGIPQNCM9Rn^Yt~tljJl$e>-(~lkEDt-`|&?QM|`r)KGm@ ztsv&m_o;K)ZGpPq;ma$Hk{u~xs8?(P|rE6A2<(gxu-!}g}EpXtLw}*~}+T+JR?AB~s9qbnL z>0e~`Bb`OHH%srgevT6S#Asqv_0;r4-wUbuo~~6DpF3rjt#FnyuVi}=cl_eV?ApxV zQ#9We%(pHMh%7rKZpgUZ=}ySLYi>u+&$Ygo+;(L*Pks5q)QkYWjJ{7>T(+P4=6~yu z_4)|$;Emt!^8K*TvRwQ)Ihp(OXIGW?!tdl_`!7W+)JaX-Q<8bi?8q_e@=1-KERJX- zEx-9;j%Q2j+ohGVF$z5qI}HvO>@|%1m3F$-}hkwshQleDl1*;x|gGMWt&B zw_R8)E8=x}&ePY67WLSf{xUI*{dhL!!@crXeX=#1(|l|Dm-x>u-?4AQro`vMZ+<=K z=(yb3*&X_5zl>mEy3YJV&Fpix7e?1y>J&B-UMBKP=xQiSrdp|+vI+G;#(WMhV7Ovpe<$P~{#CQHSkE07Smp;DJX=CvqUu$oj!jeamTK`L> zOqjN?c17s%EeaW>uDOY2v4I;lJevHfec`W=+4>uej%(Yd+g2^HTBmVQ?WwQm%AHf< z9M$S0im%^2e)0DOzvvT@*H-7cT>7}?z=zV;KhNDQn8*14kE)jCPFwv7{tsWm*IqI; z|8DoOP0TP6E(Bv)?0b{>h^C8^?d4E>zQ+CZS?B7bGbL1IdA=* zos((nT+Ygf-1j+*GmO0E=GV<+%i8omZtAMn(~_54J-G30O;dO1WapnDEaGQsB5&SU zQJk_@si5il+)Ioc6(8Tksm`9fbp0kPN#5$7vuA`NP2<@4?nFNPlXmx{S7*)Su=BBh zx?Sf@d2Z|bf7N`c($8m^7oTt0lxw$HQDV}(&>tL!Butz=5^{cin%N)c)4TD&l;vCW zxGGCOJlp0wTl|+!&FV_A+xPnBYMPaHmWS;+{L6a69{Z5Fv-TPIb5=V=>^%GWPrT?8 zHj7B(+ct|gt7@s~Ypn2#`1xzwB<-v{r%kS{3Dml;%lnJdmsRb1%Y~PpltPmGirk(Q z`tJVpDSOWi!(`>khbPOoU(U!bah~248fPhFVV>TJEBf*j$#s8*X$_ic|Y&o9@DpSyH1=hQD2<8`S~ob+->~K zeJ%@*&gPsPbmYA6=Vr@{ta9JmH$p{s^!rc!YI63c!95}G4u7V*TouBmTW?>V`(wlJ zkg`?RgZ6(Yy>+WaZ1vNMh2GlcYp>ifNIbtXsy#VSN$T>qcc%9@n^*Yl47?>J^l~x# z{iD;E4orT&aIWvy&cshy{*1wf(c*3~*QB>KPswXc(9^9B? zbyR;7S4-a4rG}oKvtPw?te$&GQ^59ptZk%=p>LqmqqEHl<%!#awcjW;AKEiJo#BCy z;7*=BkM8a^-kUSkDOKC#ZG&aC*HpXO?|zPrzqOXhs9iYZS)p3^Oj-YZsp0D{F@Ex< zc6E#HzK;tH+9cWV&e`F_@^scU*OoQvZT$UgoA>M)^SksSqjtQK^WFI}y@cICEki77 zWo>QW`-|Ef@`=|UKR=)Cx?F$Sq*d&Eo6d*{Z1VU&mHo|Kx0C)eq0h7j4hL8Z@F;mlvs7h57M6SHcz_pVuBNllqe1@0fn%BNiE>8&>>kd^aK^y|0{{eBR2+ z#@^zE#_z0Kot#hXYOTytHk#zjUJ!LBYTlB&^QOzjgxHxr)OhtOIYf(pRkwxpbiX+b ztg|-M^ln?w9qf3}^`>d|t8Fv9&rbd+vM8d$L-G2F>kbc?Cw(~gcJ-f?GJl_L=gm?S z*PZq2=hSk}4wcK+bKkXPo_zRL`(4WNBIR?(j~-PI46XheDz3d#S=d zs%fYH2Ca`YJy5}6&^Wb#BiQHe28)Wd`;Wt8SuD>>34Nsw>`Cr^IZ7XNHs~_3A;A`bb9B^{MNLzH+9-E zq0sGnw}jbuUT@dk`(vHu`~W9i_EYxzvj6UT6Vf%cvF(@GX?FRZ{<}~1*A*Sqy1d9V zE3wPWtSo2SR=$^OsNjr-izhJrhzkW3pHF634D3SQDn9L()ca@_w{z_ zJj!aC6A^c7b^7@}*IWUO`QP8}*2`U{xoTf%{h3J>fj7*&4;TK^Mg*Z#;ZSNuy3X>(T{W^Eh zJy$Mp*}?X`b8XYLtZtuozf|t?wJ=5_{p+WHooy?N`R}Eyo~QrfvFy?x7w6T?Wb$9O zY*!AKO_9ozA8sdNQucp~RPcY3v6`Wc&1F*J^BSdZu}5^mYLc$LoV3)vzU-Px)?C+1 z?B~yLE#`Q1sP!MWp=Roj9{|i^*@X)o;Td#`EbPOU#%${mdJ&6r}+5b4QP`{5V?qR3NR9q3)H< z!mB6Dr|Zc^RW}>0UtcZSb0F6JrhRb-qY~@AU+0z?Pd&ismFRzW*0YpcQN7o%`KyF;eb2ew&sOFhkN09-vn~B(tWJm4 zK9MVz{*_I8zRdioUwq%yJwH{RUY@l*x%9r{hy|n5-cYWo>&A}6!zGh`<8jH#1voJcF{kv?nEqv|Nm@=Kj zk54Y`&iuJyL)hl8ujQ{ye|93473Sg}D_=iYsL%`>|*^c8;_&YCwb zA%AjkbcOMb(?<@T%y@NW@9*Vxtb%Xe=3Lhau)e$bYnaHL-`|dv&%AbY-SxM*HVbdv z-DTSBVR!Axg{@zkCRRLk{oBJ^eknG-@xqmT3v zT1)w>Pi51aXBEsAYDvBts~_hnz3Xo0hr_F9=*mC3SHCAJM#AA-;nfQrMm`qy`>uv| zo9Y&~ec0vhx~!&VE#r}Iw{Dqx<-{>I^0W5yGx(hTcs1kGDds*ehaF#w-mh6(ICWNA zo01cgRni(S*+qTnA%3S>1#GG+YG&T)iWCyxs^}7|{o`(HB$t12v9(>jj?8@RZ%w=h zf}(yMePUBAyYaZ89n{L#)^hDB`d0(e7)JFJ)PZoWeXuhoF%FDCUe+JF- zEBbz6p854DGoMVe?JNJkn=PuA*HxKu%W1amKhv&>_n%UkYjnn3%09DNpyXrTo{!<2 zSK41CEG=u-Ykhfn`|h$^{agFj%(W`a4^2LH^K|?CS=HHxYS&+E`uY6zFXMcn?@!Wy z|BRk<=-2xd+LNYEw-*rDko@oXsmQQ4PkH;buN#H(fVVYdfj zmKJul3-Zsbi<)bG{?RwHgQ**&P4k`aF-?CNSL2!T)NlQ(j*e*`3jSvb?|mQY>bmCn z+*?cQ{dzlYaO}Au^33%{*Om_#E*vtNF1>xP%l9{yQ)_RWd+@R9^vQ*dMx{?`M4Qhp z{a{pmW8cgVvtE5*U!FA~Z*J4)XTE1=)y~Xc*VFY^y!v`~`xW)>6Q@5{rJP#S-4qxp zaDzi9^s4B;TmQB-l;p<-?@l=IN;9~u=I^al_P1s1;yZO?r(ddwF_>Aj|D4sFtmIx zYkat+f9uE3DJRaTh<7r4RsH8WeOZ<41JT!aR$E>BusU7NZkvVM)wh4O1Fv+}iuKnP zAH8y+E;W_?+uPSSw&(l1v%6ie)lB`o#MA5aR)bC_mD2}8XURTwEq`X^RdJTbIOf^w z*%xNWl{`E#ufPA+?Dj2OZsLo+zEd^ZL`mTS2uQi4WC!{QE_ zs{Y+FoY=eE^kI8T*cO$24f1P+8sBo1Uzjqn=Us*P|6QwIJznc`{E+&ixpUjEuf2Uc zVA~rX$0>VaEFSuG{?larv$pontmWzIxeN9d>~%XcS4nop|7*ABMsCYKWBhl5-``o6 zizNG4xwdTDlbx|;cZbUX$8AsA!@g-+dZpg}?c;fJvG_f?xpVKa{r|Gi>-L#7+xG4? zarihVFQQ~iSBHmqL6z*ZT{my$vfta!5s)U}JR^0-uU21C|JnMle<_^b`r)U=1)c|8 zwU0AZpJ(?>`*qCH$u9Q&JhrV{S{m!Wzh}R7BVg^?_}^VsIiA1wOkANYxM2H{{Y>+x zMZ62uwKUf3(;43|!W*pgG<-8?b;8$a;v1I)V$JmX+l3%Czzj)Eg zef(Uk#k2_%6n5#i|F{tzVxbzDuzd2x9fgmVERj<@`~1wzb&G;tO{tPF*;#t=2fO3i zEJ?=K$1>_>nI2xeHR$@qGj9T~+Rne49e3mMxzDSa&;M@pHMLEy&pcUp!>;q`>D4{H zt6g{&OZi__QB$#5leks>@;{S_{x2Tfo>ubgsIlfEIsSV!Z~rVhcRXDEZmLkAdXw*~ z8i`Z4o~N`r`2-jJc_4LSzL>ap`OiP0sq|d82n#tzd9u=9*V2bKEpJ zIKoc#bjQetv}83{wOw{WAQ(G{>>gktwS?Ans2V>Y`Q)t`t|+2yQe-~ zyVowMG%%`7=uh|cldO@ftO}EM3CPWxb0JCi#Wwcs6Wvbl+UIO~%c*o`%Mn5CbkREh z_pe@C$K5~KJE6z;?w-ocjgFVSx8AY16eO_lj-9FGja6+$E3;m1xbCjc9ee-M&5Q5e zysy_^n%wN-5V0aEvGC*M<84R#dAYl~#TCM;p6^?oX3|<+S$XuhaVWEJcXZS?CW*`6 zABSgJ|J@K8_h8b5%rCvkM&9!4t{xOKj$d`m-cBkYL&dM<^UL%N(%aeEp3GmBS>b!4 z?r+_{Ej#6AUc1)vqc@}^;N|1vm7#Ov3ucQibE(L^_2tU@BbT$MFulF~HuAY^Y-s6q zud8(uyKgv)el%VD+Pk>&md&%<>HKS@^kQ~=xLRPkvY|xtlV@X7*M{xqkG|3QeEsa( z^)Iejiv)=$Nl3gZJUL@SOz+yK*JgW{bHATbUG{(9g7cTt&x_5Nnd|QtH(^dqk?Av! zMLK`p?p%7d*ix(}r?dm$Ku72@z-4#qA&^liejDQ8`#OkcKZ zLG|p@2dhJipNY(xwMaS7#!!;m>Ei;0*`e&L>3jAH?Yz}(IFbF?)Cmmt&5QT{x>K_E zky0?vE)TibEde(l_Dm12%6XIe;4hPZ>g7M{tADE8|NLAgqK~ULVtMC8-50-Zy;@Pf z>(a%AykDjt$^I5@wr_Xaw)9g~=?@>9&$BYSex<51Kuj*if#VwYE_N0%cS$E>xm6#2 zY;cKD3k)k;zG8)ChZoN+7rKzMeCC~>LZ5Wc%`&=l$-AcX)-JUR-=izuy*sp%Rcb}XwN;!hYFpmh zm|t^w;_R4^ps*#OB|OM}!=5WE6|dd-aQWmc3*+U7T!VY;Y@;iqJv&m0?9Q!@I;IrM zSL;*b^SJl!V}mO~GwK@}8qXhJcDZEg%DW?D@DAjAF_3??(BTCR=8ls zgzC@>(-vLjcb={jX;ivy$<=RfU-fP|x0~_wbI+M?C-3xkiQQWj8gccj!riM!Rj=N^ zZ?Ck7EhZ!=WX{Tc8EsELr&t@!#jGbi3D_zv*j2u{A+(kwy3_aP_D#+4ak*I&PW;X4)VGq5-5D<|wlGT=nFNn`CPBazT zVf1O&u3g8?U+EfNx*!l5;?vi&=IlpN(`g(hRL{*dPWSrt?ayUxhWN%y&n8~HxN=>* zsQ>MmaW|(vu6=yW>*#~a`}SE_*(M)<9lEbf>9^Hv=UoC#?0cV|-1AFguHRSdEX4yH z^G$R=howCW+WVNTt*y?{v2=Z0ZN<5|hoZ96B%UfLTwGjSJT=kr|3yuN{9;3I$xfd=dw15=Rj$Trsd1W`H#0IbR|-8+HZH!X zbaI>fd;QX|3Xav;8FzM<_n%D3`pvP{c9YZD^Do^#JwJLbb;e;QZLu@6wwfnjeZuZ2 zF@N@Lv6VYGx=vWuFY>#yd-1P@9o=vKWWGCj($6I+HMWqa(cwWjdvEXbg6bMS@fi^c zv!dJLLf)TP^h2%x!KDpsQ*XL1RnOk{qwDd!`@JT!SN0u#$R}&{8N`SP|aoTaJS_R~Jx$QSx>H@jx<5rc=5 zD=&VN2vq0o-OIrFC3L@?rsm1Y+k0-FIpg@VxY7$Q^N8pe}+Apv*o#7 zRr}BR&!1g$F#huD+Z)N-gmt&o?`J z{ycxHlc$$wue9~G3nw(TPnuh&r^CblYKMAY$nOJEH%?F2FHgPG(Um86yX;?3U(0jJ z`TcBeZZp^4-(UTGo#w~O%l!?-BzadB=U; zEIH=pixJaIygfX2F4HD@*KDr)sw^2Quu)N*^YZc z{XQy-dTV>?k9LXv?wey%X>`2m{=_FKM<0~dC@>^!4vn=Iv2yOeFX|TDzxf=uM2N-R zgKH}sYPMD6Ts)W=D7^33`+J*%<12G69*KHZr=6YsS7FPPEnl9l4!5`4owaxQ9>a>n z9TyHw_0UYcuKdmWkLoLXuH*SrLO2Uo@7OB;r8ML4ec=_K7cR`=OK#Y?dxiX==zq`N zM!zpBIlhupX_h#*o~yg|sWm#5H#QnqOSx&T%Q`(ta81~qSXK&3dk@#zJ&tmc`FOB3LT+n2V z%bM$S=gph^-F8pClh}$i8&|&ExL`pm6H{Sc?7HVieB?q+yC%o4nKNhVTwbY?w`-3b zdzE!TJv%#F^?B5NYc*5LFE=*sJi#Ejwxft&U6D0{uphm%fc* zb;`C%-M}org!|A`KJt%eG`{4EnGfx=FKggkMHbxIahS1 zoC71joYfY^s>gY|{@k0LtIPUpfwa6$#fKSB)GmDH|B!##zDV`9i9z#+vgbR*zr9!> z+9%&3x~kVYCHlUtYDA=_KyhEsY!l`e9{(n*bAEq!u6RvsTem>;Ht&M1g>^4YXSZ@~ zOK)mE8yhoa`?~#8lVoT7f6={AXK`L#;e)b&JrO(H|E#?hSyh z`S$yon|)<&J%<*Htcc`Xtsb#oA@-AVOI%ECxT}fUuRNbu?zfM9GO4>5s%w2gO*XlV z`Tnn?d!O|m6_fOnU$}kV_Nn`-TIZW&PP(_*Q~l4M;?yI?b9sDtKFw#=;PBs@k|6m# z=Upeut|K?A)6~KzcU4{y5)w9_F^g+$K^Eh#B8Mt1e*afC=be=QeQ5sv{`JR?Kc75# z5hC&O&7GfL|IBjeJk4fflm2dB%!VCDtFNz%t$ZfvaQpl`TkGQi9qq>tT>N%{=fR8C z{;w@+civCB@znClL%EmdPcAsHTe3Sq$=m7tIlEaJUn<)^+&X==&Fa^(bJdT!Oz(WN zGQFUD-Fx8*b%)pHr6qHAribzKYp=+BImJ@rfk2RWmE5lkTdVv9GIlF#rw2RVn{E_m z9s9G?+V1nqa}jN=&o_0p`Hd*EJ_I0<6C$44xxuX8s z|G(|_f3N-DP*B1B%s>90@uOe%BFo~}i#H}d~yZM){{|35gWIrMD)r(T`+ zE$zeR{>``2eg1ylrCH5W5f-*)W6OV4y#=eE3jMmydN<&VOyViyRcD=ld|{f;I(4bk z%BP3qz5Z_Z5MKS|?7R7=gVI^5PyR@$=xnce*7@kddMCAanU*ppzKQMUA6=XDMzWN@ zaP^XXF&7_2A2=0|9j74fTo>)aYgcf>=3CU$S0{IGUq5fH;I;?rnUy3@MJ|$koOh?M zN$cxbJBzp4Q71jr>GgsERbk+iDgXRB(qXwnP}&cro#~n#O}5_o1gen zKf$BCV2jGdeg7k8=B@i!vPk)d;KWHynUgbA*!o#~^pf(ts~2LubwZPe}acw-m#uvK&O4%TLS z2?M`SN9&0i)53IIXV~1j=E%8=Ge+fG%$vHHE-$6#Xn{+gRHWb8Zn)QV!|26rPnNzN z5BK_Ra1rTr)6i_bb>Y|Dl=NnG!v|U%nXH*hHu021x<;}EJQC49tmG6rIni*3{avR? z4-44;UMx=bzi2YYw)vbJlix}UwaK^p?%X;!PS$wdsDA16ykm^0x6tzKK)>nr6_|oJfNjC%|%6No| zE3#~-s@^bcnAddbTaY^Q-_&o5c{0CTSTZH`&5D>nK3%O4`@n^6nyVLPA9@~RvAzu9-+p)b%rY}Gi#Fve)>Ws(mQI|pVCoW! z@(B&g9DG?`-?p+4l}KP$U4G@cqEe^N!ih_AJSMzy;xFuL-zoX((}TwRa_M4!o?`2p zeQrO>-fI=G+zftqmRV|}{PsEL&KoZBn7V&+>4Q)AJJ;RbVf65?zq1&(|5D*Kj?98D zTqbpCw7M<0CFr?9HDsF5WY;AZmad%^v1!VbREz0TKk}T|#=CFoxh1Cp90Ylc`W$}! zbDyEZw!!kuLb(SY3}Rw`&r!3wRQ1(q`)r$uEIq=49LEIHP9C@!b?`)qTl|s$87HR( zzwHy)PINdl{a|Vh%F#*mVPlM7%vdhUB9e75vBHXZ%2~rhWj>R5&xvg*&G!`J3M-K4 z<1*lNaPpsdVV>-rvsSaOthYgd3K&zO(s~8|%YV zB)*&QOw#J{V_UA_BXMQ((w(yBze&$2uzb2oeWJ^PqAx5G=^XMLB^+59+7AwNXhbhu zaA@aM`5VU-R_$rFlKR4u@^0s`ebY1YJ9p_!>Xkbn;}Ia@9l*oPq-k+x-|q>`Z9aUC z5$4wlPVg!v-S}^5GxzAC+XZW~zt^g0?diWU;Y3~~qwSU#Q?0{|npa!T;bEJ_vyP|g z%`yLndvELf^|`nEFiW6}pCh05ffI{1q?oYzA9_$wVbj&(ayt2?qLRt<%u~(DnHLI`zI1uCeHLaZ2862 z$Lue0RH#Hw)A4qg;GrVoIIZL8DWL)tmWduJrzfWxW?X5girCN=d?{XsXT}kGCB8K} zLcUXu3l&&wk%@E^TijBN)blM9!A()WDq-u2f# z#a-oOVnGHIqoTXYTCxIs^7g<N_x;JuqLtE6czZ^!S#3Be~ma#rrY%I&TkaZ&P4!(VG9jlOEGrS%I% zjJVTRay306{y&$5H@ngZ}Z9G=p|8zf_ z8*m=*{ZJO)y3Tl?Y(eoc=J#*=0u!5ONcb-KvDRT`zAE1tPW}fi9_-87#7}h=MD-ba zFdp8R5VFGT@amxZJ)Ih&a}F_VJ(yr2<)mIbN#*`elRf!id{uF?CPy@8U70=i@sr=} zs_ilnk|I?TvahW^JmFWJ_Tu`u74Gf3o1X=0d_19eyz&l~cip08cC z?u60**R%Rv4~1?xF@NRHzgvqkdZjI&e{_~Q{_5fm!I%HzFYLIeCG+}wfCWo{#S#1E z1-5A$)R!A`SzBxh|Lq)gvaqh&r1*%@F4N$ehK&*5@>jj;k1)F-;MDN-x}9I5)+6UR zZ#2(|9Y1i>LH22VU+urPI`e)N>8W;ixn;guth@W}b3@kuep${hix;xEyt@|VI>Ru1 z$1?ZMk7XiS6FCoG>~QFhDC3d(A#auGBi^GOf!f?kIy07iU1Cme%P93mdfyW_djElX$V(Tju50 zzQf=9wJol9h_J<^8n>p|8L+)j{%&XVUTphD(UsHt=Pg__Z}z^c(z}jKoN2PA-}}D% zuQ?wBl$MLGkoi}|^_)xK-r;qM;q(4hhDt{;=Y1|{yV$m-&t$tvUgF}dlbUNCL<&3( zUjIJR^GQM4B!eFJQ!>2=!vZ8OY!?x&R?PTOP-5WkapJ0kR^XA+ELF=>wmOz)9Evst z6dYANF6;8FY{5UiPwUGMwX;o|c=@tDi%x*pZuW3Doki^7RYLdn3-5D~w7ZdT@1OXN z2b(OT7#e;_9{=WjsBQcE`r|_F^Gr_)t}`-9`(x)}e&w=qp^ZxOVdbaxj5B3qf40q7 zQ`d1)@@zs;u6cRVaf5;%yn#nltIq2;yX|?w5MVhiT;|s_mI((^fBICv%O5?XdDGI#sRpHgcwSa&&TrOT@o#|>(+nW~m+<#*D_p!O({9m?@w@*~(`Xlhd=`&}Q@ik@9 zkJisv+dFP6%&V*J_$z+7M&>6EyUYdGyc35!dkU^`F$R^iDW`M&zR#+^pGiu^@xo{S zrJoe8)d$8jI60g&JyNf*)6A;7>k!|D6%%~w{hO^m*<6!1S}|pxAFLMGXE{)*>Ytx-SwqH@rTZ6R}%KR;Ldc)<1npV>LV zDQp{BSbLN=s)wezD>MB_VKnA3ROY>$dT`hD4TV~ax|(n0!rKZ{_=TVUDaa@iYjZ5Q zQPO7G+sLZ0a#(w&ldg~RxV>frW-JkFH=VQ|D-9F_LUt6r6rZ}G=Dwfyl*kp$H zch4|+OntH=QAOrp*W=7h&fmYc%K6m9Q!fh}>Q3)etvBCTu^{+L@z>)ri{DlKxn%GmdTP6~HB&Ro zqy2evUhe!kTUF(PB#+SLX@1RRxe_wb6J;V)q$Vfl|MHPs_(gWJ)YX!Xh1!gfhZ9fz zJ?Uw%g1KpZd>(TkSF`$th3qeuEJ}L+sqNu&XC7A$S+x}b63n;H`FK(_9dU$6`MY+)&;kmstgr4`^ zo)|IVKJ(ier>3+EMNA*_=C+E>zsY#Dv2lgCg~b}X;B0o4wfmPowsif!K=|r(trZp* z4-{@bX6SQ}Y~2_1 zSY=K9)m!X-HyHN)yPaWTaldnl>$mge-+0^Vwlm(EXzuXS@HhX$!1qBrCZ2j>_}?~q z)t}?G#eARtb9Rgc&-ie8 zZDj3+)$>z!9T#|cprv`*%ga|T8B9)OIU_15E!Ek2OzNYGPr zxu)#H*WZWlYB1?%eBkBU)1k6w?$iBy0t9YO?tORk?m@+i>)Y?%yZXwOb>hpCjQNq0 z4JIy1%|}xBb}U$Qre(>3Pr2fS3-YoTetoOL#M9ZdkU`|20Eg?8IZ8~YPxgM9<+(>$ z+-Toh_dDsQzs;L_c46)9-|r@#J$>`TwtCqezwdvuIe3#{`sTg4-zCrKZFlJ2Sv^bp zbb&UHU!i2vj(0a-N^3c{e!qXu;lKUA#+DoJ|MGXl|NY0lMCQe-=6nAe4*aS7e|Y_m zKb8NPj~{N!@%ldRa(&$Y56{2y+yDN`Z~KIO|AvR@d-xue*Ze(v{%LpcBZhNr3y#`e zX`S_Q_mZpDwM7}bR$DAq|Nm#UTF%=KK^9^kbUxaypZP+wQY63ZhqSg?m$>y8?_(wL z?-$;gYqe4Kl`a2aK1StV?9u|V@6LJG#$P|c>(pMS*vvN9>*&LmJTc$@#LiLWkhR>G z>A$z`&}xYdn-1^qV$^C2?qg*PIm&cIaNAwI?Ek9@LcuTb{VJO|QP|u-@QOC3= zv$a{Ekx@tSdzzGh=&JZz9(~#&67IY^uIzd|d0x01gA0oco z@}R3}^;g?R3nwuwVko(HXZ2i}Z8|%i@0Ole&0xByGXMDt#cOB({QnfxQFoV7t95() z{2!XTSM$&An*4fp*K59Sb-&z}bljV+E^wiOX_~`?$?6L|idc-KT52RJl{mXq9$a9t znIf0y*x;Ye^E;~Zzsh|s2@^(7hZCojpLnRK$hA&Zeej_uBC=A4%jI1J>kh7y2gSO+ zTijmzHGR+jw$-*?$&M`R6kBhtHM~26zU)PpdR4>}*rXbnYT|B~*Cjl1;kvSVW#1gx zZA)?rFIWfc`01t5c;z=oiu80x&b{w?66J;F6xK@I<~sGcAgt~CO2*CUQ1=OIW`}(EE3Z-SSaO~zh~oNAtaIsX_0(nH@4x_f5r1JGwN!h@SlJ>n!WT zs@eX=`RQ)81$>Sym#5GFcRAv}o~$iPu(`w*S3h(O!c~yRZN7NcrD? zYsbW+mMs_RHg*1Pdue}q9iwfq!~c!h^>1#y&$zDeo$u4O&RW^s?^s=@%=;KFA$`0h z^4l}t>bp5c9Xnp;WOPUdWxJ+o%)dNWR%&To@n)wxJs0L1?zB%X`oHr0f{*rF_H5w| z{I`7C$M28pFHEplbpD6@B=#AqCa=!_xUc{7#Nw2TTq!0@?Z+nzxTtV-haWhtG@)XX z%%mPQrGo!ufB)6|yLo=Wzw@=)AN_Tck9@4R{Mq4dr8O75`=r1)RI zdeP*`L&?ode{#($b$;~Smw&}pr}pT2M)s!?$NzIZcfUA)Sb2v-c<|X94?}7VQctgW zbk6#hf$wkT+eb>zn7j3tcI6uS&JH*GykOm> z_2W-dH8nML|9N+6dZnu0-ja5^)OI?$Z5%9JT0qBFHLm&!zSJT#rJwY2)% z#nkSeb6r0D{iR2*-QK?b(j_M@zsVdcYQN`6o%fDrjgP;7t?l{a3YD{y9etTgj#Px7 z*W|8ycujQAE1jSZ3JX51*>XktWwlHFov>Z)cC+Wsn0PTXT0%5=;>Cbi-5>vNRG(h3 zYg<|D1crlmp+I+su!2KD`vZYH&DJdfcR-?5o4%Ll&5!Defxv!?ZGXpPgMIcs$GuigJpSXekUHTCJNs|ys?u3gK)QWF*yHgCK8D>=FE_xIQ5 z=j8nP%Kai-dajDs(KkME{TnY{ylk(yVfpgqN}rWB&7C(rTEGAL>E3S>@9*d5;oG)D zPHoH9pEqt^tgP?q?Om&}SWa1<#3BS}c|9^g#E?D?;+T)v#l9GhOzA`fhMa?Ko z+u4`cA-Pz{<38J2p@xkuDk*87EZ3N*t1gU;iu&}qe99`Z`D?c&-pW5U@rdz@?eApd zragPg8LU#rbn?_Gu3t+ca|0p+FTShdm{L(-J}pqyMvq;T_w4yf%ec6>!otEC0s#Wr z?(QBFniehEytR+Vl1sr;S6BBBV}6xt)}i@pw#3A&yFO(C+rj5Thm(|*QW`$~{`G6s z%ClFZ{pZh_^QL!+ufNZeY17@4{yg}+>y{*opN?D5${ZyIAr_w?O7(ga;Gj`x+Jg87{|)QBz5A-Ki?PnN6x-H`taeyXG@>o zzAY`sq^kL{%s#PU&YU}Ej<|T1mh$yW^PV`CHJiPlmxF`j&!0c}|L?5(?&kYi%-h@B z^}xFs?h~E`9(nTg<;@#0jUr7oy`7E^P9_CtcXvqq;`M4_igxVu;E>v}aqrw2Q@8Hg zVUZCiuD9*#pVZxpHcgr`rR2x_=mWPO*JWt1aCjVhF;959glElqPJwm)@}UNfD(->T zzcPd!JlE3L*x1vL4=fa{Qyk{5~2EW!h{`Y;j?E%N$`*CuzGBPe)j*d-D z%}<{`ojiHc5u*+4Yh3o{{ckd?uieEe_xo!d*QDRCcKnp!`KvAcuAXVq|I^3ZtA2jr zf2PxORpQWr16#^VIv%U>tv;?g-;DEmlH$`^)?Y^d@)cwx8Z4C~_sse_f5O45SG?2H zyzBq0(AV7Cs{FV3UTSs4i+0rv1N9U|lnj-rpCQsd}Cnxly zg_SYa#?*A%XVxdrt$)uu{Z?}OWAk@qN^)}Z?QQ2=t-5BT@#M)9-W>16j*h8|B^TG# z#lFf)xtL<{V2kwn<*It;%b#yrxzI00`|H=1h2N}BomsY!ODj12_TSIhZ~L`_b;KwC zY%<-PaDzqI_h-}JwT3H|PPgCDsrJS15Ui>@xdi=V!yONU1M#e9nDY3Yuq~>q0YTOfUD7E76 zi4&RM(%NH^@3mN6nEU3Ynwr|Syqqm9&GI%jA_or4__x&X@QQ^Ox9_;o*--HI_4Zh+ z$3^>&jl z_4Tz)x{xlkZ{eA&Wnwov{rY-+^=31zTX)mNvGU!!X`-|9ZPE?REN~_)B*EZGroNixO@kwE##L*c4`umr1nw;vq zR(mI;%-Xu@QrxO^ryu%{d{sq6*XHJ)ef&5k^>=IV$M^TQJ3A{a%=o*ZbIP`=+-eDy zbkCF9|JFOPghx+4EakCJ`KguHsTnixs!rg}|IYiVI&a3TP5-7i_;K|0+1+{fe$MR0 z3>z$r0z=RA-p%Xsiq4Q#WS_V}wBf|=>Z7x{*PhuCziQU3AKM<;H}a*W6@3!^X>4XP z<&)&K`Nx|TD=MzfkbA~eyl7>6&&I0Mj<)WNRj*H;ZJsEoHcv}icXH^bJ<>Yu7ygSg z_4w?Ybm(1O_6Y!khW`nmJu;WY@geK4C&)T+F>cTQmY5)JNUD=k6Ak zBP+wVZO-0x-`S#~Ewzp;p30cR?k}@vS7%h-^LevoFIF~}_c#60pQ#|J=oKP=dQE3< z+|_`<%*{b&M#hgjT8}*KIAR;|ZrL)utGP>dzvR0oC9&eqmz5u1or>)K#^3nHpiJlB z%I?>vYiw4QBtQQB`0I{x)+&?Qb;>G++}-CNPknVU@W{i5w+deUke@5@VNcA$)!BD{ zOxb(ScloJP43`R@9X}TzRUAyR4vk&zEo?!54j8R+d}W#r*MhI%r)s zZROFlXHzq;NwgY>KaObQzAk*DC$R4OBr3HcbZuod*yVxkXvj4^F~~@jgg({m+_2$TP4 zmG`-~e_OUJH*&RN{C=r@`)-83+?`^;Sa z@2y*mQMcw_HI+K4v1faZqeXnvo&U#<-DB33ZmHL_{P1{|T*ubSZa&9XTjVVH`gi8_ z3^V&JYjB+L$H@7_gIY+0l@33&L zN68oVe4Y(+@811Zrj?z|Y&7NMKHF`R-!~Q17WO%?d-U#oaU^l`HTFH{;@CI1)tZ^t z^X4c#OkVb(S7!A++at?D_H7ew`*kg~@#~)Hj2$*-rixDf(&K9p95_+k{+929lfSCA z7B0APc>fREYl{kQ2u|>stFzwL?7+c^KYw1X_xJnvs7_tsru>H=SHjo6Eh^u|6WFMC zcG;ob@3gtD8J|6M;AY8ZYlE4MjE66mS5*r~hP$Tj^Yt#Bb$Gw6;*0*oeYQary2i$b zF9r1#Hagpi`rdq++P!IB-0Z)bI209qEGpbgzbyaiSJkGqAYfuVi^u2kdFNMqpU&9V zTChJ?*e+#?k{Ks~u zOYe>vPO)r{n%aA~@AV&n>blNl4Ojl3o_^UR?8yF}E{*;D`O?-_HM^RN`ubQOvz>1E z78V}L%I@iv#=c7Qgs@!HUPk|m6U&ri53Y~568AU}aR1ir=E{m?CQA%Y?AUqz_<2jF zRf6}Y%9AJ0bWWUMAA0`vqd8GKc6?}hVrJsAe%~RTPASG0 ztwR5lfA`4ke_`y=`fqcR`NqvNC8xByCe=?U-L6>U))3eIIo7ORT)f}W_2&6MrJkOS z>#v9LB&zgR-?|(7vz5c-;InV0T%WGb+4lU2Y2gKjg?r>#TVLGSvrGMT-;z&1roWWj zBlehydH26{foad48UFZbb7%dAEwAkL;`VGWG5d!^vxjpWkU@w)7HB0$B$aZ zezWkefARiKNfw)xLGXe8fGhV{4s9~FI%KUFSeo&fZU3+8^J(r4ixzzDTQ(=kgtuW= zbnM>U(>+YKZ!6gDwjnY*u3SCg?#k(5J0#7`KS$mF-|)fK?BAc0zFQ3cyA`*$AMo5* zK0{wpV4-dH)c=!@T)b7)w!K?%&YH7%g^JzH5*4AM&210tIzE2B%l~X8r^LB)vFhhH z8=qC*x5v4VwN*rMQ6r;D`_+Z>LjOF!!_uKlqeLY=G!q+Zv$lmpq(0TkoW7h1~ z(cjN5pW^QGW#!6LPfuT4JENbM7P%X9r=R}o9O-@f&MKGK^q1fDIyV>R2Kdh|_Wpf! zDr>Uox{ZZr__a*#u%FMd)m?l0^0G&sr;S#>_%ZM7;m0nomYDGJa&mKDWvXx5p>yxm z)@j*-4-d><9{uc+c(sh2P0Ooi&-NaFz52|Vl}SfS)z(~XK3Tk9mM!RF_wDOD=gEm& z-SQ{#q+jv0EvLLh{FHrNT~5!tFln(epTL9)t>D?q?=3j*FCpQ-c5Ta>8n0QiW_d-l z?|AF&?R`Qh;>o#l&T`8I+jz~Y8xt}_c>^YN>g(yg_3e`kzy9?4^=)i(MeUd0K6Az) zNwHDvhJ1NS(%YX-*7^>vuAxEy&c$z6x|zveVae8JH!*VI{#uD=(`GHcId%KyS(cAq zK9b7H_{V!jM@OY|lJ^m&EnBwTpP1MKYLE-X9NFI=cN>BGK=Eq@t|QZ@>#)Qp<*b;^^JY-wqhrM zXRSOY5GoQ9a-i*#wV=a^$y{b8CN)1lv8FmYHo5+o_3_w;tpWCqf$5(Vm)7rIxKGZ{ z({VD?0^XR2bOhdA)X>n-*ViX`I;pJwd?lNu=U4(&a%)+V%=f!W8n|xgahnuZbuZj zK7IBLpS3?HFK^e*olA{gOkU9P`0-=wb>;I8?Up?ouz5-9v7?$VU!|$2{5f-;o%v>h zNl^()f{XNy5M5nu;mK=1e=hY7nXvxF7Ac>Iz|+2cKQFaJX*jxMW@a|b=RM{y^_XxS z@4eeQZ^^D(xw4UK7e@oz#jN7(+qZ5N6=r5XsjI_N`M!zk)RWI%6ExrORJ{N5_4T4X zyNXwyoEUICW8*cMi2(^IHGk&R9qI7w(pk9f+|jdd%eKXQ7WOD9*|K3nL416?hlj^j zM|Z2$sXoDz-5WlB_S6gT6y{w2EK1z%QBqRT%$PG@zD!-Z^va(1-sOl)l9tw}wqCuYB4;Zgi>@T-$U zS z1Xus~`me@1Z1ewjPdgH4H*wdls=z>oMT+y^&Pgedl$M?y+&ypp{Q0k+yuZJ5?OH3p zE$pw>cBNf%Qq6DF3!Xgru2^aRo@3h`(_LrIoGJY6RaREmwrwi{9xP~dd-m)V8=K+3 zraFIfrYDzDf+gqlg=7e3X5L!2F2|q2ankE0P7OVO65h?6U3~wC=$GXUA8jpmH*0Z7 zGl^{4v#;*i`}FGd_(E&YFWiDlQ3e{ZjbZTDz>wC&lm*4EZe=j-MHSCuTY zv{o_yo%}K-F)}iexA$1rKtv;*LzI<2{aI-(#*TZw-iDs+x$9p^G&zosk znOe4CyS%Kd==(!^9{R~#dHv~qN3X2BU+SBmpVONzp1nG?tt~C-&&Q7&?b+m~cl#A+ z{f(`-!=Sr<^#T6GymW()g?~&G6&2Udzi>LbU?Zo@mg>xxoD+s*dH5o5oxvA;kU%%_3?4KYz8;gwnA68da?OL~Y@7^UxUj2Rh_1!zZ zC$A42UmX?-weG!>OyDl+l@I7C@-{+*AllHCqmxXmE z?!P5^Av9vg?wi8jzI{t;)k}P89XaQg>Cx$5)^O{+*>Gu2c94H)6*SFo~fx%4GnE{4`F2CFyQNS zsC)SPGM~JWjH!kdcf6vTi)g2)SizlQK`2(y;sYue*2yK&6QVLwvT_ST$|bP{_{PJ zche77Y~0sg*kk)(<)Mh<-p?Yq3NHAb`2RMf^1t;A=5-c+?~Bz>AAi)eWk*xQ)Q-Rl z|Jz?n|NsB?|G#hh*Ztr4Z~vZu$4{O-c<9^yHUBqm{`>!R{r~(s|E_5D4o4wU*$l3Vq-1!Z$<-DvszfRBB{qX(=yYRIH{g5x7 zI!?A0J1;M|o~(RYDYWhP?jJ^#1<$rE_^Mdxbgi*BXHl8U!wVBvX!u2c%6_)|{M?@B zEgS1p(mG=dzg;T7uDh?@=2Tky)4iO@b?N8-g=7{jbnOvjKTIB<=1}@`U+&Vf zfF`k@@9Qr=U&L@l@Jqb=+CBlxEA`dQkLH%)AOJ6?v}aE+SG9_s$a6HW0lqXoLTk3&wgB+ z_3ikDFw^{{x5FwK&CXw%pyBKHpzf$^@crDd*x>(VM^oq61X^`;EPR}{>hSZrv!zjT z7p^iM@P6+<{k`?MzvtRBR@drR8;Zu4GCn`J^Oe=zE0xif`45uo)8*qA1kK8NP56AHY^>sW^>$` z_Og1`WqXALja^+le1pYrpzY6cuS zsv&gvs7Fj?oN~r$xjx?er6wjpf9yV{?ETxA8uQWeJ;NsVi5)zBJi?D+Qp@&TE8PET zqOyBnTm{IV! z_w6z%Erq{J%gpTF*Vrx2j|yZ=TDz|9^pCou92)0N+?M~pa(1HSOTRPg|6db#e)Ty% zb+)?O0%x@Oztw7i$V#fU;MwbE_&C$;HLRa|8x)fl>BEf63JY*=42+b zSkH+=FAp0y)vq(zdG7o6=ijZ5f8V`3^?2>xUf%~7+s_&td)BL9I7#ZjKi#ZWd(R;7mn^}L9L(o%tecu~X&G}aY!^Pcyace{zu(jVikDZ01r1pRL zf((oQW!{ymWLPEonWBFkHGa8FSiaB3;>8kSaYu`p9`i(n!|v#WJqPI8<%qtn+X?vPT8;Nq*>UO1{` z@xR@qbL*qas_!#>sy+rX)X!F_&on&l%pteLc)jHZ(G8+A`hS&wD2e$0#aD)twNZ)X z#S+2G_ewjytZ`i&ru27jMBNV2+t1b>Iq&JeYs#5y>0GP)+}u|@KObdAMoO+aKUf^>|sAk~V(3ih^Hl5$kaPmg^qfZf^Z^`pl6fgAnQnhz(c}(u!w{0q4_R2k# zVNv?>bjPNbZ!`C0uRSJW`SjC-CfCE zcj*<|38n^SNttgie_vc^+bZ?+M(@%rgNs6yUaA=eADcZg3qA%Zua{mE(OM*SW#eCK zzlb7{$mWt40Z}Cq2mC)<<=C=qa8oD?F)Azns#Dxfzq`L8bbp9>KE3*s=jydpA5t<`bUg77Iy#eYb}hS~R`3jq z6>if$Jib-?ktM^XG56hk+tSBkEARF??LT<;P<4;K+*1pqUFMT_2~L0X|7pOdJM|vk zx65Bodh_JnP4l=DCw6PPzn#n)m2lEZ(Zr>0!G#l*Z#o#fx8D>gSL1e%4%z>5s`{O# z*=ax1t@#3#l+)M6cRY5}Y0oeciDdY(vhbm6*FuX5ho8U8{z)A#$>%gOb)Dg{V(mMv zA8f`V%3rFVM@6^pS{cZkD7odg+Szc2sV7$C&)zlb^163{^A=To?J;hiul(3{(#91| zi>qP->EwC)eKS@HY(>y$N)9k$L{^DZ4-SG>)m{M7<=|7jdY%}k}@z15Om znTA~viCcN~p6;vLf;y%=$r~pG_OP*DGX7v7P(4qlCqvGeyqL^>}`>1+?n zIWh6cGSj5wiSy0ov@LnF|NCsVTIO^S!HWA6dnHqE>^t&E*`d~3Rwu#c?mzL&Ebo83 zlIHb$MCQK{`1sdj-+^BX=HG6rka)v4t+&UgQ;vC6^)_+&mRNq%uV>f0?r8RSyeqLF zpsVL1qp=u!e`9WjzTM*p@3~XG&oBCTaQmytslwBo1(PDRHhUQE-eXZIAs5EhB%+Wy zf8X~db7gsEZQQYaZFG#b)|Oj^CB5%Vb$@Mo^y|67p~PqY(;m2J2d13axZt2f#nueN zCucV9iCt5KmUSVp@67c-He-8tz$A3 zJT6t{*DnuTr=NUP&wJepzW75+CudLo`@!tWdf`*v;U3Y}F)z&7uJA8-A-t8bIxng? zA@7~nWFHpSNv6v}R*AW!1buE?aL?8>O2^_8|Gs0sdvcDh_)xV>TrJ^{;NxkWHcQx7 zEtsEh{LGA$4T}S^>Rznsc;W6K^iO-wg@1x^Ta6m|esFg!jGV@OY~h-^x%;0bW{Uim zbN_#L*^;aJfz6(>Y}Z3NR=&8I`tix)6O#7}kEP9Z;*m33e>F>!i@oZysM9N}G>N-g zRXe`Qt_$toF~c;kI`gpP?37LWCX1{M`@tibHjyQATF&d;H@?^jhb>&_o^>ta-3z&F zw|2LmJC2qfTXFH|Qop4RTiee`nwHMvnHks27x=1llg|Q=?OIoxeHIEFwlfIXUG1r7 z-JJYA?eaCjA{wh#n_j)LkDveh zqQ$dQG;4xFSQQeALF1ZN z5>gG1b8Nh9c<{Q;J%%$q!n#2#l(d5nwK>n%3AV|-duE}C@q~}DN*7tvYnA8j;Peu9 zbYVSEk~MiRv!n%QR>#r$s@c-t<@c^Q`}e~t8E;LqBPVCA3kYT07QZH`wl(tkqC>AP z`%Qno<%;T)4_lo=j#u^T`082I-nP{#*7>NpO#bRj_MXIjb$TDS@Vv+qN{QXI_x;{7 z;dMzWy-D>G4)5d&Yq-GVQuwx2E$y~eoH z%JTa+rO0K$`9521T3Dkumbh=5(0@#K*>8`QEfHn;;;MqCTGoW>DC;JR<`wHRf-12q z#Q&|0d3tHi(%@y`lV2U2d3%FU@`0Z9$BZwmetgmEkmfS>$W=RDd(Cy*p1I;ZlP+VzqCBp09n;ofttl!Vu@j_9eQ{dm5&WXo;ck3s*+<$vUGj;optD=3c_J6J6 zRK8o#dSUgcw~qg|@*G=WS;%p``T6{;-CL%-crN<{%h>SepE>6{m` z{Dl~USjC6mtIJ9!?{RwFTfVdL@pFb5DKjsfdh)aK*20JPnhpwtpZ<2*?v6aiVKIiX z6;tlH6tCmu*s$zm>Ip%X^3BEalLXdH4XXZ-5_nmB+N#Dh%_qLWmoNO$<=7&%xc9B^ ziB|LLy$cQ}{4x8MKG|E}t1)oqGeM5R#9g~@zi?p4@K#&C=T-4KStZh_nH4ApA$bgxMrYzVp#nSE{YgVXyysD*lkUeIV}34OLGr?`7b zFt<^ex^_petl9nwnUxv~3l{z`-BCDq+1~Rr{Xf#0ZQYXIQ*X$BIpHdj;XCQ9p@yQh%b{+yHf(zD^kKGz|HjQT&&u7_KKR#k zww2wjleHdRy(NzY%d>YlM*nhAK4TliWvAsUbbivsjlsu{)N(}qsy%S~{-q;-R{1Ag zlbWv>lk-AEQE|@KRpx=Aj=s*#u3rs3zb|!Q77LbF+haeGh6ne#AY@1b*RSuz%c^r-*vpK9nJYGE`kBt@A?Ec)HX7^%EB-`u{Y|aNfmrkwvlo7xB+9#G@`x(MIPOK>T#=raR zne{w=mww0ZUpd#J=F6j{VL5p_KiW+_Z)IltJWwakN%zK2^N(^C_0yL9oubn$b29gk zj^`%Jlx;>T!s|?h?B8tN$bDy~!TZIopJUrMwsL>$bCHcvpB`y(mpkzE&0A`(dmW>i zBQ#Qc`?{XDA6MQkY4Pas6(t2dd)s~|7Iz^>$0yg#vocmp+V)nZMek+8?OyLwT|KG( zD-1?x7iAK* z)y{}bXINXb?t6{(%v<-_f{oq3v((y#>#P&^w~uv9eBQ&nBKKsc)DFfHQ8u^7=QD5i z8nMoIG@O+3_kH^G`(IW~SfC8fg!?ZJT5C*v}SR z@L+p1FK%k~T;mIie*OBW?)KpFGGo`nFAaW_Zfx4}C8_7cgne#1oB}%j&St$Zn?HMU zXYP@gSCl4IE46fdSnKfOEBE!&NjG}etof?%+m(`DB*LOmCzKM+eOY~7`Q%_3eY;0y zbpj$TucX&{H712Ep4HBHsoX@OaFVa4(cVKW$5PV0bLI7f(@t-^c4k)|yNl(|X&If% z-t~SdNq7AzR@rsqplp#nXME#{75Wa7#jUDePg`{HO4f*;eVuns!cx>P zS@?)ncF;L_wVgX-Z7aJ^yRUw#oc?xSm$sJTmYwt6zDz$Ks$-SkW|Ht~b>^!}pZG4H z67}Afu`{?P{UQwm-_TdQYlT;vs#asH=b|2wbjm*|Jrj_D6mIM1XX zF8cE1%84r36pgxBDGO_!1Tv+SceY+WVDso-}H8 zlFR;V`n7Fg{CDPi=hRf0^L8oDH+*+lIhfHXMDMPz-!;(+li8MS^7m>xQ`Tfz|JW&V zGQccXS?;BqwEOWc*DV>6MQ(EpS9P$+-Hs2MDDs4T`rne2%@Qtl?@y-3eoiQ9XP+Ls z{YAH6r-g{#R5p!OLZ%nkWE~1sPjYNn8LZA+|L2!hz(wySv4=;u&*Xf&e1m<4erSTA z!_MN)tv}dTE;;^2WV6ewUvZ1dqjyPtc0Hr>>#FIQe4hg0`Pub#AD3LyW0(A`ZFQyT zrjpq$Bb^G?)iwGj-G5{ruwUkFG9i1*va&>mr=|&;GrmvTmcrGrPTT*(B7Q+>zFjS5 z6E0p-IcXfxuwf^Ur`f^-sgZ3P6YF}So_xtEN-I(D_-D2=#^!7Po4e($5)%&hiTKOb zr5wDLBCurNpV(DqOX>}SAFy(r&n~OZE9a>z7Mgy4=Jx&4sSoEjPd3z=@!#Qk30vB+ zNo`)5?k`T4eEi09Oov zc5W%Tb)oU$a-*UWF4@1i=VF^yu6+6OF*CO-kj5ZeB*=3R}YzOF^N>uaqisv zcFW(UNxKraUTf-cdSLNvhOgtc!_q8<-Kmc4PKBPSMbm27tWH>}x~Zhq#@$*d?eJpL zJF5$dWr~hn-r8ahmM~-o*B&;0cv2}${aDq+l8k89FS;D>lJ0supV2sjPv;r;(T96e ze&1SOdMNt6+_mMN;moY$w$MequNtu>*r!`5B zr>*MhsH*fh=yKPQMM-E%M8u4}D>A%nK7DpuxAS=u>umE70iiQW{?p<%zB*&GR=aeAdk6dp;j|WPIUtdmCqGcx&j% z2OH{l_3)l3S*X!^@VWNR`ah4)#NNGdAxiVTp$A{T@Y^q*X0nA7OCvhw^Lq0u%`i9A zjh0@-vr^<_e(92L#z88TOW71li=4b;Eli#!`v_^Nzbv-k%~gEkU~Kz!necqQuwAx` zi@P}*AAK*2&(5ka3-|9of9A(Jm8BW??;I0L?0p>4toZ(oOU@aN2Z6bERf!yr7KE0xu)%4nT-G)(QA`UhS|1$E#0<<)H+ zV4HpAP0XK7<+BnVZsPjWTdCmCbmv+o!-MkDQopOtdwjf?oZsTz)Rf92XZB=y^ZpA< zIxoelZ>{Z>`L#=uFQ4;}%Ex=_x8Iz0v)|3kxo-2Tl=}y3~7uA>)ikkG0^> zLz?#c7a6nLAN|<=XpRKOg_9f-X=^4dRSlnUPjvss6Yp2EMBFg_xOdT#CGUPt{?OWP zFn_m{DNjkJ_UX{prrDt@cKTi1yi$E_(}zPUcTK0iy{EU|LrAfe=XaXt&LR)r156w=S{L%Z>+Ah>*mLw`8-75RPmR0eBaE*uM zu}AOqPB#didt}-EHasX&Yp?yHfd3KoYx(zUedUz&TEo|O^#AYauGasPt}&~BxD^q0 z&E)zem54urO9G}8=t&kiv8+qn{O#_na4(TpjR|Wq*jEay$zWRdFLs9gGb1C_HG7q7 zP8x8{59NF9uInB7HO6J02m3djrrmFEMt%Om*q7vSc6RR#jlAp4+=2%>w;8GV-dTN` z&FkH6hk_3=+dq7`pTFj$k)CcrB-dna)v_?J;?G-lSY#a5_v>EXSa+Ulo!s$`9~KOv zrY2YTjHR|!UbXzvGHv6s>|~c-I;K^u8;dyY<}Gxm&}oth!RSckfQ$)mi&5 zJ^5PjqN0BB(H$0QuU`bz)^~)~++KJk=3`+E-zqcXU$v&HyQMyC$~|*=}0_pgbx5TfX;OPxD;eA}?EL`quFAlT9Jp5>$T5zmZS(>l0JFbFgNH%N>?4Cfha61oc?? zF2CmSDZ%(b@JpRz`?s1{7h6}cYI0vx*IK^(udI~jb18>r zrvLwzu>C`0bjF@Ww|^;%d=wp~x{AEoG*RLl+xG2(&-Tl>X$rA_Wcl&tK7W6t`r5P? zrTrC^myWaFbJ_k*)%M)=d$+HBOjPi(44<>he>P9HxxrsWa<2sN1TIG`eXLG1u z`*X1Upz5mo*_Vaa@$#uRo$78@FK0O9yGgTXk!RW^Wl60t?$+4#ueLntY`&J5r>(f` zpyPXEwIv5s;#WO?;PmxktHu8%>!<5v_i(@0eOoZ2DC)Xr$97$_wf93h&OGBgy-0QQ zOV*%iCi`|)E8pgyqrh>FQ(Adb)~DUYXYvDQ*DRT_S#|fh4Gv`0MzwcJ6TP_M&WU-#5BC3dcRH{-d9%gy+{gR819bR1 zuistwbc4nun}vO?Z%cQ)e!9u(!PoSkAD5>{rwGq9*|~R7&+g{iZu_4bAAEjYPq=b~+&&vmhFKX8_9kNs@^-9ubW7yYO6<#?#hoLdU}KD`TbXD&E)pfFKfEwMi37SEn8l|Rxm*j_T1&Q}#mh-Wjj z7fYL?YvkIOEmkZ3*XXN+i}%Y8Eyexc)fjYB%f2>tzp+>?RyyZ=*wiTHQzrc;C%vXh zq-O1F)!I3^XvaQHo&p_4jfb8MmOmf1@Gcj4u3sWt;dW+%)|!tQS2qY}ZC&v&;QNcm z!8Q+44IXMvT0X^EeA}V;(5aig-?B|Qc1gbb^y%Mc4*&l1M`gKNvR&*HIpNLhGNo4v zdaddh)Jt!N{my)GVhdx!vwA@pOSJ`c^KZ3Y-zK}cZr`_6D>5ILF3W9@v+K=$F7aU3 z-Rb-0Urt>cb5unCtJS|g@eR}4Zv1={6Q=R5I3{y_=8cE_HR}cL>eevtl33z+t;o)wpPn-I;of8dFo!Bl26X#1qUNyyc@+7fj@-i@c3s>I6Vl%Vhe1Eu4+d5>Eso5%ml)<3Y-xihNe#{3_S{*pyozH%3f zHA&k`ZF%_HNuSlBjPISn@{cQ5StwGjE!=;9o&N9Z zwcj@T_|Evg`j*7J>+dWj+5~o~@vo7+Up?7$^ZIsPUYmE%g5B=NHCu-38U5nCfBw!h zX^CxV!jqO?xVXJUcFk=w=ckG5uWokej+AH9^i;RddR}_@$vnC5rmjxQ_I|rs{^jfe z(FvKJhs7jIwf*|`r&arHE!e!S&%;ZCkMCy1GnS&N+Wz&wR;@M8OueMe`0oE_?S!-) zT?$jD`Q3jb-<2>h|>eS|&wo5A@4qh@3t*w)oixt|k6T_Bm4=x34_)(2N*rarDg6!>s4;OoUVYnqLZL~>z zTKG&}ciVjD5_^~SxRo|6&lmq)E9EpxR5+shgQXc?Zx)}F)SSns>Njg>3iqF^OJqFb zas9MNNA-(aQJHdvy4UB&Oj_pj@#V_-o7*!iF7BU^k=e9M{1As=UH3(na^@p*fB)Gb zTG^vG`_Bf}+s&&g9)14zYg*rCi)l-{SMsoV34FK|IHz{Ym9qQ%{PrsM)=hqJ^1H>W zA7YA=z8AgHSRwrJ)MWcgUJm~E$73%#ZeG6l)6cK^e_Jt&5C#Folb68%tJ7H|J)(o6{~BbNwi3Q#aWRorf0IK2TQyux8+IM} zE*zGnI)C$v_xrnDx!5WsW^YW$zWY|>#;pT2&JT}t^S6p>HN-AjyL91yw$G6pUawgo zCBXTqD5k;7$h3E6$h-I-51;Q&y2HXLI%Tz!?_?e(^?(f-ntRt9@kO3_Rk_I_?0->l z`{PYhmaY!=_n-exyMDIbjmyj*_A?!L+q7?94NF&OTbu5;UDxd^kFv~La!;8z{+N07 zw(pxu?;pE=`z>Rj!o4Yve-~LkxL9ec)b--|WqD`$m&Us^)Q?|Hd0%{~{q&Eb6*sOb z9OK*}dbpwQuZeeK{OR?(d}UVK_5JnV{$kU*T`4;a?r!|NL$mqpjyc6nSH0r;>uZXF z?XFry2WCW1xZE~%s_2Zh*&XdB&pET5XMSkr*c{jBxbq)N4u{!QiAH}v#aB;Di>Bxu zIe#*LakcO1_5XE(Kh^pCdbiuDC*lduV(UWI*bnJmPyTl%O+B^5?QwDx_o{_f`!D-W zP!c}j&O1@7H7fAu)|V`C>YB5r7=69YvM^!6brrX4mDCT60^b|5{T8`8{R&q8ZC`4?iZ;(1{x8Ntk$Kw~mKDypq)HW}+Q~HmWW}9=4pXJ7Ila@@4 zKApmXhgbHS^#>@fx3cXLu{v_jQuz1p&3;QmEUip_Joj2B^Urbf(pZVLUgDaC4d2Zd z?vqnHE#f8ms_`+bAm(!O`R&d-mFuhTo%HG82;|C3qwlO+xx z9TEC)jMun;tx7qtUKm4^$xhQ=6_P2uT2KTWnlSZYxvz9(EYIRy_{WQx_X~UxV z&DmKqYDGAdKBP?w-|l*s^P8pMP0q+mi*}hi)gC#vAkwJob8gv(&f7f+-<99)_`tIN zPh`Y4Tg$VvthSk(?qxQ~UD(z8cHKqUuiFn8pU!W#?#}%_Z`!oiAD66Pct7ve0cXzM zKDkciFp*UI?f*6)AA$>?(J;qjbE3pz+qT_)@nRv5d;7NCsy`m?OjS^7C~!GsWqG9UjW5F%C*|X>rm?zY zEf5gwKXB6_)b2rkt9CsDSFgj~i%PpR#2IzoJrw<^*d^+%|4x;K%b?|gqxAF$tEo}{ zP5)ajo;FL0v%1#p`^|&QT)isES0)~2*MFw1aA;b5qm9g=qpc@a2V{#a;+grQu}i>Zfvb?kaz6L8 zNi}ykHNAyf{v7j{Vl15S_@G6`@}N^;i(VRSU*|HlPea(j zT}xl{95Uv$+!?jBZJyT4=X$Q&+q#rGja0Yn&UI zro`qy+Y^SWA570@Jy%O|*c>kPvrY2!t6d4IJ@@Y}5}UuD>sQe3ZO_`i_sV+xICF^K zz$WnBpM|pNOxhPMtfHkw&#ab--z8$EW9zW^pYh&HXAd0SSN&Y`(U+Ca*l!30X=+Un zE|Yoe|4)bKiks{aJB7Qu9-K}yoily27t6lzdX~<^rgd9BOnqX#y~E(_#oLpZ_^w$z ze$v6Dm2pERW9lsV5|e1by=4#YCwSkCG77$4Xm^0?OL9~6?VB@sSWm8>HZLcs`KtS& zjk|kveAk_SVq`UK`Xr|QmuHSW={F574lti)Aavl*Qfr662&a@&c{i%+A4T3^UnD5H zH6g~jE?`mo-6ab5H_e=;aQTpwV0667!iC=6r!C$ES>~}j+??2x*jtH9;FTu1&#nZy!VN;lZg08uW36LPwBN$7?^=F8Tw#-bO6%p0teeI5+NJ$_xNQIA>%>WU{9{?B zcAl--?73s#q8BeX{qH^cHdS;k+pSqs zu1-DqBFnXmi+TQn9fw6aSE#tBxn7;pDOtf)o3&3b@XEL4^RM(9D%2WZ&UnJ`{=7-@ z$*_y(zN&jN2qbxkI0_wEW|Xb7J^k|Hr5Tn*4AVqc8@vl&Br@H2yVBWpJTv1w1eD$8 z{ye^k_wDID3J==0+1(M4J-0xz?_MOMDa)aZnj;ml_WVAqZ@!i>z+_dz(XH-g zw~qb$A`?;NvVMQ^@{K1KxM&%!`f_^fYn8BYEt#BE zcFx}4>t5{@eYad=!w-x5TdzHd%RKnjqQ2|HuFe_7+g=zIc0KsMXV3muX8C%j-LmyR z_%2b4pCmLf;n?BF5r&gJmzu2XXp+@-ao=t;wQhl+Z_ktNAnlDd?9)TTb{SVH9axaM zS?vDK?Zxyiv{&x^vFY{Jnw`mMM%{fzj_cZt?l7zD_+V#i(LCvh{=6%? zzay`lwN^ML>!`jkNWJ-*m8R&TDJvS)P6sTFbI&oYNt*6FVGaX}^R?yMt`@5oFfh7* zw~1=9Fe<8Xo^W8d`DC{8+Lg0{QlbJDsD3t6s{VLskw)^*mG7IU#cob?oxbZ! zV4Lw}-oBn!yLQbvv%D!YOK#qmkm`d|Yj1pZo!)&Ygi+E+bb(}rF!{JmK0fu}L8*gx z8H`V!iehGx$&lX9H}#Q=U!RfGto@s&&D~|dES}Y?^k8?GUt_ny307sn<9s|k)8_@7 zZNIy5arGRFKT=O0%WrmINnExzGayMNB;>)j`{{?yW^JEvXlaf0ToI!iYd2?$*NW;q zejqk^^5lgFwEZ%2mM^LL{`yKr%i~Igi3hhz+o>Jy-p&6|L?lW#rg%;M@7zrsIT8U` z8JQ>bPh{WzdLTNv^b7wR``NCW&UvJ7^Yai}&7{k``0nIBDQ`}>Yd338oJyKB`CZJK zBwpc9#X_g99picV`+A08tJcSw7q{+iQ2D=5QBrnp)l%uuUAy>LBj@Slr5oFPhzU8h z;?SXA7kiT9=6!jp8eZ}xaog+E?$_U!|NOjeySlg8oXZA|ySE+Rd+eT0T>0GH!T0p9 zFYd{ApY{5`!LIPzi^5XVm*yRqempk%z?UtRncN>!DjDNeSls?ytMISr{3Ed!>!&T= zbX!2}V=BAL{oSssq$P4J*m_R*)$flz@SKTDVXm!gY$*3P-^UE*9wH$jCa&FlQ5El7 zZvXjK_Tu?w(ZJk`uPlDN;C6Rwc+TYZBmTvL_3>}cT>2nC)jLhu#4Y4@Z;M6tw0Lp* zkIYZbKT@5P{+50Jlu&mK5q0j4clRbevFLZ5ecS#1kI9qP6rMSjx?ygP>36ShK}&vY z*|y+fdeDlf+5Mq=7MV=n|Kf(aTIpdkv$Q*tI3`Bx{qQ#YTU*i1%Ouh{K}d4LgA$$W zSGTS-F5i74>+9KhHI;V{9T(sKW-XgTt;9s3jEqcX*P>}9JN9qAeM6+?T$_}F#r)W9 zM-Q)E>|(aI} zaTVRWs?V-l`rGc#27!sYL-`Ny?kldgtv~$aqHXl?hRH0Eb8_A<4)}b|dCzX+y8n;8 z+#0XX&hY)q)^_7zvvbb;vlBM2`_AX^VUEs~H+Hhci~4;7QhUz%Z(g@HY+pW0{iC19uB)lUK+m&SfLveAci+Ik7U7=5m3!e-kKT|05@iv9A` z|Fe#Cl&}lmXk&3?N^z8bFH+ghp(*43$#Uk29J6`*kA*dC(P|P)x^C;^bf_;=eA(QS zIXm65TXr-$Je8BwO1fQdzV4G`g3p6ZMf2-*XZ_!;=w!cI_JMK3dgV{EWo`J@9oL-u zyJo>bZ3eD?qL$WQC;xk~wdP`vD(`}VhIyMe#r^%GQLrfbZ2R2l%u7^M{Ov!~^labn z@Kop8{(n=-YYq8=FHTT@U3f-$x7+dedmh^bvb_4Y_1E8R`!iz~h&oKad-vh>6|!p2 zeB%{Xz0ZH%#lFs)_j7N$cHFJX<#rAJic&Q*ro2%Mn4)y^O0m$k>t}yNNEz85kZBK% zYA$YEciUg+-NA{AnKtV)a=bbC(ce%o&ZnQ9C7fex>nbhh=?Xk*4=xqDr+^#RRX3g$r#c^~%ybaVtG&s@ zdm~ahIVrB(b-`k0&KzSm#fwKHvmYOq6=*yrVpJ6*emY#uJ@CSfO`qAc8FUuB^J$O> z5s-4_v@pz-N|5>arfsLS>hU!?GgCepXqLQR>25c7mx_mIK)@?zzFloUe=cA-<8t!A zM|MGx0Cwe`hSkNty3@ATWZGsNV-h^`drj%*3q03OnrCeL^u+gE?@b}|H_zW35xyg@ zykA{4<514dTU^EumoGjnb}8bn+t&|L_4|)mTU!6N^YC1iz*#Wky_w$M{geMZV+*vB zm0cC9zuWG4?CZ8)Uu1vZEMI>5^X|#Jzbmh4(f`euzrKf2_xVh{ul-hwWK5&NTk>aL z5cp}m-1qsH2iJdIzM;SRInzCdMRRuC(~{j>bL^*oH}zvr%Le_->#NyAolhpVXgh1Q9&fXj zp0cbbXz8M*y1JdeBQ7sc_4m8i)iBXaUxazZ2miiPX>&pvr`U?P=bdUesmgzEd75SJ z+XBv@fUosxbC*p&+S|TKP@F&Vc3831o11&GOOxNAu5Z zo|g3Q#zV&B)s4$D-0l9?{RwGo=RLQ&Pb7Qd9@bd*ngg~9Os5zt9>4VJmcGE`a78x6 zE0(v|>vqZY<&pRKx<50wzN+s!;Q7R~D5djCgV?%FhAK6aL+ARc=>GY*$Y>1+E>4mk^lYX|F1vV zDk(N5hCdHAPr3di=HiEKC&Lw$-XFiaPEz_~L%ZA`fgb;P?X4UC`Co2|E%%O`(N?wc zIq%E|CasqHwq9qS+^i|Fe5!Bnue$C2N)lR~&FdIrF9a(6`LoP4N+atC|CM0R^aXyp zjt39AnD5$I#(ez4s*sGSQV*V&H#G9J8o0OppX%Hh^5u?KZsN1%hVn1cHy6z~G>PYZ zL&-(SayMfE-%A*mpKhGtm)d#xf{oCQ zZLA8ai3M596@UNv{(5Iy`OkgTN3MG*&fe~s+9%k!{p(jrUzKLh7mCf#R~{62Tcfs? z>BY5W53jda-}+H*DpkGg+4ALr4$LfdlXzc5{Yej(VX$${cpTL9$o0I(gO5S1hCd`z zw%x4MS(Ku7wXIEeYeL%{^Kz~{x#QoLAK&w?jML?QqNG>Y?XAzRUo(0yJ^6{oy4kz_ z$fbvT)fBB`Ncz0z^UkuocQ0BMYnFe$nXpy+LHN(Y2lBi3pY5-nF<1Yb`}*%K9tJD( z0=@Uim;5T}xN+;3i}&a4nW?YdeZBJ`TDqpraXIS=kxzz3-j?0t9O@OoKw2_n}KJvjmzqwL$42f3-&gNTG6WQdHo5a(~WJy z-$EWeS6Jz3{&1s=qS9fJnN}qh{losIenTxtRAeB>XED}GCtAZT)N~%z#(HbhoUEPY@#Vgia1W(H_7sy z#>!S6=-zeYWb$wBt-Gz~MCV6YJl>NTDKkgK*lgh=moqhn7k$TwF&d|?e)^8 zmxM8DYXv(XPvP>w&UdLb*mOG41Jwt zVN@hDnL+(;E(7=SX$}_@y_iBhb4p*OC;WT<*XQavmVn}S&q5#V$QKde5=@eM+SA$W zsTu5ic<-xMZ8yFzoqXTaZ3P>*;{^}4OHZFhKk4RsYj1W|qk)^B!S%0mg`b}M&1H>C zf)>XCIyDy0m~xd4cV^ z1B>1q@~BIZd!^si|5fTo-uF<*ons1)J_Ev>6`}EHn z63>eJ^k1wL`B3oi?EXi3?#%F%)dwtRJugi~rN7okLo9Xu8>esZBX3sws?%DNugN6{pzgKbWN4`y8 zZBsWt?8=9^k!N46dn*z7pi7Q7ZNtO|zZ%3?!|f}6I7#Uy=1yKGc<5ok!2_4ea)k85 zRWvJiX>_u&KXjb9qjK$Di8ihslLXv7;$kMxnmdra{06IjIHAK;-9(9Q&=Lu&%b$qP4?;TeTux zNKLF*-=qG!{qlR2+-YUKlkKHA{8mm7P-gg4&dnV0B=r+}RqU~AW#V#mj})&T^IPk) z_WCoGupDnAw|CFfwBoi*=JIv3*A_mvJ;*vfy7q4I>mv38)ear&*4goTB|qztmyKX_ ze|}Vc?kxGv=bIx_G##Dap-7Y$@RUFm!9mJcRneR ziRJ$N``2t4I=}4u_s>jDHuhQc-qmb!F`o_Z-`%7iu>SG)jY1C-Z`^;?_D}GCZaBw5 zcjFIBl@=5WFJ-+S-{xj~r@-_mPt637q8p@fY)iNxW9}f7n{Og;(#- zyDV0}EO@s>Yo}&^U!>64!@K5`Zm+Be3RAy6eVhEGsY{%ak47xvh>__c2He(`cmo08^p;_Jm$I!#%{9+-GQF5g-ImaoLzXGh$B?Ak7PYOS>)_mhsx z9hSw~MsL1zT)HGS?Q*k=Q0sw<9Q+d&9Qw*=#~?5#GkwQj{)!Ba$29lJ|9{Ue_?Ob}nzeLY8gE1FPJOxly<*otUfY_@wxlTJ z_PHCcUTFo-G1eB9cqq7J&Ajr$>xbRUcD>t^mn^Q+P%-Po)#SKvPtX79%A1O-!p-$1 zo;6Hg{vq14GO5(@;zTVD<@uMs-`b#4?ECG<_2!r*KW?z>-FU>&|D$?ahEkz~0`sle z=jP|{EnFGDc#+r>O@Y>lT->i2-I*lT8A;BV-}UKYk;)a9!}~A$%u;Z6emNn}^U$o- zZ^I6EELde(yM15mzt%F&7g}rO(jRZ0ymW?{xq5rM{H@Ie#VfV7r^dxzh%!{UxxT`! z?b4~*btm+0#j7}LhKd}C&t0`nPrtlm-mAN5d0RGbD=Nv^JM-1=&x^PtN?iZlyuJLf z%+pJfHF15V@#3+MKC?GG*!|A>8|R*~d$;v|C#<&)lJlK0OZsiC-=*B+_mc0=*1VQ` zS>h~LtZVc3Z${HrTitP;`n!@rnfXh6Sy^w!3>I0pt=BwGADypSamPsZ?x&rrZt}94 zEZkR^*tEF#oSAK+aJS-z_6v)XOCEgse<%N9GS4jC$emiJ3Il^)C>lNxsyd;$Wl_uG z)((y7P0EHT1+N3c!c-Q{RZf5Fl((|*utM_jz^H)ksn#D;`;yz#GR?bYT($MG{~UWR zDSFc?h5a!mFBGP)b-XI~WKoT@=ha1z(~OnfQrgoHSAE;RxY;E?QQ8-{V*RHLb-u6!otgu-4@Ww1Pe(BYW5^P=?7vJ$QzlqY+ z+VVK~oBh7;4Pr|@SQ_4*_GtLRr9_1tOsvB`7y`Q zPKsxF?78xv^)HXV=i2e+YU+zmQ`t3`9z8SDm3CP1zqnSBE#BN|IkyvsZO4XL!g+pw z80J1RpF6Yu?4tFNR&!W?-_OllZNqgtV9}vBpHtXw1#MN`ZOv+F$$#WUMqY!GLR04B zrD|&#DlP@7|4)gzw2FD7)~}y4qh7k-k&9iscj;#l>u%174<66HM8>sT&E-6}F#G;9 z*S0wa?YSLFBrG?(ugR>Dk$kN-o%3XN70;qpjWAvnUMp3t3p+RO`gx*x_uI`sU5_x^ zH>XaBuxK=ww&Ywa8D@UeMVIH8(UYSuvxCB>tDig1%XpQc;$8;l+Q|l!_AGw(s&L2R z2xj+6BT*aHH#4U)ho`TzSas#~>b{k6Mq4--s@YDY{k!@2SWjq%b-rIQ;Z&m8k&#-Hp@qf;m>4YMO2J{qo{X&ky>mH#JOn__TK4$7Q_1rS>{K zY&BYY-w8To&7CD@Qd?UQ>%V!fT=pH2kABbJUJpKg^>r5i<7Fb9y3=b{-;?ESXfvIu z_;vru>oMOMf4#aP&ro(iF=6$pd5mi|&dt)8up}Y!>az{J8yftqcO6YSSaNIG$4_bJ z%`V6#Ob}R~uUeJd&{Mi$?zQsk_vEtrdZ(y5{R-Gn5aoaV)B5!d{~NzPnX}Q*?5z95 z)oe9~C!T$H@sz?3?N0x|8I8#vr@x(hx}NL)migkh?d`iKAKCn1jT6i78#lJJIUa10 z{@Wtt#`HJjU$Be+?5Yo(JAY+w5PtK%e&70l?HSRZ4U!lu_N*y+&STls6L><$uwljq zo7L&cX*qTWYgtcgMZU0CmrVG{^+c=c(}Vezx2KpSo^{hSVqKDN^h9;)$ltf0|V9PXa8HtOl4ZR zH`4!*$^JF2)n&^L9CKt2h@DmIYZKda&z!wp{j;!Yvgn`ta@@xZbzij||6y8tPwr~} z^DEjsyj$7TK9}v*UFZ5f(l#-s@`$QxY}TSxoCR5|_vC6A`V;fwIDT~ZzqOiGA`?2J zP5mExrSI!~*V8ZVc*;=Ls-XDAxNPr|RRQ;pvu&B4d{@1RRZb@S{^!_!2cwKQo%P%y z%>jI=2dA&v8rFY)O&F6GpTQ-GiBB9ZGE8OU*co@G^2LNt;g#;J)3)@xdM&=cAi;yV zeL|6ltmz4R^*#m$v$N~>a@8IcC?>U;%V-{YzY0baStVi@jH48Ru zT$uRrQgi+y|+Q(GFgkc@(PbU?mzkU z%81QZs;NU#R zzwxlnmg4lw_7C+GYCR|7O)5vRKa)i;;at~K<% zGoxSnTbJ_L2ESE3J4}qH{CQs8CLZ$9;KaUIN9|Q{y7qn#R!SHK2P>PdtCs4?^3*MJ z+HLOib7vOwLaS)gtNXI;ei=pFZM!rfMv*@{JV;>EQdd#!*ei0S8PDPmW%NH=bmekP z#rKXbsh`I3_s!Vqy56{}HVU1*?eXRD9EQ-|Ail^o7bMv@q7QxwpUmEq%_k7r`Nv?Q zjVZ5W_re=&w|5HlYS#Ga?3JW@cE-_<(2k z+cU?n-Cext_Py;h1v8CA9Mg?2Xb3vTC$CJpcJZRJLi4t5o8`4lTo$}FPMh=L*~Tf` z!n`<-xid^P{8jXB)r@NuUS5y#^N+{Wy|mXbES)Qua6eQbm{I(nUfHH4%nS}k?X`D3 zecHK=*Zykm+MTJzpDRn8BR76g`J_2HHGnsC>Y~&y$JRv5%{L0;+_z53Iy^D>aA~(# z_JOQ-Z<^T{KeF*ocj(=H;NZ%=JI^cl=u2!9Vwd`_gf4Rgu^ZV1E={Im!)f=faX?}h9;XC#p zYOgQ~a>hiuFWX~MSC)3**s=p>-@cmvep2|Ky1M40Wt;BxCMi8VD|YL5)ZguQj@B2( zSsb&!A^!WLf^Xk}t|?0 z)mq8S5W3jr_eS&3Zt2JE+Wgwb<);5Xb!d<3`RVozifmIBNckr2mYee>TCjCj)*_#s zbqkg#TwJuIXTikwbB{yyGLy1$*UDXZ`C*5k zZKIluou2j0SpD7HKjifPeNSgx8}6(Z&YQY-Z+k(nZYuJTWr{^&lY_W`*t(4gmMjKI6RPJIH;lJN#;tazJo=n zPjwOu(x12KtuV3ZxyOJ0*}3V@ZS(j}OiC4d?cKe>kM-oCqX{{Gy1K(mzDl1vRw4QJ z?Ul0HDZ2H$&whTLl@aq+Vz%$`mf5yVR7wueSybqm5on#{k>CnW&6%$8~c85ouMlG*6$44p4Q6_ z4BMP}I+}M^`>H)(y*m8X*5}W=N?xmk9DVcEX*^jZJ*r4 z)W4B8e^E(k?rYQ1w3>2khV%NeLkn(pR$o^MR~0HNF}o1|weH}0L7|@} zC-(_23{rF`V=J$%^*oxGaHT0>)0!JIcCOj6|If_G@*@XVyEk0^^fpDvt?1dhbHZ^f zOFE|tvAfUIKEL?P0q43y)&5u47 z>FC|QSJ74Qnw!ZeM0xfE+iac5r+>_TVPd~u)7|a*e(p~Wx3sjczI<7FRW=lgN}$=zGI4%>Fbu0Ifc`~7v1*k`P34dFkZVzDbSNQyqFE*;_!o^Bq8Ao4P zzUt&N=fYGKzn(t-ys!Vgi`%=9uzx$s-8av95ZEM}de|l-W6$e}4XwYQsU%f5U*T9K z>(a=7>+F*9#mlVLuCub;y(wr-lZ{!}#WP?3eb0ZlJzpVA!CriO%%?fCxVavP3KbOW z=~b`Dm64oo^oKj-$knU5dw0yP`}bzWiWe(_TbUZ0_Q^;!Oq$-Rt7G57axzp~TmSLI zsTVtYu1uX6SylBeHNm2@YnFuM&w0nZvJBa#&(E0M7#mgg<*QFY`FD{guTP$I?CyT~ zZ%2~LlhVnzWsaI_8pU0o)Y~fMY&7Ng+X(N2;o~cg)jc@dA@_#5dgof1b27Qxc6qxjUVQuhpP7zz>(_1i zykzksIqiMNZgoc0G+p4dy*zV8xLFMQYmVZt2^~EfCLMj2uDdUy7Zz{{=IsmOG-$Bd`~Fxx@5f*D&-PDy!ghT#>%oJbyuAAE z{VY+Lw+|%PI?So8t21R`{27|Mr=v@%rr~fKkK^r+s`cCTtJY6j>b3UGqkG9U8Y?uO zC#4_fcpEc&jD4jt^BP&%XIr==sNdi_QfP_MV^l<;drn z^70x3mE;3=m6XFY{y#o!me{4$xBOEzxG>!+S7zF7=dvX| zwz2-HX|wB3?D1zSwx7M&-u7Mlv!{yOTxOvmJSk~~<)*UNF zZxo~?D91YJDSza&^iqD$=o@5M^>Ovy6&jbME7LMpMy)+#(Rtz7h2S^RkFyuQerdRB zSzB@QoCiDyV{MDt6XO`@9$heg-{c*7EpT6f3 z%a^-a-@kuEn>GKvz=xkU^5txWZ!Ok|>z<$A#(Vx1p92^U$D<(_&PFdV>GfrcD z-R8L5+)SBYj&VU%D=wFq#fGZdlqmgsn(?gj_R%ADjb#-@eTOsMPu)m(yDh}@_1nyO z=EpBDIrWf5FGk1u-=*kRzxOOt+^_O_=e|EZXU{KM^eKM-r&+V5y}Y)(403YX|3itNG?~b?%Yt9zyHO z9x2Le%zYoSOR}2pyQkv)V1eX?Da|ii40X;PnNm9a>eukCSJStC4Hp+@3&~8Am64c{ zwr|A>0oS`-V!@opY;7ekT-mgFuT)~bIOlNA&$om(Q`ut&DU<5;4 zj7V0R9-oZx>F`&-)+g?4V)(--z^Wjqt)1zVWbkjrb!LG#r@S^iRdah5J6S+*d-Uw< z0ukRjum8IkSgha~vHma1pJ(CWp?$0G8F0L5tJ|)v-aT1--?nY<8xwwCzkXO&_9)YN z_0?OXl()X-7JBKa+56>}f5+RTXgt(eU zgsQ#}FfLgV%em8}LHOg!`$_F@sTGTY5TV&HALUKZC%HvtIspRY2${oA3lBFJaN({#_vxQlO;S_wSKW> zb41=`P;+vcASe(LyP*E!1p#BjPUF;yV+RjM=hWZn6ur{W^1;t5tNezfmGx`3gcVmc z*RNRMFwbf03Whm>+Ust5M7X-DzS|l)cf#*iyS(cEmM6S;a6ifQ$n(8C6%5w}S!dNh zkq~+?*CfK9eI~!SFaIm{HRbcT?PL!exH_edkFTa~!sD-BWqJ>p&6EEBuvI3n%*Ox5 zvpu(Guxl$_dbi<`<*aqFrwo0R z-4_>%zT{!`Ie)!u?JWSB>43sw6TDSwkWqkhS$?c(DT z3$)+vDsYb9wk=Lg^xZcXud6Xpao@gKegAgvnrrC$-OdgV6&ezglI0&Iy%T;kKZ)tP z!)Kn^=I=zqv=0>;$;m5NZvA1D;inVy+-w_@u8Q8b54ul2M$hn%IPv)X+Zd&z|IWBv zs#++b6gHu>%50nT)Wz7Tpktq zvrS%{`nCGP!TgLFz6Of64$m%Mn!xBI>+SCEeOyp;SSFA!|R%{S@y z>67lcZ5s^Zo72K#YD(&B;?~DzSLL2Ld{lMz9(bkqL_e3}+;gq&sSAE*) z{MOdZ{m-w*i~DTNk2z!%`CU6W=#RGW%$WSXv{;^+H!C+=lrW0RPRu$Gyegz<@#ViR`Z^QTU2neydH(&iea2?9^HUu0usWM&Y0yG%%m<;E!n zsXhC4bVx~m4|$cA*g9!){k^+Ct*5olp4gLDd*RXEyVvbvb$+v+KYFzF_Q@6IFE(#E z7NPv#KU+sC>h=b=l^0t*a&nSarx2!l{qzf)77cJH#W)rg@b?`=q?rK5@UG6uX7C ztS9ACsuF$LB=zoDr9ZcOvu?cs|AGmt7Ybwx3kOIpF50xAQsU2}NAVhdkqR3R%~h*c ztNnO&jrGHloH?^g7yE7tlv$p(l_&Pv|Bd#`Hr&jJ|5GM;`~LaEo=UONQBkq+@th0H z3gV->Zp1TpT<+?6&#*J9&-L%Be|y$P+Ft)!GDU6ntsjqlS9q~nT1v*p#MJGZB`mzz zv+K<(Z4aIIH@{DuxZ>N}8I7!K8)QQ(CRj**F)O#cI(JTOMoG|2rav=f`mUM3Y_xx(GUd^)?{3P$FN{Tu zgmRWWvzSry&ZtCV>&suS)=J)+|7?47l%6Hqj?{)w8hy;*5~A}tYy&H z9k_QrQS(G0CbNwl`V)5cS;V-hOsim&2n@Tii z$4I=`duh{##?H;w);r@RPENlqugv&W_s72uhR#|ZPEF2^%9t2^hPw?xjD1^8lP0Wx zx@C_{af`*m=-Ua=x7RP$na`88Z5!j$??(UpmYr~atDJe-ui~+v&Rl~mL8)(lW^3+W z_Ux>ZmzQ1Q^Ng@d2YwqQWO=nHRcErxG*x6}?%%97&uHee>;->rt~ksaRne%lfA-yi zuKurV3;$Y%b5(lo%-NjzUr}e-*%;SbU*p)4e$BRcV3L*HJpbA9$c0va{w7a1WUM^? zZN@E)V2Q&0-)b~|+&d)nz&>=2a>Ac0Az|mVwRi8C85euhK}P1r{qHI=)1*YduAZs= z;ODEE9IvvX1k3Jz-{rKfgTLX~+IyF3{-5VN*Rdqu*m&K=zz|2rn$psrZuOj%U*Dg6 z#D2|oyK#V~?4uKV=H;yu7oVysVdAx)|Kyyza{WwGTl#LcG+6xkwX5phxn1VRX7lg) zT=L`KpUu6#+1tJgiY4q_)iU8hRhNk1*V!}WmUBffUuN;)m#&-gt^U>f7^{9&mn6Df z4`&Wra!*YB*r7$5)4$wyJT>9fy6qXAe8D;$dkbCff4^S0T3qX9%iM}f0`sloBPPTM zdIsz81$VYCD{ZfOy|YV^p)bQUuE5bx_t@EO3>Vi$*`#NF%k4a4Vrcc@@`JYBX+RVWCqGecrp^^RD@&k1y!g2C5j}O;t2E_b&dl z?AEP6*TO<4Ra`UicTm55!{g z97RhF^6uT=xBNzQitHwqqD{g|na}sF;67Knce8xBMT1mMPD6NA+?@IQ*+0l>y^t=- zocF6-!h^Bp_ftdGB|1Z(rNM?1Dn-)`p7_T=k-u8LB z5O0X|w;%Em^QK2jEcrZf@7B~*uCt$CJ$f`@<>9|RB|5=#8Zs6vSAYCmJvmM81QMs=hg0IEi7SE+F#aeKYVeb zdHZ3H%BPyFA%_-3wwk@JGf6+SkkQ4xFYs>}+wymxJ}HOuSgNM@%cx6Vnfrd`yQGetuzy3N#5W5?rr5K(O{Sk+IWpZR1>CQ< z@BScsQOz~aN;s_ea_!&8rmrH^*MGdpHJy+7-19$M9CUZtHLxBMSe-p*wN{l!a;<#d z>Zj@__VdpAd#UQhm)}38r*vzrKl`x1ua@U+{r%D;@2K^K3C zIGjw1IPdY`|Ao(=m$&{ge*ApK+l?D1x}2J0l6TGC|AwS;&YSJ)!#CY#VB2SVQ;o~; zHnpnure6Z=XinPzNwVy3A z-9*aSN+#_6`?}@ClOrwbz9o40o_yt%=HDMb&oD&PbajKf_Jbg1MOFughQ?PX*6+yt zcd{VmgNC4ysp$M=jdz~SpSxfF#?pljt}Q!%UGwM>-8|)r;^77H%WfC6usD?+UUKy_=0C&V)S7RY zkb*=p9lgXQ52svgJ$893=ThmZt{m&~pQ!GXE-#*X^qyU!YWtPWho3*kPHn%j#iL-Q zX79E1_@r%HWAbGRzn(pN^yG;H(}TVz9yJY~%Mc#6_PS86ZSnPl)80<6!n1ZW-rlv< zG(1df^OllrnP+56*>~~ReZJe;+n=}hv1G$^4)r}r-O3Ec_Vsc1Rs?DfYueQD+x@>EE z$7grH4`^HRnR|)G!d|wbeyfm-)b-~d*O^a#R$yyv zw&1U62UAr4{)5ZjZkEWM+h_Xhf6JWY?G0aylU?HM-f8zO-Pre4?q16zUM8o$!+oz$ zZ?0a`sOy*Vo`2eezJ~8LH$@iJDoy8K=#<;bC45a_NqmUNs**OnAIq*j+z_>xTl>{-88K%% zdEYVGCS(*B&!5GcRO+J=Rb}s7p?#6>xn5~``seOYR)*+&tNVW%TQ_V{x2^rUbJBt>Q!4zAw}#K^TD9}=YpKs)uO2yO zp3;2!ZxVAuwA^vi-KV-H?>MMZ|9|tAExrziH$~NG>oLUZ)ylZvl8=vP`g7W4&YUy} z8$Gw6BIm3iTLrIM)?Ks#w9W>sW86%7lzkhsUUBa7We z|M~geKMCn&4L=Tlx!ve5?5E9&3r-eU9%2<({Al_6X&qo^RrTSSlnCc7T{CCI&s6ED_26^yovep#kzWN z@2aDMFAPrBuJkELm_9xK`P}m%g8s(>P6~!?+aaH~ezUN}tW~SJtpBuddDfly_;GE3 zkg###8BVS>d)o!4mD+`O@;v`5Ve+gH+vCDYH|BGRPkpIQYm#1F~W7pBx zo2hnS=N|p2veeI6V(--WX5`MD8>(x5N&3o+gp^eG-V;*KOvJ^MJ{>SOQMz*dzKQ99 z|8W9y^&W}MJ->TLL_WW>LdJL7kd;?92p{VZal6&&u-^DXy~zsupShne^*T+{5muVS z{ywRTk&Epc=aII*pEgwdd-vt0g8$2i2kgbO)EyRHyC&H%O-cQDQGu`DL58R4R#zKC zLPCxlIl>|s6#ia+QvLchcJse3HcUM@ZLz@8fTxer!a@Z%N;EP_T@qjL{+Vv3mdQ+~ zj@sn%0_%+X=jNuIJ-2*&y5ydJRdO`~0s?CuI23VpZ1l-V6X*8l=Kc_UL55q-;z!2r zqpR;8wfYjqoBF_&+juFL-tXGvn?L^8y<1l`vx#?Wq>N1zhoaK@yAx)0-7HyhY3B}= zqz!Gaubn(;x9;&}r{7m&L-!q@x*_F4Rh50tjn7jiOnLC}*Uul_igw!>#H1c=7H6sW z{JA*VKR;P;=GrG0PCoita(UOW^p0!mZtq+vYkZq)zCnNW#(3d*b8=GZ4zMpZI-|8L zcc)!ktop7yb8~WYWs9_rU()ArVE_2juA=(RbFD((v%&9Ty}KqR+%IaCtbc3z)AsbS zNn(Z>ZO2O$pWK__-+pS<{`=}1uf6-KbKS`Ftx?PC9fw|Do{^ubdcI62+H>N(e<72i zt~_~g>})hUqvW%&pIqz<8@3d0wdVEM<==Dl$~)t}T`lf+T1!_2{F=4%yYTYUf0C0+ z&YBC&sQA0DZuL9$sBqy$Yo6(3u4g*RJ#&9OH>=>*7o0AQN_#eMj%S)a)o@m~_!lYK%yi8s1}TD^MtoWI<$muG2FR=#s1 zW9!xKjdL}ZPgkis<8-O)En`sF$qN@Q+}l^Q?cA9|H;=Lkte?}zbm8ZHeru=Q_3!)L z)@_T?zINru_D!p{o)t7Uu9tM$ogYHIHt z9hTTJxv0Qm_nmqB?InF=L%3rTqc_}k4!x7PKl)T*t@z?2=@+zr&S1QGMTX#nOU^Je+@MX${fBuGR{3;USPcA7Aop5pqZ`A9fwg#QG z&!UTp+KsZt8(#3X}C zFB6R`3m2vxJQ!YiMAs{%)9BUHSw~%u>WT0lf7jS<)AGmvaB}3)H@{m81URN#GkI~y z<9*XV)2OqFiP!7C?^U*JS@pPW%Hf@~Qk#gtpL%!wyVmYQ$tJWtOlOFK7Pq;8aprV+ovbX zD%LuGxHMU%Lu1#>PmeaH7Z>YJNvLUY-7rz&2gAYgy~~?xoc?aJT-YLi;zx$T=8HSN zEX+4b_+hl^Dcigw&&}I45<;C~E4@@htCn8gc40yJ)q}0g%0*A7PF=is@vEm79wy1e zgq#dYQ!_0p(Y%y$&NNCyVpHNm=}Wp%CAZJb-}_!zI(KtS%&zlc(=`$k6XN2!p41-Z z{<^ZNY`wroJ*jEWc72mF+p^|XySqL6o=at>W}k|RzAci`s`K_gUZ`k(+-B~zj!E~- zzid~V?Dyi|+4IY-1V@Q~ z2XkNMd@3*!64Lzkv83qM%oE)lOluddJ2}zG)2sBReE1sim#Z6u`?SM6jy*3DS{``+ zk(9A9=T&E=d2`P;advu4T)S-P!;cmVnKC*g`MM>2B-pQehfEP!=xgI~`^DlA6Yftw zfdzew?pmwc@v|AGe*C>;&pfMRa%=0_FD~@*2sm`;VrbyIwEw1#3DSmuvc0v%O24m+%0Ev;<~<~ippDUZDwz8mb42xOSW&9 zjSyJZQYkI7^PH}rOOPsK8mq75j$5-nM|K{pzn6UZo6Zm3S38rUX4Q+XsuAl8)_ufu z$1AZgB4b69Cil)9FGj=cJ9+PZm@F=svvuo+MG4n#>ixQ+^6?<&E&0W^_x%c3WUcwG zoGW3o3FP5^ha?CJzb?=_|^~aB;{gmwN67Stx=`0%B>uaWJTUk2Xy8ZLooo7sZT(aJkWj)9SIrjN1L4KkZTcs6Q|av^(80GEKiUZywK$>V=GZFcKJeK`&4hmSEUY) zEuW?|@NH4Lv5V*Hx3-EprhrfWf~*I%=YF^m;kt0mtMl_C)*fd{(YRyTb0eZKK+$%= z-Te&TkGpIs_kA}->%U-vl8Q!^+&zJ;SMN@G+N|E}P=2U^p+EGTby?Ykp1GZ?4hPp* zW@fNj?#LIiwBNAn(FBQ)D%U5N)LlE0{AjL9`lE%3?}YyuulDJ%*UDiGHQ&3%rDNOV zIldDnG)($=zUbb$!X?%|vfq4pEy@DcpWMFT`Tb9Kb55CTwzWMcnbvI95dG#=*6UY~ zSU(=quC6F1|y$@O<@FL>XPxHF?CPT1dHFI>-MvqE9Ql>dBUjE$^5 z(wiRadT?I6>fwKzZ}a617w-LXh(S2HwQT?NW6PYqYE0LZyRP8zbJP$zb)!pn?#FZ8 zZq9$%4kjPvJ2>H1nqgGI*@p|Ks#eZwUf<~J^_N-fIG0#n!}W#X@8-7Dv+-=boO)&R zgdYt*%F^Rzo4w|Kdho#7pXu7WvT{7=1+4M>3Df{2c5}Y zs~{^Y8-KrQ!|CRG^W-i+b*t_^?)kD&NKUW&v~#U=?M}U#C8hUYUyS;kxLfCjda&W? zi+hzB5DWBE;A;r{dIjVH2L)d`O+rsyare5ffuWhJv(LCNs;S(%j; z>xyzdmHe8j{ow6We~vYO|34O1KPA#sGj~S7u6v!fm$kl~T5ou0w%DAs6eZuv)qAdR zy{fUxo;@>g^OigE5)u;PHOH9?UmgF>z*t#X%gR#O{QdXsY+v8AB@=6If0bDO*sJ*7 zV!OXJNA3S_)SJ5S;jgzJYjQ%a9K3z!@z=V#Iy-y&|GWNweks2B=KR1#6Bb8zaBzgO z$$J0&J0&KDfA`8Z&E~YVO~+#QCO(l}*RB;7#y{r-OZMM}oO6dYzx@06uYzOR0ez!Z zt?x6Y9Oc;GTJ!A9$x9C(Ja}>`qN=*uzPZLUZo!$4z6^TLf9yD0xL25iOP=%O{Hs^5 zw^cSLoRO)M=L@QvJpI$7My3H}ipH)^~{rv2b+L@adeT{jK$lp$GUHj(t5=FjQ*VtJ;OFmgGGWBqp z=1VS{ZT6Ro^pB?)L_ar}+3`s>%`xEnhCQdJKc4^AU9;=-YZIa6S4G#$DjoXI|7xAB z+^V&I`!#}gy<8D)`PS`Z?wO;iJg1f}x|0-BoOC9KCpm4_&7#>QL7MKZOI)-jDXseK z=C^3JS7}jar`L<3Q@WmlqRY$QN=jKByKTAu^S<}bw;zwne!um4)x7sr^U`atM}2PZ z+#CMsLDlVrYE>uJU(0Le678;LGX5PVbS;}BCtvMLb=dA7(|57H+B|>yETKIn^R|Bq zn|4iHK*w8n%Ket989V3tMa<0Dd*a@`x`WRedHMK4J6Ej^%Gtbj1CN?K}}P}etwtD@xwRg(-V!Po}Kc)pBb6>-d6XvVr!>)7mx2dJzw;ZN!n4n zgnjiP5-w_!AB*eEZp(c8;=<8chKC&_;=U)ThUbI>b9T+FCZ}b6T_=_of9)*K0lHn#K3JGV_8}<+ZN$U*Ep7dYJh776P&p-MQp(7Ug_}z;g zHTl!h>wMmzaG@hpT8{k#sZg-Z`hYipn(At@J;gck98KW6$p~$Z;CI_A8CPH$&oYVg2RI<$A$k2iBZvTXV?z zvGwBGrw@J}arqs*{eR$_#uK-$&U@gha`$@3-MhQDv`>DzEW%1cdiI;_v)j2(RF_}M zJ-@hZiG;32{$-P6TQ9wd=r8;6Zl#fM@MYsT@i_-{X4~Iyxf@dScGl59=ch%8ica0O z&CJpALH1Rd&lSZyY4cO>xBR=>C+mG>i70FIsrk?EW&TU97tQ>an_? z4(G?}kOLK$#3u{di9RlVx3HibTtZg_Glo!3Qe#3%TukuY>{~3i|ee1hCyK2k&OP?4`(^QxLk}SWo zBQA5PL|}cw|8-M$n&+RLo@aYhXhU<2x1Pr0W$P4fZQa9FI(L;CPxa|5Vb@!3qy+uG z7F#D@opqR%xBt7TsVaxV9s8dSAprq4#SJ@dMjBU6^D&Q@`6PAGbQ!+SxvMSt%v9bl zy1%Eg`1!e4WwYkqedluUVvpvGSFc`4dU@TP7%e7U^1?q*BxdcZuKllq0|E+E<>m;T zJ$trW|94aATGJhOHV4N?-@f)!fMegK(`|0YpDy!DWn<0N{r_(F`y12kQubeSufH$4 zCTaF9R!g@%(~UN5I;Z>V^R%fdxsN_y-9E1@9e?fJ0lOW(TwI-;iE>h|{0TK(WnmG4hR zO%{1QYxQX%@mq>f+t;mE+h;I8*IO6AT&%YLl-k?K zDAo0+wrDI_{4Un}>TZ5!g|gkVyq-(4#QJ>LJO8y4U+v!9TGNQVKPOIna!+-2c>{0Z zr&mt@R~^<{9wQmJ@O=KeWj5dU9fy#BHeOH%#tCb&`a!=xEi`jCM4SU~)ZOn?4 z_AKn{SaUUMqRX8x*(HycPnLapg8jgSnKNhd&yfCEQx`I2=GnLn-&fkCJgGTUx3Twf z;c~wX5mM6bcWy5K_~GH1c?EJ@fU3}%A&Iz!5%bPfjwMyRH z?A*c1ch*HqRxf@Wa{ravtfkg{qUo!}em*?Pn3?(V*fF>5Hs4z}Kh4+AKHjq5=EeJ` zPg7gxS}K@d?6`lvu-w11fBmc`{evu(`m?6KFMOAlo15!=c=;UR_Nn{-$F05Wwaslu zqV;dDy50HTH%qU)$ITVIORs)k$%BU3TfeTA0+cFg;}J%7^H zkmT&odXefs{W~pn4OS|9NAgL{xbkpQ?BtTg=U7duR@~hFWyRd6Rnal)G&q($k=;9| zFflqht82I0nXeZlU+#Tf{BHW2ch&!+Z|u2qBTZ=S`z^B%>mBr4TK)BF-s@{imoD|K zTzaDVqKqh$nfcm`nvC1ub(@gZ+E6Z1uStmDNG7 zq%{10%{Stn89X`9exC%Fg@TbqZJJEu-IPla3)3w2Z>l+%mUfB3BIj6SiSO!w?6)z7 z!Fr|L+av`n7bbn|v0C{jb6R}gqKtzx=Wd9|JMvLPA%1s_y~(Q+THC!&DOVj^k^JUQ z=a-XW@tm(Jmj+$GAz^dEf2KtC)9T<4r*hrbWLkiCEx%~fd&hd&^87Ae=|AT5a&EB3Jul&E>2v-$$*WaD)HJ7kOPh9HC?x!M&5qv= zS^oFJ%5#_QkbbVcy?mCmzWO|x%%2>Vp5;#)h@aMkr~$@W?G zwUhRLi|kU^>QY&lemIS1M^4y{=(*cIbRPR7zMes4hG+Wa4;h`yg*aGjZS&=!>Oj8^w?2ZF7Pk~9=(q^m&P)=t;1MiUyUesAMy_YZu7I#dJR2(%SP~U{Zk%ak-aIEW zr_b;R^G-j8CptY<8LG{kvmdzTKJlHw6DA;Xp!IKq&nkWY_G6C|74^=T9Q`z*KO5Clib?(Tg)mF#J=z}(H&V@|>5AghFI3jV${6Wjai*658YkxcqD3=lb#_Y>s^{ZgR3f?cQ z9POw1S~5AhrFfF}&xrG#n&F@@o55sFV6RhCZKB?_o(0J(oJ|fcUVql-gTtf%UAcve zFMQw#58;vI)R&R1GQLv~VcNZG;%PqBrin%?ZRVZmS1Os{$x-a0JNckOrA{TbD%tyZqwCBE&NGyP`*O7|X#`LFw`A=xHzldX zx-Y)!Zu^wJsdnX=i$P(XulA+79Qw$U=(=1;%IEN5nNZz1a!yr>vpORf&e$%R8F4}W zDQ_T;lw;C$uIXnLx2(P)!1RwPfkS7t;=u*FqDyT%-m+^++Hh>`?-TgPv9c~^RsDt& zi)Hj|+;l~qmiK8+>s&X(Wlh1KL(v{}U#utnko8Q7c=+X4lU;<0!1|S~zxT(@n&o`% z2UpWNiKcZdU!78B&AM>ox`DmJHlBFBsnU82X9gU(A@Jphz?Wm~ALKVT?UQKw7r&|L zgH+V)WBXMc4FsGGe#l2Au9P@*$v(GrDvut2quHStxfu?}Cg?HxUpPFOgXOS&Dyy?0 z%i;eMMSG42^r$#UY*wE5VX5*&1&z~s(8Ix`LjGO`LMuc!HFt@Y%2Gx!~>Fw`UG44q*L&Ts{Y~`h;dS=$b?LmK($XldHsP`Ra{DXw zl}^R`zJ+_J91yrH9H?ZQ`7c%E#qrnC2_2eU8WR^W@YIEbh}e5g>Gw&#+JEBXJ%*m^ z<_82Wiv%k9E;LvWDsX=izh#qk@Pr)2hkI9kI2jaTKEYm-DOKc~Tw5Z5U# zp-K{d0`pI{-*A4FFk!}Ft(D1#9TrxttZPlqkx()GI8jAtzChc~0NG*>S*D;98@#UF zFbFtNqu3`{H<7{l%p#SOI$WJG2ZRnk=v>eda>@N5gS-b1^DnM;7KtP=)!xI49Oi5d z$k^f0c|lXjbeU7Sqx0AJgpNg=d%riiJ(>VDp{r}_&qWCmY$i^sCQ7w)`wuBHw#{($ ze7sRZe$gMtyW0;*v^q2K7Q`uc}J`JAw_qs=?4#6wqH=(py~R(-0Yj5*|U1Cwiy#kk0(F* zzs2-O&l+n!<<+krIplKix9QATtDx4*wz*=%vHKj(XHM*TY_Lh#C;fwf-eGf>AHFPE z6(YjTteyK_wzq`t;}NU6=C=Kg&D;8oU&MhHADVB-yKj@{r;@w`%in$SDxRgzx+hX@_HMlO?h8;t3S9d&TM3~ z@bC#?+eyKNT?d~|aB2B|%46c2xi7w~UOme-&VOStlls4pd+c{qEvksoJD;+AcR=jb zsZHL;_i0>f=<#`Bu<6!Emz(wv#1FHjq&S(c&t0e7Br#zkr>xttNhTjYtke$Ox${yyPm-IC(cEN7jI)*n#JdzyT)V@eaa<1)L`MPTrL!w>y#+w2H z4lx&6iWj}{?Yb#7!Ie{1>}dXWwhLA|Mz7W|e$ZlVXq7VV=#x-M2@KL-@A_(Om3o+C zmaS+c&xu7#?7Gcj4ztWvWA^*Nl72fONw0dY&5Vxg?D-Q+n!M*Hs`+&3u%!eBwYzqz z9AUf_VlN)$%BsfC5EkUB5y;!hvB@iA(k>;1-KzcK6K3y9c<|Nd%a2r*C))e<7fDQT z_1wEhEP`1hhUZtH!)e9yKWw_{H=WWbwRx#M$#v>ehxL9_?e=Qz-|6i0{B!FWK}V2# z{=GV&e@YtU)OJ_dnPS#S+m~5?>NPWFI#--~?V;G@n=MQFSj^9M7@nV)xmEG;G0C?N z$_!3&rdl175&j|7Im7+QtutlTOmdfm**9sfJiKh$n>#w(FJwHDjh|WQq*W_<=v~_M z$!FS}9v2nU^Nmj;WId*--hRZ;Z@H$^Q8E92go>fU>`7KRS-$R@&TiY{b77j{)k&#^ zJv^&s=M_F#v1%D}Y_G?ybB4_j(rlF(xyU$TyjhZrIrICuiiIVX%9#xGpirIb_!Y9skax`07azjMnV3zdCRZA8rbX;^%vA@i-?smunhJK42H&K?d_Op|o zan$p0yxDL|X4j1c3bTW(a=2o9p3E@bq$Bxkj>+a*jiI6{_mj-k8&+(%ag|+1@#^PZ zhc|l`oDZ>JKD}c3#3KzkUN1LfGD~^$wDBZ)y7w%5D0cP3*4Rdgt{#To;6!+)v)aL znwwkmmrg!l!mLuA5VXjG+i}aQAHtXTWoOpS`r7dzz{A00aj8@a>#VEynjO8eo3?0J zNQ$J+KmYjcOriH7cP6b-2&)cjv^_g3dcw^WGCV!TY*(|_ue;;A+}%Jsa890O)^vkq z5;|>qrt{k-9(b^ejbXC?MbQaQ6l_`VBq(X9_J;3V@v$sX#PF6zQr2RQm^JL(D&P0) zeW5ll-Lvz6>O?`;naYu_Nh)2cnT@IuJqs*3SIFh~=laI~Fo?c&CNfR=gkhC0SH&OZ z=A#)4FCP< zK;n&MrtvGLnKm5^Szahn*;DuA?zJ8My4!J<&; zUwt?kt$f+9>&Tpn5EA%vdDd-#Z)^14Jias;u_aFD5V0nfIThSJB6X@uM8CnhjCUo=|TvFOACuI|&5 zIxcQe@laBoRO3-(c7yxUiZ@xUh37>CPJZpk=!?rfz3EEb*34yY;d*JYu6~b1W!x=! zrgLyU4xAI9F>i^4+Z01rG3Q-Hfu*6@`(96ZE8V^8qIKEFcZVD{T-m;GA8*Og0F$&> zO+jUki2(&pQ&_u%11BzvoOYzr>rq6fa7e6Ub?Gj*9D%2YK7^S|h_nP;*GXd0j$8iY zwdnPXo}+6v>TFawZOn8uX~vO22~7hQ$3-fNmo-!agFKRTb{$KZacrxy#~Uv9>5DqP zGks-n{*_gFEu-i78pGq8yLz}}xSKkkvrJi1*eB$ur^l%x9P^KFn|Nq)56AN722R_9qL~g-u6VP1F|sp22l_haG2U z?Bf?j6;GYMs=9hUw(FZ!<@73nwN2fniQSXw{DK)OhAPK4o2);f!kQy{X~v({K-pL> zQ_X^Q<85xqTHh?58BSB>aOiGo=oa#QX!L+*rjSdBBkMHYOdr?Omr4D>Swi0K?=2pD zHZxPmEbTSbW)S8Ud}`SytST}?;;F_IF%O}X9~S4kOE$bxy)mzEUHNRwBPlaqB<(8I z*kf1EzWl^yX4CS;eD}X@HsDhgjXHSX0;7wmus$vy>0$I)TFMDnZNoYvf zdGX5DnQvB}-h9hnq$TIt1*M29j{EK@Eoqv}Fk3{8Q$$y2QOBc6E}wXujWrs(6pIdA zxPMKliX*#8?W>t~)|s@g#hL}H4$A8Yu`j<>&9X=QWvv!+m(%KUR-dL3hXxV zS;i5_@K~~oi>a-!Nohk%$4QL@(U>6dMXx44o5CdAobg&XX3v}19S#C&$4tb%E{Oi^fyYJ4t_Z6rAFE86BG7ro%*<3f77CdB~5Id zO6`IY5+#*!OpoOIC{Rl>l%$#8Ddn`bss%b6o4^7S5A%eN#?#(|B&&^=GR^5DAP3xqg#_`K0ek%{F`wJ&T zEM@Id)F|*(W7YBT?Csm`$v9Jd`PPGsJGs-hd{^*v(dqdodMq&FOpoct8J5xWUVNOU zu;=ts&d>>J-bQ~ElLSol*mTm4m2}OV{W-&?Ai>nwB3Ee{OVkt2$RnInmIm+%TlldV zJFrf74Gh!Jn=@0LjaSrVs+j+V36ht^jPCz^;MlFC*x=ZwSSY7n>9=%sQmnc)-FSWkHR^I+y9k zWkn+6){YIJ};CPGos$q;*k5D=}e?aO#AAttYkoxjyLiuBq}A z(NR0L<>--e{p~H6X*fMB0)Jy4ZeBSYW`j+QdWPN~!nF=nDys>lstt>FDnA zO+2yv)}|M`!y_I!TsqFNM?pZy_q5Cm-j6b_#X_x%HS~p~+&}&cu-v)kYtSOMGz-27 zOXQ|sOV$$m^R-tu`On*VyU&&uoVa|g;Qrp%8huAZWs(gZsLQ2`PAGc7b&ylyY?I}} zU;B34v(4LTapCD4t!DW~?$ob$i?AActWe;vb6?%|C(f)TMy3IW)Pw56wvf5^$5qzOK-or zdEAhg&oj%1^X=@#H(k>AY+q-1^f6<^iFm66ev4fCbs%^hxgq$of_}uI~>n-wn|9~ z%nxsgE*IU&UEQ>^egD5Mtv$QSq;55FXUL04#BgaY$%@@>IQ5ph*PZ;m=cAWA-uCyu zh1=C_k-r@R_x}AKFhSHX@%R6SY^HlWU;Y37|F>yhq%;(&XlW@8Ji- z=bL?Rsu$-mKg)VQiqqNHr)~aK`_tP(_9Pi>$z1p^@3?0Ey!byQ(`r-t@20*!Ub8DJ z_H^%T^EA6l&*!!l{Z2gZ!I*eAK07Nd2B8*C*N;+?#PV^Tf8e+w-zMJ0(89 zzM1{=`HgBzOY81@dUbPkRPW!eaKC@PIhIfEOvs%3=-hm}fA=T<{_|Lf-%tL{7rVf3 zUoZcT`;_~4-E@~VH#RJM zopsUf<)M$dv(5RX_GbC+F1;^*I8Jxxg@5zJ-W^@LTbsSg)_?BXy=istn{U_OtN(v~ zALIMjo&6tU?wcmwOkeyy^S0L4qEFXnzV7~C`ufVkzjxndUOs40@&C{&Uj2PhmpCy;HkA&+eY| z{L5c2%iFl`yLEf-rpHq+J(_*>zJ9IY@0sOQ;&*R9yS0yZ-X~vXt@H9$I_vT*k8gW) z^ycR3eP1$mmpJ~&yK-lZ%i*Pc_R*)+`8~4s|NLd_lzFH2`n~#{t$X$d?|!w%^#9JP ztH<|ghTB9Me)71Uw_96F>s!a%XM4W=dL4TB@#FXLWxpQ#+vE(Y*t6g8(`P;c&@1Dwwv3!4b)2rpd&;LmOe)@m? z$((yTtG_p~a_`!fojT*w{LP2kcqEgIX69^Tj?bTU=l{Pe#?sSuB8`%d^{}2~b$b5r zaGULi2~{`Rd1oJ!|NCzCtXZ?1+hsl*%hx@bcyju=6zLnw*Q-dCy}7mZ?Sb}l54+iw zch<_?+nj#>&(F`dx98XID7w`6^!WcD?;D?9KVyB3ci)A(xe{-TYp4A?IAzYvT<>z* zEzABk%(kBXOxL%5+mib`Lk|=@ugaILeqYj3SYKN5dh_hGb7vm>w3m_gFPr$W_4W1j z>`Lihm3EzpeQ#NKZ1=*`cf#7_SFOGr6fEkxGw5?^w6m92SJ1~NcP7oXF1Op7_xN`H z{=GRj&7bpy#q6uO`TTRGIggYlt!ySDJliz&tI|7L9ZawI%H z)auu_*VpsE-tcYbm)mmt?V~rX`Fp>9x2@i{_e-#XKt;i|`QhtoPQCuSVAH0#j(>Ie z4)2oN{dIl*c6p10>iQ!yCMt*5e7q8WOl8Tk(5dfs{0qE){M?&G`IT&?@4q=rS2XWw zdt3a?c1zl(r^{ZRnE&jnx32W=*RTG5GPYkkE-k1&1HY_y&u~i zS}J_ql6jfy|3;Mu-+y;^pPyru>gC^GZCBcwyfpXd{M>UJlkZ3E`Eh#k?)Y8lb54Ja zeEO`fJN=U~7dQ8Ezq>oCwx-|Nkso$L``^!}(~B=Z?v-7Z7da`|@c5T+4-X%%{vMZl zTEaBzN{3+nn%LLUwpArnzqq-@p7cv^&v8k5c{F&lP~3@?C(fUb|K)P?V>3JdySulq zG4w=Ls_eZnXQE?CouOUwyoWnmgcsL^@7Q6r_|1z&+0Qn6ZVo%2X$HBaTd*eWvi7;<^Jc_c&i#15xTq*fk}oH2OUA|1`t}iF-#-8Q z`+K?ne7l08-oy_}JSQ6&8Tl-eTsH6cHk-Zo=3IaOLv@q)?@D!VZ*PB9og1^azv^BS zmpxrSp6}4#z2B>BzuidYQYzud6; z`stK_O}|Cb#f?rxctogX{b@^$C@b7y9j);!)HKBf5Xqx);B zl3DNmeG`zMbZFjr`~QCg&TUFxy;_}T!hQL~A1;yA9}YBji|dEk1^@e3Zf$>S%gYB9 zpJHz>mbH@LdB5kg-}c|!-rm)3=50wlV^inicI@5dYVjU9(^W+m*ZQvh#_|6AJlo%k z4L#d7|6>&Q-=j2jn%>3GZKapTD=`(~CQ?p`oF&b3e|udb7haKQ<=seSKKzJ@$X| zw$A^5!#MxJt$(bUvFFa$l-&E4|F_ZM^tH9`e?Pgh^0-);-Nv0q@-~01vCykL)o^tr63A)~5AGd8C&o zcTZazWBDZZ_S4nj+@h*4PksEj+Z|7GP z-#)~C=9s?!zI*>mZuTs8@BjDXasSh&PmlN8TiRbX%)0Vs@^uFT#*&cm@bVsG{}~&! z5?ziSY`v?x>gk0qU&4&H7ymzgZ{~r>z&V^XE{`9v39lD8c-H9R{8I(KvUg)cnYtF} zR7}v}R*_2#s#P@LX^~u~v3gSIBDW6qgGUseZQrHcG(%z0$0N+XJ`BC;?t2a@XB3#S znVt&!ZoO)E{Qh@!`S;Gu2zcxNV&?JH|MtCFzwg(o)%*Wn-}Tu&UFQ2y{raCvZtm`j zF-!Zr%y)J8TB%Qe`OgU-Ub!^&!Y1}>KC|v$xUiw>>nl<1u%6h3U*B41Ih=p}-g49N zrORdh-ab3qf7bVUbKST-Kc~8jCG|XyFF5!?PY@kKgb&e{os;!8>1H zm!JQ&BLDO)$$XvIeKnhVuRZ%iw|9NLQOZ+h_nv(j-;B-A z?auvq=k~s@*L%DDYF3rs7Oys`t@)kFy^W{xvHp4AeRKDGU9Qc4f5+oP%X;r#yKi2- z|K09*xtjMezYYY-ckzF#GyDI^yFV_p{LiEJdVkL)s@qyTu0L1*XQeRKfI6rpIdO`$p5=X|9`#9FH&#zF3tbi)za*5i~s(; z_w(_~#m9WDKg}&IoZ#@-rU^%@~^bnp8xN<{N<}^j&C}D>s6WlzS8XNa>wItxBJc5^rYwQ z+4i?Pvz_M)D!2Pae>-tc{#(t*IobdJY;V3cIeNK`McH4WhrbT&2tO`gcr>#7z2)nh z{p;`L=f8gQKju%w_Hy=|*)i7(E-tXN-4*-gvi!R_o1fpwySBr*+Q;tC0(JX)zwiED zc7EoTw}-3$KfN0GK<)31ujcPWu%nw(LtIj|7Td_OiviIld-(Fm=`Py~-{*TVD7y8xj++F={QGU*h9gX{Uy`GtW zzIOe?b8q(^Xu5tc%DDX5%Xin_7C-;@>eGDR{qgV3eoZi6{_j=vA9w%1ucuVoRjsMM zd-^q7{_GE@ZWZ(GdAj#_Se{JTXXU)p?d$h{c%X0Ix3;?M!lCG}wQ_ZzAD%b=DyR6w z?r)RhYP;CYd%nN=eURzS>raKJ^X0yFpRT%F|8h~O^T{UZ_^RBu{x7e*uKO2q`EvN$ zJ2hXGGoI%Es`wJdoBA@i*LH_+sda0e_yw)e%?7d@=H{co76yEc~Ib%U~`1&374~sLdn=-$X-uX@@_|K|)mUT~`?SEsR^YKBh@LSd5_pfSire81r zeQ6iJ+QNx{4%W}!@%>n0IA6u;hsUNDeQ`MaOaAKzp7bjozTpE);=v*-W#IP2x}cmwpCE_8h9HER(p$!~e3$+|rjs}P- zG$pOz5^yvOVeMETv5LthfG3nuNuzBQ!$K{G6hF~3wPWyyl*JOdIQ&7Yis&)$3 zVl9U$T_5|S85h+YY%o-xU-_zj%E9mIQ;IUek2W01o~D0$LgQ)Kbz3LQymRkXn*Y3c z4mteOGgk<3yjNYYUCmT()n|c!I>l$(PEB|}^;+tSiYL`Ot~qmlvW?la(Cdly#K+Al zef>Z3+q-mI>=&MAkWUX=qw6D$p|9RiW8Cdlp|V zw>96zBllSzhUCtCBCuD62@m&YaPhByovYh1zoNkjEn|%=Nxi# zpIx#_q~@8A-TH*{Uscs)wbltHIy29TI;QkL=!s#>55eAqSG(4^=CtH;XYTrOQ`_D_ z_S7fkIcgP;XHA-LddC|Vhw78zk6v78SoUdCcP&$^^;L=MmaKfOM>bA8IB{L1)dk(_ z3stVG&pmcp@3OjQ#S5;GiF?Hkx3l@Mh3iDMx1Z$bbiH4eY800ERIakb<_^Dsr0~Wk z>?c0D=l;0RaB@Z0)cPlZrDq3kx#a9$N94%Q~!J zYmGNFku%v=;Zkx>V71agCbj9VYm9!Cs=d|uIDcg_?@P6#YR@B#ea|-Zu`c{!d&KeW zq$%2h(YuPmg48|rRz+<2CObJ>DeT=x7j=W_jVzgstK@yQ%-^XKzgK*D?1}SJ*8l9j zZ1gqi&t;>jzJD&STfFep^v8)mr$4rqW6_D9(Ec=j!urJcDSKy6%3=2?5J)eSxUr#> z>F6(>K(~nnVloA>6@m#$4UDGEe9DZhGJ4EG6QfT*+U$FF>8yhm3(ph^xb=1BviN4* zxZ%LY%O%;wc)Z$J@isS|y+d!ip@{uX$ID!w8&2N{+i}LN_0kItED; zPrzk~$W1||s*vtCCr)&e5SA{^V^XV_v|G%%eb)rs$trAEjKf}NLpx9q|>iy zE4++WpJKeOb58P#L{TT3rSdZ0l8%Oz%BPANSe>#KW_dhmT4gMo$L;%iv)a2UuV#7q zYrOK(Il+5?;YrNpl@9~%ZqPX7yg&Qstn2Z)Hxt8emlydhyVx=5)XHgY%BM>9 zacGDvV%GdJ;Y@;nEd!h8zRnlsGMpw6tKK#<86J7Ycj-v&gODEvX<5?>vbUvX-npc3 zF{h-YkM&W!YVoF6p?#{qTaWk4zKu0YJ1fGkcCsLldFQUgF7Fq!PHt%1sJ7-}s+6eQ zfonR}%XM`!ZZmH5P`ahIdxq=0V-Gg%opjDpJBE+*q@-!*OCuJI<6>JR)GkavSn?%i z%b`n_>7p(62Q^g9O|lfz)*UU_endFQD29*e(T)R2QfYd{mK!H7yJ=O#Au4ZZ{ah>3 zif3(;ho-=Vlx4F8Hv&Q+Z|BW#BZt5tJH=C)iz_JsHK?(NGyJZn1^^WaGpNYc?q zl&5ynEw5cOgboH=3%j&2%Qd}iLALN42Ii#eZrctTZkH8wi)d@qnb55eVHLLam4oKS zt6WEP4CI^q%;k1Zepoc^pst?}kEWQoVBe(M5f-&NZ4BEu&R5?q`4+|67^N`plugs6 zqdJecPW3Oi!aBJmS*^(MiVjmFYsvMif{X4bt<&w1|6Idy%!74rP-eu`mEo6;eu?&Z zH}%TW(2qrnYA*|jy)T*@VRayBTf&r=M;gt<%r)MJXE@0OO?J=$dz z&NKH!t(((zSQNq~*6O7>cfZ=U!#==AZ)d`((h2h0I=|i8p0d)jKh0pRcZL zx9xMBweq&Z8F{|q*c_`nn;JjJ%uqUgDK`K4(fs$t7tB4cg*93|yx0Bk*W2AQR^17d zUU&bwNN}j2(ki=3FU6w^&IlB0mhfu*Q&2muq-C7brhB9`*5_d0?C#^gS#vg7{qeGn zh>#S$I+O3{t0PM~l%GYhUEHV{w(w2?@ALqkMP18Y-rQNUCQ5GOv}<*CVYRv$_4EDh z!i3gpabCHSnrCt*bk&o*Yg4|7w`r9=yvxHl$Li4T2$oC^#^c9!rCF#gQS!S!oi4os9%WvWKYe_EUK8LT(e9E-M za*qmE7H2Z=ZP|Y(o@f?E^)j`*(ld}Xj1dr0ob%ykQfR)i^bR$*WzLJZrcB-MV)W8# zv1LGN3HME3wu?urZi#H1$u_}vVdsQSPFA*Ut^sZ`r=?dU3U>1=d+oM!6`$#$>bLr3 zYV(X6M=uoE&d@qMVTM$h@8Lw2;u8*?Gfn*G+m&AH@j9!rN2Vt9P!MT%P$PRs2l%T%MGqX%@XZd}r#i zF1{J`cA?6tH|i2+>rT0OPO0=Zn6-V%+({an`w~oEYcQ(@s&OC8*c4E$+1Ysgw20=% z&rV)CPyatW_w;{fgZrAbi~iW34fwO)&r;<7`g_X_{I{`1cKuuaqQ2|j_V<_mcl9l( z`X(RtX8#_JuD{Ro4|)o&O8d{Mwqi-LeByt_#ez=#f7!KOu^#;w{Ko$1KklxDH|iY? zMSkmRv?cv#JsR+4{{o4wzv3d!8~-;YX?&ZX^k4H^ybBLV`F=g)K&(0}aO;m>Y0&jI zTSUbCvh{Qy?;4h=)2B*HWL|B)sA?*Gh{?_FG|yk|xT31;;>RX= zXXo6TCHW`Z^Kz2or8!p$(y|h^Jam}4Z`0cJHuh;-;wpF*7QPi=Gx!wQ!6@-_jm@p~ z!k0aidJe2RwN3XC$KT6(U#wmFw1s5DUHY`07PYJ>SvM!lqpU#Zx)a-`4c#+RrLVZ| zN;PIOee|mBxcR5spW|cBP4k~x5E!#SLg6yYnZ!rtR_yRz?HP^Lhc32W-}gx><@Ah|`DJO=XL$qviB4VDyy=%pPUwP_ zn#?VJ_pJ4tUnjB%9b2+F;ofh(kAF1(n^c)v7D&H-dOKrhdhosv%}Kp|p5_MwBzf;V zds*CP7kH$GmG_sQ;HKt-UxRDnr)J0fxw60B*@oq${a5z|ubU^|+4s+vH&%OEW7WZ( zxr$s_BCC!qVNVP^r7`*Nte2g$M1{27)Gpb3!E7MrEuw=gMEZ^rQ^aWEV{VBWJD#m)2)< zp6}lrdp5SaCs8AQjmYvk@sv$d*8fi4v1O|O!{U8g_P#on$udvya-Q|^td;|T7Ft`| zrZ7q~=7d!8ew@qI=Gn6Bq3lGHH3rX=cBV5cuY7W?T|ubw?x#LEl}A!ZDW}fmcx>4) z`Ssbfdq$yao<}FiIW(Vsa|_ze9duz@KpDCv!Cd6^^8I91{}^b4t^f(02X9B6(0@N_k@7dD%Rh?~|`f z8p=Mj?e==nY_Mm+7U4qOU0uGlNrc4rlx58wrKGB_^Wn^<(@1u zeYdg7=XR;dDnYju*$l#kYb^V^{~mW;wD;C6p#^f2!~}C9PHbU#7PDPI;fQO`i$fjC zX#os|q$=BgIX`oW>$qj&!2w2sdcZaY2Na-{ootyE#uWyzY1oC9j+DMvC-y|KNV zIXiSsp72GlycGvtv~f+5)_SyM^Rz!jyItp8)4HL%vttfN&ypAF=`xnZE0h-TuphHD zsJx%yBQtl&6R|!E-`+DpYc%~DH_cVDofXKjRBL|IUWrFH!u)rhNQp^{eDdF(PC%k<%`&d*--<=&o%Y)|3?3;X*%PVTizm@|v)e}8^ z-$iv^zEQ96m$freu=I?OZ(c~}Wr>+jJk(Vc=ij;7crjL1qr5bsB%EC+bM}%uues(j zJX5)(;d!-_<1Kq}P-f4TKiXVdZ5{>Yhs-kQeY3+U@*%66_MQV@lq8QX=oaSlVeskN zn7Na|`0&GB$70$$cStGAf8_t{YP5>G_)@aL-6K4idI@t1PrJowxVe5{J;KQzvH8$h zvDbDfy1i4cI;$Nk{OIw1P8VxX#K}L(3kht%=uV+c&zunEs_ZvP* zxBk3SFI|vvbZ($y;mm!s2X*Hw~vQ7fif!z`2okkBOpk_e__G*$vvdH;y(; zYX9t!$Ghm!wFI}HpWVV=t(kD=x3hzt!nuNI8Ry^i-`27CbZL2t^CaDF;+nr}4Res0 z#bpJPneX@R5qO%l%=O(t>8U4$Z!KGW%kIUq3`ZH!Sa*@Rr7|BFuFZ6dnNm6-_5gEu z2n(Bl>+P=&>pn8D#K`uS-Z`;Gc~#t9R@TSnV)C);wO7Zx?d$0f7p!+tQPjG_)7&{N z`Cyoa=QO<+t5yX2im&}~Tj=HTHyhLbMXGNUpSHn+P&G1Jr@_Oeediw;!(P%Rf>4fm0c?dXnA*?RbM z$)X>fI*ndWa^-AQI^+&buy)(z|MpVK{5+BaC%XKVeC}X?~v{)=27X; z1nz=z$wV=y;MNC5Gt$4Bz2L|Td-74hCOBdB6nooK0UQ@k=Koy0|MTU=0zvB*S~?oE zRV47NsVEbh>n3tHfX8v!24>A^x1Y>=A+)q0+UIVXSC8xSkCHwz!V|uiRnGI75;&`L zU&KoHf+IOIEHCr#+E&&jTVVfQ^wbVP=lO@(g*bZ(Pph8Q-P7WG@AdO{bzzb#R=0Qg(;{rlJE5UOxP;zM)%%l&3T zyZQJ}2{j!(nPR6R=wH0P)pUiynOP?uzsWwD z(yD3^9kG||@EtvcH#tWiv$qy}j4hq$V7^MaQ>92@+QLHJWf~YEw@H%N#|Dd0*-5MwTnCo}$N5RJx^^EgoJ-M;y)C0Ys;K1C- z>#Cgsk~%e7x9?qcN!)knmw4XEF0B{aQX21{(7C#>iCKh$Z-$9ja_2wShqc@-Cp#u} zy9@BnQ$NY9&@n|&HNRcq)9l;sE%W7%cIfjdcWe;kPwZAVu~t5z*u`aa?ON{5+K@F% zg?A)&DZO5`_QVz5<*HJSAH@R9+}3h*-7XZK)9}}Y?bhAGlwgMK!2vS2MH9=X@5?DT zdL(i2Y4tvNtF)X+8Cs4x{S`Oj-mFU9zWNFGv?KaDY!ievTvC^~Obz@aul|Sgm8z=v z-YI>l0sl2Pf3Y9*lKAwe<(K=zul$FqR8-f5|8R0?S|P_%%w*aB^z$nYrVay}LIw4} zK;{*H^j0m}u_ETE=*d54e!s{|y1hy@n=40gmr|2fxbLDy`}M(huUhFHul~H0C+Er3 z$Z7FD=K6PU-+q0sMCS7a4yJY$7MW+o&#KNlzLs5dcTUdi&^clbG7~E-l*&b}_Dzd> zE3;UnxT!(;;-nUyq~O_m_dR;J`cPZ(!_O_Vazn5EJl^9m>#L7IgNh)-rP&(0j|kO? z2CAmHe0bD&>4InQ8a7vsemBKEZw^J=+q0)$Ncx)Br&fX{xZqg_@NoiJ8Ml!qnjkEgaPyOU$Nq(eyFzP(>I-Vb2U%Xw< z|I6{-Uh{s@OFN&5IJ%v(e=)asF}ZTm<`72a%PbX}6U>NKb+x|jD)cEzT3SF+-G28B(>{!Fm@qLhgDn@uTKL|bQ*`ihZA#Za@b&p-(IA(M%pDd}l68)RuAHG6 zZe1ENQHhEBaEGYe$B&;Bq**a(cHtjYBz)AsM|ICV)tD_Udq?8i(;auZM7Ks@FgHyhzQnQ+T7Gre|$yJ`$zu3RhKJT8b>yzH96VY+$eo5CAQ`~oP-=9<#mHqq2Sr)b4}jU|Sy8zg<1XUoPulyL3o_Ig&3i3R4KgiW*qL<~>XCGJ3nsqQ>rbk3e z`JqorPCMFTv!nk>oY-Y05;;HVb!h3r<8CakUupGfW(Id?Ff9z}TKS^e(I?1Qc9pee zP~Gvni8=?CZkq6gdxiWV(aoB#p9+Q8x$}vgJ!FtA%g|-iIqkSo^efSupF)(=PuINC zI%*UqQDn_BZDP=N~wmvoRy`Xxva7K&B^BvnysPlX_ePMIx^BR-I994%5 zY*{N){syraC(dxHR$Xn8{ph*l-J{JDMGksMh@EqKdcI34@a&fJ&vRK;t%$nXA$nm- zeSCw?8}s06zOjZYRs?Oh<>Gl+H%r*9)OX3UMTa8;{EXf%)zYdrO-g(+GqtZrJZ-EOY&8Xqi5zQ#7aJO7QdK7bYKnD?3N@c5=$T4T=p* zx#ZxyHSxOIw$xOPX$L3lmlx@OdTHef&8u?f1#TrJW@yhlz^(V-`XTKEhhUQ z^2D~>&c1gqc0D-J#i`bnCDpdT*m=2J729Xo;L6K6zDkoc1Eh6~y$+~c)>$QRJ4q|h zw9{DojkNR^O?Sooq;ME%&&457O*Iy>0! z#Aq~|1n1wc&=jfc3j9#ryZH%sL;DqGtk>j_k+Ns*E^%`@z-a*2r2OJ(eO^|=rPoM^ zo=P)LOw*ETkq8N7of*~TC3;(>g`f4ov+F8i93sWr7c=?JP00;h>cV(%&C?wYAhpv4Z5(Qn zOCPMxKC_7>a=U0i?5Z`hS9$41>hHY4JLkzMtDEOfW!JiB&uqEdU=b`S=&iOif9GV) zI|l`}rc9D4zWra$NiOl}z2oxY4xV={?1GlPO}(5hsRU3j9vFsJA^) ze8Gc#R!sAJ{JtqLwgss0SRN9TOYu@$tk|ZQ#KW9tmtv&4IdsB2$qi{!Kbo%Q$qtL$ zp}poc*V7HxpX|L8VRvfMmbTQ0-JH(zGM+4$(`8bbcJ!3bw1Al>HyBO+ICUnEwy|XV z%#%eGD-?odf-m?S4Ul2qBNi=Q;(Nu!&Bcw^^NZ29h-2+s&m?M9wrL2=4RRFBbrxgY zkv?l#kmn>3CGMC*_fq!eCGEJSe7?eC*RpdTOYi2Xr`8p_sIa%)aZ(mIyk*VoUDM5u zhNTw@FFNBoamJ-J$t^o)HLg7AP-o#a#!QplrDbB;@>DQ@hOXcqWm#sd!C8%6365xx4iirBXd?z z^G0Y7*BOOnD{q}C%kdRYy&B+hoSW%zjpUWMnorJRv-IEJ+9SN+hl#H4Gq&N#THG8~e z#bHbp_Zn9Hd}l$+i6zB zr7poz8+(agq&@ZOt+S7L4cm|@wIL;PLs`)NQw^!+ zt*SdK98$lk^s&{)uB{C8e4?MlG}-IVuPMJ?sOx=PccMGhOY-Ysrb?E>?hCn#*5BfY zx_qbnyNtN_@4A}5AL8Dv-Q2XSocs6Aq}3}@uU4Hkv~6F_lXC1%dEmsB8{aQH{XA&U1fXy>dmbw_fMDnVgDt?V17G3Gd3hB zQ0Q8v=(=q$*yaCgT>Q_l-s0!_>%E=3b_>hgE>4+Lue3?xXZ!iRDR1SU{;$~cPQrTE zqU4X3>sFM@)Or5Yf4GI zU$%Dci~Z?`_vcrv`*}9~%4|Nn@&cd7SN7fiZ6|qWTI}8I=*`}TKO`Zr#-|{#9THj745B>ivJg<-Zoj(!mV44t!=+c_}(pPWvx@S_jmu7 ztNqsh{b$YH@=B@1hmGIUVyr(seqY=E;@QN<@AjVA^WfTavD2%iw7!@9d-*eXzTVr? z`kRl;!~fqt_5Am{{Vy+nJ$<@t&i$xuKdvZ-7F(Y;e%sAq&-Z-GbAOgSoqTq-`z76Y{X0evK1(x4zv}XOufu3{YwMdgZ29ZIWzBs4 z`RDF^fe$~=Exe^}TeELbm$?3ypXY!5d#$@UD?6M2u5C)z?fHM6=ts-Vyk7Ba!8OOT z(|hgy|M}d`EB(yE@A662<=eJxi>v?p)mJq4o&Dq9uH!k!E0=xT{QA1y&ga+u{$9RD z_Eq)UDZAOXeLcHQ^7h`|{0XxPR!!b-vFGn6PT^InR{y?NmvE?sGym<4!j}!jwNKR# zKJV9!{q^zR-*VG=FRQo4pWfqs>esio(mZU}^*-|M$}IT&|EhV-x4nf`g@qpvwQ_SR zuHJ25@c*y>)_3`tnU=4cwCC-}a`k+FuRO18+7!S4zdF`xoa&LhU$(p8)x5pcUrqo2 zy*KN6yNTZKKPM(`&A#rpa^1e7pIiC$Vs>O+z4r67wf*<&jhFv_zxws{+x7i#WbJBx zypF#0GcM-)ReO1<@|R23%hu$deY?E0`uXl<<^Mk)tJm7S?deH%_Io>4-*sNhe(g<7 z;^A8R_csfScYvV4ywk|us zS+?!(lH=j)_x=4A+Rpd?{3-<=QM{l4ndsl=yGW6xPG zUy^Y`e!G6eh6mFui{;|C<@A0!%WHmTL)C*{{MpZ@y^p&5<7W7EnLke^mxr<1SFHPa z+phL^+}-D0FE5AZ@BMmW&h@TuTOxmW%ubizv%!#Ixr9~8i>K4$?J_QK_xDyT$iBXA zvG}TX`&-u@&$%B{cr`S3SGoLS`)1Fe=lxwrmbbf4ZMwRQWe>#uu7*9KeN|2WC@ zn2pT?zW=JCqU!Yq$v?lI-}m{=x4zBd=l(6r`1Ow8K4weJ&x3ob!_De{Kjr#7^?-H# ztqpm1cjewbGD+z10c&mb+{z!_hugRBeYdYq#>(XTy4`V7e@~xZdenRRzw2Ahe}8*t z=jU$!`?J2LzFtyqxjVlw@ZveiWHtYJF`--EbZYy}t-V~SUsHZJ|G9o-QlEUi{B85> z%g1`Xk4>Ak{?6Wi4{NKxeR*?p^PWXXN6s9)@4ISUp52diVS#}cuYQTGI%Rw}e;&_v zo{C3Xd!?_hiK~6tA-KEz?XCI;2OeJTs`XB<_ha9++=hN=|@_6!IZ)b${L-i?iq+m=UF>#ww^{Vjb>Hs4~gS^nMUYu=dt z`~H@Fjn&&m!KF+4%U*t3KELc{)u-EUpWXR?;AQCK?PZC@tLwLZ{eSbfP=VI=ZU6ly zvuTR(rntLn9iGP?+$^xrNM+`&!<)C>%sFh<-X=VAvXP6C$pn>|Mn?h_1y4pSTXg2L z&F^b&bBn6(zuxn|e(!zD=hpt=)6*kf$7TP$W^4C5@_SHsLY&o#<7dz6s)&3Q&O3VV zu)2DCnTyMw`Y5TT$sw2C#1|y2&A%lUQ|Oxdbk_{-=H{4o??0bwFR6Ugx?`=keVbRR zzqLS_n8mg9X&bJ}wJ3agdGdIt8?)7-qtom2%nT$>%-Rx?DG;&gJHv~$^Y+!bx5Run zH#d9oWW(iiD^!r)4zwubi-K(oxw`}FsPU>BhTy(@zKey*wXkTy7o7c7bT`yPMW__|?HpATh z`x?LWj{8bi7|cEE+tHU>S$K7dw%fMV-t`qX&QAUNLh-6qYT~+9S+>aM=Cfzk+_4Gm=rKC|rJGlBIF6$LG7UYumz z?mK&lNUiqztbdD^F3n2*d~eC7j6cfyvxAHRf+WrJ{WLUh&Yl$)e|EK*g+$lpx7&gb z6`WYb#1Uum)O*L76DJxm+g~qOb@|Daj^BKyzdo+HEN6b+ z_VVdjHPh|~{rk7F;*H_*xt3RYzPxhajAO0T_>krL!Sw5?AJUy>u_f8rYo|Wy_V;c( z{jTVK6Zhlkg)b`pZ`r%nXJT&VR-vUjYDSy3MC{pirK#$}&fMfxA6Cx$<;=>eoVq@E z&a&e@J0xcIyR8iku~;|n!0m%?+ix`=?5V7b&OaX|AIGhcbp7=7z281O^p=)haQi%%7qs%?wd99B;#yze(pJQ zd7YcgHSG(EW^T;N{%vUy@oL)Pzbjf;E;pU#FA@68cVc$js&IR~Rm&DESh6VS&y}@J zbFND**AM0RRq$fMzQYTb>eprUXXRw8zrA61^8DNN3uCYT;LD4WC}@n{@pS^P`h#5| z$K>)F<&F(}VK(KIYEbe)W9f zq=#Aztm~dWH~+}yx8=?T+t#w)w->^u@3D>9)PC`*YDjc-{zsvXn_o_Ue*S&hhP(S~ zC(G$PuIQhezGQa&Dzn_8k}HOmkvy(nUrFGA$(t6SH8Je`{@D{_5p<7u0F*Mf{bK9W<7QJEViW^7rxeZ`Ai6Arn)4%#i* zz2%z4-DnP$gWJ>{oL&6l?`tS8Zix@m@6_0Do;&}tXmoylu%k#?gMXOfT<(;%MJlEL<^R@c|?29`R}>May+*`St$}vD$C1v304@nf+Sv9LLH_OF{2Zi}tIPh;39u->`*oNMli z)!oVI%a^>5`P|6+#WQwqyhLx_s-Egz1%5w2yT|uq-Zt44s-H8_P;@-IDPH1XSoOxW zPuq^XoqcJh*)rjNot85<7t2ic=<91NjNSA7J^KOwFNONDR#_YBYJaB0?}AV*idh*{1^d7B{Na_BOOLcMy>ji^fpzbqUd~)S`A%I-`1Kb@qH}WpZJH8td!^#r zIZXdeIHa=j%HFQfy6CxCrhYo}i>yB;M_wxFZg(lnd2_b-x$&CJzVl)FJL8-ez5SwN zB6-~;$7B0uj$Kh7S7`2E)ww^Q@NL-HJA0npF0V*VPJSQFY`LtM*@6dukJ#Djc}+a1FZ<+9+0KPFYWX1#O~0q*FFGlPP)QJ-yees) z;=|zT*WayTJ9#)H>i+F{cJ3kD!cy&qWh{^WH*Qi_e3a8Q*EKtE!-mr(xAs->tqeW2 z%5Ua1wO41B%(}k4;?1Y{o30`%(H23?K+d)AM_s;oMtfo{VjLtbn*S|PdDZo+&KQP-@4)H&Ajc? z^wl&-n?xwofFefH@v@*TX%L|b&lU}tm&Chn{7XLo(mJtFQX^Znh$S{csuEq`_faDcl5e-4kR@H z`W+j;_fyx^Zy_J*VyAx!ax|OzJ@HX*&zG0JG5osocL}}u#JYZOt@MY_3)O8FIX-K? zxcjxR-aT*s`<@DK92Fidp4OmO*r+FKX?N?N)}oG7*HBUG?9216S}SjU(j@b{efN!R zEi#5LBVKMZdn{Z3@ZPQC!v6PqY-i8wx_Vjs_2y^gIQ%YEtP zO)Gfi8?R4cIAyl)^v9xT>1uc0;Q2|j6izLB^>X6vimD~&^i`kk^9=P$?A>wtOe^=V zY8`u%`&LV;-H)z6^W@Wy%Ee1gY=0}NvF0V`j;G&VI(%7F>&|jREdORr;n}SQnzv6r zdfjd}qiSbs{H`fqUIgkYY_1jvUZOtl-5V2&3q~R`Hg6T9TbXVCEL2d|>$^YMeXD#% z*@C~zRLgqq-FdyGj#upN?=yQpKRo>L$D0lDs}5zlE1nXy-W`zHUi3PKU#j8FzbHn} zT`z<4_0tMp%znFa&pl3&Gxfnnycx?h3xOp6b0- zi?jOW>(D0#Q}g&&tVw!x{Ych#macU^zH_^*atGL@C59FBk@;}oI zu=#mn=kzJ5r`v=IUI@GSJS*rq#<3x3&z|-t&h08LQIFThBr?m)ejfTOq$@qu*Gc&9 zK}S!;{>5P*A1d0Nzti+w$xF+%Re!DkpXYa5?w8V!_15)$tDQ6_>9fxIpOJZY-HUAm zOl1BZ6jl$KuERFns^IU#gU-9}t8Jb7-Ly2NKQLTUCe&)pS?j>V5wm}&nP{H;@~3D& zkMq&R;YEJ$-l$nf$m|Q0RC|5p@{HN*)$^>c?KfswzWevoYa#}2PB+)B%NDI&c|FyM zkGuG^hxzQQkG5|2y>1#kEzimF`&YK5x73qzEGF4i25_;@*G_l)$|SxYT>#YDd?rlO^kt`)@I<&B>p2(#BRz&(`wa#t#LT z);!+5deXO^+_$lIcJoWMr_Cza!CY@;b&TIaWLA{dtn&OjdvBjl-#pLKp_lVwsHJFZ z8Sms3H7l6C_e%(;pXv|FSXp1QxZn9}=iEnmrGl0QobtV&b}USFp7Z^N;)ed^h}$z9qHAKuKmewlk^80(Z14X4TvSl>x5e_|DIDSGzRzrj*-j4R9{u3xd7 z$>@JUc~XCK`F+*9SB^eg*mvAfqhzhcmIogWUYsyza{hg*{rSoUpKkb@-@i~6U?y-u zF!c8B@ShJpiznJ~9Y`ozbGGcAh1lbFaq*Jh4IUqh^=j!bG+dZ^DzGRbIIiyIzHsTX z`_HDoeRF^1@fB;=ERp;ucXj>hb=*1&O!`bbY+eShaG&?l?%C77MQfhAY4P_n1?)TU zQMcfUb(u?E=c+k#R<*Ge-Z=cn@8X2`yvK`sYP3p9SKa?yqwv1x1#^63&I23%Yu7%7 zslVBDf7i}m=O(M)I(&G}a@BWk>vxN9PhRb_d%^9FTT4GUbhd5j`I9^=gWD#)cIx)& z+1}i@fAfZSA99s(JM+eK$*+{jcedx>zIsI{J9{?!%)YbVa~G%y`5pf) zf9L6|U)$E}=S)5GmVM8G%~yRzw{7(EC@`9K)Nt3;^)q^&Wo7f6P!bSo*_gR~tG`J3 zZG(r_eAlO66<>U@#_aNBo70zKD@EgPT))^;Hlt+kQ#FCKGnXB5G}Nwz1{f?;e`jE; zxn1?i)mgeK*G;8v`a~T+?v(yixn_>H@|AG?&mvari<5)%&F%Rvihf;p$5OC1n8&P~yFEWPtDb*bg~SNgH< z>L&%RQ%>1DD%Ua8QzEA!dNPbzVx3@G&#q934i(N~f2L)aF`{zpEv}1j| zZzLr>d^{d~PKkMR$)-%_YskxebF_4Q&nkyo%@T??-Lb^P=|w3Jpq zc9gfPiTUPKHr~KkSLAfjeD8}}Yh6>_ z#LqvUQ?i$#Q9?_tD%P~N%J-nyohPT2%DSg&MV~%x{N18gIwI;6o7g?A(;JFk-r1Uc z{nF9d=F6XpUTCSch!@D)d-h%5!O3R%(|EaV{{8oXHFYC@k{!EJ_*~oM=K(Q624!1% zS-(|oyYck&(ZyGm@7XhBai#TN?s;#o@l|hE^r%vHt8DkkKC!d7|8J}L*MD!qeq1zK zd$s*O$A@*>x5fTX{9U#%xrXV|#e}d+UnT_w*=@^q3^LH2Yks_cT9|)qpy0hd6K$I# z6%>oK-X?B8meq5)B0GI~LvDZLCWYmfeB<8+a~^jN|D0F5U)AGQ-jVcO(`WqYyIisN z&&03U7Mp(T(7V6P=SOVcopVBR2@|@!9$mMNiPm9{Hn+X?L`$mlr%uNk>+>s%G*6z6 zulR2GGxp=xUD9Vo{Tr5trB+Y574znt?UadCTlfAw!h3T^jLe>I=?|YNKABW1*YtCr zTkzf@{`*tc@ubUt(q52~^2FTSpWBeT(MrfhYkjGyRnh(v?`|AQO8>a*-t65+BJO=L zt6%!1WasIBJ5o;{wO$q`nE$Zj`JBf5w~rQ`ekxZRUio{MsQIbV7r#SVmTuddo?@$O z{nvxP*Ylt0{??m^XGBnRGUTpbyZ5mC!ov0PQYVU5aZT=By-KLy#}B6&Y73X`t9g5^ zx-jYP^u8=vhl`E z5jtiH3JWG~P6|Bq@z%0GSC1Xr^d@@4`O~JcR{j2^-j6)@v$!nQJ8i*tzq>Oqs4t+- z>dL~<()iN{KN_$-y+3Wv)>-Z)u}ZJMzCD$`bkFOjXR{Wo$_BsSjm)g9EV|IlT$`Jl zd+^}FclmnrY1W!=5_2?)u{<}C%FZ* zwb$PW{#6ls?a8YL+`rXctMVmoTx~gBOhmkWVP=f@w_>%VJM34RGPn57Hs8i2rnNIq zerku^1X2Cfi?svi&Ybq`!$Q|{JEyMaWpX>5BGa0jx4!>w;0~koqVla8&wLcZb^l%{ z($~L!ckB16Z>u_OWN&ZDxVZG`{ff(Hc4l1E|HtR|ebM5?*I^;&eR>MZ{8m&x4k zg$b^{d-rbddEs4$NN-88ywcFlK<;F7Sd`}dW0G&djiGfcX)@W87NkH1bT=d(+Y=k%TwyVt_b z*7onSvu~4Y4mKTpeBM6FEM>QeNM2%8^!lfV5C2&(_oAz->&|(5eE*35vaZvcC>fN` zD|*K9n$PtE`W{Uh;5JdUQow!hHLG{rx(zyZWPqp7B=a zl^i}Py6w&zbvg z@2>wpS%Jk;Q}g8=%bQhGW0R7Wy?tu<_U+rpj~^ee)a=Zcao=Sak&_xZGjH4G$(<+P z{cF?y`tn-q)vJr|mP&f-trPOg(_ z|7DGZxZbA9!)!cnznhiA*t+#9<>bsu%?YIAe1{$1OATuy&sy!y1ypV&@Sf69=xK6d!D zw2;uH;K{E}KZq&x3o$?Ht>|Tcxv$viX5w3~pFs{%?QZ;iORt=^=;hxw^={#*pjQ9W zQH6|5)Ai;~42<~x=Irc*))jZs&nIY0MMv|yO(U+wfQN&Twos8DYI%UqCV151dx3}l#ADqb= zyIXCC(}mq;MXP?lNliW)@U2m2qC!b+*^(0#yvo*o`fKGs)aB*n-ORl@>v-R`_TyDC zX%+Xo%+`F8xW8dhXU@A$;r=gYN=moyu&rG`i~k0Xj3lq#+o#sA zkIxUD@Q&SM+iM2@#BR2U%l9-pIhFnSv)MG-A!CL38>L&9KD&0UasTkU>c35H zqpX&rI}dMd>L#68pVqy(Qc&^G$av!4E~~K0EjD%fa};kRXCx&Z`lZUWfGtJ2q`!Of z%$v3S;x}i%U4E?Hq4$fldY}CJxqf{e7Qesj760#Y|3jgHm0PXa@_VbMbTzGNzx3K{ z_ZI=BQ@30yZF1x9-%(>S6RNf(|ul_n0)!uTVtacccoXKPtpH&dvdwZ zKacg*ISW`ftnb-U($JDvo11&FB|CG9()%{vYt?pb1rz7TKCw~Y*m6VbxUiMgmS83M zLl4%=UwtqBM|J(dK;BN5OTND9_fE_^Z9yoz@O8d)~lMY*}tp9yL z@7J$scdnoBxR%4t)b6CzZhhZo?gj_8^12@%7A|#-j<4rBac}+pcTb-_josDnqI7be zT&rk&^}AnLS2iX*wVd&6o#KJVv2Mb@e*Mxq&tH4{|i^$_l!EZH`S;wD+#a=jSDt zy)+6+-<_Tn;2auy^^lUH-a75ZIqwbXK0cW8aHY$-m!W0bG=;yN*>=lByJ%nkv}xB$ zEebz|rv6+UUgT-TP>}rCW1{$#BU_`F`b$dR@9j{yl<`h_&FiN(;`i0u43rEHi;9X0 zW&IKKs^;8!yVo;~rPiOC#WU}_f7M>8*tAkTzL)U}rk}fWbF%%y@N2hkb8mS*&3E<_ zQ4y7;OH5qWiHNV>xnqY;U-aOyj5PhJXtg0ZQ08IOFbU^``D;2it zuRbjkAb%rd$M++h*>!bG<+=U{zx&`Nv7xx2qq{5aWc7}{NuEdgw#KQyw*O-5uJfwD z>dT5Dla?hYIcgei62}w>Q|tP@0&SxZrlyAOjfi@6yVEC*9AV^b z){HFotg+EIm{PK4UDX}G?T;Qks(n6P`|jPFQ35AJr_^TFh;(f7TQ}kD?VF3QFTYqH zxXtlMnJ%LNL)qb%l0MgVxpseh^x?AhzOT%87E7A_)lE8fZsFdeYx-IK{d9PqU;XFZ zZ+V+<^*?{dKe506|DSk&{l5Qy_t*aU_j|wn$?yMf)Ia&ZzwnRp|Nq>_t;R_P7FwSTp|iVPeLIXQEu z%xO8oc$Rs?V|LTf&;*V`3!lrAGSXa=-&Qy*@%A{en)A@UnCgt~S+Qj+R_Y}lU(}iq zI?rA-xh^nx&Y>k6O3vgomn|zX)}EO^!BK#tW#_HUsftRhe+*k^xJayCBaxEmyLqDE zl;jzPipI-ksAV%6_1KiFDxYY1GoyIw(unR!YZaFDOk36@5f{KDka%fEiO09gRbHMm zR9)uZof|!eCwRd{#TiyEtvZUv*MffUT(o-0OB3VCKaWoHQ99{0Cnr_)#H!<7zmxsj z*Z4UK1PdICVzs?*wz}cSby0iWEq@M|sy<`4-G8cR_6&(P+n+8{slL%@+4Py)-pEbqDZEADe($cYJb^=4fgp>}y?MCX8GSl3QnhFly%q~`HHLBO$&82pB zPPW9Hh(l?+xt4J*lAN35b;uy1*jh78@xz2qFCW&F8d|xqx;}U$aiU}$&zoZRGrE$; z1ZJKzGHIHho{(qx`VQA!eeSc%L`0^vc0WEU`1y75bMaeDT|z!wtFwiCPVcmzKW)*u zzIUIy?&!}lQ@#~plq1+QU+mzfXNBv^4KlNTiI+#tb~tCx(Eq~Z=K0q-`(pyEZ^uT4 zDxJ+)_uIY0?ZR_Ep@a1SAEQmugq=2~ebBaI@9=pfBg?yNsp-tjT+Yb9*;(_$W1^#@ z&Z(LI@tMo@v=&^GKX|I+oPyxX z_~5`fyT7};eR;{B9q~Cf%~Pa%xn1wK;CFi2!NH4`?p^REKYLYcMD^~DnNB)#EH#Th zWG-!rg|ND68nvc}q{^{Eowb~PZ9zT74;V1bobC-Vk*ZgRH<#TD%XGQ#f zxcB{dWOnr48{^~JXD=^zaCjTUAbjg^k51>a3)KnL)tuf@eRt7Mzg)s z4tVJq%=S$vW3^1vo5|3b$T@4?R=sOs0vs9*A+=d21pMcnH#3->maxt7;#oK3dvDD%d@X&$t=se(ge6Vy4{xeUVLRP0>m7s! zPd;ynn8}=(Ahl^peVB9CpVe#+TJ(!f*Q~Rf9`o$-({u0H1hi+L<8Nf|Y~4^`G>_wu zm`clHp-u@CF6Ty$0xlPoN1ZcTA4fOzHBIWW$r0~)5t#>S zT1?)@1UtFiIBw3|yy?oBd6yK!_&!*kiP+3>n>A{FGG9Q4&*ooev>AN7wV&OwoLOpQ zt}rd`|2>7j8e4sjPG+=X5fbY=yhu~Rgw^%n!V4)XLe5G-7rC!~nhoHGOIR?zh~9 zO*;fxQi|2rTn|0tzntguPUE(nmWR219a*>g+48T}4ZoQKRh>mxBwY_oTA9Kn+2`~i zfJI5pap{51f&<$!KJ6EI@t*5txqHq$Sx07jH{MNV*6qRt5nQa^szM$iN-YN#ZcGuH zHlFNdJ54`ZCw-qT5X;on!`{Z^eN143iV3Gvz={Z-Ne8@o zI@A&hxaUr&G%u^W-m#x$@n44z1_e4o>?uOb%Y`bRByxZUO#@;m4o+XBh(RY~=M?u1-j~q-~olcJhIgA)R7b#5?5O~gd<4oCe zf5E7~8fV!QPYO(HIHGjXg+hKC!Tw91{ZSyi8DQXe7EtrQrjA;a0o`k%u>rmrD& zY0c6k#u)`2E{eJ=Pq;Pq$M5+6y;-!OoxM<+t%;*ThLcsW)8)b6jg!0Ek<{xNgWX#J}nPCYy=w@Dk;c_IxyGp zo_Zgb@_(DXrOy*-{R<7@Y>Q-9pBFDSJor6eW4+jcf)JybUWbAoR><%jO1{9N!q|8u zNkgEme{AEne5Q43jE#wZUo|dNC=^l9h_GonrWC;aRr{(? z6HjJZn8~U6kC!iyZ{y~3KGt-A_wcEl{=)&CAxtv7iWf7uI1(PT+`pM7rdQA9@K0w_ zi&9d62oE3s6yA9r2NPCku&~_V;a8uqF-3vVRl`=8u@2UuXV-DM69e1aE6aH9uZoXR2 z+?S1wY}J?fl+W|na(Qvct(rK&BF_8BeccTKE50z^T-xM5=hW>@JO9M~JU->x)w{Vh zA=`6pnU)B!E?YdC@x}SJqrUndZ1lG*X3N(|RzH__Eb@H0(uHV^Lf!LaxqK0}JPntx zbVV@4SN>k|^2p7z7TGsl)bCt#j5bluyT$OsG2dioveAU=iLdXZO#N6=oAhqk42!Nc z7ucp=e!T3Q=7Zz|hbCIsCxl%&a>TN@nKic7(ZpuG^UAq}C(9hPcE=^mZ1c-`*0$`d zQm)Drv*gb-Sj+<2piYr&~1L1e>Me+Zd!WrqD7bf z%>_rk=rT-d*i;))YSJUab>X&o?cq;NY7D3LKM_thzrd+{mu;pGkJH@?kLMkYo$q2* zZqwdsle5Z*HN90Zb-B9n`8~STAA9rG9$_}fYUvYXYjciBIb_l@EzcmUdYPoz-1!L; z+rK=>u03}A&J;Jc$J_kBDwO!zGYCliYI|8UyKy$5PJHir#$d*B={>1+Qx5Cvo(oR&JZht&TYF|*>E(ZvF6aSqCU~t`IjpGszlmb?*GV9 zye`;4{GsT~Wk)%h{gt|G^o!13C}g_6x%PO`3eQ==W&5jUR=-pL2L709E&EP9&pfnNW&VU~bIk8gXxOv4(>dqT-*_q zG}~9As(H16@5{@jXVMCDAY=xAuqTt-Sh&*E3!DL+Ro2+}mGmx+BkQti8K+#nD9v6x%NLF+_eAooz9J(IVz? z#zcolW`7-9zOK3u`?gl-UUEo7MdXo>|5oPATX*QT%G8agr04W^IwbqNX!LZv_T^cx z+T+&K4$n`2I6He@u*n%Yq1;P7ZkMHB+^(FVe&#`(}5o`oR{sXK%?xP@@$*V##^f&O!TpiFWS`= zZZ3YSe&3~xf3>S+IMNR^Z~h;9|IzY3Pl1e$x*131O3GILZLv<_%GaB><+rt)qfOWK z?)KJGOBm~~-->P0TJPZ-GU>vLu9N3F(azm`T+-&m?7>3_}tRCbB0`jW)3n$KySDZfSk^GWTxyd=>4 zbgyz+xq!3yWk#>G?n$gM|Gr*6f8ECS>CTM*x7+U4+}>6c%KW%5Vd|XyQr?X}>RO$q zF;0{5KeFNOB#uMBbmWwhqJ5QirH3zlJlni=^5-8nH_qC;S#j;UILohbsUPKIgbv!4 z@hEQhd$I6W;+5i8CCqmcPyZHU*q%5)T%&x0ZfntR-=FO+o1Q8*e7lno&y;oaz;P#q zqbrhI@{6LrcRg_Vru#O&$n5{xO@+SQuV;BPT@2Z^sGIB5?-=LGN3A~9d!8yx3ckU* z#rUMu!tVRbten@39?Wqw{@5_9{40k;Z|Ekr1?s7Lf9+J6P}tZUVDRVdPJse8qDSZ`#R?Wi-Efolna*5a67S=%pcZumU)7z1O{ZKl#?HMR5C z8Tnp+l=0vvcW(w~(F4PCKV%N1{>*)P`nh>y5BHn937>W{gmm3M&2miYaKAxb!b|11 z^P0jZE82fGeOmi>_X`hJ#_rHZ*7k-|4z-9F>m4+D$vsb0AlIt)LcKzP% zTKA0Wy~yd@X%dgu<$ZnCB6H&O+!O0pr+qHE^-1}x82jc-*6EF!(?0AfKX~;O*T>oO z78^};tG#`BN@VAserpDP8(}@rs#eH%K|=vPxZ6*m$kM zcJ<}lnvMxqCvBf*m3AgUcm@Ak%Y(UF`D}IV`3qcQ1D;sze>dZiugdF!W7l(4vQ72Z zOxn<_%RB3q)Xl{71l7ZGd$0XEUgx9qb;7q9Wlev2f5oe8{(r5jwN@=5&55Y@BzGAjpzz|7SaPrB77M013lS{oA`wBW00 zxxd#taRpt6OUo~Pe*OR5X45}=J>*iK2V|WSnk5q9^2fO^qM>C@qSKwjwvEr!f%HpOZMQeao$WB2q@XCvvijQciD4Y)r+jO+|NrUd zujl;o|3Cd)|G4%-jOQYs*%sHj7XEHi`FQ%O{d)V_e}9+v*Uw~m@oL>gAE7HAn{DOt zc#mJpXWc&QLv-T0gU@~$i0`~GYkQBfdEu5BCglZge0-*9g3=<#j2w&*b7ytL=|{**oWz+wSt+6s5i;`j^7lyxQ28jlTNZoFre|&y_i_ zclTA{OICiutrM49t-al7eyqT0x9*c^9@WcPt|xH2CvVUA8Q5Jo&xgNQ;;G?mxhF$f!hM8A}`bwxq)ssL$b&vx(A`OKc( zOkcRB^OsDo`oTHr3ZMS6q8G*OtBMN~s~m$?O@4k=k)dSgA$Hj{QzrXJ?rN)F zD9X_gCZc$5)r8a6Ji885-JMysx-8@JOo!JG40dN8-WkN+-=UGXb4v1DJ(*S7(xKgV zE8`mWe9XV?tsP%<=q+C;gVg#Z2ZL^${GcxBbRnw#a#eODpMv*}GY*;(Y+ueRt^0PN zC#>!1?*&gDyRcc@&6C}bdZ|<6`+?hs{RiDv$lJ(-? zyl0vHeLS~9LKYq_ubW+L7qP1N#jhKE?Zz**{aJVXo6P^OXDvUKzfn*=uuR~W5R1u? zeW#R<>gVePzRA=&yyMH`zUz{E&M`{1Y_z!TGu7KZR`y@Pr-hTMUv(L#OgI$Q>$h6( z^h3Y4?^?5iSqsI=y%(5oySUIK@#nTpc~3bOM@>-S_6yhgEFKv4`-7aphDQxv@6~kg z3;jQ-sU8mS)-+0v^DW>DYw(SK*RF?2QQ~^zuzh8p4Aid)GTmg z8+T~V(xlK+ks5EaHZ1M+ITdl`(Tc;yS$iyR&M9A}aKOnjYjJMr)Gv;iKSQp0q+L0s zrMmQ^@1FzVQy>5JiZakDD%E(SVC*<`Uyf43r^sKM^FYt=yuy(A_~y|NVu-0t=><{9{7vr2W0zAG(X+~Q#?dEwk z|DD|5yL?XDcI&2DS2Y%yUwtI~)-=2<_m)FkvxHiM-;Q$!%xa1xEG>J^sGmv;U#i!` zH8E##khtvQg3hLo@!!QC75lt1&TSXJ{y~dRU;9g3{E_;C$RquWFWJW(E_i$4qwis} z75O{MT$JOt??`Oqa(I}0-{@@Vlut^F?LyY(D&B zG0Wjc(V{o~8-ga;dD`6aat?3Vdq(JK?t~OR_dUzKLXWhqWn5p(;CP;6SD^c2hUK$n z>Q7jzP`+t~?=<&wCejj|FF%*e4cEM-^fFrbiif`Yn_pr(Z{=*>^gQ1^Ie4d`)!*4& z{knhEPV@D3Ih2;3HuQP)>&UY{xm#xnBtP$XTzFbBZNpZ9Q`5Z!JFKpp`*?CuO^f=( zFFhVXHn)O|JXd!w_>fcbtW_-jP+k92wXIJLPp?tB`LE3{ReyTij`NR8`7ULbY5gga z$~Yc4A@1VsL#)eRs@?wgZ72IS@smtvx7a=Y$SLEqUG%b+YxRZ&tMz~O^r&Z>_wsb* z*d3MLxOHysq0FqUtXJJObq4;DW!|N*MBTz6UQMmoazPIfm-)j!D&J=Q;B6R!C zxxF&l#=$+Scl6B^if!gS8>yY6TDGF^!xGVNCzeP}X4@>jAW0*s(1A5(?M9ERu1dD( zBu$=+?IJhBZTGFe&OZ5QXmX@$$W+$m+9?m;7BAqki8}u9Z_~1!;>o9u?yR1(>9*iQr?iqG>At$>qD{nrFX^Wk6bN@pHR3}a#q-xpDb@T71(BO zE4Ge)`@!#v_PuEvdXLQT$>v^vmWfqi?(AMZkL3kZb1L0l_->0iesk-crN`uNe4F}f zR{FieYYTf8ZeO*ABXMEZV*cX1+gHMqAG7(cF1#{FJnP0W4*@GilcXK%(%J03G7AZ| zOHT96Id7V~&-RMejj$V>ZL@BjIRB;e?8?P^mOt{>+I~dQJ@VC$t)IeI-U;$ZNPG6z zin*Wjv~28x*xfVU8S*WR`0H-n^eEZ(mY_)W>B2sT+*bEDbMD?SW8Y%!qcUIZySY)+ zMy=og?}$t5KYpsyOkTPv>|T$T@$=G`!M6iU_VLBXX7t=Ioaw9-*?FyCp5E5||9vF;`EaI zcf9e}JJV)#zMrTsrZl;J-GpNhldaZ{VvQ{bJ$>(f)we&d z9#>mNf4IN?Kku6C7Z)Ng{-1JR^`%w#%Ezhm7{XV~s?0iQ^GSF8^}iL}zr=0k-A&?M zdD>0zV~oCgjoO~+g)K~r4z7tU*?HgF=)}c68Xxz3EqK{IFKCTpoR0F&9qPRXZ}rsv zZj5!__2$@>x8W^`tA9S)e%Ca9V#?ZQ-uq`q6&zi+D@f3D?YfTpW%s*-);zKO;rdqX zZ2tcBe`R;dd6e?6H#WF1XU^C77i;V%cK_v$x!k&U{q-v~3Br6AOD#8?|Nr@R`|H*6 z^?yFRyj)>CA$sA*$Lrwi3d{?TO**TnDp{}p|`eEg%yAFf`1`?%VFe;i#uz1!3B zx9)P9Rh99Y2#YEEF6b?_j=S8TBGl9SUBA?3^`rP(ch?rqTiW;9+}3;di9W5$<<;{N zTh4ryEL58RIxWMsQF2E?|L!~YP8|~sKRt(Mo57+pom+f#8DjL)(x!I#tNQN~x4v~_ zU-#3hBh#9H+)UEdIrmQNi{|VNcHK6vbu278bEaNf*&{Aq>haEz(bq7Q_i*D0uam0_ z3eWG**vgY-`KBvqwQ$Y#b5HXcO(swA6rX=w<*yR|a@R8^D^6@xOl!Xu*1y8R=UYzg zjJMU3>P>Q0KlUy9B~b9fW#+EuPBT;t7VTb9xVKu>^IDtYW{rjB`<>rRzEpNb@Y>tv z?}yy|Di{xxRmRRS$e&nua@CJJ`BQ3FK7O4&*W`VDzxcG11(@X7tpKe~2x2?(| zPUnLS_d`>wjMPf4x__eEG)&%!R|Gwaa60ez)+X*Whoh9MO-#6O<~0AkyRQ5z{QCR& ze7k>3m$s4&rf_fZ zX^-qbneyFdeV*vUzgOaw=6u!+SyZ`UrQ^jrKOD`B>sLFUYoB~#-r0z!M`UW2+~1h# zS}W}QV#$`3K3PthqV<(+5^Cj!Y5m8h+|@dLaMHTVKeFQvFPRzj+l((i_13HCUk5&) zGFZ*NPpCEV)SA;P=Eh}(ce`GU(G4%Z=XSGodQ`c{&(uQ~GABLNmEmOwj+rIUw6cHi z>Z@*w(_VQcU!ME8Z?jeCv_JC>EbxeGxh~moaPq~MDJ8QQu1igsu}@U!_%Gk$p&)a9u&)CVk%IMEd=cuBBj_v({Qta|izh|Yc zuH&lp5NmK*=93dye((iT-<+jS);wNT*d`~o$+t!~u6*h{vAPBZcZTmw4C~ss%M_nR z#pY*B?TXlEF?qjI8(Y=HoIf&?*Bx|TZ@}^H@%_4gKNtClz0<2`5r{r`F7kozrN;-u z(@f^>_`y}zX?w%$!OuUwFIVhXn7i@C@wfv^PK0(|7oK6$c=GU)TiTQQ#g~Mv+8eg- z%FUg}edp_(-_+^1V{LHOEJ5?!$;Me#YUMu1bfkXiHy--xvc6e2H|1e&O2b@Bse7?y z*WaJqw!7PBo4UiEdIy^cr?=NWyVKcj{ppXHK;ggjv5y}unrTfw4u zsm-(R=3Cv!nYi~x5$DI|18QL|ovDSf)QE zQ3`C`a&w-*&f+(pYw9BsQVs}QztK=A<<;y@BRP&|JPsJa#ptEo6fhlbsl+cb3^UGtd`gf-!&i0{EC`Vk;~e|_FBTx z?X>Dft}os@G}wRjGOYL9Z|l$U@0L-9`iG6zGtKVmHA-LNO;{|eS$WRz-Dj!UoDUu> z2yKz7{NvUT~^=nTwvB?&Eg}o9v>{4`H@rGY@c5&M{rQ1ubb9|!&94$cWyM; zy5M5usaS4@XS>$PY!6(Za`3@bmI~F0m;Cv<^fbd8)vn(2Ei3n{+t$)_hB;VmzoF4j z-sPKID*5(%ZDjQ7^mW!WthzqsgkPVcd&D2EDJwiKrJR^GYr)AESM&7b?0bzbW*+-E zP4Bf(`bwz_qARqF^lvn&em=^R{V$AX$Dd18Ggr(?IQZ6g(nM{Bql+~-uFYMzB`aYM z{|x7kPxn=y_K#2SEq%K>g7=uq%PA@IWOOHpam~(lOjyXjK$p?b|IeX6VN3qH8GPSx z4O{#wmn(nH0i@}Cl-$*?0)a=aIC%9m-OMGb4EEs4C`{Y_Q$iAZ=C+* z9N!9I=gjT$QlU)z%tG}~%$m;6*4vVMTt#y6nq55Z=PbYQzj*NPg6x@zi~-$_^HQ=+tg0<1#QD&MgIc+pA0`M$@BRHy zF~aYXK$qk6vq?GnxBtaVoKfpLbywQ0sY%oBJ-peaE#^93Fznf4Lu23D7jnKRgseC@ zN$f|21qby~@BAuz*uRJ)>cIuH33^ zxhI-ZqYM9|Yr3VRBBu#BAB{g&R)O2vTnkD}k&!`;}S+LT> zXo5xX)zFICj0vA&s8e$G0*gukPAr@dbMS) zmErv(5|2K2$aqipnSI@IL6+3|?k0^)oBUTziQF$7rJNKeI&)e66jI;XuJzk!#>|E5 zFI;qTYQIye-|2jBhKjRG*ZX9VE{nOF>z;oV%6T9(YfH=;_S+TpoAVcZ7SKNT!-41O z)Do%Hd9|X7HbI}-UcG!+)Bj3qb@qgd_B#*8mgkphoO+~J@AmiKnhSTnX*fyu25b9g zs<1w~kotsu#}tlN9~Q5EA@==wYQ?qhyrFY@1bLdZEwYq;-^vc+UH-4-^^+mZ(*SaC`n=O~GPJ{i~#vcn~&U9P07{{?}$~d{IZAv0<#HO5X8xfbd z$0fmrqTFKEkIz~~g)pAaj}o6*Gvl%CV|KHYi<&c45)Cq^t>-kW*m(4!J6o0M;>TBX z`(?!T*|2QAnR?;SpA~1n-n=EVO@#4S=mjPHbHVXxOXioIWy%#;<@l=f%+qzL-F;0< z{yuoYF)8NInb6I>k#4iSBTnDRm~hqUt%96EhS_TiU!L7wGsD_n3Nl@E+A|@LUwfkQ zRFPBvVvg-pJCqq&vCpg6*=={f0o(EC)`lIoWa?(CTy3;Eed6}9%`$r;|0h0hHVSj`=gFqP@zu~EGVg{?Mgdju^tQoT6M-{`&4How|&-7=^1%1$kX$(gGz znq1A;vC{2vdat(MXS2YSlAXWBg!nRxQl7bgczJFu6URQuQkUi51j}65i{*AKGM^v6 z%TnxkNrtJvg2Vi(tH)QRm6-MQ}c%zfta%e9W_v%Se!k-B}WU-#MI>%PkC;z~@p zYc5p@B-iKMDOR`^@1bbOeQQB*e(;1>iDwzjHtgQL`o@t7OYAwizuDxaDsEvve9OsT zGS4hEft<>!rv3d!+1w%W%9A6WX*B6xELPa~NllW?n8laH{lPku+piVRa;|sWCb#i9 zPp!r-rIV+QN@;Dlwtef}T-o*K59|0pR}kQcUv70gm4 z9xZ6H?>5)Hs_qPP{VKnI)0&=kMSq&JdqK9i$EN8KO*Q6DSt~N%PG0-_gx8$=40AVl zD1BM<_}sho&s!_{#8ov?cNcnuOtoC0e3fOj^QJX5|I(iRXcW|58TMeG@#oBEi`t(* zekkJl@=j;(x^~9BGlG4mKepSYCiagtCbLbqYt=#R7xuBCp|KBH7;ki`G4V-F3-l3G z|F`$R)M?jR*SE*-e*Ww3R$U2qmDilCd0PWyWO$`kNi4S7``xi5$BMV|s;y0Ka(J-6 zdU^c4jp1bK>*X^Jaa03%6?h)_PeS-Nc}kGuQc- zP^j&*7Y8qv*q%3h+N15<@47wGvo;iNerd*8t&-6nt-Sp9)U$uKR{SwJd@1w7 zM?rC|bt^p8R-CD_mOkF3w>vIHprv8bw11k_DmjhqqJ=^%vrODrO2cB`sHv^=S6-!c zGSet%?}gMihW|1XEt@~~Lh%IhX+MM)jAxEQy%glkD!I&5ztGi)Q;Em^)TP_%K}9(%yU=_r$2?w*8GyxeNLEOz>i`?_`L8I;O_0q9F{DdC7D*UaxPy0~N{A&?L@25pvY2Fk4e!}IH zv@n&;HRsw7smiyXxS^%8$~Ne%;$>z(J6X#-P2TOB6>s_Lh)tZVl;x}_t@&U<8bfqj z!1WO476yja%cTdjg$!H+wK_gKt6jPxS2V+8bsGQNSk4(wCIU$ICJtN&-O)Ps*a6Z=~)fWMHyF_F>F#fC3eM)jqM}^#8 zF|+OyYWrCvje~t%L*fNp<&N!05$;^$H2vf0We!VuDtnur#s<|!##pJ#RbO7~IobQ4 zW8@=UzlL48CpM|Qn6;wof|1K?_GxTuoj&Qm3GjTY@GxLz4*#hNS&f7LWLQnzj}!+m z{f%2yygvTN)n#h;g)2KBFHpI?DKmP~vQN7bPtMYi+STTLLgh_XMbxR~_mtI?YGnU2 z?oL#>7t#5>Va3f^nk#m#-Sb)1&|B_)h&^d01#;$7bEcvW450#~MGF)ZBadii2^tolQ0SFC}HA z1G*FY6-${WHHFVzCK}+yvNkZu;Luyw#R4ZSecKw3GD_N|{>!>@-F@NLoKowzylTEnU+xAcY5e&d}hg%(DoUj=U+XYdSUM`?FA?1UV7j6 z*UmqB#mQ~XTBqK$aw{iH{wvxvXU)sVvKKrJ3eDTJyOhoQ_P+|qNnD%;suAA3#` zu4I2`a;0-mW5K=GF83TP^vjY&yKgMKyj_kbHd$oW%RNXrqJe98Lyl8L>U*%4CM_L z4_Pg-R>*GY;l$M|=cY7W+;NmE>4D?nh~+QJ4{r>9)Y8eOBklHs&Eu$lhO+6JDoNeQ zS0xc=9@jtCic(&mGE2DaN8*l^MiaMr&#zo@R_?z1w1&%t408Lz91i3jQ3|$F_FN`m z>NvqQ_Nbcw=?gw5X3pw+x`Cr)h1Rl2pC}i}p5Wgno|v!U%ig$?Cn`E?@4E^uQ?@lt1_eOmVL42r*cc z(P_pqMhHfix#y>^cah7UcvCs|48UZJ7%M) zcOx&Yn=BpQx!!G?Z$wyjBimMsnMRUvjJZp4zPkAd{4}PF7sngIS;*ZRQaLp_N#N{zTlT%ZGWXlA z_1{ZuqFPwZY}RboJN#Deo#4xD9CNNcmP=Dv>?XV|EN1zUsN1(TCF`}zz4)-@RE3)7 z20stKlNrZ_aD6;g37!1!cPE^l%Wzj`;~f>%xMC@}yhlx+ z`)2RIwC%vrulHP!N4soNb7uT4=Y085)zs$5O<}W2Beo=1s&jH)U6q`&|FQ1^zSJ*s zp9Xe^_=@@5zQ8+gv!(MUUe*~_R)-qatyQ~n0*zuBbHEP3Ty{fA$#w=2%r z`^bc0nGMsvTEmP*PuKle#W45z3b}yKR!2m3we1rNi9D#|QneNNB8@+qnC&w5Ov~+1^tb3f^}da#bxDVz@P~pgliiBu3Ov)D zlXGld^<$YyUiqAa8t9+GW)@2hsy^ME%%W&=4(v%X$z2)we zhPiUQCnvVCb^6X?OX}4X$X3{0!z%J7g-=y}d(7ikUMZV(tbTS+;ZF(k_v=4nB41Jz zIrmwI$a1;r@Qyck&#YeR?j5v5^*qa4o!1ueOIy5N20I%(%HEaKy@{nF^ioP_+a$%A zZ0VmJHt9Auvqm1Za_bQ_-#Yv3k*?c&|E@GMxv|$zvQT}Fp!pWjUq+54JS|IopRMWq zc>C9?5V2`@oMLu7&tWr)5ejatRKF3j=;gEh4Z>||mY_MN)%5q=X&wpw?-!J}p!&h2S`sl--?_Xrxp08Ze!d-Nut!jDb zs~OFg{Bt;TXIU;!yk=Vpib5?>|$1W)LFq$R%A=fZ*|y?MPNFR~A) zUTE8RFlTL{srYmKwU%*aQO7;~TNLZwd&v1rc;)&y^Np*N-!*K4 zbJv>GtwuZACaqnu?@@d7!rjS2#ZfG(a?;mgCwAu?4l%V=_O|oe=dm*^&Y3!_)dgC%5_=Os>U3UT3Ew67o~rur;z+{Y^6+-eJR8Mpo2QOA3?c~%PEzkg_h z_mY#cPnPa_EO$t%j1Jgw2g16kXLKPp0i>Au^i+T8TBy4_X_P}k@^uJMg zKWlHS>kj+zrmW;rV1;;f^7E&1Y%$jBn|Wn?+s$~Y7=B;)f8Am8F>X`Fy8*qA%Q!Ca z`Ke2VO*oXc=CU#G>FO%!({Ia)kAHicot@1c(WHOySkvvOTklMCDrTJhYB}9n+k2zo zl|9ockFNROo0iOZ@@18E1uMUteOR4itiZ)h3z^;YFG?RO&)sp&>R<2g8Un5?W$3d*`#<)dT6u`)ytbBp$0j8%;|O5~`SpcM z`xc$|XP<4FwRPswX|F3cT>W00`QHD-_u?~#5#|9>-m z!E1K;$MTN*>yF;2zH4f{|H%K^e@C3%FRIt?dOjVy8g$lzt_*@|35Z8zV6A5jjQ$deh5BqU+`rAJnN4W|L=Q!>i#dg zA737?{$KI?u)WQ%Kksf%_U4!Q`B9%QexJ&oy`R^aPpkiMw086SUk6g%6(eJh9akn?8pMRXc z|Lec?e~vE=|NFJN{!8cYce~#&%dP*`+Aeo%-;b}y{pRfWd*fuj-PbGA?ElYQe828G ztN5LY*K6xPH(%fP`HXRX-Iv$*xBYu?VWIcBYO%PSJwIP97vEp==SQdgpQH9Nzt7Ix zAN%*@+T(t5bx))B+kJK~x2Z{eJ++!YZ)eimueZg-#lOG({dl$9oS8d6-v2j$@9O?` zt>6DIhfSHctzEbE&IFtOnI9)S|0XO34=v{p`Cd(A7WwfEGiRUzAS zl~lA9BULp$e@uJcZlhZF{NBt$_nDPf|J{23@AKX{*5Bte3B2mrr(hH08HI-_$29Up3QuL-Nf6r&Ij@9&+x#caoiGZ`0|gn8UvuDu<6`Ss84 z$tmS;Z@FGAR1}(?61ySzRn4@`ITw|x)t4Xt`Za6g(rz*RX_F@HdbsONT!P1yi;KH< zi7x*tmh3R={&gN6o-5a^rZ0I|u;bh|rTK^Es9rqUrmeqpnVSXsg^Z8V=RDQ z-4>bk&arg*{bKifDIKm8ZW!&d%+6gR{%yVg=aoKH_BRd~7L?rFw)Wr0g`b$;@1JS9 z`0dA~ZEs}#_U&8ylyesk+u~ijqWo`_9d4^$&aqGV{k^HbWB!WGQdQh|=jdR{k*Go;y3+$Xc@BQwKshN&9rY_hQDDQjn`I~*8*!kZq(y2Or zue8!L>YKb}O~pi)l+e)7n3y{k=3m>`{o?eZ?rQnGBY9p|(goS~zh1m^hsu{&&F_XB zZ@(!Bbvima{`>cDfrF*B_q@}$J2JDb#?DHbUw6@V|K*>x{+&6&!Ix*5zApN7+x^>v zFI&Q<$j?zPy{OAB@Gk!A*X55Nuit!2=DhoxNg8$b%ky?>W#^afzwZ`(yNjJ)ZqLe- z73M~ty5!O_E5B>%)(3x?dhLSJ_t`lwEsvdiS5~%Nn`d2L=B$`FKCK)5KOOhn5;NNK z_~A-l?o+vIe6H(MzFGb1M|Am)FFmWGs?WUTd%E4sc)#fcdD~Bi`R_6JhEH8(DbaIL z>+WQs2i8%t{r^v1DygeBNf#*ZePaFXi+0au=DxBE!Haf%Jox3sw6?|CPabPa@BW&y zMfZI5+?n4qG^`FOd|}4EBltn?p}R0-$?!R2mSlkLyJEKao^Ds z-(CLV*}RxRsM6;wPRClLc-Q5xIVl7^Yro8%Uq_J{!HDIA97Rv*hw9!4QJPJO<_#^mAa^2 zYxTB6=iWs*=Kb5O{9b+{-*S7YnHNQWq#4}Vu;0MkenHyxKgpV%sh3~>;s34merEB9 zz2BO4`E55>eJOQ+%j+l4mY6@-`_yv%8PnUDe&?SEpZI>;L^!Q1_QvHnxmV>Y3b!b2 zJ7T!Y>YeB2pASrYzMShddiDEqaenoMSMjoQ0!!Rt*643^wtM-*^Jt} z3;1uWGI$!x#J2dAa^Fio=~X5ECDPIpWs~RZ-7{l$w(V)l>UC!=0xYjAGvR$+k#a4e zKl`9u+4YW0H(%F92Or-!?dGR$7*#19{q-K-?#BO*H&xx1e$J$Kv?l(|%uhY59(${~ z%UP9Z7zv3S2!3iePkQtAlREMLmTdbLejvx!H`8pnm~PCC&sMrWm*>}Q$k|oxa_Y{V zKXd-RR#|*^R`JqvH*;?;Ix8uCcX#=Exy7!xROaNWy_cN-|Jj$CX=^JsU#;o8x^}`{ z{k-?gJQlaYGdDfz@J~)$lJnz&q}$^)F1Jm+RX8ea7PL491TIf5dwVZ;>7V4A*S4YHpGu|Nqsomq|-KUhhw8%8Sp*p0W9Mg4D8{ zgSC_XT`!gU_|xn0MRiryQ%ph4ydvu>zaM{6Ju~;uIrAgBk_wdv`|s;8%x968dU^PF2;Z_ZZ#^`B-pTINbzt6psC=@k{Fs4xE^ zeCbIGYm*X=54-|3No;Z9(bmuI(;5J zov)5`&tCK9esS}r?@QjyKUJ%#scHON=kKmWm6^udLiOB=*4;R5e>F5zxToy@zPN|? z{{H65EcbrfuF_szed~;@pNzQm?uDPO9$K?);@q^u@22;NevHn(zt7W1(SFuhK2w%_ zm-}ap&PK}hyT=!_?W(>dwz%igz3RIrI(2`ylz+aJ-?x^pTt4c~I{ANf2UY&Dt8Xpj zT{iV`Q5XC1rBiRG7yM<37r40hLCTH4=jP_`v^(8)bmQY2T^^r%GG`qBeYiR*r~Jq7 z{T-)X_UUKsDSm#g(Yd{A(f3(RuY9Y^ikFoIem-$RtMqHbb^i0Erz`(h7#S6vsYtmd z-OIjMUge7E9%+x>n6jkc^sS|mb^GcpKFNG;Tbu0Nxo+L!wI^jdPaN8ue!l7Y|1~F^ zCU0DL<<6Zub7aI@T^UQSPYGYIH!bkoy=}|?+lPXVPO=cToIPvSt(&$ImAA#VH@p zvftkJYPLnX-Ky2Ach}!nJLROe&u99#J68`L)IM$LvCHMMTPCN*De(^RZ%OO=C(eIf z@^s~~X-r0py$$Z>`LFU{Fos4RQ*d!~e0bnsv()Wk=li@R3E!I9rWAf!s^u{K-_2jE z!`;{Ey)&zlUSIObHDkkUuR8~BZ=WqxVihOi62o7!E%EWOyRqBZwuZ@gdh}|4-531h z_O;c2clVrY-L+f&d#dK~>Ar_|WW87yb@j(4i(fO=oQ$}=^w0dHo?)3SrRx6LJJo3~0es{I`jjfX4PIpb;0;ypzV z53PEB-unON4a?Hz&YE@mY<6U1WM$>Ub(8O4m^-;5D*mHXkxW#ld1dpCqF(u{`zyy$Hu-M4*e;o7og-^{AohmLPvu5%I##zp5?5>*|)n$LSo_GJ$&&T~2CM`CKf7{Fu zEGfBDQ}<;})n4t!Y2SA(Ru1fcC@eQGefg0sP4b5xz13GxRCxQI?>q12#oce;z73Y! zzI54=FWI%0duyeScpxZ zl5@|@Ip3b0 zRa1EF{XmT=?;49XE`4=7Eob81srJ<~uUYKh)cngVr)l;vBfm@aR$TRlQR_Ev-I4KZ zQ z?z86XST{YRpSSh#p@WT;?XP?qCrI7%$&cXeQIU{x;7yV673Afs2`zS3{yxcbL#a~3 z85PG5dtW_C5K}$kac<6TyIw27nQ!~INA*sWx%0VI`Ub;0trH5yz1swIuUxmF8<&Gz=oL@{QU7q56uG!<>y*xE3~!lIhp z%yar{isibs9&q0l4m7r#nq-rBOJGZ)LP4+jM2*InA7v`>pIAJE3KSlM6i#4b&h)Wh zS3jEUm^5j}M~e^3`4c(%d-<<*yDmTc`QPG=ht>3tEt&DK$fh);EkbN+`nTCZAwN79 z9jafpW|`ZeS~qEdSHUSyy_Z%_S}{3!^HlPnb$Rm>u|p_JiN7E=~&K<4nCJfjW*2=YwSuU zx$ZZl`Ry!+-{L1V$#FUQbF^qOAG+-QiRqC^YvOz>l~aNaF-}gaYEI^6NodGE{NR-6kg=Ml zR#d50ZAbRA!t}zX<*Pm@S6_Z8S(#~~W%OQWvddk=iB%fo|pgMh3)9U zsZUv!ATdGoh*`RG*@F`t7SbG+W=`kM?5wj%KXQMzb56L#5tT}g#>OB~KZ(%7#2d~z zTGER?PEuxef2!^|ONx!>YUn>^nc%|*79VLB_p0IG30ASx(zjGA(5ai$7<{-vakHQd z(@!N9wo{8L9_nxvZdMRzJ@~-sq1sDZPPQM-0TLJ3Em{sZM2hG)xjL4-p6GFSN2kKf zL%zp2PU>_#w`XjQp7kI(+(V#UKtiMYQR`+6nYCYCm}(>@I82(*@VmgC6C&ZdQA1j( zZpxkIhi0@mbMQ=Y{kSM%3h&zAzYSOlIT{-`X~ckTC{?_?P2&QX%{kTWHrqxF1)QO6~ocG^i4^xm!4j|dbn-clzva)#&CbvL6=?v{k@TcK zN=idn*u`LzkfZF6O%f?5&KzV~6tw4nxoqT5?n4feGZmU9zCC$Qq#|XWdiU+KQXKP+ zJ~$V8IFKSF2^PT~8HdkeF+ZF9+Mc`cE-*;E z`s|29W2a_uZAOSzu6q7O_I$2#o5lT||1lUYaT)d}0V$J^>r9wj2aGvTLH^x-y@H z1a|xLJB_nB#W)zmT^uc3}VrC=VB=&+pi!i*0$ zk}cNH;8|!8Aa+&g>N?g-4E!=ommc<&IEn3E^3$OFP|u;~p8tN?edtJ^VfWHtKWov< zKJ#Od5*N%+Am&CLrbS876L)RT3d|N=y)|U@*Wh^xu>ni6e!q$m z)y>;Ftt(XXSBzF^<#)enjf$KLUi`1UKmTVy+f3`{^QzCipHuyAuJQN2?!JjyA{-h| zx@51-=8CNdj&#`)!=}Z4=ZJ^WRHK!L*jdC6e!3wLnKFZ4NMyB((&8x{F=C3rO-ZLT zbFd8{<_Rb{GN%HNauuOEbYuulN4sgEbB?0C9M_gc4%2!(>AXO8J;~sVlvv( zk0@N+Xm~M@OF>8Bu)s{E2)&7}9?mflJg%ZQa0ZBB<0okxhHyft+;S#1^oHA{q<|OdU?|nl%?FNCnH?^giMM!Ou{SVmS!k3b zYQ!eB$z!RBnwnXZW_Q;Yr$dX6F}-E{=;5$ek*95ul4Pu9IM=bN;4`h}tR5X*oz1>Y z8VLrkntOPsH@!9#uqfC*UxJf`@y{%~h{)X%2@#T_i%U9TPFy9?Ii>AnYT~6637TsZ zxQvX#mQAQ)Ts=WEfpO;2m&vLPZzJ5&1|XoGcPGg!Zr zPbSX-WqzezwY`zYFGw#i{u!H+qZSt5F*|0qD>!y9o$E5@HpJ!fsQg~>ohCtd$HG>B&JIrR8 zMD5L2Is3ae~QisX4|zeSTy;Z%e~gbab1kXy(a2bq3oKY0=*k0&Ry1d$2n)U z+U-TADzB%TOmY8Pv!G5zQ>g1|ON0KhLMK;2m6bssHARjeu}~FRSnzA!!s9hB??p`R z?VY$WExUNBSmN!?t}!R)naUkn`q83p)>dApGZVX4IPP4q!qmS@Gj{*gvJH_<4AEuI z${a@0g*T$k3p`8kQpr*&{_8O{z~NIN<2m8LnmOwQIazI@JQi6fE;_2Ub;gzr`bk-i z0^%&KTW4;rV0*pF_Uxh7y=xaNe{M4E>LiaIpU>;7!_Q=!)P-v3E?~`)a}BK7>Yyyf zeMRNyCA(Bb8;lsmF_q&=j?G#&zL1@SG5#-lPqG^@m>|sdhjh|Nyh;V zx%u6eYmd!2@*po@g^!-=9$oGoR}U@e=QeYEk^b~jH+S?lZ;|eKp3bgYI2O0EtP}f` z$$L_G)z74fUI&(6F0OOJ(lMX=KD`k%v~acf9`H@>)ZXLi?=5G4`jj1J zT$rM&G5ceW)%l9Nj4LwE6VIHAbeR^Sr?4k>}59@wWRhrv}eIs42d!mvNR9 zi>y;G$I=QVsql+7cK)pYj%aM1u!LpGih2G9QVnk;=9mh7yZ4o$W3$fVmop z!r80Mp9*3Y3o@4TxUoB#`X#IQaWuT0ptX-{DN9URCbO&QG0n}Mmmf@Nt~Q%2Ij89T z#%J$M_WrQE!7@9pXP2LTS(QsP+o7#TFPSe+r6)!wHHM zvZb@V(GAKBFi>IttGG(6lSS%-e7tY7UeF2gl_uZT_Gh`C-KHh;OT+A}owbem_lz<4**lnD_;fJo^r8j2-A%jfUak2*AweNnNd1+DLags+ z-TxO3{Nh(wrjWJ%f5V}#@*H;8HvK#N*&^y%y~81eSAv$!zoxm$M~T(`h>!WQFjB0t zV%Ai_S5ltB)7(5bL!!)_{SwNYE*VNQs=m6MASEc=)0A;^()06Q?A*NX+50TONKJ>|4Id9WDW`^(IeU|V<3C~=! z?A4nU6INW!SfTdmgpmBJC%GYAk`aBk#Hx#LJ(-fLGGircTK4UtQ@Nav!&H^8T{^bR zP-b>a_r2hgR}U#NyR5ya7Q$7h&1{&KStc84-g!Rb*-r%_hZTjBQcXXGtevEw#wEe- zb8GX5%L3Q8J-QZTu>Pp)=QnqZUZ(XjN~rwz5lv-y%whWH_sP;!<%26;&-}D%E|2MF zkvT>zvu680%jSAezi{@{o0WMob+4k9f6V;2+F*IWHO4hlZMp5wd^7fW!VtUZ>12^* zB3E6+ZhkX8rx)q`?PbRm>p1}%7*F{vF*`KNsXfr#`{=sAY8O^qo^|WpXU|LnHQv80 zccR30H1^GumA>Av(5IEhZO>#irwfJ#U*2h$(wNH+? zG5V+&UJ+tik=V>L&2*Z_Tr)+<1zkH+W|t(SNxtf-xw*2fYWm+B701teNhUhUa0R}+ ztf?II{IbQfLY0YgdP_2>F8=NqMZSkHyp&eRN_&gLD-#z5;Fp8fM=(fy! zOU~R=DGe`j+ZdL|T@u>*%EhduDJ{Ey?gKsR2^*$bEjdxLRb|noiLX2#G%>mbDp)ZX zv`hWncji*+)bH2O#Mdio?v(3H_xV#Q1F-QbXU=ZCJvtoYfYtJ7UYtODo zD9L0o%-E#=LgcNH@y*?ly1d`#UwxtJJ;SNlUZFVbZj}9-q#G>0D!fr$xqQNf(SnXr z2R@6I@X_II23$9*WIzh_QB@-t+SVHw{+^;G1IHzn#00f zTQ5vo|MXS)>^=?yX(sE6J#qfWDlLxYFc?}bU}QTK!{zYhnrD8+$yIh1e=|0eyQUQB z%IE)7y5Q&RzDgtZ?R)-*Wy=d{EKa;&{b%;#ENAD|H%GUHZd~fL_aK{|LuZKb`kDia zW!@QUtT?*s&Sra*um@EqzfiRzxYg-7HedmHc8i+*i)BhG%S zT(Z`S&o25|bM&)jUH83T>kAw6C$VK;vx+(Y|IqeGn{$8G3*^uIUu(zi#&N`ElDb=A z&!H<*CImfJVT_l%WTN-vv+Musf40h;|F$Ckzs-FWqot9rGcNpNmAL+oQzU=m|L27~ z%%{@SP9L^eqrdiW!u!|kdfUHD_|M;0^{qegeC2<4MXwJ#-`BS;;LZXmzHT_(fB$H8n|{ZO z?~ANAJvwC{{`vEruc3_J>;6CfF2CPe>l|lc{^eVT(v!}8dNf^Ux$z#mIUlDzEjhu? zckWuqJC^;s?(V5q%}@CMFTA|0-njhcruF|nF^E?N-wBQ@5dQZ0`*(SpiVq7MABx|W zo4-Bzcwg-9Hs9!5Qj_K}o>=3iDs=MZp(VnZaZWoHN8bA~>+8|QQ9F0OeQUSKIB{ia z&FrwVrDjU|Umbc^Unlppydu=$*++AczLDNZQf3>Q< zcI0Z^%A8+sf8YGBmm+6dTlHqK@p8YTX))L4{diULaZAN}f7>**c%6NPe}643ugr~_ z&U0q=uCI3|@$1RQ?D#qNZt%O%x%q$pbZ+J=iy&{E~fb%5PEc^7r@to^9jZum9$L>9@7a zs;a7Yt<&U}6{nr8dTz}ey3O$1=GAAOZ_Uf?n{TBWTP?H2CL!u&aKB#$hg?+kL@wC(bXMBG3fbmo6 z>h03i`g=Ydm*4y=#jo*rb$JT|Z{DT;NvTWjW^@kr@t!|!}SRWR)>-^pOdy{YfQO(cy&z!pdStdz^kY;}CBvb}EpaQb~t{q(72 z_wD4u-u<@~@OyChcGr=84omdE@8f;5`L20(^YmJ&>OVW4gq)lv(0@@-uw6gRmhVEm z#I!5v>-GdpFJaz$N9;oXyD|=r)kg1EueT~ccmD6nM^~?(3Ua-@Y4h2Q8{4hF_3+im_PfO@ylD%YooqO%K!J8-|%UYu-o~gn^^vxN@Ps@ z^K{};%jAdLH4`2T;>+vyvuj}DUmTb@6oqKnepWOT{FMn63CLNus z-EQK{{BF*hi^XxDX11pu9wcId&2uNxIR8mw2W3&a>M3Tw1?<>+cUIb}yQ>|Ka%`g~xrk@&ocSeqTG8SN;3ztF7*}-T`Q>Z)B=qc!^8yO>E+u|Dqi?Q1 z>&qgQnsaxu|Js!4emyNcW$TLvOa5*=_2Px-&SakLCc%#${bK!F@WA2q@vB$=8{S*> z?&IP#ja$i$ZU3M0DwI6%{O1Jwsyf9olWV}0=K-rwwC$!_WN<0(_U1i zzS!j|eD9j>^ylfNvavt^{l5R~*)%^+mj!IMM05%tSJrL$pB}KT_}q;bFD`js-OFrV z#XIjy;SRUWrIqIneqiigy{^~mLFg&=H9C>C>$AVF%k|O=4WIk@*3`(5+Qjd(A~&n0 z|GT{O_JLUwF3dX5T>d_Cx7ieph#<@4ti0>@W*g?rR{z1cR$|6}jU$i$-CuNJ!k0I5 z&UB>izqh01*q!^!ZhcxWYke#3&Hi%lUteB6J2UrPt!Y;2ecQ!pD}v)IRX4xxSD$R{ z%;Cgt_uw_t(Md9>{X8)5>U5$0c~)B$US#c;jz8k=%Xiwc z>_i_UuIAiv&gpS|t;l9@$8jHVI zf8FDEIrY`4;-^nH8+&Wr`>=jRM~1THv>hxvuC{mEbM0cEQkj0YOZ4EvggN`x6z>RM zy?1Kb=QnFvHyZmh&#|re@Uy7$?8&d6td~xH@<*Du&a$lM4T5Hf)_R;md{z zU*><>b>`cf`}>2>pIFkvv(;r%%7gfyTaSGHEBN`&^*J|6jOz}>>pz`;BW2z$Q4aST zVhbwg)x5dXUw3OiYjnh}d0G;4Cdq9q`_kNA8+VK6%f7gsTh)riHhtE89~^Ejs{5gO zdAh<+$B7S3rmeMF@M~Q{%+&aeFRt!8Wte)}PP)EB&N^Yi$9KJRO=`pcAMd|^o^Q>n zPs^Uh%gLM6R;m2hIrYI!Q$4e=4GHIcYyX{@`S$FyC46sJT+1`Qz(2jDw7SyC<;aSc zmz5i|mixcoa!R-Ef>27@*Pg`4NM?1vI~&u_-#J_Lw|qIX+x|UY*LT;MuPfi*@}v5E z<>J%zH> z>(ejazgtKDNaD1$ZNGC*;dAB#i?jtA-cvs8d?GW$bU}OP_TSy+BBFBc?z10Wod4;Y zlX-$tUipa&veS*s&P`jsPjiRTs(I=nd=pwarPw)7J~t`S7pi-)OZKO0M#P$Pr<9I_ zMgLy&O($&gf_`s><1S26z8Yc`n=I?4(m0vO+JW5sGp3Ft;}!OBC!9@nuR+mZt*X^ z+q-mqe%|vx3>_?rYH{7sA7oU)T1b@|P zzczozfvT8e&hu_1+U#NVS6}6~T_N}BUCt{GyCXffY|h?WDYnzGEA`*Kh=SGYuCHUi zrY$_9sxwH!v!UHXOMCm-@1FhU$>(%uJV@Al!qs!xQmN!QYFay!xBh(amkG`n zUSDsNw@)%|QMD~SptfS`mUA;-zB#^EtNZEpPkc)LoKE&qix#Rpv}-PCugOSAezsz1 zVN});(KjEM@~YPPKcC%s|D{+?ZsF~$6)*1Bt+x(+q;hPkZi#1yvxQ~clXKgAL$mkP zUVoEpaMs9V=h`ghiw*`GudbWFK|k_!#3a7v@Ap&h<~=d7I9*!M{!(K329?qcFCBWG zKFVdC+2(sJXzRU3G1pVx^0$_>yWg6%IE!)0vlsK%)V&uzUGp+3Ir~%cHjnn_c4sRN zE|mRRvHV4*?~4_a@8@~mo49-&eKSeG?Cx7NM@l@ctS=N`En5S>O7&ZU5;_;3zr)sx$ z&3{*#5i(g|`R+GScX#|urwVm=;URwQP*v^y#6)2~;rltt&g$_SNS}W->)RIZik`Y@W?q?>T&7=WW53^b?(2hqdl&ZZzF2O1 zBs%qO^q(C&ckfx7``1To<>yD6Z*rZ9cx%J<_|u*5$~&h_|Ei@eoXEE7@O1HY9>E$X zz3lZ(`IlcxUitQ70`Kxwhh1BF&+n=H7t{4A$UuvS)iU1qZby!s=*u`6t^=l1&Qwf1 z>w1E>xH!7FI5qd}H?H$BLPCkNCa?)y-M%Am;?A zN@a>;;o}s2smdMv(|NyM^C~V*7CD%toc{OCnjez2+ze{o-oasEn(61y6<)RC-Me|0 zO5L$_zdPHHTWO`;U4Aq8%La)onfFIdo!XlErTos3TLPcf$hdyL-BDS@#>;SFRma-3 zUlQdRe%&~AN^AA%-6uPWKi;vb+{D1TRNzm}yAPWl{T9@l(!Ok|gs8=)$$1v-Z5!@i z>X7L)+FQ7ZTUT%L!mVZ}_J1gif1lGc*)qm0ZF7vPw^!fA)6?fGEy=6(Yrg+#=l&nb z{$@_z8jOrOtB?47DOzy)U|g2(+1mjIp=a2St=1C${_V|ujf)k(69uB!o^4E7?Rwi(pcGr&u>-;TzsWE^6tKlE@j#= z#qCML{J$Q-J)ga;H}}g*YQH({7-YEkT=DjAlk-=t>G{2C|E@FTKlk2T6#U}MRMEZs z(`_$Z(ujQ8G=19^hW45_$DFh#)SY`>z>^ce*!tnP)4r8=-`~sp7uT_P{w8NnAW*HyV&H-RzE*0A1o!NE2)3QIzMXJq95@Gt5}|? z&k)JXtkphSR2Rq6q`xyYE-!!o%PWE2jcUGR79CGx( z(*M$%tpnra8K1zuvOk$aCtwt21Wnw@55cuVT>L$Xi~a_xMACAj`pbc_}7E z!jnZCx}9fDJ95uD`pyg&jZ78w2{sche!9Oc=HT9cuR`z6_?l~Tr~h)n6f4&iY{Mt z`|~W>m8TdTr<~D<-7v$UHEH_ZViU!q>(~Wv2Gp6Qs&0ID`RDT%#2Y&Dp7Z|P zUgkM=i~6I>A`f&ang33k5K=!k*;wA{*|GM>Zu7r8^WU_&ipOrhKT(LaTC!tX+1tQ| zfHEl)iPwx-IsrW88ca;gvYW34l^2}v+$g}pqS@wd%97$4^5SDh=RHB;qoJ7(%H=OR|)UZ^ePkHB;b2CPxg9_M0Y`7i2d2nW{H$3PW=AM zb4-ipN$s0G<%YurK_-SKaglVR2keWL4OcS%2w5X_QdVBx?wNQ{zy-cP9*RpJ-fiZN zXufe|bIXp!57Mg=6%$=5ncq74PUc=W?}6;kzB)GP)o(KL!ZtZuP2Q+d?8L+NnKkwS z`?9X?;&q2*1N;^nWE{(ws+0P0ym6D0_x}QaDBM4MB{RAs!vd#Z<6lQ3xel$k%^7l*jW@W6%NTxsc6+Q!R|UcBcwU&Wl^Ny3K@ z89*iDS8ZQZmgv<+!krGuy?ZjK!0? zWz=osE7^*fFMN^QRJnj*`}0o~)2HlGiJwO*uCwOv+ve4AINWAV=8CE3SUom4l}7P)HSD$ZQ>tD(?_G3>6;oLB z=@)Pd-_8XIwlw7vx%eaIiFXrSHb*YU5C)^d@T4Qb<6*cSFGdG zeG(?bTtBz{&C$yXU$5}muAMnq?>lSHvC5BYMZ8+CI%MwNW|pYA<*2o3>71(#N1ry> z8zz29d*Jq9YO#cbjcVxP^adGD@uduZs_r`|?)ZIm^{TtE$@{b>2C<&H_}s%|ePI7= zd*g__q_r-uU-s^Du8Yp3PcRnHRHbW&m%`x{}RbO$(N=^DFU{ zotkG?yX%PZ0p<(0D{mh?qLO2`!eYr@TXD8%<~MTH5&NI9GzPOoPBGZLHFur#uieQW zEe<8ypOlrHC=y9b-x&U4HJ|iCrt^YARs#P^jw#Pu=v(<**>-Q+fnUBMGV?<({&RWG zd2`2vZ$|}gc_)^e+Rju4^ zR|roy7AW(*YR?u<@5hsm&lJ7Ux^)H`pz9r2# z^~1TB4`15On#a?7ucDLn?W5%kS$YNn&n30h69T4nEN*Qn+Oz&vcwq2p&*GJeEIslki*%rXS3dX6I+nAr!y+%$o;Iz*=D;||NdrIe8qN=?X}s`uZv$iKbOgG@my1kW`?x@B!Nr#^7ax>=e(q~{;oW_bYdcqq^;hY?J5yM^Ec^6y zU(2q(^pD)CY+=9G8k(~FxLW$%=FOQ|EAp#ZJ6(5EE?uVN=yhvFu)#18qvzVl06mxm;i;4;rcCDGw3>jZ{E)k6E zsor~O+rG*`<$Ig2wLSgn8>ONWzrEV!WTs`;K?SDv)yEs=3p|~D;6%q!=?jz2aynKk zDNVd_&HU%j-;aCe&3U$CFKgHQsFUH>-_9#CF}h^)%#7>Isk6P=0(n1w6t0|Ak{np! z;Gwa3=KNyqI}SId`FllpW%Zk7f4_G2TI_;=W6~F*k3TB=@=npkNb=et_0`>;tm}4r z=V~;5wUxKCcymAW;*~w6ucuAl{{7DG_6d1g9|v`n|6ozt`fl?n##fOmtG9N(*PWsm zv&#B zmtR_WdU0PO>Fuf4nz)&~L)nJ~hok zGdTUS3wbzMKkxYYDA?grW6Fc|On>Vd| z8kb8SzSor<6?oOOYEfTbQ2G13_RT^Z$6w~&ma$k9^6)-Wm5wXtnR|XmKi;}{E6CwM z*w!Pp%boU$K6zT+z;&&|VQ^gmDE<2SjEzhWE9t0~=^-`*0{%HH3t>K9$G|HFrM z&y)I$e&uol{#_d_v-;+2t*@YMgmrt0VdKu4FSAmG(!wwl6DiQWO7u zWvaok&hJ+}nSXlg?hTYt)ACoC!k1ZfnqhkL+Wc!*-52quXFn3MPdd8&VS0hP+bkFN zccLGI7Z=CXl(Ajr+wxUwZKsBm`Se@8D?H83FaJ34>h)3+bCC^`yQ)uy2rU=!^-+s@ z{PyW0754{xzkmCx&3)9nu}MqX*z<}_-|Ek@lAcP3_Ui2p+jsAt6Wel*m{YaCy|#X0 zG*5jwi#3TmqjRRxx+_bqcfWhb`{4Q4?3~c6N)4uxS!bLQGi7Hqw!dx(S}^U&?1hDe zh9wIphBualiyW!uc(%SeTtn!e!OaJ*ISPjj^x4$a+Frb7{XYF=i0_U2ORkj{W;Qt_ z9oYWpk={JVmxra~Ctp7qZ01zm(3Z%qvbA6SSbJ-TS^8a>D4wK~uP2#KXI7ax)BReN zP;GAR1-2O0@Ak{yxD=U`J&$gkWPW+KAcJ0GYK~29x>_$!DhsZIhY4tCZVho@LPLvKNb;PQ9>I*|VU{d3ybu*VUgEnO8BI zUV4)GB<|Ff78b^TLfa0@fA3OU=^{4I&TAK2nAPR0HQFxI74@%#83zY%-*(-mk?F#T z)A>0n8#VVNCKpF@ZqGI36h84wqA_FjRZrc%MeJM6`n;!V7B&3|jnGM-K0UZp=2!^p zskAb&kj9+o%Sz{t?yo%2>1DR%y_8z`ZT^%Ex>2FJ@o^d6Nvv7#woc?WU<$B5!@KPF z-}L)t4-R;_&A(sx;NH7Q9W@l^8PJ;{kUsxRVmVA3A zV4pGDU01#5dxXu!4*mK(UF^8D{F!rc<#go%;HPLWkN;3eRYIsndP^33HU7x6S@2=G^VuZ!Pb`wy z0oxC*DLQiGW%sc?&d#?ktg`m+J-#>Mm`Ss|jY7}l`VH~g->!8_wVc{}S3_u0PpEFL zie$=@xI%d&6CVHbtv3>bgLBqjlzf>bTU2=N-I!Wnme;dC}%d z$5|K3tvhh<=^o3Q@z-xpQp;)x<5~Q9)0PyjZ3$O+uNnW}B+hWdM)|z|a)XLgn@h@R zzap9caTb49|8ymG=^y9jd|`&emv_$o>v?ug3J=dTn{bFeB-#;IJ`=@@s$9Hp;?b1(j#`B+wXkK_Dzxp{_1Yf{|f2O-` zRJmQa;d}Z@(90!f*00X2EuQ=G;SLLnXKjw^8z!t3%hzXqBg14ffafo(k}^{rKWy&zFjc%O^_lM?Mu1 zk;{K;6k^7b>iqNk3)$U~O8On)mIfD6E$!>xm`UDLXs=0qDs|mD((;($j>D;Mo{GMf zSQobZu61Pp1&PPcSFgI$x>Q7@rKI%iLmkhTFW1UHm|w%uw~(Xd|Qx>;M;a%R-m%JrS!8w;*nUHj=viBiOd-0!wc?(Mo67E>Q}`yQIONc`2Y z$LHCvR{j3lf`AhxybM+o3 zr3Mcy_9#dm6;66`*{qDKvZDC%GV{W`nEJ)ntvFUiUo|_r@vK0ajcKW>bu`n9VguX1 zHDS>QUFMv4`$c;0i#3)W{-)>7DYwpe?|*KwoyfiT*IPu>XNRQh5V7aB`{?oIu+vPw zGshlnTsHIOnQL8DTk9{qnDObHns~ER*uuoub1QD9imuO^d`g%ncJuPAAIpwB;aYK% zBXRX)b9wQA(|b6qu7@|){N}uw;C|^-QE0)2cX#K8pFFwAL^1q6Ptc~Kj#$1oy7x92 zR4{)z6LNcA=#@JHF8aH?d0(vFo);wSYhW$CrBm%&I!`etCx4L0cdno7+2$5UU4NtZ zXv?cKZSBG!)t0&$-4FS-Z_kVCc)856u$wck*KoRD!oFy$h)srnPIsko@M#O|*t>W0 zzQe*-+`Y4x{&ujl6K@VEn`6-ZV!s z$4XzdRCLFM&{-i`Tgq*1pB&hGUs1o|1;5B%<9Rky+RTJ9G$UuWNf-4zzj#kxm&4C* zT6FJ^J81$gI$Igpnz}q^UM`*2_>ec*P^V~|&*{&dr7N%^Vx_|Fl*=VqcT$(Px~(;uF8=var&EHK&XkFIK0a&05|+)q z|M9`o!s(Brn{M9NB5~wWeT!ah_r;bkq8g7Lx8CHHy}lsvJgbZp2j7Bnw*1v`E7TJw z7XNv0q#*0xf-bRRLVDF7AML8x{&Zt{#__Yp2V$x}EV!Ndc*>$f$sZmcP#0LNbxS^_ zEVf|NiLiQ?oyy<%T2swuXV>@?zk7Y%dH$xk41WqY+~zYn#p_hl`2217qbiBx~k<+q`Hqqmk1Y^29ru}kIA`vOUt($-FqRBvt?>o z{XWm<9}Zu>>KroX+3r6~Oe#;zcF)cXUH^iqBU$ou?z&H09B)c5r2qPrCu*&rCVEll zn;VO(@%$+!xw*Ms1-enZ_kE8>JZPMv((~$o-?AOj<$}|iknYPZ`1d% zfG^i}9Ch|jw+MPFefY~YPM(+EYCFwN&I%Cz{Ih1dZO6KIHOWsr4PHK0{i8fXJBIP! zH8#No7JF~p%Cavz6S=JKQHh=ZO-J87vD~j#S-hkh&9LcFlXAi!k5ky^qc*UN3gh z%u-KU*-_cl&6{7B)s| zbk4cn^F7|FX}#9Ht)Wv)Cg(reys6UnMAspu?;H0vPx_U0it*|{8{>pT&J`W29azq7 zSz+XIVsFcIkL&Z?Os`y9&g%7Q=Iq;w+oU?~DN1E3%vzUuPOBg#eg(JYy_*x(T|K>W zV$aep$L>dIy6e}AO9{+gsj-1?yT-OzXSE(jBwMqW7f5jKNU=9sV_p#y%v*GIE)b*5H>mmap{YwkkZb zd`S$`lI$HtD`xU9k2ZX@HSg)a6>*atb^f2*eYwkQ)~2*iyfq0z=}hy=S0wHHcK^w< zZ8wB}DD~R8OIcRtJeHJRUYnnoy3}^r*3wyWrwfmT{`oxBu3s$DZsFxcb0ik%w8lq9 zm>Y+OeEITSe&$=H^-1|_4vJj4qiy}*>v5x~+0(Q(tzL4EUufx#n;Rd@`2RtzUE}ta z(|>JrRsTI}QhyOwRJ3L0Ofhe9lQNzB1F4mI=M&hz@N=uTfAm_UayBk5UD9-RkGyEvmnyuBoApgk=bW0ScTbudO_^wO zDyi|?xpNKnUsN<~1ePwi{-B{G?a}VHq92T=N*u|_EA$t=yV}d+(h<{{l3mju$i8t> zKW=U5*>q?3^M_wvWlY;&(o|2q@%XV2*O-M;=nz&gQZKj8~Pc8f$D93IGY z8vFj^y_++8YN6v!iJ7n7tUS7~|K-cG(^g0&CFP2x*2euS%FI*~jk;UJ#IkJ1obu9` zZB|PU$Iab;wKRs8}f7Fg6E4>wD&S83l?-5 z?y33B!du_deCT)QH6ORmM zY-&mWy62(5rkE)aeR~Tet5>~o(3WnwwfDknU1-^hQI8zaxpUo&c#;?&s|-8c&|&!)HGAuUo{tw3thHv*bug6o2B>Ol}`&JcowYx{C587^GEJpUQkf+*Xq*QwYB-n(|2zdxv;S#`h#p=@6UbZ4yG-?7tC#P z-&|=Zo#=dDaq=-?+a)|JweLp9vu%{xP!T59s5#?{>;D_e{gvn2mEL-I!h5pXF}ZyX zPEGuOc*?KruyBrvtW2%UagUny!Ykox&1(C76FOPtxUvG5neD%L!CI{U|UmK6UmOT7o3&-O_alV~TO&{z? z-pMJM^1UwS!Ru4;w{F}?DW0AqrVusX%S!j~j?_O-lA9%3RHgp=eBF0C&Lm%g@gm>a z52PkmF3jj2i1aJ}%W%Z%w&)n8}l*=}DAzHPpA znR#9OMCQ$J?p*j;?EFV>cU#`YX&;Li9!j1rTl)3u&c9MdTYuZlusu-W@J*{-OhZFv zj;O^PHP_6a$z9&rs{?L#uT}g~I6u0qEV=*u`;3e^HFth3GjH2}uY78mc*8os%#d3} zOfw9!N>tvIo(}d@s(f})Ovmk>@L4w1+m|DCSey#|8w&17S#)G>{+={DS1d&2j?`2` z!-Jni?Vp#o?;&u{CbT=l$Md__@|%s;^@8nV7&J=L?rQ65N*U6u5O(#MbHl-JeQ3d32Q|5^IXq zStq^r$m%dRd#BOAZUrmn?7r2XgDyHfOAgFAyD<6qtg3q-=ATghl8|}$4EyEWedkLP z4}8_J%JaDmh&s`nq z*a$W!k8QV_=T1J55V~)zm}>TP{_n@m+!gA`Jf)?Z`{vcA+1KBAgo`r?O))xgkk2I` z(`^#>z0O*lU1u7$N^HxEnzCyDjmm;=&EkE66Br6-N55G!{m|jVjZgLmjvdYa zetGTTpT9}})sAU%92=LWwPrs0^dFro1iMEsn;9=>^?=FgP3oI^oQ#F2CzBzXLvW$f;i(9x~Q=sLINxOMps0pkMotSgp zp5ep&s5Lu2H{^6o?^t$KV0v=<)gwouUN^m*eB}zqfuLKv*99%;JZ8K0s`EFY-Uply z%?=o>w0gYCW6{GvrYmvLmz+{kr0?ANxANZaDNnwXq@_LUr zy~VZb)b0xxvg&*0PPDc;o_6Z!K}|vHC%?M4@%-;T_i*dGr_UW8CVq7=-EYgm`IKQp z`NDnc??0{OSnC}BvY_jdw&cf0Z!_l~^JqSCH;eNn3u~#N;hYV>1a}-h+`er#yQJjB zj3*%>E*g2Cjg2Q88?V=8yY>3jv9p_no@R>#`81XniUDxEx_kt*+HHb81iB%Xnb1O#9wbXPfml6&BsPee0BMvT%G<(S@D6Th!;=StGot z*!=goTVM8=nhVa^U*TC}KI=PIltZta-oq^orb|n&O3H>@`L^YGbJ6?vf_EOh*S%Q5 zDtI$Bw`~9J*}OX+&bad~Bd_s#_##1xrIIpBU%tC?^MXQW*UZi~zYl>YzD3!)a#aa= zM%}iw?YMC6+nJLK6}=eehkq+w6%`dF)z{}RPml5Hr5h5l=IR=MJZ9XK`j?eot@iPm z@5~>6FPX))+xl(0el2EaQqnf|6Nirq3d$Njn%lhb&)0=X%l_6}y(_rZn;;9`^Lx+w_kgTe){QMNE`Y zi9FeMuxWb1dUux+^_mGYX4%%oZ~5=q@FaCs+2xJ94o=s9Ts7A=tLDv8`x~V=|4-y4Gv&3N{r>s?`#jgmX)k>LX+t>!%c7=D^`cK* zqL0m5G_~cTu&k21YUtGs3l_}f^0~U{Y~nHY>s~I^1^$J`X`*=@JAbCdo4h}p|MuOv z(uke;mv+7piTlv-MsV$`O_x{xDL!)BYIPdI;%UHjj&6>B{eOTT(QT=vT}_d{dN>WaDZCVD-0`uE|4N50Oqlv`qJLZ_E~ zX>Z)UTkzJcy3{2_7fXMZePNFl&Z}G&e5?5U8*eMt!>>enS8UlbuQ{uS$D+Jj%u3+; zb#6PE+rcLHCoim=F>RLBH8t^&3(>nSu&{{={HSu z4=R`Yhb4U!;+^8daFNgZ%B?CVKY?#c%I0USTrow%zt!RzwZgyKdlR2CHEqyAUuZ#5Zm~q1N{+Tm1$-ysX zPZOIv`LVP}$+hX9UR_E7Q&4!Y z{g0-d@#IEBZ_EOC0Dw-R)4NtK7IOhUF{S49`0@>?rt9hggy!hmASioaB=zM zrZDdt!&66>E1S2@j*RgU7Ln6+6xZ7DO)!43yBPoZc^A&a&bxJj>HM*G8#P#~-W(8J z>aA3v7Y-n+Vy%hfKjp(p5vUI2?`%)&kIb(pT6Rm<&|^U+0>=cb&x?-iD$>(k?n zBR(&&Yil`jr2bcv|Lnh({nu6Yh%f89aEg7t7uS57U92aW|L*vCF@C*jdf!cFg(q=~ z-t!&e3o@JkFxT!)T8Hs=Pv@<*w+yx#PF{CLXkJ&nr25UvGX6&nCcZXF{T{^|>IE1pWVtEl;PPhAwU<2+A7Z2H6!n~IA;#$w`i z>ox5EpF93!_T^=6YHHS>UAd1fJ|8e?w(LjcNjkfDjZ(h-@h^z%H@C5+XlRRhe)7uwu-peb%+~gFzU1GsXoffYgL?;aBIQAK3VH0>3K<|=v^x>@>LU%0t4i#4_1MlxuLj>5tj4`&(dy(M$j z+R*my-P^C5x7t3^{}JLA@8qOZ_HfA|DL1XTAvvq#kDQw#>w4Ge-=@Z-|8{F#e;EZj z79XiL^JZTYT>j(N^)#!!TZ%t_GU&AM;s5si#?707hWctJg3q5ln`yLS+Oo(gd7)dk z>DBrK=H%xePrk5a%O)YG)lcWd?6!ySiL~ zsiBYB%-VBf#n?_B7j}x+vTEk;v+I6$d3nA6T72iuorVYwqwjNKW*l;2uzw*Y^9V$@^Gmf8qTIIH#o!@Tet(!O3?q2-3AmYpEfb2dc?yq9j z5&hR#UZmNpR*UFA>@WJHQgHs!_Lr|L7gsdtNh=gpbyvo7aB`o1IcuxbN~IMGh5E`= zf-hy2UEBADvrW{l>)E5`($!z|%5yd^c&adILt^fOsk@ojJvZvTpOmE@)^o$5$8_P+ zrC;}-_%ESts++4;SotzBy}o`~omb+PaxeFDMpJ`KuKwI=Q#+flt2i%{C2dZdhTmJw z)FtLy-d)*Pe&(gtti={f@5MUvyq|NI+3PHG;F%>xe~)!^N-RHPp6`@8d6JOOhINzg z@tzDSaJ;+l^D5&h8Fv=W1lY+wR$`MnJqTYcWuA6vi8m#2*iVTgCxK@35S<%VY-*>Aa@=rs~ z9?e}RmP~fsvG-E_fty#qDkwD-g!_k=OPqPBG-=swW2fZoy~0WBd7|gyEw;jLr$(~Q>SEHZ22N?{eYv)v%gnFYr5vwlVRFtSHxST#i!}yIs9)t z4@*-Gt*+8i9cqIj}{8ml3mH|TO_|LvqwEsLU=ULs? zj*vx6nwl^5rrwTLh@ZkDr+<{AM_(u9ZJgK+FX2x=8v5Fvi5%Pa_pok5ilR^s@5(D% zwm4deGQ9A6Yj4F7=Sc)9L)Z6~V{DjO5-ga?0AabFrZpNA66&$IVO4 zXHK%njy%0OEiH{<(s72j|Gs$YE~(Oc>YUga?HS=TW1-8JiQPilVxM)LoI5U+9kt%I zs+et4+VbVh*N3{ugtQ2&7f4tvx>lUX!rQMVN1pA0~ZP}ERlqA>Aa`af5 zuKlL~`|}45OqelaN9NM?_IyeH1@o#t&Rx24o61fNy|f5fJ&CVtryj3p`aS(G=gsx+ znfWztFddG3e&pBDlvzj1*IY~A-ShnPrAs~sTCP_lM@0vJ);!;IeioI_sOYX!;#5-^Y5z^X|1KyW&`Sdj00< zIqRRXCduW;8p`e8v)xosTS4J~+YJkY0)yLAn{~ddDEhJL5%<>U?HeYZWLEJmpT0Ek z&WzIg_N!J-yu<5NHZAeHlap0q=MC-&E;jZ-Z~2`Z%sFNyFzC&x+HrEimhR;`&)`LGIT}yZNqNTjO2+BR_p=-f}UK z29D6TRyAF>i$25!U2^$!wu0}n|97@IjUVsLO=DT{)ced{8?j}^_LiQ{CKr6Xc+{ua zF#pL7rIV)x_k5dq_^WkIZ^w%J_wV1o{@f?BS{MPkr z&VOz2d|&fjPr>Kjmg~n?-On*uuHS#eXP=Pr6>FK9Z6-JO?lsnznY(Gz+4K7vHrEBo z95#Gr0M9d^*hS8Phs!-9Cs#P<*raoU|!5k zo!n%fGTF@e%0bilt_hSVE4h7Ac+#O`nCJiX<44A`<+o;(vrXyWSn|2@q_ioOZA2NXnkQ>i?38{&Na#eeANumS10AZtko-edi9{iRru> zvwhXJ<{JkN^ZPe9H_OjE#(a6gv3J{MwYfcEfA`p9v5~8j`l-pm4AX=bJiXt)(^J;w z`s8%OfK{dio4#%gyxqO}-?y@cb<=iE%e+3J_}e$x@uSq`xsSh}p8T{#B(%TYW}*G=Z)be=?UZh{{pa)Y(5si3 zm#%I&{#{ACP0hPAkY}Z}tBFAWiJ+Gj;gvpr`tzP$|6x9%_h_}vH1kC#-{(%AH|a^> zWknmSdrf~#{+u^`^^@_H$>u+Erv-1^+VMOnY15*ahqlZAdDhck|Mkb&pZaHX>2gWQ%;ruNDvPQ%>6<#U z)Y;nA&sgv@e!-3S6W5v;Bv}G(I`CBN+w*^EN|$oaMv({3Das-{Qd0O#w_a_YDEqAS z$E=kCX}@CUIho03b4OcNfFZXX>X8ZFFc{!(=D^f=ecDbu-{mbL*==@fluOP#$ zU^;WFB8#Bl0|w51yBt2Bqo3C1&W!Bu@hW@4Hvc%M;d8!VH5pSuL1D-F4##I&?syR~ zAx+~Jp-k&*k){A%Ay`JSQV4J2^W>&^0G22dr>uJiR=Sht(9cNlvd@1?5;7x$pfr)Pt z3bG#*xOe>D|CX((e$vH1y0(o)uN}WcM$FhTGxAHs*BOdFI%|Ht5il$B^V8^wlxJhj zV=y$|V4I?5zgWBe$^!k(VGpcREPN7wZ~rn|_SBhEY^hh%6I&0J+}yd)CxDMnPtQz@ zW4E07bh+(%23AbJ-{1Ii_HNqmWw+-GKFNP$>eJud%YA6&>2pWVtT}%6+?i#kPoCl` zXcj$o@W{I3eI6@6ef{x&|Mti6O#KJS1)t}?u`+M*mOr-S^jX$4y_V?doxRPivt>^m zIk;~5>0>94uw8hWt^Mzr;(zg*v;I$;w|Ud+*PDwsZrHq`_(jp?*F}d*A{FKc=xMaH z#`b%L_s@1>;4@}Wlz8{y|CII4J4-AT*93%d2#XuHOzw>I@1NW&dFUwP#rBOGnb{Wz zFl?4i`}aBE*11C-@AI89C0b^7cTW|4uyLIpcSwKpTvoORT*uaNr(R0G^z_jpfel;R z{?Cc4IT!b-SuL>UDpxzxduv`O}yUjsE(W3b?p@`M^3uZl=Z=DK7I(TP#ahJ{&8Lkr!kt z@zq_R)-k8QU9ysI=eD!Yb@aD&=s1{(eK@>FmqV`GV^-6T7E|V#5>E^kPPlj7Ut!Wp z2G0fg-6!-}uC(72e7W6W$!f=je!(vVUpey;Z1b6>=HQbnevOns_leCvxit;#N*3>Awd%+O?6P&)i|Mc-qHER4-N?Sw#=|r zn3d+hX1uj+VxYWlm;7`sMK$eZ3aUj@mOab9CmyUEYZ0((|B}E>8#l1Ji3TYNPn!5M z>bH6A6UQZdM%x*`US^DrvYK!(X8})2+O~uQhx1=`&Ioe4IC`H|T(*pl$9?8xfuazR ziGqI%awqa6F|T5s|GT*8%OuUF-3;MRp4rUdJg}mJb&CDZxA{lkJm0d!UGo%Qt@w{e ziqdMrf9LGv`qbNBrz@YtXS$_9-m}BrF`Mu1f9uY=Be&}>zOb>Gzmh+xGw}a;5ihnz z=?LW|C$6&|iDx*#!N71dKhE_@`=%eMSD#esJCYW2{T|K0QfUJ^lZQo@@5!aY&2**1vY8aaPkzuUgSSle_U6ECF-! zxf&yHI{EysQp|a?=Dx@x{`SB8Qil#6{pKslW*|LRd1-bw^X7l@Q;r?_y86N$V+*=fZ4Rg(f1#FT6*fQWfm^?bh%$l4-(jU z?q7|k&YAnOUK_~Ch<-Why+8iwpIU{#hSh(J9ezzstZTd^FZSEN?UMbI_x5g=^5{_V1`S=MVdtv6OB4D{ft{RrXJ$;8%FYC*cWC);kHYOMf?Kl|7j&5%YYt z_dos*FWX<2)w9jtx8`ka>vH+2zxW%}Tl^OO6z=%!%>4Hnk3D|N8nmG4n?*1&ilzR{In`;a7FZ)BmO?et%xN z!DwSGd$~c!z5V@vH~!z|FSCE&xv!@`{1;{T_wng&d*%cC*T~c~K9ryKo4?`Ve&?zG zZp_=CzIA@fkyA!SUlv#xD}O$Gc7}k3%%g^eQ~MKp`z0HXp80?DQN3K^pLWAN^6^^# zj2S*ZE&3#0@iTGd|CEZK;^D9Bc?|5gJ0tzkMGTate2NBs?-`j36Vl+U|g?|9Z>tG&#v z&)|c|4equZQ$7c~zKR!EA+z5xx#M2H=;!>?iT`>p{NX1~|@P&^@yVdjAkpA-8f;^OkvXG82c>})0ZvfxcFM%yhQnxfW_DO zc4`m*-()|u=l$FUeAv@ zzJK2THFMsa@!4d)QCBAqq{!G%k+jdxz& zKI>?gmCVO!_g;L;zHsN~k7vQlDm}CMy}H8E-H-E?{!Z?^e603%rhH)^|Nf=ZT_)Sq z&8%6Rc<{d0McLOso_;uebfd60-xSfR#}~JLyCqz%R`IcQ!-WYG(h6&rJ7%A%J+Z1^ z@vKl!k>cIQ<;rfZRhbVyH<<)4Un3G$uNZ1EySbsk;iPcqti!3_{Z^guw!XBxJAZQi zG4qZCOZO=;x@oI6wd8-o5U>BJN*sIFp>Lq2GVCE?#%3u4iB1 zYJ-YdyLR81Q2i^pD``c&YnDj=+K<0-rn?7mtu>0`^V#{@dDY7+%JB=6mG+icxai04 ztN$No>;7Nu*rS$oyg?X0xCyQP1m zddrRYx^$_!zpWDc3}$hBx?Ot0S4c=@YVzD0=ljJCJOj*Hw7$1rnXzT@#NQPQ1dFW= z;$7X_-6v|_*`K$vO8d#BpZ6HHJuunAetyQxmhw|vy=~g8A6a^1e@wX4FY5AXXI)V7 zgvAK~haL%awHKYVvwm=WpIL{S-7mem7&*>$nRDMO>SsJ|eOY8674s(1LD}os$m4$B;K`4z+Ow1n&eELdvirMx`k9q)+|DcRpIvih)BXupYZspAzFO|_ z=~(5J{<<8Y3%AXd>{LIt^1SMGqwcE7%i@=Ax=~`Acld0Zk)MHG<=J1KN`9=EsDJqO z%2S1v)^#BjS6t2ZKRprt?{JSai+=O!{OyvrIv%W4;acCiI{Dd+m0Dk0S;P93ZqB(P zH_3IX*p@3n{}Kd`OZ*ima$9oZ^{?W0dyX!(bc+(cRP~Gd$yU2NGxg*5<-AE;aHnX= zq2C@JMs<2eQQD69V@F?ouBf;cbL4}+sOW{gZ%zM3M|^$wSFBKM_t|rDQ#5S& z)e1!p?;qJ*IX*Q*?1)SCt(42L{arovWv|yfJ*vC#=!(m0yCkyHJB~Yl&)af6 zuJneNQRSo16X!o&Iz44?Rfl)9v$NFUS=y)8JonwP_NwHnXtN{VeEC^7#qD^W|LNYb z`t%O{KPy@fB{1{{&)lzc>M+yWLP0T3@2MxQURz$pY93N(XBa-?X|`!xGRN*G{|=me z%htCm*ibyOZhhmDcbh9#34eU@?#Vm<5SLHp@rjJf-->3edf<|$qo9_!-eZ>DQQrA3 zc^b>-O#9;P?S1*gc9rjI9PEqTp8YCi&5GHwV`}HK-ktN#T?bguu{wt^q4*XSJE@Jo8rCaui3<||U3KKZkEkAh`vjrd<*|IUh}j)l3o zxkp=nu3r;c>0r0@nD-I;`nZ^w9P{5RzwR?ieI2~@JG1JqYF)L(^J-^RKl~w=@x^&} z!Ri$iAupC4-#km?`ri%DzXgApEA6>aZ~27_8}?{leB`$3uen;Zt48yUt$BC)rk#9V z8|3J(GI{a+Pg$L7^(QqoDLHKux4V#aqU`IdtK0MMb8&Dq)TJz4I&;Qe#g~ecA1-+Q z@wVjj?9yP@r&=kgN+S1qzS`6Yyi`n>QSsr*)pJeHo0nZ)dF}gF$B>Ep)^1^9(%U?L z)6pYG-f?k!`e3oH$6RYkP0eqyq7D1Y|NMLKAbPv8hLVY*ctPRE`9is+RSyF)r(0-U zZkfS9#VUWj-^rs~J!^C3I#_;wsd^;0?%A80n@hxfrnPCGpKq`K&|Rlx*_u_SB;Q^z z6PYC&ka=p=eTHA{U5+)pYxgd04v6OX^~~kj)Z=>3zil{FViLvkK1P4yHVqBdb@JLT zetkRWnVS0a(xss5cU3!Oo(eCV7h%J9n$y|sfZSy9U6=1~dOKtGhk1GrS|laT1eA&B zp7|#B{xjuXWpg2trq4xt<7J4?OSGKs<-0bQ}1P| zFXmd8A2}kYrt14-R>{7qudjY|3JdLP$+i_sUEB7k_l}NEf3Q{fq3|b% zjV#*48t7!S{%JGYiewE28m&^^wolg0V@@8@hd(=8HovPkFe_x}4CV&B%U)z$Oz z^12r(Q?uJ9tiE|h7w6_&x#r`_myWbtzkTPCbM{520uPS^E__ijMMXtjNkWM|H(j*< z1wT_Nnf7c3|K}sZ#>SUCbMM`|xAotF!+o;WZ2Ai8;+PhmiT?6a^ku+I3A?YSZ?LSH zQ(HPM=18rxVphqsyT$Wn@oapfrd9BxsPl4L)1oB)!2a*ERvuKn))VmZ+@ebxHySSQ ztrYV69GCD;#AMF(iEiIksEGFN+jD~@uq(D`&@ zZ$Y|t(%eVZ-k0BI{#(*y`0yd$@7;X0@1;Wvt{6l7F`YNy)SiUo@X6{cipGH1)yk>-l#+ zeElZZC@%5bYF~XxUt{CKK>LZ4A3xSmG(3GLs;+%gTy@TwOQvkCk}dO<{AS&Yob4Ip z;aI(4XNd2s1LDe+H+L8;s`+_x=Q)p=LHDjN^XV1*-o8k9x7?js&uza>c=YP(t;WX2 zeRg$hY>~UTD`lh{mn{)(Q9E@tM0nw?%v{&QeIJi;8}gsK`{McZn0}G%H&0ooKR+a0 zvtYA$(KoOA|4cS7KDl`1!^aC5Y#P0f$v!E+aiH9;Ew*&x($z^xx4ZVdFt>ka;V
WKocBj3KLuJyVzjob6>q==J0qV*5eRwqWrEN@$~@7RWe>IOTOaXu>u zziybZIQnXy^zIo8%sZcneCd^a=BE<+duOtm{Lwcy)^e5ek536bbooe z-Qs91scH1DGMS%PneyIukA0lkJ zHK#f+l(t;mTfF-lXJqNSFSl=X@Mmr_d8qXzcV+U=qgqPMCl0k`eYm}P;@*Y1d#)8; zy{4Po_VuD(p!KBK^S82#mLD~>-h5T<{fVgs<{Lw18(-SKZ}oXa^P?G$>+9=%Zalbp zMY6L)=Ge9gSw8~GHa(W&3UcqY;=BBN!p7HZHu8sjl?!Z^x2=AdeDlX9*@BP4cV?cd zz1nBC#Mo)u4v(xit%-fzCHD;d@(&fc=QB38WbyP@iB4avDtV))^U5TNnhW)3#oqS1 z6d(NZ?2<>a+`cd;zna=qCrj~e;D#&=cO;a}2%L?`p7 zd;fmgzJAU}or~w^D2w>*=F#_k{BY-ctKfWx$6o_(3p|~7W9O5j&oiD(FAVC{chgxO zey;s<`0|){eMc>GH$Kp@>!|rZssH#YuCBYb&C4CxuYZ^}_ix_D<9CnfP4M`-KQR1! z?N8;e7j7>3uKx59dz01at*hy5!xE_h+c7fBfDg)r1~Bwkgd{ z_EEE_?;^i7nICt)=r8?vll9KLcXHN$)lbwem{N%o`J19=~N( z|En*zMriWxZ1anc=gV52zV_60vXSBCdbJY!?RNzB-wRLJ!hiBs+`lKbUq45Q-}o7M z>ZWV{z60qij;yaeuNy7A?f6!K2|Ai4ks*&#o6I)+UzG47vNdjY@Z(K^6-ysV&fj@V zWB2L)!UTRRd8JtE_tkSYIxH*>3!buV*F971&Sypa?+i8`Q7Ee2aeS?=Pyed)u#e_R zYh_MnoegnQU64}gF)y6mEa%)kzWv#)OTI14O_()TZgF>~`_ps2lA3mXufE^$jZFQ@ zyQD95{k@}MQ{5+II9v$Z^X0b5j?HQ3B@8ya+WXC9d(vac_xWF>iu@Z-a?6@ul@m%n zCt&>etjhY+Z+tFKw!eM$Vw!_bMUvY3qx-C9M_v8e#J=Q1Oyl zpP~!5Z~eJ=%i839RI|)C<5kxamPfoiuQ+$w^eWr1YnH)DPYjEeYoFec9F%XZsyl8|xdhcWT^zzd1zZ&i95HhLf!# zRF^*7Y7^vqEbIA>R~vYRH|<@uK2L4qUynC8{zUW0Sf6)W_c`cR_SMNhD*wfa#pJvd zTWV#RDZaV%$jn_g?rhXz(tBfJQ~LO>bX`r&C&6FKpCrzWR-OE)`F*j;hD7y6M)&tD z&6X3rbNa^o4d0iQ*y)Q1x1N2vL-W#&vI~K4of7u(%&wXg-DN-hMeX_NwN_?R{O9lX zO<#WDa&L#e^yMq=FK2#S`(5vF_6pIt>VY-7*0qY(KD}Z4Yz_TcSM^T0-`<|@>bb6d z*6Z#sigt88xO1xeX3W*KWsMLZJ|q{3gjxw_K#()#|1SJbrZWj5A#9IBl9*W%Lh2sZaeoCl}f;k?5-pXIJ~ zxa7oZ#(R$Myz}^+pzVqUMJ<7k=5DLImfT??%~evmX-{RqbLnMQ{d~;L`;~O3FM0Cy z&5BHC6_wf(&4(vG5?K&`W3P9+BtPT9T&FqV$5lP+e)=e0-B`pE-Iw+BAH$Zl{P~xa zSh*9nv>7csptMZv@e(U9vvLi2yPA&vNl%+as(!~#wYXO8pt{9G+D_0malXmd)%V4Z zKd*Xk9eqV(-dfAf%^yD`tUY976?XGf*UimIS>N?0EnL4m{p+_|J;(YyFRs09a6=-% zR$E)!yg=D$+0;J;(-P1AZkwDs-)d^qQ|;)x_YTc$owao5A1iCCH!&;|)UL01&UMG` z#MA#@pH~VyP$?a7ZSC&g-}~l1F!-yYuU~&QW)(kYW=-M48MW7r9;y)5h>~Gk z{crK9!~@Gu-s$!AQ7S%dy=(dX>W3+r(_LKL(_Nk&KYDllm8IA9&ei{`*`fA8DC*9a zFC`}H|Ng3pPx*Z0$PWuP#?wz%hX)t!&b#}tRyQ^`e(^&QX<1Q4LyyX3UCtpfe?&eN zT3lc1{c#=pZ-2LU2jk2m7`GO2`dS1w$|yQ235Z@gViue^J3Y=nMsC#ymKf8uvAfTx zT6rzDY}^0#aJ$r(r&C35b5$`<{`r~Pu1Cz9(xnb+1BDq(EELzI1w(a>QnWA#h z-kx>8!na%AzEQ2V*R|=b+$konqpY&LleaW9xW$Fs%`vrfxWk>>(DCW(C#C5ee_feX z)PuvHJUKOKO6-@M+DVg3?_In5;#%{f12a8d>T;IYeB0dx3#4biZ{B?AtJEdt z;{nTC4z0T(Zmx7cqBmr3)lnq@Z!edS6vKd3{mL_UWOV-5G5Gvsww~zi2d_J?3p?(9 z$XXM=ZjQ=+83oIG5;N1Ud|UM6!@@bsgoK19W&d}3TGz5jF0i5Y{VeQ(oM; zaicQk&VvpPC!0O541fF#PU7NfOifL7b@iJyE70NjjJ-PxUNa=W+G(tN@K9A|?35GM z&m#EC?YA3zO73q=maa`XtkLItfytyW&*t+-J#Fj011~SPe15d8#N+$5_va&K3g%|V zN4sp^@42t)@sGWhiy5^a{kE9PR8l;Ld9EwlT$}B2KJ)*yl=xq(IN+ar|Etb}1Fv}W zW5VOwcPK8t_t{iVjtOF67jcn zM^@cdQ#sU7nDpY!&eIRwoqsB~e)IfPI=^Ew zQ*ZM3sOUK_?e^*FwjXbm{bH}FarC`NpG9Hf&gIITwWq^9nV7z2Zb>?RtZ{A@3`uC>R z@U3$jk4K%`FIT9-XQjRDcEzV2(TiT6ZI;bRnECqj@yl5r9(~t$Ex$Z}OWYa`n|%f0 zmDy9)TQIX~uFchP>pdB4{ajCKqo`}(@h-_r>QAIri?6jd_Xu{KFhQ-~cZpK%r<(fh%*;D_49J%R?uW`{#x~^OM(5j*!-cQ!hRd{%x}#rk>L@^`Fjb+*iX zsOfM$zw6bir*4Px?$*8j9ur;o^yZ{y?ki?$bKSqX7D-QMUajf;HBvw%-*dLWwbnh# zeD#Ma_L(nm4w!jH_U#Xz_5TevJ)aq<7oV7~6RYQRd;8~mJxk{o`C5JdUS?zHA;bUe zyU^0ZOzt7Zd79eVx6hSaXg^&bVIsJCRT&%m<6Wm;zwS@ZcyiM1^P19(2otvr)#m;U z$L_P{valt5Sl7d_P_UqV+cqU)W`>n$_XjDB{w`FR8-mj02E`k68J_L;Bd=DX(2y*}NqS-s_nD&KzL z@4Pj~&Zu}@OTT-xjVZqAp31H>pHf;nk280t&aAA=PfvarY*z9snM>-Y>;K-BOCs2| zPQPvxlC*P;#)=gyZrmt18J@i|>9XmkKT>NLYEPUw6EicTZ0^Yu%!)MyRl6>1_-eVv z?#k+-ih=?IEv;8Kjg7QcseHH{d++8=%jHJSn;$s4vVM8nJo!>0&-1-5^Lv)apH`_~ z`)2yqy8$wb7YI4!mppH^`1Chy&F_FMLe7TQ&Gl>^i}x3suf4v*Uw$`-?fO%>DJ_~| zoZ{co9tqx$HCU07?qjo7^U&7f;)Xco-rN3rq`Yt3?Xng=A}?^6`|sTHYez3!kmpKY zArQMm;axeKu(7t~%rn8>-rR!q#k*#-$cMiAWUcesx7H)XBXRK(k$4HVgO-<`F1f|o z&hydh_lwW|;rj1QZ%aQcsNFG1{+iH&Mw3%lh3ktqEII%9m6PIIp?gx3+86CMe;lW6rKTh-n6jhb-yhGEC)e+6VV%WvpxWKt zeXiLv;rKl>zI}IXv|Jrh-s-#Y=u7MK`^zog+NeGbKDx|AIZ4AlsrK;918na6x1x{u zz6pxRWShOKy=LQCZ<$}e(pJB9Ov(D%^06{jYI!Vo*;jSpmG8oCs#d?YO~_H3wditC zF!%dBUGE82yOUpTYI!bUlKuR}{RxvMUAp$pU3G7_tCy9*yno&j{f|!bP28h1uku;s zlozUplIGoh%{uv3ZaMGyCC{zyYk#kb`yaFMt|4U73RPU1 zs?Bd}8#_IF<*L6PdZGGXL`(U2c5Jf|KD2O3mDM};NORL}iHMl{S99{xY?bZhH=epJqpi{Stl;@MLAl~jp?f}<9X~Am zrXsWYe&wC4Mw7cA^PaW-ux*zX^nJf*&ed5a&QEpJS~C2v>`dvIFzk9fcK*>gTjXPV8HAYGH}fvBZ~2r=wRtGJidFXL)moYiE)|Zqm2!e!n;C z@8?8} zPI7D1*SIr9vpRg`i&8^YoiE*=Q2XoLl=j)J4_ZP_S>BI%yx??9)#}Lf4`NjzA)%jj z+FJ~53O{_D&&IBPA~>0o*(LtP$*I5dNC^qqku3_sP>ILhRFR7|K{zq{l=i`KM)yga?G4Tk=w|89Nx>1zpl)~(#H{g12q=AJ+P zMsMNECcQcP9H!5iwQJ9|ZRU^kJC1o})<2UKx^z_aNF0ORGwIOW$JYd>xS6bwIFgZ( z@w0sU1M|E)0^;KPi`%=cci*2T>~}iv*`=#jO{`?Ygyrq*UMIeK*-l$`^Q%zk>37%N63i}NywtZQCpA4?c~1HI zZ?}G4_cBRalRxXy<@f6)_Z!Ak-hOAdVs2P|%!Txy)z_=^D%xK!-B-aXznZy*tI(G9 z$A+wFW$_!CS2vgc-0HD-)vVRR`$Ok%`;~3mdH7e}_lJ`#*h}S#47i^!EqV20=dUjA z?SC^~9@)yuIGJThR%&f+&C9;&)5STOc0bF?`f+b+e{Ic=H_uI#&lkR#(a{lNBmVi> zjk z+;wYCcPsCkzNuNu%0*%qoPW)Ex$xzwOM*N*_1eDPi!a!pmf|@@DWP*F$K(TDOWu9r z-MHo3&vi0dR=e8v+12s&l^)<^Wnq!AUd(&^lSLJGu2x;~LXAr^#P>Vf<(2QV%{pM$ z(sAYLfz+PI*D@A;I$5yj_#R89-W|`+TU%H@6`ajpC@%MWMsoZ1E9YX5dMEOJxtBio z%DT|L?T;;NH%DhpV~CjB*m$tVfoJ$k|8H_vR@Vk|nNshlz2=hzD8I^V>{hnOU@^nFHoEMPEPIBM8$5FS3mp1Zl6y|XSp9>kyjK{>3P;+((%%32lLFg zTVx%aJO9$knX7xheN(>mt@u^l-z6KiiJObWpRnlpQ6x5fO3THS`*&?N;qiFoE3{a} z`Oeu%%qIIc1^kwLZ#7*seeS%*u3Nv@RX(yX@#e1dR$ABV`-exqHrn*oq|fvAT{-1j zo?rXoZCuokZHxOpt(m>G==PW8Ut_-d_fcbHGTtvP6Z-hS$?XXTpTc{vw$7VU0sia2REx4ly|yVSbZ<8#IZ=JQH( zn^|VAOW!u_<41PIxZlQB?AMnr;cy6G5b5$VdlmdESWRkHFw5MJVqI0v8$W+^b=`AE z_vJK3`O9bHpY5Bp>+Ocr1ewj%mK%(}?pe2fNBD)MdW@1<++M4~&po$1)%$b3b!K}^ z(6nt_6JG{)^V=>p$vT+7eB;GUBF^)V+|1kSSrmPxKf}jN&ghtBtm9Jwcg|`*;ier^ zL|s(bw=ga>uhNYTDB1G)!tQo+B}=BF%acz&sWl;nOCnRApT0h0 z-ZZuoTCQJtYTH}6mZ!Yvb$I@z!Yd-+r%{57-WlIbw~Ru1`L}{$7?0Tomlu}@)@;` zn@eZc1w>9irJ$o7sgSY%=dQq~y^dRZ|2c%_{VV-z>1Q8roBi&LW%kn(pE^bTKHocQ z_nXnM@Z;09u|5Z5S@MO-U*5?xE7P)A-TId+Y;u+LD%VCAtDeJ|wcE6hH*|dUdh)0B zdtJt~{);(s{$W2~zWOCP_ucuBklrVvc?ZS*hj>=^^=>HKW4P%}LcO|@(xRnHUC;b> zI(e?p5ldV0^Kd$RK)w}Ppu@Gmt$Kn(#XTKX8rDEIl|D1S# z?CWOfb)Cz9b}OcBUOekU(YWyG$WPdb_LGryenN&9cs`K z(2-NRvxEJwkLQv0%{Pwhyjv+c$>db<3-#KY%kKxwT@tdRI9N@Ny*K8vd78a`+O180 zN?6soS|*xIzssAn!=mF<{5onPnc`+Vx0;5A9=N_lc|CQ^ze$E(t3 z*mT6|T(5cE$KJo=&8_Y`Uyqk_=x+!Qd42iHnR~Yyg@0Ggy{Z`6t#p2kVOr3hZ#t?I zu8CFFM|_G<|5kZUyI=PFvq|#ZVZ3)UmE&ZeDydld+H8?ctF{*r{`>WKW&XWnrM<2D zK0JF{@~~I!^=&5gk3Q#eqmB1D2N(IANv!Gisl0#Wb*$~tLhfAkz!z_4C`PV$aPx@k z7inEDA)f7qrX6-Ck6-1~a-Pn+UUQ$(w%q6bGoK$)5LcC6XY0AxxzH(S=j-OLFT2@_ z^~723T`T{2+*5kP#~%M{cDELPkaRlz*+YDCf#Z9ZPa+%6-9O-g<|I0gf3Qtru&mt$sz=v+=}NN1y*(@?>S^clDi0KDm=_-);Mz@?GS3 zm`cq{|NU;umrwknGR@-IV?|ftN6R){J#%&5vN+$ztNNbz9W4xZ*>|+)(x#$acch$C ztL~eY*7-k*yLF4v{~Y^qrt0kzCvV}}W_7tj`Ovl<*9|^L_6YkM+U--#?G!VwQQLna zqWjHStG{zER5^X?d!lK-EzNt?(~3g-Ti=gWtXolgBD?5$p?q14=e6Bmnc9!MWeF0z z-@7f=7uFY= zdheW-cVgNW<3ffkHFaUDMMs?KADEQzN8WbH`*`DROmdLlUrTXO_RySXQIn^Is4%nL z`J;Dc!NwZ?A5)uUANR2TXv|PwKc)TE+0=U*YvPXnzxT@d<>Klmx-%M8&%CNrUbJ3C zD7T9%_}=DkY2mLUHO%51HnoY>eAv^ZrDq*f_jRJ!=^Ii1yiF~O=DwA+uUJzS%;U1} z$&$>YdyhOa4>@l6>i+Z4>S>RBzwNY?zIkk^@UbNd$|ud&KZ{%B`S5}KryxP?d;1$Z zPtD9vERvBc@P2vIHgn^P76)hLnZ|u5f{z)o`&rJKY{9f#)Ux-r?mAAlJrYuDOWfb7 zoZw$87_zPH`p&O$Q8D_-E3T#JFX!Z!o&0c3pH*5%)t^0TVfVvU9h!QrbnZ>Rdurzu zmt<+Ly<8*gv3a4t#Ov*s=Lb(q&A)Ke&bQ>_?hMOm4!;{DO1I^nvuwG2dGGaty{V5Y z8jC}?*jCwa&H1r3CiSNBm&g41I$fvMmp$S7IoILWk*M`gX9XtD**`gY-RoK=PS5qz zW@x$Y>z}T3U+!gdn&7WLrN?|;rQ0meSifXt$DXHYTJ5*pZLV*35xy&1!OSoCG&T9y zDV`(KlLG|q2r}9&RucSwPb&CogUQ#AmoFOnz5M+A+}3;cXMcQn=sZcbYx;BjDK6h; zS0r4sFDcx{cil(fgs#FT+h+}l%{BJ>ZYh){yuY@2c5|NAZD~R0u31`(wtaef{VI3q z%AZ!RcH3NkHTTGekit~Ei6IBye|CssIk2TyXOW@W+VZTpZGYN6TmJm{Gi8cg?=S80uCrD5ChXoUcyCAD-(5?ede{Gdc6aU6 znJ-^PyTnCsWxn0Ib?eflOK0)SxpU{0q}KF1vy)iaKk1aHsH}2SS@GcrPtY7S!(B%H zv+82gZ`ZzvQn9Ig^fY6q-LF3>*)}Xpj90eU^;|r3B}8QH-o10?33~{`Z`AxL~pPfewT`BtLm%EeK0j}CQIw;iM>nLu`f-YE8*|Y#VVpD zqT+pOTfM>LywsX=JNAYzon6})82$N~@9K-Qir;bX>`R4u*Dig!-01qI?39>tv6FZ1+3lS7LStdTj&l|3%sIrry_hDi zZ2HyIWWl@Rjaf`tpe5NIho|uLKH7fUqWg{bv4^Z~Zf*`S4-7N(@^U;DWKP}r zlobyYn%UUCOt~p5Y zcW>Wb-EZuy^fdk94r_aR{qC>#rgsGIfB5pk8=WTC%EyLmN;ZjW+Gc32>FM6OY}>U{ z$J+WPUTjj|P}wxSy}f<5^v3EfAx3H((w5QNKNWJU%{qR(U;pZ*>C+#6jXXZHK<)0m zMLLT_ew92dsNKycWwB}dc6D9dSnjM@XD^(nKHTX0@8_*$eb*M&td(sR4sYJL^!PWf zrNQZi5!bjU_-yd6xY5~uL*q+aPUYRByAQJI@<|*|Tef)PW@8^SPJvwuyzlkP%iGt* zL_|pNwcmbWp~ENlIBk<$zC!8U*k3aiRe0WEe|u);%}^&5;SRCwIZ~}cX0^Y4O@*|M ziGQNMv=QylL!Y~47!goT~G zzpvL)f1hh?RMaMo+nbvYPjBq;^7T!C>lU$BxaKbtLiYsVh5zf`Wek{+-aWcFmfS z&GRQMoEqa)&mgtx+bshHO-)Vx^KlVB8hM_oZh3g|)`I-+?tN_5UU!^Mt=aO;U0<1Z zlUc~7+39`3FF$+VmbbnBy49KW%$)U|H?~O^{p}JEb8Seh-{@RlZ-3v_E$!KCoF4KN4S&ABEbrLFpyy#p4_8|Ro;|(9 zTW{LzMdeFmKR6VWZ3(NLQM2~`6W7nSGrT`!B}hti@ypvC@&0kYC{uU;Y`l&5%X`?i$Pr&jOlIXyGA^GS2czD7Jfd+LwzxgP(5o+#0UjfVrHq*0YmltS_6m^tP_3X7F;K z17*J+N7UZvsniYKns#T^IjZu)>w=yXx1JbJ0`$o!G-n9?A&2O!%4e zc+=lykA8R0%-X(le$Sm^gCMcD=jZiBdCZ;ia^234Wg0JTrkZShApQ8~`&aYxHy@BH zVdX58*&Qbx-p2oVS&POUeHj5ch9)yUXPW?2f&KG}Z(n}wZ+GDqR~YA|H&1{0+V4v1P0VBFYTn-|G12Dv zF2Rkehcea~Kb&k3lbgV#WOym}_7|rq{^e74i-_sX3i`GuaEr0z(i6V>%KBdZEzN8@ zefHp+=zWFCe>5ddc>LKseRY4Vzu${{j=sAkrtY!(e=T+WbESWg#jk}k)pt1F35n+} z^;=ght+YY1cD<@~THwJ?Wm{erWxfiEO?&RAI{guQQ-M&_fwj9r7;}%Gten49P_w`- zX?cW5=C$7WTW)z&8XwI#Z867L-ZuO2lqpj44{N_vc$~2MNo99vPqcc`zcN1~wpX@& z{@3c1GBjPhH|L#Vz532~=}V_AyOpkrhEL@^SE&2;*jKf}c~8Ra?-iZVOLO`3=I1Us z^{D)7r|SM`guzdJ`w#FOMz08+i2pk4F{VGkj$>x?}}k zxV9><->c(x!n0TVF5GVE&$z_1{`%(fCiaco=7*STlH1g}0l?XP=w;=H8ZXOB<1 zecoWbcJ{Jk`%C!kpNW3E@YyKQ>=#QF+bk*D>8px!*LkKJ9gEJHnm*V3#^sWj@7LV^ zuv&guZyyrevn)z+?%K_JriaDxsjs$6`@1c+L~ljbuI*V-!F%sox@!KM`*8Wg6MIGW zUpD)a5EM7n%F}t>Vj(7fz@e1lIJo-k5H$zIva&bh^ud z^{uPkuPRIp`IR_5U-ncaf06wDg&a0lJ-6(yJFIoU_wZeD~u$VIOCGIJouCCBb!%Lkyda)l_z$ z`O5$MY}4F^S9?;o&dO=dCK;y*-HG$MmzUeNX>A zo|*Kq@*OYJT)*pm=|?%4ZKP%?-I(+{A*dvqdFvn9$gRI#{=PmVq4c1y(e~{8`%;o? zkLWMkb2mhDL;Lo_J~>CW>B`;{F*2-3+|;U-mOgv(eTA%DlQN2SwtMNN$G&{|^y9bI`gr*S&7GmV*~#m@`J~yiy(R1ZsZLcbT;AZ+<$GS*_^7zi!#md=ud+JV z$)y=_sN-ty0qsj2uY1^h1FiI;r}}S?dwc_~1{#8Xe~ z;D4t=o|{VF%FLcDs$_Vv{7sHdiPWZrN4FmHej##8VsCB1r9~AhwWOooZZZ{{Hh=#8 zm2XYNGXqcUnSJrXg@R9CS|9y=E2(u;<8V`neaF|}iH(=-Ty^IeRn%PT4%V8Z6j#f{4>W&XViJN7RmNaumU`_h@M>W+IJmB-Wut^WQq zY~}XlD^D*yxvF@!dQ$9GQPJWU{%_B#J~1%fWSnpFH9%Y-+(p_k$8CdnhUqcq#1pb! z$2T45=r|s6ed$uy3pXq+V#1?XlhU6K31f zH?fqb6*Ghu-7Oq#-TP{^H8LD) zHU9GbcqN*%Qf5Z()N;S{+U&4jl4^h7$~31P;9j%(uSc5I<_~*ZEes&m?3Uj z{H6BuCyT?cj$X+68uxOu*bSfB2eBIKB$~TBI$ADf-#A-x;c$8S?xI~j*Y92|+|a@p z-}0m+H9dXt#Olshd|3?LRTb6O`QNNB-evzVugc|;d%@dN2i*|O8}(fLz{oZPE^s{TA~qrB+hO3jr&!k#>Ks(e-(aj4;uP_oAo z4c_9ZR%>4T?uzce+M2_&LyqBbh0m7W)ok(d%ymaIFP=~T)v5V?+UG0nM*_mMtA97j zFz?L1KA}Z5(}~IU=b4`8CLg}Ol$Y9kH)^9@@54;n>vMPS$atx@eyQuD1BI_|X9v9Q zb{5@nV!6-6#h32QDX8w|pCjx4T+dQWDqx+2_|F|@s&}3XVPRvHeZwPj<>kgF_pfQ>seKju94_-OOy#V#y?4(qY*8d%2>a(9yt3XB7JT!cKCrFKvSMR++%dn#+mcU0oIZx|MaXi&%$O^ zi0kZJ^ocE|V&_iTsCk@>U4G>USuz-00zN7xOzjoz;Nz)TK6|%G)P?z5cW&KkcJae7n@Pu(jt(qTZ}IzjVox4VyPNzudBM z*DmY1(^#_>?0KN8q@(k$`Tnk1b&Q;q{F%>A%1x?mU^w0DzIl4l0?A3!S9vbJ#QkRd z)bqU`W_qja7W~@FC+qx5#?i_%LVVNIl%kIgC#}!E&Rlf*-j6=L*`AD&x8BSQTqpW? z=ag?}c0bLs{^@;{_22xCuczgv-OG7=$ROWwx4*)cLz9jQMCNU;rP8HF!h9)O76ma+w;=y{>c!^@y-yLv@7I6;JdFIa(I7f1+j-E zuDF(zSzjv=$(=pr^|y~+On2E+j?}V9d``EBwVl5uF6R=@Sw-HgBK2E4mUAZ=?m82u z7HVyI$@o(2xyv5Zag>thLak@%CsFXett7JU0uuldGomE#jn zHM3up6p((Cwr0YFIRQHi_uVhw{&?5D=`nR?x4Rh&|L>VHV@<}g4{zE3@3j8$zr6qc zy#EKj^jrLIo%whFbNfHma%XgMa(oQT^uo*}xTo7m@0JtR7FKVU<2G-XGp_LbZhv>* zf4hJ8j+cMF&$eiF@{h~?^*~?x-?mOG3cTc|SMYdm^O4Ij7yaywgx`tpyYbvWjf1sUtew+Rw*Aie z+b5lqlIOkaH_?y#Ubt@Uu3sxJ#4UYsFzQ)uM_@*Keo|7!6W#Uhf_9%QgJ-YsP!egL z{OQkkfw%wm%a#Av?7wgOpEv1e@arEJ|D-1-{X6^9U+4ea|Np14%S*gDES#aLaYBH7 zlhQv2nIP_V#}jLK6{kI5wcyDrF7aBsvsJF=>1n}f)A{`~{?0kre&*PTVKO1^|aI%Ez#3=Ym+E7s!UCk)D$%0s&aD+4HI;8 z3sem>GWA?4ZIp6`$0xZ;?*gk?HpT zJ@Y@GHJAL7^F=_SIO3tKad2_=zx$ePGiT5K{o;1}{8q;=2kg@fq&XxXZT@1Q9j$C# z$0f*JEInf<@7_txsyvM*?dN}J<|LHo^zA#-?O~bCyZK>wn9%a)R!8PKuMqlC^h}pu z^3jq=HfN*4BRfyWpZ9x~Z1YRv5lejWTs2ye8Qi9-SK>f{$9SH`sdEW^UEJ7_5J<#)FM8X-RRzrTLTWAV5h z5fN1LTjU}y%N*snKQ%GtXRchiCB($4an}E!OW}_@LW`Dv|GD#krjgz3#a)8z6_aJn zM0o_yoH%fyt-WXN;ZJ<;A4=Zuc)Z7c|IeSVzbrGT{UE5uRyO12#q<;V%#H}2?J@Okm(+5K)GZZr4u&(!yQtg0UJ+pWvb=KK3} z^P>lnOkVwVe^xvGS+~7?@_zyQnXLa9o*l6Me=2Lf;?-Z_GZ_RDmS$%$nldIcv#tqv zFlnOYl`CQVZf==bhqH4Rr>7iD@W@O!eEN9B53~7tGK|^#|7s}o^vvgcJpccp>meEY zzfV1E_a`uVe`VzPgMU_gd(^IT;AboFFE=>K)c!GV>$%9obKx zm6QH`Rqm+#_4H)8+~3uTTmG<>@kQSKo_^LlV#3V`nR!w5UyLLVHMvLf^{nAPzdqe! zR{XU6F1_n-3O0zpI=En2yB(v!4};astV)Y!d=6HaR3^DeLCZet%lhR)i>?IkpXuL` zuMqH;3%ws(X9PPIb?qQiuv_MrYgX%EKEXJd$S#P zOZ5ESX69w*53(dazx4kY$F%y=usV4^{@PcwXZ#AD!!_~X%lwVpo8@|VxstD^CO=Dh z_~gp5~MN7yo=LqqAS~rt;!Tiktf4 z{<23q_qR^=wv7GhvzAw{4L2UJC`l9$3#+Yl zkdN3=8oBSKkW%i8dM>VioQu!%J#O0YdZUvgOKS4dB-R(4FT_Mvu|G^myw>b=bARTM zM6WIXr>td2_^bQ3U9rf`X=a4w7sWL`cVcvO9*EYe@tLLhX-r>dXa3wg*7D4=Z}zYL z+jGVJcMbco|LCC{pMW%u9?oNYj3M)yXLn8wmT%xO{vmy6$?DVVzUwCczBK24SxIMBIOk<4^jp-jRPk>+1hXrjz?;NPYV4I_t1Y#~c|Era3b8TBc9dPp{~6ds9D2YSPT#<~M6BZ`Pmp z{$DjMu}tq={BqWR%`E5Zb?+J&n}1(_dg~vxg`ecpt6hASoPW((pQ!dXV$Qz`wZBXi z@y{;ud;euWv-tm6uY>aGCjXi>KFH6nyW=CmbjQa&^Vi>*CI{@}e*NU`OZ|LwV_n3n z|AohYao44O?*E{D#E4h?`~64Z@eXfKH(iT=$Zo&nQ2oK5d?!DJw|!VV$=+JwtN!Qz zuj(&J{#WvwSbINv)BC@#H*hh&x?lOxTXmX%#StDu#((CMUc`(1-5G3P+_+eh`QML2 zh4#j8<4wQS&$sv;E_U(%n_ipw`UbU;xvH19ni^f*Y}fOxU`DU5%pMlS#Re@01W#|D z#wU_;rQ^&e0VD5j=WB&O9)%uR(m3OPQt9k?^=E8+iRnw&BlwQYdUJuv;6p5%ktcWc z3|SsO_cX4}ikr8xnL0HtP&a0o!?A_?OmZ=I@vp_JC#D!&c9vqC#e8pz>HkT$|M5?{ zWi0cQ>G@@2(Fd0|3qH6kI^loNT2p@c#d?p5(!s+O2(d*lw=N2x9qb4kRex*eJS_9zNi=8&}a2M{INiik=!vwt4;QOrvF!& zw?CbEKt_Y5PG2}2* zZ;fTk9QTxn7Ajt3I`Yw3WSQHaWy}+q6c(;q$^2u>ywrD2E&k7#kkB&Y@cpl^ z=C4Vd@qd25jLv`e$HykV{uB7%htda!9EKfbOW1PW=n7<{vsgP_J1pCIfUhLwmq2hs zo!A4`9eV|TbW44lw$@apf&WZMKhKnIfi|=D+uZB_+3UWYv7ejwms>&h?8UY#?REcb zs0nX2L;M{c|}l3&FeJMDej+@4>?ix;@}{0y}+S{85fKz+5dnb`uq zn>YT|ujPx3tQUS6IkW#;iBiV#{~jWnitF^b_!S?@t8>-waeSnIf#HZ)m%h$}cGmxg z!>sm;H+RhYGgLbXzvVaI=JN~vKWSIDKl;7@*4rX4#4rC}yzBgncs+?%l9AD~oMhJ2ACpr2 z!SkcV_Q*qzt2Y@|T>iaDBQ1L!d(sMChESK+k|&nroUprZSrK9SNbKJE=?72p_4>Ni z{y3jFvwiy$#Zw!%H_V=JQ~IWaoF;#^k;`>~RUcoQp8mf@;g9`(pP%;m2cKJh+R3@8 zy}VP|gXvLTnZb!&1{XTcZ~a&QCiZvnZHr0!=6_%R;B1JmYG1PO1Lg-QlcJ7>358m2 z^Pi+{9lG+KeYNjmU#Cy9z4KL6VyEZcf~Jk9Ha-&*UHG(Yzpuzb9`|KD zx@T>J+vJuj`t}NL3taQ1YE}@}!-dznI<|QUv`v-}>s)DYs!sA~g2lW8I(y~fIm4y6 zy$%1&-LvqFMt#b)6CR8A)Eu04RLOkLd$lz2J+>OQpOoBp-@5So=kuR$`=qLLPIibI z&5EC#F>PY-360&eF6+n#ok*|a-xBForl`E<-<2beT%;c9+-lY}mRWyeeXLD-#yrli zpOl!w&-;E_VbgkNil85J=kZSg%PgzEyG5*+ectuXr|4;%x_Q1ceq}^%3==JvE7{I; z)=f{hCuYy5TRQ5iX9Sn=Zi-v4ar%r-3R`H5`%len|7&i`-u@qKW8MGg$o`!(=K4SK zS629P`_GQXStF3cawU%0G9rfKcTVmSf4O3WJQ>Ga+T-&y|usU|yu4R`dpBFVa z95M6mGVh2+Emw|?qxvr-%vUmderw%SFQISJX-%3L0QMR%lSpYfV` zJ7aO}%Kgo1(=W8t%*o%PfBNU_4LMUov%cSmzI=@}a=F{l=G)u4Y@e~dR@xeS>z%57 z*yM2OYZpI!i#_q;>h^-p)pvhJM3k7Bh(5ZO6nFXJ{_8i=V&DB((I_!T@5I5Sk@iN( zau27cAHSe=`PS!{*Rxe_FZ_RH*O$(yo+E)1Kews}Wh(sE*s*_3)5fZJyZ%GxUkepH zJ{ozeYSGQw1-Tm;=jB^f9+*p1x&k$t_*!^|?hL`NEuT1n^rsVXmne+1b$Fr3ed+#4a&S-6K`U`49hyiq$<>^xXXF(XW$dzxK%UTvpn`I)9R-W(Vt%RyUS| zTD8+8>y$PL?=YG;UFh;-BMHCbiGGn0E9OU;a5+B|+_Kcp=3CF^u5CeE|10V2bm3<$ zT+?>r@D8;LY#-N%9An#Fdvuxnp4#iHj;5V+>Mpu#X8M)k*3td*?!_F~5$)`Kf^Yxx zs6$%E7rC-F-bnLv6sVlDer=9G($lHEFXb1%{`}z3{$Gz}K3Sf(c&nWySIq7bDS5I& zXOY62<{Q0AhNrgZ$Ne=Dz5AC-`SyW5Rr)bvM;AJ-a9nt9AMe|LIMiofDN)IapU){hNMxh3D2E^Vgld^nUPS1#(&vt~=j|(zf6@7`a^3LFq_%QmWbA z^DZHm!wLkOeou{RRAjlfL-d|Ux_JGu$t&-4E7jcJ^8M+i1)kakEeG}oX;*L@T-^}x ztNqBF|B8mIH%$MpTEt=!el-4F&L_?G#u66oU0M=sS;-n~Pk%+c74due>U~vB;cv@6 zwSTMvZ+~3l}l7D1*oDmW1xB}QNeVgSJothZ%?`JeHV{!J^%c_@cZ)JQj@qOJp7kTnpbwsP4QoC z3@clZ$jT)e4TayY$JgKeyY$}Y^_$KYzyJN5;n`y@g9*z#RDC%mjzvFy_u!mG>lN<` zSxKY6LI2)6)K1$Mm-e3h*j;zVq=mLx2@0VTwN?cg{5p2`=v+g;?(T=B6GdN6KP(Vn z|8K=ZjdsV0KQdH5dP>Mf-f@k(!xLv7IWhdH0m~EXPUY+Rq6QOOGflgtR&lQrI2Pg< z=<3F8@L+zU0S~V`D^E&b)Zs-F?pn`$xmL@itV`?J(lfU~pGc6{snmPNyFUIvAR}|+lxrJb%r(>z*{;>YDg(Aew)>vs-LHvIU8Ooz z?D^%^pKSl%()?NTaC7ZdQTcKsh)UgVDfMG_w@L|ze~>z$ZSw9|`LV5q-(w1oaKtqh zn(s8O`N?;<(tfr=*YQ<}3f-5i#Qwf?KV8kpHT&1jANyC$_x-o*S-nT?%j2K@wO6(D z_`H^=O!l|r;g-C)D)CA4$FFOxZq*chxU#_MsoicVPtm%v>^Z+CU;Og(ftpcA5yN%s zci*jg6BLxAOMCXbz2@MyElc8Or>c|ueV^pVUmsl9AFQTO~j0XCyep@&cWwGjHg z-|b+p)$W$I{S(`^MgB;C+LK@MRQrDD^vidzupe{zCv*SIt3(CmXw#k=%RaZ08dGj7 z?mo4~VqQ#NT2gfJJHfc0Uj^pz9TyjWtiLia!X#+hiLV9|Ca#ro6Jw1(wt4<`GqVX3 z*GBCv3-)K_Nl97VHu2;F{#xBxXFBiTfqQG4 z8hdiC8g5!xcKpb(MGO;O7aN+1v$Gs%)p47yly+d%+D4tMs~a?Qx3OKZGB@6It>L58 z-Il`4<|_v_Omux~wfEYL?XRrXPLf<0a@av^>+8spLVjVcyX<}w))n$Z%s4)IB0u-X zpHHSPQQU4HntQS@H@vQr0C_H`W-erQ#u zln~pOZY0C;Gy6E)PF56E$+kB=ZP~kK!THVy z+qI9DT)L37UWjeeirD?u8$$1a94I9wyYDq`&%u+kAGZ7L&vy8=rT$a)`wi6@d;an6 zdm}Y>^TXYf_kBEHU&i)fYe>$y>%~$5Q)55~a`i<=VyQXpTd3zsEURZdg`o8p`^}PONswW=J4?XAr()Q&^ z@5g<&?JL+TOXI%xRUN*cQhNVO+wn!K@)xX=eZ1we{5QUHeO9%PzpSaRGHN*1WM=b* zm#@!i@AtchXGu2aWL@8o`CcL`yQKcD9Dnb@-RCX_?sJbTUnps{zJC`N-+jo2 zbg`WdI(>{|)5_Sx%Pue)C@s+JE9*U&`F(-9(B1lyg%_>=-Y;`KFF!|yf7ky~w*4&e zQtflU&)t53-G9rv)eR37W?Px&tSYzZxzfD3?)%;h*%uoQ-h6#kHS(f#NBoPGtLk4cyfMC+o@C*Cx+6uD2kbcUjGS;k$;ID~y^#5LOPF`Q z7;ACK1@GsZWenNhU)s29d&)A9TmHtq4)eV0C{~&k5n^A#tSei>U&_Y5>FcHaQnB8% zt^O)4zT}=Fu`WvD#3Dc5?sL6H%d3yIhcvKlf35KbR9wxK60_}C%*pZT`o9vheLE-o z{99sJz0mHSxBb80XFtDw>APjRPu(w*YQ@&)_r&trO@uY3AS zp=bH!k5Age?U%)Aq}KbU3;L|sdwx;zscx5hMQ_z^_8lwTsl>a}uQ{gmXLjs15AAiU zxAUJXoxV2aNk!Gh`j_pKKWz)S*(26gD9-Sbl!R&Pt;~fwLhY9sJ2^foUH5%-gFk6<;p~XO7q|8q zaZgYFTk|eb?<-4^#&hv zh0BC8FZyqN_GyBUjd#A@oaOUkqqhbct)D5wcC3D%N#FUtzAvvHw0xekb=BuLKZ}{! z@4a~(TKlv>s5&o~^-*_b%)PxDOt#z1QZ9;RHR(9_1Rr=@RsP__w>@8XInORUGRL38 zFAlT+1&b9Q!3oNmN7e?_LvmqmRI8>U{c%iBue#4 zxuN4>H;+?HTi(n5xwrEDAOp7jkihN|yK7&))Y-{Xn zH=PYWvnvvF*bRc7PdC3Topp-!k8!ietQm=+Huuf-*ima zt-{CIcz*NgJzk=B-x#f0uwr4Lh)VX$2lG}Rkdb^Nwakv^!UWDqzYH8cD|uwa_L|vG zxU&DSW?W{+=KUAnHUzObILid3cLe|c5^OHu{mpfixjTo{qX|;ZbA0WV&Q@m8EmT`@_~l`p$m4pg>TOJHelw(IPxZBX zy0_C!d%~3}9$im`m9^7l&#!a1I8EBJr{SL8&f}T}OY?v61+0(^xNKCZpm{4WZ|AiK zM@1#_Et$@U>`k!MoS-Ym=DcZI&g;k+Wq+GHtxN8m^RVj+J^wx|>bAxc8_wJa7XkiN zGRLnli{9o`ns;FLjD6kr_RUL?F6qq<-nWu{*6$bhKU&<*s<@;P|MJBDm3na>4v0^> zz!e>9FO}u*(%!J;xrMKyNz8RgQGp4uvfDLVmc3rf#o_UYFPm%OORE)3OhP*jOP9Me zf9*_pU&P^YuW#M%N1ECy+1I&GZ46viHcgOOZmLtz^;IAKOnUKrI?H)|MUW>g*B-dD z&c9QfA$6AH3&)@{Gg_<^z9sPOI5flO+4hIdT?hPjysff(ELSky)p26K2ImgxNIlWx z%_qbnCFZ8d1TXi0>?xs=y*vNu-VmFsO;1*3mrZL~AW?CFW!hAO7mVk>uYBJYm!jV3 zZrbnhx$K6P;j1-0$5STM_=skEY;UbnJilqGxr_XwIA6;>0fs60+dh4J?i{jaWr{`! zPbyP%<>t?hZb{6Q!7D_(B$s(h_64=Au62<7=ADY=bWtB`&w%GDUB3GubjtAt&dk8U+w$Y?B^8yZy#i2Csp-7 z%(&ctJhRMcOVg_+u+NQDdT#NHO)TEFom+Y0=@MqhO8^tT09+fefeqcG@ z2379E7kmy)_^6_G=liFbbzZUhCp*_(t-P0RVy(66NwX>vwXvb@InPUs7Skbh7$Q$bnz!-M_W9<4m4Xlf{#pO;}?Q-Jk(fo^)z0Jz%3-uOWh_usa^h)ikL3Z==j;}UK!dpkpn|Lu(1hx$%*W;oeI@Ym+nyxn|v zxxxRLJIi0j=Wpp*`uTp*m!Ic3vY-EVw%PBHe)@ube!Yjdetzq%{rvLVSN$yiAo9$< zRNm^JbZJa<|Nmz*%B=s(KgxW(Uvly4oA;iZ{fd_UySDe=x4&-nlT|j9y)l2aZR7nQ zj@&oqE3YWDY)#s~v|q^g>-ln#-@RKm-YalP@?!L;rLp3~bj>MtMS{@Cb%byyA_1>9w)9s1~hgFWzuCD1*cL-d`t?axNzh3lP zZswm|tsVKd%I_KVGq0>Y*1u2kSLf@^4Hlipg`T+!ew`uBe&u75Qm=SQ-Kkm!xnFm3 z*Babt3Y+tLmCnzli`-AooppOM?}pCXlNYa^x$EcpqyK)MYd*b_Jwwvs_gOBx8~^6B zO?Q6YJ0Yg9;M&f)3udnFJJH2-zQ;$uXU9tyv5&4B1Rh1sJ3rasMfA-FA_o~-^d}dn zi0%1Qx4tWD!>rFbw#!7Ta$BBc$*m7tJ#ntU{qER@|CNhs?8|hf9ntGv!5P29@VHd! zyj88w`%AMLjOJC&R_LjmuX5#kj(u6|Bo>>_1lc3Dm$zvcXFg)vY3Hebe_c%Lu60oj zJLBdrO7`-|E1D8?J4wV%`Rktpoykr~QibLnwf8^1y-~iw)h&GS&Bd8~OVa(!EFCm_ zEf$~YlKkr19Vy3e`^YHE^~g4vSINasWLB*SWfoDIlefj$S)eiO3CqTrJMQ#5ojR-W zF-QNC?L3Z|=JJm&zkG4|>h)Kba{C3Q^xe6Y@;l1!MTFhgOc_hP2A(_>c@|s z;c8M~nfSK)3aj9=<7V8tx66f3$#&(6cioohPt#erYUOY3fA-(zZ9QHnee(Th?Ur-0 z+m@fd>>RX6ZtqRTrn71i3e&mOEFU!7c5Z&O__oCMw_ESNoS9>`|8Lh4xhW};VZZMt ztG?ZsI&+QIq_0UEvy7`eS~E2`A2T+yKJ(Ud>T_=VtMQfjl~hwYzLLcJ$k-xs|*?uXcQ z|1-ggLh}zxv&v|we9-hb_=e%CdRM`lRb4e|rc3(*1Mk!An^gH1yAe1(%fb-jPv zDo}nsIrQ2L$LLa}z=Jg#79VnWd29E?FT#s1Pvuh8pAsF{?$ozZ^$qPPLe?Fhrv!ll1FpPxO}rM$sdP_*$v z>ZYYF4;QUu%AMYB(~%M+xmv&O=#zD%TUx(dmr|7MgUNOZg*>t9#`se1IYs-A^ zZ|aa-6)C;Lrkg+i_5G=>N2B;pzF#O3Q~5-0yZp}hOzVH9{Fl-fm-ZYNGw@nl>i_)v z^yy97{2vbAzSS{x`K!Xce8PJDyB_}v{LcIRO|X_Lk5#mW(u1~z3WcYp3Ryg{nQEgO zKJ(9U?%2eqKWk&`_wRo=Pb`#?O;tBg@q?l2q8Y4)ynj`El&9|ab@Rv4qV-0ajO)}@ zZ}eFD54@=?}FdbwCaz0u#0wXLV5SLK=1+2byKLG>%s&)w*exwE{-rSnlxV*Dx# zFOH9_-&hx0%Ge=pj4<^KiG$9sR;UOxFUeUiRjPE)~#(;j&<{?4AK zdn4@q-VZ){Z}-Poe3dm;jZA;aUd^^8(`rF83x7@4<~#GXdt?rW#{WO?|NGv5hKrVL z{P!{P|NYZjU;g?&eQo`Q%e~DD&M_89@N+C;7MjR-@`ppU|CU?AS>H@1D{tOkmie-ReH%VV z-FUFzmSAp~iH!aeA45Iq*hVuBj=+|4YkobA=ly$r`EBh#Q({;Dw0EsL`tS0e`AId` z{(mc)``TV|qxt@Q=1b@A;SV}FQ|5EA;0g%(`BJPgYPZ;xKOY}9p0(SpI(MJcY0I8V z(w|#eW-e+!QS9En_cMd6ki~58_?MwNOR7FAe7(~e|2HXri_JQ@<9lkhorp}9Ti5H& z%D6o%RQmO+z+Jw&R^^2iR_ww`-ffljQe7{XWeSsbS(I1PptRNm8vT8GacF7R#uwM&)8t=snp{^YHJiT9c-e%f5d$+Lu2o+vL;2U%N{- zMfk|+&G{2o^rVe_fyLtK+p>Ai>W0o*uG3i> zof!f@HwJaNJFy2%XgHL9YNPyV3r9Yl?cHXx-c97Vch&DigXI7^<3Yg?_rqzLx4OBtPeijD<(P3V7grFGF6=clo9pM4nE8YhcfaMbjF zklP@#664{4HEgg5H8!M`AU8XmF?e zDLN^tea2#1OhDHp4G-lAM=#gRRf|-*R!x4bSIiaBm6_h2W_rM#J?=lhD3jQ=FSZ(Q zqn4z;n(%#XwCJIZ4dJR@IcMIh8?XMiPBEg_0=VlHr7`_{P+llb3nTFU&sC~&@}v}u8PjK&7PS1y4!*X%i2WA{_VSH4|2kz4=F zlShTix}7S;6;8FTbS-@t`|6U%nc044+}7{>8Kp00R>rY^L#TAuB<@s0b+hk0yic62 z-`pgpW?1!oYs8-4R<+-Q|6Tp_?Dh7Q-gALPCC}L9&t2kEe5^ zC&fK^QMW;4-J@T=vRu{)k-e*|Jl3{|O6lFLjn|XBvQy<^sMNz$TQf&62-uwtuUgANI#f`@j*0vvbePyC|^Mgyos4^xdw9&f(s?zmmFU zEnBrMDBM)o8{3>`ircyOuAZCPF_A0j=$cakm)9)x&vsn8)iS-?)p40!R^;}{ zOQr{0shbj`R%SN$^pQJHi*z;x{#M+htJ8$NV$D9WO7+%F%hfQEw-&{_m+@c?|+ei;uivjPShXo>XETTVMKzit}4 z_3x6}#XZ@w_QBWK?iD=b&1E;XobPw+fJeJ>>^+;{Kl0D7DH#NK9eZ!PnBn#Mrzcum z&+qk?)>-)ao0P{{=EFy0`mVfo?0sv`>#m${#FmyDb>)1x!H(&RFWUY1&cJeXU5`oc z&3zKf*OjyCrz>Yly9Hg|rRW*5HSf!fd2NM{d6sf+%*ox~SmLs2?T1GWhibBnm;0+P zKEF8eR;KDNUaM!F6Q0)?ZJqh|vs>6hIg^6po|E`J%5)x=y)wD(?pOZa`|G63Kd*)A zt+t+hKK1Le-7)H~RL{QL+G&??@ zzh7?4(>KNHWT3{9GF+-pw;Vrsb*o>IOwYTjTgekv-(UXHOh=^I?0Vuq zh8gjb+s_E?{~`i8^``St~YO}b0oXaBx7V~*?MGrOh#X&s+uJ881LdHZs)??8ANbGt!^-#rVz6-6^u#%l+ENepc1f`o@cz4Ce^f zWjmN`X;b_6Q~9?0eZgcaw=*Sn71Uf!aeFTG?%(+1}% zlh(A!a?fVQPC6u7$s45ewpM-13a)i(vTNe=Uf+0rXj$XV%lElzqHU7*E*3xbY30Mo zm!-XPEUsPtu+AbkN+6+oA(s`u{hm2{3*2Q_2|U?&Y^SmQd=dS-3&o!~M_GLFasPX_ z!s4T>dEC;8^YZqbSik$@oNK=-KJMcG`sLFj-n$IF=eC8jWXRkz55HY4J@2r|w+;Cf zNyi>}{L^w@o~6MT&NidtVT~2j&+T((2vxAnt6*wPE9B=o#B^iBiDXr|<4h9&nJgB# zJ-Ai9|HG!okCzqC%~Isv|BYwwUhmKSnU`hGTzhNdn6c{ucRLA5mMTdapR;taqsIY^$Y~8c$wL z@w;%LJ5Xc#@$69MzrV8c?y_fAXXahgIuW}4+_B=TZ$q~G>+U*#`T3@E-^CtHIe1HL z<>w1(((O}P%_Ze_8J#$}rgLY^nbI|a24*Y$CrEH=ElKKM+-kS#*NWWQ3Bt*5IraLd zU1_R3^+4-#u4eY{p9*ur7&B(*cc1tDxrFgd1M7pYn@bC}zno>T%y`e7pZ~*Rgnhd$ z82nb8Zk^)(H(u|yxqDHT`>tyn|3}-TozXfp4YuKdXwNu3lO+VGQxd;7!8uLF< zf4Ym-f<_-9A&(Xfu|$zo9vVW4a)PV)c<=wb_4ewS|J~o`{h!|Q_0M~eGUtB^z7Eo?v;?&kp8H- z%;#w3sgS-(CkekDO9EwTk+k8mgT;^U~QvPi&K#*NCOfRT-v+b>kipAHrytw@_?^=|WMzEtmyG>ZKfA!DLCIl&YRz_LAFwmBQRvlr%yw`3H%#E|h;LGK0%q zMo>}dVYtOxE6?(B-z`}N*Tk+jKTw#c$~_^7GbyMoQ|hun%BDpceo5lWKl|Oys?=mH z>e_N1rA)uvYqeMG)@Q!uF^3`?{z`73s)m&nz* z<(+%?^1htT#Ox2|TSX@w_bS=;Hf`$3HtT40cS)OzX4cs+-m3`untR9S>jnQW$?wdF zS+pf}(M=QQ6>QwN%D-5?Zpd3jGFN?QC(3>E8wzej6JC32bsvP$i3-&7HH z!iCvO{^8Q3MfE#kwy(VD&9vjWjMeOQ^NKgLy)NWzezd{4^X|_zhx=SFd&)`{JUhBM zDCpUz)3$aA%l|G64tl3;x8HZ38Ow`>m%Pko=wDM}iuI>k3~p?bsRJ26atix%&FD-jXV&wczD--DE|4hrQ0+p@BcF8F=;^u}9J z`WHN2eOvQgXj0z0r{|XSU-k|&?kStr__IYeKKjIgI~(}=Zg1SWo9C#nn#2nuy@RvZ zCsY|8Y%ZMnZbe62%(7XUvVgI9ai&F>%fk|p~PM5ORz_gN72$HoBuvOw`_w_ z!I9{uuN&1vS2W*NtNr0KYYkW1|L6R>ZwjVwd)B@7&Lb&aSA)dV{q-;2C4af~E{?Au zt;qY=opr*;bc`x)YDX&6F?(G9N zYgdhm{cTNd&aYEK70#~GU2*TyEKB9+N2*zdM&~nB*A-M5$DPkmUC}aUZD`lB<7ro} zHR)G%T*|uhY)_EHGI!%ZR&`;SyEnapQ#+hypL)FCe$W2D5C8Vp|K9nZN3B;f=GgY{ z*(dY2O*vk({+jVL(>AGI#=gDg3f9USt2HIB*7(ltmEYcWQMRZ;>gO!24cm6QTt9vN z%9c`prTE~(e0MVUEqmHC^^J8(BKOBi=`^>jKX+D$wn_j0@%H{c=Da^|C(dlVeUT^Z zc0;Z1sWQhK?H9}C@4q_wVlB%V$=dYC$9MKF^N)+#LI?nicB{P^&x&c!XI z3+n&PzyIg_+w=QtD*iwIzE^RrgWC_N3Jd(ezeCl8l=xmn1t{lukP2iJGmvh6if z>FE5vIrhwZ^?v1v+)B}ZqUW2eE?r>Sm^vwAyU-q)LtPT`earj1Wg2sS7cwp4?${u5 zLiWV_z6`m|tZPa;L%ghSM2p>?b@cFQZh_k^QHiQ4zbdZBzeq1zG3Tt>=D$BYuZPR} zMLEnf{x#3|SKiO8Xa9Nol>X~;p8sk8z3^z^iX<`NmXuki6vUWX1639q_((iHWN%XQ zJbQb1>fh%teYf9nKmJQy!u8xQcdP&Ui@ty=t=QLw@)ghIC;fe0{olmR;nWXzhu?)d z_ju%Q%-!=*E`9N7`-95cSBgEUulk$*`Of74op<>*Js0-hmfpYD(5rD@>swjYZD(fx z{9vBJ{QI(hecjjf;p=neN5;QnK4BNoc=V@TVcq)T32FW|4J++f7W3Vd+uX9{=yRP- zB0YAwIU&*#yr1LTgtzVZSR!;gb$``j;ivz0isx=A`>u9=&g<7_cHVqzxnObd^LrJ^ z8{V$^uz_dJqVmaooBG5v@+*tmto$SOU#6%;HRvSF*==CefA&cT6YH_bZ(<)ezC5z5 zaGzmk$D8XlMzhZ3?OE^frrvq~*6&-^{z|Jmf8+_L!`!-01>ekfd*4)DSn^=1{tK(h zw|{&*>}DEfFN%KjV!c{Fx9=ILy$MYwC!S5vnD5P(oBvLIf78?(mPg-*Pd@SQ^RwWo zEM6;1Ke#t+{wW{7`09-CAC;!MMbBs-}!y>*_=OfZ9@z77z!Y05i7$klax2wzlZ zo?A6RexAnXrQGJ(Pbc-f^jn>E?48`34SwlGC-2&L?)v7JExsx5z@D#hq5GAemLCba zzGfrSFZSCHZm<4dvH4|b>C|2iUY7kV2lHRvb0{l)s=J>n{|o=&l4EJ}qvec!b=Va( z967?8HyCSO5MueIqjlivsTHE((j1ALP8AATE~*@X`C2vUpH?;8G&5f|vH#wp2f7)3 zh5A}YR5?C2u9z@IK}A!XOVh)tQ8&-~ zg)P{4;@h6*Y5iGNlC}G$CmnM;kf5$CEW0gXasP++bFVxvIIEz?zBt8m$5hp~jZ&)7 zht}qt)M+{R_U+q*0&9cy@9rgI(P{{O9&HSiK^jgAy)`1o7C{?EtX^53rhjV`-iSzFD0;7={D zftOip^vx-3hkxJu{dfKTYWst`_aC_bzqs7?T<+}?zv3Tmz3g|#g7afHi~i)978TEY>BFaTFwFM$C(p9WXFmUZpU*fcic?9^Yh%sK=hx0fO=>)v^f9sVFT*^R zu)5TGYpwXz`{J+K_c#5H?-A1emJ!IjuxpEB=*nXTJNED4Ulv*_wNL-GR_JCax2y5{ z%D-fUH7k9%81`Uu)|Z^p>7k|DKh%bYSKeLI7WnhttBqImb+Z(@E|rP!p3>XlX8LTY zR_fHBT~Z(78?spX;#<*6Ux<*n9HCewNc!TUIn` zc-;=XB4Qm860llOCsb0WcDH@_myAH>z$w21zSv2u54|4RD{32c#X)4LoycDPU%OXt zT;tv?)v@SG`=ak39{*GSUHtR+^0w>Yan*rkNA>NmLJZxjAvK5fyZKW8n8V*W_HBMp zS0#Uk<@8!1-@Mn& z>>gRkLUQEw3tn9S&Cf zGi#QAmuK2`XTG9{-;jc{moKP zGUivB-L?M9+xYL#q&rTWk-lzsCA?dz zB;@bqN=RInF3igP@#urC3lg{6P51e+CzjVG@SS5|*rg|D?_X8lctv)>q`-&WhEw+5 z$j&>EEcN1bjg_%D+xecT@XOJ~b!Wa@eY+h z^ybN*rRPdcFJPuI@5c8|Tiq{Gt%XE&5v$$fEe7l@IW8zaN-cVCWez5cO-FK=2{NbZsEd6@io zv-9dFzvgdU*_d(4HlymBTE%^NxxLMss@AisH-B`$eaF1{8m4iu?B8dL&$e-#K1BsJX@L#s53@vh0h?_fDStRIc(a zyYZK}`Cq(C7pV8KAO3gohQyj_WX zZq__|D{I-W|DQA2vE;KI-}`+pXtC^^b=iT=3bVNQXYG>ZpI234_-4QPwMIVa*gbN+ z?2o$(?JKIw%5r3juE_thv3S)V$EKcs%=JEt_~N?TBI*LZt?a)2)sN@p8eie(V@#cW zZifW#nrt4w<9{E1cvNF!VQtHCZ*FbFJ?76}7TimI?VP@R+xlD9u3-C`)aUTp&r*}r z-(XiIQB!ff{d)Vc!UgWf4$muODsFg`vFDFrKt+w2Om!{9eM#c%%l~dyZ{Gg*^5T6f zADq$nlxXlu{=f=}o-^!hsh91)IK1V)oqlZYK_j=EVCIV<6&FfakMX^oz{!^1bnoMN z=Hwr%v?LZUb~K&0_PEU6)iqy#woOzL@NKPMU%GyQo`7pByX)N}w-?$T4Sn_?A#ZQc z^~tk$d(Zg(aq?Hby`AoFj8E^$Qt0C1?|QVDaUQ$;Do&HXo4gO)Tg0|##fJqiCZ0<- zn7BXe^X->+m+GFkN!(NOv-0bw`|s!7J@fw4^P^{MlJCq)^iCDBoWPEl+1*PB5zIRs5V9beA>0|o8_zf*Ui8G%;3hW_N(SAn-hdObGzpH)Gk#r zbGazCbe8e_eMyCD+zX#486WQaG_}jweA2qBg(|L|&!v`sJ}n-uHQV?3ysTsy@xmRU z7oVNjw?5&^ml-*s1veSvmR_t*-W7VYE#j%RM67*Uw5ZMH>1C=fwPlX`-Kl+}BmVEC z&h%Q-2L@fc`IUp4H4kSO%6JuiUzp+*C&Th}YM-*!JG(_bFZWAvDV~X(x2Z7ZXpy)5 z8cVHtmkLvkbsA@>^65(MdjIgngxt>uy64Zcdth^6#l9nrDz!hiPg~Ere4*XVjbFYj z%1v|aJnU!3*S)YZY>I`GYI!x!@o6IGsy%Bn+nu%+@2!cO<$hIpsp!d|X=#O5n&N^&Z{aeVAj{I_&}&AfA;KJDWA9MZaqwQ+e+V5pSn7LLU>r#D}) zTkW<%Cy6USo0q?Ko}u8B>le3Qce!y%R5rq|(zpHj`4^8IZ*RJg zILjmA(h3#U;)^aR0^CnD``_l>T6E#nlbY3;Z(?UJO{enU@zdwF+BTaaSjX2HMU|Sh}g`(!Mzi zH?%)A%m1%6-&vC~*^}NXz zVyDWpE?rJP-xR98pLbqQ-3k7>opG62Z&k8=#a1+aF!PQ-S6aN>J;G&6v2su8gtnI% z`*7b8HdQFJsSd^QguKuH2c4hWb#is&CvaG5)3_Ds} z1ZJQ5d#kV`#92Vx_@#5dYl=|Qj%?Wv=JCcB6Wll!U43AGj=kWEz{Z1@);?x`S*dVM zckKb&5>uz+>gygWZ{&5^Z~e9DOHl0p)ipERHwV3Voicg-_ForPzq+XBpO}s1 z;|_ImrzFV^>#G|WyCxX1ExN3H;xW_3`^wM1%{%qU;PBMFQ&*kYpLpT^4PTFoOdHoM zG~Jb0D0-Jc&&zAGjbD+FXeVFfG42kgA!*lkXqQhY+iV}S*x^pf|0SE;7j`L4pA_#A}9I{erbjJb}ilQn4l zkXW=M+4c!lR4(001WGtFCRvgQ{DuTqYA z5w~{V()d~B-L7*bXab9XS)T-d>Zzi6M>dpjbL#UvK44Nhd9I+FWck~k4Tn!z$|)ZW zzx{glM*~)Ck(nJ`CZ{FXMW)PApOUI0oEBQY_WzdEUg7R77GX{?l3Q$QU)2c&cI`A| zn$+U(#rmw~iiey66P`0CeNU(;p3-|pR-n8;K7K3v29HyWh53v+MR^W)HulXoXOZ_< z!MIV=!F3gP2XFr3{Ni#iS38alJNJ#-eOB*0A35O)+r%TKoe)5XKj4sdjS{=TTC>*d_N&k_7K7&=a!P2JJiwuINr!*|c%rawKxTpOt zi^|RkDnVN=?CeoGbxG$+;T+9*9#X~U?wsA7U&CL(d)#0v*P`-QH4U|a>7Q(PoUR`? zILx)^b@GfP)x55$30UoWWyR>R`bEZfm!?cSQXItC;2cIkQ zIuxSPBOKwPa?Le)+rnb!olk_#j&HdrzwJW8*5aIx+lu$a${!U`=+NDF?Vnq0!!V$)eYjXIk{WSBJ#*)pV@a-Lq`f=67=Ciw?;cbObE>tamQt z()>0}ebf6g6Aa?==LAg4SgGMDDyq^Hp>jH5?zE!~8(mhVR9^eBb(hwPBj0;J-ru?V z?w(8Re%ykSRli477w?_?wJQ3zBx6|D`ZZ?J>&0vjtrWW$lN{v+Ly9rIl@}$2L5B6MWgLE6GX5Wj@=E|7}a1j+$To zSu-ilEdPFh&&tcZnqQaB-FHfQR{2kjXO}XkddGiPzHV!n?6>G<#Y~<`dK(G0v$oD>n*aIFuQxxEcZO{b-1PV14e^U@2`9ch z={(+~80%!exPr5m{r8sBZ9<2w-uQKT)*37dJ#_Z6;FLZ~aigFOUlJ=>yk&}S9bHwO zaN6a;s^bTKDL7cDlvZ4~Sh&WKM@e>KZ+*u9GgbeWv7K7g7_&5Hf=#ki6x;t}3(uu2 zOUzPO5YrS_IZ>ntAh?-3S|{osCzqa(Fl?`S%2BHt$uhZ1h*J@D$=|8i}bteus(d^`E?zz(xKX2jKFu%z5eA?tKbrW75 z+WY_2`ELO!p#jrF9Vdo5&W;e3-n{Dff+r@$;hK{SHCBh)Y1h3`Tc){5(&0|><87%2 zwwMaEYc9Sk)$w@CBkwhJ_ja>Keh!`FG+~Cj=INw}>29q7l7`-2BPOot@Vs**{N%Fo ztBWev`%G<~-nUyRziHPV&aOS2r^*g98vnX}{Qo4^yAxYQI0a%$1z2ya)7WrVc4^%V z7d5uj-KuNr7yK+1lDS=YOHgg%7RT&M$I_Ujy}6G)n&R>yUg)^t500g)I#hxe`hC7q zcw(vS9QTLZ({8KyIZt$P(iS>-c-b4xA`gd>7~YxkTaxPjl*jT$Ds4&XeDf&FL_#-U z^Wxo#zgs??dvnFTeEVC@$!GQ2D~^{R-tDW`{^D3{iE|V0)B8-j6jj^bd7L!VJKi*J zZuPER(u<_;cjSF7@n%T&m}M|in9WYDGmW!5F;&<-D07yH@AjqVYcEaT{&{`jp0^&0 zdi~nZC<=UkSaQN{k>2kPrQaM!@(;ZH;3OhYUS=h?r!6$qefr_k{tkDNJ#N=(-q~f? zA-<#`qIL7_@8avu>NHn0l~2koQgP82d>dhVGlYH7f)(3qt#Y)bn)a!fqy@TN)=BZ| z>}e~Exu7B@(7Gm1yY6ev<-PjXZ?&(`O1Zp_Ij)fD5nFkTRsWM+TycI(kC=CL?Q~qX zc(+1zpIeH%=po-yg*w+QC+B!{FV@rTQ_|%-QmdeU&yi_Sv?brNjKhV~4+e#C&iVTJ ziP`V7cI(z%jkJj;<)&DKx_h*#vjxJ)2pM zsM#Od?e0*rOGtBy!Y%uM>t*y8R9xlgSQ;qZFCOrO=TgPoAis$#*caUnE4dw(b!V2o zWu;^KWH!qjlY12^tM9S(1;=^FscKE@yf(#gL;j}5l|4mbk>`)Z)EHh?J-yuUpHq@l zNA@xY|I(caB0CeV?Coj3<}#6Q4&Oo+K^LhqiPlcGjH|_rt+qsp-uNUp?Xsg} z`^-rzPkc~K+90W`G&PXbJ9pxN?(C4B{5h94w)uJ-Tc{`5t|ZCsvVONM3wv7c^;~D` zkYZ<~&ATBOG}c^c*vj;FVlcwGqv8pz_D9NGnaLyuN3Vq=D*~2<5;$tT<*Kbpk3Rp zhY1S?IXlG6?wBBRXokG{w9RU(|6aC|ROD^h`1WIR_O}b#8Q4BtKch*mKWJCb@>XEHCqbnzdW8fXTpzzKfX;o$9L{(LWRl<18;-E z+np7M?oJg5GLrbduI1F3>d#MFLfF$*^4*R|n7!ot_N{AzGzEp&+zv&~aE;X2+;Y+B z;4ZC`%9@*(cCITgxgy^?OU+WH&>&8C^{cOM7W))dzgoF9P08isjZ()J-g`eyE`DNq zw^CTjCU)B+Mjvj!+77NgeiD^twQ?seiOuJmGgI!Rluyo{13C4^fA4Pn_t`D|Sz$x> z&bv8>W>~uw$ND7vdT(`B*}i4xAAz<%0%<=Lf6tShwT$ISOT!B$)lKFOB~#sdg#F~Y zudckw$0>ExGE{SNi}M7TcFE_3(?lk%bZX0-<-J>0s?&F7?_D9Kie3ict`;VNNw1c4 zEN(hsamplgmWrp~v)7W+Yd_^0nJtV6DkwZ!_q~T#*i}(QG~|GdMuL{l%C4zrL_{lR zJnOVP_kVTemDtKBr(W_MxpJbu?a%)cyT8e8FI2Iwe;%As)o?UtvGuYe%hN6~mQ9{{ zli~9rm4kN~8KtJUsO~F#6L;IzQ>^y$&GjC(rWK6tfo@ zj>Uc>2WNd*|Cy)KHFE>NFK((W|eD?twbk=il;>__f+aN3S8ur z`=?7f=tS1l2dpm?7>=G?v$wqD+T{spg_F8%+EXW-Y`x|Z#V>I zUv+GAFtS@*Epphv;>>yO!xvb&y6){Ps5!Le;nEqa-=CQC#f;mjzuD-^@`Q)YPI38i zi@VuG{<2Fv-dV@6=4w{ts*rh`rZ71%D;{$x)Kc{~ntE7W*Ll;Mk~@9k&k|#=%v0l$ zvi(0jGW2!R%Xb;A{Hytozj$?U&g$cZ&MY^=XRmBpn9Nb!r+EDSnfrchhxUAaZ1E~? z@4R~seUD-+`*!l{yijDGIlcIi#Us7uIHL)bKRIJ1el=`ZQNQ|tt+((C879~GSq|3) zp6zZkDB*2fRNmM3+&;*yDJ`a8!p_AKyJAv%ju8?zE7{=Yr-!|Q3hn&8TkV?N>If+_UYXRZ9MwIvde` znRmyse%c_WPh)f_TucpKPm=1 zcSR+%i>sMh=PDXX-ufFU*`8Ex{@C!K&|aLL6OURw z+1IdW^BXgx8<_!_&FA*i9r`Cacj6=dJ(=%Y%T<3Z+|MBVH@my`=F2T%{ae|3l3$1& zICb{ZS5|RXlk4j@_9^XK!fGtD;(%^a%IMM6Yb1k zhYo`&1`mZqqq^<7Lv^GQ7vEj>lYQSe$HnTwkCRV?2R`20z{7KPNx+x+dYhItmdFNA z*UT_UO`X;At%8+DcZE;wu|K^$#<2#|UmlumKVxFk%73xBzq$GsUH!LLz)5PQn#8-j z^ndTl+IHWbIX|oE=;Ome4SQxkRXF7-`%z}!k|x1PK`Ski)zVrgDTTR*O-fgKnwiIP zwKA(j#pPUP&LRPc5(zcmwwZcb^PAeOOD|qJ{%Bokee$cYn@9F$T$k}Jo5Pc1_AYzd z>+L~D%f)ma2BjbSle}-&y)9Y)EM`4fAW`vL$>#d|QbR!_i(8*9G@a)#tgTKuZCm}g z&_ucDP}U?Fv8l7|+gGgG%CgaS{)%3so=FT|r!;H9RE^oJAd+ERW+O~y>J=4X`Rs4Q#sK%oId0tP++*osFp8}r02M$|p zh&m~6bFwe_1Djl!;0Emt+t+@s@B1Nj>CNL zXY`mDG3`^?!J0Ys;+c~-1MbgV*Wnm*mX$%7J2xjc%Ouo_*OTXt!X-D8MfEf5<6a-l zUGmDeqF~Ji-zx{~@5r3F`z+zTj$e?K)wUCATQb)@h>MH0xcFj1^pAf5pP!bPd@H=g z@#^5kgyZbnw!V9}oOxA$L(SF~y(haD)Gta-$eH{5`LkoM`H!%L74A?r{r>3Qtmx%d zSv(mgnx7IUC&?;#tk#&Q6jV7UO{hg9+4#U`mRAp)j;CH=+x>arjGfKVT(4(t=lpVO zhsSz7O|A(q-^zb+*FRL4YAj>vU6aXrws?-I^W*}P;==o9j$S--^yZ5LQ~tj*UZGtr z=B_N4F5I-Qt}^6VVb3``?!Jo~b!EHeG=y%oddNkSZI8sy zhpY*@pZsuwp^YxEQ8TakGNWgoBp0iKl)rT18&HCbNViu*QJFl>h6lSc>PYPt#ixOJ~?Mbhk4sEftv6=`6A_Olon@T=Oa9;3Px# z5>d_GrITDXx@{}l?f>;{)xN(aGxr(4e9wQnqyAZ`?V+iw!kTN>2i8Whmh6gAn;u@p zYu@~GOXiupFMk^zDVCP2xIBAdaj5pVVBb&91vjh(mqmRs+{q|1d+t{0%a3Quiu2iR zdM9yT##qVWqhE;p)`WF4cn(XjnL2FXlQeEQAkw8NtR!+E%BFI8u8X|+O3HkF2ZJ&0Jq!_wVj^ z{knheDy0)Sc6{975aQ_Y$131L=hF{Q-(5BQIr}o}MD=xF1K5q+N?aZlDyqLJR%<-x z8o;xsSaF^-$Ad4;nltQPt;^!bntO=pZ#zro!4~!@PSFdTCn;=s8hK6E_Q*D?)_n`F zL|&cMn|)}>BBm7E3TF16&>Zs}9J!yaEIDA-@apQ5 z(fiOt8-?sH6ds@Xvu-tukjkHfdLQpNJkU%D(tSAHx^4HNTk0(Ht5(QlZ^}FQx>url z@g;x$y>2`cnv>^LKUt{W&vDWqHTmRj)8|4jL{+lZFIX71 z{9TLVr*}k^%#;07qc55FJH>suf#B8$9?RvOc0c+2bfe4s*y}9o89TxR*Tq(e7;aq_ z>Y}DHaoLoHf>{j3B0|$dyNb>=-WJNA{>6Il&YHisyAMA|?>e=${gYNZQ#wye=0Z__ z2OGgkmQQ92IHs%g2Q8mhEc@ej_v!urKmFP7H8(q*U1^_dM}B<$-OH^iw=Skep5ivW z7TCOmI_Xv*(;%!SUbym)-g5zR}yvSrj=(dHrpwRspPOFQ7}d7#!*`}&CeEtpWi6QvEV-#(GlJN=m$pr>rNN*nVRI^nm_(}%bTU@w9`d(hPkN=UkEnzEe`l{o;TfL?Hg64g*I1J*cpws z%q*F7WZ9Kzw=RU-w4JX0j?GyzVEIjNmWy*P=$yQy!k_9i`OJ;8Dwk3sr>VRAT*fCo ztyEl5e%iq$jZ!bP)c!EYGVMLW@_xJCo!Q&oFS;9}cp=&M!^L&GjyLRks`X*-igQdq zetxZ9U7)0VkYDx<%l@ga*Et+FIyigXZYJApEcPa=7dWKr9&BHdZ9nh(f8MLwzZN@g zTsmE_e&_zom<8dYB6}q}>bwHJoICk(M`p$u(_oh;nwM9mDET>Xnb~;qo^+jJeP>Gf z97`)k#bau=!V}LO(h)!KYDMRYX;$5hU2V>rSpD|4T2770Kg-st|e-P^2{ ztX3H=yD_o+%ImHFN-WPyo_57co3!nY#Sktm{9V zDf#RpDif(+Fm9C?<&~vhiYNuC_Se9Uy ziJ{+=sP@W3Cg-PkF1)Uy zv$?T%`JG=S>WjSAeZ0u~pEEWEf6}ao3yC;%@TcV;HV6F~=>g|o zy-NAMI=3xOI+x#xSxn92Y!YKrDA(z|-NHqW_Qf+!m~wx<9oM{^ZfWO4S&N{DoRYH} ze$H;_UfqBHmi)n!Ypf#U>h>8}{%Ns!_N?~f>;-C1viAPUpPZ*VY5tYD@eS#U?C<`a z*l9h-Mz#Oy;|)`oyd&DB(r=%cWOjR9cfII`o!74Z*kAm5>A&Q?zXaxmOvs*}>=^su zN!7;UD|#uXgbT6^>!TL`(yOs9n*VRf^V3a#;=e`*3$J|0E57aO!s(}{KHYdT&i4G* zF!8T@?yOsX`R&(R>*npsT0QgA*Q&Qmp6)7}omR0qe6#HFx1qK(WA(e%<-A{&v3~WU z&f2Sfo)?eFKU`&4`?YMN*O#RI)8xC7lcS#83ci%Je3GnBsPT8c-7g<9sMSP0WH__$ zgJ#&(H5*$bt=m34v|1K+>G$DPK0a~`*?YGcg$gp)Pd$9_r`iVFFE>mRmS3w`dtXd@ zfx5!wEi!inn>k+jcgQc8u|Te6ORmAKvwsTfZiiPN<8R6m)+k$gt3atJ{8oR|pZi|wS4Gzu{0@9>X=I^h6Wp#yzoTFS<5430+Bl)hglHVeOHzSD@5-+eO(e z+v7VW7++8SeWLubAKRh88&g{}EO-Otob4oDq^4bue*d-X@wM3S)kl|?t3|(NWq6ad zvCv?(`2NHHx3hgHdn=b@Ey>}TST3~a@praEK{w{MoG^R*=F_K7Z{B=5Q~Pe;`9F`R z?>;USyl5^@%d!pj`k&A2eOSEhf1b?x{Ws6gHtwIqXCyH1(7Qcn*n<=Q-|JCiR@8da zqM`8k*?If_dwy>Iai?~>?ERl}Vwnu{-6k{|h?X6iqN@BuaYtpD@E@+F+!g;Nc6@66 z{cVj!*gpML=hF|KmG(XoS6?!rF+jA;G1T!`{=u`4)FP&CH~tV8vi-{2l!&1FHBT>I z^kZAqxZsBOvHN%4iamY1?Zduxc{_8|4^OIj{NhHXo@|Ojm)l(pDUtq!&XgRkpswh& z>XZZV4Jj;gvS2w|4X&$y4~PC*xudgM<7lqlox@zG9-B%Y&DiwR{Gc90P3_7%c}?P9 zd9{q1=0>ww=l?J6@8dHPa9wOCvX?W?G|zlmkFAx}2?vqhUjbj#e!MF%Dtq}tfjQ9R zmGedEA3H2d=kI=hdD`RZ<7r11R}@EGyy(cbDC0`^qJ#Pe&xRVRP5V&C`QBtlq>e&3>x+Z8s5{{Oze^zZy4-}B}z z`#u%aZdvTvaUxJ&>Hf{tb9wGqu^i1anzweH-P*OAG=BWL8Q*-O>(2V=#p;Lh?OFG~ z`dU-`?~@g`gT~fRcf04;SAX2@nWCU{+0MnTEMGzCvYgAmU-dh8i#^-ctMWH|!tGnS z-qUi=FzfFw+PcN%_L@nmvYtl^Ej4xJnk58Xvwn6=-u+~M{CS3i=4NxXBC zwW9dXbvu8kb}rcX@5OS{&__pew*631{QodXPSyH&-L(mgQZr36Qhq+L-dI;>a1UhZ z+gt6wRw^=^8f9NN@nq#OIqlFU%ctCu|BT<6J!sKC8YTB*Nf$Fqcl?v3F&Cb9n;Lxc zl$BgDF>RNJ2z`^YMj~mVmzqERa4EJtjj zbR2h{fn^pMhP+iFtu9cq!j|%Sjp#NcxM3rB9+SZQi^Ov}t{QBfoTuadD zgTcZp?WPCqKO5}3J!GyljwWS|B{k@yJx-fHImJ<6` z&HM|?7H!8>xRDi?L= z)UWO1xw34J7Q@cv@{S-U;Obyi59y~{??BiS;6-f_$D$nC?{x~^Y1x%^+Sn@^x^mI1}~aF{uZ|U zynMR&9X-#>M+k#ly;{y9GG zmtViUP*Gc1xlE$SNT%N0O4ct<;`#JRuJMxBCnw$&YWJLXVU7CZ90S=EH|Lg z&rRoU*bkUhm7 zWgV!L+!H6+y!pLb(SyzIjXi#DGi|i{ENdr!e05pO^Wd9+j5^z;eLt68$hqHso;g2Z zY4h8O#~vi)?*07ymy-{0^li{qs z(E7?SU-nfYf8Q_)pOLN+uSY-a|Mxrpq|Kb%0~05G-Wuhu5a4gGH6!(@ za$x?=J^tHIE?OBL;=JwZ;_#Vbm#*lp621NIPOgTdzwh2f(=METIXl8ne%9RiJ0i}` zyZiHD(Z;MQ9j--hzrK>XGbhsdc*F}>!^p&( zrImr2oA0Y!eC8J#RPiN?rSIBCr&`mgImVs~rJS#MMs+FveY_-j(S{$cXTIb_34bm* zd&}l-Q25EtkDs~M%7?Je+b5G`wff~$z9~0W&fI(S_|n~}T~AJx$O~_d^qqP(YJNOV z*bB4WKhjGhwtU=t$u;x)hwG1zyGK1=VY_L|wI6a@-dfd7IUD*hacXN;-T%b9Ax+1Q zsDx*{I^25cRjJ)+)6~{iRd?0WR?mw3`(@wz&p%EIFFsKBTK?JD_3ek=Tut3%KK+#1 zj5x1NUoO>VOlzLl>1lkDW#VKPcRwK)KcUt+chcQV4k~lBs-(FJF8X__Y;rht4m66yXvb{S!VWCHe%ljZ5j2h+($u=tn(alth*QCc&7NzL>nzkW<$X5nYdyVfdT z*wGR)&GAk!k6?(0)s!FioCO5+JUE_p*>BNMlA16f=FV2@fQZh$>Y|=3kDL|@U)41! z^}QQj^hkqmrRR#*73-c0bpP1Ik|A(hr6)P<_=2U%o}b&F9N!n)Y%5;)?9z?T8s$t` zmWMu7rreyuI#E-5ZJs1wl|HZft93fUU-;j$g*a#l2Ji22@-12D79z87>ESEgF*=7+ zKWJ{qH(D>4*0N3TR?P0D*S2LP#Ja4RxJK@q^Jd+qiyf;b-QE6Q%$w0M?ZTDk91G(? zWNT}doBYW_A=wxiv0Htb30aRU1P(k7lQ2p${LyVB#Hkf4^WuGCtjuXnX1&+1tLGfO zu>0lj4>pR21bn>QC&<2kve0(UqtS93dt>J13#CcM8+>0yER6Zf)x0z4(Q>!XjFAkB*R_=ExlPNs+-?|r$U2X&32@U%^Om%jMB+~O&+RXhh9U0!W)?pz&onDMRX znvVzn1ZGW?oyd_1h`=n3zSB z!4bpsM%gMcPN&4`!Xt|fg03yMN=^Il%k5C=J^zF=?2j|2W_JmOCGFJZNq^e5{blt= z*?{n??B8q7f6BSf#hN_FbzXjY>7mpOPt%?rcakd;`1NwuVlRQxX%}leu5354)Y;3a zm9lr6!NCm8ljj`td8^p1zi7W#N?0@X#uI(pP>HpwRa>SdY?*c=_vwLdzVp}b?Kx0j zu<^5P!#|&I-(T3@czo=J*~ZVjJ^OXI7k6!cyXr1;Pp@-vye!pqAHq(RE#aa$1 z1b6S2^I`bDbj6e}f1XY)3bVVu_SgqolmEAjTVFS=UC%A?LH#G^`?u5j(wjO{T@_di zm7R7dwTX+InV23^b%*zoXJnW2ttI^rx{VFr-}*f9;|&FOcGK+w_Z{Yxly*&bN;wm^ zOH!PneOfAeA)Cu_Nr5Ah4x0;0FZ9Pxc)aj(qtwZbULgxQUbEj9?s@1OyuWSH<13BV z=GkV{>@T`6;QZsl9dSi7v3)v{SJ+Ad?60Og_{n(TPgMqcQ#+SK@N7e!|NOphqvR&N zU$EAB{)yn*K9k*gelC=qk@uuh%v5&%X9vEPSNeDV-AsPJ^mLfO@`cJPe0>9a)~Pyi z?UM*lxig_C`j*DgwF(yk1G}4UU9>*l8l`St`04drjhT)eHVScfk2#7qJ^YqZJ*h!$ zaYwj9>K>=qez&|0FXt}&wt`h_iZ!#Q=H%8@hqLYOIY=M!+7xiL;%qwqn|H5MO#A#c zR0{ui`1V=cd-BA=L z-R|#~weuJ5d|-e7$9FZ({9ujJO);k@thqAjb*t5c?{&E+5~oa_dnPD7-wXSj({*02GxO-?_u^cw zEAAOg>-9JK{dw_zBPPXXpFRere(6%$(4>{%dTiN)HL|aFJ!$>s+jsxTuOpEaYkz7i zKlJU%w~JSQPZn9ow`DKK_iYko0!M7RVzi4`+5J!O$XajVU_5`KJmhBC$=?$>%xwLx zo-zv(|DLJomi+erm6SEXEr}PjB;1-qL+&Ln>)5>@&GL<>;Aw}@)HktvnLp2}UGTNb zfITB?b7ujomlW&6&`D2&vKS`i#wDBbE3IqLigDa$W^#;co1d@8K~`>`+d^>}ZFw%W zQokBCXLu%7_RnbwRzCVbt$*E#g=cN1<{9atdHSQx?GsP7yEQKjun~QsaW|)Ki|otuUu`xN-~G6NqiO-ymkIv4 z>5HEo?7aJOpN~G5b|#z1wfy|twbENfmwxU4H2Z3Q*!DV)x-~tTfkzAjWRE)t9(R~s z$g}?FErGfphK~zT;v@VU-SbczLn`ZmlFAp-WA2Ux_e<*h0jZOC_ z&f)p6<5e09_x1~KZ=O0O9KiKtN0q_GGhAo=434d@aZ~9{x+^kkZrYxx)_*p4UEXe6 zxbE%J)rl)t?)Bej$7K?&=D=TbT9_qh!_<}i8lNn(?|;8HYuXw98rC<0%ar+9Hs|D7 z)xDW%vq46vYGtP8H1Cs~bA3)vVQusal~xvLJ7r@co$Gz%NMl!+GZI=yjV+c4Xaj>P!_Cy6u`Teq@zO$gL^KKLs+jX(+Av$ar?W>eq;e z%(G&b%Dpah_{_LejyuO;bHX8wbxodqX5YOSU+n1;HC(W=P;A=rhBWT<+=WM(axyk7 z%RV?$q|krL_R6@oFHR+!bXY9nDqLdrwY=7@R!kt=r8Gv+ zHAXOW$D%WrbBm5_tDY@azEU7f#x0F!3)?(hr=-HuS~8au zlaGE#yJ|gAWTIV&VlAKWRQ1Q`e8;hYt!ZD;e3o;OZX-)(@k-4@h8el9em|TXrJ1C;;HLJO&tZ3Tr|p-l z+toNh=h=Cs#`-I5HCZPd7G9eCW`D|zb|oI>S-*M|Pv8Fa=|PEm&Gy%dSMMtxwy9q2 zbXWQagNBLp*-Le|--$FY581yJSOW*w0_g$Tqkg3g~ zeDs3NAFq^G{qARe#VBvH1;V1UEmQ@-Ky6f6oHQQQO-sWj~w}I_psCDyLMdANRX&cj|^?J-y+R%Z$V~yn_|v1*##jA`@X2OnQ!iT zUa)74x}Xt{nepETX>Eqd8LzI(>pmwq%qm_37y54lh&n1&l4?v*D_^RoxtyX ztE!m)%3gBZFlU1C!JO_&L1wRrC+zEUVgrb{TcEHgVVaX)zrUtZYu1@+OP?^_d(^j_Syz)9MwIdM4Z(Eo;t##Vg*DIz+ zvKBq|Pd@kBi)-Q{E=rO!$@aaM#fva`{)!TOT}ePy9=xMB6jTwr9I_ zqS}L4vQ$28-5?-k^I}C#c>LL-gE#Dxch>)(x`4Ypb3@X{?ub)6Gn#Y^SR@=apIYlO zg)up`L)&=;gNdnVYh&%P*IEW4GmAu*=^XpJaOLHOj};lOOcv~Vc&koi^RDBDF{eMy z5IxY89<}c!17?_=YW9D)8-Rx{bp|*#i%a*S)?x{4|y>Zg3m+pf1q~_Z#Yrh}Hcw_R^ zUlmWUKS+~2W;*k3?fjWCC%pc+72R%JC71EOcTxKGx2@aHsCdm?>n*F6ZM<8h^ythQ z^-nzV_dA4U-qLz#<=|*F^YxoAi$x<|YA0`-@n5BW`B$lj$5i}|6ouOE*H~S)@>}3U zrplH;?$rx6+&cR-PCDlWbD`hXzde~Zbi5CTWo?$(lrkgr%pALjop*x{w?DeO1<5eDT!ri{QO;vj6`)URU&#wz_D_Ft*?7fzD$gXh_kf1PQXN|%^sO*LOoRD8>zi}juN zeLfT0iy=mf#AZC+wl8LLkQ)b6@u?TiZ9fJ8~2_#S7z%_-V)!_#WnZKZLgOl z1<#l!>!y@sQdFt&=B`kWeWztba(3gccg9JqvffYR^A}E5tvqr<|MkT4bJXL*l^iA9 zQfFR|sSS8tTwA_=*VW(7*Ve7wbx&;N0|~{}Wea1KD}1>Q6e_O2c;)xP3jM3U6D!u{ zA6cAsdtS1`)bLQd^@l#*|G8hSe75z>c^@<)rRPt&>9b5Dr*gri8xJMsJWZQj`(wEy zLjjL;@#VbGh1JP6zam(*L{m;XS?%S!G+SA>O!6Ifu2)e{TJhAmYhu5C$nuT~E4`QV z%gU&l&8=G>!IT(skX^RuWDeo>kFnRCMW8jJ5Oe()#!{*LD} zB+qRZeSS6EPR8%TJc%c-bIOX(m_L_&^+0^fx#^OVRz0vhZc`DbvG#xZ{ibI#V$W}m z`dgo2{(#G2%UzB>$wzax%vtr(Yu%)*uRcKyev|v0u6jllyTYJ{)*nH z+Bf1GZ!Lafa8~#1CLMR-of=(RzC~DQ9=v+rEph4AT`7@pc6yIZhspk}t$? zS6^*0F>YNs_dbCQT&zvr?NYzIWncYjJ)>o@@wT$WZsiZRR%*;EnDBl5v_+FvphlB(b3${Ia+=QBRknwP9pz1U+Y%(&gMlj*p~l!lXv!p`OLLH*p1B{n|M3XIs@ z^?BW;+U>F1Zc2sadHinrbmDu%y^d-|{@7@j#1nr7!~*0FzKHF2&*I==_Fd1nCZ)RW z$c+&KT=s%J;r+n!8VD0}=kV@~IzlF;zduj^OuUcGv&P@8d{s_HSu)KE)7hdt-^ zN985toZ8o7q}V^vZ==ps_Q)k4ra5mHl(cn7|zgJd9i^_xJz55sW@D*4X8FMAe z`MU(pQ|{(^mTFj-VZ!>YuiNtM%JqxZmo_G}xuquRty~dOF_Yu+#H^V*%`@wDB`3XI zzjpDtmANmnW@8cKq#{ zmGSfZ7K$}1{`hKm?o!RZk4LX|TQ*(3TK;xRv6W_BL%n{mhK9Dp!Yv901y z`LMi>#PWqI274s^_e!5%UzoUU%{M_7Yq>WuULER7KYDHYwfWCf;cqQLOEn`lKl;LX zFMGks$xU5}tZzR&eSN&x|DWHl+wWmgRyq25=Ik@>p|5T{{4l$orz`Yy{b}#T z^?yHqkiE1hV#mL)NgIPc8R;o~YoGLR_wJ7=|5Di{v(~Qln*RO}1DE}~OH8|D_Ea-g zm{om#`rx%z{Dq_0cf2x$j?`I3EGh3^_2GU&b>cj+_<|IGF3c5IxxaV$^H6qVJz7OJ9adbGkod_WU;#Z``{~gk;7*V&WN>?*3Idf za4h-2GlN-oYAh9+KYg}6;PLn8tIUr{frf4IX|9o>8B}UVW=i)x{(Q);AF00iGQ@$=W$|)>x)jO-YmVJ`cmBvQ} zf*Z3AA6@h7;(<8L*zSMYYt-MJ&G|KrPwK$YvNc)ZdnzQ>|0%VZrTvKgkP<_GJIRAVHkhe5Q~1ji&69xLvKQU;NoL!T-?s)@%F~ zGtQnW-8IeXUZiFG;y=3omQKFX{qXRPpw#WFZp>PBqjA@(b)Kq^wKYn6O1>s+aohTK zmAl7@`pGS^TYqNRyh~;|yP`{d&h^qOGL`>$Uq$v^vb{7_u?N1*ZRP3yR)xfIr4SlV!bD`o&GgAEz}g@)0i^LX>Y;;y(zPuel|Fn`!1Z# z%+))~X)!a`*53Q4SG{&B_g%P~nag*U(`06@v$LEwGjpAt?X-87b8N;%kz0+?{akx9 zx%R%ioH9p1wHi*^Hi4y(2P9+cXWHTe+OH^og>4ml=LVFMs00%UZ#l7`R~6tT>g@IZrj{j2}@?Kd!Dl?#4zKe z@Iw>h^vwZUsjhQOF7!_fTdwD&w%g>Q(ZQ?ohZjw8Q_CzUKl5YC(xoig=_A5}~dTXNPYLVri{t;or1w@j-(n|w^< zuIkRYYsy~jOH6IzPx$C(IPId9D6i+nIVqPSBW-FgpIo*4SMcJ0SC;;(n!0@YukU)& zxqZ zj(`ovhZ!asAq-7do>=v+N!)t*gj5*Y8u9QIu|hM2dk&xLky5>IV8!tr`~1ReOO3Kh zj9y*x+U+N(JfTs%%&#Tu zw1qm)>6?f7Vt&tV-#Gj2ls@yvZbp}0PB1k-_K|0Q<%fH!Y4e$4&h1!zS?JE;yy+#n z)=Fy@ip@IN`K0x5Zq_1YWfN`#iA{53{jKH9%WU3ldi-fu&)up_gS*k|Oq(5Vt9*#r zB3j`qAu8DRc107rz^ZrmUR?4#nzr0d$}Ezlfvc~2%^?k0pDCV&PnV=0F#hdlW?Nc# z{l%ko-r{H7V)bX=+5PqVZGp;5S4u90UN$OAFJHZN_L0Eq#JManer>NrW)}H$DRlB! zKKvIUT7KhdmgwxcYp-pX7{ztg_nc+J$4?S7CVY@AKg|1M?~=*B{;_AIV$bX4y@1E=*~-w#O@V!9T{Fa_nWouuIj!|^UYfP< zfRiwuI$r)83SAtKpt&^7#z2r{=~3$`*GHsxr-so;EYvX2rh# zyI<XgSEa;aH%i zripc1*o-GDj!#Umo@{kx8UL|&{P%9!zPp~NRU7fPzxw83F7bum&mD1jyfTu1Gxy9U zGp%ag08O2q-&}v3x$2DaHf(44zTx)GINse0ww~rRIFNSU)MvYFtKb|%8R<BCfp1@S99dWhgo<0!mOWWMS3!R^V?HoaPaz_DlTKo zRORy_OI;3&h1oKuUt~D9h`XR5pY!?5-6cxWPo^jM%gBT&3Kvflk_---rMgh5P-yv2 z)17{EP1cmXT#_of@{1*x#PJopsVpg9CbF+&N#H+O!o7N)RpsRuPkg8Q-CMF@#=CEu zQkxa;Xh^8puz$F4QvF@=f(JSkOzYzL#BQxybZzCtSr`3Uw{&p$B?sI|oh%XRF#li< zht3tv^_z|*?A3EyYG;>oq4{r3v)noV-)oN6Pto4`r)8r2)y>xbnuE1|c>Q6oc3Q!5 z{JYHmkB0M#|F~~_wo&Bjw3?5_TE-t9?CdO#IAN*tL?lu1_V-Wzf@+^M+gj&@t()|? zEk$o4!ijuV*+Z?rpPC#nR_uC7mW6Vcg}P_x!Bu{jOwLLFIc=#s0YMKk6=JeSZD2;?19u zuvm35_jhT}-g%Xmu5CMS?ZRTTbxJeu&5w0yUnX2k){PBWVW7I@Q$X#^jXYAV6v;D$X#O}=hA9pNaVQNfx{rcUmUm2^9{NHlmvcT%M%jFJeFDmDB zKRM&jjyJmuWFB?!Y->tgSe0;f`>t@1=z&`g$5uc1S^MiLb zh#z1QT4z@qaZ>uj%Uj$(6CPEE=S`Gy_x*6?kz0hwz3AgB8IlE>wSBf)&aZ#qCa%3` zyCavpPsSlnqe)RST(gg|8qRZ1+-mxv??i>4)ZNFIJ9?&X6|MiPki^k^QNqPDZ;JRK z?sd&yJdF;;OghN3PVU*}%N~a7|17o*m0D9By43z#q6>f14;K%w!{%etGv(42SHI~{y|I3$qs7lJ zk28OWa@~vHyU+LNv8Fo1e3`de6R++mU@c2OQ@FL{c~^eS4&8znUG=978$vfl70fg8 zk#iF+xb`ll^uF+~+;ux7_cms}xl|eJ)BXEZ*@{JHZf@Hl>-%8q@0UOR=5`sI>ls

IbQrF4@6Nr=H)KA#770$Edw7 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

TAM9y^qsjbPz40L z6Hg8dT)1;q&bqSG&sOb94ZghD=SQgR@r|-q)z`h;bRpgDaf{35mrr?)od2MdS$aQ8 z=eFXqU__3M4BTl;v=maR;->dTYdrx{gaX+L{~ z(sUtVP zJl!w$ZL-l?HHP*R3^F@(idKj)eZDb$AIrbhl2e2v!<;5CC$ib`-)AmG=yD6)64hU)X&KaIgNx^^teS%-QbvX#O+Gf zRAr61&Ns3`m7JA1R-WM7v%+`ci3+Yuit~~LJ@u0nJ=DaKZcd6jCNZJ1$ML__teK%~ z@&cQr)@me+b41P!o8rjZqO&XEXLWS^$(=J@iD~?U`|&@)i&6K0NJPUb67;Q?Fw|R*yK#k9^nNpDM95d)}0o&n~;3d0sU2 zUy?mfB=)mP>DlrEzC*jzw#ZyAO?b-3bn3`dke&A_Z%RU^JM)@F z(uHj`ukUIEE?g?EzUNAl%^!xHudYSU@BH#j_}$y%esNAKgBFT>P8N81Pd)W}o!H{j zhnM{f6wC;D8ro-QebwWMtWQx*!nIjmcl8f5bcCwUJ^k)I-!(0VISWr~d<pCeTG@9Ybwb0=Q~KTZGs=#%RIhA2mITiuo7lA#VcTT^3a zW*(ZH-pT&|*|P4py$5T8na`WlCJEg)mVNfaq~SgDZKl0$soBTg1p6kRTH?){y8X7H z@sV-`3Gx1U>96#PdCiwBT)k`B>zR%xOvI{uCbPIFhxr$nMw~EGd?y^Z#p~XrK{ zVOQhX6i0#5Pnh!G{yeL2vXZ_q&!ze&^U9^IG`Vs+*LF9n zr!LAZfARUw2VI8t&9PJ86bBkvFXB4lDVdeNy{ly6q`pKW_g2$oqHI%)US&=5#uhv3nf?U z?A2J>qP)~4@lR?4Yhl*2?L6}pK7Z&;H~lE=a?D@g_zE50bB(JMy4G!SI_591yw?5d z-i{wk2a6V2&b0k+oBmJ#ZiL&p*_Gd>{4ofS^mcr{QKXxPWojUoiSW`3yJLOD?6n>< zt+;i1vv`2M$;$LwehV!7-Wtb#FP+@BL-#(XL1IN5*BswgYt@;Dawj!-y|)crdVEc8 zTF}cI%WpnWSS=tQ^6Ph|+D|v@&Sf=gtAdrMzAIW4_VeV5FD1eAo-O*ZRe67&+X>z` z>UVF3ylxEoThyaD^MWR=P+gWC<&pKnEJK3V{Mb(wkj-|6&c1%0UV=o;na8$OGW9q!Z zRbN?7)KC5sq!V(kQr0i8F1xe(th~$Nu$PV}WtTiKS#oKikLPB#({C-F&5c^){%hXDO*eF2RxWcr zZ#;Eg`VO5M^?sLyN0kGueyq=^n&QdsJ}I?*+xpk@9?#TTw%p(g!xfpUwN50-tOQ{|7xv2+m)ry*>h&Sw@`%KRi^2tIUzUgJ+ryy zsPxA)o<4Wenbk4JXFAi-l zQo8<*QQz5Ga_>|&?Ynn0{C`-S%b&^~a*FkCrr^cTeP3<#uQVTETfutC(jer%QLXc3 zp6;D9RyvpD9M}_i{f^9I4+EKbaVnpSUAoMr`;HX)|JeHCtlLxF*e6#qm~Z~P!}WB| z_KW?{Mc)ZM!uZi-(2?fcgb%d0o3hxjy6+_;>=Uv# zZr{-AXg6c=rnFt@yQ@>Acl>=Xe#X5va^m?_>t4OQxH326#?-4mYQ{$V;`&Vbg!nlM(O?IkI-=D|Y^K5g~|2&O^`g8kkJ_gKhi;>DHy4uPX4KMzM#x1jnHU7%3a`{Bk;|#v6K3y614_hyuk2VwC{kOJy zPK?nC-{;1~%*JWa_B-M)l--`;Qlpuno!KI)_A+W-vx?iP84x}yQhzT{V!{o z^URY4WlWsTu6=#&Cf9|oSLV4lUe%pF^yP(hti&g~kPAlKN+GN}m2b_ulx`V0XU&4! zrv10}e3)w2`tEm$pQ=k#+~mg(jHN?4wyofbetqZlmt9rcCjFWJzosHQ{>>5d#gZ)# zHwj-gjp@6!m_I*1qt|cwKgWs%al7ri^Y{JvblU!Yjj^uxhPE=@IprC@02KG@;f^QzZk|z?N zm%4nyNv;N+r^imDuzF03diZUI_N34TWzFqpSPU4S?zd5{DOzW~r*pGqxqA}3%*3MX zsmCsNeVH?bqd@NI7h%qCo@p@?y*1W!YpIvpcvvE~d=gX9XSDLOlXT$4 zI72Jn|GRXi?d#dnDtKr*>&ypfQ!97u{jH$H=`igTL!{3$hU%cYq;%dZ6S4xF|9+~k zioIod=%75?vum4orL#Ir{Is~@#)a0P_;+>1n^Vo1QYL;nePx1p*ka?XM>EAXvNv9R zDd1wCb%9fgW$_(_Mdz+J7~j*D=g!&vypr|7yeaZeMccR*?7#CjTFEdXl)+(Ih{W3u z>sKkDa!Gw&>ZXlBue73s+9!xRPPrI*^#70NkJD?jcp21u zT92<~Oy3h>C#J*LsLyy{&dLotSZ3&#*INkWoH=3F^Z(7mxbTU8jbAuUOO-!nZ{z&f zf8Uh$IW&--yHtcemwHOah#4k_nP_#*W_Q=ii)k> z|F`J7`lajq5Io7c4>G`busw0h+}D=Uha2K<2e~zZY%c( z3%#5D>Fw(6w&%9**AFnR>Re+zTi>JGX4#2Z|87pn*th%d?PIe7t0tFsht6@ozc+SG zhD^=ZZ+Ca!{(VAT^pO73Uz6wYC_T7c%Dbg+TComGu;(x4sh>~Bdj5OiT=)5a3BQ88 zuKxjRACXmA2O78B=__5ZPUtt&`_qfoZ`reHHD9>-GB*G7w#x(mZs6uM{SdNC@mI#Y zpBGE(r2=%aHiffiObzRPdA5FM_fO~9ZH-rdZ8~}7%c40&H9z0|i`DtQ<*nCL?aSTz z0?|>r?oW1Jz9}*F-t#}M$>wU0Go=pbuk~ASKXdKr9p)=`TTOVkhM7AzvsCezP zjSMzqn2PSb_8?%PTDW+G)mArOs|l-Xy>7?5|FSwp9XKZ$$D2q3_`0MhVET<@@$;}G;?j&lT z=VdWi6t$hLDYm`#LiUEHuUlCU_^iEK*7=L$nplI^)_D)xe=c0B%dkDmwl(yEL-#8_ z-CN;7Ti(58`4!77vdVY&#B7G2ljB=t#6-HUodp>LtU2f~X`TzE8^_sbR z{`)s{2eAen-lP?*>#wvyJmqb1kks1KH&vg1nqA*e{>94tvTE5sY4dXop93cEO?XhT zCHmZ98Se+dE@=TbCp>HHmHzc|8%tDK=I{R^=N_DnJ=V_k`@uFAFTRBIyo?5pMQYaz z7;;RWpT2mYFJN-4GuNb9%h@@8uX!l;+(0xu<>1X#n@Z)nto*C%qs1oWxXDV-a(b12 z)PZNqW2Ns;UflWp_jY-H61&)rmfjm{UMlZ(y%yTPdEI74eKix0Ew666yk0SR=H>Gy zljd5TVHG^qc{hqv8=SuGFs`P<=38i?Bdp264&&%JaLdM+|<79Vtk|o>lecr z#qNb-3SDheHWp>{>dcE%Jzx>X;+8M6O{Kt}iBnD1Z$;UzztOW_ow;ST{Mq;G*Ps2C zKPw<&n4>p8sB&U@N=ny^odL)1M9kf}XPIn<8ZEg-&^b7 ztnsLC-<|O7K5WXoLg{I$g=MvRoBC@GpTBxjp*Lfb>75UYtfZgF@SeAndLrX%cB)vW zb;JJNr{%p7Wmh%df7;!Ccl*!URYnS)D_`6<|DRE}bD^cz`qb|`Jw%)0IVP=*xc^>l;Ok(ARf!sY&ob=25%Y87g2%5#WG+GKj?ZNJoJDF=!3`3L^U zO*jypwqxlAi+4Oc25t=riEZ;wH9R?*qfj}Mn?br@&5VbU%IR5l55^~uy#d=U7T;5U({Xp&B%3dmGiRA3 zOfZyfKJ(Yted5J+8^aH?kDh6< znXrHEY$L6up`xEy_&kDs|4aP;?5b_%uhn8Lmri6iPrJ3p=DYE&Kcdl1?*2^4*FWwz zv6$BC-v0OXkLVkvH^g=)MgLQNx9axnwA9)c*P7LA9hLnAAI$Dj+0wPUcJFO_ll!~; zXEsmEZ_~SDv&7|iiS9(kYlm)}c5%@^^Ww58I`{C=(r2;!7AEzDo z@p-SGep|zBiR;G;=3g!H;Je4!t=N&;W9>52{?bzc9gAaM58j%}Dmce{+2cKlzd0|Q zn9=6e7R%<{_3<>v?#f59%xa>K!_S@g7p#+?nfW&6*Y%HTdw=~rq`)jDc6sjIBkP>s z?qZ(qw{>@abB3JsUCX)5uH7%s)l`K^m9Jvvs*|`p*XHZSEE$d@A9sPxi}D#%X1$xD zQ6~HAh5v^?btPN2HMlcanzS>on>STSmEm@h4rhhC@U;~S(=TTqu$*;RF#LR$)FhKN z=U8~EBe=!v@}-$fR%BjSkkiV#V)CprQ4Cp`VLQUiSi~BqEP0k8vLRaLPXB#NUFFM=s%J1pB_y3#oRr$jCv>#voE$gb6fA_3nxzOA^zo>0M5cBa2#&KdXpVkzc*e|f?ArzVe9od4anqV0S7#rw~S6<+L5t=U;E zoF8XjGyC6K`M7P4diQoazb{re;+fYGrdpA|K{|;q;IE_q)eQ_Q113k>I{2-*bAq+R zs@l~$Uw+>HrnTu}1yZvgn7mQ?vh!i6=28*uHj2zuLOZ2h4A_X{2R5jC%f6To^34 zOmefr+J$Q3H4-K}E2MV4kPMjBFXiwvCF5{Y^HH}@^snbREKB}o@e|0^Mx z>o_^-YEfYcv#o`Xz6V>`|0|2NXE?K43EjRp(WLvwsZ82H}o>~^?q^=OLO_qN?N7w>=n{QBfWb!*SV|6cli zy6AY{dft>LR;I_gc;9t(>o|Bn= zEV?S(c%#>9zFdiyCZofaUFT24MCmg6Em50qwj#z|Y?Djr+@251D+BKwegAz+`T95= zA88Rke;MaZmA9-4U+74MXE!jceP=AXeBPCho+q2O1Z=kdKlSpo2!~&98a-O}Z|MAN zs`H>O%wJVh=R#iC`i)Gyi{{+r+4^uH=j*~6VTIdkPR>i&*D!5!ns05}OMz?LSB{)8 zKK}RVqDc%B)2v-?P20}(K+^Q*jD?J8PZi{9H+WR~CdZk199SJ$e5%s=_^hk9u5)&? zXv{P%X8IS=&0;Xqv`*&Zc7`c8`2x26|5JR8Js|elyn;7n-a=-#qWA|WADsWIxMOkXRIsw?Jt>a?(iGZ9%H#iLCE2&sY@ch(pPIF# z{j#-L-d#O|pc~rzEnR$+bN%{XF~|5D2T8c@m&vn}%iJtv`_>~d>Ti)owLy?f;Lh8& zcRdoH+TJf#`kZsv%j0*0hfeOqu6c7mui~iGaM8_C-70v@I`z?&oiq8jl!?5Te`I)X zi}w;aO?^A-6(_yTQr1W(@@~2Dy;LBjq<+GTcZ>gB{h-PtnRz>9$<5F;I@)vWXRkc* zOIW%mMDbTlmy-YTDOTarQp2V%{ah+y$M39tUul`#t)!=4Lx1z<{4V~(c0>4(Tzl%8 zhrepSKmL7gU#i6Q1i8xSeYdTJILe|UP9?}!-Zp=H+v&xP+{AB9)lYKkPv%)`-!Mox zSlrL~#_@{Hv`Tg{x#N))G27-w>7Fv0)a@zs#qfd1mwNMHkwM zoIiVHxopv|b;+MCq%`jTwR-Y;ZpQa^4Fj9Gugz~{w60IOa!fl{D^gr*eU|8^fS+wz z+W-D0?y;~+`7u}G`dv$v*DFt^UwU+_=<3~#Z|!G^*~zrq-OVtN6StM;QR#fXc5Y1j z?Jq4WT2F7bdA4c7(v{90cMdL{ni{vt<}J%AH_fLnbE{x5^rsFgp~T*l)RY&jY#d*IIW)=AXC` zI9W1Q3NtVp|-}~>>1Q|A;{u7j9HaD@bsm|`fzTP-S zleONF=llP69;LQB0heJ5U@mH+P6!i^q-$47sEvuB=`3n;>TV9rLkMGmSyn(kp*}*RCb;Fu%n}gF| zTcj+NJ?~|mvNYDc^TV8bdTT|F|BsK;n;=p?N9WLUtyu7J`$>;y+%kPWW zMXM?Q(9XJ_FPIE&*R;4_kCvQTnorI%mhnCR{o>2%Lp?Z-H8{W(ATGcbY=%+s<4&cy($};M1mU*2^|5HEdmxJt2CF$1At6 z>X*MWGWEXQ-*e}0smk{V-aWSs+Rw+l-WXRg$LhzNoR3QDt}zBZ{Ua8)=lNeV2BzYL z@%}SHSzmO`IG*}zGdPpUcmHVbxec%{qVrNB3-%js{Hqp_CJYZ(0t0~ zvGTc!$X(~$DO_tTnOVX%o0b3V`NvfDk73@UA{Jw@dC5OgRPVE%nZhk!J%dF+Uwqji z6*&w2^M!G8%h&$QX}$gSx{BfCgU3%+EIw|SZ5MsIa9)bH4WH!a$b9d4hyGjN?Y#AQ zl3IWA*%g&*dMZAB6nrY@KJVulpZ`~1`0M;T;&-a`u(-^0?*8nxO*ISw)7jUYOMm>Q zf!*O;KVy*`gXMmv3DO<%-UgetvuDf^UoG;(_TP2UUEglCiKui1YDsd3dTuJ;78Lf) zZ859J((qd|x>p+PWWRLo^W=>-AM)#_JxtTSK7~E1Z`R_-_8897?u-+KVwO}b>S)z` zeKGrBRCY#p==EFIO0Ap^ywu`Y&z;>RG5hhJmHX8u6*_*2Qd}B%Fx6?+st>7WyyT50 zR!(hyk#lmVlJ%D;?t}^*-z%*N>2fOKSLRG?e%^HGQ^MU3$=7hfC!> z>gP}1%#UO?+wn{8fzSQIRVH>1SY#X6?_65lxvPwyVQKh7<=guzADGsj-|(sD-gC~` z=KLj^rZ=^jysngMTzuPA!l>}iDD5z_(W|XhW$zPq`!U{oWqoUAcKsm<9jO~+*@&S-PeSPyt|^Nd1VzX^*NLC za`UAb3r;yr*{J8Ec-iUJm-5J1)!r|zakC|w%UioD=iSz6iHY!?=3KbsL1;+n5*vrv z0h9eT)OK5@Jz4c_MXl8fC*db4Nz4~GOn2U3SnBBePsQMW-|YGayelllU;KSD$$s+0 zLK%~$e)!3s1E zwySTJ`s7IoKI+#)@+$uARe>QiW8BgGe zTi&thqHAN0h0ZiOb+aeMVQOR8+E*1FnhaNXJ|38F&->$>$K;=SzS|P(qpOPway%a! zoD$jR<$mqboRm%LT*A6;yvzST?fzYvbKDVMgYI1}f7x9A*3;rsv78||J*!%*H6-&%8u1>VoUwCwxa-F3^t zCgm*hH_m)Mg?s9W?4@(h=Y%Lmd~(iNTYRfu>&MDUuGl=T_gCD0?CDsfFgx+}lk=Q` z6NRU*)Nz^kKrJ)x_JwnXr59fa9Btr9dto#qGjD!}wWflk)TXUkldf;)-~RV@M)~9Q z$G+JsRC}G}-1>RPo1GCXF|$uQ*radVFjd6wr-z^C+L$owD2FbQU0;nfrk`6S)p2zH zpMT}?^RD@`0AZuWzXv)J>ofChKM9kjf^>lKkNc{ij^82Lv z9zK5)tKcnjL`w6G*+GX%7ABraY7!og*ybJK^?1}aRps4hk)8;(!va~M?n10p%Ih}l z^!UBRD?C!PkL7Xr{{L_F>p$<7+}W^EV7U~xeoMin=SJtdozkqdWG}gCO7hO^G?>86 zlc*xLLHv=?H>Q;z71Z9aS|l<(Z{d8fGBBB3X#YuNnaIExNtJ(wVx_37Y&tP}m0vSzHAuyt*WZb{yrlT$BG44a{}BjUQE zy->e>-PhBS?9A@VSSs6^AFlmY8oM$f#bD|-*M*zzi1>x-O=dp$g55xfGlHj5vYS!E zeS)wU^8-$hu}No=Wae%5$XJ*xs5SedP*TZ?t?RmWor;;eR3t31-{q10zaO*L@1He| zlfk6P>T1LVH6{I%8x2B3uUi#vyuQijkHFS5NgRhupBOOdi7>>oluBANZg2_^E@PU| zbU=}naYEAu*`NfW`&b;;lM%kzBN!UA_GT|GQ~r{>ze!=XvguC^QS)LbSPXdh&hwI zbk3Ts{_3C7Dg`WW_B*{)>g4fu`g-u3T~$r>?kSEko8Er?nxbsXJa2k}*C+dq;8y5 z>HYfe-M_?D#y6OMcg%5j*k^SkI70aJ^xeN#Ka8CnT)*zd?{t2d@6r=y^Osr1?&1Ag zyW>Jf6nk{t%r~dL|GxeG`(%q}3~bU_M$x=dGcH^>u*TY4{N(P5C!egA@`zb+(v9<< zSXNP?)HJ!JDerk&FTcCow)NfL+e-JAa<82=>DN21U&nT9 zKK5>#>T-W81Rr;6vXc|{XD`^nVjjqET6O2~@v3?S=3Vzo@6<4VE;Lbm>3!LsYw{zt z9m~Wl7x$mJ`r~FoJl_-5WZ~oDh73kb>?te^Moq811*SiL{lNOsyvePZj2F5d{JM0s zDA1B2evMb)ET#TS$4-Srt}9(~|Fzb7*J=TQ2i^DI-ruWr?}_>Sy{Gb5?c@2nFI?Ct zDkiw$6$ksf-n^gt_v?S2{p)g3@WIa=(H)J8el-h6#V`23wwNPslc8g^?5oA*f4|7e z|72@7R(zl!b6-GU>VxfqX8m~eoNA!)=m22}uME+(jHeJ~fxF_TI z#XsrgKW^-knEOSvfpy`t2RC<}t22C+bIw0A?{wc4E{Dl1`tf9L(Db77M+Z@hh9F6@0{%Uh=VP7)tZG- zrZev+{fOef5cJ{)(~q@^Hye*HW4Ozi_{b*6?zZaBnltiQB5UvMuiSk5@`n#h%hDoJ z*j;?H$~ISP)ZG)RT+yuUu_RaL^9;}V+`-*1UhOj2v`YJ2$j7_@&vFjcJ#%iYlke8< z^-EarC}Tmi_vY>=7hHm$weoB&+Isr*rOsVlTMWAl7phe~uUl|&zr=gqOa`IkiRryh zWmfIGc7xaM$>Jc1saDw`=>fmr-U@u^Y^Txd_;NE_DcjL_bB&r4?5PGC#n%>`OJI4! zW-2VWXkrA6R`K}Nr!*7k~cqnYZL3Mu|GWBySA$2eR$ZZ^dp9D zi+Lp~_MfT$@wfK`%bHad8}8;7+MPNXEV4p8!oKn7ujZYbKR)~R_jP{x%cnX&Buv62 zycB2paL>>#l-hc-{dxOh#l!155B__!q}(TZ(cSd3`Px&j+DnRs<^Nl~{|?Xp9&Qnz z1rqZ@zb|xMHTy^E%BH0v-?r?uSKamDG6Sy7Jid-Uu6MUot+l&g;$TQ+J;~N&2w<(3w;B&ipg~&6P9r%H;TljV~U!y|EH0 z;^H@%()a&s-T!4@{qMcW-`6erxA^~oZEKC081GI}FW@e(TvS-mysPnow~JzA)uR6m z{@PQVzIk0-zQpKTENkGq36?o^qD#s}t&A;Z&$aJw3Rw}S^=r?mr$1Led+z4=WXi0X zIF31&e5Q${taV<^6XaZM-twpP#iXqQjJ1M~Opf(mNT0xaly}jg-ScfHWOMB;(235m zk#bsOY$wIbn0STr3*)_A&+NkDS@ts?7wFm~;w15@$K^`vghQuhZ95jFIXPT&{-rPF zu`ovaai)zAqoHA0Z&8LWEd-aI(0ltN%?pJkFu)y46DtSs&yM)-~J}Fipw?k z^)4NkHM#Sa2Q%hM`UYt3pP?k)zSqSn>Q~3)@48x-_=X^G!&&5(QS+BSMR?ykLjPKT)Y5X2{ zn%EM{jvSQPk$U3ngvAdxpD%mTS-S(oP6e{!i@zP!?GO)l@X$ETjReL42xgQ7g&v=eOVht?%c{4)EbvE5sqcpo;GySKQ`{a#2z;X4PN>lGjV-}>_) zXSGm5{9%LU7I~k`4%X9doa7IzjP15LQu0pg?bc5=QblZwOQ)WB(bQWfF!lYist$F@ z^D1XjH-v{xF8_0HLvNyPj_v&D_jeDR)TwA_!bdXbtjykx(Mz)ZNT_@w(ZG6pG{}fAFlFTI(+Dne_2g5VM3hKa*BlwETPERCd7RQty_hgPGIT<7;4%rRujO|o zX01ML^s;VIY0td8`NtA{MST~pU90o@`xSv(OOv9QcIId0@ru+Q;AwPlid$2#WX?Rr z3MGr>4psAK#W+tmyIk!u(~^BFPp;2>UV1L%Ow6+8?xg{mnn7Y;%wDbW*!rz^mFeHD zoA#Zwzh$u7^zKD3)ffS_TWeH=pJnii>E6uI7SXrx4!yGeR@J&NT|G}BZI(-ylAgNs zKW5O}d*z3knSjN&poz!DvMjHcJ&7oq@2N1+*Y{iB#2B%xoh3Do8Xjhr%yqDfTCvqQ ztUsiyUs}88kv31!l|?55`O`l3Bro&pR;w$kogh;kv8FytL_pxgTJEiu3I=o5zcb;x zroASq{M6yy#%g7&*{9YXmXrKhz3?Yv>=!{3=lu11WZp9JRhe7m_5NzT^upB5b55A_ zT&=D}D${NFFJ(Rbv?6w8NnZBL-LcBi zS?@PbQhR%F?n-Hi%qdafR^qyrmrh*V(bmqmrNQ8|i?#RNVm~Iu1`~m@oNV2=J35@l zR?0QC7H-W}uhFaI5KB8#WSo|GEN!OtGVN=-7oMLf$9*~3nrX%M=WBY?=jD2qxAtzz zP7jJb6*WkMK^vX&sUbLh*J$m~>#Q#>9L&4pQ>yH(-_esmJ|17?v z%$C+NOP)tlm4SERvq*Q@KM&t+>-qlu@M6Aq;`{83c{p|(%kycfGT1Lvt52Tb$fqfo zXq__Ij4>`uOHeR-sdsQj?rWX(LR`0Rs~Gv#U+?|2;?9aw7Vlr(dOp=~tI)(P*U}em zS-RBT>fQHcHO1A%ok!EM@1&>jPTV4tXsl4u!!6{I*Lm~FHJj{2gxg8s^^-+?tU|OPmj_OjrCM9W}RM=&hYNXiwy!C z`vexmM0ag%O;Gf+6r4L{#kXnlj$6&8t>0|9aY(iGMV90o)%P>5&Am0LJjQE&Xz7K8 zr<&KdOEA1j|NrY*r%!=?Z+^ARf#7TFyh7%kUiN8DZ0p82+n%QI$|7^WMKaNHr#7Z{ znW%0$5cEZ1*1cvw<74~zgiAEKD?x9LFsh-QL_Zn4q&vO`he`zAGus4tn9AV%A-`oh*B9n%kI=p{jZN%If>0Ztvu6is;AMjV=K{>UZp&E|b5bp@ zufTf=|57{6L$-n*6HZ+7oVRxJiEAgP=G;B`V(RDQzz(fi#UD+rXJk!xzEJ+FCfRLM z%W(CoPKo00U6*(ltqvxshTW+;})r(LK?oEozrfBu9d-;Boq>4~h(UcXxjl!3$ z*{f9>7vef|IrCK4`l`PRgnr+hy{BjWzW%4q`#bAmD*AoJ&&*+zeDdb}pS`WJcXrF> zmOuYCy*JVI)|dV*LO1nx&JCwIeYXvV_1$XZ8Qtfm%mzdh?@#M*p z(C2o~PKuVQ+oz{$R|UB0H5=+(*;TUc9M{AXr`Kj0JotNXv2ng|+4Wb4lkfdo+xaNg zQsU;RnBvXmylsuTb|(T(={f&&TvRnTXv$CDuJ@&8ym9iq^@j7>O_pz|(RH{Lcx&fn z!)s>Ou1}i2@~_pWd7DmG*KPTIH~Vd#r%Xou?)u6{)q#;qjiaKRMfZGYIuovxx3GV+ z$P({wuYQ-^kzrPy7_&^R++{-4GBshllxeExbx!Y_Qqin@Nk(@1IhO2G5_5D;{64!? zU{z6Q+%(^P6MyYqqx|U8nHg)umM!C*d^SWe^Zk;=pT110$;^7@I-$D6RGlUC+@P|zrz%I@`9egSjSr^w0$k^dR36jm@# zV|V)g{87V#l8CaUhtD5i)O@7(_S>pyfwj&~f=>@zN!i7Hqj^rNZBI%0;aT#T#V;o5 zp7YYrI9P5avQc5t<2ugUtUA-|~uF`sbCf{JYLKHZBdOs|z{i9lzIb=H}tpIJ*+*mZuMvFzs_JY%6Cq zXpYj<_+OY`aP6K0)jJ+!(s5 z@6?Kjrz%e-@?^O($zkg?cIe++VxrR9oE59C2wLihf$ilWt(ZJ&UPkE*Fogog| znspV8Os_mlS1kVW{C1a2%+j?ctS9@uxw!K|Ya^V7zfPk*WP%@;R;Q*WRq*e)+T(4lZz*j+Os}z_Qxr)AI z)wnJ2Eudc9&+eM(+9St~&M^~?R4Je5Gh?l9n(E2;vzlvmO}{NC>c0MiP}!53)?=Jp zS8Aq&CN63)7F==izQ#7mG~?~3qip9fZSk6Ut>&9zlj^6nb^316@wakcJ6$T8$+cip zQ(Y2A=+x-Q83ljt_($@7J+d@_>xEJ3^=*pNqdgT*|5Y+gyvL9i9JYq%?T0kw$jz&k zyj7jq8g+Zi&263efhSJ6Wv*ImUTu(nd7FHOdFt^iZU6iCuFuVTeC*QP^Pjb?=Ix5^ z)Q$ejWYXX>C(1QU=xS+ByyrZhtn|~j*P9uOtW?#szW4Q9{(kn1N&dor{U%P?Y+B;k zc0=VCL+|GY4;~z}WQ<4(Srfxz)_!eSB}1OD=-TYn#-D9J^cU;*HfwN9jyTz(;~3@R zt+rQ3z;Rxd)Q*+;+kYH)o^Gs|?6x|rf4LH8#k8uP-!o^Y9$S}lY=4r393NBn@6ZLz z9~o9;l-mn@($iF8n)7`5BRyaBC({=!(zP)N{8Dyn%j5&hDwZ5igygqz77HoZGm7f& zJh+H6<@cpsZ#4Agy*uTcZd0~;`!>rK8wroMeN0j(?m4b3e=pp#xWw|^+>>uh=bVj- zZCLP)#cZoO!&dbbLDi=?|J0qEbG!1HOWF><^owtlIVSDDcTSu&(y?CUcdki%4$J3? zM|1i%XG}VqW&DSA!EctfcbDr8KS<86*fxt}$%LmY3rpAUwc7hVzuKZ-=C_6`1DAm4 zTR{$+$!{yZSuS0`cVH)Hh1Zh>}~7%)^KFb z;#+Gk+a8bOKH$umBj?2+=e0oVL%f-T-n8RJB{QZznrBt};nlRQ(^#EZbEz{v!V@OhfId;wRf)cVoLA*2o)2 zK9}FDh!K%K#^L-{>W5Fn0V#hC=L|WmsIC(NIc;6r{xDtF*)RF|SGChr?b>*iofiyM z?wW8+vfyKyw%lulg~!>zj8*GDu)KM#@kRFT``f>ja+!M?tq$!eGk^YJ$`qbE{93pA zeI7;Shc9={-INuwVx#t(i0hI$Y^NASbuVuGdiIY|(wo|?Tf@IynaH<#yZOCIclR=^ zYEmrdFuoeDtK(;`O?vp9VYf=p zW0fgi3?7;E2tPZm^2OLUykoJ?kz;Q?zrMZpR`PR0s-w&=ty7h=TsikHE?)8Ch^v>; z{)dh?XIDilO)O9ODrTVZ;*(^_dxh=yZr!ij-Kn_BKD+1D{lha)Z3y*q&3=&3KWpQ% zDWaw-!TFQptUjBsTqf%jKM&8|Zu8r<|CaWg z$hO#;W7pV!@gDqqv7t`xgre@93wxt?dbepYn>K8`Htzm(0f@?Q5! zNa?cKe-q}T4PD!wC0ixF<=hpur}=l~H`5v$woA;(&YS*49(-5Dy@&Zczq1nSv9RaH z-=F=wDLze(_rk$@d^6oyQ~j$YtL-Q5uBeun6t=q#EGTTxMeEsnFoyL}Q@ z$UB2C6SP{owz)BO9kCS@l&Em@k?HH$U_SXomP|r;Nsz!d<3r!K^GPTDyF1b6q{F!+ zGt2JAIY+HdMCzWN`m%l3QdWzoHIo-#-L&OKwE0zC-2?24AH6Tn-01)7(7SNmQf}@E z?^k5>Mi$(f@uu=eqI=(^r!(32_eq>N5S46}-P^eJm=#md&8%(V`4iq2M#Nn*zr(-a z+9MVe>WfGJmZ^Pb;rIi>Ac0q3je5pZu=R=xl9Voj1x|N%b95Xc;yWiS2i>G z&B_^u1|K6#o36!5Y9&lD6t>BVpLX4V@3^dypW%lGGaep%Tk}M&rJu=4W^?c&!-7o_ zrmDB*{?u4dVkj)Ra$-MIo%rgOe~AlX3}+V|b=a9y_Co&MSAOnO&Qdb#7Ky4I+~>bO z;+18?m!M4@3PIM~EBD>C;%>g9+RJZqf3c#L@kygY4R_9#EV`@W{U+c~cKXArUpHU= zjO#mLapyG$@2kZP#Hy+a9?L`T3)cTNd1cVA=zc(2>sGVTk*(i+ z7rc{jc1<_?!Dm@vf9LhB{h1$SiwatH$dfWg(W8TRy5`@Oe3tmnW;MGZ z5OX`)$b87kX6qdH?`xNCJwM?ujzI zxma{^S;BgECLi~M0phP0wk=mRd^W*odc{g3)xd!6Z&C99WR%$F&S0-jUo0EeZt&9d zDAVt~PPUmB6LXaW4((KI`QKkE8Qd#d)zi#!Hu5~P%x_DvlLy0}m2Gq3%hF$;=Dla} z<(bU|-bbBhoN2caJLxF-tj*|;wVl|>gX+)91Wftv>7|R_{=Y6SgHKCKbZ(lt3A^sp zu5C(9(@*8bX*~~c$$RVhc|(1JO8-+u;dS!uk@HmQmhCx`?lkeCe&m~HI}4rLPcwM_ zwi0{k>2F}q`B&wev;Ns;6>p(uzcP=c3aCt+t5{~`xk#)1>MQ1q%=Dr?iZbDRMQWn& zgEq!T-e|mi^6*<_rK^#_R)L?|tJ1YO=7(%y7iufKVIMUqygp!Z^S6^n7g%^!pEdG1 zfAE#y1>>D_fAlurKH>V_!bf%6+ED3d1{X!YK5DQ{%KuOlz`xVi_Q?XdPg-9$RQCMw z+qoy~b|dQ|Ztia{e#-i09NM+;xJ19PyZqj{);syC@(YY+mn=K*D8anwaNd@6Oo}f5 zUrhPiskC?Uo^1dB3~I&itKKf>x+1*y@~o#p@9(SGX*wQAp4rt?ExESxkImORM^1Mw z|D`y~_r=ezHS4m)e;u1#;#RD#8e6(z#oI|WCbRYD9(SCvuRNlg9U&mI z@%}WSnH5C%wHguf~=8)y8L^VrPAxs@*(AY{R^HMWr71B7U4n_sLk- zxpMu*8S4#vt9Vp5ng20)tX1^bg++@mWrBwNf=I2YUTS4N@7~zwFD^8!*cNO0HYZX< zi7)hpnXLHhgZnrIKX!KYm7YDmwQTpl!@Dn9+_s3^-naj+{>86n=bzP2{=EL)dNYj! zXLp_Xcj{1=)rnQT3%8ZN**S04!uQ);O|NZ~x!2=ieS3@vb<=`K)FtyOMa| zBo2N5%?c{K7r$TcuRQ4*xtHzc@4xRqguWCL(^Pfw(9&9GzxB9q&0*2ys~EuR^_j7a=vQDE4#->_RfWe$NgSQb@g;7YCe9nK>d}GVzYsm;@=$` zgM!j8b$Zl)Qt>uYKK7-ouy}XHiSX-T(rP3UJA!{VtPTbQL@X^9=Jbjmh~TK383*B9+i zM(0yIXLrnyG|ZSO(z`wPg;@EDY>hNu{Ts^`CMs~g<`j|iR?-g-YCp^svZ7?(bQPUn zztv`4l+8T4+t+#fj%HUi9!EjGy$d(*%s%@pfwkRC+k!>g;!E3`L(y-R*Umjt^(7;v zoJTFzzohKU-#KTizPt#J&N{O|F73kHrCm=fKVJ%2Y4c^~iC{%#wMq|VJu#DCUcbL( zUw`*rv*}FT;^Q~`xzrlM)g*FO*C=GPm#Lf-So5slWY)E9e;f4PyuZC=>7ksBPqbd2 z?c7@t`qr9xpKr&}{~Ps~zw=zZv5QOPb9KH^PMd9J%$&?$6}OG@YHu8rGFWi6txmkD zj7QXAc6{Of_JoyfvN~74ZI#Vf9I|D%{2YI+D5i!giCb3=3#4#pnOP(~G1iA$xR&rVtMoR{a8L18;pE+Gv+#R~-*I-gwskY69p0mM_xqhYPSw*@>+6Me z#Wn}l>^>niH(xYR&gy2q`Ak2rJD=wSP0`6)TzGUN!y)GrRqX6lJ9cfq)*xpsJM;XX z8>b_t?6mp(g)dCvXxxKif~SS2Z%$hN_-l81`u+L)EvmyJivQ>KOY>x16HQyO=925- z@0yxh?oX0g=5RR+ox>dp7m=&EQ>g*T|P|ky)NQ+d|PoBV^CxDIDjx zM16h5xC+k*?n&!=FhjW__`y1-z8stQ-!I;zGah-wYRJO%p=4#mwmS}0lZ7vcaYv=6 zf8(BbQ~%A0H`n>@op|c*8qJ`xV(}tX2BRZ^7k9O-t=8gW&%Y?YXQub&T|x7LG-pn+ zYSo>&yzy{snb$+v{eXe24tSf6S39jDwJMFS& z(tWAJ0Vm#B^Y1skBl2yoVS#Ho-+kS8Jx@zm%QoJZJ#|l-{pqfUlPzvl)LXjf$R4dL z&v^7TBAl^~*=UEU&As0<7&aEmt}9=+e~mozxxFXaZ#r(W`e_jKO*6h!gef)E@L|Mt z!`&rqb5?qK?eI6he|hiMNmp4Nj+L^^uCg^*C-eIB0kfN_Uen$%trj{kB_vizX2I*V zW=YR2x0KIwc8TDezVlqxg03ZbO_SWiN)KpW6`Qiq^YhzR4N|Lm-(R|LbLy)FPgXtD z2wl2s)4khQ9nD4aSDxEGpS>ik)zqr@h0?-TT`d8ZUhZQ5e)PjfvzpZ>nskoXFMPC# z`(6FsAeGlw*iEKw+O8KPuv|4nyZ2tvL!|=_0(l$je#^gRma}_sHRfC4O{Le|6Bu1g z?Sub|HZkxvbcr%r=oLjb2wc~3>-+GVeM@5EftY#Ec0MT7IXtCMf5Ob!M?FPWTkvh| z^#A(y%8}_l6>_2HY^S-)CC_}_mbi+^Eqktkhl}dGvr5(0(z>celA zEs`nyue87YH7NTd_iVH$u2svo*QmV=;g5IzcXeK-dgrsqx0Wi5^Vfga?q8l;&NAny(hI8- zh3C5^vxOrMO!qzdRbyv=s*kHtg8PH(-evaO5{=D27ac$N=j-0b7Uv>odCfc3vvJDg zmC|Z4pJg|DM6(^;ds%1S+idO`2lvU%m3QkdKUY&V*HX3r*`W%PXkF&U$3K)-+)dJ7 z8D;o8~7OQ}b%F0!$=v#vf;m2+?D?HLcN_;RF<#;|Dx`l#>pZt)3u@OQaGenwS zznUJNp6}=9e_l^Nx|W^k_^hK=+b0K$=B!Y(YsiaWWsxZmTiW6?+vscbg7>>NFR;(C z{a*jmmB0GzAn zQ)GQ@^>*j=r>EL)mVCOl!b6+o;gqcjbJ>qyV}Dt@tmb-pMLD$S8Xc@=4BQf7 zp7Cx^_r3IUDX;GMUDA>F^_m_1xoX9sZPOn7U6@s|VY%*!NxzGCg(|Q~7d0sdAHN{{ z|F(cC|4okv8vNUGpM-aB0iJNLVV1;|BjZ@RC2%Kh=i&C4p!%>8LS zd8_`pIjX<5B-xiuX5C-@=J-8R(f2KXZ@d)S!}fb)qpvIX?~V1oN9Wy;f9brj`^|RN z#Q!xrbM61V*x|>xoG&xcZ077AleP*od^@^w$9B$y1D(_As-_eOTUhx`oxaK8r=eot zoNk5FMRH4}UR_&u=jCbf@bvnd-fenZ z>ZBJY8!~1bWR8_gU8~jKQ>^sH$8=ZzRQD8-ja@yPmYz};>Ec+uN20MnEo4imT!!Gc zqEgAJ{>!gl%y{IJe)d&9PjB8^cB!xYIiDm~?Ehl(R=TGq>hjTjr#CfdhF@~(D>++k z8yfUKUBBMSvOX|hS3#&-;B~OW_xrna53ZHGD{#_viqKox1N+vpo3r!_E-GK}qP9W$ z%L=aIZA@F4q?vAXyjxTCo6XE+<-$jE8+eacBqrU8IMB91KV(Y-uZq5+mdG8g4R_Bh zGryT*c*>+hRb?Ju@7@`Qmj1Mpx_{}Y{$kHpJw?C&MinsM^bUEvb&6|8nq=4+ckjoc zzkjUbey+8sd(GT+DS!37oa#gQ*DKU^_POM#R=j=eaEnp#_5qjuzIq>yy9DnMd0onJ zdL`F$g?XK&i+22eb@o`V^@sZ{Z#J6ma!r5t#AYeOS>H98dEc+jjL5z{mvhBr+imgN zUz}OnXLL(gZbiORncj`>wzduF>QYA5~EhdS}Ukg2$$$7J{XLh05 zHHJT~hv(@?BppiY;50aLWRl`F3)MLXR)0+W7Cq^%&KaGC*8Y!$Q_nQ7_qxab_oU_B ztz~`;>wQ+tQh1uGc*5kOoS5zPGhb~>_o_V$`J2PsH8X(uQ0A6g_xt>P&3Dwio^0E8 z_T}$Jj}6aUI!&){3$4|E!8~bR!0J8X-%|=+bJQ-;|IEt!ankb*SGTdX2dsFvrLVf( zzkrF=qA{9DV@GAu$+Ndx0yq!N)!`_=mdZcfnqjTMX8S#-Ib71jrmfYOws_~~Pyb(C zy^ykNMXLlS)BKX%MmjtundOB(OXu~eIqFWym)tR$klLRo+A{S7GAx+-|+hakZc4kyjH>N7!!j)2uo0>40}j>%=(T z#jEFW1nKa07ydZ1bJM+xTw;;j$G5HwSe?RgQ)w^X+I@Xp9&guOi#p%3Xia#Gi~GcT z3`g%CVzpDbFwrykS(N(O@3L-nm6yBx6xMac91s0jo8mNyW15off(x+=B{L114Ei@6 z@V|3_H^@;|Pjseo-kfUB8A~}2W&a5`o1LfdF@3T{j)xD=_KTCX1ijk2q%YiFuDtTa z@xl{}dgfKhJ((!oslj*I=JSb9XKYHISh0P5zgvE_vZ!!>__>2+{@*gV111|Txy)|X zE;y~@i1OZR#cS>sy)d7A^v7b>7rA8{T|8u8PCdWr-ea4-8-_*V8&>iZ**rhK{6X9!hQ=+E?Y#p2ERBEccmIRbnY4@U%OAW-Eq)%AUbAPW@BP;` zTDO8a&XoSj-X!sKahp%S(3QHE<+(o7p1+dguX8_g*sbEoMTSVPjW^tlW>#!rcwpr; zecl=6>0vLL)C!uWoOs+g_xGdRZ57E?pL_lO#E89XaFOYB=DD>0|I(F5c5=SFUzn*? znB??pt9P(W-Gs6wGM$%Miz;_9q-(OBx47*VHOazL;jAaqZpI5g4_vDZc$|7cE^+bH ziF%Gb%adFgG`fAerYjr`zPM}Kqm|owwp>lzq7ZE7zb7J1^ZR3!=Y?9Wk5UrVdfq(o zk#}4Ct0(r(PmOK9*^}8By-)u0NcAhO&}(wBW>*bYo+*jF z;>#9?UURJEtWy+yE0(xLdfoj)D&N+sKztU$&PiTGCy(`8~Xp7a( zC09k?-t6Wn`|lv_6fJ$=&}6lhH|l;p$^3h{y)7iNj`=I|6kDxZYOEZ&AzQ2%R17kg zf1acrD$@@yaMuW8C?n&287~P*XY}tDD z!f)?hX^sbOC+zNY?E9{Lyy?~7rOz%u5xT>n`TM!=>jjJ+6J(xDdQvdM*!x=YmJ;z6 z&YeB)i)T2y&3=4DjO)Rc9_f-9&W^L2Pl|DAZ0~U{nc-|RyZNdR*Bv1(tEsH2FH}R; z#I!Ij$YEwU!mE`R7o7M1gtF2DyYk@s(*w^;no?=vx8>#YDwDKY-#+87Z^dRdM=a(1 zx?#dhj-sclb-pN{pQ_|HML+2Fw5uofBst#~o&0-Yf8F6W_SV{*RQ5%IH*~{f8#CGh zCyRXRx>~fpV!luD`9u<4y$)F1$XN64#os-%)k590{`@$V zo%FoawIZl?JI`-y33EY-1_yhebLc%vC<1x8D6Sgy6x+|WwDY1 z$G2Z=<+7`J`u*Fa5GUryQl_PU66Gcywy9XL{o~vGxYp!&*1fVi>^)V9&7x+~SBf@2 zoM$$9@z494ucXK<<6pP!*O#<+EoxUEy${vCWmYEoO*h2g%+#t07n^H^MMIh=Yv;^e zv0%~xr$lEL*0-zoHXai-3to|7mCMU^`-a)!43RQ^#-KN6rCTLjwN^B?eaicE)q0kM z*OpH=ORCnMcR4G5`DVl4l-3>YA#Wu7*`L&9uA36BSg-Ap6trf}%-r`|40QbiTE$t4 zgK}hl{I6q3Gg@m?SnQUtX^D)*&$lWsTf~o41ihBm@bWV{qt zQqT-@p0{F?>4oXV#R4CG-FN%{FTXx2aFKlV|93Lt?<@b;g~+hWNZ!31_;)X3OzBK7sdv6-XZOAQcP01Nvc+?by{L#Wm^1BpR@nCI>egS)-7=dQ z8VtjjlfNo`er2)eWYu>MWon*q~#I1i|^l%Z}?Q6_i@_1YsX$(UC5xdw%zY@X~C=epPzKy z%@kc{EK}<@S$o^ot3}bbtFGKw8TPPYGSgG{T!nM1ZF1feuP$)-bEVeiP35<^|B;oC zivOPY%47LrrgQ7zg)6=IKc8WgNQ|urYppF7y{E|eYM<|y<9*@wa})C8Tkk$^Kb1Xa zVq8F#^qdLz--`tMFq)k2S@oGmgF{P4HDRy*nz)i8%KAaHO^51lads7V8)8CG>SakfE?Vl{2IJ@uO z<%-_pGfiuB0~uc}n##5DyJJ1akB!p&PsG=Xbni9acWjf(2RYTSv`4ltf1fegm$olA zw5&yZ(WCU0uV$3Fti9R8;gU5oZ{3y|)pwkuH@BEfX>0m6r@B+0HMmf0_qyr3jQYQB zJLVPrb=rfPE9+J_1>>_v))CcNr1DB*D3eq70kdu3|I!mpEU@@}uYeRZ-8 zOVbVCV=5}_K28y=6MQ4KKVz=+J6Rpa=Cf)0m6h*}Yj2#}DqhDN#<1X)=FiA=3=W%u zH(X6% zVvf_=S9_BcR;@h8QofWiQ-k$tAcsMW`mWV?yYg?mWfS*VDVntQ1oyVtd`AqHX1%qY za5yB^XTdzpTG5IWFWyh9uA2Pe-m>RXdB^$1ULPypdA55ircUZldvbN{%axO!P2R)R zSQFy>YquTetuJAZtDY!p)N2 zhs&=Q=9LsCPqLRW?9F@Y*yZ)js_Ojl)cbi34cX3{u3ufmef3~~?CKK-3n$(#YS|$c zbv-OlDa!3^7qhr4r*P%7w3H>KUhf7xB`85Q;?x95D0 zm3P?Or%~|#t@4Cvijynnv333KTCUUc_&{%kPScf?voYJ>KYH`z=B`rHx6Ca+qus0S zRsMFFBD^5r_9YW_9nQ)Lzd5~&^uKc^g;>UXKQI0~JUt^}Y3+f8`qvhJt@GpMo~Il? zVs)F})>SNJ%RM1Q@5vqNil;9H{jRh6x%7$~H(SjarMhsIp5LOt&ljfFp4;|))@u1Y zxu%WpJ2YELt0uPHxj5r;cjnVJnF(jBUFN^5KV0eLzpSXB?;R7*(|daP8GhDR?+Pq9 zRz6kld*bC!z3&*OJltD(f9hqGeWx1@_n1H2ZSirdq~uqHnsOnb9mlJKPhJ1Cu6=p2 zL1p9mJ>~Q6Zr$_xVy#6bBGyh`OPkbK@R;4?w6guE|L)O;&xs?2a zw%dA3&tIR`!q6b}dtsfM?SaC~>^&R~0+TdN&&>Z8y$ar!{&kXrx@6eW-IJ?w1$~cB%x_#2e>XQVepOC+`!bQaXu)4bxy$D_NQ!GAHq)adRK~GaKHKO=wI#iO#i0N zV4C0kNsD3rD#m@+Rt7Ro3*ptdyE#qsz@$xynGNrgo*$fB^EC zei3FZt81qG*R725_U!Xq>>9RP>8pdlhiNwp6h6rZ=JQ4xth7}>T9_jT=$G*&mGqNGyCw-mgfC@OjHu{^W3f}ic543ym}}mccw9D-MfMib~{l{R+T$F zJ>?Ee6Snv1E$ucHSX2;sQ{47JclzUQ_L`46+=rvz{`_|1gU`$p%KAL1B0_DfaT+Sz zLH+J^GnVDOdd=&ZBvguB2WIossq2wsyo+t9O@EOrsbTxN+XnBX9%dFw|Q|)KGJo9P6cZm;kN>yH4 z&AnF>lX`XDIk$ZGUk$Hry)u|M@65EVyU+EncK$u{%+8zbLC@Ytg)=ZeDQjI=Wf+^{ z`eXtB%wlW(ZHGQY6A55RC%2}9~U1MGN zD`qkC#4Qey*JRHv)cLi(^~HWYetEeg4+`p*szvY~FgfsxCE6jT)1}kE!!okUQup(v zBh&L{X)n9vaWZCyg{s%ro_l_LNj?rg*ZYbrj{h#L^71;@q~w1|V((8fTV8p5_hZ?c zg+&v#9ym2^LDSwJ%$Kj+PMP&DYH_te;I+_ey|xoP_X^GY^4;p&nr)0fE0Z^LGWUl? zUB7a>Yr*lV(c&}XjxhZUvr84PF087Za^aQkRY#}lbHNXCs`hld zq@EZ2Jx}sg=>Zc_t^o7;h8r(G=Bb50{!_Rk)otPNsc8(~E9NJd&o1oU7MaIiVW(E~ zX!?G+jL>{1qX-A~Q>(?NooD^hu&Y7crlTa~|CDy836qX1o%~ufuhSxO?H$uAX9as6 z$}PKjd>*gXg2z>fxtpS^kF~39+h3kXE5)zfIPZM!MldhKj)JG6kqxK*gv)f*|J|&KUucsH(Pv~d!(V?x<&8YkZ@G~MEv;)jnjUIzSy+b)nIQvC!RFK=NKl5KakDO*P@BNQ;&n?&e-gl}-bFcq;pjv4j3t#C1!5R0oq?Sa> z`d{w2)$MO$_^=Mrdo7-#@c_`(_p6#fj?QF9--2E&H$jwe<9V z>GXZ4f6Cj;aGW+t&oQ+=|eVlr4e(9t~>zDJ3wcI^A{r{Xj-DxRK zcD1!%|0a7{d_A5ow)m*U@3Pj3@z%c%Z&$fy{rnP7&GYKboKZDz`tSF+Pu{P8uvqZu zXZ4dc{~XTORK>r4Y%zQP=}kwOi%l{rr)NYJx@lfD-dh>)FW6jpR_esM$x;UA=BP;bXLfnJP2TP=zk~nGeRGzp zr}yvwyZH0jMLP^d)A|Ib$_1KL{m%Qi_3+`@_y4W2cM-pQ_2|><^8K6V*gdj)c(e4Q zWV-H&vpK)Ar|Eo&`I&I{_t7sQXHGojpLzBo`~6-1PlWR=<@MG5R(-6Pn02vFeDkCI zSFa>RZJ(Fuy?vg``^<|^Y$JTLep!lLvb=w%&-;C!`{$#dm|~^+_r;!{{gm@k$M3iP z7c+u7{%cjuUfbI9qJ3XPxVym=r3mcK4HH~H?lv}1oa ztg~GnXnlW0WdGw|tM*y$lNFDRydV0{E&M0*?^SV=7WJNg8D0D9)!Paw_s3_W>NM`X zzN~b4-qJNuQ@QBW$CQ1Fn>Rj-jhLmUr26tv+tJrbK9lse?OZ2k zS56JGfFl-{N}c)oqz7H>$f^;?Yh!0zDYiO+(-1Ql0nCTTdp^v^$R)< zY=6;e`Z~F;Co(HRzePZC&+<3{0Y{#9t?zqxKdLpm{P)Aw#~+i!WoDb6pAa`e!0}$N zzDCCaDVG(0AI-Y9qT6@V^?G3m$GcZQoNeD-bG4h%V$svA$r5}zMm{ZSs=T_H>leFj z{8?=*TVFGMsa5fTBrDnTyl31V@4x&%-*|53ahoGmh76u@$||x8%o)7nlyxLsEvi00 zJA3isY~|0p{}iX}|G(@{oU7`qqYNgMy%$oBSeV&=`CajO`KN!s^#A_8JW=H{_gLk_m9n0&fKr+V4U$uD$%R^ z;hzUJR)3%DS#&A*SLM4IpMpPM&-{4r)AN_FzOVfJGC!)L_g{tpbHGzm$56#%t)Dah zoSdnbKmFqQiqg|7;&^ml-T#+zGEl#b|G{VJ#`7J8NqOdR_wpR=x37-&dv)}JQoT{p zlzHCG5)Og;C0*w}67*3xwnt#;j?`U>Y=4Ut+LBLRRA39ZlJ6L}>YaP=%j1vKo-GvF zUYR8~ZF5b%uAAYklArm0k$r524U6iGyIy6TziuAU`EW|!%PDnl?n@V$bTEp1y&dpn za&hR+*my&;Cm90F8n3o5e4+k4r`qroTweI^uP+z==>4}@Q(6Cb@8d^-f8IXyf|#n^ zWu-sY-~8x|85hp0{#7}*{H6NyV?V#_IM5;Z_sF^BH`UdR_GeniuNPTzU}GA{8PZ+< zPS0ohnr?KX>%aN`tY7sf%A@`Xnn}B78nPt(s|Gr`V(Z!u{ z+1Zn;_xWt|4BP&%zG`=dIK-f@CbCawsU-Uey}a4)tkC;_SC3DZt`|^%=LB@rqMRi-vS6o#+8}XH`_xcyJlUdeFTzS|;Qgh4JZhm() zx9Vu5-AYhsuaR{%ubokHIr&h_%E;XK*PFc-cZfa8ermcPF=qZ!y_!opYynfYF39-c za@^4Pestim#nDcxx`*5+o0^;5$#vd)TJ2?tnYpK{$C_;4_j>cLCf(BjX}G!diu9ES z->uI6@lj{4Pk*%PX*a)AV3>vF{*ywzMJ3lKww<4OY`bS;$>++8vb;$Qu93UT6V~rI z*sy2~tLyqYoBbtv@pbiIKc750)A?z*xc>j5e{bH*{Crox6h8KT>8%ycY&&tm~UA_5or{0{uUwf?nK6x}<`R^0|_0ENLvh364ll)(J_HB`iZI+P9I2C>2O5F#OApiLIIe(W_x69pl`ue@z`g7~!;^$i0 z@2UBDhUdiT&E5Ow%%2zg?`Gw{ApVQ*=U$(l?i(z_KI@a1No`qCY0@p9@5>n-OJBEt z{PpP$Pw!{(@N{wU_3^QD_t$)!`uXwc`7d7vexGxpcK%GmFP~Z~!_M-zGW%9?&${GM zQTeeuZ;~8qT92Hi{r?KL_wg?p7b`2o&3WNiP+3}7R~7nCg0tr9r$?(wa|#w{<~s)4 zBt1WRlmGnrdW-79s%7~fg1A3@{`vG~_!80Q(|<8PcfDM1r?@eGcKWh*W}S>C zPjxePF($jarOx^Me(vP-ddusw`}c^xeDU;W(EPIHdNoZ23DTRC$}$E~9bU7y56=B_tqoM&OL zuYTdjV>7mDP;q*%Y0>gXtHqsvc4zFHaj(y}cGk?eJ%3Yve%pV~Zr{xN%ltphv@Bb< zJ8^-*fuMU$OV2OgzNMtj@a(a3t6%1R(u_>0wWqnU*MV~Ydm?6+1we9wD z>nhU@Mi*ZG&DEtb`s@m(U)Ik3CSZ{+xHHy8;M!5&pZRBQIkpGQJ11B3dwHOp=jJs9~W?yH_)4z1_%Sr3QI_uVoy^=ol@2cPP$H{ZQS4?xC_2@>7t%y;`wPw)^{140S zSjCqW|9U#x{N&jmW$Wtqt=hZvK!y0d3+=m~7~1~`3ug0rdGgf!mA%e|w`NQ^>lzck zz2o)o``1!=>IAoZXVyJ&EnRet*8k?mzMUQAz(# zDt((f3`JAUd|fo>1M&dNwETsrH>y_uxHid1|8J zf~8z}bCy5ocyXgWaLP|p@xG3l+o>1l`XyhT;IZ1)ndOOBvE$BZQreHIk0~T1?*8?( z``wn!Ar{`ck}9jr4;ET%2-<%opyv<6+%GFRkF|368H%4#X4~n=?RC49`&T{MwmL=P@xxn( zAIFtX&z@`Pa?tQekDB4~&3y%~vjgPT74Au&)aI4%RJp^aNMCK))9aT`Wk1zDce-)& zg3UUaHL@2TI(bjM#^yCYU^R!R(u}^E?(8dTpQo&v9#Z+%faP#j`B@%sl$v&qRfX zUe|akskl0);O5=sSA%;wK5)k#?fBHFq_TlmuRLx6hh#zXX{To27fRQd&&kgbJ9W9s z%Ui9_~$w9{ht@zpZH;SQG3?>zgD6` zyV<6T&b)7artv5 zmLGV(+!f={T(zT}Bl*nseR?MQZJhQi?S8aS<&SZs&zf{m_X&>Yt2`Lr2=>*U&`i8D zJ+5HMbp2JiX3I_|$Q0dZ(rDM^u*`9sa`;-Uz^>YxGOy)6v>6j`6yirSGbhpY&VZ9nslFTS|pgq%@a zx4|P;&D&3JvVWR?*sA~Eu9WC^S6UM@dP;6%xxXFVDLtjf zGqG;_?w+awiS>&-uUi+a;yA35CE>eBuX2WnVtB!RQMb7nzlt9P+exVDAI|txblpA5 z;EZM4#W{~VI3hW%=AS+7a&VIRebY+4JD1n++N9=s+&-7d`iEb3!R@w$hq(;TgZEp> z2rwM^XuqSup`hh|qtKJ(fB0=L2K{TFc<2lyCpsRwx@pt#O;<%Y0$VN@P0zu z(j}JrR%Wt`oL;x7HF;X~J>R6LopDV8K^IQ9e48F2S}OFXW?^Sq`H8#I8S4`k6ndeU_otpJUApVC=-KyKMeA0dy!*22dHK~D zuUBofjuqvpUhaBiM%B-CK6T-ji(-9WyM=E_V4GbWYg)d1b(7?rnXgwVwVy0~`n3G& zq}Qv2+Gd|y=TR5FcIUdNa+5oZ^?Sh4gIUz{y>qhkj%Y6=feC=spar%5s>yA&# z-+L}D+N{%2oyVosTrnv@t@)Ayk2I&r)PvHp>y#b`1$94|n!YLW!$zhct!0|(G0_WF z@EbmukohK2v_VLFE^CwSE(5wI29)SdUx;|!=q{;f!-;mLOau=u5UDQbq)$@d|>LhiPM0s zGRkm)NZ_^4&6h&{tV733JJy;MUd;6Tf6MtXmt>*zhpS>4C9}?&3o~*Euo-H}|$ORCemD_&YVo zh+oA+$@hXxggHsi*P-B|IqEy-8Njg{O7`$Rm zvN*DjTcm^8D|XFhxeY?VR+wJF9h|c-%KmVd#VCX*gKR@do z{ycp?_y6wmiiP&`=l%cgvODRI`Ei~%_9_MI8Xq6)v%C6tZ}o@z{de!o*N@wNTjBfl z!pCm%_7DHW-izS+e(nm-i@h)U?f+ez@atFO=`wri1ML65-cCRBJL~g`i+kPTs$Rc( zd;Puj+kJQc7k!$1{oTCCvWJi5?e~0qdM5w8)Q9f*`v1SYeUSIq@7J>z^XGh++g-ls zP^Naq(Le83EdP1m@ZiPo_50j2U;VeecGS!YZB=vh zr@fGG+F)C~^Ye`My>ARoWx74I<7YH%xIe#ES+w0Ld`HYt2sJR+Um=E$&RZh&(03m zr14vqJDHi;aIVND7qtNYfO9)i84H*CcdR!Mo5RQ-%-gZdvg}0J*GFGotF6~cNGwS* zaNFoKZ9hwwX3K;rd8$S+j7Lp`JXlqZNGL4Zd2asp2AOS&?oKfeT|~7-*v#8jWp>B} zDz3cD!R@s|O(t4};}{3CYESr*fbJPFvaN>-&J>u6I9Yy}e||}lgyO-4Lf5YQ7@X>S z!c)A~CU8waa_~Gi*P=GT`9}-;!)-o@1s>aJdgw>qota`D(jF`IXDqbi6XN84nltyJ z(can3@k@et@NKkM^|7n;6XUW|m)n%Z{imchY4`8oRB+sZ?Dq~oOtf!R6n;B@ks@TVp)=}#<1QI@OT})TE*m= z_@TENw(&C+DvVkg&PdNWxoqjdT;9;+f`4;m=P7A&XN86oa;;71^6sqFG&y!ELxa)e zP_5j7Bf0;S=A@p^Ke6|;$BUka8%l52aAy~WTu!Zh7OlJUm{--jC;KM#ux4l{>VDxq zb3M~$?b3^8vvksG)4Y?tzg<0>{%GG(=74|#m33Smk1okre+m%~&Qumm%!?82e&Qc# zcvMBmCRKD=Nr&*lq(gVU88=VS{Vvb4KCb8gmny0Mo}4a$f7BT@j@Ey3@%}j9)KaNm zgmIRVLomw=adAc|pHaJ`IV02zHNHv-Nu>1$r1R&}1_? z+OQ0yVpftvFi%Doqc2o&TD~TmNuvY~1zVP&%ADq&4Aws(rgBzvrN8CY_P_-n&Hw&+ z>>yljU7Hph`*_Q=9eu*h9=khP)(RvbJ>zUn{mtE1rcBw#@iB1fZZQQLHy8JN{%huc+qzrynwYTD&aWa% z#ZD;5iu`0LxVCP7eCpp_`(B?pR&V@vRcdr5Pf(L};sRR+l}EFTPb`p*;IMgO$0nmO zWw!mTrFB0eW?0yGu$s>cjoZ&8aj`Y^fwkd+DKW9O{nch086$|Dq;qN%euX@YAe3?C~`U>M&E*{DO7yntZ zwO(2L`?-WdFwd6tdyhs$f08j{ecC>2JFTDE9u?}kUvG7edsq4N(Dfc4 z43>P>n90Te{h-Yz{`B^vgXg~a^MWU@)tghhJaD=1kN!>f z!rXX7x&r?lSvza(lGz6h9^Z-;J5w#B{d!kTQDNdUy#otRPS}|Gm#gjP?RT4!T6gK4 zi4FN^z0uBf(xiY(7FvyYZVl^B?{QysJYBT&V~vDb>+aJl$}fMgmipV*dVi|5@oUcW z&lgJEJ>4dG{~wR!9z$QJi@{Mn28Pnp{Lid=6fx!VAA_^EW5eEPFbV}19klT@m^@4J z=!S_7!7mwem3NyiEOk%(sU-b+-sJY358rJ{y19E@^!)cv*7}A{v+dcj;ZujUX_*|) z+V#3g4ppawI&`OYC@tt{xmc*LSTd)(J@eVSO+|}eY?7%>ocPR-`Xgxzs*Sz(vVvOWPWcFHf4<3vFjTk~_>i zDWX7Wr9Y=Z!;g6^F3PFB!nclhd~PsY>hNLBg{ilEc6>WaO4f~jvuQ%{< zXurtv#l=Oyz(=D-J1v9InNuV1e=cNzR3&i z_;sK#*?s=3lV9FFUKjoQYf*jN? z?eE7ac=w*F1GjJXvu%mneO>R}`}cS1PO|=O z;`fuOI%d2(W!m43;qULIy*T_;e(%n*&xy{knfu=tJ0A2ElllB3_2B)4zaN#$d0C?OrO&f?@P|`a{oBpb>&N>G4_p4b@nG_Q z%kOuJBKOaF6myA!S)(q0#_F^Tp6JMaBJ-mdV^kJ*%R z?)Q58>Z5k;>mzr6Q@B@idhPaqUq8O)yJ?W0eS2#7xBDB)&MvziU;l6Ut4*P+qttz7 zEcmMJuVeM+jPdz5#r9TjHXOE?zxiitY3=u4mt?o!ulqSQoNs1**7`Fwl4nkLnHtCc zK0E80@B4k{lBZ3ZT0Rpgf=kB)Y` z=T?``Z&km)x9aPI?fDU#pUtTKcJuk<`FfnUB>7p=>QCOwOE{(%xA#}A`5ta@y*s~K zINjIn`hJg@f8K=)ANJ{<%J(*&)wvaS?%BT6UanPo;#+mtx;d|w$Q%AX zTYkU({vy@Q_iO5sAAje!{Q2tk?OPm6lYhP4{{P?NXZzx--)v0Zdv|%cTJfbk`9E64 zZ}XhR^dz=E-TS?7_UCPOzu(xepS$e=Iz#x`SkT*_}r2ki%S%hYpWXZZ z(As}{_PO&*f7||5dtYhBw%BdYFUYTt+4*91_?t;9_phsavX0-b!{&Xw+nH5=A9$aS z+j&3m_4W1gJKx@2e*gBDc4KwlUnebJ+m&6uaP3;z)d!2~x7YoR-)H%n$5QEk_Uf3T(VPp;&dyL-p6|+J~Ep<`u#rN^1-vI+U@zj;>EdN&E56+|K|U4!TDC-IxhQt zUZ1`8W$nkwm(RuheeEe+f8K3P?aRa4^L9R)^{`#8sy6!er>WZgH|j1QYGv1#H283R z=Fj8bi|YP-+*JLpF=cA;0r_?D|NpSDyJa z*DHAP%*=Qj7a^xj+SS{-0;Y+naGs3X)Dp7g;<7FO-b~E_|fjh^z-xj4*qCq{AqUY_G-v4diD2QSC0_o0CN5!Q_R2rQ{J-RnD&LaRnr=&r`ebc(+|<%r zHle!c`HU@d=Ir*L?|1q}onFxqwYR0u`*`17&*xll@&4aWpL;J|GCOfH_XLN3S5I21 zZCudLuSI1%CKfpkvo?K7c_}+PDcQWK-o3A-)6O(XCc}>bq7~&1#ta{hi51lk+xpUozqr9)8|mCf_By zbfxmviG0=HrR*wSS=3MdvRCqj?re=;w?evAZcSe)%wr}ok0)zY^@oJk>fVc&mR>f` ztBH&(2tD}e?r)o2e`NQEujgXtt$O!xtM-{=M{I;MM6WE4IaK1m{_oNGeyni~4MEO# zcz104o0*pO;CA9k85Wk%8twTH42|C3_4;{dZ_(k&heMtU#V*+wHvN>cd-09ca<);C zvCA!vzWDO6Qtb4%+7s1kyAAR`Jvk_>W}(V{#l!X5xwv&NOLO0vKK-q~UN?H%n~Fai zE4}M_I>z>&3AIBtgzWw|6clnVe8^qn) zTSfQCt=pc^80Y!2p{~A~!FTD^`sQb|R{8&sVNLB_a(0(dTXneDGw1oA7k+<#k$bvc zY*^}+D@uAkYv-9{U)y+O!yW!DFOBV1@0`au@v2pJjfeg7M{n9+zEqtrcb=tX;k#X> z*Y|DwbNFu)`|9KM9yc~T{M08ae16W&{mU57)>!E38E!QEd*Jlm>g{jtMwj|le!jL= zzpl=j7rkcdS6ThXX@z?<{k`9KOi6n7+vF&Jx7pusbB|2&pMT@sq~zry6YnnOn`5){rt>PB@~k)S1TG&xAME4f zdw0hUrbAz5KmYhQ?+bHP>5n-No4d2MuNMfktPBn{%1=+dyR-iPSLyrgsqc$<7suOQ z_WQ7MtuN=P3+6LcEt{4n7;5S>$F?=$$D5`Zlg_SVqm2NzIDf{;` z7vnqqWl!dKrWO?ZSgNYZ{V?xut+daLgRdV)99^b1J3T`~N=nnhdg`Nq{%?;j?U{FC z4zG;#OrvBsgQrK^udsSg)A==N^1drIVjEaQLgV+J`u3#l_^vC3?-`jIJ+DXn)hgdo zGWV2bZOYn~XDhR>?_<-H-Re1I{rbA8w%7mMme_b_hjw?We&zL$fRz##u1ro(b3S_W zuzSr~t^FS?n+;aHxV*et^5RZQ?PupKC->YEO81t?GhGmWb%M>>O7D60`~S?_6A@qE zIq~An8#ksO|9a-?RnAwhW}cX1?OMggwo;wPNF=v+@9X4ZIs0!X`YtZsC%5_3$`aS0 z;DQ4y5;v~-uw0V;y7Y{Oyj-t+KR+yp`}XuvQ*6;yXSZKA+4m-F%eq>0?RIqefy5*e}&xC!bY`*YI7pSN`!{=H!j08V#)?m!h=&b?(=HcAR{7 zXTN>%35~-3$w_MMA)AdiZxWkjGu5)P=FTD3tmtOrCC6Fr?fH50x~J0jd$BhU=zcVp zn3HR~#&Ak$z~_b(+bK_UJ2u|lzOwAXgRlGU$E-VY^kQ+XmVa2f+q~ajGQC}ou2~s8 zd9!|0cGfDsk5b7K9#7|uXmBXGzixGILA|f-6dwM0+#81Pp9n+h7gZEyc=H^;{Ca>OK~qK+>2$a8{g7b6_ba(i=DPms|jZ*)b1ZNEGg^(|>W&rE}hi>1ihBOuS&A733~IOPUyfL7nbUn_zxc!vp#j56jn5M)2g#mfBZ0>Dt|aW{^mrt z{)?A_ybGu8XgwYq6}<1kO;_t{KK&1LBR_xIvaaS=$kQ)fr%I#*ZE_{sHo6{rB+{~p zXWm2siIV@b)_XZrF$#Rr>f8N(e)KX6x6;dN9e9lYo|{{_)4A=dbq?o}prgB<%oY_b z_VGR9?9?`O|5~fcpj~I)8YJA@wSDsU$Qx(>efadr#es8yxV%lo3;74K8xC&XaAD!C zcMJjEVdC7^-pU03So_B%#|R{_NV_)!T(utpD|jm;bP7PjS4f&cBe) zmiEu1UM$=@t=)g#95X%s=d!OY-oJ10O%8w6-M-}KRhPe_dg~VnRQ@?NHTR^sEtArA zuT2`Or_6tAX_~N9B4N_*$$xy7UKMI6t=h66K_%e+q)C0wciW!L(u+H@GVPwX{emTn zjDBXecsVqDU-b8jxnz-F>b);Z+U9E9I(BN=u|&=5^5<{;39o8sdG_I8Uu0nThBCF+ z*Y>acX|rfU#T>y;K1(i_Uf-$J)m3~|D9=9XO>Dvr_MVWMJ%18bPQTykK5EYG%75gS&Aqqf?ZahjU-~>NOr82*qVwtRLXqsD zyygNr)TqQaoJyVeF4+-Wd^NJKR(`A`Y-d#c24$X zegC7TiZ!uZJEyj>puuD3&yJ0=FL8UtT}`pIGkf*8`D*Xel`9-7PaiM#f1X{-2Y$xZA$r^J>ZeO>PU9iFG*peqHsfG-pe^yQRjo6Uj zn40_aB(k>>8Ynb$r^{t zm}&ZCtTA#~Lh>7k!b2j(a z8_CLVYpkBDxR(bXu+*QO$hdgTr1bmj&1KdKmkvJs(mnllp6rb>b&GeA(^6)t7_8K9 zsJp}V>C6?A6*-J$pPwnk&Rl$;p||gzl*}GerAMze?^>E>WBoY#;%8m`c%htJ{wX_a zEOVnj6;rMmHMH+LBr(6``7%Lk)vHhCZH=SF z{vZ0iH*HJ&m9EHJ^X4u4vL{L@JM`@H3reOvyw4bCoP2zIc{AhZ6*iF%Y&a)muh&hx|OIQvtt{_VBY`CUF~V+d8F5G2Fkak(G zF^A*HwTE9+3(pC>-s=91`}C~ajX#;cZP@?n_#rPt)$&=Nc9^DWOUu0pUbCL_!eO&# z%coTRsxt|*`SM}gcHd+7zJKZ!4mp+2Fn6;0#O0+C&p)LupQZ2ltE$MZbo#oO8-~km zj&6yYqq?zj^YrWDvkeS(ALKAux8b7H_gk~=s!AS3$1e(f6D{oH*5JM2$q|k0{Jp8a zcU0~QXJT5%H@z-iHh<0g)E1doxoKCgJlXcsC~@Xi(*l;S2kes{vz|L=%x`-}Ix{p< z(D-H7y{mP9A2mMt9~9v-*V5Y4|NA@f(&o2^gO4AHeY9>zSZL71dd?X}mzU?>TpO~P zUv2TVZ06>bmo7;PtEbggniifh`N^zx>tm(S28)CGC%f{dP1F8Ub+$CO@Yr7`E@I>9V3{XrP&jo;+et~ab8!n7PyV{K z;=aq#$E>W+^fzzMyBAW%F?&}@=%Gvgcbb~Mn3m^VJ|DSne(X!%{`0eyE4B9@sCjtE zVA|u2FPCgm)#jJCo*py1w4p*$qR-(~&EF_51%~fA$0jP9%|1Nkv|Gg4srK6)wi>ei z@VzG&EoXnO{$z1+KN#mn}tb>t1we!9DJVo`5&o{xz zm--G|n-X*PLEXdDMfqR%u*a|@KAG_QKoghG?oCm@9vz+Veg4(-hw}=H9)|JBpzi@F*&2_iqYm)>ftXd!XL|)=bt%Ydr?2lGz z^%JLt8tImP-?w-E7u)?RZ_a!WEM8x}df(>Kvr{xzFI#=YuKLBE*D;@dGkn)|T+n~- zi0v+;`&paKe^tNu^<>lL;^oKR@oldB^l9n6H5<7;`Cd-u?g~4*@x;8#{kAI}o%o}W zY+ZVP7iagid_JvXkEfqA>XOtf+qX$AZ`G{pQ;Uzk(tUQ`|NK4;_Y~D>Q!elx7QJ6@ z8b4v`+;5Mh_VKNVJMMG%O~v_ayE?b;76X~RPkJ&b6nJ;-Q&(=g7g7Ib;<>NhjF zq&&aBdv)t-p*`E`@C`e6++C;5wkCORL|&dBpXccslg@)utiL|xX3e|y>*uv=!H3!Q zl=IB6*;?`8fOs>TwzT|~`H~H_Vp3i9OJuBab58sb_J1Rn6TdC)(4jXsFTd0ZOt^AW zRo`dH(&hTM6;$K6Q_d~gP;tk?oG>AmT#;~`!Q>>SlW(oeKlJi zZCT@m3Cmh9uQY7fQT~4Z+0&7M`QMZN&s^~Po0pf&?*9J9i4h9}eco&@4tV=*afnZu zTSU{ujYQwDGTj@{RzuA0!to{7VR;GOmCce9C z`qW)NmS<r7y>HqT?(j-n*Z-3GBJT8CYhSZeAHVHt zYUwF=D$~p!AFvYt$tf={H%rVuKHUBI%a0cqItp)l$H^(PafPZ=L3#V>rdu0YA62`1 z{_N&2o-!@WD7q{EpIdd|gf}wAMoClN?3m7ZZ=QooqhRR7f|WwCC##k!Kn=Zjx&zrtf)9i|kZ(|bS6yLDg70^vzQ+WTt~YjsK|{a*3$!3A5hB9FM+d#`sU}`lpLlWeukFKa*H=C2mtQ_5qOIjzu1>`U zD;1fbDJK?09ptNvEquq9X;b@)?~+C80>|l5M}9K4zxyZmV(t8{@~$0k7re~B)Ohnk zg!q)1Gg;2G74Sa4og^LNe>#V$xccOzm(s!=XTE$XIsDTrYenJbE2$eAel}c_u-YQ_ zqlWL>H+fN2Zo3OgsavN_=d~+(6~a=mr)X(w$3r0KP`GCL+#&(wV!rf3YSl{ zPhaRG)v#^{Z%x)oSKg;9wU(*JdrUf2CSx0M<^SHOFYR|Eo^R*Z6hC?3dhHH-`NNiy zNA4KsZ%?TyQrmF+{at$n#oi;re(JRAA=kL+Bp$F`@q zou6ARSyCfwS@iI)?N@$2(fKyI<`)xuBcr;t?QLFe=o?XV1w`35DGRc|gWHMF}b)G6Ygp58X??l#7bK#r4|o9x)iHl150 z6nMN(^m?u7mya@xA(sXzjZd7H)&#M*tc3yYfgqq*KY1jH7ZN5J-aP8 zaIs08x8JWXZ*xB%wiV%jb;mM&U3J(qd;8T(@(oOlidZu8kDPc_&ec(F92@uM{(k#s zHw;T+7T!2^Vrw@0^}O%;;T9!NCSLrb&C8o^A%8gUzNgK`6Z(c4tZI<8Nz28rzL?8Qo%d0$LlfIdw-*u0gZ+~`1s_pt!7rOA+aU0|9Du)*` zo9=z(HYqnetDjkBbMo=yzrXW`Oy{#+vN0_xcvbesq*J+8hvF}8J6XW__@Bkin}Qyx zshLaD|4#UHh!R?Njbgo3J6}-u?WB{p=x)KTg{)@B8Z{a(jFI?9?;4H|ivJ zvTwI}_j&T#;HlrF`tGE6D5u3fuhChy^xTYvd$^xg^YZD(?3+@4@PNsm1-}-yeRy`; zaN6Y}lVdEu*8lr(z%u>lo6XBpn)24^)LP!#dm!Nc)0$eprYXOl@6piyzVM{RlfJ|1 zesAn0^1oE9k$C99A#wR-`=1KF!;Y68TQaP)KKyptn|TuaQ}+I0zWg)T)3{&G+ALf- z)A;pKk+2}njKrngPt<#NGj1zwNA*2VY{i*q!=}n&qnuj!oNIB5a^JEq3jM^%HNWSG;73iu-qG zwl`m?{Nd{ghc23WXI?sgd2X9b#+kya?tSYtC9{fqtH0d2sF}1nT;JLuqaiMnW*1mr>N`Di+M3L7cMIM{oG5te{CivebQ$SQ$?Ko)iB$Z{?sNT8$k+8<;Zy9t zZ(TN%iAVglY40@U%@VuYxs+Q%dAF{A_3F;5S?3-%o_z3x!P{dY|8=8dziYJi zOHbBbdg`WRW%|RJFZ3<1<^?lp6`%MxkFUlvsY4*oEw+4NkrZ;zTBJrHB3T+C-DD^T?G$c=H8C8 zyYW51D~l~bZvLf8Dc;mb>m}|B+w$l3tlhCS@!~{9wRa97w~m~)vaEM|b7M<&dGXiU z?N?uXyeQ^t$ys=QKKqZb_uf`N6pF4q(5#F)F?;iJhH#y$PLEz1Z~ioE$1kI`4f}sr z=5O%#b~W6*XkCp5@5CLUp{<9L?rJacnLZ=EPx}8>E$7EC|1oRzu;1=x_r5vD)V}0y zY^J~Og$T{umX@2BE=aD@5BYB7rm`vBN;QAa|6f5H%r>pdvkdV2J>&SYj>_v#R#b<2 zZscN8nILrg`}_3Z;NY1OJMo7H#x`EnLjoev?W z6}7!RO{dp8_}%m>ESe-S-8}D-`jpSFJ)6Jje~$OC-hL-kuy$em=4U>g?ydgr%!SOI zv%2)&?_bJtcG_O^R~H!{xh^Sj<6V`rdGF%I?zN?N|D4(!$k}f9Jk(b`%&Ylh&Z_9Q zMRpC9InSqFd5|b98k#zR+fd1jXJ*H@VPWK(%+{0$GL#Df1-Y*q5b?;=?b zN3xfs#&}HY-fqtuEWIuDwZN%E6T{8)!s@^I?B4jOE+8SHBzf`WwzeDA8kJjH8oRGC zPu4Xt;mx=cbL(xP_@%y>8--^V@2R=F>#14AtB-WOO|P^ z-uJDp@@3PH&HC5<*~Mymy1Vb(%CWKh_3rNe# zSekfLow>08->Pdj)$A)3axZ+;)$(E8$};oY!CSj#G03Ms|C7Gl)FPiZt#v_LwCcWX z+UMr{$!LH4Q?ocr{PpYL7nSoKNxusSe}8MKbw)sOR`2V{GLKz<#kFtC=fD5^?X8yw zLccASy3gJdv%5^XVC|8|%NPS++ch~|+_~?WMNsv|)}x<3n`dNNGxzqsKf=>H$)rDM zu9oCKv!abNu6%ra>p=2^Ymr|S)|gD2W~G~2|7($NSfQcRSJlf**O(VR`S8W>@^sVh zjaQ%M*OsR1Jb!#G;?O^dGy7(1xBtrNJ$S-1&`B>oZg;nsP{nh<(x2_K+`nDRpT%hH zGcziu`01XyD=f^#LI!Wo&AlBH6ciY=>F1rDUA@wG|H!{}^^T5~ZmbVpz9*(6z&t-o z?1O)7?8nZp=Vo?1`f^b3wW&(K-Mo^98*hGY&4{Qmn=$i%^ph(+^Jjeh_G_NP(#PNL zt^f09=C-`MCcSO$t5tdCmbcvOnR#)_mkSjebhCHtKVoH5t1rMA#i_dJCbaArX+*?Z?RGz;2_0X1=o=a6rI5+z9f9qwBOP=-V z;{H?IJzmnUv#*=9wYBKY?RWSRUwwFYRr)NRZ;xKg(qE%#(XP??smTAp4RvLsHwM4^ zQwgX zRkL;D?nFpT+>*|}@lVRyeg8gg5m`$JpY>YXQ$m{x@$OI~;y> znP=PawN-xe1g8Aim$OamPhhmrwLBL3zihE) z<&`fjEUmXV7oWAOw5|GQb8xxY(p@IprZp?(-M-McUGD-}n{Chqg>xLdnr#}85MLlyd2 ziJkA`Cl`l`J-yPN_Wa3>h^SL_clAC$co%DU`?afYuUM8byVSW=`*$Zldw#y>-&yZ| zk^S{GZ=T$^nb?ueCa!88WS8dBVb5Vv{O!#Z%{X2W$+Zt87nXgAy}sW6>!&$;N>|-o zxk979Gn8++{pp?4>(=ZP`Cn73<9Pgv$?s=1Yh@m{XD@!U;YR82Z?^tZx6CqVOgMhR z=SxJ<-IrIx?*IC?+v)RE_8mKRc&zYvC9RoaH+$Ml-SnXQGh`0TGA>_L_4)Nn&l7dC zc6E!nW?%7AX|kVX-k)??f0BA`%vLY4iktlWmQ33V)!ud9*>c3|ZDsm;byd~SySEBg zty_0a>6Y8s?dyIe9Xot_W8R~!o4kD{^z<`fZ*T7S_}#Ry%_OR~*_e`}w`KPnaM@G*~&r)`OUaci>Tlc3Tc#qU8!C5cf zy?efV-Ad`N1^3$aZ(eil!dsntxwR_BY3{$~Zo2+WKfq92&n5SUK-sQ{Wj@Wx7a!ypP(^3k6XQpI$8Mo_+a6{`$6HPQg*~VAC zvm15@3VToEh^Rlf>B)(!al2T)ygVUnXxOqjT;2lRcNU z53h3lS|58#!m##ljwjEnz`M7faSBX%|1>eu#~t5zXzSf)EETS7GLhE`E?0&Ae0$}JVl!JQHc#!ZP^l2c=V~hrp(i8 z4*%b}_jzRId8OA>&i?Z4+}ze>%jT#b|7vu|)b5woO{tWnEWRvk*f6{ZoFKzjKwOJm1c`-R_7UeGDUvPR&b zcz5?~W*^`A`(iKGoX86Ozg6$)PVPN>U*A_}H>v+EprdALQ#pIdvFGLQ8*VqZzk9o> zt61)ojM%SNJuSz#ycSbl?ARU?8(Vw9`M_jWezofA>eVY%e_RWXjxXH#^Ve4{ZSD8J zUR}y}Tw{Ly6E~ONJR8r5uRhxjmUwer-M(`pTg~@RpNwuSe(~hVmIvKOxAU(&s5$#c z=cc2-v)0uH{C`vKTXW@ zUn4cq?Rd*8?K3kczm6$Me#>y7Ds0Nvn=4kh+^=#?fRmnA6=z`(qEd(++DYFTT##&_sVw~U-RF4#UGt`G9@`V zS@c2lzNiFg5uc4qf>vI;cJ1L|DWS&?r@#9B;?U{)`)V0tFMRmfHp|+4#l5@r8`rH{ z*LbitA+PV6iILH)y&6333Mx#~u3x%z=}L^al-0kr&Iz~FojZk%13m}qr`%O8=90^i zFx#jT`sPH_0#5Ig@|kWD-aqf}D)lbAv-iNp&8JtWZF+nl=l+(=%X_Q8`^}y7HU7=( z+c&O6*w_9l;hTN-SwT><>g2Hch=@xXa*0J!I}MH|eLwqDGT(@2y2)Kz>E7x4Y|2Yc zbd}@@EiAj*&fsakaiX&5)G0=nE~yF6jZb%rs*JDR;K0mt{@siHwaT?_;_gv4D`hnj zZx%4|><)di^Tv%c(&qQBhShE9IXr9M?mFL3%X+`O$gh|gv;DJiPwJ_o>C<9&7>1os zS>$}SJzT!lFLv)PAOH0RN_X<7HXp7Q56aBcoLtbb!mjicw$p{aIwOu6^|@_gg$MeCb> zt(oHbKDWtePi@v!%cs{BuBh}Yv-8V^Z0X$pdl}Q0(uBrq!o3@BEpK1bnrT(?#3McZ zx%H$=|0Hz29hznN&vf;4oyerbM8o=j@e6-lIQr&+WY+dsjna=}e+k_WkjkB0;JxY6 zpHs_KpFVzjE=R zqjOz8yTm-5xXkqL(I{R(w?2c5E*1j7pvI2W)fI{WovRuPVLVz2)(@JF(_L zzx5|w+-&zxZHDN-RR6?4!5Ob!-Mh-4cYj&nLm!AKKxo@}RW6XiA*{52V{rLDArKTq*ottAFKFPw+)$#Ac!|j1z zCq122RMgA)>FD}L5$$|(doIO%c_({Fbw|?8AO8*>KlM)5&@$IT`$#P(%a2W27u$@! zwk8!7KlhtsaPS9%;@`8gkImYi9W-0_?AiA!JElyTR(FQue1-A3XSSi%tov716gfPo z%=)wEYiG~V!al`r85u5rT}w5y4gYUdCLL}+efs3xoO78+YARp-e5LvL*M!J57ZPTw zp8ears9$#Xj#octwzakGE-$@)ZTh^rPr0`r8pYPn7i=`Vyfp3omm3piXBW!^xUM>9 zyk^xkPV?04Pu01yvPu&raw{97Vkga=H&1T83Fm2pl49j6bM&k?Zj7m(GG*q{rMAh} zPMx0T?9O+)^qhY2-&y~&TKV(Ov4<~D9?;$wyv=Whfuh)-zYh*FSNwk`CBtUy?x^T`iLc3P zvp(CE>ZA9)Zf?05sKhNjWsxS^nu7;APj;+0+4Vj*wV~}~wpKw|!G|?^Gw+0auIx|$ zaX37&KT zoR!soR~1_xFk@X>=+Z1j_gHDgjd^!>Y0PH%tK6;5d!Hli*uTHQv&3eemDCTNnk)Y9 z%cn^)jRMlr(SLuQEfw7^)H&m{@-m@gzH=l51vf4;np;udKdJAAV(N9{i4)z}`(H(6 zh@8KExwxV}yLoNA?vmxp(~~DZ{&&s%+~PT1x3@&TjB0b+?4RmbRat47&=EN4)%x{C zX}=}UUyajRw#&EpoWRP$;N?sYwT@}qmd zSOr)AJr%6xBydGyhu628M{{qxWz}V^SSzDGZ+_}-wg0|nzAaz3>HM}6agkM-PtTV6 ztxs}xcK-bN6A!`SA$P+ew0YKffQ7mXK)Z zV^ID5sP*ZGCwtq}o12@>^JMl+RI)#~ap%g5ckb+2u|h*#{dn`QLtB1wEC~CM^2RCp zwyDExhMn&W%Z&_oEh+fA=<&_$BVD;4nHGgc6X-F{h+&Y<1dGR z3md+g=P&SjwNFewdPnKh&7YsIpQe5F%o(w_0@7KVS8vI&2{>@8D9zOI@v)+bRjwz3 z?B_3>Y;-T=04Ie zjR(EI8zc0!wV6K)o-ooH^*U|;yb7s`pe(s&pBEtRlGCLHk65c*ozp9_lIPZLS z#jY!7e4cH(v+~*O1FIdBRGyzW{oW`%)%s*wW@Yv2Jx3R8J!Thue(v%xVUF5C626>6~u7RR8vmcR%e-x*QZ9+?xCU@Zya({-68*w`=;UDc_WIH>Y-sD?A8v z*NIz|xng;%gO-M7WWv@dQ?{JlA~y5QTOqY7BX?J zWN9dn-QnZ0ck4Y1drmv|i*g$;G;%8XD6k!Ao0BSn-?qG6qxSxRO6C` zj7k%);X{^R^L#pz`5j|anEV!~W=QRGT=};7kc+czU6^OXW`)xerZh1vGL03wD!lM4 zyM{-=k_8O!7FzH4c&?~8QqSY!dIKpDGnYnvCKiTCCLJfA>>7qk37X@^wxNb2>6}7)8(y-#l(!;UAk2d|3 zKNR9)^CrqDsMF-FPhs-rI~P3?g)}N;e(rT%vCGJH-J#NNEcOlaXYjq!tz70J?DcWi z>O7aif@kIRhDZ6bUaGMEVdpPnYku_R%%elfH`w~jTD>10&h-3u=A~4W_c^_Av)R)( zuV%Gk{-D2{H)Y0RYxbq9o}79zc~fyv;;ji>m%XD(?+M%WwLMrl@4~6RlZ%38jz&xsrdQ0LQ|OI&zHgwG3hO5CNEznbE5MRQ=9LFKHZaX6XN=& zhxgrAnp4$0zu5VUUIkZIO}^)`i+Lq6E-hT=b2dK}&k^+zmlcay%e`*0X4LVi;Z~O$ zn;VudSE~QEW6LWRyS^H^#m**b`8yh0T3c;;SzmLfo2ty|yCApt-lWAF{<<_S>?)t3 z`$2fanP=W_#1`o4zA98ycV1wTpk#TYF|8ssWFm+8!SH!*!c+7GGlpZbH37FKM3+6z>K=J6byb?eH7vX!0lbYplfL>w16)_;Gp+50_<9GQf; zv^l=c>5yHb*x$8QX`}xMjSLpWHO&{jm;KOuvixzO1sj{IYJh@GXNPL=MHL;L-;U87Wa^XZ#y@Brr7OfcuA~urUio%`|Gh$za$T0dI5C~x5S}W`Ot4XES zf%k^&U(d_zuFj7yq{s-KU9iYQL!`|m$w6Rllj1{87aQIzbx#YuoVa!AGnDqX3fcGS zYiKmsyEtAnERkvRS-OZZc|wEU;$Q_CX7`0#oR?4K*+12=>i!FVMY%Sog#v*YIxdGU zX@n@r_8%1v5SZwudYRMV!Gzm}g3=PVYaV@+tUmXjPgP+-)e8}wsa?vKJWG^jIk+#r z5W+OqZHZxqi_*qi`zX$X&lmldwMsb2BGY_o!Nm(1OnpZVIEV0v9dcZt%GAvBCFpkD zmTN(dC;pvuV)AxL{%E1o)xmU6X`;umMTRCF3~LOPcJL}~dt96tIrYAZ)_(!N1rInH z#4lLz^qy!iDB! z2WEyI5n6)XZ3Q7BTj$QoU0M1;Ipl}$su$^je2bU`o0cxt2r&}$5HM> zVj|_8wLF^TtJ(kh^Oi=OE8?`KGKrsV*&xvCcPv0cgGCK|3pX!sCTg4UKy*b{i3$gevVv1&QJ}^;}MQLIqdkDiX4&TE89VJ?_SNl4ns;;C< zz4U*`&9fopqKZ-ihtXWG0}mci%(|a(g|k1rdi-(asYh%7F1EP*CNih)#wPZSD)TP$txrApIx(heu2IwbiQA9Z zh`yaV^)~CA2Vafc{1+%|iNyS_~gE}Zjh}jOY6Mjr=z5UvvSw|JrriG^Fn7q>5+#s4Dyduyk5h>C4R7_ z`jV-3r(4g`)~VY&|D3w0!=~?X=kW50YrVNYT<+Sl!RXHXX{v1ZCZ$e4u;K0QCc$e~ zk1j;$)yVVC+q1!IiN)pJY%V$c9M|n~t|$rq_|OuY8-KFRo{{C_@whV$?~)^IXEEls zbWHfayY(;ohyV6HI_G{ec0b?lFTJC}dL{pI-{`nEP3L#HOQyl?qJ(_|Kz;A(~~;* zUMSxxl3A}*h4i$s)hpCF<{whw_W*%jo9ur|>+)y6K zH_ulj{b3(Nqf6uK^~~!EiWe|nZaw7qVMF@?<1UVWvn=PXT<7(C)#{+D;@tI*G*)W` zKD=66Fw^gOe!tLD6}g^ivF^Ed`S0bIu$u+lJ$3NruDzQToPLY#;`Yd6)Bjlh!fJZ! z13@oA#iR$_0&}+CY(A%KGr7HIgR0%t2~Kx>D&lV|vYDThXS-L|w=)!VFd ztXEJ_6>x1VU8n0eB<|`0*U{f(m_|pdl(%d&>Y}TrB z??27_yZLb80wddl%q7#b!{3!li`K}AZq%rlTe`hHA(*MAv>aVUA6cV`7m4 z3-_OMZR`J({q4+qzHo!(oxH10>@)Z-hlM&fSbd3KGVS7r4TTqMN)H~ash<*%>%M}2 z@w$oyoCj~`e=qrG`_W6r&t>r^wU_)ZQiV&tO+02cp)PsJ#@o7^_g?$@Vc)H39?9ho z{_hFh$0z6}G2cFB`~PLB)^e%4E=7Fk|MNiVeAKg43x9RGWfcf;~K_~vWpDp%L< zcfX#yhwIN`24#VYN`ra(HT+r?nP2kWtK0hJ-&H@JnL0{EiNC(pwQ~3#=~yT5mBWL* zYVrvt)uU}Q_E>1Xcj?fzSzGVGzQAgY+1DlEvfD2v2JSGs{UWMn&;6C|yYBD0m2InZ z=l(6Byf^DQw>@YiAOE|rw zd}(B>d5LVfDCgI+d8#MhOtWTFG=KS$DtfC@6n$>ofD(1;M!=e!eX`H-C5e^1}t6++IBY>S*B4Vr!7Mbz6+ahP4i@ z42mpko8F!Hoa8Ogns$D3W?f)R+xFb{FTc0*|IKcCrD5cya!7g8$(81caw44?Sy#Sr zcpcy1^LpCqX&ZdbE0pf*Ui0_a;rsG4U;fJ}eeY|QnBS5Xy*-!X>^6HNxzBqazw7Y( z_|LG}??QLH#De^{1>v)19c%kBktL#-D_`uZ=FOar$A^lRaep%@tuk_XlEHUj$s+6c z>ZjMs?y*KJ_}}zdV~-~Ly}FG8$4jQ{NpZ6F3kl2f+YI@Q{6=DZseui@(e0Z7Ku45^48pYX2S(ftE=}4O_njcZ&&;LT2>{; z-Q$o;+Wqa$R?Ka$7dCFC&SiWFDK_;9{?6M^ zo~_FL_+jSO)Nto=-ai+g`SDMm|3l+{w2rJ}e)L(H&1PwR1>8*a&P@r@Oy^sl z61ZZ)?S}jv^XBFTH0;)Rq4&bBru;YG_oZKtOn&#^Eq{dI3zcR6f5+UPpRV@7?0R`& z%wzTi4{xc;X76^npdE1c$GW{=TlX(tR=rqs*Lj88zg6ruH060_T$KG&e{o@yT+;uw zQGd!;Z7WVao!)O}6UN=nSY5JAjPKFmhSt(Hfj(EB-xyzcKtQuRUHbckNlOdj@BAInyrns#U*5uI{}Syy1|@s+D;M zw}%G*Pvd8E`)#hZG5+Ph4*_qr>V^I&FW>xl`5)alr%r9HY}q+a8$Og3C02DEsf}*Y zi&@@T9?_{DdCR5#cBL&}?xU@1kJm(-2mk%1yyt#wR_e!&>!p8oo;NQqo%qvp$1$%~ zg?|;_HvVo?XZ+6V|Lg5LX?;Gn-T7{xby+uV*~k03_Wbt)Yq1TUG}m$RZ_iZ>shs^4$hBiQ!iXFkITwf!4T3oxq0)8x@*^RHDbG-)gM(< zO6PdMvZZIS@#(q!Tnab+gLP!TYjLmmGx>U0@r=J zo*i9VU9{4iy>AywQ$9b7e^z84i?HOp$9oPekiFgbI@5b|dq&^?f2!Btub=wO=*>;x z@U8AQZFa3yxK_=2Pwm6aT;}?DTFZB1H|D;=At6~EjoF@i5az>vHzZiSJMEfmEi?V!#a_GGeM+7g>1BTwq`ljx zllW%1y1>3D|9=v&U>hIU4MYAjN-OuluU6J3t>cwh? z{Oa7KW7dn9G?a6?lFt{VUiw+d&MMV)UFmY;;oRyOE+T@BubwDsYx8VB$i-PF!ZcUt zh4H+)rs>x;Or)MLg{+yAAs)5(T){67aVz~kg#$NQk3P({bgaKsvWq#i(d>CBzjJ_u zfyIt^C)?lAP6D5F!ry&ABf?nRC83%7A-l7XIoAKZjqTG*dMA#mH&icAd^tbi_Lke8 zUtcpn*|Wf?;&*-erIJg`HZ%E|7PywbO?zK9|1I;o4B>?rBLZi?*nRM){b`3+MxN>G z-ze9#Pf4 zX2PBjBz^E{uYwd)uVVs3u|j}GDvzI}>$BVsITv$6{P(rB=Nj1weT!Mwy=l^<-Me=y z<)q$pJlCbOZLUyF-xX(r#-pLKbKczg%6KsG@|6jP)MMtneZVyN&NS_U=ZTSxVJccl zjT(>2C1M^avn2EO+x_9(zEJPpdj5C=mjv?<3fdQE={aSdDMM;Wzji1hrzGKOqKk7I_=6_q%Jzcw-W_paZ4 z|Nm0>gQVoSf{%g|=1DDFzB-r5uKm#eqioIJ%dOeG8~RzRZhby$^G~bRxc-RE%7@Hi z`F$lf_J?IYec=ADtK9U-(rdfBstt?FUf*7P|J~fz*D{Q}ayC3%aEPP7(t6VIH^S5B zI;*_4le=|finWoS(;_1^fxOWC#*JlDo}DV)FZl6)+@A2=KlzV{9eLQf$u8&d@6YnR z&JRB-eU|4vU$4aX`~IK*qWYnlZ(XC(PK)U~9BA%~*b{O&z@NJ@Bp_(hfh~BV=RMRgFj1&;f`>|sJE{kENiIx&pK3kT;i5wON3K?SHaZ9JG_aCQEW%MJkJ<;xA`%td=!L{)%+LJ@pg~7u_jcY_w;wO z)+6FA0S@_dZr?c)UE{WDv503^MuI@&{Hv_X$4O;G7||wYRqeK1jJRlC6L7 zh19atu9#M5p0$ly%bKgYpQ>j)LLZ=vQ5Uhf!R5>`@7XCfJ_hldT$3NYInyL=@iO

PR)0H{G>fTJbQFbJ~Xr_l}qNWpJ!{PvzCv3=2h{EQeV?R*{`xU z{;Y4>d58Jc)|BFxGVh%3eOxh5VDsb)GBz_4%fy6solU*R^0d=pOV#s99DhF8zF=B- zJX5?P_H1(G#e|g)x)_o()sC>9>wH_Ym*I$1rIxpFkxL)4KZI$%*Uy8y@c6qLsH*#Gy``a%?<0ZQy*UKBZubTZi za?bhenzfFJRyQn}^P1;W>aE?)JU4rNo66&KCBcxmbxXuzKgHfv>IgiP!?~KtG(}tb z)2%1w*SI@$8C)yoC-sXgI8#4g|5s~&SoWJhm%=SES#ML8H}Z%?r7UdRzPIPH*VApe zrA(W6@6ECo&Of{Fn6z?}`I@qNk?gheJGX|#C-;gTj1tiK6L_SwPVJFZZSRg3RZ{P# zEN6b}E_nU-%#PPzO&`ro`}vaf)m&%Q4ky;K-nrV75B&>llKSV zI{Ll!YPXKn_L_OJweMf=gf@RUrcYM2ySWJ?e+iV8^^^~j9J{(iuPW?m*;y1 zU$$GO8Fl4JM&$9I$6bzYX*^Z*^EiWRY3k{3ck6k!PVSYpw|bRkUwq~4uc|Aqq7xIA zAMIDl`)4d@{yzJNYw1#Hm&coSg->Y;`&Zobzqsl5J-r5( zRE0$5YUtJ8aw~uRUnA%DS9=-3&-Z`**RNdJbnuz$ztRaz#g6RLRJ|U2s{j1=|H0LV z{~Uk#tLo=}P@!><^%Q8 z48PKt53G-p_+Mqeo-?E3UeZ?|ZvvKh)%x%h-Fnr+#7g z?T2qU*M8R%$qRdM_fDR`?mICTT4(&;c$am3XPe2 zP=i@-e(Leiz|cp3*LkHLE?WC|uMS_Zr^LCpKZSL>jcn^(HZ)xQ%pP@U`dr&X{Dq~C zf)h`d_&*mrc3IfOp}pbDV&+fPN^fq6h*!`1eqLVgsb3pIgFuhdZbyMNM^}Hgsh_vn z|KVKs2i3on1nt84Sl(0~aNo0rN2S_PqT%`f&$FBNGVJ?#zld9hwz06P{b1nK@ zmWPG@cH3p9M{d>~Iuvl!`b^Z1&TGoKWWeqT?6oelS_0 zsUjoW-ME?Sl7dm+kp;ppD}?$SR1-ZjbQ*ocujHCUChSPq_p<5S;RBn)c5m9DWmDYv zKRy4%bw`QMFRp7%{N2*fp*8i+E!OC~aGsy9Juay2Ou8?~c>KVF03H!J-{p@uO>}zO4qbR@!8OrCVbKN+ zDX$iez4NB#PBrUa?qX6t-#~Ou@6Y8IT0NFumPj$0+NhMgf<=neT`@sXr_-;^Kt*Sr zYA~bE^l6)PI;NFewUvvEJ~-21huCv@AKnfx73Y$K$%zVDjIK%-I3$ebF)m-Pn55X@ zCF=M>Uih*9GG^XG1}k`!X0LXBJ#4OookHK{#NOp>0(nYF&efAjmRimz9{{GuMv&!HwI z+P`@52Nxbe-{TK6c!b#4RZRQZ6q()$zjUd7^tV5NVcNckj<$n~JSs#aeN`tbDzTnE z;BX)+>A}fG#p}M#F?agrFQzQQCF_0gk>-IL2MhvKl&1Qr8a=qrslqc;VU5BuXU_<0 z9>w4PgR3qiB+qDbeSCpsLA8QOvzw~H2@R7jhA)P4s;eraxc2|$i`u$2>rVNPWWx$J z(RL+c2^S`p<3a@`Oe~HEd{|8sF9v1^hD5!(`c>-x{e`pY#10y0Xf?JhXXp|vEHRnZ zrN&g;>*HwnLPck0mvV%)sPBO=%jpHXh& zit#=(Gwb%GzpbBlXMDWuqL;wzz`@4V?I^6Mv>_@m#DSenj`d6phrjBUi;D{kO*?YA zD+?6U`x0KK$@{H(e^amCh*wi0q2R&_2ad$R44FPZw`5NZk=~wz!W#}0t87o!;F^BA zY{9Ogh4PQp=83Y;Ziub_bMlB&@`el^QGUjxz>gYST--foOtSrlCV0AZ+*8~2fG52# z$*RI}PwmORn>gCZ0aKKAIJU=OQ0A8WpS>&BKOUy0A} zT4P?{d;OO6`^P^?itJ_FJAIjo=CS-R4xU@4w^AT?<3CNyQ@eZXzUVkw=AZhrDrUu6 zk(Y~J>9aeQmNsxd*mgF)Ys>Nt4@KpmW67ePnOyNx9;fQNZ_y1s;CkU<>+@?ZlN&Ve z$hUp|n z;lpidOu6%egzXkT;8VP#d2UbAL7PMWX64M|30IqZKhC?ZXoqoZzz_M9uWu4AKlG>o zj}fmpQl_L;zd*xNohdrSH7IiCcHJY3XYYDH*YRMdQ|9C6-`V)Oe8gH0FR{42^V7CN zU$|iI=^QF*VzBVGZ0Os_gA@CD z+C^hq-bJ!q=~E3Ycrwjpwv*-6&HqY_qB1UC%#t>KEvv9bL!s_Q=i8gr1`>e=x##AT zP43$w+@{ufsE9d&bD8V@XacuSq<(idXOer#N2Xp_Gx_oPI@N_W*o_4{!wrIYT&Z1J1v@pkP!j$iM@)vFa>RGyyhU{gG+Inz0A$1Se^JaRtKmX$24re3Oj-SpV-04sa`|D6x&7jgF;PP(=0fvr~0 zP0zCeYZCU`=dAg1t^W9;4{!f|pI5rL`G23d(6*!X?;{tU?>p+V@yEA$<>wXtKCk?K z>+`$1Pj z!I32!dLio-i|Yx$1rJz6U0=B!6mk|)nBdALaNwf7)9Ym`c0`G64a*J``R>3f?&_-D zw3z8ys4L4tSC=FI_r6zsnCifh+F`$FKFf*f@AInf@BO~!y(N2Hr`GI_wY;4>*w%Ka zaH;t9FAabF=f|2)1rokXE(NZ5V8fWdw&!PZ%9#|=7r{qoJUq3cJ#$XV`m<55FHO)( z4-H=&RD5mMmc_@H_%6#dzGh{5#i!<~MO}n+zG;`T)Da!2gMy}ky;=7%R&dvD<2rof zSbuwM7T<1FgG393#_#ryp2!%UJ@F9&f)RsBn~J zhK(Qh)|;8KQ`vgT%^sW=nt12D{Q1d=4bms>@2p_do}xa1Tj5I#->slWwjoZ;a+iBW z%iiC7V9Fwr+MZK%Gj@}FB zx14rbl2(6@#|BZ9j?yqf}$ATw7Va_NqmB z`WMN@|MC7?w>eI@Uwmh7tlF+!yDe5nJ89{3y9!ClNbZSRP_j~SYvWV{nGz#aCBtx~ z;D&Px%^39DUt8VI%8d4UtSzF|DsYgwy`x3>V@sXc4Xe`~_T0L>Z<+r#2ysr=&F(sN za%-sXwfAMr!HiEzIJRxvDXT_Omd%_mHU7nX=IxWx6e8%bgh09dq)(Rx@`D;DfEOM#M zfz^540j53P3wzEn9oKVjojR4<^1+eGjfeSy^1I7hmvO7C*1lwVMrbWh!4c)jz1yAa zCYVjES+ilTz(f@R`9qU`F80to&}MQ>Ew@$m`g-%HpRSp*bVN?b|5e~{s=CfDlEa{8*a%ak=L_chJ*jszE4(Lmn?oG++or+ZBzX6 zwvy7CroDaJ_vGnrJ#?XkHzhA2f%)ev@xla)-O~-5)~Ef`pURQ5p}+s;wFRcj!n~Qo znl8#P*<&ABhWPq-$(BJ_b6voqfvV#3Db{wrRnk``WWp8RxNm5#W?_?By2R zFQ5?8@S#jzPuwH>!JY)|%4*};Y67#QkA7P)PweZSWHpa0=CtJ-3qD=A=J(em=k3=? zysxqkW%!6U@bUEdDPJO^ zPef#j`5s*}Yi-oYKkIMq|6*KqII_Ms;Y-FP2GM%+8(X^eZ$ERy{6)g+<3Faxnu|Jz zO^TZA>&$BJuKUl6!)np#YfLWg&RcdEX*R8NWV*9t#oEThUsF&1G&1E&G;?YFkTN63 zJgVbU)(`7TnWme~+PJfp6eMzfOjya_)=`w`F?EuYruf5Sw@l13*u-aeFz>15%GtPd z^}Q+?CXrpIl-GGB{d=jk^w<{XquZ3Hd)b+774z&_GBag$UCm}Uwj7@OCUeTJaqL^E zZ@9LrTk6dV<;#;yYn^|&U0bD{9I^Qx=c>*?ZWo!3Rg+e2NnJVT?fQ`UKWlV&e0k%( zrn4q1typb)MQJBbldPeGp>{-s@Y>m{o<~b`@J6aHia0EHVL{~q&%--}0v8|KbX|0E zn6gWdhEsaP%f{<7pIRv~{o5Sl(7vv!>hi8vUo%#)?2_XZt$pMp5*nfXe8J0kKT~v5 zH@sY!^A+fm5f)0ymF@je<4{P3P$fb^PQyv23avQ>bFTO-S;@ z7TXT(ce38#|vya=?5I0>YOSZG=i_0Gbl48r*3u?;!E>clOWdLKPOBg#i_V`mPAvILU2^? zyaxZ9D{eI1`nB%f{Tcs4U$Zw^w^n@RWSTci=ql6ldC%EZGE>8rvMI7|jy2p8vcB@I zfuWv!;^AIq{i`Sa*RbY0mN0C+?)}w6>fDmn6=xo--RT?U7F9157;&|6s#JP&P}i=Q zP8StJF&icoP2Ue3*IE-?j8)q5jL$qfo944&`K2vS@(N?!!khCqsr8o>tGcUQE(tQZ znp;to7W1~TxvOPM-mA_$(Lc%G;_P3=a>v#WXxtGfY1#XI^Yp ze63~u^6U3_rmon%d&+q)y~iIfhORB^mAuT?>2xK}U2j@vgIdV^lw^~V3`L#J4SBQX z_dWAVm|&77sa3C~yNU74YL+$T8|&Nx52sf5UeY`m96bH9!Ih%!6CS-hD?@E_LQdy; zhpc(9D&y0fE30NKkrG)QmQ!(g`5HF?*#~QP9?f}ddt41Ony|~8{+wSj z>+H^)X*`@ySYI*!$zbELbd`4I3)3w==M(Ewx|>35-XYx+7F%oV`ZQ5FIB5Tx zTo$%aYxz|>{GMD1SSlDCv1w*#ht%Q&y{BB4A1hmJ%5g;|wIU1zt*9h~d8 zLhMfLow=_SwwX`(vfkZmnYL;122lrNEf?4*#bTuC6Z&#_+oZqQd*aO( zH8tK1`_Ee(q+PMJQYNrulI_)YuZIFFN`&T~SQv0)ACFM$F}2_uDpmrYdxNAl)M+&H zX20Umz5Mu!51;zP6`6@bQv29*1ttHS;hprkDY8bdYwP--0dC>?-M&i-HBH2B@Z0UP z(~;_SO`G_VWm3Ow`-x>jwVpSAt_y4ZcqhOtT*rCs+Ax>w)PI^&T_rq4RYkj}IL?_B zU(|ZgrqhGNoWpL0>O)0swEbV(r1`Yys@jXln2wWEx=fD#`7o=W?dck+GR^FBT5~SD@^bHO zapU=LZ3cyOP38FuPIAyl!Pk)shb3xL|GKMpFt?>%M(zabIS3cuCR{2*@ za%u_tEg^<7`Nf*66en`Mx*feD(ChrFRhF>=RhrkX$JdGl09B!7OFm5_g-j6IHU0Dxvy3&X@3>BMB>@%Z|fI_$(Fw7xWlmWUh~G{m3MZ` zn6{?k!k%Rt-29v_Y}YHj+Uz`$^{j9-hqJNMpURwim0OO!Lf4G@?Zg-Nq|PYqei?B7 zu}g5tB3lJPu_(>HSqEa=7Bkp!-j`s z2ezMcZ_7P6d?fvqO8Oo4ANjv$#$S6_P%&rq=N&f}+Kbse=zTl0czyE6U8$bdAEVjV z=Inm_bkAY&`nj8V%#}`5wJQV`sBFCOddl(V#%}XoUidd(yy?J)L$~KW>})MQ=bL$b zWoU zc)ae&S-uHroPLQ-hjmR4r#HnX-Ll!nAiqTV$7G8;8=Azoe?L3J@bJyYUpH+!^!s>? z-mG^w+GBQpxu2|8Zp-1O=E)|-Z%&>Pf4{rUG@0RzRt$#XI$%CD(`Qv z{=aL>uKSIfL)EwEo}Qgmp7!_I+0(nf8}y!v{`9c+j)uO}|Gpg-|7-HrmAh2s<-MD0 zUH(t^#LF8SAGeoR%Ckj8v9YjBnKCt0RPMC3){c6U7Z;Z@Yl>FM6i{_#5s6b;h&N@$_t*P;S-8n$^PVmJbIo_;Eu4M(YIgKX zZ>@R%KOHvne0e$BwtcsLcVAz5$dNP~NkuJI=I_xvl=gqgy`NERZ2Z50Ve+@Plb_w} zk(xSV>eR1C!w;6fySw|}*{&swRTjWIC@z5$vefoHyScOTIBK0mH5Ep5-` zl}B7YtD41_yx>mY)m6Vjk#K=_Kc=@`GU1|O1r}d>Tf5oPJ zx6iwy!N$K?ry$(f`qrC zpUZZfI=BAUmfLshZf(i-dzdQto~yr9+TvG1kdX77{UzVuEx*|r$L0S1o@ZnLPXotIxCVhF>$84k@|4sXZ-6e%JZnloDd~x1z z<@fjde}8T%(T)`f7rBsjdD@?jg9ZB=OSeyu7ZZDCmUH*Ma>0(d_Yd7asKOHy_Fm4S=DGHhx2cJVyTu~TNtYh}AC@(1h4b%!`SW{shE7qJs@i0) zw>tg^`)1qU+j1;V#msqEexc-vNA)S&Q++(H{f_46due z=*qz92Q=*B=ZQ#LPb|y&dsMJ*l454KT65>mhkJIc(Xr50Pru-49uv0vxY*_0C!b~~ zC&#Ov?S6IFy70z^uBJJLd+n`f)Oz14{pzw@HMH+y_5Fyiw+vK0X6Z~+3%7~ezGab; z#Foml-wsY>+I&@5JoLjJpG#)TPrvw*`)*FSho5uBv8NP|ExA;^V7tZno?G z7VUT^@;&N%&Dp2E3&p02{`m3Z$Cf)2@BYpI>Hf{AR`y)Syp1`3G>SjpS(3hV>C(x5 zJ@ei?KR(C0-0p|G%$kT#ifKY$wWIzW0l_eBR~%{`mPK zIllL@k~h=O?7n}lAWXMD{_8r9oTa>iYMEiro{6pwpUuKv|M|%Z}(mK>+ScT z_SG}qq+=&YhNfp?ETi|wyIIMaFsd-j>%U-R$TSy$Hv zJI$YW^5yr#=fB%rC|sa#ZJB(O%iFm4r`zrckLsT;n|mbWP;bR{jToMH8(Ht&KK(k| z^W@@v+w<<5y;gZPY0jg=t(t{5#r0Y%D(Ct5zOMZKRQ~d|IzEeoUss2VPm}SKpQZWk z{?vCHQV%b?@cvx)^)+=4oITYiPU@YO7k~FUd+*oTy3)4G{@QGwQTpZ14fEM2*Z4lm zGfw(5P3RimkL$lnUL5OI?rWF-{O#5(p|X@GyPmTv`?<(1)xEWGefvu9dy{e>K0Ru0 zzh5=|_l0}YjO*^3-~6|-_3eq;Ka1|fu8#|~wRoy{%Db>SapKjVKTl7Wye?#UGWg^Y z&BVlovAZXk?{59_HP@Vbj@IS=X;YsXiEIDbY-_8_yt&_+b!}C~t)=&WaL%k;UgWjv z-qJZ-b+3O|<%H){{F#2*Np^M744;B^H+*Jo*|eu-;iAL0F8D59;XbKPX6OHEhcDZ5 zW6w<5fA{vfBWG59KGxHt9riA7`O<#1Z*jIC@0%-@^MB5hdo=A-%9PxN_PS9bl^+!H zeNuf6YCjZbK7Vhoq{#LCr&V7&&U~cqzfM)9q_6AMv%Ma6_FL{;I_bI5;&bZN-*3LY zzU?&0m+|EOqx>KExVdK;J$?ALHoqe+PF>}(Se||9x13{%^A7J~4e~!fTeJJujFLAW z4)e2?G(KPVHkN5kj`8mP_tLf{5$`^Q=9wJoHO=02%+8x!%k^Pa>r>;;o(Ty#A-6={qV|zX!ZU{7XUYxrIJ;ha__XAq za$JSWk$6k_omY=73)gu%JOAEunGX?H@0%MLY&a|bV1?GnQw#IEX79EuOMCHq!-|(- zE8m1ZKWcL77w77IG3z9DRDai%FMHy4TUpweNljI!*rz)FnW?%-$)0d~{`W!YeXW15 zF18atcrMW9=U(QAt30PYP41p?V%4gaHETZhO~19>*P<*Zo#pnKdxxcA@LQB>Av-iA| zCIw7f`Xo0v__9x$ny7BsrW8)sQ?mk`JUzB)+&no=W67o|E7mOi_xA{SW6OVs?e=ad)>Yck=PhUQ#r(;kMo%LnaSNZwo^ZviN>O5EP;e`u-tDT(n@9uf2 zAig(r`|`UX;zdG>7wO6Mzn)z3{^(ne)W5=~y3144T-U#wxyRL>_mYsP6<; zy4_v-OiYswE^YAMwd-i?7H2)d;#p?4R=Km%POfxqTl((puJe|XTh|%Xu51^T33DE&$iTj-`-r=3B|4Zs!ES>PJf$TT%&(yPkH|2{Y!G?#Q_`qO96)RlMp9Wv!nRiSpqS#kf}wOZGrcjrW&nQ5$D zqa6KjYlXWfr+~5PnN6FO8{haJVP1NDooC~LEyZWxK8S z@!2C~e_h_=f5(TnpHg+NKRU(-=%V{l0`d_9-YEc0U_zvi9JEM1jy_qq0)E4|Y0XJ?hB z9qVxoKd>P$Y=w|O!rj%UkG=l>uC`|K6Wy-!xAxcm$lUua*gXGQXP;hj?74F%Ee+Mx zI4qB5?wnnwSe1Wm?%%tP?Ju`~ezDMbQn;C>WpwSd^?|-8PVL-XQuv|KDV& z==R6y>)*`ZaKl;mRbZ2YfwgJL8xOV1k`LMsUW+mo{CiTck^Ng=Wt35;(TpQcI?c`2 z7e-daUH)HD$AW})vO#jaH>kr&A7H>am>n7&mtJ_V!+EQJXdg&oZgpaq`XI z6QVc8s%Pibo++=`mUHvP>2UvJRiffHJ-_Fuo(q@Flw4rGXzA+P)xwiE=>BrFoH=vV z-m15^iW0gaANfuGaplSy{*U=$l3UGp+*x{8*}eLAV9>t}3lBSAo3&$~Z^Xr~HfN-` zV&x5mn6;GbKR<0`{{C*InyQ((PK@Ojx96dZcQ^0adurdNpAQ@#IR4nVbpJ=a&ry$F zq~B`eb9~*r?Dwsi@A|u6Z&vxb<$sOs>75I@%db|=;`}Tl%g-e*b@y9q?w-B5vNAo# z)*3CnQWMwc!@qag1$PsJvd8NSd)G=D&s*T$)irNV#YPjukHJ+|0Ro+Cxz6M`de4|8 z7e7Pf#p~!_FW**FTwXmv!1Hvn`gT4}zHeCJ~Ur*&q8Ajdp7^J zPlfG#PQsHjlD8^aU5-kxj=fQMDVej*054#zg&CE`blZw zzqeZ=-fpY^Yx?l%Qo(AC?)onW{|I{L&(qTW%VKh8p>ulNi)E(E1cX>s8{|Ye!m27+ z{ZE~~$|!eA?Xu7G#m;KxuX@kVG+w(U#QSoBvhEYxocHF(jy?N2`Lob{kMG_>9uN&dS^M z2{->NIdH<`-iAsB=Dn2)nqPXS$MA@Fv#G0;JozHxw{!c=Tj$E|%L*I+cozKApn9%? zRY`_^_f(Fy?_GM;_P4)g?2KibZasCPdEVVwMV}7VH0k+^lDXfAII~>z%oG<>I#A zEqvlH{F9RIGyh?E@c8WP;6=jWs^X2ic;?Hc=skVR`P10C#IFAHuWg?@op^3NlD7Qy zs+FOdPrGm7a`TDT-i1a@3N46v*qXL_vR`F=o$&lyw-W?c)Ld?wI-z%3+5WjQKh9na zwN*3Rb^qK6g@Xt7ZTaYRs<+dz_u1Rq+eKW9UHHFOK0P|2_IF!*?`9kO9j%q^D_gaa z^~!641-2%IW`E^*S->DtvB&TU!*7?VKRh4W?q2z%;q~oBhfgcrj(PF9B>2khMc2)P z!}fUk1;uW<|4f2+*FOX0ZRVB{^*na+zR=k2a7C=i|ZM7g-mmi|9#?y;kM2loyXt(`}mQ8vy|`d)l9cL zIlKSKPGVZVbbrH*jaklZdn#?3vhM9RUiN-lfp`4!YUAazFJ?sTPH2807t35>b1gtO z(M#m!u^Uy_H^lAT!?cCjqp10ughif^((&hJbMySuye=Ub+=br?~{EmwR)@mQD2{5 z61~?R>l^Ue{xpm>`rC1Dhi2TVR)$^D($Qz?mhXS(b$qLGyn|!(b|!`o?=mxwhd$4^ zZuQpU>EeSujchIZ{(T9n{I?;!vU1g`^Xtw%`SN04f6UEt!6l2Vr!QT*&hFAJseo4n zTX)1(9J$<~`L*mQ#`?DszE&Tm)hW|~LJM26uSY*TPhPAhre>`3OzE5(M=$W)H@!OJeqTXcXIqp6gJo$f?>9-Z( z7oIvb|C6`>dhLo>>2C?Un%^zD(QS85*X}r>H6?NJ)cV@rH#U5ct_KUApwvo6J@9{dqfXzFYF!@K8qFcD`-j#Ve;) z?q%|0SmM;aZvLEBd5e-02VUI#JLA#u{@TX$tr;h+=6_lG_jb$Dr6QNETh&-xsAW0~`v+l|pd2==;R-D-3;P+^6jLT`?%&&^eE;lPW=VhwzTC!}P z{iB#W*M1*_6JD~HZB9;th_X_JRN}Ml_$S{3^GT(ZUMkAGbK zJ^7T$)|ORq-aGTwH#r}FmODdgN6m(9FJ7_s_UFHs+E?}B%InAbRL_RbY*$t5yrtoP zJG7|Yq(0vB%>%v_C$r-G|DN5q;ylB-uw2{i;jul_=3Zyncl#~-yyCPxZM%23s$HjR z*WSh(qI;~v-4Fg0x7=fTXQ z?|toQncMr%$+{*7Dq{0;uI&2y?Bd_+rQ$Lcp;^|IpXNQjer?U`^rTB%f27Uxu3lW+ zBb1c>|L0*7E6wyDQ#jN1ciUH$JiDlO(*O9+X|c==XLRSjmVaaV&-Kw3%~c=e=Pj|( z6`dK`lVANdYG3!#)P~=-#@?q}ukT7)rBiKxf5QgtFWKMQ&Ry6&d)~gHkO|9VkJmfw zpX)MdeyX>Kfc?JG?A6kdZ_k)m`OaEWe@OdX?6;}ns;cw*l5YP3i0Xapugn zCb#ynpR7LGlp${|{Oa$*>t%MT!o2$D?q|rAm2&?->}-DbuJ}Ez@>7D9cPc*|$a$u) z(bn&#nEUA8 zLx+ZKUt9Lhy|(R6reVj?MXz7J-@Z}y*Mo(Bzhpj>XY(#CDRJxl^xx)so6l^oZ1$cT z9n(}K<@eppdvKt6e)X4*;5^YSHLd}PiT&dGrSbMMm;bL>9_|aR<8yD>Fy%k!e0zH7@IpFMlFa^Bsq{=dZo7 z-FUn9@3CHS&%YPDFE8ucyX8*Cj~>a*y}MWGme~|#eOYvSJKyqUc~Qr+&Dl?ObMV_g z6S+`!RYPLezgJTYbXxDPI&Hfz*vse4=P7s3%gV?$a@Bvl)OmjYM3ub zC1%!!Q{QhKkz6Y8>O~l_ur)K@O3f!o`?uZ{(O~iAaJ(hOyBqSr%#$3 zb!XR}f1f`d^Xl^!uk5*H_psx@e&;3((w6E#(_4UrqXYAh2zjUtSWXh`5(fe}j*3W;- z`8|@;JL>oCA4180FKyP{y(C`L{)M!NNQtgX{jVn{UnTY)pOGzE&ogJ{WpxvamyUnf z`V%M5zsY}TPg+`9+d~V<^*0ZGuZxO$zDQdC%8M^kvah?mW?L_+a^K_go(i+vRrB-e z^Y^t)o_zUuwA$vQE3Z$Q^=ew?lb5OcZ`JSgoHB8t@Uw;gHu^saj;Y-EBlca0@Z=?V zCHHnNS+cFze9rMcS?govMP9q>?OU`n?|sh|%{5NNm%IBWwb*FNt>D)OZ)@oyW z+rM08ZLELa>6gF1zrVjLbj!i2W1q$KuN}P;Killrx!o!n-w)6BF<=NT>z^(6*y7}s z5X-&OU1xpdwx4U67|pY1*X`VXk2jlDl=3^WjikQ+yLsu`-^V&&A=C-o}o)5EjJdZj=6i_Pwr*l28aZI{BmBkR?DmLK0~V>Zb{ zrLXU|n7&y>?h)OTob%Lee&-wH-9}k+AV8+ zWmg&Rj)I3wGQVG5i}U`yI{Mrcu7;gkwppw3_4cwdM0-0wzB#j1*R4;+GVcG{sk?t) zVmlxe%dF%~(oGW$#07Z;yfqkNs|`u&~14%VmV zsibH9u`xgW@bL59i>sTDo?rKU>-O_EHzpsStnUBD*`{KF=VGx?h;8ym6x^WA^*i(L3(WGOez3Nox2w`Q~2LlLfcy8h1XE%Rg6coAz1j zW_?2SVufuQ(KR}UcUSzs=;panT8QV^y_zVSpcfkrEh#XC#ibNNX)*=zxCCsQhnXruN!Y4Zs&i0b@lbVYr~gCMCuyZn0`LPlw~Wz zx9iipudmCN&xwiQn`d!ww$8p)ORk)m*u`qW80EG2a?cOTb-^Vc`F>>?{yn>FWAyUe zFSbIxKVnYrTB)G*e|frY$;nHT`eV1|_?2Iku-UOV@qP05i(4-G-`jb1*3r4Y^$y*= z`Jp)Q_+;(;jo0MvzZB2)H1PlSULab+;@WxVuRIUSJ|@n&t>}DrB5S+StvS9m!pqO; z|A_fua`|7JTiv-sM!P2_=KAkk6TiFc(VLr_)6Z~l@}7;lS6Q&+uI7Fo-tLaKx6iAn z^l04VG&#QZDrY%w@#F7jy({h%ZJd}FbLsAf88;#(I$XG{UGwhFPI+5@yVAVNsVAmX zwpAZG+&sfCR!ll~{(^;Z&rA$?YwE&hfEkoyzXu>3XMYukGe5x+P$5 z`R#_`yH$Y?tH00t*xAv;b8-IfcQ?O0m@whq+glg=N@t|Xi%9HPWF3EUHLmQGE#n)PpR7?F|}oUU9a9PmMUFhV4(Td_k3XIMeDz( za;&x5dn?Od$}D|$`>XCL4Q<{XQ=a}c)K<8>_-fK(^VZg6U*Gv1{k;-~POFk%?|cTH{H@V;1^!%mRegkzcAtd zzlF_gOOJIKy?Zl1Z_=wB8BGx}A6~vaec{BOe#>a%MQ@K+S62GYu_(N;;d1%gnzpLX zu`w|+GH%Te?TVi*zWjOiiADTgY;z(wUybC7uLrM9Jhs@)*08hYaNTLni2C2nPuD$A z*;}$-hC|ad{`8G^&$2DPy-GLjZ;GtiVYz};qI5w&Q-q zHuc}$+!K7hz`6aNi%+lFk1sjT|NQJd^UnWViJL^v;XT@S@1Kd4vf;~^xFteR+EGAE z`|pe+_s;1(eqd-dxBO>9$d%=96fW|dH&=dHQuXQBS2MA`WSyoo#*|Mb({3m)`*3LL z*QUUx4#`#JC+c=}Pd55|>G9=r^N!ky+FrN&$;kXm?a{WE0rxJSF?7GgbUj|*^p>CN z9EN*AhmLK}y;-znr)Bp^oAq_Uw#M5pUkPnfe(ztqQ7^IVU+=cR?|$yTHTh-b_Xk@` z7X@oA=b8EEgyAj5bDz7d*Bi~BcwJ?E%Z{zjH!p2NXM;g}L8n9Qx`p<)4b;^2wJBm<{B%`cD;McpDHC6B7~eLC=1%&c^l?b92?B`uSd_ zYI)t3>2>R2*uRnW`?~u(4;L489iIFr>GJb672BLOr*eIL$&%w|@B3=&pP3UcEi;yP zuQh(Roa?j7lMU&+ciHi6$UpUR?=QWE+n3JGIz8ElQDMgulb64)_MQF2_hnCAsXRlD z*7X;B`hg36pTC=G{&M=CPqpWN%TI0><-2W2)To3Qkn^LsH?@CF+RHDG%kLFPY_FG{zdgr!v1_hc&y^b&mcKZ2?1q@W_1ldm zTd(Z7reEKEs2j~J5J5&zF=^+r84=;52nU>ue-lm=WhEyb;~aQ+uL#vzf1Xke?!U3poUj> zi{A5|-)#Om-KuQO|6Qe0Z@hbiFP%AZO`Ny#xc~WNokNtZd(^KyU>pk9^1u-qtDLOS_^~saH zQ^J1zOtr85wQz^U;~lGo9pBvA8y)Msc~-a4Yp(1n zeZ81@>a*CrRiZOasrzqupmXtL|5?pTa(C{`4Sat4@w<1yW%neEOjoT;%uap!&bC@? zZ?$?!L4g2Qx=g9#-MjWZ=70Wt;hff?;vc`EATj%`zr4L!5Yy6qewANei9Y!Gu;O)x z=Hbh{ReYMYUp5-3zx(mA+|{-JP=knKPCknF0 zHeLUn&)Ko|tJvFtZrRDHmt7Cn9TO$%bzr1*8+qyfh z$ccdNiiRf*`sK#w!lF;-etW~Wdgk5rbK)h>_q;u!;{G}9-^m1@Qm(qn zZ&}tqBBOua(2&>o7$zNR!lq+lI@3C)KIB*MG>ur*#c!vbI~}fRT6uo=;k`FJ#N{TN z=Fbb7^mCU_Gk@)rXR-aeZ8!S9+w1%{V@u_ujHx?QPabxH=e4M_$x7oPZJLm`V{6~AEvSjn$SYA=umgD#@ zt9H7uc&>5S8S9cc+diDRX!N$OwJq`QEuVQ-FWOE`oSN~yt}R{iyIKs_mIFm^gQK={ z)Em?$C>{RvMDgES%|#Wv(z#{NeTkhcJ43d%WPSXJ{DoUqZ0KCQ^=!!0oT*Eeo{{^U zc>418N$Ykl2)7rxziaQRiIYxWJ0pJK(w&yWc4@n3_lAYU=I)uiPG2WReB0%33EIc@ zdB{dETd&;`zO*wYFz*L3Ymcb4}>!Td+|&o(Q|S$$w$%POv?8NsXGcm*6-<{P}+=jVr% z)^9TW{R!vR9IH*^)6cH`sP}*0#S6@d((n5=WNPo&u4HU(DwXiUPj~jODSJG3$v@t* zOTC;?Dq~HX+^kR6dUP%ey7HAF|7B=Hn5oXO>)n} zMf2ll?+yE%XHoM0VshA?$RC`JSy!4^d*$ue|22M=+c^31gL3s-+bfDqtgKikXhf~E zayNbdr?;mk_|kJR)ewdadH*`qyo~vME9cMOSoQOh<$=kWOV`vmZtY){bvkTqP?PfV zqcJ5rc_gfZf2{gzS)&$pttx8AgM#Zzqqj3X{Q8ma?tXjyU$Y#AmvTq4Ha0f4^ULom zetvE#LvH<#CBJ8@OWLJw%UiaSz1=+iqi4zA)b)b7xm*7>T>tUxtj>pJD^_r1w5fUJ zR=w6Oo^2ag?0mdWw!K7hwdjN32|QokE_5z9`FX+9*VotE*UVVBwpQWT%XbrJ%t)~9 zpPePS-n*J1(ys20#qNj_|I#z}KCi#LPWH{ND;d`Ae@bp%TN};Hw1%~*L(^HvSA+M@ ztAiWedZk!1ZvR{xHTCJCn{y>ibN3&-Q{KcWe2wAz_Z_cKpLKNn+s1WPj!QH*ts8Df-IVt$uE>$|`SS>v544 zB_}Emo_d}sy#36DHxp$a{Px*7JJsiW*K?7H=cj-R_1p>WzVvlzn0hT*3y3#dnw}5&f9%Q`{frmzhD2_ zV)ak93(v)*zkc1eam$+=}09-^Qh<&nH(+(^9;)T0eizjv}K#lPCA~ z_BI5b>}mSf*1i0mXtmh>)5ei^t@Z8qXP;hnzmV z8_4$FZNH!4`KVtt=nC(1I{%G#BU-|d;ocAjJw=ivO<+S|gb8lbQajcAc(Qr(x zzS95wg{-|#mrj>2{bm-Fb$#t@_sEye-@JK~dpmUdufe7SVl!iU$`ul)V>zHZ|x-jWj=C*EURn*Qvgx}V6)+@g@C^HUi0 z@6S_M;l|4M;!A|$<^@0E?rl7Lw%xvLXKj!9ncBxUHYWGqbeXl%`_3J{H#dv#8oJf2 zS-$FO+tggY{(UhlzpCy#_pZOcW8>ey6BgVv`Ja+_>||)hf}{5orKI%Mt=n7mHEG%r z`|8=>|1JBF<#_Y9o0l!GO@CYaewJM-C)bBZ{kannZ*05&ircggOVU1b+^=k6jn<#F zCbZ7BfMNF8wgsl)6}2TxbdA&Qo{GI-vvA_7^|h}K9y9*A@ADb4oVm7JRg8>`N^%aI z)o!lN*>3mT=%(Tt28Vs=?%Ud)#$G>U!OVC5uEd?hbN8mQPG68Hf6_Jo>Eh=;7oUWz ze7rLEwx74Tw9!l-iM;c28xDrV`|~@9emm2teC3+&jZIGyUQc;ZoWF3vZzc8RYOgd^ zSBI@NGBCJsXTh9;g5!O%(rnSz$9$qM?mZl}sCq|(sB%)QrGe$1*Ap~_*Q}ks==-wn zN9H-Vo>&X&`Q)=(UFyntyTBo-^oH&IC4ssOSD1{LcmpQAu{Tgtdv-X{=&aq|<1=06 zGwK?IovHY$EqQ&t{i&0jH#RIR{{8KCbx&Zs>)Y;UIWkpc$Df`L<9;u`xjGl`#d*7KkJnnyy-*G0E`Y&u)hTmI!idfYtgq^8Q*v5ATA@9%qi zXKQv;-TrjxNzc}r+*)^Q@9&S6`SA>Yr~S^X;BwbKTl40IcQgN-i0x@-U%yef_;)+E z`kdL{MC_TenX|J@dFxg_kia-y5mF<}e-YfCMCZnp@+oI z-Y|)KKVzQ%^X-K*-o05MR{V|2Z>q~f-(R}nOWAe>eGSwXvX@<98~1zHUE7R^-)d*w z>mUALaFejRJIi{CQu^}~@_`Nf<;_*6TFir7ujcGrwQrwYM!x;Wq|$?b5AU14Nrxp& z>GHwn?_0jI)}55yET(gR>!M)qX(s;*Rvq6_&3>`<*Yt9k&=p>mckkG;a(dr>CYsn| zlOVR@KHn;FzFP^aa;s$?yf40?_~28?iyMWnCRktRIlYaAr6I6nmN;+Bn!dZcKE98M zy|nB2*(p=P)<(@eo_6zw&5YUd_nl52yg2a{?{fe1+}xX|do49Hv*o>}ntE&Ar++mM zLS7cd$D3GveSExMw&wTi7caiNz3q{C`$<8k%cIW^3%QqGmTvcBH?Zt<__kYRw!fy# zqtDN3uGjtj#VFqM`s>OUiF0l<-rjLn*u<`48q*b-%<@&`^X=>o_(tcL*nAAzur4|z zTHKOQ6`H0#Hgb2Xn_{QdcP{$FmL8-I6SZFS~tyPJA4 z(z<5Te;Xb+_xr+M#^UsIR^?IQKTcFGnj}=Pq(O$^9P6b$^X19O$<`CM zB@6Ffe*Cvub(;Bi|93YxFQ0dNwXRuI`ON2j^EoSK-aK#Kxp~+2e?|8Dtq(3Z?SDFY zd3^zwrcmduvbVcxo3t7{y%PQ;U0k_rq1eOi+;&yRd^T_0#-{gsp~AL|y9@7b)Vo%_ z_P}+vXn#)mS2+fAQ?jk!JxgFn4=cI)FC^xUOXl>W_b&dOC@y=+-PH6&(xOH0>Un%4 z7S*mg;We(P&7w< z;_|Zqv%GB&PqojPwBhG%ZXVxtZ~kUo>GNv;{`U6w6+b>QU+t9lwiDa;?~T%)IHy&4 z!7{o1r=-@FYZ__A2>tDw^(AnI^`EML@4vtQ@2>D<^-uejs|NqSTgTnM`M^Yqr)cyjuln$C4#ZEKB#E*4Dm@bUO^HQ}4U zGXaStzJv4QnQrQjv`Ty2e{@E;Y-2R7LT9ZHT^JjM)ibXB((x_5$Ls8W`lRM*zGSz*YA(l$7u6o0f5r1&O3s9f z$1B&Rew?wV@pzT}+{G97y>Clcz0K|AKDobTtkKVBN$s9<=8I3no+TSfW0uEsJKR3r zKXtQtZ2H-*ue_VyPTQP#?bB3E@qFp*mCon=@-N5VICiDt@1{v^zYd$s&;E91r}xz_ z>be!Cdsgk;ckVx9rls(i`B84YKkFqfO#f*g!Lc~;&;LI0V-12GPad!wI}$L(eUZU2 zRY{Gxe3K34dj7l9cj3dY$8qt!^)0H-CH9+p_RId~IMeh{|D(NdoAjsuf2K{3i+}u4 zdCf9E3D3n*bIlSbO}sfn&}8evTeq%#5xjNlSlF>Gnv2&Sn|U!owqgYUz69k z@jg9qhi~TUq=1Q&1KUr{UG>yK+BH>k?HQ9*%XRmANBSQSx0+gQ!yxCqrJ%FrRD|w@ z@W~#wEK80wsx+3nq#EeyPuu0V`&YAQrBwZo$hSpxrze{Pt=zhLlW&roNwVd^Pk;KR zYOdFm_th#24F2P>(Xq1l%Jip^d7h09kD4CUEZn7rA~ zwumQet3#h$SaNHl((d)E9Uew&%R;5=ae2b)HlS8^ry^IK(ckoYbmgv-@u}2ro_qw`jMQ~)9>Q#+k+h4br zeAyDq`ZTkCzoyobSt}+)oqBcKbmHd>wt2qZ9Zhyg--jZ8aIu`v3 zVcjmuuCv3+dT|o}%{lIsH~+3+^qjC~;U|@E3sy&*+&^LNaVO>;1)f%(b$?g%+z$QT zr*(e6?*5qQ1(sU9n;va*B&Q+E~K zyl&!E^~vXH$i31FWl^8}UIs1A(hlC)e9m#g4u@-DqLKStr$~vtTHVOF?0G{#>*>{h zLjNy5p%q^0^y=O!mwWLlyzKnF6DOTZa}W+rdU(5;>By8;Wx1Hf zJd@9+y4|n(la*G6Jo)pt=I>LEP4Zk1HTqjO8O}KQcvEFgg0g_#Y}X`?$=-(oTu-In z)buMlSbO&JcbAabGbf)cHuzB2)u3_kkI+Vim`TjZ65R(pS`I#al*1+<#Ccdo?Buh8 zmvgi>3amS)SH`72kGVCda+21M+6(sSLIFQjZ8ptRIkGG{N33gshIo4fN1vj`Nmql8 zqlv{Qwd7VBce>hG=G(U~kH4|FkgrRr<)5f{s zpG=q3Ecm;o?RVFNF?VAkv~Bd6(fvQkN$X!jLP#{E|E_sGXK;+3Y}$sMIecBp9J1{< z4aC(V4ETF2&A1aEaoGkdF)rDEx8Uot>60Y*X0%$`OyXr^J)H31zyXHj!>S2v&F4a{ z=&LME-go@n{I#x$Y8R&GG&N4(;Mx2_$82(QqJengWQ*p5kAy;FZvE$-USDLrNW<^L z4gtP}3*Hupd9vFiTd+Sevb31nSGX#B_WesU_Mdx~?4vjRK~hPNCqt^&aYZY)qRJSN z#mW-mK@UWi$9(&BeFn!|Rvp%WH8Dc!fod<7m8i{aE}kK9jB!GH~ zfBep;3YiW*MTe&b0eYMZbJ*sxCmNhm44lz?N%T$Ul1BX; zaI?Kro9%wQfJZ}d(rK3&KCZi)y0!UFtUcb*!TvBuVu4c2*~H6{J~PfS|5KUka3EUZ z&$0{KSbpArFvB77LbId<%b!fK{<94pOwExNvI{TYl<7IS`dQCkhV@_D3iX^6N?J}o z+GNP|_)|fX=L3iEi7GxX4O-S5`*Hul(qAm|IMj|MF5)rsS}rWmCa9w}yI1&t#O6Z1 z_6Cuh^_y2e*nj1Q4j}$As|%JKqNO4KW4=m$=GKiT>6%HEVZKXjm}Q#_W)SpxJbVoh2O&6)}44DFueC zn^lVn1wHpQFRVA)z5mqSRtXh9cTc{ig(VkO`82iclsLk`CnU~V5S*ygHYaqyrK)F7 z%H|m*ENYFLk~VPgw9k;>XWTKlPq^!Vcf|SIB59i{4d$Lyus9I^K*^@%bXpRNL9jqZ z)i_;mNaFCqy-$4Pb(WV9dEw5V82m>iuiKjtG6!hyH|KTNsxuP zwP40cXGsaq4GlLFof(1~`c9>OzM%E)*@UFPy~+HJFMRlf8zX$=<~Ck#obGN=$j5(F zLE_QI0@iOX_oZ9w4azmz3OF0SG(PuA59;=mU^*z%kut$%lEaJ*Onxi+-yCH4ZBWRP zm>_YgjYH1ytnj84%ojWtr?rNk5hC@f=JqO zm%~>|YuogI-#S{48&;35U--S%J7%o;`S)E5+w4ZrWdnYpP-jyBfnXp>^AN6;{{OirWXxKiaR+^*{Rj^&^MOvu$4N&Z+t9vX<9u z!*#Bz^s23nIo_9-hxT>6=R;f0fRmloOh#Is?8uY1zlix4-vy*1W&#dEafG{6Tv` zd~Zv=z^}iV6ZkjWX!s=+5dSxeDdAAe$*S8-pKkqEzeFzTr7y(YF$$ z{x5G-HZ#b1aEYPs-|Po3qyv^I-C4_Z>V{`QNJCe4e@0f{s`b2!7D}ySx^%_kXZ3_< z@$3e(w&+Lv>J?a47kRoWCF)hXo&}B zJ9_u}JeETt6FO^_d%o>7xbY^RsMRV z4+h=&@$ik-3TD=$iaPvEYnasqf^;jE@`=m{*vipm^`*4qV`@XRY{v%6t4TetF4zjR zDu!R5=NQi8IpMwRio-JkbEd4~Bc{+660-3yy0v3Y+VYwc|@H;7T15h zI!EV-+rAl-ODE=E`ZJO9=K2$kJzcVLQ=c#-FWJq_y5rz-E1z@McJO{a9xFLhbj_SO zYdb&i`=0yvI*)g)RXOkHO}yR*zk2=Q^**@2w&?Ti)q6j6o{isePy4gSfu;8>Hu46~ z+Ml@hd;3a71E>E@QZMyXTU+Ly2z~V^O1bU#uBtCw@rx%Z#A_%X4YKxW;F|lUVB&$R zJKdK5%--bl!+YK7lczYZ-AUZH=tM$o=S3||F4Z7IuBv3&6^HKVFPtSH{-vChIYYsQ-^-)!zGL{fTQExereLEZOzq%Y0UaKSv^e&$=x6$KcA;vsXhD?n=G< zx3T!!maIP}3Ag`0XMO*RW&OUrHf#KwOEPcWGO6sd-*;i2TWPl9*S1sd(v9*C`8!1! znX>Egdc5A>xux#VoG<1N7(Ok{UGgHpquGB#sd1md^w_f&VWDfx(l$P`;jzyV)1EG` z<&)gI<@HUK0M%yRZJQMB*4LRjGRLg+Uzq2d`N5yNbg@{+!KI9Aujp_2q`YnSGv8zO zdAqfz{n5@T@7?mh<~HxC<+VrSn_uQd99kLvC_m!R&$n*T&X29TEtvOh?lA6Hw%)&) z?XSvY-R`4I)7d7+?)NFXJH2R!!Sn8$j9NLoqTPY~)^)Pq?p&R->HqOY$E|bzO`Uwt zR5YNGPvr9d|CV(%rt|)BDoxlN9(~k<_r#)j9ZPT-q zKKmS{laW(*uFq16+CL|)D6Dz=od>$twLh9yoZf#w`d{3U$KRdg>Zi@uxt-0T$6NQQ zUf82%@zF>wYonIZh_~y0o|rDb?bnr}>ZR5(!Z+>h*?N+eC!YT%A91_Q_V#_=lZ?~v zulSw4eD8n1^nX9X9z?BWyH@e*7XNFrpUZBZT6$m>$N!19d@oL%`1$gKGbSxPe_nP4 ziWw=DigNFlmie@q$vNfY{|A>E=KY`j;-`4N#IJ>>tE1lK|7(<0**fdd>W=|i<;^;# zaw=%0|H@kQ_xbrRq0RrN@|a1SY`bvn*Hso?i=}q0+xY%fE?m1w#P-3ZhJ;t*O+N*1 z`!0|;=;+yUTH%Eb-!a!pj@gb3JG=@ieOlsXUv^r-7gieM!JG2mBm5h;_u2n*-FDU8 zY_3}J=XLwM|IaHmSNutTaB0Dk*V8Ah`>n)#Cg_a7@(FKOnf;P?Eo?g8TELOIFlLVH zrNFHJjL;V8Rkfx-#pJkF$rTfSec!v?{+!s9&DS1m|7&l}`*qE~uR8I6?>~`waJq=^ zgLX0B2_99g2j?gH#{YeChItdGO+n^{rT=}Se@*`EUZej#+qj-}>MG zd@uMrIuxut-?eI6O z{`o{^JL#Ml=L(0vSxs%Wk^i^-kp7nPw{WB6{Tu6-{>=V-`Sdwnrs-@J5&IuJ=y%W* zV{flu;aA&{Bj$C9^OZ;5q!vLr;l;)?Il`h+nN7)pvGAwx&F8t^C zv+P%qe_!96lzF$w*|h$i;QdX(YzLPz=3mj@6Zl#0EHi}v;BJ04APKiuSg*vG|Ixc;!uk^P%) zeOdd)ptioUOd`vaDdyi*9>)7Ne81YhrednU4U97C3^YVi7%tbw}9!t3- z$#KT5z^X~fN3Z_?ha7)ea!JoYrJWXYSIj-RW&MVkra^xnD>E|~^Ok-3fAiv+@KwKV z*UjAJucI~}-Zu#m0#azg&TK9}Ex>$`hv zYQJomvPJy!Qn|7n%$?SMEf40(2sLuFBz(HT(d=>~rs>HgMW#oEJ7p#vJeoE6m)ny^ zN|QpOj!SX=|5-fas#x;VJEk*Ew;jC!%6lD8`D3oj{90Z7ZKGn_EXExs3N!zUs~mP% zu-^DlXyeRXDV?dG6RajX7R*pNc7hD?i(`uA36N&}-6Nj$1K0MgKMieXYA_Ii-Xx{47JvzpEOmR^73z zlT|jo`{W#aGd@{ZPwBYY<2L_|o40I|NY49IJmKX0iYArLhdFxE&pvpVwJc)jc#tDE z`?%9imNN+#W~S&C_?s%@vAy%!e#w`55($AxJRE*bEC zs5jzes7e17ewiUC$Ri}W_n+P6`yB>ttKXktToxdgdS-gn6~i>iMfI+NC9ktgvXf8W z^btzBY-q;q+Hmx!qF7ThhgXpxPg3EHJ5e`_{>cO#S-s(@snEaRPm)^aT2Du2oJfmU zXtyH8;XzQo$%Fsv-~CD!Ube`_Y|oaVw>jNW^?!v_$hqWP$N4T?r?#%|FW7qU=Fi1*=2ks6uQ7bI&s?B!@13}G3ny})?dk6f+{iwa@vbDRi$Unn_UYu!b*io z9fNvasYqQ2*~=659Z%p~x+_*SSTKZL2Xw-#SE3Q4C9Lg}Cx3Gw}`oimQ zVUs7uf43jKKjHkB?dRpLK1`XqaQ}}KQM0Kp=fu{3NMa89-R|gD@?!N;sqi&6E-Uj2 z{Wy02n#SR+9Jn|NQxP;kOHT)gG@t;_&IKPt22;%a`1L%Ci@`CfZE&@anp{h4;&;>QCbK5-&Vg z97tyt4)W*<)XbYg9f}!B?4`HN0wf*TK$N@kbmd9#SYDL~TRMwepV9GQ!M~tX2@P%2J+B^iXIUq#Ny%N|+sk7Xd|I;f z=gL%uRRY}y7yLVvqqgKn_`gNQQxhaAVmRiWTy)s$z@!a=Z9=@iR&M=q?sTY<>rs`UnjyqWbTikI8SRf$&IW0f9bLM`D~34!wjoVXXwN>fQ0Dt5`P1_9S_+j9#5}q^txmsR7#eoORi{X$aOIud z>oeMl+T|cq6l$EN%pTo~S(yd6>dZ9SZ*S?+>?ztV^JgW)lB==Bt&3V;6Ndo8m%IjT-F--b+F^hcoSSRJ|3}a&^-ysUGK_PL*HP7ko=eRSo z%nek$>e6~8D9nDkeq?8S!8hKhPyNX&(tassPCdS?uK%5eou)#aN5%aaoQv4>uhwd_ zL<=r{_3BMem+cjvRdaUK>8-mF5TYged8M4EsQ+pWNsGkzE&isjHWlh#p18r$cNNc_ zPvuv2ug||SVTIl5n19u#pPo)WsK-{dqeFrB*T>c!2c{~drc2kB-)jGS^~&TqGo~>g zRiBz4>>us6&SuT_Re3G#8-ivjyD%|!bsov6tTVh4*JE}1&XX+DD?iz~8+b=%;0&O&X_LKI+J?JHaS4T(RVeo>Psy}MhiAwx2d6_Gi3R+Qq$S%w7xH19WHd` z!coU(!KYWd9L%%4_s>o;OQP=kb*~BQ)YtFa^Ej+PS)nnIA*`$_m3?yP0l$B>JHI@Y z*Eo1P?Av>;q^DQ^6y1~4NNzg9x=Ai*<40eYn*s~>NnPNp;^Q#g^rR>B^~Dg)Q&)GH zmS$gFwoQNA#l}U)JUr8l6I?Y4KfPtFHB2qLvclByru)pw-&y^~uAAtrvTy5L5;SqM z&(FHe-P0c5uhVFp#L?`qQ-fVyBBrOYI6|fIF^@?4fgCo*9dlC*-PQ^G(-gliulKa{ z;7fzar`2ZUOlh(7k?U@K$RV4&SmRiNp`}Nqo_^##UF&%{Du1~;Hweg0Ze{#8lc&c! z{lZHgIrfKzk}@3!l_e}*AT^7=#hleoAR^2oUEG-&SraDzwU z=_bP_-=Dz}!Ve27p9U>tx>&a`Afdzelfso3kwv~#NBrAG#%Kf;MW`T5J#-)GYP z05uk-&m3lRTOthRx+}17FJ+eYSGTn2Zhau&ezsxNf&57v+!=yqrxGs;wme9%n9cX< z;9_HgISYy%-)qK~A7E8_xL$5o{W zhfRxaI-H;EW5&2kOE$tqXxZVI4&K5YA#XHQg(DZOh+mmv*y7$UX(8QK&~fsypF z8#uDhWqrY``10S>+La|uvPW)(&N$Pjuv8;HfbWFHjx?R$O)443mavF_j$N`zg8hTD zX^GES&jbf^%SQItl%L|S6y!WxyV>q_9(l^C$Ivlp?Uj?0s>Hmt4_vKA`_WX@v>5#@U)lGj9esoSvya z}*m_BPGNBP<( z`}VBdC+iThS?gyVLtv@Dm;16}Ev1gECDC$@U-FM}|EP0e) z9@f8!<+Pb{`?vdcp%f$G;<@3ttXya7gcedgi^As~q2E$q54t~B0y|bsp*)fXv2D>=rnY?Ea z;g@7@a?CU`y0CcaB{yNV83z{W9{2E+-@?8%PA2UL@5@IQZgBEB`hBu|)%;e{y~$Bv z^28Od4;V74a?j*(O;}TJV(y=}hN)w<_O*L=Z{C_(xcYGBI|Uh|SD_CsBpg~Puw|cu z^({T2W3zNhjGMoGHD2wOb!~_^%i7byn~EI5*wynUf0$uqJnP+=p2RN2>Ss4r zUi?x}&()P!_Q_{{(u>>GTB|qBNjkA&&2kCLh9rqKc1M@ZsCP5uu;`hUw9JzyrzIkTy4|B{I{Apr;6$r9V7kq9hNvL-~93^Hq3w{ zGOLR5y~ga=j9=`_6UEzjjt0$IU!E*H!G}BS z19vp)eK>!B_e^@#1$FjcV)HMp(@Ad^jJS50IYGpv$(KK;>c{gh4NK-InfdWw+qP|5 z!lAX=6YKOdKWc1Se(Z47!xwrk83$92^QA6jDlR;F>k-4X1D9%V)pT8z=CYEU&xT$&nM7+vH~*WahoW&GL<@(e~`$iOY9>nSUm6j-1-O;|}8A(-YX2$SRYB9<7+QnD)aBO zRvzOXA>PE|)8!AvOyNs* zw#u*WHY=O7OIGlMo&SWX4onm8GhEA-TKmsLR!vg#uSw9i&e$*0W50a=e~|T_+p1sl z12k^dM*Nh1(DL>5SNnwl7CzIK{Zn`8i~aw(I_Ax<`HMnC&aC@?5{7<$zV`o5m`1YW z-}8n)US9d{a$v>t>&Xdg*8I0*JJt1TeumXo`{UR1{;&A=e2PKxSNr8v;$LJHW^_-I zS>t%AfVJuA3G)Mo+zqq@xeSwX12--2xp#D;>fMZB$7d{791)CK+u3%qaW$@QR6g08 z8ZPm7)t2@d6GYu36(`TL?%f;A!Lvc-`r|~Ji z+-67SC4OZS40FF*hcYgnrhg~HyM~d^O054x6icPa4#AVBi+Mgw{OGz)Tg>J_$EG98 zLq2UfS|xCBC*O`vPNzxxIg*(CSoGfH7XA=ybS`<~enNG>n<$%s%7g2jO}w&|muFov zh)$4bzR$M0+jmF3ur))M^nv_`4GWn1YQ6p`L^82O^KH4>>ajt!w~Xz_or>TS_h-a~ z8om;+3<~w}i(xz(5y@l4I88P5=!@NtwwtFOd%XFN#>5_z`Fij8H|QR&G5PW99>Zhj zYOU29)5Oz1XXx6TYWVryA|>N#>j z?4XE;z$`PvO|A~yF6-PZJmb?+x*NneyW0HRl6`!(5sn{~S>mkI zD=wF)vP@n0&}Y{rm&1DM{f^$*UaQy4d?{?u+34%Cap8g+2AxdvJDL_QNSNW`=;v}U zC}7#vSQleoY1gfb7u+(uX|}Ud;lKhB5t+#vGdeYr|DCvUfGHqHebEC= zjS98E4Z?vOA|gzaHOhnoJ48g3iZzNt_Pz0PEKC(@JvH4^L}XbKYeUnFjz?~eKi#Ix z7i!IN*%2IYXQs{aa55XxKpF!GA<^JffQ>3$-tGj-S|@E^UQo7G&ZCiJG!T%$VT zfQW>hqx=kw6Mg)33pQuFzID0IG}-gPVUbWq5mPsyLhd10!3)%lr!`|2LgWhMe>r|+PwPFWX4iMWq7$ zhJmvBN0-(v`63hkf>Zllvv?Jop(%&z(gMyObIyhRyPULS+V6Q^FV1aUJNs?aHm4sU zmKIKF9@80lUq^FIe8BNgu70Ba<0`3uC!bgDJE4Baaf8V3m$9<%51B4{rdqf8$12{f zTete>-^hLZWXWXR2HxIY(Z~%By4D&0*LQDfS(TM#a^>ptr7Lr?^K$3zpLUs_>%iHW zEq0$KE!ewz`O}Dqh#9?o?e!56l~ZI24-_1eeE&$G^T(Gj?WLusb+k{NuCA&MpYdVx z|8Q5EE399C&&!=QtxMxde46xMD~r&j_1Zmm)6%Y8yONTTpztp`Avt(*=C8h*>)}gl zYvUHq61x3+o$QRYYu5NE2>8vn)7_HSE@ZxMU%|$RV&}vEq|WF5w7$n%FSlm(YGYsH z^7nbyZmoZ!{@~TCs0aUcIT@AtUz_(YZ*E6v`TVb6Y=UIoypP{)o6akgImhPr^-!A$ zEywr*l^GhgoB74vvSbF*{d zk&Vg6cLi}}X}!DiP%OCnw$%gGhv8gz3?HUk<=?yaj}n)3PF|6`NXL%$vnJI{w-+za z;E%f}e?MgPk-hRSYI8rHId{rS^WuY2_jb1p9}F9(Y}q1o|L{G1!TRIZ3!-MMX?QCw zx2rNZH}!^D?O&h!2mAe|zKmK{{3q1O^y;Kj=|zQFPb?mPR9zMuC%tOx?K@ly{My#L zITXx%`4k7WT|s^_ta^+-Im4A&iwwaw>o?|llkV@s>jEa z?rKEd{}(QJ`0!zKzK_*a6<6Xv%Cfxkxb)29K-GFbht`H#}$qSl?iWX_%a8WL)2;5~8w-kmqs?w9sf5qkXhr;JPJP75YW ziJFhyyPg;8`ULsM#N4s2pSSCX(AFg}nqSxMoF&AuZ*wYN%z3NnTMn*$Hz%*==cmH8 z?;J&s-~D;YZ>6Zac>XibFK1$>riLkNSTJmF{t;s~#mG$V#oMXohA;2zxq0XKf`2E4 zuP=Z8wf6P&xq=ltFSG1^eR=n}x0V-`47MIze)3)7q=UKn(Mrl!r=ObZ=X?9doq59j z`{zyH9ul;^Zu;%_O5X9w99%d1dn}ix-{IoCrBb(cR z%F?skT3_Yp<9%%B&QrU2_|H0goiEU+@~5%5WXp-z>-WO8#m4`S4Zpr2tKsmUkl)jO z&)muKweg^P=}ce8jrxJzJe}H#lwD&QpgCHVbW;C{uG%X2pv+j~;!}XI>_? zjq|pw?Ek**YV#S|$Cmy~|D3Zg>-42deIHC;@Z0wHC|`S+y~#^S_0>Efr*l(}tgqXjV~;Pts^6z~Y=XyW?Mr`qw;btqu6Z0})f9i1J1;XZ!hh56Ie7~& zzk6m^UfEO@7W3h0gZ-adDq8yL9K zjJ>_BcH{BKTQ?u=UE9$mwS0-T{u^_zY5IICU;pZO|FS}DrFihF7fD~=jL8rFwL8E>rU;?9iQ%mTz0=z_2=Kzhw|dT zd8V~`a8D~x$Sp0My=lYjgb%g5qRZmGzPU1Qsnz1*#+O_lVpUx}-;R1Cs5r6J=GE1! zyzVVuj-2V=-r>gh&HcR3xkt~V7vDP3FCj5S=fw5Bzdu~RvqqI^p5w~>4}<*TR$9GV z@UEhpSxvBP`)cmJyB(iKEq(f6?W8((_2reBvu6BtyZUW&(-EuJVbRYV&&5izwflD& z+8F%F*&lRj_R{4Yv#PBYHHmKDvEz^KyGw#w>;0TEYipbjoSe}(HHr80diB`IH{mv$ zv(oR}ZJ6yDzU11kNpVweJ(YBuy|;3=r+bQGgI#&&Aw@U z=24cP*!rgbU*$d7?e}2`!J5ATF^xyo&YD&HZoU7CZs+#YCe>Wyv!;FDc=?WJw%+BB z+ZJo;68E?2wV*W5%8e`2AI@@B`aJtm-{~K-xXLZE)^-2*^y!vhecYd4w${ErEn++7 zo<3h+U3|{&iRN?3?WcDIwWhrC*1huhoQz$}r3(}EWan*YY&ZXUj8`%urR45Yj_>yx zSPP@|RaQx-IpuuOzP`6_!xnA}30sakFSF`q%C7!(>)gG9DX(qIK1HtD`}^3{Ij_vW zEpye<5jL#5@h(GUtHO#EA1aQVJTx`y(68shN5AoIS)D!oT)>7iY7r7IK6Kr=`^LIH z@b=H*HhmZVSusDd?;fgtTc7V6x8YyWi&SaQE7?igG_6UN04#yZ#QhzU1%7*)L@*C;xruXqNZz-d<0eJ$}8u^V18q zzECfBkiB<@UvTxy_s8?%W|lC2YCjg~RQi~$ruVRXUXas=?n0&C_iXBlWM}xseEnYU zmStFdx3BxhXUTnbzxZFf9-Oo~_bDUAE`a`umQ_O#OsVnzHn=VT-#tl+w1xpzY7tLwRXyr!K$?rh=wV^Du` zW8d_!cMbOoB-KB2zTVsaH%VJ1Lq{dziN>eyZQILd2gUC%<2e)79xnKC;fG2cllBGO z<#~QLD<4^jd^B-;H}RPJk{^p0?zpFa)UkW`J8im*>6fqlu@P4Oseuh^j9<+=tJ)|! zd*k!NM}D-nTV)r^SKO4==lR3h(Rd;>_gs6&uU)b7i;iY}EKGe~dT8~tx%a=QZ?8|j zRd)F6#wF``*3X+ZnLj>;vtu%Eg!0@)Tc374Ii$S)5^JSb+PNv5ab=cgkL}pt-^1bvqnB1m4x+nX2y@}AaPpd!uFt@wcHSJDO zz=MXONsUu>S~_{G5bLtcnzQisg===#ul^0{^qt|~hwe@Vad zL%O3bepl(gCxQNPmu8p$Q~JnSA3lBg+kKlEq(A)Xj*eh)alKl)-za9=n{Ahc_lcNP z9sT#$Ghp90vlE%EyHwUXixwN}H0rQ*FRr&{Pf!^cVfy6_P=kktcsAZaQ8LKPPKDCBL89f+GyWv zVc}a#O0;BDt|b}87d~za{!yELdf&U9J4CDs7Ya|`y5)%#pZAf8_j6p{7gS|tZQH(; z)5fmqXqU0Ep=_B@bX3%%M-M8tEMouhwzuBzdE5l`wI6GI>whNerR3j_Ui9VIA(`LJ z7s|r?lnT_+-(G*X^Si70mGe6!t)}$1F1^z)K0El9G@rf*KRGq#Og_n#L?%N?* zIp3vt!;T$0C%!z;$!z>{PrcaxDbuEH+w|<&>Dh%>E>&GM+Uz!eZt7IuYuZPCaoJtn zBlen6DQZE6QJ;D!d-8;}9eQE(PF_sPzVeYFomQ~qB0c9%OcG=~3ffrbvx zv4Y=cp0zZbewko@db`rC-7Q%QouW72Vo2(mC2H;QW8d6&uZ5mEn0RH>m6n!D-8gXI zz~#F;Zv`CBu~~36DoW?r(hn;8xF^}HSDzMXE5$Q)>cyhs;^^pTZ_nN%#}~7@v9r_& znC#wvqeX39*l}mq)Qyq3N@84cXCLgl{f1Zbo85U`O~d%?Lbh+eJ#{`E|NcI0TH*Cg zR}btnH8CyRxM5G;vnzXk-Z;^5wdVWe_H}HWwfud3+hUH2YCKL)Pj?Q~EGQ`8sJJsh zLa$2j=hDkJQjQ#9b9Y~A`>p7yX7`g#MwV}iot@hmYuP;xH+uZJbn4XhI-k4u1sa=v zxw%<~{@Q!V$cSMpJ7->%+Mm8>IojV`udOtDp?~TV=V#el``g-^SFc>#n;Fb6dQMkw z8HX zF>!K=br4;)+*|xCgVX1#`b7?`^G|1HlzlsYF($LN_V1-jLJBh$bWT4|Q&V&7_;JY+ z>x`E#88hELc=AMKk*~-MkM)1EFXvUIJqx-!^;XtXqc<(55smWI4ihxxMlA$}gw7&d-m+7n!n3_tvq>>{n>NrS+iz+`rP~M^gbnJkEo5B9z_H!wGUFE6noaub*6ytvq)*hOk#33na@4p~hhEhV}oV-A0B)Kb4%=fjbrIScmm^T%)a_g6SWZU6hK6Ya@&J{N7|N_bOiY+U%4 zZMO1-BR0+nbqarCY9e>7TE)DZ?=Rc*z(4D!>~U-S^y`;p=}+}DR#mo*@^k0Tz5A+h zbC}j7UyZZxRsT8P`8N4#$N$T(zLex;zPx$-L8^b8FJISx8MZ~gdczNjeg)vI^8H@%ekwtK%& zh3Fs2CzB*uwcf=qloB&pf2YE!Rko~tVRFmj{g|FwX%q9d&b`cFqPlhK;~M*qJHC|Il$Cu`_0-d^m22vpDw>z}Y}Tq( z-TMMU;(VO7wWH#G+*&GJU;p1)KCiE)g3a}zLw^4InJ+Wb#HL-oe7WgJvW=Ac@$7_v zxNBTo!431ionXE0`(){F)4$hBcgyfHe7SQcJ?>u5J>QH1g9Gf1f>jIEdpjJW*P9s{ z8XMRDnsWW(L3c++3%-2cSxa~RJp8vdAz(t+Dy@X3&0oJw?c{WM^y9}5`}FL!b}aS@ zi@dEbPwHf9%wM-|?bc~WeBT^yYIbBR$&Y{b?3og0UvKY6rTqN7Fza{y@{E#cryJ(( zEvz;;wbdbFx4H~(WW29$uP(2=?B09Nk3Kd~IlSTC(~`*DS5r6tO(-h*^y0*!nEkzH zO8u@z9P~c_W920A=o1X5Sp|L`IO5D^@bWv$zaNb3*QGUf+Hb4O-)Bd#p`)Cx%nk~>dt*#y;L?&nq6p5 z!&_zhUkvy7Rs?LCwMFor*g^r89GN*DbI!XrytTHn;^OAsD*R~c_cs;}j*g7tqN1X2 z-@Rkgc`@OG`v2!M4=wd*>(>a&zxw`u)t)_jydQp%Y%Bi!S>nWrUuI^aQ>Q*Zeq32? z>(%Wg@!Cm(SN2@ImK%1fdYgZ^6r*+htREk`r#H=ypDrQT{7jwk54+QK``>rj{(i3X z@iW`zR`FSW*FMJswJeIPzxUS)%JBEgroC)YNc;Q8GGvBIxT@8jg^g!#?Wzw+%&eQY zmOK1!UPot0lT9DTv7UR5it{8m*!{OJ+N_uOtaQD6`Cr%mFme(3QJ<%mBXgcBe&imIY|6MsaIm3rlui?x6 zc^9>2znK@{@&DtppX`;K5C2zWFOO;9`DwrZI>$_fKl67-9lyA~l=bIt=YKB`dp$pW z%4ed?ZguCZ_3uv4(L3OL)O%i?%Y}ajE^}>~G3CkoX<~=}xm>&b^Y&}Y3HyD{wfn5w zen|4#-uKszT}%9bb7SD0>GiU=Ipn$d-~XH*b^MFx??qGluBYxlX*uKnecNk0UZ0%w zXYZ&bDS{(ir_6H89d zoIBzC>$-G{z7KEfKD=f6_%><6|EZoXi3URU{hu^meN}j6?zH#V%QTLK=YMmS+}S#x z`L<}WnE35&vi#Nl()sHH)KRfOHCjP7MI#ZjD3tAYxf4k`6Ig5tp zQ}g?$`uqDw%DJl+?dvxVtm#j?!YQ}ids$IrjsAXSf!aP(bCWAq@Ai3hh16bMf9*nT z;=iXg3a2zq)SCzG_LDZ(nzFL?{QH_kMcw7r-@Y-fwo0>I$}cS|D`$3pZ8eiC-?qZT zg-z3Iuj)C>ob`rJcaOZn$?D*L%h$iP>ahDASCfA|GXFe#aHYe?nCR%swf7FSG&Kc% z4*jotQvQqn_8(zekNkZr|NLg(&5waHZI$y9_c_luF-^xM5-ZGX{`|3zE#|IfQqRq6FKez({YuPYf> z9RIP4?R(jL`)T;CuTuI?x7|}V>-EauRNk$z@WE=?sCQdDm3Qg8XU**|p2{Lqc2nwU zP5J7+45fDS{!ddjXJ;F6ZD#0PvSEf$W{j88p)6UkmHR%XRoxO;TsYN-_iU6&_JyZ2 zr@si%3YyF*lrAbYec#f5#b%G@{r|Rgs>DmD(x}jtOb=QzgzLmK>iib;$*&C8@tk^e ziq3`=W!6`0N>+vGd&|rW{-^0LX}@W; zFRrwtfMe1O{U<9nIL2{Kx+1aR*cl(ApkrsQc7?1`wYCt9y7EHmsfFsPpQk467n~7% z#dCtDu*hGBs=NO`E)O|T&sr;cbCPJNSaW7>W0>nNkEWzfg}qXxO|BCZ(xqaXp3F%& zS2C4ptyZyDJ&V;sp^N!96gFgi)#u7k?#fW|DcIW+_V)4S;{|&|vrgYQcp~ce)V8ay zwyS&hHUC)G;9r^+EEl?Ep6$GyWmWgq?u^^LmDNFUUG==};j5#+3Tp+cr|kWwS!Hcq zKUKB=vz>ra&d!e{w0*EWFk>uVExAoj2 z-X<@^6Pk3m4s2Uf6vC_f+V?(O%^=+RwV837%TJ5+iHm$} za~t1Xm=nWM6Fx_(c9q{OsoEPIDyD@uPAG)zh$ubMu`}v#d**rjdrR0vQ)6DL{eC>Z z;%A3S^O0|?r6u3FCEu<)ye_!gV%CL46@qU#7D{jytuRP%R9eDaK5s*LP5$Q(VGWCX zH?29o@@(m=`(Xwv{!M%BrXA{gd)3h{wpxDSC2>Oja~DV`Mp-zs@<%E}PsyF9^viSY z6^RpRZ?3$M&XNu1{1CTNYNNK9KjWY8j6A`mKAKyW6!N>BiM%A?>*{&n&UCeiYlpYI zo^mGOY9`CcAe{(?b&3(Q3f{0xR`j0Az|8oJxkZVM_rcH1k{1TM516Y8FXLzIRf`t6 zx2Ba>lW#}OR;v{ry-A*zJodW&wNO4Az{Ag2ur1^7+Kmqu-{uNx`uR!qdK4WQ$&w9x30X{=*Ys^RNHm<@8$3QL2H%sojCu`=C?T@Q_HB| zv-s7`@+?m|H}6*&#gD#aol{-j!~NE{Lr~3;Nkn<0-cvpW)uykkMak{0d##GLY8e~~ z)jAXM;;LI&ecj7LEtLwqon~>HR=mG(=$yI!M3vcw#+NkMe>+S6X3x@&Zq{=#uHRMo zhdW@tOoXkG+7=U0?e9O|?Y_SA{Ow0J_J0p(hrB7z>YR2oL`zVm_pii}nip60>MyfBxrJ44-56czk=L zyheDw&ngws$vO&}fy;a*8D0LNso%#ZyvkAB{L=Y3O7n#O21gpY&N9&pk$0OYvo%C= zsl!Aoy^`aNnf`y)n=X(27y7bYr)*vCM5elWfp?SidgNc`v#W&ZgyA4d?5hcz5AsfZeOF8dFv!9Q1sqDRL&jvY6FZ)HwO5 z@jW>U*+9=T@L{kw?w)d}j}RnQ?fx#>&pR?~jac zK1$@AB!4w&%1Z8r8K*k$390>UuN3(2*L{uUcL~%{g=3e&xB9DhSe_Z0R zkb}RjylCxG<(w4FcC~9tRIA8mF?*GhQ@qO~UotG85_EUcrBVf9AKxvNX@bEH&iw|7 z7aBi5*eN5|7k6;~ryJis&b8}FUl161d`AVx;VX@HI~@OhU{rQF5!|{zq%`H+p}SxG zil^#zwlOWe*_+NJtDkqH+eB=>z{Y&*n&u~b!oThQ1is&n-|T27sAb7N<(uef+;s-xJCfXoo)7I8fljtRxBo&iqpD>*i?G20cXztXod z$(~XtH-qD?xK8-m0NIz2x{ub-aDXN{?N z+_?8f-gL#inq@LZ>cw^OhcXT^2L;{MYg2eD+MmCo_{}GqqIAB-D$YnD0dge`&E?&8`p$6J5^2Otiz#Wq9*iN zed3HnzX>c%|GKO9S#FztZb8er`%-&*zVUx~D*mG0H^xvbCNI9SNcG1mj+u`x*3CTI!1!BI-PMGjC8UMrXZ3!^83(VsaJW2kun5g+NK=@4 zC1}Y^p%sx!Ki=GD%zb#fX;0Z~jQ}liv9HID3Yr(qzrzy{z+q{n<&)+$`8;Ep#hl!$ zUSF7}8tF!Dk1R0IWBH`Q?bp&PaP#TWH2s7#_71)4=Xn%miEb)vJ@-aR?ppRWCtlY0 zXz3G*a&LZJ+aG;-$y5uy)xA>eTpL0iq`xG#Y&hNTc>L-)|AmLrt{yddVqwK>{X*8S za&grs`GbYrH*TnPX0Wj9moikXjHceyk9c{5A-y9~N`m)Pt%Ps3Pp?{_-(H&nC-^VvL zPF(wEbATYHpYNPMyQ2HK{lj`xj`p%^=_Q=xiZof%xxfDRr++)^E%MD@JwC)*+Eg^p zDSU&HsL>Z&&z^e*hd+obpA|}NYl(MkdePduI=#&4y8LFfh=P!ohmpZk;^V%>q%G89 zW)ECAOWj}aPURcvofidsG!F+Xcz^pg_g@G1wzf^~J)9d>Ss2Ob>fg%EIB?J^%`0YS zo?R{124)RG!I+E3z9wvyTr}~wrQYh^e%7rijMkU)eb`%!A{8%hJ1lI<*vi z`uAVbblJ$Fo;6?PSeLr-g8TzLqNZ8$rX{6eKj-~FJ5f7L!!zjU!R?W!yEgu4*N9x9 zn%x!I&|n#@*&uNEr&Mzm$NkuguR;^=o@U?jqwmW0wEFC`?KKS#F8o^I)IZa#ETo~~ z?2$NG`-R%R(d%+1DxB;#HnY37e!A0~Wp~%iVU*Qdvp6P8M|2zW;eWxEw~l(hT3@*K z;J>L}@t;K%wQin&*EKJ`SL1P_Q`YLMH-%R0mJnTab>$=-_ZLoE-tD!zlKI&E*U85! z+)3TfWt3cs#WG%*DAd{TNG|-4Dw+KE3TI`{M}`H?okw+_KAn1{>o5CG7e>z(4W_2T zmKVReo^EmVYb-c=WrDG|`nIMbPU)$;W8+RboqDLawaG7q~IVWkQVQJIVvYQ9vcWn|bNUi+8UFXUw z#X23svK#fv+?(<~QeJs{T&a}$5xVJFU(0!iWNh3$0cx93A- ze7kt@^s+G)t0q7h57p5%L_h8 zhl;eWVVV_bA;9in>Lc~=p+WHC7`@Z}$70*wS%m!S6wOkZ@%i~G|1I~LHB(QmDmb@j zXS{&|_whE(rwxBL?iQ*k>nPPQa_x>-rboPIq^_UQ{PIauXd-Wncn#QrM$HL>3q>9 z(Jjj&yO!ix8`=PumABsi4Amv%E*x~#h3A}18KdZuCOm5JsvRM?g*%B$EOxQ#=jEa=U~ z4SavMzij>$|GYnS!i2<#m3miHJgd2STC&`G-tNrXvb9-PdF?v+BuT3~Z|0`O_jyGo z9SJ=x%vs4-z!CF6Fnafj=(VzeInn;N&+k1S&+)`!;*pKYbzH3uw@jqpm$TPAICbNY z;)2r)mcL!j8)rNF4gY(yqPUeN2^wvs#`? zJ&J$9d}YVwTRYav=knNT=xp8A**>C(hYu{(}wFUQ@g~O-mEKAN=^3;-K^;Z_0$=f7bCVV~X*;}M=t1WwtN0Qyyjy?m4oO^7S zSNOm75_eO7r<`?R)2x{KY0JYVYN-6vE3Q3TBCsZE()qWGwA3GLJ z_rF)Q^}w3eB)_S_Y>%!otkXSzdcNd?Vpr}Rf9{>$6XR|-{qIBXu*2<}rS-J;C)=^! z_*Lb$vU={V;>^hSb!P0XZFLL74>wd6WFB21yiwS-C0M81bxcC?d7B|oUXJs<-R8qn7kccxY@On=P9=6qaAwkdvBR}2dmq+I?GaPgJhVf}?(muwI!O+f zwlK9Ah%hopT`Vc67vAw>qtf4|q?4PU@XXX*ugiJKwK3_O_@bOs29HI$SynB%G&hIK zL?UdC2*cgN5Q9VPK4}c|_PZ|>-?rv?lI!+r=k&C-w;%oAT03*?^u_YoZ|0THtZ0wq zlvaNC=)j#LS$(VmddY?V|Cx$U4>t4senD+Q((S3@bD|t%Hgq}jtkU<(J^xp)dTX@5 z*HX{;s-N?#gCl&jziobTv1R-AokDd+#%|kF`Re|L^cUA{c37Tx_s&WCJ?nRG_)gzbVUs+tg^qwMQP`C;MJYZaL98!)8+K zT*i`&rBY=rDY;zI(~K;&_N<-E>HU+*cjqdf*9ZF@x~p2=P7QVSpK@KlMnvOXdQrnK z)|T%~y~5#*T4xU_&T`+Kv{dSpo>8>0{f(cqH&i`v*el5-s1sxIZVU|A3ux+Jz^f^Nj&7dI}v zKD*fUG53t})eIS(t0$`2Tc`71XmaC=jOMoU+jxCS>g6vCcW#s>b+-eXIyzH z-r~s;BRw%(z0t>ieh9-9f%^RnF%S2@uug4bwA1kGl1iLpo_chmT#mG`@+_s?Q2+j5 zhdD2vU)^w|Yc*T!?~8ubeD}W9r61`{pKyKYnFTE|;pr9Yb$-ai0$J z8mG|18|u1ceika9`P)7QM%KtE!^i%R3~qTTZS zANp9=UEO@~Lhi+%O22npEMIE*v^C+}qg0pgUjsbX{nbiM`nqxc!o$XT2^aTQPiy+W zkiWt1(01>I#q)QcY!qK8ttYn4wywH)^1chFU)SbO39wd}%Ic8GJf+ene?e5$=hlqt zswpw`ty!_~p=rdnWV>Nd!W9BOj zMm%x_FODf+{ch%+w=kiO2dUyN!;NC$+PBCLLm5 z|5W`!pmKQgN3SUdBkLU4S_=K0tJk0M-|ijvsqcz_;pF3vJ;KJye12??AGy`B?odCk z-;t&r|NQ**{oKK-#wFG6(WVmb9Wwv>XKGAdcm0Cz-^^=Q9IifP+i1^F<}N$WTT&(B z@L|1~;>N+^_KlkT%Uo>5ukmlbG2Ql5*SFQ@A830eFI~hUdn|penu7p4V>%lz<1zC^ z6^EC)tYzXzzZSv~5u?9b!+3$+b4{1%pwnF~zpk@>y>oAwMnrb%6N~Pp=a-bM-1g1ZE>3>0*Ocp7?2faYZ?txew6Jl=TllVL80>3uP48E_}+L~xXGh@`$x9}&u{;BOA6TQ z6|5=y!8lSZ*#Dl~jQ_v83oF`F6HZN=rs4k5Xy#U!|0^ z-)X-;xRC2pou|&Ns2vW0U4N=nVy}J@m($+R?mhS6-H1e?BdsN}(R&is9@! zeV;5-t*gskPw^H$)XG}CNL^y>D^s^`nG%J8hsqoGoLcVv&a>&$#m?+-!>!D&Qv&&w z9lCGsv0HO6b@@C-g9~By6L)@CdRr`D(`43A4bSMZJu!da#8=8PLtyoZIf;1w-$-?c<9(1*pmHK`E%_a%PH=v zu2%fvp8Mn+QY!OoWJRo+zoq5NirCw};a|5~^3{YzbJm!sc^7Ru7xsLQ<;Kiq%UZv` zxG1+zEXZq``mv{9m``nUx~&?=yu3oub#54!Q1|EHBM+;sZb`ptSD5_?}dNem>(A`IL~~_ZGNhQ zXYJpe(R%Lqg8nBfl1q5ZzH6+tH#xjUDq`jY$6pg)P1-N8a?1JLpI^)nQ#3fN{`9+> zL2#&3{}l$)DKFkViVYL;snPYnx+ONdY-{a$h7z_k{ougIaqU5W_LSW$w^Xb-J^A|N zEmrfcr8itRKGNzY_-VUDo5k_HcR42SiS5;3oWVNf={#SH6n&RJPqWUkY`Ge-*)8wE zkNdx6(~`Fvi~Gl(kFDeW7JNSHfZ<7p#=W=2W|aiXn205ZwiU69_gV4QNv*!ua&*_f z9B>uTsK(?}(ce+HP1MRqSz>$#pf$heWAA zht6Agud+C# zd`l6Pu6?y#udgjWb}6crE&R*xPr*Oa*W_0$G`wdxIZZRTQE39f0Tu99&3o_9;;=Axr>9rzXpyY0BPDr1q2@1kY-Q(O!$1WZVEnb9O3mF0OgwMD!lJKKepTIz^!s|H^?&E}iz+uNIIkb;YnVK<`FYCDvJF;8<^ITD*t3U4Qq)^I zIW+IpFXk1ICDRU9vKW7r_}KV1fGvFIj%$-F+m)7{3%&MDGbcl`OGV01C}(q>{T$;& zA)gsckKELzB&vA(39>#DS#xDsUe%9xc@00#Oes`)HEl`h)3%(|S3CX1_22WZxM88+ zsW2@pzDPs$t>8_&|GUK(sK{+#bN7|m!Lp!3vU{^-LGG-4%?0=M4>$kY%d>yUpW<`P zDrwc0$#qioCBK7a)$~=JZ`gTiogJs0>ntwsTXoynS43P-k^eJg_H7Nr!@mv&E%6M{ zTX|@~hUQaCN2Y%lJjDo3)@-eae)c2O4kQN~?LeJqcptFtHYM z-SEt6r_9`45sN4Ny_UR3^XgR3=TGaRww0(%@YdJiaJ2YacHy?}15MFaUs{#-{(Sjn zPwCpwG%$?Aw|*-g}QlM?F7$>1kP<<;38HNf)LZlAU02#VUBA;#8NvNiTJ521#Q2Fsb z=l$d8#aR{amnw@1t=w~~c)gSIU&fm^?__@avZ~fs%*zwiQ zE;*v2rIE!!MQdYw_dmR~PwjGe>0kf6JqPC8-5@G^bN@vB`R6SS<(8ds;5hhYUSw*K zet^je)9q>9FV5#i{9F@dm9St#QtM>3;OM*$tGuked>l8<(v#8Rv3>C*Var96d3>3t z_PM;6aLc`XZgAuG=$NpYAS5!bG@Qk zra$XhJuO1q;`;vU9~u7~>*l}JBhn$^+USrsM``b_MDCkCE=?D1apfn(zdCkol2PoU z7SBH!>84g2>uam)&b>B^XeRaj`C;aOe>O;1; zUAuJePJX(s+@51opPdrlZX18LZIM*jzIz=dpP0FhZd-g)%%N}Y!p*iLLtkHyyd9sWsM^{r`Rx9yJiEbR)uRuY`eEB%T+2Rb*%CWfv2^7r!$`Y1 zydP%$zg%m=c6C!jaIFoqDtXY?mUt z>Ai<4{bk%|r<)5o{BGX6e)*LOZxO?qt$)w?H5xurXKB5bePoZ|*+9eR`K!Y=2E4kW z^hvVwd?$AjSK2}AHuXNQDJds=+vl>Hsv3W~r+uZ5S>ss!`pr{U7#%tIZ|@ZWd#AKO z{n(Y;Qc^Fjs(sUP`O>H5=XbwNuHC%j@rQpL+}xXZ&0{xz@LRNF>iOmI79pO~7%rrK znk)3c+TGPQk$wHv^#&j36zuf1%6HF*mR@S0^5;vf$E=FFS8uk|S6kMfKc90sP-EeF z*BW!{X;YIMzTOw-xyIPvR`_`1a+BvJ+g1eX_6AFT`u)IndiVN2)1S|C{NMb1&fJZ= zA3XeeICT<>lxM4b{O(-A&fVK@yZ0w0EO@e>lb>TVdh%Oc4fCg)TWL& zu8@O2J64+}9KW_rOTooDp!Gtg|HM_|oE64Fs!W?K=Ie1zD+zdisk)nGLE!B9&UY9V z>2=r^H9g#5Z$E3_Zr|FfDa-tg@~+k?ERy}0!LK{vg=^Pxp-4_1?aH@zvW%WG$2Hu)zyAKuJ4aj|?)>}h@wFYf`T_dc)wMNtb1W~{?ydUwSS4oF zrER_cFWru2Ov!%yYM0B&GyAoBq83WuUg(vLstrAp9iOQ~f6tpia@%+P-*y%BM6OY{Cw@Cc4 zE`iU${DY#7hnsw`{l+w{g^x_JqlE{fjVTR9l3o^ru)=XAu>7AvM?`O4JX6v?lC&WtS z&zW6Yz!KH?*6P6VL+j^uw#3+0UpyA5xkyyQd)J(+jKT{Sy6TtO7-nC8weexv4aImK z7weC6@7`YR7gx#>vbV4O=ft3C$G6NhvfJ+;`})+QlTn*bzc%~->$B^oL7e>`S_SCI5nQRw_!WuHIH32T?)#)|5S^LWfq2J=dTr= zf9VR>!-L(zo;Gbu+~x_z-R|%=509HGmVb;%cEhxjJ>8cNiqGA()T(7drSj2VE3bNA z)OSDoYkT1(M!w@`r@H05(M(%=@A}HVs;t8yH_B5@@3I?x3)^g>Hfg7#MMFko1^Yg$ zf@42aKF-~v8MSQwp-OLtgVnrkTzJ5HRL_4VM%oCd9um;ytwlar?I zWIQRJdcv!$MdjQ6*Y^W754x-=eKfx=^F{66+Oqo$Gaja_oLOrd+4se3Ye|0G<*zxp zOYer6XDvJOO>E&KW`^3w>(co@_tqT!RCm7tBX*igvfJVLKjHMeV=~q0%Gi8((diA*kkQw)orb9LtLx zT{o?!ItZO=`#fDlTudwc?F=VHv%Bki1&@D_>Je<8l6I<0;zr&6Jm2HC`Hkni#LbnM z*lw*%_L}?P;BswmzT10dtriN4cyP&TpC#uROF1XEe80b5woV?0&n^hx!s8L){6g)M z!=LwFib5$Y7Nw6Qm&AWut7{)|UE%k~t+%dOw(am~Oq%`O)M-lp^CR}FY}y&t+)tSP zu=KUT>!(XTulZW@R^+d{@bwKBUniL+TB)D@`kvu_y8V%D-p+DybCFWwCat7u@X& z+ym#_{lUL;>ID;Sf!Y<@kB7d!@T;QDYDv@X{qwJ=N~s*uJh{Ta<9!|%Z-=Un8!`h@t70PEi0zdySKI@ z*6OCzx)rs?HH!_#-~Yd?ScmN}VAm|HTwBd;nUu<_B2!rgQ1I-*kQW+)$#m09$*@;OsY z!9v@$KQ65OyXoth#m{5TJ-;(~!u8X>Ypz{2VYUcb`dw2^>HYk90{^z1V{s1IDieCR zRR8$(eHXkL7R#^u8MI_>!h%L&telXo@P?isiWJ*w$^nAhl1Km1G~>l{W zI%pjX&VRRQt+U#R=#befwQA;Uu2867739xzOL&9eT^|kUHC4v5B*bz;mPi?M+Lvs) zu6}Qi@HL_y^`Y|uJXE~*&3804=GKb5@odeeiJUu= zPU@uI_)>W2^yxVE`IB;=x-Y-y!IJBH_qmd5#}o58`^EL0T4(2!3bt|z3QSY{^K!>t zS^58OL_Y3k={dbl(yj9QjT?{ZY&R9u*EW2u)p-=3J8x%d#qLEL;vOI1Hl1`jqj2}F zo%(@Y-V^6p&G~!!=7bKGif-%qr~A82PAxpJLTcySb72RUNH#E77qzVszR6XVx$NwT zjD^VyBWCu?|GaaupV#--Cn@`hB_A6M)o-2rZ^&}#{p{S*k7;%{`Z^j5uWy*7uvdyn zB`x5;xYCz^#m~c2PgSsdxbY{v!-}`EBu{Vo{@@Kct;{?ClrkTy z*AC6oOQjo?a*B%=xL4;CrL??wS0Yq8kICin#^4(_nC3edpLG*^x!Ci7LMB)4b;b6M zL-`xthMZj1eqK$-h%4jOq`QU>cHFJ9U}2hKU0$DIShu+2=(p#$woE%EVaeo>`uNwq z!b9EiJoAql#00ZVICJpHS>IFQ>kddP>~Oj#S7F*^v5H48{YlJ`MT_DL0^%K1nL-6P zBwQ-ewaZ`gJpOL?$k+Ss^17PqSAWkw)%)x&Z;r6A&_<0WPT`dr`;G_1M5~+mU++@s z=gGPAT8B?<`r3Wf3JDFJY!midFHll*Q^-vDwPbJTm*;mLcZ%MUW7~N6%0?g2wO7uR zu>M_sIDl!+;{5p?%XaRYsaCbga>CP%MMCAld<&ZSHW{5X_%Z3b^pi7xRgN2!AC@%E z)RbCd{61Y{Zs)w{EvKh`a^$;x?n>p9zRh}}ohObkiO+Cn%eZhNXyd25D-zbnZ(w#k zcDKU7x%bnuH5EqNxm)l5=BX8VaPa+${p=}=Wh_0nz4n=E_>}9}0tFGq`HH=~Uhgg@ zw*>SGsvqq&nktYNvYb_9W!6f!rBUadW6R5Wf7$192`+jOeCCX1^!YgZOU5$kd>V)U zcxTG$D9v8K>(Ok(DyJei4Gws&B`~8Q} zNJi;=tHi_CNB=nQeE2`fRm_=jvC`31jZKL>+)3 z!HZl^4%TW;*=?0LDRT4Nt9+j~w`qRNo%Q|RkMGC+T5V!-{ZbQV%(lO}MB1rvo)6c3 z(0FP3uY-@2{ER>t>QEz=Tlj~ z<2;Aj_ogx;A{G;utkd)J_I`DBqWwe{t*QOO6W86zyKlDF=egWnC2y8l>r8I>?QB@2 z(@;?w`eMzRlFOKDuyYWp0{!ruNmHTyjAQv!3lW-^0g$^5#m0<(fBo z?!T9Q#D4uM|GvHrmsTywEOBf)WU|Z@1KeJ~^9t<~B7 zcbCp+MoJ1MFFvHUY<^buayhw4;swrD4S#Q3o3;FOornD^v0!heTy=>>X)TZc@i43t zSp2im+e1SpHt5IY#~EhRx=&9u+dCy@ifzs`P3}3*m+fDBdCm9ayTL5K<#Hx0$rNPF zJal?;`r^l5ZJXEsPRqU4y)W-t;#YMXFiASA5CO62>zOtMn&X zutZd3Bu(wvKiQ;`DWIjZe#277AnVKxUqUmd@Js2O3|{0m<4ca$?RXEy)IK05nhy2o>8 z7FVIOU7@R%oxODY?S!emIi(HC9DDV?-FIZ`djCkQYr|Os-pLsyJ}O-e(-mr_GknPY z)_b*e^46vLzV`CL5fK^g*WNO%Yfsu`{#D$lQu*ZuQ3Js)hQ^)AB^Q_FeeqrXvBJ5&jS5`SjFzRM63VXbHgW8V;D>5hYn=|`a z-th44`SE9`Op3!v@kPH@WeAk3Em3>Qd7ymPLHn8$H&4C}?>amCmA$u7a;xu8#e9yr zqWA8f=L}ku6O!-Py)nl~`NgdbVIM8e?g=?M;p=miY?g^?r>c|c7kd3z$;x_ar|K+m zyZjXy9!+JXj{_B=S>hrY4QjdgcDH@Fy(zrXNO7~I)gM22 z-*OoUnMqN`zn^Y zO3?dKuk(DtKb>L@3~OIHw6itq{d51EBWRc6wthu}QBG3)f~El37O}^h54k@&wQ6Tz zizRoQ&da>-`tNy`cxbt{nak;~yfj74?^MT9o`wnY{%i`(YAihzp(s7gDCIzC7Kic0 znv(eGk9q6X?EDeuFUoS{x_^B*H|wKyD-Is?GANz2@x$EB6*~(Bea@Q1Fhs|OM9y13 zfA6mi3JW&=E92}`d2n`)N7e1CwWdt>%q*w3iZ*C&ep{1SQ*CP>zn3fOveI$^rkuNT zeJ@3e3KU2Sf9`uS>)a>94ZTY&T4yjEKJc}T^Y{FlHCd-PIiFoxG~GydljOtWS6ycQ zGwbTpP5f-_lk)57(I@`tsplukh^|&)UiS4ABlDL212+XR-t?J2 z(1>r#{p)gCF;-TR72$HXm-u_9om$@gE9H057f;r;+V`ba^t^bJQg>6*`{jzYXP#6~ zJj!S9ZFr)DTb*Z-S||In(-Jp)-Hvgt&NY4C|9hV0r^kt*AMfg=MZVSd39z@CyvjJ@z!Tq?v$b@cje2x12oxc;`$EP)`)6fWq7!$FtF4{WV4&y<3l2k0`xz{ zzV2t&dVAu0eXIxjf*Hv*`wn-^JmYs|^WS7uYZX16H|`k~TRtePv^CDXtQ4@VBywTc znVe{^psX6bxs|7$w(%UlBl98Q#fjIivtByAuzvDEp|{AUNH%F(&qASHJ9{`5iSndQ zk;tB5{qvi_)rH@uF0pJ6P_gU%6R7OBBhFDg&CiUX<3v?H*9VvX-+K6(1$TPgSX(>q z%BlwskE#B9;i52oo}Ycn7S@Wx0@LRnn&LfigN4=uOD)608AXySE9!0A=ZecS|B}-< z_fO7un&%IZxGcp7^Er0Jx*1r%&)pLh;wXQ*%KZNqrC;+N%)edxt;CmC&gJj&>kFcM z%@^0aTXFSkte}(PHiZYWYi@+3{bgNxx69jH?)QcmV_q{i0jnyWjI(yf`q~oyx>j!1 zJal<>}NRZZ`vwgWSlzfhI)w6^M<8+7hj&N^HxPn$=hCIA>Te0 zb$!J<4%wF6%7Gs?PSld@{cvNYjO$8H{RsIRvb>F{cMN7!p80lOC&tQ0p!&us{dxOP}$QD6V>#qV!he!pEiW$n?ok+K>G zRya($eY?W8*TR+c!t(nG-_sK9PhWrjBym3D0f~>#n-?zR%6_LRv1#QW!DMEkB_Co> z863TIcdnuS=7m`aMO|Xj4qPI0Ykz#x`~B@Z566=SKOTwfcx`&^`kJ>p@~&ND(|W;Z zTsEc8q;mF-&}AC`*R1N=_u)oc>r{d3%;oE+>Hq64T&y;~w}ENCd2(HW$y(3qCx^NM zOoW%D9~U{)qRPuymT|nW%3bin*;z>~VqE{$d#gSC(6egkX|dw_Zgr1-M>Wl^XVuv= zM=g@!=Y__ScJ8_BkN2wR&HDbe$u+<>-79ADw9rTI4ksMlonk%1e>tOi(stp@v>wS< zsS>}c_v*j-#jAXW`Rek}Ia{WRsPEV?fyH3IY9*dU;4Y?IoG)(zd&c<`UQzPZm z<&7fq^U}OBX3kWqT&Ar(HSfj!IG!DkCcJ$c-rut|Dwy@&HeU~}xh}C*K5QpGPfLEl zy#4#_q;mCdYv!#xz0h^0-0t^(P3FD6&b!U-x_-pU2@TC%i+AU;wN{nRv8eg0T|4*Q z?77Fpe*BkK+8Mp()j^fsEtO_<9=|RzxO>URmYbNVO;UdG@E))AfdIk9e%jmC%$;F> z;kq(MnrfqvRVBwhv;Vg_pL=&3w_kpFd9~15t&7XbIW;U>);(Z*tu!JG?>f%R z`Wun>_f-1yYn9xhr+;nOYh3q#*Z2F|xBfe{e7Cyfj!bvH3!x4te?R4|Vrr^5`S5Pp zUX^)@{om%B?>Xe4=s3CN)1(tgH}YiZV!sxxXEMk z#x;6+^WR?&)r~qSen~q}?Q&njk(A`)SC-koPGWsJsbl5;1MU1Xgg@^89-iZF!|^P~ zQue8ZUCGbVJ1ra6v)bqHvCZ9c{Z;v{n>-Km4YucA;7K(!wanf>xr6&_<-RG!MTQGv z)Fk!O~Iwb2ndknIzYHfw#xNa{tbkmR}Y3ZM9CG zu=V>+Zoi)gziswZh+;Exw3y%XVp71X)%?9*ejQg>AC|lF>(Xb^b3X|)N-xrBTV8&Y zAy4edW9z;8UtgH&_-TE~zS*U_$b5NSr>OjVZU*ITmx8Bv?418P&iv=9Hk+9da~LCM zPF%eB(9OH?+E)c0T#=Vw8Xxy9u2!aW^9D(q#rD@*JZsK&+C`dO^GOx$+kNTHTE-~> zKQ1m?d;Z&pcly(>-R}1NbMGG4`{iQQPqWw6>vksoEvRPX*O>TuCs%F7j_38e#hg_R z7&BjD?wt5X^?<9|))ZH-ecIO;lO`5K-&C0~rIs<|oJ?F)Zba%Sv9iPqNgvo3rXSb& zC9+qdP3c9!%DAJ-T0N6JwS7`TLm0lg1Uj4w)Qz<{dULOY@#VLfU;dnA<@nKYQ_E?I zT)}7SuIb^a$5JE;Txxtn&NUKjTh@(z7*uOSNv7rPb>O>^;&Y&}49+P>_Gq z7WR-F?Iu-iEtSG27hZ^JIJ!n8r&Vv9;IZ6fcieJO;~5vWdApWs;YIT@SLinc7hKkFVA9}GZk+q6b_Z72H#o=p9B^NtrWFD!{EaYH! zaCCN_pK)X5A2Zn{E6=iQbvm52Cs8+sNj!VMw>{4zmaO%*Vs(7(lW*654c&QVm)P8C z8qs%h_ne)PR#cT&G5_<c5a>GRbd1iJsHGf(pBLfW|FdtGW zs-IZ1bl&uGh83Kugx@cMDBPvv$Y_{Z_!--JS^@?YEiR<^vmf9S~y$JO_(ZYCwJJX9y?85gg;V(~=FW71n&G6TBb zy8g?WlDcVqn7?Ohp@`K5=~G_QB;?Abc008xb^fcF>XBz-yVETFj;UqTtzy0JTmtr|+4FZOck%{}<##e|a%Rke{#e{NmexNE1RKyH|x-gKdZ zwkue>Y_IK3cR!6zr&VGxYfj}W z%d@9tq}w#V^5mX+&w0j|#?P*QO+7=zV`ehBMx2neKIm#Y@9)!9Y~tBB_g}Bo>+`s_ zGq=EQrgEgoOUAyOw@dyubI3e6Ygzayd%qrY`+;7adIOa;m%A+2Y=|k?(3hCF@X?yB zeZN&#A1b=q@vx@*T1#p7ug%t7&%9@8U0D16(UQ|b!Q zx09LUcS=U)%?CLXG?`n&*1FW>@#HO8u5P6>sbQ1CtSLY0cb!kElkJ|Y{m~-&$iLl+ zGGC76HO{lXe5~zL{M-#4`|_&0ug-dZy}0Xn&IGf!a*sF7vkvq&=;=}E zKEHToT`dVx2%TZ{VlgjQm2(X5i+KfqlFlwGpZR~=oQ0hXdrrh0Ke(d3H#}YX;NgwR zp4rlz4X)SSr}bMcv2s{C|Jg5=FumiGXHFBdv-9geU}2}WX@9=O&u%{EZChE_?X69S zWj}Ce(y7jyqNktEKdyH+>V`$BC6}>7WaZBpM->`{XRKeLAQlw3nnjhXWyiPsXEmbj zK7L^E6gp_hop~&Ux3qM<#*OdijM7v-vg>m`Tl8t=!T{^ZQN`NZKAE<}{Jqv__{rkC z*Eh{2qBa>pr_Uc0{vDsGn<5+RASzkkv8w0AiWSrDO_>t&g|pe>Yg^l^z+>V;USda> zTu*&n^DgIR#nN5dk8b4nt6J}|dHJ#&#omrPJ2FLmgf&g)$=*_XQDJDAZE$|s%H21^ z$`@HLP&)f8h0FiI-Afx>zTWsgYwrBp$6ue{{n7e< z#pJCq4|f0C+`36Sm*K+Pw4;^Y^SIUSOD)LdYin13f7hYRqubu;mH%6#`RnJ`1y=j= zG|DNjH7ZMF{@t=|SI)C#@1K+u6lPUw&G}yX+C9zf$d4T>Iy3LRpYhV!q~WjC4;jW^ zdQvfWHrQIv+hMZsb>nS(qru_yb)(bW&{`?@YWxmnPo^0-hJBRPo2Y#OV zYt30}8-dkK3q6aJoG-t5Brw4zd+qYj&YCsW5fP!K>!1HyBPk`QsTn{0)9HKbXD}a) z3t5;FcKo(v^0x1n?rpFA^Co{clihho?gI-ROI$mXZ@%mG+H|=l)sGc_>`HrQl=NoS zZWWeY@5p1LW24^hy08BNhx4wEg@@Mf_Hy@wM^rxcy+>RD+7ww2`g-{#Yoo^6g!xbmqM2OWXL} z*f*bwSijo&WY3%v=VVGt?sQ+ZN`2+!Fo&yW@@09p^`{U0?AVZ~z1T!(Z+Xzv*S-^L z)w-U^%$B~sV7Be?!1_!dnU~+c-Q&I%YZQ<%B`Z`nAcwVSM(+B{eKRJ$*U^@|Rex#1 z&LdBkaLFY`zCYx*{AAY{>EFIs+&c1f*&?66kzvA( z=@OM0t53-6);xYWcv=4jS^Ij|jZa>rIov-SH(%o5GIoYDLZ>{rOZLv#-0YdI9yOO+ ze0g)*y&Vi;9H~>LmTzrY$jcBl$6zsMiHeNl6wTW{Q!~olDw>a_XLEC&Xq%hzm%rU_ z_W5`D-}9=%7Vn$=Z=YOD6vIC09Jfd3nM-Hhz8WuIecQOoZ?C=lx=ClA1^Vf7R>n`| zwYpfLp zGl%i4`*H6-?1)Y1&q(b^Zma2^@+3~Y=B{Qp zNb!qB(=}eto>07TL7o?T_rF`df1hjJik;P9XR+e-W%=KKU&n6RbN0@*X6YiHp0y$` zFT{B5&)@d7Y3;+hs2}Uj-QX3wl47cPb7ObT5{-8k7gzsoI}}skc)4J2R|ada^WnAf zZByS^yz={56yiPeN6Eow^7ZP*8`1> z@<4pJ+(qo`7?$6!z7rR|G(6kxigHHOmB1*k^r~q$PDgB; zICY+A>iav=A}TTKH`c#>cj?xLx{3c%a&r%;X3vxBm74tTAGdY?YYS`Zw4JXuCUxFq zIrw0SO-Lcf_Sc`51a^eIm~%#dw~XV}bH~=HFT8gDddmC#s$aIdrk(6l_AhPup?)VO zf1%LQP3QM%A1uEZwIgnZ!up`8udVN!+y7f0<-~n$wc{c4#OudislI#vDMLx$f9_oV z8T+Q!AG`6s#*fEZ_PdrnLfSpGpf|JmO@!AV!AcxOL4 zr{R7qnQgo2wB^pWmv*|n@0nuT^Ef}}MEj|U$>C3%|N>=2**_hgSdY-T(P!-$nH~YXkW%s1#T+ zGV(e!ad7N7`dn}Gv2f0U!%j`zf!`PVSJIrVjg~eRRBiO65h? z=d@o^Ia1e9rBbzJ^X#4&{R1~_>TRnZSK2Iilo9Nr?A$zaYeZD!{QYx8ltes@r|yzD zaQ2L_@*IPSUK3ibA94}iS(1Ia%5r6DeEgi*SK~gGKikSdX!_Dg8Bg_ASZ$q43j< zVzCnzY-AVb*WXvWT42IFZ!Zb=w@)tiywVCVE(zjx2tg7|ome``LU z_R?Mu>78vb|7T8~-C~Jju9Ek@&ef1+?3s5-UY7q*$%BV8jpnRSSNLts?H*RhpqCgC zY$mm7gW$5@1fCUcr*}Rr+4r?%VdX5(*KCScEYo75qUO5fx~F@bu(N!Bm+$?~??>M5 zdTfEGPmf~HGO)Ae=2?x&*0#wj!!?Mot8HH z!N=JgJo(X+f;UL8JX&zOqi6wnyjG zqohE)B}da)H1$evJFMceJbJ_LXHNCcBzaO#f%_GqU=|Z=Cx=%JI#8rL`^s zc74&gvywK)F3*46^+EmDzWGy^E;_So!CH2brcS~zsiF1P^$0QHGZeOlAb+l)4w-ouB?)a z^Mq}B)md5FnyM`PuDBon&Xjg%HeVi_kns7SU_rleF8D^m_{s6(#!)+6 z%%*O4aPOFCw(R0d=L!32nWoLUc4|TJv6p{7?^J)G(S9R3bnEgr*`IwDewh z-~Dbcd3`u%qKT1uZ$Lm^dh;sJZddP}J$Bh^M5TE}MSWC*?_c3I-Yh-CVUK!s_Q^RH zoKhE;xV=jJv#Oo_$@!pn-=F(mIzKqo&_?g@*WcMF~KH8w2|pZB(=_Uy&H zw-?r0XE?kQv9Uk;-l}bX&E$y})ut*e7YNpJmFRKUEB`jI#@I->{x;9SJ+=?O-2JO6 z>bc@@l-g%*i?1u@^T;M%`aJ8DpSZgBq<`^uI8H7y2o=p1QrY~xPogBZ!C}$DxVH9^ zh^H^k6_`$BOv`Us*Yfct*RyY5UT%;V4t#hrgGWkk-})7sJm>z3P7?Y5`q1NEy^SBD zMQ^mH`LyvVsXR<8edRZC&&uiAE8i;IIPbcNlY6sYXQrT#+xzlFjs}nDLD|XzgxaTY6 z%JI;2;=jKY#mCEccf?QK)i+!C<&OtC#X6hUKYLcTG2(AwO>bCuZ_?tl?-e?^_phWh zM4xC~n7t)1HuG4%b!_2=nUBxCE?XOV?#hgutAToxkDmBi{BS0R=@<1cb269j2tU=c z`Hp1H)lEmkW^dj0{eoFz>Yufx?I^a zK4@v5)mSlM>U0^g|2A6dEV|{sIk0_^%SdORc;r;5b)hYwf!*!-FN`}E7%kIyY$ zym%_#`?D51OF!4m*?_m z%PBT^Y!hvAEh(*-&}g<$Jd#%az@iicqU(IV18e=O-1$e^N;QpN7z*kwzOm( zuYJ|I=9Jj_XL-g!5i=t0Z(si9epUMR<;|C}>(|^kAMRKB zx>IiTbWi66j=vcs9emurS;Q(FPV?3YynN>l*PK(~tNuxBS)6?P!K3#RIsURZ8BXEw zfBfKIT9MW7s9V`wr|N$__e%9}p1mbz%XOWbOb__yHZ|6;_K5sgXBJ!O=~K&WI!Qr8 zLr!k?|IiJyouZ%LyBE1vRcS)o(h2*%Pk!T@5_=}wEz|2`fyiaU8+>73jvYH^UuELo zIeBvDg2hk0)!mJMSNzS|#2)?Rcdmr*tGY#YcM^2BZJMO;%kzV^X35-_EU)gi%%)$y>uLA7W1|~6u5q$$8c_d z?=znNFZg-?O7r~-2s9L*yzgw)X7}KhBWvI11oR79I3NGrz4NW3rpAh@1O}VvGmb8k z|Ky)l@7Q;8zoA_do7?Lf+bXZfpPSawnjF=2eA?8b>gNqvoPG<>^y^uFCHj{3@z3^; z*8G}&L&^9=uH8 z%qN>n*V*5h*0_r`t6O){t@PkUXBQs$_cYMMl~pxt$4cH9hsdpmAAD$5`YOy@y06RY z&H4Eg_p7MRnY%DY=TTDe>V*9P{~UPlCMDj?vw!ec(c-I_u4t3Tk1maXugMC!>;LX~ z{PItcb)L_~17Uw&hx7`eg zp6+jW6aFjhj!pdaxGvV$soWeHe~td|rE)C@yZYnIB!mA~FZ_(mUK%$!mE}c~obt8X zzNy{}Q}mbn&n~zZ@^#YH^K2poYQis1p1WQZ5V|7l&mM^_1>feMVl3UayX=+2#=70l zrdz$fU}N}#?dQU+>)2S%oR0`Ky?$R{LEiL?z!?%PEnKTUtG(NxxcBmLL9bRfvus@# z5yj_xh6`pe?YN)5hC%$}%E(Xi)h9pbyE>FDoO=9j> zmWXTZY&XJFemmb4bPzO(lx6I9o*gQ*am$vMx_Zl__T7(dEwoLx`M~_x7QsLU0ua+bv z>?^!<;mMY*TbY0EUbk*vK!}L_EvM2$yPRJ*{cT@y_-B>HcI|^rGlLht?N?p>lP&v( zj(M}e%R_QE@2y@P9rG>qfV65-{htPDxrx6_bsEL`UcHbo7tky=+&lHz2KBwSAMvD~ zne##PPwn>){`Eq)mp$sadA!7yWX&vMUV z4K{NJjj1b-$CwK-2)_|em5p7(9kS_m;gnW^CHL-^e#*ZoW0&sZf44t+zWyZHq0BLfCZi{({Jj*?K=r)oXPag7+K`x*MydaPU^asnF8K$$L}Q z^R3EW@K3ReY3WS;?EhPTz7pp5c=&rh!<6#G&#{>tMX{=7UR7!i4)@(3ADe9Ea!!Aj zUfYRAzg{x>9ZbVZT?CO2XFHeGQ5XOna3b^jt$mX;HV(^6*D((p(}U zAx$Zad5yL{85tTTg*&sBKfjy!m~FmlwhntV*HkfEbIHiW;>{tdyPY>r4Nsg}RaJEC z#*rWQ9xyCPS9Q$GTUYPEuxUY*YV_0a#c$v8 zSpA;6U(#~Y#}A)stNpipU2-Pps@9hIWwT|4L-sCc2@Soygge-BhLOpgBQKeRk9ulf z*!b2?TSFryr6%FUmtV#8okq!L5||#`J>ZaXE~;*((bn>~(=GB8y8F8%i^+n&9rd|lgIP7y?M3|>elWKPZOWweBxvhQ@;OP&)4_LMIJs) zUgPFgE4%%4%Vp!XijM&i5(Ufmp8gu}C;$AJ>st?a?A|x$?1_^vx7_XW7%(F#nsk z^Q}zU?_S!xbm8NNu{tH|wo8B6eC!-sg?rM~Tiy)eDL>PeuIPI>jSafyc$z}Zkn=Xi%G(+ zn}^?ul$2bXK8-K%%h5?IrkvZe?)a3b*v&Hvl%BaR-SQ%O^_#j@<2}E2x>)bEv-er3 zeET8`i%p+O~rBxXLYXV6pH5$JdpWg^zymA9QZ1 zd%e-=+pR2*U&03u#Le#Wd{lP3?OVR7>Cuk0aq?^VpNUS_y1B+y>eh`pM}mK@zmenY zXfwm5*=g>f-LDT%Qop;`_WC;>p)4itu(E=$kEEuV|7AFKYT}=Vvo5`<;=gt?(r8-A zM-^YKckM5>NUnZ=J&rkrvGL2%qxX*~GcWw>ksy7pr?jK*w=7rJWwzyuBp&X6d&TsW zW9RR(?3`IAzsRrC`}%ct-8rK_`%1F&^8D_cVCs2M@`CgDx*J*i+}YW=xxHT{x5$=9 z9-d=5tuJqF$k!>2=XU+trj~n#MLI9R!Y^fMaGo&J~_TUQsw2ezi{opZ&NHD^ZdW@=u@hXM|Mv@xC#dc+u3S;hc74e)DFM? zmniuE@msDg`#{O(B9jzS97?lS>o!>5;JdzP&&xaO)*Ba1&At9ufWhq;pRRnHgRuCO zAAV1>rgigNKi|Ilpp}XJ{rEJ~TX`#LmKw#q`P*kw%d>t_6My--#`&QvUJSZ|+^s*N z9>0sw{b?!Sxqn*qsWYAz?_4|3@FisX-o20iIX{t}NG@(mzjbLcxT}sG5ymV&l(q-dgouFS5ESNOkEs=lVZ4=XQFS zZ@U`#;dyPENXxw0rA+M`!h^1OA8eieb=gJYE5#^iC{)q< zwzfH_f}6AP)z{|DAG5#d>DixMw_{8EMU8lK<)=roC&)`lPLp806lBlx@y*vI7rt(u z8*{L2QD5KLl`^t(&ElTKSeu)CEEZI%pS|Z=aTv$LA4PL5MR&+#uXo!S`1Sj)T}Ro> zHr?}ivu*9!ziW~wcV3@*H7zH`Y~G72$~OewiMlNG<5{xq?CE(=w!Xh`q|#75eU$^l zZa)6}qTQc1R@&=nDV&}0>`dvr?V>s|hiva=*}wa2eBfa6{{IWj?ks0rpuzOxX5+Pp z3kz;N_^Z<1x31QkD!4=Rkd&KdsMEhpD3!iQk1t>%;Ln2xZ2}sw>Sc$g~ig- z(@y(5Tvw36!lII4P*8s=A?(%8HyeFl+@HN#ZraMVN(zfSQ@6;JG)q2sP$tV?J!f6e z0{a8ruYA7lYf+ZGQnz$bQc?Nz2TyABw7G3IewsL?WwreAIS1bMHC$V~?A-d>4NV*L z1_dBeZ8B%W_cj3#tzQczO{3s5xcGlz7RqqRl z_usllCO%GX+KdRp^FRKnj3aDLt;|b^MZTt6Kv{#9KQMURL!&Rc};pkjEr-fxHLF8I^MmTm3{5P zh87cpb=4E{B|moZx|<)o=^}c!s@C}M#fu7-Jzwr*7D?_oxzb|qZqutB7OU@9|CLQM zwek7IYxU&rlq%M*TkqUalVA7!H}8yD6H>jjCV#rLY>Q=U%bg~>%NH&PeEwX#X|wUh z&E6MI9a2!@Dl4m*G=a0Jefry?r<|?lcJ8=vI&q7{kA<3dD~r1F*)B95o!EM_aq88R z=RXBMIKKF?)q^hI5aSs(swrXUwZPbHw}^_t`a}uU@UxbLHW^YI1p9-!mUQkAr{yT$(?> zeBS)tz5?gZ-9@aTjQL3$cm+59sBRW9&(ohjce?c%HQyQQOq4j;ZEZJa2C<5ZI|>We zf3$N5U$AJxnoFv4PuDN~#lg>igU?nbRAstyyP)E0p9DN-ppapH)8K*)j30oNa#bLh`-jNT|Iq#P6Tt9{Ft{*o}x&F=a4 z%_}umx}9YDt+Llx=-3PY3}*S}3GXJXO4z#R{>Qs+58}&n?G?4VpO?y%BI!AZMgKxJwgxgCKGcLAdx*R*`+4noalJ8f1dDF{HZ0$8V z6QzIr;?3dpsrX=@FMRpvv~sn;u&7_0Qg3|E&E6WzpVFKxxs-KMYq?J_<6#?AU)XZrVx{93a9`yo~SGatK_uPm~-fKSM2YCtottJYMe4s2VQijuG3@ZE3@k zLzBH8@7VnR?SJQ4?M#oS-%=IczIWBxiv907FTF6hHT(BW-W?`Rp#@Kkp73wKywA~M z!kKG=d$smF5zu2%7iVGK$#85_W#%La8@}B+4DKoic5L{5H$cgSH#SzfawQKhZ>+zV z`D4!feG#&ypWElJ7ZFGZK9RcYbCua1nR#JS8*a|eEq6>m1b|zdZQ*+Tr9_y>_?6<_|m6N?#WmDOo+1o%7&ps?)30)Aj%U^HuTi zyrwTw+Aiu~{I6_((TleoL~`M09Y0nx#iFJBJU znEU8ML8{GT%Vn=T4}-Nux?~|()?~$ zbzI!N1q&9udX;6c|IMSMk9%bNI#thq(9rDPdvVH-9~JMHN4GK+y;!TapMTDrIl;lf zch;pJx?s5E>@s1NtFJ0pSnRlOt^09D&pxJNHCz3!`$bs+{KvvWLVW!E{{34kE}*l4-?B3eL+In_&@iV0&4Nm|5wtCg7RqON9J9~fbToCN-=oGK` zsmN=}&W6w#nQLnnCUx;CZto8Df8d^!l%&6}*S1gZFh{|D9)@)b7xd-J9lvy=`_pIr zJGXk=h4TOXNxbvE#5UgF|G08TmWfPHP310aEiEBov29W7e(y*;^Jx0T^XsN`&COi5 zM*X(Slph;&G;c6I7iV63`}{@5U-Z`>k{!6_^^|SQ!smNUVDzJ$p9umpLBGEng*H zxZab_cACzM{x>w)(%d!=?wXp5{68 z+`4&n>*u#$J)NAIoXq|{c+ztGr$*eIDKlNOZdnKFclGOO`=@CPqe|{{5>{=~V2Ku}zsAmz8U2S0MMRq+~VZR`_7#z)#qF8)r$zJNoHhVI0!HFNjc&gp2>baT<^Nb@#Xd?hV;->wM%)#?+buYCU@)|Bbf(&ElD#*gox zVXMx6ST{w$sJi&;wa10kO|vsz7C!r^bWbO1#_vzAV){$ecnwZx?r@4cJ#*4}=j(61 zKPk%{a?CM|=r6vU(ww(%S2sphbKO01qUcu6Yr~yWPOkd%>ds}O^uYTn@87-SYi*eR_QS7q zx4v^cCd24vzdXnzKYdKvi9v9Yc+O}<*!^Bn1=YM)cIxvJNg>7<}$dQ>|AOG^| zjxduaVl({GG@Cd6x0`$1($aE&o#(ae2;-!mck-Ps9%2pfk(4{ESGPnyYK<8WKmYdU z&hGB}{Z;Fm zS*k07=iqc%?oDhf6MmIUzZ`p2`oXi)lceO*m2A&u+h2a7$-ChDy7dniF1DV(*34V= zVm-@u`#GAIa*MlP)=yE?*Vk`vXqX{eQ}>N4ZZF4VPM1ac=4{rHiPgU}uB#rfPB|iT z!MBC2SW`^d&e}fzlf&k9FIC?@y0l^T6_xd_{V$`#A}tM#CVltn70i2QeRPr1hnDG+ zCM=J7b!O?>H9g;USykD~mV=Wkh#}3bbK;^^-|DXDMjz}izFa@aX7{|#XyH~?k=H!SlZrD> zUQqr$U#DC3?qime$l@!vmQGfP@Zs_C2~U5{W0&9mFv4it-9_A)3P;l(J8P`iz2WoO z&$Y~RkNixN`Ovzoj7R#Vv14MWu2r%9(fZUdv8+$Cx?i5O?R>oX&1L6X-d}^0xK?G< ze=q&}>HOAGtJCg9chZkJf9~o@V!0doyrQCFjfLPYJAT$C%U4&~{yMx`HD&n}x3l^h z9v%JD)nz0l50<_78pu0k`oxJFH~h%tN$Z+l{Hn!V`^nRzlg-kS)2_Kz)YQm`OMAb* z&417M_xL0td!zlmWpp9mY@^nJd;T*CkP99fnXPdnbsPV$_6S+Ogj zu=cNS<>RW;mm^n4E$urKoIO|DP)9(>wyJTvb=xYB%xLc|8BLF-a?fX)9vMZ7#t(zbCd-I!wL6u&8>_qY8S5hpIfPRss4=~ ztCY?6QyxFF=OjFHX8FTjWVlI7c*^%XslMf!Ehk==)NhnzXw{f~aH&(v7K!;+4;y_u zsP#a*{!x_6mFmdVw}1VTW6@cB-;KSBJ6SwEA!yqpp~z|LpK5ChwQaZHEhI9`*hCwe)eRW>HY-^i5lhKGywSS#`SANACNqYuD5lgk_pVl+K>B=>M5- zeJ#IL8G6sZO!)HakAXEuMci>${x>&nL^wJ&KEAi&_vOswmKWcyzB_R{G-&ztx05m_ z#)!>7E`O@!$;(f%Z+Gb~t6#d#Xi;FoyeYjs9<2P^7XJwKo|0=VcOpJrO?`2w_rrw? zH-7jKcKc2wOLyamKg~DqDfex$h~fOW_2|n21*Y#swom`YB^(H>uK#JKTlcj|J7I3Z z^0Xx!Z0nPyXY{0&1f@qSZV6fbZ>rYm%^&$L$lMLRWGfYY=XtKzRPJrry64(2vn~#w z=lJganuk|-{;9o<^Sw9n$bN5{k}=`I1Gi<%TITRIE)kO4^yZxV zW}i0Zi%V3wkMG*2f6nkxhJ{7Uv&&1=7krfvnSNdPPf<{iL)*2S?>lDBak=zz`ok&u z*RQ>K+yC&ue5MynY9|;h!WTGIecWsNCSCB+!-*oJgLF=$_Zz-9JdYY zl@GEgDl0PwA9%TeS=Mxhdh)wG-t}e;!B1po{#YGdbZODQs{Ed%vAZ26eos{Qb97|9 zu~g=N_vH2OZ{Li1ogk9_PXBe=hdNWgXl()RyA0(B3p{RN5 zvWbEFY*hIR1UC6L%q#l*>CvM{W_P|DAK};=`SPXm^h=rAANN|_Se0$PFO^~OJR@#y zZf8f=zb;Nr35fI71`fiTMf)O-R!08IL=1*UYij5-aLDq^yP^& z`(rM2T?xK0BgNTb8^7^RuNfuoGv~HV;8VY_g7HVxDj(li1LJRwAr1Q&>yFrLy0?1m zjo-IlmnS*-?^tKlxa!B!)E$cKa;rm1+@+Ky=V$H{{Czh-ilw)3GpFLcsH;!ctnhdL zTFrWOapC9eI-RTP?G>A6KGe6FXyUO;yFS}rzi*b+ySty-Ds&F(rx1 zDQeCqv~QMdI=6fA+2`%q%~^a^zdlO5?2flyy*f%nzL%MyNNw?g4y7mRAD$Lk&B)mh zXE>QVU&Z99sD_op-hlko?-)-0+1R`B_PxFzx0R(IMNK@LCb~k;Z~yK;%jVf7IX3tS z?fU%Gu(rTK>lgFhyfcvxS&j1+UYM8t=8+=%Q|AKph*Ns(&p&*WljYd{-CCT~S_0t2>I|URJ-pEIEJaI7koBqe>cx}CT zW>ZOSO>U{>+gGoCHJmWsxn+uwa4@gJ!pvpA57fU^<6Gdt_EpPv!Ku)P4UG*d&AXao z7c5o&Q&{!)K^xPld%H8)d4wu9?L5@<_b=Dtwi2=UW4awS94Cw~)&Kv|$@}EL!i0M7 zhX3}T_*QG~7STL)=!Dv>HLkX+9&hE-cVCim@99Oc?;>68?Z@T&zeTn4$7yVv%5%TV z;roHv0cUpYWjMkj%YL}=mB^XdOzjO1R2HxF3V-2##boD>yhB$iW)?bc+_FL7>d~YZ zr*_SZsi=Q*JK$r(%$bc#YCp31@;~4I_;=ZxcE;uGN?H$^Ke)d!-7!sFq#3|Fi!HlKS&d`o#YC|7G@e9_9N~U;O|1Wz%q7)vf9ix=k)9 zo>29l6D?9LxrnD@V*19q1wB&CqFt*zBjU!J$LMp&GEZ}0xlx|rt0?W_KyB{ z^U~%|%#OczyLR%;`&<6ln^TbE$bDT;!PInx+wGkbkFU&V7JqUo_}>!twokn~R?oi1 zyM#|r@yV}e%l0jFyc+2ca{JPyAg4!*uPJP3zNJ@FIbqk#$EW<5Ql89FJ}R$UT3Y&^ z!z7&H&D4og1wYl-dvFAt+Asa-%7yrUVYBkPm=p|RUv2L0mYKIbEIGU8K(*k61Iu}m zlaiM8J@X3Pa-TP^gYC`hc8|nFMTaF^=Ryud+lx%t*Jzm3vW+Lyneo;vx3!DTezp00 zAkLA|GP~*i?~mt87#E0dwUzrn<8!L(Q@JVGX6M3RmAxwct^Dcke>RttwJ%wY?JT`? z>FewHhi7gy`F3!hUDVyabccIK^=4^n9Fb9J`1$u8XA|qUHKEBSYnHvfn}1}^0w)d` zYdN=20iKo>pMPelv|KoT=0L-dX7~N-0uT25diIRnLEU?DJoC4g8*YEe&#%8J>$%H1 zda_dI!et9@-n(@v)9@I_eoLKGU9$I9zNuL9?0LO(;tQYW-{0<-zI1}0+NT|B-qiS> zJySC``10K?*+N{77xKys*s^lxT^1apC6O3#{#|s`kEcoil$vyVjFO zpXBrN-|Oa;+&|5e7jAa@tNfm`4JuVNH6afISo^*TzpCB$CN@T>Hf;Iw>^*Wa%hokF zH}CyncI;Tnzdstfx^Igox_cLJi>b425|f)B9-O}X-Dc0g`8tz@uiv^Nvg!HBYrmU+ zwksOkzPbK=or8+cq7M(kHA&+pXkJa_Kg&UNw! z4<7iVcK!Ox)xC`7EI+P)|C(68EFkUoC0>QuEon>T9UYZ|f;LFpUbSkKnwlEJ#8t1H zYguZ}?&_W*@?`eaXV0EJeY#XQyxP0__|Gcq-EV*WmRYu8M%t$;z88jRpML*}$?JTe zI73R3Rj5;2Yf;Ph?Kkq-zjyBXD3IbCu%LxWi*rVG#(%BSTNhfdrn#?pykx}*54-Ee zx--8YpYghFd&EVbro+3tj~||2%gk&T#hCD>s9M0{TK_%Y$sfO@Jx>nJ&CT7f?=fQr zx3Tf<-@khqj2J)9oHQ$Ib4>XTV;S}xVHqw*Zd?$!bgcZq{e1s$0nQ4Bx1Yma{!Ze| zNI1XSIBx#)W!2s+PIeA;(KBb7&g^-(Vd>V{egYeoeq@qjo{{@%_xpxYP5V<-JxL8U zGZ|~rn%;L#YjN3N#mmt=>DRAc69iU72lMy49}wQYef!1e$sMXomdx9BNV2Y&F=rar z#ZS^APhO?F9@SQm%3QJ1@fv&)my52x{axC< z)igUeIAKMu(nASV-3Irj4N6RgS#5lh3c&}qr9Ph+p3DC%ob|y=gnDBQMYd0=DvBmephXFrlW&!VVPa%#bx*3 z-urX-Owg;(HJSOR7ifxo`h6y?{CdUz8=wAM`Ss&URek$Zg(cgUJZ0Z7Km5Y?zcoHg zZ3&*|6TDryJL2_Oul~F`bz)=g?=wDT_WM0zz9ndQ=<$DFdPU^@rNt3hM+&C?cv4+e zuM~H0(`s#=IUKTczplQ|bogpphQ!0Al}=@STf@UmQw+lr=KRCRFN_l3Fc z&(c57&KcV9EI+kw+bXT)8w`>JzCPekJz&3g?OCqLd~A&8UY<`iwU&0g82IM=nMsr0 z&3(ApqHFs%v#y>})vrhOE5Cm9>|OFiBF?`=$;D&kNqd>OudBC-NJyBJmf9vJ+AmCg z(A2;qz!(`c@8Q!_Q?qL>3ojkMGeU z(c$6ujiL6ula9?ZyICAqyr7{WVdI|ub@6kj*(FBC{ycB@{)fKjIvuvKV<%^y&N|Zn z&1$WlRQ$fDre&qA!bav~=6S(71&j8@@85JL`qirY`MTGqmwr$@Qd7P)S>{gAg48n!Z`yje zE`DUuVwtwX;L-M3v!#DOiVRG6qouVpz9VAh^7Zdy9zK}!V8PplaQ5qNLQ7<4N=j|H z)48T~tKZ!(6%U&&u>wWo$)7A=kJCE9edBUZOBm! zzG9T_wRqL)b&HupT^v1MHZ%3BoD{OKIDYY?;i0oC4vdTcF|dA#j+%cd(Cz<&4cjKI z3o4IsS*DSbX=xk%`lR~S3l|TncX0i$bCmn;uPncOC1mZ23^s|@4vszT?(w3@$z0t>o~8XWpK$Q(Mup&GuF1)g zU%l>iR32n96Q3TPl3{LWczlx|Q^d|46L`}emOUX5HoCu93N#XDOL zAI_fL_dMG?{_EE-GuE2uMCzS*#5dvDon3Fvil{R1ZQU$9dxi(Ym9Ijo_vXcME}r#S zE8b#nvpq}jl&<>CCto~s{VKon&U&M|x=lGbPv%ccU{r17I$|ouon_K4eb zQdPNeXUMan9b!xj;Yxp#?8?b!8v?`1x*4aI$%Ows!OG-QtB!#bsb$*+~o@HOuM$e;rowM8KA8I zR=JBgw%^yYvVHo@Y12~2*3FGgJPHig_PhH^&785~h>6(m{~N!{CIqUS{XOUTT+8Qs z7AYwu76mvs1_-jK%m^q{QV1+#47^~RbZk!XInH96;%kR>*v{!Bi3xZ8%N8prP_2Jn zyZ`^^nmdhW&*k}-mR^m{FD>QIHfyn|Fy54Q_S@B2@8#YXrt~Z;srf9Ney#M?mLrG1 z1XWcXt@^6hr(<4o@=}j;dtTowdHa_&YwfDjT<+K!)m&M@dwT9{dF!%ur+#K!tNNOy z`Qa7Q>=hFZS1+#5EZY3*@DH=pmlysr%gvcpXqy<{K3CUgSyr%~&f05tk{iArG`%

diGs0$fkF_M zeo$(0erZv1YO#%ten3%va&T%%w0?k#n}U8wYDGybm%eL7iF-#Nb&WF(SSLsTCr=sPEtBdUA(^?U#kxWHxrurDAaR$};^d;tf|C3q1w)WWgTSE!mg3TP%PcA` zan49AQZO~p_eq4Z4Gqln!!uJ#GK!-WObtMGK}Zk_hE2^(6kynZ3nq$#CPUuH+(N;~ z+yay)@{;pYGV{{)!!z?7^NKTFVf^6Iq!Lg91jV)?B5*)qg&sEEK7qk5zR<97%Fjsw z`yVN2EI|Q`J!DKQafb{fTp%PCzmwr_6jQM12Zf8Vu`wCp0*-xXz<`1bEeOC|zr@^B zTnWj^DZe6G*W5rs*T~R9!PMAH!OX%q7SsYrFIF(&(swLQ24!_K3u7*Q=fnb!)XemZ z5|A1$eNaGyP@{MUi;;isr0N33o2u3ghy zaHgs_IjpSg+=|1nMbNyh^ng@V&DS(=Fc6bh`Nyug-V(h@)1w?%aLxeB+8PeW&RYW^Ua1R_ywI9)^ab_47{aYo29( zptORe%Awh00v{h^?;pzrEWHmbZ?u}29MG!xzgu5Yzfqf|=lgZ*3srg5S$~?JCQHeGYhTgz;KP<3OApS-I%K;gSfHZLZ$>=FdEGPI ziGKRgUU$5{Jd-;TV76BM?3Wk4S&fn_zPl{*j+vidHrebA(Yv~0-NX>Bo#kyNXCCa5{Q79$-6Kam*Oq->XU5qeuM*~J z2C6HeNg7%qfyzB-*1%gPU@t%+MS`ihg07K)v4V-Yse+lMA(kS+(h#Lc0C5pTf`KuP zBEj4ce~|z#3_yiIeqJg@831k`Ae8|iKGdVcmjPxL$Ynrk|7m~WK#^nb4NB6KSf@r! zJ&`Qtpx~OxX=ujc#A4FKlqpcdw07-VhnH9UD%(1m+zz*PO<}T2nkv*0AYc~KE9G;= zMU2Hf!6)X2`-z>U5jPAC_3q65Jh!;+ez}H-e7i=M*9zfVIhP(jUUYfY7OSETrIm#$ zy=EtUU3%t)EM53$*H)J`%QjloX+=%tajt&&Ebqn5=8UdMZ1U4P-{tiulvn(mvw2xt z%v`D_<#2L^FOs^f>(y7 ziHJf-=c)-}s>-}cN%@N_LYm_OwN_24`ncMh^Vx^sBAp$aKd-Q*Tu4w&TN|TpIPu@c zx}1kkuIp^OBekQZd2)in5i7S}at~71HRWW_mgOr>-k~ZK$>AQ>a`ah`$`3{JvlHhl zwx%{6;pfT=I%w*3X1BF)?T(qZ3pakt*y;>wDZo<2h%ebbSlo^aXewQ zAX2I7L$;@@V05(7`^nvYPp>~&nsH|nS6jr{Npm3_r2(=6a(%0 zC`e4sPAySLN=?tqvsHh;d%wCuW{RzPxT&v!Z-H}aMy5wqQEG6NUr2IQcCuxPy1gBj zjeTNDep0G#MPh+&8hEInSRu7I*;dIp$j40yq@cp8BDWwnwIorYA~z?m*s8)-9jwJF zuh?XbB{9OIa2z^661AUl9pz;gUtj^5OQvg| zP&G_^ees7%ZZ0UXCKmYmTDjyWm*%GCm3X=knG~oPdnw6qXBLze<$zOrO0s@xPAbSn z#rlSNhWhFXDalr8`9-;jCAR8`1qC^o$%!SI`FZ*UDQW6`2` zkY5BbFgUdk!pO&U~PRs$NY=syNr^Mot{L&l+=hT#<%;XqNh>>u!!FoYv z!%f5z`Cy?S7dJaD8+~vw0xDAMxD==asAmwOcumbqu~jbz6`mM_Frc9jXz2|r3^cHn z1)5y?;Ovx{p9ji!8ZK6#>}g6)(jXYEn(#r9ilWpsE&~Nab1qO(3Bd|xrl!WG3TX;ZF+(FW3k9&0LLN-a z)YQlXUChwPz!F2uz!XETfq|hZraEIxy~f7I80yT84ba7m4NNi3GcmysGco`T>VQ0g z@Q0zXIi^2M3^2ruj7%}yXKZ9)j_wu{15+e7mlP#t=A;&JfyTvxGpkY+49ykvgYxrB z6u_fF3i_UTY55AEBo@S_@9CltZR6zZXy|5Q;%ez+XyIgHU|?!w=2 - | | i<=4 - | | | -4-+-***--j<=4 - | *** -2-+-***--j>=2 - | | | -0-+-+-+--->i - | | | - 0 2 4 diff --git a/cloog-0.17.0/osl/doc/images/tree.eps b/cloog-0.17.0/osl/doc/images/tree.eps deleted file mode 100644 index d80f6e9..0000000 --- a/cloog-0.17.0/osl/doc/images/tree.eps +++ /dev/null @@ -1,258 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: tree.eps -%%Creator: fig2dev Version 3.2 Patchlevel 3c -%%CreationDate: Fri Sep 6 10:09:40 2002 -%%For: bastoul@whisky (Cedric Bastoul) -%%BoundingBox: 0 0 388 312 -%%Magnification: 1.0000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save -newpath 0 312 moveto 0 0 lineto 388 0 lineto 388 312 lineto closepath clip newpath --165.0 369.0 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def - /DrawEllipse { - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def - /savematrix mtrx currentmatrix def - x y tr xrad yrad sc 0 0 1 startangle endangle arc - closepath - savematrix setmatrix - } def - -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -%%Page: 1 1 -10 setmiterlimit - 0.06000 0.06000 sc -% -% Fig objects follow -% -7.500 slw -% Ellipse -n 5400 1200 237 237 0 360 DrawEllipse gs col0 s gr - -% Ellipse -n 3000 3600 237 237 0 360 DrawEllipse gs col0 s gr - -% Ellipse -n 7800 3600 237 237 0 360 DrawEllipse gs col0 s gr - -% Ellipse -n 6600 4800 237 237 0 360 DrawEllipse gs col0 s gr - -% Ellipse -n 5400 2325 237 237 0 360 DrawEllipse gs col0 s gr - -% Polyline -gs clippath -5355 2115 m 5445 2115 l 5445 1888 l 5400 2068 l 5355 1888 l cp -eoclip -n 5400 1425 m - 5400 2100 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 5355 1888 m 5400 2068 l 5445 1888 l 5355 1888 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -5355 3390 m 5445 3390 l 5445 3163 l 5400 3343 l 5355 3163 l cp -eoclip -n 5400 2550 m - 5400 3375 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 5355 3163 m 5400 3343 l 5445 3163 l 5355 3163 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -2955 4590 m 3045 4590 l 3045 4363 l 3000 4543 l 2955 4363 l cp -eoclip -n 3000 3825 m - 3000 4575 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 2955 4363 m 3000 4543 l 3045 4363 l 2955 4363 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -6563 4544 m 6611 4621 l 6803 4500 l 6627 4558 l 6755 4424 l cp -eoclip -n 7800 3825 m - 6600 4575 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 6755 4424 m 6627 4558 l 6803 4500 l 6755 4424 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -8988 4621 m 9036 4544 l 8844 4424 l 8973 4558 l 8796 4500 l cp -eoclip -n 7800 3825 m - 9000 4575 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 8796 4500 m 8973 4558 l 8844 4424 l 8796 4500 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -6555 5790 m 6645 5790 l 6645 5563 l 6600 5743 l 6555 5563 l cp -eoclip -n 6600 5025 m - 6600 5775 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 6555 5563 m 6600 5743 l 6645 5563 l 6555 5563 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -7802 3411 m 7831 3326 l 7615 3253 l 7772 3354 l 7587 3338 l cp -eoclip -n 5400 2550 m - 7803 3364 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 7587 3338 m 7772 3354 l 7615 3253 l 7587 3338 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -2971 3337 m 3000 3422 l 3215 3348 l 3031 3364 l 3186 3262 l cp -eoclip -n 5400 2550 m - 3000 3375 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 3186 3262 m 3031 3364 l 3215 3348 l 3186 3262 l cp gs 0.00 setgray ef gr col0 s -/Times-Roman ff 330.00 scf sf -3075 4200 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -6675 5400 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -5475 3000 m -gs 1 -1 sc (1) col0 sh gr -/Times-Roman ff 330.00 scf sf -3825 3000 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -6900 3000 m -gs 1 -1 sc (2) col0 sh gr -/Times-Roman ff 330.00 scf sf -6975 4200 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -8475 4200 m -gs 1 -1 sc (1) col0 sh gr -/Times-Roman ff 330.00 scf sf -5475 1800 m -gs 1 -1 sc (0) col0 sh gr -/Times-Roman ff 330.00 scf sf -2850 4950 m -gs 1 -1 sc (S1) col0 sh gr -/Times-Roman ff 330.00 scf sf -5250 3750 m -gs 1 -1 sc (S2) col0 sh gr -/Times-Roman ff 330.00 scf sf -6450 6150 m -gs 1 -1 sc (S3) col0 sh gr -/Times-Roman ff 330.00 scf sf -8850 4950 m -gs 1 -1 sc (S4) col0 sh gr -/Times-Roman ff 330.00 scf sf -5355 2430 m -gs 1 -1 sc (i) col0 sh gr -/Times-Roman ff 330.00 scf sf -2963 3667 m -gs 1 -1 sc (j) col0 sh gr -/Times-Roman ff 330.00 scf sf -7763 3675 m -gs 1 -1 sc (j) col0 sh gr -/Times-Roman ff 330.00 scf sf -6533 4890 m -gs 1 -1 sc (k) col0 sh gr -$F2psEnd -rs diff --git a/cloog-0.17.0/osl/doc/images/tree.fig b/cloog-0.17.0/osl/doc/images/tree.fig deleted file mode 100644 index 9c202bb..0000000 --- a/cloog-0.17.0/osl/doc/images/tree.fig +++ /dev/null @@ -1,54 +0,0 @@ -#FIG 3.2 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 5400 1200 237 237 5400 1200 5625 1275 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 3000 3600 237 237 3000 3600 3225 3675 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 7800 3600 237 237 7800 3600 8025 3675 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 6600 4800 237 237 6600 4800 6825 4875 -1 3 0 1 0 7 50 0 -1 0.000 1 0.0000 5400 2325 237 237 5400 2325 5625 2400 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 5400 1425 5400 2100 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 5400 2550 5400 3375 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 3000 3825 3000 4575 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 7800 3825 6600 4575 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 7800 3825 9000 4575 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 6600 5025 6600 5775 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 5400 2550 7803 3364 -2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 90.00 180.00 - 5400 2550 3000 3375 -4 0 0 50 0 0 22 0.0000 0 225 150 3075 4200 0\001 -4 0 0 50 0 0 22 0.0000 0 225 150 6675 5400 0\001 -4 0 0 50 0 0 22 0.0000 0 225 150 5475 3000 1\001 -4 0 0 50 0 0 22 0.0000 0 225 150 3825 3000 0\001 -4 0 0 50 0 0 22 0.0000 0 225 150 6900 3000 2\001 -4 0 0 50 0 0 22 0.0000 0 225 150 6975 4200 0\001 -4 0 0 50 0 0 22 0.0000 0 225 150 8475 4200 1\001 -4 0 0 50 0 0 22 0.0000 0 225 150 5475 1800 0\001 -4 0 0 50 0 0 22 0.0000 0 225 345 2850 4950 S1\001 -4 0 0 50 0 0 22 0.0000 0 225 345 5250 3750 S2\001 -4 0 0 50 0 0 22 0.0000 0 225 345 6450 6150 S3\001 -4 0 0 50 0 0 22 0.0000 0 225 345 8850 4950 S4\001 -4 0 0 50 0 0 22 0.0000 0 225 90 5355 2430 i\001 -4 0 0 50 0 0 22 0.0000 0 300 90 2963 3667 j\001 -4 0 0 50 0 0 22 0.0000 0 300 90 7763 3675 j\001 -4 0 0 50 0 0 22 0.0000 0 225 150 6533 4890 k\001 diff --git a/cloog-0.17.0/osl/doc/images/tree.jpg b/cloog-0.17.0/osl/doc/images/tree.jpg deleted file mode 100644 index 7329268b65736eafa7d05bbd39135092db60da2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13713 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 diff --git a/cloog-0.17.0/osl/doc/images/tree.pdf b/cloog-0.17.0/osl/doc/images/tree.pdf deleted file mode 100644 index 7569edebb461590b8208c320a8e109fd4a44c25c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4558 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 Qniv@vaH*=g`nz!f04+F%L;wH) diff --git a/cloog-0.17.0/osl/doc/images/tree.txt b/cloog-0.17.0/osl/doc/images/tree.txt deleted file mode 100644 index 7bcfef2..0000000 --- a/cloog-0.17.0/osl/doc/images/tree.txt +++ /dev/null @@ -1,25 +0,0 @@ - * - | - |0 - | - V - i - | - +-----+-----+ - | | | - |0 |1 |2 - | | | - V V V - j S2 j - | | - |0 +--+--+ - | | | - V |0 |1 - S1 | | - V V - k S4 - | - |0 - | - V - S3 diff --git a/cloog-0.17.0/osl/doc/openscop.info b/cloog-0.17.0/osl/doc/openscop.info deleted file mode 100644 index 9b7b391..0000000 --- a/cloog-0.17.0/osl/doc/openscop.info +++ /dev/null @@ -1,2873 +0,0 @@ -This is openscop.info, produced by makeinfo version 4.13 from -openscop.texi. - -This document describes OpenScop, a specification of a file format and -a set of data structures for polyhedral compilation tools to talk -together. It also describes briefly the OpenScop Library version -0.8.1, a Free Software that provides an example of OpenScop -implementation. - - It would be quite kind to refer at the present document in any -publication that results from the use of the OpenScop Library: - - @TechReport{Bas11, - author = {C\'edric Bastoul}, - title = {OpenScop: A Specification and a Library for Data - Exchange in Polyhedral Compilation Tools}, - month = {September}, - year = 2011, - institution = {Paris-Sud University, France} - } - - Copyright (C) 2011 Paris-Sud University and INRIA. - - Permission is granted to copy, distribute and/or modify this -document under the terms of the GNU Free Documentation License, Version -1.2 published by the Free Software Foundation; with no Invariant -Sections, with no Front-Cover Texts, and with no Back-Cover Texts. To -receive a copy of the GNU Free Documentation License, write to the Free -Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -02111-1307 USA. - - -File: openscop.info, Node: Top, Next: Introduction, Up: (dir) - -OpenSCop -******** - -This document describes OpenScop, a specification of a file format and -a set of data structures for polyhedral compilation tools to talk -together. It also describes briefly the OpenScop Library version -0.8.1, a Free Software that provides an example of OpenScop -implementation. - - It would be quite kind to refer at the present document in any -publication that results from the use of the OpenScop Library: - - @TechReport{Bas11, - author = {C\'edric Bastoul}, - title = {OpenScop: A Specification and a Library for Data - Exchange in Polyhedral Compilation Tools}, - month = {September}, - year = 2011, - institution = {Paris-Sud University, France} - } - - Copyright (C) 2011 Paris-Sud University and INRIA. - - Permission is granted to copy, distribute and/or modify this -document under the terms of the GNU Free Documentation License, Version -1.2 published by the Free Software Foundation; with no Invariant -Sections, with no Front-Cover Texts, and with no Back-Cover Texts. To -receive a copy of the GNU Free Documentation License, write to the Free -Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -02111-1307 USA. - -* Menu: - -* Introduction:: -* Polyhedral Representation:: -* OpenScop Specification:: -* OpenScop Library:: -* References:: - - -File: openscop.info, Node: Introduction, Next: Polyhedral Representation, Prev: Top, Up: Top - -1 Introduction -************** - -OpenScop is an open specification that defines a file format and a set -of data structures to represent a _static control part_ (SCoP for -short), i.e., a program part that can be represented in the _polyhedral -model_. The goal of OpenScop is to provide a common interface to -various polyhedral compilation tools in order to simplify their -interaction. - - Designing a single format for tools that have different purposes -(e.g., as different as code generation and data dependence analysis) may -sound strange at first. However we could observe that most available -polyhedral compilation tools during the last decade were manipulating -more or less the same kind of data (polyhedra, affine functions...) and -were actually sharing a part of their input (e.g., iteration domains and -context concepts are nearly everywhere). We could also observe that -those tools may rely on different internal representations, mostly -based on one of the major polyhedral libraries (e.g., Polylib, PPL or -isl), and this representation may change over time (e.g., when -switching to a more convenient polyhedral library). The OpenScop aim -is to provide a stable, unified format that offers a durable guarantee -that a tool can use an output or provide an input to another tool -without breaking a tool chain because of some internal changes in one -element of the chain. The other promise of OpenScop is the ability to -assemble or replace the basic blocks of a polyhedral compilation -framework at no, or at least low engineering cost. - - The policy that drives OpenScop can be summarized by these three -rules: - * Embed the _minimum_ information to build a complete polyhedral - compilation framework in the so-called _core part_ (to - avoid as much as possible empty or useless information for - each tool). - - * Provide a _very stable_ core part (so users have some - guarantee that they will not need to update their tool - because of frequent specification evolution), - - * Provide a _very flexible_ extension part (so it can also be - used to test wild new ideas). - -Another, more technical, rule may be added: - * Avoid any need for external library or tool to support it - (i.e., it's not XML or YAML or anything like that). - - The success of OpenScop in meeting its goals totally depends on its -acceptance by the tool developers (that have to support it in their -tools). To help them, we provide an example implementation: the -OpenScop Library. This library (and in particular its API) is not part -of the OpenScop specification (which includes only the file format and -the set of data structures). It is licensed under the 3-clause BSD -license so developers may feel free to use it in their code (either by -linking it or copy-pasting its code). This document also describes this -library briefly (readers are invited to read at its technical -documentation). The current version of the OpenScop Library is still -under evaluation, and there is no guarantee that the upward -compatibility will be respected, even if we do think so. A lot of -reports are necessary to freeze the library API. Thus you are very -welcome and encouraged to send reports on bugs, wishes, critics, -comments, suggestions or (please!) successful experiences to the -OpenScop mailing list . - - This document is organized as follows. First, we provide some -background on the polyhedral model and how it is used to represent and -to manipulate programs (*note Polyhedral Representation::). Next, we -describe the OpenScop specification, from the file format (*note -OpenScop File Format Specification::) to the data structures and the -OpenScop Library API (*note OpenScop Data Structure Specification::). -Finally we will detail how to install the OpenScop Library (*note -Installation::). - - -File: openscop.info, Node: Polyhedral Representation, Next: OpenScop Specification, Prev: Introduction, Up: Top - -2 Polyhedral Representation of Programs -*************************************** - -If you are reading at the OpenScop documentation, you probably don't -need any explanation about the polyhedral model. It is unlikely that -someone will read this paper by mistake. However some vicious advisor -may ask their poor engineers/interns/students to work for the very -first time on this exciting topic. Most papers on polyhedral -compilation are hard to read. Despite my efforts, mine are no exception -according to some reviewers. Hence I give there a new try to provide a -comprehensive explanation of the polyhedral model without the size and -style limits of a classical research paper. - - Be aware that to be able to understand the polyhedral model, there -are a few prerequisites. You should not read the following while you -still ignore what is: - * a `for' loop construction in C programs (`do' loops in FORTRAN are - OK too!), - - * an _affine expression_, - - * a _vector_, - - * a _matrix_, - - * a _matrix-vector multiply_. - If you do not know those concepts, please do some search and come -back afterwards. And if you are courageous enough, send me a few lines -that describe them so I can insert them here! - -* Menu: - -* Motivation:: -* Thinking in Polyhedra:: -* What's Next?:: - - -File: openscop.info, Node: Motivation, Next: Thinking in Polyhedra, Up: Polyhedral Representation - -2.1 Motivation: Program Transformations -======================================= - -A direct translation of high level programs written, e.g., in C, to -assembly then to object code is likely to produce (very) inefficient -applications. Architectures are quite complex, including several -levels of cache memory, many cores, deep pipelines, various number of -functional units, of registers etc. The list of such "architectural -features" is growing with each new generation of processors. To -achieve the best performance, the object program must use these -features in a smart way. Programmers use high level languages for -productivity and portability: typically they do not have to take care -of the target architecture but to ensure they write programs which -produce the right output. Hence, the problem of mapping the program to -the target architecture in the most efficient way is left to the -compiler. - - The compiler may see a high level program as a specification _of an -output_. The program is a list of instructions to be executed to -produce the output. As long as the output is guaranteed to be as the -programmer specified in his code, the compiler is free to modify the -program. For instance, let us imagine we are working on an -architecture with only three registers and we consider the following -statements written by a programmer: - - x = a + b; - y = c + d; - z = a * b; - - It is easy to see that we can reorder the three statements in any -way without modifying the semantics (no statement reads or writes a -variable that another statement writes). Because of the lack of -registers, the solutions such that the first and the third statements -are one after the other are better because `a' and `b' will be put in -the processor registers by one statement and can be reused directly by -the other one without reading from memory (this is called a _data -locality improving_ transformation). Hence a better statement order is, -e.g.: - - x = a + b; - z = a * b; // a and b are still in processor registers - y = c + d; - - We can also notice that it is possible to run the three statements in -parallel (possibly on different processors). The programmer may -explicit this in a way the compiler and/or the architecture is able to -understand. For instance, we can use OpenMP to describe parallelism -(this is called a _parallelizing_ transformation): - - #pragma omp parallel sections - { - #pragma omp section - { - x = a + b; - } - #pragma omp section - { - y = c + d; - } - #pragma omp section - { - z = a * b; - } - } - - However, the right way to optimize this program is probably a -tradeoff between these two techniques. This is true if, e.g., the target -architecture has some limitations to run too many operations in -parallel, or, like in our case, when some data may be reused by some -processors. Hence, the best optimization for our small example is -probably the following: - - #pragma omp parallel sections - { - #pragma omp section - { - x = a + b; - z = a * b; - } - #pragma omp section - { - y = c + d; - } - } - - This example is quite trivial because the statements are executed -only once. The real sport begins when we have to deal with loops, as we -will see momentarily. However, polyhedral compilation framework users -have to be conscious that we _need_ to transform programs to achieve -the best performance and that the best transformation that has to be -discovered (at the price of many, many efforts) and performed may be -quite complex. Hence the need of powerful model and tools. - - -File: openscop.info, Node: Thinking in Polyhedra, Next: What's Next?, Prev: Motivation, Up: Polyhedral Representation - -2.2 Thinking in Polyhedra -========================= - -Since the very first compilers, the internal representation of programs -is the _Abstract Syntax Tree_, or AST. In such representation, each -statement appears only once even if it is executed many times (e.g., -when it is enclosed inside a loop). This is a limitation for finding -and applying complex transformations: - * It limits program analysis power. For instance if a statement - _depends_ on another statement (i.e., they access the same - memory location and at least one of these accesses is a write), - we will consider both statements as unique entities while the - dependence relation may involve only few statement executions. - - * It limits program transformation power. Loop transformations - operate on statement executions. For instance, because they - consider all statement executions at the same time, present day - production compilers are not able to achieve loop fusion - (that tries to merge the loop bodies of two loops) if the loop - bounds of the two loops do not match (yes, that's - ridiculous). - - * It limits program manipulation flexibility. Trees are very - rigid data structures that are not easy to manipulate. - Program transformation may require very complex transformations - that will imply deep modifications of the control flow. - - The Polyhedral Model is a convenient alternative representation which -combines analysis power, expressiveness and high flexibility. The -drawback is it breaks the classical structure of programs that every -programmer is familiar with. It requires some (real) efforts to be -smoothly manipulated, but it definitely worth it. It is based on three -main concepts, _iteration domain_, _scattering function_ and _access -function_ that are described in depth in the following sections. - - A program part that can be represented using the Polyhedral Model is -called a *Static Control Part* or *SCoP* for short. - -* Menu: - -* Iteration Domain:: -* Scattering Function:: -* Access Function:: - - -File: openscop.info, Node: Iteration Domain, Next: Scattering Function, Up: Thinking in Polyhedra - -2.2.1 Iteration Domain ----------------------- - -The key aspect of the polyhedral model is to consider _statement -instances_. A statement instance is _one_ execution of a statement. A -statement outside a loop has only one instance while those inside loops -may have many. Let us consider the following code with two statements -`S1' and `S2': - - pi = 3.14; // S1 - for (i = 0; i < 5; i++) - A[i] = pi; // S2 - - The list of statement instances is the following (we just have to -fully unroll the loop): - - pi = 3.14; - A[0] = pi; - A[1] = pi; - A[2] = pi; - A[3] = pi; - A[4] = pi; - - Each instance of a statement which is enclosed inside a loop may be -referred thanks to its outer loop counters (or _iterators_). In the -polyhedral model we consider statements as functions of the outer loop -counters that may produce statement instances: instead of simply -"`S2'", we use preferably the notation `S2(i)'. For instance we -denote the statement instance `A[3] = pi;' of the previous example as -`S2(3)'. This means _instance of statement `S2' for_ `i = 3'. If a -statement `S3' is enclosed inside two loops of iterators `i' (outermost -loop) and `j' (innermost loop), we would denote it `S3(i,j)', and so on -with more enclosing loops. - - The ordered list of iterators (ordered from the outermost iterator -to the innermost iterator) is called the *iteration vector*. For -instance the iteration vector for `S3' is `(i,j)', for `S2' it is -`(i)', and for `S1' it is empty since it has no enclosing loop: `()'. A -more precise reading at the notation `S2(3)' would show that it denotes -the instance of statement `S2' for the iteration vector `(2)'. - - Obviously, dealing with statement instances does not mean we have to -unroll all loops. First because there would be probably too many -instances to deal with, and second because we probably just do not know -how many instances there are. For instance in the following loop it is -impossible to know (at compile time) how many times the statement `S3' -will be executed: - - for (i = 2; i <= N; i++) - for (j = 2; j <= N; j++) - A[i] = pi; // S3 - -Such a loop is said to be _parametric_: it depends on (at least) a -value called a _parameter_ which is not modified during the execution -of the whole loop, but is unknown at compile time. Here, the only -parameter is `N'. - - A compact way to represent all the instances of a given statement is -to consider the set of all possible values of its iteration vector. -This set is called the *iteration domain*. It can be conveniently -described thanks to all the constraints on the various iterators the -statement depends on. For instance, let us consider the statement `S3' -of the previous program. The iteration domain is the set of iteration -vectors `(i,j)'. Because of the parameter, we are not able to achieve a -precise list of all possible values. It would look like this: - - (2,2) (2,3) (2,4) ... (2,N) - (3,2) (3,3) (3,4) ... (3,N) - ... ... ... ... ... - (N,2) (N,3) (N,4) ... (N,N) - -A better way is to say it is the set of iteration vectors `(i,j)' such -that `i' is an integer greater or equal than 2 and lower or equal than -`N', and `j' is an integer greater or equal than 2 and lower or equal -than `N'. This may be written in the following mathematical form: - - D_S3 = {(i,j) in Z^2 | 2 <= i <= N && 2 <= j <= N } - -It is easy to see that this iteration domain is a part of the -2-dimensional space - Z^2. -We often use in our research papers a graphical representation that -gives a better view of this subspace: - -[image src="images/basic1.jpg" text=" j^ i>=2 i<=N - | | | - | | | -N-+-********--j<=N - | ******** - | ******** - | ******** -2-+-********--j>=2 - | | | -0-+-+------+--->i - | | | - 0 2 N -"] - -Here, the iteration domain is specified thanks to a set of constraints. -When those constraints are affine and depend only on the outer loop -counters and some parameters, the set of constraints defines a -_polyhedron_ (more precisely this is a _Z-polyhedron_, but we use -_polyhedron_ for short). Hence the _polyhedral model_! - - To manipulate a set of affine constraints easily, we rely on a matrix -representation. To write it, we use the _homogeneous_ iteration vector: -it is simply the iteration vector with some additional dimensions to -represent the parameters and the constant. For instance for the -statement `S3', the iteration vector in homogeneous coordinates is `(i, -j, N, 1)' (we will now call it _iteration vector_ directly for short). -Then we write all the constraints as affine inequalities of the form -_affine constraint_ ` >= 0'. For instance for the statement `S3' the -set of constraints is: - - i - 2 >= 0 - -i + N >= 0 - j - 2 >= 0 - -j + N >= 0 - -Lastly, we translate the constraint system to the form *domain matrix*` -* '_iteration vector_` >= 0': - - [ 1 0 0 -2 ] [ i ] [ 0 ] - [ -1 0 1 0 ] [ j ] [ 0 ] - [ 0 1 0 -2 ] * [ N ] >= [ 0 ] - [ 0 -1 1 0 ] [ 1 ] [ 0 ] - -*The domain matrix will be used in all our tools to provide the -information on the iteration domain of a given statement (the iteration -vector is in general an implicit information).* - - -File: openscop.info, Node: Scattering Function, Next: Access Function, Prev: Iteration Domain, Up: Thinking in Polyhedra - -2.2.2 Scattering Function -------------------------- - -There is no ordering information inside the iteration domain: it only -describes the set of statement instances but *not* the order in which -they have to be executed relatively to each other. In the past the -lexicographic order of the iteration domain was considered, this is no -more true (especially when using CLooG). If we do not provide any -ordering information, this means that the statement instances may be -executed in any order (this is useful, e.g., to specify parallelism). -However, some statement instances may depend on some others and it may -be critical to enforce a given order (or non-order). Hence we need -another information. - - We call _scattering_ any kind of ordering information in the -polyhedral model. There exists many kind of ordering, such as -_allocation_, _scheduling_, _chunking_ etc. They are all expressed in -the same way, i.e., using _logical stamps_, but they may have different -semantics. - - In the case of *scheduling*, the logical stamps are logical dates -that express at which date a statement instance has to be executed. For -instance, let us consider the following three statements: - - x = a + b; // S1 - y = c + d; // S2 - z = a * b; // S3 - -The scheduling of a statement `S' is typically denoted by T_S. Let us -consider the following logical dates for each statement: - - T_S1 = 1 - T_S2 = 2 - T_S3 = 3 - -It means that statement `S3' has to be executed at logical date `1', -statement `S1' has to be executed at logical date `2' and statement -`S2' has to be executed at logical date `3'. The target code has to -respect this scheduling (the order of the logical dates), hence it -would look like the following where the variable `t' denotes the time: - - t = 1; - z = a * b; // S3 - t = 2; - x = a + b; // S1 - t = 3; - y = c + d; // S2 - -When some statements share the same logical date, this means that, once -the program reaches this logical date, the two statements can be -executed in any order, or better, in parallel. For instance let us -consider the following scheduling: - - T_S1 = 1 - T_S2 = 2 - T_S3 = 1 - -Statements `S1' and `S3' have the same logical date, moreover, `S2' has -a greater logical date than `S1' and `S3'. Hence the target code would -be: - - t = 1; - #pragma omp parallel sections - { - #pragma omp section - { - x = a + b; // S1 - } - #pragma omp section - { - z = a * b; // S3 - } - } - t = 2; - y = c + d; // S2 - - Logical dates may be multidimensional, as clocks: the first dimension -may correspond to days (most significant), the next one to hours (less -significant), the third to minutes and so on. For instance we can -consider the following multidimensional schedules for our example: - - T_S1 = (1,1) - T_S2 = (2,1) - T_S3 = (1,2) - -It is not very hard to decypher the meaning of such scheduling. -Because of the first dimension, statements `S1' and `S3' will be -executed before statement `S2' (`S1' and `S3' are executed at day 1, -while `S2' is executed at day 2). The second dimension is not really -useful there for `S2' because it is the only statement executed at day -2. Nevertheless it allows to order `S1' and `S3' relatively to each -other since `S1' is executed at hour 1 of day 1 while `S3' is executed -at hour 2 of day 1. The corresponding target code is the following, -with some additional time variables for a better view of the ordering -(`t1' corresponds to the first time dimension, `t2' to the second one): - - t1 = 1; - t2 = 1; - x = a + b; // S1 - t2 = 2; - z = a * b; // S3 - t1 = 2; - t2 = 1; - y = c + d; // S2 - - In the case of *allocation* (in the literature we can find some -papers calling it _placement_), the logical stamp is a processor number -expressing on which processor a statement instance has to be executed. -Typically, allocations are written in the same way as scheduling. -Here, we denote it P_S for a statement `S'. For instance, let us -consider the following allocation: - - P_S1 = 1 - P_S2 = 2 - P_S3 = 1 - -The corresponding target code has to take into account that both -statements `S1' and `S3' have to be executed on the same processor -(they have the same logical number 1) and that statement `S2' has to be -executed on another processor (logical number 2). A possible target code -is the following: - - #pragma omp parallel sections - { - #pragma omp section - { - // Logical processor 1 - x = a + b; // S1 - z = a * b; // S3 - } - #pragma omp section - { - // Logical processor 2 - y = c + d; // S2 - } - } - -We can note that no order has been specified for the statements `S1' -and `S3' that are executed on the same processor. Hence any order is -satisfying. For sake of flexibility, it is usual to build a scattering -whose various dimensions do not have the same semantics. A typical -construction is _space/time mapping_ where the first `n' dimensions are -devoted to allocation, then the last `m' dimensions are devoted to -scheduling. Typically, space/time mapping is written in the same way as -scheduling. Here we denote it M_S for a statement `S'. For instance, -let us consider the following space/time mapping for our example where -one dimension is devoted to mapping and one dimension is devoted to -scheduling: - - M_S1 = (1,2) - M_S2 = (2,1) - M_S3 = (1,1) - -Here we have the same first dimension as the previous example, thus the -allocation of the statements to processors is the same. The second -dimension precises on a given processor at which logical date a -statement instance has to be executed. Here, the statement `S1' is -executed at day 2 on processor 1 while the statement `S3' is executed -at day 1 onto the same processor. It follows this space/time mapping -corresponds to the following target code (we added an additional -variable to represent the local logical clocks): - - #pragma omp parallel sections - { - #pragma omp section - { - // Logical processor 1 - t = 1; - z = a * b; // S3 - t = 2; - x = a + b; // S1 - } - #pragma omp section - { - // Logical processor 2 - t = 1; - y = c + d; // S2 - } - } - - For the same reason as discussed for iteration domains (*note -Iteration Domain::), it is not possible to define a scattering for each -statement instance, especially if the statement belongs to a (possibly -parametric) loop. The iteration vector fully defines an instance of a -given statement. Thus, a practical way to provide a scattering for each -instance of a given statement is to use a _function_ that depends on -the iteration vector. In this way the function may associate to each -iteration vector a different scattering. We call these functions -*scattering functions*. Scattering functions are _affine_ functions of -the outer loop counter and the global parameters. For instance, let us -consider the following source code: - - for (i = 2; i <= 4; i++) - for (j = 2; j <= 4; j++) - P[i+j] += A[i] + B[j]; // S4 - -The iteration domain of the statement `S4' is: - - D_S4= {(i,j) in Z^2 | 2 <= i <= 4 && 2 <= j <= 4 }. - -If you are still not comfortable with the mathematical notation, it -corresponds to the following graphical representation: - -[image src="images/basic2.jpg" text=" j^ i>=2 - | | i<=4 - | | | -4-+-***--j<=4 - | *** -2-+-***--j>=2 - | | | -0-+-+-+--->i - | | | - 0 2 4 -"] - -The list of the statement instances of `S4' (the integer points of its -iteration domain) corresponds to the following iteration vectors: - - iteration vector - (2,2) - (2,3) - (2,4) - (3,2) - (3,3) - (3,4) - (4,2) - (4,3) - (4,4) - -Let us suppose we want to schedule the instances of the statement `S4' -(the integer points of its iteration domain) using the following -scheduling function: - - T_S4(i,j) = (j+2,3*i+j) - -We only need to apply the function to each iteration vector to find the -logical date of each instance: - - iteration vector logical date - (2,2) --> (4,8) - (2,3) --> (5,9) - (2,4) --> (6,10) - (3,2) --> (4,11) - (3,3) --> (5,12) - (3,4) --> (6,13) - (4,2) --> (4,14) - (4,3) --> (5,15) - (4,4) --> (6,16) - - The polyhedral model users do not have to take care about the -generation of a target code that respects the scattering: the CLooG(1) -tool is there to solve the problem quite easily. For the previous -example, the target code would be the following (`t1' and `t2' -correspond to the two dimensions of the logical date, the reader may -take care that this code actually implements the scattering function): - - for (t1 = 4; t1 <= 6; t1++) { - for (t2 = t1+4; t2 <= t1+10; t2++) { - if ((-t1+t2+2)%3 == 0) { - i = (-t1+t2+2)/3 ; - j = t1-2 ; - P[i+j] += A[i] + B[j]; // S4 - } - } - } - - Obviously with such a twisted scheduling, it is hard to see the -"meaning" of the transformation. To name any kind of program -transformation as a magic spell ("tile", "fuse", "skew"...) is an old -bad habit which is not relevant anymore in the polyhedral model: a -scheduling may be an arbitrary complex sequence of basic-old-good -transformations. Nevertheless it is most of the time quite easy to -translate well known transformations to schedules. For instance, let -us consider this new scheduling function: - - T_S4(i,j) = (j,i) - -Using CLooG, we can generate the target code: - - for (t1 = 2; t1 <= 4; t1++) { - for (t2 = 2; t2 <= 4; t2++) { - i = t2; - j = t1; - P[i+j] += A[i] + B[j]; // S4 - } - } - -It is easy to see (and analyze) that it corresponds to a classical -_loop interchange_ transformation. - - A very useful example of multi-dimensional scattering functions is -the *scheduling of the original program*. The method to compute it is -quite simple (*note Fea92::). The idea is to build an abstract syntax -tree of the program and to read the scheduling for each statement. For -instance, let us consider the following implementation of a Cholesky -factorization: - - /* A Cholesky factorization kernel. */ - for (i=1;i<=N;i++) { - for (j=1;j<=i-1;j++) { - a[i][i] -= a[i][j] ; // S1 - } - a[i][i] = sqrt(a[i][i]) ; // S2 - for (j=i+1;j<=N;j++) { - for (k=1;k<=i-1;k++) { - a[j][i] -= a[j][k]*a[i][k] ; // S3 - } - a[j][i] /= a[i][i] ; // S4 - } - } - } - -The corresponding abstract syntax tree is shown in the following -figure. It directly gives the scattering functions (schedules) for all -the statements of the program (just follow the paths). - -[image src="images/tree.jpg" text=" * - | - |0 - | - V - i - | - +-----+-----+ - | | | - |0 |1 |2 - | | | - V V V - j S2 j - | | - |0 +--+--+ - | | | - V |0 |1 - S1 | | - V V - k S4 - | - |0 - | - V - S3 -"] - - T_S1(i,j) = (0,i,0,j,0) - T_S2(i) = (0,i,1) - T_S3(i,j,k) = (0,i,2,j,0,k,0) - T_S4(i,j) = (0,i,2,j,1) - -These schedules depend on the iterators and give for each instance of -each statement a unique execution date. Using such scattering functions -allows CLooG to re-generate the input code. - -To easily manipulate the scattering function of any statement `S', we -translate it to the matrix form: T_S(_iteration vector_) ` = -'*scattering matrix*` * '_iteration vector_. For instance let us -consider again our previous example T_S4(i,j) = (j+2,3*i+j). We write -it in the following way: - [ i ] [ 0 1 2 ] [ i ] - T_S4([ j ]) = [ 3 1 0 ] * [ j ] - [ 1 ] [ 1 ] - -*The scattering matrix will be used in all our tools to provide the -information on the scattering of a given statement (the iteration -vector is in general an implicit information).* - - ---------- Footnotes ---------- - - (1) `http://www.cloog.org' - - -File: openscop.info, Node: Access Function, Prev: Scattering Function, Up: Thinking in Polyhedra - -2.2.3 Access Function ---------------------- - -Before applying any transformation, it is essential to deeply analyze -both the original program and the transformation to ensure the -transformation does not imply any modification of the original program -semantics. In the polyhedral model, we are able to achieve an exact -analysis when all the memory accesses are made through arrays (note -that variables are a particular case of arrays since they are simply -arrays with only one memory location) with affine subscripts that depend -on outer loop counters and global parameters (note that _subscripts_ -are sometimes called _index_ or _accesses_ in the literature). - - For instance let us consider the array access `A[2*i+j][j][i+N]'. It -has three dimensions, each subscript dimension is an affine form of -some outer loop iterarors (`i' and `j') and global parameters (`N') -hence it corresponds to an acceptable array access to be analyzed in the -polyhedral model. - - Each array access can target a different memory cell depending on the -statement instance, i.e., depending on the iteration vector. Thus we -use access functions (or subscript functions, or index functions, as you -prefer to call it) depending on the iteration vector to describe an -array access. In our example, the access function would be written -F_A(i, j) = (2*i+j, j, i+N). - -To easily manipulate the access function of any array `A', we translate -it to the matrix form: F_A(_iteration vector_) ` = '*access matrix*` * -'_iteration vector_. For instance let us consider again our previous -example. We would write it in the following way: - [ i ] [ 2 1 0 0 ] [ i ] - F_A([ j ]) = [ 0 1 0 0 ] * [ j ] - [ N ] [ 1 0 1 0 ] [ N ] - [ 1 ] [ 1 ] - -*The access matrix will be used in all our tools to provide the -information on the access of a given statement (the iteration vector is -in general an implicit information).* - - -File: openscop.info, Node: What's Next?, Prev: Thinking in Polyhedra, Up: Polyhedral Representation - -2.3 What's Next? -================ - -OK, now you have an idea about how we do represent a program part in the -polyhedral model. You know the three main concepts, namely: domain, -scattering and access. What can you do with this?! Well, pretty much -anything related to code restructuring! The core idea will be to rely -on the mathematical representation to extract useful information about -your code (data reuse, parallelism...) and to generate a scattering to -benefit from the properties you analysed. However, OpenScop's -documentation is not the right place to learn at this (OpenScop is all -about representation, not about manipulation). Probably it is the right -time for you to have a look at: - * PoCC `http://pocc.sourceforge.net' - - * Pluto `http://pluto-compiler.sourceforge.net' - -Have fun :-) ! - - -File: openscop.info, Node: OpenScop Specification, Next: OpenScop Library, Prev: Polyhedral Representation, Up: Top - -3 OpenScop Specification -************************ - -OpenScop provides an explicit polyhedral representation of a static -control part. It has been designed by various polyhedral compilation -tool writers from various institutions. It builds on previous popular -polyhedral file and data structure formats (such as _.cloog_ and CLooG -data structures) to provide a unique, extensible format to most -polyhedral compilation tools. It is composed of two parts. The first -part, the so-called _core part_, is devoted to the polyhedral -representation of a SCoP. It contains what is strictly necessary to -build a complete source-to-source framework in the polyhedral model and -to output a semantically equivalent code for the SCoP, from analysis to -code generation. The second part of the format, the so-called -_extension part_, contains extensions to provide additional -informations to some tools. - -* Menu: - -* Preliminary Example:: -* OpenScop File Format Specification:: -* OpenScop Data Structure Specification:: -* Extensions:: -* History:: - - -File: openscop.info, Node: Preliminary Example, Next: OpenScop File Format Specification, Up: OpenScop Specification - -3.1 Preliminary Example -======================= - -OpenScop is a specification for representing static control program -parts in the polyhedral model. Thus, we can translate some code parts -to an equivalent OpenScop representation. As an example, let us -consider the following matrix-multiply kernel: - - #pragma scop - if (N > 0) { - for (i = 0; i < N; i++) { - for (j = 0; j < N; j++) { - C[i][j] = 0.0; - for (k = 0; k < N; k++) - C[i][j] = C[i][j] + A[i][k] * B[k][j]; - } - } - } - - The Clan(1) tool may be used to translate this code part to an -OpenScop representation automatically. The `#pragma scop' is used here -for Clan, but some other tool may not need it. Here is the result of the -translation to an OpenScop textual representation. - - - *DON'T PANIC* - -Explanations will follow and it is not as cryptic as it seems to be ! - - - - # =============================================== Global - # Backend Language - C - - # Context - CONTEXT - 1 3 0 0 0 1 - # e/i | N | 1 - 1 1 -1 ## N-1 >= 0 - - # Parameter names are provided - 1 - # Parameter names - - N - - - # Number of statements - 2 - - # =============================================== Statement 1 - # Number of relations describing the statement - 3 - - # ---------------------------------------------- 1.1 Domain - DOMAIN - 4 5 2 0 0 1 - # e/i | i j | N | 1 - 1 1 0 0 0 ## i >= 0 - 1 -1 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 ## j >= 0 - 1 0 -1 1 -1 ## -j+N-1 >= 0 - - # ---------------------------------------------- 1.2 Scattering - SCATTERING - 5 10 5 2 0 1 - # e/i| s1 s2 s3 s4 s5 | i j | N | 1 - 0 -1 0 0 0 0 0 0 0 0 ## s1 = 0 - 0 0 -1 0 0 0 1 0 0 0 ## s2 = i - 0 0 0 -1 0 0 0 0 0 0 ## s3 = 0 - 0 0 0 0 -1 0 0 1 0 0 ## s4 = j - 0 0 0 0 0 -1 0 0 0 0 ## s5 = 0 - - # ---------------------------------------------- 1.3 Access - WRITE - 3 8 3 2 0 1 - # e/i| Arr [1] [2] | i j | N | 1 - 0 -1 0 0 0 0 0 1 ## C - 0 0 -1 0 1 0 0 0 ## [i] - 0 0 0 -1 0 1 0 0 ## [j] - - # ---------------------------------------------- 1.4 Body - # Statement body is provided - 1 - # Statement body - - # Number of original iterators - 2 - # Original iterator names - i j - # Statement body expression - C[i][j] = 0.0; - - - # =============================================== Statement 2 - # Number of relations describing the statement - 5 - - # ---------------------------------------------- 2.1 Domain - DOMAIN - 6 6 3 0 0 1 - # e/i| i j k | N | 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 0 ## j >= 0 - 1 0 -1 0 1 -1 ## -j+N-1 >= 0 - 1 0 0 1 0 0 ## k >= 0 - 1 0 0 -1 1 -1 ## -k+N-1 >= 0 - - # ---------------------------------------------- 2.2 Scattering - SCATTERING - 7 13 7 3 0 1 - # e/i| s1 s2 s3 s4 s5 s6 s7 | i j k | N | 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## s1 = 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## s2 = i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## s3 = 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 ## s4 = j - 0 0 0 0 0 -1 0 0 0 0 0 0 1 ## s5 = 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 ## s6 = k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## s7 = 0 - - # ---------------------------------------------- 2.3 Access - WRITE - 3 9 3 3 0 1 - # e/i| Arr [1] [2] | i j k | N | 1 - 0 -1 0 0 0 0 0 0 1 ## C - 0 0 -1 0 1 0 0 0 0 ## [i] - 0 0 0 -1 0 1 0 0 0 ## [j] - - READ - 3 9 3 3 0 1 - # e/i| Arr [1] [2] | i j k | N | 1 - 0 -1 0 0 0 0 0 0 1 ## C - 0 0 -1 0 1 0 0 0 0 ## [i] - 0 0 0 -1 0 1 0 0 0 ## [j] - - READ - 3 9 3 3 0 1 - # e/i| Arr [1] [2] | i j k | N | 1 - 0 -1 0 0 0 0 0 0 2 ## A - 0 0 -1 0 1 0 0 0 0 ## [i] - 0 0 0 -1 0 0 1 0 0 ## [k] - - READ - 3 9 3 3 0 1 - # e/i| Arr [1] [2] | i j k | N | 1 - 0 -1 0 0 0 0 0 0 3 ## B - 0 0 -1 0 0 0 1 0 0 ## [k] - 0 0 0 -1 0 1 0 0 0 ## [j] - - # ---------------------------------------------- 2.4 Body - # Statement body is provided - 1 - # Statement body - - # Number of original iterators - 3 - # Original iterator names - i j k - # Statement body expression - C[i][j] = C[i][j] + A[i][k] * B[k][j]; - - - # =============================================== Extensions - - May the power of the polyhedral model be with you. - - - - - We will not describe here precisely the structure and the components -of this output, this is described in depth in a further section (*note -OpenScop File Format Specification::). This format has been designed to -be a possible input or output file format of most of polyhedral -compilation tools. If you read the description of the polyhedral -representation of programs, you should already feel familiar with this -file format (*note Polyhedral Representation::). - - ---------- Footnotes ---------- - - (1) `http://www.lri.fr/~bastoul/development/clan/' - - -File: openscop.info, Node: OpenScop File Format Specification, Next: OpenScop Data Structure Specification, Prev: Preliminary Example, Up: OpenScop Specification - -3.2 OpenScop File Format Specification -====================================== - -* Menu: - -* Relations:: -* Generics:: - - The following grammar describes the structure of the OpenScop file -format where terminals are preceeded by "_". Except stated otherwise, -there can be at most one terminal per line in the file. Moreover, each -line may finish with a comment, starting by the `#' character. Each -relevant part will be explained in more details momentarily: - - OpenScop ::= Start_tag Data End_tag - Start_tag ::= "" - End_tag ::= "" - Data ::= Context Statements Extension_list - Context ::= Language Parameter_Domain Parameters - Statements ::= Nb_statements Statement_list - Statement_list ::= Statement Statement_list | (void) - Relation_list ::= _Relation Relation_list | (void) - Extension_list ::= _Generic Extension_list | (void) - Statement ::= Statement_relations Body - Body ::= "0" | "1" Body_information - Parameters ::= "0" | "1" Parameter_information - Statement_relations ::= Nb_relations Relation_List - Parameter_domain ::= _Relation - Language ::= _String - Nb_Relations ::= _Integer - Parameter_information ::= _Generic - Body_information ::= _Generic - - The `Context' and the `Statements' parts compose the _core part_, -i.e., what is strictly necessary to build a complete source to source -framework based on OpenSCop: - * `Context' represents the global information of the SCoP. It - consists on the target language, the global constraints on the - parameters and optionally the parameter information which may be - necessary for the code generation process. The constraints - on the parameters are represented as a relation (*note - Context Domain Relation::). The parameter information is - optional. It is preceded by a boolean which precises - whether it is provided or not. It is a generic information - (*note Generics::), a `strings' (*note Strings Generic::) - for instance. - - * `Statements' represents the information about the statements. - `Nb_statements' is the number of statements in the SCoP, - i.e. the number of `Statement' items in the `Statement_list'. - `Statement' represents the information on a given statement. - To each statement is associated a list of relations and, - optionaly, a body. The list of relations may include one - iteration domain (*note Iteration Domain Relation::), one - scattering relation (*note Scattering Relation::) and - several access relations (*note Access Relation::). There - is no mandatory ordering, but for consistency reason it would - be much appreciated that iteration domain comes first (if present) - then scattering (if present), then accesses (if present). - The statement body is an optional information. It is preceded - by a boolean which precises whether it is provided or not. - It is a generic information (*note Generics::), a `body' - (*note Body Generic::) for instance. - - The `Extension_list' represents the _extension part_ and may contain -an arbitrary number of generic informations (*note Generics::). Few -examples of possible extensions are presented in a further section -(*note Extensions::). - - As shown by the grammar, the input file describes the various pieces -of information based on strings, integers, _relations_ and _generics_. -Relations and Generics are specific to OpenScop and are described in -depth in the following Sections (*note Relations:: and *note -Generics::). - - -File: openscop.info, Node: Relations, Next: Generics, Up: OpenScop File Format Specification - -3.2.1 Relations ---------------- - -* Menu: - -* Iteration Domain Relation:: -* Context Domain Relation:: -* Scattering Relation:: -* Access Relation:: - - _Relations_ are the essence of the OpenScop format and contain the -"polyhedral" information. They are used to describe either an iteration -domain, or a context domain, or a scattering or a memory access. - - We use the relation term as a shortcut to denote a union of convex -relations, each element of the union being described by a set of -constraints in an extended PolyLib format (*note Wil93::). The number -of elements in the union is given by an integer on the first line, -optionally followed by a comment starting with `#'. This number of -elements can be omitted when there is only one element. Each element -in the union has the following syntax: - - 1. Some optional comment lines beginning with `#'. - - 2. A line with the type of the relation, possibly followed by - comments. The type can be one of the following: - * `UNDEFINED': generic relation, - - * `CONTEXT': for context information, - - * `DOMAIN': for iteration domains, - - * `SCATTERING': for scattering relation, - - * `READ': for read accesses, - - * `WRITE': for write accesses, - - * `MAY_WRITE': for may-write accesses, - - 3. A line with 6 numbers, possibly followed by comments: - 1. the number of rows of the constraint matrix, - - 2. the number of columns of the constraint matrix, - - 3. the number of _output dimensions_, - - 4. the number of _input dimension_, - - 5. the number of _local dimensions_ (existentially - quantified dimensions), - - 6. the number of _parameters_. - The sum of the last four numbers should be equal to the - number of columns minus two. The remaining two columns are - the equality/inequality indicator and the constant term. The - number of parameters should be the same for all relations in - the entire OpenScop file or data structure. - - 4. The constraint rows. Each row corresponds to a constraint the - relation has to satisfy. Each row must be on a single line and is - possibly followed by comments. The constraint is an equality - p(x) = 0 if the first element is 0, an inequality p(x) \geq - 0 if the first element is 1. The next elements are the - coefficients of the output dimensions, followed by - coefficients of the input dimensions, the existentially - quantified dimensions and finally the parameters. The last - element is the constant term. - - This representation is the basis for several purposes. Examples for -iteration domains (*note Iteration Domain Relation::), context domains -(*note Context Domain Relation::), scattering relations (*note -Scattering Relation::) and access relations (*note Access Relation::) -are provided in further sections. - - -File: openscop.info, Node: Iteration Domain Relation, Next: Context Domain Relation, Up: Relations - -3.2.1.1 Iteration Domain Relation -................................. - -Iteration domain represents the set of instances of the corresponding -statement. OpenScop iteration domains are represented as relations -with the following conventions: - * the type is `DOMAIN', - - * there is 0 input dimension, - - * loop iterators correspond to output dimensions. - -For instance, assuming that `i', `j' and `k' are the loop iterators and -`M' and `N' are the parameters, the domain defined by the following -constraints : - - -i + M >= 0 - -j + N >= 0 - i + j - k >= 0 - -can be written in the input file as follows: - - # This is an iteration domain - DOMAIN - 1 # Number of relations in the union - 3 7 3 0 0 2 # 3 rows, 7 cols: 3 output dims and 2 params - # e/i| i j k | M N | 1 - 1 -1 0 0 1 0 0 # -i + M >= 0 - 1 0 -1 0 0 1 0 # -j + N >= 0 - 1 1 1 -1 0 0 0 # i + j - k >= 0 - -Equivalently, it can be written in the following way as the number of -relations in the union can be omitted if it is 1: - - # This is an iteration domain - DOMAIN - 3 7 3 0 0 2 # 3 rows, 7 cols: 3 output dims and 2 params - # e/i| i j k | M N | 1 - 1 -1 0 0 1 0 0 # -i + M >= 0 - 1 0 -1 0 0 1 0 # -j + N >= 0 - 1 1 1 -1 0 0 0 # i + j - k >= 0 - -As an example for unions, let us consider the following pseudo-code: - - for (i = 1; i <= N; i++) { - if ((i >= M) || (i <= 2*M)) - S1(i); - } - -The iteration domain of `S1' can be divided into two relations and -written in the OpenScop file as follows: - - # This is an iteration domain - DOMAIN - 2 # Number of relations in the union - # Union part No.1 - 3 5 1 0 0 2 # 3 rows, 5 cols: 1 output dim and 2 params - # e/i| i | M N | 1 - 1 1 0 0 -1 # i >= 1 - 1 -1 0 1 0 # i <= N - 1 1 -1 0 0 # i >= M - # Union part No.2 - 3 5 1 0 0 2 # 3 rows, 5 cols: 1 output dim and 2 params - # e/i| i | M N | 1 - 1 1 0 0 -1 # i >= 1 - 1 -1 0 1 0 # i <= N - 1 -1 2 0 0 # i <= 2*M - -As an example for local dimensions (existentially quantified -dimensions), let us consider the following pseudo-code: - - for (i = 1; i <= N; i++) { - if ((i % 2) == 0) - S1(i); - } - -The iteration domain of `S1' is composed of all even integer values -between 1 and N. The "divisible by two" constraint can be expressed as -follows: there exists an integer `ld' such that `i = 2*ld'. We encode -this thanks to a new local dimension: - - # This is an iteration domain - DOMAIN - 3 5 1 0 1 1 # 3 rows, 5 cols: 1 output dim, 1 local dim, 1 param - # e/i| i |ld | N | 1 - 0 1 -2 0 0 # i = 2*ld - 1 1 0 0 1 # i >= 1 - 1 -1 0 1 0 # i <= N - - -File: openscop.info, Node: Context Domain Relation, Next: Scattering Relation, Prev: Iteration Domain Relation, Up: Relations - -3.2.1.2 Context Domain Relation -............................... - -The context domain is a particular case of iteration domain (*note -Iteration Domain Relation::) where there are only constraints about -parameters (no loop iterators). Hence it is the same as an iteration -domain, with the following conventions: - * the type is `CONTEXT', - - * there is 0 input dimension, - - * there is 0 output dimension. - - -File: openscop.info, Node: Scattering Relation, Next: Access Relation, Prev: Context Domain Relation, Up: Relations - -3.2.1.3 Scattering Relation -........................... - -Scattering relation maps an iteration domain to a logical time and/or -space (and/or) anything. OpenScop scattering information is -represented as relations (*note Relations::) with the following -conventions: - - * the type is `SCATTERING', - - * output dimensions correspond to scattering dimensions, - - * loop iterators correspond to input dimensions. - - As an example of a scattering relation and assuming that `i', `j' -and `k' are the loop iterators and `M' and `N' are the parameters, take -for instance: - T_{S}(i,j,k) = (j+2,3*i+j,k+N+1). - We can represent it in the following way: - - # A scattering relation - SCATTERING - # 3 rows, 10 columns: 3 scattering dimensions, 3 iterators, 2 parameters - 3 10 3 3 0 2 - # e/i|s1 s2 s3 | i j k | M N | 1 - 0 -1 0 0 0 1 0 0 0 2 # s1 = j+2 - 0 0 -1 0 3 1 0 0 0 0 # s2 = 3*i+j - 0 0 0 -1 0 0 1 0 1 1 # s3 = k+N+1 - - -File: openscop.info, Node: Access Relation, Prev: Scattering Relation, Up: Relations - -3.2.1.4 Access Relation -....................... - -Access relation maps an iteration domain to an array space. Each array -accessed in the SCoP has a unique identification number. OpenScop -relation information is represented as relations (*note Relations::) -with the following conventions: - - * the type is one of the following: - * `READ', for read accesses, - - * `WRITE', for write accesses, - - * `MAY_WRITE', for may write accesses, - - * output dimensions correspond to the array identifier and - dimensions, - - * the first output dimension corresponds to the array identifier, - - * the (i+1)th output dimension corresponds to the ith array - dimension (i>1), - - * loop iterators correspond to input dimensions. - - As an example of a scattering relation and assuming that `i', `j' -and `k' are the loop iterators and `M' and `N' are the parameters, let -us consider the array access `A[2*i+j][j][i+N]' (the identifier of `A' -is 42), and let us suppose this is a read access. Its representation -would be the following: - - # A read access relation - READ - # 4 rows, 11 columns: 4 array dimensions, 3 iterators, 2 parameters - 4 11 4 3 0 2 - # e/i|Arr [1] [2] [3]| i j k | M N | 1 - 0 -1 0 0 0 0 0 0 0 0 42 # A - 0 0 -1 0 0 2 1 0 0 0 0 # [2*i+j] - 0 0 0 -1 0 0 1 0 0 0 0 # [j] - 0 0 0 0 -1 1 0 0 0 1 0 # [i+N] - - To understand this representation, consider that OpenScop accesses -are general memory accesses and not array accesses. The memory is seen -as a big array `Mem' while usual array names correspond to the first -dimension. Hence our example translates to `Mem[42][2*i+j][j][i+N]'. - - Unions of access relations are allowed. In this case, each union -part must refer at the same array identifier, and the number of -dimensions must be consistent. - - -File: openscop.info, Node: Generics, Prev: Relations, Up: OpenScop File Format Specification - -3.2.2 Generics --------------- - -* Menu: - -* Strings Generic:: -* Body Generic:: - - _Generics_ represent any elaborated non-polyhedral information in the -OpenScop format. They are used to represent the parameter information, -the statement body information as well as the extensions. Each generic -information is delimited using XML-like tags corresponding to its URI -(Unique Resource Identifier), For instance, if the generic has the URI -`foo', the begin tag is `' and the end tag is `'). - - Two generics, namely `strings' (*note Strings Generic::) and `body' -(*note Body Generic::) are part of the OpenScop specification to -provide the minimum, stricly necessary information to build a complete -source-to-source polyhedral framework based on OpenScop. However, -generics can be basically _anything_ as long as they are properly -delimited. OpenScop implementations will simply ignore non-supported -generics and warn the user with the mention of the non-supported URIs. -Support of new generics will be added throught the extension mechanism. - - -File: openscop.info, Node: Strings Generic, Next: Body Generic, Up: Generics - -3.2.2.1 Strings Generic -....................... - -The purpose of the `strings' generic is to represent a list of textual -strings on one line (which may be used, e.g., to represent the list of -parameter names in the order used in the relation). Its URI is `strings' -and its file format respects the following grammar: - Strings_generic ::= "" Strings "" - Strings ::= _String String_list | (void) - -A possible example of textual `strings' is the following: - - Not one sentence but 6 strings! - - - -File: openscop.info, Node: Body Generic, Prev: Strings Generic, Up: Generics - -3.2.2.2 Body Generic -.................... - -The purpose of the `body' generic is to represent the textual -information about a statement. It contains the number of original -iterators on the first line, the list of original iterators on the -second line (the loop counters of the statement surrounding loops in -the original program) and the original textual body expression on the -third line. Its URI is `body' and its file format respects the -following grammar (the `String' rule is reused, *note Strings -Generic::): - Body_generic ::= "" Body "" - Body ::= Nb_iterators Iterator_list Expression - Nb_iterators ::= _Integer - Iterator_list ::= Strings - Expression ::= Strings - -A possible example of textual `body' is the following: - - # Number of original iterators - 2 - # Original iterators - i j - # Original statement expression - A[i+j] += B[i] * C[j]; - - - -File: openscop.info, Node: OpenScop Data Structure Specification, Next: Extensions, Prev: OpenScop File Format Specification, Up: OpenScop Specification - -3.3 OpenScop Data Structure Specification -========================================= - -* Menu: - -* osl_relation_t:: -* osl_relation_list_t:: -* osl_interface_t:: -* osl_generic_t:: -* osl_strings_t:: -* osl_body_t:: -* osl_statement_t:: -* osl_scop_t:: - - The OpenScop specification offers a small set of C data structures -devoted to represent a SCoP in memory in a convenient way. Using them -in some tool or library may greatly facilitate its interaction with -other tools or libraries which rely on this representation as well. -Every field may not be useful for a given tool or library. A general -rule for all the data structure is that a `NULL' pointer or a -1 -integer value means the information is not present. Contrary to -engineering time, memory is cheap today, so it's much probably not a -big deal that some fields are left empty. Every field may not be enough -for a given tool or library. In this case it is much recommended to -provide a new extension which may be reused by other users (*note -Extensions::). - - Each tool or library may have its own implementation of the OpenScop -data structures. The type names should not be the same as those provided -as an example here (they correspond to the OpenScop Library -implementation). The names of the fields, and their ordering, should -however be the same. In this way, the interaction between tools and -libraries should be as simple as a cast. - - Before reading at the OpenScop data structures, it is much -recommended to read at the OpenScop file format description, as it is -quite close to this representation (*note OpenScop File Format -Specification::). - - -File: openscop.info, Node: osl_relation_t, Next: osl_relation_list_t, Up: OpenScop Data Structure Specification - -3.3.1 osl_relation_t --------------------- - - struct osl_relation { - int type; /* What this relation is encoding */ - int precision; /* Precision of the matrix elements */ - int nb_rows; /* Number of rows */ - int nb_columns; /* Number of columns */ - int nb_output_dims; /* Number of output dimensions */ - int nb_input_dims; /* Number of input dimensions */ - int nb_local_dims; /* Number of local dimensions */ - int nb_parameters; /* Number of parameters */ - void ** m; /* Matrix of constraints */ - struct osl_relation * next; /* Next relation in the union */ - }; - typedef struct osl_relation osl_relation_t; - typedef struct osl_relation * osl_relation_p; - -The `osl_relation_t' structure stores a part of an union of relations. -A union of relation is a `NULL'-terminated linked list of union parts -(`next' field). The `type' field may provide some information about -what the relation is encoding: - * -1: undefined (`OSL_UNDEFINED'), - - * 2: context domain (`OSL_TYPE_CONTEXT'), - - * 3: iteration domain (`OSL_TYPE_DOMAIN'), - - * 4: scattering relation (`OSL_TYPE_SCATTERING'), - - * 6: read access relation (`OSL_TYPE_READ'), - - * 7: write access relation (`OSL_TYPE_WRITE'), - - * 8: may write access relation (`OSL_TYPE_MAY_WRITE'), - The various numbers provide the details on the relation itself -(*note Relations::) while the `m' field points to the constraint -matrix. The precision of the constraint matrix elements is provided by -the `precision' field. It can take the following values: - * 32: 32 bits precision, elements are `long int' - (`OSL_PRECISION_SP'), - - * 64: 64 bits precision, elements are `long long int' - (`OSL_PRECISION_DP'), - - * 0: multiple precision, elements are GNU GMP Library's - `mpz_t' (`OSL_PRECISION_MP'). - - -File: openscop.info, Node: osl_relation_list_t, Next: osl_interface_t, Prev: osl_relation_t, Up: OpenScop Data Structure Specification - -3.3.2 osl_relation_list_t -------------------------- - - struct osl_relation_list { - osl_relation_p elt; /* Element of the list */ - struct osl_relation_list * next; /* Next element of the list */ - }; - typedef struct osl_relation_list osl_relation_list_t; - typedef struct osl_relation_list * osl_relation_list_p; - -The `osl_relation_list_t' structure is a `NULL'-terminated linked list -of `osl_relation_t' data structures. `elt' is a relation element of -the list and `next' is the pointer to the next element of the list. - - -File: openscop.info, Node: osl_interface_t, Next: osl_generic_t, Prev: osl_relation_list_t, Up: OpenScop Data Structure Specification - -3.3.3 osl_interface_t ---------------------- - - typedef void (*osl_idump_f) (FILE *, void *, int); - typedef char * (*osl_sprint_f)(void *); - typedef void * (*osl_sread_f) (char *); - typedef void * (*osl_malloc_f)(); - typedef void (*osl_free_f) (void *); - typedef void * (*osl_clone_f) (void *); - typedef int (*osl_equal_f) (void *, void *); - - struct osl_interface { - char * URI; /* Unique interface identifier string */ - osl_idump_f idump; /* Pointer to the idump function */ - osl_sprint_f sprint; /* Pointer to the sprint function */ - osl_sread_f sread; /* Pointer to the sread function */ - osl_malloc_f malloc; /* Pointer to the malloc function */ - osl_free_f free; /* Pointer to the free function */ - osl_clone_f clone; /* Pointer to the clone function */ - osl_equal_f equal; /* Pointer to the equal function */ - struct osl_interface * next; /* Next interface in the list */ - }; - typedef struct osl_interface osl_interface_t; - typedef struct osl_interface * osl_interface_p; - -The `osl_interface_t' structure represents a node in a -`NULL'-terminated list of interfaces. Each node stores the _interface_ -of a generic OpenScop object, i.e., its unique name (`URI') and the -function pointers to all the base functions it has to provide. -Extension providers will find information relative to those functions -in the OpenScop Library description (*note Base Functions::) and the -section dedicated to writing extensions (*note Extension Development::). - - -File: openscop.info, Node: osl_generic_t, Next: osl_strings_t, Prev: osl_interface_t, Up: OpenScop Data Structure Specification - -3.3.4 osl_generic_t -------------------- - - struct osl_generic { - void * data; /* Pointer to some data */ - osl_interface_p interface; /* Interface to work with the data */ - struct osl_generic * next; /* Pointer to the next generic */ - }; - typedef struct osl_generic osl_generic_t; - typedef struct osl_generic * osl_generic_p; - -The `osl_generic_t' structure represents a node in a `NULL'-terminated -list of generic elements. It stores some data and operations with no -pre-defined type. The information is accessible through the `data' -pointer while the type and operations are accessible through the -`interface' pointer. It is used to represent data that are allowed to -differ in implementations, such as symbols and extensions. - - -File: openscop.info, Node: osl_strings_t, Next: osl_body_t, Prev: osl_generic_t, Up: OpenScop Data Structure Specification - -3.3.5 osl_strings_t -------------------- - - struct osl_string { - char ** string; /* NULL-terminated array of strings */ - }; - typedef struct osl_strings osl_strings_t; - typedef struct osl_strings * osl_strings_p; - -The `osl_strings_t' structure represents a NULL-terminated list of C -character strings. It is encapsulated into a structure to allow its -manipulation through a generic type. - - -File: openscop.info, Node: osl_body_t, Next: osl_statement_t, Prev: osl_strings_t, Up: OpenScop Data Structure Specification - -3.3.6 osl_body_t ----------------- - - struct osl_body { - osl_strings_p iterators; /* Original iterators */ - osl_strings_p expression; /* Original statement expression */ - }; - typedef struct osl_body osl_body_t; - typedef struct osl_body * osl_body_p; - -The `osl_body_t' structure stores a statement body in a textual form. -The complete original expression (directly copy-pasted from the -original code) is in the expression field while the textual forms of -the original iterators are in the iterators field. They may be used for -substitutions inside the expression. - - -File: openscop.info, Node: osl_statement_t, Next: osl_scop_t, Prev: osl_body_t, Up: OpenScop Data Structure Specification - -3.3.7 osl_statement_t ---------------------- - - struct osl_statement { - osl_relation_p domain; /* Iteration domain */ - osl_relation_p scattering; /* Scattering relation */ - osl_relation_list_p access; /* List of array access relations */ - osl_generic_p body; /* Original statement body */ - void * usr; /* A user-defined field */ - struct osl_statement * next; /* Next statement in the list */ - }; - typedef struct osl_statement osl_statement_t; - typedef struct osl_statement * osl_statement_p; - -The `osl_statement_t' structure represents a node in a -`NULL'-terminated linked list of statements. Each node contains the -useful information for a given statement to process it within a -polyhedral framework. The order in the list may matter for naming -conventions (e.g. "S1" for the first statement in the list). The -iteration domain and the scattering are represented using an -`osl_relation_p' structure while the accesses are using a list of -relations: one for each memory access in the statement. The `body' -field should provide information about the statement body (since it has -a generic type, the specification is not strict about how it is used), -e.g., using the `osl_body_t' data structure (*note osl_body_t::). It -is also possible to use the `usr' field, but it has to be totally -managed by the user. - - -File: openscop.info, Node: osl_scop_t, Prev: osl_statement_t, Up: OpenScop Data Structure Specification - -3.3.8 osl_scop_t ----------------- - - struct osl_scop { - int version; /* Version of the data structure */ - char * language; /* Target language */ - osl_relation_p context; /* Constraints on the parameters */ - osl_generic_p parameters; /* Information about parameters */ - osl_statement_p statement; /* Statement list */ - osl_interface_p registry; /* Registered extension interfaces */ - osl_generic_p extension; /* Extension list */ - void * usr; /* A user-defined field */ - struct osl_scop * next; /* Next scop in the list */ - }; - typedef struct osl_scop osl_scop_t; - typedef struct osl_scop * osl_scop_p; - -`osl_scop_t' represents a node in a `NULL'-terminated list of scops. It -stores the useful informations of a static control part of a program to -process it within a polyhedral framework. To prepare OpenScop -specification evolution, the `version' field tells the version of the -data structure. It should be set to 1 for now (and hopefully a very, -very, long time). First, it contains the informations about the -context. The target language in expressed in the `language' field. The -constraints on the global parameters are detailed in the `context' -field. The `paremeters' field should provide information about the -parameters (since it has a generic type, the specification is not strict -about how it is used), e.g., using the `osl_strings_t' data structure -(*note osl_strings_t::). Finally, it contains the list of statements -`statement', the list of registered interfaces for generic types -`registry' and the list of extentions `extension'. It is also possible -to use the `usr' field, but it has to be totally managed by the user. - - As an example, let us consider again the matrix multiply program -(*note Preliminary Example::). The next figure gives a possible -representation in memory for this SCoP thanks to the OpenScop data -structures (it has been actually printed by the `osl_scop_dump' -function), note that symbols like parameters, original iterators and -statement expression are represented with an `osl_strings_t' which does -not belong to the specification but to the OpenScop Library -implementation: - - +-- osl_scop_t - | | - | Version: 1 - | | - | Language: C - | | - | +-- osl_relation_t (CONTEXT, 32 bits) - | | 1 3 0 0 0 1 - | | [ 1 1 -1 ] - | | - | +-- osl_generic_t - | | | - | | +-- osl_interface_t: URI = strings - | | | - | | +-- osl_strings_t: N - | | | - | | - | +-- osl_statement_t (S1) - | | | - | | +-- osl_relation_t (DOMAIN, 32 bits) - | | | 4 5 2 0 0 1 - | | | [ 1 1 0 0 0 ] - | | | [ 1 -1 0 1 -1 ] - | | | [ 1 0 1 0 0 ] - | | | [ 1 0 -1 1 -1 ] - | | | - | | +-- osl_relation_t (SCATTERING, 32 bits) - | | | 5 10 5 2 0 1 - | | | [ 0 -1 0 0 0 0 0 0 0 0 ] - | | | [ 0 0 -1 0 0 0 1 0 0 0 ] - | | | [ 0 0 0 -1 0 0 0 0 0 0 ] - | | | [ 0 0 0 0 -1 0 0 1 0 0 ] - | | | [ 0 0 0 0 0 -1 0 0 0 0 ] - | | | - | | +-- osl_relation_list_t - | | | | - | | | +-- osl_relation_t (WRITE, 32 bits) - | | | | 3 8 3 2 0 1 - | | | | [ 0 -1 0 0 0 0 0 1 ] - | | | | [ 0 0 -1 0 1 0 0 0 ] - | | | | [ 0 0 0 -1 0 1 0 0 ] - | | | | - | | | - | | +-- osl_generic_t - | | | | - | | | +-- osl_interface_t: URI = body - | | | | - | | | +-- osl_strings_t: i j - | | | | - | | | +-- osl_strings_t: C[i][j] = 0.0; - | | | | - | | | - | | V - | | osl_statement_t (S2) - | | | - | | +-- osl_relation_t (DOMAIN, 32 bits) - | | | 6 6 3 0 0 1 - | | | [ 1 1 0 0 0 0 ] - | | | [ 1 -1 0 0 1 -1 ] - | | | [ 1 0 1 0 0 0 ] - | | | [ 1 0 -1 0 1 -1 ] - | | | [ 1 0 0 1 0 0 ] - | | | [ 1 0 0 -1 1 -1 ] - | | | - | | +-- osl_relation_t (SCATTERING, 32 bits) - | | | 7 13 7 3 0 1 - | | | [ 0 -1 0 0 0 0 0 0 0 0 0 0 0 ] - | | | [ 0 0 -1 0 0 0 0 0 1 0 0 0 0 ] - | | | [ 0 0 0 -1 0 0 0 0 0 0 0 0 0 ] - | | | [ 0 0 0 0 -1 0 0 0 0 1 0 0 0 ] - | | | [ 0 0 0 0 0 -1 0 0 0 0 0 0 1 ] - | | | [ 0 0 0 0 0 0 -1 0 0 0 1 0 0 ] - | | | [ 0 0 0 0 0 0 0 -1 0 0 0 0 0 ] - | | | - | | +-- osl_relation_list_t - | | | | - | | | +-- osl_relation_t (WRITE, 32 bits) - | | | | 3 9 3 3 0 1 - | | | | [ 0 -1 0 0 0 0 0 0 1 ] - | | | | [ 0 0 -1 0 1 0 0 0 0 ] - | | | | [ 0 0 0 -1 0 1 0 0 0 ] - | | | | - | | | V - | | | osl_relation_list_t - | | | | - | | | +-- osl_relation_t (READ, 32 bits) - | | | | 3 9 3 3 0 1 - | | | | [ 0 -1 0 0 0 0 0 0 1 ] - | | | | [ 0 0 -1 0 1 0 0 0 0 ] - | | | | [ 0 0 0 -1 0 1 0 0 0 ] - | | | | - | | | V - | | | osl_relation_list_t - | | | | - | | | +-- osl_relation_t (READ, 32 bits) - | | | | 3 9 3 3 0 1 - | | | | [ 0 -1 0 0 0 0 0 0 2 ] - | | | | [ 0 0 -1 0 1 0 0 0 0 ] - | | | | [ 0 0 0 -1 0 0 1 0 0 ] - | | | | - | | | V - | | | osl_relation_list_t - | | | | - | | | +-- osl_relation_t (READ, 32 bits) - | | | | 3 9 3 3 0 1 - | | | | [ 0 -1 0 0 0 0 0 0 3 ] - | | | | [ 0 0 -1 0 0 0 1 0 0 ] - | | | | [ 0 0 0 -1 0 1 0 0 0 ] - | | | | - | | | - | | +-- osl_generic_t - | | | | - | | | +-- osl_interface_t: URI = body - | | | | - | | | +-- osl_strings_t: i j k - | | | | - | | | +-- osl_strings_t: C[i][j] = C[i][j] + A[i][k]*B[k][j]; - | | | | - | | | - | | - | +-- NULL interface - | | - | +-- NULL generic - | | - | - - -File: openscop.info, Node: Extensions, Next: History, Prev: OpenScop Data Structure Specification, Up: OpenScop Specification - -3.4 Extensions -============== - -The core part of the OpenScop representation embeds what is strictly -necessary to build a complete source-to-source polyhedral framework. -However it may not be enough. Hence, OpenScop offers a very flexible -extension part. Actually, the only constraint to build an extension is -to request the OpenScop maintainer for a unique extension name: its URI -(ask the maintainer through the OpenScop mailing list -). - - The policy to support extensions is the following and is pretty -simple: an OpenScop implementation is not required to support any -extension. If it is processing an OpenScop file or data structure which -contains an extension which is not supported, it must (1) warn the user -with the mention of the URI of the non-supported extension and (2) -ignore this extension. - - Extensions in an OpenScop file are provided after the core part, -without any specific order. Each extension is delimited using XML-like -tags corresponding to its URI (e.g., if the extension has the URI -`foo', the begin tag is `' and the end tag is `'). There is -no specification or preferred way to write the extension body. -Extensions in an OpenScop data structure must be accessible through one -pointer. This pointer will be stored in the `data' field of an -`osl_generic_t' container (*note osl_generic_t::). There must be only -one extension with the same URI in an OpenScop file or data structure. - - Extension writers may write a short documentation about their -extension to be added to this document. For consistency reason, this -documentation should comply to the documentation of the `comment' -option (*note Comment Extension::). To describe the file format, it is -allowed to reuse the existing rules and terminals present in the -OpenScop file format description without defining them (*note OpenScop -File Format Specification::). By sending a documentation, you accept it -to be added to this document. In particular, the sender fully accepts -the license and copyright notice. - -* Menu: - -* Comment Extension:: -* Arrays Extension:: -* Scatnames Extension:: -* Lines Extension:: -* Irregular Extension:: - - -File: openscop.info, Node: Comment Extension, Next: Arrays Extension, Up: Extensions - -3.4.1 Comment Extension ------------------------ - -*Description* - * URI: `comment'. - - * Author: Ce'dric Bastoul . - - * Purpose: the `comment' extension stores a textual string. - -*File Format* - -The `comment' extension file format respects the following grammar: - Comment_generic ::= "" Comment "" - Comment ::= _Text - -An example of textual `comment' extension is the following: - - This is a comment string. - - -*Data Structure* - -The `comment' extension data structure is the following: - struct osl_comment { - char * comment; /* Comment message as a 0-terminated string */ - }; - typedef struct osl_comment osl_comment_t; - typedef struct osl_comment * osl_comment_p; - - -File: openscop.info, Node: Scatnames Extension, Next: Lines Extension, Prev: Arrays Extension, Up: Extensions - -3.4.2 Scatnames Extension -------------------------- - -*Description* - * URI: `scatnames'. - - * Author: Ce'dric Bastoul . - - * Purpose: the `scatnames' extension provides a list of textual - scattering dimension names. - -*File Format* - -The `scatnames' extension file format respects the following grammar. -It reuses the `Strings' description (*note Strings Generic::): - Scatnames_generic ::= "" Scatnames "" - Scatnames ::= Strings - -The list of scattering dimension names is provided on one single line. -The names are separated with spaces. A possible example of such an -extension is the following: - - - # List of scattering dimension names: - beta_0 i beta_1 j beta_2 - - -*Data Structure* - -The `scatnames' extension data structure is the following: - - struct osl_scatnames { - osl_strings_p names; /* List of textual scattering dimension names. */ - }; - typedef struct osl_scatnames osl_scatnames_t; - typedef struct osl_scatnames * osl_scatnames_p; - -The order of the scattering dimension names in the list corresponds to -the order of the scattering dimensions. - - -File: openscop.info, Node: Arrays Extension, Next: Scatnames Extension, Prev: Comment Extension, Up: Extensions - -3.4.3 Arrays Extension ----------------------- - -*Description* - * URI: `arrays'. - - * Author: Ce'dric Bastoul . - - * Purpose: the `arrays' extension provides a set of textual array - names corresponding to the array identifiers used in the access - relations. - -*File Format* - -The `arrays' extension file format respects the following grammar: - Arrays_generic ::= "" Arrays "" - Arrays ::= Nb_items Item_list - Item_List ::= Item Item_list | (void) - Item ::= Identifier Name - Nb_items ::= _Integer - Identifier ::= _Integer - Name ::= _String - -The number of array names is provided on the first line, then each -following line contains a couple identifier-name. For instance, the -following example is a correct textual `arrays' extension. It -corresponds to the array names of the preliminary example (*note -Preliminary Example::): - - - # Number of array names: - 3 - 1 C # Identifier 1 corresponds to array name "C" - 3 B # Identifier 3 corresponds to array name "B" - 2 A # Identifier 2 corresponds to array name "A" - - -*Data Structure* - -The `arrays' extension data structure is the following: - - struct osl_arrays { - int nb_names; /* Number of names */ - int * id; /* Array of nb_names identifiers */ - char ** names; /* Array of nb_names names */ - }; - typedef struct osl_arrays osl_arrays_t; - typedef struct osl_arrays * osl_arrays_p; - -Each name has a name string and an identifier: the ith name has name -string `names[i]' and identifier `id[i]'. - - -File: openscop.info, Node: Lines Extension, Next: Irregular Extension, Prev: Scatnames Extension, Up: Extensions - -3.4.4 Lines Extension ---------------------- - - -File: openscop.info, Node: Irregular Extension, Prev: Lines Extension, Up: Extensions - -3.4.5 Irregular Extension -------------------------- - - -File: openscop.info, Node: History, Prev: Extensions, Up: OpenScop Specification - -3.5 History -=========== - -OpenScop is a follow-up of Louis-Noe"l Pouchet et al.'s ScopLib effort -which was itself based on Ce'dric Bastoul et al.'s Clan tool. People -involved in OpenScop's genesis are: - * Ce'dric Bastoul - - * Uday Bondhugula - - * Tobias Grosser - - * Louis-Noe"l Pouchet - - * Sven Verdoolaege - - -File: openscop.info, Node: OpenScop Library, Next: References, Prev: OpenScop Specification, Up: Top - -4 OpenScop Library -****************** - -The OpenScop Library, or OSL for short, is an example implementation of -the OpenScop specification. Its API is not part of the OpenScop -specification. It offers basic functionalities to manipulate the -OpenScop data structures (allocate, free, copy, dump, etc.) and file -format (read, print, etc.). The OpenScop Library is _not_ a polyhedral -library. OpenScop is an exchange format, and the OpenScop Library -reflects this. - - It is a Free Software using the 3-clause BSD License. Programmers -should feel free to use it or copy/paste its code in any project, Open -Source or not(1). - -* Menu: - -* Precision:: -* Base Functions:: -* Example of OpenScop Library Utilization:: -* Installation:: -* Documentation:: -* Development:: - - ---------- Footnotes ---------- - - (1) Closed source projects should consider to provide some OpenScop -file input and output, so they can be incorporated to any -OpenScop-based tool chain. - - -File: openscop.info, Node: Precision, Next: Base Functions, Up: OpenScop Library - -4.1 Precision -============= - -The OpenScop specification does not impose a specific type for the -constraint matrix elements. For a maximum flexibility, the OpenScop -Library offers an hybrid precision implementation. It supports 32 bits, -64 bits and multiple precision (relying on GNU GMP) relations -transparently. At relation allocation time, users have two ways to set -the precision. The first way is to call an allocation function with a -precision parameter. The second way is to rely on the environment -variable `OSL_PRECISION'. The accepted values for this variable are -`32' for 32 bits precision, `64' for 64 bits precision and `0' for -multiple precision. When this variable is set, its value becomes the -default precision for relation elements. For instance, to ensure the -OpenScop Library will use 64 bits precision by default, the user may -set: - export OSL_PRECISION=64 - if his shell is, e.g., bash or - setenv OSL_PRECISION 64 - if his shell is, e.g., tcsh. The user should ad this line to his -.bashrc or .tcshrc (or whatever convenient file) to make this setting -permanent. - - -File: openscop.info, Node: Base Functions, Next: Example of OpenScop Library Utilization, Prev: Precision, Up: OpenScop Library - -4.2 Base Functions -================== - -The OpenScop Library provides, for each OpenScop data structure, a set -of functions devoted to basic manipulation, conversion from file format -to data structures and from data structures to file format. The naming -convention is consistent for all data structures. Hence, the function -prototypes differ only with the name of the data structure. In the -following, we will use the generic term of _structure_ to refer at any -OpenScop data structure. For instance the `osl_'_structure_`_malloc()' -function is a generic name can be instantiated to -`osl_relation_malloc()' or `osl_statement_malloc()' etc. - - We present in this documentation only the main functions. Many other -utility functions are provided to ease OpenScop format manipulation. -The reader is invited to refer at the technical documentation to learn -everything about the OpenScop Library. - -* Menu: - -* Dumping:: -* Printing:: -* Reading:: -* Allocating:: -* Deallocating:: -* Cloning:: -* Testing:: - - -File: openscop.info, Node: Dumping, Next: Printing, Up: Base Functions - -4.2.1 Dumping: osl__structure__dump and idump ---------------------------------------------- - - void osl__structure__dump(FILE * output, osl__structure__p s); - void osl__structure__idump(FILE * output, osl__structure__p s, int i); - -Each OpenScop data structure has a dumping functions as shown above. -Dumping means writing down the content of the data structure pointed by -`s' (and its fields recursively) in a textual form to the `output' file -(the file, possibly `stdout', has to be open for writing). The textual -form is not the OpenScop file format but another representation closer -to the internal representation in memory and mainly intended for -debugging purpose. The `idump' function has an additional integer -parameter which corresponds to an indentation level. - - -File: openscop.info, Node: Printing, Next: Reading, Prev: Dumping, Up: Base Functions - -4.2.2 Printing: osl__structure__print -------------------------------------- - - void osl__structure__print(FILE * output, osl__structure__p s); - -Each OpenScop data structure has a pretty printing function as shown -above. It prints the content of the data structure pointed by `s' (and -its fields recursively) according to the OpenScop file format (*note -OpenScop File Format Specification::) to the `output' file (the file, -possibly `stdout', has to be open for writing). - - -File: openscop.info, Node: Reading, Next: Allocating, Prev: Printing, Up: Base Functions - -4.2.3 Reading: osl__structure__read ------------------------------------ - - osl__structure__p osl__structure__read(FILE * input); - -Each OpenScop data structure has a reading function as shown above. It -reads the content of an OpenScop data structure written according to -the OpenScop file format (*note OpenScop File Format Specification::) -from the `input' file (the file, possibly `stdin', has to be open for -reading). It returns a pointer to a freshly allocated -`osl__structure__t' structure containing the information. - - -File: openscop.info, Node: Allocating, Next: Deallocating, Prev: Reading, Up: Base Functions - -4.2.4 Allocating: osl__structure__malloc ----------------------------------------- - - osl__structure__p osl__structure__malloc(); - -Each OpenScop data structure has a memory allocation function as shown -above (except one see below). It allocates the memory to store the -corresponding data structure, it initializes the pointer fields to -`NULL' and the integer fields to `OSL_UNDEFINED' (`-1') and it returns -a pointer to the allocated space. - - An exception to this base description is the `osl_relation_malloc()' -function which requires two parameters: the number of rows and columns -of the constraint matrix (*note Relations::): - - osl_relation_p osl_relation_malloc(int nb_rows, int nb_columns); - -The precision of the relation elements will depend on the -`OSL_PRECISION' environment variable (*note Precision::) if it is set, -or the maximum available precision if it is not set. Another allocation -function is provided to explicitly set a given precision: - - osl_relation_p osl_relation_pmalloc(int precision, - int nb_rows, int nb_columns); - -The `precision' field may take the following values: - * `OSL_PRECISION_SP' for 32 bits precision, - - * `OSL_PRECISION_DP' for 64 bits precision, - - * `OSL_PRECISION_MP' for multiple precision, - - -File: openscop.info, Node: Deallocating, Next: Cloning, Prev: Allocating, Up: Base Functions - -4.2.5 Deallocating: osl__structure__free ----------------------------------------- - - void osl__structure__free(osl__structure__p s); - -Each OpenScop data structure has a memory deallocation function as -shown above. It recursively frees the memory allocated for the -structure pointed by `s', i.e., internal structures are also freed. - - -File: openscop.info, Node: Cloning, Next: Testing, Prev: Deallocating, Up: Base Functions - -4.2.6 Cloning: osl__structure__clone ------------------------------------- - - osl__structure__p osl__structure__clone(osl__structure__p s); - -Each OpenScop data structure has a clone function as shown above. It -recursively copies the content of the structure pointed by `s', i.e., -internal structures are also copied. It returns a pointer to the clone -of the structure pointed by `s'. - - -File: openscop.info, Node: Testing, Prev: Cloning, Up: Base Functions - -4.2.7 Testing: osl__structure__equal ------------------------------------- - - int osl__structure__equal(osl__structure__p s1, osl__structure__p s2); - -Each OpenScop data structure has a testing function as shown above. It -checks whether two pointers are referring to equivalent structures -(either by pointing to the same structure or to different structures -which contain the same information). It returns 1 if the pointed -structures are equivalent, 0 otherwise. This test is _content-based_ -and is intended for debugging purpose. It is not (and will never be) -able to state, e.g., that two relations with different constraint -matrices are actually representing the same relation. - - -File: openscop.info, Node: Example of OpenScop Library Utilization, Next: Installation, Prev: Base Functions, Up: OpenScop Library - -4.3 Example of OpenScop Library Utilization -=========================================== - -Here is a basic example showing how it is possible to use the OpenScop -Library, assuming that a standard installation has been done. The -following C program reads an OpenScop file from the standard input and -dumps the content of the data structures to the standard output. - - /* example.c */ - # include - # include - - int main() { - osl_scop_p scop; - - // Read the OpenScop file. - scop = osl_scop_read(stdin); - - // Dump the content of the scop data structure. - osl_scop_dump(stdout, scop); - - // Save the planet. - osl_scop_free(scop); - - return 0; - } - -The compilation command could be: - gcc example.c -losl -o example - A calling command with the input file test.scop could be: - more test.scop | ./example - - -File: openscop.info, Node: Installation, Next: Documentation, Prev: Example of OpenScop Library Utilization, Up: OpenScop Library - -4.4 Installation -================ - -* Menu: - -* License:: -* Requirements:: -* Installation Instructions:: -* Optional Features:: -* Uninstallation:: - - -File: openscop.info, Node: License, Next: Requirements, Up: Installation - -4.4.1 License -------------- - -First of all, it would be very kind to refer the present document in any -publication that results from the use of the OpenScop specification or -library, *note Bas11:: (a bibtex entry is provided behind the title -page of this manual, along with the copyright notice). The OpenScop -Library is provided under the 3-clause BSD license: - - Copyright (C) 2011 University Paris-Sud 11 and INRIA - - Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyrigh - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. The name of the author may not be used to endorse or promote - products derived from this software without specific prior - written permission - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - - -File: openscop.info, Node: Requirements, Next: Installation Instructions, Prev: License, Up: Installation - -4.4.2 Requirements ------------------- - -The OpenScop Library is a stand-alone library. For a basic use, it does -not need any additional tool or library. Anyway, to be able to work in -conjunction with other tools that manipulate multiple precision -numbers, the GNU GMP library can be used as an option. - -* Menu: - -* GMP Library:: - - -File: openscop.info, Node: GMP Library, Up: Requirements - -4.4.2.1 GMP Library (optional) -.............................. - -To be able to deal with insanely large coefficient, the user will need -to install the GNU Multiple Precision Library (GMP for short) version -4.2.2 or above(1). The user can compile it by typing the following -commands on the GMP root directory: - - * `./configure' - - * `make' - - * And as root: `make install' - - The GMP default installation is `/usr/local'. This directory may not -be inside the user's library path. To fix the problem, the user should -set - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib - if your shell is, e.g., bash or - setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH:/usr/local/lib - if your shell is, e.g., tcsh. Add the line to your .bashrc or -.tcshrc (or whatever convenient file) to make this change permanent. -Another solution is to ask GMP to install in the standard path by using -the prefix option of the configure script: `./configure --prefix=/usr'. - - The OpenScop Library has to be built using the GMP library by -specifying the convenient configure script options to buid the GMP -version (*note Optional Features::). - - ---------- Footnotes ---------- - - (1) `http://www.swox.com/gmp' - - -File: openscop.info, Node: Installation Instructions, Next: Optional Features, Prev: Requirements, Up: Installation - -4.4.3 Installation Instructions -------------------------------- - -Once downloaded and unpacked (e.g. using the `tar -zxvf -openscop-0.8.1.tar.gz' command), you can compile the OpenScop Library -by typing the following commands on the OpenScop Library's root -directory: - - * `./autogen.sh' - - * `./configure' - - * `make' - - * And as root: `make install' - - The program binaries and object files can be removed from the source -code directory by typing `make clean'. To also remove the files that -the `configure' script created (so you can compile the package for a -different kind of computer) type `make distclean'. - - -File: openscop.info, Node: Optional Features, Next: Uninstallation, Prev: Installation Instructions, Up: Installation - -4.4.4 Optional Features ------------------------ - -The `configure' shell script attempts to guess correct values for -various system-dependent variables and user options used during -compilation. It uses those values to create the `Makefile'. Various -user options are provided by the OpenScop Library's configure script. -They are summarized in the following list and may be printed by typing -`./configure --help' in the OpenScop Library top-level directory. - - * By default, the installation directory is `/usr/local': `make - install' will install the package's files in `/usr/local/bin', - `/usr/local/lib' and `/usr/local/include'. The user can specify - an installation prefix other than `/usr/local' by giving - `configure' the option `--prefix=PATH'. - - * By default, The OpenScop Library is built in 64bits version. If - the user gives to `configure' the option `--enable-int-version', - the 32bits version of the OpenScop Library will be compiled. In - the same way, the option `--enable-mp-version' has to be used to - build the multiple precision version. - - * By default, `configure' will look for the GMP library (necessary - to build the multiple precision version) in standard locations. If - necessary, the user can specify the GMP path by giving `configure' - the option `--with-gmp=PATH'. - - -File: openscop.info, Node: Uninstallation, Prev: Optional Features, Up: Installation - -4.4.5 Uninstallation --------------------- - -The user can easily remove the OpenScop Library from his system by -typing (as root if necessary) from the OpenScop Library top-level -directory `make uninstall'. - - -File: openscop.info, Node: Documentation, Next: Development, Prev: Installation, Up: OpenScop Library - -4.5 Documentation -================= - -The OpenScop Library distribution provides several sources of -documentation. First, the source code itself is as documented as much -as possible. The code comments use the Doxygen technical documentation -system. The user may install Doxygen(1) to automatically generate a -technical documentation by typing `make doc' or `doxygen -./autoconf/Doxyfile' at the OpenScop Library top-level directory after -running the configure script (*note Installation Instructions::). -Doxygen will generate documentation sources (in HTML, LaTeX and man) in -the `doc/source' directory of the OpenScop Library distribution. - - The Texinfo source of the present document is also provided in the -`doc' directory. The user can build it in either PDF format (by typing -`texi2pdf openscop.texi') or HTML format (by typing `makeinfo --html -openscop.texi', using `--no-split' option to generate a single HTML -file) or info format (by typing `makeinfo openscop.texi'). - - ---------- Footnotes ---------- - - (1) `http://www.stack.nl/~dimitri/doxygen' - - -File: openscop.info, Node: Development, Prev: Documentation, Up: OpenScop Library - -4.6 Development -=============== - -* Menu: - -* Copyright Issue:: -* Repository:: -* Coding Style:: -* Extension Development:: - - -File: openscop.info, Node: Copyright Issue, Next: Repository, Up: Development - -4.6.1 Copyright Issue ---------------------- - -The OpenScop Library is an Open Source project and you should feel free -to contribute by adding functionalities (in particular extensions), -correcting bugs or improving documentation. However, for painful -administrative reasons, the copyright of the core part (everything -except extensions) should not be impacted by your work. Hence, if you -are doing a significant contribution to the main part, the OpenScop -Library maintainer may ask you for an agreement about this copyright. -If you plan to do such a significant contribution, it may be wise to -discuss this issue with the maintainer first. Extensions may include -developer's own copyright. - - -File: openscop.info, Node: Repository, Next: Coding Style, Prev: Copyright Issue, Up: Development - -4.6.2 Repository ----------------- - -The main repository of the OpenScop Library is -`http://repo.or.cz/w/openscop.git'. Developers may ask the OpenScop -Library maintainer to open them a write access to this repository. Only -the maintainer should ever change the `master' branch. Developers -should work on their own branches. To avoid any problem developers -should use the _fork_ functionality of the repository. - - -File: openscop.info, Node: Coding Style, Next: Extension Development, Prev: Repository, Up: Development - -4.6.3 Coding Style ------------------- - -The OpenScop Library is written in C using an object oriented style. -Each important data structure (e.g., `struct foo') has its own header -file (`include/osl/foo.h') where lies the definition of the data -structure, the two typedefs for the data structure (one for the -structure, `osl_foo_t', and one for a pointer to the structure, -`osl_foo_p'), the prototypes of the various functions related to this -data structure, all named using the prefix "`osl_foo_'". The source -code of the functions is provided in a separated C file -(`source/foo.c'). - - Utility functions independent from the main data structures may be -placed in separate source files (e.g., definition in -`include/osl/util.h' and code in `source/util.c'). Tool-wide -preprocessor directives are placed in `include/osl/macros.h', macros -are prefixed with "`OSL_'". - - The core code itself has to be written according to the Google C++ -Coding Style: -`http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml' (for -what can apply to C), plus the naming conventions discussed above with -highest priority. The extension parts must only respect the naming -convention, but a consistent coding style is much appreciated. - - -File: openscop.info, Node: Extension Development, Prev: Coding Style, Up: Development - -4.6.4 Extension Development ---------------------------- - -It's fairly easy to integrate a new extension to OpenScop and the -OpenScop Library. Developing a new extension is very much like adding a -new "object": it requires writing a data structure for the extension -data and the 7 base functions to manage this extension. Here is how -developers should proceed to add an extension called `foo' (beware that -the naming convention is strict): - - 1. Send the name `foo' to the maintainer to ensure it is unique and - hence can be used as an URI. The name (one single word, - or words separated with underscores "_") should be suggested - by the extension developers to the OpenScop development - mailing list ). It - should not correspond to an existing structure name (see - `include/osl/osl.h' for the list). The maintainer will - update `include/osl/osl.h' in the development version - accordingly. - - 2. Look at the `comment' extension. The `comment' extension - (*note Comment Extension::) has been written to be used as a basic - example for extension developers. Having a look at - `include/osl/extensions/comment.h' and - `source/extensions/comment.c' will be a great help to do it right. - - 3. Create the extension data structure: it is necessary that the - extension data can be accessible through only one pointer. - - 4. Code the 7 base functions for the extension. Any extension must - provide this set of functions (naming convention apply only - if the extension is planed to be integrated to the OpenScop - Library default extensions): - * `osl_foo_idump' (*note Dumping::) - - * `osl_foo_sprint' has the following prototype: - char * osl__structure__sprint(osl__structure__p s); - It corresponds to the pretty printing functions of - the core data structures (*note Printing::) with - the difference that the OpenScop textual - representation is written to a string (returned by - the function) instead of a file. - - * `osl_foo_sread' has the following prototype: - osl__structure__p osl__structure__sread(char ** string); - It corresponds to the reading functions of the core - data structures (*note Reading::) with the - difference that the OpenScop textual representation is read - from a string (provided as a parameter) instead of a - file. The address of the string to read is passed - as a parameter and is updated to point immediately - after what has been actually read. - - * `osl_foo_malloc' (*note Allocating::) - - * `osl_foo_free' (*note Deallocating::) - - * `osl_foo_clone' (*note Cloning::) - - * `osl_foo_equal' (*note Testing::) - - 5. Code the other functions you need! - - Now let us consider two scenarios. - - First scenario, the extension is external and is not planned to be -integrated to the OpenScop Library. In this case you are all set. -Simply generate an `osl_interface_t' for your extension and have a look -at the function `osl_scop_register_extension()' which is devoted to -register a new extension interface to an existing `osl_scop_t'. - - Second scenario, the extension will integrate the set of default -OpenScop Library extensions (the best solution to share it to other -potential users). In this case, a few additional things have to be done: - 1. Create the extension header `include/osl/extensions/foo.h' - to store the extension structure and function prototypes and - the extension source file `source/extensions/foo.c' for the - code of the functions. - - 2. Add the documentation for the extension to the texinfo source of - this document (in `doc/openscop.texi'), following the example - of the `comment' documentation (*note Comment Extension::). - - 3. Integrate the extension by adding the `extensions/foo.c' entry - to the `libosl_la_SOURCES' in the `source/Makefile.am' - file, the `osl/foo.h' entry to the - `nobase_pkginclude_HEADERS' and add the corresponding - `#include ' in the `include/scop.h.in' - file. - - 4. Add the new extension in the - `osl_interface_get_default_registry()' function. - - 5. You are done! Prepare a single commit or patch corresponding to the - integration of the new extension and ask the maintainer to - merge it to the master branch. - - -File: openscop.info, Node: References, Prev: OpenScop Library, Up: Top - -5 References -************ - - * [Bas03a] C. Bastoul, P. Feautrier. Improving data locality by - chunking. CC'12 International Conference on Compiler Construction, - LNCS 2622, pages 320-335, Warsaw, April 2003. - - * [Bas11] C. Bastoul. OpenScop: A Specification and a Library for - Data Exchange in Polyhedral Compilation Tools. Technical Report, - Paris-Sud University, France, June 2011. - - * [Fea92] P. Feautrier. Some efficient solutions to the affine - scheduling problem, part II: multidimensional time. International - Journal of Parallel Programming, 21(6):389-420, December 1992. - - * [Gri04] M. Griebl. Automatic parallelization of loop programs for - distributed memory architectures. Habilitation Thesis. Faculta"t - fu"r Mathematik und Informatik, Universita"t Passau, 2004. - _http://www.infosun.fmi.uni-passau.de/cl/loopo/_ - - * [Wil93] Doran K. Wilde. A library for doing polyhedral operations. - Technical Report 785, IRISA, Rennes, France, 1993. - - - - -Tag Table: -Node: Top1290 -Node: Introduction2709 -Node: Polyhedral Representation6664 -Node: Motivation8062 -Node: Thinking in Polyhedra11844 -Node: Iteration Domain14040 -Node: Scattering Function19422 -Ref: Scattering Function-Footnote-131896 -Node: Access Function31927 -Node: What's Next?33977 -Node: OpenScop Specification34887 -Node: Preliminary Example36041 -Ref: Preliminary Example-Footnote-142380 -Node: OpenScop File Format Specification42435 -Node: Relations46426 -Node: Iteration Domain Relation49447 -Node: Context Domain Relation52486 -Node: Scattering Relation53026 -Node: Access Relation54164 -Node: Generics56186 -Node: Strings Generic57335 -Node: Body Generic57983 -Node: OpenScop Data Structure Specification59038 -Node: osl_relation_t60806 -Node: osl_relation_list_t62867 -Node: osl_interface_t63571 -Node: osl_generic_t65352 -Node: osl_strings_t66270 -Node: osl_body_t66823 -Node: osl_statement_t67554 -Node: osl_scop_t69077 -Node: Extensions76326 -Node: Comment Extension78627 -Node: Scatnames Extension79508 -Node: Arrays Extension80817 -Node: Lines Extension82630 -Node: Irregular Extension82795 -Node: History82940 -Node: OpenScop Library83342 -Ref: OpenScop Library-Footnote-184248 -Node: Precision84405 -Node: Base Functions85588 -Node: Dumping86718 -Node: Printing87573 -Node: Reading88141 -Node: Allocating88763 -Node: Deallocating90154 -Node: Cloning90590 -Node: Testing91075 -Node: Example of OpenScop Library Utilization91834 -Node: Installation92861 -Node: License93143 -Node: Requirements95030 -Node: GMP Library95471 -Ref: GMP Library-Footnote-196696 -Node: Installation Instructions96730 -Node: Optional Features97470 -Node: Uninstallation98937 -Node: Documentation99233 -Ref: Documentation-Footnote-1100359 -Node: Development100406 -Node: Copyright Issue100615 -Node: Repository101390 -Node: Coding Style101906 -Node: Extension Development103239 -Node: References107964 -Ref: Bas03a108073 -Ref: Bas11108264 -Ref: Fea92108451 -Ref: Gri04108658 -Ref: Wil93108918 - -End Tag Table diff --git a/cloog-0.17.0/osl/doc/openscop.pdf b/cloog-0.17.0/osl/doc/openscop.pdf deleted file mode 100644 index 2bac7d5f110a644bceac5527176dabbd19f0ed43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344167 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

2p<__Sv|7*Y3_|8}?tm<;;5S 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

K{&uv0q8)YmOIlX*5k{ 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 z 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

g@C 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 0}. -@end ifnottex -For instance for the statement @code{S3} the set of constraints is: - -@tex -$$ -\hbox{$ \cases{ i - 2 &$\geq 0$\cr - -i + N &$\geq 0$\cr - j - 2 &$\geq 0$\cr - -j + N &$\geq 0$}$} -$$ -@end tex - -@ifnottex -@example -@group - i - 2 >= 0 - -i + N >= 0 - j - 2 >= 0 - -j + N >= 0 -@end group -@end example -@end ifnottex - -@noindent Lastly, we translate the constraint system to the form -@strong{domain matrix}@code{ * }@emph{iteration vector}@code{ >= 0}: - -@c Thanks to Harald Devos for the TeX :-) ! -@tex -$$ -\left[ -\matrix{ - 1 & 0 & 0 & -2 \cr --1 & 0 & 1 & 0 \cr - 0 & 1 & 0 & -2 \cr - 0 & -1 & 1 & 0 - } -\right] -\left( -\matrix{ -i \cr -j \cr -N \cr -1 - } -\right) -\ge -\left( -\matrix{ -0 \cr -0 \cr -0 \cr -0 -} -\right) -$$ -@end tex -@ifnottex -@example -@group -[ 1 0 0 -2 ] [ i ] [ 0 ] -[ -1 0 1 0 ] [ j ] [ 0 ] -[ 0 1 0 -2 ] * [ N ] >= [ 0 ] -[ 0 -1 1 0 ] [ 1 ] [ 0 ] -@end group -@end example -@end ifnottex - -@noindent @strong{The domain matrix will be used in all our tools to provide the -information on the iteration domain of a given statement (the iteration vector -is in general an implicit information).} - -@node Scattering Function -@subsection Scattering Function - -There is no ordering information inside the iteration domain: it only describes -the set of statement instances but @strong{not} the order in which they have -to be executed relatively to each other. In the past the lexicographic order -of the iteration domain was considered, this is no more true -(especially when using CLooG). If we do not provide any ordering information, this -means that the statement instances may be executed in any order -(this is useful, e.g., to specify parallelism). However, some statement instances -may depend on some others and it may be critical to enforce a given order (or -non-order). Hence we need another information. - -We call @emph{scattering} any kind of ordering information in the polyhedral -model. There exists many kind of ordering, such as @emph{allocation}, -@emph{scheduling}, @emph{chunking} etc. They are all expressed -in the same way, i.e., using @emph{logical stamps}, but they may have -different semantics. - -In the case of @strong{scheduling}, the logical stamps are logical dates that -express at which date a statement instance has to be executed. For instance, -let us consider the following three statements: - -@example -@group -x = a + b; // S1 -y = c + d; // S2 -z = a * b; // S3 -@end group -@end example - -@noindent The scheduling of a statement @code{S} is typically -denoted by -@tex -$\theta_{S}$. -@end tex -@ifnottex -T_S. -@end ifnottex -Let us consider the following logical dates for each statement: - -@tex -@example -@group -$\theta_{S1} = 2$ -$\theta_{S2} = 3$ -$\theta_{S3} = 1$ -@end group -@end example -@end tex - -@ifnottex -@example -@group -T_S1 = 1 -T_S2 = 2 -T_S3 = 3 -@end group -@end example -@end ifnottex - -@noindent It means that statement @code{S3} has to be executed at logical date -@code{1}, statement @code{S1} has to be executed at logical date -@code{2} and statement @code{S2} has to be executed at logical date -@code{3}. The target code has to respect this scheduling (the order of -the logical dates), hence it would look like the following where the -variable @code{t} denotes the time: - -@example -@group -t = 1; -z = a * b; // S3 -t = 2; -x = a + b; // S1 -t = 3; -y = c + d; // S2 -@end group -@end example - -@noindent When some statements share the same logical date, this means that, -once the program reaches this logical date, the two statements can be executed -in any order, or better, in parallel. For instance let us consider the -following scheduling: - -@tex -@example -@group -$\theta_{S1} = 1$ -$\theta_{S2} = 2$ -$\theta_{S3} = 1$ -@end group -@end example -@end tex - -@ifnottex -@example -@group -T_S1 = 1 -T_S2 = 2 -T_S3 = 1 -@end group -@end example -@end ifnottex - -@noindent Statements @code{S1} and @code{S3} have the same logical date, -moreover, @code{S2} has a greater logical date than @code{S1} and @code{S3}. -Hence the target code would be: - -@example -@group -t = 1; -#pragma omp parallel sections -@{ - #pragma omp section - @{ - x = a + b; // S1 - @} - #pragma omp section - @{ - z = a * b; // S3 - @} -@} -t = 2; -y = c + d; // S2 -@end group -@end example - -Logical dates may be multidimensional, as clocks: the first dimension -may correspond to days (most significant), the next one to hours (less -significant), the third to minutes and so on. For instance we can consider -the following multidimensional schedules for our example: - -@tex -@example -@group -$\theta_{S1} = (1,1)$ -$\theta_{S2} = (2,1)$ -$\theta_{S3} = (1,2)$ -@end group -@end example -@end tex - -@ifnottex -@example -@group -T_S1 = (1,1) -T_S2 = (2,1) -T_S3 = (1,2) -@end group -@end example -@end ifnottex - -@noindent It is not very hard to decypher the meaning of such scheduling. -Because of the first dimension, statements @code{S1} and @code{S3} will be -executed before statement @code{S2} (@code{S1} and @code{S3} are executed at -day 1, while @code{S2} is executed at day 2). The second dimension is not -really useful there for @code{S2} because it is the only statement executed -at day 2. Nevertheless it allows to order @code{S1} and -@code{S3} relatively to each other since @code{S1} is executed at hour 1 of day -1 while @code{S3} is executed at hour 2 of day 1. -The corresponding target code is the following, with some -additional time variables for a better view of the ordering (@code{t1} -corresponds to the first time dimension, @code{t2} to the second one): - -@example -@group -t1 = 1; -t2 = 1; -x = a + b; // S1 -t2 = 2; -z = a * b; // S3 -t1 = 2; -t2 = 1; -y = c + d; // S2 -@end group -@end example - -In the case of @strong{allocation} (in the literature we can find some -papers calling it @emph{placement}), the logical stamp is a processor -number expressing on which processor a statement instance has to be -executed. Typically, allocations are written in the same way as scheduling. -Here, we denote it @math{P_S} for a statement @code{S}. -For instance, let us consider the following allocation: - -@tex -@example -@group -$P_{S1} = 1$ -$P_{S2} = 2$ -$P_{S3} = 1$ -@end group -@end example -@end tex - -@ifnottex -@example -@group -P_S1 = 1 -P_S2 = 2 -P_S3 = 1 -@end group -@end example -@end ifnottex - -@noindent The corresponding target code has to take into account that both -statements @code{S1} and @code{S3} have to be executed on the same processor -(they have the same logical number 1) and that statement @code{S2} has -to be executed on another processor (logical number 2). A possible target code -is the following: - -@example -@group -#pragma omp parallel sections -@{ - #pragma omp section - @{ - // Logical processor 1 - x = a + b; // S1 - z = a * b; // S3 - @} - #pragma omp section - @{ - // Logical processor 2 - y = c + d; // S2 - @} -@} -@end group -@end example - -@noindent We can note that no order has been specified for the -statements @code{S1} and @code{S3} that are executed on the same processor. -Hence any order is satisfying. For sake of flexibility, it is usual to build -a scattering whose various dimensions do not have the same semantics. A -typical construction is @emph{space/time mapping} where the first @code{n} -dimensions are devoted to allocation, then the last @code{m} -dimensions are devoted to scheduling. Typically, space/time mapping is -written in the same way as scheduling. -Here we denote it @math{M_S} for a statement @code{S}. -For instance, let us consider the following space/time mapping for our -example where one dimension is devoted to mapping and one dimension is -devoted to scheduling: - -@tex -@example -@group -$M_{S1} = (1,2)$ -$M_{S2} = (2,1)$ -$M_{S3} = (1,1)$ -@end group -@end example -@end tex - -@ifnottex -@example -@group -M_S1 = (1,2) -M_S2 = (2,1) -M_S3 = (1,1) -@end group -@end example -@end ifnottex - -@noindent Here we have the same first dimension as the previous example, thus -the allocation of the statements to processors is the same. The second -dimension precises on a given processor at which logical date a statement -instance has to be executed. Here, the statement @code{S1} is executed at -day 2 on processor 1 while the statement @code{S3} is executed at day 1 onto -the same processor. It follows this space/time mapping corresponds to the -following target code (we added an additional variable to represent the -local logical clocks): - -@example -@group -#pragma omp parallel sections -@{ - #pragma omp section - @{ - // Logical processor 1 - t = 1; - z = a * b; // S3 - t = 2; - x = a + b; // S1 - @} - #pragma omp section - @{ - // Logical processor 2 - t = 1; - y = c + d; // S2 - @} -@} -@end group -@end example - -For the same reason as discussed for iteration domains -(@pxref{Iteration Domain}), it is not possible to define a scattering for -each statement instance, especially if the statement belongs to a -(possibly parametric) loop. The iteration vector fully defines an -instance of a given statement. Thus, a practical way to provide a scattering -for each instance of a given statement is to use a @emph{function} -that depends on the iteration vector. In this way the function may associate -to each iteration vector a different scattering. We call these functions -@strong{scattering functions}. Scattering functions are @emph{affine} -functions of the outer loop counter and the global parameters. -For instance, let us consider the following source code: - -@example -@group -for (i = 2; i <= 4; i++) - for (j = 2; j <= 4; j++) - P[i+j] += A[i] + B[j]; // S4 -@end group -@end example - -@noindent The iteration domain of the statement @code{S4} is: - - -@tex -$$D _{S4} = \{(i,j) \in Z^2 \; | \; 2 \leq i \leq 4 \land 2 \leq j \leq 4 \}.$$ -@end tex -@ifnottex -@example -@group -D_S4= @{(i,j) in Z^2 | 2 <= i <= 4 && 2 <= j <= 4 @}. -@end group -@end example -@end ifnottex - -@noindent If you are still not comfortable with the mathematical notation, it -corresponds to the following graphical representation: - -@image{images/basic2,3cm} - -@noindent The list of the statement instances of @code{S4} (the integer -points of its iteration domain) corresponds to the following iteration vectors: - -@example -@group -iteration vector - (2,2) - (2,3) - (2,4) - (3,2) - (3,3) - (3,4) - (4,2) - (4,3) - (4,4) -@end group -@end example - -@noindent Let us suppose we want to schedule the instances of the statement -@code{S4} (the integer points of its iteration domain) using the following -scheduling function: - -@tex -@example -@group -$\theta_{S4}(i, j) = (j+2, 3*i+j)$ -@end group -@end example -@end tex - -@ifnottex -@example -@group -T_S4(i,j) = (j+2,3*i+j) -@end group -@end example -@end ifnottex - -@noindent We only need to apply the function to each iteration vector to find -the logical date of each instance: - -@example -@group -iteration vector logical date - (2,2) --> (4,8) - (2,3) --> (5,9) - (2,4) --> (6,10) - (3,2) --> (4,11) - (3,3) --> (5,12) - (3,4) --> (6,13) - (4,2) --> (4,14) - (4,3) --> (5,15) - (4,4) --> (6,16) -@end group -@end example - -The polyhedral model users do not have to take care about the generation of a -target code that respects the scattering: the -CLooG@footnote{@url{http://www.cloog.org}} tool is there to -solve the problem quite easily. For the previous -example, the target code would be the following (@code{t1} and @code{t2} -correspond to the two dimensions of the logical date, the reader may -take care that this code actually implements the scattering function): - -@example -@group -for (t1 = 4; t1 <= 6; t1++) @{ - for (t2 = t1+4; t2 <= t1+10; t2++) @{ - if ((-t1+t2+2)%3 == 0) @{ - i = (-t1+t2+2)/3 ; - j = t1-2 ; - P[i+j] += A[i] + B[j]; // S4 - @} - @} -@} -@end group -@end example - - - -Obviously with such a twisted scheduling, it is hard to see the "meaning" -of the transformation. To name any kind of program transformation as -a magic spell ("tile", "fuse", "skew"...) is an old bad habit which is not -relevant anymore in the polyhedral model: a scheduling may be an arbitrary -complex sequence of basic-old-good transformations. Nevertheless it is most -of the time quite easy to translate well known transformations to schedules. -For instance, let us consider this new scheduling function: - -@tex -@example -@group -$\theta_{S4}(i,j) = (j,i)$ -@end group -@end example -@end tex - -@ifnottex -@example -@group -T_S4(i,j) = (j,i) -@end group -@end example -@end ifnottex - -@noindent Using CLooG, we can generate the target code: - -@example -@group -for (t1 = 2; t1 <= 4; t1++) @{ - for (t2 = 2; t2 <= 4; t2++) @{ - i = t2; - j = t1; - P[i+j] += A[i] + B[j]; // S4 - @} -@} -@end group -@end example - - -@noindent It is easy to see (and analyze) that it corresponds to a classical -@emph{loop interchange} transformation. - -A very useful example of multi-dimensional scattering functions is -the @strong{scheduling of the original program}. -The method to compute it is quite simple (@pxref{Fea92}). The idea is to -build an abstract syntax tree of the program and to read the scheduling for -each statement. For instance, let us consider the following implementation of -a Cholesky factorization: - -@example -@group -/* A Cholesky factorization kernel. */ -for (i=1;i<=N;i++) @{ - for (j=1;j<=i-1;j++) @{ - a[i][i] -= a[i][j] ; // S1 - @} - a[i][i] = sqrt(a[i][i]) ; // S2 - for (j=i+1;j<=N;j++) @{ - for (k=1;k<=i-1;k++) @{ - a[j][i] -= a[j][k]*a[i][k] ; // S3 - @} - a[j][i] /= a[i][i] ; // S4 - @} - @} -@} -@end group -@end example - -@noindent The corresponding abstract syntax tree is shown in the following -figure. It directly gives the scattering functions (schedules) for all the -statements of the program (just follow the paths). - -@image{images/tree,6cm} - -@tex -$$ -\hbox{$ \cases{ \theta _{S1}(i,j) &$= (0,i,0,j,0)$\cr - \theta _{S2}(i) &$= (0,i,1)$\cr - \theta _{S3}(i,j,k) &$= (0,i,2,j,0,k,0)$\cr - \theta _{S4}(i,j) &$= (0,i,2,j,1)$}$} -$$ -@end tex - -@ifnottex -@example -@group -T_S1(i,j) = (0,i,0,j,0) -T_S2(i) = (0,i,1) -T_S3(i,j,k) = (0,i,2,j,0,k,0) -T_S4(i,j) = (0,i,2,j,1) -@end group -@end example -@end ifnottex - -@noindent These schedules depend on the iterators and give for each instance -of each statement a unique execution date. Using such scattering functions -allows CLooG to re-generate the input code. - -@noindent To easily manipulate the scattering function of any -statement @code{S}, we translate it to the matrix form: -@tex -@math{\theta_S}(@emph{iteration vector}) -@end tex -@ifnottex -T_S(@emph{iteration vector}) -@end ifnottex -@code{ = }@strong{scattering matrix}@code{ * }@emph{iteration vector}. -For instance let us consider again our previous example -@tex -$\theta_{S4}(i, j) = (j+2, 3*i+j).$ -@end tex -@ifnottex -T_S4(i,j) = (j+2,3*i+j). -@end ifnottex -We write it in the following way: -@tex -$$ -\theta_{S4} -\left( -\matrix{ - i \cr - j \cr - 1 - } -\right) -= -\left[ -\matrix{ - 0 & 0 & 2 \cr - 3 & 1 & 0 - } -\right] -\left( -\matrix{ - i \cr - j \cr - 1 - } -\right) -$$ -@end tex -@ifnottex -@example -@group - [ i ] [ 0 1 2 ] [ i ] -T_S4([ j ]) = [ 3 1 0 ] * [ j ] - [ 1 ] [ 1 ] -@end group -@end example -@end ifnottex - -@noindent @strong{The scattering matrix will be used in all our tools to provide -the information on the scattering of a given statement -(the iteration vector is in general an implicit information).} - - -@node Access Function -@subsection Access Function - -Before applying any transformation, it is essential to deeply analyze both the -original program and the transformation to ensure the transformation does not -imply any modification of the original program semantics. In the polyhedral -model, we are able to achieve -an exact analysis when all the memory accesses are made through arrays -(note that variables are a particular case of arrays since they are simply -arrays with only one memory location) with affine subscripts that depend -on outer loop counters and global parameters (note that @emph{subscripts} -are sometimes called @emph{index} or @emph{accesses} in the literature). - -For instance let us consider the array access @code{A[2*i+j][j][i+N]}. It has -three dimensions, each subscript dimension is an affine form of some outer loop -iterarors (@code{i} and @code{j}) and global parameters (@code{N}) hence -it corresponds to an acceptable array access to be analyzed in the -polyhedral model. - -Each array access can target a different memory cell depending on the -statement instance, i.e., depending on the iteration vector. -Thus we use access functions (or subscript functions, or index functions, as you -prefer to call it) depending on the iteration vector to describe an array -access. In our example, the access function would be written -@math{F_A(i, j) = (2*i+j, j, i+N)}. - -@noindent To easily manipulate the access function of any -array @code{A}, we translate it to the matrix form: -@math{F_A}(@emph{iteration vector}) -@code{ = }@strong{access matrix}@code{ * }@emph{iteration vector}. -For instance let us consider again our previous example. We would -write it in the following way: -@tex -$$ -F_A -\left( -\matrix{ - i \cr - j \cr - N \cr - 1 - } -\right) -= -\left[ -\matrix{ - 2 & 1 & 0 & 0 \cr - 0 & 1 & 0 & 0 \cr - 1 & 0 & 1 & 0 - } -\right] -\left( -\matrix{ - i \cr - j \cr - N \cr - 1 - } -\right) -$$ -@end tex -@ifnottex -@example -@group - [ i ] [ 2 1 0 0 ] [ i ] -F_A([ j ]) = [ 0 1 0 0 ] * [ j ] - [ N ] [ 1 0 1 0 ] [ N ] - [ 1 ] [ 1 ] -@end group -@end example -@end ifnottex - -@noindent @strong{The access matrix will be used in all our tools to provide the -information on the access of a given statement -(the iteration vector is in general an implicit information).} - -@node What's Next? -@section What's Next? - -OK, now you have an idea about how we do represent a program part in the -polyhedral model. You know the three main concepts, namely: domain, scattering -and access. What can you do with this?! Well, pretty much anything related -to code restructuring! The core idea will be to rely on the mathematical -representation to extract useful information about your -code (data reuse, parallelism...) and to generate a scattering -to benefit from the properties you analysed. -However, OpenScop's documentation is not the right -place to learn at this (OpenScop is all about representation, not about -manipulation). Probably it is the right time for you to -have a look at: -@itemize @bullet -@item PoCC @url{http://pocc.sourceforge.net} -@item Pluto @url{http://pluto-compiler.sourceforge.net} -@end itemize - -@noindent Have fun :-) ! - - -@c % *********************** OpenScop Specification ************************** -@node OpenScop Specification -@chapter OpenScop Specification - -OpenScop provides an explicit polyhedral representation of a static control -part. It has been designed by various polyhedral compilation tool writers from -various institutions. It builds on previous popular polyhedral file and data -structure formats (such as @emph{.cloog} and CLooG data structures) to provide -a unique, extensible format to most polyhedral compilation tools. It -is composed of two parts. The first part, the so-called -@emph{core part}, is devoted to the polyhedral representation of a SCoP. -It contains what is strictly necessary to build a -complete source-to-source framework in the polyhedral model and to output a -semantically equivalent code for the SCoP, from analysis to code generation. -The second part of the format, the so-called @emph{extension part}, -contains extensions to provide additional informations to some tools. - -@menu -* Preliminary Example:: -* OpenScop File Format Specification:: -* OpenScop Data Structure Specification:: -* Extensions:: -* History:: -@end menu - -@c %/************************************************************************* -@c % * PRELIMINARY EXAMPLE * -@c % *************************************************************************/ -@node Preliminary Example -@section Preliminary Example -OpenScop is a specification for representing static control program parts in -the polyhedral model. Thus, we can translate some code parts to an equivalent -OpenScop representation. As an example, let us consider the -following matrix-multiply kernel: - -@example -#pragma scop -if (N > 0) @{ - for (i = 0; i < N; i++) @{ - for (j = 0; j < N; j++) @{ - C[i][j] = 0.0; - for (k = 0; k < N; k++) - C[i][j] = C[i][j] + A[i][k] * B[k][j]; - @} - @} -@} -@end example - -The Clan@footnote{@url{http://www.lri.fr/~bastoul/development/clan/}} -tool may be used to translate this code part to an OpenScop -representation automatically. The @code{#pragma scop} is used here for -Clan, but some other tool may not need it. Here is the result of the -translation to an OpenScop textual representation. - -@sp 1 -@center @strong{DON'T PANIC} -@sp 1 - -@noindent Explanations will follow and it is not -as cryptic as it seems to be ! -@sp 1 - -@example - - -# =============================================== Global -# Backend Language -C - -# Context -CONTEXT -1 3 0 0 0 1 -# e/i | N | 1 - 1 1 -1 ## N-1 >= 0 - -# Parameter names are provided -1 -# Parameter names - -N - - -# Number of statements -2 - -# =============================================== Statement 1 -# Number of relations describing the statement -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -4 5 2 0 0 1 -# e/i | i j | N | 1 - 1 1 0 0 0 ## i >= 0 - 1 -1 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 ## j >= 0 - 1 0 -1 1 -1 ## -j+N-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -5 10 5 2 0 1 -# e/i| s1 s2 s3 s4 s5 | i j | N | 1 - 0 -1 0 0 0 0 0 0 0 0 ## s1 = 0 - 0 0 -1 0 0 0 1 0 0 0 ## s2 = i - 0 0 0 -1 0 0 0 0 0 0 ## s3 = 0 - 0 0 0 0 -1 0 0 1 0 0 ## s4 = j - 0 0 0 0 0 -1 0 0 0 0 ## s5 = 0 - -# ---------------------------------------------- 1.3 Access -WRITE -3 8 3 2 0 1 -# e/i| Arr [1] [2] | i j | N | 1 - 0 -1 0 0 0 0 0 1 ## C - 0 0 -1 0 1 0 0 0 ## [i] - 0 0 0 -1 0 1 0 0 ## [j] - -# ---------------------------------------------- 1.4 Body -# Statement body is provided -1 -# Statement body - -# Number of original iterators -2 -# Original iterator names -i j -# Statement body expression -C[i][j] = 0.0; - - -# =============================================== Statement 2 -# Number of relations describing the statement -5 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -6 6 3 0 0 1 -# e/i| i j k | N | 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 0 ## j >= 0 - 1 0 -1 0 1 -1 ## -j+N-1 >= 0 - 1 0 0 1 0 0 ## k >= 0 - 1 0 0 -1 1 -1 ## -k+N-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -7 13 7 3 0 1 -# e/i| s1 s2 s3 s4 s5 s6 s7 | i j k | N | 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## s1 = 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## s2 = i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## s3 = 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 ## s4 = j - 0 0 0 0 0 -1 0 0 0 0 0 0 1 ## s5 = 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 ## s6 = k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## s7 = 0 - -# ---------------------------------------------- 2.3 Access -WRITE -3 9 3 3 0 1 -# e/i| Arr [1] [2] | i j k | N | 1 - 0 -1 0 0 0 0 0 0 1 ## C - 0 0 -1 0 1 0 0 0 0 ## [i] - 0 0 0 -1 0 1 0 0 0 ## [j] - -READ -3 9 3 3 0 1 -# e/i| Arr [1] [2] | i j k | N | 1 - 0 -1 0 0 0 0 0 0 1 ## C - 0 0 -1 0 1 0 0 0 0 ## [i] - 0 0 0 -1 0 1 0 0 0 ## [j] - -READ -3 9 3 3 0 1 -# e/i| Arr [1] [2] | i j k | N | 1 - 0 -1 0 0 0 0 0 0 2 ## A - 0 0 -1 0 1 0 0 0 0 ## [i] - 0 0 0 -1 0 0 1 0 0 ## [k] - -READ -3 9 3 3 0 1 -# e/i| Arr [1] [2] | i j k | N | 1 - 0 -1 0 0 0 0 0 0 3 ## B - 0 0 -1 0 0 0 1 0 0 ## [k] - 0 0 0 -1 0 1 0 0 0 ## [j] - -# ---------------------------------------------- 2.4 Body -# Statement body is provided -1 -# Statement body - -# Number of original iterators -3 -# Original iterator names -i j k -# Statement body expression -C[i][j] = C[i][j] + A[i][k] * B[k][j]; - - -# =============================================== Extensions - -May the power of the polyhedral model be with you. - - - -@end example - - -We will not describe here precisely the structure and the components of this -output, this is described in depth in a further section -(@pxref{OpenScop File Format Specification}). This format -has been designed to be a possible input or output file format of most of -polyhedral compilation tools. If you read the description of the polyhedral -representation of programs, you should already feel familiar with this file -format (@pxref{Polyhedral Representation}). - - -@c %/************************************************************************* -@c % * FILE FORMAT SPECIFICATION * -@c % *************************************************************************/ -@node OpenScop File Format Specification -@section OpenScop File Format Specification - -@menu -* Relations:: -* Generics:: -@end menu - -The following grammar describes the structure of the -OpenScop file format where terminals are preceeded by "_". Except -stated otherwise, there can be at most one terminal per line in the file. -Moreover, each line may finish with a comment, starting by the @samp{#} -character. Each relevant part will be explained in more details momentarily: - -@example -OpenScop ::= Start_tag Data End_tag -Start_tag ::= "" -End_tag ::= "" -Data ::= Context Statements Extension_list -Context ::= Language Parameter_Domain Parameters -Statements ::= Nb_statements Statement_list -Statement_list ::= Statement Statement_list | (void) -Relation_list ::= _Relation Relation_list | (void) -Extension_list ::= _Generic Extension_list | (void) -Statement ::= Statement_relations Body -Body ::= "0" | "1" Body_information -Parameters ::= "0" | "1" Parameter_information -Statement_relations ::= Nb_relations Relation_List -Parameter_domain ::= _Relation -Language ::= _String -Nb_Relations ::= _Integer -Parameter_information ::= _Generic -Body_information ::= _Generic -@end example - -The @samp{Context} and the @samp{Statements} parts compose the -@emph{core part}, i.e., what is strictly necessary to build -a complete source to source framework based on OpenSCop: -@itemize @bullet -@item @samp{Context} represents the global information of the SCoP. It - consists on the target language, the global constraints on the - parameters and optionally the parameter information which may be necessary - for the code generation process. The constraints on the parameters - are represented as a relation (@pxref{Context Domain Relation}). - The parameter information is optional. It is preceded by a - boolean which precises whether it is provided or not. - It is a generic information (@pxref{Generics}), a @code{strings} - (@pxref{Strings Generic}) for instance. -@item @samp{Statements} represents the information about the statements. - @samp{Nb_statements} is the number of statements in the SCoP, - i.e. the number of @samp{Statement} items in the @samp{Statement_list}. - @samp{Statement} represents the information on a given statement. - To each statement is associated a list of relations and, - optionaly, a body. The list of relations may include - one iteration domain (@pxref{Iteration Domain Relation}), - one scattering relation (@pxref{Scattering Relation}) - and several access relations (@pxref{Access Relation}). - There is no mandatory ordering, but for consistency reason it would - be much appreciated that iteration domain comes first (if present) - then scattering (if present), then accesses (if present). - The statement body is an optional information. It is preceded by a - boolean which precises whether it is provided or not. - It is a generic information (@pxref{Generics}), a @code{body} - (@pxref{Body Generic}) for instance. -@end itemize - -The @samp{Extension_list} represents the @emph{extension part} and may contain -an arbitrary number of generic informations (@pxref{Generics}). -Few examples of possible extensions are presented in a further -section (@pxref{Extensions}). - -As shown by the grammar, the input file describes the various pieces of -information based on strings, integers, @emph{relations} and @emph{generics}. -Relations and Generics are specific to OpenScop and are described in depth -in the following Sections (@pxref{Relations} and @pxref{Generics}). - - -@c %/************************************************************************* -@c % * RELATIONS * -@c % *************************************************************************/ -@node Relations -@subsection Relations - -@menu -* Iteration Domain Relation:: -* Context Domain Relation:: -* Scattering Relation:: -* Access Relation:: -@end menu - -@emph{Relations} are the essence of the OpenScop format and contain the -"polyhedral" information. They are used to describe either an iteration -domain, or a context domain, or a scattering or a memory access. - -We use the relation term as a shortcut to denote a -union of convex relations, each element of the union being described by a set of -constraints in an extended PolyLib format (@pxref{Wil93}). -The number of elements in the union is given by an integer on the first line, -optionally followed by a comment starting with @samp{#}. -This number of elements can be omitted when there is only one element. -Each element in the union has the following syntax: - -@enumerate -@item Some optional comment lines beginning with @samp{#}. -@item A line with the type of the relation, possibly followed by comments. - The type can be one of the following: - @itemize @bullet - @item @code{UNDEFINED}: generic relation, - @item @code{CONTEXT}: for context information, - @item @code{DOMAIN}: for iteration domains, - @item @code{SCATTERING}: for scattering relation, - @item @code{READ}: for read accesses, - @item @code{WRITE}: for write accesses, - @item @code{MAY_WRITE}: for may-write accesses, - @end itemize -@item A line with 6 numbers, possibly followed by comments: - @enumerate - @item the number of rows of the constraint matrix, - @item the number of columns of the constraint matrix, - @item the number of @emph{output dimensions}, - @item the number of @emph{input dimension}, - @item the number of @emph{local dimensions} - (existentially quantified dimensions), - @item the number of @emph{parameters}. - @end enumerate - The sum of the last four numbers should be equal to the number of columns - minus two. The remaining two columns are the equality/inequality - indicator and the constant term. The number of parameters should be the - same for all relations in the entire OpenScop file or data structure. -@item The constraint rows. Each row corresponds to a constraint the - relation has to satisfy. Each row must be on a single line and is possibly - followed by comments. The constraint is an equality @math{p(x) = 0} if the - first element is 0, an inequality @math{p(x) \geq 0} if the first element - is 1. The next elements are the coefficients of the output dimensions, - followed by coefficients of the input dimensions, the existentially - quantified dimensions and finally the parameters. - The last element is the constant term. -@end enumerate - -This representation is the basis for several purposes. Examples for -iteration domains (@pxref{Iteration Domain Relation}), context domains -(@pxref{Context Domain Relation}), scattering -relations (@pxref{Scattering Relation}) and -access relations (@pxref{Access Relation}) are provided in further sections. - -@c %/************************** ITERATION DOMAIN **************************** -@node Iteration Domain Relation -@subsubsection Iteration Domain Relation - -Iteration domain represents the set of instances of the corresponding statement. -OpenScop iteration domains are represented as relations with the following -conventions: -@itemize @bullet -@item the type is @code{DOMAIN}, -@item there is 0 input dimension, -@item loop iterators correspond to output dimensions. -@end itemize - -@noindent For instance, assuming that @samp{i}, @samp{j} and @samp{k} are the loop -iterators and @samp{M} and @samp{N} are the parameters, the domain defined by -the following constraints : - -@tex -$$ -\hbox{$ \cases{ -i + M &$\geq 0$\cr - -j + N &$\geq 0$\cr - i + j - k &$\geq 0$}$} -$$ -@end tex -@ifnottex -@example -@group - -i + M >= 0 - -j + N >= 0 -i + j - k >= 0 -@end group -@end example -@end ifnottex - -@noindent can be written in the input file as follows: - -@example -@group -# This is an iteration domain -DOMAIN -1 # Number of relations in the union -3 7 3 0 0 2 # 3 rows, 7 cols: 3 output dims and 2 params -# e/i| i j k | M N | 1 - 1 -1 0 0 1 0 0 # -i + M >= 0 - 1 0 -1 0 0 1 0 # -j + N >= 0 - 1 1 1 -1 0 0 0 # i + j - k >= 0 -@end group -@end example - -@noindent Equivalently, it can be written in the following way as the number -of relations in the union can be omitted if it is 1: - -@example -@group -# This is an iteration domain -DOMAIN -3 7 3 0 0 2 # 3 rows, 7 cols: 3 output dims and 2 params -# e/i| i j k | M N | 1 - 1 -1 0 0 1 0 0 # -i + M >= 0 - 1 0 -1 0 0 1 0 # -j + N >= 0 - 1 1 1 -1 0 0 0 # i + j - k >= 0 -@end group -@end example - -@noindent As an example for unions, let us consider the following pseudo-code: - -@example -@group -for (i = 1; i <= N; i++) @{ - if ((i >= M) || (i <= 2*M)) - S1(i); -@} -@end group -@end example - -@noindent The iteration domain of @samp{S1} can be divided into two -relations and written in the OpenScop file as follows: - -@example -@group -# This is an iteration domain -DOMAIN -2 # Number of relations in the union -# Union part No.1 -3 5 1 0 0 2 # 3 rows, 5 cols: 1 output dim and 2 params -# e/i| i | M N | 1 - 1 1 0 0 -1 # i >= 1 - 1 -1 0 1 0 # i <= N - 1 1 -1 0 0 # i >= M -# Union part No.2 -3 5 1 0 0 2 # 3 rows, 5 cols: 1 output dim and 2 params -# e/i| i | M N | 1 - 1 1 0 0 -1 # i >= 1 - 1 -1 0 1 0 # i <= N - 1 -1 2 0 0 # i <= 2*M -@end group -@end example - -@noindent As an example for local dimensions (existentially quantified -dimensions), let us consider the following pseudo-code: - -@example -@group -for (i = 1; i <= N; i++) @{ - if ((i % 2) == 0) - S1(i); -@} -@end group -@end example - -@noindent The iteration domain of @samp{S1} is composed of all even -integer values between 1 and N. The "divisible by two" constraint can -be expressed as follows: there exists an integer @samp{ld} such that -@samp{i = 2*ld}. We encode this thanks to a new local dimension: - -@example -@group -# This is an iteration domain -DOMAIN -3 5 1 0 1 1 # 3 rows, 5 cols: 1 output dim, 1 local dim, 1 param -# e/i| i |ld | N | 1 - 0 1 -2 0 0 # i = 2*ld - 1 1 0 0 1 # i >= 1 - 1 -1 0 1 0 # i <= N -@end group -@end example - - -@c %/************************** CONTEXT DOMAIN ****************************** -@node Context Domain Relation -@subsubsection Context Domain Relation - -The context domain is a particular case of iteration domain -(@pxref{Iteration Domain Relation}) where there are only -constraints about parameters (no loop iterators). Hence it is the same -as an iteration domain, with the following conventions: -@itemize @bullet -@item the type is @code{CONTEXT}, -@item there is 0 input dimension, -@item there is 0 output dimension. -@end itemize - - -@c %/************************* SCATTERING RELATION ************************** -@node Scattering Relation -@subsubsection Scattering Relation - -Scattering relation maps an iteration domain to a logical time and/or -space (and/or) anything. -OpenScop scattering information is represented as relations -(@pxref{Relations}) with the following conventions: - -@itemize @bullet -@item the type is @code{SCATTERING}, -@item output dimensions correspond to scattering dimensions, -@item loop iterators correspond to input dimensions. -@end itemize - -As an example of a scattering relation and -assuming that @samp{i}, @samp{j} and @samp{k} are the loop -iterators and @samp{M} and @samp{N} are the parameters, take for instance: -@tex -$\theta_{S}(i,j,k) = (j+2,3*i+j,k+N+1).$ -@end tex -@ifnottex -@example -T_@{S@}(i,j,k) = (j+2,3*i+j,k+N+1). -@end example -@end ifnottex -We can represent it in the following way: - -@example -@group -# A scattering relation -SCATTERING -# 3 rows, 10 columns: 3 scattering dimensions, 3 iterators, 2 parameters -3 10 3 3 0 2 -# e/i|s1 s2 s3 | i j k | M N | 1 - 0 -1 0 0 0 1 0 0 0 2 # s1 = j+2 - 0 0 -1 0 3 1 0 0 0 0 # s2 = 3*i+j - 0 0 0 -1 0 0 1 0 1 1 # s3 = k+N+1 -@end group -@end example - -@c %/************************** ACCESS RELATION ***************************** -@node Access Relation -@subsubsection Access Relation - -Access relation maps an iteration domain to an array space. -Each array accessed in the SCoP has a unique identification number. -OpenScop relation information is represented as relations -(@pxref{Relations}) with the following conventions: - -@itemize @bullet -@item the type is one of the following: - @itemize @bullet - @item @code{READ}, for read accesses, - @item @code{WRITE}, for write accesses, - @item @code{MAY_WRITE}, for may write accesses, - @end itemize -@item output dimensions correspond to the array identifier and dimensions, -@item the first output dimension corresponds to the array identifier, -@item the (i+1)th output dimension corresponds to the ith array dimension (i>1), -@item loop iterators correspond to input dimensions. -@end itemize - -As an example of a scattering relation and -assuming that @samp{i}, @samp{j} and @samp{k} are the loop -iterators and @samp{M} and @samp{N} are the parameters, let us consider -the array access @code{A[2*i+j][j][i+N]} (the identifier of @code{A} is 42), -and let us suppose this is a read access. Its representation would be the -following: - -@example -@group -# A read access relation -READ -# 4 rows, 11 columns: 4 array dimensions, 3 iterators, 2 parameters -4 11 4 3 0 2 -# e/i|Arr [1] [2] [3]| i j k | M N | 1 - 0 -1 0 0 0 0 0 0 0 0 42 # A - 0 0 -1 0 0 2 1 0 0 0 0 # [2*i+j] - 0 0 0 -1 0 0 1 0 0 0 0 # [j] - 0 0 0 0 -1 1 0 0 0 1 0 # [i+N] -@end group -@end example - -To understand this representation, consider that OpenScop accesses -are general memory accesses and not array accesses. The memory is -seen as a big array @code{Mem} while usual array names correspond to -the first dimension. Hence our example translates to @code{Mem[42][2*i+j][j][i+N]}. - -Unions of access relations are allowed. In this case, each union part must -refer at the same array identifier, and the number of dimensions must be -consistent. - -@c %/************************************************************************* -@c % * GENERICS * -@c % *************************************************************************/ -@node Generics -@subsection Generics -@menu -* Strings Generic:: -* Body Generic:: -@end menu - -@emph{Generics} represent any elaborated non-polyhedral information in the -OpenScop format. They are used to represent the parameter information, the -statement body information as well as the extensions. Each generic information -is delimited using XML-like tags corresponding to its URI (Unique Resource -Identifier), For instance, if the generic has the URI @code{foo}, the begin -tag is @code{} and the end tag is @code{}). - -Two generics, namely @code{strings} (@pxref{Strings Generic}) and -@code{body} (@pxref{Body Generic}) are part of the OpenScop -specification to provide the minimum, stricly necessary information to -build a complete source-to-source polyhedral framework based on OpenScop. -However, generics can be basically @emph{anything} as long as they are -properly delimited. OpenScop implementations will simply ignore -non-supported generics and warn the user with the mention of the -non-supported URIs. Support of new generics will be added throught the -extension mechanism. - -@c --------------------------------------------------------------------------- - -@node Strings Generic -@subsubsection Strings Generic - -The purpose of the @code{strings} generic is to represent a list of -textual strings on one line (which may be used, e.g., to represent the list of -parameter names in the order used in the relation). Its URI is @code{strings} -and its file format respects the following grammar: -@example -Strings_generic ::= "" Strings "" -Strings ::= _String String_list | (void) -@end example - -@noindent A possible example of textual @code{strings} is the following: -@example -@group - -Not one sentence but 6 strings! - -@end group -@end example - -@c --------------------------------------------------------------------------- - -@node Body Generic -@subsubsection Body Generic - -The purpose of the @code{body} generic is to represent the textual -information about a statement. It contains the number of original iterators on -the first line, the list of original iterators on the second -line (the loop counters of the statement surrounding loops in the original -program) and the original textual body expression on the third line. -Its URI is @code{body} and its file format respects the following grammar -(the @code{String} rule is reused, @pxref{Strings Generic}): -@example -Body_generic ::= "" Body "" -Body ::= Nb_iterators Iterator_list Expression -Nb_iterators ::= _Integer -Iterator_list ::= Strings -Expression ::= Strings -@end example - -@noindent A possible example of textual @code{body} is the following: -@example -@group - -# Number of original iterators -2 -# Original iterators -i j -# Original statement expression -A[i+j] += B[i] * C[j]; - -@end group -@end example - - -@c %/************************************************************************* -@c % * DATA STRUCTURE SPECIFICATION * -@c % *************************************************************************/ -@node OpenScop Data Structure Specification -@section OpenScop Data Structure Specification - -@menu -* osl_relation_t:: -* osl_relation_list_t:: -* osl_interface_t:: -* osl_generic_t:: -* osl_strings_t:: -* osl_body_t:: -* osl_statement_t:: -* osl_scop_t:: -@end menu - -The OpenScop specification offers a small set of C data structures devoted to -represent a SCoP in memory in a convenient way. Using them in some tool or -library may greatly facilitate its interaction with other tools or libraries -which rely on this representation as well. Every field may not be useful for -a given tool or library. A general rule for all the data structure is -that a @code{NULL} pointer or a -1 integer value means the information is -not present. Contrary to engineering time, memory is cheap today, so it's much -probably not a big deal that some fields are left empty. Every field may not -be enough for a given tool or library. In this case it is much recommended -to provide a new extension which may be reused by other users -(@pxref{Extensions}). - -Each tool or library may have its own implementation of the OpenScop -data structures. The type names should not be the same as those provided -as an example here (they correspond to the OpenScop Library implementation). -The names of the fields, and their ordering, should however be the same. In this -way, the interaction between tools and libraries should be as simple as a cast. - -Before reading at the OpenScop data structures, it is much recommended to -read at the OpenScop file format description, as it is quite close to this -representation (@pxref{OpenScop File Format Specification}). - - -@node osl_relation_t -@subsection osl_relation_t - -@example -@group -struct osl_relation @{ - int type; /* What this relation is encoding */ - int precision; /* Precision of the matrix elements */ - int nb_rows; /* Number of rows */ - int nb_columns; /* Number of columns */ - int nb_output_dims; /* Number of output dimensions */ - int nb_input_dims; /* Number of input dimensions */ - int nb_local_dims; /* Number of local dimensions */ - int nb_parameters; /* Number of parameters */ - void ** m; /* Matrix of constraints */ - struct osl_relation * next; /* Next relation in the union */ -@}; -typedef struct osl_relation osl_relation_t; -typedef struct osl_relation * osl_relation_p; -@end group -@end example - -@noindent The @code{osl_relation_t} structure stores a part of an -union of relations. A union of relation is a @code{NULL}-terminated -linked list of union parts (@code{next} field). The @code{type} field -may provide some information about what the relation is encoding: -@itemize @bullet -@item -1: undefined (@code{OSL_UNDEFINED}), -@item 2: context domain (@code{OSL_TYPE_CONTEXT}), -@item 3: iteration domain (@code{OSL_TYPE_DOMAIN}), -@item 4: scattering relation (@code{OSL_TYPE_SCATTERING}), -@item 6: read access relation (@code{OSL_TYPE_READ}), -@item 7: write access relation (@code{OSL_TYPE_WRITE}), -@item 8: may write access relation (@code{OSL_TYPE_MAY_WRITE}), -@end itemize -The various numbers provide the details on the relation itself -(@pxref{Relations}) while the @code{m} field points to -the constraint matrix. The precision of the constraint matrix elements is -provided by the @code{precision} field. It can take the following -values: -@itemize @bullet -@item 32: 32 bits precision, elements are @code{long int} - (@code{OSL_PRECISION_SP}), -@item 64: 64 bits precision, elements are @code{long long int} - (@code{OSL_PRECISION_DP}), -@item 0: multiple precision, elements are GNU GMP Library's - @code{mpz_t} (@code{OSL_PRECISION_MP}). -@end itemize - -@c --------------------------------------------------------------------------- - -@node osl_relation_list_t -@subsection osl_relation_list_t - -@example -@group -struct osl_relation_list @{ - osl_relation_p elt; /* Element of the list */ - struct osl_relation_list * next; /* Next element of the list */ -@}; -typedef struct osl_relation_list osl_relation_list_t; -typedef struct osl_relation_list * osl_relation_list_p; -@end group -@end example - -@noindent The @code{osl_relation_list_t} structure is a @code{NULL}-terminated -linked list of @code{osl_relation_t} data structures. -@code{elt} is a relation element of the list and @code{next} is the pointer to -the next element of the list. - -@c --------------------------------------------------------------------------- - -@node osl_interface_t -@subsection osl_interface_t - -@example -@group -typedef void (*osl_idump_f) (FILE *, void *, int); -typedef char * (*osl_sprint_f)(void *); -typedef void * (*osl_sread_f) (char *); -typedef void * (*osl_malloc_f)(); -typedef void (*osl_free_f) (void *); -typedef void * (*osl_clone_f) (void *); -typedef int (*osl_equal_f) (void *, void *); - -struct osl_interface @{ - char * URI; /* Unique interface identifier string */ - osl_idump_f idump; /* Pointer to the idump function */ - osl_sprint_f sprint; /* Pointer to the sprint function */ - osl_sread_f sread; /* Pointer to the sread function */ - osl_malloc_f malloc; /* Pointer to the malloc function */ - osl_free_f free; /* Pointer to the free function */ - osl_clone_f clone; /* Pointer to the clone function */ - osl_equal_f equal; /* Pointer to the equal function */ - struct osl_interface * next; /* Next interface in the list */ -@}; -typedef struct osl_interface osl_interface_t; -typedef struct osl_interface * osl_interface_p; -@end group -@end example - -@noindent The @code{osl_interface_t} structure represents a -node in a @code{NULL}-terminated list of interfaces. Each node stores the -@emph{interface} of a generic OpenScop object, i.e., its unique name -(@code{URI}) and the function pointers to all the base functions it has -to provide. Extension providers will find information relative to those -functions in the OpenScop Library description (@pxref{Base Functions}) -and the section dedicated to writing extensions -(@pxref{Extension Development}). - -@c --------------------------------------------------------------------------- - -@node osl_generic_t -@subsection osl_generic_t - -@example -@group -struct osl_generic @{ - void * data; /* Pointer to some data */ - osl_interface_p interface; /* Interface to work with the data */ - struct osl_generic * next; /* Pointer to the next generic */ -@}; -typedef struct osl_generic osl_generic_t; -typedef struct osl_generic * osl_generic_p; -@end group -@end example - -@noindent The @code{osl_generic_t} structure represents a node in a -@code{NULL}-terminated list of generic elements. It stores some data -and operations with no pre-defined type. The information is accessible -through the @code{data} pointer while the type and operations are -accessible through the @code{interface} pointer. It is used to represent -data that are allowed to differ in implementations, such as symbols and -extensions. - -@c --------------------------------------------------------------------------- - -@node osl_strings_t -@subsection osl_strings_t - -@example -@group -struct osl_string @{ - char ** string; /* NULL-terminated array of strings */ -@}; -typedef struct osl_strings osl_strings_t; -typedef struct osl_strings * osl_strings_p; -@end group -@end example - -@noindent The @code{osl_strings_t} structure represents a NULL-terminated -list of C character strings. It is encapsulated into a structure to allow -its manipulation through a generic type. - -@c --------------------------------------------------------------------------- - -@node osl_body_t -@subsection osl_body_t - -@example -@group -struct osl_body @{ - osl_strings_p iterators; /* Original iterators */ - osl_strings_p expression; /* Original statement expression */ -@}; -typedef struct osl_body osl_body_t; -typedef struct osl_body * osl_body_p; -@end group -@end example - -@noindent The @code{osl_body_t} structure stores a statement body in a -textual form. The complete original expression (directly copy-pasted -from the original code) is in the expression field while the textual forms -of the original iterators are in the iterators field. They may be used for -substitutions inside the expression. - -@c --------------------------------------------------------------------------- - -@node osl_statement_t -@subsection osl_statement_t - -@example -@group -struct osl_statement @{ - osl_relation_p domain; /* Iteration domain */ - osl_relation_p scattering; /* Scattering relation */ - osl_relation_list_p access; /* List of array access relations */ - osl_generic_p body; /* Original statement body */ - void * usr; /* A user-defined field */ - struct osl_statement * next; /* Next statement in the list */ -@}; -typedef struct osl_statement osl_statement_t; -typedef struct osl_statement * osl_statement_p; -@end group -@end example - -@noindent The @code{osl_statement_t} structure represents a node -in a @code{NULL}-terminated linked list of statements. Each node contains the -useful information for a given statement to process it within a polyhedral -framework. The order in the list may matter for naming conventions -(e.g. "S1" for the first statement in the list). The iteration domain -and the scattering are represented using an @code{osl_relation_p} -structure while the accesses are using a list of -relations: one for each memory access in the statement. -The @code{body} field should provide information about the statement body -(since it has a generic type, the specification is not strict about how it -is used), e.g., using the @code{osl_body_t} data structure (@pxref{osl_body_t}). -It is also possible to use the @code{usr} field, but it has to be -totally managed by the user. - -@c --------------------------------------------------------------------------- - -@node osl_scop_t -@subsection osl_scop_t -@example -@group -struct osl_scop @{ - int version; /* Version of the data structure */ - char * language; /* Target language */ - osl_relation_p context; /* Constraints on the parameters */ - osl_generic_p parameters; /* Information about parameters */ - osl_statement_p statement; /* Statement list */ - osl_interface_p registry; /* Registered extension interfaces */ - osl_generic_p extension; /* Extension list */ - void * usr; /* A user-defined field */ - struct osl_scop * next; /* Next scop in the list */ -@}; -typedef struct osl_scop osl_scop_t; -typedef struct osl_scop * osl_scop_p; -@end group -@end example - -@noindent @code{osl_scop_t} represents a node in a -@code{NULL}-terminated list of scops. It stores the useful informations -of a static control part of a program to process it within a polyhedral -framework. To prepare OpenScop specification evolution, the @code{version} -field tells the version of the data structure. It should be set to 1 for -now (and hopefully a very, very, long time). -First, it contains the informations about the context. The target language -in expressed in the @code{language} field. The constraints on the -global parameters are detailed in the @code{context} field. -The @code{paremeters} field should provide information about the -parameters (since it has a generic type, the specification is not strict -about how it is used), e.g., using the @code{osl_strings_t} data structure -(@pxref{osl_strings_t}). -Finally, it contains the list of statements @code{statement}, the list -of registered interfaces for generic types @code{registry} and the list of -extentions @code{extension}. -It is also possible to use the @code{usr} field, but it has to be -totally managed by the user. - -As an example, let us consider again the matrix multiply program -(@pxref{Preliminary Example}). -The next figure gives a possible representation in memory for this -SCoP thanks to the OpenScop data structures (it has been actually printed -by the @code{osl_scop_dump} function), note that symbols like -parameters, original iterators and statement expression are represented -with an @code{osl_strings_t} which does not belong to the -specification but to the OpenScop Library implementation: - -@c @smallexample -@example -+-- osl_scop_t -| | -| Version: 1 -| | -| Language: C -| | -| +-- osl_relation_t (CONTEXT, 32 bits) -| | 1 3 0 0 0 1 -| | [ 1 1 -1 ] -| | -| +-- osl_generic_t -| | | -| | +-- osl_interface_t: URI = strings -| | | -| | +-- osl_strings_t: N -| | | -| | -| +-- osl_statement_t (S1) -| | | -| | +-- osl_relation_t (DOMAIN, 32 bits) -| | | 4 5 2 0 0 1 -| | | [ 1 1 0 0 0 ] -| | | [ 1 -1 0 1 -1 ] -| | | [ 1 0 1 0 0 ] -| | | [ 1 0 -1 1 -1 ] -| | | -| | +-- osl_relation_t (SCATTERING, 32 bits) -| | | 5 10 5 2 0 1 -| | | [ 0 -1 0 0 0 0 0 0 0 0 ] -| | | [ 0 0 -1 0 0 0 1 0 0 0 ] -| | | [ 0 0 0 -1 0 0 0 0 0 0 ] -| | | [ 0 0 0 0 -1 0 0 1 0 0 ] -| | | [ 0 0 0 0 0 -1 0 0 0 0 ] -| | | -| | +-- osl_relation_list_t -| | | | -| | | +-- osl_relation_t (WRITE, 32 bits) -| | | | 3 8 3 2 0 1 -| | | | [ 0 -1 0 0 0 0 0 1 ] -| | | | [ 0 0 -1 0 1 0 0 0 ] -| | | | [ 0 0 0 -1 0 1 0 0 ] -| | | | -| | | -| | +-- osl_generic_t -| | | | -| | | +-- osl_interface_t: URI = body -| | | | -| | | +-- osl_strings_t: i j -| | | | -| | | +-- osl_strings_t: C[i][j] = 0.0; -| | | | -| | | -| | V -| | osl_statement_t (S2) -| | | -| | +-- osl_relation_t (DOMAIN, 32 bits) -| | | 6 6 3 0 0 1 -| | | [ 1 1 0 0 0 0 ] -| | | [ 1 -1 0 0 1 -1 ] -| | | [ 1 0 1 0 0 0 ] -| | | [ 1 0 -1 0 1 -1 ] -| | | [ 1 0 0 1 0 0 ] -| | | [ 1 0 0 -1 1 -1 ] -| | | -| | +-- osl_relation_t (SCATTERING, 32 bits) -| | | 7 13 7 3 0 1 -| | | [ 0 -1 0 0 0 0 0 0 0 0 0 0 0 ] -| | | [ 0 0 -1 0 0 0 0 0 1 0 0 0 0 ] -| | | [ 0 0 0 -1 0 0 0 0 0 0 0 0 0 ] -| | | [ 0 0 0 0 -1 0 0 0 0 1 0 0 0 ] -| | | [ 0 0 0 0 0 -1 0 0 0 0 0 0 1 ] -| | | [ 0 0 0 0 0 0 -1 0 0 0 1 0 0 ] -| | | [ 0 0 0 0 0 0 0 -1 0 0 0 0 0 ] -| | | -| | +-- osl_relation_list_t -| | | | -| | | +-- osl_relation_t (WRITE, 32 bits) -| | | | 3 9 3 3 0 1 -| | | | [ 0 -1 0 0 0 0 0 0 1 ] -| | | | [ 0 0 -1 0 1 0 0 0 0 ] -| | | | [ 0 0 0 -1 0 1 0 0 0 ] -| | | | -| | | V -| | | osl_relation_list_t -| | | | -| | | +-- osl_relation_t (READ, 32 bits) -| | | | 3 9 3 3 0 1 -| | | | [ 0 -1 0 0 0 0 0 0 1 ] -| | | | [ 0 0 -1 0 1 0 0 0 0 ] -| | | | [ 0 0 0 -1 0 1 0 0 0 ] -| | | | -| | | V -| | | osl_relation_list_t -| | | | -| | | +-- osl_relation_t (READ, 32 bits) -| | | | 3 9 3 3 0 1 -| | | | [ 0 -1 0 0 0 0 0 0 2 ] -| | | | [ 0 0 -1 0 1 0 0 0 0 ] -| | | | [ 0 0 0 -1 0 0 1 0 0 ] -| | | | -| | | V -| | | osl_relation_list_t -| | | | -| | | +-- osl_relation_t (READ, 32 bits) -| | | | 3 9 3 3 0 1 -| | | | [ 0 -1 0 0 0 0 0 0 3 ] -| | | | [ 0 0 -1 0 0 0 1 0 0 ] -| | | | [ 0 0 0 -1 0 1 0 0 0 ] -| | | | -| | | -| | +-- osl_generic_t -| | | | -| | | +-- osl_interface_t: URI = body -| | | | -| | | +-- osl_strings_t: i j k -| | | | -| | | +-- osl_strings_t: C[i][j] = C[i][j] + A[i][k]*B[k][j]; -| | | | -| | | -| | -| +-- NULL interface -| | -| +-- NULL generic -| | -| -@end example -@c @end smallexample - - -@c %/************************************************************************* -@c % * EXTENSIONS * -@c % *************************************************************************/ -@node Extensions -@section Extensions - -The core part of the OpenScop representation embeds what is strictly -necessary to build a complete source-to-source polyhedral framework. -However it may not be enough. Hence, OpenScop offers a very flexible -extension part. Actually, the only constraint to build an extension is -to request the OpenScop maintainer for a unique extension name: its URI -(ask the maintainer through the OpenScop mailing list -@email{openscop-development@@googlegroups.com}). - -The policy to support extensions is the following and is pretty simple: an -OpenScop implementation is not required to support any extension. If it -is processing an OpenScop file or data structure which contains an -extension which is not supported, it must (1) warn the user with the -mention of the URI of the non-supported extension -and (2) ignore this extension. - -Extensions in an OpenScop file are provided after the core part, without -any specific order. Each extension is delimited using -XML-like tags corresponding to its URI (e.g., if the extension has the URI -@code{foo}, the begin tag is @code{} and the end tag is @code{}). -There is no specification or preferred way to write the extension body. -Extensions in an OpenScop data structure must be accessible through one -pointer. This pointer will be stored in the @code{data} field of an -@code{osl_generic_t} container (@pxref{osl_generic_t}). There must be only -one extension with the same URI in an OpenScop file or data structure. - -Extension writers may write a short documentation about their extension to -be added to this document. For consistency reason, this -documentation should comply to the documentation of the -@code{comment} option (@pxref{Comment Extension}). To describe the -file format, it is allowed to reuse the existing rules and terminals -present in the OpenScop file format description without defining them -(@pxref{OpenScop File Format Specification}). By sending a -documentation, you accept it to be added to this document. In -particular, the sender fully accepts the license and copyright notice. - -@menu -* Comment Extension:: -* Arrays Extension:: -* Scatnames Extension:: -* Lines Extension:: -* Irregular Extension:: -@end menu - -@c --------------------------------------------------------------------------- - -@node Comment Extension -@subsection Comment Extension - -@noindent @strong{Description} -@itemize @bullet -@item URI: @code{comment}. -@item Author: C@'edric Bastoul . -@item Purpose: the @code{comment} extension stores a textual string. -@end itemize - -@noindent @strong{File Format} - -@noindent The @code{comment} extension file format respects the following -grammar: -@example -Comment_generic ::= "" Comment "" -Comment ::= _Text -@end example - -@noindent An example of textual @code{comment} extension is the following: -@example -@group - -This is a comment string. - -@end group -@end example - -@noindent @strong{Data Structure} - -@noindent The @code{comment} extension data structure is the following: -@example -@group -struct osl_comment @{ - char * comment; /* Comment message as a 0-terminated string */ -@}; -typedef struct osl_comment osl_comment_t; -typedef struct osl_comment * osl_comment_p; -@end group -@end example - -@c --------------------------------------------------------------------------- - - -@node Scatnames Extension -@subsection Scatnames Extension - -@noindent @strong{Description} -@itemize @bullet -@item URI: @code{scatnames}. -@item Author: C@'edric Bastoul . -@item Purpose: the @code{scatnames} extension provides a list of textual -scattering dimension names. -@end itemize - -@noindent @strong{File Format} - -@noindent The @code{scatnames} extension file format respects the following -grammar. It reuses the @code{Strings} description (@pxref{Strings Generic}): -@example -Scatnames_generic ::= "" Scatnames "" -Scatnames ::= Strings -@end example - -@noindent The list of scattering dimension names is provided on one single -line. The names are separated with spaces. A possible -example of such an extension is the following: - -@example -@group - -# List of scattering dimension names: -beta_0 i beta_1 j beta_2 - -@end group -@end example - -@noindent @strong{Data Structure} - -@noindent The @code{scatnames} extension data structure is the following: - -@example -@group -struct osl_scatnames @{ - osl_strings_p names; /* List of textual scattering dimension names. */ -@}; -typedef struct osl_scatnames osl_scatnames_t; -typedef struct osl_scatnames * osl_scatnames_p; -@end group -@end example - -@noindent The order of the scattering dimension names in the list corresponds -to the order of the scattering dimensions. - -@c --------------------------------------------------------------------------- - - -@node Arrays Extension -@subsection Arrays Extension - -@noindent @strong{Description} -@itemize @bullet -@item URI: @code{arrays}. -@item Author: C@'edric Bastoul . -@item Purpose: the @code{arrays} extension provides a set of textual array -names corresponding to the array identifiers used in the access relations. -@end itemize - -@noindent @strong{File Format} - -@noindent The @code{arrays} extension file format respects the following -grammar: -@example -Arrays_generic ::= "" Arrays "" -Arrays ::= Nb_items Item_list -Item_List ::= Item Item_list | (void) -Item ::= Identifier Name -Nb_items ::= _Integer -Identifier ::= _Integer -Name ::= _String -@end example - -@noindent The number of array names is provided on the first line, -then each following line contains a couple identifier-name. -For instance, the following example is a correct textual @code{arrays} -extension. It corresponds to the array names of the preliminary example -(@pxref{Preliminary Example}): - -@example -@group - -# Number of array names: -3 -1 C # Identifier 1 corresponds to array name "C" -3 B # Identifier 3 corresponds to array name "B" -2 A # Identifier 2 corresponds to array name "A" - -@end group -@end example - -@noindent @strong{Data Structure} - -@noindent The @code{arrays} extension data structure is the following: - -@example -@group -struct osl_arrays @{ - int nb_names; /* Number of names */ - int * id; /* Array of nb_names identifiers */ - char ** names; /* Array of nb_names names */ -@}; -typedef struct osl_arrays osl_arrays_t; -typedef struct osl_arrays * osl_arrays_p; -@end group -@end example - -@noindent Each name has a name string and an identifier: the ith name has name -string @code{names[i]} and identifier @code{id[i]}. - - -@c --------------------------------------------------------------------------- - -@node Lines Extension -@subsection Lines Extension - -@c --------------------------------------------------------------------------- - -@node Irregular Extension -@subsection Irregular Extension - - -@c --------------------------------------------------------------------------- - -@node History -@section History - -OpenScop is a follow-up of Louis-No@"el Pouchet et al.'s ScopLib effort which -was itself based on C@'edric Bastoul et al.'s Clan tool. People involved in -OpenScop's genesis are: -@itemize @bullet -@item C@'edric Bastoul -@item Uday Bondhugula -@item Tobias Grosser -@item Louis-No@"el Pouchet -@item Sven Verdoolaege -@end itemize - -@c %/************************************************************************* -@c % * OpenScop LIBRARY * -@c % *************************************************************************/ - -@node OpenScop Library -@chapter OpenScop Library - -The OpenScop Library, or OSL for short, is an example implementation of the -OpenScop specification. Its API is not part of the OpenScop specification. -It offers basic functionalities to manipulate the OpenScop data structures -(allocate, free, copy, dump, etc.) and file format (read, print, etc.). -The OpenScop Library is @emph{not} a polyhedral library. OpenScop is an -exchange format, and the OpenScop Library reflects this. - -It is a Free Software using the 3-clause BSD License. -Programmers should feel free to use -it or copy/paste its code in any project, Open Source or not@footnote{Closed -source projects should consider to provide some OpenScop file input -and output, so they can be incorporated to any OpenScop-based tool chain.}. - -@menu -* Precision:: -* Base Functions:: -* Example of OpenScop Library Utilization:: -* Installation:: -* Documentation:: -* Development:: -@end menu - -@node Precision -@section Precision - -The OpenScop specification does not impose a specific type for the -constraint matrix elements. For a maximum flexibility, the OpenScop Library -offers an hybrid precision implementation. It supports 32 bits, 64 bits and -multiple precision (relying on GNU GMP) relations transparently. At relation -allocation time, users have two ways to set the precision. The first way is -to call an allocation function with a precision parameter. The second way is -to rely on the environment variable @code{OSL_PRECISION}. -The accepted values for this variable are @code{32} for 32 bits precision, -@code{64} for 64 bits precision and @code{0} for multiple precision. When this -variable is set, its value becomes the default precision for relation elements. -For instance, to ensure the OpenScop Library will use 64 bits precision -by default, the user may set: -@example -export OSL_PRECISION=64 -@end example -@noindent if his shell is, e.g., bash or -@example -setenv OSL_PRECISION 64 -@end example -@noindent if his shell is, e.g., tcsh. The user should ad this line to -his .bashrc or .tcshrc (or whatever convenient file) to make this -setting permanent. - -@node Base Functions -@section Base Functions - -The OpenScop Library provides, for each OpenScop data structure, -a set of functions devoted to basic manipulation, conversion -from file format to data structures and from data structures to -file format. The naming convention is consistent for all data -structures. Hence, the function prototypes differ only with the -name of the data structure. In the following, we will use the -generic term of @emph{structure} to refer at any OpenScop -data structure. For instance the -@code{osl_}@emph{structure}@code{_malloc()} function is a -generic name can be instantiated to -@code{osl_relation_malloc()} or -@code{osl_statement_malloc()} etc. - -We present in this documentation only -the main functions. Many other utility functions are provided -to ease OpenScop format manipulation. The reader is invited to -refer at the technical documentation to learn everything about the -OpenScop Library. - -@menu -* Dumping:: -* Printing:: -* Reading:: -* Allocating:: -* Deallocating:: -* Cloning:: -* Testing:: -@end menu - - -@node Dumping -@subsection Dumping: osl_@emph{structure}_dump and idump - -@example -@group -void osl_@emph{structure}_dump(FILE * output, osl_@emph{structure}_p s); -void osl_@emph{structure}_idump(FILE * output, osl_@emph{structure}_p s, int i); -@end group -@end example - -@noindent Each OpenScop data structure has a dumping functions -as shown above. Dumping means writing down the content of the data -structure pointed by @code{s} (and its fields recursively) -in a textual form to the -@code{output} file (the file, possibly @code{stdout}, has to be open -for writing). The textual form is not the OpenScop file format but -another representation closer to the internal representation in -memory and mainly intended for debugging purpose. The @code{idump} -function has an additional integer parameter which corresponds to -an indentation level. - -@node Printing -@subsection Printing: osl_@emph{structure}_print - -@example -@group -void osl_@emph{structure}_print(FILE * output, osl_@emph{structure}_p s); -@end group -@end example - -@noindent Each OpenScop data structure has a pretty printing function -as shown above. It prints the content of the data -structure pointed by @code{s} (and its fields recursively) -according to the OpenScop file format -(@pxref{OpenScop File Format Specification}) to the -@code{output} file (the file, possibly @code{stdout}, has to be open -for writing). - -@node Reading -@subsection Reading: osl_@emph{structure}_read - -@example -@group -osl_@emph{structure}_p osl_@emph{structure}_read(FILE * input); -@end group -@end example - -@noindent Each OpenScop data structure has a reading function -as shown above. It reads the content of an OpenScop -data structure written according to the OpenScop file format -(@pxref{OpenScop File Format Specification}) from -the @code{input} file (the file, possibly @code{stdin}, has to be open -for reading). It returns a pointer to a freshly allocated -@code{osl_@emph{structure}_t} structure containing the -information. - -@node Allocating -@subsection Allocating: osl_@emph{structure}_malloc - -@example -@group -osl_@emph{structure}_p osl_@emph{structure}_malloc(); -@end group -@end example - -@noindent Each OpenScop data structure has a memory allocation function -as shown above (except one see below). It allocates the memory to store -the corresponding data structure, it initializes the pointer fields to -@code{NULL} and the integer fields to @code{OSL_UNDEFINED} -(@code{-1}) and it returns a pointer to the allocated space. - -An exception to this base description is the -@code{osl_relation_malloc()} function which requires two -parameters: the number of rows and columns of the constraint -matrix (@pxref{Relations}): - -@example -@group -osl_relation_p osl_relation_malloc(int nb_rows, int nb_columns); -@end group -@end example - -@noindent The precision of the relation elements will depend on the -@code{OSL_PRECISION} environment variable (@pxref{Precision}) if it is set, -or the maximum available precision if it is not set. Another allocation -function is provided to explicitly set a given precision: - -@example -@group -osl_relation_p osl_relation_pmalloc(int precision, - int nb_rows, int nb_columns); -@end group -@end example - -@noindent The @code{precision} field may take the following values: -@itemize @bullet -@item @code{OSL_PRECISION_SP} for 32 bits precision, -@item @code{OSL_PRECISION_DP} for 64 bits precision, -@item @code{OSL_PRECISION_MP} for multiple precision, -@end itemize - -@node Deallocating -@subsection Deallocating: osl_@emph{structure}_free - -@example -@group -void osl_@emph{structure}_free(osl_@emph{structure}_p s); -@end group -@end example - -@noindent Each OpenScop data structure has a memory deallocation function -as shown above. It recursively frees the memory allocated for the -structure pointed by @code{s}, i.e., internal structures are also freed. - -@node Cloning -@subsection Cloning: osl_@emph{structure}_clone - -@example -@group -osl_@emph{structure}_p osl_@emph{structure}_clone(osl_@emph{structure}_p s); -@end group -@end example - -@noindent Each OpenScop data structure has a clone function -as shown above. It recursively copies the content of the -structure pointed by @code{s}, i.e., internal structures are also copied. -It returns a pointer to the clone of the structure pointed by @code{s}. - -@node Testing -@subsection Testing: osl_@emph{structure}_equal - -@example -@group -int osl_@emph{structure}_equal(osl_@emph{structure}_p s1, osl_@emph{structure}_p s2); -@end group -@end example - -@noindent Each OpenScop data structure has a testing function -as shown above. It checks whether two pointers are referring to equivalent -structures (either by pointing to the same structure or to different -structures which contain the same information). It returns 1 if the -pointed structures are equivalent, 0 otherwise. This test is -@emph{content-based} and is intended for debugging purpose. It is not -(and will never be) able to state, e.g., that two relations with -different constraint matrices are actually representing the same relation. - - -@node Example of OpenScop Library Utilization -@section Example of OpenScop Library Utilization -Here is a basic example showing how it is possible to use the -OpenScop Library, assuming that a standard installation has been done. -The following C program reads an OpenScop file from the standard -input and dumps the content of the data structures to the standard output. - -@example -/* example.c */ -# include -# include - -int main() @{ - osl_scop_p scop; - - // Read the OpenScop file. - scop = osl_scop_read(stdin); - - // Dump the content of the scop data structure. - osl_scop_dump(stdout, scop); - - // Save the planet. - osl_scop_free(scop); - - return 0; -@} -@end example - -@noindent The compilation command could be: -@example -gcc example.c -losl -o example -@end example -@noindent A calling command with the input file test.scop could be: -@example -more test.scop | ./example -@end example - - -@c % ****************************** INSTALLING ******************************** -@node Installation -@section Installation - -@menu -* License:: -* Requirements:: -* Installation Instructions:: -* Optional Features:: -* Uninstallation:: -@end menu - -@node License -@subsection License -First of all, it would be very kind to refer the present document in any -publication that results from the use of the OpenScop specification or library, -@pxref{Bas11} (a bibtex entry is provided behind the title page of this -manual, along with the copyright notice). -The OpenScop Library is provided under the 3-clause BSD license: - -Copyright (C) 2011 University Paris-Sud 11 and INRIA - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -@enumerate -@item Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -@item Redistributions in binary form must reproduce the above copyrigh - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -@item The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission -@end enumerate - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -@node Requirements -@subsection Requirements - -The OpenScop Library is a stand-alone library. For a basic use, -it does not need any additional tool or library. Anyway, to be able to -work in conjunction with other tools that manipulate multiple precision -numbers, the GNU GMP library can be used as an option. - -@menu -* GMP Library:: -@end menu - - -@node GMP Library -@subsubsection GMP Library (optional) - -To be able to deal with insanely large coefficient, the user will need to -install the GNU Multiple Precision Library (GMP for short) version 4.2.2 -or above@footnote{@code{http://www.swox.com/gmp}}. -The user can compile it by typing the following commands on the GMP root -directory: - -@itemize @bullet -@item @code{./configure} -@item @code{make} -@item And as root: @code{make install} -@end itemize - -The GMP default installation is @code{/usr/local}. This directory may -not be inside the user's library path. To fix the problem, the user should set -@example -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib -@end example -@noindent if your shell is, e.g., bash or -@example -setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH:/usr/local/lib -@end example -@noindent if your shell is, e.g., tcsh. Add the line to your .bashrc or .tcshrc (or -whatever convenient file) to make this change permanent. Another solution -is to ask GMP to install in the standard path by using the prefix -option of the configure script: -@samp{./configure --prefix=/usr}. - -The OpenScop Library has to be built using the GMP library by specifying -the convenient configure script options to buid the GMP version -(@pxref{Optional Features}). - - -@node Installation Instructions -@subsection Installation Instructions - -Once downloaded and unpacked -(e.g. using the @samp{tar -zxvf openscop-@value{LIB_VERSION}.tar.gz} command), -you can compile the OpenScop Library by typing the following commands -on the OpenScop Library's root directory: - -@itemize @bullet -@item @code{./autogen.sh} -@item @code{./configure} -@item @code{make} -@item And as root: @code{make install} -@end itemize - -The program binaries and object files can be removed from the -source code directory by typing @code{make clean}. To also remove the -files that the @code{configure} script created (so you can compile the -package for a different kind of computer) type @code{make distclean}. - -@node Optional Features -@subsection Optional Features -The @code{configure} shell script attempts to guess correct values for -various system-dependent variables and user options used during compilation. -It uses those values to create the @code{Makefile}. Various user options -are provided by the OpenScop Library's configure script. They are summarized in the -following list and may be printed by typing @code{./configure --help} in the -OpenScop Library top-level directory. - -@itemize @bullet -@item By default, the installation directory is @code{/usr/local}: -@code{make install} will install the package's files in -@code{/usr/local/bin}, @code{/usr/local/lib} and @code{/usr/local/include}. -The user can specify an installation prefix other than @code{/usr/local} by -giving @code{configure} the option @code{--prefix=PATH}. - -@item By default, The OpenScop Library is built in 64bits version. -If the user gives to @code{configure} the option -@code{--enable-int-version}, the 32bits version of the OpenScop Library -will be compiled. In the same way, the option @code{--enable-mp-version} -has to be used to build the multiple precision version. - -@item By default, @code{configure} will look for the GMP library -(necessary to build the multiple precision version) in standard -locations. If necessary, the user can specify the GMP path by giving -@code{configure} the option @code{--with-gmp=PATH}. -@end itemize - -@node Uninstallation -@subsection Uninstallation -The user can easily remove the OpenScop Library from his system -by typing (as root if necessary) from the OpenScop Library top-level -directory -@code{make uninstall}. - -@c % **************************** DOCUMENTATION ****************************** -@node Documentation -@section Documentation -The OpenScop Library distribution provides several sources of documentation. -First, the source code itself is as documented as much as possible. -The code comments use the Doxygen technical documentation system. -The user may install -Doxygen@footnote{@code{http://www.stack.nl/~dimitri/doxygen}} to automatically -generate a technical documentation by typing @code{make doc} or -@code{doxygen ./autoconf/Doxyfile} at the OpenScop Library -top-level directory after running the configure script -(@pxref{Installation Instructions}). Doxygen will generate -documentation sources (in HTML, LaTeX and man) in the @code{doc/source} -directory of the OpenScop Library distribution. - -The Texinfo source of the present document is also provided in the @code{doc} -directory. The user can build it in either PDF format -(by typing @code{texi2pdf openscop.texi}) or HTML format -(by typing @code{makeinfo --html openscop.texi}, using @code{--no-split} -option to generate a single HTML file) or info format -(by typing @code{makeinfo openscop.texi}). - -@c % **************************** DEVELOPPING ******************************** -@node Development -@section Development - -@menu -* Copyright Issue:: -* Repository:: -* Coding Style:: -* Extension Development:: -@end menu - -@node Copyright Issue -@subsection Copyright Issue - -The OpenScop Library is an Open Source project and you should feel free to -contribute by adding functionalities (in particular extensions), correcting -bugs or improving documentation. However, for painful administrative reasons, -the copyright of the core part (everything except extensions) should not be -impacted by your work. Hence, if you are doing a significant contribution to -the main part, the OpenScop Library maintainer may ask you for an agreement -about this copyright. If you plan to do such a significant contribution, it -may be wise to discuss this issue with the maintainer first. Extensions -may include developer's own copyright. - -@node Repository -@subsection Repository - -The main repository of the OpenScop Library is -@url{http://repo.or.cz/w/openscop.git}. Developers may ask the OpenScop Library -maintainer to open them a write access to this repository. Only the maintainer -should ever change the @code{master} branch. Developers should work on their -own branches. To avoid any problem developers should use the @emph{fork} -functionality of the repository. - -@node Coding Style -@subsection Coding Style - -The OpenScop Library is written in C using an object oriented style. Each -important data structure (e.g., @code{struct foo}) has its own header file -(@code{include/osl/foo.h}) where lies the definition of -the data structure, the two typedefs for the data structure (one for the -structure, @code{osl_foo_t}, and one for a pointer -to the structure, @code{osl_foo_p}), the prototypes of the various -functions related to this data structure, all named using the -prefix "@code{osl_foo_}". The source code of the functions is provided in a -separated C file (@code{source/foo.c}). - -Utility functions independent from the main data structures may be placed in -separate source files (e.g., definition in @code{include/osl/util.h} -and code in @code{source/util.c}). Tool-wide preprocessor directives are -placed in @code{include/osl/macros.h}, macros are prefixed with -"@code{OSL_}". - -The core code itself has to be written according to the Google C++ Coding Style: -@url{http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml} (for -what can apply to C), plus the naming conventions discussed above with -highest priority. The extension parts must only respect the naming convention, -but a consistent coding style is much appreciated. - -@node Extension Development -@subsection Extension Development - -It's fairly easy to integrate a new extension to OpenScop and the OpenScop -Library. Developing a new extension is very much like adding a new "object": -it requires writing a data structure for the extension data and the 7 base -functions to manage this extension. Here is how developers should proceed -to add an extension called @code{foo} (beware that the naming convention is -strict): - -@enumerate -@item Send the name @code{foo} to the maintainer to ensure it is unique and - hence can be used as an URI. The name (one single - word, or words separated with underscores "_") should be - suggested by the extension developers to the OpenScop development - mailing list @email{openscop-development@@googlegroups.com}). It - should not correspond to an existing structure name - (see @code{include/osl/osl.h} for the list). The - maintainer will update @code{include/osl/osl.h} in the development - version accordingly. -@item Look at the @code{comment} extension. The @code{comment} extension - (@pxref{Comment Extension}) has been written to be used as a basic - example for extension developers. Having a look at - @code{include/osl/extensions/comment.h} and - @code{source/extensions/comment.c} will be a great help to do it right. -@item Create the extension data structure: it is necessary that the - extension data can be accessible through only one pointer. -@item Code the 7 base functions for the extension. Any extension must provide - this set of functions (naming convention apply only if the - extension is planed to be integrated to the OpenScop Library - default extensions): - @itemize @bullet - @item @code{osl_foo_idump} (@pxref{Dumping}) - @item @code{osl_foo_sprint} has the following prototype: -@example -@group -char * osl_@emph{structure}_sprint(osl_@emph{structure}_p s); -@end group -@end example - It corresponds to the pretty printing functions of the core - data structures (@pxref{Printing}) with the - difference that the OpenScop textual representation is written - to a string (returned by the function) instead of a file. - @item @code{osl_foo_sread} has the following prototype: -@example -@group -osl_@emph{structure}_p osl_@emph{structure}_sread(char ** string); -@end group -@end example - It corresponds to the reading functions of the core - data structures (@pxref{Reading}) with the - difference that the OpenScop textual representation is read - from a string (provided as a parameter) instead of a file. - The address of the string to read is passed as a parameter and - is updated to point immediately after what has been actually read. - @item @code{osl_foo_malloc} (@pxref{Allocating}) - @item @code{osl_foo_free} (@pxref{Deallocating}) - @item @code{osl_foo_clone} (@pxref{Cloning}) - @item @code{osl_foo_equal} (@pxref{Testing}) - @end itemize -@item Code the other functions you need! -@end enumerate - -Now let us consider two scenarios. - -First scenario, the extension is external and is -not planned to be integrated to the OpenScop Library. In this case you are -all set. Simply generate an @code{osl_interface_t} for your -extension and have a look at the function -@code{osl_scop_register_extension()} which is devoted to register -a new extension interface to an existing @code{osl_scop_t}. - -Second scenario, the extension will integrate the set of default -OpenScop Library extensions (the best solution to share it to other -potential users). In this case, a few additional -things have to be done: -@enumerate -@item Create the extension header - @code{include/osl/extensions/foo.h} to store the extension - structure and function prototypes and the - extension source file @code{source/extensions/foo.c} for the code - of the functions. -@item Add the documentation for the extension to the texinfo source of - this document (in @code{doc/openscop.texi}), following the example - of the @code{comment} documentation (@pxref{Comment Extension}). -@item Integrate the extension by adding the @code{extensions/foo.c} entry - to the @code{libosl_la_SOURCES} in the @code{source/Makefile.am} - file, the @code{osl/foo.h} entry to the - @code{nobase_pkginclude_HEADERS} and add the corresponding - @code{#include } in the - @code{include/scop.h.in} file. -@item Add the new extension in the - @code{osl_interface_get_default_registry()} function. -@item You are done! Prepare a single commit or patch corresponding to the - integration of the new extension and ask the maintainer to merge it - to the master branch. -@end enumerate - - -@c % ****************************** REFERENCES ******************************** -@node References -@chapter References - -@itemize -@item -@anchor{Bas03a}[Bas03a] C. Bastoul, P. Feautrier. Improving data locality -by chunking. CC'12 International Conference on Compiler Construction, -LNCS 2622, pages 320-335, Warsaw, April 2003. - -@item -@anchor{Bas11}[Bas11] C. Bastoul. -OpenScop: A Specification and a Library for Data Exchange in Polyhedral -Compilation Tools. Technical Report, Paris-Sud University, France, June 2011. - -@item -@anchor{Fea92}[Fea92] P. Feautrier. Some efficient solutions to the affine -scheduling problem, part II: multidimensional time. -International Journal of Parallel Programming, 21(6):389--420, December 1992. - -@item -@anchor{Gri04}[Gri04] M. Griebl. Automatic parallelization of loop programs -for distributed memory architectures. Habilitation Thesis. Facult@"at f@"ur -Mathematik und Informatik, Universit@"at Passau, 2004. -@emph{http://www.infosun.fmi.uni-passau.de/cl/loopo/} - -@item -@anchor{Wil93}[Wil93] Doran K. Wilde. -A library for doing polyhedral operations. -Technical Report 785, IRISA, Rennes, France, 1993. - -@end itemize - - - - -@c % /************************************************************************* -@c % * PART VI: END OF THE DOCUMENT * -@c % *************************************************************************/ -@c @unnumbered Index - -@c @printindex cp - -@bye diff --git a/cloog-0.17.0/osl/include/Makefile.am b/cloog-0.17.0/osl/include/Makefile.am deleted file mode 100644 index 52305c8..0000000 --- a/cloog-0.17.0/osl/include/Makefile.am +++ /dev/null @@ -1,102 +0,0 @@ -# -# /*+------------------------------------------------------------------** -# ** OpenScop Library ** -# **------------------------------------------------------------------** -# ** makefile.am ** -# **------------------------------------------------------------------** -# ** First version: 30/04/2008 ** -# **------------------------------------------------------------------** -# -# -# *************************************************************************** -# * OpenScop: Structures and formats for polyhedral tools to talk together * -# *************************************************************************** -# * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * -# * / / / // // // // / / / // // / / // / /|,_, * -# * / / / // // // // / / / // // / / // / / / /\ * -# * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * -# * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * -# * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * -# * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * -# * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * -# * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * -# * | I | | | | e | | | | | | | | | | | | | \ \ \ * -# * | T | | | | | | | | | | | | | | | | | \ \ \ * -# * | E | | | | | | | | | | | | | | | | | \ \ \ * -# * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * -# * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * -# * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * -# * * -# * Copyright (C) 2008 University Paris-Sud 11 and INRIA * -# * * -# * (3-clause BSD license) * -# * Redistribution and use in source and binary forms, with or without * -# * modification, are permitted provided that the following conditions * -# * are met: * -# * * -# * 1. Redistributions of source code must retain the above copyright * -# * notice, this list of conditions and the following disclaimer. * -# * 2. Redistributions in binary form must reproduce the above copyright * -# * notice, this list of conditions and the following disclaimer in the * -# * documentation and/or other materials provided with the distribution. * -# * 3. The name of the author may not be used to endorse or promote * -# * products derived from this software without specific prior written * -# * permission. * -# * * -# * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * -# * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * -# * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * -# * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * -# * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * -# * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * -# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * -# * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * -# * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * -# * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * -# * POSSIBILITY OF SUCH DAMAGE. * -# * * -# * OpenScop Library, a library to manipulate OpenScop formats and data * -# * structures. Written by: * -# * Cedric Bastoul and * -# * Louis-Noel Pouchet * -# * * -# ***************************************************************************/ -# -# Makefile.am (or makefile if generated) of the OpenScop Library. -# Makefile.am is not a makefile, you must run the 'autogen.sh' THEN the -# configure shellscript to generate the Makefile thanks to this file. - - -############################################################################# -SUBDIRS = - -############################################################################# -MAINTAINERCLEANFILES = Makefile.in - -############################################################################# - -pkginclude_HEADERS = \ - osl/osl.h \ - osl/statement.h \ - osl/interface.h \ - osl/generic.h \ - osl/vector.h \ - osl/relation.h \ - osl/relation_list.h \ - osl/macros.h \ - osl/int.h \ - osl/names.h \ - osl/strings.h \ - osl/body.h \ - osl/util.h \ - osl/scop.h - -pkgextensionsincludedir = $(pkgincludedir)/extensions -pkgextensionsinclude_HEADERS = \ - osl/extensions/textual.h \ - osl/extensions/comment.h \ - osl/extensions/scatnames.h \ - osl/extensions/arrays.h \ - osl/extensions/lines.h \ - osl/extensions/irregular.h - diff --git a/cloog-0.17.0/osl/include/Makefile.in b/cloog-0.17.0/osl/include/Makefile.in deleted file mode 100644 index 76284f9..0000000 --- a/cloog-0.17.0/osl/include/Makefile.in +++ /dev/null @@ -1,731 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# /*+------------------------------------------------------------------** -# ** OpenScop Library ** -# **------------------------------------------------------------------** -# ** makefile.am ** -# **------------------------------------------------------------------** -# ** First version: 30/04/2008 ** -# **------------------------------------------------------------------** -# -# -# *************************************************************************** -# * OpenScop: Structures and formats for polyhedral tools to talk together * -# *************************************************************************** -# * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * -# * / / / // // // // / / / // // / / // / /|,_, * -# * / / / // // // // / / / // // / / // / / / /\ * -# * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * -# * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * -# * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * -# * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * -# * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * -# * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * -# * | I | | | | e | | | | | | | | | | | | | \ \ \ * -# * | T | | | | | | | | | | | | | | | | | \ \ \ * -# * | E | | | | | | | | | | | | | | | | | \ \ \ * -# * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * -# * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * -# * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * -# * * -# * Copyright (C) 2008 University Paris-Sud 11 and INRIA * -# * * -# * (3-clause BSD license) * -# * Redistribution and use in source and binary forms, with or without * -# * modification, are permitted provided that the following conditions * -# * are met: * -# * * -# * 1. Redistributions of source code must retain the above copyright * -# * notice, this list of conditions and the following disclaimer. * -# * 2. Redistributions in binary form must reproduce the above copyright * -# * notice, this list of conditions and the following disclaimer in the * -# * documentation and/or other materials provided with the distribution. * -# * 3. The name of the author may not be used to endorse or promote * -# * products derived from this software without specific prior written * -# * permission. * -# * * -# * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * -# * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * -# * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * -# * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * -# * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * -# * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * -# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * -# * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * -# * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * -# * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * -# * POSSIBILITY OF SUCH DAMAGE. * -# * * -# * OpenScop Library, a library to manipulate OpenScop formats and data * -# * structures. Written by: * -# * Cedric Bastoul and * -# * Louis-Noel Pouchet * -# * * -# ***************************************************************************/ -# -# Makefile.am (or makefile if generated) of the OpenScop Library. -# Makefile.am is not a makefile, you must run the 'autogen.sh' THEN the -# configure shellscript to generate the Makefile thanks to this file. - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = include -DIST_COMMON = $(pkgextensionsinclude_HEADERS) $(pkginclude_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/autoconf/libtool.m4 \ - $(top_srcdir)/autoconf/ltoptions.m4 \ - $(top_srcdir)/autoconf/ltsugar.m4 \ - $(top_srcdir)/autoconf/ltversion.m4 \ - $(top_srcdir)/autoconf/lt~obsolete.m4 \ - $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(pkgextensionsincludedir)" \ - "$(DESTDIR)$(pkgincludedir)" -HEADERS = $(pkgextensionsinclude_HEADERS) $(pkginclude_HEADERS) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CD = @CD@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOXYGEN = @DOXYGEN@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_aux_dir = @ac_aux_dir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ - -############################################################################# -SUBDIRS = - -############################################################################# -MAINTAINERCLEANFILES = Makefile.in - -############################################################################# -pkginclude_HEADERS = \ - osl/osl.h \ - osl/statement.h \ - osl/interface.h \ - osl/generic.h \ - osl/vector.h \ - osl/relation.h \ - osl/relation_list.h \ - osl/macros.h \ - osl/int.h \ - osl/names.h \ - osl/strings.h \ - osl/body.h \ - osl/util.h \ - osl/scop.h - -pkgextensionsincludedir = $(pkgincludedir)/extensions -pkgextensionsinclude_HEADERS = \ - osl/extensions/textual.h \ - osl/extensions/comment.h \ - osl/extensions/scatnames.h \ - osl/extensions/arrays.h \ - osl/extensions/lines.h \ - osl/extensions/irregular.h - -all: all-recursive - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign include/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-pkgextensionsincludeHEADERS: $(pkgextensionsinclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(pkgextensionsincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgextensionsincludedir)" - @list='$(pkgextensionsinclude_HEADERS)'; test -n "$(pkgextensionsincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgextensionsincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgextensionsincludedir)" || exit $$?; \ - done - -uninstall-pkgextensionsincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(pkgextensionsinclude_HEADERS)'; test -n "$(pkgextensionsincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgextensionsincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgextensionsincludedir)" && rm -f $$files -install-pkgincludeHEADERS: $(pkginclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" - @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ - done - -uninstall-pkgincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile $(HEADERS) -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(pkgextensionsincludedir)" "$(DESTDIR)$(pkgincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-recursive - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: install-pkgextensionsincludeHEADERS \ - install-pkgincludeHEADERS - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-pkgextensionsincludeHEADERS \ - uninstall-pkgincludeHEADERS - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ - install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am check check-am clean clean-generic clean-libtool \ - ctags ctags-recursive distclean distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-pkgextensionsincludeHEADERS install-pkgincludeHEADERS \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-pkgextensionsincludeHEADERS \ - uninstall-pkgincludeHEADERS - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.17.0/osl/include/osl/body.h b/cloog-0.17.0/osl/include/osl/body.h deleted file mode 100644 index b4e905f..0000000 --- a/cloog-0.17.0/osl/include/osl/body.h +++ /dev/null @@ -1,125 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** body.h ** - **-----------------------------------------------------------------** - ** First version: 25/06/2011 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_BODY_H -# define OSL_BODY_H - -# include -# include -# include - -# if defined(__cplusplus) -extern "C" - { -# endif - -# define OSL_URI_BODY "body" - -/** - * The osl_body_t structure stores a statement body in a textual form. - * The complete original expression (directly copy-pasted from the original - * code) is in the expression field while the textual forms of the original - * iterators are in the iterators field. They may be used for substitutions - * inside the expression. - */ -struct osl_body { - osl_strings_p iterators; /**< Original iterators */ - osl_strings_p expression; /**< Original statement expression */ -}; -typedef struct osl_body osl_body_t; -typedef struct osl_body * osl_body_p; - - -/*---------------------------------------------------------------------------+ - | Structure display function | - +---------------------------------------------------------------------------*/ -void osl_body_idump(FILE *, osl_body_p, int); -void osl_body_dump(FILE *, osl_body_p); -char * osl_body_sprint(osl_body_p); -void osl_body_print(FILE *, osl_body_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ -osl_body_p osl_body_sread(char **); - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_body_p osl_body_malloc(); -void osl_body_free(osl_body_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_body_p osl_body_clone(osl_body_p); -int osl_body_equal(osl_body_p, osl_body_p); -osl_interface_p osl_body_interface(); - -# if defined(__cplusplus) - } -# endif -#endif /* define OSL_BODY_H */ diff --git a/cloog-0.17.0/osl/include/osl/extensions/arrays.h b/cloog-0.17.0/osl/include/osl/extensions/arrays.h deleted file mode 100644 index f1c1cfd..0000000 --- a/cloog-0.17.0/osl/include/osl/extensions/arrays.h +++ /dev/null @@ -1,129 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** extensions/arrays.h ** - **-----------------------------------------------------------------** - ** First version: 07/12/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_ARRAYS_H -# define OSL_ARRAYS_H - -# include -# include - -# if defined(__cplusplus) -extern "C" - { -# endif - - -# define OSL_URI_ARRAYS "arrays" -# define OSL_TAG_ARRAYS_START "<"OSL_URI_ARRAYS">" -# define OSL_TAG_ARRAYS_STOP "" - - -/** - * The osl_arrays_t structure stores a set of array names in - * the extension part of the OpenScop representation. Each name - * has a name string and an identifier: the ith name as name - * string names[i] and identifier id[i]. - */ -struct osl_arrays { - int nb_names; /**< Number of names. */ - int * id; /**< Array of nb_names identifiers. */ - char ** names; /**< Array of nb_names names. */ -}; -typedef struct osl_arrays osl_arrays_t; -typedef struct osl_arrays * osl_arrays_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_arrays_idump(FILE *, osl_arrays_p, int); -void osl_arrays_dump(FILE *, osl_arrays_p); -char * osl_arrays_sprint(osl_arrays_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ -osl_arrays_p osl_arrays_sread(char **); - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_arrays_p osl_arrays_malloc(); -void osl_arrays_free(osl_arrays_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_arrays_p osl_arrays_clone(osl_arrays_p); -int osl_arrays_equal(osl_arrays_p, osl_arrays_p); -char ** osl_arrays_generate_names(osl_arrays_p, int *); -osl_interface_p osl_arrays_interface(); - -# if defined(__cplusplus) - } -# endif - -#endif /* define OSL_ARRAYS_H */ diff --git a/cloog-0.17.0/osl/include/osl/extensions/comment.h b/cloog-0.17.0/osl/include/osl/extensions/comment.h deleted file mode 100644 index 1b9edee..0000000 --- a/cloog-0.17.0/osl/include/osl/extensions/comment.h +++ /dev/null @@ -1,123 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** extensions/comment.h ** - **-----------------------------------------------------------------** - ** First version: 07/12/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_COMMENT_H -# define OSL_COMMENT_H - -# include -# include - -# if defined(__cplusplus) -extern "C" - { -# endif - - -# define OSL_URI_COMMENT "comment" - - -/** - * The osl_comment_t structure stores a comment extention to the core - * OpenScop representation. It is simply a 0-terminated string. - */ -struct osl_comment { - char * comment; /**< A comment message as a 0-terminated string. */ -}; -typedef struct osl_comment osl_comment_t; -typedef struct osl_comment * osl_comment_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_comment_idump(FILE *, osl_comment_p, int); -void osl_comment_dump(FILE *, osl_comment_p); -char * osl_comment_sprint(osl_comment_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ -osl_comment_p osl_comment_sread(char **); - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_comment_p osl_comment_malloc(); -void osl_comment_free(osl_comment_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_comment_p osl_comment_clone(osl_comment_p); -int osl_comment_equal(osl_comment_p, osl_comment_p); -osl_interface_p osl_comment_interface(); - - -# if defined(__cplusplus) - } -# endif - -#endif /* define OSL_COMMENT_H */ diff --git a/cloog-0.17.0/osl/include/osl/extensions/irregular.h b/cloog-0.17.0/osl/include/osl/extensions/irregular.h deleted file mode 100644 index 74b1206..0000000 --- a/cloog-0.17.0/osl/include/osl/extensions/irregular.h +++ /dev/null @@ -1,149 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** extensions/irregular.h ** - **-----------------------------------------------------------------** - ** First version: 07/12/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_IRREGULAR_H -# define OSL_IRREGULAR_H - -# include -# include -# include -# include - -# if defined(__cplusplus) -extern "C" - { -# endif - - -# define OSL_URI_IRREGULAR "irregular" -# define OSL_TAG_IRREGULAR_START "<"OSL_URI_IRREGULAR">" -# define OSL_TAG_IRREGULAR_STOP "" - - -/** - * The osl_irregular_t structure stores an irregular extension to the core - * OpenScop representation. It contains a list of predicates (in their textual - * representation), and for each statement, its list of associated predicates. - * The list of predicates contains both control and exit predicates (see - * Benabderrhamane et al.'s paper at CC'2010), control predicates are listed - * first, then come exit predicates. - */ -struct osl_irregular { - // List of predicates (textual representation). - int nb_control; /**< Number of control predicates in the SCoP. */ - int nb_exit; /**< Number of exit predicates in the SCoP. */ - int * nb_iterators; /**< nb_iterators[i]: #iterators for ith predicate. */ - char *** iterators; /**< iterators[i]: array of (nb_control + nb_exit) - arrays of nb_iterators[i] strings. Each element - corresponds to the list of original iterators - for the ith predicate. */ - char ** body; /**< body[i]: original source code of ith predicate. */ - - // List of associated predicates for each statement. - int nb_statements; /**< Number of statements in the SCoP. */ - int * nb_predicates; /**< nb_predicates[i]: #predicates for ith statement. */ - int ** predicates; /**< predicates[i]: array of nb_predicates[i] predicates - corresponding to the list of predicates associated - to the ith statement. */ -}; -typedef struct osl_irregular osl_irregular_t; -typedef struct osl_irregular * osl_irregular_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_irregular_idump(FILE *, osl_irregular_p, int); -void osl_irregular_dump(FILE *, osl_irregular_p); -char * osl_irregular_sprint(osl_irregular_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ -osl_irregular_p osl_irregular_sread(char **); - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_irregular_p osl_irregular_malloc(); -void osl_irregular_free(osl_irregular_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_irregular_p osl_irregular_clone(osl_irregular_p); -int osl_irregular_equal(osl_irregular_p, osl_irregular_p); -osl_irregular_p osl_irregular_add_control(osl_irregular_p, char**, int, char*); -osl_irregular_p osl_irregular_add_exit(osl_irregular_p, char**, int, char*); -osl_irregular_p osl_irregular_add_predicates(osl_irregular_p, int*, int); -osl_interface_p osl_irregular_interface(); - - -# if defined(__cplusplus) - } -# endif - -#endif /* define OSL_IRREGULAR_H */ diff --git a/cloog-0.17.0/osl/include/osl/extensions/lines.h b/cloog-0.17.0/osl/include/osl/extensions/lines.h deleted file mode 100644 index 9695e51..0000000 --- a/cloog-0.17.0/osl/include/osl/extensions/lines.h +++ /dev/null @@ -1,127 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** extensions/lines.h ** - **-----------------------------------------------------------------** - ** First version: 07/12/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_LINES_H -# define OSL_LINES_H - -# include -# include - -# if defined(__cplusplus) -extern "C" - { -# endif - - -# define OSL_URI_LINES "lines" -# define OSL_TAG_LINES_START "<"OSL_URI_LINES">" -# define OSL_TAG_LINES_STOP "" - - -/** - * The osl_lines_t structure stores a lines extention to the core - * OpenScop representation. It provides information about the line - * numbers of the SCoP in the original source file. - */ -struct osl_lines { - int start; /**< First line of the SCoP in the original source file. */ - int end; /**< Last line of the SCoP in the original source file. */ -}; -typedef struct osl_lines osl_lines_t; -typedef struct osl_lines * osl_lines_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_lines_idump(FILE *, osl_lines_p, int); -void osl_lines_dump(FILE *, osl_lines_p); -char * osl_lines_sprint(osl_lines_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ -osl_lines_p osl_lines_sread(char **); - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_lines_p osl_lines_malloc(); -void osl_lines_free(osl_lines_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_lines_p osl_lines_clone(osl_lines_p); -int osl_lines_equal(osl_lines_p, osl_lines_p); -osl_interface_p osl_lines_interface(); - - -# if defined(__cplusplus) - } -# endif - -#endif /* define OSL_LINES_H */ diff --git a/cloog-0.17.0/osl/include/osl/extensions/scatnames.h b/cloog-0.17.0/osl/include/osl/extensions/scatnames.h deleted file mode 100644 index 77ad402..0000000 --- a/cloog-0.17.0/osl/include/osl/extensions/scatnames.h +++ /dev/null @@ -1,127 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** extensions/scatnames.h ** - **-----------------------------------------------------------------** - ** First version: 03/12/2011 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_SCATNAMES_H -# define OSL_SCATNAMES_H - -# include -# include -# include - -# if defined(__cplusplus) -extern "C" - { -# endif - - -# define OSL_URI_SCATNAMES "scatnames" - - -/** - * The osl_scatnames_t structure stores a scatnames extention to the core - * OpenScop representation. It is devoted to store the scattering dimension - * names in a textual form. The names are stored using an osl_strings_t - * structure and their order in the array corresponds to their dimension - * order. - */ -struct osl_scatnames { - osl_strings_p names; /**< List of textual scattering dimension names. */ -}; -typedef struct osl_scatnames osl_scatnames_t; -typedef struct osl_scatnames * osl_scatnames_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_scatnames_idump(FILE *, osl_scatnames_p, int); -void osl_scatnames_dump(FILE *, osl_scatnames_p); -char * osl_scatnames_sprint(osl_scatnames_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ -osl_scatnames_p osl_scatnames_sread(char **); - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_scatnames_p osl_scatnames_malloc(); -void osl_scatnames_free(osl_scatnames_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_scatnames_p osl_scatnames_clone(osl_scatnames_p); -int osl_scatnames_equal(osl_scatnames_p, osl_scatnames_p); -osl_interface_p osl_scatnames_interface(); - - -# if defined(__cplusplus) - } -# endif - -#endif /* define OSL_SCATNAMES_H */ diff --git a/cloog-0.17.0/osl/include/osl/extensions/textual.h b/cloog-0.17.0/osl/include/osl/extensions/textual.h deleted file mode 100644 index 91ee790..0000000 --- a/cloog-0.17.0/osl/include/osl/extensions/textual.h +++ /dev/null @@ -1,123 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** extensions/textual.h ** - **-----------------------------------------------------------------** - ** First version: 15/07/2011 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_TEXTUAL_H -# define OSL_TEXTUAL_H - -# include -# include - -# if defined(__cplusplus) -extern "C" - { -# endif - - -# define OSL_URI_TEXTUAL "textual" - - -/** - * The osl_textual_t structure stores the complete textual - * representation of the scop extension field. It is a special case of - * extension since it does not require start and end tag. - */ -struct osl_textual { - char * textual; /**< Full extension string as a 0-terminated string. */ -}; -typedef struct osl_textual osl_textual_t; -typedef struct osl_textual * osl_textual_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_textual_idump(FILE *, osl_textual_p, int); -void osl_textual_dump(FILE *, osl_textual_p); -char * osl_textual_sprint(osl_textual_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ -osl_textual_p osl_textual_sread(char **); - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_textual_p osl_textual_malloc(); -void osl_textual_free(osl_textual_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_textual_p osl_textual_clone(osl_textual_p); -int osl_textual_equal(osl_textual_p, osl_textual_p); -osl_interface_p osl_textual_interface(); - -# if defined(__cplusplus) - } -# endif - -#endif /* define OSL_TEXTUAL_H */ diff --git a/cloog-0.17.0/osl/include/osl/generic.h b/cloog-0.17.0/osl/include/osl/generic.h deleted file mode 100644 index 6061478..0000000 --- a/cloog-0.17.0/osl/include/osl/generic.h +++ /dev/null @@ -1,127 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** generic.h ** - **-----------------------------------------------------------------** - ** First version: 26/11/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_generic_H -# define OSL_generic_H - -# include - -# if defined(__cplusplus) -extern "C" - { -# endif - - -/** - * The osl_generic_t structure stores OpenScop data and operations with - * no pre-defined type. The information is accessible through the data pointer - * while the type and operations are accessible through the interface pointer. - * A generic is a also a node of a NULL-terminated linked list of generics. - */ -struct osl_generic { - void * data; /**< Pointer to the data. */ - osl_interface_p interface; /**< Interface to work with the data. */ - struct osl_generic * next; /**< Pointer to the next generic. */ -}; -typedef struct osl_generic osl_generic_t; -typedef struct osl_generic * osl_generic_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_generic_idump(FILE *, osl_generic_p, int); -void osl_generic_dump(FILE *, osl_generic_p); -void osl_generic_print(FILE *, osl_generic_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ -osl_generic_p osl_generic_sread(char *, osl_interface_p); -osl_generic_p osl_generic_read_one(FILE *, osl_interface_p); -osl_generic_p osl_generic_read(FILE *, osl_interface_p); - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -void osl_generic_add(osl_generic_p*, osl_generic_p); -osl_generic_p osl_generic_malloc(); -void osl_generic_free(osl_generic_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_generic_p osl_generic_clone(osl_generic_p); -int osl_generic_equal(osl_generic_p, osl_generic_p); -int osl_generic_has_URI(osl_generic_p, char *); -void * osl_generic_lookup(osl_generic_p, char *); - - -# if defined(__cplusplus) - } -# endif - -#endif /* define OSL_generic_H */ diff --git a/cloog-0.17.0/osl/include/osl/int.h b/cloog-0.17.0/osl/include/osl/int.h deleted file mode 100644 index 61bb709..0000000 --- a/cloog-0.17.0/osl/include/osl/int.h +++ /dev/null @@ -1,124 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** int.h ** - **-----------------------------------------------------------------** - ** First version: 18/07/2011 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_INT_H -# define OSL_INT_H - -#include - -typedef void * osl_int_p; - - -/*+*************************************************************************** - * Basic Functions * - *****************************************************************************/ - - -void osl_int_dump_precision(FILE *, int); -int osl_int_sizeof(int); -void * osl_int_address(int, void *, int); -void osl_int_init(int, void *, int); -void * osl_int_malloc(int); -void osl_int_assign(int, void *, int, void *, int); -void osl_int_set_si(int, void *, int, int); -int osl_int_get_si(int, void *, int); -void osl_int_init_set_si(int, void *, int, int); -void osl_int_clear(int, void *, int); -void osl_int_free(int, void *, int); -void osl_int_print(FILE *, int, void *, int); -void osl_int_sprint(char *, int, void *, int); -void osl_int_sprint_txt(char *, int, void *, int); -void osl_int_sread(char **, int, void *, int); - - -/*+*************************************************************************** - * Arithmetic Operations * - *****************************************************************************/ - - -void osl_int_increment(int, void *, int, void *, int); -void osl_int_decrement(int, void *, int, void *, int); -void osl_int_add(int, void *, int, void *, int, void *, int); -void osl_int_add_si(int, void *, int, void *, int, int); -void osl_int_mul(int, void *, int, void *, int, void *, int); -void osl_int_mul_si(int, void *, int, void *, int, int); -void osl_int_sub(int, void *, int, void *, int, void *, int); -void osl_int_oppose(int, void *, int, void *, int); - - -/*+*************************************************************************** - * Conditional Operations * - *****************************************************************************/ - - -int osl_int_eq(int, void *, int, void *, int); -int osl_int_ne(int, void *, int, void *, int); -int osl_int_pos(int, void *, int); -int osl_int_neg(int, void *, int); -int osl_int_zero(int, void *, int); -int osl_int_one(int, void *, int); -int osl_int_mone(int, void *, int); -int osl_int_divisible(int, void *, int, void *, int); - - -#endif /* define OSL_INT_H */ diff --git a/cloog-0.17.0/osl/include/osl/interface.h b/cloog-0.17.0/osl/include/osl/interface.h deleted file mode 100644 index c711d24..0000000 --- a/cloog-0.17.0/osl/include/osl/interface.h +++ /dev/null @@ -1,137 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** interface.h ** - **-----------------------------------------------------------------** - ** First version: 15/07/2011 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_INTERFACE_H -# define OSL_INTERFACE_H - -# include - -# if defined(__cplusplus) -extern "C" - { -# endif - - -typedef void (*osl_idump_f) (FILE *, void *, int); -typedef char * (*osl_sprint_f)(void *); -typedef void * (*osl_sread_f) (char **); -typedef void * (*osl_malloc_f)(); -typedef void (*osl_free_f) (void *); -typedef void * (*osl_clone_f) (void *); -typedef int (*osl_equal_f) (void *, void *); - - -/** - * The osl_interface structure stores the URI and base - * functions pointers an openscop object implementation has to offer. It - * is a node in a NULL-terminated list of interfaces. - */ -struct osl_interface { - char * URI; /**< Unique identifier string */ - osl_idump_f idump; /**< Pointer to idump function */ - osl_sprint_f sprint; /**< Pointer to sprint function */ - osl_sread_f sread; /**< Pointer to sread function */ - osl_malloc_f malloc; /**< Pointer to malloc function */ - osl_free_f free; /**< Pointer to free function */ - osl_clone_f clone; /**< Pointer to clone function */ - osl_equal_f equal; /**< Pointer to equal function */ - struct osl_interface * next; /**< Next interface in the list */ -}; -typedef struct osl_interface osl_interface_t; -typedef struct osl_interface * osl_interface_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_interface_idump(FILE *, osl_interface_p, int); -void osl_interface_dump(FILE *, osl_interface_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -void osl_interface_add(osl_interface_p *, osl_interface_p); -osl_interface_p osl_interface_malloc(); -void osl_interface_free(osl_interface_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_interface_p osl_interface_nclone(osl_interface_p, int); -osl_interface_p osl_interface_clone(osl_interface_p); -int osl_interface_equal(osl_interface_p, osl_interface_p); -osl_interface_p osl_interface_lookup(osl_interface_p, char *); -osl_interface_p osl_interface_get_default_registry(); - -# if defined(__cplusplus) - } -# endif - -#endif /* define OSL_INTERFACE_H */ diff --git a/cloog-0.17.0/osl/include/osl/macros.h b/cloog-0.17.0/osl/include/osl/macros.h deleted file mode 100644 index 536ed91..0000000 --- a/cloog-0.17.0/osl/include/osl/macros.h +++ /dev/null @@ -1,176 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** macros.h ** - **-----------------------------------------------------------------** - ** First version: 30/04/2008 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_MACROS_H -# define OSL_MACROS_H - -# define OSL_DEBUG 0 // 1 for debug mode, 0 otherwise. - -# define OSL_TAG_START_SCOP "" -# define OSL_TAG_END_SCOP "" - -# define OSL_PRECISION_ENV "OSL_PRECISION" -# define OSL_PRECISION_ENV_SP "32" -# define OSL_PRECISION_ENV_DP "64" -# define OSL_PRECISION_ENV_MP "0" -# define OSL_PRECISION_SP 32 -# define OSL_PRECISION_DP 64 -# define OSL_PRECISION_MP 0 - -# define OSL_FMT_SP "%4ld" -# define OSL_FMT_DP "%4lld" -# define OSL_FMT_MP "%4s" -# define OSL_FMT_LENGTH 4 // Should be the same as FMT_*P. -# define OSL_FMT_TXT_SP "%ld" -# define OSL_FMT_TXT_DP "%lld" -# define OSL_FMT_TXT_MP "%s" - - -# define OSL_BACKEND_C 0 -# define OSL_BACKEND_FORTRAN 1 -# define OSL_UNDEFINED -1 -# define OSL_MAX_STRING 2048 -# define OSL_MAX_ARRAYS 128 - -# define OSL_TYPE_GENERIC 0 -# define OSL_TYPE_STRING 1 -# define OSL_TYPE_CONTEXT 2 -# define OSL_TYPE_DOMAIN 3 -# define OSL_TYPE_SCATTERING 4 -# define OSL_TYPE_ACCESS 5 -# define OSL_TYPE_READ 6 -# define OSL_TYPE_WRITE 7 -# define OSL_TYPE_MAY_WRITE 8 - -# define OSL_FAKE_ARRAY "fakearray" - -# define OSL_STRING_UNDEFINED "UNDEFINED" -# define OSL_STRING_CONTEXT "CONTEXT" -# define OSL_STRING_DOMAIN "DOMAIN" -# define OSL_STRING_SCATTERING "SCATTERING" -# define OSL_STRING_READ "READ" -# define OSL_STRING_WRITE "WRITE" -# define OSL_STRING_MAY_WRITE "MAY_WRITE" - -/*+*************************************************************************** - * UTILITY MACROS * - *****************************************************************************/ - -# define OSL_coucou(n) \ - do { \ - int i = n +0; \ - fprintf(stderr,"[osl] Coucou %d (%s).\n", i, __func__); \ - } while (0) - -# define OSL_debug(msg) \ - do { \ - if (OSL_DEBUG) \ - fprintf(stderr,"[osl] Debug: "msg" (%s).\n", __func__); \ - } while (0) - -# define OSL_info(msg) \ - do { \ - fprintf(stderr,"[osl] Info: "msg" (%s).\n", __func__); \ - } while (0) - -# define OSL_warning(msg) \ - do { \ - fprintf(stderr,"[osl] Warning: "msg" (%s).\n", __func__); \ - } while (0) - -# define OSL_error(msg) \ - do { \ - fprintf(stderr,"[osl] Error: "msg" (%s).\n", __func__); \ - exit(1); \ - } while (0) - -# define OSL_malloc(ptr, type, size) \ - do { \ - if (((ptr) = (type)malloc(size)) == NULL) \ - OSL_error("memory overflow"); \ - } while (0) - -# define OSL_realloc(ptr, type, size) \ - do { \ - if (((ptr) = (type)realloc(ptr, size)) == NULL) \ - OSL_error("memory overflow"); \ - } while (0) - -# define OSL_strdup(destination, source) \ - do { \ - if (source != NULL) { \ - if (((destination) = strdup(source)) == NULL) \ - OSL_error("memory overflow"); \ - } \ - else { \ - destination = NULL; \ - OSL_warning("strdup of a NULL string"); \ - } \ - } while (0) - -# define OSL_max(x,y) ((x) > (y)? (x) : (y)) - -# define OSL_min(x,y) ((x) < (y)? (x) : (y)) - - -#endif /* define OSL_MACROS_H */ diff --git a/cloog-0.17.0/osl/include/osl/names.h b/cloog-0.17.0/osl/include/osl/names.h deleted file mode 100644 index cd7dfc0..0000000 --- a/cloog-0.17.0/osl/include/osl/names.h +++ /dev/null @@ -1,124 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** extensions/names.h ** - **-----------------------------------------------------------------** - ** First version: 18/05/2011 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_NAMES_H -# define OSL_NAMES_H - -# include -# include - -# if defined(__cplusplus) -extern "C" - { -# endif - - -/** - * The osl_names_t structure stores the various names (names of iterators, - * parameters...) necessary to generate a code from the OpenScop data - * structure. - */ -struct osl_names { - osl_strings_p parameters; /**< Parameter names */ - osl_strings_p iterators; /**< Iterator names */ - osl_strings_p scatt_dims; /**< Scattering dimension names */ - osl_strings_p local_dims; /**< Local dimension names */ - osl_strings_p arrays; /**< Array names */ -}; -typedef struct osl_names osl_names_t; -typedef struct osl_names * osl_names_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_names_idump(FILE *, osl_names_p, int); -void osl_names_dump(FILE *, osl_names_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_names_p osl_names_malloc(); -void osl_names_free(osl_names_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_names_p osl_names_clone(osl_names_p); -osl_names_p osl_names_generate(char *, int, char *, int, - char *, int, char *, int, - char *, int); - - -# if defined(__cplusplus) - } -# endif - -#endif /* define OSL_NAMES_H */ diff --git a/cloog-0.17.0/osl/include/osl/osl.h b/cloog-0.17.0/osl/include/osl/osl.h deleted file mode 100644 index 9853e4d..0000000 --- a/cloog-0.17.0/osl/include/osl/osl.h +++ /dev/null @@ -1,109 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** osl.h ** - **-----------------------------------------------------------------** - ** First version: 11/05/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_OSL_H -# define OSL_OSL_H - -/* List of reserved OpenScop URIs: - * - arrays - * - body - * - comment - * - generic - * - int - * - interface - * - irregular - * - lines - * - openscop - * - relation - * - relation_list - * - scatnames - * - scop - * - statement - * - strings - * - textual - * - vector - */ - -# include -# include -# include -# include -# include -# include -# include -# include -# include - -# include -# include -# include -# include -# include -# include - -# include -# include -# include - - -#endif /* define OSL_OSL_H */ diff --git a/cloog-0.17.0/osl/include/osl/relation.h b/cloog-0.17.0/osl/include/osl/relation.h deleted file mode 100644 index f540aaf..0000000 --- a/cloog-0.17.0/osl/include/osl/relation.h +++ /dev/null @@ -1,184 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** relation.h ** - **-----------------------------------------------------------------** - ** First version: 30/04/2008 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_RELATION_H -# define OSL_RELATION_H - -# include -# include -# include - -# if defined(__cplusplus) -extern "C" - { -# endif - - -/** - * The osl_relation_t structure stores a union of relations. It is a - * NULL-terminated linked list of relations. Each relation is described - * using a matrix where each row represents a linear constraint. The entries - * of each row are organised in the following order: - * - An equality/inequality tag: 0 means the row corresponds to an - * equality constraint == 0, 1 means it is an inequality >= 0. - * - The coefficients of the output dimensions. - * - The coefficients of the input dimensions (0 for a set). - * - The coefficients of the local (existentially quantified) dimensions. - * - The coefficients of the parameters. - * - The coefficient of the constant. - * Thus we have the following invariant: nb_columns = - * 1 + nb_output_dims + nb_input_dims + dims + nb_parameters + 1. - * Moreover we use the following conventions: - * - Sets (e.g., iteration domains) are the images of relations with a - * zero-dimensional domain, hence the number of input dimensions is 0. - * - The first output dimension of any access relations corresponds to - * the name of the array. - * The type field may provide some semantics about the relation, it may be: - * - Undefined : OSL_UNDEFINED, - * - An iteration domain : OSL_TYPE_DOMAIN, - * - A scattering relation : OSL_TYPE_SCATTERING, - * - An access relation : OSL_TYPE_ACCESS. - */ -struct osl_relation { - int type; /**< Semantics about the relation */ - int precision; /**< Precision of relation matrix elements*/ - int nb_rows; /**< Number of rows */ - int nb_columns; /**< Number of columns */ - int nb_output_dims; /**< Number of output dimensions */ - int nb_input_dims; /**< Number of input dimensions */ - int nb_local_dims; /**< Number of local (existentially - quantified) dimensions */ - int nb_parameters; /**< Number of parameters */ - void ** m; /**< An array of pointers to the beginning - of each row of the relation matrix */ - struct osl_relation * next; /**< Pointer to the next relation in the - union of relations (NULL if none) */ -}; -typedef struct osl_relation osl_relation_t; -typedef struct osl_relation * osl_relation_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_relation_idump(FILE *, osl_relation_p, int); -void osl_relation_dump(FILE *, osl_relation_p); -char * osl_relation_expression(osl_relation_p relation, - int row, char ** names); -char * osl_relation_spprint_polylib(osl_relation_p, osl_names_p); -char * osl_relation_spprint(osl_relation_p, osl_names_p); -void osl_relation_pprint(FILE *, osl_relation_p, osl_names_p); -void osl_relation_print(FILE *, osl_relation_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ -osl_relation_p osl_relation_pread(FILE *, int); -osl_relation_p osl_relation_read(FILE *); -osl_relation_p osl_relation_read_arrays(FILE *, char ***, int *); - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_relation_p osl_relation_pmalloc(int, int, int); -osl_relation_p osl_relation_malloc(int, int); -void osl_relation_free_inside(osl_relation_p); -void osl_relation_free(osl_relation_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_relation_p osl_relation_nclone(osl_relation_p, int); -osl_relation_p osl_relation_clone(osl_relation_p); -void osl_relation_replace_vector(osl_relation_p, osl_vector_p, int); -void osl_relation_insert_vector(osl_relation_p, osl_vector_p, int); -void osl_relation_insert_blank_row(osl_relation_p, int); -void osl_relation_insert_blank_column(osl_relation_p, int); -void osl_relation_add_vector(osl_relation_p, osl_vector_p, int); -void osl_relation_sub_vector(osl_relation_p, osl_vector_p, int); -osl_relation_p osl_relation_from_vector(osl_vector_p); -void osl_relation_replace_constraints(osl_relation_p, - osl_relation_p, int); -void osl_relation_insert_constraints(osl_relation_p, - osl_relation_p, int); -void osl_relation_insert_columns(osl_relation_p, osl_relation_p,int); -osl_relation_p osl_relation_concat_constraints(osl_relation_p, osl_relation_p); -int osl_relation_equal(osl_relation_p, osl_relation_p); -int osl_relation_integrity_check(osl_relation_p, int, int, int,int); -osl_relation_p osl_relation_union(osl_relation_p, osl_relation_p); -void osl_relation_set_attributes(osl_relation_p, int, int, int, int); -void osl_relation_set_type(osl_relation_p, int); -int osl_relation_get_array_id(osl_relation_p); -int osl_relation_is_access(osl_relation_p); -void osl_relation_get_attributes(osl_relation_p, - int *, int *, int *, int *, int *); -osl_relation_p osl_relation_extend_output(osl_relation_p, int); - - -# if defined(__cplusplus) - } -# endif -#endif /* define OSL_RELATION_H */ diff --git a/cloog-0.17.0/osl/include/osl/relation_list.h b/cloog-0.17.0/osl/include/osl/relation_list.h deleted file mode 100644 index 6b17a7e..0000000 --- a/cloog-0.17.0/osl/include/osl/relation_list.h +++ /dev/null @@ -1,136 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** relation_list.h ** - **-----------------------------------------------------------------** - ** First version: 08/10/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_RELATION_LIST_H -# define OSL_RELATION_LIST_H - -# include -# include - - -# if defined(__cplusplus) -extern "C" - { -# endif - - -/** - * The osl_relation_list_t structure describes a (NULL-terminated - * linked) list of relations. - */ -struct osl_relation_list { - osl_relation_p elt; /**< An element of the list. */ - struct osl_relation_list * next; /**< Pointer to the next element - of the list.*/ -}; -typedef struct osl_relation_list osl_relation_list_t; -typedef struct osl_relation_list * osl_relation_list_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_relation_list_idump(FILE *, osl_relation_list_p, int); -void osl_relation_list_dump(FILE *, osl_relation_list_p); -void osl_relation_list_pprint_elts(FILE *, osl_relation_list_p, osl_names_p); -void osl_relation_list_pprint(FILE *, osl_relation_list_p, osl_names_p); -void osl_relation_list_print(FILE *, osl_relation_list_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ -osl_relation_list_p osl_relation_list_pread(FILE *, int); -osl_relation_list_p osl_relation_list_read(FILE *); - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_relation_list_p osl_relation_list_malloc(); -void osl_relation_list_free(osl_relation_list_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_relation_list_p osl_relation_list_node(osl_relation_p); -osl_relation_list_p osl_relation_list_clone(osl_relation_list_p); -osl_relation_list_p osl_relation_list_concat(osl_relation_list_p, - osl_relation_list_p); -void osl_relation_list_concat_inplace(osl_relation_list_p *, - osl_relation_list_p); -int osl_relation_list_equal(osl_relation_list_p, - osl_relation_list_p); -int osl_relation_list_integrity_check(osl_relation_list_p, - int, int, int, int); -void osl_relation_list_set_type(osl_relation_list_p, int); -osl_relation_list_p osl_relation_list_filter(osl_relation_list_p, int); -int osl_relation_list_count(osl_relation_list_p); -void osl_relation_list_get_attributes(osl_relation_list_p, - int *, int *, int *, - int *, int *); -# if defined(__cplusplus) - } -# endif -#endif /* define OSL_RELATION_LIST_H */ diff --git a/cloog-0.17.0/osl/include/osl/scop.h b/cloog-0.17.0/osl/include/osl/scop.h deleted file mode 100644 index bfb6389..0000000 --- a/cloog-0.17.0/osl/include/osl/scop.h +++ /dev/null @@ -1,152 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** scop.h ** - **-----------------------------------------------------------------** - ** First version: 30/04/2008 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -/*+**************************************************************************** - * THIS FILE HAS BEEN AUTOMATICALLY GENERATED FROM scop.h.in BY configure * - ******************************************************************************/ - - -#ifndef OSL_SCOP_H -# define OSL_SCOP_H - -# include - -# define OSL_RELEASE "0.8.1" - -# include -# include -# include -# include - - -# if defined(__cplusplus) -extern "C" - { -# endif - - -/** - * The scop_t structure stores a list of scops. Each node stores the useful - * information of a static control part of a program to process it within a - * polyhedral framework. Parameter information may be strings of characters - * (char *) when the type field is OSL_TYPE_STRING or a generic pointer - * to anything else (void *) when the type field is OSL_TYPE_GENERIC. - * The OpenScop library does not touch AT ALL generic information: printing, - * copy etc. must be done externally. - */ -struct osl_scop { - int version; /**< Version of the data structure */ - char * language; /**< Target language (backend) */ - osl_relation_p context; /**< Constraints on the SCoP parameters */ - osl_generic_p parameters; /**< NULL-terminated array of parameters */ - osl_statement_p statement; /**< Statement list of the SCoP */ - osl_interface_p registry; /**< Registered extensions interfaces */ - osl_generic_p extension; /**< List of extensions */ - void * usr; /**< A user-defined field, not touched - AT ALL by the OpenScop Library */ - struct osl_scop * next; /**< Next statement in the linked list */ -}; -typedef struct osl_scop osl_scop_t; -typedef struct osl_scop * osl_scop_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_scop_idump(FILE *, osl_scop_p, int); -void osl_scop_dump(FILE *, osl_scop_p); -void osl_scop_print(FILE *, osl_scop_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ -osl_scop_p osl_scop_pread(FILE *, osl_interface_p, int); -osl_scop_p osl_scop_read(FILE *); - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_scop_p osl_scop_malloc(); -void osl_scop_free(osl_scop_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_scop_p osl_scop_clone(osl_scop_p); -int osl_scop_equal(osl_scop_p, osl_scop_p); -int osl_scop_integrity_check(osl_scop_p); -int osl_scop_get_nb_parameters(osl_scop_p); -void osl_scop_register_extension(osl_scop_p, osl_interface_p); -void osl_scop_get_attributes(osl_scop_p, - int *, int *, int *, int *, int *); -void osl_scop_normalize_scattering(osl_scop_p); - - -# if defined(__cplusplus) - } -# endif - -#endif /* define OSL_SCOP_H */ diff --git a/cloog-0.17.0/osl/include/osl/scop.h.in b/cloog-0.17.0/osl/include/osl/scop.h.in deleted file mode 100644 index c8904ce..0000000 --- a/cloog-0.17.0/osl/include/osl/scop.h.in +++ /dev/null @@ -1,152 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** scop.h ** - **-----------------------------------------------------------------** - ** First version: 30/04/2008 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -/*+**************************************************************************** - * THIS FILE HAS BEEN AUTOMATICALLY GENERATED FROM scop.h.in BY configure * - ******************************************************************************/ - - -#ifndef OSL_SCOP_H -# define OSL_SCOP_H - -# include - -# define OSL_RELEASE "@PACKAGE_VERSION@" - -# include -# include -# include -# include - - -# if defined(__cplusplus) -extern "C" - { -# endif - - -/** - * The scop_t structure stores a list of scops. Each node stores the useful - * information of a static control part of a program to process it within a - * polyhedral framework. Parameter information may be strings of characters - * (char *) when the type field is OSL_TYPE_STRING or a generic pointer - * to anything else (void *) when the type field is OSL_TYPE_GENERIC. - * The OpenScop library does not touch AT ALL generic information: printing, - * copy etc. must be done externally. - */ -struct osl_scop { - int version; /**< Version of the data structure */ - char * language; /**< Target language (backend) */ - osl_relation_p context; /**< Constraints on the SCoP parameters */ - osl_generic_p parameters; /**< NULL-terminated array of parameters */ - osl_statement_p statement; /**< Statement list of the SCoP */ - osl_interface_p registry; /**< Registered extensions interfaces */ - osl_generic_p extension; /**< List of extensions */ - void * usr; /**< A user-defined field, not touched - AT ALL by the OpenScop Library */ - struct osl_scop * next; /**< Next statement in the linked list */ -}; -typedef struct osl_scop osl_scop_t; -typedef struct osl_scop * osl_scop_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_scop_idump(FILE *, osl_scop_p, int); -void osl_scop_dump(FILE *, osl_scop_p); -void osl_scop_print(FILE *, osl_scop_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ -osl_scop_p osl_scop_pread(FILE *, osl_interface_p, int); -osl_scop_p osl_scop_read(FILE *); - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_scop_p osl_scop_malloc(); -void osl_scop_free(osl_scop_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_scop_p osl_scop_clone(osl_scop_p); -int osl_scop_equal(osl_scop_p, osl_scop_p); -int osl_scop_integrity_check(osl_scop_p); -int osl_scop_get_nb_parameters(osl_scop_p); -void osl_scop_register_extension(osl_scop_p, osl_interface_p); -void osl_scop_get_attributes(osl_scop_p, - int *, int *, int *, int *, int *); -void osl_scop_normalize_scattering(osl_scop_p); - - -# if defined(__cplusplus) - } -# endif - -#endif /* define OSL_SCOP_H */ diff --git a/cloog-0.17.0/osl/include/osl/statement.h b/cloog-0.17.0/osl/include/osl/statement.h deleted file mode 100644 index e671ea3..0000000 --- a/cloog-0.17.0/osl/include/osl/statement.h +++ /dev/null @@ -1,138 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** statement.h ** - **-----------------------------------------------------------------** - ** First version: 30/04/2008 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_STATEMENT_H -# define OSL_STATEMENT_H - -# include -# include -# include -# include -# include -# include - -# if defined(__cplusplus) -extern "C" - { -# endif - - -/** - * The osl_statement_t structure stores a list of statement. Each node - * contains the useful informations for a given statement to process it - * within a polyhedral framework. The order in the list may matter for naming - * conventions (e.g. "S1" for the first statement in the list). - */ -struct osl_statement { - osl_relation_p domain; /**< Iteration domain of the statement */ - osl_relation_p scattering; /**< Scattering relation of the statement*/ - osl_relation_list_p access; /**< Access information */ - osl_generic_p body; /**< Original statement body */ - void * usr; /**< A user-defined field, not touched - AT ALL by the OpenScop Library. */ - struct osl_statement * next; /**< Next statement in the linked list */ -}; -typedef struct osl_statement osl_statement_t; -typedef struct osl_statement * osl_statement_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_statement_idump(FILE *, osl_statement_p, int); -void osl_statement_dump(FILE *, osl_statement_p); -void osl_statement_pprint(FILE *, osl_statement_p, osl_names_p); -void osl_statement_print(FILE *, osl_statement_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ -osl_statement_p osl_statement_pread(FILE *, osl_interface_p, int); -osl_statement_p osl_statement_read(FILE *); - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_statement_p osl_statement_malloc(); -void osl_statement_free(osl_statement_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -void osl_statement_add(osl_statement_p *, osl_statement_p); -void osl_statement_compact(osl_statement_p, int); -int osl_statement_number(osl_statement_p); -osl_statement_p osl_statement_clone(osl_statement_p); -int osl_statement_equal(osl_statement_p, osl_statement_p); -int osl_statement_integrity_check(osl_statement_p, int); -int osl_statement_get_nb_iterators(osl_statement_p); -void osl_statement_get_attributes(osl_statement_p, int *, int *, - int *, int *, int *); - -# if defined(__cplusplus) - } -# endif -#endif /* define OSL_STATEMENT_H */ diff --git a/cloog-0.17.0/osl/include/osl/strings.h b/cloog-0.17.0/osl/include/osl/strings.h deleted file mode 100644 index c32ba11..0000000 --- a/cloog-0.17.0/osl/include/osl/strings.h +++ /dev/null @@ -1,124 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** strings.h ** - **-----------------------------------------------------------------** - ** First version: 13/07/2011 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_STRINGS_H -# define OSL_STRINGS_H - -# include -# include - -# if defined(__cplusplus) -extern "C" - { -# endif - -# define OSL_URI_STRINGS "strings" - -/* The "strings" type is simply a NULL-terminated array of C character - * strings, i.e. a char **. It is encapsulated into a structure to allow - * its manipulation through a generic type. - */ -struct osl_strings { - char ** string; /**< NULL-terminated array of character strings */ -}; -typedef struct osl_strings osl_strings_t; -typedef struct osl_strings * osl_strings_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_strings_idump(FILE *, osl_strings_p, int); -void osl_strings_dump(FILE *, osl_strings_p); -char * osl_strings_sprint(osl_strings_p); -void osl_strings_print(FILE *, osl_strings_p); - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ -osl_strings_p osl_strings_sread(char **); -osl_strings_p osl_strings_read(FILE *); - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_strings_p osl_strings_malloc(); -void osl_strings_free(osl_strings_p); - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_strings_p osl_strings_clone(osl_strings_p); -int osl_strings_equal(osl_strings_p, osl_strings_p); -int osl_strings_size(osl_strings_p); -osl_strings_p osl_strings_encapsulate(char *); -osl_interface_p osl_strings_interface(); -osl_strings_p osl_strings_generate(char *, int); - - -# if defined(__cplusplus) - } -# endif - -#endif /* define OSL_STRINGS_H */ diff --git a/cloog-0.17.0/osl/include/osl/util.h b/cloog-0.17.0/osl/include/osl/util.h deleted file mode 100644 index fcf2977..0000000 --- a/cloog-0.17.0/osl/include/osl/util.h +++ /dev/null @@ -1,97 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** util.h ** - **-----------------------------------------------------------------** - ** First version: 08/10/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_UTIL_H -# define OSL_UTIL_H - -# include - - -# if defined(__cplusplus) -extern "C" - { -# endif - - -/*+*************************************************************************** - * Utility functions * - *****************************************************************************/ -char * osl_util_skip_blank_and_comments(FILE *, char *); -void osl_util_sskip_blank_and_comments(char **); -int osl_util_read_int(FILE *, char **); -char * osl_util_read_tag(FILE *, char **); -char * osl_util_read_tail(FILE *); -char * osl_util_read_uptotag(FILE *, char *); -char * osl_util_read_uptoendtag(FILE *, char *); -char * osl_util_tag_content(char *, char *); -void osl_util_safe_strcat(char **, char *, int *); -int osl_util_get_precision(); -void osl_util_print_provided(FILE *, int, char *); -char * osl_util_identifier_substitution(char *, char **); - - -# if defined(__cplusplus) - } -# endif - -#endif /* define OSL_UTIL_H */ diff --git a/cloog-0.17.0/osl/include/osl/vector.h b/cloog-0.17.0/osl/include/osl/vector.h deleted file mode 100644 index 98701ee..0000000 --- a/cloog-0.17.0/osl/include/osl/vector.h +++ /dev/null @@ -1,122 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** vector.h ** - **-----------------------------------------------------------------** - ** First version: 01/05/2008 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#ifndef OSL_VECTOR_H -# define OSL_VECTOR_H - -# include -# include - - -# if defined(__cplusplus) -extern "C" - { -# endif - - -/** - * The osl_vector_t structure stores a vector information in the PolyLib - * format (the first entry has a specific meaning). When a vector - * describes a linear constraint, a 0 means it is an equality == 0, a 1 means - * an inequality >= 0. When the vector describes an array access, a number - * different than 0 is the array identifier. - */ -struct osl_vector { - int precision; /**< Precision of the integer elements. */ - int size; /**< Number of vector entries */ - void * v; /**< An array of values */ -}; -typedef struct osl_vector osl_vector_t; -typedef struct osl_vector * osl_vector_p; - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ -void osl_vector_idump(FILE *, osl_vector_p, int); -void osl_vector_dump(FILE *, osl_vector_p); - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ -osl_vector_p osl_vector_pmalloc(int, int); -osl_vector_p osl_vector_malloc(int); -void osl_vector_free(osl_vector_p); - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ -osl_vector_p osl_vector_add_scalar(osl_vector_p, int); -osl_vector_p osl_vector_mul_scalar(osl_vector_p, int); -osl_vector_p osl_vector_add(osl_vector_p, osl_vector_p); -osl_vector_p osl_vector_sub(osl_vector_p, osl_vector_p); -void osl_vector_tag_inequality(osl_vector_p); -void osl_vector_tag_equality(osl_vector_p); -int osl_vector_equal(osl_vector_p, osl_vector_p); - -# if defined(__cplusplus) - } -# endif -#endif /* define OSL_VECTOR_H */ diff --git a/cloog-0.17.0/osl/source/Makefile.am b/cloog-0.17.0/osl/source/Makefile.am deleted file mode 100644 index 0a804f1..0000000 --- a/cloog-0.17.0/osl/source/Makefile.am +++ /dev/null @@ -1,105 +0,0 @@ -# -# /*+------------------------------------------------------------------** -# ** OpenScop Library ** -# **------------------------------------------------------------------** -# ** makefile.am ** -# **------------------------------------------------------------------** -# ** First version: 30/04/2008 ** -# **------------------------------------------------------------------** -# -# -# *************************************************************************** -# * OpenScop: Structures and formats for polyhedral tools to talk together * -# *************************************************************************** -# * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * -# * / / / // // // // / / / // // / / // / /|,_, * -# * / / / // // // // / / / // // / / // / / / /\ * -# * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * -# * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * -# * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * -# * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * -# * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * -# * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * -# * | I | | | | e | | | | | | | | | | | | | \ \ \ * -# * | T | | | | | | | | | | | | | | | | | \ \ \ * -# * | E | | | | | | | | | | | | | | | | | \ \ \ * -# * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * -# * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * -# * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * -# * * -# * Copyright (C) 2008 University Paris-Sud 11 and INRIA * -# * * -# * (3-clause BSD license) * -# * Redistribution and use in source and binary forms, with or without * -# * modification, are permitted provided that the following conditions * -# * are met: * -# * * -# * 1. Redistributions of source code must retain the above copyright * -# * notice, this list of conditions and the following disclaimer. * -# * 2. Redistributions in binary form must reproduce the above copyright * -# * notice, this list of conditions and the following disclaimer in the * -# * documentation and/or other materials provided with the distribution. * -# * 3. The name of the author may not be used to endorse or promote * -# * products derived from this software without specific prior written * -# * permission. * -# * * -# * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * -# * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * -# * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * -# * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * -# * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * -# * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * -# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * -# * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * -# * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * -# * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * -# * POSSIBILITY OF SUCH DAMAGE. * -# * * -# * OpenScop Library, a library to manipulate OpenScop formats and data * -# * structures. Written by: * -# * Cedric Bastoul and * -# * Louis-Noel Pouchet * -# * * -# ***************************************************************************/ -# -# Makefile.am (or makefile if generated) of the OpenScop Library. -# Makefile.am is not a makefile, you must run the 'autogen.sh' THEN the -# configure shellscript to generate the Makefile thanks to this file. - - -############################################################################# -SUBDIRS = - -############################################################################# -MAINTAINERCLEANFILES = Makefile.in - -INCLUDES = -I$(top_builddir) -I$(top_srcdir) \ - -I$(top_builddir)/include \ - -I$(top_srcdir)/include - -############################################################################# - -lib_LTLIBRARIES = libosl.la - - -libosl_la_SOURCES = \ - scop.c \ - statement.c \ - extensions/textual.c \ - extensions/comment.c \ - extensions/scatnames.c \ - extensions/arrays.c \ - extensions/lines.c \ - extensions/irregular.c \ - interface.c \ - generic.c \ - relation.c \ - relation_list.c \ - vector.c \ - names.c \ - strings.c \ - body.c \ - int.c \ - util.c - -AM_CFLAGS = -Wall -fomit-frame-pointer -g diff --git a/cloog-0.17.0/osl/source/Makefile.in b/cloog-0.17.0/osl/source/Makefile.in deleted file mode 100644 index 2441a44..0000000 --- a/cloog-0.17.0/osl/source/Makefile.in +++ /dev/null @@ -1,834 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# /*+------------------------------------------------------------------** -# ** OpenScop Library ** -# **------------------------------------------------------------------** -# ** makefile.am ** -# **------------------------------------------------------------------** -# ** First version: 30/04/2008 ** -# **------------------------------------------------------------------** -# -# -# *************************************************************************** -# * OpenScop: Structures and formats for polyhedral tools to talk together * -# *************************************************************************** -# * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * -# * / / / // // // // / / / // // / / // / /|,_, * -# * / / / // // // // / / / // // / / // / / / /\ * -# * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * -# * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * -# * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * -# * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * -# * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * -# * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * -# * | I | | | | e | | | | | | | | | | | | | \ \ \ * -# * | T | | | | | | | | | | | | | | | | | \ \ \ * -# * | E | | | | | | | | | | | | | | | | | \ \ \ * -# * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * -# * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * -# * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * -# * * -# * Copyright (C) 2008 University Paris-Sud 11 and INRIA * -# * * -# * (3-clause BSD license) * -# * Redistribution and use in source and binary forms, with or without * -# * modification, are permitted provided that the following conditions * -# * are met: * -# * * -# * 1. Redistributions of source code must retain the above copyright * -# * notice, this list of conditions and the following disclaimer. * -# * 2. Redistributions in binary form must reproduce the above copyright * -# * notice, this list of conditions and the following disclaimer in the * -# * documentation and/or other materials provided with the distribution. * -# * 3. The name of the author may not be used to endorse or promote * -# * products derived from this software without specific prior written * -# * permission. * -# * * -# * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * -# * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * -# * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * -# * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * -# * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * -# * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * -# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * -# * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * -# * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * -# * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * -# * POSSIBILITY OF SUCH DAMAGE. * -# * * -# * OpenScop Library, a library to manipulate OpenScop formats and data * -# * structures. Written by: * -# * Cedric Bastoul and * -# * Louis-Noel Pouchet * -# * * -# ***************************************************************************/ -# -# Makefile.am (or makefile if generated) of the OpenScop Library. -# Makefile.am is not a makefile, you must run the 'autogen.sh' THEN the -# configure shellscript to generate the Makefile thanks to this file. - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = source -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/autoconf/libtool.m4 \ - $(top_srcdir)/autoconf/ltoptions.m4 \ - $(top_srcdir)/autoconf/ltsugar.m4 \ - $(top_srcdir)/autoconf/ltversion.m4 \ - $(top_srcdir)/autoconf/lt~obsolete.m4 \ - $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(libdir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libosl_la_LIBADD = -am_libosl_la_OBJECTS = scop.lo statement.lo textual.lo comment.lo \ - scatnames.lo arrays.lo lines.lo irregular.lo interface.lo \ - generic.lo relation.lo relation_list.lo vector.lo names.lo \ - strings.lo body.lo int.lo util.lo -libosl_la_OBJECTS = $(am_libosl_la_OBJECTS) -DEFAULT_INCLUDES = -I.@am__isrc@ -depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(libosl_la_SOURCES) -DIST_SOURCES = $(libosl_la_SOURCES) -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CD = @CD@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOXYGEN = @DOXYGEN@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_aux_dir = @ac_aux_dir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ - -############################################################################# -SUBDIRS = - -############################################################################# -MAINTAINERCLEANFILES = Makefile.in -INCLUDES = -I$(top_builddir) -I$(top_srcdir) \ - -I$(top_builddir)/include \ - -I$(top_srcdir)/include - - -############################################################################# -lib_LTLIBRARIES = libosl.la -libosl_la_SOURCES = \ - scop.c \ - statement.c \ - extensions/textual.c \ - extensions/comment.c \ - extensions/scatnames.c \ - extensions/arrays.c \ - extensions/lines.c \ - extensions/irregular.c \ - interface.c \ - generic.c \ - relation.c \ - relation_list.c \ - vector.c \ - names.c \ - strings.c \ - body.c \ - int.c \ - util.c - -AM_CFLAGS = -Wall -fomit-frame-pointer -g -all: all-recursive - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign source/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign source/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libosl.la: $(libosl_la_OBJECTS) $(libosl_la_DEPENDENCIES) - $(LINK) -rpath $(libdir) $(libosl_la_OBJECTS) $(libosl_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arrays.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/body.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comment.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generic.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interface.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/irregular.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lines.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/names.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/relation.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/relation_list.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scatnames.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scop.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/statement.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strings.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/textual.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -textual.lo: extensions/textual.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT textual.lo -MD -MP -MF $(DEPDIR)/textual.Tpo -c -o textual.lo `test -f 'extensions/textual.c' || echo '$(srcdir)/'`extensions/textual.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/textual.Tpo $(DEPDIR)/textual.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='extensions/textual.c' object='textual.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o textual.lo `test -f 'extensions/textual.c' || echo '$(srcdir)/'`extensions/textual.c - -comment.lo: extensions/comment.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT comment.lo -MD -MP -MF $(DEPDIR)/comment.Tpo -c -o comment.lo `test -f 'extensions/comment.c' || echo '$(srcdir)/'`extensions/comment.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/comment.Tpo $(DEPDIR)/comment.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='extensions/comment.c' object='comment.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o comment.lo `test -f 'extensions/comment.c' || echo '$(srcdir)/'`extensions/comment.c - -scatnames.lo: extensions/scatnames.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT scatnames.lo -MD -MP -MF $(DEPDIR)/scatnames.Tpo -c -o scatnames.lo `test -f 'extensions/scatnames.c' || echo '$(srcdir)/'`extensions/scatnames.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/scatnames.Tpo $(DEPDIR)/scatnames.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='extensions/scatnames.c' object='scatnames.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o scatnames.lo `test -f 'extensions/scatnames.c' || echo '$(srcdir)/'`extensions/scatnames.c - -arrays.lo: extensions/arrays.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arrays.lo -MD -MP -MF $(DEPDIR)/arrays.Tpo -c -o arrays.lo `test -f 'extensions/arrays.c' || echo '$(srcdir)/'`extensions/arrays.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/arrays.Tpo $(DEPDIR)/arrays.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='extensions/arrays.c' object='arrays.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arrays.lo `test -f 'extensions/arrays.c' || echo '$(srcdir)/'`extensions/arrays.c - -lines.lo: extensions/lines.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lines.lo -MD -MP -MF $(DEPDIR)/lines.Tpo -c -o lines.lo `test -f 'extensions/lines.c' || echo '$(srcdir)/'`extensions/lines.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lines.Tpo $(DEPDIR)/lines.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='extensions/lines.c' object='lines.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lines.lo `test -f 'extensions/lines.c' || echo '$(srcdir)/'`extensions/lines.c - -irregular.lo: extensions/irregular.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT irregular.lo -MD -MP -MF $(DEPDIR)/irregular.Tpo -c -o irregular.lo `test -f 'extensions/irregular.c' || echo '$(srcdir)/'`extensions/irregular.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/irregular.Tpo $(DEPDIR)/irregular.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='extensions/irregular.c' object='irregular.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o irregular.lo `test -f 'extensions/irregular.c' || echo '$(srcdir)/'`extensions/irregular.c - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile $(LTLIBRARIES) -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(libdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-recursive - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-libLTLIBRARIES - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ - install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ - distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-libLTLIBRARIES install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ - uninstall-libLTLIBRARIES - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.17.0/osl/source/body.c b/cloog-0.17.0/osl/source/body.c deleted file mode 100644 index 9f47057..0000000 --- a/cloog-0.17.0/osl/source/body.c +++ /dev/null @@ -1,389 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** body.c ** - **-----------------------------------------------------------------** - ** First version: 25/06/2011 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -# include -# include -# include -# include -# include -# include -# include -# include -# include - - -/*+*************************************************************************** - * Structure display functions * - *****************************************************************************/ - - -/** - * osl_body_idump function: - * this function displays an osl_body_t structure (*body) into a - * file (file, possibly stdout) in a way that trends to be understandable. - * It includes an indentation level (level) in order to work with others - * dumping functions. - * \param[in] file File where informations are printed. - * \param[in] body The body whose information has to be printed. - * \param[in] level Number of spaces before printing, for each line. - */ -void osl_body_idump(FILE * file, osl_body_p body, int level) { - int j; - - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - - if (body != NULL) { - fprintf(file, "+-- osl_body_t\n"); - - // A blank line. - for (j = 0; j <= level+1; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); - - // Print the iterators - osl_strings_idump(file, body->iterators, level + 1); - - // Print the original body expression. - osl_strings_idump(file, body->expression, level + 1); - } - else { - fprintf(file, "+-- NULL body\n"); - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_body_dump function: - * this function prints the content of an osl_body_t structure - * (*body) into a file (file, possibly stdout). - * \param[in] file File where informations are printed. - * \param[in] body The body whose information has to be printed. - */ -void osl_body_dump(FILE * file, osl_body_p body) { - osl_body_idump(file, body, 0); -} - - -/** - * osl_body_print function: - * this function prints the content of an osl_body_t structure - * (*body) into a file (file, possibly stdout) in the OpenScop format. - * \param[in] file File where informations are printed. - * \param[in] body The body whose information has to be printed. - */ -void osl_body_print(FILE * file, osl_body_p body) { - int nb_iterators; - - if (body != NULL) { - nb_iterators = osl_strings_size(body->iterators); - fprintf(file, "# Number of original iterators\n"); - fprintf(file, "%d\n", nb_iterators); - - if (nb_iterators > 0) { - fprintf(file, "\n# List of original iterators\n"); - osl_strings_print(file, body->iterators); - } - - fprintf(file, "\n# Statement body expression\n"); - osl_strings_print(file, body->expression); - } - else { - fprintf(file, "# NULL statement body\n"); - } -} - - -/** - * osl_body_sprint function: - * this function prints the content of an osl_body_t structure - * (*body) into a string (returned) in the OpenScop textual format. - * \param[in] body The body structure which has to be printed. - * \return A string containing the OpenScop dump of the body structure. - */ -char * osl_body_sprint(osl_body_p body) { - int nb_iterators; - int high_water_mark = OSL_MAX_STRING; - char * string = NULL; - char buffer[OSL_MAX_STRING]; - char * iterators, * expression; - - OSL_malloc(string, char *, high_water_mark * sizeof(char)); - string[0] = '\0'; - - if (body != NULL) { - nb_iterators = osl_strings_size(body->iterators); - sprintf(buffer, "# Number of original iterators\n%d\n", nb_iterators); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - - if (nb_iterators > 0) { - sprintf(buffer, "# List of original iterators\n"); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - iterators = osl_strings_sprint(body->iterators); - osl_util_safe_strcat(&string, iterators, &high_water_mark); - free(iterators); - } - - sprintf(buffer, "# Statement body expression\n"); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - expression = osl_strings_sprint(body->expression); - osl_util_safe_strcat(&string, expression, &high_water_mark); - free(expression); - } - else { - sprintf(buffer, "# NULL body\n"); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - } - - return string; -} - - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - - -/** - * osl_body_read function: - * this function reads a body structure from a string complying to the - * OpenScop textual format and returns a pointer to this body structure. - * The input string should only contain the body this function - * has to read (comments at the end of the line are accepted). The input - * parameter is updated to the position in the input string this function - * reach right after reading the strings structure. - * \param[in,out] input The input string where to find a body structure. - * Updated to the position after what has been read. - * \return A pointer to the body structure that has been read. - */ -osl_body_p osl_body_sread(char ** input) { - osl_body_p body = NULL; - char * expression; - int nb_iterators; - - if (input) { - body = osl_body_malloc(); - - // Read the number of iterators. - nb_iterators = osl_util_read_int(NULL, input); - - // Read the iterator strings if any. - if (nb_iterators > 0) - body->iterators = osl_strings_sread(input); - - // Read the body: - // - Skip blank/commented lines and spaces before the body. - osl_util_sskip_blank_and_comments(input); - - // - Remove the comments after the body. - expression = *input; - while (*input && **input != '#' && **input != '\n') - (*input)++; - - if (*input && **input == '#') { - **input = '\0'; - while (**input != '\n') - (*input)++; - } - else { - if (*input && **input == '\n') { - **input = '\0'; - (*input)++; - } - } - - // - Copy the body. - body->expression = osl_strings_encapsulate(strdup(expression)); - } - - return body; -} - - -/*+*************************************************************************** - * Memory allocation/deallocation functions * - *****************************************************************************/ - - -/** - * osl_body_malloc function: - * this function allocates the memory space for an osl_body_t - * structure and sets its fields with default values. Then it returns a pointer - * to the allocated space. - * \return A pointer to an empty body with fields set to default values. - */ -osl_body_p osl_body_malloc() { - osl_body_p body; - - OSL_malloc(body, osl_body_p, sizeof(osl_body_t)); - body->iterators = NULL; - body->expression = NULL; - - return body; -} - - -/** - * osl_body_free function: - * this function frees the allocated memory for an osl_body_t - * structure. - * \param[in,out] body The pointer to the body we want to free. - */ -void osl_body_free(osl_body_p body) { - - if (body != NULL) { - osl_strings_free(body->iterators); - osl_strings_free(body->expression); - free(body); - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_body_clone function: - * this functions builds and returns a "hard copy" (not a pointer copy) of an - * osl_body_t data structure provided as parameter. However, let us - * recall here that non-string elements are untouched by the OpenScop Library. - * \param[in] body The pointer to the body we want to copy. - * \return A pointer to the full copy of the body provided as parameter. - */ -osl_body_p osl_body_clone(osl_body_p body) { - osl_body_p copy = NULL; - - if (body != NULL) { - copy = osl_body_malloc(); - copy->iterators = osl_strings_clone(body->iterators); - copy->expression = osl_strings_clone(body->expression); - } - - return copy; -} - - -/** - * osl_body_equal function: - * this function returns true if the two bodies are the same, false - * otherwise (the usr field is not tested). However, let us - * recall here that non-string elements are untouched by the OpenScop Library. - * \param[in] b1 The first body. - * \param[in] b2 The second body. - * \return 1 if b1 and b2 are the same (content-wise), 0 otherwise. - */ -int osl_body_equal(osl_body_p b1, osl_body_p b2) { - - if (b1 == b2) - return 1; - - if (((b1 != NULL) && (b2 == NULL)) || - ((b1 == NULL) && (b2 != NULL))) { - OSL_info("bodies are not the same"); - return 0; - } - - if (!osl_strings_equal(b1->iterators, b2->iterators)) { - OSL_info("body iterators are not the same"); - return 0; - } - - if (!osl_strings_equal(b1->expression, b2->expression)) { - OSL_info("body expressions are not the same"); - return 0; - } - - return 1; -} - - -/** - * osl_body_interface function: - * this function creates an interface structure corresponding to the body - * structure and returns it). - * \return An interface structure for the body structure. - */ -osl_interface_p osl_body_interface() { - osl_interface_p interface = osl_interface_malloc(); - - interface->URI = strdup(OSL_URI_BODY); - interface->idump = (osl_idump_f)osl_body_idump; - interface->sprint = (osl_sprint_f)osl_body_sprint; - interface->sread = (osl_sread_f)osl_body_sread; - interface->malloc = (osl_malloc_f)osl_body_malloc; - interface->free = (osl_free_f)osl_body_free; - interface->clone = (osl_clone_f)osl_body_clone; - interface->equal = (osl_equal_f)osl_body_equal; - - return interface; -} - diff --git a/cloog-0.17.0/osl/source/extensions/arrays.c b/cloog-0.17.0/osl/source/extensions/arrays.c deleted file mode 100644 index bb48bb9..0000000 --- a/cloog-0.17.0/osl/source/extensions/arrays.c +++ /dev/null @@ -1,456 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** extensions/arrays.c ** - **-----------------------------------------------------------------** - ** First version: 07/12/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ - - -/** - * osl_arrays_print_structure function: - * this function displays a osl_arrays_t structure (*arrays) into a file - * (file, possibly stdout) in a way that trends to be understandable. It - * includes an indentation level (level) in order to work with others - * idump functions. - * \param file The file where the information has to be printed. - * \param arrays The arrays structure whose information has to be printed. - * \param level Number of spaces before printing, for each line. - */ -void osl_arrays_idump(FILE * file, osl_arrays_p arrays, int level) { - int i, j; - - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - - if (arrays != NULL) - fprintf(file, "+-- osl_arrays_t\n"); - else - fprintf(file, "+-- NULL arrays\n"); - - if (arrays != NULL) { - // Go to the right level. - for(j = 0; j <= level; j++) - fprintf(file, "|\t"); - - // Display the number of names. - fprintf(file, "nb_names: %d\n", arrays->nb_names); - - // Display the id/name. - for(i = 0; i < arrays->nb_names; i++) { - // Go to the right level. - for(j = 0; j <= level; j++) - fprintf(file, "|\t"); - - fprintf(file, "id: %2d, name: %s\n", arrays->id[i], arrays->names[i]); - } - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_arrays_print function: - * this function prints the content of an osl_arrays_t structure - * (*arrays) into a file (file, possibly stdout). - * \param file The file where the information has to be printed. - * \param arrays The arrays structure whose information has to be printed. - */ -void osl_arrays_dump(FILE * file, osl_arrays_p arrays) { - osl_arrays_idump(file, arrays, 0); -} - - -/** - * osl_arrays_print_openscop function: - * this function prints the content of an osl_arrays_t structure - * (*arrays) into a string (returned) in the OpenScop textual format. - * \param arrays The arrays structure whose information has to be printed. - * \return A string containing the OpenScop dump of the arrays structure. - */ -char * osl_arrays_sprint(osl_arrays_p arrays) { - int i; - int high_water_mark = OSL_MAX_STRING; - char * string = NULL; - char * buffer; - - if (arrays != NULL) { - OSL_malloc(string, char *, high_water_mark * sizeof(char)); - OSL_malloc(buffer, char *, OSL_MAX_STRING * sizeof(char)); - string[0] = '\0'; - - sprintf(buffer, OSL_TAG_ARRAYS_START); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - - sprintf(buffer, "\n%d\n", arrays->nb_names); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - - for (i = 0; i < arrays->nb_names; i++) { - sprintf(buffer, "%d %s\n", arrays->id[i], arrays->names[i]); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - } - sprintf(buffer, OSL_TAG_ARRAYS_STOP"\n"); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - - OSL_realloc(string, char *, (strlen(string) + 1) * sizeof(char)); - free(buffer); - } - - return string; -} - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - - -/** - * osl_arrays_sread function: - * this function reads an arrays structure from a string complying to the - * OpenScop textual format and returns a pointer to this arrays structure. - * The string should contain only one textual format of an arrays structure. - * \param extensions The input string where to find an arrays structure. - * \return A pointer to the arrays structure that has been read. - */ -osl_arrays_p osl_arrays_sread(char ** extensions_fixme) { - int i, k, array_id; - int nb_names; - int * id; - char ** names; - char * content, * content_backup; - char buff[OSL_MAX_STRING]; - osl_arrays_p arrays; - - // FIXME: this is a quick and dirty thing to accept char ** instead - // of char * in the parameter: really do it and update the - // pointer to after what has been read. - content = *extensions_fixme; - - if (content == NULL) { - OSL_debug("no arrays optional tag"); - return NULL; - } - content_backup = content; - - // Find the number of names provided. - nb_names = osl_util_read_int(NULL, &content); - - // Allocate the array of id and names. - id = (int *)malloc(nb_names * sizeof(int)); - names = (char **)malloc(nb_names * sizeof(char *)); - for (i = 0; i < nb_names; i++) - names[i] = NULL; - - // Get each array name. - for (k = 0; k < nb_names; k++) { - // Skip blank or commented lines. - while (*content == '#' || *content == '\n') { - for (; *content != '\n'; ++content) - continue; - ++content; - } - - // Get the array name id. - for (i = 0; *content && ! isspace(*content); ++i, ++content) - buff[i] = *content; - buff[i] = '\0'; - sscanf(buff, "%d", &array_id); - if (array_id <= 0) - OSL_error("array id must be > 0"); - id[k] = array_id; - - // Get the array name string. - while (*content && isspace(*content)) - ++content; - for (i = 0; *content && ! isspace(*content); ++i, ++content) - buff[i] = *content; - buff[i] = '\0'; - names[k] = strdup(buff); - - // Go to the end of line. - while (*content && *content != '\n') - ++content; - } - free(content_backup); - - arrays = osl_arrays_malloc(); - arrays->nb_names = nb_names; - arrays->id = id; - arrays->names = names; - - return arrays; -} - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ - - -/** - * osl_arrays_malloc function: - * This function allocates the memory space for an osl_arrays_t - * structure and sets its fields with default values. Then it returns a - * pointer to the allocated space. - * \return A pointer to an empty arrays structure with fields set to - * default values. - */ -osl_arrays_p osl_arrays_malloc() { - osl_arrays_p arrays; - - OSL_malloc(arrays, osl_arrays_p, sizeof(osl_arrays_t)); - arrays->nb_names = 0; - arrays->id = NULL; - arrays->names = NULL; - - return arrays; -} - - -/** - * osl_arrays_free function: - * This function frees the allocated memory for an arrays structure. - * \param arrays The pointer to the arrays structure we want to free. - */ -void osl_arrays_free(osl_arrays_p arrays) { - int i; - - if (arrays != NULL) { - if (arrays->names != NULL) { - free(arrays->id); - for (i = 0; i < arrays->nb_names; i++) - free(arrays->names[i]); - free(arrays->names); - } - - free(arrays); - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_arrays_clone function: - * This function builds and returns a "hard copy" (not a pointer copy) of an - * osl_arrays_t data structure. - * \param arrays The pointer to the arrays structure we want to copy. - * \return A pointer to the copy of the arrays structure. - */ -osl_arrays_p osl_arrays_clone(osl_arrays_p arrays) { - osl_arrays_p copy; - int i; - - if (arrays == NULL) - return NULL; - - copy = osl_arrays_malloc(); - if (copy != NULL) { - copy->nb_names = arrays->nb_names; - copy->id = (int *)malloc(arrays->nb_names * sizeof(int)); - OSL_malloc(copy->names, char **, arrays->nb_names * sizeof(char*)); - - for (i = 0; i < arrays->nb_names; i++) { - copy->id[i] = arrays->id[i]; - copy->names[i] = strdup(arrays->names[i]); - if ((copy->names[i] == NULL) && (arrays->names[i] != NULL)) - OSL_error("memory overflow"); - } - } - - return copy; -} - - -/** - * osl_arrays_equal function: - * this function returns true if the two arrays structures are the same - * (content-wise), false otherwise. This functions considers two arrays - * structures as equal if the order of the array names differ, however the - * identifiers and names must be the same. - * \param a1 The first arrays structure. - * \param a2 The second arrays structure. - * \return 1 if a1 and a2 are the same (content-wise), 0 otherwise. - */ -int osl_arrays_equal(osl_arrays_p a1, osl_arrays_p a2) { - int i, j, found; - - if (a1 == a2) - return 1; - - if (((a1 == NULL) && (a2 != NULL)) || ((a1 != NULL) && (a2 == NULL))) - return 0; - - // Check whether the number of names is the same. - if (a1->nb_names != a2->nb_names) - return 0; - - // We accept a different order of the names, as long as the identifiers - // are the same. - for (i = 0; i < a1->nb_names; i++) { - found = 0; - for (j = 0; j < a2->nb_names; j++) { - if ((a1->id[i] == a2->id[j]) && (!strcmp(a1->names[i], a2->names[j]))) { - found = 1; - break; - } - } - if (found != 1) - return 0; - } - - return 1; -} - - -/** - * osl_arrays_generate_names function: - * This function generates an array of strings corresponding to array names. - * The ith string will correspond to the array name with identifier i in the - * arrays structure. If some identifiers are missing, the corresponding names - * will be generated. The size of the array of strings corresponds to the - * maximum identifier, it is returned using the parameter nb_names. - * \param arrays The source of some array names. - * \param nb_names Pointer to the location to store the number of names. - * \return An array of strings corresponding to the array names. - */ -char ** osl_arrays_generate_names(osl_arrays_p arrays, int * nb_names) { - char ** names = NULL; - char ** tmpnames; - int i; - - *nb_names = 0; - - if (arrays != NULL) { - // Get the maximum id (it will be nb_names). - for (i = 0; i < arrays->nb_names; i++) - if (arrays->id[i] > *nb_names) - *nb_names = arrays->id[i]; - - // Allocate the array of names and store the existing names. - OSL_malloc(names, char **, *nb_names * sizeof(char *)); - for (i = 0; i < arrays->nb_names; i++) { - names[arrays->id[i] - 1] = strdup(arrays->names[i]); - if (names[arrays->id[i] - 1] == NULL) - OSL_error("memory overflow"); - } - - // Fill the missing names. - // TODO : update this with the new osl_strings_t - /* - tmpnames = osl_strings_generate("A_", *nb_names); - for (i = 0; i < *nb_names; i++) { - if (names[i] == NULL || names[i][0] == '\0') - names[i] = tmpnames[i]; // Use a generated name. - else - free(tmpnames[i]); // Use a read name. - } - free(tmpnames); - */ - } - - return names; -} - - -/** - * osl_arrays_interface function: - * this function creates an interface structure corresponding to the arrays - * extension and returns it). - * \return An interface structure for the arrays extension. - */ -osl_interface_p osl_arrays_interface() { - osl_interface_p interface = osl_interface_malloc(); - - interface->URI = strdup(OSL_URI_ARRAYS); - interface->idump = (osl_idump_f)osl_arrays_idump; - interface->sprint = (osl_sprint_f)osl_arrays_sprint; - interface->sread = (osl_sread_f)osl_arrays_sread; - interface->malloc = (osl_malloc_f)osl_arrays_malloc; - interface->free = (osl_free_f)osl_arrays_free; - interface->clone = (osl_clone_f)osl_arrays_clone; - interface->equal = (osl_equal_f)osl_arrays_equal; - - return interface; -} - - diff --git a/cloog-0.17.0/osl/source/extensions/comment.c b/cloog-0.17.0/osl/source/extensions/comment.c deleted file mode 100644 index 12c81e1..0000000 --- a/cloog-0.17.0/osl/source/extensions/comment.c +++ /dev/null @@ -1,306 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** extensions/comment.c ** - **-----------------------------------------------------------------** - ** First version: 07/12/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - -#include -#include -#include - -#include -#include -#include -#include - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ - - -/** - * osl_comment_idump function: - * this function displays an osl_comment_t structure (*comment) into a - * file (file, possibly stdout) in a way that trends to be understandable. It - * includes an indentation level (level) in order to work with others - * idump functions. - * \param[in] file The file where the information has to be printed. - * \param[in] comment The comment structure to print. - * \param[in] level Number of spaces before printing, for each line. - */ -void osl_comment_idump(FILE * file, osl_comment_p comment, int level) { - int j; - char * tmp; - - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - - if (comment != NULL) - fprintf(file, "+-- osl_comment_t\n"); - else - fprintf(file, "+-- NULL comment\n"); - - if (comment != NULL) { - // Go to the right level. - for(j = 0; j <= level; j++) - fprintf(file, "|\t"); - - // Display the comment message (without any carriage return). - tmp = strdup(comment->comment); - for (j = 0; j < strlen(tmp); j++) - if (tmp[j] == '\n') - tmp[j] = ' '; - fprintf(file, "comment: %s\n", tmp); - free(tmp); - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_comment_dump function: - * this function prints the content of an osl_comment_t structure - * (*comment) into a file (file, possibly stdout). - * \param[in] file The file where the information has to be printed. - * \param[in] comment The comment structure to print. - */ -void osl_comment_dump(FILE * file, osl_comment_p comment) { - osl_comment_idump(file, comment, 0); -} - - -/** - * osl_comment_sprint function: - * this function prints the content of an osl_comment_t structure - * (*comment) into a string (returned) in the OpenScop textual format. - * \param[in] comment The comment structure to print. - * \return A string containing the OpenScop dump of the comment structure. - */ -char * osl_comment_sprint(osl_comment_p comment) { - int high_water_mark = OSL_MAX_STRING; - char * string = NULL; - char * buffer; - - if (comment != NULL) { - OSL_malloc(string, char *, high_water_mark * sizeof(char)); - OSL_malloc(buffer, char *, OSL_MAX_STRING * sizeof(char)); - string[0] = '\0'; - - // Print the comment. - sprintf(buffer, "%s", comment->comment); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - - // Keep only the memory space we need. - OSL_realloc(string, char *, (strlen(string) + 1) * sizeof(char)); - free(buffer); - } - - return string; -} - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - -/** - * osl_comment_sread function: - * this function reads a comment structure from a string complying to the - * OpenScop textual format and returns a pointer to this comment structure. - * The input parameter is updated to the position in the input string this - * function reach right after reading the comment structure. - * \param[in,out] input The input string where to find a comment. - * Updated to the position after what has been read. - * \return A pointer to the comment structure that has been read. - */ -osl_comment_p osl_comment_sread(char ** input) { - osl_comment_p comment; - - if (*input == NULL) { - OSL_debug("no comment optional tag"); - return NULL; - } - - if (strlen(*input) > OSL_MAX_STRING) - OSL_error("comment too long"); - - // Build the comment structure - comment = osl_comment_malloc(); - OSL_strdup(comment->comment, *input); - - // Update the input pointer (everything has been read). - input += strlen(*input); - - return comment; -} - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ - - -/** - * osl_comment_malloc function: - * this function allocates the memory space for an osl_comment_t - * structure and sets its fields with default values. Then it returns a - * pointer to the allocated space. - * \return A pointer to an empty comment structure with fields set to - * default values. - */ -osl_comment_p osl_comment_malloc() { - osl_comment_p comment; - - OSL_malloc(comment, osl_comment_p, sizeof(osl_comment_t)); - comment->comment = NULL; - - return comment; -} - - -/** - * osl_comment_free function: - * this function frees the allocated memory for an osl_comment_t - * structure. - * \param[in,out] comment The pointer to the comment structure to free. - */ -void osl_comment_free(osl_comment_p comment) { - if (comment != NULL) { - if(comment->comment != NULL) - free(comment->comment); - free(comment); - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_comment_clone function: - * this function builds and returns a "hard copy" (not a pointer copy) of an - * osl_comment_t data structure. - * \param[in] comment The pointer to the comment structure to clone. - * \return A pointer to the clone of the comment structure. - */ -osl_comment_p osl_comment_clone(osl_comment_p comment) { - osl_comment_p clone; - - if (comment == NULL) - return NULL; - - clone = osl_comment_malloc(); - OSL_strdup(clone->comment, comment->comment); - - return clone; -} - - -/** - * osl_comment_equal function: - * this function returns true if the two comment structures are the same - * (content-wise), false otherwise. - * \param[in] c1 The first comment structure. - * \param[in] c2 The second comment structure. - * \return 1 if c1 and c2 are the same (content-wise), 0 otherwise. - */ -int osl_comment_equal(osl_comment_p c1, osl_comment_p c2) { - - if (c1 == c2) - return 1; - - if (((c1 == NULL) && (c2 != NULL)) || ((c1 != NULL) && (c2 == NULL))) - return 0; - - if (strcmp(c1->comment, c2->comment)) - return 0; - - return 1; -} - - -/** - * osl_comment_interface function: - * this function creates an interface structure corresponding to the comment - * extension and returns it). - * \return An interface structure for the comment extension. - */ -osl_interface_p osl_comment_interface() { - osl_interface_p interface = osl_interface_malloc(); - - interface->URI = strdup(OSL_URI_COMMENT); - interface->idump = (osl_idump_f)osl_comment_idump; - interface->sprint = (osl_sprint_f)osl_comment_sprint; - interface->sread = (osl_sread_f)osl_comment_sread; - interface->malloc = (osl_malloc_f)osl_comment_malloc; - interface->free = (osl_free_f)osl_comment_free; - interface->clone = (osl_clone_f)osl_comment_clone; - interface->equal = (osl_equal_f)osl_comment_equal; - - return interface; -} - diff --git a/cloog-0.17.0/osl/source/extensions/irregular.c b/cloog-0.17.0/osl/source/extensions/irregular.c deleted file mode 100644 index a72cdb1..0000000 --- a/cloog-0.17.0/osl/source/extensions/irregular.c +++ /dev/null @@ -1,764 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** extensions/irregular.c ** - **-----------------------------------------------------------------** - ** First version: 07/12/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - -#include -#include -#include - -#include -#include -#include -#include -#include - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ - - -/** - * osl_irregular_idump function: - * this function displays an osl_irregular_t structure (*irregular) into a - * file (file, possibly stdout) in a way that trends to be understandable. It - * includes an indentation level (level) in order to work with others - * idump functions. - * \param file The file where the information has to be printed. - * \param irregular The irregular structure whose information has to be printed. - * \param level Number of spaces before printing, for each line. - */ -void osl_irregular_idump(FILE * file, osl_irregular_p irregular, int level) { - int i,j; - - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - - if (irregular != NULL) - fprintf(file, "+-- osl_irregular_t\n"); - else - fprintf(file, "+-- NULL irregular\n"); - - if (irregular != NULL) { - // Go to the right level. - for(j = 0; j <= level; j++) - fprintf(file, "|\t"); - - // Display the irregular contents. - - // Print statements - for (i = 0; i < irregular->nb_statements; i++) { - fprintf(file, "statement%d's predicats : ", i); - for(j = 0; j < irregular->nb_predicates[i]; j++) - fprintf(file, "%d ", irregular->predicates[i][j]); - fprintf(file, "\n"); - } - // Print predicats - // controls : - for (i = 0; i < irregular->nb_control; i++) { - fprintf(file, "predicat%d's\niterators : ", i); - for(j = 0; j < irregular->nb_iterators[i]; j++) - fprintf(file, "%s ", irregular->iterators[i][j]); - fprintf(file, "\ncontrol body: %s\n", irregular->body[i]); - } - // exits : - for(i = irregular->nb_control; - i < irregular->nb_control + irregular->nb_exit; i++) { - fprintf(file, "predicat%d's\niterators : ", i); - for(j = 0; j < irregular->nb_iterators[i]; j++) - fprintf(file, "%s ", irregular->iterators[i][j]); - fprintf(file, "\nexit body: %s\n", irregular->body[i]); - } - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_irregular_dump function: - * this function prints the content of an osl_irregular_t structure - * (*irregular) into a file (file, possibly stdout). - * \param file The file where the information has to be printed. - * \param irregular The irregular structure whose information has to be printed. - */ -void osl_irregular_dump(FILE * file, osl_irregular_p irregular) { - osl_irregular_idump(file, irregular, 0); -} - - -/** - * osl_irregular_sprint function: - * this function prints the content of an osl_irregular_t structure - * (*irregular) into a string (returned) in the OpenScop textual format. - * \param irregular The irregular structure whose information has to be printed. - * \return A string containing the OpenScop dump of the irregular structure. - */ -char * osl_irregular_sprint(osl_irregular_p irregular) { - int high_water_mark = OSL_MAX_STRING,i,j; - char * string = NULL; - char * buffer; - - if (irregular != NULL) { - OSL_malloc(string, char *, high_water_mark * sizeof(char)); - OSL_malloc(buffer, char *, OSL_MAX_STRING * sizeof(char)); - string[0] = '\0'; - - // Print the begin tag. - sprintf(buffer, OSL_TAG_IRREGULAR_START); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - - // Print the content. - sprintf(buffer, "\n%d\n", irregular->nb_statements); - for(i=0; inb_statements; i++) { - sprintf(buffer, "%s%d ", buffer, irregular->nb_predicates[i]); - for(j=0; jnb_predicates[i]; j++) { - sprintf(buffer, "%s%d ", buffer, irregular->predicates[i][j]); - } - sprintf(buffer, "%s\n", buffer); - } - // Print the predicates. - // controls: - sprintf(buffer, "%s%d\n", buffer, irregular->nb_control); - sprintf(buffer, "%s%d\n", buffer, irregular->nb_exit); - for(i=0; inb_control; i++) { - sprintf(buffer, "%s%d ", buffer, irregular->nb_iterators[i]); - for(j=0; jnb_iterators[i];j++) - sprintf(buffer, "%s%s ", buffer, irregular->iterators[i][j]); - sprintf(buffer, "%s\n%s\n", buffer, irregular->body[i]); - } - // exits: - for(i=0; inb_exit; i++) { - sprintf(buffer, "%s%d ", buffer, irregular->nb_iterators[ - irregular->nb_control + i]); - for(j=0; jnb_iterators[irregular->nb_control + i];j++) - sprintf(buffer, "%s%s ", buffer, irregular->iterators[ - irregular->nb_control+i][j]); - sprintf(buffer, "%s\n%s\n", buffer, irregular->body[ - irregular->nb_control + i]); - } - - osl_util_safe_strcat(&string, buffer, &high_water_mark); - - // Print the end tag. - sprintf(buffer, OSL_TAG_IRREGULAR_STOP"\n"); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - - // Keep only the memory space we need. - OSL_realloc(string, char *, (strlen(string) + 1) * sizeof(char)); - free(buffer); - } - - return string; -} - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - -/** - * osl_irregular_sread function: - * this function reads a irregular structure from a string complying to the - * OpenScop textual format and returns a pointer to this irregular structure. - * The string should contain only one textual format of a irregular structure. - * \param extensions The input string where to find a irregular structure. - * \return A pointer to the irregular structure that has been read. - */ -osl_irregular_p osl_irregular_sread(char ** extensions_fixme) { - char * content,*tok; - int i,j; - osl_irregular_p irregular; - - // FIXME: this is a quick and dirty thing to accept char ** instead - // of char * in the parameter: really do it and update the - // pointer to after what has been read. - content = *extensions_fixme; - - if (content == NULL) { - OSL_debug("no irregular optional tag"); - return NULL; - } - - if (strlen(content) > OSL_MAX_STRING) - OSL_error("irregular too long"); - - irregular = osl_irregular_malloc(); - - // nb statements - tok = strtok(content," \n"); - irregular->nb_statements = atoi(tok); - OSL_malloc(irregular->predicates, int **, - sizeof(int*) * irregular->nb_statements); - OSL_malloc(irregular->nb_predicates, int *, - sizeof(int) * irregular->nb_statements); - - // get predicats - for(i = 0; i < irregular->nb_statements; i++) { - // nb conditions - tok = strtok(NULL," \n"); - irregular->nb_predicates[i] = atoi(tok); - OSL_malloc(irregular->predicates[i], int *, - sizeof(int) * irregular->nb_predicates[i]); - for(j = 0; j < irregular->nb_predicates[i]; j++){ - tok = strtok(NULL, " \n"); - irregular->predicates[i][j] = atoi(tok); - } - } - // Get nb predicat - // control and exits : - tok = strtok(NULL, " \n"); - irregular->nb_control=atoi(tok); - tok = strtok(NULL, " \n"); - irregular->nb_exit = atoi(tok); - - int nb_predicates = irregular->nb_control + irregular->nb_exit; - - OSL_malloc(irregular->iterators, char ***, - sizeof(char **) * nb_predicates); - OSL_malloc(irregular->nb_iterators, int *, sizeof(int) * nb_predicates); - OSL_malloc(irregular->body, char **, sizeof(char *) * nb_predicates); - - for(i = 0; i < nb_predicates; i++) { - // Get number of iterators - tok = strtok(NULL, " \n"); - irregular->nb_iterators[i] = atoi(tok); - OSL_malloc(irregular->iterators[i], char **, - sizeof(char *) * irregular->nb_iterators[i]); - - // Get iterators - for(j = 0; j < irregular->nb_iterators[i]; j++) - irregular->iterators[i][j] = strdup(strtok(NULL, " \n")); - // Get predicat string - irregular->body[i] = strdup(strtok(NULL, "\n")); - } - - return irregular; -} - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ - - -/** - * osl_irregular_malloc function: - * This function allocates the memory space for an osl_irregular_t - * structure and sets its fields with default values. Then it returns a - * pointer to the allocated space. - * \return A pointer to an empty irregular structure with fields set to - * default values. - */ -osl_irregular_p osl_irregular_malloc() { - osl_irregular_p irregular; - - OSL_malloc(irregular, osl_irregular_p, - sizeof(osl_irregular_t)); - irregular->nb_statements = 0; - irregular->predicates = NULL; - irregular->nb_predicates = NULL; - irregular->nb_control = 0; - irregular->nb_exit = 0; - irregular->nb_iterators = NULL; - irregular->iterators = NULL; - irregular->body = NULL; - - return irregular; -} - - -/** - * osl_irregular_free function: - * This function frees the allocated memory for an osl_irregular_t - * structure. - * \param irregular The pointer to the irregular structure we want to free. - */ -void osl_irregular_free(osl_irregular_p irregular) { - int i, j, nb_predicates; - - if (irregular != NULL) { - for(i = 0; i < irregular->nb_statements; i++) - free(irregular->predicates[i]); - - if(irregular->predicates != NULL) - free(irregular->predicates); - - nb_predicates = irregular->nb_control + irregular->nb_exit; - for(i = 0; i < nb_predicates; i++) { - for(j = 0; j < irregular->nb_iterators[i]; j++) - free(irregular->iterators[i][j]); - free(irregular->iterators[i]); - free(irregular->body[i]); - } - if(irregular->iterators != NULL) - free(irregular->iterators); - if(irregular->nb_iterators != NULL) - free(irregular->nb_iterators); - if(irregular->body != NULL) - free(irregular->body); - if(irregular->nb_predicates != NULL) - free(irregular->nb_predicates); - free(irregular); - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_irregular_clone function: - * This function builds and returns a "hard copy" (not a pointer copy) of an - * osl_irregular_t data structure. - * \param irregular The pointer to the irregular structure we want to copy. - * \return A pointer to the copy of the irregular structure. - */ -osl_irregular_p osl_irregular_clone(osl_irregular_p irregular) { - int i,j; - osl_irregular_p copy; - - if (irregular == NULL) - return NULL; - - copy = osl_irregular_malloc(); - copy->nb_statements = irregular->nb_statements; - copy->nb_predicates = (int *)malloc(sizeof(int)*copy->nb_statements); - if (copy->nb_predicates == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - copy->predicates = (int **)malloc(sizeof(int*)*copy->nb_statements); - if (copy->predicates == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - for(i=0; inb_statements; i++) - { - copy->nb_predicates[i]=irregular->nb_predicates[i]; - copy->predicates[i] = (int *)malloc(sizeof(int)*copy->nb_predicates[i]); - if (copy->predicates[i] == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - for(j=0; jnb_predicates[i]; j++) - copy->predicates[i][j] = irregular->predicates[i][j]; - } - - copy->nb_control = irregular->nb_control; - copy->nb_exit = irregular->nb_exit; - int nb_predicates = irregular->nb_control + irregular->nb_exit; - copy->nb_iterators = (int *)malloc(sizeof(int)*nb_predicates); - if (copy->nb_iterators == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - copy->iterators = (char ***)malloc(sizeof(char**)*nb_predicates); - if (copy->iterators == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - copy->body = (char **)malloc(sizeof(char*)*nb_predicates); - if (copy->body == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - for(i=0; inb_iterators[i] = irregular->nb_iterators[i]; - copy->iterators[i] = (char**)malloc(sizeof(char*)*copy->nb_iterators[i]); - if (copy->iterators[i] == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - for(j=0;jnb_iterators[i];j++) - copy->iterators[i][j] = strdup(irregular->iterators[i][j]); - copy->body[i] = strdup(irregular->body[i]); - } - - return copy; -} - - -/** - * osl_irregular_equal function: - * this function returns true if the two irregular structures are the same - * (content-wise), false otherwise. This functions considers two irregular - * \param c1 The first irregular structure. - * \param c2 The second irregular structure. - * \return 1 if c1 and c2 are the same (content-wise), 0 otherwise. - */ -int -osl_irregular_equal(osl_irregular_p c1, osl_irregular_p c2) -{ - int i,j,bool = 0; - if (c1 == c2) - return 1; - - if (((c1 == NULL) && (c2 != NULL)) || ((c1 != NULL) && (c2 == NULL))) - return 0; - - if(c1->nb_statements != c2->nb_statements || - c1->nb_control != c2->nb_control || - c1->nb_exit != c2->nb_exit) - return 0; - i=0; - while(bool == 0 && i < c1->nb_statements) - { - bool = c1->nb_predicates[i] != c2->nb_predicates[i] ? 1 : 0; - i++; - } - if(bool != 0) - return 0; - - i = 0; - while(bool == 0 && i < c1->nb_control + c1->nb_exit) - { - bool += c1->nb_iterators[i] != c2->nb_iterators[i] ? 1 : 0; - bool += strcmp(c1->body[i],c2->body[i]); - j = 0; - while(bool == 0 && j < c1->nb_iterators[i]) - { - bool += strcmp(c1->iterators[i][j],c2->iterators[i][j]); - j++; - } - i++; - } - if(bool != 0) - return 0; - return 1; -} - -osl_irregular_p osl_irregular_add_control( - osl_irregular_p irregular, - char** iterators, - int nb_iterators, - char* body) -{ - int i,j; - osl_irregular_p result=osl_irregular_malloc(); - - result->nb_control = irregular->nb_control + 1; - result->nb_exit = irregular->nb_exit; - result->nb_statements = irregular->nb_statements; - int nb_predicates = result->nb_control + result->nb_exit; - - result->iterators = (char***)malloc(sizeof(char**)*nb_predicates); - result->nb_iterators = (int*)malloc(sizeof(int)*nb_predicates); - result->body = (char**)malloc(sizeof(char*)*nb_predicates); - if (result->iterators == NULL || - result->nb_iterators == NULL || - result->body == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - //copy controls - for(i=0; inb_control; i++) - { - result->nb_iterators[i] = irregular->nb_iterators[i]; - result->body[i] = strdup(irregular->body[i]); - result->iterators[i] = (char**)malloc(sizeof(char*) * - irregular->nb_iterators[i]); - if (result->iterators[i] == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - for(j=0; jnb_iterators[i];j++) - result->iterators[i][j] = strdup(irregular->iterators[i][j]); - } - //add controls - result->iterators[irregular->nb_control] = (char**)malloc(sizeof(char*)*nb_iterators); - if (result->iterators[irregular->nb_control] == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - for(i=0; iiterators[irregular->nb_control][i] = strdup(iterators[i]); - result->nb_iterators[irregular->nb_control] = nb_iterators; - result->body[irregular->nb_control] = strdup(body); - //copy exits - for(i=result->nb_control; inb_iterators[i] = irregular->nb_iterators[i-1]; - result->body[i] = strdup(irregular->body[i-1]); - result->iterators[i] = (char**)malloc(sizeof(char*) * - irregular->nb_iterators[i-1]); - if (result->iterators[i] == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - for(j=0; jnb_iterators[i-1];j++) - result->iterators[i][j] = strdup(irregular->iterators[i-1][j]); - } - // copy statements - result->nb_predicates = (int*)malloc(sizeof(int)*irregular->nb_statements); - result->predicates = (int**)malloc(sizeof(int*)*irregular->nb_statements); - if (result->nb_predicates == NULL || result->predicates == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - for(i=0; inb_statements; i++) - { - result->predicates[i] = (int*)malloc(sizeof(int)*irregular->nb_predicates[i]); - if (result->predicates[i] == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - result->nb_predicates[i] = irregular->nb_predicates[i]; - for(j=0; jnb_predicates[i]; j++) - result->predicates[i][j]=irregular->predicates[i][j]; - } - return result; -} - - -osl_irregular_p osl_irregular_add_exit( - osl_irregular_p irregular, - char** iterators, - int nb_iterators, - char* body) -{ - int i,j; - osl_irregular_p result=osl_irregular_malloc(); - - result->nb_control = irregular->nb_control; - result->nb_exit = irregular->nb_exit + 1; - result->nb_statements = irregular->nb_statements; - int nb_predicates = result->nb_control + result->nb_exit; - - result->iterators = (char***)malloc(sizeof(char**)*nb_predicates); - result->nb_iterators = (int*)malloc(sizeof(int)*nb_predicates); - result->body = (char**)malloc(sizeof(char*)*nb_predicates); - if (result->iterators == NULL || - result->nb_iterators == NULL || - result->body == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - //copy controls and exits - for(i=0; inb_iterators[i] = irregular->nb_iterators[i]; - result->body[i] = strdup(irregular->body[i]); - result->iterators[i] = (char**)malloc(sizeof(char*) * - irregular->nb_iterators[i]); - if (result->iterators[i] == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - for(j=0; jnb_iterators[i];j++) - result->iterators[i][j] = strdup(irregular->iterators[i][j]); - } - //add exit - result->iterators[nb_predicates-1] = (char**)malloc(sizeof(char*)*nb_iterators); - if (result->iterators[nb_predicates-1] == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - - for(i=0; iiterators[nb_predicates-1][i] = strdup(iterators[i]); - result->nb_iterators[nb_predicates-1] = nb_iterators; - result->body[nb_predicates-1] = strdup(body); - // copy statements - result->nb_predicates = (int*)malloc(sizeof(int)*irregular->nb_statements); - result->predicates = (int**)malloc(sizeof(int*)*irregular->nb_statements); - if (result->nb_predicates == NULL || result->predicates == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - for(i=0; inb_statements; i++) - { - result->predicates[i] = (int*)malloc(sizeof(int)*irregular->nb_predicates[i]); - if (result->predicates[i] == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - result->nb_predicates[i] = irregular->nb_predicates[i]; - for(j=0; jnb_predicates[i]; j++) - result->predicates[i][j]=irregular->predicates[i][j]; - } - return result; -} - - -osl_irregular_p osl_irregular_add_predicates( - osl_irregular_p irregular, - int* predicates, - int nb_add_predicates) -{ - int i,j; - osl_irregular_p result=osl_irregular_malloc(); - - result->nb_control = irregular->nb_control; - result->nb_exit = irregular->nb_exit; - result->nb_statements = irregular->nb_statements+1; - int nb_predicates = result->nb_control + result->nb_exit; - - result->iterators = (char***)malloc(sizeof(char**)*nb_predicates); - result->nb_iterators = (int*)malloc(sizeof(int)*nb_predicates); - result->body = (char**)malloc(sizeof(char*)*nb_predicates); - if (result->iterators == NULL || - result->nb_iterators == NULL || - result->body == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - //copy controls and exits - for(i=0; inb_iterators[i] = irregular->nb_iterators[i]; - result->body[i] = strdup(irregular->body[i]); - result->iterators[i] = (char**)malloc(sizeof(char*) * - irregular->nb_iterators[i]); - if (result->iterators[i] == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - for(j=0; jnb_iterators[i];j++) - result->iterators[i][j] = strdup(irregular->iterators[i][j]); - } - //copy statements - result->nb_predicates = (int*)malloc(sizeof(int)*result->nb_statements); - result->predicates = (int**)malloc(sizeof(int*)*result->nb_statements); - if (result->nb_predicates == NULL || - result->predicates == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - for(i=0; inb_statements; i++) - { - result->predicates[i] = (int*)malloc(sizeof(int)*irregular->nb_predicates[i]); - if (result->predicates[i] == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - result->nb_predicates[i] = irregular->nb_predicates[i]; - for(j=0; jnb_predicates[i]; j++) - result->predicates[i][j]=irregular->predicates[i][j]; - } - //add statement - result->predicates[irregular->nb_statements] = (int*)malloc(sizeof(int)*nb_add_predicates); - if (result->predicates[irregular->nb_statements] == NULL) - { - fprintf(stderr, "[OpenScop] Error: memory overflow.\n"); - exit(1); - } - for(i=0; ipredicates[irregular->nb_statements][i] = predicates[i]; - result->nb_predicates[irregular->nb_statements] = nb_add_predicates; - - return result; - - -} - - -/** - * osl_irregular_interface function: - * this function creates an interface structure corresponding to the irregular - * extension and returns it). - * \return An interface structure for the irregular extension. - */ -osl_interface_p osl_irregular_interface() { - osl_interface_p interface = osl_interface_malloc(); - - interface->URI = strdup(OSL_URI_IRREGULAR); - interface->idump = (osl_idump_f)osl_irregular_idump; - interface->sprint = (osl_sprint_f)osl_irregular_sprint; - interface->sread = (osl_sread_f)osl_irregular_sread; - interface->malloc = (osl_malloc_f)osl_irregular_malloc; - interface->free = (osl_free_f)osl_irregular_free; - interface->clone = (osl_clone_f)osl_irregular_clone; - interface->equal = (osl_equal_f)osl_irregular_equal; - - return interface; -} - - diff --git a/cloog-0.17.0/osl/source/extensions/lines.c b/cloog-0.17.0/osl/source/extensions/lines.c deleted file mode 100644 index 2c1817a..0000000 --- a/cloog-0.17.0/osl/source/extensions/lines.c +++ /dev/null @@ -1,315 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** extensions/lines.c ** - **-----------------------------------------------------------------** - ** First version: 07/12/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - -#include -#include -#include - -#include -#include -#include -#include - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ - - -/** - * osl_lines_idump function: - * this function displays an osl_lines_t structure (*lines) into a - * file (file, possibly stdout) in a way that trends to be understandable. It - * includes an indentation level (level) in order to work with others - * idump functions. - * \param file The file where the information has to be printed. - * \param lines The lines structure whose information has to be printed. - * \param level Number of spaces before printing, for each line. - */ -void osl_lines_idump(FILE * file, osl_lines_p lines, int level) { - int j; - - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - - if (lines != NULL) - fprintf(file, "+-- osl_lines_t\n"); - else - fprintf(file, "+-- NULL lines\n"); - - if (lines != NULL) { - // Go to the right level. - for(j = 0; j <= level; j++) - fprintf(file, "|\t"); - - // Display the lines content. - fprintf(file, "lines: %d - %d\n", lines->start,lines->end); - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_lines_dump function: - * this function prints the content of an osl_lines_t structure - * (*lines) into a file (file, possibly stdout). - * \param file The file where the information has to be printed. - * \param lines The lines structure whose information has to be printed. - */ -void osl_lines_dump(FILE * file, osl_lines_p lines) { - osl_lines_idump(file, lines, 0); -} - - -/** - * osl_lines_sprint function: - * this function prints the content of an osl_lines_t structure - * (*lines) into a string (returned) in the OpenScop textual format. - * \param lines The lines structure whose information has to be printed. - * \return A string containing the OpenScop dump of the lines structure. - */ -char * osl_lines_sprint(osl_lines_p lines) { - int high_water_mark = OSL_MAX_STRING; - char * string = NULL; - char * buffer; - - if (lines != NULL) { - OSL_malloc(string, char *, high_water_mark * sizeof(char)); - OSL_malloc(buffer, char *, OSL_MAX_STRING * sizeof(char)); - string[0] = '\0'; - - // Print the begin tag. - sprintf(buffer, OSL_TAG_LINES_START); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - - // Print the lines content. - sprintf(buffer, "\n%d - %d\n", lines->start, lines->end); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - - // Print the end tag. - sprintf(buffer, OSL_TAG_LINES_STOP"\n"); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - - // Keep only the memory space we need. - OSL_realloc(string, char *, (strlen(string) + 1) * sizeof(char)); - free(buffer); - } - - return string; -} - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - -/** - * osl_lines_sread function: - * this function reads a lines structure from a string complying to the - * OpenScop textual format and returns a pointer to this lines structure. - * The string should contain only one textual format of a lines structure. - * \param extensions The input string where to find a lines structure. - * \return A pointer to the lines structure that has been read. - */ -osl_lines_p osl_lines_sread(char ** extensions_fixme) { - char * content, *tmp; - osl_lines_p lines; - - // FIXME: this is a quick and dirty thing to accept char ** instead - // of char * in the parameter: really do it and update the - // pointer to after what has been read. - content = *extensions_fixme; - - if (content == NULL) { - OSL_debug("no lines optional tag"); - return NULL; - } - - if (strlen(content) > OSL_MAX_STRING) - OSL_error("lines too long"); - - lines = osl_lines_malloc(); - tmp = strtok(content," -"); - lines->start = atoi(tmp); - if(lines->start == -1) - OSL_error("lines start NaN"); - - tmp = strtok(NULL," -"); - lines->end = atoi(tmp); - if(lines->end == -1) - OSL_error("lines end NaN"); - - return lines; -} - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ - - -/** - * osl_lines_malloc function: - * This function allocates the memory space for an osl_lines_t - * structure and sets its fields with default values. Then it returns a - * pointer to the allocated space. - * \return A pointer to an empty lines structure with fields set to - * default values. - */ -osl_lines_p osl_lines_malloc() { - osl_lines_p lines; - - OSL_malloc(lines, osl_lines_p, sizeof(osl_lines_t)); - lines->start = OSL_UNDEFINED; - lines->end = OSL_UNDEFINED; - - return lines; -} - - -/** - * osl_lines_free function: - * This function frees the allocated memory for an osl_lines_t - * structure. - * \param lines The pointer to the lines structure we want to free. - */ -void osl_lines_free(osl_lines_p lines) { - if (lines != NULL) { - free(lines); - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_lines_clone function: - * This function builds and returns a "hard copy" (not a pointer copy) of an - * osl_lines_t data structure. - * \param lines The pointer to the lines structure we want to copy. - * \return A pointer to the copy of the lines structure. - */ -osl_lines_p osl_lines_clone(osl_lines_p lines) { - osl_lines_p copy; - - if (lines == NULL) - return NULL; - - copy = osl_lines_malloc(); - copy->start = lines->start; - copy->end = lines->end; - - return copy; -} - - -/** - * osl_lines_equal function: - * this function returns true if the two lines structures are the same - * (content-wise), false otherwise. This functions considers two lines - * \param c1 The first lines structure. - * \param c2 The second lines structure. - * \return 1 if c1 and c2 are the same (content-wise), 0 otherwise. - */ -int osl_lines_equal(osl_lines_p c1, osl_lines_p c2) { - if (c1 == c2) - return 1; - - if (((c1 == NULL) && (c2 != NULL)) || ((c1 != NULL) && (c2 == NULL))) - return 0; - - if ((c1->start != c2->start) || (c1->end != c2->end)) - return 0; - - return 1; -} - - -/** - * osl_lines_interface function: - * this function creates an interface structure corresponding to the lines - * extension and returns it). - * \return An interface structure for the lines extension. - */ -osl_interface_p osl_lines_interface() { - osl_interface_p interface = osl_interface_malloc(); - - interface->URI = strdup(OSL_URI_LINES); - interface->idump = (osl_idump_f)osl_lines_idump; - interface->sprint = (osl_sprint_f)osl_lines_sprint; - interface->sread = (osl_sread_f)osl_lines_sread; - interface->malloc = (osl_malloc_f)osl_lines_malloc; - interface->free = (osl_free_f)osl_lines_free; - interface->clone = (osl_clone_f)osl_lines_clone; - interface->equal = (osl_equal_f)osl_lines_equal; - - return interface; -} - diff --git a/cloog-0.17.0/osl/source/extensions/scatnames.c b/cloog-0.17.0/osl/source/extensions/scatnames.c deleted file mode 100644 index bfe5baa..0000000 --- a/cloog-0.17.0/osl/source/extensions/scatnames.c +++ /dev/null @@ -1,282 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** extensions/scatnames.c ** - **-----------------------------------------------------------------** - ** First version: 03/12/2011 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - -#include -#include -#include - -#include -#include -#include -#include -#include - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ - - -/** - * osl_scatnames_idump function: - * this function displays an osl_scatnames_t structure (*scatnames) into a - * file (file, possibly stdout) in a way that trends to be understandable. It - * includes an indentation level (level) in order to work with others - * idump functions. - * \param[in] file The file where the information has to be printed. - * \param[in] scatnames Scatnames structure to print. - * \param[in] level Number of spaces before printing, for each line. - */ -void osl_scatnames_idump(FILE * file, osl_scatnames_p scatnames, int level) { - int j; - - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - - if (scatnames != NULL) - fprintf(file, "+-- osl_scatnames_t\n"); - else - fprintf(file, "+-- NULL scatnames\n"); - - if (scatnames != NULL) { - // Go to the right level. - for(j = 0; j <= level + 1; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); - - // Display the list of scattering names. - osl_strings_idump(file, scatnames->names, level + 1); - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_scatnames_dump function: - * this function prints the content of an osl_scatnames_t structure - * (*scatnames) into a file (file, possibly stdout). - * \param[in] file The file where the information has to be printed. - * \param[in] scatnames The scatnames structure to print. - */ -void osl_scatnames_dump(FILE * file, osl_scatnames_p scatnames) { - osl_scatnames_idump(file, scatnames, 0); -} - - -/** - * osl_scatnames_sprint function: - * this function prints the content of an osl_scatnames_t structure - * (*scatnames) into a string (returned) in the OpenScop textual format. - * \param[in] scatnames The scatnames structure to print. - * \return A string containing the OpenScop dump of the scatnames structure. - */ -char * osl_scatnames_sprint(osl_scatnames_p scatnames) { - return osl_strings_sprint(scatnames->names); -} - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - - -/** - * osl_scatnames_sread function: - * this function reads a scatnames structure from a string complying to the - * OpenScop textual format and returns a pointer to this scatnames structure. - * The input parameter is updated to the position in the input string this - * function reach right after reading the scatnames structure. If there - * is nothing to read, the function returns NULL. - * \param[in,out] input The input string where to find a scatnames. - * Updated to the position after what has been read. - * \return A pointer to the scatnames structure that has been read. - */ -osl_scatnames_p osl_scatnames_sread(char ** input) { - osl_scatnames_p scatnames = NULL; - osl_strings_p names = NULL; - - if (*input == NULL) { - OSL_debug("no scatnames optional tag"); - return NULL; - } - - // Build the scatnames structure - names = osl_strings_sread(input); - if (names != NULL) { - scatnames = osl_scatnames_malloc(); - scatnames->names = names; - } - - return scatnames; -} - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ - - -/** - * osl_scatnames_malloc function: - * this function allocates the memory space for an osl_scatnames_t - * structure and sets its fields with default values. Then it returns a - * pointer to the allocated space. - * \return A pointer to an empty scatnames structure with fields set to - * default values. - */ -osl_scatnames_p osl_scatnames_malloc() { - osl_scatnames_p scatnames; - - OSL_malloc(scatnames, osl_scatnames_p, sizeof(osl_scatnames_t)); - scatnames->names = NULL; - - return scatnames; -} - - -/** - * osl_scatnames_free function: - * this function frees the allocated memory for an osl_scatnames_t - * structure. - * \param[in,out] scatnames The pointer to the scatnames structure to free. - */ -void osl_scatnames_free(osl_scatnames_p scatnames) { - if (scatnames != NULL) { - osl_strings_free(scatnames->names); - free(scatnames); - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_scatnames_clone function: - * This function builds and returns a "hard copy" (not a pointer copy) of an - * osl_scatnames_t data structure. - * \param[in] scatnames The pointer to the scatnames structure to clone. - * \return A pointer to the clone of the scatnames structure. - */ -osl_scatnames_p osl_scatnames_clone(osl_scatnames_p scatnames) { - osl_scatnames_p clone; - - if (scatnames == NULL) - return NULL; - - clone = osl_scatnames_malloc(); - clone->names = osl_strings_clone(scatnames->names); - - return clone; -} - - -/** - * osl_scatnames_equal function: - * this function returns true if the two scatnames structures are the same - * (content-wise), false otherwise. - * \param[in] s1 The first scatnames structure. - * \param[in] s2 The second scatnames structure. - * \return 1 if s1 and s2 are the same (content-wise), 0 otherwise. - */ -int osl_scatnames_equal(osl_scatnames_p s1, osl_scatnames_p s2) { - - if (s1 == s2) - return 1; - - if (((s1 == NULL) && (s2 != NULL)) || ((s1 != NULL) && (s2 == NULL))) - return 0; - - if (!osl_strings_equal(s1->names, s2->names)) - return 0; - - return 1; -} - - -/** - * osl_scatnames_interface function: - * this function creates an interface structure corresponding to the scatnames - * extension and returns it). - * \return An interface structure for the scatnames extension. - */ -osl_interface_p osl_scatnames_interface() { - osl_interface_p interface = osl_interface_malloc(); - - interface->URI = strdup(OSL_URI_SCATNAMES); - interface->idump = (osl_idump_f)osl_scatnames_idump; - interface->sprint = (osl_sprint_f)osl_scatnames_sprint; - interface->sread = (osl_sread_f)osl_scatnames_sread; - interface->malloc = (osl_malloc_f)osl_scatnames_malloc; - interface->free = (osl_free_f)osl_scatnames_free; - interface->clone = (osl_clone_f)osl_scatnames_clone; - interface->equal = (osl_equal_f)osl_scatnames_equal; - - return interface; -} diff --git a/cloog-0.17.0/osl/source/extensions/textual.c b/cloog-0.17.0/osl/source/extensions/textual.c deleted file mode 100644 index a583843..0000000 --- a/cloog-0.17.0/osl/source/extensions/textual.c +++ /dev/null @@ -1,335 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** extensions/textual.c ** - **-----------------------------------------------------------------** - ** First version: 15/17/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - -#include -#include -#include - -#include -#include -#include -#include - - -/* CAUTION : TEXTUAL IS A VERY SPECIAL CASE: DO NOT USE IT AS AN EXAMPLE !!! */ - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ - - -/** - * osl_textual_idump function: - * this function displays an osl_textual_t structure (*textual) into a - * file (file, possibly stdout) in a way that trends to be understandable. It - * includes an indentation level (level) in order to work with others - * idump functions. - * \param[in] file The file where the information has to be printed. - * \param[in] textual The textual structure to be printed. - * \param[in] level Number of spaces before printing, for each line. - */ -void osl_textual_idump(FILE * file, osl_textual_p textual, int level) { - int j; - char * tmp; - - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - - if (textual != NULL) { - fprintf(file, "+-- osl_textual_t: "); - - // Display the textual message (without any carriage return). - tmp = strdup(textual->textual); - for (j = 0; j < strlen(tmp); j++) - if (tmp[j] == '\n') - tmp[j] = ' '; - - if (strlen(tmp) > 40) { - for (j = 0; j < 20; j++) - fprintf(file, "%c", tmp[j]); - fprintf(file, " ... "); - for (j = strlen(tmp) - 20; j < strlen(tmp); j++) - fprintf(file, "%c", tmp[j]); - fprintf(file, "\n"); - } - else { - fprintf(file,"%s\n", tmp); - } - free(tmp); - } - else { - fprintf(file, "+-- NULL textual\n"); - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_textual_dump function: - * this function prints the content of an osl_textual_t structure - * (*textual) into a file (file, possibly stdout). - * \param[in] file The file where the information has to be printed. - * \param[in] textual The textual structure to be printed. - */ -void osl_textual_dump(FILE * file, osl_textual_p textual) { - osl_textual_idump(file, textual, 0); -} - - - -#if 0 -/** - * osl_textual_sprint function: - * this function prints the content of an osl_textual_t structure - * (*textual) into a string (returned) in the OpenScop textual format. - * \param[in] textual The textual structure to be printed. - * \return A string containing the OpenScop dump of the textual structure. - */ -char * osl_textual_sprint(osl_textual_p textual) { - char * string = NULL; - - if ((textual != NULL) && (textual->textual != NULL)) { - if (strlen(textual->textual) > OSL_MAX_STRING) - OSL_error("textual too long"); - - string = strdup(textual->textual); - if (string == NULL) - OSL_error("memory overflow"); - } - - return string; -} -#else -/** - * osl_textual_sprint function: - * this function returns NULL. This is part of the special behavior of - * the textual option (printing it along with other options would double - * the options...). - * \param[in] textual The textual structure to be printed. - * \return NULL. - */ -char * osl_textual_sprint(osl_textual_p textual) { - - return NULL; -} -#endif - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - - -/** - * osl_textual_sread function: - * this function reads a textual structure from a string complying to the - * OpenScop textual format and returns a pointer to this textual structure. - * The string should contain only one textual format of a textual structure. - * \param[in,out] extensions The input string where to find a textual struct. - * Updated to the position after what has been read. - * \return A pointer to the textual structure that has been read. - */ -osl_textual_p osl_textual_sread(char ** extensions) { - osl_textual_p textual = NULL; - - if (*extensions != NULL) { - textual = osl_textual_malloc(); - OSL_strdup(textual->textual, *extensions); - - // Update the input string pointer to the end of the string (since - // everything has been read). - *extensions = *extensions + strlen(*extensions); - } - - return textual; -} - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ - - -/** - * osl_textual_malloc function: - * this function allocates the memory space for an osl_textual_t - * structure and sets its fields with default values. Then it returns a - * pointer to the allocated space. - * \return A pointer to an empty textual structure with fields set to - * default values. - */ -osl_textual_p osl_textual_malloc() { - osl_textual_p textual; - - OSL_malloc(textual, osl_textual_p, sizeof(osl_textual_t)); - textual->textual = NULL; - - return textual; -} - - -/** - * osl_textual_free function: - * this function frees the allocated memory for an osl_textual_t - * structure. - * \param[in,out] textual The pointer to the textual structure to be freed. - */ -void osl_textual_free(osl_textual_p textual) { - if (textual != NULL) { - if(textual->textual != NULL) - free(textual->textual); - free(textual); - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_textual_clone function: - * this function builds and returns a "hard copy" (not a pointer copy) of an - * osl_textual_t data structure. - * \param[in] textual The pointer to the textual structure we want to clone. - * \return A pointer to the clone of the textual structure. - */ -osl_textual_p osl_textual_clone(osl_textual_p textual) { - osl_textual_p clone; - - if (textual == NULL) - return NULL; - - clone = osl_textual_malloc(); - OSL_strdup(clone->textual, textual->textual); - - return clone; -} - - -#if 0 -/** - * osl_textual_equal function: - * this function returns true if the two textual structures are the same - * (content-wise), false otherwise. - * \param f1 The first textual structure. - * \param ff The second textual structure. - * \return 1 if f1 and f2 are the same (content-wise), 0 otherwise. - */ -int osl_textual_equal(osl_textual_p f1, osl_textual_p f2) { - - if (f1 == f2) - return 1; - - if (((f1 == NULL) && (f2 != NULL)) || ((f1 != NULL) && (f2 == NULL))) - return 0; - - if (strcmp(f1->textual, f2->textual)) - return 0; - - return 1; -} -#else -/** - * osl_textual_equal function: - * this function returns 1. This is part of the special behavior of - * the textual option (the text string can be easily different while the - * options are actually identical. - * \param[in] f1 The first textual structure. - * \param[in] f2 The second textual structure. - * \return 1. - */ -int osl_textual_equal(osl_textual_p f1, osl_textual_p f2) { - - return 1; -} -#endif - - -/** - * osl_textual_interface function: - * this function creates an interface structure corresponding to the textual - * extension and returns it). - * \return An interface structure for the textual extension. - */ -osl_interface_p osl_textual_interface() { - osl_interface_p interface = osl_interface_malloc(); - - interface->URI = strdup(OSL_URI_TEXTUAL); - interface->idump = (osl_idump_f)osl_textual_idump; - interface->sprint = (osl_sprint_f)osl_textual_sprint; - interface->sread = (osl_sread_f)osl_textual_sread; - interface->malloc = (osl_malloc_f)osl_textual_malloc; - interface->free = (osl_free_f)osl_textual_free; - interface->clone = (osl_clone_f)osl_textual_clone; - interface->equal = (osl_equal_f)osl_textual_equal; - - return interface; -} - diff --git a/cloog-0.17.0/osl/source/generic.c b/cloog-0.17.0/osl/source/generic.c deleted file mode 100644 index bbd0f23..0000000 --- a/cloog-0.17.0/osl/source/generic.c +++ /dev/null @@ -1,518 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** generic.c ** - **-----------------------------------------------------------------** - ** First version: 26/11/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - -#include -#include -#include - -#include -#include -#include -#include - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ - - -/** - * osl_generic_idump function: - * this function displays an osl_generic_t structure (*generic) into - * a file (file, possibly stdout) in a way that trends to be understandable. - * It includes an indentation level (level) in order to work with others - * idump functions. - * \param[in] file File where informations are printed. - * \param[in] generic The generic whose information has to be printed. - * \param[in] level Number of spaces before printing, for each line. - */ -void osl_generic_idump(FILE * file, osl_generic_p generic, int level) { - int j, first = 1; - - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file,"|\t"); - - if (generic != NULL) - fprintf(file, "+-- osl_generic_t\n"); - else - fprintf(file, "+-- NULL generic\n"); - - while (generic != NULL) { - if (!first) { - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - fprintf(file, "| osl_generic_t\n"); - } - else { - first = 0; - } - - // A blank line - for(j = 0; j <= level + 1; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); - - osl_interface_idump(file, generic->interface, level + 1); - - if (generic->interface != NULL) - generic->interface->idump(file, generic->data, level + 1); - - generic = generic->next; - - // Next line. - if (generic != NULL) { - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "V\n"); - } - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_generic_dump function: - * this function prints the content of an osl_generic_t structure - * (*generic) into a file (file, possibly stdout). - * \param[in] file File where the information has to be printed. - * \param[in] generic The generic structure to print. - */ -void osl_generic_dump(FILE * file, osl_generic_p generic) { - osl_generic_idump(file, generic, 0); -} - - -/** - * osl_generic_print function: - * this function prints the content of an osl_generic_t structure - * (*generic) into a string (returned) in the OpenScop format. - * \param[in] file File where the information has to be printed. - * \param[in] generic The generic structure to print. - */ -void osl_generic_print(FILE * file, osl_generic_p generic) { - char * string; - - if (generic == NULL) - return; - - while (generic != NULL) { - if (generic->interface != NULL) { - string = generic->interface->sprint(generic->data); - if (string != NULL) { - fprintf(file, "<%s>\n", generic->interface->URI); - fprintf(file, "%s", string); - fprintf(file, "\n", generic->interface->URI); - free(string); - } - } - generic = generic->next; - } -} - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - - -/** - * osl_generic_sread function: - * this function reads a list of generics from a string complying to the - * OpenScop textual format and a list of known interfaces. It returns a - * pointer to the corresponding list of generic structures. - * \param[in] string The string where to read a list of data. - * \param[in] registry The list of known interfaces (others are ignored). - * \return A pointer to the generic information list that has been read. - */ -osl_generic_p osl_generic_sread(char * string, osl_interface_p registry) { - osl_generic_p generic = NULL, new; - char * content, * start; - void * data; - - while (registry != NULL) { - content = osl_util_tag_content(string, registry->URI); - if (content != NULL) { - start = content; - data = registry->sread(&content); - if (data != NULL) { - new = osl_generic_malloc(); - new->interface = osl_interface_nclone(registry, 1); - new->data = data; - osl_generic_add(&generic, new); - } - free(start); - } - registry = registry->next; - } - - return generic; -} - - -/** - * osl_generic_read_one function: - * this function reads one generic from a file (possibly stdin) - * complying to the OpenScop textual format and a list of known interfaces. - * It returns a pointer to the corresponding generic structure. If no - * tag is found, an error is reported, in the case of an empty or closing tag - * name the function returns the NULL pointer. - * \param[in] file The input file where to read a list of data. - * \param[in] registry The list of known interfaces (others are ignored). - * \return A pointer to the generic that has been read. - */ -osl_generic_p osl_generic_read_one(FILE * file, osl_interface_p registry) { - char * tag; - char * content, * temp; - osl_generic_p generic = NULL; - osl_interface_p interface; - - tag = osl_util_read_tag(file, NULL); - if ((tag == NULL) || (strlen(tag) < 1) || (tag[0] == '/')) { - OSL_debug("empty tag name or closing tag instead of an opening one"); - return NULL; - } - - content = osl_util_read_uptoendtag(file, tag); - interface = osl_interface_lookup(registry, tag); - - temp = content; - if (interface == NULL) { - OSL_warning("unsupported generic"); - fprintf(stderr, "[osl] Warning: unknown URI \"%s\".\n", tag); - } - else { - generic = osl_generic_malloc(); - generic->interface = osl_interface_nclone(interface, 1); - generic->data = interface->sread(&temp); - } - - free(content); - free(tag); - return generic; -} - - -/** - * osl_generic_read function: - * this function reads a list of generics from a file (possibly stdin) - * complying to the OpenScop textual format and a list of known interfaces. - * It returns a pointer to the list of corresponding generic structures. - * \param[in] file The input file where to read a list of data. - * \param[in] registry The list of known interfaces (others are ignored). - * \return A pointer to the generic information list that has been read. - */ -osl_generic_p osl_generic_read(FILE * file, osl_interface_p registry) { - char * generic_string; - osl_generic_p generic_list; - - generic_string = osl_util_read_uptotag(file, OSL_TAG_END_SCOP); - generic_list = osl_generic_sread(generic_string, registry); - free(generic_string); - return generic_list; -} - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ - - -/** - * osl_generic_add function: - * this function adds a generic node (it may be a list as well) to a list - * of generics provided as parameter (list). The new node is inserted at - * the end of the list. - * \param[in] list The list of generics to add a node (NULL if empty). - * \param[in] generic The generic list to add to the initial list. - */ -void osl_generic_add(osl_generic_p * list, osl_generic_p generic) { - osl_generic_p tmp = *list, check; - - if (generic != NULL) { - // First, check that the generic list is OK. - check = generic; - while (check != NULL) { - if ((check->interface == NULL) || (check->interface->URI == NULL)) - OSL_error("no interface or URI in a generic to add to a list"); - - // TODO: move this to the integrity check. - if (osl_generic_lookup(*list, check->interface->URI) != NULL) - OSL_error("only one generic with a given URI is allowed"); - check = check->next; - } - - if (*list != NULL) { - while (tmp->next != NULL) - tmp = tmp->next; - tmp->next = generic; - } - else { - *list = generic; - } - } -} - - -/** - * osl_generic_malloc function: - * This function allocates the memory space for an osl_generic_t - * structure and sets its fields with default values. Then it returns a - * pointer to the allocated space. - * \return A pointer to an empty generic structure with fields set to - * default values. - */ -osl_generic_p osl_generic_malloc() { - osl_generic_p generic; - - OSL_malloc(generic, osl_generic_p, sizeof(osl_generic_t)); - generic->interface = NULL; - generic->data = NULL; - generic->next = NULL; - - return generic; -} - - -/** - * osl_generic_free function: - * This function frees the allocated memory for a generic structure. - * \param[in] generic The pointer to the generic structure we want to free. - */ -void osl_generic_free(osl_generic_p generic) { - osl_generic_p next; - - while (generic != NULL) { - next = generic->next; - if (generic->interface != NULL) { - generic->interface->free(generic->data); - osl_interface_free(generic->interface); - } - else { - if (generic->data != NULL) { - OSL_warning("unregistered interface, memory leaks are possible"); - free(generic->data); - } - } - free(generic); - generic = next; - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_generic_clone function: - * This function builds and returns a "hard copy" (not a pointer copy) of an - * osl_generic_t data structure. - * \param[in] generic The pointer to the generic structure we want to clone. - * \return A pointer to the clone of the input generic structure. - */ -osl_generic_p osl_generic_clone(osl_generic_p generic) { - osl_generic_p clone = NULL, new; - osl_interface_p interface; - void * x; - - while (generic != NULL) { - if (generic->interface != NULL) { - x = generic->interface->clone(generic->data); - interface = osl_interface_clone(generic->interface); - new = osl_generic_malloc(); - new->interface = interface; - new->data = x; - osl_generic_add(&clone, new); - } - else { - OSL_warning("unregistered interface, cloning ignored"); - } - generic = generic->next; - } - - return clone; -} - - -/** - * osl_generic_count function: - * this function counts the number of elements in the generic list provided - * as parameter (x) and returns this number. - * \param[in] x The list of generics. - * \return The number of elements in the list. - */ -int osl_generic_count(osl_generic_p x) { - int generic_number = 0; - - while (x != NULL) { - generic_number++; - x = x->next; - } - - return generic_number; -} - - -/** - * osl_generic_equal function: - * this function returns true if the two generic structures are the same, - * false otherwise. This functions considers two generic structures as equal - * independently of the order of the nodes. TODO: make it dependent on the - * order. - * \param x1 The first generic structure. - * \param x2 The second generic structure. - * \return 1 if x1 and x2 are the same (content-wise), 0 otherwise. - */ -int osl_generic_equal(osl_generic_p x1, osl_generic_p x2) { - int x1_generic_number, x2_generic_number; - int found, equal; - osl_generic_p backup_x2 = x2; - - if (x1 == x2) - return 1; - - // Check whether the number of generics is the same or not. - x1_generic_number = osl_generic_count(x1); - x2_generic_number = osl_generic_count(x2); - if (x1_generic_number != x2_generic_number) - return 0; - - // Check that for each generic in x1 a similar generic is in x2. - while (x1 != NULL) { - x2 = backup_x2; - found = 0; - while ((x2 != NULL) && (found != 1)) { - if (osl_interface_equal(x1->interface, x2->interface)) { - if (x1->interface != NULL) { - equal = x1->interface->equal(x1->data, x2->data); - } - else { - OSL_warning("unregistered generic, " - "cannot state generic equality"); - equal = 0; - } - - if (equal == 0) - return 0; - else - found = 1; - } - - x2 = x2->next; - } - - if (found != 1) - return 0; - - x1 = x1->next; - } - - return 1; -} - - -/** - * osl_generic_has_URI function: - * this function returns 1 if the generic provided as parameter has - * a given URI, 0 other wise. - * \param x The generic structure to test. - * \param URI The URI value to test. - * \return 1 if x has the provided URI, 0 otherwise. - */ -int osl_generic_has_URI(osl_generic_p x, char * URI) { - - if ((x == NULL) || - (x->interface == NULL) || - (x->interface->URI == NULL) || - (strcmp(x->interface->URI, URI))) - return 0; - - return 1; -} - - -/** - * osl_generic_lookup function: - * this function returns the first generic with a given URI in the - * generic list provided as parameter and NULL if it doesn't find such - * a generic. - * \param x The generic list where to search a given generic URI. - * \param URI The URI of the generic we are looking for. - * \return The first generic of the requested URI in the list. - */ -void * osl_generic_lookup(osl_generic_p x, char * URI) { - while (x != NULL) { - if (osl_generic_has_URI(x, URI)) - return x->data; - - x = x->next; - } - - return NULL; -} diff --git a/cloog-0.17.0/osl/source/int.c b/cloog-0.17.0/osl/source/int.c deleted file mode 100644 index 70d398e..0000000 --- a/cloog-0.17.0/osl/source/int.c +++ /dev/null @@ -1,919 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** int.c ** - **-----------------------------------------------------------------** - ** First version: 18/07/2011 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - -#include -#include -#ifdef OSL_GMP_IS_HERE -# include -#endif - -#include -#include - - - -/*+*************************************************************************** - * Basic Functions * - *****************************************************************************/ - - -/** - * osl_int_dump_precision function: - * this function prints in a human readable fashion the precision - * corresponding to the "precision" parameter. - * \param[in] file The file where to print the precision. - * \param[in] precision The precision to print. - */ -void osl_int_dump_precision(FILE * file, int precision) { - - switch (precision) { - case OSL_PRECISION_SP: - fprintf(file, "32 bits"); - break; - case OSL_PRECISION_DP: - fprintf(file, "64 bits"); - break; -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - fprintf(file, "GMP"); - break; -#endif - default: - fprintf(file, "unknown precision %d", precision); - } -} - - -int osl_int_sizeof(int precision) { - switch (precision) { - case OSL_PRECISION_SP: - return sizeof(long int); - - case OSL_PRECISION_DP: - return sizeof(long long int); - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - return sizeof(mpz_t); -#endif - - default: - OSL_error("unknown precision"); - } -} - - -void * osl_int_address(int precision, void * base, int offset) { - switch (precision) { - case OSL_PRECISION_SP: - return (long int *)base + offset; - - case OSL_PRECISION_DP: - return (long long int *)base + offset; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - return (mpz_t *)base + offset; -#endif - - default: - OSL_error("unknown precision"); - } -} - - -void osl_int_init(int precision, void * value_base, int value_offset) { - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - *(long int *)value = 0; - break; - - case OSL_PRECISION_DP: - *(long long int *)value = 0; - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - mpz_init(*(mpz_t *)value); - break; -#endif - - default: - OSL_error("unknown precision"); - } -} - - -void * osl_int_malloc(int precision) { - void * value; - - switch (precision) { - case OSL_PRECISION_SP: - value = malloc(sizeof(long int)); - break; - - case OSL_PRECISION_DP: - value = malloc(sizeof(long long int)); - *(long long int *)value = 0; - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - value = malloc(sizeof(mpz_t)); - break; -#endif - - default: - OSL_error("unknown precision"); - } - - osl_int_init(precision, value, 0); - return value; -} - - -/** - * val1_base[val1_offset] = val2_base[val2_offset]; - */ -void osl_int_assign(int precision, - void * val1_base, int val1_offset, - void * val2_base, int val2_offset) { - void * val1 = osl_int_address(precision, val1_base, val1_offset); - void * val2 = osl_int_address(precision, val2_base, val2_offset); - - switch (precision) { - case OSL_PRECISION_SP: - *(long int *)val1 = *(long int *)val2; - break; - - case OSL_PRECISION_DP: - *(long long int *)val1 = *(long long int *)val2; - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - mpz_set(*(mpz_t *)val1, *(mpz_t *)val2); - break; -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * value_base[value_offset] = i; - */ -void osl_int_set_si(int precision, void * value_base, int value_offset, - int i) { - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - *(long int *)value = (long int)i; - break; - - case OSL_PRECISION_DP: - *(long long int *)value = (long long int)i; - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - mpz_set_si(*(mpz_t *)value, i); - break; -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * return value_base[value_offset]; - */ -int osl_int_get_si(int precision, void * value_base, int value_offset) { - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - return *(int *)value; - - case OSL_PRECISION_DP: - return *(int *)value; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - return mpz_get_si(*(mpz_t *)value); -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * value_base[value_offset] = i; // including initialization for GMP - */ -void osl_int_init_set_si(int precision, - void * value_base, int value_offset, int i) { - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - *(long int *)value = (long int)i; - break; - - case OSL_PRECISION_DP: - *(long long int *)value = (long long int)i; - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - mpz_init_set_si(*(mpz_t *)value, i); - break; -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * value_base[value_offset] = 0; // Including cleaning for GMP - */ -void osl_int_clear(int precision, void * value_base, int value_offset) { - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - *(long int *)value = 0; - break; - - case OSL_PRECISION_DP: - *(long long int *)value = 0; - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - mpz_clear(*(mpz_t *)value); - break; -#endif - - default: - OSL_error("unknown precision"); - } -} - - -void osl_int_free(int precision, void * value_base, int value_offset) { - void * value = osl_int_address(precision, value_base, value_offset); - - osl_int_clear(precision, value_base, value_offset); - free(value); -} - - -/** - * osl_int_print function: - * this function displays an integer value into a file (file, possibly stdout). - * \param file The file where the integer has to be printed. - * \param precision The precision of the integer. - * \param value_base Address of the base integer value. - * \param value_offset Offset in number of values from the base integer value. - */ -void osl_int_print(FILE * file, int precision, - void * value_base, int value_offset) { - char string[OSL_MAX_STRING]; - - osl_int_sprint(string, precision, value_base, value_offset); - fprintf(file, "%s", string); -} - - -/** - * osl_int_sprint function: - * this function prints an integer value into a string, it uses the - * OpenScop Library formats OSL_FMT_* to format the printing. - * \param string The string where the integer has to be printed. - * \param precision The precision of the integer. - * \param value_base Address of the base integer value. - * \param value_offset Offset in number of values from the base integer value. - */ -void osl_int_sprint(char * string, int precision, - void * value_base, int value_offset) { - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - sprintf(string, OSL_FMT_SP, *(long int *)value); - break; - - case OSL_PRECISION_DP: - sprintf(string, OSL_FMT_DP, *(long long int *)value); - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: { - char * str; - str = mpz_get_str(0, 10, *(mpz_t *)value); //TODO: 10 -> #define - sprintf(string, OSL_FMT_MP, str); - free(str); - break; - } -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * osl_int_sprint_txt function: - * this function is similar to osl_int_sprintf but it prints the value - * using OSL_TMT_TXT_* formats. - * \see osl_int_sprintf - */ -void osl_int_sprint_txt(char * string, int precision, - void * value_base, int value_offset) { - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - sprintf(string, OSL_FMT_TXT_SP, *(long int *)value); - break; - - case OSL_PRECISION_DP: - sprintf(string, OSL_FMT_TXT_DP, *(long long int *)value); - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: { - char * str; - str = mpz_get_str(0, 10, *(mpz_t *)value); //TODO: 10 -> #define - sprintf(string, OSL_FMT_TXT_MP, str); - free(str); - break; - } -#endif - - default: - OSL_error("unknown precision"); - } -} - - -void osl_int_sread(char ** string, int precision, - void * value_base, int value_offset) { - void * value = osl_int_address(precision, value_base, value_offset); - int nb_read = 0; - - switch (precision) { - case OSL_PRECISION_SP: - nb_read = sscanf(*string, OSL_FMT_TXT_SP, (long int *)value); - if (nb_read == 0) - OSL_error("failed to read an integer"); - break; - - case OSL_PRECISION_DP: - nb_read = sscanf(*string, OSL_FMT_TXT_DP, (long long int *)value); - if (nb_read == 0) - OSL_error("failed to read an integer"); - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: { - long long int tmp; - nb_read = sscanf(*string, OSL_FMT_TXT_DP, &tmp); - if (nb_read == 0) - OSL_error("failed to read an integer"); - mpz_set_si(*(mpz_t *)value, tmp); - break; - } -#endif - - default: - OSL_error("unknown precision"); - } - - // Update the position in the input string. - *string = *string + nb_read; -} - - -/*+*************************************************************************** - * Arithmetic Operations * - *****************************************************************************/ - - -/** - * result_base[result_offset] = value_base[value_offset] + 1; - */ -void osl_int_increment(int precision, - void * result_base, int result_offset, - void * value_base, int value_offset) { - void * result = osl_int_address(precision, result_base, result_offset); - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - *(long int *)result = *(long int *)value + (long int)1; - break; - - case OSL_PRECISION_DP: - *(long long int *)result = *(long long int *)value + (long long int)1; - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - mpz_add_ui(*(mpz_t *)result, *(mpz_t *)value, 1); - break; -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * result_base[result_offset] = value_base[value_offset] - 1; - */ -void osl_int_decrement(int precision, - void * result_base, int result_offset, - void * value_base, int value_offset) { - void * result = osl_int_address(precision, result_base, result_offset); - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - *(long int *)result = *(long int *)value - (long int)1; - break; - - case OSL_PRECISION_DP: - *(long long int *)result = *(long long int *)value - (long long int)1; - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: { - mpz_t one; - mpz_init_set_si(one, 1); - mpz_sub(*(mpz_t *)result, *(mpz_t *)value, one); - mpz_clear(one); - break; - } -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * result_base[result_offset] = val1_base[val1_offset]+val2_base[val2_offset]; - */ -void osl_int_add(int precision, - void * result_base, int result_offset, - void * val1_base, int val1_offset, - void * val2_base, int val2_offset) { - void * result = osl_int_address(precision, result_base, result_offset); - void * val1 = osl_int_address(precision, val1_base, val1_offset); - void * val2 = osl_int_address(precision, val2_base, val2_offset); - - switch (precision) { - case OSL_PRECISION_SP: - *(long int *)result = *(long int *)val1 + *(long int *)val2; - break; - - case OSL_PRECISION_DP: - *(long long int *)result = *(long long int *)val1 + - *(long long int *)val2; - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - mpz_add(*(mpz_t *)result, *(mpz_t *)val1, *(mpz_t *)val2); - break; -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * result_base[result_offset] = value_base[value_offset] + i; - */ -void osl_int_add_si(int precision, - void * result_base, int result_offset, - void * value_base, int value_offset, int i) { - void * result = osl_int_address(precision, result_base, result_offset); - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - *(long int *)result = *(long int *)value + (long int)i; - break; - - case OSL_PRECISION_DP: - *(long long int *)result = *(long long int *)value + (long long int)i; - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: { - mpz_t si; - mpz_init_set_si(si, i); - mpz_add(*(mpz_t *)result, *(mpz_t *)value, si); - mpz_clear(si); - break; - } -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * result_base[result_offset] = val1_base[val1_offset]*val2_base[val2_offset]; - */ -void osl_int_mul(int precision, - void * result_base, int result_offset, - void * val1_base, int val1_offset, - void * val2_base, int val2_offset) { - void * result = osl_int_address(precision, result_base, result_offset); - void * val1 = osl_int_address(precision, val1_base, val1_offset); - void * val2 = osl_int_address(precision, val2_base, val2_offset); - - switch (precision) { - case OSL_PRECISION_SP: - *(long int *)result = *(long int *)val1 * *(long int *)val2; - break; - - case OSL_PRECISION_DP: - *(long long int *)result = *(long long int *)val1 * - *(long long int *)val2; - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - mpz_mul(*(mpz_t *)result, *(mpz_t *)val1, *(mpz_t *)val2); - break; -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * result_base[result_offset] = value_base[value_offset] * i; - */ -void osl_int_mul_si(int precision, - void * result_base, int result_offset, - void * value_base, int value_offset, int i) { - void * result = osl_int_address(precision, result_base, result_offset); - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - *(long int *)result = *(long int *)value * (long int)i; - break; - - case OSL_PRECISION_DP: - *(long long int *)result = *(long long int *)value * (long long int)i; - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - mpz_mul_si(*(mpz_t *)result, *(mpz_t *)value, i); - break; -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * result_base[result_offset] = val1_base[val1_offset]-val2_base[val2_offset]; - */ -void osl_int_sub(int precision, - void * result_base, int result_offset, - void * val1_base, int val1_offset, - void * val2_base, int val2_offset) { - void * result = osl_int_address(precision, result_base, result_offset); - void * val1 = osl_int_address(precision, val1_base, val1_offset); - void * val2 = osl_int_address(precision, val2_base, val2_offset); - - switch (precision) { - case OSL_PRECISION_SP: - *(long int *)result = *(long int *)val1 - *(long int *)val2; - break; - - case OSL_PRECISION_DP: - *(long long int *)result = *(long long int *)val1 - - *(long long int *)val2; - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - mpz_sub(*(mpz_t *)result, *(mpz_t *)val1, *(mpz_t *)val2); - break; -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * result_base[result_offset] = -value_base[value_offset]; - */ -void osl_int_oppose(int precision, - void * result_base, int result_offset, - void * value_base, int value_offset) { - void * result = osl_int_address(precision, result_base, result_offset); - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - *(long int *)result = -*(long int *)value; - break; - - case OSL_PRECISION_DP: - *(long long int *)result = -*(long long int *)value; - break; - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - mpz_neg(*(mpz_t *)result, *(mpz_t *)value); - break; -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/*+*************************************************************************** - * Conditional Operations * - *****************************************************************************/ - - -/** - * (val1_base[val1_offset] == val2_base[val2_offset]) - */ -int osl_int_eq(int precision, - void * val1_base, int val1_offset, - void * val2_base, int val2_offset) { - void * val1 = osl_int_address(precision, val1_base, val1_offset); - void * val2 = osl_int_address(precision, val2_base, val2_offset); - - switch (precision) { - case OSL_PRECISION_SP: - return (*(long int *)val1 == *(long int *)val2); - - case OSL_PRECISION_DP: - return (*(long long int *)val1 == *(long long int *)val2); - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - return (mpz_cmp(*(mpz_t *)val1, *(mpz_t *)val2) == 0); -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * (val1_base[val1_offset] != val2_base[val2_offset]) - */ -int osl_int_ne(int precision, - void * val1_base, int val1_offset, - void * val2_base, int val2_offset) { - return !osl_int_eq(precision, - val1_base, val1_offset, - val2_base, val2_offset); -} - - -/** - * (value_base[value_offset] > 0) - */ -int osl_int_pos(int precision, void * value_base, int value_offset) { - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - return (*(long int *)value > 0); - - case OSL_PRECISION_DP: - return (*(long long int *)value > 0); - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - return (mpz_sgn(*(mpz_t *)value) > 0); -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * (value_base[value_offset] < 0) - */ -int osl_int_neg(int precision, void * value_base, int value_offset) { - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - return (*(long int *)value < 0); - - case OSL_PRECISION_DP: - return (*(long long int *)value < 0); - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - return (mpz_sgn(*(mpz_t *)value) < 0); -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * (value_base[value_offset] == 0) - */ -int osl_int_zero(int precision, void * value_base, int value_offset) { - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - return (*(long int *)value == 0); - - case OSL_PRECISION_DP: - return (*(long long int *)value == 0); - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - return (mpz_sgn(*(mpz_t *)value) == 0); -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * (value_base[value_offset] == 1) - */ -int osl_int_one(int precision, void * value_base, int value_offset) { - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - return (*(long int *)value == (long int)1); - - case OSL_PRECISION_DP: - return (*(long long int *)value == (long long int)1); - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - return (mpz_cmp_si(*(mpz_t *)value, 1) == 0); -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * (value_base[value_offset] == -1) - */ -int osl_int_mone(int precision, void * value_base, int value_offset) { - void * value = osl_int_address(precision, value_base, value_offset); - - switch (precision) { - case OSL_PRECISION_SP: - return (*(long int *)value == (long int)-1); - - case OSL_PRECISION_DP: - return (*(long long int *)value == (long long int)-1); - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - return (mpz_cmp_si(*(mpz_t *)value, -1) == 0); -#endif - - default: - OSL_error("unknown precision"); - } -} - - -/** - * ((val1_base[val1_offset] % val2_base[val2_offset]) == 0) - */ -int osl_int_divisible(int precision, - void * val1_base, int val1_offset, - void * val2_base, int val2_offset) { - void * val1 = osl_int_address(precision, val1_base, val1_offset); - void * val2 = osl_int_address(precision, val2_base, val2_offset); - - switch (precision) { - case OSL_PRECISION_SP: - return ((*(long int *)val1 % *(long int *)val2) == 0); - - case OSL_PRECISION_DP: - return ((*(long long int *)val1 % *(long long int *)val2) == 0); - -#ifdef OSL_GMP_IS_HERE - case OSL_PRECISION_MP: - return mpz_divisible_p(*(mpz_t *)val1, *(mpz_t *)val2); -#endif - - default: - OSL_error("unknown precision"); - } -} diff --git a/cloog-0.17.0/osl/source/interface.c b/cloog-0.17.0/osl/source/interface.c deleted file mode 100644 index 136fcdc..0000000 --- a/cloog-0.17.0/osl/source/interface.c +++ /dev/null @@ -1,376 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** interface.c ** - **-----------------------------------------------------------------** - ** First version: 15/07/2011 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ - - -/** - * osl_interface_idump function: - * this function displays an osl_interface_t structure (*interface) into - * a file (file, possibly stdout) in a way that trends to be understandable. - * It includes an indentation level (level) in order to work with others - * idump functions. - * \param file The file where the information has to be printed. - * \param interface The interface structure which has to be printed. - * \param level Number of spaces before printing, for each line. - */ -void osl_interface_idump(FILE * file, osl_interface_p interface, int level) { - int j, first = 1; - - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - - if (interface != NULL) - fprintf(file, "+-- osl_interface_t: URI = %s\n", interface->URI); - else - fprintf(file, "+-- NULL interface\n"); - - - while (interface != NULL) { - if (!first) { - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - - if (interface->URI != NULL) - fprintf(file, "| osl_interface_t: URI = %s\n", interface->URI); - else - fprintf(file, "| osl_interface_t: URI = (NULL)\n"); - } - else - first = 0; - - interface = interface->next; - - // Next line. - if (interface != NULL) { - for (j = 0; j <= level + 1; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "V\n"); - } - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_interface_dump function: - * this function prints the content of a osl_interface_t structure - * (*interface) into a file (file, possibly stdout). - * \param file File where informations are printed. - * \param interface The interface structure to print. - */ -void osl_interface_dump(FILE * file, osl_interface_p interface) { - osl_interface_idump(file, interface, 0); -} - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ - - -/** - * osl_interface_add function: - * this function adds an interface node (it may be a list as well) to a - * list of interfaces provided as parameter (list). The new node - * is inserted at the end of the list. - * \param list The list of interfaces to add a node (NULL if empty). - * \param interface The interface to add to the list. - */ -void osl_interface_add(osl_interface_p * list, osl_interface_p interface) { - osl_interface_p tmp = *list, check_interface; - - if (interface != NULL) { - // First, check that the interface list is OK. - check_interface = interface; - while (check_interface != NULL) { - if (check_interface->URI == NULL) - OSL_error("no URI in an interface to add to a list"); - - if (osl_interface_lookup(*list, check_interface->URI) != NULL) - OSL_error("only one interface with a given URI is allowed"); - check_interface = check_interface->next; - } - - if (*list != NULL) { - while (tmp->next != NULL) - tmp = tmp->next; - tmp->next = interface; - } - else { - *list = interface; - } - } -} - - -/** - * osl_interface_malloc function: - * This function allocates the memory space for a osl_interface_t - * structure and sets its fields with default values. Then it returns a - * pointer to the allocated space. - * \return A pointer to an empty interface structure with fields set to - * default values. - */ -osl_interface_p osl_interface_malloc() { - osl_interface_p interface; - - OSL_malloc(interface, osl_interface_p, - sizeof(osl_interface_t)); - interface->URI = NULL; - interface->idump = NULL; - interface->sprint = NULL; - interface->sread = NULL; - interface->malloc = NULL; - interface->free = NULL; - interface->clone = NULL; - interface->equal = NULL; - interface->next = NULL; - - return interface; -} - - -/** - * osl_interface_free function: - * this function frees the allocated memory for an osl_interface_t - * structure, and all the interfaces stored in the list. - * \param[in] interface The pointer to the interface we want to free. - */ -void osl_interface_free(osl_interface_p interface) { - osl_interface_p tmp; - int i = 0; - - if (interface == NULL) - return; - - while (interface != NULL) { - tmp = interface->next; - if (interface->URI != NULL) - free(interface->URI); - free(interface); - interface = tmp; - i++; - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_interface_nclone function: - * This function builds and returns a "hard copy" (not a pointer copy) of the - * n first elements of an osl_interface_t list. - * \param interface The pointer to the interface structure we want to clone. - * \param n The number of nodes we want to copy (-1 for infinity). - * \return The clone of the n first nodes of the interface list. - */ -osl_interface_p osl_interface_nclone(osl_interface_p interface, int n) { - osl_interface_p clone = NULL, new; - int i = 0; - - while ((interface != NULL) && ((n == -1) || (i < n))) { - new = osl_interface_malloc(); - OSL_strdup(new->URI, interface->URI); - new->idump = interface->idump; - new->sprint = interface->sprint; - new->sread = interface->sread; - new->malloc = interface->malloc; - new->free = interface->free; - new->clone = interface->clone; - new->equal = interface->equal; - - osl_interface_add(&clone, new); - interface = interface->next; - i++; - } - - return clone; -} - - -/** - * osl_interface_clone function: - * This function builds and returns a "hard copy" (not a pointer copy) of an - * osl_interface_t data structure. - * \param interface The pointer to the interface structure we want to copy. - * \return A pointer to the copy of the interface structure. - */ -osl_interface_p osl_interface_clone(osl_interface_p interface) { - - return osl_interface_nclone(interface, -1); -} - - -/** - * osl_interface_equal function: - * this function returns true if the two interface structures are the same, - * (content-wise) false otherwise. - * \param interface1 The first interface structure. - * \param interface2 The second interface structure. - * \return 1 if interface1 and interface2 are the same, 0 otherwise. - */ -int osl_interface_equal(osl_interface_p interface1, - osl_interface_p interface2) { - - if (interface1 == interface2) - return 1; - - if (((interface1 == NULL) && (interface2 != NULL)) || - ((interface1 != NULL) && (interface2 == NULL))) - return 0; - - if (strcmp(interface1->URI, interface2->URI) || - (interface1->idump != interface2->idump) || - (interface1->sprint != interface2->sprint) || - (interface1->sread != interface2->sread) || - (interface1->malloc != interface2->malloc) || - (interface1->free != interface2->free) || - (interface1->clone != interface2->clone) || - (interface1->equal != interface2->equal)) - return 0; - - return 1; -} - - -/** - * osl_interface_lookup function: - * this function returns the first interface with a given URI in the - * interface list provided as parameter and NULL if it doesn't find such - * an interface. - * \param list The interface list where to search a given interface URI. - * \param URI The URI of the interface we are looking for. - * \return The first interface of the requested URI in the list. - */ -osl_interface_p -osl_interface_lookup(osl_interface_p list, char * URI) { - while (list != NULL) { - if ((list->URI != NULL) && (!strcmp(list->URI, URI))) - return list; - - list = list->next; - } - - return NULL; -} - - -/** - * osl_interface_get_default_registry function: - * this function creates the list of known interfaces (of all generic types, - * including extensions) and returns it. - * \return The list of known interfaces. - */ -osl_interface_p osl_interface_get_default_registry() { - osl_interface_p registry = NULL; - - // Internal generics - osl_interface_add(®istry, osl_strings_interface()); - osl_interface_add(®istry, osl_body_interface()); - - // Extensions - osl_interface_add(®istry, osl_textual_interface()); - osl_interface_add(®istry, osl_comment_interface()); - osl_interface_add(®istry, osl_scatnames_interface()); - //osl_interface_add(®istry, osl_arrays_interface()); - //osl_interface_add(®istry, osl_lines_interface()); - //osl_interface_add(®istry, osl_irregular_interface()); - - return registry; -} - - - diff --git a/cloog-0.17.0/osl/source/names.c b/cloog-0.17.0/osl/source/names.c deleted file mode 100644 index c68f936..0000000 --- a/cloog-0.17.0/osl/source/names.c +++ /dev/null @@ -1,242 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** extensions/names.c ** - **-----------------------------------------------------------------** - ** First version: 18/04/2011 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - -#include -#include -#include - -#include -#include -#include - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ - - -/** - * osl_names_idump function: - * this function displays an osl_names_t structure (*names) into a - * file (file, possibly stdout) in a way that trends to be understandable. It - * includes an indentation level (level) in order to work with others - * idump functions. - * \param[in] file The file where the information has to be printed. - * \param[in] names The names structure whose information has to be printed. - * \param[in] level Number of spaces before printing, for each line. - */ -void osl_names_idump(FILE * file, osl_names_p names, int level) { - int j; - - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - - if (names != NULL) - fprintf(file, "+-- osl_names_t\n"); - else - fprintf(file, "+-- NULL names\n"); - - if (names != NULL) { - // A blank line. - for (j = 0; j <= level+1; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); - - // Print the various names. - osl_strings_idump(file, names->parameters, level + 1); - osl_strings_idump(file, names->iterators, level + 1); - osl_strings_idump(file, names->scatt_dims, level + 1); - osl_strings_idump(file, names->local_dims, level + 1); - osl_strings_idump(file, names->arrays, level + 1); - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_names_dump function: - * this function prints the content of an osl_names_t structure - * (*names) into a file (file, possibly stdout). - * \param[in] file The file where the information has to be printed. - * \param[in] names The names structure whose information has to be printed. - */ -void osl_names_dump(FILE * file, osl_names_p names) { - osl_names_idump(file, names, 0); -} - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ - - -/** - * osl_names_malloc function: - * this function allocates the memory space for an osl_names_t - * structure and sets its fields with default values. Then it returns a - * pointer to the allocated space. - * \return A pointer to an empty names structure with fields set to - * default values. - */ -osl_names_p osl_names_malloc() { - osl_names_p names; - - OSL_malloc(names, osl_names_p, sizeof(osl_names_t)); - names->parameters = NULL; - names->iterators = NULL; - names->scatt_dims = NULL; - names->local_dims = NULL; - names->arrays = NULL; - - return names; -} - - -/** - * osl_names_free function: - * This function frees the allocated memory for an osl_names_t - * structure. If the names are not character strings, it is the - * responsibility of the user to free each array of elements (including - * the array itself), this function will only free the osl_names_t shell. - * \param[in,out] names The pointer to the names structure we want to free. - */ -void osl_names_free(osl_names_p names) { - if (names != NULL) { - osl_strings_free(names->parameters); - osl_strings_free(names->iterators); - osl_strings_free(names->scatt_dims); - osl_strings_free(names->local_dims); - osl_strings_free(names->arrays); - - free(names); - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_names_generate function: - * this function generates some names. For each kind of name it will generate - * a given number of names with a given prefix followed by a number. - * \param[in] parameter_prefix Prefix for parameter names. - * \param[in] nb_parameters Number of parameters names to generate. - * \param[in] iterator_prefix Prefix for iterator names. - * \param[in] nb_iterators Number of iterators names to generate. - * \param[in] scatt_dim_prefix Prefix for scattering dimension names. - * \param[in] nb_scatt_dims Number of scattering dim names to generate. - * \param[in] local_dim_prefix Prefix for local dimension names. - * \param[in] nb_local_dims Number of local dimension names to generate. - * \param[in] array_prefix Prefix for array names. - * \param[in] nb_arrays Number of array names to generate. - * \return A new names structure containing generated names. - */ -osl_names_p osl_names_generate( - char * parameter_prefix, int nb_parameters, - char * iterator_prefix, int nb_iterators, - char * scatt_dim_prefix, int nb_scatt_dims, - char * local_dim_prefix, int nb_local_dims, - char * array_prefix, int nb_arrays) { - osl_names_p names = osl_names_malloc(); - - names->parameters= osl_strings_generate(parameter_prefix,nb_parameters); - names->iterators = osl_strings_generate(iterator_prefix, nb_iterators); - names->scatt_dims= osl_strings_generate(scatt_dim_prefix,nb_scatt_dims); - names->local_dims= osl_strings_generate(local_dim_prefix,nb_local_dims); - names->arrays = osl_strings_generate(array_prefix, nb_arrays); - - return names; -} - -/** - * osl_names_clone function: - * this function builds and returns a "hard copy" (not a pointer copy) of an - * osl_names_t data structure provided as parameter. - * \param[in] names The pointer to the names structure we want to clone. - * \return A pointer to the clone of the names structure provided as parameter. - */ -osl_names_p osl_names_clone(osl_names_p names) { - osl_names_p clone = NULL; - - if (names != NULL) { - clone = osl_names_malloc(); - clone->parameters = osl_strings_clone(names->parameters); - clone->iterators = osl_strings_clone(names->iterators); - clone->scatt_dims = osl_strings_clone(names->scatt_dims); - clone->local_dims = osl_strings_clone(names->local_dims); - clone->arrays = osl_strings_clone(names->arrays); - } - return clone; -} diff --git a/cloog-0.17.0/osl/source/relation.c b/cloog-0.17.0/osl/source/relation.c deleted file mode 100644 index a4b641a..0000000 --- a/cloog-0.17.0/osl/source/relation.c +++ /dev/null @@ -1,2179 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** relation.c ** - **-----------------------------------------------------------------** - ** First version: 30/04/2008 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ - - -/** - * osl_relation_sprint_type function: - * this function prints the textual type of an osl_relation_t structure into - * a string, according to the OpenScop specification, and returns that string. - * \param[in] relation The relation whose type has to be printed. - * \return A string containing the relation type. - */ -static -char * osl_relation_sprint_type(osl_relation_p relation) { - char * string = NULL; - - OSL_malloc(string, char *, OSL_MAX_STRING * sizeof(char)); - string[0] = '\0'; - - if (relation != NULL) { - switch (relation->type) { - case OSL_UNDEFINED: { - snprintf(string, OSL_MAX_STRING, OSL_STRING_UNDEFINED); - break; - } - case OSL_TYPE_CONTEXT: { - snprintf(string, OSL_MAX_STRING, OSL_STRING_CONTEXT); - break; - } - case OSL_TYPE_DOMAIN: { - snprintf(string, OSL_MAX_STRING, OSL_STRING_DOMAIN); - break; - } - case OSL_TYPE_SCATTERING: { - snprintf(string, OSL_MAX_STRING, OSL_STRING_SCATTERING); - break; - } - case OSL_TYPE_READ: { - snprintf(string, OSL_MAX_STRING, OSL_STRING_READ); - break; - } - case OSL_TYPE_WRITE: { - snprintf(string, OSL_MAX_STRING, OSL_STRING_WRITE); - break; - } - case OSL_TYPE_MAY_WRITE: { - snprintf(string, OSL_MAX_STRING, OSL_STRING_MAY_WRITE); - break; - } - default: { - OSL_warning("unknown relation type, " - "replaced with "OSL_STRING_UNDEFINED); - snprintf(string, OSL_MAX_STRING, OSL_STRING_UNDEFINED); - } - } - } - - return string; -} - - -/** - * osl_relation_print_type function: - * this function displays the textual type of an osl_relation_t structure into - * a file (file, possibly stdout), according to the OpenScop specification. - * \param[in] file File where informations are printed. - * \param[in] relation The relation whose type has to be printed. - */ -static -void osl_relation_print_type(FILE * file, osl_relation_p relation) { - char * string = osl_relation_sprint_type(relation); - fprintf(file, "%s", string); - free(string); -} - - -/** - * osl_relation_idump function: - * this function displays a osl_relation_t structure (*relation) into a - * file (file, possibly stdout) in a way that trends to be understandable. - * It includes an indentation level (level) in order to work with others - * idump functions. - * \param[in] file File where informations are printed. - * \param[in] relation The relation whose information has to be printed. - * \param[in] level Number of spaces before printing, for each line. - */ -void osl_relation_idump(FILE * file, osl_relation_p relation, int level) { - int i, j, first = 1; - - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - - if (relation != NULL) { - fprintf(file, "+-- osl_relation_t ("); - osl_relation_print_type(file, relation); - fprintf(file, ", "); - osl_int_dump_precision(file, relation->precision); - fprintf(file, ")\n"); - } - else { - fprintf(file, "+-- NULL relation\n"); - } - - while (relation != NULL) { - if (! first) { - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - fprintf(file, "| osl_relation_t ("); - osl_relation_print_type(file, relation); - fprintf(file, ", "); - osl_int_dump_precision(file, relation->precision); - fprintf(file, ")\n"); - } - else - first = 0; - - // A blank line - for(j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "%d %d %d %d %d %d\n", - relation->nb_rows, relation->nb_columns, - relation->nb_output_dims, relation->nb_input_dims, - relation->nb_local_dims, relation->nb_parameters); - - // Display the relation. - for (i = 0; i < relation->nb_rows; i++) { - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - - fprintf(file, "[ "); - - for (j = 0; j < relation->nb_columns; j++) { - osl_int_print(file, relation->precision, relation->m[i], j); - fprintf(file, " "); - } - - fprintf(file, "]\n"); - } - - relation = relation->next; - - // Next line. - if (relation != NULL) { - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "|\n"); - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "V\n"); - } - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_relation_dump function: - * this function prints the content of a osl_relation_t structure - * (*relation) into a file (file, possibly stdout). - * \param[in] file File where informations are printed. - * \param[in] relation The relation whose information have to be printed. - */ -void osl_relation_dump(FILE * file, osl_relation_p relation) { - osl_relation_idump(file, relation, 0); -} - - -/** - * osl_relation_expression_element function: - * this function returns a string containing the printing of a value (e.g., - * an iterator with its coefficient or a constant). - * \param[in] val Address of the coefficient or constant value. - * \param[in] precision The precision of the value. - * \param[in,out] first Pointer to a boolean set to 1 if the current value - * is the first of an expresion, 0 otherwise (maybe - * updated). - * \param[in] cst A boolean set to 1 if the value is a constant, - * 0 otherwise. - * \param[in] name String containing the name of the element. - * \return A string that contains the printing of a value. - */ -static -char * osl_relation_expression_element(void * val, - int precision, int * first, - int cst, char * name) { - char * temp, * body, * sval; - - OSL_malloc(temp, char *, OSL_MAX_STRING * sizeof(char)); - OSL_malloc(body, char *, OSL_MAX_STRING * sizeof(char)); - OSL_malloc(sval, char *, OSL_MAX_STRING * sizeof(char)); - - body[0] = '\0'; - sval[0] = '\0'; - - // statements for the 'normal' processing. - if (!osl_int_zero(precision, val, 0) && (!cst)) { - if ((*first) || osl_int_neg(precision, val, 0)) { - if (osl_int_one(precision, val, 0)) { // case 1 - sprintf(sval, "%s", name); - } - else { - if (osl_int_mone(precision, val, 0)) { // case -1 - sprintf(sval, "-%s", name); - } - else { // default case - osl_int_sprint(sval, precision, val, 0); - sprintf(temp, "*%s", name); - strcat(sval, temp); - } - } - *first = 0; - } - else { - if (osl_int_one(precision, val, 0)) { - sprintf(sval, "+%s", name); - } - else { - sprintf(sval, "+"); - osl_int_sprint_txt(temp, precision, val, 0); - strcat(sval, temp); - sprintf(temp, "*%s", name); - strcat(sval, temp); - } - } - } - else { - if (cst) { - if ((osl_int_zero(precision, val, 0) && (*first)) || - (osl_int_neg(precision, val, 0))) - osl_int_sprint_txt(sval, precision, val, 0); - if (osl_int_pos(precision, val, 0)) { - if (!(*first)) { - sprintf(sval, "+"); - osl_int_sprint_txt(temp, precision, val, 0); - strcat(sval, temp); - } - else { - osl_int_sprint_txt(sval, precision, val, 0); - } - } - } - } - free(temp); - free(body); - - return(sval); -} - - -/** - * osl_relation_strings function: - * this function creates a NULL-terminated array of strings from an - * osl_names_t structure in such a way that the ith string is the "name" - * corresponding to the ith column of the constraint matrix. - * \param[in] relation The relation for which we need an array of names. - * \param[in] names The set of names for each element. - * \return An array of strings with one string per constraint matrix column. - */ -static -char ** osl_relation_strings(osl_relation_p relation, osl_names_p names) { - char ** strings; - char temp[OSL_MAX_STRING]; - int i, offset, array_id; - - if ((relation == NULL) || (names == NULL)) { - OSL_debug("no names or relation to build the name array"); - return NULL; - } - - OSL_malloc(strings, char **, (relation->nb_columns + 1)*sizeof(char *)); - strings[relation->nb_columns] = NULL; - - // 1. Equality/inequality marker. - OSL_strdup(strings[0], "e/i"); - offset = 1; - - // 2. Output dimensions. - if (osl_relation_is_access(relation)) { - // The first output dimension is the array name. - array_id = osl_relation_get_array_id(relation); - OSL_strdup(strings[offset], names->arrays->string[array_id - 1]); - // The other ones are the array dimensions [1]...[n] - for (i = offset + 1; i < relation->nb_output_dims + offset; i++) { - sprintf(temp, "[%d]", i - 1); - OSL_strdup(strings[i], temp); - } - } - else - if (relation->type == OSL_TYPE_SCATTERING) { - for (i = offset; i < relation->nb_output_dims + offset; i++) { - OSL_strdup(strings[i], names->scatt_dims->string[i - offset]); - } - } - else { - for (i = offset; i < relation->nb_output_dims + offset; i++) { - OSL_strdup(strings[i], names->iterators->string[i - offset]); - } - } - offset += relation->nb_output_dims; - - // 3. Input dimensions. - for (i = offset; i < relation->nb_input_dims + offset; i++) - OSL_strdup(strings[i], names->iterators->string[i - offset]); - offset += relation->nb_input_dims; - - // 4. Local dimensions. - for (i = offset; i < relation->nb_local_dims + offset; i++) - OSL_strdup(strings[i], names->local_dims->string[i - offset]); - offset += relation->nb_local_dims; - - // 5. Parameters. - for (i = offset; i < relation->nb_parameters + offset; i++) - OSL_strdup(strings[i], names->parameters->string[i - offset]); - offset += relation->nb_parameters; - - // 6. Scalar. - OSL_strdup(strings[offset], "1"); - - return strings; -} - - -/** - * osl_relation_subexpression function: - * this function returns a string corresponding to an affine (sub-)expression - * stored at the "row"^th row of the relation pointed by "relation" between - * the start and stop columns. Optionnaly it may oppose the whole expression. - * \param[in] relation A set of linear expressions. - * \param[in] row The row corresponding to the expression. - * \param[in] start The first column for the expression (inclusive). - * \param[in] stop The last column for the expression (inclusive). - * \param[in] oppose Boolean set to 1 to negate the expression, 0 otherwise. - * \param[in] strings Array of textual names of the various elements. - * \return A string that contains the printing of an affine (sub-)expression. - */ -static -char * osl_relation_subexpression(osl_relation_p relation, - int row, int start, int stop, int oppose, - char ** strings) { - int i, first = 1, constant; - char * sval; - char * sline; - - OSL_malloc(sline, char *, OSL_MAX_STRING * sizeof(char)); - sline[0] = '\0'; - - // Create the expression. The constant is a special case. - for (i = start; i <= stop; i++) { - if (oppose) { - osl_int_oppose(relation->precision, - relation->m[row], i, relation->m[row], i); - } - - if (i == relation->nb_columns - 1) - constant = 1; - else - constant = 0; - - sval = osl_relation_expression_element( - osl_int_address(relation->precision, relation->m[row], i), - relation->precision, &first, constant, strings[i]); - - if (oppose) { - osl_int_oppose(relation->precision, - relation->m[row], i, relation->m[row], i); - } - strcat(sline, sval); - free(sval); - } - - return sline; -} - - -/** - * osl_relation_expression function: - * this function returns a string corresponding to an affine expression - * stored at the "row"^th row of the relation pointed by "relation". - * \param[in] relation A set of linear expressions. - * \param[in] row The row corresponding to the expression. - * \param[in] strings Array of textual names of the various elements. - * \return A string that contains the printing of an affine expression. - */ -char * osl_relation_expression(osl_relation_p relation, - int row, char ** strings) { - - return osl_relation_subexpression(relation, row, - 1, relation->nb_columns - 1, 0, - strings); -} - - -/** - * osl_relation_is_simple_output function: - * this function returns 1 or -1 if a given constraint row of a relation - * corresponds to an output, 0 otherwise. We call a simple output an equality - * constraint where exactly one output coefficient is not 0 and is either - * 1 (in this case the function returns 1) or -1 (in this case the function - * returns -1). - * \param[in] relation The relation to test for simple output. - * \param[in] row The row corresponding to the constraint to test. - * \return 1 or -1 if the row is a simple output, 0 otherwise. - */ -static -int osl_relation_is_simple_output(osl_relation_p relation, int row) { - int i; - int first = 1; - int sign = 0; - - if ((relation == NULL) || - (relation->m == NULL) || - (relation->nb_output_dims == 0)) - return 0; - - if ((row < 0) || (row > relation->nb_rows)) - OSL_error("the specified row does not exist in the relation"); - - // The constraint must be an equality. - if (!osl_int_zero(relation->precision, relation->m[row], 0)) - return 0; - - // Check the output part has one and only one non-zero +1 or -1 coefficient. - first = 1; - for (i = 1; i <= relation->nb_output_dims; i++) { - if (!osl_int_zero(relation->precision, relation->m[row], i)) { - if (first) - first = 0; - else - return 0; - - if (osl_int_one(relation->precision, relation->m[row], i)) - sign = 1; - else if (osl_int_mone(relation->precision, relation->m[row], i)) - sign = -1; - else - return 0; - } - } - - return sign; -} - - -/** - * osl_relation_sprint_comment function: - * this function prints into a string a comment corresponding to a constraint - * of a relation, according to its type, then it returns this string. This - * function does not check that printing the comment is possible (i.e., are - * there enough names ?), hence it is the responsibility of the user to ensure - * he/she can call this function safely. - * \param[in] relation The relation for which a comment has to be printed. - * \param[in] row The constrain row for which a comment has to be printed. - * \param[in] strings Array of textual names of the various elements. - * \return A string which contains the comment for the row. - */ -static -char * osl_relation_sprint_comment(osl_relation_p relation, - int row, char ** strings) { - int sign; - int high_water_mark = OSL_MAX_STRING; - char * string = NULL; - char * expression; - char buffer[OSL_MAX_STRING]; - - OSL_malloc(string, char *, high_water_mark * sizeof(char)); - string[0] = '\0'; - - if ((relation == NULL) || (strings == NULL)) { - OSL_debug("no relation or names while asked to print a comment"); - return string; - } - - if ((sign = osl_relation_is_simple_output(relation, row))) { - // First case : output == expression. - - expression = osl_relation_subexpression(relation, row, - 1, relation->nb_output_dims, - sign < 0, - strings); - snprintf(buffer, OSL_MAX_STRING, " ## %s", expression); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - free(expression); - - // We don't print the right hand side if it's an array identifier. - if (!osl_relation_is_access(relation) || - osl_int_zero(relation->precision, relation->m[row], 1)) { - expression = osl_relation_subexpression(relation, row, - relation->nb_output_dims + 1, - relation->nb_columns - 1, - sign > 0, - strings); - snprintf(buffer, OSL_MAX_STRING, " == %s", expression); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - free(expression); - } - } - else { - // Second case : general case. - - expression = osl_relation_expression(relation, row, strings); - snprintf(buffer, OSL_MAX_STRING, " ## %s", expression); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - free(expression); - - if (osl_int_zero(relation->precision, relation->m[row], 0)) - snprintf(buffer, OSL_MAX_STRING, " == 0"); - else - snprintf(buffer, OSL_MAX_STRING, " >= 0"); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - } - - return string; -} - - -/** - * osl_relation_column_string function: - * this function returns an OpenScop comment string showing all column - * names. It is designed to nicely fit a constraint matrix that would be - * printed just below this line. - * \param[in] relation The relation related to the comment line to build. - * \param[in] strings Array of textual names of the various elements. - * \return A fancy comment string with all the dimension names. - */ -static -char * osl_relation_column_string(osl_relation_p relation, char ** strings) { - int i, j; - int index_output_dims; - int index_input_dims; - int index_local_dims; - int index_parameters; - int index_scalar; - int space, length, left, right; - char * scolumn; - char temp[OSL_MAX_STRING]; - - OSL_malloc(scolumn, char *, OSL_MAX_STRING); - - index_output_dims = 1; - index_input_dims = index_output_dims + relation->nb_output_dims; - index_local_dims = index_input_dims + relation->nb_input_dims; - index_parameters = index_local_dims + relation->nb_local_dims; - index_scalar = index_parameters + relation->nb_parameters; - - // 1. The comment part. - sprintf(scolumn, "#"); - for (j = 0; j < (OSL_FMT_LENGTH - 1)/2 - 1; j++) - strcat(scolumn, " "); - - i = 0; - while (strings[i] != NULL) { - space = OSL_FMT_LENGTH; - length = (space > strlen(strings[i])) ? strlen(strings[i]) : space; - right = (space - length + (OSL_FMT_LENGTH % 2)) / 2; - left = space - length - right; - - // 2. Spaces before the name - for (j = 0; j < left; j++) - strcat(scolumn, " "); - - // 3. The (abbreviated) name - for (j = 0; j < length - 1; j++) { - sprintf(temp, "%c", strings[i][j]); - strcat(scolumn, temp); - } - if (length >= strlen(strings[i])) - sprintf(temp, "%c", strings[i][j]); - else - sprintf(temp, "."); - strcat(scolumn, temp); - - // 4. Spaces after the name - for (j = 0; j < right; j++) - strcat(scolumn, " "); - - i++; - if ((i == index_output_dims) || - (i == index_input_dims) || - (i == index_local_dims) || - (i == index_parameters) || - (i == index_scalar)) - strcat(scolumn, "|"); - else - strcat(scolumn, " "); - } - strcat(scolumn, "\n"); - - return scolumn; -} - - -/** - * osl_relation_names function: - * this function generates as set of names for all the dimensions - * involved in a given relation. - * \param[in] relation The relation we have to generate names for. - * \return A set of generated names for the input relation dimensions. - */ -static -osl_names_p osl_relation_names(osl_relation_p relation) { - int nb_parameters = OSL_UNDEFINED; - int nb_iterators = OSL_UNDEFINED; - int nb_scattdims = OSL_UNDEFINED; - int nb_localdims = OSL_UNDEFINED; - int array_id = OSL_UNDEFINED; - - osl_relation_get_attributes(relation, &nb_parameters, &nb_iterators, - &nb_scattdims, &nb_localdims, &array_id); - - return osl_names_generate("P", nb_parameters, - "i", nb_iterators, - "c", nb_scattdims, - "l", nb_localdims, - "A", array_id); -} - - -/** - * osl_relation_nb_components function: - * this function returns the number of component in the union of relations - * provided as parameter. - * \param[in] relation The input union of relations. - * \return The number of components in the input union of relations. - */ -int osl_relation_nb_components(osl_relation_p relation) { - int nb_components = 0; - - while (relation != NULL) { - nb_components++; - relation = relation->next; - } - - return nb_components; -} - - -/** - * osl_relation_spprint_polylib function: - * this function pretty-prints the content of an osl_relation_t structure - * (*relation) into a string in the extended polylib format, and returns this - * string. This format is the same as OpenScop's, minus the type. - * \param[in] relation The relation whose information has to be printed. - * \param[in] names The names of the constraint columns for comments. - * \return A string containing the relation pretty-printing. - */ -char * osl_relation_spprint_polylib(osl_relation_p relation, - osl_names_p names) { - int i, j; - int part, nb_parts; - int generated_names = 0; - int high_water_mark = OSL_MAX_STRING; - char * string = NULL; - char buffer[OSL_MAX_STRING]; - char ** name_array = NULL; - char * scolumn; - char * comment; - - if (relation == NULL) - return strdup("# NULL relation\n"); - - OSL_malloc(string, char *, high_water_mark * sizeof(char)); - string[0] = '\0'; - - // Generates the names for the comments if necessary. - if (names == NULL) { - generated_names = 1; - names = osl_relation_names(relation); - } - - nb_parts = osl_relation_nb_components(relation); - - if (nb_parts > 1) { - snprintf(buffer, OSL_MAX_STRING, "# Union with %d parts\n%d\n", - nb_parts, nb_parts); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - } - - // Print each part of the union. - for (part = 1; part <= nb_parts; part++) { - // Prepare the array of strings for comments. - name_array = osl_relation_strings(relation, names); - - if (nb_parts > 1) { - snprintf(buffer, OSL_MAX_STRING, "# Union part No.%d\n", part); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - } - - snprintf(buffer, OSL_MAX_STRING, "%d %d %d %d %d %d\n", - relation->nb_rows, relation->nb_columns, - relation->nb_output_dims, relation->nb_input_dims, - relation->nb_local_dims, relation->nb_parameters); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - - if (relation->nb_rows > 0) { - scolumn = osl_relation_column_string(relation, name_array); - snprintf(buffer, OSL_MAX_STRING, "%s", scolumn); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - free(scolumn); - } - - for (i = 0; i < relation->nb_rows; i++) { - for (j = 0; j < relation->nb_columns; j++) { - osl_int_sprint(buffer, relation->precision, relation->m[i], j); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - snprintf(buffer, OSL_MAX_STRING, " "); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - } - - if (name_array != NULL) { - comment = osl_relation_sprint_comment(relation, i, name_array); - osl_util_safe_strcat(&string, comment, &high_water_mark); - free(comment); - } - snprintf(buffer, OSL_MAX_STRING, "\n"); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - } - - // Free the array of strings. - if (name_array != NULL) { - for (i = 0; i < relation->nb_columns; i++) - free(name_array[i]); - free(name_array); - } - - relation = relation->next; - } - - if (generated_names) - osl_names_free(names); - - return string; -} - - -/** - * osl_relation_spprint function: - * this function pretty-prints the content of an osl_relation_t structure - * (*relation) into a string in the OpenScop format, and returns this string. - * \param[in] relation The relation whose information has to be printed. - * \param[in] names The names of the constraint columns for comments. - * \return A string - */ -char * osl_relation_spprint(osl_relation_p relation, osl_names_p names) { - int high_water_mark = OSL_MAX_STRING; - char * string = NULL; - char * temp; - char buffer[OSL_MAX_STRING]; - OSL_malloc(string, char *, high_water_mark * sizeof(char)); - string[0] = '\0'; - - if (osl_relation_nb_components(relation) > 0) { - temp = osl_relation_sprint_type(relation); - osl_util_safe_strcat(&string, temp, &high_water_mark); - free(temp); - - snprintf(buffer, OSL_MAX_STRING, "\n"); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - - temp = osl_relation_spprint_polylib(relation, names); - osl_util_safe_strcat(&string, temp, &high_water_mark); - free(temp); - } - - return string; -} - - -/** - * osl_relation_pprint function: - * this function pretty-prints the content of an osl_relation_t structure - * (*relation) into a file (file, possibly stdout) in the OpenScop format. - * \param[in] file File where informations are printed. - * \param[in] relation The relation whose information has to be printed. - * \param[in] names The names of the constraint columns for comments. - */ -void osl_relation_pprint(FILE * file, osl_relation_p relation, - osl_names_p names) { - char * string = osl_relation_spprint(relation, names); - fprintf(file, "%s", string); - free(string); -} - - -/** - * osl_relation_print function: - * this function prints the content of an osl_relation_t structure - * (*relation) into a file (file, possibly stdout) in the OpenScop format. - * \param[in] file File where informations are printed. - * \param[in] relation The relation whose information has to be printed. - */ -void osl_relation_print(FILE * file, osl_relation_p relation) { - - osl_relation_pprint(file, relation, NULL); -} - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - - -/** - * osl_relation_read_type function: - * this function reads a textual relation type and returns its integer - * counterpart. - * \param[in] file The input stream. - * \return The relation type. - */ -static -int osl_relation_read_type(FILE * file) { - int type; - osl_strings_p strings; - - strings = osl_strings_read(file); - if (osl_strings_size(strings) > 1) { - OSL_warning("uninterpreted information (after the relation type)"); - } - if (osl_strings_size(strings) == 0) - OSL_error("no relation type"); - - if (!strcmp(strings->string[0], OSL_STRING_UNDEFINED)) { - type = OSL_UNDEFINED; - goto return_type; - } - - if (!strcmp(strings->string[0], OSL_STRING_CONTEXT)) { - type = OSL_TYPE_CONTEXT; - goto return_type; - } - - if (!strcmp(strings->string[0], OSL_STRING_DOMAIN)) { - type = OSL_TYPE_DOMAIN; - goto return_type; - } - - if (!strcmp(strings->string[0], OSL_STRING_SCATTERING)) { - type = OSL_TYPE_SCATTERING; - goto return_type; - } - - if (!strcmp(strings->string[0], OSL_STRING_READ)) { - type = OSL_TYPE_READ; - goto return_type; - } - - if (!strcmp(strings->string[0], OSL_STRING_WRITE)) { - type = OSL_TYPE_WRITE; - goto return_type; - } - - if (!strcmp(strings->string[0], OSL_STRING_MAY_WRITE)) { - type = OSL_TYPE_MAY_WRITE; - goto return_type; - } - - OSL_error("relation type not supported"); - -return_type: - osl_strings_free(strings); - return type; -} - - -/** - * osl_relation_pread function ("precision read"): - * this function reads a relation into a file (foo, posibly stdin) and - * returns a pointer this relation. The relation is set to the maximum - * available precision. - * \param[in] foo The input stream. - * \param[in] precision The precision of the relation elements. - * \return A pointer to the relation structure that has been read. - */ -osl_relation_p osl_relation_pread(FILE * foo, int precision) { - int i, j, k, n, read = 0; - int nb_rows, nb_columns; - int nb_output_dims, nb_input_dims, nb_local_dims, nb_parameters; - int nb_union_parts = 1; - int may_read_nb_union_parts = 1; - int read_attributes = 1; - int first = 1; - int type; - char * c, s[OSL_MAX_STRING], str[OSL_MAX_STRING], *tmp; - osl_relation_p relation, relation_union = NULL, previous = NULL; - - type = osl_relation_read_type(foo); - - // Read each part of the union (the number of parts may be updated inside) - for (k = 0; k < nb_union_parts; k++) { - // Read the number of union parts or the attributes of the union part - while (read_attributes) { - read_attributes = 0; - - // Read relation attributes. - c = osl_util_skip_blank_and_comments(foo, s); - read = sscanf(c, " %d %d %d %d %d %d", &nb_rows, &nb_columns, - &nb_output_dims, &nb_input_dims, - &nb_local_dims, &nb_parameters); - - if (((read != 1) && (read != 6)) || - ((read == 1) && (may_read_nb_union_parts != 1))) - OSL_error("not 1 or 6 integers on the first relation line"); - - if (read == 1) { - // Only one number means a union and is the number of parts. - nb_union_parts = nb_rows; - if (nb_union_parts < 1) - OSL_error("negative nb of union parts"); - - // Allow to read the properties of the first part of the union. - read_attributes = 1; - } - - may_read_nb_union_parts = 0; - } - - // Allocate the union part and fill its properties. - relation = osl_relation_pmalloc(precision, nb_rows, nb_columns); - relation->type = type; - relation->nb_output_dims = nb_output_dims; - relation->nb_input_dims = nb_input_dims; - relation->nb_local_dims = nb_local_dims; - relation->nb_parameters = nb_parameters; - - // Read the matrix of constraints. - for (i = 0; i < relation->nb_rows; i++) { - c = osl_util_skip_blank_and_comments(foo, s); - if (c == NULL) - OSL_error("not enough rows"); - - for (j = 0; j < relation->nb_columns; j++) { - if (c == NULL || *c == '#' || *c == '\n') - OSL_error("not enough columns"); - if (sscanf(c, "%s%n", str, &n) == 0) - OSL_error("not enough rows"); - - // TODO: remove this tmp (sread updates the pointer). - tmp = str; - osl_int_sread(&tmp, precision, relation->m[i], j); - c += n; - } - } - - // Build the linked list of union parts. - if (first == 1) { - relation_union = relation; - first = 0; - } - else { - previous->next = relation; - } - - previous = relation; - read_attributes = 1; - } - - return relation_union; -} - - -/** - * osl_relation_read function: - * this function is equivalent to osl_relation_pread() except that - * the precision corresponds to the precision environment variable or - * to the highest available precision if it is not defined. - * \see{osl_relation_pread} - */ -osl_relation_p osl_relation_read(FILE * foo) { - int precision = osl_util_get_precision(); - return osl_relation_pread(foo, precision); -} - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ - - -/** - * osl_relation_pmalloc function: - * (precision malloc) this function allocates the memory space for an - * osl_relation_t structure and sets its fields with default values. - * Then it returns a pointer to the allocated space. - * \param[in] precision The precision of the constraint matrix. - * \param[in] nb_rows The number of row of the relation to allocate. - * \param[in] nb_columns The number of columns of the relation to allocate. - * \return A pointer to an empty relation with fields set to default values - * and a ready-to-use constraint matrix. - */ -osl_relation_p osl_relation_pmalloc(int precision, - int nb_rows, int nb_columns) { - osl_relation_p relation; - void ** p, * q; - int i, j; - - OSL_malloc(relation, osl_relation_p, sizeof(osl_relation_t)); - relation->type = OSL_UNDEFINED; - relation->nb_rows = nb_rows; - relation->nb_columns = nb_columns; - relation->nb_output_dims = OSL_UNDEFINED; - relation->nb_input_dims = OSL_UNDEFINED; - relation->nb_parameters = OSL_UNDEFINED; - relation->nb_local_dims = OSL_UNDEFINED; - relation->precision = precision; - - if ((nb_rows == 0) || (nb_columns == 0) || - (nb_rows == OSL_UNDEFINED) || (nb_columns == OSL_UNDEFINED)) { - relation->m = NULL; - } - else { - OSL_malloc(p, void **, nb_rows * sizeof(void *)); - OSL_malloc(q, void *, - nb_rows * nb_columns * osl_int_sizeof(precision)); - relation->m = p; - for (i = 0; i < nb_rows; i++) { - relation->m[i] = osl_int_address(precision, q, i * nb_columns); - for (j = 0; j < nb_columns; j++) - osl_int_init_set_si(precision, relation->m[i], j, 0); - } - } - - relation->next = NULL; - - return relation; -} - - -/** - * osl_relation_malloc function: - * this function is equivalent to osl_relation_pmalloc() except that - * the precision corresponds to the precision environment variable or - * to the highest available precision if it is not defined. - * \see{osl_relation_pmalloc} - */ -osl_relation_p osl_relation_malloc(int nb_rows, int nb_columns) { - int precision = osl_util_get_precision(); - return osl_relation_pmalloc(precision, nb_rows, nb_columns); -} - - -/** - * osl_relation_free_inside function: - * this function frees the allocated memory for the inside of a - * osl_relation_t structure, i.e. only m. - * \param[in] relation The pointer to the relation we want to free internals. - */ -void osl_relation_free_inside(osl_relation_p relation) { - int i, nb_elements; - void * p; - - if (relation == NULL) - return; - - nb_elements = relation->nb_rows * relation->nb_columns; - - if (nb_elements > 0) - p = relation->m[0]; - - for (i = 0; i < nb_elements; i++) - osl_int_clear(relation->precision, p, i); - - if (relation->m != NULL) { - if (nb_elements > 0) - free(relation->m[0]); - free(relation->m); - } -} - - -/** - * osl_relation_free function: - * this function frees the allocated memory for an osl_relation_t - * structure. - * \param[in] relation The pointer to the relation we want to free. - */ -void osl_relation_free(osl_relation_p relation) { - osl_relation_p tmp; - - if (relation == NULL) - return; - - while (relation != NULL) { - tmp = relation->next; - osl_relation_free_inside(relation); - free(relation); - relation = tmp; - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_relation_nclone function: - * this functions builds and returns a "hard copy" (not a pointer copy) of a - * osl_relation_t data structure such that the clone is restricted to the - * "n" first rows of the relation. This applies to all the parts in the case - * of a relation union. - * \param[in] relation The pointer to the relation we want to clone. - * \param[in] n The number of row of the relation we want to clone (the - * special value -1 means "all the rows"). - * \return A pointer to the clone of the relation union restricted to the - * first n rows of constraint matrix for each part of the union. - */ -osl_relation_p osl_relation_nclone(osl_relation_p relation, int n) { - int i, j; - int first = 1, all_rows = 0; - osl_relation_p clone = NULL, node, previous = NULL; - - if (n == -1) - all_rows = 1; - - while (relation != NULL) { - if (all_rows) - n = relation->nb_rows; - - if (n > relation->nb_rows) - OSL_error("not enough rows to clone in the relation"); - - node = osl_relation_pmalloc(relation->precision, n, relation->nb_columns); - node->type = relation->type; - node->nb_output_dims = relation->nb_output_dims; - node->nb_input_dims = relation->nb_input_dims; - node->nb_local_dims = relation->nb_local_dims; - node->nb_parameters = relation->nb_parameters; - - for (i = 0; i < n; i++) - for (j = 0; j < relation->nb_columns; j++) - osl_int_assign(relation->precision, node->m[i], j, relation->m[i], j); - - if (first) { - first = 0; - clone = node; - previous = node; - } - else { - previous->next = node; - previous = previous->next; - } - - relation = relation->next; - } - - return clone; -} - - -/** - * osl_relation_clone function: - * this function builds and returns a "hard copy" (not a pointer copy) of an - * osl_relation_t data structure (the full union of relation). - * \param[in] relation The pointer to the relation we want to clone. - * \return A pointer to the clone of the union of relations. - */ -osl_relation_p osl_relation_clone(osl_relation_p relation) { - if (relation == NULL) - return NULL; - - return osl_relation_nclone(relation, -1); -} - - -/** - * osl_relation_replace_vector function: - * this function replaces the "row"^th row of a relation "relation" with the - * vector "vector". It directly updates the relation union part pointed - * by "relation" and this part only. - * \param[in,out] relation The relation we want to replace a row. - * \param[in] vector The vector that will replace a row of the relation. - * \param[in] row The row of the relation to be replaced. - */ -void osl_relation_replace_vector(osl_relation_p relation, - osl_vector_p vector, int row) { - int i; - - if ((relation == NULL) || (vector == NULL) || - (relation->precision != vector->precision) || - (relation->nb_columns != vector->size) || - (row >= relation->nb_rows) || (row < 0)) - OSL_error("vector cannot replace relation row"); - - for (i = 0; i < vector->size; i++) - osl_int_assign(relation->precision, relation->m[row], i, vector->v, i); -} - - -/** - * osl_relation_add_vector function: - * this function adds (meaning, +) a vector to the "row"^th row of a - * relation "relation". It directly updates the relation union part pointed - * by "relation" and this part only. - * \param[in,out] relation The relation we want to add a vector to a row. - * \param[in] vector The vector that will replace a row of the relation. - * \param[in] row The row of the relation to add the vector. - */ -void osl_relation_add_vector(osl_relation_p relation, - osl_vector_p vector, int row) { - int i; - - if ((relation == NULL) || (vector == NULL) || - (relation->precision != vector->precision) || - (relation->nb_columns != vector->size) || - (row >= relation->nb_rows) || (row < 0)) - OSL_error("vector cannot be added to relation"); - - if (osl_int_get_si(relation->precision, relation->m[row], 0) == 0) - osl_int_assign(relation->precision, relation->m[row], 0, vector->v, 0); - - for (i = 1; i < vector->size; i++) - osl_int_add(relation->precision, - relation->m[row], i, relation->m[row], i, vector->v, i); -} - - -/** - * osl_relation_sub_vector function: - * this function subtracts the vector "vector" to the "row"^th row of - * a relation "relation. It directly updates the relation union part pointed - * by "relation" and this part only. - * \param[in,out] relation The relation where to subtract a vector to a row. - * \param[in] vector The vector to subtract to a relation row. - * \param[in] row The row of the relation to subtract the vector. - */ -void osl_relation_sub_vector(osl_relation_p relation, - osl_vector_p vector, int row) { - int i; - - if ((relation == NULL) || (vector == NULL) || - (relation->precision != vector->precision) || - (relation->nb_columns != vector->size) || - (row >= relation->nb_rows) || (row < 0)) - OSL_error("vector cannot be subtracted to row"); - - if (osl_int_get_si(relation->precision, relation->m[row], 0) == 0) - osl_int_assign(relation->precision, relation->m[row], 0, vector->v, 0); - - for (i = 1; i < vector->size; i++) - osl_int_sub(relation->precision, - relation->m[row], i, relation->m[row], i, vector->v, i); -} - - -/** - * osl_relation_insert_vector function: - * this function inserts a new row corresponding to the vector "vector" to - * the relation "relation" by inserting it at the "row"^th row. It directly - * updates the relation union part pointed by "relation" and this part only. - * If "vector" (or "relation") is NULL, the relation is left unmodified. - * \param[in,out] relation The relation we want to extend. - * \param[in] vector The vector that will be added relation. - * \param[in] row The row where to insert the vector. - */ -void osl_relation_insert_vector(osl_relation_p relation, - osl_vector_p vector, int row) { - osl_relation_p temp; - - temp = osl_relation_from_vector(vector); - osl_relation_insert_constraints(relation, temp, row); - osl_relation_free(temp); -} - - -/** - * osl_relation_insert_blank_row function: - * this function inserts a new row filled with zeros o an existing relation - * union part (it only affects the first union part). - * \param[in,out] relation The relation to add a row in. - * \param[in] row The row where to insert the blank row. - */ -void osl_relation_insert_blank_row(osl_relation_p relation, int row) { - osl_vector_p vector; - - if (relation != NULL) { - vector = osl_vector_pmalloc(relation->precision, relation->nb_columns); - osl_relation_insert_vector(relation, vector, row); - osl_vector_free(vector); - } -} - - -/** - * osl_relation_insert_blank_column function: - * this function inserts a new column filled with zeros to an existing - * relation union part (it only affects the first union part). WARNING: - * this function does not update the relation attributes. - * \param[in,out] relation The relation to add a column in. - * \param[in] column The column where to insert the blank column. - */ -void osl_relation_insert_blank_column(osl_relation_p relation, int column) { - - int i, j; - osl_relation_p temp; - - if (relation == NULL) - return; - - if ((column < 0) || (column > relation->nb_columns)) - OSL_error("bad column number"); - - // We use a temporary relation just to reuse existing functions. Cleaner. - temp = osl_relation_pmalloc(relation->precision, - relation->nb_rows, relation->nb_columns + 1); - - for (i = 0; i < relation->nb_rows; i++) { - for (j = 0; j < column; j++) - osl_int_assign(relation->precision, temp->m[i], j, relation->m[i], j); - - for (j = column; j < relation->nb_columns; j++) - osl_int_assign(relation->precision, temp->m[i], j+1, relation->m[i], j); - } - - osl_relation_free_inside(relation); - - // Replace the inside of relation. - relation->nb_columns = temp->nb_columns; - relation->m = temp->m; - - // Free the temp "shell". - free(temp); -} - - -/** - * osl_relation_from_vector function: - * this function converts a vector "vector" to a relation with a single row - * and returns a pointer to that relation. - * \param[in] vector The vector to convert to a relation. - * \return A pointer to a relation resulting from the vector conversion. - */ -osl_relation_p osl_relation_from_vector(osl_vector_p vector) { - osl_relation_p relation; - - if (vector == NULL) - return NULL; - - relation = osl_relation_pmalloc(vector->precision, 1, vector->size); - osl_relation_replace_vector(relation, vector, 0); - return relation; -} - - -/** - * osl_relation_replace_constraints function: - * this function replaces some rows of a relation "r1" with the rows of - * the relation "r2". It begins at the "row"^th row of "r1". It directly - * updates the relation union part pointed by "r1" and this part only. - * \param[in,out] r1 The relation we want to change some rows. - * \param[in] r2 The relation containing the new rows. - * \param[in] row The first row of the relation r1 to be replaced. - */ -void osl_relation_replace_constraints(osl_relation_p r1, - osl_relation_p r2, int row) { - int i, j; - - if ((r1 == NULL) || (r2 == NULL) || - (r1->precision != r2->precision) || - (r1->nb_columns != r1->nb_columns) || - ((row + r2->nb_rows) > r1->nb_rows) || (row < 0)) - OSL_error("relation rows could not be replaced"); - - for (i = 0; i < r2->nb_rows; i++) - for (j = 0; j < r2->nb_columns; j++) - osl_int_assign(r1->precision, r1->m[i+row], j, r2->m[i], j); -} - - -/** - * osl_relation_insert_constraints function: - * this function adds new rows corresponding to the relation "r1" to - * the relation "r2" by inserting it at the "row"^th row. It directly - * updates the relation union part pointed by "r1" and this part only. - * If "r2" (or "r1") is NULL, the relation is left unmodified. - * \param[in,out] r1 The relation we want to extend. - * \param[in] r2 The relation to be inserted. - * \param[in] row The row where to insert the relation - */ -void osl_relation_insert_constraints(osl_relation_p r1, - osl_relation_p r2, int row) { - int i, j; - osl_relation_p temp; - - if ((r1 == NULL) || (r2 == NULL)) - return; - - if ((r1->nb_columns != r2->nb_columns) || - (r1->precision != r2->precision) || - (row > r1->nb_rows) || (row < 0)) - OSL_error("constraints cannot be inserted"); - - // We use a temporary relation just to reuse existing functions. Cleaner. - temp = osl_relation_pmalloc(r1->precision, - r1->nb_rows + r2->nb_rows, r1->nb_columns); - - for (i = 0; i < row; i++) - for (j = 0; j < r1->nb_columns; j++) - osl_int_assign(r1->precision, temp->m[i], j, r1->m[i], j); - - osl_relation_replace_constraints(temp, r2, row); - - for (i = row + r2->nb_rows; i < r2->nb_rows + r1->nb_rows; i++) - for (j = 0; j < r1->nb_columns; j++) - osl_int_assign(r1->precision, temp->m[i], j, r1->m[i-r2->nb_rows], j); - - osl_relation_free_inside(r1); - - // Replace the inside of relation. - r1->nb_rows = temp->nb_rows; - r1->m = temp->m; - - // Free the temp "shell". - free(temp); -} - - -/** - * osl_relation_insert_columns function: - * this function inserts new columns to an existing relation union part (it - * only affects the first union part). The columns are copied out from the - * matrix of an input relation which must have the convenient number of rows. - * All columns of the input matrix are copied. WARNING: this function does not - * update the relation attributes of the modified matrix. - * \param[in,out] relation The relation to add columns in. - * \param[in] insert The relation containing the columns to add. - * \param[in] column The column where to insert the new columns. - */ -void osl_relation_insert_columns(osl_relation_p relation, - osl_relation_p insert, int column) { - int i, j; - osl_relation_p temp; - - if ((relation == NULL) || (insert == NULL)) - return; - - if ((relation->precision != insert->precision) || - (relation->nb_rows != insert->nb_rows) || - (column < 0) || (column > relation->nb_columns)) - OSL_error("columns cannot be inserted"); - - // We use a temporary relation just to reuse existing functions. Cleaner. - temp = osl_relation_pmalloc(relation->precision, relation->nb_rows, - relation->nb_columns + insert->nb_columns); - - for (i = 0; i < relation->nb_rows; i++) { - for (j = 0; j < column; j++) - osl_int_assign(relation->precision, temp->m[i], j, relation->m[i], j); - - for (j = column; j < column + insert->nb_columns; j++) - osl_int_assign(relation->precision, - temp->m[i], j, insert->m[i], j - column); - - for (j = column + insert->nb_columns; - j < insert->nb_columns + relation->nb_columns; j++) - osl_int_assign(relation->precision, - temp->m[i], j, relation->m[i], j - insert->nb_columns); - } - - osl_relation_free_inside(relation); - - // Replace the inside of relation. - relation->nb_columns = temp->nb_columns; - relation->m = temp->m; - - // Free the temp "shell". - free(temp); -} - - -/** - * osl_relation_concat_constraints function: - * this function builds a new relation from two relations sent as - * parameters. The new set of constraints is built as the concatenation - * of the rows of the first elements of the two relation unions r1 and r2. - * This means, there is no next field in the result. - * \param[in] r1 The first relation. - * \param[in] r2 The second relation. - * \return A pointer to the relation resulting from the concatenation of - * the first elements of r1 and r2. - */ -osl_relation_p osl_relation_concat_constraints( - osl_relation_p r1, - osl_relation_p r2) { - osl_relation_p new; - - if (r1 == NULL) - return osl_relation_clone(r2); - - if (r2 == NULL) - return osl_relation_clone(r1); - - if (r1->nb_columns != r2->nb_columns) - OSL_error("incompatible sizes for concatenation"); - - if (r1->next || r2->next) - OSL_warning("relation concatenation is done on the first elements " - "of union only"); - - new = osl_relation_pmalloc(r1->precision, - r1->nb_rows + r2->nb_rows, r1->nb_columns); - osl_relation_replace_constraints(new, r1, 0); - osl_relation_replace_constraints(new, r2, r1->nb_rows); - - return new; -} - - -/** - * osl_relation_equal function: - * this function returns true if the two relations provided as parameters - * are the same, false otherwise. - * \param[in] r1 The first relation. - * \param[in] r2 The second relation. - * \return 1 if r1 and r2 are the same (content-wise), 0 otherwise. - */ -int osl_relation_equal(osl_relation_p r1, osl_relation_p r2) { - int i, j; - - while ((r1 != NULL) && (r2 != NULL)) { - if (r1 == r2) - return 1; - - if ((r1->type != r2->type) || - (r1->precision != r2->precision) || - (r1->nb_rows != r2->nb_rows) || - (r1->nb_columns != r2->nb_columns) || - (r1->nb_output_dims != r2->nb_output_dims) || - (r1->nb_input_dims != r2->nb_input_dims) || - (r1->nb_local_dims != r2->nb_local_dims) || - (r1->nb_parameters != r2->nb_parameters)) - return 0; - - for (i = 0; i < r1->nb_rows; ++i) - for (j = 0; j < r1->nb_columns; ++j) - if (osl_int_ne(r1->precision, r1->m[i], j, r2->m[i], j)) - return 0; - - r1 = r1->next; - r2 = r2->next; - } - - if (((r1 == NULL) && (r2 != NULL)) || ((r1 != NULL) && (r2 == NULL))) - return 0; - - return 1; -} - - -/** - * osl_relation_check_attribute internal function: - * This function checks whether an "actual" value is the same as an - * "expected" value or not. If the expected value is set to - * OSL_UNDEFINED, this function sets it to the "actual" value - * and do not report a difference has been detected. - * It returns 0 if a difference has been detected, 1 otherwise. - * \param[in,out] expected Pointer to the expected value (the value is - * modified if it was set to OSL_UNDEFINED). - * \param[in] actual Value we want to check. - * \return 0 if the values are not the same while the expected value was - * not OSL_UNDEFINED, 1 otherwise. - */ -static -int osl_relation_check_attribute(int * expected, int actual) { - if (*expected != OSL_UNDEFINED) { - if ((actual != OSL_UNDEFINED) && - (actual != *expected)) { - OSL_warning("unexpected atribute"); - return 0; - } - } - else { - *expected = actual; - } - - return 1; -} - - -/** - * osl_relation_check_nb_columns internal function: - * This function checks that the number of columns of a relation - * corresponds to some expected properties (setting an expected property to - * OSL_UNDEFINED makes this function unable to detect a problem). - * It returns 0 if the number of columns seems incorrect or 1 if no problem - * has been detected. - * \param[in] relation The relation we want to check the number of columns. - * \param[in] expected_nb_output_dims Expected number of output dimensions. - * \param[in] expected_nb_input_dims Expected number of input dimensions. - * \param[in] expected_nb_parameters Expected number of parameters. - * \return 0 if the number of columns seems incorrect, 1 otherwise. - */ -static -int osl_relation_check_nb_columns(osl_relation_p relation, - int expected_nb_output_dims, - int expected_nb_input_dims, - int expected_nb_parameters) { - int expected_nb_local_dims, expected_nb_columns; - - if ((expected_nb_output_dims != OSL_UNDEFINED) && - (expected_nb_input_dims != OSL_UNDEFINED) && - (expected_nb_parameters != OSL_UNDEFINED)) { - - if (relation->nb_local_dims == OSL_UNDEFINED) - expected_nb_local_dims = 0; - else - expected_nb_local_dims = relation->nb_local_dims; - - expected_nb_columns = expected_nb_output_dims + - expected_nb_input_dims + - expected_nb_local_dims + - expected_nb_parameters + - 2; - - if (expected_nb_columns != relation->nb_columns) { - OSL_warning("unexpected number of columns"); - return 0; - } - } - - return 1; -} - - -/** - * osl_relation_integrity_check function: - * this function checks that a relation is "well formed" according to some - * expected properties (setting an expected value to OSL_UNDEFINED means - * that we do not expect a specific value) and what the relation is supposed - * to represent. It returns 0 if the check failed or 1 if no problem has been - * detected. - * \param[in] relation The relation we want to check. - * \param[in] expected_type Semantics about this relation (domain, access...). - * \param[in] expected_nb_output_dims Expected number of output dimensions. - * \param[in] expected_nb_input_dims Expected number of input dimensions. - * \param[in] expected_nb_parameters Expected number of parameters. - * \return 0 if the integrity check fails, 1 otherwise. - */ -int osl_relation_integrity_check(osl_relation_p relation, - int expected_type, - int expected_nb_output_dims, - int expected_nb_input_dims, - int expected_nb_parameters) { - int i; - - // Check the NULL case. - if (relation == NULL) { - if ((expected_nb_output_dims != OSL_UNDEFINED) || - (expected_nb_input_dims != OSL_UNDEFINED) || - (expected_nb_parameters != OSL_UNDEFINED)) { - OSL_debug("NULL relation with some expected attibutes"); - //return 0; - } - - return 1; - } - - // Check the type. - if (((expected_type != OSL_TYPE_ACCESS) && - (expected_type != relation->type)) || - ((expected_type == OSL_TYPE_ACCESS) && - (!osl_relation_is_access(relation)))) { - OSL_warning("wrong type"); - osl_relation_dump(stderr, relation); - return 0; - } - - // Check that relations have no undefined atributes. - if ((relation->nb_output_dims == OSL_UNDEFINED) || - (relation->nb_input_dims == OSL_UNDEFINED) || - (relation->nb_local_dims == OSL_UNDEFINED) || - (relation->nb_parameters == OSL_UNDEFINED)) { - OSL_warning("all attributes should be defined"); - osl_relation_dump(stderr, relation); - return 0; - } - - // Check that a context has actually 0 output dimensions. - if ((relation->type == OSL_TYPE_CONTEXT) && - (relation->nb_output_dims != 0)) { - OSL_warning("context without 0 as number of output dimensions"); - osl_relation_dump(stderr, relation); - return 0; - } - - // Check that a domain or a context has actually 0 input dimensions. - if (((relation->type == OSL_TYPE_DOMAIN) || - (relation->type == OSL_TYPE_CONTEXT)) && - (relation->nb_input_dims != 0)) { - OSL_warning("domain or context without 0 input dimensions"); - osl_relation_dump(stderr, relation); - return 0; - } - - // Check properties according to expected values (and if expected values - // are undefined, define them with the first relation part properties). - if (!osl_relation_check_attribute(&expected_nb_output_dims, - relation->nb_output_dims) || - !osl_relation_check_attribute(&expected_nb_input_dims, - relation->nb_input_dims) || - !osl_relation_check_attribute(&expected_nb_parameters, - relation->nb_parameters)) { - osl_relation_dump(stderr, relation); - return 0; - } - - while (relation != NULL) { - - // Attributes (except the number of local dimensions) should be the same - // in all parts of the union. - if ((expected_nb_output_dims != relation->nb_output_dims) || - (expected_nb_input_dims != relation->nb_input_dims) || - (expected_nb_parameters != relation->nb_parameters)) { - OSL_warning("inconsistent attributes"); - osl_relation_dump(stderr, relation); - return 0; - } - - // Check whether the number of columns is OK or not. - if (!osl_relation_check_nb_columns(relation, - expected_nb_output_dims, - expected_nb_input_dims, - expected_nb_parameters)) { - osl_relation_dump(stderr, relation); - return 0; - } - - // Check the first column. The first column of a relation part should be - // made of 0 or 1 only. - if ((relation->nb_rows > 0) && (relation->nb_columns > 0)) { - for (i = 0; i < relation->nb_rows; i++) { - if (!osl_int_zero(relation->precision, relation->m[i], 0) && - !osl_int_one(relation->precision, relation->m[i], 0)) { - OSL_warning("first column of a relation is not " - "strictly made of 0 or 1"); - osl_relation_dump(stderr, relation); - return 0; - } - } - } - - // Array accesses must provide the array identifier. - if ((osl_relation_is_access(relation)) && - (osl_relation_get_array_id(relation) == OSL_UNDEFINED)) { - osl_relation_dump(stderr, relation); - return 0; - } - - relation = relation->next; - } - - return 1; -} - - -/** - * osl_relation_union function: - * this function builds a new relation from two relations provided - * as parameters. The new relation is built as an union of the - * two relations: the list of constraint sets are linked together. - * \param[in] r1 The first relation. - * \param[in] r2 The second relation. - * \return A new relation corresponding to the union of r1 and r2. - */ -osl_relation_p osl_relation_union(osl_relation_p r1, - osl_relation_p r2) { - osl_relation_p copy1, copy2, tmp; - - if ((r1 == NULL) && (r2 == NULL)) - return NULL; - - copy1 = osl_relation_clone(r1); - copy2 = osl_relation_clone(r2); - - if ((r1 != NULL) && (r2 == NULL)) - return copy1; - - if ((r1 == NULL) && (r2 != NULL)) - return copy2; - - tmp = copy1; - while (tmp->next != NULL) - tmp = tmp->next; - - tmp->next = copy2; - return copy1; -} - - -/** - * osl_relation_set_attributes function: - * this functions sets the attributes of a relation provided as a - * parameter. It updates the relation directly. - * \param[in,out] relation The relation to set the attributes. - * \param[in] nb_output_dims Number of output dimensions. - * \param[in] nb_input_dims Number of input dimensions. - * \param[in] nb_local_dims Number of local dimensions. - * \param[in] nb_parameters Number of parameters. - */ -void osl_relation_set_attributes(osl_relation_p relation, - int nb_output_dims, int nb_input_dims, - int nb_local_dims, int nb_parameters) { - if (relation != NULL) { - relation->nb_output_dims = nb_output_dims; - relation->nb_input_dims = nb_input_dims; - relation->nb_local_dims = nb_local_dims; - relation->nb_parameters = nb_parameters; - } -} - - -/** - * osl_relation_set_type function: - * this function sets the type of each relation union part in the relation - * to the one provided as parameter. - * \param relation The relation to set the type. - * \param type The type. - */ -void osl_relation_set_type(osl_relation_p relation, int type) { - - while (relation != NULL) { - relation->type = type; - relation = relation->next; - } -} - - -/** - * osl_relation_get_array_id function: - * this function returns the array identifier in a relation with access type - * It returns OSL_UNDEFINED if it is not able to find it (in particular - * if there are irregularities in the relation). - * \param[in] relation The relation where to find an array identifier. - * \return The array identifier in the relation or OSL_UNDEFINED. - */ -int osl_relation_get_array_id(osl_relation_p relation) { - int i; - int first = 1; - int array_id = OSL_UNDEFINED; - int reference_array_id = OSL_UNDEFINED; - int nb_array_id; - int row_id = 0; - int precision; - - if (relation == NULL) - return OSL_UNDEFINED; - - if (!osl_relation_is_access(relation)) { - OSL_warning("asked for an array id of non-array relation"); - return OSL_UNDEFINED; - } - - while (relation != NULL) { - precision = relation->precision; - - // There should be room to store the array identifier. - if ((relation->nb_rows < 1) || - (relation->nb_columns < 3)) { - OSL_warning("no array identifier in an access function"); - return OSL_UNDEFINED; - } - - // Array identifiers are m[i][#columns -1] / m[i][1], with i the only row - // where m[i][1] is not 0. - // - check there is exactly one row such that m[i][1] is not 0, - // - check the whole ith row if full of 0 except m[i][1] and the id, - // - check that (m[i][#columns -1] % m[i][1]) == 0, - // - check that (-m[i][#columns -1] / m[i][1]) > 0. - nb_array_id = 0; - for (i = 0; i < relation->nb_rows; i++) { - if (!osl_int_zero(precision, relation->m[i], 1)) { - nb_array_id ++; - row_id = i; - } - } - if (nb_array_id == 0) { - OSL_warning("no array identifier in an access function"); - return OSL_UNDEFINED; - } - if (nb_array_id > 1) { - OSL_warning("several array identifiers in one access function"); - return OSL_UNDEFINED; - } - for (i = 0; i < relation->nb_columns - 1; i++) { - if ((i != 1) && !osl_int_zero(precision, relation->m[row_id], i)) { - OSL_warning("non integer array identifier"); - return OSL_UNDEFINED; - } - } - if (!osl_int_divisible(precision, - relation->m[row_id], relation->nb_columns - 1, - relation->m[row_id], 1)) { - OSL_warning("rational array identifier"); - return OSL_UNDEFINED; - } - array_id = -osl_int_get_si(precision, - relation->m[row_id], - relation->nb_columns - 1); - array_id /= osl_int_get_si(precision, relation->m[row_id], 1); - if (array_id <= 0) { - OSL_warning("negative or 0 identifier in access function"); - return OSL_UNDEFINED; - } - - // Unions of accesses are allowed, but they should refer at the same array. - if (first) { - reference_array_id = array_id; - first = 0; - } - else { - if (reference_array_id != array_id) { - OSL_warning("inconsistency of array identifiers in an " - "union of access relations"); - return OSL_UNDEFINED; - } - } - - relation = relation->next; - } - - return array_id; -} - - -/** - * osl_relation_is_access function: - * this function returns 1 if the relation corresponds to an access relation, - * whatever its precise type (read, write etc.), 0 otherwise. - * \param relation The relation to check wheter it is an access relation or not. - * \return 1 if the relation is an access relation, 0 otherwise. - */ -int osl_relation_is_access(osl_relation_p relation) { - - if (relation == NULL) - return 0; - - if ((relation->type == OSL_TYPE_ACCESS) || - (relation->type == OSL_TYPE_READ) || - (relation->type == OSL_TYPE_WRITE) || - (relation->type == OSL_TYPE_MAY_WRITE)) - return 1; - - return 0; -} - - -/** - * osl_relation_get_attributes function: - * this function returns, through its parameters, the maximum values of the - * relation attributes (nb_iterators, nb_parameters etc), depending on its - * type. HOWEVER, it updates the parameter value iff the attribute is greater - * than the input parameter value. Hence it may be used to get the - * attributes as well as to find the maximum attributes for several relations. - * The array identifier 0 is used when there is no array identifier (AND this - * is OK), OSL_UNDEFINED is used to report it is impossible to provide the - * property while it should. This function is not intended for checking, the - * input relation should be correct. - * \param[in] relation The relation to extract attribute values. - * \param[in,out] nb_parameters Number of parameter attribute. - * \param[in,out] nb_iterators Number of iterators attribute. - * \param[in,out] nb_scattdims Number of scattering dimensions attribute. - * \param[in,out] nb_localdims Number of local dimensions attribute. - * \param[in,out] array_id Maximum array identifier attribute. - */ -void osl_relation_get_attributes(osl_relation_p relation, - int * nb_parameters, - int * nb_iterators, - int * nb_scattdims, - int * nb_localdims, - int * array_id) { - int type; - int local_nb_parameters = OSL_UNDEFINED; - int local_nb_iterators = OSL_UNDEFINED; - int local_nb_scattdims = OSL_UNDEFINED; - int local_nb_localdims = OSL_UNDEFINED; - int local_array_id = OSL_UNDEFINED; - - while (relation != NULL) { - if (osl_relation_is_access(relation)) - type = OSL_TYPE_ACCESS; - else - type = relation->type; - - // There is some redundancy but I believe the code is cleaner this way. - switch (type) { - case OSL_TYPE_CONTEXT: - local_nb_parameters = relation->nb_parameters; - local_nb_iterators = 0; - local_nb_scattdims = 0; - local_nb_localdims = relation->nb_local_dims; - local_array_id = 0; - break; - - case OSL_TYPE_DOMAIN: - local_nb_parameters = relation->nb_parameters; - local_nb_iterators = relation->nb_output_dims; - local_nb_scattdims = 0; - local_nb_localdims = relation->nb_local_dims; - local_array_id = 0; - break; - - case OSL_TYPE_SCATTERING: - local_nb_parameters = relation->nb_parameters; - local_nb_iterators = relation->nb_input_dims; - local_nb_scattdims = relation->nb_output_dims; - local_nb_localdims = relation->nb_local_dims; - local_array_id = 0; - break; - - case OSL_TYPE_ACCESS: - local_nb_parameters = relation->nb_parameters; - local_nb_iterators = relation->nb_input_dims; - local_nb_scattdims = 0; - local_nb_localdims = relation->nb_local_dims; - local_array_id = osl_relation_get_array_id(relation); - break; - } - - // Update. - *nb_parameters = OSL_max(*nb_parameters, local_nb_parameters); - *nb_iterators = OSL_max(*nb_iterators, local_nb_iterators); - *nb_scattdims = OSL_max(*nb_scattdims, local_nb_scattdims); - *nb_localdims = OSL_max(*nb_localdims, local_nb_localdims); - *array_id = OSL_max(*array_id, local_array_id); - relation = relation->next; - } -} - - -/** - * osl_relation_extend_output function: - * this function extends the number of output dimensions of a given relation. It - * returns a copy of the input relation with a number of output dimensions - * extended to "dim" for all its union components. The new output dimensions - * are simply set equal to 0. The extended number of dimensions must be higher - * than or equal to the original one (an error will be raised otherwise). - * \param[in] relation The input relation to extend. - * \param[in] dim The number of output dimension to reach. - * \return A new relation: "relation" extended to "dim" output dims. - */ -osl_relation_p osl_relation_extend_output(osl_relation_p relation, int dim) { - int i, j; - int first = 1; - int offset; - osl_relation_p extended = NULL, node, previous = NULL; - - while (relation != NULL) { - if (relation->nb_output_dims > dim) - OSL_error("Number of output dims is greater than required extension"); - offset = dim - relation->nb_output_dims; - - node = osl_relation_pmalloc(relation->precision, - relation->nb_rows + offset, - relation->nb_columns + offset); - - node->type = relation->type; - node->nb_output_dims = OSL_max(relation->nb_output_dims, dim); - node->nb_input_dims = relation->nb_input_dims; - node->nb_local_dims = relation->nb_local_dims; - node->nb_parameters = relation->nb_parameters; - - // Copy of the original relation with some 0 columns for the new dimensions - // Note that we use the fact that the matrix is initialized with zeros. - for (i = 0; i < relation->nb_rows; i++) { - for (j = 0; j <= relation->nb_output_dims; j++) - osl_int_assign(relation->precision, node->m[i], j, relation->m[i], j); - - for (j = relation->nb_output_dims + offset + 1; - j < relation->nb_columns + offset; j++) - osl_int_assign(relation->precision, - node->m[i], j, relation->m[i], j - offset); - } - - // New rows dedicated to the new dimensions - for (i = relation->nb_rows; i < relation->nb_rows + offset; i++) { - for (j = 0; j < relation->nb_columns + offset; j++) { - if ((i - relation->nb_rows) == (j - relation->nb_output_dims - 1)) - osl_int_set_si(relation->precision, node->m[i], j, -1); - } - } - - if (first) { - first = 0; - extended = node; - previous = node; - } - else { - previous->next = node; - previous = previous->next; - } - - relation = relation->next; - } - - return extended; -} - diff --git a/cloog-0.17.0/osl/source/relation_list.c b/cloog-0.17.0/osl/source/relation_list.c deleted file mode 100644 index 1fef89f..0000000 --- a/cloog-0.17.0/osl/source/relation_list.c +++ /dev/null @@ -1,628 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** relation_list.c ** - **-----------------------------------------------------------------** - ** First version: 08/10/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#include -#include -#include -#include - -#include -#include -#include -#include - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ - - -/** - * osl_relation_list_idump function: - * Displays a osl_relation_list_t structure (a list of relations) into a - * file (file, possibly stdout). See osl_relation_print_structure for - * more details. - * \param file File where informations are printed. - * \param l The list of relations whose information has to be printed. - * \param level Number of spaces before printing, for each line. - */ -void osl_relation_list_idump(FILE * file, osl_relation_list_p l, int level) { - int j, first = 1; - - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file,"|\t"); - - if (l != NULL) - fprintf(file, "+-- osl_relation_list_t\n"); - else - fprintf(file, "+-- NULL relation list\n"); - - while (l != NULL) { - if (!first) { - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - fprintf(file, "| osl_relation_list_t\n"); - } - else - first = 0; - - // A blank line. - for (j = 0; j <= level+1; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); - - // Print a relation. - osl_relation_idump(file, l->elt, level+1); - - l = l->next; - - // Next line. - if (l != NULL) { - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "V\n"); - } - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_relation_dump function: - * This function prints the content of a osl_relation_list_t into - * a file (file, possibly stdout). - * \param file File where informations are printed. - * \param list The relation whose information has to be printed. - */ -void osl_relation_list_dump(FILE * file, osl_relation_list_p list) { - osl_relation_list_idump(file, list, 0); -} - - -/** - * osl_relation_list_pprint_elts function: - * This function pretty-prints the elements of a osl_relation_list_t structure - * into a file (file, possibly stdout) in the OpenScop format. I.e., it prints - * only the elements and not the number of elements. It prints an element of the - * list only if it is not NULL. - * \param file File where informations are printed. - * \param list The relation list whose information has to be printed. - * \param[in] names Array of constraint columns names. - */ -void osl_relation_list_pprint_elts(FILE * file, osl_relation_list_p list, - osl_names_p names) { - int i; - osl_relation_list_p head = list; - - // Count the number of elements in the list with non-NULL content. - i = osl_relation_list_count(list); - - // Print each element of the relation list. - if (i > 0) { - i = 0; - while (head) { - if (head->elt != NULL) { - osl_relation_pprint(file, head->elt, names); - if (head->next != NULL) - fprintf(file, "\n"); - i++; - } - head = head->next; - } - } - else { - fprintf(file, "# NULL relation list\n"); - } -} - - -/** - * osl_relation_list_pprint function: - * This function pretty-prints the content of a osl_relation_list_t structure - * into a file (file, possibly stdout) in the OpenScop format. It prints - * an element of the list only if it is not NULL. - * \param[in] file File where informations are printed. - * \param[in] list The relation list whose information has to be printed. - * \param[in] names Array of constraint columns names. - */ -void osl_relation_list_pprint(FILE * file, osl_relation_list_p list, - osl_names_p names) { - int i; - - // Count the number of elements in the list with non-NULL content. - i = osl_relation_list_count(list); - - // Print it. - if (i > 1) - fprintf(file,"# List of %d elements\n%d\n", i, i); - else - fprintf(file,"# List of %d element \n%d\n", i, i); - - // Print each element of the relation list. - osl_relation_list_pprint_elts(file, list, names); -} - - -/** - * osl_relation_list_print function: - * This function prints the content of a osl_relation_list_t structure - * into a file (file, possibly stdout) in the OpenScop format. It prints - * an element of the list only if it is not NULL. - * \param file File where informations are printed. - * \param list The relation list whose information has to be printed. - */ -void osl_relation_list_print(FILE * file, osl_relation_list_p list) { - - osl_relation_list_pprint(file, list, NULL); -} - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - - -/** - * osl_relation_list_pread function ("precision read"): - * this function reads a list of relations into a file (foo, - * posibly stdin) and returns a pointer this relation list. - * \param[in] file The input stream. - * \param[in] precision The precision of the relation elements. - * \return A pointer to the relation list structure that has been read. - */ -osl_relation_list_p osl_relation_list_pread(FILE * file, int precision) { - int i; - osl_relation_list_p list; - osl_relation_list_p res; - int nb_mat; - - // Read the number of relations to read. - nb_mat = osl_util_read_int(file, NULL); - - if (nb_mat < 0) - OSL_error("negative number of relations"); - - // Allocate the header of the list and start reading each element. - res = list = osl_relation_list_malloc(); - for (i = 0; i < nb_mat; ++i) { - list->elt = osl_relation_pread(file, precision); - if (i < nb_mat - 1) - list->next = osl_relation_list_malloc(); - list = list->next; - } - - return res; -} - - -/** - * osl_relation_list_read function: - * this function is equivalent to osl_relation_list_pread() except that - * the precision corresponds to the precision environment variable or - * to the highest available precision if it is not defined. - * \see{osl_relation_list_pread} - */ -osl_relation_list_p osl_relation_list_read(FILE * foo) { - int precision = osl_util_get_precision(); - return osl_relation_list_pread(foo, precision); -} - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ - - -/** - * osl_relation_list_malloc function: - * This function allocates the memory space for a osl_relation_list_t - * structure and sets its fields with default values. Then it returns - * a pointer to the allocated space. - * \return A pointer to an empty relation list with fields set to default - * values. - */ -osl_relation_list_p osl_relation_list_malloc() { - osl_relation_list_p res; - - OSL_malloc(res, osl_relation_list_p, sizeof(osl_relation_list_t)); - res->elt = NULL; - res->next = NULL; - - return res; -} - - - -/** - * osl_relation_list_free function: - * This function frees the allocated memory for a osl_relation_list_t - * structure, and all the relations stored in the list. - * \param list The pointer to the relation list we want to free. - */ -void osl_relation_list_free(osl_relation_list_p list) { - osl_relation_list_p tmp; - - if (list == NULL) - return; - - while (list != NULL) { - if (list->elt != NULL) - osl_relation_free(list->elt); - tmp = list->next; - free(list); - list = tmp; - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_relation_list_node function: - * This function builds an osl_relation_list_t node and sets its - * relation element as a copy of the one provided as parameter. - * If the relation provided as an argument is NULL, NULL is returned. - * \param r The pointer to the relation to copy/paste in a list node. - * \return A pointer to a relation list node containing a copy of "relation". - */ -osl_relation_list_p osl_relation_list_node(osl_relation_p r) { - osl_relation_list_p new = NULL; - - if (r != NULL) { - new = osl_relation_list_malloc(); - new->elt = osl_relation_clone(r); - } - return new; -} - - -/** - * osl_relation_list_clone function: - * This functions builds and returns a quasi-"hard copy" (not a pointer copy) - * of a osl_relation_list_t data structure provided as parameter. - * \param list The pointer to the relation list we want to copy. - * \return A pointer to the full copy of the relation list in parameter. - */ -osl_relation_list_p osl_relation_list_clone(osl_relation_list_p list) { - - osl_relation_list_p clone = NULL, node, previous = NULL; - int first = 1; - - while (list != NULL) { - node = osl_relation_list_malloc(); - node->elt = osl_relation_clone(list->elt); - - if (first) { - first = 0; - clone = node; - previous = node; - } - else { - previous->next = node; - previous = previous->next; - } - - list = list->next; - } - - return clone; -} - - -/** - * osl_relation_list_concat function: - * this function builds a new relation list as the concatenation of the - * two lists sent as parameters. - * \param l1 The first relation list. - * \param l2 The second relation list. - * \return A pointer to the relation list resulting from the concatenation of - * l1 and l2. - */ -osl_relation_list_p osl_relation_list_concat(osl_relation_list_p l1, - osl_relation_list_p l2) { - osl_relation_list_p new, end; - - if (l1 == NULL) - return osl_relation_list_clone(l2); - - if (l2 == NULL) - return osl_relation_list_clone(l1); - - new = osl_relation_list_clone(l1); - end = new; - while (end->next != NULL) - end = end->next; - end->next = osl_relation_list_clone(l2); - - return new; -} - - -/** - * osl_relation_list_concat_inplace function: - * this function concatenates a relation list to another. No new list is - * created: this functions links the two input lists. If the first relation - * list is NULL, it is set to the second relation list. - * two lists sent as parameters. - * \param[in,out] l1 Pointer to the first relation list. - * \param[in] l2 The second relation list. - */ -void osl_relation_list_concat_inplace(osl_relation_list_p *l1, - osl_relation_list_p l2) { - osl_relation_list_p temp; - - if (*l1 == NULL) { - *l1 = l2; - return; - } - - temp = *l1; - while (temp->next != NULL) - temp = temp->next; - temp->next = l2; -} - - -/** - * osl_relation_list_equal function: - * This function returns true if the two relation lists are the same, false - * otherwise.. - * \param l1 The first relation list. - * \param l2 The second relation list. - * \return 1 if l1 and l2 are the same (content-wise), 0 otherwise. - */ -int osl_relation_list_equal(osl_relation_list_p l1, osl_relation_list_p l2) { - while ((l1 != NULL) && (l2 != NULL)) { - if (l1 == l2) - return 1; - - if (!osl_relation_equal(l1->elt, l2->elt)) - return 0; - - l1 = l1->next; - l2 = l2->next; - } - - if (((l1 == NULL) && (l2 != NULL)) || ((l1 != NULL) && (l2 == NULL))) - return 0; - - return 1; -} - - -/** - * osl_relation_integrity_check function: - * This function checks that a list of relation is "well formed" according to - * some expected properties (setting an expected value to OSL_UNDEFINED - * means that we do not expect a specific value) and what the relations are - * supposed to represent (all relations of a list are supposed to have the - * same semantics). It returns 0 if the check failed or 1 if no problem has - * been detected. - * \param list The relation list we want to check. - * \param type Semantics about this relation (domain, access...). - * \param expected_nb_output_dims Expected number of output dimensions. - * \param expected_nb_input_dims Expected number of input dimensions. - * \param expected_nb_parameters Expected number of parameters. - * \return 0 if the integrity check fails, 1 otherwise. - */ -int osl_relation_list_integrity_check(osl_relation_list_p list, - int type, - int expected_nb_output_dims, - int expected_nb_input_dims, - int expected_nb_parameters) { - while (list != NULL) { - // Check the access function. - if (!osl_relation_integrity_check(list->elt, - type, - expected_nb_output_dims, - expected_nb_input_dims, - expected_nb_parameters)) { - return 0; - } - - list = list->next; - } - - return 1; -} - - -/** - * osl_relation_list_set_type function: - * this function sets the type of each relation in the relation list to the - * one provided as parameter. - * \param list The list of relations to set the type. - * \param type The type. - */ -void osl_relation_list_set_type(osl_relation_list_p list, int type) { - - while (list != NULL) { - if (list->elt != NULL) { - list->elt->type = type; - } - list = list->next; - } -} - - -/** - * osl_relation_list_filter function: - * this function returns a copy of the input relation list, restricted to - * the relations of a given type. The special type OSL_TYPE_ACCESS - * filters any kind of access (read, write, rdwr etc.). - * \param list The relation list to copy/filter. - * \param type The filtering type. - * \return A copy of the input list with only relation of the given type. - */ -osl_relation_list_p osl_relation_list_filter(osl_relation_list_p list, - int type) { - - osl_relation_list_p copy = osl_relation_list_clone(list); - osl_relation_list_p filtered = NULL; - osl_relation_list_p previous = NULL; - osl_relation_list_p trash; - int first = 1; - - while (copy != NULL) { - if ((copy->elt != NULL) && - (((type == OSL_TYPE_ACCESS) && - (osl_relation_is_access(copy->elt))) || - ((type != OSL_TYPE_ACCESS) && - (type == copy->elt->type)))) { - if (first) { - filtered = copy; - first = 0; - } - - previous = copy; - copy = copy->next; - } - else { - trash = copy; - if (!first) - previous->next = copy->next; - copy = copy->next; - trash->next = NULL; - osl_relation_list_free(trash); - } - } - - return filtered; -} - - -/** - * osl_relation_list_count function: - * this function returns the number of elements with non-NULL content - * in a relation list. - * \param list The relation list to count the number of elements. - * \return The number of nodes with non-NULL content in the relation list. - */ -int osl_relation_list_count(osl_relation_list_p list) { - int i = 0; - - while (list != NULL) { - if (list->elt != NULL) - i++; - list = list->next; - } - - return i; -} - - -/** - * osl_relation_list_get_attributes function: - * this function returns, through its parameters, the maximum values of the - * relation attributes (nb_iterators, nb_parameters etc) in the relation list, - * depending on its type. HOWEVER, it updates the parameter value iff the - * attribute is greater than the input parameter value. Hence it may be used - * to get the attributes as well as to find the maximum attributes for several - * relation lists. The array identifier 0 is used when there is no array - * identifier (AND this is OK), OSL_UNDEFINED is used to report it is - * impossible to provide the property while it should. This function is not - * intended for checking, the input relation list should be correct. - * \param[in] list The relation list to extract attribute values. - * \param[in,out] nb_parameters Number of parameter attribute. - * \param[in,out] nb_iterators Number of iterators attribute. - * \param[in,out] nb_scattdims Number of scattering dimensions attribute. - * \param[in,out] nb_localdims Number of local dimensions attribute. - * \param[in,out] array_id Maximum array identifier attribute. - */ -void osl_relation_list_get_attributes(osl_relation_list_p list, - int * nb_parameters, - int * nb_iterators, - int * nb_scattdims, - int * nb_localdims, - int * array_id) { - int local_nb_parameters = OSL_UNDEFINED; - int local_nb_iterators = OSL_UNDEFINED; - int local_nb_scattdims = OSL_UNDEFINED; - int local_nb_localdims = OSL_UNDEFINED; - int local_array_id = OSL_UNDEFINED; - - while (list != NULL) { - osl_relation_get_attributes(list->elt, - &local_nb_parameters, - &local_nb_iterators, - &local_nb_scattdims, - &local_nb_localdims, - &local_array_id); - // Update. - *nb_parameters = OSL_max(*nb_parameters, local_nb_parameters); - *nb_iterators = OSL_max(*nb_iterators, local_nb_iterators); - *nb_scattdims = OSL_max(*nb_scattdims, local_nb_scattdims); - *nb_localdims = OSL_max(*nb_localdims, local_nb_localdims); - *array_id = OSL_max(*array_id, local_array_id); - list = list->next; - } -} - diff --git a/cloog-0.17.0/osl/source/scop.c b/cloog-0.17.0/osl/source/scop.c deleted file mode 100644 index ae386c2..0000000 --- a/cloog-0.17.0/osl/source/scop.c +++ /dev/null @@ -1,757 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** scop.c ** - **-----------------------------------------------------------------** - ** First version: 30/04/2008 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - -# include -# include -# include -# include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -/*+*************************************************************************** - * Structure display functions * - *****************************************************************************/ - - -/** - * osl_scop_idump function: - * this function displays an osl_scop_t structure (*scop) into a - * file (file, possibly stdout) in a way that trends to be understandable. It - * includes an indentation level (level) in order to work with others - * idump functions. - * \param file The file where the information has to be printed. - * \param scop The scop structure whose information has to be printed. - * \param level Number of spaces before printing, for each line. - */ -void osl_scop_idump(FILE * file, osl_scop_p scop, int level) { - int j, first = 1; - - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - - if (scop != NULL) - fprintf(file, "+-- osl_scop_t\n"); - else - fprintf(file, "+-- NULL scop\n"); - - while (scop != NULL) { - if (!first) { - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - fprintf(file, "| osl_scop_t\n"); - } - else - first = 0; - - // A blank line. - for (j = 0; j <= level+1; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); - - // Print the version. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - fprintf(file, "|\tVersion: %d\n", scop->version); - - // A blank line. - for (j = 0; j <= level+1; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); - - // Print the language. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - fprintf(file, "|\tLanguage: %s\n", scop->language); - - // A blank line. - for (j = 0; j <= level+1; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); - - // Print the context of the scop. - osl_relation_idump(file, scop->context, level+1); - - // Print the parameters. - osl_generic_idump(file, scop->parameters, level+1); - - // Print the statements. - osl_statement_idump(file, scop->statement, level+1); - - // Print the registered extension interfaces. - osl_interface_idump(file, scop->registry, level+1); - - // Print the extensions. - osl_generic_idump(file, scop->extension, level+1); - - scop = scop->next; - - // Next line. - if (scop != NULL) { - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "V\n"); - } - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_scop_dump function: - * this function prints the content of an osl_scop_t structure (*scop) - * into a file (file, possibly stdout). - * \param file The file where the information has to be printed. - * \param scop The scop structure whose information has to be printed. - */ -void osl_scop_dump(FILE * file, osl_scop_p scop) { - osl_scop_idump(file, scop, 0); -} - - -/** - * osl_scop_names function: - * this function generates as set of names for all the dimensions - * involved in a given scop. - * \param[in] scop The scop (list) we have to generate names for. - * \return A set of generated names for the input scop dimensions. - */ -static -osl_names_p osl_scop_names(osl_scop_p scop) { - int nb_parameters = OSL_UNDEFINED; - int nb_iterators = OSL_UNDEFINED; - int nb_scattdims = OSL_UNDEFINED; - int nb_localdims = OSL_UNDEFINED; - int array_id = OSL_UNDEFINED; - - osl_scop_get_attributes(scop, &nb_parameters, &nb_iterators, - &nb_scattdims, &nb_localdims, &array_id); - - return osl_names_generate("P", nb_parameters, - "i", nb_iterators, - "c", nb_scattdims, - "l", nb_localdims, - "A", array_id); -} - - -/** - * osl_scop_print function: - * this function prints the content of an osl_scop_t structure (*scop) - * into a file (file, possibly stdout) in the OpenScop textual format. - * \param file The file where the information has to be printed. - * \param scop The scop structure whose information has to be printed. - */ -void osl_scop_print(FILE * file, osl_scop_p scop) { - int parameters_backedup = 0; - osl_strings_p parameters_backup = NULL; - osl_names_p names; - - if (scop == NULL) { - fprintf(file, "# NULL scop\n"); - return; - } - else { - fprintf(file, "# [File generated by the OpenScop Library %s]\n", - OSL_RELEASE); - } - - if (osl_scop_integrity_check(scop) == 0) - OSL_warning("OpenScop integrity check failed. " - "Something may go wrong."); - - // Generate the names for the various dimensions. - names = osl_scop_names(scop); - - while (scop != NULL) { - // If possible, replace parameter names with scop iterator names. - if (osl_generic_has_URI(scop->parameters, OSL_URI_STRINGS)) { - parameters_backedup = 1; - parameters_backup = names->parameters; - names->parameters = scop->parameters->data; - } - - fprintf(file, "\n"OSL_TAG_START_SCOP"\n\n"); - fprintf(file, "# =============================================== " - "Global\n"); - fprintf(file, "# Language\n"); - fprintf(file, "%s\n\n", scop->language); - - fprintf(file, "# Context\n"); - osl_relation_pprint(file, scop->context, names); - fprintf(file, "\n"); - - osl_util_print_provided(file, - osl_generic_has_URI(scop->parameters, OSL_URI_STRINGS), - "Parameters are"); - osl_generic_print(file, scop->parameters); - - fprintf(file, "\n# Number of statements\n"); - fprintf(file, "%d\n\n",osl_statement_number(scop->statement)); - - osl_statement_pprint(file, scop->statement, names); - - if (scop->extension) { - fprintf(file, "# =============================================== " - "Extensions\n"); - osl_generic_print(file, scop->extension); - } - fprintf(file, "\n"OSL_TAG_END_SCOP"\n\n"); - - // If necessary, switch back parameter names. - if (parameters_backedup) { - parameters_backedup = 0; - names->parameters = parameters_backup; - } - - scop = scop->next; - } - - osl_names_free(names); -} - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - - -/** - * osl_scop_pread function ("precision read"): - * this function reads a list of scop structures from a file (possibly stdin) - * complying to the OpenScop textual format and returns a pointer to this - * scop list. If some relation properties (number of input/output/local - * dimensions and number of parameters) are undefined, it will define them - * according to the available information. - * \param[in] file The file where the scop has to be read. - * \param[in] registry The list of known interfaces (others are ignored). - * \param[in] precision The precision of the relation elements. - * \return A pointer to the scop structure that has been read. - */ -osl_scop_p osl_scop_pread(FILE * file, osl_interface_p registry, - int precision) { - osl_scop_p list = NULL, current = NULL, scop; - osl_statement_p stmt = NULL; - osl_statement_p prev = NULL; - osl_strings_p language; - int nb_statements; - char * tmp; - int first = 1; - int i; - - if (file == NULL) - return NULL; - - while(1) { - // - // I. START TAG - // - tmp = osl_util_read_uptotag(file, OSL_TAG_START_SCOP); - if (tmp == NULL) { - OSL_debug("no more scop in the file"); - break; - } - else { - free(tmp); - } - - scop = osl_scop_malloc(); - scop->registry = osl_interface_clone(registry); - - // - // II. CONTEXT PART - // - - // Read the language. - language = osl_strings_read(file); - if (osl_strings_size(language) == 0) - OSL_error("no language (backend) specified"); - - if (osl_strings_size(language) > 1) - OSL_warning("uninterpreted information (after language)"); - - if (language != NULL) { - scop->language = strdup(language->string[0]); - osl_strings_free(language); - } - - // Read the context domain. - scop->context = osl_relation_pread(file, precision); - - // Read the parameters. - if (osl_util_read_int(file, NULL) > 0) - scop->parameters = osl_generic_read_one(file, scop->registry); - - // - // III. STATEMENT PART - // - - // Read the number of statements. - nb_statements = osl_util_read_int(file, NULL); - - for (i = 0; i < nb_statements; i++) { - // Read each statement. - stmt = osl_statement_pread(file, scop->registry, precision); - if (scop->statement == NULL) - scop->statement = stmt; - else - prev->next = stmt; - prev = stmt; - } - - // - // IV. EXTENSION PART (TO THE END TAG) - // - - // Read up the end tag (if any), and store extensions. - scop->extension = osl_generic_read(file, scop->registry); - - // Add the new scop to the list. - if (first) { - list = scop; - first = 0; - } - else { - current->next = scop; - } - current = scop; - } - - if (!osl_scop_integrity_check(list)) - OSL_warning("scop integrity check failed"); - - return list; -} - - -/** - * osl_scop_read function: - * this function is equivalent to osl_scop_pread() except that - * (1) the precision corresponds to the precision environment variable or - * to the highest available precision if it is not defined, and - * (2) the list of known interface is set to the default one. - * \see{osl_scop_pread} - */ -osl_scop_p osl_scop_read(FILE * foo) { - int precision = osl_util_get_precision(); - osl_interface_p registry = osl_interface_get_default_registry(); - osl_scop_p scop = osl_scop_pread(foo, registry, precision); - - osl_interface_free(registry); - return scop; -} - - -/*+*************************************************************************** - * Memory allocation/deallocation functions * - *****************************************************************************/ - - -/** - * osl_scop_malloc function: - * this function allocates the memory space for a osl_scop_t structure and - * sets its fields with default values. Then it returns a pointer to the - * allocated space. - * \return A pointer to an empty scop with fields set to default values. - */ -osl_scop_p osl_scop_malloc() { - osl_scop_p scop; - - OSL_malloc(scop, osl_scop_p, sizeof(osl_scop_t)); - scop->version = 1; - scop->language = NULL; - scop->context = NULL; - scop->parameters = NULL; - scop->statement = NULL; - scop->registry = NULL; - scop->extension = NULL; - scop->usr = NULL; - scop->next = NULL; - - return scop; -} - - -/** - * osl_scop_free function: - * This function frees the allocated memory for a osl_scop_t structure. - * \param scop The pointer to the scop we want to free. - */ -void osl_scop_free(osl_scop_p scop) { - osl_scop_p tmp; - - while (scop != NULL) { - if (scop->language != NULL) - free(scop->language); - osl_generic_free(scop->parameters); - osl_relation_free(scop->context); - osl_statement_free(scop->statement); - osl_interface_free(scop->registry); - osl_generic_free(scop->extension); - - tmp = scop->next; - free(scop); - scop = tmp; - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_scop_clone function: - * This functions builds and returns a "hard copy" (not a pointer copy) - * of a osl_statement_t data structure provided as parameter. - * Note that the usr field is not touched by this function. - * \param scop The pointer to the scop we want to clone. - * \return A pointer to the full clone of the scop provided as parameter. - */ -osl_scop_p osl_scop_clone(osl_scop_p scop) { - osl_scop_p clone = NULL, node, previous = NULL; - int first = 1; - - while (scop != NULL) { - node = osl_scop_malloc(); - node->version = scop->version; - if (scop->language != NULL) - node->language = strdup(scop->language); - node->context = osl_relation_clone(scop->context); - node->parameters = osl_generic_clone(scop->parameters); - node->statement = osl_statement_clone(scop->statement); - node->registry = osl_interface_clone(scop->registry); - node->extension = osl_generic_clone(scop->extension); - - if (first) { - first = 0; - clone = node; - previous = node; - } - else { - previous->next = node; - previous = previous->next; - } - - scop = scop->next; - } - - return clone; -} - - -/** - * osl_scop_equal function: - * this function returns true if the two scops are the same, false - * otherwise (the usr field is not tested). - * \param s1 The first scop. - * \param s2 The second scop. - * \return 1 if s1 and s2 are the same (content-wise), 0 otherwise. - */ -int osl_scop_equal(osl_scop_p s1, osl_scop_p s2) { - - while ((s1 != NULL) && (s2 != NULL)) { - if (s1 == s2) - return 1; - - if (s1->version != s2->version) { - OSL_info("versions are not the same"); - return 0; - } - - if (strcmp(s1->language, s2->language) != 0) { - OSL_info("languages are not the same"); - return 0; - } - - if (!osl_relation_equal(s1->context, s2->context)) { - OSL_info("contexts are not the same"); - return 0; - } - - if (!osl_generic_equal(s1->parameters, s2->parameters)) { - OSL_info("parameters are not the same"); - return 0; - } - - if (!osl_statement_equal(s1->statement, s2->statement)) { - OSL_info("statements are not the same"); - return 0; - } - - if (!osl_interface_equal(s1->registry, s2->registry)) { - OSL_info("registries are not the same"); - return 0; - } - - if (!osl_generic_equal(s1->extension, s2->extension)) { - OSL_info("extensions are not the same"); - return 0; - } - - s1 = s1->next; - s2 = s2->next; - } - - if (((s1 == NULL) && (s2 != NULL)) || ((s1 != NULL) && (s2 == NULL))) - return 0; - - return 1; -} - - -/** - * osl_scop_integrity_check function: - * This function checks that a scop is "well formed". It returns 0 if the - * check failed or 1 if no problem has been detected. - * \param scop The scop we want to check. - * \return 0 if the integrity check fails, 1 otherwise. - */ -int osl_scop_integrity_check(osl_scop_p scop) { - int expected_nb_parameters; - - - while (scop != NULL) { - // Check the language. - if ((scop->language != NULL) && - (!strcmp(scop->language, "caml") || !strcmp(scop->language, "Caml") || - !strcmp(scop->language, "ocaml") || !strcmp(scop->language, "OCaml"))) - fprintf(stderr, "[OpenScop] Alert: What ?! Caml ?! Are you sure ?!?!\n"); - - // Check the context. - if (!osl_relation_integrity_check(scop->context, - OSL_TYPE_CONTEXT, - OSL_UNDEFINED, - OSL_UNDEFINED, - OSL_UNDEFINED)) - return 0; - - // Get the number of parameters. - if (scop->context != NULL) - expected_nb_parameters = scop->context->nb_parameters; - else - expected_nb_parameters = OSL_UNDEFINED; - - // TODO : check the number of parameter strings. - - if (!osl_statement_integrity_check(scop->statement, - expected_nb_parameters)) - return 0; - - scop = scop->next; - } - - return 1; -} - - -/** - * osl_scop_get_nb_parameters function: - * this function returns the number of global parameters of a given SCoP. - * \param scop The scop we want to know the number of global parameters. - * \return The number of global parameters in the scop. - */ -int osl_scop_get_nb_parameters(osl_scop_p scop) { - - if (scop->context == NULL) { - OSL_debug("no context domain, assuming 0 parameters"); - return 0; - } - else { - return scop->context->nb_parameters; - } -} - - -/** - * osl_scop_register_extension function: - * this function registers a list of extension interfaces to a scop, i.e., it - * adds them to the scop registry. In addition, it will extract extensions - * corresponding to those interfaces from the textual form of the extensions - * (if any) and add them to the scop extension list. - * \param scop The scop for which an extension has to be registered. - * \param interface The extension interface to register within the scop. - */ -void osl_scop_register_extension(osl_scop_p scop, osl_interface_p interface) { - osl_generic_p textual, new; - char * extension_string; - - if ((interface != NULL) && (scop != NULL)) { - osl_interface_add(&scop->registry, interface); - - textual = osl_generic_lookup(scop->extension, interface->URI); - if (textual != NULL) { - extension_string = ((osl_textual_p)textual->data)->textual; - new = osl_generic_sread(extension_string, interface); - osl_generic_add(&scop->extension, new); - } - } -} - - -/** - * osl_scop_get_attributes function: - * this function returns, through its parameters, the maximum values of the - * relation attributes (nb_iterators, nb_parameters etc) in the scop. - * HOWEVER, it updates the parameter value iff the attribute is greater than - * the input parameter value. Hence it may be used to get the attributes as - * well as to find the maximum attributes for several scop lists. The array - * identifier 0 is used when there is no array identifier (AND this is OK), - * OSL_UNDEFINED is used to report it is impossible to provide the property - * while it should. This function is not intended for checking, the input - * scop should be correct. - * \param[in] scop The scop to extract attributes values. - * \param[in,out] nb_parameters Number of parameter attribute. - * \param[in,out] nb_iterators Number of iterators attribute. - * \param[in,out] nb_scattdims Number of scattering dimensions attribute. - * \param[in,out] nb_localdims Number of local dimensions attribute. - * \param[in,out] array_id Maximum array identifier attribute. - */ -void osl_scop_get_attributes(osl_scop_p scop, - int * nb_parameters, - int * nb_iterators, - int * nb_scattdims, - int * nb_localdims, - int * array_id) { - int local_nb_parameters = OSL_UNDEFINED; - int local_nb_iterators = OSL_UNDEFINED; - int local_nb_scattdims = OSL_UNDEFINED; - int local_nb_localdims = OSL_UNDEFINED; - int local_array_id = OSL_UNDEFINED; - - while (scop != NULL) { - osl_relation_get_attributes(scop->context, - &local_nb_parameters, - &local_nb_iterators, - &local_nb_scattdims, - &local_nb_localdims, - &local_array_id); - - osl_statement_get_attributes(scop->statement, - &local_nb_parameters, - &local_nb_iterators, - &local_nb_scattdims, - &local_nb_localdims, - &local_array_id); - // Update. - *nb_parameters = OSL_max(*nb_parameters, local_nb_parameters); - *nb_iterators = OSL_max(*nb_iterators, local_nb_iterators); - *nb_scattdims = OSL_max(*nb_scattdims, local_nb_scattdims); - *nb_localdims = OSL_max(*nb_localdims, local_nb_localdims); - *array_id = OSL_max(*array_id, local_array_id); - scop = scop->next; - } -} - - -/** - * osl_scop_normalize_scattering function: - * this function modifies a scop such that all scattering relation have - * the same number of output dimensions (additional output dimensions are - * set as being equal to zero). - * \param[in,out] scop The scop to nomalize the scattering functions. - */ -void osl_scop_normalize_scattering(osl_scop_p scop) { - int max_scattering_dims = 0; - osl_statement_p statement; - osl_relation_p extended; - - if ((scop != NULL) && (scop->statement != NULL)) { - // Get the max number of scattering dimensions. - statement = scop->statement; - while (statement != NULL) { - if (statement->scattering != NULL) { - max_scattering_dims = OSL_max(max_scattering_dims, - statement->scattering->nb_output_dims); - } - statement = statement->next; - } - - // Normalize. - statement = scop->statement; - while (statement != NULL) { - if (statement->scattering != NULL) { - extended = osl_relation_extend_output(statement->scattering, - max_scattering_dims); - osl_relation_free(statement->scattering); - statement->scattering = extended; - } - statement = statement->next; - } - } -} - diff --git a/cloog-0.17.0/osl/source/statement.c b/cloog-0.17.0/osl/source/statement.c deleted file mode 100644 index 73a0d01..0000000 --- a/cloog-0.17.0/osl/source/statement.c +++ /dev/null @@ -1,721 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** statement.c ** - **-----------------------------------------------------------------** - ** First version: 30/04/2008 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -/*+*************************************************************************** - * Structure display functions * - *****************************************************************************/ - - -/** - * osl_statement_idump function: - * this function displays an osl_statement_t structure (*statement) into - * a file (file, possibly stdout) in a way that trends to be understandable. - * It includes an indentation level (level) in order to work with others - * dumping functions. - * \param[in] file File where the information has to be printed. - * \param[in] statement The statement whose information has to be printed. - * \param[in] level Number of spaces before printing, for each line. - */ -void osl_statement_idump(FILE * file, osl_statement_p statement, int level) { - int j, first = 1, number = 1; - - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - - if (statement != NULL) - fprintf(file, "+-- osl_statement_t (S%d)\n", number); - else - fprintf(file, "+-- NULL statement\n"); - - while (statement != NULL) { - if (!first) { - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - fprintf(file, "| osl_statement_t (S%d)\n", number); - } - else - first = 0; - - // A blank line. - for (j = 0; j <= level + 1; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); - - // Print the domain of the statement. - osl_relation_idump(file, statement->domain, level + 1); - - // Print the scattering of the statement. - osl_relation_idump(file, statement->scattering, level + 1); - - // Print the array access information of the statement. - osl_relation_list_idump(file, statement->access, level + 1); - - // Print the original body expression. - osl_generic_idump(file, statement->body, level + 1); - - statement = statement->next; - number++; - - // Next line. - if (statement != NULL) { - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "V\n"); - } - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_statement_dump function: - * this function prints the content of an osl_statement_t structure - * (*statement) into a file (file, possibly stdout). - * \param[in] file The file where the information has to be printed. - * \param[in] statement The statement whose information has to be printed. - */ -void osl_statement_dump(FILE * file, osl_statement_p statement) { - osl_statement_idump(file, statement, 0); -} - - -/** - * osl_statement_names function: - * this function generates as set of names for all the dimensions - * involved in a given statement. - * \param[in] statement The statement (list) we have to generate names for. - * \return A set of generated names for the input statement dimensions. - */ -static -osl_names_p osl_statement_names(osl_statement_p statement) { - int nb_parameters = OSL_UNDEFINED; - int nb_iterators = OSL_UNDEFINED; - int nb_scattdims = OSL_UNDEFINED; - int nb_localdims = OSL_UNDEFINED; - int array_id = OSL_UNDEFINED; - - osl_statement_get_attributes(statement, &nb_parameters, &nb_iterators, - &nb_scattdims, &nb_localdims, &array_id); - - return osl_names_generate("P", nb_parameters, - "i", nb_iterators, - "c", nb_scattdims, - "l", nb_localdims, - "A", array_id); -} - - -/** - * osl_statement_pprint function: - * this function pretty-prints the content of an osl_statement_t structure - * (*statement) into a file (file, possibly stdout) in the OpenScop format. - * \param[in] file The file where the information has to be printed. - * \param[in] statement The statement whose information has to be printed. - * \param[in] names The names of the constraint columns for comments. - */ -void osl_statement_pprint(FILE * file, osl_statement_p statement, - osl_names_p names) { - int nb_relations, number = 1; - int generated_names = 0; - int iterators_backedup = 0; - osl_strings_p iterators_backup = NULL; - - // Generate the dimension names if necessary and replace iterators with - // statement iterators if possible. - if (names == NULL) { - generated_names = 1; - names = osl_statement_names(statement); - } - - while (statement != NULL) { - // If possible, replace iterator names with statement iterator names. - if (osl_generic_has_URI(statement->body, OSL_URI_BODY) && - (((osl_body_p)(statement->body->data))->iterators != NULL)) { - iterators_backedup = 1; - iterators_backup = names->iterators; - names->iterators = ((osl_body_p)(statement->body->data))->iterators; - } - - nb_relations = 0; - - fprintf(file, "# =============================================== "); - fprintf(file, "Statement %d\n", number); - - fprintf(file, "# Number of relations describing the statement:\n"); - - if (statement->domain != NULL) - nb_relations ++; - if (statement->scattering != NULL) - nb_relations ++; - nb_relations += osl_relation_list_count(statement->access); - - fprintf(file, "%d\n\n", nb_relations); - - fprintf(file, "# ---------------------------------------------- "); - fprintf(file, "%2d.1 Domain\n", number); - osl_relation_pprint(file, statement->domain, names); - fprintf(file, "\n"); - - fprintf(file, "# ---------------------------------------------- "); - fprintf(file, "%2d.2 Scattering\n", number); - osl_relation_pprint(file, statement->scattering, names); - fprintf(file, "\n"); - - fprintf(file, "# ---------------------------------------------- "); - fprintf(file, "%2d.3 Access\n", number); - osl_relation_list_pprint_elts(file, statement->access, names); - fprintf(file, "\n"); - - fprintf(file, "# ---------------------------------------------- "); - fprintf(file, "%2d.4 Body\n", number); - if (statement->body != NULL) { - fprintf(file, "# Statement body is provided\n"); - fprintf(file, "1\n"); - osl_generic_print(file, statement->body); - } - else { - fprintf(file, "# Statement body is not provided\n"); - fprintf(file, "0\n"); - } - - fprintf(file, "\n"); - - // If necessary, switch back iterator names. - if (iterators_backedup) { - iterators_backedup = 0; - names->iterators = iterators_backup; - } - - statement = statement->next; - number++; - } - - if (generated_names) - osl_names_free(names); -} - - -/** - * osl_statement_print function: - * this function prints the content of an osl_statement_t structure - * (*statement) into a file (file, possibly stdout) in the OpenScop format. - * \param[in] file The file where the information has to be printed. - * \param[in] statement The statement whose information has to be printed. - */ -void osl_statement_print(FILE * file, osl_statement_p statement) { - - osl_statement_pprint(file, statement, NULL); -} - - -/***************************************************************************** - * Reading function * - *****************************************************************************/ - - -/** - * osl_statement_dispatch function: - * this function dispatches the relations from a relation list to the - * convenient fields of a statement structure: it extracts the domain, - * the scattering and the access list and store them accordingly in the - * statement structure provided as a parameter. - * \param[in,out] stmt The statement where to dispatch the relations. - * \param[in,out] list The "brute" relation list to sort and dispatch (freed). - */ -static -void osl_statement_dispatch(osl_statement_p stmt, osl_relation_list_p list) { - osl_relation_list_p domain_list; - osl_relation_list_p scattering_list; - int nb_domains, nb_scattering, nb_accesses; - - // Domain. - domain_list = osl_relation_list_filter(list, OSL_TYPE_DOMAIN); - nb_domains = osl_relation_list_count(domain_list); - if (nb_domains > 1) - OSL_error("more than one domain for a statement"); - - if (domain_list != NULL) { - stmt->domain = domain_list->elt; - domain_list->elt = NULL; - osl_relation_list_free(domain_list); - } - else { - stmt->domain = NULL; - } - - // Scattering. - scattering_list=osl_relation_list_filter(list,OSL_TYPE_SCATTERING); - nb_scattering = osl_relation_list_count(scattering_list); - if (nb_scattering > 1) - OSL_error("more than one scattering relation for a statement"); - - if (scattering_list != NULL) { - stmt->scattering = scattering_list->elt; - scattering_list->elt = NULL; - osl_relation_list_free(scattering_list); - } - else { - stmt->scattering = NULL; - } - - // Access. - stmt->access = osl_relation_list_filter(list, OSL_TYPE_ACCESS); - nb_accesses = osl_relation_list_count(stmt->access); - - if ((nb_domains + nb_scattering + nb_accesses) != - (osl_relation_list_count(list))) - OSL_error("unexpected relation type to define a statement"); - - osl_relation_list_free(list); -} - - -/** - * osl_statement_pread function ("precision read"): - * this function reads an osl_statement_t structure from an input stream - * (possibly stdin). - * \param[in] file The input stream. - * \param[in] registry The list of known interfaces (others are ignored). - * \param[in] precision The precision of the relation elements. - * \return A pointer to the statement structure that has been read. - */ -osl_statement_p osl_statement_pread(FILE * file, osl_interface_p registry, - int precision) { - osl_statement_p stmt = osl_statement_malloc(); - osl_relation_list_p list; - - if (file) { - // Read all statement relations. - list = osl_relation_list_pread(file, precision); - - // Store relations at the right place according to their type. - osl_statement_dispatch(stmt, list); - - // Read the body information. - if (osl_util_read_int(file, NULL) > 0) - stmt->body = osl_generic_read_one(file, registry); - } - - return stmt; -} - - -/** - * osl_statement_read function: - * this function is equivalent to osl_statement_pread() except that - * (1) the precision corresponds to the precision environment variable or - * to the highest available precision if it is not defined, and - * (2) the list of known interface is set to the default one. - * \see{osl_statement_pread} - */ -osl_statement_p osl_statement_read(FILE * foo) { - int precision = osl_util_get_precision(); - osl_interface_p registry = osl_interface_get_default_registry(); - osl_statement_p statement = osl_statement_pread(foo, registry, precision); - - osl_interface_free(registry); - return statement; -} - - -/*+*************************************************************************** - * Memory allocation/deallocation functions * - *****************************************************************************/ - - -/** - * osl_statement_malloc function: - * this function allocates the memory space for an osl_statement_t - * structure and sets its fields with default values. Then it returns a pointer - * to the allocated space. - * \return A pointer to an empty statement with fields set to default values. - */ -osl_statement_p osl_statement_malloc() { - osl_statement_p statement; - - OSL_malloc(statement, osl_statement_p, sizeof(osl_statement_t)); - statement->domain = NULL; - statement->scattering = NULL; - statement->access = NULL; - statement->body = NULL; - statement->next = NULL; - - return statement; -} - - -/** - * osl_statement_free function: - * this function frees the allocated memory for an osl_statement_t - * structure. - * \param[in,out] statement The pointer to the statement we want to free. - */ -void osl_statement_free(osl_statement_p statement) { - osl_statement_p next; - - while (statement != NULL) { - next = statement->next; - osl_relation_free(statement->domain); - osl_relation_free(statement->scattering); - osl_relation_list_free(statement->access); - osl_generic_free(statement->body); - - free(statement); - statement = next; - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_statement_add function: - * this function adds a statement "statement" at the end of the statement - * list pointed by "location". - * \param[in,out] location Address of the first element of the statement list. - * \param[in] statement The statement to add to the list. - */ -void osl_statement_add(osl_statement_p * location, - osl_statement_p statement) { - while (*location != NULL) - location = &((*location)->next); - - *location = statement; -} - - -/** - * osl_statement_number function: - * this function returns the number of statements in the statement list - * provided as parameter. - * \param[in] statement The first element of the statement list. - * \return The number of statements in the statement list. - */ -int osl_statement_number(osl_statement_p statement) { - int number = 0; - - while (statement != NULL) { - number++; - statement = statement->next; - } - return number; -} - - -/** - * osl_statement_clone function: - * This functions builds and returns a "hard copy" (not a pointer copy) of an - * osl_statement_t data structure provided as parameter. - * \param[in] statement The pointer to the statement we want to clone. - * \return A pointer to the clone of the statement provided as parameter. - */ -osl_statement_p osl_statement_clone(osl_statement_p statement) { - int first = 1; - osl_statement_p clone = NULL, node, previous = NULL; - - while (statement != NULL) { - node = osl_statement_malloc(); - node->domain = osl_relation_clone(statement->domain); - node->scattering = osl_relation_clone(statement->scattering); - node->access = osl_relation_list_clone(statement->access); - node->body = osl_generic_clone(statement->body); - node->next = NULL; - - if (first) { - first = 0; - clone = node; - previous = node; - } - else { - previous->next = node; - previous = previous->next; - } - - statement = statement->next; - } - - return clone; -} - - -/** - * osl_statement_equal function: - * this function returns true if the two statements provided as parameters - * are the same, false otherwise (the usr field is not tested). - * \param[in] s1 The first statement. - * \param[in] s2 The second statement. - * \return 1 if s1 and s2 are the same (content-wise), 0 otherwise. - */ -int osl_statement_equal(osl_statement_p s1, osl_statement_p s2) { - - if (s1 == s2) - return 1; - - if (((s1->next != NULL) && (s2->next == NULL)) || - ((s1->next == NULL) && (s2->next != NULL))) { - OSL_info("statements are not the same"); - return 0; - } - - if ((s1->next != NULL) && (s2->next != NULL)) { - if (!osl_statement_equal(s1->next, s2->next)) { - OSL_info("number of statements is not the same"); - return 0; - } - } - - if (!osl_relation_equal(s1->domain, s2->domain)) { - OSL_info("statement domains are not the same"); - return 0; - } - - if (!osl_relation_equal(s1->scattering, s2->scattering)) { - OSL_info("statement scatterings are not the same"); - return 0; - } - - if (!osl_relation_list_equal(s1->access, s2->access)) { - OSL_info("statement accesses are not the same"); - return 0; - } - - if (!osl_generic_equal(s1->body, s2->body)) { - OSL_info("statement bodies are not the same"); - return 0; - } - - return 1; -} - - -/** - * osl_statement_integrity_check function: - * this function checks that a statement is "well formed" according to some - * expected properties (setting an expected value to OSL_UNDEFINED means - * that we do not expect a specific value). It returns 0 if the check failed - * or 1 if no problem has been detected. - * \param[in] statement The statement we want to check. - * \param[in] expected_nb_parameters Expected number of parameters. - * \return 0 if the integrity check fails, 1 otherwise. - */ -int osl_statement_integrity_check(osl_statement_p statement, - int expected_nb_parameters) { - int expected_nb_iterators; - - while (statement != NULL) { - // Check the domain. - if (!osl_relation_integrity_check(statement->domain, - OSL_TYPE_DOMAIN, - OSL_UNDEFINED, - 0, - expected_nb_parameters)) { - return 0; - } - - // Get the number of iterators. - if (statement->domain != NULL) - expected_nb_iterators = statement->domain->nb_output_dims; - else - expected_nb_iterators = OSL_UNDEFINED; - - // Check the scattering relation. - if (!osl_relation_integrity_check(statement->scattering, - OSL_TYPE_SCATTERING, - OSL_UNDEFINED, - expected_nb_iterators, - expected_nb_parameters)) { - return 0; - } - - // Check the access relations. - if (!osl_relation_list_integrity_check(statement->access, - OSL_TYPE_ACCESS, - OSL_UNDEFINED, - expected_nb_iterators, - expected_nb_parameters)) { - return 0; - } - - // Check the statement body. - if ((expected_nb_iterators != OSL_UNDEFINED) && - (osl_generic_has_URI(statement->body, OSL_URI_BODY)) && - (((osl_body_p)(statement->body->data))->iterators != NULL) && - (expected_nb_iterators != osl_strings_size( - ((osl_body_p)(statement->body->data))->iterators))) { - OSL_warning("unexpected number of original iterators"); - return 0; - } - - statement = statement->next; - } - - return 1; -} - - -/** - * osl_statement_get_nb_iterators function: - * this function returns the number of surroounding iterators of a given - * statement. - * \param statement The statement we want to know the number of iterators. - * \return The number of surrounding iterators for the statement. - */ -int osl_statement_get_nb_iterators(osl_statement_p statement) { - - if (statement->domain == NULL) { - OSL_warning("no statement domain, assuming 0 iterators"); - return 0; - } - else { - return statement->domain->nb_output_dims; - } -} - - -/** - * osl_statement_get_attributes function: - * this function returns, through its parameters, the maximum values of the - * relation attributes (nb_iterators, nb_parameters etc) in the statement. - * HOWEVER, it updates the parameter value iff the attribute is greater than - * the input parameter value. Hence it may be used to get the attributes as - * well as to find the maximum attributes for several statement lists. The - * array identifier 0 is used when there is no array identifier (AND this is - * OK), OSL_UNDEFINED is used to report it is impossible to provide the - * property while it should. This function is not intended for checking, the - * input statement should be correct. - * \param[in] statement The statement to extract attributes values. - * \param[in,out] nb_parameters Number of parameter attribute. - * \param[in,out] nb_iterators Number of iterators attribute. - * \param[in,out] nb_scattdims Number of scattering dimensions attribute. - * \param[in,out] nb_localdims Number of local dimensions attribute. - * \param[in,out] array_id Maximum array identifier attribute. - */ -void osl_statement_get_attributes(osl_statement_p statement, - int * nb_parameters, - int * nb_iterators, - int * nb_scattdims, - int * nb_localdims, - int * array_id) { - int local_nb_parameters = OSL_UNDEFINED; - int local_nb_iterators = OSL_UNDEFINED; - int local_nb_scattdims = OSL_UNDEFINED; - int local_nb_localdims = OSL_UNDEFINED; - int local_array_id = OSL_UNDEFINED; - - while (statement != NULL) { - osl_relation_get_attributes(statement->domain, - &local_nb_parameters, - &local_nb_iterators, - &local_nb_scattdims, - &local_nb_localdims, - &local_array_id); - - osl_relation_get_attributes(statement->scattering, - &local_nb_parameters, - &local_nb_iterators, - &local_nb_scattdims, - &local_nb_localdims, - &local_array_id); - - osl_relation_list_get_attributes(statement->access, - &local_nb_parameters, - &local_nb_iterators, - &local_nb_scattdims, - &local_nb_localdims, - &local_array_id); - // Update. - *nb_parameters = OSL_max(*nb_parameters, local_nb_parameters); - *nb_iterators = OSL_max(*nb_iterators, local_nb_iterators); - *nb_scattdims = OSL_max(*nb_scattdims, local_nb_scattdims); - *nb_localdims = OSL_max(*nb_localdims, local_nb_localdims); - *array_id = OSL_max(*array_id, local_array_id); - statement = statement->next; - } -} - diff --git a/cloog-0.17.0/osl/source/strings.c b/cloog-0.17.0/osl/source/strings.c deleted file mode 100644 index 91c4990..0000000 --- a/cloog-0.17.0/osl/source/strings.c +++ /dev/null @@ -1,465 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** strings.c ** - **-----------------------------------------------------------------** - ** First version: 13/07/2011 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - -# include -# include -# include -# include - -# include -# include -# include -# include - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ - - -/** - * osl_strings_idump function: - * this function displays an array of strings into a file (file, possibly - * stdout) in a way that trends to be understandable. It includes an - * indentation level (level) in order to work with others - * idump functions. - * \param[in] file The file where the information has to be printed. - * \param[in] strings The array of strings that has to be printed. - * \param[in] level Number of spaces before printing, for each line. - */ -void osl_strings_idump(FILE * file, osl_strings_p strings, int level) { - int i, nb_strings; - - for (i = 0; i < level; i++) - fprintf(file, "|\t"); - - if (strings != NULL) { - nb_strings = osl_strings_size(strings); - fprintf(file, "+-- osl_strings_t:"); - for (i = 0; i < nb_strings; i++) - fprintf(file, " %s", strings->string[i]); - fprintf(file, "\n"); - } - else - fprintf(file, "+-- NULL strings\n"); - - // A blank line. - for (i = 0; i <= level; i++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_strings_dump function: - * this function prints the content of an osl_strings_t structure - * (*strings) into a file (file, possibly stdout). - * \param[in] file The file where the information has to be printed. - * \param[in] strings The strings structure which has to be printed. - */ -void osl_strings_dump(FILE * file, osl_strings_p strings) { - osl_strings_idump(file, strings, 0); -} - - -/** - * osl_strings_sprint function: - * this function prints the content of an osl_strings_t structure - * (*strings) into a string (returned) in the OpenScop textual format. - * \param[in] strings The strings structure which has to be printed. - * \return A string containing the OpenScop dump of the strings structure. - */ -char * osl_strings_sprint(osl_strings_p strings) { - int i; - int high_water_mark = OSL_MAX_STRING; - char * string = NULL; - char buffer[OSL_MAX_STRING]; - - OSL_malloc(string, char *, high_water_mark * sizeof(char)); - string[0] = '\0'; - - if (strings != NULL) { - for (i = 0; i < osl_strings_size(strings); i++) { - sprintf(buffer, "%s", strings->string[i]); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - if (i < osl_strings_size(strings) - 1) - osl_util_safe_strcat(&string, " ", &high_water_mark); - } - sprintf(buffer, "\n"); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - } - else { - sprintf(buffer, "# NULL strings\n"); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - } - - return string; -} - - -/** - * osl_strings_print function: - * this function prints the content of an osl_strings_t structure - * (*body) into a file (file, possibly stdout) in the OpenScop format. - * \param[in] file File where informations are printed. - * \param[in] strings The strings whose information has to be printed. - */ -void osl_strings_print(FILE * file, osl_strings_p strings) { - char * string; - - string = osl_strings_sprint(strings); - if (string != NULL) { - fprintf(file, "%s", string); - free(string); - } -} - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ - - -/** - * osl_strings_sread function: - * this function reads a strings structure from a string complying to the - * OpenScop textual format and returns a pointer to this strings structure. - * The input string should only contain the list of strings this function - * has to read (comments at the end of the line are accepted). The input - * parameter is updated to the position in the input string this function - * reach right after reading the strings structure. - * \param[in,out] input The input string where to find a strings structure. - * Updated to the position after what has been read. - * \return A pointer to the strings structure that has been read. - */ -osl_strings_p osl_strings_sread(char ** input) { - char tmp[OSL_MAX_STRING]; - char * s; - char ** string = NULL; - int nb_strings; - int i, count; - osl_strings_p strings = NULL; - - // Skip blank/commented lines and spaces before the strings. - osl_util_sskip_blank_and_comments(input); - - // Count the actual number of strings. - nb_strings = 0; - s = *input; - while (1) { - for (count = 0; *s && !isspace(*s) && *s != '#'; count++) - s++; - - if (count != 0) - nb_strings++; - - if ((!*s) || (*s == '#') || (*s == '\n')) - break; - else - s++; - } - - if (nb_strings > 0) { - // Allocate the array of strings. Make it NULL-terminated. - OSL_malloc(string, char **, sizeof(char *) * (nb_strings + 1)); - string[nb_strings] = NULL; - - // Read the desired number of strings. - s = *input; - for (i = 0; i < nb_strings; i++) { - for (count = 0; *s && !isspace(*s) && *s != '#'; count++) - tmp[count] = *(s++); - tmp[count] = '\0'; - OSL_strdup(string[i], tmp); - if (*s != '#') - s++; - } - - // Update the input pointer to the end of the strings structure. - *input = s; - - // Build the strings structure - strings = osl_strings_malloc(); - strings->string = string; - } - - return strings; -} - - -/** - * osl_strings_read function. - * this function reads a strings structure from a file (possibly stdin) - * complying to the OpenScop textual format and returns a pointer to this - * structure. - * parameter nb_strings). - * \param[in] file The file where to read the strings structure. - * \return The strings structure that has been read. - */ -osl_strings_p osl_strings_read(FILE * file) { - char buffer[OSL_MAX_STRING], * start; - osl_strings_p strings; - - start = osl_util_skip_blank_and_comments(file, buffer); - strings = osl_strings_sread(&start); - - return strings; -} - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ - - -/** - * osl_strings_malloc function: - * This function allocates the memory space for an osl_strings_t - * structure and sets its fields with default values. Then it returns a - * pointer to the allocated space. - * \return A pointer to an empty strings structure with fields set to - * default values. - */ -osl_strings_p osl_strings_malloc() { - osl_strings_p strings; - - OSL_malloc(strings, osl_strings_p, sizeof(osl_strings_t)); - strings->string = NULL; - - return strings; -} - - -/** - * osl_strings_free function: - * this function frees the allocated memory for a strings data structure. - * \param[in] strings The strings structure we want to free. - */ -void osl_strings_free(osl_strings_p strings) { - int i; - - if (strings != NULL) { - if (strings->string != NULL) { - i = 0; - while(strings->string[i] != NULL) { - free(strings->string[i]); - i++; - } - free(strings->string); - } - free(strings); - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_strings_clone function. - * this function builds and return a "hard copy" (not a pointer copy) of an - * strings structure provided as parameter. - * \param[in] strings The strings structure to clone. - * \return The clone of the strings structure. - */ -osl_strings_p osl_strings_clone(osl_strings_p strings) { - int i, nb_strings; - osl_strings_p clone = NULL; - - if (strings == NULL) - return NULL; - - clone = osl_strings_malloc(); - if ((nb_strings = osl_strings_size(strings)) == 0) - return clone; - - OSL_malloc(clone->string, char **, (nb_strings + 1) * sizeof(char *)); - clone->string[nb_strings] = NULL; - for (i = 0; i < nb_strings; i++) { - clone->string[i] = strdup(strings->string[i]); - if (clone->string[i] == NULL) - OSL_error("memory overflow"); - } - - return clone; -} - - -/** - * osl_strings_equal function: - * this function returns true if the two strings structures are the same - * (content-wise), false otherwise. - * \param[in] s1 The first strings structure. - * \param[in] s2 The second strings structure. - * \return 1 if s1 and s2 are the same (content-wise), 0 otherwise. - */ -int osl_strings_equal(osl_strings_p s1, osl_strings_p s2) { - int i, nb_s1; - - if (s1 == s2) - return 1; - - if (((s1 == NULL) && (s2 != NULL)) || - ((s1 != NULL) && (s2 == NULL)) || - ((nb_s1 = osl_strings_size(s1)) != osl_strings_size(s2))) - return 0; - - for (i = 0; i < nb_s1; i++) - if (strcmp(s1->string[i], s2->string[i]) != 0) - return 0; - - return 1; -} - - -/** - * osl_strings_size function: - * this function returns the number of elements in the NULL-terminated - * strings array of the strings structure. - * \param[in] strings The strings structure we need to know the size. - * \return The number of strings in the strings structure. - */ -int osl_strings_size(osl_strings_p strings) { - int size = 0; - - if ((strings != NULL) && (strings->string != NULL)) { - while (strings->string[size] != NULL) { - size++; - } - } - - return size; -} - - -/** - * osl_strings_encapsulate function: - * this function builds a new strings structure to encapsulate the string - * provided as a parameter (the reference to this string is used directly). - * \param[in] string The string to encapsulate in a strings structure. - * \return A new strings structure containing only the provided string. - */ -osl_strings_p osl_strings_encapsulate(char * string) { - osl_strings_p capsule = osl_strings_malloc(); - - OSL_malloc(capsule->string, char **, 2 * sizeof(char *)); - capsule->string[0] = string; - capsule->string[1] = NULL; - - return capsule; -} - - -/** - * osl_strings_interface function: - * this function creates an interface structure corresponding to the strings - * structure and returns it). - * \return An interface structure for the strings structure. - */ -osl_interface_p osl_strings_interface() { - osl_interface_p interface = osl_interface_malloc(); - - interface->URI = strdup(OSL_URI_STRINGS); - interface->idump = (osl_idump_f)osl_strings_idump; - interface->sprint = (osl_sprint_f)osl_strings_sprint; - interface->sread = (osl_sread_f)osl_strings_sread; - interface->malloc = (osl_malloc_f)osl_strings_malloc; - interface->free = (osl_free_f)osl_strings_free; - interface->clone = (osl_clone_f)osl_strings_clone; - interface->equal = (osl_equal_f)osl_strings_equal; - - return interface; -} - - -/** - * osl_strings_generate function: - * this function generates a new strings structure containing - * 'nb_strings' strings of the form "prefixXX" where XX goes from 1 to - * nb_strings. - * \param[in] prefix The prefix of the generated strings. - * \param[in] nb_strings The number of strings to generate. - * \return A new strings structure containing generated strings. - */ -osl_strings_p osl_strings_generate(char * prefix, int nb_strings) { - char ** strings = NULL; - char buff[strlen(prefix) + 16]; // TODO: better (log10(INT_MAX) ?) :-D. - int i; - osl_strings_p generated; - - if (nb_strings) { - OSL_malloc(strings, char **, sizeof(char *) * (nb_strings + 1)); - strings[nb_strings] = NULL; - for (i = 0; i < nb_strings; i++) { - sprintf(buff, "%s%d", prefix, i + 1); - strings[i] = strdup(buff); - if (strings[i] == NULL) - OSL_error("memory overflow"); - } - } - - generated = osl_strings_malloc(); - generated->string = strings; - return generated; -} diff --git a/cloog-0.17.0/osl/source/util.c b/cloog-0.17.0/osl/source/util.c deleted file mode 100644 index 950f5e8..0000000 --- a/cloog-0.17.0/osl/source/util.c +++ /dev/null @@ -1,573 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** util.c ** - **-----------------------------------------------------------------** - ** First version: 08/10/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - -#include -#include -#include -#include - -#include -#include - - -/*+*************************************************************************** - * Utility functions * - *****************************************************************************/ - - -/** - * osl_util_skip_blank_and_comments "file skip" function: - * this function reads the open file 'file' line by line and skips - * blank/comment lines and spaces. The first line where there is some - * useful information is stored at the address 'str' (the memory to - * store the line must be allocated before the call to this function - * and must be at least OSL_MAX_STRING * sizeof(char)). The pointer - * to the first useful information in this line is returned by the - * function. - * \param[in] file The (opened) file to read. - * \param[in] str Address of an allocated space to store the first line - * that contains useful information. - * \return The address of the the first useful digit in str. - */ -char * osl_util_skip_blank_and_comments(FILE * file, char * str) { - char * start; - - do { - start = fgets(str, OSL_MAX_STRING, file); - while ((start != NULL) && isspace(*start) && (*start != '\n')) - start++; - } - while (start != NULL && (*start == '#' || *start == '\n')); - - return start; -} - - -/** - * osl_util_sskip_blank_and_comments "string skip" function: - * this function updates the str pointer, which initialy points to a string, - * to the first character in this string which is not a space or a comment - * (comments start at '#' and end at '\n'), or to the end of string. - * \param[in,out] str Address of a string, updated to the address of - * the first non-space or comment character. - */ -void osl_util_sskip_blank_and_comments(char ** str) { - do { - // Skip spaces/blanc lines. - while (*str && **str && isspace(**str)) - (*str)++; - - // Skip the comment if any. - if (*str && **str && **str == '#') { - while (**str && **str != '\n') { - (*str)++; - } - } - } - while (*str && **str && **str == '\n'); -} - - -/** - * osl_util_read_int function: - * reads an int on the input 'file' or the input string 'str' depending on - * which one is not NULL (exactly one of them must not be NULL). - * \param[in] file The file where to read an int (if not NULL). - * \param[in,out] str The string where to read an int (if not NULL). This - * pointer is updated to reflect the read and points - * after the int in the input string. - * \return The int that has been read. - */ -int osl_util_read_int(FILE * file, char ** str) { - char s[OSL_MAX_STRING], * start; - int res; - int i = 0; - - if ((file != NULL && str != NULL) || (file == NULL && str == NULL)) - OSL_error("one and only one of the two parameters can be non-NULL"); - - if (file != NULL) { - // Parse from a file. - start = osl_util_skip_blank_and_comments(file, s); - if (sscanf(start, " %d", &res) != 1) - OSL_error("an int was expected"); - } - else { - // Parse from a string. - // Skip blank/commented lines. - osl_util_sskip_blank_and_comments(str); - - // Build the chain to analyze. - while (**str && !isspace(**str) && **str != '\n') - s[i++] = *((*str)++); - s[i] = '\0'; - if (sscanf(s, "%d", &res) != 1) - OSL_error("an int was expected"); - } - - return res; -} - - -/** - * osl_util_read_int internal function: - * reads a tag (the form of a tag with name "name" is \) on the input - * 'file' or the input string 'str' depending on which one is not NULL (exactly - * one of them must not be NULL). It returns the name of the tag (thus without - * the < and > as a string. Note that in the case of an ending tag, e.g., - * \, the slash is returned as a part of the name, e.g., /foo. - * \param[in] file The file where to read a tag (if not NULL). - * \param[in,out] str The string where to read a tag (if not NULL). This - * pointer is updated to reflect the read and points - * after the tag in the input string. - * \return The tag name that has been read. - */ -char * osl_util_read_tag(FILE * file, char ** str) { - char s[OSL_MAX_STRING], * start; - char * res; - int i = 0; - - if ((file != NULL && str != NULL) || (file == NULL && str == NULL)) - OSL_error("one and only one of the two parameters can be non-NULL"); - - // Skip blank/commented lines. - if (file != NULL) { - start = osl_util_skip_blank_and_comments(file, s); - str = &start; - } - else { - osl_util_sskip_blank_and_comments(str); - } - - // Pass the starting '<'. - if (**str != '<') - OSL_error("a \"<\" to start a tag was expected"); - (*str)++; - - // Read the tag. - OSL_malloc(res, char *, (OSL_MAX_STRING + 1) * sizeof(char)); - res[OSL_MAX_STRING] = '\0'; - - while (**str && **str != '>') { - if (((**str >= 'A') && (**str <= 'Z')) || - ((**str >= 'a') && (**str <= 'z')) || - ((**str == '/') && (i == 0)) || - (**str == '_')) { - res[i++] = *((*str)++); - res[i] = '\0'; - } - else { - OSL_error("illegal character in the tag name"); - } - } - - // Check we actually end up with a '>' and pass it. - if (**str != '>') - OSL_error("a \">\" to end a tag was expected"); - (*str)++; - - return res; -} - - -/** - * osl_util_read_uptotag function: - * this function reads a file up to a given tag (the tag is read) or the - * end of file. It puts everything it reads, except the tag, in a string - * which is returned. However ot returns NULL is the tag is not found. - * \param[in] file The file where to read the tail. - * \param[in] tag The tag which, when reached, stops the file reading. - * \return The string that has been read from the file. - */ -char * osl_util_read_uptotag(FILE * file, char * tag) { - int high_water_mark = OSL_MAX_STRING; - int nb_chars = 0; - int lentag = strlen(tag); - int tag_found = 0; - char * res; - - OSL_malloc(res, char *, high_water_mark * sizeof(char)); - - // - Copy everything to the res string. - while (!feof(file)) { - res[nb_chars] = fgetc(file); - nb_chars++; - - if ((nb_chars >= lentag) && - (!strncmp(&res[nb_chars - lentag], tag, lentag))) { - tag_found = 1; - break; - } - - if (nb_chars >= high_water_mark) { - high_water_mark += high_water_mark; - OSL_realloc(res, char *, high_water_mark * sizeof(char)); - } - } - - if (!tag_found) { - OSL_debug("tag was not found, end of file reached"); - free(res); - return NULL; - } - - // - 0-terminate the string. - OSL_realloc(res, char *, (nb_chars - strlen(tag) + 1) * sizeof(char)); - res[nb_chars - strlen(tag)] = '\0'; - - return res; -} - - -/** - * osl_util_read_uptoendtag function: - * this function reads a file up to a given end tag (this end tag is read) - * or the end of file. The name of the tag is provided as parameter (hence - * without the starting ""). It puts everything it reads - * in a string which is returned. - * \param[in] file The file where to read the tail. - * \param[in] name The name of the end tag to the file reading. - * \return The string that has been read from the file. - */ -char * osl_util_read_uptoendtag(FILE * file, char * name) { - char tag[strlen(name) + 4]; - - sprintf(tag, "", name); - return osl_util_read_uptotag(file, tag); -} - - -/** - * osl_util_tag_content function: - * this function returns a freshly allocated string containing the - * content, in the given string 'str', between the tag '\' and - * the tag '\'. If the tag '\' is not found, it returns NULL. - * \param[in] str The string where to find a given content. - * \param[in] name The name of the tag we are looking for. - * \return The string between '\' and '\' in 'str'. - */ -char * osl_util_tag_content(char * str, char * name) { - int i; - char * start; - char * stop; - char tag[strlen(name) + 3]; - char endtag[strlen(name) + 4]; - int size = 0; - int lentag; - char * res = NULL; - - sprintf(tag, "<%s>", name); - sprintf(endtag, "", name); - - if (str) { - start = str; - lentag = strlen(tag); - for (; start && *start && strncmp(start, tag, lentag); ++start) - continue; - - // The tag 'tag' was not found. - if (! *start) - return NULL; - start += lentag; - stop = start; - lentag = strlen(endtag); - for (size = 0; *stop && strncmp(stop, endtag, lentag); ++stop, ++size) - continue; - - // the tag 'endtag' was not found. - if (! *stop) - return NULL; - OSL_malloc(res, char *, (size + 1) * sizeof(char)); - - // Copy the chain between the two tags. - for (++start, i = 0; start != stop; ++start, ++i) - res[i] = *start; - res[i] = '\0'; - } - - return res; -} - - -/** - * osl_util_safe_strcat function: - * this function concatenates the string src to the string *dst - * and reallocates *dst if necessary. The current size of the - * *dst buffer must be *hwm (high water mark), if there is some - * reallocation, this value is updated. - * \param[in,out] dst pointer to the destination string (may be reallocated). - * \param[in] src string to concatenate to dst. - * \param[in,out] hwm pointer to the size of the *dst buffer (may be updated). - */ -void osl_util_safe_strcat(char ** dst, char * src, int * hwm) { - - while (strlen(*dst) + strlen(src) >= *hwm) { - *hwm += OSL_MAX_STRING; - OSL_realloc(*dst, char *, *hwm * sizeof(char)); - } - - strcat(*dst, src); -} - - -/** - * osl_util_get_precision function: - * this function returns the precision defined by the precision environment - * variable or the highest available precision if it is not defined. - * \return environment precision if defined or highest available precision. - */ -int osl_util_get_precision() { - int precision = OSL_PRECISION_DP; - char * precision_env; - -#ifdef OSL_GMP_IS_HERE - precision = OSL_PRECISION_MP; -#endif - - precision_env = getenv(OSL_PRECISION_ENV); - if (precision_env != NULL) { - if (!strcmp(precision_env, OSL_PRECISION_ENV_SP)) - precision = OSL_PRECISION_SP; - else if (!strcmp(precision_env, OSL_PRECISION_ENV_DP)) - precision = OSL_PRECISION_DP; - else if (!strcmp(precision_env, OSL_PRECISION_ENV_MP)) - precision = OSL_PRECISION_MP; - else - OSL_warning("bad precision environment value"); - } - - return precision; -} - - -/** - * osl_util_print_provided function: - * this function prints a "provided" boolean in a file (file, possibly stdout), - * with a comment title according to the OpenScop specification. - * \param[in] file File where the information has to be printed. - * \param[in] provided The provided boolean to print. - * \param[in] title A string to use as a title for the provided booblean. - */ -void osl_util_print_provided(FILE * file, int provided, char * title) { - if (provided) { - fprintf(file, "# %s provided\n", title); - fprintf(file, "1\n"); - } - else { - fprintf(file, "# %s not provided\n", title); - fprintf(file, "0\n\n"); - } -} - - -/** - * osl_util_identifier_is_here function: - * this function returns 1 if the input "identifier" is found at the - * "index" position in the "expression" input string, 0 otherwise. - * \param[in] expression The input expression. - * \param[in] identifier The identifier to look for. - * \param[in] index The position in the expression where to look. - * \return 1 if the identifier is found at the position in the expression. - */ -static -int osl_util_identifier_is_here(char * expression, char * identifier, - int index) { - // If there is no space enough to find the identifier: no. - if (strlen(identifier) + index > strlen(expression)) - return 0; - - // If there is a character before and it is in [A-Za-z0-9]: no. - if ((index > 0) && - (((expression[index - 1] >= 'A') && (expression[index - 1] <= 'Z')) || - ((expression[index - 1] >= 'a') && (expression[index - 1] <= 'z')) || - ((expression[index - 1] >= '0') && (expression[index - 1] <= '9')))) - return 0; - - // If there is a character after and it is in [A-Za-z0-9]: no. - if ((strlen(identifier) + index < strlen(expression)) && - (((expression[strlen(identifier) + index] >= 'A') && - (expression[strlen(identifier) + index] <= 'Z')) || - ((expression[strlen(identifier) + index] >= 'a') && - (expression[strlen(identifier) + index] <= 'z')) || - ((expression[strlen(identifier) + index] >= '0') && - (expression[strlen(identifier) + index] <= '9')))) - return 0; - - // If the identifier string is not here: no. - if (strncmp(expression + index, identifier, strlen(identifier))) - return 0; - - return 1; -} - - -/** - * osl_util_lazy_isolated_identifier function: - * this function returns 1 if the identifier at the "index" position in the - * "expression" is guaranteed not to need parenthesis around is we - * substitute it with anything. For instance the identifier "i" can be - * always substituted in "A[i]" with no need of parenthesis but not in - * "A[2*i]". This function is lazy in the sense that it just check obvious - * cases, not all of them. The identifier must already be at the indicated - * position, this function does not check that. - * \param[in] expression The input expression. - * \param[in] identifier The identifier to check. - * \param[in] index The position of the identifier in the expression. - * \return 1 if the identifier is isolated, 0 if unsure. - */ -static -int osl_util_lazy_isolated_identifier(char * expression, char * identifier, - int index) { - int look; - - // If the first non-space character before is not in [\[(,\+=]: no. - look = index - 1; - while (look >= 0) { - if (isspace(expression[look])) - look--; - else - break; - } - - if ((look >= 0) && - (expression[look] != '[') && - (expression[look] != '(') && - (expression[look] != '+') && - (expression[look] != '=') && - (expression[look] != ',')) - return 0; - - // If the first non-space character after is not in [\]),;\+]: no. - look = index + strlen(identifier); - while (look < strlen(expression)) { - if (isspace(expression[look])) - look++; - else - break; - } - - if ((look < strlen(expression)) && - (expression[look] != ']') && - (expression[look] != ')') && - (expression[look] != '+') && - (expression[look] != ',') && - (expression[look] != ';')) - return 0; - - return 1; -} - - -/** - * osl_util_identifier_substitution function: - * this function replaces some identifiers in an input expression string and - * returns the final string. The list of identifiers to replace are provided - * as an array of strings. They are replaced from the input string with the - * new substring "@i@" or "(@i@)" where i is the rank of the identifier in the - * array of identifiers. The parentheses are added when it is not obvious that - * the identifier can be replaced with an arbitrary expression without the - * need of parentheses. For instance, let us consider the input expression - * "C[i+j]+=A[2*i]*B[j];" and the array of strings {"i", "j"}: the resulting - * string would be "C[@0@+@1@]+=A[2*(@0@)]*B[@1@];". - * \param[in] expression The original expression. - * \param[in] identifiers NULL-terminated array of identifiers. - * \return A new string where the ith identifier is replaced by \@i\@. - */ -char * osl_util_identifier_substitution(char * expression, - char ** identifiers) { - int index, j, found; - int high_water_mark = OSL_MAX_STRING; - char buffer[OSL_MAX_STRING]; - char * string; - - OSL_malloc(string, char *, high_water_mark * sizeof(char)); - string[0] = '\0'; - - index = 0; - while (index < strlen(expression)) { - j = 0; - found = 0; - while (identifiers[j] != NULL) { - if (osl_util_identifier_is_here(expression, identifiers[j], index)) { - if (osl_util_lazy_isolated_identifier(expression,identifiers[j],index)) - sprintf(buffer, "@%d@", j); - else - sprintf(buffer, "(@%d@)", j); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - index += strlen(identifiers[j]); - found = 1; - break; - } - j++; - } - if (!found) { - sprintf(buffer, "%c", expression[index]); - osl_util_safe_strcat(&string, buffer, &high_water_mark); - index++; - } - } - - return string; -} - - - diff --git a/cloog-0.17.0/osl/source/vector.c b/cloog-0.17.0/osl/source/vector.c deleted file mode 100644 index b50c963..0000000 --- a/cloog-0.17.0/osl/source/vector.c +++ /dev/null @@ -1,367 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** vector.c ** - **-----------------------------------------------------------------** - ** First version: 30/04/2008 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - - -#include -#include -#include - -#include -#include -#include -#include - - -/*+*************************************************************************** - * Structure display function * - *****************************************************************************/ - - -/** - * osl_vector_idump function: - * Displays a osl_vector_t structure (*vector) into a file (file, possibly - * stdout) in a way that trends to be understandable without falling in a deep - * depression or, for the lucky ones, getting a headache... It includes an - * indentation level (level) in order to work with others idump functions. - * \param[in] file File where informations are printed. - * \param[in] vector The vector whose information have to be printed. - * \param[in] level Number of spaces before printing, for each line. - */ -void osl_vector_idump(FILE * file, osl_vector_p vector, int level) { - int j; - - if (vector != NULL) { - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file,"|\t"); - fprintf(file,"+-- osl_vector_t ("); - osl_int_dump_precision(file, vector->precision); - fprintf(file, ")\n"); - - for (j = 0; j <= level; j++) - fprintf(file,"|\t"); - fprintf(file,"%d\n", vector->size); - - // Display the vector. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - - fprintf(file, "[ "); - - for (j = 0; j < vector->size; j++) { - osl_int_print(file, vector->precision, vector->v, j); - fprintf(file, " "); - } - - fprintf(file, "]\n"); - } - else { - // Go to the right level. - for (j = 0; j < level; j++) - fprintf(file, "|\t"); - fprintf(file, "+-- NULL vector\n"); - } - - // The last line. - for (j = 0; j <= level; j++) - fprintf(file, "|\t"); - fprintf(file, "\n"); -} - - -/** - * osl_vector_dump function: - * This function prints the content of a osl_vector_t structure - * (*vector) into a file (file, possibly stdout). - * \param[in] file File where informations are printed. - * \param[in] vector The vector whose information have to be printed. - */ -void osl_vector_dump(FILE * file, osl_vector_p vector) { - osl_vector_idump(file, vector, 0); -} - - -/*+*************************************************************************** - * Memory allocation/deallocation function * - *****************************************************************************/ - - -/** - * osl_vector_pmalloc function: - * (precision malloc) this function allocates the memory space for an - * osl_vector_t structure and sets its fields with default values. Then - * it returns a pointer to the allocated space. - * \param[in] precision The precision of the vector entries. - * \param[in] size The number of entries of the vector to allocate. - * \return A pointer to the newly allocated osl_vector_t structure. - */ -osl_vector_p osl_vector_pmalloc(int precision, int size) { - osl_vector_p vector; - int i; - - OSL_malloc(vector, osl_vector_p, sizeof(osl_vector_t)); - vector->size = size; - vector->precision = precision; - if (size == 0) { - vector->v = NULL; - } - else { - OSL_malloc(vector->v, void *, size * osl_int_sizeof(precision)); - for (i = 0; i < size; i++) - osl_int_init_set_si(precision, vector->v, i, 0); - } - return vector; -} - - -/** - * osl_vector_malloc function: - * This function allocates the memory space for a osl_vector_t structure - * and sets its fields with default values. Then it returns a pointer to the - * allocated space. The precision of the vector elements corresponds to the - * precision environment variable or to the highest available precision if it - * is not defined. - * \param[in] size The number of entries of the vector to allocate. - * \return A pointer to the newly allocated osl_vector_t structure. - */ -osl_vector_p osl_vector_malloc(int size) { - int precision = osl_util_get_precision(); - return osl_vector_pmalloc(precision, size); -} - - -/** - * osl_vector_free function: - * This function frees the allocated memory for a osl_vector_t structure. - * \param[in] vector The pointer to the vector we want to free. - */ -void osl_vector_free(osl_vector_p vector) { - int i; - - if (vector != NULL) { - if (vector->v != NULL) { - for (i = 0; i < vector->size; i++) - osl_int_clear(vector->precision, vector->v, i); - - free(vector->v); - } - free(vector); - } -} - - -/*+*************************************************************************** - * Processing functions * - *****************************************************************************/ - - -/** - * osl_vector_add_scalar function: - * This function adds a scalar to the vector representation of an affine - * expression (this means we add the scalar only to the very last entry of the - * vector). It returns a new vector resulting from this addition. - * \param[in] vector The basis vector. - * \param[in] scalar The scalar to add to the vector. - * \return A pointer to a new vector, copy of the basis one plus the scalar. - */ -osl_vector_p osl_vector_add_scalar(osl_vector_p vector, int scalar) { - int i, precision, last; - osl_vector_p result; - - if ((vector == NULL) || (vector->size < 2)) - OSL_error("incompatible vector for addition"); - - precision = vector->precision; - last = vector->size - 1; - - result = osl_vector_pmalloc(precision, vector->size); - for (i = 0; i < vector->size; i++) - osl_int_assign(precision, result->v, i, vector->v, i); - osl_int_add_si(precision, result->v, last, vector->v, last, scalar); - - return result; -} - - -/** - * osl_vector_add function: - * This function achieves the addition of two vectors and returns the - * result as a new vector (the addition means the ith entry of the new vector - * is equal to the ith entry of vector v1 plus the ith entry of vector v2). - * \param v1 The first vector for the addition. - * \param v2 The second vector for the addition. - * \return A pointer to a new vector, corresponding to v1 + v2. - */ -osl_vector_p osl_vector_add(osl_vector_p v1, osl_vector_p v2) { - int i; - osl_vector_p v3; - - if ((v1 == NULL) || (v2 == NULL) || - (v1->size != v2->size) || (v1->precision != v2->precision)) - OSL_error("incompatible vectors for addition"); - - v3 = osl_vector_pmalloc(v1->precision, v1->size); - for (i = 0; i < v1->size; i++) - osl_int_add(v1->precision, v3->v, i, v1->v, i, v2->v, i); - - return v3; -} - - -/** - * osl_vector_sub function: - * This function achieves the subtraction of two vectors and returns the - * result as a new vector (the addition means the ith entry of the new vector - * is equal to the ith entry of vector v1 minus the ith entry of vector v2). - * \param v1 The first vector for the subtraction. - * \param v2 The second vector for the subtraction (result is v1-v2). - * \return A pointer to a new vector, corresponding to v1 - v2. - */ -osl_vector_p osl_vector_sub(osl_vector_p v1, osl_vector_p v2) { - int i; - osl_vector_p v3; - - if ((v1 == NULL) || (v2 == NULL) || - (v1->size != v2->size) || (v1->precision != v2->precision)) - OSL_error("incompatible vectors for subtraction"); - - v3 = osl_vector_pmalloc(v1->precision, v1->size); - for (i = 0; i < v1->size; i++) - osl_int_sub(v1->precision, v3->v, i, v1->v, i, v2->v, i); - - return v3; -} - - -/** - * osl_vector_tag_inequality function: - * This function tags a vector representation of a contraint as being an - * inequality >=0. This means in the PolyLib format, to set to 1 the very - * first entry of the vector. It modifies directly the vector provided as - * an argument. - * \param vector The vector to be tagged. - */ -void osl_vector_tag_inequality(osl_vector_p vector) { - if ((vector == NULL) || (vector->size < 1)) - OSL_error("vector cannot be tagged"); - osl_int_set_si(vector->precision, vector->v, 0, 1); -} - - -/** - * osl_vector_tag_equality function: - * This function tags a vector representation of a contraint as being an - * equality ==0. This means in the PolyLib format, to set to 0 the very - * first entry of the vector. It modifies directly the vector provided as - * an argument. - * \param vector The vector to be tagged. - */ -void osl_vector_tag_equality(osl_vector_p vector) { - if ((vector == NULL) || (vector->size < 1)) - OSL_error("vector cannot be tagged"); - osl_int_set_si(vector->precision, vector->v, 0, 0); -} - - -/** - * osl_vector_equal function: - * this function returns true if the two vectors are the same, false - * otherwise. - * \param v1 The first vector. - * \param v2 The second vector. - * \return 1 if v1 and v2 are the same (content-wise), 0 otherwise. - */ -int osl_vector_equal(osl_vector_p v1, osl_vector_p v2) { - int i; - - if (v1 == v2) - return 1; - - if ((v1->size != v2->size) || (v1->precision != v2->precision)) - return 0; - - for (i = 0; i < v1->size; i++) - if (osl_int_ne(v1->precision, v1->v, i, v2->v, i)) - return 0; - - return 1; -} - - -/** - * osl_vector_mul_scalar function: - * this function returns a new vector corresponding to the one provided - * as parameter with each entry multiplied by a scalar. - * \param v The vector to multiply. - * \param scalar The scalar coefficient. - * \return A new vector corresponding to scalar * v. - */ -osl_vector_p osl_vector_mul_scalar(osl_vector_p v, int scalar) { - int i; - osl_vector_p result = osl_vector_pmalloc(v->precision, v->size); - - for(i = 0; i < v->size; i++) - osl_int_mul_si(v->precision, result->v, i, v->v, i, scalar); - - return result; -} - diff --git a/cloog-0.17.0/osl/tests/Makefile.am b/cloog-0.17.0/osl/tests/Makefile.am deleted file mode 100644 index eca952e..0000000 --- a/cloog-0.17.0/osl/tests/Makefile.am +++ /dev/null @@ -1,100 +0,0 @@ -# -# /*+------------------------------------------------------------------** -# ** OpenScop Library ** -# **------------------------------------------------------------------** -# ** makefile.am ** -# **------------------------------------------------------------------** -# ** First version: 01/10/2010 ** -# **------------------------------------------------------------------** -# -# -# *************************************************************************** -# * OpenScop: Structures and formats for polyhedral tools to talk together * -# *************************************************************************** -# * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * -# * / / / // // // // / / / // // / / // / /|,_, * -# * / / / // // // // / / / // // / / // / / / /\ * -# * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * -# * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * -# * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * -# * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * -# * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * -# * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * -# * | I | | | | e | | | | | | | | | | | | | \ \ \ * -# * | T | | | | | | | | | | | | | | | | | \ \ \ * -# * | E | | | | | | | | | | | | | | | | | \ \ \ * -# * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * -# * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * -# * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * -# * * -# * Copyright (C) 2008 University Paris-Sud 11 and INRIA * -# * * -# * (3-clause BSD license) * -# * Redistribution and use in source and binary forms, with or without * -# * modification, are permitted provided that the following conditions * -# * are met: * -# * * -# * 1. Redistributions of source code must retain the above copyright * -# * notice, this list of conditions and the following disclaimer. * -# * 2. Redistributions in binary form must reproduce the above copyright * -# * notice, this list of conditions and the following disclaimer in the * -# * documentation and/or other materials provided with the distribution. * -# * 3. The name of the author may not be used to endorse or promote * -# * products derived from this software without specific prior written * -# * permission. * -# * * -# * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * -# * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * -# * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * -# * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * -# * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * -# * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * -# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * -# * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * -# * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * -# * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * -# * POSSIBILITY OF SUCH DAMAGE. * -# * * -# * OpenScop Library, a library to manipulate OpenScop formats and data * -# * structures. Written by: * -# * Cedric Bastoul and * -# * Louis-Noel Pouchet * -# * * -# ***************************************************************************/ -# -# Makefile.am (or makefile if generated) of the OpenScop Library. -# Makefile.am is not a makefile, you must run the 'autogen.sh' THEN the -# configure shellscript to generate the Makefile thanks to this file. - - -############################################################################# -SUBDIRS = - -############################################################################# -MAINTAINERCLEANFILES = Makefile.in - -############################################################################# - -noinst_PROGRAMS = osl_test - -TESTS = osl_test - -osl_test_CPPFLAGS = -I$(top_srcdir)/include -static - -osl_test_LDFLAGS = -L$(top_srcdir)/source - -osl_test_LDADD = -losl - -osl_test_SOURCES = \ - osl_test.c \ - polynom.scop \ - test_empty_statement.scop \ - test_just_access.scop \ - test_just_body.scop \ - test_just_domain.scop \ - test_just_scattering.scop \ - test_matmult.scop \ - test_no_statement.scop \ - test_scop_list.scop - - diff --git a/cloog-0.17.0/osl/tests/Makefile.in b/cloog-0.17.0/osl/tests/Makefile.in deleted file mode 100644 index e8e8798..0000000 --- a/cloog-0.17.0/osl/tests/Makefile.in +++ /dev/null @@ -1,826 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# /*+------------------------------------------------------------------** -# ** OpenScop Library ** -# **------------------------------------------------------------------** -# ** makefile.am ** -# **------------------------------------------------------------------** -# ** First version: 01/10/2010 ** -# **------------------------------------------------------------------** -# -# -# *************************************************************************** -# * OpenScop: Structures and formats for polyhedral tools to talk together * -# *************************************************************************** -# * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * -# * / / / // // // // / / / // // / / // / /|,_, * -# * / / / // // // // / / / // // / / // / / / /\ * -# * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * -# * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * -# * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * -# * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * -# * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * -# * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * -# * | I | | | | e | | | | | | | | | | | | | \ \ \ * -# * | T | | | | | | | | | | | | | | | | | \ \ \ * -# * | E | | | | | | | | | | | | | | | | | \ \ \ * -# * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * -# * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * -# * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * -# * * -# * Copyright (C) 2008 University Paris-Sud 11 and INRIA * -# * * -# * (3-clause BSD license) * -# * Redistribution and use in source and binary forms, with or without * -# * modification, are permitted provided that the following conditions * -# * are met: * -# * * -# * 1. Redistributions of source code must retain the above copyright * -# * notice, this list of conditions and the following disclaimer. * -# * 2. Redistributions in binary form must reproduce the above copyright * -# * notice, this list of conditions and the following disclaimer in the * -# * documentation and/or other materials provided with the distribution. * -# * 3. The name of the author may not be used to endorse or promote * -# * products derived from this software without specific prior written * -# * permission. * -# * * -# * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * -# * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * -# * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * -# * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * -# * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * -# * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * -# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * -# * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * -# * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * -# * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * -# * POSSIBILITY OF SUCH DAMAGE. * -# * * -# * OpenScop Library, a library to manipulate OpenScop formats and data * -# * structures. Written by: * -# * Cedric Bastoul and * -# * Louis-Noel Pouchet * -# * * -# ***************************************************************************/ -# -# Makefile.am (or makefile if generated) of the OpenScop Library. -# Makefile.am is not a makefile, you must run the 'autogen.sh' THEN the -# configure shellscript to generate the Makefile thanks to this file. - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -noinst_PROGRAMS = osl_test$(EXEEXT) -TESTS = osl_test$(EXEEXT) -subdir = tests -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/autoconf/libtool.m4 \ - $(top_srcdir)/autoconf/ltoptions.m4 \ - $(top_srcdir)/autoconf/ltsugar.m4 \ - $(top_srcdir)/autoconf/ltversion.m4 \ - $(top_srcdir)/autoconf/lt~obsolete.m4 \ - $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -PROGRAMS = $(noinst_PROGRAMS) -am_osl_test_OBJECTS = osl_test-osl_test.$(OBJEXT) -osl_test_OBJECTS = $(am_osl_test_OBJECTS) -osl_test_DEPENDENCIES = -osl_test_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(osl_test_LDFLAGS) \ - $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ -depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(osl_test_SOURCES) -DIST_SOURCES = $(osl_test_SOURCES) -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir -ETAGS = etags -CTAGS = ctags -am__tty_colors = \ -red=; grn=; lgn=; blu=; std= -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CD = @CD@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOXYGEN = @DOXYGEN@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_aux_dir = @ac_aux_dir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ - -############################################################################# -SUBDIRS = - -############################################################################# -MAINTAINERCLEANFILES = Makefile.in -osl_test_CPPFLAGS = -I$(top_srcdir)/include -static -osl_test_LDFLAGS = -L$(top_srcdir)/source -osl_test_LDADD = -losl -osl_test_SOURCES = \ - osl_test.c \ - polynom.scop \ - test_empty_statement.scop \ - test_just_access.scop \ - test_just_body.scop \ - test_just_domain.scop \ - test_just_scattering.scop \ - test_matmult.scop \ - test_no_statement.scop \ - test_scop_list.scop - -all: all-recursive - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign tests/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list -osl_test$(EXEEXT): $(osl_test_OBJECTS) $(osl_test_DEPENDENCIES) - @rm -f osl_test$(EXEEXT) - $(osl_test_LINK) $(osl_test_OBJECTS) $(osl_test_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/osl_test-osl_test.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -osl_test-osl_test.o: osl_test.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(osl_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT osl_test-osl_test.o -MD -MP -MF $(DEPDIR)/osl_test-osl_test.Tpo -c -o osl_test-osl_test.o `test -f 'osl_test.c' || echo '$(srcdir)/'`osl_test.c -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/osl_test-osl_test.Tpo $(DEPDIR)/osl_test-osl_test.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='osl_test.c' object='osl_test-osl_test.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(osl_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o osl_test-osl_test.o `test -f 'osl_test.c' || echo '$(srcdir)/'`osl_test.c - -osl_test-osl_test.obj: osl_test.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(osl_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT osl_test-osl_test.obj -MD -MP -MF $(DEPDIR)/osl_test-osl_test.Tpo -c -o osl_test-osl_test.obj `if test -f 'osl_test.c'; then $(CYGPATH_W) 'osl_test.c'; else $(CYGPATH_W) '$(srcdir)/osl_test.c'; fi` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/osl_test-osl_test.Tpo $(DEPDIR)/osl_test-osl_test.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='osl_test.c' object='osl_test-osl_test.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(osl_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o osl_test-osl_test.obj `if test -f 'osl_test.c'; then $(CYGPATH_W) 'osl_test.c'; else $(CYGPATH_W) '$(srcdir)/osl_test.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; skip=0; \ - srcdir=$(srcdir); export srcdir; \ - list=' $(TESTS) '; \ - $(am__tty_colors); \ - if test -n "$$list"; then \ - for tst in $$list; do \ - if test -f ./$$tst; then dir=./; \ - elif test -f $$tst; then dir=; \ - else dir="$(srcdir)/"; fi; \ - if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xpass=`expr $$xpass + 1`; \ - failed=`expr $$failed + 1`; \ - col=$$red; res=XPASS; \ - ;; \ - *) \ - col=$$grn; res=PASS; \ - ;; \ - esac; \ - elif test $$? -ne 77; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xfail=`expr $$xfail + 1`; \ - col=$$lgn; res=XFAIL; \ - ;; \ - *) \ - failed=`expr $$failed + 1`; \ - col=$$red; res=FAIL; \ - ;; \ - esac; \ - else \ - skip=`expr $$skip + 1`; \ - col=$$blu; res=SKIP; \ - fi; \ - echo "$${col}$$res$${std}: $$tst"; \ - done; \ - if test "$$all" -eq 1; then \ - tests="test"; \ - All=""; \ - else \ - tests="tests"; \ - All="All "; \ - fi; \ - if test "$$failed" -eq 0; then \ - if test "$$xfail" -eq 0; then \ - banner="$$All$$all $$tests passed"; \ - else \ - if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ - banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ - fi; \ - else \ - if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all $$tests failed"; \ - else \ - if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ - banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ - fi; \ - fi; \ - dashes="$$banner"; \ - skipped=""; \ - if test "$$skip" -ne 0; then \ - if test "$$skip" -eq 1; then \ - skipped="($$skip test was not run)"; \ - else \ - skipped="($$skip tests were not run)"; \ - fi; \ - test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$skipped"; \ - fi; \ - report=""; \ - if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ - report="Please report to $(PACKAGE_BUGREPORT)"; \ - test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$report"; \ - fi; \ - dashes=`echo "$$dashes" | sed s/./=/g`; \ - if test "$$failed" -eq 0; then \ - echo "$$grn$$dashes"; \ - else \ - echo "$$red$$dashes"; \ - fi; \ - echo "$$banner"; \ - test -z "$$skipped" || echo "$$skipped"; \ - test -z "$$report" || echo "$$report"; \ - echo "$$dashes$$std"; \ - test "$$failed" -eq 0; \ - else :; fi - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: check-recursive -all-am: Makefile $(PROGRAMS) -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) -clean: clean-recursive - -clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ - mostlyclean-am - -distclean: distclean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \ - ctags-recursive install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am check check-TESTS check-am clean clean-generic \ - clean-libtool clean-noinstPROGRAMS ctags ctags-recursive \ - distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.17.0/osl/tests/osl_test.c b/cloog-0.17.0/osl/tests/osl_test.c deleted file mode 100644 index 3cfbd08..0000000 --- a/cloog-0.17.0/osl/tests/osl_test.c +++ /dev/null @@ -1,247 +0,0 @@ - - /*+-----------------------------------------------------------------** - ** OpenScop Library ** - **-----------------------------------------------------------------** - ** test.c ** - **-----------------------------------------------------------------** - ** First version: 01/10/2010 ** - **-----------------------------------------------------------------** - - - ***************************************************************************** - * OpenScop: Structures and formats for polyhedral tools to talk together * - ***************************************************************************** - * ,___,,_,__,,__,,__,,__,,_,__,,_,__,,__,,___,_,__,,_,__, * - * / / / // // // // / / / // // / / // / /|,_, * - * / / / // // // // / / / // // / / // / / / /\ * - * |~~~|~|~~~|~~~|~~~|~~~|~|~~~|~|~~~|~~~|~~~|~|~~~|~|~~~|/_/ \ * - * | G |C| P | = | L | P |=| = |C| = | = | = |=| = |=| C |\ \ /\ * - * | R |l| o | = | e | l |=| = |a| = | = | = |=| = |=| L | \# \ /\ * - * | A |a| l | = | t | u |=| = |n| = | = | = |=| = |=| o | |\# \ \ * - * | P |n| l | = | s | t |=| = |d| = | = | = | | |=| o | | \# \ \ * - * | H | | y | | e | o | | = |l| | | = | | | | G | | \ \ \ * - * | I | | | | e | | | | | | | | | | | | | \ \ \ * - * | T | | | | | | | | | | | | | | | | | \ \ \ * - * | E | | | | | | | | | | | | | | | | | \ \ \ * - * | * |*| * | * | * | * |*| * |*| * | * | * |*| * |*| * | / \* \ \ * - * | O |p| e | n | S | c |o| p |-| L | i | b |r| a |r| y |/ \ \ / * - * '---'-'---'---'---'---'-'---'-'---'---'---'-'---'-'---' '--' * - * * - * Copyright (C) 2008 University Paris-Sud 11 and INRIA * - * * - * (3-clause BSD license) * - * Redistribution and use in source and binary forms, with or without * - * modification, are permitted provided that the following conditions * - * are met: * - * * - * 1. Redistributions of source code must retain the above copyright notice, * - * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright * - * notice, this list of conditions and the following disclaimer in the * - * documentation and/or other materials provided with the distribution. * - * 3. The name of the author may not be used to endorse or promote products * - * derived from this software without specific prior written permission. * - * * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * * - * OpenScop Library, a library to manipulate OpenScop formats and data * - * structures. Written by: * - * Cedric Bastoul and * - * Louis-Noel Pouchet * - * * - *****************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include - -//#define FORK // Comment that if you want only one process - // (best for debugging with valgrind but bad - // for make check since any error will - // stop the job). - -#define TEST_DIR "." // Directory to scan for OpenScop files -#define TEST_SUFFIX ".scop" // Suffix of OpenScop files - - -/** - * test_file function - * This function tests an onpenscop file. A test has six steps: - * 1. read the file to raise the data up to OpenScop data structures, - * 2. clone the data structures, - * 3. compare the clone and the original one, - * 4. dump the data structures to a new OpenScop file, - * 5. read the generated file, - * 6. compare the data structures. - * If everything went well, the data structure of the two scops are the same. - * \param input_name The name of the input file. - * \param verbose Verbose option (1 to set, 0 not to set). - * \return 1 if the test is successful, 0 otherwise. - */ -int test_file(char * input_name, int verbose) { - int success = 0; - int failure = 0; - int cloning = 0; - int dumping = 0; - int equal = 0; - char * output_name; - FILE * input_file, * output_file; - osl_scop_p input_scop; - osl_scop_p output_scop; - osl_scop_p cloned_scop; - - printf("\nTesting file %s... \n", input_name); - - // PART I. Raise from file. - input_file = fopen(input_name, "r"); - if (input_file == NULL) { - fflush(stdout); - fprintf(stderr, "\nError: unable to open file %s\n", input_name); - exit(2); - } - input_scop = osl_scop_read(input_file); - fclose(input_file); - - // PART II. Clone and test. - cloned_scop = osl_scop_clone(input_scop); - // Compare the two scops. - if (cloning = osl_scop_equal(input_scop, cloned_scop)) - printf("- cloning succeeded\n"); - else - printf("- cloning failed\n"); - - // PART III. Dump to file and test. - output_name = tmpnam(NULL); - output_file = fopen(output_name, "w"); - //osl_scop_dump(stdout, input_scop); - //osl_scop_print(stdout, input_scop); - osl_scop_print(output_file, input_scop); - fclose(output_file); - - // Raise the generated file to data structures. - output_file = fopen(output_name, "r"); - output_scop = osl_scop_read(output_file); - //osl_scop_dump(stdout, output_scop); - fclose(output_file); - - if (verbose) { - printf("\n\n*************************************************\n\n"); - osl_scop_dump(stdout, output_scop); - osl_scop_print(stdout, output_scop); - printf("\n*************************************************\n\n"); - } - - // Compare the two scops. - if (dumping = osl_scop_equal(input_scop, output_scop)) - printf("- dumping succeeded\n"); - else - printf("- dumping failed\n"); - - // PART IV. Report. - if (equal = (cloning + dumping > 0) ? 1 : 0) - printf("Success :-)\n"); - else - printf("Failure :-(\n"); - - // Save the planet. - osl_scop_free(input_scop); - osl_scop_free(cloned_scop); - osl_scop_free(output_scop); - remove(output_name); - - return equal; -} - - -/** - * OpenScop test program. - * Usage: osl_test [-v] [osl_file] - * This program scans a directory for openscop files and test each of them. - * Optionnally the user can provide a file name to check this file only. A - * verbose option is also provided to output more information during tests. - */ -int main(int argc, char * argv[]) { - int total = 0; // Total number of tests. - int success = 0; // Number of successes. - int verbose = 0; // 1 if the verbose option is set, 0 otherwise. - int dirtest = 1; // 1 if we check a whole directory, 0 for a single file. - int fileidx = 0; // Index of the file to check in argv (0 if none). - int d_namlen; - int suffix_length; - DIR * dir; - struct dirent * dp; - - // Process the command line information - if (((argc > 1) && (!strcmp(argv[1], "-v"))) || - ((argc > 2) && (!strcmp(argv[2], "-v")))) - verbose = 1; - - if ((argc > 3) || ((argc == 3) && (!verbose))) { - fprintf(stderr, "usage: osl_test [-v] [osl_file]\n"); - exit(1); - } - - if ((argc - verbose) > 1) { - dirtest = 0; - fileidx = (!strcmp(argv[1], "-v")) ? 2 : 1; - } - - // Proceed with the test(s), either directory or single file - if (dirtest) { - suffix_length = strlen(TEST_SUFFIX); - - // For each file in the directory to check... - dir = opendir(TEST_DIR); - while ((dp = readdir(dir)) != NULL) { - d_namlen = strlen(dp->d_name); - // If the file has the convenient suffix... - if ((d_namlen > suffix_length) && - (!strcmp(dp->d_name+(d_namlen-suffix_length), TEST_SUFFIX))) { - // Test it ! -#ifdef FORK - int report; - if (!fork()) - exit(test_file(dp->d_name, verbose) ? 0 : 1); - wait(&report); - if (!WEXITSTATUS(report)) - success++; -#else - success += test_file(dp->d_name, verbose); -#endif - total++; - } - } - closedir(dir); - } - else { - success = test_file(argv[fileidx], verbose); - total++; - } - - printf("\n +-----------------------+\n"); - printf(" | OpenScop Test Summary |\n"); - printf(" |-----------------------|\n"); - printf(" | total %4d |\n", total); - printf(" | success(es) %4d |\n", success); - printf(" | failure(s) %4d |\n", total - success); - printf(" +-----------------------+\n\n"); - - // Return 0 if all tests were successful, 1 otherwise. - if (total - success) - return 1; - else - return 0; -} diff --git a/cloog-0.17.0/osl/tests/polynom.scop b/cloog-0.17.0/osl/tests/polynom.scop deleted file mode 100644 index 26db5d8..0000000 --- a/cloog-0.17.0/osl/tests/polynom.scop +++ /dev/null @@ -1,134 +0,0 @@ -# -# <| -# A -# /.\ -# <| [""M# -# A | # Clan McCloog Castle -# /.\ [""M# [Generated by the OpenScop Library 0.3.0 64 bits] -# [""M# | # U"U#U -# | # | # \ .:/ -# | # | #___| # -# | "--' .-" -# |"-"-"-"-"-#-#-## -# | # ## ###### -# \ .::::'/ -# \ ::::'/ -# :8a| # # ## -# ::88a ### -# ::::888a 8a ##::. -# ::::::888a88a[]:::: -# :::::::::SUNDOGa8a::::. .. -# :::::8::::888:Y8888:::::::::... -#::':::88::::888::Y88a______________________________________________________ -#:: ::::88a::::88a:Y88a __---__-- __ -#' .: ::Y88a:::::8a:Y88a __----_-- -------_-__ -# :' ::::8P::::::::::88aa. _ _- -- --_ --- __ --- __-- -#.:: :::::::::::::::::::Y88as88a...s88aa. - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -1 3 0 0 0 1 -# e/i N 1 - 1 1 3 - -# Parameter names are provided -1 -# Parameter names - -N - - -# Number of statements -1 - -# =============================================== Statement 1 -# Number of relations describing the statement -6 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -2 -4 5 2 0 0 1 -# e/i i j N 1 - 1 1 0 0 0 ## i >= 0 - 1 -1 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 ## j >= 0 - 1 0 -1 1 -1 ## -j+N-1 >= 0 -5 5 2 0 0 1 -# e/i i j N 1 - 1 1 0 0 0 ## i >= 0 - 1 -1 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 ## j >= 0 - 1 0 -1 1 -1 ## -j+N-1 >= 0 - 1 0 -1 1 -1 ## -j+N-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -5 10 5 2 0 1 -# e/i s1 s2 s3 s4 s5 i j N 1 - 0 -1 0 0 0 0 0 0 0 0 ## 0 - 0 0 -1 0 0 0 1 0 0 0 ## i - 0 0 0 -1 0 0 0 0 0 0 ## 0 - 0 0 0 0 -1 0 0 1 0 0 ## j - 0 0 0 0 0 -1 0 0 0 0 ## 0 - -# ---------------------------------------------- 1.3 Access -READ -2 7 2 2 0 1 -# e/i Arr [1] i j N 1 - 0 -1 0 0 0 0 1 ## C[i+j] - 0 0 -1 1 1 0 0 ## - -READ -2 7 2 2 0 1 -# e/i Arr [1] i j N 1 - 0 -1 0 0 0 0 2 ## A[i] - 0 0 -1 1 0 0 0 ## - -READ -2 7 2 2 0 1 -# e/i Arr [1] i j N 1 - 0 -1 0 0 0 0 3 ## B[j] - 0 0 -1 0 1 0 0 ## - -WRITE -2 7 2 2 0 1 -# e/i Arr [1] i j N 1 - 0 -1 0 0 0 0 1 ## C[i+j] - 0 0 -1 1 1 0 0 ## - -# ---------------------------------------------- 1.4 Body -# Statement body is provided -1 - - -# Number of original iterators -2 -# Original iterator names -i j -# Statement body -C[i+j]+=A[i]*B[j]; - - -# =============================================== Options - -3 -1 C -2 A -3 B - - - -hello, world - -HELLO WORLD I SAID - - - - diff --git a/cloog-0.17.0/osl/tests/test_empty_statement.scop b/cloog-0.17.0/osl/tests/test_empty_statement.scop deleted file mode 100644 index a7aba60..0000000 --- a/cloog-0.17.0/osl/tests/test_empty_statement.scop +++ /dev/null @@ -1,35 +0,0 @@ - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 2 0 0 0 0 - -# Parameter names are not provided -0 - -# One statement -1 - -# =============================================== Statement 1 -# Number of relations describing the statement -0 - -# ---------------------------------------------- 1.1 Domain -# NULL Domain - -# ---------------------------------------------- 1.2 Scattering -# NULL Scattering - -# ---------------------------------------------- 1.3 Access -# NULL Access - -# ---------------------------------------------- 1.4 Body -# Statement body is not provided -0 - - - diff --git a/cloog-0.17.0/osl/tests/test_just_access.scop b/cloog-0.17.0/osl/tests/test_just_access.scop deleted file mode 100644 index 999a8eb..0000000 --- a/cloog-0.17.0/osl/tests/test_just_access.scop +++ /dev/null @@ -1,38 +0,0 @@ - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 2 0 0 0 0 - -# Parameter names are not provided -0 - -# One statement -1 - -# =============================================== Statement 1 -# Number of relations describing the statement -1 - -# ---------------------------------------------- 1.1 Domain -# NULL Domain - -# ---------------------------------------------- 1.2 Scattering -# NULL Scattering - -# ---------------------------------------------- 1.3 Access -WRITE -1 3 1 0 0 0 -# e/i Arr 1 - 0 -1 1 - -# ---------------------------------------------- 1.4 Body -# Statement body is not provided -0 - - - diff --git a/cloog-0.17.0/osl/tests/test_just_body.scop b/cloog-0.17.0/osl/tests/test_just_body.scop deleted file mode 100644 index 6829a3c..0000000 --- a/cloog-0.17.0/osl/tests/test_just_body.scop +++ /dev/null @@ -1,41 +0,0 @@ - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 2 0 0 0 0 - -# Parameter names are not provided -0 - -# One statement -1 - -# =============================================== Statement 1 -# Number of relations describing the statement -0 - -# ---------------------------------------------- 1.1 Domain -# NULL Domain - -# ---------------------------------------------- 1.2 Scattering -# NULL Scattering - -# ---------------------------------------------- 1.3 Access -# NULL Access - -# ---------------------------------------------- 1.4 Body -# Statement body is provided -1 - -# Number of original iterators -0 -# Statement body -foo = bar; - - - - diff --git a/cloog-0.17.0/osl/tests/test_just_domain.scop b/cloog-0.17.0/osl/tests/test_just_domain.scop deleted file mode 100644 index 8862535..0000000 --- a/cloog-0.17.0/osl/tests/test_just_domain.scop +++ /dev/null @@ -1,37 +0,0 @@ - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 2 0 0 0 0 - -# Parameter names are not provided -0 - -# One statement -1 - -# =============================================== Statement 1 -# Number of relations describing the statement -1 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -0 2 0 0 0 0 - -# ---------------------------------------------- 1.2 Scattering -# NULL Scattering - -# ---------------------------------------------- 1.3 Access -# NULL Access - -# ---------------------------------------------- 1.4 Body -# Statement body is not provided -0 - - - - diff --git a/cloog-0.17.0/osl/tests/test_just_scattering.scop b/cloog-0.17.0/osl/tests/test_just_scattering.scop deleted file mode 100644 index 15c9b87..0000000 --- a/cloog-0.17.0/osl/tests/test_just_scattering.scop +++ /dev/null @@ -1,36 +0,0 @@ - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 2 0 0 0 0 - -# Parameter names are not provided -0 - -# One statement -1 - -# =============================================== Statement 1 -# Number of relations describing the statement -1 - -# ---------------------------------------------- 1.1 Domain -# NULL Domain - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -0 2 0 0 0 0 - -# ---------------------------------------------- 1.3 Access -# NULL Access - -# ---------------------------------------------- 1.4 Body -# Statement body is not provided -0 - - - diff --git a/cloog-0.17.0/osl/tests/test_matmult.scop b/cloog-0.17.0/osl/tests/test_matmult.scop deleted file mode 100644 index 596c7d2..0000000 --- a/cloog-0.17.0/osl/tests/test_matmult.scop +++ /dev/null @@ -1,136 +0,0 @@ -# Matmul example, relation representation - - - -# =============================================== Global -# Backend Language -C - -# Context -CONTEXT -1 3 0 0 0 1 - 1 1 -1 ## N-1 >= 0 - -# Parameter names are provided -1 -# Parameter names - -N - - -# Number of statements -2 - -# =============================================== Statement 1 -# Number of relations describing the statement -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -4 5 2 0 0 1 -# e/i i j N 1 - 1 1 0 0 0 ## i >= 0 - 1 -1 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 ## j >= 0 - 1 0 -1 1 -1 ## -j+N-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -5 10 5 2 0 1 -# e/i s1 s2 s3 s4 s5 i j N 1 - 0 -1 0 0 0 0 0 0 0 0 ## s1 = 0 - 0 0 -1 0 0 0 1 0 0 0 ## s2 = i - 0 0 0 -1 0 0 0 0 0 0 ## s3 = 0 - 0 0 0 0 -1 0 0 1 0 0 ## s4 = j - 0 0 0 0 0 -1 0 0 0 0 ## s5 = 0 - -# ---------------------------------------------- 1.3 Access -WRITE -3 8 3 2 0 1 -# e/i Arr [1] [2] i j N 1 - 0 -1 0 0 0 0 0 1 ## C - 0 0 -1 0 1 0 0 0 ## [i] - 0 0 0 -1 0 1 0 0 ## [j] - -# ---------------------------------------------- 1.4 Body -# Statement body is provided -1 - -# Number of original iterators -2 -# Original iterator names -i j -# Statement body -C[i][j] = 0.0; - - -# =============================================== Statement 2 -# Number of relations describing the statement -6 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -6 6 3 0 0 1 -# e/i i j k N 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 0 ## j >= 0 - 1 0 -1 0 1 -1 ## -j+N-1 >= 0 - 1 0 0 1 0 0 ## k >= 0 - 1 0 0 -1 1 -1 ## -k+N-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -7 13 7 3 0 1 -# e/i s1 s2 s3 s4 s5 s6 s7 i j k N 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## s1 = 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## s2 = i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## s3 = 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 ## s4 = j - 0 0 0 0 0 -1 0 0 0 0 0 0 1 ## s5 = 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 ## s6 = k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## s7 = 0 - -# ---------------------------------------------- 2.3 Access -WRITE -3 9 3 3 0 1 -# e/i Arr [1] [2] i j k N 1 - 0 -1 0 0 0 0 0 0 1 ## C - 0 0 -1 0 1 0 0 0 0 ## [i] - 0 0 0 -1 0 1 0 0 0 ## [j] - -READ -3 9 3 3 0 1 -# e/i Arr [1] [2] i j k N 1 - 0 -1 0 0 0 0 0 0 1 ## C - 0 0 -1 0 1 0 0 0 0 ## [i] - 0 0 0 -1 0 1 0 0 0 ## [j] - -READ -3 9 3 3 0 1 -# e/i Arr [1] [2] i j k N 1 - 0 -1 0 0 0 0 0 0 2 ## A - 0 0 -1 0 1 0 0 0 0 ## [i] - 0 0 0 -1 0 0 1 0 0 ## [k] - -READ -3 9 3 3 0 1 -# e/i Arr [1] [2] i j k N 1 - 0 -1 0 0 0 0 0 0 3 ## B - 0 0 -1 0 0 0 1 0 0 ## [k] - 0 0 0 -1 0 1 0 0 0 ## [j] - -# ---------------------------------------------- 2.4 Body -# Statement body is provided -1 - -# Number of original iterators -3 -# Original iterator names -i j k -# Statement body -C[i][j] = C[i][j] + A[i][k] * B[k][j]; - - - - diff --git a/cloog-0.17.0/osl/tests/test_no_statement.scop b/cloog-0.17.0/osl/tests/test_no_statement.scop deleted file mode 100644 index 5ef85d7..0000000 --- a/cloog-0.17.0/osl/tests/test_no_statement.scop +++ /dev/null @@ -1,18 +0,0 @@ - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 2 0 0 0 0 - -# Parameter names are not provided -0 - -# No statement -0 - - - diff --git a/cloog-0.17.0/osl/tests/test_scop_list.scop b/cloog-0.17.0/osl/tests/test_scop_list.scop deleted file mode 100644 index d24e74f..0000000 --- a/cloog-0.17.0/osl/tests/test_scop_list.scop +++ /dev/null @@ -1,70 +0,0 @@ - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 2 0 0 0 0 - -# Parameter names are not provided -0 - -# One statement -1 - -# =============================================== Statement 1 -# Number of relations describing the statement -0 - -# ---------------------------------------------- 1.1 Domain -# NULL Domain - -# ---------------------------------------------- 1.2 Scattering -# NULL Scattering - -# ---------------------------------------------- 1.3 Access -# NULL Access - -# ---------------------------------------------- 1.4 Body -# Statement body is not provided -0 - - - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 2 0 0 0 0 - -# Parameter names are not provided -0 - -# One statement -1 - -# =============================================== Statement 1 -# Number of relations describing the statement -0 - -# ---------------------------------------------- 1.1 Domain -# NULL Domain - -# ---------------------------------------------- 1.2 Scattering -# NULL Scattering - -# ---------------------------------------------- 1.3 Access -# NULL Access - -# ---------------------------------------------- 1.4 Body -# Statement body is not provided -0 - - - diff --git a/cloog-0.17.0/source/block.c b/cloog-0.17.0/source/block.c deleted file mode 100644 index 08fe807..0000000 --- a/cloog-0.17.0/source/block.c +++ /dev/null @@ -1,404 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** block.c ** - **-------------------------------------------------------------------** - ** First version: june 11th 2005 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ -/* CAUTION: the english used for comments is probably the worst you ever read, - * please feel free to correct and improve it ! - */ - -# include -# include -# include "../include/cloog/cloog.h" - - -/****************************************************************************** - * Memory leaks hunting * - ******************************************************************************/ - - -/** - * These functions and global variables are devoted to memory leaks hunting: we - * want to know at each moment how many CloogBlock structures had been allocated - * (cloog_block_allocated) and how many had been freed (cloog_block_freed). - * Each time a CloogBlock structure is allocated, a call to the function - * cloog_block_leak_up() must be carried out, and respectively - * cloog_block_leak_down() when a CloogBlock structure is freed. The special - * variable cloog_block_max gives the maximal number of CloogBlock structures - * simultaneously alive (i.e. allocated and non-freed) in memory. - * - June 11th 2005: first version. - */ - - -static void cloog_block_leak_up(CloogState *state) -{ - state->block_allocated++; - if ((state->block_allocated - state->block_freed) > state->block_max) - state->block_max = state->block_allocated - state->block_freed; -} - - -static void cloog_block_leak_down(CloogState *state) -{ - state->block_freed++; -} - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ - - -/** - * cloog_domain_print_structure : - * this function is a human-friendly way to display the CloogDomain data - * structure, it includes an indentation level (level) in order to work with - * others print_structure functions. - * - June 16th 2005: first version. - */ -void cloog_block_print_structure(FILE * file, CloogBlock * block, int level) -{ int i ; - - /* Go to the right level. */ - for (i=0; istatement,level+1) ; - - /* A blank line. */ - for (i=0; inb_scaldims == 0) - fprintf(file,"No scalar dimensions\n") ; - else - { fprintf(file,"Scalar dimensions (%d):",block->nb_scaldims) ; - for (i = 0; i < block->nb_scaldims; i++) { - fprintf(file, " "); - cloog_int_print(file, block->scaldims[i]); - } - fprintf(file,"\n") ; - } - - /* A blank line. */ - for (i=0; idepth) ; - - /* A blank line. */ - for (i=0; iblock,1) ; - blocklist = blocklist->next ; - i++ ; - } -} - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ - - -/** - * cloog_block_free function: - * This function frees the allocated memory for a CloogStatement structure. - * - June 11th 2005: first version. - * - June 30th 2005: scaldims field management. - */ -void cloog_block_free(CloogBlock * block) -{ int i ; - - if (block != NULL) - { block->references -- ; - - if (block->references == 0) { - cloog_block_leak_down(block->state); - if (block->scaldims != NULL) - { for (i=0;inb_scaldims;i++) - cloog_int_clear(block->scaldims[i]); - - free(block->scaldims) ; - } - if (block->statement) - cloog_statement_free(block->statement); - free(block) ; - } - } -} - - -/** - * cloog_block_list_free function: - * This function frees the allocated memory for a CloogBlockList structure. - * - June 11th 2005: first version. - */ -void cloog_block_list_free(CloogBlockList * blocklist) -{ CloogBlockList * temp ; - - while (blocklist != NULL) - { temp = blocklist->next ; - cloog_block_free(blocklist->block) ; - free(blocklist) ; - blocklist = temp ; - } -} - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - -/** - * cloog_block_malloc function: - * This function allocates the memory space for a CloogBlock structure and - * sets its fields with default values. Then it returns a pointer to the - * allocated space. - * - November 21th 2005: first version. - */ -CloogBlock *cloog_block_malloc(CloogState *state) -{ CloogBlock * block ; - - /* Memory allocation for the CloogBlock structure. */ - block = (CloogBlock *)malloc(sizeof(CloogBlock)) ; - if (block == NULL) - cloog_die("memory overflow.\n"); - cloog_block_leak_up(state); - - /* We set the various fields with default values. */ - block->state = state; - block->statement = NULL ; - block->nb_scaldims = 0 ; - block->scaldims = NULL ; - block->depth = 0 ; - block->references = 1 ; - block->usr = NULL; - - return block ; -} - - -/** - * cloog_block_alloc function: - * This function allocates the memory space for a CloogBlock structure and - * sets its fields with those given as input. Then it returns a pointer to the - * allocated space. The two parameters nb_scaldims and scaldims are for internal - * service, put to respectively 0 and NULL if you don't know what they are - * useful for ! - * - statement is the statement list of the block, - * - scattering is the scattering function for the block (NULL if unsure !), - * - nb_scaldims is the number of scalar dimensions (0 if unsure !), - * - scaldims is the array with the scalar dimensions values (NULL if unsure !), - * - depth is the original block depth (the number of outer loops). - ** - * - June 11th 2005: first version. - * - June 30th 2005: addition of the nb_scaldims and scaldims parameters. - * - November 21th 2005: use of cloog_block_malloc. - */ -CloogBlock *cloog_block_alloc(CloogStatement *statement, int nb_scaldims, - cloog_int_t *scaldims, int depth) -{ CloogBlock * block ; - - /* Block allocation. */ - block = cloog_block_malloc(statement->state); - - block->statement = statement ; - block->nb_scaldims = nb_scaldims ; - block->scaldims = scaldims ; - block->depth = depth ; - block->references = 1 ; - - return block ; -} - - -/** - * cloog_block_list_malloc function: - * This function allocates the memory space for a CloogBlockList structure and - * sets its fields with default values. Then it returns a pointer to the - * allocated space. - * - November 21th 2005: first version. - */ -CloogBlockList * cloog_block_list_malloc() -{ CloogBlockList * blocklist ; - - /* Memory allocation for the CloogBlock structure. */ - blocklist = (CloogBlockList *)malloc(sizeof(CloogBlockList)) ; - if (blocklist == NULL) - cloog_die("memory overflow.\n"); - - /* We set the various fields with default values. */ - blocklist->block = NULL ; - blocklist->next = NULL ; - - return blocklist ; -} - - -/** - * cloog_block_list_alloc function: - * This function allocates the memory space for a CloogBlockList structure and - * sets its fields with those given as input. Then it returns a pointer to the - * allocated space. - * - block is the block element of the list node, - ** - * - June 11th 2005: first version. - * - November 21th 2005: use of cloog_block_list_malloc. - */ -CloogBlockList * cloog_block_list_alloc(CloogBlock * block) -{ CloogBlockList * blocklist ; - - /* Block list node allocation. */ - blocklist = cloog_block_list_malloc() ; - - blocklist->block = block ; - blocklist->block->references ++ ; /* The block has a new reference to it. */ - blocklist->next = NULL ; - - return blocklist ; -} - - -/** - * cloog_block_copy function: - * This function returns a copy of a CloogBlock structure 'block'. To save - * memory this is not a memory copy but we increment a counter of active - * references inside the structure, then return a pointer to that structure. - */ -CloogBlock * cloog_block_copy(CloogBlock * block) -{ if (block == NULL) - return NULL ; - - block->references ++ ; - return block ; -} - - -/** - * cloog_block_merge function: - * this function adds at the end of the statement list of the block 'block', - * the statement list of the block 'merged'. Then the CloogBlock structure - * of 'merged' is freed (obviously not its statement list that is now - * included in 'block'). - * - June 11th 2005: first version. - */ -void cloog_block_merge(CloogBlock * block, CloogBlock * merged) -{ CloogStatement * statement ; - - if ((block == NULL) || (merged == NULL)) - return ; - - if (block->statement != NULL) - { statement = block->statement ; - - while (statement->next != NULL) - statement = statement->next ; - - statement->next = merged->statement ; - } - else - block->statement = merged->statement ; - - merged->statement = NULL; - cloog_block_free(merged); -} - - - - - - - - - - diff --git a/cloog-0.17.0/source/clast.c b/cloog-0.17.0/source/clast.c deleted file mode 100644 index 0b67532..0000000 --- a/cloog-0.17.0/source/clast.c +++ /dev/null @@ -1,1894 +0,0 @@ -#include -#include -#include -#include "../include/cloog/cloog.h" - -#define ALLOC(type) (type*)malloc(sizeof(type)) -#define ALLOCN(type,n) (type*)malloc((n)*sizeof(type)) - -/** - * CloogInfos structure: - * this structure contains all the informations necessary for pretty printing, - * they come from the original CloogProgram structure (language, names), from - * genereral options (options) or are built only for pretty printing (stride). - * This structure is mainly there to reduce the number of function parameters, - * since most pprint.c functions need most of its field. - */ -struct clooginfos { - CloogState *state; /**< State. */ - CloogStride **stride; - int stride_level; /**< Number of valid entries in stride array. */ - int nb_scattdims ; /**< Scattering dimension number. */ - int * scaldims ; /**< Boolean array saying whether a given - * scattering dimension is scalar or not. - */ - CloogNames * names ; /**< Names of iterators and parameters. */ - CloogOptions * options ; /**< Options on CLooG's behaviour. */ - CloogEqualities *equal; /**< Matrix of equalities. */ -} ; - -typedef struct clooginfos CloogInfos ; - -static int clast_expr_cmp(struct clast_expr *e1, struct clast_expr *e2); -static int clast_term_cmp(struct clast_term *t1, struct clast_term *t2); -static int clast_binary_cmp(struct clast_binary *b1, struct clast_binary *b2); -static int clast_reduction_cmp(struct clast_reduction *r1, - struct clast_reduction *r2); - -static struct clast_expr *clast_expr_copy(struct clast_expr *e); - -static int clast_equal_add(CloogEqualities *equal, - CloogConstraintSet *constraints, - int level, CloogConstraint *constraint, - CloogInfos *infos); - -static struct clast_stmt *clast_equal(int level, CloogInfos *infos); -static struct clast_expr *clast_minmax(CloogConstraintSet *constraints, - int level, int max, int guard, - int lower_bound, int no_earlier, - CloogInfos *infos); -static void insert_guard(CloogConstraintSet *constraints, int level, - struct clast_stmt ***next, CloogInfos *infos); -static int insert_modulo_guard(CloogConstraint *upper, - CloogConstraint *lower, int level, - struct clast_stmt ***next, CloogInfos *infos); -static int insert_equation(CloogDomain *domain, CloogConstraint *upper, - CloogConstraint *lower, int level, - struct clast_stmt ***next, CloogInfos *infos); -static int insert_for(CloogDomain *domain, CloogConstraintSet *constraints, - int level, int otl, struct clast_stmt ***next, - CloogInfos *infos); -static void insert_block(CloogDomain *domain, CloogBlock *block, int level, - struct clast_stmt ***next, CloogInfos *infos); -static void insert_loop(CloogLoop * loop, int level, - struct clast_stmt ***next, CloogInfos *infos); - - -struct clast_name *new_clast_name(const char *name) -{ - struct clast_name *n = malloc(sizeof(struct clast_name)); - n->expr.type = clast_expr_name; - n->name = name; - return n; -} - -struct clast_term *new_clast_term(cloog_int_t c, struct clast_expr *v) -{ - struct clast_term *t = malloc(sizeof(struct clast_term)); - t->expr.type = clast_expr_term; - cloog_int_init(t->val); - cloog_int_set(t->val, c); - t->var = v; - return t; -} - -struct clast_binary *new_clast_binary(enum clast_bin_type t, - struct clast_expr *lhs, cloog_int_t rhs) -{ - struct clast_binary *b = malloc(sizeof(struct clast_binary)); - b->expr.type = clast_expr_bin; - b->type = t; - b->LHS = lhs; - cloog_int_init(b->RHS); - cloog_int_set(b->RHS, rhs); - return b; -} - -struct clast_reduction *new_clast_reduction(enum clast_red_type t, int n) -{ - int i; - struct clast_reduction *r; - r = malloc(sizeof(struct clast_reduction)+(n-1)*sizeof(struct clast_expr *)); - r->expr.type = clast_expr_red; - r->type = t; - r->n = n; - for (i = 0; i < n; ++i) - r->elts[i] = NULL; - return r; -} - -static void free_clast_root(struct clast_stmt *s); - -const struct clast_stmt_op stmt_root = { free_clast_root }; - -static void free_clast_root(struct clast_stmt *s) -{ - struct clast_root *r = (struct clast_root *)s; - assert(CLAST_STMT_IS_A(s, stmt_root)); - cloog_names_free(r->names); - free(r); -} - -struct clast_root *new_clast_root(CloogNames *names) -{ - struct clast_root *r = malloc(sizeof(struct clast_root)); - r->stmt.op = &stmt_root; - r->stmt.next = NULL; - r->names = cloog_names_copy(names); - return r; -} - -static void free_clast_assignment(struct clast_stmt *s); - -const struct clast_stmt_op stmt_ass = { free_clast_assignment }; - -static void free_clast_assignment(struct clast_stmt *s) -{ - struct clast_assignment *a = (struct clast_assignment *)s; - assert(CLAST_STMT_IS_A(s, stmt_ass)); - free_clast_expr(a->RHS); - free(a); -} - -struct clast_assignment *new_clast_assignment(const char *lhs, - struct clast_expr *rhs) -{ - struct clast_assignment *a = malloc(sizeof(struct clast_assignment)); - a->stmt.op = &stmt_ass; - a->stmt.next = NULL; - a->LHS = lhs; - a->RHS = rhs; - return a; -} - -static void free_clast_user_stmt(struct clast_stmt *s); - -const struct clast_stmt_op stmt_user = { free_clast_user_stmt }; - -static void free_clast_user_stmt(struct clast_stmt *s) -{ - struct clast_user_stmt *u = (struct clast_user_stmt *)s; - assert(CLAST_STMT_IS_A(s, stmt_user)); - cloog_domain_free(u->domain); - cloog_statement_free(u->statement); - cloog_clast_free(u->substitutions); - free(u); -} - -struct clast_user_stmt *new_clast_user_stmt(CloogDomain *domain, - CloogStatement *stmt, struct clast_stmt *subs) -{ - struct clast_user_stmt *u = malloc(sizeof(struct clast_user_stmt)); - u->stmt.op = &stmt_user; - u->stmt.next = NULL; - u->domain = cloog_domain_copy(domain); - u->statement = cloog_statement_copy(stmt); - u->substitutions = subs; - return u; -} - -static void free_clast_block(struct clast_stmt *b); - -const struct clast_stmt_op stmt_block = { free_clast_block }; - -static void free_clast_block(struct clast_stmt *s) -{ - struct clast_block *b = (struct clast_block *)s; - assert(CLAST_STMT_IS_A(s, stmt_block)); - cloog_clast_free(b->body); - free(b); -} - -struct clast_block *new_clast_block() -{ - struct clast_block *b = malloc(sizeof(struct clast_block)); - b->stmt.op = &stmt_block; - b->stmt.next = NULL; - b->body = NULL; - return b; -} - -static void free_clast_for(struct clast_stmt *s); - -const struct clast_stmt_op stmt_for = { free_clast_for }; - -static void free_clast_for(struct clast_stmt *s) -{ - struct clast_for *f = (struct clast_for *)s; - assert(CLAST_STMT_IS_A(s, stmt_for)); - cloog_domain_free(f->domain); - free_clast_expr(f->LB); - free_clast_expr(f->UB); - cloog_int_clear(f->stride); - cloog_clast_free(f->body); - free(f); -} - -struct clast_for *new_clast_for(CloogDomain *domain, const char *it, - struct clast_expr *LB, struct clast_expr *UB, - CloogStride *stride) -{ - struct clast_for *f = malloc(sizeof(struct clast_for)); - f->stmt.op = &stmt_for; - f->stmt.next = NULL; - f->domain = cloog_domain_copy(domain); - f->iterator = it; - f->LB = LB; - f->UB = UB; - f->body = NULL; - cloog_int_init(f->stride); - if (stride) - cloog_int_set(f->stride, stride->stride); - else - cloog_int_set_si(f->stride, 1); - return f; -} - -static void free_clast_guard(struct clast_stmt *s); - -const struct clast_stmt_op stmt_guard = { free_clast_guard }; - -static void free_clast_guard(struct clast_stmt *s) -{ - int i; - struct clast_guard *g = (struct clast_guard *)s; - assert(CLAST_STMT_IS_A(s, stmt_guard)); - cloog_clast_free(g->then); - for (i = 0; i < g->n; ++i) { - free_clast_expr(g->eq[i].LHS); - free_clast_expr(g->eq[i].RHS); - } - free(g); -} - -struct clast_guard *new_clast_guard(int n) -{ - int i; - struct clast_guard *g = malloc(sizeof(struct clast_guard) + - (n-1) * sizeof(struct clast_equation)); - g->stmt.op = &stmt_guard; - g->stmt.next = NULL; - g->then = NULL; - g->n = n; - for (i = 0; i < n; ++i) { - g->eq[i].LHS = NULL; - g->eq[i].RHS = NULL; - } - return g; -} - -void free_clast_name(struct clast_name *n) -{ - free(n); -} - -void free_clast_term(struct clast_term *t) -{ - cloog_int_clear(t->val); - free_clast_expr(t->var); - free(t); -} - -void free_clast_binary(struct clast_binary *b) -{ - cloog_int_clear(b->RHS); - free_clast_expr(b->LHS); - free(b); -} - -void free_clast_reduction(struct clast_reduction *r) -{ - int i; - for (i = 0; i < r->n; ++i) - free_clast_expr(r->elts[i]); - free(r); -} - -void free_clast_expr(struct clast_expr *e) -{ - if (!e) - return; - switch (e->type) { - case clast_expr_name: - free_clast_name((struct clast_name*) e); - break; - case clast_expr_term: - free_clast_term((struct clast_term*) e); - break; - case clast_expr_red: - free_clast_reduction((struct clast_reduction*) e); - break; - case clast_expr_bin: - free_clast_binary((struct clast_binary*) e); - break; - default: - assert(0); - } -} - -void free_clast_stmt(struct clast_stmt *s) -{ - assert(s->op); - assert(s->op->free); - s->op->free(s); -} - -void cloog_clast_free(struct clast_stmt *s) -{ - struct clast_stmt *next; - while (s) { - next = s->next; - free_clast_stmt(s); - s = next; - } -} - -static int clast_name_cmp(struct clast_name *n1, struct clast_name *n2) -{ - return n1->name == n2->name ? 0 : strcmp(n1->name, n2->name); -} - -static int clast_term_cmp(struct clast_term *t1, struct clast_term *t2) -{ - int c; - if (!t1->var && t2->var) - return -1; - if (t1->var && !t2->var) - return 1; - c = clast_expr_cmp(t1->var, t2->var); - if (c) - return c; - return cloog_int_cmp(t1->val, t2->val); -} - -static int clast_binary_cmp(struct clast_binary *b1, struct clast_binary *b2) -{ - int c; - - if (b1->type != b2->type) - return b1->type - b2->type; - if ((c = cloog_int_cmp(b1->RHS, b2->RHS))) - return c; - return clast_expr_cmp(b1->LHS, b2->LHS); -} - -static int clast_reduction_cmp(struct clast_reduction *r1, struct clast_reduction *r2) -{ - int i; - int c; - - if (r1->n == 1 && r2->n == 1) - return clast_expr_cmp(r1->elts[0], r2->elts[0]); - if (r1->type != r2->type) - return r1->type - r2->type; - if (r1->n != r2->n) - return r1->n - r2->n; - for (i = 0; i < r1->n; ++i) - if ((c = clast_expr_cmp(r1->elts[i], r2->elts[i]))) - return c; - return 0; -} - -static int clast_expr_cmp(struct clast_expr *e1, struct clast_expr *e2) -{ - if (!e1 && !e2) - return 0; - if (!e1) - return -1; - if (!e2) - return 1; - if (e1->type != e2->type) - return e1->type - e2->type; - switch (e1->type) { - case clast_expr_name: - return clast_name_cmp((struct clast_name*) e1, - (struct clast_name*) e2); - case clast_expr_term: - return clast_term_cmp((struct clast_term*) e1, - (struct clast_term*) e2); - case clast_expr_bin: - return clast_binary_cmp((struct clast_binary*) e1, - (struct clast_binary*) e2); - case clast_expr_red: - return clast_reduction_cmp((struct clast_reduction*) e1, - (struct clast_reduction*) e2); - default: - assert(0); - } -} - -int clast_expr_equal(struct clast_expr *e1, struct clast_expr *e2) -{ - return clast_expr_cmp(e1, e2) == 0; -} - -/** - * Return 1 is both expressions are constant terms and e1 is bigger than e2. - */ -int clast_expr_is_bigger_constant(struct clast_expr *e1, struct clast_expr *e2) -{ - struct clast_term *t1, *t2; - struct clast_reduction *r; - - if (!e1 || !e2) - return 0; - if (e1->type == clast_expr_red) { - r = (struct clast_reduction *)e1; - return r->n == 1 && clast_expr_is_bigger_constant(r->elts[0], e2); - } - if (e2->type == clast_expr_red) { - r = (struct clast_reduction *)e2; - return r->n == 1 && clast_expr_is_bigger_constant(e1, r->elts[0]); - } - if (e1->type != clast_expr_term || e2->type != clast_expr_term) - return 0; - t1 = (struct clast_term *)e1; - t2 = (struct clast_term *)e2; - if (t1->var || t2->var) - return 0; - return cloog_int_gt(t1->val, t2->val); -} - -static int qsort_expr_cmp(const void *p1, const void *p2) -{ - return clast_expr_cmp(*(struct clast_expr **)p1, *(struct clast_expr **)p2); -} - -static void clast_reduction_sort(struct clast_reduction *r) -{ - qsort(&r->elts[0], r->n, sizeof(struct clast_expr *), qsort_expr_cmp); -} - -static int qsort_eq_cmp(const void *p1, const void *p2) -{ - struct clast_equation *eq1 = (struct clast_equation *)p1; - struct clast_equation *eq2 = (struct clast_equation *)p2; - int cmp; - - cmp = clast_expr_cmp(eq1->LHS, eq2->LHS); - if (cmp) - return cmp; - - cmp = clast_expr_cmp(eq1->RHS, eq2->RHS); - if (cmp) - return cmp; - - return eq1->sign - eq2->sign; -} - -/** - * Sort equations in a clast_guard. - */ -static void clast_guard_sort(struct clast_guard *g) -{ - qsort(&g->eq[0], g->n, sizeof(struct clast_equation), qsort_eq_cmp); -} - - -/** - * Construct a (deep) copy of an expression clast. - */ -static struct clast_expr *clast_expr_copy(struct clast_expr *e) -{ - if (!e) - return NULL; - switch (e->type) { - case clast_expr_name: { - struct clast_name* n = (struct clast_name*) e; - return &new_clast_name(n->name)->expr; - } - case clast_expr_term: { - struct clast_term* t = (struct clast_term*) e; - return &new_clast_term(t->val, clast_expr_copy(t->var))->expr; - } - case clast_expr_red: { - int i; - struct clast_reduction *r = (struct clast_reduction*) e; - struct clast_reduction *r2 = new_clast_reduction(r->type, r->n); - for (i = 0; i < r->n; ++i) - r2->elts[i] = clast_expr_copy(r->elts[i]); - return &r2->expr; - } - case clast_expr_bin: { - struct clast_binary *b = (struct clast_binary*) e; - return &new_clast_binary(b->type, clast_expr_copy(b->LHS), b->RHS)->expr; - } - default: - assert(0); - } -} - - -/****************************************************************************** - * Equalities spreading functions * - ******************************************************************************/ - - -/** - * clast_equal_allow function: - * This function checks whether the options allow us to spread the equality or - * not. It returns 1 if so, 0 otherwise. - * - equal is the matrix of equalities, - * - level is the column number in equal of the element which is 'equal to', - * - line is the line number in equal of the constraint we want to study, - * - the infos structure gives the user all options on code printing and more. - ** - * - October 27th 2005: first version (extracted from old pprint_equal_add). - */ -static int clast_equal_allow(CloogEqualities *equal, int level, int line, - CloogInfos *infos) -{ - if (level < infos->options->fsp) - return 0 ; - - if ((cloog_equal_type(equal, level) == EQTYPE_EXAFFINE) && - !infos->options->esp) - return 0 ; - - return 1 ; -} - - -/** - * clast_equal_add function: - * This function updates the row (level-1) of the equality matrix (equal) with - * the row that corresponds to the row (line) of the matrix (matrix). It returns - * 1 if the row can be updated, 0 otherwise. - * - equal is the matrix of equalities, - * - matrix is the matrix of constraints, - * - level is the column number in matrix of the element which is 'equal to', - * - line is the line number in matrix of the constraint we want to study, - * - the infos structure gives the user all options on code printing and more. - */ -static int clast_equal_add(CloogEqualities *equal, - CloogConstraintSet *constraints, - int level, CloogConstraint *constraint, - CloogInfos *infos) -{ - cloog_equal_add(equal, constraints, level, constraint, - infos->names->nb_parameters); - - return clast_equal_allow(equal, level, level-1, infos); -} - - - -/** - * clast_equal function: - * This function prints the substitution data of a statement into a clast_stmt. - * Using this function instead of pprint_equal is useful for generating - * a compilable pseudo-code by using preprocessor macro for each statement. - * By opposition to pprint_equal, the result is less human-readable. For - * instance this function will print (i,i+3,k,3) where pprint_equal would - * return (j=i+3,l=3). - * - level is the number of loops enclosing the statement, - * - the infos structure gives the user all options on code printing and more. - ** - * - March 12th 2004: first version. - * - November 21th 2005: (debug) now works well with GMP version. - */ -static struct clast_stmt *clast_equal(int level, CloogInfos *infos) -{ - int i ; - struct clast_expr *e; - struct clast_stmt *a = NULL; - struct clast_stmt **next = &a; - CloogEqualities *equal = infos->equal; - CloogConstraint *equal_constraint; - - for (i=infos->names->nb_scattering;inames); - cloog_constraint_release(equal_constraint); - } else { - e = &new_clast_term(infos->state->one, &new_clast_name( - cloog_names_name_at_level(infos->names, i+1))->expr)->expr; - } - *next = &new_clast_assignment(NULL, e)->stmt; - next = &(*next)->next; - } - - return a; -} - - -/** - * clast_bound_from_constraint function: - * This function returns a clast_expr containing the printing of the - * 'right part' of a constraint according to an element. - * For instance, for the constraint -3*i + 2*j - M >=0 and the element j, - * we have j >= (3*i + M)/2. As we are looking for integral solutions, this - * function should return 'ceild(3*i+M,2)'. - * - matrix is the polyhedron containing all the constraints, - * - line_num is the line number in domain of the constraint we want to print, - * - level is the column number in domain of the element we want to use, - * - names structure gives the user some options about code printing, - * the number of parameters in domain (nb_par), and the arrays of iterator - * names and parameters (iters and params). - ** - * - November 2nd 2001: first version. - * - June 27th 2003: 64 bits version ready. - */ -struct clast_expr *clast_bound_from_constraint(CloogConstraint *constraint, - int level, CloogNames *names) -{ - int i, sign, nb_elts=0, len; - cloog_int_t *line, numerator, denominator, temp, division; - struct clast_expr *e = NULL; - struct cloog_vec *line_vector; - - len = cloog_constraint_total_dimension(constraint) + 2; - line_vector = cloog_vec_alloc(len); - line = line_vector->p; - cloog_constraint_copy_coefficients(constraint, line+1); - cloog_int_init(temp); - cloog_int_init(numerator); - cloog_int_init(denominator); - - if (!cloog_int_is_zero(line[level])) { - struct clast_reduction *r; - /* Maybe we need to invert signs in such a way that the element sign is>0.*/ - sign = -cloog_int_sgn(line[level]); - - for (i = 1, nb_elts = 0; i <= len - 1; ++i) - if (i != level && !cloog_int_is_zero(line[i])) - nb_elts++; - r = new_clast_reduction(clast_red_sum, nb_elts); - nb_elts = 0; - - /* First, we have to print the iterators and the parameters. */ - for (i = 1; i <= len - 2; i++) { - struct clast_expr *v; - - if (i == level || cloog_int_is_zero(line[i])) - continue; - - v = cloog_constraint_variable_expr(constraint, i, names); - - if (sign == -1) - cloog_int_neg(temp,line[i]); - else - cloog_int_set(temp,line[i]); - - r->elts[nb_elts++] = &new_clast_term(temp, v)->expr; - } - - if (sign == -1) { - cloog_int_neg(numerator, line[len - 1]); - cloog_int_set(denominator, line[level]); - } - else { - cloog_int_set(numerator, line[len - 1]); - cloog_int_neg(denominator, line[level]); - } - - /* Finally, the constant, and the final printing. */ - if (nb_elts) { - if (!cloog_int_is_zero(numerator)) - r->elts[nb_elts++] = &new_clast_term(numerator, NULL)->expr; - - if (!cloog_int_is_one(line[level]) && !cloog_int_is_neg_one(line[level])) - { if (!cloog_constraint_is_equality(constraint)) - { if (cloog_int_is_pos(line[level])) - e = &new_clast_binary(clast_bin_cdiv, &r->expr, denominator)->expr; - else - e = &new_clast_binary(clast_bin_fdiv, &r->expr, denominator)->expr; - } else - e = &new_clast_binary(clast_bin_div, &r->expr, denominator)->expr; - } - else - e = &r->expr; - } else { - free_clast_reduction(r); - if (cloog_int_is_zero(numerator)) - e = &new_clast_term(numerator, NULL)->expr; - else - { if (!cloog_int_is_one(denominator)) - { if (!cloog_constraint_is_equality(constraint)) { /* useful? */ - if (cloog_int_is_divisible_by(numerator, denominator)) { - cloog_int_divexact(temp, numerator, denominator); - e = &new_clast_term(temp, NULL)->expr; - } - else { - cloog_int_init(division); - cloog_int_tdiv_q(division, numerator, denominator); - if (cloog_int_is_neg(numerator)) { - if (cloog_int_is_pos(line[level])) { - /* nb<0 need max */ - e = &new_clast_term(division, NULL)->expr; - } else { - /* nb<0 need min */ - cloog_int_sub_ui(temp, division, 1); - e = &new_clast_term(temp, NULL)->expr; - } - } - else - { if (cloog_int_is_pos(line[level])) - { /* nb>0 need max */ - cloog_int_add_ui(temp, division, 1); - e = &new_clast_term(temp, NULL)->expr; - } - else - /* nb>0 need min */ - e = &new_clast_term(division, NULL)->expr; - } - cloog_int_clear(division); - } - } - else - e = &new_clast_binary(clast_bin_div, - &new_clast_term(numerator, NULL)->expr, - denominator)->expr; - } - else - e = &new_clast_term(numerator, NULL)->expr; - } - } - } - - cloog_vec_free(line_vector); - - cloog_int_clear(temp); - cloog_int_clear(numerator); - cloog_int_clear(denominator); - - return e; -} - - -/* Temporary structure for communication between clast_minmax and - * its cloog_constraint_set_foreach_constraint callback functions. - */ -struct clast_minmax_data { - int level; - int max; - int guard; - int lower_bound; - int no_earlier; - CloogInfos *infos; - int n; - struct clast_reduction *r; -}; - - -/* Should constraint "c" be considered by clast_minmax? - * - * If d->no_earlier is set, then the constraint may not involve - * any earlier variables. - */ -static int valid_bound(CloogConstraint *c, struct clast_minmax_data *d) -{ - int i; - - if (d->max && !cloog_constraint_is_lower_bound(c, d->level - 1)) - return 0; - if (!d->max && !cloog_constraint_is_upper_bound(c, d->level - 1)) - return 0; - if (cloog_constraint_is_equality(c)) - return 0; - if (d->guard && cloog_constraint_involves(c, d->guard - 1)) - return 0; - - if (d->no_earlier) - for (i = 0; i < d->level - 1; ++i) - if (cloog_constraint_involves(c, i)) - return 0; - - return 1; -} - - -/* Increment n for each bound that should be considered by clast_minmax. - */ -static int count_bounds(CloogConstraint *c, void *user) -{ - struct clast_minmax_data *d = (struct clast_minmax_data *) user; - - if (!valid_bound(c, d)) - return 0; - - d->n++; - - return 0; -} - - -/* Update the given lower bound based on stride information, - * for those cases where the stride offset is represented by - * a constraint. - * Note that cloog_loop_stride may have already performed a - * similar update of the lower bounds, but the updated lower - * bounds may have been eliminated because they are redundant - * by definition. On the other hand, performing the update - * on an already updated constraint is an identity operation - * and is therefore harmless. - */ -static CloogConstraint *update_lower_bound_c(CloogConstraint *c, int level, - CloogStride *stride) -{ - if (!stride->constraint) - return c; - return cloog_constraint_stride_lower_bound(c, level, stride); -} - - -/* Update the given lower bound based on stride information. - * If the stride offset is represented by a constraint, - * then we have already performed the update in update_lower_bound_c. - * Otherwise, the original lower bound is known to be a constant. - * If the bound has already been updated and it just happens - * to be a constant, then this function performs an identity - * operation on the constant. - */ -static void update_lower_bound(struct clast_expr *expr, int level, - CloogStride *stride) -{ - struct clast_term *t; - if (stride->constraint) - return; - if (expr->type != clast_expr_term) - return; - t = (struct clast_term *)expr; - if (t->var) - return; - cloog_int_sub(t->val, t->val, stride->offset); - cloog_int_cdiv_q(t->val, t->val, stride->stride); - cloog_int_mul(t->val, t->val, stride->stride); - cloog_int_add(t->val, t->val, stride->offset); -} - - -/* Add all relevant bounds to r->elts and update lower bounds - * based on stride information. - */ -static int collect_bounds(CloogConstraint *c, void *user) -{ - struct clast_minmax_data *d = (struct clast_minmax_data *) user; - - if (!valid_bound(c, d)) - return 0; - - c = cloog_constraint_copy(c); - - if (d->lower_bound && d->infos->stride[d->level - 1]) - c = update_lower_bound_c(c, d->level, d->infos->stride[d->level - 1]); - - d->r->elts[d->n] = clast_bound_from_constraint(c, d->level, - d->infos->names); - if (d->lower_bound && d->infos->stride[d->level - 1]) { - update_lower_bound(d->r->elts[d->n], d->level, - d->infos->stride[d->level - 1]); - } - - cloog_constraint_release(c); - - d->n++; - - return 0; -} - - -/** - * clast_minmax function: - * This function returns a clast_expr containing the printing of a minimum or a - * maximum of the 'right parts' of all constraints according to an element. - * For instance consider the constraints: - * -3*i +2*j -M >= 0 - * 2*i +j >= 0 - * -i -j +2*M >= 0 - * if we are looking for the minimum for the element j, the function should - * return 'max(ceild(3*i+M,2),-2*i)'. - * - constraints is the constraints, - * - level is the column number in domain of the element we want to use, - * - max is a boolean set to 1 if we are looking for a maximum, 0 for a minimum, - * - guard is set to 0 if there is no guard, and set to the level of the element - * with a guard otherwise (then the function gives the max or the min only - * for the constraint where the guarded coefficient is 0), - * - lower is set to 1 if the maximum is to be used a lower bound on a loop - * - no_earlier is set if no constraints should be used that involve - * earlier dimensions, - * - the infos structure gives the user some options about code printing, - * the number of parameters in domain (nb_par), and the arrays of iterator - * names and parameters (iters and params). - ** - * - November 2nd 2001: first version. - */ -static struct clast_expr *clast_minmax(CloogConstraintSet *constraints, - int level, int max, int guard, - int lower_bound, int no_earlier, - CloogInfos *infos) -{ - struct clast_minmax_data data = { level, max, guard, lower_bound, - no_earlier, infos }; - - data.n = 0; - - cloog_constraint_set_foreach_constraint(constraints, count_bounds, &data); - - if (!data.n) - return NULL; - data.r = new_clast_reduction(max ? clast_red_max : clast_red_min, data.n); - - data.n = 0; - cloog_constraint_set_foreach_constraint(constraints, collect_bounds, &data); - - clast_reduction_sort(data.r); - return &data.r->expr; -} - - -/** - * Insert modulo guards defined by existentially quantified dimensions, - * not involving the given level. - * - * This function is called from within insert_guard. - * Any constraint used in constructing a modulo guard is removed - * from the constraint set to avoid insert_guard - * adding a duplicate (pair of) constraint(s). - * - * Return the updated CloogConstraintSet. - */ -static CloogConstraintSet *insert_extra_modulo_guards( - CloogConstraintSet *constraints, int level, - struct clast_stmt ***next, CloogInfos *infos) -{ - int i; - int nb_iter; - int total_dim; - CloogConstraint *upper, *lower; - - total_dim = cloog_constraint_set_total_dimension(constraints); - nb_iter = cloog_constraint_set_n_iterators(constraints, - infos->names->nb_parameters); - - for (i = total_dim - infos->names->nb_parameters; i >= nb_iter + 1; i--) { - if (cloog_constraint_is_valid(upper = - cloog_constraint_set_defining_equality(constraints, i))) { - if (!level || (nb_iter < level) || - !cloog_constraint_involves(upper, level-1)) { - insert_modulo_guard(upper, - cloog_constraint_invalid(), i, next, infos); - constraints = cloog_constraint_set_drop_constraint(constraints, - upper); - } - cloog_constraint_release(upper); - } else if (cloog_constraint_is_valid(upper = - cloog_constraint_set_defining_inequalities(constraints, - i, &lower, infos->names->nb_parameters))) { - if (!level || (nb_iter < level) || - !cloog_constraint_involves(upper, level-1)) { - insert_modulo_guard(upper, lower, i, next, infos); - constraints = cloog_constraint_set_drop_constraint(constraints, - upper); - constraints = cloog_constraint_set_drop_constraint(constraints, - lower); - } - cloog_constraint_release(upper); - cloog_constraint_release(lower); - } - } - - return constraints; -} - - -/* Temporary structure for communication between insert_guard and - * its cloog_constraint_set_foreach_constraint callback function. - */ -struct clast_guard_data { - int level; - CloogInfos *infos; - int n; - int i; - int nb_iter; - CloogConstraintSet *copy; - struct clast_guard *g; - - int min; - int max; -}; - - -static int guard_count_bounds(CloogConstraint *c, void *user) -{ - struct clast_guard_data *d = (struct clast_guard_data *) user; - - d->n++; - - return 0; -} - - -/* Insert a guard, if necesessary, for constraint j. - * - * If the constraint involves any earlier dimensions, then we have - * already considered it during a previous iteration over the constraints. - * - * If we have already generated a min [max] for the current level d->i - * and if the current constraint is an upper [lower] bound, then we - * can skip the constraint as it will already have been used - * in that previously generated min [max]. - */ -static int insert_guard_constraint(CloogConstraint *j, void *user) -{ - int i; - struct clast_guard_data *d = (struct clast_guard_data *) user; - int minmax = -1; - int individual_constraint; - struct clast_expr *v; - struct clast_term *t; - - if (!cloog_constraint_involves(j, d->i - 1)) - return 0; - - for (i = 0; i < d->i - 1; ++i) - if (cloog_constraint_involves(j, i)) - return 0; - - if (d->level && d->nb_iter >= d->level && - cloog_constraint_involves(j, d->level - 1)) - return 0; - - individual_constraint = !d->level || cloog_constraint_is_equality(j); - if (!individual_constraint) { - if (d->max && cloog_constraint_is_lower_bound(j, d->i - 1)) - return 0; - if (d->min && cloog_constraint_is_upper_bound(j, d->i - 1)) - return 0; - } - - v = cloog_constraint_variable_expr(j, d->i, d->infos->names); - d->g->eq[d->n].LHS = &(t = new_clast_term(d->infos->state->one, v))->expr; - if (individual_constraint) { - /* put the "denominator" in the LHS */ - cloog_constraint_coefficient_get(j, d->i - 1, &t->val); - cloog_constraint_coefficient_set(j, d->i - 1, d->infos->state->one); - if (cloog_int_is_neg(t->val)) { - cloog_int_neg(t->val, t->val); - cloog_constraint_coefficient_set(j, d->i - 1, d->infos->state->negone); - } - if (d->level || cloog_constraint_is_equality(j)) - d->g->eq[d->n].sign = 0; - else if (cloog_constraint_is_lower_bound(j, d->i - 1)) - d->g->eq[d->n].sign = 1; - else - d->g->eq[d->n].sign = -1; - d->g->eq[d->n].RHS = clast_bound_from_constraint(j, d->i, d->infos->names); - } else { - int guarded; - - if (cloog_constraint_is_lower_bound(j, d->i - 1)) { - minmax = 1; - d->max = 1; - d->g->eq[d->n].sign = 1; - } else { - minmax = 0; - d->min = 1; - d->g->eq[d->n].sign = -1; - } - - guarded = (d->nb_iter >= d->level) ? d->level : 0 ; - d->g->eq[d->n].RHS = clast_minmax(d->copy, d->i, minmax, guarded, 0, 1, - d->infos); - } - d->n++; - - return 0; -} - - -/** - * insert_guard function: - * This function inserts a guard in the clast. - * A guard on an element (level) is : - * -> the conjunction of all the existing constraints where the coefficient of - * this element is 0 if the element is an iterator, - * -> the conjunction of all the existing constraints if the element isn't an - * iterator. - * For instance, considering these constraints and the element j: - * -3*i +2*j -M >= 0 - * 2*i +M >= 0 - * this function should return 'if (2*i+M>=0) {'. - * - matrix is the polyhedron containing all the constraints, - * - level is the column number of the element in matrix we want to use, - * - the infos structure gives the user some options about code printing, - * the number of parameters in matrix (nb_par), and the arrays of iterator - * names and parameters (iters and params). - ** - * - November 3rd 2001: first version. - * - November 14th 2001: a lot of 'purifications'. - * - July 31th 2002: (debug) some guard parts are no more redundants. - * - August 12th 2002: polyhedra union ('or' conditions) are now supported. - * - October 27th 2005: polyhedra union ('or' conditions) are no more supported - * (the need came from loop_simplify that may result in - * domain unions, now it should be fixed directly in - * cloog_loop_simplify). - */ -static void insert_guard(CloogConstraintSet *constraints, int level, - struct clast_stmt ***next, CloogInfos *infos) -{ - int total_dim; - struct clast_guard_data data = { level, infos, 0 }; - - if (!constraints) - return; - - data.copy = cloog_constraint_set_copy(constraints); - - data.copy = insert_extra_modulo_guards(data.copy, level, next, infos); - - cloog_constraint_set_foreach_constraint(constraints, - guard_count_bounds, &data); - - data.g = new_clast_guard(data.n); - data.n = 0; - - /* Well, it looks complicated because I wanted to have a particular, more - * readable, ordering, obviously this function may be far much simpler ! - */ - data.nb_iter = cloog_constraint_set_n_iterators(constraints, - infos->names->nb_parameters); - - /* We search for guard parts. */ - total_dim = cloog_constraint_set_total_dimension(constraints); - for (data.i = 1; data.i <= total_dim; data.i++) { - data.min = 0; - data.max = 0; - cloog_constraint_set_foreach_constraint(data.copy, - insert_guard_constraint, &data); - } - - cloog_constraint_set_free(data.copy); - - data.g->n = data.n; - if (data.n) { - clast_guard_sort(data.g); - **next = &data.g->stmt; - *next = &data.g->then; - } else - free_clast_stmt(&data.g->stmt); -} - -/** - * Check if the constant "cst" satisfies the modulo guard that - * would be introduced by insert_computed_modulo_guard. - * The constant is assumed to have been reduced prior to calling - * this function. - */ -static int constant_modulo_guard_is_satisfied(CloogConstraint *lower, - cloog_int_t bound, cloog_int_t cst) -{ - if (cloog_constraint_is_valid(lower)) - return cloog_int_le(cst, bound); - else - return cloog_int_is_zero(cst); -} - -/** - * Insert a modulo guard "r % mod == 0" or "r % mod <= bound", - * depending on whether lower represents a valid constraint. - */ -static void insert_computed_modulo_guard(struct clast_reduction *r, - CloogConstraint *lower, cloog_int_t mod, cloog_int_t bound, - struct clast_stmt ***next) -{ - struct clast_expr *e; - struct clast_guard *g; - - e = &new_clast_binary(clast_bin_mod, &r->expr, mod)->expr; - g = new_clast_guard(1); - if (!cloog_constraint_is_valid(lower)) { - g->eq[0].LHS = e; - cloog_int_set_si(bound, 0); - g->eq[0].RHS = &new_clast_term(bound, NULL)->expr; - g->eq[0].sign = 0; - } else { - g->eq[0].LHS = e; - g->eq[0].RHS = &new_clast_term(bound, NULL)->expr; - g->eq[0].sign = -1; - } - - **next = &g->stmt; - *next = &g->then; -} - - -/* Try and eliminate coefficients from a modulo constraint based on - * stride information of an earlier level. - * The modulo of the constraint being constructed is "m". - * The stride information at level "level" is given by "stride" - * and indicated that the iterator i at level "level" is equal to - * some expression modulo stride->stride. - * If stride->stride is a multiple of "m' then i is also equal to - * the expression modulo m and so we can eliminate the coefficient of i. - * - * If stride->constraint is NULL, then i has a constant value modulo m, stored - * stride->offset. We simply multiply this constant with the coefficient - * of i and add the result to the constant term, reducing it modulo m. - * - * If stride->constraint is not NULL, then it is a constraint of the form - * - * e + k i = s a - * - * with s equal to stride->stride, e an expression in terms of the - * parameters and earlier iterators and a some arbitrary expression - * in terms of existentially quantified variables. - * stride->factor is a value f such that f * k = -1 mod s. - * Adding stride->constraint f * c times to the current modulo constraint, - * with c the coefficient of i eliminates i in favor of parameters and - * earlier variables. - */ -static void eliminate_using_stride_constraint(cloog_int_t *line, int len, - int nb_iter, CloogStride *stride, int level, cloog_int_t m) -{ - if (!stride) - return; - if (!cloog_int_is_divisible_by(stride->stride, m)) - return; - - if (stride->constraint) { - int i, s_len; - cloog_int_t t, v; - - cloog_int_init(t); - cloog_int_init(v); - cloog_int_mul(t, line[level], stride->factor); - for (i = 1; i < level; ++i) { - cloog_constraint_coefficient_get(stride->constraint, - i - 1, &v); - cloog_int_addmul(line[i], t, v); - cloog_int_fdiv_r(line[i], line[i], m); - } - s_len = cloog_constraint_total_dimension(stride->constraint)+2; - for (i = nb_iter + 1; i <= len - 2; ++i) { - cloog_constraint_coefficient_get(stride->constraint, - i - (len - s_len) - 1, &v); - cloog_int_addmul(line[i], t, v); - cloog_int_fdiv_r(line[i], line[i], m); - } - cloog_constraint_constant_get(stride->constraint, &v); - cloog_int_addmul(line[len - 1], t, v); - cloog_int_fdiv_r(line[len - 1], line[len - 1], m); - cloog_int_clear(v); - cloog_int_clear(t); - } else { - cloog_int_addmul(line[len - 1], line[level], stride->offset); - cloog_int_fdiv_r(line[len - 1], line[len - 1], m); - } - - cloog_int_set_si(line[level], 0); -} - - -/* Temporary structure for communication between insert_modulo_guard and - * its cloog_constraint_set_foreach_constraint callback function. - */ -struct clast_modulo_guard_data { - CloogConstraint *lower; - int level; - struct clast_stmt ***next; - CloogInfos *infos; - int empty; - cloog_int_t val, bound; -}; - - -/* Insert a modulo guard for constraint c. - * The constraint may be either an equality or an inequality. - * Since this function returns -1, it is only called on a single constraint. - * In case of an inequality, the constraint is usually an upper bound - * on d->level. However, if this variable is an existentially - * quantified variable, the upper bound constraint may get removed - * as trivially holding and then this function is called with - * a lower bound instead. In this case, we need to adjust the constraint - * based on the sum of the constant terms of the lower and upper bound - * stored in d->bound. - */ -static int insert_modulo_guard_constraint(CloogConstraint *c, void *user) -{ - struct clast_modulo_guard_data *d = (struct clast_modulo_guard_data *) user; - int level = d->level; - CloogInfos *infos = d->infos; - int i, nb_elts = 0, len, nb_iter, nb_par; - int constant; - struct cloog_vec *line_vector; - cloog_int_t *line; - - len = cloog_constraint_total_dimension(c) + 2; - nb_par = infos->names->nb_parameters; - nb_iter = len - 2 - nb_par; - - line_vector = cloog_vec_alloc(len); - line = line_vector->p; - cloog_constraint_copy_coefficients(c, line + 1); - - if (cloog_int_is_pos(line[level])) { - cloog_seq_neg(line + 1, line + 1, len - 1); - if (!cloog_constraint_is_equality(c)) - cloog_int_add(line[len - 1], line[len - 1], d->bound); - } - cloog_int_neg(line[level], line[level]); - assert(cloog_int_is_pos(line[level])); - - nb_elts = 0; - for (i = 1; i <= len-1; ++i) { - if (i == level) - continue; - cloog_int_fdiv_r(line[i], line[i], line[level]); - if (cloog_int_is_zero(line[i])) - continue; - if (i == len-1) - continue; - - nb_elts++; - } - - if (nb_elts || !cloog_int_is_zero(line[len-1])) { - struct clast_reduction *r; - const char *name; - - r = new_clast_reduction(clast_red_sum, nb_elts + 1); - nb_elts = 0; - - /* First, the modulo guard : the iterators... */ - i = level - 1; - if (i > infos->stride_level) - i = infos->stride_level; - for (; i >= 1; --i) - eliminate_using_stride_constraint(line, len, nb_iter, - infos->stride[i - 1], i, line[level]); - for (i=1;i<=nb_iter;i++) { - if (i == level || cloog_int_is_zero(line[i])) - continue; - - name = cloog_names_name_at_level(infos->names, i); - - r->elts[nb_elts++] = &new_clast_term(line[i], - &new_clast_name(name)->expr)->expr; - } - - /* ...the parameters... */ - for (i=nb_iter+1;i<=len-2;i++) { - if (cloog_int_is_zero(line[i])) - continue; - - name = infos->names->parameters[i-nb_iter-1] ; - r->elts[nb_elts++] = &new_clast_term(line[i], - &new_clast_name(name)->expr)->expr; - } - - constant = nb_elts == 0; - /* ...the constant. */ - if (!cloog_int_is_zero(line[len-1])) - r->elts[nb_elts++] = &new_clast_term(line[len-1], NULL)->expr; - - /* our initial computation may have been an overestimate */ - r->n = nb_elts; - - if (constant) { - d->empty = !constant_modulo_guard_is_satisfied(d->lower, d->bound, - line[len - 1]); - free_clast_reduction(r); - } else - insert_computed_modulo_guard(r, d->lower, line[level], d->bound, - d->next); - } - - cloog_vec_free(line_vector); - - return -1; -} - - -/** - * insert_modulo_guard: - * This function inserts a modulo guard corresponding to an equality - * or a pair of inequalities. - * Returns 0 if the modulo guard is discovered to be unsatisfiable. - * - * See insert_equation. - * - matrix is the polyhedron containing all the constraints, - * - upper and lower are the line numbers of the constraint in matrix - * we want to print; in particular, if we want to print an equality, - * then lower == -1 and upper is the row of the equality; if we want - * to print an inequality, then upper is the row of the upper bound - * and lower in the row of the lower bound - * - level is the column number of the element in matrix we want to use, - * - the infos structure gives the user some options about code printing, - * the number of parameters in matrix (nb_par), and the arrays of iterator - * names and parameters (iters and params). - */ -static int insert_modulo_guard(CloogConstraint *upper, - CloogConstraint *lower, int level, - struct clast_stmt ***next, CloogInfos *infos) -{ - int nb_par; - CloogConstraintSet *set; - struct clast_modulo_guard_data data = { lower, level, next, infos, 0 }; - - cloog_int_init(data.val); - cloog_constraint_coefficient_get(upper, level-1, &data.val); - if (cloog_int_is_one(data.val) || cloog_int_is_neg_one(data.val)) { - cloog_int_clear(data.val); - return 1; - } - - nb_par = infos->names->nb_parameters; - - cloog_int_init(data.bound); - /* Check if would be emitting the redundant constraint mod(e,m) <= m-1 */ - if (cloog_constraint_is_valid(lower)) { - cloog_constraint_constant_get(upper, &data.val); - cloog_constraint_constant_get(lower, &data.bound); - cloog_int_add(data.bound, data.val, data.bound); - cloog_constraint_coefficient_get(lower, level-1, &data.val); - cloog_int_sub_ui(data.val, data.val, 1); - if (cloog_int_eq(data.val, data.bound)) { - cloog_int_clear(data.val); - cloog_int_clear(data.bound); - return 1; - } - } - - if (cloog_constraint_needs_reduction(upper, level)) { - set = cloog_constraint_set_for_reduction(upper, lower); - set = cloog_constraint_set_reduce(set, level, infos->equal, - nb_par, &data.bound); - cloog_constraint_set_foreach_constraint(set, - insert_modulo_guard_constraint, &data); - cloog_constraint_set_free(set); - } else - insert_modulo_guard_constraint(upper, &data); - - cloog_int_clear(data.val); - cloog_int_clear(data.bound); - - return !data.empty; -} - - -/** - * We found an equality or a pair of inequalities identifying - * a loop with a single iteration, but the user wants us to generate - * a loop anyway, so we do it here. - */ -static int insert_equation_as_loop(CloogDomain *domain, CloogConstraint *upper, - CloogConstraint *lower, int level, struct clast_stmt ***next, - CloogInfos *infos) -{ - const char *iterator = cloog_names_name_at_level(infos->names, level); - struct clast_expr *e1, *e2; - struct clast_for *f; - - e2 = clast_bound_from_constraint(upper, level, infos->names); - if (!cloog_constraint_is_valid(lower)) - e1 = clast_expr_copy(e2); - else - e1 = clast_bound_from_constraint(lower, level, infos->names); - - f = new_clast_for(domain, iterator, e1, e2, infos->stride[level-1]); - **next = &f->stmt; - *next = &f->body; - - cloog_constraint_release(lower); - cloog_constraint_release(upper); - return 1; -} - - -/** - * insert_equation function: - * This function inserts an equality - * constraint according to an element in the clast. - * Returns 1 if the calling function should recurse into inner loops. - * - * An equality can be preceded by a 'modulo guard'. - * For instance, consider the constraint i -2*j = 0 and the - * element j: pprint_equality should return 'if(i%2==0) { j = i/2 ;'. - * - matrix is the polyhedron containing all the constraints, - * - num is the line number of the constraint in matrix we want to print, - * - level is the column number of the element in matrix we want to use, - * - the infos structure gives the user some options about code printing, - * the number of parameters in matrix (nb_par), and the arrays of iterator - * names and parameters (iters and params). - ** - * - November 13th 2001: first version. - * - June 26th 2003: simplification of the modulo guards (remove parts such as - * modulo is 0, compare vivien or vivien2 with a previous - * version for an idea). - * - June 29th 2003: non-unit strides support. - * - July 14th 2003: (debug) no more print the constant in the modulo guard when - * it was previously included in a stride calculation. - */ -static int insert_equation(CloogDomain *domain, CloogConstraint *upper, - CloogConstraint *lower, int level, struct clast_stmt - ***next, CloogInfos *infos) -{ - struct clast_expr *e; - struct clast_assignment *ass; - - if (!infos->options->otl) - return insert_equation_as_loop(domain, upper, lower, level, next, infos); - - if (!insert_modulo_guard(upper, lower, level, next, infos)) { - cloog_constraint_release(lower); - cloog_constraint_release(upper); - - return 0; - } - - if (cloog_constraint_is_valid(lower) || - !clast_equal_add(infos->equal, NULL, level, upper, infos)) - { /* Finally, the equality. */ - - /* If we have to make a block by dimension, we start the block. Function - * pprint knows if there is an equality, if this is the case, it checks - * for the same following condition to close the brace. - */ - if (infos->options->block) { - struct clast_block *b = new_clast_block(); - **next = &b->stmt; - *next = &b->body; - } - - e = clast_bound_from_constraint(upper, level, infos->names); - ass = new_clast_assignment(cloog_names_name_at_level(infos->names, level), e); - - **next = &ass->stmt; - *next = &(**next)->next; - } - - cloog_constraint_release(lower); - cloog_constraint_release(upper); - - return 1; -} - - -/** - * Insert a loop that is executed exactly once as an assignment. - * In particular, the loop - * - * for (i = e; i <= e; ++i) { - * S; - * } - * - * is generated as - * - * i = e; - * S; - * - */ -static void insert_otl_for(CloogConstraintSet *constraints, int level, - struct clast_expr *e, struct clast_stmt ***next, CloogInfos *infos) -{ - const char *iterator; - - iterator = cloog_names_name_at_level(infos->names, level); - - if (!clast_equal_add(infos->equal, constraints, level, - cloog_constraint_invalid(), infos)) { - struct clast_assignment *ass; - if (infos->options->block) { - struct clast_block *b = new_clast_block(); - **next = &b->stmt; - *next = &b->body; - } - ass = new_clast_assignment(iterator, e); - **next = &ass->stmt; - *next = &(**next)->next; - } else { - free_clast_expr(e); - } -} - - -/** - * Insert a loop that is executed at most once as an assignment followed - * by a guard. In particular, the loop - * - * for (i = e1; i <= e2; ++i) { - * S; - * } - * - * is generated as - * - * i = e1; - * if (i <= e2) { - * S; - * } - * - */ -static void insert_guarded_otl_for(CloogConstraintSet *constraints, int level, - struct clast_expr *e1, struct clast_expr *e2, - struct clast_stmt ***next, CloogInfos *infos) -{ - const char *iterator; - struct clast_assignment *ass; - struct clast_guard *guard; - - iterator = cloog_names_name_at_level(infos->names, level); - - if (infos->options->block) { - struct clast_block *b = new_clast_block(); - **next = &b->stmt; - *next = &b->body; - } - ass = new_clast_assignment(iterator, e1); - **next = &ass->stmt; - *next = &(**next)->next; - - guard = new_clast_guard(1); - guard->eq[0].sign = -1; - guard->eq[0].LHS = &new_clast_term(infos->state->one, - &new_clast_name(iterator)->expr)->expr; - guard->eq[0].RHS = e2; - - **next = &guard->stmt; - *next = &guard->then; -} - - -/** - * insert_for function: - * This function inserts a for loop in the clast. - * Returns 1 if the calling function should recurse into inner loops. - * - * A loop header according to an element is the conjunction of a minimum and a - * maximum on a given element (they give the loop bounds). - * For instance, considering these constraints and the element j: - * i + j -9*M >= 0 - * -j +5*M >= 0 - * j -4*M >= 0 - * this function should return 'for (j=max(-i+9*M,4*M),j<=5*M;j++) {'. - * - constraints contains all constraints, - * - level is the column number of the element in matrix we want to use, - * - otl is set if the loop is executed at most once, - * - the infos structure gives the user some options about code printing, - * the number of parameters in matrix (nb_par), and the arrays of iterator - * names and parameters (iters and params). - */ -static int insert_for(CloogDomain *domain, CloogConstraintSet *constraints, - int level, int otl, struct clast_stmt ***next, - CloogInfos *infos) -{ - const char *iterator; - struct clast_expr *e1; - struct clast_expr *e2; - - e1 = clast_minmax(constraints, level, 1, 0, 1, 0, infos); - e2 = clast_minmax(constraints, level, 0, 0, 0, 0, infos); - - if (clast_expr_is_bigger_constant(e1, e2)) { - free_clast_expr(e1); - free_clast_expr(e2); - return 0; - } - - /* If min and max are not equal there is a 'for' else, there is a '='. - * In the special case e1 = e2 = NULL, this is an infinite loop - * so this is not a '='. - */ - if (e1 && e2 && infos->options->otl && clast_expr_equal(e1, e2)) { - free_clast_expr(e2); - insert_otl_for(constraints, level, e1, next, infos); - } else if (otl) { - insert_guarded_otl_for(constraints, level, e1, e2, next, infos); - } else { - struct clast_for *f; - iterator = cloog_names_name_at_level(infos->names, level); - - f = new_clast_for(domain, iterator, e1, e2, infos->stride[level-1]); - **next = &f->stmt; - *next = &f->body; - } - - return 1; -} - - -/** - * insert_block function: - * This function inserts a statement block. - * - block is the statement block, - * - level is the number of loops enclosing the statement, - * - the infos structure gives the user some options about code printing, - * the number of parameters in domain (nb_par), and the arrays of iterator - * names and parameters (iters and params). - ** - * - September 21th 2003: first version (pick from pprint function). - */ -static void insert_block(CloogDomain *domain, CloogBlock *block, int level, - struct clast_stmt ***next, CloogInfos *infos) -{ - CloogStatement * statement ; - struct clast_stmt *subs; - - if (!block) - return; - - for (statement = block->statement; statement; statement = statement->next) { - CloogStatement *s_next = statement->next; - - subs = clast_equal(level,infos); - - statement->next = NULL; - **next = &new_clast_user_stmt(domain, statement, subs)->stmt; - statement->next = s_next; - *next = &(**next)->next; - } -} - - -/** - * insert_loop function: - * This function converts the content of a CloogLoop structure (loop) into a - * clast_stmt (inserted at **next). - * The iterator (level) of - * the current loop is given by 'level': this is the column number of the - * domain corresponding to the current loop iterator. The data of a loop are - * written in this order: - * 1. The guard of the loop, i.e. each constraint in the domain that does not - * depend on the iterator (when the entry in the column 'level' is 0). - * 2. The iteration domain of the iterator, given by the constraints in the - * domain depending on the iterator, i.e.: - * * an equality if the iterator has only one value (possibly preceded by - * a guard verifying if this value is integral), *OR* - * * a loop from the minimum possible value of the iterator to the maximum - * possible value. - * 3. The included statement block. - * 4. The inner loops (recursive call). - * 5. The following loops (recursive call). - * - level is the recursion level or the iteration level that we are printing, - * - the infos structure gives the user some options about code printing, - * the number of parameters in domain (nb_par), and the arrays of iterator - * names and parameters (iters and params). - ** - * - November 2nd 2001: first version. - * - March 6th 2003: infinite domain support. - * - April 19th 2003: (debug) NULL loop support. - * - June 29th 2003: non-unit strides support. - * - April 28th 2005: (debug) level is level+equality when print statement! - * - June 16th 2005: (debug) the N. Vasilache normalization step has been - * added to avoid iteration duplication (see DaeGon Kim - * bug in cloog_program_generate). Try vasilache.cloog - * with and without the call to cloog_polylib_matrix_normalize, - * using -f 8 -l 9 options for an idea. - * - September 15th 2005: (debug) don't close equality braces when unnecessary. - * - October 16th 2005: (debug) scalar value is saved for next loops. - */ -static void insert_loop(CloogLoop * loop, int level, - struct clast_stmt ***next, CloogInfos *infos) -{ - int equality = 0; - CloogConstraintSet *constraints, *temp; - struct clast_stmt **top = *next; - CloogConstraint *i, *j; - int empty_loop = 0; - - /* It can happen that loop be NULL when an input polyhedron is empty. */ - if (loop == NULL) - return; - - /* The constraints do not always have a shape that allows us to generate code from it, - * thus we normalize it, we also simplify it with the equalities. - */ - temp = cloog_domain_constraints(loop->domain); - cloog_constraint_set_normalize(temp,level); - constraints = cloog_constraint_set_simplify(temp,infos->equal,level, - infos->names->nb_parameters); - cloog_constraint_set_free(temp); - if (level) { - infos->stride[level - 1] = loop->stride; - infos->stride_level++; - } - - /* First of all we have to print the guard. */ - insert_guard(constraints,level, next, infos); - - if (level && cloog_constraint_set_contains_level(constraints, level, - infos->names->nb_parameters)) { - /* We scan all the constraints to know in which case we are : - * [[if] equation] or [for]. - */ - if (cloog_constraint_is_valid(i = - cloog_constraint_set_defining_equality(constraints, level))) { - empty_loop = !insert_equation(loop->unsimplified, i, - cloog_constraint_invalid(), level, next, - infos); - equality = 1 ; - } else if (cloog_constraint_is_valid(i = - cloog_constraint_set_defining_inequalities(constraints, - level, &j, infos->names->nb_parameters))) { - empty_loop = !insert_equation(loop->unsimplified, i, j, level, next, - infos); - } else - empty_loop = !insert_for(loop->unsimplified, constraints, level, - loop->otl, next, infos); - } - - if (!empty_loop) { - /* Finally, if there is an included statement block, print it. */ - insert_block(loop->unsimplified, loop->block, level+equality, next, infos); - - /* Go to the next level. */ - if (loop->inner != NULL) - insert_loop(loop->inner, level+1, next, infos); - } - - if (level) { - cloog_equal_del(infos->equal,level); - infos->stride_level--; - } - cloog_constraint_set_free(constraints); - - /* Go to the next loop on the same level. */ - while (*top) - top = &(*top)->next; - if (loop->next != NULL) - insert_loop(loop->next, level, &top,infos); -} - - -struct clast_stmt *cloog_clast_create(CloogProgram *program, - CloogOptions *options) -{ - CloogInfos *infos = ALLOC(CloogInfos); - int nb_levels; - struct clast_stmt *root = &new_clast_root(program->names)->stmt; - struct clast_stmt **next = &root->next; - - infos->state = options->state; - infos->names = program->names; - infos->options = options; - infos->scaldims = program->scaldims; - infos->nb_scattdims = program->nb_scattdims; - - /* Allocation for the array of strides, there is a +1 since the statement can - * be included inside an external loop without iteration domain. - */ - nb_levels = program->names->nb_scattering+program->names->nb_iterators+1; - infos->stride = ALLOCN(CloogStride *, nb_levels); - infos->stride_level = 0; - - infos->equal = cloog_equal_alloc(nb_levels, - nb_levels, program->names->nb_parameters); - - insert_loop(program->loop, 0, &next, infos); - - cloog_equal_free(infos->equal); - - free(infos->stride); - free(infos); - - return root; -} - - -struct clast_stmt *cloog_clast_create_from_input(CloogInput *input, - CloogOptions *options) -{ - CloogProgram *program; - struct clast_stmt *root; - - program = cloog_program_alloc(input->context, input->ud, options); - free(input); - - program = cloog_program_generate(program, options); - - root = cloog_clast_create(program, options); - cloog_program_free(program); - - return root; -} diff --git a/cloog-0.17.0/source/cloog.c b/cloog-0.17.0/source/cloog.c deleted file mode 100644 index 0a42a67..0000000 --- a/cloog-0.17.0/source/cloog.c +++ /dev/null @@ -1,98 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** cloog.c ** - **-------------------------------------------------------------------** - ** First version: october 25th 2001, CLooG's birth date ! ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -# include -# include -# include "../include/cloog/cloog.h" - - -int main(int argv, char * argc[]) -{ CloogProgram * program ; - CloogOptions * options ; - CloogState *state; - FILE * input, * output ; - - state = cloog_state_malloc(); - - /* Options and input/output file setting. */ - cloog_options_read(state, argv, argc, &input, &output, &options); - - /* Reading the program informations. */ - program = cloog_program_read(input,options) ; - fclose(input) ; - - /* Generating and printing the code. */ - program = cloog_program_generate(program,options) ; - if (options->structure) - cloog_program_print(stdout,program) ; - cloog_program_pprint(output,program,options) ; - cloog_program_free(program) ; - - /* Printing the allocation statistics if asked. */ - if (options->leaks) { - fprintf(output,"/* Domains : allocated=%5d, freed=%5d, max=%5d. */\n", - state->domain_allocated, state->domain_freed, state->domain_max); - fprintf(output,"/* Loops : allocated=%5d, freed=%5d, max=%5d. */\n", - state->loop_allocated, state->loop_freed, state->loop_max); - fprintf(output,"/* Statements : allocated=%5d, freed=%5d, max=%5d. */\n", - state->statement_allocated, state->statement_freed, state->statement_max); - fprintf(output,"/* Blocks : allocated=%5d, freed=%5d, max=%5d. */\n", - state->block_allocated, state->block_freed, state->block_max); - } - - /* Inform the user in case of a problem with the allocation statistics. */ - if ((state->domain_allocated != state->domain_freed) || - (state->loop_allocated != state->loop_freed) || - (state->statement_allocated != state->statement_freed) || - (state->block_allocated != state->block_freed)) - { - cloog_msg(options, CLOOG_INFO, - "an internal problem has been detected (it should have" - " no\n consequence on the correctness of the output)." - " Please send (if\n you can) your input file, the first line " - "given by typing 'cloog -v'\n and your full command " - "line call to CLooG including options to\n . Thank you for your participation to get\n" - " CLooG better and safer.\n") ; - } - - cloog_options_free(options) ; - cloog_state_free(state); - fclose(output) ; - return 0; -} - diff --git a/cloog-0.17.0/source/input.c b/cloog-0.17.0/source/input.c deleted file mode 100644 index 8195392..0000000 --- a/cloog-0.17.0/source/input.c +++ /dev/null @@ -1,218 +0,0 @@ -#include -#include -#include -#include "../include/cloog/cloog.h" - -#ifdef OSL_SUPPORT -#include -#endif - -#define ALLOC(type) (type*)malloc(sizeof(type)) - -static char *next_line(FILE *input, char *line, unsigned len) -{ - char *p; - - do { - if (!(p = fgets(line, len, input))) - return NULL; - while (isspace(*p) && *p != '\n') - ++p; - } while (*p == '#' || *p == '\n'); - - return p; -} - -#ifdef OSL_SUPPORT -/** - * This function translates an OpenScop scop to a CLooG input. - * \param[in,out] state CLooG state. - * \param[in] scop Scop to translate. - * \return A CloogInput corresponding to the scop input. - */ -CloogInput *cloog_input_from_osl_scop(CloogState *state, osl_scop_p scop) { - CloogInput *input = NULL; - CloogDomain *context = NULL; - CloogUnionDomain *ud = NULL; - - if (scop) { - /* Extract the context. */ - context = cloog_domain_from_osl_relation(state, scop->context); - - /* Extract the union of domains. */ - ud = cloog_union_domain_from_osl_scop(state, scop); - - /* Build and return the input. */ - input = cloog_input_alloc(context, ud); - } - - return input; -} -#endif - -/** - * Read input from a .cloog file, putting most of the information - * in the returned CloogInput. The chosen language is put in - * options->language. - */ -CloogInput *cloog_input_read(FILE *file, CloogOptions *options) -{ - char line[MAX_STRING]; - char language; - CloogDomain *context; - CloogUnionDomain *ud; - int nb_par; - -#ifdef OSL_SUPPORT - if (options->openscop) { - osl_scop_p scop = osl_scop_read(file); - CloogInput * input = cloog_input_from_osl_scop(options->state, - scop); - cloog_options_copy_from_osl_scop(scop, options); - return input; - } -#endif - - /* First of all, we read the language to use. */ - if (!next_line(file, line, sizeof(line))) - cloog_die("Input error.\n"); - if (sscanf(line, "%c", &language) != 1) - cloog_die("Input error.\n"); - - if (language == 'f') - options->language = CLOOG_LANGUAGE_FORTRAN; - else - options->language = CLOOG_LANGUAGE_C; - - /* We then read the context data. */ - context = cloog_domain_read_context(options->state, file); - nb_par = cloog_domain_parameter_dimension(context); - - ud = cloog_union_domain_read(file, nb_par, options); - - return cloog_input_alloc(context, ud); -} - -/** - * Create a CloogInput from a CloogDomain context and a CloogUnionDomain. - */ -CloogInput *cloog_input_alloc(CloogDomain *context, CloogUnionDomain *ud) -{ - CloogInput *input; - - input = ALLOC(CloogInput); - if (!input) - cloog_die("memory overflow.\n"); - - input->context = context; - input->ud = ud; - - return input; -} - -void cloog_input_free(CloogInput *input) -{ - cloog_domain_free(input->context); - cloog_union_domain_free(input->ud); - free(input); -} - -static void print_names(FILE *file, CloogUnionDomain *ud, - enum cloog_dim_type type, const char *name) -{ - int i; - - fprintf(file, "\n%d # %s name(s)\n", ud->name[type] ? 1 : 0, name); - if (!ud->name[type]) - return; - - for (i = 0; i < ud->n_name[type]; i++) - fprintf(file, "%s ", ud->name[type][i]); - - fprintf(file, "\n"); -} - -/** - * Dump the .cloog description of a CloogInput and a CloogOptions data structure - * into a file. The generated .cloog file will contain the same information as - * the data structures. The file can be used to run the cloog program on the - * example. - */ -void cloog_input_dump_cloog(FILE *file, CloogInput *input, CloogOptions *opt) -{ - int i, num_statements; - CloogUnionDomain *ud = input->ud; - CloogNamedDomainList *ndl = ud->domain; - - fprintf(file, - "# CLooG -> CLooG\n" - "# This is an automatic dump of a CLooG input file from a " - "CloogInput data\n" - "# structure.\n\n"); - - /* Language. */ - if (opt->language == CLOOG_LANGUAGE_FORTRAN) { - fprintf(file, "# Language: FORTRAN\n"); - fprintf(file, "f\n\n"); - } else { - fprintf(file, "# Language: C\n"); - fprintf(file, "c\n\n"); - } - - /* Context. */ - fprintf(file, "# Context:\n"); - cloog_domain_print_constraints(file, input->context, 1); - - print_names(file, ud, CLOOG_PARAM, "Parameter"); - - /* Statement number. */ - i = 0; - while (ndl != NULL) { - i++; - ndl = ndl->next; - } - num_statements = i; - fprintf(file, "\n# Statement number:\n%d\n\n", num_statements); - - /* Iteration domains. */ - i = 1; - ndl = ud->domain; - while (ndl != NULL) { - fprintf(file, "# Iteration domain of statement %d (%s).\n", i, - ndl->name); - - cloog_domain_print_constraints(file, ndl->domain, 1); - fprintf(file,"\n0 0 0 # For future options.\n\n"); - - i++; - ndl = ndl->next; - } - - print_names(file, ud, CLOOG_ITER, "Iterator"); - - /* Exit, if no scattering is supplied. */ - if (!ud->domain || !ud->domain->scattering) { - fprintf(file, "# No scattering functions.\n0\n\n"); - return; - } - - /* Scattering relations. */ - fprintf(file, - "# --------------------- SCATTERING --------------------\n"); - - fprintf(file, "%d # Scattering functions\n", num_statements); - - i = 1; - ndl = ud->domain; - while (ndl != NULL) { - fprintf(file, "\n# Scattering of statement %d (%s).\n", i, - ndl->name); - - cloog_scattering_print_constraints(file, ndl->scattering); - - i++; - ndl = ndl->next; - } - - print_names(file, ud, CLOOG_SCAT, "Scattering dimension"); -} diff --git a/cloog-0.17.0/source/int.c b/cloog-0.17.0/source/int.c deleted file mode 100644 index 67f62df..0000000 --- a/cloog-0.17.0/source/int.c +++ /dev/null @@ -1,177 +0,0 @@ -#include -#include "../include/cloog/cloog.h" - -#define ALLOC(type) (type*)malloc(sizeof(type)) -#define ALLOCN(type,n) (type*)malloc((n)*sizeof(type)) - -#if defined(CLOOG_INT_INT) || \ - defined(CLOOG_INT_LONG) || \ - defined(CLOOG_INT_LONG_LONG) - -cloog_int_t cloog_gcd(cloog_int_t a, cloog_int_t b) -{ - while (a) { - cloog_int_t t = b % a; - b = a; - a = t; - } - if (b < 0) - b = -b; - return b; -} - -#endif - -struct cloog_vec *cloog_vec_alloc(unsigned size) -{ - int i; - struct cloog_vec *vec; - - vec = ALLOC(struct cloog_vec); - if (!vec) - return NULL; - - vec->p = ALLOCN(cloog_int_t, size); - if (!vec->p) - goto error; - vec->size = size; - - for (i = 0; i < size; ++i) - cloog_int_init(vec->p[i]); - - return vec; -error: - free(vec); - return NULL; -} - -void cloog_vec_free(struct cloog_vec *vec) -{ - int i; - - if (!vec) - return; - - for (i = 0; i < vec->size; ++i) - cloog_int_clear(vec->p[i]); - free(vec->p); - free(vec); -} - -void cloog_vec_dump(struct cloog_vec *vec) -{ - int i; - - for (i = 0; i < vec->size; ++i) { - cloog_int_print(stderr, vec->p[i]); - fprintf(stderr, " "); - } - fprintf(stderr, "\n"); -} - -int cloog_seq_first_non_zero(cloog_int_t *p, unsigned len) -{ - int i; - - for (i = 0; i < len; ++i) - if (!cloog_int_is_zero(p[i])) - return i; - return -1; -} - -void cloog_seq_neg(cloog_int_t *dst, cloog_int_t *src, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - cloog_int_neg(dst[i], src[i]); -} - -void cloog_seq_cpy(cloog_int_t *dst, cloog_int_t *src, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - cloog_int_set(dst[i], src[i]); -} - -static void cloog_seq_scale_down(cloog_int_t *dst, cloog_int_t *src, cloog_int_t m, unsigned len) -{ - int i; - for (i = 0; i < len; ++i) - cloog_int_divexact(dst[i], src[i], m); -} - -void cloog_seq_combine(cloog_int_t *dst, cloog_int_t m1, cloog_int_t *src1, - cloog_int_t m2, cloog_int_t *src2, unsigned len) -{ - int i; - cloog_int_t tmp; - - cloog_int_init(tmp); - for (i = 0; i < len; ++i) { - cloog_int_mul(tmp, m1, src1[i]); - cloog_int_addmul(tmp, m2, src2[i]); - cloog_int_set(dst[i], tmp); - } - cloog_int_clear(tmp); -} - -static int cloog_seq_abs_min_non_zero(cloog_int_t *p, unsigned len) -{ - int i, min = cloog_seq_first_non_zero(p, len); - if (min < 0) - return -1; - for (i = min + 1; i < len; ++i) { - if (cloog_int_is_zero(p[i])) - continue; - if (cloog_int_abs_lt(p[i], p[min])) - min = i; - } - return min; -} - -void cloog_seq_gcd(cloog_int_t *p, unsigned len, cloog_int_t *gcd) -{ - int i, min = cloog_seq_abs_min_non_zero(p, len); - - if (min < 0) { - cloog_int_set_si(*gcd, 0); - return; - } - cloog_int_abs(*gcd, p[min]); - for (i = 0; cloog_int_cmp_si(*gcd, 1) > 0 && i < len; ++i) { - if (i == min) - continue; - if (cloog_int_is_zero(p[i])) - continue; - cloog_int_gcd(*gcd, *gcd, p[i]); - } -} - -int cloog_seq_is_neg(cloog_int_t *p1, cloog_int_t *p2, unsigned len) -{ - int i; - - for (i = 0; i < len; ++i) { - if (cloog_int_abs_ne(p1[i], p2[i])) - return 0; - if (cloog_int_is_zero(p1[i])) - continue; - if (cloog_int_eq(p1[i], p2[i])) - return 0; - } - return 1; -} - -void cloog_seq_normalize(cloog_int_t *p, unsigned len) -{ - cloog_int_t gcd; - - if (len == 0) - return; - - cloog_int_init(gcd); - cloog_seq_gcd(p, len, &gcd); - if (!cloog_int_is_zero(gcd) && !cloog_int_is_one(gcd)) - cloog_seq_scale_down(p, p, gcd, len); - cloog_int_clear(gcd); -} diff --git a/cloog-0.17.0/source/isl/backend.c b/cloog-0.17.0/source/isl/backend.c deleted file mode 100644 index 6ddb9f9..0000000 --- a/cloog-0.17.0/source/isl/backend.c +++ /dev/null @@ -1,37 +0,0 @@ -#include - -/** - * Allocate and initialize full state. - */ -CloogState *cloog_state_malloc(void) -{ - return cloog_isl_state_malloc(NULL); -} - -/** - * Allocate and initialize full state for isl backend. - */ -CloogState *cloog_isl_state_malloc(struct isl_ctx *ctx) -{ - CloogState *state; - int allocated = !ctx; - - state = cloog_core_state_malloc(); - if (!ctx) - ctx = isl_ctx_alloc(); - state->backend = isl_alloc_type(ctx, CloogBackend); - state->backend->ctx = ctx; - state->backend->ctx_allocated = allocated; - return state; -} - -/** - * Free state and backend independent parts. - */ -void cloog_state_free(CloogState *state) -{ - if (state->backend->ctx_allocated) - isl_ctx_free(state->backend->ctx); - free(state->backend); - cloog_core_state_free(state); -} diff --git a/cloog-0.17.0/source/isl/constraints.c b/cloog-0.17.0/source/isl/constraints.c deleted file mode 100644 index 1fb1690..0000000 --- a/cloog-0.17.0/source/isl/constraints.c +++ /dev/null @@ -1,966 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - - -#define ALLOC(type) (type*)malloc(sizeof(type)) -#define ALLOCN(type,n) (type*)malloc((n)*sizeof(type)) - -CloogConstraintSet *cloog_constraint_set_from_isl_basic_set(struct isl_basic_set *bset) -{ - return (CloogConstraintSet *)bset; -} - -CloogConstraint *cloog_constraint_from_isl_constraint(struct isl_constraint *constraint) -{ - return (CloogConstraint *)constraint; -} - -isl_constraint *cloog_constraint_to_isl(CloogConstraint *constraint) -{ - return (isl_constraint *)constraint; -} - -isl_basic_set *cloog_constraints_set_to_isl(CloogConstraintSet *constraints) -{ - return (isl_basic_set *)constraints; -} - - -/****************************************************************************** - * Memory leaks hunting * - ******************************************************************************/ - - - -void cloog_constraint_set_free(CloogConstraintSet *constraints) -{ - isl_basic_set_free(cloog_constraints_set_to_isl(constraints)); -} - - -int cloog_constraint_set_contains_level(CloogConstraintSet *constraints, - int level, int nb_parameters) -{ - isl_basic_set *bset; - bset = cloog_constraints_set_to_isl(constraints); - return isl_basic_set_dim(bset, isl_dim_set) >= level; -} - -struct cloog_isl_dim { - enum isl_dim_type type; - int pos; -}; - -static struct cloog_isl_dim basic_set_cloog_dim_to_isl_dim( - __isl_keep isl_basic_set *bset, int pos) -{ - enum isl_dim_type types[] = { isl_dim_set, isl_dim_div, isl_dim_param }; - int i; - struct cloog_isl_dim ci_dim; - - for (i = 0; i < 3; ++i) { - unsigned dim = isl_basic_set_dim(bset, types[i]); - if (pos < dim) { - ci_dim.type = types[i]; - ci_dim.pos = pos; - return ci_dim; - } - pos -= dim; - } - assert(0); -} - -static struct cloog_isl_dim set_cloog_dim_to_isl_dim( - CloogConstraintSet *constraints, int pos) -{ - isl_basic_set *bset; - - bset = cloog_constraints_set_to_isl(constraints); - return basic_set_cloog_dim_to_isl_dim(bset, pos); -} - -/* Check if the variable at position level is defined by an - * equality. If so, return the row number. Otherwise, return -1. - */ -CloogConstraint *cloog_constraint_set_defining_equality( - CloogConstraintSet *constraints, int level) -{ - struct isl_constraint *c; - struct cloog_isl_dim dim; - isl_basic_set *bset; - - bset = cloog_constraints_set_to_isl(constraints); - dim = set_cloog_dim_to_isl_dim(constraints, level - 1); - if (isl_basic_set_has_defining_equality(bset, dim.type, dim.pos, &c)) - return cloog_constraint_from_isl_constraint(c); - else - return NULL; -} - - -struct cloog_isl_other { - int level; - int found; - isl_constraint *u; - isl_constraint *l; -}; - - -/* Set other->found to 1 if the given constraint involves other->level - * and is different from other->u and other->l. - */ -static int check_other_constraint(__isl_take isl_constraint *c, void *user) -{ - struct cloog_isl_other *other = user; - CloogConstraint *cc; - - if (!isl_constraint_is_equal(c, other->l) && - !isl_constraint_is_equal(c, other->u)) { - cc = cloog_constraint_from_isl_constraint(c); - if (cloog_constraint_involves(cc, other->level - 1)) - other->found = 1; - } - - isl_constraint_free(c); - - return other->found ? -1 : 0; -} - - -/* Check if the variable (e) at position level is defined by a - * pair of inequalities - * + -m e + + k1 >= 0 - * <-a, i> + m e + <-b, p> + k2 >= 0 - * with 0 <= k1 + k2 < m - * If so return the row number of the upper bound and set *lower - * to the row number of the lower bound. If not, return -1. - * - * If the variable at position level occurs in any other constraint, - * then we currently return -1. The modulo guard that we would generate - * would still be correct, but we would also need to generate - * guards corresponding to the other constraints, and this has not - * been implemented yet. - */ -CloogConstraint *cloog_constraint_set_defining_inequalities( - CloogConstraintSet *constraints, - int level, CloogConstraint **lower, int nb_par) -{ - struct isl_constraint *u; - struct isl_constraint *l; - struct cloog_isl_dim dim; - struct isl_basic_set *bset; - struct cloog_isl_other other; - - bset = cloog_constraints_set_to_isl(constraints); - dim = set_cloog_dim_to_isl_dim(constraints, level - 1); - if (!isl_basic_set_has_defining_inequalities(bset, dim.type, dim.pos, - &l, &u)) - return cloog_constraint_invalid(); - - other.l = l; - other.u = u; - other.found = 0; - other.level = level; - isl_basic_set_foreach_constraint(bset, &check_other_constraint, &other); - if (other.found) { - isl_constraint_free(l); - isl_constraint_free(u); - *lower = NULL; - return NULL; - } - *lower = cloog_constraint_from_isl_constraint(l); - return cloog_constraint_from_isl_constraint(u); -} - -int cloog_constraint_set_total_dimension(CloogConstraintSet *constraints) -{ - isl_basic_set *bset; - bset = cloog_constraints_set_to_isl(constraints); - return isl_basic_set_total_dim(bset); -} - -int cloog_constraint_set_n_iterators(CloogConstraintSet *constraints, int n_par) -{ - isl_basic_set *bset; - bset = cloog_constraints_set_to_isl(constraints); - return isl_basic_set_dim(bset, isl_dim_set); -} - - -/****************************************************************************** - * Equalities spreading functions * - ******************************************************************************/ - - -/* Equalities are stored inside a Matrix data structure called "equal". - * This matrix has (nb_scattering + nb_iterators + 1) rows (i.e. total - * dimensions + 1, the "+ 1" is because a statement can be included inside an - * external loop without iteration domain), and (nb_scattering + nb_iterators + - * nb_parameters + 2) columns (all unknowns plus the scalar plus the equality - * type). The ith row corresponds to the equality "= 0" for the ith dimension - * iterator. The first column gives the equality type (0: no equality, then - * EQTYPE_* -see pprint.h-). At each recursion of pprint, if an equality for - * the current level is found, the corresponding row is updated. Then the - * equality if it exists is used to simplify expressions (e.g. if we have - * "i+1" while we know that "i=2", we simplify it in "3"). At the end of - * the pprint call, the corresponding row is reset to zero. - */ - -CloogEqualities *cloog_equal_alloc(int n, int nb_levels, int nb_parameters) -{ - int i; - CloogEqualities *equal = ALLOC(CloogEqualities); - - equal->total_dim = nb_levels - 1 + nb_parameters; - equal->n = n; - equal->constraints = ALLOCN(isl_constraint *, n); - equal->types = ALLOCN(int, n); - for (i = 0; i < n; ++i) { - equal->constraints[i] = NULL; - equal->types[i] = EQTYPE_NONE; - } - return equal; -} - -int cloog_equal_total_dimension(CloogEqualities *equal) -{ - return equal->total_dim; -} - -void cloog_equal_free(CloogEqualities *equal) -{ - int i; - - for (i = 0; i < equal->n; ++i) - isl_constraint_free(equal->constraints[i]); - free(equal->constraints); - free(equal->types); - free(equal); -} - -int cloog_equal_count(CloogEqualities *equal) -{ - return equal->n; -} - - -/** - * cloog_constraint_equal_type function : - * This function returns the type of the equality in the constraint (line) of - * (constraints) for the element (level). An equality is 'constant' iff all - * other factors are null except the constant one. It is a 'pure item' iff - * it is equal or opposite to a single variable or parameter. - * Otherwise it is an 'affine expression'. - * For instance: - * i = -13 is constant, i = j, j = -M are pure items, - * j = 2*M, i = j+1, 2*j = M are affine expressions. - * - * - constraints is the matrix of constraints, - * - level is the column number in equal of the element which is 'equal to', - */ -static int cloog_constraint_equal_type(CloogConstraint *cc, int level) -{ - int i; - isl_int c; - int type = EQTYPE_NONE; - struct isl_constraint *constraint = cloog_constraint_to_isl(cc); - - isl_int_init(c); - isl_constraint_get_constant(constraint, &c); - if (!isl_int_is_zero(c)) - type = EQTYPE_CONSTANT; - isl_constraint_get_coefficient(constraint, isl_dim_set, level - 1, &c); - if (!isl_int_is_one(c) && !isl_int_is_negone(c)) - type = EQTYPE_EXAFFINE; - for (i = 0; i < isl_constraint_dim(constraint, isl_dim_param); ++i) { - isl_constraint_get_coefficient(constraint, isl_dim_param, i, &c); - if (isl_int_is_zero(c)) - continue; - if ((!isl_int_is_one(c) && !isl_int_is_negone(c)) || - type != EQTYPE_NONE) { - type = EQTYPE_EXAFFINE; - break; - } - type = EQTYPE_PUREITEM; - } - for (i = 0; i < isl_constraint_dim(constraint, isl_dim_set); ++i) { - if (i == level - 1) - continue; - isl_constraint_get_coefficient(constraint, isl_dim_set, i, &c); - if (isl_int_is_zero(c)) - continue; - if ((!isl_int_is_one(c) && !isl_int_is_negone(c)) || - type != EQTYPE_NONE) { - type = EQTYPE_EXAFFINE; - break; - } - type = EQTYPE_PUREITEM; - } - for (i = 0; i < isl_constraint_dim(constraint, isl_dim_div); ++i) { - isl_constraint_get_coefficient(constraint, isl_dim_div, i, &c); - if (isl_int_is_zero(c)) - continue; - if ((!isl_int_is_one(c) && !isl_int_is_negone(c)) || - type != EQTYPE_NONE) { - type = EQTYPE_EXAFFINE; - break; - } - type = EQTYPE_PUREITEM; - } - isl_int_clear(c); - - if (type == EQTYPE_NONE) - type = EQTYPE_CONSTANT; - - return type; -} - - -int cloog_equal_type(CloogEqualities *equal, int level) -{ - return equal->types[level-1]; -} - - -/** - * cloog_equal_add function: - * This function updates the row (level-1) of the equality matrix (equal) with - * the row that corresponds to the row (line) of the matrix (matrix). - * - equal is the matrix of equalities, - * - matrix is the matrix of constraints, - * - level is the column number in matrix of the element which is 'equal to', - * - line is the line number in matrix of the constraint we want to study, - * - the infos structure gives the user all options on code printing and more. - ** - * line is set to an invalid constraint for equalities that CLooG itself has - * discovered because the lower and upper bound of a loop happened to be equal. - * This situation shouldn't happen in the isl port since isl should - * have found the equality itself. - */ -void cloog_equal_add(CloogEqualities *equal, CloogConstraintSet *matrix, - int level, CloogConstraint *line, int nb_par) -{ - isl_constraint *c; - assert(cloog_constraint_is_valid(line)); - - equal->types[level-1] = cloog_constraint_equal_type(line, level); - c = cloog_constraint_to_isl(line); - equal->constraints[level - 1] = isl_constraint_copy(c); -} - - -/** - * cloog_equal_del function : - * This function reset the equality corresponding to the iterator (level) - * in the equality matrix (equal). - * - July 2nd 2002: first version. - */ -void cloog_equal_del(CloogEqualities *equal, int level) -{ - equal->types[level-1] = EQTYPE_NONE; - isl_constraint_free(equal->constraints[level - 1]); - equal->constraints[level-1] = NULL; -} - - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - -/** - * Function cloog_constraint_set_normalize: - * This function will modify the constraint system in such a way that when - * there is an equality depending on the element at level 'level', there are - * no more (in)equalities depending on this element. - * - * The simplified form of isl automatically satisfies this condition. - */ -void cloog_constraint_set_normalize(CloogConstraintSet *matrix, int level) -{ -} - - - -/** - * cloog_constraint_set_copy function: - * this functions builds and returns a "hard copy" (not a pointer copy) of a - * CloogConstraintSet data structure. - */ -CloogConstraintSet *cloog_constraint_set_copy(CloogConstraintSet *constraints) -{ - isl_basic_set *bset; - bset = cloog_constraints_set_to_isl(constraints); - return cloog_constraint_set_from_isl_basic_set(isl_basic_set_dup(bset)); -} - - -/** - * cloog_constraint_set_simplify function: - * this function simplify all constraints inside the matrix "matrix" thanks to - * an equality matrix "equal" that gives for some elements of the affine - * constraint an equality with other elements, preferably constants. - * For instance, if a row of the matrix contains i+j+3>=0 and the equality - * matrix gives i=n and j=2, the constraint is simplified to n+3>=0. The - * simplified constraints are returned back inside a new simplified matrix. - * - matrix is the set of constraints to simplify, - * - equal is the matrix of equalities, - * - level is a level we don't want to simplify (-1 if none), - * - nb_par is the number of parameters of the program. - ** - * isl should have performed these simplifications already in isl_set_gist. - */ -CloogConstraintSet *cloog_constraint_set_simplify(CloogConstraintSet *matrix, - CloogEqualities *equal, int level, int nb_par) -{ - return cloog_constraint_set_copy(matrix); -} - - -static struct cloog_isl_dim constraint_cloog_dim_to_isl_dim( - CloogConstraint *constraint, int pos) -{ - enum isl_dim_type types[] = { isl_dim_set, isl_dim_div, isl_dim_param }; - int i; - struct cloog_isl_dim ci_dim; - - for (i = 0; i < 3; ++i) { - isl_constraint *c = cloog_constraint_to_isl(constraint); - unsigned dim = isl_constraint_dim(c, types[i]); - if (pos < dim) { - ci_dim.type = types[i]; - ci_dim.pos = pos; - return ci_dim; - } - pos -= dim; - } - assert(0); -} - -static struct clast_expr *div_expr(CloogConstraint *constraint, int pos, - CloogNames *names) -{ - int i, nb_elts; - unsigned dim = cloog_constraint_total_dimension(constraint); - cloog_int_t c; - struct clast_reduction *r; - struct clast_expr *e = NULL; - isl_aff *div; - - div = isl_constraint_get_div(cloog_constraint_to_isl(constraint), pos); - - cloog_int_init(c); - for (i = 0, nb_elts = 0; i < dim; ++i) { - struct cloog_isl_dim dim; - - dim = constraint_cloog_dim_to_isl_dim(constraint, i); - if (dim.type == isl_dim_set) - dim.type = isl_dim_in; - isl_aff_get_coefficient(div, dim.type, dim.pos, &c); - if (!cloog_int_is_zero(c)) - ++nb_elts; - } - isl_aff_get_constant(div, &c); - if (!cloog_int_is_zero(c)) - ++nb_elts; - - r = new_clast_reduction(clast_red_sum, nb_elts); - for (i = 0, nb_elts = 0; i < dim; ++i) { - struct clast_expr *v; - struct cloog_isl_dim dim; - - dim = constraint_cloog_dim_to_isl_dim(constraint, i); - if (dim.type == isl_dim_set) - dim.type = isl_dim_in; - isl_aff_get_coefficient(div, dim.type, dim.pos, &c); - if (cloog_int_is_zero(c)) - continue; - - v = cloog_constraint_variable_expr(constraint, 1 + i, names); - - r->elts[nb_elts++] = &new_clast_term(c, v)->expr; - } - isl_aff_get_constant(div, &c); - if (!cloog_int_is_zero(c)) - r->elts[nb_elts++] = &new_clast_term(c, NULL)->expr; - - isl_aff_get_denominator(div, &c); - e = &new_clast_binary(clast_bin_fdiv, &r->expr, c)->expr; - - cloog_int_clear(c); - - isl_aff_free(div); - - return e; -} - -/** - * Return clast_expr corresponding to the variable "level" (1 based) in - * the given constraint. - */ -struct clast_expr *cloog_constraint_variable_expr(CloogConstraint *constraint, - int level, CloogNames *names) -{ - struct cloog_isl_dim dim; - const char *name; - - assert(constraint); - - dim = constraint_cloog_dim_to_isl_dim(constraint, level - 1); - if (dim.type == isl_dim_div) - return div_expr(constraint, dim.pos, names); - - if (dim.type == isl_dim_set) - name = cloog_names_name_at_level(names, level); - else - name = names->parameters[dim.pos]; - - return &new_clast_name(name)->expr; -} - - -/** - * Return true if constraint c involves variable v (zero-based). - */ -int cloog_constraint_involves(CloogConstraint *constraint, int v) -{ - isl_int c; - int res; - - isl_int_init(c); - cloog_constraint_coefficient_get(constraint, v, &c); - res = !isl_int_is_zero(c); - isl_int_clear(c); - return res; -} - -int cloog_constraint_is_lower_bound(CloogConstraint *constraint, int v) -{ - isl_int c; - int res; - - isl_int_init(c); - cloog_constraint_coefficient_get(constraint, v, &c); - res = isl_int_is_pos(c); - isl_int_clear(c); - return res; -} - -int cloog_constraint_is_upper_bound(CloogConstraint *constraint, int v) -{ - isl_int c; - int res; - - isl_int_init(c); - cloog_constraint_coefficient_get(constraint, v, &c); - res = isl_int_is_neg(c); - isl_int_clear(c); - return res; -} - -int cloog_constraint_is_equality(CloogConstraint *constraint) -{ - return isl_constraint_is_equality(cloog_constraint_to_isl(constraint)); -} - -CloogConstraintSet *cloog_constraint_set_drop_constraint( - CloogConstraintSet *constraints, CloogConstraint *constraint) -{ - isl_basic_set *bset; - isl_constraint *c; - - bset = cloog_constraints_set_to_isl(constraints); - c = cloog_constraint_to_isl(cloog_constraint_copy(constraint)); - bset = isl_basic_set_drop_constraint(bset, c); - return cloog_constraint_set_from_isl_basic_set(bset); -} - -void cloog_constraint_coefficient_get(CloogConstraint *constraint, - int var, cloog_int_t *val) -{ - struct cloog_isl_dim dim; - isl_constraint *c; - - if (!constraint) - return; - - dim = constraint_cloog_dim_to_isl_dim(constraint, var); - c = cloog_constraint_to_isl(constraint); - isl_constraint_get_coefficient(c, dim.type, dim.pos, val); -} - -void cloog_constraint_coefficient_set(CloogConstraint *constraint, - int var, cloog_int_t val) -{ - struct cloog_isl_dim dim; - isl_constraint *c; - - assert(constraint); - - dim = constraint_cloog_dim_to_isl_dim(constraint, var); - c = cloog_constraint_to_isl(constraint); - isl_constraint_set_coefficient(c, dim.type, dim.pos, val); -} - -void cloog_constraint_constant_get(CloogConstraint *constraint, cloog_int_t *val) -{ - isl_constraint_get_constant(cloog_constraint_to_isl(constraint), val); -} - -/** - * Copy the coefficient of constraint c into dst in PolyLib order, - * i.e., first the coefficients of the variables, then the coefficients - * of the parameters and finally the constant. - */ -void cloog_constraint_copy_coefficients(CloogConstraint *constraint, - cloog_int_t *dst) -{ - int i; - unsigned dim; - - dim = cloog_constraint_total_dimension(constraint); - - for (i = 0; i < dim; ++i) - cloog_constraint_coefficient_get(constraint, i, dst+i); - cloog_constraint_constant_get(constraint, dst+dim); -} - -CloogConstraint *cloog_constraint_invalid(void) -{ - return NULL; -} - -int cloog_constraint_is_valid(CloogConstraint *constraint) -{ - return constraint != NULL; -} - -int cloog_constraint_total_dimension(CloogConstraint *constraint) -{ - isl_constraint *c; - c = cloog_constraint_to_isl(constraint); - return isl_constraint_dim(c, isl_dim_all); -} - - -/** - * Check whether there is any need for the constraint "upper" on - * "level" to get reduced. - * In case of the isl backend, there should be no need to do so - * if the level corresponds to an existentially quantified variable. - * Moreover, the way reduction is performed does not work for such - * variables since its position might chance during the construction - * of a set for reduction. - */ -int cloog_constraint_needs_reduction(CloogConstraint *upper, int level) -{ - isl_basic_set *bset; - isl_constraint *c; - struct cloog_isl_dim dim; - - c = cloog_constraint_to_isl(upper); - bset = isl_basic_set_from_constraint(isl_constraint_copy(c)); - dim = basic_set_cloog_dim_to_isl_dim(bset, level - 1); - isl_basic_set_free(bset); - - return dim.type == isl_dim_set; -} - - -/** - * Create a CloogConstraintSet containing enough information to perform - * a reduction on the upper equality (in this case lower is an invalid - * CloogConstraint) or the pair of inequalities upper and lower - * from within insert_modulo_guard. - * In the isl backend, we return a CloogConstraintSet containing both - * bounds, as the stride may change during the reduction and we may - * need to recompute the bound on the modulo expression. - */ -CloogConstraintSet *cloog_constraint_set_for_reduction(CloogConstraint *upper, - CloogConstraint *lower) -{ - struct isl_basic_set *bset; - isl_constraint *c; - - c = cloog_constraint_to_isl(upper); - bset = isl_basic_set_from_constraint(isl_constraint_copy(c)); - if (cloog_constraint_is_valid(lower)) { - c = cloog_constraint_to_isl(lower); - bset = isl_basic_set_add_constraint(bset, - isl_constraint_copy(c)); - } - return cloog_constraint_set_from_isl_basic_set(bset); -} - - -static int add_constant_term(CloogConstraint *c, void *user) -{ - isl_int *bound = (isl_int *)user; - isl_int v; - - isl_int_init(v); - - cloog_constraint_constant_get(c, &v); - isl_int_add(*bound, *bound, v); - - isl_int_clear(v); - - return 0; -} - - -/* Return an isl_basic_set representation of the equality stored - * at position i in the given CloogEqualities. - */ -static __isl_give isl_basic_set *equality_to_basic_set(CloogEqualities *equal, - int i) -{ - isl_constraint *c; - isl_basic_set *bset; - unsigned nparam; - unsigned nvar; - - c = isl_constraint_copy(equal->constraints[i]); - bset = isl_basic_set_from_constraint(c); - nparam = isl_basic_set_dim(bset, isl_dim_param); - nvar = isl_basic_set_dim(bset, isl_dim_set); - bset = isl_basic_set_add(bset, isl_dim_set, - equal->total_dim - (nparam + nvar)); - return bset; -} - -/** - * Reduce the modulo guard expressed by "constraints" using equalities - * found in outer nesting levels (stored in "equal"). - * The modulo guard may be an equality or a pair of inequalities. - * In case of a pair of inequalities, *bound contains the bound on the - * corresponding modulo expression. If any reduction is performed - * then this bound is recomputed. - * - * "level" may not correspond to an existentially quantified variable. - * - * We first check if there are any equalities we can use. If not, - * there is again nothing to reduce. - * For the actual reduction, we use isl_basic_set_gist, but this - * function will only perform the reduction we want here if the - * the variable that imposes the modulo constraint has been projected - * out (i.e., turned into an existentially quantified variable). - * After the call to isl_basic_set_gist, we need to move the - * existential variable back into the position where the calling - * function expects it (assuming there are any constraints left). - * We do this by adding an equality between the given dimension and - * the existentially quantified variable. - * - * If there are no existentially quantified variables left, then - * we don't need to add this equality. - * If, on the other hand, the resulting basic set involves more - * than one existentially quantified variable, then the caller - * will not be able to handle the result, so we just return the - * original input instead. - */ -CloogConstraintSet *cloog_constraint_set_reduce(CloogConstraintSet *constraints, - int level, CloogEqualities *equal, int nb_par, cloog_int_t *bound) -{ - int j; - isl_space *idim; - struct isl_basic_set *eq; - struct isl_basic_map *id; - struct cloog_isl_dim dim; - struct isl_constraint *c; - unsigned constraints_dim; - unsigned n_div; - isl_basic_set *bset, *orig; - - bset = cloog_constraints_set_to_isl(constraints); - orig = isl_basic_set_copy(bset); - dim = set_cloog_dim_to_isl_dim(constraints, level - 1); - assert(dim.type == isl_dim_set); - - eq = NULL; - for (j = 0; j < level - 1; ++j) { - isl_basic_set *bset_j; - if (equal->types[j] != EQTYPE_EXAFFINE) - continue; - bset_j = equality_to_basic_set(equal, j); - if (!eq) - eq = bset_j; - else - eq = isl_basic_set_intersect(eq, bset_j); - } - if (!eq) { - isl_basic_set_free(orig); - return cloog_constraint_set_from_isl_basic_set(bset); - } - - idim = isl_space_map_from_set(isl_basic_set_get_space(bset)); - id = isl_basic_map_identity(idim); - id = isl_basic_map_remove_dims(id, isl_dim_out, dim.pos, 1); - bset = isl_basic_set_apply(bset, isl_basic_map_copy(id)); - bset = isl_basic_set_apply(bset, isl_basic_map_reverse(id)); - - constraints_dim = isl_basic_set_dim(bset, isl_dim_set); - eq = isl_basic_set_remove_dims(eq, isl_dim_set, constraints_dim, - isl_basic_set_dim(eq, isl_dim_set) - constraints_dim); - bset = isl_basic_set_gist(bset, eq); - n_div = isl_basic_set_dim(bset, isl_dim_div); - if (n_div > 1) { - isl_basic_set_free(bset); - return cloog_constraint_set_from_isl_basic_set(orig); - } - if (n_div < 1) { - isl_basic_set_free(orig); - return cloog_constraint_set_from_isl_basic_set(bset); - } - - c = isl_equality_alloc(isl_basic_set_get_local_space(bset)); - c = isl_constraint_set_coefficient_si(c, isl_dim_div, 0, 1); - c = isl_constraint_set_coefficient_si(c, isl_dim_set, dim.pos, -1); - bset = isl_basic_set_add_constraint(bset, c); - - isl_int_set_si(*bound, 0); - constraints = cloog_constraint_set_from_isl_basic_set(bset); - cloog_constraint_set_foreach_constraint(constraints, - add_constant_term, bound); - - isl_basic_set_free(orig); - return cloog_constraint_set_from_isl_basic_set(bset); -} - -CloogConstraint *cloog_constraint_copy(CloogConstraint *constraint) -{ - return cloog_constraint_from_isl_constraint( - isl_constraint_copy(cloog_constraint_to_isl(constraint))); -} - -void cloog_constraint_release(CloogConstraint *constraint) -{ - isl_constraint_free(cloog_constraint_to_isl(constraint)); -} - -struct cloog_isl_foreach { - int (*fn)(CloogConstraint *constraint, void *user); - void *user; -}; - -static int cloog_isl_foreach_cb(__isl_take isl_constraint *c, void *user) -{ - struct cloog_isl_foreach *data = (struct cloog_isl_foreach *)user; - int ret; - - if (isl_constraint_is_div_constraint(c)) { - isl_constraint_free(c); - return 0; - } - - ret = data->fn(cloog_constraint_from_isl_constraint(c), data->user); - - isl_constraint_free(c); - - return ret; -} - -int cloog_constraint_set_foreach_constraint(CloogConstraintSet *constraints, - int (*fn)(CloogConstraint *constraint, void *user), void *user) -{ - struct cloog_isl_foreach data = { fn, user }; - isl_basic_set *bset; - - bset = cloog_constraints_set_to_isl(constraints); - return isl_basic_set_foreach_constraint(bset, - cloog_isl_foreach_cb, &data); -} - -CloogConstraint *cloog_equal_constraint(CloogEqualities *equal, int j) -{ - isl_constraint *c; - - c = isl_constraint_copy(equal->constraints[j]); - return cloog_constraint_from_isl_constraint(c); -} - -/* Given a stride constraint on iterator i (specified by level) of the form - * - * i = f(outer iterators) + stride * f(existentials) - * - * extract f as an isl_aff. - */ -static isl_aff *extract_stride_offset(__isl_keep isl_constraint *c, - int level, CloogStride *stride) -{ - int i; - isl_space *dim = isl_constraint_get_space(c); - isl_local_space *ls = isl_local_space_from_space(dim); - isl_aff *offset = isl_aff_zero_on_domain(ls); - isl_int u; - unsigned nparam, nvar; - - isl_int_init(u); - - nparam = isl_constraint_dim(c, isl_dim_param); - nvar = isl_constraint_dim(c, isl_dim_set); - - for (i = 0; i < nparam; ++i) { - isl_constraint_get_coefficient(c, isl_dim_param, i, &u); - isl_int_mul(u, u, stride->factor); - offset = isl_aff_set_coefficient(offset, isl_dim_param, i, u); - } - for (i = 0; i < nvar; ++i) { - if (i == level - 1) - continue; - isl_constraint_get_coefficient(c, isl_dim_set, i, &u); - isl_int_mul(u, u, stride->factor); - offset = isl_aff_set_coefficient(offset, isl_dim_in, i, u); - } - isl_constraint_get_constant(c, &u); - isl_int_mul(u, u, stride->factor); - offset = isl_aff_set_constant(offset, u); - - isl_int_clear(u); - - return offset; -} - -/* Update the given lower bound on level such that it satisfies the stride - * constraint. The computation performed here is essentially the same - * as that performed in constraint_stride_lower_c. - * - * We update the constraint - * - * a i + f >= 0 - * - * to - * - * i >= s * ceil((-f/a - d)/s) + d - * - * with s the stride and d the offset encoded in the stride constraint. - */ -CloogConstraint *cloog_constraint_stride_lower_bound(CloogConstraint *c, - int level, CloogStride *stride) -{ - isl_constraint *stride_c = cloog_constraint_to_isl(stride->constraint); - isl_constraint *bound = cloog_constraint_to_isl(c); - isl_aff *offset; - isl_aff *lower; - - lower = isl_constraint_get_bound(bound, isl_dim_set, level - 1); - isl_constraint_free(bound); - - offset = extract_stride_offset(stride_c, level, stride); - - lower = isl_aff_sub(lower, isl_aff_copy(offset)); - lower = isl_aff_scale_down(lower, stride->stride); - lower = isl_aff_ceil(lower); - lower = isl_aff_scale(lower, stride->stride); - lower = isl_aff_add(lower, offset); - lower = isl_aff_neg(lower); - lower = isl_aff_add_coefficient_si(lower, isl_dim_in, level - 1, 1); - - bound = isl_inequality_from_aff(lower); - - return cloog_constraint_from_isl_constraint(bound); -} diff --git a/cloog-0.17.0/source/isl/domain.c b/cloog-0.17.0/source/isl/domain.c deleted file mode 100644 index 6c4d8dc..0000000 --- a/cloog-0.17.0/source/isl/domain.c +++ /dev/null @@ -1,1913 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef OSL_SUPPORT -#include -#include -#endif - -CloogDomain *cloog_domain_from_isl_set(struct isl_set *set) -{ - if (isl_set_is_params(set)) - set = isl_set_from_params(set); - set = isl_set_detect_equalities(set); - set = isl_set_compute_divs(set); - return (CloogDomain *)set; -} - -__isl_give isl_set *isl_set_from_cloog_domain(CloogDomain *domain) -{ - return (isl_set *)domain; -} - -CloogScattering *cloog_scattering_from_isl_map(struct isl_map *map) -{ - return (CloogScattering *)map; -} - -__isl_give isl_map *isl_map_from_cloog_scattering(CloogScattering *scattering) -{ - return (isl_map *)scattering; -} - - -/** - * Returns true if each scattering dimension is defined in terms - * of the original iterators. - */ -int cloog_scattering_fully_specified(CloogScattering *scattering, - CloogDomain *domain) -{ - isl_map *map = isl_map_from_cloog_scattering(scattering); - return isl_map_is_single_valued(map); -} - - -CloogConstraintSet *cloog_domain_constraints(CloogDomain *domain) -{ - isl_basic_set *bset; - isl_set *set = isl_set_from_cloog_domain(domain); - assert(isl_set_n_basic_set(set) == 1); - bset = isl_set_copy_basic_set(set); - return cloog_constraint_set_from_isl_basic_set(bset); -} - - -void cloog_domain_print_constraints(FILE *foo, CloogDomain *domain, - int print_number) -{ - isl_basic_set *bset; - isl_set *set = isl_set_from_cloog_domain(domain); - - if (print_number) - isl_set_print(set, foo, 0, ISL_FORMAT_EXT_POLYLIB); - else { - assert(isl_set_n_basic_set(set) == 1); - bset = isl_set_copy_basic_set(set); - isl_basic_set_print(bset, foo, - 0, NULL, NULL, ISL_FORMAT_POLYLIB); - isl_basic_set_free(bset); - } -} - - -void cloog_scattering_print_constraints(FILE *foo, CloogScattering *scattering) -{ - isl_map *map = isl_map_from_cloog_scattering(scattering); - isl_map_print(map, foo, 0, ISL_FORMAT_EXT_POLYLIB); -} - - -void cloog_domain_free(CloogDomain * domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - isl_set_free(set); -} - - -void cloog_scattering_free(CloogScattering *scatt) -{ - isl_map *map = isl_map_from_cloog_scattering(scatt); - isl_map_free(map); -} - - -CloogDomain * cloog_domain_copy(CloogDomain * domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return cloog_domain_from_isl_set(isl_set_copy(set)); -} - - -/** - * cloog_domain_convex function: - * Computes the convex hull of domain. - */ -CloogDomain *cloog_domain_convex(CloogDomain *domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - set = isl_set_from_basic_set(isl_set_convex_hull(isl_set_copy(set))); - return cloog_domain_from_isl_set(set); -} - - -/** - * cloog_domain_simple_convex: - * Given a list (union) of polyhedra, this function returns a "simple" - * convex hull of this union. In particular, the constraints of the - * the returned polyhedron consist of (parametric) lower and upper - * bounds on individual variables and constraints that appear in the - * original polyhedra. - */ -CloogDomain *cloog_domain_simple_convex(CloogDomain *domain) -{ - struct isl_basic_set *hull; - isl_set *set = isl_set_from_cloog_domain(domain); - - if (cloog_domain_isconvex(domain)) - return cloog_domain_copy(domain); - - hull = isl_set_bounded_simple_hull(isl_set_copy(set)); - return cloog_domain_from_isl_set(isl_set_from_basic_set(hull)); -} - - -/** - * cloog_domain_simplify function: - * Given two polyhedral domains (dom1) and (dom2), - * this function finds the largest domain set (or the smallest list - * of non-redundant constraints), that when intersected with polyhedral - * domain (dom2) equals (dom1)intersect(dom2). The output is a new CloogDomain - * structure with a polyhedral domain with the "redundant" constraints removed. - * NB: the second domain is required not to be a union. - */ -CloogDomain *cloog_domain_simplify(CloogDomain *dom1, CloogDomain *dom2) -{ - isl_set *set1 = isl_set_from_cloog_domain(dom1); - isl_set *set2 = isl_set_from_cloog_domain(dom2); - set1 = isl_set_gist(isl_set_copy(set1), isl_set_copy(set2)); - return cloog_domain_from_isl_set(set1); -} - - -/** - * cloog_domain_union function: - * This function returns a new polyhedral domain which is the union of - * two polyhedral domains (dom1) U (dom2). - * Frees dom1 and dom2; - */ -CloogDomain *cloog_domain_union(CloogDomain *dom1, CloogDomain *dom2) -{ - isl_set *set1 = isl_set_from_cloog_domain(dom1); - isl_set *set2 = isl_set_from_cloog_domain(dom2); - set1 = isl_set_union(set1, set2); - return cloog_domain_from_isl_set(set1); -} - - - -/** - * cloog_domain_intersection function: - * This function returns a new polyhedral domain which is the intersection of - * two polyhedral domains (dom1) \cap (dom2). - */ -CloogDomain *cloog_domain_intersection(CloogDomain *dom1, CloogDomain *dom2) -{ - isl_set *set1 = isl_set_from_cloog_domain(dom1); - isl_set *set2 = isl_set_from_cloog_domain(dom2); - set1 = isl_set_intersect(isl_set_copy(set1), isl_set_copy(set2)); - return cloog_domain_from_isl_set(set1); -} - - -/** - * cloog_domain_difference function: - * Returns the set difference domain \ minus. - */ -CloogDomain *cloog_domain_difference(CloogDomain *domain, CloogDomain *minus) -{ - isl_set *set1 = isl_set_from_cloog_domain(domain); - isl_set *set2 = isl_set_from_cloog_domain(minus); - set1 = isl_set_subtract(isl_set_copy(set1), isl_set_copy(set2)); - return cloog_domain_from_isl_set(set1); -} - - -/** - * cloog_domain_sort function: - * This function topologically sorts (nb_doms) domains. Here (doms) is an - * array of pointers to CloogDomains, (nb_doms) is the number of domains, - * (level) is the level to consider for partial ordering (nb_par) is the - * parameter space dimension, (permut) if not NULL, is an array of (nb_doms) - * integers that contains a permutation specification after call in order to - * apply the topological sorting. - */ -void cloog_domain_sort(CloogDomain **doms, unsigned nb_doms, unsigned level, - int *permut) -{ - int i, j, k, cmp; - struct isl_ctx *ctx; - unsigned char **follows; - isl_set *set_i, *set_j; - isl_basic_set *bset_i, *bset_j; - - if (!nb_doms) - return; - set_i = isl_set_from_cloog_domain(doms[0]); - ctx = isl_set_get_ctx(set_i); - for (i = 0; i < nb_doms; i++) { - set_i = isl_set_from_cloog_domain(doms[i]); - assert(isl_set_n_basic_set(set_i) == 1); - } - - follows = isl_alloc_array(ctx, unsigned char *, nb_doms); - assert(follows); - for (i = 0; i < nb_doms; ++i) { - follows[i] = isl_alloc_array(ctx, unsigned char, nb_doms); - assert(follows[i]); - for (j = 0; j < nb_doms; ++j) - follows[i][j] = 0; - } - - for (i = 1; i < nb_doms; ++i) { - for (j = 0; j < i; ++j) { - if (follows[i][j] || follows[j][i]) - continue; - set_i = isl_set_from_cloog_domain(doms[i]); - set_j = isl_set_from_cloog_domain(doms[j]); - bset_i = isl_set_copy_basic_set(set_i); - bset_j = isl_set_copy_basic_set(set_j); - cmp = isl_basic_set_compare_at(bset_i, bset_j, level-1); - isl_basic_set_free(bset_i); - isl_basic_set_free(bset_j); - if (!cmp) - continue; - if (cmp > 0) { - follows[i][j] = 1; - for (k = 0; k < i; ++k) - follows[i][k] |= follows[j][k]; - } else { - follows[j][i] = 1; - for (k = 0; k < i; ++k) - follows[k][i] |= follows[k][j]; - } - } - } - - for (i = 0, j = 0; i < nb_doms; j = (j + 1) % nb_doms) { - for (k = 0; k < nb_doms; ++k) - if (follows[j][k]) - break; - if (k < nb_doms) - continue; - for (k = 0; k < nb_doms; ++k) - follows[k][j] = 0; - follows[j][j] = 1; - permut[i] = 1 + j; - ++i; - } - - for (i = 0; i < nb_doms; ++i) - free(follows[i]); - free(follows); -} - - -/** - * Check whether there is or may be any value of dom1 at the given level - * that is greater than or equal to a value of dom2 at the same level. - * - * Return - * 1 is there is or may be a greater-than pair. - * 0 if there is no greater-than pair, but there may be an equal-to pair - * -1 if there is definitely no such pair - */ -int cloog_domain_follows(CloogDomain *dom1, CloogDomain *dom2, unsigned level) -{ - isl_set *set1 = isl_set_from_cloog_domain(dom1); - isl_set *set2 = isl_set_from_cloog_domain(dom2); - int follows; - - follows = isl_set_follows_at(set1, set2, level - 1); - assert(follows >= -1); - - return follows; -} - - -/** - * cloog_domain_empty function: - * Returns an empty domain of the same dimensions as template. - */ -CloogDomain *cloog_domain_empty(CloogDomain *template) -{ - isl_set *set = isl_set_from_cloog_domain(template); - return cloog_domain_from_isl_set(isl_set_empty_like(set)); -} - - -/** - * Return 1 if the specified dimension has both an upper and a lower bound. - */ -int cloog_domain_is_bounded(CloogDomain *dom, unsigned level) -{ - isl_set *set = isl_set_from_cloog_domain(dom); - return isl_set_dim_is_bounded(set, isl_dim_set, level - 1); -} - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ - - -/** - * cloog_domain_print_structure : - * this function is a more human-friendly way to display the CloogDomain data - * structure, it only shows the constraint system and includes an indentation - * level (level) in order to work with others print_structure functions. - */ -void cloog_domain_print_structure(FILE *file, CloogDomain *domain, int level, - const char *name) -{ - int i ; - isl_set *set = isl_set_from_cloog_domain(domain); - - /* Go to the right level. */ - for (i = 0; i < level; i++) - fprintf(file, "|\t"); - - if (!set) { - fprintf(file, "+-- Null CloogDomain\n"); - return; - } - fprintf(file, "+-- %s\n", name); - for (i = 0; i < level+1; ++i) - fprintf(file, "|\t"); - - isl_set_print(set, file, 0, ISL_FORMAT_ISL); - - fprintf(file, "\n"); -} - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ - - -void cloog_domain_list_free(CloogDomainList *list) -{ - CloogDomainList *next; - - for ( ; list; list = next) { - next = list->next; - cloog_domain_free(list->domain); - free(list); - } -} - - -/** - * cloog_scattering_list_free function: - * This function frees the allocated memory for a CloogScatteringList structure. - */ -void cloog_scattering_list_free(CloogScatteringList *list) -{ - while (list != NULL) { - CloogScatteringList *temp = list->next; - isl_map *map = isl_map_from_cloog_scattering(list->scatt); - isl_map_free(map); - free(list); - list = temp; - } -} - - -/****************************************************************************** - * Reading function * - ******************************************************************************/ - - -/** - * cloog_domain_read_context function: - * Read parameter domain. - */ -CloogDomain *cloog_domain_read_context(CloogState *state, FILE *input) -{ - struct isl_ctx *ctx = state->backend->ctx; - isl_set *set; - - set = isl_set_read_from_file(ctx, input); - set = isl_set_move_dims(set, isl_dim_param, 0, - isl_dim_set, 0, isl_set_dim(set, isl_dim_set)); - - return cloog_domain_from_isl_set(set); -} - - -/** - * cloog_domain_from_context - * Reinterpret context by turning parameters into variables. - */ -CloogDomain *cloog_domain_from_context(CloogDomain *context) -{ - isl_set *set = isl_set_from_cloog_domain(context); - - set = isl_set_move_dims(set, isl_dim_set, 0, - isl_dim_param, 0, isl_set_dim(set, isl_dim_param)); - - return cloog_domain_from_isl_set(set); -} - - -/** - * cloog_domain_union_read function: - * This function reads a union of polyhedra into a file (input) and - * returns a pointer to a CloogDomain containing the read information. - */ -CloogDomain *cloog_domain_union_read(CloogState *state, - FILE *input, int nb_parameters) -{ - struct isl_ctx *ctx = state->backend->ctx; - struct isl_set *set; - - set = isl_set_read_from_file(ctx, input); - if (isl_set_dim(set, isl_dim_param) != nb_parameters) { - int dim = isl_set_dim(set, isl_dim_set); - set = isl_set_move_dims(set, isl_dim_param, 0, - isl_dim_set, dim - nb_parameters, nb_parameters); - } - return cloog_domain_from_isl_set(set); -} - - -/** - * cloog_domain_read_scattering function: - * This function reads in a scattering function from the file input. - * - * We try to read the scattering relation as a map, but if it is - * specified in the original PolyLib format, then isl_map_read_from_file - * will treat the input as a set return a map with zero input dimensions. - * In this case, we need to decompose the set into a map from - * scattering dimensions to domain dimensions and then invert the - * resulting map. - */ -CloogScattering *cloog_domain_read_scattering(CloogDomain *domain, FILE *input) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - isl_ctx *ctx = isl_set_get_ctx(set); - struct isl_map *scat; - unsigned nparam; - unsigned dim; - unsigned n_scat; - - dim = isl_set_dim(set, isl_dim_set); - nparam = isl_set_dim(set, isl_dim_param); - scat = isl_map_read_from_file(ctx, input); - if (isl_map_dim(scat, isl_dim_param) != nparam) { - int n_out = isl_map_dim(scat, isl_dim_out); - scat = isl_map_move_dims(scat, isl_dim_param, 0, - isl_dim_out, n_out - nparam, nparam); - } - if (isl_map_dim(scat, isl_dim_in) != dim) { - n_scat = isl_map_dim(scat, isl_dim_out) - dim; - scat = isl_map_move_dims(scat, isl_dim_in, 0, - isl_dim_out, n_scat, dim); - } - return cloog_scattering_from_isl_map(scat); -} - -/****************************************************************************** - * CloogMatrix Reading function * - ******************************************************************************/ - -/** - * isl_constraint_read_from_matrix: - * Convert a single line of a matrix to a isl_constraint. - * Returns a pointer to the constraint if successful; NULL otherwise. - */ -static struct isl_constraint *isl_constraint_read_from_matrix( - struct isl_space *dim, cloog_int_t *row) -{ - struct isl_constraint *constraint; - int j; - int nvariables = isl_space_dim(dim, isl_dim_set); - int nparam = isl_space_dim(dim, isl_dim_param); - isl_local_space *ls = isl_local_space_from_space(dim); - - if (cloog_int_is_zero(row[0])) - constraint = isl_equality_alloc(ls); - else - constraint = isl_inequality_alloc(ls); - - for (j = 0; j < nvariables; ++j) - isl_constraint_set_coefficient(constraint, isl_dim_out, j, - row[1 + j]); - - for (j = 0; j < nparam; ++j) - isl_constraint_set_coefficient(constraint, isl_dim_param, j, - row[1 + nvariables + j]); - - isl_constraint_set_constant(constraint, row[1 + nvariables + nparam]); - - return constraint; -} - -/** - * isl_basic_set_read_from_matrix: - * Convert matrix to basic_set. The matrix contains nparam parameter columns. - * Returns a pointer to the basic_set if successful; NULL otherwise. - */ -static struct isl_basic_set *isl_basic_set_read_from_matrix(struct isl_ctx *ctx, - CloogMatrix* matrix, int nparam) -{ - struct isl_space *dim; - struct isl_basic_set *bset; - int i; - unsigned nrows, ncolumns; - - nrows = matrix->NbRows; - ncolumns = matrix->NbColumns; - int nvariables = ncolumns - 2 - nparam; - - dim = isl_space_set_alloc(ctx, nparam, nvariables); - - bset = isl_basic_set_universe(isl_space_copy(dim)); - - for (i = 0; i < nrows; ++i) { - cloog_int_t *row = matrix->p[i]; - struct isl_constraint *constraint = - isl_constraint_read_from_matrix(isl_space_copy(dim), row); - bset = isl_basic_set_add_constraint(bset, constraint); - } - - isl_space_free(dim); - - return bset; -} - -/** - * cloog_domain_from_cloog_matrix: - * Create a CloogDomain containing the constraints described in matrix. - * nparam is the number of parameters contained in the domain. - * Returns a pointer to the CloogDomain if successful; NULL otherwise. - */ -CloogDomain *cloog_domain_from_cloog_matrix(CloogState *state, - CloogMatrix *matrix, int nparam) -{ - struct isl_ctx *ctx = state->backend->ctx; - struct isl_basic_set *bset; - - bset = isl_basic_set_read_from_matrix(ctx, matrix, nparam); - - return cloog_domain_from_isl_set(isl_set_from_basic_set(bset)); -} - -/** - * cloog_scattering_from_cloog_matrix: - * Create a CloogScattering containing the constraints described in matrix. - * nparam is the number of parameters contained in the domain. - * Returns a pointer to the CloogScattering if successful; NULL otherwise. - */ -CloogScattering *cloog_scattering_from_cloog_matrix(CloogState *state, - CloogMatrix *matrix, int nb_scat, int nb_par) -{ - struct isl_ctx *ctx = state->backend->ctx; - struct isl_basic_set *bset; - struct isl_basic_map *scat; - struct isl_space *dims; - unsigned dim; - - bset = isl_basic_set_read_from_matrix(ctx, matrix, nb_par); - dim = isl_basic_set_n_dim(bset) - nb_scat; - dims = isl_space_alloc(ctx, nb_par, nb_scat, dim); - - scat = isl_basic_map_from_basic_set(bset, dims); - scat = isl_basic_map_reverse(scat); - return cloog_scattering_from_isl_map(isl_map_from_basic_map(scat)); -} - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - - -#ifdef OSL_SUPPORT -/** - * Converts an openscop relation to a CLooG domain. - * \param[in,out] state CLooG state. - * \param[in] relation OpenScop relation to convert. - * \return A new CloogDomain corresponding to the input OpenScop relation. - */ -CloogDomain *cloog_domain_from_osl_relation(CloogState *state, - osl_relation_p relation) { - char *str; - struct isl_ctx *ctx = state->backend->ctx; - isl_set *set; - CloogDomain *domain = NULL; - - if (relation != NULL) { - if (relation->precision != OSL_PRECISION_MP) - cloog_die("Non-GMP precision is not supported yet.\n"); - - str = osl_relation_spprint_polylib(relation, NULL); - set = isl_set_read_from_str(ctx, str); - free(str); - - domain = cloog_domain_from_isl_set(set); - } - - return domain; -} - - -/** - * Converts an openscop scattering relation to a CLooG scattering. - * \param[in,out] state CLooG state. - * \param[in] relation OpenScop relation to convert. - * \return A new CloogScattering corresponding to the input OpenScop relation. - */ -CloogScattering *cloog_scattering_from_osl_relation(CloogState *state, - osl_relation_p relation) { - char *str; - struct isl_ctx *ctx = state->backend->ctx; - isl_map *map; - CloogScattering *scattering = NULL; - - if (relation != NULL) { - if (relation->precision != OSL_PRECISION_MP) - cloog_die("Non-GMP precision is not supported yet.\n"); - - if (relation->type != OSL_TYPE_SCATTERING) - cloog_die("Cannot convert a non-scattering relation to a scattering.\n"); - - str = osl_relation_spprint_polylib(relation, NULL); - map = isl_map_read_from_str(ctx, str); - free(str); - - scattering = cloog_scattering_from_isl_map(map); - } - - return scattering; -} -#endif - -/** - * cloog_domain_isempty function: - */ -int cloog_domain_isempty(CloogDomain *domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return isl_set_is_empty(set); -} - - -/** - * cloog_domain_universe function: - * This function returns the complete dim-dimensional space. - */ -CloogDomain *cloog_domain_universe(CloogState *state, unsigned dim) -{ - struct isl_space *dims; - struct isl_basic_set *bset; - - dims = isl_space_set_alloc(state->backend->ctx, 0, dim); - bset = isl_basic_set_universe(dims); - return cloog_domain_from_isl_set(isl_set_from_basic_set(bset)); -} - - -/** - * cloog_domain_project function: - * This function returns the projection of - * (domain) on the (level) first dimensions (i.e. outer loops). - */ -CloogDomain *cloog_domain_project(CloogDomain *domain, int level) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - set = isl_set_remove_dims(isl_set_copy(set), isl_dim_set, - level, isl_set_n_dim(set) - level); - set = isl_set_compute_divs(set); - if (level > 0) - set = isl_set_remove_divs_involving_dims(set, - isl_dim_set, level - 1, 1); - return cloog_domain_from_isl_set(set); -} - - -/** - * cloog_domain_extend function: - * This function returns the (domain) given as input with (dim) - * dimensions and (nb_par) parameters. - * This function does not free (domain), and returns a new CloogDomain. - */ -CloogDomain *cloog_domain_extend(CloogDomain *domain, int dim) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - int n = isl_set_dim(set, isl_dim_set); - set = isl_set_add_dims(isl_set_copy(set), isl_dim_set, dim - n); - return cloog_domain_from_isl_set(set); -} - - -/** - * cloog_domain_never_integral function: - * For us, an equality like 3*i -4 = 0 is always false since 4%3 != 0. - * There is no need to check for such constraints explicitly for the isl - * backend. - */ -int cloog_domain_never_integral(CloogDomain * domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return isl_set_is_empty(set); -} - - -/** - * Check whether the loop at "level" is executed at most once. - * We construct a map that maps all remaining variables to this iterator - * and check whether this map is single valued. - * - * Alternatively, we could have mapped the domain through a mapping - * [p] -> { [..., i] -> [..., i'] : i' > i } - * and then taken the intersection of the original domain and the transformed - * domain. If this intersection is empty, then the corresponding - * loop is executed at most once. - */ -int cloog_domain_is_otl(CloogDomain *domain, int level) -{ - int otl; - isl_set *set = isl_set_from_cloog_domain(domain); - isl_map *map; - - map = isl_map_from_domain(isl_set_copy(set)); - map = isl_map_move_dims(map, isl_dim_out, 0, isl_dim_in, level - 1, 1); - otl = isl_map_is_single_valued(map); - isl_map_free(map); - - return otl; -} - - -/** - * cloog_domain_stride function: - * This function finds the stride imposed to unknown with the column number - * 'strided_level' in order to be integral. For instance, if we have a - * constraint like -i - 2j + 2k = 0, and we consider k, then k can be integral - * only if (i + 2j)%2 = 0. Then only if i%2 = 0. Then k imposes a stride 2 to - * the unknown i. The function returns the imposed stride in a parameter field. - * - domain is the set of constraint we have to consider, - * - strided_level is the column number of the unknown for which a stride have - * to be found, - * - looking_level is the column number of the unknown that impose a stride to - * the first unknown. - * - stride is the stride that is returned back as a function parameter. - * - offset is the value of the constant c if the condition is of the shape - * (i + c)%s = 0, s being the stride. - */ -void cloog_domain_stride(CloogDomain *domain, int strided_level, - cloog_int_t *stride, cloog_int_t *offset) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - isl_set_dim_residue_class(set, strided_level - 1, stride, offset); - if (!isl_int_is_zero(*offset)) - isl_int_sub(*offset, *stride, *offset); - return; -} - - -struct cloog_can_stride { - int level; - int can_stride; -}; - -static int constraint_can_stride(__isl_take isl_constraint *c, void *user) -{ - struct cloog_can_stride *ccs = (struct cloog_can_stride *)user; - int i; - isl_int v; - unsigned n_div; - - if (isl_constraint_is_equality(c)) { - isl_constraint_free(c); - return 0; - } - - isl_int_init(v); - isl_constraint_get_coefficient(c, isl_dim_set, ccs->level - 1, &v); - if (isl_int_is_pos(v)) { - n_div = isl_constraint_dim(c, isl_dim_div); - for (i = 0; i < n_div; ++i) { - isl_constraint_get_coefficient(c, isl_dim_div, i, &v); - if (!isl_int_is_zero(v)) - break; - } - if (i < n_div) - ccs->can_stride = 0; - } - isl_int_clear(v); - isl_constraint_free(c); - - return 0; -} - -static int basic_set_can_stride(__isl_take isl_basic_set *bset, void *user) -{ - struct cloog_can_stride *ccs = (struct cloog_can_stride *)user; - int r; - - r = isl_basic_set_foreach_constraint(bset, constraint_can_stride, ccs); - isl_basic_set_free(bset); - return r; -} - - -/** - * Return 1 if CLooG is allowed to perform stride detection on level "level" - * and 0 otherwise. - * Currently, stride detection is only allowed when none of the lower - * bound constraints involve any existentially quantified variables. - * The reason is that the current isl interface does not make it - * easy to construct an integer division that depends on other integer - * divisions. - * By not allowing existentially quantified variables in the constraints, - * we can ignore them in cloog_domain_stride_lower_bound. - */ -int cloog_domain_can_stride(CloogDomain *domain, int level) -{ - struct cloog_can_stride ccs = { level, 1 }; - isl_set *set = isl_set_from_cloog_domain(domain); - int r; - r = isl_set_foreach_basic_set(set, basic_set_can_stride, &ccs); - assert(r == 0); - return ccs.can_stride; -} - - -struct cloog_stride_lower { - int level; - CloogStride *stride; - isl_set *set; - isl_basic_set *bounds; -}; - -/* If the given constraint is a lower bound on csl->level, then add - * a lower bound to csl->bounds that makes sure that the remainder - * of the smallest value on division by csl->stride is equal to csl->offset. - * - * In particular, the given lower bound is of the form - * - * a i + f >= 0 - * - * where f may depend on the parameters and other iterators. - * The stride is s and the offset is d. - * The lower bound -f/a may not satisfy the above condition. In fact, - * it may not even be integral. We want to round this value of i up - * to the nearest value that satisfies the condition and add the corresponding - * lower bound constraint. This nearest value is obtained by rounding - * i - d up to the nearest multiple of s. - * That is, we first subtract d - * - * i' = -f/a - d - * - * then we round up to the nearest multiple of s - * - * i'' = s * ceil(i'/s) - * - * and finally, we add d again - * - * i''' = i'' + d - * - * and impose the constraint i >= i'''. - * - * We find - * - * i'' = s * ceil((-f - a * d)/(a * s)) = - s * floor((f + a * d)/(a * s)) - * - * i >= - s * floor((f + a * d)/(a * s)) + d - * - * or - * i + s * floor((f + a * d)/(a * s)) - d >= 0 - */ -static int constraint_stride_lower(__isl_take isl_constraint *c, void *user) -{ - struct cloog_stride_lower *csl = (struct cloog_stride_lower *)user; - isl_int v; - isl_constraint *bound; - isl_aff *b; - - if (isl_constraint_is_equality(c)) { - isl_constraint_free(c); - return 0; - } - - isl_int_init(v); - isl_constraint_get_coefficient(c, isl_dim_set, csl->level - 1, &v); - if (!isl_int_is_pos(v)) { - isl_int_clear(v); - isl_constraint_free(c); - - return 0; - } - - b = isl_constraint_get_bound(c, isl_dim_set, csl->level - 1); - - b = isl_aff_neg(b); - b = isl_aff_add_constant(b, csl->stride->offset); - b = isl_aff_scale_down(b, csl->stride->stride); - b = isl_aff_floor(b); - b = isl_aff_scale(b, csl->stride->stride); - isl_int_neg(v, csl->stride->offset); - b = isl_aff_add_constant(b, v); - b = isl_aff_add_coefficient_si(b, isl_dim_in, csl->level - 1, 1); - - bound = isl_inequality_from_aff(b); - - csl->bounds = isl_basic_set_add_constraint(csl->bounds, bound); - - isl_int_clear(v); - isl_constraint_free(c); - - return 0; -} - -/* This functions performs essentially the same operation as - * constraint_stride_lower, the only difference being that the offset d - * is not a constant, but an affine expression in terms of the parameters - * and earlier variables. In particular the affine expression is equal - * to the coefficients of stride->constraint multiplied by stride->factor. - * As in constraint_stride_lower, we add an extra bound - * - * i + s * floor((f + a * d)/(a * s)) - d >= 0 - * - * for each lower bound - * - * a i + f >= 0 - * - * where d is not the aforementioned affine expression. - */ -static int constraint_stride_lower_c(__isl_take isl_constraint *c, void *user) -{ - struct cloog_stride_lower *csl = (struct cloog_stride_lower *)user; - isl_int v; - isl_constraint *bound; - isl_constraint *csl_c; - isl_aff *d, *b; - - if (isl_constraint_is_equality(c)) { - isl_constraint_free(c); - return 0; - } - - isl_int_init(v); - isl_constraint_get_coefficient(c, isl_dim_set, csl->level - 1, &v); - if (!isl_int_is_pos(v)) { - isl_int_clear(v); - isl_constraint_free(c); - - return 0; - } - - csl_c = cloog_constraint_to_isl(csl->stride->constraint); - - d = isl_constraint_get_aff(csl_c); - d = isl_aff_drop_dims(d, isl_dim_div, 0, isl_aff_dim(d, isl_dim_div)); - d = isl_aff_set_coefficient_si(d, isl_dim_in, csl->level - 1, 0); - d = isl_aff_scale(d, csl->stride->factor); - - b = isl_constraint_get_bound(c, isl_dim_set, csl->level - 1); - - b = isl_aff_neg(b); - b = isl_aff_add(b, isl_aff_copy(d)); - b = isl_aff_scale_down(b, csl->stride->stride); - b = isl_aff_floor(b); - b = isl_aff_scale(b, csl->stride->stride); - b = isl_aff_sub(b, d); - b = isl_aff_add_coefficient_si(b, isl_dim_in, csl->level - 1, 1); - - bound = isl_inequality_from_aff(b); - - csl->bounds = isl_basic_set_add_constraint(csl->bounds, bound); - - isl_int_clear(v); - isl_constraint_free(c); - - return 0; -} - -static int basic_set_stride_lower(__isl_take isl_basic_set *bset, void *user) -{ - struct cloog_stride_lower *csl = (struct cloog_stride_lower *)user; - int r; - - csl->bounds = isl_basic_set_universe_like(bset); - if (csl->stride->constraint) - r = isl_basic_set_foreach_constraint(bset, - &constraint_stride_lower_c, csl); - else - r = isl_basic_set_foreach_constraint(bset, - &constraint_stride_lower, csl); - bset = isl_basic_set_intersect(bset, csl->bounds); - csl->set = isl_set_union(csl->set, isl_set_from_basic_set(bset)); - - return r; -} - -/** - * Update the lower bounds at level "level" to the given stride information. - * That is, make sure that the remainder on division by "stride" - * is equal to "offset". - */ -CloogDomain *cloog_domain_stride_lower_bound(CloogDomain *domain, int level, - CloogStride *stride) -{ - struct cloog_stride_lower csl; - isl_set *set = isl_set_from_cloog_domain(domain); - int r; - - csl.stride = stride; - csl.level = level; - csl.set = isl_set_empty_like(set); - - r = isl_set_foreach_basic_set(set, basic_set_stride_lower, &csl); - assert(r == 0); - - cloog_domain_free(domain); - return cloog_domain_from_isl_set(csl.set); -} - - -/* Add stride constraint, if any, to domain. - */ -CloogDomain *cloog_domain_add_stride_constraint(CloogDomain *domain, - CloogStride *stride) -{ - isl_constraint *c; - isl_set *set; - - if (!stride || !stride->constraint) - return domain; - - set = isl_set_from_cloog_domain(domain); - c = isl_constraint_copy(cloog_constraint_to_isl(stride->constraint)); - - set = isl_set_add_constraint(set, c); - - return cloog_domain_from_isl_set(set); -} - - -/** - * cloog_domain_lazy_equal function: - * This function returns 1 if the domains given as input are the same, 0 if it - * is unable to decide. - */ -int cloog_domain_lazy_equal(CloogDomain *d1, CloogDomain *d2) -{ - isl_set *set1 = isl_set_from_cloog_domain(d1); - isl_set *set2 = isl_set_from_cloog_domain(d2); - return isl_set_fast_is_equal(set1, set2); -} - -struct cloog_bound_split { - isl_set *set; - int level; - int lower; - int upper; -}; - -static int constraint_bound_split(__isl_take isl_constraint *c, void *user) -{ - struct cloog_bound_split *cbs = (struct cloog_bound_split *)user; - isl_int v; - int i; - int handle = 0; - - isl_int_init(v); - isl_constraint_get_coefficient(c, isl_dim_set, cbs->level - 1, &v); - if (!cbs->lower && isl_int_is_pos(v)) - cbs->lower = handle = 1; - else if (!cbs->upper && isl_int_is_neg(v)) - cbs->upper = handle = 1; - if (handle) { - for (i = 0; i < isl_set_dim(cbs->set, isl_dim_param); ++i) { - isl_constraint_get_coefficient(c, isl_dim_param, i, &v); - if (isl_int_is_zero(v)) - continue; - cbs->set = isl_set_split_dims(cbs->set, - isl_dim_param, i, 1); - } - } - isl_int_clear(v); - isl_constraint_free(c); - - return (cbs->lower && cbs->upper) ? -1 : 0; -} - -static int basic_set_bound_split(__isl_take isl_basic_set *bset, void *user) -{ - struct cloog_bound_split *cbs = (struct cloog_bound_split *)user; - int r; - - cbs->lower = 0; - cbs->upper = 0; - r = isl_basic_set_foreach_constraint(bset, constraint_bound_split, cbs); - isl_basic_set_free(bset); - return ((!cbs->lower || !cbs->upper) && r < 0) ? -1 : 0; -} - -/** - * Return a union of sets S_i such that the convex hull of "dom", - * when intersected with one the sets S_i, will have an upper and - * lower bound for the dimension at "level" (provided "dom" itself - * has such bounds for the dimensions). - * - * We currently take a very simple approach. For each of the basic - * sets in "dom" we pick a lower and an upper bound and split the - * range of any parameter involved in these two bounds in a - * nonnegative and a negative part. This ensures that the symbolic - * constant in these two constraints are themselves bounded and - * so there will be at least one upper and one lower bound - * in the convex hull. - */ -CloogDomain *cloog_domain_bound_splitter(CloogDomain *dom, int level) -{ - struct cloog_bound_split cbs; - isl_set *set = isl_set_from_cloog_domain(dom); - int r; - cbs.level = level; - cbs.set = isl_set_universe_like(set); - r = isl_set_foreach_basic_set(set, basic_set_bound_split, &cbs); - assert(r == 0); - return cloog_domain_from_isl_set(cbs.set); -} - - -/* Check whether the union of scattering functions over all domains - * is obviously injective. - */ -static int injective_scattering(CloogScatteringList *list) -{ - isl_map *map; - isl_union_map *umap; - int injective; - int i = 0; - char name[30]; - - if (!list) - return 1; - - map = isl_map_copy(isl_map_from_cloog_scattering(list->scatt)); - snprintf(name, sizeof(name), "S%d", i); - map = isl_map_set_tuple_name(map, isl_dim_in, name); - umap = isl_union_map_from_map(map); - - for (list = list->next, ++i; list; list = list->next, ++i) { - map = isl_map_copy(isl_map_from_cloog_scattering(list->scatt)); - snprintf(name, sizeof(name), "S%d", i); - map = isl_map_set_tuple_name(map, isl_dim_in, name); - umap = isl_union_map_add_map(umap, map); - } - - injective = isl_union_map_plain_is_injective(umap); - - isl_union_map_free(umap); - - return injective; -} - - -/** - * cloog_scattering_lazy_block function: - * This function returns 1 if the two scattering functions s1 and s2 given - * as input are the same (except possibly for the final dimension, where we - * allow a difference of 1), assuming that the domains on which this - * scatterings are applied are the same. - * In fact this function answers the question "can I - * safely consider the two domains as only one with two statements (a block) ?". - * A difference of 1 in the final dimension is only allowed if the - * entire scattering function is injective. - * - s1 and s2 are the two domains to check for blocking, - * - scattering is the linked list of all domains, - * - scattdims is the total number of scattering dimentions. - */ -int cloog_scattering_lazy_block(CloogScattering *s1, CloogScattering *s2, - CloogScatteringList *scattering, int scattdims) -{ - int i; - struct isl_space *dim; - struct isl_map *rel; - struct isl_set *delta; - isl_map *map1 = isl_map_from_cloog_scattering(s1); - isl_map *map2 = isl_map_from_cloog_scattering(s2); - int fixed, block; - isl_int cst; - unsigned n_scat; - - n_scat = isl_map_dim(map1, isl_dim_out); - if (n_scat != isl_map_dim(map2, isl_dim_out)) - return 0; - - dim = isl_map_get_space(map1); - dim = isl_space_map_from_set(isl_space_domain(dim)); - rel = isl_map_identity(dim); - rel = isl_map_apply_domain(rel, isl_map_copy(map1)); - rel = isl_map_apply_range(rel, isl_map_copy(map2)); - delta = isl_map_deltas(rel); - isl_int_init(cst); - for (i = 0; i < n_scat; ++i) { - fixed = isl_set_fast_dim_is_fixed(delta, i, &cst); - if (fixed != 1) - break; - if (isl_int_is_zero(cst)) - continue; - if (i + 1 < n_scat) - break; - if (!isl_int_is_one(cst)) - break; - if (!injective_scattering(scattering)) - break; - } - block = i >= n_scat; - isl_int_clear(cst); - isl_set_free(delta); - return block; -} - - -/** - * cloog_domain_lazy_disjoint function: - * This function returns 1 if the domains given as input are disjoint, 0 if it - * is unable to decide. - */ -int cloog_domain_lazy_disjoint(CloogDomain *d1, CloogDomain *d2) -{ - isl_set *set1 = isl_set_from_cloog_domain(d1); - isl_set *set2 = isl_set_from_cloog_domain(d2); - return isl_set_fast_is_disjoint(set1, set2); -} - - -/** - * cloog_scattering_list_lazy_same function: - * This function returns 1 if two domains in the list are the same, 0 if it - * is unable to decide. - */ -int cloog_scattering_list_lazy_same(CloogScatteringList *list) -{ - CloogScatteringList *one, *other; - isl_map *one_map, *other_map; - - for (one = list; one; one = one->next) { - one_map = isl_map_from_cloog_scattering(one->scatt); - for (other = one->next; other; other = other->next) { - other_map = isl_map_from_cloog_scattering(other->scatt); - if (isl_map_fast_is_equal(one_map, other_map)) - return 1; - } - } - return 0; -} - -int cloog_domain_dimension(CloogDomain * domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return isl_set_dim(set, isl_dim_set); -} - -int cloog_domain_parameter_dimension(CloogDomain *domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return isl_set_dim(set, isl_dim_param); -} - -int cloog_scattering_dimension(CloogScattering *scatt, CloogDomain *domain) -{ - isl_map *map = isl_map_from_cloog_scattering(scatt); - return isl_map_dim(map, isl_dim_out); -} - -int cloog_domain_isconvex(CloogDomain * domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return isl_set_n_basic_set(set) <= 1; -} - - -/** - * cloog_domain_cut_first function: - * This function splits off and returns the first convex set in the - * union "domain". The remainder of the union is returned in rest. - * The original "domain" itself is destroyed and may not be used - * after a call to this function. - */ -CloogDomain *cloog_domain_cut_first(CloogDomain *domain, CloogDomain **rest) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - struct isl_basic_set *first; - - first = isl_set_copy_basic_set(set); - set = isl_set_drop_basic_set(set, first); - *rest = cloog_domain_from_isl_set(set); - - return cloog_domain_from_isl_set(isl_set_from_basic_set(first)); -} - - -/** - * Given a union domain, try to find a simpler representation - * using fewer sets in the union. - * The original "domain" itself is destroyed and may not be used - * after a call to this function. - */ -CloogDomain *cloog_domain_simplify_union(CloogDomain *domain) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return cloog_domain_from_isl_set(isl_set_coalesce(set)); -} - - -/** - * cloog_scattering_lazy_isscalar function: - * this function returns 1 if the scattering dimension 'dimension' in the - * scattering 'scatt' is constant. - * If value is not NULL, then it is set to the constant value of dimension. - */ -int cloog_scattering_lazy_isscalar(CloogScattering *scatt, int dimension, - cloog_int_t *value) -{ - isl_map *map = isl_map_from_cloog_scattering(scatt); - return isl_map_fast_is_fixed(map, isl_dim_out, dimension, value); -} - - -/** - * cloog_domain_lazy_isconstant function: - * this function returns 1 if the dimension 'dimension' in the - * domain 'domain' is constant. - * If value is not NULL, then it is set to the constant value of dimension. - */ -int cloog_domain_lazy_isconstant(CloogDomain *domain, int dimension, - cloog_int_t *value) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - return isl_set_fast_dim_is_fixed(set, dimension, value); -} - - -/** - * cloog_scattering_erase_dimension function: - * this function returns a CloogDomain structure builds from 'domain' where - * we removed the dimension 'dimension' and every constraint involving this - * dimension. - */ -CloogScattering *cloog_scattering_erase_dimension(CloogScattering *scattering, - int dimension) -{ - isl_map *map = isl_map_from_cloog_scattering(scattering); - map = isl_map_remove_dims(isl_map_copy(map), isl_dim_out, dimension, 1); - return cloog_scattering_from_isl_map(map); -} - -/** - * cloog_domain_cube: - * Construct and return a dim-dimensional cube, with values ranging - * between min and max in each dimension. - */ -CloogDomain *cloog_domain_cube(CloogState *state, - int dim, cloog_int_t min, cloog_int_t max) -{ - int i; - struct isl_basic_set *cube; - struct isl_basic_set *interval; - struct isl_basic_set_list *list; - - if (dim == 0) - return cloog_domain_universe(state, dim); - - interval = isl_basic_set_interval(state->backend->ctx, min, max); - list = isl_basic_set_list_alloc(state->backend->ctx, dim); - for (i = 0; i < dim; ++i) - list = isl_basic_set_list_add(list, isl_basic_set_copy(interval)); - isl_basic_set_free(interval); - cube = isl_basic_set_list_product(list); - return cloog_domain_from_isl_set(isl_set_from_basic_set(cube)); -} - - -/** - * cloog_domain_scatter function: - * This function add the scattering (scheduling) informations to a domain. - */ -CloogDomain *cloog_domain_scatter(CloogDomain *domain, CloogScattering *scatt) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - isl_map *map = isl_map_from_cloog_scattering(scatt); - - map = isl_map_reverse(isl_map_copy(map)); - map = isl_map_intersect_range(map, set); - set = isl_set_flatten(isl_map_wrap(map)); - return cloog_domain_from_isl_set(set); -} - -static int add_domain_from_map(__isl_take isl_map *map, void *user) -{ - isl_space *dim; - const char *name; - CloogDomain *domain; - CloogScattering *scat; - CloogUnionDomain **ud = (CloogUnionDomain **)user; - - dim = isl_map_get_space(map); - name = isl_space_get_tuple_name(dim, isl_dim_in); - domain = cloog_domain_from_isl_set(isl_map_domain(isl_map_copy(map))); - scat = cloog_scattering_from_isl_map(map); - *ud = cloog_union_domain_add_domain(*ud, name, domain, scat, NULL); - isl_space_free(dim); - - return 0; -} - -/** - * Construct a CloogUnionDomain from an isl_union_map representing - * a global scattering function. The input is a mapping from different - * spaces (different tuple names and possibly different dimensions) - * to a common space. The iteration domains are set to the domains - * in each space. The statement names are set to the names of the - * spaces. The parameter names of the result are set to those of - * the input, but the iterator and scattering dimension names are - * left unspecified. - */ -CloogUnionDomain *cloog_union_domain_from_isl_union_map( - __isl_take isl_union_map *umap) -{ - int i; - int nparam; - isl_space *dim; - CloogUnionDomain *ud; - - dim = isl_union_map_get_space(umap); - nparam = isl_space_dim(dim, isl_dim_param); - - ud = cloog_union_domain_alloc(nparam); - - for (i = 0; i < nparam; ++i) { - const char *s = isl_space_get_dim_name(dim, isl_dim_param, i); - ud = cloog_union_domain_set_name(ud, CLOOG_PARAM, i, s); - } - isl_space_free(dim); - - if (isl_union_map_foreach_map(umap, &add_domain_from_map, &ud) < 0) { - isl_union_map_free(umap); - cloog_union_domain_free(ud); - assert(0); - } - - isl_union_map_free(umap); - - return ud; -} - -static int count_same_name(__isl_keep isl_space *dim, - enum isl_dim_type type, unsigned pos, const char *name) -{ - enum isl_dim_type t; - unsigned p, s; - int count = 0; - int len = strlen(name); - - for (t = isl_dim_param; t <= type && t <= isl_dim_out; ++t) { - s = t == type ? pos : isl_space_dim(dim, t); - for (p = 0; p < s; ++p) { - const char *n = isl_space_get_dim_name(dim, t, p); - if (n && !strncmp(n, name, len)) - count++; - } - } - return count; -} - -static CloogUnionDomain *add_domain(__isl_take isl_set *set, CloogUnionDomain *ud) -{ - int i, nvar; - isl_ctx *ctx; - isl_space *dim; - char buffer[20]; - const char *name; - CloogDomain *domain; - - ctx = isl_set_get_ctx(set); - dim = isl_set_get_space(set); - name = isl_space_get_tuple_name(dim, isl_dim_set); - set = isl_set_flatten(set); - set = isl_set_set_tuple_name(set, NULL); - domain = cloog_domain_from_isl_set(set); - ud = cloog_union_domain_add_domain(ud, name, domain, NULL, NULL); - - nvar = isl_space_dim(dim, isl_dim_set); - for (i = 0; i < nvar; ++i) { - char *long_name = NULL; - int n; - - name = isl_space_get_dim_name(dim, isl_dim_set, i); - if (!name) { - snprintf(buffer, sizeof(buffer), "i%d", i); - name = buffer; - } - n = count_same_name(dim, isl_dim_set, i, name); - if (n) { - int size = strlen(name) + 10; - long_name = isl_alloc_array(ctx, char, size); - if (!long_name) - cloog_die("memory overflow.\n"); - snprintf(long_name, size, "%s_%d", name, n); - name = long_name; - } - ud = cloog_union_domain_set_name(ud, CLOOG_ITER, i, name); - free(long_name); - } - isl_space_free(dim); - - return ud; -} - -/** - * Construct a CloogUnionDomain from an isl_set. - * The statement names are set to the names of the - * spaces. The parameter and iterator names of the result are set to those of - * the input, but the scattering dimension names are left unspecified. - */ -CloogUnionDomain *cloog_union_domain_from_isl_set( - __isl_take isl_set *set) -{ - int i; - int nparam; - isl_space *dim; - CloogUnionDomain *ud; - - dim = isl_set_get_space(set); - nparam = isl_space_dim(dim, isl_dim_param); - - ud = cloog_union_domain_alloc(nparam); - - for (i = 0; i < nparam; ++i) { - const char *s = isl_space_get_dim_name(dim, isl_dim_param, i); - ud = cloog_union_domain_set_name(ud, CLOOG_PARAM, i, s); - } - isl_space_free(dim); - - ud = add_domain(set, ud); - - return ud; -} - -/* Computes x, y and g such that g = gcd(a,b) and a*x+b*y = g */ -static void Euclid(cloog_int_t a, cloog_int_t b, - cloog_int_t *x, cloog_int_t *y, cloog_int_t *g) -{ - cloog_int_t c, d, e, f, tmp; - - cloog_int_init(c); - cloog_int_init(d); - cloog_int_init(e); - cloog_int_init(f); - cloog_int_init(tmp); - cloog_int_abs(c, a); - cloog_int_abs(d, b); - cloog_int_set_si(e, 1); - cloog_int_set_si(f, 0); - while (cloog_int_is_pos(d)) { - cloog_int_tdiv_q(tmp, c, d); - cloog_int_mul(tmp, tmp, f); - cloog_int_sub(e, e, tmp); - cloog_int_tdiv_q(tmp, c, d); - cloog_int_mul(tmp, tmp, d); - cloog_int_sub(c, c, tmp); - cloog_int_swap(c, d); - cloog_int_swap(e, f); - } - cloog_int_set(*g, c); - if (cloog_int_is_zero(a)) - cloog_int_set_si(*x, 0); - else if (cloog_int_is_pos(a)) - cloog_int_set(*x, e); - else cloog_int_neg(*x, e); - if (cloog_int_is_zero(b)) - cloog_int_set_si(*y, 0); - else { - cloog_int_mul(tmp, a, *x); - cloog_int_sub(tmp, c, tmp); - cloog_int_divexact(*y, tmp, b); - } - cloog_int_clear(c); - cloog_int_clear(d); - cloog_int_clear(e); - cloog_int_clear(f); - cloog_int_clear(tmp); -} - -/* Construct a CloogStride from the given constraint for the given level, - * if possible. - * We first compute the gcd of the coefficients of the existentially - * quantified variables and then remove any common factors it has - * with the coefficient at the given level. - * The result is the value of the stride and if it is not one, - * then it is possible to construct a CloogStride. - * The constraint leading to the stride is stored in the CloogStride - * as well a value (factor) such that the product of this value - * and the coefficient at the given level is equal to -1 modulo the stride. - */ -static CloogStride *construct_stride(isl_constraint *c, int level) -{ - int i, n, sign; - isl_int v, m, gcd, stride, factor; - CloogStride *s; - - if (!c) - return NULL; - - isl_int_init(v); - isl_int_init(m); - isl_int_init(gcd); - isl_int_init(factor); - isl_int_init(stride); - - isl_constraint_get_coefficient(c, isl_dim_set, level - 1, &v); - sign = isl_int_sgn(v); - isl_int_abs(m, v); - - isl_int_set_si(gcd, 0); - n = isl_constraint_dim(c, isl_dim_div); - for (i = 0; i < n; ++i) { - isl_constraint_get_coefficient(c, isl_dim_div, i, &v); - isl_int_gcd(gcd, gcd, v); - } - - isl_int_gcd(v, m, gcd); - isl_int_divexact(stride, gcd, v); - - if (isl_int_is_zero(stride) || isl_int_is_one(stride)) - s = NULL; - else { - Euclid(m, stride, &factor, &v, &gcd); - if (sign > 0) - isl_int_neg(factor, factor); - - c = isl_constraint_copy(c); - s = cloog_stride_alloc_from_constraint(stride, - cloog_constraint_from_isl_constraint(c), factor); - } - - isl_int_clear(stride); - isl_int_clear(factor); - isl_int_clear(gcd); - isl_int_clear(m); - isl_int_clear(v); - - return s; -} - -struct cloog_isl_find_stride_data { - int level; - CloogStride *stride; -}; - -/* Check if the given constraint can be used to derive - * a stride on the iterator identified by data->level. - * We first check that there are some existentially quantified variables - * and that the coefficient at data->level is non-zero. - * Then we call construct_stride for further checks and the actual - * construction of the CloogStride. - */ -static int find_stride(__isl_take isl_constraint *c, void *user) -{ - struct cloog_isl_find_stride_data *data; - int n; - isl_int v; - - data = (struct cloog_isl_find_stride_data *)user; - - if (data->stride) { - isl_constraint_free(c); - return 0; - } - - n = isl_constraint_dim(c, isl_dim_div); - if (n == 0) { - isl_constraint_free(c); - return 0; - } - - isl_int_init(v); - - isl_constraint_get_coefficient(c, isl_dim_set, data->level - 1, &v); - if (!isl_int_is_zero(v)) - data->stride = construct_stride(c, data->level); - - isl_int_clear(v); - - isl_constraint_free(c); - - return 0; -} - -/* Check if the given list of domains has a common stride on the given level. - * If so, return a pointer to a CloogStride object. If not, return NULL. - * - * We project out all later variables, take the union and compute - * the affine hull of the union. Then we check the (equality) - * constraints in this affine hull for imposing a stride. - */ -CloogStride *cloog_domain_list_stride(CloogDomainList *list, int level) -{ - struct cloog_isl_find_stride_data data = { level, NULL }; - isl_set *set; - isl_basic_set *aff; - int first = level; - int n; - int r; - - set = isl_set_from_cloog_domain(list->domain); - n = isl_set_dim(set, isl_dim_set) - first; - set = isl_set_project_out(isl_set_copy(set), isl_dim_set, first, n); - - for (list = list->next; list; list = list->next) { - isl_set *set_i = isl_set_from_cloog_domain(list->domain); - n = isl_set_dim(set_i, isl_dim_set) - first; - set_i = isl_set_project_out(isl_set_copy(set_i), - isl_dim_set, first, n); - set = isl_set_union(set, set_i); - } - aff = isl_set_affine_hull(set); - - r = isl_basic_set_foreach_constraint(aff, &find_stride, &data); - assert(r == 0); - - isl_basic_set_free(aff); - - return data.stride; -} - -struct cloog_can_unroll { - int can_unroll; - int level; - isl_constraint *c; - isl_set *set; - isl_int *n; -}; - - -/* - * Check if the given lower bound can be used for unrolling - * and, if so, return the unrolling factor/trip count in *v. - * If the lower bound involves any existentially quantified - * variables, we currently punt. - * Otherwise we compute the maximal value of (i - ceil(l) + 1), - * with l the given lower bound and i the iterator identified by level. - */ -static int is_valid_unrolling_lower_bound(struct cloog_can_unroll *ccu, - __isl_keep isl_constraint *c, isl_int *v) -{ - unsigned n_div; - isl_aff *aff; - enum isl_lp_result res; - - n_div = isl_constraint_dim(c, isl_dim_div); - if (isl_constraint_involves_dims(c, isl_dim_div, 0, n_div)) - return 0; - - aff = isl_constraint_get_bound(c, isl_dim_set, ccu->level - 1); - aff = isl_aff_ceil(aff); - aff = isl_aff_neg(aff); - aff = isl_aff_add_coefficient_si(aff, isl_dim_in, ccu->level - 1, 1); - res = isl_set_max(ccu->set, aff, v); - isl_aff_free(aff); - - if (res == isl_lp_unbounded) - return 0; - - assert(res == isl_lp_ok); - - cloog_int_add_ui(*v, *v, 1); - - return 1; -} - - -/* Check if we can unroll based on the given constraint. - * Only lower bounds can be used. - * Record it if it turns out to be usable and if we haven't recorded - * any other constraint already. - */ -static int constraint_can_unroll(__isl_take isl_constraint *c, void *user) -{ - struct cloog_can_unroll *ccu = (struct cloog_can_unroll *)user; - isl_int v; - isl_int count; - - isl_int_init(v); - isl_int_init(count); - isl_constraint_get_coefficient(c, isl_dim_set, ccu->level - 1, &v); - if (isl_int_is_pos(v) && - is_valid_unrolling_lower_bound(ccu, c, &count) && - (!ccu->c || isl_int_lt(count, *ccu->n))) { - isl_constraint_free(ccu->c); - ccu->c = isl_constraint_copy(c); - isl_int_set(*ccu->n, count); - } - isl_int_clear(count); - isl_int_clear(v); - isl_constraint_free(c); - - return 0; -} - - -/* Check if we can unroll the domain at the current level. - * If the domain is a union, we cannot. Otherwise, we check the - * constraints. - */ -static int basic_set_can_unroll(__isl_take isl_basic_set *bset, void *user) -{ - struct cloog_can_unroll *ccu = (struct cloog_can_unroll *)user; - int r = 0; - - if (ccu->c || !ccu->can_unroll) - ccu->can_unroll = 0; - else { - bset = isl_basic_set_remove_redundancies(bset); - r = isl_basic_set_foreach_constraint(bset, - &constraint_can_unroll, ccu); - } - isl_basic_set_free(bset); - return r; -} - - -/* Check if we can unroll the given domain at the given level, and - * if so, return the single lower bound in *lb and an upper bound - * on the number of iterations in *n. - * If we cannot unroll, return 0 and set *lb to NULL. - * - * We can unroll, if we can identify a lower bound on level - * such that the number of iterations is bounded by a constant. - */ -int cloog_domain_can_unroll(CloogDomain *domain, int level, cloog_int_t *n, - CloogConstraint **lb) -{ - isl_set *set = isl_set_from_cloog_domain(domain); - struct cloog_can_unroll ccu = { 1, level, NULL, set, n }; - int r; - - *lb = NULL; - r = isl_set_foreach_basic_set(set, &basic_set_can_unroll, &ccu); - assert(r == 0); - if (!ccu.c) - ccu.can_unroll = 0; - if (!ccu.can_unroll) { - isl_constraint_free(ccu.c); - return 0; - } - - *lb = cloog_constraint_from_isl_constraint(ccu.c); - - return ccu.can_unroll; -} - - -/* Fix the iterator i at the given level to l + o, - * where l is prescribed by the constraint lb and o is equal to offset. - * In particular, if lb is the constraint - * - * a i >= f(j) - * - * then l = ceil(f(j)/a). - */ -CloogDomain *cloog_domain_fixed_offset(CloogDomain *domain, - int level, CloogConstraint *lb, cloog_int_t offset) -{ - isl_aff *aff; - isl_set *set = isl_set_from_cloog_domain(domain); - isl_constraint *c; - isl_constraint *eq; - - c = cloog_constraint_to_isl(lb); - aff = isl_constraint_get_bound(c, isl_dim_set, level - 1); - aff = isl_aff_ceil(aff); - aff = isl_aff_add_coefficient_si(aff, isl_dim_in, level - 1, -1); - aff = isl_aff_add_constant(aff, offset); - eq = isl_equality_from_aff(aff); - set = isl_set_add_constraint(set, eq); - - return cloog_domain_from_isl_set(set); -} diff --git a/cloog-0.17.0/source/loop.c b/cloog-0.17.0/source/loop.c deleted file mode 100644 index f3d0ef9..0000000 --- a/cloog-0.17.0/source/loop.c +++ /dev/null @@ -1,2665 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** loop.c ** - **-------------------------------------------------------------------** - ** First version: october 26th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ -/* CAUTION: the english used for comments is probably the worst you ever read, - * please feel free to correct and improve it ! - */ - -# include -# include -# include "../include/cloog/cloog.h" - -#define ALLOC(type) (type*)malloc(sizeof(type)) - - -/****************************************************************************** - * Memory leaks hunting * - ******************************************************************************/ - - -/** - * These functions and global variables are devoted to memory leaks hunting: we - * want to know at each moment how many CloogLoop structures had been allocated - * (cloog_loop_allocated) and how many had been freed (cloog_loop_freed). - * Each time a CloogLoog structure is allocated, a call to the function - * cloog_loop_leak_up() must be carried out, and respectively - * cloog_loop_leak_down() when a CloogLoop structure is freed. The special - * variable cloog_loop_max gives the maximal number of CloogLoop structures - * simultaneously alive (i.e. allocated and non-freed) in memory. - * - July 3rd->11th 2003: first version (memory leaks hunt and correction). - */ - - -static void cloog_loop_leak_up(CloogState *state) -{ - state->loop_allocated++; - if ((state->loop_allocated - state->loop_freed) > state->loop_max) - state->loop_max = state->loop_allocated - state->loop_freed; -} - - -static void cloog_loop_leak_down(CloogState *state) -{ - state->loop_freed++; -} - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ - - -/** - * cloog_loop_print_structure function: - * Displays a loop structure in a way that trends to be understandable without - * falling in a deep depression or, for the lucky ones, getting a headache... - * Written by Olivier Chorier, Luc Marchaud, Pierre Martin and Romain Tartiere. - * - April 24th 2005: Initial version. - * - May 21rd 2005: - New parameter `F' for destination file (ie stdout), - * - Minor tweaks. - * - May 26th 2005: Memory leak hunt. - * - June 2nd 2005: (Ced) Integration and minor fixes. - * -June 22nd 2005: (Ced) Adaptation for GMP. - */ -void cloog_loop_print_structure(FILE * file, CloogLoop * loop, int level) -{ int i, j, first=1 ; - - if (loop) - { /* Go to the right level. */ - for (i=0; idomain, level+1, "CloogDomain"); - - /* Print the stride. */ - for(j=0; j<=level; j++) - fprintf(file,"|\t") ; - if (loop->stride) { - fprintf(file, "Stride: "); - cloog_int_print(file, loop->stride->stride); - fprintf(file, "\n"); - fprintf(file, "Offset: "); - cloog_int_print(file, loop->stride->offset); - fprintf(file, "\n"); - } - - /* A blank line. */ - for(j=0; j<=level+1; j++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the block. */ - cloog_block_print_structure(file,loop->block,level+1) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print inner if any. */ - if (loop->inner) - cloog_loop_print_structure(file,loop->inner,level+1) ; - - /* And let's go for the next one. */ - loop = loop->next ; - - /* One more time something that is here only for a better look. */ - if (!loop) - { /* Two blank lines if this is the end of the linked list. */ - for (j=0; j<2; j++) - { for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - - fprintf(file,"\n") ; - } - } - else - { /* A special blank line if the is a next loop. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - fprintf(file,"V\n") ; - } - } -} - - -/** - * cloog_loop_print function: - * This function prints the content of a CloogLoop structure (start) into a - * file (file, possibly stdout). - * - June 2nd 2005: Now this very old function (probably as old as CLooG) is - * only a frontend to cloog_loop_print_structure, with a quite - * better human-readable representation. - */ -void cloog_loop_print(FILE * file, CloogLoop * loop) -{ cloog_loop_print_structure(file,loop,0) ; -} - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ - - -/** - * cloog_loop_free function: - * This function frees the allocated memory for a CloogLoop structure (loop), - * and frees its inner loops and its next loops. - * - June 22nd 2005: Adaptation for GMP. - */ -void cloog_loop_free(CloogLoop * loop) -{ CloogLoop * next ; - - while (loop != NULL) { - cloog_loop_leak_down(loop->state); - - next = loop->next ; - cloog_domain_free(loop->domain) ; - cloog_domain_free(loop->unsimplified); - cloog_block_free(loop->block) ; - if (loop->inner != NULL) - cloog_loop_free(loop->inner) ; - - cloog_stride_free(loop->stride); - free(loop) ; - loop = next ; - } -} - - -/** - * cloog_loop_free_parts function: - * This function frees the allocated memory for some parts of a CloogLoop - * structure (loop), each other argument is a boolean having to be set to 1 if - * we want to free the corresponding part, 0 otherwise. This function applies - * the same freeing policy to its inner ans next loops recursively. - * - July 3rd 2003: first version. - * - June 22nd 2005: Adaptation for GMP. - */ -void cloog_loop_free_parts(loop, domain, block, inner, next) -CloogLoop * loop ; -int domain, block, inner, next ; -{ CloogLoop * follow ; - - while (loop != NULL) { - cloog_loop_leak_down(loop->state); - follow = loop->next ; - - if (domain) - cloog_domain_free(loop->domain) ; - - if (block) - cloog_block_free(loop->block) ; - - if ((inner) && (loop->inner != NULL)) - cloog_loop_free_parts(loop->inner,domain,block,inner,1) ; - - cloog_domain_free(loop->unsimplified); - cloog_stride_free(loop->stride); - free(loop) ; - if (next) - loop = follow ; - else - loop = NULL ; - } -} - - -/****************************************************************************** - * Reading functions * - ******************************************************************************/ - - -/** - * Construct a CloogLoop structure from a given iteration domain - * and statement number. - */ -CloogLoop *cloog_loop_from_domain(CloogState *state, CloogDomain *domain, - int number) -{ - int nb_iterators; - CloogLoop * loop ; - CloogStatement * statement ; - - /* Memory allocation and information reading for the first domain: */ - loop = cloog_loop_malloc(state); - /* domain. */ - loop->domain = domain; - if (loop->domain != NULL) - nb_iterators = cloog_domain_dimension(loop->domain); - else - nb_iterators = 0 ; - /* included statement block. */ - statement = cloog_statement_alloc(state, number + 1); - loop->block = cloog_block_alloc(statement, 0, NULL, nb_iterators); - - return loop ; -} - - -/** - * cloog_loop_read function: - * This function reads loop data from a file (foo, possibly stdin) and - * returns a pointer to a CloogLoop structure containing the read information. - * This function can be used only for input file reading, when one loop is - * associated with one statement. - * - number is the statement block number carried by the loop (-1 if none). - * - nb_parameters is the number of parameters. - ** - * - September 9th 2002: first version. - * - April 16th 2005: adaptation to new CloogStatement struct (with number). - * - June 11th 2005: adaptation to new CloogBlock structure. - * - June 22nd 2005: Adaptation for GMP. - */ -CloogLoop *cloog_loop_read(CloogState *state, - FILE *foo, int number, int nb_parameters) -{ - int op1, op2, op3; - char s[MAX_STRING]; - CloogDomain *domain; - - domain = cloog_domain_union_read(state, foo, nb_parameters); - - /* To read that stupid "0 0 0" line. */ - while (fgets(s,MAX_STRING,foo) == 0) ; - while ((*s=='#' || *s=='\n') || (sscanf(s," %d %d %d",&op1,&op2,&op3)<3)) - fgets(s,MAX_STRING,foo) ; - - return cloog_loop_from_domain(state, domain, number); -} - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - - -/** - * cloog_loop_malloc function: - * This function allocates the memory space for a CloogLoop structure and - * sets its fields with default values. Then it returns a pointer to the - * allocated space. - * - November 21th 2005: first version. - */ -CloogLoop *cloog_loop_malloc(CloogState *state) -{ CloogLoop * loop ; - - /* Memory allocation for the CloogLoop structure. */ - loop = (CloogLoop *)malloc(sizeof(CloogLoop)) ; - if (loop == NULL) - cloog_die("memory overflow.\n"); - cloog_loop_leak_up(state); - - - /* We set the various fields with default values. */ - loop->state = state; - loop->domain = NULL ; - loop->unsimplified = NULL; - loop->block = NULL ; - loop->usr = NULL; - loop->inner = NULL ; - loop->next = NULL ; - loop->otl = 0; - loop->stride = NULL; - - return loop ; -} - - -/** - * cloog_loop_alloc function: - * This function allocates the memory space for a CloogLoop structure and - * sets its fields with those given as input. Then it returns a pointer to the - * allocated space. - * - October 27th 2001: first version. - * - June 22nd 2005: Adaptation for GMP. - * - November 21th 2005: use of cloog_loop_malloc. - */ -CloogLoop *cloog_loop_alloc(CloogState *state, - CloogDomain *domain, int otl, CloogStride *stride, - CloogBlock *block, CloogLoop *inner, CloogLoop *next) -{ CloogLoop * loop ; - - loop = cloog_loop_malloc(state); - - loop->domain = domain ; - loop->block = block ; - loop->inner = inner ; - loop->next = next ; - loop->otl = otl; - loop->stride = cloog_stride_copy(stride); - - return(loop) ; -} - - -/** - * cloog_loop_add function: - * This function adds a CloogLoop structure (loop) at a given place (now) of a - * NULL terminated list of CloogLoop structures. The beginning of this list - * is (start). This function updates (now) to (loop), and updates (start) if the - * added element is the first one -that is when (start) is NULL-. - * - October 28th 2001: first version. - */ -void cloog_loop_add(CloogLoop ** start, CloogLoop ** now, CloogLoop * loop) -{ if (*start == NULL) - { *start = loop ; - *now = *start ; - } - else - { (*now)->next = loop ; - *now = (*now)->next ; - } -} - - -/** - * cloog_loop_add function: - * This function adds a CloogLoop structure (loop) at a given place (now) of a - * NULL terminated list of CloogLoop structures. The beginning of this list - * is (start). This function updates (now) to the end of the loop list (loop), - * and updates (start) if the added element is the first one -that is when - * (start) is NULL-. - * - September 9th 2005: first version. - */ -void cloog_loop_add_list(CloogLoop ** start, CloogLoop ** now, CloogLoop * loop) -{ if (*start == NULL) - { *start = loop ; - *now = *start ; - } - else - { (*now)->next = loop ; - *now = (*now)->next ; - } - - while ((*now)->next != NULL) - *now = (*now)->next ; -} - - -/** - * cloog_loop_copy function: - * This function returns a copy of the CloogLoop structure given as input. In - * fact, there is just new allocations for the CloogLoop structures, but their - * contents are the same. - * - October 28th 2001: first version. - * - July 3rd->11th 2003: memory leaks hunt and correction. - */ -CloogLoop * cloog_loop_copy(CloogLoop * source) -{ CloogLoop * loop ; - CloogBlock * block ; - CloogDomain * domain ; - - loop = NULL ; - if (source != NULL) - { domain = cloog_domain_copy(source->domain) ; - block = cloog_block_copy(source->block) ; - loop = cloog_loop_alloc(source->state, domain, source->otl, - source->stride, block, NULL, NULL); - loop->usr = source->usr; - loop->inner = cloog_loop_copy(source->inner) ; - loop->next = cloog_loop_copy(source->next) ; - } - return(loop) ; -} - - -/** - * cloog_loop_add_disjoint function: - * This function adds some CloogLoop structures at a given place (now) of a - * NULL terminated list of CloogLoop structures. The beginning of this list - * is (start). (loop) can be an union of polyhedra, this function separates the - * union into a list of *disjoint* polyhedra then adds the list. This function - * updates (now) to the end of the list and updates (start) if first added - * element is the first of the principal list -that is when (start) is NULL-. - * (loop) can be freed by this function, basically when its domain is actually - * a union of polyhedra, but don't worry, all the useful data are now stored - * inside the list (start). We do not use PolyLib's Domain_Disjoint function, - * since the number of union components is often higher (thus code size too). - * - October 28th 2001: first version. - * - November 14th 2001: bug correction (this one was hard to find !). - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - June 22nd 2005: Adaptation for GMP. - * - October 27th 2005: (debug) included blocks were not copied for new loops. - */ -void cloog_loop_add_disjoint(start, now, loop) -CloogLoop ** start, ** now, * loop ; -{ - CloogLoop * sep, * inner ; - CloogDomain *domain, *seen, *temp, *rest; - CloogBlock * block ; - - if (cloog_domain_isconvex(loop->domain)) - cloog_loop_add(start,now,loop) ; - else { - domain = cloog_domain_simplify_union(loop->domain); - loop->domain = NULL ; - - /* We separate the first element of the rest of the union. */ - domain = cloog_domain_cut_first(domain, &rest); - - /* This first element is the first of the list of disjoint polyhedra. */ - sep = cloog_loop_alloc(loop->state, domain, 0, NULL, - loop->block, loop->inner, NULL); - cloog_loop_add(start,now,sep) ; - - seen = cloog_domain_copy(domain); - while (!cloog_domain_isempty(domain = rest)) { - temp = cloog_domain_cut_first(domain, &rest); - domain = cloog_domain_difference(temp, seen); - cloog_domain_free(temp); - - if (cloog_domain_isempty(domain)) { - cloog_domain_free(domain); - continue; - } - - /* Each new loop will have its own life, for instance we can free its - * inner loop and included block. Then each one must have its own copy - * of both 'inner' and 'block'. - */ - inner = cloog_loop_copy(loop->inner) ; - block = cloog_block_copy(loop->block) ; - - sep = cloog_loop_alloc(loop->state, cloog_domain_copy(domain), - 0, NULL, block, inner, NULL); - /* domain can be an union too. If so: recursion. */ - if (cloog_domain_isconvex(domain)) - cloog_loop_add(start,now,sep) ; - else - cloog_loop_add_disjoint(start,now,sep) ; - - if (cloog_domain_isempty(rest)) { - cloog_domain_free(domain); - break; - } - - seen = cloog_domain_union(seen, domain); - } - cloog_domain_free(rest); - cloog_domain_free(seen); - cloog_loop_free_parts(loop,0,0,0,0) ; - } -} - - -/** - * cloog_loop_disjoint function: - * This function returns a list of loops such that each loop with non-convex - * domain in the input list (loop) is separated into several loops where the - * domains are the components of the union of *disjoint* polyhedra equivalent - * to the original non-convex domain. See cloog_loop_add_disjoint comments - * for more details. - * - September 16th 2005: first version. - */ -CloogLoop * cloog_loop_disjoint(CloogLoop * loop) -{ CloogLoop *res=NULL, * now=NULL, * next ; - - /* Because this is often the case, don't waste time ! */ - if (loop && !loop->next && cloog_domain_isconvex(loop->domain)) - return loop ; - - while (loop != NULL) - { next = loop->next ; - loop->next = NULL ; - cloog_loop_add_disjoint(&res,&now,loop) ; - loop = next ; - } - - return res ; -} - - -/** - * cloog_loop_restrict function: - * This function returns the (loop) in the context of (context): it makes the - * intersection between the (loop) domain and the (context), then it returns - * a pointer to a new loop, with this intersection as domain. - ** - * - October 27th 2001: first version. - * - June 15th 2005: a memory leak fixed (domain was not freed when empty). - * - June 22nd 2005: Adaptation for GMP. - */ -CloogLoop *cloog_loop_restrict(CloogLoop *loop, CloogDomain *context) -{ int new_dimension ; - CloogDomain * domain, * extended_context, * new_domain ; - CloogLoop * new_loop ; - - domain = loop->domain ; - if (cloog_domain_dimension(domain) > cloog_domain_dimension(context)) - { - new_dimension = cloog_domain_dimension(domain); - extended_context = cloog_domain_extend(context, new_dimension); - new_domain = cloog_domain_intersection(extended_context,loop->domain) ; - cloog_domain_free(extended_context) ; - } - else - new_domain = cloog_domain_intersection(context,loop->domain) ; - - if (cloog_domain_isempty(new_domain)) - { cloog_domain_free(new_domain) ; - return(NULL) ; - } - else { - new_loop = cloog_loop_alloc(loop->state, new_domain, - 0, NULL, loop->block, loop->inner, NULL); - return(new_loop) ; - } -} - - -/** - * Call cloog_loop_restrict on each loop in the list "loop" and return - * the concatenated result. - */ -CloogLoop *cloog_loop_restrict_all(CloogLoop *loop, CloogDomain *context) -{ - CloogLoop *next; - CloogLoop *res = NULL; - CloogLoop **res_next = &res; - - for (; loop; loop = next) { - next = loop->next; - - *res_next = cloog_loop_restrict(loop, context); - if (*res_next) { - res_next = &(*res_next)->next; - cloog_loop_free_parts(loop, 1, 0, 0, 0); - } else { - loop->next = NULL; - cloog_loop_free(loop); - } - } - - return res; -} - - -/** - * Restrict the domains of the inner loops of each loop l in the given - * list of loops to the domain of the loop l. If the domains of all - * inner loops of a given loop l turn out to be empty, then remove l - * from the list. - */ -CloogLoop *cloog_loop_restrict_inner(CloogLoop *loop) -{ - CloogLoop *next; - CloogLoop *res; - CloogLoop **res_next = &res; - - for (; loop; loop = next) { - next = loop->next; - - loop->inner = cloog_loop_restrict_all(loop->inner, loop->domain); - if (loop->inner) { - *res_next = loop; - res_next = &(*res_next)->next; - } else { - loop->next = NULL; - cloog_loop_free(loop); - } - } - - *res_next = NULL; - - return res; -} - -/** - * cloog_loop_project function: - * This function returns the projection of (loop) on the (level) first - * dimensions (outer loops). It makes the projection of the (loop) domain, - * then it returns a pointer to a new loop, with this projection as domain. - ** - * - October 27th 2001: first version. - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - June 22nd 2005: Adaptation for GMP. - */ -CloogLoop * cloog_loop_project(CloogLoop * loop, int level) -{ - CloogDomain * new_domain ; - CloogLoop * new_loop, * copy ; - - copy = cloog_loop_alloc(loop->state, loop->domain, loop->otl, loop->stride, - loop->block, loop->inner, NULL); - - if (cloog_domain_dimension(loop->domain) == level) - new_domain = cloog_domain_copy(loop->domain) ; - else - new_domain = cloog_domain_project(loop->domain, level); - - new_loop = cloog_loop_alloc(loop->state, new_domain, 0, NULL, - NULL, copy, NULL); - - return(new_loop) ; -} - - -/** - * Call cloog_loop_project on each loop in the list "loop" and return - * the concatenated result. - */ -CloogLoop *cloog_loop_project_all(CloogLoop *loop, int level) -{ - CloogLoop *next; - CloogLoop *res = NULL; - CloogLoop **res_next = &res; - - for (; loop; loop = next) { - next = loop->next; - - *res_next = cloog_loop_project(loop, level); - res_next = &(*res_next)->next; - cloog_loop_free_parts(loop, 0, 0, 0, 0); - } - - return res; -} - - -/** - * cloog_loop_concat function: - * This function returns a pointer to the concatenation of the - * CloogLoop lists given as input. - * - October 28th 2001: first version. - */ -CloogLoop * cloog_loop_concat(CloogLoop * a, CloogLoop * b) -{ CloogLoop * loop, * temp ; - - loop = a ; - temp = loop ; - if (loop != NULL) - { while (temp->next != NULL) - temp = temp->next ; - temp->next = b ; - } - else - loop = b ; - - return(loop) ; -} - - -/** - * cloog_loop_combine: - * Combine consecutive loops with identical domains into - * a single loop with the concatenation of their inner loops - * as inner loop. - */ -CloogLoop *cloog_loop_combine(CloogLoop *loop) -{ - CloogLoop *first, *second; - - for (first = loop; first; first = first->next) { - while (first->next) { - if (!cloog_domain_lazy_equal(first->domain, first->next->domain)) - break; - second = first->next; - first->inner = cloog_loop_concat(first->inner, second->inner); - first->next = second->next; - cloog_loop_free_parts(second, 1, 0, 0, 0); - } - } - - return loop; -} - -/** - * Remove loops from list that have an empty domain. - */ -CloogLoop *cloog_loop_remove_empty_domain_loops(CloogLoop *loop) -{ - CloogLoop *l, *res, *next, **res_next; - - res = NULL; - res_next = &res; - for (l = loop; l; l = next) { - next = l->next; - if (cloog_domain_isempty(l->domain)) - cloog_loop_free_parts(l, 1, 1, 1, 0); - else { - *res_next = l; - res_next = &(*res_next)->next; - } - } - *res_next = NULL; - - return res; -} - -CloogLoop *cloog_loop_decompose_inner(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims); - -/* For each loop with only one inner loop, replace the domain - * of the loop with the projection of the domain of the inner - * loop. To increase the number of loops with a single inner - * we first decompose the inner loops into strongly connected - * components. - */ -CloogLoop *cloog_loop_specialize(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims) -{ - int dim; - CloogDomain *domain; - CloogLoop *l; - - loop = cloog_loop_decompose_inner(loop, level, scalar, - scaldims, nb_scattdims); - - for (l = loop; l; l = l->next) { - if (l->inner->next) - continue; - if (!cloog_domain_isconvex(l->inner->domain)) - continue; - - dim = cloog_domain_dimension(l->domain); - domain = cloog_domain_project(l->inner->domain, dim); - if (cloog_domain_isconvex(domain)) { - cloog_domain_free(l->domain); - l->domain = domain; - } else { - cloog_domain_free(domain); - } - } - - return cloog_loop_remove_empty_domain_loops(loop); -} - -/* For each loop with only one inner loop, propagate the bounds from - * the inner loop domain to the outer loop domain. This is especially - * useful if the inner loop domain has a non-trivial stride which - * results in an update of the lower bound. - */ -CloogLoop *cloog_loop_propagate_lower_bound(CloogLoop *loop, int level) -{ - int dim; - CloogDomain *domain, *t; - CloogLoop *l; - - for (l = loop; l; l = l->next) { - if (l->inner->next) - continue; - if (!cloog_domain_isconvex(l->inner->domain)) - continue; - - dim = cloog_domain_dimension(l->domain); - domain = cloog_domain_project(l->inner->domain, dim); - if (cloog_domain_isconvex(domain)) { - t = cloog_domain_intersection(domain, l->domain); - cloog_domain_free(l->domain); - l->domain = t; - } - cloog_domain_free(domain); - } - - return loop; -} - -/** - * cloog_loop_separate function: - * This function implements the Quillere algorithm for separation of multiple - * loops: for a given set of polyhedra (loop), it computes a set of disjoint - * polyhedra such that the unions of these sets are equal, and returns this set. - * - October 28th 2001: first version. - * - November 14th 2001: elimination of some unused blocks. - * - August 13th 2002: (debug) in the case of union of polyhedra for one - * loop, redundant constraints are fired. - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - June 22nd 2005: Adaptation for GMP. - * - October 16th 2005: Removal of the non-shared constraint elimination when - * there is only one loop in the list (seems to work - * without now, DomainSimplify may have been improved). - * The problem was visible with test/iftest2.cloog. - */ -CloogLoop * cloog_loop_separate(CloogLoop * loop) -{ int lazy_equal=0, disjoint = 0; - CloogLoop * new_loop, * new_inner, * res, * now, * temp, * Q, - * inner, * old /*, * previous, * next*/ ; - CloogDomain *UQ, *domain; - - if (loop == NULL) - return NULL ; - - loop = cloog_loop_combine(loop); - - if (loop->next == NULL) - return cloog_loop_disjoint(loop) ; - - UQ = cloog_domain_copy(loop->domain) ; - domain = cloog_domain_copy(loop->domain) ; - res = cloog_loop_alloc(loop->state, domain, 0, NULL, - loop->block, loop->inner, NULL); - - old = loop ; - while((loop = loop->next) != NULL) - { temp = NULL ; - - /* For all Q, add Q-loop associated with the blocks of Q alone, - * and Q inter loop associated with the blocks of Q and loop. - */ - for (Q = res; Q; Q = Q->next) { - /* Add (Q inter loop). */ - if ((disjoint = cloog_domain_lazy_disjoint(Q->domain,loop->domain))) - domain = NULL ; - else - { if ((lazy_equal = cloog_domain_lazy_equal(Q->domain,loop->domain))) - domain = cloog_domain_copy(Q->domain) ; - else - domain = cloog_domain_intersection(Q->domain,loop->domain) ; - - if (!cloog_domain_isempty(domain)) - { new_inner = cloog_loop_concat(cloog_loop_copy(Q->inner), - cloog_loop_copy(loop->inner)) ; - new_loop = cloog_loop_alloc(loop->state, domain, 0, NULL, - NULL, new_inner, NULL); - cloog_loop_add_disjoint(&temp,&now,new_loop) ; - } - else { - disjoint = 1; - cloog_domain_free(domain); - } - } - - /* Add (Q - loop). */ - if (disjoint) - domain = cloog_domain_copy(Q->domain) ; - else - { if (lazy_equal) - domain = cloog_domain_empty(Q->domain); - else - domain = cloog_domain_difference(Q->domain,loop->domain) ; - } - - if (!cloog_domain_isempty(domain)) { - new_loop = cloog_loop_alloc(loop->state, domain, 0, NULL, - NULL, Q->inner, NULL); - cloog_loop_add_disjoint(&temp,&now,new_loop) ; - } - else - { cloog_domain_free(domain) ; - /* If Q->inner is no more useful, we can free it. */ - inner = Q->inner ; - Q->inner = NULL ; - cloog_loop_free(inner) ; - } - } - - /* Add loop-UQ associated with the blocks of loop alone.*/ - if (cloog_domain_lazy_disjoint(loop->domain,UQ)) - domain = cloog_domain_copy(loop->domain) ; - else - { if (cloog_domain_lazy_equal(loop->domain,UQ)) - domain = cloog_domain_empty(UQ); - else - domain = cloog_domain_difference(loop->domain,UQ) ; - } - - if (!cloog_domain_isempty(domain)) { - new_loop = cloog_loop_alloc(loop->state, domain, 0, NULL, - NULL, loop->inner, NULL); - cloog_loop_add_disjoint(&temp,&now,new_loop) ; - } - else - { cloog_domain_free(domain) ; - /* If loop->inner is no more useful, we can free it. */ - cloog_loop_free(loop->inner) ; - } - - loop->inner = NULL ; - - if (loop->next != NULL) - UQ = cloog_domain_union(UQ, cloog_domain_copy(loop->domain)); - else - cloog_domain_free(UQ); - - cloog_loop_free_parts(res,1,0,0,1) ; - - res = temp ; - } - cloog_loop_free_parts(old,1,0,0,1) ; - - return(res) ; -} - - -static CloogDomain *bounding_domain(CloogDomain *dom, CloogOptions *options) -{ - if (options->sh) - return cloog_domain_simple_convex(dom); - else - return cloog_domain_convex(dom); -} - - -/** - * cloog_loop_merge function: - * This function is the 'soft' version of loop_separate if we are looking for - * a code much simpler (and less efficicient). This function returns the new - * CloogLoop list. - * - October 29th 2001: first version. - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - June 22nd 2005: Adaptation for GMP. - */ -CloogLoop *cloog_loop_merge(CloogLoop *loop, int level, CloogOptions *options) -{ - CloogLoop *res, *new_inner, *old; - CloogDomain *new_domain, *temp; - - if (loop == NULL) - return loop; - - if (loop->next == NULL && cloog_domain_isconvex(loop->domain)) - return loop; - - old = loop; - temp = loop->domain; - loop->domain = NULL; - new_inner = loop->inner; - - for (loop = loop->next; loop; loop = loop->next) { - temp = cloog_domain_union(temp, loop->domain); - loop->domain = NULL; - new_inner = cloog_loop_concat(new_inner, loop->inner); - } - - new_domain = bounding_domain(temp, options); - - if (level > 0 && !cloog_domain_is_bounded(new_domain, level) && - cloog_domain_is_bounded(temp, level)) { - CloogDomain *splitter, *t2; - - cloog_domain_free(new_domain); - splitter = cloog_domain_bound_splitter(temp, level); - - res = NULL; - while (!cloog_domain_isconvex(splitter)) { - CloogDomain *first, *rest; - first = cloog_domain_cut_first(splitter, &rest); - splitter = rest; - t2 = cloog_domain_intersection(first, temp); - cloog_domain_free(first); - - new_domain = bounding_domain(t2, options); - cloog_domain_free(t2); - - if (cloog_domain_isempty(new_domain)) { - cloog_domain_free(new_domain); - continue; - } - res = cloog_loop_alloc(old->state, new_domain, 0, NULL, - NULL, cloog_loop_copy(new_inner), res); - } - - t2 = cloog_domain_intersection(splitter, temp); - cloog_domain_free(splitter); - - new_domain = bounding_domain(t2, options); - cloog_domain_free(t2); - - if (cloog_domain_isempty(new_domain)) { - cloog_domain_free(new_domain); - cloog_loop_free(new_inner); - } else - res = cloog_loop_alloc(old->state, new_domain, 0, NULL, - NULL, new_inner, res); - } else { - res = cloog_loop_alloc(old->state, new_domain, 0, NULL, - NULL, new_inner, NULL); - } - cloog_domain_free(temp); - - cloog_loop_free_parts(old, 0, 0, 0, 1); - - return res; -} - - -static int cloog_loop_count(CloogLoop *loop) -{ - int nb_loops; - - for (nb_loops = 0; loop; loop = loop->next) - nb_loops++; - - return nb_loops; -} - - -/** - * cloog_loop_sort function: - * Adaptation from LoopGen 0.4 by F. Quillere. This function sorts a list of - * parameterized disjoint polyhedra, in order to not have lexicographic order - * violation (see Quillere paper). - * - September 16th 2005: inclusion of cloog_loop_number (October 29th 2001). - */ -CloogLoop *cloog_loop_sort(CloogLoop *loop, int level) -{ - CloogLoop *res, *now, **loop_array; - CloogDomain **doms; - int i, nb_loops=0, * permut ; - - /* There is no need to sort the parameter domains. */ - if (!level) - return loop; - - /* We will need to know how many loops are in the list. */ - nb_loops = cloog_loop_count(loop); - - /* If there is only one loop, it's the end. */ - if (nb_loops == 1) - return(loop) ; - - /* We have to allocate memory for some useful components: - * - loop_array: the loop array, - * - doms: the array of domains to sort, - * - permut: will give us a possible sort (maybe not the only one). - */ - loop_array = (CloogLoop **)malloc(nb_loops*sizeof(CloogLoop *)) ; - doms = (CloogDomain **)malloc(nb_loops*sizeof(CloogDomain *)); - permut = (int *)malloc(nb_loops*sizeof(int)) ; - - /* We fill up the loop and domain arrays. */ - for (i=0;inext) - { loop_array[i] = loop ; - doms[i] = loop_array[i]->domain; - } - - /* cloog_domain_sort will fill up permut. */ - cloog_domain_sort(doms, nb_loops, level, permut); - - /* With permut and loop_array we build the sorted list. */ - res = NULL ; - for (i=0;inext = NULL ; - cloog_loop_add(&res,&now,loop_array[permut[i]-1]) ; - } - - free(permut) ; - free(doms); - free(loop_array) ; - - return res; -} - - -/** - * cloog_loop_nest function: - * This function changes the loop list in such a way that we have no more than - * one dimension added by level. It returns an equivalent loop list with - * this property. - * - October 29th 2001: first version. - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - June 22nd 2005: Adaptation for GMP. - * - November 21th 2005: (debug) now OK when cloog_loop_restrict returns NULL. - */ -CloogLoop *cloog_loop_nest(CloogLoop *loop, CloogDomain *context, int level) -{ int l ; - CloogLoop * p, * temp, * res, * now, * next ; - CloogDomain * new_domain ; - - loop = cloog_loop_disjoint(loop); - - res = NULL ; - /* Each domain is changed by its intersection with the context. */ - while (loop != NULL) - { p = cloog_loop_restrict(loop, context); - next = loop->next ; - - if (p != NULL) - { cloog_loop_free_parts(loop,1,0,0,0) ; - - temp = cloog_loop_alloc(p->state, p->domain, 0, NULL, - p->block, p->inner, NULL); - - /* If the intersection dimension is too big, we make projections smaller - * and smaller, and each projection includes the preceding projection - * (thus, in the target list, dimensions are added one by one). - */ - if (cloog_domain_dimension(p->domain) >= level) - for (l = cloog_domain_dimension(p->domain); l >= level; l--) { - new_domain = cloog_domain_project(p->domain, l); - temp = cloog_loop_alloc(p->state, new_domain, 0, NULL, - NULL, temp, NULL); - } - - /* p is no more useful (but its content yes !). */ - cloog_loop_free_parts(p,0,0,0,0) ; - - cloog_loop_add(&res,&now,temp) ; - } - else - cloog_loop_free_parts(loop,1,1,1,0) ; - - loop = next ; - } - - return(res) ; -} - - -/* Check if the domains of the inner loops impose a stride constraint - * on the given level. - * The core of the search is implemented in cloog_domain_list_stride. - * Here, we simply construct a list of domains to pass to this function - * and if a stride is found, we adjust the lower bounds by calling - * cloog_domain_stride_lower_bound. - */ -static int cloog_loop_variable_offset_stride(CloogLoop *loop, int level) -{ - CloogDomainList *list = NULL; - CloogLoop *inner; - CloogStride *stride; - - for (inner = loop->inner; inner; inner = inner->next) { - CloogDomainList *entry = ALLOC(CloogDomainList); - entry->domain = cloog_domain_copy(inner->domain); - entry->next = list; - list = entry; - } - - stride = cloog_domain_list_stride(list, level); - - cloog_domain_list_free(list); - - if (!stride) - return 0; - - loop->stride = stride; - loop->domain = cloog_domain_stride_lower_bound(loop->domain, level, stride); - - return 1; -} - - -/** - * cloog_loop_stride function: - * This function will find the stride of a loop for the iterator at the column - * number 'level' in the constraint matrix. It will update the lower bound of - * the iterator accordingly. Basically, the function will try to find in the - * inner loops a common condition on this iterator for the inner loop iterators - * to be integral. For instance, let us consider a loop with the iterator i, - * the iteration domain -4<=i<=n, and its two inner loops with the iterator j. - * The first inner loop has the constraint 3j=i, and the second one has the - * constraint 6j=i. Then the common constraint on i for j to be integral is - * i%3=0, the stride for i is 3. Lastly, we have to find the new lower bound - * for i: the first value satisfying the common constraint: -3. At the end, the - * iteration domain for i is -3<=i<=n and the stride for i is 3. - * - * The algorithm implemented in this function only allows for strides - * on loops with a lower bound that has a constant remainder on division - * by the stride. Before initiating this procedure, we first check - * if we can find a stride with a lower bound with a variable offset in - * cloog_loop_variable_offset_stride. - * - * - loop is the loop including the iteration domain of the considered iterator, - * - level is the column number of the iterator in the matrix of contraints. - ** - * - June 29th 2003: first version (work in progress since June 26th 2003). - * - July 14th 2003: simpler version. - * - June 22nd 2005: Adaptation for GMP (from S. Verdoolaege's 0.12.1 version). - */ -void cloog_loop_stride(CloogLoop * loop, int level) -{ int first_search ; - cloog_int_t stride, ref_offset, offset, potential; - CloogLoop * inner ; - - if (!cloog_domain_can_stride(loop->domain, level)) - return; - - if (cloog_loop_variable_offset_stride(loop, level)) - return; - - cloog_int_init(stride); - cloog_int_init(ref_offset); - cloog_int_init(offset); - cloog_int_init(potential); - - cloog_int_set_si(ref_offset, 0); - cloog_int_set_si(offset, 0); - - /* Default stride. */ - cloog_int_set_si(stride, 1); - first_search = 1 ; - inner = loop->inner ; - - while (inner != NULL) - { /* If the minimun stride has not been found yet, find the stride. */ - if ((first_search) || (!cloog_int_is_one(stride))) - { - cloog_domain_stride(inner->domain, level, &potential, &offset); - if (!cloog_int_is_one(potential) && (!first_search)) - { /* Offsets must be the same for common stride. */ - cloog_int_gcd(stride, potential, stride); - if (!cloog_int_is_zero(stride)) { - cloog_int_fdiv_r(offset, offset, stride); - cloog_int_fdiv_r(ref_offset, ref_offset, stride); - } - if (cloog_int_ne(offset,ref_offset)) - cloog_int_set_si(stride, 1); - } - else { - cloog_int_set(stride, potential); - cloog_int_set(ref_offset, offset); - } - - first_search = 0 ; - } - - inner = inner->next ; - } - - if (cloog_int_is_zero(stride)) - cloog_int_set_si(stride, 1); - - /* Update the values if necessary. */ - if (!cloog_int_is_one(stride)) - { /* Update the stride value. */ - if (!cloog_int_is_zero(offset)) - cloog_int_sub(offset, stride, offset); - loop->stride = cloog_stride_alloc(stride, offset); - loop->domain = cloog_domain_stride_lower_bound(loop->domain, level, - loop->stride); - } - - cloog_int_clear(stride); - cloog_int_clear(ref_offset); - cloog_int_clear(offset); - cloog_int_clear(potential); -} - - -void cloog_loop_otl(CloogLoop *loop, int level) -{ - if (cloog_domain_is_otl(loop->domain, level)) - loop->otl = 1; -} - - -/** - * cloog_loop_stop function: - * This function implements the 'stop' option : each domain of each loop - * in the list 'loop' is replaced by 'context'. 'context' should be the - * domain of the outer loop. By using this method, there are no more dimensions - * to scan and the simplification step will automaticaly remove the domains - * since they are the same as the corresponding contexts. The effect of this - * function is to stop the code generation at the level this function is called, - * the resulting code do not consider the next dimensions. - * - January 11th 2005: first version. - */ -CloogLoop * cloog_loop_stop(CloogLoop * loop, CloogDomain * context) -{ if (loop == NULL) - return NULL ; - else - { cloog_domain_free(loop->domain) ; - loop->domain = cloog_domain_copy(context) ; - loop->next = cloog_loop_stop(loop->next, context) ; - } - - return loop ; -} - - -static int level_is_constant(int level, int scalar, int *scaldims, int nb_scattdims) -{ - return level && (level+scalar <= nb_scattdims) && (scaldims[level+scalar-1]); -} - - -/** - * Compare the constant dimensions of loops 'l1' and 'l2' starting at 'scalar' - * and return -1 if the vector of constant dimensions of 'l1' is smaller - * than that of 'l2', 0 if they are the same and +1 if that of 'l1' is - * greater than that of 'l2'. - * This function should be called on the innermost loop (the loop - * containing a block). - * \param l1 Loop to be compared with l2. - * \param l2 Loop to be compared with l1. - * \param level Current non-scalar dimension. - * \param scaldims Boolean array saying whether a dimension is scalar or not. - * \param nb_scattdims Size of the scaldims array. - * \param scalar Current scalar dimension. - * \return -1 if (l1 < l2), 0 if (l1 == l2) and +1 if (l1 > l2) - */ -int cloog_loop_constant_cmp(CloogLoop *l1, CloogLoop *l2, int level, - int *scaldims, int nb_scattdims, int scalar) -{ - CloogBlock *b1, *b2; - b1 = l1->block; - b2 = l2->block; - while (level_is_constant(level, scalar, scaldims, nb_scattdims)) { - int cmp = cloog_int_cmp(b1->scaldims[scalar], b2->scaldims[scalar]); - if (cmp) - return cmp; - scalar++; - } - return 0; -} - - -/** - * cloog_loop_scalar_gt function: - * This function returns 1 if loop 'l1' is greater than loop 'l2' for the - * scalar dimension vector that begins at dimension 'scalar', 0 otherwise. What - * we want to know is whether a loop is scheduled before another one or not. - * This function solves the problem when the considered dimension for scheduling - * is a scalar dimension. Since there may be a succession of scalar dimensions, - * this function will reason about the vector of scalar dimension that begins - * at dimension 'level+scalar' and finish to the first non-scalar dimension. - * \param l1 Loop to be compared with l2. - * \param l2 Loop to be compared with l1. - * \param level Current non-scalar dimension. - * \param scaldims Boolean array saying whether a dimension is scalar or not. - * \param nb_scattdims Size of the scaldims array. - * \param scalar Current scalar dimension. - * \return 1 if (l1 > l2), 0 otherwise. - ** - * - September 9th 2005: first version. - * - October 15nd 2007: now "greater than" instead of "greater or equal". - */ -int cloog_loop_scalar_gt(l1, l2, level, scaldims, nb_scattdims, scalar) -CloogLoop * l1, * l2 ; -int level, * scaldims, nb_scattdims, scalar ; -{ - return cloog_loop_constant_cmp(l1, l2, level, scaldims, nb_scattdims, scalar) > 0; -} - - -/** - * cloog_loop_scalar_eq function: - * This function returns 1 if loop 'l1' is equal to loop 'l2' for the scalar - * dimension vector that begins at dimension 'scalar', 0 otherwise. What we want - * to know is whether two loops are scheduled for the same time or not. - * This function solves the problem when the considered dimension for scheduling - * is a scalar dimension. Since there may be a succession of scalar dimensions, - * this function will reason about the vector of scalar dimension that begins - * at dimension 'level+scalar' and finish to the first non-scalar dimension. - * - l1 and l2 are the loops to compare, - * - level is the current non-scalar dimension, - * - scaldims is the boolean array saying whether a dimension is scalar or not, - * - nb_scattdims is the size of the scaldims array, - * - scalar is the current scalar dimension. - ** - * - September 9th 2005 : first version. - */ -int cloog_loop_scalar_eq(l1, l2, level, scaldims, nb_scattdims, scalar) -CloogLoop * l1, * l2 ; -int level, * scaldims, nb_scattdims, scalar ; -{ - return cloog_loop_constant_cmp(l1, l2, level, scaldims, nb_scattdims, scalar) == 0; -} - - -/** - * cloog_loop_scalar_sort function: - * This function sorts a linked list of loops (loop) with respect to the - * scalar dimension vector that begins at dimension 'scalar'. Since there may - * be a succession of scalar dimensions, this function will reason about the - * vector of scalar dimension that begins at dimension 'level+scalar' and - * finish to the first non-scalar dimension. - * \param loop Loop list to sort. - * \param level Current non-scalar dimension. - * \param scaldims Boolean array saying whether a dimension is scalar or not. - * \param nb_scattdims Size of the scaldims array. - * \param scalar Current scalar dimension. - * \return A pointer to the sorted list. - ** - * - July 2nd 2005: first developments. - * - September 2nd 2005: first version. - * - October 15nd 2007: complete rewrite to remove bugs, now a bubble sort. - */ -CloogLoop * cloog_loop_scalar_sort(loop, level, scaldims, nb_scattdims, scalar) -CloogLoop * loop ; -int level, * scaldims, nb_scattdims, scalar ; -{ int ok ; - CloogLoop **current; - - do { - ok = 1; - for (current = &loop; (*current)->next; current = &(*current)->next) { - CloogLoop *next = (*current)->next; - if (cloog_loop_scalar_gt(*current,next,level,scaldims,nb_scattdims,scalar)) { - ok = 0; - (*current)->next = next->next; - next->next = *current; - *current = next; - } - } - } while (!ok); - - return loop ; -} - - -/** - * cloog_loop_generate_backtrack function: - * adaptation from LoopGen 0.4 by F. Quillere. This function implements the - * backtrack of the Quillere et al. algorithm (see the Quillere paper). - * It eliminates unused iterations of the current level for the new one. See the - * example called linearity-1-1 example with and without this part for an idea. - * - October 26th 2001: first version in cloog_loop_generate_general. - * - July 31th 2002: (debug) no more parasite loops (REALLY hard !). - * - October 30th 2005: extraction from cloog_loop_generate_general. - */ -CloogLoop *cloog_loop_generate_backtrack(CloogLoop *loop, - int level, CloogOptions *options) -{ - CloogDomain * domain ; - CloogLoop * now, * now2, * next, * next2, * end, * temp, * l, * inner, - * new_loop ; - - temp = loop ; - loop = NULL ; - - while (temp != NULL) - { l = NULL ; - inner = temp->inner ; - - while (inner != NULL) - { next = inner->next ; - /* This 'if' and its first part is the debug of july 31th 2002. */ - if (inner->block != NULL) { - end = cloog_loop_alloc(temp->state, inner->domain, 0, NULL, - inner->block, NULL, NULL); - domain = cloog_domain_copy(temp->domain) ; - new_loop = cloog_loop_alloc(temp->state, domain, 0, NULL, - NULL, end, NULL); - } - else - new_loop = cloog_loop_project(inner, level); - - cloog_loop_free_parts(inner,0,0,0,0) ; - cloog_loop_add(&l,&now2,new_loop) ; - inner = next ; - } - - temp->inner = NULL ; - - if (l != NULL) - { l = cloog_loop_separate(l) ; - l = cloog_loop_sort(l, level); - while (l != NULL) { - l->stride = cloog_stride_copy(l->stride); - cloog_loop_add(&loop,&now,l) ; - l = l->next ; - } - } - next2 = temp->next ; - cloog_loop_free_parts(temp,1,0,0,0) ; - temp = next2 ; - } - - return loop ; -} - - -/** - * Return 1 if we need to continue recursing to the specified level. - */ -int cloog_loop_more(CloogLoop *loop, int level, int scalar, int nb_scattdims) -{ - return level + scalar <= nb_scattdims || - cloog_domain_dimension(loop->domain) >= level; -} - -/** - * Return 1 if the domains of all loops in the given linked list - * have a fixed value at the given level. - * In principle, there would be no need to check that the fixed value is - * the same for each of these loops because this function is only - * called on a component. However, not all backends perform a proper - * decomposition into components. - */ -int cloog_loop_is_constant(CloogLoop *loop, int level) -{ - cloog_int_t c1, c2; - int r = 1; - - cloog_int_init(c1); - cloog_int_init(c2); - - if (!cloog_domain_lazy_isconstant(loop->domain, level - 1, &c1)) - r = 0; - - for (loop = loop->next; r && loop; loop = loop->next) { - if (!cloog_domain_lazy_isconstant(loop->domain, level - 1, &c2)) - r = 0; - else if (cloog_int_ne(c1, c2)) - r = 0; - } - - cloog_int_clear(c1); - cloog_int_clear(c2); - - return r; -} - -/** - * Assuming all domains in the given linked list of loop - * have a fixed values at level, return a single loop with - * a domain corresponding to this fixed value and with as - * list of inner loops the concatenation of all inner loops - * in the original list. - */ -CloogLoop *cloog_loop_constant(CloogLoop *loop, int level) -{ - CloogLoop *res, *inner, *tmp; - CloogDomain *domain, *t; - - if (!loop) - return loop; - - inner = loop->inner; - domain = loop->domain; - for (tmp = loop->next; tmp; tmp = tmp->next) { - inner = cloog_loop_concat(inner, tmp->inner); - domain = cloog_domain_union(domain, tmp->domain); - } - - domain = cloog_domain_simple_convex(t = domain); - cloog_domain_free(t); - - res = cloog_loop_alloc(loop->state, domain, 0, NULL, NULL, inner, NULL); - - cloog_loop_free_parts(loop, 0, 0, 0, 1); - - return res; -} - - -/* Unroll the given loop at the given level, provided it is allowed - * by cloog_domain_can_unroll. - * If so, we return a list of loops, one for each iteration of the original - * loop. Otherwise, we simply return the original loop. - */ -static CloogLoop *loop_unroll(CloogLoop *loop, int level) -{ - int can_unroll; - cloog_int_t i; - cloog_int_t n; - CloogConstraint *lb; - CloogLoop *res = NULL; - CloogLoop **next_res = &res; - CloogDomain *domain; - CloogLoop *inner; - - cloog_int_init(n); - can_unroll = cloog_domain_can_unroll(loop->domain, level, &n, &lb); - if (!can_unroll) { - cloog_int_clear(n); - return loop; - } - - cloog_int_init(i); - - for (cloog_int_set_si(i, 0); cloog_int_lt(i, n); cloog_int_add_ui(i, i, 1)) { - domain = cloog_domain_copy(loop->domain); - domain = cloog_domain_fixed_offset(domain, level, lb, i); - inner = cloog_loop_copy(loop->inner); - inner = cloog_loop_restrict_all(inner, domain); - if (!inner) { - cloog_domain_free(domain); - continue; - } - *next_res = cloog_loop_alloc(loop->state, domain, 1, NULL, NULL, - inner, NULL); - next_res = &(*next_res)->next; - } - - cloog_int_clear(i); - cloog_int_clear(n); - cloog_constraint_release(lb); - - cloog_loop_free(loop); - - return res; -} - - -/* Unroll all loops in the given list at the given level, provided - * they can be unrolled. - */ -CloogLoop *cloog_loop_unroll(CloogLoop *loop, int level) -{ - CloogLoop *now, *next; - CloogLoop *res = NULL; - CloogLoop **next_res = &res; - - for (now = loop; now; now = next) { - next = now->next; - now->next = NULL; - - *next_res = loop_unroll(now, level); - - while (*next_res) - next_res = &(*next_res)->next; - } - - return res; -} - -CloogLoop *cloog_loop_generate_restricted_or_stop(CloogLoop *loop, - CloogDomain *context, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options); - -CloogLoop *cloog_loop_recurse(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - int constant, CloogOptions *options); - - -/** - * Recurse on the inner loops of the given single loop. - * - * - loop is the loop for which we have to generate scanning code, - * - level is the current non-scalar dimension, - * - scalar is the current scalar dimension, - * - scaldims is the boolean array saying whether a dimension is scalar or not, - * - nb_scattdims is the size of the scaldims array, - * - constant is true if the loop is known to be executed at most once - * - options are the general code generation options. - */ -static CloogLoop *loop_recurse(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - int constant, CloogOptions *options) -{ - CloogLoop *inner, *into, *end, *next, *l, *now; - CloogDomain *domain; - - if (level && options->strides && !constant) - cloog_loop_stride(loop, level); - - if (!constant && - options->first_unroll >= 0 && level + scalar >= options->first_unroll) { - loop = cloog_loop_unroll(loop, level); - if (loop->next) - return cloog_loop_recurse(loop, level, scalar, scaldims, - nb_scattdims, 1, options); - } - - if (level && options->otl) - cloog_loop_otl(loop, level); - inner = loop->inner; - domain = cloog_domain_copy(loop->domain); - domain = cloog_domain_add_stride_constraint(domain, loop->stride); - into = NULL ; - while (inner != NULL) - { /* 4b. -ced- recurse for each sub-list of non terminal loops. */ - if (cloog_loop_more(inner, level + 1, scalar, nb_scattdims)) { - end = inner; - while ((end->next != NULL) && - cloog_loop_more(end->next, level + 1, scalar, nb_scattdims)) - end = end->next ; - - next = end->next ; - end->next = NULL ; - - l = cloog_loop_generate_restricted_or_stop(inner, domain, - level + 1, scalar, scaldims, nb_scattdims, options); - - if (l != NULL) - cloog_loop_add_list(&into,&now,l) ; - - inner = next ; - } - else - { cloog_loop_add(&into,&now,inner) ; - inner = inner->next ; - } - } - - cloog_domain_free(domain); - loop->inner = into; - return loop; -} - - -/** - * Recurse on the inner loops of each of the loops in the loop list. - * - * - loop is the loop list for which we have to generate scanning code, - * - level is the current non-scalar dimension, - * - scalar is the current scalar dimension, - * - scaldims is the boolean array saying whether a dimension is scalar or not, - * - nb_scattdims is the size of the scaldims array, - * - constant is true if the loop is known to be executed at most once - * - options are the general code generation options. - */ -CloogLoop *cloog_loop_recurse(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - int constant, CloogOptions *options) -{ - CloogLoop *now, *next; - CloogLoop *res = NULL; - CloogLoop **next_res = &res; - - for (now = loop; now; now = next) { - next = now->next; - now->next = NULL; - - *next_res = loop_recurse(now, level, scalar, scaldims, nb_scattdims, - constant, options); - - while (*next_res) - next_res = &(*next_res)->next; - } - - return res; -} - -/** - * cloog_loop_generate_general function: - * Adaptation from LoopGen 0.4 by F. Quillere. This function implements the - * Quillere algorithm for polyhedron scanning from step 3 to 5. - * (see the Quillere paper). - * - loop is the loop for which we have to generate a scanning code, - * - level is the current non-scalar dimension, - * - scalar is the current scalar dimension, - * - scaldims is the boolean array saying whether a dimension is scalar or not, - * - nb_scattdims is the size of the scaldims array, - * - options are the general code generation options. - ** - * - October 26th 2001: first version. - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - June 22nd 2005: Adaptation for GMP. - * - September 2nd 2005: The function have been cutted out in two pieces: - * cloog_loop_generate and this one, in order to handle - * the scalar dimension case more efficiently with - * cloog_loop_generate_scalar. - * - November 15th 2005: (debug) the result of the cloog_loop_generate call may - * be a list of polyhedra (especially if stop option is - * used): cloog_loop_add_list instead of cloog_loop_add. - */ -CloogLoop *cloog_loop_generate_general(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options) -{ - CloogLoop *res, *now, *temp, *l, *new_loop, *next; - int separate = 0; - int constant = 0; - - /* 3. Separate all projections into disjoint polyhedra. */ - if (level > 0 && cloog_loop_is_constant(loop, level)) { - res = cloog_loop_constant(loop, level); - constant = 1; - } else if ((options->f > level+scalar) || (options->f < 0)) - res = cloog_loop_merge(loop, level, options); - else { - res = cloog_loop_separate(loop); - separate = 1; - } - - /* 3b. -correction- sort the loops to determine their textual order. */ - res = cloog_loop_sort(res, level); - - res = cloog_loop_restrict_inner(res); - - if (separate) - res = cloog_loop_specialize(res, level, scalar, scaldims, nb_scattdims); - - /* 4. Recurse for each loop with the current domain as context. */ - temp = res ; - res = NULL ; - if (!level || (level+scalar < options->l) || (options->l < 0)) - res = cloog_loop_recurse(temp, level, scalar, scaldims, nb_scattdims, - constant, options); - else - while (temp != NULL) - { next = temp->next ; - l = cloog_loop_nest(temp->inner, temp->domain, level+1); - new_loop = cloog_loop_alloc(temp->state, temp->domain, 0, NULL, - NULL, l, NULL); - temp->inner = NULL ; - temp->next = NULL ; - cloog_loop_free_parts(temp,0,0,0,0) ; - cloog_loop_add(&res,&now,new_loop) ; - temp = next ; - } - - if (options->strides) - res = cloog_loop_propagate_lower_bound(res, level); - - /* 5. eliminate unused iterations of the current level for the new one. See - * the example called linearity-1-1 example with and without this part - * for an idea. - */ - if (options->backtrack && level && - ((level+scalar < options->l) || (options->l < 0)) && - ((options->f <= level+scalar) && !(options->f < 0))) - res = cloog_loop_generate_backtrack(res, level, options); - - /* Pray for my new paper to be accepted somewhere since the following stuff - * is really amazing :-) ! - * Far long later: The paper has been accepted to PACT 2004 :-))). But there - * are still some bugs and I have no time to fix them. Thus now you have to - * pray for me to get an academic position for that really amazing stuff :-) ! - * Later again: OK, I get my academic position, but still I have not enough - * time to fix and clean this part... Pray again :-) !!! - */ - /* res = cloog_loop_unisolate(res,level) ;*/ - - return(res) ; -} - - -CloogLoop *cloog_loop_generate_restricted(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options); - - -/** - * cloog_loop_generate_scalar function: - * This function applies the simplified code generation scheme in the trivial - * case of scalar dimensions. When dealing with scalar dimensions, there is - * no need of costly polyhedral operations for separation or sorting: sorting - * is a question of comparing scalar vectors and separation amounts to consider - * only loops with the same scalar vector for the next step of the code - * generation process. This function achieves the separation/sorting process - * for the vector of scalar dimension that begins at dimension 'level+scalar' - * and finish to the first non-scalar dimension. - * - loop is the loop for which we have to generate a scanning code, - * - level is the current non-scalar dimension, - * - scalar is the current scalar dimension, - * - scaldims is the boolean array saying whether a dimension is scalar or not, - * - nb_scattdims is the size of the scaldims array, - * - options are the general code generation options. - ** - * - September 2nd 2005: First version. - */ -CloogLoop *cloog_loop_generate_scalar(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options) -{ CloogLoop * res, * now, * temp, * l, * end, * next, * ref ; - int scalar_new; - - /* We sort the loop list with respect to the current scalar vector. */ - res = cloog_loop_scalar_sort(loop,level,scaldims,nb_scattdims,scalar) ; - - scalar_new = scalar + scaldims[level + scalar - 1]; - - temp = res ; - res = NULL ; - while (temp != NULL) - { /* Then we will appy the general code generation process to each sub-list - * of loops with the same scalar vector. - */ - end = temp ; - ref = temp ; - - while((end->next != NULL) && - cloog_loop_more(end->next, level, scalar_new, nb_scattdims) && - cloog_loop_scalar_eq(ref,end->next,level,scaldims,nb_scattdims,scalar)) - end = end->next ; - - next = end->next ; - end->next = NULL ; - - /* For the next dimension, scalar value is updated by adding the scalar - * vector size, which is stored at scaldims[level+scalar-1]. - */ - if (cloog_loop_more(temp, level, scalar_new, nb_scattdims)) { - l = cloog_loop_generate_restricted(temp, level, scalar_new, - scaldims, nb_scattdims, options); - - if (l != NULL) - cloog_loop_add_list(&res, &now, l); - } else - cloog_loop_add(&res, &now, temp); - - temp = next ; - } - - return res ; -} - - -/* Compare loop with the next loop based on their constant dimensions. - * The result is < 0, == 0 or > 0 depending on whether the constant - * dimensions of loop are lexicographically smaller, equal or greater - * than those of loop->next. - * If loop is the last in the list, then it is assumed to be smaller - * than the "next" one. - */ -static int cloog_loop_next_scal_cmp(CloogLoop *loop) -{ - int i; - int nb_scaldims; - - if (!loop->next) - return -1; - - nb_scaldims = loop->block->nb_scaldims; - if (loop->next->block->nb_scaldims < nb_scaldims) - nb_scaldims = loop->next->block->nb_scaldims; - - for (i = 0; i < nb_scaldims; ++i) { - int cmp = cloog_int_cmp(loop->block->scaldims[i], - loop->next->block->scaldims[i]); - if (cmp) - return cmp; - } - return loop->block->nb_scaldims - loop->next->block->nb_scaldims; -} - - -/* Check whether the globally constant dimensions of a and b - * have the same value for all globally constant dimensions - * that are situated before any (locally) non-constant dimension. - */ -static int cloog_loop_equal_prefix(CloogLoop *a, CloogLoop *b, - int *scaldims, int nb_scattdims) -{ - int i; - int cst = 0; - int dim = 0; - - for (i = 0; i < nb_scattdims; ++i) { - if (!scaldims[i]) { - dim++; - continue; - } - if (!cloog_int_eq(a->block->scaldims[cst], b->block->scaldims[cst])) - break; - cst++; - } - for (i = i + 1; i < nb_scattdims; ++i) { - if (scaldims[i]) - continue; - if (!cloog_domain_lazy_isconstant(a->domain, dim, NULL)) - return 0; - /* No need to check that dim is also constant in b and that the - * constant values are equal. That will happen during the check - * whether the two domains are equal. - */ - dim++; - } - return 1; -} - - -/* Try to block adjacent loops in the loop list "loop". - * We only attempt blocking if the constant dimensions of the loops - * in the least are (not necessarily strictly) increasing. - * Then we look for a sublist such that the first (begin) has constant - * dimensions strictly larger than the previous loop in the complete - * list and such that the loop (end) after the last loop in the sublist - * has constant dimensions strictly larger than the last loop in the sublist. - * Furthermore, all loops in the sublist should have the same domain - * (with globally constant dimensions removed) and the difference - * (if any) in constant dimensions may only occur after all the - * (locally) constant dimensions. - * If we find such a sublist, then the blocks of all but the first - * are merged into the block of the first. - * - * Note that this function can only be called before the global - * blocklist has been created because it may otherwise modify and destroy - * elements on that list. - */ -CloogLoop *cloog_loop_block(CloogLoop *loop, int *scaldims, int nb_scattdims) -{ - CloogLoop *begin, *end, *l; - int begin_after_previous; - int end_after_previous; - - if (!loop->next) - return loop; - for (begin = loop; begin; begin = begin->next) { - if (!begin->block || !begin->block->scaldims) - return loop; - if (cloog_loop_next_scal_cmp(begin) > 0) - return loop; - } - - begin_after_previous = 1; - for (begin = loop; begin; begin = begin->next) { - if (!begin_after_previous) { - begin_after_previous = cloog_loop_next_scal_cmp(begin) < 0; - continue; - } - - end_after_previous = cloog_loop_next_scal_cmp(begin) < 0; - for (end = begin->next; end; end = end->next) { - if (!cloog_loop_equal_prefix(begin, end, scaldims, nb_scattdims)) - break; - if (!cloog_domain_lazy_equal(begin->domain, end->domain)) - break; - end_after_previous = cloog_loop_next_scal_cmp(end) < 0; - } - if (end != begin->next && end_after_previous) { - for (l = begin->next; l != end; l = begin->next) { - cloog_block_merge(begin->block, l->block); - begin->next = l->next; - cloog_loop_free_parts(l, 1, 0, 1, 0); - } - } - - begin_after_previous = cloog_loop_next_scal_cmp(begin) < 0; - } - - return loop; -} - - -/** - * Check whether for any fixed iteration of the outer loops, - * there is an iteration of loop1 that is lexicographically greater - * than an iteration of loop2. - * Return 1 if there exists (or may exist) such a pair. - * Return 0 if all iterations of loop1 are lexicographically smaller - * than the iterations of loop2. - * If no iteration is lexicographically greater, but if there are - * iterations that are equal to iterations of loop2, then return "def". - * This is useful for ensuring that such statements are not reordered. - * Some users, including the test_run target in test, expect - * the statements at a given point to be run in the original order. - * Passing the value "0" for "def" would allow such statements to be reordered - * and would allow for the detection of more components. - */ -int cloog_loop_follows(CloogLoop *loop1, CloogLoop *loop2, - int level, int scalar, int *scaldims, int nb_scattdims, int def) -{ - int dim1, dim2; - - dim1 = cloog_domain_dimension(loop1->domain); - dim2 = cloog_domain_dimension(loop2->domain); - while ((level <= dim1 && level <= dim2) || - level_is_constant(level, scalar, scaldims, nb_scattdims)) { - if (level_is_constant(level, scalar, scaldims, nb_scattdims)) { - int cmp = cloog_loop_constant_cmp(loop1, loop2, level, scaldims, - nb_scattdims, scalar); - if (cmp > 0) - return 1; - if (cmp < 0) - return 0; - scalar += scaldims[level + scalar - 1]; - } else { - int follows = cloog_domain_follows(loop1->domain, loop2->domain, - level); - if (follows > 0) - return 1; - if (follows < 0) - return 0; - level++; - } - } - - return def; -} - - -/* Structure for representing the nodes in the graph being traversed - * using Tarjan's algorithm. - * index represents the order in which nodes are visited. - * min_index is the index of the root of a (sub)component. - * on_stack indicates whether the node is currently on the stack. - */ -struct cloog_loop_sort_node { - int index; - int min_index; - int on_stack; -}; -/* Structure for representing the graph being traversed - * using Tarjan's algorithm. - * len is the number of nodes - * node is an array of nodes - * stack contains the nodes on the path from the root to the current node - * sp is the stack pointer - * index is the index of the last node visited - * order contains the elements of the components separated by -1 - * op represents the current position in order - */ -struct cloog_loop_sort { - int len; - struct cloog_loop_sort_node *node; - int *stack; - int sp; - int index; - int *order; - int op; -}; - -/* Allocate and initialize cloog_loop_sort structure. - */ -static struct cloog_loop_sort *cloog_loop_sort_alloc(int len) -{ - struct cloog_loop_sort *s; - int i; - - s = (struct cloog_loop_sort *)malloc(sizeof(struct cloog_loop_sort)); - assert(s); - s->len = len; - s->node = (struct cloog_loop_sort_node *) - malloc(len * sizeof(struct cloog_loop_sort_node)); - assert(s->node); - for (i = 0; i < len; ++i) - s->node[i].index = -1; - s->stack = (int *)malloc(len * sizeof(int)); - assert(s->stack); - s->order = (int *)malloc(2 * len * sizeof(int)); - assert(s->order); - - s->sp = 0; - s->index = 0; - s->op = 0; - - return s; -} - -/* Free cloog_loop_sort structure. - */ -static void cloog_loop_sort_free(struct cloog_loop_sort *s) -{ - free(s->node); - free(s->stack); - free(s->order); - free(s); -} - - -/* Check whether for any fixed iteration of the outer loops, - * there is an iteration of loop1 that is lexicographically greater - * than an iteration of loop2, where the iteration domains are - * available in the inner loops of the arguments. - * - * By using this functions to detect components, we ensure that - * two CloogLoops appear in the same component if some iterations of - * each loop should be executed before some iterations of the other loop. - * Since we also want two CloogLoops that have exactly the same - * iteration domain at the current level to be placed in the same component, - * we first check if these domains are indeed the same. - */ -static int inner_loop_follows(CloogLoop *loop1, CloogLoop *loop2, - int level, int scalar, int *scaldims, int nb_scattdims, int def) -{ - int f; - - f = cloog_domain_lazy_equal(loop1->domain, loop2->domain); - if (!f) - f = cloog_loop_follows(loop1->inner, loop2->inner, - level, scalar, scaldims, nb_scattdims, def); - - return f; -} - - -/* Perform Tarjan's algorithm for computing the strongly connected components - * in the graph with the individual CloogLoops as vertices. - * Two CloopLoops appear in the same component if they both (indirectly) - * "follow" each other, where the following relation is determined - * by the follows function. - */ -static void cloog_loop_components_tarjan(struct cloog_loop_sort *s, - CloogLoop **loop_array, int i, int level, int scalar, int *scaldims, - int nb_scattdims, - int (*follows)(CloogLoop *loop1, CloogLoop *loop2, - int level, int scalar, int *scaldims, int nb_scattdims, int def)) -{ - int j; - - s->node[i].index = s->index; - s->node[i].min_index = s->index; - s->node[i].on_stack = 1; - s->index++; - s->stack[s->sp++] = i; - - for (j = s->len - 1; j >= 0; --j) { - int f; - - if (j == i) - continue; - if (s->node[j].index >= 0 && - (!s->node[j].on_stack || - s->node[j].index > s->node[i].min_index)) - continue; - - f = follows(loop_array[i], loop_array[j], - level, scalar, scaldims, nb_scattdims, i > j); - if (!f) - continue; - - if (s->node[j].index < 0) { - cloog_loop_components_tarjan(s, loop_array, j, level, scalar, - scaldims, nb_scattdims, follows); - if (s->node[j].min_index < s->node[i].min_index) - s->node[i].min_index = s->node[j].min_index; - } else if (s->node[j].index < s->node[i].min_index) - s->node[i].min_index = s->node[j].index; - } - - if (s->node[i].index != s->node[i].min_index) - return; - - do { - j = s->stack[--s->sp]; - s->node[j].on_stack = 0; - s->order[s->op++] = j; - } while (j != i); - s->order[s->op++] = -1; -} - - -static int qsort_index_cmp(const void *p1, const void *p2) -{ - return *(int *)p1 - *(int *)p2; -} - -/* Sort the elements of the component starting at list. - * The list is terminated by a -1. - */ -static void sort_component(int *list) -{ - int len; - - for (len = 0; list[len] != -1; ++len) - ; - - qsort(list, len, sizeof(int), qsort_index_cmp); -} - -/* Given an array of indices "list" into the "loop_array" array, - * terminated by -1, construct a linked list of the corresponding - * entries and put the result in *res. - * The value returned is the number of CloogLoops in the (linked) list - */ -static int extract_component(CloogLoop **loop_array, int *list, CloogLoop **res) -{ - int i = 0; - - sort_component(list); - while (list[i] != -1) { - *res = loop_array[list[i]]; - res = &(*res)->next; - ++i; - } - *res = NULL; - - return i; -} - - -/** - * Call cloog_loop_generate_scalar or cloog_loop_generate_general - * on each of the strongly connected components in the list of CloogLoops - * pointed to by "loop". - * - * We use Tarjan's algorithm to find the strongly connected components. - * Note that this algorithm also topologically sorts the components. - * - * The components are treated separately to avoid spurious separations. - * The concatentation of the results may contain successive loops - * with the same bounds, so we try to combine such loops. - */ -CloogLoop *cloog_loop_generate_components(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options) -{ - int i, nb_loops; - CloogLoop *tmp; - CloogLoop *res, **res_next; - CloogLoop **loop_array; - struct cloog_loop_sort *s; - - if (level == 0 || !loop->next) - return cloog_loop_generate_general(loop, level, scalar, - scaldims, nb_scattdims, options); - - nb_loops = cloog_loop_count(loop); - - loop_array = (CloogLoop **)malloc(nb_loops * sizeof(CloogLoop *)); - assert(loop_array); - - for (i = 0, tmp = loop; i < nb_loops; i++, tmp = tmp->next) - loop_array[i] = tmp; - - s = cloog_loop_sort_alloc(nb_loops); - for (i = nb_loops - 1; i >= 0; --i) { - if (s->node[i].index >= 0) - continue; - cloog_loop_components_tarjan(s, loop_array, i, level, scalar, scaldims, - nb_scattdims, &inner_loop_follows); - } - - i = 0; - res = NULL; - res_next = &res; - while (nb_loops) { - int n = extract_component(loop_array, &s->order[i], &tmp); - i += n + 1; - nb_loops -= n; - *res_next = cloog_loop_generate_general(tmp, level, scalar, - scaldims, nb_scattdims, options); - while (*res_next) - res_next = &(*res_next)->next; - } - - cloog_loop_sort_free(s); - - free(loop_array); - - res = cloog_loop_combine(res); - - return res; -} - - -/* For each loop in the list "loop", decompose the list of - * inner loops into strongly connected components and put - * the components into separate loops at the top level. - */ -CloogLoop *cloog_loop_decompose_inner(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims) -{ - CloogLoop *l, *tmp; - CloogLoop **loop_array; - int i, n_loops, max_loops = 0; - struct cloog_loop_sort *s; - - for (l = loop; l; l = l->next) { - n_loops = cloog_loop_count(l->inner); - if (max_loops < n_loops) - max_loops = n_loops; - } - - if (max_loops <= 1) - return loop; - - loop_array = (CloogLoop **)malloc(max_loops * sizeof(CloogLoop *)); - assert(loop_array); - - for (l = loop; l; l = l->next) { - int n; - - for (i = 0, tmp = l->inner; tmp; i++, tmp = tmp->next) - loop_array[i] = tmp; - n_loops = i; - if (n_loops <= 1) - continue; - - s = cloog_loop_sort_alloc(n_loops); - for (i = n_loops - 1; i >= 0; --i) { - if (s->node[i].index >= 0) - continue; - cloog_loop_components_tarjan(s, loop_array, i, level, scalar, - scaldims, nb_scattdims, &cloog_loop_follows); - } - - n = extract_component(loop_array, s->order, &l->inner); - n_loops -= n; - i = n + 1; - while (n_loops) { - CloogLoop *inner; - - n = extract_component(loop_array, &s->order[i], &inner); - n_loops -= n; - i += n + 1; - tmp = cloog_loop_alloc(l->state, cloog_domain_copy(l->domain), - l->otl, l->stride, l->block, inner, l->next); - l->next = tmp; - l = tmp; - } - - cloog_loop_sort_free(s); - } - - free(loop_array); - - return loop; -} - - -CloogLoop *cloog_loop_generate_restricted(CloogLoop *loop, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options) -{ - /* To save both time and memory, we switch here depending on whether the - * current dimension is scalar (simplified processing) or not (general - * processing). - */ - if (level_is_constant(level, scalar, scaldims, nb_scattdims)) - return cloog_loop_generate_scalar(loop, level, scalar, - scaldims, nb_scattdims, options); - /* - * 2. Compute the projection of each polyhedron onto the outermost - * loop variable and the parameters. - */ - loop = cloog_loop_project_all(loop, level); - - return cloog_loop_generate_components(loop, level, scalar, scaldims, - nb_scattdims, options); -} - - -CloogLoop *cloog_loop_generate_restricted_or_stop(CloogLoop *loop, - CloogDomain *context, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options) -{ - /* If the user asked to stop code generation at this level, let's stop. */ - if ((options->stop >= 0) && (level+scalar >= options->stop+1)) - return cloog_loop_stop(loop,context) ; - - return cloog_loop_generate_restricted(loop, level, scalar, scaldims, - nb_scattdims, options); -} - - -/** - * cloog_loop_generate function: - * Adaptation from LoopGen 0.4 by F. Quillere. This function implements the - * Quillere algorithm for polyhedron scanning from step 1 to 2. - * (see the Quillere paper). - * - loop is the loop for which we have to generate a scanning code, - * - context is the context of the current loop (constraints on parameter and/or - * on outer loop counters), - * - level is the current non-scalar dimension, - * - scalar is the current scalar dimension, - * - scaldims is the boolean array saying whether a dimension is scalar or not, - * - nb_scattdims is the size of the scaldims array, - * - options are the general code generation options. - ** - * - October 26th 2001: first version. - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - June 15th 2005: a memory leak fixed (loop was not entirely freed when - * the result of cloog_loop_restrict was NULL). - * - June 22nd 2005: Adaptation for GMP. - * - September 2nd 2005: The function have been cutted out in two pieces: - * cloog_loop_generate and this one, in order to handle - * the scalar dimension case more efficiently with - * cloog_loop_generate_scalar. - * - November 15th 2005: (debug) Condition for stop option no more take care of - * further scalar dimensions. - */ -CloogLoop *cloog_loop_generate(CloogLoop *loop, CloogDomain *context, - int level, int scalar, int *scaldims, int nb_scattdims, - CloogOptions *options) -{ - /* 1. Replace each polyhedron by its intersection with the context. - */ - loop = cloog_loop_restrict_all(loop, context); - if (!loop) - return NULL; - - return cloog_loop_generate_restricted_or_stop(loop, context, - level, scalar, scaldims, nb_scattdims, options); -} - - -/* - * Internal function for simplifying a single loop in a list of loops. - * See cloog_loop_simplify. - */ -static CloogLoop *loop_simplify(CloogLoop *loop, CloogDomain *context, - int level, int nb_scattdims, CloogOptions *options) -{ - int domain_dim; - CloogBlock * new_block ; - CloogLoop *simplified, *inner; - CloogDomain * domain, * simp, * inter, * extended_context ; - - domain = loop->domain ; - - domain_dim = cloog_domain_dimension(domain); - extended_context = cloog_domain_extend(context, domain_dim); - inter = cloog_domain_intersection(domain,extended_context) ; - simp = cloog_domain_simplify(domain, extended_context); - cloog_domain_free(extended_context) ; - - /* If the constraint system is never true, go to the next one. */ - if (cloog_domain_never_integral(simp)) { - cloog_loop_free(loop->inner); - cloog_domain_free(inter); - cloog_domain_free(simp); - return NULL; - } - - inner = cloog_loop_simplify(loop->inner, inter, level+1, nb_scattdims, - options); - - if ((inner == NULL) && (loop->block == NULL)) { - cloog_domain_free(inter); - cloog_domain_free(simp); - return NULL; - } - - new_block = cloog_block_copy(loop->block) ; - - simplified = cloog_loop_alloc(loop->state, simp, loop->otl, loop->stride, - new_block, inner, NULL); - - /* Only save the domains, if it involves only scattering dimensions. */ - if (options->save_domains) { - if (domain_dim > nb_scattdims) { - CloogDomain *t; - inter = cloog_domain_project(t = inter, nb_scattdims); - cloog_domain_free(t); - } - inter = cloog_domain_add_stride_constraint(inter, loop->stride); - simplified->unsimplified = inter; - } else - cloog_domain_free(inter); - - return(simplified) ; -} - - -/** - * cloog_loop_simplify function: - * This function implements the part 6. of the Quillere algorithm, it - * recursively simplifies each loop in the context of the preceding loop domain. - * It returns a pointer to the simplified loop list. - * The cloog_domain_simplify (DomainSimplify) behaviour is really bad with - * polyhedra union and some really awful sidesteppings were written, I plan - * to solve that... - * - October 31th 2001: first version. - * - July 3rd->11th 2003: memory leaks hunt and correction. - * - April 16th 2005: a memory leak fixed (extended_context was not freed). - * - June 15th 2005: a memory leak fixed (loop was not conveniently freed - * when the constraint system is never true). - * - October 27th 2005: - this function called before cloog_loop_fast_simplify - * is now the official cloog_loop_simplify function in - * replacement of a slower and more complex one (after - * deep changes in the pretty printer). - * - we use cloog_loop_disjoint to fix the problem when - * simplifying gives a union of polyhedra (before, it - * was under the responsibility of the pretty printer). - */ -CloogLoop *cloog_loop_simplify(CloogLoop *loop, CloogDomain *context, int level, - int nb_scattdims, CloogOptions *options) -{ - CloogLoop *now; - CloogLoop *res = NULL; - CloogLoop **next = &res; - int need_split = 0; - - for (now = loop; now; now = now->next) - if (!cloog_domain_isconvex(now->domain)) { - now->domain = cloog_domain_simplify_union(now->domain); - if (!cloog_domain_isconvex(now->domain)) - need_split = 1; - } - - /* If the input of CLooG contains any union domains, then they - * may not have been split yet at this point. Do so now as the - * clast construction assumes there are no union domains. - */ - if (need_split) - loop = cloog_loop_disjoint(loop); - - for (now = loop; now; now = now->next) { - *next = loop_simplify(now, context, level, nb_scattdims, options); - - now->inner = NULL; /* For loop integrity. */ - cloog_domain_free(now->domain); - now->domain = NULL; - - if (*next) - next = &(*next)->next; - } - cloog_loop_free(loop); - - return res; -} - - -/** - * cloog_loop_scatter function: - * This function add the scattering (scheduling) informations in a loop. - */ -void cloog_loop_scatter(CloogLoop * loop, CloogScattering *scatt) -{ - loop->domain = cloog_domain_scatter(loop->domain, scatt); -} - diff --git a/cloog-0.17.0/source/matrix.c b/cloog-0.17.0/source/matrix.c deleted file mode 100644 index 43c2380..0000000 --- a/cloog-0.17.0/source/matrix.c +++ /dev/null @@ -1,213 +0,0 @@ - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** cloogmatrix.c ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - -#include -#include -#include -#include "../include/cloog/cloog.h" - -/** - * cloog_matrix_alloc: - * Allocate a CloogMatrix data structure with NbRows rows and NbColumns columns. - * All values are initialized to 0. - * This method returns a pointer to the data structure if successful or a NULL - * pointer otherwise. - */ -CloogMatrix *cloog_matrix_alloc(unsigned NbRows, unsigned NbColumns) -{ - CloogMatrix *matrix; - cloog_int_t **p, *q; - int i, j; - - matrix = (CloogMatrix *)malloc(sizeof(CloogMatrix)); - - if (!matrix) - return NULL; - - matrix->NbRows = NbRows; - matrix->NbColumns = NbColumns; - - if (!NbRows || !NbColumns) { - matrix->p = NULL; - matrix->p_Init = NULL; - return matrix; - } - - p = (cloog_int_t **)malloc(NbRows * sizeof(cloog_int_t *)); - - if (p == NULL) { - free (matrix); - return NULL; - } - - q = (cloog_int_t *)malloc(NbRows * NbColumns * sizeof(cloog_int_t)); - - if (q == NULL) { - free (matrix); - free (p); - return NULL; - } - - matrix->p = p; - matrix->p_Init = q; - - for (i = 0; i < NbRows; i++) { - *p++ = q; - for (j = 0; j < NbColumns; j++) { - cloog_int_init(*(q+j)); - cloog_int_set_si(*(q+j), 0); - } - q += NbColumns; - } - - return matrix; -} - -/** - * cloog_matrix_free: - * Free matrix. - */ -void cloog_matrix_free(CloogMatrix * matrix) -{ - int i; - cloog_int_t *p; - int size = matrix->NbRows * matrix->NbColumns; - - p = matrix->p_Init; - - for (i = 0; i < size; i++) - cloog_int_clear(*p++); - - if (matrix) { - free(matrix->p_Init); - free(matrix->p); - free(matrix); - } -} - - -/** - * Print the elements of CloogMatrix M to file, with each row prefixed - * by prefix and suffixed by suffix. - */ -void cloog_matrix_print_structure(FILE *file, CloogMatrix *M, - const char *prefix, const char *suffix) -{ - int i, j; - - for (i = 0; i < M->NbRows; ++i) { - fprintf(file, "%s", prefix); - for (j = 0; j < M->NbColumns; ++j) { - cloog_int_print(file, M->p[i][j]); - fprintf(file, " "); - } - fprintf(file, "%s\n", suffix); - } -} - -/** - * cloog_matrix_print function: - * This function prints the content of a CloogMatrix structure (matrix) into a - * file (foo, possibly stdout). - */ -void cloog_matrix_print(FILE* foo, CloogMatrix* m) -{ - if (!m) - fprintf(foo, "(null)\n"); - - fprintf(foo, "%d %d\n", m->NbRows, m->NbColumns); - cloog_matrix_print_structure(foo, m, "", ""); - fflush(foo); -} - - -static char *next_line(FILE *input, char *line, unsigned len) -{ - char *p; - - do { - if (!(p = fgets(line, len, input))) - return NULL; - while (isspace(*p) && *p != '\n') - ++p; - } while (*p == '#' || *p == '\n'); - - return p; -} - -CloogMatrix *cloog_matrix_read(FILE *input) -{ - unsigned n_row, n_col; - char line[1024]; - - if (!next_line(input, line, sizeof(line))) - cloog_die("Input error.\n"); - if (sscanf(line, "%u %u", &n_row, &n_col) != 2) - cloog_die("Input error.\n"); - - return cloog_matrix_read_of_size(input, n_row, n_col); -} - -/** - * Read a matrix in PolyLib format from input. - */ -CloogMatrix *cloog_matrix_read_of_size(FILE *input, - unsigned n_row, unsigned n_col) -{ - CloogMatrix *M; - int i, j; - char line[1024]; - char val[1024]; - char *p; - - M = cloog_matrix_alloc(n_row, n_col); - if (!M) - cloog_die("memory overflow.\n"); - for (i = 0; i < n_row; ++i) { - int offset; - int n; - - p = next_line(input, line, sizeof(line)); - if (!p) - cloog_die("Input error.\n"); - for (j = 0; j < n_col; ++j) { - n = sscanf(p, "%s%n", val, &offset); - if (!n) - cloog_die("Input error.\n"); - cloog_int_read(M->p[i][j], val); - p += offset; - } - } - - return M; -} diff --git a/cloog-0.17.0/source/matrix/constraintset.c b/cloog-0.17.0/source/matrix/constraintset.c deleted file mode 100644 index 78025f8..0000000 --- a/cloog-0.17.0/source/matrix/constraintset.c +++ /dev/null @@ -1,1056 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** constraintset.c ** - **-------------------------------------------------------------------** - ** First version: april 17th 2005 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ -/* CAUTION: the english used for comments is probably the worst you ever read, - * please feel free to correct and improve it ! - */ - - -# include -# include -# include -#include -#include - - -#define ALLOC(type) (type*)malloc(sizeof(type)) -#define ALLOCN(type,n) (type*)malloc((n)*sizeof(type)) - - -CloogConstraint *cloog_constraint_first(CloogConstraintSet *constraints); -CloogConstraint *cloog_constraint_next(CloogConstraint *constraint); - - -CloogConstraintSet *cloog_constraint_set_from_cloog_matrix(CloogMatrix *M) -{ - return (CloogConstraintSet *)M; -} - - -void cloog_constraint_set_free(CloogConstraintSet *constraints) -{ - cloog_matrix_free(&constraints->M); -} - -int cloog_constraint_set_contains_level(CloogConstraintSet *constraints, - int level, int nb_parameters) -{ - return constraints->M.NbColumns - 2 - nb_parameters >= level; -} - -/* Check if the variable at position level is defined by an - * equality. If so, return the row number. Otherwise, return -1. - * - * If there is an equality, we can print it directly -no ambiguity-. - * PolyLib can give more than one equality, we use just the first one - * (this is a PolyLib problem, but all equalities are equivalent). - */ -CloogConstraint *cloog_constraint_set_defining_equality(CloogConstraintSet *constraints, int level) -{ - CloogConstraint *constraint = ALLOC(CloogConstraint); - int i; - - constraint->set = constraints; - for (i = 0; i < constraints->M.NbRows; i++) - if (cloog_int_is_zero(constraints->M.p[i][0]) && - !cloog_int_is_zero(constraints->M.p[i][level])) { - constraint->line = &constraints->M.p[i]; - return constraint; - } - free(constraint); - return cloog_constraint_invalid(); -} - -/* Check if the variable (e) at position level is defined by a - * pair of inequalities - * + -m e + + k1 >= 0 - * <-a, i> + m e + <-b, p> + k2 >= 0 - * with 0 <= k1 + k2 < m - * If so return the row number of the upper bound and set *lower - * to the row number of the lower bound. If not, return -1. - * - * If the variable at position level occurs in any other constraint, - * then we currently return -1. The modulo guard that we would generate - * would still be correct, but we would also need to generate - * guards corresponding to the other constraints, and this has not - * been implemented yet. - */ -CloogConstraint *cloog_constraint_set_defining_inequalities(CloogConstraintSet *constraints, - int level, CloogConstraint **lower, int nb_par) -{ - int i, j, k; - cloog_int_t m; - CloogMatrix *matrix = &constraints->M; - unsigned len = matrix->NbColumns - 2; - unsigned nb_iter = len - nb_par; - CloogConstraint *constraint; - - for (i = 0; i < matrix->NbRows; i++) { - if (cloog_int_is_zero(matrix->p[i][level])) - continue; - if (cloog_int_is_zero(matrix->p[i][0])) - return cloog_constraint_invalid(); - if (cloog_int_is_one(matrix->p[i][level])) - return cloog_constraint_invalid(); - if (cloog_int_is_neg_one(matrix->p[i][level])) - return cloog_constraint_invalid(); - if (cloog_seq_first_non_zero(matrix->p[i]+level+1, - (1+nb_iter)-(level+1)) != -1) - return cloog_constraint_invalid(); - for (j = i+1; j < matrix->NbRows; ++j) { - if (cloog_int_is_zero(matrix->p[j][level])) - continue; - if (cloog_int_is_zero(matrix->p[j][0])) - return cloog_constraint_invalid(); - if (cloog_int_is_one(matrix->p[j][level])) - return cloog_constraint_invalid(); - if (cloog_int_is_neg_one(matrix->p[j][level])) - return cloog_constraint_invalid(); - if (cloog_seq_first_non_zero(matrix->p[j]+level+1, - (1+nb_iter)-(level+1)) != -1) - return cloog_constraint_invalid(); - - cloog_int_init(m); - cloog_int_add(m, matrix->p[i][1+len], matrix->p[j][1+len]); - if (cloog_int_is_neg(m) || - cloog_int_abs_ge(m, matrix->p[i][level])) { - cloog_int_clear(m); - return cloog_constraint_invalid(); - } - cloog_int_clear(m); - - if (!cloog_seq_is_neg(matrix->p[i]+1, matrix->p[j]+1, - len)) - return cloog_constraint_invalid(); - for (k = j+1; k < matrix->NbRows; ++k) - if (!cloog_int_is_zero(matrix->p[k][level])) - return cloog_constraint_invalid(); - *lower = ALLOC(CloogConstraint); - constraint = ALLOC(CloogConstraint); - (*lower)->set = constraints; - constraint->set = constraints; - if (cloog_int_is_pos(matrix->p[i][level])) { - (*lower)->line = &matrix->p[i]; - constraint->line = &matrix->p[j]; - } else { - (*lower)->line = &matrix->p[j]; - constraint->line = &matrix->p[i]; - } - return constraint; - } - } - return cloog_constraint_invalid(); -} - -int cloog_constraint_set_total_dimension(CloogConstraintSet *constraints) -{ - return constraints->M.NbColumns - 2; -} - -int cloog_constraint_set_n_iterators(CloogConstraintSet *constraint, int nb_par) -{ - return cloog_constraint_set_total_dimension(constraint) - nb_par; -} - -int cloog_equal_total_dimension(CloogEqualities *equal) -{ - return cloog_constraint_set_total_dimension(equal->constraints); -} - -int cloog_constraint_total_dimension(CloogConstraint *constraint) -{ - return cloog_constraint_set_total_dimension(constraint->set); -} - - - -/****************************************************************************** - * Equalities spreading functions * - ******************************************************************************/ - - -/* Equalities are stored inside a CloogMatrix data structure called "equal". - * This matrix has (nb_scattering + nb_iterators + 1) rows (i.e. total - * dimensions + 1, the "+ 1" is because a statement can be included inside an - * external loop without iteration domain), and (nb_scattering + nb_iterators + - * nb_parameters + 2) columns (all unknowns plus the scalar plus the equality - * type). The ith row corresponds to the equality "= 0" for the ith dimension - * iterator. The first column gives the equality type (0: no equality, then - * EQTYPE_* -see pprint.h-). At each recursion of pprint, if an equality for - * the current level is found, the corresponding row is updated. Then the - * equality if it exists is used to simplify expressions (e.g. if we have - * "i+1" while we know that "i=2", we simplify it in "3"). At the end of - * the pprint call, the corresponding row is reset to zero. - */ - -CloogEqualities *cloog_equal_alloc(int n, int nb_levels, - int nb_parameters) -{ - int i; - CloogEqualities *equal = ALLOC(CloogEqualities); - - equal->constraints = cloog_constraint_set_from_cloog_matrix( - cloog_matrix_alloc(n, nb_levels + nb_parameters + 1)); - equal->types = ALLOCN(int, n); - for (i = 0; i < n; ++i) - equal->types[i] = EQTYPE_NONE; - return equal; -} - -void cloog_equal_free(CloogEqualities *equal) -{ - cloog_matrix_free(&equal->constraints->M); - free(equal->types); - free(equal); -} - -int cloog_equal_count(CloogEqualities *equal) -{ - return equal->constraints->M.NbRows; -} - -CloogConstraintSet *cloog_equal_constraints(CloogEqualities *equal) -{ - return equal->constraints; -} - - -/** - * cloog_constraint_equal_type function : - * This function returns the type of the equality in the constraint (line) of - * (constraints) for the element (level). An equality is 'constant' iff all - * other factors are null except the constant one. It is a 'pure item' iff - * it is equal or opposite to a single variable or parameter. - * Otherwise it is an 'affine expression'. - * For instance: - * i = -13 is constant, i = j, j = -M are pure items, - * j = 2*M, i = j+1, 2*j = M are affine expressions. - * - * - constraints is the matrix of constraints, - * - level is the column number in equal of the element which is 'equal to', - ** - * - July 3rd 2002: first version, called pprint_equal_isconstant. - * - July 6th 2002: adaptation for the 3 types. - * - June 15th 2005: (debug) expr = domain->Constraint[line] was evaluated - * before checking if line != ONE_TIME_LOOP. Since - * ONE_TIME_LOOP is -1, an invalid read was possible. - * - October 19th 2005: Removal of the once-time-loop specific processing. - */ -static int cloog_constraint_equal_type(CloogConstraint *constraint, int level) -{ - int i, one=0 ; - cloog_int_t *expr; - - expr = *constraint->line; - - if (!cloog_int_is_one(expr[level]) && !cloog_int_is_neg_one(expr[level])) - return EQTYPE_EXAFFINE; - - /* There is only one non null factor, and it must be +1 or -1 for - * iterators or parameters. - */ - for (i = 1;i <= constraint->set->M.NbColumns-2; i++) - if (!cloog_int_is_zero(expr[i]) && (i != level)) { - if ((!cloog_int_is_one(expr[i]) && !cloog_int_is_neg_one(expr[i])) || (one != 0)) - return EQTYPE_EXAFFINE ; - else - one = 1 ; - } - /* if the constant factor is non null, it must be alone. */ - if (one != 0) { - if (!cloog_int_is_zero(expr[constraint->set->M.NbColumns-1])) - return EQTYPE_EXAFFINE ; - } - else - return EQTYPE_CONSTANT ; - - return EQTYPE_PUREITEM ; -} - - -int cloog_equal_type(CloogEqualities *equal, int level) -{ - return equal->types[level-1]; -} - - -/** - * cloog_equal_update function: - * this function updates a matrix of equalities where each row corresponds to - * the equality "=0" of an affine expression such that the entry at column - * "row" (="level") is not zero. This matrix is upper-triangular, except the - * row number "level-1" which has to be updated for the matrix to be triangular. - * This function achieves the processing. - * - equal is the matrix to be updated, - * - level gives the row that has to be updated (it is actually row "level-1"), - * - nb_par is the number of parameters of the program. - ** - * - September 20th 2005: first version. - */ -static void cloog_equal_update(CloogEqualities *equal, int level, int nb_par) -{ int i, j ; - cloog_int_t gcd, factor_level, factor_outer, temp_level, temp_outer; - - cloog_int_init(gcd); - cloog_int_init(temp_level); - cloog_int_init(temp_outer); - cloog_int_init(factor_level); - cloog_int_init(factor_outer); - - /* For each previous level, */ - for (i=level-2;i>=0;i--) - { /* if the corresponding iterator is inside the current equality and is equal - * to something, - */ - if (!cloog_int_is_zero(equal->constraints->M.p[level-1][i+1]) && equal->types[i]) - { /* Compute the Greatest Common Divisor. */ - cloog_int_gcd(gcd, equal->constraints->M.p[level-1][i+1], - equal->constraints->M.p[i][i+1]); - - /* Compute the factors to apply to each row vector element. */ - cloog_int_divexact(factor_level, equal->constraints->M.p[i][i+1], gcd); - cloog_int_divexact(factor_outer, equal->constraints->M.p[level-1][i+1], gcd); - - /* Now update the row 'level'. */ - /* - the iterators, up to level, */ - for (j = 1; j <= level; j++) { - cloog_int_mul(temp_level, factor_level, - equal->constraints->M.p[level-1][j]); - cloog_int_mul(temp_outer, factor_outer, equal->constraints->M.p[i][j]); - cloog_int_sub(equal->constraints->M.p[level-1][j], temp_level, temp_outer); - } - /* - between last useful iterator (level) and the first parameter, the - * matrix is sparse (full of zeroes), we just do nothing there. - * - the parameters and the scalar. - */ - for (j = 0; j < nb_par + 1; j++) { - cloog_int_mul(temp_level,factor_level, - equal->constraints->M.p[level-1] - [equal->constraints->M.NbColumns-j-1]); - cloog_int_mul(temp_outer,factor_outer, - equal->constraints->M.p[i][equal->constraints->M.NbColumns-j-1]); - cloog_int_sub(equal->constraints->M.p[level-1] - [equal->constraints->M.NbColumns-j-1], - temp_level,temp_outer) ; - } - } - } - - /* Normalize (divide by GCD of all elements) the updated equality. */ - cloog_seq_normalize(&(equal->constraints->M.p[level-1][1]), - equal->constraints->M.NbColumns-1); - - cloog_int_clear(gcd); - cloog_int_clear(temp_level); - cloog_int_clear(temp_outer); - cloog_int_clear(factor_level); - cloog_int_clear(factor_outer); -} - - -/** - * cloog_equal_add function: - * This function updates the row (level-1) of the equality matrix (equal) with - * the row that corresponds to the row (line) of the matrix (matrix). - * - equal is the matrix of equalities, - * - matrix is the matrix of constraints, - * - level is the column number in matrix of the element which is 'equal to', - * - line is the line number in matrix of the constraint we want to study, - * - the infos structure gives the user all options on code printing and more. - ** - * - July 2nd 2002: first version. - * - October 19th 2005: Addition of the once-time-loop specific processing. - */ -void cloog_equal_add(CloogEqualities *equal, CloogConstraintSet *constraints, - int level, CloogConstraint *line, int nb_par) -{ - int j; - CloogConstraint *i = cloog_constraint_invalid(); - CloogMatrix *matrix = &constraints->M; - - /* If we are in the case of a loop running once, this means that the equality - * comes from an inequality. Here we find this inequality. - */ - if (!cloog_constraint_is_valid(line)) - { for (i = cloog_constraint_first(constraints); - cloog_constraint_is_valid(i); i = cloog_constraint_next(i)) - if ((!cloog_int_is_zero(i->line[0][0]))&& (!cloog_int_is_zero(i->line[0][level]))) - { line = i ; - - /* Since in once-time-loops, equalities derive from inequalities, we - * may have to offset the values. For instance if we have 2i>=3, the - * equality is in fact i=2. This may happen when the level coefficient is - * not 1 or -1 and the scalar value is not zero. In any other case (e.g., - * if the inequality is an expression including outer loop counters or - * parameters) the once time loop would not have been detected - * because of floord and ceild functions. - */ - if (cloog_int_ne_si(i->line[0][level],1) && - cloog_int_ne_si(i->line[0][level],-1) && - !cloog_int_is_zero(i->line[0][matrix->NbColumns-1])) { - cloog_int_t denominator; - - cloog_int_init(denominator); - cloog_int_abs(denominator, i->line[0][level]); - cloog_int_fdiv_q(i->line[0][matrix->NbColumns-1], - i->line[0][matrix->NbColumns-1], denominator); - cloog_int_set_si(i->line[0][level], cloog_int_sgn(i->line[0][level])); - cloog_int_clear(denominator); - } - - break ; - } - } - assert(cloog_constraint_is_valid(line)); - - /* We update the line of equal corresponding to level: - * - the first element gives the equality type, - */ - equal->types[level-1] = cloog_constraint_equal_type(line, level); - /* - the other elements corresponding to the equality itself - * (the iterators up to level, then the parameters and the scalar). - */ - for (j=1;j<=level;j++) - cloog_int_set(equal->constraints->M.p[level-1][j], line->line[0][j]); - for (j = 0; j < nb_par + 1; j++) - cloog_int_set(equal->constraints->M.p[level-1][equal->constraints->M.NbColumns-j-1], - line->line[0][line->set->M.NbColumns-j-1]); - - if (cloog_constraint_is_valid(i)) - cloog_constraint_release(line); - cloog_equal_update(equal, level, nb_par); -} - - -/** - * cloog_equal_del function : - * This function reset the equality corresponding to the iterator (level) - * in the equality matrix (equal). - * - July 2nd 2002: first version. - */ -void cloog_equal_del(CloogEqualities *equal, int level) -{ - equal->types[level-1] = EQTYPE_NONE; -} - - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - -/** - * Function cloog_constraint_set_normalize: - * This function will modify the constraint system in such a way that when - * there is an equality depending on the element at level 'level', there are - * no more (in)equalities depending on this element. For instance, try - * test/valilache.cloog with options -f 8 -l 9, with and without the call - * to this function. At a given moment, for the level L we will have - * 32*P=L && L>=1 (P is a lower level), this constraint system cannot be - * translated directly into a source code. Thus, we normalize the domain to - * remove L from the inequalities. In our example, this leads to - * 32*P=L && 32*P>=1, that can be transated to the code - * if (P>=1) { L=32*P ; ... }. This function solves the DaeGon Kim bug. - * WARNING: Remember that if there is another call to Polylib after a call to - * this function, we have to recall this function. - * -June 16th 2005: first version (adaptation from URGent June-7th-2005 by - * N. Vasilache). - * - June 21rd 2005: Adaptation for GMP. - * - November 4th 2005: Complete rewriting, simpler and faster. It is no more an - * adaptation from URGent. - */ -void cloog_constraint_set_normalize(CloogConstraintSet *constraints, int level) -{ int ref, i, j ; - cloog_int_t factor_i, factor_ref, temp_i, temp_ref, gcd; - CloogMatrix *matrix = &constraints->M; - - if (matrix == NULL) - return ; - - /* Don't "normalize" the constant term. */ - if (level == matrix->NbColumns-1) - return; - - /* Let us find an equality for the current level that can be propagated. */ - for (ref=0;refNbRows;ref++) - if (cloog_int_is_zero(matrix->p[ref][0]) && !cloog_int_is_zero(matrix->p[ref][level])) { - cloog_int_init(gcd); - cloog_int_init(temp_i); - cloog_int_init(temp_ref); - cloog_int_init(factor_i); - cloog_int_init(factor_ref); - - /* Row "ref" is the reference equality, now let us find a row to simplify.*/ - for (i=ref+1;iNbRows;i++) - if (!cloog_int_is_zero(matrix->p[i][level])) { - /* Now let us set to 0 the "level" coefficient of row "j" using "ref". - * First we compute the factors to apply to each row vector element. - */ - cloog_int_gcd(gcd, matrix->p[ref][level], matrix->p[i][level]); - cloog_int_divexact(factor_i, matrix->p[ref][level], gcd); - cloog_int_divexact(factor_ref, matrix->p[i][level], gcd); - - /* Maybe we are simplifying an inequality: factor_i must not be <0. */ - if (cloog_int_is_neg(factor_i)) { - cloog_int_abs(factor_i, factor_i); - cloog_int_neg(factor_ref, factor_ref); - } - - /* Now update the vector. */ - for (j=1;jNbColumns;j++) { - cloog_int_mul(temp_i, factor_i, matrix->p[i][j]); - cloog_int_mul(temp_ref, factor_ref, matrix->p[ref][j]); - cloog_int_sub(matrix->p[i][j], temp_i, temp_ref); - } - - /* Normalize (divide by GCD of all elements) the updated vector. */ - cloog_seq_normalize(&(matrix->p[i][1]), matrix->NbColumns-1); - } - - cloog_int_clear(gcd); - cloog_int_clear(temp_i); - cloog_int_clear(temp_ref); - cloog_int_clear(factor_i); - cloog_int_clear(factor_ref); - break ; - } -} - - - -/** - * cloog_constraint_set_copy function: - * this functions builds and returns a "hard copy" (not a pointer copy) of a - * CloogMatrix data structure. - * - October 26th 2005: first version. - */ -CloogConstraintSet *cloog_constraint_set_copy(CloogConstraintSet *constraints) -{ int i, j ; - CloogMatrix *copy; - CloogMatrix *matrix = &constraints->M; - - copy = cloog_matrix_alloc(matrix->NbRows, matrix->NbColumns); - - for (i=0;iNbRows;i++) - for (j=0;jNbColumns;j++) - cloog_int_set(copy->p[i][j], matrix->p[i][j]); - - return cloog_constraint_set_from_cloog_matrix(copy); -} - - -/** - * cloog_equal_vector_simplify function: - * this function simplify an affine expression with its coefficients in - * "vector" of length "length" thanks to an equality matrix "equal" that gives - * for some elements of the affine expression an equality with other elements, - * preferably constants. For instance, if the vector contains i+j+3 and the - * equality matrix gives i=n and j=2, the vector is simplified to n+3 and is - * returned in a new vector. - * - vector is the array of affine expression coefficients - * - equal is the matrix of equalities, - * - length is the vector length, - * - level is a level we don't want to simplify (-1 if none), - * - nb_par is the number of parameters of the program. - ** - * - September 20th 2005: first version. - * - November 2nd 2005: (debug) we are simplifying inequalities, thus we are - * not allowed to multiply the vector by a negative - * constant.Problem found after a report of Michael - * Classen. - */ -struct cloog_vec *cloog_equal_vector_simplify(CloogEqualities *equal, cloog_int_t *vector, - int length, int level, int nb_par) -{ int i, j ; - cloog_int_t gcd, factor_vector, factor_equal, temp_vector, temp_equal; - struct cloog_vec *simplified; - - simplified = cloog_vec_alloc(length); - cloog_seq_cpy(simplified->p, vector, length); - - cloog_int_init(gcd); - cloog_int_init(temp_vector); - cloog_int_init(temp_equal); - cloog_int_init(factor_vector); - cloog_int_init(factor_equal); - - /* For each non-null coefficient in the vector, */ - for (i=length-nb_par-2;i>0;i--) - if (i != level) - { /* if the coefficient in not null, and there exists a useful equality */ - if ((!cloog_int_is_zero(simplified->p[i])) && equal->types[i-1]) - { /* Compute the Greatest Common Divisor. */ - cloog_int_gcd(gcd, simplified->p[i], equal->constraints->M.p[i-1][i]); - - /* Compute the factors to apply to each row vector element. */ - cloog_int_divexact(factor_vector, equal->constraints->M.p[i-1][i], gcd); - cloog_int_divexact(factor_equal, simplified->p[i], gcd); - - /* We are simplifying an inequality: factor_vector must not be <0. */ - if (cloog_int_is_neg(factor_vector)) { - cloog_int_abs(factor_vector, factor_vector); - cloog_int_neg(factor_equal, factor_equal); - } - - /* Now update the vector. */ - /* - the iterators, up to the current level, */ - for (j=1;j<=length-nb_par-2;j++) { - cloog_int_mul(temp_vector, factor_vector, simplified->p[j]); - cloog_int_mul(temp_equal, factor_equal, equal->constraints->M.p[i-1][j]); - cloog_int_sub(simplified->p[j], temp_vector, temp_equal); - } - /* - between last useful iterator (i) and the first parameter, the equal - * matrix is sparse (full of zeroes), we just do nothing there. - * - the parameters and the scalar. - */ - for (j = 0; j < nb_par + 1; j++) { - cloog_int_mul(temp_vector, factor_vector, simplified->p[length-1-j]); - cloog_int_mul(temp_equal,factor_equal, - equal->constraints->M.p[i-1][equal->constraints->M.NbColumns-j-1]); - cloog_int_sub(simplified->p[length-1-j],temp_vector,temp_equal) ; - } - } - } - - /* Normalize (divide by GCD of all elements) the updated vector. */ - cloog_seq_normalize(&simplified->p[1], length - 1); - - cloog_int_clear(gcd); - cloog_int_clear(temp_vector); - cloog_int_clear(temp_equal); - cloog_int_clear(factor_vector); - cloog_int_clear(factor_equal); - - return simplified ; -} - - -/** - * cloog_constraint_set_simplify function: - * this function simplify all constraints inside the matrix "matrix" thanks to - * an equality matrix "equal" that gives for some elements of the affine - * constraint an equality with other elements, preferably constants. - * For instance, if a row of the matrix contains i+j+3>=0 and the equality - * matrix gives i=n and j=2, the constraint is simplified to n+3>=0. The - * simplified constraints are returned back inside a new simplified matrix. - * - matrix is the set of constraints to simplify, - * - equal is the matrix of equalities, - * - level is a level we don't want to simplify (-1 if none), - * - nb_par is the number of parameters of the program. - ** - * - November 4th 2005: first version. - */ -CloogConstraintSet *cloog_constraint_set_simplify(CloogConstraintSet *constraints, - CloogEqualities *equal, int level, int nb_par) -{ int i, j, k ; - struct cloog_vec *vector; - CloogMatrix *simplified; - CloogMatrix *matrix = &constraints->M; - - if (matrix == NULL) - return NULL ; - - /* The simplified matrix is such that each row has been simplified thanks - * tho the "equal" matrix. We allocate the memory for the simplified matrix, - * then for each row of the original matrix, we compute the simplified - * vector and we copy its content into the according simplified row. - */ - simplified = cloog_matrix_alloc(matrix->NbRows, matrix->NbColumns); - for (i=0;iNbRows;i++) - { vector = cloog_equal_vector_simplify(equal, matrix->p[i], - matrix->NbColumns, level, nb_par); - for (j=0;jNbColumns;j++) - cloog_int_set(simplified->p[i][j], vector->p[j]); - - cloog_vec_free(vector); - } - - /* After simplification, it may happen that few constraints are the same, - * we remove them here by replacing them with 0=0 constraints. - */ - for (i=0;iNbRows;i++) - for (j=i+1;jNbRows;j++) - { for (k=0;kNbColumns;k++) - if (cloog_int_ne(simplified->p[i][k],simplified->p[j][k])) - break ; - - if (k == matrix->NbColumns) - { for (k=0;kNbColumns;k++) - cloog_int_set_si(simplified->p[j][k],0); - } - } - - return cloog_constraint_set_from_cloog_matrix(simplified); -} - - -/** - * Return clast_expr corresponding to the variable "level" (1 based) in - * the given constraint. - */ -struct clast_expr *cloog_constraint_variable_expr(CloogConstraint *constraint, - int level, CloogNames *names) -{ - int total_dim, nb_iter; - const char *name; - - total_dim = cloog_constraint_total_dimension(constraint); - nb_iter = total_dim - names->nb_parameters; - - if (level <= nb_iter) - name = cloog_names_name_at_level(names, level); - else - name = names->parameters[level - (nb_iter+1)] ; - - return &new_clast_name(name)->expr; -} - - -/** - * Return true if constraint c involves variable v (zero-based). - */ -int cloog_constraint_involves(CloogConstraint *constraint, int v) -{ - return !cloog_int_is_zero(constraint->line[0][1+v]); -} - -int cloog_constraint_is_lower_bound(CloogConstraint *constraint, int v) -{ - return cloog_int_is_pos(constraint->line[0][1+v]); -} - -int cloog_constraint_is_upper_bound(CloogConstraint *constraint, int v) -{ - return cloog_int_is_neg(constraint->line[0][1+v]); -} - -int cloog_constraint_is_equality(CloogConstraint *constraint) -{ - return cloog_int_is_zero(constraint->line[0][0]); -} - -void cloog_constraint_clear(CloogConstraint *constraint) -{ - int k; - - for (k = 1; k <= constraint->set->M.NbColumns - 2; k++) - cloog_int_set_si(constraint->line[0][k], 0); -} - -CloogConstraintSet *cloog_constraint_set_drop_constraint( - CloogConstraintSet *constraints, CloogConstraint *constraint) -{ - cloog_constraint_clear(constraint); - return constraints; -} - -void cloog_constraint_coefficient_get(CloogConstraint *constraint, - int var, cloog_int_t *val) -{ - cloog_int_set(*val, constraint->line[0][1+var]); -} - -void cloog_constraint_coefficient_set(CloogConstraint *constraint, - int var, cloog_int_t val) -{ - cloog_int_set(constraint->line[0][1+var], val); -} - -void cloog_constraint_constant_get(CloogConstraint *constraint, cloog_int_t *val) -{ - cloog_int_set(*val, constraint->line[0][constraint->set->M.NbColumns-1]); -} - -/** - * Copy the coefficient of constraint c into dst in PolyLib order, - * i.e., first the coefficients of the variables, then the coefficients - * of the parameters and finally the constant. - */ -void cloog_constraint_copy_coefficients(CloogConstraint *constraint, - cloog_int_t *dst) -{ - cloog_seq_cpy(dst, constraint->line[0]+1, constraint->set->M.NbColumns-1); -} - -CloogConstraint *cloog_constraint_invalid(void) -{ - return NULL; -} - -int cloog_constraint_is_valid(CloogConstraint *constraint) -{ - return constraint != NULL; -} - - -/** - * Check whether there is any need for the constraint "upper" on - * "level" to get reduced. - * Yes. - */ -int cloog_constraint_needs_reduction(CloogConstraint *upper, int level) -{ - return 1; -} - - -/** - * Create a CloogConstraintSet containing enough information to perform - * a reduction on the upper equality (in this case lower is an invalid - * CloogConstraint) or the pair of inequalities upper and lower - * from within insert_modulo_guard. - * In the PolyLib backend, we return a CloogConstraintSet containting only - * the upper bound. The reduction will not change the stride so there - * will be no need to recompute the bound on the modulo expression. - */ -CloogConstraintSet *cloog_constraint_set_for_reduction(CloogConstraint *upper, - CloogConstraint *lower) -{ - CloogConstraintSet *set; - - set = cloog_constraint_set_from_cloog_matrix( - cloog_matrix_alloc(1, upper->set->M.NbColumns)); - cloog_seq_cpy(set->M.p[0], upper->line[0], set->M.NbColumns); - return set; -} - - -/* Computes x, y and g such that g = gcd(a,b) and a*x+b*y = g */ -static void Euclid(cloog_int_t a, cloog_int_t b, - cloog_int_t *x, cloog_int_t *y, cloog_int_t *g) -{ - cloog_int_t c, d, e, f, tmp; - - cloog_int_init(c); - cloog_int_init(d); - cloog_int_init(e); - cloog_int_init(f); - cloog_int_init(tmp); - cloog_int_abs(c, a); - cloog_int_abs(d, b); - cloog_int_set_si(e, 1); - cloog_int_set_si(f, 0); - while (cloog_int_is_pos(d)) { - cloog_int_tdiv_q(tmp, c, d); - cloog_int_mul(tmp, tmp, f); - cloog_int_sub(e, e, tmp); - cloog_int_tdiv_q(tmp, c, d); - cloog_int_mul(tmp, tmp, d); - cloog_int_sub(c, c, tmp); - cloog_int_swap(c, d); - cloog_int_swap(e, f); - } - cloog_int_set(*g, c); - if (cloog_int_is_zero(a)) - cloog_int_set_si(*x, 0); - else if (cloog_int_is_pos(a)) - cloog_int_set(*x, e); - else cloog_int_neg(*x, e); - if (cloog_int_is_zero(b)) - cloog_int_set_si(*y, 0); - else { - cloog_int_mul(tmp, a, *x); - cloog_int_sub(tmp, c, tmp); - cloog_int_divexact(*y, tmp, b); - } - cloog_int_clear(c); - cloog_int_clear(d); - cloog_int_clear(e); - cloog_int_clear(f); - cloog_int_clear(tmp); -} - -/** - * Reduce the modulo guard expressed by "contraints" using equalities - * found in outer nesting levels (stored in "equal"). - * The modulo guard may be an equality or a pair of inequalities. - * In case of a pair of inequalities, "constraints" only contains the - * upper bound and *bound contains the bound on the - * corresponding modulo expression. The bound is left untouched by - * this function. - */ -CloogConstraintSet *cloog_constraint_set_reduce(CloogConstraintSet *constraints, - int level, CloogEqualities *equal, int nb_par, cloog_int_t *bound) -{ - int i, j, k, len, len2, nb_iter; - struct cloog_vec *line_vector2; - cloog_int_t *line, *line2, val, x, y, g; - - len = constraints->M.NbColumns; - len2 = cloog_equal_total_dimension(equal) + 2; - nb_iter = len - 2 - nb_par; - - cloog_int_init(val); - cloog_int_init(x); - cloog_int_init(y); - cloog_int_init(g); - - line_vector2 = cloog_vec_alloc(len2); - line2 = line_vector2->p; - - line = constraints->M.p[0]; - if (cloog_int_is_pos(line[level])) - cloog_seq_neg(line+1, line+1, len-1); - cloog_int_neg(line[level], line[level]); - assert(cloog_int_is_pos(line[level])); - - for (i = nb_iter; i >= 1; --i) { - if (i == level) - continue; - cloog_int_fdiv_r(line[i], line[i], line[level]); - if (cloog_int_is_zero(line[i])) - continue; - - /* Look for an earlier variable that is also a multiple of line[level] - * and check whether we can use the corresponding affine expression - * to "reduce" the modulo guard, where reduction means that we eliminate - * a variable, possibly at the expense of introducing other variables - * with smaller index. - */ - for (j = level-1; j >= 0; --j) { - CloogConstraint *equal_constraint; - if (cloog_equal_type(equal, j+1) != EQTYPE_EXAFFINE) - continue; - equal_constraint = cloog_equal_constraint(equal, j); - cloog_constraint_coefficient_get(equal_constraint, j, &val); - if (!cloog_int_is_divisible_by(val, line[level])) { - cloog_constraint_release(equal_constraint); - continue; - } - cloog_constraint_coefficient_get(equal_constraint, i-1, &val); - if (cloog_int_is_divisible_by(val, line[level])) { - cloog_constraint_release(equal_constraint); - continue; - } - for (k = j; k > i; --k) { - cloog_constraint_coefficient_get(equal_constraint, k-1, &val); - if (cloog_int_is_zero(val)) - continue; - if (!cloog_int_is_divisible_by(val, line[level])) - break; - } - if (k > i) { - cloog_constraint_release(equal_constraint); - continue; - } - cloog_constraint_coefficient_get(equal_constraint, i-1, &val); - Euclid(val, line[level], &x, &y, &g); - if (!cloog_int_is_divisible_by(val, line[i])) { - cloog_constraint_release(equal_constraint); - continue; - } - cloog_int_divexact(val, line[i], g); - cloog_int_neg(val, val); - cloog_int_mul(val, val, x); - cloog_int_set_si(y, 1); - /* Add (equal->p[j][i])^{-1} * line[i] times the equality */ - cloog_constraint_copy_coefficients(equal_constraint, line2+1); - cloog_seq_combine(line+1, y, line+1, val, line2+1, i); - cloog_seq_combine(line+len-nb_par-1, y, line+len-nb_par-1, - val, line2+len2-nb_par-1, nb_par+1); - cloog_constraint_release(equal_constraint); - break; - } - } - - cloog_vec_free(line_vector2); - - cloog_int_clear(val); - cloog_int_clear(x); - cloog_int_clear(y); - cloog_int_clear(g); - - /* Make sure the line is not inverted again in the calling function. */ - cloog_int_neg(line[level], line[level]); - - return constraints; -} - -CloogConstraint *cloog_constraint_first(CloogConstraintSet *constraints) -{ - CloogConstraint *c; - if (constraints->M.NbRows == 0) - return cloog_constraint_invalid(); - c = ALLOC(CloogConstraint); - c->set = constraints; - c->line = &constraints->M.p[0]; - return c; -} - -CloogConstraint *cloog_constraint_next(CloogConstraint *constraint) -{ - constraint->line++; - if (constraint->line == constraint->set->M.p + constraint->set->M.NbRows) { - cloog_constraint_release(constraint); - return NULL; - } - return constraint; -} - -CloogConstraint *cloog_constraint_copy(CloogConstraint *constraint) -{ - CloogConstraint *c = ALLOC(CloogConstraint); - c->set = constraint->set; - c->line = constraint->line; - return c; -} - -void cloog_constraint_release(CloogConstraint *constraint) -{ - free(constraint); -} - -int cloog_constraint_set_foreach_constraint(CloogConstraintSet *constraints, - int (*fn)(CloogConstraint *constraint, void *user), void *user) -{ - CloogConstraint *c; - - for (c = cloog_constraint_first(constraints); - cloog_constraint_is_valid(c); c = cloog_constraint_next(c)) - if (fn(c, user) < 0) { - cloog_constraint_release(c); - return -1; - } - - return 0; -} - -CloogConstraint *cloog_equal_constraint(CloogEqualities *equal, int j) -{ - CloogConstraint *c = ALLOC(CloogConstraint); - c->set = equal->constraints; - c->line = &equal->constraints->M.p[j]; - return c; -} diff --git a/cloog-0.17.0/source/mp_get_memory_functions.c b/cloog-0.17.0/source/mp_get_memory_functions.c deleted file mode 100644 index e14e336..0000000 --- a/cloog-0.17.0/source/mp_get_memory_functions.c +++ /dev/null @@ -1,14 +0,0 @@ -#include - -void mp_get_memory_functions( - void *(**alloc_func_ptr) (size_t), - void *(**realloc_func_ptr) (void *, size_t, size_t), - void (**free_func_ptr) (void *, size_t)) -{ - if (alloc_func_ptr) - *alloc_func_ptr = __gmp_allocate_func; - if (realloc_func_ptr) - *realloc_func_ptr = __gmp_reallocate_func; - if (free_func_ptr) - *free_func_ptr = __gmp_free_func; -} diff --git a/cloog-0.17.0/source/names.c b/cloog-0.17.0/source/names.c deleted file mode 100644 index 20cadcc..0000000 --- a/cloog-0.17.0/source/names.c +++ /dev/null @@ -1,526 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** names.c ** - **-------------------------------------------------------------------** - ** First version: august 1st 2002 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2002-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ -/* CAUTION: the english used for comments is probably the worst you ever read, - * please feel free to correct and improve it ! - */ - - -# include -# include -# include -# include "../include/cloog/cloog.h" - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ - - -/** - * cloog_names_print function: - * this function is a human-friendly way to display the CloogNames data - * structure, it shows all the different fields and includes an indentation - * level (level) in order to work with others print_structure functions. - * - July 1st 2005: first version based on the old cloog_names_print function, - * it was the first modification in this file since two years ! - */ -void cloog_names_print_structure(FILE * file, CloogNames * names, int level) -{ int i ; - - /* Go to the right level. */ - for (i=0; inb_scalars) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the scalar iterators. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - if (names->nb_scalars > 0) - { fprintf(file,"+-- Scalar iterator strings:") ; - for (i=0;inb_scalars;i++) - fprintf(file," %s",names->scalars[i]) ; - fprintf(file,"\n") ; - } - else - fprintf(file,"+-- No scalar string\n") ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the scattering dimension number. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - fprintf(file,"Scattering dimension number: %d\n",names->nb_scattering) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the scattering iterators. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - if (names->nb_scattering > 0) - { fprintf(file,"+-- Scattering strings ----:") ; - for (i=0;inb_scattering;i++) - fprintf(file," %s",names->scattering[i]) ; - fprintf(file,"\n") ; - } - else - fprintf(file,"+-- No scattering string\n") ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the iterator number. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - fprintf(file,"Iterator number -----------: %d\n",names->nb_iterators) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the iterators. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - if (names->nb_iterators > 0) - { fprintf(file,"+-- Iterator strings ------:") ; - for (i=0;inb_iterators;i++) - fprintf(file," %s",names->iterators[i]) ; - fprintf(file,"\n") ; - } - else - fprintf(file,"+-- No iterators\n") ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the parameter number. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - fprintf(file,"Parameter number ----------: %d\n",names->nb_parameters) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the parameters. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - if (names->nb_parameters > 0) - { fprintf(file,"+-- Parameter strings -----:") ; - for (i=0;inb_parameters;i++) - fprintf(file," %s",names->parameters[i]) ; - fprintf(file,"\n") ; - } - else - fprintf(file,"No parameters\n") ; - - } - else - fprintf(file,"+-- No CloogNames\n") ; - fprintf(file, "Number of active references: %d\n", names->references); -} - - -/** - * cloog_names_print function: - * This function prints the content of a CloogNames structure (names) into a - * file (file, possibly stdout). - * - July 1st 2005: Now this function is only a frontend to - * cloog_program_print_structure, with a quite better - * human-readable representation. - */ -void cloog_names_print(FILE * file, CloogNames * names) -{ cloog_names_print_structure(file,names,0) ; -} - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ - - -/** - * cloog_names_free function: - * This function decrements the number of active references to - * a CloogNames structure and frees the allocated memory for this structure - * if the count drops to zero. - */ -void cloog_names_free(CloogNames * names) -{ int i ; - - if (--names->references) - return; - - if (names->scalars != NULL) - { for (i=0;inb_scalars;i++) - free(names->scalars[i]) ; - free(names->scalars) ; - } - - if (names->scattering != NULL) - { for (i=0;inb_scattering;i++) - free(names->scattering[i]) ; - free(names->scattering) ; - } - - if (names->iterators != NULL) - { for (i=0;inb_iterators;i++) - free(names->iterators[i]) ; - free(names->iterators) ; - } - - if (names->parameters != NULL) - { for (i=0;inb_parameters;i++) - free(names->parameters[i]) ; - free(names->parameters) ; - } - free(names) ; -} - - -/** - * cloog_names_copy function: - * As usual in CLooG, "copy" means incrementing the reference count. - */ -CloogNames *cloog_names_copy(CloogNames *names) -{ - names->references++; - return names; -} - - -/****************************************************************************** - * Reading functions * - ******************************************************************************/ - - -/** - * cloog_names_read_strings function: - * This function reads names data from a file (file, possibly stdin). It first - * reads the naming option to know if whether it can read the names from the - * file. If not, NULL is returned. Otherwise, the names are stored - * into an array of strings, and a pointer to this array is returned. - * - nb_items is the number of names the function will have to read if the - * naming option is set to read. - */ -char ** cloog_names_read_strings(FILE *file, int nb_items) -{ int i, option, n ; - char s[MAX_STRING], str[MAX_STRING], * c, **names = NULL; - - /* We first read name option. */ - while (fgets(s,MAX_STRING,file) == 0) ; - while ((*s=='#' || *s=='\n') || (sscanf(s," %d",&option)<1)) - fgets(s,MAX_STRING,file) ; - - /* If there is no item to read, then return NULL. */ - if (nb_items == 0) - return NULL ; - - /* If option is to read them in the file, then we do it and put them into - * the array. - */ - if (option) - { /* Memory allocation. */ - names = (char **)malloc(nb_items*sizeof(char *)) ; - if (names == NULL) - cloog_die("memory overflow.\n"); - for (i=0;inb_scalars = 0 ; - names->nb_scattering = 0 ; - names->nb_iterators = 0 ; - names->nb_parameters = 0 ; - names->scalars = NULL ; - names->scattering = NULL ; - names->iterators = NULL ; - names->parameters = NULL ; - names->references = 1; - - return names ; -} - - -/** - * cloog_names_alloc function: - * This function allocates the memory space for a CloogNames structure and - * sets its fields with those given as input. Then it returns a pointer to the - * allocated space. - * - July 7th 2005: first version. - * - September 11th 2005: addition of both scalar and scattering informations. - * - November 21th 2005: use of cloog_names_malloc. - */ -CloogNames * cloog_names_alloc() -{ CloogNames * names ; - - /* Memory allocation for the CloogNames structure. */ - names = cloog_names_malloc() ; - - names->nb_scalars = 0; - names->nb_scattering = 0; - names->nb_iterators = 0; - names->nb_parameters = 0; - names->scalars = NULL; - names->scattering = NULL; - names->iterators = NULL; - names->parameters = NULL; - - return names ; -} - - -/** - * cloog_names_generate_items function: - * This function returns a pointer to an array of strings with entries set - * based on the function's parameters. - * - nb_items will be the number of entries in the string array. - * - prefix is the name prefix of each item or NULL. - * If not NULL, then the remainder of the name will be an integer - * in the range [0, nb_items-1]. - * - first_item is the name of the first item (if prefix == NULL), - * the nb_items-1 following items will be the nb_items-1 - * following letters in ASCII code. - ** - * - September 9th 2002 : first version, extracted from cloog_names_generate. - */ -char ** cloog_names_generate_items(int nb_items, char * prefix, char first_item) -{ int i ; - char ** names ; - - if (nb_items == 0) - return NULL ; - - names = (char **)malloc(nb_items*sizeof(char *)) ; - if (names == NULL) - cloog_die("memory overflow.\n"); - for (i=0;inb_scalars = nb_scalars ; - names->nb_scattering = nb_scattering ; - names->nb_parameters = nb_parameters ; - names->nb_iterators = nb_iterators ; - names->scalars = cloog_names_generate_items(nb_scalars, NULL,first_s); - names->scattering = cloog_names_generate_items(nb_scattering,NULL,first_t); - names->parameters = cloog_names_generate_items(nb_parameters,NULL,first_p); - names->iterators = cloog_names_generate_items(nb_iterators, NULL,first_i); - - return names ; -} - - -/* Lastly we update the CLoogNames structure: the iterators corresponding to - * scalar dimensions have to be removed since these dimensions have been - * erased and do not need to be print. We copy all the iterator names except - * the scalar ones in a new string array. - * - September 12th 2005: first version. - */ -void cloog_names_scalarize(CloogNames * names, int nb_scattdims, int * scaldims) -{ int nb_scalars, nb_scattering, i, current_scalar, current_scattering ; - char ** scalars, ** scattering ; - - if (!nb_scattdims || (scaldims == NULL)) - return ; - - nb_scalars = 0 ; - for (i=0;inb_scattering - nb_scalars ; - scattering = (char **)malloc(nb_scattering * sizeof(char *)) ; - if (scattering == NULL) - cloog_die("memory overflow.\n"); - scalars = (char **)malloc(nb_scalars * sizeof(char *)) ; - if (scalars == NULL) - cloog_die("memory overflow.\n"); - - current_scalar = 0 ; - current_scattering = 0 ; - for (i=0;iscattering[i] ; - current_scattering ++ ; - } - else - { scalars[current_scalar] = names->scattering[i] ; - current_scalar ++ ; - } - } - - free(names->scattering) ; - names->scattering = scattering ; - names->scalars = scalars ; - names->nb_scattering = nb_scattering ; - names->nb_scalars = nb_scalars ; -} - -/** - * Return the name at a given level (starting at one). - * May be a scattering dimension or an iterator of the original domain. - */ -const char *cloog_names_name_at_level(CloogNames *names, int level) -{ - if (level <= names->nb_scattering) - return names->scattering[level - 1]; - else - return names->iterators[level - names->nb_scattering - 1]; -} diff --git a/cloog-0.17.0/source/options.c b/cloog-0.17.0/source/options.c deleted file mode 100644 index ca7f2fa..0000000 --- a/cloog-0.17.0/source/options.c +++ /dev/null @@ -1,521 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** options.c ** - **-------------------------------------------------------------------** - ** First version: april 19th 2003 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ - - -#include -# include -# include -# include -# include "../include/cloog/cloog.h" - -#ifdef OSL_SUPPORT -#include -#endif - - -/****************************************************************************** - * Error reporting functions * - ******************************************************************************/ - -void cloog_vmsg(CloogOptions *options, enum cloog_msg_type type, - const char *msg, va_list ap) -{ - const char *type_msg; - - if (options && options->quiet && - (type == CLOOG_WARNING || type == CLOOG_INFO)) - return; - - switch(type) { - case CLOOG_WARNING: - type_msg = "WARNING"; - break; - case CLOOG_INFO: - type_msg = "INFO"; - break; - case CLOOG_ERROR: - default: - type_msg = "ERROR"; - break; - } - fprintf(stderr, "[CLooG] %s: ", type_msg); - vfprintf(stderr, msg, ap); -} - -/** - * Print message to stderr. - * @param msg printf format string - */ -void cloog_msg(CloogOptions *options, enum cloog_msg_type type, - const char *msg, ...) -{ - va_list args; - - va_start(args, msg); - cloog_vmsg(options, type, msg, args); - va_end(args); -} - -/** - * Print error message to stderr and exit. - * @param msg printf format string - */ -void cloog_die(const char *msg, ...) -{ - va_list args; - - va_start(args, msg); - cloog_vmsg(NULL, CLOOG_ERROR, msg, args); - va_end(args); - exit(1); -} - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ - - -/** - * cloog_option_print function: - * This function prints the content of a CloogOptions structure (program) into - * a file (foo, possibly stdout). - * - April 19th 2003: first version. - */ -void cloog_options_print(FILE * foo, CloogOptions * options) -{ fprintf(foo,"Options:\n") ; - fprintf(foo,"OPTIONS FOR LOOP GENERATION\n") ; - fprintf(foo,"l = %3d,\n",options->l) ; - fprintf(foo,"f = %3d,\n",options->f) ; - fprintf(foo,"stop = %3d,\n",options->stop) ; - fprintf(foo,"strides = %3d,\n",options->strides) ; - fprintf(foo,"sh = %3d,\n",options->sh); - fprintf(foo,"OPTIONS FOR PRETTY PRINTING\n") ; - fprintf(foo,"esp = %3d,\n",options->esp) ; - fprintf(foo,"fsp = %3d,\n",options->fsp) ; - fprintf(foo,"otl = %3d.\n",options->otl) ; - fprintf(foo,"block = %3d.\n",options->block) ; - fprintf(foo,"compilable = %3d.\n",options->compilable) ; - fprintf(foo,"callable = %3d.\n",options->callable) ; - fprintf(foo,"MISC OPTIONS\n") ; - fprintf(foo,"name = %3s.\n", options->name); - fprintf(foo,"openscop = %3d.\n", options->openscop); - if (options->scop != NULL) - fprintf(foo,"scop = (present but not printed).\n"); - else - fprintf(foo,"scop = NULL.\n"); - fprintf(foo,"UNDOCUMENTED OPTIONS FOR THE AUTHOR ONLY\n") ; - fprintf(foo,"leaks = %3d.\n",options->leaks) ; - fprintf(foo,"backtrack = %3d.\n",options->backtrack); - fprintf(foo,"override = %3d.\n",options->override) ; - fprintf(foo,"structure = %3d.\n",options->structure) ; - fprintf(foo,"noscalars = %3d.\n",options->noscalars) ; - fprintf(foo,"noblocks = %3d.\n",options->noblocks) ; - fprintf(foo,"nosimplify = %3d.\n",options->nosimplify) ; -} - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ - - -/** - * cloog_options_free function: - * This function frees the allocated memory for a CloogOptions structure. - * - April 19th 2003: first version. - */ -void cloog_options_free(CloogOptions *options) -{ -#ifdef OSL_SUPPORT - if (options->scop != NULL) { - osl_scop_free(options->scop); - } -#endif - free(options); -} - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - - -/** - * cloog_options_help function: - * This function displays the quick help when the user set the option -help - * while calling cloog. Prints are cutted to respect the 509 characters - * limitation of the ISO C 89 compilers. - * - August 5th 2002: first version. - */ -void cloog_options_help() -{ printf( - "Usage: cloog [ options | file ] ...\n" - "Options for code generation:\n" - " -l Last loop depth to optimize (-1: infinity)\n" - " (default setting: -1).\n" - " -f First loop depth to start loop separation (-1: " - "infinity)\n (default setting: 1).\n") ; - printf( - " -stop Loop depth to stop code generation (-1: infinity)" - "\n (default setting: -1).\n" - " -strides Handle non-unit strides (1) or not (0)\n" - " (default setting: 0).\n" - " -first-unroll First loop dimension to unroll (-1: no unrolling)\n"); - printf( - "\nOptions for pretty printing:\n" - " -otl Simplify loops running one time (1) or not (0)\n" - " (default setting: 1).\n") ; - printf( - " -esp Allow complex equalities spreading (1) or not (0)\n" - " (default setting: 0).\n"); - printf( - " -fsp First level to begin the spreading\n" - " (default setting: 1).\n" - " -block Make a new statement block per iterator in C\n" - " programs (1) or not (0) (default setting: 0).\n") ; - printf( - " -compilable Compilable code by using preprocessor (not 0) or" - "\n not (0), number being the value of the parameters" - "\n (default setting: 0).\n" - " -callable Testable code by using preprocessor (not 0) or" - "\n not (0) (default setting: 0).\n"); - printf( - "\nGeneral options:\n" - " -o Name of the output file; 'stdout' is a special\n" - " value: when used, output is standard output\n" - " (default setting: stdout).\n" -#ifdef OSL_SUPPORT - " -openscop Input file has OpenScop format.\n" -#endif - " -v, --version Display the version information (and more).\n" - " -q, --quiet Don't print any informational messages.\n" - " -h, --help Display this information.\n\n") ; - printf( - "The special value 'stdin' for 'file' makes CLooG to read data on\n" - "standard input.\n\n" - "For bug reporting or any suggestions, please send an email to the author\n" - ".\n") ; -} - - -/** - * cloog_options_version function: - * This function displays some version informations when the user set the - * option -version while calling cloog. Prints are cutted to respect the 509 - * characters limitation of the ISO C 89 compilers. - * - August 5th 2002: first version. - */ -void cloog_options_version() -{ printf("%s The Chunky Loop Generator\n", cloog_version()); - printf( - "-----\n" - "This is a loop generator for scanning Z-polyhedra. It is based on the " - "work of\nF. Quillere and C. Bastoul on high level code generation and of " - "the PolyLib Team\non polyhedral computation. This program is distributed " - "under the terms of the\nGNU Lesser General Public License " - "(details at http://www.gnu.org/licenses/lgpl-2.1.html).\n" - "-----\n") ; - printf( - "It would be fair to refer the following paper in any publication " - "resulting from\nthe use of this software or its library:\n" - "@InProceedings{Bas04,\n" - "author = {Cedric Bastoul},\n" - "title = {Code Generation in the Polyhedral Model Is Easier Than You " - "Think},\n" - "booktitle = {PACT'13 IEEE International Conference on Parallel " - "Architecture\n and Compilation Techniques},\n" - "pages = {7--16},\n" - "month = {september},\n" - "year = 2004,\n" - "address = {Juan-les-Pins}\n" - "}\n" - "-----\n" - "For any information, please ask the author at " - ".\n") ; -} - - -/** - * cloog_options_set function: - * This function sets the value of an option thanks to the user's calling line. - * - option is the value to set, - * - argc are the elements of the user's calling line, - * - number is the number of the element corresponding to the considered option, - * this function adds 1 to number to pass away the option value. - ** - * - August 5th 2002: first version. - * - June 29th 2003: (debug) lack of argument now detected. - */ -void cloog_options_set(int * option, int argv, char ** argc, int * number) -{ char ** endptr ; - - if (*number+1 >= argv) - cloog_die("an option lacks of argument.\n"); - - endptr = NULL ; - *option = strtol(argc[*number+1],endptr,10) ; - if (endptr != NULL) - cloog_die("value '%s' for option '%s' is not valid.\n", - argc[*number+1], argc[*number]); - *number = *number + 1 ; -} - - -/** - * cloog_options_malloc function: - * This functions allocate the memory space for a CLoogOptions structure and - * fill its fields with the defaults values. It returns a pointer to the - * allocated CloogOptions structure. - * - April 19th 2003: first version. - * - November 21th 2005: name changed (before it was cloog_options_init). - */ -CloogOptions *cloog_options_malloc(CloogState *state) -{ CloogOptions * options ; - - /* Memory allocation for the CloogOptions structure. */ - options = (CloogOptions *)malloc(sizeof(CloogOptions)) ; - if (options == NULL) - cloog_die("memory overflow.\n"); - - options->state = state; - - /* We set the various fields with default values. */ - /* OPTIONS FOR LOOP GENERATION */ - options->l = -1 ; /* Last level to optimize: infinity. */ - options->f = 1 ; /* First level to optimize: the first. */ - options->stop = -1 ; /* Generate all the code. */ - options->strides = 0 ; /* Generate a code with unit strides. */ - options->sh = 0; /* Compute actual convex hull. */ - options->first_unroll = -1; /* First level to unroll: none. */ - options->name = ""; - /* OPTIONS FOR PRETTY PRINTING */ - options->esp = 1 ; /* We want Equality SPreading.*/ - options->fsp = 1 ; /* The First level to SPread is the first. */ - options->otl = 1 ; /* We want to fire One Time Loops. */ - options->block = 0 ; /* We don't want to force statement blocks. */ - options->compilable = 0 ; /* No compilable code. */ - options->callable = 0 ; /* No callable code. */ - options->quiet = 0; /* Do print informational messages. */ - options->save_domains = 0; /* Don't save domains. */ - /* MISC OPTIONS */ - options->language = CLOOG_LANGUAGE_C; /* The default output language is C. */ - options->openscop = 0 ; /* The input file has not the OpenScop format.*/ - options->scop = NULL;/* No default SCoP.*/ - /* UNDOCUMENTED OPTIONS FOR THE AUTHOR ONLY */ - options->leaks = 0 ; /* I don't want to print allocation statistics.*/ - options->backtrack = 0; /* Perform backtrack in Quillere's algorithm.*/ - options->override = 0 ; /* I don't want to override CLooG decisions.*/ - options->structure = 0 ; /* I don't want to print internal structure.*/ - options->noblocks = 0 ; /* I do want to make statement blocks.*/ - options->noscalars = 0 ; /* I do want to use scalar dimensions.*/ - options->nosimplify = 0 ; /* I do want to simplify polyhedra.*/ - - return options ; -} - - - -/** - * cloog_options_read function: - * This functions reads all the options and the input/output files thanks - * the the user's calling line elements (in argc). It fills a CloogOptions - * structure and the FILE structure corresponding to input and output files. - * - August 5th 2002: first version. - * - April 19th 2003: now in options.c and support of the CloogOptions structure. - */ -void cloog_options_read(CloogState *state, int argc, char **argv, - FILE **input, FILE **output, CloogOptions **options) -{ int i, infos=0, input_is_set=0 ; - - /* CloogOptions structure allocation and initialization. */ - *options = cloog_options_malloc(state); - - /* The default output is the standard output. */ - *output = stdout ; - - for (i=1;il,argc,argv,&i) ; - else - if (strcmp(argv[i],"-f") == 0) - cloog_options_set(&(*options)->f,argc,argv,&i) ; - else - if (strcmp(argv[i],"-stop") == 0) - cloog_options_set(&(*options)->stop,argc,argv,&i) ; - else - if (strcmp(argv[i],"-strides") == 0) - cloog_options_set(&(*options)->strides,argc,argv,&i) ; - else if (strcmp(argv[i],"-sh") == 0) - cloog_options_set(&(*options)->sh,argc,argv,&i) ; - else if (!strcmp(argv[i], "-first-unroll")) - cloog_options_set(&(*options)->first_unroll, argc, argv, &i); - else - if (strcmp(argv[i],"-otl") == 0) - cloog_options_set(&(*options)->otl,argc,argv,&i) ; - else - if (strcmp(argv[i],"-openscop") == 0) { -#ifdef OSL_SUPPORT - (*options)->openscop = 1 ; -#else - cloog_die("CLooG has not been compiled with OpenScop support.\n"); -#endif - } - else - if (strcmp(argv[i],"-esp") == 0) - cloog_options_set(&(*options)->esp,argc,argv,&i) ; - else - if (strcmp(argv[i],"-fsp") == 0) - cloog_options_set(&(*options)->fsp,argc,argv,&i) ; - else - if (strcmp(argv[i],"-block") == 0) - cloog_options_set(&(*options)->block,argc,argv,&i) ; - else - if (strcmp(argv[i],"-compilable") == 0) - cloog_options_set(&(*options)->compilable, argc, argv, &i); - else if (strcmp(argv[i], "-callable") == 0) - cloog_options_set(&(*options)->callable, argc, argv, &i); - else - if (strcmp(argv[i],"-loopo") == 0) /* Special option for the LooPo team ! */ - { (*options)->esp = 0 ; - (*options)->block = 1 ; - } - else - if (strcmp(argv[i],"-bipbip") == 0)/* Special option for the author only !*/ - (*options)->backtrack = 0; - else - if (strcmp(argv[i],"-leaks") == 0) - (*options)->leaks = 1 ; - else - if (strcmp(argv[i],"-nobacktrack") == 0) - (*options)->backtrack = 0; - else if (strcmp(argv[i], "-backtrack") == 0) - (*options)->backtrack = 1; - else - if (strcmp(argv[i],"-override") == 0) - (*options)->override = 1 ; - else - if (strcmp(argv[i],"-noblocks") == 0) - (*options)->noblocks = 1 ; - else - if (strcmp(argv[i],"-noscalars") == 0) - (*options)->noscalars = 1 ; - else - if (strcmp(argv[i],"-nosimplify") == 0) - (*options)->nosimplify = 1 ; - else - if ((strcmp(argv[i],"-struct") == 0) || (strcmp(argv[i],"-structure") == 0)) - (*options)->structure = 1 ; - else - if ((strcmp(argv[i],"--help") == 0) || (strcmp(argv[i],"-h") == 0)) - { cloog_options_help() ; - infos = 1 ; - } - else - if ((strcmp(argv[i],"--version") == 0) || (strcmp(argv[i],"-v") == 0)) - { cloog_options_version() ; - infos = 1 ; - } else if ((strcmp(argv[i],"--quiet") == 0) || (strcmp(argv[i],"-q") == 0)) - (*options)->quiet = 1; - else - if (strcmp(argv[i],"-o") == 0) - { if (i+1 >= argc) - cloog_die("no output name for -o option.\n"); - - /* stdout is a special value, when used, we set output to standard - * output. - */ - if (strcmp(argv[i+1],"stdout") == 0) - *output = stdout ; - else - { *output = fopen(argv[i+1],"w") ; - if (*output == NULL) - cloog_die("can't create output file %s.\n", argv[i+1]); - } - i ++ ; - } - else - cloog_msg(*options, CLOOG_WARNING, "unknown %s option.\n", argv[i]); - } - else - { if (!input_is_set) - { input_is_set = 1 ; - (*options)->name = argv[i] ; - /* stdin is a special value, when used, we set input to standard input. */ - if (strcmp(argv[i],"stdin") == 0) - *input = stdin ; - else - { *input = fopen(argv[i],"r") ; - if (*input == NULL) - cloog_die("%s file does not exist.\n", argv[i]); - } - } - else - cloog_die("multiple input files.\n"); - } - if (!input_is_set) - { if (!infos) - cloog_die("no input file (-h for help).\n"); - exit(1) ; - } -} - -#ifdef OSL_SUPPORT -/** - * This function extracts CLooG option values from an OpenScop scop and - * updates an existing CloogOption structure with those values. If the - * options were already set, they are updated without warning. - * \param[in] scop Input Scop. - * \param[in,out] options CLooG options to be updated. - */ -void cloog_options_copy_from_osl_scop(osl_scop_p scop, - CloogOptions *options) { - if (!options) - cloog_die("Options must be provided.\n"); - - if (scop) { - /* Extract the language. */ - if (!strcmp(scop->language, "FORTRAN")) - options->language = CLOOG_LANGUAGE_FORTRAN; - else - options->language = CLOOG_LANGUAGE_C; - - /* Store the input SCoP in the option structure. */ - options->scop = scop; - } -} -#endif - diff --git a/cloog-0.17.0/source/pprint.c b/cloog-0.17.0/source/pprint.c deleted file mode 100644 index 9c7f1d4..0000000 --- a/cloog-0.17.0/source/pprint.c +++ /dev/null @@ -1,493 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** pprint.c ** - **-------------------------------------------------------------------** - ** First version: october 26th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ -/* CAUTION: the english used for comments is probably the worst you ever read, - * please feel free to correct and improve it ! - */ - -/* June 22nd 2005: General adaptation for GMP. - * October 26th 2005: General adaptation from CloogDomain to Matrix data - * structure for all constraint systems. - * October 27th 2005: General adaptation from CloogEqual to Matrix data - * structure for equality spreading. - */ - -# include -# include -# include -#include -# include "../include/cloog/cloog.h" - -#ifdef OSL_SUPPORT -#include -#include -#include -#include -#endif - - -static void pprint_name(FILE *dst, struct clast_name *n); -static void pprint_term(struct cloogoptions *i, FILE *dst, struct clast_term *t); -static void pprint_sum(struct cloogoptions *opt, - FILE *dst, struct clast_reduction *r); -static void pprint_binary(struct cloogoptions *i, - FILE *dst, struct clast_binary *b); -static void pprint_minmax_f(struct cloogoptions *info, - FILE *dst, struct clast_reduction *r); -static void pprint_minmax_c(struct cloogoptions *info, - FILE *dst, struct clast_reduction *r); -static void pprint_reduction(struct cloogoptions *i, - FILE *dst, struct clast_reduction *r); -static void pprint_expr(struct cloogoptions *i, FILE *dst, struct clast_expr *e); -static void pprint_equation(struct cloogoptions *i, - FILE *dst, struct clast_equation *eq); -static void pprint_assignment(struct cloogoptions *i, FILE *dst, - struct clast_assignment *a); -static void pprint_user_stmt(struct cloogoptions *options, FILE *dst, - struct clast_user_stmt *u); -static void pprint_guard(struct cloogoptions *options, FILE *dst, int indent, - struct clast_guard *g); -static void pprint_for(struct cloogoptions *options, FILE *dst, int indent, - struct clast_for *f); -static void pprint_stmt_list(struct cloogoptions *options, FILE *dst, int indent, - struct clast_stmt *s); - - -void pprint_name(FILE *dst, struct clast_name *n) -{ - fprintf(dst, "%s", n->name); -} - -/** - * This function returns a string containing the printing of a value (possibly - * an iterator or a parameter with its coefficient or a constant). - * - val is the coefficient or constant value, - * - name is a string containing the name of the iterator or of the parameter, - */ -void pprint_term(struct cloogoptions *i, FILE *dst, struct clast_term *t) -{ - if (t->var) { - int group = t->var->type == clast_expr_red && - ((struct clast_reduction*) t->var)->n > 1; - if (cloog_int_is_one(t->val)) - ; - else if (cloog_int_is_neg_one(t->val)) - fprintf(dst, "-"); - else { - cloog_int_print(dst, t->val); - fprintf(dst, "*"); - } - if (group) - fprintf(dst, "("); - pprint_expr(i, dst, t->var); - if (group) - fprintf(dst, ")"); - } else - cloog_int_print(dst, t->val); -} - -void pprint_sum(struct cloogoptions *opt, FILE *dst, struct clast_reduction *r) -{ - int i; - struct clast_term *t; - - assert(r->n >= 1); - assert(r->elts[0]->type == clast_expr_term); - t = (struct clast_term *) r->elts[0]; - pprint_term(opt, dst, t); - - for (i = 1; i < r->n; ++i) { - assert(r->elts[i]->type == clast_expr_term); - t = (struct clast_term *) r->elts[i]; - if (cloog_int_is_pos(t->val)) - fprintf(dst, "+"); - pprint_term(opt, dst, t); - } -} - -void pprint_binary(struct cloogoptions *i, FILE *dst, struct clast_binary *b) -{ - const char *s1 = NULL, *s2 = NULL, *s3 = NULL; - int group = b->LHS->type == clast_expr_red && - ((struct clast_reduction*) b->LHS)->n > 1; - if (i->language == CLOOG_LANGUAGE_FORTRAN) { - switch (b->type) { - case clast_bin_fdiv: - s1 = "FLOOR(REAL(", s2 = ")/REAL(", s3 = "))"; - break; - case clast_bin_cdiv: - s1 = "CEILING(REAL(", s2 = ")/REAL(", s3 = "))"; - break; - case clast_bin_div: - if (group) - s1 = "(", s2 = ")/", s3 = ""; - else - s1 = "", s2 = "/", s3 = ""; - break; - case clast_bin_mod: - s1 = "MOD(", s2 = ", ", s3 = ")"; - break; - } - } else { - switch (b->type) { - case clast_bin_fdiv: - s1 = "floord(", s2 = ",", s3 = ")"; - break; - case clast_bin_cdiv: - s1 = "ceild(", s2 = ",", s3 = ")"; - break; - case clast_bin_div: - if (group) - s1 = "(", s2 = ")/", s3 = ""; - else - s1 = "", s2 = "/", s3 = ""; - break; - case clast_bin_mod: - if (group) - s1 = "(", s2 = ")%", s3 = ""; - else - s1 = "", s2 = "%", s3 = ""; - break; - } - } - fprintf(dst, "%s", s1); - pprint_expr(i, dst, b->LHS); - fprintf(dst, "%s", s2); - cloog_int_print(dst, b->RHS); - fprintf(dst, "%s", s3); -} - -void pprint_minmax_f(struct cloogoptions *info, FILE *dst, struct clast_reduction *r) -{ - int i; - if (r->n == 0) - return; - fprintf(dst, r->type == clast_red_max ? "MAX(" : "MIN("); - pprint_expr(info, dst, r->elts[0]); - for (i = 1; i < r->n; ++i) { - fprintf(dst, ","); - pprint_expr(info, dst, r->elts[i]); - } - fprintf(dst, ")"); -} - -void pprint_minmax_c(struct cloogoptions *info, FILE *dst, struct clast_reduction *r) -{ - int i; - for (i = 1; i < r->n; ++i) - fprintf(dst, r->type == clast_red_max ? "max(" : "min("); - if (r->n > 0) - pprint_expr(info, dst, r->elts[0]); - for (i = 1; i < r->n; ++i) { - fprintf(dst, ","); - pprint_expr(info, dst, r->elts[i]); - fprintf(dst, ")"); - } -} - -void pprint_reduction(struct cloogoptions *i, FILE *dst, struct clast_reduction *r) -{ - switch (r->type) { - case clast_red_sum: - pprint_sum(i, dst, r); - break; - case clast_red_min: - case clast_red_max: - if (r->n == 1) { - pprint_expr(i, dst, r->elts[0]); - break; - } - if (i->language == CLOOG_LANGUAGE_FORTRAN) - pprint_minmax_f(i, dst, r); - else - pprint_minmax_c(i, dst, r); - break; - default: - assert(0); - } -} - -void pprint_expr(struct cloogoptions *i, FILE *dst, struct clast_expr *e) -{ - if (!e) - return; - switch (e->type) { - case clast_expr_name: - pprint_name(dst, (struct clast_name*) e); - break; - case clast_expr_term: - pprint_term(i, dst, (struct clast_term*) e); - break; - case clast_expr_red: - pprint_reduction(i, dst, (struct clast_reduction*) e); - break; - case clast_expr_bin: - pprint_binary(i, dst, (struct clast_binary*) e); - break; - default: - assert(0); - } -} - -void pprint_equation(struct cloogoptions *i, FILE *dst, struct clast_equation *eq) -{ - pprint_expr(i, dst, eq->LHS); - if (eq->sign == 0) - fprintf(dst, " == "); - else if (eq->sign > 0) - fprintf(dst, " >= "); - else - fprintf(dst, " <= "); - pprint_expr(i, dst, eq->RHS); -} - -void pprint_assignment(struct cloogoptions *i, FILE *dst, - struct clast_assignment *a) -{ - if (a->LHS) - fprintf(dst, "%s = ", a->LHS); - pprint_expr(i, dst, a->RHS); -} - - -/** - * pprint_osl_body function: - * this function pretty-prints the OpenScop body of a given statement. - * It returns 1 if it succeeds to find an OpenScop body to print for - * that statement, 0 otherwise. - * \param[in] options CLooG Options. - * \param[in] dst Output stream. - * \param[in] u Statement to print the OpenScop body. - * \return 1 on success to pretty-print an OpenScop body for u, 0 otherwise. - */ -int pprint_osl_body(struct cloogoptions *options, FILE *dst, - struct clast_user_stmt *u) { -#ifdef OSL_SUPPORT - int i; - char *expr, *tmp; - struct clast_stmt *t; - osl_scop_p scop = options->scop; - osl_statement_p stmt; - osl_body_p body; - - if ((scop != NULL) && - (osl_statement_number(scop->statement) >= u->statement->number)) { - stmt = scop->statement; - - /* Go to the convenient statement in the SCoP. */ - for (i = 1; i < u->statement->number; i++) - stmt = stmt->next; - - /* Ensure it has a printable body. */ - if ((osl_generic_has_URI(stmt->body, OSL_URI_BODY)) && - ((body = stmt->body->data) != NULL) && - (body->expression != NULL) && - (body->iterators != NULL)) { - expr = osl_util_identifier_substitution(body->expression->string[0], - body->iterators->string); - tmp = expr; - /* Print the body expression, substituting the @...@ markers. */ - while (*expr) { - if (*expr == '@') { - int iterator; - expr += sscanf(expr, "@%d", &iterator) + 2; /* 2 for the @s */ - t = u->substitutions; - for (i = 0; i < iterator; i++) - t = t->next; - pprint_assignment(options, dst, (struct clast_assignment *)t); - } else { - fprintf(dst, "%c", *expr++); - } - } - fprintf(dst, "\n"); - free(tmp); - return 1; - } - } -#endif - return 0; -} - -void pprint_user_stmt(struct cloogoptions *options, FILE *dst, - struct clast_user_stmt *u) -{ - struct clast_stmt *t; - - if (pprint_osl_body(options, dst, u)) - return; - - if (u->statement->name) - fprintf(dst, "%s", u->statement->name); - else - fprintf(dst, "S%d", u->statement->number); - fprintf(dst, "("); - for (t = u->substitutions; t; t = t->next) { - assert(CLAST_STMT_IS_A(t, stmt_ass)); - pprint_assignment(options, dst, (struct clast_assignment *)t); - if (t->next) - fprintf(dst, ","); - } - fprintf(dst, ")"); - if (options->language != CLOOG_LANGUAGE_FORTRAN) - fprintf(dst, ";"); - fprintf(dst, "\n"); -} - -void pprint_guard(struct cloogoptions *options, FILE *dst, int indent, - struct clast_guard *g) -{ - int k; - if (options->language == CLOOG_LANGUAGE_FORTRAN) - fprintf(dst,"IF "); - else - fprintf(dst,"if "); - if (g->n > 1) - fprintf(dst,"("); - for (k = 0; k < g->n; ++k) { - if (k > 0) { - if (options->language == CLOOG_LANGUAGE_FORTRAN) - fprintf(dst," .AND. "); - else - fprintf(dst," && "); - } - fprintf(dst,"("); - pprint_equation(options, dst, &g->eq[k]); - fprintf(dst,")"); - } - if (g->n > 1) - fprintf(dst,")"); - if (options->language == CLOOG_LANGUAGE_FORTRAN) - fprintf(dst," THEN\n"); - else - fprintf(dst," {\n"); - - pprint_stmt_list(options, dst, indent + INDENT_STEP, g->then); - - fprintf(dst, "%*s", indent, ""); - if (options->language == CLOOG_LANGUAGE_FORTRAN) - fprintf(dst,"END IF\n"); - else - fprintf(dst,"}\n"); -} - -void pprint_for(struct cloogoptions *options, FILE *dst, int indent, - struct clast_for *f) -{ - if (options->language == CLOOG_LANGUAGE_FORTRAN) - fprintf(dst, "DO "); - else - fprintf(dst, "for ("); - - if (f->LB) { - fprintf(dst, "%s=", f->iterator); - pprint_expr(options, dst, f->LB); - } else if (options->language == CLOOG_LANGUAGE_FORTRAN) - cloog_die("unbounded loops not allowed in FORTRAN.\n"); - - if (options->language == CLOOG_LANGUAGE_FORTRAN) - fprintf(dst,", "); - else - fprintf(dst,";"); - - if (f->UB) { - if (options->language != CLOOG_LANGUAGE_FORTRAN) - fprintf(dst,"%s<=", f->iterator); - pprint_expr(options, dst, f->UB); - } else if (options->language == CLOOG_LANGUAGE_FORTRAN) - cloog_die("unbounded loops not allowed in FORTRAN.\n"); - - if (options->language == CLOOG_LANGUAGE_FORTRAN) { - if (cloog_int_gt_si(f->stride, 1)) - cloog_int_print(dst, f->stride); - fprintf(dst,"\n"); - } - else { - if (cloog_int_gt_si(f->stride, 1)) { - fprintf(dst,";%s+=", f->iterator); - cloog_int_print(dst, f->stride); - fprintf(dst, ") {\n"); - } else - fprintf(dst, ";%s++) {\n", f->iterator); - } - - pprint_stmt_list(options, dst, indent + INDENT_STEP, f->body); - - fprintf(dst, "%*s", indent, ""); - if (options->language == CLOOG_LANGUAGE_FORTRAN) - fprintf(dst,"END DO\n") ; - else - fprintf(dst,"}\n") ; -} - -void pprint_stmt_list(struct cloogoptions *options, FILE *dst, int indent, - struct clast_stmt *s) -{ - for ( ; s; s = s->next) { - if (CLAST_STMT_IS_A(s, stmt_root)) - continue; - fprintf(dst, "%*s", indent, ""); - if (CLAST_STMT_IS_A(s, stmt_ass)) { - pprint_assignment(options, dst, (struct clast_assignment *) s); - if (options->language != CLOOG_LANGUAGE_FORTRAN) - fprintf(dst, ";"); - fprintf(dst, "\n"); - } else if (CLAST_STMT_IS_A(s, stmt_user)) { - pprint_user_stmt(options, dst, (struct clast_user_stmt *) s); - } else if (CLAST_STMT_IS_A(s, stmt_for)) { - pprint_for(options, dst, indent, (struct clast_for *) s); - } else if (CLAST_STMT_IS_A(s, stmt_guard)) { - pprint_guard(options, dst, indent, (struct clast_guard *) s); - } else if (CLAST_STMT_IS_A(s, stmt_block)) { - fprintf(dst, "{\n"); - pprint_stmt_list(options, dst, indent + INDENT_STEP, - ((struct clast_block *)s)->body); - fprintf(dst, "%*s", indent, ""); - fprintf(dst, "}\n"); - } else { - assert(0); - } - } -} - - -/****************************************************************************** - * Pretty Printing (dirty) functions * - ******************************************************************************/ - -void clast_pprint(FILE *foo, struct clast_stmt *root, - int indent, CloogOptions *options) -{ - pprint_stmt_list(options, foo, indent, root); -} diff --git a/cloog-0.17.0/source/program.c b/cloog-0.17.0/source/program.c deleted file mode 100644 index c52c1dd..0000000 --- a/cloog-0.17.0/source/program.c +++ /dev/null @@ -1,1077 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** program.c ** - **-------------------------------------------------------------------** - ** First version: october 25th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ -/* CAUTION: the english used for comments is probably the worst you ever read, - * please feel free to correct and improve it ! - */ - - -# include -# include -#include -# include -# include -# include -# include -# include -# include "../include/cloog/cloog.h" -#ifdef CLOOG_RUSAGE -# include -#endif - -#define ALLOC(type) (type*)malloc(sizeof(type)) - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ - - -/** - * cloog_program_print function: - * this function is a human-friendly way to display the CloogProgram data - * structure, it shows all the different fields and includes an indentation - * level (level) in order to work with others print_structure functions. - * - July 1st 2005: first version based on the old cloog_program_print function. - */ -void cloog_program_print_structure(file, program, level) -FILE * file ; -CloogProgram * program ; -int level ; -{ int i, j ; - - /* Go to the right level. */ - for (i=0; ilanguage) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the scattering dimension number. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - fprintf(file,"Scattering dimension number: %d\n",program->nb_scattdims) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the scalar scattering dimension informations. */ - for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - if (program->scaldims != NULL) - { fprintf(file,"Scalar dimensions:") ; - for (i=0;inb_scattdims;i++) - fprintf(file," %d:%d ",i,program->scaldims[i]) ; - fprintf(file,"\n") ; - } - else - fprintf(file,"No scalar scattering dimensions\n") ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the parameter and the iterator names. */ - cloog_names_print_structure(file,program->names,level+1) ; - - /* A blank line. */ - for (i=0; i<=level+1; i++) - fprintf(file,"|\t") ; - fprintf(file,"\n") ; - - /* Print the context. */ - cloog_domain_print_structure(file, program->context, level+1, "Context"); - - /* Print the loop. */ - cloog_loop_print_structure(file,program->loop,level+1) ; - - /* One more time something that is here only for a better look. */ - for (j=0; j<2; j++) - { for (i=0; i<=level; i++) - fprintf(file,"|\t") ; - - fprintf(file,"\n") ; - } -} - - -/** - * cloog_program_dump_cloog function: - * This function dumps a CloogProgram structure supposed to be completely - * filled in a CLooG input file (foo possibly stdout) such as CLooG can - * rebuild almost exactly the data structure from the input file. - * - * If the scattering is already applied, the scattering parameter is supposed to - * be NULL. In this case the number of scattering functions is lost, since they - * are included inside the iteration domains. This can only lead to a less - * beautiful pretty printing. - * - * In case the scattering is not yet applied it can be passed to this function - * and will be included in the CLooG input file dump. - */ -void cloog_program_dump_cloog(FILE * foo, CloogProgram * program, - CloogScatteringList *scattering) -{ - int i; - CloogLoop * loop ; - CloogScatteringList *tmp_scatt; - - fprintf(foo, - "# CLooG -> CLooG\n" - "# This is an automatic dump of a CLooG input file from a CloogProgram data\n" - "# structure. WARNING: it is highly dangerous and MAY be correct ONLY if\n" - "# - it has been dumped before loop generation.\n" - "# - option -noscalars is used (it removes scalar dimensions otherwise)\n" - "# - option -l is at least the original scattering dimension number\n" - "# ASK THE AUTHOR IF YOU *NEED* SOMETHING MORE ROBUST\n") ; - - /* Language. */ - if (program->language == 'c') - fprintf(foo,"# Language: C\n") ; - else - fprintf(foo,"# Language: FORTRAN\n") ; - fprintf(foo,"%c\n\n",program->language) ; - - /* Context. */ - fprintf(foo, "# Context (%d parameter(s)):\n", program->names->nb_parameters); - cloog_domain_print_constraints(foo, program->context, 0); - fprintf(foo,"1 # Parameter name(s)\n") ; - for (i=0;inames->nb_parameters;i++) - fprintf(foo,"%s ",program->names->parameters[i]) ; - - /* Statement number. */ - i = 0 ; - loop = program->loop ; - while (loop != NULL) - { i++ ; - loop = loop->next ; - } - fprintf(foo,"\n\n# Statement number:\n%d\n\n",i) ; - - /* Iteration domains. */ - i = 1 ; - loop = program->loop ; - while (loop != NULL) - { /* Name of the domain. */ - fprintf(foo,"# Iteration domain of statement %d.\n",i) ; - - cloog_domain_print_constraints(foo, loop->domain, 1); - fprintf(foo,"0 0 0 # For future options.\n\n") ; - - i++ ; - loop = loop->next ; - } - fprintf(foo,"\n1 # Iterator name(s)\n") ; - - /* Scattering already applied? In this case print the scattering names as - * additional iterator names. */ - if (!scattering) - for (i = 0; i < program->names->nb_scattering; i++) - fprintf(foo, "%s ", program->names->scattering[i]); - for (i=0;inames->nb_iterators;i++) - fprintf(foo,"%s ",program->names->iterators[i]); - fprintf(foo,"\n\n") ; - - /* Exit, if scattering is already applied. */ - if (!scattering) { - fprintf(foo, "# No scattering functions.\n0\n\n"); - return; - } - - /* Scattering relations. */ - fprintf(foo, "# --------------------- SCATTERING --------------------\n"); - - i = 0; - for (tmp_scatt = scattering; tmp_scatt; tmp_scatt = tmp_scatt->next) - i++; - - fprintf(foo, "%d # Scattering functions", i); - - for (tmp_scatt = scattering; tmp_scatt; tmp_scatt = tmp_scatt->next) - cloog_scattering_print_constraints(foo, tmp_scatt->scatt); - - fprintf(foo, "\n1 # Scattering dimension name(s)\n"); - - for (i = 0; i < program->names->nb_scattering; i++) - fprintf(foo, "%s ", program->names->scattering[i]); -} - - -/** - * cloog_program_print function: - * This function prints the content of a CloogProgram structure (program) into a - * file (file, possibly stdout). - * - July 1st 2005: Now this very old function (probably as old as CLooG) is - * only a frontend to cloog_program_print_structure, with a - * quite better human-readable representation. - */ -void cloog_program_print(FILE * file, CloogProgram * program) -{ cloog_program_print_structure(file,program,0) ; -} - - -static void print_comment(FILE *file, CloogOptions *options, - const char *fmt, ...) -{ - va_list args; - - va_start(args, fmt); - if (options->language == CLOOG_LANGUAGE_FORTRAN) { - fprintf(file, "! "); - vfprintf(file, fmt, args); - fprintf(file, "\n"); - } else { - fprintf(file, "/* "); - vfprintf(file, fmt, args); - fprintf(file, " */\n"); - } -} - -static void print_macros(FILE *file) -{ - fprintf(file, "/* Useful macros. */\n") ; - fprintf(file, - "#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d))\n"); - fprintf(file, - "#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d))\n"); - fprintf(file, "#define max(x,y) ((x) > (y) ? (x) : (y))\n") ; - fprintf(file, "#define min(x,y) ((x) < (y) ? (x) : (y))\n\n") ; -} - -static void print_declarations(FILE *file, int n, char **names) -{ - int i; - - fprintf(file, " int %s", names[0]); - for (i = 1; i < n; i++) - fprintf(file, ", %s", names[i]); - - fprintf(file, ";\n"); -} - -static void print_iterator_declarations(FILE *file, CloogProgram *program, - CloogOptions *options) -{ - CloogNames *names = program->names; - - if (names->nb_scattering) { - fprintf(file, " /* Scattering iterators. */\n"); - print_declarations(file, names->nb_scattering, names->scattering); - } - if (names->nb_iterators) { - fprintf(file, " /* Original iterators. */\n"); - print_declarations(file, names->nb_iterators, names->iterators); - } -} - -static void print_callable_preamble(FILE *file, CloogProgram *program, - CloogOptions *options) -{ - int j; - CloogBlockList *blocklist; - CloogBlock *block; - CloogStatement *statement; - - fprintf(file, "extern void hash(int);\n\n"); - - print_macros(file); - - for (blocklist = program->blocklist; blocklist; blocklist = blocklist->next) { - block = blocklist->block; - for (statement = block->statement; statement; statement = statement->next) { - fprintf(file, "#define S%d(", statement->number); - if (block->depth > 0) { - fprintf(file, "%s", program->names->iterators[0]); - for(j = 1; j < block->depth; j++) - fprintf(file, ",%s", program->names->iterators[j]); - } - fprintf(file,") { hash(%d);", statement->number); - for(j = 0; j < block->depth; j++) - fprintf(file, " hash(%s);", program->names->iterators[j]); - fprintf(file, " }\n"); - } - } - fprintf(file, "\nvoid test("); - if (program->names->nb_parameters > 0) { - fprintf(file, "int %s", program->names->parameters[0]); - for(j = 1; j < program->names->nb_parameters; j++) - fprintf(file, ", int %s", program->names->parameters[j]); - } - fprintf(file, ")\n{\n"); - print_iterator_declarations(file, program, options); -} - -static void print_callable_postamble(FILE *file, CloogProgram *program) -{ - fprintf(file, "}\n"); -} - -/** - * cloog_program_pprint function: - * This function prints the content of a CloogProgram structure (program) into a - * file (file, possibly stdout), in a C-like language. - * - June 22nd 2005: Adaptation for GMP. - */ -void cloog_program_pprint(file, program, options) -FILE * file ; -CloogProgram * program ; -CloogOptions * options ; -{ - int i, j, indentation = 0; - CloogStatement * statement ; - CloogBlockList * blocklist ; - CloogBlock * block ; - struct clast_stmt *root; - - if (program->language == 'f') - options->language = CLOOG_LANGUAGE_FORTRAN ; - else - options->language = CLOOG_LANGUAGE_C ; - -#ifdef CLOOG_RUSAGE - print_comment(file, options, "Generated from %s by %s in %.2fs.", - options->name, cloog_version(), options->time); -#else - print_comment(file, options, "Generated from %s by %s.", - options->name, cloog_version()); -#endif -#ifdef CLOOG_MEMORY - print_comment(file, options, "CLooG asked for %d KBytes.", options->memory); - cloog_msg(CLOOG_INFO, "%.2fs and %dKB used for code generation.\n", - options->time,options->memory); -#endif - - /* If the option "compilable" is set, we provide the whole stuff to generate - * a compilable code. This code just do nothing, but now the user can edit - * the source and set the statement macros and parameters values. - */ - if (options->compilable && (program->language == 'c')) - { /* The headers. */ - fprintf(file,"/* DON'T FORGET TO USE -lm OPTION TO COMPILE. */\n\n") ; - fprintf(file,"/* Useful headers. */\n") ; - fprintf(file,"#include \n") ; - fprintf(file,"#include \n") ; - fprintf(file,"#include \n\n") ; - - /* The value of parameters. */ - fprintf(file,"/* Parameter value. */\n") ; - for (i = 1; i <= program->names->nb_parameters; i++) - fprintf(file, "#define PARVAL%d %d\n", i, options->compilable); - - /* The macros. */ - print_macros(file); - - /* The statement macros. */ - fprintf(file,"/* Statement macros (please set). */\n") ; - blocklist = program->blocklist ; - while (blocklist != NULL) - { block = blocklist->block ; - statement = block->statement ; - while (statement != NULL) - { fprintf(file,"#define S%d(",statement->number) ; - if (block->depth > 0) - { fprintf(file,"%s",program->names->iterators[0]) ; - for(j=1;jdepth;j++) - fprintf(file,",%s",program->names->iterators[j]) ; - } - fprintf(file,") {total++;") ; - if (block->depth > 0) { - fprintf(file, " printf(\"S%d %%d", statement->number); - for(j=1;jdepth;j++) - fprintf(file, " %%d"); - - fprintf(file,"\\n\",%s",program->names->iterators[0]) ; - for(j=1;jdepth;j++) - fprintf(file,",%s",program->names->iterators[j]) ; - fprintf(file,");") ; - } - fprintf(file,"}\n") ; - - statement = statement->next ; - } - blocklist = blocklist->next ; - } - - /* The iterator and parameter declaration. */ - fprintf(file,"\nint main() {\n") ; - print_iterator_declarations(file, program, options); - if (program->names->nb_parameters > 0) - { fprintf(file," /* Parameters. */\n") ; - fprintf(file, " int %s=PARVAL1",program->names->parameters[0]); - for(i=2;i<=program->names->nb_parameters;i++) - fprintf(file, ", %s=PARVAL%d", program->names->parameters[i-1], i); - - fprintf(file,";\n"); - } - fprintf(file," int total=0;\n"); - fprintf(file,"\n") ; - - /* And we adapt the identation. */ - indentation += 2 ; - } else if (options->callable && program->language == 'c') { - print_callable_preamble(file, program, options); - indentation += 2; - } - - root = cloog_clast_create(program, options); - clast_pprint(file, root, indentation, options); - cloog_clast_free(root); - - /* The end of the compilable code in case of 'compilable' option. */ - if (options->compilable && (program->language == 'c')) - { - fprintf(file, "\n printf(\"Number of integral points: %%d.\\n\",total);"); - fprintf(file, "\n return 0;\n}\n"); - } else if (options->callable && program->language == 'c') - print_callable_postamble(file, program); -} - - -/****************************************************************************** - * Memory deallocation function * - ******************************************************************************/ - - -/** - * cloog_program_free function: - * This function frees the allocated memory for a CloogProgram structure. - */ -void cloog_program_free(CloogProgram * program) -{ cloog_names_free(program->names) ; - cloog_loop_free(program->loop) ; - cloog_domain_free(program->context) ; - cloog_block_list_free(program->blocklist) ; - if (program->scaldims != NULL) - free(program->scaldims) ; - - free(program) ; -} - - -/****************************************************************************** - * Reading function * - ******************************************************************************/ - - -static void cloog_program_construct_block_list(CloogProgram *p) -{ - CloogLoop *loop; - CloogBlockList **next = &p->blocklist; - - for (loop = p->loop; loop; loop = loop->next) { - *next = cloog_block_list_alloc(loop->block); - next = &(*next)->next; - } -} - - -/** - * Construct a CloogProgram structure from a given context and - * union domain representing the iteration domains and scattering functions. - */ -CloogProgram *cloog_program_alloc(CloogDomain *context, CloogUnionDomain *ud, - CloogOptions *options) -{ - int i; - char prefix[] = "c"; - CloogScatteringList * scatteringl; - CloogNames *n; - CloogProgram * p ; - - /* Memory allocation for the CloogProgram structure. */ - p = cloog_program_malloc() ; - - if (options->language == CLOOG_LANGUAGE_FORTRAN) - p->language = 'f'; - else - p->language = 'c'; - - p->names = n = cloog_names_alloc(); - - /* We then read the context data. */ - p->context = context; - n->nb_parameters = ud->n_name[CLOOG_PARAM]; - - /* First part of the CloogNames structure: the parameter names. */ - if (ud->name[CLOOG_PARAM]) { - n->parameters = ud->name[CLOOG_PARAM]; - ud->name[CLOOG_PARAM] = NULL; - } else - n->parameters = cloog_names_generate_items(n->nb_parameters, NULL, - FIRST_PARAMETER); - - n->nb_iterators = ud->n_name[CLOOG_ITER]; - if (ud->name[CLOOG_ITER]) { - n->iterators = ud->name[CLOOG_ITER]; - ud->name[CLOOG_ITER] = NULL; - } else - n->iterators = cloog_names_generate_items(n->nb_iterators, NULL, - FIRST_ITERATOR); - - if (ud->domain) { - CloogNamedDomainList *l; - CloogLoop **next = &p->loop; - CloogScatteringList **next_scat = &scatteringl; - - scatteringl = NULL; - for (i = 0, l = ud->domain; l; ++i, l = l->next) { - *next = cloog_loop_from_domain(options->state, l->domain, i); - l->domain = NULL; - (*next)->block->statement->name = l->name; - (*next)->block->statement->usr = l->usr; - l->name = NULL; - - if (l->scattering) { - *next_scat = ALLOC(CloogScatteringList); - (*next_scat)->scatt = l->scattering; - l->scattering = NULL; - (*next_scat)->next = NULL; - - next_scat = &(*next_scat)->next; - } - - next = &(*next)->next; - } - - if (scatteringl != NULL) { - p->nb_scattdims = cloog_scattering_dimension(scatteringl->scatt, - p->loop->domain); - n->nb_scattering = p->nb_scattdims; - if (ud->name[CLOOG_SCAT]) { - n->scattering = ud->name[CLOOG_SCAT]; - ud->name[CLOOG_SCAT] = NULL; - } else - n->scattering = cloog_names_generate_items(n->nb_scattering, prefix, -1); - - /* The boolean array for scalar dimensions is created and set to 0. */ - p->scaldims = (int *)malloc(p->nb_scattdims*(sizeof(int))) ; - if (p->scaldims == NULL) - cloog_die("memory overflow.\n"); - for (i=0;inb_scattdims;i++) - p->scaldims[i] = 0 ; - - /* We try to find blocks in the input problem to reduce complexity. */ - if (!options->noblocks) - cloog_program_block(p, scatteringl, options); - if (!options->noscalars) - cloog_program_extract_scalars(p, scatteringl, options); - - cloog_program_scatter(p, scatteringl, options); - cloog_scattering_list_free(scatteringl); - - if (!options->noblocks) - p->loop = cloog_loop_block(p->loop, p->scaldims, p->nb_scattdims); - } - else - { p->nb_scattdims = 0 ; - p->scaldims = NULL ; - } - - cloog_names_scalarize(p->names,p->nb_scattdims,p->scaldims) ; - - cloog_program_construct_block_list(p); - } - else - { p->loop = NULL ; - p->blocklist = NULL ; - p->scaldims = NULL ; - } - - cloog_union_domain_free(ud); - - return(p) ; -} - - -/** - * cloog_program_read function: - * This function read the informations to put in a CloogProgram structure from - * a file (file, possibly stdin). It returns a pointer to a CloogProgram - * structure containing the read informations. - * - October 25th 2001: first version. - * - September 9th 2002: - the big reading function is now split in several - * functions (one per read data structure). - * - adaptation to the new file format with naming. - */ -CloogProgram *cloog_program_read(FILE *file, CloogOptions *options) -{ - CloogInput *input; - CloogProgram *p; - - input = cloog_input_read(file, options); - p = cloog_program_alloc(input->context, input->ud, options); - free(input); - - return p; -} - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - - -/** - * cloog_program_malloc function: - * This function allocates the memory space for a CloogProgram structure and - * sets its fields with default values. Then it returns a pointer to the - * allocated space. - * - November 21th 2005: first version. - */ -CloogProgram * cloog_program_malloc() -{ CloogProgram * program ; - - /* Memory allocation for the CloogProgram structure. */ - program = (CloogProgram *)malloc(sizeof(CloogProgram)) ; - if (program == NULL) - cloog_die("memory overflow.\n"); - - /* We set the various fields with default values. */ - program->language = 'c' ; - program->nb_scattdims = 0 ; - program->context = NULL ; - program->loop = NULL ; - program->names = NULL ; - program->blocklist = NULL ; - program->scaldims = NULL ; - program->usr = NULL; - - return program ; -} - - -/** - * cloog_program_generate function: - * This function calls the Quillere algorithm for loop scanning. (see the - * Quillere paper) and calls the loop simplification function. - * - depth is the loop depth we want to optimize (guard free as possible), - * the first loop depth is 1 and anegative value is the infinity depth. - * - sep_level is the level number where we want to start loop separation. - ** - * - October 26th 2001: first version. - * - April 19th 2005: some basic fixes and memory usage feature. - * - April 29th 2005: (bug fix, bug found by DaeGon Kim) see case 2 below. - */ -CloogProgram * cloog_program_generate(program, options) -CloogProgram * program ; -CloogOptions * options ; -{ -#ifdef CLOOG_RUSAGE - float time; - struct rusage start, end ; -#endif - CloogLoop * loop ; -#ifdef CLOOG_MEMORY - char status_path[MAX_STRING_VAL] ; - FILE * status ; - - /* We initialize the memory need to 0. */ - options->memory = 0 ; -#endif - - if (options->override) - { - cloog_msg(options, CLOOG_WARNING, - "you are using -override option, be aware that the " - "generated\n code may be incorrect.\n") ; - } - else - { /* Playing with options may be dangerous, here are two possible issues : - * 1. Using -l option less than scattering dimension number may lead to - * an illegal target code (since the scattering is not respected), if - * it is the case, we set -l depth to the first acceptable value. - */ - if ((program->nb_scattdims > options->l) && (options->l >= 0)) - { - cloog_msg(options, CLOOG_WARNING, - "-l depth is less than the scattering dimension number " - "(the \n generated code may be incorrect), it has been " - "automaticaly set\n to this value (use option -override " - "to override).\n") ; - options->l = program->nb_scattdims ; - } - - /* 2. Using -f option greater than one while -l depth is greater than the - * scattering dimension number may lead to iteration duplication (try - * test/daegon_lu_osp.cloog with '-f 3' to test) because of the step 4b - * of the cloog_loop_generate function, if it is the case, we set -l to - * the first acceptable value. - */ - if (((options->f > 1) || (options->f < 0)) && - ((options->l > program->nb_scattdims) || (options->l < 0))) - { - cloog_msg(options, CLOOG_WARNING, - "-f depth is more than one, -l depth has been " - "automaticaly set\n to the scattering dimension number " - "(target code may have\n duplicated iterations), -l depth " - "has been automaticaly set to\n this value (use option " - "-override to override).\n") ; - options->l = program->nb_scattdims ; - } - } - -#ifdef CLOOG_RUSAGE - getrusage(RUSAGE_SELF, &start) ; -#endif - if (program->loop != NULL) - { loop = program->loop ; - - /* Here we go ! */ - loop = cloog_loop_generate(loop, program->context, 0, 0, - program->scaldims, - program->nb_scattdims, - options); - -#ifdef CLOOG_MEMORY - /* We read into the status file of the process how many memory it uses. */ - sprintf(status_path,"/proc/%d/status",getpid()) ; - status = fopen(status_path, "r") ; - while (fscanf(status,"%s",status_path) && strcmp(status_path,"VmData:")!=0); - fscanf(status,"%d",&(options->memory)) ; - fclose(status) ; -#endif - - if ((!options->nosimplify) && (program->loop != NULL)) - loop = cloog_loop_simplify(loop, program->context, 0, - program->nb_scattdims, options); - - program->loop = loop ; - } - -#ifdef CLOOG_RUSAGE - getrusage(RUSAGE_SELF, &end) ; - /* We calculate the time spent in code generation. */ - time = (end.ru_utime.tv_usec - start.ru_utime.tv_usec)/(float)(MEGA) ; - time += (float)(end.ru_utime.tv_sec - start.ru_utime.tv_sec) ; - options->time = time ; -#endif - - return program ; -} - - -/** - * cloog_program_block function: - * this function gives a last chance to the lazy user to consider statement - * blocks instead of some statement lists where the whole list may be - * considered as a single statement from a code generation point of view. - * For instance two statements with the same iteration domain and the same - * scattering functions may be considered as a block. This function is lazy - * and can only find very simple forms of trivial blocks (see - * cloog_domain_lazy_block function for more details). The useless loops and - * scattering functions are removed and freed while the statement list of - * according blocks are filled. - * - program is the whole program structure (befaore applying scattering), - * - scattering is the list of scattering functions. - ** - * - April 30th 2005: first attempt. - * - June 10-11th 2005: first working version. - */ -void cloog_program_block(CloogProgram *program, - CloogScatteringList *scattering, CloogOptions *options) -{ int blocked_reference=0, blocked=0, nb_blocked=0 ; - CloogLoop * reference, * start, * loop ; - CloogScatteringList * scatt_reference, * scatt_loop, * scatt_start; - - if ((program->loop == NULL) || (program->loop->next == NULL)) - return ; - - /* The process will use three variables for the linked list : - * - 'start' is the starting point of a new block, - * - 'reference' is the node of the block used for the block checking, - * - 'loop' is the candidate to be inserted inside the block. - * At the beginning of the process, the linked lists are as follow: - * O------>O------>O------>O------>NULL - * | | - * start loop - * reference - */ - - reference = program->loop ; - start = program->loop ; - loop = reference->next ; - scatt_reference = scattering ; - scatt_start = scattering ; - scatt_loop = scattering->next ; - - while (loop != NULL) - { if (cloog_domain_lazy_equal(reference->domain,loop->domain) && - cloog_scattering_lazy_block(scatt_reference->scatt, scatt_loop->scatt, - scattering,program->nb_scattdims)) - { /* If we find a block we update the links: - * +---------------+ - * | v - * O O------>O------>O------>NULL - * | | - * start loop - * reference - */ - blocked = 1 ; - nb_blocked ++ ; - cloog_block_merge(start->block,loop->block); /* merge frees loop->block */ - loop->block = NULL ; - start->next = loop->next ; - scatt_start->next = scatt_loop->next ; - } - else - { /* If we didn't find a block, the next start of a block is updated: - * O------>O------>O------>O------>NULL - * | | - * reference start - * loop - */ - blocked= 0 ; - start = loop ; - scatt_start = scatt_loop ; - } - - /* If the reference node has been included into a block, we can free it. */ - if (blocked_reference) - { reference->next = NULL ; - cloog_loop_free(reference) ; - cloog_scattering_free(scatt_reference->scatt); - free(scatt_reference) ; - } - - /* The reference and the loop are now updated for the next try, the - * starting position depends on the previous step. - * O ? O------>O------>O------>NULL - * | | - * reference loop - */ - reference = loop ; - loop = loop->next ; - scatt_reference = scatt_loop ; - scatt_loop = scatt_loop->next ; - - /* We mark the new reference as being blocked or not, if will be freed - * during the next while loop execution. - */ - if (blocked) - blocked_reference = 1 ; - else - blocked_reference = 0 ; - } - - /* We free the last blocked reference if any (since in the while loop it was - * freed during the next loop execution, it was not possible to free the - * last one inside). - */ - if (blocked_reference) - { reference->next = NULL ; - cloog_loop_free(reference) ; - cloog_scattering_free(scatt_reference->scatt); - free(scatt_reference) ; - } - - if (nb_blocked != 0) - cloog_msg(options, CLOOG_INFO, "%d domains have been blocked.\n", nb_blocked); -} - - -/** - * cloog_program_extract_scalars function: - * this functions finds and removes the dimensions of the scattering functions - * when they are scalar (i.e. of the shape "dim + scalar = 0") for all - * scattering functions. The reason is that the processing of such dimensions - * is trivial and do not need neither a row and a column in the matrix - * representation of the domain (this will save memory) neither the full - * Quillere processing (this will save time). The scalar dimensions data are - * dispatched in the CloogProgram structure (the boolean vector scaldims will - * say which original dimensions are scalar or not) and to the CloogBlock - * structures (each one has a scaldims vector that contains the scalar values). - * - June 14th 2005: first developments. - * - June 30th 2005: first version. - */ -void cloog_program_extract_scalars(CloogProgram *program, - CloogScatteringList *scattering, CloogOptions *options) -{ int i, j, scalar, current, nb_scaldims=0 ; - CloogScatteringList *start; - CloogScattering *old; - CloogLoop *loop; - CloogBlock * block ; - - start = scattering ; - - for (i=0;inb_scattdims;i++) - { scalar = 1 ; - scattering = start ; - while (scattering != NULL) - { if (!cloog_scattering_lazy_isscalar(scattering->scatt, i, NULL)) - { scalar = 0 ; - break ; - } - scattering = scattering->next ; - } - - if (scalar) - { nb_scaldims ++ ; - program->scaldims[i] = 1 ; - } - } - - /* If there are no scalar dimensions, we can continue directly. */ - if (!nb_scaldims) - return ; - - /* Otherwise, in each block, we have to put the number of scalar dimensions, - * and to allocate the memory for the scalar values. - */ - for (loop = program->loop; loop; loop = loop->next) { - block = loop->block; - block->nb_scaldims = nb_scaldims ; - block->scaldims = (cloog_int_t *)malloc(nb_scaldims*sizeof(cloog_int_t)); - for (i=0;iscaldims[i]); - } - - /* Then we have to fill these scalar values, so we can erase those dimensions - * from the scattering functions. It's easier to begin with the last one, - * since there would be an offset otherwise (if we remove the i^th dimension, - * then the next one is not the (i+1)^th but still the i^th...). - */ - current = nb_scaldims - 1 ; - for (i=program->nb_scattdims-1;i>=0;i--) - if (program->scaldims[i]) - { - scattering = start ; - for (loop = program->loop; loop; loop = loop->next) { - block = loop->block; - if (!cloog_scattering_lazy_isscalar(scattering->scatt, i, - &block->scaldims[current])) { - /* We should have found a scalar value: if not, there is an error. */ - cloog_die("dimension %d is not scalar as expected.\n", i); - } - scattering = scattering->next ; - } - - scattering = start ; - while (scattering != NULL) { - old = scattering->scatt; - scattering->scatt = cloog_scattering_erase_dimension(old, i); - cloog_scattering_free(old); - scattering = scattering->next ; - } - current-- ; - } - - /* We postprocess the scaldims array in such a way that each entry is how - * many scalar dimensions follows + 1 (the current one). This will make - * some other processing easier (e.g. knowledge of some offsets). - */ - for (i=0;inb_scattdims-1;i++) - { if (program->scaldims[i]) - { j = i + 1 ; - while ((j < program->nb_scattdims) && program->scaldims[j]) - { program->scaldims[i] ++ ; - j ++ ; - } - } - } - - if (nb_scaldims != 0) - cloog_msg(options, CLOOG_INFO, "%d dimensions (over %d) are scalar.\n", - nb_scaldims,program->nb_scattdims) ; -} - - -/** - * cloog_program_scatter function: - * This function adds the scattering (scheduling) informations in a program. - * If names is NULL, this function create names itself such that the i^th - * name is ci. - * - November 6th 2001: first version. - */ -void cloog_program_scatter(CloogProgram *program, - CloogScatteringList *scattering, CloogOptions *options) -{ int scattering_dim, scattering_dim2, not_enough_constraints=0 ; - CloogLoop * loop ; - - if ((program != NULL) && (scattering != NULL)) - { loop = program->loop ; - - /* We compute the scattering dimension and check it is >=0. */ - scattering_dim = cloog_scattering_dimension(scattering->scatt, loop->domain); - if (scattering_dim < 0) - cloog_die("scattering has not enough dimensions.\n"); - if (!cloog_scattering_fully_specified(scattering->scatt, loop->domain)) - not_enough_constraints ++ ; - - /* The scattering dimension may have been modified by scalar extraction. */ - scattering_dim = cloog_scattering_dimension(scattering->scatt, loop->domain); - - /* Finally we scatter all loops. */ - cloog_loop_scatter(loop, scattering->scatt); - loop = loop->next ; - scattering = scattering->next ; - - while ((loop != NULL) && (scattering != NULL)) - { scattering_dim2 = cloog_scattering_dimension(scattering->scatt, - loop->domain); - if (scattering_dim2 != scattering_dim) - cloog_die("scattering dimensions are not the same.\n") ; - if (!cloog_scattering_fully_specified(scattering->scatt, loop->domain)) - not_enough_constraints ++ ; - - cloog_loop_scatter(loop, scattering->scatt); - loop = loop->next ; - scattering = scattering->next ; - } - if ((loop != NULL) || (scattering != NULL)) - cloog_msg(options, CLOOG_WARNING, - "there is not a scattering for each statement.\n"); - - if (not_enough_constraints) - cloog_msg(options, CLOOG_WARNING, "not enough constraints for " - "%d scattering function(s).\n",not_enough_constraints) ; - } -} diff --git a/cloog-0.17.0/source/state.c b/cloog-0.17.0/source/state.c deleted file mode 100644 index 7f3fff8..0000000 --- a/cloog-0.17.0/source/state.c +++ /dev/null @@ -1,52 +0,0 @@ -#include -#include "../include/cloog/cloog.h" - -/** - * Allocate state and initialize backend independent part. - */ -CloogState *cloog_core_state_malloc(void) -{ - CloogState *state; - - state = (CloogState *)malloc(sizeof(CloogState)); - if (!state) - cloog_die("memory overflow.\n"); - - state->backend = NULL; - - cloog_int_init(state->zero); - cloog_int_set_si(state->zero, 0); - cloog_int_init(state->one); - cloog_int_set_si(state->one, 1); - cloog_int_init(state->negone); - cloog_int_set_si(state->negone, -1); - - state->block_allocated = 0; - state->block_freed = 0; - state->block_max = 0; - - state->domain_allocated = 0; - state->domain_freed = 0; - state->domain_max = 0; - - state->loop_allocated = 0; - state->loop_freed = 0; - state->loop_max = 0; - - state->statement_allocated = 0; - state->statement_freed = 0; - state->statement_max = 0; - - return state; -} - -/** - * Free state. - */ -void cloog_core_state_free(CloogState *state) -{ - cloog_int_clear(state->zero); - cloog_int_clear(state->one); - cloog_int_clear(state->negone); - free(state); -} diff --git a/cloog-0.17.0/source/statement.c b/cloog-0.17.0/source/statement.c deleted file mode 100644 index 1c6af4e..0000000 --- a/cloog-0.17.0/source/statement.c +++ /dev/null @@ -1,280 +0,0 @@ - - /**-------------------------------------------------------------------** - ** CLooG ** - **-------------------------------------------------------------------** - ** statement.c ** - **-------------------------------------------------------------------** - ** First version: november 4th 2001 ** - **-------------------------------------------------------------------**/ - - -/****************************************************************************** - * CLooG : the Chunky Loop Generator (experimental) * - ****************************************************************************** - * * - * Copyright (C) 2001-2005 Cedric Bastoul * - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301 USA * - * * - * CLooG, the Chunky Loop Generator * - * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * - * * - ******************************************************************************/ -/* CAUTION: the english used for comments is probably the worst you ever read, - * please feel free to correct and improve it ! - */ - -# include -# include -# include -# include "../include/cloog/cloog.h" - - -/****************************************************************************** - * Memory leaks hunting * - ******************************************************************************/ - - -/** - * These functions and global variables are devoted to memory leaks hunting: we - * want to know at each moment how many CloogStatement structures had been - * allocated (cloog_statement_allocated) and how many had been freed - * (cloog_statement_freed). Each time a CloogStatement structure is allocated, - * a call to the function cloog_statement_leak_up() must be carried out, and - * respectively cloog_statement_leak_down() when a CloogStatement structure is - * freed. The special variable cloog_statement_max gives the maximal number of - * CloogStatement structures simultaneously alive (i.e. allocated and - * non-freed) in memory. - * - July 3rd->11th 2003: first version (memory leaks hunt and correction). - */ - - -static void cloog_statement_leak_up(CloogState *state) -{ - state->statement_allocated++; - if ((state->statement_allocated - state->statement_freed) > state->statement_max) - state->statement_max = state->statement_allocated - state->statement_freed ; -} - - -static void cloog_statement_leak_down(CloogState *state) -{ - state->statement_freed++; -} - - -/****************************************************************************** - * Structure display function * - ******************************************************************************/ - - -/** - * cloog_domain_print_structure : - * this function is a human-friendly way to display the CloogDomain data - * structure, it includes an indentation level (level) in order to work with - * others print_structure functions. - * - June 16th 2005: first version. - */ -void cloog_statement_print_structure(file, statement, level) -FILE * file ; -CloogStatement * statement ; -int level ; -{ int i ; - - if (statement != NULL) - { /* Go to the right level. */ - for (i=0; inumber) ; - - statement = statement->next ; - - while (statement != NULL) - { for (i=0; inumber) ; - statement = statement->next ; - } - } - else - { for (i=0; istate); - - next = statement->next ; - /* free(statement->usr) ; Actually, this is user's job ! */ - free(statement->name); - free(statement) ; - statement = next ; - } -} - - -/****************************************************************************** - * Processing functions * - ******************************************************************************/ - - -/** - * cloog_statement_malloc function: - * This function allocates the memory space for a CloogStatement structure and - * sets its fields with default values. Then it returns a pointer to the - * allocated space. - * - November 21th 2005: first version. - */ -CloogStatement *cloog_statement_malloc(CloogState *state) -{ CloogStatement * statement ; - - /* Memory allocation for the CloogStatement structure. */ - statement = (CloogStatement *)malloc(sizeof(CloogStatement)) ; - if (statement == NULL) - cloog_die("memory overflow.\n"); - cloog_statement_leak_up(state); - - /* We set the various fields with default values. */ - statement->state = state; - statement->number = 0; - statement->name = NULL; - statement->usr = NULL ; /* To fill it is actually user's job ! */ - statement->next = NULL ; - - return statement ; -} - - -/** - * cloog_statement_alloc function: - * This function allocates the memory space for a CloogStatement structure and - * sets its fields with those given as input. Then it returns a pointer to the - * allocated space. - * - number is the statement number. - ** - * - September 9th 2002: first version. - * - March 17th 2003: fix for the usr field in CloogStatement structure. - * - April 16th 2005: adaptation to new CloogStatement structure (with - * number), cloog_statement_read becomes - * cloog_statement_alloc sincethere is nothing more to - * read on a file. - * - November 21th 2005: use of cloog_statement_malloc. - */ -CloogStatement *cloog_statement_alloc(CloogState *state, int number) -{ CloogStatement * statement ; - - /* Memory allocation and initialization of the structure. */ - statement = cloog_statement_malloc(state); - - statement->number = number ; - - return statement ; -} - - -/** - * cloog_statement_copy function: - * This function returns a copy of the CloogStatement structure given as input. - * - October 28th 2001: first version (in loop.c). - * - March 17th 2003: fix for the usr field in CloogStatement structure. - * - April 16th 2005: adaptation to new CloogStatement struct (with number). - */ -CloogStatement * cloog_statement_copy(CloogStatement * source) -{ CloogStatement * statement, * temp, * now = NULL ; - - statement = NULL ; - - while (source != NULL) { - cloog_statement_leak_up(source->state); - - temp = (CloogStatement *)malloc(sizeof(CloogStatement)) ; - if (temp == NULL) - cloog_die("memory overflow.\n"); - - temp->state = source->state; - temp->number = source->number ; - temp->name = source->name ? strdup(source->name) : NULL; - temp->usr = source->usr ; - temp->next = NULL ; - - if (statement == NULL) - { statement = temp ; - now = statement ; - } - else - { now->next = temp ; - now = now->next ; - } - source = source->next ; - } - return(statement) ; -} - - -/** - * cloog_statement_add function: - * This function adds a CloogStatement structure (statement) at a given place - * (now) of a NULL terminated list of CloogStatement structures. The beginning - * of this list is (start). This function updates (now) to (loop), and - * updates (start) if the added element is the first one -that is when (start) - * is NULL-. - * - March 27th 2004: first version. - */ -void cloog_statement_add(start, now, statement) -CloogStatement ** start, ** now, * statement ; -{ if (*start == NULL) - { *start = statement ; - *now = *start ; - } - else - { (*now)->next = statement ; - *now = (*now)->next ; - } -} - diff --git a/cloog-0.17.0/source/stride.c b/cloog-0.17.0/source/stride.c deleted file mode 100644 index d7358a0..0000000 --- a/cloog-0.17.0/source/stride.c +++ /dev/null @@ -1,70 +0,0 @@ -#include -#include - -#define ALLOC(type) (type*)malloc(sizeof(type)) - -CloogStride *cloog_stride_malloc() -{ - CloogStride *s; - - s = ALLOC(CloogStride); - if (!s) - cloog_die("memory overflow.\n"); - - s->references = 1; - cloog_int_init(s->stride); - cloog_int_init(s->offset); - cloog_int_init(s->factor); - s->constraint = cloog_constraint_invalid(); - - return s; -} - -CloogStride *cloog_stride_alloc(cloog_int_t stride, cloog_int_t offset) -{ - CloogStride *s = cloog_stride_malloc(); - - cloog_int_set(s->stride, stride); - cloog_int_set(s->offset, offset); - cloog_int_set_si(s->factor, 0); - - return s; -} - -CloogStride *cloog_stride_alloc_from_constraint(cloog_int_t stride, - CloogConstraint *constraint, cloog_int_t factor) -{ - CloogStride *s = cloog_stride_malloc(); - - cloog_int_set(s->stride, stride); - cloog_int_set(s->factor, factor); - cloog_int_set_si(s->offset, -1); - s->constraint = constraint; - - return s; -} - -CloogStride *cloog_stride_copy(CloogStride *stride) -{ - if (!stride) - return stride; - - stride->references++; - return stride; -} - -void cloog_stride_free(CloogStride *stride) -{ - if (!stride) - return; - - stride->references--; - if (stride->references > 0) - return; - - cloog_int_clear(stride->stride); - cloog_int_clear(stride->offset); - cloog_int_clear(stride->factor); - cloog_constraint_release(stride->constraint); - free(stride); -} diff --git a/cloog-0.17.0/source/union_domain.c b/cloog-0.17.0/source/union_domain.c deleted file mode 100644 index 0d24658..0000000 --- a/cloog-0.17.0/source/union_domain.c +++ /dev/null @@ -1,366 +0,0 @@ -#include -#include -#include -#include "../include/cloog/cloog.h" - -#ifdef OSL_SUPPORT -#include -#include -#include -#include -#endif - -#define ALLOC(type) (type*)malloc(sizeof(type)) -#define ALLOCN(type,n) (type*)malloc((n)*sizeof(type)) - -void cloog_named_domain_list_free(CloogNamedDomainList *list) -{ - while (list != NULL) { - CloogNamedDomainList *temp = list->next; - cloog_domain_free(list->domain); - cloog_scattering_free(list->scattering); - free(list->name); - free(list); - list = temp; - } -} - -CloogUnionDomain *cloog_union_domain_alloc(int nb_par) -{ - CloogUnionDomain *ud; - - ud = ALLOC(CloogUnionDomain); - if (!ud) - cloog_die("memory overflow.\n"); - - ud->domain = NULL; - ud->next_domain = &ud->domain; - - ud->n_name[CLOOG_PARAM] = nb_par; - ud->n_name[CLOOG_ITER] = 0; - ud->n_name[CLOOG_SCAT] = 0; - - ud->name[CLOOG_PARAM] = NULL; - ud->name[CLOOG_ITER] = NULL; - ud->name[CLOOG_SCAT] = NULL; - - return ud; -} - -void cloog_union_domain_free(CloogUnionDomain *ud) -{ - int i; - int j; - - if (!ud) - return; - - for (i = 0; i < 3; ++i) { - if (!ud->name[i]) - continue; - for (j = 0; j < ud->n_name[i]; ++i) - free(ud->name[i][j]); - free(ud->name[i]); - } - - cloog_named_domain_list_free(ud->domain); - - free(ud); -} - -/** - * Add a domain with scattering function to the union of domains. - * name may be NULL and is duplicated if it is not. - * domain and scattering are taken over by the CloogUnionDomain. - * scattering may be NULL. - */ -CloogUnionDomain *cloog_union_domain_add_domain(CloogUnionDomain *ud, - const char *name, CloogDomain *domain, CloogScattering *scattering, - void *usr) -{ - CloogNamedDomainList *named; - int n; - - if (!ud) - return NULL; - - named = ALLOC(CloogNamedDomainList); - if (!named) - cloog_die("memory overflow.\n"); - - if (ud->name[CLOOG_ITER]) - cloog_die("iterator names must be set after adding domains.\n"); - if (ud->name[CLOOG_SCAT]) - cloog_die("scattering names must be set after adding domains.\n"); - - n = cloog_domain_dimension(domain); - if (n > ud->n_name[CLOOG_ITER]) - ud->n_name[CLOOG_ITER] = n; - - if (scattering) { - n = cloog_scattering_dimension(scattering, domain); - if (n > ud->n_name[CLOOG_SCAT]) - ud->n_name[CLOOG_SCAT] = n; - } - - named->domain = domain; - named->scattering = scattering; - named->name = name ? strdup(name) : NULL; - named->usr = usr; - named->next = NULL; - - *ud->next_domain = named; - ud->next_domain = &named->next; - - return ud; -} - -/** - * Set the name of parameter, iterator or scattering dimension - * at the specified position. The name is duplicated. - */ -CloogUnionDomain *cloog_union_domain_set_name(CloogUnionDomain *ud, - enum cloog_dim_type type, int index, const char *name) -{ - int i; - - if (!ud) - return ud; - - if (type != CLOOG_PARAM && - type != CLOOG_ITER && - type != CLOOG_SCAT) - cloog_die("invalid dim type\n"); - - if (index < 0 || index >= ud->n_name[type]) - cloog_die("index out of range\n"); - - if (!ud->name[type]) { - ud->name[type] = ALLOCN(char *, ud->n_name[type]); - if (!ud->name[type]) - cloog_die("memory overflow.\n"); - for (i = 0; i < ud->n_name[type]; ++i) - ud->name[type][i] = NULL; - } - - free(ud->name[type][index]); - ud->name[type][index] = strdup(name); - if (!ud->name[type][index]) - cloog_die("memory overflow.\n"); - - return ud; -} - -static char *next_line(FILE *input, char *line, unsigned len) -{ - char *p; - - do { - if (!(p = fgets(line, len, input))) - return NULL; - while (isspace(*p) && *p != '\n') - ++p; - } while (*p == '#' || *p == '\n'); - - return p; -} - -/** - * cloog_scattering_list_read - * Read in a list of scattering functions for the nb_statements - * domains in loop. - */ -static CloogScatteringList *cloog_scattering_list_read(FILE * foo, - CloogDomain **domain, int nb_statements, int nb_parameters) -{ - int nb_scat = 0; - char s[MAX_STRING]; - CloogScatteringList *list = NULL, **next = &list; - - /* We read first the number of scattering functions in the list. */ - do { - if (!fgets(s, MAX_STRING, foo)) - break; - } while ((*s=='#' || *s=='\n') || (sscanf(s, " %d", &nb_scat) < 1)); - - if (nb_scat == 0) - return NULL; - - if (nb_scat != nb_statements) - cloog_die("wrong number of scattering functions.\n"); - - while (nb_scat--) { - *next = (CloogScatteringList *)malloc(sizeof(CloogScatteringList)); - (*next)->scatt = cloog_domain_read_scattering(*domain, foo); - (*next)->next = NULL; - - next = &(*next)->next; - domain++; - } - return list; -} - -static CloogUnionDomain *set_names_from_list(CloogUnionDomain *ud, - enum cloog_dim_type type, int n, char **names) -{ - int i; - - if (!names) - return ud; - - for (i = 0; i < n; ++i) { - ud = cloog_union_domain_set_name(ud, type, i, names[i]); - free(names[i]); - } - free(names); - - return ud; -} - -/** - * Fill up a CloogUnionDomain from information in a CLooG input file. - * The language and the context are assumed to have been read from - * the input file already. - */ -CloogUnionDomain *cloog_union_domain_read(FILE *file, int nb_par, - CloogOptions *options) -{ - int op1, op2, op3; - char line[MAX_STRING]; - CloogDomain **domain; - CloogUnionDomain *ud; - CloogScatteringList *scatteringl; - int i; - int n_iter = -1; - int n_dom; - char **names; - - ud = cloog_union_domain_alloc(nb_par); - - names = cloog_names_read_strings(file, nb_par); - ud = set_names_from_list(ud, CLOOG_PARAM, nb_par, names); - - /* We read the number of statements. */ - if (!next_line(file, line, sizeof(line))) - cloog_die("Input error.\n"); - if (sscanf(line, "%d", &n_dom) != 1) - cloog_die("Input error.\n"); - - domain = ALLOCN(CloogDomain *, n_dom); - if (!domain) - cloog_die("memory overflow.\n"); - - for (i = 0; i < n_dom; ++i) { - int dim; - - domain[i] = cloog_domain_union_read(options->state, file, - nb_par); - dim = cloog_domain_dimension(domain[i]); - if (dim > n_iter) - n_iter = dim; - - /* To read that stupid "0 0 0" line. */ - if (!next_line(file, line, sizeof(line))) - cloog_die("Input error.\n"); - if (sscanf(line, " %d %d %d", &op1, &op2, &op3) != 3) - cloog_die("Input error.\n"); - } - - /* Reading of the iterator names. */ - names = cloog_names_read_strings(file, n_iter); - - /* Reading and putting the scattering data in program structure. */ - scatteringl = cloog_scattering_list_read(file, domain, n_dom, nb_par); - - if (scatteringl) { - CloogScatteringList *is, *next; - - if (cloog_scattering_list_lazy_same(scatteringl)) - cloog_msg(options, CLOOG_WARNING, - "some scattering functions are similar.\n"); - - for (i = 0, is = scatteringl; i < n_dom; ++i, is = next) { - next = is->next; - ud = cloog_union_domain_add_domain(ud, NULL, domain[i], - is->scatt, NULL); - free(is); - } - } else { - for (i = 0; i < n_dom; ++i) - ud = cloog_union_domain_add_domain(ud, NULL, domain[i], - NULL, NULL); - } - - ud = set_names_from_list(ud, CLOOG_ITER, n_iter, names); - - if (scatteringl) { - int n_scat = ud->n_name[CLOOG_SCAT]; - names = cloog_names_read_strings(file, n_scat); - ud = set_names_from_list(ud, CLOOG_SCAT, n_scat, names); - } - - free(domain); - - return ud; -} - - -#ifdef OSL_SUPPORT -/** - * Extracts a CloogUnionDomain from an openscop scop (the CloogUnionDomain - * corresponds more or less to the openscop statement). - * \param[in,out] state CLooG state. - * \param[in] scop OpenScop scop to convert. - * \return A new CloogUnionDomain corresponding the input OpenScop scop. - */ -CloogUnionDomain *cloog_union_domain_from_osl_scop(CloogState *state, - osl_scop_p scop) { - int i, nb_parameters; - CloogDomain *domain = NULL; - CloogScattering *scattering = NULL; - CloogUnionDomain *ud = NULL; - osl_scop_p normalized; - osl_statement_p statement; - osl_scatnames_p scatnames; - - /* Set the union of domains. */ - nb_parameters = (scop->context == NULL) ? 0 : scop->context->nb_parameters; - ud = cloog_union_domain_alloc(nb_parameters); - - /* - Set the parameter names. */ - if (osl_generic_has_URI(scop->parameters, OSL_URI_STRINGS)) { - for (i = 0; i < osl_strings_size(scop->parameters->data); i++) { - ud = cloog_union_domain_set_name(ud, CLOOG_PARAM, i, - ((osl_strings_p)(scop->parameters->data))->string[i]); - } - } - - /* - Set each statement (domain/scattering). - * Since CLooG requires all number of scattering dimensions to be - * equal, we normalize them first. - */ - normalized = osl_scop_clone(scop); - osl_scop_normalize_scattering(normalized); - statement = normalized->statement; - while(statement != NULL) { - domain = cloog_domain_from_osl_relation(state, statement->domain); - scattering = cloog_scattering_from_osl_relation(state, - statement->scattering); - ud = cloog_union_domain_add_domain(ud, NULL, domain, scattering, NULL); - statement = statement->next; - } - osl_scop_free(normalized); - - /* - Set the scattering dimension names. */ - scatnames = osl_generic_lookup(scop->extension, OSL_URI_SCATNAMES); - if ((scatnames != NULL) && (scatnames->names != NULL)) { - for (i = 0; (i < osl_strings_size(scatnames->names)) && - (i < ud->n_name[CLOOG_SCAT]); i++) { - ud = cloog_union_domain_set_name(ud, CLOOG_SCAT, i, - scatnames->names->string[i]); - } - } - - return ud; -} -#endif diff --git a/cloog-0.17.0/source/version.c b/cloog-0.17.0/source/version.c deleted file mode 100644 index f1b86e2..0000000 --- a/cloog-0.17.0/source/version.c +++ /dev/null @@ -1,24 +0,0 @@ -#include "version.h" -#include "cloog/version.h" - -#define CLOOG_BITS "gmp" - -const char *cloog_version(void) -{ - return "CLooG "CLOOG_HEAD" "CLOOG_BITS" bits"; -} - -int cloog_version_major(void) -{ - return CLOOG_VERSION_MAJOR; -} - -int cloog_version_minor(void) -{ - return CLOOG_VERSION_MINOR; -} - -int cloog_version_revision(void) -{ - return CLOOG_VERSION_REVISION; -} diff --git a/cloog-0.17.0/source/version.c.in b/cloog-0.17.0/source/version.c.in deleted file mode 100644 index f5d026e..0000000 --- a/cloog-0.17.0/source/version.c.in +++ /dev/null @@ -1,24 +0,0 @@ -#include "version.h" -#include "cloog/version.h" - -#define CLOOG_BITS "@BITS@" - -const char *cloog_version(void) -{ - return "CLooG "CLOOG_HEAD" "CLOOG_BITS" bits"; -} - -int cloog_version_major(void) -{ - return CLOOG_VERSION_MAJOR; -} - -int cloog_version_minor(void) -{ - return CLOOG_VERSION_MINOR; -} - -int cloog_version_revision(void) -{ - return CLOOG_VERSION_REVISION; -} diff --git a/cloog-0.17.0/test/0D-1.c b/cloog-0.17.0/test/0D-1.c deleted file mode 100644 index 7f24623..0000000 --- a/cloog-0.17.0/test/0D-1.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/0D-1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -S1() ; diff --git a/cloog-0.17.0/test/0D-1.cloog b/cloog-0.17.0/test/0D-1.cloog deleted file mode 100644 index 226e7cb..0000000 --- a/cloog-0.17.0/test/0D-1.cloog +++ /dev/null @@ -1,13 +0,0 @@ -c - -0 2 -0 - -1 - -1 -0 2 -0 0 0 -0 - -0 diff --git a/cloog-0.17.0/test/0D-1.good.c b/cloog-0.17.0/test/0D-1.good.c deleted file mode 100644 index 0a37a56..0000000 --- a/cloog-0.17.0/test/0D-1.good.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Generated from ../../../git/cloog/test/0D-1.cloog by CLooG 0.14.0-117-g5444fca gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } - -void test() -{ - S1() ; -} diff --git a/cloog-0.17.0/test/0D-2.c b/cloog-0.17.0/test/0D-2.c deleted file mode 100644 index 4aa9c17..0000000 --- a/cloog-0.17.0/test/0D-2.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Generated from ../../../git/cloog/test/0D-2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -if (M >= 0) { - S1() ; -} diff --git a/cloog-0.17.0/test/0D-2.cloog b/cloog-0.17.0/test/0D-2.cloog deleted file mode 100644 index 69f2015..0000000 --- a/cloog-0.17.0/test/0D-2.cloog +++ /dev/null @@ -1,14 +0,0 @@ -c - -0 3 -0 - -1 - -1 -1 3 -1 1 0 -0 0 0 -0 - -0 diff --git a/cloog-0.17.0/test/0D-2.good.c b/cloog-0.17.0/test/0D-2.good.c deleted file mode 100644 index 65a12c6..0000000 --- a/cloog-0.17.0/test/0D-2.good.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/0D-2.cloog by CLooG 0.14.0-117-g5444fca gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } - -void test(int M) -{ - if (M >= 0) { - S1() ; - } -} diff --git a/cloog-0.17.0/test/0D-3.c b/cloog-0.17.0/test/0D-3.c deleted file mode 100644 index 62b4269..0000000 --- a/cloog-0.17.0/test/0D-3.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/0D-3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -S1() ; diff --git a/cloog-0.17.0/test/0D-3.cloog b/cloog-0.17.0/test/0D-3.cloog deleted file mode 100644 index ab4d59c..0000000 --- a/cloog-0.17.0/test/0D-3.cloog +++ /dev/null @@ -1,15 +0,0 @@ -c - -1 3 -1 1 0 -0 - -1 - -1 -1 3 -1 1 0 -0 0 0 -0 - -0 diff --git a/cloog-0.17.0/test/0D-3.good.c b/cloog-0.17.0/test/0D-3.good.c deleted file mode 100644 index 10150eb..0000000 --- a/cloog-0.17.0/test/0D-3.good.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Generated from ../../../git/cloog/test/0D-3.cloog by CLooG 0.14.0-117-g5444fca gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } - -void test(int M) -{ - S1() ; -} diff --git a/cloog-0.17.0/test/1point-1.c b/cloog-0.17.0/test/1point-1.c deleted file mode 100644 index 7c0106b..0000000 --- a/cloog-0.17.0/test/1point-1.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/1point-1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -S1(2*M,M) ; diff --git a/cloog-0.17.0/test/1point-1.cloog b/cloog-0.17.0/test/1point-1.cloog deleted file mode 100644 index 318d89b..0000000 --- a/cloog-0.17.0/test/1point-1.cloog +++ /dev/null @@ -1,23 +0,0 @@ -# language: C -c - -# Context -#{M | } -1 3 -# M 1 -1 0 1 -0 - -1 # Number of statements - -1 -#{i, j | i=2N; i=2j} -3 5 -# i j M 1 -0 1 0 -2 0 -0 1 -2 0 0 -1 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/1point-1.good.c b/cloog-0.17.0/test/1point-1.good.c deleted file mode 100644 index 196f8a9..0000000 --- a/cloog-0.17.0/test/1point-1.good.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Generated from ../../../git/cloog/test/1point-1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - i = 2*M ; - S1(2*M,M) ; -} diff --git a/cloog-0.17.0/test/1point-2.c b/cloog-0.17.0/test/1point-2.c deleted file mode 100644 index 48f6ad4..0000000 --- a/cloog-0.17.0/test/1point-2.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/1point-2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -S1(2*M,N+2) ; diff --git a/cloog-0.17.0/test/1point-2.cloog b/cloog-0.17.0/test/1point-2.cloog deleted file mode 100644 index 66eec58..0000000 --- a/cloog-0.17.0/test/1point-2.cloog +++ /dev/null @@ -1,23 +0,0 @@ -# language: C -c - -# Context -#{M,N | } -1 4 -# M N 1 -1 0 0 1 -0 - -1 # Number of statements - -1 -# -3 6 -# i j M N 1 -0 1 0 -2 0 0 -0 2 -2 -4 2 4 -1 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/1point-2.good.c b/cloog-0.17.0/test/1point-2.good.c deleted file mode 100644 index 9880504..0000000 --- a/cloog-0.17.0/test/1point-2.good.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated from ../../../git/cloog/test/1point-2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - i = 2*M ; - j = N+2 ; - S1(2*M,N+2) ; -} diff --git a/cloog-0.17.0/test/4-param.c b/cloog-0.17.0/test/4-param.c deleted file mode 100644 index b542796..0000000 --- a/cloog-0.17.0/test/4-param.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/4-param.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.18s. */ -for (i=m;i<=min(n,p-1);i++) { - S1(i) ; -} -for (i=p;i<=min(q,m-1);i++) { - S2(i) ; -} -for (i=max(m,p);i<=min(n,q);i++) { - S1(i) ; - S2(i) ; -} -for (i=max(max(m,p),q+1);i<=n;i++) { - S1(i) ; -} -for (i=max(max(m,p),n+1);i<=q;i++) { - S2(i) ; -} diff --git a/cloog-0.17.0/test/4-param.cloog b/cloog-0.17.0/test/4-param.cloog deleted file mode 100644 index a19ba08..0000000 --- a/cloog-0.17.0/test/4-param.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# language: C -c - -# Context -# parameters m n p q -1 6 -# m n p q 1 -1 0 0 0 0 1 -1 -m n p q - -2 # Number of statements - -1 -# S1 i,... -3 7 -# i m n p q 1 -1 1 -1 0 0 0 0 -1 -1 0 1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 -# -3 7 -# i m n p q 1 -1 1 0 0 -1 0 0 -1 -1 0 0 0 1 0 -1 0 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/4-param.good.c b/cloog-0.17.0/test/4-param.good.c deleted file mode 100644 index 563b90b..0000000 --- a/cloog-0.17.0/test/4-param.good.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Generated from ../../../git/cloog/test/4-param.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } - -void test(int m, int n, int p, int q) -{ - /* Original iterators. */ - int i; - for (i=m;i<=min(min(n,p-1),q);i++) { - S1(i) ; - } - for (i=p;i<=min(min(q,m-1),n);i++) { - S2(i) ; - } - for (i=max(m,p);i<=min(n,q);i++) { - S1(i) ; - S2(i) ; - } - for (i=max(m,q+1);i<=n;i++) { - S1(i) ; - } - for (i=max(p,n+1);i<=q;i++) { - S2(i) ; - } -} diff --git a/cloog-0.17.0/test/Makefile.am b/cloog-0.17.0/test/Makefile.am deleted file mode 100644 index 65a8e5a..0000000 --- a/cloog-0.17.0/test/Makefile.am +++ /dev/null @@ -1,345 +0,0 @@ -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** makefile ** -# **-------------------------------------------------------------------** -# ** First version: march 6th 2003 ** -# **-------------------------------------------------------------------**/ -# -# makefile for checking. - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2003 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * This file has been written with the help of the Bart Kienhuis's checking * -# * makefile for PipLib. * -# * * -# *****************************************************************************/ - -if NO_ISL -GENERATE_TEST = -else -GENERATE_TEST = generate_test -endif -noinst_PROGRAMS = $(GENERATE_TEST) -INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -LDADD = ../libcloog-isl.la -generate_test_SOURCES = generate_test.c - -FORCE: -../libcloog-isl.la: FORCE - cd ..; $(MAKE) $(AM_MAKEFLAGS) libcloog-isl.la - -ROOT = .. - -FINITE_CLOOGTEST_C = \ - 0D-1 \ - 0D-2 \ - 0D-3 \ - 1point-1 \ - 1point-2 \ - 4-param \ - basic-bounds-1 \ - basic-bounds-2 \ - basic-bounds-3 \ - basic-bounds-4 \ - basic-bounds-5 \ - basic-bounds-6 \ - block \ - block2 \ - block3 \ - byu98-1-2-3 \ - cholesky \ - cholesky2 \ - christian \ - classen \ - classen2 \ - constant \ - constbound \ - darte \ - dealII \ - donotsimp \ - dot \ - dot2 \ - double \ - durbin_e_s \ - emploi \ - esced \ - ex1 \ - forwardsub-1-1-2 \ - forwardsub-2-1-2-3 \ - forwardsub-3-1-2 \ - gauss \ - gesced \ - gesced2 \ - gesced3 \ - guide \ - iftest \ - iftest2 \ - largeur \ - levenshtein-1-2-3 \ - lex \ - lineality-1-2 \ - lineality-2-1-2 \ - logo \ - logopar \ - lu \ - lu2 \ - lub \ - lux \ - min-1-1 \ - min-2-1 \ - min-3-1 \ - min-4-1 \ - mode \ - multi-mm-1 \ - no_lindep \ - orc \ - rectangle \ - singleton \ - square+triangle-1-1-2-3 \ - swim \ - test \ - thomasset \ - tiling \ - uday_scalars \ - union \ - vivien \ - vivien2 \ - walters \ - walters2 \ - walters3 \ - wavefront \ - yosr \ - yosr2 \ - non_optimal/nul_complex1 \ - non_optimal/usvd_e_t \ - non_optimal/youcef \ - reservoir/cholesky2 \ - reservoir/fusion1 \ - reservoir/fusion2 \ - reservoir/jacobi2 \ - reservoir/jacobi3 \ - reservoir/lim-lam1 \ - reservoir/lim-lam2 \ - reservoir/lim-lam3 \ - reservoir/lim-lam4 \ - reservoir/lim-lam5 \ - reservoir/lim-lam6 \ - reservoir/liu-zhuge1 \ - reservoir/loechner3 \ - reservoir/loechner4 \ - reservoir/loechner5 \ - reservoir/mg-interp2 \ - reservoir/mg-interp \ - reservoir/mg-psinv \ - reservoir/mg-resid \ - reservoir/mg-rprj3 \ - reservoir/pingali1 \ - reservoir/pingali2 \ - reservoir/pingali3 \ - reservoir/pingali4 \ - reservoir/pingali5 \ - reservoir/pingali6 \ - reservoir/QR \ - reservoir/tang-xue1 \ - reservoir/two - -CLOOG_ISL_TEST_C = \ - isl/mod \ - isl/mod2 \ - isl/mod3 \ - isl/mod4 - -CLOOGTEST_C = \ - infinite \ - infinite2 \ - infinite3 \ - infinite4 \ - $(FINITE_CLOOGTEST_C) \ - $(CLOOG_ISL_TEST_C) - -CLOOGTEST_FORTRAN = \ - dartef \ - iftestf \ - levenshtein-1-2-3f \ - yosrf - -CLOOG_ISL_TEST_STRIDED = \ - isl/mxm-shared - -CLOOGTEST_STRIDED = \ - basic-bounds-2 \ - mod4 \ - nul_basic1 \ - nul_basic2 \ - nul_lcpc \ - multi-stride \ - multi-stride2 \ - stride3 \ - stride4 \ - reservoir/bastoul3 \ - reservoir/stride \ - reservoir/stride2 \ - $(CLOOG_ISL_TEST_STRIDED) - -if NO_OSL -CLOOGTEST_OPENSCOP = -else -CLOOGTEST_OPENSCOP = \ - openscop/matmult \ - openscop/empty \ - openscop/union -endif - -SPECIAL_TESTS = \ - isl/unroll \ - isl/jacobi-shared \ - isl/unroll2 \ - backtrack \ - vasilache \ - merge \ - equality \ - equality2 \ - otl \ - param-split \ - pouchet \ - stride \ - stride2 \ - sor1d - -SPECIAL_OPTIONS = \ - 'isl/unroll -first-unroll 1' \ - 'isl/jacobi-shared -f 4 -l -1 -override -strides 1 -sh 1' \ - 'isl/unroll2 -first-unroll 1' \ - 'backtrack -f 1 -backtrack' \ - 'vasilache -f 8 -l 9' \ - 'merge -f -1' \ - 'equality -f -1 -l 2 -override' \ - 'equality2 -f -1 -l 4 -esp 1 -override' \ - 'otl -block 1 -esp 0 -otl 0' \ - 'param-split -f -1' \ - 'pouchet -f 3 -l 7' \ - 'stride -f -1 -strides 1' \ - 'stride2 -f -1 -strides 1' \ - 'sor1d -f -1' - -generate: - @echo " /*-----------------------------------------------*" - @echo " * Generate files *" - @echo " *-----------------------------------------------*/" - @for x in $(CLOOGTEST_C) ; do \ - echo "Generate $$x.c" ; \ - $(top_builddir)/cloog $(srcdir)/$$x.cloog -o $(srcdir)/$$x.c ; \ - done ; \ - for x in $(CLOOGTEST_FORTRAN) ; do \ - echo "Generate $$x.f" ; \ - $(top_builddir)/cloog $(srcdir)/$$x.cloog -o $(srcdir)/$$x.f ; \ - done ; \ - for x in $(CLOOGTEST_STRIDED) ; do \ - echo "Generate $$x.c" ; \ - $(top_builddir)/cloog $(srcdir)/$$x.cloog \ - -strides 1 -o $(srcdir)/$$x.c ; \ - done ; \ - for x in $(CLOOGTEST_OPENSCOP) ; do \ - echo "Generate $$x.c" ; \ - $(top_builddir)/cloog $(srcdir)/$$x.scop \ - -openscop -o $(srcdir)/$$x.c ; \ - done ; \ - for line in $(SPECIAL_OPTIONS); do \ - options=`echo $$line | sed -e 's/^[^ ]* //'`; \ - x=`echo $$line | sed -e 's/ .*//'`; \ - echo "Generate file $$x ($$options)" ; \ - $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog \ - $$options > $(srcdir)/$$x.c ; \ - done - -generate_good: - @for x in $(FINITE_CLOOGTEST_C) ; do \ - echo "Generate $$x.good.c" ; \ - $(top_builddir)/cloog$(EXEEXT) -callable 1 $(srcdir)/$$x.cloog -o $(srcdir)/$$x.good.c ; \ - done; \ - for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \ - echo "Generate $$x.good.c ($$options)" ; \ - $(top_builddir)/cloog$(EXEEXT) -callable 1 $$options $(srcdir)/$$x.cloog -o $(srcdir)/$$x.good.c ; \ - done; done - -valgrind: - @echo " /*-----------------------------------------------*" - @echo " * Checking files by Valgrind *" - @echo " *-----------------------------------------------*/" - for x in $(CLOOGTEST_C) ; do \ - echo "Valgrinding $$x.c" ; \ - valgrind $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog ; \ - done ; \ - for x in $(CLOOGTEST_FORTRAN) ; do \ - echo "Valgrinding $$x.f" ; \ - valgrind $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog ; \ - done - -CHECKER := "$(srcdir)/checker.sh" - -TESTS_ENVIRONMENT = \ - top_builddir=$(top_builddir) \ - srcdir=$(srcdir) \ - EXEXT=$(EXEEXT) \ - CHECKER=$(CHECKER) \ - COMPILE="$(COMPILE)" \ - LINK="$(LINK)" \ - FINITE_CLOOGTEST_C="$(FINITE_CLOOGTEST_C)" \ - CLOOGTEST_C="$(CLOOGTEST_C)" \ - CLOOGTEST_FORTRAN="$(CLOOGTEST_FORTRAN)" \ - CLOOGTEST_STRIDED="$(CLOOGTEST_STRIDED)" \ - CLOOGTEST_OPENSCOP="$(CLOOGTEST_OPENSCOP)" \ - SPECIAL_OPTIONS="$(SPECIAL_OPTIONS)" - -test_run: generate_test$(EXEEXT) - $(TESTS_ENVIRONMENT) \ - $(srcdir)/check_run.sh - -check_SCRIPTS = \ - $(srcdir)/check_c.sh \ - $(srcdir)/check_fortran.sh \ - $(srcdir)/check_strided.sh \ - $(srcdir)/check_openscop.sh \ - $(srcdir)/check_special.sh - -TESTS = $(check_SCRIPTS) - -EXTRA_DIST = \ - $(check_SCRIPTS) \ - $(srcdir)/checker.sh \ - $(srcdir)/check_run.sh \ - $(CLOOGTEST_C:%=%.cloog) \ - $(CLOOGTEST_C:%=%.c) \ - $(FINITE_CLOOGTEST_C:%=%.good.c) \ - $(CLOOGTEST_FORTRAN:%=%.cloog) \ - $(CLOOGTEST_FORTRAN:%=%.f) \ - $(CLOOGTEST_STRIDED:%=%.cloog) \ - $(CLOOGTEST_STRIDED:%=%.c) \ - $(CLOOGTEST_OPENSCOP:%=%.scop) \ - $(CLOOGTEST_OPENSCOP:%=%.c) \ - $(SPECIAL_TESTS:%=%.cloog) \ - $(SPECIAL_TESTS:%=%.c) \ - $(SPECIAL_TESTS:%=%.good.c) diff --git a/cloog-0.17.0/test/Makefile.in b/cloog-0.17.0/test/Makefile.in deleted file mode 100644 index 2a971ce..0000000 --- a/cloog-0.17.0/test/Makefile.in +++ /dev/null @@ -1,945 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** makefile ** -# **-------------------------------------------------------------------** -# ** First version: march 6th 2003 ** -# **-------------------------------------------------------------------**/ -# -# makefile for checking. - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2003 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * This file has been written with the help of the Bart Kienhuis's checking * -# * makefile for PipLib. * -# * * -# *****************************************************************************/ - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -noinst_PROGRAMS = $(am__EXEEXT_1) -subdir = test -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_maxopt.m4 \ - $(top_srcdir)/m4/ax_cflags_warn_all.m4 \ - $(top_srcdir)/m4/ax_check_compiler_flags.m4 \ - $(top_srcdir)/m4/ax_compiler_vendor.m4 \ - $(top_srcdir)/m4/ax_create_pkgconfig_info.m4 \ - $(top_srcdir)/m4/ax_gcc_archflag.m4 \ - $(top_srcdir)/m4/ax_gcc_x86_cpuid.m4 \ - $(top_srcdir)/m4/ax_submodule.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -@NO_ISL_FALSE@am__EXEEXT_1 = generate_test$(EXEEXT) -PROGRAMS = $(noinst_PROGRAMS) -am_generate_test_OBJECTS = generate_test.$(OBJEXT) -generate_test_OBJECTS = $(am_generate_test_OBJECTS) -generate_test_LDADD = $(LDADD) -generate_test_DEPENDENCIES = ../libcloog-isl.la -AM_V_lt = $(am__v_lt_$(V)) -am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) -am__v_lt_0 = --silent -DEFAULT_INCLUDES = -I.@am__isrc@ -depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_$(V)) -am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) -am__v_CC_0 = @echo " CC " $@; -AM_V_at = $(am__v_at_$(V)) -am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) -am__v_at_0 = @ -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_$(V)) -am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) -am__v_CCLD_0 = @echo " CCLD " $@; -AM_V_GEN = $(am__v_GEN_$(V)) -am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) -am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(generate_test_SOURCES) -DIST_SOURCES = $(generate_test_SOURCES) -ETAGS = etags -CTAGS = ctags -am__tty_colors = \ -red=; grn=; lgn=; blu=; std= -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BITS = @BITS@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CD = @CD@ -CFLAGS = @CFLAGS@ -CFLAGS_WARN = @CFLAGS_WARN@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GIT_INDEX = @GIT_INDEX@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -ISL_CPPFLAGS = @ISL_CPPFLAGS@ -ISL_LDFLAGS = @ISL_LDFLAGS@ -ISL_LIBS = @ISL_LIBS@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OSL_CPPFLAGS = @OSL_CPPFLAGS@ -OSL_LDFLAGS = @OSL_LDFLAGS@ -OSL_LIBS = @OSL_LIBS@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PRTDIAG = @PRTDIAG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TEXI2DVI = @TEXI2DVI@ -VERSION = @VERSION@ -VERSION_MAJOR = @VERSION_MAJOR@ -VERSION_MINOR = @VERSION_MINOR@ -VERSION_REVISION = @VERSION_REVISION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfig_libdir = @pkgconfig_libdir@ -pkgconfig_libfile = @pkgconfig_libfile@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -subdirs = @subdirs@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -versioninfo = @versioninfo@ -@NO_ISL_FALSE@GENERATE_TEST = generate_test -@NO_ISL_TRUE@GENERATE_TEST = -INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -LDADD = ../libcloog-isl.la -generate_test_SOURCES = generate_test.c -ROOT = .. -FINITE_CLOOGTEST_C = \ - 0D-1 \ - 0D-2 \ - 0D-3 \ - 1point-1 \ - 1point-2 \ - 4-param \ - basic-bounds-1 \ - basic-bounds-2 \ - basic-bounds-3 \ - basic-bounds-4 \ - basic-bounds-5 \ - basic-bounds-6 \ - block \ - block2 \ - block3 \ - byu98-1-2-3 \ - cholesky \ - cholesky2 \ - christian \ - classen \ - classen2 \ - constant \ - constbound \ - darte \ - dealII \ - donotsimp \ - dot \ - dot2 \ - double \ - durbin_e_s \ - emploi \ - esced \ - ex1 \ - forwardsub-1-1-2 \ - forwardsub-2-1-2-3 \ - forwardsub-3-1-2 \ - gauss \ - gesced \ - gesced2 \ - gesced3 \ - guide \ - iftest \ - iftest2 \ - largeur \ - levenshtein-1-2-3 \ - lex \ - lineality-1-2 \ - lineality-2-1-2 \ - logo \ - logopar \ - lu \ - lu2 \ - lub \ - lux \ - min-1-1 \ - min-2-1 \ - min-3-1 \ - min-4-1 \ - mode \ - multi-mm-1 \ - no_lindep \ - orc \ - rectangle \ - singleton \ - square+triangle-1-1-2-3 \ - swim \ - test \ - thomasset \ - tiling \ - uday_scalars \ - union \ - vivien \ - vivien2 \ - walters \ - walters2 \ - walters3 \ - wavefront \ - yosr \ - yosr2 \ - non_optimal/nul_complex1 \ - non_optimal/usvd_e_t \ - non_optimal/youcef \ - reservoir/cholesky2 \ - reservoir/fusion1 \ - reservoir/fusion2 \ - reservoir/jacobi2 \ - reservoir/jacobi3 \ - reservoir/lim-lam1 \ - reservoir/lim-lam2 \ - reservoir/lim-lam3 \ - reservoir/lim-lam4 \ - reservoir/lim-lam5 \ - reservoir/lim-lam6 \ - reservoir/liu-zhuge1 \ - reservoir/loechner3 \ - reservoir/loechner4 \ - reservoir/loechner5 \ - reservoir/mg-interp2 \ - reservoir/mg-interp \ - reservoir/mg-psinv \ - reservoir/mg-resid \ - reservoir/mg-rprj3 \ - reservoir/pingali1 \ - reservoir/pingali2 \ - reservoir/pingali3 \ - reservoir/pingali4 \ - reservoir/pingali5 \ - reservoir/pingali6 \ - reservoir/QR \ - reservoir/tang-xue1 \ - reservoir/two - -CLOOG_ISL_TEST_C = \ - isl/mod \ - isl/mod2 \ - isl/mod3 \ - isl/mod4 - -CLOOGTEST_C = \ - infinite \ - infinite2 \ - infinite3 \ - infinite4 \ - $(FINITE_CLOOGTEST_C) \ - $(CLOOG_ISL_TEST_C) - -CLOOGTEST_FORTRAN = \ - dartef \ - iftestf \ - levenshtein-1-2-3f \ - yosrf - -CLOOG_ISL_TEST_STRIDED = \ - isl/mxm-shared - -CLOOGTEST_STRIDED = \ - basic-bounds-2 \ - mod4 \ - nul_basic1 \ - nul_basic2 \ - nul_lcpc \ - multi-stride \ - multi-stride2 \ - stride3 \ - stride4 \ - reservoir/bastoul3 \ - reservoir/stride \ - reservoir/stride2 \ - $(CLOOG_ISL_TEST_STRIDED) - -@NO_OSL_FALSE@CLOOGTEST_OPENSCOP = \ -@NO_OSL_FALSE@ openscop/matmult \ -@NO_OSL_FALSE@ openscop/empty \ -@NO_OSL_FALSE@ openscop/union - -@NO_OSL_TRUE@CLOOGTEST_OPENSCOP = -SPECIAL_TESTS = \ - isl/unroll \ - isl/jacobi-shared \ - isl/unroll2 \ - backtrack \ - vasilache \ - merge \ - equality \ - equality2 \ - otl \ - param-split \ - pouchet \ - stride \ - stride2 \ - sor1d - -SPECIAL_OPTIONS = \ - 'isl/unroll -first-unroll 1' \ - 'isl/jacobi-shared -f 4 -l -1 -override -strides 1 -sh 1' \ - 'isl/unroll2 -first-unroll 1' \ - 'backtrack -f 1 -backtrack' \ - 'vasilache -f 8 -l 9' \ - 'merge -f -1' \ - 'equality -f -1 -l 2 -override' \ - 'equality2 -f -1 -l 4 -esp 1 -override' \ - 'otl -block 1 -esp 0 -otl 0' \ - 'param-split -f -1' \ - 'pouchet -f 3 -l 7' \ - 'stride -f -1 -strides 1' \ - 'stride2 -f -1 -strides 1' \ - 'sor1d -f -1' - -CHECKER := "$(srcdir)/checker.sh" -TESTS_ENVIRONMENT = \ - top_builddir=$(top_builddir) \ - srcdir=$(srcdir) \ - EXEXT=$(EXEEXT) \ - CHECKER=$(CHECKER) \ - COMPILE="$(COMPILE)" \ - LINK="$(LINK)" \ - FINITE_CLOOGTEST_C="$(FINITE_CLOOGTEST_C)" \ - CLOOGTEST_C="$(CLOOGTEST_C)" \ - CLOOGTEST_FORTRAN="$(CLOOGTEST_FORTRAN)" \ - CLOOGTEST_STRIDED="$(CLOOGTEST_STRIDED)" \ - CLOOGTEST_OPENSCOP="$(CLOOGTEST_OPENSCOP)" \ - SPECIAL_OPTIONS="$(SPECIAL_OPTIONS)" - -check_SCRIPTS = \ - $(srcdir)/check_c.sh \ - $(srcdir)/check_fortran.sh \ - $(srcdir)/check_strided.sh \ - $(srcdir)/check_openscop.sh \ - $(srcdir)/check_special.sh - -TESTS = $(check_SCRIPTS) -EXTRA_DIST = \ - $(check_SCRIPTS) \ - $(srcdir)/checker.sh \ - $(srcdir)/check_run.sh \ - $(CLOOGTEST_C:%=%.cloog) \ - $(CLOOGTEST_C:%=%.c) \ - $(FINITE_CLOOGTEST_C:%=%.good.c) \ - $(CLOOGTEST_FORTRAN:%=%.cloog) \ - $(CLOOGTEST_FORTRAN:%=%.f) \ - $(CLOOGTEST_STRIDED:%=%.cloog) \ - $(CLOOGTEST_STRIDED:%=%.c) \ - $(CLOOGTEST_OPENSCOP:%=%.scop) \ - $(CLOOGTEST_OPENSCOP:%=%.c) \ - $(SPECIAL_TESTS:%=%.cloog) \ - $(SPECIAL_TESTS:%=%.c) \ - $(SPECIAL_TESTS:%=%.good.c) - -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign test/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list -generate_test$(EXEEXT): $(generate_test_OBJECTS) $(generate_test_DEPENDENCIES) - @rm -f generate_test$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(generate_test_OBJECTS) $(generate_test_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generate_test.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; skip=0; \ - srcdir=$(srcdir); export srcdir; \ - list=' $(TESTS) '; \ - $(am__tty_colors); \ - if test -n "$$list"; then \ - for tst in $$list; do \ - if test -f ./$$tst; then dir=./; \ - elif test -f $$tst; then dir=; \ - else dir="$(srcdir)/"; fi; \ - if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xpass=`expr $$xpass + 1`; \ - failed=`expr $$failed + 1`; \ - col=$$red; res=XPASS; \ - ;; \ - *) \ - col=$$grn; res=PASS; \ - ;; \ - esac; \ - elif test $$? -ne 77; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xfail=`expr $$xfail + 1`; \ - col=$$lgn; res=XFAIL; \ - ;; \ - *) \ - failed=`expr $$failed + 1`; \ - col=$$red; res=FAIL; \ - ;; \ - esac; \ - else \ - skip=`expr $$skip + 1`; \ - col=$$blu; res=SKIP; \ - fi; \ - echo "$${col}$$res$${std}: $$tst"; \ - done; \ - if test "$$all" -eq 1; then \ - tests="test"; \ - All=""; \ - else \ - tests="tests"; \ - All="All "; \ - fi; \ - if test "$$failed" -eq 0; then \ - if test "$$xfail" -eq 0; then \ - banner="$$All$$all $$tests passed"; \ - else \ - if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ - banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ - fi; \ - else \ - if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all $$tests failed"; \ - else \ - if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ - banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ - fi; \ - fi; \ - dashes="$$banner"; \ - skipped=""; \ - if test "$$skip" -ne 0; then \ - if test "$$skip" -eq 1; then \ - skipped="($$skip test was not run)"; \ - else \ - skipped="($$skip tests were not run)"; \ - fi; \ - test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$skipped"; \ - fi; \ - report=""; \ - if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ - report="Please report to $(PACKAGE_BUGREPORT)"; \ - test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$report"; \ - fi; \ - dashes=`echo "$$dashes" | sed s/./=/g`; \ - if test "$$failed" -eq 0; then \ - echo "$$grn$$dashes"; \ - else \ - echo "$$red$$dashes"; \ - fi; \ - echo "$$banner"; \ - test -z "$$skipped" || echo "$$skipped"; \ - test -z "$$report" || echo "$$report"; \ - echo "$$dashes$$std"; \ - test "$$failed" -eq 0; \ - else :; fi - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS) - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: check-am -all-am: Makefile $(PROGRAMS) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: check-am install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ - clean-generic clean-libtool clean-noinstPROGRAMS ctags \ - distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am - - -FORCE: -../libcloog-isl.la: FORCE - cd ..; $(MAKE) $(AM_MAKEFLAGS) libcloog-isl.la - -generate: - @echo " /*-----------------------------------------------*" - @echo " * Generate files *" - @echo " *-----------------------------------------------*/" - @for x in $(CLOOGTEST_C) ; do \ - echo "Generate $$x.c" ; \ - $(top_builddir)/cloog $(srcdir)/$$x.cloog -o $(srcdir)/$$x.c ; \ - done ; \ - for x in $(CLOOGTEST_FORTRAN) ; do \ - echo "Generate $$x.f" ; \ - $(top_builddir)/cloog $(srcdir)/$$x.cloog -o $(srcdir)/$$x.f ; \ - done ; \ - for x in $(CLOOGTEST_STRIDED) ; do \ - echo "Generate $$x.c" ; \ - $(top_builddir)/cloog $(srcdir)/$$x.cloog \ - -strides 1 -o $(srcdir)/$$x.c ; \ - done ; \ - for x in $(CLOOGTEST_OPENSCOP) ; do \ - echo "Generate $$x.c" ; \ - $(top_builddir)/cloog $(srcdir)/$$x.scop \ - -openscop -o $(srcdir)/$$x.c ; \ - done ; \ - for line in $(SPECIAL_OPTIONS); do \ - options=`echo $$line | sed -e 's/^[^ ]* //'`; \ - x=`echo $$line | sed -e 's/ .*//'`; \ - echo "Generate file $$x ($$options)" ; \ - $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog \ - $$options > $(srcdir)/$$x.c ; \ - done - -generate_good: - @for x in $(FINITE_CLOOGTEST_C) ; do \ - echo "Generate $$x.good.c" ; \ - $(top_builddir)/cloog$(EXEEXT) -callable 1 $(srcdir)/$$x.cloog -o $(srcdir)/$$x.good.c ; \ - done; \ - for line in $(SPECIAL_OPTIONS); do echo $$line | while read x options; do \ - echo "Generate $$x.good.c ($$options)" ; \ - $(top_builddir)/cloog$(EXEEXT) -callable 1 $$options $(srcdir)/$$x.cloog -o $(srcdir)/$$x.good.c ; \ - done; done - -valgrind: - @echo " /*-----------------------------------------------*" - @echo " * Checking files by Valgrind *" - @echo " *-----------------------------------------------*/" - for x in $(CLOOGTEST_C) ; do \ - echo "Valgrinding $$x.c" ; \ - valgrind $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog ; \ - done ; \ - for x in $(CLOOGTEST_FORTRAN) ; do \ - echo "Valgrinding $$x.f" ; \ - valgrind $(top_builddir)/cloog$(EXEEXT) $(srcdir)/$$x.cloog ; \ - done - -test_run: generate_test$(EXEEXT) - $(TESTS_ENVIRONMENT) \ - $(srcdir)/check_run.sh - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/cloog-0.17.0/test/backtrack.c b/cloog-0.17.0/test/backtrack.c deleted file mode 100644 index 9895d83..0000000 --- a/cloog-0.17.0/test/backtrack.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/backtrack.cloog by CLooG 0.14.0-367-gf043665 gmp bits in 0.00s. */ -S1(0); diff --git a/cloog-0.17.0/test/backtrack.cloog b/cloog-0.17.0/test/backtrack.cloog deleted file mode 100644 index f8d978e..0000000 --- a/cloog-0.17.0/test/backtrack.cloog +++ /dev/null @@ -1,24 +0,0 @@ -c - -0 2 - -0 - -# Number of statements -1 - -1 # of domains -1 3 -0 1 0 -0 0 0 - -0 - -# of scattering functions -1 - -2 5 -0 1 0 -1 0 -0 0 1 0 0 - -0 diff --git a/cloog-0.17.0/test/backtrack.good.c b/cloog-0.17.0/test/backtrack.good.c deleted file mode 100644 index 5cb04a3..0000000 --- a/cloog-0.17.0/test/backtrack.good.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated from ../../../git/cloog/test/backtrack.cloog by CLooG 0.14.0-367-gf043665 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test() -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i; - S1(0); -} diff --git a/cloog-0.17.0/test/basic-bounds-1.c b/cloog-0.17.0/test/basic-bounds-1.c deleted file mode 100644 index 1ddede1..0000000 --- a/cloog-0.17.0/test/basic-bounds-1.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (i=0;i<=2;i++) { - S1(i) ; -} diff --git a/cloog-0.17.0/test/basic-bounds-1.cloog b/cloog-0.17.0/test/basic-bounds-1.cloog deleted file mode 100644 index 1c3ac40..0000000 --- a/cloog-0.17.0/test/basic-bounds-1.cloog +++ /dev/null @@ -1,21 +0,0 @@ -# language: C -c - -# Context -1 2 -1 1 -0 - -1 # Number of statements - -1 -# -3 3 -# i 1 -1 1 0 -1 -1 2 -1 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/basic-bounds-1.good.c b/cloog-0.17.0/test/basic-bounds-1.good.c deleted file mode 100644 index ab53e94..0000000 --- a/cloog-0.17.0/test/basic-bounds-1.good.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test() -{ - /* Original iterators. */ - int i; - for (i=0;i<=2;i++) { - S1(i) ; - } -} diff --git a/cloog-0.17.0/test/basic-bounds-2.c b/cloog-0.17.0/test/basic-bounds-2.c deleted file mode 100644 index 38780ff..0000000 --- a/cloog-0.17.0/test/basic-bounds-2.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -S1(0) ; diff --git a/cloog-0.17.0/test/basic-bounds-2.cloog b/cloog-0.17.0/test/basic-bounds-2.cloog deleted file mode 100644 index 45a51ba..0000000 --- a/cloog-0.17.0/test/basic-bounds-2.cloog +++ /dev/null @@ -1,21 +0,0 @@ -# language: C -c - -# Context -1 2 -1 1 -0 - -1 # Number of statements - -1 -# -3 3 -# i 1 -1 3 0 -1 -3 2 -1 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/basic-bounds-2.good.c b/cloog-0.17.0/test/basic-bounds-2.good.c deleted file mode 100644 index 48544ff..0000000 --- a/cloog-0.17.0/test/basic-bounds-2.good.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test() -{ - /* Original iterators. */ - int i; - S1(0) ; -} diff --git a/cloog-0.17.0/test/basic-bounds-3.c b/cloog-0.17.0/test/basic-bounds-3.c deleted file mode 100644 index f5fdaf8..0000000 --- a/cloog-0.17.0/test/basic-bounds-3.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (i=0;i<=M;i++) { - S1(i) ; -} diff --git a/cloog-0.17.0/test/basic-bounds-3.cloog b/cloog-0.17.0/test/basic-bounds-3.cloog deleted file mode 100644 index f3ad8bc..0000000 --- a/cloog-0.17.0/test/basic-bounds-3.cloog +++ /dev/null @@ -1,23 +0,0 @@ -# language: C -c - -# Context -2 3 -# M 1 -1 1 0 -1 0 1 -0 - -1 # Number of statements - -1 -# -3 4 -# i M 1 -1 1 0 0 -1 -1 1 0 -1 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/basic-bounds-3.good.c b/cloog-0.17.0/test/basic-bounds-3.good.c deleted file mode 100644 index c5c0f7c..0000000 --- a/cloog-0.17.0/test/basic-bounds-3.good.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test(int M) -{ - /* Original iterators. */ - int i; - for (i=0;i<=M;i++) { - S1(i) ; - } -} diff --git a/cloog-0.17.0/test/basic-bounds-4.c b/cloog-0.17.0/test/basic-bounds-4.c deleted file mode 100644 index 1f15c42..0000000 --- a/cloog-0.17.0/test/basic-bounds-4.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-4.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (i=0;i<=M+1;i++) { - S1(i) ; -} diff --git a/cloog-0.17.0/test/basic-bounds-4.cloog b/cloog-0.17.0/test/basic-bounds-4.cloog deleted file mode 100644 index 5e76687..0000000 --- a/cloog-0.17.0/test/basic-bounds-4.cloog +++ /dev/null @@ -1,23 +0,0 @@ -# language: C -c - -# Context -2 3 -# M 1 -1 1 0 -1 0 1 -0 - -1 # Number of statements - -1 -# -3 4 -# i M 1 -1 1 0 0 -1 -1 1 1 -1 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/basic-bounds-4.good.c b/cloog-0.17.0/test/basic-bounds-4.good.c deleted file mode 100644 index 310c948..0000000 --- a/cloog-0.17.0/test/basic-bounds-4.good.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-4.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test(int M) -{ - /* Original iterators. */ - int i; - for (i=0;i<=M+1;i++) { - S1(i) ; - } -} diff --git a/cloog-0.17.0/test/basic-bounds-5.c b/cloog-0.17.0/test/basic-bounds-5.c deleted file mode 100644 index 1761b56..0000000 --- a/cloog-0.17.0/test/basic-bounds-5.c +++ /dev/null @@ -1,3 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-5.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -j = floord(M+1,2) ; -S1(1,j) ; diff --git a/cloog-0.17.0/test/basic-bounds-5.cloog b/cloog-0.17.0/test/basic-bounds-5.cloog deleted file mode 100644 index 855a9bb..0000000 --- a/cloog-0.17.0/test/basic-bounds-5.cloog +++ /dev/null @@ -1,22 +0,0 @@ -# language: C -c - -# Context -1 3 -# M 1 -1 0 1 -0 - -1 # Number of statements - -1 -# {i,j,N | i=1; 2j-1<=N<=2j} -3 5 -# i j M 1 -0 1 0 0 -1 -1 0 2 -1 0 -1 0 -2 1 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/basic-bounds-5.good.c b/cloog-0.17.0/test/basic-bounds-5.good.c deleted file mode 100644 index 3e669c0..0000000 --- a/cloog-0.17.0/test/basic-bounds-5.good.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-5.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - j = floord(M+1,2) ; - S1(1,j) ; -} diff --git a/cloog-0.17.0/test/basic-bounds-6.c b/cloog-0.17.0/test/basic-bounds-6.c deleted file mode 100644 index 449ad37..0000000 --- a/cloog-0.17.0/test/basic-bounds-6.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-6.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -S1(-1) ; diff --git a/cloog-0.17.0/test/basic-bounds-6.cloog b/cloog-0.17.0/test/basic-bounds-6.cloog deleted file mode 100644 index 2acc2ab..0000000 --- a/cloog-0.17.0/test/basic-bounds-6.cloog +++ /dev/null @@ -1,20 +0,0 @@ -# language: C -c - -# Context -1 2 -1 1 -0 - -1 # Number of statements - -1 -3 3 -# i 1 -1 2 3 -1 -2 -1 -1 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/basic-bounds-6.good.c b/cloog-0.17.0/test/basic-bounds-6.good.c deleted file mode 100644 index a993e2f..0000000 --- a/cloog-0.17.0/test/basic-bounds-6.good.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/basic-bounds-6.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test() -{ - /* Original iterators. */ - int i; - S1(-1) ; -} diff --git a/cloog-0.17.0/test/block.c b/cloog-0.17.0/test/block.c deleted file mode 100644 index 2ba5668..0000000 --- a/cloog-0.17.0/test/block.c +++ /dev/null @@ -1,5 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/block.cloog by CLooG 0.14.0-170-g72daac3 gmp bits in 0.00s. */ -S1(); -S3(0); -S2(); -S3(1); diff --git a/cloog-0.17.0/test/block.cloog b/cloog-0.17.0/test/block.cloog deleted file mode 100644 index 9913b74..0000000 --- a/cloog-0.17.0/test/block.cloog +++ /dev/null @@ -1,42 +0,0 @@ -c - -0 2 - -0 - -3 - -1 -0 2 - -0 0 0 - -1 -0 2 - -0 0 0 - -1 -2 3 -1 1 0 -1 -1 1 - -0 0 0 - -0 - -3 - -2 4 -0 -1 0 0 # c1 = 0 -0 0 -1 0 # c2 = 0 - -2 4 -0 -1 0 1 # c1 = 1 -0 0 -1 0 # c2 = 0 - -2 5 -0 -1 0 1 0 # c1 = i -0 0 -1 0 1 # c2 = 1 - -0 diff --git a/cloog-0.17.0/test/block.good.c b/cloog-0.17.0/test/block.good.c deleted file mode 100644 index b2f280f..0000000 --- a/cloog-0.17.0/test/block.good.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/block.cloog by CLooG 0.14.0-170-g72daac3 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } -#define S2() { hash(2); } -#define S3(i) { hash(3); hash(i); } - -void test() -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i; - S1(); - S3(0); - S2(); - S3(1); -} diff --git a/cloog-0.17.0/test/block2.c b/cloog-0.17.0/test/block2.c deleted file mode 100644 index 7209a10..0000000 --- a/cloog-0.17.0/test/block2.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/block2.cloog by CLooG 0.14.0-302-g309b32c gmp bits in 0.01s. */ -for (c0=0;c0<=9;c0++) { - S1(c0,1); - S3(c0,1); - S2(c0,1); -} diff --git a/cloog-0.17.0/test/block2.cloog b/cloog-0.17.0/test/block2.cloog deleted file mode 100644 index 866c634..0000000 --- a/cloog-0.17.0/test/block2.cloog +++ /dev/null @@ -1,77 +0,0 @@ -# CLooG -> CLooG -# This is an automatic dump of a CLooG input file from a CloogInput data -# structure. - -# Language: C -c - -# Context: -0 2 - -0 # Parameter name(s) - -# Statement number: -3 - -# Iteration domain of statement 5 (ND_1IP_ED_0_0_V_0). -1 - -3 4 -0 0 1 -1 -1 1 0 0 -1 -1 0 9 - -0 0 0 # For future options. - -# Iteration domain of statement 6 (ND_1OP_ED_3_0_V_1). -1 - -3 4 -0 0 1 -1 -1 1 0 0 -1 -1 0 9 - -0 0 0 # For future options. - -# Iteration domain of statement 7 (ND_1). -1 - -3 4 -0 0 1 -1 -1 1 0 0 -1 -1 0 9 - -0 0 0 # For future options. - - -0 # Iterator name(s) - -# --------------------- SCATTERING -------------------- -3 # Scattering functions - -# Scattering of statement 5 (ND_1IP_ED_0_0_V_0). -1 - -3 7 -0 0 0 1 0 0 -6 -0 0 1 0 0 -1 0 -0 1 0 0 -1 0 0 - -# Scattering of statement 6 (ND_1OP_ED_3_0_V_1). -1 - -3 7 -0 0 0 1 0 0 -11 -0 0 1 0 0 -1 0 -0 1 0 0 -1 0 0 - -# Scattering of statement 7 (ND_1). -1 - -3 7 -0 0 0 1 0 0 -8 -0 0 1 0 0 -1 0 -0 1 0 0 -1 0 0 - -1 # Scattering dimension name(s) -c0 c1 c2 diff --git a/cloog-0.17.0/test/block2.good.c b/cloog-0.17.0/test/block2.good.c deleted file mode 100644 index 23a4942..0000000 --- a/cloog-0.17.0/test/block2.good.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/block2.cloog by CLooG 0.14.0-302-g309b32c gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } - -void test() -{ - /* Scattering iterators. */ - int c0, c1; - /* Original iterators. */ - int i, j; - for (c0=0;c0<=9;c0++) { - S1(c0,1); - S3(c0,1); - S2(c0,1); - } -} diff --git a/cloog-0.17.0/test/block3.c b/cloog-0.17.0/test/block3.c deleted file mode 100644 index 2c701e9..0000000 --- a/cloog-0.17.0/test/block3.c +++ /dev/null @@ -1,5 +0,0 @@ -/* Generated from ../../../git/cloog/test/block3.cloog by CLooG 0.16.2-4-gba4e834 gmp bits in 0.00s. */ -S1(); -S3(0); -S2(); -S3(1); diff --git a/cloog-0.17.0/test/block3.cloog b/cloog-0.17.0/test/block3.cloog deleted file mode 100644 index fd9997d..0000000 --- a/cloog-0.17.0/test/block3.cloog +++ /dev/null @@ -1,36 +0,0 @@ -C - -0 2 - -0 - -3 - -1 -0 2 -0 0 0 - -1 -0 2 -0 0 0 - -1 -2 3 -1 1 0 -1 -1 1 -0 0 0 - -0 - -3 - -1 3 -0 -1 0 - -1 3 -0 -1 1 - -1 4 -0 -1 1 0 - -0 diff --git a/cloog-0.17.0/test/block3.good.c b/cloog-0.17.0/test/block3.good.c deleted file mode 100644 index b4bdf6d..0000000 --- a/cloog-0.17.0/test/block3.good.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Generated from ../../../git/cloog/test/block3.cloog by CLooG 0.16.2-4-gba4e834 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } -#define S2() { hash(2); } -#define S3(i) { hash(3); hash(i); } - -void test() -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i; - S1(); - S3(0); - S2(); - S3(1); -} diff --git a/cloog-0.17.0/test/byu98-1-2-3.c b/cloog-0.17.0/test/byu98-1-2-3.c deleted file mode 100644 index 2a1e151..0000000 --- a/cloog-0.17.0/test/byu98-1-2-3.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/byu98-1-2-3.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.01s. */ -for (i=2;i<=3;i++) { - for (j=-i+6;j<=6;j++) { - S1(i,j); - } -} -for (i=4;i<=7;i++) { - if (i == 4) { - for (j=3;j<=4;j++) { - S1(i,j); - } - } - if (i >= 6) { - S2(i,-i+9); - } - if (i <= 5) { - S1(i,-i+9); - S2(i,-i+9); - } - for (j=max(-i+10,i-1);j<=6;j++) { - S1(i,j); - } -} -S2(8,1); diff --git a/cloog-0.17.0/test/byu98-1-2-3.cloog b/cloog-0.17.0/test/byu98-1-2-3.cloog deleted file mode 100644 index 76d16ab..0000000 --- a/cloog-0.17.0/test/byu98-1-2-3.cloog +++ /dev/null @@ -1,65 +0,0 @@ -# Here is the result given by an old CLooG (the same was given up to 0.12.2), -# the difference with the new constant spreading technique of 0.14.0 is -# one of the most beautiful. -# -# /* Generated by CLooG v0.10.7 */ -# for (i=2;i<=3;i++) { -# for (j=-i+6;j<=6;j++) { -# S1 ; -# } -# } -# for (j=4-1;j<=-(4)+8;j++) { -# S1(i = 4) ; -# } -# j = -(4)+9 ; -# S1(i = 4) ; -# S2(i = 4) ; -# for (j=-(4)+10;j<=6;j++) { -# S1(i = 4) ; -# } -# S1(i = 5,j = 4) ; -# S2(i = 5,j = 4) ; -# for (j=5;j<=6;j++) { -# S1(i = 5) ; -# } -# for (i=6;i<=7;i++) { -# j = -i+9 ; -# S2 ; -# for (j=i-1;j<=6;j++) { -# S1 ; -# } -# } -# S2(i = 8,j = 1) ; - -# language: C -c - -# Context -#{ | 1>=0} -1 2 -1 1 -0 - -2 # Number of statements - -1 -# {i,j | (-j+6,2)<=i<=j+1; 3<=j<=6} -5 4 -# i j 1 -1 1 1 -6 -1 1 0 -2 -1 0 1 -3 -1 0 -1 6 -1 -1 1 1 -0 0 0 - -1 -# {i,j | i=-j+9; 1<=j<=5} -3 4 -0 1 1 -9 -1 0 1 -1 -1 0 -1 5 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/byu98-1-2-3.good.c b/cloog-0.17.0/test/byu98-1-2-3.good.c deleted file mode 100644 index d1ad156..0000000 --- a/cloog-0.17.0/test/byu98-1-2-3.good.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Generated from ../../../git/cloog/test/byu98-1-2-3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test() -{ - /* Original iterators. */ - int i, j; - for (i=2;i<=3;i++) { - for (j=-i+6;j<=6;j++) { - S1(i,j) ; - } - } - for (j=3;j<=4;j++) { - S1(4,j) ; - } - S1(4,5) ; - S2(4,5) ; - S1(4,6) ; - S1(5,4) ; - S2(5,4) ; - for (j=5;j<=6;j++) { - S1(5,j) ; - } - for (i=6;i<=7;i++) { - j = -i+9 ; - S2(i,-i+9) ; - for (j=i-1;j<=6;j++) { - S1(i,j) ; - } - } - S2(8,1) ; -} diff --git a/cloog-0.17.0/test/check_c.sh b/cloog-0.17.0/test/check_c.sh deleted file mode 100755 index 8601154..0000000 --- a/cloog-0.17.0/test/check_c.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** check_c.sh ** -# **-------------------------------------------------------------------** -# ** First version: November 17th 2011 ** -# **-------------------------------------------------------------------**/ -# - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2003 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * * -# *****************************************************************************/ - -$CHECKER "C" "$CLOOGTEST_C" "" "cloog" "c" "0" diff --git a/cloog-0.17.0/test/check_fortran.sh b/cloog-0.17.0/test/check_fortran.sh deleted file mode 100755 index 7d8db92..0000000 --- a/cloog-0.17.0/test/check_fortran.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** check_fortran.sh ** -# **-------------------------------------------------------------------** -# ** First version: November 17th 2011 ** -# **-------------------------------------------------------------------**/ -# - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2003 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * * -# *****************************************************************************/ - -$CHECKER "FORTRAN" "$CLOOGTEST_FORTRAN" "" "cloog" "f" "0" diff --git a/cloog-0.17.0/test/check_openscop.sh b/cloog-0.17.0/test/check_openscop.sh deleted file mode 100755 index 6b78415..0000000 --- a/cloog-0.17.0/test/check_openscop.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** check_openscop.sh ** -# **-------------------------------------------------------------------** -# ** First version: November 17th 2011 ** -# **-------------------------------------------------------------------**/ -# - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2003 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * * -# *****************************************************************************/ - -$CHECKER "OPENSCOP" "$CLOOGTEST_OPENSCOP" "-openscop" "scop" "c" "0" diff --git a/cloog-0.17.0/test/check_run.sh b/cloog-0.17.0/test/check_run.sh deleted file mode 100755 index 9ce0b1c..0000000 --- a/cloog-0.17.0/test/check_run.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/sh -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** check_run.sh ** -# **-------------------------------------------------------------------** -# ** First version: November 18th 2011 ** -# **-------------------------------------------------------------------**/ -# - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2003 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * * -# *****************************************************************************/ - -# Refactor $SPECIAL_OPTIONS list to remove quotes and to replace spaces in -# individual tests with %, e.g., "'file1 -f -1' 'file2'" becomes -# "file1%-f%-1 file2". -special_refactored=`echo "$SPECIAL_OPTIONS" | \ - sed "s/' '/#/g" | \ - sed 's/ /%/g' | \ - sed "s/#/ /g" | \ - sed "s/'//g"` - -$CHECKER "RUN C" "$FINITE_CLOOGTEST_C" "" "cloog" "c" "1" -failedtest=$?; - -$CHECKER "RUN SPECIAL" "$special_refactored" "" "cloog" "c" "1" -failedtest=`expr $failedtest + $?`; - -$CHECKER "RUN SPECIAL -sh 1" "$special_refactored" "-sh 1" "cloog" "c" "1" -failedtest=`expr $failedtest + $?`; -return $failedtest; diff --git a/cloog-0.17.0/test/check_special.sh b/cloog-0.17.0/test/check_special.sh deleted file mode 100755 index ece90d5..0000000 --- a/cloog-0.17.0/test/check_special.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** check_special.sh ** -# **-------------------------------------------------------------------** -# ** First version: November 17th 2011 ** -# **-------------------------------------------------------------------**/ -# - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2003 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * * -# *****************************************************************************/ - -# Refactor $SPECIAL_OPTIONS list to remove quotes and to replace spaces in -# individual tests with %, e.g., "'file1 -f -1' 'file2'" becomes -# "file1%-f%-1 file2". -special_refactored=`echo "$SPECIAL_OPTIONS" | \ - sed "s/' '/#/g" | \ - sed 's/ /%/g' | \ - sed "s/#/ /g" | \ - sed "s/'//g"` - -$CHECKER "SPECIAL" "$special_refactored" "" "cloog" "c" "0" diff --git a/cloog-0.17.0/test/check_strided.sh b/cloog-0.17.0/test/check_strided.sh deleted file mode 100755 index 3932373..0000000 --- a/cloog-0.17.0/test/check_strided.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** check_strided.sh ** -# **-------------------------------------------------------------------** -# ** First version: November 17th 2011 ** -# **-------------------------------------------------------------------**/ -# - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2003 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * * -# *****************************************************************************/ - -$CHECKER "STRIDED" "$CLOOGTEST_STRIDED" "-strides 1" "cloog" "c" "0" diff --git a/cloog-0.17.0/test/checker.sh b/cloog-0.17.0/test/checker.sh deleted file mode 100755 index 4064819..0000000 --- a/cloog-0.17.0/test/checker.sh +++ /dev/null @@ -1,126 +0,0 @@ -#!/bin/sh -# -# /**-------------------------------------------------------------------** -# ** CLooG ** -# **-------------------------------------------------------------------** -# ** checker.sh ** -# **-------------------------------------------------------------------** -# ** First version: November 16th 2011 ** -# **-------------------------------------------------------------------**/ -# - -#/***************************************************************************** -# * CLooG : the Chunky Loop Generator (experimental) * -# ***************************************************************************** -# * * -# * Copyright (C) 2003 Cedric Bastoul * -# * * -# * This library is free software; you can redistribute it and/or * -# * modify it under the terms of the GNU Lesser General Public * -# * License as published by the Free Software Foundation; either * -# * version 2.1 of the License, or (at your option) any later version. * -# * * -# * This library is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * -# * Lesser General Public License for more details. * -# * * -# * You should have received a copy of the GNU Lesser General Public * -# * License along with this library; if not, write to the Free Software * -# * Foundation, Inc., 51 Franklin Street, Fifth Floor, * -# * Boston, MA 02110-1301 USA * -# * * -# * CLooG, the Chunky Loop Generator * -# * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * -# * * -# *****************************************************************************/ - -# This is the main test script of CLooG. It checks that CLooG generates -# a convenient output for an input set of tests, according to some -# parameters (see below). Two checking policies are possible: simply -# compare the generated codes or compare the executions of the generated -# codes. The reference output files must be present: if we are checking a -# file foo.cloog, either foo.c or foo.f must exist in the case of a simple -# code generation checking, and either foo.good.c or foo.good.f must exist -# in the case of a run check. - -TEST_NAME="$1" ## Name of the group of files to test - -TEST_FILES="$2" ## List of test file prefixes and individual options - ## spaces between the elements of one test are - ## represented with '%', e.g., "file -f -1" is - ## "file%-f%-1". - -TEST_GLOBAL_OPTIONS="$3" ## Options for all the tests in the group - -TEST_INPUT_EXTENSION="$4" ## Extension of the input file - -TEST_OUTPUT_EXTENSION="$5" ## Extension of the generated file - -TEST_RUN="$6" ## "1" if the checking policy is to generate, - ## compile and run, generate only otherwise - -failedtest=0; -cloog=$top_builddir/cloog$EXEEXT -echo " /*-----------------------------------------------*" -echo " * Testing CLooG: $TEST_NAME test set " -echo " *-----------------------------------------------*/" -for x in $TEST_FILES; do - name=`echo $x | sed 's/%/ /g' | cut -d\ -f1`; - individual_options=`echo $x | sed 's/%/ /g' | cut -s -d\ -f2-`; - input="$srcdir/$name.$TEST_INPUT_EXTENSION"; - output="$srcdir/$name.$TEST_OUTPUT_EXTENSION"; - options="$individual_options $TEST_GLOBAL_OPTIONS"; - - echo "Check file $input \c"; - if [ "$options" = " " ]; then - echo "(no option), \c" - else - echo "(options $options), \c"; - fi; - - if [ "$TEST_RUN" = "1" ]; then - generate_test=$srcdir/generate_test$EXEEXT - test_run=$srcdir/test_run$EXEEXT - good="$srcdir/$name.good.$TEST_OUTPUT_EXTENSION"; - - echo "generating... \c"; - $cloog $options -q -callable 1 $input > test_test.c; - $generate_test < $input > test_main.c; - - echo "compiling... \c"; -# TODO: (nd Cedric) The following line is to deal with the (F*CKING !!!) -# space in PACKAGE_STRING, introduced by AC_INIT and which, for -# some reason, seems to be the source of a problem with my shell. -# Maybe there is a better way to solve the problem... - COMPILE=`echo $COMPILE | sed 's/\\\ /_SPACE_/g'`; - $COMPILE -c test_test.c; - $COMPILE -Dtest=good -c $good -o test_good.o; - $LINK test_main.c test_test.o test_good.o > /dev/null; - - echo "comparing... \c"; - $test_run; - result=$?; - rm -f $test_run; - else - echo "generating... \c"; - $cloog $options -q $input > cloog_temp; - diff -u -w --ignore-matching-lines='CLooG' cloog_temp $output; - result=$?; - rm -f cloog_temp; - fi; - - if [ "$result" -ne "0" ]; then - echo -e "\033[31mFAIL: $output is not the same\033[0m"; - failedtest=`expr $failedtest + 1`; - else - echo "PASS"; - fi; -done; - -if [ $failedtest != 0 ]; then - echo "\033[31m[CLooG] FAIL: $failedtest tests failed in $TEST_NAME\033[0m"; -else - echo "[CLooG] PASS: $TEST_NAME passed :-) !"; -fi -exit $failedtest diff --git a/cloog-0.17.0/test/cholesky.c b/cloog-0.17.0/test/cholesky.c deleted file mode 100644 index a0d08fc..0000000 --- a/cloog-0.17.0/test/cholesky.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Generated from ../../../git/cloog/test/cholesky.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.04s. */ -if (n >= 1) { - if (n >= 2) { - S1(1) ; - S3(1) ; - for (c3=2;c3<=n;c3++) { - S4(1,c3) ; - S6(1,c3) ; - } - } - if (n == 1) { - S1(1) ; - S3(1) ; - } - for (c1=2;c1<=n-1;c1++) { - S1(c1) ; - for (c3=1;c3<=c1-1;c3++) { - S2(c1,c3) ; - } - S3(c1) ; - for (c3=c1+1;c3<=n;c3++) { - S4(c1,c3) ; - for (c5=1;c5<=c1-1;c5++) { - S5(c1,c3,c5) ; - } - S6(c1,c3) ; - } - } - if (n >= 2) { - S1(n) ; - for (c3=1;c3<=n-1;c3++) { - S2(n,c3) ; - } - S3(n) ; - } -} diff --git a/cloog-0.17.0/test/cholesky.cloog b/cloog-0.17.0/test/cholesky.cloog deleted file mode 100644 index a3eadea..0000000 --- a/cloog-0.17.0/test/cholesky.cloog +++ /dev/null @@ -1,129 +0,0 @@ -# language: C -c - -# parameter n -1 3 -# n 1 -1 0 1 -1 -n - -6 # Number of statements - -1 -# S1 {i | 1<=i<=n} -2 4 -# i n 1 -1 1 0 -1 -1 -1 1 0 -0 0 0 - -1 -# S2 {i, j | 1<=i<=n; 1<=j<=i-1} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 -1 -1 1 -1 0 -1 -0 0 0 - -1 -# S3 {i | 1<=i<=n} -2 4 -# i n 1 -1 1 0 -1 -1 -1 1 0 -0 0 0 - -1 -# S4 {i, j | 1<=i<=n; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 - -1 -# S5 {i, j, k | 1<=i<=n; i+1<=j<=n 1<=k<=i-1} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 0 -1 -1 1 0 -1 0 -1 -0 0 0 - -1 -# S6 {i, j | 1<=i<=n; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 -0 - -6 # Scattering functions -# Et les instructions de chunking (prog init)... -6 10 -# c1 c2 c3 c4 c5 c6 i n 1 -0 1 0 0 0 0 0 -1 0 0 -0 0 1 0 0 0 0 0 0 -1 -0 0 0 1 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 - -6 11 -# c1 c2 c3 c4 c5 c6 i j n 1 -0 1 0 0 0 0 0 -1 0 0 0 -0 0 1 0 0 0 0 0 0 0 -2 -0 0 0 1 0 0 0 0 -1 0 0 -0 0 0 0 1 0 0 0 0 0 -1 -0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 - -6 10 -# c1 c2 c3 c4 c5 c6 i n 1 -0 1 0 0 0 0 0 -1 0 0 -0 0 1 0 0 0 0 0 0 -3 -0 0 0 1 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 - -6 11 -# c1 c2 c3 c4 c5 c6 i j n 1 -0 1 0 0 0 0 0 -1 0 0 0 -0 0 1 0 0 0 0 0 0 0 -4 -0 0 0 1 0 0 0 0 -1 0 0 -0 0 0 0 1 0 0 0 0 0 -1 -0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 - -6 12 -# c1 c2 c3 c4 c5 c6 i j k n 1 -0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 0 -4 -0 0 0 1 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -2 -0 0 0 0 0 1 0 0 0 -1 0 0 -0 0 0 0 0 0 1 0 0 0 0 -1 - -6 11 -# c1 c2 c3 c4 c5 c6 i j n 1 -0 1 0 0 0 0 0 -1 0 0 0 -0 0 1 0 0 0 0 0 0 0 -4 -0 0 0 1 0 0 0 0 -1 0 0 -0 0 0 0 1 0 0 0 0 0 -3 -0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 -0 - - diff --git a/cloog-0.17.0/test/cholesky.good.c b/cloog-0.17.0/test/cholesky.good.c deleted file mode 100644 index 7619b7e..0000000 --- a/cloog-0.17.0/test/cholesky.good.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Generated from ../../../git/cloog/test/cholesky.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.05s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i) { hash(3); hash(i); } -#define S4(i,j) { hash(4); hash(i); hash(j); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } -#define S6(i,j) { hash(6); hash(i); hash(j); } - -void test(int n) -{ - /* Scattering iterators. */ - int c1, c3, c5; - /* Original iterators. */ - int i, j, k; - if (n >= 2) { - S1(1) ; - S3(1) ; - for (c3=2;c3<=n;c3++) { - S4(1,c3) ; - S6(1,c3) ; - } - } - if (n == 1) { - S1(1) ; - S3(1) ; - } - for (c1=2;c1<=n-1;c1++) { - S1(c1) ; - for (c3=1;c3<=c1-1;c3++) { - S2(c1,c3) ; - } - S3(c1) ; - for (c3=c1+1;c3<=n;c3++) { - S4(c1,c3) ; - for (c5=1;c5<=c1-1;c5++) { - S5(c1,c3,c5) ; - } - S6(c1,c3) ; - } - } - if (n >= 2) { - S1(n) ; - for (c3=1;c3<=n-1;c3++) { - S2(n,c3) ; - } - S3(n) ; - } -} diff --git a/cloog-0.17.0/test/cholesky2.c b/cloog-0.17.0/test/cholesky2.c deleted file mode 100644 index 3141bdc..0000000 --- a/cloog-0.17.0/test/cholesky2.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Generated from ../../../git/cloog/test/cholesky2.cloog by CLooG 0.16.1-2-g33ac553 gmp bits in 0.02s. */ -if (M >= 1) { - for (c2=1;c2<=M-1;c2++) { - S1(c2); - for (c3=c2+1;c3<=M;c3++) { - S4(c2,c3); - } - } - S1(M); - S3(1); - if (M >= 3) { - S6(1,2); - for (c2=3;c2<=M;c2++) { - S6(1,c2); - for (i=2;i<=c2-1;i++) { - S5(i,c2,1); - } - } - } - if (M == 2) { - S6(1,2); - } - for (c1=3;c1<=3*M-7;c1++) { - if ((c1+2)%3 == 0) { - S3((c1+2)/3); - } - if (c1%3 == 0) { - S2((c1+3)/3,c1/3); - } - if ((c1+1)%3 == 0) { - S6((c1+1)/3,(c1+4)/3); - } - if (c1%3 == 0) { - S2((c1+6)/3,c1/3); - } - for (c2=ceild(c1+7,3);c2<=M;c2++) { - if ((c1+1)%3 == 0) { - S6((c1+1)/3,c2); - } - if (c1%3 == 0) { - S2(c2,c1/3); - } - if ((c1+1)%3 == 0) { - for (i=ceild(c1+4,3);i<=c2-1;i++) { - S5(i,c2,(c1+1)/3); - } - } - } - } - if (M >= 3) { - for (c2=M-1;c2<=M;c2++) { - S2(c2,M-2); - } - } - if (M >= 3) { - S3(M-1); - } - if (M >= 3) { - S6(M-1,M); - } - if (M >= 2) { - S2(M,M-1); - } - if (M >= 2) { - S3(M); - } -} diff --git a/cloog-0.17.0/test/cholesky2.cloog b/cloog-0.17.0/test/cholesky2.cloog deleted file mode 100644 index 6c0a81a..0000000 --- a/cloog-0.17.0/test/cholesky2.cloog +++ /dev/null @@ -1,108 +0,0 @@ -# language: C -c - -# parameter n -1 3 -# n 1 -1 0 1 -0 - -6 # Number of statements - -1 -# S1 {i | 1<=i<=n} -2 4 -# i n 1 -1 1 0 -1 -1 -1 1 0 -0 0 0 - -1 -# S2 {i, j | 1<=i<=n; 1<=j<=i-1} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 -1 -1 1 -1 0 -1 -0 0 0 - -1 -# S3 {i | 1<=i<=n} -2 4 -# i n 1 -1 1 0 -1 -1 -1 1 0 -0 0 0 - -1 -# S4 {i, j | 1<=i<=n; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 - -1 -# S5 {i, j, k | 1<=i<=n; i+1<=j<=n 1<=k<=i-1} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 0 -1 -1 1 0 -1 0 -1 -0 0 0 - -1 -# S6 {i, j | 1<=i<=n; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 -0 - -6 # Scattering functions -# Et les instructions de chunking (parallele)... -3 7 -# c1 c2 c3 i n 1 -0 1 0 0 0 0 0 -0 0 1 0 -1 0 0 -0 0 0 1 0 0 0 - -3 8 -# c1 c2 c3 i j n 1 -0 1 0 0 0 -3 0 0 -0 0 1 0 -1 0 0 0 -0 0 0 1 0 0 0 0 - -3 7 -# c1 c2 c3 i n 1 -0 1 0 0 -3 0 2 -0 0 1 0 0 0 0 -0 0 0 1 0 0 0 - -3 8 -# c1 c2 c3 i j n 1 -0 1 0 0 0 0 0 0 -0 0 1 0 -1 0 0 0 -0 0 0 1 0 -1 0 0 - -3 9 -# c1 c2 c3 i j k n 1 -0 1 0 0 0 0 -3 0 1 -0 0 1 0 0 -1 0 0 0 -0 0 0 1 0 0 -1 0 0 - -3 8 -# c1 c2 c3 i j n 1 -0 1 0 0 -3 0 0 1 -0 0 1 0 0 -1 0 0 -0 0 0 1 0 0 0 0 -0 diff --git a/cloog-0.17.0/test/cholesky2.good.c b/cloog-0.17.0/test/cholesky2.good.c deleted file mode 100644 index ee4b344..0000000 --- a/cloog-0.17.0/test/cholesky2.good.c +++ /dev/null @@ -1,114 +0,0 @@ -/* Generated from ../../../git/cloog/test/cholesky2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.11s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i) { hash(3); hash(i); } -#define S4(i,j) { hash(4); hash(i); hash(j); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } -#define S6(i,j) { hash(6); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c1, c2, c3; - /* Original iterators. */ - int i, j, k; - if (M >= 2) { - for (c2=1;c2<=M-1;c2++) { - S1(c2) ; - for (c3=c2+1;c3<=M;c3++) { - S4(c2,c3) ; - } - } - S1(M) ; - } - if (M == 1) { - S1(1) ; - } - if (M >= 2) { - S3(1) ; - } - if (M >= 3) { - S6(1,2) ; - for (c2=3;c2<=M;c2++) { - S6(1,c2) ; - for (i=2;i<=c2-1;i++) { - S5(i,c2,1) ; - } - } - } - if (M == 2) { - S6(1,2) ; - } - for (c1=3;c1<=3*M-7;c1++) { - if ((c1+2)%3 == 0) { - i = (c1+2)/3 ; - S3((c1+2)/3) ; - } - if (c1%3 == 0) { - c2 = (c1+3)/3 ; - i = (c1+3)/3 ; - S2((c1+3)/3,c1/3) ; - } - c2 = floord(c1+6,3) ; - if ((c1+1)%3 == 0) { - i = (c1+1)/3 ; - S6((c1+1)/3,c2) ; - } - if (c1%3 == 0) { - S2(c2,c1/3) ; - } - for (c2=ceild(c1+7,3);c2<=M;c2++) { - if ((c1+1)%3 == 0) { - i = (c1+1)/3 ; - S6((c1+1)/3,c2) ; - } - if (c1%3 == 0) { - S2(c2,c1/3) ; - } - if ((c1+1)%3 == 0) { - c3 = (c1+1)/3 ; - for (i=ceild(c1+4,3);i<=c2-1;i++) { - k = (c1+1)/3 ; - S5(i,c2,(c1+1)/3) ; - } - } - } - } - for (c1=max(3*M-6,3);c1<=3*M-4;c1++) { - if ((c1+2)%3 == 0) { - i = (c1+2)/3 ; - S3((c1+2)/3) ; - } - if (c1%3 == 0) { - c2 = (c1+3)/3 ; - i = (c1+3)/3 ; - S2((c1+3)/3,c1/3) ; - } - for (c2=ceild(c1+4,3);c2<=M;c2++) { - if ((c1+1)%3 == 0) { - i = (c1+1)/3 ; - S6((c1+1)/3,c2) ; - } - if (c1%3 == 0) { - S2(c2,c1/3) ; - } - } - } - if (M >= 2) { - c1 = 3*M-3 ; - j = M-1 ; - S2(M,M-1) ; - } - if (M >= 1) { - c1 = 3*M-2 ; - S3(M) ; - } -} diff --git a/cloog-0.17.0/test/christian.c b/cloog-0.17.0/test/christian.c deleted file mode 100644 index cc3c5d3..0000000 --- a/cloog-0.17.0/test/christian.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/christian.cloog by CLooG 0.16.2-5-g3b3bf96 gmp bits in 0.01s. */ -if (N >= 1) { - S1(0,N-1); - for (p=-N+2;p<=N-1;p++) { - if (p >= 1) { - S2(p-1,0); - } - for (i=max(0,p);i<=min(N-1,p+N-2);i++) { - S1(i,-p+i); - S2(i,-p+i+1); - } - if (p <= 0) { - S1(p+N-1,N-1); - } - } - S2(N-1,0); -} diff --git a/cloog-0.17.0/test/christian.cloog b/cloog-0.17.0/test/christian.cloog deleted file mode 100644 index 088977e..0000000 --- a/cloog-0.17.0/test/christian.cloog +++ /dev/null @@ -1,57 +0,0 @@ -# =============================================== Global -# Language -C - -# Context -0 3 - -# Parameter names are provided -1 -# Parameter names -N - -# Number of statements -2 - -# =============================================== Statement 1 -# ---------------------------------------------- 1.1 Domain -# Iteration domain -1 -4 5 - 1 1 0 0 0 ## i >= 0 - 1 -1 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 ## j >= 0 - 1 0 -1 1 -1 ## -j+N-1 >= 0 -0 0 0 - -# =============================================== Statement 2 -# ---------------------------------------------- 2.1 Domain -# Iteration domain -1 -4 5 - 1 1 0 0 0 ## i >= 0 - 1 -1 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 ## j >= 0 - 1 0 -1 1 -1 ## -j+N-1 >= 0 -0 0 0 - -#naming for domains -0 - -# ---------------------------------------------- Scatterings -# of Scattering functions -2 - -# Scattering function -1 6 - 0 1 -1 1 0 0 ## p = i-j - -# Scattering function -1 6 - 0 1 -1 1 0 -1 ## p = i-j+1 - - -# we will set the scattering dimension names -1 -p - diff --git a/cloog-0.17.0/test/christian.good.c b/cloog-0.17.0/test/christian.good.c deleted file mode 100644 index 28f578c..0000000 --- a/cloog-0.17.0/test/christian.good.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Generated from ../../../git/cloog/test/christian.cloog by CLooG 0.16.2-5-g3b3bf96 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int N) -{ - /* Scattering iterators. */ - int p; - /* Original iterators. */ - int i, j; - if (N >= 1) { - S1(0,N-1); - for (p=-N+2;p<=N-1;p++) { - if (p >= 1) { - S2(p-1,0); - } - for (i=max(0,p);i<=min(N-1,p+N-2);i++) { - S1(i,-p+i); - S2(i,-p+i+1); - } - if (p <= 0) { - S1(p+N-1,N-1); - } - } - S2(N-1,0); - } -} diff --git a/cloog-0.17.0/test/classen.c b/cloog-0.17.0/test/classen.c deleted file mode 100644 index 3b5b05e..0000000 --- a/cloog-0.17.0/test/classen.c +++ /dev/null @@ -1,101 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/classen.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.45s. */ -if (m >= 1) { - if (m >= 2) { - S1(0,1,1,1); - S2(0,1,1,1,1,1,2,1); - S3(0,1,1,2,1,1,1,2); - S4(0,1,2,2,1,1,2,2); - S8(0,1); - } - if (m == 1) { - S1(0,1,1,1); - S8(0,1); - } - for (glT1=1;glT1<=2*m-4;glT1++) { - if (glT1 <= m-2) { - S5(glT1-1,1,glT1,1,glT1,1,glT1+1,1); - S1(glT1,1,glT1+1,1); - S2(glT1,1,glT1+1,1,glT1+1,1,glT1+2,1); - S3(glT1,1,glT1+1,2,glT1+1,1,glT1+1,2); - S4(glT1,1,glT1+2,2,glT1+1,1,glT1+2,2); - } - if (glT1 >= m) { - S5(glT1-1,glT1-m+2,glT1,glT1-m+2,m-1,glT1-m+2,m,glT1-m+2); - S6(glT1-1,glT1-m+1,glT1,glT1-m+2,m,glT1-m+1,m,glT1-m+2); - S1(glT1,glT1-m+2,m,glT1-m+2); - S3(glT1,glT1-m+2,glT1+1,glT1-m+3,m,glT1-m+2,m,glT1-m+3); - } - if (glT1 == m-1) { - S5(m-2,1,m-1,1,m-1,1,m,1); - S1(m-1,1,m,1); - S3(m-1,1,m,2,m,1,m,2); - } - for (rp1=max(2,glT1-m+3);rp1<=min(glT1,m-1);rp1++) { - S5(glT1-1,rp1,glT1,rp1,glT1-rp1+1,rp1,glT1-rp1+2,rp1); - S6(glT1-1,rp1-1,glT1,rp1,glT1-rp1+2,rp1-1,glT1-rp1+2,rp1); - S7(glT1-1,rp1-1,glT1+1,rp1,glT1-rp1+2,rp1-1,glT1-rp1+3,rp1); - S1(glT1,rp1,glT1-rp1+2,rp1); - S2(glT1,rp1,glT1+1,rp1,glT1-rp1+2,rp1,glT1-rp1+3,rp1); - S3(glT1,rp1,glT1+1,rp1+1,glT1-rp1+2,rp1,glT1-rp1+2,rp1+1); - S4(glT1,rp1,glT1+2,rp1+1,glT1-rp1+2,rp1,glT1-rp1+3,rp1+1); - } - if (glT1 <= m-2) { - S6(glT1-1,glT1,glT1,glT1+1,1,glT1,1,glT1+1); - S7(glT1-1,glT1,glT1+1,glT1+1,1,glT1,2,glT1+1); - S1(glT1,glT1+1,1,glT1+1); - S2(glT1,glT1+1,glT1+1,glT1+1,1,glT1+1,2,glT1+1); - S3(glT1,glT1+1,glT1+1,glT1+2,1,glT1+1,1,glT1+2); - S4(glT1,glT1+1,glT1+2,glT1+2,1,glT1+1,2,glT1+2); - } - if (glT1 >= m) { - S5(glT1-1,m,glT1,m,glT1-m+1,m,glT1-m+2,m); - S6(glT1-1,m-1,glT1,m,glT1-m+2,m-1,glT1-m+2,m); - S7(glT1-1,m-1,glT1+1,m,glT1-m+2,m-1,glT1-m+3,m); - S1(glT1,m,glT1-m+2,m); - S2(glT1,m,glT1+1,m,glT1-m+2,m,glT1-m+3,m); - } - if (glT1 == m-1) { - S6(m-2,m-1,m-1,m,1,m-1,1,m); - S7(m-2,m-1,m,m,1,m-1,2,m); - S1(m-1,m,1,m); - S2(m-1,m,m,m,1,m,2,m); - } - for (coordP1=max(1,glT1-m+2);coordP1<=min(m,glT1+1);coordP1++) { - S8(glT1,coordP1); - } - } - if (m >= 2) { - if (m >= 3) { - S5(2*m-4,m-1,2*m-3,m-1,m-1,m-1,m,m-1); - S6(2*m-4,m-2,2*m-3,m-1,m,m-2,m,m-1); - S1(2*m-3,m-1,m,m-1); - S3(2*m-3,m-1,2*m-2,m,m,m-1,m,m); - } - if (m == 2) { - S5(0,1,1,1,1,1,2,1); - S1(1,1,2,1); - S3(1,1,2,2,2,1,2,2); - } - if (m >= 3) { - S5(2*m-4,m,2*m-3,m,m-2,m,m-1,m); - S6(2*m-4,m-1,2*m-3,m,m-1,m-1,m-1,m); - S7(2*m-4,m-1,2*m-2,m,m-1,m-1,m,m); - S1(2*m-3,m,m-1,m); - } - if (m == 2) { - S6(0,1,1,2,1,1,1,2); - S7(0,1,2,2,1,1,2,2); - S1(1,2,1,2); - } - S2(2*m-3,m,2*m-2,m,m-1,m,m,m); - for (coordP1=m-1;coordP1<=m;coordP1++) { - S8(2*m-3,coordP1); - } - } - if (m >= 2) { - S5(2*m-3,m,2*m-2,m,m-1,m,m,m); - S6(2*m-3,m-1,2*m-2,m,m,m-1,m,m); - S1(2*m-2,m,m,m); - S8(2*m-2,m); - } -} diff --git a/cloog-0.17.0/test/classen.cloog b/cloog-0.17.0/test/classen.cloog deleted file mode 100644 index 06fe3b0..0000000 --- a/cloog-0.17.0/test/classen.cloog +++ /dev/null @@ -1,233 +0,0 @@ -# created: Fri Mar 4 11:37:56 CET 2005 -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context -1 3 - 1 1 0 - - -1 # set parameter names -m - -# --------------------- STATEMENTS -------------------- -8 - -# 1 computation stmts: -1 # one domain per statement -7 7 - 1 0 0 0 0 1 -1 - 1 0 0 -1 0 1 0 - 1 0 0 1 0 0 -1 - 1 0 0 0 -1 1 0 - 1 0 0 0 1 0 -1 - 0 0 -1 0 1 0 0 - 0 -1 0 1 1 0 -2 -0 0 0 # for future options... - - -# 3 prepare-send stmts: -1 # one domain per statement -13 11 - 1 0 0 0 0 0 0 0 0 1 -1 - 1 -1 0 0 0 0 0 0 0 2 -3 - 1 1 0 0 0 0 0 0 0 0 0 - 1 1 -1 0 0 0 0 0 0 0 1 - 1 0 -1 0 0 0 0 0 0 1 0 - 1 -1 1 0 0 0 0 0 0 1 -3 - 1 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 -1 0 0 0 1 0 0 - 0 0 0 -1 0 0 0 1 1 0 -2 - 0 0 -1 0 0 0 1 0 0 0 0 - 0 -1 0 0 0 1 1 0 0 0 -2 - 0 -1 0 1 0 0 0 0 0 0 -1 - 0 0 -1 0 1 0 0 0 0 0 0 -0 0 0 # for future options... - - -1 # one domain per statement -13 11 - 1 0 0 0 0 0 0 0 0 1 -1 - 1 -1 0 0 0 0 0 0 0 2 -3 - 1 1 0 0 0 0 0 0 0 0 0 - 1 1 -1 0 0 0 0 0 0 0 1 - 1 0 -1 0 0 0 0 0 0 1 -1 - 1 -1 1 0 0 0 0 0 0 1 -2 - 1 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 -1 0 0 0 1 0 0 - 0 0 0 -1 0 0 0 1 1 0 -2 - 0 0 -1 0 0 0 1 0 0 0 0 - 0 -1 0 0 0 1 1 0 0 0 -2 - 0 -1 0 1 0 0 0 0 0 0 -1 - 0 0 -1 0 1 0 0 0 0 0 -1 -0 0 0 # for future options... - - -1 # one domain per statement -13 11 - 1 0 0 0 0 0 0 0 0 1 -1 - 1 -1 0 0 0 0 0 0 0 2 -4 - 1 1 0 0 0 0 0 0 0 0 0 - 1 1 -1 0 0 0 0 0 0 0 1 - 1 0 -1 0 0 0 0 0 0 1 -1 - 1 -1 1 0 0 0 0 0 0 1 -3 - 1 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 -1 0 0 0 1 0 0 - 0 0 0 -1 0 0 0 1 1 0 -2 - 0 0 -1 0 0 0 1 0 0 0 0 - 0 -1 0 0 0 1 1 0 0 0 -2 - 0 -1 0 1 0 0 0 0 0 0 -2 - 0 0 -1 0 1 0 0 0 0 0 -1 -0 0 0 # for future options... - - -# 3 prepare-receive stmts: -1 # one domain per statement -13 11 - 1 0 0 0 0 0 0 0 0 1 -1 - 1 -1 0 0 0 0 0 0 0 2 -3 - 1 1 0 0 0 0 0 0 0 0 0 - 1 1 -1 0 0 0 0 0 0 0 1 - 1 0 -1 0 0 0 0 0 0 1 0 - 1 -1 1 0 0 0 0 0 0 1 -3 - 1 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 -1 0 0 0 1 0 0 - 0 0 0 -1 0 0 0 1 1 0 -2 - 0 0 -1 0 0 0 1 0 0 0 0 - 0 -1 0 0 0 1 1 0 0 0 -2 - 0 -1 0 1 0 0 0 0 0 0 -1 - 0 0 -1 0 1 0 0 0 0 0 0 -0 0 0 # for future options... - - -1 # one domain per statement -13 11 - 1 0 0 0 0 0 0 0 0 1 -1 - 1 -1 0 0 0 0 0 0 0 2 -3 - 1 1 0 0 0 0 0 0 0 0 0 - 1 1 -1 0 0 0 0 0 0 0 1 - 1 0 -1 0 0 0 0 0 0 1 -1 - 1 -1 1 0 0 0 0 0 0 1 -2 - 1 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 -1 0 0 0 1 0 0 - 0 0 0 -1 0 0 0 1 1 0 -2 - 0 0 -1 0 0 0 1 0 0 0 0 - 0 -1 0 0 0 1 1 0 0 0 -2 - 0 -1 0 1 0 0 0 0 0 0 -1 - 0 0 -1 0 1 0 0 0 0 0 -1 -0 0 0 # for future options... - - -1 # one domain per statement -13 11 - 1 0 0 0 0 0 0 0 0 1 -1 - 1 -1 0 0 0 0 0 0 0 2 -4 - 1 1 0 0 0 0 0 0 0 0 0 - 1 1 -1 0 0 0 0 0 0 0 1 - 1 0 -1 0 0 0 0 0 0 1 -1 - 1 -1 1 0 0 0 0 0 0 1 -3 - 1 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 -1 0 0 0 1 0 0 - 0 0 0 -1 0 0 0 1 1 0 -2 - 0 0 -1 0 0 0 1 0 0 0 0 - 0 -1 0 0 0 1 1 0 0 0 -2 - 0 -1 0 1 0 0 0 0 0 0 -2 - 0 0 -1 0 1 0 0 0 0 0 -1 -0 0 0 # for future options... - - -# communication statement: -1 # number of domains for communication statement -6 5 - 1 -1 0 2 -2 - 1 1 0 0 0 - 1 1 -1 0 1 - 1 0 -1 1 0 - 1 -1 1 1 -2 - 1 0 1 0 -1 - - -0 0 0 # for future options... - - -1 # set the iterator names -coordT1 coordP1 other1 other2 other3 other4 other5 other6 - -# --------------------- SCATTERING -------------------- -8 # Scattering functions -7 14 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - -7 18 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -7 18 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -7 18 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -7 18 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -7 18 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -7 18 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -7 12 - 0 1 0 0 0 0 0 0 -1 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - - -1 # we set the scattering dimension names -glT1 bl rp1 stmtType local1 local2 local3 - diff --git a/cloog-0.17.0/test/classen.good.c b/cloog-0.17.0/test/classen.good.c deleted file mode 100644 index 5c97c50..0000000 --- a/cloog-0.17.0/test/classen.good.c +++ /dev/null @@ -1,396 +0,0 @@ -/* Generated from ../../../git/cloog/test/classen.cloog by CLooG 0.14.0-76-gfd78716 gmp bits in 1.73s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(coordT1,coordP1,other1,other2) { hash(1); hash(coordT1); hash(coordP1); hash(other1); hash(other2); } -#define S2(coordT1,coordP1,other1,other2,other3,other4,other5,other6) { hash(2); hash(coordT1); hash(coordP1); hash(other1); hash(other2); hash(other3); hash(other4); hash(other5); hash(other6); } -#define S3(coordT1,coordP1,other1,other2,other3,other4,other5,other6) { hash(3); hash(coordT1); hash(coordP1); hash(other1); hash(other2); hash(other3); hash(other4); hash(other5); hash(other6); } -#define S4(coordT1,coordP1,other1,other2,other3,other4,other5,other6) { hash(4); hash(coordT1); hash(coordP1); hash(other1); hash(other2); hash(other3); hash(other4); hash(other5); hash(other6); } -#define S5(coordT1,coordP1,other1,other2,other3,other4,other5,other6) { hash(5); hash(coordT1); hash(coordP1); hash(other1); hash(other2); hash(other3); hash(other4); hash(other5); hash(other6); } -#define S6(coordT1,coordP1,other1,other2,other3,other4,other5,other6) { hash(6); hash(coordT1); hash(coordP1); hash(other1); hash(other2); hash(other3); hash(other4); hash(other5); hash(other6); } -#define S7(coordT1,coordP1,other1,other2,other3,other4,other5,other6) { hash(7); hash(coordT1); hash(coordP1); hash(other1); hash(other2); hash(other3); hash(other4); hash(other5); hash(other6); } -#define S8(coordT1,coordP1) { hash(8); hash(coordT1); hash(coordP1); } - -void test(int m) -{ - /* Scattering iterators. */ - int glT1, rp1, local1, local2; - /* Original iterators. */ - int coordT1, coordP1, other1, other2, other3, other4, other5, other6; - if (m >= 2) { - S1(0,1,1,1) ; - S2(0,1,1,1,1,1,2,1) ; - S3(0,1,1,2,1,1,1,2) ; - S4(0,1,2,2,1,1,2,2) ; - S8(0,1) ; - } - if (m == 1) { - S1(0,1,1,1) ; - S8(0,1) ; - } - if (m >= 3) { - S5(0,1,1,1,1,1,2,1) ; - S1(1,1,2,1) ; - S2(1,1,2,1,2,1,3,1) ; - S3(1,1,2,2,2,1,2,2) ; - S4(1,1,3,2,2,1,3,2) ; - S6(0,1,1,2,1,1,1,2) ; - S7(0,1,2,2,1,1,2,2) ; - S1(1,2,1,2) ; - S2(1,2,2,2,1,2,2,2) ; - S3(1,2,2,3,1,2,1,3) ; - S4(1,2,3,3,1,2,2,3) ; - for (coordP1=1;coordP1<=2;coordP1++) { - S8(1,coordP1) ; - } - } - for (glT1=2;glT1<=m-2;glT1++) { - coordT1 = glT1-1 ; - other5 = glT1+1 ; - S5(glT1-1,1,glT1,1,glT1,1,glT1+1,1) ; - other1 = glT1+1 ; - S1(glT1,1,glT1+1,1) ; - local1 = glT1+1 ; - other1 = glT1+1 ; - other3 = glT1+1 ; - other5 = glT1+2 ; - S2(glT1,1,glT1+1,1,glT1+1,1,glT1+2,1) ; - other3 = glT1+1 ; - other5 = glT1+1 ; - S3(glT1,1,glT1+1,2,glT1+1,1,glT1+1,2) ; - other1 = glT1+2 ; - other3 = glT1+1 ; - other5 = glT1+2 ; - S4(glT1,1,glT1+2,2,glT1+1,1,glT1+2,2) ; - for (rp1=2;rp1<=glT1;rp1++) { - local1 = glT1-rp1+1 ; - coordT1 = glT1-1 ; - other3 = glT1-rp1+1 ; - other5 = glT1-rp1+2 ; - S5(glT1-1,rp1,glT1,rp1,glT1-rp1+1,rp1,glT1-rp1+2,rp1) ; - local1 = glT1-rp1+2 ; - local2 = rp1-1 ; - coordT1 = glT1-1 ; - coordP1 = rp1-1 ; - other3 = glT1-rp1+2 ; - other4 = rp1-1 ; - other5 = glT1-rp1+2 ; - S6(glT1-1,rp1-1,glT1,rp1,glT1-rp1+2,rp1-1,glT1-rp1+2,rp1) ; - other1 = glT1+1 ; - other3 = glT1-rp1+2 ; - other4 = rp1-1 ; - other5 = glT1-rp1+3 ; - S7(glT1-1,rp1-1,glT1+1,rp1,glT1-rp1+2,rp1-1,glT1-rp1+3,rp1) ; - other1 = glT1-rp1+2 ; - S1(glT1,rp1,glT1-rp1+2,rp1) ; - local1 = glT1-rp1+2 ; - other1 = glT1+1 ; - other3 = glT1-rp1+2 ; - other5 = glT1-rp1+3 ; - S2(glT1,rp1,glT1+1,rp1,glT1-rp1+2,rp1,glT1-rp1+3,rp1) ; - other2 = rp1+1 ; - other3 = glT1-rp1+2 ; - other5 = glT1-rp1+2 ; - other6 = rp1+1 ; - S3(glT1,rp1,glT1+1,rp1+1,glT1-rp1+2,rp1,glT1-rp1+2,rp1+1) ; - other1 = glT1+2 ; - other2 = rp1+1 ; - other3 = glT1-rp1+2 ; - other5 = glT1-rp1+3 ; - other6 = rp1+1 ; - S4(glT1,rp1,glT1+2,rp1+1,glT1-rp1+2,rp1,glT1-rp1+3,rp1+1) ; - } - rp1 = glT1+1 ; - coordT1 = glT1-1 ; - other2 = glT1+1 ; - other6 = glT1+1 ; - S6(glT1-1,glT1,glT1,glT1+1,1,glT1,1,glT1+1) ; - other1 = glT1+1 ; - other2 = glT1+1 ; - other6 = glT1+1 ; - S7(glT1-1,glT1,glT1+1,glT1+1,1,glT1,2,glT1+1) ; - coordP1 = glT1+1 ; - other2 = glT1+1 ; - S1(glT1,glT1+1,1,glT1+1) ; - local2 = glT1+1 ; - coordP1 = glT1+1 ; - other1 = glT1+1 ; - other2 = glT1+1 ; - other4 = glT1+1 ; - other6 = glT1+1 ; - S2(glT1,glT1+1,glT1+1,glT1+1,1,glT1+1,2,glT1+1) ; - other2 = glT1+2 ; - other4 = glT1+1 ; - other6 = glT1+2 ; - S3(glT1,glT1+1,glT1+1,glT1+2,1,glT1+1,1,glT1+2) ; - other1 = glT1+2 ; - other2 = glT1+2 ; - other4 = glT1+1 ; - other6 = glT1+2 ; - S4(glT1,glT1+1,glT1+2,glT1+2,1,glT1+1,2,glT1+2) ; - for (coordP1=1;coordP1<=glT1+1;coordP1++) { - S8(glT1,coordP1) ; - } - } - if (m >= 3) { - glT1 = m-1 ; - local1 = m-1 ; - coordT1 = m-2 ; - other1 = m-1 ; - other3 = m-1 ; - S5(m-2,1,m-1,1,m-1,1,m,1) ; - coordT1 = m-1 ; - S1(m-1,1,m,1) ; - coordT1 = m-1 ; - S3(m-1,1,m,2,m,1,m,2) ; - for (rp1=2;rp1<=m-1;rp1++) { - local1 = -rp1+m ; - coordT1 = m-2 ; - other1 = m-1 ; - other3 = -rp1+m ; - other5 = -rp1+m+1 ; - S5(m-2,rp1,m-1,rp1,-rp1+m,rp1,-rp1+m+1,rp1) ; - local1 = -rp1+m+1 ; - local2 = rp1-1 ; - coordT1 = m-2 ; - coordP1 = rp1-1 ; - other1 = m-1 ; - other3 = -rp1+m+1 ; - other4 = rp1-1 ; - other5 = -rp1+m+1 ; - S6(m-2,rp1-1,m-1,rp1,-rp1+m+1,rp1-1,-rp1+m+1,rp1) ; - other3 = -rp1+m+1 ; - other4 = rp1-1 ; - other5 = -rp1+m+2 ; - S7(m-2,rp1-1,m,rp1,-rp1+m+1,rp1-1,-rp1+m+2,rp1) ; - coordT1 = m-1 ; - other1 = -rp1+m+1 ; - S1(m-1,rp1,-rp1+m+1,rp1) ; - local1 = -rp1+m+1 ; - coordT1 = m-1 ; - other3 = -rp1+m+1 ; - other5 = -rp1+m+2 ; - S2(m-1,rp1,m,rp1,-rp1+m+1,rp1,-rp1+m+2,rp1) ; - other2 = rp1+1 ; - other3 = -rp1+m+1 ; - other5 = -rp1+m+1 ; - other6 = rp1+1 ; - S3(m-1,rp1,m,rp1+1,-rp1+m+1,rp1,-rp1+m+1,rp1+1) ; - other1 = m+1 ; - other2 = rp1+1 ; - other3 = -rp1+m+1 ; - other5 = -rp1+m+2 ; - other6 = rp1+1 ; - S4(m-1,rp1,m+1,rp1+1,-rp1+m+1,rp1,-rp1+m+2,rp1+1) ; - } - local2 = m-1 ; - coordT1 = m-2 ; - coordP1 = m-1 ; - other1 = m-1 ; - other4 = m-1 ; - S6(m-2,m-1,m-1,m,1,m-1,1,m) ; - other4 = m-1 ; - S7(m-2,m-1,m,m,1,m-1,2,m) ; - coordT1 = m-1 ; - S1(m-1,m,1,m) ; - coordT1 = m-1 ; - S2(m-1,m,m,m,1,m,2,m) ; - coordT1 = m-1 ; - for (coordP1=1;coordP1<=m;coordP1++) { - S8(m-1,coordP1) ; - } - } - for (glT1=m;glT1<=2*m-4;glT1++) { - rp1 = glT1-m+2 ; - local1 = m-1 ; - local2 = glT1-m+2 ; - coordT1 = glT1-1 ; - coordP1 = glT1-m+2 ; - other2 = glT1-m+2 ; - other3 = m-1 ; - other4 = glT1-m+2 ; - other6 = glT1-m+2 ; - S5(glT1-1,glT1-m+2,glT1,glT1-m+2,m-1,glT1-m+2,m,glT1-m+2) ; - local2 = glT1-m+1 ; - coordT1 = glT1-1 ; - coordP1 = glT1-m+1 ; - other2 = glT1-m+2 ; - other4 = glT1-m+1 ; - other6 = glT1-m+2 ; - S6(glT1-1,glT1-m+1,glT1,glT1-m+2,m,glT1-m+1,m,glT1-m+2) ; - coordP1 = glT1-m+2 ; - other2 = glT1-m+2 ; - S1(glT1,glT1-m+2,m,glT1-m+2) ; - local2 = glT1-m+2 ; - coordP1 = glT1-m+2 ; - other1 = glT1+1 ; - other2 = glT1-m+3 ; - other4 = glT1-m+2 ; - other6 = glT1-m+3 ; - S3(glT1,glT1-m+2,glT1+1,glT1-m+3,m,glT1-m+2,m,glT1-m+3) ; - for (rp1=glT1-m+3;rp1<=m-1;rp1++) { - local1 = glT1-rp1+1 ; - coordT1 = glT1-1 ; - other3 = glT1-rp1+1 ; - other5 = glT1-rp1+2 ; - S5(glT1-1,rp1,glT1,rp1,glT1-rp1+1,rp1,glT1-rp1+2,rp1) ; - local1 = glT1-rp1+2 ; - local2 = rp1-1 ; - coordT1 = glT1-1 ; - coordP1 = rp1-1 ; - other3 = glT1-rp1+2 ; - other4 = rp1-1 ; - other5 = glT1-rp1+2 ; - S6(glT1-1,rp1-1,glT1,rp1,glT1-rp1+2,rp1-1,glT1-rp1+2,rp1) ; - other1 = glT1+1 ; - other3 = glT1-rp1+2 ; - other4 = rp1-1 ; - other5 = glT1-rp1+3 ; - S7(glT1-1,rp1-1,glT1+1,rp1,glT1-rp1+2,rp1-1,glT1-rp1+3,rp1) ; - other1 = glT1-rp1+2 ; - S1(glT1,rp1,glT1-rp1+2,rp1) ; - local1 = glT1-rp1+2 ; - other1 = glT1+1 ; - other3 = glT1-rp1+2 ; - other5 = glT1-rp1+3 ; - S2(glT1,rp1,glT1+1,rp1,glT1-rp1+2,rp1,glT1-rp1+3,rp1) ; - other2 = rp1+1 ; - other3 = glT1-rp1+2 ; - other5 = glT1-rp1+2 ; - other6 = rp1+1 ; - S3(glT1,rp1,glT1+1,rp1+1,glT1-rp1+2,rp1,glT1-rp1+2,rp1+1) ; - other1 = glT1+2 ; - other2 = rp1+1 ; - other3 = glT1-rp1+2 ; - other5 = glT1-rp1+3 ; - other6 = rp1+1 ; - S4(glT1,rp1,glT1+2,rp1+1,glT1-rp1+2,rp1,glT1-rp1+3,rp1+1) ; - } - local1 = glT1-m+1 ; - coordT1 = glT1-1 ; - other3 = glT1-m+1 ; - other5 = glT1-m+2 ; - S5(glT1-1,m,glT1,m,glT1-m+1,m,glT1-m+2,m) ; - local1 = glT1-m+2 ; - local2 = m-1 ; - coordT1 = glT1-1 ; - coordP1 = m-1 ; - other3 = glT1-m+2 ; - other4 = m-1 ; - other5 = glT1-m+2 ; - S6(glT1-1,m-1,glT1,m,glT1-m+2,m-1,glT1-m+2,m) ; - other1 = glT1+1 ; - other3 = glT1-m+2 ; - other4 = m-1 ; - other5 = glT1-m+3 ; - S7(glT1-1,m-1,glT1+1,m,glT1-m+2,m-1,glT1-m+3,m) ; - other1 = glT1-m+2 ; - S1(glT1,m,glT1-m+2,m) ; - local1 = glT1-m+2 ; - other1 = glT1+1 ; - other3 = glT1-m+2 ; - other5 = glT1-m+3 ; - S2(glT1,m,glT1+1,m,glT1-m+2,m,glT1-m+3,m) ; - for (coordP1=glT1-m+2;coordP1<=m;coordP1++) { - S8(glT1,coordP1) ; - } - } - if (m >= 3) { - glT1 = 2*m-3 ; - rp1 = m-1 ; - local1 = m-1 ; - local2 = m-1 ; - coordT1 = 2*m-4 ; - coordP1 = m-1 ; - other1 = 2*m-3 ; - other2 = m-1 ; - other3 = m-1 ; - other4 = m-1 ; - other6 = m-1 ; - S5(2*m-4,m-1,2*m-3,m-1,m-1,m-1,m,m-1) ; - local2 = m-2 ; - coordT1 = 2*m-4 ; - coordP1 = m-2 ; - other1 = 2*m-3 ; - other2 = m-1 ; - other4 = m-2 ; - other6 = m-1 ; - S6(2*m-4,m-2,2*m-3,m-1,m,m-2,m,m-1) ; - coordT1 = 2*m-3 ; - coordP1 = m-1 ; - other2 = m-1 ; - S1(2*m-3,m-1,m,m-1) ; - local2 = m-1 ; - coordT1 = 2*m-3 ; - coordP1 = m-1 ; - other1 = 2*m-2 ; - other4 = m-1 ; - S3(2*m-3,m-1,2*m-2,m,m,m-1,m,m) ; - local1 = m-2 ; - coordT1 = 2*m-4 ; - other1 = 2*m-3 ; - other3 = m-2 ; - other5 = m-1 ; - S5(2*m-4,m,2*m-3,m,m-2,m,m-1,m) ; - local1 = m-1 ; - local2 = m-1 ; - coordT1 = 2*m-4 ; - coordP1 = m-1 ; - other1 = 2*m-3 ; - other3 = m-1 ; - other4 = m-1 ; - other5 = m-1 ; - S6(2*m-4,m-1,2*m-3,m,m-1,m-1,m-1,m) ; - other1 = 2*m-2 ; - other3 = m-1 ; - other4 = m-1 ; - S7(2*m-4,m-1,2*m-2,m,m-1,m-1,m,m) ; - coordT1 = 2*m-3 ; - other1 = m-1 ; - S1(2*m-3,m,m-1,m) ; - local1 = m-1 ; - coordT1 = 2*m-3 ; - other1 = 2*m-2 ; - other3 = m-1 ; - S2(2*m-3,m,2*m-2,m,m-1,m,m,m) ; - coordT1 = 2*m-3 ; - for (coordP1=m-1;coordP1<=m;coordP1++) { - S8(2*m-3,coordP1) ; - } - } - if (m == 2) { - S5(0,1,1,1,1,1,2,1) ; - S1(1,1,2,1) ; - S3(1,1,2,2,2,1,2,2) ; - S6(0,1,1,2,1,1,1,2) ; - S7(0,1,2,2,1,1,2,2) ; - S1(1,2,1,2) ; - S2(1,2,2,2,1,2,2,2) ; - for (coordP1=1;coordP1<=2;coordP1++) { - S8(1,coordP1) ; - } - } - if (m >= 2) { - glT1 = 2*m-2 ; - local1 = m-1 ; - coordT1 = 2*m-3 ; - other1 = 2*m-2 ; - other3 = m-1 ; - S5(2*m-3,m,2*m-2,m,m-1,m,m,m) ; - local2 = m-1 ; - coordT1 = 2*m-3 ; - coordP1 = m-1 ; - other1 = 2*m-2 ; - other4 = m-1 ; - S6(2*m-3,m-1,2*m-2,m,m,m-1,m,m) ; - coordT1 = 2*m-2 ; - S1(2*m-2,m,m,m) ; - coordT1 = 2*m-2 ; - S8(2*m-2,m) ; - } -} diff --git a/cloog-0.17.0/test/classen2.c b/cloog-0.17.0/test/classen2.c deleted file mode 100644 index 2afd378..0000000 --- a/cloog-0.17.0/test/classen2.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/classen2.cloog by CLooG 0.14.0-271-gaa1e292 gmp bits in 0.14s. */ -if ((M >= 2) && (N >= 3) && (outerProcTileScatter1 >= outerProcTileScatter2) && (5*outerProcTileScatter1 <= M+2*N-4) && (5*outerProcTileScatter1 <= 5*outerProcTileScatter2+N+2) && (outerProcTileScatter2 >= 0) && (5*outerProcTileScatter2 <= M+N-2) && (outerTimeTileScatter >= outerProcTileScatter1) && (outerTimeTileScatter <= 2*outerProcTileScatter1) && (outerTimeTileScatter <= outerProcTileScatter1+outerProcTileScatter2+1) && (5*outerTimeTileScatter <= 2*M+2*N-6) && (5*outerTimeTileScatter <= 5*outerProcTileScatter1+M+2) && (5*outerTimeTileScatter >= 10*outerProcTileScatter1-2*N-2) && (5*outerTimeTileScatter <= 5*outerProcTileScatter2+M+N) && (5*outerTimeTileScatter >= 10*outerProcTileScatter2-N-3) && (5*outerTimeTileScatter <= 10*outerProcTileScatter2+N+3) && (5*outerTimeTileScatter >= 5*outerProcTileScatter1+5*outerProcTileScatter2-N-4)) { - for (compScatter1=max(max(max(max(max(4,5*outerTimeTileScatter),5*outerProcTileScatter2+1),5*outerProcTileScatter1+5*outerProcTileScatter2-N),10*outerProcTileScatter1-2*N+2),10*outerProcTileScatter2-N+1);compScatter1<=min(min(min(min(min(5*outerTimeTileScatter+4,2*M+2*N-6),5*outerProcTileScatter1+M+2),5*outerProcTileScatter1+5*outerProcTileScatter2+5),5*outerProcTileScatter2+M+N),10*outerProcTileScatter2+N+3);compScatter1++) { - for (compScatter2=max(max(max(max(ceild(compScatter1+4,2),5*outerProcTileScatter1),5*outerProcTileScatter2+1),compScatter1-M+2),compScatter1-5*outerProcTileScatter2-1);compScatter2<=min(min(min(min(floord(compScatter1+2*N-2,2),compScatter1),5*outerProcTileScatter1+4),compScatter1-5*outerProcTileScatter2+N),5*outerProcTileScatter2+N+2);compScatter2++) { - for (compScatter3=max(max(5*outerProcTileScatter2,compScatter1-compScatter2+3),compScatter2-N+2);compScatter3<=min(min(compScatter2-1,5*outerProcTileScatter2+4),compScatter1-compScatter2+N);compScatter3++) { - S1(compScatter1-compScatter2+1,-compScatter1+compScatter2+compScatter3-2,compScatter2-compScatter3,compScatter1,compScatter2,compScatter3); - } - } - } -} diff --git a/cloog-0.17.0/test/classen2.cloog b/cloog-0.17.0/test/classen2.cloog deleted file mode 100644 index dc12884..0000000 --- a/cloog-0.17.0/test/classen2.cloog +++ /dev/null @@ -1,57 +0,0 @@ -# created: Wed Mar 17 17:37:13 CET 2010 -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context (no parameter, so always true) -1 7 - 1 0 0 0 0 0 0 - - -1 # set parameter names -outerTimeTileScatter outerProcTileScatter1 outerProcTileScatter2 M N - -# --------------------- STATEMENTS -------------------- -1 - -1 # domains per statement -20 13 - 1 2 1 1 -1 0 0 0 0 0 0 0 0 - 1 1 1 1 0 -1 0 0 0 0 0 0 1 - 1 1 1 0 0 0 -1 0 0 0 0 0 1 - 1 -2 -1 -1 1 0 0 0 0 0 0 0 0 - 1 -1 -1 -1 0 1 0 0 0 0 0 0 -1 - 1 -1 -1 0 0 0 1 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 0 0 0 0 0 0 0 1 -2 - 1 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 0 0 0 0 0 0 1 -2 - 1 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 0 0 0 0 1 0 -1 - 1 0 0 0 1 0 0 -5 0 0 0 0 0 - 1 0 0 0 0 1 0 0 -5 0 0 0 0 - 1 0 0 0 0 0 1 0 0 -5 0 0 0 - 1 0 0 0 0 0 -1 0 0 5 0 0 4 - 1 0 0 0 0 -1 0 0 5 0 0 0 4 - 1 0 0 0 -1 0 0 5 0 0 0 0 4 - 1 0 0 0 0 0 0 0 0 0 0 1 -3 - 1 0 0 0 0 0 0 0 0 0 1 0 -2 - - -0 0 0 # for future options... - - - -1 # set the iterator names -compIter1 compIter2 compIter3 compIter4 compIter5 compIter6 - -# --------------------- SCATTERING -------------------- -1 # Scattering functions -3 16 - 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - - -1 # we set the scattering dimension names -compScatter1 compScatter2 compScatter3 - diff --git a/cloog-0.17.0/test/classen2.good.c b/cloog-0.17.0/test/classen2.good.c deleted file mode 100644 index 6aa11e4..0000000 --- a/cloog-0.17.0/test/classen2.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/classen2.cloog by CLooG 0.14.0-271-gaa1e292 gmp bits in 0.13s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(compIter1,compIter2,compIter3,compIter4,compIter5,compIter6) { hash(1); hash(compIter1); hash(compIter2); hash(compIter3); hash(compIter4); hash(compIter5); hash(compIter6); } - -void test(int outerTimeTileScatter, int outerProcTileScatter1, int outerProcTileScatter2, int M, int N) -{ - /* Scattering iterators. */ - int compScatter1, compScatter2, compScatter3; - /* Original iterators. */ - int compIter1, compIter2, compIter3, compIter4, compIter5, compIter6; - if ((M >= 2) && (N >= 3) && (outerProcTileScatter1 >= outerProcTileScatter2) && (5*outerProcTileScatter1 <= M+2*N-4) && (5*outerProcTileScatter1 <= 5*outerProcTileScatter2+N+2) && (outerProcTileScatter2 >= 0) && (5*outerProcTileScatter2 <= M+N-2) && (outerTimeTileScatter >= outerProcTileScatter1) && (outerTimeTileScatter <= 2*outerProcTileScatter1) && (outerTimeTileScatter <= outerProcTileScatter1+outerProcTileScatter2+1) && (5*outerTimeTileScatter <= 2*M+2*N-6) && (5*outerTimeTileScatter <= 5*outerProcTileScatter1+M+2) && (5*outerTimeTileScatter >= 10*outerProcTileScatter1-2*N-2) && (5*outerTimeTileScatter <= 5*outerProcTileScatter2+M+N) && (5*outerTimeTileScatter >= 10*outerProcTileScatter2-N-3) && (5*outerTimeTileScatter <= 10*outerProcTileScatter2+N+3) && (5*outerTimeTileScatter >= 5*outerProcTileScatter1+5*outerProcTileScatter2-N-4)) { - for (compScatter1=max(max(max(max(max(4,5*outerTimeTileScatter),5*outerProcTileScatter2+1),5*outerProcTileScatter1+5*outerProcTileScatter2-N),10*outerProcTileScatter1-2*N+2),10*outerProcTileScatter2-N+1);compScatter1<=min(min(min(min(min(5*outerTimeTileScatter+4,2*M+2*N-6),5*outerProcTileScatter1+M+2),5*outerProcTileScatter1+5*outerProcTileScatter2+5),5*outerProcTileScatter2+M+N),10*outerProcTileScatter2+N+3);compScatter1++) { - for (compScatter2=max(max(max(max(ceild(compScatter1+4,2),5*outerProcTileScatter1),5*outerProcTileScatter2+1),compScatter1-M+2),compScatter1-5*outerProcTileScatter2-1);compScatter2<=min(min(min(min(floord(compScatter1+2*N-2,2),compScatter1),5*outerProcTileScatter1+4),compScatter1-5*outerProcTileScatter2+N),5*outerProcTileScatter2+N+2);compScatter2++) { - for (compScatter3=max(max(5*outerProcTileScatter2,compScatter1-compScatter2+3),compScatter2-N+2);compScatter3<=min(min(compScatter2-1,5*outerProcTileScatter2+4),compScatter1-compScatter2+N);compScatter3++) { - S1(compScatter1-compScatter2+1,-compScatter1+compScatter2+compScatter3-2,compScatter2-compScatter3,compScatter1,compScatter2,compScatter3); - } - } - } - } -} diff --git a/cloog-0.17.0/test/constant.c b/cloog-0.17.0/test/constant.c deleted file mode 100644 index 3a6378e..0000000 --- a/cloog-0.17.0/test/constant.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/constant.cloog by CLooG 0.14.0-333-g4442dac gmp bits in 0.01s. */ -for (c2=0;c2<=min(1023,M+1024);c2++) { - S1(c2); - S3(c2); -} -for (c2=max(0,M+1025);c2<=1023;c2++) { - S2(c2); - S3(c2); -} -for (c1=0;c1<=min(1023,M+1024);c1++) { - S4(c1); - S6(c1); -} -for (c1=max(0,M+1025);c1<=1023;c1++) { - S5(c1); - S6(c1); -} diff --git a/cloog-0.17.0/test/constant.cloog b/cloog-0.17.0/test/constant.cloog deleted file mode 100644 index d251b1b..0000000 --- a/cloog-0.17.0/test/constant.cloog +++ /dev/null @@ -1,128 +0,0 @@ -# CLooG -> CLooG -# This is an automatic dump of a CLooG input file from a CloogInput data -# structure. - -# Language: C -c - -# Context: -0 3 - -0 # Parameter name(s) - -# Statement number: -6 - -# Iteration domain of statement 1 (Stmt_if.then). -1 - -3 4 1 0 0 1 -1 1 0 0 -1 -1 0 1023 -1 -1 1 1024 - -0 0 0 # For future options. - -# Iteration domain of statement 2 (Stmt_if.else). -1 - -3 4 1 0 0 1 -1 1 0 0 -1 -1 0 1023 -1 1 -1 -1025 - -0 0 0 # For future options. - -# Iteration domain of statement 3 (Stmt_if.end). -1 - -2 4 1 0 0 1 -1 1 0 0 -1 -1 0 1023 - -0 0 0 # For future options. - -# Iteration domain of statement 1 (Stmt_if.then). -1 - -3 4 1 0 0 1 -1 1 0 0 -1 -1 0 1023 -1 -1 1 1024 - -0 0 0 # For future options. - -# Iteration domain of statement 2 (Stmt_if.else). -1 - -3 4 1 0 0 1 -1 1 0 0 -1 -1 0 1023 -1 1 -1 -1025 - -0 0 0 # For future options. - -# Iteration domain of statement 3 (Stmt_if.end). -1 - -2 4 1 0 0 1 -1 1 0 0 -1 -1 0 1023 - -0 0 0 # For future options. - - -0 # Iterator name(s) - -# --------------------- SCATTERING -------------------- -6 # Scattering functions - -# Scattering of statement 1 (Stmt_if.then). -1 - -3 7 3 1 0 1 -0 0 0 1 0 0 0 -0 0 1 0 -1 0 0 -0 1 0 0 0 0 1 - -# Scattering of statement 2 (Stmt_if.else). -1 - -3 7 3 1 0 1 -0 0 0 1 0 0 -1 -0 0 1 0 -1 0 0 -0 1 0 0 0 0 1 - -# Scattering of statement 3 (Stmt_if.end). -1 - -3 7 3 1 0 1 -0 0 0 1 0 0 -2 -0 0 1 0 -1 0 0 -0 1 0 0 0 0 1 - -# Scattering of statement 1 (Stmt_if.then). -1 - -3 7 3 1 0 1 -0 0 0 1 0 0 0 -0 1 0 0 -1 0 0 -0 0 1 0 0 0 0 - -# Scattering of statement 2 (Stmt_if.else). -1 - -3 7 3 1 0 1 -0 0 0 1 0 0 -1 -0 1 0 0 -1 0 0 -0 0 1 0 0 0 0 - -# Scattering of statement 3 (Stmt_if.end). -1 - -3 7 3 1 0 1 -0 0 0 1 0 0 -2 -0 1 0 0 -1 0 0 -0 0 1 0 0 0 0 - -0 # Scattering dimension name(s) diff --git a/cloog-0.17.0/test/constant.good.c b/cloog-0.17.0/test/constant.good.c deleted file mode 100644 index c94fc44..0000000 --- a/cloog-0.17.0/test/constant.good.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Generated from ../../../git/cloog/test/constant.cloog by CLooG 0.14.0-333-g4442dac gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } -#define S3(i) { hash(3); hash(i); } -#define S4(i) { hash(4); hash(i); } -#define S5(i) { hash(5); hash(i); } -#define S6(i) { hash(6); hash(i); } - -void test(int M) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i; - for (c2=0;c2<=min(1023,M+1024);c2++) { - S1(c2); - S3(c2); - } - for (c2=max(0,M+1025);c2<=1023;c2++) { - S2(c2); - S3(c2); - } - for (c1=0;c1<=min(1023,M+1024);c1++) { - S4(c1); - S6(c1); - } - for (c1=max(0,M+1025);c1<=1023;c1++) { - S5(c1); - S6(c1); - } -} diff --git a/cloog-0.17.0/test/constbound.c b/cloog-0.17.0/test/constbound.c deleted file mode 100644 index c68b1c9..0000000 --- a/cloog-0.17.0/test/constbound.c +++ /dev/null @@ -1,13 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/constbound.cloog by CLooG 0.14.0-170-g72daac3 gmp bits in 0.01s. */ -for (t0=0;t0<=199;t0++) { - for (t2=50*t0;t2<=50*t0+24;t2++) { - for (t3=0;t3<=t2;t3++) { - S1(t0,t2,t3); - } - } - for (t2=50*t0+25;t2<=50*t0+49;t2++) { - for (t3=0;t3<=t2;t3++) { - S2(t0,t2,t3); - } - } -} diff --git a/cloog-0.17.0/test/constbound.cloog b/cloog-0.17.0/test/constbound.cloog deleted file mode 100644 index 78ac963..0000000 --- a/cloog-0.17.0/test/constbound.cloog +++ /dev/null @@ -1,53 +0,0 @@ -# CLooG script generated automatically by PLUTO -# language: C -c - -# Context -0 2 - -1 - - -# Number of statements -2 - -1 # of domains -6 5 -1 0 1 0 0 -1 0 -1 0 9999 -1 0 0 1 0 -1 0 1 -1 0 -1 -50 1 0 0 -1 50 -1 0 24 -0 0 0 - -1 -6 5 -1 0 1 0 0 -1 0 -1 0 9999 -1 0 0 1 0 -1 0 1 -1 0 -1 -50 1 0 -25 -1 50 -1 0 49 -0 0 0 - -0 - -# of scattering functions -2 - -4 9 -0 1 0 0 0 -1 0 0 0 -0 0 1 0 0 0 0 0 0 -0 0 0 1 0 0 -1 0 0 -0 0 0 0 1 0 0 -1 0 - -4 9 -0 1 0 0 0 -1 0 0 0 -0 0 1 0 0 0 0 0 -1 -0 0 0 1 0 0 -1 0 0 -0 0 0 0 1 0 0 -1 0 - -# we will set the scattering dimension names -4 -t0 t1 t2 t3 diff --git a/cloog-0.17.0/test/constbound.good.c b/cloog-0.17.0/test/constbound.good.c deleted file mode 100644 index 30704dd..0000000 --- a/cloog-0.17.0/test/constbound.good.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/constbound.cloog by CLooG 0.14.0-170-g72daac3 64 bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test() -{ - /* Scattering iterators. */ - int t0, t2, t3; - /* Original iterators. */ - int i, j, k; - for (t0=0;t0<=199;t0++) { - for (t2=max(0,50*t0);t2<=50*t0+24;t2++) { - for (t3=0;t3<=t2;t3++) { - S1(t0,t2,t3); - } - } - for (t2=50*t0+25;t2<=min(9999,50*t0+49);t2++) { - for (t3=0;t3<=t2;t3++) { - S2(t0,t2,t3); - } - } - } -} diff --git a/cloog-0.17.0/test/darte.c b/cloog-0.17.0/test/darte.c deleted file mode 100644 index e185b7a..0000000 --- a/cloog-0.17.0/test/darte.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/darte.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.05s. */ -if (n >= 1) { - for (t3=n+3;t3<=3*n+1;t3++) { - if ((t3+n+1)%2 == 0) { - S1(1,n,(t3-n-1)/2); - } - } - for (t1=-n+2;t1<=n-1;t1++) { - if (t1 >= 2) { - for (t3=t1+4;t3<=t1+2*n+2;t3++) { - if ((t1+t3)%2 == 0) { - S1(t1+1,1,(-t1+t3-2)/2); - } - } - } - for (t2=max(-t1+2,t1+2);t2<=-t1+4;t2++) { - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - if ((t1+t3)%2 == 0) { - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2); - } - } - } - } - for (t2=max(-t1+5,t1+3);t2<=min(-t1+2*n,t1+2*n);t2++) { - for (t3=1;t3<=min(n,t2+1);t3++) { - if ((t1+t2+1)%2 == 0) { - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3); - } - } - for (t3=t2+2;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3); - } - if ((t1+t2)%2 == 0) { - if ((t1+t3)%2 == 0) { - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2); - } - } - } - for (t3=max(n+1,t2+2);t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - if ((t1+t3)%2 == 0) { - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2); - } - } - } - } - if (t1 <= -1) { - for (t3=1;t3<=n;t3++) { - S2(t1+n-1,n,t3); - } - } - for (t2=-t1+2*n+1;t2<=min(-t1+2*n+3,t1+2*n+1);t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3); - } - } - } - } - for (t3=1;t3<=n;t3++) { - S2(n,1,t3); - } -} diff --git a/cloog-0.17.0/test/darte.cloog b/cloog-0.17.0/test/darte.cloog deleted file mode 100644 index a853691..0000000 --- a/cloog-0.17.0/test/darte.cloog +++ /dev/null @@ -1,52 +0,0 @@ -# language: C -c - -# parameters n m -1 3 -# n 1 -1 0 0 -1 -n - -2 # Number of statements - -1 -# S1 {i, j, k | 1<=i<=n; 1<=j<=n, 1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 - -1 -# S2 {i, j, k | 1<=i<=n; 1<=j<=n, 1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 -0 - -2 -# Scattering functions -3 9 -# c1 c2 c3 i j k n 1 -0 1 0 0 -1 1 0 0 0 -0 0 1 0 -1 -1 0 0 0 -0 0 0 1 -1 -1 -2 0 0 - -3 9 -# c1 c2 c3 i j k n 1 -0 1 0 0 -1 1 0 0 -1 -0 0 1 0 -1 -1 0 0 -2 -0 0 0 1 0 0 -1 0 0 -1 -t1 t2 t3 diff --git a/cloog-0.17.0/test/darte.good.c b/cloog-0.17.0/test/darte.good.c deleted file mode 100644 index 298c24f..0000000 --- a/cloog-0.17.0/test/darte.good.c +++ /dev/null @@ -1,449 +0,0 @@ -/* Generated from ../../../git/cloog/test/darte.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.27s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int n) -{ - /* Scattering iterators. */ - int t1, t2, t3; - /* Original iterators. */ - int i, j, k; - if (n >= 1) { - t1 = -n+1 ; - t2 = n+1 ; - for (t3=n+3;t3<=3*n+1;t3++) { - if ((t3+n+1)%2 == 0) { - k = (t3-n-1)/2 ; - S1(1,n,(t3-n-1)/2) ; - } - } - } - if ((n >= 2) && (n <= 2)) { - t1 = -n+2 ; - for (t2=-n+4;t2<=3*n-2;t2++) { - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t2+n)%2 == 0) { - i = (t2-n+2)/2 ; - j = (t2+n-2)/2 ; - if ((t3+n)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t2-n+2)/2,(t2+n-2)/2,(-t2+t3)/2) ; - } - } - } - } - t2 = n+3 ; - for (t3=1;t3<=n;t3++) { - S2(1,n,t3) ; - } - } - if (n >= 3) { - t1 = -n+2 ; - for (t2=n;t2<=n+2;t2++) { - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t2+n)%2 == 0) { - i = (t2-n+2)/2 ; - j = (t2+n-2)/2 ; - if ((t3+n)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t2-n+2)/2,(t2+n-2)/2,(-t2+t3)/2) ; - } - } - } - } - t2 = n+3 ; - for (t3=1;t3<=n;t3++) { - S2(1,n,t3) ; - } - } - for (t1=ceild(-2*n+5,2);t1<=min(-n+6,-1);t1++) { - for (t2=-t1+2;t2<=-t1+4;t2++) { - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+5;t2<=t1+2*n;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - t2 = t1+2*n+1 ; - for (t3=1;t3<=n;t3++) { - i = t1+n-1 ; - S2(t1+n-1,n,t3) ; - } - } - if (n == 2) { - for (t3=5;t3<=7;t3++) { - if ((t3+1)%2 == 0) { - k = (t3-3)/2 ; - S1(2,1,(t3-3)/2) ; - } - } - for (t2=4;t2<=6;t2++) { - for (t3=1;t3<=2;t3++) { - if (t2%2 == 0) { - i = (t2-2)/2 ; - j = (t2-2)/2 ; - S2((t2-2)/2,(t2-2)/2,t3) ; - } - } - } - } - for (t1=-n+7;t1<=-1;t1++) { - for (t2=-t1+2;t2<=-t1+4;t2++) { - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+5;t2<=n-2;t2++) { - for (t3=1;t3<=t2+1;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - for (t3=n+1;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=n-1;t2<=t1+2*n;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - t2 = t1+2*n+1 ; - for (t3=1;t3<=n;t3++) { - i = t1+n-1 ; - S2(t1+n-1,n,t3) ; - } - } - if (n >= 3) { - for (t1=0;t1<=min(1,-n+6);t1++) { - for (t2=t1+2;t2<=-t1+4;t2++) { - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+5;t2<=-t1+2*n;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+2*n+1;t2<=t1+2*n+1;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - } - } - } - for (t1=max(-n+7,0);t1<=1;t1++) { - for (t2=t1+2;t2<=-t1+4;t2++) { - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+5;t2<=n-2;t2++) { - for (t3=1;t3<=t2+1;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - for (t3=n+1;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=n-1;t2<=-t1+2*n;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+2*n+1;t2<=t1+2*n+1;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - } - } - for (t1=2;t1<=n-5;t1++) { - t2 = t1+2 ; - for (t3=t1+4;t3<=t1+2*n+2;t3++) { - i = t1+1 ; - if ((t1+t3)%2 == 0) { - k = (-t1+t3-2)/2 ; - S1(t1+1,1,(-t1+t3-2)/2) ; - } - } - for (t2=t1+3;t2<=n-2;t2++) { - for (t3=1;t3<=t2+1;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - for (t3=n+1;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=n-1;t2<=-t1+2*n;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+2*n+1;t2<=-t1+2*n+3;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - } - } - for (t1=max(2,n-4);t1<=floord(2*n-3,2);t1++) { - t2 = t1+2 ; - for (t3=t1+4;t3<=t1+2*n+2;t3++) { - i = t1+1 ; - if ((t1+t3)%2 == 0) { - k = (-t1+t3-2)/2 ; - S1(t1+1,1,(-t1+t3-2)/2) ; - } - } - for (t2=t1+3;t2<=-t1+2*n;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - for (t3=t2+2;t3<=t2+2*n;t3++) { - if ((t1+t2)%2 == 0) { - i = (t1+t2)/2 ; - j = (-t1+t2)/2 ; - if ((t1+t3)%2 == 0) { - k = (-t2+t3)/2 ; - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) ; - } - } - } - } - for (t2=-t1+2*n+1;t2<=-t1+2*n+3;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t1+t2+1)%2 == 0) { - i = (t1+t2-3)/2 ; - j = (-t1+t2-1)/2 ; - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) ; - } - } - } - } - if (n >= 3) { - t1 = n-1 ; - t2 = n+1 ; - for (t3=n+3;t3<=3*n+1;t3++) { - if ((t3+n+1)%2 == 0) { - k = (t3-n-1)/2 ; - S1(n,1,(t3-n-1)/2) ; - } - } - for (t2=n+2;t2<=n+4;t2++) { - for (t3=1;t3<=n;t3++) { - if ((t2+n)%2 == 0) { - i = (t2+n-4)/2 ; - j = (t2-n)/2 ; - S2((t2+n-4)/2,(t2-n)/2,t3) ; - } - } - } - } - if (n >= 1) { - t2 = n+3 ; - for (t3=1;t3<=n;t3++) { - S2(n,1,t3) ; - } - } -} diff --git a/cloog-0.17.0/test/dartef.cloog b/cloog-0.17.0/test/dartef.cloog deleted file mode 100644 index 14454e2..0000000 --- a/cloog-0.17.0/test/dartef.cloog +++ /dev/null @@ -1,52 +0,0 @@ -# language: FORTRAN -f - -# parameters n m -1 3 -# n 1 -1 0 0 -1 -n - -2 # Number of statements - -1 -# S1 {i, j, k | 1<=i<=n; 1<=j<=n, 1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 - -1 -# S2 {i, j, k | 1<=i<=n; 1<=j<=n, 1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 -0 - -2 -# Scattering functions -3 9 -# c1 c2 c3 i j k n 1 -0 1 0 0 -1 1 0 0 0 -0 0 1 0 -1 -1 0 0 0 -0 0 0 1 -1 -1 -2 0 0 - -3 9 -# c1 c2 c3 i j k n 1 -0 1 0 0 -1 1 0 0 -1 -0 0 1 0 -1 -1 0 0 -2 -0 0 0 1 0 0 -1 0 0 -1 -t1 t2 t3 diff --git a/cloog-0.17.0/test/dartef.f b/cloog-0.17.0/test/dartef.f deleted file mode 100644 index 50e1073..0000000 --- a/cloog-0.17.0/test/dartef.f +++ /dev/null @@ -1,65 +0,0 @@ -! Generated from /home/skimo/git/cloog/test/dartef.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.08s. -IF (n >= 1) THEN - DO t3=n+3, 3*n+1 - IF (MOD(t3+n+1, 2) == 0) THEN - S1(1,n,(t3-n-1)/2) - END IF - END DO - DO t1=-n+2, n-1 - IF (t1 >= 2) THEN - DO t3=t1+4, t1+2*n+2 - IF (MOD(t1+t3, 2) == 0) THEN - S1(t1+1,1,(-t1+t3-2)/2) - END IF - END DO - END IF - DO t2=MAX(-t1+2,t1+2), -t1+4 - DO t3=t2+2, t2+2*n - IF (MOD(t1+t2, 2) == 0) THEN - IF (MOD(t1+t3, 2) == 0) THEN - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) - END IF - END IF - END DO - END DO - DO t2=MAX(-t1+5,t1+3), MIN(-t1+2*n,t1+2*n) - DO t3=1, MIN(n,t2+1) - IF (MOD(t1+t2+1, 2) == 0) THEN - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) - END IF - END DO - DO t3=t2+2, n - IF (MOD(t1+t2+1, 2) == 0) THEN - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) - END IF - IF (MOD(t1+t2, 2) == 0) THEN - IF (MOD(t1+t3, 2) == 0) THEN - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) - END IF - END IF - END DO - DO t3=MAX(n+1,t2+2), t2+2*n - IF (MOD(t1+t2, 2) == 0) THEN - IF (MOD(t1+t3, 2) == 0) THEN - S1((t1+t2)/2,(-t1+t2)/2,(-t2+t3)/2) - END IF - END IF - END DO - END DO - IF (t1 <= -1) THEN - DO t3=1, n - S2(t1+n-1,n,t3) - END DO - END IF - DO t2=-t1+2*n+1, MIN(-t1+2*n+3,t1+2*n+1) - DO t3=1, n - IF (MOD(t1+t2+1, 2) == 0) THEN - S2((t1+t2-3)/2,(-t1+t2-1)/2,t3) - END IF - END DO - END DO - END DO - DO t3=1, n - S2(n,1,t3) - END DO -END IF diff --git a/cloog-0.17.0/test/dealII.c b/cloog-0.17.0/test/dealII.c deleted file mode 100644 index 200b257..0000000 --- a/cloog-0.17.0/test/dealII.c +++ /dev/null @@ -1,14 +0,0 @@ -/* Generated from ../../../git/cloog/test/dealII.cloog by CLooG 0.14.0-270-g7ee1261 gmp bits in 0.01s. */ -for (scat_0=0;scat_0<=min(T_66,T_2-1);scat_0++) { - S1(scat_0); - S2(scat_0); -} -if ((T_2 == 0) && (T_67 == 0)) { - S1(0); -} -for (scat_0=max(0,T_66+1);scat_0<=T_2-1;scat_0++) { - S1(scat_0); -} -for (scat_0=T_2;scat_0<=min(T_66,T_67-1);scat_0++) { - S2(scat_0); -} diff --git a/cloog-0.17.0/test/dealII.cloog b/cloog-0.17.0/test/dealII.cloog deleted file mode 100644 index 1c648f4..0000000 --- a/cloog-0.17.0/test/dealII.cloog +++ /dev/null @@ -1,54 +0,0 @@ -# CLooG -> CLooG -# This is an automatic dump of a CLooG input file from a CloogProgram data -# structure. WARNING: it is highly dangerous and MAY be correct ONLY if -# - it has been dumped before loop generation. -# - option -noscalars is used (it removes scalar dimensions otherwise) -# - option -l is at least the original scattering dimension number -# ASK THE AUTHOR IF YOU *NEED* SOMETHING MORE ROBUST -# Language: C -c - -# Context (3 parameter(s)): -4 5 -1 -1 0 0 4 -1 1 0 0 0 -1 0 -1 0 4 -1 0 1 0 0 -1 # Parameter name(s) -T_2 T_67 T_66 - -# Statement number: -2 - -# Iteration domain of statement 1. -2 - -2 6 -1 -1 1 0 0 -1 -1 1 0 0 0 0 - -2 6 -1 -1 0 -1 0 0 -1 1 0 0 0 0 -0 0 0 # For future options. - -# Iteration domain of statement 2. -2 - -3 6 -1 -1 1 0 0 -1 -1 1 0 0 0 0 -1 -1 0 0 1 0 - -3 6 -1 -1 0 1 0 -1 -1 1 0 0 0 0 -1 -1 0 0 1 0 -0 0 0 # For future options. - -1 # Iterator name(s) -scat_0 scat_1 scat_2 git_0 - -# No scattering functions. -0 - diff --git a/cloog-0.17.0/test/dealII.good.c b/cloog-0.17.0/test/dealII.good.c deleted file mode 100644 index 9a220ff..0000000 --- a/cloog-0.17.0/test/dealII.good.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Generated from ../../../git/cloog/test/dealII.cloog by CLooG 0.14.0-270-g7ee1261 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(scat_0) { hash(1); hash(scat_0); } -#define S2(scat_0) { hash(2); hash(scat_0); } - -void test(int T_2, int T_67, int T_66) -{ - /* Original iterators. */ - int scat_0; - for (scat_0=0;scat_0<=min(T_66,T_2-1);scat_0++) { - S1(scat_0); - S2(scat_0); - } - if ((T_2 == 0) && (T_67 == 0)) { - S1(0); - } - for (scat_0=max(0,T_66+1);scat_0<=T_2-1;scat_0++) { - S1(scat_0); - } - for (scat_0=T_2;scat_0<=min(T_66,T_67-1);scat_0++) { - S2(scat_0); - } -} diff --git a/cloog-0.17.0/test/donotsimp.c b/cloog-0.17.0/test/donotsimp.c deleted file mode 100644 index bccb8b4..0000000 --- a/cloog-0.17.0/test/donotsimp.c +++ /dev/null @@ -1,9 +0,0 @@ -/* Generated from ../../../git/cloog/test/donotsimp.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -for (c2=1;c2<=10;c2++) { - for (c4=1;c4<=c2;c4++) { - S1(c2,c4) ; - } - for (c4=11;c4<=M;c4++) { - S2(c2,c4) ; - } -} diff --git a/cloog-0.17.0/test/donotsimp.cloog b/cloog-0.17.0/test/donotsimp.cloog deleted file mode 100644 index 6450917..0000000 --- a/cloog-0.17.0/test/donotsimp.cloog +++ /dev/null @@ -1,54 +0,0 @@ -# Language -c - -# Context - -# {n>=20} - 1 3 - 1 1 -20 -0 - -# Number of statments -2 - -1 -# {i,j | 0<=i<=10 1<=j<=i} - - 4 5 - 1 1 0 0 -1 - 1 -1 0 0 10 - 1 0 1 0 -1 - 1 1 -1 0 0 -0 0 0 - -1 -# {i,j | 0<=i<=10 11<=j<=n} - - 4 5 - 1 1 0 0 -1 - 1 -1 0 0 10 - 1 0 1 0 -11 - 1 0 -1 1 0 -0 0 0 - -0 -# Scattering functions -2 - - 5 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - - 5 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - - -0 - diff --git a/cloog-0.17.0/test/donotsimp.good.c b/cloog-0.17.0/test/donotsimp.good.c deleted file mode 100644 index 8e45ab8..0000000 --- a/cloog-0.17.0/test/donotsimp.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/donotsimp.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - for (c2=1;c2<=10;c2++) { - for (c4=1;c4<=c2;c4++) { - S1(c2,c4) ; - } - for (c4=11;c4<=M;c4++) { - S2(c2,c4) ; - } - } -} diff --git a/cloog-0.17.0/test/dot.c b/cloog-0.17.0/test/dot.c deleted file mode 100644 index 5114ef1..0000000 --- a/cloog-0.17.0/test/dot.c +++ /dev/null @@ -1,9 +0,0 @@ -/* Generated from ../../../git/cloog/test/dot.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (j=1;j<=M;j++) { - S1(0,j) ; -} -for (i=1;i<=N;i++) { - for (j=1;j<=M;j++) { - S2(i,j) ; - } -} diff --git a/cloog-0.17.0/test/dot.cloog b/cloog-0.17.0/test/dot.cloog deleted file mode 100644 index 112816e..0000000 --- a/cloog-0.17.0/test/dot.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# language: C -c - -# parameters {M, N | M>=1 N >=1} -2 4 -1 1 0 -1 -1 0 1 -1 -0 - -2 # Number of statements - -1 -# {i, j | i=0 0<=i<=N 1<=j<=M} -5 6 -0 1 0 0 0 0 -1 1 0 0 0 0 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 - -1 -# {i, j | i>=1 0<=i<=N 1<=j<=M} -5 6 -1 1 0 0 0 -1 -1 1 0 0 0 0 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/dot.good.c b/cloog-0.17.0/test/dot.good.c deleted file mode 100644 index 9cb7b96..0000000 --- a/cloog-0.17.0/test/dot.good.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated from ../../../git/cloog/test/dot.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - for (j=1;j<=M;j++) { - S1(0,j) ; - } - for (i=1;i<=N;i++) { - for (j=1;j<=M;j++) { - S2(i,j) ; - } - } -} diff --git a/cloog-0.17.0/test/dot2.c b/cloog-0.17.0/test/dot2.c deleted file mode 100644 index 3b6eb5d..0000000 --- a/cloog-0.17.0/test/dot2.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Generated from ../../../git/cloog/test/dot2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -for (i=1;i<=min(M,N);i++) { - S1(i) ; - for (j=1;j<=M;j++) { - S2(i,j) ; - } -} -for (i=N+1;i<=M;i++) { - S1(i) ; -} -for (i=M+1;i<=N;i++) { - for (j=1;j<=M;j++) { - S2(i,j) ; - } -} diff --git a/cloog-0.17.0/test/dot2.cloog b/cloog-0.17.0/test/dot2.cloog deleted file mode 100644 index 71f471a..0000000 --- a/cloog-0.17.0/test/dot2.cloog +++ /dev/null @@ -1,29 +0,0 @@ -# language: C -c - -# parameters {M, N | M>=1 N >=1} -2 4 -1 1 0 -1 -1 0 1 -1 -0 - -2 # Number of statements - -1 -# {i | 1<=i<=M} -2 5 -1 1 0 0 -1 -1 -1 1 0 0 -0 0 0 - -1 -# {i, j | 1<=i<=N 1<=j<=M} -4 6 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/dot2.good.c b/cloog-0.17.0/test/dot2.good.c deleted file mode 100644 index 9b7805c..0000000 --- a/cloog-0.17.0/test/dot2.good.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Generated from ../../../git/cloog/test/dot2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - for (i=1;i<=min(M,N);i++) { - S1(i) ; - for (j=1;j<=M;j++) { - S2(i,j) ; - } - } - for (i=N+1;i<=M;i++) { - S1(i) ; - } - for (i=M+1;i<=N;i++) { - for (j=1;j<=M;j++) { - S2(i,j) ; - } - } -} diff --git a/cloog-0.17.0/test/double.c b/cloog-0.17.0/test/double.c deleted file mode 100644 index b8e5e59..0000000 --- a/cloog-0.17.0/test/double.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from ../../../git/cloog/test/double.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (M >= 0) { - for (i=0;i<=M;i++) { - S1(i) ; - for (j=0;j<=N;j++) { - S2(i,j) ; - S3(i,j) ; - } - S4(i) ; - } -} diff --git a/cloog-0.17.0/test/double.cloog b/cloog-0.17.0/test/double.cloog deleted file mode 100644 index a9db60d..0000000 --- a/cloog-0.17.0/test/double.cloog +++ /dev/null @@ -1,69 +0,0 @@ -# language: C -c - -# parameters n m -1 4 -# n m 1 -1 0 1 0 -0 - -4 # Number of statements - -1 -# S1 {i | 0<=i<=n} -2 5 -# i n m 1 -1 1 0 0 0 -1 -1 1 0 0 -0 0 0 - -1 -# S2 {i, j | 0<=i<=n; 0<=j<=m} -4 6 -# i j n m 1 -1 1 0 0 0 0 -1 -1 0 1 0 0 -1 0 1 0 0 0 -1 0 -1 0 1 0 -0 0 0 - -1 -# S3 {i, j | 0<=i<=n; 0<=j<=m} -4 6 -# i j n m 1 -1 1 0 0 0 0 -1 -1 0 1 0 0 -1 0 1 0 0 0 -1 0 -1 0 1 0 -0 0 0 - -1 -# S4 {i | 0<=i<=n} -2 5 -# i n m 1 -1 1 0 0 0 -1 -1 1 0 0 -0 0 0 -0 - -0 # Scattering functions -2 7 -# c1 C2 i n m 1 -0 1 0 -1 0 0 0 -0 0 1 0 0 0 -1 - -2 8 -# c1 C2 i j n m 1 -0 1 0 -1 0 0 0 0 -0 0 1 0 0 0 0 -2 - -2 8 -# c1 C2 i j n m 1 -0 1 0 -1 0 0 0 0 -0 0 1 0 0 0 0 -3 - -2 7 -# c1 C2 i n m 1 -0 1 0 -1 0 0 0 -0 0 1 0 0 0 -4 -0 diff --git a/cloog-0.17.0/test/double.good.c b/cloog-0.17.0/test/double.good.c deleted file mode 100644 index 7aa0eb3..0000000 --- a/cloog-0.17.0/test/double.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/double.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } -#define S4(i) { hash(4); hash(i); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - for (i=0;i<=M;i++) { - S1(i) ; - for (j=0;j<=N;j++) { - S2(i,j) ; - S3(i,j) ; - } - S4(i) ; - } -} diff --git a/cloog-0.17.0/test/durbin_e_s.c b/cloog-0.17.0/test/durbin_e_s.c deleted file mode 100644 index d0301c8..0000000 --- a/cloog-0.17.0/test/durbin_e_s.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated from ../../../git/cloog/test/durbin_e_s.cloog by CLooG 0.14.0-238-gb1cb779 gmp bits in 0.01s. */ -S4(1,0,0); -S7(1,0,0); -S8(1,0,3); -for (i=2;i<=9;i++) { - S2(i,-7,0); - for (j=-7;j<=i-9;j++) { - S3(i,j,1); - } - S6(i,i-9,2); - S8(i,0,3); - for (j=1;j<=i-1;j++) { - S5(i,j,3); - } -} -S2(10,-7,0); -for (j=-7;j<=1;j++) { - S3(10,j,1); -} -S6(10,1,2); -for (j=1;j<=9;j++) { - S5(10,j,3); - S1(10,j,4); -} -S1(10,10,4); diff --git a/cloog-0.17.0/test/durbin_e_s.cloog b/cloog-0.17.0/test/durbin_e_s.cloog deleted file mode 100644 index 55c0859..0000000 --- a/cloog-0.17.0/test/durbin_e_s.cloog +++ /dev/null @@ -1,71 +0,0 @@ -# language: C -c - -# Context -0 2 - -0 # parameter names - - -8 # Number of statements - -1 -4 5 - 0 1 0 0 -10 - 0 0 0 1 -4 - 1 0 1 0 -1 - 1 0 -1 0 10 -0 0 0 -1 -4 5 - 0 0 1 0 7 - 0 0 0 1 0 - 1 1 0 0 -2 - 1 -1 0 0 10 -0 0 0 -1 -4 5 - 0 0 0 1 -1 - 1 0 1 0 7 - 1 -1 0 0 10 - 1 1 -1 0 -9 -0 0 0 -1 -4 5 - 0 1 0 0 -1 - 0 0 1 0 0 - 0 0 0 1 0 - 1 0 0 0 1 -0 0 0 -1 -4 5 - 0 0 0 1 -3 - 1 1 -1 0 -1 - 1 -1 0 0 10 - 1 0 1 0 -1 -0 0 0 -1 -4 5 - 0 1 -1 0 -9 - 0 0 0 1 -2 - 1 0 1 0 7 - 1 0 -1 0 1 -0 0 0 -1 -4 5 - 0 1 0 0 -1 - 0 0 1 0 0 - 0 0 0 1 0 - 1 0 0 0 1 -0 0 0 -1 -4 5 - 0 0 1 0 0 - 0 0 0 1 -3 - 1 1 0 0 -1 - 1 -1 0 0 9 -0 0 0 -0 # iterator names -0 # scattering functions -0 # scattering dimension names - diff --git a/cloog-0.17.0/test/durbin_e_s.good.c b/cloog-0.17.0/test/durbin_e_s.good.c deleted file mode 100644 index f96d006..0000000 --- a/cloog-0.17.0/test/durbin_e_s.good.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Generated from ../../../git/cloog/test/durbin_e_s.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.05s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } -#define S4(i,j,k) { hash(4); hash(i); hash(j); hash(k); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } -#define S6(i,j,k) { hash(6); hash(i); hash(j); hash(k); } -#define S7(i,j,k) { hash(7); hash(i); hash(j); hash(k); } -#define S8(i,j,k) { hash(8); hash(i); hash(j); hash(k); } - -void test() -{ - /* Original iterators. */ - int i, j, k; - S4(1,0,0) ; - S7(1,0,0) ; - S8(1,0,3) ; - S2(2,-7,0) ; - S3(2,-7,1) ; - S6(2,-7,2) ; - S8(2,0,3) ; - S5(2,1,3) ; - S2(3,-7,0) ; - S3(3,-7,1) ; - S3(3,-6,1) ; - S6(3,-6,2) ; - S8(3,0,3) ; - for (j=1;j<=2;j++) { - S5(3,j,3) ; - } - for (i=4;i<=8;i++) { - S2(i,-7,0) ; - S3(i,-7,1) ; - for (j=-6;j<=i-10;j++) { - S3(i,j,1) ; - } - j = i-9 ; - S3(i,i-9,1) ; - S6(i,i-9,2) ; - S8(i,0,3) ; - for (j=1;j<=i-1;j++) { - S5(i,j,3) ; - } - } - S2(9,-7,0) ; - S3(9,-7,1) ; - for (j=-6;j<=-1;j++) { - S3(9,j,1) ; - } - S3(9,0,1) ; - S6(9,0,2) ; - S8(9,0,3) ; - for (j=1;j<=8;j++) { - S5(9,j,3) ; - } - S2(10,-7,0) ; - S3(10,-7,1) ; - for (j=-6;j<=0;j++) { - S3(10,j,1) ; - } - S3(10,1,1) ; - S6(10,1,2) ; - S5(10,1,3) ; - S1(10,1,4) ; - for (j=2;j<=9;j++) { - S5(10,j,3) ; - S1(10,j,4) ; - } - S1(10,10,4) ; -} diff --git a/cloog-0.17.0/test/emploi.c b/cloog-0.17.0/test/emploi.c deleted file mode 100644 index 1716721..0000000 --- a/cloog-0.17.0/test/emploi.c +++ /dev/null @@ -1,16 +0,0 @@ -/* Generated from ../../../git/cloog/test/emploi.cloog by CLooG 0.14.0-245-gd8c1718 gmp bits in 0.01s. */ -if (n >= 1) { - if (m >= 1) { - for (i=1;i<=n;i++) { - S1(i); - for (j=1;j<=m;j++) { - S2(i,j); - } - } - } - if (m <= 0) { - for (i=1;i<=n;i++) { - S1(i); - } - } -} diff --git a/cloog-0.17.0/test/emploi.cloog b/cloog-0.17.0/test/emploi.cloog deleted file mode 100644 index 0dd7a26..0000000 --- a/cloog-0.17.0/test/emploi.cloog +++ /dev/null @@ -1,49 +0,0 @@ -# language: C -c - -# The context (no constraints on parameters) -1 4 # 1 lines and 4 columns -# m n 1 -1 0 0 0 # 0 >= 0, always true -1 # We want to set the parameter names -m n - -2 # The number of statements - -2 # First statement -# The first domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 -1 2 0 0 # i <= 2*m -# The second domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 1 -1 0 0 # i >= m -0 0 0 - -1 # Second statement -4 6 # 4 lines and 6 columns -# i j m n 1 -1 1 0 0 0 -1 # i >= 1 -1 -1 0 0 1 0 # i <= n -1 0 1 0 0 -1 # j >= 1 -1 0 -1 1 0 0 # j <= m -0 0 0 -0 - -0 # Scattering functions -# The first function -2 7 # 2 lines and 7 columns -# c1 c2 i m n 1 -0 1 0 -1 0 0 0 # c1 = i -0 0 1 0 0 0 0 # c2 = 0 -# The second function -2 8 # 2 lines and 8 columns -# c1 c2 i j m n 1 -0 1 0 0 0 0 -1 0 # c1 = n -0 0 1 -1 -1 0 0 0 # c2 = i+j -0 diff --git a/cloog-0.17.0/test/emploi.good.c b/cloog-0.17.0/test/emploi.good.c deleted file mode 100644 index ad812d8..0000000 --- a/cloog-0.17.0/test/emploi.good.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Generated from ../../../git/cloog/test/emploi.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int m, int n) -{ - /* Original iterators. */ - int i, j; - if (m >= 1) { - for (i=1;i<=n;i++) { - if (i >= m) { - S1(i) ; - } - if (i <= min(2*m,m-1)) { - S1(i) ; - } - for (j=1;j<=m;j++) { - S2(i,j) ; - } - } - } - if (m <= 0) { - for (i=1;i<=n;i++) { - S1(i) ; - } - } -} diff --git a/cloog-0.17.0/test/equality.c b/cloog-0.17.0/test/equality.c deleted file mode 100644 index 86b024d..0000000 --- a/cloog-0.17.0/test/equality.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from ../../../git/cloog/test/equality.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -for (i0=0;i0<=5;i0++) { - for (i1=ceild(4*i0,5);i1<=floord(6*i0+20,5);i1++) { - if (2*i0 == i1) { - S1(i0,i1) ; - } - if (i1 == 4) { - S2(i0,i1) ; - } - } -} diff --git a/cloog-0.17.0/test/equality.cloog b/cloog-0.17.0/test/equality.cloog deleted file mode 100644 index da83671..0000000 --- a/cloog-0.17.0/test/equality.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# Language: C -c - -# Context (0 parameter(s)): -1 2 - 1 1 -1 # Parameter name(s) - - -# Statement number: -2 - -# Iteration domain of statement 1. -1 -3 4 -0 2 -1 0 -1 1 0 0 -1 -1 0 5 -0 0 0 # For future options. - -# Iteration domain of statement 2. -1 -3 4 -0 0 -1 4 -1 1 0 0 -1 -1 0 5 -0 0 0 # For future options. - -1 # Iterator name(s) -i0 i1 - -# No scattering functions. -0 diff --git a/cloog-0.17.0/test/equality.good.c b/cloog-0.17.0/test/equality.good.c deleted file mode 100644 index 371f48b..0000000 --- a/cloog-0.17.0/test/equality.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/equality.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i0,i1) { hash(1); hash(i0); hash(i1); } -#define S2(i0,i1) { hash(2); hash(i0); hash(i1); } - -void test() -{ - /* Original iterators. */ - int i0, i1; - for (i0=0;i0<=5;i0++) { - for (i1=ceild(4*i0,5);i1<=floord(6*i0+20,5);i1++) { - if (2*i0 == i1) { - S1(i0,i1) ; - } - if (i1 == 4) { - S2(i0,i1) ; - } - } - } -} diff --git a/cloog-0.17.0/test/equality2.c b/cloog-0.17.0/test/equality2.c deleted file mode 100644 index ea28ab2..0000000 --- a/cloog-0.17.0/test/equality2.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Generated from ../../../git/cloog/test/equality2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.07s. */ -for (i0=1;i0<=10000;i0++) { - for (i1=1000;i1<=1016;i1++) { - for (i2=1;i2<=min(-2*i1+2033,2*i1-1999);i2++) { - if (2*i1 == i2+1999) { - S2(i0,i1,i2,1,i0,2*i1-1000,1,2,i0,i1-499,2*i1-1999,i0,2*i1-1999,i1-999,i1-999) ; - } - if (i2 == 1) { - if (i1%2 == 0) { - S1(i0,i1,i2,2,i0,(i1+2)/2,i1-999,i0,i1-999,(i1-998)/2,(i1-998)/2) ; - } - } - } - } -} diff --git a/cloog-0.17.0/test/equality2.cloog b/cloog-0.17.0/test/equality2.cloog deleted file mode 100644 index c62469c..0000000 --- a/cloog-0.17.0/test/equality2.cloog +++ /dev/null @@ -1,57 +0,0 @@ -c - -# Context (0 parameter(s)): -1 2 - 1 1 -1 # Parameter name(s) - - -# Statement number: -2 - -# Iteration domain of statement 2. -1 -13 13 - 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 -2 -998 - 0 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 1 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 -1 -500 - 0 0 0 0 0 0 0 1 0 0 0 -2 1 - 0 0 0 0 0 0 0 0 0 1 0 -2 1 - 0 0 0 0 0 0 0 0 0 0 1 -1 0 - 1 0 0 0 0 0 0 0 1 0 0 0 -1 - 1 0 0 0 0 0 0 0 -1 0 0 0 10000 - 1 0 0 0 0 0 0 0 0 0 0 1 -1 - 1 0 0 0 0 0 0 0 0 0 0 -1 9 -0 0 0 # For future options. - -# Iteration domain of statement 3. -1 -17 17 - 0 1 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 -999 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -2 1 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -2 -998 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 -500 - 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -2 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -2 1 - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 10000 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 9 -0 0 0 # For future options. - - -1 # Iterator name(s) -i0 i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 i14 - -# No scattering functions. -0 diff --git a/cloog-0.17.0/test/equality2.good.c b/cloog-0.17.0/test/equality2.good.c deleted file mode 100644 index 74bf88b..0000000 --- a/cloog-0.17.0/test/equality2.good.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Generated from ../../../git/cloog/test/equality2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.05s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) { hash(1); hash(i0); hash(i1); hash(i2); hash(i3); hash(i4); hash(i5); hash(i6); hash(i7); hash(i8); hash(i9); hash(i10); } -#define S2(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) { hash(2); hash(i0); hash(i1); hash(i2); hash(i3); hash(i4); hash(i5); hash(i6); hash(i7); hash(i8); hash(i9); hash(i10); hash(i11); hash(i12); hash(i13); hash(i14); } - -void test() -{ - /* Original iterators. */ - int i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14; - for (i0=1;i0<=10000;i0++) { - for (i1=1000;i1<=1016;i1++) { - for (i2=1;i2<=min(-2*i1+2033,2*i1-1999);i2++) { - if (2*i1 == i2+1999) { - S2(i0,i1,i2,1,i0,2*i1-1000,1,2,i0,i1-499,2*i1-1999,i0,2*i1-1999,i1-999,i1-999) ; - } - if (i2 == 1) { - if (i1%2 == 0) { - S1(i0,i1,i2,2,i0,(i1+2)/2,i1-999,i0,i1-999,(i1-998)/2,(i1-998)/2) ; - } - } - } - } - } -} diff --git a/cloog-0.17.0/test/esced.c b/cloog-0.17.0/test/esced.c deleted file mode 100644 index d26d395..0000000 --- a/cloog-0.17.0/test/esced.c +++ /dev/null @@ -1,16 +0,0 @@ -/* Generated from ../../../git/cloog/test/esced.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (m >= 1) { - if (n >= 1) { - for (i=1;i<=m;i++) { - S1(i) ; - for (j=1;j<=n;j++) { - S2(i,j) ; - } - } - } - if (n <= 0) { - for (i=1;i<=m;i++) { - S1(i) ; - } - } -} diff --git a/cloog-0.17.0/test/esced.cloog b/cloog-0.17.0/test/esced.cloog deleted file mode 100644 index 9caba01..0000000 --- a/cloog-0.17.0/test/esced.cloog +++ /dev/null @@ -1,30 +0,0 @@ -# language: C -c - -# parameters {n, m | n<=m} -1 4 -#1 1 -1 0 -1 0 0 1 -1 -n m - -2 # Number of statements - -1 -# {i | 1<=i<=n} -2 5 -1 1 0 0 -1 -1 -1 0 1 0 -0 0 0 - -1 -# {i, j | 1<=i<=n 1<=j<=m} -4 6 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/esced.good.c b/cloog-0.17.0/test/esced.good.c deleted file mode 100644 index cab5f34..0000000 --- a/cloog-0.17.0/test/esced.good.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Generated from ../../../git/cloog/test/esced.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int n, int m) -{ - /* Original iterators. */ - int i, j; - if (n >= 1) { - for (i=1;i<=m;i++) { - S1(i) ; - for (j=1;j<=n;j++) { - S2(i,j) ; - } - } - } - if (n <= 0) { - for (i=1;i<=m;i++) { - S1(i) ; - } - } -} diff --git a/cloog-0.17.0/test/ex1.c b/cloog-0.17.0/test/ex1.c deleted file mode 100644 index b5584c0..0000000 --- a/cloog-0.17.0/test/ex1.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Generated from ../../../git/cloog/test/ex1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -for (i=0;i<=14;i++) { - for (j=0;j<=n-15;j++) { - S1(i,j) ; - } -} -for (i=15;i<=n;i++) { - for (j=0;j<=9;j++) { - S1(i,j) ; - } - for (j=10;j<=n-15;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=n-14;j<=n;j++) { - S2(i,j) ; - } -} diff --git a/cloog-0.17.0/test/ex1.cloog b/cloog-0.17.0/test/ex1.cloog deleted file mode 100644 index 6a85398..0000000 --- a/cloog-0.17.0/test/ex1.cloog +++ /dev/null @@ -1,34 +0,0 @@ -# language: C -c - -# parameters {n} -1 3 -# n 1 -1 1 -25 -1 -n - -2 # Number of statements - -1 -# {i | 0<=i<=n, 0<=j<=n-15} -4 5 -# i j n 1 -1 1 0 0 0 -1 -1 0 1 0 -1 0 1 0 0 -1 0 -1 1 -15 -0 0 0 - -1 -# {i | 15<=i<=n, 10<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -15 -1 -1 0 1 0 -1 0 1 0 -10 -1 0 -1 1 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/ex1.good.c b/cloog-0.17.0/test/ex1.good.c deleted file mode 100644 index b73fd94..0000000 --- a/cloog-0.17.0/test/ex1.good.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Generated from ../../../git/cloog/test/ex1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int n) -{ - /* Original iterators. */ - int i, j; - for (i=0;i<=14;i++) { - for (j=0;j<=n-15;j++) { - S1(i,j) ; - } - } - for (i=15;i<=n;i++) { - for (j=0;j<=9;j++) { - S1(i,j) ; - } - for (j=10;j<=n-15;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=n-14;j<=n;j++) { - S2(i,j) ; - } - } -} diff --git a/cloog-0.17.0/test/forwardsub-1-1-2.c b/cloog-0.17.0/test/forwardsub-1-1-2.c deleted file mode 100644 index 58ce5c8..0000000 --- a/cloog-0.17.0/test/forwardsub-1-1-2.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from ../../../git/cloog/test/forwardsub-1-1-2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -S3(1,1) ; -S1(2,1) ; -S4(2,2) ; -for (i=3;i<=M;i++) { - S1(i,1) ; - for (j=2;j<=i-1;j++) { - S2(i,j) ; - } - S4(i,i) ; -} diff --git a/cloog-0.17.0/test/forwardsub-1-1-2.cloog b/cloog-0.17.0/test/forwardsub-1-1-2.cloog deleted file mode 100644 index 38986f9..0000000 --- a/cloog-0.17.0/test/forwardsub-1-1-2.cloog +++ /dev/null @@ -1,56 +0,0 @@ -# language: C -c - -# Context -#{N | 3<=N} -2 3 -# M 1 -1 1 -3 -1 0 1 -0 - -4 # Number of statements - -1 -#{t1,t2 | 2<=t1<=N; t2=1; 3<=N} -5 5 -# i j M 1 -0 0 1 0 -1 -1 0 0 1 -3 -1 -1 0 1 0 -1 1 0 0 -2 -1 0 0 0 1 -0 0 0 - -1 -#{t1,t2 | t2+1<=t1<=N; 2<=t2} -4 5 -# i j M 1 -1 1 -1 0 -1 -1 0 1 0 -2 -1 -1 0 1 0 -1 0 0 0 1 -0 0 0 - -1 -#{t1,t2 | t1=1; t2=1; 3<=N} -4 5 -# i j M 1 -0 1 0 0 -1 -0 0 1 0 -1 -1 0 0 1 -3 -1 0 0 0 1 -0 0 0 - -1 -#{t1,t2 | t1=t2; 2<=t2<=N; 3<=N} -4 5 -# i j M 1 -0 1 -1 0 0 -1 0 0 1 -3 -1 0 -1 1 0 -1 0 1 0 -2 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/forwardsub-1-1-2.good.c b/cloog-0.17.0/test/forwardsub-1-1-2.good.c deleted file mode 100644 index cebe239..0000000 --- a/cloog-0.17.0/test/forwardsub-1-1-2.good.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/forwardsub-1-1-2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } -#define S4(i,j) { hash(4); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - S3(1,1) ; - S1(2,1) ; - S4(2,2) ; - for (i=3;i<=M;i++) { - S1(i,1) ; - for (j=2;j<=i-1;j++) { - S2(i,j) ; - } - S4(i,i) ; - } -} diff --git a/cloog-0.17.0/test/forwardsub-2-1-2-3.c b/cloog-0.17.0/test/forwardsub-2-1-2-3.c deleted file mode 100644 index 7c4bc22..0000000 --- a/cloog-0.17.0/test/forwardsub-2-1-2-3.c +++ /dev/null @@ -1,12 +0,0 @@ -/* Generated from ../../../git/cloog/test/forwardsub-2-1-2-3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -S3(1,0) ; -for (k=2;k<=M;k++) { - S1(1,1,k) ; -} -for (i=2;i<=M-1;i++) { - S4(i,0) ; - for (k=i+1;k<=M;k++) { - S2(i,1,k) ; - } -} -S4(M,0) ; diff --git a/cloog-0.17.0/test/forwardsub-2-1-2-3.cloog b/cloog-0.17.0/test/forwardsub-2-1-2-3.cloog deleted file mode 100644 index 33d29f3..0000000 --- a/cloog-0.17.0/test/forwardsub-2-1-2-3.cloog +++ /dev/null @@ -1,58 +0,0 @@ -# language: C -c - -# Context -#{M | 3<=M} -2 3 -# M 1 -1 1 -3 -1 0 1 -0 - -4 # Number of statements - -1 -#{i,j,k | i=1; j=1; 2<=k<=M; 3<=M} -6 6 -# i j k M 1 -0 1 0 0 0 -1 -0 0 1 0 0 -1 -1 0 0 0 1 -3 -1 0 0 -1 1 0 -1 0 0 1 0 -2 -1 0 0 0 0 1 -0 0 0 - -1 -#{i,j,k | 2<=i<=k-1; j=1; k<=M} -5 6 -# i j k M 1 -0 0 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 0 0 -2 -1 0 0 -1 1 0 -1 0 0 0 0 1 -0 0 0 - -1 -#{i,j | i=1; j=0; 3<=M} -4 5 -# i j M 1 -0 1 0 0 -1 -0 0 1 0 0 -1 0 0 1 -3 -1 0 0 0 1 -0 0 0 - -1 -#{i,j | 2<=i<=M; j=0; 3<=M} -4 5 -# i j M 1 -0 0 1 0 0 -1 1 0 0 -2 -1 0 0 1 -3 -1 -1 0 1 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/forwardsub-2-1-2-3.good.c b/cloog-0.17.0/test/forwardsub-2-1-2-3.good.c deleted file mode 100644 index 69ff99c..0000000 --- a/cloog-0.17.0/test/forwardsub-2-1-2-3.good.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Generated from ../../../git/cloog/test/forwardsub-2-1-2-3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j) { hash(3); hash(i); hash(j); } -#define S4(i,j) { hash(4); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j, k; - S3(1,0) ; - for (k=2;k<=M;k++) { - S1(1,1,k) ; - } - for (i=2;i<=M-1;i++) { - S4(i,0) ; - for (k=i+1;k<=M;k++) { - S2(i,1,k) ; - } - } - S4(M,0) ; -} diff --git a/cloog-0.17.0/test/forwardsub-3-1-2.c b/cloog-0.17.0/test/forwardsub-3-1-2.c deleted file mode 100644 index 0f398ed..0000000 --- a/cloog-0.17.0/test/forwardsub-3-1-2.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Generated from ../../../git/cloog/test/forwardsub-3-1-2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -S3(2,1) ; -S1(3,1) ; -S1(4,1) ; -S4(4,2) ; -for (i=5;i<=M+1;i++) { - S1(i,1) ; - for (j=2;j<=floord(i-1,2);j++) { - S2(i,j) ; - } - if (i%2 == 0) { - S4(i,i/2) ; - } -} -for (i=M+2;i<=2*M-1;i++) { - for (j=i-M;j<=floord(i-1,2);j++) { - S2(i,j) ; - } - if (i%2 == 0) { - S4(i,i/2) ; - } -} -S4(2*M,M) ; diff --git a/cloog-0.17.0/test/forwardsub-3-1-2.cloog b/cloog-0.17.0/test/forwardsub-3-1-2.cloog deleted file mode 100644 index 6e41e75..0000000 --- a/cloog-0.17.0/test/forwardsub-3-1-2.cloog +++ /dev/null @@ -1,57 +0,0 @@ -# language: C -c - -# Context -#{N | 3<=N} -2 3 -# M 1 -1 1 -3 -1 0 1 -0 - -4 # Number of statements - -1 -#{t1,i | 3<=t1<=N+1; i=1; 3<=N} -5 5 -# i j M 1 -0 0 1 0 -1 -1 0 0 1 -3 -1 -1 0 1 1 -1 1 0 0 -3 -1 0 0 0 1 -0 0 0 - -1 -#{t1,i | 2i+1<=t1<=i+N; 2<=i} -4 5 -# i j M 1 -1 1 -2 0 -1 -1 0 1 0 -2 -1 -1 1 1 0 -1 0 0 0 1 -0 0 0 - -1 -#{t1,i | t1=2; i=1; 3<=N} -4 5 -# i j M 1 -0 1 0 0 -2 -0 0 1 0 -1 -1 0 0 1 -3 -1 0 0 0 1 -0 0 0 - -1 -#{t1,i | t1=2i; 2<=i<=N; 3<=N} -5 5 -# i j M 1 -0 1 -2 0 0 -1 0 0 1 -3 -1 0 -1 1 0 -1 0 1 0 -2 -1 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/forwardsub-3-1-2.good.c b/cloog-0.17.0/test/forwardsub-3-1-2.good.c deleted file mode 100644 index 2969ae8..0000000 --- a/cloog-0.17.0/test/forwardsub-3-1-2.good.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Generated from ../../../git/cloog/test/forwardsub-3-1-2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } -#define S4(i,j) { hash(4); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - S3(2,1) ; - S1(3,1) ; - S1(4,1) ; - S4(4,2) ; - for (i=5;i<=M+1;i++) { - S1(i,1) ; - for (j=2;j<=floord(i-1,2);j++) { - S2(i,j) ; - } - if (i%2 == 0) { - S4(i,i/2) ; - } - } - for (i=M+2;i<=2*M-1;i++) { - for (j=i-M;j<=floord(i-1,2);j++) { - S2(i,j) ; - } - if (i%2 == 0) { - S4(i,i/2) ; - } - } - i = 2*M ; - S4(2*M,M) ; -} diff --git a/cloog-0.17.0/test/gauss.c b/cloog-0.17.0/test/gauss.c deleted file mode 100644 index 341c2aa..0000000 --- a/cloog-0.17.0/test/gauss.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Generated from ../../../git/cloog/test/gauss.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.03s. */ -if (M >= 2) { - for (c2=2;c2<=M;c2++) { - for (j=2;j<=M;j++) { - S2(1,j,c2) ; - } - } - for (c1=2;c1<=M-1;c1++) { - for (c2=c1+1;c2<=M;c2++) { - for (j=1;j<=c1-1;j++) { - S1(c1,j,c2) ; - } - for (j=c1+1;j<=M;j++) { - S2(c1,j,c2) ; - } - } - } -} diff --git a/cloog-0.17.0/test/gauss.cloog b/cloog-0.17.0/test/gauss.cloog deleted file mode 100644 index 0a84b01..0000000 --- a/cloog-0.17.0/test/gauss.cloog +++ /dev/null @@ -1,72 +0,0 @@ -# language: C -c - -# parameter n -1 3 -# n 1 -1 0 1 -0 - -2 # Number of statements - -1 -# {i, j, k | 1<=i<=n; 1<=j<=i-1 i+1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 1 -1 0 0 -1 -1 -1 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 - -1 -# {i, j, k | 1<=i<=n; i+1<=j<=n i+1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 -1 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 -0 - -2 # Scattering functions -# Et les instructions de chunking... -2 8 -# c1 c2 i j k n 1 -0 1 0 -1 0 0 0 0 -0 0 1 0 0 -1 0 0 - -2 8 -# c1 c2 i j k n 1 -0 1 0 -1 0 0 0 0 -0 0 1 0 0 -1 0 0 -0 - -2 -# Et les instructions de chunking... -1 7 -# c1 i j k n 1 -0 1 0 0 0 -1 2 - -1 7 -# c1 i j k n 1 -0 1 -1 0 0 0 1 -0 - -2 -# Et les instructions de chunking... -2 8 -# c1 c2 i j k n 1 -0 1 0 -1 0 0 0 0 -0 0 1 0 0 -1 0 0 - -2 8 -# c1 c2 i j k n 1 -0 1 0 -1 0 0 0 0 -0 0 1 0 0 -1 0 0 -0 diff --git a/cloog-0.17.0/test/gauss.good.c b/cloog-0.17.0/test/gauss.good.c deleted file mode 100644 index fb1939d..0000000 --- a/cloog-0.17.0/test/gauss.good.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Generated from ../../../git/cloog/test/gauss.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int M) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j, k; - if (M >= 2) { - for (c2=2;c2<=M;c2++) { - for (j=2;j<=M;j++) { - S2(1,j,c2) ; - } - } - } - for (c1=2;c1<=M-1;c1++) { - for (c2=c1+1;c2<=M;c2++) { - for (j=1;j<=c1-1;j++) { - S1(c1,j,c2) ; - } - for (j=c1+1;j<=M;j++) { - S2(c1,j,c2) ; - } - } - } -} diff --git a/cloog-0.17.0/test/generate_test.c b/cloog-0.17.0/test/generate_test.c deleted file mode 100644 index 40a8dbd..0000000 --- a/cloog-0.17.0/test/generate_test.c +++ /dev/null @@ -1,153 +0,0 @@ -#include -#include - -/* Generate code that scans part of the parameter domain of - * a given cloog problem, running both a function called "good" - * and a function called "test" for each value of the parameters. - * These functions are assumed to call the "hash" function, - * which is also generated by this program. - * If for any given value of the parameters, the final hash - * value computed by test is different from that computed by - * good, then an error is reported. - */ - -CloogDomain *get_param_domain(CloogOptions *options) -{ - CloogDomain *domain; - CloogProgram *program; - - program = cloog_program_read(stdin, options); - - domain = cloog_domain_copy(program->context); - - cloog_program_free(program); - - return cloog_domain_from_context(domain); -} - -static const char preamble[] = -"#include \n" -"#include \n" -"\n" -"static unsigned h;\n" -"\n" -"void hash(int v)\n" -"{\n" -" int i;\n" -" union u {\n" -" int v;\n" -" unsigned char c[1];\n" -" } u;\n" -" u.v = v;\n" -" for (i = 0; i < sizeof(int); ++i) {\n" -" h *= 16777619;\n" -" h ^= u.c[i];\n" -" }\n" -"}\n" -"\n" -"int main()\n" -"{\n" -" unsigned h_good, h_test;\n"; -; - -static const char postamble[] = -" return 0;\n" -"}\n" -; - -static const char *call[] = {"good", "test"}; - -static void print_macros(FILE *file) -{ - fprintf(file, "/* Useful macros. */\n") ; - fprintf(file, - "#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d))\n"); - fprintf(file, - "#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d))\n"); - fprintf(file, "#define max(x,y) ((x) > (y) ? (x) : (y))\n") ; - fprintf(file, "#define min(x,y) ((x) < (y) ? (x) : (y))\n\n") ; -} - -int main() -{ - int dim; - int range; - int i, j; - CloogState *state = cloog_state_malloc(); - CloogOptions *options = cloog_options_malloc(state); - CloogDomain *domain; - CloogDomain *cube, *tmp; - CloogProgram *p; - CloogStatement *statement; - cloog_int_t m, M; - - options->quiet = 1; - domain = get_param_domain(options); - dim = cloog_domain_dimension(domain); - - if (dim >= 8) - range = 4; - else if (dim >= 5) - range = 6; - else - range = 30; - - cloog_int_init(m); - cloog_int_init(M); - cloog_int_set_si(m, 0); - cloog_int_set_si(M, range); - cube = cloog_domain_cube(state, dim, m, M); - domain = cloog_domain_intersection(tmp = domain, cube); - cloog_domain_free(tmp); - cloog_domain_free(cube); - - p = cloog_program_malloc(); - assert(p); - p->names = cloog_names_malloc(); - assert(p->names); - p->names->nb_iterators = dim; - p->names->iterators = cloog_names_generate_items(dim, "p", 0); - p->language = 'c'; - p->context = cloog_domain_universe(state, 0); - statement = cloog_statement_alloc(state, 1); - p->loop = cloog_loop_malloc(state); - p->loop->domain = domain; - p->loop->block = cloog_block_alloc(statement, 0, NULL, dim); - p->blocklist = cloog_block_list_alloc(p->loop->block); - p = cloog_program_generate(p, options); - - printf("%s", preamble); - for (i = 0; i < dim; ++i) - printf("\tint %s;\n", p->names->iterators[i]); - printf("#define S1("); - for (i = 0; i < dim; ++i) { - if (i) - printf(","); - printf("p%d", i); - } - printf(") do {"); - for (j = 0; j < 2; ++j) { - printf(" h = 2166136261u;"); - printf(" %s(", call[j]); - for (i = 0; i < dim; ++i) { - if (i) - printf(", "); - printf("p%d", i); - } - printf(");"); - printf(" h_%s = h;", call[j]); - } - printf(" assert(h_good == h_test);"); - printf(" } while (0)\n"); - print_macros(stdout); - cloog_program_pprint(stdout, p, options); - printf("%s", postamble); - - cloog_int_clear(m); - cloog_int_clear(M); - cloog_program_free(p); - cloog_options_free(options); - cloog_state_free(state); - - return 0; -} diff --git a/cloog-0.17.0/test/gesced.c b/cloog-0.17.0/test/gesced.c deleted file mode 100644 index 6b69507..0000000 --- a/cloog-0.17.0/test/gesced.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Generated from ../../../git/cloog/test/gesced.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.05s. */ -for (c1=1;c1<=N;c1++) { - S1(c1) ; -} -for (c1=N+1;c1<=2*N;c1++) { - for (i=1;i<=N;i++) { - S2(i,c1-N) ; - } -} -for (c1=2*N+1;c1<=M+N;c1++) { - for (i=1;i<=N;i++) { - S3(i,c1-2*N) ; - S2(i,c1-N) ; - } -} -for (c1=M+N+1;c1<=M+2*N;c1++) { - for (i=1;i<=N;i++) { - S3(i,c1-2*N) ; - } -} diff --git a/cloog-0.17.0/test/gesced.cloog b/cloog-0.17.0/test/gesced.cloog deleted file mode 100644 index 5f37046..0000000 --- a/cloog-0.17.0/test/gesced.cloog +++ /dev/null @@ -1,56 +0,0 @@ -# language: C -c - -# parameters {n, m | n<=m n>=2 m>=2} -3 4 -# m n 1 -1 1 -1 0 -1 1 0 -2 -1 0 1 -2 -0 - -3 # Number of statements - -1 -# {i | 1<=i<=n} -2 5 -# i m n 1 -1 1 0 0 -1 -1 -1 0 1 0 -0 0 0 - -1 -# {i, j | 1<=i<=n 1<=j<=m} -4 6 -# i j m n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 - -1 -# {i, j | 1<=i<=n 1<=j<=m} -4 6 -# i j m n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -3 # Scattering functions -# Et les instructions de chunking (prog init)... -1 6 -# c1 i m n 1 -0 1 -1 0 0 0 - -1 7 -# c1 i j m n 1 -0 1 0 -1 0 -1 0 - -1 7 -# c1 i j m n 1 -0 1 0 -1 0 -2 0 -0 diff --git a/cloog-0.17.0/test/gesced.good.c b/cloog-0.17.0/test/gesced.good.c deleted file mode 100644 index bae55dd..0000000 --- a/cloog-0.17.0/test/gesced.good.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Generated from ../../../git/cloog/test/gesced.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i, j; - for (c1=1;c1<=N;c1++) { - S1(c1) ; - } - for (c1=N+1;c1<=2*N;c1++) { - for (i=1;i<=N;i++) { - j = c1-N ; - S2(i,c1-N) ; - } - } - for (c1=2*N+1;c1<=M+N;c1++) { - for (i=1;i<=N;i++) { - j = c1-2*N ; - S3(i,c1-2*N) ; - j = c1-N ; - S2(i,c1-N) ; - } - } - for (c1=M+N+1;c1<=M+2*N;c1++) { - for (i=1;i<=N;i++) { - j = c1-2*N ; - S3(i,c1-2*N) ; - } - } -} diff --git a/cloog-0.17.0/test/gesced2.c b/cloog-0.17.0/test/gesced2.c deleted file mode 100644 index 5cebdb5..0000000 --- a/cloog-0.17.0/test/gesced2.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/gesced2.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.03s. */ -for (c1=1;c1<=4;c1++) { - for (c2=5;c2<=M-10;c2++) { - S1(c1,c2); - } -} -for (c1=5;c1<=M-10;c1++) { - for (c2=-c1+1;c2<=4;c2++) { - S2(c1+c2,c1); - } - for (c2=5;c2<=min(M-10,-c1+M);c2++) { - S1(c1,c2); - S2(c1+c2,c1); - } - for (c2=-c1+M+1;c2<=M-10;c2++) { - S1(c1,c2); - } - for (c2=M-9;c2<=-c1+M;c2++) { - S2(c1+c2,c1); - } -} -for (c1=M-9;c1<=M;c1++) { - for (c2=5;c2<=M-10;c2++) { - S1(c1,c2); - } -} diff --git a/cloog-0.17.0/test/gesced2.cloog b/cloog-0.17.0/test/gesced2.cloog deleted file mode 100644 index 982368b..0000000 --- a/cloog-0.17.0/test/gesced2.cloog +++ /dev/null @@ -1,82 +0,0 @@ -# language: C -c - -# parameters {n | n>=16} -1 3 -# n 1 -1 1 -16 -0 - -2 # Number of statements - -1 -# {i, j | 1<=i<=n 5<=j<=n-10} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 -5 -1 0 -1 1 -10 -0 0 0 - -1 -# {i, j | 1<=i<=n 5<=j<=n-10} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 -5 -1 0 -1 1 -10 -0 0 0 -0 - -2 # Scattering functions -# Et les instructions de chunking (sol triviale)... -2 7 -# c1 c2 i j n 1 -0 1 0 -1 0 0 0 -0 0 1 0 -1 0 0 - -2 7 -# c1 c2 i j n 1 -0 1 0 0 -1 0 0 -0 0 1 -1 1 0 0 -0 - -# Et les instructions de chunking (sol aux inverse)... -2 7 -# c1 c2 i j n 1 -0 1 0 -10 -3 0 -5 -0 0 1 -4 -1 0 5 - -2 7 -# c1 c2 i j n 1 -0 1 0 -9 -4 0 -15 -0 0 1 -5 0 0 0 -0 - -2 -# Et les instructions de chunking (sol aux egalites)... -2 7 -# c1 c2 i j n 1 -0 1 0 1 -2 0 -30 -0 0 1 -1 1 0 30 - -2 7 -# c1 c2 i j n 1 -0 1 0 -1 1 0 15 -0 0 1 1 -2 0 -30 -0 - -# Et les instructions de chunking (sol triviale)... -2 7 -# c1 c2 i j n 1 -0 1 0 -1 0 0 0 -0 0 1 0 -1 0 5 - -2 7 -# c1 c2 i j n 1 -0 1 0 0 -1 0 -10 -0 0 1 -1 0 0 0 -0 - diff --git a/cloog-0.17.0/test/gesced2.good.c b/cloog-0.17.0/test/gesced2.good.c deleted file mode 100644 index 669093a..0000000 --- a/cloog-0.17.0/test/gesced2.good.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Generated from ../../../git/cloog/test/gesced2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.04s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j; - for (c1=1;c1<=4;c1++) { - for (c2=5;c2<=M-10;c2++) { - S1(c1,c2) ; - } - } - for (c1=5;c1<=min(M-10,9);c1++) { - for (c2=-c1+1;c2<=4;c2++) { - i = c1+c2 ; - S2(c1+c2,c1) ; - } - for (c2=5;c2<=M-10;c2++) { - S1(c1,c2) ; - i = c1+c2 ; - S2(c1+c2,c1) ; - } - for (c2=M-9;c2<=-c1+M;c2++) { - i = c1+c2 ; - S2(c1+c2,c1) ; - } - } - if (M >= 20) { - for (c2=-9;c2<=4;c2++) { - i = c2+10 ; - S2(c2+10,10) ; - } - for (c2=5;c2<=M-10;c2++) { - S1(10,c2) ; - i = c2+10 ; - S2(c2+10,10) ; - } - } - for (c1=11;c1<=M-10;c1++) { - for (c2=-c1+1;c2<=4;c2++) { - i = c1+c2 ; - S2(c1+c2,c1) ; - } - for (c2=5;c2<=-c1+M;c2++) { - S1(c1,c2) ; - i = c1+c2 ; - S2(c1+c2,c1) ; - } - for (c2=-c1+M+1;c2<=M-10;c2++) { - S1(c1,c2) ; - } - } - for (c1=M-9;c1<=M;c1++) { - for (c2=5;c2<=M-10;c2++) { - S1(c1,c2) ; - } - } -} diff --git a/cloog-0.17.0/test/gesced3.c b/cloog-0.17.0/test/gesced3.c deleted file mode 100644 index 8d2119d..0000000 --- a/cloog-0.17.0/test/gesced3.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from ../../../git/cloog/test/gesced3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -for (c1=M+1;c1<=2*M;c1++) { - S1(c1-M) ; -} -for (c1=2*M+1;c1<=M+N;c1++) { - S2(c1-2*M) ; - S1(c1-M) ; -} -for (c1=M+N+1;c1<=2*M+N;c1++) { - S2(c1-2*M) ; -} diff --git a/cloog-0.17.0/test/gesced3.cloog b/cloog-0.17.0/test/gesced3.cloog deleted file mode 100644 index 758924c..0000000 --- a/cloog-0.17.0/test/gesced3.cloog +++ /dev/null @@ -1,39 +0,0 @@ -# language: C -c - -# parametres {n | n>=m m>=2} -2 4 -# m n 1 -1 -1 1 0 -1 1 0 -2 -0 - -2 # Number of statements - -1 -# {i | 1<=i<=n} -2 5 -# i m n 1 -1 1 0 0 -1 -1 -1 0 1 0 -0 0 0 - -1 -# {i | 1<=i<=n} -2 5 -# i m n 1 -1 1 0 0 -1 -1 -1 0 1 0 -0 0 0 -0 - -2 -# Et les instructions de chunking (sol triviale)... -1 6 -# c1 i m n 1 -0 1 -1 -1 0 0 - -1 6 -# c1 i m n 1 -0 1 -1 -2 0 0 -0 diff --git a/cloog-0.17.0/test/gesced3.good.c b/cloog-0.17.0/test/gesced3.good.c deleted file mode 100644 index 43708fc..0000000 --- a/cloog-0.17.0/test/gesced3.good.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Generated from ../../../git/cloog/test/gesced3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i; - for (c1=M+1;c1<=2*M;c1++) { - i = c1-M ; - S1(c1-M) ; - } - for (c1=2*M+1;c1<=M+N;c1++) { - i = c1-2*M ; - S2(c1-2*M) ; - i = c1-M ; - S1(c1-M) ; - } - for (c1=M+N+1;c1<=2*M+N;c1++) { - i = c1-2*M ; - S2(c1-2*M) ; - } -} diff --git a/cloog-0.17.0/test/guide.c b/cloog-0.17.0/test/guide.c deleted file mode 100644 index 31e9db1..0000000 --- a/cloog-0.17.0/test/guide.c +++ /dev/null @@ -1,9 +0,0 @@ -/* Generated from ../../../git/cloog/test/guide.cloog by CLooG 0.14.0-245-gd8c1718 gmp bits in 0.00s. */ -if (N >= 1) { - for (i=1;i<=N;i++) { - S1(i); - } - for (i=N+1;i<=2*N;i++) { - S2(i); - } -} diff --git a/cloog-0.17.0/test/guide.cloog b/cloog-0.17.0/test/guide.cloog deleted file mode 100644 index 5a35582..0000000 --- a/cloog-0.17.0/test/guide.cloog +++ /dev/null @@ -1,35 +0,0 @@ -# Language is C -c - -# The context (no constraints on parameters) -1 4 # 1 lines and 4 columns -# m n 1 -1 0 0 0 # 0 >= 0, always true -0 # CLooG will set parameters names automatically - -2 # The number of statements - -2 # First statement -# The first domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 -1 2 0 0 # i <= 2*m -# The second domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 1 -1 0 0 # i >= m -0 0 0 - -1 # Second statement -2 5 # 4 lines and 6 columns -# i m n 1 -1 1 0 -1 -1 # i >= 1 -1 -1 0 2 0 # i <= n -0 0 0 -0 # CLooG will set iterators names automatically - -0 diff --git a/cloog-0.17.0/test/guide.good.c b/cloog-0.17.0/test/guide.good.c deleted file mode 100644 index 31e0346..0000000 --- a/cloog-0.17.0/test/guide.good.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Generated from ../../../git/cloog/test/guide.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i; - for (i=1;i<=N;i++) { - if (i >= M) { - S1(i) ; - } - if (i <= min(2*M,M-1)) { - S1(i) ; - } - } - for (i=N+1;i<=2*N;i++) { - S2(i) ; - } -} diff --git a/cloog-0.17.0/test/iftest.c b/cloog-0.17.0/test/iftest.c deleted file mode 100644 index 8f95ef8..0000000 --- a/cloog-0.17.0/test/iftest.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/iftest.cloog by CLooG 0.14.0-245-gd8c1718 gmp bits in 0.00s. */ -if (n >= 1) { - for (i=1;i<=n;i++) { - S1(i); - } -} diff --git a/cloog-0.17.0/test/iftest.cloog b/cloog-0.17.0/test/iftest.cloog deleted file mode 100644 index 0adbc8d..0000000 --- a/cloog-0.17.0/test/iftest.cloog +++ /dev/null @@ -1,28 +0,0 @@ -# language: C -c -# The context (no constraints on parameters) -1 4 # 1 lines and 4 columns -# m n 1 -1 0 0 0 -1 -m n - -1 # The number of statements - -2 # First statement -# The first domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 1 -1 0 0 # i >= m -# The second domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 -1 2 0 0 # i <= 2*m -0 0 0 -0 - -0 diff --git a/cloog-0.17.0/test/iftest.good.c b/cloog-0.17.0/test/iftest.good.c deleted file mode 100644 index 4ce26e4..0000000 --- a/cloog-0.17.0/test/iftest.good.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Generated from ../../../git/cloog/test/iftest.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test(int m, int n) -{ - /* Original iterators. */ - int i; - for (i=1;i<=n;i++) { - if (i <= 2*m) { - S1(i) ; - } - if (i >= max(m,2*m+1)) { - S1(i) ; - } - } -} diff --git a/cloog-0.17.0/test/iftest2.c b/cloog-0.17.0/test/iftest2.c deleted file mode 100644 index 355aa74..0000000 --- a/cloog-0.17.0/test/iftest2.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/iftest2.cloog by CLooG 0.14.0-245-gd8c1718 gmp bits in 0.00s. */ -if ((M >= 1) && (N >= 1)) { - for (i=1;i<=N;i++) { - for (j=1;j<=M;j++) { - S1(i,j); - } - } -} diff --git a/cloog-0.17.0/test/iftest2.cloog b/cloog-0.17.0/test/iftest2.cloog deleted file mode 100644 index 2bd7336..0000000 --- a/cloog-0.17.0/test/iftest2.cloog +++ /dev/null @@ -1,31 +0,0 @@ -# language: C -c -# The context (no constraints on parameters) -1 4 # 1 lines and 4 columns -# m n 1 -1 0 0 0 -0 - -1 # The number of statements - -2 # First statement -# The first domain -5 6 # 3 lines and 5 columns -# i j m n 1 -1 1 0 0 0 -1 # i >= 1 -1 -1 0 0 1 0 # i <= n -1 1 0 -1 0 0 # i >= m -1 0 1 0 0 -1 -1 0 -1 1 0 0 -# The second domain -5 6 # 3 lines and 5 columns -# i j m n 1 -1 1 0 0 0 -1 # i >= 1 -1 -1 0 0 1 0 # i <= n -1 -1 0 2 0 0 # i <= 2*m -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -0 diff --git a/cloog-0.17.0/test/iftest2.good.c b/cloog-0.17.0/test/iftest2.good.c deleted file mode 100644 index 9e7f514..0000000 --- a/cloog-0.17.0/test/iftest2.good.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Generated from ../../../git/cloog/test/iftest2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - if (M >= 1) { - for (i=1;i<=N;i++) { - for (j=1;j<=M;j++) { - if (i <= 2*M) { - S1(i,j) ; - } - if (i >= max(M,2*M+1)) { - S1(i,j) ; - } - } - } - } -} diff --git a/cloog-0.17.0/test/iftestf.cloog b/cloog-0.17.0/test/iftestf.cloog deleted file mode 100644 index 1f0d6a9..0000000 --- a/cloog-0.17.0/test/iftestf.cloog +++ /dev/null @@ -1,29 +0,0 @@ -# language: FORTRAN -f - -# The context (no constraints on parameters) -1 4 # 1 lines and 4 columns -# m n 1 -1 0 0 0 -1 -m n - -1 # The number of statements - -2 # First statement -# The first domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 1 -1 0 0 # i >= m -# The second domain -3 5 # 3 lines and 5 columns -# i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 -1 2 0 0 # i <= 2*m -0 0 0 -0 - -0 diff --git a/cloog-0.17.0/test/iftestf.f b/cloog-0.17.0/test/iftestf.f deleted file mode 100644 index 65685b9..0000000 --- a/cloog-0.17.0/test/iftestf.f +++ /dev/null @@ -1,6 +0,0 @@ -! Generated from ../../../git/cloog/test/iftestf.cloog by CLooG 0.14.0-245-gd8c1718 gmp bits in 0.00s. -IF (n >= 1) THEN - DO i=1, n - S1(i) - END DO -END IF diff --git a/cloog-0.17.0/test/infinite.c b/cloog-0.17.0/test/infinite.c deleted file mode 100644 index 10f35f2..0000000 --- a/cloog-0.17.0/test/infinite.c +++ /dev/null @@ -1,13 +0,0 @@ -/* Generated from ../../../git/cloog/test/infinite.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -for (;i<=0;i++) { - S1(i) ; -} -for (i=1;i<=N;i++) { - S1(i) ; - for (j=1;j<=M;j++) { - S2(i,j) ; - } -} -for (i=N+1;;i++) { - S1(i) ; -} diff --git a/cloog-0.17.0/test/infinite.cloog b/cloog-0.17.0/test/infinite.cloog deleted file mode 100644 index dacc187..0000000 --- a/cloog-0.17.0/test/infinite.cloog +++ /dev/null @@ -1,32 +0,0 @@ -# langage -c - -# parametres {M, N | M>=1 N >=1} -2 4 -# M N 1 -1 1 0 -1 -1 0 1 -1 -0 - -2 # Number of statements - -1 -# {i | 1<=i<=M} -0 5 -# i M N 1 -#1 1 0 0 -1 -#1 -1 1 0 0 -0 0 0 - -1 -# {i, j | 1<=i<=N 1<=j<=M} -4 6 -# i j M N 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/infinite2.c b/cloog-0.17.0/test/infinite2.c deleted file mode 100644 index 80a0b35..0000000 --- a/cloog-0.17.0/test/infinite2.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/infinite2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (i=1;i<=N;i++) { - S1(i) ; - for (j=1;j<=M;j++) { - S2(i,j) ; - } -} -for (i=N+1;;i++) { - S1(i) ; -} diff --git a/cloog-0.17.0/test/infinite2.cloog b/cloog-0.17.0/test/infinite2.cloog deleted file mode 100644 index 2d7cf97..0000000 --- a/cloog-0.17.0/test/infinite2.cloog +++ /dev/null @@ -1,32 +0,0 @@ -# langage -c - -# parametres {M, N | M>=1 N >=1} -2 4 -# M N 1 -1 1 0 -1 -1 0 1 -1 -0 - -2 # Number of statements - -1 -# {i | 1<=i<=M} -1 5 -# i M N 1 -1 1 0 0 -1 -#1 -1 1 0 0 -0 0 0 - -1 -# {i, j | 1<=i<=N 1<=j<=M} -4 6 -# i j M N 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/infinite3.c b/cloog-0.17.0/test/infinite3.c deleted file mode 100644 index 9e4292c..0000000 --- a/cloog-0.17.0/test/infinite3.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Generated from ../../../git/cloog/test/infinite3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.03s. */ -for (;i<=0;i++) { - S1(i) ; -} -for (i=1;i<=min(M,N);i++) { - S1(i) ; - for (j=1;j<=M;j++) { - S2(i,j) ; - } -} -for (i=N+1;i<=M;i++) { - S1(i) ; -} -for (i=M+1;i<=N;i++) { - for (j=1;j<=M;j++) { - S2(i,j) ; - } -} diff --git a/cloog-0.17.0/test/infinite3.cloog b/cloog-0.17.0/test/infinite3.cloog deleted file mode 100644 index 9154a0e..0000000 --- a/cloog-0.17.0/test/infinite3.cloog +++ /dev/null @@ -1,32 +0,0 @@ -# langage -c - -# parametres {M, N | M>=1 N >=1} -2 4 -# M N 1 -1 1 0 -1 -1 0 1 -1 -0 - -2 # Number of statements - -1 -# {i | 1<=i<=M} -1 5 -# i M N 1 -#1 1 0 0 -1 -1 -1 1 0 0 -0 0 0 - -1 -# {i, j | 1<=i<=N 1<=j<=M} -4 6 -# i j M N 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/infinite4.c b/cloog-0.17.0/test/infinite4.c deleted file mode 100644 index fff00ed..0000000 --- a/cloog-0.17.0/test/infinite4.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Generated from ../../../git/cloog/test/infinite4.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (;;i++) { - S1(i) ; -} diff --git a/cloog-0.17.0/test/infinite4.cloog b/cloog-0.17.0/test/infinite4.cloog deleted file mode 100644 index 5502453..0000000 --- a/cloog-0.17.0/test/infinite4.cloog +++ /dev/null @@ -1,16 +0,0 @@ -# langage -c - -# Context -0 2 -0 - -1 # Number of statements - -1 -# {i | 1<=i<=M} -0 3 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/isl/jacobi-shared.c b/cloog-0.17.0/test/isl/jacobi-shared.c deleted file mode 100644 index 0c2ceea..0000000 --- a/cloog-0.17.0/test/isl/jacobi-shared.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/jacobi-shared.cloog by CLooG 0.16.3-2-g5511bef gmp bits in 1.82s. */ -if ((h0+1)%2 == 0) { - if ((16*floord(t0-1,16) >= -N+g1+t0+1) && (16*floord(N+15*g1+15*t0+15,16) >= 15*g1+15*t0+19) && (32*floord(t1-1,32) <= g2+t1-3) && (32*floord(t1-1,32) >= -N+g2+t1+1)) { - for (c0=max(-16*floord(t0-1,16)+t0,-16*floord(g1+t0-3,16)+t0);c0<=min(32,N-g1-1);c0+=16) { - c1 = -32*floord(t1-1,32)+t1; - if (c1 <= 32) { - S1(c0+g1-1,c1+g2-1); - } - } - } -} diff --git a/cloog-0.17.0/test/isl/jacobi-shared.cloog b/cloog-0.17.0/test/isl/jacobi-shared.cloog deleted file mode 100644 index 25e4903..0000000 --- a/cloog-0.17.0/test/isl/jacobi-shared.cloog +++ /dev/null @@ -1,129 +0,0 @@ -# CLooG -> CLooG -# This is an automatic dump of a CLooG input file from a CloogInput data -# structure. - -# Language: C -c - -# Context: -1 - -22 16 0 0 2 12 -0 0 1024 0 0 0 0 32 0 0 -1 0 0 0 0 0 -0 2048 0 0 0 0 32 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 29 -1 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 29 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 63 -1 0 0 0 1 0 0 -32 0 0 0 0 0 0 0 -2 -1 0 0 0 1 0 -32 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -4 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 0 0 2 0 -1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 -32 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -32 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 31 - -1 # Parameter name(s) -T N h0 b0 b1 g0 g1 g2 g3 g4 t0 t1 - -# Statement number: -1 - -# Iteration domain of statement 1 (write_shared_A). -1 - -33 21 2 0 5 12 -0 0 1 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 -1 1 -0 1 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 -1 0 1 -0 0 0 0 0 1024 0 0 0 0 0 0 992 0 0 1 0 0 0 0 0 -0 0 0 0 2048 0 0 0 0 0 0 2016 0 0 1 0 0 0 0 0 0 -0 0 0 2 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 -0 0 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 2 0 -1 0 0 0 0 0 0 0 0 0 -1 -1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 -1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -1 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 63 -1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 31 -1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -4 -1 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 29 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 29 -1 0 0 0 0 0 0 0 0 0 0 -32 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 -32 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 -32 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 1 0 0 -32 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 31 - -0 0 0 # For future options. - - -0 # Iterator name(s) -# --------------------- SCATTERING -------------------- -1 # Scattering functions - -# Scattering of statement 1 (write_shared_A). -1 - -37 25 4 2 5 12 -0 0 0 0 0 0 1 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 -1 1 -0 0 0 0 0 1 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 -1 0 1 -0 0 0 0 0 0 0 0 0 1024 0 0 0 0 0 0 992 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 2048 0 0 0 0 0 0 2016 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 2 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 -0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 2 0 -1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 63 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 31 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -4 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 29 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 29 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -32 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -32 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -32 0 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -32 0 0 0 0 0 0 0 -2 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 31 - -1 # Scattering dimension name(s) -c0 c1 c2 c3 diff --git a/cloog-0.17.0/test/isl/jacobi-shared.good.c b/cloog-0.17.0/test/isl/jacobi-shared.good.c deleted file mode 100644 index fcd67dc..0000000 --- a/cloog-0.17.0/test/isl/jacobi-shared.good.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/jacobi-shared.cloog by CLooG 0.16.2-19-gfcd8fdc gmp bits in 1.65s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int T, int N, int h0, int b0, int b1, int g0, int g1, int g2, int g3, int g4, int t0, int t1) -{ - /* Scattering iterators. */ - int c0, c1, c2, c3; - /* Original iterators. */ - int i, j; - if ((h0+1)%2 == 0) { - if ((16*floord(g1+t0-3,16) >= -N+g1+t0+1) && (16*floord(N+15*g1+15*t0+15,16) >= 16*g1+15*t0+17) && (floord(t1-1,32) <= floord(g2+t1-3,32)) && (32*floord(t1-1,32) >= -N+g2+t1+1)) { - for (c0=max(-16*floord(t0-1,16)+t0,-16*floord(g1+t0-3,16)+t0);c0<=min(32,N-g1-1);c0+=16) { - c1 = -32*floord(t1-1,32)+t1; - if (c1 <= 32) { - S1(c0+g1-1,c1+g2-1); - } - } - } - } -} diff --git a/cloog-0.17.0/test/isl/mod.c b/cloog-0.17.0/test/isl/mod.c deleted file mode 100644 index 4f6a15e..0000000 --- a/cloog-0.17.0/test/isl/mod.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/mod.cloog by CLooG 0.14.0-325-g71fa959 gmp bits in 0.00s. */ -for (i=0;i<=3;i++) { - if (i%3 <= 1) { - S1(i); - } -} diff --git a/cloog-0.17.0/test/isl/mod.cloog b/cloog-0.17.0/test/isl/mod.cloog deleted file mode 100644 index e12de40..0000000 --- a/cloog-0.17.0/test/isl/mod.cloog +++ /dev/null @@ -1,23 +0,0 @@ -c - -# Context: -0 2 - -0 # Parameter name(s) -# Statement number: -1 - -# Iteration domain of statement 1 -4 4 1 0 1 0 -1 1 0 0 -1 -1 0 3 -1 1 -3 0 -1 -1 3 1 - -0 0 0 # For future options. - - -0 # Iterator name(s) - -# No scattering functions. -0 diff --git a/cloog-0.17.0/test/isl/mod2.c b/cloog-0.17.0/test/isl/mod2.c deleted file mode 100644 index 4f6a15e..0000000 --- a/cloog-0.17.0/test/isl/mod2.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/mod.cloog by CLooG 0.14.0-325-g71fa959 gmp bits in 0.00s. */ -for (i=0;i<=3;i++) { - if (i%3 <= 1) { - S1(i); - } -} diff --git a/cloog-0.17.0/test/isl/mod2.cloog b/cloog-0.17.0/test/isl/mod2.cloog deleted file mode 100644 index 1b09d5f..0000000 --- a/cloog-0.17.0/test/isl/mod2.cloog +++ /dev/null @@ -1,20 +0,0 @@ -# Language: C -c - -# Context: -0 2 - -0 # Parameter name(s) -# Statement number: -1 - -# Iteration domain of statement 1 -{ [i] : 0 <= i <= 3 and 0 <= i - 3*[i/3] <= 1 } - -0 0 0 # For future options. - - -0 # Iterator name(s) - -# No scattering functions. -0 diff --git a/cloog-0.17.0/test/isl/mod3.c b/cloog-0.17.0/test/isl/mod3.c deleted file mode 100644 index 3fa291b..0000000 --- a/cloog-0.17.0/test/isl/mod3.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/mod3.cloog by CLooG 0.14.0-325-g62da9f7 gmp bits in 0.02s. */ -for (i=max(0,32*h0-1991);i<=min(999,32*h0+31);i++) { - if ((63*i+32*h0+31)%64 <= 62) { - for (j=0;j<=999;j++) { - S1(i,j); - } - } -} diff --git a/cloog-0.17.0/test/isl/mod3.cloog b/cloog-0.17.0/test/isl/mod3.cloog deleted file mode 100644 index 1637080..0000000 --- a/cloog-0.17.0/test/isl/mod3.cloog +++ /dev/null @@ -1,34 +0,0 @@ -# Language: C -c - -# Context: -2 3 -1 -1 93 -1 1 0 - -1 # Parameter name(s) -h0 -# Statement number: -1 - -# Iteration domain of statement 1 -1 - -9 6 2 0 1 1 -1 1 0 0 0 0 -1 -1 0 0 0 999 -1 0 0 -1 0 31 -1 1 0 32 -32 999 -1 0 1 0 0 0 -1 0 -1 0 0 999 -1 1 0 64 -32 31 -1 -1 0 -64 32 31 -1 0 0 1 0 0 - -0 0 0 # For future options. - - -0 # Iterator name(s) - -# No scattering functions. -0 diff --git a/cloog-0.17.0/test/isl/mod4.c b/cloog-0.17.0/test/isl/mod4.c deleted file mode 100644 index 9a30f3c..0000000 --- a/cloog-0.17.0/test/isl/mod4.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/mod4.cloog by CLooG 0.16.0-9-g188dbd4 gmp bits in 0.00s. */ -if (M%11 <= 6) { - if (N%5 <= 2) { - if (M >= -N) { - for (i=0;i<=M+N;i++) { - S1(i); - } - } - } -} diff --git a/cloog-0.17.0/test/isl/mod4.cloog b/cloog-0.17.0/test/isl/mod4.cloog deleted file mode 100644 index d5837ae..0000000 --- a/cloog-0.17.0/test/isl/mod4.cloog +++ /dev/null @@ -1,23 +0,0 @@ -c - -1 - -0 4 - -0 - -1 - -6 7 1 0 2 2 -1 0 -5 0 0 1 0 -1 0 5 0 0 -1 2 -1 0 0 -11 1 0 0 -1 0 0 11 -1 0 6 -1 1 0 0 0 0 0 -1 -1 0 0 1 1 0 - -0 0 0 - -0 - -0 diff --git a/cloog-0.17.0/test/isl/mxm-shared.c b/cloog-0.17.0/test/isl/mxm-shared.c deleted file mode 100644 index e5f4c66..0000000 --- a/cloog-0.17.0/test/isl/mxm-shared.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/mxm-shared.cloog by CLooG 0.16.1-5-gcba2a9f gmp bits in 0.34s. */ -if (g4%4 == 0) { - if ((N >= g0+t1+1) && (N >= g1+t0+1) && (t1 <= 7)) { - for (c0=t0;c0<=min(127,N-g1-1);c0+=16) { - S1(g0+t1,c0+g1); - } - } -} diff --git a/cloog-0.17.0/test/isl/mxm-shared.cloog b/cloog-0.17.0/test/isl/mxm-shared.cloog deleted file mode 100644 index f82b2dd..0000000 --- a/cloog-0.17.0/test/isl/mxm-shared.cloog +++ /dev/null @@ -1,162 +0,0 @@ -# CLooG -> CLooG -# This is an automatic dump of a CLooG input file from a CloogInput data -# structure. - -# Language: C -c - -# Context: -1 - -19 15 0 0 3 10 -0 0 0 128 0 -8 0 1 0 0 0 0 0 0 0 -0 0 4096 0 0 0 128 0 -1 0 0 0 0 0 0 -0 8 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 -128 0 0 0 1 0 0 0 0 -0 0 0 0 0 -8 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 -1 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 15 -1 0 0 0 1 0 0 0 -1 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 1 0 0 -1 0 0 0 0 0 0 -1 -1 0 0 0 0 0 -128 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 -8 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 -1 15 - -1 # Parameter name(s) -N b0 b1 g0 g1 g2 g3 g4 t0 t1 - -# Statement number: -1 - -# Iteration domain of statement 1 (write_shared_C). -2 - -22 18 2 0 4 10 -0 0 -1 0 0 0 16 0 0 0 0 0 0 0 0 1 0 0 -0 0 0 0 0 128 0 0 8 0 -1 0 0 0 0 0 0 0 -0 0 0 0 4096 0 0 0 0 -128 0 1 0 0 0 0 0 0 -0 0 0 128 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -0 0 0 0 0 0 0 0 0 -128 0 0 0 1 0 0 0 0 -0 0 0 0 0 0 0 0 -8 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -128 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 0 0 -8 0 1 0 0 0 0 0 0 0 -1 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 15 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 127 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 7 -1 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 - -24 19 2 0 5 10 -0 0 -1 0 0 0 0 16 0 0 0 0 0 0 0 0 1 0 0 -0 0 0 0 0 0 128 0 0 8 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 4096 0 0 0 0 0 -128 0 1 0 0 0 0 0 0 -0 0 0 128 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 -0 0 0 0 0 0 0 0 0 0 -128 0 0 0 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 -8 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -8 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 0 0 0 0 -128 0 1 0 0 0 0 0 0 -1 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 7 -1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 15 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 127 -1 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 - -0 0 0 # For future options. - - -0 # Iterator name(s) -# --------------------- SCATTERING -------------------- -1 # Scattering functions - -# Scattering of statement 1 (write_shared_C). -2 - -27 22 4 2 4 10 -0 0 0 0 0 1 0 0 0 0 16 0 8 0 0 0 0 0 0 0 -1 0 -0 0 0 0 0 0 1 0 0 16 0 0 0 0 0 0 0 0 0 -1 0 0 -0 0 0 0 0 0 0 0 128 0 0 0 120 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 4096 0 0 0 0 0 3968 0 1 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -0 0 1 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 -128 0 0 0 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 -8 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 -128 0 1 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 -8 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 127 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 7 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 15 - -29 23 4 2 5 10 -0 0 0 0 0 1 0 0 0 0 0 16 0 8 0 0 0 0 0 0 0 -1 0 -0 0 0 0 0 0 1 0 0 0 16 0 0 0 0 0 0 0 0 0 -1 0 0 -0 0 0 0 0 0 0 0 0 128 0 0 0 120 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 4096 0 0 0 0 0 3968 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 -0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 -128 0 0 0 1 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 -8 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 -8 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 -128 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 -1 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 7 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 31 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 127 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 15 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 15 - -1 # Scattering dimension name(s) -c0 c1 c2 c3 diff --git a/cloog-0.17.0/test/isl/unroll.c b/cloog-0.17.0/test/isl/unroll.c deleted file mode 100644 index 5f80428..0000000 --- a/cloog-0.17.0/test/isl/unroll.c +++ /dev/null @@ -1,12 +0,0 @@ -/* Generated from ./isl/unroll.cloog by CLooG 0.16.3-13-gbbcc8fc gmp bits in 0.00s. */ -S1(0); -S1(1); -S1(2); -S1(3); -S1(4); -S1(5); -S1(6); -S1(7); -S1(8); -S1(9); -S1(10); diff --git a/cloog-0.17.0/test/isl/unroll.cloog b/cloog-0.17.0/test/isl/unroll.cloog deleted file mode 100644 index c3f0960..0000000 --- a/cloog-0.17.0/test/isl/unroll.cloog +++ /dev/null @@ -1,14 +0,0 @@ -C - -[n] -> { : } - -0 - -1 - -[n] -> { [i] : 0 <= i and i <= 10 } -0 0 0 - -0 - -0 diff --git a/cloog-0.17.0/test/isl/unroll.good.c b/cloog-0.17.0/test/isl/unroll.good.c deleted file mode 100644 index 9daca4d..0000000 --- a/cloog-0.17.0/test/isl/unroll.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ./isl/unroll.cloog by CLooG 0.16.3-14-g80e4ef0 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test(int M) -{ - /* Original iterators. */ - int i; - S1(0); - S1(1); - S1(2); - S1(3); - S1(4); - S1(5); - S1(6); - S1(7); - S1(8); - S1(9); - S1(10); -} diff --git a/cloog-0.17.0/test/isl/unroll2.c b/cloog-0.17.0/test/isl/unroll2.c deleted file mode 100644 index 7ec66bd..0000000 --- a/cloog-0.17.0/test/isl/unroll2.c +++ /dev/null @@ -1,7 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/unroll2.cloog by CLooG 0.16.3-13-g27516e4 gmp bits in 0.00s. */ -if ((M >= -1) && (M <= 9)) { - if (M >= 0) { - S1(M); - } - S1(M+1); -} diff --git a/cloog-0.17.0/test/isl/unroll2.cloog b/cloog-0.17.0/test/isl/unroll2.cloog deleted file mode 100644 index d725478..0000000 --- a/cloog-0.17.0/test/isl/unroll2.cloog +++ /dev/null @@ -1,14 +0,0 @@ -C - -[n] -> { : } - -0 - -1 - -[n] -> { [i] : 0 <= i and n <= i <= n + 1 <= 10 } -0 0 0 - -0 - -0 diff --git a/cloog-0.17.0/test/isl/unroll2.good.c b/cloog-0.17.0/test/isl/unroll2.good.c deleted file mode 100644 index 537b3b1..0000000 --- a/cloog-0.17.0/test/isl/unroll2.good.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/isl/unroll2.cloog by CLooG 0.16.3-13-g27516e4 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test(int M) -{ - /* Original iterators. */ - int i; - if ((M >= -1) && (M <= 9)) { - for (i=max(0,M);i<=M+1;i++) { - S1(i); - } - } -} diff --git a/cloog-0.17.0/test/largeur.c b/cloog-0.17.0/test/largeur.c deleted file mode 100644 index ff49b94..0000000 --- a/cloog-0.17.0/test/largeur.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/largeur.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -if (M >= 1) { - for (c1=1;c1<=M;c1++) { - for (c2=1;c2<=c1;c2++) { - S1(c2,c1) ; - } - } -} diff --git a/cloog-0.17.0/test/largeur.cloog b/cloog-0.17.0/test/largeur.cloog deleted file mode 100644 index fe372da..0000000 --- a/cloog-0.17.0/test/largeur.cloog +++ /dev/null @@ -1,26 +0,0 @@ -# language: C -c - -# parameters {n | n>= 0} -1 3 -1 1 0 -0 - -1 # Number of statements - -1 -# {i, j | 1<=i<=n i<=j<=n} -4 5 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 0 -1 0 -1 1 0 -0 0 0 -0 - -1 # Scattering functions -# Et les instructions de chunking... -2 7 -0 1 0 0 -1 0 0 -0 0 1 -1 0 0 0 -0 diff --git a/cloog-0.17.0/test/largeur.good.c b/cloog-0.17.0/test/largeur.good.c deleted file mode 100644 index 10f63ed..0000000 --- a/cloog-0.17.0/test/largeur.good.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Generated from ../../../git/cloog/test/largeur.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j; - for (c1=1;c1<=M;c1++) { - for (c2=1;c2<=c1;c2++) { - S1(c2,c1) ; - } - } -} diff --git a/cloog-0.17.0/test/levenshtein-1-2-3.c b/cloog-0.17.0/test/levenshtein-1-2-3.c deleted file mode 100644 index 224bd29..0000000 --- a/cloog-0.17.0/test/levenshtein-1-2-3.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Generated from ../../../git/cloog/test/levenshtein-1-2-3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.12s. */ -S1(0,0) ; -S2(1,0) ; -S3(1,1) ; -for (i=2;i<=N;i++) { - S2(i,0) ; - for (j=1;j<=i-1;j++) { - S6(i,j) ; - } - S3(i,i) ; -} -S7(N+1,0) ; -for (j=1;j<=N;j++) { - S6(N+1,j) ; - S8(N+1,j) ; -} -for (i=N+2;i<=2*M-N-2;i++) { - j = floord(i-N-1,2) ; - S7(i,j) ; - if ((i+N)%2 == 0) { - S5(i,(i-N)/2) ; - S8(i,(i-N)/2) ; - } - for (j=ceild(i-N+1,2);j<=floord(i+N-1,2);j++) { - S6(i,j) ; - S8(i,j) ; - } - if ((i+N)%2 == 0) { - S4(i,(i+N)/2) ; - S8(i,(i+N)/2) ; - } -} -for (i=2*M-N-1;i<=2*M-2;i++) { - for (j=i-M+1;j<=M-1;j++) { - S6(i,j) ; - } -} diff --git a/cloog-0.17.0/test/levenshtein-1-2-3.cloog b/cloog-0.17.0/test/levenshtein-1-2-3.cloog deleted file mode 100644 index acc6522..0000000 --- a/cloog-0.17.0/test/levenshtein-1-2-3.cloog +++ /dev/null @@ -1,110 +0,0 @@ -# language: C -c - -# Context -# {length,width | width+2<=length; 1<=width} -3 4 -# M N 1 -1 1 -1 -2 -1 0 1 -1 -1 0 0 1 -0 - -8 # Number of statements - -1 -# {t1,t2,length,width | t1=0; t2=0; width+2<=length; 1<=width} -5 6 -# i j M N 1 -0 1 0 0 0 0 -0 0 1 0 0 0 -1 0 0 1 -1 -2 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | 1<=t1<=width; t2=0; width+2<=length} -5 6 -# i j M N 1 -0 0 1 0 0 0 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 0 1 -1 -2 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | t1=t2; 1<=t2<=width; width+2<=length} -5 6 -# i j M N 1 -0 1 -1 0 0 0 -1 0 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 -1 -2 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | t1=2t2-width; width+1<=t2<=length-1; 1<=width} -5 6 -# i j M N 1 -0 1 -2 0 1 0 -1 0 1 0 -1 -1 -1 0 -1 1 0 -1 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | t1=2t2+width; 1<=t2<=length-width-1; 1<=width} -5 6 -# i j M N 1 -0 1 -2 0 -1 0 -1 0 1 0 0 -1 -1 0 -1 1 -1 -1 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | (2t2-width+1,t2+1)<=t1<=(t2+length-1,2t2+width-1); 1<=t2<=length-1; width+2<=length} -8 6 -# i j M N 1 -1 1 -2 0 1 -1 -1 1 -1 0 0 -1 -1 -1 1 1 0 -1 -1 -1 2 0 1 -1 -1 0 1 0 0 -1 -1 0 -1 1 0 -1 -1 0 0 1 -1 -2 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | (width+1,2t2+width+1)<=t1<=(2length-width-2,2t2+width+2); width+2<=length; 1<=width} -6 6 -# i j M N 1 -1 1 0 0 -1 -1 -1 1 -2 0 -1 -1 -1 -1 0 2 -1 -2 -1 -1 2 0 1 2 -1 0 0 1 -1 -2 -1 0 0 0 1 -1 -0 0 0 - -1 -# {t1,t2,length,width | (width+1,2t2-width)<=t1<=(2t2+width,2length-width-2); width+2<=length; 1<=width} -7 6 -# i j M N 1 -1 1 0 0 -1 -1 -1 1 -2 0 1 0 -1 -1 2 0 1 0 -1 -1 0 2 -1 -2 -1 0 0 1 -1 -2 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/levenshtein-1-2-3.good.c b/cloog-0.17.0/test/levenshtein-1-2-3.good.c deleted file mode 100644 index 76548ea..0000000 --- a/cloog-0.17.0/test/levenshtein-1-2-3.good.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Generated from ../../../git/cloog/test/levenshtein-1-2-3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.03s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } -#define S4(i,j) { hash(4); hash(i); hash(j); } -#define S5(i,j) { hash(5); hash(i); hash(j); } -#define S6(i,j) { hash(6); hash(i); hash(j); } -#define S7(i,j) { hash(7); hash(i); hash(j); } -#define S8(i,j) { hash(8); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - S1(0,0) ; - S2(1,0) ; - S3(1,1) ; - for (i=2;i<=N;i++) { - S2(i,0) ; - for (j=1;j<=i-1;j++) { - S6(i,j) ; - } - S3(i,i) ; - } - i = N+1 ; - S7(N+1,0) ; - for (j=1;j<=N;j++) { - S6(N+1,j) ; - S8(N+1,j) ; - } - for (i=N+2;i<=2*M-N-2;i++) { - j = floord(i-N-1,2) ; - S7(i,j) ; - if ((i+N)%2 == 0) { - j = (i-N)/2 ; - S5(i,(i-N)/2) ; - S8(i,(i-N)/2) ; - } - for (j=ceild(i-N+1,2);j<=floord(i+N-1,2);j++) { - S6(i,j) ; - S8(i,j) ; - } - if ((i+N)%2 == 0) { - j = (i+N)/2 ; - S4(i,(i+N)/2) ; - S8(i,(i+N)/2) ; - } - } - for (i=2*M-N-1;i<=2*M-2;i++) { - for (j=i-M+1;j<=M-1;j++) { - S6(i,j) ; - } - } -} diff --git a/cloog-0.17.0/test/levenshtein-1-2-3f.cloog b/cloog-0.17.0/test/levenshtein-1-2-3f.cloog deleted file mode 100644 index c78bc19..0000000 --- a/cloog-0.17.0/test/levenshtein-1-2-3f.cloog +++ /dev/null @@ -1,110 +0,0 @@ -# language: FORTRAN -f - -# Context -# {length,width | width+2<=length; 1<=width} -3 4 -# M N 1 -1 1 -1 -2 -1 0 1 -1 -1 0 0 1 -0 - -8 # Number of statements - -1 -# {t1,t2,length,width | t1=0; t2=0; width+2<=length; 1<=width} -5 6 -# i j M N 1 -0 1 0 0 0 0 -0 0 1 0 0 0 -1 0 0 1 -1 -2 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | 1<=t1<=width; t2=0; width+2<=length} -5 6 -# i j M N 1 -0 0 1 0 0 0 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 0 1 -1 -2 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | t1=t2; 1<=t2<=width; width+2<=length} -5 6 -# i j M N 1 -0 1 -1 0 0 0 -1 0 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 -1 -2 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | t1=2t2-width; width+1<=t2<=length-1; 1<=width} -5 6 -# i j M N 1 -0 1 -2 0 1 0 -1 0 1 0 -1 -1 -1 0 -1 1 0 -1 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | t1=2t2+width; 1<=t2<=length-width-1; 1<=width} -5 6 -# i j M N 1 -0 1 -2 0 -1 0 -1 0 1 0 0 -1 -1 0 -1 1 -1 -1 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | (2t2-width+1,t2+1)<=t1<=(t2+length-1,2t2+width-1); 1<=t2<=length-1; width+2<=length} -8 6 -# i j M N 1 -1 1 -2 0 1 -1 -1 1 -1 0 0 -1 -1 -1 1 1 0 -1 -1 -1 2 0 1 -1 -1 0 1 0 0 -1 -1 0 -1 1 0 -1 -1 0 0 1 -1 -2 -1 0 0 0 0 1 -0 0 0 - -1 -# {t1,t2,length,width | (width+1,2t2+width+1)<=t1<=(2length-width-2,2t2+width+2); width+2<=length; 1<=width} -6 6 -# i j M N 1 -1 1 0 0 -1 -1 -1 1 -2 0 -1 -1 -1 -1 0 2 -1 -2 -1 -1 2 0 1 2 -1 0 0 1 -1 -2 -1 0 0 0 1 -1 -0 0 0 - -1 -# {t1,t2,length,width | (width+1,2t2-width)<=t1<=(2t2+width,2length-width-2); width+2<=length; 1<=width} -7 6 -# i j M N 1 -1 1 0 0 -1 -1 -1 1 -2 0 1 0 -1 -1 2 0 1 0 -1 -1 0 2 -1 -2 -1 0 0 1 -1 -2 -1 0 0 0 1 -1 -1 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/levenshtein-1-2-3f.f b/cloog-0.17.0/test/levenshtein-1-2-3f.f deleted file mode 100644 index 5a57950..0000000 --- a/cloog-0.17.0/test/levenshtein-1-2-3f.f +++ /dev/null @@ -1,37 +0,0 @@ -! Generated from ../../../git/cloog/test/levenshtein-1-2-3f.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.11s. -S1(0,0) -S2(1,0) -S3(1,1) -DO i=2, N - S2(i,0) - DO j=1, i-1 - S6(i,j) - END DO - S3(i,i) -END DO -S7(N+1,0) -DO j=1, N - S6(N+1,j) - S8(N+1,j) -END DO -DO i=N+2, 2*M-N-2 - j = FLOOR(REAL(i-N-1)/REAL(2)) - S7(i,j) - IF (MOD(i+N, 2) == 0) THEN - S5(i,(i-N)/2) - S8(i,(i-N)/2) - END IF - DO j=CEILING(REAL(i-N+1)/REAL(2)), FLOOR(REAL(i+N-1)/REAL(2)) - S6(i,j) - S8(i,j) - END DO - IF (MOD(i+N, 2) == 0) THEN - S4(i,(i+N)/2) - S8(i,(i+N)/2) - END IF -END DO -DO i=2*M-N-1, 2*M-2 - DO j=i-M+1, M-1 - S6(i,j) - END DO -END DO diff --git a/cloog-0.17.0/test/lex.c b/cloog-0.17.0/test/lex.c deleted file mode 100644 index 52df96d..0000000 --- a/cloog-0.17.0/test/lex.c +++ /dev/null @@ -1,5 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/lex.cloog by CLooG 0.14.0-234-g330f397 gmp bits in 0.00s. */ -for (c1=0;c1<=10;c1++) { - S2(c1); - S1(c1); -} diff --git a/cloog-0.17.0/test/lex.cloog b/cloog-0.17.0/test/lex.cloog deleted file mode 100644 index a7e2b88..0000000 --- a/cloog-0.17.0/test/lex.cloog +++ /dev/null @@ -1,35 +0,0 @@ -c - -0 2 - -0 - -2 - -1 -2 3 -1 1 0 -1 -1 10 -0 0 0 - -1 -2 3 -1 1 0 -1 -1 10 -0 0 0 - -0 - -2 - -3 6 -0 -1 0 0 1 0 -0 0 -1 0 0 0 -0 0 0 -1 0 0 - -3 6 -0 -1 0 0 1 0 -0 0 -1 0 0 -1 -0 0 0 -1 0 0 - -0 diff --git a/cloog-0.17.0/test/lex.good.c b/cloog-0.17.0/test/lex.good.c deleted file mode 100644 index 4769fb1..0000000 --- a/cloog-0.17.0/test/lex.good.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/lex.cloog by CLooG 0.14.0-234-g330f397 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } - -void test() -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i; - for (c1=0;c1<=10;c1++) { - S2(c1); - S1(c1); - } -} diff --git a/cloog-0.17.0/test/lineality-1-2.c b/cloog-0.17.0/test/lineality-1-2.c deleted file mode 100644 index 9bd902e..0000000 --- a/cloog-0.17.0/test/lineality-1-2.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/lineality-1-2.cloog by CLooG 0.14.0-284-g5c046c9 gmp bits in 0.00s. */ -for (i=1;i<=M;i++) { - for (j=1;j<=i-1;j++) { - S1(i,j); - } - S1(i,i); - S2(i,i); - for (j=i+1;j<=M;j++) { - S1(i,j); - } -} diff --git a/cloog-0.17.0/test/lineality-1-2.cloog b/cloog-0.17.0/test/lineality-1-2.cloog deleted file mode 100644 index 7629fd8..0000000 --- a/cloog-0.17.0/test/lineality-1-2.cloog +++ /dev/null @@ -1,36 +0,0 @@ -# language: C -c - -# Context -# {M | 2<=M} -2 3 -# M 1 -1 1 -2 -1 0 1 -0 - -2 # Number of statements - -1 -# {i,j,M | 1<=i<=M; 1<=j<=M} -5 5 -# i j M 1 -1 1 0 0 -1 -1 0 1 0 -1 -1 -1 0 1 0 -1 0 -1 1 0 -1 0 0 0 1 -0 0 0 - -1 -# {i,j,M | i=j; 1<=j<=M} -4 5 -# i j M 1 -0 1 -1 0 0 -1 0 1 0 -1 -1 0 -1 1 0 -1 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/lineality-1-2.good.c b/cloog-0.17.0/test/lineality-1-2.good.c deleted file mode 100644 index d28268f..0000000 --- a/cloog-0.17.0/test/lineality-1-2.good.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Generated from ../../../git/cloog/test/lineality-1-2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - S1(1,1) ; - S2(1,1) ; - for (j=2;j<=M;j++) { - S1(1,j) ; - } - for (i=2;i<=M-1;i++) { - for (j=1;j<=i-1;j++) { - S1(i,j) ; - } - S1(i,i) ; - S2(i,i) ; - for (j=i+1;j<=M;j++) { - S1(i,j) ; - } - } - for (j=1;j<=M-1;j++) { - S1(M,j) ; - } - S1(M,M) ; - S2(M,M) ; -} diff --git a/cloog-0.17.0/test/lineality-2-1-2.c b/cloog-0.17.0/test/lineality-2-1-2.c deleted file mode 100644 index 37a7e2a..0000000 --- a/cloog-0.17.0/test/lineality-2-1-2.c +++ /dev/null @@ -1,16 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/lineality-2-1-2.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.00s. */ -for (i=1;i<=M;i++) { - for (j=1;j<=min(M,i+1);j++) { - S1(i,j); - } - if (i >= M-1) { - S2(i,i+2); - } - if (i <= M-2) { - S1(i,i+2); - S2(i,i+2); - } - for (j=i+3;j<=M;j++) { - S1(i,j); - } -} diff --git a/cloog-0.17.0/test/lineality-2-1-2.cloog b/cloog-0.17.0/test/lineality-2-1-2.cloog deleted file mode 100644 index a6ae5e1..0000000 --- a/cloog-0.17.0/test/lineality-2-1-2.cloog +++ /dev/null @@ -1,36 +0,0 @@ -# language: C -c - -# Context -# {M | 2<=M} -2 3 -# M 1 -1 1 -2 -1 0 1 -0 - -2 # Number of statements - -1 -# {i,j,M | 1<=i<=M; 1<=j<=M} -5 5 -# i j M 1 -1 1 0 0 -1 -1 0 1 0 -1 -1 -1 0 1 0 -1 0 -1 1 0 -1 0 0 0 1 -0 0 0 - -1 -# {i,j,M | i=j-2; 3<=j<=M+2} -4 5 -# i j M 1 -0 1 -1 0 2 -1 0 1 0 -3 -1 0 -1 1 2 -1 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/lineality-2-1-2.good.c b/cloog-0.17.0/test/lineality-2-1-2.good.c deleted file mode 100644 index 78d8126..0000000 --- a/cloog-0.17.0/test/lineality-2-1-2.good.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Generated from ../../../git/cloog/test/lineality-2-1-2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - for (i=1;i<=M-3;i++) { - for (j=1;j<=i+1;j++) { - S1(i,j) ; - } - j = i+2 ; - S1(i,i+2) ; - S2(i,i+2) ; - for (j=i+3;j<=M;j++) { - S1(i,j) ; - } - } - if (M >= 3) { - i = M-2 ; - for (j=1;j<=M-1;j++) { - S1(M-2,j) ; - } - S1(M-2,M) ; - S2(M-2,M) ; - } - for (i=M-1;i<=M;i++) { - for (j=1;j<=M;j++) { - S1(i,j) ; - } - j = i+2 ; - S2(i,i+2) ; - } -} diff --git a/cloog-0.17.0/test/logo.c b/cloog-0.17.0/test/logo.c deleted file mode 100644 index 54d229d..0000000 --- a/cloog-0.17.0/test/logo.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/logo.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.01s. */ -for (j=0;j<=7;j++) { - S1(1,j); -} -for (i=2;i<=6;i++) { - for (j=0;j<=i-2;j++) { - S2(i,j); - } - for (j=i-1;j<=4;j++) { - S1(i,j); - S2(i,j); - } - for (j=5;j<=7;j++) { - S1(i,j); - } -} -for (i=7;i<=8;i++) { - for (j=i-1;j<=7;j++) { - S1(i,j); - } -} diff --git a/cloog-0.17.0/test/logo.cloog b/cloog-0.17.0/test/logo.cloog deleted file mode 100644 index 5583c29..0000000 --- a/cloog-0.17.0/test/logo.cloog +++ /dev/null @@ -1,30 +0,0 @@ -# language: C -c - -# Context -1 3 -# n 1 -1 0 1 -0 - -2 # Number of statements - -1 -3 5 -# i j n 1 -1 1 0 0 -1 # i >= 1 -1 0 -1 0 7 # j <= 7 -1 -1 1 0 1 # j >= i-1 -0 0 0 - -1 -4 5 -# i j n 1 -1 1 0 0 -2 # i >= 2 -1 -1 0 0 6 # i <= 6 -1 0 1 0 0 # j >= 0 -1 0 -1 0 4 # j <= 4 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/logo.good.c b/cloog-0.17.0/test/logo.good.c deleted file mode 100644 index 203e5ac..0000000 --- a/cloog-0.17.0/test/logo.good.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Generated from ../../../git/cloog/test/logo.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - for (j=0;j<=7;j++) { - S1(1,j) ; - } - for (i=2;i<=5;i++) { - for (j=0;j<=i-2;j++) { - S2(i,j) ; - } - for (j=i-1;j<=4;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=5;j<=7;j++) { - S1(i,j) ; - } - } - for (j=0;j<=4;j++) { - S2(6,j) ; - } - for (j=5;j<=7;j++) { - S1(6,j) ; - } - for (i=7;i<=8;i++) { - for (j=i-1;j<=7;j++) { - S1(i,j) ; - } - } -} diff --git a/cloog-0.17.0/test/logopar.c b/cloog-0.17.0/test/logopar.c deleted file mode 100644 index 0b2c8f9..0000000 --- a/cloog-0.17.0/test/logopar.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/logopar.cloog by CLooG 0.14.0-284-g5c046c9 gmp bits in 0.00s. */ -for (j=0;j<=m;j++) { - S1(1,j); -} -for (i=2;i<=n;i++) { - for (j=0;j<=i-2;j++) { - S2(i,j); - } - for (j=i-1;j<=n;j++) { - S1(i,j); - S2(i,j); - } - for (j=n+1;j<=m;j++) { - S1(i,j); - } -} -for (i=n+1;i<=m+1;i++) { - for (j=i-1;j<=m;j++) { - S1(i,j); - } -} diff --git a/cloog-0.17.0/test/logopar.cloog b/cloog-0.17.0/test/logopar.cloog deleted file mode 100644 index 37114ae..0000000 --- a/cloog-0.17.0/test/logopar.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# language: C -c - -# Context -3 4 -# m n 1 -1 1 -1 0 # m > n -1 1 0 0 # m >= 0 -1 0 1 -2 # n >= 2 -1 -m n - -2 # Number of statements - -1 -3 6 -# i j m n 1 -1 1 0 0 0 -1 # i >= 1 -1 0 -1 1 0 0 # j <= m -1 -1 1 0 0 1 # j >= i-1 -0 0 0 - -1 -4 6 -# i j m n 1 -1 1 0 0 0 -2 # i >= 2 -1 -1 0 0 1 0 # i <= n -1 0 1 0 0 0 # j >= 0 -1 0 -1 0 1 0 # j <= n -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/logopar.good.c b/cloog-0.17.0/test/logopar.good.c deleted file mode 100644 index 2b03ca2..0000000 --- a/cloog-0.17.0/test/logopar.good.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Generated from ../../../git/cloog/test/logopar.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int m, int n) -{ - /* Original iterators. */ - int i, j; - for (j=0;j<=m;j++) { - S1(1,j) ; - } - if (m >= n+1) { - for (i=2;i<=n;i++) { - for (j=0;j<=i-2;j++) { - S2(i,j) ; - } - for (j=i-1;j<=n;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=n+1;j<=m;j++) { - S1(i,j) ; - } - } - } - if (m == n) { - for (i=2;i<=n;i++) { - for (j=0;j<=i-2;j++) { - S2(i,j) ; - } - for (j=i-1;j<=n;j++) { - S1(i,j) ; - S2(i,j) ; - } - } - } - for (i=n+1;i<=m+1;i++) { - for (j=i-1;j<=m;j++) { - S1(i,j) ; - } - } -} diff --git a/cloog-0.17.0/test/lu.c b/cloog-0.17.0/test/lu.c deleted file mode 100644 index 74ec81f..0000000 --- a/cloog-0.17.0/test/lu.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/lu.cloog by CLooG 0.14.0-238-gb1cb779 gmp bits in 0.01s. */ -if (n >= 2) { - for (j=2;j<=n;j++) { - S1(1,j); - } - for (c1=2;c1<=n-1;c1++) { - for (c2=2;c2<=n;c2++) { - for (i=1;i<=min(c1-1,c2-1);i++) { - S2(i,c2,c1); - } - } - for (j=c1+1;j<=n;j++) { - S1(c1,j); - } - } - for (c2=2;c2<=n;c2++) { - for (i=1;i<=c2-1;i++) { - S2(i,c2,n); - } - } -} diff --git a/cloog-0.17.0/test/lu.cloog b/cloog-0.17.0/test/lu.cloog deleted file mode 100644 index 7753006..0000000 --- a/cloog-0.17.0/test/lu.cloog +++ /dev/null @@ -1,47 +0,0 @@ -# language: C -c - -# parameter n -1 3 -# n 1 -1 0 1 -1 -n - -2 # Number of statements - -1 -# {i, j | 1<=i<=n; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 - -1 -# {i, j, k | 1<=i<=n; i+1<=j<=n i+1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 -1 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 -0 - -2 # Scattering functions -# Et les instructions de chunking... -2 7 -# c1 c2 i j n 1 -0 1 0 -1 0 0 0 -0 0 1 0 0 -1 0 - -2 8 -# c1 c2 i j k n 1 -0 1 0 0 0 -1 0 0 -0 0 1 0 -1 0 0 0 -0 diff --git a/cloog-0.17.0/test/lu.good.c b/cloog-0.17.0/test/lu.good.c deleted file mode 100644 index 5e9d3d2..0000000 --- a/cloog-0.17.0/test/lu.good.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Generated from ../../../git/cloog/test/lu.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int n) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j, k; - if (n >= 2) { - for (j=2;j<=n;j++) { - S1(1,j) ; - } - } - for (c1=2;c1<=n-1;c1++) { - for (c2=2;c2<=n-1;c2++) { - for (i=1;i<=min(c2-1,c1-1);i++) { - S2(i,c2,c1) ; - } - } - for (i=1;i<=c1-1;i++) { - S2(i,n,c1) ; - } - for (j=c1+1;j<=n;j++) { - S1(c1,j) ; - } - } - if (n >= 2) { - for (c2=2;c2<=n;c2++) { - for (i=1;i<=c2-1;i++) { - S2(i,c2,n) ; - } - } - } -} diff --git a/cloog-0.17.0/test/lu2.c b/cloog-0.17.0/test/lu2.c deleted file mode 100644 index 2f3b34b..0000000 --- a/cloog-0.17.0/test/lu2.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/lu2.cloog by CLooG 0.14.0-238-gb1cb779 gmp bits in 0.01s. */ -if (n >= 2) { - for (l=2;l<=n;l++) { - S1(1,n,1,l); - } - for (i=2;i<=n-1;i++) { - for (j=2;j<=n;j++) { - for (k=1;k<=min(i-1,j-1);k++) { - S2(i,j,k,j,i); - } - } - for (l=i+1;l<=n;l++) { - S1(i,n,i,l); - } - } - for (j=2;j<=n;j++) { - for (k=1;k<=j-1;k++) { - S2(n,j,k,j,n); - } - } -} diff --git a/cloog-0.17.0/test/lu2.cloog b/cloog-0.17.0/test/lu2.cloog deleted file mode 100644 index 5775e49..0000000 --- a/cloog-0.17.0/test/lu2.cloog +++ /dev/null @@ -1,37 +0,0 @@ -# language: C -c - -# parameter n -1 3 -1 0 1 -1 -n - -2 # Number of statements - -1 -# {c1, c2, i, j | c1=i, c2=n, 1<=i<=n; i+1<=j<=n} -6 7 -0 1 0 -1 0 0 0 -0 0 1 0 0 -1 0 -1 0 0 1 0 0 -1 -1 0 0 -1 0 1 0 -1 0 0 -1 1 0 -1 -1 0 0 0 -1 1 0 -0 0 0 - -1 -# {c1, c2, i, j, k | c1=k, c2=j, 1<=i<=n; i+1<=j<=n i+1<=k<=n} -8 8 -0 1 0 0 0 -1 0 0 -0 0 1 0 -1 0 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 -1 0 0 1 0 -1 0 0 -1 1 0 0 -1 -1 0 0 0 -1 0 1 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 -1 1 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/lu2.good.c b/cloog-0.17.0/test/lu2.good.c deleted file mode 100644 index 5641856..0000000 --- a/cloog-0.17.0/test/lu2.good.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Generated from ../../../git/cloog/test/lu2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k,l) { hash(1); hash(i); hash(j); hash(k); hash(l); } -#define S2(i,j,k,l,m) { hash(2); hash(i); hash(j); hash(k); hash(l); hash(m); } - -void test(int n) -{ - /* Original iterators. */ - int i, j, k, l, m; - if (n >= 2) { - for (l=2;l<=n;l++) { - S1(1,n,1,l) ; - } - } - for (i=2;i<=n-1;i++) { - for (j=2;j<=n-1;j++) { - for (k=1;k<=min(j-1,i-1);k++) { - S2(i,j,k,j,i) ; - } - } - for (k=1;k<=i-1;k++) { - S2(i,n,k,n,i) ; - } - for (l=i+1;l<=n;l++) { - S1(i,n,i,l) ; - } - } - if (n >= 2) { - for (j=2;j<=n;j++) { - for (k=1;k<=j-1;k++) { - S2(n,j,k,j,n) ; - } - } - } -} diff --git a/cloog-0.17.0/test/lub.c b/cloog-0.17.0/test/lub.c deleted file mode 100644 index 43269a4..0000000 --- a/cloog-0.17.0/test/lub.c +++ /dev/null @@ -1,13 +0,0 @@ -/* Generated from ../../../git/cloog/test/lub.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -if (M >= 2) { - for (i=1;i<=M-1;i++) { - for (j=i+1;j<=M;j++) { - S1(i,j) ; - for (k=i+1;k<=M;k++) { - S2(i,j,k) ; - S3(i,j,k) ; - } - S4(i,j) ; - } - } -} diff --git a/cloog-0.17.0/test/lub.cloog b/cloog-0.17.0/test/lub.cloog deleted file mode 100644 index fcab9b5..0000000 --- a/cloog-0.17.0/test/lub.cloog +++ /dev/null @@ -1,58 +0,0 @@ -# language: C -c - -# parameter n -1 3 -# n 1 -1 0 1 -0 - -4 # Number of statements - -1 -# {i, j | 1<=i<=n; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 - -1 -# {i, j, k | 1<=i<=n; i+1<=j<=n i+1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 -1 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 - -1 -# {i, j, k | 1<=i<=n; i+1<=j<=n i+1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 -1 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 - -1 -# {i, j | 1<=i<=n; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 -0 - -0 # Scattering functions - diff --git a/cloog-0.17.0/test/lub.good.c b/cloog-0.17.0/test/lub.good.c deleted file mode 100644 index 3122a3c..0000000 --- a/cloog-0.17.0/test/lub.good.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/lub.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } -#define S4(i,j) { hash(4); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j, k; - for (i=1;i<=M-1;i++) { - for (j=i+1;j<=M;j++) { - S1(i,j) ; - for (k=i+1;k<=M;k++) { - S2(i,j,k) ; - S3(i,j,k) ; - } - S4(i,j) ; - } - } -} diff --git a/cloog-0.17.0/test/lux.c b/cloog-0.17.0/test/lux.c deleted file mode 100644 index d313e3a..0000000 --- a/cloog-0.17.0/test/lux.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/lux.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -if (M >= 2) { - for (l=2;l<=M;l++) { - S1(1,1,M,l) ; - } - for (i=2;i<=M-1;i++) { - for (j=1;j<=i-1;j++) { - for (k=j+1;k<=M;k++) { - S2(i,j,k,k,i) ; - } - } - for (l=i+1;l<=M;l++) { - S1(i,i,M,l) ; - } - } - for (j=1;j<=M-1;j++) { - for (k=j+1;k<=M;k++) { - S2(M,j,k,k,M) ; - } - } -} diff --git a/cloog-0.17.0/test/lux.cloog b/cloog-0.17.0/test/lux.cloog deleted file mode 100644 index 1687e32..0000000 --- a/cloog-0.17.0/test/lux.cloog +++ /dev/null @@ -1,36 +0,0 @@ -# language: C -c - -# parameter n -1 3 -1 0 1 -0 - -2 # Number of statements - -1 -# {c1, c2, i, j | c1=i, c2=n, 1<=i<=n; i+1<=j<=n} -6 7 -0 1 -1 0 0 0 0 -0 0 0 1 0 -1 0 -1 0 1 0 0 0 -1 -1 0 -1 0 0 1 0 -1 0 -1 0 1 0 -1 -1 0 0 0 -1 1 0 -0 0 0 - -1 -# {c1, c2, i, j, k | c1=k, c2=j, 1<=i<=n; i+1<=j<=n i+1<=k<=n} -8 8 -0 1 0 0 0 -1 0 0 -0 0 0 -1 1 0 0 0 -1 0 1 0 0 0 0 -1 -1 0 -1 0 0 0 1 0 -1 0 -1 1 0 0 0 -1 -1 0 0 -1 0 0 1 0 -1 0 -1 0 0 1 0 -1 -1 0 0 0 0 -1 1 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/lux.good.c b/cloog-0.17.0/test/lux.good.c deleted file mode 100644 index e30289c..0000000 --- a/cloog-0.17.0/test/lux.good.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Generated from ../../../git/cloog/test/lux.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k,l) { hash(1); hash(i); hash(j); hash(k); hash(l); } -#define S2(i,j,k,l,m) { hash(2); hash(i); hash(j); hash(k); hash(l); hash(m); } - -void test(int M) -{ - /* Original iterators. */ - int i, j, k, l, m; - if (M >= 2) { - for (l=2;l<=M;l++) { - S1(1,1,M,l) ; - } - } - for (i=2;i<=M-1;i++) { - for (j=1;j<=i-1;j++) { - for (k=j+1;k<=M;k++) { - S2(i,j,k,k,i) ; - } - } - for (l=i+1;l<=M;l++) { - S1(i,i,M,l) ; - } - } - if (M >= 2) { - for (j=1;j<=M-1;j++) { - for (k=j+1;k<=M;k++) { - S2(M,j,k,k,M) ; - } - } - } -} diff --git a/cloog-0.17.0/test/merge.c b/cloog-0.17.0/test/merge.c deleted file mode 100644 index b85ca1c..0000000 --- a/cloog-0.17.0/test/merge.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/merge.cloog by CLooG 0.14.0-238-gb1cb779 gmp bits in 0.00s. */ -S1(0); -for (c1=0;c1<=10;c1++) { - if (c1 >= 2) { - S2(c1); - } - S3(c1); -} diff --git a/cloog-0.17.0/test/merge.cloog b/cloog-0.17.0/test/merge.cloog deleted file mode 100644 index d98c1d0..0000000 --- a/cloog-0.17.0/test/merge.cloog +++ /dev/null @@ -1,42 +0,0 @@ -c - -0 2 - -0 - -3 - -1 -1 3 -0 -1 0 -0 0 0 - -1 -2 3 -1 1 -2 -1 -1 10 -0 0 0 - -1 -2 3 -1 1 0 -1 -1 10 -0 0 0 - -0 - -3 - -2 5 -0 1 0 -1 0 -0 0 1 0 0 - -2 5 -0 1 0 -1 0 -0 0 1 0 -1 - -2 5 -0 1 0 -1 0 -0 0 1 0 -2 - -0 diff --git a/cloog-0.17.0/test/merge.good.c b/cloog-0.17.0/test/merge.good.c deleted file mode 100644 index 283dc4b..0000000 --- a/cloog-0.17.0/test/merge.good.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/merge.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } -#define S3(i) { hash(3); hash(i); } - -void test() -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i; - for (c1=0;c1<=10;c1++) { - if (c1 == 0) { - S1(0) ; - } - if (c1 >= 2) { - S2(c1) ; - } - S3(c1) ; - } -} diff --git a/cloog-0.17.0/test/min-1-1.c b/cloog-0.17.0/test/min-1-1.c deleted file mode 100644 index 896fea0..0000000 --- a/cloog-0.17.0/test/min-1-1.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-1-1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if ((M >= 0) && (N >= 1)) { - for (i=1;i<=N;i++) { - for (j=0;j<=min(min(M,i),-i+N);j++) { - S1(i,j) ; - } - } -} diff --git a/cloog-0.17.0/test/min-1-1.cloog b/cloog-0.17.0/test/min-1-1.cloog deleted file mode 100644 index a15cdbd..0000000 --- a/cloog-0.17.0/test/min-1-1.cloog +++ /dev/null @@ -1,27 +0,0 @@ -# language: C -c - -# Context -# {M,N | 1>=0} -1 4 -# M N 1 -1 0 0 1 -0 - -1 # Number of statements - -1 -# {i,j |1<=i<=N; 0<=j<=M; j<=i; j+i<=N}, i.e. -# {i,j | (1,j)<=i<=-j+N; 0<=j<=M} -6 6 -# i j M N 1 -1 1 0 0 0 -1 -1 0 1 0 0 0 -1 0 -1 1 0 0 -1 1 -1 0 0 0 -1 -1 -1 0 1 0 -1 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/min-1-1.good.c b/cloog-0.17.0/test/min-1-1.good.c deleted file mode 100644 index ff0d5fc..0000000 --- a/cloog-0.17.0/test/min-1-1.good.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-1-1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - if (M >= 0) { - for (i=1;i<=N;i++) { - for (j=0;j<=min(min(i,-i+N),M);j++) { - S1(i,j) ; - } - } - } -} diff --git a/cloog-0.17.0/test/min-2-1.c b/cloog-0.17.0/test/min-2-1.c deleted file mode 100644 index f7161bc..0000000 --- a/cloog-0.17.0/test/min-2-1.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-2-1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if ((M >= 0) && (N >= 1)) { - for (i=1;i<=N;i++) { - for (j=0;j<=min(min(M,i),-i+N);j++) { - for (k=0;k<=min(min(M,i),-i+N);k++) { - S1(i,j,k) ; - } - } - } -} diff --git a/cloog-0.17.0/test/min-2-1.cloog b/cloog-0.17.0/test/min-2-1.cloog deleted file mode 100644 index 0c1ed37..0000000 --- a/cloog-0.17.0/test/min-2-1.cloog +++ /dev/null @@ -1,31 +0,0 @@ -# language: C -c - -# Context -# {M,N | 1>=0} -1 4 -# M N 1 -1 0 0 1 -0 - -1 # Number of statements - -1 -# {i,j |1<=i<=N; 0<=j<=M; j<=i; j+i<=N}, i.e. -# {i,j | (1,j)<=i<=-j+N; 0<=j<=M} -10 7 -# i j k M N 1 -1 1 0 0 0 0 -1 -1 0 1 0 0 0 0 -1 0 -1 0 1 0 0 -1 1 -1 0 0 0 0 -1 -1 -1 0 0 1 0 -1 0 0 1 0 0 0 -1 0 0 -1 1 0 0 -1 1 0 -1 0 0 0 -1 -1 0 -1 0 1 0 -1 0 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/min-2-1.good.c b/cloog-0.17.0/test/min-2-1.good.c deleted file mode 100644 index e052a0c..0000000 --- a/cloog-0.17.0/test/min-2-1.good.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-2-1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j, k; - if (M >= 0) { - for (i=1;i<=N;i++) { - for (j=0;j<=min(min(i,M),-i+N);j++) { - for (k=0;k<=min(min(M,i),-i+N);k++) { - S1(i,j,k) ; - } - } - } - } -} diff --git a/cloog-0.17.0/test/min-3-1.c b/cloog-0.17.0/test/min-3-1.c deleted file mode 100644 index 5736a3c..0000000 --- a/cloog-0.17.0/test/min-3-1.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-3-1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (i=0;i<=min(10,M);i++) { - for (j=0;j<=min(10,M);j++) { - S1(i,j) ; - } -} diff --git a/cloog-0.17.0/test/min-3-1.cloog b/cloog-0.17.0/test/min-3-1.cloog deleted file mode 100644 index f1a3c12..0000000 --- a/cloog-0.17.0/test/min-3-1.cloog +++ /dev/null @@ -1,27 +0,0 @@ -# language: C -c - -# Context -2 3 -# M 1 -1 1 0 -1 0 1 -0 - -1 # Number of statements - -1 -# -7 5 -# i j M 1 -1 1 0 0 0 -1 -1 0 1 0 -1 -1 0 0 10 -1 0 1 0 0 -1 0 -1 1 0 -1 0 -1 0 10 -1 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/min-3-1.good.c b/cloog-0.17.0/test/min-3-1.good.c deleted file mode 100644 index ec50b38..0000000 --- a/cloog-0.17.0/test/min-3-1.good.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-3-1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - for (i=0;i<=min(10,M);i++) { - for (j=0;j<=min(10,M);j++) { - S1(i,j) ; - } - } -} diff --git a/cloog-0.17.0/test/min-4-1.c b/cloog-0.17.0/test/min-4-1.c deleted file mode 100644 index 91e5e65..0000000 --- a/cloog-0.17.0/test/min-4-1.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-4-1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if ((M >= -N) && (M >= -O) && (N >= 0) && (N >= -O)) { - for (i=max(-M,-N);i<=min(N,O);i++) { - S1(i) ; - } -} diff --git a/cloog-0.17.0/test/min-4-1.cloog b/cloog-0.17.0/test/min-4-1.cloog deleted file mode 100644 index 5cce62f..0000000 --- a/cloog-0.17.0/test/min-4-1.cloog +++ /dev/null @@ -1,25 +0,0 @@ -# language: C -c - -# Context -# {L,M,N|} -1 5 -# L M N 1 -1 0 0 0 1 -0 - -1 # Number of statements - -1 -# {i|-L,-M <= i <= M, N} -5 6 -# i L M N 1 -1 1 1 0 0 0 -1 1 0 1 0 0 -1 -1 0 1 0 0 -1 -1 0 0 1 0 -1 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/min-4-1.good.c b/cloog-0.17.0/test/min-4-1.good.c deleted file mode 100644 index a04831f..0000000 --- a/cloog-0.17.0/test/min-4-1.good.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated from ../../../git/cloog/test/min-4-1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test(int M, int N, int O) -{ - /* Original iterators. */ - int i; - for (i=max(-M,-N);i<=min(O,N);i++) { - S1(i) ; - } -} diff --git a/cloog-0.17.0/test/mod4.c b/cloog-0.17.0/test/mod4.c deleted file mode 100644 index 6a1ad6a..0000000 --- a/cloog-0.17.0/test/mod4.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/mod4.cloog by CLooG 0.14.0-225-g6e2d019 gmp bits in 0.00s. */ -for (j=2;j<=10;j+=3) { - S1(j,(j+1)/3,(j+1)/3,2,(j-2)/3); - S2(j,(j+1)/3,(j+1)/3,2,(j-2)/3); - S3(j,(j+1)/3,(j+1)/3,2,(j-2)/3); -} diff --git a/cloog-0.17.0/test/mod4.cloog b/cloog-0.17.0/test/mod4.cloog deleted file mode 100644 index 6f3eecd..0000000 --- a/cloog-0.17.0/test/mod4.cloog +++ /dev/null @@ -1,72 +0,0 @@ -# language: C -c - -# parameters -1 2 -1 1 - 0 - - -3 - - - -# S1: ND_4IP_3 -1 -11 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 0 0 10 - 0 0 0 0 1 0 -2 - 1 -1 0 0 0 3 2 - 1 -1 0 0 0 3 2 - 1 1 0 0 0 -3 0 - 0 1 0 0 -1 -3 0 - 1 1 -3 0 0 0 2 - 1 -1 3 0 0 0 0 - 1 1 0 -3 0 0 1 - 1 -1 0 3 0 0 1 - 0 0 0 - - - -# S2: W:ND_4OP_1 -1 -13 7 - 1 0 1 0 0 -1 -1 - 1 0 0 3 0 -3 -2 - 1 1 0 0 0 0 -1 - 1 -1 0 0 0 0 10 - 0 0 0 0 1 0 -2 - 1 -1 0 0 0 3 2 - 1 -1 0 0 0 3 2 - 1 1 0 0 0 -3 0 - 0 1 0 0 -1 -3 0 - 1 1 -3 0 0 0 2 - 1 -1 3 0 0 0 0 - 1 1 0 -3 0 0 1 - 1 -1 0 3 0 0 1 - 0 0 0 - - - -# S3: ND_4 -1 -11 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 0 0 10 - 0 0 0 0 1 0 -2 - 1 -1 0 0 0 3 2 - 1 -1 0 0 0 3 2 - 1 1 0 0 0 -3 0 - 0 1 0 0 -1 -3 0 - 1 1 -3 0 0 0 2 - 1 -1 3 0 0 0 0 - 1 1 0 -3 0 0 1 - 1 -1 0 3 0 0 1 - 0 0 0 - - - 1 - j div41 div42 mod6 mod6_a - 0 - 0 diff --git a/cloog-0.17.0/test/mode.c b/cloog-0.17.0/test/mode.c deleted file mode 100644 index c527eed..0000000 --- a/cloog-0.17.0/test/mode.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/mode.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.00s. */ -if (M >= 0) { - if (N >= 0) { - for (i=0;i<=M;i++) { - for (j=0;j<=min(N,i);j++) { - S1(i,j); - S2(i,j); - } - for (j=N+1;j<=i;j++) { - S1(i,j); - } - for (j=i+1;j<=N;j++) { - S2(i,j); - } - } - } - if (N <= -1) { - for (i=0;i<=M;i++) { - for (j=0;j<=i;j++) { - S1(i,j); - } - } - } -} diff --git a/cloog-0.17.0/test/mode.cloog b/cloog-0.17.0/test/mode.cloog deleted file mode 100644 index caeecb8..0000000 --- a/cloog-0.17.0/test/mode.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# language: C -c - -# parameters n m -1 4 -# n m 1 -1 0 0 1 -0 - -2 # Number of statements - -1 -# S2 {i, j | 0<=i<=n; 0<=j<=i} -4 6 -# i j n m 1 -1 1 0 0 0 0 -1 -1 0 1 0 0 -1 0 1 0 0 0 -1 1 -1 0 0 0 -0 0 0 - -1 -# S2 {i, j | 0<=i<=n; 0<=j<=m} -4 6 -# i j n m 1 -1 1 0 0 0 0 -1 -1 0 1 0 0 -1 0 1 0 0 0 -1 0 -1 0 1 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/mode.good.c b/cloog-0.17.0/test/mode.good.c deleted file mode 100644 index 0714757..0000000 --- a/cloog-0.17.0/test/mode.good.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Generated from ../../../git/cloog/test/mode.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - for (i=0;i<=min(M,N-1);i++) { - for (j=0;j<=i;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=i+1;j<=N;j++) { - S2(i,j) ; - } - } - if ((M >= N) && (N >= 0)) { - for (j=0;j<=N;j++) { - S1(N,j) ; - S2(N,j) ; - } - } - if (N >= 0) { - for (i=N+1;i<=M;i++) { - for (j=0;j<=N;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=N+1;j<=i;j++) { - S1(i,j) ; - } - } - } - if (N <= -1) { - for (i=0;i<=M;i++) { - for (j=0;j<=i;j++) { - S1(i,j) ; - } - } - } -} diff --git a/cloog-0.17.0/test/multi-mm-1.c b/cloog-0.17.0/test/multi-mm-1.c deleted file mode 100644 index 646395c..0000000 --- a/cloog-0.17.0/test/multi-mm-1.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/multi-mm-1.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.00s. */ -for (i=0;i<=M;i++) { - for (j=0;j<=min(N,i);j++) { - S1(i,j); - S2(i,j); - } - for (j=N+1;j<=i;j++) { - S1(i,j); - } -} diff --git a/cloog-0.17.0/test/multi-mm-1.cloog b/cloog-0.17.0/test/multi-mm-1.cloog deleted file mode 100644 index 58f4ce8..0000000 --- a/cloog-0.17.0/test/multi-mm-1.cloog +++ /dev/null @@ -1,37 +0,0 @@ -# language: C -c - -# Context -#{M,N|M>N} -3 4 -# M N 1 -1 1 -1 0 -1 0 1 -1 -1 0 0 1 -0 - -2 # Number of statements - -1 -# -4 6 -# i j M N 1 -1 0 1 0 0 0 -1 1 -1 0 0 0 -1 -1 0 1 0 0 -1 0 0 0 0 1 -0 0 0 - -1 -# -5 6 -# i j M N 1 -1 0 1 0 0 0 -1 1 -1 0 0 0 -1 -1 0 1 0 0 -1 0 -1 0 1 0 -1 0 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/multi-mm-1.good.c b/cloog-0.17.0/test/multi-mm-1.good.c deleted file mode 100644 index 6bfcc3c..0000000 --- a/cloog-0.17.0/test/multi-mm-1.good.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Generated from ../../../git/cloog/test/multi-mm-1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - for (i=0;i<=N;i++) { - for (j=0;j<=i;j++) { - S1(i,j) ; - S2(i,j) ; - } - } - for (i=N+1;i<=M;i++) { - for (j=0;j<=N;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=N+1;j<=i;j++) { - S1(i,j) ; - } - } -} diff --git a/cloog-0.17.0/test/multi-stride.c b/cloog-0.17.0/test/multi-stride.c deleted file mode 100644 index 51b2061..0000000 --- a/cloog-0.17.0/test/multi-stride.c +++ /dev/null @@ -1 +0,0 @@ -/* Generated from ../../../git/cloog/test/multi-stride.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ diff --git a/cloog-0.17.0/test/multi-stride.cloog b/cloog-0.17.0/test/multi-stride.cloog deleted file mode 100644 index 8f858da..0000000 --- a/cloog-0.17.0/test/multi-stride.cloog +++ /dev/null @@ -1,28 +0,0 @@ -# Language -c - -# Context - - 1 2 - 1 1 -0 - -# Number of statements -1 - -1 - -# i' i j 1 - 4 5 - 0 1 -2 0 -1 - 0 1 0 -6 -2 - 1 1 0 0 0 - 1 -1 0 0 100 - -0 0 0 - -0 -0 - - - diff --git a/cloog-0.17.0/test/multi-stride2.c b/cloog-0.17.0/test/multi-stride2.c deleted file mode 100644 index 443107b..0000000 --- a/cloog-0.17.0/test/multi-stride2.c +++ /dev/null @@ -1,4 +0,0 @@ -/* Generated from ../../../git/cloog/test/multi-stride2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -for (i=5;i<=100;i+=6) { - S1(i,(i-1)/2,(i-2)/3) ; -} diff --git a/cloog-0.17.0/test/multi-stride2.cloog b/cloog-0.17.0/test/multi-stride2.cloog deleted file mode 100644 index db1afd4..0000000 --- a/cloog-0.17.0/test/multi-stride2.cloog +++ /dev/null @@ -1,28 +0,0 @@ -# Language -c - -# Context - - 1 2 - 1 1 -0 - -# Number of statements -1 - -1 - -# i' i j 1 - 4 5 - 0 1 -2 0 -1 - 0 1 0 -3 -2 - 1 1 0 0 0 - 1 -1 0 0 100 - -0 0 0 - -0 -0 - - - diff --git a/cloog-0.17.0/test/no_lindep.c b/cloog-0.17.0/test/no_lindep.c deleted file mode 100644 index 3c7c574..0000000 --- a/cloog-0.17.0/test/no_lindep.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from ../../../git/cloog/test/no_lindep.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -S1(N+2) ; diff --git a/cloog-0.17.0/test/no_lindep.cloog b/cloog-0.17.0/test/no_lindep.cloog deleted file mode 100644 index ab0cb7d..0000000 --- a/cloog-0.17.0/test/no_lindep.cloog +++ /dev/null @@ -1,34 +0,0 @@ -# language C -c - -# 2 parameters -1 4 -1 0 0 0 - -0 - -# 1 statement -1 - -# 1 domain -# i=n+2 -1 -1 5 -0 -1 0 1 2 - -0 0 0 - -0 - -# 1 scattering function -# c1=M+1 -# c2=N -1 -2 7 -0 -1 0 0 1 0 1 -0 0 -1 0 0 1 0 - -0 - - - diff --git a/cloog-0.17.0/test/no_lindep.good.c b/cloog-0.17.0/test/no_lindep.good.c deleted file mode 100644 index 5db6759..0000000 --- a/cloog-0.17.0/test/no_lindep.good.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/no_lindep.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i; - c1 = M+1 ; - i = N+2 ; - S1(N+2) ; -} diff --git a/cloog-0.17.0/test/non_optimal/nul_complex1.c b/cloog-0.17.0/test/non_optimal/nul_complex1.c deleted file mode 100644 index ff78145..0000000 --- a/cloog-0.17.0/test/non_optimal/nul_complex1.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/./non_optimal/nul_complex1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -if (n >= 0) { - for (c1=0;c1<=5*n;c1++) { - for (c2=max(ceild(2*c1,3),c1-n);c2<=min(floord(2*c1+2*n,3),c1);c2++) { - if (c2%2 == 0) { - S1((-2*c1+3*c2)/2,c1-c2) ; - } - } - } -} diff --git a/cloog-0.17.0/test/non_optimal/nul_complex1.cloog b/cloog-0.17.0/test/non_optimal/nul_complex1.cloog deleted file mode 100644 index 4b4d45a..0000000 --- a/cloog-0.17.0/test/non_optimal/nul_complex1.cloog +++ /dev/null @@ -1,37 +0,0 @@ -# Optimal code is in fact : -# -# for (i=0;i<=M;i+=2) { -# S1 ; -# } - -# language: C -c - -# parameter n -1 3 -# n 1 -1 0 1 -1 -n - -1 # Number of statements - -1 -# {i | 0<=i<=n} -4 5 -# i j n 1 -1 1 0 0 0 -1 -1 0 1 0 -1 0 1 0 0 -1 0 -1 1 0 -0 0 0 -0 - -1 # Scattering functions - -2 7 -# c1 c2 i j n 1 -0 1 0 -2 -3 0 0 -0 0 1 -2 -2 0 0 - -0 diff --git a/cloog-0.17.0/test/non_optimal/nul_complex1.good.c b/cloog-0.17.0/test/non_optimal/nul_complex1.good.c deleted file mode 100644 index 79694f1..0000000 --- a/cloog-0.17.0/test/non_optimal/nul_complex1.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/./non_optimal/nul_complex1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int n) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j; - for (c1=0;c1<=5*n;c1++) { - for (c2=max(c1-n,ceild(2*c1,3));c2<=min(c1,floord(2*c1+2*n,3));c2++) { - if (c2%2 == 0) { - i = (-2*c1+3*c2)/2 ; - j = c1-c2 ; - S1((-2*c1+3*c2)/2,c1-c2) ; - } - } - } -} diff --git a/cloog-0.17.0/test/non_optimal/usvd_e_t.c b/cloog-0.17.0/test/non_optimal/usvd_e_t.c deleted file mode 100644 index 6d253f6..0000000 --- a/cloog-0.17.0/test/non_optimal/usvd_e_t.c +++ /dev/null @@ -1,375 +0,0 @@ -/* Generated from ../../../git/cloog/test/non_optimal/usvd_e_t.cloog by CLooG 0.14.0-238-gb1cb779 gmp bits in 0.11s. */ -for (i=0;i<=2;i++) { - S1(i,0,0); - for (j=0;j<=4;j++) { - S2(i,j,0); - } -} -S1(3,0,0); -for (j=0;j<=4;j++) { - S2(3,j,0); -} -for (j=7;j<=11;j++) { - S8(3,j,0); -} -S1(4,0,0); -S2(4,0,0); -S3(4,0,0); -S5(4,0,0); -for (j=1;j<=4;j++) { - S2(4,j,0); - S5(4,j,0); -} -for (j=7;j<=11;j++) { - S8(4,j,0); -} -for (i=5;i<=6;i++) { - for (j=-4;j<=i-9;j++) { - S6(i,j,0); - } - for (j=i-9;j<=-1;j++) { - S7(i,j,0); - } - S3(i,0,0); - S7(i,0,0); - for (j=1;j<=i-4;j++) { - S4(i,j,-1); - } - for (j=i-4;j<=4;j++) { - S5(i,j,0); - } - for (j=7;j<=11;j++) { - S8(i,j,0); - } -} -for (j=-4;j<=-2;j++) { - S6(7,j,0); -} -for (j=-2;j<=-1;j++) { - S7(7,j,0); -} -S3(7,0,0); -S7(7,0,0); -for (j=1;j<=3;j++) { - S4(7,j,-1); -} -for (j=3;j<=4;j++) { - S5(7,j,0); -} -S9(7,4,0); -S10(7,4,0); -S11(7,4,0); -S21(7,4,0); -S23(7,4,0); -S11(7,4,1); -S16(7,4,1); -S17(7,4,1); -for (k=2;k<=4;k++) { - S11(7,4,k); -} -S12(7,5,0); -S21(7,5,0); -S22(7,5,0); -S23(7,5,0); -S12(7,5,1); -S16(7,5,1); -S17(7,5,1); -for (k=2;k<=4;k++) { - S12(7,5,k); -} -S21(7,6,0); -S22(7,6,0); -S23(7,6,0); -for (j=7;j<=8;j++) { - S8(7,j,0); - S21(7,j,0); - S22(7,j,0); - S23(7,j,0); -} -S8(7,9,0); -S22(7,9,0); -for (j=10;j<=11;j++) { - S8(7,j,0); -} -for (j=-4;j<=-1;j++) { - S6(8,j,0); -} -S7(8,-1,0); -S3(8,0,0); -S7(8,0,0); -S19(8,1,-2); -S4(8,1,-1); -S19(8,1,-1); -S19(8,1,0); -S15(8,1,4); -S18(8,1,4); -for (k=-4;k<=-3;k++) { - S14(8,2,k); - S20(8,2,k); -} -S14(8,2,-2); -S19(8,2,-2); -S20(8,2,-2); -S4(8,2,-1); -S14(8,2,-1); -S19(8,2,-1); -S20(8,2,-1); -S14(8,2,0); -S19(8,2,0); -S20(8,2,0); -S15(8,2,4); -S18(8,2,4); -for (k=-4;k<=-2;k++) { - S14(8,3,k); - S20(8,3,k); -} -S4(8,3,-1); -S14(8,3,-1); -S20(8,3,-1); -S14(8,3,0); -S20(8,3,0); -S15(8,3,4); -S18(8,3,4); -for (k=-4;k<=-2;k++) { - S14(8,4,k); - S20(8,4,k); -} -S4(8,4,-1); -S14(8,4,-1); -S20(8,4,-1); -S5(8,4,0); -S9(8,4,0); -S10(8,4,0); -S14(8,4,0); -S20(8,4,0); -S23(8,4,0); -S13(8,4,1); -S21(8,4,1); -S23(8,4,1); -S24(8,4,1); -S13(8,4,2); -S16(8,4,2); -S17(8,4,2); -S24(8,4,2); -S13(8,4,3); -S24(8,4,3); -S13(8,4,4); -S15(8,4,4); -S23(8,5,0); -S11(8,5,1); -S21(8,5,1); -S22(8,5,1); -S23(8,5,1); -S24(8,5,1); -S11(8,5,2); -S16(8,5,2); -S17(8,5,2); -S24(8,5,2); -S11(8,5,3); -S24(8,5,3); -S11(8,5,4); -S15(8,5,4); -S23(8,6,0); -S12(8,6,1); -S21(8,6,1); -S22(8,6,1); -S23(8,6,1); -S24(8,6,1); -S12(8,6,2); -S16(8,6,2); -S17(8,6,2); -S24(8,6,2); -S12(8,6,3); -S24(8,6,3); -S12(8,6,4); -for (j=7;j<=8;j++) { - S23(8,j,0); - S21(8,j,1); - S22(8,j,1); - S23(8,j,1); - for (k=1;k<=3;k++) { - S24(8,j,k); - } -} -S22(8,9,1); -S7(9,0,0); -for (j=1;j<=2;j++) { - for (k=-1;k<=0;k++) { - S19(9,j,k); - } - for (k=4;k<=5;k++) { - S15(9,j,k); - S18(9,j,k); - } -} -S20(9,3,-4); -for (k=-3;k<=-2;k++) { - S14(9,3,k); - S20(9,3,k); -} -for (k=-1;k<=0;k++) { - S14(9,3,k); - S19(9,3,k); - S20(9,3,k); -} -for (k=4;k<=5;k++) { - S15(9,3,k); - S18(9,3,k); -} -S20(9,4,-4); -for (k=-3;k<=-1;k++) { - S14(9,4,k); - S20(9,4,k); -} -S9(9,4,0); -S10(9,4,0); -S14(9,4,0); -S20(9,4,0); -for (k=0;k<=1;k++) { - S23(9,4,k); -} -S13(9,4,2); -S21(9,4,2); -S23(9,4,2); -S24(9,4,2); -S13(9,4,3); -S16(9,4,3); -S17(9,4,3); -S24(9,4,3); -S13(9,4,4); -for (k=4;k<=5;k++) { - S15(9,4,k); - S18(9,4,k); -} -for (k=0;k<=1;k++) { - S23(9,5,k); -} -S13(9,5,2); -S21(9,5,2); -S22(9,5,2); -S23(9,5,2); -S24(9,5,2); -S13(9,5,3); -S16(9,5,3); -S17(9,5,3); -S24(9,5,3); -S13(9,5,4); -for (k=4;k<=5;k++) { - S15(9,5,k); -} -for (k=0;k<=1;k++) { - S23(9,6,k); -} -S11(9,6,2); -S21(9,6,2); -S22(9,6,2); -S23(9,6,2); -S24(9,6,2); -S11(9,6,3); -S16(9,6,3); -S17(9,6,3); -S24(9,6,3); -S11(9,6,4); -for (k=0;k<=1;k++) { - S23(9,7,k); -} -S12(9,7,2); -S21(9,7,2); -S22(9,7,2); -S23(9,7,2); -S24(9,7,2); -S12(9,7,3); -S16(9,7,3); -S17(9,7,3); -S24(9,7,3); -S12(9,7,4); -for (k=0;k<=1;k++) { - S23(9,8,k); -} -S21(9,8,2); -S22(9,8,2); -S23(9,8,2); -for (k=2;k<=3;k++) { - S24(9,8,k); -} -S22(9,9,2); -for (j=1;j<=3;j++) { - S19(10,j,0); - S26(10,j,3); - S15(10,j,4); - S18(10,j,4); - S25(10,j,4); - for (k=5;k<=6;k++) { - S15(10,j,k); - S18(10,j,k); - } -} -for (k=-4;k<=-3;k++) { - S20(10,4,k); -} -for (k=-2;k<=-1;k++) { - S14(10,4,k); - S20(10,4,k); -} -S9(10,4,0); -S10(10,4,0); -S14(10,4,0); -S19(10,4,0); -S20(10,4,0); -S13(10,4,3); -S21(10,4,3); -S24(10,4,3); -S26(10,4,3); -S13(10,4,4); -S15(10,4,4); -S16(10,4,4); -S17(10,4,4); -S18(10,4,4); -S25(10,4,4); -for (k=5;k<=6;k++) { - S15(10,4,k); - S18(10,4,k); -} -S13(10,5,3); -S21(10,5,3); -S22(10,5,3); -S24(10,5,3); -S26(10,5,3); -S13(10,5,4); -S15(10,5,4); -S16(10,5,4); -S17(10,5,4); -S18(10,5,4); -S25(10,5,4); -for (k=5;k<=6;k++) { - S15(10,5,k); - S18(10,5,k); -} -S13(10,6,3); -S21(10,6,3); -S22(10,6,3); -S24(10,6,3); -S13(10,6,4); -S16(10,6,4); -S17(10,6,4); -S11(10,7,3); -S21(10,7,3); -S22(10,7,3); -S24(10,7,3); -S11(10,7,4); -S16(10,7,4); -S17(10,7,4); -S12(10,8,3); -S21(10,8,3); -S22(10,8,3); -S24(10,8,3); -S12(10,8,4); -S16(10,8,4); -S17(10,8,4); -S22(10,9,3); -for (i=11;i<=14;i++) { - for (j=1;j<=5;j++) { - S26(i,j,3); - S25(i,j,4); - } -} diff --git a/cloog-0.17.0/test/non_optimal/usvd_e_t.cloog b/cloog-0.17.0/test/non_optimal/usvd_e_t.cloog deleted file mode 100644 index a8d8510..0000000 --- a/cloog-0.17.0/test/non_optimal/usvd_e_t.cloog +++ /dev/null @@ -1,240 +0,0 @@ -# language: C -c - -# Context -0 2 - -0 # parameter names - -26 # Number of statements - -1 -4 5 -# i j k 1 - 0 0 1 0 0 - 0 0 0 1 0 - 1 1 0 0 0 - 1 -1 0 0 4 -0 0 0 -1 -5 5 -# i j k 1 - 0 0 0 1 0 - 1 1 0 0 0 - 1 -1 0 0 4 - 1 0 1 0 0 - 1 0 -1 0 4 -0 0 0 -1 -4 5 -# i j k 1 - 0 0 1 0 0 - 0 0 0 1 0 - 1 1 0 0 -4 - 1 -1 0 0 8 -0 0 0 -1 -4 5 -# i j k 1 - 0 0 0 1 1 - 1 -1 0 0 8 - 1 0 1 0 -1 - 1 1 -1 0 -4 -0 0 0 -1 -4 5 -# i j k 1 - 0 0 0 1 0 - 1 1 0 0 -4 - 1 0 -1 0 4 - 1 -1 1 0 4 -0 0 0 -1 -4 5 -# i j k 1 - 0 0 0 1 0 - 1 -1 0 0 8 - 1 0 1 0 4 - 1 1 -1 0 -9 -0 0 0 -1 -4 5 -# i j k 1 - 0 0 0 1 0 - 1 1 0 0 -5 - 1 0 -1 0 0 - 1 -1 1 0 9 -0 0 0 -1 -5 5 -# i j k 1 - 0 0 0 1 0 - 1 1 0 0 -3 - 1 -1 0 0 7 - 1 0 1 0 -7 - 1 0 -1 0 11 -0 0 0 -1 -4 5 -# i j k 1 - 0 0 1 0 -4 - 0 0 0 1 0 - 1 1 0 0 -7 - 1 -1 0 0 10 -0 0 0 -1 -4 5 -# i j k 1 - 0 0 1 0 -4 - 0 0 0 1 0 - 1 1 0 0 -7 - 1 -1 0 0 10 -0 0 0 -1 -5 5 -# i j k 1 - 0 1 -1 0 -3 - 1 0 -1 0 7 - 1 0 1 0 -4 - 1 0 0 -1 4 - 1 0 -1 1 4 -0 0 0 -1 -5 5 -# i j k 1 - 0 1 -1 0 -2 - 1 0 1 0 -5 - 1 0 -1 0 8 - 1 0 0 -1 4 - 1 0 -1 1 5 -0 0 0 -1 -5 5 -# i j k 1 - 1 -1 0 0 10 - 1 0 1 0 -4 - 1 0 0 -1 4 - 1 -1 0 1 7 - 1 1 -1 0 -4 -0 0 0 -1 -5 5 -# i j k 1 - 1 1 0 0 -8 - 1 0 -1 0 4 - 1 0 0 -1 0 - 1 -1 0 1 12 - 1 -1 1 0 6 -0 0 0 -1 -5 5 -# i j k 1 - 1 -1 0 0 10 - 1 0 1 0 -1 - 1 0 -1 0 5 - 1 0 0 1 -4 - 1 1 0 -1 -4 -0 0 0 -1 -5 5 -# i j k 1 - 0 1 0 -1 -6 - 1 0 0 -1 4 - 1 0 1 0 -4 - 1 0 0 1 -1 - 1 0 -1 1 4 -0 0 0 -1 -5 5 -# i j k 1 - 0 1 0 -1 -6 - 1 0 0 1 -1 - 1 0 1 0 -4 - 1 0 0 -1 4 - 1 0 -1 1 4 -0 0 0 -1 -5 5 -# i j k 1 - 1 -1 0 0 10 - 1 0 1 0 -1 - 1 0 0 1 -4 - 1 1 0 -1 -4 - 1 1 -1 0 -5 -0 0 0 -1 -5 5 -# i j k 1 - 1 1 0 0 -8 - 1 0 1 0 -1 - 1 0 0 -1 0 - 1 -1 0 1 10 - 1 1 -1 0 -6 -0 0 0 -1 -5 5 -# i j k 1 - 1 1 0 0 -8 - 1 0 -1 0 4 - 1 0 0 1 4 - 1 0 0 -1 0 - 1 -1 1 0 6 -0 0 0 -1 -5 5 -# i j k 1 - 0 1 0 -1 -7 - 1 0 0 -1 3 - 1 0 1 0 -4 - 1 0 -1 0 8 - 1 0 0 1 0 -0 0 0 -1 -5 5 -# i j k 1 - 0 1 0 -1 -7 - 1 0 0 1 0 - 1 0 1 0 -5 - 1 0 -1 0 9 - 1 0 0 -1 3 -0 0 0 -1 -5 5 -# i j k 1 - 1 -1 0 0 9 - 1 0 1 0 -4 - 1 0 -1 0 8 - 1 0 0 1 0 - 1 1 0 -1 -7 -0 0 0 -1 -5 5 -# i j k 1 - 1 1 0 0 -8 - 1 0 1 0 -4 - 1 0 -1 0 8 - 1 0 0 -1 3 - 1 -1 0 1 7 -0 0 0 -1 -5 5 -# i j k 1 - 0 0 0 1 -4 - 1 1 0 0 -10 - 1 -1 0 0 14 - 1 0 1 0 -1 - 1 0 -1 0 5 -0 0 0 -1 -5 5 -# i j k 1 - 0 0 0 1 -3 - 1 1 0 0 -10 - 1 -1 0 0 14 - 1 0 1 0 -1 - 1 0 -1 0 5 -0 0 0 -0 # iterator names -0 # scattering functions -0 # scattering dimension names - diff --git a/cloog-0.17.0/test/non_optimal/usvd_e_t.good.c b/cloog-0.17.0/test/non_optimal/usvd_e_t.good.c deleted file mode 100644 index f54c11c..0000000 --- a/cloog-0.17.0/test/non_optimal/usvd_e_t.good.c +++ /dev/null @@ -1,429 +0,0 @@ -/* Generated from ../../../git/cloog/test/./non_optimal/usvd_e_t.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.36s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } -#define S4(i,j,k) { hash(4); hash(i); hash(j); hash(k); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } -#define S6(i,j,k) { hash(6); hash(i); hash(j); hash(k); } -#define S7(i,j,k) { hash(7); hash(i); hash(j); hash(k); } -#define S8(i,j,k) { hash(8); hash(i); hash(j); hash(k); } -#define S9(i,j,k) { hash(9); hash(i); hash(j); hash(k); } -#define S10(i,j,k) { hash(10); hash(i); hash(j); hash(k); } -#define S11(i,j,k) { hash(11); hash(i); hash(j); hash(k); } -#define S12(i,j,k) { hash(12); hash(i); hash(j); hash(k); } -#define S13(i,j,k) { hash(13); hash(i); hash(j); hash(k); } -#define S14(i,j,k) { hash(14); hash(i); hash(j); hash(k); } -#define S15(i,j,k) { hash(15); hash(i); hash(j); hash(k); } -#define S16(i,j,k) { hash(16); hash(i); hash(j); hash(k); } -#define S17(i,j,k) { hash(17); hash(i); hash(j); hash(k); } -#define S18(i,j,k) { hash(18); hash(i); hash(j); hash(k); } -#define S19(i,j,k) { hash(19); hash(i); hash(j); hash(k); } -#define S20(i,j,k) { hash(20); hash(i); hash(j); hash(k); } -#define S21(i,j,k) { hash(21); hash(i); hash(j); hash(k); } -#define S22(i,j,k) { hash(22); hash(i); hash(j); hash(k); } -#define S23(i,j,k) { hash(23); hash(i); hash(j); hash(k); } -#define S24(i,j,k) { hash(24); hash(i); hash(j); hash(k); } -#define S25(i,j,k) { hash(25); hash(i); hash(j); hash(k); } -#define S26(i,j,k) { hash(26); hash(i); hash(j); hash(k); } - -void test() -{ - /* Original iterators. */ - int i, j, k; - for (i=0;i<=2;i++) { - S1(i,0,0) ; - S2(i,0,0) ; - for (j=1;j<=4;j++) { - S2(i,j,0) ; - } - } - S1(3,0,0) ; - S2(3,0,0) ; - for (j=1;j<=4;j++) { - S2(3,j,0) ; - } - for (j=7;j<=11;j++) { - S8(3,j,0) ; - } - S1(4,0,0) ; - S2(4,0,0) ; - S3(4,0,0) ; - S5(4,0,0) ; - for (j=1;j<=4;j++) { - S2(4,j,0) ; - S5(4,j,0) ; - } - for (j=7;j<=11;j++) { - S8(4,j,0) ; - } - S6(5,-4,0) ; - S7(5,-4,0) ; - for (j=-3;j<=-1;j++) { - S7(5,j,0) ; - } - S3(5,0,0) ; - S7(5,0,0) ; - S4(5,1,-1) ; - S5(5,1,0) ; - for (j=2;j<=4;j++) { - S5(5,j,0) ; - } - for (j=7;j<=11;j++) { - S8(5,j,0) ; - } - S6(6,-4,0) ; - S6(6,-3,0) ; - S7(6,-3,0) ; - for (j=-2;j<=-1;j++) { - S7(6,j,0) ; - } - S3(6,0,0) ; - S7(6,0,0) ; - S4(6,1,-1) ; - S4(6,2,-1) ; - S5(6,2,0) ; - for (j=3;j<=4;j++) { - S5(6,j,0) ; - } - for (j=7;j<=11;j++) { - S8(6,j,0) ; - } - for (j=-4;j<=-3;j++) { - S6(7,j,0) ; - } - S6(7,-2,0) ; - S7(7,-2,0) ; - S7(7,-1,0) ; - S3(7,0,0) ; - S7(7,0,0) ; - for (j=1;j<=2;j++) { - S4(7,j,-1) ; - } - S4(7,3,-1) ; - S5(7,3,0) ; - S5(7,4,0) ; - S9(7,4,0) ; - S10(7,4,0) ; - S11(7,4,0) ; - S21(7,4,0) ; - S23(7,4,0) ; - S11(7,4,1) ; - S16(7,4,1) ; - S17(7,4,1) ; - for (k=2;k<=4;k++) { - S11(7,4,k) ; - } - S12(7,5,0) ; - S21(7,5,0) ; - S22(7,5,0) ; - S23(7,5,0) ; - S12(7,5,1) ; - S16(7,5,1) ; - S17(7,5,1) ; - for (k=2;k<=4;k++) { - S12(7,5,k) ; - } - S21(7,6,0) ; - S22(7,6,0) ; - S23(7,6,0) ; - for (j=7;j<=8;j++) { - S8(7,j,0) ; - S21(7,j,0) ; - S22(7,j,0) ; - S23(7,j,0) ; - } - S8(7,9,0) ; - S22(7,9,0) ; - for (j=10;j<=11;j++) { - S8(7,j,0) ; - } - for (j=-4;j<=-2;j++) { - S6(8,j,0) ; - } - S6(8,-1,0) ; - S7(8,-1,0) ; - S3(8,0,0) ; - S7(8,0,0) ; - S19(8,1,-2) ; - S4(8,1,-1) ; - S19(8,1,-1) ; - S19(8,1,0) ; - S15(8,1,4) ; - S18(8,1,4) ; - for (k=-4;k<=-3;k++) { - S14(8,2,k) ; - S20(8,2,k) ; - } - S14(8,2,-2) ; - S19(8,2,-2) ; - S20(8,2,-2) ; - S4(8,2,-1) ; - S14(8,2,-1) ; - S19(8,2,-1) ; - S20(8,2,-1) ; - S14(8,2,0) ; - S19(8,2,0) ; - S20(8,2,0) ; - S15(8,2,4) ; - S18(8,2,4) ; - for (k=-4;k<=-2;k++) { - S14(8,3,k) ; - S20(8,3,k) ; - } - S4(8,3,-1) ; - S14(8,3,-1) ; - S20(8,3,-1) ; - S14(8,3,0) ; - S20(8,3,0) ; - S15(8,3,4) ; - S18(8,3,4) ; - for (k=-4;k<=-2;k++) { - S14(8,4,k) ; - S20(8,4,k) ; - } - S4(8,4,-1) ; - S14(8,4,-1) ; - S20(8,4,-1) ; - S5(8,4,0) ; - S9(8,4,0) ; - S10(8,4,0) ; - S14(8,4,0) ; - S20(8,4,0) ; - S23(8,4,0) ; - S13(8,4,1) ; - S21(8,4,1) ; - S23(8,4,1) ; - S24(8,4,1) ; - S13(8,4,2) ; - S16(8,4,2) ; - S17(8,4,2) ; - S24(8,4,2) ; - S13(8,4,3) ; - S24(8,4,3) ; - S13(8,4,4) ; - S15(8,4,4) ; - S23(8,5,0) ; - S11(8,5,1) ; - S21(8,5,1) ; - S22(8,5,1) ; - S23(8,5,1) ; - S24(8,5,1) ; - S11(8,5,2) ; - S16(8,5,2) ; - S17(8,5,2) ; - S24(8,5,2) ; - S11(8,5,3) ; - S24(8,5,3) ; - S11(8,5,4) ; - S15(8,5,4) ; - S23(8,6,0) ; - S12(8,6,1) ; - S21(8,6,1) ; - S22(8,6,1) ; - S23(8,6,1) ; - S24(8,6,1) ; - S12(8,6,2) ; - S16(8,6,2) ; - S17(8,6,2) ; - S24(8,6,2) ; - S12(8,6,3) ; - S24(8,6,3) ; - S12(8,6,4) ; - for (j=7;j<=8;j++) { - S23(8,j,0) ; - S21(8,j,1) ; - S22(8,j,1) ; - S23(8,j,1) ; - S24(8,j,1) ; - for (k=2;k<=3;k++) { - S24(8,j,k) ; - } - } - S22(8,9,1) ; - S7(9,0,0) ; - for (j=1;j<=2;j++) { - for (k=-1;k<=0;k++) { - S19(9,j,k) ; - } - for (k=4;k<=5;k++) { - S15(9,j,k) ; - S18(9,j,k) ; - } - } - S20(9,3,-4) ; - for (k=-3;k<=-2;k++) { - S14(9,3,k) ; - S20(9,3,k) ; - } - for (k=-1;k<=0;k++) { - S14(9,3,k) ; - S19(9,3,k) ; - S20(9,3,k) ; - } - for (k=4;k<=5;k++) { - S15(9,3,k) ; - S18(9,3,k) ; - } - S20(9,4,-4) ; - for (k=-3;k<=-1;k++) { - S14(9,4,k) ; - S20(9,4,k) ; - } - S9(9,4,0) ; - S10(9,4,0) ; - S14(9,4,0) ; - S20(9,4,0) ; - S23(9,4,0) ; - S23(9,4,1) ; - S13(9,4,2) ; - S21(9,4,2) ; - S23(9,4,2) ; - S24(9,4,2) ; - S13(9,4,3) ; - S16(9,4,3) ; - S17(9,4,3) ; - S24(9,4,3) ; - S13(9,4,4) ; - S15(9,4,4) ; - S18(9,4,4) ; - S15(9,4,5) ; - S18(9,4,5) ; - for (k=0;k<=1;k++) { - S23(9,5,k) ; - } - S13(9,5,2) ; - S21(9,5,2) ; - S22(9,5,2) ; - S23(9,5,2) ; - S24(9,5,2) ; - S13(9,5,3) ; - S16(9,5,3) ; - S17(9,5,3) ; - S24(9,5,3) ; - S13(9,5,4) ; - S15(9,5,4) ; - S15(9,5,5) ; - for (k=0;k<=1;k++) { - S23(9,6,k) ; - } - S11(9,6,2) ; - S21(9,6,2) ; - S22(9,6,2) ; - S23(9,6,2) ; - S24(9,6,2) ; - S11(9,6,3) ; - S16(9,6,3) ; - S17(9,6,3) ; - S24(9,6,3) ; - S11(9,6,4) ; - for (k=0;k<=1;k++) { - S23(9,7,k) ; - } - S12(9,7,2) ; - S21(9,7,2) ; - S22(9,7,2) ; - S23(9,7,2) ; - S24(9,7,2) ; - S12(9,7,3) ; - S16(9,7,3) ; - S17(9,7,3) ; - S24(9,7,3) ; - S12(9,7,4) ; - for (k=0;k<=1;k++) { - S23(9,8,k) ; - } - S21(9,8,2) ; - S22(9,8,2) ; - S23(9,8,2) ; - S24(9,8,2) ; - S24(9,8,3) ; - S22(9,9,2) ; - for (j=1;j<=3;j++) { - S19(10,j,0) ; - S26(10,j,3) ; - S15(10,j,4) ; - S18(10,j,4) ; - S25(10,j,4) ; - for (k=5;k<=6;k++) { - S15(10,j,k) ; - S18(10,j,k) ; - } - } - for (k=-4;k<=-3;k++) { - S20(10,4,k) ; - } - for (k=-2;k<=-1;k++) { - S14(10,4,k) ; - S20(10,4,k) ; - } - S9(10,4,0) ; - S10(10,4,0) ; - S14(10,4,0) ; - S19(10,4,0) ; - S20(10,4,0) ; - S13(10,4,3) ; - S21(10,4,3) ; - S24(10,4,3) ; - S26(10,4,3) ; - S13(10,4,4) ; - S15(10,4,4) ; - S16(10,4,4) ; - S17(10,4,4) ; - S18(10,4,4) ; - S25(10,4,4) ; - for (k=5;k<=6;k++) { - S15(10,4,k) ; - S18(10,4,k) ; - } - S13(10,5,3) ; - S21(10,5,3) ; - S22(10,5,3) ; - S24(10,5,3) ; - S26(10,5,3) ; - S13(10,5,4) ; - S15(10,5,4) ; - S16(10,5,4) ; - S17(10,5,4) ; - S18(10,5,4) ; - S25(10,5,4) ; - for (k=5;k<=6;k++) { - S15(10,5,k) ; - S18(10,5,k) ; - } - S13(10,6,3) ; - S21(10,6,3) ; - S22(10,6,3) ; - S24(10,6,3) ; - S13(10,6,4) ; - S16(10,6,4) ; - S17(10,6,4) ; - S11(10,7,3) ; - S21(10,7,3) ; - S22(10,7,3) ; - S24(10,7,3) ; - S11(10,7,4) ; - S16(10,7,4) ; - S17(10,7,4) ; - S12(10,8,3) ; - S21(10,8,3) ; - S22(10,8,3) ; - S24(10,8,3) ; - S12(10,8,4) ; - S16(10,8,4) ; - S17(10,8,4) ; - S22(10,9,3) ; - for (i=11;i<=14;i++) { - for (j=1;j<=5;j++) { - S26(i,j,3) ; - S25(i,j,4) ; - } - } -} diff --git a/cloog-0.17.0/test/non_optimal/youcef.c b/cloog-0.17.0/test/non_optimal/youcef.c deleted file mode 100644 index 386cea2..0000000 --- a/cloog-0.17.0/test/non_optimal/youcef.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/non_optimal/youcef.cloog by CLooG 0.14.0-238-gb1cb779 gmp bits in 0.00s. */ -for (i=0;i<=5;i++) { - S1(i,i); - for (j=i;j<=5;j++) { - S2(i,j); - } - S3(i,5); -} diff --git a/cloog-0.17.0/test/non_optimal/youcef.cloog b/cloog-0.17.0/test/non_optimal/youcef.cloog deleted file mode 100644 index 297bf79..0000000 --- a/cloog-0.17.0/test/non_optimal/youcef.cloog +++ /dev/null @@ -1,46 +0,0 @@ -# Optimal code is in fact : -# -# for (i=0;i<=M;i++) { -# S1 ; -# for (j=0;j<=N;j++) { -# S2 ; -# } -# S3 ; -# } - -# language: C -c - -# parameters {M, N | M>=1 N >=1} -0 2 -0 - -3 # Number of statements - -1 -# {i | 0<=i<=5 i==j} -3 4 -1 1 0 0 -1 -1 0 5 -0 1 -1 0 -0 0 0 - -1 -# {i | 0<=i<=5 i<=j<=5} -4 4 -1 1 0 0 -1 -1 0 5 -1 -1 1 0 -1 0 -1 5 -0 0 0 - -1 -# {i | 0<=i<=5 j==5} -3 4 -1 1 0 0 -1 -1 0 5 -0 0 1 -5 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/non_optimal/youcef.good.c b/cloog-0.17.0/test/non_optimal/youcef.good.c deleted file mode 100644 index 9fe1d31..0000000 --- a/cloog-0.17.0/test/non_optimal/youcef.good.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Generated from ../../../git/cloog/test/./non_optimal/youcef.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } - -void test() -{ - /* Original iterators. */ - int i, j; - for (i=0;i<=3;i++) { - S1(i,i) ; - S2(i,i) ; - for (j=i+1;j<=4;j++) { - S2(i,j) ; - } - S2(i,5) ; - S3(i,5) ; - } - S1(4,4) ; - S2(4,4) ; - S2(4,5) ; - S3(4,5) ; - S1(5,5) ; - S2(5,5) ; - S3(5,5) ; -} diff --git a/cloog-0.17.0/test/nul_basic1.c b/cloog-0.17.0/test/nul_basic1.c deleted file mode 100644 index d6b0cf0..0000000 --- a/cloog-0.17.0/test/nul_basic1.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/nul_basic1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -if (M >= 0) { - for (i=0;i<=M;i+=2) { - S1(i,i/2) ; - } -} diff --git a/cloog-0.17.0/test/nul_basic1.cloog b/cloog-0.17.0/test/nul_basic1.cloog deleted file mode 100644 index 878bd89..0000000 --- a/cloog-0.17.0/test/nul_basic1.cloog +++ /dev/null @@ -1,28 +0,0 @@ -# Optimal code is in fact : -# -# for (i=0;i<=M;i+=2) { -# S1 ; -# } - -# language: C -c - -# parameter n -1 3 -# n 1 -1 0 1 -0 - -1 # Number of statements - -1 -# {i, j | i=2*j; 0<=i<=n} -3 5 -# i j n 1 -0 1 -2 0 0 -1 1 0 0 0 -1 -1 0 1 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/nul_basic2.c b/cloog-0.17.0/test/nul_basic2.c deleted file mode 100644 index 6231f0e..0000000 --- a/cloog-0.17.0/test/nul_basic2.c +++ /dev/null @@ -1,7 +0,0 @@ -/* Generated from ../../../git/cloog/test/nul_basic2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (i=2;i<=n;i+=2) { - if (i%4 == 0) { - S2(i,i/4) ; - } - S1(i,i/2) ; -} diff --git a/cloog-0.17.0/test/nul_basic2.cloog b/cloog-0.17.0/test/nul_basic2.cloog deleted file mode 100644 index bf3c78c..0000000 --- a/cloog-0.17.0/test/nul_basic2.cloog +++ /dev/null @@ -1,54 +0,0 @@ -# Optimal code is in fact : -# -# for (i=0;i<=M;i+=2) { -# S1 ; -# } - -# language: C -c - -# parameter n -1 3 -# n 1 -1 1 -2 -1 -n - -2 # Number of statements - -1 -# {i, j | i=2*j; 1<=i<=n} -3 5 -# i j n 1 -0 1 -2 0 0 -1 1 0 0 -1 -1 -1 0 1 0 -0 0 0 - -1 -# {i, j | i=4*j; 1<=i<=n} -3 5 -# i j n 1 -0 1 -4 0 0 -1 1 0 0 -1 -1 -1 0 1 0 -0 0 0 -0 - -0 # Scattering functions -5 10 -# t1 t2 t3 t4 t5 i j n 1 -0 1 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 -1 0 0 0 -0 0 0 1 0 0 0 0 0 0 -0 0 0 0 1 0 0 -1 0 0 -0 0 0 0 0 1 0 0 0 0 - -5 10 -# t1 t2 t3 t4 t5 i j n 1 -0 1 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 -1 0 0 0 -0 0 0 1 0 0 0 0 0 0 -0 0 0 0 1 0 0 -1 0 0 -0 0 0 0 0 1 0 0 0 0 -0 diff --git a/cloog-0.17.0/test/nul_lcpc.c b/cloog-0.17.0/test/nul_lcpc.c deleted file mode 100644 index b9592f5..0000000 --- a/cloog-0.17.0/test/nul_lcpc.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Generated from ../../../git/cloog/test/nul_lcpc.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.03s. */ -for (i=1;i<=6;i+=2) { - for (j=1;j<=i;j++) { - S1(i,(i-1)/2,j) ; - S2(i,(i-1)/2,j) ; - } - for (j=i+1;j<=p;j++) { - S1(i,(i-1)/2,j) ; - } -} -for (i=7;i<=m;i+=2) { - for (j=1;j<=p;j++) { - S1(i,(i-1)/2,j) ; - } -} diff --git a/cloog-0.17.0/test/nul_lcpc.cloog b/cloog-0.17.0/test/nul_lcpc.cloog deleted file mode 100644 index 263e1ea..0000000 --- a/cloog-0.17.0/test/nul_lcpc.cloog +++ /dev/null @@ -1,39 +0,0 @@ -# language: C -c - -# parameter n -3 5 -# m n p 1 -1 1 -1 0 -1 -1 0 -1 1 -1 -0 0 1 0 -6 -1 -m n p - -2 # Number of statements - -1 -# {i, j, k | i=2*k+1; 1<=i<=m; 1<=j<=p} -5 8 -# i k j m n p 1 -0 1 -2 0 0 0 0 -1 # i=2*k+1 -1 1 0 0 0 0 0 -1 # 1<=i -1 -1 0 0 1 0 0 0 # i<=m -1 0 0 1 0 0 0 -1 # 1<=j -1 0 0 -1 0 0 1 0 # j<=p -0 0 0 - -1 -# {i, j, k | i=2*k+1; 1<=i<=n; 1<=j<=i} -5 8 -# i k j m n p 1 -0 1 -2 0 0 0 0 -1 # i=2*k+1 -1 1 0 0 0 0 0 -1 # 1<=i -1 -1 0 0 0 1 0 0 # i<=n -1 0 0 1 0 0 0 -1 # 1<=j -1 1 0 -1 0 0 0 0 # j<=i -0 0 0 -1 -i k j - -0 # Scattering functions diff --git a/cloog-0.17.0/test/openscop/empty.c b/cloog-0.17.0/test/openscop/empty.c deleted file mode 100644 index 8892d5f..0000000 --- a/cloog-0.17.0/test/openscop/empty.c +++ /dev/null @@ -1 +0,0 @@ -/* Generated from ./test/openscop/empty.scop by CLooG 0.14.0-416-g013422c gmp bits in 0.01s. */ diff --git a/cloog-0.17.0/test/openscop/empty.scop b/cloog-0.17.0/test/openscop/empty.scop deleted file mode 100644 index a7aba60..0000000 --- a/cloog-0.17.0/test/openscop/empty.scop +++ /dev/null @@ -1,35 +0,0 @@ - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 2 0 0 0 0 - -# Parameter names are not provided -0 - -# One statement -1 - -# =============================================== Statement 1 -# Number of relations describing the statement -0 - -# ---------------------------------------------- 1.1 Domain -# NULL Domain - -# ---------------------------------------------- 1.2 Scattering -# NULL Scattering - -# ---------------------------------------------- 1.3 Access -# NULL Access - -# ---------------------------------------------- 1.4 Body -# Statement body is not provided -0 - - - diff --git a/cloog-0.17.0/test/openscop/matmult.c b/cloog-0.17.0/test/openscop/matmult.c deleted file mode 100644 index 33f5b04..0000000 --- a/cloog-0.17.0/test/openscop/matmult.c +++ /dev/null @@ -1,9 +0,0 @@ -/* Generated from ./test/openscop/matmult.scop by CLooG 0.14.0-432-g5cf921d gmp bits in 0.01s. */ -for (c2=0;c2<=N-1;c2++) { - for (c4=0;c4<=N-1;c4++) { - C[c2][c4] = 0.0; - for (c6=0;c6<=N-1;c6++) { - C[c2][c4] = C[c2][c4] + A[c2][c6] * B[c6][c4]; - } - } -} diff --git a/cloog-0.17.0/test/openscop/matmult.scop b/cloog-0.17.0/test/openscop/matmult.scop deleted file mode 100644 index 4a248a6..0000000 --- a/cloog-0.17.0/test/openscop/matmult.scop +++ /dev/null @@ -1,140 +0,0 @@ -# [File generated by the OpenScop Library 0.8.0] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -1 3 0 0 0 1 -# e/i| N | 1 - 1 1 -1 ## N-1 >= 0 - -# Parameters are provided -1 - -N - - -# Number of statements -2 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -4 5 2 0 0 1 -# e/i| i j | N | 1 - 1 1 0 0 0 ## i >= 0 - 1 -1 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 ## j >= 0 - 1 0 -1 1 -1 ## -j+N-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -5 10 5 2 0 1 -# e/i| c1 c2 c3 c4 c5 | i j | N | 1 - 0 -1 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -3 8 3 2 0 1 -# e/i| A1 [1] [2]| i j | N | 1 - 0 -1 0 0 0 0 0 1 ## A1 - 0 0 -1 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 ## [2] == j - -# ---------------------------------------------- 1.4 Body -# Statement body is provided -1 - -# Number of original iterators -2 -# Original iterators -i j -# Body expression -C[i][j] = 0.0; - - - -# =============================================== Statement 2 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -6 6 3 0 0 1 -# e/i| i j k | N | 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 0 ## j >= 0 - 1 0 -1 0 1 -1 ## -j+N-1 >= 0 - 1 0 0 1 0 0 ## k >= 0 - 1 0 0 -1 1 -1 ## -k+N-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -7 13 7 3 0 1 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k | N | 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 2.3 Access -WRITE -3 9 3 3 0 1 -# e/i| A1 [1] [2]| i j k | N | 1 - 0 -1 0 0 0 0 0 0 1 ## A1 - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -READ -3 9 3 3 0 1 -# e/i| A1 [1] [2]| i j k | N | 1 - 0 -1 0 0 0 0 0 0 1 ## A1 - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -READ -3 9 3 3 0 1 -# e/i| A2 [1] [2]| i j k | N | 1 - 0 -1 0 0 0 0 0 0 2 ## A2 - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 ## [2] == k - -READ -3 9 3 3 0 1 -# e/i| A3 [1] [2]| i j k | N | 1 - 0 -1 0 0 0 0 0 0 3 ## A3 - 0 0 -1 0 0 0 1 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -# ---------------------------------------------- 2.4 Body -# Statement body is provided -1 - -# Number of original iterators -3 -# Original iterators -i j k -# Body expression -C[i][j] = C[i][j] + A[i][k] * B[k][j]; - - - -# =============================================== Extensions - - - diff --git a/cloog-0.17.0/test/openscop/union.c b/cloog-0.17.0/test/openscop/union.c deleted file mode 100644 index 09c2233..0000000 --- a/cloog-0.17.0/test/openscop/union.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from ./test/openscop/union.scop by CLooG 0.14.0-432-g5cf921d gmp bits in 0.01s. */ -if (N >= 1) { - for (c2=0;c2<=N-1;c2++) { - for (c4=0;c4<=min(10,N-1);c4++) { - C[c2+c4]+=A[c2]*B[c4]; - } - for (c4=20;c4<=N-1;c4++) { - C[c2+c4]+=A[c2]*B[c4]; - } - } -} diff --git a/cloog-0.17.0/test/openscop/union.scop b/cloog-0.17.0/test/openscop/union.scop deleted file mode 100644 index 35efe4f..0000000 --- a/cloog-0.17.0/test/openscop/union.scop +++ /dev/null @@ -1,106 +0,0 @@ -# [File generated by the OpenScop Library 0.8.0] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -1 3 0 0 0 1 -# e/i| N | 1 - 1 1 3 ## N+3 >= 0 - -# Parameters are provided -1 - -N - - -# Number of statements -1 - -# =============================================== Statement 1 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -# Union with 2 parts -2 -# Union part No.1 -5 5 2 0 0 1 -# e/i| i j | N | 1 - 1 1 0 0 0 ## i >= 0 - 1 -1 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 ## j >= 0 - 1 0 -1 1 -1 ## -j+N-1 >= 0 - 1 0 1 0 -20 ## j-20 >= 0 -# Union part No.2 -5 5 2 0 0 1 -# e/i| i j | N | 1 - 1 1 0 0 0 ## i >= 0 - 1 -1 0 1 -1 ## -i+N-1 >= 0 - 1 0 1 0 0 ## j >= 0 - 1 0 -1 1 -1 ## -j+N-1 >= 0 - 1 0 -1 0 10 ## -j+10 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -5 10 5 2 0 1 -# e/i| c1 c2 c3 c4 c5 | i j | N | 1 - 0 -1 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 1.3 Access -READ -2 7 2 2 0 1 -# e/i| A1 [1]| i j | N | 1 - 0 -1 0 0 0 0 1 ## A1 - 0 0 -1 1 1 0 0 ## [1] == i+j - -READ -2 7 2 2 0 1 -# e/i| A2 [1]| i j | N | 1 - 0 -1 0 0 0 0 2 ## A2 - 0 0 -1 1 0 0 0 ## [1] == i - -READ -2 7 2 2 0 1 -# e/i| A3 [1]| i j | N | 1 - 0 -1 0 0 0 0 3 ## A3 - 0 0 -1 0 1 0 0 ## [1] == j - -WRITE -2 7 2 2 0 1 -# e/i| A1 [1]| i j | N | 1 - 0 -1 0 0 0 0 1 ## A1 - 0 0 -1 1 1 0 0 ## [1] == i+j - -# ---------------------------------------------- 1.4 Body -# Statement body is provided -1 - -# Number of original iterators -2 -# Original iterators -i j -# Body expression -C[i+j]+=A[i]*B[j]; - - - -# =============================================== Extensions - -hello, world - -HELLO WORLD I SAID - - - - - diff --git a/cloog-0.17.0/test/orc.c b/cloog-0.17.0/test/orc.c deleted file mode 100644 index 7ed1547..0000000 --- a/cloog-0.17.0/test/orc.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Generated from ../../../git/cloog/test/orc.cloog by CLooG 0.16.2-5-g590827b gmp bits in 0.03s. */ -S1(0); -S2(0,0); -for (p2=1;p2<=22;p2++) { - if ((p2+1)%2 == 0) { - S3(0,(p2-1)/2); - } - if (p2%2 == 0) { - S2(0,p2/2); - } -} -S3(0,11); -for (p1=2;p1<=6;p1++) { - if ((p1+1)%3 == 0) { - S4((p1-2)/3); - } - if (p1%3 == 0) { - S1(p1/3); - } - if (p1 == 4) { - S2(1,0); - } - if (p1 == 4) { - for (p2=1;p2<=20;p2++) { - if ((p2+1)%2 == 0) { - S3(1,(p2-1)/2); - } - if (p2%2 == 0) { - S2(1,p2/2); - } - } - } - if (p1 == 4) { - S3(1,10); - } -} -S2(2,0); -for (p2=1;p2<=18;p2++) { - if ((p2+1)%2 == 0) { - S3(2,(p2-1)/2); - } - if (p2%2 == 0) { - S2(2,p2/2); - } -} -S3(2,9); -S4(2); -S5(0); -for (p2=0;p2<=9;p2++) { - S6(0,p2); -} -for (p1=2;p1<=42;p1++) { - if ((p1+1)%3 == 0) { - S7((p1-2)/3); - } - if (p1%3 == 0) { - S5(p1/3); - } - for (p2=0;p2<=9;p2++) { - if ((p1+2)%3 == 0) { - S6((p1-1)/3,p2); - } - } -} -for (p2=0;p2<=9;p2++) { - S6(14,p2); -} -S7(14); diff --git a/cloog-0.17.0/test/orc.cloog b/cloog-0.17.0/test/orc.cloog deleted file mode 100644 index 18c7cf2..0000000 --- a/cloog-0.17.0/test/orc.cloog +++ /dev/null @@ -1,133 +0,0 @@ - - -#-------------------CONTEXT------------------------ - c # language is c - # Context (no constarints on parameters) - 1 2 # 1 lines and 2 coloumns - # 1 - 1 0 - - 1 # We want to set manually the parameter names - -#---------------------STATEMENTS-------------------- - 7 #Number of Statements - - 1 #STMT 1 at line no. 12 has 1 domain - - # Domain 1 - 2 3 - # i 1 - 1 1 0 - 1 -1 2 -0 0 0 - 1 #STMT 2 at line no. 15 has 1 domain - - # Domain 1 - 4 4 - # i j 1 - 1 1 0 0 - 1 -1 0 2 - 1 0 1 0 - 1 -1 -1 11 -0 0 0 - 1 #STMT 3 at line no. 16 has 1 domain - - # Domain 1 - 4 4 - # i j 1 - 1 1 0 0 - 1 -1 0 2 - 1 0 1 0 - 1 -1 -1 11 -0 0 0 - 1 #STMT 4 at line no. 20 has 1 domain - - # Domain 1 - 2 3 - # i 1 - 1 1 0 - 1 -1 2 -0 0 0 - 1 #STMT 1 at line no. 32 has 1 domain - - # Domain 1 - 2 3 - # l 1 - 1 1 0 - 1 -1 14 -0 0 0 - 1 #STMT 2 at line no. 37 has 1 domain - - # Domain 1 - 4 4 - # l m 1 - 1 1 0 0 - 1 -1 0 14 - 1 0 1 0 - 1 0 -1 9 -0 0 0 - 1 #STMT 3 at line no. 41 has 1 domain - - # Domain 1 - 2 3 - # l 1 - 1 1 0 - 1 -1 14 -0 0 0 - 1 # Set Iterator Names - i j #Iterator Names - -#---------------------SCATTERING FUNCTIONS-------------------- - 7 #Scattering functions - -# Scattering Matrix for stmt at line no.12 - 3 6 - # p0 p1 p2 i 1 - 0 1 0 0 0 0 - 0 0 1 0 -3 0 - 0 0 0 1 0 0 - -# Scattering Matrix for stmt at line no.15 - 3 7 - # p0 p1 p2 i j 1 - 0 1 0 0 0 0 0 - 0 0 1 0 -3 0 -1 - 0 0 0 1 0 -2 0 - -# Scattering Matrix for stmt at line no.16 - 3 7 - # p0 p1 p2 i j 1 - 0 1 0 0 0 0 0 - 0 0 1 0 -3 0 -1 - 0 0 0 1 0 -2 -1 - -# Scattering Matrix for stmt at line no.20 - 3 6 - # p0 p1 p2 i 1 - 0 1 0 0 0 0 - 0 0 1 0 -3 -2 - 0 0 0 1 0 0 - -# Scattering Matrix for stmt at line no.32 - 3 6 - # p0 p1 p2 l 1 - 0 1 0 0 0 -2 - 0 0 1 0 -3 0 - 0 0 0 1 0 0 - -# Scattering Matrix for stmt at line no.37 - 3 7 - # p0 p1 p2 l m 1 - 0 1 0 0 0 0 -2 - 0 0 1 0 -3 0 -1 - 0 0 0 1 0 -1 0 - -# Scattering Matrix for stmt at line no.41 - 3 6 - # p0 p1 p2 l 1 - 0 1 0 0 0 -2 - 0 0 1 0 -3 -2 - 0 0 0 1 0 0 - - 1 # Set manually the scattering dimension names - p0 p1 p2 #Scattering dimension names diff --git a/cloog-0.17.0/test/orc.good.c b/cloog-0.17.0/test/orc.good.c deleted file mode 100644 index 2b2b7e7..0000000 --- a/cloog-0.17.0/test/orc.good.c +++ /dev/null @@ -1,110 +0,0 @@ -/* Generated from ../../../git/cloog/test/orc.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.06s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } -#define S4(i) { hash(4); hash(i); } -#define S5(i) { hash(5); hash(i); } -#define S6(i,j) { hash(6); hash(i); hash(j); } -#define S7(i) { hash(7); hash(i); } - -void test() -{ - /* Scattering iterators. */ - int p1, p2; - /* Original iterators. */ - int i, j; - S1(0) ; - S2(0,0) ; - for (p2=1;p2<=22;p2++) { - if ((p2+1)%2 == 0) { - j = (p2-1)/2 ; - S3(0,(p2-1)/2) ; - } - if (p2%2 == 0) { - S2(0,p2/2) ; - } - } - S3(0,11) ; - for (p1=2;p1<=6;p1++) { - if ((p1+1)%3 == 0) { - i = (p1-2)/3 ; - S4((p1-2)/3) ; - } - if ((p1+2)%3 == 0) { - i = (p1-1)/3 ; - S2((p1-1)/3,0) ; - } - if (p1%3 == 0) { - S1(p1/3) ; - } - for (p2=1;p2<=floord(-2*p1+68,3);p2++) { - if ((p1+2)%3 == 0) { - i = (p1-1)/3 ; - if ((p2+1)%2 == 0) { - j = (p2-1)/2 ; - S3((p1-1)/3,(p2-1)/2) ; - } - if (p2%2 == 0) { - S2((p1-1)/3,p2/2) ; - } - } - } - p2 = floord(-2*p1+71,3) ; - if ((p1+2)%3 == 0) { - i = (p1-1)/3 ; - if ((p2+1)%2 == 0) { - j = (p2-1)/2 ; - S3((p1-1)/3,(p2-1)/2) ; - } - } - } - S2(2,0) ; - for (p2=1;p2<=18;p2++) { - if ((p2+1)%2 == 0) { - j = (p2-1)/2 ; - S3(2,(p2-1)/2) ; - } - if (p2%2 == 0) { - S2(2,p2/2) ; - } - } - S3(2,9) ; - S4(2) ; - S5(0) ; - S6(0,0) ; - for (p2=1;p2<=9;p2++) { - S6(0,p2) ; - } - for (p1=2;p1<=42;p1++) { - if ((p1+1)%3 == 0) { - i = (p1-2)/3 ; - S7((p1-2)/3) ; - } - if ((p1+2)%3 == 0) { - i = (p1-1)/3 ; - S6((p1-1)/3,0) ; - } - if (p1%3 == 0) { - S5(p1/3) ; - } - for (p2=1;p2<=9;p2++) { - if ((p1+2)%3 == 0) { - i = (p1-1)/3 ; - S6((p1-1)/3,p2) ; - } - } - } - S6(14,0) ; - for (p2=1;p2<=9;p2++) { - S6(14,p2) ; - } - S7(14) ; -} diff --git a/cloog-0.17.0/test/otl.c b/cloog-0.17.0/test/otl.c deleted file mode 100644 index 93bd830..0000000 --- a/cloog-0.17.0/test/otl.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Generated from ../../../git/cloog/test/otl.cloog by CLooG 0.14.0-278-gcf1f323 gmp bits in 0.26s. */ -if ((M >= 3) && (N >= 4)) { - for (outerTimeTileScatter=1;outerTimeTileScatter<=floord(2*M+2*N-7,5);outerTimeTileScatter++) { - for (outerProcTileScatter1=max(ceild(outerTimeTileScatter,2),ceild(5*outerTimeTileScatter-M-2,5));outerProcTileScatter1<=min(min(floord(M+2*N-5,5),floord(5*outerTimeTileScatter+2*N+1,10)),outerTimeTileScatter);outerProcTileScatter1++) { - for (outerProcTileScatter2=max(max(max(max(ceild(outerTimeTileScatter-outerProcTileScatter1-1,2),ceild(5*outerProcTileScatter1-N-1,5)),ceild(5*outerTimeTileScatter-M-N+1,5)),ceild(5*outerTimeTileScatter-N-2,10)),outerTimeTileScatter-outerProcTileScatter1-1);outerProcTileScatter2<=min(min(min(floord(M+N-2,5),floord(5*outerTimeTileScatter-5*outerProcTileScatter1+N+4,5)),floord(5*outerTimeTileScatter+N+3,10)),outerProcTileScatter1);outerProcTileScatter2++) { - for (innerTimeTileScatter=max(max(max(ceild(10*outerProcTileScatter1-2*N,5),ceild(10*outerProcTileScatter2-N-2,5)),ceild(5*outerProcTileScatter1+5*outerProcTileScatter2-N-3,5)),outerTimeTileScatter);innerTimeTileScatter<=min(min(min(min(min(floord(2*M+2*N-6,5),floord(5*outerProcTileScatter1+M+3,5)),floord(5*outerProcTileScatter2+M+N,5)),floord(10*outerProcTileScatter2+N+3,5)),outerTimeTileScatter+1),outerProcTileScatter1+outerProcTileScatter2+1);innerTimeTileScatter++) { - for (innerProcTileScatter1=max(max(max(max(ceild(innerTimeTileScatter,2),ceild(5*innerTimeTileScatter-M-2,5)),ceild(5*outerTimeTileScatter-M-1,5)),outerProcTileScatter1),outerTimeTileScatter-outerProcTileScatter2);innerProcTileScatter1<=min(min(min(min(min(min(min(floord(M+2*N-4,5),floord(5*outerProcTileScatter2+N+2,5)),floord(-5*outerProcTileScatter2+5*innerTimeTileScatter+N+4,5)),floord(5*outerTimeTileScatter-5*outerProcTileScatter2+N+5,5)),floord(5*innerTimeTileScatter+2*N+2,10)),floord(5*outerTimeTileScatter+2*N+3,10)),outerTimeTileScatter),outerProcTileScatter1+1);innerProcTileScatter1++) { - for (innerProcTileScatter2=outerProcTileScatter2;innerProcTileScatter2<=outerProcTileScatter2;innerProcTileScatter2++) { - for (outerTimeTileIter=outerTimeTileScatter;outerTimeTileIter<=outerTimeTileScatter;outerTimeTileIter++) { - for (outerProcTileIter1=outerProcTileScatter1;outerProcTileIter1<=outerProcTileScatter1;outerProcTileIter1++) { - for (outerProcTileIter2=outerProcTileScatter2;outerProcTileIter2<=outerProcTileScatter2;outerProcTileIter2++) { - for (innerTimeTileIter=innerTimeTileScatter;innerTimeTileIter<=innerTimeTileScatter;innerTimeTileIter++) { - for (innerProcTileIter1=innerProcTileScatter1;innerProcTileIter1<=innerProcTileScatter1;innerProcTileIter1++) { - for (innerProcTileIter2=outerProcTileScatter2;innerProcTileIter2<=outerProcTileScatter2;innerProcTileIter2++) { - S1(outerTimeTileIter,outerProcTileIter1,outerProcTileIter2,innerTimeTileIter,innerProcTileIter1,innerProcTileIter2); - } - } - } - } - } - } - } - } - } - } - } - } -} diff --git a/cloog-0.17.0/test/otl.cloog b/cloog-0.17.0/test/otl.cloog deleted file mode 100644 index 5f9b783..0000000 --- a/cloog-0.17.0/test/otl.cloog +++ /dev/null @@ -1,117 +0,0 @@ -# created: Tue Mar 23 01:51:15 CET 2010 -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context -2 4 - 1 1 0 -1 - 1 0 1 -1 - - -1 # set parameter names -M N - -# --------------------- STATEMENTS -------------------- -1 - -1 # domains per statement -76 10 - 1 -5 0 0 0 0 0 2 2 -7 - 1 -20 0 0 0 20 20 0 0 16 - 1 -40 0 0 0 0 80 0 8 16 - 1 -4 4 0 0 0 4 0 0 4 - 1 -20 0 0 0 40 0 0 0 8 - 1 -20 0 20 0 20 0 0 0 16 - 1 -20 0 40 0 0 0 0 4 8 - 1 -20 40 0 0 0 0 0 0 16 - 1 -4 4 4 0 0 0 0 0 4 - 1 -20 0 0 0 0 20 4 4 -4 - 1 -10 0 0 0 10 0 2 0 2 - 1 -5 0 0 5 0 0 0 0 3 - 1 -5 5 0 0 0 0 1 0 2 - 1 -10 0 10 0 0 0 2 2 -2 - 1 0 -10 -10 10 0 0 0 2 6 - 1 20 -20 -20 0 0 0 0 4 16 - 1 0 -10 0 10 0 -10 0 2 6 - 1 40 -40 0 0 0 -40 0 8 32 - 1 0 -20 0 10 0 0 0 4 0 - 1 0 -10 0 0 0 0 2 4 -10 - 1 40 -80 0 0 0 0 0 16 8 - 1 0 -10 0 0 0 10 0 2 2 - 1 0 -5 0 0 5 0 0 0 3 - 1 0 -10 0 10 0 0 0 0 4 - 1 0 -5 5 0 0 0 0 1 1 - 1 20 -20 0 0 0 0 0 0 12 - 1 0 0 -10 10 -10 0 0 2 8 - 1 40 0 -40 0 -40 0 0 8 40 - 1 0 0 -20 10 0 0 0 2 4 - 1 0 0 -5 0 0 0 1 1 -2 - 1 40 0 -80 0 0 0 0 8 24 - 1 0 0 -5 0 0 5 0 0 4 - 1 0 0 -10 0 10 0 0 0 4 - 1 0 0 -10 10 0 0 0 0 2 - 1 0 5 -5 0 0 0 0 0 3 - 1 40 0 -40 0 0 0 0 0 16 - 1 0 0 0 -5 0 0 2 2 -6 - 1 0 0 0 -20 20 20 0 0 20 - 1 0 0 0 -40 0 80 0 8 24 - 1 0 20 0 -20 0 20 0 0 24 - 1 0 0 20 -20 20 0 0 0 20 - 1 0 0 0 -20 40 0 0 0 12 - 1 0 0 40 -20 0 0 0 4 12 - 1 0 40 0 -20 0 0 0 0 20 - 1 0 20 20 -20 0 0 0 0 24 - 1 0 0 0 -40 0 40 8 8 0 - 1 0 0 0 -20 20 0 4 0 8 - 1 0 0 20 -20 0 0 4 4 0 - 1 2 0 0 -2 0 0 0 0 2 - 1 0 10 0 -10 0 0 2 0 6 - 1 0 0 0 10 -10 -10 0 2 8 - 1 80 0 0 0 -80 -80 0 16 80 - 1 0 0 0 10 -20 0 0 4 4 - 1 0 0 0 0 -10 0 2 4 -8 - 1 120 0 0 0 -240 0 0 48 72 - 1 0 0 0 0 -20 20 0 4 8 - 1 0 0 0 10 -10 0 0 0 6 - 1 0 0 10 0 -10 0 0 2 4 - 1 0 1 0 0 -1 0 0 0 1 - 1 40 0 0 0 -40 0 0 0 32 - 1 0 0 0 10 0 -20 0 2 4 - 1 0 0 0 0 0 -5 1 1 -2 - 1 80 0 0 0 0 -160 0 16 48 - 1 0 0 0 0 10 -10 0 0 4 - 1 0 0 0 10 0 -10 0 0 2 - 1 0 0 5 0 0 -5 0 0 4 - 1 0 10 0 0 0 -10 0 0 6 - 1 40 0 0 0 0 -40 0 0 16 - 1 0 0 0 0 0 4 0 0 0 - 1 0 0 0 0 20 0 0 0 -8 - 1 0 0 0 20 0 0 0 0 -12 - 1 0 0 4 0 0 0 0 0 0 - 1 0 20 0 0 0 0 0 0 -4 - 1 80 0 0 0 0 0 0 0 -32 - 1 0 0 0 0 0 0 0 1 -4 - 1 0 0 0 0 0 0 1 0 -3 - - -0 0 0 # for future options... - - - -1 # set the iterator names -outerTimeTileIter outerProcTileIter1 outerProcTileIter2 innerTimeTileIter innerProcTileIter1 innerProcTileIter2 - -# --------------------- SCATTERING -------------------- -1 # Scattering functions -6 16 - 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 - - -1 # we set the scattering dimension names -outerTimeTileScatter outerProcTileScatter1 outerProcTileScatter2 innerTimeTileScatter innerProcTileScatter1 innerProcTileScatter2 - diff --git a/cloog-0.17.0/test/otl.good.c b/cloog-0.17.0/test/otl.good.c deleted file mode 100644 index 3004d8e..0000000 --- a/cloog-0.17.0/test/otl.good.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Generated from ../../../git/cloog/test/otl.cloog by CLooG 0.14.0-273-gfe7416f gmp bits in 0.24s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(outerTimeTileIter,outerProcTileIter1,outerProcTileIter2,innerTimeTileIter,innerProcTileIter1,innerProcTileIter2) { hash(1); hash(outerTimeTileIter); hash(outerProcTileIter1); hash(outerProcTileIter2); hash(innerTimeTileIter); hash(innerProcTileIter1); hash(innerProcTileIter2); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int outerTimeTileScatter, outerProcTileScatter1, outerProcTileScatter2, innerTimeTileScatter, innerProcTileScatter1, innerProcTileScatter2; - /* Original iterators. */ - int outerTimeTileIter, outerProcTileIter1, outerProcTileIter2, innerTimeTileIter, innerProcTileIter1, innerProcTileIter2; - if ((M >= 3) && (N >= 4)) { - for (outerTimeTileScatter=1;outerTimeTileScatter<=floord(2*M+2*N-7,5);outerTimeTileScatter++) { - for (outerProcTileScatter1=max(ceild(outerTimeTileScatter,2),ceild(5*outerTimeTileScatter-M-2,5));outerProcTileScatter1<=min(min(floord(M+2*N-5,5),floord(5*outerTimeTileScatter+2*N+1,10)),outerTimeTileScatter);outerProcTileScatter1++) { - for (outerProcTileScatter2=max(max(max(max(max(ceild(outerTimeTileScatter-outerProcTileScatter1-1,2),ceild(5*outerProcTileScatter1-N-1,5)),ceild(5*outerTimeTileScatter-M-N+1,5)),ceild(5*outerTimeTileScatter-N-2,10)),ceild(5*outerTimeTileScatter-N-3,15)),outerTimeTileScatter-outerProcTileScatter1-1);outerProcTileScatter2<=min(min(min(floord(M+N-2,5),floord(5*outerTimeTileScatter-5*outerProcTileScatter1+N+4,5)),floord(5*outerTimeTileScatter+N+3,10)),outerProcTileScatter1);outerProcTileScatter2++) { - for (innerTimeTileScatter=max(max(max(ceild(10*outerProcTileScatter1-2*N,5),ceild(10*outerProcTileScatter2-N-2,5)),ceild(5*outerProcTileScatter1+5*outerProcTileScatter2-N-3,5)),outerTimeTileScatter);innerTimeTileScatter<=min(min(min(min(min(floord(2*M+2*N-6,5),floord(5*outerProcTileScatter1+M+3,5)),floord(5*outerProcTileScatter2+M+N,5)),floord(10*outerProcTileScatter2+N+3,5)),outerTimeTileScatter+1),outerProcTileScatter1+outerProcTileScatter2+1);innerTimeTileScatter++) { - for (innerProcTileScatter1=max(max(max(max(ceild(innerTimeTileScatter,2),ceild(5*innerTimeTileScatter-M-2,5)),ceild(5*outerTimeTileScatter-M-1,5)),outerProcTileScatter1),outerTimeTileScatter-outerProcTileScatter2);innerProcTileScatter1<=min(min(min(min(min(min(min(floord(M+2*N-4,5),floord(5*outerProcTileScatter2+N+2,5)),floord(-5*outerProcTileScatter2+5*innerTimeTileScatter+N+4,5)),floord(5*outerTimeTileScatter-5*outerProcTileScatter2+N+5,5)),floord(5*innerTimeTileScatter+2*N+2,10)),floord(5*outerTimeTileScatter+2*N+3,10)),outerTimeTileScatter),outerProcTileScatter1+1);innerProcTileScatter1++) { - for (innerProcTileScatter2=outerProcTileScatter2;innerProcTileScatter2<=outerProcTileScatter2;innerProcTileScatter2++) { - for (outerTimeTileIter=outerTimeTileScatter;outerTimeTileIter<=outerTimeTileScatter;outerTimeTileIter++) { - for (outerProcTileIter1=outerProcTileScatter1;outerProcTileIter1<=outerProcTileScatter1;outerProcTileIter1++) { - for (outerProcTileIter2=outerProcTileScatter2;outerProcTileIter2<=outerProcTileScatter2;outerProcTileIter2++) { - for (innerTimeTileIter=innerTimeTileScatter;innerTimeTileIter<=innerTimeTileScatter;innerTimeTileIter++) { - for (innerProcTileIter1=innerProcTileScatter1;innerProcTileIter1<=innerProcTileScatter1;innerProcTileIter1++) { - for (innerProcTileIter2=outerProcTileScatter2;innerProcTileIter2<=outerProcTileScatter2;innerProcTileIter2++) { - S1(outerTimeTileIter,outerProcTileIter1,outerProcTileIter2,innerTimeTileIter,innerProcTileIter1,innerProcTileIter2); - } - } - } - } - } - } - } - } - } - } - } - } - } -} diff --git a/cloog-0.17.0/test/param-split.c b/cloog-0.17.0/test/param-split.c deleted file mode 100644 index 97c75b1..0000000 --- a/cloog-0.17.0/test/param-split.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/param-split.cloog by CLooG 0.14.0-277-gce2ba57 gmp bits in 0.00s. */ -for (i=0;i<=M;i++) { - S1(i); - if (i == 0) { - S2(i); - } -} -if (M <= -1) { - S2(0); -} diff --git a/cloog-0.17.0/test/param-split.cloog b/cloog-0.17.0/test/param-split.cloog deleted file mode 100644 index 6f9e58f..0000000 --- a/cloog-0.17.0/test/param-split.cloog +++ /dev/null @@ -1,24 +0,0 @@ -c - -0 3 - -0 - -2 - -1 -2 4 -1 1 0 0 -1 -1 1 0 - -0 0 0 - -1 -1 4 -0 1 0 0 - -0 0 0 - -0 - -0 diff --git a/cloog-0.17.0/test/param-split.good.c b/cloog-0.17.0/test/param-split.good.c deleted file mode 100644 index 25b3bc6..0000000 --- a/cloog-0.17.0/test/param-split.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/param-split.cloog by CLooG 0.14.0-277-gce2ba57 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } - -void test(int M) -{ - /* Original iterators. */ - int i; - if (M >= 0) { - S1(0); - S2(0); - } - for (i=1;i<=M;i++) { - S1(i); - } - if (M <= -1) { - S2(0); - } -} diff --git a/cloog-0.17.0/test/pouchet.c b/cloog-0.17.0/test/pouchet.c deleted file mode 100644 index 3eb887f..0000000 --- a/cloog-0.17.0/test/pouchet.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Generated from ../../../git/cloog/test/pouchet.cloog by CLooG 0.16.2-3-gc1aebd7 gmp bits in 0.03s. */ -if (Ny >= 2) { - for (c0=1;c0<=floord(Ny+4,2);c0++) { - for (c1=max(ceild(c0+1,2),c0-1);c1<=min(floord(2*c0+Ny,4),c0);c1++) { - if (c0 >= ceild(4*c1-Ny+1,2)) { - for (c2=1;c2<=2;c2++) { - S1(c0-c1,c1,2*c0-2*c1,-2*c0+4*c1,c2); - S2(c0-c1,c1,2*c0-2*c1,-2*c0+4*c1-1,c2); - } - } - if (2*c0 == 4*c1-Ny) { - for (c2=1;c2<=2;c2++) { - if (Ny%2 == 0) { - if ((2*c0+3*Ny)%4 == 0) { - S2((2*c0-Ny)/4,(2*c0+Ny)/4,(2*c0-Ny)/2,Ny-1,c2); - } - } - } - } - } - } -} diff --git a/cloog-0.17.0/test/pouchet.cloog b/cloog-0.17.0/test/pouchet.cloog deleted file mode 100644 index bef7293..0000000 --- a/cloog-0.17.0/test/pouchet.cloog +++ /dev/null @@ -1,76 +0,0 @@ -# CLooG -> CLooG -# This is an automatic dump of a CLooG input file from a CloogInput data -# structure. - -# Language: C -c - -# Context: -1 - -0 3 0 0 0 1 - -1 # Parameter name(s) -Ny - -# Statement number: -2 - -# Iteration domain of statement 2 ((null)). -1 - -8 8 5 0 0 1 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 0 2 -1 0 0 0 1 0 0 -1 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 1 0 -1 -1 0 0 0 0 -1 0 2 -0 -2 0 1 0 0 0 0 -0 0 -2 1 1 0 0 0 - -0 0 0 # For future options. - -# Iteration domain of statement 4 ((null)). -1 - -8 8 5 0 0 1 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 0 2 -1 0 0 0 1 0 0 -1 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 1 0 -1 -1 0 0 0 0 -1 0 2 -0 -2 0 1 0 0 0 0 -0 0 -2 1 1 0 0 1 - -0 0 0 # For future options. - -0 # Iterator name(s) -# --------------------- SCATTERING -------------------- -2 # Scattering functions - -# Scattering of statement 2 ((null)). -1 - -6 14 6 5 0 1 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 -0 0 0 0 0 1 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 1 0 0 0 0 0 -1 -1 0 0 0 0 0 - -# Scattering of statement 4 ((null)). -1 - -6 14 6 5 0 1 -0 0 0 0 0 0 1 0 0 0 0 -1 0 -1 -0 0 0 0 0 1 0 0 0 0 -1 0 0 -1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 1 0 0 0 0 0 -1 -1 0 0 0 0 0 - -1 # Scattering dimension name(s) -c0 c1 c2 c3 c4 c5 diff --git a/cloog-0.17.0/test/pouchet.good.c b/cloog-0.17.0/test/pouchet.good.c deleted file mode 100644 index 43009f5..0000000 --- a/cloog-0.17.0/test/pouchet.good.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Generated from ../../../git/cloog/test/pouchet.cloog by CLooG 0.16.2-3-gc1aebd7 gmp bits in 0.04s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k,l,m) { hash(1); hash(i); hash(j); hash(k); hash(l); hash(m); } -#define S2(i,j,k,l,m) { hash(2); hash(i); hash(j); hash(k); hash(l); hash(m); } - -void test(int Ny) -{ - /* Scattering iterators. */ - int c0, c1, c2, c3, c4, c5; - /* Original iterators. */ - int i, j, k, l, m; - if (Ny >= 2) { - for (c0=1;c0<=floord(Ny+4,2);c0++) { - for (c1=max(ceild(c0+1,2),c0-1);c1<=min(floord(2*c0+Ny,4),c0);c1++) { - if (c0 >= ceild(4*c1-Ny+1,2)) { - for (c2=1;c2<=2;c2++) { - S1(c0-c1,c1,2*c0-2*c1,-2*c0+4*c1,c2); - S2(c0-c1,c1,2*c0-2*c1,-2*c0+4*c1-1,c2); - } - } - if (2*c0 == 4*c1-Ny) { - for (c2=1;c2<=2;c2++) { - if (Ny%2 == 0) { - if ((2*c0+3*Ny)%4 == 0) { - S2((2*c0-Ny)/4,(2*c0+Ny)/4,(2*c0-Ny)/2,Ny-1,c2); - } - } - } - } - } - } - } -} diff --git a/cloog-0.17.0/test/rectangle.c b/cloog-0.17.0/test/rectangle.c deleted file mode 100644 index dba226a..0000000 --- a/cloog-0.17.0/test/rectangle.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/rectangle.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (c1=0;c1<=2*n;c1++) { - for (i=max(0,c1-n);i<=min(c1,n);i++) { - S1(i,c1-i) ; - } -} diff --git a/cloog-0.17.0/test/rectangle.cloog b/cloog-0.17.0/test/rectangle.cloog deleted file mode 100644 index 9f639ab..0000000 --- a/cloog-0.17.0/test/rectangle.cloog +++ /dev/null @@ -1,29 +0,0 @@ -# language: C -c - -# parameter {n | n>= 0} -1 3 -# n 1 -1 1 0 -1 -n - -1 # Number of statements: - -1 -# {ii, i | 0<=i<=n 0<=j<=n} -4 5 -# i j n 1 -1 1 0 0 0 -1 -1 0 1 0 -1 0 1 0 0 -1 0 -1 1 0 -0 0 0 -0 - -1 # Scattering functions - -1 6 -# c1 j i n 1 -0 1 -1 -1 0 0 -0 diff --git a/cloog-0.17.0/test/rectangle.good.c b/cloog-0.17.0/test/rectangle.good.c deleted file mode 100644 index b977e28..0000000 --- a/cloog-0.17.0/test/rectangle.good.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Generated from ../../../git/cloog/test/rectangle.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int n) -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i, j; - for (c1=0;c1<=2*n;c1++) { - for (i=max(c1-n,0);i<=min(c1,n);i++) { - j = c1-i ; - S1(i,c1-i) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/QR.c b/cloog-0.17.0/test/reservoir/QR.c deleted file mode 100644 index 5a8c26f..0000000 --- a/cloog-0.17.0/test/reservoir/QR.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/QR.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.21s. */ -if (N >= 1) { - S1(0) ; - if ((M >= 1) && (N == 1)) { - for (c4=0;c4<=M-1;c4++) { - S2(0,c4) ; - } - S3(0) ; - for (c4=0;c4<=M-1;c4++) { - S4(0,c4) ; - } - S10(0) ; - S5(0) ; - } - if ((M <= 0) && (N == 1)) { - S3(0) ; - S10(0) ; - S5(0) ; - } - if ((M >= 1) && (N >= 2)) { - for (c4=0;c4<=M-1;c4++) { - S2(0,c4) ; - } - S3(0) ; - for (c4=0;c4<=M-1;c4++) { - S4(0,c4) ; - } - S10(0) ; - S1(1) ; - S5(0) ; - } - if ((M <= 0) && (N >= 2)) { - S3(0) ; - S10(0) ; - S1(1) ; - S5(0) ; - } - for (c2=2;c2<=min(M,N-1);c2++) { - for (c4=c2-1;c4<=N-1;c4++) { - S6(c2-2,c4) ; - for (c6=c2-2;c6<=M-1;c6++) { - S7(c2-2,c4,c6) ; - } - S8(c2-2,c4) ; - for (c6=c2-2;c6<=M-1;c6++) { - S9(c2-2,c4,c6) ; - } - } - for (c4=c2-1;c4<=M-1;c4++) { - S2(c2-1,c4) ; - } - S3(c2-1) ; - for (c4=c2-1;c4<=M-1;c4++) { - S4(c2-1,c4) ; - } - S10(c2-1) ; - S1(c2) ; - S5(c2-1) ; - } - if ((M >= 1) && (M <= N-2)) { - for (c4=M;c4<=N-1;c4++) { - S6(M-1,c4) ; - S7(M-1,c4,M-1) ; - S8(M-1,c4) ; - S9(M-1,c4,M-1) ; - } - S3(M) ; - S10(M) ; - S1(M+1) ; - S5(M) ; - } - for (c2=max(2,M+2);c2<=N-1;c2++) { - for (c4=c2-1;c4<=N-1;c4++) { - S6(c2-2,c4) ; - S8(c2-2,c4) ; - } - S3(c2-1) ; - S10(c2-1) ; - S1(c2) ; - S5(c2-1) ; - } - if ((M >= N) && (N >= 2)) { - S6(N-2,N-1) ; - for (c6=N-2;c6<=M-1;c6++) { - S7(N-2,N-1,c6) ; - } - S8(N-2,N-1) ; - for (c6=N-2;c6<=M-1;c6++) { - S9(N-2,N-1,c6) ; - } - for (c4=N-1;c4<=M-1;c4++) { - S2(N-1,c4) ; - } - S3(N-1) ; - for (c4=N-1;c4<=M-1;c4++) { - S4(N-1,c4) ; - } - S10(N-1) ; - S5(N-1) ; - } - if ((M == N-1) && (M >= 1)) { - S6(M-1,M) ; - S7(M-1,M,M-1) ; - S8(M-1,M) ; - S9(M-1,M,M-1) ; - S3(M) ; - S10(M) ; - S5(M) ; - } - if ((M <= N-2) && (N >= 2)) { - S6(N-2,N-1) ; - S8(N-2,N-1) ; - S3(N-1) ; - S10(N-1) ; - S5(N-1) ; - } -} diff --git a/cloog-0.17.0/test/reservoir/QR.cloog b/cloog-0.17.0/test/reservoir/QR.cloog deleted file mode 100755 index 8baed20..0000000 --- a/cloog-0.17.0/test/reservoir/QR.cloog +++ /dev/null @@ -1,228 +0,0 @@ -# Language -c - -# Context - - 1 4 - 1 0 0 1 -0 - -# Number of statments -10 - -1 -# { (i,j,k) | i >= 0, -i+k-1 >= 0, 1 >= 0 } - - 3 5 - 1 1 0 0 0 - 1 -1 0 1 -1 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i >= 0, -i+l-1 >= 0, -i+j >= 0, -j+k-1 >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 0 - 1 -1 0 0 1 -1 - 1 -1 1 0 0 0 - 1 0 -1 1 0 -1 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i >= 0, -i+k-1 >= 0, 1 >= 0 } - - 3 5 - 1 1 0 0 0 - 1 -1 0 1 -1 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i >= 0, -i+l-1 >= 0, -i+j >= 0, -j+k-1 >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 0 - 1 -1 0 0 1 -1 - 1 -1 1 0 0 0 - 1 0 -1 1 0 -1 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i >= 0, -i+k-1 >= 0, 1 >= 0 } - - 3 5 - 1 1 0 0 0 - 1 -1 0 1 -1 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i >= 0, -i+j-1 >= 0, -j+l-1 >= 0, 1 >= 0 } - - 4 6 - 1 1 0 0 0 0 - 1 -1 1 0 0 -1 - 1 0 -1 0 1 -1 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m) | i >= 0, -i+j-1 >= 0, -j+m-1 >= 0, -i+k >= 0, -k+l-1 >= 0, 1 >= 0 } - - 6 7 - 1 1 0 0 0 0 0 - 1 -1 1 0 0 0 -1 - 1 0 -1 0 0 1 -1 - 1 -1 0 1 0 0 0 - 1 0 0 -1 1 0 -1 - 1 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i >= 0, -i+j-1 >= 0, -j+l-1 >= 0, 1 >= 0 } - - 4 6 - 1 1 0 0 0 0 - 1 -1 1 0 0 -1 - 1 0 -1 0 1 -1 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m) | i >= 0, -i+j-1 >= 0, -j+m-1 >= 0, -i+k >= 0, -k+l-1 >= 0, 1 >= 0 } - - 6 7 - 1 1 0 0 0 0 0 - 1 -1 1 0 0 0 -1 - 1 0 -1 0 0 1 -1 - 1 -1 0 1 0 0 0 - 1 0 0 -1 1 0 -1 - 1 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i >= 0, -i+k-1 >= 0, 1 >= 0 } - - 3 5 - 1 1 0 0 0 - 1 -1 0 1 -1 - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -10 - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 -5 - 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 -2 - 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 0 -3 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 -6 - 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 -2 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 14 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 -2 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 -2 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 14 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 -2 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 -3 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 -4 - 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/QR.good.c b/cloog-0.17.0/test/reservoir/QR.good.c deleted file mode 100644 index facd214..0000000 --- a/cloog-0.17.0/test/reservoir/QR.good.c +++ /dev/null @@ -1,208 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/QR.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.27s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i) { hash(3); hash(i); } -#define S4(i,j) { hash(4); hash(i); hash(j); } -#define S5(i) { hash(5); hash(i); } -#define S6(i,j) { hash(6); hash(i); hash(j); } -#define S7(i,j,k) { hash(7); hash(i); hash(j); hash(k); } -#define S8(i,j) { hash(8); hash(i); hash(j); } -#define S9(i,j,k) { hash(9); hash(i); hash(j); hash(k); } -#define S10(i) { hash(10); hash(i); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if ((M <= -1) && (N >= 1)) { - S1(0) ; - } - if ((M >= 0) && (N >= 1)) { - S1(0) ; - } - if ((M >= 1) && (N >= 2)) { - for (c4=0;c4<=M-1;c4++) { - S2(0,c4) ; - } - S3(0) ; - for (c4=0;c4<=M-1;c4++) { - S4(0,c4) ; - } - S10(0) ; - S1(1) ; - S5(0) ; - } - if ((M <= 0) && (N >= 2)) { - S3(0) ; - S10(0) ; - S1(1) ; - S5(0) ; - } - if ((M >= 1) && (N == 1)) { - for (c4=0;c4<=M-1;c4++) { - S2(0,c4) ; - } - S3(0) ; - for (c4=0;c4<=M-1;c4++) { - S4(0,c4) ; - } - S10(0) ; - S5(0) ; - } - if ((M <= 0) && (N == 1)) { - S3(0) ; - S10(0) ; - S5(0) ; - } - for (c2=2;c2<=min(N-1,M);c2++) { - for (c4=c2-1;c4<=N-1;c4++) { - i = c2-2 ; - S6(c2-2,c4) ; - for (c6=c2-2;c6<=M-1;c6++) { - i = c2-2 ; - S7(c2-2,c4,c6) ; - } - i = c2-2 ; - S8(c2-2,c4) ; - for (c6=c2-2;c6<=M-1;c6++) { - i = c2-2 ; - S9(c2-2,c4,c6) ; - } - } - for (c4=c2-1;c4<=M-1;c4++) { - i = c2-1 ; - S2(c2-1,c4) ; - } - i = c2-1 ; - S3(c2-1) ; - for (c4=c2-1;c4<=M-1;c4++) { - i = c2-1 ; - S4(c2-1,c4) ; - } - i = c2-1 ; - S10(c2-1) ; - S1(c2) ; - i = c2-1 ; - S5(c2-1) ; - } - if ((M >= 1) && (M <= N-2)) { - c2 = M+1 ; - for (c4=M;c4<=N-1;c4++) { - i = M-1 ; - S6(M-1,c4) ; - c6 = M-1 ; - i = M-1 ; - k = M-1 ; - S7(M-1,c4,M-1) ; - i = M-1 ; - S8(M-1,c4) ; - c6 = M-1 ; - i = M-1 ; - k = M-1 ; - S9(M-1,c4,M-1) ; - } - S3(M) ; - S10(M) ; - i = M+1 ; - S1(M+1) ; - S5(M) ; - } - if ((M >= N) && (N >= 2)) { - c4 = N-1 ; - i = N-2 ; - j = N-1 ; - S6(N-2,N-1) ; - for (c6=N-2;c6<=M-1;c6++) { - i = N-2 ; - j = N-1 ; - S7(N-2,N-1,c6) ; - } - i = N-2 ; - j = N-1 ; - S8(N-2,N-1) ; - for (c6=N-2;c6<=M-1;c6++) { - i = N-2 ; - j = N-1 ; - S9(N-2,N-1,c6) ; - } - for (c4=N-1;c4<=M-1;c4++) { - i = N-1 ; - S2(N-1,c4) ; - } - i = N-1 ; - S3(N-1) ; - for (c4=N-1;c4<=M-1;c4++) { - i = N-1 ; - S4(N-1,c4) ; - } - i = N-1 ; - S10(N-1) ; - i = N-1 ; - S5(N-1) ; - } - if ((M == N-1) && (N >= 2)) { - c4 = N-1 ; - i = N-2 ; - j = N-1 ; - S6(N-2,N-1) ; - c6 = N-2 ; - i = N-2 ; - j = N-1 ; - k = N-2 ; - S7(N-2,N-1,N-2) ; - i = N-2 ; - j = N-1 ; - S8(N-2,N-1) ; - c6 = N-2 ; - i = N-2 ; - j = N-1 ; - k = N-2 ; - S9(N-2,N-1,N-2) ; - i = N-1 ; - S3(N-1) ; - i = N-1 ; - S10(N-1) ; - i = N-1 ; - S5(N-1) ; - } - for (c2=max(M+2,2);c2<=N-1;c2++) { - for (c4=c2-1;c4<=N-1;c4++) { - i = c2-2 ; - S6(c2-2,c4) ; - i = c2-2 ; - S8(c2-2,c4) ; - } - i = c2-1 ; - S3(c2-1) ; - i = c2-1 ; - S10(c2-1) ; - S1(c2) ; - i = c2-1 ; - S5(c2-1) ; - } - if ((M <= N-2) && (N >= 2)) { - c4 = N-1 ; - i = N-2 ; - j = N-1 ; - S6(N-2,N-1) ; - i = N-2 ; - j = N-1 ; - S8(N-2,N-1) ; - i = N-1 ; - S3(N-1) ; - i = N-1 ; - S10(N-1) ; - i = N-1 ; - S5(N-1) ; - } -} diff --git a/cloog-0.17.0/test/reservoir/bastoul3.c b/cloog-0.17.0/test/reservoir/bastoul3.c deleted file mode 100644 index 5f4b050..0000000 --- a/cloog-0.17.0/test/reservoir/bastoul3.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/reservoir/bastoul3.cloog by CLooG 0.16.3 gmp bits in 0.01s. */ -for (i=3;i<=9;i++) { - for (j=max(i-6,i-2*floord(i+1,2)+2);j<=min(3,i-2);j+=2) { - S1(i,j,(i-j)/2); - } -} diff --git a/cloog-0.17.0/test/reservoir/bastoul3.cloog b/cloog-0.17.0/test/reservoir/bastoul3.cloog deleted file mode 100644 index 8437226..0000000 --- a/cloog-0.17.0/test/reservoir/bastoul3.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# Figure 4 from "Efficient code generation for automatic parallelization -# and optimization". -# -# Language -c - -# Context - - 1 2 - 1 1 -0 - -# Number of statements -1 - -1 - -# i' i j 1 - 6 5 - 0 1 -1 -2 0 - 1 0 1 0 -1 - 1 0 -1 0 3 - 1 0 0 1 -1 - 1 0 0 -1 3 - 1 0 0 0 1 - -0 0 0 - -0 -0 - - - diff --git a/cloog-0.17.0/test/reservoir/cholesky2.c b/cloog-0.17.0/test/reservoir/cholesky2.c deleted file mode 100644 index ee3c52e..0000000 --- a/cloog-0.17.0/test/reservoir/cholesky2.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Generated from ../../../git/cloog/test/reservoir/cholesky2.cloog by CLooG 0.14.0-283-g7c18f7a gmp bits in 0.04s. */ -if (M >= 1) { - if (M >= 2) { - S1(1); - } - for (c2=2;c2<=min(3,M);c2++) { - S2(1,c2); - } - if (M == 1) { - S1(1); - } - for (c2=4;c2<=3*M-4;c2++) { - if ((c2+1)%3 == 0) { - S1((c2+1)/3); - } - for (c4=ceild(c2+2,3);c4<=min(M,c2-2);c4++) { - for (c6=ceild(c2-c4+2,2);c6<=min(c4,c2-c4);c6++) { - S3(c2-c4-c6+1,c4,c6); - } - } - for (c4=ceild(c2+4,3);c4<=min(M,c2);c4++) { - if ((c2+c4)%2 == 0) { - S2((c2-c4+2)/2,c4); - } - } - } - for (c2=max(2*M,3*M-3);c2<=3*M-2;c2++) { - S3(c2-2*M+1,M,M); - } - if (M >= 2) { - S1(M); - } -} diff --git a/cloog-0.17.0/test/reservoir/cholesky2.cloog b/cloog-0.17.0/test/reservoir/cholesky2.cloog deleted file mode 100755 index 7317c6a..0000000 --- a/cloog-0.17.0/test/reservoir/cholesky2.cloog +++ /dev/null @@ -1,79 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j) | i-1 >= 0, -i+j >= 0, 1 >= 0 } - - 3 4 - 1 1 0 -1 - 1 -1 1 0 - 1 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i-1 >= 0, -i+j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 4 5 - 1 1 0 0 -1 - 1 -1 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i-1 >= 0, -j+l >= 0, -i+k-1 >= 0, j-k >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 -1 - 1 0 -1 0 1 0 - 1 -1 0 1 0 -1 - 1 0 1 -1 0 0 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 8 11 - 0 1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -3 0 1 - 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -2 -1 0 2 - 0 0 0 1 0 0 0 0 0 0 0 -2 - 0 0 0 0 1 0 0 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 -1 -1 0 1 - 0 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/cholesky2.good.c b/cloog-0.17.0/test/reservoir/cholesky2.good.c deleted file mode 100644 index 36efcde..0000000 --- a/cloog-0.17.0/test/reservoir/cholesky2.good.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/cholesky2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.05s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - for (c2=2;c2<=min(3,3*M-4);c2++) { - if ((c2+1)%3 == 0) { - i = (c2+1)/3 ; - S1((c2+1)/3) ; - } - for (c4=ceild(c2+4,3);c4<=min(c2,M);c4++) { - if ((c2+c4)%2 == 0) { - i = (c2-c4+2)/2 ; - S2((c2-c4+2)/2,c4) ; - } - } - } - for (c2=4;c2<=3*M-4;c2++) { - if ((c2+1)%3 == 0) { - i = (c2+1)/3 ; - S1((c2+1)/3) ; - } - for (c4=ceild(c2+2,3);c4<=min(c2-2,M);c4++) { - for (c6=ceild(c2-c4+2,2);c6<=min(c2-c4,c4);c6++) { - i = c2-c4-c6+1 ; - S3(c2-c4-c6+1,c4,c6) ; - } - } - for (c4=ceild(c2+4,3);c4<=min(M,c2);c4++) { - if ((c2+c4)%2 == 0) { - i = (c2-c4+2)/2 ; - S2((c2-c4+2)/2,c4) ; - } - } - } - for (c2=max(2,3*M-3);c2<=min(3,3*M-2);c2++) { - if ((c2+1)%3 == 0) { - i = (c2+1)/3 ; - S1((c2+1)/3) ; - } - } - for (c2=max(3*M-3,4);c2<=3*M-2;c2++) { - if ((c2+1)%3 == 0) { - i = (c2+1)/3 ; - S1((c2+1)/3) ; - } - for (c4=ceild(c2+2,3);c4<=min(M,c2-2);c4++) { - for (c6=ceild(c2-c4+2,2);c6<=min(c2-c4,c4);c6++) { - i = c2-c4-c6+1 ; - S3(c2-c4-c6+1,c4,c6) ; - } - } - } - if (M >= 1) { - c2 = 3*M-1 ; - S1(M) ; - } -} diff --git a/cloog-0.17.0/test/reservoir/fusion1.c b/cloog-0.17.0/test/reservoir/fusion1.c deleted file mode 100644 index c2c0adf..0000000 --- a/cloog-0.17.0/test/reservoir/fusion1.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/fusion1.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (c2=0;c2<=M;c2++) { - S1(c2) ; -} -for (c2=1;c2<=M;c2++) { - S2(c2) ; -} -for (c2=0;c2<=M;c2++) { - S3(c2) ; -} diff --git a/cloog-0.17.0/test/reservoir/fusion1.cloog b/cloog-0.17.0/test/reservoir/fusion1.cloog deleted file mode 100755 index 3aea334..0000000 --- a/cloog-0.17.0/test/reservoir/fusion1.cloog +++ /dev/null @@ -1,65 +0,0 @@ -# Language -c - -# Context - - 2 3 - 1 1 -1 - 1 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j) | i >= 0, -i+j >= 0, 1 >= 0 } - - 3 4 - 1 1 0 0 - 1 -1 1 0 - 1 0 0 1 - -0 0 0 -1 -# { (i,j) | i-1 >= 0, -i+j >= 0, 1 >= 0 } - - 3 4 - 1 1 0 -1 - 1 -1 1 0 - 1 0 0 1 - -0 0 0 -1 -# { (i,j) | i >= 0, -i+j >= 0, 1 >= 0 } - - 3 4 - 1 1 0 0 - 1 -1 1 0 - 1 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 4 7 - 0 1 0 0 0 0 0 - 0 0 1 0 -1 0 0 - 0 0 0 1 0 0 0 - 1 0 0 0 0 0 1 - - - 4 7 - 0 1 0 0 0 0 -1 - 0 0 1 0 -1 0 0 - 0 0 0 1 0 0 0 - 1 0 0 0 0 0 1 - - - 4 7 - 0 1 0 0 0 0 -2 - 0 0 1 0 -1 0 0 - 0 0 0 1 0 0 0 - 1 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/fusion1.good.c b/cloog-0.17.0/test/reservoir/fusion1.good.c deleted file mode 100644 index ba28eba..0000000 --- a/cloog-0.17.0/test/reservoir/fusion1.good.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/fusion1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i) { hash(2); hash(i); } -#define S3(i) { hash(3); hash(i); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2; - /* Original iterators. */ - int i; - for (c2=0;c2<=M;c2++) { - S1(c2) ; - } - for (c2=1;c2<=M;c2++) { - S2(c2) ; - } - for (c2=0;c2<=M;c2++) { - S3(c2) ; - } -} diff --git a/cloog-0.17.0/test/reservoir/fusion2.c b/cloog-0.17.0/test/reservoir/fusion2.c deleted file mode 100644 index d9d02d6..0000000 --- a/cloog-0.17.0/test/reservoir/fusion2.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/fusion2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -if ((M >= 1) && (N >= 1)) { - for (c4=1;c4<=M;c4++) { - S1(1,c4) ; - } - for (c2=2;c2<=N;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c2-1,c4) ; - } - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c4=1;c4<=M;c4++) { - S2(N,c4) ; - } -} diff --git a/cloog-0.17.0/test/reservoir/fusion2.cloog b/cloog-0.17.0/test/reservoir/fusion2.cloog deleted file mode 100755 index dad8353..0000000 --- a/cloog-0.17.0/test/reservoir/fusion2.cloog +++ /dev/null @@ -1,56 +0,0 @@ -# Language -c - -# Context - - 1 4 - 1 0 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k,l) | i-1 >= 0, -i+l >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 -1 - 1 -1 0 0 1 0 - 1 0 1 0 0 -1 - 1 0 -1 1 0 0 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i-1 >= 0, -i+l >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 -1 - 1 -1 0 0 1 0 - 1 0 1 0 0 -1 - 1 0 -1 1 0 0 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 6 11 - 0 1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - - - 6 11 - 0 1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/fusion2.good.c b/cloog-0.17.0/test/reservoir/fusion2.good.c deleted file mode 100644 index b4b8f1c..0000000 --- a/cloog-0.17.0/test/reservoir/fusion2.good.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/fusion2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - if ((M >= 1) && (N >= 1)) { - for (c4=1;c4<=M;c4++) { - S1(1,c4) ; - } - } - if (M >= 1) { - for (c2=2;c2<=N;c2++) { - for (c4=1;c4<=M;c4++) { - i = c2-1 ; - S2(c2-1,c4) ; - } - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - } - if ((M >= 1) && (N >= 1)) { - c2 = N+1 ; - for (c4=1;c4<=M;c4++) { - S2(N,c4) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/jacobi2.c b/cloog-0.17.0/test/reservoir/jacobi2.c deleted file mode 100644 index 421e8a9..0000000 --- a/cloog-0.17.0/test/reservoir/jacobi2.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/jacobi2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (c2=0;c2<=M-1;c2++) { - for (c4=0;c4<=M-1;c4++) { - S1(c2,c4) ; - } -} diff --git a/cloog-0.17.0/test/reservoir/jacobi2.cloog b/cloog-0.17.0/test/reservoir/jacobi2.cloog deleted file mode 100755 index 7352362..0000000 --- a/cloog-0.17.0/test/reservoir/jacobi2.cloog +++ /dev/null @@ -1,37 +0,0 @@ -# Language -c - -# Context - - 2 3 - 1 1 -1 - 1 0 1 -0 - -# Number of statments -1 - -1 -# { (i,j,k) | i >= 0, -i+k-1 >= 0, j >= 0, -j+k-1 >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 0 - 1 -1 0 1 -1 - 1 0 1 0 0 - 1 0 -1 1 -1 - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -1 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/jacobi2.good.c b/cloog-0.17.0/test/reservoir/jacobi2.good.c deleted file mode 100644 index 8c6ea0e..0000000 --- a/cloog-0.17.0/test/reservoir/jacobi2.good.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/jacobi2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - for (c2=0;c2<=M-1;c2++) { - for (c4=0;c4<=M-1;c4++) { - S1(c2,c4) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/jacobi3.c b/cloog-0.17.0/test/reservoir/jacobi3.c deleted file mode 100644 index 0182c15..0000000 --- a/cloog-0.17.0/test/reservoir/jacobi3.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/jacobi3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -if ((M >= 1) && (N >= 3)) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S1(1,c4,c6) ; - } - } - for (c2=3;c2<=2*M;c2++) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if (c2%2 == 0) { - S1(c2/2,c4,c6) ; - } - } - } - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if ((c2+1)%2 == 0) { - S2((c2-1)/2,c4,c6) ; - } - } - } - } - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S2(M,c4,c6) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/jacobi3.cloog b/cloog-0.17.0/test/reservoir/jacobi3.cloog deleted file mode 100755 index dff32ff..0000000 --- a/cloog-0.17.0/test/reservoir/jacobi3.cloog +++ /dev/null @@ -1,64 +0,0 @@ -# Language -c - -# Context - - 1 4 - 1 0 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k,l,m) | i-1 >= 0, -i+l >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+m-1 >= 0, 1 >= 0 } - - 7 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 1 0 0 - 1 0 1 0 0 0 -2 - 1 0 -1 0 0 1 -1 - 1 0 0 1 0 0 -2 - 1 0 0 -1 0 1 -1 - 1 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m) | i-1 >= 0, -i+l >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+m-1 >= 0, 1 >= 0 } - - 7 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 1 0 0 - 1 0 1 0 0 0 -2 - 1 0 -1 0 0 1 -1 - 1 0 0 1 0 0 -2 - 1 0 0 -1 0 1 -1 - 1 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 8 14 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -2 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 14 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -2 0 0 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/jacobi3.good.c b/cloog-0.17.0/test/reservoir/jacobi3.good.c deleted file mode 100644 index 39cfce3..0000000 --- a/cloog-0.17.0/test/reservoir/jacobi3.good.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/jacobi3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.03s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if ((M >= 1) && (N >= 3)) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S1(1,c4,c6) ; - } - } - } - if (N >= 3) { - for (c2=3;c2<=2*M;c2++) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if (c2%2 == 0) { - S1(c2/2,c4,c6) ; - } - } - } - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if ((c2+1)%2 == 0) { - i = (c2-1)/2 ; - S2((c2-1)/2,c4,c6) ; - } - } - } - } - } - if ((M >= 1) && (N >= 3)) { - c2 = 2*M+1 ; - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S2(M,c4,c6) ; - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/lim-lam1.c b/cloog-0.17.0/test/reservoir/lim-lam1.c deleted file mode 100644 index 469117c..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam1.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/lim-lam1.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.01s. */ -S1(1,100); -for (c2=-98;c2<=99;c2++) { - if (c2 <= 0) { - S1(1,-c2+1); - } - if (c2 >= 1) { - S2(c2,1); - } - for (c4=max(2,-2*c2+3);c4<=min(199,-2*c2+200);c4++) { - if (c4%2 == 0) { - S1((2*c2+c4)/2,c4/2); - } - if ((c4+1)%2 == 0) { - S2((2*c2+c4-1)/2,(c4+1)/2); - } - } - if (c2 <= 0) { - S1(c2+100,100); - } - if (c2 >= 1) { - S2(100,-c2+101); - } -} -S2(100,1); diff --git a/cloog-0.17.0/test/reservoir/lim-lam1.cloog b/cloog-0.17.0/test/reservoir/lim-lam1.cloog deleted file mode 100644 index 7a7c684..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam1.cloog +++ /dev/null @@ -1,54 +0,0 @@ -# Language -c - -# Context - - 1 2 - 1 1 -0 - -# Number of statments -2 - -1 -# { (i,j) | i-1 >= 0, -i+100 >= 0, j-1 >= 0, -j+100 >= 0 } - - 4 4 - 1 1 0 -1 - 1 -1 0 100 - 1 0 1 -1 - 1 0 -1 100 - -0 0 0 -1 -# { (i,j) | i-1 >= 0, -i+100 >= 0, j-1 >= 0, -j+100 >= 0 } - - 4 4 - 1 1 0 -1 - 1 -1 0 100 - 1 0 1 -1 - 1 0 -1 100 - -0 0 0 -0 -# Scattering functions -2 - - 6 9 - 0 1 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 1 0 - 0 0 0 1 0 0 0 0 0 - 0 0 0 0 1 0 0 -2 0 - 0 0 0 0 0 1 0 0 0 - 1 0 0 0 0 0 0 0 1 - - - 6 9 - 0 1 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 1 -1 - 0 0 0 1 0 0 0 0 0 - 0 0 0 0 1 0 0 -2 1 - 0 0 0 0 0 1 0 0 -1 - 1 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/lim-lam1.good.c b/cloog-0.17.0/test/reservoir/lim-lam1.good.c deleted file mode 100644 index cd6faf7..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam1.good.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test() -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - S1(1,100) ; - for (c2=-98;c2<=0;c2++) { - c4 = -2*c2+2 ; - j = -c2+1 ; - S1(1,-c2+1) ; - for (c4=-2*c2+3;c4<=199;c4++) { - if (c4%2 == 0) { - i = (2*c2+c4)/2 ; - S1((2*c2+c4)/2,c4/2) ; - } - if ((c4+1)%2 == 0) { - i = (2*c2+c4-1)/2 ; - j = (c4+1)/2 ; - S2((2*c2+c4-1)/2,(c4+1)/2) ; - } - } - i = c2+100 ; - S1(c2+100,100) ; - } - for (c2=1;c2<=99;c2++) { - S2(c2,1) ; - for (c4=2;c4<=-2*c2+200;c4++) { - if (c4%2 == 0) { - i = (2*c2+c4)/2 ; - S1((2*c2+c4)/2,c4/2) ; - } - if ((c4+1)%2 == 0) { - i = (2*c2+c4-1)/2 ; - j = (c4+1)/2 ; - S2((2*c2+c4-1)/2,(c4+1)/2) ; - } - } - c4 = -2*c2+201 ; - j = -c2+101 ; - S2(100,-c2+101) ; - } - S2(100,1) ; -} diff --git a/cloog-0.17.0/test/reservoir/lim-lam2.c b/cloog-0.17.0/test/reservoir/lim-lam2.c deleted file mode 100644 index ab1a32f..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam2.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -for (c2=1;c2<=M;c2++) { - S1(c2) ; -} -if (N >= 2) { - for (c2=1;c2<=M;c2++) { - for (c4=2;c4<=N;c4++) { - S2(c2,c4) ; - } - } -} -if (N >= 2) { - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=N-1;c4++) { - S3(c2,c4) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/lim-lam2.cloog b/cloog-0.17.0/test/reservoir/lim-lam2.cloog deleted file mode 100755 index db50b74..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam2.cloog +++ /dev/null @@ -1,76 +0,0 @@ -# Language -c - -# Context - - 3 4 - 1 1 0 -1 - 1 0 1 -1 - 1 0 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j,k) | i-1 >= 0, -i+j >= 0, 1 >= 0 } - - 3 5 - 1 1 0 0 -1 - 1 -1 1 0 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i-1 >= 0, -i+k >= 0, j-2 >= 0, -j+l >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 -1 - 1 -1 0 1 0 0 - 1 0 1 0 0 -2 - 1 0 -1 0 1 0 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+l-1 >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 -1 - 1 -1 0 1 0 0 - 1 0 1 0 0 -1 - 1 0 -1 0 1 -1 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - - - 6 11 - 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - - - 6 11 - 0 1 0 0 0 0 0 0 0 0 -2 - 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 -2 - 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/lim-lam2.good.c b/cloog-0.17.0/test/reservoir/lim-lam2.good.c deleted file mode 100644 index 0ea3332..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam2.good.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - for (c2=1;c2<=M;c2++) { - S1(c2) ; - } - if (N >= 2) { - for (c2=1;c2<=M;c2++) { - for (c4=2;c4<=N;c4++) { - S2(c2,c4) ; - } - } - } - if (N >= 2) { - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=N-1;c4++) { - S3(c2,c4) ; - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/lim-lam3.c b/cloog-0.17.0/test/reservoir/lim-lam3.c deleted file mode 100644 index c68a629..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam3.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Generated from ../../../git/cloog/test/reservoir/lim-lam3.cloog by CLooG 0.16.2-8-g1421b58 gmp bits in 0.03s. */ -S4(1); -for (c2=9;c2<=min(13,5*M-1);c2++) { - if (c2 <= M+7) { - S2(c2-7,1); - } - if (c2 == 10) { - S4(2); - } - if (c2 <= 3*M+3) { - if (c2%3 == 0) { - S3((c2-3)/3,1); - } - } -} -for (c2=14;c2<=5*M-1;c2++) { - for (c4=max(2,ceild(c2-M-3,4));c4<=min(floord(c2-8,3),M-1);c4++) { - for (c6=max(1,ceild(c2-2*c4-M-5,2));c6<=min(floord(c2-3*c4-6,2),c4-1);c6++) { - S1(c2-2*c4-2*c6-5,c4,c6); - } - } - for (c4=max(1,ceild(c2-M-3,4));c4<=floord(c2-4,5);c4++) { - S2(c2-4*c4-3,c4); - } - if (c2%5 == 0) { - S4(c2/5); - } - for (c4=max(1,ceild(c2-3*M-1,2));c4<=floord(c2-4,5);c4++) { - if ((c2+c4+2)%3 == 0) { - S3((c2-2*c4-1)/3,c4); - } - } -} -if (M >= 2) { - S4(M); -} diff --git a/cloog-0.17.0/test/reservoir/lim-lam3.cloog b/cloog-0.17.0/test/reservoir/lim-lam3.cloog deleted file mode 100755 index 0d3d4a5..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam3.cloog +++ /dev/null @@ -1,101 +0,0 @@ -# Language -c - -# Context - - 2 3 - 1 1 -1 - 1 0 1 -0 - -# Number of statments -4 - -1 -# { (i,j,k,l) | -i+l >= 0, i-j-1 >= 0, k-1 >= 0, j-k-1 >= 0, 1 >= 0 } - - 5 6 - 1 -1 0 0 1 0 - 1 1 -1 0 0 -1 - 1 0 0 1 0 -1 - 1 0 1 -1 0 -1 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | -i+k >= 0, j-1 >= 0, i-j-1 >= 0, 1 >= 0 } - - 4 5 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 1 -1 0 -1 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | -i+k >= 0, j-1 >= 0, i-j-1 >= 0, 1 >= 0 } - - 4 5 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 1 -1 0 -1 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j) | i-1 >= 0, -i+j >= 0, 1 >= 0 } - - 3 4 - 1 1 0 -1 - 1 -1 1 0 - 1 0 0 1 - -0 0 0 -0 -# Scattering functions -4 - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 -2 -2 0 -5 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 -4 0 -3 - 0 0 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -3 -2 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 -2 - 0 0 0 0 1 0 0 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 11 - 0 1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -5 0 0 - 0 0 0 1 0 0 0 0 0 0 -2 - 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/lim-lam3.good.c b/cloog-0.17.0/test/reservoir/lim-lam3.good.c deleted file mode 100644 index 0cddca9..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam3.good.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.04s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } -#define S4(i) { hash(4); hash(i); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - for (c2=5;c2<=min(5*M,8);c2++) { - if (c2%5 == 0) { - S4(c2/5) ; - } - } - for (c2=9;c2<=min(13,5*M-1);c2++) { - for (c4=max(1,ceild(c2-M-3,4));c4<=floord(c2-4,5);c4++) { - i = c2-4*c4-3 ; - S2(c2-4*c4-3,c4) ; - } - if (c2%5 == 0) { - S4(c2/5) ; - } - for (c4=max(1,ceild(c2-3*M-1,2));c4<=floord(c2-4,5);c4++) { - if ((c2+c4+2)%3 == 0) { - i = (c2-2*c4-1)/3 ; - S3((c2-2*c4-1)/3,c4) ; - } - } - } - for (c2=14;c2<=5*M-1;c2++) { - for (c4=max(2,ceild(c2-M-3,4));c4<=min(M-1,floord(c2-8,3));c4++) { - for (c6=max(1,ceild(c2-2*c4-M-5,2));c6<=min(c4-1,floord(c2-3*c4-6,2));c6++) { - i = c2-2*c4-2*c6-5 ; - S1(c2-2*c4-2*c6-5,c4,c6) ; - } - } - for (c4=max(ceild(c2-M-3,4),1);c4<=floord(c2-4,5);c4++) { - i = c2-4*c4-3 ; - S2(c2-4*c4-3,c4) ; - } - if (c2%5 == 0) { - S4(c2/5) ; - } - for (c4=max(ceild(c2-3*M-1,2),1);c4<=floord(c2-4,5);c4++) { - if ((c2+c4+2)%3 == 0) { - i = (c2-2*c4-1)/3 ; - S3((c2-2*c4-1)/3,c4) ; - } - } - } - if (M >= 2) { - c2 = 5*M ; - S4(M) ; - } -} diff --git a/cloog-0.17.0/test/reservoir/lim-lam4.c b/cloog-0.17.0/test/reservoir/lim-lam4.c deleted file mode 100644 index b2c0845..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam4.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam4.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.04s. */ -if (M >= 2) { - S1(1,0,0) ; - for (c2=2;c2<=2*M-2;c2++) { - for (c4=max(-M+1,-c2+1);c4<=-1;c4++) { - for (i=max(1,c2-M+1);i<=min(M-1,c2+c4);i++) { - S1(i,c2+c4-i,-c4) ; - } - for (c6=max(-c4,c2-M+1);c6<=min(M-1,c2-1);c6++) { - S2(c2-c6,c4+c6,c6) ; - } - } - for (i=max(1,c2-M+1);i<=min(c2,M-1);i++) { - S1(i,c2-i,0) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/lim-lam4.cloog b/cloog-0.17.0/test/reservoir/lim-lam4.cloog deleted file mode 100755 index 0aa66e3..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam4.cloog +++ /dev/null @@ -1,62 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k,l) | i-1 >= 0, -i+l-1 >= 0, j >= 0, k >= 0, -j-k+l-1 >= 0, 1 >= 0 } - - 6 6 - 1 1 0 0 0 -1 - 1 -1 0 0 1 -1 - 1 0 1 0 0 0 - 1 0 0 1 0 0 - 1 0 -1 -1 1 -1 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i-1 >= 0, -i+l-1 >= 0, j >= 0, -j+k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 6 6 - 1 1 0 0 0 -1 - 1 -1 0 0 1 -1 - 1 0 1 0 0 0 - 1 0 -1 1 0 -1 - 1 0 0 -1 1 -1 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 -1 -1 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 -1 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/lim-lam4.good.c b/cloog-0.17.0/test/reservoir/lim-lam4.good.c deleted file mode 100644 index afb05ec..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam4.good.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam4.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if (M >= 2) { - S1(1,0,0) ; - } - for (c2=2;c2<=2*M-2;c2++) { - for (c4=max(-M+1,-c2+1);c4<=-1;c4++) { - for (i=max(1,c2-M+1);i<=min(c2+c4,M-1);i++) { - j = c2+c4-i ; - S1(i,c2+c4-i,-c4) ; - } - for (c6=max(-c4,c2-M+1);c6<=min(c2-1,M-1);c6++) { - i = c2-c6 ; - j = c4+c6 ; - S2(c2-c6,c4+c6,c6) ; - } - } - for (i=max(1,c2-M+1);i<=min(M-1,c2);i++) { - j = c2-i ; - S1(i,c2-i,0) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/lim-lam5.c b/cloog-0.17.0/test/reservoir/lim-lam5.c deleted file mode 100644 index e6b0a57..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam5.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam5.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (M >= 1) { - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S3(c2,c4) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/lim-lam5.cloog b/cloog-0.17.0/test/reservoir/lim-lam5.cloog deleted file mode 100755 index c5d6ef9..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam5.cloog +++ /dev/null @@ -1,76 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - - - 6 10 - 0 1 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - - - 6 10 - 0 1 0 0 0 0 0 0 0 -2 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/lim-lam5.good.c b/cloog-0.17.0/test/reservoir/lim-lam5.good.c deleted file mode 100644 index 69d8805..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam5.good.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam5.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S3(c2,c4) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/lim-lam6.c b/cloog-0.17.0/test/reservoir/lim-lam6.c deleted file mode 100644 index 05baff1..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam6.c +++ /dev/null @@ -1,13 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam6.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (M >= 1) { - for (c2=0;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=0;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c4,c2) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/lim-lam6.cloog b/cloog-0.17.0/test/reservoir/lim-lam6.cloog deleted file mode 100755 index a1bf181..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam6.cloog +++ /dev/null @@ -1,56 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k) | i >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 0 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 0 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - - - 6 10 - 0 1 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 -1 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/lim-lam6.good.c b/cloog-0.17.0/test/reservoir/lim-lam6.good.c deleted file mode 100644 index f49ab57..0000000 --- a/cloog-0.17.0/test/reservoir/lim-lam6.good.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/lim-lam6.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - if (M >= 1) { - for (c2=0;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - } - if (M >= 1) { - for (c2=0;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c4,c2) ; - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/liu-zhuge1.c b/cloog-0.17.0/test/reservoir/liu-zhuge1.c deleted file mode 100644 index b0f8602..0000000 --- a/cloog-0.17.0/test/reservoir/liu-zhuge1.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/liu-zhuge1.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.02s. */ -if ((M >= 0) && (N >= 0)) { - for (c2=-4;c2<=min(-1,3*M+N-4);c2++) { - for (c4=max(0,c2-3*M+4);c4<=min(N,c2+4);c4++) { - if ((c2+2*c4+1)%3 == 0) { - S1((c2-c4+4)/3,c4); - } - } - } - for (c2=0;c2<=3*M+N-4;c2++) { - for (c4=max(0,c2-3*M);c4<=min(c2,c2-3*M+3);c4++) { - if ((c2+2*c4)%3 == 0) { - S2((c2-c4)/3,c4); - } - } - for (c4=max(0,c2-3*M+4);c4<=min(N,c2);c4++) { - if ((c2+2*c4)%3 == 0) { - S2((c2-c4)/3,c4); - } - if ((c2+2*c4+1)%3 == 0) { - S1((c2-c4+4)/3,c4); - } - } - for (c4=max(c2+1,c2-3*M+4);c4<=min(N,c2+4);c4++) { - if ((c2+2*c4+1)%3 == 0) { - S1((c2-c4+4)/3,c4); - } - } - for (c4=max(0,c2-3*M);c4<=min(N,c2);c4++) { - if ((c2+2*c4)%3 == 0) { - S3((c2-c4)/3,c4); - } - } - } - for (c2=max(0,3*M+N-3);c2<=3*M+N;c2++) { - for (c4=max(0,c2-3*M);c4<=min(N,c2);c4++) { - if ((c2+2*c4)%3 == 0) { - S2((c2-c4)/3,c4); - } - } - for (c4=max(0,c2-3*M);c4<=min(N,c2);c4++) { - if ((c2+2*c4)%3 == 0) { - S3((c2-c4)/3,c4); - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/liu-zhuge1.cloog b/cloog-0.17.0/test/reservoir/liu-zhuge1.cloog deleted file mode 100755 index e28cb4b..0000000 --- a/cloog-0.17.0/test/reservoir/liu-zhuge1.cloog +++ /dev/null @@ -1,76 +0,0 @@ -# Language -c - -# Context - - 1 4 - 1 0 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j,k,l) | i >= 0, -i+k >= 0, j >= 0, -j+l >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 0 - 1 -1 0 1 0 0 - 1 0 1 0 0 0 - 1 0 -1 0 1 0 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i >= 0, -i+k >= 0, j >= 0, -j+l >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 0 - 1 -1 0 1 0 0 - 1 0 1 0 0 0 - 1 0 -1 0 1 0 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i >= 0, -i+k >= 0, j >= 0, -j+l >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 0 - 1 -1 0 1 0 0 - 1 0 1 0 0 0 - 1 0 -1 0 1 0 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 6 11 - 0 1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -3 -1 0 0 4 - 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - - - 6 11 - 0 1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -3 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - - - 6 11 - 0 1 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -3 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/liu-zhuge1.good.c b/cloog-0.17.0/test/reservoir/liu-zhuge1.good.c deleted file mode 100644 index 2b07ade..0000000 --- a/cloog-0.17.0/test/reservoir/liu-zhuge1.good.c +++ /dev/null @@ -1,168 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/liu-zhuge1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.05s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j) { hash(3); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - if ((M >= 0) && (N >= 0)) { - for (c2=-4;c2<=min(-1,3*M+N-4);c2++) { - for (c4=max(0,c2-3*M+4);c4<=min(c2+4,N);c4++) { - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - } - } - if ((M <= 1) && (M >= 0)) { - for (c2=0;c2<=3*M+N-4;c2++) { - for (c4=max(c2-3*M,0);c4<=c2;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - } - for (c4=c2-3*M+4;c4<=min(c2+4,N);c4++) { - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - for (c4=max(0,c2-3*M);c4<=c2;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S3((c2-c4)/3,c4) ; - } - } - } - } - for (c2=0;c2<=min(3*M-4,N-1);c2++) { - for (c4=0;c4<=c2;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - for (c4=c2+1;c4<=min(c2+4,N);c4++) { - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - for (c4=0;c4<=c2;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S3((c2-c4)/3,c4) ; - } - } - } - if (M >= 2) { - for (c2=3*M-3;c2<=N-1;c2++) { - for (c4=max(c2-3*M,0);c4<=c2-3*M+3;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - } - for (c4=c2-3*M+4;c4<=c2;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - for (c4=c2+1;c4<=min(c2+4,N);c4++) { - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - for (c4=max(0,c2-3*M);c4<=c2;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S3((c2-c4)/3,c4) ; - } - } - } - } - if (N >= 0) { - for (c2=N;c2<=3*M-4;c2++) { - for (c4=0;c4<=N;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - for (c4=0;c4<=N;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S3((c2-c4)/3,c4) ; - } - } - } - } - for (c2=max(3*M-3,N);c2<=3*M+N-4;c2++) { - for (c4=max(c2-3*M,0);c4<=c2-3*M+3;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - } - for (c4=c2-3*M+4;c4<=N;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - if ((c2+2*c4+1)%3 == 0) { - i = (c2-c4+4)/3 ; - S1((c2-c4+4)/3,c4) ; - } - } - for (c4=max(0,c2-3*M);c4<=N;c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S3((c2-c4)/3,c4) ; - } - } - } - if ((M >= 0) && (N >= 0)) { - for (c2=max(3*M+N-3,0);c2<=3*M+N;c2++) { - for (c4=max(0,c2-3*M);c4<=min(c2,N);c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S2((c2-c4)/3,c4) ; - } - } - for (c4=max(0,c2-3*M);c4<=min(c2,N);c4++) { - if ((c2+2*c4)%3 == 0) { - i = (c2-c4)/3 ; - S3((c2-c4)/3,c4) ; - } - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/loechner3.c b/cloog-0.17.0/test/reservoir/loechner3.c deleted file mode 100644 index c3967b8..0000000 --- a/cloog-0.17.0/test/reservoir/loechner3.c +++ /dev/null @@ -1,10 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/loechner3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (M >= 1) { - for (c2=1;c2<=M;c2++) { - for (c4=2;c4<=c2+M;c4++) { - for (c6=max(1,-c2+c4);c6<=min(M,c4-1);c6++) { - S1(c2,c6,c4-c6) ; - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/loechner3.cloog b/cloog-0.17.0/test/reservoir/loechner3.cloog deleted file mode 100755 index 04b34cb..0000000 --- a/cloog-0.17.0/test/reservoir/loechner3.cloog +++ /dev/null @@ -1,39 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -1 - -1 -# { (i,j,k,l) | -i+l >= 0, j-1 >= 0, -j+l >= 0, k-1 >= 0, i-k >= 0, 1 >= 0 } - - 6 6 - 1 -1 0 0 1 0 - 1 0 1 0 0 -1 - 1 0 -1 0 1 0 - 1 0 0 1 0 -1 - 1 1 0 -1 0 0 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -1 - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/loechner3.good.c b/cloog-0.17.0/test/reservoir/loechner3.good.c deleted file mode 100644 index 377fb46..0000000 --- a/cloog-0.17.0/test/reservoir/loechner3.good.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/loechner3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - for (c2=1;c2<=M;c2++) { - for (c4=2;c4<=c2+M;c4++) { - for (c6=max(1,-c2+c4);c6<=min(M,c4-1);c6++) { - k = c4-c6 ; - S1(c2,c6,c4-c6) ; - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/loechner4.c b/cloog-0.17.0/test/reservoir/loechner4.c deleted file mode 100644 index 8c4b9c7..0000000 --- a/cloog-0.17.0/test/reservoir/loechner4.c +++ /dev/null @@ -1,12 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/loechner4.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -if (M >= 1) { - for (c2=2;c2<=2*M;c2++) { - for (c4=1;c4<=M;c4++) { - for (c6=1;c6<=M;c6++) { - for (c8=max(1,c2-M);c8<=min(M,c2-1);c8++) { - S1(c6,c4,c8,c2-c8) ; - } - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/loechner4.cloog b/cloog-0.17.0/test/reservoir/loechner4.cloog deleted file mode 100755 index 503f56a..0000000 --- a/cloog-0.17.0/test/reservoir/loechner4.cloog +++ /dev/null @@ -1,44 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -1 - -1 -# { (i,j,k,l,m) | i-1 >= 0, -i+m >= 0, j-1 >= 0, -j+m >= 0, k-1 >= 0, -k+m >= 0, l-1 >= 0, -l+m >= 0, 1 >= 0 } - - 9 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 0 1 0 - 1 0 1 0 0 0 -1 - 1 0 -1 0 0 1 0 - 1 0 0 1 0 0 -1 - 1 0 0 -1 0 1 0 - 1 0 0 0 1 0 -1 - 1 0 0 0 -1 1 0 - 1 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -1 - - 10 16 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 -1 -1 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/loechner4.good.c b/cloog-0.17.0/test/reservoir/loechner4.good.c deleted file mode 100644 index ecd109e..0000000 --- a/cloog-0.17.0/test/reservoir/loechner4.good.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/loechner4.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k,l) { hash(1); hash(i); hash(j); hash(k); hash(l); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6, c8; - /* Original iterators. */ - int i, j, k, l; - for (c2=2;c2<=2*M;c2++) { - for (c4=1;c4<=M;c4++) { - for (c6=1;c6<=M;c6++) { - for (c8=max(1,c2-M);c8<=min(c2-1,M);c8++) { - l = c2-c8 ; - S1(c6,c4,c8,c2-c8) ; - } - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/loechner5.c b/cloog-0.17.0/test/reservoir/loechner5.c deleted file mode 100644 index 3ba1f5b..0000000 --- a/cloog-0.17.0/test/reservoir/loechner5.c +++ /dev/null @@ -1,12 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/loechner5.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -if (M >= 1) { - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - for (c6=1;c6<=M;c6++) { - for (c8=1;c8<=M;c8++) { - S1(c4,c6,c2,c8) ; - } - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/loechner5.cloog b/cloog-0.17.0/test/reservoir/loechner5.cloog deleted file mode 100755 index f208435..0000000 --- a/cloog-0.17.0/test/reservoir/loechner5.cloog +++ /dev/null @@ -1,44 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -1 - -1 -# { (i,j,k,l,m) | i-1 >= 0, -i+m >= 0, j-1 >= 0, -j+m >= 0, k-1 >= 0, -k+m >= 0, l-1 >= 0, -l+m >= 0, 1 >= 0 } - - 9 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 0 1 0 - 1 0 1 0 0 0 -1 - 1 0 -1 0 0 1 0 - 1 0 0 1 0 0 -1 - 1 0 0 -1 0 1 0 - 1 0 0 0 1 0 -1 - 1 0 0 0 -1 1 0 - 1 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -1 - - 10 16 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/loechner5.good.c b/cloog-0.17.0/test/reservoir/loechner5.good.c deleted file mode 100644 index 937c118..0000000 --- a/cloog-0.17.0/test/reservoir/loechner5.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/loechner5.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k,l) { hash(1); hash(i); hash(j); hash(k); hash(l); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6, c8; - /* Original iterators. */ - int i, j, k, l; - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - for (c6=1;c6<=M;c6++) { - for (c8=1;c8<=M;c8++) { - S1(c4,c6,c2,c8) ; - } - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/mg-interp.c b/cloog-0.17.0/test/reservoir/mg-interp.c deleted file mode 100644 index 3ed1fcf..0000000 --- a/cloog-0.17.0/test/reservoir/mg-interp.c +++ /dev/null @@ -1,219 +0,0 @@ -/* Generated from ../../../git/cloog/test/reservoir/mg-interp.cloog by CLooG 0.16.2-5-g590827b gmp bits in 0.29s. */ -if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,1,c6); - } - if (N == 2) { - for (c6=1;c6<=M-1;c6++) { - S6(c2,1,c6); - S7(c2,1,c6); - } - } - if (N >= 3) { - for (c6=1;c6<=M-1;c6++) { - S6(c2,1,c6); - S7(c2,1,c6); - } - } - if (N == 2) { - for (c6=1;c6<=M;c6++) { - S3(c2,1,c6); - } - } - if (N == 2) { - for (c6=1;c6<=M-1;c6++) { - S11(c2,1,c6); - } - } - if (N >= 3) { - for (c6=1;c6<=M;c6++) { - S3(c2,1,c6); - } - for (c6=1;c6<=M;c6++) { - S1(c2,2,c6); - } - } - if (N == 3) { - for (c6=1;c6<=M-1;c6++) { - S6(c2,2,c6); - S7(c2,2,c6); - } - for (c6=1;c6<=M-1;c6++) { - S11(c2,1,c6); - } - } - if (N >= 4) { - for (c6=1;c6<=M-1;c6++) { - S6(c2,2,c6); - S7(c2,2,c6); - } - for (c6=1;c6<=M-1;c6++) { - S11(c2,1,c6); - } - } - for (c4=3;c4<=2*N-5;c4++) { - for (c6=1;c6<=M-1;c6++) { - if ((c4+1)%2 == 0) { - S10(c2,(c4-1)/2,c6); - } - } - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - S3(c2,(c4+1)/2,c6); - } - } - for (c6=1;c6<=M-1;c6++) { - if (c4%2 == 0) { - S6(c2,(c4+2)/2,c6); - } - if ((c4+1)%2 == 0) { - S1(c2,(c4+3)/2,c6); - } - if (c4%2 == 0) { - S7(c2,(c4+2)/2,c6); - } - } - if ((c4+1)%2 == 0) { - S1(c2,(c4+3)/2,M); - } - for (c6=1;c6<=M-1;c6++) { - if (c4%2 == 0) { - S11(c2,c4/2,c6); - } - } - } - if (N >= 4) { - for (c6=1;c6<=M-1;c6++) { - S6(c2,N-1,c6); - S7(c2,N-1,c6); - } - for (c6=1;c6<=M-1;c6++) { - S11(c2,N-2,c6); - } - } - if (N >= 3) { - for (c6=1;c6<=M-1;c6++) { - S10(c2,N-2,c6); - } - for (c6=1;c6<=M;c6++) { - S3(c2,N-1,c6); - } - } - if (N >= 3) { - for (c6=1;c6<=M-1;c6++) { - S11(c2,N-1,c6); - } - } - for (c6=1;c6<=M-1;c6++) { - S10(c2,N-1,c6); - } - } -} -if ((M == 1) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - S1(c2,1,1); - for (c4=1;c4<=2*N-5;c4++) { - if ((c4+1)%2 == 0) { - S3(c2,(c4+1)/2,1); - } - if ((c4+1)%2 == 0) { - S1(c2,(c4+3)/2,1); - } - } - S3(c2,N-1,1); - } -} -if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S2(c2,1,c6); - } - for (c6=1;c6<=M-1;c6++) { - S8(c2,1,c6); - } - for (c4=3;c4<=2*N-2;c4++) { - for (c6=1;c6<=M;c6++) { - if (c4%2 == 0) { - S2(c2,c4/2,c6); - } - } - for (c6=1;c6<=M-1;c6++) { - if (c4%2 == 0) { - S8(c2,c4/2,c6); - } - } - for (c6=1;c6<=M-1;c6++) { - if ((c4+1)%2 == 0) { - S9(c2,(c4-1)/2,c6); - } - } - } - for (c6=1;c6<=M-1;c6++) { - S9(c2,N-1,c6); - } - } -} -if ((M == 1) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=2;c4<=2*N-2;c4++) { - if (c4%2 == 0) { - S2(c2,c4/2,1); - } - } - } -} -if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S4(c2,c4,c6); - } - } - } -} -if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S5(c2,c4,c6); - } - } - } -} -if ((M >= P+1) && (N >= Q+1)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S12(c2,c4,c6); - } - } - } -} -if ((M >= 2) && (N >= Q+1)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S13(c2,c4,c6); - } - } - } -} -if ((M >= P+1) && (N >= 2)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S14(c2,c4,c6); - } - } - } -} -if ((M >= 2) && (N >= 2)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S15(c2,c4,c6); - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/mg-interp.cloog b/cloog-0.17.0/test/reservoir/mg-interp.cloog deleted file mode 100755 index 9d08463..0000000 --- a/cloog-0.17.0/test/reservoir/mg-interp.cloog +++ /dev/null @@ -1,376 +0,0 @@ -# Language -c - -# Context - - 1 11 - 1 0 0 0 0 0 0 0 0 0 1 -0 - -# Number of statments -15 - -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-q >= 0, -i+n-1 >= 0, j-p >= 0, -j+m-1 >= 0, k-o >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 -1 0 0 0 0 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 -1 0 0 0 0 0 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 -1 0 0 0 0 0 0 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-q >= 0, -i+n-1 >= 0, j-p >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 -1 0 0 0 0 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 -1 0 0 0 0 0 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-q >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-o >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 -1 0 0 0 0 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 -1 0 0 0 0 0 0 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-q >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 -1 0 0 0 0 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -15 - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 3 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 2 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 2 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -7 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/mg-interp.good.c b/cloog-0.17.0/test/reservoir/mg-interp.good.c deleted file mode 100644 index 7f919c8..0000000 --- a/cloog-0.17.0/test/reservoir/mg-interp.good.c +++ /dev/null @@ -1,318 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/mg-interp.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 1.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } -#define S4(i,j,k) { hash(4); hash(i); hash(j); hash(k); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } -#define S6(i,j,k) { hash(6); hash(i); hash(j); hash(k); } -#define S7(i,j,k) { hash(7); hash(i); hash(j); hash(k); } -#define S8(i,j,k) { hash(8); hash(i); hash(j); hash(k); } -#define S9(i,j,k) { hash(9); hash(i); hash(j); hash(k); } -#define S10(i,j,k) { hash(10); hash(i); hash(j); hash(k); } -#define S11(i,j,k) { hash(11); hash(i); hash(j); hash(k); } -#define S12(i,j,k) { hash(12); hash(i); hash(j); hash(k); } -#define S13(i,j,k) { hash(13); hash(i); hash(j); hash(k); } -#define S14(i,j,k) { hash(14); hash(i); hash(j); hash(k); } -#define S15(i,j,k) { hash(15); hash(i); hash(j); hash(k); } - -void test(int M, int N, int O, int P, int Q, int R, int S, int T, int U) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if ((M >= 2) && (N >= 4)) { - for (c2=1;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S6(c2,1,c6) ; - S7(c2,1,c6) ; - } - for (c6=1;c6<=M;c6++) { - S3(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S1(c2,2,c6) ; - } - S1(c2,2,M) ; - for (c6=1;c6<=M-1;c6++) { - S6(c2,2,c6) ; - S7(c2,2,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S11(c2,1,c6) ; - } - for (c4=3;c4<=2*N-5;c4++) { - for (c6=1;c6<=M-1;c6++) { - if ((c4+1)%2 == 0) { - j = (c4-1)/2 ; - S10(c2,(c4-1)/2,c6) ; - } - } - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S3(c2,(c4+1)/2,c6) ; - } - } - for (c6=1;c6<=M-1;c6++) { - if (c4%2 == 0) { - j = (c4+2)/2 ; - S6(c2,(c4+2)/2,c6) ; - S7(c2,(c4+2)/2,c6) ; - } - if ((c4+1)%2 == 0) { - j = (c4+3)/2 ; - S1(c2,(c4+3)/2,c6) ; - } - } - if ((c4+1)%2 == 0) { - j = (c4+3)/2 ; - S1(c2,(c4+3)/2,M) ; - } - for (c6=1;c6<=M-1;c6++) { - if (c4%2 == 0) { - S11(c2,c4/2,c6) ; - } - } - } - c4 = 2*N-4 ; - for (c6=1;c6<=M-1;c6++) { - j = N-1 ; - S6(c2,N-1,c6) ; - S7(c2,N-1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - j = N-2 ; - S11(c2,N-2,c6) ; - } - c4 = 2*N-3 ; - for (c6=1;c6<=M-1;c6++) { - j = N-2 ; - S10(c2,N-2,c6) ; - } - for (c6=1;c6<=M;c6++) { - j = N-1 ; - S3(c2,N-1,c6) ; - } - c4 = 2*N-2 ; - for (c6=1;c6<=M-1;c6++) { - j = N-1 ; - S11(c2,N-1,c6) ; - } - c4 = 2*N-1 ; - for (c6=1;c6<=M-1;c6++) { - j = N-1 ; - S10(c2,N-1,c6) ; - } - } - } - if ((M >= 2) && (N == 3)) { - for (c2=1;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S6(c2,1,c6) ; - S7(c2,1,c6) ; - } - for (c6=1;c6<=M;c6++) { - S3(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S1(c2,2,c6) ; - } - S1(c2,2,M) ; - for (c6=1;c6<=M-1;c6++) { - S6(c2,2,c6) ; - S7(c2,2,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S11(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S10(c2,1,c6) ; - } - for (c6=1;c6<=M;c6++) { - S3(c2,2,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S11(c2,2,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S10(c2,2,c6) ; - } - } - } - if ((M >= 2) && (N == 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S6(c2,1,c6) ; - S7(c2,1,c6) ; - } - for (c6=1;c6<=M;c6++) { - S3(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S11(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S10(c2,1,c6) ; - } - } - } - if ((M == 1) && (N >= 3)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=-1;c4<=0;c4++) { - if ((c4+1)%2 == 0) { - j = (c4+3)/2 ; - S1(c2,(c4+3)/2,1) ; - } - } - for (c4=1;c4<=2*N-5;c4++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S3(c2,(c4+1)/2,1) ; - } - if ((c4+1)%2 == 0) { - j = (c4+3)/2 ; - S1(c2,(c4+3)/2,1) ; - } - } - for (c4=2*N-4;c4<=2*N-3;c4++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S3(c2,(c4+1)/2,1) ; - } - } - } - } - if ((M == 1) && (N == 2)) { - for (c2=1;c2<=O-1;c2++) { - S1(c2,1,1) ; - S3(c2,1,1) ; - } - } - if ((M >= 2) && (N >= 3)) { - for (c2=1;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S2(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S8(c2,1,c6) ; - } - for (c4=3;c4<=2*N-2;c4++) { - for (c6=1;c6<=M;c6++) { - if (c4%2 == 0) { - S2(c2,c4/2,c6) ; - } - } - for (c6=1;c6<=M-1;c6++) { - if (c4%2 == 0) { - S8(c2,c4/2,c6) ; - } - } - for (c6=1;c6<=M-1;c6++) { - if ((c4+1)%2 == 0) { - j = (c4-1)/2 ; - S9(c2,(c4-1)/2,c6) ; - } - } - } - c4 = 2*N-1 ; - for (c6=1;c6<=M-1;c6++) { - j = N-1 ; - S9(c2,N-1,c6) ; - } - } - } - if ((M >= 2) && (N == 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S2(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S8(c2,1,c6) ; - } - for (c6=1;c6<=M-1;c6++) { - S9(c2,1,c6) ; - } - } - } - if ((M == 1) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=2;c4<=2*N-2;c4++) { - if (c4%2 == 0) { - S2(c2,c4/2,1) ; - } - } - } - } - if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S4(c2,c4,c6) ; - } - } - } - } - if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S5(c2,c4,c6) ; - } - } - } - } - if ((M >= P+1) && (N >= Q+1)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S12(c2,c4,c6) ; - } - } - } - } - if ((M >= 2) && (N >= Q+1)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S13(c2,c4,c6) ; - } - } - } - } - if ((M >= P+1) && (N >= 2)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S14(c2,c4,c6) ; - } - } - } - } - if ((M >= 2) && (N >= 2)) { - for (c2=R;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S15(c2,c4,c6) ; - } - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/mg-interp2.c b/cloog-0.17.0/test/reservoir/mg-interp2.c deleted file mode 100644 index 688cc91..0000000 --- a/cloog-0.17.0/test/reservoir/mg-interp2.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/mg-interp2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.11s. */ -if (O >= 2) { - if ((M >= P+1) && (N >= Q+1)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S1(c2,c4,c6) ; - } - } - } - } - if ((M >= 2) && (N >= Q+1)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S2(c2,c4,c6) ; - } - } - } - } - if ((M >= P+1) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S3(c2,c4,c6) ; - } - } - } - } - if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S4(c2,c4,c6) ; - } - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/mg-interp2.cloog b/cloog-0.17.0/test/reservoir/mg-interp2.cloog deleted file mode 100755 index d1218bc..0000000 --- a/cloog-0.17.0/test/reservoir/mg-interp2.cloog +++ /dev/null @@ -1,112 +0,0 @@ -# Language -c - -# Context - - 1 11 - 1 0 0 0 0 0 0 0 0 0 1 -0 - -# Number of statments -4 - -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-p >= 0, -j+m-1 >= 0, k-o >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 -1 0 0 0 0 0 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 -1 0 0 0 0 0 0 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-p >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 -1 0 0 0 0 0 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-o >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 -1 0 0 0 0 0 0 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q,r,s,t) | i-1 >= 0, -i+n-1 >= 0, j-1 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 14 - 1 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 1 0 -1 0 0 1 0 0 0 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 -1 1 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -4 - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 21 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/mg-interp2.good.c b/cloog-0.17.0/test/reservoir/mg-interp2.good.c deleted file mode 100644 index 2e1f365..0000000 --- a/cloog-0.17.0/test/reservoir/mg-interp2.good.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/mg-interp2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.07s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } -#define S4(i,j,k) { hash(4); hash(i); hash(j); hash(k); } - -void test(int M, int N, int O, int P, int Q, int R, int S, int T, int U) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if ((M >= P+1) && (N >= Q+1)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S1(c2,c4,c6) ; - } - } - } - } - if ((M >= 2) && (N >= Q+1)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=Q;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S2(c2,c4,c6) ; - } - } - } - } - if ((M >= P+1) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=P;c6<=M-1;c6++) { - S3(c2,c4,c6) ; - } - } - } - } - if ((M >= 2) && (N >= 2)) { - for (c2=1;c2<=O-1;c2++) { - for (c4=1;c4<=N-1;c4++) { - for (c6=1;c6<=M-1;c6++) { - S4(c2,c4,c6) ; - } - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/mg-psinv.c b/cloog-0.17.0/test/reservoir/mg-psinv.c deleted file mode 100644 index a0447e1..0000000 --- a/cloog-0.17.0/test/reservoir/mg-psinv.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/mg-psinv.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.02s. */ -if ((M >= 1) && (N >= 3) && (O >= 3)) { - if (M >= 3) { - for (c2=2;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,2,c6); - S2(c2,2,c6); - } - for (c4=4;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - S1(c2,(c4+1)/2,c6); - S2(c2,(c4+1)/2,c6); - } - } - for (c6=2;c6<=M-1;c6++) { - if (c4%2 == 0) { - S3(c2,c4/2,c6); - } - } - } - for (c6=2;c6<=M-1;c6++) { - S3(c2,N-1,c6); - } - } - } - if (M <= 2) { - for (c2=2;c2<=O-1;c2++) { - for (c4=3;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - S1(c2,(c4+1)/2,c6); - S2(c2,(c4+1)/2,c6); - } - } - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/mg-psinv.cloog b/cloog-0.17.0/test/reservoir/mg-psinv.cloog deleted file mode 100755 index 7f0dd2c..0000000 --- a/cloog-0.17.0/test/reservoir/mg-psinv.cloog +++ /dev/null @@ -1,88 +0,0 @@ -# Language -c - -# Context - - 1 5 - 1 0 0 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j,k,l,m,n) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 8 - 1 1 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 -1 - 1 0 1 0 0 0 0 -2 - 1 0 -1 0 0 1 0 -1 - 1 0 0 1 0 0 0 -1 - 1 0 0 -1 1 0 0 0 - 1 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 8 - 1 1 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 -1 - 1 0 1 0 0 0 0 -2 - 1 0 -1 0 0 1 0 -1 - 1 0 0 1 0 0 0 -1 - 1 0 0 -1 1 0 0 0 - 1 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 8 - 1 1 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 -1 - 1 0 1 0 0 0 0 -2 - 1 0 -1 0 0 1 0 -1 - 1 0 0 1 0 0 0 -2 - 1 0 0 -1 1 0 0 -1 - 1 0 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 8 15 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 15 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 15 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/mg-psinv.good.c b/cloog-0.17.0/test/reservoir/mg-psinv.good.c deleted file mode 100644 index cb5b57c..0000000 --- a/cloog-0.17.0/test/reservoir/mg-psinv.good.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/mg-psinv.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.05s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } - -void test(int M, int N, int O) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if ((M >= 3) && (N >= 4)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,2,c6) ; - S2(c2,2,c6) ; - } - for (c4=4;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S1(c2,(c4+1)/2,c6) ; - S2(c2,(c4+1)/2,c6) ; - } - } - for (c6=2;c6<=M-1;c6++) { - if (c4%2 == 0) { - S3(c2,c4/2,c6) ; - } - } - } - c4 = 2*N-2 ; - for (c6=2;c6<=M-1;c6++) { - j = N-1 ; - S3(c2,N-1,c6) ; - } - } - } - if ((M >= 3) && (N == 3)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,2,c6) ; - S2(c2,2,c6) ; - } - for (c6=2;c6<=M-1;c6++) { - S3(c2,2,c6) ; - } - } - } - if ((M >= 1) && (M <= 2) && (N >= 3)) { - for (c2=2;c2<=O-1;c2++) { - for (c4=3;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S1(c2,(c4+1)/2,c6) ; - S2(c2,(c4+1)/2,c6) ; - } - } - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/mg-resid.c b/cloog-0.17.0/test/reservoir/mg-resid.c deleted file mode 100644 index 89a3cda..0000000 --- a/cloog-0.17.0/test/reservoir/mg-resid.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/mg-resid.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.03s. */ -if ((M >= 1) && (N >= 3) && (O >= 3)) { - if (M >= 3) { - for (c2=2;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,2,c6); - S2(c2,2,c6); - } - for (c4=4;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - S1(c2,(c4+1)/2,c6); - S2(c2,(c4+1)/2,c6); - } - } - for (c6=2;c6<=M-1;c6++) { - if (c4%2 == 0) { - S3(c2,c4/2,c6); - } - } - } - for (c6=2;c6<=M-1;c6++) { - S3(c2,N-1,c6); - } - } - } - if (M <= 2) { - for (c2=2;c2<=O-1;c2++) { - for (c4=3;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - S1(c2,(c4+1)/2,c6); - S2(c2,(c4+1)/2,c6); - } - } - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/mg-resid.cloog b/cloog-0.17.0/test/reservoir/mg-resid.cloog deleted file mode 100755 index 7f0dd2c..0000000 --- a/cloog-0.17.0/test/reservoir/mg-resid.cloog +++ /dev/null @@ -1,88 +0,0 @@ -# Language -c - -# Context - - 1 5 - 1 0 0 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j,k,l,m,n) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 8 - 1 1 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 -1 - 1 0 1 0 0 0 0 -2 - 1 0 -1 0 0 1 0 -1 - 1 0 0 1 0 0 0 -1 - 1 0 0 -1 1 0 0 0 - 1 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 8 - 1 1 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 -1 - 1 0 1 0 0 0 0 -2 - 1 0 -1 0 0 1 0 -1 - 1 0 0 1 0 0 0 -1 - 1 0 0 -1 1 0 0 0 - 1 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 8 - 1 1 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 -1 - 1 0 1 0 0 0 0 -2 - 1 0 -1 0 0 1 0 -1 - 1 0 0 1 0 0 0 -2 - 1 0 0 -1 1 0 0 -1 - 1 0 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 8 15 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 15 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 15 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/mg-resid.good.c b/cloog-0.17.0/test/reservoir/mg-resid.good.c deleted file mode 100644 index 4056aab..0000000 --- a/cloog-0.17.0/test/reservoir/mg-resid.good.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/mg-resid.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.05s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } - -void test(int M, int N, int O) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if ((M >= 3) && (N >= 4)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,2,c6) ; - S2(c2,2,c6) ; - } - for (c4=4;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S1(c2,(c4+1)/2,c6) ; - S2(c2,(c4+1)/2,c6) ; - } - } - for (c6=2;c6<=M-1;c6++) { - if (c4%2 == 0) { - S3(c2,c4/2,c6) ; - } - } - } - c4 = 2*N-2 ; - for (c6=2;c6<=M-1;c6++) { - j = N-1 ; - S3(c2,N-1,c6) ; - } - } - } - if ((M >= 3) && (N == 3)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=1;c6<=M;c6++) { - S1(c2,2,c6) ; - S2(c2,2,c6) ; - } - for (c6=2;c6<=M-1;c6++) { - S3(c2,2,c6) ; - } - } - } - if ((M >= 1) && (M <= 2) && (N >= 3)) { - for (c2=2;c2<=O-1;c2++) { - for (c4=3;c4<=2*N-3;c4++) { - for (c6=1;c6<=M;c6++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S1(c2,(c4+1)/2,c6) ; - S2(c2,(c4+1)/2,c6) ; - } - } - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/mg-rprj3.c b/cloog-0.17.0/test/reservoir/mg-rprj3.c deleted file mode 100644 index f7f7a4d..0000000 --- a/cloog-0.17.0/test/reservoir/mg-rprj3.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/mg-rprj3.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.10s. */ -if ((M >= 2) && (N >= 3) && (O >= 3)) { - if (M >= 3) { - for (c2=2;c2<=O-1;c2++) { - for (c6=2;c6<=M;c6++) { - S1(c2,2,c6); - } - for (c4=3;c4<=N-1;c4++) { - for (c6=2;c6<=M;c6++) { - S2(c2,c4-1,c6); - } - S4(c2,c4-1,2); - for (c6=2;c6<=M-2;c6++) { - S3(c2,c4-1,c6); - S5(c2,c4-1,c6); - S4(c2,c4-1,c6+1); - } - S3(c2,c4-1,M-1); - S5(c2,c4-1,M-1); - for (c6=2;c6<=M;c6++) { - S1(c2,c4,c6); - } - } - for (c6=2;c6<=M;c6++) { - S2(c2,N-1,c6); - } - S4(c2,N-1,2); - for (c6=2;c6<=M-2;c6++) { - S3(c2,N-1,c6); - S5(c2,N-1,c6); - S4(c2,N-1,c6+1); - } - S3(c2,N-1,M-1); - S5(c2,N-1,M-1); - } - } - if (M == 2) { - for (c2=2;c2<=O-1;c2++) { - S1(c2,2,2); - for (c4=3;c4<=N-1;c4++) { - S2(c2,c4-1,2); - S1(c2,c4,2); - } - S2(c2,N-1,2); - } - } -} diff --git a/cloog-0.17.0/test/reservoir/mg-rprj3.cloog b/cloog-0.17.0/test/reservoir/mg-rprj3.cloog deleted file mode 100755 index adf72fd..0000000 --- a/cloog-0.17.0/test/reservoir/mg-rprj3.cloog +++ /dev/null @@ -1,136 +0,0 @@ -# Language -c - -# Context - - 1 8 - 1 0 0 0 0 0 0 1 -0 - -# Number of statments -5 - -1 -# { (i,j,k,l,m,n,o,p,q) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+l >= 0, 1 >= 0 } - - 7 11 - 1 1 0 0 0 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 -2 - 1 0 -1 0 0 1 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 -2 - 1 0 0 -1 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+l >= 0, 1 >= 0 } - - 7 11 - 1 1 0 0 0 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 -2 - 1 0 -1 0 0 1 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 -2 - 1 0 0 -1 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 11 - 1 1 0 0 0 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 -2 - 1 0 -1 0 0 1 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 -2 - 1 0 0 -1 1 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 11 - 1 1 0 0 0 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 -2 - 1 0 -1 0 0 1 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 -2 - 1 0 0 -1 1 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m,n,o,p,q) | i-2 >= 0, -i+n-1 >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+l-1 >= 0, 1 >= 0 } - - 7 11 - 1 1 0 0 0 0 0 0 0 0 -2 - 1 -1 0 0 0 0 1 0 0 0 -1 - 1 0 1 0 0 0 0 0 0 0 -2 - 1 0 -1 0 0 1 0 0 0 0 -1 - 1 0 0 1 0 0 0 0 0 0 -2 - 1 0 0 -1 1 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -5 - - 8 18 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 18 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 18 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 18 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 1 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -2 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 18 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/mg-rprj3.good.c b/cloog-0.17.0/test/reservoir/mg-rprj3.good.c deleted file mode 100644 index 38ac53e..0000000 --- a/cloog-0.17.0/test/reservoir/mg-rprj3.good.c +++ /dev/null @@ -1,163 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/mg-rprj3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.39s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } -#define S4(i,j,k) { hash(4); hash(i); hash(j); hash(k); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } - -void test(int M, int N, int O, int P, int Q, int R) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if ((M >= 4) && (N >= 4)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=2;c6<=M;c6++) { - S1(c2,2,c6) ; - } - for (c4=3;c4<=N-1;c4++) { - for (c6=2;c6<=M;c6++) { - j = c4-1 ; - S2(c2,c4-1,c6) ; - } - j = c4-1 ; - S4(c2,c4-1,2) ; - for (c6=2;c6<=M-2;c6++) { - j = c4-1 ; - S3(c2,c4-1,c6) ; - j = c4-1 ; - S5(c2,c4-1,c6) ; - j = c4-1 ; - k = c6+1 ; - S4(c2,c4-1,c6+1) ; - } - c6 = M-1 ; - j = c4-1 ; - k = M-1 ; - S3(c2,c4-1,M-1) ; - j = c4-1 ; - k = M-1 ; - S5(c2,c4-1,M-1) ; - for (c6=2;c6<=M;c6++) { - S1(c2,c4,c6) ; - } - } - for (c6=2;c6<=M;c6++) { - j = N-1 ; - S2(c2,N-1,c6) ; - } - j = N-1 ; - S4(c2,N-1,2) ; - for (c6=2;c6<=M-2;c6++) { - j = N-1 ; - S3(c2,N-1,c6) ; - j = N-1 ; - S5(c2,N-1,c6) ; - j = N-1 ; - k = c6+1 ; - S4(c2,N-1,c6+1) ; - } - c6 = M-1 ; - j = N-1 ; - k = M-1 ; - S3(c2,N-1,M-1) ; - j = N-1 ; - k = M-1 ; - S5(c2,N-1,M-1) ; - } - } - if ((M >= 4) && (N == 3)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=2;c6<=M;c6++) { - S1(c2,2,c6) ; - } - for (c6=2;c6<=M;c6++) { - S2(c2,2,c6) ; - } - S4(c2,2,2) ; - for (c6=2;c6<=M-2;c6++) { - S3(c2,2,c6) ; - S5(c2,2,c6) ; - k = c6+1 ; - S4(c2,2,c6+1) ; - } - c6 = M-1 ; - k = M-1 ; - S3(c2,2,M-1) ; - k = M-1 ; - S5(c2,2,M-1) ; - } - } - if ((M == 3) && (N == 3)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=2;c6<=3;c6++) { - S1(c2,2,c6) ; - } - for (c6=2;c6<=3;c6++) { - S2(c2,2,c6) ; - } - S4(c2,2,2) ; - S3(c2,2,2) ; - S5(c2,2,2) ; - } - } - if ((M == 3) && (N >= 4)) { - for (c2=2;c2<=O-1;c2++) { - for (c6=2;c6<=3;c6++) { - S1(c2,2,c6) ; - } - for (c4=3;c4<=N-1;c4++) { - for (c6=2;c6<=3;c6++) { - j = c4-1 ; - S2(c2,c4-1,c6) ; - } - j = c4-1 ; - S4(c2,c4-1,2) ; - j = c4-1 ; - S3(c2,c4-1,2) ; - j = c4-1 ; - S5(c2,c4-1,2) ; - for (c6=2;c6<=3;c6++) { - S1(c2,c4,c6) ; - } - } - for (c6=2;c6<=3;c6++) { - j = N-1 ; - S2(c2,N-1,c6) ; - } - j = N-1 ; - S4(c2,N-1,2) ; - j = N-1 ; - S3(c2,N-1,2) ; - j = N-1 ; - S5(c2,N-1,2) ; - } - } - if ((M == 2) && (N >= 4)) { - for (c2=2;c2<=O-1;c2++) { - S1(c2,2,2) ; - for (c4=3;c4<=N-1;c4++) { - j = c4-1 ; - S2(c2,c4-1,2) ; - S1(c2,c4,2) ; - } - j = N-1 ; - S2(c2,N-1,2) ; - } - } - if ((M == 2) && (N == 3)) { - for (c2=2;c2<=O-1;c2++) { - S1(c2,2,2) ; - S2(c2,2,2) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/pingali1.c b/cloog-0.17.0/test/reservoir/pingali1.c deleted file mode 100644 index 505df8d..0000000 --- a/cloog-0.17.0/test/reservoir/pingali1.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/pingali1.cloog by CLooG 0.14.0-225-g6e2d019 gmp bits in 0.01s. */ -if ((M >= 1) && (N >= 1)) { - if (N >= 2) { - for (c2=1;c2<=M;c2++) { - S2(c2,1); - for (c4=3;c4<=2*N-1;c4++) { - for (c6=max(1,c4-N);c6<=floord(c4-1,2);c6++) { - S1(c2,c4-c6,c6); - } - if ((c4+1)%2 == 0) { - S2(c2,(c4+1)/2); - } - } - } - } - if (N == 1) { - for (c2=1;c2<=M;c2++) { - S2(c2,1); - } - } -} diff --git a/cloog-0.17.0/test/reservoir/pingali1.cloog b/cloog-0.17.0/test/reservoir/pingali1.cloog deleted file mode 100755 index 0be0a2a..0000000 --- a/cloog-0.17.0/test/reservoir/pingali1.cloog +++ /dev/null @@ -1,61 +0,0 @@ -# Language -c - -# Context - - 1 4 - 1 0 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k,l,m) | i-1 >= 0, -i+l >= 0, -j+m >= 0, k-1 >= 0, j-k-1 >= 0, 1 >= 0 } - - 6 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 1 0 0 - 1 0 -1 0 0 1 0 - 1 0 0 1 0 0 -1 - 1 0 1 -1 0 0 -1 - 1 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+l >= 0, 1 >= 0 } - - 5 6 - 1 1 0 0 0 -1 - 1 -1 0 1 0 0 - 1 0 1 0 0 -1 - 1 0 -1 0 1 0 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 8 14 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -2 0 0 1 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/pingali1.good.c b/cloog-0.17.0/test/reservoir/pingali1.good.c deleted file mode 100644 index b72eb17..0000000 --- a/cloog-0.17.0/test/reservoir/pingali1.good.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if (N >= 2) { - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=2;c4++) { - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S2(c2,(c4+1)/2) ; - } - } - for (c4=3;c4<=2*N-1;c4++) { - for (c6=max(1,c4-N);c6<=floord(c4-1,2);c6++) { - j = c4-c6 ; - S1(c2,c4-c6,c6) ; - } - if ((c4+1)%2 == 0) { - j = (c4+1)/2 ; - S2(c2,(c4+1)/2) ; - } - } - } - } - if (N == 1) { - for (c2=1;c2<=M;c2++) { - S2(c2,1) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/pingali2.c b/cloog-0.17.0/test/reservoir/pingali2.c deleted file mode 100644 index b09c4f9..0000000 --- a/cloog-0.17.0/test/reservoir/pingali2.c +++ /dev/null @@ -1,13 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -if (M >= 1) { - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c2,c4) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/pingali2.cloog b/cloog-0.17.0/test/reservoir/pingali2.cloog deleted file mode 100755 index 0f89038..0000000 --- a/cloog-0.17.0/test/reservoir/pingali2.cloog +++ /dev/null @@ -1,56 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - - - 6 10 - 0 1 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/pingali2.good.c b/cloog-0.17.0/test/reservoir/pingali2.good.c deleted file mode 100644 index 9341731..0000000 --- a/cloog-0.17.0/test/reservoir/pingali2.good.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c2,c4) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/pingali3.c b/cloog-0.17.0/test/reservoir/pingali3.c deleted file mode 100644 index b53542a..0000000 --- a/cloog-0.17.0/test/reservoir/pingali3.c +++ /dev/null @@ -1,15 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali3.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (M >= 1) { - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - for (c6=1;c6<=M;c6++) { - S2(c2,c4,c6) ; - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/pingali3.cloog b/cloog-0.17.0/test/reservoir/pingali3.cloog deleted file mode 100755 index 8f345c0..0000000 --- a/cloog-0.17.0/test/reservoir/pingali3.cloog +++ /dev/null @@ -1,62 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | i-1 >= 0, -i+l >= 0, j-1 >= 0, -j+l >= 0, k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 7 6 - 1 1 0 0 0 -1 - 1 -1 0 0 1 0 - 1 0 1 0 0 -1 - 1 0 -1 0 1 0 - 1 0 0 1 0 -1 - 1 0 0 -1 1 0 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/pingali3.good.c b/cloog-0.17.0/test/reservoir/pingali3.good.c deleted file mode 100644 index 5b5e4a9..0000000 --- a/cloog-0.17.0/test/reservoir/pingali3.good.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - for (c6=1;c6<=M;c6++) { - S2(c2,c4,c6) ; - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/pingali4.c b/cloog-0.17.0/test/reservoir/pingali4.c deleted file mode 100644 index 9905699..0000000 --- a/cloog-0.17.0/test/reservoir/pingali4.c +++ /dev/null @@ -1,11 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali4.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } -} -for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c2,c4) ; - } -} diff --git a/cloog-0.17.0/test/reservoir/pingali4.cloog b/cloog-0.17.0/test/reservoir/pingali4.cloog deleted file mode 100755 index 46f4e07..0000000 --- a/cloog-0.17.0/test/reservoir/pingali4.cloog +++ /dev/null @@ -1,57 +0,0 @@ -# Language -c - -# Context - - 2 3 - 1 1 -2 - 1 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | i-1 >= 0, -i+k >= 0, j-1 >= 0, -j+k >= 0, 1 >= 0 } - - 5 5 - 1 1 0 0 -1 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 0 -1 1 0 - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - - - 6 10 - 0 1 0 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/pingali4.good.c b/cloog-0.17.0/test/reservoir/pingali4.good.c deleted file mode 100644 index 5b61707..0000000 --- a/cloog-0.17.0/test/reservoir/pingali4.good.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali4.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4; - /* Original iterators. */ - int i, j; - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S1(c2,c4) ; - } - } - for (c2=1;c2<=M;c2++) { - for (c4=1;c4<=M;c4++) { - S2(c2,c4) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/pingali5.c b/cloog-0.17.0/test/reservoir/pingali5.c deleted file mode 100644 index 1b2c415..0000000 --- a/cloog-0.17.0/test/reservoir/pingali5.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/pingali5.cloog by CLooG 0.14.0-225-g6e2d019 gmp bits in 0.02s. */ -if (M >= 2) { - for (c2=3;c2<=2*M-3;c2++) { - for (c4=ceild(c2+3,2);c4<=M;c4++) { - for (i=ceild(c2+1,2);i<=min(c2-1,c4-1);i++) { - S1(i,c2-i,c4); - } - } - for (c4=max(1,c2-M);c4<=floord(c2-1,2);c4++) { - S2(c2-c4,c4); - } - for (c4=ceild(c2+3,2);c4<=M;c4++) { - for (i=ceild(c2+1,2);i<=min(c2-1,c4-1);i++) { - S3(i,c2-i,c4); - } - } - } - for (c2=max(M+1,2*M-2);c2<=2*M-1;c2++) { - S2(M,c2-M); - } -} diff --git a/cloog-0.17.0/test/reservoir/pingali5.cloog b/cloog-0.17.0/test/reservoir/pingali5.cloog deleted file mode 100755 index 2933d75..0000000 --- a/cloog-0.17.0/test/reservoir/pingali5.cloog +++ /dev/null @@ -1,81 +0,0 @@ -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statments -3 - -1 -# { (i,j,k,l) | j-1 >= 0, i-j-1 >= 0, -i+k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 5 6 - 1 0 1 0 0 -1 - 1 1 -1 0 0 -1 - 1 -1 0 1 0 -1 - 1 0 0 -1 1 0 - 1 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k) | -i+k >= 0, j-1 >= 0, i-j-1 >= 0, 1 >= 0 } - - 4 5 - 1 -1 0 1 0 - 1 0 1 0 -1 - 1 1 -1 0 -1 - 1 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l) | j-1 >= 0, i-j-1 >= 0, -i+k-1 >= 0, -k+l >= 0, 1 >= 0 } - - 5 6 - 1 0 1 0 0 -1 - 1 1 -1 0 0 -1 - 1 -1 0 1 0 -1 - 1 0 0 -1 1 0 - 1 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -3 - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 12 - 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 -1 0 0 - 0 0 0 1 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 -1 - 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 1 - - - 8 13 - 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -1 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 1 0 0 0 0 0 -1 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/pingali5.good.c b/cloog-0.17.0/test/reservoir/pingali5.good.c deleted file mode 100644 index 351e5d3..0000000 --- a/cloog-0.17.0/test/reservoir/pingali5.good.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali5.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.03s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } - -void test(int M) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - for (c2=3;c2<=2*M-3;c2++) { - for (c4=ceild(c2+3,2);c4<=M;c4++) { - for (i=ceild(c2+1,2);i<=min(c4-1,c2-1);i++) { - j = c2-i ; - S1(i,c2-i,c4) ; - } - } - for (c4=max(1,c2-M);c4<=floord(c2-1,2);c4++) { - i = c2-c4 ; - S2(c2-c4,c4) ; - } - for (c4=ceild(c2+3,2);c4<=M;c4++) { - for (i=ceild(c2+1,2);i<=min(c4-1,c2-1);i++) { - j = c2-i ; - S3(i,c2-i,c4) ; - } - } - } - for (c2=max(2*M-2,3);c2<=2*M-1;c2++) { - for (c4=max(1,c2-M);c4<=floord(c2-1,2);c4++) { - i = c2-c4 ; - S2(c2-c4,c4) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/pingali6.c b/cloog-0.17.0/test/reservoir/pingali6.c deleted file mode 100644 index 5ce4a85..0000000 --- a/cloog-0.17.0/test/reservoir/pingali6.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali6.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.04s. */ -if (N >= 3) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S1(1,c4,c6) ; - } - } - for (c2=3;c2<=2*M;c2++) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if (c2%2 == 0) { - S1(c2/2,c4,c6) ; - } - } - } - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if ((c2+1)%2 == 0) { - S2((c2-1)/2,c4,c6) ; - } - } - } - } - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S2(M,c4,c6) ; - } - } -} diff --git a/cloog-0.17.0/test/reservoir/pingali6.cloog b/cloog-0.17.0/test/reservoir/pingali6.cloog deleted file mode 100755 index 93726ec..0000000 --- a/cloog-0.17.0/test/reservoir/pingali6.cloog +++ /dev/null @@ -1,66 +0,0 @@ -# Language -c - -# Context - - 3 4 - 1 1 0 -1 - 1 0 1 -1 - 1 0 0 1 -0 - -# Number of statments -2 - -1 -# { (i,j,k,l,m) | i-1 >= 0, -i+l >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+m-1 >= 0, 1 >= 0 } - - 7 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 1 0 0 - 1 0 1 0 0 0 -2 - 1 0 -1 0 0 1 -1 - 1 0 0 1 0 0 -2 - 1 0 0 -1 0 1 -1 - 1 0 0 0 0 0 1 - -0 0 0 -1 -# { (i,j,k,l,m) | i-1 >= 0, -i+l >= 0, j-2 >= 0, -j+m-1 >= 0, k-2 >= 0, -k+m-1 >= 0, 1 >= 0 } - - 7 7 - 1 1 0 0 0 0 -1 - 1 -1 0 0 1 0 0 - 1 0 1 0 0 0 -2 - 1 0 -1 0 0 1 -1 - 1 0 0 1 0 0 -2 - 1 0 0 -1 0 1 -1 - 1 0 0 0 0 0 1 - -0 0 0 -0 -# Scattering functions -2 - - 8 14 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -2 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - - - 8 14 - 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 -2 0 0 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 1 0 0 0 0 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/pingali6.good.c b/cloog-0.17.0/test/reservoir/pingali6.good.c deleted file mode 100644 index 26e9831..0000000 --- a/cloog-0.17.0/test/reservoir/pingali6.good.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/pingali6.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.03s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int c2, c4, c6; - /* Original iterators. */ - int i, j, k; - if (N >= 3) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S1(1,c4,c6) ; - } - } - } - if (N >= 3) { - for (c2=3;c2<=2*M;c2++) { - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if (c2%2 == 0) { - S1(c2/2,c4,c6) ; - } - } - } - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - if ((c2+1)%2 == 0) { - i = (c2-1)/2 ; - S2((c2-1)/2,c4,c6) ; - } - } - } - } - } - if (N >= 3) { - c2 = 2*M+1 ; - for (c4=2;c4<=N-1;c4++) { - for (c6=2;c6<=N-1;c6++) { - S2(M,c4,c6) ; - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/stride.c b/cloog-0.17.0/test/reservoir/stride.c deleted file mode 100644 index e22c74b..0000000 --- a/cloog-0.17.0/test/reservoir/stride.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/reservoir/stride.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -if (M >= 2) { - for (c2=2;c2<=M;c2+=7) { - S1(c2,(c2-2)/7) ; - } -} diff --git a/cloog-0.17.0/test/reservoir/stride.cloog b/cloog-0.17.0/test/reservoir/stride.cloog deleted file mode 100644 index 760a1a6..0000000 --- a/cloog-0.17.0/test/reservoir/stride.cloog +++ /dev/null @@ -1,45 +0,0 @@ -# -# Stride-bug: -# -# for (i = 2; i <= N; i+=7) { -# S(i); -# -# becomes: -# -# for (i = 5; i <= N; i+=7) { -# S(i); - -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statements -1 - -1 - - 4 5 - 0 1 -7 0 -2 - 1 1 0 0 -2 - 1 -1 0 1 0 - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -1 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/stride2.c b/cloog-0.17.0/test/reservoir/stride2.c deleted file mode 100644 index 8c2b7bf..0000000 --- a/cloog-0.17.0/test/reservoir/stride2.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/reservoir/stride2.cloog by CLooG 0.16.1-2-g0ae5c85 gmp bits in 0.00s. */ -if (M >= 2) { - for (c2=2;c2<=M;c2+=7) { - S1(c2,(c2-2)/7); - } -} diff --git a/cloog-0.17.0/test/reservoir/stride2.cloog b/cloog-0.17.0/test/reservoir/stride2.cloog deleted file mode 100644 index 5fb9b14..0000000 --- a/cloog-0.17.0/test/reservoir/stride2.cloog +++ /dev/null @@ -1,45 +0,0 @@ -# -# Stride-bug: -# -# for (i = 2; i <= N; i+=7) { -# S(i); -# -# becomes: -# -# for (i = 5; i <= N; i+=7) { -# S(i); - -# Language -c - -# Context - - 1 3 - 1 0 1 -0 - -# Number of statements -1 - -1 - - 4 5 - 0 1 -7 0 -2 # i - 7j = 2 - 1 1 0 0 0 # i >= 0 - 1 -1 0 1 0 # i <= n - 1 0 0 0 1 - -0 0 0 -0 -# Scattering functions -1 - - 6 10 - 0 1 0 0 0 0 0 0 0 0 - 0 0 1 0 0 0 -1 0 0 0 - 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 - 1 0 0 0 0 0 0 0 0 1 - -0 diff --git a/cloog-0.17.0/test/reservoir/tang-xue1.c b/cloog-0.17.0/test/reservoir/tang-xue1.c deleted file mode 100644 index 7dd0610..0000000 --- a/cloog-0.17.0/test/reservoir/tang-xue1.c +++ /dev/null @@ -1,14 +0,0 @@ -/* Generated from ../../../git/cloog/test/reservoir/tang-xue1.cloog by CLooG 0.14.0-165-g01eb246 gmp bits in 0.01s. */ -for (c2=0;c2<=9;c2++) { - for (c4=max(-1,c2-9);c4<=min(4,c2+3);c4++) { - for (c6=max(max(1,c2),c2-c4);c6<=min(min(9,c2+1),c2-c4+4);c6++) { - for (c8=max(1,-c2+c4+c6);c8<=min(4,-c2+c4+c6+1);c8++) { - if (c2%2 == 0) { - if (c4%2 == 0) { - S1(c2/2,(-c2+c4)/2,-c2+c6,-c4+c8); - } - } - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/tang-xue1.cloog b/cloog-0.17.0/test/reservoir/tang-xue1.cloog deleted file mode 100644 index bf9b92b..0000000 --- a/cloog-0.17.0/test/reservoir/tang-xue1.cloog +++ /dev/null @@ -1,80 +0,0 @@ -# -# Example 1 in "Generating Efficient Tiled Code for Distributed Memory -# Machines", Peiyi Tang and Jingling Xue. -# - -# for (int i = 1; i <= 9; i++) { -# for (int j = 1; j <= 4; j++) { -# A[i,2*j] = A[i,2*j-2] + A[i-1,2*j-2]; -# } -# } -# -# We tile it with a tiling matrix H = [1/2 0] -# [-1/2 1/2] -# -# We get: -# -# for (int i = 0; i <= 9; i += 2) { -# for (int j = max(-1, -9 + i); j <= min(4, 3 + i); j++) { -# for (int k = max(1, i, i-j); k <= min(4 + i -j, 1 + i, 9); k++) { -# for (int l = max(-i + j + k, 1); l <= min(4, 1 -i + j + k); l++) { -# if (i % 2 == 0) { -# if ((i + j) % 2 == 0) { -# A[k, 2 * l] = A[k, -2 + 2 * l] + A[-1 + k, -2 + 2 * l]; -# } -# } -# } -# } -# } -# } -# - -# language: C -c - -# parameter (none) -1 2 -# 1 -1 1 -0 - -1 # number of statements - -1 -# -2i-2j -l +4 >= 0 -# -k +l >= 0 -# -2i -k +9 >= 0 -# k >= 0 -# 2i +k -1 >= 0 -# k -l +1 >= 0 -# -k +1 >= 0 -# 2i+2j +l-1 >= 0 -8 6 -# i j k l 1 -1 -2 -2 0 -1 4 -1 0 0 -1 1 0 -1 -2 0 -1 0 9 -1 0 0 1 0 0 -1 2 0 1 0 -1 -1 0 0 1 -1 1 -1 0 0 -1 0 1 -1 2 2 0 1 -1 -0 0 0 -0 - -1 - -# Scattering functions -9 15 -# alpha=[2i, 2i+2j, 2i+k, 2i+2j+l] gamma=[0, 0, 0, 0] beta=[0, 0, 0, 0, 0, 0] -# c1 c2 c3 c4 c5 c6 c7 c8 c9 i j k l 1 -0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 -1 0 0 0 0 0 0 0 2 0 0 0 0 -0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 -1 0 0 0 0 0 2 2 0 0 0 -0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 -1 0 0 0 2 0 1 0 0 -0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 -1 0 2 2 0 1 0 -0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 diff --git a/cloog-0.17.0/test/reservoir/tang-xue1.good.c b/cloog-0.17.0/test/reservoir/tang-xue1.good.c deleted file mode 100644 index 1c4215c..0000000 --- a/cloog-0.17.0/test/reservoir/tang-xue1.good.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/tang-xue1.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k,l) { hash(1); hash(i); hash(j); hash(k); hash(l); } - -void test() -{ - /* Scattering iterators. */ - int c2, c4, c6, c8; - /* Original iterators. */ - int i, j, k, l; - for (c2=0;c2<=9;c2++) { - for (c4=max(-1,c2-9);c4<=min(4,c2+3);c4++) { - for (c6=max(max(c2,1),c2-c4);c6<=min(min(c2+1,9),c2-c4+4);c6++) { - for (c8=max(1,-c2+c4+c6);c8<=min(4,-c2+c4+c6+1);c8++) { - if (c2%2 == 0) { - if ((c2+c4)%2 == 0) { - j = (-c2+c4)/2 ; - k = -c2+c6 ; - l = -c4+c8 ; - S1(c2/2,(-c2+c4)/2,-c2+c6,-c4+c8) ; - } - } - } - } - } - } -} diff --git a/cloog-0.17.0/test/reservoir/two.c b/cloog-0.17.0/test/reservoir/two.c deleted file mode 100644 index 374e754..0000000 --- a/cloog-0.17.0/test/reservoir/two.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/./reservoir/two.cloog by CLooG 0.14.0-225-g6e2d019 gmp bits in 0.00s. */ -S1(1,1,5); diff --git a/cloog-0.17.0/test/reservoir/two.cloog b/cloog-0.17.0/test/reservoir/two.cloog deleted file mode 100644 index 60b259f..0000000 --- a/cloog-0.17.0/test/reservoir/two.cloog +++ /dev/null @@ -1,26 +0,0 @@ -# Scan -# D = { (i, j, k) | 0 <= i < 10, 1 <= j < 20, 2i + 3j = k, i + j + 3 = 3k } -# -# language: C -c - -# parameter (none) -1 2 -1 1 -0 - -1 # Number of statements - -1 -6 5 -# i j k 1 -1 1 0 0 0 -1 -1 0 0 10 -1 0 1 0 -1 -1 0 -1 0 20 -0 2 3 -1 0 -0 1 1 -1 3 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/reservoir/two.good.c b/cloog-0.17.0/test/reservoir/two.good.c deleted file mode 100644 index a80671f..0000000 --- a/cloog-0.17.0/test/reservoir/two.good.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Generated from ../../../git/cloog/test/./reservoir/two.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j,k) { hash(1); hash(i); hash(j); hash(k); } - -void test() -{ - /* Original iterators. */ - int i, j, k; - for (i=0;i<=1;i++) { - if ((i+1)%2 == 0) { - j = (-i+3)/2 ; - k = (i+9)/2 ; - S1(i,(-i+3)/2,(i+9)/2) ; - } - } -} diff --git a/cloog-0.17.0/test/singleton.c b/cloog-0.17.0/test/singleton.c deleted file mode 100644 index ad14ebe..0000000 --- a/cloog-0.17.0/test/singleton.c +++ /dev/null @@ -1,3 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/singleton.cloog by CLooG 0.14.0-242-g720faff gmp bits in 0.00s. */ -S2(); -S1(); diff --git a/cloog-0.17.0/test/singleton.cloog b/cloog-0.17.0/test/singleton.cloog deleted file mode 100644 index 8636efb..0000000 --- a/cloog-0.17.0/test/singleton.cloog +++ /dev/null @@ -1,27 +0,0 @@ -c - -0 2 - -0 - -2 - -1 -0 2 -0 0 0 - -1 -0 2 -0 0 0 - -0 - -2 - -1 3 -0 -1 0 - -1 3 -0 -1 -1 - -0 diff --git a/cloog-0.17.0/test/singleton.good.c b/cloog-0.17.0/test/singleton.good.c deleted file mode 100644 index 40106ed..0000000 --- a/cloog-0.17.0/test/singleton.good.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/singleton.cloog by CLooG 0.14.0-242-g720faff gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } -#define S2() { hash(2); } - -void test() -{ - S2(); - S1(); -} diff --git a/cloog-0.17.0/test/sor1d.c b/cloog-0.17.0/test/sor1d.c deleted file mode 100644 index da1b5ec..0000000 --- a/cloog-0.17.0/test/sor1d.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated from ../../../git/cloog/test/sor1d.cloog by CLooG 0.14.0-278-gcf1f323 gmp bits in 0.11s. */ -if ((M >= 1) && (N >= 3)) { - for (glT1=-1;glT1<=floord(3*M+N-5,100);glT1++) { - for (rp1=max(max(0,ceild(100*glT1-2*M-N+5,100)),ceild(100*glT1-N-193,300));rp1<=min(min(floord(glT1+1,3),floord(M,100)),glT1);rp1++) { - for (vT1=max(max(100*glT1-100*rp1,200*rp1-3),200*rp1-N+1);vT1<=min(min(min(2*M+N-5,100*glT1-100*rp1+99),200*rp1+N+193),100*glT1-100*rp1+N+95);vT1++) { - if (rp1 >= max(1,ceild(vT1-N+7,200))) { - S3(glT1-rp1,rp1-1,rp1,100*rp1-1,-200*rp1+vT1+6); - } - for (vP1=max(max(1,ceild(vT1-N+5,2)),100*rp1);vP1<=min(min(floord(vT1+2,2),M),100*rp1+99);vP1++) { - S1(glT1-rp1,rp1,vP1,vT1-2*vP1+4); - } - if (rp1 <= min(floord(M-100,100),floord(vT1-197,200))) { - S2(glT1-rp1,rp1,rp1+1,100*rp1+99,-200*rp1+vT1-194); - } - } - } - S4(glT1); - } -} diff --git a/cloog-0.17.0/test/sor1d.cloog b/cloog-0.17.0/test/sor1d.cloog deleted file mode 100644 index ba1ca70..0000000 --- a/cloog-0.17.0/test/sor1d.cloog +++ /dev/null @@ -1,256 +0,0 @@ -# created: Thu Dec 17 16:41:33 CET 2009 -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context -2 4 - 1 1 0 0 - 1 0 1 0 - - -1 # set parameter names -M N - -# --------------------- STATEMENTS -------------------- -4 - -# 1 computation stmts: -1 # domains per statement -19 8 - 1 -100 0 2 1 0 0 -4 - 1 0 0 0 1 0 0 -2 - 1 100 0 -2 -1 0 0 103 - 1 0 0 0 -1 0 1 -1 - 1 0 0 1 0 0 0 -1 - 1 0 -100 1 0 0 0 0 - 1 -100 0 2 0 0 1 -5 - 1 0 0 -1 0 1 0 0 - 1 0 100 -1 0 0 0 99 - 1 100 0 -2 0 0 0 101 - 1 0 50 0 0 0 0 49 - 1 -100 200 0 0 0 1 193 - 1 0 -100 0 0 1 0 0 - 1 100 -200 0 0 0 0 101 - 1 100 0 0 0 0 0 99 - 1 -100 0 0 0 2 1 -5 - 1 0 0 0 0 0 1 -3 - 1 0 0 0 0 2 1 94 - 1 0 0 0 0 1 0 -1 - - -0 0 0 # for future options... - - -# 1 prepare-send stmts: -1 # domains per statement -57 9 - 1 0 -200 0 2 1 0 0 -3 - 1 0 0 0 2 1 0 0 -5 - 1 -100 0 0 2 1 0 0 -4 - 1 0 0 0 0 1 0 0 -3 - 1 0 200 0 -2 -1 0 1 197 - 1 0 0 0 -2 -1 2 1 -3 - 1 100 0 0 -2 -1 0 0 103 - 1 0 0 0 0 -1 0 1 -1 - 1 0 0 -100 1 0 0 0 1 - 1 0 -100 0 1 0 0 0 0 - 1 0 0 0 1 0 0 0 -1 - 1 0 -200 0 2 0 0 1 -4 - 1 0 0 0 2 0 0 1 -6 - 1 -100 0 0 2 0 0 1 -5 - 1 0 0 100 -1 0 0 0 98 - 1 0 100 0 -1 0 0 0 99 - 1 0 0 0 -1 0 1 0 -1 - 1 0 200 0 -2 0 0 1 194 - 1 0 0 0 -2 0 2 1 -6 - 1 50 0 0 -1 0 0 0 50 - 1 0 -1 1 0 0 0 0 -1 - 1 0 0 100 0 0 0 0 97 - 1 0 -200 200 0 0 0 1 192 - 1 0 0 200 0 0 0 1 190 - 1 -100 0 200 0 0 0 1 191 - 1 0 1 -1 0 0 0 0 1 - 1 0 0 -100 0 0 1 0 0 - 1 0 200 -200 0 0 0 1 196 - 1 0 0 -200 0 0 2 1 -4 - 1 50 0 -100 0 0 0 0 51 - 1 -100 200 0 0 0 0 2 189 - 1 -100 200 0 0 0 0 1 193 - 1 0 100 0 0 0 0 1 94 - 1 0 200 0 0 0 0 1 192 - 1 0 50 0 0 0 0 0 49 - 1 100 -200 0 0 0 0 1 96 - 1 0 -100 0 0 0 1 1 -5 - 1 0 -100 0 0 0 1 0 -100 - 1 0 -200 0 0 0 2 1 -204 - 1 50 -100 0 0 0 0 0 -49 - 1 50 0 0 0 0 0 0 49 - 1 100 0 0 0 0 0 1 94 - 1 100 0 0 0 0 0 3 284 - 1 50 0 0 0 0 0 1 45 - 1 -100 0 0 0 0 2 1 -7 - 1 -100 0 0 0 0 2 2 -11 - 1 -100 0 0 0 0 2 4 179 - 1 -100 0 0 0 0 2 3 -15 - 1 0 0 0 0 0 2 1 -8 - 1 0 0 0 0 0 2 3 -16 - 1 0 0 0 0 0 1 1 -6 - 1 0 0 0 0 0 0 1 -4 - 1 0 0 0 0 0 2 4 79 - 1 0 0 0 0 0 2 7 463 - 1 0 0 0 0 0 2 6 269 - 1 0 0 0 0 0 2 5 75 - 1 0 0 0 0 0 1 0 -2 - - -0 0 0 # for future options... - - -# 1 prepare-receive stmts: -1 # domains per statement -57 9 - 1 0 -200 0 2 1 0 0 -3 - 1 0 0 0 2 1 0 0 -5 - 1 -100 0 0 2 1 0 0 -4 - 1 0 0 0 0 1 0 0 -3 - 1 0 200 0 -2 -1 0 1 197 - 1 0 0 0 -2 -1 2 1 -3 - 1 100 0 0 -2 -1 0 0 103 - 1 0 0 0 0 -1 0 1 -1 - 1 0 0 -100 1 0 0 0 1 - 1 0 -100 0 1 0 0 0 0 - 1 0 0 0 1 0 0 0 -1 - 1 0 -200 0 2 0 0 1 -4 - 1 0 0 0 2 0 0 1 -6 - 1 -100 0 0 2 0 0 1 -5 - 1 0 0 100 -1 0 0 0 98 - 1 0 100 0 -1 0 0 0 99 - 1 0 0 0 -1 0 1 0 -1 - 1 0 200 0 -2 0 0 1 194 - 1 0 0 0 -2 0 2 1 -6 - 1 50 0 0 -1 0 0 0 50 - 1 0 -1 1 0 0 0 0 -1 - 1 0 0 100 0 0 0 0 97 - 1 0 -200 200 0 0 0 1 192 - 1 0 0 200 0 0 0 1 190 - 1 -100 0 200 0 0 0 1 191 - 1 0 1 -1 0 0 0 0 1 - 1 0 0 -100 0 0 1 0 0 - 1 0 200 -200 0 0 0 1 196 - 1 0 0 -200 0 0 2 1 -4 - 1 50 0 -100 0 0 0 0 51 - 1 -100 200 0 0 0 0 2 189 - 1 -100 200 0 0 0 0 1 193 - 1 0 100 0 0 0 0 1 94 - 1 0 200 0 0 0 0 1 192 - 1 0 50 0 0 0 0 0 49 - 1 100 -200 0 0 0 0 1 96 - 1 0 -100 0 0 0 1 1 -5 - 1 0 -100 0 0 0 1 0 -100 - 1 0 -200 0 0 0 2 1 -204 - 1 50 -100 0 0 0 0 0 -49 - 1 50 0 0 0 0 0 0 49 - 1 100 0 0 0 0 0 1 94 - 1 100 0 0 0 0 0 3 284 - 1 50 0 0 0 0 0 1 45 - 1 -100 0 0 0 0 2 1 -7 - 1 -100 0 0 0 0 2 2 -11 - 1 -100 0 0 0 0 2 4 179 - 1 -100 0 0 0 0 2 3 -15 - 1 0 0 0 0 0 2 1 -8 - 1 0 0 0 0 0 2 3 -16 - 1 0 0 0 0 0 1 1 -6 - 1 0 0 0 0 0 0 1 -4 - 1 0 0 0 0 0 2 4 79 - 1 0 0 0 0 0 2 7 463 - 1 0 0 0 0 0 2 6 269 - 1 0 0 0 0 0 2 5 75 - 1 0 0 0 0 0 1 0 -2 - - -0 0 0 # for future options... - - -# 1 communication stmts: -1 # domains per statement -21 5 - 1 200 0 3 781 - 1 200 0 1 391 - 1 200 0 4 1075 - 1 100 0 1 392 - 1 100 0 0 197 - 1 -200 6 5 377 - 1 -200 6 6 671 - 1 -100 3 2 190 - 1 -200 6 3 -13 - 1 -100 3 1 -5 - 1 0 2 3 484 - 1 0 1 1 95 - 1 0 3 1 192 - 1 0 3 5 873 - 1 0 3 2 189 - 1 0 6 7 1062 - 1 0 6 5 771 - 1 0 3 4 579 - 1 0 0 1 -3 - 1 0 2 1 -5 - 1 0 1 0 -1 - - -0 0 0 # for future options... - - - -1 # set the iterator names -tileT1 tileP1 other1 other2 other3 other4 other5 - -# --------------------- SCATTERING -------------------- -4 # Scattering functions -9 17 - 0 1 0 -1 0 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 -2 -1 0 0 4 - 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -9 18 - 0 1 0 -1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 -2 -1 0 0 4 - 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 - 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 - -9 18 - 0 1 0 0 0 0 0 -1 0 0 -1 0 0 0 0 0 0 -1 - 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 -2 -1 0 0 4 - 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 - 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 - -9 14 - 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 - 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 - 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 1 0 0 0 0 - - -1 # we set the scattering dimension names -glT1 bl rp1 vT1 vP1 stmtType otherP1 arrAcc1 arrNr1 - diff --git a/cloog-0.17.0/test/sor1d.good.c b/cloog-0.17.0/test/sor1d.good.c deleted file mode 100644 index bb5d643..0000000 --- a/cloog-0.17.0/test/sor1d.good.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/sor1d.cloog by CLooG 0.14.0-226-g3fc65ac gmp bits in 0.04s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(tileT1,tileP1,other1,other2) { hash(1); hash(tileT1); hash(tileP1); hash(other1); hash(other2); } -#define S2(tileT1,tileP1,other1,other2,other3) { hash(2); hash(tileT1); hash(tileP1); hash(other1); hash(other2); hash(other3); } -#define S3(tileT1,tileP1,other1,other2,other3) { hash(3); hash(tileT1); hash(tileP1); hash(other1); hash(other2); hash(other3); } -#define S4(tileT1) { hash(4); hash(tileT1); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int glT1, rp1, vT1, vP1, otherP1, arrAcc1; - /* Original iterators. */ - int tileT1, tileP1, other1, other2, other3; - if ((M >= 1) && (N >= 3)) { - for (glT1=-1;glT1<=floord(3*M+N-5,100);glT1++) { - for (rp1=max(max(0,ceild(100*glT1-2*M-N+5,100)),ceild(100*glT1-N-193,300));rp1<=min(min(min(min(floord(glT1+1,2),floord(M,100)),floord(100*glT1+99,100)),floord(50*glT1+51,150)),floord(100*glT1+N+98,300));rp1++) { - for (vT1=max(max(max(max(0,100*glT1-100*rp1),100*rp1-1),200*rp1-3),200*rp1-N+1);vT1<=min(min(2*M+N-5,100*glT1-100*rp1+99),200*rp1+N+193);vT1++) { - if (rp1 >= max(1,ceild(vT1-N+7,200))) { - S3(glT1-rp1,rp1-1,rp1,100*rp1-1,-200*rp1+vT1+6); - } - for (vP1=max(max(1,ceild(vT1-N+5,2)),100*rp1);vP1<=min(min(floord(vT1+2,2),M),100*rp1+99);vP1++) { - S1(glT1-rp1,rp1,vP1,vT1-2*vP1+4); - if ((rp1 <= min(floord(M-100,100),floord(vT1-197,200))) && (100*rp1 == vP1-99)) { - S2(glT1-rp1,rp1,rp1+1,100*rp1+99,-200*rp1+vT1-194); - } - } - } - } - S4(glT1); - } - } -} diff --git a/cloog-0.17.0/test/square+triangle-1-1-2-3.c b/cloog-0.17.0/test/square+triangle-1-1-2-3.c deleted file mode 100644 index c30b4e2..0000000 --- a/cloog-0.17.0/test/square+triangle-1-1-2-3.c +++ /dev/null @@ -1,14 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/square+triangle-1-1-2-3.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.00s. */ -for (j=1;j<=M;j++) { - S1(1,j); -} -for (i=2;i<=M;i++) { - S1(i,1); - for (j=2;j<=i;j++) { - S1(i,j); - S2(i,j); - } - for (j=i+1;j<=M;j++) { - S1(i,j); - } -} diff --git a/cloog-0.17.0/test/square+triangle-1-1-2-3.cloog b/cloog-0.17.0/test/square+triangle-1-1-2-3.cloog deleted file mode 100644 index ce8f547..0000000 --- a/cloog-0.17.0/test/square+triangle-1-1-2-3.cloog +++ /dev/null @@ -1,36 +0,0 @@ -# language: C -c - -# Context -# {M | M >= 1} -2 3 -# M 1 -1 1 -1 -1 0 1 -0 - -2 # Number of statements - -1 -# {i, j | 1<=i<=M; 1<=j<=M} -5 5 -# i j M 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 -1 -1 0 -1 1 0 -1 0 0 0 1 -0 0 0 - -1 -# {i, j | 2<=j<=i<=M} -4 5 -# i j M 1 -1 0 1 0 -2 -1 1 -1 0 0 -1 -1 0 1 0 -1 0 0 0 1 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/square+triangle-1-1-2-3.good.c b/cloog-0.17.0/test/square+triangle-1-1-2-3.good.c deleted file mode 100644 index ea68a7f..0000000 --- a/cloog-0.17.0/test/square+triangle-1-1-2-3.good.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Generated from ../../../git/cloog/test/square+triangle-1-1-2-3.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M) -{ - /* Original iterators. */ - int i, j; - for (j=1;j<=M;j++) { - S1(1,j) ; - } - for (i=2;i<=M-1;i++) { - S1(i,1) ; - for (j=2;j<=i;j++) { - S1(i,j) ; - S2(i,j) ; - } - for (j=i+1;j<=M;j++) { - S1(i,j) ; - } - } - if (M >= 2) { - S1(M,1) ; - for (j=2;j<=M;j++) { - S1(M,j) ; - S2(M,j) ; - } - } -} diff --git a/cloog-0.17.0/test/stride.c b/cloog-0.17.0/test/stride.c deleted file mode 100644 index d2cf8fe..0000000 --- a/cloog-0.17.0/test/stride.c +++ /dev/null @@ -1,9 +0,0 @@ -/* Generated from stride.cloog by CLooG 0.14.0-200-g26bdb56 gmp bits in 0.01s. */ -for (c1=3;c1<=100;c1++) { - if (c1 == 25) { - S1(25); - } - if (c1%3 == 0) { - S2(c1,c1/3); - } -} diff --git a/cloog-0.17.0/test/stride.cloog b/cloog-0.17.0/test/stride.cloog deleted file mode 100644 index 1526377..0000000 --- a/cloog-0.17.0/test/stride.cloog +++ /dev/null @@ -1,32 +0,0 @@ -c - -0 2 - -0 - -2 - -1 -1 3 -0 -1 25 --1 0 0 - -1 -3 4 -1 1 0 -3 -1 -1 0 100 -0 1 -3 0 -0 0 0 - -0 - -2 -2 5 -0 -1 0 1 0 -0 0 -1 0 0 - -2 6 -0 -1 0 1 0 0 -0 0 -1 0 1 0 - -0 diff --git a/cloog-0.17.0/test/stride.good.c b/cloog-0.17.0/test/stride.good.c deleted file mode 100644 index 7380723..0000000 --- a/cloog-0.17.0/test/stride.good.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from stride.cloog by CLooG 0.14.0-200-g26bdb56 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test() -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j; - for (c1=3;c1<=100;c1++) { - if (c1 == 25) { - S1(25); - } - if (c1%3 == 0) { - S2(c1,c1/3); - } - } -} diff --git a/cloog-0.17.0/test/stride2.c b/cloog-0.17.0/test/stride2.c deleted file mode 100644 index 320a2fb..0000000 --- a/cloog-0.17.0/test/stride2.c +++ /dev/null @@ -1,7 +0,0 @@ -/* Generated from stride2.cloog by CLooG 0.14.0-200-g26bdb56 gmp bits in 0.00s. */ -for (c1=3;c1<=100;c1+=3) { - if (c1 == 27) { - S1(27); - } - S2(c1,c1/3); -} diff --git a/cloog-0.17.0/test/stride2.cloog b/cloog-0.17.0/test/stride2.cloog deleted file mode 100644 index 72a597a..0000000 --- a/cloog-0.17.0/test/stride2.cloog +++ /dev/null @@ -1,32 +0,0 @@ -c - -0 2 - -0 - -2 - -1 -1 3 -0 -1 27 --1 0 0 - -1 -3 4 -1 1 0 -3 -1 -1 0 100 -0 1 -3 0 -0 0 0 - -0 - -2 -2 5 -0 -1 0 1 0 -0 0 -1 0 0 - -2 6 -0 -1 0 1 0 0 -0 0 -1 0 1 0 - -0 diff --git a/cloog-0.17.0/test/stride2.good.c b/cloog-0.17.0/test/stride2.good.c deleted file mode 100644 index 4cf8b60..0000000 --- a/cloog-0.17.0/test/stride2.good.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated from stride2.cloog by CLooG 0.14.0-200-g26bdb56 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test() -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j; - for (c1=3;c1<=100;c1+=3) { - if (c1 == 27) { - S1(27); - } - S2(c1,c1/3); - } -} diff --git a/cloog-0.17.0/test/stride3.c b/cloog-0.17.0/test/stride3.c deleted file mode 100644 index c228cb6..0000000 --- a/cloog-0.17.0/test/stride3.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/stride3.cloog by CLooG 0.14.0-291-g5879c32 gmp bits in 0.00s. */ -if ((m <= n) && (n >= 1)) { - for (p1=max(50,50*m);p1<=50*n;p1+=50) { - S1(p1/50); - } -} diff --git a/cloog-0.17.0/test/stride3.cloog b/cloog-0.17.0/test/stride3.cloog deleted file mode 100644 index bd5d6b0..0000000 --- a/cloog-0.17.0/test/stride3.cloog +++ /dev/null @@ -1,41 +0,0 @@ - - -# ---------------------- CONTEXT ---------------------- -c # language is C - -# Context (no constraints on two parameters) -1 4 # 1 lines and 4 columns -# eq/in m n 1 -1 0 0 0 # 0 >= 0, always true - -1 # We want to set manually the parameter names -m n # parameter names - -# --------------------- STATEMENTS -------------------- -1 # Number of statements - -1 # First statement: two domains -# First domain -3 5 # 3 lines and 5 columns -# eq/in i m n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # i <= n -1 1 -1 0 0 # i >= m -# Second domain -0 0 0 # for future options - - -1 # We want to set manually the iterator names -i j # iterator names - -# --------------------- SCATTERING -------------------- -1 # Scattering functions -# First function -2 7 # 2 lines and 7 columns -# eq/in p1 p2 i m n 1 -0 1 0 -50 0 0 0 # p1 = i -0 0 1 0 0 0 0 # p2 = 0 - -1 # We want to set manually the scattering dimension names -p1 p2 # scattering dimension names - diff --git a/cloog-0.17.0/test/stride4.c b/cloog-0.17.0/test/stride4.c deleted file mode 100644 index 2e874be..0000000 --- a/cloog-0.17.0/test/stride4.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/stride4.cloog by CLooG 0.16.0-10-g13c6274 gmp bits in 0.00s. */ -if ((t >= 0) && (t <= 15)) { - for (i0=t;i0<=99;i0+=16) { - S1(i0,t); - } -} diff --git a/cloog-0.17.0/test/stride4.cloog b/cloog-0.17.0/test/stride4.cloog deleted file mode 100644 index 0271d97..0000000 --- a/cloog-0.17.0/test/stride4.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# Language: C -c - -# Context: -1 - -0 3 0 0 0 1 - -1 # Parameter name(s) -t -# Statement number: -1 - -# Iteration domain of statement 1. -1 - -6 6 2 0 1 1 -0 1 0 16 -1 0 -0 0 1 0 -1 0 -1 1 0 0 0 0 -1 -1 0 0 0 99 -1 0 0 0 1 0 -1 0 0 0 -1 15 - -0 0 0 # For future options. - - -1 # Iterator name(s) - -i0 i1 - -# No scattering functions. -0 diff --git a/cloog-0.17.0/test/swim.c b/cloog-0.17.0/test/swim.c deleted file mode 100644 index 0a0046a..0000000 --- a/cloog-0.17.0/test/swim.c +++ /dev/null @@ -1,672 +0,0 @@ -/* Generated from ../../../git/cloog/test/swim.cloog by CLooG 0.16.1-3-g277eafa gmp bits in 0.20s. */ -if (M == 1) { - S1(); - S2(); - S3(); - S4(); - S5(); - S6(); - S7(); - S8(); - S9(); - S10(); - S11(); - S12(); - S13(); - S14(); - S15(); - S16(); - S17(); - S18(); - S19(); - S20(); - S21(); - S22(); - S23(); - S24(); - S25(); - S26(); - S27(); - for (p1=1;p1<=N;p1++) { - for (p3=1;p3<=N;p3++) { - S28(p1,p3); - S29(p1,p3); - S30(p1,p3); - } - S31(p1); - } - S32(); - S33(); - S34(); - if (O <= 1) { - S35(); - } - S36(); - S37(); - if ((N >= 1) && (Q >= 1) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S40(p1,p3,p5); - S41(p1,p3,p5); - S42(p1,p3,p5); - S43(p1,p3,p5); - } - } - for (p3=1;p3<=Q;p3++) { - S44(p1,p3); - S45(p1,p3); - S46(p1,p3); - S47(p1,p3); - } - for (p3=1;p3<=R;p3++) { - S48(p1,p3); - S49(p1,p3); - S50(p1,p3); - S51(p1,p3); - } - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S59(p1,p3,p5); - S60(p1,p3,p5); - S61(p1,p3,p5); - } - } - for (p3=1;p3<=Q;p3++) { - S62(p1,p3); - S63(p1,p3); - S64(p1,p3); - } - for (p3=1;p3<=R;p3++) { - S65(p1,p3); - S66(p1,p3); - S67(p1,p3); - } - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5); - S96(p1,p3,p5); - S97(p1,p3,p5); - } - S98(p1,p3); - } - S99(p1); - S100(p1); - S101(p1); - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S102(p1,p3,p5); - S103(p1,p3,p5); - S104(p1,p3,p5); - S105(p1,p3,p5); - S106(p1,p3,p5); - S107(p1,p3,p5); - } - } - for (p3=1;p3<=Q;p3++) { - S108(p1,p3); - S109(p1,p3); - S110(p1,p3); - S111(p1,p3); - S112(p1,p3); - S113(p1,p3); - } - for (p3=1;p3<=R;p3++) { - S114(p1,p3); - S115(p1,p3); - S116(p1,p3); - S117(p1,p3); - S118(p1,p3); - S119(p1,p3); - } - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } - if ((N <= 0) && (Q >= 1) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S40(p1,p3,p5); - S41(p1,p3,p5); - S42(p1,p3,p5); - S43(p1,p3,p5); - } - } - for (p3=1;p3<=Q;p3++) { - S44(p1,p3); - S45(p1,p3); - S46(p1,p3); - S47(p1,p3); - } - for (p3=1;p3<=R;p3++) { - S48(p1,p3); - S49(p1,p3); - S50(p1,p3); - S51(p1,p3); - } - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S59(p1,p3,p5); - S60(p1,p3,p5); - S61(p1,p3,p5); - } - } - for (p3=1;p3<=Q;p3++) { - S62(p1,p3); - S63(p1,p3); - S64(p1,p3); - } - for (p3=1;p3<=R;p3++) { - S65(p1,p3); - S66(p1,p3); - S67(p1,p3); - } - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - S99(p1); - S100(p1); - S101(p1); - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S102(p1,p3,p5); - S103(p1,p3,p5); - S104(p1,p3,p5); - S105(p1,p3,p5); - S106(p1,p3,p5); - S107(p1,p3,p5); - } - } - for (p3=1;p3<=Q;p3++) { - S108(p1,p3); - S109(p1,p3); - S110(p1,p3); - S111(p1,p3); - S112(p1,p3); - S113(p1,p3); - } - for (p3=1;p3<=R;p3++) { - S114(p1,p3); - S115(p1,p3); - S116(p1,p3); - S117(p1,p3); - S118(p1,p3); - S119(p1,p3); - } - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } - if ((N >= 1) && (Q >= 1) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - for (p3=1;p3<=Q;p3++) { - S44(p1,p3); - S45(p1,p3); - S46(p1,p3); - S47(p1,p3); - } - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - for (p3=1;p3<=Q;p3++) { - S62(p1,p3); - S63(p1,p3); - S64(p1,p3); - } - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5); - S96(p1,p3,p5); - S97(p1,p3,p5); - } - S98(p1,p3); - } - S99(p1); - S100(p1); - S101(p1); - for (p3=1;p3<=Q;p3++) { - S108(p1,p3); - S109(p1,p3); - S110(p1,p3); - S111(p1,p3); - S112(p1,p3); - S113(p1,p3); - } - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } - if ((N <= 0) && (Q >= 1) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - for (p3=1;p3<=Q;p3++) { - S44(p1,p3); - S45(p1,p3); - S46(p1,p3); - S47(p1,p3); - } - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - for (p3=1;p3<=Q;p3++) { - S62(p1,p3); - S63(p1,p3); - S64(p1,p3); - } - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - S99(p1); - S100(p1); - S101(p1); - for (p3=1;p3<=Q;p3++) { - S108(p1,p3); - S109(p1,p3); - S110(p1,p3); - S111(p1,p3); - S112(p1,p3); - S113(p1,p3); - } - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } - if ((N >= 1) && (Q <= 0) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - for (p3=1;p3<=R;p3++) { - S48(p1,p3); - S49(p1,p3); - S50(p1,p3); - S51(p1,p3); - } - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - for (p3=1;p3<=R;p3++) { - S65(p1,p3); - S66(p1,p3); - S67(p1,p3); - } - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5); - S96(p1,p3,p5); - S97(p1,p3,p5); - } - S98(p1,p3); - } - S99(p1); - S100(p1); - S101(p1); - for (p3=1;p3<=R;p3++) { - S114(p1,p3); - S115(p1,p3); - S116(p1,p3); - S117(p1,p3); - S118(p1,p3); - S119(p1,p3); - } - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } - if ((N <= 0) && (Q <= 0) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - for (p3=1;p3<=R;p3++) { - S48(p1,p3); - S49(p1,p3); - S50(p1,p3); - S51(p1,p3); - } - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - for (p3=1;p3<=R;p3++) { - S65(p1,p3); - S66(p1,p3); - S67(p1,p3); - } - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - S99(p1); - S100(p1); - S101(p1); - for (p3=1;p3<=R;p3++) { - S114(p1,p3); - S115(p1,p3); - S116(p1,p3); - S117(p1,p3); - S118(p1,p3); - S119(p1,p3); - } - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } - if ((N >= 1) && (Q <= 0) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5); - S96(p1,p3,p5); - S97(p1,p3,p5); - } - S98(p1,p3); - } - S99(p1); - S100(p1); - S101(p1); - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } - if ((N <= 0) && (Q <= 0) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1); - S39(p1); - S52(p1); - S53(p1); - S54(p1); - S55(p1); - S56(p1); - S57(p1); - S58(p1); - S68(p1); - S69(p1); - S70(p1); - S71(p1); - S72(p1); - S73(p1); - S74(p1); - S75(p1); - S76(p1); - S77(p1); - S78(p1); - S79(p1); - S80(p1); - S81(p1); - S82(p1); - S83(p1); - S84(p1); - S85(p1); - S86(p1); - S87(p1); - S88(p1); - S89(p1); - S90(p1); - S91(p1); - S92(p1); - S93(p1); - S94(p1); - S99(p1); - S100(p1); - S101(p1); - S120(p1); - S121(p1); - S122(p1); - S123(p1); - S124(p1); - S125(p1); - } - } -} diff --git a/cloog-0.17.0/test/swim.cloog b/cloog-0.17.0/test/swim.cloog deleted file mode 100644 index 9216e46..0000000 --- a/cloog-0.17.0/test/swim.cloog +++ /dev/null @@ -1,2453 +0,0 @@ -c # language is C -# ---------- CONTEXT ---------- -# Context (no constraints on parameters) -1 8 # 1 lines, 8 columns -0 0 0 0 0 0 0 0 - -0 # Automatically find parameter names - -# ---------- STATEMENTS ---------- -125 # Number of statements - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -1 -1 -1 0 0 1 0 0 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -1 -1 -1 0 0 1 0 0 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -1 -1 -1 0 0 1 0 0 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -1 -1 -1 0 1 0 0 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -4 8 -1 0 0 -1 0 0 0 1 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -3 8 -1 1 0 0 0 0 0 -1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 1 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 1 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 1 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -9 11 -1 1 0 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 0 -1 0 0 0 1 0 0 0 0 0 -1 -1 0 0 0 -1 0 0 0 0 0 1 -1 0 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 1 0 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -7 10 -1 1 0 0 0 0 0 0 0 -2 -1 -1 0 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 0 -1 0 0 1 0 0 0 0 0 -1 -1 0 0 -1 0 0 0 0 0 1 -1 0 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -1 # Statement has 1 domain -5 9 -1 1 0 0 0 0 0 0 -2 -1 -1 0 0 0 1 0 0 0 -1 0 1 0 0 0 0 0 -1 -1 0 -1 0 0 0 0 0 1 -1 0 -1 0 0 0 0 0 1 -0 0 0 - -0 # Automatically find iterator names. - -# ---------- SCATTERING FUNCTIONS ---------- -125 # Number of scattering functions - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -2 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -4 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -5 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -6 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -7 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -8 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -9 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -10 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -11 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -12 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -13 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -14 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -15 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -16 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -17 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -18 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -19 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -20 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -21 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -22 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -23 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -24 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -25 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -26 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -27 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -27 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -27 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -27 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -28 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -29 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -30 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -31 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -32 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 15 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -33 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -2 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -3 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -3 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -4 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -4 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -4 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -4 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -3 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -5 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -6 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -7 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -8 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -9 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -10 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -11 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -12 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -12 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -12 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -2 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -13 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -13 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -13 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -14 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -14 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -14 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -15 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -16 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -17 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -18 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -19 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -20 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -21 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -22 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -23 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -24 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -25 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -26 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -27 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -28 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -29 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -30 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -31 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -32 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -33 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -35 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -36 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -37 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -38 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -39 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -40 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -41 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -42 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -42 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -42 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -2 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -42 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -43 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -44 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -45 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -46 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -46 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -46 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -2 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -46 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -3 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -46 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -4 # Beta 3 - -7 18 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -46 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -5 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -47 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -47 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -47 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -47 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -3 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -47 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -4 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -47 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -5 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -48 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -48 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -48 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -48 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -3 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -48 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -4 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 17 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -48 # Beta 1 -0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -5 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -49 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -50 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -51 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -52 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -53 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -7 16 -# p0 p1 p2 p3 p4 p5 p6 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -34 # Beta 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -54 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Beta 3 - -1 # Set the scattering parameter names. -p0 p1 p2 p3 p4 p5 p6 - diff --git a/cloog-0.17.0/test/swim.good.c b/cloog-0.17.0/test/swim.good.c deleted file mode 100644 index 80f0de1..0000000 --- a/cloog-0.17.0/test/swim.good.c +++ /dev/null @@ -1,819 +0,0 @@ -/* Generated from ../../../git/cloog/test/swim.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.70s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } -#define S2() { hash(2); } -#define S3() { hash(3); } -#define S4() { hash(4); } -#define S5() { hash(5); } -#define S6() { hash(6); } -#define S7() { hash(7); } -#define S8() { hash(8); } -#define S9() { hash(9); } -#define S10() { hash(10); } -#define S11() { hash(11); } -#define S12() { hash(12); } -#define S13() { hash(13); } -#define S14() { hash(14); } -#define S15() { hash(15); } -#define S16() { hash(16); } -#define S17() { hash(17); } -#define S18() { hash(18); } -#define S19() { hash(19); } -#define S20() { hash(20); } -#define S21() { hash(21); } -#define S22() { hash(22); } -#define S23() { hash(23); } -#define S24() { hash(24); } -#define S25() { hash(25); } -#define S26() { hash(26); } -#define S27() { hash(27); } -#define S28(i,j) { hash(28); hash(i); hash(j); } -#define S29(i,j) { hash(29); hash(i); hash(j); } -#define S30(i,j) { hash(30); hash(i); hash(j); } -#define S31(i) { hash(31); hash(i); } -#define S32() { hash(32); } -#define S33() { hash(33); } -#define S34() { hash(34); } -#define S35() { hash(35); } -#define S36() { hash(36); } -#define S37() { hash(37); } -#define S38(i) { hash(38); hash(i); } -#define S39(i) { hash(39); hash(i); } -#define S40(i,j,k) { hash(40); hash(i); hash(j); hash(k); } -#define S41(i,j,k) { hash(41); hash(i); hash(j); hash(k); } -#define S42(i,j,k) { hash(42); hash(i); hash(j); hash(k); } -#define S43(i,j,k) { hash(43); hash(i); hash(j); hash(k); } -#define S44(i,j) { hash(44); hash(i); hash(j); } -#define S45(i,j) { hash(45); hash(i); hash(j); } -#define S46(i,j) { hash(46); hash(i); hash(j); } -#define S47(i,j) { hash(47); hash(i); hash(j); } -#define S48(i,j) { hash(48); hash(i); hash(j); } -#define S49(i,j) { hash(49); hash(i); hash(j); } -#define S50(i,j) { hash(50); hash(i); hash(j); } -#define S51(i,j) { hash(51); hash(i); hash(j); } -#define S52(i) { hash(52); hash(i); } -#define S53(i) { hash(53); hash(i); } -#define S54(i) { hash(54); hash(i); } -#define S55(i) { hash(55); hash(i); } -#define S56(i) { hash(56); hash(i); } -#define S57(i) { hash(57); hash(i); } -#define S58(i) { hash(58); hash(i); } -#define S59(i,j,k) { hash(59); hash(i); hash(j); hash(k); } -#define S60(i,j,k) { hash(60); hash(i); hash(j); hash(k); } -#define S61(i,j,k) { hash(61); hash(i); hash(j); hash(k); } -#define S62(i,j) { hash(62); hash(i); hash(j); } -#define S63(i,j) { hash(63); hash(i); hash(j); } -#define S64(i,j) { hash(64); hash(i); hash(j); } -#define S65(i,j) { hash(65); hash(i); hash(j); } -#define S66(i,j) { hash(66); hash(i); hash(j); } -#define S67(i,j) { hash(67); hash(i); hash(j); } -#define S68(i) { hash(68); hash(i); } -#define S69(i) { hash(69); hash(i); } -#define S70(i) { hash(70); hash(i); } -#define S71(i) { hash(71); hash(i); } -#define S72(i) { hash(72); hash(i); } -#define S73(i) { hash(73); hash(i); } -#define S74(i) { hash(74); hash(i); } -#define S75(i) { hash(75); hash(i); } -#define S76(i) { hash(76); hash(i); } -#define S77(i) { hash(77); hash(i); } -#define S78(i) { hash(78); hash(i); } -#define S79(i) { hash(79); hash(i); } -#define S80(i) { hash(80); hash(i); } -#define S81(i) { hash(81); hash(i); } -#define S82(i) { hash(82); hash(i); } -#define S83(i) { hash(83); hash(i); } -#define S84(i) { hash(84); hash(i); } -#define S85(i) { hash(85); hash(i); } -#define S86(i) { hash(86); hash(i); } -#define S87(i) { hash(87); hash(i); } -#define S88(i) { hash(88); hash(i); } -#define S89(i) { hash(89); hash(i); } -#define S90(i) { hash(90); hash(i); } -#define S91(i) { hash(91); hash(i); } -#define S92(i) { hash(92); hash(i); } -#define S93(i) { hash(93); hash(i); } -#define S94(i) { hash(94); hash(i); } -#define S95(i,j,k) { hash(95); hash(i); hash(j); hash(k); } -#define S96(i,j,k) { hash(96); hash(i); hash(j); hash(k); } -#define S97(i,j,k) { hash(97); hash(i); hash(j); hash(k); } -#define S98(i,j) { hash(98); hash(i); hash(j); } -#define S99(i) { hash(99); hash(i); } -#define S100(i) { hash(100); hash(i); } -#define S101(i) { hash(101); hash(i); } -#define S102(i,j,k) { hash(102); hash(i); hash(j); hash(k); } -#define S103(i,j,k) { hash(103); hash(i); hash(j); hash(k); } -#define S104(i,j,k) { hash(104); hash(i); hash(j); hash(k); } -#define S105(i,j,k) { hash(105); hash(i); hash(j); hash(k); } -#define S106(i,j,k) { hash(106); hash(i); hash(j); hash(k); } -#define S107(i,j,k) { hash(107); hash(i); hash(j); hash(k); } -#define S108(i,j) { hash(108); hash(i); hash(j); } -#define S109(i,j) { hash(109); hash(i); hash(j); } -#define S110(i,j) { hash(110); hash(i); hash(j); } -#define S111(i,j) { hash(111); hash(i); hash(j); } -#define S112(i,j) { hash(112); hash(i); hash(j); } -#define S113(i,j) { hash(113); hash(i); hash(j); } -#define S114(i,j) { hash(114); hash(i); hash(j); } -#define S115(i,j) { hash(115); hash(i); hash(j); } -#define S116(i,j) { hash(116); hash(i); hash(j); } -#define S117(i,j) { hash(117); hash(i); hash(j); } -#define S118(i,j) { hash(118); hash(i); hash(j); } -#define S119(i,j) { hash(119); hash(i); hash(j); } -#define S120(i) { hash(120); hash(i); } -#define S121(i) { hash(121); hash(i); } -#define S122(i) { hash(122); hash(i); } -#define S123(i) { hash(123); hash(i); } -#define S124(i) { hash(124); hash(i); } -#define S125(i) { hash(125); hash(i); } - -void test(int M, int N, int O, int P, int Q, int R) -{ - /* Scattering iterators. */ - int p1, p3, p5; - /* Original iterators. */ - int i, j, k; - if (M == 1) { - S1() ; - S2() ; - S3() ; - S4() ; - S5() ; - S6() ; - S7() ; - S8() ; - S9() ; - S10() ; - S11() ; - S12() ; - S13() ; - S14() ; - S15() ; - S16() ; - S17() ; - S18() ; - S19() ; - S20() ; - S21() ; - S22() ; - S23() ; - S24() ; - S25() ; - S26() ; - S27() ; - } - if (M == 1) { - for (p1=1;p1<=N;p1++) { - for (p3=1;p3<=N;p3++) { - S28(p1,p3) ; - S29(p1,p3) ; - S30(p1,p3) ; - } - S31(p1) ; - } - } - if (M == 1) { - S32() ; - S33() ; - S34() ; - } - if ((M == 1) && (O <= 1)) { - S35() ; - } - if (M == 1) { - S36() ; - S37() ; - } - if ((M == 1) && (N >= 1) && (Q >= 1) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S40(p1,p3,p5) ; - S41(p1,p3,p5) ; - S42(p1,p3,p5) ; - S43(p1,p3,p5) ; - } - } - for (p3=1;p3<=Q;p3++) { - S44(p1,p3) ; - S45(p1,p3) ; - S46(p1,p3) ; - S47(p1,p3) ; - } - for (p3=1;p3<=R;p3++) { - S48(p1,p3) ; - S49(p1,p3) ; - S50(p1,p3) ; - S51(p1,p3) ; - } - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S59(p1,p3,p5) ; - S60(p1,p3,p5) ; - S61(p1,p3,p5) ; - } - } - for (p3=1;p3<=Q;p3++) { - S62(p1,p3) ; - S63(p1,p3) ; - S64(p1,p3) ; - } - for (p3=1;p3<=R;p3++) { - S65(p1,p3) ; - S66(p1,p3) ; - S67(p1,p3) ; - } - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5) ; - S96(p1,p3,p5) ; - S97(p1,p3,p5) ; - } - S98(p1,p3) ; - } - S99(p1) ; - S100(p1) ; - S101(p1) ; - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S102(p1,p3,p5) ; - S103(p1,p3,p5) ; - S104(p1,p3,p5) ; - S105(p1,p3,p5) ; - S106(p1,p3,p5) ; - S107(p1,p3,p5) ; - } - } - for (p3=1;p3<=Q;p3++) { - S108(p1,p3) ; - S109(p1,p3) ; - S110(p1,p3) ; - S111(p1,p3) ; - S112(p1,p3) ; - S113(p1,p3) ; - } - for (p3=1;p3<=R;p3++) { - S114(p1,p3) ; - S115(p1,p3) ; - S116(p1,p3) ; - S117(p1,p3) ; - S118(p1,p3) ; - S119(p1,p3) ; - } - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } - if ((M == 1) && (N <= 0) && (Q >= 1) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S40(p1,p3,p5) ; - S41(p1,p3,p5) ; - S42(p1,p3,p5) ; - S43(p1,p3,p5) ; - } - } - for (p3=1;p3<=Q;p3++) { - S44(p1,p3) ; - S45(p1,p3) ; - S46(p1,p3) ; - S47(p1,p3) ; - } - for (p3=1;p3<=R;p3++) { - S48(p1,p3) ; - S49(p1,p3) ; - S50(p1,p3) ; - S51(p1,p3) ; - } - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S59(p1,p3,p5) ; - S60(p1,p3,p5) ; - S61(p1,p3,p5) ; - } - } - for (p3=1;p3<=Q;p3++) { - S62(p1,p3) ; - S63(p1,p3) ; - S64(p1,p3) ; - } - for (p3=1;p3<=R;p3++) { - S65(p1,p3) ; - S66(p1,p3) ; - S67(p1,p3) ; - } - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - S99(p1) ; - S100(p1) ; - S101(p1) ; - for (p3=1;p3<=Q;p3++) { - for (p5=1;p5<=R;p5++) { - S102(p1,p3,p5) ; - S103(p1,p3,p5) ; - S104(p1,p3,p5) ; - S105(p1,p3,p5) ; - S106(p1,p3,p5) ; - S107(p1,p3,p5) ; - } - } - for (p3=1;p3<=Q;p3++) { - S108(p1,p3) ; - S109(p1,p3) ; - S110(p1,p3) ; - S111(p1,p3) ; - S112(p1,p3) ; - S113(p1,p3) ; - } - for (p3=1;p3<=R;p3++) { - S114(p1,p3) ; - S115(p1,p3) ; - S116(p1,p3) ; - S117(p1,p3) ; - S118(p1,p3) ; - S119(p1,p3) ; - } - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } - if ((M == 1) && (N >= 1) && (Q <= 0) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - for (p3=1;p3<=R;p3++) { - S48(p1,p3) ; - S49(p1,p3) ; - S50(p1,p3) ; - S51(p1,p3) ; - } - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - for (p3=1;p3<=R;p3++) { - S65(p1,p3) ; - S66(p1,p3) ; - S67(p1,p3) ; - } - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5) ; - S96(p1,p3,p5) ; - S97(p1,p3,p5) ; - } - S98(p1,p3) ; - } - S99(p1) ; - S100(p1) ; - S101(p1) ; - for (p3=1;p3<=R;p3++) { - S114(p1,p3) ; - S115(p1,p3) ; - S116(p1,p3) ; - S117(p1,p3) ; - S118(p1,p3) ; - S119(p1,p3) ; - } - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } - if ((M == 1) && (N <= 0) && (Q <= 0) && (R >= 1)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - for (p3=1;p3<=R;p3++) { - S48(p1,p3) ; - S49(p1,p3) ; - S50(p1,p3) ; - S51(p1,p3) ; - } - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - for (p3=1;p3<=R;p3++) { - S65(p1,p3) ; - S66(p1,p3) ; - S67(p1,p3) ; - } - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - S99(p1) ; - S100(p1) ; - S101(p1) ; - for (p3=1;p3<=R;p3++) { - S114(p1,p3) ; - S115(p1,p3) ; - S116(p1,p3) ; - S117(p1,p3) ; - S118(p1,p3) ; - S119(p1,p3) ; - } - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } - if ((M == 1) && (N >= 1) && (Q <= 0) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5) ; - S96(p1,p3,p5) ; - S97(p1,p3,p5) ; - } - S98(p1,p3) ; - } - S99(p1) ; - S100(p1) ; - S101(p1) ; - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } - if ((M == 1) && (N <= 0) && (Q <= 0) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - S99(p1) ; - S100(p1) ; - S101(p1) ; - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } - if ((M == 1) && (N >= 1) && (Q >= 1) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - for (p3=1;p3<=Q;p3++) { - S44(p1,p3) ; - S45(p1,p3) ; - S46(p1,p3) ; - S47(p1,p3) ; - } - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - for (p3=1;p3<=Q;p3++) { - S62(p1,p3) ; - S63(p1,p3) ; - S64(p1,p3) ; - } - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - for (p3=1;p3<=N;p3++) { - for (p5=1;p5<=N;p5++) { - S95(p1,p3,p5) ; - S96(p1,p3,p5) ; - S97(p1,p3,p5) ; - } - S98(p1,p3) ; - } - S99(p1) ; - S100(p1) ; - S101(p1) ; - for (p3=1;p3<=Q;p3++) { - S108(p1,p3) ; - S109(p1,p3) ; - S110(p1,p3) ; - S111(p1,p3) ; - S112(p1,p3) ; - S113(p1,p3) ; - } - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } - if ((M == 1) && (N <= 0) && (Q >= 1) && (R <= 0)) { - for (p1=2;p1<=P;p1++) { - S38(p1) ; - S39(p1) ; - for (p3=1;p3<=Q;p3++) { - S44(p1,p3) ; - S45(p1,p3) ; - S46(p1,p3) ; - S47(p1,p3) ; - } - S52(p1) ; - S53(p1) ; - S54(p1) ; - S55(p1) ; - S56(p1) ; - S57(p1) ; - S58(p1) ; - for (p3=1;p3<=Q;p3++) { - S62(p1,p3) ; - S63(p1,p3) ; - S64(p1,p3) ; - } - S68(p1) ; - S69(p1) ; - S70(p1) ; - S71(p1) ; - S72(p1) ; - S73(p1) ; - S74(p1) ; - S75(p1) ; - S76(p1) ; - S77(p1) ; - S78(p1) ; - S79(p1) ; - S80(p1) ; - S81(p1) ; - S82(p1) ; - S83(p1) ; - S84(p1) ; - S85(p1) ; - S86(p1) ; - S87(p1) ; - S88(p1) ; - S89(p1) ; - S90(p1) ; - S91(p1) ; - S92(p1) ; - S93(p1) ; - S94(p1) ; - S99(p1) ; - S100(p1) ; - S101(p1) ; - for (p3=1;p3<=Q;p3++) { - S108(p1,p3) ; - S109(p1,p3) ; - S110(p1,p3) ; - S111(p1,p3) ; - S112(p1,p3) ; - S113(p1,p3) ; - } - S120(p1) ; - S121(p1) ; - S122(p1) ; - S123(p1) ; - S124(p1) ; - S125(p1) ; - } - } -} diff --git a/cloog-0.17.0/test/test.c b/cloog-0.17.0/test/test.c deleted file mode 100644 index a3d0711..0000000 --- a/cloog-0.17.0/test/test.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/test.cloog by CLooG 0.14.0-284-ga90f184 gmp bits in 0.01s. */ -for (i=1;i<=2;i++) { - for (j=1;j<=M;j++) { - S1(i,j); - } -} -for (i=3;i<=N;i++) { - for (j=1;j<=min(M,i-1);j++) { - S1(i,j); - } - if (i >= M+1) { - S2(i,i); - } - if (i <= M) { - S1(i,i); - S2(i,i); - } - for (j=i+1;j<=M;j++) { - S1(i,j); - } -} diff --git a/cloog-0.17.0/test/test.cloog b/cloog-0.17.0/test/test.cloog deleted file mode 100644 index 78bd336..0000000 --- a/cloog-0.17.0/test/test.cloog +++ /dev/null @@ -1,33 +0,0 @@ -# language: C -c - -# parameters {m, n | 4<=m<=n} -2 4 -# m n 1 -1 -1 1 0 -1 1 0 -4 -0 - -2 # Number of statements - -1 -# {i, j | 1<=i<=n 1<=j<=m} -4 6 -# i j m n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 0 1 0 0 -1 -1 0 -1 1 0 0 -0 0 0 - -1 -# {i, j | i=j 3<=j<=N} -3 6 -# i j m n 1 -0 1 -1 0 0 0 -1 0 1 0 0 -3 -1 0 -1 0 1 0 -0 0 0 -0 - -0 # Scattering functions diff --git a/cloog-0.17.0/test/test.good.c b/cloog-0.17.0/test/test.good.c deleted file mode 100644 index 3a786f8..0000000 --- a/cloog-0.17.0/test/test.good.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Generated from ../../../git/cloog/test/test.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.02s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j) { hash(2); hash(i); hash(j); } - -void test(int M, int N) -{ - /* Original iterators. */ - int i, j; - for (i=1;i<=2;i++) { - for (j=1;j<=M;j++) { - S1(i,j) ; - } - } - for (i=3;i<=M-1;i++) { - for (j=1;j<=i-1;j++) { - S1(i,j) ; - } - S1(i,i) ; - S2(i,i) ; - for (j=i+1;j<=M;j++) { - S1(i,j) ; - } - } - for (j=1;j<=M-1;j++) { - S1(M,j) ; - } - S1(M,M) ; - S2(M,M) ; - for (i=M+1;i<=N;i++) { - for (j=1;j<=M;j++) { - S1(i,j) ; - } - S2(i,i) ; - } -} diff --git a/cloog-0.17.0/test/thomasset.c b/cloog-0.17.0/test/thomasset.c deleted file mode 100644 index f201f6f..0000000 --- a/cloog-0.17.0/test/thomasset.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/thomasset.cloog by CLooG 0.14.0-292-g2bfd6ac gmp bits in 0.04s. */ -if (n >= 1) { - for (c1=0;c1<=floord(n-4,3);c1++) { - for (i=3*c1+1;i<=3*c1+3;i++) { - S1(i,c1); - } - } - c1 = floord(n-1,3); - if (c1 >= ceild(n-2,3)) { - if (c1 == 0) { - S1(1,0); - for (j=1;j<=n;j++) { - S2(1,j,0,0,0); - } - } - if (c1 >= 1) { - for (j=1;j<=2;j++) { - S2(1,j,0,c1,0); - } - } - for (i=max(2,3*c1+1);i<=n;i++) { - S1(i,c1); - } - } - if (3*c1 == n-3) { - for (i=n-2;i<=n;i++) { - if (n%3 == 0) { - S1(i,(n-3)/3); - } - } - } - if (c1 >= ceild(n-2,3)) { - for (c2=1;c2<=n-1;c2++) { - for (j=1;j<=2;j++) { - S2(c2+1,j,0,c1,0); - } - } - } - for (c1=ceild(n,3);c1<=floord(2*n,3);c1++) { - for (c2=0;c2<=n-1;c2++) { - for (j=max(1,3*c1-n);j<=min(n,3*c1-n+4);j++) { - p = max(ceild(3*c1-j,3),ceild(n-2,3)); - if (p <= min(floord(n,3),floord(3*c1-j+2,3))) { - S2(c2+1,j,0,p,c1-p); - } - } - } - } -} diff --git a/cloog-0.17.0/test/thomasset.cloog b/cloog-0.17.0/test/thomasset.cloog deleted file mode 100644 index 24c30eb..0000000 --- a/cloog-0.17.0/test/thomasset.cloog +++ /dev/null @@ -1,51 +0,0 @@ -# language: C -c -1 3 -1 0 0 # 0 >= 0 -1 -n - -# ------------- STATEMENTS ------------- -2 # Number of statements - -# ax:Z -1 # The domain is made of one polyhedron -4 5 # 4 lines and 5 columns -# i j n -1 -1 0 1 0 -1 1 0 0 -1 -1 1 -3 0 -1 -1 -1 3 0 3 -0 0 0 # future options - -# ax:P -1 # The domain is made of one polyhedron -10 8 # 10 lines and 8 columns -# i j k p q n -1 -1 0 0 0 0 1 0 -1 0 -1 0 0 0 1 0 -1 0 1 0 0 0 0 -1 -1 1 0 0 0 0 0 -1 -1 0 1 0 0 -3 0 0 -1 0 -1 0 0 3 0 2 -1 0 0 0 -3 0 1 0 -1 0 0 0 3 0 -1 2 -1 0 0 -3 0 0 0 1 -1 0 0 3 0 0 0 1 -0 0 0 # future options -1 # Iterator Names -i j k p q - -# ------------- SCATTERING ------------- -2 # nb scattering functions -# Scattering for ax:Z -2 7 # 2 lines and 7 columns -# c1 c2 i j n -0 1 0 0 -1 0 0 -0 0 1 0 0 0 0 -# Scattering for ax:P -2 10 # 2 lines and 10 columns -# c1 c2 i j k p q n -0 1 0 0 0 -1 -1 -1 0 0 -0 0 1 -1 0 0 0 0 0 1 -0 # Scattering Function Names diff --git a/cloog-0.17.0/test/thomasset.good.c b/cloog-0.17.0/test/thomasset.good.c deleted file mode 100644 index f9ca016..0000000 --- a/cloog-0.17.0/test/thomasset.good.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Generated from ../../../git/cloog/test/thomasset.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.10s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j,k,p,q) { hash(2); hash(i); hash(j); hash(k); hash(p); hash(q); } - -void test(int n) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j, k, p, q; - for (c1=0;c1<=floord(n-5,3);c1++) { - for (i=max(3*c1+1,1);i<=3*c1+3;i++) { - S1(i,c1) ; - } - } - if (n == 1) { - S1(1,0) ; - for (k=0;k<=min(0,0);k++) { - for (p=max(0,ceild(-3*k-1,3));p<=min(floord(-3*k+1,3),0);p++) { - q = -k-p ; - S2(1,1,k,p,-k-p) ; - } - } - } - if (n >= 2) { - for (c1=max(0,ceild(n-4,3));c1<=0;c1++) { - S1(1,c1) ; - for (j=1;j<=min(n,3*c1-n+5);j++) { - for (k=0;k<=floord(3*c1-j-n+4,3);k++) { - for (p=ceild(n-2,3);p<=floord(3*c1-j-3*k+2,3);p++) { - q = c1-k-p ; - S2(1,j,k,p,c1-k-p) ; - } - } - } - for (i=2;i<=min(n,3*c1+3);i++) { - S1(i,c1) ; - } - for (c2=1;c2<=n-1;c2++) { - i = c2+1 ; - for (j=1;j<=min(3*c1-n+5,n);j++) { - for (k=0;k<=floord(3*c1-j-n+4,3);k++) { - for (p=ceild(n-2,3);p<=floord(3*c1-j-3*k+2,3);p++) { - q = c1-k-p ; - S2(c2+1,j,k,p,c1-k-p) ; - } - } - } - } - } - } - for (c1=max(1,ceild(n-4,3));c1<=floord(n-1,3);c1++) { - for (j=1;j<=3*c1-n+5;j++) { - for (k=0;k<=min(floord(3*c1-j-n+4,3),0);k++) { - for (p=max(ceild(n-2,3),ceild(3*c1-j-3*k,3));p<=min(floord(3*c1-j-3*k+2,3),floord(n,3));p++) { - q = c1-k-p ; - S2(1,j,k,p,c1-k-p) ; - } - } - } - for (i=3*c1+1;i<=min(n,3*c1+3);i++) { - S1(i,c1) ; - } - for (c2=1;c2<=n-1;c2++) { - i = c2+1 ; - for (j=1;j<=3*c1-n+5;j++) { - for (k=0;k<=min(floord(3*c1-j-n+4,3),0);k++) { - for (p=max(ceild(n-2,3),ceild(3*c1-j-3*k,3));p<=min(floord(3*c1-j-3*k+2,3),floord(n,3));p++) { - q = c1-k-p ; - S2(c2+1,j,k,p,c1-k-p) ; - } - } - } - } - } - if (n >= 1) { - for (c1=ceild(n,3);c1<=floord(2*n+1,3);c1++) { - for (c2=0;c2<=n-1;c2++) { - i = c2+1 ; - for (j=max(1,3*c1-n-1);j<=min(n,3*c1-n+5);j++) { - for (k=max(ceild(3*c1-j-n,3),0);k<=min(floord(3*c1-j-n+4,3),0);k++) { - for (p=max(ceild(n-2,3),ceild(3*c1-j-3*k,3));p<=min(floord(3*c1-j-3*k+2,3),floord(n,3));p++) { - q = c1-k-p ; - S2(c2+1,j,k,p,c1-k-p) ; - } - } - } - } - } - } -} diff --git a/cloog-0.17.0/test/tiling.c b/cloog-0.17.0/test/tiling.c deleted file mode 100644 index 86f2a2e..0000000 --- a/cloog-0.17.0/test/tiling.c +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated from ../../../git/cloog/test/tiling.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.00s. */ -for (ii=0;ii<=floord(n,10);ii++) { - for (i=10*ii;i<=min(n,10*ii+9);i++) { - S1(ii,i) ; - } -} diff --git a/cloog-0.17.0/test/tiling.cloog b/cloog-0.17.0/test/tiling.cloog deleted file mode 100644 index fa2b676..0000000 --- a/cloog-0.17.0/test/tiling.cloog +++ /dev/null @@ -1,30 +0,0 @@ -# language: C -c - -# parameter {n | n>= 0} -1 3 -# n 1 -1 1 0 -1 -n - -1 # Number of statements: - -1 -# {ii, i | t*ii<=i<=t*ii+t-1 0<=i<=n} -4 5 -# ii i n 1 -1 0 1 0 0 -1 0 -1 1 0 -1 10 -1 0 9 -1 -10 1 0 0 -0 0 0 -1 -ii i - -0 # Scattering functions - -1 6 -# c1 ii i n 1 -0 1 -1 -2 0 0 -0 diff --git a/cloog-0.17.0/test/tiling.good.c b/cloog-0.17.0/test/tiling.good.c deleted file mode 100644 index b736286..0000000 --- a/cloog-0.17.0/test/tiling.good.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/tiling.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(ii,i) { hash(1); hash(ii); hash(i); } - -void test(int n) -{ - /* Original iterators. */ - int ii, i; - for (ii=0;ii<=floord(n,10);ii++) { - for (i=max(10*ii,0);i<=min(10*ii+9,n);i++) { - S1(ii,i) ; - } - } -} diff --git a/cloog-0.17.0/test/uday_scalars.c b/cloog-0.17.0/test/uday_scalars.c deleted file mode 100644 index 6c8564c..0000000 --- a/cloog-0.17.0/test/uday_scalars.c +++ /dev/null @@ -1,9 +0,0 @@ -/* Generated from ../../../git/cloog/test/uday_scalars.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (n >= 0) { - for (p3=0;p3<=n;p3++) { - S1(p3,0,0) ; - } - for (p3=0;p3<=n;p3++) { - S2(0,p3,0) ; - } -} diff --git a/cloog-0.17.0/test/uday_scalars.cloog b/cloog-0.17.0/test/uday_scalars.cloog deleted file mode 100644 index 8da09d4..0000000 --- a/cloog-0.17.0/test/uday_scalars.cloog +++ /dev/null @@ -1,58 +0,0 @@ -# Langage: C -c - -# Context (1 parameter) -# no constraints on parameters: -1 3 - 1 0 1 -1 # Parameter name(s) -n - -# Statement number: -2 - -# Iteration domain of statement 1. -1 # 1 domain -4 6 # 4 lines and 6 columns -# j l m n cst - 1 1 0 0 0 0 # j >= 0 - 1 -1 0 0 1 0 # j <= N - 0 0 1 0 0 0 # l = 0 - 0 0 0 1 0 0 # m = 0 -0 0 0 # For future options. - -# Iteration domain of statement 2. -1 # 1 domain -4 6 # 4 lines and 6 columns -# j l m n cst - 1 0 1 0 0 0 # l >= 0 - 1 0 -1 0 1 0 # l <= N - 0 1 0 0 0 0 # j = 0 - 0 0 0 1 0 0 # m = 0 -0 0 0 # For future options. - - -1 # Iterator name(s) -j l m - -# 1 scattering functions. -2 -# First function -4 10 -# p1 p2 p3 p4 j l m n cst - 0 1 0 0 0 0 0 0 0 0 # p1 = 0 - 0 0 1 0 0 0 0 0 0 -1 # p2 = 1 - 0 0 0 1 0 -1 0 0 0 0 # p3 = j - 0 0 0 0 1 0 0 0 0 0 # p4 = 0 - -# Second function -4 10 -# p1 p2 p3 p4 j l m n cst - 0 1 0 0 0 0 0 0 0 -1 # p1 = 1 - 0 0 1 0 0 0 0 0 0 0 # p2 = 0 - 0 0 0 1 0 0 -1 0 0 0 # p3 = l - 0 0 0 0 1 0 0 0 0 -1 # p4 = 1 - -1 # set scattering dimension names manually -p1 p2 p3 p4 - diff --git a/cloog-0.17.0/test/uday_scalars.good.c b/cloog-0.17.0/test/uday_scalars.good.c deleted file mode 100644 index e4969da..0000000 --- a/cloog-0.17.0/test/uday_scalars.good.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated from ../../../git/cloog/test/uday_scalars.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(j,l,m) { hash(1); hash(j); hash(l); hash(m); } -#define S2(j,l,m) { hash(2); hash(j); hash(l); hash(m); } - -void test(int n) -{ - /* Scattering iterators. */ - int p3; - /* Original iterators. */ - int j, l, m; - for (p3=0;p3<=n;p3++) { - S1(p3,0,0) ; - } - for (p3=0;p3<=n;p3++) { - S2(0,p3,0) ; - } -} diff --git a/cloog-0.17.0/test/union.c b/cloog-0.17.0/test/union.c deleted file mode 100644 index f65b26f..0000000 --- a/cloog-0.17.0/test/union.c +++ /dev/null @@ -1,16 +0,0 @@ -/* Generated from ../../../git/cloog/test/union.cloog by CLooG 0.16.0-3-g7eee03c gmp bits in 0.00s. */ -if (M <= -1) { - for (c1=0;c1<=100;c1++) { - S1(c1); - } -} -if (M >= 11) { - for (c1=-100;c1<=0;c1++) { - S1(-c1); - } -} -if ((M >= 1) && (M <= 10)) { - for (c1=0;c1<=100;c1++) { - S1(c1); - } -} diff --git a/cloog-0.17.0/test/union.cloog b/cloog-0.17.0/test/union.cloog deleted file mode 100644 index 33e8425..0000000 --- a/cloog-0.17.0/test/union.cloog +++ /dev/null @@ -1,33 +0,0 @@ -c - -2 -1 3 -1 1 -1 - -1 3 -1 -1 -1 - -0 - -1 - -1 -2 4 -1 1 0 0 -1 -1 0 100 - -0 0 0 - -0 - -1 -2 -2 5 -0 -1 1 0 0 -1 0 0 -1 10 - -2 5 -0 -1 -1 0 0 -1 0 0 1 -11 - -0 diff --git a/cloog-0.17.0/test/union.good.c b/cloog-0.17.0/test/union.good.c deleted file mode 100644 index 70b4537..0000000 --- a/cloog-0.17.0/test/union.good.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Generated from ../../../git/cloog/test/union.cloog by CLooG 0.14.0-277-g62f7d82 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } - -void test(int M) -{ - /* Scattering iterators. */ - int c1; - /* Original iterators. */ - int i; - if (M <= -1) { - for (c1=0;c1<=100;c1++) { - S1(c1); - } - } - if (M >= 1) { - if (M >= 11) { - for (c1=-100;c1<=0;c1++) { - S1(-c1); - } - } - if (M <= 10) { - for (c1=0;c1<=100;c1++) { - S1(c1); - } - } - } -} diff --git a/cloog-0.17.0/test/vasilache.c b/cloog-0.17.0/test/vasilache.c deleted file mode 100644 index 5a00a33..0000000 --- a/cloog-0.17.0/test/vasilache.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Generated from ../../../git/cloog/test/vasilache.cloog by CLooG 0.14.0-162-g1e599e0 gmp bits in 0.03s. */ -S1(); -S2(); -for (p1=0;p1<=N-1;p1++) { - for (p3=0;p3<=N-1;p3++) { - S4(p1,p3); - S5(p1,p3); - } -} -for (p1=0;p1<=N-1;p1++) { - for (p3=0;p3<=N-1;p3++) { - for (p5=0;p5<=floord(N-1,32);p5++) { - S7(p1,p3,p5,32*p5); - for (p7=32*p5+1;p7<=min(N-1,32*p5+31);p7++) { - S6(p1,p3,p5,p7-1); - S7(p1,p3,p5,p7); - } - if (p5 <= floord(N-33,32)) { - S6(p1,p3,p5,32*p5+31); - } - if (p5 >= ceild(N-32,32)) { - S6(p1,p3,p5,N-1); - } - } - } -} -S8(); diff --git a/cloog-0.17.0/test/vasilache.cloog b/cloog-0.17.0/test/vasilache.cloog deleted file mode 100644 index 29f9598..0000000 --- a/cloog-0.17.0/test/vasilache.cloog +++ /dev/null @@ -1,248 +0,0 @@ -# A SCoP from matmul (matmul.B.main.scop1.cloog) to check normalization -# -# Options: -# cloog -f 8 -l 9 vasilache.cloog -# -# Correct: -# S1; -# S2; -# for (p0=0;p0<=N-1;p0++) { -# for (p1=0;p1<=N-1;p1++) { -# S4(i = p0,j = p1); -# S5(i = p0,j = p1); -# } -# } -# for (p0=0;p0<=N-1;p0++) { -# for (p1=0;p1<=N-1;p1++) { -# for (p2=0;p2<=floord(N-1,32);p2++) { -# S7(i = p0,j = p1,k = p2,l = 32*p2); -# for (p3=32*p2+1;p3<=min(N-1,32*p2+31);p3++) { -# S6(i = p0,j = p1,k = p2,l = p3-1); -# S7(i = p0,j = p1,k = p2,l = p3); -# } -# if (p2 >= ceild(N-32,32)) { -# S6(i = p0,j = p1,k = p2,l = N-1); -# } -# if (p2 <= floord(N-33,32)) { -# S6(i = p0,j = p1,k = p2,l = 32*p2+31); -# } -# } -# } -# } -# S8; -# -# -# NOT correct: -# S1 ; -# S2 ; -# for (p1=0;p1<=N-1;p1++) { -# for (p3=0;p3<=N-1;p3++) { -# S4(i = p1,j = p3) ; -# S5(i = p1,j = p3) ; -# } -# } -# for (p1=0;p1<=N-1;p1++) { -# for (p3=0;p3<=N-1;p3++) { -# for (p5=0;p5<=floord(N-1,32);p5++) { -# if (p5 <= 0) { -# S7(i = p1,j = p3,k = p5,l = 0) ; -# } -# p7 = 32*p5 ; -# l = 32*p5 ; -# S7(i = p1,j = p3,k = p5) ; -# for (p7=max(32*p5+1,1);p7<=min(32*p5+31,N-1);p7++) { -# l = p7-1 ; -# S6(i = p1,j = p3,k = p5) ; -# S7(i = p1,j = p3,k = p5,l = p7) ; -# } -# if (p5 >= ceild(N-32,32)) { -# l = N-1 ; -# S6(i = p1,j = p3,k = p5) ; -# } -# p7 = 32*p5+32 ; -# l = 32*p5+31 ; -# S6(i = p1,j = p3,k = p5) ; -# } -# } -# } -# S8 ; - - - -c # language is C -# ---------- CONTEXT ---------- -# Context (constraints on parameters) -2 4 # 1 lines, 4 columns -1 -1 0 3 -1 0 1 -100 - - -0 # Automatically find parameter names - -# ---------- STATEMENTS ---------- -8 # Number of statements - -1 # Statement has a non resticted domain -1 4 -1 0 0 0 -0 0 0 - -1 # Statement has a non resticted domain -1 4 -1 0 0 0 -0 0 0 - -1 # Statement has 1 domain -1 4 -1 1 0 -79 -0 0 0 - -1 # Statement has 1 domain -4 6 -1 1 0 0 0 0 -1 -1 0 0 1 -1 -1 0 1 0 0 0 -1 0 -1 0 1 -1 -0 0 0 - -1 # Statement has 1 domain -4 6 -1 1 0 0 0 0 -1 -1 0 0 1 -1 -1 0 1 0 0 0 -1 0 -1 0 1 -1 -0 0 0 - -1 # Statement has 1 domain -8 8 -1 1 0 0 0 0 0 0 -1 -1 0 0 0 0 1 -1 -1 0 1 0 0 0 0 0 -1 0 -1 0 0 0 1 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 -32 1 0 0 0 -1 0 0 32 -1 0 0 31 -0 0 0 - -1 # Statement has 1 domain -8 8 -1 1 0 0 0 0 0 0 -1 -1 0 0 0 0 1 -1 -1 0 1 0 0 0 0 0 -1 0 -1 0 0 0 1 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 -32 1 0 0 0 -1 0 0 32 -1 0 0 31 -0 0 0 - -1 # Statement has a non resticted domain -1 4 -1 0 0 0 -0 0 0 - -0 # Automatically find iterator names. - -# ---------- SCATTERING FUNCTIONS ---------- -8 # Number of scattering functions - -9 13 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 # Beta 4 - -9 13 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 -1 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 # Beta 4 - -9 13 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 -2 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 # Beta 4 - -9 15 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 # Beta 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 # Beta 4 - -9 15 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 # Beta 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 # Beta 4 - -9 17 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4 # Beta 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 -1 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 4 - -9 17 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -4 # Beta 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 # Beta 4 - -9 13 -# p0 p1 p2 p3 p4 p5 p6 p7 p8 -0 1 0 0 0 0 0 0 0 0 0 0 -5 # Beta 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 # Alpha & Gamma 1 -0 0 0 1 0 0 0 0 0 0 0 0 0 # Beta 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 # Alpha & Gamma 2 -0 0 0 0 0 1 0 0 0 0 0 0 0 # Beta 2 -0 0 0 0 0 0 1 0 0 0 0 0 0 # Alpha & Gamma 3 -0 0 0 0 0 0 0 1 0 0 0 0 0 # Beta 3 -0 0 0 0 0 0 0 0 1 0 0 0 0 # Alpha & Gamma 4 -0 0 0 0 0 0 0 0 0 1 0 0 0 # Beta 4 - -1 # Set the scattering parameter names. -p0 p1 p2 p3 p4 p5 p6 p7 p8 - diff --git a/cloog-0.17.0/test/vasilache.good.c b/cloog-0.17.0/test/vasilache.good.c deleted file mode 100644 index f12f3fa..0000000 --- a/cloog-0.17.0/test/vasilache.good.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Generated from ../../../git/cloog/test/vasilache.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.15s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1() { hash(1); } -#define S2() { hash(2); } -#define S3() { hash(3); } -#define S4(i,j) { hash(4); hash(i); hash(j); } -#define S5(i,j) { hash(5); hash(i); hash(j); } -#define S6(i,j,k,l) { hash(6); hash(i); hash(j); hash(k); hash(l); } -#define S7(i,j,k,l) { hash(7); hash(i); hash(j); hash(k); hash(l); } -#define S8() { hash(8); } - -void test(int M, int N) -{ - /* Scattering iterators. */ - int p1, p3, p5, p7; - /* Original iterators. */ - int i, j, k, l; - S1() ; - S2() ; - for (p1=0;p1<=N-1;p1++) { - for (p3=0;p3<=N-1;p3++) { - S4(p1,p3) ; - S5(p1,p3) ; - } - } - for (p1=0;p1<=N-1;p1++) { - for (p3=0;p3<=N-1;p3++) { - for (p5=0;p5<=floord(N-1,32);p5++) { - if (p5 >= 0) { - p7 = 32*p5 ; - l = 32*p5 ; - S7(p1,p3,p5,32*p5) ; - } - if (p5 <= -1) { - S7(p1,p3,p5,0) ; - } - for (p7=max(32*p5+1,1);p7<=min(N-1,32*p5+31);p7++) { - l = p7-1 ; - S6(p1,p3,p5,p7-1) ; - S7(p1,p3,p5,p7) ; - } - if (p5 >= ceild(N-32,32)) { - l = N-1 ; - S6(p1,p3,p5,N-1) ; - } - if (p5 <= floord(N-33,32)) { - p7 = 32*p5+32 ; - l = 32*p5+31 ; - S6(p1,p3,p5,32*p5+31) ; - } - } - } - } - S8() ; -} diff --git a/cloog-0.17.0/test/vivien.c b/cloog-0.17.0/test/vivien.c deleted file mode 100644 index d364046..0000000 --- a/cloog-0.17.0/test/vivien.c +++ /dev/null @@ -1,195 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/vivien.cloog by CLooG 0.14.0-292-g2bfd6ac gmp bits in 0.12s. */ -if (n >= 0) { - for (p1=-54*n+4;p1<=4;p1++) { - if (p1%2 == 0) { - S1((p1-2)/2); - } - } - if (n >= 1) { - S3(1); - } - if (n <= 1) { - S1(2); - } - if (n >= 2) { - S4(1,2); - S1(2); - S6(1,2); - } - for (p1=7;p1<=min(9,4*n-2);p1++) { - if (p1 == 8) { - S4(1,3); - } - if (p1 == 8) { - S1(3); - } - if (p1 == 8) { - S6(1,3); - } - if (p1 == 9) { - S3(2); - } - if ((p1+1)%2 == 0) { - S2((p1-3)/2,1); - } - } - for (p1=10;p1<=min(2*n+58,4*n-2);p1++) { - p2 = ceild(-p1+2,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+5,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - } - if (p1 >= 4*n-4) { - if (p1%2 == 0) { - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - p2 = ceild(-p1+6,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+9,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - for (p2=ceild(-p1+10,4);p2<=min(-1,floord(-p1+2*n,2));p2++) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - if (p1%2 == 0) { - S6(-p2+2,(p1+2*p2-4)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - if ((p1 >= 2*n+4) && (p1 <= 4*n-6)) { - if (p1%2 == 0) { - S6((p1-2*n+2)/2,n-1); - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - if (p1 >= 2*n+6) { - if (p1%2 == 0) { - S6((p1-2*n)/2,n); - } - } - if (p1 <= 2*n+4) { - if (p1%2 == 0) { - S6(2,(p1-4)/2); - } - if ((p1+3)%4 == 0) { - S3((p1-1)/4); - } - if (p1%2 == 0) { - S1((p1-2)/2); - } - } - if (p1 >= 2*n+5) { - if ((p1+3)%4 == 0) { - S3((p1-1)/4); - } - if (p1%2 == 0) { - S1((p1-2)/2); - } - } - if (p1 <= 2*n+2) { - if (p1%2 == 0) { - S6(1,(p1-2)/2); - } - } - for (p2=max(1,ceild(p1-2*n-1,2));p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - S2((p1-2*p2-1)/2,p2); - } - } - } - if ((n >= 2) && (n <= 29)) { - S2(n,n-1); - } - if ((n >= 2) && (n <= 29)) { - S1(2*n-1); - } - if ((n >= 2) && (n <= 28)) { - S3(n); - } - for (p1=max(7,4*n+2);p1<=2*n+58;p1++) { - if (p1%2 == 0) { - S1((p1-2)/2); - } - } - for (p1=2*n+59;p1<=4*n-2;p1++) { - p2 = ceild(-p1+2,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+5,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - } - if (p1 >= 4*n-4) { - if (p1%2 == 0) { - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - p2 = ceild(-p1+6,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+9,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - if (p1%2 == 0) { - S6(-p2+2,(p1+2*p2-4)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - if (p1 <= 4*n-6) { - if (p1%2 == 0) { - S6((p1-2*n+2)/2,n-1); - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - if (p1%2 == 0) { - S6((p1-2*n)/2,n); - } - if ((p1+3)%4 == 0) { - S3((p1-1)/4); - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - S2((p1-2*p2-1)/2,p2); - } - } - } - if (n >= 30) { - S2(n,n-1); - } - if (n >= 29) { - S3(n); - } -} diff --git a/cloog-0.17.0/test/vivien.cloog b/cloog-0.17.0/test/vivien.cloog deleted file mode 100644 index 3db4103..0000000 --- a/cloog-0.17.0/test/vivien.cloog +++ /dev/null @@ -1,156 +0,0 @@ -# Context -c # output in language C - -# no constraints on parameters -1 3 # 1 line and 3 columns - -# n 1 -1 0 0 # 0 >= 0 always true - -1 # Setting manually the parameter' sname -n # The name - - - -# -------------------- Statements ------------------ -6 # Number of statements - - -1 # First statement: 1 domain - -# First domain - -2 4 # 2 lines and 4 columns -# i n 1 -1 1 27 -1 # i >= 1 -1 -1 1 28 # n >= i -0 0 0 - -1 # Second statement: 1 domain - -# First domain - -4 5 # 4 lines and 5 columns -# i k n 1 -1 1 29 0 -1 # i >= 1 -1 -1 0 1 0 # n >= i -1 0 1 0 -1 # k >= 1 -1 1 -1 0 -1 # k <= i-1 -0 0 0 - - -1 # Third statement: 1 domain - -# First domain - -2 4 # 2 lines and 4 columns -# i n 1 -1 1 0 -1 # i >= 1 -1 -1 1 0 # n >= i -0 0 0 - - -1 # Fourth statement: 1 domain - -# First domain - -4 5 # 4 lines and 5 columns -# i j n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # n >= i -1 -1 1 0 -1 # j >= i+1 -1 0 -1 1 0 # j <= n -0 0 0 - -1 # Fifth statement: 1 domain - -# First domain - -6 6 # 6 lines and 6 columns -# i j k n 1 -1 1 0 0 0 -1 # i >= 1 -1 -1 0 0 1 0 # n >= i -1 -1 1 0 0 -1 # j >= i+1 -1 0 -1 0 1 0 # j <= n -1 0 0 1 0 -1 # k >= 1 -1 1 0 -1 0 -1 # k <= i-1 -0 0 0 - -1 # Sixth statement: 1 domain - -# First domain - -4 5 # 4 lines and 5 columns -# i j n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # n >= i -1 -1 1 0 -1 # j >= i+1 -1 0 -1 1 0 # j <= n -0 0 0 - - -1 # We manually set the iterator names -i j k - - -# ------------------------ Scattering ------------------- - -6 # Number of scattering functions - - -# First function -3 7 # 3 lines and 7 columns -# p1 p2 p3 i n 1 -0 1 0 0 -2 0 -2 # p1 = 2i+2 -0 0 1 0 0 0 0 # p2 = 0 -0 0 0 1 0 0 0 # p3 = 0 - -# Second function -3 8 # 3 lines and 8 columns -# p1 p2 p3 i j n 1 -0 1 0 0 -2 -2 0 -1 # p1 = 2i+2j+1 -0 0 1 0 0 -1 0 0 # p2 = j -0 0 0 1 0 0 0 0 # p3 = 0 - -# Third function -3 7 # 3 lines and 7 columns -# p1 p2 p3 i n 1 -0 1 0 0 -4 0 -1 # p1 = 4i+1 -0 0 1 0 0 0 0 # p2 = 0 -0 0 0 1 0 0 0 # p3 = 0 - -# Fourth function -3 8 # 3 lines and 8 columns -# p1 p2 p3 i j n 1 -0 1 0 0 -2 -2 0 0 # p1 = 2i+2j -0 0 1 0 1 0 0 0 # p2 = -i -0 0 0 1 0 0 0 0 # p3 = 0 - - -# Fifth function -3 9 # 3 lines and 9 columns -# p1 p2 p3 i j k n 1 -0 1 0 0 -2 -2 0 0 0 # p1 = 2i+2j -0 0 1 0 1 0 0 0 -1 # p2 = -i+1 -0 0 0 1 0 0 -1 0 0 # p3 = k - -# Sixth function -3 8 # 3 lines and 8 columns -# p1 p2 p3 i j n 1 -0 1 0 0 -2 -2 0 0 # p1 = 2i+2j -0 0 1 0 1 0 0 -2 # p2 = -i+2 -0 0 0 1 0 0 0 0 # p3 = 0 - -1 # Manually set the scattering dimensions -p1 p2 p3 - - - - - - - - - - - diff --git a/cloog-0.17.0/test/vivien.good.c b/cloog-0.17.0/test/vivien.good.c deleted file mode 100644 index 8d2c9d3..0000000 --- a/cloog-0.17.0/test/vivien.good.c +++ /dev/null @@ -1,831 +0,0 @@ -/* Generated from ../../../git/cloog/test/vivien.cloog by CLooG 0.14.0-76-gef19709 gmp bits in 0.78s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i) { hash(3); hash(i); } -#define S4(i,j) { hash(4); hash(i); hash(j); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } -#define S6(i,j) { hash(6); hash(i); hash(j); } - -void test(int n) -{ - /* Scattering iterators. */ - int p1, p2, p3; - /* Original iterators. */ - int i, j, k; - for (p1=-54*n+4;p1<=min(4,4*n+1);p1++) { - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - } - if (n >= 1) { - S3(1) ; - } - if (n >= 2) { - S4(1,2) ; - S1(2) ; - S6(1,2) ; - } - for (p1=max(-54*n+4,4*n+2);p1<=6;p1++) { - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - } - for (p1=7;p1<=min(min(2*n+2,9),floord(4*n+12,3));p1++) { - for (p2=ceild(-p1+2,4);p2<=-1;p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - if (p1%2 == 0) { - j = (p1-2)/2 ; - S6(1,(p1-2)/2) ; - } - if ((p1+1)%2 == 0) { - i = (p1-3)/2 ; - S2((p1-3)/2,1) ; - } - } - for (p1=2*n+3;p1<=min(9,4*n-2);p1++) { - for (p2=ceild(-p1+2,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - if (n >= 4) { - S4(2,3) ; - S4(1,4) ; - S5(2,3,1) ; - S6(2,3) ; - S1(4) ; - S6(1,4) ; - } - if (n == 3) { - S4(2,3) ; - S5(2,3,1) ; - S6(2,3) ; - S1(4) ; - } - for (p1=11;p1<=min(12,2*n+2);p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=-1;p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - if (p1%2 == 0) { - j = (p1-4)/2 ; - S6(2,(p1-4)/2) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - if (p1%2 == 0) { - j = (p1-2)/2 ; - S6(1,(p1-2)/2) ; - } - if ((p1+1)%2 == 0) { - i = (p1-3)/2 ; - S2((p1-3)/2,1) ; - } - for (p2=2;p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - if (n == 4) { - S2(4,1) ; - S2(3,2) ; - } - if (n == 5) { - S3(3) ; - S2(5,1) ; - S2(4,2) ; - } - if (n >= 6) { - S3(3) ; - S2(5,1) ; - S2(4,2) ; - } - if ((n <= 4) && (n >= 4)) { - p1 = 2*n+4 ; - for (p2=ceild(-n-1,2);p2<=-2;p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - } - for (p2=ceild(-n+1,2);p2<=-1;p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - S6(2,n) ; - i = n+1 ; - S1(n+1) ; - } - for (p1=14;p1<=2*n+2;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - p2 = floord(-p1+9,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+10,4);p2<=-1;p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - if (p1%2 == 0) { - j = (p1-4)/2 ; - S6(2,(p1-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - if (p1%2 == 0) { - j = (p1-2)/2 ; - S6(1,(p1-2)/2) ; - } - if ((p1+1)%2 == 0) { - i = (p1-3)/2 ; - S2((p1-3)/2,1) ; - } - for (p2=2;p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - if ((n <= 4) && (n >= 4)) { - S3(3) ; - for (p2=-n+6;p2<=2;p2++) { - i = -p2+6 ; - S2(-p2+6,p2) ; - } - } - if (n >= 7) { - p1 = 2*n+3 ; - if ((n+1)%2 == 0) { - i = (n+1)/2 ; - S3((n+1)/2) ; - } - S2(n,1) ; - for (p2=2;p2<=floord(n,2);p2++) { - i = -p2+n+1 ; - S2(-p2+n+1,p2) ; - } - } - if ((n <= 6) && (n >= 6)) { - p1 = 2*n+3 ; - if ((n+1)%2 == 0) { - i = (n+1)/2 ; - S3((n+1)/2) ; - } - S2(n,1) ; - for (p2=2;p2<=floord(n,2);p2++) { - i = -p2+n+1 ; - S2(-p2+n+1,p2) ; - } - } - if (n >= 7) { - p1 = 2*n+4 ; - for (p2=ceild(-n-1,2);p2<=floord(-2*n+1,4);p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - } - for (p2=ceild(-n+1,2);p2<=floord(-2*n+5,4);p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - for (p2=ceild(-n+3,2);p2<=-2;p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - i = -p2+2 ; - j = p2+n ; - S6(-p2+2,p2+n) ; - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - j = n-1 ; - S6(3,n-1) ; - S5(2,n,1) ; - S6(2,n) ; - i = n+1 ; - S1(n+1) ; - } - if ((n <= 5) && (n >= 5)) { - p1 = 2*n+4 ; - for (p2=ceild(-n-1,2);p2<=floord(-2*n+1,4);p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - } - for (p2=ceild(-n+1,2);p2<=-2;p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - for (p2=-1;p2<=floord(-2*n+5,4);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - for (p2=ceild(-n+3,2);p2<=-1;p2++) { - i = -p2+2 ; - j = p2+n ; - S6(-p2+2,p2+n) ; - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - S6(2,n) ; - i = n+1 ; - S1(n+1) ; - } - if ((n <= 6) && (n >= 6)) { - p1 = 2*n+4 ; - for (p2=ceild(-n-1,2);p2<=floord(-2*n+1,4);p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - } - for (p2=ceild(-n+1,2);p2<=-2;p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - j = n-1 ; - S6(3,n-1) ; - S5(2,n,1) ; - S6(2,n) ; - i = n+1 ; - S1(n+1) ; - } - for (p1=2*n+5;p1<=min(4*n-10,2*n+58);p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - p2 = floord(-p1+9,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+2*n+3,2);p2<=min(floord(-p1+2*n+4,2),-1);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-9,2*n+5);p1<=min(4*n-8,2*n+58);p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+2*n+3,2);p2<=min(floord(-p1+2*n+4,2),-1);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-7,2*n+5);p1<=min(4*n-6,2*n+58);p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+2*n+1,2);p2<=floord(-p1+9,4);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n+2,2);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+2*n+3,2);p2<=min(floord(-p1+2*n+4,2),-1);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(max(4*n-5,14),2*n+5);p1<=min(4*n-2,2*n+58);p1++) { - for (p2=ceild(-p1+2,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - } - for (p2=max(ceild(-p1+2*n+1,2),ceild(-p1+6,4));p2<=floord(-p1+2*n+2,2);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=max(ceild(-p1+10,4),ceild(-p1+2*n+3,2));p2<=min(floord(-p1+2*n+4,2),-1);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - if ((n >= 2) && (n <= 29)) { - p1 = 4*n-1 ; - p2 = n-1 ; - j = n-1 ; - S2(n,n-1) ; - } - for (p1=2*n+59;p1<=4*n-10;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - p2 = floord(-p1+9,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-9,2*n+59);p1<=4*n-8;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-7,2*n+59);p1<=4*n-6;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+2*n+1,2);p2<=floord(-p1+9,4);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n+2,2);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-5,2*n+59);p1<=4*n-2;p1++) { - for (p2=ceild(-p1+2,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - } - for (p2=max(ceild(-p1+2*n+1,2),ceild(-p1+6,4));p2<=floord(-p1+2*n+2,2);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=max(ceild(-p1+10,4),ceild(-p1+2*n+3,2));p2<=floord(-p1+2*n+4,2);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n,7);p1<=min(4*n+1,2*n+58);p1++) { - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - } - if (n >= 30) { - p1 = 4*n-1 ; - p2 = n-1 ; - j = n-1 ; - S2(n,n-1) ; - } - for (p1=max(max(-54*n+4,4*n+2),7);p1<=2*n+58;p1++) { - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - } - for (p1=max(4*n,2*n+59);p1<=4*n+1;p1++) { - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - } -} diff --git a/cloog-0.17.0/test/vivien2.c b/cloog-0.17.0/test/vivien2.c deleted file mode 100644 index d4f1f04..0000000 --- a/cloog-0.17.0/test/vivien2.c +++ /dev/null @@ -1,168 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/vivien2.cloog by CLooG 0.14.0-292-g2bfd6ac gmp bits in 0.10s. */ -for (p1=-54*n+4;p1<=4;p1++) { - if (p1%2 == 0) { - S1((p1-2)/2); - } -} -S3(1); -S4(1,2); -S1(2); -S6(1,2); -for (p1=7;p1<=9;p1++) { - if (p1 == 8) { - S4(1,3); - } - if (p1 == 8) { - S1(3); - } - if (p1 == 8) { - S6(1,3); - } - if (p1 == 9) { - S3(2); - } - if ((p1+1)%2 == 0) { - S2((p1-3)/2,1); - } -} -for (p1=10;p1<=2*n+58;p1++) { - p2 = ceild(-p1+2,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+5,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - } - if (p1 >= 4*n-4) { - if (p1%2 == 0) { - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - p2 = ceild(-p1+6,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+9,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - for (p2=ceild(-p1+10,4);p2<=min(-1,floord(-p1+2*n,2));p2++) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - if (p1%2 == 0) { - S6(-p2+2,(p1+2*p2-4)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - if ((p1 >= 2*n+4) && (p1 <= 4*n-6)) { - if (p1%2 == 0) { - S6((p1-2*n+2)/2,n-1); - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - if (p1 >= 2*n+6) { - if (p1%2 == 0) { - S6((p1-2*n)/2,n); - } - } - if (p1 <= 2*n+4) { - if (p1%2 == 0) { - S6(2,(p1-4)/2); - } - if ((p1+3)%4 == 0) { - S3((p1-1)/4); - } - if (p1%2 == 0) { - S1((p1-2)/2); - } - } - if (p1 >= 2*n+5) { - if ((p1+3)%4 == 0) { - S3((p1-1)/4); - } - if (p1%2 == 0) { - S1((p1-2)/2); - } - } - if (p1 <= 2*n+2) { - if (p1%2 == 0) { - S6(1,(p1-2)/2); - } - } - for (p2=max(1,ceild(p1-2*n-1,2));p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - S2((p1-2*p2-1)/2,p2); - } - } -} -for (p1=2*n+59;p1<=4*n-2;p1++) { - p2 = ceild(-p1+2,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+5,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - } - if (p1 >= 4*n-4) { - if (p1%2 == 0) { - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - p2 = ceild(-p1+6,4); - if (p2 <= min(floord(-p1+2*n,2),floord(-p1+9,4))) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - S4(-p2,(p1+2*p2)/2); - } - if (p1%2 == 0) { - S6(-p2+2,(p1+2*p2-4)/2); - } - for (p3=1;p3<=-p2;p3++) { - if (p1%2 == 0) { - S5(-p2+1,(p1+2*p2-2)/2,p3); - } - } - } - if (p1 <= 4*n-6) { - if (p1%2 == 0) { - S6((p1-2*n+2)/2,n-1); - for (p3=1;p3<=floord(p1-2*n-2,2);p3++) { - S5((p1-2*n)/2,n,p3); - } - } - } - if (p1%2 == 0) { - S6((p1-2*n)/2,n); - } - if ((p1+3)%4 == 0) { - S3((p1-1)/4); - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - S2((p1-2*p2-1)/2,p2); - } - } -} -S2(n,n-1); -S3(n); diff --git a/cloog-0.17.0/test/vivien2.cloog b/cloog-0.17.0/test/vivien2.cloog deleted file mode 100644 index 42e7fb7..0000000 --- a/cloog-0.17.0/test/vivien2.cloog +++ /dev/null @@ -1,156 +0,0 @@ -# Context -c # output in language C - -# no constraints on parameters -1 3 # 1 line and 3 columns - -# n 1 -1 1 -30 # 0 >= 0 always true - -1 # Setting manually the parameter' sname -n # The name - - - -# -------------------- Statements ------------------ -6 # Number of statements - - -1 # First statement: 1 domain - -# First domain - -2 4 # 2 lines and 4 columns -# i n 1 -1 1 27 -1 # i >= 1 -1 -1 1 28 # n >= i -0 0 0 - -1 # Second statement: 1 domain - -# First domain - -4 5 # 4 lines and 5 columns -# i k n 1 -1 1 29 0 -1 # i >= 1 -1 -1 0 1 0 # n >= i -1 0 1 0 -1 # k >= 1 -1 1 -1 0 -1 # k <= i-1 -0 0 0 - - -1 # Third statement: 1 domain - -# First domain - -2 4 # 2 lines and 4 columns -# i n 1 -1 1 0 -1 # i >= 1 -1 -1 1 0 # n >= i -0 0 0 - - -1 # Fourth statement: 1 domain - -# First domain - -4 5 # 4 lines and 5 columns -# i j n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # n >= i -1 -1 1 0 -1 # j >= i+1 -1 0 -1 1 0 # j <= n -0 0 0 - -1 # Fifth statement: 1 domain - -# First domain - -6 6 # 6 lines and 6 columns -# i j k n 1 -1 1 0 0 0 -1 # i >= 1 -1 -1 0 0 1 0 # n >= i -1 -1 1 0 0 -1 # j >= i+1 -1 0 -1 0 1 0 # j <= n -1 0 0 1 0 -1 # k >= 1 -1 1 0 -1 0 -1 # k <= i-1 -0 0 0 - -1 # Sixth statement: 1 domain - -# First domain - -4 5 # 4 lines and 5 columns -# i j n 1 -1 1 0 0 -1 # i >= 1 -1 -1 0 1 0 # n >= i -1 -1 1 0 -1 # j >= i+1 -1 0 -1 1 0 # j <= n -0 0 0 - - -1 # We manually set the iterator names -i j k - - -# ------------------------ Scattering ------------------- - -6 # Number of scattering functions - - -# First function -3 7 # 3 lines and 7 columns -# p1 p2 p3 i n 1 -0 1 0 0 -2 0 -2 # p1 = 2i+2 -0 0 1 0 0 0 0 # p2 = 0 -0 0 0 1 0 0 0 # p3 = 0 - -# Second function -3 8 # 3 lines and 8 columns -# p1 p2 p3 i j n 1 -0 1 0 0 -2 -2 0 -1 # p1 = 2i+2j+1 -0 0 1 0 0 -1 0 0 # p2 = j -0 0 0 1 0 0 0 0 # p3 = 0 - -# Third function -3 7 # 3 lines and 7 columns -# p1 p2 p3 i n 1 -0 1 0 0 -4 0 -1 # p1 = 4i+1 -0 0 1 0 0 0 0 # p2 = 0 -0 0 0 1 0 0 0 # p3 = 0 - -# Fourth function -3 8 # 3 lines and 8 columns -# p1 p2 p3 i j n 1 -0 1 0 0 -2 -2 0 0 # p1 = 2i+2j -0 0 1 0 1 0 0 0 # p2 = -i -0 0 0 1 0 0 0 0 # p3 = 0 - - -# Fifth function -3 9 # 3 lines and 9 columns -# p1 p2 p3 i j k n 1 -0 1 0 0 -2 -2 0 0 0 # p1 = 2i+2j -0 0 1 0 1 0 0 0 -1 # p2 = -i+1 -0 0 0 1 0 0 -1 0 0 # p3 = k - -# Sixth function -3 8 # 3 lines and 8 columns -# p1 p2 p3 i j n 1 -0 1 0 0 -2 -2 0 0 # p1 = 2i+2j -0 0 1 0 1 0 0 -2 # p2 = -i+2 -0 0 0 1 0 0 0 0 # p3 = 0 - -1 # Manually set the scattering dimensions -p1 p2 p3 - - - - - - - - - - - diff --git a/cloog-0.17.0/test/vivien2.good.c b/cloog-0.17.0/test/vivien2.good.c deleted file mode 100644 index 32f1fff..0000000 --- a/cloog-0.17.0/test/vivien2.good.c +++ /dev/null @@ -1,656 +0,0 @@ -/* Generated from ../../../git/cloog/test/vivien2.cloog by CLooG 0.14.0-76-gef19709 gmp bits in 0.58s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i) { hash(1); hash(i); } -#define S2(i,j) { hash(2); hash(i); hash(j); } -#define S3(i) { hash(3); hash(i); } -#define S4(i,j) { hash(4); hash(i); hash(j); } -#define S5(i,j,k) { hash(5); hash(i); hash(j); hash(k); } -#define S6(i,j) { hash(6); hash(i); hash(j); } - -void test(int n) -{ - /* Scattering iterators. */ - int p1, p2, p3; - /* Original iterators. */ - int i, j, k; - for (p1=-54*n+4;p1<=4;p1++) { - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - } - S3(1) ; - S4(1,2) ; - S1(2) ; - S6(1,2) ; - for (p1=7;p1<=9;p1++) { - for (p2=ceild(-p1+2,4);p2<=-1;p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - if (p1%2 == 0) { - j = (p1-2)/2 ; - S6(1,(p1-2)/2) ; - } - if ((p1+1)%2 == 0) { - i = (p1-3)/2 ; - S2((p1-3)/2,1) ; - } - } - S4(2,3) ; - S4(1,4) ; - S5(2,3,1) ; - S6(2,3) ; - S1(4) ; - S6(1,4) ; - for (p1=11;p1<=12;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=-1;p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - if (p1%2 == 0) { - j = (p1-4)/2 ; - S6(2,(p1-4)/2) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - if (p1%2 == 0) { - j = (p1-2)/2 ; - S6(1,(p1-2)/2) ; - } - if ((p1+1)%2 == 0) { - i = (p1-3)/2 ; - S2((p1-3)/2,1) ; - } - for (p2=2;p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - S3(3) ; - S2(5,1) ; - S2(4,2) ; - for (p1=14;p1<=2*n+2;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - p2 = floord(-p1+9,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+10,4);p2<=-1;p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - if (p1%2 == 0) { - j = (p1-4)/2 ; - S6(2,(p1-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - if (p1%2 == 0) { - j = (p1-2)/2 ; - S6(1,(p1-2)/2) ; - } - if ((p1+1)%2 == 0) { - i = (p1-3)/2 ; - S2((p1-3)/2,1) ; - } - for (p2=2;p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - p1 = 2*n+3 ; - if ((n+1)%2 == 0) { - i = (n+1)/2 ; - S3((n+1)/2) ; - } - S2(n,1) ; - for (p2=2;p2<=floord(n,2);p2++) { - i = -p2+n+1 ; - S2(-p2+n+1,p2) ; - } - p1 = 2*n+4 ; - for (p2=ceild(-n-1,2);p2<=floord(-2*n+1,4);p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - } - for (p2=ceild(-n+1,2);p2<=floord(-2*n+5,4);p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - for (p2=ceild(-n+3,2);p2<=-2;p2++) { - j = p2+n+2 ; - S4(-p2,p2+n+2) ; - i = -p2+2 ; - j = p2+n ; - S6(-p2+2,p2+n) ; - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - j = p2+n+1 ; - S5(-p2+1,p2+n+1,p3) ; - } - } - j = n-1 ; - S6(3,n-1) ; - S5(2,n,1) ; - S6(2,n) ; - i = n+1 ; - S1(n+1) ; - for (p1=2*n+5;p1<=min(4*n-10,2*n+58);p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - p2 = floord(-p1+9,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+2*n+3,2);p2<=min(floord(-p1+2*n+4,2),-1);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=4*n-9;p1<=min(4*n-8,2*n+58);p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=4*n-7;p1<=min(4*n-6,2*n+58);p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+2*n+1,2);p2<=floord(-p1+9,4);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n+2,2);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=4*n-5;p1<=2*n+58;p1++) { - for (p2=ceild(-p1+2,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - } - for (p2=max(ceild(-p1+2*n+1,2),ceild(-p1+6,4));p2<=floord(-p1+2*n+2,2);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=max(ceild(-p1+2*n+3,2),ceild(-p1+10,4));p2<=floord(-p1+2*n+4,2);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - if (p1%2 == 0) { - i = (p1-2)/2 ; - S1((p1-2)/2) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=2*n+59;p1<=4*n-10;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - p2 = floord(-p1+9,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-9,2*n+59);p1<=4*n-8;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+2,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-7,2*n+59);p1<=4*n-6;p1++) { - p2 = floord(-p1+5,4) ; - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p2=ceild(-p1+6,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+2*n+1,2);p2<=floord(-p1+9,4);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=ceild(-p1+10,4);p2<=floord(-p1+2*n+2,2);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - p2 = floord(-p1+2*n+4,2) ; - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - for (p1=max(4*n-5,2*n+59);p1<=4*n-2;p1++) { - for (p2=ceild(-p1+2,4);p2<=floord(-p1+2*n,2);p2++) { - if (p1%2 == 0) { - j = (p1+2*p2)/2 ; - S4(-p2,(p1+2*p2)/2) ; - } - } - for (p2=max(ceild(-p1+2*n+1,2),ceild(-p1+6,4));p2<=floord(-p1+2*n+2,2);p2++) { - for (p3=1;p3<=-p2;p3++) { - i = -p2+1 ; - if (p1%2 == 0) { - j = (p1+2*p2-2)/2 ; - S5(-p2+1,(p1+2*p2-2)/2,p3) ; - } - } - } - for (p2=max(ceild(-p1+10,4),ceild(-p1+2*n+3,2));p2<=floord(-p1+2*n+4,2);p2++) { - i = -p2+2 ; - if (p1%2 == 0) { - j = (p1+2*p2-4)/2 ; - S6(-p2+2,(p1+2*p2-4)/2) ; - } - } - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - for (p2=ceild(p1-2*n-1,2);p2<=floord(p1-3,4);p2++) { - if ((p1+1)%2 == 0) { - i = (p1-2*p2-1)/2 ; - S2((p1-2*p2-1)/2,p2) ; - } - } - } - p1 = 4*n-1 ; - p2 = n-1 ; - j = n-1 ; - S2(n,n-1) ; - for (p1=4*n;p1<=4*n+1;p1++) { - if ((p1+3)%4 == 0) { - i = (p1-1)/4 ; - S3((p1-1)/4) ; - } - } -} diff --git a/cloog-0.17.0/test/walters.c b/cloog-0.17.0/test/walters.c deleted file mode 100644 index fdb2183..0000000 --- a/cloog-0.17.0/test/walters.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/walters.cloog by CLooG 0.16.1-3-g354eed5 gmp bits in 0.01s. */ -S2(1,0,1,0); -S4(1,0,1,0); -S3(2,0,1,1); -S4(2,0,1,1); -for (i=3;i<=10;i++) { - if ((i+1)%3 == 0) { - S3(i,(i-2)/3,(i+1)/3,(i+1)/3); - } - if ((i+2)%3 == 0) { - S2(i,(i-1)/3,(i+2)/3,(i-1)/3); - } - if (i%3 == 0) { - S1(i,i/3,i/3,i/3); - } - div36 = floord(i,3); - div37 = ceild(2*i-3*div36-1,3); - if (div37 <= floord(i+2,3)) { - S4(i,div36,div37,i-div36-div37); - } -} diff --git a/cloog-0.17.0/test/walters.cloog b/cloog-0.17.0/test/walters.cloog deleted file mode 100644 index 9a3ba81..0000000 --- a/cloog-0.17.0/test/walters.cloog +++ /dev/null @@ -1,189 +0,0 @@ -# language: C - -c - - - -# parameters - -1 2 - -1 1 - - 1 - - - -4 - - - -# S1: sub1 - -1 - -18 6 - - 1 1 0 0 0 -1 - - 1 -1 0 0 0 10 - - 1 -1 3 0 0 2 - - 1 1 -3 0 0 0 - - 1 0 1 0 0 -1 - - 1 -1 3 0 0 0 - - 1 1 0 -3 0 2 - - 1 -1 0 3 0 0 - - 1 1 0 0 -3 1 - - 1 -1 0 0 3 1 - - 1 1 0 0 0 -1 - - 1 -1 0 0 0 10 - - 1 1 -3 0 0 0 - - 1 -1 3 0 0 2 - - 1 1 0 -3 0 2 - - 1 -1 0 3 0 0 - - 1 1 0 0 -3 1 - - 1 -1 0 0 3 1 - - 0 0 0 - - - -# S2: sub2 - -1 - -17 6 - - 1 1 0 0 0 -1 - - 1 -1 0 0 0 10 - - 1 -1 0 3 0 0 - - 1 1 0 -3 0 2 - - 1 -1 0 3 0 -2 - - 1 1 -3 0 0 0 - - 1 -1 3 0 0 2 - - 1 1 0 0 -3 1 - - 1 -1 0 0 3 1 - - 1 1 0 0 0 -1 - - 1 -1 0 0 0 10 - - 1 1 -3 0 0 0 - - 1 -1 3 0 0 2 - - 1 1 0 -3 0 2 - - 1 -1 0 3 0 0 - - 1 1 0 0 -3 1 - - 1 -1 0 0 3 1 - - 0 0 0 - - - -# S3: sub3 - -1 - -18 6 - - 1 -1 0 0 0 10 - - 1 1 0 0 0 -1 - - 1 -1 0 0 3 1 - - 1 1 0 0 -3 1 - - 1 0 0 0 1 -1 - - 1 -1 0 0 3 -1 - - 1 1 -3 0 0 0 - - 1 -1 3 0 0 2 - - 1 1 0 -3 0 2 - - 1 -1 0 3 0 0 - - 1 1 0 0 0 -1 - - 1 -1 0 0 0 10 - - 1 1 -3 0 0 0 - - 1 -1 3 0 0 2 - - 1 1 0 -3 0 2 - - 1 -1 0 3 0 0 - - 1 1 0 0 -3 1 - - 1 -1 0 0 3 1 - - 0 0 0 - - - -# S4: enclosing - -1 - -8 6 - - 1 1 0 0 0 -1 - - 1 -1 0 0 0 10 - - 1 1 -3 0 0 0 - - 1 -1 3 0 0 2 - - 1 1 0 -3 0 2 - - 1 -1 0 3 0 0 - - 1 1 0 0 -3 1 - - 1 -1 0 0 3 1 - - 0 0 0 - - - - 1 - - i div36 div37 div38 - - 0 - - 0 diff --git a/cloog-0.17.0/test/walters.good.c b/cloog-0.17.0/test/walters.good.c deleted file mode 100644 index 0e1c2b7..0000000 --- a/cloog-0.17.0/test/walters.good.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/walters.cloog by CLooG 0.14.0-223-gad1f0a0 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,div36,div37,div38) { hash(1); hash(i); hash(div36); hash(div37); hash(div38); } -#define S2(i,div36,div37,div38) { hash(2); hash(i); hash(div36); hash(div37); hash(div38); } -#define S3(i,div36,div37,div38) { hash(3); hash(i); hash(div36); hash(div37); hash(div38); } -#define S4(i,div36,div37,div38) { hash(4); hash(i); hash(div36); hash(div37); hash(div38); } - -void test() -{ - /* Original iterators. */ - int i, div36, div37, div38; - S2(1,0,1,0); - S4(1,0,1,0); - S3(2,0,1,1); - S4(2,0,1,1); - for (i=3;i<=10;i++) { - if ((i+2)%3 <= 1) { - div36 = floord(i-1,3); - if ((i+1)%3 <= 1) { - div37 = floord(i+1,3); - if ((i+1)%3 == 0) { - S3(i,div36,div37,(i+1)/3); - S4(i,div36,div37,(i+1)/3); - } - } - if ((i+2)%3 == 0) { - div38 = floord(i+1,3); - S2(i,div36,(i+2)/3,div38); - S4(i,div36,(i+2)/3,div38); - } - } - if (i%3 == 0) { - div37 = floord(i+2,3); - div38 = floord(i+1,3); - S1(i,i/3,div37,div38); - S4(i,i/3,div37,div38); - } - } -} diff --git a/cloog-0.17.0/test/walters2.c b/cloog-0.17.0/test/walters2.c deleted file mode 100644 index bc31d9e..0000000 --- a/cloog-0.17.0/test/walters2.c +++ /dev/null @@ -1,14 +0,0 @@ -/* Generated from ../../../git/cloog/test/walters2.cloog by CLooG 0.14.0-245-gd8c1718 gmp bits in 0.01s. */ -for (i=0;i<=51;i++) { - S2(0,i); -} -for (j=1;j<=24;j++) { - S2(j,0); - for (i=1;i<=50;i++) { - S1(j,i); - } - S2(j,51); -} -for (i=0;i<=51;i++) { - S2(25,i); -} diff --git a/cloog-0.17.0/test/walters2.cloog b/cloog-0.17.0/test/walters2.cloog deleted file mode 100644 index efdf2f6..0000000 --- a/cloog-0.17.0/test/walters2.cloog +++ /dev/null @@ -1,90 +0,0 @@ -# language: C -c - -# parameters -1 2 -1 1 - 1 - -2 - - -# S1 -1 -12 4 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 - 1 1 0 -1 - 1 0 1 -1 - 1 -1 0 24 - 1 0 -1 50 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 - 0 0 0 - - - - - - -# S2 -4 -11 4 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 - 1 1 0 -1 - 1 0 1 -1 - 1 1 0 -25 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 -12 4 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 - 1 1 0 -1 - 1 0 1 -1 - 1 -1 0 24 - 1 0 1 -51 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 -10 4 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 - 1 1 0 -1 - 1 0 -1 0 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 -9 4 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 - 1 -1 0 0 - 1 1 0 0 - 1 -1 0 25 - 1 0 1 0 - 1 0 -1 51 - 0 0 0 - - - - 1 - j i - 0 - 0 - diff --git a/cloog-0.17.0/test/walters2.good.c b/cloog-0.17.0/test/walters2.good.c deleted file mode 100644 index 2b8990f..0000000 --- a/cloog-0.17.0/test/walters2.good.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Generated from /home/skimo/git/cloog/test/walters2.cloog by CLooG 0.14.0-227-g08f253a gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(j,i) { hash(1); hash(j); hash(i); } -#define S2(j,i) { hash(2); hash(j); hash(i); } - -void test() -{ - /* Original iterators. */ - int j, i; - for (i=0;i<=51;i++) { - S2(0,i); - } - for (j=1;j<=24;j++) { - S2(j,0); - for (i=1;i<=50;i++) { - S1(j,i); - } - S2(j,51); - } - for (i=0;i<=51;i++) { - if (i >= 0) { - S2(25,i); - } - } -} diff --git a/cloog-0.17.0/test/walters3.c b/cloog-0.17.0/test/walters3.c deleted file mode 100644 index fc922d6..0000000 --- a/cloog-0.17.0/test/walters3.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/walters3.cloog by CLooG 0.14.0-338-g99c7504 gmp bits in 0.00s. */ -for (j=2;j<=8;j++) { - if (j%2 == 0) { - S1(j,j/2,j/2); - S2(j,j/2,j/2); - } -} -S2(10,5,5); diff --git a/cloog-0.17.0/test/walters3.cloog b/cloog-0.17.0/test/walters3.cloog deleted file mode 100644 index fb45ab0..0000000 --- a/cloog-0.17.0/test/walters3.cloog +++ /dev/null @@ -1,49 +0,0 @@ -# language: C -c - -# parameters -1 2 -1 1 - 1 - - -2 - -1 -15 5 - 1 -1 0 0 10 - 1 -1 0 0 8 - 1 -1 0 2 1 - 1 1 0 -2 0 - 1 -1 0 2 0 - 1 0 0 1 -1 - 1 1 -2 0 0 - 1 -1 2 0 1 - 1 1 0 0 -1 - 1 -1 0 0 10 - 0 1 -2 0 0 - 1 1 -2 0 0 - 1 -1 2 0 1 - 1 1 0 -2 0 - 1 -1 0 2 1 - 0 0 0 - - - -1 -7 5 - 1 1 0 0 -1 - 1 -1 0 0 10 - 0 1 -2 0 0 - 1 1 -2 0 0 - 1 -1 2 0 1 - 1 1 0 -2 0 - 1 -1 0 2 1 - 0 0 0 - - - 1 - j a b - #-------- SCATTERING ------------- - 0 # no scattering function - diff --git a/cloog-0.17.0/test/walters3.good.c b/cloog-0.17.0/test/walters3.good.c deleted file mode 100644 index 45a1b33..0000000 --- a/cloog-0.17.0/test/walters3.good.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Generated from ../../../git/cloog/test/walters3.cloog by CLooG 0.14.0-338-g99c7504 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(j,a,b) { hash(1); hash(j); hash(a); hash(b); } -#define S2(j,a,b) { hash(2); hash(j); hash(a); hash(b); } - -void test() -{ - /* Original iterators. */ - int j, a, b; - for (j=2;j<=8;j++) { - if (j%2 == 0) { - S1(j,j/2,j/2); - S2(j,j/2,j/2); - } - } - S2(10,5,5); -} diff --git a/cloog-0.17.0/test/wavefront.c b/cloog-0.17.0/test/wavefront.c deleted file mode 100644 index c6d2868..0000000 --- a/cloog-0.17.0/test/wavefront.c +++ /dev/null @@ -1,8 +0,0 @@ -/* Generated from ../../../git/cloog/test/wavefront.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if ((m >= 1) && (n >= 1)) { - for (c1=2;c1<=n+m;c1++) { - for (c2=max(1,c1-m);c2<=min(n,c1-1);c2++) { - S1(c2,c1-c2) ; - } - } -} diff --git a/cloog-0.17.0/test/wavefront.cloog b/cloog-0.17.0/test/wavefront.cloog deleted file mode 100644 index 845b368..0000000 --- a/cloog-0.17.0/test/wavefront.cloog +++ /dev/null @@ -1,27 +0,0 @@ -c - -1 4 -# n m 1 -1 0 0 1 -1 -n m - -1 - -1 -4 6 -# i j n m 1 -1 1 0 0 0 -1 -1 -1 0 1 0 0 -1 0 1 0 0 -1 -1 0 -1 0 1 0 -0 0 0 - -0 - -1 -2 8 -# c1 c2 i j n m 1 -0 1 0 -1 -1 0 0 0 -0 0 1 -1 0 0 0 0 -0 diff --git a/cloog-0.17.0/test/wavefront.good.c b/cloog-0.17.0/test/wavefront.good.c deleted file mode 100644 index c6e721f..0000000 --- a/cloog-0.17.0/test/wavefront.good.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Generated from ../../../git/cloog/test/wavefront.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.00s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } - -void test(int n, int m) -{ - /* Scattering iterators. */ - int c1, c2; - /* Original iterators. */ - int i, j; - if ((n >= 1) && (m >= 1)) { - for (c1=2;c1<=n+m;c1++) { - for (c2=max(1,c1-m);c2<=min(n,c1-1);c2++) { - j = c1-c2 ; - S1(c2,c1-c2) ; - } - } - } -} diff --git a/cloog-0.17.0/test/yosr.c b/cloog-0.17.0/test/yosr.c deleted file mode 100644 index 341c787..0000000 --- a/cloog-0.17.0/test/yosr.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Generated from ../../../git/cloog/test/yosr.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. */ -if (n >= 2) { - for (j=2;j<=n;j++) { - S1(1,j) ; - } - for (proc=2;proc<=n-1;proc++) { - for (i=1;i<=proc-1;i++) { - for (j=i+1;j<=n;j++) { - S2(i,j,proc) ; - } - } - for (j=proc+1;j<=n;j++) { - S1(proc,j) ; - } - } - for (i=1;i<=n-1;i++) { - for (j=i+1;j<=n;j++) { - S2(i,j,n) ; - } - } -} diff --git a/cloog-0.17.0/test/yosr.cloog b/cloog-0.17.0/test/yosr.cloog deleted file mode 100644 index cefa035..0000000 --- a/cloog-0.17.0/test/yosr.cloog +++ /dev/null @@ -1,65 +0,0 @@ -# language: C -c - -# One parameter : n -1 3 -# n 1 -1 0 1 -# We want to set the parameter names... -1 -# and 'n' is the name of the unique parameter -n - -2 # Number of statements: 2. - -1 -# {i, j | 1<=i<=n-1; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 -1 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 - -1 -# {i, j, k | 1<=i<=n-1; i+1<=j<=n i+1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 -1 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 -1 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 -# We want to let CLooG set the iterator names. -0 - -2 -# Scattering functions -1 6 -# c1 i j n 1 -0 1 -1 0 0 0 - -1 7 -# c1 i j k n 1 -0 1 0 0 -1 0 0 -1 -proc - -2 -# Scattering functions -3 8 -# c1 c2 c3 i j n 1 -0 1 0 0 -1 0 0 0 -0 0 1 0 0 0 0 0 -0 0 0 1 0 0 0 0 - -3 9 -# c1 c2 c3 i j k n 1 -0 1 0 0 0 0 -1 0 0 -0 0 1 0 0 0 0 0 -1 -0 0 0 1 0 0 -1 0 0 -0 - diff --git a/cloog-0.17.0/test/yosr.good.c b/cloog-0.17.0/test/yosr.good.c deleted file mode 100644 index 8845a2c..0000000 --- a/cloog-0.17.0/test/yosr.good.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Generated from ../../../git/cloog/test/yosr.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i,j,k) { hash(2); hash(i); hash(j); hash(k); } - -void test(int n) -{ - /* Scattering iterators. */ - int proc; - /* Original iterators. */ - int i, j, k; - if (n >= 2) { - for (j=2;j<=n;j++) { - S1(1,j) ; - } - } - for (proc=2;proc<=n-1;proc++) { - for (i=1;i<=proc-1;i++) { - for (j=i+1;j<=n;j++) { - S2(i,j,proc) ; - } - } - for (j=proc+1;j<=n;j++) { - S1(proc,j) ; - } - } - if (n >= 2) { - for (i=1;i<=n-1;i++) { - for (j=i+1;j<=n;j++) { - S2(i,j,n) ; - } - } - } -} diff --git a/cloog-0.17.0/test/yosr2.c b/cloog-0.17.0/test/yosr2.c deleted file mode 100644 index 999eb41..0000000 --- a/cloog-0.17.0/test/yosr2.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Generated from ../../../git/cloog/test/yosr2.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.02s. */ -for (i=1;i<=M;i++) { - S2(i) ; -} -for (proc=2;proc<=M-1;proc++) { - for (i=1;i<=proc-1;i++) { - S4(i,proc) ; - } - for (j=1;j<=proc-1;j++) { - S1(proc,j) ; - } - for (j=proc+1;j<=M;j++) { - for (k=1;k<=proc-1;k++) { - S3(proc,j,k) ; - } - } -} -for (i=1;i<=M-1;i++) { - S4(i,M) ; -} -for (j=1;j<=M-1;j++) { - S1(M,j) ; -} diff --git a/cloog-0.17.0/test/yosr2.cloog b/cloog-0.17.0/test/yosr2.cloog deleted file mode 100644 index e9dea4a..0000000 --- a/cloog-0.17.0/test/yosr2.cloog +++ /dev/null @@ -1,71 +0,0 @@ -# language: C -c - -# parameter n -1 3 -# n 1 -1 1 -2 -0 - -4 # Number of statements - -1 -# S2 {k, l | 1<=k<=n; 1<=l<=k-1} -4 5 -# k l n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 0 1 0 -1 -1 1 -1 0 -1 -0 0 0 - -1 -# S3 {k | 1<=k<=n} -2 4 -# k n 1 -1 1 0 -1 -1 -1 1 0 -0 0 0 - -1 -# S5 {k, i, m | 1<=k<=n; k+1<=i<=n 1<=m<=k-1} -6 6 -# k i m n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 0 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 0 0 1 0 -1 -1 1 0 -1 0 -1 -0 0 0 - -1 -# S4 {k, i | 1<=k<=n; k+1<=i<=n} -4 5 -# k i n 1 -1 1 0 0 -1 -1 -1 0 1 0 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 -0 - - -4 # Scattering functions -1 6 -# c1 k l n 1 -0 1 -1 0 0 0 - -1 5 -# c1 k n 1 -0 1 0 0 0 - -1 7 -# c1 k i m n 1 -0 1 -1 0 0 0 0 - -1 6 -# c1 k i n 1 -0 1 0 -1 0 0 -1 -proc diff --git a/cloog-0.17.0/test/yosr2.good.c b/cloog-0.17.0/test/yosr2.good.c deleted file mode 100644 index 7608db8..0000000 --- a/cloog-0.17.0/test/yosr2.good.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Generated from ../../../git/cloog/test/yosr2.cloog by CLooG 0.14.0-72-gefe2fc2 gmp bits in 0.01s. */ -extern void hash(int); - -/* Useful macros. */ -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define max(x,y) ((x) > (y) ? (x) : (y)) -#define min(x,y) ((x) < (y) ? (x) : (y)) - -#define S1(i,j) { hash(1); hash(i); hash(j); } -#define S2(i) { hash(2); hash(i); } -#define S3(i,j,k) { hash(3); hash(i); hash(j); hash(k); } -#define S4(i,j) { hash(4); hash(i); hash(j); } - -void test(int M) -{ - /* Scattering iterators. */ - int proc; - /* Original iterators. */ - int i, j, k; - for (i=1;i<=M;i++) { - S2(i) ; - } - for (proc=2;proc<=M-1;proc++) { - for (i=1;i<=proc-1;i++) { - S4(i,proc) ; - } - for (j=1;j<=proc-1;j++) { - S1(proc,j) ; - } - for (j=proc+1;j<=M;j++) { - for (k=1;k<=proc-1;k++) { - S3(proc,j,k) ; - } - } - } - for (i=1;i<=M-1;i++) { - S4(i,M) ; - } - for (j=1;j<=M-1;j++) { - S1(M,j) ; - } -} diff --git a/cloog-0.17.0/test/yosrf.cloog b/cloog-0.17.0/test/yosrf.cloog deleted file mode 100644 index 1661ef7..0000000 --- a/cloog-0.17.0/test/yosrf.cloog +++ /dev/null @@ -1,65 +0,0 @@ -# language: FORTRAN -f - -# One parameter : n -1 3 -# n 1 -1 0 1 -# We want to set the parameter names... -1 -# and 'n' is the name of the unique parameter -n - -2 # Number of statements: 2. - -1 -# {i, j | 1<=i<=n-1; i+1<=j<=n} -4 5 -# i j n 1 -1 1 0 0 -1 -1 -1 0 1 -1 -1 -1 1 0 -1 -1 0 -1 1 0 -0 0 0 - -1 -# {i, j, k | 1<=i<=n-1; i+1<=j<=n i+1<=k<=n} -6 6 -# i j k n 1 -1 1 0 0 0 -1 -1 -1 0 0 1 -1 -1 -1 1 0 0 -1 -1 0 -1 0 1 0 -1 -1 0 1 0 -1 -1 0 0 -1 1 0 -0 0 0 -# We want to let CLooG set the iterator names. -0 - -2 -# Scattering functions -1 6 -# c1 i j n 1 -0 1 -1 0 0 0 - -1 7 -# c1 i j k n 1 -0 1 0 0 -1 0 0 -1 -proc - -2 -# Scattering functions -3 8 -# c1 c2 c3 i j n 1 -0 1 0 0 -1 0 0 0 -0 0 1 0 0 0 0 0 -0 0 0 1 0 0 0 0 - -3 9 -# c1 c2 c3 i j k n 1 -0 1 0 0 0 0 -1 0 0 -0 0 1 0 0 0 0 0 -1 -0 0 0 1 0 0 -1 0 0 -0 - diff --git a/cloog-0.17.0/test/yosrf.f b/cloog-0.17.0/test/yosrf.f deleted file mode 100644 index 2d8efad..0000000 --- a/cloog-0.17.0/test/yosrf.f +++ /dev/null @@ -1,21 +0,0 @@ -! Generated from ../../../git/cloog/test/yosrf.cloog by CLooG 0.14.0-136-gb91ef26 gmp bits in 0.01s. -IF (n >= 2) THEN - DO j=2, n - S1(1,j) - END DO - DO proc=2, n-1 - DO i=1, proc-1 - DO j=i+1, n - S2(i,j,proc) - END DO - END DO - DO j=proc+1, n - S1(proc,j) - END DO - END DO - DO i=1, n-1 - DO j=i+1, n - S2(i,j,n) - END DO - END DO -END IF -- GitLab

x##0 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 col0 sh gr -/Times-Roman-iso ff 390.00 scf sf -9075 1575 m -gs 1 -1 sc (j<=m) col0 sh gr -/Times-Bold-iso ff 390.00 scf sf -9450 5475 m -gs 1 -1 sc (i) col0 sh gr -/Times-Roman-iso ff 390.00 scf sf -3825 825 m -gs 1 -1 sc (i>=2) col0 sh gr -/Times-Roman-iso ff 390.00 scf sf -4875 825 m -gs 1 -1 sc (j<=n+2-i) col0 sh gr -% here ends figure; -$F2psEnd -rs -showpage diff --git a/cloog-0.17.0/osl/doc/images/basic.fig b/cloog-0.17.0/osl/doc/images/basic.fig deleted file mode 100644 index 7fe0a97..0000000 --- a/cloog-0.17.0/osl/doc/images/basic.fig +++ /dev/null @@ -1,100 +0,0 @@ -#FIG 3.2 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 3900 75 75 5400 3900 5400 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 3900 75 75 4800 3900 4800 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 3300 75 75 4200 3300 4200 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 3300 75 75 4800 3300 4800 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 2700 75 75 4200 2700 4200 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 3900 75 75 4200 3900 4200 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 3900 75 75 6000 3900 6000 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 3900 75 75 6600 3900 6600 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7200 3900 75 75 7200 3900 7200 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7800 3900 75 75 7800 3900 7800 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7200 3300 75 75 7200 3300 7200 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 3300 75 75 6600 3300 6600 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 3300 75 75 6000 3300 6000 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 3300 75 75 5400 3300 5400 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 2700 75 75 4800 2700 4800 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 2700 75 75 5400 2700 5400 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 2700 75 75 6000 2700 6000 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 2700 75 75 6600 2700 6600 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 2100 75 75 6000 2100 6000 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 2100 75 75 5400 2100 5400 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 2100 75 75 4800 2100 4800 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 2100 75 75 4200 2100 4200 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 1500 75 75 4200 1500 4200 1575 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 1500 75 75 4800 1500 4800 1575 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 1500 75 75 5400 1500 5400 1575 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7800 3300 75 75 7800 3300 7800 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 8400 3900 75 75 8400 3900 8400 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 7200 2700 75 75 7200 2700 7200 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 2100 75 75 6600 2100 6600 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 1500 75 75 6000 1500 6000 1575 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 120.00 180.00 - 3000 5100 9600 5100 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 120.00 180.00 - 3000 5100 3000 900 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 4500 2925 4500 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 3900 2925 3900 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 3300 2925 3300 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3600 5100 3600 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 4200 5100 4200 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 5400 5100 5400 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 4800 5100 4800 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 6000 5100 6000 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 6600 5100 6600 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 2700 2925 2700 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 1500 2925 1500 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 2100 2925 2100 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 3000 1500 9000 1500 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 8400 5100 8400 900 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 7200 5100 7200 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 7800 5100 7800 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 8400 5100 8400 5175 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 3000 3900 9000 3900 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 5400 900 9600 5100 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 4200 5100 4200 900 -2 3 0 0 0 7 51 -1 15 0.000 0 0 -1 0 0 5 - 4200 1500 4200 3900 8400 3900 6000 1500 4200 1500 -4 0 0 50 -1 2 26 0.0000 0 270 195 2625 4650 1\001 -4 0 0 50 -1 2 26 0.0000 0 270 195 2625 4050 2\001 -4 0 0 50 -1 2 26 0.0000 0 270 195 3525 5550 1\001 -4 0 0 50 -1 2 26 0.0000 0 345 135 2700 1050 j\001 -4 0 0 50 -1 0 26 0.0000 0 270 750 8025 825 i<=n\001 -4 0 0 50 -1 2 26 0.0000 0 270 195 4125 5550 2\001 -4 0 0 50 -1 2 26 0.0000 0 180 225 8325 5550 n\001 -4 0 0 50 -1 2 26 0.0000 0 180 330 2550 1575 m\001 -4 0 0 50 -1 0 26 0.0000 0 360 750 9075 3975 j>=2\001 -4 0 0 50 -1 0 26 0.0000 0 360 855 9075 1575 j<=m\001 -4 0 0 50 -1 2 26 0.0000 0 270 105 9450 5475 i\001 -4 0 0 50 -1 0 26 0.0000 0 270 750 3825 825 i>=2\001 -4 0 0 50 -1 0 26 0.0000 0 360 1410 4875 825 j<=n+2-i\001 diff --git a/cloog-0.17.0/osl/doc/images/basic.jpg b/cloog-0.17.0/osl/doc/images/basic.jpg deleted file mode 100644 index 995b1d816207e6585df9c61ea65745d38e0db845..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21180 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 p1w&AAuAuLkmzJ*pirpYk=2 - | | j<=n+2-i - | |\ | i<=n - | | \ | -m-+-****---+-j<=m - | ***** | - | ****** | - | *******| -2-+-********-j>=2 - | | |\ -0-+-+------+--->i - | | | - 0 2 n diff --git a/cloog-0.17.0/osl/doc/images/basic1.eps b/cloog-0.17.0/osl/doc/images/basic1.eps deleted file mode 100644 index 9ff60bc..0000000 --- a/cloog-0.17.0/osl/doc/images/basic1.eps +++ /dev/null @@ -1,332 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: basic1.fig -%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7 -%%CreationDate: Fri May 9 15:48:25 2008 -%%For: cedb@localhost (Bastoul Cedric) -%%BoundingBox: 0 0 347 303 -%Magnification: 1.0000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save -newpath 0 303 moveto 0 0 lineto 347 0 lineto 347 303 lineto closepath clip newpath --152.1 333.9 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def - /DrawEllipse { - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def - /savematrix mtrx currentmatrix def - x y tr xrad yrad sc 0 0 1 startangle endangle arc - closepath - savematrix setmatrix - } def - -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06000 0.06000 sc -% -% Fig objects follow -% -% -% here starts figure with depth 51 -% Polyline -0 slj -0 slc -0.000 slw -n 4200 1500 m 4200 3900 l 6675 3900 l 6675 1500 l - cp gs col7 0.75 shd ef gr -% Ellipse -7.500 slw - [15 45] 45 sd -1 slc -n 5400 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6600 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6600 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 5400 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 5400 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6600 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 5400 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 1500 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 1500 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 5400 1500 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6600 2100 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6000 1500 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 6653 1522 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Polyline -0 slc -gs clippath -6970 5160 m 7215 5160 l 7215 5040 l 6970 5040 l 6970 5040 l 7150 5100 l 6970 5160 l cp -eoclip -n 3000 5100 m - 7200 5100 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 6970 5160 m 7150 5100 l 6970 5040 l 6970 5160 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -3060 1130 m 3060 885 l 2940 885 l 2940 1130 l 2940 1130 l 3000 950 l 3060 1130 l cp -eoclip -n 3000 5100 m - 3000 900 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 3060 1130 m 3000 950 l 2940 1130 l 3060 1130 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -n 3000 4500 m - 2925 4500 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 3900 m - 2925 3900 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 3300 m - 2925 3300 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3600 5100 m - 3600 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 4200 5100 m - 4200 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 5400 5100 m - 5400 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 4800 5100 m - 4800 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 6000 5100 m - 6000 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 6600 5100 m - 6600 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 2700 m - 2925 2700 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 1500 m - 2925 1500 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 2100 m - 2925 2100 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline - [15 45] 45 sd -n 3000 1500 m - 7200 1500 l gs col0 s gr [] 0 sd -% Polyline - [15 45] 45 sd -n 3000 3900 m - 7200 3900 l gs col0 s gr [] 0 sd -% Polyline - [15 45] 45 sd -n 4200 5100 m - 4200 900 l gs col0 s gr [] 0 sd -% Polyline - [15 45] 45 sd -n 6675 5100 m - 6675 900 l gs col0 s gr [] 0 sd -/Times-Bold ff 433.33 scf sf -2625 4650 m -gs 1 -1 sc (1) col0 sh gr -/Times-Bold ff 433.33 scf sf -2625 4050 m -gs 1 -1 sc (2) col0 sh gr -/Times-Bold ff 433.33 scf sf -3525 5550 m -gs 1 -1 sc (1) col0 sh gr -/Times-Bold ff 433.33 scf sf -2700 1050 m -gs 1 -1 sc (j) col0 sh gr -/Times-Bold ff 433.33 scf sf -4125 5550 m -gs 1 -1 sc (2) col0 sh gr -/Times-Roman ff 433.33 scf sf -3825 825 m -gs 1 -1 sc (i>=2) col0 sh gr -/Times-Bold ff 433.33 scf sf -2550 1575 m -gs 1 -1 sc (N) col0 sh gr -/Times-Bold ff 433.33 scf sf -6450 5550 m -gs 1 -1 sc (N) col0 sh gr -/Times-Bold ff 433.33 scf sf -7275 5475 m -gs 1 -1 sc (i) col0 sh gr -/Times-Roman ff 433.33 scf sf -6300 900 m -gs 1 -1 sc (i<=N) col0 sh gr -/Times-Roman ff 433.33 scf sf -7350 1575 m -gs 1 -1 sc (j<=N) col0 sh gr -/Times-Roman ff 433.33 scf sf -7350 3975 m -gs 1 -1 sc (j>=2) col0 sh gr -% here ends figure; -$F2psEnd -rs -showpage -%%Trailer -%EOF diff --git a/cloog-0.17.0/osl/doc/images/basic1.fig b/cloog-0.17.0/osl/doc/images/basic1.fig deleted file mode 100644 index caf0ebd..0000000 --- a/cloog-0.17.0/osl/doc/images/basic1.fig +++ /dev/null @@ -1,86 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5-alpha5 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 3900 75 75 5400 3900 5400 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 3900 75 75 4800 3900 4800 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 3300 75 75 4200 3300 4200 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 3300 75 75 4800 3300 4800 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 2700 75 75 4200 2700 4200 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 3900 75 75 4200 3900 4200 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 3900 75 75 6000 3900 6000 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 3900 75 75 6600 3900 6600 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 3300 75 75 6600 3300 6600 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 3300 75 75 6000 3300 6000 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 3300 75 75 5400 3300 5400 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 2700 75 75 4800 2700 4800 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 2700 75 75 5400 2700 5400 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 2700 75 75 6000 2700 6000 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 2700 75 75 6600 2700 6600 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 2100 75 75 6000 2100 6000 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 2100 75 75 5400 2100 5400 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 2100 75 75 4800 2100 4800 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 2100 75 75 4200 2100 4200 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 1500 75 75 4200 1500 4200 1575 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 1500 75 75 4800 1500 4800 1575 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 1500 75 75 5400 1500 5400 1575 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6600 2100 75 75 6600 2100 6600 2175 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6000 1500 75 75 6000 1500 6000 1575 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 6653 1522 75 75 6653 1522 6653 1597 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 120.00 180.00 - 3000 5100 7200 5100 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 120.00 180.00 - 3000 5100 3000 900 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 4500 2925 4500 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 3900 2925 3900 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 3300 2925 3300 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3600 5100 3600 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 4200 5100 4200 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 5400 5100 5400 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 4800 5100 4800 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 6000 5100 6000 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 6600 5100 6600 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 2700 2925 2700 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 1500 2925 1500 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 2100 2925 2100 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 3000 1500 7200 1500 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 3000 3900 7200 3900 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 4200 5100 4200 900 -2 3 0 0 0 7 51 -1 15 0.000 0 0 -1 0 0 5 - 4200 1500 4200 3900 6675 3900 6675 1500 4200 1500 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 6675 5100 6675 900 -4 0 0 50 -1 2 26 0.0000 0 285 225 2625 4650 1\001 -4 0 0 50 -1 2 26 0.0000 0 285 225 2625 4050 2\001 -4 0 0 50 -1 2 26 0.0000 0 285 225 3525 5550 1\001 -4 0 0 50 -1 2 26 0.0000 0 375 150 2700 1050 j\001 -4 0 0 50 -1 2 26 0.0000 0 285 225 4125 5550 2\001 -4 0 0 50 -1 0 26 0.0000 0 285 825 3825 825 i>=2\001 -4 0 0 50 -1 2 26 0.0000 0 285 315 2550 1575 N\001 -4 0 0 50 -1 2 26 0.0000 0 285 315 6450 5550 N\001 -4 0 0 50 -1 2 26 0.0000 0 285 120 7275 5475 i\001 -4 0 0 50 -1 0 26 0.0000 0 285 915 6300 900 i<=N\001 -4 0 0 50 -1 0 26 0.0000 0 375 915 7350 1575 j<=N\001 -4 0 0 50 -1 0 26 0.0000 0 375 825 7350 3975 j>=2\001 diff --git a/cloog-0.17.0/osl/doc/images/basic1.jpg b/cloog-0.17.0/osl/doc/images/basic1.jpg deleted file mode 100644 index 55830d422b4b1ca0b6cd800fbcb8c2e414df81c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18353 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 BQ*r=2 i<=N - | | | - | | | -N-+-********--j<=N - | ******** - | ******** - | ******** -2-+-********--j>=2 - | | | -0-+-+------+--->i - | | | - 0 2 N diff --git a/cloog-0.17.0/osl/doc/images/basic2.eps b/cloog-0.17.0/osl/doc/images/basic2.eps deleted file mode 100644 index a3781fe..0000000 --- a/cloog-0.17.0/osl/doc/images/basic2.eps +++ /dev/null @@ -1,256 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: basic2.fig -%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7 -%%CreationDate: Sat May 10 21:23:40 2008 -%%For: cedb@localhost (Bastoul Cedric) -%%BoundingBox: 0 0 260 235 -%Magnification: 1.0000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save -newpath 0 235 moveto 0 0 lineto 260 0 lineto 260 235 lineto closepath clip newpath --156.6 333.9 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def - /DrawEllipse { - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def - /savematrix mtrx currentmatrix def - x y tr xrad yrad sc 0 0 1 startangle endangle arc - closepath - savematrix setmatrix - } def - -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06000 0.06000 sc -% -% Fig objects follow -% -% -% here starts figure with depth 51 -% Polyline -0 slj -0 slc -0.000 slw -n 4200 2700 m 4200 3900 l 5400 3900 l 5400 2700 l - cp gs col7 0.75 shd ef gr -% Ellipse -7.500 slw - [15 45] 45 sd -1 slc -n 5400 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4200 3900 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 5400 3300 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 4800 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Ellipse - [15 45] 45 sd -n 5400 2700 75 75 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr - [] 0 sd -% Polyline -0 slc -gs clippath -5770 5160 m 6015 5160 l 6015 5040 l 5770 5040 l 5770 5040 l 5950 5100 l 5770 5160 l cp -eoclip -n 3000 5100 m - 6000 5100 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 5770 5160 m 5950 5100 l 5770 5040 l 5770 5160 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -gs clippath -3060 2330 m 3060 2085 l 2940 2085 l 2940 2330 l 2940 2330 l 3000 2150 l 3060 2330 l cp -eoclip -n 3000 5100 m - 3000 2100 l gs col0 s gr gr - -% arrowhead -15.000 slw -n 3060 2330 m 3000 2150 l 2940 2330 l 3060 2330 l cp gs 0.00 setgray ef gr col0 s -% Polyline -7.500 slw -n 3000 4500 m - 2925 4500 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 3900 m - 2925 3900 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 3300 m - 2925 3300 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3600 5100 m - 3600 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 4200 5100 m - 4200 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 5400 5100 m - 5400 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 4800 5100 m - 4800 5175 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline -n 3000 2700 m - 2925 2700 l gs 0.00 setgray ef gr gs col0 s gr -% Polyline - [15 45] 45 sd -n 3000 3900 m - 6000 3900 l gs col0 s gr [] 0 sd -% Polyline - [15 45] 45 sd -n 4200 5100 m - 4200 2100 l gs col0 s gr [] 0 sd -% Polyline - [15 45] 45 sd -n 5400 5175 m - 5400 2100 l gs col0 s gr [] 0 sd -% Polyline - [15 45] 45 sd -n 3000 2700 m - 6000 2700 l gs col0 s gr [] 0 sd -/Times-Bold ff 433.33 scf sf -2625 4650 m -gs 1 -1 sc (1) col0 sh gr -/Times-Bold ff 433.33 scf sf -2625 4050 m -gs 1 -1 sc (2) col0 sh gr -/Times-Bold ff 433.33 scf sf -3525 5550 m -gs 1 -1 sc (1) col0 sh gr -/Times-Bold ff 433.33 scf sf -4125 5550 m -gs 1 -1 sc (2) col0 sh gr -/Times-Bold ff 433.33 scf sf -5250 5550 m -gs 1 -1 sc (4) col0 sh gr -/Times-Bold ff 433.33 scf sf -2625 2850 m -gs 1 -1 sc (4) col0 sh gr -/Times-Bold ff 433.33 scf sf -2700 2175 m -gs 1 -1 sc (j) col0 sh gr -/Times-Roman ff 433.33 scf sf -3825 1950 m -gs 1 -1 sc (i>=2) col0 sh gr -/Times-Roman ff 433.33 scf sf -5025 1950 m -gs 1 -1 sc (i<=4) col0 sh gr -/Times-Roman ff 433.33 scf sf -6075 3975 m -gs 1 -1 sc (j>=2) col0 sh gr -/Times-Roman ff 433.33 scf sf -6075 2775 m -gs 1 -1 sc (j<=4) col0 sh gr -/Times-Bold ff 433.33 scf sf -6000 5550 m -gs 1 -1 sc (i) col0 sh gr -% here ends figure; -$F2psEnd -rs -showpage -%%Trailer -%EOF diff --git a/cloog-0.17.0/osl/doc/images/basic2.fig b/cloog-0.17.0/osl/doc/images/basic2.fig deleted file mode 100644 index c6a4161..0000000 --- a/cloog-0.17.0/osl/doc/images/basic2.fig +++ /dev/null @@ -1,62 +0,0 @@ -#FIG 3.2 Produced by xfig version 3.2.5-alpha5 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 3900 75 75 5400 3900 5400 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 3900 75 75 4800 3900 4800 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 3300 75 75 4200 3300 4200 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 3300 75 75 4800 3300 4800 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 2700 75 75 4200 2700 4200 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4200 3900 75 75 4200 3900 4200 3975 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 3300 75 75 5400 3300 5400 3375 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 4800 2700 75 75 4800 2700 4800 2775 -1 3 2 1 0 0 50 -1 20 3.000 1 0.0000 5400 2700 75 75 5400 2700 5400 2775 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 120.00 180.00 - 3000 5100 6000 5100 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 1 1 2.00 120.00 180.00 - 3000 5100 3000 2100 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 4500 2925 4500 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 3900 2925 3900 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 3300 2925 3300 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3600 5100 3600 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 4200 5100 4200 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 5400 5100 5400 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 4800 5100 4800 5175 -2 1 0 1 0 0 50 -1 20 3.000 0 0 -1 0 0 2 - 3000 2700 2925 2700 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 3000 3900 6000 3900 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 4200 5100 4200 2100 -2 3 0 0 0 7 51 -1 15 0.000 0 0 -1 0 0 5 - 4200 2700 4200 3900 5400 3900 5400 2700 4200 2700 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 5400 5175 5400 2100 -2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 - 3000 2700 6000 2700 -4 0 0 50 -1 2 26 0.0000 0 285 225 2625 4650 1\001 -4 0 0 50 -1 2 26 0.0000 0 285 225 2625 4050 2\001 -4 0 0 50 -1 2 26 0.0000 0 285 225 3525 5550 1\001 -4 0 0 50 -1 2 26 0.0000 0 285 225 4125 5550 2\001 -4 0 0 50 -1 2 26 0.0000 0 285 225 5250 5550 4\001 -4 0 0 50 -1 2 26 0.0000 0 285 225 2625 2850 4\001 -4 0 0 50 -1 2 26 0.0000 0 375 150 2700 2175 j\001 -4 0 0 50 -1 0 26 0.0000 0 285 825 3825 1950 i>=2\001 -4 0 0 50 -1 0 26 0.0000 0 285 825 5025 1950 i<=4\001 -4 0 0 50 -1 0 26 0.0000 0 375 825 6075 3975 j>=2\001 -4 0 0 50 -1 0 26 0.0000 0 375 825 6075 2775 j<=4\001 -4 0 0 50 -1 2 26 0.0000 0 285 120 6000 5550 i\001 diff --git a/cloog-0.17.0/osl/doc/images/basic2.jpg b/cloog-0.17.0/osl/doc/images/basic2.jpg deleted file mode 100644 index ab9f0579d4e0490494ff9d912d2a3192717528a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12369 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 Oo6$5dXwrcF|C<1hW;&(- diff --git a/cloog-0.17.0/osl/doc/images/basic2.pdf b/cloog-0.17.0/osl/doc/images/basic2.pdf deleted file mode 100644 index 38ab72d3b2c7f682bd59d27cf1ac82520d11e20e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6240 zcmY!laB=?*7)^!{Z^D(|m3`#I(I0TN}3{!TWJLoC1L2-s=^wxgAM+ywmz5bsrSx%8+fA+rR=GDLI ze^`q5S^eFj^7UfajMObtULDd8j!r%q89RaJx8dnoEuz8CgDSViRy;C!9e0Fl`c=Qw zowsgfbCj(1ExK-L(W$)J_W0AR^PZ0sUWCnlvb0#kwC~-~%PGqzAD`Pc!G!PYvf`{u zc8hmU7`BTs0v;G^GXqj+oTGZyH$As^h-;nmYHAcQCb^rBW>qVA2WgS;w z{VG(tQ2gHQrpKF3CKwjzteXUNce=V~9fX&EX0^*cY+<>eGk$xu@TAuaE59YYEcP@zBKW4MS-z#Z zP1)ea=7ZJ}GE>}VbbH-=d-0Fe_WB3Tzr~F1IzG}CcH4IN!{S{zXU?ZSO5LC*eSB$u zd0*s%#j=m$iAOJ;C#;D7WCCO63_YcGsfFj*<4t$XRCsJ9Tzg7v z8UH<{Lq0V}WZe7QGMD_F#jVJ7*<)|$rtX>}>2{75p9Kx2vv;4nq`3NL_0eNKuIfz! z5fgtJer$U;TSs-tvExTBIBy7vI1_NTUwcFQZ!Pr***>k54MBe+xz_Q1o166c*`=Fl z6IMAc|8O>=Bs*l)sVLD{qpsl1A4A2~z0^NuJZ=8ngLStLt(DvM(Zu0a&i3zZ`M*EN zbj?+=*~Y&4Q~K@n4r8_5dyQ8&VV~11b{no6Ptv}A`6{&NnF(Ja*Xrf^(`6*K^~L^vU@8